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