agentic-orchestrator 0.1.6 → 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (438) hide show
  1. package/.prettierignore +10 -0
  2. package/.prettierrc.json +24 -0
  3. package/CLAUDE.md +3 -2
  4. package/README.md +71 -48
  5. package/agentic/orchestrator/defaults/policy.defaults.yaml +1 -1
  6. package/agentic/orchestrator/prompts/planner.system.md +1 -0
  7. package/agentic/orchestrator/schemas/agents.schema.json +5 -22
  8. package/agentic/orchestrator/schemas/gates.schema.json +4 -19
  9. package/agentic/orchestrator/schemas/index.schema.json +3 -14
  10. package/agentic/orchestrator/schemas/multi-project.schema.json +2 -8
  11. package/agentic/orchestrator/schemas/plan.schema.json +6 -26
  12. package/agentic/orchestrator/schemas/policy.schema.json +19 -81
  13. package/agentic/orchestrator/schemas/policy.user.schema.json +1 -5
  14. package/agentic/orchestrator/schemas/qa_test_index.schema.json +5 -29
  15. package/agentic/orchestrator/schemas/state.schema.json +11 -61
  16. package/agentic/orchestrator/tools/catalog.json +33 -164
  17. package/agentic/orchestrator/tools/schemas/input/evidence.latest.input.schema.json +1 -3
  18. package/agentic/orchestrator/tools/schemas/input/feature.delete.input.schema.json +1 -5
  19. package/agentic/orchestrator/tools/schemas/input/feature.get_context.input.schema.json +1 -3
  20. package/agentic/orchestrator/tools/schemas/input/feature.init.input.schema.json +1 -4
  21. package/agentic/orchestrator/tools/schemas/input/feature.log_append.input.schema.json +1 -5
  22. package/agentic/orchestrator/tools/schemas/input/feature.ready_to_merge.input.schema.json +1 -6
  23. package/agentic/orchestrator/tools/schemas/input/feature.state_get.input.schema.json +1 -3
  24. package/agentic/orchestrator/tools/schemas/input/feature.state_patch.input.schema.json +1 -5
  25. package/agentic/orchestrator/tools/schemas/input/gates.run.input.schema.json +1 -5
  26. package/agentic/orchestrator/tools/schemas/input/locks.acquire.input.schema.json +1 -5
  27. package/agentic/orchestrator/tools/schemas/input/locks.release.input.schema.json +1 -5
  28. package/agentic/orchestrator/tools/schemas/input/performance.record_outcome.input.schema.json +10 -1
  29. package/agentic/orchestrator/tools/schemas/input/plan.get.input.schema.json +1 -3
  30. package/agentic/orchestrator/tools/schemas/input/plan.submit.input.schema.json +1 -5
  31. package/agentic/orchestrator/tools/schemas/input/plan.update.input.schema.json +1 -6
  32. package/agentic/orchestrator/tools/schemas/input/qa.test_index_get.input.schema.json +1 -3
  33. package/agentic/orchestrator/tools/schemas/input/qa.test_index_update.input.schema.json +1 -6
  34. package/agentic/orchestrator/tools/schemas/input/repo.apply_patch.input.schema.json +1 -5
  35. package/agentic/orchestrator/tools/schemas/input/repo.diff.input.schema.json +1 -3
  36. package/agentic/orchestrator/tools/schemas/input/repo.diff_bundle.input.schema.json +1 -3
  37. package/agentic/orchestrator/tools/schemas/input/repo.ensure_worktree.input.schema.json +1 -4
  38. package/agentic/orchestrator/tools/schemas/input/repo.read_file.input.schema.json +1 -4
  39. package/agentic/orchestrator/tools/schemas/input/repo.search.input.schema.json +1 -4
  40. package/agentic/orchestrator/tools/schemas/input/repo.status.input.schema.json +1 -3
  41. package/agentic/orchestrator/tools/schemas/input/report.feature_summary.input.schema.json +1 -3
  42. package/agentic/orchestrator/tools/schemas/output/collisions.scan.output.schema.json +1 -3
  43. package/agentic/orchestrator/tools/schemas/output/evidence.latest.output.schema.json +1 -4
  44. package/agentic/orchestrator/tools/schemas/output/feature.delete.output.schema.json +4 -20
  45. package/agentic/orchestrator/tools/schemas/output/feature.discover_specs.output.schema.json +2 -7
  46. package/agentic/orchestrator/tools/schemas/output/feature.get_context.output.schema.json +1 -8
  47. package/agentic/orchestrator/tools/schemas/output/feature.init.output.schema.json +1 -5
  48. package/agentic/orchestrator/tools/schemas/output/feature.log_append.output.schema.json +1 -5
  49. package/agentic/orchestrator/tools/schemas/output/feature.ready_to_merge.output.schema.json +1 -6
  50. package/agentic/orchestrator/tools/schemas/output/feature.state_get.output.schema.json +1 -4
  51. package/agentic/orchestrator/tools/schemas/output/feature.state_patch.output.schema.json +1 -5
  52. package/agentic/orchestrator/tools/schemas/output/gates.list.output.schema.json +2 -7
  53. package/agentic/orchestrator/tools/schemas/output/gates.run.output.schema.json +1 -8
  54. package/agentic/orchestrator/tools/schemas/output/locks.acquire.output.schema.json +1 -7
  55. package/agentic/orchestrator/tools/schemas/output/locks.release.output.schema.json +1 -5
  56. package/agentic/orchestrator/tools/schemas/output/performance.get_analytics.output.schema.json +22 -2
  57. package/agentic/orchestrator/tools/schemas/output/plan.get.output.schema.json +1 -4
  58. package/agentic/orchestrator/tools/schemas/output/plan.submit.output.schema.json +1 -5
  59. package/agentic/orchestrator/tools/schemas/output/plan.update.output.schema.json +1 -5
  60. package/agentic/orchestrator/tools/schemas/output/qa.test_index_get.output.schema.json +1 -5
  61. package/agentic/orchestrator/tools/schemas/output/qa.test_index_update.output.schema.json +1 -4
  62. package/agentic/orchestrator/tools/schemas/output/repo.apply_patch.output.schema.json +1 -6
  63. package/agentic/orchestrator/tools/schemas/output/repo.diff.output.schema.json +1 -4
  64. package/agentic/orchestrator/tools/schemas/output/repo.diff_bundle.output.schema.json +1 -7
  65. package/agentic/orchestrator/tools/schemas/output/repo.ensure_worktree.output.schema.json +1 -6
  66. package/agentic/orchestrator/tools/schemas/output/repo.read_file.output.schema.json +1 -5
  67. package/agentic/orchestrator/tools/schemas/output/repo.search.output.schema.json +1 -5
  68. package/agentic/orchestrator/tools/schemas/output/repo.status.output.schema.json +1 -5
  69. package/agentic/orchestrator/tools/schemas/output/report.dashboard.output.schema.json +1 -4
  70. package/apps/control-plane/scripts/validate-architecture-rules.mjs +16 -5
  71. package/apps/control-plane/scripts/validate-docker-mcp-contract.mjs +30 -8
  72. package/apps/control-plane/scripts/validate-mcp-contracts.ts +13 -7
  73. package/apps/control-plane/src/application/adapters/adapter-registry.ts +35 -15
  74. package/apps/control-plane/src/application/multi-project-loader.ts +27 -10
  75. package/apps/control-plane/src/application/services/activity-monitor-service.ts +26 -14
  76. package/apps/control-plane/src/application/services/collision-queue-service.ts +31 -17
  77. package/apps/control-plane/src/application/services/cost-tracking-service.ts +23 -16
  78. package/apps/control-plane/src/application/services/dependency-scheduler-service.ts +12 -4
  79. package/apps/control-plane/src/application/services/feature-deletion-service.ts +94 -58
  80. package/apps/control-plane/src/application/services/feature-lifecycle-service.ts +19 -13
  81. package/apps/control-plane/src/application/services/feature-state-service.ts +29 -19
  82. package/apps/control-plane/src/application/services/gate-interpolation-service.ts +7 -2
  83. package/apps/control-plane/src/application/services/gate-service.ts +64 -41
  84. package/apps/control-plane/src/application/services/instance-isolation-service.ts +1 -1
  85. package/apps/control-plane/src/application/services/issue-tracker-service.ts +49 -38
  86. package/apps/control-plane/src/application/services/lock-service.ts +75 -49
  87. package/apps/control-plane/src/application/services/merge-service.ts +91 -50
  88. package/apps/control-plane/src/application/services/notifier-service.ts +42 -20
  89. package/apps/control-plane/src/application/services/patch-service.ts +73 -44
  90. package/apps/control-plane/src/application/services/performance-analytics-service.ts +8 -6
  91. package/apps/control-plane/src/application/services/plan-service.ts +148 -89
  92. package/apps/control-plane/src/application/services/policy-loader-service.ts +10 -4
  93. package/apps/control-plane/src/application/services/pr-monitor-service.ts +33 -14
  94. package/apps/control-plane/src/application/services/qa-index-service.ts +20 -16
  95. package/apps/control-plane/src/application/services/reactions-service.ts +30 -15
  96. package/apps/control-plane/src/application/services/reporting-service.ts +16 -12
  97. package/apps/control-plane/src/application/services/run-lease-service.ts +138 -81
  98. package/apps/control-plane/src/application/tools/tool-metadata.ts +5 -5
  99. package/apps/control-plane/src/application/tools/tool-router.ts +6 -3
  100. package/apps/control-plane/src/cli/aop.ts +2 -2
  101. package/apps/control-plane/src/cli/attach-command-handler.ts +9 -9
  102. package/apps/control-plane/src/cli/cleanup-command-handler.ts +16 -11
  103. package/apps/control-plane/src/cli/cli-argument-parser.ts +6 -3
  104. package/apps/control-plane/src/cli/dashboard-command-handler.ts +28 -8
  105. package/apps/control-plane/src/cli/delete-command-handler.ts +7 -7
  106. package/apps/control-plane/src/cli/env-file.ts +115 -0
  107. package/apps/control-plane/src/cli/help-command-handler.ts +61 -32
  108. package/apps/control-plane/src/cli/init-command-handler.ts +182 -56
  109. package/apps/control-plane/src/cli/io.ts +7 -3
  110. package/apps/control-plane/src/cli/resume-command-handler.ts +21 -13
  111. package/apps/control-plane/src/cli/retry-command-handler.ts +12 -11
  112. package/apps/control-plane/src/cli/run-command-handler.ts +12 -8
  113. package/apps/control-plane/src/cli/send-command-handler.ts +6 -6
  114. package/apps/control-plane/src/cli/spec-ingestion-service.ts +14 -8
  115. package/apps/control-plane/src/cli/spec-input-resolver.ts +6 -1
  116. package/apps/control-plane/src/cli/spec-utils.ts +2 -2
  117. package/apps/control-plane/src/cli/status-command-handler.ts +13 -12
  118. package/apps/control-plane/src/cli/tooling.ts +3 -3
  119. package/apps/control-plane/src/cli/types.ts +1 -1
  120. package/apps/control-plane/src/core/collisions.ts +27 -10
  121. package/apps/control-plane/src/core/constants.ts +13 -7
  122. package/apps/control-plane/src/core/error-codes.ts +1 -1
  123. package/apps/control-plane/src/core/fs.ts +11 -5
  124. package/apps/control-plane/src/core/gates.ts +53 -27
  125. package/apps/control-plane/src/core/git.ts +18 -6
  126. package/apps/control-plane/src/core/kernel.ts +513 -227
  127. package/apps/control-plane/src/core/patch.ts +7 -3
  128. package/apps/control-plane/src/core/path-layout.ts +5 -1
  129. package/apps/control-plane/src/core/path-rules.ts +19 -5
  130. package/apps/control-plane/src/core/qa-index.ts +26 -12
  131. package/apps/control-plane/src/core/response.ts +9 -6
  132. package/apps/control-plane/src/core/schemas.ts +29 -10
  133. package/apps/control-plane/src/core/tool-caller.ts +1 -1
  134. package/apps/control-plane/src/core/workspace-hooks.ts +5 -5
  135. package/apps/control-plane/src/index.ts +3 -9
  136. package/apps/control-plane/src/interfaces/cli/bootstrap.ts +79 -35
  137. package/apps/control-plane/src/mcp/kernel-tool-executor.ts +7 -3
  138. package/apps/control-plane/src/mcp/mcp-server-adapter.ts +12 -10
  139. package/apps/control-plane/src/mcp/operation-ledger.ts +18 -8
  140. package/apps/control-plane/src/mcp/protocol-contract.ts +2 -2
  141. package/apps/control-plane/src/mcp/runtime-factory.ts +15 -6
  142. package/apps/control-plane/src/mcp/token-auth-verifier.ts +3 -2
  143. package/apps/control-plane/src/mcp/token-claims-validator.ts +11 -7
  144. package/apps/control-plane/src/mcp/tool-authorizer.ts +1 -3
  145. package/apps/control-plane/src/mcp/tool-client.ts +17 -5
  146. package/apps/control-plane/src/mcp/tool-contract-validator.ts +17 -8
  147. package/apps/control-plane/src/mcp/tool-registry-loader.ts +7 -3
  148. package/apps/control-plane/src/mcp/tool-runtime.ts +66 -39
  149. package/apps/control-plane/src/mcp/tools-markdown-generator.ts +6 -1
  150. package/apps/control-plane/src/providers/providers.ts +137 -54
  151. package/apps/control-plane/src/supervisor/build-wave-executor.ts +44 -25
  152. package/apps/control-plane/src/supervisor/planning-wave-executor.ts +46 -33
  153. package/apps/control-plane/src/supervisor/prompt-bundle-loader.ts +1 -1
  154. package/apps/control-plane/src/supervisor/qa-wave-executor.ts +38 -23
  155. package/apps/control-plane/src/supervisor/run-coordinator.ts +71 -36
  156. package/apps/control-plane/src/supervisor/runtime.ts +59 -35
  157. package/apps/control-plane/src/supervisor/session-orchestrator.ts +48 -31
  158. package/apps/control-plane/src/supervisor/types.ts +22 -7
  159. package/apps/control-plane/src/supervisor/worker-decision-loop.ts +30 -20
  160. package/apps/control-plane/test/activity-monitor.spec.ts +54 -30
  161. package/apps/control-plane/test/adapter-registry.spec.ts +5 -5
  162. package/apps/control-plane/test/aop.spec.ts +4 -4
  163. package/apps/control-plane/test/batch-operations.spec.ts +20 -18
  164. package/apps/control-plane/test/bootstrap-attach.spec.ts +52 -19
  165. package/apps/control-plane/test/bootstrap-edge-cases.spec.ts +58 -27
  166. package/apps/control-plane/test/bootstrap.spec.ts +72 -40
  167. package/apps/control-plane/test/cleanup-command.spec.ts +86 -32
  168. package/apps/control-plane/test/cli-helpers.spec.ts +119 -66
  169. package/apps/control-plane/test/cli.spec.ts +1 -1
  170. package/apps/control-plane/test/cli.unit.spec.ts +226 -167
  171. package/apps/control-plane/test/collision-queue.spec.ts +49 -40
  172. package/apps/control-plane/test/collisions.spec.ts +30 -30
  173. package/apps/control-plane/test/core-utils.spec.ts +29 -15
  174. package/apps/control-plane/test/cost-tracking.spec.ts +38 -22
  175. package/apps/control-plane/test/dashboard-api.integration.spec.ts +68 -36
  176. package/apps/control-plane/test/dashboard-client.spec.ts +18 -12
  177. package/apps/control-plane/test/dashboard-command.spec.ts +11 -7
  178. package/apps/control-plane/test/delete-command-handler.spec.ts +49 -41
  179. package/apps/control-plane/test/dependency-scheduler.spec.ts +47 -20
  180. package/apps/control-plane/test/epoch-tracking.spec.ts +9 -9
  181. package/apps/control-plane/test/feature-deletion-service.spec.ts +60 -52
  182. package/apps/control-plane/test/feature-lifecycle.spec.ts +36 -17
  183. package/apps/control-plane/test/gates.spec.ts +101 -81
  184. package/apps/control-plane/test/git-spawn-error.spec.ts +1 -1
  185. package/apps/control-plane/test/helpers.ts +10 -6
  186. package/apps/control-plane/test/incremental-gates.spec.ts +59 -20
  187. package/apps/control-plane/test/init-wizard.spec.ts +328 -68
  188. package/apps/control-plane/test/instance-isolation.spec.ts +43 -10
  189. package/apps/control-plane/test/issue-tracker.spec.ts +368 -128
  190. package/apps/control-plane/test/kernel-collision-replay.spec.ts +50 -29
  191. package/apps/control-plane/test/kernel.branches.spec.ts +64 -40
  192. package/apps/control-plane/test/kernel.coverage.spec.ts +85 -49
  193. package/apps/control-plane/test/kernel.coverage2.spec.ts +109 -65
  194. package/apps/control-plane/test/kernel.spec.ts +134 -51
  195. package/apps/control-plane/test/lock-service.spec.ts +92 -68
  196. package/apps/control-plane/test/mcp-helpers.spec.ts +53 -39
  197. package/apps/control-plane/test/mcp.spec.ts +231 -115
  198. package/apps/control-plane/test/merge-service.spec.ts +142 -94
  199. package/apps/control-plane/test/multi-project.spec.ts +28 -22
  200. package/apps/control-plane/test/notifier-service.spec.ts +136 -92
  201. package/apps/control-plane/test/parallel-gates.spec.ts +51 -35
  202. package/apps/control-plane/test/patch-service.spec.ts +128 -48
  203. package/apps/control-plane/test/performance-analytics.spec.ts +99 -63
  204. package/apps/control-plane/test/plan-service.spec.ts +50 -39
  205. package/apps/control-plane/test/planning-wave-executor.spec.ts +95 -71
  206. package/apps/control-plane/test/policy-loader-service.spec.ts +41 -19
  207. package/apps/control-plane/test/pr-monitor.spec.ts +113 -64
  208. package/apps/control-plane/test/providers.spec.ts +208 -104
  209. package/apps/control-plane/test/qa-index-service.spec.ts +31 -33
  210. package/apps/control-plane/test/qa-index.spec.ts +58 -61
  211. package/apps/control-plane/test/reactions.spec.ts +88 -45
  212. package/apps/control-plane/test/response.spec.ts +5 -5
  213. package/apps/control-plane/test/resume-command.spec.ts +121 -80
  214. package/apps/control-plane/test/run-coordinator.spec.ts +205 -136
  215. package/apps/control-plane/test/schema-date-time.spec.ts +49 -41
  216. package/apps/control-plane/test/service-retry-paths.spec.ts +77 -57
  217. package/apps/control-plane/test/services.spec.ts +147 -129
  218. package/apps/control-plane/test/session-management.spec.ts +136 -74
  219. package/apps/control-plane/test/spec-ingestion.spec.ts +23 -21
  220. package/apps/control-plane/test/spec-input-resolver.spec.ts +11 -10
  221. package/apps/control-plane/test/supervisor-collaborators.spec.ts +168 -121
  222. package/apps/control-plane/test/supervisor.calltool.spec.ts +21 -18
  223. package/apps/control-plane/test/supervisor.spec.ts +67 -43
  224. package/apps/control-plane/test/supervisor.unit.spec.ts +195 -126
  225. package/apps/control-plane/test/token-auth-verifier.spec.ts +29 -14
  226. package/apps/control-plane/test/tool-registry-loader.spec.ts +51 -27
  227. package/apps/control-plane/test/tool-runtime.spec.ts +63 -46
  228. package/apps/control-plane/test/worker-decision-loop.spec.ts +143 -122
  229. package/apps/control-plane/test/workspace-hooks.spec.ts +61 -23
  230. package/apps/control-plane/tsconfig.build.json +2 -7
  231. package/apps/control-plane/tsconfig.json +1 -5
  232. package/apps/control-plane/vitest.config.ts +7 -7
  233. package/config/agentic/orchestrator/adapters.yaml +3 -0
  234. package/config/agentic/orchestrator/agents.yaml +14 -0
  235. package/config/agentic/orchestrator/gates.yaml +28 -0
  236. package/config/agentic/orchestrator/policy.yaml +22 -0
  237. package/config/agentic/orchestrator/prompts/builder.system.md +1 -0
  238. package/config/agentic/orchestrator/prompts/planner.system.md +16 -0
  239. package/config/agentic/orchestrator/prompts/qa.system.md +1 -0
  240. package/dist/apps/control-plane/application/adapters/adapter-registry.js +12 -5
  241. package/dist/apps/control-plane/application/adapters/adapter-registry.js.map +1 -1
  242. package/dist/apps/control-plane/application/multi-project-loader.js +26 -9
  243. package/dist/apps/control-plane/application/multi-project-loader.js.map +1 -1
  244. package/dist/apps/control-plane/application/services/activity-monitor-service.js +7 -7
  245. package/dist/apps/control-plane/application/services/activity-monitor-service.js.map +1 -1
  246. package/dist/apps/control-plane/application/services/collision-queue-service.js +7 -7
  247. package/dist/apps/control-plane/application/services/collision-queue-service.js.map +1 -1
  248. package/dist/apps/control-plane/application/services/cost-tracking-service.js +6 -8
  249. package/dist/apps/control-plane/application/services/cost-tracking-service.js.map +1 -1
  250. package/dist/apps/control-plane/application/services/dependency-scheduler-service.js.map +1 -1
  251. package/dist/apps/control-plane/application/services/feature-deletion-service.js +37 -29
  252. package/dist/apps/control-plane/application/services/feature-deletion-service.js.map +1 -1
  253. package/dist/apps/control-plane/application/services/feature-lifecycle-service.js +10 -10
  254. package/dist/apps/control-plane/application/services/feature-lifecycle-service.js.map +1 -1
  255. package/dist/apps/control-plane/application/services/feature-state-service.js +11 -11
  256. package/dist/apps/control-plane/application/services/feature-state-service.js.map +1 -1
  257. package/dist/apps/control-plane/application/services/gate-interpolation-service.js +3 -1
  258. package/dist/apps/control-plane/application/services/gate-interpolation-service.js.map +1 -1
  259. package/dist/apps/control-plane/application/services/gate-service.js +26 -26
  260. package/dist/apps/control-plane/application/services/gate-service.js.map +1 -1
  261. package/dist/apps/control-plane/application/services/instance-isolation-service.js +1 -1
  262. package/dist/apps/control-plane/application/services/instance-isolation-service.js.map +1 -1
  263. package/dist/apps/control-plane/application/services/issue-tracker-service.js +25 -15
  264. package/dist/apps/control-plane/application/services/issue-tracker-service.js.map +1 -1
  265. package/dist/apps/control-plane/application/services/lock-service.js +32 -32
  266. package/dist/apps/control-plane/application/services/lock-service.js.map +1 -1
  267. package/dist/apps/control-plane/application/services/merge-service.js +41 -27
  268. package/dist/apps/control-plane/application/services/merge-service.js.map +1 -1
  269. package/dist/apps/control-plane/application/services/notifier-service.js +29 -15
  270. package/dist/apps/control-plane/application/services/notifier-service.js.map +1 -1
  271. package/dist/apps/control-plane/application/services/patch-service.js +21 -19
  272. package/dist/apps/control-plane/application/services/patch-service.js.map +1 -1
  273. package/dist/apps/control-plane/application/services/performance-analytics-service.js +4 -4
  274. package/dist/apps/control-plane/application/services/performance-analytics-service.js.map +1 -1
  275. package/dist/apps/control-plane/application/services/plan-service.js +33 -33
  276. package/dist/apps/control-plane/application/services/plan-service.js.map +1 -1
  277. package/dist/apps/control-plane/application/services/policy-loader-service.js.map +1 -1
  278. package/dist/apps/control-plane/application/services/pr-monitor-service.js +23 -11
  279. package/dist/apps/control-plane/application/services/pr-monitor-service.js.map +1 -1
  280. package/dist/apps/control-plane/application/services/qa-index-service.js +11 -11
  281. package/dist/apps/control-plane/application/services/qa-index-service.js.map +1 -1
  282. package/dist/apps/control-plane/application/services/reactions-service.js +13 -9
  283. package/dist/apps/control-plane/application/services/reactions-service.js.map +1 -1
  284. package/dist/apps/control-plane/application/services/reporting-service.js +11 -9
  285. package/dist/apps/control-plane/application/services/reporting-service.js.map +1 -1
  286. package/dist/apps/control-plane/application/services/run-lease-service.js +34 -33
  287. package/dist/apps/control-plane/application/services/run-lease-service.js.map +1 -1
  288. package/dist/apps/control-plane/application/tools/tool-metadata.js +2 -2
  289. package/dist/apps/control-plane/application/tools/tool-router.js.map +1 -1
  290. package/dist/apps/control-plane/cli/attach-command-handler.js +9 -9
  291. package/dist/apps/control-plane/cli/cleanup-command-handler.js +11 -9
  292. package/dist/apps/control-plane/cli/cleanup-command-handler.js.map +1 -1
  293. package/dist/apps/control-plane/cli/cli-argument-parser.js +4 -3
  294. package/dist/apps/control-plane/cli/cli-argument-parser.js.map +1 -1
  295. package/dist/apps/control-plane/cli/dashboard-command-handler.js +23 -7
  296. package/dist/apps/control-plane/cli/dashboard-command-handler.js.map +1 -1
  297. package/dist/apps/control-plane/cli/delete-command-handler.js +7 -7
  298. package/dist/apps/control-plane/cli/env-file.d.ts +4 -0
  299. package/dist/apps/control-plane/cli/env-file.js +89 -0
  300. package/dist/apps/control-plane/cli/env-file.js.map +1 -0
  301. package/dist/apps/control-plane/cli/help-command-handler.js +58 -30
  302. package/dist/apps/control-plane/cli/help-command-handler.js.map +1 -1
  303. package/dist/apps/control-plane/cli/init-command-handler.js +97 -37
  304. package/dist/apps/control-plane/cli/init-command-handler.js.map +1 -1
  305. package/dist/apps/control-plane/cli/io.js +2 -2
  306. package/dist/apps/control-plane/cli/io.js.map +1 -1
  307. package/dist/apps/control-plane/cli/resume-command-handler.js +9 -9
  308. package/dist/apps/control-plane/cli/resume-command-handler.js.map +1 -1
  309. package/dist/apps/control-plane/cli/retry-command-handler.js +12 -11
  310. package/dist/apps/control-plane/cli/retry-command-handler.js.map +1 -1
  311. package/dist/apps/control-plane/cli/run-command-handler.js +12 -8
  312. package/dist/apps/control-plane/cli/run-command-handler.js.map +1 -1
  313. package/dist/apps/control-plane/cli/send-command-handler.js +6 -6
  314. package/dist/apps/control-plane/cli/spec-ingestion-service.js +10 -8
  315. package/dist/apps/control-plane/cli/spec-ingestion-service.js.map +1 -1
  316. package/dist/apps/control-plane/cli/spec-input-resolver.js.map +1 -1
  317. package/dist/apps/control-plane/cli/spec-utils.js.map +1 -1
  318. package/dist/apps/control-plane/cli/status-command-handler.js +8 -8
  319. package/dist/apps/control-plane/cli/status-command-handler.js.map +1 -1
  320. package/dist/apps/control-plane/cli/tooling.js +1 -1
  321. package/dist/apps/control-plane/core/collisions.js +11 -8
  322. package/dist/apps/control-plane/core/collisions.js.map +1 -1
  323. package/dist/apps/control-plane/core/constants.js +13 -7
  324. package/dist/apps/control-plane/core/constants.js.map +1 -1
  325. package/dist/apps/control-plane/core/error-codes.js +1 -1
  326. package/dist/apps/control-plane/core/fs.js.map +1 -1
  327. package/dist/apps/control-plane/core/gates.d.ts +2 -2
  328. package/dist/apps/control-plane/core/gates.js +26 -19
  329. package/dist/apps/control-plane/core/gates.js.map +1 -1
  330. package/dist/apps/control-plane/core/git.js +3 -3
  331. package/dist/apps/control-plane/core/git.js.map +1 -1
  332. package/dist/apps/control-plane/core/kernel.d.ts +1 -0
  333. package/dist/apps/control-plane/core/kernel.js +134 -81
  334. package/dist/apps/control-plane/core/kernel.js.map +1 -1
  335. package/dist/apps/control-plane/core/patch.js +7 -3
  336. package/dist/apps/control-plane/core/patch.js.map +1 -1
  337. package/dist/apps/control-plane/core/path-layout.d.ts +1 -0
  338. package/dist/apps/control-plane/core/path-layout.js +4 -1
  339. package/dist/apps/control-plane/core/path-layout.js.map +1 -1
  340. package/dist/apps/control-plane/core/path-rules.js +3 -1
  341. package/dist/apps/control-plane/core/path-rules.js.map +1 -1
  342. package/dist/apps/control-plane/core/qa-index.js +5 -5
  343. package/dist/apps/control-plane/core/qa-index.js.map +1 -1
  344. package/dist/apps/control-plane/core/response.js +3 -3
  345. package/dist/apps/control-plane/core/response.js.map +1 -1
  346. package/dist/apps/control-plane/core/schemas.js +10 -6
  347. package/dist/apps/control-plane/core/schemas.js.map +1 -1
  348. package/dist/apps/control-plane/core/workspace-hooks.js +3 -3
  349. package/dist/apps/control-plane/index.d.ts +1 -1
  350. package/dist/apps/control-plane/index.js +1 -1
  351. package/dist/apps/control-plane/index.js.map +1 -1
  352. package/dist/apps/control-plane/interfaces/cli/bootstrap.js +40 -23
  353. package/dist/apps/control-plane/interfaces/cli/bootstrap.js.map +1 -1
  354. package/dist/apps/control-plane/mcp/kernel-tool-executor.js +1 -1
  355. package/dist/apps/control-plane/mcp/kernel-tool-executor.js.map +1 -1
  356. package/dist/apps/control-plane/mcp/mcp-server-adapter.js +6 -7
  357. package/dist/apps/control-plane/mcp/mcp-server-adapter.js.map +1 -1
  358. package/dist/apps/control-plane/mcp/operation-ledger.js +5 -5
  359. package/dist/apps/control-plane/mcp/operation-ledger.js.map +1 -1
  360. package/dist/apps/control-plane/mcp/protocol-contract.js +2 -2
  361. package/dist/apps/control-plane/mcp/runtime-factory.js +2 -2
  362. package/dist/apps/control-plane/mcp/runtime-factory.js.map +1 -1
  363. package/dist/apps/control-plane/mcp/token-auth-verifier.js +1 -1
  364. package/dist/apps/control-plane/mcp/token-auth-verifier.js.map +1 -1
  365. package/dist/apps/control-plane/mcp/token-claims-validator.js +5 -5
  366. package/dist/apps/control-plane/mcp/token-claims-validator.js.map +1 -1
  367. package/dist/apps/control-plane/mcp/tool-authorizer.js +1 -3
  368. package/dist/apps/control-plane/mcp/tool-authorizer.js.map +1 -1
  369. package/dist/apps/control-plane/mcp/tool-client.js +2 -2
  370. package/dist/apps/control-plane/mcp/tool-client.js.map +1 -1
  371. package/dist/apps/control-plane/mcp/tool-contract-validator.js +3 -3
  372. package/dist/apps/control-plane/mcp/tool-contract-validator.js.map +1 -1
  373. package/dist/apps/control-plane/mcp/tool-registry-loader.js +1 -1
  374. package/dist/apps/control-plane/mcp/tool-registry-loader.js.map +1 -1
  375. package/dist/apps/control-plane/mcp/tool-runtime.js +17 -17
  376. package/dist/apps/control-plane/mcp/tool-runtime.js.map +1 -1
  377. package/dist/apps/control-plane/mcp/tools-markdown-generator.js +6 -1
  378. package/dist/apps/control-plane/mcp/tools-markdown-generator.js.map +1 -1
  379. package/dist/apps/control-plane/providers/providers.d.ts +3 -2
  380. package/dist/apps/control-plane/providers/providers.js +81 -39
  381. package/dist/apps/control-plane/providers/providers.js.map +1 -1
  382. package/dist/apps/control-plane/supervisor/build-wave-executor.js +12 -12
  383. package/dist/apps/control-plane/supervisor/build-wave-executor.js.map +1 -1
  384. package/dist/apps/control-plane/supervisor/planning-wave-executor.js +19 -16
  385. package/dist/apps/control-plane/supervisor/planning-wave-executor.js.map +1 -1
  386. package/dist/apps/control-plane/supervisor/prompt-bundle-loader.js +1 -1
  387. package/dist/apps/control-plane/supervisor/qa-wave-executor.js +13 -13
  388. package/dist/apps/control-plane/supervisor/qa-wave-executor.js.map +1 -1
  389. package/dist/apps/control-plane/supervisor/run-coordinator.js +37 -20
  390. package/dist/apps/control-plane/supervisor/run-coordinator.js.map +1 -1
  391. package/dist/apps/control-plane/supervisor/runtime.js +25 -21
  392. package/dist/apps/control-plane/supervisor/runtime.js.map +1 -1
  393. package/dist/apps/control-plane/supervisor/session-orchestrator.js +29 -23
  394. package/dist/apps/control-plane/supervisor/session-orchestrator.js.map +1 -1
  395. package/dist/apps/control-plane/supervisor/types.d.ts +3 -3
  396. package/dist/apps/control-plane/supervisor/types.js.map +1 -1
  397. package/dist/apps/control-plane/supervisor/worker-decision-loop.js +14 -16
  398. package/dist/apps/control-plane/supervisor/worker-decision-loop.js.map +1 -1
  399. package/eslint.config.mjs +20 -20
  400. package/example-configurations/README.md +1 -1
  401. package/example-configurations/java/agents.yaml +3 -3
  402. package/example-configurations/java/policy.yaml +1 -1
  403. package/example-configurations/node/agents.yaml +3 -3
  404. package/example-configurations/node/policy.yaml +1 -1
  405. package/package.json +10 -5
  406. package/packages/web-dashboard/next.config.js +2 -2
  407. package/packages/web-dashboard/src/app/api/actions/route.ts +25 -9
  408. package/packages/web-dashboard/src/app/api/events/route.ts +20 -6
  409. package/packages/web-dashboard/src/app/api/features/[id]/checkout/route.ts +88 -37
  410. package/packages/web-dashboard/src/app/api/features/[id]/evidence/[artifact]/route.ts +8 -5
  411. package/packages/web-dashboard/src/app/api/features/[id]/review/route.ts +27 -9
  412. package/packages/web-dashboard/src/app/api/features/[id]/route.ts +5 -2
  413. package/packages/web-dashboard/src/app/api/projects/route.ts +5 -5
  414. package/packages/web-dashboard/src/app/globals.css +10 -2
  415. package/packages/web-dashboard/src/app/page.tsx +100 -37
  416. package/packages/web-dashboard/src/lib/aop-client.ts +68 -37
  417. package/packages/web-dashboard/src/lib/multi-project-config.ts +28 -7
  418. package/packages/web-dashboard/src/lib/orchestrator-tools.ts +59 -36
  419. package/packages/web-dashboard/tsconfig.json +3 -11
  420. package/scripts/nx-safe.mjs +10 -10
  421. package/spec-files/completed/agentic_orchestrator_cli_delete_command_spec.md +5 -0
  422. package/spec-files/completed/agentic_orchestrator_feature_gaps_closure_spec.md +189 -90
  423. package/spec-files/completed/agentic_orchestrator_init_policy_ux_simplification_spec.md +49 -16
  424. package/spec-files/completed/agentic_orchestrator_mcp_formalization_spec.md +24 -1
  425. package/spec-files/completed/agentic_orchestrator_single_global_orchestrator_spec.md +9 -0
  426. package/spec-files/completed/agentic_orchestrator_spec.md +171 -75
  427. package/spec-files/completed/agentic_orchestrator_validator_hardening_spec.md +25 -17
  428. package/spec-files/outstanding/agentic_orchestrator_artifact_database_publishing_spec.md +40 -5
  429. package/spec-files/outstanding/agentic_orchestrator_enterprise_governance_dashboard_spec.md +23 -12
  430. package/spec-files/outstanding/agentic_orchestrator_knowledge_canary_spec.md +16 -4
  431. package/spec-files/outstanding/agentic_orchestrator_observability_integrity_diagnostics_spec.md +42 -2
  432. package/spec-files/outstanding/agentic_orchestrator_performance_improvements_spec.md +209 -130
  433. package/spec-files/outstanding/agentic_orchestrator_planning_review_quality_spec.md +56 -3
  434. package/spec-files/outstanding/agentic_orchestrator_productization_commercial_spec.md +77 -10
  435. package/spec-files/outstanding/agentic_orchestrator_provider_auth_bootstrap_spec.md +384 -0
  436. package/spec-files/outstanding/agentic_orchestrator_quality_adoption_execution_spec.md +29 -14
  437. package/spec-files/progress.md +186 -175
  438. package/tsconfig.json +2 -8
