agentic-orchestrator 0.1.6 → 0.1.7

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 (426) hide show
  1. package/.prettierignore +10 -0
  2. package/.prettierrc.json +24 -0
  3. package/CLAUDE.md +3 -2
  4. package/README.md +47 -46
  5. package/agentic/orchestrator/defaults/policy.defaults.yaml +1 -1
  6. package/agentic/orchestrator/prompts/planner.system.md +1 -0
  7. package/agentic/orchestrator/schemas/agents.schema.json +4 -21
  8. package/agentic/orchestrator/schemas/gates.schema.json +4 -19
  9. package/agentic/orchestrator/schemas/index.schema.json +3 -14
  10. package/agentic/orchestrator/schemas/multi-project.schema.json +2 -8
  11. package/agentic/orchestrator/schemas/plan.schema.json +6 -26
  12. package/agentic/orchestrator/schemas/policy.schema.json +19 -81
  13. package/agentic/orchestrator/schemas/policy.user.schema.json +1 -5
  14. package/agentic/orchestrator/schemas/qa_test_index.schema.json +5 -29
  15. package/agentic/orchestrator/schemas/state.schema.json +11 -61
  16. package/agentic/orchestrator/tools/catalog.json +33 -164
  17. package/agentic/orchestrator/tools/schemas/input/evidence.latest.input.schema.json +1 -3
  18. package/agentic/orchestrator/tools/schemas/input/feature.delete.input.schema.json +1 -5
  19. package/agentic/orchestrator/tools/schemas/input/feature.get_context.input.schema.json +1 -3
  20. package/agentic/orchestrator/tools/schemas/input/feature.init.input.schema.json +1 -4
  21. package/agentic/orchestrator/tools/schemas/input/feature.log_append.input.schema.json +1 -5
  22. package/agentic/orchestrator/tools/schemas/input/feature.ready_to_merge.input.schema.json +1 -6
  23. package/agentic/orchestrator/tools/schemas/input/feature.state_get.input.schema.json +1 -3
  24. package/agentic/orchestrator/tools/schemas/input/feature.state_patch.input.schema.json +1 -5
  25. package/agentic/orchestrator/tools/schemas/input/gates.run.input.schema.json +1 -5
  26. package/agentic/orchestrator/tools/schemas/input/locks.acquire.input.schema.json +1 -5
  27. package/agentic/orchestrator/tools/schemas/input/locks.release.input.schema.json +1 -5
  28. package/agentic/orchestrator/tools/schemas/input/performance.record_outcome.input.schema.json +10 -1
  29. package/agentic/orchestrator/tools/schemas/input/plan.get.input.schema.json +1 -3
  30. package/agentic/orchestrator/tools/schemas/input/plan.submit.input.schema.json +1 -5
  31. package/agentic/orchestrator/tools/schemas/input/plan.update.input.schema.json +1 -6
  32. package/agentic/orchestrator/tools/schemas/input/qa.test_index_get.input.schema.json +1 -3
  33. package/agentic/orchestrator/tools/schemas/input/qa.test_index_update.input.schema.json +1 -6
  34. package/agentic/orchestrator/tools/schemas/input/repo.apply_patch.input.schema.json +1 -5
  35. package/agentic/orchestrator/tools/schemas/input/repo.diff.input.schema.json +1 -3
  36. package/agentic/orchestrator/tools/schemas/input/repo.diff_bundle.input.schema.json +1 -3
  37. package/agentic/orchestrator/tools/schemas/input/repo.ensure_worktree.input.schema.json +1 -4
  38. package/agentic/orchestrator/tools/schemas/input/repo.read_file.input.schema.json +1 -4
  39. package/agentic/orchestrator/tools/schemas/input/repo.search.input.schema.json +1 -4
  40. package/agentic/orchestrator/tools/schemas/input/repo.status.input.schema.json +1 -3
  41. package/agentic/orchestrator/tools/schemas/input/report.feature_summary.input.schema.json +1 -3
  42. package/agentic/orchestrator/tools/schemas/output/collisions.scan.output.schema.json +1 -3
  43. package/agentic/orchestrator/tools/schemas/output/evidence.latest.output.schema.json +1 -4
  44. package/agentic/orchestrator/tools/schemas/output/feature.delete.output.schema.json +4 -20
  45. package/agentic/orchestrator/tools/schemas/output/feature.discover_specs.output.schema.json +2 -7
  46. package/agentic/orchestrator/tools/schemas/output/feature.get_context.output.schema.json +1 -8
  47. package/agentic/orchestrator/tools/schemas/output/feature.init.output.schema.json +1 -5
  48. package/agentic/orchestrator/tools/schemas/output/feature.log_append.output.schema.json +1 -5
  49. package/agentic/orchestrator/tools/schemas/output/feature.ready_to_merge.output.schema.json +1 -6
  50. package/agentic/orchestrator/tools/schemas/output/feature.state_get.output.schema.json +1 -4
  51. package/agentic/orchestrator/tools/schemas/output/feature.state_patch.output.schema.json +1 -5
  52. package/agentic/orchestrator/tools/schemas/output/gates.list.output.schema.json +2 -7
  53. package/agentic/orchestrator/tools/schemas/output/gates.run.output.schema.json +1 -8
  54. package/agentic/orchestrator/tools/schemas/output/locks.acquire.output.schema.json +1 -7
  55. package/agentic/orchestrator/tools/schemas/output/locks.release.output.schema.json +1 -5
  56. package/agentic/orchestrator/tools/schemas/output/performance.get_analytics.output.schema.json +22 -2
  57. package/agentic/orchestrator/tools/schemas/output/plan.get.output.schema.json +1 -4
  58. package/agentic/orchestrator/tools/schemas/output/plan.submit.output.schema.json +1 -5
  59. package/agentic/orchestrator/tools/schemas/output/plan.update.output.schema.json +1 -5
  60. package/agentic/orchestrator/tools/schemas/output/qa.test_index_get.output.schema.json +1 -5
  61. package/agentic/orchestrator/tools/schemas/output/qa.test_index_update.output.schema.json +1 -4
  62. package/agentic/orchestrator/tools/schemas/output/repo.apply_patch.output.schema.json +1 -6
  63. package/agentic/orchestrator/tools/schemas/output/repo.diff.output.schema.json +1 -4
  64. package/agentic/orchestrator/tools/schemas/output/repo.diff_bundle.output.schema.json +1 -7
  65. package/agentic/orchestrator/tools/schemas/output/repo.ensure_worktree.output.schema.json +1 -6
  66. package/agentic/orchestrator/tools/schemas/output/repo.read_file.output.schema.json +1 -5
  67. package/agentic/orchestrator/tools/schemas/output/repo.search.output.schema.json +1 -5
  68. package/agentic/orchestrator/tools/schemas/output/repo.status.output.schema.json +1 -5
  69. package/agentic/orchestrator/tools/schemas/output/report.dashboard.output.schema.json +1 -4
  70. package/apps/control-plane/scripts/validate-architecture-rules.mjs +16 -5
  71. package/apps/control-plane/scripts/validate-docker-mcp-contract.mjs +30 -8
  72. package/apps/control-plane/scripts/validate-mcp-contracts.ts +13 -7
  73. package/apps/control-plane/src/application/adapters/adapter-registry.ts +35 -15
  74. package/apps/control-plane/src/application/multi-project-loader.ts +27 -10
  75. package/apps/control-plane/src/application/services/activity-monitor-service.ts +26 -14
  76. package/apps/control-plane/src/application/services/collision-queue-service.ts +31 -17
  77. package/apps/control-plane/src/application/services/cost-tracking-service.ts +23 -16
  78. package/apps/control-plane/src/application/services/dependency-scheduler-service.ts +12 -4
  79. package/apps/control-plane/src/application/services/feature-deletion-service.ts +94 -58
  80. package/apps/control-plane/src/application/services/feature-lifecycle-service.ts +19 -13
  81. package/apps/control-plane/src/application/services/feature-state-service.ts +29 -19
  82. package/apps/control-plane/src/application/services/gate-interpolation-service.ts +7 -2
  83. package/apps/control-plane/src/application/services/gate-service.ts +64 -41
  84. package/apps/control-plane/src/application/services/instance-isolation-service.ts +1 -1
  85. package/apps/control-plane/src/application/services/issue-tracker-service.ts +49 -38
  86. package/apps/control-plane/src/application/services/lock-service.ts +75 -49
  87. package/apps/control-plane/src/application/services/merge-service.ts +91 -50
  88. package/apps/control-plane/src/application/services/notifier-service.ts +42 -20
  89. package/apps/control-plane/src/application/services/patch-service.ts +73 -44
  90. package/apps/control-plane/src/application/services/performance-analytics-service.ts +8 -6
  91. package/apps/control-plane/src/application/services/plan-service.ts +148 -89
  92. package/apps/control-plane/src/application/services/policy-loader-service.ts +10 -4
  93. package/apps/control-plane/src/application/services/pr-monitor-service.ts +33 -14
  94. package/apps/control-plane/src/application/services/qa-index-service.ts +20 -16
  95. package/apps/control-plane/src/application/services/reactions-service.ts +30 -15
  96. package/apps/control-plane/src/application/services/reporting-service.ts +16 -12
  97. package/apps/control-plane/src/application/services/run-lease-service.ts +138 -81
  98. package/apps/control-plane/src/application/tools/tool-metadata.ts +5 -5
  99. package/apps/control-plane/src/application/tools/tool-router.ts +6 -3
  100. package/apps/control-plane/src/cli/aop.ts +2 -2
  101. package/apps/control-plane/src/cli/attach-command-handler.ts +9 -9
  102. package/apps/control-plane/src/cli/cleanup-command-handler.ts +16 -11
  103. package/apps/control-plane/src/cli/cli-argument-parser.ts +6 -3
  104. package/apps/control-plane/src/cli/dashboard-command-handler.ts +28 -8
  105. package/apps/control-plane/src/cli/delete-command-handler.ts +7 -7
  106. package/apps/control-plane/src/cli/help-command-handler.ts +61 -32
  107. package/apps/control-plane/src/cli/init-command-handler.ts +110 -54
  108. package/apps/control-plane/src/cli/io.ts +7 -3
  109. package/apps/control-plane/src/cli/resume-command-handler.ts +21 -13
  110. package/apps/control-plane/src/cli/retry-command-handler.ts +12 -11
  111. package/apps/control-plane/src/cli/run-command-handler.ts +12 -8
  112. package/apps/control-plane/src/cli/send-command-handler.ts +6 -6
  113. package/apps/control-plane/src/cli/spec-ingestion-service.ts +14 -8
  114. package/apps/control-plane/src/cli/spec-input-resolver.ts +6 -1
  115. package/apps/control-plane/src/cli/spec-utils.ts +2 -2
  116. package/apps/control-plane/src/cli/status-command-handler.ts +13 -12
  117. package/apps/control-plane/src/cli/tooling.ts +3 -3
  118. package/apps/control-plane/src/cli/types.ts +1 -1
  119. package/apps/control-plane/src/core/collisions.ts +27 -10
  120. package/apps/control-plane/src/core/constants.ts +13 -7
  121. package/apps/control-plane/src/core/error-codes.ts +1 -1
  122. package/apps/control-plane/src/core/fs.ts +11 -5
  123. package/apps/control-plane/src/core/gates.ts +53 -27
  124. package/apps/control-plane/src/core/git.ts +18 -6
  125. package/apps/control-plane/src/core/kernel.ts +515 -227
  126. package/apps/control-plane/src/core/patch.ts +7 -3
  127. package/apps/control-plane/src/core/path-layout.ts +5 -1
  128. package/apps/control-plane/src/core/path-rules.ts +19 -5
  129. package/apps/control-plane/src/core/qa-index.ts +26 -12
  130. package/apps/control-plane/src/core/response.ts +9 -6
  131. package/apps/control-plane/src/core/schemas.ts +29 -10
  132. package/apps/control-plane/src/core/tool-caller.ts +1 -1
  133. package/apps/control-plane/src/core/workspace-hooks.ts +5 -5
  134. package/apps/control-plane/src/index.ts +3 -9
  135. package/apps/control-plane/src/interfaces/cli/bootstrap.ts +69 -32
  136. package/apps/control-plane/src/mcp/kernel-tool-executor.ts +7 -3
  137. package/apps/control-plane/src/mcp/mcp-server-adapter.ts +12 -10
  138. package/apps/control-plane/src/mcp/operation-ledger.ts +18 -8
  139. package/apps/control-plane/src/mcp/protocol-contract.ts +2 -2
  140. package/apps/control-plane/src/mcp/runtime-factory.ts +15 -6
  141. package/apps/control-plane/src/mcp/token-auth-verifier.ts +3 -2
  142. package/apps/control-plane/src/mcp/token-claims-validator.ts +11 -7
  143. package/apps/control-plane/src/mcp/tool-authorizer.ts +1 -3
  144. package/apps/control-plane/src/mcp/tool-client.ts +17 -5
  145. package/apps/control-plane/src/mcp/tool-contract-validator.ts +17 -8
  146. package/apps/control-plane/src/mcp/tool-registry-loader.ts +7 -3
  147. package/apps/control-plane/src/mcp/tool-runtime.ts +66 -39
  148. package/apps/control-plane/src/mcp/tools-markdown-generator.ts +6 -1
  149. package/apps/control-plane/src/providers/providers.ts +72 -48
  150. package/apps/control-plane/src/supervisor/build-wave-executor.ts +44 -25
  151. package/apps/control-plane/src/supervisor/planning-wave-executor.ts +46 -33
  152. package/apps/control-plane/src/supervisor/prompt-bundle-loader.ts +1 -1
  153. package/apps/control-plane/src/supervisor/qa-wave-executor.ts +38 -23
  154. package/apps/control-plane/src/supervisor/run-coordinator.ts +71 -36
  155. package/apps/control-plane/src/supervisor/runtime.ts +59 -35
  156. package/apps/control-plane/src/supervisor/session-orchestrator.ts +48 -31
  157. package/apps/control-plane/src/supervisor/types.ts +22 -7
  158. package/apps/control-plane/src/supervisor/worker-decision-loop.ts +30 -20
  159. package/apps/control-plane/test/activity-monitor.spec.ts +54 -30
  160. package/apps/control-plane/test/adapter-registry.spec.ts +5 -5
  161. package/apps/control-plane/test/aop.spec.ts +4 -4
  162. package/apps/control-plane/test/batch-operations.spec.ts +20 -18
  163. package/apps/control-plane/test/bootstrap-attach.spec.ts +52 -19
  164. package/apps/control-plane/test/bootstrap-edge-cases.spec.ts +58 -27
  165. package/apps/control-plane/test/bootstrap.spec.ts +72 -40
  166. package/apps/control-plane/test/cleanup-command.spec.ts +86 -32
  167. package/apps/control-plane/test/cli-helpers.spec.ts +119 -66
  168. package/apps/control-plane/test/cli.spec.ts +1 -1
  169. package/apps/control-plane/test/cli.unit.spec.ts +226 -167
  170. package/apps/control-plane/test/collision-queue.spec.ts +49 -40
  171. package/apps/control-plane/test/collisions.spec.ts +30 -30
  172. package/apps/control-plane/test/core-utils.spec.ts +29 -15
  173. package/apps/control-plane/test/cost-tracking.spec.ts +38 -22
  174. package/apps/control-plane/test/dashboard-api.integration.spec.ts +68 -36
  175. package/apps/control-plane/test/dashboard-client.spec.ts +18 -12
  176. package/apps/control-plane/test/dashboard-command.spec.ts +11 -7
  177. package/apps/control-plane/test/delete-command-handler.spec.ts +49 -41
  178. package/apps/control-plane/test/dependency-scheduler.spec.ts +47 -20
  179. package/apps/control-plane/test/epoch-tracking.spec.ts +9 -9
  180. package/apps/control-plane/test/feature-deletion-service.spec.ts +60 -52
  181. package/apps/control-plane/test/feature-lifecycle.spec.ts +36 -17
  182. package/apps/control-plane/test/gates.spec.ts +101 -81
  183. package/apps/control-plane/test/git-spawn-error.spec.ts +1 -1
  184. package/apps/control-plane/test/helpers.ts +10 -6
  185. package/apps/control-plane/test/incremental-gates.spec.ts +59 -20
  186. package/apps/control-plane/test/init-wizard.spec.ts +162 -67
  187. package/apps/control-plane/test/instance-isolation.spec.ts +43 -10
  188. package/apps/control-plane/test/issue-tracker.spec.ts +368 -128
  189. package/apps/control-plane/test/kernel-collision-replay.spec.ts +50 -29
  190. package/apps/control-plane/test/kernel.branches.spec.ts +64 -40
  191. package/apps/control-plane/test/kernel.coverage.spec.ts +85 -49
  192. package/apps/control-plane/test/kernel.coverage2.spec.ts +109 -65
  193. package/apps/control-plane/test/kernel.spec.ts +134 -51
  194. package/apps/control-plane/test/lock-service.spec.ts +92 -68
  195. package/apps/control-plane/test/mcp-helpers.spec.ts +53 -39
  196. package/apps/control-plane/test/mcp.spec.ts +231 -115
  197. package/apps/control-plane/test/merge-service.spec.ts +142 -94
  198. package/apps/control-plane/test/multi-project.spec.ts +28 -22
  199. package/apps/control-plane/test/notifier-service.spec.ts +136 -92
  200. package/apps/control-plane/test/parallel-gates.spec.ts +51 -35
  201. package/apps/control-plane/test/patch-service.spec.ts +128 -48
  202. package/apps/control-plane/test/performance-analytics.spec.ts +99 -63
  203. package/apps/control-plane/test/plan-service.spec.ts +50 -39
  204. package/apps/control-plane/test/planning-wave-executor.spec.ts +95 -71
  205. package/apps/control-plane/test/policy-loader-service.spec.ts +41 -19
  206. package/apps/control-plane/test/pr-monitor.spec.ts +113 -64
  207. package/apps/control-plane/test/providers.spec.ts +133 -102
  208. package/apps/control-plane/test/qa-index-service.spec.ts +31 -33
  209. package/apps/control-plane/test/qa-index.spec.ts +58 -61
  210. package/apps/control-plane/test/reactions.spec.ts +88 -45
  211. package/apps/control-plane/test/response.spec.ts +5 -5
  212. package/apps/control-plane/test/resume-command.spec.ts +121 -80
  213. package/apps/control-plane/test/run-coordinator.spec.ts +205 -136
  214. package/apps/control-plane/test/schema-date-time.spec.ts +49 -41
  215. package/apps/control-plane/test/service-retry-paths.spec.ts +77 -57
  216. package/apps/control-plane/test/services.spec.ts +147 -129
  217. package/apps/control-plane/test/session-management.spec.ts +136 -74
  218. package/apps/control-plane/test/spec-ingestion.spec.ts +23 -21
  219. package/apps/control-plane/test/spec-input-resolver.spec.ts +11 -10
  220. package/apps/control-plane/test/supervisor-collaborators.spec.ts +168 -121
  221. package/apps/control-plane/test/supervisor.calltool.spec.ts +21 -18
  222. package/apps/control-plane/test/supervisor.spec.ts +67 -43
  223. package/apps/control-plane/test/supervisor.unit.spec.ts +195 -126
  224. package/apps/control-plane/test/token-auth-verifier.spec.ts +29 -14
  225. package/apps/control-plane/test/tool-registry-loader.spec.ts +51 -27
  226. package/apps/control-plane/test/tool-runtime.spec.ts +63 -46
  227. package/apps/control-plane/test/worker-decision-loop.spec.ts +143 -122
  228. package/apps/control-plane/test/workspace-hooks.spec.ts +61 -23
  229. package/apps/control-plane/tsconfig.build.json +2 -7
  230. package/apps/control-plane/tsconfig.json +1 -5
  231. package/apps/control-plane/vitest.config.ts +7 -7
  232. package/dist/apps/control-plane/application/adapters/adapter-registry.js +12 -5
  233. package/dist/apps/control-plane/application/adapters/adapter-registry.js.map +1 -1
  234. package/dist/apps/control-plane/application/multi-project-loader.js +26 -9
  235. package/dist/apps/control-plane/application/multi-project-loader.js.map +1 -1
  236. package/dist/apps/control-plane/application/services/activity-monitor-service.js +7 -7
  237. package/dist/apps/control-plane/application/services/activity-monitor-service.js.map +1 -1
  238. package/dist/apps/control-plane/application/services/collision-queue-service.js +7 -7
  239. package/dist/apps/control-plane/application/services/collision-queue-service.js.map +1 -1
  240. package/dist/apps/control-plane/application/services/cost-tracking-service.js +6 -8
  241. package/dist/apps/control-plane/application/services/cost-tracking-service.js.map +1 -1
  242. package/dist/apps/control-plane/application/services/dependency-scheduler-service.js.map +1 -1
  243. package/dist/apps/control-plane/application/services/feature-deletion-service.js +37 -29
  244. package/dist/apps/control-plane/application/services/feature-deletion-service.js.map +1 -1
  245. package/dist/apps/control-plane/application/services/feature-lifecycle-service.js +10 -10
  246. package/dist/apps/control-plane/application/services/feature-lifecycle-service.js.map +1 -1
  247. package/dist/apps/control-plane/application/services/feature-state-service.js +11 -11
  248. package/dist/apps/control-plane/application/services/feature-state-service.js.map +1 -1
  249. package/dist/apps/control-plane/application/services/gate-interpolation-service.js +3 -1
  250. package/dist/apps/control-plane/application/services/gate-interpolation-service.js.map +1 -1
  251. package/dist/apps/control-plane/application/services/gate-service.js +26 -26
  252. package/dist/apps/control-plane/application/services/gate-service.js.map +1 -1
  253. package/dist/apps/control-plane/application/services/instance-isolation-service.js +1 -1
  254. package/dist/apps/control-plane/application/services/instance-isolation-service.js.map +1 -1
  255. package/dist/apps/control-plane/application/services/issue-tracker-service.js +25 -15
  256. package/dist/apps/control-plane/application/services/issue-tracker-service.js.map +1 -1
  257. package/dist/apps/control-plane/application/services/lock-service.js +32 -32
  258. package/dist/apps/control-plane/application/services/lock-service.js.map +1 -1
  259. package/dist/apps/control-plane/application/services/merge-service.js +41 -27
  260. package/dist/apps/control-plane/application/services/merge-service.js.map +1 -1
  261. package/dist/apps/control-plane/application/services/notifier-service.js +29 -15
  262. package/dist/apps/control-plane/application/services/notifier-service.js.map +1 -1
  263. package/dist/apps/control-plane/application/services/patch-service.js +21 -19
  264. package/dist/apps/control-plane/application/services/patch-service.js.map +1 -1
  265. package/dist/apps/control-plane/application/services/performance-analytics-service.js +4 -4
  266. package/dist/apps/control-plane/application/services/performance-analytics-service.js.map +1 -1
  267. package/dist/apps/control-plane/application/services/plan-service.js +33 -33
  268. package/dist/apps/control-plane/application/services/plan-service.js.map +1 -1
  269. package/dist/apps/control-plane/application/services/policy-loader-service.js.map +1 -1
  270. package/dist/apps/control-plane/application/services/pr-monitor-service.js +23 -11
  271. package/dist/apps/control-plane/application/services/pr-monitor-service.js.map +1 -1
  272. package/dist/apps/control-plane/application/services/qa-index-service.js +11 -11
  273. package/dist/apps/control-plane/application/services/qa-index-service.js.map +1 -1
  274. package/dist/apps/control-plane/application/services/reactions-service.js +13 -9
  275. package/dist/apps/control-plane/application/services/reactions-service.js.map +1 -1
  276. package/dist/apps/control-plane/application/services/reporting-service.js +11 -9
  277. package/dist/apps/control-plane/application/services/reporting-service.js.map +1 -1
  278. package/dist/apps/control-plane/application/services/run-lease-service.js +34 -33
  279. package/dist/apps/control-plane/application/services/run-lease-service.js.map +1 -1
  280. package/dist/apps/control-plane/application/tools/tool-metadata.js +2 -2
  281. package/dist/apps/control-plane/application/tools/tool-router.js.map +1 -1
  282. package/dist/apps/control-plane/cli/attach-command-handler.js +9 -9
  283. package/dist/apps/control-plane/cli/cleanup-command-handler.js +11 -9
  284. package/dist/apps/control-plane/cli/cleanup-command-handler.js.map +1 -1
  285. package/dist/apps/control-plane/cli/cli-argument-parser.js +4 -3
  286. package/dist/apps/control-plane/cli/cli-argument-parser.js.map +1 -1
  287. package/dist/apps/control-plane/cli/dashboard-command-handler.js +23 -7
  288. package/dist/apps/control-plane/cli/dashboard-command-handler.js.map +1 -1
  289. package/dist/apps/control-plane/cli/delete-command-handler.js +7 -7
  290. package/dist/apps/control-plane/cli/help-command-handler.js +58 -30
  291. package/dist/apps/control-plane/cli/help-command-handler.js.map +1 -1
  292. package/dist/apps/control-plane/cli/init-command-handler.js +44 -33
  293. package/dist/apps/control-plane/cli/init-command-handler.js.map +1 -1
  294. package/dist/apps/control-plane/cli/io.js +2 -2
  295. package/dist/apps/control-plane/cli/io.js.map +1 -1
  296. package/dist/apps/control-plane/cli/resume-command-handler.js +9 -9
  297. package/dist/apps/control-plane/cli/resume-command-handler.js.map +1 -1
  298. package/dist/apps/control-plane/cli/retry-command-handler.js +12 -11
  299. package/dist/apps/control-plane/cli/retry-command-handler.js.map +1 -1
  300. package/dist/apps/control-plane/cli/run-command-handler.js +12 -8
  301. package/dist/apps/control-plane/cli/run-command-handler.js.map +1 -1
  302. package/dist/apps/control-plane/cli/send-command-handler.js +6 -6
  303. package/dist/apps/control-plane/cli/spec-ingestion-service.js +10 -8
  304. package/dist/apps/control-plane/cli/spec-ingestion-service.js.map +1 -1
  305. package/dist/apps/control-plane/cli/spec-input-resolver.js.map +1 -1
  306. package/dist/apps/control-plane/cli/spec-utils.js.map +1 -1
  307. package/dist/apps/control-plane/cli/status-command-handler.js +8 -8
  308. package/dist/apps/control-plane/cli/status-command-handler.js.map +1 -1
  309. package/dist/apps/control-plane/cli/tooling.js +1 -1
  310. package/dist/apps/control-plane/core/collisions.js +11 -8
  311. package/dist/apps/control-plane/core/collisions.js.map +1 -1
  312. package/dist/apps/control-plane/core/constants.js +13 -7
  313. package/dist/apps/control-plane/core/constants.js.map +1 -1
  314. package/dist/apps/control-plane/core/error-codes.js +1 -1
  315. package/dist/apps/control-plane/core/fs.js.map +1 -1
  316. package/dist/apps/control-plane/core/gates.d.ts +2 -2
  317. package/dist/apps/control-plane/core/gates.js +26 -19
  318. package/dist/apps/control-plane/core/gates.js.map +1 -1
  319. package/dist/apps/control-plane/core/git.js +3 -3
  320. package/dist/apps/control-plane/core/git.js.map +1 -1
  321. package/dist/apps/control-plane/core/kernel.d.ts +1 -0
  322. package/dist/apps/control-plane/core/kernel.js +134 -81
  323. package/dist/apps/control-plane/core/kernel.js.map +1 -1
  324. package/dist/apps/control-plane/core/patch.js +7 -3
  325. package/dist/apps/control-plane/core/patch.js.map +1 -1
  326. package/dist/apps/control-plane/core/path-layout.d.ts +1 -0
  327. package/dist/apps/control-plane/core/path-layout.js +4 -1
  328. package/dist/apps/control-plane/core/path-layout.js.map +1 -1
  329. package/dist/apps/control-plane/core/path-rules.js +3 -1
  330. package/dist/apps/control-plane/core/path-rules.js.map +1 -1
  331. package/dist/apps/control-plane/core/qa-index.js +5 -5
  332. package/dist/apps/control-plane/core/qa-index.js.map +1 -1
  333. package/dist/apps/control-plane/core/response.js +3 -3
  334. package/dist/apps/control-plane/core/response.js.map +1 -1
  335. package/dist/apps/control-plane/core/schemas.js +10 -6
  336. package/dist/apps/control-plane/core/schemas.js.map +1 -1
  337. package/dist/apps/control-plane/core/workspace-hooks.js +3 -3
  338. package/dist/apps/control-plane/index.d.ts +1 -1
  339. package/dist/apps/control-plane/index.js +1 -1
  340. package/dist/apps/control-plane/index.js.map +1 -1
  341. package/dist/apps/control-plane/interfaces/cli/bootstrap.js +31 -20
  342. package/dist/apps/control-plane/interfaces/cli/bootstrap.js.map +1 -1
  343. package/dist/apps/control-plane/mcp/kernel-tool-executor.js +1 -1
  344. package/dist/apps/control-plane/mcp/kernel-tool-executor.js.map +1 -1
  345. package/dist/apps/control-plane/mcp/mcp-server-adapter.js +6 -7
  346. package/dist/apps/control-plane/mcp/mcp-server-adapter.js.map +1 -1
  347. package/dist/apps/control-plane/mcp/operation-ledger.js +5 -5
  348. package/dist/apps/control-plane/mcp/operation-ledger.js.map +1 -1
  349. package/dist/apps/control-plane/mcp/protocol-contract.js +2 -2
  350. package/dist/apps/control-plane/mcp/runtime-factory.js +2 -2
  351. package/dist/apps/control-plane/mcp/runtime-factory.js.map +1 -1
  352. package/dist/apps/control-plane/mcp/token-auth-verifier.js +1 -1
  353. package/dist/apps/control-plane/mcp/token-auth-verifier.js.map +1 -1
  354. package/dist/apps/control-plane/mcp/token-claims-validator.js +5 -5
  355. package/dist/apps/control-plane/mcp/token-claims-validator.js.map +1 -1
  356. package/dist/apps/control-plane/mcp/tool-authorizer.js +1 -3
  357. package/dist/apps/control-plane/mcp/tool-authorizer.js.map +1 -1
  358. package/dist/apps/control-plane/mcp/tool-client.js +2 -2
  359. package/dist/apps/control-plane/mcp/tool-client.js.map +1 -1
  360. package/dist/apps/control-plane/mcp/tool-contract-validator.js +3 -3
  361. package/dist/apps/control-plane/mcp/tool-contract-validator.js.map +1 -1
  362. package/dist/apps/control-plane/mcp/tool-registry-loader.js +1 -1
  363. package/dist/apps/control-plane/mcp/tool-registry-loader.js.map +1 -1
  364. package/dist/apps/control-plane/mcp/tool-runtime.js +17 -17
  365. package/dist/apps/control-plane/mcp/tool-runtime.js.map +1 -1
  366. package/dist/apps/control-plane/mcp/tools-markdown-generator.js +6 -1
  367. package/dist/apps/control-plane/mcp/tools-markdown-generator.js.map +1 -1
  368. package/dist/apps/control-plane/providers/providers.d.ts +1 -1
  369. package/dist/apps/control-plane/providers/providers.js +31 -34
  370. package/dist/apps/control-plane/providers/providers.js.map +1 -1
  371. package/dist/apps/control-plane/supervisor/build-wave-executor.js +12 -12
  372. package/dist/apps/control-plane/supervisor/build-wave-executor.js.map +1 -1
  373. package/dist/apps/control-plane/supervisor/planning-wave-executor.js +19 -16
  374. package/dist/apps/control-plane/supervisor/planning-wave-executor.js.map +1 -1
  375. package/dist/apps/control-plane/supervisor/prompt-bundle-loader.js +1 -1
  376. package/dist/apps/control-plane/supervisor/qa-wave-executor.js +13 -13
  377. package/dist/apps/control-plane/supervisor/qa-wave-executor.js.map +1 -1
  378. package/dist/apps/control-plane/supervisor/run-coordinator.js +37 -20
  379. package/dist/apps/control-plane/supervisor/run-coordinator.js.map +1 -1
  380. package/dist/apps/control-plane/supervisor/runtime.js +25 -21
  381. package/dist/apps/control-plane/supervisor/runtime.js.map +1 -1
  382. package/dist/apps/control-plane/supervisor/session-orchestrator.js +29 -23
  383. package/dist/apps/control-plane/supervisor/session-orchestrator.js.map +1 -1
  384. package/dist/apps/control-plane/supervisor/types.d.ts +3 -3
  385. package/dist/apps/control-plane/supervisor/types.js.map +1 -1
  386. package/dist/apps/control-plane/supervisor/worker-decision-loop.js +14 -16
  387. package/dist/apps/control-plane/supervisor/worker-decision-loop.js.map +1 -1
  388. package/eslint.config.mjs +20 -20
  389. package/example-configurations/README.md +1 -1
  390. package/example-configurations/java/agents.yaml +3 -3
  391. package/example-configurations/java/policy.yaml +1 -1
  392. package/example-configurations/node/agents.yaml +3 -3
  393. package/example-configurations/node/policy.yaml +1 -1
  394. package/package.json +10 -5
  395. package/packages/web-dashboard/next.config.js +2 -2
  396. package/packages/web-dashboard/src/app/api/actions/route.ts +25 -9
  397. package/packages/web-dashboard/src/app/api/events/route.ts +20 -6
  398. package/packages/web-dashboard/src/app/api/features/[id]/checkout/route.ts +88 -37
  399. package/packages/web-dashboard/src/app/api/features/[id]/evidence/[artifact]/route.ts +8 -5
  400. package/packages/web-dashboard/src/app/api/features/[id]/review/route.ts +27 -9
  401. package/packages/web-dashboard/src/app/api/features/[id]/route.ts +5 -2
  402. package/packages/web-dashboard/src/app/api/projects/route.ts +5 -5
  403. package/packages/web-dashboard/src/app/globals.css +10 -2
  404. package/packages/web-dashboard/src/app/page.tsx +100 -37
  405. package/packages/web-dashboard/src/lib/aop-client.ts +68 -37
  406. package/packages/web-dashboard/src/lib/multi-project-config.ts +28 -7
  407. package/packages/web-dashboard/src/lib/orchestrator-tools.ts +59 -36
  408. package/packages/web-dashboard/tsconfig.json +3 -11
  409. package/scripts/nx-safe.mjs +10 -10
  410. package/spec-files/completed/agentic_orchestrator_cli_delete_command_spec.md +5 -0
  411. package/spec-files/completed/agentic_orchestrator_feature_gaps_closure_spec.md +187 -90
  412. package/spec-files/completed/agentic_orchestrator_init_policy_ux_simplification_spec.md +49 -16
  413. package/spec-files/completed/agentic_orchestrator_mcp_formalization_spec.md +24 -1
  414. package/spec-files/completed/agentic_orchestrator_single_global_orchestrator_spec.md +9 -0
  415. package/spec-files/completed/agentic_orchestrator_spec.md +171 -75
  416. package/spec-files/completed/agentic_orchestrator_validator_hardening_spec.md +25 -17
  417. package/spec-files/outstanding/agentic_orchestrator_artifact_database_publishing_spec.md +40 -5
  418. package/spec-files/outstanding/agentic_orchestrator_enterprise_governance_dashboard_spec.md +23 -12
  419. package/spec-files/outstanding/agentic_orchestrator_knowledge_canary_spec.md +16 -4
  420. package/spec-files/outstanding/agentic_orchestrator_observability_integrity_diagnostics_spec.md +42 -2
  421. package/spec-files/outstanding/agentic_orchestrator_performance_improvements_spec.md +209 -130
  422. package/spec-files/outstanding/agentic_orchestrator_planning_review_quality_spec.md +56 -3
  423. package/spec-files/outstanding/agentic_orchestrator_productization_commercial_spec.md +77 -10
  424. package/spec-files/outstanding/agentic_orchestrator_quality_adoption_execution_spec.md +29 -14
  425. package/spec-files/progress.md +186 -175
  426. package/tsconfig.json +2 -8
