宿主安装
每个已构建 target 目录都包含一份生成的 INSTALL.md,其中的命令使用捆绑包真实的插件名与市场名。框架
CLI 执行的正是同样的操作:
--from 既接受一个 target 捆绑包目录,也接受一个不含源码的产物根目录,只要该根目录包含所选宿主的
target 目录。
各宿主接受什么
由于 Claude 与 Codex target 始终随行本地市场清单,它们的公开 CLI 可以直接安装输出的目录。当所选宿主
二进制文件不可用时,安装器会以一条带类型的诊断失败,而不是报告一次它并未完成的成功。宿主安装诊断属于
AB700x 家族:捆绑包标识、宿主可用性、作用域、命令失败与冲突检查。
独立安装器
Cursor、portable 与组合 target 包含一个 install.mjs,它把捆绑包复制到
~/.cursor/plugins/local/<name>,且不会覆盖冲突内容:
它的分阶段复制对内容相同的情况是幂等的,并会拒绝版本或内容冲突。它绝不调用 sudo,也绝不修改 PATH。
产物校验会拒绝缺少必需安装表面的内置 target,因此捆绑包不可能在缺少它所承诺的安装器的情况下发布。
相对包的安装器 bin
当包输出随行上述某个宿主包时,构建还会输出一个相对包的安装器 bin。当没有配置的 bin 占用该名字时,它使用
插件名,否则使用 <plugin-name>-install(两者都被占用时追加数字后缀)。请在 package.json 中把这个
名字映射到生成的 dist/bin/*.js 文件;消费者随后运行:
帮助信息只列出实际构建出来的宿主。该可执行文件通过 import.meta.url 在已安装包旁边定位产物目录,绝不
依赖调用方的工作目录,因此无论从哪里调用,它在 node_modules 中都能工作。任何 npm 生命周期都不会执行
安装——安装一个包绝不会改动宿主的插件状态。
开发期安装是另一回事
agent-bundle dev --install-host <host> 维护的是一个标记为开发用的安装,它跟随成功的重建 epoch,
带有原子的世代切换与一条稳定的 proxy 命令。这部分内容在
开发者 Workbench中,与 agent-bundle install 不是同一个操作。
重建后重新安装
每个输出的安装器——agent-bundle install <host>、相对包的 bin 与独立的 install.mjs——共用同一套替换策略。
内容完全相同的副本是 already-installed 空操作。版本相同但内容哈希不同的副本会被自动替换,因此不升版本
地重建不再需要卸载加 rm -rf。版本不同则以 AB7005 拒绝,除非传入 --replace(别名 --force);外来目录
——不是本插件安装器放置的——无论如何都会被拒绝。Cursor 副本携带安装回执(.agent-bundle-install.json:
插件、版本、宿主、内容哈希、归属文件);替换就地进行,只触碰归属文件,绝不动 state/ 之类的非归属条目,
--replace 会接管回执出现之前的副本。Claude 的替换先运行 claude plugin uninstall --keep-data 再重新安装,
因为 plugin update 受版本门控;Codex 先 codex plugin remove 再 add。输出的 INSTALL.md 按宿主记录了
同样的步骤。
在不改动的前提下检查安装
Doctor 是只读的。它探测宿主、清点已安装的捆绑包、把它们与提供的捆绑包做比对、检查注册证明、采样运行时
端点的健康状况与身份、清点持久状态,并对已安装的字节重新运行被固定的、无进程的文档与加载器校验器。它
绝不修复任何东西。带 --from 时,它按宿主把已安装副本报告为 current、stale(AB7308)、version-mismatch
(AB7309)、foreign(AB7321)或 not-installed(AB7307)。