@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
@@ -1,110 +1,110 @@
1
1
  {
2
- "platform": {
3
- "type": "github"
2
+ "platform": {
3
+ "type": "github"
4
+ },
5
+ "agentClients": [
6
+ {
7
+ "id": "claude-code",
8
+ "enabled": true,
9
+ "installInSandbox": true
4
10
  },
5
- "agentClients": [
6
- {
7
- "id": "claude-code",
8
- "enabled": true,
9
- "installInSandbox": true
10
- },
11
- {
12
- "id": "codex",
13
- "enabled": true,
14
- "installInSandbox": true
15
- },
16
- {
17
- "id": "antigravity-cli",
18
- "enabled": true,
19
- "installInSandbox": true
20
- },
21
- {
22
- "id": "opencode",
23
- "enabled": true,
24
- "installInSandbox": true
25
- },
26
- {
27
- "id": "traecli",
28
- "enabled": true,
29
- "installInSandbox": true
30
- }
31
- ],
32
- "sandbox": {
33
- "engine": null,
34
- "runtimes": [
35
- "node22"
36
- ],
37
- "tools": [
38
- "agent-infra"
39
- ],
40
- "refreshIntervalDays": 7,
41
- "dockerfile": null,
42
- "vm": {
43
- "cpu": null,
44
- "memory": null,
45
- "disk": null
46
- }
47
- },
48
- "task": {
49
- "shortIdLength": 2
11
+ {
12
+ "id": "codex",
13
+ "enabled": true,
14
+ "installInSandbox": true
50
15
  },
51
- "delivery": {
52
- "remote": "origin",
53
- "baseRef": "main"
16
+ {
17
+ "id": "antigravity-cli",
18
+ "enabled": true,
19
+ "installInSandbox": true
54
20
  },
55
- "labels": {
56
- "in": {}
21
+ {
22
+ "id": "opencode",
23
+ "enabled": true,
24
+ "installInSandbox": true
57
25
  },
58
- "files": {
59
- "managed": [
60
- ".agents/QUICKSTART.md",
61
- ".agents/README.md",
62
- ".agents/hooks/",
63
- ".agents/rules/",
64
- ".agents/scripts/",
65
- ".agents/skills/",
66
- ".agents/templates/",
67
- ".agents/workflows/",
68
- ".git-hooks/check-large-files.cjs",
69
- ".git-hooks/check-version-format.sh",
70
- ".github/scripts/",
71
- ".github/workflows/metadata-sync.yml",
72
- ".github/workflows/pr-label.yml",
73
- ".github/workflows/status-label.yml"
74
- ],
75
- "guardedManaged": [
76
- ".github/workflows/metadata-sync.yml",
77
- ".github/workflows/pr-label.yml",
78
- ".github/workflows/status-label.yml"
79
- ],
80
- "merged": [
81
- "**/post-release.*",
82
- "**/release.*",
83
- "**/test-integration.*",
84
- "**/test.*",
85
- "**/upgrade-dependency.*",
86
- ".agents/rules/testing-discipline.*",
87
- ".agents/skills/post-release/SKILL.*",
88
- ".agents/skills/release/SKILL.*",
89
- ".agents/skills/test-integration/SKILL.*",
90
- ".agents/skills/test/SKILL.*",
91
- ".agents/skills/upgrade-dependency/SKILL.*",
92
- ".git-hooks/pre-commit",
93
- ".gitignore"
94
- ],
95
- "ejected": [],
96
- "retiredManaged": [
97
- {
98
- "path": ".trae/skills/",
99
- "templateHashes": []
100
- },
101
- {
102
- "path": ".agents/workspace/README.md",
103
- "templateHashes": [
104
- "sha256:967b27ca4008154c5abf99a1df728242f80ed3ace9bd98eb2828bc1c76af826c",
105
- "sha256:15aa21942cf2a1396d27834f1d3d723b61a46f8d14600b706f39f3bebc21aea3"
106
- ]
107
- }
108
- ]
26
+ {
27
+ "id": "traecli",
28
+ "enabled": true,
29
+ "installInSandbox": true
30
+ }
31
+ ],
32
+ "sandbox": {
33
+ "engine": null,
34
+ "runtimes": [
35
+ "node22"
36
+ ],
37
+ "tools": [
38
+ "agent-infra"
39
+ ],
40
+ "refreshIntervalDays": 7,
41
+ "dockerfile": null,
42
+ "vm": {
43
+ "cpu": null,
44
+ "memory": null,
45
+ "disk": null
109
46
  }
47
+ },
48
+ "task": {
49
+ "shortIdLength": 2
50
+ },
51
+ "delivery": {
52
+ "remote": "origin",
53
+ "baseRef": "main"
54
+ },
55
+ "labels": {
56
+ "in": {}
57
+ },
58
+ "files": {
59
+ "managed": [
60
+ ".agents/QUICKSTART.md",
61
+ ".agents/README.md",
62
+ ".agents/hooks/",
63
+ ".agents/rules/",
64
+ ".agents/scripts/",
65
+ ".agents/skills/",
66
+ ".agents/templates/",
67
+ ".agents/workflows/",
68
+ ".git-hooks/check-large-files.cjs",
69
+ ".git-hooks/check-version-format.sh",
70
+ ".github/scripts/",
71
+ ".github/workflows/metadata-sync.yml",
72
+ ".github/workflows/pr-label.yml",
73
+ ".github/workflows/status-label.yml"
74
+ ],
75
+ "guardedManaged": [
76
+ ".github/workflows/metadata-sync.yml",
77
+ ".github/workflows/pr-label.yml",
78
+ ".github/workflows/status-label.yml"
79
+ ],
80
+ "merged": [
81
+ "**/post-release.*",
82
+ "**/release.*",
83
+ "**/test-integration.*",
84
+ "**/test.*",
85
+ "**/upgrade-dependency.*",
86
+ ".agents/rules/testing-discipline.*",
87
+ ".agents/skills/post-release/SKILL.*",
88
+ ".agents/skills/release/SKILL.*",
89
+ ".agents/skills/test-integration/SKILL.*",
90
+ ".agents/skills/test/SKILL.*",
91
+ ".agents/skills/upgrade-dependency/SKILL.*",
92
+ ".git-hooks/pre-commit",
93
+ ".gitignore"
94
+ ],
95
+ "ejected": [],
96
+ "retiredManaged": [
97
+ {
98
+ "path": ".trae/skills/",
99
+ "templateHashes": []
100
+ },
101
+ {
102
+ "path": ".agents/workspace/README.md",
103
+ "templateHashes": [
104
+ "sha256:967b27ca4008154c5abf99a1df728242f80ed3ace9bd98eb2828bc1c76af826c",
105
+ "sha256:15aa21942cf2a1396d27834f1d3d723b61a46f8d14600b706f39f3bebc21aea3"
106
+ ]
107
+ }
108
+ ]
109
+ }
110
110
  }
@@ -0,0 +1,37 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { randomUUID } from 'node:crypto';
4
+ export function fsyncDirectory(directory) {
5
+ const descriptor = fs.openSync(directory, 'r');
6
+ try {
7
+ fs.fsyncSync(descriptor);
8
+ }
9
+ finally {
10
+ fs.closeSync(descriptor);
11
+ }
12
+ }
13
+ /** The caller owns directory validation and the meaning of an existing target. */
14
+ export function writeDurableFile(target, content, options) {
15
+ const directory = path.dirname(target);
16
+ const temporary = path.join(directory, `.${path.basename(target)}.${process.pid}.${randomUUID()}.tmp`);
17
+ try {
18
+ const descriptor = fs.openSync(temporary, 'wx', options.mode);
19
+ try {
20
+ fs.writeFileSync(descriptor, content, { encoding: 'utf8' });
21
+ fs.fchmodSync(descriptor, options.mode);
22
+ fs.fsyncSync(descriptor);
23
+ }
24
+ finally {
25
+ fs.closeSync(descriptor);
26
+ }
27
+ if (options.replace)
28
+ fs.renameSync(temporary, target);
29
+ else
30
+ fs.linkSync(temporary, target);
31
+ fsyncDirectory(directory);
32
+ }
33
+ finally {
34
+ fs.rmSync(temporary, { force: true });
35
+ }
36
+ }
37
+ //# sourceMappingURL=durable-write.js.map
@@ -0,0 +1,111 @@
1
+ import { createRequire } from 'node:module';
2
+ import fs from 'node:fs';
3
+ const require = createRequire(import.meta.url);
4
+ export const NATIVE_LOCK_PRIMITIVE = process.platform === 'win32' ? 'LockFileEx'
5
+ : process.platform === 'linux' ? 'F_OFD_SETLK' : 'flock';
6
+ function loadNative() {
7
+ try {
8
+ return require('fs-native-extensions');
9
+ }
10
+ catch (error) {
11
+ throw new Error(`FILE_LOCK_UNSUPPORTED: native lock module is unavailable for Node ${process.version} (${process.platform}-${process.arch}). `
12
+ + 'Verify that fs-native-extensions includes a prebuilt binary for this platform and reinstall @fitlab-ai/agent-infra. '
13
+ + `Cause: ${error instanceof Error ? error.message : String(error)}`);
14
+ }
15
+ }
16
+ export function probeNativeLockCapability() {
17
+ try {
18
+ loadNative();
19
+ return {
20
+ supported: true,
21
+ primitive: NATIVE_LOCK_PRIMITIVE
22
+ };
23
+ }
24
+ catch (error) {
25
+ return {
26
+ supported: false,
27
+ primitive: 'unavailable',
28
+ reason: error instanceof Error ? error.message : String(error)
29
+ };
30
+ }
31
+ }
32
+ /** Hold a stable lock file; callers own its namespace and must never unlink it. */
33
+ export function acquireFileLock(filePath) {
34
+ const native = loadNative();
35
+ if (fs.existsSync(filePath)) {
36
+ const existing = fs.lstatSync(filePath);
37
+ if (existing.isSymbolicLink() || !existing.isFile()) {
38
+ throw new Error('FILE_LOCK_UNSUPPORTED: lock object is not a regular file');
39
+ }
40
+ if (process.platform !== 'win32' && typeof process.getuid === 'function'
41
+ && existing.uid !== process.getuid()) {
42
+ throw new Error('FILE_LOCK_UNSUPPORTED: lock object owner mismatch');
43
+ }
44
+ }
45
+ let fd;
46
+ try {
47
+ const noFollow = process.platform !== 'win32' && typeof fs.constants.O_NOFOLLOW === 'number'
48
+ ? fs.constants.O_NOFOLLOW : 0;
49
+ fd = fs.openSync(filePath, fs.constants.O_CREAT | fs.constants.O_RDWR | noFollow, 0o600);
50
+ const opened = fs.fstatSync(fd);
51
+ if (!opened.isFile())
52
+ throw new Error('lock object must be a regular file');
53
+ if (process.platform !== 'win32') {
54
+ if (typeof process.getuid === 'function' && opened.uid !== process.getuid()) {
55
+ throw new Error('lock object owner mismatch');
56
+ }
57
+ fs.fchmodSync(fd, 0o600);
58
+ }
59
+ if (!native.tryLock(fd)) {
60
+ fs.closeSync(fd);
61
+ fd = undefined;
62
+ }
63
+ else {
64
+ const current = fs.lstatSync(filePath);
65
+ if (!current.isFile() || current.dev !== opened.dev || current.ino !== opened.ino) {
66
+ throw new Error('lock object changed during acquisition');
67
+ }
68
+ }
69
+ }
70
+ catch (error) {
71
+ try {
72
+ if (fd !== undefined)
73
+ fs.closeSync(fd);
74
+ }
75
+ catch {
76
+ // Preserve the lock acquisition error.
77
+ }
78
+ throw new Error(`FILE_LOCK_UNSUPPORTED: ${error instanceof Error ? error.message : String(error)}`);
79
+ }
80
+ if (fd === undefined)
81
+ throw new Error('FILE_LOCK_BUSY');
82
+ let released = false;
83
+ return {
84
+ release() {
85
+ if (released)
86
+ return;
87
+ released = true;
88
+ let failure = null;
89
+ try {
90
+ if (fd === undefined)
91
+ throw new Error('descriptor is missing');
92
+ native.unlock(fd);
93
+ }
94
+ catch (error) {
95
+ failure = error;
96
+ }
97
+ finally {
98
+ try {
99
+ if (fd !== undefined)
100
+ fs.closeSync(fd);
101
+ }
102
+ catch (error) {
103
+ failure ??= error;
104
+ }
105
+ }
106
+ if (failure)
107
+ throw new Error(`FILE_LOCK_RELEASE_FAILED: ${failure instanceof Error ? failure.message : String(failure)}`);
108
+ }
109
+ };
110
+ }
111
+ //# sourceMappingURL=file-lock.js.map
@@ -0,0 +1,19 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ export const HOST_CONTROL_AUDIT_FILE = 'audit.ndjson';
4
+ export function hostControlAuditPath(endpoint) {
5
+ return path.join(path.dirname(endpoint), HOST_CONTROL_AUDIT_FILE);
6
+ }
7
+ export function appendHostControlAudit(endpoint, entry, at = Date.now()) {
8
+ const filePath = hostControlAuditPath(endpoint);
9
+ const descriptor = fs.openSync(filePath, 'a', 0o600);
10
+ try {
11
+ fs.fchmodSync(descriptor, 0o600);
12
+ fs.writeFileSync(descriptor, `${JSON.stringify({ version: 1, at, ...entry })}\n`, 'utf8');
13
+ fs.fsyncSync(descriptor);
14
+ }
15
+ finally {
16
+ fs.closeSync(descriptor);
17
+ }
18
+ }
19
+ //# sourceMappingURL=audit.js.map
@@ -0,0 +1,142 @@
1
+ import net from 'node:net';
2
+ import { randomUUID } from 'node:crypto';
3
+ import { inspectHostControlEndpoint, resolveHostControlEndpoint } from './path.js';
4
+ export const HOST_CONTROL_MAX_REQUEST_BYTES = 64 * 1024;
5
+ export const HOST_CONTROL_COMMANDS = Object.freeze([
6
+ 'task-lifecycle', 'task-orchestration', 'task-finalization',
7
+ 'task-artifact', 'task-review', 'task-event', 'task-ledger',
8
+ 'task-invalidation', 'task-warning'
9
+ ]);
10
+ export const HOST_CONTROL_TEST_ENVIRONMENT_KEYS = Object.freeze([
11
+ 'TZ', 'AGENT_INFRA_GH_BIN', 'AGENT_INFRA_GH_ARGS_JSON', 'GH_FAKE_PR_PATH', 'GH_FAKE_ARGS_PATH'
12
+ ]);
13
+ export class HostControlClientError extends Error {
14
+ code;
15
+ retryable;
16
+ changed;
17
+ constructor(code, message, retryable = false, submitted = false) {
18
+ super(`${code}: ${message}`);
19
+ this.name = 'HostControlClientError';
20
+ this.code = code;
21
+ this.retryable = retryable && !submitted;
22
+ this.changed = submitted ? null : false;
23
+ }
24
+ }
25
+ function reject(message) {
26
+ throw new HostControlClientError('HOST_CONTROL_REQUEST_INVALID', message);
27
+ }
28
+ export function validateHostControlRequest(value) {
29
+ if (!value || typeof value !== 'object' || Array.isArray(value))
30
+ reject('request must be an object');
31
+ const request = value;
32
+ if (Object.keys(request).sort().join(',') !== 'generation,id,operation,payload,scope,taskId,version'
33
+ || request.version !== 1 || typeof request.id !== 'string' || !/^[a-f0-9-]{16,64}$/u.test(request.id)
34
+ || (request.taskId !== null && (typeof request.taskId !== 'string' || !/^TASK-\d{8}-\d{6}$/u.test(request.taskId)))
35
+ || (request.generation !== null && (typeof request.generation !== 'string' || !request.generation))
36
+ || request.scope !== 'host-command' || !HOST_CONTROL_COMMANDS.includes(request.operation))
37
+ reject('request schema is invalid');
38
+ const payload = request.payload;
39
+ if (!payload || typeof payload !== 'object' || Array.isArray(payload)
40
+ || !['args,environment,workingDirectory', 'args,workingDirectory'].includes(Object.keys(payload).sort().join(','))
41
+ || !Array.isArray(payload.args) || payload.args.length > 128
42
+ || !payload.args.every((arg) => typeof arg === 'string' && !/[\r\n]/u.test(arg))
43
+ || typeof payload.workingDirectory !== 'string' || !payload.workingDirectory.startsWith('/'))
44
+ reject('host-command payload is invalid');
45
+ if (payload.environment !== undefined) {
46
+ if (!payload.environment || typeof payload.environment !== 'object' || Array.isArray(payload.environment))
47
+ reject('host-command environment is invalid');
48
+ for (const [key, value] of Object.entries(payload.environment)) {
49
+ if (!HOST_CONTROL_TEST_ENVIRONMENT_KEYS.includes(key)
50
+ || typeof value !== 'string' || /[\r\n]/u.test(value))
51
+ reject('host-command environment is invalid');
52
+ }
53
+ }
54
+ return request;
55
+ }
56
+ export function hostControlRequestForCommand(command, args, workingDirectory, environment = {}) {
57
+ if (!HOST_CONTROL_COMMANDS.includes(command))
58
+ reject('host-command is unsupported');
59
+ const taskArg = args[0];
60
+ const taskId = taskArg && /^TASK-\d{8}-\d{6}$/u.test(taskArg) ? taskArg : null;
61
+ return validateHostControlRequest({
62
+ version: 1,
63
+ id: randomUUID(),
64
+ taskId,
65
+ generation: null,
66
+ operation: command,
67
+ scope: 'host-command',
68
+ payload: {
69
+ workingDirectory,
70
+ args: [...args],
71
+ ...(Object.keys(environment).length > 0 ? { environment } : {})
72
+ }
73
+ });
74
+ }
75
+ function parseResponse(value, id) {
76
+ if (!value || typeof value !== 'object' || Array.isArray(value))
77
+ throw new HostControlClientError('HOST_CONTROL_RESPONSE_INVALID', 'response must be an object');
78
+ const response = value;
79
+ if (Object.keys(response).sort().join(',') !== 'error,exitCode,id,status,stderr,stdout,version'
80
+ || response.version !== 1 || response.id !== id
81
+ || !['completed', 'rejected', 'unknown'].includes(response.status)
82
+ || !Number.isSafeInteger(response.exitCode)
83
+ || typeof response.stdout !== 'string' || typeof response.stderr !== 'string'
84
+ || (response.error !== null && (!response.error || typeof response.error !== 'object'))) {
85
+ throw new HostControlClientError('HOST_CONTROL_RESPONSE_INVALID', 'response schema is invalid');
86
+ }
87
+ return response;
88
+ }
89
+ export async function requestHostControl(params) {
90
+ const request = validateHostControlRequest(params.request);
91
+ const endpoint = params.endpoint ?? resolveHostControlEndpoint();
92
+ const inspection = inspectHostControlEndpoint(endpoint, { uid: process.getuid?.() });
93
+ if (!inspection.ok)
94
+ throw new HostControlClientError(inspection.code ?? 'HOST_CONTROL_UNAVAILABLE', 'fixed host-control endpoint is unavailable', true);
95
+ const encoded = `${JSON.stringify(request)}\n`;
96
+ if (Buffer.byteLength(encoded, 'utf8') > HOST_CONTROL_MAX_REQUEST_BYTES)
97
+ throw new HostControlClientError('HOST_CONTROL_REQUEST_TOO_LARGE', 'request exceeds the control limit');
98
+ const timeoutMs = params.timeoutMs ?? 30_000;
99
+ return await new Promise((resolve, rejectPromise) => {
100
+ const socket = net.createConnection(endpoint);
101
+ let output = '';
102
+ let settled = false;
103
+ let submitted = false;
104
+ const failure = (code, message, retryable = false) => new HostControlClientError(code, message, retryable, submitted);
105
+ const finish = (error, response) => {
106
+ if (settled)
107
+ return;
108
+ settled = true;
109
+ clearTimeout(timer);
110
+ socket.destroy();
111
+ if (error)
112
+ rejectPromise(error);
113
+ else
114
+ resolve(response);
115
+ };
116
+ const timer = setTimeout(() => finish(failure('HOST_CONTROL_TIMEOUT', 'host-control did not respond; inspect task state before retrying', true)), timeoutMs);
117
+ socket.setEncoding('utf8');
118
+ socket.on('connect', () => { submitted = true; socket.end(encoded); });
119
+ socket.on('data', (chunk) => {
120
+ output += chunk;
121
+ if (Buffer.byteLength(output, 'utf8') > HOST_CONTROL_MAX_REQUEST_BYTES) {
122
+ finish(failure('HOST_CONTROL_RESPONSE_TOO_LARGE', 'host-control response exceeds the control limit'));
123
+ return;
124
+ }
125
+ const newline = output.indexOf('\n');
126
+ if (newline < 0)
127
+ return;
128
+ try {
129
+ finish(undefined, parseResponse(JSON.parse(output.slice(0, newline)), request.id));
130
+ }
131
+ catch (error) {
132
+ finish(failure('HOST_CONTROL_RESPONSE_INVALID', String(error)));
133
+ }
134
+ });
135
+ socket.on('error', (error) => finish(failure('HOST_CONTROL_UNAVAILABLE', error.message, true)));
136
+ socket.on('close', () => {
137
+ if (!settled)
138
+ finish(failure('HOST_CONTROL_RESPONSE_INVALID', 'host-control closed without a response'));
139
+ });
140
+ });
141
+ }
142
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1,49 @@
1
+ import { spawn } from 'node:child_process';
2
+ import fs from 'node:fs';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { readHostControlWorkerToken, resolveHostControlEndpoint } from './path.js';
5
+ export async function dispatchHostControlCommand(request) {
6
+ const { payload } = request;
7
+ const compiledEntry = fileURLToPath(new URL('../../bin/internal-cli.js', import.meta.url));
8
+ const sourceEntry = fileURLToPath(new URL('../../bin/internal-cli.ts', import.meta.url));
9
+ const entry = fs.existsSync(compiledEntry) ? compiledEntry : sourceEntry;
10
+ const payloadEnvironment = payload.environment ?? {};
11
+ const env = { ...process.env, ...payloadEnvironment };
12
+ for (const key of Object.keys(env)) {
13
+ if (key.startsWith('AGENT_INFRA_CONTROL_')
14
+ || key === 'AGENT_INFRA_TASK_ID'
15
+ || key === 'AGENT_INFRA_RUNTIME_DIR'
16
+ || key === 'AGENT_INFRA_EXECUTOR_MANIFEST'
17
+ || key === 'AGENT_INFRA_HOST_CONTROL_SOCKET') {
18
+ delete env[key];
19
+ }
20
+ }
21
+ delete env.NODE_OPTIONS;
22
+ delete env.NODE_PATH;
23
+ delete env.AGENT_INFRA_HOST_CONTROL_WORKER;
24
+ delete env.AGENT_INFRA_HOST_CONTROL_WORKER_TOKEN;
25
+ env.AGENT_INFRA_HOST_CONTROL_WORKER = '1';
26
+ env.AGENT_INFRA_HOST_CONTROL_WORKER_TOKEN = readHostControlWorkerToken(process.env.AGENT_INFRA_TEST_HOST_CONTROL_ENDPOINT ?? resolveHostControlEndpoint());
27
+ return await new Promise((resolve, reject) => {
28
+ const runtimeArgs = entry.endsWith('.ts') ? ['--experimental-strip-types', '--no-warnings', entry] : [entry];
29
+ const child = spawn(process.execPath, [...runtimeArgs, request.operation, ...payload.args], {
30
+ cwd: payload.workingDirectory,
31
+ env,
32
+ stdio: ['ignore', 'pipe', 'pipe']
33
+ });
34
+ let stdout = '';
35
+ let stderr = '';
36
+ child.stdout.setEncoding('utf8');
37
+ child.stderr.setEncoding('utf8');
38
+ child.stdout.on('data', (chunk) => { stdout += chunk; });
39
+ child.stderr.on('data', (chunk) => { stderr += chunk; });
40
+ child.once('error', reject);
41
+ child.once('close', (code, signal) => {
42
+ if (signal)
43
+ reject(new Error(`HOST_CONTROL_WORKER_TERMINATED: ${signal}`));
44
+ else
45
+ resolve({ stdout, stderr, exitCode: code ?? 1 });
46
+ });
47
+ });
48
+ }
49
+ //# sourceMappingURL=command.js.map