@fitlab-ai/agent-infra 0.8.3 → 0.8.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/README.zh-CN.md +10 -0
  2. package/bin/cli.ts +1 -1
  3. package/dist/bin/cli.js +1 -1
  4. package/dist/lib/cp.js +56 -15
  5. package/dist/lib/defaults.json +9 -0
  6. package/dist/lib/init.js +5 -0
  7. package/dist/lib/sandbox/capture.js +5 -3
  8. package/dist/lib/sandbox/clipboard/bridge.js +12 -9
  9. package/dist/lib/sandbox/clipboard/inbox.js +82 -0
  10. package/dist/lib/sandbox/commands/create.js +68 -26
  11. package/dist/lib/sandbox/engine.js +33 -3
  12. package/dist/lib/sandbox/engines/colima.js +2 -2
  13. package/dist/lib/sandbox/runtimes/base.dockerfile +7 -0
  14. package/dist/lib/sandbox/shell.js +9 -1
  15. package/dist/lib/sandbox/tools.js +2 -2
  16. package/dist/lib/server/daemon.js +9 -0
  17. package/dist/lib/server/process-control.js +66 -73
  18. package/dist/lib/server/process-state.js +168 -0
  19. package/dist/lib/update.js +2 -0
  20. package/lib/cp.ts +56 -15
  21. package/lib/defaults.json +9 -0
  22. package/lib/init.ts +9 -0
  23. package/lib/sandbox/capture.ts +5 -3
  24. package/lib/sandbox/clipboard/bridge.ts +14 -12
  25. package/lib/sandbox/clipboard/inbox.ts +83 -0
  26. package/lib/sandbox/commands/create.ts +80 -27
  27. package/lib/sandbox/engine.ts +37 -3
  28. package/lib/sandbox/engines/colima.ts +2 -2
  29. package/lib/sandbox/runtimes/base.dockerfile +7 -0
  30. package/lib/sandbox/shell.ts +11 -2
  31. package/lib/sandbox/tools.ts +5 -5
  32. package/lib/server/daemon.ts +9 -0
  33. package/lib/server/process-control.ts +70 -71
  34. package/lib/server/process-state.ts +183 -0
  35. package/lib/update.ts +6 -0
  36. package/package.json +2 -1
  37. package/runtime/platform-adapters/platform-sync.github.js +1501 -0
  38. package/templates/.agents/README.en.md +5 -0
  39. package/templates/.agents/README.zh-CN.md +5 -0
  40. package/templates/.agents/rules/create-issue.github.en.md +1 -1
  41. package/templates/.agents/rules/create-issue.github.zh-CN.md +1 -1
  42. package/templates/.agents/rules/review-handshake.en.md +5 -4
  43. package/templates/.agents/rules/review-handshake.zh-CN.md +5 -4
  44. package/templates/.agents/rules/testing-discipline.en.md +3 -41
  45. package/templates/.agents/rules/testing-discipline.zh-CN.md +3 -41
  46. package/templates/.agents/scripts/lib/agent-infra-package.js +149 -0
  47. package/templates/.agents/scripts/lib/post-review-commit.js +5 -0
  48. package/templates/.agents/scripts/platform-adapters/platform-sync.github.js +25 -1459
  49. package/templates/.agents/scripts/review-diff-fingerprint.js +95 -24
  50. package/templates/.agents/scripts/validate-artifact.js +144 -38
  51. package/templates/.agents/skills/analyze-task/SKILL.en.md +1 -1
  52. package/templates/.agents/skills/analyze-task/SKILL.zh-CN.md +2 -2
  53. package/templates/.agents/skills/archive-tasks/scripts/archive-tasks.sh +1 -1
  54. package/templates/.agents/skills/block-task/SKILL.en.md +1 -1
  55. package/templates/.agents/skills/block-task/SKILL.zh-CN.md +2 -2
  56. package/templates/.agents/skills/cancel-task/SKILL.en.md +1 -1
  57. package/templates/.agents/skills/cancel-task/SKILL.zh-CN.md +2 -2
  58. package/templates/.agents/skills/check-task/SKILL.zh-CN.md +9 -9
  59. package/templates/.agents/skills/close-codescan/SKILL.en.md +1 -1
  60. package/templates/.agents/skills/close-codescan/SKILL.zh-CN.md +2 -2
  61. package/templates/.agents/skills/close-dependabot/SKILL.en.md +1 -1
  62. package/templates/.agents/skills/close-dependabot/SKILL.zh-CN.md +2 -2
  63. package/templates/.agents/skills/code-task/SKILL.en.md +1 -1
  64. package/templates/.agents/skills/code-task/SKILL.zh-CN.md +1 -1
  65. package/templates/.agents/skills/code-task/reference/branch-management.zh-CN.md +2 -2
  66. package/templates/.agents/skills/code-task/reference/fix-mode.en.md +2 -2
  67. package/templates/.agents/skills/code-task/reference/fix-mode.zh-CN.md +2 -2
  68. package/templates/.agents/skills/code-task/reference/output-template.zh-CN.md +1 -1
  69. package/templates/.agents/skills/commit/SKILL.en.md +6 -4
  70. package/templates/.agents/skills/commit/SKILL.zh-CN.md +6 -4
  71. package/templates/.agents/skills/commit/reference/task-status-update.en.md +35 -8
  72. package/templates/.agents/skills/commit/reference/task-status-update.zh-CN.md +35 -8
  73. package/templates/.agents/skills/complete-manual-validation/SKILL.en.md +27 -3
  74. package/templates/.agents/skills/complete-manual-validation/SKILL.zh-CN.md +27 -3
  75. package/templates/.agents/skills/complete-task/SKILL.en.md +3 -3
  76. package/templates/.agents/skills/complete-task/SKILL.zh-CN.md +3 -3
  77. package/templates/.agents/skills/complete-task/config/verify.en.json +1 -0
  78. package/templates/.agents/skills/complete-task/config/verify.zh-CN.json +1 -0
  79. package/templates/.agents/skills/create-pr/SKILL.en.md +4 -4
  80. package/templates/.agents/skills/create-pr/SKILL.zh-CN.md +4 -4
  81. package/templates/.agents/skills/create-pr/reference/pr-body-template.en.md +1 -1
  82. package/templates/.agents/skills/create-pr/reference/pr-body-template.zh-CN.md +1 -1
  83. package/templates/.agents/skills/create-task/SKILL.en.md +2 -2
  84. package/templates/.agents/skills/create-task/SKILL.zh-CN.md +5 -5
  85. package/templates/.agents/skills/import-codescan/SKILL.en.md +2 -2
  86. package/templates/.agents/skills/import-codescan/SKILL.zh-CN.md +3 -3
  87. package/templates/.agents/skills/import-dependabot/SKILL.en.md +2 -2
  88. package/templates/.agents/skills/import-dependabot/SKILL.zh-CN.md +3 -3
  89. package/templates/.agents/skills/import-issue/SKILL.en.md +2 -2
  90. package/templates/.agents/skills/import-issue/SKILL.zh-CN.md +3 -3
  91. package/templates/.agents/skills/init-labels/SKILL.zh-CN.md +1 -1
  92. package/templates/.agents/skills/init-milestones/SKILL.en.md +5 -4
  93. package/templates/.agents/skills/init-milestones/SKILL.zh-CN.md +6 -5
  94. package/templates/.agents/skills/init-milestones/scripts/init-milestones.github.sh +170 -45
  95. package/templates/.agents/skills/plan-task/SKILL.en.md +1 -1
  96. package/templates/.agents/skills/plan-task/SKILL.zh-CN.md +2 -2
  97. package/templates/.agents/skills/restore-task/SKILL.en.md +1 -1
  98. package/templates/.agents/skills/restore-task/SKILL.zh-CN.md +1 -1
  99. package/templates/.agents/skills/review-analysis/SKILL.en.md +1 -1
  100. package/templates/.agents/skills/review-analysis/SKILL.zh-CN.md +1 -1
  101. package/templates/.agents/skills/review-analysis/reference/output-templates.en.md +5 -5
  102. package/templates/.agents/skills/review-analysis/reference/output-templates.zh-CN.md +5 -5
  103. package/templates/.agents/skills/review-code/SKILL.en.md +8 -4
  104. package/templates/.agents/skills/review-code/SKILL.zh-CN.md +6 -3
  105. package/templates/.agents/skills/review-code/config/verify.en.json +3 -1
  106. package/templates/.agents/skills/review-code/config/verify.zh-CN.json +3 -1
  107. package/templates/.agents/skills/review-code/reference/output-templates.en.md +5 -5
  108. package/templates/.agents/skills/review-code/reference/output-templates.zh-CN.md +5 -5
  109. package/templates/.agents/skills/review-code/reference/report-template.en.md +3 -2
  110. package/templates/.agents/skills/review-code/reference/report-template.zh-CN.md +3 -2
  111. package/templates/.agents/skills/review-plan/SKILL.en.md +1 -1
  112. package/templates/.agents/skills/review-plan/SKILL.zh-CN.md +1 -1
  113. package/templates/.agents/skills/review-plan/reference/output-templates.en.md +5 -5
  114. package/templates/.agents/skills/review-plan/reference/output-templates.zh-CN.md +5 -5
  115. package/templates/.agents/skills/test/SKILL.zh-CN.md +26 -8
  116. package/templates/.agents/skills/update-agent-infra/SKILL.en.md +5 -1
  117. package/templates/.agents/skills/update-agent-infra/SKILL.zh-CN.md +6 -2
  118. package/templates/.agents/skills/update-agent-infra/scripts/sync-templates.js +203 -142
  119. package/templates/.agents/skills/watch-pr/SKILL.en.md +2 -2
  120. package/templates/.agents/skills/watch-pr/SKILL.zh-CN.md +2 -2
  121. package/templates/.agents/skills/watch-pr/reference/monitor-and-heal.en.md +8 -1
  122. package/templates/.agents/skills/watch-pr/reference/monitor-and-heal.zh-CN.md +8 -1