@@ -13,7 +13,7 @@ type AnyRecord = Record<string, any>;
13
13
 
14
14
  type StateUpdater = (
15
15
  frontMatter: AnyRecord,
16
- body: string
16
+ body: string,
17
17
  ) => Promise<{ frontMatter?: AnyRecord; body?: string }>;
18
18
 
19
19
  type GateRunResult = {
@@ -33,7 +33,11 @@ function normalizeRepoPathForState(repoRoot: string, absolutePath: string): stri
33
33
  return relative;
34
34
  }
35
35
 
36
- function deriveStatusFromGateResult(currentStatus: string, mode: string, overall: 'pass' | 'fail'): string {
36
+ function deriveStatusFromGateResult(
37
+ currentStatus: string,
38
+ mode: string,
39
+ overall: 'pass' | 'fail',
40
+ ): string {
37
41
  if (overall === 'fail') {
38
42
  return STATUS.BLOCKED;
39
43
  }
@@ -54,7 +58,11 @@ export interface GateServicePort {
54
58
  getGatesConfig(): AnyRecord;
55
59
  getPolicySnapshot(): AnyRecord;
56
60
  readState(featureId: string): Promise<{ frontMatter: AnyRecord }>;
57
- updateState(featureId: string, expectedVersion: number | null, updater: StateUpdater): Promise<AnyRecord>;
61
+ updateState(
62
+ featureId: string,
63
+ expectedVersion: number | null,
64
+ updater: StateUpdater,
65
+ ): Promise<AnyRecord>;
58
66
  worktreePath(featureId: string): string;
59
67
  logsPath(featureId: string): string;
60
68
  evidencePath(featureId: string): string;
@@ -73,15 +81,15 @@ export class GateService {
73
81
  return {
74
82
  data: {
75
83
  profile: profileName,
76
- config: gatesConfig.profiles[profileName] ?? null
77
- }
84
+ config: gatesConfig.profiles[profileName] ?? null,
85
+ },
78
86
  };
79
87
  }
80
88
 
81
89
  return {
82
90
  data: {
83
- profiles: gatesConfig.profiles
84
- }
91
+ profiles: gatesConfig.profiles,
92
+ },
85
93
  };
86
94
  }
