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,1024 @@
1
+ /**
2
+ * ACP-over-MAP Handler
3
+ *
4
+ * Handles ACP protocol messages that arrive via MAP instead of direct WebSocket.
5
+ * Provides a bridge between MAP messaging and the MacroAgent ACP implementation.
6
+ *
7
+ * This allows external clients to communicate with macro-agent agents using
8
+ * ACP protocol semantics over the MAP transport layer.
9
+ */
10
+ import { SessionMapper } from "../../acp/session-mapper.js";
11
+ // ─────────────────────────────────────────────────────────────────
12
+ // Helpers
13
+ // ─────────────────────────────────────────────────────────────────
14
+ /** Extract a plain-text output string from `rawOutput` (string | ContentBlock[] | undefined). */
15
+ function extractToolOutput(rawOutput) {
16
+ if (typeof rawOutput === "string")
17
+ return rawOutput;
18
+ if (Array.isArray(rawOutput)) {
19
+ return (rawOutput
20
+ .filter((item) => item.type === "text" && typeof item.text === "string")
21
+ .map((item) => item.text)
22
+ .join("\n") || undefined);
23
+ }
24
+ return undefined;
25
+ }
26
+ // ─────────────────────────────────────────────────────────────────
27
+ // ACP-over-MAP Handler
28
+ // ─────────────────────────────────────────────────────────────────
29
+ export class ACPOverMAPHandler {
30
+ agentManager;
31
+ eventStore;
32
+ taskManager;
33
+ defaultCwd;
34
+ onAgentRegistered;
35
+ /** Stream states by streamId */
36
+ streams = new Map();
37
+ /** Session mapper for ACP session -> Agent mapping */
38
+ sessionMapper;
39
+ constructor(config) {
40
+ this.agentManager = config.agentManager;
41
+ this.eventStore = config.eventStore;
42
+ this.taskManager = config.taskManager;
43
+ this.defaultCwd = config.defaultCwd ?? process.cwd();
44
+ this.onAgentRegistered = config.onAgentRegistered;
45
+ // Initialize session mapper with EventStore for persistence and recovery
46
+ this.sessionMapper = new SessionMapper(this.eventStore);
47
+ const recovered = this.sessionMapper.recoverFromStore();
48
+ if (recovered > 0) {
49
+ console.error(`[ACP-over-MAP] Recovered ${recovered} session(s) from store`);
50
+ }
51
+ }
52
+ /**
53
+ * Notify subscribers that a new agent was registered.
54
+ * Looks up agent details from EventStore and calls the onAgentRegistered callback.
55
+ */
56
+ notifyAgentRegistered(agentId) {
57
+ if (!this.onAgentRegistered)
58
+ return;
59
+ const agent = this.eventStore.getAgent(agentId);
60
+ this.onAgentRegistered({
61
+ id: agentId,
62
+ name: agent?.name,
63
+ role: agent?.role,
64
+ parent: agent?.parent ?? undefined,
65
+ metadata: agent?.metadata,
66
+ });
67
+ }
68
+ /**
69
+ * Abort all active streams targeting a specific agent.
70
+ * Called when an agent is stopped via MAP protocol to interrupt
71
+ * any in-progress ACP prompt streaming.
72
+ */
73
+ abortStreamsForAgent(agentId) {
74
+ for (const [streamId, streamState] of this.streams) {
75
+ if (streamState.agentId === agentId) {
76
+ console.error(`[ACP-over-MAP] Aborting stream ${streamId} for stopped agent ${agentId}`);
77
+ streamState.abortController.abort();
78
+ }
79
+ }
80
+ }
81
+ /**
82
+ * Process an ACP request and return the response.
83
+ * @param targetAgentId - Target agent for the request
84
+ * @param envelope - ACP request envelope
85
+ * @param emitNotification - Optional callback to emit notifications (for streaming updates)
86
+ */
87
+ async processRequest(targetAgentId, envelope, emitNotification) {
88
+ const { acp, acpContext } = envelope;
89
+ const { streamId, sessionId } = acpContext;
90
+ const method = acp.method;
91
+ console.error(`[ACP-over-MAP] Processing - streamId=${streamId} method=${method}`);
92
+ // Get or create stream state
93
+ let streamState = this.streams.get(streamId);
94
+ if (!streamState) {
95
+ streamState = {
96
+ initialized: false,
97
+ streamId,
98
+ abortController: new AbortController(),
99
+ };
100
+ this.streams.set(streamId, streamState);
101
+ }
102
+ let result;
103
+ let error;
104
+ try {
105
+ switch (method) {
106
+ case "initialize":
107
+ result = await this.handleInitialize(streamState, acp.params);
108
+ break;
109
+ case "session/new":
110
+ result = await this.handleNewSession(streamState, acp.params, emitNotification);
111
+ break;
112
+ case "session/load":
113
+ result = await this.handleLoadSession(streamState, acp.params, emitNotification);
114
+ break;
115
+ case "authenticate":
116
+ result = await this.handleAuthenticate(acp.params);
117
+ break;
118
+ case "session/prompt":
119
+ result = await this.handlePrompt(streamState, acp.params, sessionId, emitNotification);
120
+ break;
121
+ case "session/cancel":
122
+ result = await this.handleCancel(streamState, acp.params, sessionId);
123
+ break;
124
+ default:
125
+ // Check for extension methods
126
+ if (method?.startsWith("_")) {
127
+ result = await this.handleExtension(streamState, method, acp.params);
128
+ }
129
+ else {
130
+ throw new Error(`Unknown ACP method: ${method}`);
131
+ }
132
+ }
133
+ }
134
+ catch (e) {
135
+ console.error(`[ACP-over-MAP] Error processing ${method}:`, e);
136
+ error = {
137
+ code: -32603,
138
+ message: e instanceof Error ? e.message : String(e),
139
+ };
140
+ }
141
+ // Build response envelope
142
+ return {
143
+ acp: {
144
+ jsonrpc: "2.0",
145
+ id: acp.id,
146
+ ...(error ? { error } : { result }),
147
+ },
148
+ acpContext: {
149
+ streamId,
150
+ sessionId: streamState.sessionId,
151
+ direction: "agent-to-client",
152
+ },
153
+ };
154
+ }
155
+ // ─────────────────────────────────────────────────────────────────
156
+ // Core ACP Methods
157
+ // ─────────────────────────────────────────────────────────────────
158
+ async handleInitialize(streamState, params) {
159
+ if (streamState.initialized) {
160
+ throw new Error("Stream already initialized");
161
+ }
162
+ streamState.initialized = true;
163
+ // Extract permission mode from _meta.macroConfig if provided
164
+ const meta = params?._meta;
165
+ const macroConfig = meta?.macroConfig;
166
+ const defaultSubAgentConfig = macroConfig?.defaultSubAgentConfig;
167
+ if (defaultSubAgentConfig?.permissionMode) {
168
+ streamState.permissionMode =
169
+ defaultSubAgentConfig.permissionMode;
170
+ }
171
+ return {
172
+ protocolVersion: 1,
173
+ agentCapabilities: {
174
+ loadSession: true,
175
+ _meta: {
176
+ extensions: [
177
+ "_macro/spawnAgent",
178
+ "_macro/getHierarchy",
179
+ "_macro/getTask",
180
+ ],
181
+ agentType: "macro-agent",
182
+ transport: "acp-over-map",
183
+ },
184
+ },
185
+ };
186
+ }
187
+ async handleNewSession(streamState, params, emitNotification) {
188
+ if (!streamState.initialized) {
189
+ throw new Error("Must call initialize before newSession");
190
+ }
191
+ const { cwd, mcpServers } = params ?? {};
192
+ const workingDir = cwd ?? this.defaultCwd;
193
+ // Spawn a new head manager for this session
194
+ const spawned = await this.agentManager.getOrCreateHeadManager({
195
+ cwd: workingDir,
196
+ forceNew: true,
197
+ permissionMode: streamState.permissionMode,
198
+ });
199
+ const sessionId = spawned.session_id;
200
+ streamState.sessionId = sessionId;
201
+ streamState.agentId = spawned.id;
202
+ // Create session mapping
203
+ this.sessionMapper.createMapping(sessionId, spawned.id);
204
+ console.error(`[ACP-over-MAP] Created session ${sessionId} -> agent ${spawned.id}`);
205
+ // Notify subscribers that a new agent was registered
206
+ this.notifyAgentRegistered(spawned.id);
207
+ // Emit session_info_update so client has title/timestamps
208
+ this.emitSessionInfo(streamState, sessionId, emitNotification);
209
+ return { sessionId };
210
+ }
211
+ async handleLoadSession(streamState, params, emitNotification) {
212
+ if (!streamState.initialized) {
213
+ throw new Error("Must call initialize before loadSession");
214
+ }
215
+ const { sessionId: rawSessionId, cwd, _meta, } = params ?? {};
216
+ if (!rawSessionId) {
217
+ throw new Error("sessionId required");
218
+ }
219
+ // Extension: If _meta.agentId provided, look up session from agent record
220
+ let sessionId = rawSessionId;
221
+ const metaAgentId = _meta?.agentId;
222
+ if (metaAgentId) {
223
+ const agent = this.eventStore.getAgent(metaAgentId);
224
+ if (!agent) {
225
+ throw new Error(`Agent not found: ${metaAgentId}`);
226
+ }
227
+ sessionId = agent.session_id;
228
+ console.error(`[ACP-over-MAP] loadSession: Resolved agentId ${metaAgentId} to session ${sessionId}`);
229
+ // Handle the agent directly — works for both head managers and sub-agents.
230
+ // The previous code only searched listHeadManagers(), so sub-agents
231
+ // were never found and a new head manager was created instead.
232
+ if (this.agentManager.hasActiveSession(metaAgentId)) {
233
+ console.error(`[ACP-over-MAP] loadSession: Reusing active session for agent ${metaAgentId}`);
234
+ }
235
+ else {
236
+ // Agent exists but no active session — resume it
237
+ console.error(`[ACP-over-MAP] loadSession: Resuming agent ${metaAgentId}`);
238
+ try {
239
+ await this.agentManager.resume(metaAgentId, streamState.permissionMode);
240
+ }
241
+ catch (resumeErr) {
242
+ // ALREADY_RUNNING can happen in a race — safe to ignore
243
+ const code = resumeErr.code;
244
+ if (code !== "ALREADY_RUNNING") {
245
+ throw resumeErr;
246
+ }
247
+ console.error(`[ACP-over-MAP] loadSession: Agent ${metaAgentId} already running (race), continuing`);
248
+ }
249
+ }
250
+ streamState.sessionId = sessionId;
251
+ streamState.agentId = metaAgentId;
252
+ this.sessionMapper.createMapping(sessionId, metaAgentId);
253
+ this.emitSessionInfo(streamState, sessionId, emitNotification);
254
+ return { sessionId };
255
+ }
256
+ const workingDir = cwd ?? this.defaultCwd;
257
+ // Try to find an existing head manager with this session ID
258
+ const headManagers = this.agentManager.listHeadManagers();
259
+ const existing = headManagers.find((hm) => hm.session_id === sessionId);
260
+ if (existing) {
261
+ // Check if the agent already has an active session
262
+ if (this.agentManager.hasActiveSession(existing.id)) {
263
+ console.error(`[ACP-over-MAP] loadSession: Reusing existing session for agent ${existing.id}`);
264
+ streamState.sessionId = sessionId;
265
+ streamState.agentId = existing.id;
266
+ this.sessionMapper.createMapping(sessionId, existing.id);
267
+ this.emitSessionInfo(streamState, sessionId, emitNotification);
268
+ return { sessionId };
269
+ }
270
+ // Agent exists but no active session - resume it
271
+ console.error(`[ACP-over-MAP] loadSession: Resuming stopped agent ${existing.id}`);
272
+ const spawned = await this.agentManager.resume(existing.id, streamState.permissionMode);
273
+ streamState.sessionId = sessionId;
274
+ streamState.agentId = spawned.id;
275
+ this.sessionMapper.createMapping(sessionId, spawned.id);
276
+ this.emitSessionInfo(streamState, sessionId, emitNotification);
277
+ return { sessionId };
278
+ }
279
+ // No existing agent found - create new with the specified session ID
280
+ console.error(`[ACP-over-MAP] loadSession: Creating new agent for session ${sessionId}`);
281
+ const spawned = await this.agentManager.getOrCreateHeadManager({
282
+ cwd: workingDir,
283
+ sessionId,
284
+ permissionMode: streamState.permissionMode,
285
+ });
286
+ streamState.sessionId = sessionId;
287
+ streamState.agentId = spawned.id;
288
+ this.sessionMapper.createMapping(sessionId, spawned.id);
289
+ // Notify subscribers that a new agent was registered
290
+ this.notifyAgentRegistered(spawned.id);
291
+ this.emitSessionInfo(streamState, sessionId, emitNotification);
292
+ return { sessionId };
293
+ }
294
+ async handleAuthenticate(_params) {
295
+ // No authentication required
296
+ return {};
297
+ }
298
+ async handlePrompt(streamState, params, sessionIdFromContext, emitNotification) {
299
+ const { prompt, sessionId: paramSessionId } = params ?? {};
300
+ // Prefer the server's resolved session ID (set during loadSession) over the
301
+ // client's acpContext.sessionId which may be stale (e.g., "_resolve_" sentinel)
302
+ const sessionId = streamState.sessionId ?? paramSessionId ?? sessionIdFromContext;
303
+ if (!sessionId) {
304
+ throw new Error("No session - call newSession or loadSession first");
305
+ }
306
+ // Get the mapped agent
307
+ const agentId = this.sessionMapper.getAgentId(sessionId);
308
+ if (!agentId) {
309
+ throw new Error(`No agent mapped for session ${sessionId}`);
310
+ }
311
+ // Reset abort controller if needed
312
+ if (streamState.abortController.signal.aborted) {
313
+ streamState.abortController = new AbortController();
314
+ }
315
+ // Extract message content
316
+ let messageContent;
317
+ if (prompt && Array.isArray(prompt)) {
318
+ messageContent = prompt
319
+ .filter((block) => block.type === "text" && block.text)
320
+ .map((block) => block.text)
321
+ .join("\n");
322
+ }
323
+ else if (params?.messages) {
324
+ // Handle messages format (role/content array)
325
+ const messages = params.messages;
326
+ messageContent = messages.map((m) => m.content).join("\n");
327
+ }
328
+ else {
329
+ messageContent = JSON.stringify(params);
330
+ }
331
+ console.error(`[ACP-over-MAP] Prompting agent ${agentId} with: ${messageContent.slice(0, 100)}...`);
332
+ // Mark session as processing
333
+ this.sessionMapper.setProcessing(sessionId, true);
334
+ // Helper to emit session update notifications
335
+ const emitSessionUpdate = (update) => {
336
+ if (!emitNotification)
337
+ return;
338
+ const notification = {
339
+ acp: {
340
+ jsonrpc: "2.0",
341
+ method: "session/update",
342
+ params: {
343
+ sessionId: sessionId,
344
+ update: update,
345
+ },
346
+ },
347
+ acpContext: {
348
+ streamId: streamState.streamId,
349
+ sessionId: sessionId,
350
+ direction: "agent-to-client",
351
+ },
352
+ };
353
+ emitNotification(notification);
354
+ };
355
+ // Ensure conversation exists in EventStore for history persistence
356
+ this.ensureConversation(sessionId, agentId);
357
+ // Accumulate response content for history recording
358
+ const buffer = {
359
+ parts: [],
360
+ };
361
+ // Track latest plan for persistence
362
+ let latestPlan = null;
363
+ // Track tool info from initial tool_call events (title, name, input)
364
+ // so we can merge them when tool_call_update arrives with status "completed"
365
+ const toolInfoCache = new Map();
366
+ try {
367
+ // Stream responses from the agent
368
+ let updateCount = 0;
369
+ for await (const update of this.agentManager.prompt(agentId, messageContent)) {
370
+ // Check for cancellation
371
+ if (streamState.abortController.signal.aborted) {
372
+ return { stopReason: "cancelled" };
373
+ }
374
+ // Accumulate content for history persistence (preserving text/tool interleaving order)
375
+ const u = update;
376
+ const updateType = u.sessionUpdate ?? u.type;
377
+ // Annotate permission_request updates with agentId so clients can respond
378
+ if (updateType === "permission_request") {
379
+ u._agentId = agentId;
380
+ }
381
+ if (updateType === "agent_message_chunk") {
382
+ const content = u.content;
383
+ if (content?.text) {
384
+ const last = buffer.parts[buffer.parts.length - 1];
385
+ if (last && last.type === "text") {
386
+ last.text += content.text;
387
+ }
388
+ else {
389
+ buffer.parts.push({ type: "text", text: content.text });
390
+ }
391
+ }
392
+ }
393
+ else if (updateType === "plan") {
394
+ const entries = u.entries;
395
+ if (entries) {
396
+ latestPlan = entries;
397
+ }
398
+ }
399
+ else if (updateType === "tool_call" ||
400
+ updateType === "tool_call_update") {
401
+ const toolCallId = u.toolCallId;
402
+ const status = u.status;
403
+ const meta = u._meta;
404
+ // Cache tool info from initial tool_call events
405
+ if (updateType === "tool_call" && toolCallId) {
406
+ toolInfoCache.set(toolCallId, {
407
+ title: u.title,
408
+ name: meta?.claudeCode?.toolName,
409
+ input: u.rawInput,
410
+ });
411
+ }
412
+ if (status === "completed" || status === "failed") {
413
+ // Merge cached info for tool_call_update events that lack title/input
414
+ const cached = toolCallId
415
+ ? toolInfoCache.get(toolCallId)
416
+ : undefined;
417
+ buffer.parts.push({
418
+ type: "tool",
419
+ toolCallId,
420
+ title: u.title ?? cached?.title,
421
+ name: meta?.claudeCode?.toolName ?? cached?.name,
422
+ status: u.status,
423
+ input: u.rawInput ?? cached?.input,
424
+ output: extractToolOutput(u.rawOutput),
425
+ });
426
+ }
427
+ }
428
+ // Stream the update back to the client
429
+ emitSessionUpdate(update);
430
+ updateCount++;
431
+ }
432
+ // Check if the loop ended because of cancellation
433
+ const wasCancelled = streamState.abortController.signal.aborted;
434
+ const stopReason = wasCancelled ? "cancelled" : "end_turn";
435
+ console.error(`[ACP-over-MAP] Prompt completed for agent ${agentId}, ${updateCount} updates, stopReason=${stopReason}`);
436
+ // Persist conversation turns for history
437
+ this.recordPromptTurns(sessionId, agentId, messageContent, buffer);
438
+ // Persist latest plan in EventStore for history loading across restarts
439
+ if (latestPlan) {
440
+ this.eventStore.updateAgentPlan(agentId, latestPlan);
441
+ }
442
+ // Emit updated session info after prompt completes
443
+ this.emitSessionInfo(streamState, sessionId, emitNotification);
444
+ return { stopReason };
445
+ }
446
+ catch (error) {
447
+ // Extract a meaningful error message — errors from the ACP SDK may be
448
+ // plain objects ({code, message}) rather than Error instances.
449
+ let errorMessage;
450
+ if (error instanceof Error) {
451
+ errorMessage = error.message;
452
+ }
453
+ else if (typeof error === "object" &&
454
+ error !== null &&
455
+ "message" in error &&
456
+ typeof error.message === "string") {
457
+ errorMessage = error.message;
458
+ }
459
+ else {
460
+ try {
461
+ errorMessage = JSON.stringify(error);
462
+ }
463
+ catch {
464
+ errorMessage = String(error);
465
+ }
466
+ }
467
+ console.error(`[ACP-over-MAP] Prompt error for agent ${agentId}:`, errorMessage);
468
+ return {
469
+ stopReason: "end_turn",
470
+ error: errorMessage,
471
+ };
472
+ }
473
+ finally {
474
+ this.sessionMapper.setProcessing(sessionId, false);
475
+ }
476
+ }
477
+ async handleCancel(streamState, params, sessionIdFromContext) {
478
+ const { sessionId: paramSessionId } = params ?? {};
479
+ // Prefer server's resolved session ID over client's potentially stale one
480
+ const sessionId = streamState.sessionId ?? paramSessionId ?? sessionIdFromContext;
481
+ const agentId = sessionId
482
+ ? this.sessionMapper.getAgentId(sessionId)
483
+ : streamState.agentId;
484
+ console.error(`[ACP-over-MAP] Cancel - streamId=${streamState.streamId} sessionId=${sessionId} agentId=${agentId}`);
485
+ // 1. Abort the for-await loop in handlePrompt so it stops yielding updates
486
+ streamState.abortController.abort();
487
+ // 2. Cancel the agent's active session (sends session/cancel to the subprocess)
488
+ // This does NOT terminate the agent — it only interrupts the current prompt.
489
+ // The subprocess stays alive and can accept new prompts.
490
+ // Use map/agents/stop for full agent termination.
491
+ if (agentId) {
492
+ const session = this.agentManager.getSession(agentId);
493
+ if (session) {
494
+ try {
495
+ await session.cancel();
496
+ console.error(`[ACP-over-MAP] Session cancelled for agent ${agentId}`);
497
+ }
498
+ catch (error) {
499
+ console.warn(`[ACP-over-MAP] session.cancel() failed for ${agentId}:`, error);
500
+ }
501
+ }
502
+ }
503
+ return { cancelled: true };
504
+ }
505
+ // ─────────────────────────────────────────────────────────────────
506
+ // Extension Methods
507
+ // ─────────────────────────────────────────────────────────────────
508
+ async handleExtension(streamState, method, params) {
509
+ const methodParams = params ?? {};
510
+ switch (method) {
511
+ case "_macro/spawnAgent": {
512
+ const { task, cwd, topics, config, parentId } = methodParams;
513
+ // Use the stream's agent as parent, or find head manager
514
+ let parent = streamState.agentId;
515
+ if (parentId) {
516
+ parent = parentId;
517
+ }
518
+ else if (!parent) {
519
+ const headManagers = this.agentManager.listHeadManagers();
520
+ if (headManagers.length > 0) {
521
+ parent = headManagers[0].id;
522
+ }
523
+ }
524
+ if (!parent) {
525
+ throw new Error("No parent agent available for spawning");
526
+ }
527
+ const spawned = await this.agentManager.spawn({
528
+ parent,
529
+ task,
530
+ cwd: cwd ?? this.defaultCwd,
531
+ role: "worker",
532
+ topics,
533
+ config,
534
+ });
535
+ // Notify subscribers that a new agent was registered
536
+ this.notifyAgentRegistered(spawned.id);
537
+ return {
538
+ agentId: spawned.id,
539
+ sessionId: spawned.session_id,
540
+ };
541
+ }
542
+ case "_macro/getHierarchy": {
543
+ const agents = this.agentManager.list();
544
+ return {
545
+ agents: agents.map((a) => ({
546
+ id: a.id,
547
+ role: a.role,
548
+ state: a.state,
549
+ parent: a.parent,
550
+ createdAt: a.created_at,
551
+ })),
552
+ };
553
+ }
554
+ case "_macro/getTask": {
555
+ const { taskId } = methodParams;
556
+ const task = await this.taskManager.get(taskId);
557
+ return { task };
558
+ }
559
+ case "_macro/resume": {
560
+ const { agentId } = methodParams;
561
+ if (!agentId) {
562
+ throw new Error("agentId is required");
563
+ }
564
+ const agent = this.eventStore.getAgent(agentId);
565
+ if (!agent) {
566
+ throw new Error(`Agent not found: ${agentId}`);
567
+ }
568
+ // If the agent is already running, return its current state
569
+ // instead of throwing. The caller likely just wants to ensure
570
+ // the agent is active, which it already is.
571
+ if (agent.state !== "stopped" && agent.state !== "failed") {
572
+ console.error(`[ACP-over-MAP] _macro/resume: Agent ${agentId} is already ${agent.state}, returning current state`);
573
+ return {
574
+ success: true,
575
+ agentId: agent.id,
576
+ sessionId: agent.session_id,
577
+ alreadyRunning: true,
578
+ };
579
+ }
580
+ const spawned = await this.agentManager.resume(agentId);
581
+ return {
582
+ success: true,
583
+ agentId: spawned.id,
584
+ sessionId: spawned.session_id,
585
+ };
586
+ }
587
+ case "_macro/getHistory": {
588
+ const { sessionId, agentId: historyAgentId, limit, } = methodParams;
589
+ // Resolve conversationId: prefer agentId lookup (resolves to the
590
+ // original session_id where turns were recorded), fall back to
591
+ // explicit sessionId. This allows history to survive across server
592
+ // restarts even when the ACP session ID changes (e.g., resume()
593
+ // fails → TUI creates new session with different ID).
594
+ const agent = historyAgentId
595
+ ? this.eventStore.getAgent(historyAgentId)
596
+ : undefined;
597
+ let conversationId;
598
+ if (agent) {
599
+ conversationId = agent.session_id;
600
+ }
601
+ if (!conversationId) {
602
+ conversationId = sessionId;
603
+ }
604
+ if (!conversationId) {
605
+ return { turns: [] };
606
+ }
607
+ // For forked agents, include the source agent's conversation history
608
+ // (pre-fork turns) followed by this agent's own turns.
609
+ // Only include source turns from before the fork to avoid leaking
610
+ // turns that the source recorded after the fork point.
611
+ const sourceAgentId = agent?.metadata?.fork_of;
612
+ let turns;
613
+ if (sourceAgentId) {
614
+ const sourceAgent = this.eventStore.getAgent(sourceAgentId);
615
+ const sourceConversationId = sourceAgent?.session_id;
616
+ const forkTimestamp = agent.created_at;
617
+ const sourceTurns = sourceConversationId
618
+ ? this.eventStore
619
+ .listTurns({
620
+ conversationId: sourceConversationId,
621
+ order: "asc",
622
+ limit: limit ?? 200,
623
+ })
624
+ .filter((t) => t.timestamp <= forkTimestamp)
625
+ : [];
626
+ const ownTurns = this.eventStore.listTurns({
627
+ conversationId,
628
+ order: "asc",
629
+ limit: limit ?? 200,
630
+ });
631
+ turns = [...sourceTurns, ...ownTurns];
632
+ }
633
+ else {
634
+ turns = this.eventStore.listTurns({
635
+ conversationId,
636
+ order: "asc",
637
+ limit: limit ?? 200,
638
+ });
639
+ }
640
+ const plan = agent?.plan ?? [];
641
+ return {
642
+ turns: turns.map((turn) => ({
643
+ role: turn.contentType === "user_prompt"
644
+ ? "user"
645
+ : "assistant",
646
+ timestamp: turn.timestamp,
647
+ content: turn.content,
648
+ })),
649
+ plan,
650
+ cwd: agent?.cwd ?? null,
651
+ };
652
+ }
653
+ case "_macro/respondToPermission": {
654
+ const { agentId: targetAgentId, requestId, optionId, } = methodParams;
655
+ if (!targetAgentId || !requestId || !optionId) {
656
+ throw new Error("agentId, requestId, and optionId are required");
657
+ }
658
+ const success = this.agentManager.respondToPermission(targetAgentId, requestId, optionId);
659
+ return { success };
660
+ }
661
+ case "_macro/cancelPermission": {
662
+ const { agentId: targetAgentId, requestId } = methodParams;
663
+ if (!targetAgentId || !requestId) {
664
+ throw new Error("agentId and requestId are required");
665
+ }
666
+ const success = this.agentManager.cancelPermission(targetAgentId, requestId);
667
+ return { success };
668
+ }
669
+ case "_macro/setPermissionMode": {
670
+ const { agentId: targetAgentId, permissionMode } = methodParams;
671
+ if (!targetAgentId || !permissionMode) {
672
+ throw new Error("agentId and permissionMode are required");
673
+ }
674
+ const previousMode = this.agentManager.getPermissionMode(targetAgentId);
675
+ const success = this.agentManager.setPermissionMode(targetAgentId, permissionMode);
676
+ if (success) {
677
+ return { success: true, previousMode: previousMode ?? undefined };
678
+ }
679
+ return {
680
+ success: false,
681
+ error: `No active session found for agent ${targetAgentId}`,
682
+ };
683
+ }
684
+ case "_macro/forkAgent": {
685
+ const { agentId, name, prompt, cwd } = methodParams;
686
+ if (!agentId) {
687
+ throw new Error("agentId is required");
688
+ }
689
+ const sourceAgent = this.eventStore.getAgent(agentId);
690
+ if (!sourceAgent) {
691
+ throw new Error(`Agent not found: ${agentId}`);
692
+ }
693
+ const forked = await this.agentManager.forkAgent(agentId, {
694
+ name,
695
+ prompt,
696
+ cwd: cwd ?? sourceAgent.cwd ?? this.defaultCwd,
697
+ });
698
+ // Fire-and-forget initial prompt if provided
699
+ if (prompt) {
700
+ (async () => {
701
+ try {
702
+ for await (const _update of this.agentManager.prompt(forked.id, prompt)) {
703
+ // drain iterator
704
+ }
705
+ }
706
+ catch {
707
+ // best-effort
708
+ }
709
+ })();
710
+ }
711
+ return {
712
+ newAgentId: forked.id,
713
+ newSessionId: forked.session_id,
714
+ originalAgentId: agentId,
715
+ providerSessionId: forked.session?.id,
716
+ };
717
+ }
718
+ case "_macro/agents/update": {
719
+ const { agentId, name, plan, metadata } = methodParams;
720
+ if (!agentId) {
721
+ throw new Error("agentId is required");
722
+ }
723
+ if (name === undefined &&
724
+ plan === undefined &&
725
+ metadata === undefined) {
726
+ throw new Error("At least one field to update is required (name, plan, or metadata)");
727
+ }
728
+ if (name !== undefined && !name.trim()) {
729
+ throw new Error("name must not be empty");
730
+ }
731
+ const agent = this.eventStore.getAgent(agentId);
732
+ if (!agent) {
733
+ throw new Error(`Agent not found: ${agentId}`);
734
+ }
735
+ const updates = {};
736
+ const updatedFields = [];
737
+ if (name !== undefined) {
738
+ updates.name = name.trim();
739
+ updatedFields.push("name");
740
+ }
741
+ if (plan !== undefined) {
742
+ updates.plan = plan;
743
+ updatedFields.push("plan");
744
+ }
745
+ if (metadata !== undefined) {
746
+ updates.metadata = metadata;
747
+ updatedFields.push("metadata");
748
+ }
749
+ this.eventStore.updateAgentMetadata(agentId, updates);
750
+ return {
751
+ success: true,
752
+ agentId,
753
+ updated: updatedFields,
754
+ };
755
+ }
756
+ case "_macro/getModels": {
757
+ const { sessionId } = methodParams;
758
+ const agentId = this.sessionMapper.getAgentId(sessionId);
759
+ if (!agentId) {
760
+ return { currentModelId: null, availableModels: [] };
761
+ }
762
+ const session = this.agentManager.getSession(agentId);
763
+ if (!session) {
764
+ return { currentModelId: null, availableModels: [] };
765
+ }
766
+ // Try clientHandler's model info store first (from _model_state_update notification)
767
+ const clientHandler = session.clientHandler;
768
+ const modelInfo = clientHandler?.getSessionModelInfo?.(session.id);
769
+ if (modelInfo && modelInfo.availableModels.length > 0) {
770
+ return modelInfo;
771
+ }
772
+ // Fall back to Session.models (from initial session response — just IDs)
773
+ if (session.models && session.models.length > 0) {
774
+ return {
775
+ currentModelId: session.models[0],
776
+ availableModels: session.models.map((id) => ({
777
+ modelId: id,
778
+ name: id,
779
+ })),
780
+ };
781
+ }
782
+ return { currentModelId: null, availableModels: [] };
783
+ }
784
+ case "_session/setCompaction": {
785
+ // Compaction is handled internally by the agent process.
786
+ // Accept the request as a no-op so the client doesn't get an error.
787
+ // TODO: Make sure this overrides if needed.
788
+ return { success: true };
789
+ }
790
+ // ── Task Management Extensions ────────────────────────────────
791
+ // These mirror the registered adapter extensions (_macro/task/*)
792
+ // so they're accessible via ACP-over-MAP streams.
793
+ case "_macro/task/list": {
794
+ const { filter } = (methodParams ?? {});
795
+ const taskFilter = filter
796
+ ? {
797
+ status: filter.status,
798
+ assigned_agent: filter.assignedAgent,
799
+ parent_task: filter.parentTask,
800
+ created_by: filter.createdBy,
801
+ rootTasksOnly: filter.rootTasksOnly,
802
+ }
803
+ : undefined;
804
+ const tasks = this.taskManager.list(taskFilter);
805
+ return {
806
+ tasks: tasks.map((t) => ({
807
+ id: t.id,
808
+ description: t.description,
809
+ status: t.status,
810
+ assignedAgent: t.assigned_agent,
811
+ createdBy: t.created_by,
812
+ createdAt: t.created_at,
813
+ parentTask: t.parent_task,
814
+ isBlocked: t.isBlocked,
815
+ externalId: t.external_id,
816
+ })),
817
+ };
818
+ }
819
+ case "_macro/task/get": {
820
+ const { taskId } = methodParams;
821
+ if (!taskId)
822
+ throw new Error("taskId is required");
823
+ const task = this.taskManager.get(taskId);
824
+ if (!task)
825
+ throw new Error(`Task not found: ${taskId}`);
826
+ return {
827
+ task: {
828
+ id: task.id,
829
+ description: task.description,
830
+ status: task.status,
831
+ assignedAgent: task.assigned_agent,
832
+ createdBy: task.created_by,
833
+ createdAt: task.created_at,
834
+ parentTask: task.parent_task,
835
+ isBlocked: task.isBlocked,
836
+ externalId: task.external_id,
837
+ },
838
+ };
839
+ }
840
+ case "_macro/task/create": {
841
+ const { description, parentTask, externalId } = methodParams;
842
+ if (!description)
843
+ throw new Error("description is required");
844
+ // Determine who is creating the task — use the stream's agent or a default
845
+ const createdBy = (streamState.agentId ?? "tui");
846
+ const task = this.taskManager.create({
847
+ description,
848
+ created_by: createdBy,
849
+ parent_task: parentTask,
850
+ });
851
+ return {
852
+ task: {
853
+ id: task.id,
854
+ description: task.description,
855
+ status: task.status,
856
+ assignedAgent: task.assigned_agent,
857
+ createdBy: task.created_by,
858
+ createdAt: task.created_at,
859
+ parentTask: task.parent_task,
860
+ },
861
+ };
862
+ }
863
+ case "_macro/task/assign": {
864
+ const { taskId, agentId, role } = methodParams;
865
+ if (!taskId)
866
+ throw new Error("taskId is required");
867
+ if (!agentId)
868
+ throw new Error("agentId is required");
869
+ this.taskManager.assign(taskId, agentId, role);
870
+ return { success: true };
871
+ }
872
+ case "_macro/task/complete": {
873
+ const { taskId, outputs } = methodParams;
874
+ if (!taskId)
875
+ throw new Error("taskId is required");
876
+ // Update status to completed
877
+ this.taskManager.updateStatus(taskId, "completed");
878
+ // If outputs provided, update task metadata
879
+ if (outputs) {
880
+ this.taskManager.update(taskId, { outputs });
881
+ }
882
+ return { success: true };
883
+ }
884
+ default:
885
+ throw new Error(`Unknown extension method: ${method}`);
886
+ }
887
+ }
888
+ // ─────────────────────────────────────────────────────────────────
889
+ // History Persistence
890
+ // ─────────────────────────────────────────────────────────────────
891
+ /**
892
+ * Ensure a conversation exists in the EventStore for a given session.
893
+ * This must be called before recording turns.
894
+ */
895
+ ensureConversation(acpSessionId, agentId) {
896
+ if (typeof this.eventStore.getConversation !== "function") {
897
+ return;
898
+ }
899
+ const existing = this.eventStore.getConversation(acpSessionId);
900
+ if (existing)
901
+ return;
902
+ try {
903
+ this.eventStore.emit({
904
+ type: "conversation",
905
+ source: { agent_id: agentId },
906
+ payload: {
907
+ action: "created",
908
+ conversation_id: acpSessionId,
909
+ conversation_type: "session",
910
+ subject: `ACP session ${acpSessionId}`,
911
+ },
912
+ });
913
+ }
914
+ catch (error) {
915
+ console.warn(`[ACP-over-MAP] Failed to create conversation for session ${acpSessionId}:`, error instanceof Error ? error.message : String(error));
916
+ }
917
+ }
918
+ /**
919
+ * Record user and assistant turns after a prompt completes.
920
+ * Mirrors MacroAgent.recordPromptTurns() for the ACP-over-MAP path.
921
+ */
922
+ recordPromptTurns(acpSessionId, agentId, userMessage, buffer) {
923
+ const now = Date.now();
924
+ try {
925
+ // Record user turn
926
+ if (userMessage) {
927
+ this.eventStore.emit({
928
+ type: "turn",
929
+ source: { agent_id: agentId },
930
+ payload: {
931
+ action: "recorded",
932
+ turn_id: `turn_user_${now}_${Math.random().toString(36).slice(2, 8)}`,
933
+ conversation_id: acpSessionId,
934
+ participant: "user",
935
+ timestamp: now,
936
+ content_type: "user_prompt",
937
+ content: userMessage,
938
+ source_type: "explicit",
939
+ },
940
+ });
941
+ }
942
+ // Record assistant turn with accumulated content (parts already in order)
943
+ const parts = buffer.parts;
944
+ if (parts.length > 0) {
945
+ this.eventStore.emit({
946
+ type: "turn",
947
+ source: { agent_id: agentId },
948
+ payload: {
949
+ action: "recorded",
950
+ turn_id: `turn_asst_${now}_${Math.random().toString(36).slice(2, 8)}`,
951
+ conversation_id: acpSessionId,
952
+ participant: agentId,
953
+ timestamp: now + 1,
954
+ content_type: "assistant_response",
955
+ content: { parts },
956
+ source_type: "explicit",
957
+ },
958
+ });
959
+ }
960
+ }
961
+ catch (error) {
962
+ console.warn(`[ACP-over-MAP] Failed to record turns for session ${acpSessionId}:`, error instanceof Error ? error.message : String(error));
963
+ }
964
+ }
965
+ // ─────────────────────────────────────────────────────────────────
966
+ // Session Info
967
+ // ─────────────────────────────────────────────────────────────────
968
+ /**
969
+ * Emit a session_info_update notification with title and timestamps.
970
+ * Uses agent task as title and session mapping timestamps.
971
+ */
972
+ emitSessionInfo(streamState, sessionId, emitNotification) {
973
+ if (!emitNotification)
974
+ return;
975
+ const mapping = this.sessionMapper.getMapping(sessionId);
976
+ const agentId = streamState.agentId;
977
+ const agent = agentId ? this.eventStore.getAgent(agentId) : null;
978
+ const title = agent?.task ?? null;
979
+ const updatedAt = new Date(mapping?.updatedAt ?? Date.now()).toISOString();
980
+ const notification = {
981
+ acp: {
982
+ jsonrpc: "2.0",
983
+ method: "session/update",
984
+ params: {
985
+ sessionId,
986
+ update: {
987
+ sessionUpdate: "session_info_update",
988
+ title,
989
+ updatedAt,
990
+ },
991
+ },
992
+ },
993
+ acpContext: {
994
+ streamId: streamState.streamId,
995
+ sessionId,
996
+ direction: "agent-to-client",
997
+ },
998
+ };
999
+ emitNotification(notification);
1000
+ }
1001
+ // ─────────────────────────────────────────────────────────────────
1002
+ // Cleanup
1003
+ // ─────────────────────────────────────────────────────────────────
1004
+ /**
1005
+ * Clean up a stream when it's closed.
1006
+ */
1007
+ closeStream(streamId) {
1008
+ const state = this.streams.get(streamId);
1009
+ if (state) {
1010
+ state.abortController.abort();
1011
+ this.streams.delete(streamId);
1012
+ }
1013
+ }
1014
+ /**
1015
+ * Clean up all streams.
1016
+ */
1017
+ closeAll() {
1018
+ for (const [streamId, state] of this.streams) {
1019
+ state.abortController.abort();
1020
+ }
1021
+ this.streams.clear();
1022
+ }
1023
+ }
1024
+ //# sourceMappingURL=acp-over-map.js.map