@fitlab-ai/agent-infra 0.9.13 → 0.9.14

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 (280) hide show
  1. package/bin/cli.ts +26 -9
  2. package/dist/bin/cli.js +173 -157
  3. package/dist/bin/internal-cli.js +42 -21
  4. package/dist/lib/agent-client.js +5 -0
  5. package/dist/lib/internal/agent-client.js +5 -2
  6. package/dist/lib/internal/cli-route-inventory.js +152 -0
  7. package/dist/lib/internal/codex-lifecycle.js +9 -6
  8. package/dist/lib/internal/codex-sandbox-controller.js +8 -2
  9. package/dist/lib/internal/git-workflow.js +10 -6
  10. package/dist/lib/internal/platform-checks.js +16 -4
  11. package/dist/lib/internal/platform-comment.js +16 -4
  12. package/dist/lib/internal/platform-context.js +4 -1
  13. package/dist/lib/internal/platform-issue.js +12 -4
  14. package/dist/lib/internal/platform-metadata.js +88 -0
  15. package/dist/lib/internal/platform-pr-review.js +16 -3
  16. package/dist/lib/internal/platform-pr.js +24 -10
  17. package/dist/lib/internal/platform-release-notes.js +6 -3
  18. package/dist/lib/internal/platform-security.js +93 -0
  19. package/dist/lib/internal/pr-review-grade.js +14 -3
  20. package/dist/lib/internal/release-workflow.js +19 -5
  21. package/dist/lib/internal/sandbox-control.js +22 -5
  22. package/dist/lib/internal/task-activity.js +13 -4
  23. package/dist/lib/internal/task-artifact.js +186 -27
  24. package/dist/lib/internal/task-context.js +4 -1
  25. package/dist/lib/internal/task-create.js +48 -15
  26. package/dist/lib/internal/task-delivery.js +4 -1
  27. package/dist/lib/internal/task-event.js +4 -1
  28. package/dist/lib/internal/task-finalization.js +4 -1
  29. package/dist/lib/internal/task-invalidation.js +4 -1
  30. package/dist/lib/internal/task-ledger.js +12 -1
  31. package/dist/lib/internal/task-lifecycle.js +4 -1
  32. package/dist/lib/internal/task-operation-registry.js +421 -0
  33. package/dist/lib/internal/task-orchestration.js +12 -0
  34. package/dist/lib/internal/task-override.js +10 -3
  35. package/dist/lib/internal/task-qualification.js +90 -0
  36. package/dist/lib/internal/task-review.js +4 -1
  37. package/dist/lib/internal/task-short-id.js +11 -1
  38. package/dist/lib/internal/task-snapshot.js +4 -1
  39. package/dist/lib/internal/task-validate.js +7 -2
  40. package/dist/lib/internal/task-verify.js +5 -1
  41. package/dist/lib/internal/task-warning.js +8 -1
  42. package/dist/lib/platform/comment-safety.js +226 -0
  43. package/dist/lib/platform/github-provider.js +233 -6
  44. package/dist/lib/platform/issue-comments.js +146 -34
  45. package/dist/lib/platform/pr-change-report.js +6 -12
  46. package/dist/lib/platform/pr-summary.js +28 -7
  47. package/dist/lib/platform/provider-contract.d.ts +67 -1
  48. package/dist/lib/platform/provider-contract.js +6 -2
  49. package/dist/lib/platform/provider-validation.js +76 -3
  50. package/dist/lib/platform/pull-requests.js +115 -170
  51. package/dist/lib/platform/repository-metadata.js +377 -0
  52. package/dist/lib/platform/security-alerts.js +155 -0
  53. package/dist/lib/platform/verification-sync.js +33 -26
  54. package/dist/lib/process-data/index.js +7 -0
  55. package/dist/lib/run/index.js +5 -0
  56. package/dist/lib/sandbox/commands/control-status.js +22 -0
  57. package/dist/lib/sandbox/commands/create.js +32 -6
  58. package/dist/lib/sandbox/commands/ls.js +5 -0
  59. package/dist/lib/sandbox/commands/rm.js +827 -120
  60. package/dist/lib/sandbox/commands/show.js +16 -0
  61. package/dist/lib/sandbox/control/client.js +83 -9
  62. package/dist/lib/sandbox/control/completed-reentry.js +85 -0
  63. package/dist/lib/sandbox/control/container-identity.js +28 -31
  64. package/dist/lib/sandbox/control/executor.js +149 -14
  65. package/dist/lib/sandbox/control/lifecycle.js +621 -127
  66. package/dist/lib/sandbox/control/native-file-lock.js +177 -0
  67. package/dist/lib/sandbox/control/server.js +305 -35
  68. package/dist/lib/sandbox/control/state.js +5 -3
  69. package/dist/lib/sandbox/control/task-view.js +183 -0
  70. package/dist/lib/sandbox/engines/authority.js +289 -0
  71. package/dist/lib/sandbox/engines/docker-exact-discovery.js +97 -0
  72. package/dist/lib/sandbox/index.js +5 -0
  73. package/dist/lib/sandbox/recovery.js +21 -1
  74. package/dist/lib/sandbox/workspace-view.js +2 -1
  75. package/dist/lib/sandbox/worktree-safety.js +4 -1
  76. package/dist/lib/server/index.js +8 -0
  77. package/dist/lib/task/artifact-lifecycle.js +42 -13
  78. package/dist/lib/task/artifact-operations.js +520 -0
  79. package/dist/lib/task/artifact-repair-intent.js +59 -0
  80. package/dist/lib/task/artifact-schema.js +135 -0
  81. package/dist/lib/task/capabilities.js +72 -1
  82. package/dist/lib/task/control-authority.js +4 -0
  83. package/dist/lib/task/create-service.js +103 -4
  84. package/dist/lib/task/create.js +25 -0
  85. package/dist/lib/task/events.js +186 -67
  86. package/dist/lib/task/index.js +11 -3
  87. package/dist/lib/task/local-artifact-finalization.js +75 -150
  88. package/dist/lib/task/orchestration.js +192 -52
  89. package/dist/lib/task/qualification-audit.js +490 -0
  90. package/dist/lib/task/qualification-confirmation.js +109 -0
  91. package/dist/lib/task/qualification-intents.js +148 -0
  92. package/dist/lib/task/review-artifacts.js +22 -23
  93. package/dist/lib/task/review-finalization.js +121 -4
  94. package/dist/lib/task/sections.js +6 -4
  95. package/dist/lib/task/verification-config.js +11 -0
  96. package/dist/lib/task/verification-engine.js +54 -4
  97. package/dist/lifecycle-build-manifest.json +3 -3
  98. package/lib/agent-client.ts +9 -0
  99. package/lib/internal/agent-client.ts +4 -2
  100. package/lib/internal/cli-route-inventory.ts +140 -0
  101. package/lib/internal/codex-lifecycle.ts +8 -6
  102. package/lib/internal/codex-sandbox-controller.ts +7 -2
  103. package/lib/internal/git-workflow.ts +9 -6
  104. package/lib/internal/platform-checks.ts +12 -4
  105. package/lib/internal/platform-comment.ts +12 -4
  106. package/lib/internal/platform-context.ts +3 -1
  107. package/lib/internal/platform-issue.ts +11 -4
  108. package/lib/internal/platform-metadata.ts +70 -0
  109. package/lib/internal/platform-pr-review.ts +14 -3
  110. package/lib/internal/platform-pr.ts +23 -10
  111. package/lib/internal/platform-release-notes.ts +5 -3
  112. package/lib/internal/platform-security.ts +83 -0
  113. package/lib/internal/pr-review-grade.ts +10 -3
  114. package/lib/internal/release-workflow.ts +17 -5
  115. package/lib/internal/sandbox-control.ts +19 -5
  116. package/lib/internal/task-activity.ts +12 -4
  117. package/lib/internal/task-artifact.ts +164 -25
  118. package/lib/internal/task-context.ts +3 -1
  119. package/lib/internal/task-create.ts +76 -15
  120. package/lib/internal/task-delivery.ts +3 -1
  121. package/lib/internal/task-event.ts +3 -1
  122. package/lib/internal/task-finalization.ts +3 -1
  123. package/lib/internal/task-invalidation.ts +3 -1
  124. package/lib/internal/task-ledger.ts +11 -1
  125. package/lib/internal/task-lifecycle.ts +3 -1
  126. package/lib/internal/task-operation-registry.ts +482 -0
  127. package/lib/internal/task-orchestration.ts +12 -0
  128. package/lib/internal/task-override.ts +9 -3
  129. package/lib/internal/task-qualification.ts +61 -0
  130. package/lib/internal/task-review.ts +3 -1
  131. package/lib/internal/task-short-id.ts +10 -1
  132. package/lib/internal/task-snapshot.ts +3 -1
  133. package/lib/internal/task-validate.ts +6 -2
  134. package/lib/internal/task-verify.ts +4 -1
  135. package/lib/internal/task-warning.ts +7 -1
  136. package/lib/platform/comment-safety.ts +250 -0
  137. package/lib/platform/github-provider.ts +229 -7
  138. package/lib/platform/issue-comments.ts +160 -35
  139. package/lib/platform/pr-change-report.ts +6 -12
  140. package/lib/platform/pr-summary.ts +27 -6
  141. package/lib/platform/provider-contract.ts +78 -3
  142. package/lib/platform/provider-validation.ts +85 -3
  143. package/lib/platform/pull-requests.ts +126 -178
  144. package/lib/platform/repository-metadata.ts +453 -0
  145. package/lib/platform/security-alerts.ts +191 -0
  146. package/lib/platform/verification-sync.ts +32 -28
  147. package/lib/process-data/index.ts +7 -0
  148. package/lib/run/index.ts +5 -0
  149. package/lib/sandbox/commands/control-status.ts +26 -0
  150. package/lib/sandbox/commands/create.ts +46 -6
  151. package/lib/sandbox/commands/ls.ts +7 -0
  152. package/lib/sandbox/commands/rm.ts +1000 -87
  153. package/lib/sandbox/commands/show.ts +16 -0
  154. package/lib/sandbox/control/client.ts +103 -9
  155. package/lib/sandbox/control/completed-reentry.ts +98 -0
  156. package/lib/sandbox/control/container-identity.ts +27 -43
  157. package/lib/sandbox/control/executor.ts +177 -12
  158. package/lib/sandbox/control/lifecycle.ts +629 -17
  159. package/lib/sandbox/control/native-file-lock.ts +209 -0
  160. package/lib/sandbox/control/protocol.ts +5 -2
  161. package/lib/sandbox/control/server.ts +319 -37
  162. package/lib/sandbox/control/state.ts +6 -3
  163. package/lib/sandbox/control/task-view.ts +240 -0
  164. package/lib/sandbox/engines/authority.ts +365 -0
  165. package/lib/sandbox/engines/docker-exact-discovery.ts +132 -0
  166. package/lib/sandbox/index.ts +7 -0
  167. package/lib/sandbox/recovery.ts +21 -1
  168. package/lib/sandbox/workspace-view.ts +9 -3
  169. package/lib/sandbox/worktree-safety.ts +4 -1
  170. package/lib/server/index.ts +10 -0
  171. package/lib/task/artifact-lifecycle.ts +38 -16
  172. package/lib/task/artifact-operations.ts +626 -0
  173. package/lib/task/artifact-repair-intent.ts +71 -0
  174. package/lib/task/artifact-schema.ts +192 -0
  175. package/lib/task/capabilities.ts +70 -1
  176. package/lib/task/control-authority.ts +11 -1
  177. package/lib/task/create-service.ts +131 -6
  178. package/lib/task/create.ts +27 -0
  179. package/lib/task/events.ts +161 -65
  180. package/lib/task/index.ts +16 -3
  181. package/lib/task/local-artifact-finalization.ts +87 -218
  182. package/lib/task/orchestration.ts +172 -49
  183. package/lib/task/qualification-audit.ts +599 -0
  184. package/lib/task/qualification-confirmation.ts +117 -0
  185. package/lib/task/qualification-intents.ts +150 -0
  186. package/lib/task/review-artifacts.ts +21 -22
  187. package/lib/task/review-finalization.ts +133 -4
  188. package/lib/task/sections.ts +6 -4
  189. package/lib/task/verification-config.ts +12 -0
  190. package/lib/task/verification-engine.ts +55 -4
  191. package/package.json +6 -1
  192. package/templates/.agents/rules/README.en.md +2 -0
  193. package/templates/.agents/rules/README.zh-CN.md +2 -0
  194. package/templates/.agents/rules/decision-qualification.en.md +22 -0
  195. package/templates/.agents/rules/decision-qualification.zh-CN.md +22 -0
  196. package/templates/.agents/rules/evidence-reporting.en.md +28 -0
  197. package/templates/.agents/rules/evidence-reporting.zh-CN.md +28 -0
  198. package/templates/.agents/rules/label-milestone-setup.en.md +7 -7
  199. package/templates/.agents/rules/label-milestone-setup.zh-CN.md +7 -7
  200. package/templates/.agents/rules/local-artifact-repair.en.md +5 -1
  201. package/templates/.agents/rules/local-artifact-repair.zh-CN.md +5 -1
  202. package/templates/.agents/rules/security-alerts.en.md +8 -8
  203. package/templates/.agents/rules/security-alerts.zh-CN.md +8 -8
  204. package/templates/.agents/skills/analyze-task/SKILL.en.md +15 -2
  205. package/templates/.agents/skills/analyze-task/SKILL.zh-CN.md +19 -2
  206. package/templates/.agents/skills/analyze-task/config/verify.en.json +1 -12
  207. package/templates/.agents/skills/analyze-task/config/verify.zh-CN.json +1 -12
  208. package/templates/.agents/skills/close-codescan/SKILL.en.md +2 -2
  209. package/templates/.agents/skills/close-codescan/SKILL.zh-CN.md +2 -2
  210. package/templates/.agents/skills/close-dependabot/SKILL.en.md +2 -2
  211. package/templates/.agents/skills/close-dependabot/SKILL.zh-CN.md +2 -2
  212. package/templates/.agents/skills/code-task/SKILL.en.md +14 -1
  213. package/templates/.agents/skills/code-task/SKILL.zh-CN.md +14 -1
  214. package/templates/.agents/skills/code-task/config/verify.en.json +5 -14
  215. package/templates/.agents/skills/code-task/config/verify.zh-CN.json +5 -14
  216. package/templates/.agents/skills/code-task/reference/code-rules.en.md +5 -4
  217. package/templates/.agents/skills/code-task/reference/code-rules.zh-CN.md +5 -4
  218. package/templates/.agents/skills/code-task/reference/dual-mode.en.md +1 -1
  219. package/templates/.agents/skills/code-task/reference/dual-mode.zh-CN.md +1 -1
  220. package/templates/.agents/skills/code-task/reference/fix-mode.en.md +3 -1
  221. package/templates/.agents/skills/code-task/reference/fix-mode.zh-CN.md +3 -1
  222. package/templates/.agents/skills/code-task/reference/report-template.en.md +42 -15
  223. package/templates/.agents/skills/code-task/reference/report-template.zh-CN.md +39 -12
  224. package/templates/.agents/skills/complete-manual-validation/SKILL.en.md +5 -1
  225. package/templates/.agents/skills/complete-manual-validation/SKILL.zh-CN.md +5 -1
  226. package/templates/.agents/skills/complete-manual-validation/reference/report-template.en.md +2 -0
  227. package/templates/.agents/skills/complete-manual-validation/reference/report-template.zh-CN.md +2 -0
  228. package/templates/.agents/skills/complete-task/SKILL.en.md +9 -22
  229. package/templates/.agents/skills/complete-task/SKILL.zh-CN.md +9 -22
  230. package/templates/.agents/skills/create-task/SKILL.en.md +8 -0
  231. package/templates/.agents/skills/create-task/SKILL.zh-CN.md +7 -0
  232. package/templates/.agents/skills/import-codescan/SKILL.en.md +1 -1
  233. package/templates/.agents/skills/import-codescan/SKILL.zh-CN.md +1 -1
  234. package/templates/.agents/skills/import-dependabot/SKILL.en.md +1 -1
  235. package/templates/.agents/skills/import-dependabot/SKILL.zh-CN.md +1 -1
  236. package/templates/.agents/skills/init-labels/SKILL.en.md +8 -8
  237. package/templates/.agents/skills/init-labels/SKILL.zh-CN.md +8 -8
  238. package/templates/.agents/skills/init-milestones/SKILL.en.md +9 -11
  239. package/templates/.agents/skills/init-milestones/SKILL.zh-CN.md +9 -11
  240. package/templates/.agents/skills/plan-task/SKILL.en.md +14 -1
  241. package/templates/.agents/skills/plan-task/SKILL.zh-CN.md +16 -1
  242. package/templates/.agents/skills/plan-task/config/verify.en.json +4 -14
  243. package/templates/.agents/skills/plan-task/config/verify.zh-CN.json +4 -14
  244. package/templates/.agents/skills/review-analysis/SKILL.en.md +14 -1
  245. package/templates/.agents/skills/review-analysis/SKILL.zh-CN.md +14 -1
  246. package/templates/.agents/skills/review-analysis/config/verify.en.json +1 -18
  247. package/templates/.agents/skills/review-analysis/config/verify.zh-CN.json +1 -18
  248. package/templates/.agents/skills/review-analysis/reference/report-template.en.md +50 -23
  249. package/templates/.agents/skills/review-analysis/reference/report-template.zh-CN.md +45 -18
  250. package/templates/.agents/skills/review-code/SKILL.en.md +14 -1
  251. package/templates/.agents/skills/review-code/SKILL.zh-CN.md +14 -1
  252. package/templates/.agents/skills/review-code/config/verify.en.json +1 -23
  253. package/templates/.agents/skills/review-code/config/verify.zh-CN.json +1 -23
  254. package/templates/.agents/skills/review-code/reference/report-template.en.md +49 -22
  255. package/templates/.agents/skills/review-code/reference/report-template.zh-CN.md +45 -18
  256. package/templates/.agents/skills/review-plan/SKILL.en.md +14 -1
  257. package/templates/.agents/skills/review-plan/SKILL.zh-CN.md +14 -1
  258. package/templates/.agents/skills/review-plan/config/verify.en.json +1 -18
  259. package/templates/.agents/skills/review-plan/config/verify.zh-CN.json +1 -18
  260. package/templates/.agents/skills/review-plan/reference/report-template.en.md +49 -22
  261. package/templates/.agents/skills/review-plan/reference/report-template.zh-CN.md +45 -18
  262. package/templates/.agents/skills/review-pr/SKILL.en.md +5 -1
  263. package/templates/.agents/skills/review-pr/SKILL.zh-CN.md +5 -1
  264. package/templates/.agents/skills/review-pr/reference/report-template.en.md +4 -3
  265. package/templates/.agents/skills/review-pr/reference/report-template.zh-CN.md +4 -3
  266. package/templates/.agents/skills/run-manual-validation/SKILL.en.md +5 -1
  267. package/templates/.agents/skills/run-manual-validation/SKILL.zh-CN.md +5 -1
  268. package/templates/.agents/skills/run-manual-validation/reference/report-template.en.md +3 -1
  269. package/templates/.agents/skills/run-manual-validation/reference/report-template.zh-CN.md +3 -1
  270. package/templates/.agents/skills/test/SKILL.en.md +13 -2
  271. package/templates/.agents/skills/test/SKILL.zh-CN.md +13 -2
  272. package/templates/.agents/skills/update-agent-infra/scripts/sync-templates.js +14 -0
  273. package/templates/.agents/templates/task.en.md +6 -0
  274. package/templates/.agents/templates/task.zh-CN.md +6 -0
  275. package/templates/.agents/scripts/security-alerts.github.sh +0 -151
  276. package/templates/.agents/scripts/security-alerts.sh +0 -31
  277. package/templates/.agents/skills/init-labels/scripts/init-labels.github.sh +0 -146
  278. package/templates/.agents/skills/init-labels/scripts/init-labels.sh +0 -32
  279. package/templates/.agents/skills/init-milestones/scripts/init-milestones.github.sh +0 -294
  280. package/templates/.agents/skills/init-milestones/scripts/init-milestones.sh +0 -6
