macro-agent 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1339) hide show
  1. package/.gitattributes +3 -0
  2. package/.opentasks/config.json +9 -0
  3. package/.sudocode/issues.jsonl +28 -0
  4. package/.sudocode/specs.jsonl +4 -0
  5. package/CLAUDE.md +433 -201
  6. package/README.md +129 -371
  7. package/dist/acp/index.d.ts +9 -51
  8. package/dist/acp/index.d.ts.map +1 -1
  9. package/dist/acp/index.js +5 -46
  10. package/dist/acp/index.js.map +1 -1
  11. package/dist/acp/macro-agent.d.ts +28 -255
  12. package/dist/acp/macro-agent.d.ts.map +1 -1
  13. package/dist/acp/macro-agent.js +593 -1231
  14. package/dist/acp/macro-agent.js.map +1 -1
  15. package/dist/acp/map-bridge.d.ts +62 -0
  16. package/dist/acp/map-bridge.d.ts.map +1 -0
  17. package/dist/acp/map-bridge.js +123 -0
  18. package/dist/acp/map-bridge.js.map +1 -0
  19. package/dist/acp/session-mapper.d.ts +29 -126
  20. package/dist/acp/session-mapper.d.ts.map +1 -1
  21. package/dist/acp/session-mapper.js +36 -234
  22. package/dist/acp/session-mapper.js.map +1 -1
  23. package/dist/acp/types.d.ts +24 -535
  24. package/dist/acp/types.d.ts.map +1 -1
  25. package/dist/acp/types.js +7 -7
  26. package/dist/acp/types.js.map +1 -1
  27. package/dist/acp/websocket-server.d.ts +16 -136
  28. package/dist/acp/websocket-server.d.ts.map +1 -1
  29. package/dist/acp/websocket-server.js +131 -371
  30. package/dist/acp/websocket-server.js.map +1 -1
  31. package/dist/adapters/federation.d.ts +76 -0
  32. package/dist/adapters/federation.d.ts.map +1 -0
  33. package/dist/adapters/federation.js +120 -0
  34. package/dist/adapters/federation.js.map +1 -0
  35. package/dist/adapters/inbox-adapter.d.ts +72 -0
  36. package/dist/adapters/inbox-adapter.d.ts.map +1 -0
  37. package/dist/adapters/inbox-adapter.js +196 -0
  38. package/dist/adapters/inbox-adapter.js.map +1 -0
  39. package/dist/adapters/inbox-client-adapter.d.ts +40 -0
  40. package/dist/adapters/inbox-client-adapter.d.ts.map +1 -0
  41. package/dist/adapters/inbox-client-adapter.js +135 -0
  42. package/dist/adapters/inbox-client-adapter.js.map +1 -0
  43. package/dist/adapters/index.d.ts +11 -0
  44. package/dist/adapters/index.d.ts.map +1 -0
  45. package/dist/adapters/index.js +10 -0
  46. package/dist/adapters/index.js.map +1 -0
  47. package/dist/adapters/opentasks-daemon.d.ts +32 -0
  48. package/dist/adapters/opentasks-daemon.d.ts.map +1 -0
  49. package/dist/adapters/opentasks-daemon.js +190 -0
  50. package/dist/adapters/opentasks-daemon.js.map +1 -0
  51. package/dist/adapters/tasks-adapter.d.ts +49 -0
  52. package/dist/adapters/tasks-adapter.d.ts.map +1 -0
  53. package/dist/adapters/tasks-adapter.js +209 -0
  54. package/dist/adapters/tasks-adapter.js.map +1 -0
  55. package/dist/adapters/types.d.ts +198 -0
  56. package/dist/adapters/types.d.ts.map +1 -0
  57. package/dist/adapters/types.js +13 -0
  58. package/dist/adapters/types.js.map +1 -0
  59. package/dist/agent/agent-manager-v2.d.ts +38 -0
  60. package/dist/agent/agent-manager-v2.d.ts.map +1 -0
  61. package/dist/agent/agent-manager-v2.js +1097 -0
  62. package/dist/agent/agent-manager-v2.js.map +1 -0
  63. package/dist/agent/agent-manager.d.ts +52 -42
  64. package/dist/agent/agent-manager.d.ts.map +1 -1
  65. package/dist/agent/agent-manager.js +11 -1255
  66. package/dist/agent/agent-manager.js.map +1 -1
  67. package/dist/agent/agent-store.d.ts +89 -0
  68. package/dist/agent/agent-store.d.ts.map +1 -0
  69. package/dist/agent/agent-store.js +279 -0
  70. package/dist/agent/agent-store.js.map +1 -0
  71. package/dist/agent/types.d.ts +7 -0
  72. package/dist/agent/types.d.ts.map +1 -1
  73. package/dist/agent/types.js.map +1 -1
  74. package/dist/api/index.d.ts +5 -3
  75. package/dist/api/index.d.ts.map +1 -1
  76. package/dist/api/index.js +4 -3
  77. package/dist/api/index.js.map +1 -1
  78. package/dist/api/server.d.ts +6 -123
  79. package/dist/api/server.d.ts.map +1 -1
  80. package/dist/api/server.js +247 -1489
  81. package/dist/api/server.js.map +1 -1
  82. package/dist/api/types.d.ts +20 -248
  83. package/dist/api/types.d.ts.map +1 -1
  84. package/dist/api/types.js +3 -1
  85. package/dist/api/types.js.map +1 -1
  86. package/dist/boot-v2.d.ts +165 -0
  87. package/dist/boot-v2.d.ts.map +1 -0
  88. package/dist/boot-v2.js +315 -0
  89. package/dist/boot-v2.js.map +1 -0
  90. package/dist/cli/acp.d.ts +6 -28
  91. package/dist/cli/acp.d.ts.map +1 -1
  92. package/dist/cli/acp.js +39 -373
  93. package/dist/cli/acp.js.map +1 -1
  94. package/dist/cli/index.d.ts +1 -2
  95. package/dist/cli/index.d.ts.map +1 -1
  96. package/dist/cli/index.js +65 -449
  97. package/dist/cli/index.js.map +1 -1
  98. package/dist/cli/mcp.d.ts +18 -8
  99. package/dist/cli/mcp.d.ts.map +1 -1
  100. package/dist/cli/mcp.js +231 -282
  101. package/dist/cli/mcp.js.map +1 -1
  102. package/dist/cognitive/analyst-role.d.ts +13 -0
  103. package/dist/cognitive/analyst-role.d.ts.map +1 -0
  104. package/dist/cognitive/analyst-role.js +48 -0
  105. package/dist/cognitive/analyst-role.js.map +1 -0
  106. package/dist/cognitive/index.d.ts +18 -0
  107. package/dist/cognitive/index.d.ts.map +1 -0
  108. package/dist/cognitive/index.js +21 -0
  109. package/dist/cognitive/index.js.map +1 -0
  110. package/dist/cognitive/macro-agent-backend.d.ts +40 -0
  111. package/dist/cognitive/macro-agent-backend.d.ts.map +1 -0
  112. package/dist/cognitive/macro-agent-backend.js +290 -0
  113. package/dist/cognitive/macro-agent-backend.js.map +1 -0
  114. package/dist/cognitive/session-converter.d.ts +30 -0
  115. package/dist/cognitive/session-converter.d.ts.map +1 -0
  116. package/dist/cognitive/session-converter.js +119 -0
  117. package/dist/cognitive/session-converter.js.map +1 -0
  118. package/dist/cognitive/types.d.ts +129 -0
  119. package/dist/cognitive/types.d.ts.map +1 -0
  120. package/dist/cognitive/types.js +12 -0
  121. package/dist/cognitive/types.js.map +1 -0
  122. package/dist/cognitive/workspace-handler.d.ts +46 -0
  123. package/dist/cognitive/workspace-handler.d.ts.map +1 -0
  124. package/dist/cognitive/workspace-handler.js +135 -0
  125. package/dist/cognitive/workspace-handler.js.map +1 -0
  126. package/dist/config/project-config.d.ts +13 -2
  127. package/dist/config/project-config.d.ts.map +1 -1
  128. package/dist/config/project-config.js +12 -2
  129. package/dist/config/project-config.js.map +1 -1
  130. package/dist/control/control-client.d.ts +63 -0
  131. package/dist/control/control-client.d.ts.map +1 -0
  132. package/dist/control/control-client.js +276 -0
  133. package/dist/control/control-client.js.map +1 -0
  134. package/dist/control/control-server.d.ts +46 -0
  135. package/dist/control/control-server.d.ts.map +1 -0
  136. package/dist/control/control-server.js +237 -0
  137. package/dist/control/control-server.js.map +1 -0
  138. package/dist/control/index.d.ts +9 -0
  139. package/dist/control/index.d.ts.map +1 -0
  140. package/dist/control/index.js +8 -0
  141. package/dist/control/index.js.map +1 -0
  142. package/dist/control/types.d.ts +64 -0
  143. package/dist/control/types.d.ts.map +1 -0
  144. package/dist/control/types.js +10 -0
  145. package/dist/control/types.js.map +1 -0
  146. package/dist/index.d.ts +15 -16
  147. package/dist/index.d.ts.map +1 -1
  148. package/dist/index.js +17 -34
  149. package/dist/index.js.map +1 -1
  150. package/dist/integrations/context-builder.d.ts +49 -0
  151. package/dist/integrations/context-builder.d.ts.map +1 -0
  152. package/dist/integrations/context-builder.js +160 -0
  153. package/dist/integrations/context-builder.js.map +1 -0
  154. package/dist/integrations/sessionlog.d.ts +58 -0
  155. package/dist/integrations/sessionlog.d.ts.map +1 -0
  156. package/dist/integrations/sessionlog.js +152 -0
  157. package/dist/integrations/sessionlog.js.map +1 -0
  158. package/dist/integrations/skilltree.d.ts +53 -0
  159. package/dist/integrations/skilltree.d.ts.map +1 -0
  160. package/dist/integrations/skilltree.js +140 -0
  161. package/dist/integrations/skilltree.js.map +1 -0
  162. package/dist/lifecycle/cleanup.d.ts +5 -14
  163. package/dist/lifecycle/cleanup.d.ts.map +1 -1
  164. package/dist/lifecycle/cleanup.js +4 -34
  165. package/dist/lifecycle/cleanup.js.map +1 -1
  166. package/dist/lifecycle/handlers-v2.d.ts +33 -0
  167. package/dist/lifecycle/handlers-v2.d.ts.map +1 -0
  168. package/dist/lifecycle/handlers-v2.js +319 -0
  169. package/dist/lifecycle/handlers-v2.js.map +1 -0
  170. package/dist/lifecycle/index.d.ts +3 -5
  171. package/dist/lifecycle/index.d.ts.map +1 -1
  172. package/dist/lifecycle/index.js +3 -12
  173. package/dist/lifecycle/index.js.map +1 -1
  174. package/dist/lifecycle/types.d.ts +2 -0
  175. package/dist/lifecycle/types.d.ts.map +1 -1
  176. package/dist/lifecycle/types.js.map +1 -1
  177. package/dist/map/acp-bridge.d.ts +39 -0
  178. package/dist/map/acp-bridge.d.ts.map +1 -0
  179. package/dist/map/acp-bridge.js +180 -0
  180. package/dist/map/acp-bridge.js.map +1 -0
  181. package/dist/map/cc-swarm-hooks.d.ts +36 -0
  182. package/dist/map/cc-swarm-hooks.d.ts.map +1 -0
  183. package/dist/map/cc-swarm-hooks.js +218 -0
  184. package/dist/map/cc-swarm-hooks.js.map +1 -0
  185. package/dist/map/coordination-handler.d.ts +36 -0
  186. package/dist/map/coordination-handler.d.ts.map +1 -0
  187. package/dist/map/coordination-handler.js +166 -0
  188. package/dist/map/coordination-handler.js.map +1 -0
  189. package/dist/map/index.d.ts +5 -10
  190. package/dist/map/index.d.ts.map +1 -1
  191. package/dist/map/index.js +4 -13
  192. package/dist/map/index.js.map +1 -1
  193. package/dist/map/lifecycle-bridge.d.ts +34 -0
  194. package/dist/map/lifecycle-bridge.d.ts.map +1 -0
  195. package/dist/map/lifecycle-bridge.js +96 -0
  196. package/dist/map/lifecycle-bridge.js.map +1 -0
  197. package/dist/map/server.d.ts +38 -0
  198. package/dist/map/server.d.ts.map +1 -0
  199. package/dist/map/server.js +461 -0
  200. package/dist/map/server.js.map +1 -0
  201. package/dist/map/sidecar.d.ts +24 -0
  202. package/dist/map/sidecar.d.ts.map +1 -0
  203. package/dist/map/sidecar.js +263 -0
  204. package/dist/map/sidecar.js.map +1 -0
  205. package/dist/map/task-bridge.d.ts +22 -0
  206. package/dist/map/task-bridge.d.ts.map +1 -0
  207. package/dist/map/task-bridge.js +67 -0
  208. package/dist/map/task-bridge.js.map +1 -0
  209. package/dist/map/trajectory-reporter.d.ts +24 -0
  210. package/dist/map/trajectory-reporter.d.ts.map +1 -0
  211. package/dist/map/trajectory-reporter.js +86 -0
  212. package/dist/map/trajectory-reporter.js.map +1 -0
  213. package/dist/map/types.d.ts +162 -226
  214. package/dist/map/types.d.ts.map +1 -1
  215. package/dist/map/types.js +6 -165
  216. package/dist/map/types.js.map +1 -1
  217. package/dist/mcp/index.d.ts +2 -2
  218. package/dist/mcp/index.d.ts.map +1 -1
  219. package/dist/mcp/index.js +2 -2
  220. package/dist/mcp/index.js.map +1 -1
  221. package/dist/mcp/mcp-server-v2.d.ts +44 -0
  222. package/dist/mcp/mcp-server-v2.d.ts.map +1 -0
  223. package/dist/mcp/mcp-server-v2.js +376 -0
  224. package/dist/mcp/mcp-server-v2.js.map +1 -0
  225. package/dist/mcp/tools/done-v2.d.ts +57 -0
  226. package/dist/mcp/tools/done-v2.d.ts.map +1 -0
  227. package/dist/mcp/tools/done-v2.js +129 -0
  228. package/dist/mcp/tools/done-v2.js.map +1 -0
  229. package/dist/metrics/index.d.ts +7 -1
  230. package/dist/metrics/index.d.ts.map +1 -1
  231. package/dist/metrics/index.js +6 -1
  232. package/dist/metrics/index.js.map +1 -1
  233. package/dist/metrics/metrics.d.ts +9 -70
  234. package/dist/metrics/metrics.d.ts.map +1 -1
  235. package/dist/metrics/metrics.js +89 -145
  236. package/dist/metrics/metrics.js.map +1 -1
  237. package/dist/metrics/types.d.ts +44 -0
  238. package/dist/metrics/types.d.ts.map +1 -0
  239. package/dist/metrics/types.js +7 -0
  240. package/dist/metrics/types.js.map +1 -0
  241. package/dist/roles/builtin/coordinator.d.ts.map +1 -1
  242. package/dist/roles/builtin/coordinator.js +2 -1
  243. package/dist/roles/builtin/coordinator.js.map +1 -1
  244. package/dist/roles/builtin/integrator.d.ts.map +1 -1
  245. package/dist/roles/builtin/integrator.js +2 -1
  246. package/dist/roles/builtin/integrator.js.map +1 -1
  247. package/dist/roles/builtin/worker.d.ts.map +1 -1
  248. package/dist/roles/builtin/worker.js +3 -1
  249. package/dist/roles/builtin/worker.js.map +1 -1
  250. package/dist/roles/capabilities.d.ts +6 -0
  251. package/dist/roles/capabilities.d.ts.map +1 -1
  252. package/dist/roles/capabilities.js +10 -0
  253. package/dist/roles/capabilities.js.map +1 -1
  254. package/dist/roles/config-loader.d.ts +1 -1
  255. package/dist/roles/config-loader.d.ts.map +1 -1
  256. package/dist/roles/config-loader.js +3 -2
  257. package/dist/roles/config-loader.js.map +1 -1
  258. package/dist/roles/types.d.ts +3 -1
  259. package/dist/roles/types.d.ts.map +1 -1
  260. package/dist/store/index.d.ts +3 -6
  261. package/dist/store/index.d.ts.map +1 -1
  262. package/dist/store/index.js +3 -21
  263. package/dist/store/index.js.map +1 -1
  264. package/dist/store/types/agents.d.ts +5 -0
  265. package/dist/store/types/agents.d.ts.map +1 -1
  266. package/dist/store/types/events.d.ts +3 -60
  267. package/dist/store/types/events.d.ts.map +1 -1
  268. package/dist/store/types/events.js +3 -46
  269. package/dist/store/types/events.js.map +1 -1
  270. package/dist/store/types/index.d.ts +0 -3
  271. package/dist/store/types/index.d.ts.map +1 -1
  272. package/dist/store/types/index.js +0 -3
  273. package/dist/store/types/index.js.map +1 -1
  274. package/dist/teams/index.d.ts +2 -2
  275. package/dist/teams/index.d.ts.map +1 -1
  276. package/dist/teams/index.js +1 -1
  277. package/dist/teams/index.js.map +1 -1
  278. package/dist/teams/seed-defaults.d.ts +20 -0
  279. package/dist/teams/seed-defaults.d.ts.map +1 -0
  280. package/dist/teams/seed-defaults.js +71 -0
  281. package/dist/teams/seed-defaults.js.map +1 -0
  282. package/dist/teams/team-loader.d.ts +6 -2
  283. package/dist/teams/team-loader.d.ts.map +1 -1
  284. package/dist/teams/team-loader.js +154 -162
  285. package/dist/teams/team-loader.js.map +1 -1
  286. package/dist/teams/team-manager-v2.d.ts +87 -0
  287. package/dist/teams/team-manager-v2.d.ts.map +1 -0
  288. package/dist/teams/team-manager-v2.js +203 -0
  289. package/dist/teams/team-manager-v2.js.map +1 -0
  290. package/dist/teams/team-runtime-v2.d.ts +149 -0
  291. package/dist/teams/team-runtime-v2.d.ts.map +1 -0
  292. package/dist/teams/team-runtime-v2.js +741 -0
  293. package/dist/teams/team-runtime-v2.js.map +1 -0
  294. package/dist/teams/types.d.ts +41 -151
  295. package/dist/teams/types.d.ts.map +1 -1
  296. package/dist/teams/types.js +2 -3
  297. package/dist/teams/types.js.map +1 -1
  298. package/dist/trigger/index.d.ts +2 -2
  299. package/dist/trigger/index.d.ts.map +1 -1
  300. package/dist/trigger/index.js +4 -4
  301. package/dist/trigger/index.js.map +1 -1
  302. package/dist/trigger/sources/cron/cron-service.d.ts +1 -1
  303. package/dist/trigger/sources/cron/cron-service.d.ts.map +1 -1
  304. package/dist/trigger/sources/webhook/webhook-handler.d.ts +1 -1
  305. package/dist/trigger/sources/webhook/webhook-handler.d.ts.map +1 -1
  306. package/dist/trigger/strategies/ai-router.d.ts +31 -0
  307. package/dist/trigger/strategies/ai-router.d.ts.map +1 -0
  308. package/dist/trigger/strategies/ai-router.js +132 -0
  309. package/dist/trigger/strategies/ai-router.js.map +1 -0
  310. package/dist/trigger/trigger-system-v2.d.ts +106 -0
  311. package/dist/trigger/trigger-system-v2.d.ts.map +1 -0
  312. package/dist/trigger/trigger-system-v2.js +347 -0
  313. package/dist/trigger/trigger-system-v2.js.map +1 -0
  314. package/dist/trigger/types.d.ts +8 -0
  315. package/dist/trigger/types.d.ts.map +1 -1
  316. package/dist/trigger/types.js.map +1 -1
  317. package/dist/workspace/strategies/optimistic.d.ts +13 -3
  318. package/dist/workspace/strategies/optimistic.d.ts.map +1 -1
  319. package/dist/workspace/strategies/optimistic.js +4 -4
  320. package/dist/workspace/strategies/optimistic.js.map +1 -1
  321. package/docs/design-subsystem-extraction.md +627 -0
  322. package/docs/lifecycle-events-design.md +111 -0
  323. package/docs/openhive-capability-summary.md +415 -0
  324. package/docs/openhive-integration.md +415 -0
  325. package/docs/roadmap-v2-gaps.md +216 -0
  326. package/docs/teams.md +73 -0
  327. package/package.json +26 -6
  328. package/src/__tests__/boot-v2.test.ts +196 -0
  329. package/src/__tests__/e2e/acp-over-map-live.e2e.test.ts +496 -0
  330. package/src/__tests__/e2e/acp-over-map.e2e.test.ts +365 -0
  331. package/src/__tests__/e2e/agent-lifecycle.e2e.test.ts +770 -0
  332. package/src/__tests__/e2e/cc-swarm-bridge.e2e.test.ts +253 -0
  333. package/src/__tests__/e2e/cognitive-workspace.e2e.test.ts +282 -0
  334. package/src/__tests__/e2e/done-scenarios.e2e.test.ts +322 -0
  335. package/src/__tests__/e2e/live-agent.e2e.test.ts +1330 -0
  336. package/src/__tests__/e2e/map-server.e2e.test.ts +128 -0
  337. package/src/__tests__/e2e/map-sidecar.e2e.test.ts +139 -0
  338. package/src/__tests__/e2e/opentasks-integration.e2e.test.ts +280 -0
  339. package/src/__tests__/e2e/pull-mode.e2e.test.ts +632 -0
  340. package/src/__tests__/e2e/resume-continue.e2e.test.ts +312 -0
  341. package/src/__tests__/e2e/swarmkit-integration.e2e.test.ts +562 -0
  342. package/src/__tests__/e2e/swarmkit-live.e2e.test.ts +1049 -0
  343. package/src/__tests__/e2e/trajectory-tracking.e2e.test.ts +258 -0
  344. package/src/__tests__/e2e/trigger-wake.e2e.test.ts +257 -0
  345. package/src/__tests__/e2e/workspace-lifecycle.e2e.test.ts +375 -0
  346. package/src/acp/__tests__/macro-agent.test.ts +234 -945
  347. package/src/acp/__tests__/session-mapper.test.ts +82 -155
  348. package/src/acp/__tests__/websocket-server.test.ts +121 -270
  349. package/src/acp/index.ts +18 -118
  350. package/src/acp/macro-agent.ts +692 -1752
  351. package/src/acp/map-bridge.ts +193 -0
  352. package/src/acp/session-mapper.ts +43 -276
  353. package/src/acp/types.ts +39 -767
  354. package/src/acp/websocket-server.ts +152 -588
  355. package/src/adapters/__tests__/federation.test.ts +256 -0
  356. package/src/adapters/__tests__/inbox-adapter.test.ts +316 -0
  357. package/src/adapters/__tests__/tasks-adapter.test.ts +269 -0
  358. package/src/adapters/federation.ts +185 -0
  359. package/src/adapters/inbox-adapter.ts +292 -0
  360. package/src/adapters/inbox-client-adapter.ts +173 -0
  361. package/src/adapters/index.ts +44 -0
  362. package/src/adapters/opentasks-daemon.ts +252 -0
  363. package/src/adapters/tasks-adapter.ts +327 -0
  364. package/src/adapters/types.ts +285 -0
  365. package/src/agent/__tests__/agent-manager-v2.test.ts +554 -0
  366. package/src/agent/__tests__/agent-store.test.ts +413 -0
  367. package/src/agent/agent-manager-v2.ts +1476 -0
  368. package/src/agent/agent-manager.ts +41 -1723
  369. package/src/agent/agent-store.ts +385 -0
  370. package/src/agent/types.ts +9 -0
  371. package/src/api/__tests__/server.test.ts +238 -961
  372. package/src/api/index.ts +5 -3
  373. package/src/api/server.ts +276 -1870
  374. package/src/api/types.ts +25 -337
  375. package/src/boot-v2.ts +527 -0
  376. package/src/cli/acp.ts +40 -435
  377. package/src/cli/index.ts +68 -466
  378. package/src/cli/mcp.ts +260 -326
  379. package/src/cognitive/__tests__/macro-agent-backend.test.ts +478 -0
  380. package/src/cognitive/__tests__/session-converter.test.ts +423 -0
  381. package/src/cognitive/__tests__/workspace-handler.test.ts +221 -0
  382. package/src/cognitive/analyst-role.ts +59 -0
  383. package/src/cognitive/index.ts +49 -0
  384. package/src/cognitive/macro-agent-backend.ts +354 -0
  385. package/src/cognitive/session-converter.ts +151 -0
  386. package/src/cognitive/types.ts +163 -0
  387. package/src/cognitive/workspace-handler.ts +163 -0
  388. package/src/config/project-config.ts +27 -3
  389. package/src/control/__tests__/control-resilience.test.ts +251 -0
  390. package/src/control/__tests__/control-socket.test.ts +240 -0
  391. package/src/control/control-client.ts +337 -0
  392. package/src/control/control-server.ts +298 -0
  393. package/src/control/index.ts +17 -0
  394. package/src/control/types.ts +95 -0
  395. package/src/index.ts +43 -222
  396. package/src/integrations/__tests__/context-builder.test.ts +218 -0
  397. package/src/integrations/__tests__/sessionlog.test.ts +498 -0
  398. package/src/integrations/__tests__/skilltree.test.ts +136 -0
  399. package/src/integrations/context-builder.ts +280 -0
  400. package/src/integrations/sessionlog.ts +194 -0
  401. package/src/integrations/skilltree.ts +183 -0
  402. package/src/lifecycle/__tests__/handlers-v2.test.ts +565 -0
  403. package/src/lifecycle/cleanup.ts +6 -46
  404. package/src/lifecycle/handlers-v2.ts +437 -0
  405. package/src/lifecycle/index.ts +2 -28
  406. package/src/lifecycle/types.ts +3 -0
  407. package/src/map/__tests__/lifecycle-bridge.test.ts +223 -0
  408. package/src/map/__tests__/permission-forwarding.test.ts +143 -0
  409. package/src/map/__tests__/sidecar-integration.test.ts +190 -0
  410. package/src/map/__tests__/task-bridge.test.ts +153 -0
  411. package/src/map/__tests__/trajectory-reporter.test.ts +173 -0
  412. package/src/map/acp-bridge.ts +270 -0
  413. package/src/map/cc-swarm-hooks.ts +242 -0
  414. package/src/map/coordination-handler.ts +220 -0
  415. package/src/map/index.ts +13 -14
  416. package/src/map/lifecycle-bridge.ts +140 -0
  417. package/src/map/server.ts +527 -0
  418. package/src/map/sidecar.ts +312 -0
  419. package/src/map/task-bridge.ts +89 -0
  420. package/src/map/trajectory-reporter.ts +124 -0
  421. package/src/map/types.ts +195 -367
  422. package/src/mcp/__tests__/mcp-server-v2.test.ts +236 -0
  423. package/src/mcp/index.ts +2 -2
  424. package/src/mcp/mcp-server-v2.ts +485 -0
  425. package/src/mcp/tools/done-v2.ts +203 -0
  426. package/src/metrics/__tests__/metrics.test.ts +205 -0
  427. package/src/metrics/index.ts +13 -9
  428. package/src/metrics/metrics.ts +110 -239
  429. package/src/metrics/types.ts +63 -0
  430. package/src/roles/builtin/coordinator.ts +2 -0
  431. package/src/roles/builtin/integrator.ts +2 -0
  432. package/src/roles/builtin/worker.ts +3 -0
  433. package/src/roles/capabilities.ts +11 -0
  434. package/src/roles/config-loader.ts +3 -2
  435. package/src/roles/types.ts +7 -0
  436. package/src/store/index.ts +3 -64
  437. package/src/store/types/agents.ts +5 -0
  438. package/src/store/types/events.ts +5 -100
  439. package/src/store/types/index.ts +0 -3
  440. package/src/teams/__tests__/team-manager-v2.test.ts +425 -0
  441. package/src/teams/__tests__/team-runtime-v2.test.ts +402 -0
  442. package/src/teams/index.ts +20 -4
  443. package/src/teams/seed-defaults.ts +79 -0
  444. package/src/teams/team-loader.ts +200 -234
  445. package/src/teams/team-manager-v2.ts +268 -0
  446. package/src/teams/team-runtime-v2.ts +898 -0
  447. package/src/teams/types.ts +99 -200
  448. package/src/trigger/__tests__/trigger-system-v2.test.ts +257 -0
  449. package/src/trigger/index.ts +16 -31
  450. package/src/trigger/sources/cron/cron-service.ts +1 -1
  451. package/src/trigger/sources/webhook/webhook-handler.ts +1 -1
  452. package/src/trigger/strategies/ai-router.ts +170 -0
  453. package/src/trigger/trigger-system-v2.ts +536 -0
  454. package/src/trigger/types.ts +13 -0
  455. package/src/workspace/strategies/optimistic.ts +9 -6
  456. package/.claude/settings.local.json +0 -61
  457. package/dist/acp/websocket-stream.d.ts +0 -30
  458. package/dist/acp/websocket-stream.d.ts.map +0 -1
  459. package/dist/acp/websocket-stream.js +0 -118
  460. package/dist/acp/websocket-stream.js.map +0 -1
  461. package/dist/activity/deduplication.d.ts +0 -85
  462. package/dist/activity/deduplication.d.ts.map +0 -1
  463. package/dist/activity/deduplication.js +0 -149
  464. package/dist/activity/deduplication.js.map +0 -1
  465. package/dist/activity/index.d.ts +0 -16
  466. package/dist/activity/index.d.ts.map +0 -1
  467. package/dist/activity/index.js +0 -17
  468. package/dist/activity/index.js.map +0 -1
  469. package/dist/activity/relevance.d.ts +0 -81
  470. package/dist/activity/relevance.d.ts.map +0 -1
  471. package/dist/activity/relevance.js +0 -161
  472. package/dist/activity/relevance.js.map +0 -1
  473. package/dist/activity/types.d.ts +0 -169
  474. package/dist/activity/types.d.ts.map +0 -1
  475. package/dist/activity/types.js +0 -33
  476. package/dist/activity/types.js.map +0 -1
  477. package/dist/activity/watcher.d.ts +0 -64
  478. package/dist/activity/watcher.d.ts.map +0 -1
  479. package/dist/activity/watcher.js +0 -212
  480. package/dist/activity/watcher.js.map +0 -1
  481. package/dist/agent/wake.d.ts +0 -85
  482. package/dist/agent/wake.d.ts.map +0 -1
  483. package/dist/agent/wake.js +0 -278
  484. package/dist/agent/wake.js.map +0 -1
  485. package/dist/lifecycle/handlers/generic.d.ts +0 -27
  486. package/dist/lifecycle/handlers/generic.d.ts.map +0 -1
  487. package/dist/lifecycle/handlers/generic.js +0 -56
  488. package/dist/lifecycle/handlers/generic.js.map +0 -1
  489. package/dist/lifecycle/handlers/index.d.ts +0 -47
  490. package/dist/lifecycle/handlers/index.d.ts.map +0 -1
  491. package/dist/lifecycle/handlers/index.js +0 -93
  492. package/dist/lifecycle/handlers/index.js.map +0 -1
  493. package/dist/lifecycle/handlers/integrator.d.ts +0 -81
  494. package/dist/lifecycle/handlers/integrator.d.ts.map +0 -1
  495. package/dist/lifecycle/handlers/integrator.js +0 -451
  496. package/dist/lifecycle/handlers/integrator.js.map +0 -1
  497. package/dist/lifecycle/handlers/monitor.d.ts +0 -29
  498. package/dist/lifecycle/handlers/monitor.d.ts.map +0 -1
  499. package/dist/lifecycle/handlers/monitor.js +0 -79
  500. package/dist/lifecycle/handlers/monitor.js.map +0 -1
  501. package/dist/lifecycle/handlers/worker.d.ts +0 -56
  502. package/dist/lifecycle/handlers/worker.d.ts.map +0 -1
  503. package/dist/lifecycle/handlers/worker.js +0 -381
  504. package/dist/lifecycle/handlers/worker.js.map +0 -1
  505. package/dist/mail/conversation-map.d.ts +0 -33
  506. package/dist/mail/conversation-map.d.ts.map +0 -1
  507. package/dist/mail/conversation-map.js +0 -61
  508. package/dist/mail/conversation-map.js.map +0 -1
  509. package/dist/mail/index.d.ts +0 -11
  510. package/dist/mail/index.d.ts.map +0 -1
  511. package/dist/mail/index.js +0 -11
  512. package/dist/mail/index.js.map +0 -1
  513. package/dist/mail/mail-service.d.ts +0 -85
  514. package/dist/mail/mail-service.d.ts.map +0 -1
  515. package/dist/mail/mail-service.js +0 -121
  516. package/dist/mail/mail-service.js.map +0 -1
  517. package/dist/mail/stores/eventstore-conversation-store.d.ts +0 -40
  518. package/dist/mail/stores/eventstore-conversation-store.d.ts.map +0 -1
  519. package/dist/mail/stores/eventstore-conversation-store.js +0 -131
  520. package/dist/mail/stores/eventstore-conversation-store.js.map +0 -1
  521. package/dist/mail/stores/eventstore-participant-store.d.ts +0 -43
  522. package/dist/mail/stores/eventstore-participant-store.d.ts.map +0 -1
  523. package/dist/mail/stores/eventstore-participant-store.js +0 -145
  524. package/dist/mail/stores/eventstore-participant-store.js.map +0 -1
  525. package/dist/mail/stores/eventstore-thread-store.d.ts +0 -46
  526. package/dist/mail/stores/eventstore-thread-store.d.ts.map +0 -1
  527. package/dist/mail/stores/eventstore-thread-store.js +0 -118
  528. package/dist/mail/stores/eventstore-thread-store.js.map +0 -1
  529. package/dist/mail/stores/eventstore-turn-store.d.ts +0 -47
  530. package/dist/mail/stores/eventstore-turn-store.d.ts.map +0 -1
  531. package/dist/mail/stores/eventstore-turn-store.js +0 -153
  532. package/dist/mail/stores/eventstore-turn-store.js.map +0 -1
  533. package/dist/mail/stores/index.d.ts +0 -12
  534. package/dist/mail/stores/index.d.ts.map +0 -1
  535. package/dist/mail/stores/index.js +0 -12
  536. package/dist/mail/stores/index.js.map +0 -1
  537. package/dist/mail/stores/types.d.ts +0 -146
  538. package/dist/mail/stores/types.d.ts.map +0 -1
  539. package/dist/mail/stores/types.js +0 -13
  540. package/dist/mail/stores/types.js.map +0 -1
  541. package/dist/mail/turn-recorder.d.ts +0 -30
  542. package/dist/mail/turn-recorder.d.ts.map +0 -1
  543. package/dist/mail/turn-recorder.js +0 -98
  544. package/dist/mail/turn-recorder.js.map +0 -1
  545. package/dist/map/adapter/acp-over-map.d.ts +0 -115
  546. package/dist/map/adapter/acp-over-map.d.ts.map +0 -1
  547. package/dist/map/adapter/acp-over-map.js +0 -1024
  548. package/dist/map/adapter/acp-over-map.js.map +0 -1
  549. package/dist/map/adapter/connection-manager.d.ts +0 -150
  550. package/dist/map/adapter/connection-manager.d.ts.map +0 -1
  551. package/dist/map/adapter/connection-manager.js +0 -207
  552. package/dist/map/adapter/connection-manager.js.map +0 -1
  553. package/dist/map/adapter/event-log.d.ts +0 -87
  554. package/dist/map/adapter/event-log.d.ts.map +0 -1
  555. package/dist/map/adapter/event-log.js +0 -122
  556. package/dist/map/adapter/event-log.js.map +0 -1
  557. package/dist/map/adapter/event-translator.d.ts +0 -85
  558. package/dist/map/adapter/event-translator.d.ts.map +0 -1
  559. package/dist/map/adapter/event-translator.js +0 -295
  560. package/dist/map/adapter/event-translator.js.map +0 -1
  561. package/dist/map/adapter/extensions/agent-detection.d.ts +0 -49
  562. package/dist/map/adapter/extensions/agent-detection.d.ts.map +0 -1
  563. package/dist/map/adapter/extensions/agent-detection.js +0 -91
  564. package/dist/map/adapter/extensions/agent-detection.js.map +0 -1
  565. package/dist/map/adapter/extensions/agent-lifecycle.d.ts +0 -82
  566. package/dist/map/adapter/extensions/agent-lifecycle.d.ts.map +0 -1
  567. package/dist/map/adapter/extensions/agent-lifecycle.js +0 -164
  568. package/dist/map/adapter/extensions/agent-lifecycle.js.map +0 -1
  569. package/dist/map/adapter/extensions/index.d.ts +0 -89
  570. package/dist/map/adapter/extensions/index.d.ts.map +0 -1
  571. package/dist/map/adapter/extensions/index.js +0 -187
  572. package/dist/map/adapter/extensions/index.js.map +0 -1
  573. package/dist/map/adapter/extensions/mcp-bridge.d.ts +0 -57
  574. package/dist/map/adapter/extensions/mcp-bridge.d.ts.map +0 -1
  575. package/dist/map/adapter/extensions/mcp-bridge.js +0 -745
  576. package/dist/map/adapter/extensions/mcp-bridge.js.map +0 -1
  577. package/dist/map/adapter/extensions/rename.d.ts +0 -29
  578. package/dist/map/adapter/extensions/rename.d.ts.map +0 -1
  579. package/dist/map/adapter/extensions/rename.js +0 -49
  580. package/dist/map/adapter/extensions/rename.js.map +0 -1
  581. package/dist/map/adapter/extensions/resume.d.ts +0 -47
  582. package/dist/map/adapter/extensions/resume.d.ts.map +0 -1
  583. package/dist/map/adapter/extensions/resume.js +0 -59
  584. package/dist/map/adapter/extensions/resume.js.map +0 -1
  585. package/dist/map/adapter/extensions/task.d.ts +0 -40
  586. package/dist/map/adapter/extensions/task.d.ts.map +0 -1
  587. package/dist/map/adapter/extensions/task.js +0 -197
  588. package/dist/map/adapter/extensions/task.js.map +0 -1
  589. package/dist/map/adapter/extensions/update-metadata.d.ts +0 -29
  590. package/dist/map/adapter/extensions/update-metadata.d.ts.map +0 -1
  591. package/dist/map/adapter/extensions/update-metadata.js +0 -67
  592. package/dist/map/adapter/extensions/update-metadata.js.map +0 -1
  593. package/dist/map/adapter/extensions/wake.d.ts +0 -60
  594. package/dist/map/adapter/extensions/wake.d.ts.map +0 -1
  595. package/dist/map/adapter/extensions/wake.js +0 -144
  596. package/dist/map/adapter/extensions/wake.js.map +0 -1
  597. package/dist/map/adapter/extensions/workspace-files.d.ts +0 -42
  598. package/dist/map/adapter/extensions/workspace-files.d.ts.map +0 -1
  599. package/dist/map/adapter/extensions/workspace-files.js +0 -338
  600. package/dist/map/adapter/extensions/workspace-files.js.map +0 -1
  601. package/dist/map/adapter/extensions/workspace.d.ts +0 -57
  602. package/dist/map/adapter/extensions/workspace.d.ts.map +0 -1
  603. package/dist/map/adapter/extensions/workspace.js +0 -81
  604. package/dist/map/adapter/extensions/workspace.js.map +0 -1
  605. package/dist/map/adapter/index.d.ts +0 -20
  606. package/dist/map/adapter/index.d.ts.map +0 -1
  607. package/dist/map/adapter/index.js +0 -38
  608. package/dist/map/adapter/index.js.map +0 -1
  609. package/dist/map/adapter/interface.d.ts +0 -450
  610. package/dist/map/adapter/interface.d.ts.map +0 -1
  611. package/dist/map/adapter/interface.js +0 -24
  612. package/dist/map/adapter/interface.js.map +0 -1
  613. package/dist/map/adapter/mail-handler-adapter.d.ts +0 -27
  614. package/dist/map/adapter/mail-handler-adapter.d.ts.map +0 -1
  615. package/dist/map/adapter/mail-handler-adapter.js +0 -292
  616. package/dist/map/adapter/mail-handler-adapter.js.map +0 -1
  617. package/dist/map/adapter/map-adapter.d.ts +0 -200
  618. package/dist/map/adapter/map-adapter.d.ts.map +0 -1
  619. package/dist/map/adapter/map-adapter.js +0 -1199
  620. package/dist/map/adapter/map-adapter.js.map +0 -1
  621. package/dist/map/adapter/rpc-handler.d.ts +0 -263
  622. package/dist/map/adapter/rpc-handler.d.ts.map +0 -1
  623. package/dist/map/adapter/rpc-handler.js +0 -365
  624. package/dist/map/adapter/rpc-handler.js.map +0 -1
  625. package/dist/map/adapter/subscription-manager.d.ts +0 -174
  626. package/dist/map/adapter/subscription-manager.d.ts.map +0 -1
  627. package/dist/map/adapter/subscription-manager.js +0 -248
  628. package/dist/map/adapter/subscription-manager.js.map +0 -1
  629. package/dist/map/adapter/types.d.ts +0 -194
  630. package/dist/map/adapter/types.d.ts.map +0 -1
  631. package/dist/map/adapter/types.js +0 -27
  632. package/dist/map/adapter/types.js.map +0 -1
  633. package/dist/map/adapter/websocket-integration.d.ts +0 -113
  634. package/dist/map/adapter/websocket-integration.d.ts.map +0 -1
  635. package/dist/map/adapter/websocket-integration.js +0 -134
  636. package/dist/map/adapter/websocket-integration.js.map +0 -1
  637. package/dist/map/federation/envelope.d.ts +0 -98
  638. package/dist/map/federation/envelope.d.ts.map +0 -1
  639. package/dist/map/federation/envelope.js +0 -160
  640. package/dist/map/federation/envelope.js.map +0 -1
  641. package/dist/map/federation/federation-handler.d.ts +0 -50
  642. package/dist/map/federation/federation-handler.d.ts.map +0 -1
  643. package/dist/map/federation/federation-handler.js +0 -306
  644. package/dist/map/federation/federation-handler.js.map +0 -1
  645. package/dist/map/federation/index.d.ts +0 -14
  646. package/dist/map/federation/index.d.ts.map +0 -1
  647. package/dist/map/federation/index.js +0 -13
  648. package/dist/map/federation/index.js.map +0 -1
  649. package/dist/map/federation/types.d.ts +0 -239
  650. package/dist/map/federation/types.d.ts.map +0 -1
  651. package/dist/map/federation/types.js +0 -23
  652. package/dist/map/federation/types.js.map +0 -1
  653. package/dist/map/utils/address-translation.d.ts +0 -99
  654. package/dist/map/utils/address-translation.d.ts.map +0 -1
  655. package/dist/map/utils/address-translation.js +0 -285
  656. package/dist/map/utils/address-translation.js.map +0 -1
  657. package/dist/map/utils/index.d.ts +0 -7
  658. package/dist/map/utils/index.d.ts.map +0 -1
  659. package/dist/map/utils/index.js +0 -7
  660. package/dist/map/utils/index.js.map +0 -1
  661. package/dist/mcp/map-client.d.ts +0 -39
  662. package/dist/mcp/map-client.d.ts.map +0 -1
  663. package/dist/mcp/map-client.js +0 -129
  664. package/dist/mcp/map-client.js.map +0 -1
  665. package/dist/mcp/mcp-server.d.ts +0 -70
  666. package/dist/mcp/mcp-server.d.ts.map +0 -1
  667. package/dist/mcp/mcp-server.js +0 -1015
  668. package/dist/mcp/mcp-server.js.map +0 -1
  669. package/dist/mcp/tools/claim_task.d.ts +0 -35
  670. package/dist/mcp/tools/claim_task.d.ts.map +0 -1
  671. package/dist/mcp/tools/claim_task.js +0 -58
  672. package/dist/mcp/tools/claim_task.js.map +0 -1
  673. package/dist/mcp/tools/done.d.ts +0 -102
  674. package/dist/mcp/tools/done.d.ts.map +0 -1
  675. package/dist/mcp/tools/done.js +0 -234
  676. package/dist/mcp/tools/done.js.map +0 -1
  677. package/dist/mcp/tools/inject_context.d.ts +0 -61
  678. package/dist/mcp/tools/inject_context.d.ts.map +0 -1
  679. package/dist/mcp/tools/inject_context.js +0 -123
  680. package/dist/mcp/tools/inject_context.js.map +0 -1
  681. package/dist/mcp/tools/list_claimable_tasks.d.ts +0 -38
  682. package/dist/mcp/tools/list_claimable_tasks.d.ts.map +0 -1
  683. package/dist/mcp/tools/list_claimable_tasks.js +0 -63
  684. package/dist/mcp/tools/list_claimable_tasks.js.map +0 -1
  685. package/dist/mcp/tools/unclaim_task.d.ts +0 -31
  686. package/dist/mcp/tools/unclaim_task.d.ts.map +0 -1
  687. package/dist/mcp/tools/unclaim_task.js +0 -47
  688. package/dist/mcp/tools/unclaim_task.js.map +0 -1
  689. package/dist/mcp/tools/wait_for_activity.d.ts +0 -60
  690. package/dist/mcp/tools/wait_for_activity.d.ts.map +0 -1
  691. package/dist/mcp/tools/wait_for_activity.js +0 -135
  692. package/dist/mcp/tools/wait_for_activity.js.map +0 -1
  693. package/dist/monitor/health-check-service.d.ts +0 -143
  694. package/dist/monitor/health-check-service.d.ts.map +0 -1
  695. package/dist/monitor/health-check-service.js +0 -240
  696. package/dist/monitor/health-check-service.js.map +0 -1
  697. package/dist/monitor/index.d.ts +0 -14
  698. package/dist/monitor/index.d.ts.map +0 -1
  699. package/dist/monitor/index.js +0 -14
  700. package/dist/monitor/index.js.map +0 -1
  701. package/dist/monitor/stall-detector.d.ts +0 -109
  702. package/dist/monitor/stall-detector.d.ts.map +0 -1
  703. package/dist/monitor/stall-detector.js +0 -152
  704. package/dist/monitor/stall-detector.js.map +0 -1
  705. package/dist/peer/capability-manager.d.ts +0 -56
  706. package/dist/peer/capability-manager.d.ts.map +0 -1
  707. package/dist/peer/capability-manager.js +0 -186
  708. package/dist/peer/capability-manager.js.map +0 -1
  709. package/dist/peer/encapsulation-manager.d.ts +0 -190
  710. package/dist/peer/encapsulation-manager.d.ts.map +0 -1
  711. package/dist/peer/encapsulation-manager.js +0 -486
  712. package/dist/peer/encapsulation-manager.js.map +0 -1
  713. package/dist/peer/federation-manager.d.ts +0 -223
  714. package/dist/peer/federation-manager.d.ts.map +0 -1
  715. package/dist/peer/federation-manager.js +0 -528
  716. package/dist/peer/federation-manager.js.map +0 -1
  717. package/dist/peer/hierarchy-errors.d.ts +0 -208
  718. package/dist/peer/hierarchy-errors.d.ts.map +0 -1
  719. package/dist/peer/hierarchy-errors.js +0 -268
  720. package/dist/peer/hierarchy-errors.js.map +0 -1
  721. package/dist/peer/hierarchy-protocol.d.ts +0 -159
  722. package/dist/peer/hierarchy-protocol.d.ts.map +0 -1
  723. package/dist/peer/hierarchy-protocol.js +0 -142
  724. package/dist/peer/hierarchy-protocol.js.map +0 -1
  725. package/dist/peer/index.d.ts +0 -15
  726. package/dist/peer/index.d.ts.map +0 -1
  727. package/dist/peer/index.js +0 -15
  728. package/dist/peer/index.js.map +0 -1
  729. package/dist/peer/peer-manager.d.ts +0 -99
  730. package/dist/peer/peer-manager.d.ts.map +0 -1
  731. package/dist/peer/peer-manager.js +0 -333
  732. package/dist/peer/peer-manager.js.map +0 -1
  733. package/dist/peer/task-delegation.d.ts +0 -189
  734. package/dist/peer/task-delegation.d.ts.map +0 -1
  735. package/dist/peer/task-delegation.js +0 -303
  736. package/dist/peer/task-delegation.js.map +0 -1
  737. package/dist/peer/transports/index.d.ts +0 -8
  738. package/dist/peer/transports/index.d.ts.map +0 -1
  739. package/dist/peer/transports/index.js +0 -8
  740. package/dist/peer/transports/index.js.map +0 -1
  741. package/dist/peer/transports/local-transport.d.ts +0 -56
  742. package/dist/peer/transports/local-transport.d.ts.map +0 -1
  743. package/dist/peer/transports/local-transport.js +0 -263
  744. package/dist/peer/transports/local-transport.js.map +0 -1
  745. package/dist/peer/transports/websocket-transport.d.ts +0 -86
  746. package/dist/peer/transports/websocket-transport.d.ts.map +0 -1
  747. package/dist/peer/transports/websocket-transport.js +0 -338
  748. package/dist/peer/transports/websocket-transport.js.map +0 -1
  749. package/dist/peer/types.d.ts +0 -268
  750. package/dist/peer/types.d.ts.map +0 -1
  751. package/dist/peer/types.js +0 -36
  752. package/dist/peer/types.js.map +0 -1
  753. package/dist/router/address-resolver.d.ts +0 -102
  754. package/dist/router/address-resolver.d.ts.map +0 -1
  755. package/dist/router/address-resolver.js +0 -198
  756. package/dist/router/address-resolver.js.map +0 -1
  757. package/dist/router/broadcast.d.ts +0 -53
  758. package/dist/router/broadcast.d.ts.map +0 -1
  759. package/dist/router/broadcast.js +0 -75
  760. package/dist/router/broadcast.js.map +0 -1
  761. package/dist/router/channels.d.ts +0 -148
  762. package/dist/router/channels.d.ts.map +0 -1
  763. package/dist/router/channels.js +0 -126
  764. package/dist/router/channels.js.map +0 -1
  765. package/dist/router/index.d.ts +0 -21
  766. package/dist/router/index.d.ts.map +0 -1
  767. package/dist/router/index.js +0 -18
  768. package/dist/router/index.js.map +0 -1
  769. package/dist/router/message-router.d.ts +0 -197
  770. package/dist/router/message-router.d.ts.map +0 -1
  771. package/dist/router/message-router.js +0 -903
  772. package/dist/router/message-router.js.map +0 -1
  773. package/dist/router/message-types.d.ts +0 -183
  774. package/dist/router/message-types.d.ts.map +0 -1
  775. package/dist/router/message-types.js +0 -79
  776. package/dist/router/message-types.js.map +0 -1
  777. package/dist/router/role-resolver.d.ts +0 -67
  778. package/dist/router/role-resolver.d.ts.map +0 -1
  779. package/dist/router/role-resolver.js +0 -106
  780. package/dist/router/role-resolver.js.map +0 -1
  781. package/dist/router/signals.d.ts +0 -253
  782. package/dist/router/signals.d.ts.map +0 -1
  783. package/dist/router/signals.js +0 -53
  784. package/dist/router/signals.js.map +0 -1
  785. package/dist/router/types.d.ts +0 -191
  786. package/dist/router/types.d.ts.map +0 -1
  787. package/dist/router/types.js +0 -34
  788. package/dist/router/types.js.map +0 -1
  789. package/dist/router/wake.d.ts +0 -111
  790. package/dist/router/wake.d.ts.map +0 -1
  791. package/dist/router/wake.js +0 -180
  792. package/dist/router/wake.js.map +0 -1
  793. package/dist/server/combined-server.d.ts +0 -88
  794. package/dist/server/combined-server.d.ts.map +0 -1
  795. package/dist/server/combined-server.js +0 -331
  796. package/dist/server/combined-server.js.map +0 -1
  797. package/dist/steering/index.d.ts +0 -11
  798. package/dist/steering/index.d.ts.map +0 -1
  799. package/dist/steering/index.js +0 -11
  800. package/dist/steering/index.js.map +0 -1
  801. package/dist/steering/inject.d.ts +0 -39
  802. package/dist/steering/inject.d.ts.map +0 -1
  803. package/dist/steering/inject.js +0 -197
  804. package/dist/steering/inject.js.map +0 -1
  805. package/dist/steering/types.d.ts +0 -100
  806. package/dist/steering/types.d.ts.map +0 -1
  807. package/dist/steering/types.js +0 -11
  808. package/dist/steering/types.js.map +0 -1
  809. package/dist/store/backends/index.d.ts +0 -11
  810. package/dist/store/backends/index.d.ts.map +0 -1
  811. package/dist/store/backends/index.js +0 -15
  812. package/dist/store/backends/index.js.map +0 -1
  813. package/dist/store/backends/json-backend.d.ts +0 -23
  814. package/dist/store/backends/json-backend.d.ts.map +0 -1
  815. package/dist/store/backends/json-backend.js +0 -220
  816. package/dist/store/backends/json-backend.js.map +0 -1
  817. package/dist/store/backends/memory-backend.d.ts +0 -12
  818. package/dist/store/backends/memory-backend.d.ts.map +0 -1
  819. package/dist/store/backends/memory-backend.js +0 -205
  820. package/dist/store/backends/memory-backend.js.map +0 -1
  821. package/dist/store/backends/sqlite-backend.d.ts +0 -27
  822. package/dist/store/backends/sqlite-backend.d.ts.map +0 -1
  823. package/dist/store/backends/sqlite-backend.js +0 -231
  824. package/dist/store/backends/sqlite-backend.js.map +0 -1
  825. package/dist/store/backends/tinybase-backend.d.ts +0 -22
  826. package/dist/store/backends/tinybase-backend.d.ts.map +0 -1
  827. package/dist/store/backends/tinybase-backend.js +0 -203
  828. package/dist/store/backends/tinybase-backend.js.map +0 -1
  829. package/dist/store/backends/types.d.ts +0 -175
  830. package/dist/store/backends/types.d.ts.map +0 -1
  831. package/dist/store/backends/types.js +0 -28
  832. package/dist/store/backends/types.js.map +0 -1
  833. package/dist/store/event-store.d.ts +0 -128
  834. package/dist/store/event-store.d.ts.map +0 -1
  835. package/dist/store/event-store.js +0 -1739
  836. package/dist/store/event-store.js.map +0 -1
  837. package/dist/store/instance.d.ts +0 -283
  838. package/dist/store/instance.d.ts.map +0 -1
  839. package/dist/store/instance.js +0 -363
  840. package/dist/store/instance.js.map +0 -1
  841. package/dist/store/migrations.d.ts +0 -41
  842. package/dist/store/migrations.d.ts.map +0 -1
  843. package/dist/store/migrations.js +0 -79
  844. package/dist/store/migrations.js.map +0 -1
  845. package/dist/store/types/config.d.ts +0 -16
  846. package/dist/store/types/config.d.ts.map +0 -1
  847. package/dist/store/types/config.js +0 -8
  848. package/dist/store/types/config.js.map +0 -1
  849. package/dist/store/types/conversations.d.ts +0 -91
  850. package/dist/store/types/conversations.d.ts.map +0 -1
  851. package/dist/store/types/conversations.js +0 -8
  852. package/dist/store/types/conversations.js.map +0 -1
  853. package/dist/store/types/sessions.d.ts +0 -44
  854. package/dist/store/types/sessions.d.ts.map +0 -1
  855. package/dist/store/types/sessions.js +0 -9
  856. package/dist/store/types/sessions.js.map +0 -1
  857. package/dist/task/backend/index.d.ts +0 -93
  858. package/dist/task/backend/index.d.ts.map +0 -1
  859. package/dist/task/backend/index.js +0 -178
  860. package/dist/task/backend/index.js.map +0 -1
  861. package/dist/task/backend/memory.d.ts +0 -70
  862. package/dist/task/backend/memory.d.ts.map +0 -1
  863. package/dist/task/backend/memory.js +0 -621
  864. package/dist/task/backend/memory.js.map +0 -1
  865. package/dist/task/backend/opentasks/backend.d.ts +0 -140
  866. package/dist/task/backend/opentasks/backend.d.ts.map +0 -1
  867. package/dist/task/backend/opentasks/backend.js +0 -1023
  868. package/dist/task/backend/opentasks/backend.js.map +0 -1
  869. package/dist/task/backend/opentasks/client.d.ts +0 -337
  870. package/dist/task/backend/opentasks/client.d.ts.map +0 -1
  871. package/dist/task/backend/opentasks/client.js +0 -225
  872. package/dist/task/backend/opentasks/client.js.map +0 -1
  873. package/dist/task/backend/opentasks/daemon-manager.d.ts +0 -89
  874. package/dist/task/backend/opentasks/daemon-manager.d.ts.map +0 -1
  875. package/dist/task/backend/opentasks/daemon-manager.js +0 -195
  876. package/dist/task/backend/opentasks/daemon-manager.js.map +0 -1
  877. package/dist/task/backend/opentasks/index.d.ts +0 -21
  878. package/dist/task/backend/opentasks/index.d.ts.map +0 -1
  879. package/dist/task/backend/opentasks/index.js +0 -21
  880. package/dist/task/backend/opentasks/index.js.map +0 -1
  881. package/dist/task/backend/opentasks/mapping.d.ts +0 -48
  882. package/dist/task/backend/opentasks/mapping.d.ts.map +0 -1
  883. package/dist/task/backend/opentasks/mapping.js +0 -77
  884. package/dist/task/backend/opentasks/mapping.js.map +0 -1
  885. package/dist/task/backend/sudocode/__tests__/integration/test-utils.d.ts +0 -54
  886. package/dist/task/backend/sudocode/__tests__/integration/test-utils.d.ts.map +0 -1
  887. package/dist/task/backend/sudocode/__tests__/integration/test-utils.js +0 -88
  888. package/dist/task/backend/sudocode/__tests__/integration/test-utils.js.map +0 -1
  889. package/dist/task/backend/sudocode/backend.d.ts +0 -155
  890. package/dist/task/backend/sudocode/backend.d.ts.map +0 -1
  891. package/dist/task/backend/sudocode/backend.js +0 -942
  892. package/dist/task/backend/sudocode/backend.js.map +0 -1
  893. package/dist/task/backend/sudocode/client.d.ts +0 -303
  894. package/dist/task/backend/sudocode/client.d.ts.map +0 -1
  895. package/dist/task/backend/sudocode/client.js +0 -101
  896. package/dist/task/backend/sudocode/client.js.map +0 -1
  897. package/dist/task/backend/sudocode/index.d.ts +0 -19
  898. package/dist/task/backend/sudocode/index.d.ts.map +0 -1
  899. package/dist/task/backend/sudocode/index.js +0 -17
  900. package/dist/task/backend/sudocode/index.js.map +0 -1
  901. package/dist/task/backend/sudocode/mapping.d.ts +0 -51
  902. package/dist/task/backend/sudocode/mapping.d.ts.map +0 -1
  903. package/dist/task/backend/sudocode/mapping.js +0 -86
  904. package/dist/task/backend/sudocode/mapping.js.map +0 -1
  905. package/dist/task/backend/sudocode/server-client.d.ts +0 -56
  906. package/dist/task/backend/sudocode/server-client.d.ts.map +0 -1
  907. package/dist/task/backend/sudocode/server-client.js +0 -367
  908. package/dist/task/backend/sudocode/server-client.js.map +0 -1
  909. package/dist/task/backend/sudocode/standalone-client.d.ts +0 -91
  910. package/dist/task/backend/sudocode/standalone-client.d.ts.map +0 -1
  911. package/dist/task/backend/sudocode/standalone-client.js +0 -476
  912. package/dist/task/backend/sudocode/standalone-client.js.map +0 -1
  913. package/dist/task/backend/sudocode/sync-policy.d.ts +0 -166
  914. package/dist/task/backend/sudocode/sync-policy.d.ts.map +0 -1
  915. package/dist/task/backend/sudocode/sync-policy.js +0 -221
  916. package/dist/task/backend/sudocode/sync-policy.js.map +0 -1
  917. package/dist/task/backend/sudocode/tools.d.ts +0 -87
  918. package/dist/task/backend/sudocode/tools.d.ts.map +0 -1
  919. package/dist/task/backend/sudocode/tools.js +0 -743
  920. package/dist/task/backend/sudocode/tools.js.map +0 -1
  921. package/dist/task/backend/tool-provider.d.ts +0 -56
  922. package/dist/task/backend/tool-provider.d.ts.map +0 -1
  923. package/dist/task/backend/tool-provider.js +0 -424
  924. package/dist/task/backend/tool-provider.js.map +0 -1
  925. package/dist/task/backend/types.d.ts +0 -297
  926. package/dist/task/backend/types.d.ts.map +0 -1
  927. package/dist/task/backend/types.js +0 -27
  928. package/dist/task/backend/types.js.map +0 -1
  929. package/dist/task/backend/unified-tool-provider.d.ts +0 -57
  930. package/dist/task/backend/unified-tool-provider.d.ts.map +0 -1
  931. package/dist/task/backend/unified-tool-provider.js +0 -623
  932. package/dist/task/backend/unified-tool-provider.js.map +0 -1
  933. package/dist/task/index.d.ts +0 -7
  934. package/dist/task/index.d.ts.map +0 -1
  935. package/dist/task/index.js +0 -7
  936. package/dist/task/index.js.map +0 -1
  937. package/dist/task/retry-policy.d.ts +0 -89
  938. package/dist/task/retry-policy.d.ts.map +0 -1
  939. package/dist/task/retry-policy.js +0 -160
  940. package/dist/task/retry-policy.js.map +0 -1
  941. package/dist/task/task-manager.d.ts +0 -70
  942. package/dist/task/task-manager.d.ts.map +0 -1
  943. package/dist/task/task-manager.js +0 -319
  944. package/dist/task/task-manager.js.map +0 -1
  945. package/dist/task/types.d.ts +0 -72
  946. package/dist/task/types.d.ts.map +0 -1
  947. package/dist/task/types.js +0 -33
  948. package/dist/task/types.js.map +0 -1
  949. package/dist/teams/team-runtime.d.ts +0 -139
  950. package/dist/teams/team-runtime.d.ts.map +0 -1
  951. package/dist/teams/team-runtime.js +0 -615
  952. package/dist/teams/team-runtime.js.map +0 -1
  953. package/dist/trigger/router/index.d.ts +0 -11
  954. package/dist/trigger/router/index.d.ts.map +0 -1
  955. package/dist/trigger/router/index.js +0 -10
  956. package/dist/trigger/router/index.js.map +0 -1
  957. package/dist/trigger/router/strategies/ai-router-strategy.d.ts +0 -34
  958. package/dist/trigger/router/strategies/ai-router-strategy.d.ts.map +0 -1
  959. package/dist/trigger/router/strategies/ai-router-strategy.js +0 -359
  960. package/dist/trigger/router/strategies/ai-router-strategy.js.map +0 -1
  961. package/dist/trigger/router/strategies/direct-strategy.d.ts +0 -32
  962. package/dist/trigger/router/strategies/direct-strategy.d.ts.map +0 -1
  963. package/dist/trigger/router/strategies/direct-strategy.js +0 -119
  964. package/dist/trigger/router/strategies/direct-strategy.js.map +0 -1
  965. package/dist/trigger/router/strategies/index.d.ts +0 -11
  966. package/dist/trigger/router/strategies/index.d.ts.map +0 -1
  967. package/dist/trigger/router/strategies/index.js +0 -11
  968. package/dist/trigger/router/strategies/index.js.map +0 -1
  969. package/dist/trigger/router/strategies/role-strategy.d.ts +0 -39
  970. package/dist/trigger/router/strategies/role-strategy.d.ts.map +0 -1
  971. package/dist/trigger/router/strategies/role-strategy.js +0 -207
  972. package/dist/trigger/router/strategies/role-strategy.js.map +0 -1
  973. package/dist/trigger/router/trigger-router.d.ts +0 -54
  974. package/dist/trigger/router/trigger-router.d.ts.map +0 -1
  975. package/dist/trigger/router/trigger-router.js +0 -362
  976. package/dist/trigger/router/trigger-router.js.map +0 -1
  977. package/dist/trigger/router/types.d.ts +0 -225
  978. package/dist/trigger/router/types.d.ts.map +0 -1
  979. package/dist/trigger/router/types.js +0 -10
  980. package/dist/trigger/router/types.js.map +0 -1
  981. package/dist/trigger/trigger-system.d.ts +0 -77
  982. package/dist/trigger/trigger-system.d.ts.map +0 -1
  983. package/dist/trigger/trigger-system.js +0 -84
  984. package/dist/trigger/trigger-system.js.map +0 -1
  985. package/references/acp-factory-ref/CHANGELOG.md +0 -33
  986. package/references/acp-factory-ref/LICENSE +0 -21
  987. package/references/acp-factory-ref/README.md +0 -341
  988. package/references/acp-factory-ref/package-lock.json +0 -3102
  989. package/references/acp-factory-ref/package.json +0 -96
  990. package/references/acp-factory-ref/python/CHANGELOG.md +0 -33
  991. package/references/acp-factory-ref/python/LICENSE +0 -21
  992. package/references/acp-factory-ref/python/Makefile +0 -57
  993. package/references/acp-factory-ref/python/README.md +0 -253
  994. package/references/acp-factory-ref/python/pyproject.toml +0 -73
  995. package/references/acp-factory-ref/python/tests/e2e/__init__.py +0 -1
  996. package/references/acp-factory-ref/python/tests/e2e/test_codex_e2e.py +0 -349
  997. package/references/acp-factory-ref/python/tests/e2e/test_gemini_e2e.py +0 -165
  998. package/references/acp-factory-ref/python/tests/e2e/test_opencode_e2e.py +0 -296
  999. package/references/acp-factory-ref/python/tests/test_client_handler.py +0 -543
  1000. package/references/acp-factory-ref/python/tests/test_pushable.py +0 -199
  1001. package/references/claude-code-acp/.github/workflows/ci.yml +0 -45
  1002. package/references/claude-code-acp/.github/workflows/publish.yml +0 -34
  1003. package/references/claude-code-acp/.prettierrc.json +0 -4
  1004. package/references/claude-code-acp/CHANGELOG.md +0 -249
  1005. package/references/claude-code-acp/LICENSE +0 -222
  1006. package/references/claude-code-acp/README.md +0 -53
  1007. package/references/claude-code-acp/docs/RELEASES.md +0 -24
  1008. package/references/claude-code-acp/eslint.config.js +0 -48
  1009. package/references/claude-code-acp/package-lock.json +0 -4570
  1010. package/references/claude-code-acp/package.json +0 -88
  1011. package/references/claude-code-acp/scripts/release.sh +0 -119
  1012. package/references/claude-code-acp/src/acp-agent.ts +0 -2076
  1013. package/references/claude-code-acp/src/index.ts +0 -26
  1014. package/references/claude-code-acp/src/lib.ts +0 -38
  1015. package/references/claude-code-acp/src/mcp-server.ts +0 -911
  1016. package/references/claude-code-acp/src/settings.ts +0 -522
  1017. package/references/claude-code-acp/src/tests/.claude/commands/quick-math.md +0 -5
  1018. package/references/claude-code-acp/src/tests/.claude/commands/say-hello.md +0 -6
  1019. package/references/claude-code-acp/src/tests/acp-agent-fork.test.ts +0 -479
  1020. package/references/claude-code-acp/src/tests/acp-agent.test.ts +0 -1502
  1021. package/references/claude-code-acp/src/tests/extract-lines.test.ts +0 -103
  1022. package/references/claude-code-acp/src/tests/fork-session.test.ts +0 -335
  1023. package/references/claude-code-acp/src/tests/replace-and-calculate-location.test.ts +0 -334
  1024. package/references/claude-code-acp/src/tests/settings.test.ts +0 -617
  1025. package/references/claude-code-acp/src/tests/skills-options.test.ts +0 -187
  1026. package/references/claude-code-acp/src/tests/tools.test.ts +0 -318
  1027. package/references/claude-code-acp/src/tests/typescript-declarations.test.ts +0 -558
  1028. package/references/claude-code-acp/src/tools.ts +0 -819
  1029. package/references/claude-code-acp/src/utils.ts +0 -171
  1030. package/references/claude-code-acp/tsconfig.json +0 -18
  1031. package/references/claude-code-acp/vitest.config.ts +0 -19
  1032. package/references/multi-agent-protocol/.sudocode/issues.jsonl +0 -111
  1033. package/references/multi-agent-protocol/.sudocode/specs.jsonl +0 -13
  1034. package/references/multi-agent-protocol/LICENSE +0 -21
  1035. package/references/multi-agent-protocol/README.md +0 -113
  1036. package/references/multi-agent-protocol/docs/00-design-specification.md +0 -496
  1037. package/references/multi-agent-protocol/docs/01-open-questions.md +0 -1050
  1038. package/references/multi-agent-protocol/docs/02-wire-protocol.md +0 -296
  1039. package/references/multi-agent-protocol/docs/03-streaming-semantics.md +0 -252
  1040. package/references/multi-agent-protocol/docs/04-error-handling.md +0 -231
  1041. package/references/multi-agent-protocol/docs/05-connection-model.md +0 -244
  1042. package/references/multi-agent-protocol/docs/06-visibility-permissions.md +0 -243
  1043. package/references/multi-agent-protocol/docs/07-federation.md +0 -259
  1044. package/references/multi-agent-protocol/docs/08-macro-agent-migration.md +0 -253
  1045. package/references/multi-agent-protocol/docs/09-authentication.md +0 -680
  1046. package/references/multi-agent-protocol/docs/10-mail-protocol.md +0 -553
  1047. package/references/multi-agent-protocol/docs/agent-iam-integration.md +0 -877
  1048. package/references/multi-agent-protocol/docs/agentic-mesh-integration-draft.md +0 -459
  1049. package/references/multi-agent-protocol/docs/git-transport-draft.md +0 -251
  1050. package/references/multi-agent-protocol/docs-site/Gemfile +0 -22
  1051. package/references/multi-agent-protocol/docs-site/README.md +0 -82
  1052. package/references/multi-agent-protocol/docs-site/_config.yml +0 -91
  1053. package/references/multi-agent-protocol/docs-site/_includes/head_custom.html +0 -20
  1054. package/references/multi-agent-protocol/docs-site/_sass/color_schemes/map.scss +0 -42
  1055. package/references/multi-agent-protocol/docs-site/_sass/custom/custom.scss +0 -34
  1056. package/references/multi-agent-protocol/docs-site/examples/full-integration.md +0 -510
  1057. package/references/multi-agent-protocol/docs-site/examples/index.md +0 -138
  1058. package/references/multi-agent-protocol/docs-site/examples/simple-chat.md +0 -282
  1059. package/references/multi-agent-protocol/docs-site/examples/task-queue.md +0 -399
  1060. package/references/multi-agent-protocol/docs-site/getting-started/index.md +0 -98
  1061. package/references/multi-agent-protocol/docs-site/getting-started/installation.md +0 -219
  1062. package/references/multi-agent-protocol/docs-site/getting-started/overview.md +0 -172
  1063. package/references/multi-agent-protocol/docs-site/getting-started/quickstart.md +0 -237
  1064. package/references/multi-agent-protocol/docs-site/index.md +0 -136
  1065. package/references/multi-agent-protocol/docs-site/protocol/authentication.md +0 -391
  1066. package/references/multi-agent-protocol/docs-site/protocol/connection-model.md +0 -376
  1067. package/references/multi-agent-protocol/docs-site/protocol/design.md +0 -284
  1068. package/references/multi-agent-protocol/docs-site/protocol/error-handling.md +0 -312
  1069. package/references/multi-agent-protocol/docs-site/protocol/federation.md +0 -449
  1070. package/references/multi-agent-protocol/docs-site/protocol/index.md +0 -129
  1071. package/references/multi-agent-protocol/docs-site/protocol/permissions.md +0 -398
  1072. package/references/multi-agent-protocol/docs-site/protocol/streaming.md +0 -353
  1073. package/references/multi-agent-protocol/docs-site/protocol/wire-protocol.md +0 -369
  1074. package/references/multi-agent-protocol/docs-site/sdk/api/agent.md +0 -357
  1075. package/references/multi-agent-protocol/docs-site/sdk/api/client.md +0 -380
  1076. package/references/multi-agent-protocol/docs-site/sdk/api/index.md +0 -62
  1077. package/references/multi-agent-protocol/docs-site/sdk/api/server.md +0 -453
  1078. package/references/multi-agent-protocol/docs-site/sdk/api/types.md +0 -468
  1079. package/references/multi-agent-protocol/docs-site/sdk/guides/agent.md +0 -375
  1080. package/references/multi-agent-protocol/docs-site/sdk/guides/authentication.md +0 -405
  1081. package/references/multi-agent-protocol/docs-site/sdk/guides/client.md +0 -352
  1082. package/references/multi-agent-protocol/docs-site/sdk/guides/index.md +0 -89
  1083. package/references/multi-agent-protocol/docs-site/sdk/guides/server.md +0 -360
  1084. package/references/multi-agent-protocol/docs-site/sdk/guides/testing.md +0 -446
  1085. package/references/multi-agent-protocol/docs-site/sdk/guides/transports.md +0 -363
  1086. package/references/multi-agent-protocol/docs-site/sdk/index.md +0 -206
  1087. package/references/multi-agent-protocol/package-lock.json +0 -3886
  1088. package/references/multi-agent-protocol/package.json +0 -56
  1089. package/references/multi-agent-protocol/schema/meta.json +0 -467
  1090. package/references/multi-agent-protocol/schema/schema.json +0 -2558
  1091. package/src/__tests__/e2e/agent-spawn-visibility.e2e.test.ts +0 -761
  1092. package/src/__tests__/e2e/cascade-termination.e2e.test.ts +0 -588
  1093. package/src/__tests__/e2e/conflict-resolution-flow.e2e.test.ts +0 -790
  1094. package/src/__tests__/e2e/full-agent-conflict-resolution.e2e.test.ts +0 -714
  1095. package/src/__tests__/e2e/full-agent-orchestration.e2e.test.ts +0 -536
  1096. package/src/__tests__/e2e/mcp-server-debug.e2e.test.ts +0 -372
  1097. package/src/__tests__/e2e/mcp-thin-client-bridge.e2e.test.ts +0 -304
  1098. package/src/__tests__/e2e/mcp-tools-available.e2e.test.ts +0 -324
  1099. package/src/__tests__/e2e/multi-agent.e2e.test.ts +0 -1527
  1100. package/src/__tests__/e2e/multi-coordinator.e2e.test.ts +0 -602
  1101. package/src/__tests__/e2e/orchestration-flow.e2e.test.ts +0 -686
  1102. package/src/__tests__/e2e/spawn-session-streaming.e2e.test.ts +0 -563
  1103. package/src/__tests__/e2e/steering-task.e2e.test.ts +0 -840
  1104. package/src/__tests__/integration.e2e.test.ts +0 -407
  1105. package/src/acp/__tests__/combined-websocket-server.test.ts +0 -260
  1106. package/src/acp/__tests__/history.test.ts +0 -530
  1107. package/src/acp/__tests__/integration.test.ts +0 -1049
  1108. package/src/acp/__tests__/multi-client-mounting.test.ts +0 -303
  1109. package/src/acp/__tests__/session-persistence.test.ts +0 -276
  1110. package/src/acp/__tests__/websocket-full.e2e.test.ts +0 -401
  1111. package/src/acp/__tests__/websocket-integration.test.ts +0 -484
  1112. package/src/acp/__tests__/websocket-stream.test.ts +0 -281
  1113. package/src/acp/__tests__/websocket.e2e.test.ts +0 -390
  1114. package/src/acp/websocket-stream.ts +0 -140
  1115. package/src/activity/__tests__/deduplication.test.ts +0 -345
  1116. package/src/activity/__tests__/relevance.test.ts +0 -347
  1117. package/src/activity/__tests__/watcher.test.ts +0 -344
  1118. package/src/activity/deduplication.ts +0 -219
  1119. package/src/activity/index.ts +0 -51
  1120. package/src/activity/relevance.ts +0 -258
  1121. package/src/activity/types.ts +0 -263
  1122. package/src/activity/watcher.ts +0 -345
  1123. package/src/agent/__tests__/agent-manager.test.ts +0 -1382
  1124. package/src/agent/__tests__/wake.test.ts +0 -768
  1125. package/src/agent/wake.ts +0 -357
  1126. package/src/api/__tests__/conversation-api.test.ts +0 -468
  1127. package/src/cli/__tests__/acp.test.ts +0 -214
  1128. package/src/lifecycle/__tests__/cascade-termination.test.ts +0 -919
  1129. package/src/lifecycle/__tests__/cascade.test.ts +0 -595
  1130. package/src/lifecycle/__tests__/cleanup.test.ts +0 -322
  1131. package/src/lifecycle/__tests__/handlers.test.ts +0 -1826
  1132. package/src/lifecycle/__tests__/lifecycle.e2e.test.ts +0 -354
  1133. package/src/lifecycle/__tests__/merge-queue.e2e.test.ts +0 -602
  1134. package/src/lifecycle/handlers/generic.ts +0 -87
  1135. package/src/lifecycle/handlers/index.ts +0 -166
  1136. package/src/lifecycle/handlers/integrator.ts +0 -672
  1137. package/src/lifecycle/handlers/monitor.ts +0 -114
  1138. package/src/lifecycle/handlers/worker.ts +0 -506
  1139. package/src/mail/__tests__/conversation-lifecycle.test.ts +0 -409
  1140. package/src/mail/__tests__/eventstore-stores.test.ts +0 -1073
  1141. package/src/mail/__tests__/mail-full-agent.e2e.test.ts +0 -575
  1142. package/src/mail/__tests__/mail-integration.test.ts +0 -759
  1143. package/src/mail/__tests__/mail-map-protocol.e2e.test.ts +0 -1068
  1144. package/src/mail/__tests__/mail-service.test.ts +0 -506
  1145. package/src/mail/__tests__/turn-recorder.test.ts +0 -328
  1146. package/src/mail/conversation-map.ts +0 -107
  1147. package/src/mail/index.ts +0 -25
  1148. package/src/mail/mail-service.ts +0 -257
  1149. package/src/mail/stores/eventstore-conversation-store.ts +0 -146
  1150. package/src/mail/stores/eventstore-participant-store.ts +0 -172
  1151. package/src/mail/stores/eventstore-thread-store.ts +0 -129
  1152. package/src/mail/stores/eventstore-turn-store.ts +0 -173
  1153. package/src/mail/stores/index.ts +0 -12
  1154. package/src/mail/stores/types.ts +0 -160
  1155. package/src/mail/turn-recorder.ts +0 -124
  1156. package/src/map/README.md +0 -79
  1157. package/src/map/__tests__/adapter-types.test.ts +0 -326
  1158. package/src/map/__tests__/interface-types.test.ts +0 -342
  1159. package/src/map/__tests__/types.test.ts +0 -411
  1160. package/src/map/adapter/__tests__/acp-over-map-cancel.test.ts +0 -820
  1161. package/src/map/adapter/__tests__/acp-over-map-getmodels.test.ts +0 -355
  1162. package/src/map/adapter/__tests__/acp-over-map-history.test.ts +0 -1386
  1163. package/src/map/adapter/__tests__/acp-over-map-persistence.e2e.test.ts +0 -440
  1164. package/src/map/adapter/__tests__/connection-manager.test.ts +0 -344
  1165. package/src/map/adapter/__tests__/event-broadcast.test.ts +0 -420
  1166. package/src/map/adapter/__tests__/event-log.test.ts +0 -527
  1167. package/src/map/adapter/__tests__/event-translator.test.ts +0 -550
  1168. package/src/map/adapter/__tests__/extensions.test.ts +0 -1387
  1169. package/src/map/adapter/__tests__/map-adapter.test.ts +0 -926
  1170. package/src/map/adapter/__tests__/mcp-bridge.test.ts +0 -1187
  1171. package/src/map/adapter/__tests__/multi-client-broadcast.test.ts +0 -711
  1172. package/src/map/adapter/__tests__/rpc-handler.test.ts +0 -644
  1173. package/src/map/adapter/__tests__/subscription-manager.test.ts +0 -536
  1174. package/src/map/adapter/__tests__/websocket-integration.test.ts +0 -487
  1175. package/src/map/adapter/__tests__/workspace-files.test.ts +0 -673
  1176. package/src/map/adapter/acp-over-map.ts +0 -1483
  1177. package/src/map/adapter/connection-manager.ts +0 -400
  1178. package/src/map/adapter/event-log.ts +0 -208
  1179. package/src/map/adapter/event-translator.ts +0 -415
  1180. package/src/map/adapter/extensions/agent-detection.ts +0 -201
  1181. package/src/map/adapter/extensions/agent-lifecycle.ts +0 -267
  1182. package/src/map/adapter/extensions/index.ts +0 -280
  1183. package/src/map/adapter/extensions/mcp-bridge.ts +0 -995
  1184. package/src/map/adapter/extensions/resume.ts +0 -114
  1185. package/src/map/adapter/extensions/task.ts +0 -326
  1186. package/src/map/adapter/extensions/update-metadata.ts +0 -126
  1187. package/src/map/adapter/extensions/wake.ts +0 -239
  1188. package/src/map/adapter/extensions/workspace-files.ts +0 -449
  1189. package/src/map/adapter/extensions/workspace.ts +0 -176
  1190. package/src/map/adapter/index.ts +0 -158
  1191. package/src/map/adapter/interface.ts +0 -581
  1192. package/src/map/adapter/mail-handler-adapter.ts +0 -429
  1193. package/src/map/adapter/map-adapter.ts +0 -1749
  1194. package/src/map/adapter/rpc-handler.ts +0 -604
  1195. package/src/map/adapter/subscription-manager.ts +0 -474
  1196. package/src/map/adapter/types.ts +0 -259
  1197. package/src/map/adapter/websocket-integration.ts +0 -229
  1198. package/src/map/federation/__tests__/envelope.test.ts +0 -362
  1199. package/src/map/federation/__tests__/federation-handler.test.ts +0 -461
  1200. package/src/map/federation/envelope.ts +0 -243
  1201. package/src/map/federation/federation-handler.ts +0 -442
  1202. package/src/map/federation/index.ts +0 -65
  1203. package/src/map/federation/types.ts +0 -344
  1204. package/src/mcp/__tests__/map-client.test.ts +0 -386
  1205. package/src/mcp/__tests__/mcp-server-thin-client.test.ts +0 -368
  1206. package/src/mcp/__tests__/mcp-server.test.ts +0 -1002
  1207. package/src/mcp/map-client.ts +0 -177
  1208. package/src/mcp/mcp-server.ts +0 -1395
  1209. package/src/mcp/tools/__tests__/done.test.ts +0 -484
  1210. package/src/mcp/tools/claim_task.ts +0 -86
  1211. package/src/mcp/tools/done.ts +0 -338
  1212. package/src/mcp/tools/inject_context.ts +0 -173
  1213. package/src/mcp/tools/list_claimable_tasks.ts +0 -93
  1214. package/src/mcp/tools/unclaim_task.ts +0 -71
  1215. package/src/mcp/tools/wait_for_activity.ts +0 -185
  1216. package/src/monitor/__tests__/health-check-service.test.ts +0 -425
  1217. package/src/monitor/__tests__/stale-agent-flow.integration.test.ts +0 -393
  1218. package/src/monitor/__tests__/stall-detector.test.ts +0 -395
  1219. package/src/monitor/health-check-service.ts +0 -359
  1220. package/src/monitor/index.ts +0 -28
  1221. package/src/monitor/stall-detector.ts +0 -238
  1222. package/src/peer/__tests__/capability-manager.test.ts +0 -454
  1223. package/src/peer/__tests__/encapsulation-manager.test.ts +0 -787
  1224. package/src/peer/__tests__/federation-manager.test.ts +0 -828
  1225. package/src/peer/__tests__/hierarchy-errors.test.ts +0 -307
  1226. package/src/peer/__tests__/peer-manager.test.ts +0 -535
  1227. package/src/peer/__tests__/task-delegation.test.ts +0 -741
  1228. package/src/peer/capability-manager.ts +0 -289
  1229. package/src/peer/encapsulation-manager.ts +0 -831
  1230. package/src/peer/federation-manager.ts +0 -897
  1231. package/src/peer/hierarchy-errors.ts +0 -382
  1232. package/src/peer/hierarchy-protocol.ts +0 -328
  1233. package/src/peer/index.ts +0 -15
  1234. package/src/peer/peer-manager.ts +0 -540
  1235. package/src/peer/task-delegation.ts +0 -594
  1236. package/src/peer/transports/__tests__/local-transport.test.ts +0 -355
  1237. package/src/peer/transports/__tests__/websocket-transport.test.ts +0 -270
  1238. package/src/peer/transports/index.ts +0 -18
  1239. package/src/peer/transports/local-transport.ts +0 -348
  1240. package/src/peer/transports/websocket-transport.ts +0 -452
  1241. package/src/peer/types.ts +0 -331
  1242. package/src/roles/__tests__/capability-enforcement.test.ts +0 -989
  1243. package/src/roles/__tests__/message-routing.e2e.test.ts +0 -464
  1244. package/src/roles/__tests__/role-resolution.test.ts +0 -576
  1245. package/src/router/README.md +0 -120
  1246. package/src/router/__tests__/address-resolver.test.ts +0 -340
  1247. package/src/router/__tests__/broadcast.test.ts +0 -185
  1248. package/src/router/__tests__/message-router.test.ts +0 -1070
  1249. package/src/router/__tests__/role-channel.test.ts +0 -213
  1250. package/src/router/__tests__/send-to-address.test.ts +0 -731
  1251. package/src/router/__tests__/wake.test.ts +0 -459
  1252. package/src/router/address-resolver.ts +0 -303
  1253. package/src/router/broadcast.ts +0 -117
  1254. package/src/router/channels.ts +0 -283
  1255. package/src/router/index.ts +0 -148
  1256. package/src/router/message-router.ts +0 -1392
  1257. package/src/router/message-types.ts +0 -294
  1258. package/src/router/role-resolver.ts +0 -164
  1259. package/src/router/signals.ts +0 -335
  1260. package/src/router/types.ts +0 -306
  1261. package/src/router/wake.ts +0 -270
  1262. package/src/server/__tests__/combined-server.test.ts +0 -360
  1263. package/src/server/combined-server.ts +0 -530
  1264. package/src/steering/__tests__/inject.test.ts +0 -405
  1265. package/src/steering/__tests__/injection.e2e.test.ts +0 -932
  1266. package/src/steering/__tests__/steering-integration.test.ts +0 -747
  1267. package/src/steering/index.ts +0 -25
  1268. package/src/steering/inject.ts +0 -262
  1269. package/src/steering/types.ts +0 -143
  1270. package/src/store/README.md +0 -134
  1271. package/src/store/__tests__/event-store.test.ts +0 -1446
  1272. package/src/store/__tests__/instance.test.ts +0 -556
  1273. package/src/store/__tests__/migrations.test.ts +0 -109
  1274. package/src/store/backends/__tests__/memory-backend.test.ts +0 -383
  1275. package/src/store/backends/__tests__/sqlite-backend.test.ts +0 -427
  1276. package/src/store/backends/index.ts +0 -42
  1277. package/src/store/backends/json-backend.ts +0 -295
  1278. package/src/store/backends/memory-backend.ts +0 -256
  1279. package/src/store/backends/sqlite-backend.ts +0 -337
  1280. package/src/store/backends/tinybase-backend.ts +0 -276
  1281. package/src/store/backends/types.ts +0 -252
  1282. package/src/store/event-store.ts +0 -2204
  1283. package/src/store/instance.ts +0 -681
  1284. package/src/store/migrations.ts +0 -96
  1285. package/src/store/types/config.ts +0 -19
  1286. package/src/store/types/conversations.ts +0 -129
  1287. package/src/store/types/sessions.ts +0 -53
  1288. package/src/task/__tests__/retry-policy.test.ts +0 -409
  1289. package/src/task/__tests__/task-integration.test.ts +0 -457
  1290. package/src/task/__tests__/task-manager.test.ts +0 -815
  1291. package/src/task/backend/__tests__/create-task-backend.test.ts +0 -225
  1292. package/src/task/backend/__tests__/e2e/unified-tool-provider-opentasks.e2e.test.ts +0 -524
  1293. package/src/task/backend/__tests__/memory.test.ts +0 -1274
  1294. package/src/task/backend/__tests__/unified-tool-provider.test.ts +0 -579
  1295. package/src/task/backend/index.ts +0 -310
  1296. package/src/task/backend/memory.ts +0 -828
  1297. package/src/task/backend/opentasks/__tests__/backend.test.ts +0 -968
  1298. package/src/task/backend/opentasks/__tests__/daemon-manager.test.ts +0 -406
  1299. package/src/task/backend/opentasks/__tests__/mapping.test.ts +0 -84
  1300. package/src/task/backend/opentasks/__tests__/opentasks-backend.e2e.test.ts +0 -1338
  1301. package/src/task/backend/opentasks/backend.ts +0 -1323
  1302. package/src/task/backend/opentasks/client.ts +0 -652
  1303. package/src/task/backend/opentasks/daemon-manager.ts +0 -253
  1304. package/src/task/backend/opentasks/index.ts +0 -69
  1305. package/src/task/backend/opentasks/mapping.ts +0 -94
  1306. package/src/task/backend/types.ts +0 -458
  1307. package/src/task/backend/unified-tool-provider.ts +0 -779
  1308. package/src/task/index.ts +0 -7
  1309. package/src/task/retry-policy.ts +0 -204
  1310. package/src/task/task-manager.ts +0 -515
  1311. package/src/task/types.ts +0 -136
  1312. package/src/teams/__tests__/cross-subsystem.integration.test.ts +0 -983
  1313. package/src/teams/__tests__/e2e/team-runtime.e2e.test.ts +0 -553
  1314. package/src/teams/__tests__/team-system.test.ts +0 -1280
  1315. package/src/teams/team-runtime.ts +0 -729
  1316. package/src/trigger/CLAUDE.md +0 -308
  1317. package/src/trigger/README.md +0 -429
  1318. package/src/trigger/__tests__/macro-agent-regression.test.ts +0 -946
  1319. package/src/trigger/__tests__/routing-strategies.test.ts +0 -329
  1320. package/src/trigger/__tests__/trigger-router.test.ts +0 -433
  1321. package/src/trigger/__tests__/trigger-system-integration.test.ts +0 -581
  1322. package/src/trigger/router/index.ts +0 -36
  1323. package/src/trigger/router/strategies/ai-router-strategy.ts +0 -481
  1324. package/src/trigger/router/strategies/direct-strategy.ts +0 -162
  1325. package/src/trigger/router/strategies/index.ts +0 -26
  1326. package/src/trigger/router/strategies/role-strategy.ts +0 -274
  1327. package/src/trigger/router/trigger-router.ts +0 -463
  1328. package/src/trigger/router/types.ts +0 -273
  1329. package/src/trigger/trigger-system.ts +0 -206
  1330. package/src/workspace/__tests__/multi-coordinator.test.ts +0 -1005
  1331. package/src/workspace/__tests__/workspace-manager.test.ts +0 -391
  1332. package/src/workspace/__tests__/workspace.e2e.test.ts +0 -1155
  1333. package/src/workspace/merge-queue/__tests__/hierarchical-consolidation.e2e.test.ts +0 -414
  1334. package/test_fixtures/harness/__tests__/behavior-executor-and-stepper.test.ts +0 -714
  1335. package/test_fixtures/harness/__tests__/fixtures.test.ts +0 -347
  1336. package/test_fixtures/harness/__tests__/merge-queue-and-worktrees.test.ts +0 -452
  1337. package/test_fixtures/harness/__tests__/temp-repo-and-simulator.test.ts +0 -422
  1338. package/test_fixtures/harness/__tests__/test-harness-and-assertions.test.ts +0 -568
  1339. /package/{references/acp-factory-ref/python/tests/__init__.py → .opentasks/graph.jsonl} +0 -0