@@ -8,20 +8,20 @@ describe('provider selection', () => {
8
8
  cli: {
9
9
  agent_provider: 'custom',
10
10
  agent_model: 'cli-model',
11
- provider_config_env: 'CLI_CONFIG'
11
+ provider_config_env: 'CLI_CONFIG',
12
12
  },
13
13
  env: {
14
14
  AOP_AGENT_PROVIDER: 'codex',
15
15
  AOP_AGENT_MODEL: 'env-model',
16
- AOP_PROVIDER_CONFIG_ENV: 'ENV_CONFIG'
16
+ AOP_PROVIDER_CONFIG_ENV: 'ENV_CONFIG',
17
17
  },
18
18
  agentsConfig: {
19
19
  runtime: {
20
20
  default_provider: 'claude',
21
21
  default_model: 'cfg-model',
22
- provider_config_env: 'CFG_CONFIG'
23
- }
24
- }
22
+ provider_config_env: 'CFG_CONFIG',
23
+ },
24
+ },
25
25
  });
26
26
 
27
27
  expect(selection.provider).toBe('custom');
@@ -34,8 +34,8 @@ describe('provider selection', () => {
34
34
  resolveProviderSelection({
35
35
  cli: {},
36
36
  env: {},
37
- agentsConfig: {}
38
- })
37
+ agentsConfig: {},
38
+ }),
39
39
  ).toThrow(ERROR_CODES.AGENT_PROVIDER_NOT_CONFIGURED);