87
95
 
@@ -89,12 +97,16 @@ export class GateService {
89
97
  const profile = this.port.getGatesConfig().profiles[profileName];
90
98
  if (!profile || !profile.modes?.[mode]) {
91
99
  throw {
92
- normalizedResponse: fail(ERROR_CODES.UNKNOWN_GATE_PROFILE_OR_MODE, 'Unknown gate profile or mode', {
93
- profile: profileName,
94
- mode,
95
- retryable: false,
96
- requires_human: true
97
- })
100
+ normalizedResponse: fail(
101
+ ERROR_CODES.UNKNOWN_GATE_PROFILE_OR_MODE,
102
+ 'Unknown gate profile or mode',
103
+ {
104
+ profile: profileName,
105
+ mode,
106
+ retryable: false,
107
+ requires_human: true,
108
+ },
109
+ ),
98
110
  };
99
111
  }
100
112
  return profile;
@@ -103,7 +115,7 @@ export class GateService {
103
115
  async gatesRun(
104
116
  featureId: string,
105
117
  profileName: string | null,
106
- mode: string
118
+ mode: string,
107
119
  ): Promise<{
108
120
  data: {
109
121
  feature_id: string;
@@ -134,14 +146,14 @@ export class GateService {
134
146
  if (isIncrementalMode(mode)) {
135
147
  const interpolatedSteps: GateStep[] = originalModeSteps.map((step) => ({
136
148
  ...step,
137
- cmd: interpolateGateCommands(step.cmd, { base_branch: baseBranch, feature_id: featureId })
149
+ cmd: interpolateGateCommands(step.cmd, { base_branch: baseBranch, feature_id: featureId }),
138
150
  }));
139
151
  effectiveProfile = {
140
152
  ...profile,
141
153
  modes: {
142
154
  ...(profileAsGate.modes ?? {}),
143
- [mode]: interpolatedSteps
144
- }
155
+ [mode]: interpolatedSteps,
156
+ },
145
157
  };
146
158
  }
147
159
 
@@ -153,28 +165,33 @@ export class GateService {
153
165
  policy: policySnapshot as Parameters<typeof runGateMode>[0]['policy'],
154
166
  worktreePath: this.port.worktreePath(featureId),
155
167
  logDirectory: this.port.logsPath(featureId),
156
- evidenceDirectory: this.port.evidencePath(featureId)
168
+ evidenceDirectory: this.port.evidencePath(featureId),
157
169
  })) as GateRunResult;
158
170
 
159
- const nextStateStatus = deriveStatusFromGateResult(state.frontMatter.status, mode, runResult.overall);
171
+ const nextStateStatus = deriveStatusFromGateResult(
172
+ state.frontMatter.status,
173
+ mode,
174
+ runResult.overall,
175
+ );
160
176
 
161
177
  await this.port.updateState(featureId, state.frontMatter.version, (frontMatter, body) =>
162
178
  Promise.resolve({
163
179
  frontMatter: {
164
180
  status: nextStateStatus,
165
- status_reason: runResult.overall === 'fail' ? `Gate mode ${mode} failed` : frontMatter.status_reason,
181
+ status_reason:
182
+ runResult.overall === 'fail' ? `Gate mode ${mode} failed` : frontMatter.status_reason,
166
183
  gates: {
167
184
  ...frontMatter.gates,
168
- [mode]: runResult.overall === 'pass' ? GATE_RESULT.PASS : GATE_RESULT.FAIL
185
+ [mode]: runResult.overall === 'pass' ? GATE_RESULT.PASS : GATE_RESULT.FAIL,
169
186
  },
170
187
  evidence: {
171
188
  last_gate_mode: mode,
172
189
  last_gate_evidence_path: normalizeRepoPathForState(repoRoot, runResult.evidence_path),
173
- coverage_status: runResult.coverage_status
174
- }
190
+ coverage_status: runResult.coverage_status,
191
+ },
175
192
  },
176
- body
177
- })
193
+ body,
194
+ }),
178
195
  );