package/bin/cli.ts CHANGED
@@ -1,5 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  import { VERSION } from '../lib/version.ts';
3
+ import {
4
+ formatTaskViewDiagnostic,
5
+ guardTaskOperation,
6
+ TaskViewOperationError
7
+ } from '../lib/internal/task-operation-registry.ts';
8
+ import { PUBLIC_CLI_COMMAND_ALIASES } from '../lib/internal/cli-route-inventory.ts';
3
9
 
4
10
  // Node.js version check
5
11
  const [major = 0, minor = 0] = process.versions.node.split('.').map((part) => parseInt(part, 10));
@@ -15,7 +21,7 @@ const USAGE = `agent-infra ${VERSION} - bootstrap AI collaboration infrastructur
15
21
  Usage: ai <command> [options]
16
22
 
17
23
  Commands:
18
- agent-client List, inspect, enable, disable, or configure Agent Clients
24
+ agent-client List, status, enable, disable, or configure Agent Clients
19
25
  cp <ssh-alias> Copy local clipboard image to a remote macOS clipboard or Linux sandbox over SSH
20
26
  data Capture, verify, audit, repair, and export process data
21
27
  decide Record a ruling; code-stage decisions require explicit implementation intent
@@ -43,16 +49,27 @@ Examples:
43
49
  npx @fitlab-ai/agent-infra init
44
50
  `;
