agentic-orchestrator 0.1.6 → 0.1.8

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 (438) hide show
  1. package/.prettierignore +10 -0
  2. package/.prettierrc.json +24 -0
  3. package/CLAUDE.md +3 -2
  4. package/README.md +71 -48
  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 +5 -22
  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/env-file.ts +115 -0
  107. package/apps/control-plane/src/cli/help-command-handler.ts +61 -32
  108. package/apps/control-plane/src/cli/init-command-handler.ts +182 -56
  109. package/apps/control-plane/src/cli/io.ts +7 -3
  110. package/apps/control-plane/src/cli/resume-command-handler.ts +21 -13
  111. package/apps/control-plane/src/cli/retry-command-handler.ts +12 -11
  112. package/apps/control-plane/src/cli/run-command-handler.ts +12 -8
  113. package/apps/control-plane/src/cli/send-command-handler.ts +6 -6
  114. package/apps/control-plane/src/cli/spec-ingestion-service.ts +14 -8
  115. package/apps/control-plane/src/cli/spec-input-resolver.ts +6 -1
  116. package/apps/control-plane/src/cli/spec-utils.ts +2 -2
  117. package/apps/control-plane/src/cli/status-command-handler.ts +13 -12
  118. package/apps/control-plane/src/cli/tooling.ts +3 -3
  119. package/apps/control-plane/src/cli/types.ts +1 -1
  120. package/apps/control-plane/src/core/collisions.ts +27 -10
  121. package/apps/control-plane/src/core/constants.ts +13 -7
  122. package/apps/control-plane/src/core/error-codes.ts +1 -1
  123. package/apps/control-plane/src/core/fs.ts +11 -5
  124. package/apps/control-plane/src/core/gates.ts +53 -27
  125. package/apps/control-plane/src/core/git.ts +18 -6
  126. package/apps/control-plane/src/core/kernel.ts +513 -227
  127. package/apps/control-plane/src/core/patch.ts +7 -3
  128. package/apps/control-plane/src/core/path-layout.ts +5 -1
  129. package/apps/control-plane/src/core/path-rules.ts +19 -5
  130. package/apps/control-plane/src/core/qa-index.ts +26 -12
  131. package/apps/control-plane/src/core/response.ts +9 -6
  132. package/apps/control-plane/src/core/schemas.ts +29 -10
  133. package/apps/control-plane/src/core/tool-caller.ts +1 -1
  134. package/apps/control-plane/src/core/workspace-hooks.ts +5 -5
  135. package/apps/control-plane/src/index.ts +3 -9
  136. package/apps/control-plane/src/interfaces/cli/bootstrap.ts +79 -35
  137. package/apps/control-plane/src/mcp/kernel-tool-executor.ts +7 -3
  138. package/apps/control-plane/src/mcp/mcp-server-adapter.ts +12 -10
  139. package/apps/control-plane/src/mcp/operation-ledger.ts +18 -8
  140. package/apps/control-plane/src/mcp/protocol-contract.ts +2 -2
  141. package/apps/control-plane/src/mcp/runtime-factory.ts +15 -6
  142. package/apps/control-plane/src/mcp/token-auth-verifier.ts +3 -2
  143. package/apps/control-plane/src/mcp/token-claims-validator.ts +11 -7
  144. package/apps/control-plane/src/mcp/tool-authorizer.ts +1 -3
  145. package/apps/control-plane/src/mcp/tool-client.ts +17 -5
  146. package/apps/control-plane/src/mcp/tool-contract-validator.ts +17 -8
  147. package/apps/control-plane/src/mcp/tool-registry-loader.ts +7 -3
  148. package/apps/control-plane/src/mcp/tool-runtime.ts +66 -39
  149. package/apps/control-plane/src/mcp/tools-markdown-generator.ts +6 -1
  150. package/apps/control-plane/src/providers/providers.ts +137 -54
  151. package/apps/control-plane/src/supervisor/build-wave-executor.ts +44 -25
  152. package/apps/control-plane/src/supervisor/planning-wave-executor.ts +46 -33
  153. package/apps/control-plane/src/supervisor/prompt-bundle-loader.ts +1 -1
  154. package/apps/control-plane/src/supervisor/qa-wave-executor.ts +38 -23
  155. package/apps/control-plane/src/supervisor/run-coordinator.ts +71 -36
  156. package/apps/control-plane/src/supervisor/runtime.ts +59 -35
  157. package/apps/control-plane/src/supervisor/session-orchestrator.ts +48 -31
  158. package/apps/control-plane/src/supervisor/types.ts +22 -7
  159. package/apps/control-plane/src/supervisor/worker-decision-loop.ts +30 -20
  160. package/apps/control-plane/test/activity-monitor.spec.ts +54 -30
  161. package/apps/control-plane/test/adapter-registry.spec.ts +5 -5
  162. package/apps/control-plane/test/aop.spec.ts +4 -4
  163. package/apps/control-plane/test/batch-operations.spec.ts +20 -18
  164. package/apps/control-plane/test/bootstrap-attach.spec.ts +52 -19
  165. package/apps/control-plane/test/bootstrap-edge-cases.spec.ts +58 -27
  166. package/apps/control-plane/test/bootstrap.spec.ts +72 -40
  167. package/apps/control-plane/test/cleanup-command.spec.ts +86 -32
  168. package/apps/control-plane/test/cli-helpers.spec.ts +119 -66
  169. package/apps/control-plane/test/cli.spec.ts +1 -1
  170. package/apps/control-plane/test/cli.unit.spec.ts +226 -167
  171. package/apps/control-plane/test/collision-queue.spec.ts +49 -40
  172. package/apps/control-plane/test/collisions.spec.ts +30 -30
  173. package/apps/control-plane/test/core-utils.spec.ts +29 -15
  174. package/apps/control-plane/test/cost-tracking.spec.ts +38 -22
  175. package/apps/control-plane/test/dashboard-api.integration.spec.ts +68 -36
  176. package/apps/control-plane/test/dashboard-client.spec.ts +18 -12
  177. package/apps/control-plane/test/dashboard-command.spec.ts +11 -7
  178. package/apps/control-plane/test/delete-command-handler.spec.ts +49 -41
  179. package/apps/control-plane/test/dependency-scheduler.spec.ts +47 -20
  180. package/apps/control-plane/test/epoch-tracking.spec.ts +9 -9
  181. package/apps/control-plane/test/feature-deletion-service.spec.ts +60 -52
  182. package/apps/control-plane/test/feature-lifecycle.spec.ts +36 -17
  183. package/apps/control-plane/test/gates.spec.ts +101 -81
  184. package/apps/control-plane/test/git-spawn-error.spec.ts +1 -1
  185. package/apps/control-plane/test/helpers.ts +10 -6
  186. package/apps/control-plane/test/incremental-gates.spec.ts +59 -20
  187. package/apps/control-plane/test/init-wizard.spec.ts +328 -68
  188. package/apps/control-plane/test/instance-isolation.spec.ts +43 -10
  189. package/apps/control-plane/test/issue-tracker.spec.ts +368 -128
  190. package/apps/control-plane/test/kernel-collision-replay.spec.ts +50 -29
  191. package/apps/control-plane/test/kernel.branches.spec.ts +64 -40
  192. package/apps/control-plane/test/kernel.coverage.spec.ts +85 -49
  193. package/apps/control-plane/test/kernel.coverage2.spec.ts +109 -65
  194. package/apps/control-plane/test/kernel.spec.ts +134 -51
  195. package/apps/control-plane/test/lock-service.spec.ts +92 -68
  196. package/apps/control-plane/test/mcp-helpers.spec.ts +53 -39
  197. package/apps/control-plane/test/mcp.spec.ts +231 -115
  198. package/apps/control-plane/test/merge-service.spec.ts +142 -94
  199. package/apps/control-plane/test/multi-project.spec.ts +28 -22
  200. package/apps/control-plane/test/notifier-service.spec.ts +136 -92
  201. package/apps/control-plane/test/parallel-gates.spec.ts +51 -35
  202. package/apps/control-plane/test/patch-service.spec.ts +128 -48
  203. package/apps/control-plane/test/performance-analytics.spec.ts +99 -63
  204. package/apps/control-plane/test/plan-service.spec.ts +50 -39
  205. package/apps/control-plane/test/planning-wave-executor.spec.ts +95 -71
  206. package/apps/control-plane/test/policy-loader-service.spec.ts +41 -19
  207. package/apps/control-plane/test/pr-monitor.spec.ts +113 -64
  208. package/apps/control-plane/test/providers.spec.ts +208 -104
  209. package/apps/control-plane/test/qa-index-service.spec.ts +31 -33
  210. package/apps/control-plane/test/qa-index.spec.ts +58 -61
  211. package/apps/control-plane/test/reactions.spec.ts +88 -45
  212. package/apps/control-plane/test/response.spec.ts +5 -5
  213. package/apps/control-plane/test/resume-command.spec.ts +121 -80
  214. package/apps/control-plane/test/run-coordinator.spec.ts +205 -136
  215. package/apps/control-plane/test/schema-date-time.spec.ts +49 -41
  216. package/apps/control-plane/test/service-retry-paths.spec.ts +77 -57
  217. package/apps/control-plane/test/services.spec.ts +147 -129
  218. package/apps/control-plane/test/session-management.spec.ts +136 -74
  219. package/apps/control-plane/test/spec-ingestion.spec.ts +23 -21
  220. package/apps/control-plane/test/spec-input-resolver.spec.ts +11 -10
  221. package/apps/control-plane/test/supervisor-collaborators.spec.ts +168 -121
  222. package/apps/control-plane/test/supervisor.calltool.spec.ts +21 -18
  223. package/apps/control-plane/test/supervisor.spec.ts +67 -43
  224. package/apps/control-plane/test/supervisor.unit.spec.ts +195 -126
  225. package/apps/control-plane/test/token-auth-verifier.spec.ts +29 -14
  226. package/apps/control-plane/test/tool-registry-loader.spec.ts +51 -27
  227. package/apps/control-plane/test/tool-runtime.spec.ts +63 -46
  228. package/apps/control-plane/test/worker-decision-loop.spec.ts +143 -122
  229. package/apps/control-plane/test/workspace-hooks.spec.ts +61 -23
  230. package/apps/control-plane/tsconfig.build.json +2 -7
  231. package/apps/control-plane/tsconfig.json +1 -5
  232. package/apps/control-plane/vitest.config.ts +7 -7
  233. package/config/agentic/orchestrator/adapters.yaml +3 -0
  234. package/config/agentic/orchestrator/agents.yaml +14 -0
  235. package/config/agentic/orchestrator/gates.yaml +28 -0
  236. package/config/agentic/orchestrator/policy.yaml +22 -0
  237. package/config/agentic/orchestrator/prompts/builder.system.md +1 -0
  238. package/config/agentic/orchestrator/prompts/planner.system.md +16 -0
  239. package/config/agentic/orchestrator/prompts/qa.system.md +1 -0
  240. package/dist/apps/control-plane/application/adapters/adapter-registry.js +12 -5
  241. package/dist/apps/control-plane/application/adapters/adapter-registry.js.map +1 -1
  242. package/dist/apps/control-plane/application/multi-project-loader.js +26 -9
  243. package/dist/apps/control-plane/application/multi-project-loader.js.map +1 -1
  244. package/dist/apps/control-plane/application/services/activity-monitor-service.js +7 -7
  245. package/dist/apps/control-plane/application/services/activity-monitor-service.js.map +1 -1
  246. package/dist/apps/control-plane/application/services/collision-queue-service.js +7 -7
  247. package/dist/apps/control-plane/application/services/collision-queue-service.js.map +1 -1
  248. package/dist/apps/control-plane/application/services/cost-tracking-service.js +6 -8
  249. package/dist/apps/control-plane/application/services/cost-tracking-service.js.map +1 -1
  250. package/dist/apps/control-plane/application/services/dependency-scheduler-service.js.map +1 -1
  251. package/dist/apps/control-plane/application/services/feature-deletion-service.js +37 -29
  252. package/dist/apps/control-plane/application/services/feature-deletion-service.js.map +1 -1
  253. package/dist/apps/control-plane/application/services/feature-lifecycle-service.js +10 -10
  254. package/dist/apps/control-plane/application/services/feature-lifecycle-service.js.map +1 -1
  255. package/dist/apps/control-plane/application/services/feature-state-service.js +11 -11
  256. package/dist/apps/control-plane/application/services/feature-state-service.js.map +1 -1
  257. package/dist/apps/control-plane/application/services/gate-interpolation-service.js +3 -1
  258. package/dist/apps/control-plane/application/services/gate-interpolation-service.js.map +1 -1
  259. package/dist/apps/control-plane/application/services/gate-service.js +26 -26
  260. package/dist/apps/control-plane/application/services/gate-service.js.map +1 -1
  261. package/dist/apps/control-plane/application/services/instance-isolation-service.js +1 -1
  262. package/dist/apps/control-plane/application/services/instance-isolation-service.js.map +1 -1
  263. package/dist/apps/control-plane/application/services/issue-tracker-service.js +25 -15
  264. package/dist/apps/control-plane/application/services/issue-tracker-service.js.map +1 -1
  265. package/dist/apps/control-plane/application/services/lock-service.js +32 -32
  266. package/dist/apps/control-plane/application/services/lock-service.js.map +1 -1
  267. package/dist/apps/control-plane/application/services/merge-service.js +41 -27
  268. package/dist/apps/control-plane/application/services/merge-service.js.map +1 -1
  269. package/dist/apps/control-plane/application/services/notifier-service.js +29 -15
  270. package/dist/apps/control-plane/application/services/notifier-service.js.map +1 -1
  271. package/dist/apps/control-plane/application/services/patch-service.js +21 -19
  272. package/dist/apps/control-plane/application/services/patch-service.js.map +1 -1
  273. package/dist/apps/control-plane/application/services/performance-analytics-service.js +4 -4
  274. package/dist/apps/control-plane/application/services/performance-analytics-service.js.map +1 -1
  275. package/dist/apps/control-plane/application/services/plan-service.js +33 -33
  276. package/dist/apps/control-plane/application/services/plan-service.js.map +1 -1
  277. package/dist/apps/control-plane/application/services/policy-loader-service.js.map +1 -1
  278. package/dist/apps/control-plane/application/services/pr-monitor-service.js +23 -11
  279. package/dist/apps/control-plane/application/services/pr-monitor-service.js.map +1 -1
  280. package/dist/apps/control-plane/application/services/qa-index-service.js +11 -11
  281. package/dist/apps/control-plane/application/services/qa-index-service.js.map +1 -1
  282. package/dist/apps/control-plane/application/services/reactions-service.js +13 -9
  283. package/dist/apps/control-plane/application/services/reactions-service.js.map +1 -1
  284. package/dist/apps/control-plane/application/services/reporting-service.js +11 -9
  285. package/dist/apps/control-plane/application/services/reporting-service.js.map +1 -1
  286. package/dist/apps/control-plane/application/services/run-lease-service.js +34 -33
  287. package/dist/apps/control-plane/application/services/run-lease-service.js.map +1 -1
  288. package/dist/apps/control-plane/application/tools/tool-metadata.js +2 -2
  289. package/dist/apps/control-plane/application/tools/tool-router.js.map +1 -1
  290. package/dist/apps/control-plane/cli/attach-command-handler.js +9 -9
  291. package/dist/apps/control-plane/cli/cleanup-command-handler.js +11 -9
  292. package/dist/apps/control-plane/cli/cleanup-command-handler.js.map +1 -1
  293. package/dist/apps/control-plane/cli/cli-argument-parser.js +4 -3
  294. package/dist/apps/control-plane/cli/cli-argument-parser.js.map +1 -1
  295. package/dist/apps/control-plane/cli/dashboard-command-handler.js +23 -7
  296. package/dist/apps/control-plane/cli/dashboard-command-handler.js.map +1 -1
  297. package/dist/apps/control-plane/cli/delete-command-handler.js +7 -7
  298. package/dist/apps/control-plane/cli/env-file.d.ts +4 -0
  299. package/dist/apps/control-plane/cli/env-file.js +89 -0
  300. package/dist/apps/control-plane/cli/env-file.js.map +1 -0
  301. package/dist/apps/control-plane/cli/help-command-handler.js +58 -30
  302. package/dist/apps/control-plane/cli/help-command-handler.js.map +1 -1
  303. package/dist/apps/control-plane/cli/init-command-handler.js +97 -37
  304. package/dist/apps/control-plane/cli/init-command-handler.js.map +1 -1
  305. package/dist/apps/control-plane/cli/io.js +2 -2
  306. package/dist/apps/control-plane/cli/io.js.map +1 -1
  307. package/dist/apps/control-plane/cli/resume-command-handler.js +9 -9
  308. package/dist/apps/control-plane/cli/resume-command-handler.js.map +1 -1
  309. package/dist/apps/control-plane/cli/retry-command-handler.js +12 -11
  310. package/dist/apps/control-plane/cli/retry-command-handler.js.map +1 -1
  311. package/dist/apps/control-plane/cli/run-command-handler.js +12 -8
  312. package/dist/apps/control-plane/cli/run-command-handler.js.map +1 -1
  313. package/dist/apps/control-plane/cli/send-command-handler.js +6 -6
  314. package/dist/apps/control-plane/cli/spec-ingestion-service.js +10 -8
  315. package/dist/apps/control-plane/cli/spec-ingestion-service.js.map +1 -1
  316. package/dist/apps/control-plane/cli/spec-input-resolver.js.map +1 -1
  317. package/dist/apps/control-plane/cli/spec-utils.js.map +1 -1
  318. package/dist/apps/control-plane/cli/status-command-handler.js +8 -8
  319. package/dist/apps/control-plane/cli/status-command-handler.js.map +1 -1
  320. package/dist/apps/control-plane/cli/tooling.js +1 -1
  321. package/dist/apps/control-plane/core/collisions.js +11 -8
  322. package/dist/apps/control-plane/core/collisions.js.map +1 -1
  323. package/dist/apps/control-plane/core/constants.js +13 -7
  324. package/dist/apps/control-plane/core/constants.js.map +1 -1
  325. package/dist/apps/control-plane/core/error-codes.js +1 -1
  326. package/dist/apps/control-plane/core/fs.js.map +1 -1
  327. package/dist/apps/control-plane/core/gates.d.ts +2 -2
  328. package/dist/apps/control-plane/core/gates.js +26 -19
  329. package/dist/apps/control-plane/core/gates.js.map +1 -1
  330. package/dist/apps/control-plane/core/git.js +3 -3
  331. package/dist/apps/control-plane/core/git.js.map +1 -1
  332. package/dist/apps/control-plane/core/kernel.d.ts +1 -0
  333. package/dist/apps/control-plane/core/kernel.js +134 -81
  334. package/dist/apps/control-plane/core/kernel.js.map +1 -1
  335. package/dist/apps/control-plane/core/patch.js +7 -3
  336. package/dist/apps/control-plane/core/patch.js.map +1 -1
  337. package/dist/apps/control-plane/core/path-layout.d.ts +1 -0
  338. package/dist/apps/control-plane/core/path-layout.js +4 -1
  339. package/dist/apps/control-plane/core/path-layout.js.map +1 -1
  340. package/dist/apps/control-plane/core/path-rules.js +3 -1
  341. package/dist/apps/control-plane/core/path-rules.js.map +1 -1
  342. package/dist/apps/control-plane/core/qa-index.js +5 -5
  343. package/dist/apps/control-plane/core/qa-index.js.map +1 -1
  344. package/dist/apps/control-plane/core/response.js +3 -3
  345. package/dist/apps/control-plane/core/response.js.map +1 -1
  346. package/dist/apps/control-plane/core/schemas.js +10 -6
  347. package/dist/apps/control-plane/core/schemas.js.map +1 -1
  348. package/dist/apps/control-plane/core/workspace-hooks.js +3 -3
  349. package/dist/apps/control-plane/index.d.ts +1 -1
  350. package/dist/apps/control-plane/index.js +1 -1
  351. package/dist/apps/control-plane/index.js.map +1 -1
  352. package/dist/apps/control-plane/interfaces/cli/bootstrap.js +40 -23
  353. package/dist/apps/control-plane/interfaces/cli/bootstrap.js.map +1 -1
  354. package/dist/apps/control-plane/mcp/kernel-tool-executor.js +1 -1
  355. package/dist/apps/control-plane/mcp/kernel-tool-executor.js.map +1 -1
  356. package/dist/apps/control-plane/mcp/mcp-server-adapter.js +6 -7
  357. package/dist/apps/control-plane/mcp/mcp-server-adapter.js.map +1 -1
  358. package/dist/apps/control-plane/mcp/operation-ledger.js +5 -5
  359. package/dist/apps/control-plane/mcp/operation-ledger.js.map +1 -1
  360. package/dist/apps/control-plane/mcp/protocol-contract.js +2 -2
  361. package/dist/apps/control-plane/mcp/runtime-factory.js +2 -2
  362. package/dist/apps/control-plane/mcp/runtime-factory.js.map +1 -1
  363. package/dist/apps/control-plane/mcp/token-auth-verifier.js +1 -1
  364. package/dist/apps/control-plane/mcp/token-auth-verifier.js.map +1 -1
  365. package/dist/apps/control-plane/mcp/token-claims-validator.js +5 -5
  366. package/dist/apps/control-plane/mcp/token-claims-validator.js.map +1 -1
  367. package/dist/apps/control-plane/mcp/tool-authorizer.js +1 -3
  368. package/dist/apps/control-plane/mcp/tool-authorizer.js.map +1 -1
  369. package/dist/apps/control-plane/mcp/tool-client.js +2 -2
  370. package/dist/apps/control-plane/mcp/tool-client.js.map +1 -1
  371. package/dist/apps/control-plane/mcp/tool-contract-validator.js +3 -3
  372. package/dist/apps/control-plane/mcp/tool-contract-validator.js.map +1 -1
  373. package/dist/apps/control-plane/mcp/tool-registry-loader.js +1 -1
  374. package/dist/apps/control-plane/mcp/tool-registry-loader.js.map +1 -1
  375. package/dist/apps/control-plane/mcp/tool-runtime.js +17 -17
  376. package/dist/apps/control-plane/mcp/tool-runtime.js.map +1 -1
  377. package/dist/apps/control-plane/mcp/tools-markdown-generator.js +6 -1
  378. package/dist/apps/control-plane/mcp/tools-markdown-generator.js.map +1 -1
  379. package/dist/apps/control-plane/providers/providers.d.ts +3 -2
  380. package/dist/apps/control-plane/providers/providers.js +81 -39
  381. package/dist/apps/control-plane/providers/providers.js.map +1 -1
  382. package/dist/apps/control-plane/supervisor/build-wave-executor.js +12 -12
  383. package/dist/apps/control-plane/supervisor/build-wave-executor.js.map +1 -1
  384. package/dist/apps/control-plane/supervisor/planning-wave-executor.js +19 -16
  385. package/dist/apps/control-plane/supervisor/planning-wave-executor.js.map +1 -1
  386. package/dist/apps/control-plane/supervisor/prompt-bundle-loader.js +1 -1
  387. package/dist/apps/control-plane/supervisor/qa-wave-executor.js +13 -13
  388. package/dist/apps/control-plane/supervisor/qa-wave-executor.js.map +1 -1
  389. package/dist/apps/control-plane/supervisor/run-coordinator.js +37 -20
  390. package/dist/apps/control-plane/supervisor/run-coordinator.js.map +1 -1
  391. package/dist/apps/control-plane/supervisor/runtime.js +25 -21
  392. package/dist/apps/control-plane/supervisor/runtime.js.map +1 -1
  393. package/dist/apps/control-plane/supervisor/session-orchestrator.js +29 -23
  394. package/dist/apps/control-plane/supervisor/session-orchestrator.js.map +1 -1
  395. package/dist/apps/control-plane/supervisor/types.d.ts +3 -3
  396. package/dist/apps/control-plane/supervisor/types.js.map +1 -1
  397. package/dist/apps/control-plane/supervisor/worker-decision-loop.js +14 -16
  398. package/dist/apps/control-plane/supervisor/worker-decision-loop.js.map +1 -1
  399. package/eslint.config.mjs +20 -20
  400. package/example-configurations/README.md +1 -1
  401. package/example-configurations/java/agents.yaml +3 -3
  402. package/example-configurations/java/policy.yaml +1 -1
  403. package/example-configurations/node/agents.yaml +3 -3
  404. package/example-configurations/node/policy.yaml +1 -1
  405. package/package.json +10 -5
  406. package/packages/web-dashboard/next.config.js +2 -2
  407. package/packages/web-dashboard/src/app/api/actions/route.ts +25 -9
  408. package/packages/web-dashboard/src/app/api/events/route.ts +20 -6
  409. package/packages/web-dashboard/src/app/api/features/[id]/checkout/route.ts +88 -37
  410. package/packages/web-dashboard/src/app/api/features/[id]/evidence/[artifact]/route.ts +8 -5
  411. package/packages/web-dashboard/src/app/api/features/[id]/review/route.ts +27 -9
  412. package/packages/web-dashboard/src/app/api/features/[id]/route.ts +5 -2
  413. package/packages/web-dashboard/src/app/api/projects/route.ts +5 -5
  414. package/packages/web-dashboard/src/app/globals.css +10 -2
  415. package/packages/web-dashboard/src/app/page.tsx +100 -37
  416. package/packages/web-dashboard/src/lib/aop-client.ts +68 -37
  417. package/packages/web-dashboard/src/lib/multi-project-config.ts +28 -7
  418. package/packages/web-dashboard/src/lib/orchestrator-tools.ts +59 -36
  419. package/packages/web-dashboard/tsconfig.json +3 -11
  420. package/scripts/nx-safe.mjs +10 -10
  421. package/spec-files/completed/agentic_orchestrator_cli_delete_command_spec.md +5 -0
  422. package/spec-files/completed/agentic_orchestrator_feature_gaps_closure_spec.md +189 -90
  423. package/spec-files/completed/agentic_orchestrator_init_policy_ux_simplification_spec.md +49 -16
  424. package/spec-files/completed/agentic_orchestrator_mcp_formalization_spec.md +24 -1
  425. package/spec-files/completed/agentic_orchestrator_single_global_orchestrator_spec.md +9 -0
  426. package/spec-files/completed/agentic_orchestrator_spec.md +171 -75
  427. package/spec-files/completed/agentic_orchestrator_validator_hardening_spec.md +25 -17
  428. package/spec-files/outstanding/agentic_orchestrator_artifact_database_publishing_spec.md +40 -5
  429. package/spec-files/outstanding/agentic_orchestrator_enterprise_governance_dashboard_spec.md +23 -12
  430. package/spec-files/outstanding/agentic_orchestrator_knowledge_canary_spec.md +16 -4
  431. package/spec-files/outstanding/agentic_orchestrator_observability_integrity_diagnostics_spec.md +42 -2
  432. package/spec-files/outstanding/agentic_orchestrator_performance_improvements_spec.md +209 -130
  433. package/spec-files/outstanding/agentic_orchestrator_planning_review_quality_spec.md +56 -3
  434. package/spec-files/outstanding/agentic_orchestrator_productization_commercial_spec.md +77 -10
  435. package/spec-files/outstanding/agentic_orchestrator_provider_auth_bootstrap_spec.md +384 -0
  436. package/spec-files/outstanding/agentic_orchestrator_quality_adoption_execution_spec.md +29 -14
  437. package/spec-files/progress.md +186 -175
  438. package/tsconfig.json +2 -8
