@fitlab-ai/agent-infra 0.9.13 → 0.9.15

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 (428) hide show
  1. package/README.md +10 -0
  2. package/README.zh-CN.md +10 -0
  3. package/bin/cli.ts +26 -9
  4. package/bin/internal-cli.sh +45 -0
  5. package/dist/bin/cli.js +173 -157
  6. package/dist/bin/internal-cli.js +126 -42
  7. package/dist/lib/agent-client.js +5 -0
  8. package/dist/lib/agent-clients/adapters/codex-lifecycle/capability-store.js +165 -27
  9. package/dist/lib/agent-clients/adapters/codex-lifecycle/sandbox-controller.js +3 -2
  10. package/dist/lib/defaults.json +103 -103
  11. package/dist/lib/fs/durable-write.js +37 -0
  12. package/dist/lib/fs/file-lock.js +111 -0
  13. package/dist/lib/host-control/audit.js +19 -0
  14. package/dist/lib/host-control/client.js +142 -0
  15. package/dist/lib/host-control/command.js +49 -0
  16. package/dist/lib/host-control/path.js +160 -0
  17. package/dist/lib/host-control/secure-fs.js +140 -0
  18. package/dist/lib/host-control/server.js +159 -0
  19. package/dist/lib/host-control/service.js +112 -0
  20. package/dist/lib/init.js +11 -2
  21. package/dist/lib/internal/agent-client.js +5 -2
  22. package/dist/lib/internal/cli-route-inventory.js +154 -0
  23. package/dist/lib/internal/codex-lifecycle.js +15 -12
  24. package/dist/lib/internal/codex-sandbox-controller.js +8 -2
  25. package/dist/lib/internal/demo-promotion.js +322 -0
  26. package/dist/lib/internal/demo-transcript.js +454 -0
  27. package/dist/lib/internal/git-workflow.js +10 -6
  28. package/dist/lib/internal/host-control.js +28 -0
  29. package/dist/lib/internal/manual-validation.js +322 -0
  30. package/dist/lib/internal/platform-checks.js +16 -4
  31. package/dist/lib/internal/platform-comment.js +16 -4
  32. package/dist/lib/internal/platform-context.js +4 -1
  33. package/dist/lib/internal/platform-issue.js +12 -4
  34. package/dist/lib/internal/platform-metadata.js +88 -0
  35. package/dist/lib/internal/platform-pr-review.js +16 -3
  36. package/dist/lib/internal/platform-pr.js +42 -14
  37. package/dist/lib/internal/platform-release-notes.js +6 -3
  38. package/dist/lib/internal/platform-security.js +93 -0
  39. package/dist/lib/internal/pr-review-grade.js +14 -3
  40. package/dist/lib/internal/release-workflow.js +82 -89
  41. package/dist/lib/internal/sandbox-control.js +171 -7
  42. package/dist/lib/internal/task-activity.js +13 -4
  43. package/dist/lib/internal/task-artifact.js +19 -107
  44. package/dist/lib/internal/task-context.js +4 -1
  45. package/dist/lib/internal/task-create.js +48 -14
  46. package/dist/lib/internal/task-delivery.js +4 -1
  47. package/dist/lib/internal/task-event.js +38 -35
  48. package/dist/lib/internal/task-finalization.js +4 -1
  49. package/dist/lib/internal/task-invalidation.js +4 -1
  50. package/dist/lib/internal/task-ledger.js +12 -1
  51. package/dist/lib/internal/task-lifecycle.js +4 -1
  52. package/dist/lib/internal/task-operation-registry.js +519 -0
  53. package/dist/lib/internal/task-orchestration.js +12 -0
  54. package/dist/lib/internal/task-override.js +10 -3
  55. package/dist/lib/internal/task-qualification.js +90 -0
  56. package/dist/lib/internal/task-review.js +10 -52
  57. package/dist/lib/internal/task-short-id.js +11 -1
  58. package/dist/lib/internal/task-snapshot.js +4 -1
  59. package/dist/lib/internal/task-validate.js +37 -12
  60. package/dist/lib/internal/task-verify.js +5 -1
  61. package/dist/lib/internal/task-warning.js +8 -1
  62. package/dist/lib/owned-path.js +33 -0
  63. package/dist/lib/platform/check-status.js +11 -0
  64. package/dist/lib/platform/comment-safety.js +229 -0
  65. package/dist/lib/platform/completion-backfill.js +1 -1
  66. package/dist/lib/platform/github-data.js +241 -0
  67. package/dist/lib/platform/github-provider.js +248 -26
  68. package/dist/lib/platform/issue-comments.js +146 -34
  69. package/dist/lib/platform/issues.js +1 -179
  70. package/dist/lib/platform/pr-change-report.js +6 -12
  71. package/dist/lib/platform/pr-checks.js +12 -65
  72. package/dist/lib/platform/pr-summary.js +83 -10
  73. package/dist/lib/platform/provider-contract.d.ts +67 -1
  74. package/dist/lib/platform/provider-contract.js +6 -2
  75. package/dist/lib/platform/provider-validation.js +76 -3
  76. package/dist/lib/platform/pull-requests.js +117 -275
  77. package/dist/lib/platform/repository-metadata.js +377 -0
  78. package/dist/lib/platform/security-alerts.js +155 -0
  79. package/dist/lib/platform/snapshots.js +2 -0
  80. package/dist/lib/platform/verification-sync.js +154 -162
  81. package/dist/lib/process-data/index.js +7 -0
  82. package/dist/lib/release/workflow.js +1 -1
  83. package/dist/lib/run/index.js +5 -0
  84. package/dist/lib/sandbox/commands/control-status.js +22 -0
  85. package/dist/lib/sandbox/commands/create.js +39 -8
  86. package/dist/lib/sandbox/commands/ls.js +5 -0
  87. package/dist/lib/sandbox/commands/rm.js +3 -807
  88. package/dist/lib/sandbox/commands/show.js +16 -0
  89. package/dist/lib/sandbox/control/audit.js +203 -0
  90. package/dist/lib/sandbox/control/client.js +125 -12
  91. package/dist/lib/sandbox/control/completed-reentry.js +85 -0
  92. package/dist/lib/sandbox/control/container-identity.js +28 -31
  93. package/dist/lib/sandbox/control/executor.js +233 -34
  94. package/dist/lib/sandbox/control/finalization-response.js +27 -0
  95. package/dist/lib/sandbox/control/identity-sentinel.js +107 -0
  96. package/dist/lib/sandbox/control/lifecycle.js +656 -128
  97. package/dist/lib/sandbox/control/native-file-lock.js +85 -0
  98. package/dist/lib/sandbox/control/protocol.js +55 -4
  99. package/dist/lib/sandbox/control/server.js +720 -79
  100. package/dist/lib/sandbox/control/state.js +63 -3
  101. package/dist/lib/sandbox/control/task-view.js +183 -0
  102. package/dist/lib/sandbox/control/task-workflow.js +74 -0
  103. package/dist/lib/sandbox/control/workflow-executor.js +99 -0
  104. package/dist/lib/sandbox/engines/authority.js +289 -0
  105. package/dist/lib/sandbox/engines/docker-exact-discovery.js +97 -0
  106. package/dist/lib/sandbox/index.js +7 -2
  107. package/dist/lib/sandbox/recovery.js +49 -5
  108. package/dist/lib/sandbox/removal.js +1717 -0
  109. package/dist/lib/sandbox/task-cleanup.js +217 -0
  110. package/dist/lib/sandbox/workspace-view.js +15 -15
  111. package/dist/lib/sandbox/worktree-safety.js +4 -1
  112. package/dist/lib/server/index.js +8 -0
  113. package/dist/lib/task/activity-intent.js +2 -1
  114. package/dist/lib/task/activity-log.js +30 -24
  115. package/dist/lib/task/artifact-command.js +101 -0
  116. package/dist/lib/task/artifact-lifecycle.js +71 -40
  117. package/dist/lib/task/artifact-name.js +36 -0
  118. package/dist/lib/task/artifact-operations.js +474 -0
  119. package/dist/lib/task/artifact-receipts.js +3 -15
  120. package/dist/lib/task/artifact-repair-intent.js +130 -0
  121. package/dist/lib/task/artifact-schema.js +127 -0
  122. package/dist/lib/task/capabilities.js +83 -19
  123. package/dist/lib/task/codex-orchestration.js +71 -25
  124. package/dist/lib/task/commit-identity.js +28 -0
  125. package/dist/lib/task/commit-operation.js +2 -16
  126. package/dist/lib/task/control-authority.js +375 -5
  127. package/dist/lib/task/control-recovery.js +128 -0
  128. package/dist/lib/task/create-service.js +103 -4
  129. package/dist/lib/task/create.js +80 -2
  130. package/dist/lib/task/decision-details.js +2 -46
  131. package/dist/lib/task/events.js +306 -76
  132. package/dist/lib/task/finalization-state.js +9 -0
  133. package/dist/lib/task/human-override.js +3 -6
  134. package/dist/lib/task/implementation-inputs.js +3 -3
  135. package/dist/lib/task/index.js +11 -3
  136. package/dist/lib/task/intermediate-cleanup.js +383 -0
  137. package/dist/lib/task/invalidation.js +18 -65
  138. package/dist/lib/task/ledger-intents.js +7 -22
  139. package/dist/lib/task/ledger.js +1 -3
  140. package/dist/lib/task/lifecycle.js +19 -1
  141. package/dist/lib/task/local-artifact-finalization.js +190 -290
  142. package/dist/lib/task/manual-validation-completion.js +26 -0
  143. package/dist/lib/task/manual-validation-evidence.js +130 -0
  144. package/dist/lib/task/manual-validation-receipt.js +101 -0
  145. package/dist/lib/task/manual-validation-shared.js +40 -0
  146. package/dist/lib/task/manual-validation-transaction.js +243 -0
  147. package/dist/lib/task/markdown.js +47 -0
  148. package/dist/lib/task/orchestration.js +206 -69
  149. package/dist/lib/task/qualification-audit.js +476 -0
  150. package/dist/lib/task/qualification-confirmation.js +109 -0
  151. package/dist/lib/task/qualification-intents.js +148 -0
  152. package/dist/lib/task/review-artifacts.js +23 -40
  153. package/dist/lib/task/review-command.js +25 -0
  154. package/dist/lib/task/review-finalization.js +146 -97
  155. package/dist/lib/task/review-fingerprint.js +2 -2
  156. package/dist/lib/task/sections.js +34 -54
  157. package/dist/lib/task/verification-config.js +11 -0
  158. package/dist/lib/task/verification-engine.js +170 -327
  159. package/dist/lib/task/verification.js +1 -1
  160. package/dist/lib/task/workflow-command.js +17 -0
  161. package/dist/lib/task/workflow-warning-intents.js +0 -16
  162. package/dist/lib/task/workflow-warnings.js +28 -2
  163. package/dist/lib/update.js +2 -0
  164. package/dist/lifecycle-build-manifest.json +3 -3
  165. package/lib/agent-client.ts +9 -0
  166. package/lib/agent-clients/adapters/codex-lifecycle/capability-store.ts +223 -33
  167. package/lib/agent-clients/adapters/codex-lifecycle/sandbox-controller.ts +3 -2
  168. package/lib/fs/durable-write.ts +29 -0
  169. package/lib/fs/file-lock.ts +113 -0
  170. package/lib/host-control/audit.ts +22 -0
  171. package/lib/host-control/client.ts +172 -0
  172. package/lib/host-control/command.ts +60 -0
  173. package/lib/host-control/path.ts +167 -0
  174. package/lib/host-control/secure-fs.ts +135 -0
  175. package/lib/host-control/server.ts +180 -0
  176. package/lib/host-control/service.ts +133 -0
  177. package/lib/init.ts +15 -2
  178. package/lib/internal/agent-client.ts +4 -2
  179. package/lib/internal/cli-route-inventory.ts +142 -0
  180. package/lib/internal/codex-lifecycle.ts +14 -12
  181. package/lib/internal/codex-sandbox-controller.ts +7 -2
  182. package/lib/internal/demo-promotion.ts +354 -0
  183. package/lib/internal/demo-transcript.ts +419 -0
  184. package/lib/internal/git-workflow.ts +9 -6
  185. package/lib/internal/host-control.ts +28 -0
  186. package/lib/internal/manual-validation.ts +306 -0
  187. package/lib/internal/platform-checks.ts +12 -4
  188. package/lib/internal/platform-comment.ts +12 -4
  189. package/lib/internal/platform-context.ts +3 -1
  190. package/lib/internal/platform-issue.ts +11 -4
  191. package/lib/internal/platform-metadata.ts +70 -0
  192. package/lib/internal/platform-pr-review.ts +14 -3
  193. package/lib/internal/platform-pr.ts +38 -14
  194. package/lib/internal/platform-release-notes.ts +5 -3
  195. package/lib/internal/platform-security.ts +83 -0
  196. package/lib/internal/pr-review-grade.ts +10 -3
  197. package/lib/internal/release-workflow.ts +91 -87
  198. package/lib/internal/sandbox-control.ts +181 -6
  199. package/lib/internal/task-activity.ts +12 -4
  200. package/lib/internal/task-artifact.ts +15 -79
  201. package/lib/internal/task-context.ts +3 -1
  202. package/lib/internal/task-create.ts +76 -15
  203. package/lib/internal/task-delivery.ts +3 -1
  204. package/lib/internal/task-event.ts +21 -10
  205. package/lib/internal/task-finalization.ts +3 -1
  206. package/lib/internal/task-invalidation.ts +3 -1
  207. package/lib/internal/task-ledger.ts +11 -1
  208. package/lib/internal/task-lifecycle.ts +3 -1
  209. package/lib/internal/task-operation-registry.ts +590 -0
  210. package/lib/internal/task-orchestration.ts +12 -0
  211. package/lib/internal/task-override.ts +9 -3
  212. package/lib/internal/task-qualification.ts +61 -0
  213. package/lib/internal/task-review.ts +7 -50
  214. package/lib/internal/task-short-id.ts +10 -1
  215. package/lib/internal/task-snapshot.ts +3 -1
  216. package/lib/internal/task-validate.ts +32 -12
  217. package/lib/internal/task-verify.ts +4 -1
  218. package/lib/internal/task-warning.ts +7 -1
  219. package/lib/owned-path.ts +26 -0
  220. package/lib/platform/check-status.ts +9 -0
  221. package/lib/platform/comment-safety.ts +255 -0
  222. package/lib/platform/completion-backfill.ts +1 -1
  223. package/lib/platform/github-data.ts +322 -0
  224. package/lib/platform/github-provider.ts +244 -27
  225. package/lib/platform/issue-comments.ts +159 -35
  226. package/lib/platform/issues.ts +4 -245
  227. package/lib/platform/pr-change-report.ts +6 -12
  228. package/lib/platform/pr-checks.ts +13 -77
  229. package/lib/platform/pr-summary.ts +88 -11
  230. package/lib/platform/provider-contract.ts +78 -3
  231. package/lib/platform/provider-validation.ts +85 -3
  232. package/lib/platform/pull-requests.ts +129 -348
  233. package/lib/platform/repository-metadata.ts +453 -0
  234. package/lib/platform/security-alerts.ts +191 -0
  235. package/lib/platform/snapshots.ts +53 -0
  236. package/lib/platform/verification-sync.ts +171 -177
  237. package/lib/process-data/index.ts +7 -0
  238. package/lib/release/workflow.ts +3 -3
  239. package/lib/run/index.ts +5 -0
  240. package/lib/sandbox/commands/control-status.ts +26 -0
  241. package/lib/sandbox/commands/create.ts +53 -12
  242. package/lib/sandbox/commands/ls.ts +7 -0
  243. package/lib/sandbox/commands/rm.ts +3 -996
  244. package/lib/sandbox/commands/show.ts +16 -0
  245. package/lib/sandbox/control/audit.ts +253 -0
  246. package/lib/sandbox/control/client.ts +150 -13
  247. package/lib/sandbox/control/completed-reentry.ts +98 -0
  248. package/lib/sandbox/control/container-identity.ts +27 -43
  249. package/lib/sandbox/control/executor.ts +262 -37
  250. package/lib/sandbox/control/finalization-response.ts +29 -0
  251. package/lib/sandbox/control/identity-sentinel.ts +137 -0
  252. package/lib/sandbox/control/lifecycle.ts +672 -18
  253. package/lib/sandbox/control/native-file-lock.ts +108 -0
  254. package/lib/sandbox/control/protocol.ts +80 -8
  255. package/lib/sandbox/control/server.ts +779 -82
  256. package/lib/sandbox/control/state.ts +84 -3
  257. package/lib/sandbox/control/task-view.ts +240 -0
  258. package/lib/sandbox/control/task-workflow.ts +95 -0
  259. package/lib/sandbox/control/workflow-executor.ts +102 -0
  260. package/lib/sandbox/engines/authority.ts +365 -0
  261. package/lib/sandbox/engines/docker-exact-discovery.ts +132 -0
  262. package/lib/sandbox/index.ts +9 -2
  263. package/lib/sandbox/recovery.ts +49 -6
  264. package/lib/sandbox/removal.ts +2144 -0
  265. package/lib/sandbox/task-cleanup.ts +209 -0
  266. package/lib/sandbox/workspace-view.ts +26 -18
  267. package/lib/sandbox/worktree-safety.ts +4 -1
  268. package/lib/server/index.ts +10 -0
  269. package/lib/task/activity-intent.ts +2 -2
  270. package/lib/task/activity-log.ts +27 -19
  271. package/lib/task/artifact-command.ts +104 -0
  272. package/lib/task/artifact-lifecycle.ts +66 -39
  273. package/lib/task/artifact-name.ts +55 -0
  274. package/lib/task/artifact-operations.ts +580 -0
  275. package/lib/task/artifact-receipts.ts +3 -14
  276. package/lib/task/artifact-repair-intent.ts +152 -0
  277. package/lib/task/artifact-schema.ts +163 -0
  278. package/lib/task/capabilities.ts +82 -22
  279. package/lib/task/codex-orchestration.ts +85 -24
  280. package/lib/task/commit-identity.ts +31 -0
  281. package/lib/task/commit-operation.ts +2 -16
  282. package/lib/task/control-authority.ts +513 -6
  283. package/lib/task/control-recovery.ts +174 -0
  284. package/lib/task/create-service.ts +131 -6
  285. package/lib/task/create.ts +83 -1
  286. package/lib/task/decision-details.ts +3 -71
  287. package/lib/task/events.ts +292 -75
  288. package/lib/task/finalization-state.ts +11 -0
  289. package/lib/task/human-override.ts +3 -8
  290. package/lib/task/implementation-inputs.ts +3 -3
  291. package/lib/task/index.ts +16 -3
  292. package/lib/task/intermediate-cleanup.ts +455 -0
  293. package/lib/task/invalidation.ts +18 -62
  294. package/lib/task/ledger-intents.ts +7 -24
  295. package/lib/task/ledger.ts +1 -3
  296. package/lib/task/lifecycle.ts +17 -1
  297. package/lib/task/local-artifact-finalization.ts +223 -388
  298. package/lib/task/manual-validation-completion.ts +40 -0
  299. package/lib/task/manual-validation-evidence.ts +209 -0
  300. package/lib/task/manual-validation-receipt.ts +152 -0
  301. package/lib/task/manual-validation-shared.ts +50 -0
  302. package/lib/task/manual-validation-transaction.ts +304 -0
  303. package/lib/task/markdown.ts +70 -0
  304. package/lib/task/orchestration.ts +191 -68
  305. package/lib/task/qualification-audit.ts +588 -0
  306. package/lib/task/qualification-confirmation.ts +117 -0
  307. package/lib/task/qualification-intents.ts +150 -0
  308. package/lib/task/review-artifacts.ts +21 -41
  309. package/lib/task/review-command.ts +23 -0
  310. package/lib/task/review-finalization.ts +154 -153
  311. package/lib/task/review-fingerprint.ts +2 -2
  312. package/lib/task/sections.ts +33 -52
  313. package/lib/task/verification-config.ts +12 -0
  314. package/lib/task/verification-engine.ts +165 -370
  315. package/lib/task/verification-types.ts +17 -0
  316. package/lib/task/verification.ts +1 -1
  317. package/lib/task/workflow-command.ts +18 -0
  318. package/lib/task/workflow-warning-intents.ts +0 -13
  319. package/lib/task/workflow-warnings.ts +21 -2
  320. package/lib/update.ts +6 -0
  321. package/package.json +7 -2
  322. package/templates/.agents/hooks/lifecycle-delegation.js +6 -6
  323. package/templates/.agents/rules/README.en.md +2 -0
  324. package/templates/.agents/rules/README.zh-CN.md +2 -0
  325. package/templates/.agents/rules/decision-qualification.en.md +22 -0
  326. package/templates/.agents/rules/decision-qualification.zh-CN.md +22 -0
  327. package/templates/.agents/rules/evidence-reporting.en.md +28 -0
  328. package/templates/.agents/rules/evidence-reporting.zh-CN.md +28 -0
  329. package/templates/.agents/rules/label-milestone-setup.en.md +7 -7
  330. package/templates/.agents/rules/label-milestone-setup.zh-CN.md +7 -7
  331. package/templates/.agents/rules/local-artifact-repair.en.md +5 -1
  332. package/templates/.agents/rules/local-artifact-repair.zh-CN.md +5 -1
  333. package/templates/.agents/rules/security-alerts.en.md +8 -8
  334. package/templates/.agents/rules/security-alerts.zh-CN.md +8 -8
  335. package/templates/.agents/rules/testing-discipline.en.md +2 -0
  336. package/templates/.agents/rules/testing-discipline.zh-CN.md +2 -0
  337. package/templates/.agents/scripts/package.json +3 -0
  338. package/templates/.agents/skills/analyze-task/SKILL.en.md +15 -2
  339. package/templates/.agents/skills/analyze-task/SKILL.zh-CN.md +19 -2
  340. package/templates/.agents/skills/analyze-task/config/verify.en.json +1 -12
  341. package/templates/.agents/skills/analyze-task/config/verify.zh-CN.json +1 -12
  342. package/templates/.agents/skills/close-codescan/SKILL.en.md +2 -2
  343. package/templates/.agents/skills/close-codescan/SKILL.zh-CN.md +2 -2
  344. package/templates/.agents/skills/close-dependabot/SKILL.en.md +2 -2
  345. package/templates/.agents/skills/close-dependabot/SKILL.zh-CN.md +2 -2
  346. package/templates/.agents/skills/code-task/SKILL.en.md +14 -1
  347. package/templates/.agents/skills/code-task/SKILL.zh-CN.md +14 -1
  348. package/templates/.agents/skills/code-task/config/verify.en.json +5 -14
  349. package/templates/.agents/skills/code-task/config/verify.zh-CN.json +5 -14
  350. package/templates/.agents/skills/code-task/reference/code-rules.en.md +5 -4
  351. package/templates/.agents/skills/code-task/reference/code-rules.zh-CN.md +5 -4
  352. package/templates/.agents/skills/code-task/reference/dual-mode.en.md +1 -1
  353. package/templates/.agents/skills/code-task/reference/dual-mode.zh-CN.md +1 -1
  354. package/templates/.agents/skills/code-task/reference/fix-mode.en.md +3 -1
  355. package/templates/.agents/skills/code-task/reference/fix-mode.zh-CN.md +3 -1
  356. package/templates/.agents/skills/code-task/reference/report-template.en.md +42 -15
  357. package/templates/.agents/skills/code-task/reference/report-template.zh-CN.md +39 -12
  358. package/templates/.agents/skills/complete-manual-validation/SKILL.en.md +37 -21
  359. package/templates/.agents/skills/complete-manual-validation/SKILL.zh-CN.md +37 -21
  360. package/templates/.agents/skills/complete-manual-validation/config/verify.en.json +1 -1
  361. package/templates/.agents/skills/complete-manual-validation/config/verify.zh-CN.json +1 -1
  362. package/templates/.agents/skills/complete-manual-validation/reference/report-template.en.md +4 -0
  363. package/templates/.agents/skills/complete-manual-validation/reference/report-template.zh-CN.md +4 -0
  364. package/templates/.agents/skills/complete-manual-validation/reference/summary-update.en.md +16 -7
  365. package/templates/.agents/skills/complete-manual-validation/reference/summary-update.zh-CN.md +16 -7
  366. package/templates/.agents/skills/complete-task/SKILL.en.md +10 -23
  367. package/templates/.agents/skills/complete-task/SKILL.zh-CN.md +10 -23
  368. package/templates/.agents/skills/create-task/SKILL.en.md +8 -0
  369. package/templates/.agents/skills/create-task/SKILL.zh-CN.md +7 -0
  370. package/templates/.agents/skills/import-codescan/SKILL.en.md +1 -1
  371. package/templates/.agents/skills/import-codescan/SKILL.zh-CN.md +1 -1
  372. package/templates/.agents/skills/import-dependabot/SKILL.en.md +1 -1
  373. package/templates/.agents/skills/import-dependabot/SKILL.zh-CN.md +1 -1
  374. package/templates/.agents/skills/init-labels/SKILL.en.md +8 -8
  375. package/templates/.agents/skills/init-labels/SKILL.zh-CN.md +8 -8
  376. package/templates/.agents/skills/init-milestones/SKILL.en.md +9 -11
  377. package/templates/.agents/skills/init-milestones/SKILL.zh-CN.md +9 -11
  378. package/templates/.agents/skills/plan-task/SKILL.en.md +14 -1
  379. package/templates/.agents/skills/plan-task/SKILL.zh-CN.md +16 -1
  380. package/templates/.agents/skills/plan-task/config/verify.en.json +4 -14
  381. package/templates/.agents/skills/plan-task/config/verify.zh-CN.json +4 -14
  382. package/templates/.agents/skills/release/SKILL.en.md +7 -3
  383. package/templates/.agents/skills/release/SKILL.zh-CN.md +7 -3
  384. package/templates/.agents/skills/review-analysis/SKILL.en.md +14 -1
  385. package/templates/.agents/skills/review-analysis/SKILL.zh-CN.md +14 -1
  386. package/templates/.agents/skills/review-analysis/config/verify.en.json +1 -18
  387. package/templates/.agents/skills/review-analysis/config/verify.zh-CN.json +1 -18
  388. package/templates/.agents/skills/review-analysis/reference/report-template.en.md +50 -23
  389. package/templates/.agents/skills/review-analysis/reference/report-template.zh-CN.md +45 -18
  390. package/templates/.agents/skills/review-code/SKILL.en.md +14 -1
  391. package/templates/.agents/skills/review-code/SKILL.zh-CN.md +14 -1
  392. package/templates/.agents/skills/review-code/config/verify.en.json +1 -23
  393. package/templates/.agents/skills/review-code/config/verify.zh-CN.json +1 -23
  394. package/templates/.agents/skills/review-code/reference/report-template.en.md +49 -22
  395. package/templates/.agents/skills/review-code/reference/report-template.zh-CN.md +45 -18
  396. package/templates/.agents/skills/review-plan/SKILL.en.md +14 -1
  397. package/templates/.agents/skills/review-plan/SKILL.zh-CN.md +14 -1
  398. package/templates/.agents/skills/review-plan/config/verify.en.json +1 -18
  399. package/templates/.agents/skills/review-plan/config/verify.zh-CN.json +1 -18
  400. package/templates/.agents/skills/review-plan/reference/report-template.en.md +49 -22
  401. package/templates/.agents/skills/review-plan/reference/report-template.zh-CN.md +45 -18
  402. package/templates/.agents/skills/review-pr/SKILL.en.md +5 -1
  403. package/templates/.agents/skills/review-pr/SKILL.zh-CN.md +5 -1
  404. package/templates/.agents/skills/review-pr/reference/report-template.en.md +4 -3
  405. package/templates/.agents/skills/review-pr/reference/report-template.zh-CN.md +4 -3
  406. package/templates/.agents/skills/run-manual-validation/SKILL.en.md +25 -4
  407. package/templates/.agents/skills/run-manual-validation/SKILL.zh-CN.md +25 -4
  408. package/templates/.agents/skills/run-manual-validation/reference/discovery-and-execution.en.md +4 -1
  409. package/templates/.agents/skills/run-manual-validation/reference/discovery-and-execution.zh-CN.md +4 -1
  410. package/templates/.agents/skills/run-manual-validation/reference/report-template.en.md +5 -1
  411. package/templates/.agents/skills/run-manual-validation/reference/report-template.zh-CN.md +5 -1
  412. package/templates/.agents/skills/run-task/SKILL.en.md +1 -1
  413. package/templates/.agents/skills/run-task/SKILL.zh-CN.md +1 -1
  414. package/templates/.agents/skills/test/SKILL.en.md +29 -7
  415. package/templates/.agents/skills/test/SKILL.zh-CN.md +29 -7
  416. package/templates/.agents/skills/update-agent-infra/scripts/sync-templates.js +14 -0
  417. package/templates/.agents/templates/task.en.md +6 -0
  418. package/templates/.agents/templates/task.zh-CN.md +6 -0
  419. package/templates/.claude/commands/run-manual-validation.en.md +1 -1
  420. package/templates/.claude/commands/run-manual-validation.zh-CN.md +1 -1
  421. package/dist/lib/platform/adapters.js +0 -56
  422. package/lib/platform/adapters.ts +0 -197
  423. package/templates/.agents/scripts/security-alerts.github.sh +0 -151
  424. package/templates/.agents/scripts/security-alerts.sh +0 -31
  425. package/templates/.agents/skills/init-labels/scripts/init-labels.github.sh +0 -146
  426. package/templates/.agents/skills/init-labels/scripts/init-labels.sh +0 -32
  427. package/templates/.agents/skills/init-milestones/scripts/init-milestones.github.sh +0 -294
  428. package/templates/.agents/skills/init-milestones/scripts/init-milestones.sh +0 -6
