@fitlab-ai/agent-infra 0.8.5 → 0.9.0

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 (425) hide show
  1. package/bin/cli.ts +2 -2
  2. package/dist/bin/cli.js +2 -2
  3. package/dist/bin/internal-cli.js +98 -0
  4. package/dist/lib/decide.js +81 -90
  5. package/dist/lib/defaults.json +1 -0
  6. package/dist/lib/git/review-snapshot.js +79 -0
  7. package/dist/lib/git/workflow.js +101 -0
  8. package/dist/lib/internal/git-workflow.js +42 -0
  9. package/dist/lib/internal/platform-checks.js +119 -0
  10. package/dist/lib/internal/platform-comment.js +129 -0
  11. package/dist/lib/internal/platform-context.js +46 -0
  12. package/dist/lib/internal/platform-issue.js +142 -0
  13. package/dist/lib/internal/platform-pr.js +146 -0
  14. package/dist/lib/internal/release-workflow.js +217 -0
  15. package/dist/lib/internal/task-artifact.js +67 -0
  16. package/dist/lib/internal/task-context.js +43 -0
  17. package/dist/lib/internal/task-event.js +70 -0
  18. package/dist/lib/internal/task-ledger.js +114 -0
  19. package/dist/lib/internal/task-lifecycle.js +58 -0
  20. package/dist/lib/internal/task-short-id.js +83 -0
  21. package/dist/lib/internal/task-snapshot.js +47 -0
  22. package/dist/lib/internal/task-verify.js +50 -0
  23. package/dist/lib/internal/task-warning.js +74 -0
  24. package/dist/lib/platform/adapters.js +14 -0
  25. package/dist/lib/platform/context.js +146 -0
  26. package/dist/lib/platform/github-client.js +124 -0
  27. package/dist/lib/platform/issue-comments.js +409 -0
  28. package/dist/lib/platform/issue-metadata.js +183 -0
  29. package/dist/lib/platform/issues.js +617 -0
  30. package/dist/lib/platform/metadata-labels.js +28 -0
  31. package/dist/lib/platform/pr-checks.js +216 -0
  32. package/dist/lib/platform/pr-summary.js +88 -0
  33. package/dist/lib/platform/pull-request-metadata.js +38 -0
  34. package/dist/lib/platform/pull-requests.js +338 -0
  35. package/dist/lib/platform/releases.js +82 -0
  36. package/dist/lib/platform/types.js +22 -0
  37. package/dist/lib/platform/verification-required.js +78 -0
  38. package/dist/lib/platform/verification-sync.js +1014 -0
  39. package/dist/lib/platform/verification.js +6 -0
  40. package/dist/lib/release/channels.js +31 -0
  41. package/dist/lib/release/workflow.js +32 -0
  42. package/dist/lib/render.js +3 -2
  43. package/dist/lib/run/index.js +24 -7
  44. package/dist/lib/sandbox/capture.js +25 -3
  45. package/dist/lib/sandbox/commands/create.js +36 -22
  46. package/dist/lib/sandbox/commands/enter.js +34 -11
  47. package/dist/lib/sandbox/commands/list-running.js +10 -8
  48. package/dist/lib/sandbox/commands/show.js +2 -2
  49. package/dist/lib/sandbox/commands/start.js +53 -15
  50. package/dist/lib/sandbox/index.js +6 -6
  51. package/dist/lib/sandbox/mounts.js +36 -0
  52. package/dist/lib/sandbox/recovery.js +562 -0
  53. package/dist/lib/sandbox/task-resolver.js +5 -1
  54. package/dist/lib/sandbox/tools.js +19 -0
  55. package/dist/lib/server/protocol.js +5 -5
  56. package/dist/lib/task/activity-log.js +61 -0
  57. package/dist/lib/task/artifact-lifecycle.js +427 -0
  58. package/dist/lib/task/command-options.js +30 -0
  59. package/dist/lib/task/commands/cat.js +36 -6
  60. package/dist/lib/task/commands/decisions.js +80 -46
  61. package/dist/lib/task/commands/files.js +21 -7
  62. package/dist/lib/task/commands/grep.js +55 -7
  63. package/dist/lib/task/commands/issue-body.js +23 -14
  64. package/dist/lib/task/commands/log.js +27 -70
  65. package/dist/lib/task/commands/show.js +20 -7
  66. package/dist/lib/task/commands/status.js +18 -8
  67. package/dist/lib/task/decision-intents.js +154 -0
  68. package/dist/lib/task/decision-items.js +53 -0
  69. package/dist/lib/task/events.js +318 -0
  70. package/dist/lib/task/frontmatter.js +159 -1
  71. package/dist/lib/task/implementation-inputs.js +117 -0
  72. package/dist/lib/task/index.js +12 -9
  73. package/dist/lib/task/issue-form.js +19 -6
  74. package/dist/lib/task/ledger-intents.js +185 -0
  75. package/dist/lib/task/ledger.js +65 -35
  76. package/dist/lib/task/lifecycle.js +484 -0
  77. package/dist/lib/task/resolve-ref.js +152 -32
  78. package/dist/lib/task/review-artifacts.js +101 -0
  79. package/dist/lib/task/review-fingerprint.js +46 -0
  80. package/dist/lib/task/sections.js +358 -4
  81. package/dist/lib/task/short-id.js +292 -7
  82. package/dist/lib/task/snapshot.js +95 -0
  83. package/dist/lib/task/verification-checks.js +8 -0
  84. package/dist/lib/task/verification-config.js +14 -0
  85. package/dist/lib/task/verification-engine.js +906 -0
  86. package/dist/lib/task/verification-review.js +3 -0
  87. package/dist/lib/task/verification-types.js +2 -0
  88. package/dist/lib/task/verification.js +113 -0
  89. package/dist/lib/task/workflow-warning-intents.js +131 -0
  90. package/dist/lib/task/workflow-warnings.js +10 -78
  91. package/dist/lib/task/write.js +241 -0
  92. package/lib/decide.ts +57 -97
  93. package/lib/defaults.json +1 -0
  94. package/lib/git/review-snapshot.ts +73 -0
  95. package/lib/git/workflow.ts +101 -0
  96. package/lib/internal/git-workflow.ts +37 -0
  97. package/lib/internal/platform-checks.ts +101 -0
  98. package/lib/internal/platform-comment.ts +99 -0
  99. package/lib/internal/platform-context.ts +33 -0
  100. package/lib/internal/platform-issue.ts +116 -0
  101. package/lib/internal/platform-pr.ts +119 -0
  102. package/lib/internal/release-workflow.ts +186 -0
  103. package/lib/internal/task-artifact.ts +47 -0
  104. package/lib/internal/task-context.ts +35 -0
  105. package/lib/internal/task-event.ts +51 -0
  106. package/lib/internal/task-ledger.ts +86 -0
  107. package/lib/internal/task-lifecycle.ts +41 -0
  108. package/lib/internal/task-short-id.ts +55 -0
  109. package/lib/internal/task-snapshot.ts +32 -0
  110. package/lib/internal/task-verify.ts +33 -0
  111. package/lib/internal/task-warning.ts +50 -0
  112. package/lib/platform/adapters.ts +30 -0
  113. package/lib/platform/context.ts +164 -0
  114. package/lib/platform/github-client.ts +146 -0
  115. package/lib/platform/issue-comments.ts +479 -0
  116. package/lib/platform/issue-metadata.ts +250 -0
  117. package/lib/platform/issues.ts +691 -0
  118. package/lib/platform/metadata-labels.ts +33 -0
  119. package/lib/platform/pr-checks.ts +246 -0
  120. package/lib/platform/pr-summary.ts +90 -0
  121. package/lib/platform/pull-request-metadata.ts +69 -0
  122. package/lib/platform/pull-requests.ts +380 -0
  123. package/lib/platform/releases.ts +71 -0
  124. package/lib/platform/types.ts +74 -0
  125. package/lib/platform/verification-required.ts +83 -0
  126. package/{runtime/platform-adapters/platform-sync.github.js → lib/platform/verification-sync.ts} +198 -367
  127. package/lib/platform/verification.ts +11 -0
  128. package/lib/release/channels.ts +30 -0
  129. package/lib/release/workflow.ts +31 -0
  130. package/lib/render.ts +3 -2
  131. package/lib/run/index.ts +25 -7
  132. package/lib/sandbox/capture.ts +29 -3
  133. package/lib/sandbox/commands/create.ts +43 -25
  134. package/lib/sandbox/commands/enter.ts +38 -11
  135. package/lib/sandbox/commands/list-running.ts +10 -8
  136. package/lib/sandbox/commands/show.ts +2 -2
  137. package/lib/sandbox/commands/start.ts +50 -16
  138. package/lib/sandbox/index.ts +6 -6
  139. package/lib/sandbox/mounts.ts +55 -0
  140. package/lib/sandbox/recovery.ts +828 -0
  141. package/lib/sandbox/task-resolver.ts +5 -1
  142. package/lib/sandbox/tools.ts +31 -0
  143. package/lib/server/protocol.ts +5 -5
  144. package/lib/task/activity-log.ts +62 -0
  145. package/lib/task/artifact-lifecycle.ts +484 -0
  146. package/lib/task/command-options.ts +32 -0
  147. package/lib/task/commands/cat.ts +22 -9
  148. package/lib/task/commands/decisions.ts +49 -47
  149. package/lib/task/commands/files.ts +14 -6
  150. package/lib/task/commands/grep.ts +34 -7
  151. package/lib/task/commands/issue-body.ts +16 -16
  152. package/lib/task/commands/log.ts +17 -70
  153. package/lib/task/commands/show.ts +14 -6
  154. package/lib/task/commands/status.ts +17 -7
  155. package/lib/task/decision-intents.ts +163 -0
  156. package/lib/task/decision-items.ts +64 -0
  157. package/lib/task/events.ts +320 -0
  158. package/lib/task/frontmatter.ts +202 -2
  159. package/lib/task/implementation-inputs.ts +137 -0
  160. package/lib/task/index.ts +12 -9
  161. package/lib/task/issue-form.ts +20 -6
  162. package/lib/task/ledger-intents.ts +201 -0
  163. package/lib/task/ledger.ts +77 -31
  164. package/lib/task/lifecycle.ts +458 -0
  165. package/lib/task/resolve-ref.ts +197 -36
  166. package/{templates/.agents/scripts/lib/review-artifacts.js → lib/task/review-artifacts.ts} +11 -12
  167. package/{templates/.agents/scripts/lib/post-review-commit.js → lib/task/review-fingerprint.ts} +17 -12
  168. package/lib/task/sections.ts +486 -4
  169. package/lib/task/short-id.ts +403 -9
  170. package/lib/task/snapshot.ts +143 -0
  171. package/lib/task/verification-checks.ts +9 -0
  172. package/lib/task/verification-config.ts +20 -0
  173. package/{templates/.agents/scripts/validate-artifact.js → lib/task/verification-engine.ts} +199 -406
  174. package/lib/task/verification-review.ts +9 -0
  175. package/lib/task/verification-types.ts +29 -0
  176. package/lib/task/verification.ts +156 -0
  177. package/lib/task/workflow-warning-intents.ts +142 -0
  178. package/lib/task/workflow-warnings.ts +10 -78
  179. package/lib/task/write.ts +468 -0
  180. package/package.json +4 -2
  181. package/templates/.agents/README.en.md +4 -3
  182. package/templates/.agents/README.zh-CN.md +4 -3
  183. package/templates/.agents/rules/README.en.md +6 -5
  184. package/templates/.agents/rules/README.zh-CN.md +6 -5
  185. package/templates/.agents/rules/create-issue.en.md +1 -1
  186. package/templates/.agents/rules/create-issue.github.en.md +5 -184
  187. package/templates/.agents/rules/create-issue.github.zh-CN.md +12 -178
  188. package/templates/.agents/rules/create-issue.zh-CN.md +1 -1
  189. package/templates/.agents/rules/human-decision-context.en.md +36 -0
  190. package/templates/.agents/rules/human-decision-context.zh-CN.md +36 -0
  191. package/templates/.agents/rules/issue-fields.github.en.md +4 -148
  192. package/templates/.agents/rules/issue-fields.github.zh-CN.md +9 -144
  193. package/templates/.agents/rules/issue-pr-commands.en.md +43 -3
  194. package/templates/.agents/rules/issue-pr-commands.github.en.md +15 -220
  195. package/templates/.agents/rules/issue-pr-commands.github.zh-CN.md +23 -213
  196. package/templates/.agents/rules/issue-pr-commands.zh-CN.md +45 -3
  197. package/templates/.agents/rules/issue-sync.en.md +1 -1
  198. package/templates/.agents/rules/issue-sync.github.en.md +14 -301
  199. package/templates/.agents/rules/issue-sync.github.zh-CN.md +36 -287
  200. package/templates/.agents/rules/issue-sync.zh-CN.md +1 -1
  201. package/templates/.agents/rules/milestone-inference.en.md +1 -1
  202. package/templates/.agents/rules/milestone-inference.github.en.md +7 -119
  203. package/templates/.agents/rules/milestone-inference.github.zh-CN.md +8 -108
  204. package/templates/.agents/rules/milestone-inference.zh-CN.md +1 -1
  205. package/templates/.agents/rules/next-step-output.en.md +12 -11
  206. package/templates/.agents/rules/next-step-output.zh-CN.md +12 -11
  207. package/templates/.agents/rules/no-mid-flow-questions.en.md +3 -3
  208. package/templates/.agents/rules/no-mid-flow-questions.zh-CN.md +3 -3
  209. package/templates/.agents/rules/pr-checks-commands.en.md +16 -3
  210. package/templates/.agents/rules/pr-checks-commands.github.en.md +10 -54
  211. package/templates/.agents/rules/pr-checks-commands.github.zh-CN.md +19 -47
  212. package/templates/.agents/rules/pr-checks-commands.zh-CN.md +30 -3
  213. package/templates/.agents/rules/pr-sync.en.md +30 -3
  214. package/templates/.agents/rules/pr-sync.github.en.md +12 -115
  215. package/templates/.agents/rules/pr-sync.github.zh-CN.md +26 -104
  216. package/templates/.agents/rules/pr-sync.zh-CN.md +43 -3
  217. package/templates/.agents/rules/review-handshake.en.md +8 -5
  218. package/templates/.agents/rules/review-handshake.zh-CN.md +8 -5
  219. package/templates/.agents/rules/task-management.en.md +11 -2
  220. package/templates/.agents/rules/task-management.zh-CN.md +11 -3
  221. package/templates/.agents/rules/task-short-id.en.md +25 -29
  222. package/templates/.agents/rules/task-short-id.zh-CN.md +20 -23
  223. package/templates/.agents/scripts/lib/agent-infra-package.js +1 -9
  224. package/templates/.agents/scripts/task-short-id.js +71 -533
  225. package/templates/.agents/skills/analyze-task/SKILL.en.md +22 -55
  226. package/templates/.agents/skills/analyze-task/SKILL.zh-CN.md +26 -59
  227. package/templates/.agents/skills/analyze-task/config/verify.en.json +1 -3
  228. package/templates/.agents/skills/analyze-task/config/verify.zh-CN.json +1 -3
  229. package/templates/.agents/skills/block-task/SKILL.en.md +21 -47
  230. package/templates/.agents/skills/block-task/SKILL.zh-CN.md +23 -47
  231. package/templates/.agents/skills/block-task/config/verify.json +1 -2
  232. package/templates/.agents/skills/cancel-task/SKILL.en.md +16 -45
  233. package/templates/.agents/skills/cancel-task/SKILL.zh-CN.md +16 -45
  234. package/templates/.agents/skills/cancel-task/config/verify.json +1 -2
  235. package/templates/.agents/skills/check-task/SKILL.en.md +6 -3
  236. package/templates/.agents/skills/check-task/SKILL.zh-CN.md +6 -3
  237. package/templates/.agents/skills/close-codescan/SKILL.en.md +6 -24
  238. package/templates/.agents/skills/close-codescan/SKILL.zh-CN.md +6 -24
  239. package/templates/.agents/skills/close-dependabot/SKILL.en.md +6 -24
  240. package/templates/.agents/skills/close-dependabot/SKILL.zh-CN.md +6 -24
  241. package/templates/.agents/skills/code-task/SKILL.en.md +22 -35
  242. package/templates/.agents/skills/code-task/SKILL.zh-CN.md +28 -44
  243. package/templates/.agents/skills/code-task/config/verify.en.json +3 -3
  244. package/templates/.agents/skills/code-task/config/verify.zh-CN.json +3 -3
  245. package/templates/.agents/skills/code-task/reference/dual-mode.en.md +13 -9
  246. package/templates/.agents/skills/code-task/reference/dual-mode.zh-CN.md +13 -9
  247. package/templates/.agents/skills/code-task/reference/fix-mode.en.md +1 -1
  248. package/templates/.agents/skills/code-task/reference/fix-mode.zh-CN.md +1 -1
  249. package/templates/.agents/skills/code-task/reference/report-template.en.md +11 -1
  250. package/templates/.agents/skills/code-task/reference/report-template.zh-CN.md +11 -1
  251. package/templates/.agents/skills/commit/SKILL.en.md +13 -11
  252. package/templates/.agents/skills/commit/SKILL.zh-CN.md +13 -11
  253. package/templates/.agents/skills/commit/config/verify.json +1 -2
  254. package/templates/.agents/skills/commit/reference/commit-message.en.md +1 -11
  255. package/templates/.agents/skills/commit/reference/commit-message.zh-CN.md +1 -11
  256. package/templates/.agents/skills/commit/reference/issue-metadata-sync.en.md +4 -8
  257. package/templates/.agents/skills/commit/reference/issue-metadata-sync.zh-CN.md +4 -8
  258. package/templates/.agents/skills/commit/reference/pr-summary-sync.en.md +6 -18
  259. package/templates/.agents/skills/commit/reference/pr-summary-sync.zh-CN.md +5 -17
  260. package/templates/.agents/skills/commit/reference/task-status-update.en.md +13 -0
  261. package/templates/.agents/skills/commit/reference/task-status-update.zh-CN.md +13 -0
  262. package/templates/.agents/skills/complete-manual-validation/SKILL.en.md +13 -36
  263. package/templates/.agents/skills/complete-manual-validation/SKILL.zh-CN.md +13 -36
  264. package/templates/.agents/skills/complete-manual-validation/config/verify.en.json +1 -3
  265. package/templates/.agents/skills/complete-manual-validation/config/verify.zh-CN.json +1 -3
  266. package/templates/.agents/skills/complete-manual-validation/reference/summary-update.en.md +10 -54
  267. package/templates/.agents/skills/complete-manual-validation/reference/summary-update.zh-CN.md +10 -79
  268. package/templates/.agents/skills/complete-task/SKILL.en.md +59 -63
  269. package/templates/.agents/skills/complete-task/SKILL.zh-CN.md +59 -63
  270. package/templates/.agents/skills/complete-task/config/verify.en.json +11 -7
  271. package/templates/.agents/skills/complete-task/config/verify.zh-CN.json +11 -7
  272. package/templates/.agents/skills/create-pr/SKILL.en.md +19 -44
  273. package/templates/.agents/skills/create-pr/SKILL.zh-CN.md +19 -43
  274. package/templates/.agents/skills/create-pr/config/verify.json +1 -2
  275. package/templates/.agents/skills/create-pr/reference/comment-publish.en.md +8 -12
  276. package/templates/.agents/skills/create-pr/reference/comment-publish.zh-CN.md +7 -11
  277. package/templates/.agents/skills/create-task/SKILL.en.md +12 -13
  278. package/templates/.agents/skills/create-task/SKILL.zh-CN.md +12 -13
  279. package/templates/.agents/skills/create-task/config/verify.json +1 -2
  280. package/templates/.agents/skills/import-codescan/SKILL.en.md +2 -2
  281. package/templates/.agents/skills/import-codescan/SKILL.zh-CN.md +2 -2
  282. package/templates/.agents/skills/import-codescan/config/verify.json +1 -2
  283. package/templates/.agents/skills/import-dependabot/SKILL.en.md +2 -2
  284. package/templates/.agents/skills/import-dependabot/SKILL.zh-CN.md +2 -2
  285. package/templates/.agents/skills/import-dependabot/config/verify.json +1 -2
  286. package/templates/.agents/skills/import-issue/SKILL.en.md +9 -13
  287. package/templates/.agents/skills/import-issue/SKILL.zh-CN.md +10 -14
  288. package/templates/.agents/skills/import-issue/config/verify.json +1 -2
  289. package/templates/.agents/skills/plan-task/SKILL.en.md +17 -42
  290. package/templates/.agents/skills/plan-task/SKILL.zh-CN.md +22 -49
  291. package/templates/.agents/skills/plan-task/config/verify.en.json +1 -3
  292. package/templates/.agents/skills/plan-task/config/verify.zh-CN.json +1 -3
  293. package/templates/.agents/skills/post-release/SKILL.en.md +11 -81
  294. package/templates/.agents/skills/post-release/SKILL.zh-CN.md +8 -78
  295. package/templates/.agents/skills/refine-title/SKILL.en.md +1 -1
  296. package/templates/.agents/skills/refine-title/SKILL.zh-CN.md +1 -1
  297. package/templates/.agents/skills/release/SKILL.en.md +16 -163
  298. package/templates/.agents/skills/release/SKILL.zh-CN.md +15 -162
  299. package/templates/.agents/skills/restore-task/SKILL.en.md +11 -29
  300. package/templates/.agents/skills/restore-task/SKILL.zh-CN.md +11 -29
  301. package/templates/.agents/skills/restore-task/config/verify.json +1 -2
  302. package/templates/.agents/skills/review-analysis/SKILL.en.md +13 -25
  303. package/templates/.agents/skills/review-analysis/SKILL.zh-CN.md +13 -33
  304. package/templates/.agents/skills/review-analysis/config/verify.en.json +3 -4
  305. package/templates/.agents/skills/review-analysis/config/verify.zh-CN.json +3 -4
  306. package/templates/.agents/skills/review-analysis/reference/output-templates.en.md +9 -12
  307. package/templates/.agents/skills/review-analysis/reference/output-templates.zh-CN.md +9 -12
  308. package/templates/.agents/skills/review-analysis/reference/report-template.en.md +9 -2
  309. package/templates/.agents/skills/review-analysis/reference/report-template.zh-CN.md +9 -2
  310. package/templates/.agents/skills/review-analysis/reference/review-criteria.en.md +7 -0
  311. package/templates/.agents/skills/review-analysis/reference/review-criteria.zh-CN.md +7 -0
  312. package/templates/.agents/skills/review-code/SKILL.en.md +22 -36
  313. package/templates/.agents/skills/review-code/SKILL.zh-CN.md +23 -41
  314. package/templates/.agents/skills/review-code/config/verify.en.json +3 -4
  315. package/templates/.agents/skills/review-code/config/verify.zh-CN.json +3 -4
  316. package/templates/.agents/skills/review-code/reference/output-templates.en.md +56 -18
  317. package/templates/.agents/skills/review-code/reference/output-templates.zh-CN.md +56 -18
  318. package/templates/.agents/skills/review-code/reference/report-template.en.md +11 -4
  319. package/templates/.agents/skills/review-code/reference/report-template.zh-CN.md +11 -4
  320. package/templates/.agents/skills/review-code/reference/review-criteria.en.md +7 -0
  321. package/templates/.agents/skills/review-code/reference/review-criteria.zh-CN.md +7 -0
  322. package/templates/.agents/skills/review-plan/SKILL.en.md +13 -25
  323. package/templates/.agents/skills/review-plan/SKILL.zh-CN.md +13 -33
  324. package/templates/.agents/skills/review-plan/config/verify.en.json +3 -4
  325. package/templates/.agents/skills/review-plan/config/verify.zh-CN.json +3 -4
  326. package/templates/.agents/skills/review-plan/reference/output-templates.en.md +9 -12
  327. package/templates/.agents/skills/review-plan/reference/output-templates.zh-CN.md +9 -12
  328. package/templates/.agents/skills/review-plan/reference/report-template.en.md +9 -2
  329. package/templates/.agents/skills/review-plan/reference/report-template.zh-CN.md +9 -2
  330. package/templates/.agents/skills/review-plan/reference/review-criteria.en.md +7 -0
  331. package/templates/.agents/skills/review-plan/reference/review-criteria.zh-CN.md +7 -0
  332. package/templates/.agents/skills/update-agent-infra/SKILL.en.md +1 -2
  333. package/templates/.agents/skills/update-agent-infra/SKILL.zh-CN.md +1 -2
  334. package/templates/.agents/skills/update-agent-infra/scripts/sync-templates.js +3 -15
  335. package/templates/.agents/skills/watch-pr/SKILL.en.md +24 -14
  336. package/templates/.agents/skills/watch-pr/SKILL.zh-CN.md +25 -15
  337. package/templates/.agents/skills/watch-pr/config/verify.json +1 -2
  338. package/templates/.agents/skills/watch-pr/reference/monitor-and-heal.en.md +2 -2
  339. package/templates/.agents/skills/watch-pr/reference/monitor-and-heal.zh-CN.md +2 -2
  340. package/templates/.agents/templates/task.en.md +6 -1
  341. package/templates/.agents/templates/task.zh-CN.md +6 -1
  342. package/templates/.claude/commands/analyze-task.en.md +1 -1
  343. package/templates/.claude/commands/analyze-task.zh-CN.md +1 -1
  344. package/templates/.claude/commands/block-task.en.md +1 -1
  345. package/templates/.claude/commands/block-task.zh-CN.md +1 -1
  346. package/templates/.claude/commands/cancel-task.en.md +1 -1
  347. package/templates/.claude/commands/cancel-task.zh-CN.md +1 -1
  348. package/templates/.claude/commands/check-task.en.md +1 -1
  349. package/templates/.claude/commands/check-task.zh-CN.md +1 -1
  350. package/templates/.claude/commands/code-task.en.md +1 -1
  351. package/templates/.claude/commands/code-task.zh-CN.md +1 -1
  352. package/templates/.claude/commands/commit.en.md +1 -0
  353. package/templates/.claude/commands/commit.zh-CN.md +1 -0
  354. package/templates/.claude/commands/complete-manual-validation.en.md +1 -1
  355. package/templates/.claude/commands/complete-manual-validation.zh-CN.md +1 -1
  356. package/templates/.claude/commands/complete-task.en.md +1 -1
  357. package/templates/.claude/commands/complete-task.zh-CN.md +1 -1
  358. package/templates/.claude/commands/create-pr.en.md +1 -1
  359. package/templates/.claude/commands/create-pr.zh-CN.md +1 -1
  360. package/templates/.claude/commands/plan-task.en.md +1 -1
  361. package/templates/.claude/commands/plan-task.zh-CN.md +1 -1
  362. package/templates/.claude/commands/review-analysis.en.md +1 -1
  363. package/templates/.claude/commands/review-analysis.zh-CN.md +1 -1
  364. package/templates/.claude/commands/review-code.en.md +1 -1
  365. package/templates/.claude/commands/review-code.zh-CN.md +1 -1
  366. package/templates/.claude/commands/review-plan.en.md +1 -1
  367. package/templates/.claude/commands/review-plan.zh-CN.md +1 -1
  368. package/templates/.claude/commands/watch-pr.en.md +1 -1
  369. package/templates/.claude/commands/watch-pr.zh-CN.md +1 -1
  370. package/templates/.gemini/commands/_project_/analyze-task.en.toml +2 -0
  371. package/templates/.gemini/commands/_project_/analyze-task.zh-CN.toml +2 -0
  372. package/templates/.gemini/commands/_project_/block-task.en.toml +2 -0
  373. package/templates/.gemini/commands/_project_/block-task.zh-CN.toml +2 -0
  374. package/templates/.gemini/commands/_project_/cancel-task.en.toml +2 -0
  375. package/templates/.gemini/commands/_project_/cancel-task.zh-CN.toml +2 -0
  376. package/templates/.gemini/commands/_project_/check-task.en.toml +2 -0
  377. package/templates/.gemini/commands/_project_/check-task.zh-CN.toml +2 -0
  378. package/templates/.gemini/commands/_project_/code-task.en.toml +2 -0
  379. package/templates/.gemini/commands/_project_/code-task.zh-CN.toml +2 -0
  380. package/templates/.gemini/commands/_project_/commit.en.toml +4 -0
  381. package/templates/.gemini/commands/_project_/commit.zh-CN.toml +4 -0
  382. package/templates/.gemini/commands/_project_/complete-manual-validation.en.toml +2 -0
  383. package/templates/.gemini/commands/_project_/complete-manual-validation.zh-CN.toml +2 -0
  384. package/templates/.gemini/commands/_project_/complete-task.en.toml +2 -0
  385. package/templates/.gemini/commands/_project_/complete-task.zh-CN.toml +2 -0
  386. package/templates/.gemini/commands/_project_/create-pr.en.toml +2 -0
  387. package/templates/.gemini/commands/_project_/create-pr.zh-CN.toml +2 -0
  388. package/templates/.gemini/commands/_project_/plan-task.en.toml +2 -0
  389. package/templates/.gemini/commands/_project_/plan-task.zh-CN.toml +2 -0
  390. package/templates/.gemini/commands/_project_/review-analysis.en.toml +2 -0
  391. package/templates/.gemini/commands/_project_/review-analysis.zh-CN.toml +2 -0
  392. package/templates/.gemini/commands/_project_/review-code.en.toml +2 -0
  393. package/templates/.gemini/commands/_project_/review-code.zh-CN.toml +2 -0
  394. package/templates/.gemini/commands/_project_/review-plan.en.toml +2 -0
  395. package/templates/.gemini/commands/_project_/review-plan.zh-CN.toml +2 -0
  396. package/templates/.gemini/commands/_project_/watch-pr.en.toml +2 -0
  397. package/templates/.gemini/commands/_project_/watch-pr.zh-CN.toml +2 -0
  398. package/templates/.git-hooks/check-large-files.cjs +92 -0
  399. package/templates/.git-hooks/check-version-format.sh +5 -1
  400. package/templates/.git-hooks/pre-commit +1 -0
  401. package/templates/.opencode/commands/analyze-task.en.md +1 -1
  402. package/templates/.opencode/commands/analyze-task.zh-CN.md +1 -1
  403. package/templates/.opencode/commands/check-task.en.md +1 -1
  404. package/templates/.opencode/commands/check-task.zh-CN.md +1 -1
  405. package/templates/.opencode/commands/code-task.en.md +1 -1
  406. package/templates/.opencode/commands/code-task.zh-CN.md +1 -1
  407. package/templates/.opencode/commands/commit.en.md +2 -0
  408. package/templates/.opencode/commands/commit.zh-CN.md +2 -0
  409. package/templates/.opencode/commands/complete-task.en.md +1 -1
  410. package/templates/.opencode/commands/complete-task.zh-CN.md +1 -1
  411. package/templates/.opencode/commands/plan-task.en.md +1 -1
  412. package/templates/.opencode/commands/plan-task.zh-CN.md +1 -1
  413. package/templates/.opencode/commands/review-analysis.en.md +1 -1
  414. package/templates/.opencode/commands/review-analysis.zh-CN.md +1 -1
  415. package/templates/.opencode/commands/review-code.en.md +1 -1
  416. package/templates/.opencode/commands/review-code.zh-CN.md +1 -1
  417. package/templates/.opencode/commands/review-plan.en.md +1 -1
  418. package/templates/.opencode/commands/review-plan.zh-CN.md +1 -1
  419. package/templates/.agents/scripts/platform-adapters/platform-sync.github.js +0 -40
  420. package/templates/.agents/scripts/platform-adapters/platform-sync.js +0 -13
  421. package/templates/.agents/scripts/review-diff-fingerprint.js +0 -170
  422. package/templates/.agents/scripts/workflow-warnings.js +0 -290
  423. package/templates/.agents/skills/code-task/scripts/detect-mode.js +0 -257
  424. package/templates/.agents/skills/release/scripts/manage-milestones.github.sh +0 -80
  425. package/templates/.agents/skills/release/scripts/manage-milestones.sh +0 -6
