maestro-flow 0.3.1 → 0.3.3

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 (574) hide show
  1. package/.claude/CLAUDE.md +2 -2
  2. package/.claude/agents/cli-explore-agent.md +1 -1
  3. package/.claude/agents/team-worker.md +237 -237
  4. package/.claude/commands/maestro-coordinate.md +65 -65
  5. package/.claude/commands/maestro-link-coordinate.md +71 -71
  6. package/.claude/commands/maestro-overlay.md +178 -122
  7. package/.claude/commands/manage-issue-execute.md +73 -73
  8. package/.claude/skills/team-coordinate/SKILL.md +266 -266
  9. package/.claude/skills/team-lifecycle-v4/SKILL.md +209 -209
  10. package/.claude/skills/team-lifecycle-v4/roles/analyst/role.md +94 -94
  11. package/.claude/skills/team-lifecycle-v4/roles/executor/commands/implement.md +62 -62
  12. package/.claude/skills/team-lifecycle-v4/roles/planner/role.md +85 -85
  13. package/.claude/skills/team-lifecycle-v4/roles/writer/role.md +95 -95
  14. package/.claude/skills/team-quality-assurance/SKILL.md +147 -147
  15. package/.claude/skills/team-quality-assurance/roles/scout/role.md +75 -75
  16. package/.claude/skills/team-review/SKILL.md +147 -147
  17. package/.claude/skills/team-review/roles/reviewer/role.md +68 -68
  18. package/.claude/skills/team-review/roles/scanner/role.md +79 -79
  19. package/.claude/skills/team-tech-debt/SKILL.md +128 -128
  20. package/.claude/skills/team-tech-debt/roles/executor/role.md +76 -76
  21. package/.claude/skills/team-tech-debt/roles/scanner/role.md +90 -90
  22. package/.claude/skills/team-tech-debt/roles/validator/role.md +78 -78
  23. package/.claude/skills/team-testing/SKILL.md +143 -143
  24. package/.claude/skills/team-testing/roles/executor/role.md +99 -99
  25. package/.claude/skills/team-testing/roles/generator/role.md +98 -98
  26. package/.codex/skills/maestro-coordinate/SKILL.md +4 -5
  27. package/.codex/skills/manage-issue-analyze/SKILL.md +3 -3
  28. package/.codex/skills/manage-issue-execute/SKILL.md +4 -4
  29. package/.codex/skills/manage-issue-plan/SKILL.md +2 -2
  30. package/.codex/skills/team-coordinate/SKILL.md +7 -7
  31. package/.codex/skills/team-coordinate/roles/coordinator/role.md +1 -1
  32. package/.codex/skills/team-lifecycle-v4/SKILL.md +2 -2
  33. package/.codex/skills/team-lifecycle-v4/instructions/agent-instruction.md +2 -2
  34. package/.codex/skills/team-lifecycle-v4/roles/analyst/role.md +2 -2
  35. package/.codex/skills/team-lifecycle-v4/roles/coordinator/role.md +2 -2
  36. package/.codex/skills/team-lifecycle-v4/roles/executor/commands/implement.md +1 -1
  37. package/.codex/skills/team-lifecycle-v4/roles/planner/role.md +2 -2
  38. package/.codex/skills/team-lifecycle-v4/roles/writer/role.md +1 -1
  39. package/.codex/skills/team-quality-assurance/SKILL.md +2 -2
  40. package/.codex/skills/team-quality-assurance/roles/coordinator/role.md +2 -2
  41. package/.codex/skills/team-quality-assurance/roles/scout/role.md +2 -2
  42. package/.codex/skills/team-review/SKILL.md +2 -2
  43. package/.codex/skills/team-review/roles/coordinator/role.md +2 -2
  44. package/.codex/skills/team-review/roles/reviewer/role.md +1 -1
  45. package/.codex/skills/team-review/roles/scanner/role.md +1 -1
  46. package/.codex/skills/team-tech-debt/SKILL.md +2 -2
  47. package/.codex/skills/team-tech-debt/roles/coordinator/role.md +1 -1
  48. package/.codex/skills/team-tech-debt/roles/executor/role.md +1 -1
  49. package/.codex/skills/team-tech-debt/roles/scanner/role.md +1 -1
  50. package/.codex/skills/team-tech-debt/roles/validator/role.md +1 -1
  51. package/.codex/skills/team-testing/SKILL.md +2 -2
  52. package/.codex/skills/team-testing/roles/coordinator/role.md +2 -2
  53. package/.codex/skills/team-testing/roles/executor/role.md +1 -1
  54. package/.codex/skills/team-testing/roles/generator/role.md +1 -1
  55. package/README.md +31 -2
  56. package/README.zh-CN.md +23 -1
  57. package/dist/src/agents/cli-agent-runner.d.ts.map +1 -1
  58. package/dist/src/agents/cli-agent-runner.js +6 -15
  59. package/dist/src/agents/cli-agent-runner.js.map +1 -1
  60. package/dist/src/commands/delegate.d.ts.map +1 -1
  61. package/dist/src/commands/delegate.js +77 -1
  62. package/dist/src/commands/delegate.js.map +1 -1
  63. package/dist/src/commands/hooks.d.ts +15 -0
  64. package/dist/src/commands/hooks.d.ts.map +1 -1
  65. package/dist/src/commands/hooks.js +29 -2
  66. package/dist/src/commands/hooks.js.map +1 -1
  67. package/dist/src/commands/install-backend.d.ts +15 -0
  68. package/dist/src/commands/install-backend.d.ts.map +1 -1
  69. package/dist/src/commands/install-backend.js +67 -0
  70. package/dist/src/commands/install-backend.js.map +1 -1
  71. package/dist/src/commands/install-ui/BackupConfig.d.ts +6 -4
  72. package/dist/src/commands/install-ui/BackupConfig.d.ts.map +1 -1
  73. package/dist/src/commands/install-ui/BackupConfig.js +39 -12
  74. package/dist/src/commands/install-ui/BackupConfig.js.map +1 -1
  75. package/dist/src/commands/install-ui/ConfigPanel.d.ts.map +1 -1
  76. package/dist/src/commands/install-ui/ConfigPanel.js +1 -1
  77. package/dist/src/commands/install-ui/ConfigPanel.js.map +1 -1
  78. package/dist/src/commands/install-ui/InstallConfirm.d.ts +3 -0
  79. package/dist/src/commands/install-ui/InstallConfirm.d.ts.map +1 -1
  80. package/dist/src/commands/install-ui/InstallConfirm.js +5 -1
  81. package/dist/src/commands/install-ui/InstallConfirm.js.map +1 -1
  82. package/dist/src/commands/install-ui/InstallExecution.d.ts +2 -0
  83. package/dist/src/commands/install-ui/InstallExecution.d.ts.map +1 -1
  84. package/dist/src/commands/install-ui/InstallExecution.js +30 -5
  85. package/dist/src/commands/install-ui/InstallExecution.js.map +1 -1
  86. package/dist/src/commands/install-ui/InstallFlow.d.ts +1 -1
  87. package/dist/src/commands/install-ui/InstallFlow.d.ts.map +1 -1
  88. package/dist/src/commands/install-ui/InstallFlow.js +31 -6
  89. package/dist/src/commands/install-ui/InstallFlow.js.map +1 -1
  90. package/dist/src/commands/install-ui/InstallHub.d.ts +5 -0
  91. package/dist/src/commands/install-ui/InstallHub.d.ts.map +1 -1
  92. package/dist/src/commands/install-ui/InstallHub.js +24 -0
  93. package/dist/src/commands/install-ui/InstallHub.js.map +1 -1
  94. package/dist/src/commands/install-ui/InstallResult.d.ts.map +1 -1
  95. package/dist/src/commands/install-ui/InstallResult.js +1 -1
  96. package/dist/src/commands/install-ui/InstallResult.js.map +1 -1
  97. package/dist/src/commands/install-ui/StatuslineConfig.d.ts +9 -0
  98. package/dist/src/commands/install-ui/StatuslineConfig.d.ts.map +1 -0
  99. package/dist/src/commands/install-ui/StatuslineConfig.js +13 -0
  100. package/dist/src/commands/install-ui/StatuslineConfig.js.map +1 -0
  101. package/dist/src/commands/install-ui/index.d.ts +1 -1
  102. package/dist/src/commands/install-ui/index.d.ts.map +1 -1
  103. package/dist/src/commands/install-ui/types.d.ts +6 -0
  104. package/dist/src/commands/install-ui/types.d.ts.map +1 -1
  105. package/dist/src/commands/install-ui/types.js +3 -0
  106. package/dist/src/commands/install-ui/types.js.map +1 -1
  107. package/dist/src/commands/install.d.ts.map +1 -1
  108. package/dist/src/commands/install.js +6 -1
  109. package/dist/src/commands/install.js.map +1 -1
  110. package/dist/src/commands/launcher.js +1 -1
  111. package/dist/src/commands/launcher.js.map +1 -1
  112. package/dist/src/commands/overlay-ui/OverlayList.d.ts +35 -0
  113. package/dist/src/commands/overlay-ui/OverlayList.d.ts.map +1 -0
  114. package/dist/src/commands/overlay-ui/OverlayList.js +143 -0
  115. package/dist/src/commands/overlay-ui/OverlayList.js.map +1 -0
  116. package/dist/src/commands/overlay-ui/index.d.ts +2 -0
  117. package/dist/src/commands/overlay-ui/index.d.ts.map +1 -0
  118. package/dist/src/commands/overlay-ui/index.js +188 -0
  119. package/dist/src/commands/overlay-ui/index.js.map +1 -0
  120. package/dist/src/commands/overlay.d.ts.map +1 -1
  121. package/dist/src/commands/overlay.js +124 -60
  122. package/dist/src/commands/overlay.js.map +1 -1
  123. package/dist/src/commands/team.d.ts +10 -0
  124. package/dist/src/commands/team.d.ts.map +1 -1
  125. package/dist/src/commands/team.js +436 -42
  126. package/dist/src/commands/team.js.map +1 -1
  127. package/dist/src/core/manifest.d.ts.map +1 -1
  128. package/dist/src/core/manifest.js +58 -0
  129. package/dist/src/core/manifest.js.map +1 -1
  130. package/dist/src/core/overlay/applier.d.ts +36 -1
  131. package/dist/src/core/overlay/applier.d.ts.map +1 -1
  132. package/dist/src/core/overlay/applier.js +109 -1
  133. package/dist/src/core/overlay/applier.js.map +1 -1
  134. package/dist/src/hooks/delegate-monitor.js +1 -1
  135. package/dist/src/hooks/delegate-monitor.js.map +1 -1
  136. package/dist/src/hooks/plugins/spec-injection-plugin.d.ts.map +1 -1
  137. package/dist/src/hooks/plugins/spec-injection-plugin.js +17 -1
  138. package/dist/src/hooks/plugins/spec-injection-plugin.js.map +1 -1
  139. package/dist/src/hooks/spec-injector.d.ts +2 -1
  140. package/dist/src/hooks/spec-injector.d.ts.map +1 -1
  141. package/dist/src/hooks/spec-injector.js +19 -2
  142. package/dist/src/hooks/spec-injector.js.map +1 -1
  143. package/dist/src/hooks/team-monitor.d.ts.map +1 -1
  144. package/dist/src/hooks/team-monitor.js +17 -0
  145. package/dist/src/hooks/team-monitor.js.map +1 -1
  146. package/dist/src/i18n/locales/en.d.ts.map +1 -1
  147. package/dist/src/i18n/locales/en.js +25 -1
  148. package/dist/src/i18n/locales/en.js.map +1 -1
  149. package/dist/src/i18n/locales/zh.d.ts.map +1 -1
  150. package/dist/src/i18n/locales/zh.js +25 -1
  151. package/dist/src/i18n/locales/zh.js.map +1 -1
  152. package/dist/src/i18n/types.d.ts +22 -0
  153. package/dist/src/i18n/types.d.ts.map +1 -1
  154. package/dist/src/mcp/delegate-channel-relay.d.ts.map +1 -1
  155. package/dist/src/mcp/delegate-channel-relay.js +2 -7
  156. package/dist/src/mcp/delegate-channel-relay.js.map +1 -1
  157. package/dist/src/tools/namespace-guard.d.ts +37 -0
  158. package/dist/src/tools/namespace-guard.d.ts.map +1 -0
  159. package/dist/src/tools/namespace-guard.js +126 -0
  160. package/dist/src/tools/namespace-guard.js.map +1 -0
  161. package/dist/src/tools/spec-loader.d.ts +17 -1
  162. package/dist/src/tools/spec-loader.d.ts.map +1 -1
  163. package/dist/src/tools/spec-loader.js +71 -13
  164. package/dist/src/tools/spec-loader.js.map +1 -1
  165. package/dist/src/tools/team-members.d.ts +16 -0
  166. package/dist/src/tools/team-members.d.ts.map +1 -1
  167. package/dist/src/tools/team-members.js +31 -0
  168. package/dist/src/tools/team-members.js.map +1 -1
  169. package/package.json +1 -1
  170. package/workflows/delegate-usage.md +330 -0
  171. package/dist/agents/cli-agent-runner.d.ts +0 -131
  172. package/dist/agents/cli-agent-runner.d.ts.map +0 -1
  173. package/dist/agents/cli-agent-runner.js +0 -688
  174. package/dist/agents/cli-agent-runner.js.map +0 -1
  175. package/dist/agents/cli-history-store.d.ts +0 -63
  176. package/dist/agents/cli-history-store.d.ts.map +0 -1
  177. package/dist/agents/cli-history-store.js +0 -242
  178. package/dist/agents/cli-history-store.js.map +0 -1
  179. package/dist/agents/dashboard-bridge.d.ts +0 -39
  180. package/dist/agents/dashboard-bridge.d.ts.map +0 -1
  181. package/dist/agents/dashboard-bridge.js +0 -76
  182. package/dist/agents/dashboard-bridge.js.map +0 -1
  183. package/dist/agents/parallel-cli-runner.d.ts +0 -46
  184. package/dist/agents/parallel-cli-runner.d.ts.map +0 -1
  185. package/dist/agents/parallel-cli-runner.js +0 -277
  186. package/dist/agents/parallel-cli-runner.js.map +0 -1
  187. package/dist/agents/terminal-adapter.d.ts +0 -94
  188. package/dist/agents/terminal-adapter.d.ts.map +0 -1
  189. package/dist/agents/terminal-adapter.js +0 -132
  190. package/dist/agents/terminal-adapter.js.map +0 -1
  191. package/dist/agents/terminal-backend.d.ts +0 -53
  192. package/dist/agents/terminal-backend.d.ts.map +0 -1
  193. package/dist/agents/terminal-backend.js +0 -286
  194. package/dist/agents/terminal-backend.js.map +0 -1
  195. package/dist/async/delegate-broker-client.d.ts +0 -22
  196. package/dist/async/delegate-broker-client.d.ts.map +0 -1
  197. package/dist/async/delegate-broker-client.js +0 -47
  198. package/dist/async/delegate-broker-client.js.map +0 -1
  199. package/dist/async/delegate-broker.d.ts +0 -180
  200. package/dist/async/delegate-broker.d.ts.map +0 -1
  201. package/dist/async/delegate-broker.js +0 -1040
  202. package/dist/async/delegate-broker.js.map +0 -1
  203. package/dist/async/delegate-control.d.ts +0 -37
  204. package/dist/async/delegate-control.d.ts.map +0 -1
  205. package/dist/async/delegate-control.js +0 -155
  206. package/dist/async/delegate-control.js.map +0 -1
  207. package/dist/async/index.d.ts +0 -3
  208. package/dist/async/index.d.ts.map +0 -1
  209. package/dist/async/index.js +0 -3
  210. package/dist/async/index.js.map +0 -1
  211. package/dist/cli.d.ts +0 -2
  212. package/dist/cli.d.ts.map +0 -1
  213. package/dist/cli.js +0 -40
  214. package/dist/cli.js.map +0 -1
  215. package/dist/commands/cli.d.ts +0 -3
  216. package/dist/commands/cli.d.ts.map +0 -1
  217. package/dist/commands/cli.js +0 -262
  218. package/dist/commands/cli.js.map +0 -1
  219. package/dist/commands/coordinate.d.ts +0 -3
  220. package/dist/commands/coordinate.d.ts.map +0 -1
  221. package/dist/commands/coordinate.js +0 -275
  222. package/dist/commands/coordinate.js.map +0 -1
  223. package/dist/commands/delegate.d.ts +0 -37
  224. package/dist/commands/delegate.d.ts.map +0 -1
  225. package/dist/commands/delegate.js +0 -470
  226. package/dist/commands/delegate.js.map +0 -1
  227. package/dist/commands/ext.d.ts +0 -3
  228. package/dist/commands/ext.d.ts.map +0 -1
  229. package/dist/commands/ext.js +0 -28
  230. package/dist/commands/ext.js.map +0 -1
  231. package/dist/commands/hooks.d.ts +0 -3
  232. package/dist/commands/hooks.d.ts.map +0 -1
  233. package/dist/commands/hooks.js +0 -126
  234. package/dist/commands/hooks.js.map +0 -1
  235. package/dist/commands/install.d.ts +0 -3
  236. package/dist/commands/install.d.ts.map +0 -1
  237. package/dist/commands/install.js +0 -621
  238. package/dist/commands/install.js.map +0 -1
  239. package/dist/commands/launcher.d.ts +0 -3
  240. package/dist/commands/launcher.d.ts.map +0 -1
  241. package/dist/commands/launcher.js +0 -635
  242. package/dist/commands/launcher.js.map +0 -1
  243. package/dist/commands/link-coordinate.d.ts +0 -3
  244. package/dist/commands/link-coordinate.d.ts.map +0 -1
  245. package/dist/commands/link-coordinate.js +0 -225
  246. package/dist/commands/link-coordinate.js.map +0 -1
  247. package/dist/commands/msg.d.ts +0 -3
  248. package/dist/commands/msg.d.ts.map +0 -1
  249. package/dist/commands/msg.js +0 -110
  250. package/dist/commands/msg.js.map +0 -1
  251. package/dist/commands/overlay.d.ts +0 -3
  252. package/dist/commands/overlay.d.ts.map +0 -1
  253. package/dist/commands/overlay.js +0 -243
  254. package/dist/commands/overlay.js.map +0 -1
  255. package/dist/commands/run.d.ts +0 -3
  256. package/dist/commands/run.d.ts.map +0 -1
  257. package/dist/commands/run.js +0 -15
  258. package/dist/commands/run.js.map +0 -1
  259. package/dist/commands/serve.d.ts +0 -3
  260. package/dist/commands/serve.d.ts.map +0 -1
  261. package/dist/commands/serve.js +0 -16
  262. package/dist/commands/serve.js.map +0 -1
  263. package/dist/commands/spec.d.ts +0 -8
  264. package/dist/commands/spec.d.ts.map +0 -1
  265. package/dist/commands/spec.js +0 -147
  266. package/dist/commands/spec.js.map +0 -1
  267. package/dist/commands/stop.d.ts +0 -3
  268. package/dist/commands/stop.d.ts.map +0 -1
  269. package/dist/commands/stop.js +0 -218
  270. package/dist/commands/stop.js.map +0 -1
  271. package/dist/commands/tool.d.ts +0 -3
  272. package/dist/commands/tool.d.ts.map +0 -1
  273. package/dist/commands/tool.js +0 -29
  274. package/dist/commands/tool.js.map +0 -1
  275. package/dist/commands/uninstall.d.ts +0 -3
  276. package/dist/commands/uninstall.d.ts.map +0 -1
  277. package/dist/commands/uninstall.js +0 -77
  278. package/dist/commands/uninstall.js.map +0 -1
  279. package/dist/commands/view.d.ts +0 -3
  280. package/dist/commands/view.d.ts.map +0 -1
  281. package/dist/commands/view.js +0 -337
  282. package/dist/commands/view.js.map +0 -1
  283. package/dist/config/cli-tools-config.d.ts +0 -26
  284. package/dist/config/cli-tools-config.d.ts.map +0 -1
  285. package/dist/config/cli-tools-config.js +0 -49
  286. package/dist/config/cli-tools-config.js.map +0 -1
  287. package/dist/config/cli-tools-config.test.d.ts +0 -2
  288. package/dist/config/cli-tools-config.test.d.ts.map +0 -1
  289. package/dist/config/cli-tools-config.test.js +0 -59
  290. package/dist/config/cli-tools-config.test.js.map +0 -1
  291. package/dist/config/index.d.ts +0 -4
  292. package/dist/config/index.d.ts.map +0 -1
  293. package/dist/config/index.js +0 -27
  294. package/dist/config/index.js.map +0 -1
  295. package/dist/config/paths.d.ts +0 -15
  296. package/dist/config/paths.d.ts.map +0 -1
  297. package/dist/config/paths.js +0 -27
  298. package/dist/config/paths.js.map +0 -1
  299. package/dist/config/template-discovery.d.ts +0 -32
  300. package/dist/config/template-discovery.d.ts.map +0 -1
  301. package/dist/config/template-discovery.js +0 -128
  302. package/dist/config/template-discovery.js.map +0 -1
  303. package/dist/coordinator/cli-executor.d.ts +0 -22
  304. package/dist/coordinator/cli-executor.d.ts.map +0 -1
  305. package/dist/coordinator/cli-executor.js +0 -49
  306. package/dist/coordinator/cli-executor.js.map +0 -1
  307. package/dist/coordinator/expr-evaluator.d.ts +0 -11
  308. package/dist/coordinator/expr-evaluator.d.ts.map +0 -1
  309. package/dist/coordinator/expr-evaluator.js +0 -351
  310. package/dist/coordinator/expr-evaluator.js.map +0 -1
  311. package/dist/coordinator/graph-loader.d.ts +0 -16
  312. package/dist/coordinator/graph-loader.d.ts.map +0 -1
  313. package/dist/coordinator/graph-loader.js +0 -190
  314. package/dist/coordinator/graph-loader.js.map +0 -1
  315. package/dist/coordinator/graph-types.d.ts +0 -304
  316. package/dist/coordinator/graph-types.d.ts.map +0 -1
  317. package/dist/coordinator/graph-types.js +0 -6
  318. package/dist/coordinator/graph-types.js.map +0 -1
  319. package/dist/coordinator/graph-walker.d.ts +0 -51
  320. package/dist/coordinator/graph-walker.d.ts.map +0 -1
  321. package/dist/coordinator/graph-walker.js +0 -666
  322. package/dist/coordinator/graph-walker.js.map +0 -1
  323. package/dist/coordinator/index.d.ts +0 -13
  324. package/dist/coordinator/index.d.ts.map +0 -1
  325. package/dist/coordinator/index.js +0 -14
  326. package/dist/coordinator/index.js.map +0 -1
  327. package/dist/coordinator/intent-router.d.ts +0 -11
  328. package/dist/coordinator/intent-router.d.ts.map +0 -1
  329. package/dist/coordinator/intent-router.js +0 -65
  330. package/dist/coordinator/intent-router.js.map +0 -1
  331. package/dist/coordinator/link-session.d.ts +0 -29
  332. package/dist/coordinator/link-session.d.ts.map +0 -1
  333. package/dist/coordinator/link-session.js +0 -192
  334. package/dist/coordinator/link-session.js.map +0 -1
  335. package/dist/coordinator/link-walker.d.ts +0 -56
  336. package/dist/coordinator/link-walker.d.ts.map +0 -1
  337. package/dist/coordinator/link-walker.js +0 -548
  338. package/dist/coordinator/link-walker.js.map +0 -1
  339. package/dist/coordinator/output-parser.d.ts +0 -5
  340. package/dist/coordinator/output-parser.d.ts.map +0 -1
  341. package/dist/coordinator/output-parser.js +0 -114
  342. package/dist/coordinator/output-parser.js.map +0 -1
  343. package/dist/coordinator/parallel-executor.d.ts +0 -24
  344. package/dist/coordinator/parallel-executor.d.ts.map +0 -1
  345. package/dist/coordinator/parallel-executor.js +0 -43
  346. package/dist/coordinator/parallel-executor.js.map +0 -1
  347. package/dist/coordinator/prompt-assembler.d.ts +0 -15
  348. package/dist/coordinator/prompt-assembler.d.ts.map +0 -1
  349. package/dist/coordinator/prompt-assembler.js +0 -228
  350. package/dist/coordinator/prompt-assembler.js.map +0 -1
  351. package/dist/coordinator/step-analyzer.d.ts +0 -8
  352. package/dist/coordinator/step-analyzer.d.ts.map +0 -1
  353. package/dist/coordinator/step-analyzer.js +0 -82
  354. package/dist/coordinator/step-analyzer.js.map +0 -1
  355. package/dist/core/extension-loader.d.ts +0 -11
  356. package/dist/core/extension-loader.d.ts.map +0 -1
  357. package/dist/core/extension-loader.js +0 -54
  358. package/dist/core/extension-loader.js.map +0 -1
  359. package/dist/core/manifest.d.ts +0 -24
  360. package/dist/core/manifest.d.ts.map +0 -1
  361. package/dist/core/manifest.js +0 -139
  362. package/dist/core/manifest.js.map +0 -1
  363. package/dist/core/mcp-tool-registry.integration.test.d.ts +0 -2
  364. package/dist/core/mcp-tool-registry.integration.test.d.ts.map +0 -1
  365. package/dist/core/mcp-tool-registry.integration.test.js +0 -220
  366. package/dist/core/mcp-tool-registry.integration.test.js.map +0 -1
  367. package/dist/core/overlay/applier.d.ts +0 -73
  368. package/dist/core/overlay/applier.d.ts.map +0 -1
  369. package/dist/core/overlay/applier.js +0 -248
  370. package/dist/core/overlay/applier.js.map +0 -1
  371. package/dist/core/overlay/loader.d.ts +0 -26
  372. package/dist/core/overlay/loader.d.ts.map +0 -1
  373. package/dist/core/overlay/loader.js +0 -199
  374. package/dist/core/overlay/loader.js.map +0 -1
  375. package/dist/core/overlay/patcher.d.ts +0 -26
  376. package/dist/core/overlay/patcher.d.ts.map +0 -1
  377. package/dist/core/overlay/patcher.js +0 -212
  378. package/dist/core/overlay/patcher.js.map +0 -1
  379. package/dist/core/overlay/section-parser.d.ts +0 -25
  380. package/dist/core/overlay/section-parser.d.ts.map +0 -1
  381. package/dist/core/overlay/section-parser.js +0 -99
  382. package/dist/core/overlay/section-parser.js.map +0 -1
  383. package/dist/core/overlay/types.d.ts +0 -51
  384. package/dist/core/overlay/types.d.ts.map +0 -1
  385. package/dist/core/overlay/types.js +0 -15
  386. package/dist/core/overlay/types.js.map +0 -1
  387. package/dist/core/tool-registry.d.ts +0 -10
  388. package/dist/core/tool-registry.d.ts.map +0 -1
  389. package/dist/core/tool-registry.js +0 -29
  390. package/dist/core/tool-registry.js.map +0 -1
  391. package/dist/core/tool-registry.test.d.ts +0 -2
  392. package/dist/core/tool-registry.test.d.ts.map +0 -1
  393. package/dist/core/tool-registry.test.js +0 -78
  394. package/dist/core/tool-registry.test.js.map +0 -1
  395. package/dist/db/connection-pool.d.ts +0 -21
  396. package/dist/db/connection-pool.d.ts.map +0 -1
  397. package/dist/db/connection-pool.js +0 -53
  398. package/dist/db/connection-pool.js.map +0 -1
  399. package/dist/db/index.d.ts +0 -6
  400. package/dist/db/index.d.ts.map +0 -1
  401. package/dist/db/index.js +0 -9
  402. package/dist/db/index.js.map +0 -1
  403. package/dist/db/schema/core/index.d.ts +0 -5
  404. package/dist/db/schema/core/index.d.ts.map +0 -1
  405. package/dist/db/schema/core/index.js +0 -5
  406. package/dist/db/schema/core/index.js.map +0 -1
  407. package/dist/db/schema/core/organizations.d.ts +0 -244
  408. package/dist/db/schema/core/organizations.d.ts.map +0 -1
  409. package/dist/db/schema/core/organizations.js +0 -44
  410. package/dist/db/schema/core/organizations.js.map +0 -1
  411. package/dist/db/schema/core/permissions.d.ts +0 -158
  412. package/dist/db/schema/core/permissions.d.ts.map +0 -1
  413. package/dist/db/schema/core/permissions.js +0 -62
  414. package/dist/db/schema/core/permissions.js.map +0 -1
  415. package/dist/db/schema/core/refresh-tokens.d.ts +0 -147
  416. package/dist/db/schema/core/refresh-tokens.d.ts.map +0 -1
  417. package/dist/db/schema/core/refresh-tokens.js +0 -22
  418. package/dist/db/schema/core/refresh-tokens.js.map +0 -1
  419. package/dist/db/schema/core/users.d.ts +0 -178
  420. package/dist/db/schema/core/users.d.ts.map +0 -1
  421. package/dist/db/schema/core/users.js +0 -14
  422. package/dist/db/schema/core/users.js.map +0 -1
  423. package/dist/db/tenant-migrator.d.ts +0 -11
  424. package/dist/db/tenant-migrator.d.ts.map +0 -1
  425. package/dist/db/tenant-migrator.js +0 -74
  426. package/dist/db/tenant-migrator.js.map +0 -1
  427. package/dist/db/tenant-schema.d.ts +0 -290
  428. package/dist/db/tenant-schema.d.ts.map +0 -1
  429. package/dist/db/tenant-schema.js +0 -32
  430. package/dist/db/tenant-schema.js.map +0 -1
  431. package/dist/hooks/constants.d.ts +0 -40
  432. package/dist/hooks/constants.d.ts.map +0 -1
  433. package/dist/hooks/constants.js +0 -53
  434. package/dist/hooks/constants.js.map +0 -1
  435. package/dist/hooks/context-monitor.d.ts +0 -33
  436. package/dist/hooks/context-monitor.d.ts.map +0 -1
  437. package/dist/hooks/context-monitor.js +0 -117
  438. package/dist/hooks/context-monitor.js.map +0 -1
  439. package/dist/hooks/delegate-monitor.d.ts +0 -24
  440. package/dist/hooks/delegate-monitor.d.ts.map +0 -1
  441. package/dist/hooks/delegate-monitor.js +0 -76
  442. package/dist/hooks/delegate-monitor.js.map +0 -1
  443. package/dist/hooks/index.d.ts +0 -4
  444. package/dist/hooks/index.d.ts.map +0 -1
  445. package/dist/hooks/index.js +0 -4
  446. package/dist/hooks/index.js.map +0 -1
  447. package/dist/hooks/statusline.d.ts +0 -29
  448. package/dist/hooks/statusline.d.ts.map +0 -1
  449. package/dist/hooks/statusline.js +0 -134
  450. package/dist/hooks/statusline.js.map +0 -1
  451. package/dist/index.d.ts +0 -8
  452. package/dist/index.d.ts.map +0 -1
  453. package/dist/index.js +0 -6
  454. package/dist/index.js.map +0 -1
  455. package/dist/mcp/delegate-channel-relay.d.ts +0 -51
  456. package/dist/mcp/delegate-channel-relay.d.ts.map +0 -1
  457. package/dist/mcp/delegate-channel-relay.js +0 -307
  458. package/dist/mcp/delegate-channel-relay.js.map +0 -1
  459. package/dist/mcp/server.d.ts +0 -6
  460. package/dist/mcp/server.d.ts.map +0 -1
  461. package/dist/mcp/server.js +0 -64
  462. package/dist/mcp/server.js.map +0 -1
  463. package/dist/middleware/auth.d.ts +0 -13
  464. package/dist/middleware/auth.d.ts.map +0 -1
  465. package/dist/middleware/auth.js +0 -27
  466. package/dist/middleware/auth.js.map +0 -1
  467. package/dist/middleware/permission.d.ts +0 -9
  468. package/dist/middleware/permission.d.ts.map +0 -1
  469. package/dist/middleware/permission.js +0 -19
  470. package/dist/middleware/permission.js.map +0 -1
  471. package/dist/middleware/rate-limit.d.ts +0 -9
  472. package/dist/middleware/rate-limit.d.ts.map +0 -1
  473. package/dist/middleware/rate-limit.js +0 -40
  474. package/dist/middleware/rate-limit.js.map +0 -1
  475. package/dist/middleware/tenant.d.ts +0 -17
  476. package/dist/middleware/tenant.d.ts.map +0 -1
  477. package/dist/middleware/tenant.js +0 -57
  478. package/dist/middleware/tenant.js.map +0 -1
  479. package/dist/middleware/validation.d.ts +0 -40
  480. package/dist/middleware/validation.d.ts.map +0 -1
  481. package/dist/middleware/validation.js +0 -51
  482. package/dist/middleware/validation.js.map +0 -1
  483. package/dist/routes/auth.d.ts +0 -3
  484. package/dist/routes/auth.d.ts.map +0 -1
  485. package/dist/routes/auth.js +0 -77
  486. package/dist/routes/auth.js.map +0 -1
  487. package/dist/routes/members.d.ts +0 -4
  488. package/dist/routes/members.d.ts.map +0 -1
  489. package/dist/routes/members.js +0 -114
  490. package/dist/routes/members.js.map +0 -1
  491. package/dist/routes/organizations.d.ts +0 -5
  492. package/dist/routes/organizations.d.ts.map +0 -1
  493. package/dist/routes/organizations.js +0 -97
  494. package/dist/routes/organizations.js.map +0 -1
  495. package/dist/services/auth.service.d.ts +0 -24
  496. package/dist/services/auth.service.d.ts.map +0 -1
  497. package/dist/services/auth.service.js +0 -70
  498. package/dist/services/auth.service.js.map +0 -1
  499. package/dist/services/password.service.d.ts +0 -3
  500. package/dist/services/password.service.d.ts.map +0 -1
  501. package/dist/services/password.service.js +0 -18
  502. package/dist/services/password.service.js.map +0 -1
  503. package/dist/services/rbac.service.d.ts +0 -7
  504. package/dist/services/rbac.service.d.ts.map +0 -1
  505. package/dist/services/rbac.service.js +0 -36
  506. package/dist/services/rbac.service.js.map +0 -1
  507. package/dist/services/token.service.d.ts +0 -18
  508. package/dist/services/token.service.d.ts.map +0 -1
  509. package/dist/services/token.service.js +0 -86
  510. package/dist/services/token.service.js.map +0 -1
  511. package/dist/tools/core-memory.d.ts +0 -12
  512. package/dist/tools/core-memory.d.ts.map +0 -1
  513. package/dist/tools/core-memory.js +0 -276
  514. package/dist/tools/core-memory.js.map +0 -1
  515. package/dist/tools/edit-file.d.ts +0 -25
  516. package/dist/tools/edit-file.d.ts.map +0 -1
  517. package/dist/tools/edit-file.js +0 -462
  518. package/dist/tools/edit-file.js.map +0 -1
  519. package/dist/tools/index.d.ts +0 -8
  520. package/dist/tools/index.d.ts.map +0 -1
  521. package/dist/tools/index.js +0 -536
  522. package/dist/tools/index.js.map +0 -1
  523. package/dist/tools/read-file.d.ts +0 -13
  524. package/dist/tools/read-file.d.ts.map +0 -1
  525. package/dist/tools/read-file.js +0 -91
  526. package/dist/tools/read-file.js.map +0 -1
  527. package/dist/tools/read-many-files.d.ts +0 -15
  528. package/dist/tools/read-many-files.d.ts.map +0 -1
  529. package/dist/tools/read-many-files.js +0 -187
  530. package/dist/tools/read-many-files.js.map +0 -1
  531. package/dist/tools/spec-index-builder.d.ts +0 -58
  532. package/dist/tools/spec-index-builder.d.ts.map +0 -1
  533. package/dist/tools/spec-index-builder.js +0 -211
  534. package/dist/tools/spec-index-builder.js.map +0 -1
  535. package/dist/tools/spec-init.d.ts +0 -17
  536. package/dist/tools/spec-init.d.ts.map +0 -1
  537. package/dist/tools/spec-init.js +0 -215
  538. package/dist/tools/spec-init.js.map +0 -1
  539. package/dist/tools/spec-keyword-extractor.d.ts +0 -24
  540. package/dist/tools/spec-keyword-extractor.d.ts.map +0 -1
  541. package/dist/tools/spec-keyword-extractor.js +0 -84
  542. package/dist/tools/spec-keyword-extractor.js.map +0 -1
  543. package/dist/tools/spec-keyword-extractor.test.d.ts +0 -2
  544. package/dist/tools/spec-keyword-extractor.test.d.ts.map +0 -1
  545. package/dist/tools/spec-keyword-extractor.test.js +0 -99
  546. package/dist/tools/spec-keyword-extractor.test.js.map +0 -1
  547. package/dist/tools/spec-loader.d.ts +0 -15
  548. package/dist/tools/spec-loader.d.ts.map +0 -1
  549. package/dist/tools/spec-loader.js +0 -93
  550. package/dist/tools/spec-loader.js.map +0 -1
  551. package/dist/tools/team-msg.d.ts +0 -52
  552. package/dist/tools/team-msg.d.ts.map +0 -1
  553. package/dist/tools/team-msg.js +0 -449
  554. package/dist/tools/team-msg.js.map +0 -1
  555. package/dist/tools/write-file.d.ts +0 -19
  556. package/dist/tools/write-file.d.ts.map +0 -1
  557. package/dist/tools/write-file.js +0 -165
  558. package/dist/tools/write-file.js.map +0 -1
  559. package/dist/types/index.d.ts +0 -47
  560. package/dist/types/index.d.ts.map +0 -1
  561. package/dist/types/index.js +0 -2
  562. package/dist/types/index.js.map +0 -1
  563. package/dist/types/tool-schema.d.ts +0 -37
  564. package/dist/types/tool-schema.d.ts.map +0 -1
  565. package/dist/types/tool-schema.js +0 -24
  566. package/dist/types/tool-schema.js.map +0 -1
  567. package/dist/utils/file-reader.d.ts +0 -74
  568. package/dist/utils/file-reader.d.ts.map +0 -1
  569. package/dist/utils/file-reader.js +0 -217
  570. package/dist/utils/file-reader.js.map +0 -1
  571. package/dist/utils/path-validator.d.ts +0 -52
  572. package/dist/utils/path-validator.d.ts.map +0 -1
  573. package/dist/utils/path-validator.js +0 -151
  574. package/dist/utils/path-validator.js.map +0 -1
