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,8 +8,8 @@ const specResolverResolveMock = vi.hoisted(() => vi.fn());
8
8
 
9
9
  vi.mock('node:fs/promises', () => ({
10
10
  default: {
11
- readFile: fsReadFileMock
12
- }
11
+ readFile: fsReadFileMock,
12
+ },
13
13
  }));
14
14
 
15
15
  vi.mock('../src/cli/spec-input-resolver.js', () => ({
@@ -17,12 +17,14 @@ vi.mock('../src/cli/spec-input-resolver.js', () => ({
17
17
  async resolve(...args: unknown[]) {
18
18
  return await specResolverResolveMock(...args);
19
19
  }
20
- }
20
+ },
21
21
  }));
22
22
 
23
23
  import { RunCommandHandler } from '../src/cli/run-command-handler.js';
24
24
 
25
- function makeContext(toolCallImpl = vi.fn(async () => ({ ok: true, data: {} }))): RunCommandContext {
25
+ function makeContext(
26
+ toolCallImpl = vi.fn(async () => ({ ok: true, data: {} })),
27
+ ): RunCommandContext {
26
28
  return {
27
29
  repoRoot: '/repo',
28
30
  env: {},
@@ -30,7 +32,7 @@ function makeContext(toolCallImpl = vi.fn(async () => ({ ok: true, data: {} })))
30
32
  transport: 'inprocess' as const,
31
33
  options: { command: 'run', batch: true, folder_input: '/specs' },
32
34
  kernel: { getAgentsConfig: () => ({}) } as never,
33
- toolClient: { call: toolCallImpl } as never
35
+ toolClient: { call: toolCallImpl } as never,
34
36
  };
35
37
  }
36
38
 
@@ -42,7 +44,7 @@ describe('BatchOperations', () => {
42
44
  it('GIVEN_folder_with_specs_WHEN_batch_run_all_new_THEN_all_created', async () => {
43
45
  specResolverResolveMock.mockResolvedValue([
44
46
  '/repo/.aop/features/feature_a/spec.md',
45
- '/repo/.aop/features/feature_b/spec.md'
47
+ '/repo/.aop/features/feature_b/spec.md',
46
48
  ]);
47
49
  fsReadFileMock.mockResolvedValue(JSON.stringify({ active: [], blocked: [] }));
48
50
 
@@ -52,24 +54,24 @@ describe('BatchOperations', () => {
52
54
 
53
55
  expect(result).toMatchObject({
54
56
  ok: true,
55
- data: { command: 'batch-run', created: 2, skipped: 0, failed: 0 }
57
+ data: { command: 'batch-run', created: 2, skipped: 0, failed: 0 },
56
58
  });
57
59
  expect(toolCallMock).toHaveBeenCalledWith(
58
60
  TOOLS.FEATURE_INIT,
59
61
  expect.objectContaining({ feature_id: 'feature_a' }),
60
- expect.any(Object)
62
+ expect.any(Object),
61
63
  );
62
64
  expect(toolCallMock).toHaveBeenCalledWith(
63
65
  TOOLS.FEATURE_INIT,
64
66
  expect.objectContaining({ feature_id: 'feature_b' }),
65
- expect.any(Object)
67
+ expect.any(Object),
66
68
  );
67
69
  });
68
70
 
69
71
  it('GIVEN_folder_with_specs_WHEN_batch_run_some_active_THEN_active_skipped', async () => {
70
72
  specResolverResolveMock.mockResolvedValue([
71
73
  '/repo/.aop/features/feature_a/spec.md',
72
- '/repo/.aop/features/feature_b/spec.md'
74
+ '/repo/.aop/features/feature_b/spec.md',
73
75
  ]);
74
76
  fsReadFileMock.mockResolvedValue(JSON.stringify({ active: ['feature_a'], blocked: [] }));
75
77
 
@@ -79,12 +81,12 @@ describe('BatchOperations', () => {
79
81
 
80
82
  expect(result).toMatchObject({
81
83
  ok: true,
82
- data: { command: 'batch-run', created: 1, skipped: 1, failed: 0 }
84
+ data: { command: 'batch-run', created: 1, skipped: 1, failed: 0 },
83
85
  });
84
86
  expect(toolCallMock).not.toHaveBeenCalledWith(
85
87
  TOOLS.FEATURE_INIT,
86
88
  expect.objectContaining({ feature_id: 'feature_a' }),
87
- expect.any(Object)
89
+ expect.any(Object),
88
90
  );
89
91
  });
90
92
 
@@ -94,9 +96,9 @@ describe('BatchOperations', () => {
94
96
  data: {
95
97
  features: [
96
98
  { feature_id: 'feature_a', status: 'planning' },
97
- { feature_id: 'feature_b', status: 'building' }
98
- ]
99
- }
99
+ { feature_id: 'feature_b', status: 'building' },
100
+ ],
101
+ },
100
102
  }));
101
103
  const handler = new StatusCommandHandler({ call: dashboardCall } as never, 'run:test');
102
104
  const result = await handler.execute({ summary: true });
@@ -106,9 +108,9 @@ describe('BatchOperations', () => {
106
108
  data: {
107
109
  summary: [
108
110
  { feature_id: 'feature_a', status: 'planning', activity: 'unknown' },
109
- { feature_id: 'feature_b', status: 'building', activity: 'unknown' }
110
- ]
111
- }
111
+ { feature_id: 'feature_b', status: 'building', activity: 'unknown' },
112
+ ],
113
+ },
112
114
  });
113
115
  });
114
116
  });