@@ -1,18 +1,18 @@
1
1
  import fs from 'node:fs/promises';
2
2
  import path from 'node:path';
3
- import { ensureDir, pathExists, readJson, atomicWriteJson, atomicWriteFile, withFileLock, nowIso, stableHash } from './fs.js';
3
+ import { ensureDir, pathExists, readJson, atomicWriteJson, atomicWriteFile, withFileLock, nowIso, stableHash, } from './fs.js';
4
4
  import { SchemaRegistry, loadAndValidateYaml } from './schemas.js';
5
5
  import { normalizeRepoPath } from './path-rules.js';
6
6
  import { parseFrontMatter, buildFrontMatter } from './frontmatter.js';
7
7
  import { runGit, runCommand } from './git.js';
8
8
  import { ERROR_CODES } from './error-codes.js';
9
9
  import { ok, fail, withSuggestedActions } from './response.js';
10
- import { ALLOWED_ACTORS, DEFAULT_CLUSTER, DEFAULT_ROLE_STATUS, GATE_RESULT, STATUS, TOOLS } from './constants.js';
10
+ import { ALLOWED_ACTORS, DEFAULT_CLUSTER, DEFAULT_ROLE_STATUS, GATE_RESULT, STATUS, TOOLS, } from './constants.js';
11
11
  import { AopPathLayout, ensureAopRuntimeLayout } from './path-layout.js';
