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
@@ -60,7 +60,7 @@ export class DiffParser {
60
60
  oldPath,
61
61
  newPath,
62
62
  changeType: 'modify',
63
- hunks: []
63
+ hunks: [],
64
64
  };
65
65
  continue;
66
66
  }
@@ -114,11 +114,15 @@ export class DiffParser {
114
114
  const newStart = Number(hunkMatch[3]);
115
115
  const newCount = Number(hunkMatch[4] ?? 1);
116
116
  const changeType: DiffChangeType =
117
- current.changeType === 'delete' ? 'delete' : current.changeType === 'add' ? 'add' : 'modify';
117
+ current.changeType === 'delete'
118
+ ? 'delete'
119
+ : current.changeType === 'add'
120
+ ? 'add'
121
+ : 'modify';
118
122
  current.hunks.push({
119
123
  start_line: changeType === 'delete' ? oldStart : newStart,
120
124
  end_line: changeType === 'delete' ? oldStart + oldCount - 1 : newStart + newCount - 1,
121
- change_type: changeType
125
+ change_type: changeType,
122
126
  });
123
127
  }
124
128
  }
@@ -10,6 +10,10 @@ export class AopPathLayout {
10
10
  }
11
11
 
12
12
  get orchestratorRoot(): string {
13
+ return path.join(this.repoRoot, 'config', 'agentic', 'orchestrator');
14
+ }
15
+
16
+ get legacyOrchestratorRoot(): string {
13
17
  return path.join(this.repoRoot, 'agentic', 'orchestrator');
14
18
  }
15
19
 
@@ -98,7 +102,7 @@ async function copyLegacyRuntimeTree(sourcePath: string, targetPath: string): Pr
98
102
  await fs.cp(sourcePath, targetPath, {
99
103
  recursive: true,
100
104
  force: false,
101
- errorOnExist: false
105
+ errorOnExist: false,
102
106
  });
103
107
  }
104
108
 
@@ -7,8 +7,14 @@ function normalizeSeparators(value: string): string {
7
7
  }
8
8
 