@@ -1,237 +1,47 @@
1
- # Issue / PR 平台命令
1
+ # PR 平台意图命令
2
2
 
3
- 在需要验证平台认证、读取 Issue / PR,或执行 Issue / PR 创建与更新前先读取本文件。
3
+ PR 资源的定位、创建、绑定和元数据同步统一通过 typed internal intent;SKILL 只负责决定分支、标题、正文和调用时机,不直接拼装平台命令。
4
4
 
5
- ## 认证与仓库信息
6
-
7
- 先验证 GitHub CLI 可用且已认证:
8
-
9
- ```bash
10
- gh auth status
11
- gh repo view --json nameWithOwner
12
- ```
13
-
14
- 如果任一命令失败,按调用该规则的 skill 约定停止或降级。
15
-
16
- ## Upstream 仓库与权限检测
17
-
18
- 在后续任何 `gh issue` 或 `gh api "repos/..."` 操作之前,先按 `.agents/rules/issue-sync.md` 完成 `upstream_repo`、`has_triage` 和 `has_push` 检测。
19
-
20
- - 后续所有 `gh issue` 命令统一使用 `-R "$upstream_repo"`
21
- - 后续所有 repo 级 `gh api` 命令统一使用 `"repos/$upstream_repo/..."`
22
- - `gh pr *` 命令保持作用于当前仓库,不额外加 `-R`
23
- - `gh api "orgs/{owner}/..."` 这类 org 级命令保持不变
24
-
25
- ## Issue 模板检测
26
-
27
- 使用以下命令检测 GitHub Issue Forms:
28
-
29
- ```bash
30
- rg --files .github/ISSUE_TEMPLATE -g '*.yml' -g '!config.yml'
31
- ```
32
-
33
- 创建 Issue 前先读取匹配的 form 文件。目录不存在或没有匹配 form 时,使用调用方定义的 fallback 正文格式。
34
-
35
- 常见候选模板:
36
- - `bug_report.yml`:bug 工作
37
- - `question.yml`:问题或排查工作
38
- - `feature_request.yml`:功能工作
39
- - `documentation.yml`:文档工作
40
- - `other.yml`:通用 fallback
41
-
42
- 对 GitHub Issue Forms,检查匹配 form 的:
43
- - `name`
44
- - `type:`
45
- - `labels:`
46
- - `body:`
47
-
48
- 字段处理规则:
49
- - `textarea` 和 `input`:使用 `attributes.label` 作为 markdown 标题,并从 task.md 填充值
50
- - `markdown`:跳过模板说明文案
51
- - `dropdown` 和 `checkboxes`:跳过
52
- - task.md 缺少合适值时,写入 `N/A`
53
-
54
- 建议字段映射:
55
-
56
- | 模板字段提示 | task.md 来源 |
57
- |---|---|
58
- | `summary`, `title` | 任务标题 |
59
- | `description`, `problem`, `what happened`, `issue-description`, `current-content` | 任务描述 |
60
- | `solution`, `requirements`, `steps`, `suggested-content`, `impact`, `context`, `alternatives`, `expected` | 需求列表 |
61
- | 其他 `textarea` / `input` 字段 | 任务描述,否则 `N/A` |
62
-
63
- ## Issue 读取与创建
64
-
65
- 读取 Issue:
66
-
67
- ```bash
68
- gh issue view {issue-number} -R "$upstream_repo" --json number,title,body,labels,state,milestone,url
69
- ```
70
-
71
- 创建 Issue:
72
-
73
- ```bash
74
- gh issue create -R "$upstream_repo" --title "{title}" --body "{body}" --assignee @me {label-args} {milestone-arg}
75
- ```
76
-
77
- - `{label-args}` 由调用方按有效 label 列表展开为多个 `--label`
78
- - 仅当 `has_triage=true` 时传入 `{label-args}`;否则整体省略并继续
79
- - 没有有效 label 时省略全部 `--label`
80
- - 仅当 `has_triage=true` 时传入 `{milestone-arg}`;否则整体省略并继续
81
- - `{milestone-arg}` 为空时整体省略
82
-
83
- 设置 Issue Type:
84
-
85
- ```bash
86
- owner_type=$(gh api "repos/$upstream_repo" --jq '.owner.type // empty' 2>/dev/null || true)
87
- if [ "$owner_type" = "Organization" ]; then
88
- owner=${upstream_repo%%/*}
89
- gh api "orgs/$owner/issue-types" --jq '.[].name'
90
- gh api "repos/$upstream_repo/issues/{issue-number}" -X PATCH -f type="{issue-type}" --silent
91
- fi
92
- ```
93
-
94
- - 仅当 `has_push=true` 时执行 Issue Type 设置;否则跳过并继续
95
- - 仅当 owner type 为 `Organization` 时查询和设置 Issue Type;个人仓库或 owner type 探测失败时跳过并继续
96
- - 变更现有 Issue Type 时,先读取 `.agents/rules/issue-fields.md` 并使用流程 B,确保同名 pinned fields 迁移,且新 type 不包含的字段被清空
97
-
98
- ## Issue 更新
99
-
100
- 更新标题、label、assignee 或 milestone 时使用:
101
-
102
- ```bash
103
- gh issue edit {issue-number} -R "$upstream_repo" {edit-args}
104
- ```
105
-
106
- 常见参数:
107
- - `--title "{title}"`
108
- - `--add-label "{label}"`(仅当 `has_triage=true`)
109
- - `--remove-label "{label}"`(仅当 `has_triage=true`)
110
- - `--add-assignee @me`
111
- - `--milestone "{milestone}"`(仅当 `has_triage=true`)
112
-
113
- Assignee 同步不做权限预判;如果命令失败,按调用方约定静默跳过。
114
-
115
- 关闭 Issue:
116
-
117
- ```bash
118
- gh issue close {issue-number} -R "$upstream_repo" --reason "{reason}"
119
- ```
120
-
121
- ## Issue 评论读取
122
-
123
- 读取 Issue 评论或按隐藏标记查找已有评论:
124
-
125
- ```bash
126
- gh api "repos/$upstream_repo/issues/{issue-number}/comments" --paginate
127
- ```
128
-
129
- ## 历史任务评论扫描
130
-
131
- `find-existing-task.js` 仅消费 stdin,不直接调用 `gh`。由 AI 按宿主 OS 选择下面的 pipeline 命令。
132
-
133
- POSIX(bash / zsh):
134
-
135
- ```bash
136
- set -o pipefail
137
- gh api "repos/$upstream_repo/issues/{issue-number}/comments" \
138
- --paginate --jq '.[] | @json' \
139
- | node .agents/scripts/find-existing-task.js
140
- ```
141
-
142
- Windows(PowerShell 7+ / pwsh):
143
-
144
- ```powershell
145
- $ErrorActionPreference = 'Stop'
146
- gh api "repos/$upstream_repo/issues/{issue-number}/comments" `
147
- --paginate --jq '.[] | @json' |
148
- node .agents/scripts/find-existing-task.js
149
- if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
150
- ```
151
-
152
- 在 PowerShell 5.1 上需先显式启用 UTF-8 stdio,否则 pipe 可能损坏多字节字符:
153
-
154
- ```powershell
155
- [Console]::OutputEncoding = $OutputEncoding = [System.Text.UTF8Encoding]::new()
156
- ```
157
-
158
- ## PR 模板与元数据辅助命令
159
-
160
- 存在仓库 PR 模板时读取:
161
-
162
- ```bash
163
- cat .github/PULL_REQUEST_TEMPLATE.md
164
- ```
165
-
166
- 参考最近合并的 PR 风格:
167
-
168
- ```bash
169
- gh pr list --limit 3 --state merged --json number,title,body
170
- ```
171
-
172
- PR 元数据同步前验证标准 type labels 是否存在:
5
+ ## 定位
173
6
 
174
7
  ```bash
