agentic-orchestrator 0.1.3 → 0.1.4

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 (294) hide show
  1. package/.claude/settings.local.json +15 -0
  2. package/CLAUDE.md +126 -0
  3. package/README.md +166 -25
  4. package/agentic/orchestrator/adapters.yaml +3 -0
  5. package/agentic/orchestrator/gates.yaml +47 -0
  6. package/agentic/orchestrator/policy.yaml +89 -0
  7. package/agentic/orchestrator/schemas/adapters.schema.json +12 -0
  8. package/agentic/orchestrator/schemas/gates.schema.json +6 -1
  9. package/agentic/orchestrator/schemas/index.schema.json +14 -0
  10. package/agentic/orchestrator/schemas/multi-project.schema.json +41 -0
  11. package/agentic/orchestrator/schemas/policy.schema.json +449 -52
  12. package/agentic/orchestrator/schemas/state.schema.json +16 -0
  13. package/agentic/orchestrator/tools/catalog.json +68 -0
  14. package/agentic/orchestrator/tools/schemas/input/cost.get.input.schema.json +10 -0
  15. package/agentic/orchestrator/tools/schemas/input/cost.record.input.schema.json +13 -0
  16. package/agentic/orchestrator/tools/schemas/input/feature.send_message.input.schema.json +11 -0
  17. package/agentic/orchestrator/tools/schemas/input/performance.get_analytics.input.schema.json +10 -0
  18. package/agentic/orchestrator/tools/schemas/input/performance.record_outcome.input.schema.json +18 -0
  19. package/agentic/orchestrator/tools/schemas/output/cost.get.output.schema.json +13 -0
  20. package/agentic/orchestrator/tools/schemas/output/cost.record.output.schema.json +13 -0
  21. package/agentic/orchestrator/tools/schemas/output/feature.ready_to_merge.output.schema.json +7 -0
  22. package/agentic/orchestrator/tools/schemas/output/feature.send_message.output.schema.json +23 -0
  23. package/agentic/orchestrator/tools/schemas/output/performance.get_analytics.output.schema.json +46 -0
  24. package/agentic/orchestrator/tools/schemas/output/performance.record_outcome.output.schema.json +10 -0
  25. package/agentic/orchestrator/tools.md +5 -0
  26. package/apps/control-plane/scripts/validate-architecture-rules.mjs +28 -2
  27. package/apps/control-plane/scripts/validate-docker-mcp-contract.mjs +12 -0
  28. package/apps/control-plane/scripts/validate-mcp-contracts.ts +92 -0
  29. package/apps/control-plane/src/application/adapters/adapter-registry.ts +169 -0
  30. package/apps/control-plane/src/application/multi-project-loader.ts +119 -0
  31. package/apps/control-plane/src/application/services/activity-monitor-service.ts +199 -0
  32. package/apps/control-plane/src/application/services/cost-tracking-service.ts +82 -0
  33. package/apps/control-plane/src/application/services/dependency-scheduler-service.ts +86 -0
  34. package/apps/control-plane/src/application/services/feature-deletion-service.ts +7 -5
  35. package/apps/control-plane/src/application/services/gate-interpolation-service.ts +15 -0
  36. package/apps/control-plane/src/application/services/gate-service.ts +38 -2
  37. package/apps/control-plane/src/application/services/instance-isolation-service.ts +18 -0
  38. package/apps/control-plane/src/application/services/issue-tracker-service.ts +469 -0
  39. package/apps/control-plane/src/application/services/merge-service.ts +67 -3
  40. package/apps/control-plane/src/application/services/notifier-service.ts +295 -0
  41. package/apps/control-plane/src/application/services/performance-analytics-service.ts +122 -0
  42. package/apps/control-plane/src/application/services/plan-service.ts +51 -0
  43. package/apps/control-plane/src/application/services/pr-monitor-service.ts +262 -0
  44. package/apps/control-plane/src/application/services/reactions-service.ts +175 -0
  45. package/apps/control-plane/src/application/services/reporting-service.ts +17 -2
  46. package/apps/control-plane/src/application/services/run-lease-service.ts +16 -38
  47. package/apps/control-plane/src/application/tools/tool-metadata.ts +4 -1
  48. package/apps/control-plane/src/cli/attach-command-handler.ts +120 -0
  49. package/apps/control-plane/src/cli/cleanup-command-handler.ts +190 -0
  50. package/apps/control-plane/src/cli/cli-argument-parser.ts +69 -3
  51. package/apps/control-plane/src/cli/dashboard-command-handler.ts +57 -0
  52. package/apps/control-plane/src/cli/help-command-handler.ts +163 -0
  53. package/apps/control-plane/src/cli/init-command-handler.ts +609 -0
  54. package/apps/control-plane/src/cli/retry-command-handler.ts +138 -0
  55. package/apps/control-plane/src/cli/run-command-handler.ts +115 -3
  56. package/apps/control-plane/src/cli/send-command-handler.ts +65 -0
  57. package/apps/control-plane/src/cli/status-command-handler.ts +102 -2
  58. package/apps/control-plane/src/cli/types.ts +26 -1
  59. package/apps/control-plane/src/core/constants.ts +8 -2
  60. package/apps/control-plane/src/core/error-codes.ts +3 -1
  61. package/apps/control-plane/src/core/gates.ts +170 -50
  62. package/apps/control-plane/src/core/kernel.ts +280 -5
  63. package/apps/control-plane/src/core/path-layout.ts +12 -0
  64. package/apps/control-plane/src/core/tool-caller.ts +36 -0
  65. package/apps/control-plane/src/core/workspace-hooks.ts +87 -0
  66. package/apps/control-plane/src/interfaces/cli/bootstrap.ts +258 -9
  67. package/apps/control-plane/src/providers/providers.ts +235 -14
  68. package/apps/control-plane/src/supervisor/build-wave-executor.ts +129 -8
  69. package/apps/control-plane/src/supervisor/qa-wave-executor.ts +123 -5
  70. package/apps/control-plane/src/supervisor/run-coordinator.ts +143 -6
  71. package/apps/control-plane/src/supervisor/runtime.ts +135 -6
  72. package/apps/control-plane/src/supervisor/types.ts +12 -21
  73. package/apps/control-plane/src/supervisor/worker-decision-loop.ts +8 -0
  74. package/apps/control-plane/test/activity-monitor.spec.ts +294 -0
  75. package/apps/control-plane/test/adapter-registry.spec.ts +132 -0
  76. package/apps/control-plane/test/batch-operations.spec.ts +112 -0
  77. package/apps/control-plane/test/bootstrap-attach.spec.ts +102 -0
  78. package/apps/control-plane/test/bootstrap-edge-cases.spec.ts +252 -0
  79. package/apps/control-plane/test/bootstrap.spec.ts +560 -0
  80. package/apps/control-plane/test/cleanup-command.spec.ts +301 -0
  81. package/apps/control-plane/test/cli-helpers.spec.ts +404 -1
  82. package/apps/control-plane/test/cli.unit.spec.ts +182 -1
  83. package/apps/control-plane/test/collision-queue.spec.ts +104 -1
  84. package/apps/control-plane/test/core-utils.spec.ts +175 -2
  85. package/apps/control-plane/test/cost-tracking.spec.ts +143 -0
  86. package/apps/control-plane/test/dashboard-api.integration.spec.ts +247 -0
  87. package/apps/control-plane/test/dashboard-client.spec.ts +116 -0
  88. package/apps/control-plane/test/dashboard-command.spec.ts +103 -0
  89. package/apps/control-plane/test/dependency-scheduler.spec.ts +189 -0
  90. package/apps/control-plane/test/epoch-tracking.spec.ts +4 -4
  91. package/apps/control-plane/test/feature-deletion-service.spec.ts +422 -0
  92. package/apps/control-plane/test/feature-lifecycle.spec.ts +202 -0
  93. package/apps/control-plane/test/git-spawn-error.spec.ts +24 -0
  94. package/apps/control-plane/test/incremental-gates.spec.ts +137 -0
  95. package/apps/control-plane/test/init-wizard.spec.ts +506 -0
  96. package/apps/control-plane/test/instance-isolation.spec.ts +83 -0
  97. package/apps/control-plane/test/issue-tracker.spec.ts +890 -0
  98. package/apps/control-plane/test/kernel.coverage.spec.ts +3 -5
  99. package/apps/control-plane/test/kernel.coverage2.spec.ts +871 -0
  100. package/apps/control-plane/test/kernel.spec.ts +13 -11
  101. package/apps/control-plane/test/lock-service.spec.ts +508 -0
  102. package/apps/control-plane/test/mcp-helpers.spec.ts +176 -0
  103. package/apps/control-plane/test/mcp.spec.ts +50 -15
  104. package/apps/control-plane/test/merge-service.spec.ts +67 -4
  105. package/apps/control-plane/test/multi-project.spec.ts +372 -0
  106. package/apps/control-plane/test/notifier-service.spec.ts +388 -0
  107. package/apps/control-plane/test/parallel-gates.spec.ts +312 -0
  108. package/apps/control-plane/test/patch-service.spec.ts +253 -0
  109. package/apps/control-plane/test/performance-analytics.spec.ts +338 -0
  110. package/apps/control-plane/test/planning-wave-executor.spec.ts +168 -0
  111. package/apps/control-plane/test/pr-monitor.spec.ts +385 -0
  112. package/apps/control-plane/test/providers.spec.ts +344 -1
  113. package/apps/control-plane/test/reactions.spec.ts +392 -0
  114. package/apps/control-plane/test/resume-command.spec.ts +390 -0
  115. package/apps/control-plane/test/run-coordinator.spec.ts +481 -2
  116. package/apps/control-plane/test/schema-date-time.spec.ts +46 -0
  117. package/apps/control-plane/test/service-retry-paths.spec.ts +30 -0
  118. package/apps/control-plane/test/services.spec.ts +95 -2
  119. package/apps/control-plane/test/session-management.spec.ts +450 -0
  120. package/apps/control-plane/test/spec-ingestion.spec.ts +190 -0
  121. package/apps/control-plane/test/supervisor-collaborators.spec.ts +699 -2
  122. package/apps/control-plane/test/supervisor.spec.ts +36 -30
  123. package/apps/control-plane/test/supervisor.unit.spec.ts +405 -0
  124. package/apps/control-plane/test/worker-decision-loop.spec.ts +57 -0
  125. package/apps/control-plane/test/workspace-hooks.spec.ts +177 -0
  126. package/apps/control-plane/vitest.config.ts +21 -5
  127. package/dist/apps/control-plane/application/adapters/adapter-registry.d.ts +44 -0
  128. package/dist/apps/control-plane/application/adapters/adapter-registry.js +76 -0
  129. package/dist/apps/control-plane/application/adapters/adapter-registry.js.map +1 -0
  130. package/dist/apps/control-plane/application/multi-project-loader.d.ts +31 -0
  131. package/dist/apps/control-plane/application/multi-project-loader.js +82 -0
  132. package/dist/apps/control-plane/application/multi-project-loader.js.map +1 -0
  133. package/dist/apps/control-plane/application/services/activity-monitor-service.d.ts +43 -0
  134. package/dist/apps/control-plane/application/services/activity-monitor-service.js +132 -0
  135. package/dist/apps/control-plane/application/services/activity-monitor-service.js.map +1 -0
  136. package/dist/apps/control-plane/application/services/cost-tracking-service.d.ts +28 -0
  137. package/dist/apps/control-plane/application/services/cost-tracking-service.js +48 -0
  138. package/dist/apps/control-plane/application/services/cost-tracking-service.js.map +1 -0
  139. package/dist/apps/control-plane/application/services/dependency-scheduler-service.d.ts +26 -0
  140. package/dist/apps/control-plane/application/services/dependency-scheduler-service.js +75 -0
  141. package/dist/apps/control-plane/application/services/dependency-scheduler-service.js.map +1 -0
  142. package/dist/apps/control-plane/application/services/feature-deletion-service.d.ts +2 -0
  143. package/dist/apps/control-plane/application/services/feature-deletion-service.js +5 -5
  144. package/dist/apps/control-plane/application/services/feature-deletion-service.js.map +1 -1
  145. package/dist/apps/control-plane/application/services/gate-interpolation-service.d.ts +7 -0
  146. package/dist/apps/control-plane/application/services/gate-interpolation-service.js +7 -0
  147. package/dist/apps/control-plane/application/services/gate-interpolation-service.js.map +1 -0
  148. package/dist/apps/control-plane/application/services/gate-service.js +32 -2
  149. package/dist/apps/control-plane/application/services/gate-service.js.map +1 -1
  150. package/dist/apps/control-plane/application/services/instance-isolation-service.d.ts +11 -0
  151. package/dist/apps/control-plane/application/services/instance-isolation-service.js +17 -0
  152. package/dist/apps/control-plane/application/services/instance-isolation-service.js.map +1 -0
  153. package/dist/apps/control-plane/application/services/issue-tracker-service.d.ts +65 -0
  154. package/dist/apps/control-plane/application/services/issue-tracker-service.js +358 -0
  155. package/dist/apps/control-plane/application/services/issue-tracker-service.js.map +1 -0
  156. package/dist/apps/control-plane/application/services/merge-service.d.ts +4 -0
  157. package/dist/apps/control-plane/application/services/merge-service.js +44 -2
  158. package/dist/apps/control-plane/application/services/merge-service.js.map +1 -1
  159. package/dist/apps/control-plane/application/services/notifier-service.d.ts +74 -0
  160. package/dist/apps/control-plane/application/services/notifier-service.js +212 -0
  161. package/dist/apps/control-plane/application/services/notifier-service.js.map +1 -0
  162. package/dist/apps/control-plane/application/services/performance-analytics-service.d.ts +39 -0
  163. package/dist/apps/control-plane/application/services/performance-analytics-service.js +75 -0
  164. package/dist/apps/control-plane/application/services/performance-analytics-service.js.map +1 -0
  165. package/dist/apps/control-plane/application/services/plan-service.d.ts +1 -0
  166. package/dist/apps/control-plane/application/services/plan-service.js +53 -0
  167. package/dist/apps/control-plane/application/services/plan-service.js.map +1 -1
  168. package/dist/apps/control-plane/application/services/pr-monitor-service.d.ts +44 -0
  169. package/dist/apps/control-plane/application/services/pr-monitor-service.js +192 -0
  170. package/dist/apps/control-plane/application/services/pr-monitor-service.js.map +1 -0
  171. package/dist/apps/control-plane/application/services/reactions-service.d.ts +67 -0
  172. package/dist/apps/control-plane/application/services/reactions-service.js +114 -0
  173. package/dist/apps/control-plane/application/services/reactions-service.js.map +1 -0
  174. package/dist/apps/control-plane/application/services/reporting-service.d.ts +1 -0
  175. package/dist/apps/control-plane/application/services/reporting-service.js +13 -2
  176. package/dist/apps/control-plane/application/services/reporting-service.js.map +1 -1
  177. package/dist/apps/control-plane/application/services/run-lease-service.d.ts +2 -0
  178. package/dist/apps/control-plane/application/services/run-lease-service.js +14 -38
  179. package/dist/apps/control-plane/application/services/run-lease-service.js.map +1 -1
  180. package/dist/apps/control-plane/application/tools/tool-metadata.js +3 -1
  181. package/dist/apps/control-plane/application/tools/tool-metadata.js.map +1 -1
  182. package/dist/apps/control-plane/cli/attach-command-handler.d.ts +12 -0
  183. package/dist/apps/control-plane/cli/attach-command-handler.js +98 -0
  184. package/dist/apps/control-plane/cli/attach-command-handler.js.map +1 -0
  185. package/dist/apps/control-plane/cli/cleanup-command-handler.d.ts +12 -0
  186. package/dist/apps/control-plane/cli/cleanup-command-handler.js +162 -0
  187. package/dist/apps/control-plane/cli/cleanup-command-handler.js.map +1 -0
  188. package/dist/apps/control-plane/cli/cli-argument-parser.js +68 -3
  189. package/dist/apps/control-plane/cli/cli-argument-parser.js.map +1 -1
  190. package/dist/apps/control-plane/cli/dashboard-command-handler.d.ts +7 -0
  191. package/dist/apps/control-plane/cli/dashboard-command-handler.js +45 -0
  192. package/dist/apps/control-plane/cli/dashboard-command-handler.js.map +1 -0
  193. package/dist/apps/control-plane/cli/help-command-handler.d.ts +8 -0
  194. package/dist/apps/control-plane/cli/help-command-handler.js +146 -0
  195. package/dist/apps/control-plane/cli/help-command-handler.js.map +1 -0
  196. package/dist/apps/control-plane/cli/init-command-handler.d.ts +26 -0
  197. package/dist/apps/control-plane/cli/init-command-handler.js +517 -0
  198. package/dist/apps/control-plane/cli/init-command-handler.js.map +1 -0
  199. package/dist/apps/control-plane/cli/retry-command-handler.d.ts +8 -0
  200. package/dist/apps/control-plane/cli/retry-command-handler.js +111 -0
  201. package/dist/apps/control-plane/cli/retry-command-handler.js.map +1 -0
  202. package/dist/apps/control-plane/cli/run-command-handler.d.ts +5 -0
  203. package/dist/apps/control-plane/cli/run-command-handler.js +82 -3
  204. package/dist/apps/control-plane/cli/run-command-handler.js.map +1 -1
  205. package/dist/apps/control-plane/cli/send-command-handler.d.ts +8 -0
  206. package/dist/apps/control-plane/cli/send-command-handler.js +55 -0
  207. package/dist/apps/control-plane/cli/send-command-handler.js.map +1 -0
  208. package/dist/apps/control-plane/cli/status-command-handler.d.ts +12 -1
  209. package/dist/apps/control-plane/cli/status-command-handler.js +55 -2
  210. package/dist/apps/control-plane/cli/status-command-handler.js.map +1 -1
  211. package/dist/apps/control-plane/cli/types.d.ts +25 -1
  212. package/dist/apps/control-plane/cli/types.js +15 -1
  213. package/dist/apps/control-plane/cli/types.js.map +1 -1
  214. package/dist/apps/control-plane/core/constants.d.ts +6 -0
  215. package/dist/apps/control-plane/core/constants.js +8 -2
  216. package/dist/apps/control-plane/core/constants.js.map +1 -1
  217. package/dist/apps/control-plane/core/error-codes.d.ts +2 -0
  218. package/dist/apps/control-plane/core/error-codes.js +3 -1
  219. package/dist/apps/control-plane/core/error-codes.js.map +1 -1
  220. package/dist/apps/control-plane/core/gates.d.ts +4 -0
  221. package/dist/apps/control-plane/core/gates.js +140 -43
  222. package/dist/apps/control-plane/core/gates.js.map +1 -1
  223. package/dist/apps/control-plane/core/kernel.d.ts +48 -1
  224. package/dist/apps/control-plane/core/kernel.js +218 -5
  225. package/dist/apps/control-plane/core/kernel.js.map +1 -1
  226. package/dist/apps/control-plane/core/path-layout.d.ts +3 -0
  227. package/dist/apps/control-plane/core/path-layout.js +9 -0
  228. package/dist/apps/control-plane/core/path-layout.js.map +1 -1
  229. package/dist/apps/control-plane/core/tool-caller.d.ts +32 -0
  230. package/dist/apps/control-plane/core/tool-caller.js +2 -0
  231. package/dist/apps/control-plane/core/tool-caller.js.map +1 -0
  232. package/dist/apps/control-plane/core/workspace-hooks.d.ts +20 -0
  233. package/dist/apps/control-plane/core/workspace-hooks.js +69 -0
  234. package/dist/apps/control-plane/core/workspace-hooks.js.map +1 -0
  235. package/dist/apps/control-plane/interfaces/cli/bootstrap.js +245 -9
  236. package/dist/apps/control-plane/interfaces/cli/bootstrap.js.map +1 -1
  237. package/dist/apps/control-plane/providers/providers.d.ts +39 -4
  238. package/dist/apps/control-plane/providers/providers.js +160 -10
  239. package/dist/apps/control-plane/providers/providers.js.map +1 -1
  240. package/dist/apps/control-plane/supervisor/build-wave-executor.d.ts +3 -0
  241. package/dist/apps/control-plane/supervisor/build-wave-executor.js +115 -6
  242. package/dist/apps/control-plane/supervisor/build-wave-executor.js.map +1 -1
  243. package/dist/apps/control-plane/supervisor/qa-wave-executor.d.ts +3 -0
  244. package/dist/apps/control-plane/supervisor/qa-wave-executor.js +109 -5
  245. package/dist/apps/control-plane/supervisor/qa-wave-executor.js.map +1 -1
  246. package/dist/apps/control-plane/supervisor/run-coordinator.d.ts +15 -0
  247. package/dist/apps/control-plane/supervisor/run-coordinator.js +132 -6
  248. package/dist/apps/control-plane/supervisor/run-coordinator.js.map +1 -1
  249. package/dist/apps/control-plane/supervisor/runtime.d.ts +3 -0
  250. package/dist/apps/control-plane/supervisor/runtime.js +110 -6
  251. package/dist/apps/control-plane/supervisor/runtime.js.map +1 -1
  252. package/dist/apps/control-plane/supervisor/types.d.ts +9 -16
  253. package/dist/apps/control-plane/supervisor/types.js.map +1 -1
  254. package/dist/apps/control-plane/supervisor/worker-decision-loop.d.ts +3 -0
  255. package/dist/apps/control-plane/supervisor/worker-decision-loop.js +5 -0
  256. package/dist/apps/control-plane/supervisor/worker-decision-loop.js.map +1 -1
  257. package/eslint.config.mjs +2 -1
  258. package/package.json +12 -2
  259. package/packages/web-dashboard/next-env.d.ts +5 -0
  260. package/packages/web-dashboard/next.config.js +7 -0
  261. package/packages/web-dashboard/package.json +26 -0
  262. package/packages/web-dashboard/src/app/api/actions/route.ts +64 -0
  263. package/packages/web-dashboard/src/app/api/events/route.ts +51 -0
  264. package/packages/web-dashboard/src/app/api/features/[id]/checkout/route.ts +256 -0
  265. package/packages/web-dashboard/src/app/api/features/[id]/diff/route.ts +10 -0
  266. package/packages/web-dashboard/src/app/api/features/[id]/evidence/[artifact]/route.ts +25 -0
  267. package/packages/web-dashboard/src/app/api/features/[id]/review/route.ts +63 -0
  268. package/packages/web-dashboard/src/app/api/features/[id]/route.ts +16 -0
  269. package/packages/web-dashboard/src/app/api/projects/route.ts +31 -0
  270. package/packages/web-dashboard/src/app/api/status/route.ts +15 -0
  271. package/packages/web-dashboard/src/app/globals.css +2 -0
  272. package/packages/web-dashboard/src/app/layout.tsx +15 -0
  273. package/packages/web-dashboard/src/app/page.tsx +393 -0
  274. package/packages/web-dashboard/src/lib/aop-client.ts +244 -0
  275. package/packages/web-dashboard/src/lib/multi-project-config.ts +116 -0
  276. package/packages/web-dashboard/src/lib/orchestrator-tools.ts +284 -0
  277. package/packages/web-dashboard/src/lib/types.ts +58 -0
  278. package/packages/web-dashboard/tsconfig.json +40 -0
  279. package/packages/web-dashboard/vitest.config.ts +6 -0
  280. package/spec-files/completed/agentic_orchestrator_feature_gaps_closure_spec.md +1764 -0
  281. package/spec-files/outstanding/agentic_orchestrator_enterprise_governance_dashboard_spec.md +348 -0
  282. package/spec-files/outstanding/agentic_orchestrator_knowledge_canary_spec.md +344 -0
  283. package/spec-files/outstanding/agentic_orchestrator_observability_integrity_diagnostics_spec.md +374 -0
  284. package/spec-files/outstanding/agentic_orchestrator_performance_improvements_spec.md +1059 -0
  285. package/spec-files/outstanding/agentic_orchestrator_planning_review_quality_spec.md +466 -0
  286. package/spec-files/outstanding/agentic_orchestrator_quality_adoption_execution_spec.md +198 -0
  287. package/spec-files/outstanding/agentic_orchestrator_validator_hardening_spec.md +365 -0
  288. package/spec-files/progress.md +481 -52
  289. /package/spec-files/{agentic_orchestrator_cli_delete_command_spec.md → completed/agentic_orchestrator_cli_delete_command_spec.md} +0 -0
  290. /package/spec-files/{agentic_orchestrator_dot_aop_generated_artifacts_spec.md → completed/agentic_orchestrator_dot_aop_generated_artifacts_spec.md} +0 -0
  291. /package/spec-files/{agentic_orchestrator_mcp_formalization_spec.md → completed/agentic_orchestrator_mcp_formalization_spec.md} +0 -0
  292. /package/spec-files/{agentic_orchestrator_oop_refactor_spec.md → completed/agentic_orchestrator_oop_refactor_spec.md} +0 -0
  293. /package/spec-files/{agentic_orchestrator_single_global_orchestrator_spec.md → completed/agentic_orchestrator_single_global_orchestrator_spec.md} +0 -0
  294. /package/spec-files/{agentic_orchestrator_spec.md → completed/agentic_orchestrator_spec.md} +0 -0