45
51
 
46
- const COMMAND_ALIASES: Record<string, string> = {
47
- s: 'sandbox',
48
- t: 'task'
49
- };
50
-
51
52
  const rawCommand = process.argv[2] || '';
52
- const command = Object.hasOwn(COMMAND_ALIASES, rawCommand)
53
- ? COMMAND_ALIASES[rawCommand]
53
+ const command = Object.hasOwn(PUBLIC_CLI_COMMAND_ALIASES, rawCommand)
54
+ ? PUBLIC_CLI_COMMAND_ALIASES[rawCommand as keyof typeof PUBLIC_CLI_COMMAND_ALIASES]
54
55
  : rawCommand;
55
56
 
57
+ let taskViewGuardFailed = false;
58
+ try {
59
+ const guard = guardTaskOperation('public', command ?? '', process.argv.slice(3));
60
+ if (guard.taskView && guard.descriptor.effect === 'diagnostic') {
61
+ process.stderr.write(formatTaskViewDiagnostic(guard.taskView));
62
+ }
63
+ } catch (error) {
64
+ taskViewGuardFailed = true;
65
+ if (error instanceof TaskViewOperationError) {
66
+ process.stderr.write(`${error.message}\n`);
67
+ process.exitCode = error.exitCode;
68
+ } else {
69
+ throw error;
70
+ }
71
+ }
72
+
56
73
  function errorMessage(error: unknown): string {
57
74
  return error instanceof Error ? error.message : String(error);
58
75
  }
