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