9
9
  export class RepoPathNormalizer {
10
- async normalize(repoRoot: string, candidatePath: string, allowSymlinkTraversal = false): Promise<string> {
11
- const absoluteInput = path.isAbsolute(candidatePath) ? candidatePath : path.resolve(repoRoot, candidatePath);
10
+ async normalize(
11
+ repoRoot: string,
12
+ candidatePath: string,
13
+ allowSymlinkTraversal = false,
14
+ ): Promise<string> {
15
+ const absoluteInput = path.isAbsolute(candidatePath)
16
+ ? candidatePath
17
+ : path.resolve(repoRoot, candidatePath);
12
18
 
13
19
  const realPath = await fs.realpath(absoluteInput).catch(() => absoluteInput);
14
20
  if (!allowSymlinkTraversal && !realPath.startsWith(repoRoot)) {
@@ -53,16 +59,24 @@ export const areaMatchingPolicy = new AreaMatchingPolicy();
53
59
  export async function normalizeRepoPath(
54
60
  repoRoot: string,
55
61
  candidatePath: string,
56
- allowSymlinkTraversal = false
62
+ allowSymlinkTraversal = false,
57
63
  ): Promise<string> {
58
64
  return await repoPathNormalizer.normalize(repoRoot, candidatePath, allowSymlinkTraversal);
59
65
  }
60
66
 
61
- export function areaMatches(repoRelativePath: string, area: string, matchingMode = 'repo_prefix'): boolean {
67
+ export function areaMatches(
68
+ repoRelativePath: string,
69
+ area: string,
70
+ matchingMode = 'repo_prefix',
71
+ ): boolean {
62
72
  return areaMatchingPolicy.areaMatches(repoRelativePath, area, matchingMode);
63
73
  }
64
74
 
65
- export function anyAreaMatch(repoRelativePath: string, areas: string[], matchingMode = 'repo_prefix'): boolean {
75
+ export function anyAreaMatch(
76
+ repoRelativePath: string,
77
+ areas: string[],
78
+ matchingMode = 'repo_prefix',
79
+ ): boolean {
66
80
  return areaMatchingPolicy.anyAreaMatch(repoRelativePath, areas, matchingMode);
67
81
  }
68
82
 
@@ -30,7 +30,10 @@ export class QaIndexDomainService {
30
30
  return `${filePath}:${hunk.start_line}:${hunk.end_line}:${hunk.change_type}`;
31
31
  }
32
32
 
33
- makeRequiredTests(gateProfile: string, profile: { modes?: Record<string, Array<{ name: string }>> }): string[] {
33
+ makeRequiredTests(
34
+ gateProfile: string,
35
+ profile: { modes?: Record<string, Array<{ name: string }>> },
36
+ ): string[] {
34
37
  const required: string[] = [];
35
38
  for (const [mode, steps] of Object.entries(profile.modes ?? {})) {
36
39
  for (const step of steps) {
@@ -44,7 +47,7 @@ export class QaIndexDomainService {
44
47
  featureId: string,
45
48
  parsedDiffFiles: ParsedDiffFile[],
46
49
  requiredTests: string[],
47
- previousIndex: QaIndex | null = null
50
+ previousIndex: QaIndex | null = null,
48
51
  ): QaIndex {
49
52
  const previousItemsByKey = new Map<string, QaIndexItem>();
50
53
  for (const item of previousIndex?.items ?? []) {
@@ -71,7 +74,7 @@ export class QaIndexDomainService {
71
74
  required_tests: requiredTests,
72
75
  status: existing?.status ?? 'pending',
73
76
  last_run_at: existing?.last_run_at,
74
- evidence_refs: existing?.evidence_refs ?? []
77
+ evidence_refs: existing?.evidence_refs ?? [],
75
78
  });
76
79
  }
77
80
 
@@ -81,7 +84,7 @@ export class QaIndexDomainService {
81
84
  feature_id: featureId,
82
85
  version: Number(previousIndex?.version ?? 0) + 1,
83
86
  source_diff_ref: sourceDiffRef,
84
- items
87
+ items,
85
88
  };
86
89
  }
87
90
 
@@ -94,10 +97,13 @@ export class QaIndexDomainService {
94
97
  running: 0,
95
98
  passed: 0,
96
99
  failed: 0,
97
- waived: 0
100
+ waived: 0,
98
101
  };
99
102
 
100
- const pendingByFile: Record<string, Array<{ hunks: DiffHunk[]; required_tests: string[] }>> = {};
103
+ const pendingByFile: Record<
104
+ string,
105
+ Array<{ hunks: DiffHunk[]; required_tests: string[] }>
106
+ > = {};
101
107
 
102
108
  for (const item of index.items ?? []) {
103
109
  summary[item.status] = (summary[item.status] ?? 0) + 1;
@@ -105,7 +111,7 @@ export class QaIndexDomainService {
105
111
  pendingByFile[item.path] = pendingByFile[item.path] ?? [];
106
112
  pendingByFile[item.path].push({
107
113
  hunks: item.hunks,
108
- required_tests: item.required_tests
114
+ required_tests: item.required_tests,
109
115
  });
110
116
  }
111
117
  }
@@ -113,7 +119,12 @@ export class QaIndexDomainService {
113
119
  return { summary, pending_by_file: pendingByFile };
114
120
  }
115
121
 
116
- applyUpdates(index: QaIndex, expectedVersion: number, updates: QaUpdate[], evidenceRefs: string[] = []): QaIndex {
122
+ applyUpdates(
123
+ index: QaIndex,
124
+ expectedVersion: number,
125
+ updates: QaUpdate[],
126
+ evidenceRefs: string[] = [],
127
+ ): QaIndex {
117
128
  if (index.version !== expectedVersion) {
118
129
  throw new Error('qa_index_version_conflict');
119
130
  }
@@ -142,14 +153,17 @@ export class QaIndexDomainService {
142
153
 
143
154
  return {
144
155
  ...index,
145
- version: index.version + 1
156
+ version: index.version + 1,
146
157
  };
147
158
  }
148
159
  }
149
160
 
150
161
  export const qaIndexDomainService = new QaIndexDomainService();
151
162
 
152
- export function makeRequiredTests(gateProfile: string, profile: { modes?: Record<string, Array<{ name: string }>> }): string[] {
163
+ export function makeRequiredTests(
164
+ gateProfile: string,
165
+ profile: { modes?: Record<string, Array<{ name: string }>> },
166
+ ): string[] {
153
167
  return qaIndexDomainService.makeRequiredTests(gateProfile, profile);
154
168
  }
155
169
 
@@ -157,7 +171,7 @@ export function buildQaIndex(
157
171
  featureId: string,
158
172
  parsedDiffFiles: ParsedDiffFile[],
159
173
  requiredTests: string[],
160
- previousIndex: QaIndex | null = null
174
+ previousIndex: QaIndex | null = null,
161
175
  ): QaIndex {
162
176
  return qaIndexDomainService.buildIndex(featureId, parsedDiffFiles, requiredTests, previousIndex);
163
177
  }
@@ -173,7 +187,7 @@ export function applyQaUpdates(
173
187
  index: QaIndex,
174
188
  expectedVersion: number,
175
189
  updates: QaUpdate[],
176
- evidenceRefs: string[] = []
190
+ evidenceRefs: string[] = [],
177
191
  ): QaIndex {
178
192
  return qaIndexDomainService.applyUpdates(index, expectedVersion, updates, evidenceRefs);
179
193
  }
@@ -18,7 +18,10 @@ export interface FailResponse {
18
18
 
19
19
  export type ToolResponse<T = Record<string, unknown>> = OkResponse<T> | FailResponse;
20
20
 
21
- export function ok<T = Record<string, unknown>>(data: T = {} as T, evidence?: Record<string, unknown>): OkResponse<T> {
21
+ export function ok<T = Record<string, unknown>>(
22
+ data: T = {} as T,
23
+ evidence?: Record<string, unknown>,
24
+ ): OkResponse<T> {
22
25
  const response: OkResponse<T> = { ok: true, data };
23
26
  if (evidence) {
24
27
  response.evidence = evidence;
@@ -30,7 +33,7 @@ export function fail(
30
33
  code: string,
31
34
  message: string,
32
35
  details: Record<string, unknown> = {},
33
- evidence?: Record<string, unknown>
36
+ evidence?: Record<string, unknown>,
34
37
  ): FailResponse {
35
38
  const normalizedCode = (Object.values(ERROR_CODES) as string[]).includes(code)
36
39
  ? (code as ErrorCode)
@@ -40,8 +43,8 @@ export function fail(
40
43
  error: {
41
44
  code: normalizedCode,
42
45
  message,
43
- details
44
- }
46
+ details,
47
+ },
45
48
  };
46
49
  if (evidence) {
47
50
  response.evidence = evidence;
@@ -51,12 +54,12 @@ export function fail(
51
54
 
52
55
  export function withSuggestedActions(
53
56
  details: Record<string, unknown>,
54
- actions: string[] = []
57
+ actions: string[] = [],
55
58
  ): Record<string, unknown> {
56
59
  return {
57
60
  ...details,
58
61
  retryable: (details.retryable as boolean | undefined) ?? false,
59
62
  requires_human: (details.requires_human as boolean | undefined) ?? false,
60
- suggested_next_actions: actions
63
+ suggested_next_actions: actions,
61
64
  };
62
65
  }
@@ -26,7 +26,7 @@ type AjvLike = {
26
26
  | {
27
27
  type?: string;
28
28
  validate: (value: string) => boolean;
29
- }
29
+ },
30
30
  ) => AjvLike;
31
31
  };
32
32
 
@@ -38,7 +38,13 @@ function resolveBundledSchemaRoot(startDir: string): string | null {
38
38
  let current = path.resolve(startDir);
39
39
 
40
40
  while (true) {
41
- const candidate = path.join(current, 'agentic', 'orchestrator', 'schemas', 'policy.schema.json');
41
+ const candidate = path.join(
42
+ current,
43
+ 'agentic',
44
+ 'orchestrator',
45
+ 'schemas',
46
+ 'policy.schema.json',
47
+ );
42
48
  if (fsSync.existsSync(candidate)) {
43
49
  return path.dirname(candidate);
44
50
  }
@@ -101,24 +107,37 @@ export class SchemaRegistry implements SchemaValidator {
101
107
  constructor(repoRoot: string) {
102
108
  this.repoRoot = repoRoot;
103
109
  this.schemaRoot = this.resolveSchemaRoot();
104
- const Ajv2020Ctor = Ajv2020Import as unknown as new (options?: Record<string, unknown>) => AjvLike;
110
+ const Ajv2020Ctor = Ajv2020Import as unknown as new (
111
+ options?: Record<string, unknown>,
112
+ ) => AjvLike;
105
113
  this.ajv = new Ajv2020Ctor({ allErrors: true, strict: false });
106
114
  this.ajv.addFormat?.('date-time', {
107
115
  type: 'string',
108
- validate: isStrictRfc3339DateTime
116
+ validate: isStrictRfc3339DateTime,
109
117
  });
110
118
  this.validators = new Map();
111
119
  }
112
120
 
113
121
  private resolveSchemaRoot(): string {
114
- const repoSchemaRoot = path.join(this.repoRoot, 'agentic', 'orchestrator', 'schemas');
115
- if (fsSync.existsSync(path.join(repoSchemaRoot, 'policy.schema.json'))) {
116
- return repoSchemaRoot;
122
+ const primaryRepoSchemaRoot = path.join(
123
+ this.repoRoot,
124
+ 'config',
125
+ 'agentic',
126
+ 'orchestrator',
127
+ 'schemas',
128
+ );
129
+ if (fsSync.existsSync(path.join(primaryRepoSchemaRoot, 'policy.schema.json'))) {
130
+ return primaryRepoSchemaRoot;
131
+ }
132
+
133
+ const legacyRepoSchemaRoot = path.join(this.repoRoot, 'agentic', 'orchestrator', 'schemas');
134
+ if (fsSync.existsSync(path.join(legacyRepoSchemaRoot, 'policy.schema.json'))) {
135
+ return legacyRepoSchemaRoot;
117
136
  }
118
137
  if (BUNDLED_SCHEMA_ROOT) {
119
138
  return BUNDLED_SCHEMA_ROOT;
120
139
  }
121
- return repoSchemaRoot;
140
+ return primaryRepoSchemaRoot;
122
141
  }
123
142
 
124
143
  schemaPath(name: SchemaId): string {
@@ -139,7 +158,7 @@ export class SchemaRegistry implements SchemaValidator {
139
158
  const valid = validator(payload);
140
159
  return {
141
160
  valid: Boolean(valid),
142
- errors: valid ? [] : ((validator.errors ?? []))
161
+ errors: valid ? [] : (validator.errors ?? []),
143
162
  };
144
163
  }
145
164
  }
@@ -152,7 +171,7 @@ export async function loadYamlFile<T = unknown>(filePath: string): Promise<T> {
152
171
  export async function loadAndValidateYaml<T = unknown>(
153
172
  schemaRegistry: SchemaValidator,
154
173
  schemaName: SchemaId,
155
- yamlPath: string
174
+ yamlPath: string,
156
175
  ): Promise<{ parsed: T; validation: ValidationResult }> {
157
176
  const parsed = await loadYamlFile<T>(yamlPath);
158
177
  const validation = await schemaRegistry.validate(schemaName, parsed);
@@ -4,7 +4,7 @@ export interface ToolCaller {
4
4
  callTool<TData = Record<string, unknown>>(
5
5
  role: RuntimeRole,
6
6
  toolName: string,
7
- args: Record<string, unknown>
7
+ args: Record<string, unknown>,
8
8
  ): Promise<{ ok: true; data: TData }>;
9
9
  }
10
10
 
@@ -29,7 +29,7 @@ export async function applyWorktreeSymlinks(
29
29
  repoRoot: string,
30
30
  worktreePath: string,
31
31
  symlinks: string[],
32
- onWarning?: (warning: WorkspaceHookWarning) => void
32
+ onWarning?: (warning: WorkspaceHookWarning) => void,
33
33
  ): Promise<void> {
34
34
  for (const link of symlinks) {
35
35
  const src = path.join(repoRoot, link);
@@ -41,7 +41,7 @@ export async function applyWorktreeSymlinks(
41
41
  onWarning?.({
42
42
  kind: 'symlink',
43
43
  target: link,
44
- message: error instanceof Error ? error.message : String(error)
44
+ message: error instanceof Error ? error.message : String(error),
45
45
  });
46
46
  }
47
47
  }
@@ -55,7 +55,7 @@ export async function applyWorktreeSymlinks(
55
55
  export async function runWorktreePostCreate(
56
56
  worktreePath: string,
57
57
  commands: string[],
58
- onWarning?: (warning: WorkspaceHookWarning) => void
58
+ onWarning?: (warning: WorkspaceHookWarning) => void,
59
59
  ): Promise<void> {
60
60
  for (const cmd of commands) {
61
61
  const parts = cmd.trim().split(/\s+/);
@@ -72,7 +72,7 @@ export async function runWorktreePostCreate(
72
72
  command: cmd,
73
73
  message: 'command exited with non-zero status',
74
74
  code: result.code,
75
- stderr: result.stderr
75
+ stderr: result.stderr,
76
76
  });
77
77
  }
78
78
  } catch (error) {
@@ -80,7 +80,7 @@ export async function runWorktreePostCreate(
80
80
  kind: 'post_create',
81
81
  target: cmd,
82
82
  command: cmd,
83
- message: error instanceof Error ? error.message : String(error)
83
+ message: error instanceof Error ? error.message : String(error),
84
84
  });
85
85
  }
86
86
  }
@@ -1,21 +1,15 @@
1
1
  export { AopKernel } from './core/kernel.js';
2
2
  export type { AgentsConfigSnapshot } from './core/kernel.js';
3
3
  export { SupervisorRuntime } from './supervisor/runtime.js';
4
- export {
5
- resolveProviderSelection,
6
- NullWorkerProvider
7
- } from './providers/providers.js';
4
+ export { resolveProviderSelection, NullWorkerProvider } from './providers/providers.js';
8
5
  export type { WorkerProvider, ProviderSelectionResolver } from './providers/providers.js';
9
6
  export { createToolingRuntime, resolveToolClient } from './mcp/runtime-factory.js';
10
- export type {
11
- ToolingKernelPort,
12
- CreateToolingRuntimeOptions
13
- } from './mcp/runtime-factory.js';
7
+ export type { ToolingKernelPort, CreateToolingRuntimeOptions } from './mcp/runtime-factory.js';
14
8
  export { InProcessToolClient, McpToolClient, createOperationId } from './mcp/tool-client.js';
15
9
  export { TokenAuthVerifier } from './mcp/token-auth-verifier.js';
16
10
  export { McpServerAdapter } from './mcp/mcp-server-adapter.js';
17
11
  export {
18
12
  TOOL_BEHAVIOR_METADATA,
19
13
  isMutatingTool,
20
- toolRequiresOperationId
14
+ toolRequiresOperationId,
21
15
  } from './application/tools/tool-metadata.js';
@@ -2,7 +2,10 @@ import crypto from 'node:crypto';
2
2
  import path from 'node:path';
3
3
  import readline from 'node:readline/promises';
4
4
  import { AopKernel } from '../../core/kernel.js';
5
- import { computeInstanceId, defaultConfigPath } from '../../application/services/instance-isolation-service.js';
5
+ import {
6
+ computeInstanceId,
7
+ defaultConfigPath,
8
+ } from '../../application/services/instance-isolation-service.js';
6
9
  import { ERROR_CODES } from '../../core/error-codes.js';
7
10
  import type { AppError } from '../../providers/providers.js';
8
11
  import { createToolingRuntime, resolveToolClient } from '../../mcp/runtime-factory.js';
@@ -50,7 +53,7 @@ async function promptForProjectSelection(projects: ProjectConfig[]): Promise<str
50
53
  }
51
54
  const rl = readline.createInterface({
52
55
  input: process.stdin,
53
- output: process.stdout
56
+ output: process.stdout,
54
57
  });
55
58
  try {
56
59
  const answer = await rl.question('Project number: ');
@@ -66,7 +69,7 @@ async function promptForProjectSelection(projects: ProjectConfig[]): Promise<str
66
69
 
67
70
  export async function runCli(
68
71
  argv: string[] = process.argv.slice(2),
69
- runtime: RuntimeContext = { cwd: process.cwd(), env: process.env }
72
+ runtime: RuntimeContext = { cwd: process.cwd(), env: process.env },
70
73
  ): Promise<number> {
71
74
  const parser = new CliArgumentParser();
72
75
  const options = parser.parse(argv);
@@ -80,16 +83,20 @@ export async function runCli(
80
83
 
81
84
  if (options.project) {
82
85
  if (!multiConfig) {
83
- printError(ERROR_CODES.INVALID_CLI_ARGS, 'No multi-project.yaml found; cannot use --project', {
84
- project: options.project
85
- });
86
+ printError(
87
+ ERROR_CODES.INVALID_CLI_ARGS,
88
+ 'No multi-project.yaml found; cannot use --project',
89
+ {
90
+ project: options.project,
91
+ },
92
+ );
86
93
  return 1;
87
94
  }
88
95
  selectedProject = multiLoader.getProject(multiConfig, options.project);
89
96
  if (!selectedProject) {
90
97
  printError(ERROR_CODES.INVALID_CLI_ARGS, `Project not found: ${options.project}`, {
91
98
  project: options.project,
92
- available: multiConfig.projects.map((p) => p.name)
99
+ available: multiConfig.projects.map((p) => p.name),
93
100
  });
94
101
  return 1;
95
102
  }
@@ -116,22 +123,30 @@ export async function runCli(
116
123
  const selectedName = await promptForProjectSelection(multiConfig.projects);
117
124
  if (!selectedName) {
118
125
  printError(ERROR_CODES.INVALID_CLI_ARGS, 'Invalid project selection', {
119
- available_projects: multiConfig.projects.map((p) => p.name)
126
+ available_projects: multiConfig.projects.map((p) => p.name),
120
127
  });
121
128
  return 1;
122
129
  }
123
130
  selectedProject = multiLoader.getProject(multiConfig, selectedName);
124
131
  if (!selectedProject) {
125
- printError(ERROR_CODES.INVALID_CLI_ARGS, 'Selected project was not found in configuration', {
126
- selected_project: selectedName
127
- });
132
+ printError(
133
+ ERROR_CODES.INVALID_CLI_ARGS,
134
+ 'Selected project was not found in configuration',
135
+ {
136
+ selected_project: selectedName,
137
+ },
138
+ );
128
139
  return 1;
129
140
  }
130
141
  repoRoot = selectedProject.path;
131
142
  } else {
132
- printError(ERROR_CODES.INVALID_CLI_ARGS, 'Multiple projects configured; --project is required', {
133
- available_projects: multiConfig.projects.map((p) => p.name)
134
- });
143
+ printError(
144
+ ERROR_CODES.INVALID_CLI_ARGS,
145
+ 'Multiple projects configured; --project is required',
146
+ {
147
+ available_projects: multiConfig.projects.map((p) => p.name),
148
+ },
149
+ );
135
150
  return 1;
136
151
  }
137
152
  }
@@ -141,7 +156,7 @@ export async function runCli(
141
156
  try {
142
157
  if (!SUPPORTED_COMMANDS.has(options.command)) {
143
158
  printError(ERROR_CODES.INVALID_CLI_ARGS, `Unknown command: ${options.command}`, {
144
- command: options.command
159
+ command: options.command,
145
160
  });
146
161
  return 1;
147
162
  }
@@ -157,18 +172,23 @@ export async function runCli(
157
172
 
158
173
  if (options.command === CliCommand.Init) {
159
174
  const handler = new InitCommandHandler(repoRoot);
160
- const payload = await handler.execute({ auto: options.auto, force: options.force, advanced_policy: options.advanced_policy });
175
+ const payload = await handler.execute({
176
+ auto: options.auto,
177
+ force: options.force,
178
+ advanced_policy: options.advanced_policy,
179
+ });
161
180
  printPayload(payload);
162
181
  return 0;
163
182
  }
164
183
 
165
184
  if (options.command === CliCommand.Dashboard) {
166
185
  const handler = new DashboardCommandHandler();
167
- const defaultDashboardPort = selectedProject?.dashboard_port ?? multiConfig?.defaults?.dashboard_port;
186
+ const defaultDashboardPort =
187
+ selectedProject?.dashboard_port ?? multiConfig?.defaults?.dashboard_port;
168
188
  const payload = await handler.execute({
169
189
  port: options.port ?? defaultDashboardPort,
170
190
  foreground: options.foreground,
171
- dev: options.dev
191
+ dev: options.dev,
172
192
  });
173
193
  printPayload(payload);
174
194
  return 0;
@@ -187,10 +207,14 @@ export async function runCli(
187
207
  try {
188
208
  const projectPolicyPath = multiLoader.resolveProjectPolicyPath(multiConfig, project);
189
209
  const projectGatesPath = multiLoader.resolveProjectGatesPath(multiConfig, project);
190
- const projectKernel = new AopKernel(project.path, computeInstanceId(defaultConfigPath(project.path)), {
191
- policyPath: projectPolicyPath,
192
- gatesPath: projectGatesPath
193
- });
210
+ const projectKernel = new AopKernel(
211
+ project.path,
212
+ computeInstanceId(defaultConfigPath(project.path)),
213
+ {
214
+ policyPath: projectPolicyPath,
215
+ gatesPath: projectGatesPath,
216
+ },
217
+ );
194
218
  await projectKernel.ensureLoaded();
195
219
  const projectTooling = await createToolingRuntime(project.path, projectKernel);
196
220
  const projectToolClient = resolveToolClient(transport, projectTooling);
@@ -202,7 +226,10 @@ export async function runCli(
202
226
  projectStatuses.push({
203
227
  name: project.name,
204
228
  path: project.path,
205
- status: { ok: false, error: { code: typed.code ?? ERROR_CODES.INTERNAL_ERROR, message: typed.message } }
229
+ status: {
230
+ ok: false,
231
+ error: { code: typed.code ?? ERROR_CODES.INTERNAL_ERROR, message: typed.message },
232
+ },
206
233
  });
207
234
  }
208
235
  }
@@ -213,14 +240,18 @@ export async function runCli(
213
240
  }
214
241
 
215
242
  const selectedPolicyPath =
216
- selectedProject && multiConfig ? multiLoader.resolveProjectPolicyPath(multiConfig, selectedProject) : undefined;
243
+ selectedProject && multiConfig
244
+ ? multiLoader.resolveProjectPolicyPath(multiConfig, selectedProject)
245
+ : undefined;
217
246
  const selectedGatesPath =
218
- selectedProject && multiConfig ? multiLoader.resolveProjectGatesPath(multiConfig, selectedProject) : undefined;
247
+ selectedProject && multiConfig
248
+ ? multiLoader.resolveProjectGatesPath(multiConfig, selectedProject)
249
+ : undefined;
219
250
 
220
251
  const instanceId = computeInstanceId(defaultConfigPath(repoRoot));
221
252
  const kernel = new AopKernel(repoRoot, instanceId, {
222
253
  policyPath: selectedPolicyPath,
223
- gatesPath: selectedGatesPath
254
+ gatesPath: selectedGatesPath,
224
255
  });
225
256
  await kernel.ensureLoaded();
226
257
 
@@ -234,14 +265,14 @@ export async function runCli(
234
265
  selection = resolveProviderSelection({
235
266
  cli: options as unknown as Record<string, string | undefined>,
236
267
  env: runtime.env,
237
- agentsConfig: kernel.getAgentsConfig()
268
+ agentsConfig: kernel.getAgentsConfig(),
238
269
  });
239
270
  } catch {
240
271
  selection = {
241
272
  provider: 'custom',
242
273
  model: 'custom-default',
243
274
  provider_config_env: null,
244
- provider_config_ref: null
275
+ provider_config_ref: null,
245
276
  };
246
277
  }
247
278
  commandProvider = new NullWorkerProvider(selection);
@@ -264,7 +295,7 @@ export async function runCli(
264
295
  transport,
265
296
  options,
266
297
  kernel,
267
- toolClient
298
+ toolClient,
268
299
  });
269
300
  printPayload(payload);
270
301
  return 0;
@@ -290,7 +321,13 @@ export async function runCli(
290
321
  };
291
322
  const gracePeriodSeconds = policySnapshot.cleanup?.grace_period_seconds;
292
323
  const autoAfterMerge = policySnapshot.cleanup?.auto_after_merge === true;
293
- const handler = new CleanupCommandHandler(toolClient, runId, repoRoot, gracePeriodSeconds, autoAfterMerge);
324
+ const handler = new CleanupCommandHandler(
325
+ toolClient,
326
+ runId,
327
+ repoRoot,
328
+ gracePeriodSeconds,
329
+ autoAfterMerge,
330
+ );
294
331
  const payload = await handler.execute(options);
295
332
  printPayload(payload);
296
333
  return 0;
@@ -332,7 +369,7 @@ export async function runCli(
332
369
  kernel,
333
370
  toolClient,
334
371
  maxActiveFeatures: multiConfig?.defaults?.max_active_features ?? undefined,
335
- maxParallelGateRuns: multiConfig?.defaults?.max_parallel_gate_runs ?? undefined
372
+ maxParallelGateRuns: multiConfig?.defaults?.max_parallel_gate_runs ?? undefined,
336
373
  });
337
374
  printPayload(payload);
338
375
  return 0;
@@ -342,7 +379,7 @@ export async function runCli(
342
379
  printError(code, typed.message || 'Unhandled CLI error', {
343
380
  ...(typed.details ?? {}),
344
381
  retryable: false,
345
- requires_human: true
382
+ requires_human: true,
346
383
  });
347
384
  return 1;
348
385
  }
@@ -5,7 +5,7 @@ export interface ToolExecutionRouterPort {
5
5
  dispatchTool(
6
6
  toolName: string,
7
7
  args: Record<string, unknown>,
8
- context: { actorType: string; actorId: string }
8
+ context: { actorType: string; actorId: string },
9
9
  ): Promise<unknown>;
10
10
  normalizeError(error: unknown): ToolResponse;
11
11
  }
@@ -17,11 +17,15 @@ export class KernelToolExecutor {
17
17
  this.router = router;
18
18
  }
19
19
 
20
- async execute(tool: ToolCatalogEntry, args: Record<string, unknown>, claims: VerifiedActorClaims): Promise<ToolResponse> {
20
+ async execute(
21
+ tool: ToolCatalogEntry,
22
+ args: Record<string, unknown>,
23
+ claims: VerifiedActorClaims,
24
+ ): Promise<ToolResponse> {
21
25
  try {
22
26
  const result = (await this.router.dispatchTool(tool.name, args, {
23
27
  actorType: claims.actor_type,
24
- actorId: claims.actor_id
28
+ actorId: claims.actor_id,
25
29
  })) as Record<string, unknown>;
26
30
  const payload =
27
31
  result.data && typeof result.data === 'object'