12
- import { applyWorktreeSymlinks, formatWorkspaceHookWarning, runWorktreePostCreate } from './workspace-hooks.js';
12
+ import { applyWorktreeSymlinks, formatWorkspaceHookWarning, runWorktreePostCreate, } from './workspace-hooks.js';
13
13
  import { ToolRegistryLoader } from '../mcp/tool-registry-loader.js';
14
- import { ToolHandlerRegistry, ToolRouter } from '../application/tools/tool-router.js';
15
- import { RunLeaseService } from '../application/services/run-lease-service.js';
14
+ import { ToolHandlerRegistry, ToolRouter, } from '../application/tools/tool-router.js';
15
+ import { RunLeaseService, } from '../application/services/run-lease-service.js';
16
16
  import { LockService } from '../application/services/lock-service.js';
17
17
  import { ReportingService } from '../application/services/reporting-service.js';
18
18
  import { FeatureStateService } from '../application/services/feature-state-service.js';
@@ -23,11 +23,11 @@ import { GateService } from '../application/services/gate-service.js';
23
23
  import { QaIndexService } from '../application/services/qa-index-service.js';
24
24
  import { MergeService } from '../application/services/merge-service.js';
25
25
  import { CollisionQueueService } from '../application/services/collision-queue-service.js';
26
- import { FeatureDeletionService } from '../application/services/feature-deletion-service.js';
26
+ import { FeatureDeletionService, } from '../application/services/feature-deletion-service.js';
27
27
  import { CostTrackingService } from '../application/services/cost-tracking-service.js';