@@ -2,6 +2,7 @@ import fs from 'node:fs';
2
2
  import path from 'node:path';
3
3
  import { inspectPlatformPullRequestByNumber } from '../platform/pull-requests.js';
4
4
  import { listPrReviews, publishPrReview } from '../platform/pr-review.js';
5
+ import { ensureInternalHandlerRoute, internalHandlerRoute } from './cli-route-inventory.js';
5
6
  const USAGE = `Usage: agent-infra-internal platform-pr-review inspect --pr <token> [--cwd <path>]
6
7
  agent-infra-internal platform-pr-review list --pr <token> [--cwd <path>]
7
8
  agent-infra-internal platform-pr-review publish --pr <token> --scope <taskId|pr{N}> --round <N> --commit <sha> --event <COMMENT|APPROVE|REQUEST_CHANGES> --body-file <path|-> [--dry-run] [--cwd <path>]
@@ -48,12 +49,18 @@ function readBodyFile(value, cwd) {
48
49
  return value === '-' ? fs.readFileSync(0, 'utf8') : fs.readFileSync(path.resolve(cwd, value), 'utf8');
49
50
  }
50
51
  async function platformPrReview(args = []) {
52
+ if (!ensureInternalHandlerRoute('platform-pr-review', args))
53
+ return;
51
54
  if (args[0] === '--help' || args[0] === '-h') {
52
55
  process.stdout.write(USAGE);
53
56
  return;
54
57
  }
55
58
  const operation = args[0];
56
- if (!operation || !['inspect', 'list', 'publish'].includes(operation)) {
59
+ if (!operation || ![
60
+ internalHandlerRoute('platform-pr-review', 'inspect', operation),
61
+ internalHandlerRoute('platform-pr-review', 'list', operation),
62
+ operation === 'publish'
63
+ ].some(Boolean)) {
57
64
  fail('a valid operation is required');
58
65
  return;
59
66
  }
@@ -79,15 +86,16 @@ async function platformPrReview(args = []) {
79
86
  fail(`${operation} requires --pr <token>`);
80
87
  return;
81
88
  }
82
- if (operation === 'inspect') {
89
+ if (internalHandlerRoute('platform-pr-review', 'inspect', operation)) {
83
90
  finish(await inspectPlatformPullRequestByNumber(pr, { cwd }));
84
91
  return;
85
92
  }
86
- if (operation === 'list') {
93
+ if (internalHandlerRoute('platform-pr-review', 'list', operation)) {
87
94
  finish(await listPrReviews(pr, { cwd }));
88
95
  return;
89
96
  }
90
97
  const scope = typeof values.scope === 'string' ? values.scope : '';
98
+ const publishSelector = /^TASK-\d{8}-\d{6}$/u.test(scope) ? 'publish-task' : /^pr\d+$/u.test(scope) ? 'publish-pr' : '';
91
99
  const round = Number(values.round);
92
100
  const commit = typeof values.commit === 'string' ? values.commit : '';
93
101
  const event = values.event;
@@ -95,6 +103,11 @@ async function platformPrReview(args = []) {
95
103
  fail('publish requires --scope <taskId|pr{N}>');
96
104
  return;
97
105
  }
106
+ if (!internalHandlerRoute('platform-pr-review', 'publish-task', publishSelector)
107
+ && !internalHandlerRoute('platform-pr-review', 'publish-pr', publishSelector)) {
108
+ fail('publish scope is not registered');
109
+ return;
110
+ }
98
111
  if (!Number.isInteger(round) || round <= 0) {
99
112
  fail('publish requires a positive --round');
100
113
  return;
@@ -3,6 +3,7 @@ import path from 'node:path';
3
3
  import { normalizeAgentToken, AGENT_USAGE_HINT } from '../agent-clients/tokens.js';
4
4
  import { bindPlatformPullRequest, createPlatformPullRequest, inspectPlatformPullRequest, resolveExternalPullRequest, skipPlatformPullRequestFact, syncPlatformPullRequest, syncPlatformPullRequestInLabels } from '../platform/pull-requests.js';
5
5
  import { reportWrite, summaryContext, syncPullRequestSummary } from '../platform/pr-summary.js';
6
+ import { ensureInternalHandlerRoute, internalHandlerRoute } from './cli-route-inventory.js';
6
7
  const USAGE = `Usage: agent-infra-internal platform-pr inspect <task-ref> [--cwd <path>]