40
40
  });
41
41
 
@@ -44,8 +44,8 @@ describe('provider selection', () => {
44
44
  resolveProviderSelection({
45
45
  cli: { agent_provider: 'bogus' },
46
46
  env: {},
47
- agentsConfig: {}
48
- })
47
+ agentsConfig: {},
48
+ }),
49
49
  ).toThrow(ERROR_CODES.UNSUPPORTED_AGENT_PROVIDER);
50
50
  });
51
51
 
@@ -54,8 +54,8 @@ describe('provider selection', () => {
54
54
  resolveProviderSelection({
55
55
  cli: { agent_provider: 'codex', provider_config_env: 'AOP_KEY' },
56
56
  env: {},
57
- agentsConfig: {}
58
- })
57
+ agentsConfig: {},
58
+ }),
59
59
  ).toThrow(ERROR_CODES.PROVIDER_AUTH_MISSING);
60
60
  });
61
61
 
@@ -63,12 +63,12 @@ describe('provider selection', () => {
63
63
  const selection = resolveProviderSelection({
64
64
  cli: {
65
65
  agent_provider: 'codex',
66
- provider_config_env: 'AOP_KEY'
66
+ provider_config_env: 'AOP_KEY',
67
67
  },
68
68
  env: {
69
- AOP_KEY: 'token'
69
+ AOP_KEY: 'token',
70
70
  },
71
- agentsConfig: {}
71
+ agentsConfig: {},
72
72
  });
73
73
 
74
74
  expect(selection.model).toBe('codex-default');
@@ -78,10 +78,10 @@ describe('provider selection', () => {
78
78
  it('GIVEN_custom_provider_without_credentials_WHEN_resolving_THEN_allows_null_config_ref', () => {
79
79
  const selection = resolveProviderSelection({
80
80
  cli: {
81
- agent_provider: 'custom'
81
+ agent_provider: 'custom',
82
82
  },
83
83
  env: {},
84
- agentsConfig: {}
84
+ agentsConfig: {},
85
85
  });
86
86
 
87
87
  expect(selection.provider).toBe('custom');
@@ -91,10 +91,10 @@ describe('provider selection', () => {
91
91
  it('GIVEN_kiro_cli_provider_without_credentials_WHEN_resolving_THEN_allows_null_config_ref', () => {
92
92
  const selection = resolveProviderSelection({
93
93
  cli: {
94
- agent_provider: 'kiro-cli'
94
+ agent_provider: 'kiro-cli',
95
95
  },
96
96
  env: {},
97
- agentsConfig: {}
97
+ agentsConfig: {},
98
98
  });
99
99
 
100
100
  expect(selection.provider).toBe('kiro-cli');
@@ -104,7 +104,7 @@ describe('provider selection', () => {
104
104
  it('GIVEN_provider_configured_agent_config_WHEN_resolving_THEN_returns_provider_specific_config', () => {
105
105
  const selection = resolveProviderSelection({
106
106
  cli: {
107
- agent_provider: 'kiro-cli'
107
+ agent_provider: 'kiro-cli',
108
108
  },
109
109
  env: {},
110
110
  agentsConfig: {
@@ -112,16 +112,16 @@ describe('provider selection', () => {
112
112
  provider_configs: {
113
113
  'kiro-cli': {
114
114
  command: 'kiro-cli',
115
- args: ['chat', '--agent', 'dev']
116
- }
117
- }
118
- }
119
- }
115
+ args: ['chat', '--agent', 'dev'],
116
+ },
117
+ },
118
+ },
119
+ },
120
120
  });
121
121
 
122
122
  expect(selection.agent_config).toEqual({
123
123
  command: 'kiro-cli',
124
- args: ['chat', '--agent', 'dev']
124
+ args: ['chat', '--agent', 'dev'],
125
125
  });
126
126
  });
127
127
 
@@ -131,8 +131,8 @@ describe('provider selection', () => {
131
131
  agent_provider: 'copilot',
132
132
  agent_config: JSON.stringify({
133
133
  command: 'copilot',
134
- args: ['chat', '--agent', 'review']
135
- })
134
+ args: ['chat', '--agent', 'review'],
135
+ }),
136
136
  },
137
137
  env: {},
138
138
  agentsConfig: {
@@ -140,16 +140,16 @@ describe('provider selection', () => {
140
140
  provider_configs: {
141
141
  copilot: {
142
142
  command: 'copilot',
143
- args: ['chat']
144
- }
145
- }
146
- }
147
- }
143
+ args: ['chat'],
144
+ },
145
+ },
146
+ },
147
+ },
148
148
  });
149
149
 
150
150
  expect(selection.agent_config).toEqual({
151
151
  command: 'copilot',
152
- args: ['chat', '--agent', 'review']
152
+ args: ['chat', '--agent', 'review'],
153
153
  });
154
154
  });
155
155
 
@@ -158,11 +158,11 @@ describe('provider selection', () => {
158
158
  resolveProviderSelection({
159
159
  cli: {
160
160
  agent_provider: 'kiro-cli',
161
- agent_config: '{not-json'
161
+ agent_config: '{not-json',
162
162
  },
163
163
  env: {},
164
- agentsConfig: {}
165
- })
164
+ agentsConfig: {},
165
+ }),
166
166
  ).toThrow(ERROR_CODES.INVALID_CLI_ARGS);
