macro-agent 0.2.4 → 0.2.6

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