28
- import { PerformanceAnalyticsService } from '../application/services/performance-analytics-service.js';
28
+ import { PerformanceAnalyticsService, } from '../application/services/performance-analytics-service.js';
29
29
  import { loadComposedPolicy } from '../application/services/policy-loader-service.js';
30
- import { ACTIVITY_DETECTOR_SLOT, NOTIFICATION_CHANNEL_SLOT, SCM_PROVIDER_SLOT, globalAdapterRegistry } from '../application/adapters/adapter-registry.js';
30
+ import { ACTIVITY_DETECTOR_SLOT, NOTIFICATION_CHANNEL_SLOT, SCM_PROVIDER_SLOT, globalAdapterRegistry, } from '../application/adapters/adapter-registry.js';
31
31
  function asArray(value) {
32
32
  return Array.isArray(value) ? value : [];
33
33
  }
@@ -109,7 +109,7 @@ export class AopKernel {
109
109
  this.performanceAnalyticsService = new PerformanceAnalyticsService(this);
110
110
  this.toolRouter = new ToolRouter(this.toolHandlers, (toolName) => Promise.resolve(fail(ERROR_CODES.INVALID_ARGUMENT, `Unknown tool ${toolName}`, {
111
111
  retryable: false,
112
- requires_human: true
112
+ requires_human: true,
113
113
  })));
114
114
  }