@@ -1,688 +0,0 @@
1
- // ---------------------------------------------------------------------------
2
- // CLI Agent Runner
3
- // Orchestrates adapter selection, process spawning, stdout rendering, and
4
- // exit handling for the `maestro cli` command.
5
- // ---------------------------------------------------------------------------
6
- import { resolve, join } from 'node:path';
7
- import { pathToFileURL } from 'node:url';
8
- import { randomBytes } from 'node:crypto';
9
- import { spawn } from 'node:child_process';
10
- import { readFileSync, appendFileSync, existsSync } from 'node:fs';
11
- import { tmpdir } from 'node:os';
12
- import { DashboardBridge } from './dashboard-bridge.js';
13
- import { CliHistoryStore } from './cli-history-store.js';
14
- import { loadTemplate, loadProtocol } from '../config/template-discovery.js';
15
- import { NOTIFY_PREFIX } from '../hooks/constants.js';
16
- import { DelegateBrokerClient } from '../async/index.js';
17
- // ---------------------------------------------------------------------------
18
- // Tool name -> AgentType mapping
19
- // ---------------------------------------------------------------------------
20
- const TOOL_TO_AGENT_TYPE = {
21
- gemini: 'gemini',
22
- 'gemini-a2a': 'gemini-a2a',
23
- qwen: 'qwen',
24
- codex: 'codex',
25
- 'codex-server': 'codex-server',
26
- claude: 'claude-code',
27
- opencode: 'opencode',
28
- };
29
- // ---------------------------------------------------------------------------
30
- // AgentType -> terminal CLI command mapping
31
- // ---------------------------------------------------------------------------
32
- const AGENT_TYPE_TO_TERMINAL_CMD = {
33
- 'gemini': 'gemini',
34
- 'gemini-a2a': 'gemini',
35
- 'qwen': 'qwen',
36
- 'codex': 'codex',
37
- 'codex-server': 'codex',
38
- 'claude-code': 'claude',
39
- 'opencode': 'opencode',
40
- };
41
- // ---------------------------------------------------------------------------
42
- // Execution ID generation
43
- // ---------------------------------------------------------------------------
44
- const TOOL_PREFIX = {
45
- gemini: 'gem',
46
- 'gemini-a2a': 'gma',
47
- qwen: 'qwn',
48
- codex: 'cdx',
49
- 'codex-server': 'cxs',
50
- claude: 'cld',
51
- opencode: 'opc',
52
- };
53
- export function generateCliExecId(tool) {
54
- const prefix = TOOL_PREFIX[tool] ?? 'run';
55
- const now = new Date();
56
- const hh = String(now.getHours()).padStart(2, '0');
57
- const mm = String(now.getMinutes()).padStart(2, '0');
58
- const ss = String(now.getSeconds()).padStart(2, '0');
59
- const rand = randomBytes(2).toString('hex'); // 4 hex chars
60
- return `${prefix}-${hh}${mm}${ss}-${rand}`;
61
- }
62
- // ---------------------------------------------------------------------------
63
- // Prompt assembly — protocol + user prompt + template
64
- // ---------------------------------------------------------------------------
65
- async function assemblePrompt(userPrompt, mode, rule) {
66
- const parts = [];
67
- // 1. Load mode protocol
68
- const protocol = await loadProtocol(mode);
69
- if (protocol) {
70
- parts.push(protocol);
71
- }
72
- // 2. User prompt
73
- parts.push(userPrompt);
74
- // 3. Load rule template (if specified)
75
- if (rule) {
76
- const template = await loadTemplate(rule);
77
- if (template) {
78
- parts.push(template);
79
- }
80
- else {
81
- console.error(`Warning: template "${rule}" not found, proceeding without it.`);
82
- }
83
- }
84
- return parts.join('\n\n');
85
- }
86
- // ---------------------------------------------------------------------------
87
- // Adapter factory — dynamic import avoids rootDir cross-boundary issues
88
- // ---------------------------------------------------------------------------
89
- async function loadAdapterModule(adapterFile) {
90
- const baseDir = import.meta.dirname ?? __dirname;
91
- // Prefer tsc-compiled output; fall back to legacy vite bundle path
92
- const tscAgents = resolve(baseDir, '..', '..', 'dashboard', 'dist-server', 'dashboard', 'src', 'server', 'agents');
93
- const legacyAgents = resolve(baseDir, '..', '..', 'dashboard', 'dist-server', 'server', 'agents');
94
- const tscPath = resolve(tscAgents, adapterFile);
95
- const legacyPath = resolve(legacyAgents, adapterFile);
96
- const fullPath = existsSync(tscPath) ? tscPath : legacyPath;
97
- // Convert to file:// URL for Windows compatibility with dynamic import()
98
- const fileUrl = pathToFileURL(fullPath).href;
99
- return await import(fileUrl);
100
- }
101
- async function createAdapter(agentType, backend) {
102
- if (backend === 'terminal') {
103
- const { detectBackend } = await import('./terminal-backend.js');
104
- const { TerminalAdapter } = await import('./terminal-adapter.js');
105
- const termBackend = detectBackend();
106
- if (!termBackend) {
107
- throw new Error('No terminal multiplexer detected (need TMUX or WEZTERM_PANE env)');
108
- }
109
- const cmd = AGENT_TYPE_TO_TERMINAL_CMD[agentType] ?? agentType;
110
- return new TerminalAdapter(termBackend, cmd);
111
- }
112
- const mod = await loadAdapterModule('adapter-factory.js');
113
- const factory = mod.createAdapterForType;
114
- return await factory(agentType);
115
- }
116
- // ---------------------------------------------------------------------------
117
- // Entry renderer — writes normalized entries to stdout/stderr
118
- // ---------------------------------------------------------------------------
119
- function renderEntry(entry) {
120
- switch (entry.type) {
121
- case 'assistant_message':
122
- process.stdout.write(entry.content);
123
- break;
124
- case 'tool_use':
125
- if (entry.status === 'running') {
126
- console.log(`[Tool: ${entry.name}]`);
127
- }
128
- else if (entry.status === 'completed' || entry.status === 'failed') {
129
- console.log(`[Tool ${entry.name}: ${entry.status}]`);
130
- if (entry.result) {
131
- console.log(entry.result);
132
- }
133
- }
134
- break;
135
- case 'error':
136
- console.error(`Error: ${entry.message}`);
137
- break;
138
- case 'file_change':
139
- console.log(`[File ${entry.action}: ${entry.path}]`);
140
- break;
141
- case 'command_exec':
142
- console.log(`[Exec: ${entry.command}]`);
143
- break;
144
- case 'token_usage':
145
- console.log(`[Tokens: ${entry.inputTokens}in/${entry.outputTokens}out]`);
146
- break;
147
- // Silently skip: user_message, thinking, approval_request,
148
- // approval_response, status_change (handled by the runner itself)
149
- default:
150
- break;
151
- }
152
- }
153
- function buildJobMetadata(options) {
154
- const metadata = {
155
- tool: options.tool,
156
- mode: options.mode,
157
- workDir: options.workDir,
158
- prompt: options.prompt.substring(0, 200),
159
- cancelRequestedAt: null,
160
- cancelRequestedBy: null,
161
- cancelReason: null,
162
- };
163
- if (options.model) {
164
- metadata.model = options.model;
165
- }
166
- if (options.rule) {
167
- metadata.rule = options.rule;
168
- }
169
- if (options.backend) {
170
- metadata.backend = options.backend;
171
- }
172
- if (options.sessionId) {
173
- metadata.sessionId = options.sessionId;
174
- }
175
- if (options.includeDirs && options.includeDirs.length > 0) {
176
- metadata.includeDirs = options.includeDirs;
177
- }
178
- return metadata;
179
- }
180
- function mergeJsonObjects(base, patch) {
181
- return patch ? { ...base, ...patch } : { ...base };
182
- }
183
- function spawnQueuedDelegateWorker(options, execId, prompt) {
184
- const entryScript = process.argv[1];
185
- if (!entryScript) {
186
- return false;
187
- }
188
- const args = [
189
- entryScript,
190
- 'delegate',
191
- prompt,
192
- '--worker',
193
- '--to',
194
- options.tool,
195
- '--mode',
196
- options.mode,
197
- '--cd',
198
- options.workDir,
199
- '--id',
200
- execId,
201
- '--backend',
202
- options.backend ?? 'direct',
203
- '--resume',
204
- execId,
205
- ];
206
- if (options.model) {
207
- args.push('--model', options.model);
208
- }
209
- if (options.rule) {
210
- args.push('--rule', options.rule);
211
- }
212
- if (options.includeDirs && options.includeDirs.length > 0) {
213
- args.push('--includeDirs', options.includeDirs.join(','));
214
- }
215
- if (options.sessionId) {
216
- args.push('--session', options.sessionId);
217
- }
218
- const child = spawn(process.execPath, args, {
219
- cwd: options.workDir,
220
- detached: true,
221
- stdio: 'ignore',
222
- env: {
223
- ...process.env,
224
- MAESTRO_DISABLE_DASHBOARD_BRIDGE: '1',
225
- },
226
- });
227
- child.unref();
228
- return true;
229
- }
230
- function isTerminalStatus(status) {
231
- return status === 'completed' || status === 'failed' || status === 'cancelled';
232
- }
233
- function summarizeEntry(entry) {
234
- switch (entry.type) {
235
- case 'assistant_message':
236
- return entry.content.replace(/\s+/g, ' ').trim().slice(0, 200) || 'Assistant response updated';
237
- case 'tool_use':
238
- return `Tool ${entry.name} ${entry.status}`;
239
- case 'file_change':
240
- return `File ${entry.action}: ${entry.path}`;
241
- case 'command_exec':
242
- return `Command: ${entry.command}`;
243
- case 'error':
244
- return entry.message;
245
- case 'status_change':
246
- return `Status changed to ${entry.status}`;
247
- default:
248
- return `Event: ${entry.type}`;
249
- }
250
- }
251
- function shouldPublishSnapshot(entry) {
252
- switch (entry.type) {
253
- case 'assistant_message':
254
- return entry.partial !== true;
255
- case 'tool_use':
256
- return entry.status === 'completed' || entry.status === 'failed';
257
- case 'file_change':
258
- case 'command_exec':
259
- case 'error':
260
- return true;
261
- default:
262
- return false;
263
- }
264
- }
265
- function createNoopBridge() {
266
- return {
267
- async tryConnect() {
268
- return false;
269
- },
270
- forwardSpawn() {
271
- return;
272
- },
273
- forwardEntry() {
274
- return;
275
- },
276
- forwardStopped() {
277
- return;
278
- },
279
- close() {
280
- return;
281
- },
282
- };
283
- }
284
- // ---------------------------------------------------------------------------
285
- // CliAgentRunner
286
- // ---------------------------------------------------------------------------
287
- export class CliAgentRunner {
288
- dependencies;
289
- constructor(dependencies = {}) {
290
- this.dependencies = dependencies;
291
- }
292
- /** Resolve dashboard WS URL from env → config → default port 3001 */
293
- static getDashboardWsUrl() {
294
- const envPort = process.env.MAESTRO_DASHBOARD_PORT;
295
- if (envPort) {
296
- const p = parseInt(envPort, 10);
297
- if (!isNaN(p))
298
- return `ws://127.0.0.1:${p}/ws`;
299
- }
300
- try {
301
- const configPath = resolve(process.cwd(), '.workflow', 'config.json');
302
- const raw = readFileSync(configPath, 'utf-8');
303
- const json = JSON.parse(raw);
304
- const dashboard = json['dashboard'];
305
- if (dashboard?.port && typeof dashboard.port === 'number') {
306
- return `ws://127.0.0.1:${dashboard.port}/ws`;
307
- }
308
- }
309
- catch {
310
- // Config missing or unreadable — use default
311
- }
312
- return 'ws://127.0.0.1:3001/ws';
313
- }
314
- /**
315
- * Send MCP channel notification (primary path).
316
- * If maestro MCP server is running in this process, push a
317
- * notifications/claude/channel message directly.
318
- */
319
- static sendChannelNotification(_sessionId, execId, tool, mode, status, exitCode) {
320
- try {
321
- // Dynamic import to avoid circular dependency — getMcpServer is exported
322
- // from mcp/server.ts which may not be loaded in CLI-only mode.
323
- const { getMcpServer } = require('../mcp/server.js');
324
- const server = getMcpServer();
325
- if (!server)
326
- return;
327
- const label = status === 'completed'
328
- ? 'DELEGATE COMPLETED'
329
- : status === 'cancelled'
330
- ? 'DELEGATE CANCELLED'
331
- : 'DELEGATE FAILED';
332
- const result = status === 'completed'
333
- ? 'done'
334
- : status === 'cancelled'
335
- ? 'cancelled'
336
- : `exit:${exitCode}`;
337
- const content = `[${label}] ${execId} (${tool}/${mode}) ${result}\nUse \`maestro delegate output ${execId}\` for full result.`;
338
- // Fire-and-forget notification via MCP protocol
339
- server.notification({
340
- method: 'notifications/claude/channel',
341
- params: {
342
- content,
343
- meta: { exec_id: execId, job_id: execId, tool, mode, exit_code: String(exitCode), event_type: status, status },
344
- },
345
- }).catch((err) => { console.error(`[${execId}] MCP notification send failed: ${err instanceof Error ? err.message : err}`); });
346
- }
347
- catch (err) {
348
- console.error(`[${execId}] MCP server not available for channel notification: ${err instanceof Error ? err.message : err}`);
349
- }
350
- }
351
- /**
352
- * Run a CLI agent to completion and return its exit code (0 = success).
353
- */
354
- async run(options) {
355
- const agentType = TOOL_TO_AGENT_TYPE[options.tool];
356
- if (!agentType) {
357
- console.error(`Unknown tool: ${options.tool}`);
358
- return 1;
359
- }
360
- // Generate or use provided execution ID
361
- const execId = options.execId ?? generateCliExecId(options.tool);
362
- process.stderr.write(`[MAESTRO_EXEC_ID=${execId}]\n`);
363
- // History store for persistence and resume
364
- const store = new CliHistoryStore();
365
- const broker = this.dependencies.brokerClient ?? new DelegateBrokerClient();
366
- const now = this.dependencies.now ?? (() => new Date().toISOString());
367
- const jobMetadata = buildJobMetadata(options);
368
- // Handle --resume: prepend previous session context to user prompt
369
- let userPrompt = options.prompt;
370
- if (options.resume) {
371
- let resumeId = options.resume;
372
- if (resumeId === 'last') {
373
- const recent = store.listRecent(1);
374
- resumeId = recent.length > 0 ? recent[0].execId : '';
375
- }
376
- if (resumeId) {
377
- userPrompt = store.buildResumePrompt(resumeId, userPrompt);
378
- }
379
- else {
380
- console.error('No previous execution found for --resume');
381
- }
382
- }
383
- // Assemble final prompt: protocol + user prompt + template
384
- const finalPrompt = await assemblePrompt(userPrompt, options.mode, options.rule);
385
- const adapterFactory = this.dependencies.createAdapter ?? createAdapter;
386
- const adapter = await adapterFactory(agentType, options.backend);
387
- // Optional Dashboard bridge — connect silently, don't block startup
388
- const bridgeEnabled = process.env.MAESTRO_DISABLE_DASHBOARD_BRIDGE !== '1';
389
- const bridge = bridgeEnabled
390
- ? (this.dependencies.createBridge?.() ?? new DashboardBridge())
391
- : createNoopBridge();
392
- const bridgeConnected = bridgeEnabled
393
- ? await bridge.tryConnect(CliAgentRunner.getDashboardWsUrl(), 1000)
394
- : false;
395
- if (!bridgeConnected) {
396
- process.stderr.write('[Dashboard not connected — real-time view unavailable]\n');
397
- }
398
- const config = {
399
- type: agentType,
400
- prompt: finalPrompt,
401
- workDir: options.workDir,
402
- model: options.model,
403
- approvalMode: options.mode === 'write' ? 'auto' : 'suggest',
404
- interactive: adapter.supportsInteractive?.() === true,
405
- };
406
- const agentProcess = await adapter.spawn(config);
407
- bridge.forwardSpawn(agentProcess);
408
- const agentJobMetadata = {
409
- ...jobMetadata,
410
- agentProcessId: agentProcess.id,
411
- };
412
- store.saveMeta(execId, {
413
- execId,
414
- tool: options.tool,
415
- model: options.model,
416
- mode: options.mode,
417
- prompt: options.prompt.substring(0, 500),
418
- workDir: options.workDir,
419
- startedAt: agentProcess.startedAt,
420
- });
421
- const publishEvent = (type, status, summary, extraPayload = {}, extraJobMetadata) => {
422
- try {
423
- const snapshot = store.buildSnapshot(execId);
424
- broker.publishEvent({
425
- jobId: execId,
426
- type,
427
- status,
428
- snapshot: snapshot,
429
- payload: {
430
- execId,
431
- summary,
432
- ...extraPayload,
433
- },
434
- jobMetadata: mergeJsonObjects(agentJobMetadata, extraJobMetadata),
435
- });
436
- }
437
- catch {
438
- // Broker publication is best-effort and must not break CLI execution
439
- }
440
- };
441
- publishEvent('status_update', 'running', `Delegate started for ${options.tool}/${options.mode}`);
442
- // Safety net: if the process exits without a stopped event (e.g. Windows
443
- // shell process tree doesn't fire exit/close reliably), write meta.json
444
- // from the synchronous process.on('exit') handler as a last resort.
445
- let metaWritten = false;
446
- let cancellationRequested = Boolean(broker.getJob(execId)?.metadata?.cancelRequestedAt);
447
- let cancellationInitiated = false;
448
- let cancellationPoller = null;
449
- const clearCancellationPoller = () => {
450
- if (cancellationPoller) {
451
- clearInterval(cancellationPoller);
452
- cancellationPoller = null;
453
- }
454
- };
455
- const saveMeta = (status, exitCode) => {
456
- if (metaWritten)
457
- return;
458
- metaWritten = true;
459
- const completedAt = now();
460
- store.saveMeta(execId, {
461
- execId,
462
- tool: options.tool,
463
- model: options.model,
464
- mode: options.mode,
465
- prompt: options.prompt.substring(0, 500),
466
- workDir: options.workDir,
467
- startedAt: agentProcess.startedAt,
468
- completedAt,
469
- exitCode,
470
- ...(status === 'cancelled' ? { cancelledAt: completedAt } : {}),
471
- });
472
- publishEvent(status, status, status === 'completed'
473
- ? `Delegate completed: ${execId}`
474
- : status === 'cancelled'
475
- ? `Delegate cancelled: ${execId}`
476
- : `Delegate failed: ${execId}`, {
477
- exitCode,
478
- completedAt,
479
- status,
480
- });
481
- // Write delegate completion notification (for hook fallback)
482
- const sessionId = options.sessionId;
483
- if (sessionId) {
484
- // JSONL file write (for hook fallback)
485
- try {
486
- const notifyPath = join(tmpdir(), `${NOTIFY_PREFIX}${sessionId}.jsonl`);
487
- const entry = JSON.stringify({
488
- execId,
489
- tool: options.tool,
490
- mode: options.mode,
491
- prompt: options.prompt.substring(0, 200),
492
- exitCode,
493
- completedAt,
494
- status,
495
- });
496
- appendFileSync(notifyPath, entry + '\n', 'utf-8');
497
- }
498
- catch (err) {
499
- console.error(`[${execId}] Failed to write JSONL notification: ${err instanceof Error ? err.message : err}`);
500
- }
501
- // MCP channel notification (primary path)
502
- try {
503
- CliAgentRunner.sendChannelNotification(sessionId, execId, options.tool, options.mode, status, exitCode);
504
- }
505
- catch (err) {
506
- console.error(`[${execId}] Failed to send channel notification: ${err instanceof Error ? err.message : err}`);
507
- }
508
- }
509
- };
510
- const processExitHandler = () => {
511
- saveMeta(cancellationRequested ? 'cancelled' : 'completed', cancellationRequested ? 130 : 0);
512
- };
513
- process.on('exit', processExitHandler);
514
- const requestCancellation = async () => {
515
- cancellationRequested = true;
516
- if (cancellationInitiated) {
517
- return;
518
- }
519
- cancellationInitiated = true;
520
- publishEvent('status_update', 'running', `Cancellation requested for ${execId}`, {
521
- cancelRequested: true,
522
- });
523
- try {
524
- await adapter.stop(agentProcess.id);
525
- }
526
- catch {
527
- // Adapter stop failures are surfaced by subsequent process status events.
528
- }
529
- };
530
- const dispatchQueuedFollowup = (finalStatus) => {
531
- let queuedMessage;
532
- try {
533
- queuedMessage = broker.listMessages(execId).find((message) => (message.status === 'queued'
534
- && ((message.delivery === 'inject'
535
- && (finalStatus === 'cancelled' || finalStatus === 'completed' || finalStatus === 'failed'))
536
- || (message.delivery === 'after_complete' && finalStatus === 'completed'))));
537
- }
538
- catch {
539
- return;
540
- }
541
- if (!queuedMessage) {
542
- return;
543
- }
544
- const dispatchedAt = now();
545
- let launched = false;
546
- try {
547
- launched = (this.dependencies.spawnDetachedDelegate ?? spawnQueuedDelegateWorker)(options, execId, queuedMessage.message);
548
- }
549
- catch {
550
- launched = false;
551
- }
552
- if (!launched) {
553
- broker.updateMessage({
554
- jobId: execId,
555
- messageId: queuedMessage.messageId,
556
- status: 'dropped',
557
- dispatchReason: 'missing-entry-script',
558
- now: dispatchedAt,
559
- });
560
- return;
561
- }
562
- broker.updateMessage({
563
- jobId: execId,
564
- messageId: queuedMessage.messageId,
565
- status: 'dispatched',
566
- dispatchReason: finalStatus,
567
- now: dispatchedAt,
568
- });
569
- publishEvent('status_update', finalStatus, `Queued follow-up dispatched via ${queuedMessage.delivery}`, {
570
- delivery: queuedMessage.delivery,
571
- messageId: queuedMessage.messageId,
572
- }, {
573
- cancelRequestedAt: null,
574
- cancelRequestedBy: null,
575
- cancelReason: null,
576
- });
577
- };
578
- const inFlightMessageIds = new Set();
579
- if (!isTerminalStatus(broker.getJob(execId)?.status)) {
580
- cancellationPoller = setInterval(() => {
581
- try {
582
- const job = broker.getJob(execId);
583
- if (job?.metadata?.cancelRequestedAt && !cancellationInitiated) {
584
- void requestCancellation();
585
- }
586
- }
587
- catch {
588
- // Best-effort polling only.
589
- }
590
- // Poll for inject messages and auto-route based on adapter capabilities
591
- try {
592
- const injectMessages = broker.listMessages(execId)
593
- .filter((msg) => msg.status === 'queued' && msg.delivery === 'inject' && !inFlightMessageIds.has(msg.messageId))
594
- .sort((a, b) => a.createdAt.localeCompare(b.createdAt));
595
- for (const msg of injectMessages) {
596
- const polledNow = now();
597
- if (adapter.sendMessage && (adapter.supportsInteractive?.() !== false)) {
598
- // Interactive adapter: inject via stdin without interruption
599
- inFlightMessageIds.add(msg.messageId);
600
- void adapter.sendMessage(agentProcess.id, msg.message).then(() => {
601
- broker.updateMessage({
602
- jobId: execId,
603
- messageId: msg.messageId,
604
- status: 'injected',
605
- dispatchReason: 'inject-streaming',
606
- now: polledNow,
607
- });
608
- }).catch(() => {
609
- broker.updateMessage({
610
- jobId: execId,
611
- messageId: msg.messageId,
612
- status: 'dropped',
613
- dispatchReason: 'send-failed',
614
- now: polledNow,
615
- });
616
- }).finally(() => {
617
- inFlightMessageIds.delete(msg.messageId);
618
- });
619
- }
620
- else {
621
- // Non-interactive adapter: fall back to cancel + resume
622
- if (!cancellationInitiated) {
623
- void requestCancellation();
624
- }
625
- break; // Messages stay queued for dispatchQueuedFollowup after restart
626
- }
627
- }
628
- }
629
- catch {
630
- // Best-effort inject message polling.
631
- }
632
- }, 750);
633
- }
634
- if (cancellationRequested) {
635
- void requestCancellation();
636
- }
637
- return new Promise((resolvePromise) => {
638
- const unsubscribe = adapter.onEntry(agentProcess.id, (entry) => {
639
- // Persist entry to JSONL history before rendering
640
- store.appendEntry(execId, entry);
641
- (this.dependencies.renderEntry ?? renderEntry)(entry);
642
- bridge.forwardEntry(entry);
643
- if (shouldPublishSnapshot(entry)) {
644
- publishEvent('snapshot', 'running', summarizeEntry(entry), {
645
- entryType: entry.type,
646
- });
647
- }
648
- // Interactive mode: when Claude emits token_usage (end of turn) and no
649
- // more inject messages are queued, close stdin to let the process exit.
650
- if (config.interactive && entry.type === 'token_usage' && broker) {
651
- try {
652
- const pending = broker.listMessages(execId)
653
- .filter((m) => m.status === 'queued' && m.delivery === 'inject');
654
- if (pending.length === 0 && !cancellationRequested) {
655
- adapter.endInput?.(agentProcess.id);
656
- }
657
- }
658
- catch { /* best-effort */ }
659
- }
660
- // Resolve when the agent process stops
661
- if (entry.type === 'status_change' && entry.status === 'stopped') {
662
- clearCancellationPoller();
663
- const finalStatus = cancellationRequested ? 'cancelled' : 'completed';
664
- saveMeta(finalStatus, cancellationRequested ? 130 : 0);
665
- dispatchQueuedFollowup(finalStatus);
666
- process.removeListener('exit', processExitHandler);
667
- bridge.forwardStopped(agentProcess.id);
668
- bridge.close();
669
- unsubscribe();
670
- resolvePromise(cancellationRequested ? 130 : 0);
671
- }
672
- // Resolve with error code on error status
673
- if (entry.type === 'status_change' && entry.status === 'error') {
674
- clearCancellationPoller();
675
- const finalStatus = cancellationRequested ? 'cancelled' : 'failed';
676
- saveMeta(finalStatus, cancellationRequested ? 130 : 1);
677
- dispatchQueuedFollowup(finalStatus);
678
- process.removeListener('exit', processExitHandler);
679
- bridge.forwardStopped(agentProcess.id);
680
- bridge.close();
681
- unsubscribe();
682
- resolvePromise(cancellationRequested ? 130 : 1);
683
- }
684
- });
685
- });
686
- }
687
- }
688
- //# sourceMappingURL=cli-agent-runner.js.map