@@ -73,9 +73,10 @@ tail .agents/workspace/active/{task-id}/task.md
73
73
  ### 4. 执行审查
74
74
 
75
75
  遵循 `.agents/workflows/feature-development.yaml`,并同时检查完整变更上下文:
76
- - `git diff --binary HEAD -- <post-review-globs>` 覆盖已跟踪变更
76
+ - 一次性记录 `R=$(git rev-parse HEAD)`;本轮报告、指纹和任务审查事实都复用该 R,禁止稍后重新读取 HEAD 代替
77
+ - `git diff --binary "$R" -- <post-review-globs>` 覆盖已跟踪变更
77
78
  - `git ls-files -o --exclude-standard -z -- <post-review-globs>` 覆盖未跟踪新文件
78
- - `node .agents/scripts/review-diff-fingerprint.js worktree HEAD` 生成审查差异指纹,并写入报告
79
+ - `node .agents/scripts/review-diff-fingerprint.js worktree "$R" --format json` 一次生成审查差异指纹 `F` 与审查快照树 `T`,并写入报告
79
80
 
80
81
  > 详细审查标准、严重程度划分和 reviewer 关注点见 `reference/review-criteria.md`。执行此步骤前先读取 `reference/review-criteria.md`。
81
82
  > 测试审查硬门禁:当 `git diff` 触及测试文件时,必须先读取 `.agents/rules/testing-discipline.md` 并逐条核对(尤其"正向已覆盖时不应再加反向断言")。