175
- gh label list --search "type:" --limit 1 --json name --jq 'length'
8
+ agent-infra-internal platform-pr inspect {task-id}
176
9
  ```
177
10
 
178
- 如果结果是 `0`,先运行 `init-labels`,再重试 PR 元数据同步。
179
-
180
- ## PR 读取与创建
11
+ 返回已绑定 PR 的规范身份;未绑定时返回 `PR_NOT_LINKED`。调用方不得按标题模糊匹配。
181
12
 
182
- 读取 PR:
183
-
184
- ```bash
185
- gh pr view {pr-number} --json number,title,body,labels,state,milestone,url,files
186
- ```
13
+ ## 创建或恢复
187
14
 
188
- 列出 PR:
15
+ 调用方把标题和正文分别写入临时文件,然后执行:
189
16
 
190
17
  ```bash
191
- gh pr list --state {state} --base {base-branch} --json number,title,url,headRefName,baseRefName
18
+ agent-infra-internal platform-pr create {task-id} \
19
+ --agent {agent} --base {target-branch} --head {current-branch} \
20
+ --title-file {title-file} --body-file {body-file}
192
21
  ```
193
22
 
194
- 按 head 分支查询当前分支是否存在开放 PR(`commit` 推送收尾用):
23
+ core 会先按 upstream、head 和 base 精确定位;唯一既有 PR 会复用并绑定,零个才创建,多个稳定失败。远端结果未知时重新精确定位,不盲重建。`--dry-run` 只返回计划。
195
24
 
196
- ```bash
197
- gh pr list --head "{branch}" --state open --json number,url --jq '.[0].url // empty'
198
- ```
199
-
200
- 创建 PR:
25
+ ## 显式绑定
201
26
 
202
27
  ```bash
