maestro-flow 0.1.0

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 (1073) hide show
  1. package/.claude/CLAUDE.md +19 -0
  2. package/.claude/agents/cli-explore-agent.md +187 -0
  3. package/.claude/agents/conceptual-planning-agent.md +244 -0
  4. package/.claude/agents/team-supervisor.md +133 -0
  5. package/.claude/agents/team-worker.md +155 -0
  6. package/.claude/agents/ui-design-agent.md +286 -0
  7. package/.claude/agents/workflow-analyzer.md +114 -0
  8. package/.claude/agents/workflow-codebase-mapper.md +77 -0
  9. package/.claude/agents/workflow-collab-planner.md +144 -0
  10. package/.claude/agents/workflow-debugger.md +103 -0
  11. package/.claude/agents/workflow-executor.md +128 -0
  12. package/.claude/agents/workflow-external-researcher.md +86 -0
  13. package/.claude/agents/workflow-integration-checker.md +82 -0
  14. package/.claude/agents/workflow-nyquist-auditor.md +84 -0
  15. package/.claude/agents/workflow-phase-researcher.md +85 -0
  16. package/.claude/agents/workflow-plan-checker.md +90 -0
  17. package/.claude/agents/workflow-planner.md +178 -0
  18. package/.claude/agents/workflow-project-researcher.md +74 -0
  19. package/.claude/agents/workflow-research-synthesizer.md +70 -0
  20. package/.claude/agents/workflow-reviewer.md +80 -0
  21. package/.claude/agents/workflow-roadmapper.md +83 -0
  22. package/.claude/agents/workflow-verifier.md +119 -0
  23. package/.claude/commands/maestro-analyze.md +99 -0
  24. package/.claude/commands/maestro-brainstorm.md +90 -0
  25. package/.claude/commands/maestro-coordinate.md +65 -0
  26. package/.claude/commands/maestro-execute.md +86 -0
  27. package/.claude/commands/maestro-init.md +78 -0
  28. package/.claude/commands/maestro-link-coordinate.md +63 -0
  29. package/.claude/commands/maestro-milestone-audit.md +60 -0
  30. package/.claude/commands/maestro-milestone-complete.md +58 -0
  31. package/.claude/commands/maestro-phase-add.md +55 -0
  32. package/.claude/commands/maestro-phase-transition.md +65 -0
  33. package/.claude/commands/maestro-plan.md +87 -0
  34. package/.claude/commands/maestro-quick.md +56 -0
  35. package/.claude/commands/maestro-roadmap.md +95 -0
  36. package/.claude/commands/maestro-spec-generate.md +102 -0
  37. package/.claude/commands/maestro-ui-design.md +152 -0
  38. package/.claude/commands/maestro-verify.md +84 -0
  39. package/.claude/commands/maestro.md +116 -0
  40. package/.claude/commands/manage-codebase-rebuild.md +50 -0
  41. package/.claude/commands/manage-codebase-refresh.md +49 -0
  42. package/.claude/commands/manage-issue-analyze.md +62 -0
  43. package/.claude/commands/manage-issue-discover.md +77 -0
  44. package/.claude/commands/manage-issue-execute.md +73 -0
  45. package/.claude/commands/manage-issue-plan.md +62 -0
  46. package/.claude/commands/manage-issue.md +73 -0
  47. package/.claude/commands/manage-memory-capture.md +61 -0
  48. package/.claude/commands/manage-memory.md +88 -0
  49. package/.claude/commands/manage-status.md +69 -0
  50. package/.claude/commands/quality-debug.md +83 -0
  51. package/.claude/commands/quality-integration-test.md +87 -0
  52. package/.claude/commands/quality-refactor.md +55 -0
  53. package/.claude/commands/quality-review.md +125 -0
  54. package/.claude/commands/quality-sync.md +43 -0
  55. package/.claude/commands/quality-test-gen.md +76 -0
  56. package/.claude/commands/quality-test.md +86 -0
  57. package/.claude/commands/spec-add.md +56 -0
  58. package/.claude/commands/spec-load.md +59 -0
  59. package/.claude/commands/spec-map.md +82 -0
  60. package/.claude/commands/spec-setup.md +57 -0
  61. package/.codex/skills/maestro/SKILL.md +529 -0
  62. package/.codex/skills/maestro-analyze/SKILL.md +530 -0
  63. package/.codex/skills/maestro-brainstorm/SKILL.md +463 -0
  64. package/.codex/skills/maestro-execute/SKILL.md +437 -0
  65. package/.codex/skills/maestro-init/SKILL.md +167 -0
  66. package/.codex/skills/maestro-milestone-audit/SKILL.md +209 -0
  67. package/.codex/skills/maestro-milestone-complete/SKILL.md +158 -0
  68. package/.codex/skills/maestro-phase-add/SKILL.md +154 -0
  69. package/.codex/skills/maestro-phase-transition/SKILL.md +173 -0
  70. package/.codex/skills/maestro-plan/SKILL.md +458 -0
  71. package/.codex/skills/maestro-quick/SKILL.md +164 -0
  72. package/.codex/skills/maestro-roadmap/SKILL.md +385 -0
  73. package/.codex/skills/maestro-spec-generate/SKILL.md +399 -0
  74. package/.codex/skills/maestro-ui-design/SKILL.md +179 -0
  75. package/.codex/skills/maestro-verify/SKILL.md +566 -0
  76. package/.codex/skills/manage-codebase-rebuild/SKILL.md +405 -0
  77. package/.codex/skills/manage-codebase-refresh/SKILL.md +82 -0
  78. package/.codex/skills/manage-issue/SKILL.md +65 -0
  79. package/.codex/skills/manage-issue-discover/SKILL.md +503 -0
  80. package/.codex/skills/manage-memory/SKILL.md +72 -0
  81. package/.codex/skills/manage-memory-capture/SKILL.md +86 -0
  82. package/.codex/skills/manage-status/SKILL.md +89 -0
  83. package/.codex/skills/quality-debug/SKILL.md +413 -0
  84. package/.codex/skills/quality-integration-test/SKILL.md +544 -0
  85. package/.codex/skills/quality-refactor/SKILL.md +191 -0
  86. package/.codex/skills/quality-review/SKILL.md +408 -0
  87. package/.codex/skills/quality-sync/SKILL.md +89 -0
  88. package/.codex/skills/quality-test/SKILL.md +198 -0
  89. package/.codex/skills/quality-test-gen/SKILL.md +447 -0
  90. package/.codex/skills/spec-add/SKILL.md +79 -0
  91. package/.codex/skills/spec-load/SKILL.md +75 -0
  92. package/.codex/skills/spec-map/SKILL.md +182 -0
  93. package/.codex/skills/spec-setup/SKILL.md +76 -0
  94. package/.codex/skills/team-coordinate/SKILL.md +359 -0
  95. package/.codex/skills/team-coordinate/roles/coordinator/commands/analyze-task.md +247 -0
  96. package/.codex/skills/team-coordinate/roles/coordinator/commands/dispatch.md +126 -0
  97. package/.codex/skills/team-coordinate/roles/coordinator/commands/monitor.md +367 -0
  98. package/.codex/skills/team-coordinate/roles/coordinator/role.md +402 -0
  99. package/.codex/skills/team-coordinate/specs/knowledge-transfer.md +111 -0
  100. package/.codex/skills/team-coordinate/specs/pipelines.md +97 -0
  101. package/.codex/skills/team-coordinate/specs/quality-gates.md +112 -0
  102. package/.codex/skills/team-coordinate/specs/role-spec-template.md +192 -0
  103. package/.codex/skills/team-executor/SKILL.md +218 -0
  104. package/.codex/skills/team-executor/roles/executor/commands/monitor.md +288 -0
  105. package/.codex/skills/team-executor/roles/executor/role.md +170 -0
  106. package/.codex/skills/team-executor/specs/session-schema.md +264 -0
  107. package/.codex/skills/team-lifecycle-v4/MIGRATION-PLAN.md +512 -0
  108. package/.codex/skills/team-lifecycle-v4/SKILL.md +305 -0
  109. package/.codex/skills/team-lifecycle-v4/instructions/agent-instruction.md +725 -0
  110. package/.codex/skills/team-lifecycle-v4/roles/analyst/role.md +104 -0
  111. package/.codex/skills/team-lifecycle-v4/roles/coordinator/commands/analyze.md +56 -0
  112. package/.codex/skills/team-lifecycle-v4/roles/coordinator/commands/dispatch.md +61 -0
  113. package/.codex/skills/team-lifecycle-v4/roles/coordinator/commands/monitor.md +219 -0
  114. package/.codex/skills/team-lifecycle-v4/roles/coordinator/role.md +190 -0
  115. package/.codex/skills/team-lifecycle-v4/roles/executor/commands/fix.md +35 -0
  116. package/.codex/skills/team-lifecycle-v4/roles/executor/commands/implement.md +63 -0
  117. package/.codex/skills/team-lifecycle-v4/roles/executor/role.md +89 -0
  118. package/.codex/skills/team-lifecycle-v4/roles/planner/role.md +108 -0
  119. package/.codex/skills/team-lifecycle-v4/roles/reviewer/commands/review-code.md +57 -0
  120. package/.codex/skills/team-lifecycle-v4/roles/reviewer/commands/review-spec.md +44 -0
  121. package/.codex/skills/team-lifecycle-v4/roles/reviewer/role.md +98 -0
  122. package/.codex/skills/team-lifecycle-v4/roles/supervisor/role.md +210 -0
  123. package/.codex/skills/team-lifecycle-v4/roles/tester/role.md +126 -0
  124. package/.codex/skills/team-lifecycle-v4/roles/writer/role.md +125 -0
  125. package/.codex/skills/team-lifecycle-v4/schemas/tasks-schema.md +100 -0
  126. package/.codex/skills/team-lifecycle-v4/specs/knowledge-transfer.md +136 -0
  127. package/.codex/skills/team-lifecycle-v4/specs/pipelines.md +125 -0
  128. package/.codex/skills/team-lifecycle-v4/specs/quality-gates.md +130 -0
  129. package/.codex/skills/team-lifecycle-v4/templates/architecture.md +254 -0
  130. package/.codex/skills/team-lifecycle-v4/templates/epics.md +196 -0
  131. package/.codex/skills/team-lifecycle-v4/templates/product-brief.md +133 -0
  132. package/.codex/skills/team-lifecycle-v4/templates/requirements.md +224 -0
  133. package/.codex/skills/team-quality-assurance/SKILL.md +229 -0
  134. package/.codex/skills/team-quality-assurance/roles/analyst/role.md +80 -0
  135. package/.codex/skills/team-quality-assurance/roles/coordinator/commands/analyze.md +72 -0
  136. package/.codex/skills/team-quality-assurance/roles/coordinator/commands/dispatch.md +108 -0
  137. package/.codex/skills/team-quality-assurance/roles/coordinator/commands/monitor.md +243 -0
  138. package/.codex/skills/team-quality-assurance/roles/coordinator/role.md +176 -0
  139. package/.codex/skills/team-quality-assurance/roles/executor/role.md +66 -0
  140. package/.codex/skills/team-quality-assurance/roles/generator/role.md +68 -0
  141. package/.codex/skills/team-quality-assurance/roles/scout/role.md +67 -0
  142. package/.codex/skills/team-quality-assurance/roles/strategist/role.md +71 -0
  143. package/.codex/skills/team-quality-assurance/specs/pipelines.md +115 -0
  144. package/.codex/skills/team-quality-assurance/specs/team-config.json +131 -0
  145. package/.codex/skills/team-review/SKILL.md +227 -0
  146. package/.codex/skills/team-review/roles/coordinator/commands/analyze.md +71 -0
  147. package/.codex/skills/team-review/roles/coordinator/commands/dispatch.md +90 -0
  148. package/.codex/skills/team-review/roles/coordinator/commands/monitor.md +225 -0
  149. package/.codex/skills/team-review/roles/coordinator/role.md +175 -0
  150. package/.codex/skills/team-review/roles/fixer/role.md +76 -0
  151. package/.codex/skills/team-review/roles/reviewer/role.md +68 -0
  152. package/.codex/skills/team-review/roles/scanner/role.md +71 -0
  153. package/.codex/skills/team-review/specs/dimensions.md +82 -0
  154. package/.codex/skills/team-review/specs/finding-schema.json +82 -0
  155. package/.codex/skills/team-review/specs/pipelines.md +102 -0
  156. package/.codex/skills/team-review/specs/team-config.json +27 -0
  157. package/.codex/skills/team-tech-debt/SKILL.md +206 -0
  158. package/.codex/skills/team-tech-debt/roles/assessor/role.md +69 -0
  159. package/.codex/skills/team-tech-debt/roles/coordinator/commands/analyze.md +47 -0
  160. package/.codex/skills/team-tech-debt/roles/coordinator/commands/dispatch.md +163 -0
  161. package/.codex/skills/team-tech-debt/roles/coordinator/commands/monitor.md +272 -0
  162. package/.codex/skills/team-tech-debt/roles/coordinator/role.md +172 -0
  163. package/.codex/skills/team-tech-debt/roles/executor/role.md +76 -0
  164. package/.codex/skills/team-tech-debt/roles/planner/role.md +69 -0
  165. package/.codex/skills/team-tech-debt/roles/scanner/role.md +82 -0
  166. package/.codex/skills/team-tech-debt/roles/validator/role.md +75 -0
  167. package/.codex/skills/team-tech-debt/specs/pipelines.md +47 -0
  168. package/.codex/skills/team-tech-debt/specs/team-config.json +129 -0
  169. package/.codex/skills/team-testing/SKILL.md +237 -0
  170. package/.codex/skills/team-testing/roles/analyst/role.md +95 -0
  171. package/.codex/skills/team-testing/roles/coordinator/commands/analyze.md +70 -0
  172. package/.codex/skills/team-testing/roles/coordinator/commands/dispatch.md +106 -0
  173. package/.codex/skills/team-testing/roles/coordinator/commands/monitor.md +283 -0
  174. package/.codex/skills/team-testing/roles/coordinator/role.md +184 -0
  175. package/.codex/skills/team-testing/roles/executor/role.md +96 -0
  176. package/.codex/skills/team-testing/roles/generator/role.md +95 -0
  177. package/.codex/skills/team-testing/roles/strategist/role.md +83 -0
  178. package/.codex/skills/team-testing/specs/pipelines.md +101 -0
  179. package/.codex/skills/team-testing/specs/team-config.json +93 -0
  180. package/README.md +323 -0
  181. package/README.zh-CN.md +323 -0
  182. package/bin/maestro-context-monitor.js +3 -0
  183. package/bin/maestro-mcp.js +2 -0
  184. package/bin/maestro-statusline.js +4 -0
  185. package/bin/maestro.js +2 -0
  186. package/chains/_intent-map.json +259 -0
  187. package/chains/_router.json +201 -0
  188. package/chains/analyze-plan-execute.json +50 -0
  189. package/chains/brainstorm-driven.json +79 -0
  190. package/chains/execute-verify.json +59 -0
  191. package/chains/full-lifecycle.json +112 -0
  192. package/chains/issue-lifecycle.json +74 -0
  193. package/chains/milestone-close.json +29 -0
  194. package/chains/next-milestone.json +49 -0
  195. package/chains/quality-loop.json +94 -0
  196. package/chains/roadmap-driven.json +70 -0
  197. package/chains/singles/analyze.json +23 -0
  198. package/chains/singles/brainstorm.json +31 -0
  199. package/chains/singles/codebase-rebuild.json +26 -0
  200. package/chains/singles/codebase-refresh.json +26 -0
  201. package/chains/singles/debug.json +26 -0
  202. package/chains/singles/execute.json +26 -0
  203. package/chains/singles/init.json +23 -0
  204. package/chains/singles/integration-test.json +32 -0
  205. package/chains/singles/issue-analyze.json +31 -0
  206. package/chains/singles/issue-discover.json +31 -0
  207. package/chains/singles/issue-execute.json +31 -0
  208. package/chains/singles/issue-plan.json +31 -0
  209. package/chains/singles/issue.json +31 -0
  210. package/chains/singles/memory-capture.json +31 -0
  211. package/chains/singles/memory.json +31 -0
  212. package/chains/singles/milestone-audit.json +26 -0
  213. package/chains/singles/milestone-complete.json +26 -0
  214. package/chains/singles/phase-add.json +31 -0
  215. package/chains/singles/phase-transition.json +23 -0
  216. package/chains/singles/plan.json +27 -0
  217. package/chains/singles/quick.json +23 -0
  218. package/chains/singles/refactor.json +31 -0
  219. package/chains/singles/review.json +26 -0
  220. package/chains/singles/roadmap.json +31 -0
  221. package/chains/singles/spec-add.json +30 -0
  222. package/chains/singles/spec-generate.json +31 -0
  223. package/chains/singles/spec-load.json +30 -0
  224. package/chains/singles/spec-map.json +25 -0
  225. package/chains/singles/spec-setup.json +25 -0
  226. package/chains/singles/status.json +23 -0
  227. package/chains/singles/sync.json +32 -0
  228. package/chains/singles/team-coordinate.json +30 -0
  229. package/chains/singles/team-lifecycle.json +30 -0
  230. package/chains/singles/team-qa.json +31 -0
  231. package/chains/singles/team-review.json +31 -0
  232. package/chains/singles/team-tech-debt.json +31 -0
  233. package/chains/singles/team-testing.json +31 -0
  234. package/chains/singles/test-gen.json +32 -0
  235. package/chains/singles/test.json +26 -0
  236. package/chains/singles/ui-design.json +32 -0
  237. package/chains/singles/verify.json +26 -0
  238. package/chains/spec-driven.json +71 -0
  239. package/chains/ui-design-driven.json +64 -0
  240. package/dashboard/dist/assets/ArtifactsPage-D4xlwipN.js +3 -0
  241. package/dashboard/dist/assets/ChatInput-BQOmqgT5.js +67 -0
  242. package/dashboard/dist/assets/ChatPage-ekwfjZ-o.js +13 -0
  243. package/dashboard/dist/assets/KanbanPage-DunfYPZJ.js +16 -0
  244. package/dashboard/dist/assets/MarkdownRenderer-Dzj8FtoS.js +29 -0
  245. package/dashboard/dist/assets/McpPage-CkBQZQKI.js +16 -0
  246. package/dashboard/dist/assets/RequirementBoardPage-BHQik0cq.js +16 -0
  247. package/dashboard/dist/assets/RequirementPage-Bpx8qxeM.js +21 -0
  248. package/dashboard/dist/assets/SpecsPage-BU8JN8fw.js +36 -0
  249. package/dashboard/dist/assets/SupervisorPage-DRBTi1AP.js +6 -0
  250. package/dashboard/dist/assets/TeamsPage-CQsOc_Y8.js +1 -0
  251. package/dashboard/dist/assets/TreeBrowser-qW732QzJ.js +6 -0
  252. package/dashboard/dist/assets/WorkflowPage-D_WsulGC.js +6 -0
  253. package/dashboard/dist/assets/arrow-left-CCpsKWvn.js +6 -0
  254. package/dashboard/dist/assets/check-BR4mIlFD.js +6 -0
  255. package/dashboard/dist/assets/chevron-down-Db25lGmH.js +6 -0
  256. package/dashboard/dist/assets/chevron-right-DecIDoxI.js +6 -0
  257. package/dashboard/dist/assets/circle-BKy_Br8I.js +6 -0
  258. package/dashboard/dist/assets/circle-alert-CgxlhUAB.js +6 -0
  259. package/dashboard/dist/assets/circle-check-BvHAis-E.js +6 -0
  260. package/dashboard/dist/assets/circle-check-big-sQZH_YFo.js +6 -0
  261. package/dashboard/dist/assets/code-CO9Rrog6.js +6 -0
  262. package/dashboard/dist/assets/columns-3-DjIJTp-x.js +6 -0
  263. package/dashboard/dist/assets/download-B5rSR4pZ.js +6 -0
  264. package/dashboard/dist/assets/en-C8KOT1y5.js +1 -0
  265. package/dashboard/dist/assets/folder-Ifcb352Q.js +16 -0
  266. package/dashboard/dist/assets/git-branch-DZ1y6CY2.js +6 -0
  267. package/dashboard/dist/assets/index-CCfPkIHn.js +216 -0
  268. package/dashboard/dist/assets/index-CdDNRt77.js +9 -0
  269. package/dashboard/dist/assets/index-mS23S2sK.css +1 -0
  270. package/dashboard/dist/assets/list-BPzXxr9I.js +6 -0
  271. package/dashboard/dist/assets/pen-line-C9NUqMyn.js +6 -0
  272. package/dashboard/dist/assets/proxy-IZ0Btp7q.js +1 -0
  273. package/dashboard/dist/assets/search-DGaQh9xt.js +6 -0
  274. package/dashboard/dist/assets/shallow-B1CDhozp.js +1 -0
  275. package/dashboard/dist/assets/table-9byuvFFR.js +6 -0
  276. package/dashboard/dist/assets/trash-2-BXzvgl88.js +6 -0
  277. package/dashboard/dist/assets/wrench-PwKK7ns0.js +11 -0
  278. package/dashboard/dist/assets/x-C8XWclL8.js +6 -0
  279. package/dashboard/dist/assets/zap-mmGtwzz8.js +6 -0
  280. package/dashboard/dist/assets/zh-CN-Bss6VKAV.js +1 -0
  281. package/dashboard/dist/index.html +19 -0
  282. package/dashboard/dist-server/server/agents/agent-manager.d.ts +47 -0
  283. package/dashboard/dist-server/server/agents/agent-manager.js +253 -0
  284. package/dashboard/dist-server/server/agents/agent-manager.js.map +1 -0
  285. package/dashboard/dist-server/server/agents/agent-manager.test.d.ts +1 -0
  286. package/dashboard/dist-server/server/agents/agent-manager.test.js +162 -0
  287. package/dashboard/dist-server/server/agents/agent-manager.test.js.map +1 -0
  288. package/dashboard/dist-server/server/agents/agent-sdk-adapter.d.ts +18 -0
  289. package/dashboard/dist-server/server/agents/agent-sdk-adapter.js +219 -0
  290. package/dashboard/dist-server/server/agents/agent-sdk-adapter.js.map +1 -0
  291. package/dashboard/dist-server/server/agents/base-adapter.d.ts +43 -0
  292. package/dashboard/dist-server/server/agents/base-adapter.js +107 -0
  293. package/dashboard/dist-server/server/agents/base-adapter.js.map +1 -0
  294. package/dashboard/dist-server/server/agents/claude-code-adapter.d.ts +18 -0
  295. package/dashboard/dist-server/server/agents/claude-code-adapter.js +305 -0
  296. package/dashboard/dist-server/server/agents/claude-code-adapter.js.map +1 -0
  297. package/dashboard/dist-server/server/agents/codex-app-server-adapter.d.ts +31 -0
  298. package/dashboard/dist-server/server/agents/codex-app-server-adapter.js +433 -0
  299. package/dashboard/dist-server/server/agents/codex-app-server-adapter.js.map +1 -0
  300. package/dashboard/dist-server/server/agents/codex-cli-adapter.d.ts +20 -0
  301. package/dashboard/dist-server/server/agents/codex-cli-adapter.js +264 -0
  302. package/dashboard/dist-server/server/agents/codex-cli-adapter.js.map +1 -0
  303. package/dashboard/dist-server/server/agents/entry-normalizer.d.ts +16 -0
  304. package/dashboard/dist-server/server/agents/entry-normalizer.js +126 -0
  305. package/dashboard/dist-server/server/agents/entry-normalizer.js.map +1 -0
  306. package/dashboard/dist-server/server/agents/entry-normalizer.test.d.ts +1 -0
  307. package/dashboard/dist-server/server/agents/entry-normalizer.test.js +128 -0
  308. package/dashboard/dist-server/server/agents/entry-normalizer.test.js.map +1 -0
  309. package/dashboard/dist-server/server/agents/env-cleanup.d.ts +7 -0
  310. package/dashboard/dist-server/server/agents/env-cleanup.js +36 -0
  311. package/dashboard/dist-server/server/agents/env-cleanup.js.map +1 -0
  312. package/dashboard/dist-server/server/agents/env-file-loader.d.ts +6 -0
  313. package/dashboard/dist-server/server/agents/env-file-loader.js +55 -0
  314. package/dashboard/dist-server/server/agents/env-file-loader.js.map +1 -0
  315. package/dashboard/dist-server/server/agents/opencode-adapter.d.ts +15 -0
  316. package/dashboard/dist-server/server/agents/opencode-adapter.js +188 -0
  317. package/dashboard/dist-server/server/agents/opencode-adapter.js.map +1 -0
  318. package/dashboard/dist-server/server/agents/sdk-message-translator.d.ts +38 -0
  319. package/dashboard/dist-server/server/agents/sdk-message-translator.js +268 -0
  320. package/dashboard/dist-server/server/agents/sdk-message-translator.js.map +1 -0
  321. package/dashboard/dist-server/server/agents/sdk-message-translator.test.d.ts +1 -0
  322. package/dashboard/dist-server/server/agents/sdk-message-translator.test.js +327 -0
  323. package/dashboard/dist-server/server/agents/sdk-message-translator.test.js.map +1 -0
  324. package/dashboard/dist-server/server/agents/stream-json-adapter.d.ts +24 -0
  325. package/dashboard/dist-server/server/agents/stream-json-adapter.js +289 -0
  326. package/dashboard/dist-server/server/agents/stream-json-adapter.js.map +1 -0
  327. package/dashboard/dist-server/server/agents/stream-monitor.d.ts +16 -0
  328. package/dashboard/dist-server/server/agents/stream-monitor.js +34 -0
  329. package/dashboard/dist-server/server/agents/stream-monitor.js.map +1 -0
  330. package/dashboard/dist-server/server/agents/tools/issue-mcp-server.d.ts +2 -0
  331. package/dashboard/dist-server/server/agents/tools/issue-mcp-server.js +111 -0
  332. package/dashboard/dist-server/server/agents/tools/issue-mcp-server.js.map +1 -0
  333. package/dashboard/dist-server/server/agents/tools/issue-mcp-server.test.d.ts +1 -0
  334. package/dashboard/dist-server/server/agents/tools/issue-mcp-server.test.js +286 -0
  335. package/dashboard/dist-server/server/agents/tools/issue-mcp-server.test.js.map +1 -0
  336. package/dashboard/dist-server/server/commander/commander-agent.d.ts +49 -0
  337. package/dashboard/dist-server/server/commander/commander-agent.js +478 -0
  338. package/dashboard/dist-server/server/commander/commander-agent.js.map +1 -0
  339. package/dashboard/dist-server/server/commander/commander-agent.test.d.ts +1 -0
  340. package/dashboard/dist-server/server/commander/commander-agent.test.js +930 -0
  341. package/dashboard/dist-server/server/commander/commander-agent.test.js.map +1 -0
  342. package/dashboard/dist-server/server/commander/commander-config.d.ts +22 -0
  343. package/dashboard/dist-server/server/commander/commander-config.js +172 -0
  344. package/dashboard/dist-server/server/commander/commander-config.js.map +1 -0
  345. package/dashboard/dist-server/server/commander/commander-config.test.d.ts +1 -0
  346. package/dashboard/dist-server/server/commander/commander-config.test.js +253 -0
  347. package/dashboard/dist-server/server/commander/commander-config.test.js.map +1 -0
  348. package/dashboard/dist-server/server/commander/commander-prompts.d.ts +16 -0
  349. package/dashboard/dist-server/server/commander/commander-prompts.js +139 -0
  350. package/dashboard/dist-server/server/commander/commander-prompts.js.map +1 -0
  351. package/dashboard/dist-server/server/commander/commander-prompts.test.d.ts +1 -0
  352. package/dashboard/dist-server/server/commander/commander-prompts.test.js +183 -0
  353. package/dashboard/dist-server/server/commander/commander-prompts.test.js.map +1 -0
  354. package/dashboard/dist-server/server/commander/commander-routes.d.ts +12 -0
  355. package/dashboard/dist-server/server/commander/commander-routes.js +116 -0
  356. package/dashboard/dist-server/server/commander/commander-routes.js.map +1 -0
  357. package/dashboard/dist-server/server/commander/commander-routes.test.d.ts +1 -0
  358. package/dashboard/dist-server/server/commander/commander-routes.test.js +177 -0
  359. package/dashboard/dist-server/server/commander/commander-routes.test.js.map +1 -0
  360. package/dashboard/dist-server/server/config.d.ts +28 -0
  361. package/dashboard/dist-server/server/config.js +67 -0
  362. package/dashboard/dist-server/server/config.js.map +1 -0
  363. package/dashboard/dist-server/server/coordinator/agents/intent-classifier-agent.d.ts +5 -0
  364. package/dashboard/dist-server/server/coordinator/agents/intent-classifier-agent.js +97 -0
  365. package/dashboard/dist-server/server/coordinator/agents/intent-classifier-agent.js.map +1 -0
  366. package/dashboard/dist-server/server/coordinator/agents/quality-reviewer-agent.d.ts +5 -0
  367. package/dashboard/dist-server/server/coordinator/agents/quality-reviewer-agent.js +86 -0
  368. package/dashboard/dist-server/server/coordinator/agents/quality-reviewer-agent.js.map +1 -0
  369. package/dashboard/dist-server/server/coordinator/agents/state-analyzer-agent.d.ts +10 -0
  370. package/dashboard/dist-server/server/coordinator/agents/state-analyzer-agent.js +112 -0
  371. package/dashboard/dist-server/server/coordinator/agents/state-analyzer-agent.js.map +1 -0
  372. package/dashboard/dist-server/server/coordinator/chain-map.d.ts +16 -0
  373. package/dashboard/dist-server/server/coordinator/chain-map.js +163 -0
  374. package/dashboard/dist-server/server/coordinator/chain-map.js.map +1 -0
  375. package/dashboard/dist-server/server/coordinator/chain-map.test.d.ts +1 -0
  376. package/dashboard/dist-server/server/coordinator/chain-map.test.js +230 -0
  377. package/dashboard/dist-server/server/coordinator/chain-map.test.js.map +1 -0
  378. package/dashboard/dist-server/server/coordinator/coordinate-runner.d.ts +41 -0
  379. package/dashboard/dist-server/server/coordinator/coordinate-runner.js +511 -0
  380. package/dashboard/dist-server/server/coordinator/coordinate-runner.js.map +1 -0
  381. package/dashboard/dist-server/server/coordinator/coordinator-routes.d.ts +12 -0
  382. package/dashboard/dist-server/server/coordinator/coordinator-routes.js +84 -0
  383. package/dashboard/dist-server/server/coordinator/coordinator-routes.js.map +1 -0
  384. package/dashboard/dist-server/server/coordinator/coordinator-routes.test.d.ts +1 -0
  385. package/dashboard/dist-server/server/coordinator/coordinator-routes.test.js +233 -0
  386. package/dashboard/dist-server/server/coordinator/coordinator-routes.test.js.map +1 -0
  387. package/dashboard/dist-server/server/coordinator/dashboard-executor.d.ts +13 -0
  388. package/dashboard/dist-server/server/coordinator/dashboard-executor.js +98 -0
  389. package/dashboard/dist-server/server/coordinator/dashboard-executor.js.map +1 -0
  390. package/dashboard/dist-server/server/coordinator/dashboard-step-analyzer.d.ts +7 -0
  391. package/dashboard/dist-server/server/coordinator/dashboard-step-analyzer.js +34 -0
  392. package/dashboard/dist-server/server/coordinator/dashboard-step-analyzer.js.map +1 -0
  393. package/dashboard/dist-server/server/coordinator/graph-walker-factory.d.ts +22 -0
  394. package/dashboard/dist-server/server/coordinator/graph-walker-factory.js +53 -0
  395. package/dashboard/dist-server/server/coordinator/graph-walker-factory.js.map +1 -0
  396. package/dashboard/dist-server/server/coordinator/prompts/index.d.ts +18 -0
  397. package/dashboard/dist-server/server/coordinator/prompts/index.js +82 -0
  398. package/dashboard/dist-server/server/coordinator/prompts/index.js.map +1 -0
  399. package/dashboard/dist-server/server/coordinator/tools/workflow-mcp-server.d.ts +3 -0
  400. package/dashboard/dist-server/server/coordinator/tools/workflow-mcp-server.js +109 -0
  401. package/dashboard/dist-server/server/coordinator/tools/workflow-mcp-server.js.map +1 -0
  402. package/dashboard/dist-server/server/coordinator/types.d.ts +51 -0
  403. package/dashboard/dist-server/server/coordinator/types.js +5 -0
  404. package/dashboard/dist-server/server/coordinator/types.js.map +1 -0
  405. package/dashboard/dist-server/server/coordinator/walker-event-bridge.d.ts +9 -0
  406. package/dashboard/dist-server/server/coordinator/walker-event-bridge.js +61 -0
  407. package/dashboard/dist-server/server/coordinator/walker-event-bridge.js.map +1 -0
  408. package/dashboard/dist-server/server/coordinator/workflow-coordinator.d.ts +39 -0
  409. package/dashboard/dist-server/server/coordinator/workflow-coordinator.js +250 -0
  410. package/dashboard/dist-server/server/coordinator/workflow-coordinator.js.map +1 -0
  411. package/dashboard/dist-server/server/coordinator/workflow-coordinator.test.d.ts +1 -0
  412. package/dashboard/dist-server/server/coordinator/workflow-coordinator.test.js +247 -0
  413. package/dashboard/dist-server/server/coordinator/workflow-coordinator.test.js.map +1 -0
  414. package/dashboard/dist-server/server/execution/dispatch-strategy.d.ts +33 -0
  415. package/dashboard/dist-server/server/execution/dispatch-strategy.js +5 -0
  416. package/dashboard/dist-server/server/execution/dispatch-strategy.js.map +1 -0
  417. package/dashboard/dist-server/server/execution/execution-journal.d.ts +16 -0
  418. package/dashboard/dist-server/server/execution/execution-journal.js +100 -0
  419. package/dashboard/dist-server/server/execution/execution-journal.js.map +1 -0
  420. package/dashboard/dist-server/server/execution/execution-scheduler.d.ts +126 -0
  421. package/dashboard/dist-server/server/execution/execution-scheduler.js +1101 -0
  422. package/dashboard/dist-server/server/execution/execution-scheduler.js.map +1 -0
  423. package/dashboard/dist-server/server/execution/execution-scheduler.test.d.ts +1 -0
  424. package/dashboard/dist-server/server/execution/execution-scheduler.test.js +129 -0
  425. package/dashboard/dist-server/server/execution/execution-scheduler.test.js.map +1 -0
  426. package/dashboard/dist-server/server/execution/strategies/commander-strategy.d.ts +8 -0
  427. package/dashboard/dist-server/server/execution/strategies/commander-strategy.js +24 -0
  428. package/dashboard/dist-server/server/execution/strategies/commander-strategy.js.map +1 -0
  429. package/dashboard/dist-server/server/execution/strategies/priority-strategy.d.ts +5 -0
  430. package/dashboard/dist-server/server/execution/strategies/priority-strategy.js +33 -0
  431. package/dashboard/dist-server/server/execution/strategies/priority-strategy.js.map +1 -0
  432. package/dashboard/dist-server/server/execution/strategies/smart-strategy.d.ts +5 -0
  433. package/dashboard/dist-server/server/execution/strategies/smart-strategy.js +53 -0
  434. package/dashboard/dist-server/server/execution/strategies/smart-strategy.js.map +1 -0
  435. package/dashboard/dist-server/server/execution/wave-executor.d.ts +32 -0
  436. package/dashboard/dist-server/server/execution/wave-executor.js +434 -0
  437. package/dashboard/dist-server/server/execution/wave-executor.js.map +1 -0
  438. package/dashboard/dist-server/server/execution/workspace-manager.d.ts +49 -0
  439. package/dashboard/dist-server/server/execution/workspace-manager.js +155 -0
  440. package/dashboard/dist-server/server/execution/workspace-manager.js.map +1 -0
  441. package/dashboard/dist-server/server/index.d.ts +1 -0
  442. package/dashboard/dist-server/server/index.js +207 -0
  443. package/dashboard/dist-server/server/index.js.map +1 -0
  444. package/dashboard/dist-server/server/observability/observability-routes.d.ts +7 -0
  445. package/dashboard/dist-server/server/observability/observability-routes.js +41 -0
  446. package/dashboard/dist-server/server/observability/observability-routes.js.map +1 -0
  447. package/dashboard/dist-server/server/observability/observability-service.d.ts +19 -0
  448. package/dashboard/dist-server/server/observability/observability-service.js +107 -0
  449. package/dashboard/dist-server/server/observability/observability-service.js.map +1 -0
  450. package/dashboard/dist-server/server/prompt/builders/assessment-builder.d.ts +5 -0
  451. package/dashboard/dist-server/server/prompt/builders/assessment-builder.js +72 -0
  452. package/dashboard/dist-server/server/prompt/builders/assessment-builder.js.map +1 -0
  453. package/dashboard/dist-server/server/prompt/builders/decompose-builder.d.ts +5 -0
  454. package/dashboard/dist-server/server/prompt/builders/decompose-builder.js +44 -0
  455. package/dashboard/dist-server/server/prompt/builders/decompose-builder.js.map +1 -0
  456. package/dashboard/dist-server/server/prompt/builders/direct-builder.d.ts +5 -0
  457. package/dashboard/dist-server/server/prompt/builders/direct-builder.js +51 -0
  458. package/dashboard/dist-server/server/prompt/builders/direct-builder.js.map +1 -0
  459. package/dashboard/dist-server/server/prompt/builders/skill-builder.d.ts +5 -0
  460. package/dashboard/dist-server/server/prompt/builders/skill-builder.js +30 -0
  461. package/dashboard/dist-server/server/prompt/builders/skill-builder.js.map +1 -0
  462. package/dashboard/dist-server/server/prompt/builders/template-builder.d.ts +5 -0
  463. package/dashboard/dist-server/server/prompt/builders/template-builder.js +26 -0
  464. package/dashboard/dist-server/server/prompt/builders/template-builder.js.map +1 -0
  465. package/dashboard/dist-server/server/prompt/prompt-builder.d.ts +21 -0
  466. package/dashboard/dist-server/server/prompt/prompt-builder.js +5 -0
  467. package/dashboard/dist-server/server/prompt/prompt-builder.js.map +1 -0
  468. package/dashboard/dist-server/server/prompt/prompt-registry.d.ts +8 -0
  469. package/dashboard/dist-server/server/prompt/prompt-registry.js +30 -0
  470. package/dashboard/dist-server/server/prompt/prompt-registry.js.map +1 -0
  471. package/dashboard/dist-server/server/requirement/requirement-expander.d.ts +38 -0
  472. package/dashboard/dist-server/server/requirement/requirement-expander.js +384 -0
  473. package/dashboard/dist-server/server/requirement/requirement-expander.js.map +1 -0
  474. package/dashboard/dist-server/server/requirement/requirement-prompts.d.ts +7 -0
  475. package/dashboard/dist-server/server/requirement/requirement-prompts.js +200 -0
  476. package/dashboard/dist-server/server/requirement/requirement-prompts.js.map +1 -0
  477. package/dashboard/dist-server/server/routes/agents.d.ts +13 -0
  478. package/dashboard/dist-server/server/routes/agents.js +124 -0
  479. package/dashboard/dist-server/server/routes/agents.js.map +1 -0
  480. package/dashboard/dist-server/server/routes/artifacts.d.ts +2 -0
  481. package/dashboard/dist-server/server/routes/artifacts.js +109 -0
  482. package/dashboard/dist-server/server/routes/artifacts.js.map +1 -0
  483. package/dashboard/dist-server/server/routes/board-state.integration.test.d.ts +1 -0
  484. package/dashboard/dist-server/server/routes/board-state.integration.test.js +240 -0
  485. package/dashboard/dist-server/server/routes/board-state.integration.test.js.map +1 -0
  486. package/dashboard/dist-server/server/routes/board.d.ts +9 -0
  487. package/dashboard/dist-server/server/routes/board.js +18 -0
  488. package/dashboard/dist-server/server/routes/board.js.map +1 -0
  489. package/dashboard/dist-server/server/routes/cli-history.d.ts +8 -0
  490. package/dashboard/dist-server/server/routes/cli-history.js +85 -0
  491. package/dashboard/dist-server/server/routes/cli-history.js.map +1 -0
  492. package/dashboard/dist-server/server/routes/events.d.ts +13 -0
  493. package/dashboard/dist-server/server/routes/events.js +52 -0
  494. package/dashboard/dist-server/server/routes/events.js.map +1 -0
  495. package/dashboard/dist-server/server/routes/events.test.d.ts +1 -0
  496. package/dashboard/dist-server/server/routes/events.test.js +127 -0
  497. package/dashboard/dist-server/server/routes/events.test.js.map +1 -0
  498. package/dashboard/dist-server/server/routes/execution.d.ts +12 -0
  499. package/dashboard/dist-server/server/routes/execution.integration.test.d.ts +1 -0
  500. package/dashboard/dist-server/server/routes/execution.integration.test.js +280 -0
  501. package/dashboard/dist-server/server/routes/execution.integration.test.js.map +1 -0
  502. package/dashboard/dist-server/server/routes/execution.js +103 -0
  503. package/dashboard/dist-server/server/routes/execution.js.map +1 -0
  504. package/dashboard/dist-server/server/routes/health.d.ts +3 -0
  505. package/dashboard/dist-server/server/routes/health.js +84 -0
  506. package/dashboard/dist-server/server/routes/health.js.map +1 -0
  507. package/dashboard/dist-server/server/routes/index.d.ts +28 -0
  508. package/dashboard/dist-server/server/routes/index.js +97 -0
  509. package/dashboard/dist-server/server/routes/index.js.map +1 -0
  510. package/dashboard/dist-server/server/routes/install-utils.d.ts +55 -0
  511. package/dashboard/dist-server/server/routes/install-utils.js +278 -0
  512. package/dashboard/dist-server/server/routes/install-utils.js.map +1 -0
  513. package/dashboard/dist-server/server/routes/install.d.ts +8 -0
  514. package/dashboard/dist-server/server/routes/install.js +191 -0
  515. package/dashboard/dist-server/server/routes/install.js.map +1 -0
  516. package/dashboard/dist-server/server/routes/issues.d.ts +13 -0
  517. package/dashboard/dist-server/server/routes/issues.js +328 -0
  518. package/dashboard/dist-server/server/routes/issues.js.map +1 -0
  519. package/dashboard/dist-server/server/routes/issues.test.d.ts +1 -0
  520. package/dashboard/dist-server/server/routes/issues.test.js +346 -0
  521. package/dashboard/dist-server/server/routes/issues.test.js.map +1 -0
  522. package/dashboard/dist-server/server/routes/linear.d.ts +2 -0
  523. package/dashboard/dist-server/server/routes/linear.js +341 -0
  524. package/dashboard/dist-server/server/routes/linear.js.map +1 -0
  525. package/dashboard/dist-server/server/routes/mcp-templates-store.d.ts +30 -0
  526. package/dashboard/dist-server/server/routes/mcp-templates-store.js +110 -0
  527. package/dashboard/dist-server/server/routes/mcp-templates-store.js.map +1 -0
  528. package/dashboard/dist-server/server/routes/mcp.d.ts +2 -0
  529. package/dashboard/dist-server/server/routes/mcp.js +718 -0
  530. package/dashboard/dist-server/server/routes/mcp.js.map +1 -0
  531. package/dashboard/dist-server/server/routes/phases.d.ts +10 -0
  532. package/dashboard/dist-server/server/routes/phases.js +40 -0
  533. package/dashboard/dist-server/server/routes/phases.js.map +1 -0
  534. package/dashboard/dist-server/server/routes/requirements.d.ts +12 -0
  535. package/dashboard/dist-server/server/routes/requirements.js +130 -0
  536. package/dashboard/dist-server/server/routes/requirements.js.map +1 -0
  537. package/dashboard/dist-server/server/routes/scratch.d.ts +8 -0
  538. package/dashboard/dist-server/server/routes/scratch.js +15 -0
  539. package/dashboard/dist-server/server/routes/scratch.js.map +1 -0
  540. package/dashboard/dist-server/server/routes/settings.d.ts +2 -0
  541. package/dashboard/dist-server/server/routes/settings.js +450 -0
  542. package/dashboard/dist-server/server/routes/settings.js.map +1 -0
  543. package/dashboard/dist-server/server/routes/specs.d.ts +21 -0
  544. package/dashboard/dist-server/server/routes/specs.integration.test.d.ts +1 -0
  545. package/dashboard/dist-server/server/routes/specs.integration.test.js +613 -0
  546. package/dashboard/dist-server/server/routes/specs.integration.test.js.map +1 -0
  547. package/dashboard/dist-server/server/routes/specs.js +419 -0
  548. package/dashboard/dist-server/server/routes/specs.js.map +1 -0
  549. package/dashboard/dist-server/server/routes/supervisor.d.ts +22 -0
  550. package/dashboard/dist-server/server/routes/supervisor.js +195 -0
  551. package/dashboard/dist-server/server/routes/supervisor.js.map +1 -0
  552. package/dashboard/dist-server/server/routes/supervisor.test.d.ts +1 -0
  553. package/dashboard/dist-server/server/routes/supervisor.test.js +473 -0
  554. package/dashboard/dist-server/server/routes/supervisor.test.js.map +1 -0
  555. package/dashboard/dist-server/server/routes/teams.d.ts +2 -0
  556. package/dashboard/dist-server/server/routes/teams.js +418 -0
  557. package/dashboard/dist-server/server/routes/teams.js.map +1 -0
  558. package/dashboard/dist-server/server/routes/workspace.d.ts +2 -0
  559. package/dashboard/dist-server/server/routes/workspace.js +92 -0
  560. package/dashboard/dist-server/server/routes/workspace.js.map +1 -0
  561. package/dashboard/dist-server/server/sse/sse-hub.d.ts +33 -0
  562. package/dashboard/dist-server/server/sse/sse-hub.js +112 -0
  563. package/dashboard/dist-server/server/sse/sse-hub.js.map +1 -0
  564. package/dashboard/dist-server/server/sse/sse-hub.test.d.ts +1 -0
  565. package/dashboard/dist-server/server/sse/sse-hub.test.js +128 -0
  566. package/dashboard/dist-server/server/sse/sse-hub.test.js.map +1 -0
  567. package/dashboard/dist-server/server/state/event-bus.d.ts +97 -0
  568. package/dashboard/dist-server/server/state/event-bus.js +110 -0
  569. package/dashboard/dist-server/server/state/event-bus.js.map +1 -0
  570. package/dashboard/dist-server/server/state/file-reader.d.ts +9 -0
  571. package/dashboard/dist-server/server/state/file-reader.js +54 -0
  572. package/dashboard/dist-server/server/state/file-reader.js.map +1 -0
  573. package/dashboard/dist-server/server/state/fs-watcher.d.ts +19 -0
  574. package/dashboard/dist-server/server/state/fs-watcher.js +94 -0
  575. package/dashboard/dist-server/server/state/fs-watcher.js.map +1 -0
  576. package/dashboard/dist-server/server/state/state-manager.d.ts +31 -0
  577. package/dashboard/dist-server/server/state/state-manager.js +297 -0
  578. package/dashboard/dist-server/server/state/state-manager.js.map +1 -0
  579. package/dashboard/dist-server/server/state/state-manager.test.d.ts +1 -0
  580. package/dashboard/dist-server/server/state/state-manager.test.js +258 -0
  581. package/dashboard/dist-server/server/state/state-manager.test.js.map +1 -0
  582. package/dashboard/dist-server/server/supervisor/extension-manager.d.ts +18 -0
  583. package/dashboard/dist-server/server/supervisor/extension-manager.js +62 -0
  584. package/dashboard/dist-server/server/supervisor/extension-manager.js.map +1 -0
  585. package/dashboard/dist-server/server/supervisor/extension-manager.test.d.ts +1 -0
  586. package/dashboard/dist-server/server/supervisor/extension-manager.test.js +160 -0
  587. package/dashboard/dist-server/server/supervisor/extension-manager.test.js.map +1 -0
  588. package/dashboard/dist-server/server/supervisor/self-learning-service.d.ts +29 -0
  589. package/dashboard/dist-server/server/supervisor/self-learning-service.js +291 -0
  590. package/dashboard/dist-server/server/supervisor/self-learning-service.js.map +1 -0
  591. package/dashboard/dist-server/server/supervisor/self-learning-service.test.d.ts +1 -0
  592. package/dashboard/dist-server/server/supervisor/self-learning-service.test.js +430 -0
  593. package/dashboard/dist-server/server/supervisor/self-learning-service.test.js.map +1 -0
  594. package/dashboard/dist-server/server/supervisor/supervisor.integration.test.d.ts +1 -0
  595. package/dashboard/dist-server/server/supervisor/supervisor.integration.test.js +226 -0
  596. package/dashboard/dist-server/server/supervisor/supervisor.integration.test.js.map +1 -0
  597. package/dashboard/dist-server/server/supervisor/task-scheduler-service.d.ts +60 -0
  598. package/dashboard/dist-server/server/supervisor/task-scheduler-service.js +345 -0
  599. package/dashboard/dist-server/server/supervisor/task-scheduler-service.js.map +1 -0
  600. package/dashboard/dist-server/server/supervisor/task-scheduler-service.test.d.ts +1 -0
  601. package/dashboard/dist-server/server/supervisor/task-scheduler-service.test.js +707 -0
  602. package/dashboard/dist-server/server/supervisor/task-scheduler-service.test.js.map +1 -0
  603. package/dashboard/dist-server/server/utils/issue-store.d.ts +10 -0
  604. package/dashboard/dist-server/server/utils/issue-store.js +71 -0
  605. package/dashboard/dist-server/server/utils/issue-store.js.map +1 -0
  606. package/dashboard/dist-server/server/utils/issue-store.test.d.ts +1 -0
  607. package/dashboard/dist-server/server/utils/issue-store.test.js +100 -0
  608. package/dashboard/dist-server/server/utils/issue-store.test.js.map +1 -0
  609. package/dashboard/dist-server/server/ws/handlers/agent-handler.d.ts +19 -0
  610. package/dashboard/dist-server/server/ws/handlers/agent-handler.js +93 -0
  611. package/dashboard/dist-server/server/ws/handlers/agent-handler.js.map +1 -0
  612. package/dashboard/dist-server/server/ws/handlers/commander-handler.d.ts +10 -0
  613. package/dashboard/dist-server/server/ws/handlers/commander-handler.js +41 -0
  614. package/dashboard/dist-server/server/ws/handlers/commander-handler.js.map +1 -0
  615. package/dashboard/dist-server/server/ws/handlers/coordinate-handler.d.ts +10 -0
  616. package/dashboard/dist-server/server/ws/handlers/coordinate-handler.js +34 -0
  617. package/dashboard/dist-server/server/ws/handlers/coordinate-handler.js.map +1 -0
  618. package/dashboard/dist-server/server/ws/handlers/execution-handler.d.ts +24 -0
  619. package/dashboard/dist-server/server/ws/handlers/execution-handler.js +157 -0
  620. package/dashboard/dist-server/server/ws/handlers/execution-handler.js.map +1 -0
  621. package/dashboard/dist-server/server/ws/handlers/requirement-handler.d.ts +10 -0
  622. package/dashboard/dist-server/server/ws/handlers/requirement-handler.js +50 -0
  623. package/dashboard/dist-server/server/ws/handlers/requirement-handler.js.map +1 -0
  624. package/dashboard/dist-server/server/ws/handlers/supervisor-handler.d.ts +12 -0
  625. package/dashboard/dist-server/server/ws/handlers/supervisor-handler.js +35 -0
  626. package/dashboard/dist-server/server/ws/handlers/supervisor-handler.js.map +1 -0
  627. package/dashboard/dist-server/server/ws/handlers/supervisor-handler.test.d.ts +1 -0
  628. package/dashboard/dist-server/server/ws/handlers/supervisor-handler.test.js +127 -0
  629. package/dashboard/dist-server/server/ws/handlers/supervisor-handler.test.js.map +1 -0
  630. package/dashboard/dist-server/server/ws/ws-handler.d.ts +8 -0
  631. package/dashboard/dist-server/server/ws/ws-handler.js +2 -0
  632. package/dashboard/dist-server/server/ws/ws-handler.js.map +1 -0
  633. package/dashboard/dist-server/server/ws/ws-manager.d.ts +33 -0
  634. package/dashboard/dist-server/server/ws/ws-manager.js +124 -0
  635. package/dashboard/dist-server/server/ws/ws-manager.js.map +1 -0
  636. package/dashboard/dist-server/shared/agent-types.d.ts +143 -0
  637. package/dashboard/dist-server/shared/agent-types.js +5 -0
  638. package/dashboard/dist-server/shared/agent-types.js.map +1 -0
  639. package/dashboard/dist-server/shared/commander-types.d.ts +86 -0
  640. package/dashboard/dist-server/shared/commander-types.js +37 -0
  641. package/dashboard/dist-server/shared/commander-types.js.map +1 -0
  642. package/dashboard/dist-server/shared/constants.d.ts +110 -0
  643. package/dashboard/dist-server/shared/constants.js +293 -0
  644. package/dashboard/dist-server/shared/constants.js.map +1 -0
  645. package/dashboard/dist-server/shared/constants.test.d.ts +1 -0
  646. package/dashboard/dist-server/shared/constants.test.js +126 -0
  647. package/dashboard/dist-server/shared/constants.test.js.map +1 -0
  648. package/dashboard/dist-server/shared/coordinate-types.d.ts +55 -0
  649. package/dashboard/dist-server/shared/coordinate-types.js +5 -0
  650. package/dashboard/dist-server/shared/coordinate-types.js.map +1 -0
  651. package/dashboard/dist-server/shared/execution-types.d.ts +86 -0
  652. package/dashboard/dist-server/shared/execution-types.js +23 -0
  653. package/dashboard/dist-server/shared/execution-types.js.map +1 -0
  654. package/dashboard/dist-server/shared/extension-types.d.ts +30 -0
  655. package/dashboard/dist-server/shared/extension-types.js +5 -0
  656. package/dashboard/dist-server/shared/extension-types.js.map +1 -0
  657. package/dashboard/dist-server/shared/issue-types.d.ts +79 -0
  658. package/dashboard/dist-server/shared/issue-types.js +16 -0
  659. package/dashboard/dist-server/shared/issue-types.js.map +1 -0
  660. package/dashboard/dist-server/shared/issue-types.test.d.ts +1 -0
  661. package/dashboard/dist-server/shared/issue-types.test.js +124 -0
  662. package/dashboard/dist-server/shared/issue-types.test.js.map +1 -0
  663. package/dashboard/dist-server/shared/journal-types.d.ts +57 -0
  664. package/dashboard/dist-server/shared/journal-types.js +5 -0
  665. package/dashboard/dist-server/shared/journal-types.js.map +1 -0
  666. package/dashboard/dist-server/shared/learning-types.d.ts +31 -0
  667. package/dashboard/dist-server/shared/learning-types.js +5 -0
  668. package/dashboard/dist-server/shared/learning-types.js.map +1 -0
  669. package/dashboard/dist-server/shared/linear-types.d.ts +59 -0
  670. package/dashboard/dist-server/shared/linear-types.js +18 -0
  671. package/dashboard/dist-server/shared/linear-types.js.map +1 -0
  672. package/dashboard/dist-server/shared/requirement-types.d.ts +73 -0
  673. package/dashboard/dist-server/shared/requirement-types.js +5 -0
  674. package/dashboard/dist-server/shared/requirement-types.js.map +1 -0
  675. package/dashboard/dist-server/shared/schedule-types.d.ts +18 -0
  676. package/dashboard/dist-server/shared/schedule-types.js +5 -0
  677. package/dashboard/dist-server/shared/schedule-types.js.map +1 -0
  678. package/dashboard/dist-server/shared/team-types.d.ts +65 -0
  679. package/dashboard/dist-server/shared/team-types.js +54 -0
  680. package/dashboard/dist-server/shared/team-types.js.map +1 -0
  681. package/dashboard/dist-server/shared/types.d.ts +219 -0
  682. package/dashboard/dist-server/shared/types.js +2 -0
  683. package/dashboard/dist-server/shared/types.js.map +1 -0
  684. package/dashboard/dist-server/shared/utils.d.ts +2 -0
  685. package/dashboard/dist-server/shared/utils.js +6 -0
  686. package/dashboard/dist-server/shared/utils.js.map +1 -0
  687. package/dashboard/dist-server/shared/utils.test.d.ts +1 -0
  688. package/dashboard/dist-server/shared/utils.test.js +22 -0
  689. package/dashboard/dist-server/shared/utils.test.js.map +1 -0
  690. package/dashboard/dist-server/shared/wave-types.d.ts +41 -0
  691. package/dashboard/dist-server/shared/wave-types.js +5 -0
  692. package/dashboard/dist-server/shared/wave-types.js.map +1 -0
  693. package/dashboard/dist-server/shared/ws-protocol.d.ts +154 -0
  694. package/dashboard/dist-server/shared/ws-protocol.js +8 -0
  695. package/dashboard/dist-server/shared/ws-protocol.js.map +1 -0
  696. package/dashboard/package.json +59 -0
  697. package/dist/agents/cli-agent-runner.d.ts +20 -0
  698. package/dist/agents/cli-agent-runner.d.ts.map +1 -0
  699. package/dist/agents/cli-agent-runner.js +269 -0
  700. package/dist/agents/cli-agent-runner.js.map +1 -0
  701. package/dist/agents/cli-history-store.d.ts +47 -0
  702. package/dist/agents/cli-history-store.d.ts.map +1 -0
  703. package/dist/agents/cli-history-store.js +212 -0
  704. package/dist/agents/cli-history-store.js.map +1 -0
  705. package/dist/agents/dashboard-bridge.d.ts +34 -0
  706. package/dist/agents/dashboard-bridge.d.ts.map +1 -0
  707. package/dist/agents/dashboard-bridge.js +63 -0
  708. package/dist/agents/dashboard-bridge.js.map +1 -0
  709. package/dist/cli.d.ts +2 -0
  710. package/dist/cli.d.ts.map +1 -0
  711. package/dist/cli.js +34 -0
  712. package/dist/cli.js.map +1 -0
  713. package/dist/commands/cli.d.ts +3 -0
  714. package/dist/commands/cli.d.ts.map +1 -0
  715. package/dist/commands/cli.js +262 -0
  716. package/dist/commands/cli.js.map +1 -0
  717. package/dist/commands/coordinate.d.ts +3 -0
  718. package/dist/commands/coordinate.d.ts.map +1 -0
  719. package/dist/commands/coordinate.js +243 -0
  720. package/dist/commands/coordinate.js.map +1 -0
  721. package/dist/commands/ext.d.ts +3 -0
  722. package/dist/commands/ext.d.ts.map +1 -0
  723. package/dist/commands/ext.js +28 -0
  724. package/dist/commands/ext.js.map +1 -0
  725. package/dist/commands/hooks.d.ts +3 -0
  726. package/dist/commands/hooks.d.ts.map +1 -0
  727. package/dist/commands/hooks.js +119 -0
  728. package/dist/commands/hooks.js.map +1 -0
  729. package/dist/commands/install.d.ts +3 -0
  730. package/dist/commands/install.d.ts.map +1 -0
  731. package/dist/commands/install.js +583 -0
  732. package/dist/commands/install.js.map +1 -0
  733. package/dist/commands/launcher.d.ts +3 -0
  734. package/dist/commands/launcher.d.ts.map +1 -0
  735. package/dist/commands/launcher.js +635 -0
  736. package/dist/commands/launcher.js.map +1 -0
  737. package/dist/commands/link-coordinate.d.ts +3 -0
  738. package/dist/commands/link-coordinate.d.ts.map +1 -0
  739. package/dist/commands/link-coordinate.js +225 -0
  740. package/dist/commands/link-coordinate.js.map +1 -0
  741. package/dist/commands/run.d.ts +3 -0
  742. package/dist/commands/run.d.ts.map +1 -0
  743. package/dist/commands/run.js +15 -0
  744. package/dist/commands/run.js.map +1 -0
  745. package/dist/commands/serve.d.ts +3 -0
  746. package/dist/commands/serve.d.ts.map +1 -0
  747. package/dist/commands/serve.js +16 -0
  748. package/dist/commands/serve.js.map +1 -0
  749. package/dist/commands/spec.d.ts +8 -0
  750. package/dist/commands/spec.d.ts.map +1 -0
  751. package/dist/commands/spec.js +147 -0
  752. package/dist/commands/spec.js.map +1 -0
  753. package/dist/commands/stop.d.ts +3 -0
  754. package/dist/commands/stop.d.ts.map +1 -0
  755. package/dist/commands/stop.js +218 -0
  756. package/dist/commands/stop.js.map +1 -0
  757. package/dist/commands/tool.d.ts +3 -0
  758. package/dist/commands/tool.d.ts.map +1 -0
  759. package/dist/commands/tool.js +29 -0
  760. package/dist/commands/tool.js.map +1 -0
  761. package/dist/commands/uninstall.d.ts +3 -0
  762. package/dist/commands/uninstall.d.ts.map +1 -0
  763. package/dist/commands/uninstall.js +72 -0
  764. package/dist/commands/uninstall.js.map +1 -0
  765. package/dist/commands/view.d.ts +3 -0
  766. package/dist/commands/view.d.ts.map +1 -0
  767. package/dist/commands/view.js +337 -0
  768. package/dist/commands/view.js.map +1 -0
  769. package/dist/config/cli-tools-config.d.ts +26 -0
  770. package/dist/config/cli-tools-config.d.ts.map +1 -0
  771. package/dist/config/cli-tools-config.js +49 -0
  772. package/dist/config/cli-tools-config.js.map +1 -0
  773. package/dist/config/cli-tools-config.test.d.ts +2 -0
  774. package/dist/config/cli-tools-config.test.d.ts.map +1 -0
  775. package/dist/config/cli-tools-config.test.js +59 -0
  776. package/dist/config/cli-tools-config.test.js.map +1 -0
  777. package/dist/config/index.d.ts +4 -0
  778. package/dist/config/index.d.ts.map +1 -0
  779. package/dist/config/index.js +27 -0
  780. package/dist/config/index.js.map +1 -0
  781. package/dist/config/paths.d.ts +15 -0
  782. package/dist/config/paths.d.ts.map +1 -0
  783. package/dist/config/paths.js +27 -0
  784. package/dist/config/paths.js.map +1 -0
  785. package/dist/config/template-discovery.d.ts +32 -0
  786. package/dist/config/template-discovery.d.ts.map +1 -0
  787. package/dist/config/template-discovery.js +128 -0
  788. package/dist/config/template-discovery.js.map +1 -0
  789. package/dist/coordinator/cli-executor.d.ts +22 -0
  790. package/dist/coordinator/cli-executor.d.ts.map +1 -0
  791. package/dist/coordinator/cli-executor.js +49 -0
  792. package/dist/coordinator/cli-executor.js.map +1 -0
  793. package/dist/coordinator/expr-evaluator.d.ts +11 -0
  794. package/dist/coordinator/expr-evaluator.d.ts.map +1 -0
  795. package/dist/coordinator/expr-evaluator.js +351 -0
  796. package/dist/coordinator/expr-evaluator.js.map +1 -0
  797. package/dist/coordinator/graph-loader.d.ts +16 -0
  798. package/dist/coordinator/graph-loader.d.ts.map +1 -0
  799. package/dist/coordinator/graph-loader.js +190 -0
  800. package/dist/coordinator/graph-loader.js.map +1 -0
  801. package/dist/coordinator/graph-types.d.ts +287 -0
  802. package/dist/coordinator/graph-types.d.ts.map +1 -0
  803. package/dist/coordinator/graph-types.js +6 -0
  804. package/dist/coordinator/graph-types.js.map +1 -0
  805. package/dist/coordinator/graph-walker.d.ts +49 -0
  806. package/dist/coordinator/graph-walker.d.ts.map +1 -0
  807. package/dist/coordinator/graph-walker.js +527 -0
  808. package/dist/coordinator/graph-walker.js.map +1 -0
  809. package/dist/coordinator/index.d.ts +11 -0
  810. package/dist/coordinator/index.d.ts.map +1 -0
  811. package/dist/coordinator/index.js +13 -0
  812. package/dist/coordinator/index.js.map +1 -0
  813. package/dist/coordinator/intent-router.d.ts +11 -0
  814. package/dist/coordinator/intent-router.d.ts.map +1 -0
  815. package/dist/coordinator/intent-router.js +65 -0
  816. package/dist/coordinator/intent-router.js.map +1 -0
  817. package/dist/coordinator/link-session.d.ts +29 -0
  818. package/dist/coordinator/link-session.d.ts.map +1 -0
  819. package/dist/coordinator/link-session.js +192 -0
  820. package/dist/coordinator/link-session.js.map +1 -0
  821. package/dist/coordinator/link-walker.d.ts +56 -0
  822. package/dist/coordinator/link-walker.d.ts.map +1 -0
  823. package/dist/coordinator/link-walker.js +548 -0
  824. package/dist/coordinator/link-walker.js.map +1 -0
  825. package/dist/coordinator/output-parser.d.ts +5 -0
  826. package/dist/coordinator/output-parser.d.ts.map +1 -0
  827. package/dist/coordinator/output-parser.js +110 -0
  828. package/dist/coordinator/output-parser.js.map +1 -0
  829. package/dist/coordinator/prompt-assembler.d.ts +15 -0
  830. package/dist/coordinator/prompt-assembler.d.ts.map +1 -0
  831. package/dist/coordinator/prompt-assembler.js +228 -0
  832. package/dist/coordinator/prompt-assembler.js.map +1 -0
  833. package/dist/coordinator/step-analyzer.d.ts +8 -0
  834. package/dist/coordinator/step-analyzer.d.ts.map +1 -0
  835. package/dist/coordinator/step-analyzer.js +82 -0
  836. package/dist/coordinator/step-analyzer.js.map +1 -0
  837. package/dist/core/extension-loader.d.ts +11 -0
  838. package/dist/core/extension-loader.d.ts.map +1 -0
  839. package/dist/core/extension-loader.js +54 -0
  840. package/dist/core/extension-loader.js.map +1 -0
  841. package/dist/core/manifest.d.ts +24 -0
  842. package/dist/core/manifest.d.ts.map +1 -0
  843. package/dist/core/manifest.js +139 -0
  844. package/dist/core/manifest.js.map +1 -0
  845. package/dist/core/mcp-tool-registry.integration.test.d.ts +2 -0
  846. package/dist/core/mcp-tool-registry.integration.test.d.ts.map +1 -0
  847. package/dist/core/mcp-tool-registry.integration.test.js +220 -0
  848. package/dist/core/mcp-tool-registry.integration.test.js.map +1 -0
  849. package/dist/core/tool-registry.d.ts +10 -0
  850. package/dist/core/tool-registry.d.ts.map +1 -0
  851. package/dist/core/tool-registry.js +29 -0
  852. package/dist/core/tool-registry.js.map +1 -0
  853. package/dist/core/tool-registry.test.d.ts +2 -0
  854. package/dist/core/tool-registry.test.d.ts.map +1 -0
  855. package/dist/core/tool-registry.test.js +78 -0
  856. package/dist/core/tool-registry.test.js.map +1 -0
  857. package/dist/hooks/constants.d.ts +38 -0
  858. package/dist/hooks/constants.d.ts.map +1 -0
  859. package/dist/hooks/constants.js +51 -0
  860. package/dist/hooks/constants.js.map +1 -0
  861. package/dist/hooks/context-monitor.d.ts +33 -0
  862. package/dist/hooks/context-monitor.d.ts.map +1 -0
  863. package/dist/hooks/context-monitor.js +117 -0
  864. package/dist/hooks/context-monitor.js.map +1 -0
  865. package/dist/hooks/index.d.ts +4 -0
  866. package/dist/hooks/index.d.ts.map +1 -0
  867. package/dist/hooks/index.js +4 -0
  868. package/dist/hooks/index.js.map +1 -0
  869. package/dist/hooks/statusline.d.ts +29 -0
  870. package/dist/hooks/statusline.d.ts.map +1 -0
  871. package/dist/hooks/statusline.js +134 -0
  872. package/dist/hooks/statusline.js.map +1 -0
  873. package/dist/index.d.ts +8 -0
  874. package/dist/index.d.ts.map +1 -0
  875. package/dist/index.js +6 -0
  876. package/dist/index.js.map +1 -0
  877. package/dist/mcp/server.d.ts +2 -0
  878. package/dist/mcp/server.d.ts.map +1 -0
  879. package/dist/mcp/server.js +41 -0
  880. package/dist/mcp/server.js.map +1 -0
  881. package/dist/tools/core-memory.d.ts +12 -0
  882. package/dist/tools/core-memory.d.ts.map +1 -0
  883. package/dist/tools/core-memory.js +276 -0
  884. package/dist/tools/core-memory.js.map +1 -0
  885. package/dist/tools/edit-file.d.ts +25 -0
  886. package/dist/tools/edit-file.d.ts.map +1 -0
  887. package/dist/tools/edit-file.js +462 -0
  888. package/dist/tools/edit-file.js.map +1 -0
  889. package/dist/tools/index.d.ts +3 -0
  890. package/dist/tools/index.d.ts.map +1 -0
  891. package/dist/tools/index.js +147 -0
  892. package/dist/tools/index.js.map +1 -0
  893. package/dist/tools/read-file.d.ts +13 -0
  894. package/dist/tools/read-file.d.ts.map +1 -0
  895. package/dist/tools/read-file.js +91 -0
  896. package/dist/tools/read-file.js.map +1 -0
  897. package/dist/tools/read-many-files.d.ts +15 -0
  898. package/dist/tools/read-many-files.d.ts.map +1 -0
  899. package/dist/tools/read-many-files.js +187 -0
  900. package/dist/tools/read-many-files.js.map +1 -0
  901. package/dist/tools/spec-index-builder.d.ts +58 -0
  902. package/dist/tools/spec-index-builder.d.ts.map +1 -0
  903. package/dist/tools/spec-index-builder.js +211 -0
  904. package/dist/tools/spec-index-builder.js.map +1 -0
  905. package/dist/tools/spec-init.d.ts +17 -0
  906. package/dist/tools/spec-init.d.ts.map +1 -0
  907. package/dist/tools/spec-init.js +215 -0
  908. package/dist/tools/spec-init.js.map +1 -0
  909. package/dist/tools/spec-keyword-extractor.d.ts +24 -0
  910. package/dist/tools/spec-keyword-extractor.d.ts.map +1 -0
  911. package/dist/tools/spec-keyword-extractor.js +84 -0
  912. package/dist/tools/spec-keyword-extractor.js.map +1 -0
  913. package/dist/tools/spec-keyword-extractor.test.d.ts +2 -0
  914. package/dist/tools/spec-keyword-extractor.test.d.ts.map +1 -0
  915. package/dist/tools/spec-keyword-extractor.test.js +99 -0
  916. package/dist/tools/spec-keyword-extractor.test.js.map +1 -0
  917. package/dist/tools/spec-loader.d.ts +15 -0
  918. package/dist/tools/spec-loader.d.ts.map +1 -0
  919. package/dist/tools/spec-loader.js +93 -0
  920. package/dist/tools/spec-loader.js.map +1 -0
  921. package/dist/tools/team-msg.d.ts +52 -0
  922. package/dist/tools/team-msg.d.ts.map +1 -0
  923. package/dist/tools/team-msg.js +449 -0
  924. package/dist/tools/team-msg.js.map +1 -0
  925. package/dist/tools/write-file.d.ts +19 -0
  926. package/dist/tools/write-file.d.ts.map +1 -0
  927. package/dist/tools/write-file.js +165 -0
  928. package/dist/tools/write-file.js.map +1 -0
  929. package/dist/types/index.d.ts +47 -0
  930. package/dist/types/index.d.ts.map +1 -0
  931. package/dist/types/index.js +2 -0
  932. package/dist/types/index.js.map +1 -0
  933. package/dist/types/tool-schema.d.ts +37 -0
  934. package/dist/types/tool-schema.d.ts.map +1 -0
  935. package/dist/types/tool-schema.js +24 -0
  936. package/dist/types/tool-schema.js.map +1 -0
  937. package/dist/utils/file-reader.d.ts +74 -0
  938. package/dist/utils/file-reader.d.ts.map +1 -0
  939. package/dist/utils/file-reader.js +217 -0
  940. package/dist/utils/file-reader.js.map +1 -0
  941. package/dist/utils/path-validator.d.ts +52 -0
  942. package/dist/utils/path-validator.d.ts.map +1 -0
  943. package/dist/utils/path-validator.js +151 -0
  944. package/dist/utils/path-validator.js.map +1 -0
  945. package/package.json +56 -0
  946. package/templates/cli/prompts/analysis-analyze-code-patterns.txt +37 -0
  947. package/templates/cli/prompts/analysis-analyze-performance.txt +29 -0
  948. package/templates/cli/prompts/analysis-analyze-technical-document.txt +33 -0
  949. package/templates/cli/prompts/analysis-assess-security-risks.txt +29 -0
  950. package/templates/cli/prompts/analysis-diagnose-bug-root-cause.txt +127 -0
  951. package/templates/cli/prompts/analysis-review-architecture.txt +29 -0
  952. package/templates/cli/prompts/analysis-review-code-quality.txt +28 -0
  953. package/templates/cli/prompts/analysis-review-quality-standards.txt +29 -0
  954. package/templates/cli/prompts/analysis-trace-code-execution.txt +115 -0
  955. package/templates/cli/prompts/coordinate-step-v2.md +38 -0
  956. package/templates/cli/prompts/coordinate-step.txt +26 -0
  957. package/templates/cli/prompts/development-debug-runtime-issues.txt +55 -0
  958. package/templates/cli/prompts/development-generate-tests.txt +70 -0
  959. package/templates/cli/prompts/development-implement-component-ui.txt +55 -0
  960. package/templates/cli/prompts/development-implement-feature.txt +58 -0
  961. package/templates/cli/prompts/development-refactor-codebase.txt +55 -0
  962. package/templates/cli/prompts/documentation-api.txt +15 -0
  963. package/templates/cli/prompts/documentation-folder-navigation.txt +27 -0
  964. package/templates/cli/prompts/documentation-module-readme.txt +49 -0
  965. package/templates/cli/prompts/documentation-project-architecture.txt +41 -0
  966. package/templates/cli/prompts/documentation-project-examples.txt +35 -0
  967. package/templates/cli/prompts/documentation-project-readme.txt +35 -0
  968. package/templates/cli/prompts/documentation-swagger-api.txt +266 -0
  969. package/templates/cli/prompts/memory-document-module-structure.txt +165 -0
  970. package/templates/cli/prompts/planning-breakdown-task-steps.txt +30 -0
  971. package/templates/cli/prompts/planning-design-component-spec.txt +28 -0
  972. package/templates/cli/prompts/planning-evaluate-concept-feasibility.txt +127 -0
  973. package/templates/cli/prompts/planning-plan-architecture-design.txt +109 -0
  974. package/templates/cli/prompts/planning-plan-migration-strategy.txt +30 -0
  975. package/templates/cli/prompts/rules-rule-api.txt +122 -0
  976. package/templates/cli/prompts/rules-rule-components.txt +122 -0
  977. package/templates/cli/prompts/rules-rule-config.txt +89 -0
  978. package/templates/cli/prompts/rules-rule-core.txt +60 -0
  979. package/templates/cli/prompts/rules-rule-patterns.txt +70 -0
  980. package/templates/cli/prompts/rules-rule-testing.txt +81 -0
  981. package/templates/cli/prompts/rules-tech-rules-agent-prompt.txt +89 -0
  982. package/templates/cli/prompts/tech-tech-module-format.txt +359 -0
  983. package/templates/cli/prompts/tech-tech-skill-index.txt +185 -0
  984. package/templates/cli/prompts/test-suggestions-enhancement.txt +38 -0
  985. package/templates/cli/prompts/test-test-concept-analysis.txt +179 -0
  986. package/templates/cli/prompts/universal-universal-creative-style.txt +95 -0
  987. package/templates/cli/prompts/universal-universal-rigorous-style.txt +92 -0
  988. package/templates/cli/prompts/verification-codex-technical.txt +28 -0
  989. package/templates/cli/prompts/verification-cross-validation.txt +28 -0
  990. package/templates/cli/prompts/verification-gemini-strategic.txt +27 -0
  991. package/templates/cli/prompts/workflow-analysis-results-structure.txt +224 -0
  992. package/templates/cli/prompts/workflow-codex-feasibility-validation.txt +176 -0
  993. package/templates/cli/prompts/workflow-gemini-solution-design.txt +131 -0
  994. package/templates/cli/prompts/workflow-impl-plan-template.txt +286 -0
  995. package/templates/cli/prompts/workflow-skill-aggregation.txt +172 -0
  996. package/templates/cli/prompts/workflow-skill-conflict-patterns.txt +94 -0
  997. package/templates/cli/prompts/workflow-skill-index.txt +224 -0
  998. package/templates/cli/prompts/workflow-skill-lessons-learned.txt +94 -0
  999. package/templates/cli/prompts/workflow-skill-sessions-timeline.txt +53 -0
  1000. package/templates/cli/prompts/workflow-task-json-agent-mode.txt +123 -0
  1001. package/templates/cli/prompts/workflow-task-json-cli-mode.txt +182 -0
  1002. package/templates/cli/protocols/analysis-protocol.md +121 -0
  1003. package/templates/cli/protocols/write-protocol.md +138 -0
  1004. package/templates/config.json +53 -0
  1005. package/templates/context.md +16 -0
  1006. package/templates/doc-index.json +11 -0
  1007. package/templates/index.json +68 -0
  1008. package/templates/issue.json +36 -0
  1009. package/templates/plan.json +38 -0
  1010. package/templates/planning-roles/data-architect.md +72 -0
  1011. package/templates/planning-roles/product-manager.md +70 -0
  1012. package/templates/planning-roles/product-owner.md +68 -0
  1013. package/templates/planning-roles/scrum-master.md +71 -0
  1014. package/templates/planning-roles/subject-matter-expert.md +76 -0
  1015. package/templates/planning-roles/system-architect.md +71 -0
  1016. package/templates/planning-roles/test-strategist.md +74 -0
  1017. package/templates/planning-roles/ui-designer.md +99 -0
  1018. package/templates/planning-roles/ux-expert.md +79 -0
  1019. package/templates/project.md +60 -0
  1020. package/templates/reflection-log.md +20 -0
  1021. package/templates/roadmap.md +39 -0
  1022. package/templates/scratch-index.json +19 -0
  1023. package/templates/search-tool.json +1 -0
  1024. package/templates/search-tools.md +31 -0
  1025. package/templates/state.json +38 -0
  1026. package/templates/task-summary.md +21 -0
  1027. package/templates/task.json +89 -0
  1028. package/templates/terminology-template.json +22 -0
  1029. package/templates/uat.md +21 -0
  1030. package/templates/validation.json +31 -0
  1031. package/templates/verification.json +37 -0
  1032. package/templates/workflow.md +14 -0
  1033. package/workflows/analyze.md +766 -0
  1034. package/workflows/brainstorm.md +491 -0
  1035. package/workflows/chinese-response.md +25 -0
  1036. package/workflows/cli-tools-usage.md +220 -0
  1037. package/workflows/codebase-rebuild.md +332 -0
  1038. package/workflows/codebase-refresh.md +240 -0
  1039. package/workflows/coding-philosophy.md +70 -0
  1040. package/workflows/debug.md +459 -0
  1041. package/workflows/execute.md +413 -0
  1042. package/workflows/init.md +157 -0
  1043. package/workflows/integration-test.md +343 -0
  1044. package/workflows/issue-analyze.md +226 -0
  1045. package/workflows/issue-discover.md +414 -0
  1046. package/workflows/issue-execute.md +286 -0
  1047. package/workflows/issue-plan.md +228 -0
  1048. package/workflows/issue.md +441 -0
  1049. package/workflows/maestro-coordinate.md +525 -0
  1050. package/workflows/maestro-link-coordinate.md +153 -0
  1051. package/workflows/maestro.md +754 -0
  1052. package/workflows/map.md +111 -0
  1053. package/workflows/memory.md +495 -0
  1054. package/workflows/milestone-audit.md +130 -0
  1055. package/workflows/milestone-complete.md +222 -0
  1056. package/workflows/phase-add.md +252 -0
  1057. package/workflows/phase-transition.md +380 -0
  1058. package/workflows/plan.md +482 -0
  1059. package/workflows/quick.md +497 -0
  1060. package/workflows/refactor.md +300 -0
  1061. package/workflows/review.md +614 -0
  1062. package/workflows/roadmap.md +327 -0
  1063. package/workflows/spec-generate.md +631 -0
  1064. package/workflows/specs-add.md +132 -0
  1065. package/workflows/specs-load.md +65 -0
  1066. package/workflows/specs-setup.md +372 -0
  1067. package/workflows/status.md +241 -0
  1068. package/workflows/sync.md +244 -0
  1069. package/workflows/test-gen.md +275 -0
  1070. package/workflows/test.md +566 -0
  1071. package/workflows/ui-design.md +715 -0
  1072. package/workflows/ui-style.md +385 -0
  1073. package/workflows/verify.md +641 -0