167
167
  });
168
168
 
@@ -171,7 +171,7 @@ describe('provider selection', () => {
171
171
  const selection = resolveProviderSelection({
172
172
  cli: { agent_provider: 'kiro-cli' },
173
173
  env: { AOP_AGENT_CONFIG: JSON.stringify(agentConfig) },
174
- agentsConfig: {}
174
+ agentsConfig: {},
175
175
  });
176
176
  expect(selection.agent_config).toEqual(agentConfig);
177
177
  });
@@ -181,7 +181,7 @@ describe('provider selection', () => {
181
181
  const selection = resolveProviderSelection({
182
182
  cli: { agent_provider: 'kiro-cli' },
183
183
  env: { AOP_AGENT_CONFIG_JSON: JSON.stringify(agentConfig) },
184
- agentsConfig: {}
184
+ agentsConfig: {},
185
185
  });
186
186
  expect(selection.agent_config).toEqual(agentConfig);
187
187
  });
@@ -191,8 +191,8 @@ describe('provider selection', () => {
191
191
  resolveProviderSelection({
192
192
  cli: { agent_provider: 'kiro-cli' },
193
193
  env: { AOP_AGENT_CONFIG: JSON.stringify([1, 2, 3]) },
194
- agentsConfig: {}
195
- })
194
+ agentsConfig: {},
195
+ }),
196
196
  ).toThrow(ERROR_CODES.INVALID_CLI_ARGS);