179
196
 
180
197
  if (hasBaseBranchTemplate) {
@@ -182,7 +199,11 @@ export class GateService {
182
199
  for (const evidenceFile of [runResult.evidence_path, runResult.latest_path]) {
183
200
  const raw = await fs.readFile(evidenceFile, 'utf8');
184
201
  const parsed = JSON.parse(raw) as Record<string, unknown>;
185
- await fs.writeFile(evidenceFile, `${JSON.stringify({ ...parsed, ...skippedInfo }, null, 2)}\n`, 'utf8');
202
+ await fs.writeFile(
203
+ evidenceFile,
204
+ `${JSON.stringify({ ...parsed, ...skippedInfo }, null, 2)}\n`,
205
+ 'utf8',
206
+ );
186
207
  }
187
208
  }
188
209
 
@@ -197,12 +218,12 @@ export class GateService {
197
218
  coverage: runResult.coverage,
198
219
  thresholds: runResult.thresholds,
199
220
  retryable: true,
200
- requires_human: false
221
+ requires_human: false,
201
222
  },
202
223
  {
203
- log_path: normalizeRepoPathForState(repoRoot, runResult.latest_path)
204
- }
205
- )
224
+ log_path: normalizeRepoPathForState(repoRoot, runResult.latest_path),
225
+ },
226
+ ),
206
227
  };