115
115
  getRepoRoot() {
@@ -168,7 +168,7 @@ export class AopKernel {
168
168
  last_heartbeat_at: at,
169
169
  lease_expires_at: at,
170
170
  orchestrator_epoch: 0,
171
- feature_sessions: {}
171
+ feature_sessions: {},
172
172
  };
173
173
  }
174
174
  normalizeRuntimeSessions(value, at = nowIso()) {
@@ -186,7 +186,7 @@ export class AopKernel {
186
186
  featureSessions[featureId] = {
187
187
  planner_session_id: typeof typed.planner_session_id === 'string' ? typed.planner_session_id : 'unassigned',
188
188
  builder_session_id: typeof typed.builder_session_id === 'string' ? typed.builder_session_id : 'unassigned',
189
- qa_session_id: typeof typed.qa_session_id === 'string' ? typed.qa_session_id : 'unassigned'
189
+ qa_session_id: typeof typed.qa_session_id === 'string' ? typed.qa_session_id : 'unassigned',
190
190
  };
191
191
  }
192
192
  const epoch = typeof source.orchestrator_epoch === 'number' && Number.isFinite(source.orchestrator_epoch)
@@ -197,7 +197,9 @@ export class AopKernel {
197
197
  orchestrator_session_id: typeof source.orchestrator_session_id === 'string' && source.orchestrator_session_id
198
198
  ? source.orchestrator_session_id
199
199
  : fallback.orchestrator_session_id,
200
- provider: typeof source.provider === 'string' && source.provider ? source.provider : fallback.provider,
200
+ provider: typeof source.provider === 'string' && source.provider
201
+ ? source.provider
202
+ : fallback.provider,
201
203
  model: typeof source.model === 'string' && source.model ? source.model : fallback.model,
202
204
  provider_config_ref_hash: typeof source.provider_config_ref_hash === 'string' && source.provider_config_ref_hash
203
205
  ? source.provider_config_ref_hash
@@ -205,8 +207,12 @@ export class AopKernel {
205
207
  owner_instance_id: typeof source.owner_instance_id === 'string' && source.owner_instance_id
206
208
  ? source.owner_instance_id
207
209
  : fallback.owner_instance_id,
208
- lease_id: typeof source.lease_id === 'string' && source.lease_id ? source.lease_id : fallback.lease_id,
209
- started_at: typeof source.started_at === 'string' && source.started_at ? source.started_at : fallback.started_at,
210
+ lease_id: typeof source.lease_id === 'string' && source.lease_id
211
+ ? source.lease_id
212
+ : fallback.lease_id,
213
+ started_at: typeof source.started_at === 'string' && source.started_at
214
+ ? source.started_at
215
+ : fallback.started_at,
210
216
  last_heartbeat_at: typeof source.last_heartbeat_at === 'string' && source.last_heartbeat_at
211
217
  ? source.last_heartbeat_at
212
218
  : fallback.last_heartbeat_at,
@@ -214,14 +220,16 @@ export class AopKernel {
214
220
  ? source.lease_expires_at
215
221
  : fallback.lease_expires_at,
216
222
  orchestrator_epoch: epoch,
217
- feature_sessions: featureSessions
223
+ feature_sessions: featureSessions,
218
224
  };
219
225
  }
220
226
  normalizeIndexShape(value) {
221
227
  const now = nowIso();
222
228
  const source = value && typeof value === 'object' ? value : {};
223
229
  return {
224
- version: typeof source.version === 'number' && Number.isFinite(source.version) ? Math.max(1, Math.floor(source.version)) : 1,
230
+ version: typeof source.version === 'number' && Number.isFinite(source.version)
231
+ ? Math.max(1, Math.floor(source.version))
232
+ : 1,
225
233
  active: normalizeSet(asArray(source.active).filter((item) => typeof item === 'string')),
226
234
  blocked: normalizeSet(asArray(source.blocked).filter((item) => typeof item === 'string')),
227
235
  merged: normalizeSet(asArray(source.merged).filter((item) => typeof item === 'string')),
@@ -230,7 +238,7 @@ export class AopKernel {
230
238
  blocked_queue: asArray(source.blocked_queue).filter((item) => item && typeof item === 'object'),
231
239
  dep_blocked: asArray(source.dep_blocked).filter((item) => item && typeof item === 'object'),
232
240
  updated_at: typeof source.updated_at === 'string' && source.updated_at ? source.updated_at : now,
233
- runtime_sessions: this.normalizeRuntimeSessions(source.runtime_sessions, now)
241
+ runtime_sessions: this.normalizeRuntimeSessions(source.runtime_sessions, now),
234
242
  };
235
243
  }
236
244
  isRunLeaseFresh(runtimeSessions) {
@@ -240,12 +248,23 @@ export class AopKernel {
240
248
  }
241
249
  return expiry > Date.now();
242
250
  }
251
+ async resolveDefaultConfigPath(fileName) {
252
+ const primary = path.join(this.pathLayout.orchestratorRoot, fileName);
253
+ if (await pathExists(primary)) {
254
+ return primary;
255
+ }
256
+ const legacy = path.join(this.pathLayout.legacyOrchestratorRoot, fileName);
257
+ if (await pathExists(legacy)) {
258
+ return legacy;
259
+ }
260
+ return primary;
261
+ }
243
262
  async load() {
244
263
  await ensureAopRuntimeLayout(this.pathLayout);
245
- const gatesPath = this.configOverrides.gatesPath ?? path.join(this.orchestratorDir, 'gates.yaml');
246
- const policyPath = this.configOverrides.policyPath ?? path.join(this.orchestratorDir, 'policy.yaml');
247
- const agentsPath = this.configOverrides.agentsPath ?? path.join(this.orchestratorDir, 'agents.yaml');
248
- const adaptersPath = this.configOverrides.adaptersPath ?? path.join(this.orchestratorDir, 'adapters.yaml');
264
+ const gatesPath = this.configOverrides.gatesPath ?? (await this.resolveDefaultConfigPath('gates.yaml'));
265
+ const policyPath = this.configOverrides.policyPath ?? (await this.resolveDefaultConfigPath('policy.yaml'));
266
+ const agentsPath = this.configOverrides.agentsPath ?? (await this.resolveDefaultConfigPath('agents.yaml'));
267
+ const adaptersPath = this.configOverrides.adaptersPath ?? (await this.resolveDefaultConfigPath('adapters.yaml'));
249
268
  const gates = await loadAndValidateYaml(this.schemaRegistry, 'gates.schema.json', gatesPath);
250
269
  if (!gates.validation.valid) {
251
270
  throw new Error(`invalid_gates_yaml:${JSON.stringify(gates.validation.errors)}`);
@@ -356,38 +375,38 @@ export class AopKernel {
356
375
  if (text.startsWith('path_out_of_bounds')) {
357
376
  return fail(ERROR_CODES.PATH_OUT_OF_BOUNDS, 'Path escapes repository root', {
358
377
  retryable: false,
359
- requires_human: true
378
+ requires_human: true,
360
379
  });
361
380
  }
362
381
  if (text.startsWith('lock_timeout:')) {
363
382
  return fail(ERROR_CODES.LOCK_CONFLICT, 'Timed out waiting for lock', {
364
383
  retryable: true,
365
- requires_human: false
384
+ requires_human: false,
366
385
  });
367
386
  }
368
387
  if (text.startsWith('unknown_gate_profile_or_mode:')) {
369
388
  return fail(ERROR_CODES.UNKNOWN_GATE_PROFILE_OR_MODE, 'Unknown gate profile or mode', {
370
389
  value: text.split(':')[1],
371
390
  retryable: false,
372
- requires_human: true
391
+ requires_human: true,
373
392
  });
374
393
  }
375
394
  if (text.startsWith('unsupported_parser:')) {
376
395
  return fail(ERROR_CODES.UNSUPPORTED_PARSER, 'Gate parser type is not supported', {
377
396
  parser: text.split(':')[1],
378
397
  retryable: false,
379
- requires_human: true
398
+ requires_human: true,
380
399
  });
381
400
  }
382
401
  if (text.includes('qa_index_version_conflict')) {
383
402
  return fail(ERROR_CODES.QA_INDEX_VERSION_CONFLICT, 'QA index expected_version did not match current version', {
384
403
  retryable: true,
385
- requires_human: false
404
+ requires_human: false,
386
405
  });
387
406
  }
388
407
  return fail(ERROR_CODES.INTERNAL_ERROR, text, {
389
408
  retryable: false,
390
- requires_human: true
409
+ requires_human: true,
391
410
  });
392
411
  }
393
412
  async dispatchTool(toolName, args, context) {
@@ -486,19 +505,19 @@ export class AopKernel {
486
505
  plan: GATE_RESULT.NA,
487
506
  fast: GATE_RESULT.NA,
488
507
  full: GATE_RESULT.NA,
489
- merge: GATE_RESULT.NA
508
+ merge: GATE_RESULT.NA,
490
509
  },
491
510
  locks: {
492
- held: []
511
+ held: [],
493
512
  },
494
513
  collisions: {
495
514
  files: [],
496
515
  areas: [],
497
- contracts: []
516
+ contracts: [],
498
517
  },
499
518
  cluster: { ...DEFAULT_CLUSTER },
500
519
  role_status: { ...DEFAULT_ROLE_STATUS },
501
- last_updated: nowIso()
520
+ last_updated: nowIso(),
502
521
  };
503
522
  }
504
523
  async readState(featureId) {
@@ -508,7 +527,7 @@ export class AopKernel {
508
527
  return {
509
528
  frontMatter: parsed.frontMatter,
510
529
  body: parsed.body,
511
- raw
530
+ raw,
512
531
  };
513
532
  }
514
533
  async writeState(featureId, frontMatter, body = '') {
@@ -518,8 +537,8 @@ export class AopKernel {
518
537
  normalizedResponse: fail(ERROR_CODES.STATE_VALIDATION_FAILED, 'state.md front matter failed schema validation', {
519
538
  errors: validation.errors,
520
539
  retryable: false,
521
- requires_human: true
522
- })
540
+ requires_human: true,
541
+ }),
523
542
  };
524
543
  }
525
544
  const markdown = buildFrontMatter(frontMatter, body);
@@ -527,12 +546,12 @@ export class AopKernel {
527
546
  }
528
547
  async withFeatureLock(featureId, operation) {
529
548
  return await withFileLock(this.featureLockPath(featureId), operation, {
530
- timeoutMs: 30_000
549
+ timeoutMs: 30_000,
531
550
  });
532
551
  }
533
552
  async withIndexLock(operation) {
534
553
  return await withFileLock(this.indexLockPath, operation, {
535
- timeoutMs: 30_000
554
+ timeoutMs: 30_000,
536
555
  });
537
556
  }
538
557
  async readIndex() {
@@ -552,8 +571,8 @@ export class AopKernel {
552
571
  normalizedResponse: fail(ERROR_CODES.INDEX_VALIDATION_FAILED, 'index.json failed schema validation', {
553
572
  errors: validation.errors,
554
573
  retryable: false,
555
- requires_human: true
556
- })
574
+ requires_human: true,
575
+ }),
557
576
  };
558
577
  }
559
578
  await atomicWriteJson(this.indexPath, normalized);
@@ -658,8 +677,8 @@ export class AopKernel {
658
677
  feature_id: featureId,
659
678
  branch,
660
679
  worktree_path_abs: worktree,
661
- existed: true
662
- }
680
+ existed: true,
681
+ },
663
682
  };