@@ -0,0 +1,15 @@
1
+ {
2
+ "permissions": {
3
+ "allow": [
4
+ "Bash(cat:*)",
5
+ "Bash(gh api:*)",
6
+ "WebFetch(domain:api.github.com)",
7
+ "WebFetch(domain:raw.githubusercontent.com)",
8
+ "Bash(npm run:*)",
9
+ "Bash(npx vitest:*)",
10
+ "Bash(grep:*)",
11
+ "Bash(ls:*)",
12
+ "Bash(wc:*)"
13
+ ]
14
+ }
15
+ }
package/CLAUDE.md ADDED
@@ -0,0 +1,126 @@
1
+ # CLAUDE.md
2
+
3
+ This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4
+
5
+ ## Build & Development Commands
6
+
7
+ ```bash
8
+ npm run build # Lint + TypeScript compile
9
+ npm run typecheck # tsc --noEmit (type-check only)
10
+ npm run lint # ESLint with --max-warnings 0
11
+ npm run lint:fix # ESLint with auto-fix
12
+ npm run test # Vitest with coverage (via Nx)
13
+ npm run run # Run CLI: tsx apps/control-plane/src/cli/aop.ts
14
+
15
+ # Run a single test file
16
+ npx vitest run apps/control-plane/test/<file>.spec.ts
17
+
18
+ # Run tests matching a pattern
19
+ npx vitest run -t "pattern"
20
+
21
+ # Validation scripts (also run in CI)
22
+ npm run validate:mcp-contracts
23
+ npm run validate:architecture
24
+ npm run validate:docker-mcp
25
+ ```
26
+
27
+ ## Architecture
28
+
29
+ This is an MCP-first, multi-agent orchestrator control plane. The codebase lives in an Nx monorepo with a single application at `apps/control-plane/`.
30
+
31
+ ### Layer Overview
32
+
33
+ **CLI** (`apps/control-plane/src/cli/`) → **Supervisor** (`supervisor/`) → **Kernel** (`core/kernel.ts`) → **Services** (`application/services/`)
34
+
35
+ - **CLI**: Entry point at `cli/aop.ts` → delegates to `interfaces/cli/bootstrap.ts`. Commands: `run`, `status`, `resume`, `stop`, `delete`, `cleanup`, `init`, `dashboard`, `retry`, `send`, `attach`, `help`. All responses are structured JSON with `{ ok, data/error }`. Run `aop --help` or `aop help <command>` for usage details.
36
+ - **Kernel** (`core/kernel.ts`, ~900 lines): Deterministic orchestration engine. Manages schema validation, state, locks, plans, patches, gates, merges, and reporting. Delegates to 12+ domain services via port interfaces.
37
+ - **Supervisor** (`supervisor/runtime.ts`): Multi-agent runtime. Resolves providers (codex, claude, gemini, etc.), loads role-specific prompts, orchestrates planning/build/QA waves, manages lease heartbeats.
38
+ - **MCP Tool Runtime** (`mcp/tool-runtime.ts`): Tool execution pipeline with registry-based dispatch, input/output schema validation, role-based authorization, and idempotency tracking via `operation_id`.
39
+ - **Application Services** (`application/services/`): 12+ focused services (plan, patch, gates, QA, locks, merge, deletion, etc.) implementing port interfaces consumed by the kernel.
40
+
41
+ ### Configuration Layer (`agentic/orchestrator/`)
42
+
43
+ - `policy.yaml` — Commit/patch/merge policies, lock TTL, RBAC, supervisor iteration limits
44
+ - `gates.yaml` — Gate profiles (fast/full/merge) with commands and coverage thresholds
45
+ - `agents.yaml` — Agent roles (planner/builder/qa), provider defaults, prompt paths
46
+ - `prompts/` — Role-specific system prompts
47
+ - `tools/` — MCP tool contracts: `catalog.json` (33 tools), per-tool `schemas/input/` and `schemas/output/`
48
+ - `schemas/` — JSON schemas for policy, state, plan, index, gates, agents, qa_test_index
49
+
50
+ ### Runtime Artifacts (`.aop/`)
51
+
52
+ - `.aop/features/index.json` — Global feature index (active/blocked/merged features, locks, sessions)
53
+ - `.aop/features/<id>/state.md` — Per-feature state (YAML frontmatter + markdown)
54
+ - `.aop/features/<id>/plan.json` — Versioned plan with optimistic concurrency
55
+ - `.aop/features/<id>/evidence/` — Gate evidence artifacts
56
+
57
+ ## Key Patterns
58
+
59
+ - **Port-based DI**: Services define interface ports; the kernel implements them. This decouples domain logic from infrastructure.
60
+ - **Schema-driven validation**: All configs and artifacts validated via AJV against JSON schemas. Validation failures return structured errors with retry hints.
61
+ - **Atomic state management**: File locks, version guards, and optimistic concurrency for all state mutations.
62
+ - **Structured error codes**: 45+ error codes with `{ code, message, details: { retryable, requires_human, suggestions } }`.
63
+ - **Tool registry dispatch**: `catalog.json` metadata drives tool routing, replacing switch-based dispatch. Mutating tools require `operation_id` for idempotency.
64
+
65
+ ## Lint Rules to Know
66
+
67
+ - `no-explicit-any` is **enforced** in source, relaxed in tests
68
+ - `no-floating-promises` and `no-misused-promises` are errors
69
+ - `require-await` is enforced in source, relaxed in tests
70
+ - `consistent-type-imports` is required (use `import type` for type-only imports)
71
+ - `no-console` is an error in source (except `warn`/`error`); allowed in scripts and CLI entry point
72
+ - Unused variables must be prefixed with `_`
73
+ - Zero warnings allowed (`--max-warnings 0`)
74
+
75
+ ## Adding a New CLI Command or Flag
76
+
77
+ When adding a new command or flag to the CLI, update **all** of the following in the same change:
78
+
79
+ 1. **`apps/control-plane/src/cli/types.ts`** — add the command to the `CliCommand` enum.
80
+ 2. **`apps/control-plane/src/cli/cli-argument-parser.ts`** — parse the new flag/command token.
81
+ 3. **`apps/control-plane/src/interfaces/cli/bootstrap.ts`** — dispatch the new command.
82
+ 4. **`apps/control-plane/src/cli/help-command-handler.ts`** — add or update the entry in `COMMAND_HELP` (both the command summary and its flags list). This is the source of truth for `aop --help` output.
83
+ 5. **`CLAUDE.md`** — update the command list in the CLI bullet point above.
84
+
85
+ ## Coverage Thresholds
86
+
87
+ Lines: 90% | Branches: 90% | Functions: 90% | Statements: 90%
88
+
89
+ ## Updating progress.md
90
+
91
+ `spec-files/progress.md` is the versioned work log for this repository. **After completing any meaningful code change** (new feature, bug fix, refactor, test coverage improvement, validator change, etc.), append a new numbered entry to the **Completed Tasks** section of `progress.md`.
92
+
93
+ ### Entry format
94
+
95
+ Each entry must include:
96
+ - A sequential number (increment from the last entry)
97
+ - A short title describing what was done
98
+ - **Goal** — one sentence on why the change was made
99
+ - **Changes made** — bullet list of files modified and what changed; be specific (function names, test counts, metric deltas)
100
+ - **Result** — outcome verification (e.g. `npm test ✅`, `npm run lint ✅`, validator output)
101
+
102
+ ```
103
+ ✅ **Entry N — Short Title**
104
+ - **Goal:** One-sentence description of the problem or objective.
105
+ - **Changes made:**
106
+ - `path/to/file.ts` — description of what changed and why.
107
+ - `apps/control-plane/test/foo.spec.ts` — X tests added covering Y branches.
108
+ - **Result:** `npm test` ✅ (N test files / M tests passing). `npm run lint` ✅.
109
+ ```
110
+
111
+ ### Rules
112
+
113
+ - **One entry per logical unit of work.** Don't bundle unrelated changes into one entry.
114
+ - **Do not edit or renumber past entries.** The log is append-only.
115
+ - Entries go in the **Completed Tasks** section (before the `## Next Tasks:` heading).
116
+ - The `## Next Tasks:` section lists only work that has **not yet been done**. Move items out of it once completed.
117
+ - After completing work from a spec file, update the **Spec Gap Tracker** table (if present) to mark the item `✅ Complete`.
118
+
119
+ ## Executing a Spec
120
+
121
+ When beginning work from a spec file (e.g. `spec-files/agentic_orchestrator_*.md`):
122
+
123
+ 1. **Before writing any code**, read the spec and add all planned tasks to the `## Next Tasks:` section of `progress.md`. Use the spec's section numbers as identifiers (e.g. `§3.1 — Add mutating cross-check`).
124
+ 2. **As each task completes**, move it out of `## Next Tasks:` and into a new numbered `✅ **Entry N — ...`** in the Completed Tasks section.
125
+ 3. **Never leave a completed task in `## Next Tasks:`**. The section must only contain work that hasn't started or isn't finished.
126
+ 4. If a task is blocked or deferred, leave it in `## Next Tasks:` with a `[BLOCKED]` or `[DEFERRED]` annotation and a one-line reason.
package/README.md CHANGED
@@ -10,7 +10,7 @@ It combines:
10
10
 