@@ -0,0 +1,1101 @@
1
+ // ---------------------------------------------------------------------------
2
+ // ExecutionScheduler — orchestrates issue execution via agent processes
3
+ // ---------------------------------------------------------------------------
4
+ import { join } from 'node:path';
5
+ import { readIssuesJsonl, writeIssuesJsonl, withIssueWriteLock } from '../utils/issue-store.js';
6
+ import { DEFAULT_SCHEDULER_CONFIG } from '../../shared/execution-types.js';
7
+ import { WorkspaceManager } from './workspace-manager.js';
8
+ import { PromptRegistry } from '../prompt/prompt-registry.js';
9
+ import { PriorityStrategy } from './strategies/priority-strategy.js';
10
+ import { SmartStrategy } from './strategies/smart-strategy.js';
11
+ import { GraphWalkerFactory } from '../coordinator/graph-walker-factory.js';
12
+ import { WalkerEventBridge } from '../coordinator/walker-event-bridge.js';
13
+ // ---------------------------------------------------------------------------
14
+ // Valid agent types for input validation
15
+ // ---------------------------------------------------------------------------
16
+ const VALID_EXECUTORS = new Set([
17
+ 'claude-code', 'codex', 'codex-server', 'gemini', 'qwen', 'opencode', 'agent-sdk',
18
+ ]);
19
+ // ---------------------------------------------------------------------------
20
+ // ExecutionScheduler
21
+ // ---------------------------------------------------------------------------
22
+ export class ExecutionScheduler {
23
+ agentManager;
24
+ eventBus;
25
+ jsonlPath;
26
+ journal;
27
+ runningSlots = new Map();
28
+ queue = [];
29
+ retryQueue = new Map();
30
+ claimed = new Set();
31
+ config;
32
+ workspaceManager;
33
+ promptRegistry;
34
+ tickTimer = null;
35
+ lastTickAt = null;
36
+ stats = { totalDispatched: 0, totalCompleted: 0, totalFailed: 0 };
37
+ tokenUsage = { totalInputTokens: 0, totalOutputTokens: 0 };
38
+ strategies = new Map();
39
+ activeStrategy;
40
+ selfLearningService;
41
+ isDispatching = false;
42
+ isCommanderActive = false;
43
+ // Factory for GraphWalker instances (shared across dispatchViaChain calls)
44
+ factory;
45
+ constructor(agentManager, eventBus, jsonlPath, config, promptRegistry, journal, selfLearningService) {
46
+ this.agentManager = agentManager;
47
+ this.eventBus = eventBus;
48
+ this.jsonlPath = jsonlPath;
49
+ this.journal = journal;
50
+ this.config = { ...DEFAULT_SCHEDULER_CONFIG, ...config };
51
+ this.factory = new GraphWalkerFactory();
52
+ this.promptRegistry = promptRegistry ?? PromptRegistry.createDefault();
53
+ this.selfLearningService = selfLearningService;
54
+ // Initialize workspace manager if enabled
55
+ const ws = this.config.workspace;
56
+ this.workspaceManager = ws.enabled
57
+ ? new WorkspaceManager(process.cwd(), {
58
+ useWorktree: ws.useWorktree,
59
+ autoCleanup: ws.autoCleanup,
60
+ })
61
+ : null;
62
+ // Register built-in dispatch strategies
63
+ const priorityStrategy = new PriorityStrategy();
64
+ const smartStrategy = new SmartStrategy();
65
+ this.strategies.set(priorityStrategy.name, priorityStrategy);
66
+ this.strategies.set(smartStrategy.name, smartStrategy);
67
+ this.activeStrategy = this.strategies.get(this.config.strategy) ?? priorityStrategy;
68
+ this.subscribeToAgentEvents();
69
+ // Recover state from persisted issues on startup
70
+ void this.recoverState();
71
+ }
72
+ // -------------------------------------------------------------------------
73
+ // Public API
74
+ // -------------------------------------------------------------------------
75
+ /** Dispatch a single issue for execution */
76
+ async executeIssue(issueId, executor) {
77
+ if (this.isDispatching) {
78
+ console.warn(`[Execution] executeIssue(${issueId}) called while tick dispatch in progress, skipping to avoid conflict`);
79
+ return;
80
+ }
81
+ if (!this.claim(issueId))
82
+ return;
83
+ if (executor && !VALID_EXECUTORS.has(executor)) {
84
+ this.claimed.delete(issueId);
85
+ throw new Error(`Invalid executor: ${executor}`);
86
+ }
87
+ const issue = await this.findIssue(issueId);
88
+ if (!issue) {
89
+ this.claimed.delete(issueId);
90
+ throw new Error(`Issue not found: ${issueId}`);
91
+ }
92
+ const resolvedExecutor = executor ?? issue.executor ?? this.config.defaultExecutor;
93
+ await this.dispatch(issue, resolvedExecutor);
94
+ }
95
+ /** Enqueue multiple issues for batch execution */
96
+ async executeBatch(issueIds, executor, maxConcurrency) {
97
+ if (executor && !VALID_EXECUTORS.has(executor)) {
98
+ throw new Error(`Invalid executor: ${executor}`);
99
+ }
100
+ const concurrency = maxConcurrency ?? this.config.maxConcurrentAgents;
101
+ const unclaimed = issueIds.filter((id) => this.claim(id));
102
+ // Fill available slots immediately, rest goes to queue
103
+ const availableSlots = concurrency - this.runningSlots.size;
104
+ const immediate = unclaimed.slice(0, Math.max(0, availableSlots));
105
+ const queued = unclaimed.slice(Math.max(0, availableSlots));
106
+ this.queue.push(...queued);
107
+ // Update queued issues' execution state
108
+ for (const id of queued) {
109
+ await this.updateIssueFields(id, {
110
+ execution: { status: 'queued', retryCount: 0 },
111
+ });
112
+ }
113
+ // Dispatch immediate batch
114
+ for (const id of immediate) {
115
+ const issue = await this.findIssue(id);
116
+ if (issue) {
117
+ const resolvedExecutor = executor ?? issue.executor ?? this.config.defaultExecutor;
118
+ await this.dispatch(issue, resolvedExecutor);
119
+ }
120
+ }
121
+ }
122
+ /** Cancel a running or queued issue */
123
+ async cancelIssue(issueId) {
124
+ // Remove from queue
125
+ const queueIdx = this.queue.indexOf(issueId);
126
+ if (queueIdx >= 0)
127
+ this.queue.splice(queueIdx, 1);
128
+ // Remove from retry queue
129
+ this.retryQueue.delete(issueId);
130
+ // Stop running agent
131
+ for (const [processId, slot] of this.runningSlots) {
132
+ if (slot.issueId === issueId) {
133
+ await this.agentManager.stop(processId).catch((err) => {
134
+ console.warn(`[Execution] Failed to stop agent ${processId}:`, err);
135
+ });
136
+ this.runningSlots.delete(processId);
137
+ break;
138
+ }
139
+ }
140
+ this.claimed.delete(issueId);
141
+ await this.updateIssueFields(issueId, {
142
+ execution: { status: 'idle', retryCount: 0 },
143
+ });
144
+ }
145
+ /** Start the automatic dispatch tick loop */
146
+ enableAutoDispatch() {
147
+ if (this.tickTimer)
148
+ return;
149
+ if (this.isCommanderActive) {
150
+ console.warn('[Execution] enableAutoDispatch skipped: Commander is managing dispatch');
151
+ return;
152
+ }
153
+ this.config.enabled = true;
154
+ this.tickTimer = setInterval(() => void this.tick(), this.config.pollIntervalMs);
155
+ this.emitStatus();
156
+ }
157
+ /** @deprecated Use enableAutoDispatch() */
158
+ startSupervisor() { this.enableAutoDispatch(); }
159
+ /** Stop automatic dispatch */
160
+ disableAutoDispatch() {
161
+ this.config.enabled = false;
162
+ if (this.tickTimer) {
163
+ clearInterval(this.tickTimer);
164
+ this.tickTimer = null;
165
+ }
166
+ this.emitStatus();
167
+ }
168
+ /** @deprecated Use disableAutoDispatch() */
169
+ stopSupervisor() { this.disableAutoDispatch(); }
170
+ /** Update scheduler config */
171
+ updateConfig(partial) {
172
+ const wasEnabled = this.config.enabled;
173
+ Object.assign(this.config, partial);
174
+ // Sync active strategy if config.strategy changed
175
+ if (partial.strategy) {
176
+ const newStrategy = this.strategies.get(partial.strategy);
177
+ if (newStrategy) {
178
+ this.activeStrategy = newStrategy;
179
+ }
180
+ }
181
+ // Restart tick timer if interval changed
182
+ if (this.config.enabled && this.tickTimer) {
183
+ clearInterval(this.tickTimer);
184
+ this.tickTimer = setInterval(() => void this.tick(), this.config.pollIntervalMs);
185
+ }
186
+ if (this.config.enabled && !wasEnabled) {
187
+ this.enableAutoDispatch();
188
+ }
189
+ else if (!this.config.enabled && wasEnabled) {
190
+ this.disableAutoDispatch();
191
+ }
192
+ this.emitStatus();
193
+ }
194
+ /** Get a snapshot of current scheduler state */
195
+ getStatus() {
196
+ return {
197
+ enabled: this.config.enabled,
198
+ running: Array.from(this.runningSlots.values()),
199
+ queued: [...this.queue],
200
+ retrying: Array.from(this.retryQueue.entries()).map(([issueId, r]) => ({
201
+ issueId,
202
+ retryAt: new Date(r.retryAt).toISOString(),
203
+ })),
204
+ lastTickAt: this.lastTickAt,
205
+ isCommanderActive: this.isCommanderActive,
206
+ stats: { ...this.stats },
207
+ tokenUsage: { ...this.tokenUsage },
208
+ };
209
+ }
210
+ /** Get config */
211
+ getConfig() {
212
+ return { ...this.config };
213
+ }
214
+ /** Get the execution slot for a given issue */
215
+ getSlotForIssue(issueId) {
216
+ for (const slot of this.runningSlots.values()) {
217
+ if (slot.issueId === issueId)
218
+ return slot;
219
+ }
220
+ return undefined;
221
+ }
222
+ /** Register a dispatch strategy (overwrites if name already exists). */
223
+ registerStrategy(strategy) {
224
+ this.strategies.set(strategy.name, strategy);
225
+ }
226
+ /** Switch the active dispatch strategy by name. Throws if not registered. */
227
+ setStrategy(name) {
228
+ const strategy = this.strategies.get(name);
229
+ if (!strategy) {
230
+ throw new Error(`Unknown dispatch strategy: ${name}. Registered: ${[...this.strategies.keys()].join(', ')}`);
231
+ }
232
+ this.activeStrategy = strategy;
233
+ this.config.strategy = name;
234
+ this.emitStatus();
235
+ }
236
+ /** Get the name of the active dispatch strategy. */
237
+ getActiveStrategyName() {
238
+ return this.activeStrategy.name;
239
+ }
240
+ // -------------------------------------------------------------------------
241
+ // Public: External slot management (e.g., WaveExecutor subtasks)
242
+ // -------------------------------------------------------------------------
243
+ /** Acquire a slot for external use (e.g., WaveExecutor subtasks). Returns false if no capacity. */
244
+ acquireSlot(issueId, processId, executor) {
245
+ if (this.runningSlots.size >= this.config.maxConcurrentAgents) {
246
+ return false;
247
+ }
248
+ const slot = {
249
+ issueId,
250
+ processId,
251
+ executor,
252
+ startedAt: new Date().toISOString(),
253
+ lastActivityAt: new Date().toISOString(),
254
+ turnNumber: 1,
255
+ maxTurns: 1,
256
+ };
257
+ this.runningSlots.set(processId, slot);
258
+ this.emitStatus();
259
+ return true;
260
+ }
261
+ /** Release a slot after external use */
262
+ releaseSlot(processId) {
263
+ this.runningSlots.delete(processId);
264
+ this.emitStatus();
265
+ }
266
+ /** Wait for a slot to become available, with timeout. Resolves true if acquired, false on timeout. */
267
+ async waitForSlot(issueId, processId, executor, timeoutMs = 60000) {
268
+ const start = Date.now();
269
+ while (Date.now() - start < timeoutMs) {
270
+ if (this.acquireSlot(issueId, processId, executor))
271
+ return true;
272
+ await new Promise((resolve) => setTimeout(resolve, 2000));
273
+ }
274
+ return false;
275
+ }
276
+ /** Clean shutdown */
277
+ async destroy() {
278
+ this.disableAutoDispatch();
279
+ await this.workspaceManager?.destroy();
280
+ }
281
+ // -------------------------------------------------------------------------
282
+ // Private: Atomic claim
283
+ // -------------------------------------------------------------------------
284
+ /** Atomically claim an issue. Returns true if successfully claimed. */
285
+ claim(issueId) {
286
+ if (this.claimed.has(issueId))
287
+ return false;
288
+ this.claimed.add(issueId);
289
+ return true;
290
+ }
291
+ // -------------------------------------------------------------------------
292
+ // Private: State recovery on startup
293
+ // -------------------------------------------------------------------------
294
+ /** Recover in-memory state from persisted JSONL on startup */
295
+ async recoverState() {
296
+ const issues = await readIssuesJsonl(this.jsonlPath);
297
+ for (const issue of issues) {
298
+ if (!issue.execution)
299
+ continue;
300
+ switch (issue.execution.status) {
301
+ case 'running':
302
+ // Agent process is gone after restart — mark as failed for retry
303
+ this.claimed.add(issue.id);
304
+ await this.updateIssueFields(issue.id, {
305
+ execution: {
306
+ ...issue.execution,
307
+ status: 'retrying',
308
+ lastError: 'Server restarted while executing',
309
+ },
310
+ });
311
+ this.retryQueue.set(issue.id, {
312
+ retryAt: Date.now() + this.config.retryBackoffMs,
313
+ count: (issue.execution.retryCount ?? 0) + 1,
314
+ });
315
+ break;
316
+ case 'queued':
317
+ // Re-enqueue
318
+ this.claimed.add(issue.id);
319
+ this.queue.push(issue.id);
320
+ break;
321
+ case 'retrying': {
322
+ // Re-add to retry queue
323
+ this.claimed.add(issue.id);
324
+ const count = issue.execution.retryCount ?? 1;
325
+ const backoff = this.config.retryBackoffMs * Math.pow(2, count - 1);
326
+ this.retryQueue.set(issue.id, {
327
+ retryAt: Date.now() + backoff,
328
+ count,
329
+ });
330
+ break;
331
+ }
332
+ // idle, completed, failed — no recovery needed
333
+ }
334
+ }
335
+ // Journal-based recovery: augment state with journal analysis
336
+ if (this.journal) {
337
+ try {
338
+ const recoveryActions = await this.journal.recover();
339
+ for (const action of recoveryActions) {
340
+ if (action.action === 'retry' && !this.claimed.has(action.issueId)) {
341
+ // Journal says this was dispatched but never completed — ensure it retries
342
+ this.claimed.add(action.issueId);
343
+ this.retryQueue.set(action.issueId, {
344
+ retryAt: Date.now() + this.config.retryBackoffMs,
345
+ count: 1,
346
+ });
347
+ console.log(`[Execution] Journal recovery: scheduling retry for ${action.issueId} — ${action.reason}`);
348
+ }
349
+ // resume-wave actions are informational — wave executor handles its own resume
350
+ }
351
+ }
352
+ catch (err) {
353
+ console.warn('[Execution] Journal recovery failed, continuing with JSONL state:', err);
354
+ }
355
+ }
356
+ if (this.queue.length > 0 || this.retryQueue.size > 0) {
357
+ console.log(`[Execution] Recovered state: ${this.queue.length} queued, ${this.retryQueue.size} retrying`);
358
+ }
359
+ }
360
+ // -------------------------------------------------------------------------
361
+ // Private: Dispatch
362
+ // -------------------------------------------------------------------------
363
+ async dispatch(issue, executor) {
364
+ // Route to chain-based execution when issue has a chain defined
365
+ if (issue.solution?.chain) {
366
+ await this.dispatchViaChain(issue, executor);
367
+ return;
368
+ }
369
+ const prompt = await this.buildPrompt(issue);
370
+ const now = new Date().toISOString();
371
+ const retryCount = issue.execution?.retryCount ?? 0;
372
+ // Create isolated workspace if manager is active
373
+ let workDir = process.cwd();
374
+ if (this.workspaceManager) {
375
+ try {
376
+ const ws = await this.workspaceManager.createForIssue(issue.id);
377
+ workDir = ws.path;
378
+ }
379
+ catch (err) {
380
+ const message = err instanceof Error ? err.message : String(err);
381
+ if (this.config.workspace.strict) {
382
+ // Strict mode: fail execution rather than running in project root
383
+ await this.handleFailure(issue.id, `Workspace creation failed: ${message}`);
384
+ return;
385
+ }
386
+ console.error(`[Execution] Workspace creation failed for ${issue.id}, falling back to cwd:`, message);
387
+ }
388
+ }
389
+ // Update issue: execution state + status in a single write
390
+ await this.updateIssueFields(issue.id, {
391
+ status: 'in_progress',
392
+ execution: {
393
+ status: 'running',
394
+ retryCount,
395
+ startedAt: now,
396
+ },
397
+ });
398
+ let proc;
399
+ try {
400
+ proc = await this.agentManager.spawn(executor, {
401
+ type: executor,
402
+ prompt,
403
+ workDir,
404
+ approvalMode: 'auto',
405
+ });
406
+ }
407
+ catch (err) {
408
+ const message = err instanceof Error ? err.message : String(err);
409
+ await this.handleFailure(issue.id, message);
410
+ return;
411
+ }
412
+ const slot = {
413
+ issueId: issue.id,
414
+ processId: proc.id,
415
+ executor,
416
+ startedAt: now,
417
+ lastActivityAt: now,
418
+ turnNumber: 1,
419
+ maxTurns: this.config.maxTurnsPerIssue ?? 3,
420
+ };
421
+ this.runningSlots.set(proc.id, slot);
422
+ // Update processId on issue
423
+ await this.updateIssueFields(issue.id, {
424
+ execution: {
425
+ status: 'running',
426
+ processId: proc.id,
427
+ retryCount,
428
+ startedAt: now,
429
+ },
430
+ });
431
+ this.stats.totalDispatched++;
432
+ // Journal: record dispatch event for crash recovery
433
+ await this.journal?.append({
434
+ type: 'issue:dispatched',
435
+ issueId: issue.id,
436
+ processId: proc.id,
437
+ executor,
438
+ timestamp: now,
439
+ });
440
+ // Read updated issue for incremental client push
441
+ const startedIssue = await this.findIssue(issue.id);
442
+ this.eventBus.emit('execution:started', {
443
+ issueId: issue.id,
444
+ processId: proc.id,
445
+ executor,
446
+ issue: startedIssue ?? undefined,
447
+ });
448
+ }
449
+ /**
450
+ * Chain-based dispatch — routes issue execution through a GraphWalker chain.
451
+ * The chain (e.g., 'issue-lifecycle') defines the multi-step execution flow.
452
+ */
453
+ async dispatchViaChain(issue, executor) {
454
+ const now = new Date().toISOString();
455
+ const retryCount = issue.execution?.retryCount ?? 0;
456
+ const chainId = issue.solution.chain;
457
+ const chainMode = issue.solution?.chainMode ?? 'full';
458
+ // Workspace isolation
459
+ let workDir = process.cwd();
460
+ if (this.workspaceManager) {
461
+ try {
462
+ const ws = await this.workspaceManager.createForIssue(issue.id);
463
+ workDir = ws.path;
464
+ }
465
+ catch (err) {
466
+ const message = err instanceof Error ? err.message : String(err);
467
+ if (this.config.workspace.strict) {
468
+ await this.handleFailure(issue.id, `Workspace creation failed: ${message}`);
469
+ return;
470
+ }
471
+ console.error(`[Execution] Workspace creation failed for ${issue.id}, falling back to cwd:`, message);
472
+ }
473
+ }
474
+ // Update issue status
475
+ await this.updateIssueFields(issue.id, {
476
+ status: 'in_progress',
477
+ execution: { status: 'running', retryCount, startedAt: now },
478
+ });
479
+ this.stats.totalDispatched++;
480
+ this.eventBus.emit('execution:started', {
481
+ issueId: issue.id,
482
+ processId: `chain-${issue.id}`,
483
+ executor,
484
+ });
485
+ // Create GraphWalker via factory
486
+ try {
487
+ const bridge = new WalkerEventBridge('coordinate', this.eventBus, `chain-${issue.id}`);
488
+ const sessionDir = join(workDir, '.workflow', '.maestro-coordinate', `chain-${issue.id}`);
489
+ const { walker } = await this.factory.create({
490
+ agentManager: this.agentManager,
491
+ eventBus: this.eventBus,
492
+ workDir,
493
+ emitter: bridge,
494
+ analyzer: null,
495
+ sessionDir,
496
+ });
497
+ const walkerState = await walker.start(chainId, issue.description, {
498
+ tool: executor,
499
+ autoMode: true,
500
+ workflowRoot: workDir,
501
+ inputs: {
502
+ issue_id: issue.id,
503
+ description: issue.description,
504
+ mode: chainMode,
505
+ },
506
+ });
507
+ // Determine success from walker state
508
+ if (walkerState.status === 'completed') {
509
+ const lastCmd = walkerState.history.filter((h) => h.node_type === 'command').pop();
510
+ await this.updateIssueFields(issue.id, {
511
+ status: 'resolved',
512
+ execution: {
513
+ status: 'completed',
514
+ retryCount,
515
+ completedAt: new Date().toISOString(),
516
+ result: { summary: lastCmd?.summary ?? 'Chain completed' },
517
+ },
518
+ });
519
+ this.claimed.delete(issue.id);
520
+ this.stats.totalCompleted++;
521
+ const completedIssue = await this.findIssue(issue.id);
522
+ this.eventBus.emit('execution:completed', {
523
+ issueId: issue.id,
524
+ processId: `chain-${issue.id}`,
525
+ issue: completedIssue ?? undefined,
526
+ });
527
+ }
528
+ else {
529
+ const failedStep = walkerState.history.filter((h) => h.outcome === 'failure').pop();
530
+ await this.handleFailure(issue.id, failedStep?.summary ?? 'Chain execution failed');
531
+ }
532
+ }
533
+ catch (err) {
534
+ const message = err instanceof Error ? err.message : String(err);
535
+ await this.handleFailure(issue.id, `Chain dispatch failed: ${message}`);
536
+ }
537
+ // Workspace cleanup
538
+ if (this.workspaceManager?.getWorkspacePath(issue.id)) {
539
+ void this.workspaceManager.removeForIssue(issue.id);
540
+ }
541
+ }
542
+ async buildPrompt(issue) {
543
+ const mode = issue.promptMode ?? this.config.defaultPromptMode;
544
+ // Check for custom prompt template — routes to 'template' builder
545
+ if (issue.solution?.promptTemplate) {
546
+ const builder = this.promptRegistry.get('template');
547
+ if (builder) {
548
+ const result = await builder.build({
549
+ issue,
550
+ config: this.config,
551
+ promptMode: 'template',
552
+ customTemplate: issue.solution.promptTemplate,
553
+ });
554
+ return result.userPrompt;
555
+ }
556
+ // Fallback if template builder not registered
557
+ return this.applyTemplate(issue.solution.promptTemplate, issue);
558
+ }
559
+ // Delegate to registered builder
560
+ const builder = this.promptRegistry.get(mode);
561
+ if (builder) {
562
+ const result = await builder.build({
563
+ issue,
564
+ config: this.config,
565
+ promptMode: mode,
566
+ });
567
+ return result.userPrompt;
568
+ }
569
+ // Fallback: inline logic (kept for safety)
570
+ return this.buildPromptFallback(issue, mode);
571
+ }
572
+ /** Inline fallback — preserves original logic for backward compatibility */
573
+ buildPromptFallback(issue, mode) {
574
+ if (mode === 'skill') {
575
+ return `Execute the following issue:\n\nIssue ID: ${issue.id}\nTitle: ${issue.title}\nType: ${issue.type}\nPriority: ${issue.priority}\n\nDescription:\n${issue.description}`;
576
+ }
577
+ const lines = [
578
+ `You are working on the following ${issue.type} issue:`,
579
+ '',
580
+ `## ${issue.title}`,
581
+ '',
582
+ issue.description,
583
+ '',
584
+ `Priority: ${issue.priority}`,
585
+ ];
586
+ if (issue.solution) {
587
+ lines.push('', '## Solution Plan', '');
588
+ if (issue.solution.context) {
589
+ lines.push('### Context', '', issue.solution.context, '');
590
+ }
591
+ if (issue.solution.steps.length > 0) {
592
+ lines.push('### Steps', '');
593
+ for (let i = 0; i < issue.solution.steps.length; i++) {
594
+ const step = issue.solution.steps[i];
595
+ lines.push(`${i + 1}. ${step.description}`);
596
+ if (step.target)
597
+ lines.push(` - Target: ${step.target}`);
598
+ if (step.verification)
599
+ lines.push(` - Verify: ${step.verification}`);
600
+ }
601
+ }
602
+ lines.push('', 'Follow the solution plan above. Execute each step in order.', 'After completing all steps, verify each step\'s criteria.', 'When done, provide a summary of the changes made.');
603
+ }
604
+ else {
605
+ lines.push('', 'Please implement this issue. Follow existing code patterns and conventions.', 'When done, provide a summary of the changes made.');
606
+ }
607
+ return lines.join('\n');
608
+ }
609
+ /** Simple variable substitution for custom prompt templates */
610
+ applyTemplate(template, issue) {
611
+ return template
612
+ .replace(/\{\{\s*issue\.id\s*\}\}/g, issue.id)
613
+ .replace(/\{\{\s*issue\.title\s*\}\}/g, issue.title)
614
+ .replace(/\{\{\s*issue\.description\s*\}\}/g, issue.description)
615
+ .replace(/\{\{\s*issue\.type\s*\}\}/g, issue.type)
616
+ .replace(/\{\{\s*issue\.priority\s*\}\}/g, issue.priority)
617
+ .replace(/\{\{\s*issue\.status\s*\}\}/g, issue.status);
618
+ }
619
+ // -------------------------------------------------------------------------
620
+ // Private: Agent event handling
621
+ // -------------------------------------------------------------------------
622
+ subscribeToAgentEvents() {
623
+ this.eventBus.on('agent:stopped', (event) => {
624
+ const payload = event.data;
625
+ void this.handleAgentStopped(payload.processId, payload.reason);
626
+ });
627
+ // Multi-turn continuation: triggered by turn/completed notification in
628
+ // codex app-server mode. The process stays alive between turns.
629
+ this.eventBus.on('agent:turnCompleted', (event) => {
630
+ const payload = event.data;
631
+ void this.handleTurnCompleted(payload.processId);
632
+ });
633
+ // Track activity for stall detection + accumulate token usage
634
+ this.eventBus.on('agent:entry', (event) => {
635
+ const entry = event.data;
636
+ const slot = this.runningSlots.get(entry.processId);
637
+ if (slot) {
638
+ slot.lastActivityAt = new Date().toISOString();
639
+ }
640
+ // Accumulate token usage from token_usage entries
641
+ if (entry.type === 'token_usage') {
642
+ this.tokenUsage.totalInputTokens += entry.inputTokens ?? 0;
643
+ this.tokenUsage.totalOutputTokens += entry.outputTokens ?? 0;
644
+ }
645
+ });
646
+ }
647
+ async handleAgentStopped(processId, reason) {
648
+ const slot = this.runningSlots.get(processId);
649
+ if (!slot)
650
+ return;
651
+ // Check entries for success/failure
652
+ const entries = this.agentManager.getEntries(processId);
653
+ const lastEntries = entries.slice(-5);
654
+ const hasError = lastEntries.some((e) => e.type === 'error' || (e.type === 'status_change' && e.status === 'error'));
655
+ if (hasError || reason === 'error') {
656
+ this.runningSlots.delete(processId);
657
+ const errorMsg = reason ?? 'Agent stopped with error';
658
+ await this.handleFailure(slot.issueId, errorMsg);
659
+ await this.dispatchNext();
660
+ return;
661
+ }
662
+ // Process exited normally — treat as completion.
663
+ // Multi-turn continuation is handled by handleTurnCompleted (triggered by
664
+ // turn/completed notification while the process is still alive).
665
+ this.runningSlots.delete(processId);
666
+ await this.handleCompletion(slot.issueId, processId);
667
+ await this.dispatchNext();
668
+ }
669
+ /**
670
+ * Handle turn/completed notification from a codex-server agent.
671
+ * The process is still alive — attempt continuation or complete.
672
+ */
673
+ async handleTurnCompleted(processId) {
674
+ const slot = this.runningSlots.get(processId);
675
+ if (!slot)
676
+ return;
677
+ if (await this.attemptContinuation(slot, processId)) {
678
+ return; // Continuation started, slot stays in runningSlots
679
+ }
680
+ // No more turns — complete the execution.
681
+ // Stop the still-alive process since we're done with it.
682
+ await this.agentManager.stop(processId).catch((err) => {
683
+ console.warn(`[Execution] Failed to stop completed agent ${processId}:`, err);
684
+ });
685
+ this.runningSlots.delete(processId);
686
+ await this.handleCompletion(slot.issueId, processId);
687
+ await this.dispatchNext();
688
+ }
689
+ async handleCompletion(issueId, processId) {
690
+ // Extract result from agent entries
691
+ const result = this.extractResult(processId);
692
+ // Journal: record completion event
693
+ await this.journal?.append({
694
+ type: 'issue:completed',
695
+ issueId,
696
+ processId,
697
+ timestamp: new Date().toISOString(),
698
+ result: result ? {
699
+ summary: result.summary,
700
+ commitHash: result.commitHash,
701
+ filesChanged: result.filesChanged,
702
+ } : undefined,
703
+ });
704
+ await this.updateIssueFields(issueId, {
705
+ status: 'resolved',
706
+ execution: {
707
+ status: 'completed',
708
+ retryCount: 0,
709
+ completedAt: new Date().toISOString(),
710
+ result,
711
+ },
712
+ });
713
+ this.claimed.delete(issueId);
714
+ this.stats.totalCompleted++;
715
+ // Clean up workspace if auto-cleanup is enabled
716
+ if (this.workspaceManager?.getWorkspacePath(issueId)) {
717
+ void this.workspaceManager.removeForIssue(issueId);
718
+ }
719
+ // Read updated issue for incremental client push
720
+ const completedIssue = await this.findIssue(issueId);
721
+ this.eventBus.emit('execution:completed', { issueId, processId, issue: completedIssue ?? undefined });
722
+ }
723
+ /** Extract structured result from agent entry history */
724
+ extractResult(processId) {
725
+ const entries = this.agentManager.getEntries(processId);
726
+ if (entries.length === 0)
727
+ return undefined;
728
+ const result = {};
729
+ // Count file changes
730
+ const fileChanges = entries.filter((e) => e.type === 'file_change');
731
+ if (fileChanges.length > 0) {
732
+ result.filesChanged = fileChanges.length;
733
+ }
734
+ // Extract last assistant message as summary
735
+ const assistantMessages = entries.filter((e) => e.type === 'assistant_message' && !e.partial);
736
+ if (assistantMessages.length > 0) {
737
+ const lastMsg = assistantMessages[assistantMessages.length - 1];
738
+ const text = lastMsg.content ?? '';
739
+ // Truncate to reasonable length for storage
740
+ result.summary = text.slice(0, 2000);
741
+ }
742
+ // Look for commit hash or PR URL in command outputs
743
+ const commandOutputs = entries.filter((e) => e.type === 'command_exec');
744
+ for (const entry of commandOutputs) {
745
+ const output = entry.output ?? '';
746
+ // Match git commit hash
747
+ const commitMatch = output.match(/\b([a-f0-9]{7,40})\b.*(?:commit|created)/i)
748
+ ?? output.match(/(?:commit|created).*\b([a-f0-9]{7,40})\b/i);
749
+ if (commitMatch && !result.commitHash) {
750
+ result.commitHash = commitMatch[1];
751
+ }
752
+ // Match PR URL
753
+ const prMatch = output.match(/(https:\/\/github\.com\/[^\s]+\/pull\/\d+)/);
754
+ if (prMatch && !result.prUrl) {
755
+ result.prUrl = prMatch[1];
756
+ }
757
+ }
758
+ return Object.keys(result).length > 0 ? result : undefined;
759
+ }
760
+ async handleFailure(issueId, error) {
761
+ const issue = await this.findIssue(issueId);
762
+ const currentRetry = issue?.execution?.retryCount ?? 0;
763
+ // Journal: record failure event
764
+ await this.journal?.append({
765
+ type: 'issue:failed',
766
+ issueId,
767
+ processId: issue?.execution?.processId ?? '',
768
+ error,
769
+ retryCount: currentRetry + 1,
770
+ timestamp: new Date().toISOString(),
771
+ });
772
+ if (currentRetry < this.config.maxRetries) {
773
+ // Schedule retry with exponential backoff
774
+ const backoff = this.config.retryBackoffMs * Math.pow(2, currentRetry);
775
+ this.retryQueue.set(issueId, {
776
+ retryAt: Date.now() + backoff,
777
+ count: currentRetry + 1,
778
+ });
779
+ await this.updateIssueFields(issueId, {
780
+ execution: {
781
+ status: 'retrying',
782
+ retryCount: currentRetry + 1,
783
+ lastError: error,
784
+ },
785
+ });
786
+ }
787
+ else {
788
+ await this.updateIssueFields(issueId, {
789
+ execution: {
790
+ status: 'failed',
791
+ retryCount: currentRetry,
792
+ lastError: error,
793
+ },
794
+ });
795
+ this.claimed.delete(issueId);
796
+ this.stats.totalFailed++;
797
+ }
798
+ // Find processId for the failed issue (may already be removed from runningSlots)
799
+ let processId = '';
800
+ for (const [pid, slot] of this.runningSlots) {
801
+ if (slot.issueId === issueId) {
802
+ processId = pid;
803
+ this.runningSlots.delete(pid);
804
+ break;
805
+ }
806
+ }
807
+ // Read updated issue for incremental client push
808
+ const failedIssue = await this.findIssue(issueId);
809
+ this.eventBus.emit('execution:failed', { issueId, processId, error, issue: failedIssue ?? undefined });
810
+ }
811
+ // -------------------------------------------------------------------------
812
+ // Private: Multi-turn continuation (codex-server only)
813
+ // -------------------------------------------------------------------------
814
+ /**
815
+ * Attempt to continue a codex-server agent for another turn.
816
+ * Returns true if continuation was initiated; false if normal completion should proceed.
817
+ */
818
+ async attemptContinuation(slot, processId) {
819
+ // Only codex-server supports interactive follow-up messages
820
+ if (slot.executor !== 'codex-server')
821
+ return false;
822
+ // Check turn budget
823
+ if (slot.turnNumber >= slot.maxTurns)
824
+ return false;
825
+ // Re-read issue from JSONL to check current status
826
+ let issue;
827
+ try {
828
+ issue = await this.findIssue(slot.issueId);
829
+ }
830
+ catch {
831
+ // IO failure — don't continue, fall through to normal completion
832
+ return false;
833
+ }
834
+ if (!issue)
835
+ return false;
836
+ // If issue is already resolved or closed, no need to continue
837
+ if (issue.status === 'resolved' || issue.status === 'closed')
838
+ return false;
839
+ // Check that the agent process is still registered in agentManager
840
+ // (sendMessage will throw if process is gone)
841
+ const continuationPrompt = this.buildContinuationPrompt(slot.turnNumber + 1, slot.maxTurns);
842
+ try {
843
+ await this.agentManager.sendMessage(processId, continuationPrompt);
844
+ }
845
+ catch {
846
+ // Process already exited — fall through to normal completion
847
+ return false;
848
+ }
849
+ // Update slot for next turn
850
+ slot.turnNumber++;
851
+ slot.lastActivityAt = new Date().toISOString();
852
+ // Slot remains in runningSlots (not deleted)
853
+ console.log(`[Execution] Continuation turn ${slot.turnNumber}/${slot.maxTurns} for issue ${slot.issueId} (process ${processId})`);
854
+ return true;
855
+ }
856
+ /** Build a continuation prompt for multi-turn execution */
857
+ buildContinuationPrompt(turnNumber, maxTurns) {
858
+ return [
859
+ `Continuation turn #${turnNumber} of ${maxTurns}.`,
860
+ '',
861
+ 'Continuation guidance:',
862
+ '- The previous turn completed normally, but the issue is still in an active state.',
863
+ '- Resume from the current workspace and workpad state instead of restarting from scratch.',
864
+ '- Review what was accomplished in the previous turn and continue from where it left off.',
865
+ ].join('\n');
866
+ }
867
+ // -------------------------------------------------------------------------
868
+ // Private: Supervisor tick
869
+ // -------------------------------------------------------------------------
870
+ async tick() {
871
+ this.lastTickAt = new Date().toISOString();
872
+ // 1. Reconcile running issues (detect externally resolved/closed)
873
+ await this.reconcileRunningIssues();
874
+ // 2. Stall detection
875
+ await this.detectStalls();
876
+ // 3. Process retry queue
877
+ this.processRetries();
878
+ // 4. Dispatch queued issues first
879
+ await this.dispatchNext();
880
+ // 5. Auto-dispatch via active strategy
881
+ await this.dispatchViaStrategy();
882
+ // 6. Emit status
883
+ this.emitStatus();
884
+ }
885
+ /** Delegate issue selection to the active strategy and execute returned decisions. */
886
+ async dispatchViaStrategy() {
887
+ if (this.isDispatching)
888
+ return;
889
+ this.isDispatching = true;
890
+ try {
891
+ const availableSlots = this.config.maxConcurrentAgents - this.runningSlots.size;
892
+ if (availableSlots <= 0)
893
+ return;
894
+ const issues = await readIssuesJsonl(this.jsonlPath);
895
+ const context = {
896
+ issues,
897
+ runningSlots: this.runningSlots,
898
+ claimed: this.claimed,
899
+ config: this.config,
900
+ availableSlots,
901
+ learningSuggestions: this.selfLearningService?.getStats().suggestions ?? [],
902
+ };
903
+ const decisions = await this.activeStrategy.selectIssues(context);
904
+ for (const decision of decisions) {
905
+ // Re-check capacity (previous dispatches in this batch may have filled slots)
906
+ if (this.runningSlots.size >= this.config.maxConcurrentAgents)
907
+ break;
908
+ if (!this.claim(decision.issueId))
909
+ continue;
910
+ const issue = issues.find((i) => i.id === decision.issueId);
911
+ if (!issue) {
912
+ this.claimed.delete(decision.issueId);
913
+ continue;
914
+ }
915
+ const executor = (decision.executor ?? issue.executor ?? this.config.defaultExecutor);
916
+ await this.dispatch(issue, executor);
917
+ }
918
+ }
919
+ finally {
920
+ this.isDispatching = false;
921
+ }
922
+ }
923
+ /**
924
+ * Reconcile running slots against persisted issue state.
925
+ * If an issue was externally resolved or closed, stop its agent.
926
+ */
927
+ async reconcileRunningIssues() {
928
+ for (const [processId, slot] of this.runningSlots) {
929
+ const issue = await this.findIssue(slot.issueId);
930
+ if (!issue)
931
+ continue;
932
+ if (issue.status === 'resolved' || issue.status === 'closed') {
933
+ console.log(`[Execution] Reconcile: issue ${slot.issueId} is ${issue.status}, stopping agent ${processId}`);
934
+ await this.agentManager.stop(processId).catch((err) => {
935
+ console.warn(`[Execution] Failed to stop reconciled agent ${processId}:`, err);
936
+ });
937
+ // Update JSONL status before removing the slot
938
+ await this.updateIssueFields(slot.issueId, {
939
+ status: 'resolved',
940
+ execution: {
941
+ status: 'completed',
942
+ completedAt: new Date().toISOString(),
943
+ },
944
+ });
945
+ this.runningSlots.delete(processId);
946
+ this.claimed.delete(slot.issueId);
947
+ this.stats.totalCompleted++;
948
+ // Read updated issue for incremental client push
949
+ const reconciledIssue = await this.findIssue(slot.issueId);
950
+ this.eventBus.emit('execution:completed', {
951
+ issueId: slot.issueId,
952
+ processId,
953
+ issue: reconciledIssue ?? undefined,
954
+ });
955
+ }
956
+ }
957
+ }
958
+ async detectStalls() {
959
+ const now = Date.now();
960
+ for (const [processId, slot] of this.runningSlots) {
961
+ const lastActivity = new Date(slot.lastActivityAt).getTime();
962
+ if (now - lastActivity > this.config.stallTimeoutMs) {
963
+ console.warn(`[Execution] Stall detected for issue ${slot.issueId} (process ${processId})`);
964
+ await this.agentManager.stop(processId).catch((err) => {
965
+ console.warn(`[Execution] Failed to stop stalled agent ${processId}:`, err);
966
+ });
967
+ // handleAgentStopped will clean up
968
+ }
969
+ }
970
+ }
971
+ processRetries() {
972
+ const now = Date.now();
973
+ for (const [issueId, retry] of this.retryQueue) {
974
+ if (now >= retry.retryAt) {
975
+ this.retryQueue.delete(issueId);
976
+ this.queue.unshift(issueId); // Priority position
977
+ }
978
+ }
979
+ }
980
+ /** @deprecated Superseded by PriorityStrategy via dispatchViaStrategy(). Kept for reference. */
981
+ async autoDispatchByPriority() {
982
+ if (this.queue.length === 0) {
983
+ // Check for unqueued open issues to auto-enqueue
984
+ const issues = await readIssuesJsonl(this.jsonlPath);
985
+ const priorityOrder = {
986
+ urgent: 0,
987
+ high: 1,
988
+ medium: 2,
989
+ low: 3,
990
+ };
991
+ const candidates = issues
992
+ .filter((i) => (i.status === 'open') &&
993
+ (!i.execution || i.execution.status === 'idle') &&
994
+ !this.claimed.has(i.id))
995
+ .sort((a, b) => (priorityOrder[a.priority] ?? 3) - (priorityOrder[b.priority] ?? 3));
996
+ for (const issue of candidates) {
997
+ if (this.claim(issue.id)) {
998
+ this.queue.push(issue.id);
999
+ await this.updateIssueFields(issue.id, {
1000
+ execution: { status: 'queued', retryCount: 0 },
1001
+ });
1002
+ }
1003
+ }
1004
+ }
1005
+ await this.dispatchNext();
1006
+ }
1007
+ /**
1008
+ * @deprecated Superseded by SmartStrategy via dispatchViaStrategy(). Kept for reference.
1009
+ *
1010
+ * Smart strategy: priority + executor affinity + failure avoidance.
1011
+ * - Prioritize issues matching idle executor types (spread load across agents)
1012
+ * - Deprioritize issue types that have recently failed
1013
+ */
1014
+ async autoDispatchSmart() {
1015
+ if (this.queue.length === 0) {
1016
+ const issues = await readIssuesJsonl(this.jsonlPath);
1017
+ const priorityOrder = {
1018
+ urgent: 0, high: 1, medium: 2, low: 3,
1019
+ };
1020
+ // Determine which executor types are currently in use
1021
+ const busyExecutors = new Map();
1022
+ for (const slot of this.runningSlots.values()) {
1023
+ busyExecutors.set(slot.executor, (busyExecutors.get(slot.executor) ?? 0) + 1);
1024
+ }
1025
+ const candidates = issues
1026
+ .filter((i) => i.status === 'open' &&
1027
+ (!i.execution || i.execution.status === 'idle') &&
1028
+ !this.claimed.has(i.id))
1029
+ .map((issue) => {
1030
+ const executor = issue.executor ?? this.config.defaultExecutor;
1031
+ const priorityScore = priorityOrder[issue.priority] ?? 3;
1032
+ // Prefer executors with fewer running slots (load balancing)
1033
+ const affinityScore = busyExecutors.get(executor) ?? 0;
1034
+ // Penalize if previous execution failed (avoid re-failing)
1035
+ const failurePenalty = issue.execution?.lastError ? 2 : 0;
1036
+ return {
1037
+ issue,
1038
+ score: priorityScore + affinityScore + failurePenalty,
1039
+ };
1040
+ })
1041
+ .sort((a, b) => a.score - b.score);
1042
+ for (const { issue } of candidates) {
1043
+ if (this.claim(issue.id)) {
1044
+ this.queue.push(issue.id);
1045
+ await this.updateIssueFields(issue.id, {
1046
+ execution: { status: 'queued', retryCount: 0 },
1047
+ });
1048
+ }
1049
+ }
1050
+ }
1051
+ await this.dispatchNext();
1052
+ }
1053
+ async dispatchNext() {
1054
+ while (this.queue.length > 0 &&
1055
+ this.runningSlots.size < this.config.maxConcurrentAgents) {
1056
+ const issueId = this.queue.shift();
1057
+ const issue = await this.findIssue(issueId);
1058
+ if (!issue) {
1059
+ this.claimed.delete(issueId);
1060
+ continue;
1061
+ }
1062
+ const executor = issue.executor ?? this.config.defaultExecutor;
1063
+ await this.dispatch(issue, executor);
1064
+ }
1065
+ }
1066
+ // -------------------------------------------------------------------------
1067
+ // Private: JSONL operations (all serialized via writeLock)
1068
+ // -------------------------------------------------------------------------
1069
+ async findIssue(issueId) {
1070
+ const issues = await readIssuesJsonl(this.jsonlPath);
1071
+ return issues.find((i) => i.id === issueId) ?? null;
1072
+ }
1073
+ /** Atomically update multiple fields on an issue in a single read-modify-write */
1074
+ async updateIssueFields(issueId, fields) {
1075
+ await withIssueWriteLock(async () => {
1076
+ const issues = await readIssuesJsonl(this.jsonlPath);
1077
+ const idx = issues.findIndex((i) => i.id === issueId);
1078
+ if (idx === -1)
1079
+ return;
1080
+ const issue = issues[idx];
1081
+ if (fields.status !== undefined) {
1082
+ issue.status = fields.status;
1083
+ }
1084
+ if (fields.execution !== undefined) {
1085
+ issue.execution = {
1086
+ status: 'idle',
1087
+ retryCount: 0,
1088
+ ...issue.execution,
1089
+ ...fields.execution,
1090
+ };
1091
+ }
1092
+ issue.updated_at = new Date().toISOString();
1093
+ issues[idx] = issue;
1094
+ await writeIssuesJsonl(this.jsonlPath, issues);
1095
+ });
1096
+ }
1097
+ emitStatus() {
1098
+ this.eventBus.emit('supervisor:status', this.getStatus());
1099
+ }
1100
+ }
1101
+ //# sourceMappingURL=execution-scheduler.js.map