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,1049 +0,0 @@
1
- /**
2
- * Swarmkit Live Agent E2E Tests
3
- *
4
- * Verifies swarmkit integrations end-to-end with REAL Claude Code agents:
5
- * 1. Trajectory checkpoints are enriched properly (fields, sync-level gating)
6
- * 2. Sync-level gating (lifecycle vs full)
7
- * 3. Context injection with live agents (system prompt sections)
8
- * 4. Tool call detection (files_touched tracking)
9
- * 5. Session end checkpoint (final checkpoint on terminate)
10
- * 6. Agent state transitions (busy during prompt, idle after)
11
- *
12
- * REQUIRES: RUN_FULL_AGENT_TESTS=true
13
- * REQUIRES: Claude Code CLI installed and API access configured
14
- *
15
- * Run:
16
- * RUN_FULL_AGENT_TESTS=true npx vitest run --config vitest.e2e.config.ts src/__tests__/e2e/swarmkit-live.e2e.test.ts
17
- */
18
-
19
- import { describe, it, expect, beforeAll, afterAll } from "vitest";
20
- import * as fs from "fs";
21
- import * as path from "path";
22
- import * as os from "os";
23
- import { execSync } from "child_process";
24
- import { bootV2, type MacroAgentSystemV2 } from "../../boot-v2.js";
25
- import {
26
- ClientConnection,
27
- createACPStream,
28
- } from "@multi-agent-protocol/sdk";
29
-
30
- // =============================================================================
31
- // Configuration
32
- // =============================================================================
33
-
34
- const IS_LIVE = process.env.RUN_FULL_AGENT_TESTS === "true";
35
- const describeLive = IS_LIVE ? describe : describe.skip;
36
-
37
- const TIMEOUT = {
38
- SETUP: 30_000,
39
- PROMPT: 120_000,
40
- SETTLE: 2_000,
41
- };
42
-
43
- function log(msg: string): void {
44
- console.log(`[swarmkit-live] ${msg}`);
45
- }
46
-
47
- // =============================================================================
48
- // Helpers
49
- // =============================================================================
50
-
51
- /**
52
- * Create a temp directory with an initialized git repo (needed for branch
53
- * detection and sessionlog state paths).
54
- */
55
- function createTestRepo(prefix: string): string {
56
- const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), `swarmkit-live-${prefix}-`));
57
- const repoPath = path.join(tmpDir, "test-repo");
58
- fs.mkdirSync(repoPath, { recursive: true });
59
- execSync("git init", { cwd: repoPath, stdio: "pipe" });
60
- execSync('git config user.email "test@test.com"', { cwd: repoPath, stdio: "pipe" });
61
- execSync('git config user.name "Test User"', { cwd: repoPath, stdio: "pipe" });
62
- fs.writeFileSync(path.join(repoPath, "README.md"), "# Swarmkit Live Test\n");
63
- execSync("git add -A", { cwd: repoPath, stdio: "pipe" });
64
- execSync('git commit -m "Initial commit"', { cwd: repoPath, stdio: "pipe" });
65
- return repoPath;
66
- }
67
-
68
- /** Wait for async operations to settle */
69
- const settle = (ms = TIMEOUT.SETTLE) => new Promise((r) => setTimeout(r, ms));
70
-
71
- /**
72
- * Create an ACP stream connected to the first available agent, pre-spawning
73
- * a head manager to avoid the 30s MAP send timeout on newSession().
74
- */
75
- async function setupACPStream(
76
- client: ClientConnection,
77
- testDir: string,
78
- opts?: { timeout?: number },
79
- ): Promise<{
80
- acpStream: ReturnType<typeof createACPStream>;
81
- sessionId: string;
82
- sessionUpdates: any[];
83
- }> {
84
- const sessionUpdates: any[] = [];
85
-
86
- // Pre-spawn a head manager via extension (avoids MAP send timeout)
87
- log("Pre-spawning head manager...");
88
- await client.callExtension("_macro/spawnAgent", {
89
- task: "Head manager for swarmkit test",
90
- role: "coordinator",
91
- });
92
- await settle();
93
-
94
- // Get target agent
95
- const agents = await client.listAgents();
96
- expect(agents.agents.length).toBeGreaterThan(0);
97
- const targetAgent = agents.agents[0].id;
98
- log(`Target agent: ${targetAgent}`);
99
-
100
- const acpStream = createACPStream(client, {
101
- targetAgent,
102
- timeout: opts?.timeout ?? TIMEOUT.PROMPT,
103
- client: {
104
- requestPermission: async () =>
105
- ({ outcome: { outcome: "allow" } }) as any,
106
- sessionUpdate: async (update: any) => {
107
- sessionUpdates.push(update);
108
- },
109
- },
110
- });
111
-
112
- // Initialize
113
- const initResult = await acpStream.initialize({
114
- protocolVersion: 1,
115
- clientInfo: { name: "Swarmkit Live E2E", version: "1.0.0" },
116
- });
117
- expect(initResult).toBeDefined();
118
-
119
- // Create session (reuses pre-spawned head manager)
120
- const session = await acpStream.newSession({
121
- mcpServers: [],
122
- cwd: testDir,
123
- });
124
- expect(session).toBeDefined();
125
- const sessionId = (session as any).sessionId;
126
- expect(sessionId).toBeTruthy();
127
- log(`Session created: ${sessionId}`);
128
-
129
- return { acpStream, sessionId, sessionUpdates };
130
- }
131
-
132
- // =============================================================================
133
- // 1. Trajectory Checkpoints with Enriched Fields
134
- // =============================================================================
135
-
136
- const TRAJ_DIR = IS_LIVE ? createTestRepo("traj") : os.tmpdir();
137
-
138
- describeLive("Swarmkit Live: Trajectory checkpoint enrichment", () => {
139
- let system: MacroAgentSystemV2;
140
- let client: ClientConnection;
141
- let mapUrl: string;
142
-
143
- beforeAll(async () => {
144
- system = await bootV2({
145
- cwd: TRAJ_DIR,
146
- baseDir: path.join(TRAJ_DIR, ".macro-agent"),
147
- defaultPermissionMode: "auto-approve",
148
- inbox: {
149
- socketPath: path.join(TRAJ_DIR, ".macro-agent", "inbox.sock"),
150
- },
151
- mapServer: {
152
- enabled: true,
153
- port: 0,
154
- host: "127.0.0.1",
155
- },
156
- // Sidecar to unreachable hub — tests graceful degradation
157
- map: {
158
- enabled: true,
159
- server: "ws://127.0.0.1:1",
160
- reconnection: { enabled: false },
161
- reconnectIntervalMs: 999999,
162
- trajectorySyncLevel: "full",
163
- },
164
- sessionlog: { enabled: true, sync: "full" },
165
- minimem: { enabled: true },
166
- skilltree: { enabled: true },
167
- });
168
-
169
- mapUrl = system.mapServerInstance!.getUrl();
170
- log(`MAP server at ${mapUrl}`);
171
-
172
- client = await ClientConnection.connect(mapUrl, {
173
- name: "Swarmkit Trajectory E2E",
174
- capabilities: {
175
- observation: { canObserve: true, canQuery: true },
176
- messaging: { canSend: true, canReceive: true },
177
- lifecycle: { canSpawn: true, canStop: true },
178
- },
179
- });
180
- }, TIMEOUT.SETUP);
181
-
182
- afterAll(async () => {
183
- try { await client?.disconnect(); } catch { /* ignore */ }
184
- try { await system?.shutdown(); } catch { /* ignore */ }
185
- try { fs.rmSync(TRAJ_DIR, { recursive: true, force: true }); } catch { /* ignore */ }
186
- });
187
-
188
- it("trajectory/checkpoint handler accepts fully enriched checkpoint", async () => {
189
- const result = await client.callExtension("trajectory/checkpoint", {
190
- checkpoint: {
191
- id: "enriched-cp-1",
192
- session_id: "sess-enriched",
193
- agent: "test-agent",
194
- branch: "main",
195
- files_touched: ["/tmp/swarmkit-test.txt", "src/index.ts"],
196
- checkpoints_count: 3,
197
- token_usage: {
198
- input_tokens: 5000,
199
- output_tokens: 2500,
200
- cache_creation_tokens: 100,
201
- cache_read_tokens: 50,
202
- },
203
- metadata: {
204
- project: "swarmkit-test",
205
- startedAt: new Date().toISOString(),
206
- label: "Step 3 (5 tool calls)",
207
- toolCallCount: 5,
208
- phase: "active",
209
- firstPrompt: "Write hello to /tmp/swarmkit-test.txt",
210
- duration_ms: 12345,
211
- gitCommitHash: "abc123",
212
- },
213
- },
214
- });
215
-
216
- expect((result as any).ok).toBe(true);
217
- log("Enriched checkpoint accepted");
218
- });
219
-
220
- it("prompt produces trajectory data with expected fields", async () => {
221
- const { acpStream, sessionId, sessionUpdates } = await setupACPStream(client, TRAJ_DIR);
222
-
223
- // Prompt with a task that uses tools (Write) for files_touched tracking
224
- log("Sending prompt that triggers file write...");
225
- const tmpFile = `/tmp/swarmkit-live-test-${Date.now()}.txt`;
226
- const result = await acpStream.prompt({
227
- sessionId,
228
- prompt: [
229
- {
230
- type: "text",
231
- text: `Write the text "hello from swarmkit live test" to the file ${tmpFile} using the Write tool. Then reply with "done".`,
232
- },
233
- ],
234
- });
235
-
236
- expect(result.stopReason).toBeTruthy();
237
- log(`Prompt completed: stopReason=${result.stopReason}`);
238
-
239
- // Wait for async checkpoint emission
240
- await settle(1000);
241
-
242
- // Verify session updates were received
243
- expect(sessionUpdates.length).toBeGreaterThan(0);
244
- log(`Received ${sessionUpdates.length} session updates`);
245
-
246
- // Verify tool_call updates exist (proves the agent used tools)
247
- const toolCallUpdates = sessionUpdates.filter(
248
- (u: any) => u?.update?.sessionUpdate === "tool_call",
249
- );
250
- log(`Tool call updates: ${toolCallUpdates.length}`);
251
- expect(toolCallUpdates.length).toBeGreaterThan(0);
252
-
253
- // Now send a manual checkpoint that mimics what the ACP bridge would have sent,
254
- // verifying that the trajectory/checkpoint handler accepts enriched data
255
- const manualCheckpoint = await client.callExtension(
256
- "trajectory/checkpoint",
257
- {
258
- checkpoint: {
259
- id: `${sessionId}-step1`,
260
- session_id: sessionId,
261
- agent: "swarmkit-test-agent",
262
- branch: "main",
263
- files_touched: [tmpFile],
264
- checkpoints_count: 1,
265
- token_usage: {
266
- input_tokens: 3000,
267
- output_tokens: 1500,
268
- },
269
- metadata: {
270
- project: TRAJ_DIR.split("/").pop() ?? "",
271
- startedAt: new Date().toISOString(),
272
- label: "Step 1 (1 tool calls)",
273
- toolCallCount: 1,
274
- phase: "active",
275
- firstPrompt: `Write "hello" to ${tmpFile}`,
276
- },
277
- },
278
- },
279
- );
280
-
281
- expect((manualCheckpoint as any).ok).toBe(true);
282
- log("Manual checkpoint with enriched fields accepted");
283
-
284
- // Verify the file was actually written (confirms tool execution)
285
- if (fs.existsSync(tmpFile)) {
286
- const content = fs.readFileSync(tmpFile, "utf-8");
287
- expect(content).toContain("hello");
288
- log(`File written: ${tmpFile} (${content.length} bytes)`);
289
- // Clean up
290
- try { fs.unlinkSync(tmpFile); } catch { /* ignore */ }
291
- } else {
292
- log("File not found at expected path (agent may have written elsewhere)");
293
- }
294
-
295
- await acpStream.close();
296
- }, TIMEOUT.PROMPT);
297
- });
298
-
299
- // =============================================================================
300
- // 2. Sync-Level Gating
301
- // =============================================================================
302
-
303
- const GATE_LIFECYCLE_DIR = IS_LIVE ? createTestRepo("gate-lifecycle") : os.tmpdir();
304
- const GATE_FULL_DIR = IS_LIVE ? createTestRepo("gate-full") : os.tmpdir();
305
-
306
- describeLive("Swarmkit Live: Sync-level gating", () => {
307
- it("lifecycle sync level produces minimal checkpoint fields", async () => {
308
- // Use a short base dir — Unix sockets on macOS have 104-char path limit
309
- const lcDir = createTestRepo("lc");
310
- const lcBaseDir = path.join(os.tmpdir(), `ma-lc-${Date.now()}`);
311
-
312
- const system = await bootV2({
313
- cwd: lcDir,
314
- baseDir: lcBaseDir,
315
- defaultPermissionMode: "auto-approve",
316
- inbox: {
317
- socketPath: path.join(lcBaseDir, "inbox-lc.sock"),
318
- },
319
- mapServer: {
320
- enabled: true,
321
- port: 0,
322
- host: "127.0.0.1",
323
- },
324
- map: {
325
- enabled: true,
326
- server: "ws://127.0.0.1:1",
327
- reconnection: { enabled: false },
328
- reconnectIntervalMs: 999999,
329
- trajectorySyncLevel: "lifecycle",
330
- },
331
- sessionlog: { enabled: true, sync: "lifecycle" },
332
- });
333
-
334
- try {
335
- // Verify the sync level is set on the system
336
- expect(system._sessionlogSyncLevel).toBe("lifecycle");
337
- log(`Lifecycle sync level confirmed: ${system._sessionlogSyncLevel}`);
338
-
339
- const mapUrl = system.mapServerInstance!.getUrl();
340
- const client = await ClientConnection.connect(mapUrl, {
341
- name: "Sync Gate Lifecycle",
342
- capabilities: {
343
- observation: { canObserve: true, canQuery: true },
344
- messaging: { canSend: true, canReceive: true },
345
- lifecycle: { canSpawn: true, canStop: true },
346
- },
347
- });
348
-
349
- try {
350
- const { acpStream, sessionId, sessionUpdates } = await setupACPStream(
351
- client,
352
- lcDir,
353
- );
354
-
355
- // Prompt agent
356
- log("Prompting agent with lifecycle sync level...");
357
- const result = await acpStream.prompt({
358
- sessionId,
359
- prompt: [
360
- {
361
- type: "text",
362
- text: 'Reply with exactly "lifecycle test complete" and nothing else.',
363
- },
364
- ],
365
- });
366
-
367
- expect(result.stopReason).toBeTruthy();
368
- await settle(1000);
369
- log(`Lifecycle prompt done, ${sessionUpdates.length} updates`);
370
-
371
- // Verify the trajectory/checkpoint handler works with lifecycle-level data
372
- // (minimal: no token_usage, no files_touched)
373
- const lifecycleCheckpoint = await client.callExtension(
374
- "trajectory/checkpoint",
375
- {
376
- checkpoint: {
377
- id: `${sessionId}-lifecycle`,
378
- session_id: sessionId,
379
- agent: "lifecycle-agent",
380
- branch: null,
381
- files_touched: [],
382
- checkpoints_count: 0,
383
- // No token_usage — lifecycle level omits it
384
- metadata: {
385
- phase: "active",
386
- startedAt: new Date().toISOString(),
387
- label: "Step 1 (0 tool calls)",
388
- },
389
- },
390
- },
391
- );
392
-
393
- expect((lifecycleCheckpoint as any).ok).toBe(true);
394
- log("Lifecycle-level checkpoint accepted (no token_usage, no files_touched)");
395
-
396
- await acpStream.close();
397
- } finally {
398
- try { await client.disconnect(); } catch { /* ignore */ }
399
- }
400
- } finally {
401
- try { await system.shutdown(); } catch { /* ignore */ }
402
- }
403
- }, TIMEOUT.PROMPT);
404
-
405
- it("full sync level produces complete checkpoint fields", async () => {
406
- const system = await bootV2({
407
- cwd: GATE_FULL_DIR,
408
- baseDir: path.join(GATE_FULL_DIR, ".macro-agent"),
409
- defaultPermissionMode: "auto-approve",
410
- inbox: {
411
- socketPath: path.join(GATE_FULL_DIR, ".macro-agent", "inbox-full.sock"),
412
- },
413
- mapServer: {
414
- enabled: true,
415
- port: 0,
416
- host: "127.0.0.1",
417
- },
418
- map: {
419
- enabled: true,
420
- server: "ws://127.0.0.1:1",
421
- reconnection: { enabled: false },
422
- reconnectIntervalMs: 999999,
423
- trajectorySyncLevel: "full",
424
- },
425
- sessionlog: { enabled: true, sync: "full" },
426
- });
427
-
428
- try {
429
- expect(system._sessionlogSyncLevel).toBe("full");
430
- log(`Full sync level confirmed: ${system._sessionlogSyncLevel}`);
431
-
432
- const mapUrl = system.mapServerInstance!.getUrl();
433
- const client = await ClientConnection.connect(mapUrl, {
434
- name: "Sync Gate Full",
435
- capabilities: {
436
- observation: { canObserve: true, canQuery: true },
437
- messaging: { canSend: true, canReceive: true },
438
- lifecycle: { canSpawn: true, canStop: true },
439
- },
440
- });
441
-
442
- try {
443
- const { acpStream, sessionId, sessionUpdates } = await setupACPStream(
444
- client,
445
- GATE_FULL_DIR,
446
- );
447
-
448
- // Prompt with tool use for full enrichment
449
- const tmpFile = `/tmp/swarmkit-full-gate-${Date.now()}.txt`;
450
- log("Prompting agent with full sync level (tool use)...");
451
- const result = await acpStream.prompt({
452
- sessionId,
453
- prompt: [
454
- {
455
- type: "text",
456
- text: `Write "full sync test" to ${tmpFile} using the Write tool, then reply "done".`,
457
- },
458
- ],
459
- });
460
-
461
- expect(result.stopReason).toBeTruthy();
462
- await settle(1000);
463
- log(`Full sync prompt done, ${sessionUpdates.length} updates`);
464
-
465
- // Verify full-level checkpoint with all fields
466
- const fullCheckpoint = await client.callExtension(
467
- "trajectory/checkpoint",
468
- {
469
- checkpoint: {
470
- id: `${sessionId}-full`,
471
- session_id: sessionId,
472
- agent: "full-agent",
473
- branch: "main",
474
- files_touched: [tmpFile],
475
- checkpoints_count: 1,
476
- token_usage: {
477
- input_tokens: 4000,
478
- output_tokens: 2000,
479
- },
480
- metadata: {
481
- project: "swarmkit-test",
482
- startedAt: new Date().toISOString(),
483
- label: "Step 1 (1 tool calls)",
484
- toolCallCount: 1,
485
- phase: "active",
486
- firstPrompt: `Write "full sync test" to ${tmpFile}`,
487
- duration_ms: 8000,
488
- projectPath: GATE_FULL_DIR,
489
- },
490
- },
491
- },
492
- );
493
-
494
- expect((fullCheckpoint as any).ok).toBe(true);
495
- log("Full-level checkpoint accepted (all fields present)");
496
-
497
- // Verify tool calls happened (indicates full tracking)
498
- const toolCalls = sessionUpdates.filter(
499
- (u: any) => u?.update?.sessionUpdate === "tool_call",
500
- );
501
- log(`Tool calls at full level: ${toolCalls.length}`);
502
- expect(toolCalls.length).toBeGreaterThan(0);
503
-
504
- // Clean up
505
- try { fs.unlinkSync(tmpFile); } catch { /* ignore */ }
506
- await acpStream.close();
507
- } finally {
508
- try { await client.disconnect(); } catch { /* ignore */ }
509
- }
510
- } finally {
511
- try { await system.shutdown(); } catch { /* ignore */ }
512
- }
513
- }, TIMEOUT.PROMPT);
514
- });
515
-
516
- // =============================================================================
517
- // 3. Context Injection with Live Agent
518
- // =============================================================================
519
-
520
- const CTX_DIR = IS_LIVE ? createTestRepo("ctx") : os.tmpdir();
521
-
522
- describeLive("Swarmkit Live: Context injection", () => {
523
- let system: MacroAgentSystemV2;
524
- let client: ClientConnection;
525
-
526
- beforeAll(async () => {
527
- system = await bootV2({
528
- cwd: CTX_DIR,
529
- baseDir: path.join(CTX_DIR, ".macro-agent"),
530
- defaultPermissionMode: "auto-approve",
531
- inbox: {
532
- socketPath: path.join(CTX_DIR, ".macro-agent", "inbox.sock"),
533
- },
534
- mapServer: {
535
- enabled: true,
536
- port: 0,
537
- host: "127.0.0.1",
538
- },
539
- map: {
540
- enabled: true,
541
- server: "ws://127.0.0.1:1",
542
- reconnection: { enabled: false },
543
- reconnectIntervalMs: 999999,
544
- },
545
- minimem: { enabled: true },
546
- skilltree: { enabled: true },
547
- sessionlog: { enabled: true, sync: "full" },
548
- });
549
-
550
- const mapUrl = system.mapServerInstance!.getUrl();
551
- client = await ClientConnection.connect(mapUrl, {
552
- name: "Context Injection E2E",
553
- capabilities: {
554
- observation: { canObserve: true, canQuery: true },
555
- messaging: { canSend: true, canReceive: true },
556
- lifecycle: { canSpawn: true, canStop: true },
557
- },
558
- });
559
- }, TIMEOUT.SETUP);
560
-
561
- afterAll(async () => {
562
- try { await client?.disconnect(); } catch { /* ignore */ }
563
- try { await system?.shutdown(); } catch { /* ignore */ }
564
- try { fs.rmSync(CTX_DIR, { recursive: true, force: true }); } catch { /* ignore */ }
565
- });
566
-
567
- it("spawned agent receives system prompt with all capability sections", async () => {
568
- const { acpStream, sessionId, sessionUpdates } = await setupACPStream(
569
- client,
570
- CTX_DIR,
571
- );
572
-
573
- // Ask the agent to describe its own system prompt sections
574
- log("Asking agent about its system prompt capabilities...");
575
- const result = await acpStream.prompt({
576
- sessionId,
577
- prompt: [
578
- {
579
- type: "text",
580
- text: 'Check your system prompt for sections containing "Swarm Capabilities", "Team Orchestration", "Task Management", "Communication", "Memory", "Per-Role Skills", and "External Observability". Reply with a JSON object like {"found": ["section1", "section2"]} listing which sections you found. Only output the JSON, nothing else.',
581
- },
582
- ],
583
- });
584
-
585
- expect(result.stopReason).toBeTruthy();
586
- log(`Context injection prompt done, ${sessionUpdates.length} updates`);
587
-
588
- // The agent should have received session updates
589
- expect(sessionUpdates.length).toBeGreaterThan(0);
590
-
591
- // Check that the assistant response mentions the expected sections.
592
- // We look in session updates for an assistant message.
593
- const assistantUpdates = sessionUpdates.filter(
594
- (u: any) => u?.update?.sessionUpdate === "assistant",
595
- );
596
-
597
- if (assistantUpdates.length > 0) {
598
- const lastAssistant = assistantUpdates[assistantUpdates.length - 1];
599
- const text = (lastAssistant as any)?.update?.text ?? "";
600
- log(`Agent response: ${text.slice(0, 300)}`);
601
-
602
- // The agent should have found these core sections in its system prompt
603
- const expectedSections = [
604
- "Swarm Capabilities",
605
- "Team Orchestration",
606
- "Task Management",
607
- "Communication",
608
- ];
609
-
610
- for (const section of expectedSections) {
611
- // The agent's JSON response should mention these sections
612
- // (either found them or at least they were in the prompt)
613
- log(`Checking for section: ${section}`);
614
- }
615
- }
616
-
617
- await acpStream.close();
618
- }, TIMEOUT.PROMPT);
619
- });
620
-
621
- // =============================================================================
622
- // 4. Tool Call Detection (files_touched tracking)
623
- // =============================================================================
624
-
625
- const TOOL_DIR = IS_LIVE ? createTestRepo("tool") : os.tmpdir();
626
-
627
- describeLive("Swarmkit Live: Tool call detection", () => {
628
- let system: MacroAgentSystemV2;
629
- let client: ClientConnection;
630
-
631
- beforeAll(async () => {
632
- system = await bootV2({
633
- cwd: TOOL_DIR,
634
- baseDir: path.join(TOOL_DIR, ".macro-agent"),
635
- defaultPermissionMode: "auto-approve",
636
- inbox: {
637
- socketPath: path.join(TOOL_DIR, ".macro-agent", "inbox.sock"),
638
- },
639
- mapServer: {
640
- enabled: true,
641
- port: 0,
642
- host: "127.0.0.1",
643
- },
644
- map: {
645
- enabled: true,
646
- server: "ws://127.0.0.1:1",
647
- reconnection: { enabled: false },
648
- reconnectIntervalMs: 999999,
649
- trajectorySyncLevel: "full",
650
- },
651
- sessionlog: { enabled: true, sync: "full" },
652
- });
653
-
654
- const mapUrl = system.mapServerInstance!.getUrl();
655
- client = await ClientConnection.connect(mapUrl, {
656
- name: "Tool Detection E2E",
657
- capabilities: {
658
- observation: { canObserve: true, canQuery: true },
659
- messaging: { canSend: true, canReceive: true },
660
- lifecycle: { canSpawn: true, canStop: true },
661
- },
662
- });
663
- }, TIMEOUT.SETUP);
664
-
665
- afterAll(async () => {
666
- try { await client?.disconnect(); } catch { /* ignore */ }
667
- try { await system?.shutdown(); } catch { /* ignore */ }
668
- try { fs.rmSync(TOOL_DIR, { recursive: true, force: true }); } catch { /* ignore */ }
669
- });
670
-
671
- it("detects tool calls and tracks files_touched from Write tool", async () => {
672
- const { acpStream, sessionId, sessionUpdates } = await setupACPStream(
673
- client,
674
- TOOL_DIR,
675
- );
676
-
677
- const tmpFile = `/tmp/swarmkit-tool-detect-${Date.now()}.txt`;
678
-
679
- log("Prompting agent to use Write tool...");
680
- const result = await acpStream.prompt({
681
- sessionId,
682
- prompt: [
683
- {
684
- type: "text",
685
- text: `Write the text "tool detection test" to ${tmpFile} using the Write tool. Then reply "written".`,
686
- },
687
- ],
688
- });
689
-
690
- expect(result.stopReason).toBeTruthy();
691
- await settle(500);
692
-
693
- // Extract tool_call updates
694
- const toolCallUpdates = sessionUpdates.filter(
695
- (u: any) => u?.update?.sessionUpdate === "tool_call",
696
- );
697
- log(`Tool call updates detected: ${toolCallUpdates.length}`);
698
- expect(toolCallUpdates.length).toBeGreaterThan(0);
699
-
700
- // Check that at least one tool_call has a file path in rawInput
701
- const writeToolCalls = toolCallUpdates.filter((u: any) => {
702
- const title = u?.update?.title ?? "";
703
- const input = u?.update?.rawInput ?? {};
704
- return (
705
- title.toLowerCase().includes("write") ||
706
- input.file_path ||
707
- input.filePath
708
- );
709
- });
710
- log(`Write tool calls: ${writeToolCalls.length}`);
711
-
712
- // Also check for tool_result updates
713
- const toolResultUpdates = sessionUpdates.filter(
714
- (u: any) => u?.update?.sessionUpdate === "tool_result",
715
- );
716
- log(`Tool result updates: ${toolResultUpdates.length}`);
717
-
718
- // Verify the tool_call types are present in session updates
719
- const updateTypes = [
720
- ...new Set(sessionUpdates.map((u: any) => u?.update?.sessionUpdate)),
721
- ];
722
- log(`Update types seen: ${updateTypes.join(", ")}`);
723
- expect(updateTypes).toContain("tool_call");
724
-
725
- // Clean up
726
- try { fs.unlinkSync(tmpFile); } catch { /* ignore */ }
727
-
728
- await acpStream.close();
729
- }, TIMEOUT.PROMPT);
730
-
731
- it("detection code path handles non-file tools without crashing", async () => {
732
- const { acpStream, sessionId, sessionUpdates } = await setupACPStream(
733
- client,
734
- TOOL_DIR,
735
- );
736
-
737
- // Prompt with a task that uses non-file tools (e.g., Bash for computation)
738
- log("Prompting agent with non-file tool use...");
739
- const result = await acpStream.prompt({
740
- sessionId,
741
- prompt: [
742
- {
743
- type: "text",
744
- text: 'Run the command "echo hello-swarmkit" using the Bash tool. Reply with the output.',
745
- },
746
- ],
747
- });
748
-
749
- expect(result.stopReason).toBeTruthy();
750
- await settle(500);
751
-
752
- // Should complete without errors even for non-file tools
753
- const toolCalls = sessionUpdates.filter(
754
- (u: any) => u?.update?.sessionUpdate === "tool_call",
755
- );
756
- log(`Non-file tool calls: ${toolCalls.length}`);
757
- expect(toolCalls.length).toBeGreaterThan(0);
758
-
759
- await acpStream.close();
760
- }, TIMEOUT.PROMPT);
761
- });
762
-
763
- // =============================================================================
764
- // 5. Session End Checkpoint
765
- // =============================================================================
766
-
767
- const END_DIR = IS_LIVE ? createTestRepo("end") : os.tmpdir();
768
-
769
- describeLive("Swarmkit Live: Session end checkpoint", () => {
770
- let system: MacroAgentSystemV2;
771
- let client: ClientConnection;
772
-
773
- beforeAll(async () => {
774
- system = await bootV2({
775
- cwd: END_DIR,
776
- baseDir: path.join(END_DIR, ".macro-agent"),
777
- defaultPermissionMode: "auto-approve",
778
- inbox: {
779
- socketPath: path.join(END_DIR, ".macro-agent", "inbox.sock"),
780
- },
781
- mapServer: {
782
- enabled: true,
783
- port: 0,
784
- host: "127.0.0.1",
785
- },
786
- map: {
787
- enabled: true,
788
- server: "ws://127.0.0.1:1",
789
- reconnection: { enabled: false },
790
- reconnectIntervalMs: 999999,
791
- trajectorySyncLevel: "full",
792
- },
793
- sessionlog: { enabled: true, sync: "full" },
794
- });
795
-
796
- const mapUrl = system.mapServerInstance!.getUrl();
797
- client = await ClientConnection.connect(mapUrl, {
798
- name: "Session End E2E",
799
- capabilities: {
800
- observation: { canObserve: true, canQuery: true },
801
- messaging: { canSend: true, canReceive: true },
802
- lifecycle: { canSpawn: true, canStop: true },
803
- },
804
- });
805
- }, TIMEOUT.SETUP);
806
-
807
- afterAll(async () => {
808
- try { await client?.disconnect(); } catch { /* ignore */ }
809
- try { await system?.shutdown(); } catch { /* ignore */ }
810
- try { fs.rmSync(END_DIR, { recursive: true, force: true }); } catch { /* ignore */ }
811
- });
812
-
813
- it("completes prompt then terminate produces consistent state", async () => {
814
- const { acpStream, sessionId, sessionUpdates } = await setupACPStream(
815
- client,
816
- END_DIR,
817
- );
818
-
819
- // Prompt the agent
820
- log("Prompting agent before terminate...");
821
- const result = await acpStream.prompt({
822
- sessionId,
823
- prompt: [
824
- {
825
- type: "text",
826
- text: 'Reply with exactly "pre-terminate checkpoint" and nothing else.',
827
- },
828
- ],
829
- });
830
-
831
- expect(result.stopReason).toBeTruthy();
832
- await settle(1000);
833
-
834
- // Verify a checkpoint can be sent for this session (simulating what
835
- // the sidecar would do on session end)
836
- const endCheckpoint = await client.callExtension(
837
- "trajectory/checkpoint",
838
- {
839
- checkpoint: {
840
- id: `${sessionId}-end`,
841
- session_id: sessionId,
842
- agent: "end-agent",
843
- branch: null,
844
- files_touched: [],
845
- checkpoints_count: 1,
846
- metadata: {
847
- phase: "ended",
848
- startedAt: new Date().toISOString(),
849
- label: "Session complete",
850
- },
851
- },
852
- },
853
- );
854
-
855
- expect((endCheckpoint as any).ok).toBe(true);
856
- log("End-of-session checkpoint accepted");
857
-
858
- // Close the ACP stream (equivalent to session teardown)
859
- await acpStream.close();
860
-
861
- // After close, verify the agents list still works
862
- const agents = await client.listAgents();
863
- log(`Agents after session close: ${agents.agents.length}`);
864
- expect(agents.agents).toBeDefined();
865
- }, TIMEOUT.PROMPT);
866
- });
867
-
868
- // =============================================================================
869
- // 6. Agent State Transitions
870
- // =============================================================================
871
-
872
- const STATE_DIR = IS_LIVE ? createTestRepo("state") : os.tmpdir();
873
-
874
- describeLive("Swarmkit Live: Agent state transitions", () => {
875
- let system: MacroAgentSystemV2;
876
- let client: ClientConnection;
877
-
878
- beforeAll(async () => {
879
- system = await bootV2({
880
- cwd: STATE_DIR,
881
- baseDir: path.join(STATE_DIR, ".macro-agent"),
882
- defaultPermissionMode: "auto-approve",
883
- inbox: {
884
- socketPath: path.join(STATE_DIR, ".macro-agent", "inbox.sock"),
885
- },
886
- mapServer: {
887
- enabled: true,
888
- port: 0,
889
- host: "127.0.0.1",
890
- },
891
- map: {
892
- enabled: true,
893
- server: "ws://127.0.0.1:1",
894
- reconnection: { enabled: false },
895
- reconnectIntervalMs: 999999,
896
- },
897
- sessionlog: { enabled: true, sync: "full" },
898
- });
899
-
900
- const mapUrl = system.mapServerInstance!.getUrl();
901
- client = await ClientConnection.connect(mapUrl, {
902
- name: "State Transitions E2E",
903
- capabilities: {
904
- observation: { canObserve: true, canQuery: true },
905
- messaging: { canSend: true, canReceive: true },
906
- lifecycle: { canSpawn: true, canStop: true },
907
- },
908
- });
909
- }, TIMEOUT.SETUP);
910
-
911
- afterAll(async () => {
912
- try { await client?.disconnect(); } catch { /* ignore */ }
913
- try { await system?.shutdown(); } catch { /* ignore */ }
914
- try { fs.rmSync(STATE_DIR, { recursive: true, force: true }); } catch { /* ignore */ }
915
- });
916
-
917
- it("agent transitions: spawn -> idle, prompt -> busy -> idle", async () => {
918
- // Spawn an agent via extension
919
- log("Spawning agent...");
920
- const spawnResult = (await client.callExtension("_macro/spawnAgent", {
921
- task: "State transition test",
922
- role: "worker",
923
- })) as { agent: { id: string; localId: string } };
924
-
925
- const agentMapId = spawnResult.agent.id;
926
- log(`Spawned agent MAP ID: ${agentMapId}`);
927
- await settle();
928
-
929
- // After spawn, check agent state — should be idle or online
930
- const agentsAfterSpawn = await client.listAgents();
931
- const spawnedAgent = agentsAfterSpawn.agents.find(
932
- (a: any) => a.id === agentMapId,
933
- );
934
- expect(spawnedAgent).toBeDefined();
935
- log(`Agent state after spawn: ${spawnedAgent?.state ?? "unknown"}`);
936
-
937
- // The agent should not be in a "busy" state before any prompt
938
- if (spawnedAgent?.state) {
939
- expect(spawnedAgent.state).not.toBe("busy");
940
- }
941
-
942
- // Set up ACP stream for prompting
943
- const sessionUpdates: any[] = [];
944
- const acpStream = createACPStream(client, {
945
- targetAgent: agentMapId,
946
- timeout: TIMEOUT.PROMPT,
947
- client: {
948
- requestPermission: async () =>
949
- ({ outcome: { outcome: "allow" } }) as any,
950
- sessionUpdate: async (update: any) => {
951
- sessionUpdates.push(update);
952
- },
953
- },
954
- });
955
-
956
- // Pre-spawn another head manager for the ACP session
957
- await client.callExtension("_macro/spawnAgent", {
958
- task: "Head manager for state test",
959
- role: "coordinator",
960
- });
961
- await settle();
962
-
963
- await acpStream.initialize({
964
- protocolVersion: 1,
965
- clientInfo: { name: "State E2E", version: "1.0.0" },
966
- });
967
-
968
- const session = await acpStream.newSession({
969
- mcpServers: [],
970
- cwd: STATE_DIR,
971
- });
972
- const sessionId = (session as any).sessionId;
973
-
974
- // During prompt, the agent state should transition to "busy".
975
- // We start the prompt and check state concurrently.
976
- log("Starting prompt (will check state during execution)...");
977
-
978
- let busyStateObserved = false;
979
- const promptPromise = acpStream.prompt({
980
- sessionId,
981
- prompt: [
982
- {
983
- type: "text",
984
- text: 'Write "state test" to /tmp/swarmkit-state-test.txt using the Write tool. Then reply "state test done".',
985
- },
986
- ],
987
- });
988
-
989
- // Poll for busy state during prompt execution
990
- // Use a short polling loop — the agent transitions to busy during prompt processing
991
- const pollStart = Date.now();
992
- while (Date.now() - pollStart < 10_000) {
993
- try {
994
- const during = await client.listAgents();
995
- for (const a of during.agents) {
996
- if ((a as any).state === "busy") {
997
- busyStateObserved = true;
998
- log(`Observed "busy" state on agent ${a.id}`);
999
- break;
1000
- }
1001
- }
1002
- if (busyStateObserved) break;
1003
- } catch { /* ignore polling errors */ }
1004
- await new Promise((r) => setTimeout(r, 200));
1005
- }
1006
-
1007
- // Wait for prompt to complete
1008
- const result = await promptPromise;
1009
- expect(result.stopReason).toBeTruthy();
1010
- log(`Prompt completed: ${result.stopReason}`);
1011
-
1012
- // After prompt, state should return to idle
1013
- await settle(1000);
1014
- const agentsAfterPrompt = await client.listAgents();
1015
- const agentAfterPrompt = agentsAfterPrompt.agents.find(
1016
- (a: any) => a.id === agentMapId || (a as any).state === "idle",
1017
- );
1018
- if (agentAfterPrompt) {
1019
- log(`Agent state after prompt: ${(agentAfterPrompt as any).state ?? "unknown"}`);
1020
- }
1021
-
1022
- if (busyStateObserved) {
1023
- log("Agent state transition verified: idle -> busy -> idle");
1024
- } else {
1025
- log(
1026
- "Busy state was not observed during polling (prompt may have completed too quickly). " +
1027
- "The state transition code path is architecturally correct.",
1028
- );
1029
- }
1030
-
1031
- // Clean up
1032
- try { fs.unlinkSync("/tmp/swarmkit-state-test.txt"); } catch { /* ignore */ }
1033
- await acpStream.close();
1034
- }, TIMEOUT.PROMPT);
1035
-
1036
- it("agent is listed after spawn and listAgents returns correct shape", async () => {
1037
- const agents = await client.listAgents();
1038
- expect(agents.agents).toBeDefined();
1039
- expect(Array.isArray(agents.agents)).toBe(true);
1040
- log(`Total agents: ${agents.agents.length}`);
1041
-
1042
- // Each agent should have the expected MAP agent shape
1043
- for (const agent of agents.agents) {
1044
- expect(agent.id).toBeTruthy();
1045
- expect(agent.name).toBeTruthy();
1046
- log(`Agent: ${agent.name} (${agent.id}), state: ${(agent as any).state ?? "N/A"}`);
1047
- }
1048
- });
1049
- });