macro-agent 0.1.2 → 0.1.3

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 (1540) hide show
  1. package/.gitattributes +3 -0
  2. package/.opentasks/config.json +9 -0
  3. package/CLAUDE.md +432 -206
  4. package/README.md +129 -371
  5. package/dist/acp/index.d.ts +9 -51
  6. package/dist/acp/index.d.ts.map +1 -1
  7. package/dist/acp/index.js +5 -46
  8. package/dist/acp/index.js.map +1 -1
  9. package/dist/acp/macro-agent.d.ts +28 -255
  10. package/dist/acp/macro-agent.d.ts.map +1 -1
  11. package/dist/acp/macro-agent.js +593 -1231
  12. package/dist/acp/macro-agent.js.map +1 -1
  13. package/dist/acp/map-bridge.d.ts +62 -0
  14. package/dist/acp/map-bridge.d.ts.map +1 -0
  15. package/dist/acp/map-bridge.js +123 -0
  16. package/dist/acp/map-bridge.js.map +1 -0
  17. package/dist/acp/session-mapper.d.ts +29 -126
  18. package/dist/acp/session-mapper.d.ts.map +1 -1
  19. package/dist/acp/session-mapper.js +36 -234
  20. package/dist/acp/session-mapper.js.map +1 -1
  21. package/dist/acp/types.d.ts +24 -535
  22. package/dist/acp/types.d.ts.map +1 -1
  23. package/dist/acp/types.js +7 -7
  24. package/dist/acp/types.js.map +1 -1
  25. package/dist/acp/websocket-server.d.ts +16 -136
  26. package/dist/acp/websocket-server.d.ts.map +1 -1
  27. package/dist/acp/websocket-server.js +131 -371
  28. package/dist/acp/websocket-server.js.map +1 -1
  29. package/dist/adapters/federation.d.ts +76 -0
  30. package/dist/adapters/federation.d.ts.map +1 -0
  31. package/dist/adapters/federation.js +120 -0
  32. package/dist/adapters/federation.js.map +1 -0
  33. package/dist/adapters/inbox-adapter.d.ts +72 -0
  34. package/dist/adapters/inbox-adapter.d.ts.map +1 -0
  35. package/dist/adapters/inbox-adapter.js +196 -0
  36. package/dist/adapters/inbox-adapter.js.map +1 -0
  37. package/dist/adapters/inbox-client-adapter.d.ts +40 -0
  38. package/dist/adapters/inbox-client-adapter.d.ts.map +1 -0
  39. package/dist/adapters/inbox-client-adapter.js +135 -0
  40. package/dist/adapters/inbox-client-adapter.js.map +1 -0
  41. package/dist/adapters/index.d.ts +11 -0
  42. package/dist/adapters/index.d.ts.map +1 -0
  43. package/dist/adapters/index.js +10 -0
  44. package/dist/adapters/index.js.map +1 -0
  45. package/dist/adapters/opentasks-daemon.d.ts +32 -0
  46. package/dist/adapters/opentasks-daemon.d.ts.map +1 -0
  47. package/dist/adapters/opentasks-daemon.js +190 -0
  48. package/dist/adapters/opentasks-daemon.js.map +1 -0
  49. package/dist/adapters/tasks-adapter.d.ts +49 -0
  50. package/dist/adapters/tasks-adapter.d.ts.map +1 -0
  51. package/dist/adapters/tasks-adapter.js +209 -0
  52. package/dist/adapters/tasks-adapter.js.map +1 -0
  53. package/dist/adapters/types.d.ts +198 -0
  54. package/dist/adapters/types.d.ts.map +1 -0
  55. package/dist/adapters/types.js +13 -0
  56. package/dist/adapters/types.js.map +1 -0
  57. package/dist/agent/agent-manager-v2.d.ts +38 -0
  58. package/dist/agent/agent-manager-v2.d.ts.map +1 -0
  59. package/dist/agent/agent-manager-v2.js +1097 -0
  60. package/dist/agent/agent-manager-v2.js.map +1 -0
  61. package/dist/agent/agent-manager.d.ts +52 -42
  62. package/dist/agent/agent-manager.d.ts.map +1 -1
  63. package/dist/agent/agent-manager.js +11 -1318
  64. package/dist/agent/agent-manager.js.map +1 -1
  65. package/dist/agent/agent-store.d.ts +89 -0
  66. package/dist/agent/agent-store.d.ts.map +1 -0
  67. package/dist/agent/agent-store.js +279 -0
  68. package/dist/agent/agent-store.js.map +1 -0
  69. package/dist/api/index.d.ts +5 -3
  70. package/dist/api/index.d.ts.map +1 -1
  71. package/dist/api/index.js +4 -3
  72. package/dist/api/index.js.map +1 -1
  73. package/dist/api/server.d.ts +6 -127
  74. package/dist/api/server.d.ts.map +1 -1
  75. package/dist/api/server.js +235 -1574
  76. package/dist/api/server.js.map +1 -1
  77. package/dist/api/types.d.ts +20 -248
  78. package/dist/api/types.d.ts.map +1 -1
  79. package/dist/api/types.js +3 -1
  80. package/dist/api/types.js.map +1 -1
  81. package/dist/boot-v2.d.ts +165 -0
  82. package/dist/boot-v2.d.ts.map +1 -0
  83. package/dist/boot-v2.js +315 -0
  84. package/dist/boot-v2.js.map +1 -0
  85. package/dist/cli/acp.d.ts +6 -28
  86. package/dist/cli/acp.d.ts.map +1 -1
  87. package/dist/cli/acp.js +38 -442
  88. package/dist/cli/acp.js.map +1 -1
  89. package/dist/cli/index.d.ts +1 -2
  90. package/dist/cli/index.d.ts.map +1 -1
  91. package/dist/cli/index.js +65 -453
  92. package/dist/cli/index.js.map +1 -1
  93. package/dist/cli/mcp.d.ts +18 -8
  94. package/dist/cli/mcp.d.ts.map +1 -1
  95. package/dist/cli/mcp.js +231 -301
  96. package/dist/cli/mcp.js.map +1 -1
  97. package/dist/cognitive/analyst-role.d.ts +13 -0
  98. package/dist/cognitive/analyst-role.d.ts.map +1 -0
  99. package/dist/cognitive/analyst-role.js +48 -0
  100. package/dist/cognitive/analyst-role.js.map +1 -0
  101. package/dist/cognitive/index.d.ts +18 -0
  102. package/dist/cognitive/index.d.ts.map +1 -0
  103. package/dist/cognitive/index.js +21 -0
  104. package/dist/cognitive/index.js.map +1 -0
  105. package/dist/cognitive/macro-agent-backend.d.ts +40 -0
  106. package/dist/cognitive/macro-agent-backend.d.ts.map +1 -0
  107. package/dist/cognitive/macro-agent-backend.js +290 -0
  108. package/dist/cognitive/macro-agent-backend.js.map +1 -0
  109. package/dist/cognitive/session-converter.d.ts +30 -0
  110. package/dist/cognitive/session-converter.d.ts.map +1 -0
  111. package/dist/cognitive/session-converter.js +119 -0
  112. package/dist/cognitive/session-converter.js.map +1 -0
  113. package/dist/cognitive/types.d.ts +129 -0
  114. package/dist/cognitive/types.d.ts.map +1 -0
  115. package/dist/cognitive/types.js +12 -0
  116. package/dist/cognitive/types.js.map +1 -0
  117. package/dist/cognitive/workspace-handler.d.ts +46 -0
  118. package/dist/cognitive/workspace-handler.d.ts.map +1 -0
  119. package/dist/cognitive/workspace-handler.js +135 -0
  120. package/dist/cognitive/workspace-handler.js.map +1 -0
  121. package/dist/control/control-client.d.ts +63 -0
  122. package/dist/control/control-client.d.ts.map +1 -0
  123. package/dist/control/control-client.js +276 -0
  124. package/dist/control/control-client.js.map +1 -0
  125. package/dist/control/control-server.d.ts +46 -0
  126. package/dist/control/control-server.d.ts.map +1 -0
  127. package/dist/control/control-server.js +237 -0
  128. package/dist/control/control-server.js.map +1 -0
  129. package/dist/control/index.d.ts +9 -0
  130. package/dist/control/index.d.ts.map +1 -0
  131. package/dist/control/index.js +8 -0
  132. package/dist/control/index.js.map +1 -0
  133. package/dist/control/types.d.ts +64 -0
  134. package/dist/control/types.d.ts.map +1 -0
  135. package/dist/control/types.js +10 -0
  136. package/dist/control/types.js.map +1 -0
  137. package/dist/index.d.ts +14 -16
  138. package/dist/index.d.ts.map +1 -1
  139. package/dist/index.js +15 -34
  140. package/dist/index.js.map +1 -1
  141. package/dist/integrations/context-builder.d.ts +49 -0
  142. package/dist/integrations/context-builder.d.ts.map +1 -0
  143. package/dist/integrations/context-builder.js +160 -0
  144. package/dist/integrations/context-builder.js.map +1 -0
  145. package/dist/integrations/sessionlog.d.ts +58 -0
  146. package/dist/integrations/sessionlog.d.ts.map +1 -0
  147. package/dist/integrations/sessionlog.js +152 -0
  148. package/dist/integrations/sessionlog.js.map +1 -0
  149. package/dist/integrations/skilltree.d.ts +53 -0
  150. package/dist/integrations/skilltree.d.ts.map +1 -0
  151. package/dist/integrations/skilltree.js +140 -0
  152. package/dist/integrations/skilltree.js.map +1 -0
  153. package/dist/lifecycle/cleanup.d.ts +5 -14
  154. package/dist/lifecycle/cleanup.d.ts.map +1 -1
  155. package/dist/lifecycle/cleanup.js +4 -34
  156. package/dist/lifecycle/cleanup.js.map +1 -1
  157. package/dist/lifecycle/handlers-v2.d.ts +33 -0
  158. package/dist/lifecycle/handlers-v2.d.ts.map +1 -0
  159. package/dist/lifecycle/handlers-v2.js +319 -0
  160. package/dist/lifecycle/handlers-v2.js.map +1 -0
  161. package/dist/lifecycle/index.d.ts +3 -5
  162. package/dist/lifecycle/index.d.ts.map +1 -1
  163. package/dist/lifecycle/index.js +3 -12
  164. package/dist/lifecycle/index.js.map +1 -1
  165. package/dist/map/acp-bridge.d.ts +39 -0
  166. package/dist/map/acp-bridge.d.ts.map +1 -0
  167. package/dist/map/acp-bridge.js +180 -0
  168. package/dist/map/acp-bridge.js.map +1 -0
  169. package/dist/map/cc-swarm-hooks.d.ts +36 -0
  170. package/dist/map/cc-swarm-hooks.d.ts.map +1 -0
  171. package/dist/map/cc-swarm-hooks.js +218 -0
  172. package/dist/map/cc-swarm-hooks.js.map +1 -0
  173. package/dist/map/coordination-handler.d.ts +36 -0
  174. package/dist/map/coordination-handler.d.ts.map +1 -0
  175. package/dist/map/coordination-handler.js +166 -0
  176. package/dist/map/coordination-handler.js.map +1 -0
  177. package/dist/map/index.d.ts +5 -10
  178. package/dist/map/index.d.ts.map +1 -1
  179. package/dist/map/index.js +4 -13
  180. package/dist/map/index.js.map +1 -1
  181. package/dist/map/lifecycle-bridge.d.ts +34 -0
  182. package/dist/map/lifecycle-bridge.d.ts.map +1 -0
  183. package/dist/map/lifecycle-bridge.js +96 -0
  184. package/dist/map/lifecycle-bridge.js.map +1 -0
  185. package/dist/map/server.d.ts +38 -0
  186. package/dist/map/server.d.ts.map +1 -0
  187. package/dist/map/server.js +461 -0
  188. package/dist/map/server.js.map +1 -0
  189. package/dist/map/sidecar.d.ts +24 -0
  190. package/dist/map/sidecar.d.ts.map +1 -0
  191. package/dist/map/sidecar.js +263 -0
  192. package/dist/map/sidecar.js.map +1 -0
  193. package/dist/map/task-bridge.d.ts +22 -0
  194. package/dist/map/task-bridge.d.ts.map +1 -0
  195. package/dist/map/task-bridge.js +67 -0
  196. package/dist/map/task-bridge.js.map +1 -0
  197. package/dist/map/trajectory-reporter.d.ts +24 -0
  198. package/dist/map/trajectory-reporter.d.ts.map +1 -0
  199. package/dist/map/trajectory-reporter.js +86 -0
  200. package/dist/map/trajectory-reporter.js.map +1 -0
  201. package/dist/map/types.d.ts +162 -226
  202. package/dist/map/types.d.ts.map +1 -1
  203. package/dist/map/types.js +6 -165
  204. package/dist/map/types.js.map +1 -1
  205. package/dist/mcp/index.d.ts +2 -2
  206. package/dist/mcp/index.d.ts.map +1 -1
  207. package/dist/mcp/index.js +2 -2
  208. package/dist/mcp/index.js.map +1 -1
  209. package/dist/mcp/mcp-server-v2.d.ts +44 -0
  210. package/dist/mcp/mcp-server-v2.d.ts.map +1 -0
  211. package/dist/mcp/mcp-server-v2.js +376 -0
  212. package/dist/mcp/mcp-server-v2.js.map +1 -0
  213. package/dist/mcp/tools/done-v2.d.ts +57 -0
  214. package/dist/mcp/tools/done-v2.d.ts.map +1 -0
  215. package/dist/mcp/tools/done-v2.js +129 -0
  216. package/dist/mcp/tools/done-v2.js.map +1 -0
  217. package/dist/metrics/index.d.ts +7 -1
  218. package/dist/metrics/index.d.ts.map +1 -1
  219. package/dist/metrics/index.js +6 -1
  220. package/dist/metrics/index.js.map +1 -1
  221. package/dist/metrics/metrics.d.ts +9 -70
  222. package/dist/metrics/metrics.d.ts.map +1 -1
  223. package/dist/metrics/metrics.js +89 -145
  224. package/dist/metrics/metrics.js.map +1 -1
  225. package/dist/metrics/types.d.ts +44 -0
  226. package/dist/metrics/types.d.ts.map +1 -0
  227. package/dist/metrics/types.js +7 -0
  228. package/dist/metrics/types.js.map +1 -0
  229. package/dist/store/index.d.ts +3 -6
  230. package/dist/store/index.d.ts.map +1 -1
  231. package/dist/store/index.js +3 -21
  232. package/dist/store/index.js.map +1 -1
  233. package/dist/store/types/events.d.ts +3 -60
  234. package/dist/store/types/events.d.ts.map +1 -1
  235. package/dist/store/types/events.js +3 -46
  236. package/dist/store/types/events.js.map +1 -1
  237. package/dist/store/types/index.d.ts +0 -3
  238. package/dist/store/types/index.d.ts.map +1 -1
  239. package/dist/store/types/index.js +0 -3
  240. package/dist/store/types/index.js.map +1 -1
  241. package/dist/teams/index.d.ts +0 -2
  242. package/dist/teams/index.d.ts.map +1 -1
  243. package/dist/teams/index.js +0 -2
  244. package/dist/teams/index.js.map +1 -1
  245. package/dist/teams/team-manager-v2.d.ts +87 -0
  246. package/dist/teams/team-manager-v2.d.ts.map +1 -0
  247. package/dist/teams/team-manager-v2.js +203 -0
  248. package/dist/teams/team-manager-v2.js.map +1 -0
  249. package/dist/teams/team-runtime-v2.d.ts +149 -0
  250. package/dist/teams/team-runtime-v2.d.ts.map +1 -0
  251. package/dist/teams/team-runtime-v2.js +741 -0
  252. package/dist/teams/team-runtime-v2.js.map +1 -0
  253. package/dist/trigger/index.d.ts +2 -2
  254. package/dist/trigger/index.d.ts.map +1 -1
  255. package/dist/trigger/index.js +4 -4
  256. package/dist/trigger/index.js.map +1 -1
  257. package/dist/trigger/sources/cron/cron-service.d.ts +1 -1
  258. package/dist/trigger/sources/cron/cron-service.d.ts.map +1 -1
  259. package/dist/trigger/sources/webhook/webhook-handler.d.ts +1 -1
  260. package/dist/trigger/sources/webhook/webhook-handler.d.ts.map +1 -1
  261. package/dist/trigger/strategies/ai-router.d.ts +31 -0
  262. package/dist/trigger/strategies/ai-router.d.ts.map +1 -0
  263. package/dist/trigger/strategies/ai-router.js +132 -0
  264. package/dist/trigger/strategies/ai-router.js.map +1 -0
  265. package/dist/trigger/trigger-system-v2.d.ts +106 -0
  266. package/dist/trigger/trigger-system-v2.d.ts.map +1 -0
  267. package/dist/trigger/trigger-system-v2.js +347 -0
  268. package/dist/trigger/trigger-system-v2.js.map +1 -0
  269. package/dist/trigger/types.d.ts +8 -0
  270. package/dist/trigger/types.d.ts.map +1 -1
  271. package/dist/trigger/types.js.map +1 -1
  272. package/dist/workspace/strategies/optimistic.d.ts +13 -3
  273. package/dist/workspace/strategies/optimistic.d.ts.map +1 -1
  274. package/dist/workspace/strategies/optimistic.js +4 -4
  275. package/dist/workspace/strategies/optimistic.js.map +1 -1
  276. package/docs/design-subsystem-extraction.md +627 -0
  277. package/docs/lifecycle-events-design.md +111 -0
  278. package/docs/openhive-capability-summary.md +415 -0
  279. package/docs/openhive-integration.md +415 -0
  280. package/docs/roadmap-v2-gaps.md +216 -0
  281. package/package.json +26 -7
  282. package/src/__tests__/boot-v2.test.ts +196 -0
  283. package/src/__tests__/e2e/acp-over-map-live.e2e.test.ts +496 -0
  284. package/src/__tests__/e2e/acp-over-map.e2e.test.ts +365 -0
  285. package/src/__tests__/e2e/agent-lifecycle.e2e.test.ts +770 -0
  286. package/src/__tests__/e2e/cc-swarm-bridge.e2e.test.ts +253 -0
  287. package/src/__tests__/e2e/cognitive-workspace.e2e.test.ts +282 -0
  288. package/src/__tests__/e2e/done-scenarios.e2e.test.ts +322 -0
  289. package/src/__tests__/e2e/live-agent.e2e.test.ts +1330 -0
  290. package/src/__tests__/e2e/map-server.e2e.test.ts +128 -0
  291. package/src/__tests__/e2e/map-sidecar.e2e.test.ts +139 -0
  292. package/src/__tests__/e2e/opentasks-integration.e2e.test.ts +280 -0
  293. package/src/__tests__/e2e/pull-mode.e2e.test.ts +632 -0
  294. package/src/__tests__/e2e/resume-continue.e2e.test.ts +312 -0
  295. package/src/__tests__/e2e/swarmkit-integration.e2e.test.ts +562 -0
  296. package/src/__tests__/e2e/swarmkit-live.e2e.test.ts +1049 -0
  297. package/src/__tests__/e2e/trajectory-tracking.e2e.test.ts +258 -0
  298. package/src/__tests__/e2e/trigger-wake.e2e.test.ts +257 -0
  299. package/src/__tests__/e2e/workspace-lifecycle.e2e.test.ts +375 -0
  300. package/src/acp/__tests__/macro-agent.test.ts +234 -945
  301. package/src/acp/__tests__/session-mapper.test.ts +82 -155
  302. package/src/acp/__tests__/websocket-server.test.ts +121 -270
  303. package/src/acp/index.ts +18 -118
  304. package/src/acp/macro-agent.ts +692 -1752
  305. package/src/acp/map-bridge.ts +193 -0
  306. package/src/acp/session-mapper.ts +43 -276
  307. package/src/acp/types.ts +39 -767
  308. package/src/acp/websocket-server.ts +152 -588
  309. package/src/adapters/__tests__/federation.test.ts +256 -0
  310. package/src/adapters/__tests__/inbox-adapter.test.ts +316 -0
  311. package/src/adapters/__tests__/tasks-adapter.test.ts +269 -0
  312. package/src/adapters/federation.ts +185 -0
  313. package/src/adapters/inbox-adapter.ts +292 -0
  314. package/src/adapters/inbox-client-adapter.ts +173 -0
  315. package/src/adapters/index.ts +44 -0
  316. package/src/adapters/opentasks-daemon.ts +252 -0
  317. package/src/adapters/tasks-adapter.ts +327 -0
  318. package/src/adapters/types.ts +285 -0
  319. package/src/agent/__tests__/agent-manager-v2.test.ts +554 -0
  320. package/src/agent/__tests__/agent-store.test.ts +413 -0
  321. package/src/agent/agent-manager-v2.ts +1476 -0
  322. package/src/agent/agent-manager.ts +41 -1794
  323. package/src/agent/agent-store.ts +385 -0
  324. package/src/api/__tests__/server.test.ts +235 -1157
  325. package/src/api/index.ts +5 -3
  326. package/src/api/server.ts +270 -1989
  327. package/src/api/types.ts +25 -339
  328. package/src/boot-v2.ts +527 -0
  329. package/src/cli/acp.ts +38 -500
  330. package/src/cli/index.ts +68 -470
  331. package/src/cli/mcp.ts +260 -340
  332. package/src/cognitive/__tests__/macro-agent-backend.test.ts +478 -0
  333. package/src/cognitive/__tests__/session-converter.test.ts +423 -0
  334. package/src/cognitive/__tests__/workspace-handler.test.ts +221 -0
  335. package/src/cognitive/analyst-role.ts +59 -0
  336. package/src/cognitive/index.ts +49 -0
  337. package/src/cognitive/macro-agent-backend.ts +354 -0
  338. package/src/cognitive/session-converter.ts +151 -0
  339. package/src/cognitive/types.ts +163 -0
  340. package/src/cognitive/workspace-handler.ts +163 -0
  341. package/src/control/__tests__/control-resilience.test.ts +251 -0
  342. package/src/control/__tests__/control-socket.test.ts +240 -0
  343. package/src/control/control-client.ts +337 -0
  344. package/src/control/control-server.ts +298 -0
  345. package/src/control/index.ts +17 -0
  346. package/src/control/types.ts +95 -0
  347. package/src/index.ts +42 -224
  348. package/src/integrations/__tests__/context-builder.test.ts +218 -0
  349. package/src/integrations/__tests__/sessionlog.test.ts +498 -0
  350. package/src/integrations/__tests__/skilltree.test.ts +136 -0
  351. package/src/integrations/context-builder.ts +280 -0
  352. package/src/integrations/sessionlog.ts +194 -0
  353. package/src/integrations/skilltree.ts +183 -0
  354. package/src/lifecycle/__tests__/handlers-v2.test.ts +565 -0
  355. package/src/lifecycle/cleanup.ts +6 -46
  356. package/src/lifecycle/handlers-v2.ts +437 -0
  357. package/src/lifecycle/index.ts +2 -28
  358. package/src/map/__tests__/lifecycle-bridge.test.ts +223 -0
  359. package/src/map/__tests__/permission-forwarding.test.ts +143 -0
  360. package/src/map/__tests__/sidecar-integration.test.ts +190 -0
  361. package/src/map/__tests__/task-bridge.test.ts +153 -0
  362. package/src/map/__tests__/trajectory-reporter.test.ts +173 -0
  363. package/src/map/acp-bridge.ts +270 -0
  364. package/src/map/cc-swarm-hooks.ts +242 -0
  365. package/src/map/coordination-handler.ts +220 -0
  366. package/src/map/index.ts +13 -14
  367. package/src/map/lifecycle-bridge.ts +140 -0
  368. package/src/map/server.ts +527 -0
  369. package/src/map/sidecar.ts +312 -0
  370. package/src/map/task-bridge.ts +89 -0
  371. package/src/map/trajectory-reporter.ts +124 -0
  372. package/src/map/types.ts +195 -367
  373. package/src/mcp/__tests__/mcp-server-v2.test.ts +236 -0
  374. package/src/mcp/index.ts +2 -2
  375. package/src/mcp/mcp-server-v2.ts +485 -0
  376. package/src/mcp/tools/done-v2.ts +203 -0
  377. package/src/metrics/__tests__/metrics.test.ts +205 -0
  378. package/src/metrics/index.ts +13 -9
  379. package/src/metrics/metrics.ts +110 -239
  380. package/src/metrics/types.ts +63 -0
  381. package/src/store/index.ts +3 -64
  382. package/src/store/types/events.ts +5 -100
  383. package/src/store/types/index.ts +0 -3
  384. package/src/teams/__tests__/team-manager-v2.test.ts +425 -0
  385. package/src/teams/__tests__/team-runtime-v2.test.ts +402 -0
  386. package/src/teams/index.ts +0 -2
  387. package/src/teams/team-manager-v2.ts +268 -0
  388. package/src/teams/team-runtime-v2.ts +898 -0
  389. package/src/trigger/__tests__/trigger-system-v2.test.ts +257 -0
  390. package/src/trigger/index.ts +16 -31
  391. package/src/trigger/sources/cron/cron-service.ts +1 -1
  392. package/src/trigger/sources/webhook/webhook-handler.ts +1 -1
  393. package/src/trigger/strategies/ai-router.ts +170 -0
  394. package/src/trigger/trigger-system-v2.ts +536 -0
  395. package/src/trigger/types.ts +13 -0
  396. package/src/workspace/strategies/optimistic.ts +9 -6
  397. package/.claude/settings.local.json +0 -61
  398. package/dist/acp/websocket-stream.d.ts +0 -30
  399. package/dist/acp/websocket-stream.d.ts.map +0 -1
  400. package/dist/acp/websocket-stream.js +0 -118
  401. package/dist/acp/websocket-stream.js.map +0 -1
  402. package/dist/activity/deduplication.d.ts +0 -85
  403. package/dist/activity/deduplication.d.ts.map +0 -1
  404. package/dist/activity/deduplication.js +0 -149
  405. package/dist/activity/deduplication.js.map +0 -1
  406. package/dist/activity/index.d.ts +0 -16
  407. package/dist/activity/index.d.ts.map +0 -1
  408. package/dist/activity/index.js +0 -17
  409. package/dist/activity/index.js.map +0 -1
  410. package/dist/activity/relevance.d.ts +0 -81
  411. package/dist/activity/relevance.d.ts.map +0 -1
  412. package/dist/activity/relevance.js +0 -161
  413. package/dist/activity/relevance.js.map +0 -1
  414. package/dist/activity/types.d.ts +0 -169
  415. package/dist/activity/types.d.ts.map +0 -1
  416. package/dist/activity/types.js +0 -33
  417. package/dist/activity/types.js.map +0 -1
  418. package/dist/activity/watcher.d.ts +0 -64
  419. package/dist/activity/watcher.d.ts.map +0 -1
  420. package/dist/activity/watcher.js +0 -212
  421. package/dist/activity/watcher.js.map +0 -1
  422. package/dist/agent/wake.d.ts +0 -85
  423. package/dist/agent/wake.d.ts.map +0 -1
  424. package/dist/agent/wake.js +0 -278
  425. package/dist/agent/wake.js.map +0 -1
  426. package/dist/lifecycle/handlers/generic.d.ts +0 -27
  427. package/dist/lifecycle/handlers/generic.d.ts.map +0 -1
  428. package/dist/lifecycle/handlers/generic.js +0 -56
  429. package/dist/lifecycle/handlers/generic.js.map +0 -1
  430. package/dist/lifecycle/handlers/index.d.ts +0 -51
  431. package/dist/lifecycle/handlers/index.d.ts.map +0 -1
  432. package/dist/lifecycle/handlers/index.js +0 -110
  433. package/dist/lifecycle/handlers/index.js.map +0 -1
  434. package/dist/lifecycle/handlers/integrator.d.ts +0 -81
  435. package/dist/lifecycle/handlers/integrator.d.ts.map +0 -1
  436. package/dist/lifecycle/handlers/integrator.js +0 -451
  437. package/dist/lifecycle/handlers/integrator.js.map +0 -1
  438. package/dist/lifecycle/handlers/monitor.d.ts +0 -29
  439. package/dist/lifecycle/handlers/monitor.d.ts.map +0 -1
  440. package/dist/lifecycle/handlers/monitor.js +0 -79
  441. package/dist/lifecycle/handlers/monitor.js.map +0 -1
  442. package/dist/lifecycle/handlers/worker.d.ts +0 -56
  443. package/dist/lifecycle/handlers/worker.d.ts.map +0 -1
  444. package/dist/lifecycle/handlers/worker.js +0 -381
  445. package/dist/lifecycle/handlers/worker.js.map +0 -1
  446. package/dist/mail/conversation-map.d.ts +0 -33
  447. package/dist/mail/conversation-map.d.ts.map +0 -1
  448. package/dist/mail/conversation-map.js +0 -61
  449. package/dist/mail/conversation-map.js.map +0 -1
  450. package/dist/mail/index.d.ts +0 -11
  451. package/dist/mail/index.d.ts.map +0 -1
  452. package/dist/mail/index.js +0 -11
  453. package/dist/mail/index.js.map +0 -1
  454. package/dist/mail/mail-service.d.ts +0 -85
  455. package/dist/mail/mail-service.d.ts.map +0 -1
  456. package/dist/mail/mail-service.js +0 -121
  457. package/dist/mail/mail-service.js.map +0 -1
  458. package/dist/mail/stores/eventstore-conversation-store.d.ts +0 -40
  459. package/dist/mail/stores/eventstore-conversation-store.d.ts.map +0 -1
  460. package/dist/mail/stores/eventstore-conversation-store.js +0 -131
  461. package/dist/mail/stores/eventstore-conversation-store.js.map +0 -1
  462. package/dist/mail/stores/eventstore-participant-store.d.ts +0 -43
  463. package/dist/mail/stores/eventstore-participant-store.d.ts.map +0 -1
  464. package/dist/mail/stores/eventstore-participant-store.js +0 -145
  465. package/dist/mail/stores/eventstore-participant-store.js.map +0 -1
  466. package/dist/mail/stores/eventstore-thread-store.d.ts +0 -46
  467. package/dist/mail/stores/eventstore-thread-store.d.ts.map +0 -1
  468. package/dist/mail/stores/eventstore-thread-store.js +0 -118
  469. package/dist/mail/stores/eventstore-thread-store.js.map +0 -1
  470. package/dist/mail/stores/eventstore-turn-store.d.ts +0 -47
  471. package/dist/mail/stores/eventstore-turn-store.d.ts.map +0 -1
  472. package/dist/mail/stores/eventstore-turn-store.js +0 -153
  473. package/dist/mail/stores/eventstore-turn-store.js.map +0 -1
  474. package/dist/mail/stores/index.d.ts +0 -12
  475. package/dist/mail/stores/index.d.ts.map +0 -1
  476. package/dist/mail/stores/index.js +0 -12
  477. package/dist/mail/stores/index.js.map +0 -1
  478. package/dist/mail/stores/types.d.ts +0 -146
  479. package/dist/mail/stores/types.d.ts.map +0 -1
  480. package/dist/mail/stores/types.js +0 -13
  481. package/dist/mail/stores/types.js.map +0 -1
  482. package/dist/mail/turn-recorder.d.ts +0 -30
  483. package/dist/mail/turn-recorder.d.ts.map +0 -1
  484. package/dist/mail/turn-recorder.js +0 -98
  485. package/dist/mail/turn-recorder.js.map +0 -1
  486. package/dist/map/adapter/acp-over-map.d.ts +0 -115
  487. package/dist/map/adapter/acp-over-map.d.ts.map +0 -1
  488. package/dist/map/adapter/acp-over-map.js +0 -1024
  489. package/dist/map/adapter/acp-over-map.js.map +0 -1
  490. package/dist/map/adapter/connection-manager.d.ts +0 -150
  491. package/dist/map/adapter/connection-manager.d.ts.map +0 -1
  492. package/dist/map/adapter/connection-manager.js +0 -207
  493. package/dist/map/adapter/connection-manager.js.map +0 -1
  494. package/dist/map/adapter/event-log.d.ts +0 -87
  495. package/dist/map/adapter/event-log.d.ts.map +0 -1
  496. package/dist/map/adapter/event-log.js +0 -122
  497. package/dist/map/adapter/event-log.js.map +0 -1
  498. package/dist/map/adapter/event-translator.d.ts +0 -85
  499. package/dist/map/adapter/event-translator.d.ts.map +0 -1
  500. package/dist/map/adapter/event-translator.js +0 -295
  501. package/dist/map/adapter/event-translator.js.map +0 -1
  502. package/dist/map/adapter/extensions/agent-detection.d.ts +0 -49
  503. package/dist/map/adapter/extensions/agent-detection.d.ts.map +0 -1
  504. package/dist/map/adapter/extensions/agent-detection.js +0 -91
  505. package/dist/map/adapter/extensions/agent-detection.js.map +0 -1
  506. package/dist/map/adapter/extensions/agent-lifecycle.d.ts +0 -82
  507. package/dist/map/adapter/extensions/agent-lifecycle.d.ts.map +0 -1
  508. package/dist/map/adapter/extensions/agent-lifecycle.js +0 -164
  509. package/dist/map/adapter/extensions/agent-lifecycle.js.map +0 -1
  510. package/dist/map/adapter/extensions/index.d.ts +0 -92
  511. package/dist/map/adapter/extensions/index.d.ts.map +0 -1
  512. package/dist/map/adapter/extensions/index.js +0 -214
  513. package/dist/map/adapter/extensions/index.js.map +0 -1
  514. package/dist/map/adapter/extensions/mcp-bridge.d.ts +0 -57
  515. package/dist/map/adapter/extensions/mcp-bridge.d.ts.map +0 -1
  516. package/dist/map/adapter/extensions/mcp-bridge.js +0 -745
  517. package/dist/map/adapter/extensions/mcp-bridge.js.map +0 -1
  518. package/dist/map/adapter/extensions/rename.d.ts +0 -29
  519. package/dist/map/adapter/extensions/rename.d.ts.map +0 -1
  520. package/dist/map/adapter/extensions/rename.js +0 -49
  521. package/dist/map/adapter/extensions/rename.js.map +0 -1
  522. package/dist/map/adapter/extensions/resume.d.ts +0 -47
  523. package/dist/map/adapter/extensions/resume.d.ts.map +0 -1
  524. package/dist/map/adapter/extensions/resume.js +0 -59
  525. package/dist/map/adapter/extensions/resume.js.map +0 -1
  526. package/dist/map/adapter/extensions/streams.d.ts +0 -95
  527. package/dist/map/adapter/extensions/streams.d.ts.map +0 -1
  528. package/dist/map/adapter/extensions/streams.js +0 -515
  529. package/dist/map/adapter/extensions/streams.js.map +0 -1
  530. package/dist/map/adapter/extensions/task.d.ts +0 -40
  531. package/dist/map/adapter/extensions/task.d.ts.map +0 -1
  532. package/dist/map/adapter/extensions/task.js +0 -197
  533. package/dist/map/adapter/extensions/task.js.map +0 -1
  534. package/dist/map/adapter/extensions/update-metadata.d.ts +0 -29
  535. package/dist/map/adapter/extensions/update-metadata.d.ts.map +0 -1
  536. package/dist/map/adapter/extensions/update-metadata.js +0 -67
  537. package/dist/map/adapter/extensions/update-metadata.js.map +0 -1
  538. package/dist/map/adapter/extensions/wake.d.ts +0 -60
  539. package/dist/map/adapter/extensions/wake.d.ts.map +0 -1
  540. package/dist/map/adapter/extensions/wake.js +0 -144
  541. package/dist/map/adapter/extensions/wake.js.map +0 -1
  542. package/dist/map/adapter/extensions/workspace-files.d.ts +0 -42
  543. package/dist/map/adapter/extensions/workspace-files.d.ts.map +0 -1
  544. package/dist/map/adapter/extensions/workspace-files.js +0 -338
  545. package/dist/map/adapter/extensions/workspace-files.js.map +0 -1
  546. package/dist/map/adapter/extensions/workspace.d.ts +0 -57
  547. package/dist/map/adapter/extensions/workspace.d.ts.map +0 -1
  548. package/dist/map/adapter/extensions/workspace.js +0 -81
  549. package/dist/map/adapter/extensions/workspace.js.map +0 -1
  550. package/dist/map/adapter/index.d.ts +0 -20
  551. package/dist/map/adapter/index.d.ts.map +0 -1
  552. package/dist/map/adapter/index.js +0 -40
  553. package/dist/map/adapter/index.js.map +0 -1
  554. package/dist/map/adapter/interface.d.ts +0 -450
  555. package/dist/map/adapter/interface.d.ts.map +0 -1
  556. package/dist/map/adapter/interface.js +0 -24
  557. package/dist/map/adapter/interface.js.map +0 -1
  558. package/dist/map/adapter/mail-handler-adapter.d.ts +0 -27
  559. package/dist/map/adapter/mail-handler-adapter.d.ts.map +0 -1
  560. package/dist/map/adapter/mail-handler-adapter.js +0 -292
  561. package/dist/map/adapter/mail-handler-adapter.js.map +0 -1
  562. package/dist/map/adapter/map-adapter.d.ts +0 -200
  563. package/dist/map/adapter/map-adapter.d.ts.map +0 -1
  564. package/dist/map/adapter/map-adapter.js +0 -1199
  565. package/dist/map/adapter/map-adapter.js.map +0 -1
  566. package/dist/map/adapter/rpc-handler.d.ts +0 -263
  567. package/dist/map/adapter/rpc-handler.d.ts.map +0 -1
  568. package/dist/map/adapter/rpc-handler.js +0 -365
  569. package/dist/map/adapter/rpc-handler.js.map +0 -1
  570. package/dist/map/adapter/subscription-manager.d.ts +0 -174
  571. package/dist/map/adapter/subscription-manager.d.ts.map +0 -1
  572. package/dist/map/adapter/subscription-manager.js +0 -248
  573. package/dist/map/adapter/subscription-manager.js.map +0 -1
  574. package/dist/map/adapter/types.d.ts +0 -194
  575. package/dist/map/adapter/types.d.ts.map +0 -1
  576. package/dist/map/adapter/types.js +0 -27
  577. package/dist/map/adapter/types.js.map +0 -1
  578. package/dist/map/adapter/websocket-integration.d.ts +0 -113
  579. package/dist/map/adapter/websocket-integration.d.ts.map +0 -1
  580. package/dist/map/adapter/websocket-integration.js +0 -134
  581. package/dist/map/adapter/websocket-integration.js.map +0 -1
  582. package/dist/map/federation/envelope.d.ts +0 -98
  583. package/dist/map/federation/envelope.d.ts.map +0 -1
  584. package/dist/map/federation/envelope.js +0 -160
  585. package/dist/map/federation/envelope.js.map +0 -1
  586. package/dist/map/federation/federation-handler.d.ts +0 -50
  587. package/dist/map/federation/federation-handler.d.ts.map +0 -1
  588. package/dist/map/federation/federation-handler.js +0 -306
  589. package/dist/map/federation/federation-handler.js.map +0 -1
  590. package/dist/map/federation/index.d.ts +0 -14
  591. package/dist/map/federation/index.d.ts.map +0 -1
  592. package/dist/map/federation/index.js +0 -13
  593. package/dist/map/federation/index.js.map +0 -1
  594. package/dist/map/federation/types.d.ts +0 -239
  595. package/dist/map/federation/types.d.ts.map +0 -1
  596. package/dist/map/federation/types.js +0 -23
  597. package/dist/map/federation/types.js.map +0 -1
  598. package/dist/map/utils/address-translation.d.ts +0 -99
  599. package/dist/map/utils/address-translation.d.ts.map +0 -1
  600. package/dist/map/utils/address-translation.js +0 -285
  601. package/dist/map/utils/address-translation.js.map +0 -1
  602. package/dist/map/utils/index.d.ts +0 -7
  603. package/dist/map/utils/index.d.ts.map +0 -1
  604. package/dist/map/utils/index.js +0 -7
  605. package/dist/map/utils/index.js.map +0 -1
  606. package/dist/mcp/map-client.d.ts +0 -39
  607. package/dist/mcp/map-client.d.ts.map +0 -1
  608. package/dist/mcp/map-client.js +0 -129
  609. package/dist/mcp/map-client.js.map +0 -1
  610. package/dist/mcp/mcp-server.d.ts +0 -72
  611. package/dist/mcp/mcp-server.d.ts.map +0 -1
  612. package/dist/mcp/mcp-server.js +0 -1024
  613. package/dist/mcp/mcp-server.js.map +0 -1
  614. package/dist/mcp/tools/claim_task.d.ts +0 -35
  615. package/dist/mcp/tools/claim_task.d.ts.map +0 -1
  616. package/dist/mcp/tools/claim_task.js +0 -58
  617. package/dist/mcp/tools/claim_task.js.map +0 -1
  618. package/dist/mcp/tools/done.d.ts +0 -102
  619. package/dist/mcp/tools/done.d.ts.map +0 -1
  620. package/dist/mcp/tools/done.js +0 -252
  621. package/dist/mcp/tools/done.js.map +0 -1
  622. package/dist/mcp/tools/inject_context.d.ts +0 -61
  623. package/dist/mcp/tools/inject_context.d.ts.map +0 -1
  624. package/dist/mcp/tools/inject_context.js +0 -123
  625. package/dist/mcp/tools/inject_context.js.map +0 -1
  626. package/dist/mcp/tools/list_claimable_tasks.d.ts +0 -38
  627. package/dist/mcp/tools/list_claimable_tasks.d.ts.map +0 -1
  628. package/dist/mcp/tools/list_claimable_tasks.js +0 -63
  629. package/dist/mcp/tools/list_claimable_tasks.js.map +0 -1
  630. package/dist/mcp/tools/unclaim_task.d.ts +0 -31
  631. package/dist/mcp/tools/unclaim_task.d.ts.map +0 -1
  632. package/dist/mcp/tools/unclaim_task.js +0 -47
  633. package/dist/mcp/tools/unclaim_task.js.map +0 -1
  634. package/dist/mcp/tools/wait_for_activity.d.ts +0 -60
  635. package/dist/mcp/tools/wait_for_activity.d.ts.map +0 -1
  636. package/dist/mcp/tools/wait_for_activity.js +0 -135
  637. package/dist/mcp/tools/wait_for_activity.js.map +0 -1
  638. package/dist/monitor/health-check-service.d.ts +0 -143
  639. package/dist/monitor/health-check-service.d.ts.map +0 -1
  640. package/dist/monitor/health-check-service.js +0 -240
  641. package/dist/monitor/health-check-service.js.map +0 -1
  642. package/dist/monitor/index.d.ts +0 -14
  643. package/dist/monitor/index.d.ts.map +0 -1
  644. package/dist/monitor/index.js +0 -14
  645. package/dist/monitor/index.js.map +0 -1
  646. package/dist/monitor/stall-detector.d.ts +0 -109
  647. package/dist/monitor/stall-detector.d.ts.map +0 -1
  648. package/dist/monitor/stall-detector.js +0 -152
  649. package/dist/monitor/stall-detector.js.map +0 -1
  650. package/dist/peer/capability-manager.d.ts +0 -56
  651. package/dist/peer/capability-manager.d.ts.map +0 -1
  652. package/dist/peer/capability-manager.js +0 -186
  653. package/dist/peer/capability-manager.js.map +0 -1
  654. package/dist/peer/encapsulation-manager.d.ts +0 -190
  655. package/dist/peer/encapsulation-manager.d.ts.map +0 -1
  656. package/dist/peer/encapsulation-manager.js +0 -486
  657. package/dist/peer/encapsulation-manager.js.map +0 -1
  658. package/dist/peer/federation-manager.d.ts +0 -223
  659. package/dist/peer/federation-manager.d.ts.map +0 -1
  660. package/dist/peer/federation-manager.js +0 -528
  661. package/dist/peer/federation-manager.js.map +0 -1
  662. package/dist/peer/hierarchy-errors.d.ts +0 -208
  663. package/dist/peer/hierarchy-errors.d.ts.map +0 -1
  664. package/dist/peer/hierarchy-errors.js +0 -268
  665. package/dist/peer/hierarchy-errors.js.map +0 -1
  666. package/dist/peer/hierarchy-protocol.d.ts +0 -159
  667. package/dist/peer/hierarchy-protocol.d.ts.map +0 -1
  668. package/dist/peer/hierarchy-protocol.js +0 -142
  669. package/dist/peer/hierarchy-protocol.js.map +0 -1
  670. package/dist/peer/index.d.ts +0 -15
  671. package/dist/peer/index.d.ts.map +0 -1
  672. package/dist/peer/index.js +0 -15
  673. package/dist/peer/index.js.map +0 -1
  674. package/dist/peer/peer-manager.d.ts +0 -99
  675. package/dist/peer/peer-manager.d.ts.map +0 -1
  676. package/dist/peer/peer-manager.js +0 -333
  677. package/dist/peer/peer-manager.js.map +0 -1
  678. package/dist/peer/task-delegation.d.ts +0 -189
  679. package/dist/peer/task-delegation.d.ts.map +0 -1
  680. package/dist/peer/task-delegation.js +0 -303
  681. package/dist/peer/task-delegation.js.map +0 -1
  682. package/dist/peer/transports/index.d.ts +0 -8
  683. package/dist/peer/transports/index.d.ts.map +0 -1
  684. package/dist/peer/transports/index.js +0 -8
  685. package/dist/peer/transports/index.js.map +0 -1
  686. package/dist/peer/transports/local-transport.d.ts +0 -56
  687. package/dist/peer/transports/local-transport.d.ts.map +0 -1
  688. package/dist/peer/transports/local-transport.js +0 -263
  689. package/dist/peer/transports/local-transport.js.map +0 -1
  690. package/dist/peer/transports/websocket-transport.d.ts +0 -86
  691. package/dist/peer/transports/websocket-transport.d.ts.map +0 -1
  692. package/dist/peer/transports/websocket-transport.js +0 -338
  693. package/dist/peer/transports/websocket-transport.js.map +0 -1
  694. package/dist/peer/types.d.ts +0 -268
  695. package/dist/peer/types.d.ts.map +0 -1
  696. package/dist/peer/types.js +0 -36
  697. package/dist/peer/types.js.map +0 -1
  698. package/dist/router/address-resolver.d.ts +0 -102
  699. package/dist/router/address-resolver.d.ts.map +0 -1
  700. package/dist/router/address-resolver.js +0 -198
  701. package/dist/router/address-resolver.js.map +0 -1
  702. package/dist/router/broadcast.d.ts +0 -53
  703. package/dist/router/broadcast.d.ts.map +0 -1
  704. package/dist/router/broadcast.js +0 -75
  705. package/dist/router/broadcast.js.map +0 -1
  706. package/dist/router/channels.d.ts +0 -148
  707. package/dist/router/channels.d.ts.map +0 -1
  708. package/dist/router/channels.js +0 -126
  709. package/dist/router/channels.js.map +0 -1
  710. package/dist/router/index.d.ts +0 -21
  711. package/dist/router/index.d.ts.map +0 -1
  712. package/dist/router/index.js +0 -18
  713. package/dist/router/index.js.map +0 -1
  714. package/dist/router/message-router.d.ts +0 -197
  715. package/dist/router/message-router.d.ts.map +0 -1
  716. package/dist/router/message-router.js +0 -903
  717. package/dist/router/message-router.js.map +0 -1
  718. package/dist/router/message-types.d.ts +0 -183
  719. package/dist/router/message-types.d.ts.map +0 -1
  720. package/dist/router/message-types.js +0 -79
  721. package/dist/router/message-types.js.map +0 -1
  722. package/dist/router/role-resolver.d.ts +0 -67
  723. package/dist/router/role-resolver.d.ts.map +0 -1
  724. package/dist/router/role-resolver.js +0 -106
  725. package/dist/router/role-resolver.js.map +0 -1
  726. package/dist/router/signals.d.ts +0 -253
  727. package/dist/router/signals.d.ts.map +0 -1
  728. package/dist/router/signals.js +0 -53
  729. package/dist/router/signals.js.map +0 -1
  730. package/dist/router/types.d.ts +0 -191
  731. package/dist/router/types.d.ts.map +0 -1
  732. package/dist/router/types.js +0 -34
  733. package/dist/router/types.js.map +0 -1
  734. package/dist/router/wake.d.ts +0 -111
  735. package/dist/router/wake.d.ts.map +0 -1
  736. package/dist/router/wake.js +0 -180
  737. package/dist/router/wake.js.map +0 -1
  738. package/dist/server/combined-server.d.ts +0 -95
  739. package/dist/server/combined-server.d.ts.map +0 -1
  740. package/dist/server/combined-server.js +0 -335
  741. package/dist/server/combined-server.js.map +0 -1
  742. package/dist/steering/index.d.ts +0 -11
  743. package/dist/steering/index.d.ts.map +0 -1
  744. package/dist/steering/index.js +0 -11
  745. package/dist/steering/index.js.map +0 -1
  746. package/dist/steering/inject.d.ts +0 -39
  747. package/dist/steering/inject.d.ts.map +0 -1
  748. package/dist/steering/inject.js +0 -197
  749. package/dist/steering/inject.js.map +0 -1
  750. package/dist/steering/types.d.ts +0 -100
  751. package/dist/steering/types.d.ts.map +0 -1
  752. package/dist/steering/types.js +0 -11
  753. package/dist/steering/types.js.map +0 -1
  754. package/dist/store/backends/index.d.ts +0 -11
  755. package/dist/store/backends/index.d.ts.map +0 -1
  756. package/dist/store/backends/index.js +0 -15
  757. package/dist/store/backends/index.js.map +0 -1
  758. package/dist/store/backends/json-backend.d.ts +0 -23
  759. package/dist/store/backends/json-backend.d.ts.map +0 -1
  760. package/dist/store/backends/json-backend.js +0 -220
  761. package/dist/store/backends/json-backend.js.map +0 -1
  762. package/dist/store/backends/memory-backend.d.ts +0 -12
  763. package/dist/store/backends/memory-backend.d.ts.map +0 -1
  764. package/dist/store/backends/memory-backend.js +0 -205
  765. package/dist/store/backends/memory-backend.js.map +0 -1
  766. package/dist/store/backends/sqlite-backend.d.ts +0 -27
  767. package/dist/store/backends/sqlite-backend.d.ts.map +0 -1
  768. package/dist/store/backends/sqlite-backend.js +0 -231
  769. package/dist/store/backends/sqlite-backend.js.map +0 -1
  770. package/dist/store/backends/tinybase-backend.d.ts +0 -22
  771. package/dist/store/backends/tinybase-backend.d.ts.map +0 -1
  772. package/dist/store/backends/tinybase-backend.js +0 -203
  773. package/dist/store/backends/tinybase-backend.js.map +0 -1
  774. package/dist/store/backends/types.d.ts +0 -175
  775. package/dist/store/backends/types.d.ts.map +0 -1
  776. package/dist/store/backends/types.js +0 -28
  777. package/dist/store/backends/types.js.map +0 -1
  778. package/dist/store/event-store.d.ts +0 -128
  779. package/dist/store/event-store.d.ts.map +0 -1
  780. package/dist/store/event-store.js +0 -1746
  781. package/dist/store/event-store.js.map +0 -1
  782. package/dist/store/instance.d.ts +0 -283
  783. package/dist/store/instance.d.ts.map +0 -1
  784. package/dist/store/instance.js +0 -363
  785. package/dist/store/instance.js.map +0 -1
  786. package/dist/store/migrations.d.ts +0 -41
  787. package/dist/store/migrations.d.ts.map +0 -1
  788. package/dist/store/migrations.js +0 -79
  789. package/dist/store/migrations.js.map +0 -1
  790. package/dist/store/types/config.d.ts +0 -16
  791. package/dist/store/types/config.d.ts.map +0 -1
  792. package/dist/store/types/config.js +0 -8
  793. package/dist/store/types/config.js.map +0 -1
  794. package/dist/store/types/conversations.d.ts +0 -91
  795. package/dist/store/types/conversations.d.ts.map +0 -1
  796. package/dist/store/types/conversations.js +0 -8
  797. package/dist/store/types/conversations.js.map +0 -1
  798. package/dist/store/types/sessions.d.ts +0 -44
  799. package/dist/store/types/sessions.d.ts.map +0 -1
  800. package/dist/store/types/sessions.js +0 -9
  801. package/dist/store/types/sessions.js.map +0 -1
  802. package/dist/task/backend/index.d.ts +0 -93
  803. package/dist/task/backend/index.d.ts.map +0 -1
  804. package/dist/task/backend/index.js +0 -178
  805. package/dist/task/backend/index.js.map +0 -1
  806. package/dist/task/backend/memory.d.ts +0 -70
  807. package/dist/task/backend/memory.d.ts.map +0 -1
  808. package/dist/task/backend/memory.js +0 -621
  809. package/dist/task/backend/memory.js.map +0 -1
  810. package/dist/task/backend/opentasks/backend.d.ts +0 -140
  811. package/dist/task/backend/opentasks/backend.d.ts.map +0 -1
  812. package/dist/task/backend/opentasks/backend.js +0 -1023
  813. package/dist/task/backend/opentasks/backend.js.map +0 -1
  814. package/dist/task/backend/opentasks/client.d.ts +0 -337
  815. package/dist/task/backend/opentasks/client.d.ts.map +0 -1
  816. package/dist/task/backend/opentasks/client.js +0 -225
  817. package/dist/task/backend/opentasks/client.js.map +0 -1
  818. package/dist/task/backend/opentasks/daemon-manager.d.ts +0 -89
  819. package/dist/task/backend/opentasks/daemon-manager.d.ts.map +0 -1
  820. package/dist/task/backend/opentasks/daemon-manager.js +0 -195
  821. package/dist/task/backend/opentasks/daemon-manager.js.map +0 -1
  822. package/dist/task/backend/opentasks/index.d.ts +0 -21
  823. package/dist/task/backend/opentasks/index.d.ts.map +0 -1
  824. package/dist/task/backend/opentasks/index.js +0 -21
  825. package/dist/task/backend/opentasks/index.js.map +0 -1
  826. package/dist/task/backend/opentasks/mapping.d.ts +0 -48
  827. package/dist/task/backend/opentasks/mapping.d.ts.map +0 -1
  828. package/dist/task/backend/opentasks/mapping.js +0 -77
  829. package/dist/task/backend/opentasks/mapping.js.map +0 -1
  830. package/dist/task/backend/sudocode/__tests__/integration/test-utils.d.ts +0 -54
  831. package/dist/task/backend/sudocode/__tests__/integration/test-utils.d.ts.map +0 -1
  832. package/dist/task/backend/sudocode/__tests__/integration/test-utils.js +0 -88
  833. package/dist/task/backend/sudocode/__tests__/integration/test-utils.js.map +0 -1
  834. package/dist/task/backend/sudocode/backend.d.ts +0 -155
  835. package/dist/task/backend/sudocode/backend.d.ts.map +0 -1
  836. package/dist/task/backend/sudocode/backend.js +0 -942
  837. package/dist/task/backend/sudocode/backend.js.map +0 -1
  838. package/dist/task/backend/sudocode/client.d.ts +0 -303
  839. package/dist/task/backend/sudocode/client.d.ts.map +0 -1
  840. package/dist/task/backend/sudocode/client.js +0 -101
  841. package/dist/task/backend/sudocode/client.js.map +0 -1
  842. package/dist/task/backend/sudocode/index.d.ts +0 -19
  843. package/dist/task/backend/sudocode/index.d.ts.map +0 -1
  844. package/dist/task/backend/sudocode/index.js +0 -17
  845. package/dist/task/backend/sudocode/index.js.map +0 -1
  846. package/dist/task/backend/sudocode/mapping.d.ts +0 -51
  847. package/dist/task/backend/sudocode/mapping.d.ts.map +0 -1
  848. package/dist/task/backend/sudocode/mapping.js +0 -86
  849. package/dist/task/backend/sudocode/mapping.js.map +0 -1
  850. package/dist/task/backend/sudocode/server-client.d.ts +0 -56
  851. package/dist/task/backend/sudocode/server-client.d.ts.map +0 -1
  852. package/dist/task/backend/sudocode/server-client.js +0 -367
  853. package/dist/task/backend/sudocode/server-client.js.map +0 -1
  854. package/dist/task/backend/sudocode/standalone-client.d.ts +0 -91
  855. package/dist/task/backend/sudocode/standalone-client.d.ts.map +0 -1
  856. package/dist/task/backend/sudocode/standalone-client.js +0 -476
  857. package/dist/task/backend/sudocode/standalone-client.js.map +0 -1
  858. package/dist/task/backend/sudocode/sync-policy.d.ts +0 -166
  859. package/dist/task/backend/sudocode/sync-policy.d.ts.map +0 -1
  860. package/dist/task/backend/sudocode/sync-policy.js +0 -221
  861. package/dist/task/backend/sudocode/sync-policy.js.map +0 -1
  862. package/dist/task/backend/sudocode/tools.d.ts +0 -87
  863. package/dist/task/backend/sudocode/tools.d.ts.map +0 -1
  864. package/dist/task/backend/sudocode/tools.js +0 -743
  865. package/dist/task/backend/sudocode/tools.js.map +0 -1
  866. package/dist/task/backend/tool-provider.d.ts +0 -56
  867. package/dist/task/backend/tool-provider.d.ts.map +0 -1
  868. package/dist/task/backend/tool-provider.js +0 -424
  869. package/dist/task/backend/tool-provider.js.map +0 -1
  870. package/dist/task/backend/types.d.ts +0 -297
  871. package/dist/task/backend/types.d.ts.map +0 -1
  872. package/dist/task/backend/types.js +0 -27
  873. package/dist/task/backend/types.js.map +0 -1
  874. package/dist/task/backend/unified-tool-provider.d.ts +0 -57
  875. package/dist/task/backend/unified-tool-provider.d.ts.map +0 -1
  876. package/dist/task/backend/unified-tool-provider.js +0 -623
  877. package/dist/task/backend/unified-tool-provider.js.map +0 -1
  878. package/dist/task/index.d.ts +0 -7
  879. package/dist/task/index.d.ts.map +0 -1
  880. package/dist/task/index.js +0 -7
  881. package/dist/task/index.js.map +0 -1
  882. package/dist/task/retry-policy.d.ts +0 -89
  883. package/dist/task/retry-policy.d.ts.map +0 -1
  884. package/dist/task/retry-policy.js +0 -160
  885. package/dist/task/retry-policy.js.map +0 -1
  886. package/dist/task/task-manager.d.ts +0 -70
  887. package/dist/task/task-manager.d.ts.map +0 -1
  888. package/dist/task/task-manager.js +0 -319
  889. package/dist/task/task-manager.js.map +0 -1
  890. package/dist/task/types.d.ts +0 -72
  891. package/dist/task/types.d.ts.map +0 -1
  892. package/dist/task/types.js +0 -33
  893. package/dist/task/types.js.map +0 -1
  894. package/dist/teams/team-manager.d.ts +0 -112
  895. package/dist/teams/team-manager.d.ts.map +0 -1
  896. package/dist/teams/team-manager.js +0 -305
  897. package/dist/teams/team-manager.js.map +0 -1
  898. package/dist/teams/team-runtime.d.ts +0 -245
  899. package/dist/teams/team-runtime.d.ts.map +0 -1
  900. package/dist/teams/team-runtime.js +0 -1023
  901. package/dist/teams/team-runtime.js.map +0 -1
  902. package/dist/trigger/router/index.d.ts +0 -11
  903. package/dist/trigger/router/index.d.ts.map +0 -1
  904. package/dist/trigger/router/index.js +0 -10
  905. package/dist/trigger/router/index.js.map +0 -1
  906. package/dist/trigger/router/strategies/ai-router-strategy.d.ts +0 -34
  907. package/dist/trigger/router/strategies/ai-router-strategy.d.ts.map +0 -1
  908. package/dist/trigger/router/strategies/ai-router-strategy.js +0 -359
  909. package/dist/trigger/router/strategies/ai-router-strategy.js.map +0 -1
  910. package/dist/trigger/router/strategies/direct-strategy.d.ts +0 -32
  911. package/dist/trigger/router/strategies/direct-strategy.d.ts.map +0 -1
  912. package/dist/trigger/router/strategies/direct-strategy.js +0 -119
  913. package/dist/trigger/router/strategies/direct-strategy.js.map +0 -1
  914. package/dist/trigger/router/strategies/index.d.ts +0 -11
  915. package/dist/trigger/router/strategies/index.d.ts.map +0 -1
  916. package/dist/trigger/router/strategies/index.js +0 -11
  917. package/dist/trigger/router/strategies/index.js.map +0 -1
  918. package/dist/trigger/router/strategies/role-strategy.d.ts +0 -39
  919. package/dist/trigger/router/strategies/role-strategy.d.ts.map +0 -1
  920. package/dist/trigger/router/strategies/role-strategy.js +0 -207
  921. package/dist/trigger/router/strategies/role-strategy.js.map +0 -1
  922. package/dist/trigger/router/trigger-router.d.ts +0 -54
  923. package/dist/trigger/router/trigger-router.d.ts.map +0 -1
  924. package/dist/trigger/router/trigger-router.js +0 -362
  925. package/dist/trigger/router/trigger-router.js.map +0 -1
  926. package/dist/trigger/router/types.d.ts +0 -225
  927. package/dist/trigger/router/types.d.ts.map +0 -1
  928. package/dist/trigger/router/types.js +0 -10
  929. package/dist/trigger/router/types.js.map +0 -1
  930. package/dist/trigger/trigger-system.d.ts +0 -77
  931. package/dist/trigger/trigger-system.d.ts.map +0 -1
  932. package/dist/trigger/trigger-system.js +0 -84
  933. package/dist/trigger/trigger-system.js.map +0 -1
  934. package/references/acp-factory-ref/CHANGELOG.md +0 -33
  935. package/references/acp-factory-ref/LICENSE +0 -21
  936. package/references/acp-factory-ref/README.md +0 -341
  937. package/references/acp-factory-ref/package-lock.json +0 -3102
  938. package/references/acp-factory-ref/package.json +0 -96
  939. package/references/acp-factory-ref/python/CHANGELOG.md +0 -33
  940. package/references/acp-factory-ref/python/LICENSE +0 -21
  941. package/references/acp-factory-ref/python/Makefile +0 -57
  942. package/references/acp-factory-ref/python/README.md +0 -253
  943. package/references/acp-factory-ref/python/pyproject.toml +0 -73
  944. package/references/acp-factory-ref/python/tests/e2e/__init__.py +0 -1
  945. package/references/acp-factory-ref/python/tests/e2e/test_codex_e2e.py +0 -349
  946. package/references/acp-factory-ref/python/tests/e2e/test_gemini_e2e.py +0 -165
  947. package/references/acp-factory-ref/python/tests/e2e/test_opencode_e2e.py +0 -296
  948. package/references/acp-factory-ref/python/tests/test_client_handler.py +0 -543
  949. package/references/acp-factory-ref/python/tests/test_pushable.py +0 -199
  950. package/references/claude-code-acp/.github/workflows/ci.yml +0 -45
  951. package/references/claude-code-acp/.github/workflows/publish.yml +0 -34
  952. package/references/claude-code-acp/.prettierrc.json +0 -4
  953. package/references/claude-code-acp/CHANGELOG.md +0 -249
  954. package/references/claude-code-acp/LICENSE +0 -222
  955. package/references/claude-code-acp/README.md +0 -53
  956. package/references/claude-code-acp/docs/RELEASES.md +0 -24
  957. package/references/claude-code-acp/eslint.config.js +0 -48
  958. package/references/claude-code-acp/package-lock.json +0 -4570
  959. package/references/claude-code-acp/package.json +0 -88
  960. package/references/claude-code-acp/scripts/release.sh +0 -119
  961. package/references/claude-code-acp/src/acp-agent.ts +0 -2076
  962. package/references/claude-code-acp/src/index.ts +0 -26
  963. package/references/claude-code-acp/src/lib.ts +0 -38
  964. package/references/claude-code-acp/src/mcp-server.ts +0 -911
  965. package/references/claude-code-acp/src/settings.ts +0 -522
  966. package/references/claude-code-acp/src/tests/.claude/commands/quick-math.md +0 -5
  967. package/references/claude-code-acp/src/tests/.claude/commands/say-hello.md +0 -6
  968. package/references/claude-code-acp/src/tests/acp-agent-fork.test.ts +0 -479
  969. package/references/claude-code-acp/src/tests/acp-agent.test.ts +0 -1502
  970. package/references/claude-code-acp/src/tests/extract-lines.test.ts +0 -103
  971. package/references/claude-code-acp/src/tests/fork-session.test.ts +0 -335
  972. package/references/claude-code-acp/src/tests/replace-and-calculate-location.test.ts +0 -334
  973. package/references/claude-code-acp/src/tests/settings.test.ts +0 -617
  974. package/references/claude-code-acp/src/tests/skills-options.test.ts +0 -187
  975. package/references/claude-code-acp/src/tests/tools.test.ts +0 -318
  976. package/references/claude-code-acp/src/tests/typescript-declarations.test.ts +0 -558
  977. package/references/claude-code-acp/src/tools.ts +0 -819
  978. package/references/claude-code-acp/src/utils.ts +0 -171
  979. package/references/claude-code-acp/tsconfig.json +0 -18
  980. package/references/claude-code-acp/vitest.config.ts +0 -19
  981. package/references/minimem/.claude/settings.json +0 -7
  982. package/references/minimem/.sudocode/issues.jsonl +0 -18
  983. package/references/minimem/.sudocode/specs.jsonl +0 -1
  984. package/references/minimem/CLAUDE.md +0 -310
  985. package/references/minimem/README.md +0 -562
  986. package/references/minimem/claude-plugin/.claude-plugin/plugin.json +0 -10
  987. package/references/minimem/claude-plugin/.mcp.json +0 -7
  988. package/references/minimem/claude-plugin/README.md +0 -158
  989. package/references/minimem/claude-plugin/commands/recall.md +0 -47
  990. package/references/minimem/claude-plugin/commands/remember.md +0 -41
  991. package/references/minimem/claude-plugin/hooks/__tests__/hooks.test.ts +0 -272
  992. package/references/minimem/claude-plugin/hooks/hooks.json +0 -27
  993. package/references/minimem/claude-plugin/hooks/session-end.sh +0 -86
  994. package/references/minimem/claude-plugin/hooks/session-start.sh +0 -85
  995. package/references/minimem/claude-plugin/skills/memory/SKILL.md +0 -108
  996. package/references/minimem/media/banner.png +0 -0
  997. package/references/minimem/package-lock.json +0 -5373
  998. package/references/minimem/package.json +0 -72
  999. package/references/minimem/scripts/postbuild.js +0 -35
  1000. package/references/minimem/src/__tests__/edge-cases.test.ts +0 -371
  1001. package/references/minimem/src/__tests__/errors.test.ts +0 -265
  1002. package/references/minimem/src/__tests__/helpers.ts +0 -199
  1003. package/references/minimem/src/__tests__/internal.test.ts +0 -407
  1004. package/references/minimem/src/__tests__/knowledge.test.ts +0 -287
  1005. package/references/minimem/src/__tests__/minimem.integration.test.ts +0 -1127
  1006. package/references/minimem/src/__tests__/session.test.ts +0 -190
  1007. package/references/minimem/src/cli/__tests__/commands.test.ts +0 -759
  1008. package/references/minimem/src/cli/commands/__tests__/conflicts.test.ts +0 -141
  1009. package/references/minimem/src/cli/commands/append.ts +0 -76
  1010. package/references/minimem/src/cli/commands/config.ts +0 -262
  1011. package/references/minimem/src/cli/commands/conflicts.ts +0 -413
  1012. package/references/minimem/src/cli/commands/daemon.ts +0 -169
  1013. package/references/minimem/src/cli/commands/index.ts +0 -12
  1014. package/references/minimem/src/cli/commands/init.ts +0 -88
  1015. package/references/minimem/src/cli/commands/mcp.ts +0 -177
  1016. package/references/minimem/src/cli/commands/push-pull.ts +0 -213
  1017. package/references/minimem/src/cli/commands/search.ts +0 -158
  1018. package/references/minimem/src/cli/commands/status.ts +0 -84
  1019. package/references/minimem/src/cli/commands/sync-init.ts +0 -290
  1020. package/references/minimem/src/cli/commands/sync.ts +0 -70
  1021. package/references/minimem/src/cli/commands/upsert.ts +0 -197
  1022. package/references/minimem/src/cli/config.ts +0 -584
  1023. package/references/minimem/src/cli/index.ts +0 -264
  1024. package/references/minimem/src/cli/shared.ts +0 -161
  1025. package/references/minimem/src/cli/sync/__tests__/central.test.ts +0 -152
  1026. package/references/minimem/src/cli/sync/__tests__/conflicts.test.ts +0 -209
  1027. package/references/minimem/src/cli/sync/__tests__/daemon.test.ts +0 -118
  1028. package/references/minimem/src/cli/sync/__tests__/detection.test.ts +0 -207
  1029. package/references/minimem/src/cli/sync/__tests__/integration.test.ts +0 -476
  1030. package/references/minimem/src/cli/sync/__tests__/registry.test.ts +0 -363
  1031. package/references/minimem/src/cli/sync/__tests__/state.test.ts +0 -255
  1032. package/references/minimem/src/cli/sync/__tests__/validation.test.ts +0 -193
  1033. package/references/minimem/src/cli/sync/__tests__/watcher.test.ts +0 -178
  1034. package/references/minimem/src/cli/sync/central.ts +0 -292
  1035. package/references/minimem/src/cli/sync/conflicts.ts +0 -204
  1036. package/references/minimem/src/cli/sync/daemon.ts +0 -407
  1037. package/references/minimem/src/cli/sync/detection.ts +0 -138
  1038. package/references/minimem/src/cli/sync/index.ts +0 -107
  1039. package/references/minimem/src/cli/sync/operations.ts +0 -373
  1040. package/references/minimem/src/cli/sync/registry.ts +0 -279
  1041. package/references/minimem/src/cli/sync/state.ts +0 -355
  1042. package/references/minimem/src/cli/sync/validation.ts +0 -206
  1043. package/references/minimem/src/cli/sync/watcher.ts +0 -234
  1044. package/references/minimem/src/cli/version.ts +0 -34
  1045. package/references/minimem/src/core/index.ts +0 -9
  1046. package/references/minimem/src/core/indexer.ts +0 -628
  1047. package/references/minimem/src/core/searcher.ts +0 -221
  1048. package/references/minimem/src/db/schema.ts +0 -183
  1049. package/references/minimem/src/db/sqlite-vec.ts +0 -24
  1050. package/references/minimem/src/embeddings/__tests__/embeddings.test.ts +0 -431
  1051. package/references/minimem/src/embeddings/batch-gemini.ts +0 -392
  1052. package/references/minimem/src/embeddings/batch-openai.ts +0 -409
  1053. package/references/minimem/src/embeddings/embeddings.ts +0 -434
  1054. package/references/minimem/src/index.ts +0 -109
  1055. package/references/minimem/src/internal.ts +0 -299
  1056. package/references/minimem/src/minimem.ts +0 -1276
  1057. package/references/minimem/src/search/__tests__/hybrid.test.ts +0 -247
  1058. package/references/minimem/src/search/graph.ts +0 -234
  1059. package/references/minimem/src/search/hybrid.ts +0 -151
  1060. package/references/minimem/src/search/search.ts +0 -256
  1061. package/references/minimem/src/server/__tests__/mcp.test.ts +0 -341
  1062. package/references/minimem/src/server/__tests__/tools.test.ts +0 -364
  1063. package/references/minimem/src/server/mcp.ts +0 -326
  1064. package/references/minimem/src/server/tools.ts +0 -720
  1065. package/references/minimem/src/session.ts +0 -460
  1066. package/references/minimem/tsconfig.json +0 -19
  1067. package/references/minimem/tsup.config.ts +0 -26
  1068. package/references/minimem/vitest.config.ts +0 -24
  1069. package/references/multi-agent-protocol/.sudocode/issues.jsonl +0 -111
  1070. package/references/multi-agent-protocol/.sudocode/specs.jsonl +0 -13
  1071. package/references/multi-agent-protocol/LICENSE +0 -21
  1072. package/references/multi-agent-protocol/README.md +0 -113
  1073. package/references/multi-agent-protocol/docs/00-design-specification.md +0 -496
  1074. package/references/multi-agent-protocol/docs/01-open-questions.md +0 -1050
  1075. package/references/multi-agent-protocol/docs/02-wire-protocol.md +0 -296
  1076. package/references/multi-agent-protocol/docs/03-streaming-semantics.md +0 -252
  1077. package/references/multi-agent-protocol/docs/04-error-handling.md +0 -231
  1078. package/references/multi-agent-protocol/docs/05-connection-model.md +0 -244
  1079. package/references/multi-agent-protocol/docs/06-visibility-permissions.md +0 -243
  1080. package/references/multi-agent-protocol/docs/07-federation.md +0 -259
  1081. package/references/multi-agent-protocol/docs/08-macro-agent-migration.md +0 -253
  1082. package/references/multi-agent-protocol/docs/09-authentication.md +0 -680
  1083. package/references/multi-agent-protocol/docs/10-mail-protocol.md +0 -553
  1084. package/references/multi-agent-protocol/docs/agent-iam-integration.md +0 -877
  1085. package/references/multi-agent-protocol/docs/agentic-mesh-integration-draft.md +0 -459
  1086. package/references/multi-agent-protocol/docs/git-transport-draft.md +0 -251
  1087. package/references/multi-agent-protocol/docs-site/Gemfile +0 -22
  1088. package/references/multi-agent-protocol/docs-site/README.md +0 -82
  1089. package/references/multi-agent-protocol/docs-site/_config.yml +0 -91
  1090. package/references/multi-agent-protocol/docs-site/_includes/head_custom.html +0 -20
  1091. package/references/multi-agent-protocol/docs-site/_sass/color_schemes/map.scss +0 -42
  1092. package/references/multi-agent-protocol/docs-site/_sass/custom/custom.scss +0 -34
  1093. package/references/multi-agent-protocol/docs-site/examples/full-integration.md +0 -510
  1094. package/references/multi-agent-protocol/docs-site/examples/index.md +0 -138
  1095. package/references/multi-agent-protocol/docs-site/examples/simple-chat.md +0 -282
  1096. package/references/multi-agent-protocol/docs-site/examples/task-queue.md +0 -399
  1097. package/references/multi-agent-protocol/docs-site/getting-started/index.md +0 -98
  1098. package/references/multi-agent-protocol/docs-site/getting-started/installation.md +0 -219
  1099. package/references/multi-agent-protocol/docs-site/getting-started/overview.md +0 -172
  1100. package/references/multi-agent-protocol/docs-site/getting-started/quickstart.md +0 -237
  1101. package/references/multi-agent-protocol/docs-site/index.md +0 -136
  1102. package/references/multi-agent-protocol/docs-site/protocol/authentication.md +0 -391
  1103. package/references/multi-agent-protocol/docs-site/protocol/connection-model.md +0 -376
  1104. package/references/multi-agent-protocol/docs-site/protocol/design.md +0 -284
  1105. package/references/multi-agent-protocol/docs-site/protocol/error-handling.md +0 -312
  1106. package/references/multi-agent-protocol/docs-site/protocol/federation.md +0 -449
  1107. package/references/multi-agent-protocol/docs-site/protocol/index.md +0 -129
  1108. package/references/multi-agent-protocol/docs-site/protocol/permissions.md +0 -398
  1109. package/references/multi-agent-protocol/docs-site/protocol/streaming.md +0 -353
  1110. package/references/multi-agent-protocol/docs-site/protocol/wire-protocol.md +0 -369
  1111. package/references/multi-agent-protocol/docs-site/sdk/api/agent.md +0 -357
  1112. package/references/multi-agent-protocol/docs-site/sdk/api/client.md +0 -380
  1113. package/references/multi-agent-protocol/docs-site/sdk/api/index.md +0 -62
  1114. package/references/multi-agent-protocol/docs-site/sdk/api/server.md +0 -453
  1115. package/references/multi-agent-protocol/docs-site/sdk/api/types.md +0 -468
  1116. package/references/multi-agent-protocol/docs-site/sdk/guides/agent.md +0 -375
  1117. package/references/multi-agent-protocol/docs-site/sdk/guides/authentication.md +0 -405
  1118. package/references/multi-agent-protocol/docs-site/sdk/guides/client.md +0 -352
  1119. package/references/multi-agent-protocol/docs-site/sdk/guides/index.md +0 -89
  1120. package/references/multi-agent-protocol/docs-site/sdk/guides/server.md +0 -360
  1121. package/references/multi-agent-protocol/docs-site/sdk/guides/testing.md +0 -446
  1122. package/references/multi-agent-protocol/docs-site/sdk/guides/transports.md +0 -363
  1123. package/references/multi-agent-protocol/docs-site/sdk/index.md +0 -206
  1124. package/references/multi-agent-protocol/package-lock.json +0 -3886
  1125. package/references/multi-agent-protocol/package.json +0 -56
  1126. package/references/multi-agent-protocol/schema/meta.json +0 -467
  1127. package/references/multi-agent-protocol/schema/schema.json +0 -2558
  1128. package/references/openteams/.claude/settings.json +0 -6
  1129. package/references/openteams/README.md +0 -1
  1130. package/references/openteams/SKILL.md +0 -341
  1131. package/references/openteams/design.md +0 -411
  1132. package/references/openteams/examples/bmad-method/prompts/analyst/ROLE.md +0 -16
  1133. package/references/openteams/examples/bmad-method/prompts/analyst/SOUL.md +0 -5
  1134. package/references/openteams/examples/bmad-method/prompts/architect/ROLE.md +0 -24
  1135. package/references/openteams/examples/bmad-method/prompts/architect/SOUL.md +0 -5
  1136. package/references/openteams/examples/bmad-method/prompts/developer/ROLE.md +0 -25
  1137. package/references/openteams/examples/bmad-method/prompts/developer/SOUL.md +0 -5
  1138. package/references/openteams/examples/bmad-method/prompts/master/ROLE.md +0 -21
  1139. package/references/openteams/examples/bmad-method/prompts/master/SOUL.md +0 -5
  1140. package/references/openteams/examples/bmad-method/prompts/pm/ROLE.md +0 -20
  1141. package/references/openteams/examples/bmad-method/prompts/pm/SOUL.md +0 -5
  1142. package/references/openteams/examples/bmad-method/prompts/qa/ROLE.md +0 -17
  1143. package/references/openteams/examples/bmad-method/prompts/qa/SOUL.md +0 -5
  1144. package/references/openteams/examples/bmad-method/prompts/quick-flow-dev/ROLE.md +0 -23
  1145. package/references/openteams/examples/bmad-method/prompts/quick-flow-dev/SOUL.md +0 -5
  1146. package/references/openteams/examples/bmad-method/prompts/scrum-master/ROLE.md +0 -27
  1147. package/references/openteams/examples/bmad-method/prompts/scrum-master/SOUL.md +0 -5
  1148. package/references/openteams/examples/bmad-method/prompts/tech-writer/ROLE.md +0 -21
  1149. package/references/openteams/examples/bmad-method/prompts/tech-writer/SOUL.md +0 -5
  1150. package/references/openteams/examples/bmad-method/prompts/ux-designer/ROLE.md +0 -16
  1151. package/references/openteams/examples/bmad-method/prompts/ux-designer/SOUL.md +0 -5
  1152. package/references/openteams/examples/bmad-method/roles/analyst.yaml +0 -9
  1153. package/references/openteams/examples/bmad-method/roles/architect.yaml +0 -9
  1154. package/references/openteams/examples/bmad-method/roles/developer.yaml +0 -8
  1155. package/references/openteams/examples/bmad-method/roles/master.yaml +0 -8
  1156. package/references/openteams/examples/bmad-method/roles/pm.yaml +0 -9
  1157. package/references/openteams/examples/bmad-method/roles/qa.yaml +0 -8
  1158. package/references/openteams/examples/bmad-method/roles/quick-flow-dev.yaml +0 -8
  1159. package/references/openteams/examples/bmad-method/roles/scrum-master.yaml +0 -9
  1160. package/references/openteams/examples/bmad-method/roles/tech-writer.yaml +0 -8
  1161. package/references/openteams/examples/bmad-method/roles/ux-designer.yaml +0 -8
  1162. package/references/openteams/examples/bmad-method/team.yaml +0 -161
  1163. package/references/openteams/examples/get-shit-done/prompts/codebase-mapper/ROLE.md +0 -17
  1164. package/references/openteams/examples/get-shit-done/prompts/codebase-mapper/SOUL.md +0 -5
  1165. package/references/openteams/examples/get-shit-done/prompts/debugger/ROLE.md +0 -25
  1166. package/references/openteams/examples/get-shit-done/prompts/debugger/SOUL.md +0 -5
  1167. package/references/openteams/examples/get-shit-done/prompts/executor/ROLE.md +0 -34
  1168. package/references/openteams/examples/get-shit-done/prompts/executor/SOUL.md +0 -5
  1169. package/references/openteams/examples/get-shit-done/prompts/integration-checker/ROLE.md +0 -18
  1170. package/references/openteams/examples/get-shit-done/prompts/integration-checker/SOUL.md +0 -3
  1171. package/references/openteams/examples/get-shit-done/prompts/orchestrator/ROLE.md +0 -42
  1172. package/references/openteams/examples/get-shit-done/prompts/orchestrator/SOUL.md +0 -5
  1173. package/references/openteams/examples/get-shit-done/prompts/phase-researcher/ROLE.md +0 -15
  1174. package/references/openteams/examples/get-shit-done/prompts/phase-researcher/SOUL.md +0 -3
  1175. package/references/openteams/examples/get-shit-done/prompts/plan-checker/ROLE.md +0 -17
  1176. package/references/openteams/examples/get-shit-done/prompts/plan-checker/SOUL.md +0 -3
  1177. package/references/openteams/examples/get-shit-done/prompts/planner/ROLE.md +0 -28
  1178. package/references/openteams/examples/get-shit-done/prompts/planner/SOUL.md +0 -5
  1179. package/references/openteams/examples/get-shit-done/prompts/project-researcher/ROLE.md +0 -16
  1180. package/references/openteams/examples/get-shit-done/prompts/project-researcher/SOUL.md +0 -3
  1181. package/references/openteams/examples/get-shit-done/prompts/research-synthesizer/ROLE.md +0 -13
  1182. package/references/openteams/examples/get-shit-done/prompts/research-synthesizer/SOUL.md +0 -3
  1183. package/references/openteams/examples/get-shit-done/prompts/roadmapper/ROLE.md +0 -14
  1184. package/references/openteams/examples/get-shit-done/prompts/roadmapper/SOUL.md +0 -3
  1185. package/references/openteams/examples/get-shit-done/prompts/verifier/ROLE.md +0 -19
  1186. package/references/openteams/examples/get-shit-done/prompts/verifier/SOUL.md +0 -5
  1187. package/references/openteams/examples/get-shit-done/roles/codebase-mapper.yaml +0 -8
  1188. package/references/openteams/examples/get-shit-done/roles/debugger.yaml +0 -8
  1189. package/references/openteams/examples/get-shit-done/roles/executor.yaml +0 -8
  1190. package/references/openteams/examples/get-shit-done/roles/integration-checker.yaml +0 -8
  1191. package/references/openteams/examples/get-shit-done/roles/orchestrator.yaml +0 -9
  1192. package/references/openteams/examples/get-shit-done/roles/phase-researcher.yaml +0 -7
  1193. package/references/openteams/examples/get-shit-done/roles/plan-checker.yaml +0 -8
  1194. package/references/openteams/examples/get-shit-done/roles/planner.yaml +0 -8
  1195. package/references/openteams/examples/get-shit-done/roles/project-researcher.yaml +0 -8
  1196. package/references/openteams/examples/get-shit-done/roles/research-synthesizer.yaml +0 -7
  1197. package/references/openteams/examples/get-shit-done/roles/roadmapper.yaml +0 -7
  1198. package/references/openteams/examples/get-shit-done/roles/verifier.yaml +0 -8
  1199. package/references/openteams/examples/get-shit-done/team.yaml +0 -154
  1200. package/references/openteams/package-lock.json +0 -2181
  1201. package/references/openteams/package.json +0 -48
  1202. package/references/openteams/schema/role.schema.json +0 -125
  1203. package/references/openteams/schema/team.schema.json +0 -284
  1204. package/references/openteams/src/cli/agent.ts +0 -104
  1205. package/references/openteams/src/cli/cli.test.ts +0 -381
  1206. package/references/openteams/src/cli/generate.ts +0 -220
  1207. package/references/openteams/src/cli/message.ts +0 -241
  1208. package/references/openteams/src/cli/task.ts +0 -154
  1209. package/references/openteams/src/cli/team.ts +0 -104
  1210. package/references/openteams/src/cli/template.ts +0 -207
  1211. package/references/openteams/src/cli.ts +0 -45
  1212. package/references/openteams/src/db/database.test.ts +0 -185
  1213. package/references/openteams/src/db/database.ts +0 -240
  1214. package/references/openteams/src/generators/agent-prompt-generator.test.ts +0 -332
  1215. package/references/openteams/src/generators/agent-prompt-generator.ts +0 -521
  1216. package/references/openteams/src/generators/package-generator.test.ts +0 -129
  1217. package/references/openteams/src/generators/package-generator.ts +0 -102
  1218. package/references/openteams/src/generators/skill-generator.test.ts +0 -246
  1219. package/references/openteams/src/generators/skill-generator.ts +0 -374
  1220. package/references/openteams/src/index.ts +0 -104
  1221. package/references/openteams/src/services/agent-service.test.ts +0 -158
  1222. package/references/openteams/src/services/agent-service.ts +0 -84
  1223. package/references/openteams/src/services/communication-service.test.ts +0 -455
  1224. package/references/openteams/src/services/communication-service.ts +0 -371
  1225. package/references/openteams/src/services/message-service.test.ts +0 -342
  1226. package/references/openteams/src/services/message-service.ts +0 -203
  1227. package/references/openteams/src/services/task-service.test.ts +0 -434
  1228. package/references/openteams/src/services/task-service.ts +0 -239
  1229. package/references/openteams/src/services/team-service.test.ts +0 -181
  1230. package/references/openteams/src/services/team-service.ts +0 -139
  1231. package/references/openteams/src/services/template-service.test.ts +0 -306
  1232. package/references/openteams/src/services/template-service.ts +0 -182
  1233. package/references/openteams/src/spawner/acp-factory.ts +0 -96
  1234. package/references/openteams/src/spawner/interface.ts +0 -31
  1235. package/references/openteams/src/spawner/mock.test.ts +0 -93
  1236. package/references/openteams/src/spawner/mock.ts +0 -59
  1237. package/references/openteams/src/template/loader.test.ts +0 -1319
  1238. package/references/openteams/src/template/loader.ts +0 -698
  1239. package/references/openteams/src/template/types.ts +0 -200
  1240. package/references/openteams/src/types.ts +0 -205
  1241. package/references/openteams/tsconfig.json +0 -18
  1242. package/references/openteams/vitest.config.ts +0 -9
  1243. package/references/skill-tree/.claude/settings.json +0 -6
  1244. package/references/skill-tree/.sudocode/issues.jsonl +0 -11
  1245. package/references/skill-tree/.sudocode/specs.jsonl +0 -1
  1246. package/references/skill-tree/CLAUDE.md +0 -150
  1247. package/references/skill-tree/README.md +0 -324
  1248. package/references/skill-tree/docs/GAPS_v1.md +0 -221
  1249. package/references/skill-tree/docs/INTEGRATION_PLAN.md +0 -467
  1250. package/references/skill-tree/docs/TODOS.md +0 -91
  1251. package/references/skill-tree/docs/anthropic_skill_guide.md +0 -1364
  1252. package/references/skill-tree/docs/design/federated-skill-trees.md +0 -524
  1253. package/references/skill-tree/docs/design/multi-agent-sync.md +0 -759
  1254. package/references/skill-tree/docs/scraper/BRAINSTORM.md +0 -583
  1255. package/references/skill-tree/docs/scraper/POC_PLAN.md +0 -420
  1256. package/references/skill-tree/docs/scraper/README.md +0 -170
  1257. package/references/skill-tree/examples/basic-usage.ts +0 -190
  1258. package/references/skill-tree/package-lock.json +0 -1509
  1259. package/references/skill-tree/package.json +0 -66
  1260. package/references/skill-tree/scraper/README.md +0 -123
  1261. package/references/skill-tree/scraper/docs/DESIGN.md +0 -683
  1262. package/references/skill-tree/scraper/docs/PLAN.md +0 -336
  1263. package/references/skill-tree/scraper/drizzle.config.ts +0 -10
  1264. package/references/skill-tree/scraper/package-lock.json +0 -6329
  1265. package/references/skill-tree/scraper/package.json +0 -68
  1266. package/references/skill-tree/scraper/test/fixtures/invalid-skill/missing-description.md +0 -7
  1267. package/references/skill-tree/scraper/test/fixtures/invalid-skill/missing-name.md +0 -7
  1268. package/references/skill-tree/scraper/test/fixtures/minimal-skill/SKILL.md +0 -27
  1269. package/references/skill-tree/scraper/test/fixtures/skill-json/SKILL.json +0 -21
  1270. package/references/skill-tree/scraper/test/fixtures/skill-with-meta/SKILL.md +0 -54
  1271. package/references/skill-tree/scraper/test/fixtures/skill-with-meta/_meta.json +0 -24
  1272. package/references/skill-tree/scraper/test/fixtures/valid-skill/SKILL.md +0 -93
  1273. package/references/skill-tree/scraper/test/fixtures/valid-skill/_meta.json +0 -22
  1274. package/references/skill-tree/scraper/tsup.config.ts +0 -14
  1275. package/references/skill-tree/scraper/vitest.config.ts +0 -17
  1276. package/references/skill-tree/scripts/convert-to-vitest.ts +0 -166
  1277. package/references/skill-tree/skills/skill-writer/SKILL.md +0 -339
  1278. package/references/skill-tree/skills/skill-writer/references/examples.md +0 -326
  1279. package/references/skill-tree/skills/skill-writer/references/patterns.md +0 -210
  1280. package/references/skill-tree/skills/skill-writer/references/quality-checklist.md +0 -123
  1281. package/references/skill-tree/test/run-all.ts +0 -106
  1282. package/references/skill-tree/test/utils.ts +0 -128
  1283. package/references/skill-tree/vitest.config.ts +0 -16
  1284. package/src/__tests__/e2e/agent-spawn-visibility.e2e.test.ts +0 -761
  1285. package/src/__tests__/e2e/cascade-termination.e2e.test.ts +0 -588
  1286. package/src/__tests__/e2e/conflict-resolution-flow.e2e.test.ts +0 -790
  1287. package/src/__tests__/e2e/full-agent-conflict-resolution.e2e.test.ts +0 -714
  1288. package/src/__tests__/e2e/full-agent-orchestration.e2e.test.ts +0 -536
  1289. package/src/__tests__/e2e/mcp-server-debug.e2e.test.ts +0 -372
  1290. package/src/__tests__/e2e/mcp-thin-client-bridge.e2e.test.ts +0 -304
  1291. package/src/__tests__/e2e/mcp-tools-available.e2e.test.ts +0 -324
  1292. package/src/__tests__/e2e/multi-agent.e2e.test.ts +0 -1527
  1293. package/src/__tests__/e2e/multi-coordinator.e2e.test.ts +0 -602
  1294. package/src/__tests__/e2e/orchestration-flow.e2e.test.ts +0 -686
  1295. package/src/__tests__/e2e/spawn-session-streaming.e2e.test.ts +0 -563
  1296. package/src/__tests__/e2e/steering-task.e2e.test.ts +0 -840
  1297. package/src/__tests__/integration.e2e.test.ts +0 -407
  1298. package/src/acp/__tests__/combined-websocket-server.test.ts +0 -260
  1299. package/src/acp/__tests__/history.test.ts +0 -530
  1300. package/src/acp/__tests__/integration.test.ts +0 -1049
  1301. package/src/acp/__tests__/multi-client-mounting.test.ts +0 -303
  1302. package/src/acp/__tests__/session-persistence.test.ts +0 -276
  1303. package/src/acp/__tests__/websocket-full.e2e.test.ts +0 -401
  1304. package/src/acp/__tests__/websocket-integration.test.ts +0 -484
  1305. package/src/acp/__tests__/websocket-stream.test.ts +0 -281
  1306. package/src/acp/__tests__/websocket.e2e.test.ts +0 -390
  1307. package/src/acp/websocket-stream.ts +0 -140
  1308. package/src/activity/__tests__/deduplication.test.ts +0 -345
  1309. package/src/activity/__tests__/relevance.test.ts +0 -347
  1310. package/src/activity/__tests__/watcher.test.ts +0 -344
  1311. package/src/activity/deduplication.ts +0 -219
  1312. package/src/activity/index.ts +0 -51
  1313. package/src/activity/relevance.ts +0 -258
  1314. package/src/activity/types.ts +0 -263
  1315. package/src/activity/watcher.ts +0 -345
  1316. package/src/agent/__tests__/agent-manager.test.ts +0 -1382
  1317. package/src/agent/__tests__/wake.test.ts +0 -768
  1318. package/src/agent/wake.ts +0 -357
  1319. package/src/api/__tests__/conversation-api.test.ts +0 -468
  1320. package/src/cli/__tests__/acp.test.ts +0 -214
  1321. package/src/lifecycle/__tests__/cascade-termination.test.ts +0 -919
  1322. package/src/lifecycle/__tests__/cascade.test.ts +0 -595
  1323. package/src/lifecycle/__tests__/cleanup.test.ts +0 -322
  1324. package/src/lifecycle/__tests__/handlers.test.ts +0 -1879
  1325. package/src/lifecycle/__tests__/lifecycle.e2e.test.ts +0 -354
  1326. package/src/lifecycle/__tests__/merge-queue.e2e.test.ts +0 -602
  1327. package/src/lifecycle/handlers/generic.ts +0 -87
  1328. package/src/lifecycle/handlers/index.ts +0 -183
  1329. package/src/lifecycle/handlers/integrator.ts +0 -672
  1330. package/src/lifecycle/handlers/monitor.ts +0 -114
  1331. package/src/lifecycle/handlers/worker.ts +0 -506
  1332. package/src/mail/__tests__/conversation-lifecycle.test.ts +0 -409
  1333. package/src/mail/__tests__/eventstore-stores.test.ts +0 -1073
  1334. package/src/mail/__tests__/mail-full-agent.e2e.test.ts +0 -575
  1335. package/src/mail/__tests__/mail-integration.test.ts +0 -759
  1336. package/src/mail/__tests__/mail-map-protocol.e2e.test.ts +0 -1068
  1337. package/src/mail/__tests__/mail-service.test.ts +0 -506
  1338. package/src/mail/__tests__/turn-recorder.test.ts +0 -328
  1339. package/src/mail/conversation-map.ts +0 -107
  1340. package/src/mail/index.ts +0 -25
  1341. package/src/mail/mail-service.ts +0 -257
  1342. package/src/mail/stores/eventstore-conversation-store.ts +0 -146
  1343. package/src/mail/stores/eventstore-participant-store.ts +0 -172
  1344. package/src/mail/stores/eventstore-thread-store.ts +0 -129
  1345. package/src/mail/stores/eventstore-turn-store.ts +0 -173
  1346. package/src/mail/stores/index.ts +0 -12
  1347. package/src/mail/stores/types.ts +0 -160
  1348. package/src/mail/turn-recorder.ts +0 -124
  1349. package/src/map/README.md +0 -79
  1350. package/src/map/__tests__/adapter-types.test.ts +0 -326
  1351. package/src/map/__tests__/interface-types.test.ts +0 -342
  1352. package/src/map/__tests__/types.test.ts +0 -411
  1353. package/src/map/adapter/__tests__/acp-over-map-cancel.test.ts +0 -820
  1354. package/src/map/adapter/__tests__/acp-over-map-getmodels.test.ts +0 -355
  1355. package/src/map/adapter/__tests__/acp-over-map-history.test.ts +0 -1386
  1356. package/src/map/adapter/__tests__/acp-over-map-persistence.e2e.test.ts +0 -440
  1357. package/src/map/adapter/__tests__/connection-manager.test.ts +0 -344
  1358. package/src/map/adapter/__tests__/event-broadcast.test.ts +0 -420
  1359. package/src/map/adapter/__tests__/event-log.test.ts +0 -527
  1360. package/src/map/adapter/__tests__/event-translator.test.ts +0 -550
  1361. package/src/map/adapter/__tests__/extensions.test.ts +0 -1387
  1362. package/src/map/adapter/__tests__/map-adapter.test.ts +0 -926
  1363. package/src/map/adapter/__tests__/mcp-bridge.test.ts +0 -1187
  1364. package/src/map/adapter/__tests__/multi-client-broadcast.test.ts +0 -711
  1365. package/src/map/adapter/__tests__/rpc-handler.test.ts +0 -644
  1366. package/src/map/adapter/__tests__/stream-extensions.test.ts +0 -494
  1367. package/src/map/adapter/__tests__/subscription-manager.test.ts +0 -536
  1368. package/src/map/adapter/__tests__/websocket-integration.test.ts +0 -487
  1369. package/src/map/adapter/__tests__/workspace-files.test.ts +0 -673
  1370. package/src/map/adapter/acp-over-map.ts +0 -1483
  1371. package/src/map/adapter/connection-manager.ts +0 -400
  1372. package/src/map/adapter/event-log.ts +0 -208
  1373. package/src/map/adapter/event-translator.ts +0 -415
  1374. package/src/map/adapter/extensions/agent-detection.ts +0 -201
  1375. package/src/map/adapter/extensions/agent-lifecycle.ts +0 -267
  1376. package/src/map/adapter/extensions/index.ts +0 -316
  1377. package/src/map/adapter/extensions/mcp-bridge.ts +0 -995
  1378. package/src/map/adapter/extensions/resume.ts +0 -114
  1379. package/src/map/adapter/extensions/streams.ts +0 -839
  1380. package/src/map/adapter/extensions/task.ts +0 -326
  1381. package/src/map/adapter/extensions/update-metadata.ts +0 -126
  1382. package/src/map/adapter/extensions/wake.ts +0 -239
  1383. package/src/map/adapter/extensions/workspace-files.ts +0 -449
  1384. package/src/map/adapter/extensions/workspace.ts +0 -176
  1385. package/src/map/adapter/index.ts +0 -163
  1386. package/src/map/adapter/interface.ts +0 -581
  1387. package/src/map/adapter/mail-handler-adapter.ts +0 -429
  1388. package/src/map/adapter/map-adapter.ts +0 -1749
  1389. package/src/map/adapter/rpc-handler.ts +0 -604
  1390. package/src/map/adapter/subscription-manager.ts +0 -474
  1391. package/src/map/adapter/types.ts +0 -266
  1392. package/src/map/adapter/websocket-integration.ts +0 -229
  1393. package/src/map/federation/__tests__/envelope.test.ts +0 -362
  1394. package/src/map/federation/__tests__/federation-handler.test.ts +0 -461
  1395. package/src/map/federation/envelope.ts +0 -243
  1396. package/src/map/federation/federation-handler.ts +0 -442
  1397. package/src/map/federation/index.ts +0 -65
  1398. package/src/map/federation/types.ts +0 -344
  1399. package/src/mcp/__tests__/map-client.test.ts +0 -386
  1400. package/src/mcp/__tests__/mcp-server-thin-client.test.ts +0 -368
  1401. package/src/mcp/__tests__/mcp-server.test.ts +0 -1002
  1402. package/src/mcp/map-client.ts +0 -177
  1403. package/src/mcp/mcp-server.ts +0 -1406
  1404. package/src/mcp/tools/__tests__/done.test.ts +0 -484
  1405. package/src/mcp/tools/claim_task.ts +0 -86
  1406. package/src/mcp/tools/done.ts +0 -357
  1407. package/src/mcp/tools/inject_context.ts +0 -173
  1408. package/src/mcp/tools/list_claimable_tasks.ts +0 -93
  1409. package/src/mcp/tools/unclaim_task.ts +0 -71
  1410. package/src/mcp/tools/wait_for_activity.ts +0 -185
  1411. package/src/monitor/__tests__/health-check-service.test.ts +0 -425
  1412. package/src/monitor/__tests__/stale-agent-flow.integration.test.ts +0 -393
  1413. package/src/monitor/__tests__/stall-detector.test.ts +0 -395
  1414. package/src/monitor/health-check-service.ts +0 -359
  1415. package/src/monitor/index.ts +0 -28
  1416. package/src/monitor/stall-detector.ts +0 -238
  1417. package/src/peer/__tests__/capability-manager.test.ts +0 -454
  1418. package/src/peer/__tests__/encapsulation-manager.test.ts +0 -787
  1419. package/src/peer/__tests__/federation-manager.test.ts +0 -828
  1420. package/src/peer/__tests__/hierarchy-errors.test.ts +0 -307
  1421. package/src/peer/__tests__/peer-manager.test.ts +0 -535
  1422. package/src/peer/__tests__/task-delegation.test.ts +0 -741
  1423. package/src/peer/capability-manager.ts +0 -289
  1424. package/src/peer/encapsulation-manager.ts +0 -831
  1425. package/src/peer/federation-manager.ts +0 -897
  1426. package/src/peer/hierarchy-errors.ts +0 -382
  1427. package/src/peer/hierarchy-protocol.ts +0 -328
  1428. package/src/peer/index.ts +0 -15
  1429. package/src/peer/peer-manager.ts +0 -540
  1430. package/src/peer/task-delegation.ts +0 -594
  1431. package/src/peer/transports/__tests__/local-transport.test.ts +0 -355
  1432. package/src/peer/transports/__tests__/websocket-transport.test.ts +0 -270
  1433. package/src/peer/transports/index.ts +0 -18
  1434. package/src/peer/transports/local-transport.ts +0 -348
  1435. package/src/peer/transports/websocket-transport.ts +0 -452
  1436. package/src/peer/types.ts +0 -331
  1437. package/src/roles/__tests__/capability-enforcement.test.ts +0 -989
  1438. package/src/roles/__tests__/message-routing.e2e.test.ts +0 -464
  1439. package/src/roles/__tests__/role-resolution.test.ts +0 -576
  1440. package/src/router/README.md +0 -120
  1441. package/src/router/__tests__/address-resolver.test.ts +0 -340
  1442. package/src/router/__tests__/broadcast.test.ts +0 -185
  1443. package/src/router/__tests__/message-router.test.ts +0 -1070
  1444. package/src/router/__tests__/role-channel.test.ts +0 -213
  1445. package/src/router/__tests__/send-to-address.test.ts +0 -731
  1446. package/src/router/__tests__/wake.test.ts +0 -459
  1447. package/src/router/address-resolver.ts +0 -303
  1448. package/src/router/broadcast.ts +0 -117
  1449. package/src/router/channels.ts +0 -283
  1450. package/src/router/index.ts +0 -148
  1451. package/src/router/message-router.ts +0 -1392
  1452. package/src/router/message-types.ts +0 -294
  1453. package/src/router/role-resolver.ts +0 -164
  1454. package/src/router/signals.ts +0 -335
  1455. package/src/router/types.ts +0 -306
  1456. package/src/router/wake.ts +0 -270
  1457. package/src/server/__tests__/combined-server.test.ts +0 -360
  1458. package/src/server/combined-server.ts +0 -544
  1459. package/src/steering/__tests__/inject.test.ts +0 -405
  1460. package/src/steering/__tests__/injection.e2e.test.ts +0 -932
  1461. package/src/steering/__tests__/steering-integration.test.ts +0 -747
  1462. package/src/steering/index.ts +0 -25
  1463. package/src/steering/inject.ts +0 -262
  1464. package/src/steering/types.ts +0 -143
  1465. package/src/store/README.md +0 -134
  1466. package/src/store/__tests__/event-store-oob.test.ts +0 -109
  1467. package/src/store/__tests__/event-store.test.ts +0 -1446
  1468. package/src/store/__tests__/instance.test.ts +0 -556
  1469. package/src/store/__tests__/migrations.test.ts +0 -109
  1470. package/src/store/backends/__tests__/memory-backend.test.ts +0 -383
  1471. package/src/store/backends/__tests__/sqlite-backend.test.ts +0 -427
  1472. package/src/store/backends/index.ts +0 -42
  1473. package/src/store/backends/json-backend.ts +0 -295
  1474. package/src/store/backends/memory-backend.ts +0 -256
  1475. package/src/store/backends/sqlite-backend.ts +0 -337
  1476. package/src/store/backends/tinybase-backend.ts +0 -276
  1477. package/src/store/backends/types.ts +0 -252
  1478. package/src/store/event-store.ts +0 -2214
  1479. package/src/store/instance.ts +0 -681
  1480. package/src/store/migrations.ts +0 -96
  1481. package/src/store/types/config.ts +0 -19
  1482. package/src/store/types/conversations.ts +0 -129
  1483. package/src/store/types/sessions.ts +0 -53
  1484. package/src/task/__tests__/retry-policy.test.ts +0 -409
  1485. package/src/task/__tests__/task-integration.test.ts +0 -457
  1486. package/src/task/__tests__/task-manager.test.ts +0 -815
  1487. package/src/task/backend/__tests__/create-task-backend.test.ts +0 -225
  1488. package/src/task/backend/__tests__/e2e/unified-tool-provider-opentasks.e2e.test.ts +0 -524
  1489. package/src/task/backend/__tests__/memory-pull-mode.test.ts +0 -153
  1490. package/src/task/backend/__tests__/memory.test.ts +0 -1274
  1491. package/src/task/backend/__tests__/unified-tool-provider.test.ts +0 -579
  1492. package/src/task/backend/index.ts +0 -310
  1493. package/src/task/backend/memory.ts +0 -828
  1494. package/src/task/backend/opentasks/__tests__/backend.test.ts +0 -968
  1495. package/src/task/backend/opentasks/__tests__/daemon-manager.test.ts +0 -406
  1496. package/src/task/backend/opentasks/__tests__/mapping.test.ts +0 -84
  1497. package/src/task/backend/opentasks/__tests__/opentasks-backend.e2e.test.ts +0 -1338
  1498. package/src/task/backend/opentasks/backend.ts +0 -1323
  1499. package/src/task/backend/opentasks/client.ts +0 -652
  1500. package/src/task/backend/opentasks/daemon-manager.ts +0 -256
  1501. package/src/task/backend/opentasks/index.ts +0 -69
  1502. package/src/task/backend/opentasks/mapping.ts +0 -94
  1503. package/src/task/backend/types.ts +0 -458
  1504. package/src/task/backend/unified-tool-provider.ts +0 -779
  1505. package/src/task/index.ts +0 -7
  1506. package/src/task/retry-policy.ts +0 -204
  1507. package/src/task/task-manager.ts +0 -515
  1508. package/src/task/types.ts +0 -136
  1509. package/src/teams/CLAUDE.md +0 -180
  1510. package/src/teams/__tests__/cross-subsystem.integration.test.ts +0 -983
  1511. package/src/teams/__tests__/e2e/team-runtime.e2e.test.ts +0 -553
  1512. package/src/teams/__tests__/e2e/workspace-isolation.e2e.test.ts +0 -1263
  1513. package/src/teams/__tests__/team-manager.test.ts +0 -814
  1514. package/src/teams/__tests__/team-system.test.ts +0 -2563
  1515. package/src/teams/team-manager.ts +0 -387
  1516. package/src/teams/team-runtime.ts +0 -1198
  1517. package/src/trigger/CLAUDE.md +0 -308
  1518. package/src/trigger/README.md +0 -429
  1519. package/src/trigger/__tests__/macro-agent-regression.test.ts +0 -946
  1520. package/src/trigger/__tests__/routing-strategies.test.ts +0 -329
  1521. package/src/trigger/__tests__/trigger-router.test.ts +0 -433
  1522. package/src/trigger/__tests__/trigger-system-integration.test.ts +0 -581
  1523. package/src/trigger/router/index.ts +0 -36
  1524. package/src/trigger/router/strategies/ai-router-strategy.ts +0 -481
  1525. package/src/trigger/router/strategies/direct-strategy.ts +0 -162
  1526. package/src/trigger/router/strategies/index.ts +0 -26
  1527. package/src/trigger/router/strategies/role-strategy.ts +0 -274
  1528. package/src/trigger/router/trigger-router.ts +0 -463
  1529. package/src/trigger/router/types.ts +0 -273
  1530. package/src/trigger/trigger-system.ts +0 -206
  1531. package/src/workspace/__tests__/multi-coordinator.test.ts +0 -1005
  1532. package/src/workspace/__tests__/workspace-manager.test.ts +0 -391
  1533. package/src/workspace/__tests__/workspace.e2e.test.ts +0 -1155
  1534. package/src/workspace/merge-queue/__tests__/hierarchical-consolidation.e2e.test.ts +0 -414
  1535. package/test_fixtures/harness/__tests__/behavior-executor-and-stepper.test.ts +0 -714
  1536. package/test_fixtures/harness/__tests__/fixtures.test.ts +0 -347
  1537. package/test_fixtures/harness/__tests__/merge-queue-and-worktrees.test.ts +0 -452
  1538. package/test_fixtures/harness/__tests__/temp-repo-and-simulator.test.ts +0 -422
  1539. package/test_fixtures/harness/__tests__/test-harness-and-assertions.test.ts +0 -568
  1540. /package/{references/acp-factory-ref/python/tests/__init__.py → .opentasks/graph.jsonl} +0 -0