@@ -91,13 +92,15 @@ tail .agents/workspace/active/{task-id}/task.md
91
92
  获取当前时间:
92
93
 
93
94
  ```bash
94
- date "+%Y-%m-%d %H:%M:%S%:z"
95
+ date "+%Y-%m-%d %H:%M:%S%z" | sed 's/\([+-][0-9][0-9]\)\([0-9][0-9]\)$/\1:\2/'
95
96
  ```
96
97
 
97
98
  - `current_step`:code-review
98
99
  - `assigned_to`:{当前代理}
99
100
  - `updated_at`:{当前时间}
100
101
  - `agent_infra_version`:按 `.agents/rules/version-stamp.md` 取值
102
+ - 若本轮 `总体结论` / `Overall Verdict` 为 `通过` / `Approved` 且 `T == R^{tree}`,写入 `last_reviewed_commit: {R}`;若 Approved 快照包含未提交差异,则清除既有 `last_reviewed_commit`,等待 `commit` 锚定
103
+ - 若本轮结论不是 Approved,保留既有 `last_reviewed_commit`,不得推进或清空
101
104
  - 追加:
102
105
  `- {YYYY-MM-DD HH:mm:ss±HH:MM} — **Review Code (Round {N})** by {agent} — Verdict: {Approved/Changes Requested/Rejected}, blockers: {n}, major: {n}, minor: {n}, Manual-validation: {n} → {artifact-filename}`
103
106
 
@@ -32,10 +32,12 @@
32
32
  "^\\$ ",
33
33
  "^- \\*\\*Overall Verdict\\*\\*[::]\\s*(?:通过|需要修改|拒绝|Approved|Changes Requested|Rejected)\\s*$",
34
34
  "^- \\*\\*Review Baseline Commit\\*\\*[::]\\s*\\S",