@@ -73,7 +90,7 @@ async function importCommand(importPath: string) {
73
90
  }
74
91
  }
75
92
 
76
- switch (command) {
93
+ if (!taskViewGuardFailed) switch (command) {
77
94
  case 'agent-client': {
78
95
  const imported = await importCommand('../lib/agent-client.ts');
79
96
  if (!imported) break;
package/dist/bin/cli.js CHANGED
@@ -8,6 +8,8 @@ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExte
8
8
  return path;
9
9
  };
10
10
  import { VERSION } from '../lib/version.js';
11
+ import { formatTaskViewDiagnostic, guardTaskOperation, TaskViewOperationError } from '../lib/internal/task-operation-registry.js';
12
+ import { PUBLIC_CLI_COMMAND_ALIASES } from '../lib/internal/cli-route-inventory.js';
11
13
  // Node.js version check
12
14
  const [major = 0, minor = 0] = process.versions.node.split('.').map((part) => parseInt(part, 10));
13
15
  if (major < 22 || (major === 22 && minor < 9)) {
@@ -19,7 +21,7 @@ const USAGE = `agent-infra ${VERSION} - bootstrap AI collaboration infrastructur
19
21
  Usage: ai <command> [options]
20
22
 
21
23
  Commands:
22
- agent-client List, inspect, enable, disable, or configure Agent Clients
24
+ agent-client List, status, enable, disable, or configure Agent Clients
23
25
  cp <ssh-alias> Copy local clipboard image to a remote macOS clipboard or Linux sandbox over SSH
24
26
  data Capture, verify, audit, repair, and export process data
25
27
  decide Record a ruling; code-stage decisions require explicit implementation intent
@@ -46,14 +48,27 @@ Examples:
46
48
  cd my-project && ai init
47
49
  npx @fitlab-ai/agent-infra init
48
50
  `;
49
- const COMMAND_ALIASES = {
50
- s: 'sandbox',
51
- t: 'task'
52
- };
53
51
  const rawCommand = process.argv[2] || '';
54
- const command = Object.hasOwn(COMMAND_ALIASES, rawCommand)
55
- ? COMMAND_ALIASES[rawCommand]
52
+ const command = Object.hasOwn(PUBLIC_CLI_COMMAND_ALIASES, rawCommand)
53
+ ? PUBLIC_CLI_COMMAND_ALIASES[rawCommand]
56
54
  : rawCommand;
55
+ let taskViewGuardFailed = false;
56
+ try {
57
+ const guard = guardTaskOperation('public', command ?? '', process.argv.slice(3));
58
+ if (guard.taskView && guard.descriptor.effect === 'diagnostic') {
59
+ process.stderr.write(formatTaskViewDiagnostic(guard.taskView));
60
+ }
61
+ }
62
+ catch (error) {
63
+ taskViewGuardFailed = true;
64
+ if (error instanceof TaskViewOperationError) {
65
+ process.stderr.write(`${error.message}\n`);
66
+ process.exitCode = error.exitCode;
67
+ }
68
+ else {
69
+ throw error;
70
+ }
71
+ }
57
72
  function errorMessage(error) {
58
73
  return error instanceof Error ? error.message : String(error);
59
74
  }
@@ -71,164 +86,165 @@ async function importCommand(importPath) {
71
86
  throw error;
72
87
  }
73
88
  }
74
- switch (command) {
75
- case 'agent-client': {
76
- const imported = await importCommand('../lib/agent-client.ts');
77
- if (!imported)
78
- break;
79
- const { cmdAgentClient } = imported;
80
- const code = await cmdAgentClient(process.argv.slice(3)).catch((e) => {
81
- process.stderr.write(`Error: ${errorMessage(e)}\n`);
82
- return 1;
83
- });
84
- if (code)
85
- process.exitCode = code;
86
- break;
87
- }
88
- case 'cp': {
89
- const imported = await importCommand('../lib/cp.ts');
90
- if (!imported)
91
- break;
92
- const { cmdCp } = imported;
93
- const code = await cmdCp(process.argv.slice(3)).catch((e) => {
94
- process.stderr.write(`Error: ${errorMessage(e)}\n`);
95
- return 1;
96
- });
97
- if (code)
98
- process.exitCode = code;
99
- break;
100
- }
101
- case 'data': {
102
- const imported = await importCommand('../lib/process-data/index.ts');
103
- if (!imported)
104
- break;
105
- const { cmdData } = imported;
106
- const code = await cmdData(process.argv.slice(3)).catch((e) => {
107
- process.stderr.write(`Error: ${errorMessage(e)}\n`);
108
- return 1;
109
- });
110
- if (code)
111
- process.exitCode = code;
112
- break;
113
- }
114
- case 'decide': {
115
- const imported = await importCommand('../lib/decide.ts');
116
- if (!imported)
89
+ if (!taskViewGuardFailed)
90
+ switch (command) {
91
+ case 'agent-client': {
92
+ const imported = await importCommand('../lib/agent-client.ts');
93
+ if (!imported)
94
+ break;
95
+ const { cmdAgentClient } = imported;
96
+ const code = await cmdAgentClient(process.argv.slice(3)).catch((e) => {
97
+ process.stderr.write(`Error: ${errorMessage(e)}\n`);
98
+ return 1;
99
+ });
100
+ if (code)
101
+ process.exitCode = code;
117
102
  break;
118
- const { cmdDecide } = imported;
119
- await cmdDecide(process.argv.slice(3));
120
- break;
121
- }
122
- case 'init': {
123
- const imported = await importCommand('../lib/init.ts');
124
- if (!imported)
103
+ }
104
+ case 'cp': {
105
+ const imported = await importCommand('../lib/cp.ts');
106
+ if (!imported)
107
+ break;
108
+ const { cmdCp } = imported;
109
+ const code = await cmdCp(process.argv.slice(3)).catch((e) => {
110
+ process.stderr.write(`Error: ${errorMessage(e)}\n`);
111
+ return 1;
112
+ });
113
+ if (code)
114
+ process.exitCode = code;
125
115
  break;
126
- const { cmdInit } = imported;
127
- await cmdInit().catch((e) => {
128
- process.stderr.write(`Error: ${errorMessage(e)}\n`);
129
- process.exitCode = 1;
130
- });
131
- break;
132
- }
133
- case 'merge': {
134
- const imported = await importCommand('../lib/merge.ts');
135
- if (!imported)
116
+ }
117
+ case 'data': {
118
+ const imported = await importCommand('../lib/process-data/index.ts');
119
+ if (!imported)
120
+ break;
121
+ const { cmdData } = imported;
122
+ const code = await cmdData(process.argv.slice(3)).catch((e) => {
123
+ process.stderr.write(`Error: ${errorMessage(e)}\n`);
124
+ return 1;
125
+ });
126
+ if (code)
127
+ process.exitCode = code;
136
128
  break;
137
- const { cmdMerge } = imported;
138
- await cmdMerge(process.argv.slice(3)).catch((e) => {
139
- process.stderr.write(`Error: ${errorMessage(e)}\n`);
140
- process.exitCode = 1;
141
- });
142
- break;
143
- }
144
- case 'run': {
145
- const imported = await importCommand('../lib/run/index.ts');
146
- if (!imported)
129
+ }
130
+ case 'decide': {
131
+ const imported = await importCommand('../lib/decide.ts');
132
+ if (!imported)
133
+ break;
134
+ const { cmdDecide } = imported;
135
+ await cmdDecide(process.argv.slice(3));
147
136
  break;
148
- const { cmdRun } = imported;
149
- await cmdRun(process.argv.slice(3));
150
- break;
151
- }
152
- case 'sandbox': {
153
- const imported = await importCommand('../lib/sandbox/index.ts');
154
- if (!imported)
155
- break;
156
- const { runSandbox } = imported;
157
- await runSandbox(process.argv.slice(3)).catch((e) => {
158
- process.stderr.write(`Error: ${errorMessage(e)}\n`);
159
- process.exit(1);
160
- });
161
- break;
162
- }
163
- case 'server': {
164
- const imported = await importCommand('../lib/server/index.ts');
165
- if (!imported)
166
- break;
167
- const { runServer } = imported;
168
- await runServer(process.argv.slice(3)).catch((e) => {
169
- process.stderr.write(`Error: ${errorMessage(e)}\n`);
170
- process.exit(1);
171
- });
172
- break;
173
- }
174
- case 'task': {
175
- const imported = await importCommand('../lib/task/index.ts');
176
- if (!imported)
177
- break;
178
- const { runTask } = imported;
179
- await runTask(process.argv.slice(3)).catch((e) => {
180
- process.stderr.write(`Error: ${errorMessage(e)}\n`);
181
- process.exit(1);
182
- });
183
- break;
184
- }
185
- case 'update': {
186
- const imported = await importCommand('../lib/self-update.ts');
187
- if (!imported)
137
+ }
138
+ case 'init': {
139
+ const imported = await importCommand('../lib/init.ts');
140
+ if (!imported)
141
+ break;
142
+ const { cmdInit } = imported;
143
+ await cmdInit().catch((e) => {
144
+ process.stderr.write(`Error: ${errorMessage(e)}\n`);
145
+ process.exitCode = 1;
146
+ });
188
147
  break;
189
- const { cmdUpdate } = imported;
190
- const code = await cmdUpdate().catch((e) => {
191
- process.stderr.write(`Error: ${errorMessage(e)}\n`);
192
- process.exitCode = 1;
193
- return 1;
194
- });
195
- if (code !== 0)
196
- process.exitCode = code;
197
- break;
198
- }
199
- case 'sync': {
200
- const imported = await importCommand('../lib/update.ts');
201
- if (!imported)
148
+ }
149
+ case 'merge': {
150
+ const imported = await importCommand('../lib/merge.ts');
151
+ if (!imported)
152
+ break;
153
+ const { cmdMerge } = imported;
154
+ await cmdMerge(process.argv.slice(3)).catch((e) => {
155
+ process.stderr.write(`Error: ${errorMessage(e)}\n`);
156
+ process.exitCode = 1;
157
+ });
158
+ break;
159
+ }
160
+ case 'run': {
161
+ const imported = await importCommand('../lib/run/index.ts');
162
+ if (!imported)
163
+ break;
164
+ const { cmdRun } = imported;
165
+ await cmdRun(process.argv.slice(3));
166
+ break;
167
+ }
168
+ case 'sandbox': {
169
+ const imported = await importCommand('../lib/sandbox/index.ts');
170
+ if (!imported)
171
+ break;
172
+ const { runSandbox } = imported;
173
+ await runSandbox(process.argv.slice(3)).catch((e) => {
174
+ process.stderr.write(`Error: ${errorMessage(e)}\n`);
175
+ process.exit(1);
176
+ });
177
+ break;
178
+ }
179
+ case 'server': {
180
+ const imported = await importCommand('../lib/server/index.ts');
181
+ if (!imported)
182
+ break;
183
+ const { runServer } = imported;
184
+ await runServer(process.argv.slice(3)).catch((e) => {
185
+ process.stderr.write(`Error: ${errorMessage(e)}\n`);
186
+ process.exit(1);
187
+ });
202
188
  break;
203
- const { cmdSync } = imported;
204
- await cmdSync().catch((e) => {
205
- process.stderr.write(`Error: ${errorMessage(e)}\n`);
206
- process.exitCode = 1;
207
- });
208
- break;
209
- }
210
- case 'version': {
211
- if (process.argv[3] === '--raw') {
212
- console.log(VERSION);
213
189
  }
214
- else {
190
+ case 'task': {
191
+ const imported = await importCommand('../lib/task/index.ts');
192
+ if (!imported)
193
+ break;
194
+ const { runTask } = imported;
195
+ await runTask(process.argv.slice(3)).catch((e) => {
196
+ process.stderr.write(`Error: ${errorMessage(e)}\n`);
197
+ process.exit(1);
198
+ });
199
+ break;
200
+ }
201
+ case 'update': {
202
+ const imported = await importCommand('../lib/self-update.ts');
203
+ if (!imported)
204
+ break;
205
+ const { cmdUpdate } = imported;
206
+ const code = await cmdUpdate().catch((e) => {
207
+ process.stderr.write(`Error: ${errorMessage(e)}\n`);
208
+ process.exitCode = 1;
209
+ return 1;
210
+ });
211
+ if (code !== 0)
212
+ process.exitCode = code;
213
+ break;
214
+ }
215
+ case 'sync': {
216
+ const imported = await importCommand('../lib/update.ts');
217
+ if (!imported)
218
+ break;
219
+ const { cmdSync } = imported;
220
+ await cmdSync().catch((e) => {
221
+ process.stderr.write(`Error: ${errorMessage(e)}\n`);
222
+ process.exitCode = 1;
223
+ });
224
+ break;
225
+ }
226
+ case 'version': {
227
+ if (process.argv[3] === '--raw') {
228
+ console.log(VERSION);
229
+ }
230
+ else {
231
+ console.log(`agent-infra ${VERSION}`);
232
+ }
233
+ break;
234
+ }
235
+ case '--version':
236
+ case '-v': {
215
237
  console.log(`agent-infra ${VERSION}`);
238
+ break;
216
239
  }
217
- break;
218
- }
219
- case '--version':
220
- case '-v': {
221
- console.log(`agent-infra ${VERSION}`);
222
- break;
240
+ case 'help':
241
+ case '':
242
+ process.stdout.write(USAGE);
243
+ break;
244
+ default:
245
+ process.stderr.write(`Unknown command: ${command}\n\n`);
246
+ process.stdout.write(USAGE);
247
+ process.exitCode = 1;
248
+ break;
223
249
  }
224
- case 'help':
225
- case '':
226
- process.stdout.write(USAGE);
227
- break;
228
- default:
229
- process.stderr.write(`Unknown command: ${command}\n\n`);
230
- process.stdout.write(USAGE);
231
- process.exitCode = 1;
232
- break;
233
- }
234
250
  //# sourceMappingURL=cli.js.map
@@ -1,11 +1,32 @@
1
1
  #!/usr/bin/env node
2
+ import { classifySandboxControlEnvironment } from '../lib/sandbox/control/client.js';
3
+ import { formatTaskViewDiagnostic, guardTaskOperation, TaskViewOperationError } from '../lib/internal/task-operation-registry.js';
4
+ import { INTERNAL_HANDLER_ROUTE_SELECTORS } from '../lib/internal/cli-route-inventory.js';
2
5
  const [major = 0, minor = 0] = process.versions.node.split('.').map((part) => parseInt(part, 10));
3
6
  if (major < 22 || (major === 22 && minor < 9)) {
4
7
  process.stderr.write(`agent-infra-internal requires Node.js >= 22.9.0 (current: ${process.version})\n`);
5
8
  process.exit(1);
6
9
  }
7
10
  const command = process.argv[2] || '';
11
+ const internalRouteRegistered = Object.hasOwn(INTERNAL_HANDLER_ROUTE_SELECTORS, command);
8
12
  const taskControlCommand = command === 'task-lifecycle' || command === 'task-orchestration' || command === 'task-finalization';
13
+ let taskViewGuardFailed = false;
14
+ try {
15
+ const guard = guardTaskOperation('internal', command, process.argv.slice(3));
16
+ if (guard.taskView && guard.descriptor.effect === 'diagnostic') {
17
+ process.stderr.write(formatTaskViewDiagnostic(guard.taskView));
18
+ }
19
+ }
20
+ catch (error) {
21
+ taskViewGuardFailed = true;
22
+ if (error instanceof TaskViewOperationError) {
23
+ process.stderr.write(`${error.message}\n`);
24
+ process.exitCode = error.exitCode;
25
+ }
26
+ else {
27
+ throw error;
28
+ }
29
+ }
9
30
  function taskControlTransportFailure(message) {
10
31
  process.stdout.write(`${JSON.stringify({
11
32
  status: 'failed', changed: false,
@@ -13,26 +34,12 @@ function taskControlTransportFailure(message) {
13
34
  })}\n`);
14
35
  process.exit(1);
15
36
  }
16
- if (taskControlCommand) {
17
- const env = process.env;
18
- const executorMarked = Boolean(env.AGENT_INFRA_EXECUTOR_MANIFEST);
19
- const controlKeys = [
20
- 'AGENT_INFRA_CONTROL_TOKEN', 'AGENT_INFRA_CONTROL_GENERATION',
21
- 'AGENT_INFRA_CONTROL_DIR', 'AGENT_INFRA_CONTROL_STATUS_DIR'
22
- ];
23
- const hasControlMarker = controlKeys.some((key) => Boolean(env[key]))
24
- || Boolean(env.AGENT_INFRA_CONTROL_CONTROLLER_BINDING);
25
- const taskBindingMarker = hasControlMarker && Boolean(env.AGENT_INFRA_TASK_ID);
26
- const hasCompleteClientConfig = controlKeys.every((key) => Boolean(env[key]))
27
- && !env.AGENT_INFRA_CONTROL_CONTROLLER_BINDING
28
- && (!taskBindingMarker || Boolean(env.AGENT_INFRA_RUNTIME_DIR));
29
- if (executorMarked) {
30
- taskControlTransportFailure('executor context is only valid for sandbox-control execute');
31
- }
32
- if ((hasControlMarker || taskBindingMarker) && !hasCompleteClientConfig) {
33
- taskControlTransportFailure('sandbox client control configuration is incomplete or conflicting');
37
+ if (!taskViewGuardFailed && taskControlCommand) {
38
+ const environment = classifySandboxControlEnvironment();
39
+ if (environment.kind === 'invalid') {
40
+ taskControlTransportFailure(environment.message ?? 'sandbox client control configuration is invalid');
34
41
  }
35
- if (hasCompleteClientConfig) {
42
+ if (environment.kind === 'controlled') {
36
43
  const { sandboxControl } = await import('../lib/internal/sandbox-control.js');
37
44
  await sandboxControl(['client', command, ...process.argv.slice(3)]);
38
45
  }
@@ -56,7 +63,7 @@ if (taskControlCommand) {
56
63
  }
57
64
  }
58
65
  }
59
- else
66
+ else if (!taskViewGuardFailed && internalRouteRegistered)
60
67
  switch (command) {
61
68
  case 'task-create': {
62
69
  const { taskCreate } = await import('../lib/internal/task-create.js');
@@ -138,6 +145,16 @@ else
138
145
  await platformChecks(process.argv.slice(3));
139
146
  break;
140
147
  }
148
+ case 'platform-security': {
149
+ const { platformSecurity } = await import('../lib/internal/platform-security.js');
150
+ await platformSecurity(process.argv.slice(3));
151
+ break;
152
+ }
153
+ case 'platform-metadata': {
154
+ const { platformMetadata } = await import('../lib/internal/platform-metadata.js');
155
+ await platformMetadata(process.argv.slice(3));
156
+ break;
157
+ }
141
158
  case 'task-context': {
142
159
  const { taskContext } = await import('../lib/internal/task-context.js');
143
160
  taskContext(process.argv.slice(3));
@@ -148,6 +165,11 @@ else
148
165
  await taskLedger(process.argv.slice(3));
149
166
  break;
150
167
  }
168
+ case 'task-qualification': {
169
+ const { taskQualification } = await import('../lib/internal/task-qualification.js');
170
+ await taskQualification(process.argv.slice(3));
171
+ break;
172
+ }
151
173
  case 'task-warning': {
152
174
  const { taskWarning } = await import('../lib/internal/task-warning.js');
153
175
  await taskWarning(process.argv.slice(3));
@@ -226,5 +248,4 @@ else
226
248
  })}\n`);
227
249
  process.exitCode = 1;
228
250
  }
229
- export {};
230
251
  //# sourceMappingURL=internal-cli.js.map
@@ -6,6 +6,8 @@ import { listAgentClientAdapters } from './agent-clients/registry.js';
6
6
  import { AGENT_CLIENT_IDS, isAgentClientId } from './agent-clients/types.js';
7
7
  import { closePrompt, multiSelect } from './prompt.js';
8
8
  import { resolveTemplateDir } from './paths.js';
9
+ import { PUBLIC_CLI_ROUTE_SELECTORS } from './internal/cli-route-inventory.js';
10
+ const AGENT_CLIENT_OPERATIONS = PUBLIC_CLI_ROUTE_SELECTORS['agent-client'];
9
11
  const USAGE = `Usage: ai agent-client <operation>
10
12
 
11
13
  Operations:
@@ -79,6 +81,9 @@ async function cmdAgentClient(args) {
79
81
  process.stdout.write(USAGE);
80
82
  return 0;
81
83
  }
84
+ if (!AGENT_CLIENT_OPERATIONS.includes(operation)) {
85
+ throw new AgentClientCommandError('AGENT_CLIENT_OPERATION_INVALID', `Unknown operation '${operation}'`);
86
+ }
82
87
  if (operation === 'list') {
83
88
  if (args.length !== 1) {
84
89
  throw new AgentClientCommandError('AGENT_CLIENT_ARGUMENT_INVALID', 'list accepts no arguments');
@@ -5,6 +5,7 @@ import { normalizeCustomTUIs } from '../agent-clients/custom-tuis.js';
5
5
  import { renderNextStepCommands } from '../agent-clients/next-steps.js';
6
6
  import { getAgentClientModelSelection } from '../agent-clients/registry.js';
7
7
  import { isAgentClientId } from '../agent-clients/types.js';
8
+ import { ensureInternalHandlerRoute, internalHandlerRoute } from './cli-route-inventory.js';
8
9
  const USAGE = 'Usage: agent-infra-internal agent-client <next-steps|model-selection> [options]\n';
9
10
  function failure(code, message) {
10
11
  process.stdout.write(`${JSON.stringify({
@@ -21,7 +22,7 @@ function parseArgs(args) {
21
22
  process.stdout.write(USAGE);
22
23
  return null;
23
24
  }
24
- if (args[0] !== 'next-steps') {
25
+ if (!internalHandlerRoute('agent-client', 'next-steps', args[0] ?? '')) {
25
26
  failure('AGENT_CLIENT_PAYLOAD_INVALID', "operation must be 'next-steps'");
26
27
  return null;
27
28
  }
@@ -72,7 +73,9 @@ function parseArgs(args) {
72
73
  };
73
74
  }
74
75
  function agentClient(args = []) {
75
- if (args[0] === 'model-selection') {
76
+ if (!ensureInternalHandlerRoute('agent-client', args))
77
+ return;
78
+ if (internalHandlerRoute('agent-client', 'model-selection', args[0] ?? '')) {
76
79
  const values = {};
77
80
  const seen = new Set();
78
81
  for (let index = 1; index < args.length; index += 1) {