@@ -1,2076 +0,0 @@
1
- import {
2
- Agent,
3
- AgentSideConnection,
4
- AuthenticateRequest,
5
- AvailableCommand,
6
- CancelNotification,
7
- ClientCapabilities,
8
- ForkSessionRequest,
9
- ForkSessionResponse,
10
- InitializeRequest,
11
- InitializeResponse,
12
- LoadSessionRequest,
13
- LoadSessionResponse,
14
- ndJsonStream,
15
- NewSessionRequest,
16
- NewSessionResponse,
17
- PromptRequest,
18
- PromptResponse,
19
- ReadTextFileRequest,
20
- ReadTextFileResponse,
21
- RequestError,
22
- ResumeSessionRequest,
23
- ResumeSessionResponse,
24
- SessionModelState,
25
- SessionNotification,
26
- SetSessionModelRequest,
27
- SetSessionModelResponse,
28
- SetSessionModeRequest,
29
- SetSessionModeResponse,
30
- TerminalHandle,
31
- TerminalOutputResponse,
32
- WriteTextFileRequest,
33
- WriteTextFileResponse,
34
- } from "@agentclientprotocol/sdk";
35
- import { SettingsManager } from "./settings.js";
36
- import {
37
- CanUseTool,
38
- McpServerConfig,
39
- Options,
40
- PermissionMode,
41
- Query,
42
- query,
43
- SDKPartialAssistantMessage,
44
- SDKUserMessage,
45
- } from "@anthropic-ai/claude-agent-sdk";
46
- import * as fs from "node:fs";
47
- import * as path from "node:path";
48
- import * as os from "node:os";
49
- import { nodeToWebReadable, nodeToWebWritable, Pushable, unreachable } from "./utils.js";
50
- import { createMcpServer } from "./mcp-server.js";
51
- import { EDIT_TOOL_NAMES, acpToolNames } from "./tools.js";
52
- import {
53
- toolInfoFromToolUse,
54
- planEntries,
55
- toolUpdateFromToolResult,
56
- ClaudePlanEntry,
57
- registerHookCallback,
58
- createPostToolUseHook,
59
- createPreToolUseHook,
60
- } from "./tools.js";
61
- import { ContentBlockParam } from "@anthropic-ai/sdk/resources";
62
- import { BetaContentBlock, BetaRawContentBlockDelta } from "@anthropic-ai/sdk/resources/beta.mjs";
63
- import packageJson from "../package.json" with { type: "json" };
64
- import { randomUUID } from "node:crypto";
65
- import { fileURLToPath } from "node:url";
66
-
67
- export const CLAUDE_CONFIG_DIR = process.env.CLAUDE ?? path.join(os.homedir(), ".claude");
68
-
69
- /**
70
- * Logger interface for customizing logging output
71
- */
72
- export interface Logger {
73
- log: (...args: any[]) => void;
74
- error: (...args: any[]) => void;
75
- }
76
-
77
- /**
78
- * Internal state for tracking compaction.
79
- */
80
- type CompactionState = {
81
- /** Whether auto-compaction is enabled for this session */
82
- enabled: boolean;
83
- /** Token threshold that triggers compaction */
84
- threshold: number;
85
- /** Custom instructions for compaction summary */
86
- customInstructions?: string;
87
- /** Current total token count for this session */
88
- currentTokens: number;
89
- /** Whether a compaction is currently in progress */
90
- isCompacting: boolean;
91
- };
92
-
93
- /**
94
- * Information about a skill available in the session.
95
- */
96
- export type SkillInfo = {
97
- /** Skill name */
98
- name: string;
99
- /** Skill description */
100
- description?: string;
101
- /** Source of the skill */
102
- source?: "user" | "project" | "plugin";
103
- };
104
-
105
- type Session = {
106
- query: Query;
107
- input: Pushable<SDKUserMessage>;
108
- cancelled: boolean;
109
- permissionMode: PermissionMode;
110
- settingsManager: SettingsManager;
111
- abortController: AbortController;
112
- cwd: string;
113
- /** Optional: the actual session file path (for forked sessions where filename differs from sessionId) */
114
- sessionFilePath?: string;
115
- /** Auto-compaction state tracking */
116
- compaction: CompactionState;
117
- /** Skills loaded for this session (populated from SDK init message) */
118
- skills?: SkillInfo[];
119
- };
120
-
121
- type BackgroundTerminal =
122
- | {
123
- handle: TerminalHandle;
124
- status: "started";
125
- lastOutput: TerminalOutputResponse | null;
126
- }
127
- | {
128
- status: "aborted" | "exited" | "killed" | "timedOut";
129
- pendingOutput: TerminalOutputResponse;
130
- };
131
-
132
- /**
133
- * Configuration for automatic context compaction.
134
- * When enabled, the session will automatically trigger compaction when token usage exceeds the threshold.
135
- */
136
- export type CompactionConfig = {
137
- /**
138
- * Whether automatic compaction is enabled.
139
- * @default false
140
- */
141
- enabled: boolean;
142
-
143
- /**
144
- * Token threshold that triggers automatic compaction.
145
- * When the total token count exceeds this value, a /compact command is automatically sent.
146
- * @default 100000
147
- */
148
- contextTokenThreshold?: number;
149
-
150
- /**
151
- * Optional custom instructions for the compaction summary.
152
- * These instructions guide how Claude summarizes the conversation.
153
- */
154
- customInstructions?: string;
155
- };
156
-
157
- /**
158
- * Extra metadata that can be given to Claude Code when creating a new session.
159
- */
160
- export type NewSessionMeta = {
161
- claudeCode?: {
162
- /**
163
- * Options forwarded to Claude Code when starting a new session.
164
- * Those parameters will be ignored and managed by ACP:
165
- * - cwd
166
- * - includePartialMessages
167
- * - allowDangerouslySkipPermissions
168
- * - permissionMode
169
- * - canUseTool
170
- * - executable
171
- * Those parameters will be used and updated to work with ACP:
172
- * - hooks (merged with ACP's hooks)
173
- * - mcpServers (merged with ACP's mcpServers)
174
- */
175
- options?: Options;
176
-
177
- /**
178
- * Configuration for automatic context compaction.
179
- * When enabled, automatically triggers /compact when token usage exceeds the threshold.
180
- */
181
- compaction?: CompactionConfig;
182
- };
183
- };
184
-
185
- /**
186
- * Extra metadata that the agent provides for each tool_call / tool_update update.
187
- */
188
- export type ToolUpdateMeta = {
189
- claudeCode?: {
190
- /* The name of the tool that was used in Claude Code. */
191
- toolName: string;
192
- /* The structured output provided by Claude Code. */
193
- toolResponse?: unknown;
194
- };
195
- };
196
-
197
- export type ToolUseCache = {
198
- [key: string]: {
199
- type: "tool_use" | "server_tool_use" | "mcp_tool_use";
200
- id: string;
201
- name: string;
202
- input: unknown;
203
- };
204
- };
205
-
206
- // Bypass Permissions doesn't work if we are a root/sudo user
207
- const IS_ROOT = (process.geteuid?.() ?? process.getuid?.()) === 0;
208
-
209
- // Implement the ACP Agent interface
210
- export class ClaudeAcpAgent implements Agent {
211
- sessions: {
212
- [key: string]: Session;
213
- };
214
- client: AgentSideConnection;
215
- toolUseCache: ToolUseCache;
216
- backgroundTerminals: { [key: string]: BackgroundTerminal } = {};
217
- clientCapabilities?: ClientCapabilities;
218
- logger: Logger;
219
-
220
- constructor(client: AgentSideConnection, logger?: Logger) {
221
- this.sessions = {};
222
- this.client = client;
223
- this.toolUseCache = {};
224
- this.logger = logger ?? console;
225
- }
226
-
227
- async initialize(request: InitializeRequest): Promise<InitializeResponse> {
228
- this.clientCapabilities = request.clientCapabilities;
229
-
230
- // Default authMethod
231
- const authMethod: any = {
232
- description: "Run `claude /login` in the terminal",
233
- name: "Log in with Claude Code",
234
- id: "claude-login",
235
- };
236
-
237
- // If client supports terminal-auth capability, use that instead.
238
- if (request.clientCapabilities?._meta?.["terminal-auth"] === true) {
239
- const cliPath = fileURLToPath(import.meta.resolve("@anthropic-ai/claude-agent-sdk/cli.js"));
240
-
241
- authMethod._meta = {
242
- "terminal-auth": {
243
- command: "node",
244
- args: [cliPath, "/login"],
245
- label: "Claude Code Login",
246
- },
247
- };
248
- }
249
-
250
- return {
251
- protocolVersion: 1,
252
- agentCapabilities: {
253
- promptCapabilities: {
254
- image: true,
255
- embeddedContext: true,
256
- },
257
- mcpCapabilities: {
258
- http: true,
259
- sse: true,
260
- },
261
- sessionCapabilities: {
262
- fork: {},
263
- resume: {},
264
- },
265
- loadSession: true,
266
- },
267
- agentInfo: {
268
- name: packageJson.name,
269
- title: "Claude Code",
270
- version: packageJson.version,
271
- },
272
- authMethods: [authMethod],
273
- };
274
- }
275
-
276
- async newSession(params: NewSessionRequest): Promise<NewSessionResponse> {
277
- if (
278
- fs.existsSync(path.resolve(os.homedir(), ".claude.json.backup")) &&
279
- !fs.existsSync(path.resolve(os.homedir(), ".claude.json"))
280
- ) {
281
- throw RequestError.authRequired();
282
- }
283
-
284
- return await this.createSession(params, {
285
- // Revisit these meta values once we support resume
286
- resume: (params._meta as NewSessionMeta | undefined)?.claudeCode?.options?.resume,
287
- });
288
- }
289
-
290
- /**
291
- * Fork an existing session to create a new independent session.
292
- * This is the ACP protocol method handler for session/fork.
293
- * Named unstable_forkSession to match SDK expectations (session/fork routes to this method).
294
- */
295
- async unstable_forkSession(params: ForkSessionRequest): Promise<ForkSessionResponse> {
296
- // Get the session directory to track new files
297
- const sessionDir = this.getSessionDirPath(params.cwd);
298
- const beforeFiles = new Set(
299
- fs.existsSync(sessionDir)
300
- ? fs.readdirSync(sessionDir).filter((f) => f.endsWith(".jsonl"))
301
- : [],
302
- );
303
-
304
- const result = await this.createSession(
305
- {
306
- cwd: params.cwd,
307
- mcpServers: params.mcpServers ?? [],
308
- _meta: params._meta,
309
- },
310
- {
311
- resume: params.sessionId,
312
- forkSession: true,
313
- },
314
- );
315
-
316
- // Wait briefly for CLI to create the session file
317
- await new Promise((resolve) => setTimeout(resolve, 200));
318
-
319
- // Find the CLI-assigned session ID by looking for new session files
320
- const cliSessionId = await this.discoverCliSessionId(sessionDir, beforeFiles, result.sessionId);
321
-
322
- // If no new file was created, create one by copying the parent session file
323
- if (cliSessionId === result.sessionId) {
324
- // cliSessionId equals fallback, meaning no new file was found
325
- const parentFilePath = path.join(sessionDir, `${params.sessionId}.jsonl`);
326
- const forkFilePath = path.join(sessionDir, `${result.sessionId}.jsonl`);
327
-
328
- if (fs.existsSync(parentFilePath) && !fs.existsSync(forkFilePath)) {
329
- try {
330
- // Copy parent session file to fork session file
331
- fs.copyFileSync(parentFilePath, forkFilePath);
332
- // Update the internal session ID in the copied file
333
- this.updateSessionIdInFile(forkFilePath, result.sessionId);
334
- // Promote to full session (not sidechain)
335
- this.promoteToFullSession(forkFilePath);
336
- this.logger.log(
337
- `[claude-code-acp] Fork: created fork file by copying parent: ${params.sessionId}.jsonl -> ${result.sessionId}.jsonl`,
338
- );
339
- } catch (err) {
340
- this.logger.error(`[claude-code-acp] Failed to create fork file from parent: ${err}`);
341
- }
342
- }
343
- }
344
-
345
- if (cliSessionId && cliSessionId !== result.sessionId) {
346
- // Check if the CLI assigned a non-UUID session ID (e.g., "agent-xxx")
347
- // If so, we need to extract the internal sessionId from the file
348
- const isUuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(
349
- cliSessionId,
350
- );
351
-
352
- if (!isUuid) {
353
- // Read the session file to extract the internal sessionId
354
- const oldFilePath = path.join(sessionDir, `${cliSessionId}.jsonl`);
355
- const internalSessionId = this.extractInternalSessionId(oldFilePath);
356
-
357
- if (internalSessionId) {
358
- this.logger.log(
359
- `[claude-code-acp] Fork: extracted internal sessionId ${internalSessionId} from ${cliSessionId}`,
360
- );
361
-
362
- // Check if target file already exists (CLI reuses session IDs for forks from same parent)
363
- // If so, generate a new unique session ID to avoid collisions
364
- let finalSessionId = internalSessionId;
365
- let newFilePath = path.join(sessionDir, `${finalSessionId}.jsonl`);
366
-
367
- if (fs.existsSync(newFilePath)) {
368
- // Session ID collision - CLI created a fork with the same internal ID
369
- // Generate a new UUID and update the file's internal session ID
370
- finalSessionId = randomUUID();
371
- newFilePath = path.join(sessionDir, `${finalSessionId}.jsonl`);
372
- this.logger.log(
373
- `[claude-code-acp] Fork: session ID collision detected, using new ID: ${finalSessionId}`,
374
- );
375
-
376
- // Update the internal session ID in the file before renaming
377
- this.updateSessionIdInFile(oldFilePath, finalSessionId);
378
- }
379
-
380
- // Rename the file to match the session ID so CLI can find it
381
- try {
382
- fs.renameSync(oldFilePath, newFilePath);
383
- this.logger.log(
384
- `[claude-code-acp] Fork: renamed ${cliSessionId}.jsonl -> ${finalSessionId}.jsonl`,
385
- );
386
-
387
- // Promote sidechain to full session so it can be resumed/forked again
388
- this.promoteToFullSession(newFilePath);
389
- } catch (err) {
390
- this.logger.error(`[claude-code-acp] Failed to rename session file: ${err}`);
391
- // Continue anyway - the session might still work
392
- }
393
-
394
- // Re-register session with the final session ID
395
- const session = this.sessions[result.sessionId];
396
- this.sessions[finalSessionId] = session;
397
- delete this.sessions[result.sessionId];
398
- return { ...result, sessionId: finalSessionId };
399
- }
400
-
401
- // Fall through if we couldn't extract the internal ID
402
- this.logger.error(
403
- `[claude-code-acp] Could not extract internal sessionId from ${oldFilePath}`,
404
- );
405
- }
406
-
407
- // Re-register session with the CLI's session ID (if it's already a UUID or extraction failed)
408
- this.logger.log(
409
- `[claude-code-acp] Fork: remapping session ${result.sessionId} -> ${cliSessionId}`,
410
- );
411
- this.sessions[cliSessionId] = this.sessions[result.sessionId];
412
- delete this.sessions[result.sessionId];
413
- return { ...result, sessionId: cliSessionId };
414
- }
415
-
416
- return result;
417
- }
418
-
419
- /**
420
- * Get the directory where session files are stored for a given cwd.
421
- */
422
- private getSessionDirPath(cwd: string): string {
423
- const realCwd = fs.realpathSync(cwd);
424
- const cwdHash = realCwd.replace(/[/_]/g, "-");
425
- return path.join(os.homedir(), ".claude", "projects", cwdHash);
426
- }
427
-
428
- /**
429
- * Extract the internal sessionId from a session JSONL file.
430
- * The CLI stores the actual session ID inside the file, which may differ from the filename.
431
- * For forked sessions, the filename is "agent-xxx" but the internal sessionId is a UUID.
432
- */
433
- private extractInternalSessionId(filePath: string): string | null {
434
- try {
435
- if (!fs.existsSync(filePath)) {
436
- return null;
437
- }
438
-
439
- const content = fs.readFileSync(filePath, "utf-8");
440
- const firstLine = content.split("\n").find((line) => line.trim().length > 0);
441
-
442
- if (!firstLine) {
443
- return null;
444
- }
445
-
446
- const parsed = JSON.parse(firstLine);
447
- if (parsed.sessionId && typeof parsed.sessionId === "string") {
448
- // Verify it's a UUID format
449
- const isUuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(
450
- parsed.sessionId,
451
- );
452
- if (isUuid) {
453
- return parsed.sessionId;
454
- }
455
- }
456
-
457
- return null;
458
- } catch (err) {
459
- this.logger.error(`[claude-code-acp] Failed to extract sessionId from ${filePath}: ${err}`);
460
- return null;
461
- }
462
- }
463
-
464
- /**
465
- * Promote a sidechain session to a regular session by modifying the session file.
466
- * Forked sessions have "isSidechain": true which prevents them from being resumed.
467
- * This method changes it to false so the session can be resumed/forked again.
468
- */
469
- private promoteToFullSession(filePath: string): boolean {
470
- try {
471
- if (!fs.existsSync(filePath)) {
472
- return false;
473
- }
474
-
475
- const content = fs.readFileSync(filePath, "utf-8");
476
- const lines = content.split("\n");
477
- const modifiedLines: string[] = [];
478
-
479
- for (const line of lines) {
480
- if (!line.trim()) {
481
- modifiedLines.push(line);
482
- continue;
483
- }
484
-
485
- try {
486
- const parsed = JSON.parse(line);
487
- // Change isSidechain from true to false
488
- if (parsed.isSidechain === true) {
489
- parsed.isSidechain = false;
490
- }
491
- modifiedLines.push(JSON.stringify(parsed));
492
- } catch {
493
- // Keep line as-is if it can't be parsed
494
- modifiedLines.push(line);
495
- }
496
- }
497
-
498
- fs.writeFileSync(filePath, modifiedLines.join("\n"), "utf-8");
499
- this.logger.log(`[claude-code-acp] Promoted sidechain to full session: ${filePath}`);
500
- return true;
501
- } catch (err) {
502
- this.logger.error(`[claude-code-acp] Failed to promote session: ${err}`);
503
- return false;
504
- }
505
- }
506
-
507
- /**
508
- * Update the sessionId in all lines of a session JSONL file.
509
- * This is used when we need to assign a new unique session ID to avoid collisions.
510
- */
511
- private updateSessionIdInFile(filePath: string, newSessionId: string): boolean {
512
- try {
513
- if (!fs.existsSync(filePath)) {
514
- return false;
515
- }
516
-
517
- const content = fs.readFileSync(filePath, "utf-8");
518
- const lines = content.split("\n");
519
- const modifiedLines: string[] = [];
520
-
521
- for (const line of lines) {
522
- if (!line.trim()) {
523
- modifiedLines.push(line);
524
- continue;
525
- }
526
-
527
- try {
528
- const parsed = JSON.parse(line);
529
- // Update the sessionId in each line
530
- if (parsed.sessionId && typeof parsed.sessionId === "string") {
531
- parsed.sessionId = newSessionId;
532
- }
533
- modifiedLines.push(JSON.stringify(parsed));
534
- } catch {
535
- // Keep line as-is if it can't be parsed
536
- modifiedLines.push(line);
537
- }
538
- }
539
-
540
- fs.writeFileSync(filePath, modifiedLines.join("\n"), "utf-8");
541
- this.logger.log(`[claude-code-acp] Updated session ID in file: ${filePath}`);
542
- return true;
543
- } catch (err) {
544
- this.logger.error(`[claude-code-acp] Failed to update session ID in file: ${err}`);
545
- return false;
546
- }
547
- }
548
-
549
- /**
550
- * Discover the CLI-assigned session ID by looking for new session files.
551
- * Returns the CLI's session ID if found, or the original sessionId if not.
552
- */
553
- private async discoverCliSessionId(
554
- sessionDir: string,
555
- beforeFiles: Set<string>,
556
- fallbackId: string,
557
- timeout: number = 2000,
558
- ): Promise<string> {
559
- const start = Date.now();
560
- // Pattern for CLI-assigned fork session IDs (agent-xxxxxxx)
561
- const agentPattern = /^agent-[a-f0-9]+\.jsonl$/;
562
-
563
- while (Date.now() - start < timeout) {
564
- if (fs.existsSync(sessionDir)) {
565
- const currentFiles = fs.readdirSync(sessionDir).filter((f) => f.endsWith(".jsonl"));
566
- // Only look for new files that match the agent-xxx pattern
567
- // This prevents picking up renamed UUID files from previous forks
568
- const newFiles = currentFiles.filter((f) => !beforeFiles.has(f) && agentPattern.test(f));
569
-
570
- if (newFiles.length === 1) {
571
- // Found exactly one new agent session file - this is our fork
572
- this.logger.log(`[claude-code-acp] Discovered fork session file: ${newFiles[0]}`);
573
- return newFiles[0].replace(".jsonl", "");
574
- } else if (newFiles.length > 1) {
575
- // Multiple new agent files - try to find the most recent one
576
- let newestFile = "";
577
- let newestMtime = 0;
578
- for (const file of newFiles) {
579
- const filePath = path.join(sessionDir, file);
580
- const stat = fs.statSync(filePath);
581
- if (stat.mtimeMs > newestMtime) {
582
- newestMtime = stat.mtimeMs;
583
- newestFile = file;
584
- }
585
- }
586
- if (newestFile) {
587
- this.logger.log(
588
- `[claude-code-acp] Discovered fork session file (newest of ${newFiles.length}): ${newestFile}`,
589
- );
590
- return newestFile.replace(".jsonl", "");
591
- }
592
- }
593
- }
594
-
595
- await new Promise((resolve) => setTimeout(resolve, 100));
596
- }
597
-
598
- // Timeout - return fallback
599
- this.logger.log(
600
- `[claude-code-acp] Could not discover CLI session ID, using fallback: ${fallbackId}`,
601
- );
602
- return fallbackId;
603
- }
604
-
605
- /**
606
- * Alias for unstable_forkSession for convenience.
607
- */
608
- async forkSession(params: ForkSessionRequest): Promise<ForkSessionResponse> {
609
- return this.unstable_forkSession(params);
610
- }
611
-
612
- /**
613
- * Load an existing session to resume a previous conversation.
614
- * This is the ACP protocol method handler for session/load.
615
- */
616
- async loadSession(params: LoadSessionRequest): Promise<LoadSessionResponse> {
617
- const response = await this.createSession(
618
- {
619
- cwd: params.cwd,
620
- mcpServers: params.mcpServers ?? [],
621
- _meta: params._meta,
622
- },
623
- {
624
- resume: params.sessionId,
625
- },
626
- );
627
-
628
- return response;
629
- }
630
-
631
- /**
632
- * Resume an existing session. This delegates to loadSession for enhanced functionality.
633
- */
634
- async unstable_resumeSession(params: ResumeSessionRequest): Promise<ResumeSessionResponse> {
635
- const response = await this.createSession(
636
- {
637
- cwd: params.cwd,
638
- mcpServers: params.mcpServers ?? [],
639
- _meta: params._meta,
640
- },
641
- {
642
- resume: params.sessionId,
643
- },
644
- );
645
-
646
- return response;
647
- }
648
-
649
- async authenticate(_params: AuthenticateRequest): Promise<void> {
650
- throw new Error("Method not implemented.");
651
- }
652
-
653
- async prompt(params: PromptRequest): Promise<PromptResponse> {
654
- if (!this.sessions[params.sessionId]) {
655
- throw new Error("Session not found");
656
- }
657
-
658
- this.sessions[params.sessionId].cancelled = false;
659
-
660
- const { query, input } = this.sessions[params.sessionId];
661
-
662
- input.push(promptToClaude(params));
663
- while (true) {
664
- const { value: message, done } = await query.next();
665
- if (done || !message) {
666
- if (this.sessions[params.sessionId].cancelled) {
667
- return { stopReason: "cancelled" };
668
- }
669
- break;
670
- }
671
-
672
- switch (message.type) {
673
- case "system":
674
- switch (message.subtype) {
675
- case "init": {
676
- // Capture skills from the SDK init message if available
677
- const session = this.sessions[params.sessionId];
678
- if (session && (message as any).skills) {
679
- session.skills = ((message as any).skills as any[]).map((s: any) => ({
680
- name: s.name ?? s,
681
- description: s.description,
682
- source: s.source,
683
- }));
684
- }
685
- break;
686
- }
687
- case "compact_boundary": {
688
- // Reset token count after compaction
689
- const session = this.sessions[params.sessionId];
690
- if (session) {
691
- const preTokens = message.compact_metadata.pre_tokens;
692
- const trigger = message.compact_metadata.trigger;
693
-
694
- session.compaction.currentTokens = 0;
695
- session.compaction.isCompacting = false;
696
-
697
- this.logger.log(
698
- `[auto-compaction] Compaction completed, token count reset. Previous tokens: ${preTokens}`,
699
- );
700
-
701
- // Emit compaction_completed event to client via extension notification
702
- // (compaction events are not part of the standard ACP SessionUpdate schema)
703
- // Note: Using "_" prefix for SDK 0.13+ compatibility with older client SDKs
704
- await this.client.extNotification("_compaction_completed", {
705
- sessionId: params.sessionId,
706
- trigger: trigger,
707
- preTokens: preTokens,
708
- });
709
- }
710
- break;
711
- }
712
- case "hook_started":
713
- case "task_notification":
714
- case "hook_progress":
715
- case "hook_response":
716
- case "status":
717
- // Todo: process via status api: https://docs.claude.com/en/docs/claude-code/hooks#hook-output
718
- break;
719
- default:
720
- unreachable(message, this.logger);
721
- break;
722
- }
723
- break;
724
- case "result": {
725
- if (this.sessions[params.sessionId].cancelled) {
726
- return { stopReason: "cancelled" };
727
- }
728
-
729
- // Track token usage for auto-compaction
730
- const session = this.sessions[params.sessionId];
731
- if (session && message.usage) {
732
- const totalTokens =
733
- message.usage.input_tokens +
734
- message.usage.output_tokens +
735
- (message.usage.cache_creation_input_tokens ?? 0) +
736
- (message.usage.cache_read_input_tokens ?? 0);
737
- session.compaction.currentTokens += totalTokens;
738
- }
739
-
740
- switch (message.subtype) {
741
- case "success": {
742
- if (message.result.includes("Please run /login")) {
743
- throw RequestError.authRequired();
744
- }
745
- if (message.is_error) {
746
- throw RequestError.internalError(undefined, message.result);
747
- }
748
-
749
- // Check if auto-compaction should be triggered
750
- if (session && (await this.shouldTriggerCompaction(params.sessionId))) {
751
- await this.triggerAutoCompaction(params.sessionId);
752
- // Continue processing - the compaction will happen in the background
753
- }
754
-
755
- return { stopReason: "end_turn" };
756
- }
757
- case "error_during_execution":
758
- if (message.is_error) {
759
- throw RequestError.internalError(
760
- undefined,
761
- message.errors.join(", ") || message.subtype,
762
- );
763
- }
764
- return { stopReason: "end_turn" };
765
- case "error_max_budget_usd":
766
- case "error_max_turns":
767
- case "error_max_structured_output_retries":
768
- if (message.is_error) {
769
- throw RequestError.internalError(
770
- undefined,
771
- message.errors.join(", ") || message.subtype,
772
- );
773
- }
774
- return { stopReason: "max_turn_requests" };
775
- default:
776
- unreachable(message, this.logger);
777
- break;
778
- }
779
- break;
780
- }
781
- case "stream_event": {
782
- for (const notification of streamEventToAcpNotifications(
783
- message,
784
- params.sessionId,
785
- this.toolUseCache,
786
- this.client,
787
- this.logger,
788
- )) {
789
- await this.client.sessionUpdate(notification);
790
- }
791
- break;
792
- }
793
- case "user":
794
- case "assistant": {
795
- if (this.sessions[params.sessionId].cancelled) {
796
- break;
797
- }
798
-
799
- // Slash commands like /compact can generate invalid output... doesn't match
800
- // their own docs: https://docs.anthropic.com/en/docs/claude-code/sdk/sdk-slash-commands#%2Fcompact-compact-conversation-history
801
- if (
802
- typeof message.message.content === "string" &&
803
- message.message.content.includes("<local-command-stdout>")
804
- ) {
805
- // Handle /context by sending its reply as regular agent message.
806
- if (message.message.content.includes("Context Usage")) {
807
- for (const notification of toAcpNotifications(
808
- message.message.content
809
- .replace("<local-command-stdout>", "")
810
- .replace("</local-command-stdout>", ""),
811
- "assistant",
812
- params.sessionId,
813
- this.toolUseCache,
814
- this.client,
815
- this.logger,
816
- )) {
817
- await this.client.sessionUpdate(notification);
818
- }
819
- }
820
- this.logger.log(message.message.content);
821
- break;
822
- }
823
-
824
- if (
825
- typeof message.message.content === "string" &&
826
- message.message.content.includes("<local-command-stderr>")
827
- ) {
828
- this.logger.error(message.message.content);
829
- break;
830
- }
831
- // Skip these user messages for now, since they seem to just be messages we don't want in the feed
832
- if (
833
- message.type === "user" &&
834
- (typeof message.message.content === "string" ||
835
- (Array.isArray(message.message.content) &&
836
- message.message.content.length === 1 &&
837
- message.message.content[0].type === "text"))
838
- ) {
839
- break;
840
- }
841
-
842
- if (
843
- message.type === "assistant" &&
844
- message.message.model === "<synthetic>" &&
845
- Array.isArray(message.message.content) &&
846
- message.message.content.length === 1 &&
847
- message.message.content[0].type === "text" &&
848
- message.message.content[0].text.includes("Please run /login")
849
- ) {
850
- throw RequestError.authRequired();
851
- }
852
-
853
- const content =
854
- message.type === "assistant"
855
- ? // Handled by stream events above
856
- message.message.content.filter((item) => !["text", "thinking"].includes(item.type))
857
- : message.message.content;
858
-
859
- for (const notification of toAcpNotifications(
860
- content,
861
- message.message.role,
862
- params.sessionId,
863
- this.toolUseCache,
864
- this.client,
865
- this.logger,
866
- )) {
867
- await this.client.sessionUpdate(notification);
868
- }
869
- break;
870
- }
871
- case "tool_progress":
872
- case "tool_use_summary":
873
- break;
874
- case "auth_status":
875
- break;
876
- default:
877
- unreachable(message);
878
- break;
879
- }
880
- }
881
- throw new Error("Session did not end in result");
882
- }
883
-
884
- async cancel(params: CancelNotification): Promise<void> {
885
- if (!this.sessions[params.sessionId]) {
886
- throw new Error("Session not found");
887
- }
888
- this.sessions[params.sessionId].cancelled = true;
889
- await this.sessions[params.sessionId].query.interrupt();
890
- }
891
-
892
- /**
893
- * Handle extension methods from the client.
894
- *
895
- * Currently supports:
896
- * - `_session/inject`: Inject a message into an active session mid-execution
897
- * - `_session/flush`: Flush a session to disk for fork-with-flush support
898
- * - `_session/setCompaction`: Configure automatic context compaction for a session
899
- * - `_session/listSkills`: List available skills for a session
900
- */
901
- async extMethod(
902
- method: string,
903
- params: Record<string, unknown>,
904
- ): Promise<Record<string, unknown>> {
905
- if (method === "_session/inject") {
906
- return this.handleSessionInject(
907
- params as { sessionId: string; message: string | PromptRequest["prompt"] },
908
- );
909
- }
910
- if (method === "_session/flush") {
911
- return this.handleSessionFlush(
912
- params as { sessionId: string; idleTimeout?: number; persistTimeout?: number },
913
- );
914
- }
915
- if (method === "_session/setCompaction") {
916
- return this.handleSessionSetCompaction(
917
- params as {
918
- sessionId: string;
919
- enabled: boolean;
920
- contextTokenThreshold?: number;
921
- customInstructions?: string;
922
- },
923
- );
924
- }
925
- if (method === "_session/listSkills") {
926
- return this.handleSessionListSkills(params as { sessionId: string });
927
- }
928
- throw RequestError.methodNotFound(method);
929
- }
930
-
931
- /**
932
- * Inject a message into an active session.
933
- *
934
- * This allows sending additional user input while a prompt() call is actively
935
- * processing. The injected message will be queued and processed by the agent
936
- * as part of the current conversation turn.
937
- *
938
- * Use cases:
939
- * - Providing clarification while the agent is working
940
- * - Adding context mid-execution
941
- * - Sending corrections before a tool completes
942
- *
943
- * @param params.sessionId - The session to inject the message into
944
- * @param params.message - Either a string or an array of ContentBlocks (same format as prompt)
945
- * @returns Success status and any error message
946
- */
947
- private handleSessionInject(params: {
948
- sessionId: string;
949
- message: string | PromptRequest["prompt"];
950
- }): Record<string, unknown> {
951
- const { sessionId, message } = params;
952
- const session = this.sessions[sessionId];
953
-
954
- if (!session) {
955
- return { success: false, error: `Session ${sessionId} not found` };
956
- }
957
-
958
- if (session.cancelled) {
959
- return { success: false, error: `Session ${sessionId} is cancelled` };
960
- }
961
-
962
- try {
963
- // Convert string to ContentBlock array if needed
964
- const prompt: PromptRequest["prompt"] =
965
- typeof message === "string" ? [{ type: "text", text: message }] : message;
966
-
967
- // Create a PromptRequest-like object to reuse promptToClaude
968
- const promptRequest: PromptRequest = {
969
- sessionId,
970
- prompt,
971
- };
972
-
973
- // Convert to SDK format and push to the session's input queue
974
- const sdkMessage = promptToClaude(promptRequest);
975
- session.input.push(sdkMessage);
976
-
977
- this.logger.log(`[claude-code-acp] Injected message into session ${sessionId}`);
978
- return { success: true };
979
- } catch (error) {
980
- this.logger.error(
981
- `[claude-code-acp] Failed to inject message into session ${sessionId}:`,
982
- error,
983
- );
984
- return { success: false, error: String(error) };
985
- }
986
- }
987
-
988
- /**
989
- * Configure automatic context compaction for a session.
990
- *
991
- * When enabled, the session will automatically trigger compaction when token usage
992
- * exceeds the configured threshold. This helps manage context window limits during
993
- * long-running conversations.
994
- *
995
- * @param params.sessionId - The session to configure
996
- * @param params.enabled - Whether automatic compaction is enabled
997
- * @param params.contextTokenThreshold - Token count that triggers compaction (default: 100000)
998
- * @param params.customInstructions - Optional instructions for the compaction summary
999
- * @returns Success status and any error message
1000
- */
1001
- private handleSessionSetCompaction(params: {
1002
- sessionId: string;
1003
- enabled: boolean;
1004
- contextTokenThreshold?: number;
1005
- customInstructions?: string;
1006
- }): Record<string, unknown> {
1007
- const { sessionId, enabled, contextTokenThreshold, customInstructions } = params;
1008
- const session = this.sessions[sessionId];
1009
-
1010
- if (!session) {
1011
- return { success: false, error: `Session ${sessionId} not found` };
1012
- }
1013
-
1014
- try {
1015
- // Update the session's compaction configuration
1016
- session.compaction.enabled = enabled;
1017
-
1018
- if (contextTokenThreshold !== undefined) {
1019
- session.compaction.threshold = contextTokenThreshold;
1020
- }
1021
-
1022
- if (customInstructions !== undefined) {
1023
- session.compaction.customInstructions = customInstructions;
1024
- }
1025
-
1026
- this.logger.log(
1027
- `[claude-code-acp] Updated compaction config for session ${sessionId}: ` +
1028
- `enabled=${enabled}, threshold=${session.compaction.threshold}`,
1029
- );
1030
-
1031
- return { success: true };
1032
- } catch (error) {
1033
- this.logger.error(
1034
- `[claude-code-acp] Failed to set compaction config for session ${sessionId}:`,
1035
- error,
1036
- );
1037
- return { success: false, error: String(error) };
1038
- }
1039
- }
1040
-
1041
- /**
1042
- * List available skills for a session.
1043
- *
1044
- * Skills are loaded based on the session's settingSources and plugins configuration.
1045
- * This method returns the skills that were discovered during session initialization.
1046
- *
1047
- * @param params.sessionId - The session to query skills for
1048
- * @returns Success status, skills array, and any error message
1049
- */
1050
- private handleSessionListSkills(params: { sessionId: string }): Record<string, unknown> {
1051
- const { sessionId } = params;
1052
- const session = this.sessions[sessionId];
1053
-
1054
- if (!session) {
1055
- return { success: false, error: `Session ${sessionId} not found` };
1056
- }
1057
-
1058
- try {
1059
- return {
1060
- success: true,
1061
- skills: session.skills ?? [],
1062
- };
1063
- } catch (error) {
1064
- this.logger.error(`[claude-code-acp] Failed to list skills for session ${sessionId}:`, error);
1065
- return { success: false, error: String(error) };
1066
- }
1067
- }
1068
-
1069
- /**
1070
- * Flush a session to disk by aborting its query subprocess.
1071
- *
1072
- * This is used by the fork-with-flush mechanism to ensure session data
1073
- * is persisted to disk before forking. When the Claude SDK subprocess
1074
- * exits (via abort), it writes the session data to:
1075
- * ~/.claude/projects/<cwd-hash>/<sessionId>.jsonl
1076
- *
1077
- * After this method completes, the session is removed from memory and
1078
- * must be reloaded via loadSession() to continue using it.
1079
- */
1080
- private async handleSessionFlush(params: {
1081
- sessionId: string;
1082
- idleTimeout?: number;
1083
- persistTimeout?: number;
1084
- }): Promise<Record<string, unknown>> {
1085
- const { sessionId, persistTimeout = 5000 } = params;
1086
- const session = this.sessions[sessionId];
1087
-
1088
- if (!session) {
1089
- return { success: false, error: `Session ${sessionId} not found` };
1090
- }
1091
-
1092
- try {
1093
- // Step 1: Mark session as cancelled to stop processing
1094
- session.cancelled = true;
1095
-
1096
- // Step 2: Interrupt any ongoing query work
1097
- await session.query.interrupt();
1098
-
1099
- // Step 3: End the input stream to signal no more input
1100
- session.input.end();
1101
-
1102
- // Step 4: Abort the session using the AbortController
1103
- // This forces the Claude SDK subprocess to exit, which triggers disk persistence
1104
- session.abortController.abort();
1105
-
1106
- // Step 5: Wait for the session file to appear on disk
1107
- // Use stored sessionFilePath for forked sessions (where filename differs from sessionId)
1108
- const sessionFilePath =
1109
- session.sessionFilePath ?? this.getSessionFilePath(sessionId, session.cwd);
1110
- this.logger.log(`[claude-code-acp] Waiting for session file at: ${sessionFilePath}`);
1111
- this.logger.log(`[claude-code-acp] Session cwd: ${session.cwd}`);
1112
- const persisted = await this.waitForSessionFile(sessionFilePath, persistTimeout);
1113
-
1114
- if (!persisted) {
1115
- this.logger.error(
1116
- `[claude-code-acp] Session file not found at ${sessionFilePath} after ${persistTimeout}ms`,
1117
- );
1118
- // Check if file exists at the path
1119
- const exists = fs.existsSync(sessionFilePath);
1120
- this.logger.error(`[claude-code-acp] File exists check: ${exists}`);
1121
- // Still remove the session from memory
1122
- delete this.sessions[sessionId];
1123
- return { success: false, error: `Session file not created within timeout` };
1124
- }
1125
-
1126
- // Step 6: Remove session from our map
1127
- // The client will call loadSession() to reload it from disk
1128
- delete this.sessions[sessionId];
1129
-
1130
- this.logger.log(
1131
- `[claude-code-acp] Session ${sessionId} flushed to disk at ${sessionFilePath}`,
1132
- );
1133
- return { success: true, filePath: sessionFilePath };
1134
- } catch (error) {
1135
- this.logger.error(`[claude-code-acp] Failed to flush session ${sessionId}:`, error);
1136
- // Clean up session on error
1137
- delete this.sessions[sessionId];
1138
- return { success: false, error: String(error) };
1139
- }
1140
- }
1141
-
1142
- /**
1143
- * Get the file path where Claude Code stores session data.
1144
- *
1145
- * Claude Code stores sessions at:
1146
- * ~/.claude/projects/<cwd-hash>/<sessionId>.jsonl
1147
- *
1148
- * Where <cwd-hash> is the cwd with `/` replaced by `-`
1149
- * Note: We resolve the real path to handle macOS symlinks like /var -> /private/var
1150
- */
1151
- private getSessionFilePath(sessionId: string, cwd: string): string {
1152
- // Resolve the real path to handle macOS symlinks like /var -> /private/var
1153
- const realCwd = fs.realpathSync(cwd);
1154
- // Claude Code replaces both / and _ with - in the cwd hash
1155
- const cwdHash = realCwd.replace(/[/_]/g, "-");
1156
- return path.join(os.homedir(), ".claude", "projects", cwdHash, `${sessionId}.jsonl`);
1157
- }
1158
-
1159
- /**
1160
- * Wait for a session file to appear on disk.
1161
- *
1162
- * @param filePath - Path to the session file
1163
- * @param timeout - Maximum time to wait in milliseconds
1164
- * @returns true if file appears, false if timeout
1165
- */
1166
- private async waitForSessionFile(filePath: string, timeout: number): Promise<boolean> {
1167
- const start = Date.now();
1168
- while (Date.now() - start < timeout) {
1169
- if (fs.existsSync(filePath)) {
1170
- return true;
1171
- }
1172
- await new Promise((resolve) => setTimeout(resolve, 100));
1173
- }
1174
- return false;
1175
- }
1176
-
1177
- async unstable_setSessionModel(
1178
- params: SetSessionModelRequest,
1179
- ): Promise<SetSessionModelResponse | void> {
1180
- if (!this.sessions[params.sessionId]) {
1181
- throw new Error("Session not found");
1182
- }
1183
- await this.sessions[params.sessionId].query.setModel(params.modelId);
1184
- }
1185
-
1186
- async setSessionMode(params: SetSessionModeRequest): Promise<SetSessionModeResponse> {
1187
- if (!this.sessions[params.sessionId]) {
1188
- throw new Error("Session not found");
1189
- }
1190
-
1191
- switch (params.modeId) {
1192
- case "default":
1193
- case "acceptEdits":
1194
- case "bypassPermissions":
1195
- case "dontAsk":
1196
- case "plan":
1197
- this.sessions[params.sessionId].permissionMode = params.modeId;
1198
- try {
1199
- await this.sessions[params.sessionId].query.setPermissionMode(params.modeId);
1200
- } catch (error) {
1201
- const errorMessage =
1202
- error instanceof Error && error.message ? error.message : "Invalid Mode";
1203
-
1204
- throw new Error(errorMessage);
1205
- }
1206
- return {};
1207
- default:
1208
- throw new Error("Invalid Mode");
1209
- }
1210
- }
1211
-
1212
- async readTextFile(params: ReadTextFileRequest): Promise<ReadTextFileResponse> {
1213
- const response = await this.client.readTextFile(params);
1214
- return response;
1215
- }
1216
-
1217
- async writeTextFile(params: WriteTextFileRequest): Promise<WriteTextFileResponse> {
1218
- const response = await this.client.writeTextFile(params);
1219
- return response;
1220
- }
1221
-
1222
- canUseTool(sessionId: string): CanUseTool {
1223
- return async (toolName, toolInput, { signal, suggestions, toolUseID }) => {
1224
- const session = this.sessions[sessionId];
1225
- if (!session) {
1226
- return {
1227
- behavior: "deny",
1228
- message: "Session not found",
1229
- interrupt: true,
1230
- };
1231
- }
1232
-
1233
- if (toolName === "ExitPlanMode") {
1234
- const response = await this.client.requestPermission({
1235
- options: [
1236
- {
1237
- kind: "allow_always",
1238
- name: "Yes, and auto-accept edits",
1239
- optionId: "acceptEdits",
1240
- },
1241
- { kind: "allow_once", name: "Yes, and manually approve edits", optionId: "default" },
1242
- { kind: "reject_once", name: "No, keep planning", optionId: "plan" },
1243
- ],
1244
- sessionId,
1245
- toolCall: {
1246
- toolCallId: toolUseID,
1247
- rawInput: toolInput,
1248
- title: toolInfoFromToolUse({ name: toolName, input: toolInput }).title,
1249
- },
1250
- });
1251
-
1252
- if (signal.aborted || response.outcome?.outcome === "cancelled") {
1253
- throw new Error("Tool use aborted");
1254
- }
1255
- if (
1256
- response.outcome?.outcome === "selected" &&
1257
- (response.outcome.optionId === "default" || response.outcome.optionId === "acceptEdits")
1258
- ) {
1259
- session.permissionMode = response.outcome.optionId;
1260
- await this.client.sessionUpdate({
1261
- sessionId,
1262
- update: {
1263
- sessionUpdate: "current_mode_update",
1264
- currentModeId: response.outcome.optionId,
1265
- },
1266
- });
1267
-
1268
- return {
1269
- behavior: "allow",
1270
- updatedInput: toolInput,
1271
- updatedPermissions: suggestions ?? [
1272
- { type: "setMode", mode: response.outcome.optionId, destination: "session" },
1273
- ],
1274
- };
1275
- } else {
1276
- return {
1277
- behavior: "deny",
1278
- message: "User rejected request to exit plan mode.",
1279
- interrupt: true,
1280
- };
1281
- }
1282
- }
1283
-
1284
- if (
1285
- session.permissionMode === "bypassPermissions" ||
1286
- (session.permissionMode === "acceptEdits" && EDIT_TOOL_NAMES.includes(toolName))
1287
- ) {
1288
- return {
1289
- behavior: "allow",
1290
- updatedInput: toolInput,
1291
- updatedPermissions: suggestions ?? [
1292
- { type: "addRules", rules: [{ toolName }], behavior: "allow", destination: "session" },
1293
- ],
1294
- };
1295
- }
1296
-
1297
- const response = await this.client.requestPermission({
1298
- options: [
1299
- {
1300
- kind: "allow_always",
1301
- name: "Always Allow",
1302
- optionId: "allow_always",
1303
- },
1304
- { kind: "allow_once", name: "Allow", optionId: "allow" },
1305
- { kind: "reject_once", name: "Reject", optionId: "reject" },
1306
- ],
1307
- sessionId,
1308
- toolCall: {
1309
- toolCallId: toolUseID,
1310
- rawInput: toolInput,
1311
- title: toolInfoFromToolUse({ name: toolName, input: toolInput }).title,
1312
- },
1313
- });
1314
- if (signal.aborted || response.outcome?.outcome === "cancelled") {
1315
- throw new Error("Tool use aborted");
1316
- }
1317
- if (
1318
- response.outcome?.outcome === "selected" &&
1319
- (response.outcome.optionId === "allow" || response.outcome.optionId === "allow_always")
1320
- ) {
1321
- // If Claude Code has suggestions, it will update their settings already
1322
- if (response.outcome.optionId === "allow_always") {
1323
- return {
1324
- behavior: "allow",
1325
- updatedInput: toolInput,
1326
- updatedPermissions: suggestions ?? [
1327
- {
1328
- type: "addRules",
1329
- rules: [{ toolName }],
1330
- behavior: "allow",
1331
- destination: "session",
1332
- },
1333
- ],
1334
- };
1335
- }
1336
- return {
1337
- behavior: "allow",
1338
- updatedInput: toolInput,
1339
- };
1340
- } else {
1341
- return {
1342
- behavior: "deny",
1343
- message: "User refused permission to run tool",
1344
- interrupt: true,
1345
- };
1346
- }
1347
- };
1348
- }
1349
-
1350
- /**
1351
- * Check if auto-compaction should be triggered based on current token usage.
1352
- */
1353
- private async shouldTriggerCompaction(sessionId: string): Promise<boolean> {
1354
- const session = this.sessions[sessionId];
1355
- if (!session) return false;
1356
-
1357
- const { compaction } = session;
1358
-
1359
- // Check if auto-compaction is enabled and not already in progress
1360
- if (!compaction.enabled || compaction.isCompacting) {
1361
- return false;
1362
- }
1363
-
1364
- // Check if current tokens exceed threshold
1365
- return compaction.currentTokens >= compaction.threshold;
1366
- }
1367
-
1368
- /**
1369
- * Trigger automatic compaction by sending a /compact command.
1370
- */
1371
- private async triggerAutoCompaction(sessionId: string): Promise<void> {
1372
- const session = this.sessions[sessionId];
1373
- if (!session) return;
1374
-
1375
- const { compaction, input } = session;
1376
-
1377
- // Mark compaction as in progress to prevent multiple triggers
1378
- compaction.isCompacting = true;
1379
-
1380
- const preTokens = compaction.currentTokens;
1381
-
1382
- this.logger.log(
1383
- `[auto-compaction] Triggering compaction. Current tokens: ${preTokens}, Threshold: ${compaction.threshold}`,
1384
- );
1385
-
1386
- // Emit compaction_started event to client via extension notification
1387
- // (compaction events are not part of the standard ACP SessionUpdate schema)
1388
- // Note: Using "_" prefix for SDK 0.13+ compatibility with older client SDKs
1389
- await this.client.extNotification("_compaction_started", {
1390
- sessionId,
1391
- trigger: "auto",
1392
- preTokens: preTokens,
1393
- threshold: compaction.threshold,
1394
- });
1395
-
1396
- // Build the compact command with optional custom instructions
1397
- const compactCommand = compaction.customInstructions
1398
- ? `/compact ${compaction.customInstructions}`
1399
- : "/compact";
1400
-
1401
- // Inject the compact command as a user message
1402
- const compactMessage: SDKUserMessage = {
1403
- type: "user",
1404
- message: {
1405
- role: "user",
1406
- content: [{ type: "text", text: compactCommand }],
1407
- },
1408
- session_id: sessionId,
1409
- parent_tool_use_id: null,
1410
- };
1411
-
1412
- input.push(compactMessage);
1413
- }
1414
-
1415
- private async createSession(
1416
- params: NewSessionRequest,
1417
- creationOpts: { resume?: string; forkSession?: boolean } = {},
1418
- ): Promise<NewSessionResponse> {
1419
- // We want to create a new session id unless it is resume,
1420
- // but not resume + forkSession.
1421
- let sessionId;
1422
- if (creationOpts.forkSession) {
1423
- sessionId = randomUUID();
1424
- } else if (creationOpts.resume) {
1425
- sessionId = creationOpts.resume;
1426
- } else {
1427
- sessionId = randomUUID();
1428
- }
1429
-
1430
- const input = new Pushable<SDKUserMessage>();
1431
-
1432
- const settingsManager = new SettingsManager(params.cwd, {
1433
- logger: this.logger,
1434
- });
1435
- await settingsManager.initialize();
1436
-
1437
- const mcpServers: Record<string, McpServerConfig> = {};
1438
- if (Array.isArray(params.mcpServers)) {
1439
- for (const server of params.mcpServers) {
1440
- if ("type" in server) {
1441
- mcpServers[server.name] = {
1442
- type: server.type,
1443
- url: server.url,
1444
- headers: server.headers
1445
- ? Object.fromEntries(server.headers.map((e) => [e.name, e.value]))
1446
- : undefined,
1447
- };
1448
- } else {
1449
- mcpServers[server.name] = {
1450
- type: "stdio",
1451
- command: server.command,
1452
- args: server.args,
1453
- env: server.env
1454
- ? Object.fromEntries(server.env.map((e) => [e.name, e.value]))
1455
- : undefined,
1456
- };
1457
- }
1458
- }
1459
- }
1460
-
1461
- // Only add the acp MCP server if built-in tools are not disabled
1462
- if (!params._meta?.disableBuiltInTools) {
1463
- const server = createMcpServer(this, sessionId, this.clientCapabilities);
1464
- mcpServers["acp"] = {
1465
- type: "sdk",
1466
- name: "acp",
1467
- instance: server,
1468
- };
1469
- }
1470
-
1471
- let systemPrompt: Options["systemPrompt"] = { type: "preset", preset: "claude_code" };
1472
- if (params._meta?.systemPrompt) {
1473
- const customPrompt = params._meta.systemPrompt;
1474
- if (typeof customPrompt === "string") {
1475
- systemPrompt = customPrompt;
1476
- } else if (
1477
- typeof customPrompt === "object" &&
1478
- "append" in customPrompt &&
1479
- typeof customPrompt.append === "string"
1480
- ) {
1481
- systemPrompt.append = customPrompt.append;
1482
- }
1483
- }
1484
-
1485
- const permissionMode = "default";
1486
-
1487
- // Extract options from _meta if provided
1488
- const userProvidedOptions = (params._meta as NewSessionMeta | undefined)?.claudeCode?.options;
1489
- const extraArgs = { ...userProvidedOptions?.extraArgs };
1490
- if (creationOpts?.resume === undefined || creationOpts?.forkSession) {
1491
- // Set our own session id if not resuming an existing session.
1492
- extraArgs["session-id"] = sessionId;
1493
- }
1494
-
1495
- // Configure thinking tokens from environment variable
1496
- const maxThinkingTokens = process.env.MAX_THINKING_TOKENS
1497
- ? parseInt(process.env.MAX_THINKING_TOKENS, 10)
1498
- : undefined;
1499
-
1500
- const options: Options = {
1501
- systemPrompt,
1502
- // Use user-provided settingSources or default to all sources
1503
- settingSources: userProvidedOptions?.settingSources ?? ["user", "project", "local"],
1504
- stderr: (err) => this.logger.error(err),
1505
- ...(maxThinkingTokens !== undefined && { maxThinkingTokens }),
1506
- ...userProvidedOptions,
1507
- // Override certain fields that must be controlled by ACP
1508
- cwd: params.cwd,
1509
- includePartialMessages: true,
1510
- mcpServers: { ...(userProvidedOptions?.mcpServers || {}), ...mcpServers },
1511
- extraArgs,
1512
- // If we want bypassPermissions to be an option, we have to allow it here.
1513
- // But it doesn't work in root mode, so we only activate it if it will work.
1514
- allowDangerouslySkipPermissions: !IS_ROOT,
1515
- permissionMode,
1516
- canUseTool: this.canUseTool(sessionId),
1517
- // note: although not documented by the types, passing an absolute path
1518
- // here works to find zed's managed node version.
1519
- executable: process.execPath as any,
1520
- ...(process.env.CLAUDE_CODE_EXECUTABLE && {
1521
- pathToClaudeCodeExecutable: process.env.CLAUDE_CODE_EXECUTABLE,
1522
- }),
1523
- tools: { type: "preset", preset: "claude_code" },
1524
- hooks: {
1525
- ...userProvidedOptions?.hooks,
1526
- PreToolUse: [
1527
- ...(userProvidedOptions?.hooks?.PreToolUse || []),
1528
- {
1529
- hooks: [createPreToolUseHook(settingsManager, this.logger)],
1530
- },
1531
- ],
1532
- PostToolUse: [
1533
- ...(userProvidedOptions?.hooks?.PostToolUse || []),
1534
- {
1535
- hooks: [createPostToolUseHook(this.logger)],
1536
- },
1537
- ],
1538
- },
1539
- ...creationOpts,
1540
- };
1541
-
1542
- // Start with user-provided tools lists, then add ACP-managed tools
1543
- const allowedTools = [...(userProvidedOptions?.allowedTools ?? [])];
1544
- // Disable AskUserQuestion for now, not a great way to expose this over ACP at the moment (in progress work so we can revisit)
1545
- const disallowedTools = ["AskUserQuestion", ...(userProvidedOptions?.disallowedTools ?? [])];
1546
-
1547
- // Check if built-in tools should be disabled
1548
- const disableBuiltInTools = params._meta?.disableBuiltInTools === true;
1549
-
1550
- if (!disableBuiltInTools) {
1551
- if (this.clientCapabilities?.fs?.readTextFile) {
1552
- allowedTools.push(acpToolNames.read);
1553
- disallowedTools.push("Read");
1554
- }
1555
- if (this.clientCapabilities?.fs?.writeTextFile) {
1556
- disallowedTools.push("Write", "Edit");
1557
- }
1558
- if (this.clientCapabilities?.terminal) {
1559
- allowedTools.push(acpToolNames.bashOutput, acpToolNames.killShell);
1560
- disallowedTools.push("Bash", "BashOutput", "KillShell");
1561
- }
1562
- } else {
1563
- // When built-in tools are disabled, explicitly disallow all of them
1564
- disallowedTools.push(
1565
- acpToolNames.read,
1566
- acpToolNames.write,
1567
- acpToolNames.edit,
1568
- acpToolNames.bash,
1569
- acpToolNames.bashOutput,
1570
- acpToolNames.killShell,
1571
- "Read",
1572
- "Write",
1573
- "Edit",
1574
- "Bash",
1575
- "BashOutput",
1576
- "KillShell",
1577
- "Glob",
1578
- "Grep",
1579
- "Task",
1580
- "TodoWrite",
1581
- "ExitPlanMode",
1582
- "WebSearch",
1583
- "WebFetch",
1584
- "AskUserQuestion",
1585
- "SlashCommand",
1586
- "Skill",
1587
- "NotebookEdit",
1588
- );
1589
- }
1590
-
1591
- if (allowedTools.length > 0) {
1592
- options.allowedTools = allowedTools;
1593
- }
1594
- if (disallowedTools.length > 0) {
1595
- options.disallowedTools = disallowedTools;
1596
- }
1597
-
1598
- // Create our own AbortController for session management
1599
- const sessionAbortController = new AbortController();
1600
-
1601
- // Handle abort controller from meta options (user can still provide one)
1602
- const userAbortController = userProvidedOptions?.abortController;
1603
- if (userAbortController?.signal.aborted) {
1604
- throw new Error("Cancelled");
1605
- }
1606
-
1607
- // Pass the abort controller to the query options
1608
- options.abortController = sessionAbortController;
1609
-
1610
- const q = query({
1611
- prompt: input,
1612
- options,
1613
- });
1614
-
1615
- // Extract compaction config from _meta if provided
1616
- const compactionConfig = (params._meta as NewSessionMeta | undefined)?.claudeCode?.compaction;
1617
- const compactionState: CompactionState = {
1618
- enabled: compactionConfig?.enabled ?? false,
1619
- threshold: compactionConfig?.contextTokenThreshold ?? 100000,
1620
- customInstructions: compactionConfig?.customInstructions,
1621
- currentTokens: 0,
1622
- isCompacting: false,
1623
- };
1624
-
1625
- this.sessions[sessionId] = {
1626
- query: q,
1627
- input: input,
1628
- cancelled: false,
1629
- permissionMode,
1630
- settingsManager,
1631
- abortController: sessionAbortController,
1632
- cwd: params.cwd,
1633
- compaction: compactionState,
1634
- };
1635
-
1636
- // Fetch commands and models in the background to avoid blocking session creation.
1637
- // These calls wait for the Claude Code subprocess to initialize, which can be slow.
1638
- // Results are sent via sessionUpdate; models via extension notification (_model_state_update).
1639
- void (async () => {
1640
- try {
1641
- const [availableCommands, models] = await Promise.all([
1642
- getAvailableSlashCommands(q),
1643
- getAvailableModels(q),
1644
- ]);
1645
- this.client.sessionUpdate({
1646
- sessionId,
1647
- update: {
1648
- sessionUpdate: "available_commands_update",
1649
- availableCommands,
1650
- },
1651
- });
1652
- this.client.extNotification("_model_state_update", {
1653
- sessionId,
1654
- models,
1655
- });
1656
- } catch (e) {
1657
- this.logger.error("Failed to fetch session metadata:", e);
1658
- }
1659
- })();
1660
-
1661
- const availableModes = [
1662
- {
1663
- id: "default",
1664
- name: "Default",
1665
- description: "Standard behavior, prompts for dangerous operations",
1666
- },
1667
- {
1668
- id: "acceptEdits",
1669
- name: "Accept Edits",
1670
- description: "Auto-accept file edit operations",
1671
- },
1672
- {
1673
- id: "plan",
1674
- name: "Plan Mode",
1675
- description: "Planning mode, no actual tool execution",
1676
- },
1677
- {
1678
- id: "dontAsk",
1679
- name: "Don't Ask",
1680
- description: "Don't prompt for permissions, deny if not pre-approved",
1681
- },
1682
- ];
1683
- // Only works in non-root mode
1684
- if (!IS_ROOT) {
1685
- availableModes.push({
1686
- id: "bypassPermissions",
1687
- name: "Bypass Permissions",
1688
- description: "Bypass all permission checks",
1689
- });
1690
- }
1691
-
1692
- return {
1693
- sessionId,
1694
- models: null,
1695
- modes: {
1696
- currentModeId: permissionMode,
1697
- availableModes,
1698
- },
1699
- };
1700
- }
1701
- }
1702
-
1703
- async function getAvailableModels(query: Query): Promise<SessionModelState> {
1704
- const models = await query.supportedModels();
1705
-
1706
- // Query doesn't give us access to the currently selected model, so we just choose the first model in the list.
1707
- const currentModel = models[0];
1708
- await query.setModel(currentModel.value);
1709
-
1710
- const availableModels = models.map((model) => ({
1711
- modelId: model.value,
1712
- name: model.displayName,
1713
- description: model.description,
1714
- }));
1715
-
1716
- return {
1717
- availableModels,
1718
- currentModelId: currentModel.value,
1719
- };
1720
- }
1721
-
1722
- async function getAvailableSlashCommands(query: Query): Promise<AvailableCommand[]> {
1723
- const UNSUPPORTED_COMMANDS = [
1724
- "cost",
1725
- "login",
1726
- "logout",
1727
- "output-style:new",
1728
- "release-notes",
1729
- "todos",
1730
- ];
1731
- const commands = await query.supportedCommands();
1732
-
1733
- return commands
1734
- .map((command) => {
1735
- const input = command.argumentHint
1736
- ? {
1737
- hint: Array.isArray(command.argumentHint)
1738
- ? command.argumentHint.join(" ")
1739
- : command.argumentHint,
1740
- }
1741
- : null;
1742
- let name = command.name;
1743
- if (command.name.endsWith(" (MCP)")) {
1744
- name = `mcp:${name.replace(" (MCP)", "")}`;
1745
- }
1746
- return {
1747
- name,
1748
- description: command.description || "",
1749
- input,
1750
- };
1751
- })
1752
- .filter((command: AvailableCommand) => !UNSUPPORTED_COMMANDS.includes(command.name));
1753
- }
1754
-
1755
- function formatUriAsLink(uri: string): string {
1756
- try {
1757
- if (uri.startsWith("file://")) {
1758
- const path = uri.slice(7); // Remove "file://"
1759
- const name = path.split("/").pop() || path;
1760
- return `[@${name}](${uri})`;
1761
- } else if (uri.startsWith("zed://")) {
1762
- const parts = uri.split("/");
1763
- const name = parts[parts.length - 1] || uri;
1764
- return `[@${name}](${uri})`;
1765
- }
1766
- return uri;
1767
- } catch {
1768
- return uri;
1769
- }
1770
- }
1771
-
1772
- export function promptToClaude(prompt: PromptRequest): SDKUserMessage {
1773
- const content: any[] = [];
1774
- const context: any[] = [];
1775
-
1776
- for (const chunk of prompt.prompt) {
1777
- switch (chunk.type) {
1778
- case "text": {
1779
- let text = chunk.text;
1780
- // change /mcp:server:command args -> /server:command (MCP) args
1781
- const mcpMatch = text.match(/^\/mcp:([^:\s]+):(\S+)(\s+.*)?$/);
1782
- if (mcpMatch) {
1783
- const [, server, command, args] = mcpMatch;
1784
- text = `/${server}:${command} (MCP)${args || ""}`;
1785
- }
1786
- content.push({ type: "text", text });
1787
- break;
1788
- }
1789
- case "resource_link": {
1790
- const formattedUri = formatUriAsLink(chunk.uri);
1791
- content.push({
1792
- type: "text",
1793
- text: formattedUri,
1794
- });
1795
- break;
1796
- }
1797
- case "resource": {
1798
- if ("text" in chunk.resource) {
1799
- const formattedUri = formatUriAsLink(chunk.resource.uri);
1800
- content.push({
1801
- type: "text",
1802
- text: formattedUri,
1803
- });
1804
- context.push({
1805
- type: "text",
1806
- text: `\n<context ref="${chunk.resource.uri}">\n${chunk.resource.text}\n</context>`,
1807
- });
1808
- }
1809
- // Ignore blob resources (unsupported)
1810
- break;
1811
- }
1812
- case "image":
1813
- if (chunk.data) {
1814
- content.push({
1815
- type: "image",
1816
- source: {
1817
- type: "base64",
1818
- data: chunk.data,
1819
- media_type: chunk.mimeType,
1820
- },
1821
- });
1822
- } else if (chunk.uri && chunk.uri.startsWith("http")) {
1823
- content.push({
1824
- type: "image",
1825
- source: {
1826
- type: "url",
1827
- url: chunk.uri,
1828
- },
1829
- });
1830
- }
1831
- break;
1832
- // Ignore audio and other unsupported types
1833
- default:
1834
- break;
1835
- }
1836
- }
1837
-
1838
- content.push(...context);
1839
-
1840
- return {
1841
- type: "user",
1842
- message: {
1843
- role: "user",
1844
- content: content,
1845
- },
1846
- session_id: prompt.sessionId,
1847
- parent_tool_use_id: null,
1848
- };
1849
- }
1850
-
1851
- /**
1852
- * Convert an SDKAssistantMessage (Claude) to a SessionNotification (ACP).
1853
- * Only handles text, image, and thinking chunks for now.
1854
- */
1855
- export function toAcpNotifications(
1856
- content: string | ContentBlockParam[] | BetaContentBlock[] | BetaRawContentBlockDelta[],
1857
- role: "assistant" | "user",
1858
- sessionId: string,
1859
- toolUseCache: ToolUseCache,
1860
- client: AgentSideConnection,
1861
- logger: Logger,
1862
- ): SessionNotification[] {
1863
- if (typeof content === "string") {
1864
- return [
1865
- {
1866
- sessionId,
1867
- update: {
1868
- sessionUpdate: role === "assistant" ? "agent_message_chunk" : "user_message_chunk",
1869
- content: {
1870
- type: "text",
1871
- text: content,
1872
- },
1873
- },
1874
- },
1875
- ];
1876
- }
1877
-
1878
- const output = [];
1879
- // Only handle the first chunk for streaming; extend as needed for batching
1880
- for (const chunk of content) {
1881
- let update: SessionNotification["update"] | null = null;
1882
- switch (chunk.type) {
1883
- case "text":
1884
- case "text_delta":
1885
- update = {
1886
- sessionUpdate: role === "assistant" ? "agent_message_chunk" : "user_message_chunk",
1887
- content: {
1888
- type: "text",
1889
- text: chunk.text,
1890
- },
1891
- };
1892
- break;
1893
- case "image":
1894
- update = {
1895
- sessionUpdate: role === "assistant" ? "agent_message_chunk" : "user_message_chunk",
1896
- content: {
1897
- type: "image",
1898
- data: chunk.source.type === "base64" ? chunk.source.data : "",
1899
- mimeType: chunk.source.type === "base64" ? chunk.source.media_type : "",
1900
- uri: chunk.source.type === "url" ? chunk.source.url : undefined,
1901
- },
1902
- };
1903
- break;
1904
- case "thinking":
1905
- case "thinking_delta":
1906
- update = {
1907
- sessionUpdate: "agent_thought_chunk",
1908
- content: {
1909
- type: "text",
1910
- text: chunk.thinking,
1911
- },
1912
- };
1913
- break;
1914
- case "tool_use":
1915
- case "server_tool_use":
1916
- case "mcp_tool_use": {
1917
- toolUseCache[chunk.id] = chunk;
1918
- if (chunk.name === "TodoWrite") {
1919
- // @ts-expect-error - sometimes input is empty object
1920
- if (Array.isArray(chunk.input.todos)) {
1921
- update = {
1922
- sessionUpdate: "plan",
1923
- entries: planEntries(chunk.input as { todos: ClaudePlanEntry[] }),
1924
- };
1925
- }
1926
- } else {
1927
- // Register hook callback to receive the structured output from the hook
1928
- registerHookCallback(chunk.id, {
1929
- onPostToolUseHook: async (toolUseId, toolInput, toolResponse) => {
1930
- const toolUse = toolUseCache[toolUseId];
1931
- if (toolUse) {
1932
- const update: SessionNotification["update"] = {
1933
- _meta: {
1934
- claudeCode: {
1935
- toolResponse,
1936
- toolName: toolUse.name,
1937
- },
1938
- } satisfies ToolUpdateMeta,
1939
- toolCallId: toolUseId,
1940
- sessionUpdate: "tool_call_update",
1941
- };
1942
- await client.sessionUpdate({
1943
- sessionId,
1944
- update,
1945
- });
1946
- } else {
1947
- logger.error(
1948
- `[claude-code-acp] Got a tool response for tool use that wasn't tracked: ${toolUseId}`,
1949
- );
1950
- }
1951
- },
1952
- });
1953
-
1954
- let rawInput;
1955
- try {
1956
- rawInput = JSON.parse(JSON.stringify(chunk.input));
1957
- } catch {
1958
- // ignore if we can't turn it to JSON
1959
- }
1960
- update = {
1961
- _meta: {
1962
- claudeCode: {
1963
- toolName: chunk.name,
1964
- },
1965
- } satisfies ToolUpdateMeta,
1966
- toolCallId: chunk.id,
1967
- sessionUpdate: "tool_call",
1968
- rawInput,
1969
- status: "pending",
1970
- ...toolInfoFromToolUse(chunk),
1971
- };
1972
- }
1973
- break;
1974
- }
1975
-
1976
- case "tool_result":
1977
- case "tool_search_tool_result":
1978
- case "web_fetch_tool_result":
1979
- case "web_search_tool_result":
1980
- case "code_execution_tool_result":
1981
- case "bash_code_execution_tool_result":
1982
- case "text_editor_code_execution_tool_result":
1983
- case "mcp_tool_result": {
1984
- const toolUse = toolUseCache[chunk.tool_use_id];
1985
- if (!toolUse) {
1986
- logger.error(
1987
- `[claude-code-acp] Got a tool result for tool use that wasn't tracked: ${chunk.tool_use_id}`,
1988
- );
1989
- break;
1990
- }
1991
-
1992
- if (toolUse.name !== "TodoWrite") {
1993
- update = {
1994
- _meta: {
1995
- claudeCode: {
1996
- toolName: toolUse.name,
1997
- },
1998
- } satisfies ToolUpdateMeta,
1999
- toolCallId: chunk.tool_use_id,
2000
- sessionUpdate: "tool_call_update",
2001
- status: "is_error" in chunk && chunk.is_error ? "failed" : "completed",
2002
- rawOutput: chunk.content,
2003
- ...toolUpdateFromToolResult(chunk, toolUseCache[chunk.tool_use_id]),
2004
- };
2005
- }
2006
- break;
2007
- }
2008
-
2009
- case "document":
2010
- case "search_result":
2011
- case "redacted_thinking":
2012
- case "input_json_delta":
2013
- case "citations_delta":
2014
- case "signature_delta":
2015
- case "container_upload":
2016
- break;
2017
-
2018
- default:
2019
- unreachable(chunk, logger);
2020
- break;
2021
- }
2022
- if (update) {
2023
- output.push({ sessionId, update });
2024
- }
2025
- }
2026
-
2027
- return output;
2028
- }
2029
-
2030
- export function streamEventToAcpNotifications(
2031
- message: SDKPartialAssistantMessage,
2032
- sessionId: string,
2033
- toolUseCache: ToolUseCache,
2034
- client: AgentSideConnection,
2035
- logger: Logger,
2036
- ): SessionNotification[] {
2037
- const event = message.event;
2038
- switch (event.type) {
2039
- case "content_block_start":
2040
- return toAcpNotifications(
2041
- [event.content_block],
2042
- "assistant",
2043
- sessionId,
2044
- toolUseCache,
2045
- client,
2046
- logger,
2047
- );
2048
- case "content_block_delta":
2049
- return toAcpNotifications(
2050
- [event.delta],
2051
- "assistant",
2052
- sessionId,
2053
- toolUseCache,
2054
- client,
2055
- logger,
2056
- );
2057
- // No content
2058
- case "message_start":
2059
- case "message_delta":
2060
- case "message_stop":
2061
- case "content_block_stop":
2062
- return [];
2063
-
2064
- default:
2065
- unreachable(event, logger);
2066
- return [];
2067
- }
2068
- }
2069
-
2070
- export function runAcp() {
2071
- const input = nodeToWebWritable(process.stdout);
2072
- const output = nodeToWebReadable(process.stdin);
2073
-
2074
- const stream = ndJsonStream(input, output);
2075
- new AgentSideConnection((client) => new ClaudeAcpAgent(client), stream);
2076
- }