@@ -1,27 +1,18 @@
1
1
  /**
2
- * AgentManager - Service for managing agent lifecycle and sessions
2
+ * AgentManager - Interface and types for managing agent lifecycle and sessions
3
3
  *
4
- * Integrates:
5
- * - acp-factory for Claude Code process/session management
6
- * - EventStore for persistent agent state
7
- * - MessageRouter for subscription setup
4
+ * The V1 implementation has been removed. The V2 implementation lives in
5
+ * agent-manager-v2.ts and is wired via boot-v2.ts.
6
+ *
7
+ * This file retains:
8
+ * - The AgentManager interface (used everywhere)
9
+ * - The AgentManagerConfig interface
10
+ * - The SpawnInterceptor type
11
+ * - A re-export of createAgentManagerV2 as createAgentManager for backward compat
8
12
  */
9
13
 
10
- import { nanoid } from "nanoid";
11
- import {
12
- uniqueNamesGenerator,
13
- adjectives,
14
- animals,
15
- } from "unique-names-generator";
16
- import {
17
- AgentFactory,
18
- type Session,
19
- type AgentHandle,
20
- type ExtendedSessionUpdate,
21
- type PermissionMode,
22
- } from "acp-factory";
23
- import type { EventStore } from "../store/event-store.js";
24
- import type { MessageRouter } from "../router/message-router.js";
14
+ import type { PermissionMode } from "acp-factory";
15
+ import type { ExtendedSessionUpdate, Session } from "acp-factory";
25
16
  import type {
26
17
  Agent,
27
18
  AgentId,
@@ -43,50 +34,8 @@ import type {
43
34
  AgentConfig,
44
35
  ContinueAgentOptions,
45
36
  } from "./types.js";
46
- import { AgentManagerError } from "./types.js";
47
- import type { RoleRegistry, Capability } from "../roles/types.js";
48
- import { AGENT_CAPABILITIES } from "../roles/capabilities.js";
49
- import { DefaultRoleRegistry } from "../roles/registry.js";
50
- import { generateSystemPrompt } from "./system-prompt.js";
51
- import type { WorkspaceManager, Workspace } from "../workspace/types.js";
52
- import {
53
- terminateWithChangeConsolidation,
54
- type WorkspaceProvider,
55
- type CascadeAgentManager,
56
- } from "../lifecycle/cascade.js";
57
- import type { HealthCheckService } from "../monitor/health-check-service.js";
58
- import { AgentTokenManager } from "../auth/token.js";
59
-
60
- // ─────────────────────────────────────────────────────────────────
61
- // Helper Functions
62
- // ─────────────────────────────────────────────────────────────────
63
-
64
- /**
65
- * Map a child role name to the required spawn capability.
66
- * Handles subroles like "worker.resolver" by checking base role.
67
- */
68
- function getSpawnCapability(childRole: string): Capability {
69
- // Extract base role (e.g., "worker.resolver" -> "worker")
70
- const baseRole = childRole.split(".")[0];
71
-
72
- switch (baseRole) {
73
- case "worker":
74
- return AGENT_CAPABILITIES.SPAWN_WORKER;
75
- case "integrator":
76
- return AGENT_CAPABILITIES.SPAWN_INTEGRATOR;
77
- case "monitor":
78
- return AGENT_CAPABILITIES.SPAWN_MONITOR;
79
- case "coordinator":
80
- // Coordinators require special handling - typically only other coordinators
81
- // or system-level agents can spawn coordinators
82
- return AGENT_CAPABILITIES.SPAWN_CUSTOM;
83
- default:
84
- // For team-defined roles (e.g., "grinder"), return the specific capability
85
- // (e.g., "agent.spawn.grinder"). The spawn check also accepts
86
- // "agent.spawn.custom" as a generic fallback.
87
- return `agent.spawn.${childRole}` as Capability;
88
- }
89
- }
37
+ import type { RoleRegistry } from "../roles/types.js";
38
+ import type { WorkspaceManager } from "../workspace/types.js";
90
39
 
91
40
  // ─────────────────────────────────────────────────────────────────
92
41
  // AgentManager Interface
@@ -317,16 +266,35 @@ export interface AgentManager {
317
266
  */
318
267
  setOpenTasksSocketPath(socketPath: string): void;
319
268
 
320
- // ── Mail Services (Late Binding) ─────────────────────────────
269
+ /**
270
+ * Set the MAP server URL for propagation to child agents via SWARM_MAP_SERVER.
271
+ * When set, spawned agents with cc-swarm hooks will connect to macro-agent's
272
+ * local MAP server instead of directly to an external hub.
273
+ */
274
+ setMapServerUrl(url: string): void;
275
+
276
+ /**
277
+ * Configure swarmkit integrations (minimem, skill-tree, sessionlog).
278
+ * Called by boot-v2 after system initialization.
279
+ */
280
+ setIntegrationConfigs(configs: {
281
+ minimem?: { enabled: boolean; dir?: string; provider?: string; global?: boolean };
282
+ skilltree?: { enabled: boolean; basePath?: string; defaultProfile?: string };
283
+ sessionlog?: { enabled: boolean; sync?: string };
284
+ }): void;
285
+
286
+ /**
287
+ * Set a compiled skill-tree loadout for a role.
288
+ * Called by TeamRuntime during team bootstrap.
289
+ */
290
+ setSkillLoadout(role: string, content: string): void;
321
291
 
322
292
  /**
323
- * Set mail services for conversation tracking.
324
- * Used for late binding when mailService is created after AgentManager.
293
+ * Set the MAP sidecar reference for trajectory reporting.
294
+ * Called by boot-v2 after the sidecar is created.
295
+ * Enables session-end checkpoint emission on terminate.
325
296
  */
326
- setMailServices(
327
- mailService: import("../mail/mail-service.js").MailService,
328
- conversationMap: import("../mail/conversation-map.js").ConversationMap,
329
- ): void;
297
+ setSidecar(sidecar: { connected: boolean; reportCheckpoint(cp: any): Promise<any> } | null): void;
330
298
 
331
299
  // ── Cleanup ────────────────────────────────────────────────────
332
300
 
@@ -365,25 +333,6 @@ export interface AgentManagerConfig {
365
333
  */
366
334
  roleRegistry?: RoleRegistry;
367
335
 
368
- /**
369
- * Optional HealthCheckService for monitoring coordinator health.
370
- * When provided, health checks will automatically start/stop
371
- * with coordinator agent lifecycle.
372
- */
373
- healthCheckService?: HealthCheckService;
374
-
375
- /**
376
- * Optional MailService for conversation tracking.
377
- * When provided, spawn creates task conversations and terminate closes them.
378
- */
379
- mailService?: import("../mail/mail-service.js").MailService;
380
-
381
- /**
382
- * Optional ConversationMap for agent-to-conversation tracking.
383
- * Required when mailService is provided.
384
- */
385
- conversationMap?: import("../mail/conversation-map.js").ConversationMap;
386
-
387
336
  /**
388
337
  * Optional server URL for MCP thin-client mode.
389
338
  * When set, spawned agents use ephemeral MAP WebSocket calls instead
@@ -397,19 +346,6 @@ export interface AgentManagerConfig {
397
346
  */
398
347
  serverToken?: string;
399
348
 
400
- /**
401
- * Per-agent token manager for MCP bridge authentication.
402
- * When provided, generates a unique token per agent at spawn time
403
- * and revokes it on terminate.
404
- */
405
- agentTokenManager?: AgentTokenManager;
406
-
407
- /**
408
- * Task backend type to propagate to child MCP subprocesses.
409
- * Sourced from merged config. Falls back to MACRO_TASK_BACKEND env var.
410
- */
411
- taskBackend?: string;
412
-
413
349
  /**
414
350
  * OpenTasks socket path to propagate to child MCP subprocesses.
415
351
  * Sourced from merged config. Falls back to OPENTASKS_SOCKET_PATH env var.
@@ -430,1625 +366,7 @@ export type SpawnInterceptor = (
430
366
  ) => SpawnAgentOptions | Promise<SpawnAgentOptions>;
431
367
 
432
368
  // ─────────────────────────────────────────────────────────────────
433
- // AgentManager Implementation
434
- // ─────────────────────────────────────────────────────────────────
435
-
436
- export function createAgentManager(
437
- eventStore: EventStore,
438
- messageRouter: MessageRouter,
439
- config: AgentManagerConfig = {},
440
- ): AgentManager {
441
- const {
442
- defaultPermissionMode = "auto-approve",
443
- defaultAgentType = "claude-code",
444
- defaultCwd = process.cwd(),
445
- workspaceManager,
446
- roleRegistry = new DefaultRoleRegistry(),
447
- healthCheckService,
448
- mailService: initialMailService,
449
- conversationMap: initialConversationMap,
450
- serverUrl,
451
- serverToken,
452
- agentTokenManager,
453
- taskBackend: configTaskBackend,
454
- openTasksSocketPath: initialOpenTasksSocketPath,
455
- } = config;
456
-
457
- // Mutable OpenTasks socket path (support late binding via setOpenTasksSocketPath)
458
- let configOpenTasksSocketPath = initialOpenTasksSocketPath;
459
-
460
- // Mutable mail services (support late binding via setMailServices)
461
- let mailService = initialMailService;
462
- let conversationMap = initialConversationMap;
463
-
464
- // Mutable spawn interceptor (set by TeamRuntime)
465
- let spawnInterceptor: SpawnInterceptor | null = null;
466
-
467
- // Active sessions tracked in memory
468
- const activeSessions = new Map<AgentId, ActiveSession>();
469
-
470
- // Agent workspace mappings (agentId → workspace)
471
- const agentWorkspaces = new Map<AgentId, Workspace>();
472
-
473
- // Lifecycle event listeners
474
- const lifecycleListeners = new Set<AgentLifecycleCallback>();
475
-
476
- // Shutdown guard — prevents spawns during close()
477
- let isShuttingDown = false;
478
-
479
- // ─────────────────────────────────────────────────────────────────
480
- // MCP Server Config
481
- // ─────────────────────────────────────────────────────────────────
482
-
483
- /**
484
- * Build the macro-agent MCP server config for a Claude Code agent session.
485
- * Used by spawn(), resume(), and forkAgent() to ensure every agent gets
486
- * access to the macro-agent coordination tools.
487
- */
488
- function buildMacroAgentMcp(opts: {
489
- agentId: string;
490
- parentId: string;
491
- taskId: string;
492
- cwd: string;
493
- permissionMode: string;
494
- lineage?: string[];
495
- sessionId?: string;
496
- }) {
497
- // Common env vars for both thin-client and legacy modes
498
- const env = [
499
- { name: "MACRO_AGENT_ID", value: opts.agentId },
500
- { name: "MACRO_PARENT_ID", value: opts.parentId },
501
- { name: "MACRO_TASK_ID", value: opts.taskId },
502
- { name: "MACRO_AGENT_CWD", value: opts.cwd },
503
- { name: "MACRO_PERMISSION_MODE", value: opts.permissionMode },
504
- {
505
- name: "MACRO_TASK_BACKEND",
506
- value: configTaskBackend ?? process.env.MACRO_TASK_BACKEND ?? "",
507
- },
508
- {
509
- name: "OPENTASKS_SOCKET_PATH",
510
- value: configOpenTasksSocketPath ?? process.env.OPENTASKS_SOCKET_PATH ?? "",
511
- },
512
- ];
513
-
514
- if (serverUrl) {
515
- // Thin-client mode: forward tool calls to main server via MAP WebSocket
516
- env.push(
517
- { name: "MACRO_SERVER_URL", value: serverUrl },
518
- {
519
- name: "MACRO_AGENT_LINEAGE",
520
- value: JSON.stringify(opts.lineage ?? []),
521
- },
522
- { name: "MACRO_SESSION_ID", value: opts.sessionId ?? "" },
523
- );
524
-
525
- // Auth tokens for thin-client connections
526
- if (serverToken) {
527
- env.push({ name: "MACRO_SERVER_TOKEN", value: serverToken });
528
- }
529
- if (agentTokenManager) {
530
- const agentToken = agentTokenManager.createToken(opts.agentId);
531
- env.push({ name: "MACRO_AGENT_TOKEN", value: agentToken });
532
- }
533
- } else {
534
- // Legacy mode: create local service stack with shared SQLite
535
- env.push(
536
- { name: "MACRO_INSTANCE_ID", value: eventStore.instanceId },
537
- { name: "MACRO_BASE_DIR", value: eventStore.baseDir },
538
- );
539
- }
540
-
541
- return {
542
- name: "macro-agent",
543
- command: "npx",
544
- args: ["multiagent-mcp"],
545
- env,
546
- };
547
- }
548
-
549
- // ─────────────────────────────────────────────────────────────────
550
- // Lifecycle
551
- // ─────────────────────────────────────────────────────────────────
552
-
553
- async function spawn(rawOptions: SpawnAgentOptions): Promise<SpawnedAgent> {
554
- if (isShuttingDown) {
555
- throw new AgentManagerError(
556
- "Cannot spawn agent during shutdown",
557
- "SHUTDOWN_IN_PROGRESS",
558
- );
559
- }
560
-
561
- // Apply spawn interceptor if set (used by TeamRuntime for team context injection)
562
- const options = spawnInterceptor
563
- ? await spawnInterceptor(rawOptions)
564
- : rawOptions;
565
-
566
- const {
567
- task,
568
- task_id,
569
- parent,
570
- cwd = defaultCwd,
571
- permissionMode = defaultPermissionMode,
572
- subscribeParent = true,
573
- topics = [],
574
- config: agentConfig,
575
- agentType = defaultAgentType,
576
- customPrompt,
577
- interactionPatterns,
578
- // Workspace-related fields (Phase 2)
579
- role,
580
- streamId,
581
- streamConfig,
582
- dataplaneTaskId,
583
- } = options;
584
-
585
- // Generate IDs upfront (including session_id so we can persist before starting MCP)
586
- const agentId = `agent_${nanoid(12)}`;
587
- const taskId = task_id ?? `task_${nanoid(12)}`;
588
- const sessionId = `session_${nanoid(12)}`;
589
-
590
- // Validate parent exists if specified
591
- if (parent) {
592
- const parentAgent = eventStore.getAgent(parent);
593
- if (!parentAgent) {
594
- throw new AgentManagerError(
595
- `Parent agent not found: ${parent}`,
596
- "AGENT_NOT_FOUND",
597
- parent,
598
- );
599
- }
600
-
601
- // Check spawn capability
602
- const childRole = role ?? "worker";
603
- const requiredCapability = getSpawnCapability(childRole);
604
- const parentRole = parentAgent.role ?? "worker";
605
-
606
- // Accept either the specific capability (e.g., agent.spawn.grinder)
607
- // or the generic agent.spawn.custom as a fallback for non-built-in roles
608
- const hasSpecific = roleRegistry.hasCapability(
609
- parentRole,
610
- requiredCapability,
611
- );
612
- const hasGeneric =
613
- requiredCapability !== AGENT_CAPABILITIES.SPAWN_CUSTOM &&
614
- roleRegistry.hasCapability(parentRole, AGENT_CAPABILITIES.SPAWN_CUSTOM);
615
-
616
- if (!hasSpecific && !hasGeneric) {
617
- throw new AgentManagerError(
618
- `Parent agent with role '${parentRole}' does not have capability to spawn '${childRole}' agents. ` +
619
- `Required capability: ${requiredCapability}`,
620
- "CAPABILITY_DENIED",
621
- parent,
622
- );
623
- }
624
- }
625
-
626
- // Build system prompt context
627
- const parentAgent = parent ? eventStore.getAgent(parent) : null;
628
- const promptContext: SystemPromptContext = {
629
- agentId,
630
- task,
631
- taskId,
632
- parentId: parent ?? null,
633
- isHeadManager: !parent,
634
- lineage: parentAgent?.lineage ? [...parentAgent.lineage, parent!] : [],
635
- role: role ?? "worker",
636
- mcpTools: [
637
- "done", // Listed first - most important tool for completion
638
- "spawn_agent",
639
- "emit_status",
640
- "send_message",
641
- "check_messages",
642
- "get_hierarchy",
643
- "get_agent_summary",
644
- "stop_agent",
645
- "create_task",
646
- "get_task",
647
- ],
648
- };
649
-
650
- let systemPrompt = generateSystemPrompt(promptContext);
651
-
652
- // Append role prompt: team customPrompt takes precedence over resolvedRole.systemPrompt
653
- const resolvedRole = roleRegistry.resolveRole(role ?? "worker");
654
- if (customPrompt) {
655
- systemPrompt += `\n\n# Role Instructions\n\n${customPrompt}`;
656
- } else if (resolvedRole.systemPrompt) {
657
- systemPrompt += `\n\n# Role-Specific Instructions\n\n${resolvedRole.systemPrompt}`;
658
- }
659
-
660
- // Append team interaction pattern sections (pull mode, trunk integration, etc.)
661
- if (interactionPatterns && interactionPatterns.length > 0) {
662
- for (const pattern of interactionPatterns) {
663
- systemPrompt += `\n\n${pattern}`;
664
- }
665
- }
666
-
667
- eventStore.emit({
668
- type: "spawn",
669
- source: { agent_id: parent ?? "system" },
670
- payload: {
671
- agent_id: agentId,
672
- session_id: sessionId,
673
- task,
674
- task_id: taskId,
675
- parent: parent ?? null,
676
- role: role ?? undefined,
677
- config: agentConfig ?? {},
678
- cwd,
679
- },
680
- });
681
-
682
- // Generate a human-readable default name
683
- const generatedName = uniqueNamesGenerator({
684
- dictionaries: [adjectives, animals],
685
- separator: "-",
686
- length: 2,
687
- });
688
- eventStore.updateAgentMetadata(agentId as AgentId, { name: generatedName });
689
-
690
- // Persist immediately so MCP server subprocess can read the agent
691
- await eventStore.persist();
692
-
693
- // Verify the agent is now in the store
694
- const verifyAgent = eventStore.getAgent(agentId);
695
- const allAgents = eventStore.listAgents();
696
- console.error(
697
- `[AgentManager] After persist: agent ${agentId} exists = ${!!verifyAgent}, total agents = ${allAgents.length}, instancePath = ${eventStore.instancePath}`,
698
- );
699
- console.error(
700
- `[AgentManager] All agent IDs: ${allAgents.map((a) => a.id).join(", ")}`,
701
- );
702
-
703
- try {
704
- // Spawn agent process via acp-factory
705
- const handle = await AgentFactory.spawn(agentType, {
706
- permissionMode,
707
- env: agentConfig?.env,
708
- });
709
-
710
- try {
711
- const macroAgentMcp = buildMacroAgentMcp({
712
- agentId,
713
- parentId: parent ?? "",
714
- taskId,
715
- cwd,
716
- permissionMode,
717
- lineage: parentAgent?.lineage
718
- ? [...parentAgent.lineage, parent!]
719
- : [],
720
- sessionId,
721
- });
722
-
723
- // Combine with any user-provided MCP servers
724
- // Note: Like macroAgentMcp, user MCP servers use stdio (no 'type' field)
725
- const userMcpServers =
726
- agentConfig?.mcpServers?.map((s) => ({
727
- name: s.name,
728
- command: s.command,
729
- args: s.args ?? [],
730
- env: s.env
731
- ? Object.entries(s.env).map(([name, value]) => ({ name, value }))
732
- : [],
733
- })) ?? [];
734
-
735
- // Create session with MCP servers
736
- // Note: The MCP server subprocess will start here and look for the agent
737
- // in EventStore. We already persisted the spawn event above.
738
- //
739
- // When permissionMode is "interactive", we strip settingSources so that
740
- // the Claude Code subprocess doesn't read pre-approved tool rules from
741
- // the user's ~/.claude/settings.local.json. This ensures ALL tool calls
742
- // go through the canUseTool → requestPermission ACP flow.
743
- const agentMeta =
744
- permissionMode === "interactive"
745
- ? { claudeCode: { options: { settingSources: [] } } }
746
- : undefined;
747
- const session = await handle.createSession(cwd, {
748
- mcpServers: [macroAgentMcp, ...userMcpServers],
749
- ...(agentMeta && { agentMeta }),
750
- });
751
-
752
- // Emit started status (session is ready)
753
- // Include the provider's session ID (e.g., Claude Code UUID) so
754
- // it can be used for handle.loadSession() during resume
755
- eventStore.emit({
756
- type: "status",
757
- source: { agent_id: agentId },
758
- payload: {
759
- status_type: "started",
760
- summary: "Agent session started",
761
- provider_session_id: session.id,
762
- },
763
- });
764
-
765
- // Persist the status event
766
- await eventStore.persist();
767
-
768
- // Set up default subscriptions via MessageRouter
769
- messageRouter.setupDefaultSubscriptions({
770
- agent_id: agentId,
771
- parent_id: parent ?? undefined,
772
- task_id: taskId,
773
- subscribe_parent: subscribeParent,
774
- additional_topics: topics,
775
- role: role ?? undefined,
776
- });
777
-
778
- // ─────────────────────────────────────────────────────────────────
779
- // Mail: Create task conversation for this agent
780
- // ─────────────────────────────────────────────────────────────────
781
- if (mailService && conversationMap) {
782
- try {
783
- const parentConversationId = parent
784
- ? (conversationMap.getAgentConversation(parent) ??
785
- conversationMap.getSessionConversation(parent))
786
- : undefined;
787
-
788
- const { conversationId: taskConvId } =
789
- mailService.createConversation({
790
- type: "task",
791
- subject: task?.slice(0, 80),
792
- createdBy: parent ?? agentId,
793
- parentConversationId: parentConversationId,
794
- });
795
-
796
- // Join parent and child as participants
797
- if (parent) {
798
- mailService.joinConversation({
799
- conversationId: taskConvId,
800
- participantId: parent,
801
- participantType: "agent",
802
- role: "initiator",
803
- agentId: parent,
804
- });
805
- }
806
- mailService.joinConversation({
807
- conversationId: taskConvId,
808
- participantId: agentId,
809
- participantType: "agent",
810
- role: "worker",
811
- agentId,
812
- });
813
-
814
- conversationMap.setAgentConversation(agentId, taskConvId);
815
- } catch (err) {
816
- // Never fail spawn due to mail errors
817
- console.warn(
818
- `[AgentManager] Failed to create task conversation for ${agentId}:`,
819
- err,
820
- );
821
- }
822
- }
823
-
824
- // Track active session
825
- const activeSession: ActiveSession = {
826
- agentId,
827
- handle,
828
- session,
829
- createdAt: Date.now(),
830
- isPrompting: false,
831
- };
832
- activeSessions.set(agentId, activeSession);
833
-
834
- // Get the agent from materialized view
835
- const agent = eventStore.getAgent(agentId)!;
836
-
837
- // ─────────────────────────────────────────────────────────────────
838
- // Workspace Creation (Phase 2)
839
- // ─────────────────────────────────────────────────────────────────
840
- let workspace: Workspace | undefined;
841
- let resolvedStreamId = streamId;
842
-
843
- if (workspaceManager && role) {
844
- try {
845
- workspace = await createWorkspaceForRole(
846
- workspaceManager,
847
- agentId,
848
- role,
849
- {
850
- streamId,
851
- streamConfig,
852
- dataplaneTaskId,
853
- cwd,
854
- },
855
- );
856
-
857
- if (workspace) {
858
- agentWorkspaces.set(agentId, workspace);
859
- resolvedStreamId = workspace.streamId;
860
-
861
- // Register with parent coordinator if applicable
862
- if (parent && (role === "worker" || role === "integrator")) {
863
- const parentWorkspace = agentWorkspaces.get(parent);
864
- if (parentWorkspace?.role === "coordinator") {
865
- workspaceManager.registerChildWorkspace(
866
- parent,
867
- agentId,
868
- workspace.path,
869
- );
870
- }
871
- }
872
- }
873
- } catch (wsError) {
874
- console.error(
875
- `[AgentManager] Failed to create workspace for ${agentId}: ${wsError}`,
876
- );
877
- // Continue without workspace - don't fail the spawn
878
- }
879
- }
880
-
881
- // Notify lifecycle listeners
882
- notifyLifecycle({ type: "spawned", agent });
883
- notifyLifecycle({ type: "started", agent });
884
-
885
- // Start health monitoring for coordinators
886
- if (healthCheckService && role === "coordinator") {
887
- healthCheckService.startForCoordinator(agentId);
888
- }
889
-
890
- return {
891
- id: agentId,
892
- session_id: sessionId, // Macro-agent's own session ID for ACP protocol mapping
893
- agent,
894
- session,
895
- workspace,
896
- streamId: resolvedStreamId,
897
- };
898
- } catch (handleError) {
899
- // Close the spawned process to prevent orphaning
900
- try {
901
- await handle.close();
902
- } catch {
903
- // Ignore errors during cleanup
904
- }
905
- throw handleError;
906
- }
907
- } catch (error) {
908
- // Clean up the spawn event we already emitted
909
- eventStore.emit({
910
- type: "stop",
911
- source: { agent_id: agentId },
912
- payload: {
913
- reason: "failed",
914
- },
915
- });
916
- await eventStore.persist();
917
-
918
- throw new AgentManagerError(
919
- `Failed to spawn agent: ${error}`,
920
- "SPAWN_FAILED",
921
- agentId,
922
- );
923
- }
924
- }
925
-
926
- async function terminate(
927
- agentId: AgentId,
928
- reason: AgentStopReason,
929
- ): Promise<void> {
930
- const agent = eventStore.getAgent(agentId);
931
- if (!agent) {
932
- throw new AgentManagerError(
933
- `Agent not found: ${agentId}`,
934
- "AGENT_NOT_FOUND",
935
- agentId,
936
- );
937
- }
938
-
939
- // Close active session if exists
940
- const activeSession = activeSessions.get(agentId);
941
- if (activeSession) {
942
- try {
943
- await activeSession.handle.close();
944
- } catch {
945
- // Ignore errors during cleanup
946
- }
947
- activeSessions.delete(agentId);
948
- }
949
-
950
- // Stop health monitoring for coordinators
951
- if (healthCheckService && agent.role === "coordinator") {
952
- healthCheckService.stopForCoordinator(agentId);
953
- }
954
-
955
- // ─────────────────────────────────────────────────────────────────
956
- // Workspace Cleanup (Phase 2)
957
- // ─────────────────────────────────────────────────────────────────
958
- if (workspaceManager && agentWorkspaces.has(agentId)) {
959
- try {
960
- workspaceManager.deallocateWorkspace(agentId);
961
- agentWorkspaces.delete(agentId);
962
- } catch (wsError) {
963
- console.error(
964
- `[AgentManager] Failed to deallocate workspace for ${agentId}: ${wsError}`,
965
- );
966
- // Continue with termination even if workspace cleanup fails
967
- }
968
- }
969
-
970
- // Revoke agent authentication token
971
- if (agentTokenManager) {
972
- agentTokenManager.revokeToken(agentId);
973
- }
974
-
975
- // ─────────────────────────────────────────────────────────────────
976
- // Mail: Close task conversation on terminate
977
- // ─────────────────────────────────────────────────────────────────
978
- if (mailService && conversationMap) {
979
- try {
980
- const convId = conversationMap.getAgentConversation(agentId);
981
- if (convId) {
982
- mailService.closeConversation({
983
- conversationId: convId,
984
- closedBy: agentId,
985
- reason: reason === "completed" ? "completed" : "failed",
986
- });
987
- }
988
- // Close any peer conversations
989
- const peerConvIds = conversationMap.closePeerConversationsFor(agentId);
990
- for (const peerConvId of peerConvIds) {
991
- mailService.closeConversation({
992
- conversationId: peerConvId,
993
- closedBy: agentId,
994
- reason: "participant_left",
995
- });
996
- }
997
- conversationMap.removeAgent(agentId);
998
- } catch (err) {
999
- console.warn(
1000
- `[AgentManager] Failed to close conversation for ${agentId}:`,
1001
- err,
1002
- );
1003
- }
1004
- }
1005
-
1006
- // Emit stop event
1007
- eventStore.emit({
1008
- type: "stop",
1009
- source: { agent_id: agentId },
1010
- payload: {
1011
- agent_id: agentId,
1012
- reason,
1013
- },
1014
- });
1015
-
1016
- // If agent had a task, update task status based on reason
1017
- if (agent.task_id) {
1018
- const taskStatus =
1019
- reason === "completed"
1020
- ? "completed"
1021
- : reason === "failed"
1022
- ? "failed"
1023
- : "pending";
1024
-
1025
- eventStore.emit({
1026
- type: "task",
1027
- source: { agent_id: agentId },
1028
- payload: {
1029
- task_id: agent.task_id,
1030
- action: reason === "completed" ? "completed" : "status_change",
1031
- details: { status: taskStatus },
1032
- },
1033
- });
1034
- }
1035
-
1036
- // Persist events to SQLite for cross-process visibility
1037
- await eventStore.persist();
1038
-
1039
- // Notify lifecycle listeners
1040
- const updatedAgent = eventStore.getAgent(agentId)!;
1041
- notifyLifecycle({ type: "stopped", agent: updatedAgent, reason });
1042
-
1043
- // Terminate child agents when parent stops (always cascade)
1044
- // Use change consolidation to merge child branches back to parent before terminating
1045
- const children = getChildren(agentId);
1046
- const parentWorkspace = agentWorkspaces.get(agentId);
1047
-
1048
- for (const child of children) {
1049
- if (child.state === "running" || child.state === "spawning") {
1050
- // Create workspace provider for change consolidation
1051
- const workspaceProvider: WorkspaceProvider | undefined = parentWorkspace
1052
- ? {
1053
- getWorkspace: (id: AgentId) => agentWorkspaces.get(id) ?? null,
1054
- }
1055
- : undefined;
1056
-
1057
- // Create cascade adapter for termination
1058
- const cascadeAdapter: CascadeAgentManager = {
1059
- getChildren: (id) =>
1060
- getChildren(id).map((c) => ({
1061
- id: c.id,
1062
- state: c.state,
1063
- parent: c.parent,
1064
- })),
1065
- terminate: async (id, terminateReason) => {
1066
- await terminate(id, terminateReason as AgentStopReason);
1067
- },
1068
- };
1069
-
1070
- // Use terminateWithChangeConsolidation to merge changes before terminating
1071
- await terminateWithChangeConsolidation(
1072
- child.id,
1073
- agentId,
1074
- cascadeAdapter,
1075
- workspaceProvider,
1076
- );
1077
- }
1078
- }
1079
- }
1080
-
1081
- async function resume(
1082
- agentId: AgentId,
1083
- overridePermissionMode?: PermissionMode,
1084
- ): Promise<SpawnedAgent> {
1085
- if (isShuttingDown) {
1086
- throw new AgentManagerError(
1087
- "Cannot resume agent during shutdown",
1088
- "SHUTDOWN_IN_PROGRESS",
1089
- agentId,
1090
- );
1091
- }
1092
-
1093
- const agent = eventStore.getAgent(agentId);
1094
- if (!agent) {
1095
- throw new AgentManagerError(
1096
- `Agent not found: ${agentId}`,
1097
- "AGENT_NOT_FOUND",
1098
- agentId,
1099
- );
1100
- }
1101
-
1102
- // Check if already running
1103
- if (activeSessions.has(agentId)) {
1104
- throw new AgentManagerError(
1105
- `Agent already has active session: ${agentId}`,
1106
- "ALREADY_RUNNING",
1107
- agentId,
1108
- );
1109
- }
1110
-
1111
- const permissionMode = overridePermissionMode ?? defaultPermissionMode;
1112
-
1113
- // Spawn new process
1114
- const handle = await AgentFactory.spawn(defaultAgentType, {
1115
- permissionMode,
1116
- });
1117
-
1118
- try {
1119
- const agentCwd = agent.cwd ?? defaultCwd;
1120
- let session;
1121
-
1122
- // When interactive mode, strip settings to prevent auto-approval
1123
- const resumeAgentMeta =
1124
- permissionMode === "interactive"
1125
- ? { claudeCode: { options: { settingSources: [] } } }
1126
- : undefined;
1127
-
1128
- const macroAgentMcp = buildMacroAgentMcp({
1129
- agentId,
1130
- parentId: agent.parent ?? "",
1131
- taskId: agent.task_id ?? "",
1132
- cwd: agentCwd,
1133
- permissionMode,
1134
- lineage: agent.lineage ?? [],
1135
- sessionId: agent.session_id ?? "",
1136
- });
1137
- const mcpServers = [macroAgentMcp];
1138
-
1139
- if (agent.provider_session_id) {
1140
- // Load existing session using the provider's session ID (e.g., Claude Code UUID)
1141
- // Note: loadSession's TS type for mcpServers is { name, uri }[] but
1142
- // the underlying ACP protocol accepts full McpServerStdio. The JS
1143
- // implementation passes mcpServers through to the connection unchanged.
1144
- session = await handle.loadSession(
1145
- agent.provider_session_id,
1146
- agentCwd,
1147
- mcpServers as any,
1148
- resumeAgentMeta ? { agentMeta: resumeAgentMeta } : undefined,
1149
- );
1150
- } else {
1151
- // No provider session ID available (agent predates this feature or wasn't persisted).
1152
- // Create a new session instead of loading with the macro-agent session_id
1153
- // which is not a valid provider session ID (e.g., Claude Code expects UUIDs).
1154
- session = await handle.createSession(agentCwd, {
1155
- mcpServers,
1156
- ...(resumeAgentMeta && { agentMeta: resumeAgentMeta }),
1157
- });
1158
-
1159
- // Store the provider session ID for future resumes
1160
- eventStore.emit({
1161
- type: "status",
1162
- source: { agent_id: agentId },
1163
- payload: {
1164
- status_type: "started",
1165
- summary: "Agent session created (no provider session to resume)",
1166
- provider_session_id: session.id,
1167
- },
1168
- });
1169
- }
1170
-
1171
- // Track active session
1172
- const activeSession: ActiveSession = {
1173
- agentId,
1174
- handle,
1175
- session,
1176
- createdAt: Date.now(),
1177
- isPrompting: false,
1178
- };
1179
- activeSessions.set(agentId, activeSession);
1180
-
1181
- // Emit status event for resume
1182
- eventStore.emit({
1183
- type: "status",
1184
- source: { agent_id: agentId },
1185
- payload: {
1186
- status_type: "started",
1187
- summary: "Agent session resumed",
1188
- provider_session_id: session.id,
1189
- },
1190
- });
1191
-
1192
- return {
1193
- id: agentId,
1194
- session_id: agent.session_id, // Macro-agent's own session ID
1195
- agent: eventStore.getAgent(agentId)!,
1196
- session,
1197
- };
1198
- } catch (handleError) {
1199
- // Close the spawned process to prevent orphaning
1200
- try {
1201
- await handle.close();
1202
- } catch {
1203
- // Ignore errors during cleanup
1204
- }
1205
- throw handleError;
1206
- }
1207
- }
1208
-
1209
- // ─────────────────────────────────────────────────────────────────
1210
- // Fork
1211
- // ─────────────────────────────────────────────────────────────────
1212
-
1213
- async function forkAgent(
1214
- sourceAgentId: AgentId,
1215
- options?: { name?: string; prompt?: string; cwd?: string },
1216
- ): Promise<SpawnedAgent> {
1217
- if (isShuttingDown) {
1218
- throw new AgentManagerError(
1219
- "Cannot fork agent during shutdown",
1220
- "SHUTDOWN_IN_PROGRESS",
1221
- sourceAgentId,
1222
- );
1223
- }
1224
-
1225
- const sourceAgent = eventStore.getAgent(sourceAgentId);
1226
- if (!sourceAgent) {
1227
- throw new AgentManagerError(
1228
- `Agent not found: ${sourceAgentId}`,
1229
- "AGENT_NOT_FOUND",
1230
- sourceAgentId,
1231
- );
1232
- }
1233
-
1234
- // Need either an active session or a persisted provider_session_id
1235
- const activeSession = activeSessions.get(sourceAgentId);
1236
- if (!activeSession && !sourceAgent.provider_session_id) {
1237
- throw new AgentManagerError(
1238
- `Agent has no session to fork: ${sourceAgentId}`,
1239
- "FORK_NOT_SUPPORTED",
1240
- sourceAgentId,
1241
- );
1242
- }
1243
-
1244
- // Generate new IDs
1245
- const agentId = `agent_${nanoid(12)}`;
1246
- const taskId = `task_${nanoid(12)}`;
1247
- const sessionId = `session_${nanoid(12)}`;
1248
- const cwd = options?.cwd ?? sourceAgent.cwd ?? defaultCwd;
1249
-
1250
- // Emit spawn event with fork metadata
1251
- eventStore.emit({
1252
- type: "spawn",
1253
- source: { agent_id: sourceAgentId },
1254
- payload: {
1255
- agent_id: agentId,
1256
- session_id: sessionId,
1257
- task: options?.name ?? `[Fork of ${sourceAgentId}]`,
1258
- task_id: taskId,
1259
- parent: sourceAgent.parent ?? null,
1260
- role: sourceAgent.role ?? undefined,
1261
- config: {},
1262
- cwd,
1263
- metadata: { fork_of: sourceAgentId },
1264
- },
1265
- });
1266
-
1267
- // Generate a human-readable name
1268
- const generatedName = uniqueNamesGenerator({
1269
- dictionaries: [adjectives, animals],
1270
- separator: "-",
1271
- length: 2,
1272
- });
1273
- eventStore.updateAgentMetadata(agentId as AgentId, { name: generatedName });
1274
- await eventStore.persist();
1275
-
1276
- // Get the provider session ID to fork from
1277
- let forkedProviderSessionId: string;
1278
- if (activeSession) {
1279
- // Active session: fork with flush to ensure data is persisted
1280
- const forkedSession = await activeSession.session.forkWithFlush();
1281
- forkedProviderSessionId = forkedSession.id;
1282
- } else {
1283
- // Stopped agent: use the persisted provider session ID directly
1284
- forkedProviderSessionId = sourceAgent.provider_session_id!;
1285
- }
1286
-
1287
- // Spawn a new process
1288
- const handle = await AgentFactory.spawn(defaultAgentType, {
1289
- permissionMode: defaultPermissionMode,
1290
- });
1291
-
1292
- try {
1293
- const macroAgentMcp = buildMacroAgentMcp({
1294
- agentId,
1295
- parentId: sourceAgent.parent ?? "",
1296
- taskId,
1297
- cwd,
1298
- permissionMode: defaultPermissionMode,
1299
- lineage: sourceAgent.lineage ?? [],
1300
- sessionId,
1301
- });
1302
-
1303
- // Load the forked session on the new process with correct MCP config.
1304
- // Note: loadSession's TS type for mcpServers is { name, uri }[] but
1305
- // the underlying ACP protocol accepts full McpServerStdio. The JS
1306
- // implementation passes mcpServers through to the connection unchanged.
1307
- const session = await handle.loadSession(forkedProviderSessionId, cwd, [
1308
- macroAgentMcp,
1309
- ] as any);
1310
-
1311
- // Emit started status with provider session ID
1312
- eventStore.emit({
1313
- type: "status",
1314
- source: { agent_id: agentId },
1315
- payload: {
1316
- status_type: "started",
1317
- summary: "Agent session started (forked)",
1318
- provider_session_id: session.id,
1319
- },
1320
- });
1321
- await eventStore.persist();
1322
-
1323
- // Set up message router subscriptions
1324
- messageRouter.setupDefaultSubscriptions({
1325
- agent_id: agentId,
1326
- parent_id: sourceAgent.parent ?? undefined,
1327
- task_id: taskId,
1328
- subscribe_parent: false,
1329
- additional_topics: [],
1330
- role: sourceAgent.role ?? undefined,
1331
- });
1332
-
1333
- // Track active session
1334
- const newActiveSession: ActiveSession = {
1335
- agentId,
1336
- handle,
1337
- session,
1338
- createdAt: Date.now(),
1339
- isPrompting: false,
1340
- };
1341
- activeSessions.set(agentId, newActiveSession);
1342
-
1343
- const agent = eventStore.getAgent(agentId)!;
1344
- notifyLifecycle({ type: "spawned", agent });
1345
- notifyLifecycle({ type: "started", agent });
1346
-
1347
- return {
1348
- id: agentId,
1349
- session_id: sessionId,
1350
- agent,
1351
- session,
1352
- };
1353
- } catch (handleError) {
1354
- try {
1355
- await handle.close();
1356
- } catch {
1357
- // Ignore errors during cleanup
1358
- }
1359
- throw handleError;
1360
- }
1361
- }
1362
-
1363
- // ─────────────────────────────────────────────────────────────────
1364
- // Queries
1365
- // ─────────────────────────────────────────────────────────────────
1366
-
1367
- function get(agentId: AgentId): Agent | null {
1368
- return eventStore.getAgent(agentId);
1369
- }
1370
-
1371
- function list(filter?: AgentFilter): Agent[] {
1372
- let agents = eventStore.listAgents();
1373
-
1374
- if (filter) {
1375
- if (filter.state) {
1376
- agents = agents.filter((a) => a.state === filter.state);
1377
- }
1378
- if (filter.parent !== undefined) {
1379
- agents = agents.filter((a) => a.parent === filter.parent);
1380
- }
1381
- if (filter.task_id) {
1382
- agents = agents.filter((a) => a.task_id === filter.task_id);
1383
- }
1384
- if (filter.headManagersOnly) {
1385
- agents = agents.filter((a) => a.parent === null);
1386
- }
1387
- }
1388
-
1389
- return agents;
1390
- }
1391
-
1392
- function getChildren(agentId: AgentId): Agent[] {
1393
- return eventStore.listAgents({ parent: agentId });
1394
- }
1395
-
1396
- function getHierarchy(
1397
- agentId: AgentId,
1398
- options?: HierarchyOptions,
1399
- ): AgentHierarchy | null {
1400
- const agent = eventStore.getAgent(agentId);
1401
- if (!agent) return null;
1402
-
1403
- const maxDepth = options?.depth;
1404
-
1405
- function buildNode(a: Agent, currentDepth: number): AgentHierarchyNode {
1406
- const shouldIncludeChildren =
1407
- maxDepth === undefined || currentDepth < maxDepth;
1408
- const children = shouldIncludeChildren ? getChildren(a.id) : [];
1409
- return {
1410
- agent: a,
1411
- children: children.map((c) => buildNode(c, currentDepth + 1)),
1412
- };
1413
- }
1414
-
1415
- const root = buildNode(agent, 1);
1416
-
1417
- // Calculate depth and total agents
1418
- function calcDepth(node: AgentHierarchyNode): number {
1419
- if (node.children.length === 0) return 1;
1420
- return 1 + Math.max(...node.children.map(calcDepth));
1421
- }
1422
-
1423
- function countAgents(node: AgentHierarchyNode): number {
1424
- return 1 + node.children.reduce((sum, c) => sum + countAgents(c), 0);
1425
- }
1426
-
1427
- return {
1428
- root,
1429
- depth: calcDepth(root),
1430
- totalAgents: countAgents(root),
1431
- };
1432
- }
1433
-
1434
- // ─────────────────────────────────────────────────────────────────
1435
- // Head Manager
1436
- // ─────────────────────────────────────────────────────────────────
1437
-
1438
- async function getOrCreateHeadManager(
1439
- options: HeadManagerOptions,
1440
- ): Promise<SpawnedAgent> {
1441
- const {
1442
- cwd,
1443
- systemPrompt,
1444
- permissionMode,
1445
- topics = [],
1446
- sessionId,
1447
- forceNew = false,
1448
- } = options;
1449
-
1450
- // If not forcing new, attempt to resume an existing session
1451
- if (!forceNew) {
1452
- const headManagers = listHeadManagers()
1453
- .filter((h) => h.state === "running")
1454
- .sort((a, b) => {
1455
- // Sort by started_at descending, then by created_at descending as tiebreaker
1456
- const startDiff = (b.started_at ?? 0) - (a.started_at ?? 0);
1457
- if (startDiff !== 0) return startDiff;
1458
- return b.created_at - a.created_at;
1459
- });
1460
-
1461
- if (sessionId) {
1462
- // Resume specific session by ID
1463
- const specific = headManagers.find((h) => h.session_id === sessionId);
1464
- if (specific && activeSessions.has(specific.id)) {
1465
- const activeSession = activeSessions.get(specific.id)!;
1466
- return {
1467
- id: specific.id,
1468
- session_id: specific.session_id,
1469
- agent: specific,
1470
- session: activeSession.session,
1471
- };
1472
- }
1473
- } else if (headManagers.length > 0) {
1474
- // Resume latest running session with active session
1475
- const latest = headManagers[0];
1476
- if (activeSessions.has(latest.id)) {
1477
- const activeSession = activeSessions.get(latest.id)!;
1478
- return {
1479
- id: latest.id,
1480
- session_id: latest.session_id,
1481
- agent: latest,
1482
- session: activeSession.session,
1483
- };
1484
- }
1485
- }
1486
- }
1487
-
1488
- // No existing session found or forceNew requested - create new
1489
- return spawn({
1490
- task:
1491
- systemPrompt ??
1492
- "You are a head manager agent. Coordinate tasks and spawn child agents as needed.",
1493
- parent: null,
1494
- cwd,
1495
- permissionMode,
1496
- topics,
1497
- subscribeParent: false,
1498
- });
1499
- }
1500
-
1501
- function listHeadManagers(): Agent[] {
1502
- return list({ headManagersOnly: true });
1503
- }
1504
-
1505
- // ─────────────────────────────────────────────────────────────────
1506
- // Session Interaction
1507
- // ─────────────────────────────────────────────────────────────────
1508
-
1509
- async function* prompt(
1510
- agentId: AgentId,
1511
- message: string,
1512
- ): AsyncIterable<ExtendedSessionUpdate> {
1513
- const activeSession = activeSessions.get(agentId);
1514
- if (!activeSession) {
1515
- throw new AgentManagerError(
1516
- `No active session for agent: ${agentId}`,
1517
- "SESSION_NOT_FOUND",
1518
- agentId,
1519
- );
1520
- }
1521
-
1522
- activeSession.isPrompting = true;
1523
-
1524
- try {
1525
- for await (const update of activeSession.session.prompt(message)) {
1526
- yield update;
1527
- }
1528
- } finally {
1529
- activeSession.isPrompting = false;
1530
- }
1531
- }
1532
-
1533
- /**
1534
- * Prompt an agent and automatically follow up to ensure done() is called.
1535
- */
1536
- async function promptUntilDone(
1537
- agentId: AgentId,
1538
- message: string,
1539
- options?: {
1540
- maxFollowUps?: number;
1541
- throwOnMaxExceeded?: boolean;
1542
- onUpdate?: (update: ExtendedSessionUpdate) => void;
1543
- },
1544
- ): Promise<{
1545
- doneCalled: boolean;
1546
- doneStatus?: string;
1547
- exceededMax: boolean;
1548
- followUpCount: number;
1549
- updates: ExtendedSessionUpdate[];
1550
- }> {
1551
- const maxFollowUps = options?.maxFollowUps ?? 2;
1552
- const throwOnMaxExceeded = options?.throwOnMaxExceeded ?? false;
1553
- const onUpdate = options?.onUpdate;
1554
- const allUpdates: ExtendedSessionUpdate[] = [];
1555
- let followUpCount = 0;
1556
-
1557
- // Helper to check if done() was called by looking for status events
1558
- // The done() MCP tool emits status events with status_type completed/failed
1559
- // and includes signal: "WORKER_DONE" in the details
1560
- const checkDoneCalled = async (): Promise<{
1561
- called: boolean;
1562
- status?: string;
1563
- }> => {
1564
- // Reload from disk to see events from MCP subprocess
1565
- await eventStore.reload();
1566
- const statusEvents = eventStore.query({ type: "status" });
1567
-
1568
- // Look for status events from this agent that indicate completion
1569
- const agentCompletedStatus = statusEvents.find(
1570
- (e) =>
1571
- e.source?.agent_id === agentId &&
1572
- (e.payload?.status_type === "completed" ||
1573
- e.payload?.status_type === "failed" ||
1574
- (e.payload?.details as Record<string, unknown>)?.signal ===
1575
- "WORKER_DONE"),
1576
- );
1577
-
1578
- if (agentCompletedStatus) {
1579
- return {
1580
- called: true,
1581
- status: agentCompletedStatus.payload?.status_type as string,
1582
- };
1583
- }
1584
-
1585
- return { called: false };
1586
- };
1587
-
1588
- // Initial prompt
1589
- for await (const update of prompt(agentId, message)) {
1590
- allUpdates.push(update);
1591
- onUpdate?.(update);
1592
- }
1593
-
1594
- // Check if done() was called
1595
- let doneResult = await checkDoneCalled();
1596
- if (doneResult.called) {
1597
- return {
1598
- doneCalled: true,
1599
- doneStatus: doneResult.status,
1600
- exceededMax: false,
1601
- followUpCount: 0,
1602
- updates: allUpdates,
1603
- };
1604
- }
1605
-
1606
- // Follow-up prompts
1607
- const followUpMessages = [
1608
- `Your work appears complete, but you haven't called done() yet. Please call done() now with your completion status.
1609
-
1610
- Example: done({ status: "completed", summary: "Brief description of what you accomplished" })
1611
-
1612
- If you're blocked or need help, call: done({ status: "blocked", summary: "What you need help with" })`,
1613
-
1614
- `IMPORTANT: You MUST call the done() tool to signal completion. This is required for proper cleanup.
1615
-
1616
- Call done() NOW with status "completed" if your work is finished, or "blocked" if you need assistance.`,
1617
- ];
1618
-
1619
- for (let i = 0; i < maxFollowUps; i++) {
1620
- followUpCount++;
1621
- const followUpMessage =
1622
- followUpMessages[Math.min(i, followUpMessages.length - 1)];
1623
-
1624
- // Send follow-up prompt
1625
- for await (const update of prompt(agentId, followUpMessage)) {
1626
- allUpdates.push(update);
1627
- onUpdate?.(update);
1628
- }
1629
-
1630
- // Check again
1631
- doneResult = await checkDoneCalled();
1632
- if (doneResult.called) {
1633
- return {
1634
- doneCalled: true,
1635
- doneStatus: doneResult.status,
1636
- exceededMax: false,
1637
- followUpCount,
1638
- updates: allUpdates,
1639
- };
1640
- }
1641
- }
1642
-
1643
- // done() was never called after max follow-ups
1644
- if (throwOnMaxExceeded) {
1645
- throw new Error(
1646
- `Agent ${agentId} did not call done() after ${maxFollowUps} follow-up attempts. ` +
1647
- `Total prompts sent: ${1 + followUpCount}. Consider increasing maxFollowUps or investigating agent behavior.`,
1648
- );
1649
- }
1650
-
1651
- return {
1652
- doneCalled: false,
1653
- exceededMax: true,
1654
- followUpCount,
1655
- updates: allUpdates,
1656
- };
1657
- }
1658
-
1659
- function getSession(agentId: AgentId): Session | null {
1660
- const activeSession = activeSessions.get(agentId);
1661
- return activeSession?.session ?? null;
1662
- }
1663
-
1664
- function hasActiveSession(agentId: AgentId): boolean {
1665
- return activeSessions.has(agentId);
1666
- }
1667
-
1668
- function isPrompting(agentId: AgentId): boolean {
1669
- const activeSession = activeSessions.get(agentId);
1670
- return activeSession?.isPrompting ?? false;
1671
- }
1672
-
1673
- async function supportsInjection(agentId: AgentId): Promise<boolean> {
1674
- const session = getSession(agentId);
1675
- if (!session) {
1676
- return false;
1677
- }
1678
- // Check if the session supports injection
1679
- // Uses acp-factory's supportsInject() which returns cached/estimated result
1680
- try {
1681
- return session.supportsInject();
1682
- } catch {
1683
- return false;
1684
- }
1685
- }
1686
-
1687
- function isProcessRunning(agentId: AgentId): boolean {
1688
- const activeSession = activeSessions.get(agentId);
1689
- if (!activeSession) {
1690
- return false;
1691
- }
1692
- return activeSession.handle.isRunning();
1693
- }
1694
-
1695
- // ─────────────────────────────────────────────────────────────────
1696
- // Permission Handling
1697
- // ─────────────────────────────────────────────────────────────────
1698
-
1699
- function respondToPermission(
1700
- agentId: AgentId,
1701
- requestId: string,
1702
- optionId: string,
1703
- ): boolean {
1704
- const activeSession = activeSessions.get(agentId);
1705
- if (!activeSession) {
1706
- console.warn(
1707
- `[AgentManager] Cannot respond to permission: no active session for agent ${agentId}`,
1708
- );
1709
- return false;
1710
- }
1711
-
1712
- try {
1713
- activeSession.session.respondToPermission(requestId, optionId);
1714
- console.log(
1715
- `[AgentManager] Responded to permission ${requestId} for agent ${agentId} with ${optionId}`,
1716
- );
1717
- return true;
1718
- } catch (err) {
1719
- console.error(
1720
- `[AgentManager] Error responding to permission ${requestId}:`,
1721
- err,
1722
- );
1723
- return false;
1724
- }
1725
- }
1726
-
1727
- function cancelPermission(agentId: AgentId, requestId: string): boolean {
1728
- const activeSession = activeSessions.get(agentId);
1729
- if (!activeSession) {
1730
- console.warn(
1731
- `[AgentManager] Cannot cancel permission: no active session for agent ${agentId}`,
1732
- );
1733
- return false;
1734
- }
1735
-
1736
- try {
1737
- activeSession.session.cancelPermission(requestId);
1738
- console.log(
1739
- `[AgentManager] Cancelled permission ${requestId} for agent ${agentId}`,
1740
- );
1741
- return true;
1742
- } catch (err) {
1743
- console.error(
1744
- `[AgentManager] Error cancelling permission ${requestId}:`,
1745
- err,
1746
- );
1747
- return false;
1748
- }
1749
- }
1750
-
1751
- function setPermissionMode(agentId: AgentId, mode: PermissionMode): boolean {
1752
- const activeSession = activeSessions.get(agentId);
1753
- if (!activeSession) {
1754
- console.warn(
1755
- `[AgentManager] Cannot set permission mode: no active session for agent ${agentId}`,
1756
- );
1757
- return false;
1758
- }
1759
-
1760
- try {
1761
- activeSession.handle.setPermissionMode(mode);
1762
- console.log(
1763
- `[AgentManager] Set permission mode for agent ${agentId} to ${mode}`,
1764
- );
1765
- return true;
1766
- } catch (err) {
1767
- console.error(
1768
- `[AgentManager] Error setting permission mode for agent ${agentId}:`,
1769
- err,
1770
- );
1771
- return false;
1772
- }
1773
- }
1774
-
1775
- function getPermissionMode(agentId: AgentId): PermissionMode | null {
1776
- const activeSession = activeSessions.get(agentId);
1777
- if (!activeSession) {
1778
- return null;
1779
- }
1780
- return activeSession.handle.getPermissionMode();
1781
- }
1782
-
1783
- // ─────────────────────────────────────────────────────────────────
1784
- // Lifecycle Callbacks
1785
- // ─────────────────────────────────────────────────────────────────
1786
-
1787
- function onLifecycleEvent(callback: AgentLifecycleCallback): () => void {
1788
- lifecycleListeners.add(callback);
1789
- return () => lifecycleListeners.delete(callback);
1790
- }
1791
-
1792
- function notifyLifecycle(event: Parameters<AgentLifecycleCallback>[0]): void {
1793
- for (const listener of lifecycleListeners) {
1794
- try {
1795
- listener(event);
1796
- } catch {
1797
- // Ignore listener errors
1798
- }
1799
- }
1800
- }
1801
-
1802
- // ─────────────────────────────────────────────────────────────────
1803
- // OpenTasks Socket Path (Late Binding)
1804
- // ─────────────────────────────────────────────────────────────────
1805
-
1806
- function setOpenTasksSocketPath(socketPath: string): void {
1807
- configOpenTasksSocketPath = socketPath;
1808
- }
1809
-
1810
- // ─────────────────────────────────────────────────────────────────
1811
- // Mail Services (Late Binding)
1812
- // ─────────────────────────────────────────────────────────────────
1813
-
1814
- function setMailServices(
1815
- ms: import("../mail/mail-service.js").MailService,
1816
- cm: import("../mail/conversation-map.js").ConversationMap,
1817
- ): void {
1818
- mailService = ms;
1819
- conversationMap = cm;
1820
- }
1821
-
1822
- // ─────────────────────────────────────────────────────────────────
1823
- // Cleanup
1824
- // ─────────────────────────────────────────────────────────────────
1825
-
1826
- async function close(): Promise<void> {
1827
- // Prevent new spawns/resumes from racing with cleanup
1828
- isShuttingDown = true;
1829
-
1830
- // Stop all health checks
1831
- if (healthCheckService) {
1832
- healthCheckService.stopAll();
1833
- }
1834
-
1835
- // Close all active sessions
1836
- const closePromises: Promise<void>[] = [];
1837
- for (const [agentId, session] of activeSessions) {
1838
- closePromises.push(
1839
- (async () => {
1840
- try {
1841
- await session.handle.close();
1842
- } catch {
1843
- // Ignore errors during cleanup
1844
- }
1845
- })(),
1846
- );
1847
- }
1848
-
1849
- await Promise.all(closePromises);
1850
- activeSessions.clear();
1851
- lifecycleListeners.clear();
1852
- }
1853
-
1854
- function setSpawnInterceptor(interceptor: SpawnInterceptor | null): void {
1855
- spawnInterceptor = interceptor;
1856
- }
1857
-
1858
- function getRoleRegistry(): RoleRegistry {
1859
- return roleRegistry;
1860
- }
1861
-
1862
- /**
1863
- * Continue a terminated agent by spawning a new agent with the same
1864
- * role and task, injecting prior conversation context as a resume prefix.
1865
- */
1866
- async function continueAgent(
1867
- agentId: AgentId,
1868
- options?: ContinueAgentOptions,
1869
- ): Promise<SpawnedAgent> {
1870
- const agent = eventStore.getAgent(agentId);
1871
- if (!agent) {
1872
- throw new AgentManagerError(
1873
- `Agent not found: ${agentId}`,
1874
- "AGENT_NOT_FOUND",
1875
- agentId,
1876
- );
1877
- }
1878
-
1879
- // Build resume context from EventStore events
1880
- const maxMessages = options?.maxMessages ?? 50;
1881
- const events = eventStore.query({
1882
- type: "status",
1883
- source_agent_id: agentId,
1884
- limit: maxMessages,
1885
- });
1886
-
1887
- // Format conversation turns as resume context
1888
- const contextLines: string[] = [];
1889
- if (options?.additionalContext) {
1890
- contextLines.push(options.additionalContext);
1891
- }
1892
-
1893
- if (events.length > 0) {
1894
- contextLines.push("## Prior Session Context");
1895
- contextLines.push(
1896
- `Continuing from agent ${agentId} (${events.length} events).`,
1897
- );
1898
- for (const event of events.slice(-20)) {
1899
- const summary = event.payload?.summary;
1900
- if (summary && typeof summary === "string") {
1901
- contextLines.push(`- ${summary}`);
1902
- }
1903
- }
1904
- }
1905
-
1906
- const resumeContext = contextLines.join("\n");
1907
-
1908
- // Spawn a continuation agent with same role, task, and context
1909
- const taskDescription =
1910
- options?.task ?? agent.task ?? `Continue work from ${agentId}`;
1911
-
1912
- const newAgent = await spawn({
1913
- task: taskDescription,
1914
- role: agent.role,
1915
- parent: agent.parent ?? undefined,
1916
- cwd: agent.cwd ?? defaultCwd,
1917
- customPrompt: resumeContext || undefined,
1918
- });
1919
-
1920
- // Emit continuation event
1921
- eventStore.emit({
1922
- type: "status",
1923
- source: { agent_id: newAgent.id },
1924
- payload: {
1925
- status_type: "started",
1926
- summary: `Continuation of agent ${agentId}`,
1927
- continuation_of: agentId,
1928
- },
1929
- });
1930
-
1931
- return newAgent;
1932
- }
1933
-
1934
- return {
1935
- spawn,
1936
- terminate,
1937
- resume,
1938
- continueAgent,
1939
- forkAgent,
1940
- get,
1941
- list,
1942
- getChildren,
1943
- getHierarchy,
1944
- getOrCreateHeadManager,
1945
- listHeadManagers,
1946
- prompt,
1947
- promptUntilDone,
1948
- getSession,
1949
- hasActiveSession,
1950
- isPrompting,
1951
- supportsInjection,
1952
- isProcessRunning,
1953
- respondToPermission,
1954
- cancelPermission,
1955
- setPermissionMode,
1956
- getPermissionMode,
1957
- onLifecycleEvent,
1958
- setSpawnInterceptor,
1959
- getRoleRegistry,
1960
- setOpenTasksSocketPath,
1961
- setMailServices,
1962
- close,
1963
- };
1964
- }
1965
-
1966
- // ─────────────────────────────────────────────────────────────────
1967
- // Workspace Creation Helper (Phase 2)
369
+ // Re-export V2 implementation as createAgentManager for backward compat
1968
370
  // ─────────────────────────────────────────────────────────────────
1969
371
 
1970
- interface CreateWorkspaceOptions {
1971
- streamId?: string;
1972
- streamConfig?: import("../workspace/types.js").StreamConfig;
1973
- dataplaneTaskId?: string;
1974
- cwd: string;
1975
- }
1976
-
1977
- /**
1978
- * Create a workspace for an agent based on their role.
1979
- *
1980
- * @param workspaceManager - WorkspaceManager instance
1981
- * @param agentId - Agent ID
1982
- * @param role - Agent role (e.g., 'worker', 'coordinator', 'integrator')
1983
- * @param options - Additional options
1984
- * @returns Created workspace or undefined
1985
- */
1986
- async function createWorkspaceForRole(
1987
- workspaceManager: WorkspaceManager,
1988
- agentId: AgentId,
1989
- role: string,
1990
- options: CreateWorkspaceOptions,
1991
- ): Promise<Workspace | undefined> {
1992
- const { streamId, streamConfig, dataplaneTaskId } = options;
1993
-
1994
- switch (role) {
1995
- case "coordinator": {
1996
- // Coordinators create a new integration stream
1997
- if (!streamConfig) {
1998
- console.warn(
1999
- `[AgentManager] Coordinator ${agentId} spawn missing streamConfig, skipping workspace`,
2000
- );
2001
- return undefined;
2002
- }
2003
-
2004
- const newStreamId = workspaceManager.createIntegrationStream(
2005
- agentId,
2006
- streamConfig,
2007
- );
2008
-
2009
- return workspaceManager.createCoordinatorWorkspace(agentId, newStreamId);
2010
- }
2011
-
2012
- case "integrator": {
2013
- // Integrators join an existing stream
2014
- if (!streamId) {
2015
- console.warn(
2016
- `[AgentManager] Integrator ${agentId} spawn missing streamId, skipping workspace`,
2017
- );
2018
- return undefined;
2019
- }
2020
-
2021
- return workspaceManager.createIntegratorWorkspace(agentId, streamId);
2022
- }
2023
-
2024
- case "worker":
2025
- case "worker.resolver": {
2026
- // Workers need streamId and either dataplaneTaskId or create a new task
2027
- if (!streamId) {
2028
- console.warn(
2029
- `[AgentManager] Worker ${agentId} spawn missing streamId, skipping workspace`,
2030
- );
2031
- return undefined;
2032
- }
2033
-
2034
- // Use provided task ID or skip (task should be created separately)
2035
- const taskId = dataplaneTaskId;
2036
- if (!taskId) {
2037
- console.warn(
2038
- `[AgentManager] Worker ${agentId} spawn missing dataplaneTaskId, skipping workspace`,
2039
- );
2040
- return undefined;
2041
- }
2042
-
2043
- return workspaceManager.createWorkerWorkspace(agentId, taskId, streamId);
2044
- }
2045
-
2046
- case "monitor":
2047
- // Monitors don't need workspaces
2048
- return undefined;
2049
-
2050
- default:
2051
- // Unknown role - no workspace
2052
- return undefined;
2053
- }
2054
- }
372
+ export { createAgentManagerV2, createAgentManagerV2 as createAgentManager } from "./agent-manager-v2.js";