11
11
  - a **deterministic kernel** (state, locks, collisions, gates, evidence)
12
12
  - a **supervisor runtime** (orchestrator/planner/builder/qa session coordination)
13
- - a **CLI contract** (`aop <run|status|resume|stop|delete>`) with deterministic spec ingestion, runtime control, and cleanup
13
+ - a **CLI contract** (`aop <run|status|resume|stop|delete|cleanup|init|dashboard|retry|send|attach>`) with deterministic spec ingestion, runtime control, monitoring, and cleanup
14
14
 
15
15
  > For complete normative requirements, see [agentic_orchestrator_spec.md](spec-files/agentic_orchestrator_spec.md).
16
16
  > For implementation continuity and the latest status, see [progress.md](spec-files/progress.md).
@@ -95,6 +95,7 @@ Agentic-Orchestrator/
95
95
  ├── .aop/
96
96
  │ ├── features/ # runtime-generated feature artifacts
97
97
  │ │ └── index.json # global orchestration index
98
+ │ ├── analytics/ # agent performance analytics
98
99
  │ └── runtime/
99
100
  │ └── operation-ledger/
100
101
  ├── agentic/
@@ -102,23 +103,30 @@ Agentic-Orchestrator/
102
103
  │ │ ├── policy.yaml
103
104
  │ │ ├── gates.yaml
