maestro-flow 0.3.1 → 0.3.2

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 (424) hide show
  1. package/.claude/commands/maestro-overlay.md +178 -122
  2. package/.codex/skills/maestro-coordinate/SKILL.md +3 -4
  3. package/dist/src/commands/launcher.js +1 -1
  4. package/dist/src/commands/launcher.js.map +1 -1
  5. package/dist/src/commands/overlay-ui/OverlayList.d.ts +35 -0
  6. package/dist/src/commands/overlay-ui/OverlayList.d.ts.map +1 -0
  7. package/dist/src/commands/overlay-ui/OverlayList.js +143 -0
  8. package/dist/src/commands/overlay-ui/OverlayList.js.map +1 -0
  9. package/dist/src/commands/overlay-ui/index.d.ts +2 -0
  10. package/dist/src/commands/overlay-ui/index.d.ts.map +1 -0
  11. package/dist/src/commands/overlay-ui/index.js +188 -0
  12. package/dist/src/commands/overlay-ui/index.js.map +1 -0
  13. package/dist/src/commands/overlay.d.ts.map +1 -1
  14. package/dist/src/commands/overlay.js +79 -59
  15. package/dist/src/commands/overlay.js.map +1 -1
  16. package/dist/src/core/overlay/applier.d.ts +32 -1
  17. package/dist/src/core/overlay/applier.d.ts.map +1 -1
  18. package/dist/src/core/overlay/applier.js +109 -1
  19. package/dist/src/core/overlay/applier.js.map +1 -1
  20. package/package.json +1 -1
  21. package/dist/agents/cli-agent-runner.d.ts +0 -131
  22. package/dist/agents/cli-agent-runner.d.ts.map +0 -1
  23. package/dist/agents/cli-agent-runner.js +0 -688
  24. package/dist/agents/cli-agent-runner.js.map +0 -1
  25. package/dist/agents/cli-history-store.d.ts +0 -63
  26. package/dist/agents/cli-history-store.d.ts.map +0 -1
  27. package/dist/agents/cli-history-store.js +0 -242
  28. package/dist/agents/cli-history-store.js.map +0 -1
  29. package/dist/agents/dashboard-bridge.d.ts +0 -39
  30. package/dist/agents/dashboard-bridge.d.ts.map +0 -1
  31. package/dist/agents/dashboard-bridge.js +0 -76
  32. package/dist/agents/dashboard-bridge.js.map +0 -1
  33. package/dist/agents/parallel-cli-runner.d.ts +0 -46
  34. package/dist/agents/parallel-cli-runner.d.ts.map +0 -1
  35. package/dist/agents/parallel-cli-runner.js +0 -277
  36. package/dist/agents/parallel-cli-runner.js.map +0 -1
  37. package/dist/agents/terminal-adapter.d.ts +0 -94
  38. package/dist/agents/terminal-adapter.d.ts.map +0 -1
  39. package/dist/agents/terminal-adapter.js +0 -132
  40. package/dist/agents/terminal-adapter.js.map +0 -1
  41. package/dist/agents/terminal-backend.d.ts +0 -53
  42. package/dist/agents/terminal-backend.d.ts.map +0 -1
  43. package/dist/agents/terminal-backend.js +0 -286
  44. package/dist/agents/terminal-backend.js.map +0 -1
  45. package/dist/async/delegate-broker-client.d.ts +0 -22
  46. package/dist/async/delegate-broker-client.d.ts.map +0 -1
  47. package/dist/async/delegate-broker-client.js +0 -47
  48. package/dist/async/delegate-broker-client.js.map +0 -1
  49. package/dist/async/delegate-broker.d.ts +0 -180
  50. package/dist/async/delegate-broker.d.ts.map +0 -1
  51. package/dist/async/delegate-broker.js +0 -1040
  52. package/dist/async/delegate-broker.js.map +0 -1
  53. package/dist/async/delegate-control.d.ts +0 -37
  54. package/dist/async/delegate-control.d.ts.map +0 -1
  55. package/dist/async/delegate-control.js +0 -155
  56. package/dist/async/delegate-control.js.map +0 -1
  57. package/dist/async/index.d.ts +0 -3
  58. package/dist/async/index.d.ts.map +0 -1
  59. package/dist/async/index.js +0 -3
  60. package/dist/async/index.js.map +0 -1
  61. package/dist/cli.d.ts +0 -2
  62. package/dist/cli.d.ts.map +0 -1
  63. package/dist/cli.js +0 -40
  64. package/dist/cli.js.map +0 -1
  65. package/dist/commands/cli.d.ts +0 -3
  66. package/dist/commands/cli.d.ts.map +0 -1
  67. package/dist/commands/cli.js +0 -262
  68. package/dist/commands/cli.js.map +0 -1
  69. package/dist/commands/coordinate.d.ts +0 -3
  70. package/dist/commands/coordinate.d.ts.map +0 -1
  71. package/dist/commands/coordinate.js +0 -275
  72. package/dist/commands/coordinate.js.map +0 -1
  73. package/dist/commands/delegate.d.ts +0 -37
  74. package/dist/commands/delegate.d.ts.map +0 -1
  75. package/dist/commands/delegate.js +0 -470
  76. package/dist/commands/delegate.js.map +0 -1
  77. package/dist/commands/ext.d.ts +0 -3
  78. package/dist/commands/ext.d.ts.map +0 -1
  79. package/dist/commands/ext.js +0 -28
  80. package/dist/commands/ext.js.map +0 -1
  81. package/dist/commands/hooks.d.ts +0 -3
  82. package/dist/commands/hooks.d.ts.map +0 -1
  83. package/dist/commands/hooks.js +0 -126
  84. package/dist/commands/hooks.js.map +0 -1
  85. package/dist/commands/install.d.ts +0 -3
  86. package/dist/commands/install.d.ts.map +0 -1
  87. package/dist/commands/install.js +0 -621
  88. package/dist/commands/install.js.map +0 -1
  89. package/dist/commands/launcher.d.ts +0 -3
  90. package/dist/commands/launcher.d.ts.map +0 -1
  91. package/dist/commands/launcher.js +0 -635
  92. package/dist/commands/launcher.js.map +0 -1
  93. package/dist/commands/link-coordinate.d.ts +0 -3
  94. package/dist/commands/link-coordinate.d.ts.map +0 -1
  95. package/dist/commands/link-coordinate.js +0 -225
  96. package/dist/commands/link-coordinate.js.map +0 -1
  97. package/dist/commands/msg.d.ts +0 -3
  98. package/dist/commands/msg.d.ts.map +0 -1
  99. package/dist/commands/msg.js +0 -110
  100. package/dist/commands/msg.js.map +0 -1
  101. package/dist/commands/overlay.d.ts +0 -3
  102. package/dist/commands/overlay.d.ts.map +0 -1
  103. package/dist/commands/overlay.js +0 -243
  104. package/dist/commands/overlay.js.map +0 -1
  105. package/dist/commands/run.d.ts +0 -3
  106. package/dist/commands/run.d.ts.map +0 -1
  107. package/dist/commands/run.js +0 -15
  108. package/dist/commands/run.js.map +0 -1
  109. package/dist/commands/serve.d.ts +0 -3
  110. package/dist/commands/serve.d.ts.map +0 -1
  111. package/dist/commands/serve.js +0 -16
  112. package/dist/commands/serve.js.map +0 -1
  113. package/dist/commands/spec.d.ts +0 -8
  114. package/dist/commands/spec.d.ts.map +0 -1
  115. package/dist/commands/spec.js +0 -147
  116. package/dist/commands/spec.js.map +0 -1
  117. package/dist/commands/stop.d.ts +0 -3
  118. package/dist/commands/stop.d.ts.map +0 -1
  119. package/dist/commands/stop.js +0 -218
  120. package/dist/commands/stop.js.map +0 -1
  121. package/dist/commands/tool.d.ts +0 -3
  122. package/dist/commands/tool.d.ts.map +0 -1
  123. package/dist/commands/tool.js +0 -29
  124. package/dist/commands/tool.js.map +0 -1
  125. package/dist/commands/uninstall.d.ts +0 -3
  126. package/dist/commands/uninstall.d.ts.map +0 -1
  127. package/dist/commands/uninstall.js +0 -77
  128. package/dist/commands/uninstall.js.map +0 -1
  129. package/dist/commands/view.d.ts +0 -3
  130. package/dist/commands/view.d.ts.map +0 -1
  131. package/dist/commands/view.js +0 -337
  132. package/dist/commands/view.js.map +0 -1
  133. package/dist/config/cli-tools-config.d.ts +0 -26
  134. package/dist/config/cli-tools-config.d.ts.map +0 -1
  135. package/dist/config/cli-tools-config.js +0 -49
  136. package/dist/config/cli-tools-config.js.map +0 -1
  137. package/dist/config/cli-tools-config.test.d.ts +0 -2
  138. package/dist/config/cli-tools-config.test.d.ts.map +0 -1
  139. package/dist/config/cli-tools-config.test.js +0 -59
  140. package/dist/config/cli-tools-config.test.js.map +0 -1
  141. package/dist/config/index.d.ts +0 -4
  142. package/dist/config/index.d.ts.map +0 -1
  143. package/dist/config/index.js +0 -27
  144. package/dist/config/index.js.map +0 -1
  145. package/dist/config/paths.d.ts +0 -15
  146. package/dist/config/paths.d.ts.map +0 -1
  147. package/dist/config/paths.js +0 -27
  148. package/dist/config/paths.js.map +0 -1
  149. package/dist/config/template-discovery.d.ts +0 -32
  150. package/dist/config/template-discovery.d.ts.map +0 -1
  151. package/dist/config/template-discovery.js +0 -128
  152. package/dist/config/template-discovery.js.map +0 -1
  153. package/dist/coordinator/cli-executor.d.ts +0 -22
  154. package/dist/coordinator/cli-executor.d.ts.map +0 -1
  155. package/dist/coordinator/cli-executor.js +0 -49
  156. package/dist/coordinator/cli-executor.js.map +0 -1
  157. package/dist/coordinator/expr-evaluator.d.ts +0 -11
  158. package/dist/coordinator/expr-evaluator.d.ts.map +0 -1
  159. package/dist/coordinator/expr-evaluator.js +0 -351
  160. package/dist/coordinator/expr-evaluator.js.map +0 -1
  161. package/dist/coordinator/graph-loader.d.ts +0 -16
  162. package/dist/coordinator/graph-loader.d.ts.map +0 -1
  163. package/dist/coordinator/graph-loader.js +0 -190
  164. package/dist/coordinator/graph-loader.js.map +0 -1
  165. package/dist/coordinator/graph-types.d.ts +0 -304
  166. package/dist/coordinator/graph-types.d.ts.map +0 -1
  167. package/dist/coordinator/graph-types.js +0 -6
  168. package/dist/coordinator/graph-types.js.map +0 -1
  169. package/dist/coordinator/graph-walker.d.ts +0 -51
  170. package/dist/coordinator/graph-walker.d.ts.map +0 -1
  171. package/dist/coordinator/graph-walker.js +0 -666
  172. package/dist/coordinator/graph-walker.js.map +0 -1
  173. package/dist/coordinator/index.d.ts +0 -13
  174. package/dist/coordinator/index.d.ts.map +0 -1
  175. package/dist/coordinator/index.js +0 -14
  176. package/dist/coordinator/index.js.map +0 -1
  177. package/dist/coordinator/intent-router.d.ts +0 -11
  178. package/dist/coordinator/intent-router.d.ts.map +0 -1
  179. package/dist/coordinator/intent-router.js +0 -65
  180. package/dist/coordinator/intent-router.js.map +0 -1
  181. package/dist/coordinator/link-session.d.ts +0 -29
  182. package/dist/coordinator/link-session.d.ts.map +0 -1
  183. package/dist/coordinator/link-session.js +0 -192
  184. package/dist/coordinator/link-session.js.map +0 -1
  185. package/dist/coordinator/link-walker.d.ts +0 -56
  186. package/dist/coordinator/link-walker.d.ts.map +0 -1
  187. package/dist/coordinator/link-walker.js +0 -548
  188. package/dist/coordinator/link-walker.js.map +0 -1
  189. package/dist/coordinator/output-parser.d.ts +0 -5
  190. package/dist/coordinator/output-parser.d.ts.map +0 -1
  191. package/dist/coordinator/output-parser.js +0 -114
  192. package/dist/coordinator/output-parser.js.map +0 -1
  193. package/dist/coordinator/parallel-executor.d.ts +0 -24
  194. package/dist/coordinator/parallel-executor.d.ts.map +0 -1
  195. package/dist/coordinator/parallel-executor.js +0 -43
  196. package/dist/coordinator/parallel-executor.js.map +0 -1
  197. package/dist/coordinator/prompt-assembler.d.ts +0 -15
  198. package/dist/coordinator/prompt-assembler.d.ts.map +0 -1
  199. package/dist/coordinator/prompt-assembler.js +0 -228
  200. package/dist/coordinator/prompt-assembler.js.map +0 -1
  201. package/dist/coordinator/step-analyzer.d.ts +0 -8
  202. package/dist/coordinator/step-analyzer.d.ts.map +0 -1
  203. package/dist/coordinator/step-analyzer.js +0 -82
  204. package/dist/coordinator/step-analyzer.js.map +0 -1
  205. package/dist/core/extension-loader.d.ts +0 -11
  206. package/dist/core/extension-loader.d.ts.map +0 -1
  207. package/dist/core/extension-loader.js +0 -54
  208. package/dist/core/extension-loader.js.map +0 -1
  209. package/dist/core/manifest.d.ts +0 -24
  210. package/dist/core/manifest.d.ts.map +0 -1
  211. package/dist/core/manifest.js +0 -139
  212. package/dist/core/manifest.js.map +0 -1
  213. package/dist/core/mcp-tool-registry.integration.test.d.ts +0 -2
  214. package/dist/core/mcp-tool-registry.integration.test.d.ts.map +0 -1
  215. package/dist/core/mcp-tool-registry.integration.test.js +0 -220
  216. package/dist/core/mcp-tool-registry.integration.test.js.map +0 -1
  217. package/dist/core/overlay/applier.d.ts +0 -73
  218. package/dist/core/overlay/applier.d.ts.map +0 -1
  219. package/dist/core/overlay/applier.js +0 -248
  220. package/dist/core/overlay/applier.js.map +0 -1
  221. package/dist/core/overlay/loader.d.ts +0 -26
  222. package/dist/core/overlay/loader.d.ts.map +0 -1
  223. package/dist/core/overlay/loader.js +0 -199
  224. package/dist/core/overlay/loader.js.map +0 -1
  225. package/dist/core/overlay/patcher.d.ts +0 -26
  226. package/dist/core/overlay/patcher.d.ts.map +0 -1
  227. package/dist/core/overlay/patcher.js +0 -212
  228. package/dist/core/overlay/patcher.js.map +0 -1
  229. package/dist/core/overlay/section-parser.d.ts +0 -25
  230. package/dist/core/overlay/section-parser.d.ts.map +0 -1
  231. package/dist/core/overlay/section-parser.js +0 -99
  232. package/dist/core/overlay/section-parser.js.map +0 -1
  233. package/dist/core/overlay/types.d.ts +0 -51
  234. package/dist/core/overlay/types.d.ts.map +0 -1
  235. package/dist/core/overlay/types.js +0 -15
  236. package/dist/core/overlay/types.js.map +0 -1
  237. package/dist/core/tool-registry.d.ts +0 -10
  238. package/dist/core/tool-registry.d.ts.map +0 -1
  239. package/dist/core/tool-registry.js +0 -29
  240. package/dist/core/tool-registry.js.map +0 -1
  241. package/dist/core/tool-registry.test.d.ts +0 -2
  242. package/dist/core/tool-registry.test.d.ts.map +0 -1
  243. package/dist/core/tool-registry.test.js +0 -78
  244. package/dist/core/tool-registry.test.js.map +0 -1
  245. package/dist/db/connection-pool.d.ts +0 -21
  246. package/dist/db/connection-pool.d.ts.map +0 -1
  247. package/dist/db/connection-pool.js +0 -53
  248. package/dist/db/connection-pool.js.map +0 -1
  249. package/dist/db/index.d.ts +0 -6
  250. package/dist/db/index.d.ts.map +0 -1
  251. package/dist/db/index.js +0 -9
  252. package/dist/db/index.js.map +0 -1
  253. package/dist/db/schema/core/index.d.ts +0 -5
  254. package/dist/db/schema/core/index.d.ts.map +0 -1
  255. package/dist/db/schema/core/index.js +0 -5
  256. package/dist/db/schema/core/index.js.map +0 -1
  257. package/dist/db/schema/core/organizations.d.ts +0 -244
  258. package/dist/db/schema/core/organizations.d.ts.map +0 -1
  259. package/dist/db/schema/core/organizations.js +0 -44
  260. package/dist/db/schema/core/organizations.js.map +0 -1
  261. package/dist/db/schema/core/permissions.d.ts +0 -158
  262. package/dist/db/schema/core/permissions.d.ts.map +0 -1
  263. package/dist/db/schema/core/permissions.js +0 -62
  264. package/dist/db/schema/core/permissions.js.map +0 -1
  265. package/dist/db/schema/core/refresh-tokens.d.ts +0 -147
  266. package/dist/db/schema/core/refresh-tokens.d.ts.map +0 -1
  267. package/dist/db/schema/core/refresh-tokens.js +0 -22
  268. package/dist/db/schema/core/refresh-tokens.js.map +0 -1
  269. package/dist/db/schema/core/users.d.ts +0 -178
  270. package/dist/db/schema/core/users.d.ts.map +0 -1
  271. package/dist/db/schema/core/users.js +0 -14
  272. package/dist/db/schema/core/users.js.map +0 -1
  273. package/dist/db/tenant-migrator.d.ts +0 -11
  274. package/dist/db/tenant-migrator.d.ts.map +0 -1
  275. package/dist/db/tenant-migrator.js +0 -74
  276. package/dist/db/tenant-migrator.js.map +0 -1
  277. package/dist/db/tenant-schema.d.ts +0 -290
  278. package/dist/db/tenant-schema.d.ts.map +0 -1
  279. package/dist/db/tenant-schema.js +0 -32
  280. package/dist/db/tenant-schema.js.map +0 -1
  281. package/dist/hooks/constants.d.ts +0 -40
  282. package/dist/hooks/constants.d.ts.map +0 -1
  283. package/dist/hooks/constants.js +0 -53
  284. package/dist/hooks/constants.js.map +0 -1
  285. package/dist/hooks/context-monitor.d.ts +0 -33
  286. package/dist/hooks/context-monitor.d.ts.map +0 -1
  287. package/dist/hooks/context-monitor.js +0 -117
  288. package/dist/hooks/context-monitor.js.map +0 -1
  289. package/dist/hooks/delegate-monitor.d.ts +0 -24
  290. package/dist/hooks/delegate-monitor.d.ts.map +0 -1
  291. package/dist/hooks/delegate-monitor.js +0 -76
  292. package/dist/hooks/delegate-monitor.js.map +0 -1
  293. package/dist/hooks/index.d.ts +0 -4
  294. package/dist/hooks/index.d.ts.map +0 -1
  295. package/dist/hooks/index.js +0 -4
  296. package/dist/hooks/index.js.map +0 -1
  297. package/dist/hooks/statusline.d.ts +0 -29
  298. package/dist/hooks/statusline.d.ts.map +0 -1
  299. package/dist/hooks/statusline.js +0 -134
  300. package/dist/hooks/statusline.js.map +0 -1
  301. package/dist/index.d.ts +0 -8
  302. package/dist/index.d.ts.map +0 -1
  303. package/dist/index.js +0 -6
  304. package/dist/index.js.map +0 -1
  305. package/dist/mcp/delegate-channel-relay.d.ts +0 -51
  306. package/dist/mcp/delegate-channel-relay.d.ts.map +0 -1
  307. package/dist/mcp/delegate-channel-relay.js +0 -307
  308. package/dist/mcp/delegate-channel-relay.js.map +0 -1
  309. package/dist/mcp/server.d.ts +0 -6
  310. package/dist/mcp/server.d.ts.map +0 -1
  311. package/dist/mcp/server.js +0 -64
  312. package/dist/mcp/server.js.map +0 -1
  313. package/dist/middleware/auth.d.ts +0 -13
  314. package/dist/middleware/auth.d.ts.map +0 -1
  315. package/dist/middleware/auth.js +0 -27
  316. package/dist/middleware/auth.js.map +0 -1
  317. package/dist/middleware/permission.d.ts +0 -9
  318. package/dist/middleware/permission.d.ts.map +0 -1
  319. package/dist/middleware/permission.js +0 -19
  320. package/dist/middleware/permission.js.map +0 -1
  321. package/dist/middleware/rate-limit.d.ts +0 -9
  322. package/dist/middleware/rate-limit.d.ts.map +0 -1
  323. package/dist/middleware/rate-limit.js +0 -40
  324. package/dist/middleware/rate-limit.js.map +0 -1
  325. package/dist/middleware/tenant.d.ts +0 -17
  326. package/dist/middleware/tenant.d.ts.map +0 -1
  327. package/dist/middleware/tenant.js +0 -57
  328. package/dist/middleware/tenant.js.map +0 -1
  329. package/dist/middleware/validation.d.ts +0 -40
  330. package/dist/middleware/validation.d.ts.map +0 -1
  331. package/dist/middleware/validation.js +0 -51
  332. package/dist/middleware/validation.js.map +0 -1
  333. package/dist/routes/auth.d.ts +0 -3
  334. package/dist/routes/auth.d.ts.map +0 -1
  335. package/dist/routes/auth.js +0 -77
  336. package/dist/routes/auth.js.map +0 -1
  337. package/dist/routes/members.d.ts +0 -4
  338. package/dist/routes/members.d.ts.map +0 -1
  339. package/dist/routes/members.js +0 -114
  340. package/dist/routes/members.js.map +0 -1
  341. package/dist/routes/organizations.d.ts +0 -5
  342. package/dist/routes/organizations.d.ts.map +0 -1
  343. package/dist/routes/organizations.js +0 -97
  344. package/dist/routes/organizations.js.map +0 -1
  345. package/dist/services/auth.service.d.ts +0 -24
  346. package/dist/services/auth.service.d.ts.map +0 -1
  347. package/dist/services/auth.service.js +0 -70
  348. package/dist/services/auth.service.js.map +0 -1
  349. package/dist/services/password.service.d.ts +0 -3
  350. package/dist/services/password.service.d.ts.map +0 -1
  351. package/dist/services/password.service.js +0 -18
  352. package/dist/services/password.service.js.map +0 -1
  353. package/dist/services/rbac.service.d.ts +0 -7
  354. package/dist/services/rbac.service.d.ts.map +0 -1
  355. package/dist/services/rbac.service.js +0 -36
  356. package/dist/services/rbac.service.js.map +0 -1
  357. package/dist/services/token.service.d.ts +0 -18
  358. package/dist/services/token.service.d.ts.map +0 -1
  359. package/dist/services/token.service.js +0 -86
  360. package/dist/services/token.service.js.map +0 -1
  361. package/dist/tools/core-memory.d.ts +0 -12
  362. package/dist/tools/core-memory.d.ts.map +0 -1
  363. package/dist/tools/core-memory.js +0 -276
  364. package/dist/tools/core-memory.js.map +0 -1
  365. package/dist/tools/edit-file.d.ts +0 -25
  366. package/dist/tools/edit-file.d.ts.map +0 -1
  367. package/dist/tools/edit-file.js +0 -462
  368. package/dist/tools/edit-file.js.map +0 -1
  369. package/dist/tools/index.d.ts +0 -8
  370. package/dist/tools/index.d.ts.map +0 -1
  371. package/dist/tools/index.js +0 -536
  372. package/dist/tools/index.js.map +0 -1
  373. package/dist/tools/read-file.d.ts +0 -13
  374. package/dist/tools/read-file.d.ts.map +0 -1
  375. package/dist/tools/read-file.js +0 -91
  376. package/dist/tools/read-file.js.map +0 -1
  377. package/dist/tools/read-many-files.d.ts +0 -15
  378. package/dist/tools/read-many-files.d.ts.map +0 -1
  379. package/dist/tools/read-many-files.js +0 -187
  380. package/dist/tools/read-many-files.js.map +0 -1
  381. package/dist/tools/spec-index-builder.d.ts +0 -58
  382. package/dist/tools/spec-index-builder.d.ts.map +0 -1
  383. package/dist/tools/spec-index-builder.js +0 -211
  384. package/dist/tools/spec-index-builder.js.map +0 -1
  385. package/dist/tools/spec-init.d.ts +0 -17
  386. package/dist/tools/spec-init.d.ts.map +0 -1
  387. package/dist/tools/spec-init.js +0 -215
  388. package/dist/tools/spec-init.js.map +0 -1
  389. package/dist/tools/spec-keyword-extractor.d.ts +0 -24
  390. package/dist/tools/spec-keyword-extractor.d.ts.map +0 -1
  391. package/dist/tools/spec-keyword-extractor.js +0 -84
  392. package/dist/tools/spec-keyword-extractor.js.map +0 -1
  393. package/dist/tools/spec-keyword-extractor.test.d.ts +0 -2
  394. package/dist/tools/spec-keyword-extractor.test.d.ts.map +0 -1
  395. package/dist/tools/spec-keyword-extractor.test.js +0 -99
  396. package/dist/tools/spec-keyword-extractor.test.js.map +0 -1
  397. package/dist/tools/spec-loader.d.ts +0 -15
  398. package/dist/tools/spec-loader.d.ts.map +0 -1
  399. package/dist/tools/spec-loader.js +0 -93
  400. package/dist/tools/spec-loader.js.map +0 -1
  401. package/dist/tools/team-msg.d.ts +0 -52
  402. package/dist/tools/team-msg.d.ts.map +0 -1
  403. package/dist/tools/team-msg.js +0 -449
  404. package/dist/tools/team-msg.js.map +0 -1
  405. package/dist/tools/write-file.d.ts +0 -19
  406. package/dist/tools/write-file.d.ts.map +0 -1
  407. package/dist/tools/write-file.js +0 -165
  408. package/dist/tools/write-file.js.map +0 -1
  409. package/dist/types/index.d.ts +0 -47
  410. package/dist/types/index.d.ts.map +0 -1
  411. package/dist/types/index.js +0 -2
  412. package/dist/types/index.js.map +0 -1
  413. package/dist/types/tool-schema.d.ts +0 -37
  414. package/dist/types/tool-schema.d.ts.map +0 -1
  415. package/dist/types/tool-schema.js +0 -24
  416. package/dist/types/tool-schema.js.map +0 -1
  417. package/dist/utils/file-reader.d.ts +0 -74
  418. package/dist/utils/file-reader.d.ts.map +0 -1
  419. package/dist/utils/file-reader.js +0 -217
  420. package/dist/utils/file-reader.js.map +0 -1
  421. package/dist/utils/path-validator.d.ts +0 -52
  422. package/dist/utils/path-validator.d.ts.map +0 -1
  423. package/dist/utils/path-validator.js +0 -151
  424. 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