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,1527 +0,0 @@
1
- /**
2
- * Multi-Agent E2E Tests
3
- *
4
- * Comprehensive E2E tests for multi-agent lifecycle, WebSocket ACP multi-client,
5
- * and inter-agent communication.
6
- *
7
- * REQUIRES: RUN_FULL_AGENT_TESTS=true environment variable (and authenticated Claude Code)
8
- * REQUIRES: RUN_FULL_AGENT_TESTS=true environment variable (and authenticated Claude Code)
9
- *
10
- * Run with:
11
- * RUN_FULL_AGENT_TESTS=true npm run test:e2e -- src/__tests__/e2e/multi-agent.e2e.test.ts
12
- * RUN_FULL_AGENT_TESTS=true npm run test:e2e -- src/__tests__/e2e/multi-agent.e2e.test.ts
13
- */
14
-
15
- import {
16
- describe,
17
- it,
18
- expect,
19
- beforeEach,
20
- afterEach,
21
- beforeAll,
22
- afterAll,
23
- } from "vitest";
24
- import { WebSocket } from "ws";
25
- import * as fs from "fs";
26
- import * as path from "path";
27
- import * as os from "os";
28
- import { execSync } from "child_process";
29
- import { createEventStore, type EventStore } from "../../store/event-store.js";
30
- import {
31
- createAgentManager,
32
- type AgentManager,
33
- } from "../../agent/agent-manager.js";
34
- import {
35
- createTaskManager,
36
- type TaskManager,
37
- } from "../../task/task-manager.js";
38
- import {
39
- createMessageRouter,
40
- type MessageRouter,
41
- } from "../../router/message-router.js";
42
- import {
43
- createWebSocketACPServer,
44
- type WebSocketACPServer,
45
- } from "../../acp/websocket-server.js";
46
-
47
- // ─────────────────────────────────────────────────────────────────
48
- // Test Configuration
49
- // ─────────────────────────────────────────────────────────────────
50
-
51
- const RUN_FULL_AGENT = !!process.env.RUN_FULL_AGENT_TESTS;
52
- const testFn = RUN_FULL_AGENT ? it : it.skip;
53
-
54
- // Timeouts for different test types
55
- const TIMEOUT = {
56
- SPAWN: 60000, // Single agent spawn
57
- MULTI_SPAWN: 180000, // Multiple agent spawns
58
- PROMPT: 90000, // Agent prompt with response
59
- HIERARCHY: 120000, // Hierarchy operations
60
- };
61
-
62
- /**
63
- * Create an isolated test git repo to avoid polluting real repo
64
- */
65
- function createTestRepo(prefix: string): { path: string; cleanup: () => void } {
66
- const tmpDir = fs.mkdtempSync(
67
- path.join(os.tmpdir(), `multi-agent-${prefix}-`),
68
- );
69
- const repoPath = path.join(tmpDir, "test-repo");
70
- fs.mkdirSync(repoPath);
71
- execSync("git init", { cwd: repoPath, stdio: "pipe" });
72
- execSync('git config user.email "test@test.com"', {
73
- cwd: repoPath,
74
- stdio: "pipe",
75
- });
76
- execSync('git config user.name "Test User"', {
77
- cwd: repoPath,
78
- stdio: "pipe",
79
- });
80
- fs.writeFileSync(path.join(repoPath, "README.md"), "# Test Repo\n");
81
- execSync("git add -A", { cwd: repoPath, stdio: "pipe" });
82
- execSync('git commit -m "Initial commit"', { cwd: repoPath, stdio: "pipe" });
83
-
84
- return {
85
- path: repoPath,
86
- cleanup: () => fs.rmSync(tmpDir, { recursive: true, force: true }),
87
- };
88
- }
89
-
90
- // ─────────────────────────────────────────────────────────────────
91
- // ACP Wire Protocol Client
92
- // ─────────────────────────────────────────────────────────────────
93
-
94
- interface JsonRpcMessage {
95
- jsonrpc: "2.0";
96
- id?: number;
97
- method?: string;
98
- params?: unknown;
99
- result?: unknown;
100
- error?: { code: number; message: string; data?: unknown };
101
- }
102
-
103
- class ACPTestClient {
104
- private ws: WebSocket;
105
- private waiters: Map<number, (msg: JsonRpcMessage) => void> = new Map();
106
- private notifications: JsonRpcMessage[] = [];
107
- private nextId = 1;
108
- private connected = false;
109
- private closeResolve?: () => void;
110
- private closePromise: Promise<void>;
111
-
112
- constructor(url: string) {
113
- this.ws = new WebSocket(url);
114
- this.closePromise = new Promise((resolve) => {
115
- this.closeResolve = resolve;
116
- });
117
- }
118
-
119
- async connect(): Promise<void> {
120
- return new Promise((resolve, reject) => {
121
- const timeout = setTimeout(
122
- () => reject(new Error("Connection timeout")),
123
- 10000,
124
- );
125
-
126
- this.ws.on("open", () => {
127
- clearTimeout(timeout);
128
- this.connected = true;
129
- resolve();
130
- });
131
-
132
- this.ws.on("error", (err) => {
133
- clearTimeout(timeout);
134
- reject(err);
135
- });
136
-
137
- this.ws.on("message", (data: Buffer) => {
138
- try {
139
- const msg = JSON.parse(data.toString()) as JsonRpcMessage;
140
- if (msg.id !== undefined) {
141
- const waiter = this.waiters.get(msg.id);
142
- if (waiter) {
143
- this.waiters.delete(msg.id);
144
- waiter(msg);
145
- }
146
- } else {
147
- this.notifications.push(msg);
148
- }
149
- } catch {
150
- // Ignore parse errors
151
- }
152
- });
153
-
154
- this.ws.on("close", () => {
155
- this.connected = false;
156
- this.closeResolve?.();
157
- });
158
- });
159
- }
160
-
161
- async request(
162
- method: string,
163
- params?: unknown,
164
- timeoutMs = 30000,
165
- ): Promise<JsonRpcMessage> {
166
- const id = this.nextId++;
167
- return new Promise((resolve, reject) => {
168
- const timeout = setTimeout(() => {
169
- this.waiters.delete(id);
170
- reject(new Error(`Timeout waiting for ${method}`));
171
- }, timeoutMs);
172
-
173
- this.waiters.set(id, (response) => {
174
- clearTimeout(timeout);
175
- resolve(response);
176
- });
177
-
178
- this.ws.send(JSON.stringify({ jsonrpc: "2.0", method, params, id }));
179
- });
180
- }
181
-
182
- async initialize(): Promise<JsonRpcMessage> {
183
- return this.request("initialize", {
184
- protocolVersion: 1,
185
- capabilities: {},
186
- clientInfo: { name: "e2e-test-client", version: "1.0.0" },
187
- });
188
- }
189
-
190
- async newSession(params: { cwd?: string } = {}): Promise<JsonRpcMessage> {
191
- return this.request(
192
- "session/new",
193
- {
194
- mcpServers: [],
195
- ...params,
196
- },
197
- 60000,
198
- );
199
- }
200
-
201
- async prompt(
202
- sessionId: string,
203
- text: string,
204
- timeoutMs = 60000,
205
- ): Promise<JsonRpcMessage> {
206
- return this.request(
207
- "session/prompt",
208
- {
209
- sessionId,
210
- prompt: [{ type: "text", text }],
211
- },
212
- timeoutMs,
213
- );
214
- }
215
-
216
- async extMethod(
217
- method: string,
218
- params: unknown,
219
- timeoutMs = 30000,
220
- ): Promise<JsonRpcMessage> {
221
- return this.request(method, params, timeoutMs);
222
- }
223
-
224
- getNotifications(): JsonRpcMessage[] {
225
- return [...this.notifications];
226
- }
227
-
228
- clearNotifications(): void {
229
- this.notifications.length = 0;
230
- }
231
-
232
- close(): void {
233
- if (this.ws.readyState === WebSocket.OPEN) {
234
- this.ws.close();
235
- }
236
- }
237
-
238
- async waitForClose(): Promise<void> {
239
- return this.closePromise;
240
- }
241
-
242
- get isConnected(): boolean {
243
- return this.connected && this.ws.readyState === WebSocket.OPEN;
244
- }
245
- }
246
-
247
- // ─────────────────────────────────────────────────────────────────
248
- // Test Helpers
249
- // ─────────────────────────────────────────────────────────────────
250
-
251
- function log(message: string): void {
252
- console.log(`[E2E] ${message}`);
253
- }
254
-
255
- function logError(message: string, error?: unknown): void {
256
- console.error(`[E2E ERROR] ${message}`, error);
257
- }
258
-
259
- // ─────────────────────────────────────────────────────────────────
260
- // Part 1: Multi-Agent Lifecycle Tests
261
- // ─────────────────────────────────────────────────────────────────
262
-
263
- describe("Part 1: Multi-Agent Lifecycle E2E", () => {
264
- let eventStore: EventStore;
265
- let agentManager: AgentManager;
266
- let taskManager: TaskManager;
267
- let messageRouter: MessageRouter;
268
- let server: WebSocketACPServer;
269
- let testPort: number;
270
- let testRepo: { path: string; cleanup: () => void };
271
- let testInstanceId: string;
272
- const clients: ACPTestClient[] = [];
273
-
274
- beforeEach(async () => {
275
- if (!RUN_FULL_AGENT) {
276
- log("⚠️ Skipping: RUN_FULL_AGENT_TESTS not set");
277
- return;
278
- }
279
-
280
- // Create isolated test repo to avoid polluting real repo
281
- testRepo = createTestRepo("lifecycle");
282
-
283
- // Create services with file-based storage (required for MCP subprocess access)
284
- testInstanceId = `lifecycle-e2e-${Date.now()}`;
285
- eventStore = await createEventStore({
286
- instanceId: testInstanceId,
287
- baseDir: testRepo.path,
288
- });
289
- messageRouter = createMessageRouter(eventStore);
290
- taskManager = createTaskManager(eventStore);
291
- agentManager = createAgentManager(eventStore, messageRouter, {
292
- defaultPermissionMode: "auto-approve",
293
- defaultCwd: testRepo.path,
294
- });
295
-
296
- // Start WebSocket server
297
- testPort = 10000 + Math.floor(Math.random() * 50000);
298
- server = createWebSocketACPServer(
299
- { eventStore, agentManager, taskManager },
300
- { port: testPort, host: "localhost", path: "/acp" },
301
- );
302
- await server.start();
303
- log(`Server started on port ${testPort}`);
304
- });
305
-
306
- afterEach(async () => {
307
- if (!RUN_FULL_AGENT) return;
308
-
309
- // Close all clients
310
- for (const client of clients) {
311
- client.close();
312
- }
313
- clients.length = 0;
314
-
315
- // Terminate all agents
316
- try {
317
- const heads = agentManager.listHeadManagers();
318
- for (const head of heads) {
319
- try {
320
- await agentManager.terminate(head.id, "test_cleanup");
321
- } catch {
322
- // Ignore termination errors during cleanup
323
- }
324
- }
325
- } catch {
326
- // Ignore errors during cleanup
327
- }
328
-
329
- // Stop server and services
330
- await server?.stop();
331
- await agentManager?.close();
332
- await eventStore?.close();
333
- testRepo?.cleanup();
334
- log("Cleanup complete");
335
- });
336
-
337
- describe("SPAWN: Agent Spawning", () => {
338
- testFn(
339
- "SPAWN-01: should create session and spawn head manager agent",
340
- async () => {
341
- const client = new ACPTestClient(`ws://localhost:${testPort}/acp`);
342
- clients.push(client);
343
-
344
- await client.connect();
345
- expect(client.isConnected).toBe(true);
346
-
347
- const initResult = await client.initialize();
348
- expect(initResult.error).toBeUndefined();
349
- expect(initResult.result).toBeDefined();
350
- log("✓ Client initialized");
351
-
352
- // Create session (spawns head manager)
353
- const sessionResult = await client.newSession({ cwd: testRepo.path });
354
- expect(sessionResult.error).toBeUndefined();
355
- expect(sessionResult.result).toBeDefined();
356
-
357
- const session = sessionResult.result as { sessionId: string };
358
- expect(session.sessionId).toBeDefined();
359
- log(`✓ Session created: ${session.sessionId}`);
360
-
361
- // Verify agent exists in EventStore
362
- const agents = agentManager.list();
363
- expect(agents.length).toBeGreaterThanOrEqual(1);
364
- log(`✓ Agent count: ${agents.length}`);
365
-
366
- // Verify spawn event was emitted
367
- const spawnEvents = eventStore.query({ type: "spawn" });
368
- expect(spawnEvents.length).toBeGreaterThanOrEqual(1);
369
- log(`✓ Spawn events: ${spawnEvents.length}`);
370
- },
371
- { timeout: TIMEOUT.SPAWN },
372
- );
373
-
374
- testFn(
375
- "SPAWN-05: should spawn multiple children from same parent via extension",
376
- async () => {
377
- const client = new ACPTestClient(`ws://localhost:${testPort}/acp`);
378
- clients.push(client);
379
-
380
- await client.connect();
381
- await client.initialize();
382
-
383
- // Create head manager session
384
- const sessionResult = await client.newSession({ cwd: testRepo.path });
385
- const session = sessionResult.result as { sessionId: string };
386
- log(`✓ Head manager session: ${session.sessionId}`);
387
-
388
- // Get the head manager's agent ID
389
- const headManagers = agentManager.listHeadManagers();
390
- expect(headManagers.length).toBeGreaterThanOrEqual(1);
391
- const headManagerId = headManagers[0].id;
392
- log(`✓ Head manager ID: ${headManagerId}`);
393
-
394
- // Spawn first child via extension
395
- const spawn1Result = await client.extMethod("_macro/spawnAgent", {
396
- task_description: "Worker 1 - Process data",
397
- parentId: headManagerId,
398
- });
399
- expect(spawn1Result.error).toBeUndefined();
400
- const child1 = spawn1Result.result as { agentId: string };
401
- log(`✓ Child 1 spawned: ${child1.agentId}`);
402
-
403
- // Spawn second child via extension
404
- const spawn2Result = await client.extMethod("_macro/spawnAgent", {
405
- task_description: "Worker 2 - Analyze results",
406
- parentId: headManagerId,
407
- });
408
- expect(spawn2Result.error).toBeUndefined();
409
- const child2 = spawn2Result.result as { agentId: string };
410
- log(`✓ Child 2 spawned: ${child2.agentId}`);
411
-
412
- // Verify both children exist
413
- const children = agentManager.getChildren(headManagerId);
414
- expect(children.length).toBe(2);
415
- log(`✓ Children count: ${children.length}`);
416
-
417
- // Verify both have the same parent
418
- expect(children[0].parent).toBe(headManagerId);
419
- expect(children[1].parent).toBe(headManagerId);
420
- log("✓ Both children have correct parent");
421
- },
422
- { timeout: TIMEOUT.MULTI_SPAWN },
423
- );
424
-
425
- testFn(
426
- "SPAWN-06: should maintain correct lineage in 3-level hierarchy",
427
- async () => {
428
- const client = new ACPTestClient(`ws://localhost:${testPort}/acp`);
429
- clients.push(client);
430
-
431
- await client.connect();
432
- await client.initialize();
433
-
434
- // Create head manager (Level 0)
435
- const sessionResult = await client.newSession({ cwd: testRepo.path });
436
- const session = sessionResult.result as { sessionId: string };
437
- const headManagers = agentManager.listHeadManagers();
438
- const level0Id = headManagers[0].id;
439
- log(`✓ Level 0 (Head): ${level0Id}`);
440
-
441
- // Spawn Level 1 agent
442
- const spawn1Result = await client.extMethod("_macro/spawnAgent", {
443
- task_description: "Level 1 - Team Lead",
444
- parentId: level0Id,
445
- });
446
- expect(spawn1Result.error).toBeUndefined();
447
- const level1 = spawn1Result.result as { agentId: string };
448
- log(`✓ Level 1 spawned: ${level1.agentId}`);
449
-
450
- // Spawn Level 2 agent (child of Level 1)
451
- const spawn2Result = await client.extMethod("_macro/spawnAgent", {
452
- task_description: "Level 2 - Worker",
453
- parentId: level1.agentId,
454
- });
455
- expect(spawn2Result.error).toBeUndefined();
456
- const level2 = spawn2Result.result as { agentId: string };
457
- log(`✓ Level 2 spawned: ${level2.agentId}`);
458
-
459
- // Verify hierarchy structure
460
- const hierarchy = agentManager.getHierarchy(level0Id);
461
- expect(hierarchy).not.toBeNull();
462
- expect(hierarchy!.depth).toBe(3);
463
- expect(hierarchy!.totalAgents).toBe(3);
464
- log(
465
- `✓ Hierarchy depth: ${hierarchy!.depth}, total: ${hierarchy!.totalAgents}`,
466
- );
467
-
468
- // Verify lineage
469
- const level1Agent = agentManager.get(level1.agentId);
470
- const level2Agent = agentManager.get(level2.agentId);
471
-
472
- expect(level1Agent?.lineage).toEqual([level0Id]);
473
- expect(level2Agent?.lineage).toEqual([level0Id, level1.agentId]);
474
- log("✓ Lineages verified correctly");
475
- },
476
- { timeout: TIMEOUT.HIERARCHY },
477
- );
478
- });
479
-
480
- describe("TERM: Agent Termination", () => {
481
- testFn(
482
- "TERM-04: should cascade terminate to all descendants",
483
- async () => {
484
- const client = new ACPTestClient(`ws://localhost:${testPort}/acp`);
485
- clients.push(client);
486
-
487
- await client.connect();
488
- await client.initialize();
489
-
490
- // Create head manager
491
- await client.newSession({ cwd: testRepo.path });
492
- const headManagers = agentManager.listHeadManagers();
493
- const headId = headManagers[0].id;
494
- log(`✓ Head manager: ${headId}`);
495
-
496
- // Spawn child
497
- const childResult = await client.extMethod("_macro/spawnAgent", {
498
- task_description: "Child agent",
499
- parentId: headId,
500
- });
501
- const child = childResult.result as { agentId: string };
502
- log(`✓ Child spawned: ${child.agentId}`);
503
-
504
- // Spawn grandchild
505
- const grandchildResult = await client.extMethod("_macro/spawnAgent", {
506
- task_description: "Grandchild agent",
507
- parentId: child.agentId,
508
- });
509
- const grandchild = grandchildResult.result as { agentId: string };
510
- log(`✓ Grandchild spawned: ${grandchild.agentId}`);
511
-
512
- // Verify all running
513
- expect(agentManager.get(headId)?.state).toBe("running");
514
- expect(agentManager.get(child.agentId)?.state).toBe("running");
515
- expect(agentManager.get(grandchild.agentId)?.state).toBe("running");
516
- log("✓ All agents running");
517
-
518
- // Terminate head manager (should cascade)
519
- await agentManager.terminate(headId, "completed");
520
- log("✓ Head manager terminated");
521
-
522
- // Verify cascade termination
523
- const headAgent = agentManager.get(headId);
524
- const childAgent = agentManager.get(child.agentId);
525
- const grandchildAgent = agentManager.get(grandchild.agentId);
526
-
527
- expect(headAgent?.state).toBe("stopped");
528
- expect(headAgent?.stop_reason).toBe("completed");
529
- log(
530
- `✓ Head state: ${headAgent?.state}, reason: ${headAgent?.stop_reason}`,
531
- );
532
-
533
- expect(childAgent?.state).toBe("stopped");
534
- expect(childAgent?.stop_reason).toBe("parent_stopped");
535
- log(
536
- `✓ Child state: ${childAgent?.state}, reason: ${childAgent?.stop_reason}`,
537
- );
538
-
539
- expect(grandchildAgent?.state).toBe("stopped");
540
- expect(grandchildAgent?.stop_reason).toBe("parent_stopped");
541
- log(
542
- `✓ Grandchild state: ${grandchildAgent?.state}, reason: ${grandchildAgent?.stop_reason}`,
543
- );
544
-
545
- // Verify stop events
546
- const terminateEvents = eventStore.query({ type: "stop" });
547
- expect(terminateEvents.length).toBeGreaterThanOrEqual(3);
548
- log(`✓ Stop events: ${terminateEvents.length}`);
549
- },
550
- { timeout: TIMEOUT.HIERARCHY },
551
- );
552
- });
553
-
554
- describe("QUERY: Agent Querying", () => {
555
- testFn(
556
- "QUERY-08: should return correct hierarchy via getHierarchy extension",
557
- async () => {
558
- const client = new ACPTestClient(`ws://localhost:${testPort}/acp`);
559
- clients.push(client);
560
-
561
- await client.connect();
562
- await client.initialize();
563
-
564
- // Create head manager
565
- await client.newSession({ cwd: testRepo.path });
566
- const headManagers = agentManager.listHeadManagers();
567
- const headId = headManagers[0].id;
568
-
569
- // Spawn some children
570
- await client.extMethod("_macro/spawnAgent", {
571
- task_description: "Worker A",
572
- parentId: headId,
573
- });
574
- await client.extMethod("_macro/spawnAgent", {
575
- task_description: "Worker B",
576
- parentId: headId,
577
- });
578
-
579
- // Get hierarchy via extension
580
- const hierarchyResult = await client.extMethod("_macro/getHierarchy", {
581
- rootAgentId: headId,
582
- });
583
-
584
- expect(hierarchyResult.error).toBeUndefined();
585
- const hierarchy = hierarchyResult.result as {
586
- hierarchy: { agent: { id: string }; children: unknown[] };
587
- totalAgents: number;
588
- depth: number;
589
- };
590
-
591
- expect(hierarchy.totalAgents).toBe(3);
592
- expect(hierarchy.depth).toBe(2);
593
- expect(hierarchy.hierarchy.agent.id).toBe(headId);
594
- expect(hierarchy.hierarchy.children.length).toBe(2);
595
- log(
596
- `✓ Hierarchy: ${hierarchy.totalAgents} agents, depth ${hierarchy.depth}`,
597
- );
598
- },
599
- { timeout: TIMEOUT.MULTI_SPAWN },
600
- );
601
- });
602
- });
603
-
604
- // ─────────────────────────────────────────────────────────────────
605
- // Part 2: Multi-Client WebSocket ACP Tests
606
- // ─────────────────────────────────────────────────────────────────
607
-
608
- describe("Part 2: Multi-Client WebSocket ACP E2E", () => {
609
- let eventStore: EventStore;
610
- let agentManager: AgentManager;
611
- let taskManager: TaskManager;
612
- let messageRouter: MessageRouter;
613
- let server: WebSocketACPServer;
614
- let testPort: number;
615
- let testRepo: { path: string; cleanup: () => void };
616
- let testInstanceId: string;
617
- const clients: ACPTestClient[] = [];
618
-
619
- beforeEach(async () => {
620
- if (!RUN_FULL_AGENT) return;
621
-
622
- // Create isolated test repo to avoid polluting real repo
623
- testRepo = createTestRepo("multiclient");
624
-
625
- testInstanceId = `multiclient-e2e-${Date.now()}`;
626
- eventStore = await createEventStore({
627
- instanceId: testInstanceId,
628
- baseDir: testRepo.path,
629
- });
630
- messageRouter = createMessageRouter(eventStore);
631
- taskManager = createTaskManager(eventStore);
632
- agentManager = createAgentManager(eventStore, messageRouter, {
633
- defaultPermissionMode: "auto-approve",
634
- defaultCwd: testRepo.path,
635
- });
636
-
637
- testPort = 10000 + Math.floor(Math.random() * 50000);
638
- server = createWebSocketACPServer(
639
- { eventStore, agentManager, taskManager },
640
- { port: testPort, host: "localhost", path: "/acp" },
641
- );
642
- await server.start();
643
- });
644
-
645
- afterEach(async () => {
646
- if (!RUN_FULL_AGENT) return;
647
-
648
- for (const client of clients) {
649
- client.close();
650
- }
651
- clients.length = 0;
652
-
653
- try {
654
- const heads = agentManager.listHeadManagers();
655
- for (const head of heads) {
656
- try {
657
- await agentManager.terminate(head.id, "test_cleanup");
658
- } catch {}
659
- }
660
- } catch {}
661
-
662
- await server?.stop();
663
- await agentManager?.close();
664
- await eventStore?.close();
665
- testRepo?.cleanup();
666
- });
667
-
668
- describe("MC: Multi-Client Scenarios", () => {
669
- testFn(
670
- "MC-01: should allow multiple clients to connect simultaneously",
671
- async () => {
672
- const clientA = new ACPTestClient(`ws://localhost:${testPort}/acp`);
673
- const clientB = new ACPTestClient(`ws://localhost:${testPort}/acp`);
674
- const clientC = new ACPTestClient(`ws://localhost:${testPort}/acp`);
675
- clients.push(clientA, clientB, clientC);
676
-
677
- await Promise.all([
678
- clientA.connect(),
679
- clientB.connect(),
680
- clientC.connect(),
681
- ]);
682
-
683
- expect(clientA.isConnected).toBe(true);
684
- expect(clientB.isConnected).toBe(true);
685
- expect(clientC.isConnected).toBe(true);
686
- expect(server.getConnectionCount()).toBe(3);
687
- log("✓ 3 clients connected simultaneously");
688
- },
689
- { timeout: TIMEOUT.SPAWN },
690
- );
691
-
692
- testFn(
693
- "MC-02: should give each client isolated session by default",
694
- async () => {
695
- const clientA = new ACPTestClient(`ws://localhost:${testPort}/acp`);
696
- const clientB = new ACPTestClient(`ws://localhost:${testPort}/acp`);
697
- clients.push(clientA, clientB);
698
-
699
- await Promise.all([clientA.connect(), clientB.connect()]);
700
- await Promise.all([clientA.initialize(), clientB.initialize()]);
701
-
702
- // Create sessions
703
- const sessionA = await clientA.newSession({ cwd: testRepo.path });
704
- const sessionB = await clientB.newSession({ cwd: testRepo.path });
705
-
706
- expect(sessionA.error).toBeUndefined();
707
- expect(sessionB.error).toBeUndefined();
708
-
709
- const sessionAId = (sessionA.result as { sessionId: string }).sessionId;
710
- const sessionBId = (sessionB.result as { sessionId: string }).sessionId;
711
-
712
- expect(sessionAId).not.toBe(sessionBId);
713
- log(`✓ Sessions isolated: ${sessionAId} vs ${sessionBId}`);
714
-
715
- // Verify both head managers exist
716
- const heads = agentManager.listHeadManagers();
717
- expect(heads.length).toBeGreaterThanOrEqual(2);
718
- log(`✓ Head managers: ${heads.length}`);
719
- },
720
- { timeout: TIMEOUT.MULTI_SPAWN },
721
- );
722
-
723
- testFn(
724
- "MC-04: should continue working when one client disconnects",
725
- async () => {
726
- const clientA = new ACPTestClient(`ws://localhost:${testPort}/acp`);
727
- const clientB = new ACPTestClient(`ws://localhost:${testPort}/acp`);
728
- clients.push(clientA, clientB);
729
-
730
- await Promise.all([clientA.connect(), clientB.connect()]);
731
- await Promise.all([clientA.initialize(), clientB.initialize()]);
732
-
733
- // Create sessions
734
- const sessionA = await clientA.newSession({ cwd: testRepo.path });
735
- const sessionB = await clientB.newSession({ cwd: testRepo.path });
736
- log("✓ Both sessions created");
737
-
738
- // Disconnect client A
739
- clientA.close();
740
- await new Promise((r) => setTimeout(r, 500));
741
-
742
- expect(server.getConnectionCount()).toBe(1);
743
- log("✓ Client A disconnected, connection count: 1");
744
-
745
- // Client B should still be able to use the hierarchy
746
- const hierarchyResult = await clientB.extMethod(
747
- "_macro/getHierarchy",
748
- {},
749
- );
750
- expect(hierarchyResult.error).toBeUndefined();
751
- log("✓ Client B can still query hierarchy");
752
-
753
- // Verify both agents still exist in hierarchy
754
- const agents = agentManager.list();
755
- expect(agents.length).toBeGreaterThanOrEqual(2);
756
- log(`✓ Total agents in shared hierarchy: ${agents.length}`);
757
- },
758
- { timeout: TIMEOUT.MULTI_SPAWN },
759
- );
760
-
761
- testFn(
762
- "MC-05: should handle 5+ concurrent clients",
763
- async () => {
764
- const clientCount = 5;
765
- const newClients: ACPTestClient[] = [];
766
-
767
- // Connect all clients
768
- for (let i = 0; i < clientCount; i++) {
769
- const client = new ACPTestClient(`ws://localhost:${testPort}/acp`);
770
- newClients.push(client);
771
- clients.push(client);
772
- }
773
-
774
- await Promise.all(newClients.map((c) => c.connect()));
775
- expect(server.getConnectionCount()).toBe(clientCount);
776
- log(`✓ ${clientCount} clients connected`);
777
-
778
- // Initialize all
779
- await Promise.all(newClients.map((c) => c.initialize()));
780
- log("✓ All clients initialized");
781
-
782
- // Create sessions sequentially (to avoid race conditions)
783
- const sessions: string[] = [];
784
- for (const client of newClients) {
785
- const result = await client.newSession({ cwd: testRepo.path });
786
- expect(result.error).toBeUndefined();
787
- sessions.push((result.result as { sessionId: string }).sessionId);
788
- }
789
- log(`✓ ${sessions.length} sessions created`);
790
-
791
- // All sessions should be unique
792
- const uniqueSessions = new Set(sessions);
793
- expect(uniqueSessions.size).toBe(clientCount);
794
- log("✓ All sessions are unique");
795
-
796
- // Verify shared hierarchy
797
- const heads = agentManager.listHeadManagers();
798
- expect(heads.length).toBeGreaterThanOrEqual(clientCount);
799
- log(`✓ Shared hierarchy has ${heads.length} head managers`);
800
- },
801
- { timeout: TIMEOUT.MULTI_SPAWN * 2 },
802
- );
803
-
804
- testFn(
805
- "MC-07: should allow agent hierarchy spanning multiple client sessions",
806
- async () => {
807
- const clientA = new ACPTestClient(`ws://localhost:${testPort}/acp`);
808
- const clientB = new ACPTestClient(`ws://localhost:${testPort}/acp`);
809
- clients.push(clientA, clientB);
810
-
811
- await Promise.all([clientA.connect(), clientB.connect()]);
812
- await Promise.all([clientA.initialize(), clientB.initialize()]);
813
-
814
- // Client A creates head manager
815
- const sessionA = await clientA.newSession({ cwd: testRepo.path });
816
- const heads = agentManager.listHeadManagers();
817
- const clientAHeadId = heads[0].id;
818
- log(`✓ Client A head manager: ${clientAHeadId}`);
819
-
820
- // Client A spawns a child
821
- const spawnResult = await clientA.extMethod("_macro/spawnAgent", {
822
- task_description: "Child from Client A",
823
- parentId: clientAHeadId,
824
- });
825
- const childId = (spawnResult.result as { agentId: string }).agentId;
826
- log(`✓ Client A spawned child: ${childId}`);
827
-
828
- // Client B should see the entire hierarchy
829
- const hierarchyResult = await clientB.extMethod("_macro/getHierarchy", {
830
- rootAgentId: clientAHeadId,
831
- });
832
-
833
- expect(hierarchyResult.error).toBeUndefined();
834
- const hierarchy = hierarchyResult.result as {
835
- totalAgents: number;
836
- depth: number;
837
- };
838
-
839
- expect(hierarchy.totalAgents).toBe(2);
840
- expect(hierarchy.depth).toBe(2);
841
- log(
842
- `✓ Client B sees hierarchy: ${hierarchy.totalAgents} agents, depth ${hierarchy.depth}`,
843
- );
844
-
845
- // Client B can spawn a grandchild under Client A's child
846
- const grandchildResult = await clientB.extMethod("_macro/spawnAgent", {
847
- task_description: "Grandchild from Client B",
848
- parentId: childId,
849
- });
850
- expect(grandchildResult.error).toBeUndefined();
851
- const grandchildId = (grandchildResult.result as { agentId: string })
852
- .agentId;
853
- log(`✓ Client B spawned grandchild: ${grandchildId}`);
854
-
855
- // Verify the cross-client hierarchy
856
- const finalHierarchy = agentManager.getHierarchy(clientAHeadId);
857
- expect(finalHierarchy!.totalAgents).toBe(3);
858
- expect(finalHierarchy!.depth).toBe(3);
859
- log("✓ Cross-client hierarchy verified: 3 agents, depth 3");
860
- },
861
- { timeout: TIMEOUT.HIERARCHY },
862
- );
863
- });
864
- });
865
-
866
- // ─────────────────────────────────────────────────────────────────
867
- // Part 3: Event Storage Verification
868
- // ─────────────────────────────────────────────────────────────────
869
-
870
- describe("Part 3: Event Storage E2E", () => {
871
- let eventStore: EventStore;
872
- let agentManager: AgentManager;
873
- let taskManager: TaskManager;
874
- let messageRouter: MessageRouter;
875
- let server: WebSocketACPServer;
876
- let testPort: number;
877
- let testRepo: { path: string; cleanup: () => void };
878
- let testInstanceId: string;
879
- const clients: ACPTestClient[] = [];
880
-
881
- beforeEach(async () => {
882
- if (!RUN_FULL_AGENT) return;
883
-
884
- // Create isolated test repo to avoid polluting real repo
885
- testRepo = createTestRepo("events");
886
-
887
- testInstanceId = `events-e2e-${Date.now()}`;
888
- eventStore = await createEventStore({
889
- instanceId: testInstanceId,
890
- baseDir: testRepo.path,
891
- });
892
- messageRouter = createMessageRouter(eventStore);
893
- taskManager = createTaskManager(eventStore);
894
- agentManager = createAgentManager(eventStore, messageRouter, {
895
- defaultPermissionMode: "auto-approve",
896
- defaultCwd: testRepo.path,
897
- });
898
-
899
- testPort = 10000 + Math.floor(Math.random() * 50000);
900
- server = createWebSocketACPServer(
901
- { eventStore, agentManager, taskManager },
902
- { port: testPort, host: "localhost", path: "/acp" },
903
- );
904
- await server.start();
905
- });
906
-
907
- afterEach(async () => {
908
- if (!RUN_FULL_AGENT) return;
909
-
910
- for (const client of clients) {
911
- client.close();
912
- }
913
- clients.length = 0;
914
-
915
- try {
916
- const heads = agentManager.listHeadManagers();
917
- for (const head of heads) {
918
- try {
919
- await agentManager.terminate(head.id, "test_cleanup");
920
- } catch {}
921
- }
922
- } catch {}
923
-
924
- await server?.stop();
925
- await agentManager?.close();
926
- await eventStore?.close();
927
- testRepo?.cleanup();
928
- });
929
-
930
- describe("EVT: Event Verification", () => {
931
- testFn(
932
- "EVT-01: should store spawn, status, and terminate events",
933
- async () => {
934
- const client = new ACPTestClient(`ws://localhost:${testPort}/acp`);
935
- clients.push(client);
936
-
937
- await client.connect();
938
- await client.initialize();
939
-
940
- // Create session (generates spawn + status events)
941
- const sessionResult = await client.newSession({ cwd: testRepo.path });
942
- const heads = agentManager.listHeadManagers();
943
- const headId = heads[0].id;
944
- log("✓ Head manager created");
945
-
946
- // Verify spawn event
947
- const spawnEvents = eventStore.query({ type: "spawn" });
948
- expect(spawnEvents.length).toBeGreaterThanOrEqual(1);
949
- const spawnEvent = spawnEvents.find(
950
- (e) => e.payload.agent_id === headId,
951
- );
952
- expect(spawnEvent).toBeDefined();
953
- expect(spawnEvent!.payload.agent_id).toBe(headId);
954
- log(`✓ Spawn event verified for ${headId}`);
955
-
956
- // Verify status events (started)
957
- const statusEvents = eventStore.query({ type: "status" });
958
- expect(statusEvents.length).toBeGreaterThanOrEqual(1);
959
- log(`✓ Status events: ${statusEvents.length}`);
960
-
961
- // Terminate agent
962
- await agentManager.terminate(headId, "completed");
963
-
964
- // Verify stop event
965
- const terminateEvents = eventStore.query({ type: "stop" });
966
- expect(terminateEvents.length).toBeGreaterThanOrEqual(1);
967
- const termEvent = terminateEvents.find(
968
- (e) => e.payload.agent_id === headId,
969
- );
970
- expect(termEvent).toBeDefined();
971
- expect(termEvent!.payload.reason).toBe("completed");
972
- log(`✓ Terminate event verified for ${headId}`);
973
- },
974
- { timeout: TIMEOUT.SPAWN },
975
- );
976
-
977
- testFn(
978
- "VIEW-01/02/03: should update agent materialized view correctly",
979
- async () => {
980
- const client = new ACPTestClient(`ws://localhost:${testPort}/acp`);
981
- clients.push(client);
982
-
983
- await client.connect();
984
- await client.initialize();
985
-
986
- // Create session
987
- await client.newSession({ cwd: testRepo.path });
988
- const heads = agentManager.listHeadManagers();
989
- const headId = heads[0].id;
990
-
991
- // VIEW-01: Verify agent appears in view after spawn
992
- let agent = eventStore.getAgent(headId);
993
- expect(agent).toBeDefined();
994
- expect(agent!.id).toBe(headId);
995
- log("✓ VIEW-01: Agent in view after spawn");
996
-
997
- // VIEW-02: Verify state is "running" after status:started
998
- expect(agent!.state).toBe("running");
999
- log(`✓ VIEW-02: Agent state is ${agent!.state}`);
1000
-
1001
- // VIEW-03: Verify state changes to "stopped" after terminate
1002
- await agentManager.terminate(headId, "completed");
1003
- agent = eventStore.getAgent(headId);
1004
- expect(agent!.state).toBe("stopped");
1005
- log(`✓ VIEW-03: Agent state is ${agent!.state} after terminate`);
1006
- },
1007
- { timeout: TIMEOUT.SPAWN },
1008
- );
1009
- });
1010
- });
1011
-
1012
- // ─────────────────────────────────────────────────────────────────
1013
- // Part 4: Inter-Agent Messaging E2E Tests
1014
- // ─────────────────────────────────────────────────────────────────
1015
-
1016
- describe("Part 4: Inter-Agent Messaging E2E", () => {
1017
- let eventStore: EventStore;
1018
- let agentManager: AgentManager;
1019
- let taskManager: TaskManager;
1020
- let messageRouter: MessageRouter;
1021
- let server: WebSocketACPServer;
1022
- let testPort: number;
1023
- let testRepo: { path: string; cleanup: () => void };
1024
- let testInstanceId: string;
1025
- const clients: ACPTestClient[] = [];
1026
-
1027
- beforeEach(async () => {
1028
- if (!RUN_FULL_AGENT) {
1029
- log("⚠️ Skipping: RUN_FULL_AGENT_TESTS not set");
1030
- return;
1031
- }
1032
-
1033
- // Create isolated test repo to avoid polluting real repo
1034
- testRepo = createTestRepo("messaging");
1035
-
1036
- // Create services with file-based storage (required for MCP subprocess access)
1037
- testInstanceId = `messaging-e2e-${Date.now()}`;
1038
- eventStore = await createEventStore({
1039
- instanceId: testInstanceId,
1040
- baseDir: testRepo.path,
1041
- });
1042
- messageRouter = createMessageRouter(eventStore);
1043
- taskManager = createTaskManager(eventStore);
1044
- agentManager = createAgentManager(eventStore, messageRouter, {
1045
- defaultPermissionMode: "auto-approve",
1046
- defaultCwd: testRepo.path,
1047
- });
1048
-
1049
- // Start WebSocket server
1050
- testPort = 10000 + Math.floor(Math.random() * 50000);
1051
- server = createWebSocketACPServer(
1052
- { eventStore, agentManager, taskManager },
1053
- { port: testPort, host: "localhost", path: "/acp" },
1054
- );
1055
- await server.start();
1056
- log(`Server started on port ${testPort}`);
1057
- });
1058
-
1059
- afterEach(async () => {
1060
- if (!RUN_FULL_AGENT) return;
1061
-
1062
- // Close all clients
1063
- for (const client of clients) {
1064
- client.close();
1065
- }
1066
- clients.length = 0;
1067
-
1068
- // Terminate all agents
1069
- try {
1070
- const heads = agentManager.listHeadManagers();
1071
- for (const head of heads) {
1072
- try {
1073
- await agentManager.terminate(head.id, "test_cleanup");
1074
- } catch {
1075
- // Ignore termination errors during cleanup
1076
- }
1077
- }
1078
- } catch {
1079
- // Ignore errors during cleanup
1080
- }
1081
-
1082
- // Stop server
1083
- await server.stop();
1084
-
1085
- // Close event store
1086
- await eventStore.close();
1087
- testRepo?.cleanup();
1088
-
1089
- log("Cleanup complete");
1090
- });
1091
-
1092
- // ───────────────────────────────────────────────────────────────
1093
- // MSG: Direct Agent Messaging
1094
- // ───────────────────────────────────────────────────────────────
1095
-
1096
- describe("MSG: Direct Agent Messaging", () => {
1097
- testFn(
1098
- "MSG-01: should send message between sibling agents via MessageRouter",
1099
- async () => {
1100
- // Create client and session
1101
- const client = new ACPTestClient(`ws://localhost:${testPort}/acp`);
1102
- clients.push(client);
1103
- await client.connect();
1104
- await client.initialize();
1105
- await client.newSession({ cwd: testRepo.path });
1106
-
1107
- // Get head manager
1108
- const heads = agentManager.listHeadManagers();
1109
- const headId = heads[0].id;
1110
- log(`✓ Head manager: ${headId}`);
1111
-
1112
- // Spawn two child agents
1113
- const child1Result = await client.extMethod("_macro/spawnAgent", {
1114
- task_description: "Worker 1 - Send messages",
1115
- parentId: headId,
1116
- });
1117
- const child1Id = (child1Result.result as { agentId: string }).agentId;
1118
- log(`✓ Child 1 spawned: ${child1Id}`);
1119
-
1120
- const child2Result = await client.extMethod("_macro/spawnAgent", {
1121
- task_description: "Worker 2 - Receive messages",
1122
- parentId: headId,
1123
- });
1124
- const child2Id = (child2Result.result as { agentId: string }).agentId;
1125
- log(`✓ Child 2 spawned: ${child2Id}`);
1126
-
1127
- // Send message from child1 to child2 via MessageRouter
1128
- const sentMsg = await messageRouter.sendToAddress({
1129
- from: child1Id,
1130
- to: { agent: child2Id },
1131
- content: "Hello from sibling!",
1132
- });
1133
- expect(sentMsg.id).toBeDefined();
1134
- expect(sentMsg.from).toBe(child1Id);
1135
- expect((sentMsg.to as { agent: string }).agent).toBe(child2Id);
1136
- log(`✓ Message sent: ${sentMsg.id}`);
1137
-
1138
- // Verify child2 has pending message
1139
- const pendingMessages = messageRouter.getMessages(child2Id);
1140
- expect(pendingMessages.length).toBe(1);
1141
- expect(pendingMessages[0].content).toBe("Hello from sibling!");
1142
- expect(pendingMessages[0].from.agent_id).toBe(child1Id);
1143
- log(`✓ Child 2 received message: "${pendingMessages[0].content}"`);
1144
-
1145
- // Verify message event in EventStore (event.id = message id)
1146
- const msgEvents = eventStore.query({ type: "message" });
1147
- const ourMsg = msgEvents.find((e) => e.id === sentMsg.id);
1148
- expect(ourMsg).toBeDefined();
1149
- log(`✓ Message event stored: ${ourMsg!.id}`);
1150
- },
1151
- { timeout: TIMEOUT.MULTI_SPAWN },
1152
- );
1153
-
1154
- testFn(
1155
- "MSG-02: should acknowledge messages correctly",
1156
- async () => {
1157
- // Create client and session
1158
- const client = new ACPTestClient(`ws://localhost:${testPort}/acp`);
1159
- clients.push(client);
1160
- await client.connect();
1161
- await client.initialize();
1162
- await client.newSession({ cwd: testRepo.path });
1163
-
1164
- // Get head manager
1165
- const heads = agentManager.listHeadManagers();
1166
- const headId = heads[0].id;
1167
-
1168
- // Spawn sender and receiver
1169
- const senderResult = await client.extMethod("_macro/spawnAgent", {
1170
- task_description: "Sender agent",
1171
- parentId: headId,
1172
- });
1173
- const senderId = (senderResult.result as { agentId: string }).agentId;
1174
-
1175
- const receiverResult = await client.extMethod("_macro/spawnAgent", {
1176
- task_description: "Receiver agent",
1177
- parentId: headId,
1178
- });
1179
- const receiverId = (receiverResult.result as { agentId: string })
1180
- .agentId;
1181
- log(`✓ Agents spawned: sender=${senderId}, receiver=${receiverId}`);
1182
-
1183
- // Send multiple messages
1184
- const msg1 = await messageRouter.sendToAddress({
1185
- from: senderId,
1186
- to: { agent: receiverId },
1187
- content: "Message 1",
1188
- });
1189
- const msg2 = await messageRouter.sendToAddress({
1190
- from: senderId,
1191
- to: { agent: receiverId },
1192
- content: "Message 2",
1193
- });
1194
- log(`✓ Sent 2 messages`);
1195
-
1196
- // Verify 2 pending messages
1197
- let pending = messageRouter.getMessages(receiverId);
1198
- expect(pending.length).toBe(2);
1199
- log(`✓ Receiver has ${pending.length} pending messages`);
1200
-
1201
- // Acknowledge first message
1202
- messageRouter.acknowledgeMessage(receiverId, msg1.id);
1203
- log(`✓ Acknowledged message 1`);
1204
-
1205
- // Verify only 1 pending message now
1206
- pending = messageRouter.getMessages(receiverId);
1207
- expect(pending.length).toBe(1);
1208
- expect(pending[0].id).toBe(msg2.id);
1209
- log(`✓ After ack: ${pending.length} pending (message 2 only)`);
1210
-
1211
- // Acknowledge all remaining
1212
- messageRouter.acknowledgeMessages(receiverId, [msg2.id]);
1213
- pending = messageRouter.getMessages(receiverId);
1214
- expect(pending.length).toBe(0);
1215
- log(`✓ All messages acknowledged: ${pending.length} pending`);
1216
- },
1217
- { timeout: TIMEOUT.MULTI_SPAWN },
1218
- );
1219
-
1220
- testFn(
1221
- "MSG-03: should handle topic-based pub/sub messaging",
1222
- async () => {
1223
- // Create client and session
1224
- const client = new ACPTestClient(`ws://localhost:${testPort}/acp`);
1225
- clients.push(client);
1226
- await client.connect();
1227
- await client.initialize();
1228
- await client.newSession({ cwd: testRepo.path });
1229
-
1230
- // Get head manager
1231
- const heads = agentManager.listHeadManagers();
1232
- const headId = heads[0].id;
1233
-
1234
- // Spawn publisher and two subscribers
1235
- const pubResult = await client.extMethod("_macro/spawnAgent", {
1236
- task_description: "Publisher agent",
1237
- parentId: headId,
1238
- });
1239
- const publisherId = (pubResult.result as { agentId: string }).agentId;
1240
-
1241
- const sub1Result = await client.extMethod("_macro/spawnAgent", {
1242
- task_description: "Subscriber 1",
1243
- parentId: headId,
1244
- });
1245
- const sub1Id = (sub1Result.result as { agentId: string }).agentId;
1246
-
1247
- const sub2Result = await client.extMethod("_macro/spawnAgent", {
1248
- task_description: "Subscriber 2",
1249
- parentId: headId,
1250
- });
1251
- const sub2Id = (sub2Result.result as { agentId: string }).agentId;
1252
- log(
1253
- `✓ Agents spawned: publisher=${publisherId}, sub1=${sub1Id}, sub2=${sub2Id}`,
1254
- );
1255
-
1256
- // Subscribe both subscribers to a topic
1257
- const topic = "test-notifications";
1258
- messageRouter.subscribe(sub1Id, { type: "topic", target: topic });
1259
- messageRouter.subscribe(sub2Id, { type: "topic", target: topic });
1260
- log(`✓ Both subscribers subscribed to topic: ${topic}`);
1261
-
1262
- // Publish message to topic (scope)
1263
- const sentMsg = await messageRouter.sendToAddress({
1264
- from: publisherId,
1265
- to: { scope: topic },
1266
- content: "Broadcast announcement!",
1267
- });
1268
- log(`✓ Published message: ${sentMsg.id}`);
1269
-
1270
- // Verify both subscribers received the message
1271
- const sub1Messages = messageRouter.getMessages(sub1Id);
1272
- const sub2Messages = messageRouter.getMessages(sub2Id);
1273
- expect(sub1Messages.length).toBe(1);
1274
- expect(sub2Messages.length).toBe(1);
1275
- expect(sub1Messages[0].content).toBe("Broadcast announcement!");
1276
- expect(sub2Messages[0].content).toBe("Broadcast announcement!");
1277
- log(`✓ Sub1 received: "${sub1Messages[0].content}"`);
1278
- log(`✓ Sub2 received: "${sub2Messages[0].content}"`);
1279
-
1280
- // Publisher should not have the message (not subscribed)
1281
- const pubMessages = messageRouter.getMessages(publisherId);
1282
- expect(pubMessages.length).toBe(0);
1283
- log(`✓ Publisher has no messages (not subscribed)`);
1284
- },
1285
- { timeout: TIMEOUT.MULTI_SPAWN },
1286
- );
1287
-
1288
- testFn(
1289
- "MSG-04: should route messages through parent-child hierarchy",
1290
- async () => {
1291
- // Create client and session
1292
- const client = new ACPTestClient(`ws://localhost:${testPort}/acp`);
1293
- clients.push(client);
1294
- await client.connect();
1295
- await client.initialize();
1296
- await client.newSession({ cwd: testRepo.path });
1297
-
1298
- // Get head manager
1299
- const heads = agentManager.listHeadManagers();
1300
- const headId = heads[0].id;
1301
- log(`✓ Head manager: ${headId}`);
1302
-
1303
- // Spawn child and grandchild
1304
- const childResult = await client.extMethod("_macro/spawnAgent", {
1305
- task_description: "Child - Middle manager",
1306
- parentId: headId,
1307
- });
1308
- const childId = (childResult.result as { agentId: string }).agentId;
1309
- log(`✓ Child spawned: ${childId}`);
1310
-
1311
- const grandchildResult = await client.extMethod("_macro/spawnAgent", {
1312
- task_description: "Grandchild - Worker",
1313
- parentId: childId,
1314
- });
1315
- const grandchildId = (grandchildResult.result as { agentId: string })
1316
- .agentId;
1317
- log(`✓ Grandchild spawned: ${grandchildId}`);
1318
-
1319
- // Send message from grandchild to head (ancestor)
1320
- const msgToHead = await messageRouter.sendToAddress({
1321
- from: grandchildId,
1322
- to: { agent: headId },
1323
- content: "Report from grandchild to head",
1324
- });
1325
- expect(msgToHead.id).toBeDefined();
1326
- log(`✓ Grandchild sent message to head: ${msgToHead.id}`);
1327
-
1328
- // Verify head received the message
1329
- const headMessages = messageRouter.getMessages(headId);
1330
- expect(headMessages.length).toBe(1);
1331
- expect(headMessages[0].content).toBe("Report from grandchild to head");
1332
- log(`✓ Head received: "${headMessages[0].content}"`);
1333
-
1334
- // Send message from head to grandchild (descendant)
1335
- const msgToGrandchild = await messageRouter.sendToAddress({
1336
- from: headId,
1337
- to: { agent: grandchildId },
1338
- content: "Instructions from head to grandchild",
1339
- });
1340
- expect(msgToGrandchild.id).toBeDefined();
1341
- log(`✓ Head sent message to grandchild: ${msgToGrandchild.id}`);
1342
-
1343
- // Verify grandchild received the message
1344
- // (may receive multiple copies due to lineage routing)
1345
- const grandchildMessages = messageRouter.getMessages(grandchildId);
1346
- expect(grandchildMessages.length).toBeGreaterThanOrEqual(1);
1347
- const expectedMsg = grandchildMessages.find(
1348
- (m) => m.content === "Instructions from head to grandchild",
1349
- );
1350
- expect(expectedMsg).toBeDefined();
1351
- log(
1352
- `✓ Grandchild received: "${expectedMsg!.content}" (total: ${grandchildMessages.length})`,
1353
- );
1354
- },
1355
- { timeout: TIMEOUT.MULTI_SPAWN },
1356
- );
1357
-
1358
- testFn(
1359
- "MSG-05: should emit and receive status notifications via subtree subscription",
1360
- async () => {
1361
- // Create client and session
1362
- const client = new ACPTestClient(`ws://localhost:${testPort}/acp`);
1363
- clients.push(client);
1364
- await client.connect();
1365
- await client.initialize();
1366
- await client.newSession({ cwd: testRepo.path });
1367
-
1368
- // Get head manager
1369
- const heads = agentManager.listHeadManagers();
1370
- const headId = heads[0].id;
1371
-
1372
- // Spawn a child
1373
- const childResult = await client.extMethod("_macro/spawnAgent", {
1374
- task_description: "Worker sending status updates",
1375
- parentId: headId,
1376
- });
1377
- const childId = (childResult.result as { agentId: string }).agentId;
1378
- log(`✓ Child spawned: ${childId}`);
1379
-
1380
- // Subscribe head to child's subtree (status updates)
1381
- messageRouter.subscribe(headId, { type: "subtree", target: childId });
1382
- log(`✓ Head subscribed to child's subtree`);
1383
-
1384
- // Child emits a status update (using "checkpoint" - a valid StatusType)
1385
- messageRouter.emitStatus({
1386
- from: { agent_id: childId },
1387
- status_type: "checkpoint",
1388
- summary: "50% complete",
1389
- details: { percentage: 50 },
1390
- });
1391
- log(`✓ Child emitted status: 50% complete`);
1392
-
1393
- // Verify the status event was stored
1394
- const statusEvents = eventStore.query({ type: "status" });
1395
- const checkpointEvent = statusEvents.find(
1396
- (e) =>
1397
- e.source.agent_id === childId &&
1398
- e.payload.status_type === "checkpoint" &&
1399
- e.payload.summary === "50% complete",
1400
- );
1401
- expect(checkpointEvent).toBeDefined();
1402
- expect(checkpointEvent!.payload.summary).toBe("50% complete");
1403
- log(`✓ Status event stored: ${checkpointEvent!.payload.summary}`);
1404
- },
1405
- { timeout: TIMEOUT.MULTI_SPAWN },
1406
- );
1407
- });
1408
-
1409
- // ───────────────────────────────────────────────────────────────
1410
- // TASK: Task-Based Routing
1411
- // ───────────────────────────────────────────────────────────────
1412
-
1413
- describe("TASK: Task-Based Message Routing", () => {
1414
- testFn(
1415
- "TASK-01: should route message to task's assigned agent",
1416
- async () => {
1417
- // Create client and session
1418
- const client = new ACPTestClient(`ws://localhost:${testPort}/acp`);
1419
- clients.push(client);
1420
- await client.connect();
1421
- await client.initialize();
1422
- await client.newSession({ cwd: testRepo.path });
1423
-
1424
- // Get head manager
1425
- const heads = agentManager.listHeadManagers();
1426
- const headId = heads[0].id;
1427
-
1428
- // Spawn worker agent
1429
- const workerResult = await client.extMethod("_macro/spawnAgent", {
1430
- task_description: "Process data files",
1431
- parentId: headId,
1432
- });
1433
- const workerId = (workerResult.result as { agentId: string }).agentId;
1434
- log(`✓ Worker spawned: ${workerId}`);
1435
-
1436
- // Create a task via TaskManager and assign it to the worker
1437
- const task = taskManager.create({
1438
- description: "Process data files",
1439
- created_by: headId,
1440
- });
1441
- taskManager.assign(task.id, workerId);
1442
- log(`✓ Task created: ${task.id}, assigned to: ${workerId}`);
1443
-
1444
- // Send message to the task
1445
- const sentMsg = await messageRouter.sendToAddress({
1446
- from: headId,
1447
- to: { task: task.id },
1448
- content: "Instructions for the task",
1449
- });
1450
- expect(sentMsg.id).toBeDefined();
1451
- log(`✓ Message sent to task: ${sentMsg.id}`);
1452
-
1453
- // Verify worker received the message (task routes to assigned agent)
1454
- const workerMessages = messageRouter.getMessages(workerId);
1455
- expect(workerMessages.length).toBeGreaterThanOrEqual(1);
1456
- const taskMsg = workerMessages.find(
1457
- (m) => m.content === "Instructions for the task",
1458
- );
1459
- expect(taskMsg).toBeDefined();
1460
- log(`✓ Worker received task message: "${taskMsg!.content}"`);
1461
- },
1462
- { timeout: TIMEOUT.MULTI_SPAWN },
1463
- );
1464
-
1465
- testFn(
1466
- "TASK-02: should verify message events are stored with correct structure",
1467
- async () => {
1468
- // Create client and session
1469
- const client = new ACPTestClient(`ws://localhost:${testPort}/acp`);
1470
- clients.push(client);
1471
- await client.connect();
1472
- await client.initialize();
1473
- await client.newSession({ cwd: testRepo.path });
1474
-
1475
- // Get head manager
1476
- const heads = agentManager.listHeadManagers();
1477
- const headId = heads[0].id;
1478
-
1479
- // Spawn child
1480
- const childResult = await client.extMethod("_macro/spawnAgent", {
1481
- task_description: "Worker",
1482
- parentId: headId,
1483
- });
1484
- const childId = (childResult.result as { agentId: string }).agentId;
1485
- log(`✓ Child spawned: ${childId}`);
1486
-
1487
- // Send message
1488
- const sentMsg = await messageRouter.sendToAddress({
1489
- from: headId,
1490
- to: { agent: childId },
1491
- content: "Message structure check",
1492
- });
1493
- log(`✓ Message sent: ${sentMsg.id}`);
1494
-
1495
- // Query message events - the event id IS the message id
1496
- const msgEvents = eventStore.query({ type: "message" });
1497
- const ourEvent = msgEvents.find((e) => e.id === sentMsg.id);
1498
- expect(ourEvent).toBeDefined();
1499
- expect(ourEvent!.source.agent_id).toBe(headId);
1500
- expect(ourEvent!.payload.content).toBe("Message structure check");
1501
- log(
1502
- `✓ Message event verified: id=${ourEvent!.id}, from=${ourEvent!.source.agent_id}`,
1503
- );
1504
-
1505
- // Verify target in event
1506
- expect(ourEvent!.target).toBeDefined();
1507
- expect(ourEvent!.target!.agent_id).toBe(childId);
1508
- log(`✓ Message target verified: ${ourEvent!.target!.agent_id}`);
1509
- },
1510
- { timeout: TIMEOUT.MULTI_SPAWN },
1511
- );
1512
- });
1513
- });
1514
-
1515
- // ─────────────────────────────────────────────────────────────────
1516
- // Skip Message if E2E not enabled
1517
- // ─────────────────────────────────────────────────────────────────
1518
-
1519
- if (!RUN_FULL_AGENT) {
1520
- console.log("\n" + "=".repeat(70));
1521
- console.log("Multi-Agent E2E tests SKIPPED");
1522
- console.log("To run with real agents:");
1523
- console.log(
1524
- " RUN_FULL_AGENT_TESTS=true npm run test:e2e -- src/__tests__/e2e/multi-agent.e2e.test.ts",
1525
- );
1526
- console.log("=".repeat(70) + "\n");
1527
- }