664
683
  }
665
684
  const baseBranch = this.policy.worktree.base_branch;
@@ -674,11 +693,11 @@ export class AopKernel {
674
693
  feature_id: featureId,
675
694
  stderr: branchCreate.stderr,
676
695
  retryable: false,
677
- requires_human: true
696
+ requires_human: true,
678
697
  }, {
679
698
  command: ['git', 'branch', branch, baseRef],
680
- exit_code: branchCreate.code
681
- })
699
+ exit_code: branchCreate.code,
700
+ }),
682
701
  };
683
702
  }
684
703
  }
@@ -689,11 +708,11 @@ export class AopKernel {
689
708
  feature_id: featureId,
690
709
  stderr: addWorktree.stderr,
691
710
  retryable: false,
692
- requires_human: true
711
+ requires_human: true,
693
712
  }, {
694
713
  command: ['git', 'worktree', 'add', worktree, branch],
695
- exit_code: addWorktree.code
696
- })
714
+ exit_code: addWorktree.code,
715
+ }),
697
716
  };
698
717
  }
699
718
  const worktreeConfig = this.policy.worktree;
@@ -716,8 +735,8 @@ export class AopKernel {
716
735
  feature_id: featureId,
717
736
  branch,
718
737
  worktree_path_abs: worktree,
719
- existed: false
720
- }
738
+ existed: false,
739
+ },
721
740
  };