35
- "^- \\*\\*Reviewed Diff Fingerprint\\*\\*[::]\\s*sha256:[0-9a-f]{64}\\s*$"
35
+ "^- \\*\\*Reviewed Diff Fingerprint\\*\\*[::]\\s*sha256:[0-9a-f]{64}\\s*$",
36
+ "^- \\*\\*Reviewed Snapshot Tree\\*\\*[::]\\s*[0-9a-f]{40,64}\\s*$"
36
37
  ],
37
38
  "freshness_minutes": 30
38
39
  },
40
+ "review-fact": {},
39
41
  "activity-log": {
40
42
  "expected_action_pattern": "(Review Code|Code Review) \\(Round \\d+\\)",
41
43
  "freshness_minutes": 30
@@ -32,10 +32,12 @@
32
32
  "^\\$ ",
33
33
  "^- \\*\\*总体结论\\*\\*[::]\\s*(?:通过|需要修改|拒绝|Approved|Changes Requested|Rejected)\\s*$",
34
34
  "^- \\*\\*审查基线提交\\*\\*[::]\\s*\\S",
35
- "^- \\*\\*审查差异指纹\\*\\*[::]\\s*sha256:[0-9a-f]{64}\\s*$"
35
+ "^- \\*\\*审查差异指纹\\*\\*[::]\\s*sha256:[0-9a-f]{64}\\s*$",
36
+ "^- \\*\\*审查快照树\\*\\*[::]\\s*[0-9a-f]{40,64}\\s*$"
36
37
  ],
37
38
  "freshness_minutes": 30
38
39
  },