207
228
  }
208
229
 
@@ -213,23 +234,25 @@ export class GateService {
213
234
  profile: effectiveProfileName,
214
235
  overall: runResult.overall,
215
236
  coverage: runResult.coverage,
216
- evidence_path: normalizeRepoPathForState(repoRoot, runResult.evidence_path)
237
+ evidence_path: normalizeRepoPathForState(repoRoot, runResult.evidence_path),
217
238
  },
218
239
  evidence: {
219
- log_path: normalizeRepoPathForState(repoRoot, runResult.latest_path)
220
- }
240
+ log_path: normalizeRepoPathForState(repoRoot, runResult.latest_path),
241
+ },
221
242
  };
222
243
  }
223
244
 
224
- async evidenceLatest(featureId: string): Promise<{ data: { feature_id: string; latest: AnyRecord | null; path?: string } }> {
245
+ async evidenceLatest(
246
+ featureId: string,
247
+ ): Promise<{ data: { feature_id: string; latest: AnyRecord | null; path?: string } }> {
225
248
  const repoRoot = this.port.getRepoRoot();
226
249
  const evidenceDir = this.port.evidencePath(featureId);
227
250
  if (!(await pathExists(evidenceDir))) {
228
251
  return {
229
252
  data: {
230
253
  feature_id: featureId,
231
- latest: null
232
- }
254
+ latest: null,
255
+ },
233
256
  };
234
257
  }
235
258
 
@@ -241,8 +264,8 @@ export class GateService {
241
264
  return {
242
265
  data: {
243
266
  feature_id: featureId,
244
- latest: null
245
- }
267
+ latest: null,
268
+ },
246
269
  };
247
270
  }