104
105
  │ │ ├── agents.yaml
106
+ │ │ ├── multi-project.yaml # optional multi-project configuration
105
107
  │ │ ├── schemas/
106
108
  │ │ └── tools.md
107
109
  ├── apps/
108
110
  │ └── control-plane/
109
111
  │ ├── src/
110
- │ │ ├── cli/ # aop CLI
112
+ │ │ ├── cli/ # aop CLI commands and handlers
111
113
  │ │ ├── core/ # deterministic kernel
114
+ │ │ ├── application/
115
+ │ │ │ └── services/ # domain services (cost, reactions, pr-monitor, etc.)
112
116
  │ │ ├── providers/ # provider resolution + adapter
113
117
  │ │ └── supervisor/ # runtime orchestration loop
114
- │ ├── test/ # Vitest suites
118
+ │ ├── test/ # Vitest suites (68 files / 899 tests)
115
119
  │ ├── project.json # Nx targets
116
120
  │ └── vitest.config.ts
121
+ ├── packages/
122
+ │ └── web-dashboard/ # Next.js 14 web dashboard (aop dashboard)
123
+ ├── docker/
124
+ │ ├── mcp.Dockerfile
125
+ │ ├── mcp.entrypoint.sh
126
+ │ └── mcp.compose.yaml
117
127
  ├── spec-files/