722
741
  }
723
742
  async loadAcceptedPlan(featureId) {
@@ -732,28 +751,31 @@ export class AopKernel {
732
751
  async repoStatus(featureId) {
733
752
  const worktree = this.worktreePath(featureId);
734
753
  const status = await runGit(this.repoRoot, ['status', '--porcelain'], { cwd: worktree });
735
- const branch = await runGit(this.repoRoot, ['rev-parse', '--abbrev-ref', 'HEAD'], { cwd: worktree });
754
+ const branch = await runGit(this.repoRoot, ['rev-parse', '--abbrev-ref', 'HEAD'], {
755
+ cwd: worktree,
756
+ });
736
757
  return {
737
758
  data: {
738
759
  feature_id: featureId,
739
760
  branch: branch.stdout.trim(),
740
- status_porcelain: status.stdout.trim().split('\n').filter(Boolean)
741
- }
761
+ status_porcelain: status.stdout.trim().split('\n').filter(Boolean),
762
+ },
742
763
  };
743
764
  }
744
765
  async repoDiff(featureId, options = []) {
745
766
  const safeOptions = asArray(options).filter((option) => typeof option === 'string' && option.startsWith('--'));
746
- const diff = await runGit(this.repoRoot, ['diff', ...safeOptions], { cwd: this.worktreePath(featureId) });
767
+ const diff = await runGit(this.repoRoot, ['diff', ...safeOptions], {
768
+ cwd: this.worktreePath(featureId),
769
+ });
747
770
  return {
748
771
  data: {
749
772
  feature_id: featureId,
750
- diff: diff.stdout
751
- }
773
+ diff: diff.stdout,
774
+ },
752
775
  };
753
776
  }
754
777
  async repoReadFile(featureId, filePath) {
755
- const normalized = await normalizeRepoPath(this.repoRoot, path.join(this.worktreePath(featureId), filePath), this.policy.path_rules.allow_symlink_traversal)
756
- .then((relative) => normalizeFromWorktree(this.worktreePath(featureId), this.repoRoot, relative));
778
+ const normalized = await normalizeRepoPath(this.repoRoot, path.join(this.worktreePath(featureId), filePath), this.policy.path_rules.allow_symlink_traversal).then((relative) => normalizeFromWorktree(this.worktreePath(featureId), this.repoRoot, relative));
757
779
  const absolute = path.join(this.repoRoot, normalized);
758
780
  const exists = await pathExists(absolute);
759
781
  if (!exists) {
@@ -761,8 +783,8 @@ export class AopKernel {
761
783
  normalizedResponse: fail(ERROR_CODES.FILE_NOT_FOUND, 'File not found', {
762
784
  path: normalized,
763
785
  retryable: false,
764
- requires_human: false
765
- })
786
+ requires_human: false,
787
+ }),
766
788
  };
767
789
  }
768
790
  const content = await fs.readFile(absolute, 'utf8');
@@ -770,23 +792,23 @@ export class AopKernel {
770
792
  data: {
771
793
  feature_id: featureId,
772
794
  path: normalized,
773
- content
774
- }
795
+ content,
796
+ },
775
797
  };
776
798
  }
777
799
  async repoSearch(featureId, query) {
778
800
  const worktree = this.worktreePath(featureId);
779
801
  const rgResult = await runCommand('rg', ['-n', '--no-heading', query, '.'], {
780
802
  cwd: worktree,
781
- timeoutMs: 30_000
803
+ timeoutMs: 30_000,
782
804
  });
783
805
  if (rgResult.code === 127) {
784
806
  throw {
785
807
  normalizedResponse: fail(ERROR_CODES.GIT_FAILURE, 'ripgrep (rg) not found - required for search functionality', {
786
808
  stderr: rgResult.stderr,
787
809
  retryable: false,
788
- requires_human: true
789
- })
810
+ requires_human: true,
811
+ }),
790
812
  };
791
813
  }