203
- gh pr create --base "{target-branch}" --title "{title}" --assignee @me \
204
- {label-args} {milestone-arg} \
205
- --body "$(cat <<'EOF'
206
- {pr-body}
207
- EOF
208
- )"
28
+ agent-infra-internal platform-pr bind {task-id} --pr {pr-number} --agent {agent}
209
29
  ```
210
30
 
211
- - `{label-args}` 由调用方按有效 label 列表展开为多个 `--label "{label}"`
212
- - 仅当 `has_triage=true` 时传入 `{label-args}`;否则整体省略并继续
213
- - 没有有效 label 时省略全部 `--label`
214
- - `{milestone-arg}` 展开为 `--milestone "{milestone}"`
215
- - 仅当 `has_triage=true` 时传入 `{milestone-arg}`;否则整体省略并继续
216
- - `{milestone-arg}` 为空时整体省略
217
-
218
- ## PR 更新
31
+ 冲突绑定稳定失败且不修改 `task.md`。
219
32
 
220
- 更新 PR 标题、label 或 milestone:
33
+ ## 元数据同步
221
34
 
222
35
  ```bash
223
- gh pr edit {pr-number} {edit-args}
36
+ agent-infra-internal platform-pr sync {task-id} \
37
+ --agent {agent} --metadata --closing-issue
224
38
  ```
225
39
 
226
- 常见参数:
227
- - `--title "{title}"`
228
- - `--add-label "{label}"`
229
- - `--remove-label "{label}"`
230
- - `--milestone "{milestone}"`
40
+ core 从关联 Issue 复制 type / `in:` labels、assignee、具体 milestone,并确保 closing association。权限不足返回逐项 `skipped` 和顶层 `degraded`;不得反向修改 Issue。
231
41
 
232
- ## 错误处理
42
+ ## 状态语义
233
43
 
234
- - 读取失败:按调用方规则决定停止还是跳过
235
- - 更新失败:如果调用方标记为 best-effort,输出警告并继续
236
- - 权限不足:按 `has_triage` / `has_push` 分支跳过直接写操作,不阻塞调用方
237
- - `@me` 由 `gh` CLI 解析为当前认证用户
44
+ - `planned|applied|no-op|degraded`:退出码 0。
45
+ - `failed`:退出码 1,确定性输入或远端错误。
46
+ - `blocked`:退出码 2,网络、认证或结果未知,需要人工介入或安全重跑。
47
+ - 创建后摘要或元数据同步失败不得回滚 PR;调用方按所属 SKILL 记录 warning。
@@ -1,5 +1,47 @@
1
- # Issue 和 PR 命令
1
+ # PR 平台意图命令
2
2
 
3
- 当前代码平台未内置 Issue 或 Pull Request 命令支持。
3
+ PR 资源的定位、创建、绑定和元数据同步统一通过 typed internal intent;SKILL 只负责决定分支、标题、正文和调用时机,不直接拼装平台命令。
4
4
 
5
- 自定义平台会跳过平台专属自动化,除非你提供匹配的 `.{platform}.zh-CN.md` 规则模板。请以本地任务产物作为事实来源,或先安装平台专属模板包再运行工作流。
5
+ ## 定位
6
+
7
+ ```bash
8
+ agent-infra-internal platform-pr inspect {task-id}
9
+ ```
10
+
11
+ 返回已绑定 PR 的规范身份;未绑定时返回 `PR_NOT_LINKED`。调用方不得按标题模糊匹配。
12
+
13
+ ## 创建或恢复
14
+
15
+ 调用方把标题和正文分别写入临时文件,然后执行:
16
+
17
+ ```bash
18
+ agent-infra-internal platform-pr create {task-id} \
19
+ --agent {agent} --base {target-branch} --head {current-branch} \
20
+ --title-file {title-file} --body-file {body-file}
21
+ ```
22
+
23
+ core 会先按 upstream、head 和 base 精确定位;唯一既有 PR 会复用并绑定,零个才创建,多个稳定失败。远端结果未知时重新精确定位,不盲重建。`--dry-run` 只返回计划。
24
+
25
+ ## 显式绑定
26
+
27
+ ```bash
28
+ agent-infra-internal platform-pr bind {task-id} --pr {pr-number} --agent {agent}
29
+ ```
30
+
31
+ 冲突绑定稳定失败且不修改 `task.md`。
32
+
33
+ ## 元数据同步
34
+
35
+ ```bash
36
+ agent-infra-internal platform-pr sync {task-id} \
37
+ --agent {agent} --metadata --closing-issue
38
+ ```
39
+
40
+ core 从关联 Issue 复制 type / `in:` labels、assignee、具体 milestone,并确保 closing association。权限不足返回逐项 `skipped` 和顶层 `degraded`;不得反向修改 Issue。
41
+
42
+ ## 状态语义
43
+
44
+ - `planned|applied|no-op|degraded`:退出码 0。
45
+ - `failed`:退出码 1,确定性输入或远端错误。
46
+ - `blocked`:退出码 2,网络、认证或结果未知,需要人工介入或安全重跑。
47
+ - 创建后摘要或元数据同步失败不得回滚 PR;调用方按所属 SKILL 记录 warning。
@@ -14,6 +14,6 @@ These hidden markers are the canonical registry for Issue synchronization:
14
14
 
15
15
  Callers should refer to the marker key in skill prose and keep concrete marker strings in this rule or the platform adapter defaults.
16
16
 
17
- This code platform does not provide built-in issue synchronization.
17
+ This code platform does not provide an Issue adapter. `platform-issue` returns structured no-op/degraded operations.
18
18
 
19
19
  Issue metadata, labels, milestones, assignees, and comments are skipped for custom platforms unless you provide matching `.{platform}.en.md` rule templates and platform adapters. Continue writing local task artifacts normally.
@@ -1,9 +1,7 @@
1
- # Issue Sync Rules
1
+ # Issue Sync
2
2
 
3
3
  ## Marker Registry
4
4
 
5
- These hidden markers are the canonical registry for Issue synchronization:
6
-
7
5
  | Key | Marker |
8
6
  |---|---|
9
7
  | `task` | `<!-- sync-issue:{task-id}:task -->` |
@@ -12,312 +10,27 @@ These hidden markers are the canonical registry for Issue synchronization:
12
10
  | `summary` | `<!-- sync-issue:{task-id}:summary -->` |
13
11
  | `cancel` | `<!-- sync-issue:{task-id}:cancel -->` |
14
12
 
15
- Callers should refer to the marker key in skill prose and keep concrete marker strings in this rule or the platform adapter defaults.
16
-
17
- Read this file before a task skill updates a GitHub Issue.
18
-
19
- ## Upstream Repository Detection
20
-
21
- When an external contributor runs `gh` inside a fork, the default target is the fork instead of the upstream repository. Detect the upstream repository first and reuse `upstream_repo` for every later `gh issue` and `gh api "repos/..."` operation.
22
-
23
- ```bash
24
- upstream_repo=$(gh api "repos/$(gh repo view --json nameWithOwner -q .nameWithOwner)" \
25
- --jq 'if .fork then .parent.full_name else .full_name end' 2>/dev/null)
26
- ```
27
-
28
- - non-fork repository: returns the current repository `full_name`
29
- - fork repository: returns the parent repository `full_name`
30
- - every later `gh issue` command must use `-R "$upstream_repo"`
31
- - every later `gh api "repos/..."` command must use `"repos/$upstream_repo/..."`
32
-
33
- ## Permission Detection
34
-
35
- Run one permission check against the upstream repository before any write operation. When detection fails, treat it as no permission so the workflow degrades safely.
36
-
37
- ```bash
38
- repo_perms=$(gh api "repos/$upstream_repo" --jq '.permissions' 2>/dev/null || echo '{}')
39
- has_triage=$(printf '%s' "$repo_perms" | grep -q '"triage":true' 2>/dev/null && echo true || echo false)
40
- has_push=$(printf '%s' "$repo_perms" | grep -q '"push":true' 2>/dev/null && echo true || echo false)
41
- ```
42
-
43
- Operation-to-permission mapping:
44
-
45
- | Operation | Required permission | Notes |
46
- |------|---------|------|
47
- | add/remove labels | `has_triage` | triage is the minimum permission |
48
- | add/remove milestones | `has_triage` | same as above |
49
- | edit Issue body | `has_triage` | used by requirement checkbox sync |
50
- | set Issue Type | `has_push` | requires write permission |
51
- | set Issue fields | `has_push` | pinned custom fields; failures are non-blocking |
52
- | set assignee | no check | skip directly when it fails |
53
- | publish/update comments | no check | allowed for authenticated users in public repositories |
54
-
55
- ## Degradation Rules
56
-
57
- | Level | Operation type | With permission | Without permission |
58
- |------|---------|--------|--------|
59
- | silent degradation | label / milestone / Issue Type / Issue fields | run the `gh` command directly and also update the task comment | skip direct `gh` writes, update only the task comment, let the bot backfill |
60
- | direct skip | assignee | run the `gh` command directly | do nothing else |
61
- | normal execution | comments | run normally | run normally |
62
-
63
- Key rules:
64
-
65
- - task comment sync must continue whether write permission exists or not
66
- - insufficient permission only affects direct Issue metadata writes and must not stop the skill
67
- - keep the existing `2>/dev/null || true` error-tolerance pattern
68
-
69
- When the caller has a `{task-id}` / task directory, permission degradation or critical sync failure must be recorded in `## Workflow Warnings`:
70
-
71
- ```bash
72
- node .agents/scripts/workflow-warnings.js add .agents/workspace/active/{task-id} \
73
- --step issue-sync --severity IMPORTANT --code PERMISSION_DEGRADED \
74
- --target "{operation}" --message "{reason}" \
75
- --action "Wait for the bot/maintainer to backfill, or rerun the workflow step after permissions are available"
76
- ```
77
-
78
- Comment create/update failures and exhausted network retries that affect reviewer visibility use `severity=ACTION_REQUIRED` with `code=COMMENT_SYNC_FAILED` or `NETWORK_RETRY_EXHAUSTED`.
79
-
80
- ## External Contributor Locking
81
-
82
- Maintainers (`has_triage=true`) are never blocked. External contributors (`has_triage=false`) must check whether the current task already has a `task` comment author on the Issue before they start.
83
-
84
- ```bash
85
- task_comment_author=$(gh api "repos/$upstream_repo/issues/{issue-number}/comments" \
86
- --paginate --jq '[.[] | select(.body | test("<!-- sync-issue:{task-id}:task -->")) | .user.login] | first' \
87
- 2>/dev/null || echo "")
88
- current_user=$(gh api user --jq '.login' 2>/dev/null || echo "")
89
- ```
90
-
91
- Decision rules:
92
-
93
- - no `task` comment exists: allow execution
94
- - the `task` comment author is the current user: allow continuation
95
- - the `task` comment author is another user: stop immediately and ask the contributor to coordinate with a maintainer before taking over
96
-
97
- ## Direct `status:` Label Updates
98
-
99
- Algorithm note: keep the flow below aligned with `.github/scripts/sync-labels-to-set.sh` (set-diff sync). This is the AI agent-side equivalent implementation for the `target_set = {"{target-status-label}"}` case. If either side changes, update the other one in the same patch to avoid drift between the agent and the bot.
100
-
101
- If task.md contains a valid `issue_number` (not empty and not `N/A`) and the Issue state is `OPEN`, sync the `status:` labels to the target value with an idempotent set diff:
102
-
103
- ```bash
104
- state=$(gh issue view {issue-number} -R "$upstream_repo" --json state --jq '.state' 2>/dev/null)
105
- if [ "$state" = "OPEN" ]; then
106
- current_status_labels=$(gh issue view {issue-number} -R "$upstream_repo" \
107
- --json labels --jq '.labels[].name | select(startswith("status:"))' 2>/dev/null || true)
108
- printf '%s\n' "$current_status_labels" | while IFS= read -r label; do
109
- [ -z "$label" ] && continue
110
- if [ "$label" != "{target-status-label}" ] && [ "$has_triage" = "true" ]; then
111
- gh issue edit {issue-number} -R "$upstream_repo" --remove-label "$label" 2>/dev/null || true
112
- fi
113
- done
114
- if [ "$has_triage" = "true" ] && ! printf '%s\n' "$current_status_labels" | grep -qxF "{target-status-label}"; then
115
- gh issue edit {issue-number} -R "$upstream_repo" --add-label "{target-status-label}" 2>/dev/null || true
116
- fi
117
- fi
118
- ```
119
-
120
- Use `while IFS= read -r label` so labels like `status: in-progress` are handled line-by-line instead of being split on spaces.
121
-
122
- If `has_triage=false`, skip direct label changes, update only the task comment, and let the bot backfill from the latest task metadata.
123
-
124
- If `gh` fails, skip and continue. Do not fail the skill.
125
-
126
- ## Assignee Sync
127
-
128
- When a skill creates or imports an Issue, automatically add the current executor as assignee:
129
-
130
- - When the `create-task` platform rule triggers Issue creation: use `--assignee @me` in `gh issue create` and include `-R "$upstream_repo"`
131
- - `import-issue`: run `gh issue edit {issue-number} -R "$upstream_repo" --add-assignee @me 2>/dev/null || true` after import
132
-
133
- `@me` is resolved by `gh` CLI to the authenticated user. The operation is idempotent. If the command fails, skip it directly and do not provide a fallback path.
134
-
135
- ## `in:` Label Sync
136
-
137
- > **Trigger timing**: run `in:` label sync only after code is committed (the `commit` skill). Do not run it during `code-task`. During `create-pr`, only copy the labels from the Issue to the PR without recomputing them.
138
-
139
- Read the `labels.in` mapping from `.agents/.airc.json`.
140
-
141
- ```bash
142
- git diff {base-branch}...HEAD --name-only
143
- ```
144
-
145
- `{base-branch}` is usually `main`; in PR context, use the PR base branch.
146
-
147
- ### When a mapping exists (precise add/remove)
148
-
149
- 1. Collect the full set of changed files in the branch
150
- 2. Match each file against the directory prefixes in `labels.in` to compute the expected `in:` label set
151
- 3. Query the current `in:` labels on the Issue or PR
152
- 4. Apply the diff:
153
- - expected but missing: only when `has_triage=true`, run `gh issue edit {issue-number} -R "$upstream_repo" --add-label "in: {module}" 2>/dev/null || true`
154
- - present but no longer expected: only when `has_triage=true`, run `gh issue edit {issue-number} -R "$upstream_repo" --remove-label "in: {module}" 2>/dev/null || true`
155
-
156
- ### When no mapping exists (add-only fallback)
157
-
158
- If `.airc.json` has no `labels.in` field or it is empty:
159
-
160
- 1. query existing repository `in:` labels
161
- 2. derive the top-level directory from each changed file
162
- 3. only when `has_triage=true`, add matching labels and never remove existing `in:` labels
163
-
164
- If `has_triage=false`, skip direct `in:` label edits and keep task comment sync as the source for later automation backfill.
165
-
166
- ## Artifact Comment Publishing
167
-
168
- The hidden marker must remain compatible:
169
-
170
- ```html
171
- <!-- sync-issue:{task-id}:{file-stem} -->
172
- ```
173
-
174
- Check for an existing comment before publishing:
13
+ Comments use `platform-comment`; Issue resources use `platform-issue`:
175
14
 