118
128
  │ ├── agentic_orchestrator_spec.md
119
- │ ├── agentic_orchestrator_mcp_formalization_spec.md
120
- │ ├── agentic_orchestrator_single_global_orchestrator_spec.md
121
- │ ├── agentic_orchestrator_oop_refactor_spec.md
129
+ │ ├── agentic_orchestrator_feature_gaps_closure_spec.md
122
130
  │ └── progress.md # implementation continuity log
123
131
  └── README.md
124
132
  ```
@@ -194,10 +202,10 @@ node dist/apps/control-plane/cli/aop.js run -fi ./.aop/features/my_feature/spec.
194
202
  Primary command:
195
203
 
196
204
  ```bash
197
- aop <run|status|resume|stop|delete> [options]
205
+ aop <command> [flags]
198
206
  ```
199
207
 
200
- If no command is provided, the CLI defaults to `run`.
208
+ If no command is provided, the CLI defaults to `run`. Run `aop help` for the full command list, or `aop help <command>` for per-command flags.
201
209
 
202
210
  All commands print JSON to stdout. Errors use:
203
211
 
@@ -205,6 +213,8 @@ All commands print JSON to stdout. Errors use:
205
213
  { "ok": false, "error": { "code": "...", "message": "...", "details": { ... } } }
206
214
  ```
