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,76 +0,0 @@
1
- /**
2
- * Maestro Delegate Monitor — PostToolUse Hook (fallback)
3
- *
4
- * Checks /tmp/maestro-notify-{session_id}.jsonl for unread delegate
5
- * completion notifications. When found, injects additionalContext to inform
6
- * the model that a delegated task has finished.
7
- *
8
- * Primary path: MCP channel notification (notifications/claude/channel).
9
- * This hook is the fallback when channel is not available.
10
- */
11
- import { readFileSync, existsSync, writeFileSync } from 'node:fs';
12
- import { join } from 'node:path';
13
- import { tmpdir } from 'node:os';
14
- import { NOTIFY_PREFIX } from './constants.js';
15
- function readNotifications(sessionId) {
16
- const path = join(tmpdir(), `${NOTIFY_PREFIX}${sessionId}.jsonl`);
17
- if (!existsSync(path))
18
- return [];
19
- const content = readFileSync(path, 'utf-8').trim();
20
- if (!content)
21
- return [];
22
- return content.split('\n')
23
- .map(line => { try {
24
- return JSON.parse(line);
25
- }
26
- catch {
27
- return null;
28
- } })
29
- .filter((e) => e !== null);
30
- }
31
- function markRead(sessionId, entries) {
32
- const path = join(tmpdir(), `${NOTIFY_PREFIX}${sessionId}.jsonl`);
33
- const marked = entries.map(e => ({ ...e, read: true }));
34
- writeFileSync(path, marked.map(e => JSON.stringify(e)).join('\n') + '\n', 'utf-8');
35
- }
36
- export function evaluateDelegateNotifications(data) {
37
- const sessionId = data.session_id;
38
- if (!sessionId)
39
- return null;
40
- const entries = readNotifications(sessionId);
41
- const unread = entries.filter(e => !e.read);
42
- if (unread.length === 0)
43
- return null;
44
- markRead(sessionId, entries);
45
- const lines = unread.map(e => {
46
- const status = e.exitCode === 0 ? 'done' : `exit:${e.exitCode}`;
47
- const preview = e.prompt.length > 80 ? e.prompt.slice(0, 77) + '...' : e.prompt;
48
- return `[DELEGATE ${status}] ${e.execId} (${e.tool}/${e.mode})\n Prompt: "${preview}"\n Use \`maestro delegate output ${e.execId}\` for full result.`;
49
- });
50
- return {
51
- hookSpecificOutput: {
52
- hookEventName: 'PostToolUse',
53
- additionalContext: lines.join('\n'),
54
- },
55
- };
56
- }
57
- export function runDelegateMonitor() {
58
- let input = '';
59
- const timeout = setTimeout(() => process.exit(0), 3000);
60
- process.stdin.setEncoding('utf8');
61
- process.stdin.on('data', (chunk) => (input += chunk));
62
- process.stdin.on('end', () => {
63
- clearTimeout(timeout);
64
- try {
65
- const data = JSON.parse(input);
66
- const result = evaluateDelegateNotifications(data);
67
- if (result) {
68
- process.stdout.write(JSON.stringify(result));
69
- }
70
- }
71
- catch {
72
- process.exit(0);
73
- }
74
- });
75
- }
76
- //# sourceMappingURL=delegate-monitor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"delegate-monitor.js","sourceRoot":"","sources":["../../src/hooks/delegate-monitor.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- export { runStatusline, formatStatusline } from './statusline.js';
2
- export { runContextMonitor, evaluateContext } from './context-monitor.js';
3
- export { FACES, getFaceLevel, WARNING_THRESHOLD, CRITICAL_THRESHOLD } from './constants.js';
4
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -1,4 +0,0 @@
1
- export { runStatusline, formatStatusline } from './statusline.js';
2
- export { runContextMonitor, evaluateContext } from './context-monitor.js';
3
- export { FACES, getFaceLevel, WARNING_THRESHOLD, CRITICAL_THRESHOLD } from './constants.js';
4
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC1E,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -1,29 +0,0 @@
1
- /**
2
- * Maestro Statusline Hook
3
- *
4
- * Displays: model | phase | task | directory | ASCII-face context bar
5
- * Writes bridge file for context-monitor hook consumption.
6
- *
7
- * Input (stdin JSON from Claude Code):
8
- * { model, workspace, session_id, context_window }
9
- *
10
- * Output (stdout): formatted statusline string
11
- */
12
- interface StatuslineInput {
13
- model?: {
14
- display_name?: string;
15
- };
16
- workspace?: {
17
- current_dir?: string;
18
- };
19
- session_id?: string;
20
- context_window?: {
21
- remaining_percentage?: number;
22
- };
23
- }
24
- /** Main statusline handler — processes input and returns formatted string */
25
- export declare function formatStatusline(data: StatuslineInput): string;
26
- /** Entry point — reads stdin JSON, writes formatted statusline to stdout */
27
- export declare function runStatusline(): void;
28
- export {};
29
- //# sourceMappingURL=statusline.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"statusline.d.ts","sourceRoot":"","sources":["../../src/hooks/statusline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAiBH,UAAU,eAAe;IACvB,KAAK,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAClC,SAAS,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE;QAAE,oBAAoB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACpD;AAsFD,6EAA6E;AAC7E,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CA2B9D;AAED,4EAA4E;AAC5E,wBAAgB,aAAa,IAAI,IAAI,CAepC"}
@@ -1,134 +0,0 @@
1
- /**
2
- * Maestro Statusline Hook
3
- *
4
- * Displays: model | phase | task | directory | ASCII-face context bar
5
- * Writes bridge file for context-monitor hook consumption.
6
- *
7
- * Input (stdin JSON from Claude Code):
8
- * { model, workspace, session_id, context_window }
9
- *
10
- * Output (stdout): formatted statusline string
11
- */
12
- import { readFileSync, readdirSync, statSync, existsSync, writeFileSync } from 'node:fs';
13
- import { join, basename } from 'node:path';
14
- import { homedir, tmpdir } from 'node:os';
15
- import { AUTO_COMPACT_BUFFER_PCT, BRIDGE_PREFIX, FACES, FACE_COLORS, ANSI_RESET, ANSI_DIM, ANSI_BOLD, ANSI_CYAN, getFaceLevel, } from './constants.js';
16
- /** Normalize remaining% to usable context (accounts for autocompact buffer) */
17
- function normalizeUsage(remaining) {
18
- const usableRemaining = Math.max(0, ((remaining - AUTO_COMPACT_BUFFER_PCT) / (100 - AUTO_COMPACT_BUFFER_PCT)) * 100);
19
- return Math.max(0, Math.min(100, Math.round(100 - usableRemaining)));
20
- }
21
- /**
22
- * Build the context bar: face [=====-----] 62%
23
- */
24
- function buildContextBar(usedPct) {
25
- const level = getFaceLevel(usedPct);
26
- const face = FACES[level];
27
- const color = FACE_COLORS[level];
28
- const filled = Math.floor(usedPct / 10);
29
- const bar = '='.repeat(filled) + '-'.repeat(10 - filled);
30
- return ` ${color}${face} [${bar}] ${usedPct}%${ANSI_RESET}`;
31
- }
32
- /** Write bridge file for context-monitor to consume */
33
- function writeBridge(session, remaining, usedPct) {
34
- try {
35
- const bridgePath = join(tmpdir(), `${BRIDGE_PREFIX}${session}.json`);
36
- const data = {
37
- session_id: session,
38
- remaining_percentage: remaining,
39
- used_pct: usedPct,
40
- timestamp: Math.floor(Date.now() / 1000),
41
- };
42
- writeFileSync(bridgePath, JSON.stringify(data));
43
- }
44
- catch {
45
- // Silent fail — bridge is best-effort
46
- }
47
- }
48
- /** Read current in-progress task from Claude Code todos */
49
- function readCurrentTask(session) {
50
- const claudeDir = process.env.CLAUDE_CONFIG_DIR || join(homedir(), '.claude');
51
- const todosDir = join(claudeDir, 'todos');
52
- if (!existsSync(todosDir))
53
- return '';
54
- try {
55
- const files = readdirSync(todosDir)
56
- .filter((f) => f.startsWith(session) && f.includes('-agent-') && f.endsWith('.json'))
57
- .map((f) => ({ name: f, mtime: statSync(join(todosDir, f)).mtime }))
58
- .sort((a, b) => b.mtime.getTime() - a.mtime.getTime());
59
- if (files.length > 0) {
60
- const todos = JSON.parse(readFileSync(join(todosDir, files[0].name), 'utf8'));
61
- const inProgress = todos.find((t) => t.status === 'in_progress');
62
- if (inProgress)
63
- return inProgress.activeForm || '';
64
- }
65
- }
66
- catch {
67
- // Silently fail
68
- }
69
- return '';
70
- }
71
- /** Read current phase from .workflow/state.json */
72
- function readPhase(dir) {
73
- const statePath = join(dir, '.workflow', 'state.json');
74
- if (!existsSync(statePath))
75
- return '';
76
- try {
77
- const state = JSON.parse(readFileSync(statePath, 'utf8'));
78
- if (state.current_phase) {
79
- let label = `P${state.current_phase}`;
80
- if (state.current_step)
81
- label += `.${state.current_step}`;
82
- return label;
83
- }
84
- }
85
- catch {
86
- // Silently fail
87
- }
88
- return '';
89
- }
90
- /** Main statusline handler — processes input and returns formatted string */
91
- export function formatStatusline(data) {
92
- const model = data.model?.display_name || 'Claude';
93
- const dir = data.workspace?.current_dir || process.cwd();
94
- const session = data.session_id || '';
95
- const remaining = data.context_window?.remaining_percentage;
96
- // Context bar + bridge write
97
- let ctx = '';
98
- if (remaining != null) {
99
- const usedPct = normalizeUsage(remaining);
100
- if (session)
101
- writeBridge(session, remaining, usedPct);
102
- ctx = buildContextBar(usedPct);
103
- }
104
- // Current task
105
- const task = session ? readCurrentTask(session) : '';
106
- // Phase from .workflow/
107
- const phase = readPhase(dir);
108
- // Assemble segments
109
- const parts = [`${ANSI_DIM}${model}${ANSI_RESET}`];
110
- if (phase)
111
- parts.push(`${ANSI_CYAN}${phase}${ANSI_RESET}`);
112
- if (task)
113
- parts.push(`${ANSI_BOLD}${task}${ANSI_RESET}`);
114
- parts.push(`${ANSI_DIM}${basename(dir)}${ANSI_RESET}`);
115
- return parts.join(' | ') + ctx;
116
- }
117
- /** Entry point — reads stdin JSON, writes formatted statusline to stdout */
118
- export function runStatusline() {
119
- let input = '';
120
- const timeout = setTimeout(() => process.exit(0), 3000);
121
- process.stdin.setEncoding('utf8');
122
- process.stdin.on('data', (chunk) => (input += chunk));
123
- process.stdin.on('end', () => {
124
- clearTimeout(timeout);
125
- try {
126
- const data = JSON.parse(input);
127
- process.stdout.write(formatStatusline(data));
128
- }
129
- catch {
130
- // Silent fail
131
- }
132
- });
133
- }
134
- //# sourceMappingURL=statusline.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"statusline.js","sourceRoot":"","sources":["../../src/hooks/statusline.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts DELETED
@@ -1,8 +0,0 @@
1
- export { ToolRegistry } from './core/tool-registry.js';
2
- export { ExtensionLoader } from './core/extension-loader.js';
3
- export { loadConfig, saveConfig } from './config/index.js';
4
- export { paths } from './config/paths.js';
5
- export { createManifest, addFile, addDir, saveManifest, findManifest, getAllManifests, deleteManifest, cleanManifestFiles, } from './core/manifest.js';
6
- export type { Manifest, ManifestEntry } from './core/manifest.js';
7
- export type * from './types/index.js';
8
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EACL,cAAc,EACd,OAAO,EACP,MAAM,EACN,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,cAAc,EACd,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAClE,mBAAmB,kBAAkB,CAAC"}
package/dist/index.js DELETED
@@ -1,6 +0,0 @@
1
- export { ToolRegistry } from './core/tool-registry.js';
2
- export { ExtensionLoader } from './core/extension-loader.js';
3
- export { loadConfig, saveConfig } from './config/index.js';
4
- export { paths } from './config/paths.js';
5
- export { createManifest, addFile, addDir, saveManifest, findManifest, getAllManifests, deleteManifest, cleanManifestFiles, } from './core/manifest.js';
6
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EACL,cAAc,EACd,OAAO,EACP,MAAM,EACN,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,cAAc,EACd,kBAAkB,GACnB,MAAM,oBAAoB,CAAC"}
@@ -1,51 +0,0 @@
1
- import { type DelegateBrokerApi } from '../async/index.js';
2
- interface ChannelNotification {
3
- method: 'notifications/claude/channel';
4
- params: {
5
- content: string;
6
- meta: Record<string, string>;
7
- };
8
- }
9
- export interface ChannelNotificationServer {
10
- notification(message: ChannelNotification): Promise<unknown>;
11
- }
12
- export interface DelegateChannelRelayOptions {
13
- server: ChannelNotificationServer;
14
- broker?: DelegateBrokerApi;
15
- sessionId?: string;
16
- channelId?: string;
17
- pollIntervalMs?: number;
18
- pollLimit?: number;
19
- statusThrottleMs?: number;
20
- snapshotThrottleMs?: number;
21
- now?: () => string;
22
- }
23
- export declare class DelegateChannelRelay {
24
- private readonly server;
25
- private readonly broker;
26
- private readonly sessionId;
27
- private readonly channelId;
28
- private readonly pollIntervalMs;
29
- private readonly pollLimit;
30
- private readonly statusThrottleMs;
31
- private readonly snapshotThrottleMs;
32
- private readonly now;
33
- private readonly jobState;
34
- private pollTimer;
35
- private running;
36
- private polling;
37
- private consecutiveFailures;
38
- constructor(options: DelegateChannelRelayOptions);
39
- get id(): string;
40
- private get sessionFilePath();
41
- private writeSessionFile;
42
- private cleanupSessionFile;
43
- start(): Promise<void>;
44
- stop(): void;
45
- pollOnce(): Promise<void>;
46
- private drainExistingEvents;
47
- private handleEvent;
48
- private shouldEmit;
49
- }
50
- export {};
51
- //# sourceMappingURL=delegate-channel-relay.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"delegate-channel-relay.d.ts","sourceRoot":"","sources":["../../src/mcp/delegate-channel-relay.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,KAAK,iBAAiB,EAIvB,MAAM,mBAAmB,CAAC;AAE3B,UAAU,mBAAmB;IAC3B,MAAM,EAAE,8BAA8B,CAAC;IACvC,MAAM,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC9B,CAAC;CACH;AAED,MAAM,WAAW,yBAAyB;IACxC,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9D;AAED,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,yBAAyB,CAAC;IAClC,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AA2HD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4B;IACnD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoC;IAE7D,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,mBAAmB,CAAK;gBAEpB,OAAO,EAAE,2BAA2B;IAYhD,IAAI,EAAE,IAAI,MAAM,CAEf;IAED,OAAO,KAAK,eAAe,GAG1B;IAED,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,kBAAkB;IAMpB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAkC5B,IAAI,IAAI,IAAI;IASN,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAiD/B,OAAO,CAAC,mBAAmB;YAoBb,WAAW;IAiCzB,OAAO,CAAC,UAAU;CAuCnB"}
@@ -1,307 +0,0 @@
1
- import { randomUUID } from 'node:crypto';
2
- import { writeFileSync, unlinkSync, mkdirSync } from 'node:fs';
3
- import { dirname, join } from 'node:path';
4
- import { homedir } from 'node:os';
5
- import { DelegateBrokerClient, } from '../async/index.js';
6
- const DEFAULT_POLL_INTERVAL_MS = 1_500;
7
- const DEFAULT_POLL_LIMIT = 25;
8
- const DEFAULT_STATUS_THROTTLE_MS = 10_000;
9
- const DEFAULT_SNAPSHOT_THROTTLE_MS = 15_000;
10
- const MAX_CHANNEL_TEXT_LENGTH = 240;
11
- const SUPPORTED_EVENT_TYPES = new Set([
12
- 'queued',
13
- 'snapshot',
14
- 'status_update',
15
- 'completed',
16
- 'failed',
17
- 'cancelled',
18
- 'cancel_requested',
19
- ]);
20
- function asOneLine(value) {
21
- return value.replace(/\s+/g, ' ').trim();
22
- }
23
- function truncate(value, max) {
24
- if (value.length <= max) {
25
- return value;
26
- }
27
- return `${value.slice(0, max - 3)}...`;
28
- }
29
- function readString(value) {
30
- return typeof value === 'string' ? value : undefined;
31
- }
32
- function readNumber(value) {
33
- return typeof value === 'number' ? value : undefined;
34
- }
35
- function formatProgress(snapshot) {
36
- if (!snapshot) {
37
- return undefined;
38
- }
39
- const phase = readString(snapshot.phase);
40
- const progress = readNumber(snapshot.progress);
41
- const parts = [
42
- phase ? `phase=${phase}` : undefined,
43
- progress !== undefined ? `progress=${progress}%` : undefined,
44
- ].filter((part) => Boolean(part));
45
- return parts.length > 0 ? parts.join(' ') : undefined;
46
- }
47
- function extractSummary(event) {
48
- const payload = event.payload;
49
- const directSummary = readString(payload.summary)
50
- ?? readString(payload.message)
51
- ?? readString(payload.status)
52
- ?? readString(payload.preview);
53
- if (directSummary) {
54
- return asOneLine(directSummary);
55
- }
56
- return formatProgress(event.snapshot);
57
- }
58
- function buildStatusLabel(event) {
59
- if (event.type === 'completed') {
60
- return 'DONE';
61
- }
62
- if (event.type === 'failed') {
63
- return 'FAILED';
64
- }
65
- if (event.type === 'cancelled') {
66
- return 'CANCELLED';
67
- }
68
- if (event.type === 'cancel_requested') {
69
- return 'CANCELLING';
70
- }
71
- if (event.type === 'queued') {
72
- return 'QUEUED';
73
- }
74
- return String(event.status ?? 'RUNNING').toUpperCase();
75
- }
76
- function buildSignature(event) {
77
- return JSON.stringify({
78
- type: event.type,
79
- status: event.status ?? null,
80
- summary: extractSummary(event) ?? null,
81
- snapshot: event.snapshot ?? null,
82
- });
83
- }
84
- function buildNotificationContent(event) {
85
- const status = buildStatusLabel(event);
86
- const summary = extractSummary(event);
87
- const toolHint = event.type === 'completed'
88
- ? 'Use `delegate_output` for the full result, or `delegate_status` / `delegate_tail` for details.'
89
- : event.type === 'cancel_requested'
90
- ? 'Use `delegate_status` or `delegate_tail` to follow cancellation progress.'
91
- : 'Use `delegate_status` or `delegate_tail` for the latest state.';
92
- const headlineParts = [`[DELEGATE ${status}]`, event.jobId];
93
- if (summary) {
94
- headlineParts.push(truncate(summary, 90));
95
- }
96
- return truncate(`${headlineParts.join(' ')}\n${toolHint}`, MAX_CHANNEL_TEXT_LENGTH);
97
- }
98
- export class DelegateChannelRelay {
99
- server;
100
- broker;
101
- sessionId;
102
- channelId;
103
- pollIntervalMs;
104
- pollLimit;
105
- statusThrottleMs;
106
- snapshotThrottleMs;
107
- now;
108
- jobState = new Map();
109
- pollTimer = null;
110
- running = false;
111
- polling = false;
112
- consecutiveFailures = 0;
113
- constructor(options) {
114
- this.server = options.server;
115
- this.broker = options.broker ?? new DelegateBrokerClient();
116
- this.sessionId = options.sessionId ?? `maestro-mcp-relay-${randomUUID()}`;
117
- this.channelId = options.channelId ?? 'claude/channel';
118
- this.pollIntervalMs = options.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;
119
- this.pollLimit = options.pollLimit ?? DEFAULT_POLL_LIMIT;
120
- this.statusThrottleMs = options.statusThrottleMs ?? DEFAULT_STATUS_THROTTLE_MS;
121
- this.snapshotThrottleMs = options.snapshotThrottleMs ?? DEFAULT_SNAPSHOT_THROTTLE_MS;
122
- this.now = options.now ?? (() => new Date().toISOString());
123
- }
124
- get id() {
125
- return this.sessionId;
126
- }
127
- get sessionFilePath() {
128
- const maestroHome = process.env.MAESTRO_HOME ?? join(homedir(), '.maestro');
129
- return join(maestroHome, 'data', 'async', `relay-session-${process.pid}.id`);
130
- }
131
- writeSessionFile() {
132
- try {
133
- mkdirSync(dirname(this.sessionFilePath), { recursive: true });
134
- writeFileSync(this.sessionFilePath, JSON.stringify({
135
- sessionId: this.sessionId,
136
- pid: process.pid,
137
- startedAt: this.now(),
138
- }), 'utf-8');
139
- }
140
- catch {
141
- // Best-effort — file write failure shouldn't block relay
142
- }
143
- }
144
- cleanupSessionFile() {
145
- try {
146
- unlinkSync(this.sessionFilePath);
147
- }
148
- catch { /* file may not exist */ }
149
- }
150
- async start() {
151
- if (this.running) {
152
- return;
153
- }
154
- this.running = true;
155
- // Purge expired events/jobs/sessions before registering, so stale history
156
- // from previous sessions doesn't replay into the new channel.
157
- this.broker.purgeExpiredEvents({ now: this.now() });
158
- this.broker.registerSession({
159
- sessionId: this.sessionId,
160
- channelId: this.channelId,
161
- metadata: { source: 'maestro-mcp-relay' },
162
- now: this.now(),
163
- });
164
- this.writeSessionFile();
165
- // Drain all pre-existing events so only events published after startup
166
- // are emitted to the channel. Prevents historical replay on new sessions.
167
- this.drainExistingEvents();
168
- await this.pollOnce();
169
- this.pollTimer = setInterval(() => {
170
- this.pollOnce().catch(() => {
171
- // Best-effort relay; the next interval will retry.
172
- });
173
- }, this.pollIntervalMs);
174
- this.pollTimer.unref?.();
175
- }
176
- stop() {
177
- this.cleanupSessionFile();
178
- this.running = false;
179
- if (this.pollTimer) {
180
- clearInterval(this.pollTimer);
181
- this.pollTimer = null;
182
- }
183
- }
184
- async pollOnce() {
185
- if (!this.running || this.polling) {
186
- return;
187
- }
188
- this.polling = true;
189
- const ackIds = [];
190
- try {
191
- this.broker.heartbeat({
192
- sessionId: this.sessionId,
193
- now: this.now(),
194
- });
195
- const events = this.broker.pollEvents({
196
- sessionId: this.sessionId,
197
- limit: this.pollLimit,
198
- now: this.now(),
199
- });
200
- for (const event of events) {
201
- const shouldAck = await this.handleEvent(event);
202
- if (!shouldAck) {
203
- break;
204
- }
205
- ackIds.push(event.eventId);
206
- }
207
- if (ackIds.length > 0) {
208
- this.broker.ack({
209
- sessionId: this.sessionId,
210
- eventIds: ackIds,
211
- now: this.now(),
212
- });
213
- }
214
- this.consecutiveFailures = 0;
215
- }
216
- catch (error) {
217
- this.consecutiveFailures += 1;
218
- if (this.consecutiveFailures >= 3) {
219
- console.warn(`[DelegateChannelRelay] Stopping poll after ${this.consecutiveFailures} consecutive failures`);
220
- this.stop();
221
- }
222
- throw error;
223
- }
224
- finally {
225
- this.polling = false;
226
- }
227
- }
228
- drainExistingEvents() {
229
- for (;;) {
230
- const events = this.broker.pollEvents({
231
- sessionId: this.sessionId,
232
- limit: this.pollLimit,
233
- now: this.now(),
234
- });
235
- if (events.length === 0) {
236
- break;
237
- }
238
- this.broker.ack({
239
- sessionId: this.sessionId,
240
- eventIds: events.map((e) => e.eventId),
241
- now: this.now(),
242
- });
243
- }
244
- }
245
- async handleEvent(event) {
246
- if (!SUPPORTED_EVENT_TYPES.has(event.type)) {
247
- return true;
248
- }
249
- // Session isolation: only emit events from jobs originated by this relay session.
250
- // Jobs without sessionId in metadata are still emitted (backward compatibility).
251
- const originSession = event.metadata?.sessionId;
252
- if (typeof originSession === 'string' && originSession !== this.sessionId) {
253
- return true; // Belongs to another session — ack but don't push
254
- }
255
- if (!this.shouldEmit(event)) {
256
- return true;
257
- }
258
- await this.server.notification({
259
- method: 'notifications/claude/channel',
260
- params: {
261
- content: buildNotificationContent(event),
262
- meta: {
263
- job_id: event.jobId,
264
- exec_id: event.jobId,
265
- event_id: String(event.eventId),
266
- event_type: event.type,
267
- status: String(event.status ?? ''),
268
- },
269
- },
270
- });
271
- return true;
272
- }
273
- shouldEmit(event) {
274
- if (event.type === 'completed' || event.type === 'failed' || event.type === 'cancelled') {
275
- return true;
276
- }
277
- const currentTime = Date.now();
278
- const state = this.jobState.get(event.jobId) ?? {};
279
- const signature = buildSignature(event);
280
- if (event.type === 'status_update') {
281
- if (state.lastStatusKey === signature) {
282
- return false;
283
- }
284
- if (state.lastStatusAt && currentTime - state.lastStatusAt < this.statusThrottleMs) {
285
- return false;
286
- }
287
- state.lastStatusKey = signature;
288
- state.lastStatusAt = currentTime;
289
- this.jobState.set(event.jobId, state);
290
- return true;
291
- }
292
- if (event.type === 'snapshot') {
293
- if (state.lastSnapshotKey === signature) {
294
- return false;
295
- }
296
- if (state.lastSnapshotAt && currentTime - state.lastSnapshotAt < this.snapshotThrottleMs) {
297
- return false;
298
- }
299
- state.lastSnapshotKey = signature;
300
- state.lastSnapshotAt = currentTime;
301
- this.jobState.set(event.jobId, state);
302
- return true;
303
- }
304
- return true;
305
- }
306
- }
307
- //# sourceMappingURL=delegate-channel-relay.js.map