运行时环境
Node.js
编译器与 Workbench 需要 Node.js 22.19 或更高;除非 runtime.node 抬高下限,生成式可执行文件面向
Node.js 22.12 或更高。两者都在安装中说明,而所选的可执行文件下限
会作为 runtime.node 记录在产物清单中。
宿主路径 token
生成的文档通过各宿主会替换的那个 token 引用插件根目录,编译器按 target 写出正确的拼写,而不是假定只有 一种:
替换是按位置的,而不是全局的。Codex 的 ${PLUGIN_ROOT} 只是其生成的钩子命令的命令根,别无他用:
Codex 的 MCP 运行时不插值任何路径 token,因此 MCP command、args 或 env 取值中的插件根 token
只有在位于取值开头、且该服务器的 cwd 就是插件根时才被接受,此时编译器会把它改写为 cwd: "./"
之下的 ./ 相对路径;嵌在中间的 token、缺少该 cwd 的 token,以及任何插件数据或工作区根 token
都是构建错误。Claude Code 只在 Skill 与 agent 内容、钩子与 monitor 命令、MCP 服务器
以及 LSP 服务器中替换 ${CLAUDE_PLUGIN_ROOT} 及其同类——绝不在 settings.json 中替换,这正是
claude.settings 直接拒绝路径 token 的原因。Cursor 被固定的加载器有自己的可替换字段表,位于该表之外的
token 会在构建时报告 AB6028,并由 Doctor 报告 AB7320。
环境变量
这三个原生冒烟测试的开关之所以存在,是因为那些运行需要一个真实的、已登录的 CLI;它们绝不属于日常测试 运行的一部分。
mcp run 下的 .env 优先级
agent-bundle mcp run 按三层组合启动环境,优先级由低到高:
- 生成式服务器自身的 env,其中路径 token 已经解析完毕。
.env文件层。- 操作者真实的
process.env,因此已导出的变量总是胜出。
.env 层是项目根目录下(运行时称之为工作区根目录)Rsbuild 的约定集合 —— .env、.env.local、
.env.<mode>、.env.<mode>.local —— 除非 --env-file <path> 用你指定的那些文件替换它,或者
--no-env 把它移除。
这两个标志互斥。文件被读入一个临时对象,因此真实的 process.env 绝不会被改动。
持久状态
持久状态解析到 $AGENT_BUNDLE_PLUGIN_ROOT/state,回退到产物根目录,对 CLI bin 则回退到
./.agent-bundle/state。只有 workspace-durable 状态定义使用 SQLite 驱动;其他生命期使用内存驱动,
不在磁盘上留下任何东西。
在 mcp run 之下,env 取值中的 plugin-root 锚点默认展开到项目根目录,而不是产物:在那里产物只是
一个临时构建产物,把持久状态锚定其上会让状态在每次重建时被割裂。若要按字节忠实地演练一次「复制产物后
启动」,请传入指向产物 target 根目录的 --plugin-root <path>。
当服务器名是单个安全路径段时,逐服务器状态目录直接使用该名字;其他任何名字都会变成内容寻址的
server-<digest> 段,因此像 ../shared 这样的名字绝不可能穿出状态根目录。
默认的状态投影预算为:每次提交 5,000 毫秒、每个事件 262,144 字节、状态 1,048,576 字节、100,000 次修订。
agent-bundle inspect --state 会为每个定义报告解析出的驱动、生命期、持久位置与预算来源。