207
215
 
216
+ Available commands: `run`, `status`, `resume`, `stop`, `delete`, `cleanup`, `init`, `dashboard`, `retry`, `send`, `attach`, `help`.
217
+
208
218
  ### `run`
209
219
 
210
220
  Starts orchestration for feature specs and returns runtime metadata (`runtime_status`, `queue_depth`, dashboard snapshot, and active feature list).
@@ -347,25 +357,122 @@ Behavior:
347
357
  - preview reports planned cleanup for feature files, index/session references, locks, blocked queue entries, worktree, and branch
348
358
  - execution removes feature residue from index/runtime state, deletes `.aop/features/<feature_id>`, optionally removes worktree, and optionally removes local branch
349
359
 
360
+ ### `cleanup`
361
+
362
+ Removes merged or stale feature artifacts, worktrees, and index residue. Default behavior is preview-only; destructive execution requires `--yes`.
363
+
364
+ ```bash
365
+ # Preview what would be cleaned
366
+ aop cleanup
367
+
368
+ # Apply cleanup for all eligible (merged/stale) features
369
+ aop cleanup --yes
370
+ ```
371
+
372
+ When `cleanup.auto_after_merge` is enabled in `policy.yaml`, the runtime automatically triggers cleanup after a successful merge.
373
+
374
+ ### `init`
375
+
376
+ Initialises agentic orchestrator configuration in the current directory. Generates `policy.yaml`, `gates.yaml`, `agents.yaml`, and system prompt templates.
377
+
378
+ ```bash
379
+ # Interactive wizard
380
+ aop init
381
+
382
+ # Non-interactive (all defaults)
383
+ aop init --auto
384
+
385
+ # Overwrite existing configuration
386
+ aop init --force
387
+ ```
388
+
389
+ ### `dashboard`
390
+
391
+ Starts the web dashboard server (`packages/web-dashboard/`). Provides a real-time Kanban view of all features, review approval/denial, checkout, and SSE-based live updates.
392
+
393
+ ```bash
394
+ # Start in production mode (default port 3000)
395
+ aop dashboard
396
+
397
+ # Custom port
398
+ aop dashboard --port 8080
399
+
400
+ # Development mode (Next.js hot reload)
401
+ aop dashboard --dev
402
+ ```
403
+
404
+ ### `retry`
405
+
406
+ Retries a failed gate or step for a feature. Use `--force` to reset state and force a gate re-run.
407
+
408
+ ```bash
409
+ aop retry --feature-id my_feature
410
+
411
+ # Force retry regardless of current state
412
+ aop retry --feature-id my_feature --force
413
+ ```
414
+
415
+ ### `send`
416
+
417
+ Sends a message to the active agent session for a feature.
418
+
419
+ ```bash
420
+ aop send --feature-id my_feature --message "focus on the error handling path"
421
+
422
+ # Positional form
423
+ aop send my_feature "focus on the error handling path"
424
+ ```
425
+
426
+ ### `attach`
427
+
428
+ Attaches interactively to the running agent session for a feature (provider support required).
429
+
430
+ ```bash
431
+ aop attach --feature-id my_feature
432
+
433
+ # Positional form
434
+ aop attach my_feature
435
+ ```
436
+
437
+ ### `help`
438
+
439
+ Prints the full command list or detailed help for a specific command.
440
+
441
+ ```bash
442
+ aop help
443
+ aop help run
444
+ aop help dashboard
445
+ ```
446
+
350
447
  ### CLI Options
351
448
 
352
449
  Supported options:
353
450
 
354
451
  | Option | Description |
355
452
  |-------------------------------------------------------|-----------------------------------------------------------------------------------|
356
- | `-fi <path>` | Run exactly one spec file |
357
- | `-fl <path>` | Resolve all `**/*.md` files recursively in a folder (deterministic lexical order) |
358
- | `--agent-provider <codex\\|claude\\|gemini\\|custom\\|kiro-cli\\|copilot>` | Provider selection |
453
+ | `-fi <PATH>` | Run exactly one spec file |
454
+ | `-fl <PATH>` | Resolve all `**/*.md` files recursively in a folder (deterministic lexical order) |
455
+ | `--batch` | Batch-ingest all specs; skip already-active features (`run`) |
456
+ | `--agent-provider <codex\\|claude\\|gemini\\|custom\\|kiro-cli\\|copilot>` | Provider selection |
359
457
  | `--agent-model <model-id>` | Model selection |
360
458
  | `--agent-config <json-object>` | Additional provider-specific agent config (for example command/args payload) |
361
459
  | `--provider-config-env <ENV_VAR>` | Provider auth/config environment variable name |
362
460
  | `--transport <mcp\\|inprocess>` | Tool transport selection (default `mcp`) |
363
461
  | `--takeover-stale-run` | Allow stale run-lease takeover during `run` |
364
- | `--feature-id <id>` | Target feature for `delete` |
365
- | `--dry-run [true\\|false]` | Delete mode selector (defaults to preview behavior) |
366
- | `--yes` | Confirm destructive `delete` execution |
367
- | `--remove-worktree [true\\|false]` | Whether `delete` removes `.worktrees/<feature_id>` (default `true`) |
368
- | `--remove-branch <none\\|safe\\|force>` | Optional local branch cleanup mode for `delete` (default `none`) |
462
+ | `--project <name>` | Select project from `multi-project.yaml` (run, status, resume, retry) |
463
+ | `--feature-id <id>` | Target feature for `delete`, `cleanup`, `retry`, `send`, `attach` |
464
+ | `--dry-run [true\\|false]` | Preview-only mode for `delete` and `cleanup` |
465
+ | `--yes` | Confirm destructive `delete` or `cleanup` execution |
466
+ | `--remove-worktree [true\\|false]` | Whether to remove `.worktrees/<feature_id>` (default `true`) |
467
+ | `--remove-branch <none\\|safe\\|force>` | Local branch cleanup mode (default `none`) |
468
+ | `--summary` | Condensed one-line-per-feature output (`status`) |
469
+ | `--all` | Aggregate across all projects (`status`); delete all features (`delete`) |
470
+ | `--auto` | Non-interactive init with all defaults (`init`) |
471
+ | `--force` | Overwrite existing config (`init`); force retry regardless of state (`retry`) |
472
+ | `--port <number>` | Dashboard listen port (default `3000`) |
473
+ | `--dev` | Start dashboard in Next.js dev mode |
474
+ | `--foreground` | Keep dashboard server in the foreground |
475
+ | `--message <text>` | Message to deliver to agent session (`send`) |
369
476
 
370
477
  Validation behavior:
371
478
 
@@ -414,15 +521,21 @@ Current defaults include:
414
521
  - implementation constraints: `workspace=nx`, `framework=vitest`
415
522
  - merge requires explicit user approval token
416
523
  - supervisor iteration loop is policy-configurable via `supervisor.max_iterations_per_phase` (default `6`)
524
+ - `budget.per_feature_limit_usd` (default `50.00`) and `budget.alert_threshold` (default `0.8`) for cost enforcement
525
+ - `reactions` config: per-event retry rules (`gate_failed`, `agent_stuck`, `collision_detected`, `ready_to_merge`, `changes_requested`)
526
+ - `issue_tracker` config: provider (`github`/`linear`/`jira`), credentials, and field mapping
527
+ - `cleanup.auto_after_merge` / `cleanup.grace_period_seconds`: automatic merged-artifact removal
417
528
 