792
814
  if (rgResult.code !== 0 && rgResult.code !== 1) {
@@ -794,8 +816,8 @@ export class AopKernel {
794
816
  normalizedResponse: fail(ERROR_CODES.GIT_FAILURE, 'Search failed', {
795
817
  stderr: rgResult.stderr,
796
818
  retryable: true,
797
- requires_human: false
798
- })
819
+ requires_human: false,
820
+ }),
799
821
  };
800
822
  }
801
823
  const matches = rgResult.stdout
@@ -811,30 +833,37 @@ export class AopKernel {
811
833
  return {
812
834
  path: line.slice(0, firstColon),
813
835
  line: Number(line.slice(firstColon + 1, secondColon)),
814
- snippet: line.slice(secondColon + 1)
836
+ snippet: line.slice(secondColon + 1),
815
837
  };
816
838
  });
817
839
  return {
818
840
  data: {
819
841
  feature_id: featureId,
820
842
  query,
821
- matches
822
- }
843
+ matches,
844
+ },
823
845
  };
824
846
  }
825
847
  async repoDiffBundle(featureId) {
826
- const stat = await runGit(this.repoRoot, ['diff', '--stat'], { cwd: this.worktreePath(featureId) });
848
+ const stat = await runGit(this.repoRoot, ['diff', '--stat'], {
849
+ cwd: this.worktreePath(featureId),
850
+ });
827
851
  const full = await runGit(this.repoRoot, ['diff'], { cwd: this.worktreePath(featureId) });
828
- const names = await runGit(this.repoRoot, ['diff', '--name-only'], { cwd: this.worktreePath(featureId) });
852
+ const names = await runGit(this.repoRoot, ['diff', '--name-only'], {
853
+ cwd: this.worktreePath(featureId),
854
+ });
829
855
  const latest = await this.evidenceLatest(featureId);
830
856
  return {
831
857
  data: {
832
858
  feature_id: featureId,
833
859
  diff_stat: stat.stdout,
834
860
  diff: full.stdout,
835
- touched_files: names.stdout.split('\n').map((x) => x.trim()).filter(Boolean),
836
- last_gate_summary: latest.data?.latest ?? null
837
- }
861
+ touched_files: names.stdout
862
+ .split('\n')
863
+ .map((x) => x.trim())
864
+ .filter(Boolean),
865
+ last_gate_summary: latest.data?.latest ?? null,
866
+ },
838
867
  };
839
868
  }
840
869
  async gatesList(profileName = null) {
@@ -878,7 +907,7 @@ export class AopKernel {
878
907
  dryRun: dryRun ?? undefined,
879
908
  confirm: confirm ?? undefined,
880
909
  removeWorktree: removeWorktree ?? undefined,
881
- removeBranch: removeBranch ?? undefined
910
+ removeBranch: removeBranch ?? undefined,
882
911
  });
883
912
  }
884
913
  async renewLeases(featureIds) {
@@ -906,15 +935,27 @@ export class AopKernel {
906
935
  }
907
936
  async featureSendMessage(featureId, message) {
908
937
  if (!featureId) {
909
- throw { normalizedResponse: fail(ERROR_CODES.INVALID_ARGUMENT, 'feature_id is required', { retryable: false, requires_human: false }) };
938
+ throw {
939
+ normalizedResponse: fail(ERROR_CODES.INVALID_ARGUMENT, 'feature_id is required', {
940
+ retryable: false,
941
+ requires_human: false,
942
+ }),
943
+ };
910
944
  }
911
945
  if (!message) {
912
- throw { normalizedResponse: fail(ERROR_CODES.INVALID_ARGUMENT, 'message is required and must not be empty', { retryable: false, requires_human: false }) };
946
+ throw {
947
+ normalizedResponse: fail(ERROR_CODES.INVALID_ARGUMENT, 'message is required and must not be empty', { retryable: false, requires_human: false }),
948
+ };
913
949
  }
914
950
  const runtimeSessions = await this.getRuntimeSessions();
915
951
  const featureSession = runtimeSessions.feature_sessions?.[featureId];
916
952
  if (!featureSession) {
917
- throw { normalizedResponse: { ok: false, error: { code: 'session_not_found', message: 'No active session cluster for feature' } } };
953
+ throw {
954
+ normalizedResponse: {
955
+ ok: false,
956
+ error: { code: 'session_not_found', message: 'No active session cluster for feature' },
957
+ },
958
+ };
918
959
  }
919
960
  const state = await this.readState(featureId);
920
961
  const status = typeof state.frontMatter.status === 'string' ? state.frontMatter.status : '';
@@ -950,7 +991,12 @@ export class AopKernel {
950
991
  targetSessionId = runtimeSessions.orchestrator_session_id;
951
992
  }
952
993
  if (!this.provider?.sendMessage) {
953
- throw { normalizedResponse: { ok: false, error: { code: 'provider_unsupported', message: 'Provider does not support sendMessage' } } };
994
+ throw {
995
+ normalizedResponse: {
996
+ ok: false,
997
+ error: { code: 'provider_unsupported', message: 'Provider does not support sendMessage' },
998
+ },
999
+ };
954
1000
  }
955
1001
  await this.waitForSessionToBecomeActive(targetSessionId);
956
1002
  await this.provider.sendMessage(targetSessionId, message);
@@ -959,7 +1005,7 @@ export class AopKernel {
959
1005
  session_id: targetSessionId,
960
1006
  target_role: targetRole,
961
1007
  status,
962
- delivered: true
1008
+ delivered: true,
963
1009
  };
964
1010
  }
965
1011
  async costRecord(featureId, tokensDelta, costUsdDelta) {
@@ -983,7 +1029,7 @@ export class AopKernel {
983
1029
  retry_count: typeof args.retry_count === 'number' ? args.retry_count : 0,
984
1030
  duration_ms: typeof args.duration_ms === 'number' ? args.duration_ms : 0,
985
1031
  cost_usd: typeof args.cost_usd === 'number' ? args.cost_usd : 0,
986
- recorded_at: nowIso()
1032
+ recorded_at: nowIso(),
987
1033
  };
988
1034
  const snapshot = await this.performanceAnalyticsService.recordOutcome(outcome);
989
1035
  return { ok: true, data: { total_outcomes: snapshot.outcomes.length } };
@@ -992,7 +1038,14 @@ export class AopKernel {
992
1038
  if (provider || model) {
993
1039
  const stats = await this.performanceAnalyticsService.getProviderStats(provider ?? undefined, model ?? undefined);
994
1040
  const snapshot = await this.performanceAnalyticsService.getAnalytics();
995
- return { ok: true, data: { outcomes: snapshot.outcomes, aggregates: stats, generated_at: snapshot.generated_at } };
1041
+ return {
1042
+ ok: true,
1043
+ data: {
1044
+ outcomes: snapshot.outcomes,
1045
+ aggregates: stats,
1046
+ generated_at: snapshot.generated_at,
1047
+ },
1048
+ };
996
1049
  }
997
1050
  const snapshot = await this.performanceAnalyticsService.getAnalytics();
998
1051
  return { ok: true, data: snapshot };