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
@@ -0,0 +1,1199 @@
1
+ /**
2
+ * MAPAdapter - External MAP Protocol Interface
3
+ *
4
+ * ## Routing Architecture Role
5
+ *
6
+ * MAPAdapter is the **external protocol translation layer** for MAP clients.
7
+ * It translates MAP protocol messages into internal routing calls.
8
+ *
9
+ * ```
10
+ * External → MAPAdapter → MessageRouter → EventStore
11
+ * (MAP RPC) (this) (routing) (persistence)
12
+ * ```
13
+ *
14
+ * **Responsibilities:**
15
+ * - Accept MAP protocol connections (JSON-RPC over WebSocket/streams)
16
+ * - Manage participant lifecycle (connect, disconnect, capabilities)
17
+ * - Handle authentication and permission enforcement (Layer 1)
18
+ * - Translate MAP addresses to internal routing
19
+ * - Stream events to subscribed participants
20
+ * - Dispatch extension method calls (spawn, wake, tasks, etc.)
21
+ *
22
+ * **Delegates to internal components:**
23
+ * - MessageRouter: For message routing and delivery (sendToAddress)
24
+ * - AgentManager: For agent lifecycle operations
25
+ * - EventStore: For event persistence and subscription
26
+ *
27
+ * **Not responsible for:**
28
+ * - Internal agent-to-agent messaging (use MessageRouter directly)
29
+ * - Batch event delivery (use TriggerRouter/WakeManager)
30
+ * - Legacy channel-based routing (use MessageRouter.send())
31
+ *
32
+ * @see specs/s-5qir_map_integration_for_macro_agent.md
33
+ */
34
+ import { ulid } from "ulid";
35
+ import { isAgentAddress, } from "../types.js";
36
+ import { createConnectionManager, } from "./connection-manager.js";
37
+ import { createSubscriptionManager, } from "./subscription-manager.js";
38
+ import { createRPCHandler, RPCError, createCapabilityMiddleware, createNotification, } from "./rpc-handler.js";
39
+ import { EXTENSION_CAPABILITIES } from "./extensions/index.js";
40
+ import { ACPOverMAPHandler } from "./acp-over-map.js";
41
+ import { createMailHandlers } from "./mail-handler-adapter.js";
42
+ import { EventLog, dotToUnderscore } from "./event-log.js";
43
+ // =============================================================================
44
+ // MAPAdapter Implementation
45
+ // =============================================================================
46
+ /**
47
+ * MAPAdapter implementation.
48
+ */
49
+ export class MAPAdapterImpl {
50
+ config;
51
+ connections;
52
+ subscriptions;
53
+ sessions = new Map();
54
+ extensions = new Map();
55
+ scopes = new Map();
56
+ eventHandlers = new Set();
57
+ services;
58
+ acpOverMapHandler = null;
59
+ /** Sequence numbers per subscription for proper event ordering */
60
+ subscriptionSequences = new Map();
61
+ /** In-memory event log for map/replay support */
62
+ eventLog;
63
+ running = false;
64
+ constructor(config = {}, services = {}) {
65
+ this.config = {
66
+ name: config.name ?? "macro-agent",
67
+ version: config.version ?? "1.0.0",
68
+ ...config,
69
+ };
70
+ this.services = services;
71
+ // Initialize ACP-over-MAP handler if services are available
72
+ if (services.agentManager && services.eventStore && services.taskManager) {
73
+ this.acpOverMapHandler = new ACPOverMAPHandler({
74
+ agentManager: services.agentManager,
75
+ eventStore: services.eventStore,
76
+ taskManager: services.taskManager,
77
+ defaultCwd: services.defaultCwd,
78
+ // Note: agent_registered events are now emitted by the lifecycle
79
+ // listener below, which covers ALL spawn paths (ACP, MCP, etc.)
80
+ });
81
+ console.error("[MAPAdapter] ACP-over-MAP handler initialized");
82
+ }
83
+ // Listen for agent lifecycle events so spawns/stops happening in THIS
84
+ // process (main server) emit MAP events to subscribers immediately.
85
+ if (services.agentManager) {
86
+ services.agentManager.onLifecycleEvent((event) => {
87
+ if (event.type === "spawned" && event.agent) {
88
+ const agentId = event.agent.id;
89
+ this.emitEvent({
90
+ eventId: ulid(),
91
+ type: "agent_registered",
92
+ timestamp: Date.now(),
93
+ agentId,
94
+ data: {
95
+ agentId: event.agent.id,
96
+ name: event.agent.name ?? "",
97
+ role: event.agent.role ?? "worker",
98
+ state: event.agent.state ?? "spawning",
99
+ parent: event.agent.parent ?? undefined,
100
+ metadata: event.agent.metadata ?? {},
101
+ },
102
+ });
103
+ }
104
+ else if (event.type === "stopped" && event.agent) {
105
+ const agentId = event.agent.id;
106
+ this.emitEvent({
107
+ eventId: ulid(),
108
+ type: "agent_state_changed",
109
+ timestamp: Date.now(),
110
+ agentId,
111
+ data: {
112
+ agentId: event.agent.id,
113
+ current: "stopped",
114
+ previous: "running",
115
+ reason: event.reason,
116
+ },
117
+ });
118
+ this.emitEvent({
119
+ eventId: ulid(),
120
+ type: "agent_unregistered",
121
+ timestamp: Date.now(),
122
+ agentId,
123
+ data: {
124
+ agentId: event.agent.id,
125
+ reason: event.reason,
126
+ },
127
+ });
128
+ }
129
+ });
130
+ }
131
+ // Listen for EventStore task changes to emit MAP task events.
132
+ // Task mutations from MCP bridge handlers run in-process, so
133
+ // onTaskChange fires immediately when tasks are created/updated.
134
+ if (services.eventStore) {
135
+ services.eventStore.onTaskChange((taskId, task) => {
136
+ if (!task)
137
+ return;
138
+ // Map task status to MAP event type
139
+ const eventTypeMap = {
140
+ pending: "task_created",
141
+ assigned: "task_assigned",
142
+ in_progress: "task_assigned",
143
+ completed: "task_completed",
144
+ failed: "task_failed",
145
+ // OpenTasks statuses (defensive — normally mapped before reaching here)
146
+ closed: "task_completed",
147
+ open: "task_created",
148
+ };
149
+ const mapEventType = eventTypeMap[task.status];
150
+ if (mapEventType) {
151
+ this.emitEvent({
152
+ eventId: ulid(),
153
+ type: mapEventType,
154
+ timestamp: Date.now(),
155
+ agentId: (task.assigned_agent ?? undefined),
156
+ data: {
157
+ taskId,
158
+ description: task.description,
159
+ status: task.status,
160
+ assignee: task.assigned_agent,
161
+ },
162
+ });
163
+ }
164
+ });
165
+ }
166
+ // Initialize connection manager
167
+ this.connections = createConnectionManager({
168
+ limits: config.limits,
169
+ anonymousCapabilities: config.anonymousCapabilities,
170
+ defaultClientCapabilities: config.defaultClientCapabilities,
171
+ defaultAgentCapabilities: config.defaultAgentCapabilities,
172
+ });
173
+ // Initialize subscription manager
174
+ this.subscriptions = createSubscriptionManager({
175
+ limits: config.limits,
176
+ getAncestors: services.getAncestors,
177
+ getDescendants: services.getDescendants,
178
+ });
179
+ // Initialize event log for replay support
180
+ this.eventLog = new EventLog({
181
+ maxSize: config.limits?.maxReplayBufferSize ?? 10_000,
182
+ });
183
+ // Forward connection events
184
+ this.connections.onEvent((event) => {
185
+ if (event.type === "participant.connected") {
186
+ this.emitAdapterEvent({
187
+ type: "participant.connected",
188
+ participant: event.participant,
189
+ });
190
+ }
191
+ else if (event.type === "participant.disconnected") {
192
+ this.emitAdapterEvent({
193
+ type: "participant.disconnected",
194
+ participantId: event.participantId,
195
+ reason: event.reason,
196
+ });
197
+ }
198
+ });
199
+ // Forward subscription events
200
+ this.subscriptions.onEvent((event) => {
201
+ if (event.type === "subscription.created") {
202
+ this.emitAdapterEvent({
203
+ type: "subscription.created",
204
+ subscriptionId: event.subscription.id,
205
+ });
206
+ }
207
+ else if (event.type === "subscription.removed") {
208
+ this.emitAdapterEvent({
209
+ type: "subscription.removed",
210
+ subscriptionId: event.subscriptionId,
211
+ });
212
+ }
213
+ });
214
+ }
215
+ // ===========================================================================
216
+ // Connection Management
217
+ // ===========================================================================
218
+ async acceptConnection(stream) {
219
+ if (!this.running) {
220
+ throw new Error("Adapter not running");
221
+ }
222
+ // Create participant with default client type (will be updated after connect handshake)
223
+ const participant = this.connections.connect({
224
+ type: "client",
225
+ });
226
+ // Create RPC handler for this connection
227
+ const rpcHandler = this.createRPCHandler(participant.id);
228
+ // Get writer for sending responses
229
+ const writer = stream.writable.getWriter();
230
+ // Create abort controller for this session
231
+ const abortController = new AbortController();
232
+ // Track session
233
+ const session = {
234
+ participantId: participant.id,
235
+ participant,
236
+ rpcHandler,
237
+ stream,
238
+ writer,
239
+ abortController,
240
+ };
241
+ this.sessions.set(participant.id, session);
242
+ // Start message processing
243
+ this.processMessages(session).catch((error) => {
244
+ if (!abortController.signal.aborted) {
245
+ console.error("[MAPAdapter] Message processing error:", error);
246
+ this.disconnectParticipant(participant.id, "processing_error");
247
+ }
248
+ });
249
+ return participant;
250
+ }
251
+ async disconnectParticipant(id, reason) {
252
+ const session = this.sessions.get(id);
253
+ if (!session) {
254
+ return;
255
+ }
256
+ // Abort message processing
257
+ session.abortController.abort();
258
+ // Clean up subscriptions
259
+ this.subscriptions.removeAllForParticipant(id);
260
+ // Close writer
261
+ try {
262
+ session.writer.releaseLock();
263
+ const writer = session.stream.writable.getWriter();
264
+ await writer.close();
265
+ }
266
+ catch {
267
+ // Ignore close errors
268
+ }
269
+ // Remove session
270
+ this.sessions.delete(id);
271
+ // Disconnect from connection manager
272
+ this.connections.disconnect(id, reason);
273
+ }
274
+ getParticipants() {
275
+ return this.connections.getParticipants();
276
+ }
277
+ getParticipant(id) {
278
+ return this.connections.getParticipant(id);
279
+ }
280
+ // ===========================================================================
281
+ // Messaging
282
+ // ===========================================================================
283
+ async sendMessage(participantId, to, payload, options) {
284
+ const participant = this.connections.getParticipant(participantId);
285
+ if (!participant) {
286
+ throw RPCError.notFound("participant", participantId);
287
+ }
288
+ if (!participant.capabilities.canMessage) {
289
+ throw RPCError.permissionDenied("Messaging not allowed");
290
+ }
291
+ // For external clients, use a virtual sender ID
292
+ const senderId = `external:${participantId}`;
293
+ if (!this.services.sendMessage) {
294
+ throw RPCError.internalError("Message routing not available");
295
+ }
296
+ const result = await this.services.sendMessage(senderId, to, typeof payload.content === "string"
297
+ ? payload.content
298
+ : JSON.stringify(payload.content), options);
299
+ return {
300
+ messageId: `msg-${ulid()}`,
301
+ delivered: result.delivered,
302
+ };
303
+ }
304
+ // ===========================================================================
305
+ // Subscriptions
306
+ // ===========================================================================
307
+ async createSubscription(participantId, filter) {
308
+ const participant = this.connections.getParticipant(participantId);
309
+ if (!participant) {
310
+ throw RPCError.notFound("participant", participantId);
311
+ }
312
+ if (!participant.capabilities.canSubscribe) {
313
+ throw RPCError.permissionDenied("Subscriptions not allowed");
314
+ }
315
+ return this.subscriptions.subscribe(participantId, filter);
316
+ }
317
+ async removeSubscription(subscriptionId) {
318
+ this.subscriptions.unsubscribe(subscriptionId);
319
+ this.subscriptionSequences.delete(subscriptionId);
320
+ }
321
+ getSubscriptions(participantId) {
322
+ return this.subscriptions.getSubscriptionIds(participantId);
323
+ }
324
+ async pauseSubscription(subscriptionId) {
325
+ this.subscriptions.pause(subscriptionId);
326
+ }
327
+ async resumeSubscription(subscriptionId) {
328
+ this.subscriptions.resume(subscriptionId);
329
+ }
330
+ // ===========================================================================
331
+ // Queries
332
+ // ===========================================================================
333
+ listAgents(participantId, filter) {
334
+ const participant = this.connections.getParticipant(participantId);
335
+ if (!participant) {
336
+ return [];
337
+ }
338
+ if (!participant.capabilities.canQuery) {
339
+ return [];
340
+ }
341
+ if (!this.services.listAgents) {
342
+ return [];
343
+ }
344
+ const agents = this.services.listAgents(filter);
345
+ return agents.map((agent) => this.toAgentInfo(agent));
346
+ }
347
+ getAgent(participantId, agentId) {
348
+ const participant = this.connections.getParticipant(participantId);
349
+ if (!participant) {
350
+ return undefined;
351
+ }
352
+ if (!participant.capabilities.canQuery) {
353
+ return undefined;
354
+ }
355
+ if (!this.services.getAgent) {
356
+ return undefined;
357
+ }
358
+ const agent = this.services.getAgent(agentId);
359
+ return agent ? this.toAgentInfo(agent) : undefined;
360
+ }
361
+ listScopes(participantId) {
362
+ const participant = this.connections.getParticipant(participantId);
363
+ if (!participant) {
364
+ return [];
365
+ }
366
+ if (!participant.capabilities.canQuery) {
367
+ return [];
368
+ }
369
+ return Array.from(this.scopes.values()).map((scope) => this.toScopeInfo(scope));
370
+ }
371
+ getScope(participantId, scopeId) {
372
+ const participant = this.connections.getParticipant(participantId);
373
+ if (!participant) {
374
+ return undefined;
375
+ }
376
+ if (!participant.capabilities.canQuery) {
377
+ return undefined;
378
+ }
379
+ const scope = this.scopes.get(scopeId);
380
+ return scope ? this.toScopeInfo(scope) : undefined;
381
+ }
382
+ // ===========================================================================
383
+ // Events
384
+ // ===========================================================================
385
+ emitEvent(event) {
386
+ // Log event for replay support
387
+ this.eventLog.append({
388
+ eventId: event.eventId,
389
+ timestamp: event.timestamp,
390
+ type: event.type,
391
+ data: event.data,
392
+ causedBy: event.causedBy,
393
+ agentId: event.agentId,
394
+ scopeId: event.scopeId,
395
+ });
396
+ // Match event against subscriptions
397
+ const { subscriptions: matchingSubs } = this.subscriptions.match(event);
398
+ // Send to each matched subscription with proper SDK format
399
+ // SDK EventNotificationParams: { subscriptionId, sequenceNumber, eventId?, timestamp?, event, causedBy? }
400
+ for (const subscription of matchingSubs) {
401
+ const session = this.sessions.get(subscription.participantId);
402
+ if (session) {
403
+ // Get and increment sequence number for this subscription
404
+ const currentSeq = this.subscriptionSequences.get(subscription.id) ?? 0;
405
+ this.subscriptionSequences.set(subscription.id, currentSeq + 1);
406
+ // Build params in SDK EventNotificationParams format
407
+ const params = {
408
+ subscriptionId: subscription.id,
409
+ sequenceNumber: currentSeq,
410
+ eventId: event.eventId, // For deduplication
411
+ timestamp: event.timestamp, // Envelope timestamp
412
+ event: {
413
+ // The actual event object
414
+ id: event.eventId,
415
+ type: event.type,
416
+ timestamp: event.timestamp,
417
+ data: event.data,
418
+ },
419
+ ...(event.causedBy && { causedBy: event.causedBy }),
420
+ };
421
+ const notification = createNotification("map/event", params);
422
+ this.sendToSession(session, notification).catch((error) => {
423
+ console.error("[MAPAdapter] Failed to send event:", error);
424
+ });
425
+ }
426
+ }
427
+ }
428
+ onEvent(handler) {
429
+ this.eventHandlers.add(handler);
430
+ return () => this.eventHandlers.delete(handler);
431
+ }
432
+ // ===========================================================================
433
+ // Extensions
434
+ // ===========================================================================
435
+ registerExtension(method, handler) {
436
+ if (!method.startsWith("_macro/")) {
437
+ throw new Error(`Extension method must start with "_macro/": ${method}`);
438
+ }
439
+ this.extensions.set(method, handler);
440
+ }
441
+ unregisterExtension(method) {
442
+ this.extensions.delete(method);
443
+ }
444
+ getExtensions() {
445
+ return Array.from(this.extensions.keys());
446
+ }
447
+ hasExtension(method) {
448
+ return this.extensions.has(method);
449
+ }
450
+ // ===========================================================================
451
+ // Lifecycle
452
+ // ===========================================================================
453
+ async start() {
454
+ if (this.running) {
455
+ return;
456
+ }
457
+ this.running = true;
458
+ }
459
+ async stop(graceful = true) {
460
+ if (!this.running) {
461
+ return;
462
+ }
463
+ this.running = false;
464
+ // Disconnect all participants
465
+ const reason = graceful ? "server_shutdown" : "server_stopped";
466
+ this.connections.disconnectAll(reason);
467
+ // Clear sessions
468
+ for (const session of this.sessions.values()) {
469
+ session.abortController.abort();
470
+ }
471
+ this.sessions.clear();
472
+ }
473
+ isRunning() {
474
+ return this.running;
475
+ }
476
+ // ===========================================================================
477
+ // Scope Management (internal)
478
+ // ===========================================================================
479
+ /**
480
+ * Create a scope (internal use by RPC handlers).
481
+ */
482
+ createScope(name, metadata) {
483
+ const id = `scope-${ulid()}`;
484
+ this.scopes.set(id, {
485
+ id,
486
+ name,
487
+ members: new Set(),
488
+ createdAt: Date.now(),
489
+ metadata,
490
+ });
491
+ return id;
492
+ }
493
+ /**
494
+ * Delete a scope.
495
+ */
496
+ deleteScope(scopeId) {
497
+ return this.scopes.delete(scopeId);
498
+ }
499
+ /**
500
+ * Add agent to scope.
501
+ */
502
+ joinScope(scopeId, agentId) {
503
+ const scope = this.scopes.get(scopeId);
504
+ if (!scope) {
505
+ return false;
506
+ }
507
+ scope.members.add(agentId);
508
+ return true;
509
+ }
510
+ /**
511
+ * Remove agent from scope.
512
+ */
513
+ leaveScope(scopeId, agentId) {
514
+ const scope = this.scopes.get(scopeId);
515
+ if (!scope) {
516
+ return false;
517
+ }
518
+ return scope.members.delete(agentId);
519
+ }
520
+ // ===========================================================================
521
+ // Private Methods
522
+ // ===========================================================================
523
+ createRPCHandler(participantId) {
524
+ const handlers = {
525
+ // Connection
526
+ "map/connect": async (params) => this.handleConnect(participantId, params),
527
+ "map/disconnect": async () => this.handleDisconnect(participantId),
528
+ // Subscriptions
529
+ "map/subscribe": async (params) => this.handleSubscribe(participantId, params),
530
+ "map/unsubscribe": async (params) => this.handleUnsubscribe(participantId, params),
531
+ // Replay
532
+ "map/replay": async (params) => this.handleReplay(participantId, params),
533
+ // Messaging
534
+ "map/send": async (params, ctx) => this.handleSend(participantId, params, ctx),
535
+ // Agent queries
536
+ "map/agents/list": async (params) => this.handleListAgents(participantId, params),
537
+ "map/agents/get": async (params) => this.handleGetAgent(participantId, params),
538
+ // Agent lifecycle
539
+ "map/agents/stop": async (params) => this.handleStopAgent(participantId, params),
540
+ // Scope queries
541
+ "map/scopes/list": async () => this.handleListScopes(participantId),
542
+ "map/scopes/get": async (params) => this.handleGetScope(participantId, params),
543
+ "map/scopes/create": async (params, ctx) => this.handleCreateScope(participantId, params, ctx),
544
+ "map/scopes/join": async (params) => this.handleJoinScope(participantId, params),
545
+ "map/scopes/leave": async (params) => this.handleLeaveScope(participantId, params),
546
+ // Federation methods
547
+ "map/federation/connect": async (params) => this.handleFederationConnect(participantId, params),
548
+ "map/federation/disconnect": async (params) => this.handleFederationDisconnect(participantId, params),
549
+ "map/federation/list": async () => this.handleFederationList(participantId),
550
+ "map/federation/capabilities": async (params) => this.handleFederationCapabilities(participantId, params),
551
+ };
552
+ // Add extension method handlers
553
+ for (const [method, handler] of this.extensions) {
554
+ handlers[method] = async (params, ctx) => {
555
+ const extCtx = {
556
+ participantId: ctx.participantId,
557
+ capabilities: ctx.capabilities,
558
+ sessionId: this.sessions.get(ctx.participantId)?.participant.sessionId ?? "",
559
+ };
560
+ return handler(extCtx, params);
561
+ };
562
+ }
563
+ // Add mail protocol handlers if mail service is available
564
+ if (this.services.mailService) {
565
+ const mailHandlers = createMailHandlers(this.services.mailService);
566
+ for (const [method, handler] of Object.entries(mailHandlers)) {
567
+ handlers[method] = handler;
568
+ }
569
+ }
570
+ // Capability requirements for methods
571
+ const capabilityRequirements = {
572
+ "map/subscribe": "canSubscribe",
573
+ "map/replay": "canSubscribe",
574
+ "map/send": "canMessage",
575
+ "map/agents/list": "canQuery",
576
+ "map/agents/get": "canQuery",
577
+ "map/agents/stop": "canStop",
578
+ "map/scopes/list": "canQuery",
579
+ "map/scopes/get": "canQuery",
580
+ "map/scopes/create": "canManageScopes",
581
+ // Federation methods
582
+ "map/federation/connect": "canManageFederation",
583
+ "map/federation/disconnect": "canManageFederation",
584
+ "map/federation/list": "canQuery",
585
+ "map/federation/capabilities": "canQuery",
586
+ };
587
+ // Add capability requirements for registered extension methods
588
+ for (const method of this.extensions.keys()) {
589
+ const capability = EXTENSION_CAPABILITIES[method];
590
+ if (capability) {
591
+ capabilityRequirements[method] =
592
+ capability;
593
+ }
594
+ }
595
+ return createRPCHandler({
596
+ handlers,
597
+ middleware: [createCapabilityMiddleware(capabilityRequirements)],
598
+ });
599
+ }
600
+ async processMessages(session) {
601
+ const reader = session.stream.readable.getReader();
602
+ try {
603
+ while (!session.abortController.signal.aborted) {
604
+ const { done, value } = await reader.read();
605
+ if (done) {
606
+ break;
607
+ }
608
+ // Process the message
609
+ const participant = this.connections.getParticipant(session.participantId);
610
+ if (!participant) {
611
+ break;
612
+ }
613
+ // Process messages concurrently (same pattern as toad reference).
614
+ // The message loop must not block on any handler, otherwise
615
+ // session/cancel can't be delivered while session/prompt is running.
616
+ // The stream writer queues writes safely, so concurrent responses
617
+ // don't interleave.
618
+ const processAndRespond = async () => {
619
+ const result = await session.rpcHandler.process(value, {
620
+ participantId: session.participantId,
621
+ capabilities: participant.capabilities,
622
+ signal: session.abortController.signal,
623
+ });
624
+ if (result.type === "response") {
625
+ await this.sendToSession(session, result.response);
626
+ }
627
+ };
628
+ processAndRespond().catch((err) => {
629
+ if (!session.abortController.signal.aborted) {
630
+ console.error(`[MAPAdapter] Error processing message:`, err);
631
+ }
632
+ });
633
+ }
634
+ }
635
+ catch (error) {
636
+ if (!session.abortController.signal.aborted) {
637
+ throw error;
638
+ }
639
+ }
640
+ finally {
641
+ reader.releaseLock();
642
+ }
643
+ }
644
+ async sendToSession(session, message) {
645
+ try {
646
+ // Use the existing writer from the session (acquired in acceptConnection)
647
+ await session.writer.write(message);
648
+ }
649
+ catch (error) {
650
+ console.error("[MAPAdapter] Failed to send message:", error);
651
+ throw error;
652
+ }
653
+ }
654
+ emitAdapterEvent(event) {
655
+ for (const handler of this.eventHandlers) {
656
+ try {
657
+ handler(event);
658
+ }
659
+ catch (error) {
660
+ console.error("[MAPAdapter] Event handler error:", error);
661
+ }
662
+ }
663
+ }
664
+ // ===========================================================================
665
+ // RPC Handlers
666
+ // ===========================================================================
667
+ async handleConnect(participantId, params) {
668
+ const participant = this.connections.getParticipant(participantId);
669
+ if (!participant) {
670
+ throw RPCError.notFound("participant", participantId);
671
+ }
672
+ // Parse connect request parameters
673
+ const connectParams = params;
674
+ const requestedType = connectParams?.type ?? connectParams?.participantType ?? participant.type;
675
+ const credentials = connectParams?.credentials;
676
+ // Handle authentication if handler is configured and credentials provided
677
+ if (this.config.authenticate && credentials) {
678
+ const authResult = await this.config.authenticate(requestedType, credentials);
679
+ if (!authResult.allowed) {
680
+ throw RPCError.authenticationFailed(authResult.error ?? "Authentication failed");
681
+ }
682
+ // Update capabilities based on auth result
683
+ const newCapabilities = authResult.capabilities ?? this.getDefaultCapabilities(requestedType);
684
+ this.connections.updateCapabilities(participantId, newCapabilities);
685
+ // Return updated participant info
686
+ const updatedParticipant = this.connections.getParticipant(participantId);
687
+ return {
688
+ participantId: participant.id,
689
+ capabilities: updatedParticipant?.capabilities ?? newCapabilities,
690
+ };
691
+ }
692
+ // Start with default capabilities for the requested type
693
+ const baseCapabilities = this.getDefaultCapabilities(requestedType);
694
+ // Merge client-requested capabilities (SDK nested format → flat format).
695
+ // Clients can request additional capabilities; the server grants them
696
+ // by merging with the type defaults.
697
+ if (connectParams?.capabilities) {
698
+ const req = connectParams.capabilities;
699
+ const requested = {};
700
+ if (req.observation?.canQuery !== undefined)
701
+ requested.canQuery = req.observation.canQuery;
702
+ if (req.observation?.canObserve !== undefined)
703
+ requested.canSubscribe = req.observation.canObserve;
704
+ if (req.messaging?.canSend !== undefined)
705
+ requested.canMessage = req.messaging.canSend;
706
+ if (req.lifecycle?.canSpawn !== undefined)
707
+ requested.canSpawn = req.lifecycle.canSpawn;
708
+ if (req.lifecycle?.canStop !== undefined)
709
+ requested.canStop = req.lifecycle.canStop;
710
+ if (req.scopes?.canManageScopes !== undefined)
711
+ requested.canManageScopes = req.scopes.canManageScopes;
712
+ if (req.management?.canManageTasks !== undefined)
713
+ requested.canManageTasks = req.management.canManageTasks;
714
+ if (req.management?.canManageLifecycle !== undefined)
715
+ requested.canManageLifecycle = req.management.canManageLifecycle;
716
+ const mergedCapabilities = { ...baseCapabilities, ...requested };
717
+ this.connections.updateCapabilities(participantId, mergedCapabilities);
718
+ const updatedParticipant = this.connections.getParticipant(participantId);
719
+ return {
720
+ participantId: participant.id,
721
+ capabilities: updatedParticipant?.capabilities ?? mergedCapabilities,
722
+ };
723
+ }
724
+ // No client-requested capabilities — apply type defaults if type changed
725
+ if (requestedType !== participant.type) {
726
+ this.connections.updateCapabilities(participantId, baseCapabilities);
727
+ const updatedParticipant = this.connections.getParticipant(participantId);
728
+ return {
729
+ participantId: participant.id,
730
+ capabilities: updatedParticipant?.capabilities ?? baseCapabilities,
731
+ };
732
+ }
733
+ return {
734
+ participantId: participant.id,
735
+ capabilities: participant.capabilities,
736
+ };
737
+ }
738
+ /**
739
+ * Get default capabilities for a participant type.
740
+ */
741
+ getDefaultCapabilities(type) {
742
+ switch (type) {
743
+ case "agent":
744
+ return (this.config.defaultAgentCapabilities ?? {
745
+ canQuery: true,
746
+ canSubscribe: true,
747
+ canMessage: true,
748
+ canSpawn: true,
749
+ canStop: true,
750
+ canManageScopes: true,
751
+ canManageTasks: true,
752
+ canManageFederation: true,
753
+ canManageLifecycle: true,
754
+ });
755
+ case "gateway":
756
+ return {
757
+ canQuery: true,
758
+ canSubscribe: true,
759
+ canMessage: true,
760
+ canSpawn: false,
761
+ canStop: false,
762
+ canManageScopes: false,
763
+ canManageTasks: false,
764
+ canManageFederation: true,
765
+ canManageLifecycle: false,
766
+ };
767
+ case "client":
768
+ default:
769
+ return (this.config.defaultClientCapabilities ?? {
770
+ canQuery: true,
771
+ canSubscribe: true,
772
+ canMessage: true,
773
+ canSpawn: false,
774
+ canStop: false,
775
+ canManageScopes: false,
776
+ canManageTasks: false,
777
+ canManageLifecycle: false,
778
+ });
779
+ }
780
+ }
781
+ async handleDisconnect(participantId) {
782
+ await this.disconnectParticipant(participantId, "client_disconnect");
783
+ return { success: true };
784
+ }
785
+ async handleSubscribe(participantId, params) {
786
+ // Extract filter and translate SDK field names to internal format
787
+ // SDK uses 'fromAgents', macro-agent uses 'agents'
788
+ const rawFilter = params?.filter;
789
+ let filter;
790
+ if (rawFilter) {
791
+ filter = {
792
+ eventTypes: rawFilter.eventTypes,
793
+ agents: (rawFilter.fromAgents ?? rawFilter.agents),
794
+ scopes: rawFilter.scopes,
795
+ subtree: rawFilter.subtree,
796
+ lineage: rawFilter.lineage,
797
+ };
798
+ }
799
+ const subscriptionId = await this.createSubscription(participantId, filter);
800
+ return { subscriptionId };
801
+ }
802
+ async handleUnsubscribe(participantId, params) {
803
+ const subscriptionId = params
804
+ ?.subscriptionId;
805
+ if (!subscriptionId) {
806
+ throw RPCError.invalidParams("subscriptionId required");
807
+ }
808
+ await this.removeSubscription(subscriptionId);
809
+ return { success: true };
810
+ }
811
+ async handleReplay(_participantId, params) {
812
+ const { afterEventId, fromTimestamp, toTimestamp, filter, limit } = (params ?? {});
813
+ // Translate SDK filter field names to internal format
814
+ // SDK uses 'fromAgents', macro-agent uses 'agents'
815
+ const internalFilter = filter
816
+ ? {
817
+ eventTypes: filter.eventTypes,
818
+ agents: (filter.fromAgents ?? filter.agents),
819
+ scopes: filter.scopes,
820
+ }
821
+ : undefined;
822
+ const result = this.eventLog.query({
823
+ afterEventId,
824
+ fromTimestamp,
825
+ toTimestamp,
826
+ filter: internalFilter,
827
+ limit,
828
+ });
829
+ // Transform events to SDK response format
830
+ const events = result.events.map((e) => ({
831
+ eventId: e.eventId,
832
+ timestamp: e.timestamp,
833
+ ...(e.causedBy && { causedBy: e.causedBy }),
834
+ event: {
835
+ id: e.eventId,
836
+ type: dotToUnderscore(e.type),
837
+ timestamp: e.timestamp,
838
+ data: e.data,
839
+ },
840
+ }));
841
+ return {
842
+ events,
843
+ hasMore: result.hasMore,
844
+ };
845
+ }
846
+ async handleSend(participantId, params, ctx) {
847
+ const { to, payload, options } = params;
848
+ if (!to) {
849
+ throw RPCError.invalidParams("to address required");
850
+ }
851
+ if (!payload) {
852
+ throw RPCError.invalidParams("payload required");
853
+ }
854
+ // Check if this is an ACP-over-MAP message
855
+ // SDK sends ACP envelope directly as payload (not wrapped in content)
856
+ const rawPayload = payload;
857
+ if (rawPayload &&
858
+ typeof rawPayload === "object" &&
859
+ "acp" in rawPayload &&
860
+ "acpContext" in rawPayload) {
861
+ // This is an ACP envelope - route through ACP-over-MAP handler
862
+ return this.handleACPOverMAP(participantId, to, rawPayload, ctx);
863
+ }
864
+ return this.sendMessage(participantId, to, payload, options);
865
+ }
866
+ /**
867
+ * Handle ACP-over-MAP messages.
868
+ * These are ACP protocol messages sent via MAP to an agent.
869
+ */
870
+ async handleACPOverMAP(participantId, to, envelope, ctx) {
871
+ if (!this.acpOverMapHandler) {
872
+ throw RPCError.internalError("ACP-over-MAP not available - missing services");
873
+ }
874
+ const acp = envelope.acp;
875
+ const acpContext = envelope.acpContext;
876
+ console.error(`[ACP-over-MAP] Received - method=${acp.method} to=${JSON.stringify(to)}`);
877
+ // For now, we only support messages to specific agents
878
+ if (!isAgentAddress(to)) {
879
+ throw RPCError.invalidParams("ACP-over-MAP requires agent target");
880
+ }
881
+ const targetAgentId = to.agent;
882
+ // Check if this is a request (has method) or response (has result/error)
883
+ if (!acp.method) {
884
+ // This is a response - route it normally
885
+ console.error(`[ACP-over-MAP] Routing response back`);
886
+ return this.sendMessage(participantId, to, { content: envelope }, undefined);
887
+ }
888
+ // Emit client→agent ACP request as a message_sent event so other
889
+ // TUI clients can observe user prompts and other ACP operations.
890
+ // Include from/to at top level of data for extractACPFromMessageEvent()
891
+ // which reads data.from/data.to for targetAgent resolution.
892
+ this.emitEvent({
893
+ eventId: ulid(),
894
+ type: "message_sent",
895
+ timestamp: Date.now(),
896
+ agentId: targetAgentId,
897
+ data: {
898
+ from: participantId,
899
+ to: targetAgentId,
900
+ message: {
901
+ id: `acp-req-${Date.now()}`,
902
+ from: participantId,
903
+ to: targetAgentId,
904
+ payload: envelope,
905
+ },
906
+ },
907
+ });
908
+ // Create notification emitter to stream session updates
909
+ const emitNotification = (notification) => {
910
+ this.emitEvent({
911
+ eventId: ulid(),
912
+ type: "message_delivered",
913
+ timestamp: Date.now(),
914
+ agentId: targetAgentId,
915
+ data: {
916
+ from: targetAgentId,
917
+ to: participantId,
918
+ message: {
919
+ id: `acp-notif-${Date.now()}`,
920
+ from: targetAgentId,
921
+ payload: notification,
922
+ },
923
+ },
924
+ });
925
+ };
926
+ // Process the ACP request through the handler
927
+ const acpEnvelope = {
928
+ acp: acp,
929
+ acpContext: acpContext,
930
+ };
931
+ // Helper to emit the final ACP response to the participant via subscription
932
+ const emitResponse = (responseEnvelope) => {
933
+ const participant = this.connections.getParticipant(participantId);
934
+ if (participant) {
935
+ this.emitEvent({
936
+ eventId: ulid(),
937
+ type: "message_delivered",
938
+ timestamp: Date.now(),
939
+ agentId: targetAgentId,
940
+ data: {
941
+ from: targetAgentId,
942
+ to: participantId,
943
+ message: {
944
+ id: `acp-resp-${Date.now()}`,
945
+ from: targetAgentId,
946
+ payload: responseEnvelope,
947
+ },
948
+ },
949
+ });
950
+ }
951
+ };
952
+ // session/prompt can run for minutes — process it asynchronously so the
953
+ // map/send RPC returns immediately. The ACP response will arrive via
954
+ // subscription (message_delivered event) when the prompt finishes.
955
+ // Other ACP methods (initialize, session/new, session/load, etc.) are
956
+ // fast and can be awaited normally.
957
+ const isLongRunning = acp.method === "session/prompt";
958
+ if (isLongRunning) {
959
+ this.acpOverMapHandler
960
+ .processRequest(targetAgentId, acpEnvelope, emitNotification)
961
+ .then((responseEnvelope) => {
962
+ console.error(`[ACP-over-MAP] Async prompt completed - method=${acp.method}`);
963
+ emitResponse(responseEnvelope);
964
+ })
965
+ .catch((error) => {
966
+ console.error(`[ACP-over-MAP] Async prompt error:`, error);
967
+ // Emit error response so the client's ACP pending request resolves
968
+ emitResponse({
969
+ acp: {
970
+ jsonrpc: "2.0",
971
+ id: acp.id,
972
+ error: {
973
+ code: -32603,
974
+ message: error instanceof Error ? error.message : String(error),
975
+ },
976
+ },
977
+ acpContext: {
978
+ streamId: acpContext.streamId,
979
+ sessionId: acpContext.sessionId ?? null,
980
+ direction: "agent-to-client",
981
+ },
982
+ });
983
+ });
984
+ }
985
+ else {
986
+ const responseEnvelope = await this.acpOverMapHandler.processRequest(targetAgentId, acpEnvelope, emitNotification);
987
+ console.error(`[ACP-over-MAP] Request processed - method=${acp.method}`);
988
+ emitResponse(responseEnvelope);
989
+ }
990
+ return {
991
+ messageId: `acp-${acp.id}`,
992
+ delivered: [targetAgentId],
993
+ };
994
+ }
995
+ async handleListAgents(participantId, params) {
996
+ const filter = params?.filter;
997
+ const agents = this.listAgents(participantId, filter);
998
+ return { agents };
999
+ }
1000
+ async handleGetAgent(participantId, params) {
1001
+ const agentId = params?.agentId;
1002
+ if (!agentId) {
1003
+ throw RPCError.invalidParams("agentId required");
1004
+ }
1005
+ const agent = this.getAgent(participantId, agentId);
1006
+ return { agent: agent ?? null };
1007
+ }
1008
+ async handleStopAgent(_participantId, params) {
1009
+ const { agentId, reason, force } = params ?? {};
1010
+ if (!agentId) {
1011
+ throw RPCError.invalidParams("agentId required");
1012
+ }
1013
+ if (!this.services.agentManager) {
1014
+ throw RPCError.internalError("Agent manager not available");
1015
+ }
1016
+ // Abort any active ACP streams for this agent
1017
+ if (this.acpOverMapHandler) {
1018
+ this.acpOverMapHandler.abortStreamsForAgent(agentId);
1019
+ }
1020
+ // Terminate the agent
1021
+ try {
1022
+ await this.services.agentManager.terminate(agentId, (reason ?? "cancelled"));
1023
+ }
1024
+ catch (error) {
1025
+ console.error(`[MAPAdapter] Error stopping agent ${agentId}:`, error);
1026
+ throw RPCError.internalError(`Failed to stop agent: ${error instanceof Error ? error.message : String(error)}`);
1027
+ }
1028
+ // Note: agent_state_changed and agent_unregistered events are now
1029
+ // emitted by the lifecycle listener (covers all stop paths).
1030
+ return { stopping: true };
1031
+ }
1032
+ async handleListScopes(participantId) {
1033
+ const scopes = this.listScopes(participantId);
1034
+ return { scopes };
1035
+ }
1036
+ async handleGetScope(participantId, params) {
1037
+ const scopeId = params?.scopeId;
1038
+ if (!scopeId) {
1039
+ throw RPCError.invalidParams("scopeId required");
1040
+ }
1041
+ const scope = this.getScope(participantId, scopeId);
1042
+ return { scope: scope ?? null };
1043
+ }
1044
+ async handleCreateScope(participantId, params, ctx) {
1045
+ const { name, metadata } = params ?? {};
1046
+ const scopeId = this.createScope(name, metadata);
1047
+ return { scopeId };
1048
+ }
1049
+ async handleJoinScope(participantId, params) {
1050
+ const { scopeId, agentId } = params;
1051
+ if (!scopeId) {
1052
+ throw RPCError.invalidParams("scopeId required");
1053
+ }
1054
+ if (!agentId) {
1055
+ throw RPCError.invalidParams("agentId required");
1056
+ }
1057
+ const success = this.joinScope(scopeId, agentId);
1058
+ if (!success) {
1059
+ throw RPCError.notFound("scope", scopeId);
1060
+ }
1061
+ return { success };
1062
+ }
1063
+ async handleLeaveScope(participantId, params) {
1064
+ const { scopeId, agentId } = params;
1065
+ if (!scopeId) {
1066
+ throw RPCError.invalidParams("scopeId required");
1067
+ }
1068
+ if (!agentId) {
1069
+ throw RPCError.invalidParams("agentId required");
1070
+ }
1071
+ const success = this.leaveScope(scopeId, agentId);
1072
+ if (!success) {
1073
+ throw RPCError.notFound("scope", scopeId);
1074
+ }
1075
+ return { success };
1076
+ }
1077
+ // ===========================================================================
1078
+ // Federation Handlers
1079
+ // ===========================================================================
1080
+ async handleFederationConnect(participantId, params) {
1081
+ if (!this.services.federationHandler) {
1082
+ throw RPCError.internalError("Federation not available");
1083
+ }
1084
+ const { systemId, endpoint, auth } = (params ?? {});
1085
+ if (!systemId) {
1086
+ throw RPCError.invalidParams("systemId is required");
1087
+ }
1088
+ if (!endpoint) {
1089
+ throw RPCError.invalidParams("endpoint is required");
1090
+ }
1091
+ try {
1092
+ const capabilities = await this.services.federationHandler.connect({
1093
+ systemId,
1094
+ endpoint,
1095
+ auth,
1096
+ });
1097
+ return { capabilities };
1098
+ }
1099
+ catch (err) {
1100
+ throw RPCError.internalError(err instanceof Error ? err.message : "Failed to connect");
1101
+ }
1102
+ }
1103
+ async handleFederationDisconnect(participantId, params) {
1104
+ if (!this.services.federationHandler) {
1105
+ throw RPCError.internalError("Federation not available");
1106
+ }
1107
+ const { systemId } = (params ?? {});
1108
+ if (!systemId) {
1109
+ throw RPCError.invalidParams("systemId is required");
1110
+ }
1111
+ try {
1112
+ await this.services.federationHandler.disconnect(systemId);
1113
+ return { success: true };
1114
+ }
1115
+ catch (err) {
1116
+ if (err instanceof Error && err.message.includes("Not connected")) {
1117
+ throw RPCError.notFound("peer", systemId);
1118
+ }
1119
+ throw RPCError.internalError(err instanceof Error ? err.message : "Failed to disconnect");
1120
+ }
1121
+ }
1122
+ async handleFederationList(participantId) {
1123
+ if (!this.services.federationHandler) {
1124
+ return { peers: [] };
1125
+ }
1126
+ const peers = this.services.federationHandler.listPeers();
1127
+ return {
1128
+ peers: peers.map((peer) => ({
1129
+ systemId: peer.systemId,
1130
+ status: peer.status,
1131
+ connectedAt: peer.connectedAt,
1132
+ })),
1133
+ };
1134
+ }
1135
+ async handleFederationCapabilities(participantId, params) {
1136
+ if (!this.services.federationHandler) {
1137
+ throw RPCError.internalError("Federation not available");
1138
+ }
1139
+ const { systemId } = (params ?? {});
1140
+ if (!systemId) {
1141
+ throw RPCError.invalidParams("systemId is required");
1142
+ }
1143
+ const capabilities = this.services.federationHandler.getCapabilities(systemId);
1144
+ if (!capabilities) {
1145
+ throw RPCError.notFound("peer", systemId);
1146
+ }
1147
+ return { capabilities };
1148
+ }
1149
+ // ===========================================================================
1150
+ // Type Conversions
1151
+ // ===========================================================================
1152
+ toAgentInfo(agent) {
1153
+ return {
1154
+ id: agent.id,
1155
+ name: agent.name,
1156
+ role: agent.role,
1157
+ state: agent.state,
1158
+ parent: agent.parent,
1159
+ scopes: this.getAgentScopes(agent.id),
1160
+ metadata: agent.metadata,
1161
+ createdAt: agent.createdAt,
1162
+ // All macro-agent agents support ACP (they're Claude Code sessions)
1163
+ capabilities: {
1164
+ protocols: ["acp"],
1165
+ acp: {
1166
+ features: ["streaming"],
1167
+ },
1168
+ },
1169
+ };
1170
+ }
1171
+ toScopeInfo(scope) {
1172
+ return {
1173
+ id: scope.id,
1174
+ name: scope.name,
1175
+ members: Array.from(scope.members),
1176
+ createdAt: scope.createdAt,
1177
+ metadata: scope.metadata,
1178
+ };
1179
+ }
1180
+ getAgentScopes(agentId) {
1181
+ const result = [];
1182
+ for (const scope of this.scopes.values()) {
1183
+ if (scope.members.has(agentId)) {
1184
+ result.push(scope.id);
1185
+ }
1186
+ }
1187
+ return result;
1188
+ }
1189
+ }
1190
+ // =============================================================================
1191
+ // Factory
1192
+ // =============================================================================
1193
+ /**
1194
+ * Create a MAPAdapter instance.
1195
+ */
1196
+ export function createMAPAdapter(config, services) {
1197
+ return new MAPAdapterImpl(config, services);
1198
+ }
1199
+ //# sourceMappingURL=map-adapter.js.map