176
15
  ```bash
177
- gh api "repos/$upstream_repo/issues/{issue-number}/comments" \
178
- --paginate --jq '.[].body' \
179
- | grep -qF "<!-- sync-issue:{task-id}:{file-stem} -->"
180
- ```
181
-
182
- Skip publishing when the marker already exists.
183
-
184
- Publishing flow:
185
-
186
- 1. Read the local artifact file in full first
187
- 2. Inline the full file contents as `{artifact body}`
188
- 3. Do not summarize, rewrite, or truncate the artifact body
189
-
190
- Use this format:
191
-
192
- ```markdown
193
- <!-- sync-issue:{task-id}:{file-stem} -->
194
- ## {artifact-title}
195
-
196
- > **{agent}** · {task-id}
197
-
198
- {artifact body}
199
-
200
- ---
201
- *Generated by {agent} · Internal tracking: {task-id}*
202
- ```
203
-
204
- `{agent}` is the name of the AI agent currently executing the skill (for example `claude`, `codex`, or `gemini`).
205
-
206
- `summary` comments need extra handling:
207
-
208
- - find an existing `<!-- sync-issue:{task-id}:summary -->` comment ID first
209
- - create the comment when none exists
210
- - patch the existing comment in place when the body changed by using `gh api "repos/$upstream_repo/issues/comments/{comment-id}" -X PATCH -f body=...`
211
-
212
- ```bash
213
- summary_comment_id=$(gh api "repos/$upstream_repo/issues/{issue-number}/comments" \
214
- --paginate --jq '.[] | select(.body | startswith("<!-- sync-issue:{task-id}:summary -->")) | .id' \
215
- | head -n 1)
216
- gh api "repos/$upstream_repo/issues/comments/{comment-id}" -X PATCH -f body="$(cat <<'EOF'
217
- {comment-body}
218
- EOF
219
- )"
220
- ```
221
-
222
- Comment publishing is not gated by `has_triage` or `has_push`.
223
-
224
- If comment lookup, creation, or update fails and the caller has a task directory, record a Workflow Warning (`step=issue-sync`, `severity=ACTION_REQUIRED`, `code=COMMENT_SYNC_FAILED`, `target={file-stem}`) and surface it in the final Workflow Warnings output block.
225
-
226
- ## task.md Comment Sync
227
-
228
- Hidden marker:
229
-
230
- ```html
231
- <!-- sync-issue:{task-id}:task -->
232
- ```
233
-
234
- Use an idempotent update path for `task.md`:
235
-
236
- 1. Read the full `task.md`
237
- 2. Wrap the YAML frontmatter (content between the `---` delimiters) inside a `<details><summary>Metadata (frontmatter)</summary>` block with a `yaml` code fence, then render the remaining body as normal Markdown
238
- 3. Use `task` as `{file-stem}`
239
- 4. Find an existing comment ID for the marker
240
- 5. Create the comment when none exists
241
- 6. PATCH the comment in place when the body changed
242
- 7. Skip when the body is unchanged
243
-
244
- task.md comment format:
245
-
246
- ```markdown
247
- <!-- sync-issue:{task-id}:task -->
248
- ## Task File
249
-
250
- > **{agent}** · {task-id}
251
-
252
- <details><summary>Metadata (frontmatter)</summary>
253
-
254
- ​```yaml
255
- ---
256
- {frontmatter fields}
257
- ---
258
- ​```
259
-
260
- </details>
261
-
262
- {task.md body after frontmatter}
263
-
264
- ---
265
- *Generated by {agent} · Internal tracking: {task-id}*
16
+ agent-infra-internal platform-issue inspect {task-id}
17
+ agent-infra-internal platform-issue create {task-id} --agent {agent}
18
+ agent-infra-internal platform-issue bind {task-id} --issue {number} --agent {agent}
19
+ agent-infra-internal platform-issue sync {task-id} --agent {agent} {desired-state-flags}
266
20
  ```