418
529
  ### Gates (`agentic/orchestrator/gates.yaml`)
419
530
 
420
531
  Default profile modes:
421
532
 
422
- - `fast`
533
+ - `fast` — supports `{base_branch}` / `{feature_id}` interpolation for incremental runs
423
534
  - `full`
424
535
  - `merge`
425
536
 
537
+ Gate steps support `parallel_group` and `depends_on` fields for parallel execution waves. Steps within the same `parallel_group` run concurrently via `Promise.allSettled()`.
538
+
426
539
  Coverage parser:
427
540
 
428
541
  - `lcov` from `coverage/control-plane/lcov.info`
@@ -432,8 +545,17 @@ Coverage parser:
432
545
  - role-specific system prompt paths
433
546
  - default provider/model/config-env fallback values
434
547
  - optional `runtime.provider_configs.<provider>` objects for provider-specific payloads (for example `kiro-cli chat --agent dev`)
548
+ - `worktree.post_create` commands and `worktree.symlinks` for workspace hook automation
435
549
  - stack-specific examples: [`example-configurations/node/`](example-configurations/node) and [`example-configurations/java/`](example-configurations/java)
436
550
 
551
+ ### Multi-Project (`agentic/orchestrator/multi-project.yaml`)
552
+
553
+ Optional. Defines multiple independent projects in one repository. Pass `--project <name>` on the CLI to scope commands to a project. `aop status --all` aggregates across all projects. Each project can override `policy` and `gates` paths.
554
+
555
+ ### Adapter Registry (`agentic/orchestrator/adapters.yaml`)
556
+
557
+ Optional. Registers custom adapters for `notification-channel`, `activity-detector`, and `scm-provider` slots. Resolves at kernel/supervisor boot.
558
+
437
559
  ### Example configuration bundles
438
560
 
439
561
  - overview: [`example-configurations/README.md`](example-configurations/README.md)
@@ -541,7 +663,7 @@ All failures return structured error payloads with stable error codes.
541
663
 
542
664
  ### MCP contract artifacts
543
665
 
544
- - `agentic/orchestrator/tools/catalog.json`: canonical tool list, roles, handler bindings, mutating/idempotency requirements, and schema refs.
666
+ - `agentic/orchestrator/tools/catalog.json`: canonical tool list (33 tools), roles, handler bindings, mutating/idempotency requirements, and schema refs.
545
667
  - `agentic/orchestrator/tools/protocol.json`: pinned MCP protocol + SDK metadata and required transports.
546
668
  - `agentic/orchestrator/tools/errors.schema.json`: normalized error envelope contract.
547
669
  - `agentic/orchestrator/tools/schemas/input/*.schema.json`: per-tool request schemas.
@@ -554,7 +676,7 @@ npm run validate:mcp-contracts
554
676
  npm run validate:architecture