7
8
  agent-infra-internal platform-pr resolve-external <task-ref> --agent <agent> [--pr <token>] [--dry-run] [--cwd <path>]
8
9
  agent-infra-internal platform-pr create <task-ref> --agent <agent> --base <branch> --head <branch> --title-file <path|-> --body-file <path|-> [--draft] [--dry-run] [--cwd <path>]
@@ -12,10 +13,10 @@ const USAGE = `Usage: agent-infra-internal platform-pr inspect <task-ref> [--cwd
12
13
  agent-infra-internal platform-pr sync-in-labels --pr <N> [--dry-run] [--cwd <path>]
13
14
  agent-infra-internal platform-pr summary-context <task-ref> [--cwd <path>]
14
15
  agent-infra-internal platform-pr change-report <task-ref> --agent <agent> --mechanical-file <path> --precheck-file <path> [--dry-run] [--cwd <path>]
15
- agent-infra-internal platform-pr summary-sync <task-ref> --agent <agent> --body-file <path|-> --change-report-file <path> --result <pr_created|pr_reused|no_op> [--strict] [--dry-run] [--cwd <path>]
16
+ agent-infra-internal platform-pr summary-sync <task-ref> --agent <agent> --body-file <path|-> --change-report-file <path> --result <pr_created|pr_reused|no_op> [--manual-phase pending|final ...] [--strict] [--dry-run] [--cwd <path>]
16
17
  `;
