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
@@ -0,0 +1,1330 @@
1
+ /**
2
+ * Live Agent E2E Tests (V2)
3
+ *
4
+ * Tests that spawn REAL Claude Code agents via acp-factory.
5
+ * These require authenticated Claude Code and hit the API.
6
+ *
7
+ * REQUIRES: RUN_FULL_AGENT_TESTS=true
8
+ *
9
+ * Run with:
10
+ * RUN_FULL_AGENT_TESTS=true npx vitest run --config vitest.e2e.config.ts src/__tests__/e2e/live-agent.e2e.test.ts
11
+ */
12
+
13
+ import {
14
+ describe,
15
+ it,
16
+ expect,
17
+ beforeEach,
18
+ afterEach,
19
+ } from "vitest";
20
+ import * as path from "path";
21
+ import * as os from "os";
22
+ import * as fs from "fs";
23
+ import { execSync } from "child_process";
24
+ import { bootV2, type MacroAgentSystemV2 } from "../../boot-v2.js";
25
+
26
+ // ─────────────────────────────────────────────────────────────────
27
+ // Configuration
28
+ // ─────────────────────────────────────────────────────────────────
29
+
30
+ const RUN_FULL_AGENT = !!process.env.RUN_FULL_AGENT_TESTS;
31
+ const describeFn = RUN_FULL_AGENT ? describe : describe.skip;
32
+
33
+ const TIMEOUT = {
34
+ SPAWN: 60_000,
35
+ PROMPT: 90_000,
36
+ MULTI: 180_000,
37
+ };
38
+
39
+ // ─────────────────────────────────────────────────────────────────
40
+ // Helpers
41
+ // ─────────────────────────────────────────────────────────────────
42
+
43
+ function createTestRepo(prefix: string): { path: string; cleanup: () => void } {
44
+ const tmpDir = fs.mkdtempSync(
45
+ path.join(os.tmpdir(), `live-agent-${prefix}-`)
46
+ );
47
+ const repoPath = path.join(tmpDir, "test-repo");
48
+ fs.mkdirSync(repoPath);
49
+ execSync("git init", { cwd: repoPath, stdio: "pipe" });
50
+ execSync('git config user.email "test@test.com"', { cwd: repoPath, stdio: "pipe" });
51
+ execSync('git config user.name "Test User"', { cwd: repoPath, stdio: "pipe" });
52
+ fs.writeFileSync(path.join(repoPath, "README.md"), "# Test Repo\n");
53
+ execSync("git add -A", { cwd: repoPath, stdio: "pipe" });
54
+ execSync('git commit -m "Initial commit"', { cwd: repoPath, stdio: "pipe" });
55
+
56
+ return {
57
+ path: repoPath,
58
+ cleanup: () => fs.rmSync(tmpDir, { recursive: true, force: true }),
59
+ };
60
+ }
61
+
62
+ function log(msg: string): void {
63
+ console.log(`[LIVE-E2E] ${msg}`);
64
+ }
65
+
66
+ // ─────────────────────────────────────────────────────────────────
67
+ // Tests
68
+ // ─────────────────────────────────────────────────────────────────
69
+
70
+ describeFn("Live Agent E2E (V2)", () => {
71
+ let system: MacroAgentSystemV2;
72
+ let testRepo: { path: string; cleanup: () => void };
73
+ let baseDir: string;
74
+
75
+ beforeEach(async () => {
76
+ testRepo = createTestRepo("v2");
77
+ baseDir = path.join(testRepo.path, ".macro-agent");
78
+ fs.mkdirSync(baseDir, { recursive: true });
79
+
80
+ // Boot V2 with real acp-factory (no mocking)
81
+ system = await bootV2({
82
+ cwd: testRepo.path,
83
+ baseDir,
84
+ defaultPermissionMode: "auto-approve",
85
+ inbox: {
86
+ socketPath: path.join(baseDir, "inbox.sock"),
87
+ },
88
+ });
89
+ log("System booted");
90
+ });
91
+
92
+ afterEach(async () => {
93
+ if (system) {
94
+ try {
95
+ // Terminate all running agents
96
+ const running = system.agentManager.list({ state: "running" });
97
+ for (const agent of running) {
98
+ try {
99
+ await system.agentManager.terminate(agent.id, "cancelled");
100
+ } catch {
101
+ // Best effort
102
+ }
103
+ }
104
+ await system.shutdown();
105
+ } catch {
106
+ // Best effort
107
+ }
108
+ }
109
+ testRepo?.cleanup();
110
+ log("Cleanup complete");
111
+ });
112
+
113
+ // ── Spawn & Prompt ──────────────────────────────────────────
114
+
115
+ it(
116
+ "should spawn a real agent and receive a prompt response",
117
+ async () => {
118
+ log("Spawning real agent...");
119
+ const agent = await system.agentManager.spawn({
120
+ task: "Reply with exactly: HELLO_FROM_AGENT",
121
+ role: "worker",
122
+ cwd: testRepo.path,
123
+ });
124
+
125
+ log(`Agent spawned: ${agent.id}`);
126
+ expect(agent.id).toBeDefined();
127
+ expect(agent.session).toBeDefined();
128
+
129
+ // Verify in store
130
+ const record = system.agentStore.getAgent(agent.id);
131
+ expect(record).not.toBeNull();
132
+ expect(record!.state).toBe("running");
133
+
134
+ // Verify in inbox
135
+ const inbox = (system.inboxAdapter as any).getInbox();
136
+ const inboxAgent = inbox.storage.getAgent(agent.id);
137
+ expect(inboxAgent).toBeDefined();
138
+ expect(inboxAgent.status).toBe("active");
139
+
140
+ log("Prompting agent...");
141
+ const updates: any[] = [];
142
+ for await (const update of system.agentManager.prompt(
143
+ agent.id,
144
+ 'Say exactly "HELLO_FROM_AGENT" and nothing else.'
145
+ )) {
146
+ updates.push(update);
147
+ }
148
+
149
+ log(`Got ${updates.length} updates from prompt`);
150
+ expect(updates.length).toBeGreaterThan(0);
151
+
152
+ // Check that at least one update has text content
153
+ const hasContent = updates.some(
154
+ (u) =>
155
+ u.type === "assistant" ||
156
+ u.type === "text" ||
157
+ (u as any).content !== undefined
158
+ );
159
+ expect(hasContent).toBe(true);
160
+
161
+ log("Terminating agent...");
162
+ await system.agentManager.terminate(agent.id, "completed");
163
+
164
+ const stopped = system.agentStore.getAgent(agent.id);
165
+ expect(stopped!.state).toBe("stopped");
166
+
167
+ // Verify deregistered from inbox
168
+ const afterStop = inbox.storage.getAgent(agent.id);
169
+ expect(afterStop.status).toBe("offline");
170
+
171
+ log("Test complete");
172
+ },
173
+ TIMEOUT.PROMPT
174
+ );
175
+
176
+ // ── Parent-Child with Real Agents ───────────────────────────
177
+
178
+ it(
179
+ "should spawn parent and child agents with real processes",
180
+ async () => {
181
+ log("Spawning coordinator...");
182
+ const coordinator = await system.agentManager.spawn({
183
+ task: "You are a coordinator. Wait for instructions.",
184
+ role: "coordinator",
185
+ cwd: testRepo.path,
186
+ });
187
+
188
+ log(`Coordinator spawned: ${coordinator.id}`);
189
+ expect(coordinator.id).toBeDefined();
190
+
191
+ log("Spawning worker under coordinator...");
192
+ const worker = await system.agentManager.spawn({
193
+ task: "You are a worker. Reply with WORKER_READY.",
194
+ role: "worker",
195
+ parent: coordinator.id,
196
+ cwd: testRepo.path,
197
+ });
198
+
199
+ log(`Worker spawned: ${worker.id}`);
200
+ expect(worker.id).toBeDefined();
201
+ expect(worker.agent.parent).toBe(coordinator.id);
202
+
203
+ // Verify hierarchy
204
+ const children = system.agentManager.getChildren(coordinator.id);
205
+ expect(children).toHaveLength(1);
206
+ expect(children[0].id).toBe(worker.id);
207
+
208
+ const hierarchy = system.agentManager.getHierarchy(coordinator.id);
209
+ expect(hierarchy!.totalAgents).toBe(2);
210
+
211
+ log("Terminating coordinator (should cascade)...");
212
+ await system.agentManager.terminate(coordinator.id, "completed");
213
+
214
+ // Both should be stopped
215
+ expect(system.agentStore.getAgent(coordinator.id)!.state).toBe("stopped");
216
+ expect(system.agentStore.getAgent(worker.id)!.state).toBe("stopped");
217
+
218
+ log("Test complete");
219
+ },
220
+ TIMEOUT.MULTI
221
+ );
222
+
223
+ // ── Inter-Agent Messaging with Real Agents ──────────────────
224
+
225
+ it(
226
+ "should deliver inbox messages between real agents",
227
+ async () => {
228
+ log("Spawning two agents...");
229
+ const a = await system.agentManager.spawn({
230
+ task: "Agent A. Wait for instructions.",
231
+ role: "coordinator",
232
+ cwd: testRepo.path,
233
+ });
234
+
235
+ const b = await system.agentManager.spawn({
236
+ task: "Agent B. Wait for instructions.",
237
+ role: "worker",
238
+ parent: a.id,
239
+ cwd: testRepo.path,
240
+ });
241
+
242
+ log("Sending message A → B via inbox...");
243
+ const msgId = await system.inboxAdapter.send(
244
+ a.id,
245
+ b.id,
246
+ "Hello from coordinator",
247
+ { threadTag: "live-test", importance: "normal" }
248
+ );
249
+ expect(msgId).toBeTruthy();
250
+
251
+ // Verify message in B's inbox
252
+ const bInbox = await system.inboxAdapter.checkInbox(b.id);
253
+ expect(bInbox.length).toBeGreaterThanOrEqual(1);
254
+
255
+ const msg = bInbox.find((m) => m.sender_id === a.id);
256
+ expect(msg).toBeDefined();
257
+
258
+ log("Sending event message B → A...");
259
+ await system.inboxAdapter.send(
260
+ b.id,
261
+ a.id,
262
+ { type: "event", event: "task_completed", data: { result: "success" } },
263
+ { importance: "high" }
264
+ );
265
+
266
+ const aInbox = await system.inboxAdapter.checkInbox(a.id);
267
+ const eventMsg = aInbox.find(
268
+ (m) => m.content?.type === "event" && m.content?.event === "task_completed"
269
+ );
270
+ expect(eventMsg).toBeDefined();
271
+
272
+ log("Reading thread...");
273
+ const thread = await system.inboxAdapter.readThread("live-test");
274
+ expect(thread.length).toBeGreaterThanOrEqual(1);
275
+
276
+ // Cleanup
277
+ await system.agentManager.terminate(a.id, "completed");
278
+
279
+ log("Test complete");
280
+ },
281
+ TIMEOUT.MULTI
282
+ );
283
+
284
+ // ── Cascade Termination with Inbox Notifications ────────────
285
+
286
+ it(
287
+ "should send inbox notification to parent when child terminates",
288
+ async () => {
289
+ log("Spawning parent + child...");
290
+ const parent = await system.agentManager.spawn({
291
+ task: "Parent agent. Wait for child status.",
292
+ role: "coordinator",
293
+ cwd: testRepo.path,
294
+ });
295
+
296
+ const child = await system.agentManager.spawn({
297
+ task: "Child agent. Do some work.",
298
+ role: "worker",
299
+ parent: parent.id,
300
+ cwd: testRepo.path,
301
+ });
302
+
303
+ log(`Parent: ${parent.id}, Child: ${child.id}`);
304
+
305
+ log("Terminating child...");
306
+ await system.agentManager.terminate(child.id, "completed");
307
+
308
+ // Parent should receive agent_stopped event via inbox
309
+ const parentInbox = await system.inboxAdapter.checkInbox(parent.id);
310
+ const stopNotification = parentInbox.find(
311
+ (m) =>
312
+ m.content?.type === "event" &&
313
+ m.content?.event === "agent_stopped" &&
314
+ m.content?.data?.agentId === child.id
315
+ );
316
+ expect(stopNotification).toBeDefined();
317
+ expect(stopNotification!.content.data.reason).toBe("completed");
318
+ expect(stopNotification!.importance).toBe("high");
319
+
320
+ log("Verified parent received stop notification via inbox");
321
+
322
+ // Cleanup
323
+ await system.agentManager.terminate(parent.id, "cancelled");
324
+ log("Test complete");
325
+ },
326
+ TIMEOUT.MULTI
327
+ );
328
+
329
+ // ── Agent Continuation ──────────────────────────────────────
330
+
331
+ it(
332
+ "should continue a terminated agent with a new real process",
333
+ async () => {
334
+ log("Spawning original agent...");
335
+ const original = await system.agentManager.spawn({
336
+ task: "Original task: compute 2+2",
337
+ role: "worker",
338
+ cwd: testRepo.path,
339
+ });
340
+
341
+ log(`Original: ${original.id}`);
342
+
343
+ // Prompt it so it has some history
344
+ log("Prompting original...");
345
+ const updates: any[] = [];
346
+ for await (const update of system.agentManager.prompt(
347
+ original.id,
348
+ "What is 2+2? Reply briefly."
349
+ )) {
350
+ updates.push(update);
351
+ }
352
+ log(`Got ${updates.length} updates`);
353
+
354
+ // Terminate
355
+ log("Terminating original...");
356
+ await system.agentManager.terminate(original.id, "completed");
357
+ expect(system.agentStore.getAgent(original.id)!.state).toBe("stopped");
358
+
359
+ // Continue
360
+ log("Continuing agent...");
361
+ const continued = await system.agentManager.continueAgent(original.id, {
362
+ additionalContext: "Previous agent computed 2+2=4. Continue from there.",
363
+ task: "Continue: now compute 3+3",
364
+ });
365
+
366
+ expect(continued.id).not.toBe(original.id);
367
+ expect(continued.agent.state).toBe("running");
368
+ expect(continued.agent.role).toBe("worker");
369
+
370
+ // Verify new agent is in store and inbox
371
+ const record = system.agentStore.getAgent(continued.id)!;
372
+ expect(record.state).toBe("running");
373
+
374
+ const inbox = (system.inboxAdapter as any).getInbox();
375
+ expect(inbox.storage.getAgent(continued.id)).toBeDefined();
376
+
377
+ // Prompt the continuation
378
+ log("Prompting continuation...");
379
+ const contUpdates: any[] = [];
380
+ for await (const update of system.agentManager.prompt(
381
+ continued.id,
382
+ "What is 3+3? Reply briefly."
383
+ )) {
384
+ contUpdates.push(update);
385
+ }
386
+ log(`Got ${contUpdates.length} continuation updates`);
387
+ expect(contUpdates.length).toBeGreaterThan(0);
388
+
389
+ // Cleanup
390
+ await system.agentManager.terminate(continued.id, "completed");
391
+ log("Test complete");
392
+ },
393
+ TIMEOUT.MULTI
394
+ );
395
+
396
+ // ── Agent Fork ──────────────────────────────────────────────
397
+
398
+ it(
399
+ "should fork a live agent session into a new real process",
400
+ async () => {
401
+ log("Spawning source agent...");
402
+ const source = await system.agentManager.spawn({
403
+ task: "Source agent for forking. Remember: the secret is BANANA.",
404
+ role: "worker",
405
+ cwd: testRepo.path,
406
+ });
407
+
408
+ log(`Source: ${source.id}`);
409
+
410
+ // Give it some conversation context
411
+ log("Prompting source...");
412
+ for await (const _update of system.agentManager.prompt(
413
+ source.id,
414
+ "Remember: the secret word is BANANA. Confirm you understand."
415
+ )) {
416
+ // drain
417
+ }
418
+
419
+ // Fork it
420
+ log("Forking agent...");
421
+ const forked = await system.agentManager.forkAgent(source.id, {
422
+ name: "forked-worker",
423
+ });
424
+
425
+ expect(forked.id).not.toBe(source.id);
426
+ expect(forked.agent.state).toBe("running");
427
+
428
+ // Verify fork metadata
429
+ const forkedRecord = system.agentStore.getAgent(forked.id)!;
430
+ expect(forkedRecord.metadata?.fork_of).toBe(source.id);
431
+
432
+ // Verify both agents are in inbox
433
+ const inbox = (system.inboxAdapter as any).getInbox();
434
+ expect(inbox.storage.getAgent(source.id)?.status).toBe("active");
435
+ expect(inbox.storage.getAgent(forked.id)?.status).toBe("active");
436
+
437
+ // Both should be independently addressable
438
+ await system.inboxAdapter.send(
439
+ "system",
440
+ forked.id,
441
+ "Hello forked agent"
442
+ );
443
+ const forkedInbox = await system.inboxAdapter.checkInbox(forked.id);
444
+ expect(forkedInbox.length).toBeGreaterThanOrEqual(1);
445
+
446
+ // Cleanup
447
+ await system.agentManager.terminate(source.id, "cancelled");
448
+ await system.agentManager.terminate(forked.id, "cancelled");
449
+ log("Test complete");
450
+ },
451
+ TIMEOUT.MULTI
452
+ );
453
+
454
+ // ── Context Injection via Inbox ─────────────────────────────
455
+
456
+ it(
457
+ "should deliver high-priority context injection via inbox",
458
+ async () => {
459
+ log("Spawning agent for context injection...");
460
+ const agent = await system.agentManager.spawn({
461
+ task: "Wait for context updates via inbox.",
462
+ role: "worker",
463
+ cwd: testRepo.path,
464
+ });
465
+
466
+ log(`Agent: ${agent.id}`);
467
+
468
+ // Send urgent context injection (replaces old steering/inject)
469
+ log("Sending urgent context injection...");
470
+ const msgId = await system.inboxAdapter.send(
471
+ "system",
472
+ agent.id,
473
+ {
474
+ type: "text",
475
+ text: "URGENT: Stop current work. Priority has changed to fixing bug #42.",
476
+ },
477
+ {
478
+ importance: "urgent",
479
+ subject: "Priority change",
480
+ threadTag: `inject:system`,
481
+ }
482
+ );
483
+ expect(msgId).toBeTruthy();
484
+
485
+ // Verify message in inbox with correct importance
486
+ const inbox = await system.inboxAdapter.checkInbox(agent.id);
487
+ const injected = inbox.find((m) => m.id === msgId);
488
+ expect(injected).toBeDefined();
489
+ expect(injected!.importance).toBe("urgent");
490
+ expect(injected!.subject).toBe("Priority change");
491
+
492
+ // Send high-priority event injection
493
+ log("Sending high-priority event injection...");
494
+ await system.inboxAdapter.send(
495
+ "system",
496
+ agent.id,
497
+ {
498
+ type: "event",
499
+ event: "context_update",
500
+ data: { newPriority: "bug-42", previousTask: "feature-x" },
501
+ },
502
+ { importance: "high" }
503
+ );
504
+
505
+ const inboxAfter = await system.inboxAdapter.checkInbox(agent.id);
506
+ const eventInjection = inboxAfter.find(
507
+ (m) => m.content?.type === "event" && m.content?.event === "context_update"
508
+ );
509
+ expect(eventInjection).toBeDefined();
510
+ expect(eventInjection!.importance).toBe("high");
511
+
512
+ // Cleanup
513
+ await system.agentManager.terminate(agent.id, "cancelled");
514
+ log("Test complete");
515
+ },
516
+ TIMEOUT.PROMPT
517
+ );
518
+
519
+ // ── Team Bootstrap with Real Agents ─────────────────────────
520
+
521
+ it(
522
+ "should bootstrap a team with real agents and scoped inbox",
523
+ async () => {
524
+ const { loadTeam } = await import("../../teams/team-loader.js");
525
+ const { TeamRuntimeV2 } = await import("../../teams/team-runtime-v2.js");
526
+
527
+ log("Loading self-driving team template...");
528
+ const manifest = await loadTeam(
529
+ "self-driving",
530
+ system.roleRegistry,
531
+ path.resolve(import.meta.dirname, "../../..")
532
+ );
533
+
534
+ const runtime = new TeamRuntimeV2(manifest, {
535
+ agentManager: system.agentManager,
536
+ inboxAdapter: system.inboxAdapter,
537
+ tasksAdapter: system.tasksAdapter,
538
+ });
539
+
540
+ await runtime.initialize();
541
+
542
+ log("Bootstrapping team...");
543
+ const result = await runtime.bootstrap();
544
+
545
+ expect(result.rootId).toBeDefined();
546
+ expect(result.companionIds.length).toBeGreaterThanOrEqual(1);
547
+
548
+ log(`Root: ${result.rootId}, Companions: ${result.companionIds.join(", ")}`);
549
+
550
+ // Verify agents have team scope
551
+ const rootRecord = system.agentStore.getAgent(result.rootId)!;
552
+ expect(rootRecord.team).toBe("self-driving");
553
+ expect(rootRecord.role).toBe("planner");
554
+
555
+ const companionRecord = system.agentStore.getAgent(result.companionIds[0])!;
556
+ expect(companionRecord.team).toBe("self-driving");
557
+ expect(companionRecord.role).toBe("judge");
558
+
559
+ // Verify scoped inbox registration
560
+ const inbox = (system.inboxAdapter as any).getInbox();
561
+ const rootInboxAgent = inbox.storage.getAgent(result.rootId);
562
+ expect(rootInboxAgent).toBeDefined();
563
+ expect(rootInboxAgent.scope).toBe("self-driving");
564
+
565
+ // Install signal filtering
566
+ runtime.installOnServices();
567
+
568
+ // Send a message between team agents
569
+ log("Sending message judge → planner...");
570
+ await system.inboxAdapter.send(
571
+ result.companionIds[0], // judge
572
+ result.rootId, // planner
573
+ {
574
+ type: "event",
575
+ event: "FIXUP_CREATED",
576
+ data: { fix: "typo correction" },
577
+ },
578
+ { scope: "self-driving" }
579
+ );
580
+
581
+ const plannerInbox = await system.inboxAdapter.checkInbox(result.rootId);
582
+ expect(plannerInbox.length).toBeGreaterThanOrEqual(1);
583
+
584
+ // Prompt root agent to verify it's a real live process
585
+ log("Prompting planner...");
586
+ const updates: any[] = [];
587
+ for await (const update of system.agentManager.prompt(
588
+ result.rootId,
589
+ "Respond with: TEAM_READY"
590
+ )) {
591
+ updates.push(update);
592
+ }
593
+ expect(updates.length).toBeGreaterThan(0);
594
+
595
+ // Teardown team
596
+ log("Tearing down team...");
597
+ await runtime.teardown();
598
+
599
+ // Terminate all team agents
600
+ await system.agentManager.terminate(result.rootId, "cancelled");
601
+ for (const cid of result.companionIds) {
602
+ try {
603
+ await system.agentManager.terminate(cid, "cancelled");
604
+ } catch {
605
+ // May already be stopped via cascade
606
+ }
607
+ }
608
+
609
+ log("Test complete");
610
+ },
611
+ TIMEOUT.MULTI
612
+ );
613
+
614
+ // ── Multi-Worker with Inbox Coordination ────────────────────
615
+
616
+ it(
617
+ "should coordinate multiple workers via inbox messaging",
618
+ async () => {
619
+ log("Spawning coordinator + 2 workers...");
620
+ const coord = await system.agentManager.spawn({
621
+ task: "Coordinate two workers.",
622
+ role: "coordinator",
623
+ cwd: testRepo.path,
624
+ });
625
+
626
+ const w1 = await system.agentManager.spawn({
627
+ task: "Worker 1: handle frontend.",
628
+ role: "worker",
629
+ parent: coord.id,
630
+ cwd: testRepo.path,
631
+ });
632
+
633
+ const w2 = await system.agentManager.spawn({
634
+ task: "Worker 2: handle backend.",
635
+ role: "worker",
636
+ parent: coord.id,
637
+ cwd: testRepo.path,
638
+ });
639
+
640
+ log(`Coord: ${coord.id}, W1: ${w1.id}, W2: ${w2.id}`);
641
+
642
+ // Coordinator broadcasts task assignments
643
+ log("Broadcasting task assignments...");
644
+ await system.inboxAdapter.send(
645
+ coord.id,
646
+ [w1.id, w2.id],
647
+ {
648
+ type: "event",
649
+ event: "task_assigned",
650
+ data: { phase: "implementation" },
651
+ },
652
+ { threadTag: "sprint-1", importance: "high" }
653
+ );
654
+
655
+ // Both workers should have the message
656
+ const w1Inbox = await system.inboxAdapter.checkInbox(w1.id);
657
+ const w2Inbox = await system.inboxAdapter.checkInbox(w2.id);
658
+ expect(w1Inbox.find((m) => m.content?.event === "task_assigned")).toBeDefined();
659
+ expect(w2Inbox.find((m) => m.content?.event === "task_assigned")).toBeDefined();
660
+
661
+ // Worker 1 reports completion
662
+ log("W1 reporting completion...");
663
+ await system.inboxAdapter.send(
664
+ w1.id,
665
+ coord.id,
666
+ {
667
+ type: "event",
668
+ event: "task_completed",
669
+ data: { worker: w1.id, component: "frontend" },
670
+ },
671
+ { threadTag: "sprint-1", importance: "normal" }
672
+ );
673
+
674
+ // Worker 2 reports completion
675
+ log("W2 reporting completion...");
676
+ await system.inboxAdapter.send(
677
+ w2.id,
678
+ coord.id,
679
+ {
680
+ type: "event",
681
+ event: "task_completed",
682
+ data: { worker: w2.id, component: "backend" },
683
+ },
684
+ { threadTag: "sprint-1", importance: "normal" }
685
+ );
686
+
687
+ // Coordinator should have both completion events
688
+ const coordInbox = await system.inboxAdapter.checkInbox(coord.id);
689
+ const completions = coordInbox.filter(
690
+ (m) => m.content?.type === "event" && m.content?.event === "task_completed"
691
+ );
692
+ expect(completions.length).toBeGreaterThanOrEqual(2);
693
+
694
+ // Read the full thread
695
+ const thread = await system.inboxAdapter.readThread("sprint-1");
696
+ // Assignment + 2 completions = at least 3 messages in thread
697
+ expect(thread.length).toBeGreaterThanOrEqual(3);
698
+
699
+ log("Verified full coordination flow via inbox");
700
+
701
+ // Terminate parent (cascades to workers)
702
+ await system.agentManager.terminate(coord.id, "completed");
703
+
704
+ expect(system.agentStore.getAgent(w1.id)!.state).toBe("stopped");
705
+ expect(system.agentStore.getAgent(w2.id)!.state).toBe("stopped");
706
+
707
+ log("Test complete");
708
+ },
709
+ TIMEOUT.MULTI
710
+ );
711
+
712
+ // ── Control Socket: Spawn via IPC ───────────────────────────
713
+
714
+ it(
715
+ "should spawn agent via control socket (MCP subprocess flow)",
716
+ async () => {
717
+ const { ControlClient } = await import("../../control/control-client.js");
718
+
719
+ log("Connecting control client to control socket...");
720
+ const controlClient = new ControlClient(system.controlSocketPath);
721
+ await controlClient.connect();
722
+ expect(controlClient.connected).toBe(true);
723
+
724
+ log("Pinging control server...");
725
+ const pingOk = await controlClient.ping();
726
+ expect(pingOk).toBe(true);
727
+
728
+ // First, spawn a coordinator via the normal API (to be the parent)
729
+ log("Spawning coordinator via main API...");
730
+ const coordinator = await system.agentManager.spawn({
731
+ task: "Coordinator for control socket test",
732
+ role: "coordinator",
733
+ cwd: testRepo.path,
734
+ });
735
+
736
+ // Now spawn a worker via the control socket (simulating MCP subprocess)
737
+ log("Spawning worker via control socket...");
738
+ const spawnResult = await controlClient.spawn({
739
+ task: "Worker spawned via control socket",
740
+ role: "worker",
741
+ parent: coordinator.id,
742
+ cwd: testRepo.path,
743
+ });
744
+
745
+ expect(spawnResult.agent_id).toBeDefined();
746
+ expect(spawnResult.role).toBe("worker");
747
+ log(`Worker spawned via control socket: ${spawnResult.agent_id}`);
748
+
749
+ // Verify the agent exists in AgentStore (shared SQLite)
750
+ const record = system.agentStore.getAgent(spawnResult.agent_id);
751
+ expect(record).not.toBeNull();
752
+ expect(record!.role).toBe("worker");
753
+ expect(record!.state).toBe("running");
754
+ expect(record!.parent_id).toBe(coordinator.id);
755
+
756
+ // Verify the agent is registered in inbox
757
+ const inbox = (system.inboxAdapter as any).getInbox();
758
+ const inboxAgent = inbox.storage.getAgent(spawnResult.agent_id);
759
+ expect(inboxAgent).toBeDefined();
760
+ expect(inboxAgent.status).toBe("active");
761
+
762
+ // Verify the agent appears in hierarchy
763
+ const hierarchy = system.agentManager.getHierarchy(coordinator.id);
764
+ expect(hierarchy!.totalAgents).toBe(2);
765
+
766
+ // Query via control socket (simulating MCP subprocess reads)
767
+ log("Querying agent via control socket...");
768
+ const agentFromControl = await controlClient.getAgent(spawnResult.agent_id);
769
+ expect(agentFromControl).toBeDefined();
770
+ expect((agentFromControl as any).role).toBe("worker");
771
+
772
+ const children = await controlClient.getChildren(coordinator.id);
773
+ expect(children).toHaveLength(1);
774
+ expect((children[0] as any).id).toBe(spawnResult.agent_id);
775
+
776
+ // Terminate via control socket (simulating MCP subprocess stop_agent)
777
+ log("Terminating worker via control socket...");
778
+ await controlClient.terminate(spawnResult.agent_id, "completed");
779
+
780
+ const stoppedRecord = system.agentStore.getAgent(spawnResult.agent_id);
781
+ expect(stoppedRecord!.state).toBe("stopped");
782
+ expect(stoppedRecord!.stop_reason).toBe("completed");
783
+
784
+ // Verify deregistered from inbox
785
+ const afterStop = inbox.storage.getAgent(spawnResult.agent_id);
786
+ expect(afterStop.status).toBe("offline");
787
+
788
+ // Cleanup
789
+ controlClient.disconnect();
790
+ await system.agentManager.terminate(coordinator.id, "cancelled");
791
+
792
+ log("Test complete");
793
+ },
794
+ TIMEOUT.MULTI
795
+ );
796
+
797
+ // ── Control Socket: Error Handling ──────────────────────────
798
+
799
+ it(
800
+ "should handle control socket errors correctly",
801
+ async () => {
802
+ const { ControlClient } = await import("../../control/control-client.js");
803
+
804
+ log("Connecting control client...");
805
+ const controlClient = new ControlClient(system.controlSocketPath);
806
+ await controlClient.connect();
807
+
808
+ // Try to terminate a non-existent agent
809
+ log("Testing terminate of non-existent agent...");
810
+ let terminateError: Error | null = null;
811
+ try {
812
+ await controlClient.terminate("nonexistent_agent", "cancelled");
813
+ } catch (err) {
814
+ terminateError = err as Error;
815
+ }
816
+ expect(terminateError).not.toBeNull();
817
+ expect(terminateError!.message).toContain("not found");
818
+
819
+ // Try to get a non-existent agent
820
+ log("Testing get of non-existent agent...");
821
+ let getError: Error | null = null;
822
+ try {
823
+ await controlClient.getAgent("nonexistent_agent");
824
+ } catch (err) {
825
+ getError = err as Error;
826
+ }
827
+ expect(getError).not.toBeNull();
828
+
829
+ controlClient.disconnect();
830
+ log("Test complete");
831
+ },
832
+ TIMEOUT.SPAWN
833
+ );
834
+
835
+ // ── Helper: detect tool calls in session updates ────────────
836
+
837
+ /**
838
+ * Extract tool calls from session updates.
839
+ *
840
+ * acp-factory tool_call updates have this structure:
841
+ * { sessionUpdate: "tool_call", title: "mcp__macro-agent__done", kind: "tool_call", ... }
842
+ *
843
+ * The tool name is in the `title` field, formatted as "mcp__<server>__<tool>" or just "<tool>".
844
+ */
845
+ function findToolCalls(updates: any[]): { name: string; fullTitle: string; input: any }[] {
846
+ const calls: { name: string; fullTitle: string; input: any }[] = [];
847
+ for (const u of updates) {
848
+ const uAny = u as any;
849
+
850
+ if (
851
+ (uAny.sessionUpdate === "tool_call" || uAny.sessionUpdate === "tool_call_update") &&
852
+ uAny.title
853
+ ) {
854
+ const fullTitle = uAny.title as string;
855
+ // Extract short name: "mcp__macro-agent__done" → "done"
856
+ const parts = fullTitle.split("__");
857
+ const shortName = parts[parts.length - 1];
858
+
859
+ if (!calls.some(c => c.fullTitle === fullTitle)) {
860
+ calls.push({
861
+ name: shortName,
862
+ fullTitle,
863
+ input: uAny.rawInput ?? uAny.input,
864
+ });
865
+ }
866
+ }
867
+
868
+ // content block format
869
+ if (uAny.content?.type === "tool_use") {
870
+ const name = uAny.content.name;
871
+ if (!calls.some(c => c.name === name)) {
872
+ calls.push({ name, fullTitle: name, input: uAny.content.input });
873
+ }
874
+ }
875
+ }
876
+ return calls;
877
+ }
878
+
879
+ function getTextContent(updates: any[]): string {
880
+ const parts: string[] = [];
881
+ for (const u of updates) {
882
+ const uAny = u as any;
883
+ if (uAny.sessionUpdate === "agent_message_chunk" && uAny.content?.text) {
884
+ parts.push(uAny.content.text);
885
+ }
886
+ }
887
+ return parts.join("");
888
+ }
889
+
890
+ // ── Agent-Initiated Spawn via MCP Tool ──────────────────────
891
+
892
+ it(
893
+ "should allow a real agent to spawn a child via spawn_agent MCP tool",
894
+ async () => {
895
+ log("Spawning coordinator agent...");
896
+ const coordinator = await system.agentManager.spawn({
897
+ task: "You are a coordinator. When asked, use the spawn_agent tool to create a worker agent.",
898
+ role: "coordinator",
899
+ cwd: testRepo.path,
900
+ });
901
+
902
+ log(`Coordinator: ${coordinator.id}`);
903
+
904
+ // Prompt the coordinator to spawn a child using the MCP tool
905
+ log("Prompting coordinator to spawn a worker...");
906
+ const updates: any[] = [];
907
+ for await (const update of system.agentManager.prompt(
908
+ coordinator.id,
909
+ 'Use the spawn_agent tool to create a worker agent with task "Write a hello world function". Do not do anything else — just call spawn_agent and report the result.'
910
+ )) {
911
+ updates.push(update);
912
+ }
913
+
914
+ log(`Got ${updates.length} updates from coordinator prompt`);
915
+
916
+ // Log update types and any text content for debugging
917
+ for (const u of updates) {
918
+ const uAny = u as any;
919
+ if (uAny.sessionUpdate === "agent_message_chunk" && uAny.content?.text) {
920
+ log(` [text] ${uAny.content.text.slice(0, 200)}`);
921
+ } else if (uAny.type === "tool_use" || uAny.subtype === "tool_use") {
922
+ log(` [tool_use] ${JSON.stringify(uAny).slice(0, 200)}`);
923
+ } else if (uAny.type === "tool_result" || uAny.subtype === "tool_result") {
924
+ log(` [tool_result] ${JSON.stringify(uAny).slice(0, 200)}`);
925
+ } else {
926
+ log(` [${uAny.sessionUpdate ?? uAny.type ?? "unknown"}]`);
927
+ }
928
+ }
929
+
930
+ // Wait a moment for the spawn to complete (async via control socket)
931
+ await new Promise((r) => setTimeout(r, 2000));
932
+
933
+ // Check if a child was spawned
934
+ const children = system.agentManager.getChildren(coordinator.id);
935
+ log(`Children found: ${children.length}`);
936
+
937
+ if (children.length > 0) {
938
+ log(`Child agent spawned: ${children[0].id} (role: ${children[0].role})`);
939
+
940
+ // Verify child is in AgentStore
941
+ const childRecord = system.agentStore.getAgent(children[0].id);
942
+ expect(childRecord).not.toBeNull();
943
+ expect(childRecord!.state).toBe("running");
944
+ expect(childRecord!.parent_id).toBe(coordinator.id);
945
+
946
+ // Verify child is in inbox
947
+ const inbox = (system.inboxAdapter as any).getInbox();
948
+ const childInbox = inbox.storage.getAgent(children[0].id);
949
+ expect(childInbox).toBeDefined();
950
+ expect(childInbox.status).toBe("active");
951
+
952
+ // Verify hierarchy
953
+ const hierarchy = system.agentManager.getHierarchy(coordinator.id);
954
+ expect(hierarchy!.totalAgents).toBeGreaterThanOrEqual(2);
955
+
956
+ log("Agent-initiated spawn via MCP tool verified!");
957
+ } else {
958
+ // The agent might not have called spawn_agent — check the response
959
+ // for tool use indicators
960
+ const hasToolUse = updates.some(
961
+ (u: any) =>
962
+ u.type === "tool_use" ||
963
+ u.subtype === "tool_use" ||
964
+ (typeof u.content === "object" && u.content?.type === "tool_use")
965
+ );
966
+ log(`Tool use detected in updates: ${hasToolUse}`);
967
+
968
+ // Even if the agent didn't spawn (model discretion), verify the
969
+ // control socket path was available
970
+ expect(system.controlSocketPath).toBeTruthy();
971
+ log("Note: Agent did not call spawn_agent (model discretion). Control socket path verified.");
972
+ }
973
+
974
+ // Cleanup
975
+ await system.agentManager.terminate(coordinator.id, "completed");
976
+ log("Test complete");
977
+ },
978
+ TIMEOUT.MULTI
979
+ );
980
+
981
+ // ── done() tool: give worker real work, verify done flow ────
982
+
983
+ it(
984
+ "should verify done() tool works when worker completes a real task",
985
+ async () => {
986
+ log("Spawning coordinator + worker...");
987
+ const coordinator = await system.agentManager.spawn({
988
+ task: "You coordinate workers. Monitor their completion status.",
989
+ role: "coordinator",
990
+ cwd: testRepo.path,
991
+ });
992
+
993
+ const worker = await system.agentManager.spawn({
994
+ task: "Create a file called task-result.txt, then call the done MCP tool to signal completion.",
995
+ role: "worker",
996
+ parent: coordinator.id,
997
+ cwd: testRepo.path,
998
+ });
999
+
1000
+ log(`Coordinator: ${coordinator.id}, Worker: ${worker.id}`);
1001
+
1002
+ // Use promptUntilDone — it follows up if the agent doesn't call done()
1003
+ log("Prompting worker with task + done instruction...");
1004
+ const result = await system.agentManager.promptUntilDone(
1005
+ worker.id,
1006
+ `Create a file at ${testRepo.path}/task-result.txt with content "task completed". After creating the file, you MUST call the "done" MCP tool with status="completed" and summary="Created task-result.txt". The done tool signals to the orchestration system that you are finished.`,
1007
+ {
1008
+ maxFollowUps: 2,
1009
+ onUpdate: (update: any) => {
1010
+ if (update.sessionUpdate === "tool_call") {
1011
+ log(` [tool_call] ${update.toolName ?? "unknown"}`);
1012
+ }
1013
+ },
1014
+ }
1015
+ );
1016
+
1017
+ log(`promptUntilDone result: doneCalled=${result.doneCalled}, doneStatus=${result.doneStatus}, updates=${result.updates.length}`);
1018
+
1019
+ // Check if the file was created (verifies worker did real work)
1020
+ const { existsSync, readFileSync } = await import("fs");
1021
+ const filePath = path.join(testRepo.path, "task-result.txt");
1022
+ const fileCreated = existsSync(filePath);
1023
+ log(`File created: ${fileCreated}`);
1024
+ if (fileCreated) {
1025
+ const content = readFileSync(filePath, "utf-8");
1026
+ log(`File content: "${content.trim()}"`);
1027
+ }
1028
+
1029
+ // Check if done was called
1030
+ if (result.doneCalled) {
1031
+ log(`done() was called! status=${result.doneStatus}`);
1032
+
1033
+ // Dump done tool_call updates for debugging rawInput
1034
+ const doneUpdates = result.updates.filter(
1035
+ (u: any) =>
1036
+ (u.sessionUpdate === "tool_call" || u.sessionUpdate === "tool_call_update") &&
1037
+ typeof u.title === "string" &&
1038
+ u.title.endsWith("__done")
1039
+ );
1040
+ for (const du of doneUpdates) {
1041
+ const d = du as any;
1042
+ log(` done update: status=${d.status}, rawInput=${typeof d.rawInput === "string" ? d.rawInput.slice(0, 200) : JSON.stringify(d.rawInput)?.slice(0, 200)}`);
1043
+ if (d.content) {
1044
+ log(` done content: ${typeof d.content === "string" ? d.content.slice(0, 200) : JSON.stringify(d.content)?.slice(0, 200)}`);
1045
+ }
1046
+ }
1047
+
1048
+ // Wait for inbox notifications to propagate
1049
+ await new Promise((r) => setTimeout(r, 2000));
1050
+
1051
+ // Check coordinator's inbox for WORKER_DONE or agent_stopped
1052
+ const coordInbox = await system.inboxAdapter.checkInbox(coordinator.id);
1053
+ log(`Coordinator inbox: ${coordInbox.length} messages`);
1054
+
1055
+ const lifecycleMsgs = coordInbox.filter(
1056
+ (m) =>
1057
+ m.content?.type === "event" &&
1058
+ (m.content?.event === "WORKER_DONE" ||
1059
+ m.content?.event === "agent_stopped")
1060
+ );
1061
+ log(`Lifecycle messages to coordinator: ${lifecycleMsgs.length}`);
1062
+ for (const msg of lifecycleMsgs) {
1063
+ log(` event=${msg.content.event}, from=${msg.sender_id}, importance=${msg.importance}`);
1064
+ }
1065
+
1066
+ if (lifecycleMsgs.length > 0) {
1067
+ expect(lifecycleMsgs.length).toBeGreaterThanOrEqual(1);
1068
+ log("Coordinator received lifecycle notification via inbox!");
1069
+ }
1070
+ } else {
1071
+ // done wasn't called — log what happened
1072
+ const text = getTextContent(result.updates);
1073
+ log(`Worker didn't call done(). Response: ${text.slice(0, 300)}`);
1074
+
1075
+ // Log all tool calls for debugging
1076
+ const allToolCalls = findToolCalls(result.updates);
1077
+ log(`All tool calls: ${allToolCalls.map(t => t.name).join(", ") || "none"}`);
1078
+
1079
+ // Log update types
1080
+ const updateTypes = result.updates
1081
+ .map((u: any) => u.sessionUpdate ?? u.type ?? "?")
1082
+ .filter((t: string) => t !== "agent_message_chunk");
1083
+ log(`Non-text update types: ${updateTypes.join(", ")}`);
1084
+ }
1085
+
1086
+ // Cleanup
1087
+ try { await system.agentManager.terminate(worker.id, "cancelled"); } catch {}
1088
+ await system.agentManager.terminate(coordinator.id, "cancelled");
1089
+ log("Test complete");
1090
+ },
1091
+ TIMEOUT.MULTI
1092
+ );
1093
+
1094
+ // ── Agent spawns child, child does work, parent sees result ─
1095
+
1096
+ it(
1097
+ "should verify spawned child agent actually executes and produces output",
1098
+ async () => {
1099
+ log("Spawning coordinator...");
1100
+ const coordinator = await system.agentManager.spawn({
1101
+ task: "You are a coordinator. Spawn workers and check their results.",
1102
+ role: "coordinator",
1103
+ cwd: testRepo.path,
1104
+ });
1105
+
1106
+ log(`Coordinator: ${coordinator.id}`);
1107
+
1108
+ // Prompt coordinator to spawn a child that creates a file
1109
+ log("Prompting coordinator to spawn a worker that creates a file...");
1110
+ const spawnUpdates: any[] = [];
1111
+ for await (const update of system.agentManager.prompt(
1112
+ coordinator.id,
1113
+ `Use spawn_agent to create a worker with task "Create a file called hello.txt containing 'Hello from worker agent'". Then tell me the agent_id from the result.`
1114
+ )) {
1115
+ spawnUpdates.push(update);
1116
+ }
1117
+
1118
+ const spawnToolCalls = findToolCalls(spawnUpdates);
1119
+ const spawnCalled = spawnToolCalls.some(t => t.name === "spawn_agent");
1120
+ log(`spawn_agent called: ${spawnCalled}`);
1121
+
1122
+ // Wait for child to be created
1123
+ await new Promise((r) => setTimeout(r, 3000));
1124
+
1125
+ const children = system.agentManager.getChildren(coordinator.id);
1126
+ log(`Children: ${children.length}`);
1127
+
1128
+ if (children.length > 0) {
1129
+ const child = children[0];
1130
+ log(`Child: ${child.id} (state: ${child.state})`);
1131
+
1132
+ // The child is a real Claude Code process.
1133
+ // Prompt it to create the file.
1134
+ if (system.agentManager.hasActiveSession(child.id)) {
1135
+ log("Prompting child to create file...");
1136
+ const childUpdates: any[] = [];
1137
+ for await (const update of system.agentManager.prompt(
1138
+ child.id,
1139
+ `Create a file at ${testRepo.path}/hello.txt with content "Hello from worker agent". Use the Write tool.`
1140
+ )) {
1141
+ childUpdates.push(update);
1142
+ }
1143
+
1144
+ const childToolCalls = findToolCalls(childUpdates);
1145
+ log(`Child tool calls: ${childToolCalls.map(t => t.name).join(", ") || "none"}`);
1146
+
1147
+ // Wait for file creation
1148
+ await new Promise((r) => setTimeout(r, 1000));
1149
+
1150
+ // Verify the file was created
1151
+ const { existsSync, readFileSync } = await import("fs");
1152
+ const filePath = path.join(testRepo.path, "hello.txt");
1153
+ if (existsSync(filePath)) {
1154
+ const content = readFileSync(filePath, "utf-8");
1155
+ log(`File created! Content: "${content.trim()}"`);
1156
+ expect(content).toContain("Hello");
1157
+ } else {
1158
+ log("File not created (agent may have used different path)");
1159
+ // Check if child used any write-like tools
1160
+ const wroteFile = childToolCalls.some(
1161
+ t => t.name === "Write" || t.name === "write" || t.name === "Bash"
1162
+ );
1163
+ log(`Child attempted file write: ${wroteFile}`);
1164
+ }
1165
+ }
1166
+ } else {
1167
+ log("No children spawned — spawn_agent may not have been called");
1168
+ const text = getTextContent(spawnUpdates);
1169
+ log(`Coordinator response: ${text.slice(0, 200)}`);
1170
+ }
1171
+
1172
+ // Cleanup
1173
+ for (const child of children) {
1174
+ try { await system.agentManager.terminate(child.id, "cancelled"); } catch {}
1175
+ }
1176
+ await system.agentManager.terminate(coordinator.id, "cancelled");
1177
+ log("Test complete");
1178
+ },
1179
+ TIMEOUT.MULTI
1180
+ );
1181
+
1182
+ // ── Agent calls stop_agent on a child ───────────────────────
1183
+
1184
+ it(
1185
+ "should verify agent can stop a child via stop_agent MCP tool",
1186
+ async () => {
1187
+ log("Spawning coordinator...");
1188
+ const coordinator = await system.agentManager.spawn({
1189
+ task: "You are a coordinator that manages workers.",
1190
+ role: "coordinator",
1191
+ cwd: testRepo.path,
1192
+ });
1193
+
1194
+ // Spawn a worker directly (so we know it exists)
1195
+ const worker = await system.agentManager.spawn({
1196
+ task: "Wait for instructions.",
1197
+ role: "worker",
1198
+ parent: coordinator.id,
1199
+ cwd: testRepo.path,
1200
+ });
1201
+
1202
+ log(`Coordinator: ${coordinator.id}, Worker: ${worker.id}`);
1203
+ expect(system.agentStore.getAgent(worker.id)!.state).toBe("running");
1204
+
1205
+ // Prompt coordinator to stop the worker
1206
+ log("Prompting coordinator to stop the worker...");
1207
+ const updates: any[] = [];
1208
+ for await (const update of system.agentManager.prompt(
1209
+ coordinator.id,
1210
+ `You have an MCP tool called "stop_agent". Call it with agent_id="${worker.id}" and reason="completed". This is a legitimate test operation on your own child agent.`
1211
+ )) {
1212
+ updates.push(update);
1213
+ }
1214
+
1215
+ const toolCalls = findToolCalls(updates);
1216
+ const stopCalled = toolCalls.some(t => t.name === "stop_agent");
1217
+ log(`stop_agent called: ${stopCalled}`);
1218
+
1219
+ // Wait for termination regardless — the agent may have called it
1220
+ // through a mechanism our detector doesn't catch
1221
+ await new Promise((r) => setTimeout(r, 3000));
1222
+
1223
+ const workerRecord = system.agentStore.getAgent(worker.id)!;
1224
+ log(`Worker state after prompt: ${workerRecord.state}`);
1225
+
1226
+ if (workerRecord.state === "stopped") {
1227
+ log("Worker was stopped (verified in AgentStore)!");
1228
+ expect(workerRecord.state).toBe("stopped");
1229
+ } else if (stopCalled) {
1230
+ log("stop_agent tool was called but worker may still be running");
1231
+ } else {
1232
+ const text = getTextContent(updates);
1233
+ log(`Coordinator response: ${text.slice(0, 200)}`);
1234
+ // Log all update types for debugging
1235
+ log(`Update types: ${updates.map((u: any) => u.sessionUpdate ?? u.type ?? "?").join(", ")}`);
1236
+ }
1237
+
1238
+ // Cleanup
1239
+ try { await system.agentManager.terminate(worker.id, "cancelled"); } catch {}
1240
+ await system.agentManager.terminate(coordinator.id, "cancelled");
1241
+ log("Test complete");
1242
+ },
1243
+ TIMEOUT.MULTI
1244
+ );
1245
+
1246
+ // ── Agent uses inject_context to steer another agent ────────
1247
+
1248
+ it(
1249
+ "should verify agent can inject context into another agent via MCP tool",
1250
+ async () => {
1251
+ log("Spawning two agents...");
1252
+ const coordinator = await system.agentManager.spawn({
1253
+ task: "You coordinate workers. Use inject_context to steer them.",
1254
+ role: "coordinator",
1255
+ cwd: testRepo.path,
1256
+ });
1257
+
1258
+ const worker = await system.agentManager.spawn({
1259
+ task: "Wait for instructions.",
1260
+ role: "worker",
1261
+ parent: coordinator.id,
1262
+ cwd: testRepo.path,
1263
+ });
1264
+
1265
+ log(`Coordinator: ${coordinator.id}, Worker: ${worker.id}`);
1266
+
1267
+ // First, have the coordinator spawn a child itself so it "knows" about it
1268
+ log("Having coordinator spawn its own child first...");
1269
+ const spawnUpdates: any[] = [];
1270
+ for await (const update of system.agentManager.prompt(
1271
+ coordinator.id,
1272
+ `Use spawn_agent to create a worker with task "Wait for context updates".`
1273
+ )) {
1274
+ spawnUpdates.push(update);
1275
+ }
1276
+ await new Promise((r) => setTimeout(r, 3000));
1277
+
1278
+ const children = system.agentManager.getChildren(coordinator.id);
1279
+ const targetId = children.length > 0
1280
+ ? children[children.length - 1].id // Use the coordinator's own child
1281
+ : worker.id; // Fallback to our manually spawned worker
1282
+
1283
+ log(`Target for inject_context: ${targetId}`);
1284
+
1285
+ // Prompt coordinator to inject context
1286
+ log("Prompting coordinator to inject context...");
1287
+ const updates: any[] = [];
1288
+ for await (const update of system.agentManager.prompt(
1289
+ coordinator.id,
1290
+ `Use the inject_context tool to send a message to agent "${targetId}". Set content to "New task assignment: implement feature #42" and urgent to true.`
1291
+ )) {
1292
+ updates.push(update);
1293
+ }
1294
+
1295
+ const toolCalls = findToolCalls(updates);
1296
+ const injectCalled = toolCalls.some(t => t.name === "inject_context");
1297
+ log(`inject_context called: ${injectCalled}`);
1298
+
1299
+ // Check inbox regardless of tool call detection
1300
+ await new Promise((r) => setTimeout(r, 2000));
1301
+
1302
+ const targetInbox = await system.inboxAdapter.checkInbox(targetId);
1303
+ log(`Target inbox: ${targetInbox.length} messages`);
1304
+
1305
+ const injectedMsg = targetInbox.find(
1306
+ (m) => m.sender_id === coordinator.id
1307
+ );
1308
+
1309
+ if (injectedMsg) {
1310
+ log(`Injected message found! importance=${injectedMsg.importance}, subject=${injectedMsg.subject ?? "none"}`);
1311
+ log("Agent-initiated context injection verified!");
1312
+ } else if (injectCalled) {
1313
+ log("inject_context tool was called but message not found in inbox");
1314
+ } else {
1315
+ const text = getTextContent(updates);
1316
+ log(`Coordinator response: ${text.slice(0, 200)}`);
1317
+ log(`Update types: ${updates.map((u: any) => u.sessionUpdate ?? u.type ?? "?").join(", ")}`);
1318
+ }
1319
+
1320
+ // Cleanup — terminate all children, then coordinator
1321
+ for (const child of system.agentManager.getChildren(coordinator.id)) {
1322
+ try { await system.agentManager.terminate(child.id, "cancelled"); } catch {}
1323
+ }
1324
+ try { await system.agentManager.terminate(worker.id, "cancelled"); } catch {}
1325
+ await system.agentManager.terminate(coordinator.id, "completed");
1326
+ log("Test complete");
1327
+ },
1328
+ TIMEOUT.MULTI
1329
+ );
1330
+ });