197
197
  });
198
198
 
@@ -201,7 +201,7 @@ describe('provider selection', () => {
201
201
  const selection = resolveProviderSelection({
202
202
  cli: { agent_provider: 'kiro-cli' },
203
203
  env: {},
204
- agentsConfig: { runtime: { default_agent_config: defaultConfig } }
204
+ agentsConfig: { runtime: { default_agent_config: defaultConfig } },
205
205
  });
206
206
  expect(selection.agent_config).toEqual(defaultConfig);
207
207
  });
@@ -212,7 +212,7 @@ describe('NullWorkerProvider', () => {
212
212
  provider: 'custom' as const,
213
213
  model: 'test-model',
214
214
  provider_config_env: null,
215
- provider_config_ref: null
215
+ provider_config_ref: null,
216
216
  };
217
217
 
218
218
  it('GIVEN_system_prompt_WHEN_createSession_THEN_marks_prompt_loaded', async () => {
@@ -230,13 +230,13 @@ describe('NullWorkerProvider', () => {
230
230
  const output = await provider.runWorker({
231
231
  role: 'planner',
232
232
  feature_id: 'feature_two',
233
- context_bundle: { state: { front_matter: { status: 'building' } } }
233
+ context_bundle: { state: { front_matter: { status: 'building' } } },
234
234
  });
235
235
 
236
236
  expect(output).toMatchObject({
237
237
  type: 'NOTE',
238
238
  content: 'Planner session active for feature_two.',
239
- context_snapshot: { status: 'building' }
239
+ context_snapshot: { status: 'building' },
240
240
  });
241
241
  });
242
242
 
@@ -246,7 +246,7 @@ describe('NullWorkerProvider', () => {
246
246
 
247
247
  expect(output).toMatchObject({
248
248
  type: 'NOTE',
249
- content: 'qa session active for feature_three.'
249
+ content: 'qa session active for feature_three.',
250
250
  });
251
251
  });
252
252
 
@@ -254,13 +254,13 @@ describe('NullWorkerProvider', () => {
254
254
  const provider = new NullWorkerProvider(selection);
255
255
  const output = await provider.runWorker({
256
256
  role: 'planner',
257
- feature_id: 'feature_unknown'
257
+ feature_id: 'feature_unknown',
258
258
  });
259
259
 
260
260
  expect(output).toMatchObject({
261
261
  type: 'NOTE',
262
262
  content: 'Planner session active for feature_unknown.',
263
- context_snapshot: { status: 'unknown' }
263
+ context_snapshot: { status: 'unknown' },
264
264
  });
265
265
  });
266
266
 
@@ -269,13 +269,13 @@ describe('NullWorkerProvider', () => {
269
269
  const output = await provider.runWorker({
270
270
  role: 'planner',
271
271
  feature_id: 'feature_weird',
272
- context_bundle: { state: 'invalid' as unknown as Record<string, unknown> }
272
+ context_bundle: { state: 'invalid' as unknown as Record<string, unknown> },
273
273
  });
274
274
 
275
275
  expect(output).toMatchObject({
276
276
  type: 'NOTE',
277
277
  content: 'Planner session active for feature_weird.',
278
- context_snapshot: { status: 'unknown' }
278
+ context_snapshot: { status: 'unknown' },
279
279
  });
280
280
  });
281
281
 
@@ -286,16 +286,16 @@ describe('NullWorkerProvider', () => {
286
286
 
287
287
  it('GIVEN_codex_provider_WHEN_attachToSession_called_THEN_executes_interactive_attach_command', async () => {
288
288
  const runner = {
289
- run: vi.fn(async () => ({ exitCode: 0, signal: null }))
289
+ run: vi.fn(async () => ({ exitCode: 0, signal: null })),
290
290
  };
291
291
  const provider = new NullWorkerProvider(
292
292
  {
293
293
  provider: 'codex',
294
294
  model: 'codex-default',
295
295
  provider_config_env: null,
296
- provider_config_ref: null
296
+ provider_config_ref: null,
297
297
  },
298
- { commandRunner: runner }
298
+ { commandRunner: runner },
299
299
  );
300
300
 
301
301
  expect(provider.attachToSession).toBeTypeOf('function');
@@ -304,22 +304,22 @@ describe('NullWorkerProvider', () => {
304
304
  expect(runner.run).toHaveBeenCalledWith(
305
305
  'codex',
306
306
  ['chat', '--session', 'session-codex-1'],
307
- expect.objectContaining({ interactive: true })
307
+ expect.objectContaining({ interactive: true }),
308
308
  );
309
309
  });
310
310
 
311
311
  it('GIVEN_claude_provider_WHEN_sendMessage_called_THEN_executes_send_command_with_message_argument', async () => {
312
312
  const runner = {
313
- run: vi.fn(async () => ({ exitCode: 0, signal: null }))
313
+ run: vi.fn(async () => ({ exitCode: 0, signal: null })),
314
314
  };
315
315
  const provider = new NullWorkerProvider(
316
316
  {
317
317
  provider: 'claude',
318
318
  model: 'claude-default',
319
319
  provider_config_env: null,
320
- provider_config_ref: null
320
+ provider_config_ref: null,
321
321
  },
322
- { commandRunner: runner }
322
+ { commandRunner: runner },
323
323
  );
324
324
 
325
325
  expect(provider.sendMessage).toBeTypeOf('function');
@@ -328,7 +328,7 @@ describe('NullWorkerProvider', () => {
328
328
  expect(runner.run).toHaveBeenCalledWith(
329
329
  'claude-code',
330
330
  ['chat', '--session', 'session-claude-1', '--message', 'Please rerun the QA gate'],
331
- expect.objectContaining({ interactive: false })
331
+ expect.objectContaining({ interactive: false }),
332
332
  );
333
333
  });
334
334
 
@@ -337,7 +337,7 @@ describe('NullWorkerProvider', () => {
337
337
  provider: 'custom',
338
338
  model: 'custom-default',
339
339
  provider_config_env: null,
340
- provider_config_ref: null
340
+ provider_config_ref: null,
341
341
  });
342
342
 
343
343
  expect(provider.attachToSession).toBeUndefined();
@@ -346,7 +346,7 @@ describe('NullWorkerProvider', () => {
346
346
 
347
347
  it('GIVEN_custom_provider_with_agent_config_overrides_WHEN_attach_called_THEN_uses_overridden_command_template', async () => {
348
348
  const runner = {
349
- run: vi.fn(async () => ({ exitCode: 0, signal: null }))
349
+ run: vi.fn(async () => ({ exitCode: 0, signal: null })),
350
350
  };
351
351
  const provider = new NullWorkerProvider(
352
352
  {
@@ -356,17 +356,17 @@ describe('NullWorkerProvider', () => {
356
356
  provider_config_ref: null,
357
357
  agent_config: {
358
358
  attach_command: 'my-agent-cli',
359
- attach_args: ['open', '--session-id', '{session_id}']
360
- }
359
+ attach_args: ['open', '--session-id', '{session_id}'],
360
+ },
361
361
  },
362
- { commandRunner: runner }
362
+ { commandRunner: runner },
363
363
  );
364
364
 
365
365
  await provider.attachToSession?.('session-custom-1');
366
366
  expect(runner.run).toHaveBeenCalledWith(
367
367
  'my-agent-cli',
368
368
  ['open', '--session-id', 'session-custom-1'],
369
- expect.objectContaining({ interactive: true })
369
+ expect.objectContaining({ interactive: true }),
370
370
  );
371
371
  });
372
372
  });
@@ -374,47 +374,65 @@ describe('NullWorkerProvider', () => {
374
374
  describe('NullWorkerProvider executeCommand error branches', () => {
375
375
  it('GIVEN_command_exits_with_127_WHEN_executeCommand_called_THEN_throws_unsupported_agent_provider', async () => {
376
376
  const runner = {
377
- run: vi.fn(async () => ({ exitCode: 127, signal: null, errorCode: undefined }))
377
+ run: vi.fn(async () => ({ exitCode: 127, signal: null, errorCode: undefined })),
378
378
  };
379
379
  const provider = new NullWorkerProvider(
380
- { provider: 'claude', model: 'claude-default', provider_config_env: null, provider_config_ref: null },
381
- { commandRunner: runner }
380
+ {
381
+ provider: 'claude',
382
+ model: 'claude-default',
383
+ provider_config_env: null,
384
+ provider_config_ref: null,
385
+ },
386
+ { commandRunner: runner },
382
387
  );
383
388
  await expect(provider.sendMessage?.('session-1', 'hello')).rejects.toMatchObject({
384
- code: 'unsupported_agent_provider'
389
+ code: 'unsupported_agent_provider',
385
390
  });
386
391
  });
387
392
 
388
393
  it('GIVEN_command_exits_with_ENOENT_error_code_WHEN_executeCommand_called_THEN_throws_unsupported_agent_provider', async () => {
389
394
  const runner = {
390
- run: vi.fn(async () => ({ exitCode: 1, signal: null, errorCode: 'ENOENT' }))
395
+ run: vi.fn(async () => ({ exitCode: 1, signal: null, errorCode: 'ENOENT' })),
391
396
  };
392
397
  const provider = new NullWorkerProvider(
393
- { provider: 'claude', model: 'claude-default', provider_config_env: null, provider_config_ref: null },
394
- { commandRunner: runner }
398
+ {
399
+ provider: 'claude',
400
+ model: 'claude-default',
401
+ provider_config_env: null,
402
+ provider_config_ref: null,
403
+ },
404
+ { commandRunner: runner },
395
405
  );
396
406
  await expect(provider.sendMessage?.('session-1', 'hello')).rejects.toMatchObject({
397
- code: 'unsupported_agent_provider'
407
+ code: 'unsupported_agent_provider',
398
408
  });
399
409
  });
400
410
 
401
411
  it('GIVEN_command_exits_with_generic_nonzero_code_WHEN_executeCommand_called_THEN_throws_internal_error', async () => {
402
412
  const runner = {
403
- run: vi.fn(async () => ({ exitCode: 1, signal: null, errorCode: undefined }))
413
+ run: vi.fn(async () => ({ exitCode: 1, signal: null, errorCode: undefined })),
404
414
  };
405
415
  const provider = new NullWorkerProvider(
406
- { provider: 'claude', model: 'claude-default', provider_config_env: null, provider_config_ref: null },
407
- { commandRunner: runner }
416
+ {
417
+ provider: 'claude',
418
+ model: 'claude-default',
419
+ provider_config_env: null,
420
+ provider_config_ref: null,
421
+ },
422
+ { commandRunner: runner },
408
423
  );
409
424
  await expect(provider.sendMessage?.('session-1', 'hello')).rejects.toMatchObject({
410
- code: 'internal_error'
425
+ code: 'internal_error',
411
426
  });
412
427
  });
413
428
 
414
429
  it('GIVEN_provider_without_send_command_WHEN_executeCommand_invoked_THEN_would_throw_if_called', () => {
415
- const provider = new NullWorkerProvider(
416
- { provider: 'custom', model: 'custom-default', provider_config_env: null, provider_config_ref: null }
417
- );
430
+ const provider = new NullWorkerProvider({
431
+ provider: 'custom',
432
+ model: 'custom-default',
433
+ provider_config_env: null,
434
+ provider_config_ref: null,
435
+ });
418
436
  // sendMessage should be undefined for custom provider without agent_config
419
437
  expect(provider.sendMessage).toBeUndefined();
420
438
  });
@@ -423,7 +441,10 @@ describe('NullWorkerProvider executeCommand error branches', () => {
423
441
  describe('NullWorkerProvider additional coverage', () => {
424
442
  it('GIVEN_empty_sessionId_WHEN_reattachSession_called_THEN_returns_null', async () => {
425
443
  const provider = new NullWorkerProvider({
426
- provider: 'claude', model: 'claude-default', provider_config_env: null, provider_config_ref: null
444
+ provider: 'claude',
445
+ model: 'claude-default',
446
+ provider_config_env: null,
447
+ provider_config_ref: null,
427
448
  });
428
449
  const result = await provider.reattachSession('');
429
450
  expect(result).toBeNull();
@@ -431,7 +452,10 @@ describe('NullWorkerProvider additional coverage', () => {
431
452
 
432
453
  it('GIVEN_unknown_sessionId_WHEN_reattachSession_called_THEN_returns_null', async () => {
433
454
  const provider = new NullWorkerProvider({
434
- provider: 'claude', model: 'claude-default', provider_config_env: null, provider_config_ref: null
455
+ provider: 'claude',
456
+ model: 'claude-default',
457
+ provider_config_env: null,
458
+ provider_config_ref: null,
435
459
  });
436
460
  const result = await provider.reattachSession('unknown');
437
461
  expect(result).toBeNull();
@@ -439,7 +463,10 @@ describe('NullWorkerProvider additional coverage', () => {
439
463
 
440
464
  it('GIVEN_valid_sessionId_WHEN_reattachSession_called_THEN_returns_worker_session', async () => {
441
465
  const provider = new NullWorkerProvider({
442
- provider: 'claude', model: 'claude-default', provider_config_env: null, provider_config_ref: null
466
+ provider: 'claude',
467
+ model: 'claude-default',
468
+ provider_config_env: null,
469
+ provider_config_ref: null,
443
470
  });
444
471
  const result = await provider.reattachSession('session-abc-1');
445
472
  expect(result).toMatchObject({ session_id: 'session-abc-1', role: 'orchestrator' });
@@ -450,13 +477,16 @@ describe('NullWorkerProvider additional coverage', () => {
450
477
  const runner = { run: vi.fn() };
451
478
  const provider = new NullWorkerProvider(
452
479
  {
453
- provider: 'custom', model: 'custom', provider_config_env: null, provider_config_ref: null,
480
+ provider: 'custom',
481
+ model: 'custom',
482
+ provider_config_env: null,
483
+ provider_config_ref: null,
454
484
  agent_config: {
455
485
  send_command: 'my-cli',
456
- send_args: ['send', '--session', '{session_id}', '--msg', '{message}']
457
- }
486
+ send_args: ['send', '--session', '{session_id}', '--msg', '{message}'],
487
+ },
458
488
  },
459
- { commandRunner: runner }
489
+ { commandRunner: runner },
460
490
  );
461
491
  // attachToSession should be undefined (no attach_command in config)
462
492
  expect(provider.attachToSession).toBeUndefined();
@@ -471,10 +501,10 @@ describe('resolveConfiguredAgentConfig branches', () => {
471
501
  agentsConfig: {
472
502
  runtime: {
473
503
  provider_configs: {
474
- custom: { command: 'my-cli', args: ['--agent'] }
475
- }
476
- }
477
- }
504
+ custom: { command: 'my-cli', args: ['--agent'] },
505
+ },
506
+ },
507
+ },
478
508
  });
479
509
  expect(selection.agent_config).toMatchObject({ command: 'my-cli' });
480
510
  });
@@ -486,9 +516,9 @@ describe('resolveConfiguredAgentConfig branches', () => {
486
516
  agentsConfig: {
487
517
  runtime: {
488
518
  provider_configs: {},
489
- default_agent_config: { command: 'default-cli', args: [] }
490
- }
491
- }
519
+ default_agent_config: { command: 'default-cli', args: [] },
520
+ },
521
+ },
492
522
  });
493
523
  expect(selection.agent_config).toMatchObject({ command: 'default-cli' });
494
524
  });
@@ -498,8 +528,8 @@ describe('resolveConfiguredAgentConfig branches', () => {
498
528
  cli: { agent_provider: 'custom' },
499
529
  env: {},
500
530
  agentsConfig: {
501
- runtime: {}
502
- }
531
+ runtime: {},
532
+ },
503
533
  });
504
534
  expect(selection.agent_config).toBeNull();
505
535
  });
@@ -514,8 +544,8 @@ describe('NullWorkerProvider getSessionInfo branch', () => {
514
544
  provider_config_ref: null,
515
545
  agent_config: {
516
546
  attach_command: 'claude-code',
517
- attach_args: ['chat', '--session', '{session_id}']
518
- }
547
+ attach_args: ['chat', '--session', '{session_id}'],
548
+ },
519
549
  });
520
550
 
521
551
  expect(provider.getSessionInfo).toBeDefined();
@@ -532,8 +562,8 @@ describe('NullWorkerProvider getSessionInfo branch', () => {
532
562
  provider_config_ref: null,
533
563
  agent_config: {
534
564
  attach_command: 'claude-code',
535
- attach_args: ['chat', '--session', '{session_id}']
536
- }
565
+ attach_args: ['chat', '--session', '{session_id}'],
566
+ },
537
567
  });
538
568
 
539
569
  const info = await provider.getSessionInfo('unknown');
@@ -545,15 +575,16 @@ describe('NullWorkerProvider getSessionInfo branch', () => {
545
575
  provider: 'null',
546
576
  model: 'none',
547
577
  provider_config_env: null,
548
- provider_config_ref: null
578
+ provider_config_ref: null,
549
579
  });
550
580
 
551
581
  // Access executeCommand directly to cover the !template guard
552
582
  await expect(
553
- (provider as never as { executeCommand: (kind: string, sessionId: string) => Promise<void> })
554
- .executeCommand('attach', 'session-123')
583
+ (
584
+ provider as never as { executeCommand: (kind: string, sessionId: string) => Promise<void> }
585
+ ).executeCommand('attach', 'session-123'),
555
586
  ).rejects.toMatchObject({
556
- code: ERROR_CODES.UNSUPPORTED_AGENT_PROVIDER
587
+ code: ERROR_CODES.UNSUPPORTED_AGENT_PROVIDER,
557
588
  });
558
589
  });
559
590
  });