17
18
  const BOOLEAN_FLAGS = new Set(['--draft', '--dry-run', '--metadata', '--closing-issue', '--strict']);
18
- const VALUE_FLAGS = new Set(['--cwd', '--agent', '--base', '--head', '--title-file', '--body-file', '--change-report-file', '--mechanical-file', '--precheck-file', '--pr', '--result']);
19
+ const VALUE_FLAGS = new Set(['--cwd', '--agent', '--base', '--head', '--title-file', '--body-file', '--change-report-file', '--mechanical-file', '--precheck-file', '--pr', '--result', '--manual-phase', '--transaction-id', '--receipt-digest', '--pr-head-sha']);
19
20
  function key(flag) {
20
21
  return flag.slice(2).replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());
21
22
  }
@@ -56,16 +57,29 @@ function readFile(value, cwd) {
56
57
  return value === '-' ? fs.readFileSync(0, 'utf8') : fs.readFileSync(path.resolve(cwd, value), 'utf8');
57
58
  }
58
59
  async function platformPr(args = []) {
60
+ if (!ensureInternalHandlerRoute('platform-pr', args))
61
+ return;
59
62
  if (args[0] === '--help' || args[0] === '-h') {
60
63
  process.stdout.write(USAGE);
61
64
  return;
62
65
  }
63
66
  const operation = args[0];
64
- if (!operation || !['inspect', 'resolve-external', 'create', 'bind', 'skip', 'sync', 'sync-in-labels', 'summary-context', 'change-report', 'summary-sync'].includes(operation)) {
67
+ if (!operation || ![
68
+ internalHandlerRoute('platform-pr', 'inspect', operation),
69
+ internalHandlerRoute('platform-pr', 'resolve-external', operation),
70
+ internalHandlerRoute('platform-pr', 'create', operation),
71
+ internalHandlerRoute('platform-pr', 'bind', operation),
72
+ internalHandlerRoute('platform-pr', 'skip', operation),
73
+ internalHandlerRoute('platform-pr', 'sync', operation),
74
+ internalHandlerRoute('platform-pr', 'sync-in-labels', operation),
75
+ internalHandlerRoute('platform-pr', 'summary-context', operation),
76
+ internalHandlerRoute('platform-pr', 'change-report', operation),
77
+ internalHandlerRoute('platform-pr', 'summary-sync', operation)
78
+ ].some(Boolean)) {
65
79
  fail('a valid operation is required');
66
80
  return;
67
81
  }
68
- if (operation === 'sync-in-labels') {
82
+ if (internalHandlerRoute('platform-pr', 'sync-in-labels', operation)) {
69
83
  const parsed = parse(args, 1);
70
84
  if (parsed.error) {
71
85
  fail(parsed.error);
@@ -108,18 +122,18 @@ async function platformPr(args = []) {
108
122
  'sync-in-labels': ['cwd', 'pr', 'dryRun'],
109
123
  'summary-context': ['cwd'],
110
124
  'change-report': ['cwd', 'agent', 'mechanicalFile', 'precheckFile', 'dryRun'],
111
- 'summary-sync': ['cwd', 'agent', 'bodyFile', 'changeReportFile', 'result', 'dryRun', 'strict']
125
+ 'summary-sync': ['cwd', 'agent', 'bodyFile', 'changeReportFile', 'result', 'manualPhase', 'transactionId', 'receiptDigest', 'prHeadSha', 'dryRun', 'strict']
112
126
  };
113
127
  const unexpected = Object.keys(values).find((name) => !allowed[operation].includes(name));
114
128
  if (unexpected) {
115
129
  fail(`${operation} does not accept --${unexpected}`);
116
130
  return;
117
131
  }
118
- if (operation === 'inspect') {
132
+ if (internalHandlerRoute('platform-pr', 'inspect', operation)) {
119
133
  finish(await inspectPlatformPullRequest(taskRef, { cwd }));
120
134
  return;
121
135
  }
122
- if (operation === 'summary-context') {
136
+ if (internalHandlerRoute('platform-pr', 'summary-context', operation)) {
123
137
  finish(await summaryContext(taskRef, { cwd }));
124
138
  return;
125
139
  }
@@ -133,7 +147,7 @@ async function platformPr(args = []) {
133
147
  return;
134
148
  }
135
149
  values.agent = agent;
136
- if (operation === 'change-report') {
150
+ if (internalHandlerRoute('platform-pr', 'change-report', operation)) {
137
151
  if (typeof values.mechanicalFile !== 'string' || typeof values.precheckFile !== 'string') {
138
152
  fail('change-report requires --mechanical-file and --precheck-file');
139
153
  return;
@@ -143,7 +157,7 @@ async function platformPr(args = []) {
143
157
  }));
144
158
  return;
145
159
  }
146
- if (operation === 'skip') {
160
+ if (internalHandlerRoute('platform-pr', 'skip', operation)) {
147
161
  finish(await skipPlatformPullRequestFact(taskRef, { cwd, agent, dryRun: values.dryRun === true }));
148
162
  return;
149
163
  }
@@ -152,7 +166,7 @@ async function platformPr(args = []) {
152
166
  fail('--result must be pr_created, pr_reused, or no_op');
153
167
  return;
154
168
  }
155
- if (operation === 'resolve-external') {
169
+ if (internalHandlerRoute('platform-pr', 'resolve-external', operation)) {
156
170
  const pr = values.pr === undefined ? undefined : values.pr;
157
171
  if (pr !== undefined && (typeof pr !== 'string' || !pr)) {
158
172
  fail('resolve-external requires --pr <token>');
@@ -161,7 +175,7 @@ async function platformPr(args = []) {
161
175
  finish(await resolveExternalPullRequest(taskRef, { cwd, agent: values.agent, pr, dryRun: values.dryRun === true }));
162
176
  return;
163
177
  }
164
- if (operation === 'bind') {
178
+ if (internalHandlerRoute('platform-pr', 'bind', operation)) {
165
179
  const pr = values.pr;
166
180
  if (typeof pr !== 'string' || !pr) {
167
181
  fail('bind requires --pr <token>');
@@ -170,7 +184,7 @@ async function platformPr(args = []) {
170
184
  finish(await bindPlatformPullRequest(taskRef, { cwd, agent: values.agent, pr, dryRun: values.dryRun === true }));
171
185
  return;
172
186
  }
173
- if (operation === 'sync') {
187
+ if (internalHandlerRoute('platform-pr', 'sync', operation)) {
174
188
  if (values.metadata !== true && values.closingIssue !== true) {
175
189
  fail('sync requires --metadata or --closing-issue');
176
190
  return;
@@ -182,7 +196,7 @@ async function platformPr(args = []) {
182
196
  finish(await syncPlatformPullRequest(taskRef, { cwd, agent: values.agent, metadata: values.metadata === true, closingIssue: values.closingIssue === true, primaryResult: primaryResult, dryRun: values.dryRun === true }));
183
197
  return;
184
198
  }
185
- if (operation === 'summary-sync') {
199
+ if (internalHandlerRoute('platform-pr', 'summary-sync', operation)) {
186
200
  if (typeof values.bodyFile !== 'string') {
187
201
  fail('summary-sync requires --body-file');
188
202
  return;
@@ -196,7 +210,21 @@ async function platformPr(args = []) {
196
210
  return;
197
211
  }
198
212
  try {
199
- finish(await syncPullRequestSummary(taskRef, { cwd, agent: values.agent, body: readFile(values.bodyFile, cwd), changeReportFile: values.changeReportFile, primaryResult: primaryResult, dryRun: values.dryRun === true, strict: values.strict === true }));
213
+ const manualPhase = values.manualPhase;
214
+ if (manualPhase !== undefined && manualPhase !== 'pending' && manualPhase !== 'final') {
215
+ fail('--manual-phase must be pending or final');
216
+ return;
217
+ }
218
+ finish(await syncPullRequestSummary(taskRef, {
219
+ cwd, agent: values.agent, body: readFile(values.bodyFile, cwd), changeReportFile: values.changeReportFile,
220
+ primaryResult: primaryResult, dryRun: values.dryRun === true, strict: values.strict === true,
221
+ ...(manualPhase ? { manualValidation: {
222
+ phase: manualPhase,
223
+ ...(typeof values.transactionId === 'string' ? { transactionId: values.transactionId } : {}),
224
+ ...(typeof values.receiptDigest === 'string' ? { receiptDigest: values.receiptDigest } : {}),
225
+ ...(typeof values.prHeadSha === 'string' ? { prHeadSha: values.prHeadSha } : {})
226
+ } } : {})
227
+ }));
200
228
  }
201
229
  catch (error) {
202
230
  fail(`unable to read body file: ${error instanceof Error ? error.message : String(error)}`);
@@ -1,6 +1,7 @@
1
1
  import fs from 'node:fs';
2
2
  import path from 'node:path';
3
3
  import { publishReleaseNotes, releaseNoteContext, stageReleaseNotes } from '../platform/release-notes.js';
4
+ import { ensureInternalHandlerRoute, internalHandlerRoute } from './cli-route-inventory.js';
4
5
  function parseOptions(args, valueFlags, switchFlags = []) {
5
6
  const values = new Map();
6
7
  const switches = new Set();
@@ -29,8 +30,10 @@ function finish(result) {
29
30
  process.exitCode = result.status === 'blocked' ? 2 : result.status === 'failed' ? 1 : 0;
30
31
  }
31
32
  async function platformReleaseNotes(args = []) {
33
+ if (!ensureInternalHandlerRoute('platform-release-notes', args))
34
+ return;
32
35
  const [action, ...rest] = args;
33
- if (action === 'context') {
36
+ if (internalHandlerRoute('platform-release-notes', 'context', action ?? '')) {
34
37
  const parsed = parseOptions(rest, ['--cwd', '--history-limit', '--from-tag', '--to-tag', '--branch']);
35
38
  if (!parsed)
36
39
  return finish(invalidInput('invalid context options'));
@@ -44,7 +47,7 @@ async function platformReleaseNotes(args = []) {
44
47
  }, { cwd }));
45
48
  return;
46
49
  }
47
- if (action === 'stage') {
50
+ if (internalHandlerRoute('platform-release-notes', 'stage', action ?? '')) {
48
51
  const parsed = parseOptions(rest, ['--cwd', '--notes-file']);
49
52
  if (!parsed)
50
53
  return finish(invalidInput('invalid stage options'));
@@ -54,7 +57,7 @@ async function platformReleaseNotes(args = []) {
54
57
  finish(stageReleaseNotes({ notesFile }, { cwd: path.resolve(parsed.values.get('--cwd') || process.cwd()) }));
55
58
  return;
56
59
  }
57
- if (action === 'publish') {
60
+ if (internalHandlerRoute('platform-release-notes', 'publish', action ?? '')) {
58
61
  const parsed = parseOptions(rest, ['--cwd', '--notes-file', '--tag', '--title', '--expected-sha256'], ['--dry-run']);
59
62
  if (!parsed)
60
63
  return finish(invalidInput('invalid publish options'));
@@ -0,0 +1,93 @@
1
+ import path from 'node:path';
2
+ import { dismissSecurityAlert, readCommentFile, readSecurityAlert } from '../platform/security-alerts.js';
3
+ import { ensureInternalHandlerRoute, internalHandlerRoute } from './cli-route-inventory.js';
4
+ const USAGE = `Usage: agent-infra-internal platform-security read --kind <dependabot|code-scanning> --number <number> [--cwd <path>]
5
+ agent-infra-internal platform-security dismiss --kind <dependabot|code-scanning> --number <number> --reason <reason> --comment-file <path> [--cwd <path>]
6
+ `;
7
+ function fail(message) {
8
+ process.stdout.write(`${JSON.stringify({ status: 'failed', changed: false, error: { code: 'SECURITY_INPUT_INVALID', message, retryable: false } })}\n`);
9
+ process.stderr.write(USAGE);
10
+ process.exitCode = 1;
11
+ }
12
+ function finish(result) {
13
+ process.stdout.write(`${JSON.stringify(result)}\n`);
14
+ process.exitCode = result.status === 'blocked' ? 2 : result.status === 'failed' ? 1 : 0;
15
+ }
16
+ function parseOptions(args) {
17
+ const values = new Map();
18
+ const switches = new Set();
19
+ const valueFlags = new Set(['--cwd', '--kind', '--number', '--reason', '--comment-file']);
20
+ for (let index = 0; index < args.length; index += 1) {
21
+ const flag = args[index];
22
+ if (flag === '--help' || flag === '-h')
23
+ return null;
24
+ if (!valueFlags.has(flag) || values.has(flag) || switches.has(flag))
25
+ return null;
26
+ const value = args[++index];
27
+ if (!value || value.startsWith('--'))
28
+ return null;
29
+ values.set(flag, value);
30
+ }
31
+ return { values, switches };
32
+ }
33
+ function required(values, flag) {
34
+ const value = values.get(flag);
35
+ return value && !value.startsWith('--') ? value : null;
36
+ }
37
+ async function platformSecurity(args = []) {
38
+ if (!ensureInternalHandlerRoute('platform-security', args))
39
+ return;
40
+ if (args[0] === '--help' || args[0] === '-h') {
41
+ process.stdout.write(USAGE);
42
+ return;
43
+ }
44
+ const action = args[0];
45
+ if (!internalHandlerRoute('platform-security', 'read', action ?? '')
46
+ && !internalHandlerRoute('platform-security', 'dismiss', action ?? '')) {
47
+ fail('a valid operation is required');
48
+ return;
49
+ }
50
+ if (action !== 'read' && action !== 'dismiss') {
51
+ fail('a valid operation is required');
52
+ return;
53
+ }
54
+ const parsed = parseOptions(args.slice(1));
55
+ if (!parsed) {
56
+ fail('invalid security alert options');
57
+ return;
58
+ }
59
+ const kind = required(parsed.values, '--kind');
60
+ const numberRaw = required(parsed.values, '--number');
61
+ const cwd = path.resolve(required(parsed.values, '--cwd') || process.cwd());
62
+ if (!kind || !numberRaw) {
63
+ fail(`${action} requires --kind and --number`);
64
+ return;
65
+ }
66
+ const number = Number(numberRaw);
67
+ if (!Number.isSafeInteger(number) || number <= 0) {
68
+ fail('--number must be a positive integer');
69
+ return;
70
+ }
71
+ if (action === 'read') {
72
+ if ([...parsed.values.keys()].some((flag) => !['--kind', '--number', '--cwd'].includes(flag))) {
73
+ fail('read does not accept dismissal options');
74
+ return;
75
+ }
76
+ finish(await readSecurityAlert({ kind: kind, number }, { cwd }));
77
+ return;
78
+ }
79
+ const reason = required(parsed.values, '--reason');
80
+ const commentFile = required(parsed.values, '--comment-file');
81
+ if (!reason || !commentFile) {
82
+ fail('dismiss requires --reason and --comment-file');
83
+ return;
84
+ }
85
+ const comment = readCommentFile(commentFile, cwd);
86
+ if (!comment.ok) {
87
+ finish({ status: 'failed', changed: false, error: comment.error });
88
+ return;
89
+ }
90
+ finish(await dismissSecurityAlert({ kind: kind, number, reason, comment: comment.value }, { cwd }));
91
+ }
92
+ export { platformSecurity };
93
+ //# sourceMappingURL=platform-security.js.map
@@ -3,6 +3,7 @@ import path from 'node:path';
3
3
  import { collectHostCandidates, decide, deriveTaskIssueMatches, extractClosingIssueNumbers, resolveHostFromCandidates } from '../pr-review/evidence-grading.js';
4
4
  import { inspectPlatformPullRequestByNumber } from '../platform/pull-requests.js';
5
5
  import { verifyInProcess } from '../task/verification-engine.js';
6
+ import { ensureInternalHandlerRoute, internalHandlerRoute } from './cli-route-inventory.js';
6
7
  const USAGE = `Usage: agent-infra-internal pr-review-grade decide --input-file <path|-> [--cwd <path>]
7
8
  agent-infra-internal pr-review-grade resolve-host --pr <token> [--cwd <path>]
8
9
  agent-infra-internal pr-review-grade verify-artifact --artifact-file <path> [--cwd <path>]
@@ -39,12 +40,18 @@ function readInput(value, cwd) {
39
40
  return value === '-' ? fs.readFileSync(0, 'utf8') : fs.readFileSync(path.resolve(cwd, value), 'utf8');
40
41
  }
41
42
  async function prReviewGrade(args = []) {
43
+ if (!ensureInternalHandlerRoute('pr-review-grade', args))
44
+ return;
42
45
  if (args[0] === '--help' || args[0] === '-h') {
43
46
  process.stdout.write(USAGE);
44
47
  return;
45
48
  }
46
49
  const operation = args[0];
47
- if (!operation || !['decide', 'resolve-host', 'verify-artifact'].includes(operation)) {
50
+ if (!operation || ![
51
+ internalHandlerRoute('pr-review-grade', 'decide', operation),
52
+ internalHandlerRoute('pr-review-grade', 'resolve-host', operation),
53
+ internalHandlerRoute('pr-review-grade', 'verify-artifact', operation)
54
+ ].some(Boolean)) {
48
55
  fail('a valid operation is required');
49
56
  return;
50
57
  }
@@ -65,7 +72,7 @@ async function prReviewGrade(args = []) {
65
72
  fail(`${operation} does not accept '--${unexpected}'`);
66
73
  return;
67
74
  }
68
- if (operation === 'decide') {
75
+ if (internalHandlerRoute('pr-review-grade', 'decide', operation)) {
69
76
  if (typeof values.inputFile !== 'string') {
70
77
  fail('decide requires --input-file');
71
78
  return;
@@ -88,7 +95,7 @@ async function prReviewGrade(args = []) {
88
95
  }
89
96
  return;
90
97
  }
91
- if (operation === 'resolve-host') {
98
+ if (internalHandlerRoute('pr-review-grade', 'resolve-host', operation)) {
92
99
  const pr = typeof values.pr === 'string' ? values.pr : '';
93
100
  if (!pr) {
94
101
  fail('resolve-host requires --pr <token>');
@@ -115,6 +122,10 @@ async function prReviewGrade(args = []) {
115
122
  });
116
123
  return;
117
124
  }
125
+ if (!internalHandlerRoute('pr-review-grade', 'verify-artifact', operation)) {
126
+ fail('operation is not registered');
127
+ return;
128
+ }
118
129
  if (typeof values.artifactFile !== 'string') {
119
130
  fail('verify-artifact requires --artifact-file');
120
131
  return;