40
+ "review-fact": {},
39
41
  "activity-log": {
40
42
  "expected_action_pattern": "(Review Code|Code Review) \\(Round \\d+\\)",
41
43
  "freshness_minutes": 30
@@ -29,7 +29,7 @@ Task {task-id} review completed. Verdict: approved.
29
29
 
30
30
  Next step - commit the code:
31
31
  - Claude Code / OpenCode: /commit
32
- - Gemini CLI: /agent-infra:commit
32
+ - Gemini CLI: /{{project}}:commit
33
33
  - Codex CLI: $commit
34
34
 
35
35
  [When manual-validation > 0, append this final line:]
@@ -45,12 +45,12 @@ Task {task-id} review completed. Verdict: approved.
45
45
 
46
46
  Next step - fix before commit (recommended):
47
47
  - Claude Code / OpenCode: /code-task {task-ref}
48
- - Gemini CLI: /agent-infra:code-task {task-ref}
48
+ - Gemini CLI: /{{project}}:code-task {task-ref}
49
49
  - Codex CLI: $code-task {task-ref}
50
50
 
51
51
  Or commit directly (skip fix):
52
52
  - Claude Code / OpenCode: /commit
53
- - Gemini CLI: /agent-infra:commit
53
+ - Gemini CLI: /{{project}}:commit
54
54
  - Codex CLI: $commit
55
55
 
56
56
  [When manual-validation > 0, append this final line:]
@@ -66,7 +66,7 @@ Task {task-id} review completed. Verdict: changes requested.
66
66
 
67
67
  Next step - fix the findings:
68
68
  - Claude Code / OpenCode: /code-task {task-ref}
69
- - Gemini CLI: /agent-infra:code-task {task-ref}
69
+ - Gemini CLI: /{{project}}:code-task {task-ref}
70
70
  - Codex CLI: $code-task {task-ref}
71
71
 
72
72
  [When manual-validation > 0, append this final line:]
@@ -82,7 +82,7 @@ Task {task-id} review completed. Verdict: rejected, re-design the technical plan
82
82
 
83
83
  Next step - re-design the technical plan:
84
84
  - Claude Code / OpenCode: /plan-task {task-ref}
85
- - Gemini CLI: /agent-infra:plan-task {task-ref}
85
+ - Gemini CLI: /{{project}}:plan-task {task-ref}
86
86
  - Codex CLI: $plan-task {task-ref}
87
87
 
88
88
  > Note: Rejected means the implementation direction needs to be reworked end-to-end, not patched locally. `code-task/scripts/detect-mode.js` branch #7 refuses a direct `/code-task` and requires a fresh plan first.
@@ -29,7 +29,7 @@
29
29
 
30
30
  下一步 - 提交代码:
31
31
  - Claude Code / OpenCode:/commit
32
- - Gemini CLI:/agent-infra:commit
32
+ - Gemini CLI:/{{project}}:commit
33
33
  - Codex CLI:$commit
34
34
 
35
35
  [当 manual-validation > 0 时,在最后附加一行:]
@@ -45,12 +45,12 @@
45
45
 
46
46
  下一步 - 修复问题后提交(推荐):
47
47
  - Claude Code / OpenCode:/code-task {task-ref}
48
- - Gemini CLI:/agent-infra:code-task {task-ref}
48
+ - Gemini CLI:/{{project}}:code-task {task-ref}
49
49
  - Codex CLI:$code-task {task-ref}
50
50
 
51
51
  或直接提交(跳过修复):
52
52
  - Claude Code / OpenCode:/commit
53
- - Gemini CLI:/agent-infra:commit
53
+ - Gemini CLI:/{{project}}:commit
54
54
  - Codex CLI:$commit
55
55
 
56
56
  [当 manual-validation > 0 时,在最后附加一行:]
@@ -66,7 +66,7 @@
66
66
 
67
67
  下一步 - 修复问题:
68
68
  - Claude Code / OpenCode:/code-task {task-ref}
69
- - Gemini CLI:/agent-infra:code-task {task-ref}
69
+ - Gemini CLI:/{{project}}:code-task {task-ref}
70
70
  - Codex CLI:$code-task {task-ref}
71
71
 
72
72
  [当 manual-validation > 0 时,在最后附加一行:]
@@ -82,7 +82,7 @@
82
82
 
83
83
  下一步 - 重新设计技术方案:
84
84
  - Claude Code / OpenCode:/plan-task {task-ref}
85
- - Gemini CLI:/agent-infra:plan-task {task-ref}
85
+ - Gemini CLI:/{{project}}:plan-task {task-ref}
86
86
  - Codex CLI:$plan-task {task-ref}
87
87
 
88
88
  > 注意:Rejected 表示实现方向需要整体重做,不是局部修复。`code-task/scripts/detect-mode.js` 分支 #7 会拒绝直接 `/code-task`,要求先重新方案设计。
@@ -21,8 +21,9 @@ Use this template when writing `review-code.md` or `review-code-r{N}.md`.
21
21
  - **Reviewer**: {reviewer-name}
22
22
  - **Review Time**: {timestamp}
23
23
  - **Scope**: {file-count and major modules}
24
- - **Review Baseline Commit**: {raw git rev-parse HEAD} (baseline for the complete-task post-review commit gate; see `.agents/rules/review-handshake.md`)
25
- - **Reviewed Diff Fingerprint**: {raw node .agents/scripts/review-diff-fingerprint.js worktree HEAD}
24
+ - **Review Baseline Commit**: {raw R captured once for this round} (diff base only; see `.agents/rules/review-handshake.md`)
25
+ - **Reviewed Diff Fingerprint**: {raw node .agents/scripts/review-diff-fingerprint.js worktree "$R"}
26
+ - **Reviewed Snapshot Tree**: {tree field from node .agents/scripts/review-diff-fingerprint.js worktree "$R" --format json}
26
27
  - **Overall Verdict**: {Approved / Changes Requested / Rejected} (pick exactly one; combined phrases will fail the verify gate)
27
28
  - **Findings (AI-actionable)**: 0 blockers, 0 majors, 0 minors / **Manual validation**: 0
28
29
 
@@ -21,8 +21,9 @@
21
21
  - **审查者**:{reviewer-name}
22
22
  - **审查时间**:{timestamp}
23
23
  - **审查范围**:{file-count and major modules}
24
- - **审查基线提交**:{git rev-parse HEAD 原文}(complete-task 的 post-review commit 门禁基线;详见 `.agents/rules/review-handshake.md`)
25
- - **审查差异指纹**:{node .agents/scripts/review-diff-fingerprint.js worktree HEAD 原文}
24
+ - **审查基线提交**:{本轮一次性捕获的 R 原文}(仅表示 diff base;详见 `.agents/rules/review-handshake.md`)
25
+ - **审查差异指纹**:{node .agents/scripts/review-diff-fingerprint.js worktree "$R" 原文}
26
+ - **审查快照树**:{node .agents/scripts/review-diff-fingerprint.js worktree "$R" --format json 的 tree 字段}
26
27
  - **总体结论**:{通过 / 需要修改 / 拒绝}(恰取一个;禁止写组合短语,否则 verify gate 失败)
27
28
  - **发现(AI 可处理)**:0 阻塞项,0 主要,0 次要 / **人工校验**:0
28
29
 
@@ -73,7 +73,7 @@ Create `.agents/workspace/active/{task-id}/{review-artifact}`.
73
73
  Get the current time:
74
74
 
75
75
  ```bash
76
- date "+%Y-%m-%d %H:%M:%S%:z"
76
+ date "+%Y-%m-%d %H:%M:%S%z" | sed 's/\([+-][0-9][0-9]\)\([0-9][0-9]\)$/\1:\2/'
77
77
  ```
78
78
 
79
79
  Set `current_step` to `technical-design-review`, refresh task metadata, and append:
@@ -79,7 +79,7 @@ tail .agents/workspace/active/{task-id}/task.md
79
79
  获取当前时间:
80
80
 
81
81
  ```bash
82
- date "+%Y-%m-%d %H:%M:%S%:z"
82
+ date "+%Y-%m-%d %H:%M:%S%z" | sed 's/\([+-][0-9][0-9]\)\([0-9][0-9]\)$/\1:\2/'
83
83
  ```
84
84
 
85
85
  更新 task.md:
@@ -27,7 +27,7 @@ Task {task-id} technical plan review completed. Verdict: approved.
27
27
 
28
28
  Next step - write code:
29
29
  - Claude Code / OpenCode: /code-task {task-ref}
30
- - Gemini CLI: /agent-infra:code-task {task-ref}
30
+ - Gemini CLI: /{{project}}:code-task {task-ref}
31
31
  - Codex CLI: $code-task {task-ref}
32
32
 
33
33
  [When manual-validation > 0, append:]
@@ -43,12 +43,12 @@ Task {task-id} technical plan review completed. Verdict: approved.
43
43
 
44
44
  Next step - revise plan before coding (recommended):
45
45
  - Claude Code / OpenCode: /plan-task {task-ref}
46
- - Gemini CLI: /agent-infra:plan-task {task-ref}
46
+ - Gemini CLI: /{{project}}:plan-task {task-ref}
47
47
  - Codex CLI: $plan-task {task-ref}
48
48
 
49
49
  Or proceed directly to coding:
50
50
  - Claude Code / OpenCode: /code-task {task-ref}
51
- - Gemini CLI: /agent-infra:code-task {task-ref}
51
+ - Gemini CLI: /{{project}}:code-task {task-ref}
52
52
  - Codex CLI: $code-task {task-ref}
53
53
 
54
54
  [When manual-validation > 0, append:]
@@ -64,7 +64,7 @@ Task {task-id} technical plan review completed. Verdict: changes requested.
64
64
 
65
65
  Next step - revise technical plan:
66
66
  - Claude Code / OpenCode: /plan-task {task-ref}
67
- - Gemini CLI: /agent-infra:plan-task {task-ref}
67
+ - Gemini CLI: /{{project}}:plan-task {task-ref}
68
68
  - Codex CLI: $plan-task {task-ref}
69
69
 
70
70
  [When manual-validation > 0, append:]
@@ -80,7 +80,7 @@ Task {task-id} technical plan review completed. Verdict: rejected, redesign requ
80
80
 
81
81
  Next step - redesign:
82
82
  - Claude Code / OpenCode: /plan-task {task-ref}
83
- - Gemini CLI: /agent-infra:plan-task {task-ref}
83
+ - Gemini CLI: /{{project}}:plan-task {task-ref}
84
84
  - Codex CLI: $plan-task {task-ref}
85
85
 
86
86
  [When manual-validation > 0, append:]
@@ -27,7 +27,7 @@
27
27
 
28
28
  下一步 - 编写代码:
29
29
  - Claude Code / OpenCode:/code-task {task-ref}
30
- - Gemini CLI:/agent-infra:code-task {task-ref}
30
+ - Gemini CLI:/{{project}}:code-task {task-ref}
31
31
  - Codex CLI:$code-task {task-ref}
32
32
 
33
33
  [当 manual-validation > 0 时,在最后附加一行:]
@@ -43,12 +43,12 @@
43
43
 
44
44
  下一步 - 修订方案后编码(推荐):
45
45
  - Claude Code / OpenCode:/plan-task {task-ref}
46
- - Gemini CLI:/agent-infra:plan-task {task-ref}
46
+ - Gemini CLI:/{{project}}:plan-task {task-ref}
47
47
  - Codex CLI:$plan-task {task-ref}
48
48
 
49
49
  或直接进入编码:
50
50
  - Claude Code / OpenCode:/code-task {task-ref}
51
- - Gemini CLI:/agent-infra:code-task {task-ref}
51
+ - Gemini CLI:/{{project}}:code-task {task-ref}
52
52
  - Codex CLI:$code-task {task-ref}
53
53
 
54
54
  [当 manual-validation > 0 时,在最后附加一行:]
@@ -64,7 +64,7 @@
64
64
 
65
65
  下一步 - 修订技术方案:
66
66
  - Claude Code / OpenCode:/plan-task {task-ref}
67
- - Gemini CLI:/agent-infra:plan-task {task-ref}
67
+ - Gemini CLI:/{{project}}:plan-task {task-ref}
68
68
  - Codex CLI:$plan-task {task-ref}
69
69
 
70
70
  [当 manual-validation > 0 时,在最后附加一行:]
@@ -80,7 +80,7 @@
80
80
 
81
81
  下一步 - 重新设计:
82
82
  - Claude Code / OpenCode:/plan-task {task-ref}
83
- - Gemini CLI:/agent-infra:plan-task {task-ref}
83
+ - Gemini CLI:/{{project}}:plan-task {task-ref}
84
84
  - Codex CLI:$plan-task {task-ref}
85
85
 
86
86
  [当 manual-validation > 0 时,在最后附加一行:]
@@ -11,16 +11,27 @@ description: >
11
11
 
12
12
  ## 1. 编译 / 类型检查
13
13
 
14
- 本项目由 Node.js CLI 和模板文件组成,无需编译。跳过此步骤。
14
+ ```bash
15
+ # TODO:替换为项目实际的编译命令
16
+ # npx tsc --noEmit (TypeScript)
17
+ # mvn compile (Maven)
18
+ # go build ./... (Go)
19
+ # make build (通用)
20
+ ```
21
+
22
+ 确认没有编译错误。
15
23
 
16
24
  ## 2. 运行单元测试(按层级选择)
17
25
 
18
- 本项目把测试分为三层,按场景选择运行命令;新增测试文件默认归入 **full**,确认足够快且足够核心后,再上调到 core 或 smoke。
26
+ 三层测试是可选的反馈速度优化;如果测试套件较小,所有层级都可以映射到同一个完整测试命令。
19
27
 
20
28
  ### smoke(目标 <5s)
21
29
 
22
30
  ```bash
23
- npm run test:smoke
31
+ # TODO:替换为项目的 smoke 子集命令
32
+ # npm run test:smoke (Node.js)
33
+ # pytest -m "not slow" (Python)
34
+ # go test -short ./... (Go)
24
35
  ```
25
36
 
26
37
  适用场景:
@@ -31,7 +42,10 @@ npm run test:smoke
31
42
  ### core(目标 <15s)
32
43
 
33
44
  ```bash
34
- npm run test:core
45
+ # TODO:替换为项目的 core 子集命令
46
+ # npm run test:core (Node.js)
47
+ # pytest -m "not contract" (Python)
48
+ # go test ./... (Go)
35
49
  ```
36
50
 
37
51
  适用场景:
@@ -39,18 +53,22 @@ npm run test:core
39
53
  - 写 code.md / code-r{N}.md 报告前的最终验证
40
54
  - 推送 PR 前的本地把关
41
55
 
42
- ### full(目标 <60s)
56
+ ### full(完整测试套件)
43
57
 
44
58
  ```bash
45
- npm test
59
+ # TODO:替换为项目的完整测试命令
60
+ # npm test (Node.js)
61
+ # mvn test (Maven)
62
+ # pytest (Python)
63
+ # go test ./... (Go)
46
64
  ```
47
65
 
48
66
  适用场景:
49
67
  - release / tag 前
50
- - CI(unit-tests.yml)
68
+ - CI
51
69
  - main 合并前的最终把关
52
70
 
53
- full 层运行全部项目测试。`npm test` 使用通配匹配项目测试文件,**新增的测试文件会自动归入 full**,这是安全网。
71
+ 如果项目尚未分层,smoke / core / full 可以全部使用完整测试命令;分层不是使用协作工作流的前置条件。
54
72
 
55
73
  ## 3. 输出结果
56
74
 
@@ -33,7 +33,7 @@ same-path external files, and later external sources win over earlier external
33
33
  sources. Conflicts are recorded in the report. The script then performs:
34
34
  - detect the template source version
35
35
  - File registry sync (`defaults.json` → `.agents/.airc.json`)
36
- - All managed files (language selection → exclude merged/ejected → placeholder rendering → overwrite)
36
+ - All managed files (language selection → exclude merged/ejected → placeholder rendering → write; built-in guarded managed files use a source-baseline three-way comparison)
37
37
  - Ejected files (create only on first install)
38
38
  - `.agents/.airc.json` update (`templateVersion`, file lists)
39
39
 
@@ -47,6 +47,8 @@ The script outputs JSON to stdout. Parse and record the report.
47
47
  list these in the report so users know which files were ignored because a
48
48
  built-in template or later external source won
49
49
  - `managed.written` / `managed.created`: updated / newly created managed files
50
+ - `managed.protected`: guarded managed files whose local user-only modification or deletion was preserved
51
+ - `managed.conflicts`: guarded managed files with unknown origin, two-sided changes, or ownership that cannot be proven during a platform switch; list each target, reason, and three-way hash
50
52
  - `managed.removed`: deleted managed files (including old paths removed during template migrations)
51
53
  - `managed.skippedPlatform`: managed / merged entries skipped because they belong to a different platform
52
54
  - `managed.skippedTUI`: managed / merged entries skipped because they are owned by a built-in TUI that is disabled in `tuis` (customTUI command files under the same path prefix are preserved)
@@ -56,6 +58,8 @@ The script outputs JSON to stdout. Parse and record the report.
56
58
  - `selfUpdate`: whether this is a self-update scenario
57
59
  - `configUpdated`: whether `.agents/.airc.json` was updated
58
60
 
61
+ If `managed.conflicts` is non-empty, output every conflict and stop immediately before Phase B. Do not overwrite a conflicting file or advance its `files.managedBaselines` entry.
62
+
59
63
  ## Phase B: Process merged files (AI intelligent merge)
60
64
 
61
65
  Process each item in the report's `merged.pending` list:
@@ -27,7 +27,7 @@ node .agents/skills/update-agent-infra/scripts/sync-templates.js
27
27
  脚本读取 `.agents/.airc.json`,并通过 npm 自动定位已安装的 `@fitlab-ai/agent-infra/templates/` 目录。同步前会合并 `templates.sources` 中配置的外部模板源;相同文件以内置模板为准,多个外部源之间后者覆盖前者,冲突会写入报告。然后自动完成:
28
28
  - 检测模板源版本
29
29
  - 同步文件注册表(`defaults.json` → `.agents/.airc.json`)
30
- - 处理所有 managed 文件(语言选择 → 排除 merged/ejected → 占位符渲染 → 覆盖写入)
30
+ - 处理所有 managed 文件(语言选择 → 排除 merged/ejected → 占位符渲染 → 写入;内建 guarded managed 文件使用来源基线三方比较)
31
31
  - 处理 ejected 文件(仅首次安装时创建)
32
32
  - 更新 `.agents/.airc.json`(`templateVersion`、文件列表)
33
33
 
@@ -39,6 +39,8 @@ node .agents/skills/update-agent-infra/scripts/sync-templates.js
39
39
  - `templateRoot`:模板文件根目录绝对路径
40
40
  - `templateSources.conflicts`:外部模板源冲突列表;报告中必须显式展示,说明哪些文件因内置模板或后续外部源获胜而被忽略
41
41
  - `managed.written` / `managed.created`:已更新/新建的 managed 文件
42
+ - `managed.protected`:检测到用户单边修改或删除、因此保留本地状态的 guarded managed 文件
43
+ - `managed.conflicts`:来源未知、双边修改或平台切换时无法证明官方所有权的 guarded managed 冲突;必须逐项展示 target、reason 与三方哈希
42
44
  - `managed.removed`:被删除的 managed 文件(包括模板迁移时移除的旧路径)
43
45
  - `managed.skippedPlatform`:因归属其他平台而被跳过的 managed / merged 条目
44
46
  - `managed.skippedTUI`:因 `tuis` 中未启用对应内建 TUI 而被跳过的 managed / merged 条目(落在同一路径前缀下的 customTUI 命令文件会被保留)
@@ -48,6 +50,8 @@ node .agents/skills/update-agent-infra/scripts/sync-templates.js
48
50
  - `selfUpdate`:是否为自更新模式
49
51
  - `configUpdated`:`.agents/.airc.json` 是否已更新
50
52
 
53
+ 如果 `managed.conflicts` 非空,输出全部冲突并立即停止,不进入阶段 B;禁止覆盖冲突文件或推进其 `files.managedBaselines`。
54
+
51
55
  ## 阶段 B:处理 merged 文件(AI 智能合并)
52
56
 
53
57
  根据报告中 `merged.pending` 列表,逐个文件处理。对于每个条目:
@@ -133,7 +137,7 @@ node .agents/skills/update-agent-infra/scripts/sync-templates.js
133
137
  ```
134
138
  下一步 - 提交代码:
135
139
  - Claude Code / OpenCode:/commit
136
- - Gemini CLI:/agent-infra:commit
140
+ - Gemini CLI:/{{project}}:commit
137
141
  - Codex CLI:$commit
138
142
  ```
139
143