update-agent-infralisted
Install: claude install-skill fitlab-ai/agent-infra
# 更新项目
## 执行约束
1. **确定性步骤脚本化**:managed / ejected 文件处理、注册表同步、配置更新
全部由 `sync-templates.js` 脚本执行,不得逐文件手工处理。
脚本保证原子性和幂等性。
2. **禁止委托子代理**:阶段 B(merged 文件智能合并)必须在主会话中直接执行,
不得委托给子代理。子代理上下文有限,容易误判文件内容。
## 阶段 A:运行同步脚本(确定性)
执行以下命令,一次性处理所有确定性步骤:
```bash
node .agents/skills/update-agent-infra/scripts/sync-templates.js
```
脚本读取 `.agents/.airc.json`,并通过 npm 自动定位已安装的 `@fitlab-ai/agent-infra/templates/` 目录。同步前会合并 `templates.sources` 中配置的外部模板源;相同文件以内置模板为准,多个外部源之间后者覆盖前者,冲突会写入报告。然后自动完成:
- 检测模板源版本
- 同步文件注册表(`defaults.json` → `.agents/.airc.json`)
- 处理所有 managed 文件(语言选择 → 排除 merged/ejected → 占位符渲染 → 覆盖写入)
- 处理 ejected 文件(仅首次安装时创建)
- 更新 `.agents/.airc.json`(`templateVersion`、文件列表)
脚本输出 JSON 到 stdout,解析并记录报告内容。
**关键字段**:
- `error`:错误信息(如非空则停止并报告)
- `templateVersion`:模板源当前版本
- `templateRoot`:模板文件根目录绝对路径
- `templateSources.conflicts`:外部模板源冲突列表;报告中必须显式展示,说明哪些文件因内置模板或后续外部源获胜而被忽略
- `managed.written` / `managed.created`:已更新/新建的 managed 文件
- `managed.removed`:被删除的 managed 文件(包括模板迁移时移除的旧路径)
- `managed.skippedPlatform`:因归属其他平台而被跳过的 managed / merged 条目
- `merged.pending`:需要 AI 处理的 merged 文件列表
- 每项包含 `target`(项目中的目标路径)和 `template`(模板根目录下的相对路径)
- `registryAdded`:新增的文件注册条目
- `selfUpdate`:是否为自更新模式
- `configUpdated`:`.agents/.airc.json` 是否已更新
## 阶段 B:处理 merged 文件(AI 智能合并)
根据报告中 `merged.pending` 列表,逐个文件处理。对于每个条目:
1. 从 `<templateRoot>/<template>` 读取模板文件
2. 渲染占位符:将双花括号包裹的 `project` 和 `org` 占位符替换为 .agents/.airc.json 中的实际值
3. 读取本地当前文件(`<项目根>/<target>`)
**如果本地文件不存在**(首次安装),直接写入渲染后的模板,��过合并。
如果本地