@@ -13,20 +13,32 @@ vi.mock('node:readline/promises', () => ({
13
13
  default: {
14
14
  createInterface: vi.fn(() => ({
15
15
  question: vi.fn(async () => ''),
16
- close: vi.fn()
17
- }))
18
- }
16
+ close: vi.fn(),
17
+ })),
18
+ },
19
19
  }));
20
20
 
21
21
  vi.mock('../src/core/kernel.js', () => {
22
22
  class AopKernel {
23
23
  private readonly repoRoot: string;
24
- constructor(repoRoot: string) { this.repoRoot = repoRoot; }
25
- async ensureLoaded() { await ensureLoadedMock(); }
26
- getRepoRoot() { return this.repoRoot; }
27
- getAgentsConfig() { return {}; }
28
- getRbacPolicy() { return {}; }
29
- getPolicySnapshot() { return {}; }
24
+ constructor(repoRoot: string) {
25
+ this.repoRoot = repoRoot;
26
+ }
27
+ async ensureLoaded() {
28
+ await ensureLoadedMock();
29
+ }
30
+ getRepoRoot() {
31
+ return this.repoRoot;
32
+ }
33
+ getAgentsConfig() {
34
+ return {};
35
+ }
36
+ getRbacPolicy() {
37
+ return {};
38
+ }
39
+ getPolicySnapshot() {
40
+ return {};
41
+ }
30
42
  setProvider() {}
31
43
  }
32
44
  return { AopKernel };
@@ -34,15 +46,25 @@ vi.mock('../src/core/kernel.js', () => {
34
46
 
35
47
  vi.mock('../src/mcp/runtime-factory.js', () => ({
36
48
  createToolingRuntime: createToolingRuntimeMock,
37
- resolveToolClient: resolveToolClientMock
49
+ resolveToolClient: resolveToolClientMock,
38
50
  }));
39
51
 
40
52
  vi.mock('../src/cli/init-command-handler.js', () => ({
41
53
  InitCommandHandler: class InitCommandHandler {
42
54
  async execute() {
43
- return { ok: true, data: { command: 'init', created: [], updated: [], skipped: [], validation_warnings: [], next_steps: [] } };
55
+ return {
56
+ ok: true,
57
+ data: {
58
+ command: 'init',
59
+ created: [],
60
+ updated: [],
61
+ skipped: [],
62
+ validation_warnings: [],
63
+ next_steps: [],
64
+ },
65
+ };
44
66
  }
45
- }
67
+ },
46
68
  }));
47
69
 
48
70
  vi.mock('../src/cli/dashboard-command-handler.js', () => ({
@@ -50,7 +72,7 @@ vi.mock('../src/cli/dashboard-command-handler.js', () => ({
50
72
  async execute() {
51
73
  return { ok: true, data: { message: 'started', port: 3000 } };
52
74
  }
53
- }
75
+ },
54
76
  }));
55
77
 
56
78
  vi.mock('../src/cli/run-command-handler.js', () => ({
@@ -58,7 +80,7 @@ vi.mock('../src/cli/run-command-handler.js', () => ({
58
80
  async execute() {
59
81
  return { ok: true, data: { status: 'running' } };
60
82
  }
61
- }
83
+ },
62
84
  }));
63
85
 
64
86
  vi.mock('../src/cli/resume-command-handler.js', () => ({
@@ -66,7 +88,7 @@ vi.mock('../src/cli/resume-command-handler.js', () => ({
66
88
  async execute() {
67
89
  return { ok: true, data: { resumed: false } };
68
90
  }
69
- }
91
+ },
70
92
  }));
71
93
 
72
94
  vi.mock('../src/cli/attach-command-handler.js', () => ({
@@ -74,10 +96,17 @@ vi.mock('../src/cli/attach-command-handler.js', () => ({
74
96
  async execute() {
75
97
  return {
76
98
  ok: true,
77
- data: { command: 'attach', feature_id: 'feat_x', status: 'building', role: 'builder', session_id: 'sess-1', attached: true }
99
+ data: {
100
+ command: 'attach',
101
+ feature_id: 'feat_x',
102
+ status: 'building',
103
+ role: 'builder',
104
+ session_id: 'sess-1',
105
+ attached: true,
106
+ },
78
107
  };
79
108
  }
80
- }
109
+ },
81
110
  }));
82
111
 
83
112
  describe('bootstrap runCli attach success path', () => {
@@ -100,12 +129,16 @@ describe('bootstrap runCli attach success path', () => {
100
129
  const { runCli } = await import('../src/interfaces/cli/bootstrap.js');
101
130
  const code = await runCli(['attach', '--feature-id', 'feat_x'], {
102
131
  cwd: '/tmp',
103
- env: { ...process.env, AOP_AGENT_PROVIDER: 'custom' }
132
+ env: { ...process.env, AOP_AGENT_PROVIDER: 'custom' },
104
133
  });
105
134
  // Attach handler mock returns successfully → printPayload → return 0
106
135
  expect(code).toBe(0);
107
136
  const writes = stdoutSpy.mock.calls.flatMap((call) => {
108
- try { return [JSON.parse(String(call[0]))]; } catch { return []; }
137
+ try {
138
+ return [JSON.parse(String(call[0]))];
139
+ } catch {
140
+ return [];
141
+ }
109
142
  });
110
143
  expect(writes[0]).toMatchObject({ ok: true, data: { command: 'attach' } });
111
144
  });
@@ -16,27 +16,29 @@ const toolCallMock = vi.hoisted(() => vi.fn(async () => ({ ok: true, data: {} })
16
16
 
17
17
  /** Allows per-test control of getPolicySnapshot return value */
18
18
  const policySnapshotOverride = vi.hoisted(() => ({
19
- value: {} as Record<string, unknown>
19
+ value: {} as Record<string, unknown>,
20
20
  }));
21
21
 
22
22
  /** Allows per-test control of whether ensureLoaded throws */
23
23
  const kernelThrowOverride = vi.hoisted(() => ({
24
- value: null as Error | null
24
+ value: null as Error | null,
25
25
  }));
26
26
 
27
27
  vi.mock('node:readline/promises', () => ({
28
28
  default: {
29
29
  createInterface: vi.fn(() => ({
30
30
  question: vi.fn(async () => ''),
31
- close: vi.fn()
32
- }))
33
- }
31
+ close: vi.fn(),
32
+ })),
33
+ },
34
34
  }));
35
35
 
36
36
  vi.mock('../src/core/kernel.js', () => {
37
37
  class AopKernel {
38
38
  private readonly repoRoot: string;
39
- constructor(repoRoot: string) { this.repoRoot = repoRoot; }
39
+ constructor(repoRoot: string) {
40
+ this.repoRoot = repoRoot;
41
+ }
40
42
 
41
43
  async ensureLoaded() {
42
44
  await ensureLoadedMock();
@@ -45,9 +47,15 @@ vi.mock('../src/core/kernel.js', () => {
45
47
  }
46
48
  }
47
49
 
48
- getRepoRoot() { return this.repoRoot; }
49
- getAgentsConfig() { return {}; }
50
- getRbacPolicy() { return {}; }
50
+ getRepoRoot() {
51
+ return this.repoRoot;
52
+ }
53
+ getAgentsConfig() {
54
+ return {};
55
+ }
56
+ getRbacPolicy() {
57
+ return {};
58
+ }
51
59
 
52
60
  getPolicySnapshot() {
53
61
  return policySnapshotOverride.value;
@@ -61,15 +69,25 @@ vi.mock('../src/core/kernel.js', () => {
61
69
 
62
70
  vi.mock('../src/mcp/runtime-factory.js', () => ({
63
71
  createToolingRuntime: createToolingRuntimeMock,
64
- resolveToolClient: resolveToolClientMock
72
+ resolveToolClient: resolveToolClientMock,
65
73
  }));
66
74
 
67
75
  vi.mock('../src/cli/init-command-handler.js', () => ({
68
76
  InitCommandHandler: class InitCommandHandler {
69
77
  async execute() {
70
- return { ok: true, data: { command: 'init', created: [], updated: [], skipped: [], validation_warnings: [], next_steps: [] } };
78
+ return {
79
+ ok: true,
80
+ data: {
81
+ command: 'init',
82
+ created: [],
83
+ updated: [],
84
+ skipped: [],
85
+ validation_warnings: [],
86
+ next_steps: [],
87
+ },
88
+ };
71
89
  }
72
- }
90
+ },
73
91
  }));
74
92
 
75
93
  vi.mock('../src/cli/dashboard-command-handler.js', () => ({
@@ -77,7 +95,7 @@ vi.mock('../src/cli/dashboard-command-handler.js', () => ({
77
95
  async execute() {
78
96
  return { ok: true, data: { message: 'started', port: 3000 } };
79
97
  }
80
- }
98
+ },
81
99
  }));
82
100
 
83
101
  vi.mock('../src/cli/run-command-handler.js', () => ({
@@ -85,7 +103,7 @@ vi.mock('../src/cli/run-command-handler.js', () => ({
85
103
  async execute() {
86
104
  return { ok: true, data: { status: 'running' } };
87
105
  }
88
- }
106
+ },
89
107
  }));
90
108
 
91
109
  vi.mock('../src/cli/resume-command-handler.js', () => ({
@@ -93,7 +111,7 @@ vi.mock('../src/cli/resume-command-handler.js', () => ({
93
111
  async execute() {
94
112
  return { ok: true, data: { resumed: false } };
95
113
  }
96
- }
114
+ },
97
115
  }));
98
116
 
99
117
  vi.mock('../src/cli/attach-command-handler.js', () => ({
@@ -101,22 +119,28 @@ vi.mock('../src/cli/attach-command-handler.js', () => ({
101
119
  async execute() {
102
120
  return { ok: true, data: { command: 'attach' } };
103
121
  }
104
- }
122
+ },
105
123
  }));
106
124
 
107
125
  // ── helpers ───────────────────────────────────────────────────────────────────
108
126
 
109
127
  async function writeMultiProjectYaml(dir: string, content: string): Promise<void> {
110
- const configDir = path.join(dir, 'agentic', 'orchestrator');
128
+ const configDir = path.join(dir, 'config', 'agentic', 'orchestrator');
111
129
  await fs.mkdir(configDir, { recursive: true });
112
130
  await fs.writeFile(path.join(configDir, 'multi-project.yaml'), content, 'utf8');
113
131
  }
114
132
 
115
133
  async function writeSchemaFile(dir: string): Promise<void> {
116
- const schemasDir = path.join(dir, 'agentic', 'orchestrator', 'schemas');
134
+ const schemasDir = path.join(dir, 'config', 'agentic', 'orchestrator', 'schemas');
117
135
  await fs.mkdir(schemasDir, { recursive: true });
118
136
  const repoRoot = path.resolve(import.meta.dirname, '../../../');
119
- const srcSchema = path.join(repoRoot, 'agentic', 'orchestrator', 'schemas', 'multi-project.schema.json');
137
+ const srcSchema = path.join(
138
+ repoRoot,
139
+ 'agentic',
140
+ 'orchestrator',
141
+ 'schemas',
142
+ 'multi-project.schema.json',
143
+ );
120
144
  const destSchema = path.join(schemasDir, 'multi-project.schema.json');
121
145
  await fs.copyFile(srcSchema, destSchema);
122
146
  }
@@ -150,7 +174,7 @@ describe('bootstrap edge-case branch coverage', () => {
150
174
  await fs.mkdir(proj1sub, { recursive: true });
151
175
  await writeMultiProjectYaml(
152
176
  tmpDir,
153
- `version: "1.0"\nprojects:\n - name: proj1\n path: ${proj1}\n`
177
+ `version: "1.0"\nprojects:\n - name: proj1\n path: ${proj1}\n`,
154
178
  );
155
179
 
156
180
  const { runCli } = await import('../src/interfaces/cli/bootstrap.js');
@@ -167,7 +191,7 @@ describe('bootstrap edge-case branch coverage', () => {
167
191
  await fs.mkdir(other, { recursive: true });
168
192
  await writeMultiProjectYaml(
169
193
  tmpDir,
170
- `version: "1.0"\nprojects:\n - name: proj1\n path: ${proj1}\ndefaults:\n default_project: proj1\n`
194
+ `version: "1.0"\nprojects:\n - name: proj1\n path: ${proj1}\ndefaults:\n default_project: proj1\n`,
171
195
  );
172
196
 
173
197
  const { runCli } = await import('../src/interfaces/cli/bootstrap.js');
@@ -179,7 +203,7 @@ describe('bootstrap edge-case branch coverage', () => {
179
203
  it('GIVEN_cleanup_with_policy_having_grace_period_and_auto_after_merge_WHEN_cleanup_THEN_uses_policy_values', async () => {
180
204
  // Covers lines 291 and 292: cleanup?.grace_period_seconds non-null and auto_after_merge=true
181
205
  policySnapshotOverride.value = {
182
- cleanup: { grace_period_seconds: 120, auto_after_merge: true }
206
+ cleanup: { grace_period_seconds: 120, auto_after_merge: true },
183
207
  };
184
208
  toolCallMock.mockResolvedValue({ ok: true, data: { cleaned: [], would_clean: [] } });
185
209
 
@@ -205,12 +229,15 @@ describe('bootstrap edge-case branch coverage', () => {
205
229
  await fs.mkdir(proj1, { recursive: true });
206
230
  await writeMultiProjectYaml(
207
231
  tmpDir,
208
- `version: "1.0"\nprojects:\n - name: proj1\n path: ${proj1}\ndefaults:\n max_active_features: 5\n max_parallel_gate_runs: 2\n`
232
+ `version: "1.0"\nprojects:\n - name: proj1\n path: ${proj1}\ndefaults:\n max_active_features: 5\n max_parallel_gate_runs: 2\n`,
209
233
  );
210
234
  toolCallMock.mockResolvedValue({ ok: true, data: { status: 'running' } });
211
235
 
212
236
  const { runCli } = await import('../src/interfaces/cli/bootstrap.js');
213
- const code = await runCli(['run', '--feature-id', 'feat_test'], { cwd: tmpDir, env: process.env });
237
+ const code = await runCli(['run', '--feature-id', 'feat_test'], {
238
+ cwd: tmpDir,
239
+ env: process.env,
240
+ });
214
241
  expect(code).toBe(0);
215
242
  });
216
243
 
@@ -220,7 +247,7 @@ describe('bootstrap edge-case branch coverage', () => {
220
247
  await fs.mkdir(proj1, { recursive: true });
221
248
  await writeMultiProjectYaml(
222
249
  tmpDir,
223
- `version: "1.0"\nprojects:\n - name: proj1\n path: ${proj1}\n dashboard_port: 4000\n`
250
+ `version: "1.0"\nprojects:\n - name: proj1\n path: ${proj1}\n dashboard_port: 4000\n`,
224
251
  );
225
252
 
226
253
  const { runCli } = await import('../src/interfaces/cli/bootstrap.js');
@@ -237,7 +264,7 @@ describe('bootstrap edge-case branch coverage', () => {
237
264
  await fs.mkdir(proj2, { recursive: true });
238
265
  await writeMultiProjectYaml(
239
266
  tmpDir,
240
- `version: "1.0"\nprojects:\n - name: proj1\n path: ${proj1}\n - name: proj2\n path: ${proj2}\n`
267
+ `version: "1.0"\nprojects:\n - name: proj1\n path: ${proj1}\n - name: proj2\n path: ${proj2}\n`,
241
268
  );
242
269
 
243
270
  // proj2 will throw an error without .code property
@@ -255,7 +282,11 @@ describe('bootstrap edge-case branch coverage', () => {
255
282
  const code = await runCli(['status', '--all'], { cwd: tmpDir, env: process.env });
256
283
  expect(code).toBe(0);
257
284
  const writes = stdoutSpy.mock.calls.flatMap((call) => {
258
- try { return [JSON.parse(String(call[0]))]; } catch { return []; }
285
+ try {
286
+ return [JSON.parse(String(call[0]))];
287
+ } catch {
288
+ return [];
289
+ }
259
290
  });
260
291
  expect(writes.some((w) => w.ok === true)).toBe(true);
261
292
  });