555
677
  ```
556
678
 
557
- This verifies protocol pinning, `catalog.json`/`tools.md`/schema parity, and enforced layering boundaries before CI or release.
679
+ The MCP contracts validator checks: protocol pinning, `catalog.json`/`tools.md`/schema parity, mutating-tool cross-check against `TOOL_BEHAVIOR_METADATA`, AJV schema compilation (draft-07 and 2020-12), orphan schema detection, and `supported_roles` validation. The architecture validator enforces layer dependency rules across 93 classified source files.
558
680
 
559
681
  ### Tool definitions
560
682
 
@@ -578,6 +700,7 @@ This verifies protocol pinning, `catalog.json`/`tools.md`/schema parity, and enf
578
700
  | `repo.diff_bundle` | Return review bundle (stat/full diff/files/latest gate summary) | No | orchestrator |
579
701
  | `feature.ready_to_merge` | Commit + merge promotion after required gates and approval checks | Yes | orchestrator, system |
580
702
  | `feature.delete` | Delete feature runtime artifacts and optional local git/worktree state | Yes | orchestrator, system |
703
+ | `feature.send_message` | Send a message to the active agent session for a feature | Yes | orchestrator, system |
581
704
  | `gates.list` | List available gate profiles/modes | No | orchestrator, builder, qa |
582
705
  | `gates.run` | Execute gate profile/mode, capture logs/evidence, enforce thresholds | Yes | builder, qa, orchestrator |
583
706
  | `evidence.latest` | Return latest evidence summary for feature | No | qa, orchestrator |
@@ -586,8 +709,12 @@ This verifies protocol pinning, `catalog.json`/`tools.md`/schema parity, and enf
586
709
  | `locks.acquire` | Acquire/renew resource lease lock for feature | Yes | orchestrator, system |
587
710
  | `locks.release` | Release held resource lock | Yes | orchestrator, system |
588
711
  | `collisions.scan` | Compute collision matrix across accepted plans | No | planner, orchestrator |
589
- | `report.dashboard` | Return global orchestration summary | No | orchestrator |
712
+ | `report.dashboard` | Return global orchestration summary (includes cost and PR metadata) | No | orchestrator |
590
713
  | `report.feature_summary` | Return per-feature state/diff/evidence summary | No | orchestrator |
714
+ | `cost.record` | Record a cost entry for a feature (token usage, API cost) | Yes | orchestrator, system |
715
+ | `cost.get` | Return accumulated cost for a feature | No | orchestrator, system |
716
+ | `performance.record_outcome` | Record feature outcome (status, retries, duration, cost) for analytics | Yes | orchestrator, system |
717
+ | `performance.get_analytics` | Return aggregated performance metrics by provider/model | No | orchestrator, system |
591
718
 
592
719
  ### Role expectations at a glance
593
720
 
@@ -601,9 +728,11 @@ This verifies protocol pinning, `catalog.json`/`tools.md`/schema parity, and enf
601
728
 
602
729
  ## Quality & Testing
603
730
 
731
+ ## Quality & Testing
732
+
604
733
  - framework: Vitest (`apps/control-plane/vitest.config.ts`)
605
734
  - coverage output: `coverage/control-plane`
606
- - configured thresholds: lines/branches/functions/statements at `90%`
735
+ - configured thresholds: lines/branches/functions/statements at `90%` (enforced per-file)
607
736
  - workspace tooling: Nx targets (`run`, `build`, `test`, `typecheck`)
608
737
  - Nx launcher: use `npm run nx -- <target>`; this workspace defaults to `NX_DAEMON=false` and `NX_ISOLATE_PLUGINS=false` to avoid Unix-socket worker failures in restricted environments.
609
738
  - Shell setup for raw `npx nx` commands:
@@ -619,10 +748,22 @@ This verifies protocol pinning, `catalog.json`/`tools.md`/schema parity, and enf
619
748
  From [progress.md](spec-files/progress.md):
620
749
 
621
750
  - Nx + TypeScript + Vitest migration complete
622
- - Kernel + supervisor + CLI implemented end-to-end
623
- - strict linting is enforced (`npm run lint`) and build is lint-gated
624
- - `npm run typecheck` passes
625
- - architecture boundary checks are CI-enforced via `npm run validate:architecture`
751
+ - Kernel + supervisor + CLI implemented end-to-end with 12 commands
752
+ - 33 MCP tools registered across 5 roles; all schemas AJV-validated in CI
753
+ - Web dashboard (`packages/web-dashboard/`) with SSE stream, Kanban UI, and review/checkout APIs
754
+ - Notification system (desktop, Slack, webhook, in-process) with 4-tier priority routing
755
+ - Cost tracking and budget enforcement (`cost.json` per feature, `PAUSED_BUDGET` status)
756
+ - Agent performance analytics with aggregates by provider/model
757
+ - Dependency-aware feature scheduling with circular detection and auto-promotion on merge
758
+ - Parallel gate execution with `parallel_group` / `depends_on` wave scheduling
759
+ - CI failure auto-remediation (`reactions-service`) with configurable retry and escalation
760
+ - PR lifecycle integration with merge scoring and `changes_requested` reaction
761
+ - Multi-project support (`multi-project.yaml`, `--project` flag, per-project lease isolation)
762
+ - Hash-based multi-instance isolation (SHA256 instance IDs, namespaced run-lease paths)
763
+ - Linear and Jira issue tracker adapters with full API-backed status sync
764
+ - Architecture boundary checks CI-enforced via `npm run validate:architecture` (93 files, 0 violations)
765
+ - Strict linting enforced (`npm run lint`) and build is lint-gated
766
+ - `npm run typecheck` passes; `npm test` passes (68 test files / 899 tests; all per-file coverage ≥ 90%)
626
767
 
627
768
  Environment note observed during implementation sessions:
628
769
 
@@ -0,0 +1,3 @@
1
+ notification-channel: desktop
2
+ activity-detector: claude-jsonl
3
+ scm-provider: github
@@ -1,4 +1,10 @@
1
1
  version: 1
2
+ # Gate commands support {base_branch} interpolation for incremental test selection:
3
+ # fast: "npx vitest run --changed {base_branch}" # runs only affected tests
4
+ # full: "npx vitest run" # always runs complete suite
5
+ #
6
+ # Parallel execution: steps with the same `parallel_group` run concurrently.
7
+ # Use `depends_on` to declare ordering constraints between steps.
2
8
  profiles:
3
9
  default:
4
10
  modes:
@@ -23,6 +29,47 @@ profiles:
23
29
  coverage_branch_min: 0.9
24
30
  coverage_line_target: 1.0
25
31
  coverage_branch_target: 1.0
32
+ parallel_example:
33
+ modes:
34
+ fast:
35
+ - name: lint
36
+ cmd: ["npx", "eslint", "."]
37
+ parallel_group: static_checks
38
+ timeout_seconds: 300
39
+ - name: typecheck
40
+ cmd: ["npx", "tsc", "--noEmit"]
41
+ parallel_group: static_checks
42
+ timeout_seconds: 300
43
+ - name: test
44
+ cmd: ["npx", "vitest", "run", "--changed", "{base_branch}"]
45
+ depends_on: [lint, typecheck]
46
+ timeout_seconds: 600
47
+ full:
48
+ - name: lint
49
+ cmd: ["npx", "eslint", "."]
50
+ parallel_group: static_checks
51
+ timeout_seconds: 300
52
+ - name: typecheck
53
+ cmd: ["npx", "tsc", "--noEmit"]
54
+ parallel_group: static_checks
55
+ timeout_seconds: 300
56
+ - name: test
57
+ cmd: ["npx", "vitest", "run"]
58
+ depends_on: [lint, typecheck]
59
+ timeout_seconds: 1200
60
+ merge:
61
+ - name: merge_safety
62
+ cmd: ["npx", "vitest", "run"]
63
+ timeout_seconds: 1200
64
+ parsers:
65
+ coverage:
66
+ type: lcov
67
+ path: coverage/control-plane/lcov.info
68
+ thresholds:
69
+ coverage_line_min: 0.9
70
+ coverage_branch_min: 0.9
71
+ coverage_line_target: 1.0
72
+ coverage_branch_target: 1.0
26
73
  capabilities:
27
74
  - none
28
75
  - lcov
@@ -78,11 +78,37 @@ merge_policy:
78
78
  - rebase
79
79
  worktree:
80
80
  base_branch: main
81
+ # post_create: # optional - commands to run after worktree creation
82
+ # - "npm ci"
83
+ # symlinks: # optional - files to symlink from main repo into each worktree
84
+ # - .env
85
+ # - .claude
81
86
  recovery:
82
87
  orchestrator_session_reattach_timeout_ms: 5000
83
88
  orphan_session_cleanup_enabled: true
84
89
  supervisor:
85
90
  max_iterations_per_phase: 6
91
+ max_parallel_gate_runs: 2
92
+ agent_idle_threshold_ms: 300000
93
+ cleanup:
94
+ auto_after_merge: false
95
+ grace_period_seconds: 3600
96
+ notifications:
97
+ enabled: false
98
+ channels:
99
+ desktop:
100
+ enabled: false
101
+ slack:
102
+ enabled: false
103
+ webhook: ""
104
+ channel: "#aop-alerts"
105
+ webhook:
106
+ enabled: false
107
+ url: ""
108
+ routing:
109
+ critical: [desktop, slack]
110
+ warning: [slack, desktop]
111
+ info: [slack]
86
112
  rbac:
87
113
  orchestrator:
88
114
  - feature.discover_specs
@@ -113,6 +139,11 @@ rbac:
113
139
  - report.feature_summary
114
140
  - feature.ready_to_merge
115
141
  - feature.delete
142
+ - feature.send_message
143
+ - cost.record
144
+ - cost.get
145
+ - performance.record_outcome
146
+ - performance.get_analytics
116
147
  planner:
117
148
  - feature.get_context
118
149
  - feature.state_get
@@ -121,6 +152,7 @@ rbac:
121
152
  - collisions.scan
122
153
  - repo.read_file
123
154
  - repo.search
155
+ - performance.get_analytics
124
156
  builder:
125
157
  - feature.get_context
126
158
  - feature.state_get
@@ -130,6 +162,7 @@ rbac:
130
162
  - repo.read_file
131
163
  - repo.search
132
164
  - gates.run
165
+ - performance.get_analytics
133
166
  qa:
134
167
  - feature.get_context
135
168
  - feature.state_get
@@ -141,5 +174,61 @@ rbac:
141
174
  - evidence.latest
142
175
  - qa.test_index_get
143
176
  - qa.test_index_update
177
+ - performance.get_analytics
144
178
  system:
145
179
  - "*"
180
+
181
+ dashboard:
182
+ enabled: true
183
+ port: 3000
184
+ reactions:
185
+ gate_failed:
186
+ enabled: true
187
+ max_retries: 2
188
+ action: retry_with_agent_repair
189
+ escalate_after: 2
190
+ retry_delay_ms: 30000
191
+ agent_stuck:
192
+ enabled: true
193
+ action: notify_only
194
+ idle_threshold_ms: 300000
195
+ escalate_after: 2
196
+ collision_detected:
197
+ enabled: true
198
+ action: notify_only
199
+ ready_to_merge:
200
+ enabled: true
201
+ action: notify_only
202
+ changes_requested:
203
+ enabled: false
204
+ action: send_review_context_to_agent
205
+ escalate_after: 2
206
+
207
+ budget:
208
+ per_feature_limit_usd: 50.00
209
+ alert_threshold: 0.8
210
+
211
+ issue_tracker:
212
+ enabled: false
213
+ type: github
214
+ config:
215
+ repo: ""
216
+ # linear example:
217
+ # enabled: true
218
+ # type: linear
219
+ # config:
220
+ # token: "${LINEAR_API_TOKEN}"
221
+ # base_url: "https://api.linear.app/graphql"
222
+ # state_id_backlog: ""
223
+ # state_id_in_progress: ""
224
+ # state_id_in_review: ""
225
+ # state_id_done: ""
226
+ # jira example:
227
+ # enabled: true
228
+ # type: jira
229
+ # config:
230
+ # base_url: "https://your-org.atlassian.net"
231
+ # email: "bot@example.com"
232
+ # token: "${JIRA_API_TOKEN}"
233
+ # transition_in_progress: "In Progress"
234
+ # transition_done: "Done"