267
21
 
268
- When restoring, extract the frontmatter from the `<details>` block and reassemble it with the body to recover the original `task.md`.
269
-
270
- Title mapping:
22
+ The core owns status/in labels, assignees, milestones, Issue Type, pinned fields, requirements, state, capabilities, dry-run, retries, errors, and idempotency. Omitted flags preserve values; `none` explicitly clears them. Status labels converge to at most one, and ambiguous requirement identity fails closed.
271
23
 
272
- - `task` -> `Task File`
24
+ `planned|applied|no-op|degraded` exit 0; `failed` exits 1; `blocked` exits 2.
273
25
 
274
- task comment sync always runs and is never downgraded.
275
-
276
- ## Backfill Rules (run before `/complete-task` archives)
277
-
278
- - Scan `task.md`, `analysis*.md`, `review-analysis*.md`, `plan*.md`, `review-plan*.md`, `code*.md`, and `review-code*.md` in the task directory
279
- - Check whether each `{file-stem}` was already published by its hidden marker; publish only missing artifacts
280
- - Backfill only appends missing comments and never deletes or reorders existing comments
281
- - Resolve `{agent}` for backfilled comments in this order:
282
- 1. match the artifact filename in Activity Log (for example `→ analysis.md`) and extract the executor from `by {agent}`
283
- 2. if no match is found, fall back to `assigned_to` in task.md frontmatter
284
- 3. if `assigned_to` is also unavailable, use the current backfilling agent
285
- - Derive the previous and next neighbors from Activity Log order and add this note below the title:
286
-
287
- ```markdown
288
- > ⚠️ This comment was backfilled. In the timeline it belongs after "{previous-artifact-title}" and before "{next-artifact-title}".
289
- ```
290
-
291
- - If only one neighbor exists, keep only that side of the note; if neither exists, omit the note
292
-
293
- Title mapping:
294
-
295
- - `task` -> `Task File`
296
- - `analysis` / `analysis-r{N}` -> `Requirements Analysis` / `Requirements Analysis (Round {N})`
297
- - `review-analysis` / `review-analysis-r{N}` -> `Requirements Analysis Review (Round 1)` / `Requirements Analysis Review (Round {N})`
298
- - `plan` / `plan-r{N}` -> `Technical Plan` / `Technical Plan (Round {N})`
299
- - `review-plan` / `review-plan-r{N}` -> `Technical Plan Review (Round 1)` / `Technical Plan Review (Round {N})`
300
- - `code` / `code-r{N}` -> `Code Report (Round 1)` / `Code Report (Round {N})`
301
- - `review-code` / `review-code-r{N}` -> `Code Review (Round 1)` / `Code Review (Round {N})`
302
- - `summary` -> `Delivery Summary`
303
-
304
- Backfilled comments are also not gated by `has_triage` or `has_push`.
305
-
306
- ## Requirement Checkbox Sync
307
-
308
- Extract checked `- [x]` items from the `## Requirements` section in task.md. Skip when none exist.
309
-
310
- Read the current Issue body:
26
+ Map material degraded/failed/blocked results to workflow warnings through the structured intent; callers must not edit warning rows directly:
311
27
 
