macro-agent 0.2.4 → 0.2.6

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 (1002) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +30 -56
  3. package/dist/acp/websocket-server.d.ts +6 -0
  4. package/dist/acp/websocket-server.d.ts.map +1 -1
  5. package/dist/acp/websocket-server.js +13 -0
  6. package/dist/acp/websocket-server.js.map +1 -1
  7. package/dist/acp/websocket-stream.d.ts +30 -0
  8. package/dist/acp/websocket-stream.d.ts.map +1 -0
  9. package/dist/acp/websocket-stream.js +118 -0
  10. package/dist/acp/websocket-stream.js.map +1 -0
  11. package/dist/activity/deduplication.d.ts +85 -0
  12. package/dist/activity/deduplication.d.ts.map +1 -0
  13. package/dist/activity/deduplication.js +149 -0
  14. package/dist/activity/deduplication.js.map +1 -0
  15. package/dist/activity/index.d.ts +16 -0
  16. package/dist/activity/index.d.ts.map +1 -0
  17. package/dist/activity/index.js +17 -0
  18. package/dist/activity/index.js.map +1 -0
  19. package/dist/activity/relevance.d.ts +81 -0
  20. package/dist/activity/relevance.d.ts.map +1 -0
  21. package/dist/activity/relevance.js +161 -0
  22. package/dist/activity/relevance.js.map +1 -0
  23. package/dist/activity/types.d.ts +169 -0
  24. package/dist/activity/types.d.ts.map +1 -0
  25. package/dist/activity/types.js +33 -0
  26. package/dist/activity/types.js.map +1 -0
  27. package/dist/activity/watcher.d.ts +64 -0
  28. package/dist/activity/watcher.d.ts.map +1 -0
  29. package/dist/activity/watcher.js +212 -0
  30. package/dist/activity/watcher.js.map +1 -0
  31. package/dist/adapters/federation.d.ts +8 -1
  32. package/dist/adapters/federation.d.ts.map +1 -1
  33. package/dist/adapters/federation.js +33 -2
  34. package/dist/adapters/federation.js.map +1 -1
  35. package/dist/agent/agent-manager-v2.d.ts.map +1 -1
  36. package/dist/agent/agent-manager-v2.js +189 -67
  37. package/dist/agent/agent-manager-v2.js.map +1 -1
  38. package/dist/agent/agent-manager.d.ts +17 -0
  39. package/dist/agent/agent-manager.d.ts.map +1 -1
  40. package/dist/agent/agent-manager.js.map +1 -1
  41. package/dist/agent/types.d.ts +21 -2
  42. package/dist/agent/types.d.ts.map +1 -1
  43. package/dist/agent/types.js.map +1 -1
  44. package/dist/agent/wake.d.ts +85 -0
  45. package/dist/agent/wake.d.ts.map +1 -0
  46. package/dist/agent/wake.js +278 -0
  47. package/dist/agent/wake.js.map +1 -0
  48. package/dist/api/server.d.ts.map +1 -1
  49. package/dist/api/server.js +41 -25
  50. package/dist/api/server.js.map +1 -1
  51. package/dist/api/types.d.ts +6 -0
  52. package/dist/api/types.d.ts.map +1 -1
  53. package/dist/auth/server-auth.d.ts +43 -0
  54. package/dist/auth/server-auth.d.ts.map +1 -0
  55. package/dist/auth/server-auth.js +80 -0
  56. package/dist/auth/server-auth.js.map +1 -0
  57. package/dist/auth/token.d.ts +4 -0
  58. package/dist/auth/token.d.ts.map +1 -1
  59. package/dist/auth/token.js +7 -6
  60. package/dist/auth/token.js.map +1 -1
  61. package/dist/boot-v2.d.ts +6 -3
  62. package/dist/boot-v2.d.ts.map +1 -1
  63. package/dist/boot-v2.js +44 -25
  64. package/dist/boot-v2.js.map +1 -1
  65. package/dist/cognitive/macro-agent-backend.d.ts.map +1 -1
  66. package/dist/cognitive/macro-agent-backend.js +37 -8
  67. package/dist/cognitive/macro-agent-backend.js.map +1 -1
  68. package/dist/cognitive/team-lifecycle.d.ts +82 -0
  69. package/dist/cognitive/team-lifecycle.d.ts.map +1 -0
  70. package/dist/cognitive/team-lifecycle.js +121 -0
  71. package/dist/cognitive/team-lifecycle.js.map +1 -0
  72. package/dist/cognitive/trajectory-extractor.d.ts +25 -0
  73. package/dist/cognitive/trajectory-extractor.d.ts.map +1 -0
  74. package/dist/cognitive/trajectory-extractor.js +134 -0
  75. package/dist/cognitive/trajectory-extractor.js.map +1 -0
  76. package/dist/cognitive/types.d.ts +24 -0
  77. package/dist/cognitive/types.d.ts.map +1 -1
  78. package/dist/control/control-server.d.ts.map +1 -1
  79. package/dist/control/control-server.js +10 -0
  80. package/dist/control/control-server.js.map +1 -1
  81. package/dist/dispatch/mail-inbound-consumer.d.ts.map +1 -1
  82. package/dist/dispatch/mail-inbound-consumer.js +43 -10
  83. package/dist/dispatch/mail-inbound-consumer.js.map +1 -1
  84. package/dist/index.d.ts +5 -1
  85. package/dist/index.d.ts.map +1 -1
  86. package/dist/index.js +6 -1
  87. package/dist/index.js.map +1 -1
  88. package/dist/lifecycle/handlers/generic.d.ts +27 -0
  89. package/dist/lifecycle/handlers/generic.d.ts.map +1 -0
  90. package/dist/lifecycle/handlers/generic.js +56 -0
  91. package/dist/lifecycle/handlers/generic.js.map +1 -0
  92. package/dist/lifecycle/handlers/index.d.ts +51 -0
  93. package/dist/lifecycle/handlers/index.d.ts.map +1 -0
  94. package/dist/lifecycle/handlers/index.js +110 -0
  95. package/dist/lifecycle/handlers/index.js.map +1 -0
  96. package/dist/lifecycle/handlers/integrator.d.ts +81 -0
  97. package/dist/lifecycle/handlers/integrator.d.ts.map +1 -0
  98. package/dist/lifecycle/handlers/integrator.js +451 -0
  99. package/dist/lifecycle/handlers/integrator.js.map +1 -0
  100. package/dist/lifecycle/handlers/monitor.d.ts +29 -0
  101. package/dist/lifecycle/handlers/monitor.d.ts.map +1 -0
  102. package/dist/lifecycle/handlers/monitor.js +79 -0
  103. package/dist/lifecycle/handlers/monitor.js.map +1 -0
  104. package/dist/lifecycle/handlers/worker.d.ts +56 -0
  105. package/dist/lifecycle/handlers/worker.d.ts.map +1 -0
  106. package/dist/lifecycle/handlers/worker.js +381 -0
  107. package/dist/lifecycle/handlers/worker.js.map +1 -0
  108. package/dist/lifecycle/handlers-v2.d.ts +0 -2
  109. package/dist/lifecycle/handlers-v2.d.ts.map +1 -1
  110. package/dist/lifecycle/handlers-v2.js +4 -55
  111. package/dist/lifecycle/handlers-v2.js.map +1 -1
  112. package/dist/mail/conversation-map.d.ts +33 -0
  113. package/dist/mail/conversation-map.d.ts.map +1 -0
  114. package/dist/mail/conversation-map.js +61 -0
  115. package/dist/mail/conversation-map.js.map +1 -0
  116. package/dist/mail/index.d.ts +11 -0
  117. package/dist/mail/index.d.ts.map +1 -0
  118. package/dist/mail/index.js +11 -0
  119. package/dist/mail/index.js.map +1 -0
  120. package/dist/mail/mail-service.d.ts +85 -0
  121. package/dist/mail/mail-service.d.ts.map +1 -0
  122. package/dist/mail/mail-service.js +121 -0
  123. package/dist/mail/mail-service.js.map +1 -0
  124. package/dist/mail/stores/eventstore-conversation-store.d.ts +40 -0
  125. package/dist/mail/stores/eventstore-conversation-store.d.ts.map +1 -0
  126. package/dist/mail/stores/eventstore-conversation-store.js +131 -0
  127. package/dist/mail/stores/eventstore-conversation-store.js.map +1 -0
  128. package/dist/mail/stores/eventstore-participant-store.d.ts +43 -0
  129. package/dist/mail/stores/eventstore-participant-store.d.ts.map +1 -0
  130. package/dist/mail/stores/eventstore-participant-store.js +145 -0
  131. package/dist/mail/stores/eventstore-participant-store.js.map +1 -0
  132. package/dist/mail/stores/eventstore-thread-store.d.ts +46 -0
  133. package/dist/mail/stores/eventstore-thread-store.d.ts.map +1 -0
  134. package/dist/mail/stores/eventstore-thread-store.js +118 -0
  135. package/dist/mail/stores/eventstore-thread-store.js.map +1 -0
  136. package/dist/mail/stores/eventstore-turn-store.d.ts +47 -0
  137. package/dist/mail/stores/eventstore-turn-store.d.ts.map +1 -0
  138. package/dist/mail/stores/eventstore-turn-store.js +153 -0
  139. package/dist/mail/stores/eventstore-turn-store.js.map +1 -0
  140. package/dist/mail/stores/index.d.ts +12 -0
  141. package/dist/mail/stores/index.d.ts.map +1 -0
  142. package/dist/mail/stores/index.js +12 -0
  143. package/dist/mail/stores/index.js.map +1 -0
  144. package/dist/mail/stores/types.d.ts +146 -0
  145. package/dist/mail/stores/types.d.ts.map +1 -0
  146. package/dist/mail/stores/types.js +13 -0
  147. package/dist/mail/stores/types.js.map +1 -0
  148. package/dist/mail/turn-recorder.d.ts +30 -0
  149. package/dist/mail/turn-recorder.d.ts.map +1 -0
  150. package/dist/mail/turn-recorder.js +98 -0
  151. package/dist/mail/turn-recorder.js.map +1 -0
  152. package/dist/map/adapter/acp-over-map.d.ts +115 -0
  153. package/dist/map/adapter/acp-over-map.d.ts.map +1 -0
  154. package/dist/map/adapter/acp-over-map.js +1024 -0
  155. package/dist/map/adapter/acp-over-map.js.map +1 -0
  156. package/dist/map/adapter/connection-manager.d.ts +150 -0
  157. package/dist/map/adapter/connection-manager.d.ts.map +1 -0
  158. package/dist/map/adapter/connection-manager.js +207 -0
  159. package/dist/map/adapter/connection-manager.js.map +1 -0
  160. package/dist/map/adapter/event-log.d.ts +87 -0
  161. package/dist/map/adapter/event-log.d.ts.map +1 -0
  162. package/dist/map/adapter/event-log.js +122 -0
  163. package/dist/map/adapter/event-log.js.map +1 -0
  164. package/dist/map/adapter/event-translator.d.ts +85 -0
  165. package/dist/map/adapter/event-translator.d.ts.map +1 -0
  166. package/dist/map/adapter/event-translator.js +295 -0
  167. package/dist/map/adapter/event-translator.js.map +1 -0
  168. package/dist/map/adapter/extensions/agent-detection.d.ts +49 -0
  169. package/dist/map/adapter/extensions/agent-detection.d.ts.map +1 -0
  170. package/dist/map/adapter/extensions/agent-detection.js +91 -0
  171. package/dist/map/adapter/extensions/agent-detection.js.map +1 -0
  172. package/dist/map/adapter/extensions/agent-lifecycle.d.ts +82 -0
  173. package/dist/map/adapter/extensions/agent-lifecycle.d.ts.map +1 -0
  174. package/dist/map/adapter/extensions/agent-lifecycle.js +164 -0
  175. package/dist/map/adapter/extensions/agent-lifecycle.js.map +1 -0
  176. package/dist/map/adapter/extensions/cognitive.d.ts +27 -0
  177. package/dist/map/adapter/extensions/cognitive.d.ts.map +1 -0
  178. package/dist/map/adapter/extensions/cognitive.js +158 -0
  179. package/dist/map/adapter/extensions/cognitive.js.map +1 -0
  180. package/dist/map/adapter/extensions/index.d.ts +95 -0
  181. package/dist/map/adapter/extensions/index.d.ts.map +1 -0
  182. package/dist/map/adapter/extensions/index.js +228 -0
  183. package/dist/map/adapter/extensions/index.js.map +1 -0
  184. package/dist/map/adapter/extensions/mcp-bridge.d.ts +57 -0
  185. package/dist/map/adapter/extensions/mcp-bridge.d.ts.map +1 -0
  186. package/dist/map/adapter/extensions/mcp-bridge.js +745 -0
  187. package/dist/map/adapter/extensions/mcp-bridge.js.map +1 -0
  188. package/dist/map/adapter/extensions/resume.d.ts +47 -0
  189. package/dist/map/adapter/extensions/resume.d.ts.map +1 -0
  190. package/dist/map/adapter/extensions/resume.js +59 -0
  191. package/dist/map/adapter/extensions/resume.js.map +1 -0
  192. package/dist/map/adapter/extensions/streams.d.ts +95 -0
  193. package/dist/map/adapter/extensions/streams.d.ts.map +1 -0
  194. package/dist/map/adapter/extensions/streams.js +515 -0
  195. package/dist/map/adapter/extensions/streams.js.map +1 -0
  196. package/dist/map/adapter/extensions/task.d.ts +40 -0
  197. package/dist/map/adapter/extensions/task.d.ts.map +1 -0
  198. package/dist/map/adapter/extensions/task.js +197 -0
  199. package/dist/map/adapter/extensions/task.js.map +1 -0
  200. package/dist/map/adapter/extensions/update-metadata.d.ts +29 -0
  201. package/dist/map/adapter/extensions/update-metadata.d.ts.map +1 -0
  202. package/dist/map/adapter/extensions/update-metadata.js +67 -0
  203. package/dist/map/adapter/extensions/update-metadata.js.map +1 -0
  204. package/dist/map/adapter/extensions/wake.d.ts +60 -0
  205. package/dist/map/adapter/extensions/wake.d.ts.map +1 -0
  206. package/dist/map/adapter/extensions/wake.js +144 -0
  207. package/dist/map/adapter/extensions/wake.js.map +1 -0
  208. package/dist/map/adapter/extensions/workspace-files.d.ts +42 -0
  209. package/dist/map/adapter/extensions/workspace-files.d.ts.map +1 -0
  210. package/dist/map/adapter/extensions/workspace-files.js +338 -0
  211. package/dist/map/adapter/extensions/workspace-files.js.map +1 -0
  212. package/dist/map/adapter/extensions/workspace.d.ts +57 -0
  213. package/dist/map/adapter/extensions/workspace.d.ts.map +1 -0
  214. package/dist/map/adapter/extensions/workspace.js +81 -0
  215. package/dist/map/adapter/extensions/workspace.js.map +1 -0
  216. package/dist/map/adapter/index.d.ts +20 -0
  217. package/dist/map/adapter/index.d.ts.map +1 -0
  218. package/dist/map/adapter/index.js +40 -0
  219. package/dist/map/adapter/index.js.map +1 -0
  220. package/dist/map/adapter/interface.d.ts +450 -0
  221. package/dist/map/adapter/interface.d.ts.map +1 -0
  222. package/dist/map/adapter/interface.js +24 -0
  223. package/dist/map/adapter/interface.js.map +1 -0
  224. package/dist/map/adapter/mail-handler-adapter.d.ts +27 -0
  225. package/dist/map/adapter/mail-handler-adapter.d.ts.map +1 -0
  226. package/dist/map/adapter/mail-handler-adapter.js +292 -0
  227. package/dist/map/adapter/mail-handler-adapter.js.map +1 -0
  228. package/dist/map/adapter/map-adapter.d.ts +200 -0
  229. package/dist/map/adapter/map-adapter.d.ts.map +1 -0
  230. package/dist/map/adapter/map-adapter.js +1199 -0
  231. package/dist/map/adapter/map-adapter.js.map +1 -0
  232. package/dist/map/adapter/rpc-handler.d.ts +263 -0
  233. package/dist/map/adapter/rpc-handler.d.ts.map +1 -0
  234. package/dist/map/adapter/rpc-handler.js +365 -0
  235. package/dist/map/adapter/rpc-handler.js.map +1 -0
  236. package/dist/map/adapter/subscription-manager.d.ts +174 -0
  237. package/dist/map/adapter/subscription-manager.d.ts.map +1 -0
  238. package/dist/map/adapter/subscription-manager.js +248 -0
  239. package/dist/map/adapter/subscription-manager.js.map +1 -0
  240. package/dist/map/adapter/types.d.ts +194 -0
  241. package/dist/map/adapter/types.d.ts.map +1 -0
  242. package/dist/map/adapter/types.js +27 -0
  243. package/dist/map/adapter/types.js.map +1 -0
  244. package/dist/map/adapter/websocket-integration.d.ts +113 -0
  245. package/dist/map/adapter/websocket-integration.d.ts.map +1 -0
  246. package/dist/map/adapter/websocket-integration.js +134 -0
  247. package/dist/map/adapter/websocket-integration.js.map +1 -0
  248. package/dist/map/cascade-action-handler.d.ts.map +1 -1
  249. package/dist/map/cascade-action-handler.js +19 -5
  250. package/dist/map/cascade-action-handler.js.map +1 -1
  251. package/dist/map/federation/envelope.d.ts +98 -0
  252. package/dist/map/federation/envelope.d.ts.map +1 -0
  253. package/dist/map/federation/envelope.js +160 -0
  254. package/dist/map/federation/envelope.js.map +1 -0
  255. package/dist/map/federation/federation-handler.d.ts +50 -0
  256. package/dist/map/federation/federation-handler.d.ts.map +1 -0
  257. package/dist/map/federation/federation-handler.js +306 -0
  258. package/dist/map/federation/federation-handler.js.map +1 -0
  259. package/dist/map/federation/index.d.ts +14 -0
  260. package/dist/map/federation/index.d.ts.map +1 -0
  261. package/dist/map/federation/index.js +13 -0
  262. package/dist/map/federation/index.js.map +1 -0
  263. package/dist/map/federation/types.d.ts +239 -0
  264. package/dist/map/federation/types.d.ts.map +1 -0
  265. package/dist/map/federation/types.js +23 -0
  266. package/dist/map/federation/types.js.map +1 -0
  267. package/dist/map/mail-bridge.d.ts +7 -0
  268. package/dist/map/mail-bridge.d.ts.map +1 -1
  269. package/dist/map/mail-bridge.js +39 -9
  270. package/dist/map/mail-bridge.js.map +1 -1
  271. package/dist/map/server.d.ts.map +1 -1
  272. package/dist/map/server.js +17 -2
  273. package/dist/map/server.js.map +1 -1
  274. package/dist/map/types.d.ts +6 -0
  275. package/dist/map/types.d.ts.map +1 -1
  276. package/dist/mcp/map-client.d.ts +39 -0
  277. package/dist/mcp/map-client.d.ts.map +1 -0
  278. package/dist/mcp/map-client.js +129 -0
  279. package/dist/mcp/map-client.js.map +1 -0
  280. package/dist/mcp/mcp-server.d.ts +72 -0
  281. package/dist/mcp/mcp-server.d.ts.map +1 -0
  282. package/dist/mcp/mcp-server.js +1027 -0
  283. package/dist/mcp/mcp-server.js.map +1 -0
  284. package/dist/mcp/tools/claim_task.d.ts +35 -0
  285. package/dist/mcp/tools/claim_task.d.ts.map +1 -0
  286. package/dist/mcp/tools/claim_task.js +58 -0
  287. package/dist/mcp/tools/claim_task.js.map +1 -0
  288. package/dist/mcp/tools/done-v2.d.ts +0 -1
  289. package/dist/mcp/tools/done-v2.d.ts.map +1 -1
  290. package/dist/mcp/tools/done-v2.js +0 -1
  291. package/dist/mcp/tools/done-v2.js.map +1 -1
  292. package/dist/mcp/tools/done.d.ts +102 -0
  293. package/dist/mcp/tools/done.d.ts.map +1 -0
  294. package/dist/mcp/tools/done.js +253 -0
  295. package/dist/mcp/tools/done.js.map +1 -0
  296. package/dist/mcp/tools/inject_context.d.ts +61 -0
  297. package/dist/mcp/tools/inject_context.d.ts.map +1 -0
  298. package/dist/mcp/tools/inject_context.js +123 -0
  299. package/dist/mcp/tools/inject_context.js.map +1 -0
  300. package/dist/mcp/tools/list_claimable_tasks.d.ts +38 -0
  301. package/dist/mcp/tools/list_claimable_tasks.d.ts.map +1 -0
  302. package/dist/mcp/tools/list_claimable_tasks.js +63 -0
  303. package/dist/mcp/tools/list_claimable_tasks.js.map +1 -0
  304. package/dist/mcp/tools/unclaim_task.d.ts +31 -0
  305. package/dist/mcp/tools/unclaim_task.d.ts.map +1 -0
  306. package/dist/mcp/tools/unclaim_task.js +47 -0
  307. package/dist/mcp/tools/unclaim_task.js.map +1 -0
  308. package/dist/mcp/tools/wait_for_activity.d.ts +60 -0
  309. package/dist/mcp/tools/wait_for_activity.d.ts.map +1 -0
  310. package/dist/mcp/tools/wait_for_activity.js +135 -0
  311. package/dist/mcp/tools/wait_for_activity.js.map +1 -0
  312. package/dist/monitor/health-check-service.d.ts +143 -0
  313. package/dist/monitor/health-check-service.d.ts.map +1 -0
  314. package/dist/monitor/health-check-service.js +240 -0
  315. package/dist/monitor/health-check-service.js.map +1 -0
  316. package/dist/monitor/index.d.ts +14 -0
  317. package/dist/monitor/index.d.ts.map +1 -0
  318. package/dist/monitor/index.js +14 -0
  319. package/dist/monitor/index.js.map +1 -0
  320. package/dist/monitor/stall-detector.d.ts +109 -0
  321. package/dist/monitor/stall-detector.d.ts.map +1 -0
  322. package/dist/monitor/stall-detector.js +152 -0
  323. package/dist/monitor/stall-detector.js.map +1 -0
  324. package/dist/peer/capability-manager.d.ts +56 -0
  325. package/dist/peer/capability-manager.d.ts.map +1 -0
  326. package/dist/peer/capability-manager.js +186 -0
  327. package/dist/peer/capability-manager.js.map +1 -0
  328. package/dist/peer/encapsulation-manager.d.ts +190 -0
  329. package/dist/peer/encapsulation-manager.d.ts.map +1 -0
  330. package/dist/peer/encapsulation-manager.js +486 -0
  331. package/dist/peer/encapsulation-manager.js.map +1 -0
  332. package/dist/peer/federation-manager.d.ts +223 -0
  333. package/dist/peer/federation-manager.d.ts.map +1 -0
  334. package/dist/peer/federation-manager.js +528 -0
  335. package/dist/peer/federation-manager.js.map +1 -0
  336. package/dist/peer/hierarchy-errors.d.ts +208 -0
  337. package/dist/peer/hierarchy-errors.d.ts.map +1 -0
  338. package/dist/peer/hierarchy-errors.js +268 -0
  339. package/dist/peer/hierarchy-errors.js.map +1 -0
  340. package/dist/peer/hierarchy-protocol.d.ts +159 -0
  341. package/dist/peer/hierarchy-protocol.d.ts.map +1 -0
  342. package/dist/peer/hierarchy-protocol.js +142 -0
  343. package/dist/peer/hierarchy-protocol.js.map +1 -0
  344. package/dist/peer/index.d.ts +15 -0
  345. package/dist/peer/index.d.ts.map +1 -0
  346. package/dist/peer/index.js +15 -0
  347. package/dist/peer/index.js.map +1 -0
  348. package/dist/peer/peer-manager.d.ts +99 -0
  349. package/dist/peer/peer-manager.d.ts.map +1 -0
  350. package/dist/peer/peer-manager.js +333 -0
  351. package/dist/peer/peer-manager.js.map +1 -0
  352. package/dist/peer/task-delegation.d.ts +189 -0
  353. package/dist/peer/task-delegation.d.ts.map +1 -0
  354. package/dist/peer/task-delegation.js +303 -0
  355. package/dist/peer/task-delegation.js.map +1 -0
  356. package/dist/peer/transports/index.d.ts +8 -0
  357. package/dist/peer/transports/index.d.ts.map +1 -0
  358. package/dist/peer/transports/index.js +8 -0
  359. package/dist/peer/transports/index.js.map +1 -0
  360. package/dist/peer/transports/local-transport.d.ts +56 -0
  361. package/dist/peer/transports/local-transport.d.ts.map +1 -0
  362. package/dist/peer/transports/local-transport.js +263 -0
  363. package/dist/peer/transports/local-transport.js.map +1 -0
  364. package/dist/peer/transports/websocket-transport.d.ts +86 -0
  365. package/dist/peer/transports/websocket-transport.d.ts.map +1 -0
  366. package/dist/peer/transports/websocket-transport.js +338 -0
  367. package/dist/peer/transports/websocket-transport.js.map +1 -0
  368. package/dist/peer/types.d.ts +268 -0
  369. package/dist/peer/types.d.ts.map +1 -0
  370. package/dist/peer/types.js +36 -0
  371. package/dist/peer/types.js.map +1 -0
  372. package/dist/router/address-resolver.d.ts +102 -0
  373. package/dist/router/address-resolver.d.ts.map +1 -0
  374. package/dist/router/address-resolver.js +198 -0
  375. package/dist/router/address-resolver.js.map +1 -0
  376. package/dist/router/broadcast.d.ts +53 -0
  377. package/dist/router/broadcast.d.ts.map +1 -0
  378. package/dist/router/broadcast.js +75 -0
  379. package/dist/router/broadcast.js.map +1 -0
  380. package/dist/router/channels.d.ts +148 -0
  381. package/dist/router/channels.d.ts.map +1 -0
  382. package/dist/router/channels.js +126 -0
  383. package/dist/router/channels.js.map +1 -0
  384. package/dist/router/index.d.ts +21 -0
  385. package/dist/router/index.d.ts.map +1 -0
  386. package/dist/router/index.js +18 -0
  387. package/dist/router/index.js.map +1 -0
  388. package/dist/router/message-router.d.ts +197 -0
  389. package/dist/router/message-router.d.ts.map +1 -0
  390. package/dist/router/message-router.js +903 -0
  391. package/dist/router/message-router.js.map +1 -0
  392. package/dist/router/message-types.d.ts +183 -0
  393. package/dist/router/message-types.d.ts.map +1 -0
  394. package/dist/router/message-types.js +79 -0
  395. package/dist/router/message-types.js.map +1 -0
  396. package/dist/router/role-resolver.d.ts +67 -0
  397. package/dist/router/role-resolver.d.ts.map +1 -0
  398. package/dist/router/role-resolver.js +106 -0
  399. package/dist/router/role-resolver.js.map +1 -0
  400. package/dist/router/signals.d.ts +253 -0
  401. package/dist/router/signals.d.ts.map +1 -0
  402. package/dist/router/signals.js +53 -0
  403. package/dist/router/signals.js.map +1 -0
  404. package/dist/router/types.d.ts +191 -0
  405. package/dist/router/types.d.ts.map +1 -0
  406. package/dist/router/types.js +34 -0
  407. package/dist/router/types.js.map +1 -0
  408. package/dist/router/wake.d.ts +111 -0
  409. package/dist/router/wake.d.ts.map +1 -0
  410. package/dist/router/wake.js +180 -0
  411. package/dist/router/wake.js.map +1 -0
  412. package/dist/server/combined-server.d.ts +95 -0
  413. package/dist/server/combined-server.d.ts.map +1 -0
  414. package/dist/server/combined-server.js +335 -0
  415. package/dist/server/combined-server.js.map +1 -0
  416. package/dist/steering/index.d.ts +11 -0
  417. package/dist/steering/index.d.ts.map +1 -0
  418. package/dist/steering/index.js +11 -0
  419. package/dist/steering/index.js.map +1 -0
  420. package/dist/steering/inject.d.ts +39 -0
  421. package/dist/steering/inject.d.ts.map +1 -0
  422. package/dist/steering/inject.js +197 -0
  423. package/dist/steering/inject.js.map +1 -0
  424. package/dist/steering/types.d.ts +100 -0
  425. package/dist/steering/types.d.ts.map +1 -0
  426. package/dist/steering/types.js +11 -0
  427. package/dist/steering/types.js.map +1 -0
  428. package/dist/store/backends/index.d.ts +11 -0
  429. package/dist/store/backends/index.d.ts.map +1 -0
  430. package/dist/store/backends/index.js +15 -0
  431. package/dist/store/backends/index.js.map +1 -0
  432. package/dist/store/backends/json-backend.d.ts +23 -0
  433. package/dist/store/backends/json-backend.d.ts.map +1 -0
  434. package/dist/store/backends/json-backend.js +220 -0
  435. package/dist/store/backends/json-backend.js.map +1 -0
  436. package/dist/store/backends/memory-backend.d.ts +12 -0
  437. package/dist/store/backends/memory-backend.d.ts.map +1 -0
  438. package/dist/store/backends/memory-backend.js +205 -0
  439. package/dist/store/backends/memory-backend.js.map +1 -0
  440. package/dist/store/backends/sqlite-backend.d.ts +27 -0
  441. package/dist/store/backends/sqlite-backend.d.ts.map +1 -0
  442. package/dist/store/backends/sqlite-backend.js +231 -0
  443. package/dist/store/backends/sqlite-backend.js.map +1 -0
  444. package/dist/store/backends/tinybase-backend.d.ts +22 -0
  445. package/dist/store/backends/tinybase-backend.d.ts.map +1 -0
  446. package/dist/store/backends/tinybase-backend.js +203 -0
  447. package/dist/store/backends/tinybase-backend.js.map +1 -0
  448. package/dist/store/backends/types.d.ts +175 -0
  449. package/dist/store/backends/types.d.ts.map +1 -0
  450. package/dist/store/backends/types.js +28 -0
  451. package/dist/store/backends/types.js.map +1 -0
  452. package/dist/store/event-store.d.ts +128 -0
  453. package/dist/store/event-store.d.ts.map +1 -0
  454. package/dist/store/event-store.js +1751 -0
  455. package/dist/store/event-store.js.map +1 -0
  456. package/dist/store/instance.d.ts +290 -0
  457. package/dist/store/instance.d.ts.map +1 -0
  458. package/dist/store/instance.js +363 -0
  459. package/dist/store/instance.js.map +1 -0
  460. package/dist/store/migrations.d.ts +41 -0
  461. package/dist/store/migrations.d.ts.map +1 -0
  462. package/dist/store/migrations.js +79 -0
  463. package/dist/store/migrations.js.map +1 -0
  464. package/dist/store/test-utils.d.ts +63 -0
  465. package/dist/store/test-utils.d.ts.map +1 -0
  466. package/dist/store/test-utils.js +63 -0
  467. package/dist/store/test-utils.js.map +1 -0
  468. package/dist/store/types/config.d.ts +16 -0
  469. package/dist/store/types/config.d.ts.map +1 -0
  470. package/dist/store/types/config.js +8 -0
  471. package/dist/store/types/config.js.map +1 -0
  472. package/dist/store/types/conversations.d.ts +91 -0
  473. package/dist/store/types/conversations.d.ts.map +1 -0
  474. package/dist/store/types/conversations.js +8 -0
  475. package/dist/store/types/conversations.js.map +1 -0
  476. package/dist/store/types/sessions.d.ts +44 -0
  477. package/dist/store/types/sessions.d.ts.map +1 -0
  478. package/dist/store/types/sessions.js +9 -0
  479. package/dist/store/types/sessions.js.map +1 -0
  480. package/dist/store/types.d.ts +115 -0
  481. package/dist/store/types.d.ts.map +1 -0
  482. package/dist/store/types.js +6 -0
  483. package/dist/store/types.js.map +1 -0
  484. package/dist/task/backend/index.d.ts +93 -0
  485. package/dist/task/backend/index.d.ts.map +1 -0
  486. package/dist/task/backend/index.js +178 -0
  487. package/dist/task/backend/index.js.map +1 -0
  488. package/dist/task/backend/memory.d.ts +70 -0
  489. package/dist/task/backend/memory.d.ts.map +1 -0
  490. package/dist/task/backend/memory.js +621 -0
  491. package/dist/task/backend/memory.js.map +1 -0
  492. package/dist/task/backend/opentasks/backend.d.ts +140 -0
  493. package/dist/task/backend/opentasks/backend.d.ts.map +1 -0
  494. package/dist/task/backend/opentasks/backend.js +1023 -0
  495. package/dist/task/backend/opentasks/backend.js.map +1 -0
  496. package/dist/task/backend/opentasks/client.d.ts +337 -0
  497. package/dist/task/backend/opentasks/client.d.ts.map +1 -0
  498. package/dist/task/backend/opentasks/client.js +225 -0
  499. package/dist/task/backend/opentasks/client.js.map +1 -0
  500. package/dist/task/backend/opentasks/daemon-manager.d.ts +89 -0
  501. package/dist/task/backend/opentasks/daemon-manager.d.ts.map +1 -0
  502. package/dist/task/backend/opentasks/daemon-manager.js +195 -0
  503. package/dist/task/backend/opentasks/daemon-manager.js.map +1 -0
  504. package/dist/task/backend/opentasks/index.d.ts +21 -0
  505. package/dist/task/backend/opentasks/index.d.ts.map +1 -0
  506. package/dist/task/backend/opentasks/index.js +21 -0
  507. package/dist/task/backend/opentasks/index.js.map +1 -0
  508. package/dist/task/backend/opentasks/mapping.d.ts +48 -0
  509. package/dist/task/backend/opentasks/mapping.d.ts.map +1 -0
  510. package/dist/task/backend/opentasks/mapping.js +77 -0
  511. package/dist/task/backend/opentasks/mapping.js.map +1 -0
  512. package/dist/task/backend/sudocode/__tests__/integration/test-utils.d.ts +54 -0
  513. package/dist/task/backend/sudocode/__tests__/integration/test-utils.d.ts.map +1 -0
  514. package/dist/task/backend/sudocode/__tests__/integration/test-utils.js +88 -0
  515. package/dist/task/backend/sudocode/__tests__/integration/test-utils.js.map +1 -0
  516. package/dist/task/backend/sudocode/backend.d.ts +155 -0
  517. package/dist/task/backend/sudocode/backend.d.ts.map +1 -0
  518. package/dist/task/backend/sudocode/backend.js +942 -0
  519. package/dist/task/backend/sudocode/backend.js.map +1 -0
  520. package/dist/task/backend/sudocode/client.d.ts +303 -0
  521. package/dist/task/backend/sudocode/client.d.ts.map +1 -0
  522. package/dist/task/backend/sudocode/client.js +101 -0
  523. package/dist/task/backend/sudocode/client.js.map +1 -0
  524. package/dist/task/backend/sudocode/index.d.ts +19 -0
  525. package/dist/task/backend/sudocode/index.d.ts.map +1 -0
  526. package/dist/task/backend/sudocode/index.js +17 -0
  527. package/dist/task/backend/sudocode/index.js.map +1 -0
  528. package/dist/task/backend/sudocode/mapping.d.ts +51 -0
  529. package/dist/task/backend/sudocode/mapping.d.ts.map +1 -0
  530. package/dist/task/backend/sudocode/mapping.js +86 -0
  531. package/dist/task/backend/sudocode/mapping.js.map +1 -0
  532. package/dist/task/backend/sudocode/server-client.d.ts +56 -0
  533. package/dist/task/backend/sudocode/server-client.d.ts.map +1 -0
  534. package/dist/task/backend/sudocode/server-client.js +367 -0
  535. package/dist/task/backend/sudocode/server-client.js.map +1 -0
  536. package/dist/task/backend/sudocode/standalone-client.d.ts +91 -0
  537. package/dist/task/backend/sudocode/standalone-client.d.ts.map +1 -0
  538. package/dist/task/backend/sudocode/standalone-client.js +476 -0
  539. package/dist/task/backend/sudocode/standalone-client.js.map +1 -0
  540. package/dist/task/backend/sudocode/sync-policy.d.ts +166 -0
  541. package/dist/task/backend/sudocode/sync-policy.d.ts.map +1 -0
  542. package/dist/task/backend/sudocode/sync-policy.js +221 -0
  543. package/dist/task/backend/sudocode/sync-policy.js.map +1 -0
  544. package/dist/task/backend/sudocode/tools.d.ts +87 -0
  545. package/dist/task/backend/sudocode/tools.d.ts.map +1 -0
  546. package/dist/task/backend/sudocode/tools.js +743 -0
  547. package/dist/task/backend/sudocode/tools.js.map +1 -0
  548. package/dist/task/backend/tool-provider.d.ts +56 -0
  549. package/dist/task/backend/tool-provider.d.ts.map +1 -0
  550. package/dist/task/backend/tool-provider.js +424 -0
  551. package/dist/task/backend/tool-provider.js.map +1 -0
  552. package/dist/task/backend/types.d.ts +297 -0
  553. package/dist/task/backend/types.d.ts.map +1 -0
  554. package/dist/task/backend/types.js +27 -0
  555. package/dist/task/backend/types.js.map +1 -0
  556. package/dist/task/backend/unified-tool-provider.d.ts +57 -0
  557. package/dist/task/backend/unified-tool-provider.d.ts.map +1 -0
  558. package/dist/task/backend/unified-tool-provider.js +623 -0
  559. package/dist/task/backend/unified-tool-provider.js.map +1 -0
  560. package/dist/task/index.d.ts +7 -0
  561. package/dist/task/index.d.ts.map +1 -0
  562. package/dist/task/index.js +7 -0
  563. package/dist/task/index.js.map +1 -0
  564. package/dist/task/retry-policy.d.ts +89 -0
  565. package/dist/task/retry-policy.d.ts.map +1 -0
  566. package/dist/task/retry-policy.js +160 -0
  567. package/dist/task/retry-policy.js.map +1 -0
  568. package/dist/task/task-manager.d.ts +70 -0
  569. package/dist/task/task-manager.d.ts.map +1 -0
  570. package/dist/task/task-manager.js +319 -0
  571. package/dist/task/task-manager.js.map +1 -0
  572. package/dist/task/types.d.ts +72 -0
  573. package/dist/task/types.d.ts.map +1 -0
  574. package/dist/task/types.js +33 -0
  575. package/dist/task/types.js.map +1 -0
  576. package/dist/teams/team-loader.d.ts +2 -1
  577. package/dist/teams/team-loader.d.ts.map +1 -1
  578. package/dist/teams/team-loader.js +2 -1
  579. package/dist/teams/team-loader.js.map +1 -1
  580. package/dist/teams/team-manager.d.ts +101 -0
  581. package/dist/teams/team-manager.d.ts.map +1 -0
  582. package/dist/teams/team-manager.js +260 -0
  583. package/dist/teams/team-manager.js.map +1 -0
  584. package/dist/teams/team-runtime-v2.d.ts +0 -3
  585. package/dist/teams/team-runtime-v2.d.ts.map +1 -1
  586. package/dist/teams/team-runtime-v2.js +31 -93
  587. package/dist/teams/team-runtime-v2.js.map +1 -1
  588. package/dist/teams/team-runtime.d.ts +245 -0
  589. package/dist/teams/team-runtime.d.ts.map +1 -0
  590. package/dist/teams/team-runtime.js +1023 -0
  591. package/dist/teams/team-runtime.js.map +1 -0
  592. package/dist/trigger/router/index.d.ts +11 -0
  593. package/dist/trigger/router/index.d.ts.map +1 -0
  594. package/dist/trigger/router/index.js +10 -0
  595. package/dist/trigger/router/index.js.map +1 -0
  596. package/dist/trigger/router/strategies/ai-router-strategy.d.ts +34 -0
  597. package/dist/trigger/router/strategies/ai-router-strategy.d.ts.map +1 -0
  598. package/dist/trigger/router/strategies/ai-router-strategy.js +359 -0
  599. package/dist/trigger/router/strategies/ai-router-strategy.js.map +1 -0
  600. package/dist/trigger/router/strategies/direct-strategy.d.ts +32 -0
  601. package/dist/trigger/router/strategies/direct-strategy.d.ts.map +1 -0
  602. package/dist/trigger/router/strategies/direct-strategy.js +119 -0
  603. package/dist/trigger/router/strategies/direct-strategy.js.map +1 -0
  604. package/dist/trigger/router/strategies/index.d.ts +11 -0
  605. package/dist/trigger/router/strategies/index.d.ts.map +1 -0
  606. package/dist/trigger/router/strategies/index.js +11 -0
  607. package/dist/trigger/router/strategies/index.js.map +1 -0
  608. package/dist/trigger/router/strategies/role-strategy.d.ts +39 -0
  609. package/dist/trigger/router/strategies/role-strategy.d.ts.map +1 -0
  610. package/dist/trigger/router/strategies/role-strategy.js +207 -0
  611. package/dist/trigger/router/strategies/role-strategy.js.map +1 -0
  612. package/dist/trigger/router/trigger-router.d.ts +54 -0
  613. package/dist/trigger/router/trigger-router.d.ts.map +1 -0
  614. package/dist/trigger/router/trigger-router.js +362 -0
  615. package/dist/trigger/router/trigger-router.js.map +1 -0
  616. package/dist/trigger/router/types.d.ts +225 -0
  617. package/dist/trigger/router/types.d.ts.map +1 -0
  618. package/dist/trigger/router/types.js +10 -0
  619. package/dist/trigger/router/types.js.map +1 -0
  620. package/dist/trigger/sources/cron/cron-service.d.ts.map +1 -1
  621. package/dist/trigger/sources/cron/cron-service.js +6 -3
  622. package/dist/trigger/sources/cron/cron-service.js.map +1 -1
  623. package/dist/trigger/trigger-system.d.ts +77 -0
  624. package/dist/trigger/trigger-system.d.ts.map +1 -0
  625. package/dist/trigger/trigger-system.js +84 -0
  626. package/dist/trigger/trigger-system.js.map +1 -0
  627. package/dist/util/git-safety.d.ts +33 -0
  628. package/dist/util/git-safety.d.ts.map +1 -0
  629. package/dist/util/git-safety.js +94 -0
  630. package/dist/util/git-safety.js.map +1 -0
  631. package/dist/workspace/index.d.ts +0 -1
  632. package/dist/workspace/index.d.ts.map +1 -1
  633. package/dist/workspace/index.js +0 -2
  634. package/dist/workspace/index.js.map +1 -1
  635. package/dist/workspace/landing/direct-push.d.ts.map +1 -1
  636. package/dist/workspace/landing/direct-push.js +22 -7
  637. package/dist/workspace/landing/direct-push.js.map +1 -1
  638. package/dist/workspace/landing/queue-to-branch.d.ts.map +1 -1
  639. package/dist/workspace/landing/queue-to-branch.js +1 -3
  640. package/dist/workspace/landing/queue-to-branch.js.map +1 -1
  641. package/dist/workspace/types.d.ts +0 -13
  642. package/dist/workspace/types.d.ts.map +1 -1
  643. package/dist/workspace/workspace-manager.d.ts +0 -11
  644. package/dist/workspace/workspace-manager.d.ts.map +1 -1
  645. package/dist/workspace/workspace-manager.js +0 -30
  646. package/dist/workspace/workspace-manager.js.map +1 -1
  647. package/package.json +28 -2
  648. package/templates/teams/self-driving/prompts/grinder.md +1 -0
  649. package/templates/teams/self-driving/prompts/judge.md +1 -0
  650. package/templates/teams/self-driving/prompts/planner.md +1 -0
  651. package/templates/teams/self-driving/roles/grinder.yaml +15 -0
  652. package/templates/teams/self-driving/roles/judge.yaml +10 -0
  653. package/templates/teams/self-driving/roles/planner.yaml +16 -0
  654. package/.claude/commands/openspec/apply.md +0 -23
  655. package/.claude/commands/openspec/archive.md +0 -27
  656. package/.claude/commands/openspec/proposal.md +0 -28
  657. package/.claude/settings.json +0 -133
  658. package/.gitattributes +0 -3
  659. package/.opentasks/config.json +0 -9
  660. package/.opentasks/graph.jsonl +0 -0
  661. package/.sessionlog/settings.json +0 -4
  662. package/.sudocode/issues.jsonl +0 -183
  663. package/.sudocode/specs.jsonl +0 -56
  664. package/AGENTS.md +0 -18
  665. package/CLAUDE.md +0 -923
  666. package/docs/architecture.md +0 -508
  667. package/docs/configuration.md +0 -323
  668. package/docs/conflict-recovery.md +0 -472
  669. package/docs/design/task-dispatcher.md +0 -880
  670. package/docs/design-subsystem-extraction.md +0 -627
  671. package/docs/git-cascade-integration-gaps.md +0 -678
  672. package/docs/implementation-details.md +0 -1127
  673. package/docs/implementation-summary.md +0 -448
  674. package/docs/lifecycle-events-design.md +0 -111
  675. package/docs/mail-integration.md +0 -608
  676. package/docs/openhive-capability-summary.md +0 -415
  677. package/docs/openhive-integration.md +0 -415
  678. package/docs/plan-self-driving-support.md +0 -433
  679. package/docs/roadmap-v2-gaps.md +0 -216
  680. package/docs/spec-self-driving-support.md +0 -462
  681. package/docs/team-templates.md +0 -860
  682. package/docs/teams.md +0 -306
  683. package/docs/trigger-system-design.md +0 -333
  684. package/docs/troubleshooting.md +0 -489
  685. package/docs/workspace-interfaces.md +0 -731
  686. package/docs/workspace-redesign-plan.md +0 -302
  687. package/examples/distributed-peer-communication.ts +0 -202
  688. package/examples/local-peer-communication.ts +0 -165
  689. package/index.js +0 -2
  690. package/mvp_docs/agent-execution-system.md +0 -347
  691. package/mvp_docs/agent-interface.md +0 -580
  692. package/mvp_docs/data-structures.md +0 -701
  693. package/mvp_docs/dynamic-meta-orchestration.md +0 -116
  694. package/mvp_docs/multi-agent-interaction-design.md +0 -779
  695. package/mvp_docs/mvp-implementation-plan.md +0 -1148
  696. package/renovate.json5 +0 -6
  697. package/scripts/test-acp-integration.ts +0 -422
  698. package/src/__tests__/boot-v2.test.ts +0 -631
  699. package/src/__tests__/e2e/acp-over-map-live.e2e.test.ts +0 -496
  700. package/src/__tests__/e2e/acp-over-map.e2e.test.ts +0 -457
  701. package/src/__tests__/e2e/agent-lifecycle.e2e.test.ts +0 -770
  702. package/src/__tests__/e2e/auto-sync.e2e.test.ts +0 -257
  703. package/src/__tests__/e2e/bootstrap.e2e.test.ts +0 -319
  704. package/src/__tests__/e2e/cascade-rebase.e2e.test.ts +0 -254
  705. package/src/__tests__/e2e/cc-swarm-bridge.e2e.test.ts +0 -253
  706. package/src/__tests__/e2e/cli-run.e2e.test.ts +0 -167
  707. package/src/__tests__/e2e/cognitive-workspace.e2e.test.ts +0 -282
  708. package/src/__tests__/e2e/dispatch-coordination.e2e.test.ts +0 -495
  709. package/src/__tests__/e2e/dispatch-live.e2e.test.ts +0 -564
  710. package/src/__tests__/e2e/dispatch-opentasks.e2e.test.ts +0 -496
  711. package/src/__tests__/e2e/dispatch-phase2-live.e2e.test.ts +0 -456
  712. package/src/__tests__/e2e/dispatch-phase2.e2e.test.ts +0 -386
  713. package/src/__tests__/e2e/dispatch.e2e.test.ts +0 -376
  714. package/src/__tests__/e2e/done-scenarios.e2e.test.ts +0 -322
  715. package/src/__tests__/e2e/live-agent.e2e.test.ts +0 -1330
  716. package/src/__tests__/e2e/map-server.e2e.test.ts +0 -128
  717. package/src/__tests__/e2e/map-sidecar.e2e.test.ts +0 -139
  718. package/src/__tests__/e2e/opentasks-integration.e2e.test.ts +0 -280
  719. package/src/__tests__/e2e/pull-mode.e2e.test.ts +0 -632
  720. package/src/__tests__/e2e/resume-continue.e2e.test.ts +0 -312
  721. package/src/__tests__/e2e/self-driving-v3.e2e.test.ts +0 -197
  722. package/src/__tests__/e2e/spawn-resolver.e2e.test.ts +0 -200
  723. package/src/__tests__/e2e/swarmkit-integration.e2e.test.ts +0 -562
  724. package/src/__tests__/e2e/swarmkit-live.e2e.test.ts +0 -1049
  725. package/src/__tests__/e2e/trajectory-tracking.e2e.test.ts +0 -258
  726. package/src/__tests__/e2e/trigger-wake.e2e.test.ts +0 -257
  727. package/src/__tests__/e2e/workspace-lifecycle.e2e.test.ts +0 -383
  728. package/src/__tests__/e2e/workspace-v3.e2e.test.ts +0 -413
  729. package/src/acp/__tests__/claude-code-replay.test.ts +0 -225
  730. package/src/acp/__tests__/macro-agent.test.ts +0 -387
  731. package/src/acp/__tests__/session-mapper.test.ts +0 -152
  732. package/src/acp/__tests__/websocket-server.test.ts +0 -194
  733. package/src/acp/claude-code-replay.ts +0 -208
  734. package/src/acp/index.ts +0 -32
  735. package/src/acp/macro-agent.ts +0 -995
  736. package/src/acp/map-bridge.ts +0 -193
  737. package/src/acp/session-mapper.ts +0 -116
  738. package/src/acp/types.ts +0 -99
  739. package/src/acp/websocket-server.ts +0 -213
  740. package/src/adapters/__tests__/federation.test.ts +0 -256
  741. package/src/adapters/__tests__/inbox-adapter.test.ts +0 -316
  742. package/src/adapters/__tests__/tasks-adapter.test.ts +0 -270
  743. package/src/adapters/federation.ts +0 -185
  744. package/src/adapters/inbox-adapter.ts +0 -292
  745. package/src/adapters/inbox-client-adapter.ts +0 -173
  746. package/src/adapters/index.ts +0 -44
  747. package/src/adapters/opentasks-daemon.ts +0 -252
  748. package/src/adapters/tasks-adapter.ts +0 -330
  749. package/src/adapters/types.ts +0 -286
  750. package/src/agent/__tests__/agent-manager-topology.test.ts +0 -73
  751. package/src/agent/__tests__/agent-manager-v2.permission-interception.test.ts +0 -296
  752. package/src/agent/__tests__/agent-manager-v2.permissions.test.ts +0 -233
  753. package/src/agent/__tests__/agent-manager-v2.test.ts +0 -614
  754. package/src/agent/__tests__/agent-store.test.ts +0 -465
  755. package/src/agent/__tests__/task-ref-resolution.test.ts +0 -231
  756. package/src/agent/agent-manager-v2.ts +0 -2021
  757. package/src/agent/agent-manager.ts +0 -386
  758. package/src/agent/agent-store.ts +0 -409
  759. package/src/agent/index.ts +0 -7
  760. package/src/agent/prompts/coordinator-signals.ts +0 -115
  761. package/src/agent/prompts/index.ts +0 -7
  762. package/src/agent/system-prompt.ts +0 -298
  763. package/src/agent/types.ts +0 -459
  764. package/src/agent-detection/__tests__/command-builder.test.ts +0 -336
  765. package/src/agent-detection/__tests__/detector.test.ts +0 -768
  766. package/src/agent-detection/__tests__/registry.test.ts +0 -254
  767. package/src/agent-detection/command-builder.ts +0 -90
  768. package/src/agent-detection/detector.ts +0 -307
  769. package/src/agent-detection/index.ts +0 -36
  770. package/src/agent-detection/registry.ts +0 -200
  771. package/src/agent-detection/types.ts +0 -184
  772. package/src/api/__tests__/server.test.ts +0 -292
  773. package/src/api/index.ts +0 -8
  774. package/src/api/server.ts +0 -380
  775. package/src/api/types.ts +0 -39
  776. package/src/auth/__tests__/token.test.ts +0 -100
  777. package/src/auth/index.ts +0 -1
  778. package/src/auth/token.ts +0 -82
  779. package/src/boot-v2.ts +0 -1343
  780. package/src/cli/__tests__/stable-instance-id.test.ts +0 -57
  781. package/src/cli/acp.ts +0 -101
  782. package/src/cli/inbox-mcp-proxy.ts +0 -56
  783. package/src/cli/index.ts +0 -566
  784. package/src/cli/mcp.ts +0 -305
  785. package/src/cli/parse-args.ts +0 -54
  786. package/src/cli/stable-instance-id.ts +0 -14
  787. package/src/cognitive/__tests__/macro-agent-backend.test.ts +0 -520
  788. package/src/cognitive/__tests__/session-converter.test.ts +0 -423
  789. package/src/cognitive/__tests__/workspace-handler.test.ts +0 -221
  790. package/src/cognitive/analyst-role.ts +0 -59
  791. package/src/cognitive/index.ts +0 -49
  792. package/src/cognitive/macro-agent-backend.ts +0 -370
  793. package/src/cognitive/session-converter.ts +0 -151
  794. package/src/cognitive/types.ts +0 -163
  795. package/src/cognitive/workspace-handler.ts +0 -163
  796. package/src/config/index.ts +0 -9
  797. package/src/config/project-config.ts +0 -294
  798. package/src/control/__tests__/control-resilience.test.ts +0 -251
  799. package/src/control/__tests__/control-socket.test.ts +0 -240
  800. package/src/control/control-client.ts +0 -337
  801. package/src/control/control-server.ts +0 -298
  802. package/src/control/index.ts +0 -17
  803. package/src/control/types.ts +0 -95
  804. package/src/dispatch/CLAUDE.md +0 -129
  805. package/src/dispatch/__tests__/loadout-translation.test.ts +0 -141
  806. package/src/dispatch/__tests__/mail-inbound-consumer.integration.test.ts +0 -519
  807. package/src/dispatch/__tests__/mail-inbound-consumer.test.ts +0 -800
  808. package/src/dispatch/__tests__/mail-inbound-reuse-consumer.test.ts +0 -575
  809. package/src/dispatch/__tests__/permission-evaluator.test.ts +0 -196
  810. package/src/dispatch/__tests__/permission-overlay.test.ts +0 -56
  811. package/src/dispatch/__tests__/permissions-handler.test.ts +0 -168
  812. package/src/dispatch/__tests__/spawn-agent-handler.test.ts +0 -282
  813. package/src/dispatch/loadout-translation.ts +0 -138
  814. package/src/dispatch/mail-inbound-consumer.ts +0 -560
  815. package/src/dispatch/mail-inbound-reuse-consumer.ts +0 -479
  816. package/src/dispatch/permission-evaluator.ts +0 -191
  817. package/src/dispatch/permission-overlay.ts +0 -89
  818. package/src/dispatch/permissions-handler.ts +0 -112
  819. package/src/dispatch/spawn-agent-handler.ts +0 -160
  820. package/src/index.ts +0 -115
  821. package/src/integrations/__tests__/context-builder.test.ts +0 -218
  822. package/src/integrations/__tests__/sessionlog.test.ts +0 -498
  823. package/src/integrations/__tests__/skilltree.test.ts +0 -136
  824. package/src/integrations/context-builder.ts +0 -280
  825. package/src/integrations/sessionlog.ts +0 -194
  826. package/src/integrations/skilltree.ts +0 -184
  827. package/src/lifecycle/__tests__/cascade-consolidation.test.ts +0 -240
  828. package/src/lifecycle/__tests__/handlers-v2.test.ts +0 -565
  829. package/src/lifecycle/cascade.ts +0 -335
  830. package/src/lifecycle/cleanup.ts +0 -373
  831. package/src/lifecycle/handlers-v2.ts +0 -508
  832. package/src/lifecycle/index.ts +0 -76
  833. package/src/lifecycle/types.ts +0 -260
  834. package/src/map/__tests__/cascade-bridge.test.ts +0 -229
  835. package/src/map/__tests__/cascade-diff-server.test.ts +0 -434
  836. package/src/map/__tests__/emit-event.test.ts +0 -71
  837. package/src/map/__tests__/lifecycle-bridge.test.ts +0 -430
  838. package/src/map/__tests__/mail-bridge.test.ts +0 -284
  839. package/src/map/__tests__/permission-forwarding.test.ts +0 -143
  840. package/src/map/__tests__/sidecar-diff-install-smoke.test.ts +0 -90
  841. package/src/map/__tests__/sidecar-integration.test.ts +0 -190
  842. package/src/map/__tests__/task-bridge.test.ts +0 -153
  843. package/src/map/__tests__/trajectory-reporter.test.ts +0 -173
  844. package/src/map/acp-bridge.ts +0 -293
  845. package/src/map/cascade-action-handler.ts +0 -205
  846. package/src/map/cascade-bridge.ts +0 -339
  847. package/src/map/cascade-diff-server.ts +0 -404
  848. package/src/map/cc-swarm-hooks.ts +0 -242
  849. package/src/map/coordination-handler.ts +0 -232
  850. package/src/map/index.ts +0 -18
  851. package/src/map/lifecycle-bridge.ts +0 -236
  852. package/src/map/mail-bridge.ts +0 -215
  853. package/src/map/repo-workspace.ts +0 -82
  854. package/src/map/server.ts +0 -758
  855. package/src/map/sidecar.ts +0 -826
  856. package/src/map/task-bridge.ts +0 -89
  857. package/src/map/trajectory-reporter.ts +0 -124
  858. package/src/map/types.ts +0 -304
  859. package/src/mcp/__tests__/mcp-server-v2.test.ts +0 -236
  860. package/src/mcp/index.ts +0 -6
  861. package/src/mcp/mcp-server-v2.ts +0 -485
  862. package/src/mcp/tools/done-v2.ts +0 -213
  863. package/src/mcp/types.ts +0 -432
  864. package/src/metrics/__tests__/metrics.test.ts +0 -205
  865. package/src/metrics/index.ts +0 -13
  866. package/src/metrics/metrics.ts +0 -151
  867. package/src/metrics/types.ts +0 -63
  868. package/src/roles/__tests__/config-loader.test.ts +0 -540
  869. package/src/roles/builtin/coordinator.ts +0 -75
  870. package/src/roles/builtin/generic.ts +0 -39
  871. package/src/roles/builtin/index.ts +0 -51
  872. package/src/roles/builtin/integrator.ts +0 -62
  873. package/src/roles/builtin/monitor.ts +0 -65
  874. package/src/roles/builtin/worker.ts +0 -134
  875. package/src/roles/capabilities.ts +0 -257
  876. package/src/roles/config-loader.ts +0 -405
  877. package/src/roles/index.ts +0 -141
  878. package/src/roles/registry.ts +0 -713
  879. package/src/roles/types.ts +0 -344
  880. package/src/store/index.ts +0 -8
  881. package/src/store/types/agents.ts +0 -69
  882. package/src/store/types/events.ts +0 -91
  883. package/src/store/types/index.ts +0 -9
  884. package/src/store/types/messages.ts +0 -32
  885. package/src/store/types/primitives.ts +0 -9
  886. package/src/store/types/tasks.ts +0 -124
  887. package/src/teams/__tests__/team-manager-v2.test.ts +0 -425
  888. package/src/teams/__tests__/team-runtime-v2.test.ts +0 -402
  889. package/src/teams/index.ts +0 -29
  890. package/src/teams/seed-defaults.ts +0 -83
  891. package/src/teams/team-loader.ts +0 -476
  892. package/src/teams/team-manager-v2.ts +0 -343
  893. package/src/teams/team-runtime-v2.ts +0 -920
  894. package/src/teams/types.ts +0 -276
  895. package/src/trigger/__tests__/cron-service.test.ts +0 -548
  896. package/src/trigger/__tests__/scheduler.test.ts +0 -371
  897. package/src/trigger/__tests__/system-event-queue.test.ts +0 -147
  898. package/src/trigger/__tests__/trigger-system-v2.test.ts +0 -257
  899. package/src/trigger/__tests__/wake-manager.test.ts +0 -356
  900. package/src/trigger/__tests__/webhook-handler.test.ts +0 -567
  901. package/src/trigger/index.ts +0 -110
  902. package/src/trigger/queue/index.ts +0 -21
  903. package/src/trigger/queue/system-event-queue.ts +0 -232
  904. package/src/trigger/queue/types.ts +0 -149
  905. package/src/trigger/sources/cron/cron-service.ts +0 -499
  906. package/src/trigger/sources/cron/index.ts +0 -41
  907. package/src/trigger/sources/cron/scheduler.ts +0 -344
  908. package/src/trigger/sources/cron/types.ts +0 -333
  909. package/src/trigger/sources/index.ts +0 -10
  910. package/src/trigger/sources/webhook/index.ts +0 -25
  911. package/src/trigger/sources/webhook/types.ts +0 -205
  912. package/src/trigger/sources/webhook/webhook-handler.ts +0 -410
  913. package/src/trigger/strategies/ai-router.ts +0 -170
  914. package/src/trigger/trigger-system-v2.ts +0 -536
  915. package/src/trigger/types.ts +0 -228
  916. package/src/trigger/wake/index.ts +0 -22
  917. package/src/trigger/wake/types.ts +0 -162
  918. package/src/trigger/wake/wake-manager.ts +0 -390
  919. package/src/workspace/__tests__/git-cascade-adapter.test.ts +0 -563
  920. package/src/workspace/__tests__/land-dispatch.test.ts +0 -214
  921. package/src/workspace/__tests__/self-driving-yaml.test.ts +0 -122
  922. package/src/workspace/__tests__/shared-worktree-refcount.test.ts +0 -154
  923. package/src/workspace/__tests__/standalone-mode.test.ts +0 -118
  924. package/src/workspace/__tests__/workspace-manager-v3.test.ts +0 -245
  925. package/src/workspace/__tests__/yaml-schema.test.ts +0 -210
  926. package/src/workspace/config.ts +0 -165
  927. package/src/workspace/git-cascade-adapter.ts +0 -1213
  928. package/src/workspace/index.ts +0 -110
  929. package/src/workspace/landing/__tests__/strategies.test.ts +0 -184
  930. package/src/workspace/landing/direct-push.ts +0 -91
  931. package/src/workspace/landing/index.ts +0 -40
  932. package/src/workspace/landing/merge-to-parent.ts +0 -229
  933. package/src/workspace/landing/optimistic-push.ts +0 -36
  934. package/src/workspace/landing/queue-to-branch.ts +0 -108
  935. package/src/workspace/merge-queue/__tests__/conflict-resolution-git.e2e.test.ts +0 -641
  936. package/src/workspace/merge-queue/__tests__/conflict-resolution.test.ts +0 -707
  937. package/src/workspace/merge-queue/__tests__/merge-queue-concurrent.test.ts +0 -628
  938. package/src/workspace/merge-queue/__tests__/merge-queue-edge-cases.test.ts +0 -1217
  939. package/src/workspace/merge-queue/__tests__/merge-queue.test.ts +0 -506
  940. package/src/workspace/merge-queue/__tests__/real-git-operations.e2e.test.ts +0 -556
  941. package/src/workspace/merge-queue/__tests__/resolver-flow.test.ts +0 -472
  942. package/src/workspace/merge-queue/index.ts +0 -38
  943. package/src/workspace/merge-queue/merge-queue.ts +0 -585
  944. package/src/workspace/merge-queue/schema.ts +0 -98
  945. package/src/workspace/merge-queue/types.ts +0 -316
  946. package/src/workspace/pool/__tests__/worktree-pool.integration.test.ts +0 -1281
  947. package/src/workspace/pool/__tests__/worktree-pool.test.ts +0 -590
  948. package/src/workspace/pool/index.ts +0 -26
  949. package/src/workspace/pool/types.ts +0 -276
  950. package/src/workspace/pool/worktree-pool.ts +0 -659
  951. package/src/workspace/recovery/__tests__/auto-resolve-integration.test.ts +0 -127
  952. package/src/workspace/recovery/__tests__/spawn-resolver.test.ts +0 -139
  953. package/src/workspace/recovery/__tests__/strategies.test.ts +0 -145
  954. package/src/workspace/recovery/abandon.ts +0 -51
  955. package/src/workspace/recovery/auto-resolve.ts +0 -119
  956. package/src/workspace/recovery/defer.ts +0 -23
  957. package/src/workspace/recovery/escalate.ts +0 -30
  958. package/src/workspace/recovery/index.ts +0 -58
  959. package/src/workspace/recovery/spawn-resolver.ts +0 -152
  960. package/src/workspace/recovery/types.ts +0 -54
  961. package/src/workspace/strategies/index.ts +0 -18
  962. package/src/workspace/strategies/optimistic.ts +0 -139
  963. package/src/workspace/strategies/queue.ts +0 -81
  964. package/src/workspace/strategies/registry.ts +0 -89
  965. package/src/workspace/strategies/trunk.ts +0 -123
  966. package/src/workspace/strategies/types.ts +0 -145
  967. package/src/workspace/topology/__tests__/yaml-driven.test.ts +0 -345
  968. package/src/workspace/topology/index.ts +0 -18
  969. package/src/workspace/topology/no-workspace.ts +0 -39
  970. package/src/workspace/topology/types.ts +0 -116
  971. package/src/workspace/topology/yaml-driven.ts +0 -316
  972. package/src/workspace/types-v3.ts +0 -162
  973. package/src/workspace/types.ts +0 -541
  974. package/src/workspace/workspace-manager.ts +0 -1577
  975. package/src/workspace/yaml-schema.ts +0 -216
  976. package/test_fixtures/README.md +0 -425
  977. package/test_fixtures/fixtures/behaviors/coordinators.ts +0 -196
  978. package/test_fixtures/fixtures/behaviors/index.ts +0 -62
  979. package/test_fixtures/fixtures/behaviors/integrators.ts +0 -143
  980. package/test_fixtures/fixtures/behaviors/monitors.ts +0 -199
  981. package/test_fixtures/fixtures/behaviors/workers.ts +0 -348
  982. package/test_fixtures/fixtures/index.ts +0 -7
  983. package/test_fixtures/fixtures/projects/index.ts +0 -23
  984. package/test_fixtures/fixtures/projects/project-with-specs.ts +0 -44
  985. package/test_fixtures/fixtures/projects/typescript-project.ts +0 -200
  986. package/test_fixtures/fixtures/repos/index.ts +0 -6
  987. package/test_fixtures/fixtures/repos/temp-repo-factory.ts +0 -299
  988. package/test_fixtures/fixtures/repos/types.ts +0 -174
  989. package/test_fixtures/harness/assertions/harness-assertions.ts +0 -752
  990. package/test_fixtures/harness/assertions/index.ts +0 -8
  991. package/test_fixtures/harness/index.ts +0 -15
  992. package/test_fixtures/harness/simulator/agent-simulator.ts +0 -768
  993. package/test_fixtures/harness/simulator/behavior-executor.ts +0 -580
  994. package/test_fixtures/harness/simulator/index.ts +0 -14
  995. package/test_fixtures/harness/simulator/types.ts +0 -459
  996. package/test_fixtures/harness/test-harness.ts +0 -770
  997. package/test_fixtures/harness/timing/event-stepper.ts +0 -344
  998. package/test_fixtures/harness/timing/index.ts +0 -8
  999. package/tsconfig.json +0 -21
  1000. package/vitest.config.ts +0 -30
  1001. package/vitest.e2e.config.ts +0 -28
  1002. package/vitest.setup.ts +0 -12
@@ -1,1330 +0,0 @@
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
- });