248
271
 
@@ -250,7 +273,7 @@ export class GateService {
250
273
  files.map(async (file) => {
251
274
  const stat = await fs.stat(file);
252
275
  return { file, mtimeMs: stat.mtimeMs };
253
- })
276
+ }),
254
277
  );
255
278
 
256
279
  withStats.sort((a, b) => b.mtimeMs - a.mtimeMs);
@@ -261,8 +284,8 @@ export class GateService {
261
284
  data: {
262
285
  feature_id: featureId,
263
286
  latest,
264
- path: normalizeRepoPathForState(repoRoot, latestFile)
265
- }
287
+ path: normalizeRepoPathForState(repoRoot, latestFile),
288
+ },
266
289
  };
267
290
  }
268
291
  }
@@ -14,5 +14,5 @@ export function computeInstanceId(configPath: string): string {
14
14
  * Used when no explicit --config flag is provided.
15
15
  */
16
16
  export function defaultConfigPath(repoRoot: string): string {
17
- return `${repoRoot}/agentic/orchestrator/policy.yaml`;
17
+ return `${repoRoot}/config/agentic/orchestrator/policy.yaml`;
18
18
  }
@@ -26,7 +26,10 @@ export interface IssueTrackerConfig {
26
26
  // --- GitHub adapter (via gh CLI) ---
27
27
 
28
28
  export type GhRunner = (args: string[]) => Promise<{ stdout: string; exitCode: number }>;
29
- export type HttpRunner = (url: string, init: RequestInit) => Promise<{ status: number; ok: boolean; body: string }>;
29
+ export type HttpRunner = (
30
+ url: string,
31
+ init: RequestInit,
32
+ ) => Promise<{ status: number; ok: boolean; body: string }>;
30
33
 
31
34
  export function createGhRunner(fn?: GhRunner): GhRunner {
32
35
  if (fn !== undefined) {
@@ -57,7 +60,7 @@ export function createHttpRunner(fn?: HttpRunner): HttpRunner {
57
60
  return {
58
61
  status: response.status,
59
62
  ok: response.ok,
60
- body: await response.text()
63
+ body: await response.text(),
61
64
  };
62
65
  } catch {
63
66
  return { status: 0, ok: false, body: '' };
@@ -92,9 +95,12 @@ export class GitHubIssueTracker implements IssueTracker {
92
95
  async getIssue(issueId: string): Promise<Issue> {
93
96
  const repoArgs = this.repo ? ['--repo', this.repo] : [];
94
97
  const result = await this.ghRunner([
95
- 'issue', 'view', issueId,
98
+ 'issue',
99
+ 'view',
100
+ issueId,
96
101
  ...repoArgs,
97
- '--json', 'number,title,body,state,url'
102
+ '--json',
103
+ 'number,title,body,state,url',
98
104
  ]);
99
105
  if (result.exitCode !== 0 || !result.stdout) {
100
106
  return { id: issueId, title: '', body: '', status: 'unknown', url: '' };
@@ -111,7 +117,7 @@ export class GitHubIssueTracker implements IssueTracker {
111
117
  title: parsed.title,
112
118
  body: parsed.body,
113
119
  status: parsed.state.toLowerCase(),
114
- url: parsed.url
120
+ url: parsed.url,
115
121
  };
116
122
  }
117
123
 
@@ -147,7 +153,10 @@ function lowerCaseStatus(value: string): string {
147
153
  }
148
154
 
149
155
  function normalizeAopStatus(status: string): string {
150
- return status.trim().toLowerCase().replace(/[^a-z0-9]+/g, '_');
156
+ return status
157
+ .trim()
158
+ .toLowerCase()
159
+ .replace(/[^a-z0-9]+/g, '_');
151
160
  }
152
161
 
153
162
  function mapDefaultLinearStatus(status: string): string | null {
@@ -198,9 +207,12 @@ export class LinearIssueTracker implements IssueTracker {
198
207
  this.httpRunner = createHttpRunner(httpRunner);
199
208
  }
200
209
 
201
- private async graphQl<TData>(query: string, variables: Record<string, unknown>): Promise<TData | null> {
210
+ private async graphQl<TData>(
211
+ query: string,
212
+ variables: Record<string, unknown>,
213
+ ): Promise<TData | null> {
202
214
  const headers: Record<string, string> = {
203
- 'Content-Type': 'application/json'
215
+ 'Content-Type': 'application/json',
204
216
  };
205
217
  if (this.token) {
206
218
  headers['Authorization'] = `Bearer ${this.token}`;
@@ -208,7 +220,7 @@ export class LinearIssueTracker implements IssueTracker {
208
220
  const result = await this.httpRunner(this.baseUrl, {
209
221
  method: 'POST',
210
222
  headers,
211
- body: JSON.stringify({ query, variables })
223
+ body: JSON.stringify({ query, variables }),
212
224
  });
213
225
  if (!result.ok || !result.body) {
214
226
  return null;
@@ -242,16 +254,16 @@ export class LinearIssueTracker implements IssueTracker {
242
254
  state:
243
255
  stateRaw && typeof stateRaw === 'object'
244
256
  ? {
245
- name: readString((stateRaw as Record<string, unknown>)['name'])
257
+ name: readString((stateRaw as Record<string, unknown>)['name']),
246
258
  }
247
- : null
259
+ : null,
248
260
  };
249
261
  }
250
262
 
251
263
  private async resolveIssueNode(issueId: string): Promise<LinearIssueNode | null> {
252
264
  const byIdentifier = await this.graphQl<{ issueByIdentifier?: unknown }>(
253
265
  'query AopIssueByIdentifier($identifier: String!) { issueByIdentifier(identifier: $identifier) { id identifier title description url state { name } } }',
254
- { identifier: issueId }
266
+ { identifier: issueId },
255
267
  );
256
268
  const identifierIssue = LinearIssueTracker.parseIssueNode(byIdentifier?.issueByIdentifier);
257
269
  if (identifierIssue) {
@@ -260,7 +272,7 @@ export class LinearIssueTracker implements IssueTracker {
260
272
 
261
273
  const byId = await this.graphQl<{ issue?: unknown }>(
262
274
  'query AopIssueById($id: String!) { issue(id: $id) { id identifier title description url state { name } } }',
263
- { id: issueId }
275
+ { id: issueId },
264
276
  );
265
277
  return LinearIssueTracker.parseIssueNode(byId?.issue);
266
278
  }
@@ -289,7 +301,7 @@ export class LinearIssueTracker implements IssueTracker {
289
301
  title: issue.title,
290
302
  body: issue.description,
291
303
  status: lowerCaseStatus(issue.state?.name ?? ''),
292
- url: issue.url
304
+ url: issue.url,
293
305
  };
294
306
  }
295
307
 
@@ -304,7 +316,7 @@ export class LinearIssueTracker implements IssueTracker {
304
316
  }
305
317
  await this.graphQl(
306
318
  'mutation AopIssueUpdate($id: String!, $stateId: String!) { issueUpdate(id: $id, input: { stateId: $stateId }) { success } }',
307
- { id: issue.id, stateId }
319
+ { id: issue.id, stateId },
308
320
  );
309
321
  }
310
322
 
@@ -315,7 +327,7 @@ export class LinearIssueTracker implements IssueTracker {
315
327
  }
316
328
  await this.graphQl(
317
329
  'mutation AopCommentCreate($issueId: String!, $body: String!) { commentCreate(input: { issueId: $issueId, body: $body }) { success } }',
318
- { issueId: issue.id, body: comment }
330
+ { issueId: issue.id, body: comment },
319
331
  );
320
332
  }
321
333
  }
@@ -359,13 +371,13 @@ export class JiraIssueTracker implements IssueTracker {
359
371
  private async requestJson<T>(
360
372
  endpoint: string,
361
373
  method: 'GET' | 'POST',
362
- body?: Record<string, unknown>
374
+ body?: Record<string, unknown>,
363
375
  ): Promise<T | null> {
364
376
  if (!this.baseUrl) {
365
377
  return null;
366
378
  }
367
379
  const headers: Record<string, string> = {
368
- Accept: 'application/json'
380
+ Accept: 'application/json',
369
381
  };
370
382
  const authHeader = this.authHeader();
371
383
  if (authHeader) {
@@ -377,7 +389,7 @@ export class JiraIssueTracker implements IssueTracker {
377
389
  const result = await this.httpRunner(`${this.baseUrl}${endpoint}`, {
378
390
  method,
379
391
  headers,
380
- body: body === undefined ? undefined : JSON.stringify(body)
392
+ body: body === undefined ? undefined : JSON.stringify(body),
381
393
  });
382
394
  if (!result.ok || !result.body) {
383
395
  return null;
@@ -415,36 +427,31 @@ export class JiraIssueTracker implements IssueTracker {
415
427
  title: readString(fields.summary),
416
428
  body: toJiraDescription(fields.description),
417
429
  status: lowerCaseStatus(readString(fields.status?.name)),
418
- url: this.baseUrl ? `${this.baseUrl}/browse/${issueId}` : ''
430
+ url: this.baseUrl ? `${this.baseUrl}/browse/${issueId}` : '',
419
431
  };
420
432
  }
421
433
 
422
434
  async updateIssueStatus(issueId: string, status: string): Promise<void> {
423
- const transitionsPayload = await this.requestJson<{ transitions?: Array<{ id?: string; name?: string }> }>(
424
- `/rest/api/2/issue/${encodeURIComponent(issueId)}/transitions`,
425
- 'GET'
426
- );
435
+ const transitionsPayload = await this.requestJson<{
436
+ transitions?: Array<{ id?: string; name?: string }>;
437
+ }>(`/rest/api/2/issue/${encodeURIComponent(issueId)}/transitions`, 'GET');
427
438
  const transitions = transitionsPayload?.transitions ?? [];
428
439
  const targetName = this.resolveTransitionName(status);
429
440
  const transition = transitions.find(
430
- (item) => typeof item.name === 'string' && item.name.toLowerCase() === targetName
441
+ (item) => typeof item.name === 'string' && item.name.toLowerCase() === targetName,
431
442
  );
432
443
  if (!transition?.id) {
433
444
  return;
434
445
  }
435
- await this.requestJson(
436
- `/rest/api/2/issue/${encodeURIComponent(issueId)}/transitions`,
437
- 'POST',
438
- { transition: { id: transition.id } }
439
- );
446
+ await this.requestJson(`/rest/api/2/issue/${encodeURIComponent(issueId)}/transitions`, 'POST', {
447
+ transition: { id: transition.id },
448
+ });
440
449
  }
441
450
 
442
451
  async addComment(issueId: string, comment: string): Promise<void> {
443
- await this.requestJson(
444
- `/rest/api/2/issue/${encodeURIComponent(issueId)}/comment`,
445
- 'POST',
446
- { body: comment }
447
- );
452
+ await this.requestJson(`/rest/api/2/issue/${encodeURIComponent(issueId)}/comment`, 'POST', {
453
+ body: comment,
454
+ });
448
455
  }
449
456
  }
450
457
 
@@ -452,10 +459,14 @@ export class JiraIssueTracker implements IssueTracker {
452
459
  export function createIssueTracker(
453
460
  config: IssueTrackerConfig | undefined,
454
461
  ghRunner?: GhRunner,
455
- httpRunner?: HttpRunner
462
+ httpRunner?: HttpRunner,
456
463
  ): IssueTracker | undefined {
457
- if (!config) {return undefined;}
458
- if (config.enabled === false) {return undefined;}
464
+ if (!config) {
465
+ return undefined;
466
+ }
467
+ if (config.enabled === false) {
468
+ return undefined;
469
+ }
459
470
  switch (config.type) {
460
471
  case 'github':
461
472
  return new GitHubIssueTracker(config.config ?? {}, ghRunner);