312
28
  ```bash
313
- gh issue view {issue-number} -R "$upstream_repo" --json body --jq '.body'
29
+ agent-infra-internal task-warning {task-id} add \
30
+ --step issue-sync --severity {severity} --code {code} \
31
+ --target {target} --message {message} --action {action}
314
32
  ```
315
33
 
316
- Replace matching `- [ ] {text}` lines with `- [x] {text}`. Use `gh api` to PATCH the full body only when the body changed and `has_triage=true`.
317
-
318
- If `has_triage=false`, skip the body PATCH, update only the task comment, and let the bot backfill from the latest task state.
319
-
320
- ## Shell Safety Rules
34
+ ## Backfill
321
35
 
322
- 1. Read the artifact first, then inline the real text into the heredoc body. Do not use command substitution or variable expansion inside `<<'EOF'`.
323
- 2. Do not use `echo` to build content containing `<!-- -->`. Use `cat <<'EOF'` or `printf '%s\n'` instead.
36
+ During completion, artifact comments are replayed with `--kind artifact --artifact <file> --backfill`. If the remote Issue has no matching marker, the core creates a comment with a historical-backfill notice. If a valid base or chunk marker set already exists, the core returns `no-op` and preserves the existing bodies and chunks. Marker conflicts still fail without writes.