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