@xopcai/xopc 0.0.6 → 0.0.8

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 (291) hide show
  1. package/dist/extensions/telegram/src/plugin.js +1 -1
  2. package/dist/extensions/telegram/src/routing-integration.js +2 -2
  3. package/dist/extensions/weixin/src/api/api.js +1 -1
  4. package/dist/extensions/weixin/src/cdn/upload.js +1 -1
  5. package/dist/extensions/weixin/src/media/data-url.js +1 -1
  6. package/dist/extensions/weixin/src/messaging/process-message.js +1 -1
  7. package/dist/extensions/weixin/src/plugin.js +1 -1
  8. package/dist/gateway/static/root/assets/{agents-B6s2BvpH.js → agents-BSNzJWbQ.js} +2 -2
  9. package/dist/gateway/static/root/assets/{agents-B6s2BvpH.js.map → agents-BSNzJWbQ.js.map} +1 -1
  10. package/dist/gateway/static/root/assets/{apps-page-BtsZ5ZPx.js → apps-page-BKk9SB4D.js} +2 -2
  11. package/dist/gateway/static/root/assets/{apps-page-BtsZ5ZPx.js.map → apps-page-BKk9SB4D.js.map} +1 -1
  12. package/dist/gateway/static/root/assets/attachment-load-DXcJLSWT.js +1 -0
  13. package/dist/gateway/static/root/assets/{channels-settings-BUfWBEVU.js → channels-settings-_J6cQN6G.js} +2 -2
  14. package/dist/gateway/static/root/assets/{channels-settings-BUfWBEVU.js.map → channels-settings-_J6cQN6G.js.map} +1 -1
  15. package/dist/gateway/static/root/assets/{chat-agents-api-BR30M2YQ.js → chat-agents-api-DPb_0O8M.js} +2 -2
  16. package/dist/gateway/static/root/assets/{chat-agents-api-BR30M2YQ.js.map → chat-agents-api-DPb_0O8M.js.map} +1 -1
  17. package/dist/gateway/static/root/assets/{cron-page-CMTx0Mjz.js → cron-page-BUJOuuKX.js} +2 -2
  18. package/dist/gateway/static/root/assets/{cron-page-CMTx0Mjz.js.map → cron-page-BUJOuuKX.js.map} +1 -1
  19. package/dist/gateway/static/root/assets/{cron-utils-BJma9IcD.js → cron-utils-Cn0YVg8x.js} +2 -2
  20. package/dist/gateway/static/root/assets/{cron-utils-BJma9IcD.js.map → cron-utils-Cn0YVg8x.js.map} +1 -1
  21. package/dist/gateway/static/root/assets/electron-env-D9bm1FIu.js +2 -0
  22. package/dist/gateway/static/root/assets/electron-env-D9bm1FIu.js.map +1 -0
  23. package/dist/gateway/static/root/assets/{extension-debug-page-BCVoNSo6.js → extension-debug-page-DTz4O5Ua.js} +2 -2
  24. package/dist/gateway/static/root/assets/{extension-debug-page-BCVoNSo6.js.map → extension-debug-page-DTz4O5Ua.js.map} +1 -1
  25. package/dist/gateway/static/root/assets/{extension-iframe-host-PWB-Pw2d.js → extension-iframe-host-Cs1Kde9o.js} +2 -2
  26. package/dist/gateway/static/root/assets/{extension-iframe-host-PWB-Pw2d.js.map → extension-iframe-host-Cs1Kde9o.js.map} +1 -1
  27. package/dist/gateway/static/root/assets/{extension-page-D2tTklsD.js → extension-page-G52iX0Bo.js} +2 -2
  28. package/dist/gateway/static/root/assets/{extension-page-D2tTklsD.js.map → extension-page-G52iX0Bo.js.map} +1 -1
  29. package/dist/gateway/static/root/assets/{extension-provider-BpHodVRj.js → extension-provider-CO2jxBA9.js} +2 -2
  30. package/dist/gateway/static/root/assets/{extension-provider-BpHodVRj.js.map → extension-provider-CO2jxBA9.js.map} +1 -1
  31. package/dist/gateway/static/root/assets/{extension-settings-page-BEu6Xw1Z.js → extension-settings-page-D9Ul8uSt.js} +2 -2
  32. package/dist/gateway/static/root/assets/{extension-settings-page-BEu6Xw1Z.js.map → extension-settings-page-D9Ul8uSt.js.map} +1 -1
  33. package/dist/gateway/static/root/assets/{gateway-config-swr-C7ZFPhNj.js → gateway-config-swr-Bc8SVD15.js} +2 -2
  34. package/dist/gateway/static/root/assets/{gateway-config-swr-C7ZFPhNj.js.map → gateway-config-swr-Bc8SVD15.js.map} +1 -1
  35. package/dist/gateway/static/root/assets/index-BXUJbteW.js +16 -0
  36. package/dist/gateway/static/root/assets/index-BXUJbteW.js.map +1 -0
  37. package/dist/gateway/static/root/assets/index-CQLMxWSA.css +2 -0
  38. package/dist/gateway/static/root/assets/{logs-page-BpsxYdcL.js → logs-page-5V25JkQY.js} +2 -2
  39. package/dist/gateway/static/root/assets/{logs-page-BpsxYdcL.js.map → logs-page-5V25JkQY.js.map} +1 -1
  40. package/dist/gateway/static/root/assets/{model-selector-BiiDq8Pk.js → model-selector-he3aQfme.js} +2 -2
  41. package/dist/gateway/static/root/assets/{model-selector-BiiDq8Pk.js.map → model-selector-he3aQfme.js.map} +1 -1
  42. package/dist/gateway/static/root/assets/navigation-DB9S-C6S.js +2 -0
  43. package/dist/gateway/static/root/assets/navigation-DB9S-C6S.js.map +1 -0
  44. package/dist/gateway/static/root/assets/page-header-store-DJHD9Ean.js +2 -0
  45. package/dist/gateway/static/root/assets/{page-header-store-HcRZK5CZ.js.map → page-header-store-DJHD9Ean.js.map} +1 -1
  46. package/dist/gateway/static/root/assets/{session-api-DxNaAkmX.js → session-api-n-4O5d9U.js} +2 -2
  47. package/dist/gateway/static/root/assets/{session-api-DxNaAkmX.js.map → session-api-n-4O5d9U.js.map} +1 -1
  48. package/dist/gateway/static/root/assets/{session-working-directory-control-CDH-Wk4E.js → session-working-directory-control-B6dHLvbr.js} +3 -3
  49. package/dist/gateway/static/root/assets/{session-working-directory-control-CDH-Wk4E.js.map → session-working-directory-control-B6dHLvbr.js.map} +1 -1
  50. package/dist/gateway/static/root/assets/{sessions-page-5PK75r1n.js → sessions-page-rBUfTdm3.js} +2 -2
  51. package/dist/gateway/static/root/assets/{sessions-page-5PK75r1n.js.map → sessions-page-rBUfTdm3.js.map} +1 -1
  52. package/dist/gateway/static/root/assets/settings-page-B3QrJm-E.js +2 -0
  53. package/dist/gateway/static/root/assets/settings-page-B3QrJm-E.js.map +1 -0
  54. package/dist/gateway/static/root/assets/{skill-api-CxbNlOD_.js → skill-api-vxtE8kI6.js} +2 -2
  55. package/dist/gateway/static/root/assets/{skill-api-CxbNlOD_.js.map → skill-api-vxtE8kI6.js.map} +1 -1
  56. package/dist/gateway/static/root/assets/{skills-page-Dd8ZzYJb.js → skills-page-D36_O2Ub.js} +2 -2
  57. package/dist/gateway/static/root/assets/{skills-page-Dd8ZzYJb.js.map → skills-page-D36_O2Ub.js.map} +1 -1
  58. package/dist/gateway/static/root/assets/{theme-store-CPTH77BE.js → theme-store-CmiSsYBd.js} +2 -2
  59. package/dist/gateway/static/root/assets/{theme-store-CPTH77BE.js.map → theme-store-CmiSsYBd.js.map} +1 -1
  60. package/dist/gateway/static/root/assets/url-CtSqjF9J.js +2 -0
  61. package/dist/gateway/static/root/assets/url-CtSqjF9J.js.map +1 -0
  62. package/dist/gateway/static/root/assets/{useTranslation-BEUWOMuh.js → useTranslation-DYORQ7x6.js} +2 -2
  63. package/dist/gateway/static/root/assets/{useTranslation-BEUWOMuh.js.map → useTranslation-DYORQ7x6.js.map} +1 -1
  64. package/dist/gateway/static/root/index.html +16 -16
  65. package/dist/package.js +1 -1
  66. package/dist/src/agent/agent-manager.js +4 -4
  67. package/dist/src/agent/context/workspace-seed.js +2 -2
  68. package/dist/src/agent/image/index.d.ts +0 -1
  69. package/dist/src/agent/image/index.js +1 -2
  70. package/dist/src/agent/ipc/bus.js +1 -1
  71. package/dist/src/agent/memory/plugin-discovery.js +1 -1
  72. package/dist/src/agent/models/manager.js +1 -1
  73. package/dist/src/agent/prompt/service-prompt-builder.js +1 -1
  74. package/dist/src/agent/service.js +3 -3
  75. package/dist/src/agent/skills/hub-hash.js +1 -1
  76. package/dist/src/agent/skills/hub-pull.js +1 -1
  77. package/dist/src/agent/skills/index.js +1 -1
  78. package/dist/src/agent/skills/skill-manager.js +1 -1
  79. package/dist/src/agent/tools/browser/tools.js +2 -2
  80. package/dist/src/agent/tools/browser/tools.js.map +1 -1
  81. package/dist/src/agent/tools/factory.js +1 -1
  82. package/dist/src/agent/tools/image-generate-tool.js +1 -1
  83. package/dist/src/agent/tools/image-tool.js +2 -2
  84. package/dist/src/agent/tools/image-tool.js.map +1 -1
  85. package/dist/src/agent/tools/index.d.ts +1 -1
  86. package/dist/src/agent/tools/index.js +2 -2
  87. package/dist/src/agent/tools/read.d.ts +0 -2
  88. package/dist/src/agent/tools/read.js +1 -3
  89. package/dist/src/agent/tools/read.js.map +1 -1
  90. package/dist/src/agent/tools/send-media.js +1 -1
  91. package/dist/src/auth/sync-provider-auth.js +1 -1
  92. package/dist/src/channels/plugin-types.d.ts +14 -0
  93. package/dist/src/cli/commands/agent.js +1 -1
  94. package/dist/src/cli/commands/doctor/checks/channel-config.d.ts +2 -0
  95. package/dist/src/cli/commands/doctor/checks/channel-config.js +113 -0
  96. package/dist/src/cli/commands/doctor/checks/channel-config.js.map +1 -0
  97. package/dist/src/cli/commands/doctor/checks/channel-plugins.d.ts +2 -0
  98. package/dist/src/cli/commands/doctor/checks/channel-plugins.js +47 -0
  99. package/dist/src/cli/commands/doctor/checks/channel-plugins.js.map +1 -0
  100. package/dist/src/cli/commands/doctor/checks/config-health.d.ts +2 -0
  101. package/dist/src/cli/commands/doctor/checks/config-health.js +82 -0
  102. package/dist/src/cli/commands/doctor/checks/config-health.js.map +1 -0
  103. package/dist/src/cli/commands/doctor/checks/cron-health.d.ts +2 -0
  104. package/dist/src/cli/commands/doctor/checks/cron-health.js +116 -0
  105. package/dist/src/cli/commands/doctor/checks/cron-health.js.map +1 -0
  106. package/dist/src/cli/commands/doctor/checks/gateway-health.d.ts +2 -0
  107. package/dist/src/cli/commands/doctor/checks/gateway-health.js +64 -0
  108. package/dist/src/cli/commands/doctor/checks/gateway-health.js.map +1 -0
  109. package/dist/src/cli/commands/doctor/checks/gateway-service.d.ts +2 -0
  110. package/dist/src/cli/commands/doctor/checks/gateway-service.js +64 -0
  111. package/dist/src/cli/commands/doctor/checks/gateway-service.js.map +1 -0
  112. package/dist/src/cli/commands/doctor/checks/node-version.d.ts +2 -0
  113. package/dist/src/cli/commands/doctor/checks/node-version.js +33 -0
  114. package/dist/src/cli/commands/doctor/checks/node-version.js.map +1 -0
  115. package/dist/src/cli/commands/doctor/checks/provider-auth.d.ts +2 -0
  116. package/dist/src/cli/commands/doctor/checks/provider-auth.js +91 -0
  117. package/dist/src/cli/commands/doctor/checks/provider-auth.js.map +1 -0
  118. package/dist/src/cli/commands/doctor/checks/security-audit.d.ts +2 -0
  119. package/dist/src/cli/commands/doctor/checks/security-audit.js +85 -0
  120. package/dist/src/cli/commands/doctor/checks/security-audit.js.map +1 -0
  121. package/dist/src/cli/commands/doctor/checks/session-integrity.d.ts +2 -0
  122. package/dist/src/cli/commands/doctor/checks/session-integrity.js +118 -0
  123. package/dist/src/cli/commands/doctor/checks/session-integrity.js.map +1 -0
  124. package/dist/src/cli/commands/doctor/checks/state-integrity.d.ts +2 -0
  125. package/dist/src/cli/commands/doctor/checks/state-integrity.js +99 -0
  126. package/dist/src/cli/commands/doctor/checks/state-integrity.js.map +1 -0
  127. package/dist/src/cli/commands/doctor/checks/version-check.d.ts +2 -0
  128. package/dist/src/cli/commands/doctor/checks/version-check.js +71 -0
  129. package/dist/src/cli/commands/doctor/checks/version-check.js.map +1 -0
  130. package/dist/src/cli/commands/doctor/checks/workspace-status.d.ts +2 -0
  131. package/dist/src/cli/commands/doctor/checks/workspace-status.js +73 -0
  132. package/dist/src/cli/commands/doctor/checks/workspace-status.js.map +1 -0
  133. package/dist/src/cli/commands/doctor/flow.d.ts +9 -0
  134. package/dist/src/cli/commands/doctor/flow.js +51 -0
  135. package/dist/src/cli/commands/doctor/flow.js.map +1 -0
  136. package/dist/src/cli/commands/doctor/format.d.ts +6 -0
  137. package/dist/src/cli/commands/doctor/format.js +61 -0
  138. package/dist/src/cli/commands/doctor/format.js.map +1 -0
  139. package/dist/src/cli/commands/doctor/index.js +44 -0
  140. package/dist/src/cli/commands/doctor/index.js.map +1 -0
  141. package/dist/src/cli/commands/doctor/types.d.ts +20 -0
  142. package/dist/src/cli/commands/doctor/types.js +1 -0
  143. package/dist/src/cli/commands/init.js +2 -2
  144. package/dist/src/cli/index.d.ts +1 -1
  145. package/dist/src/cli/index.js +1 -1
  146. package/dist/src/cli/index.js.map +1 -1
  147. package/dist/src/cli/utils/init-workspace.js +1 -1
  148. package/dist/src/config/index.js +3 -3
  149. package/dist/src/config/loader.js +1 -1
  150. package/dist/src/config/models-json.d.ts +15 -15
  151. package/dist/src/config/models-json.js +1 -1
  152. package/dist/src/config/profile.js +1 -1
  153. package/dist/src/config/schema.d.ts +0 -105
  154. package/dist/src/config/schema.js +3 -40
  155. package/dist/src/config/schema.js.map +1 -1
  156. package/dist/src/cron/executor.js +2 -2
  157. package/dist/src/daemon/launchd.js +2 -2
  158. package/dist/src/daemon/launchd.js.map +1 -1
  159. package/dist/src/daemon/systemd.js +2 -2
  160. package/dist/src/daemon/systemd.js.map +1 -1
  161. package/dist/src/extensions/loader.js +1 -1
  162. package/dist/src/gateway/agents-admin.js +1 -1
  163. package/dist/src/gateway/hono/lib/static-ui.js +1 -1
  164. package/dist/src/gateway/hono/routes/doctor.d.ts +3 -0
  165. package/dist/src/gateway/hono/routes/doctor.js +35 -0
  166. package/dist/src/gateway/hono/routes/doctor.js.map +1 -0
  167. package/dist/src/gateway/hono/routes/index.js +2 -0
  168. package/dist/src/gateway/hono/routes/index.js.map +1 -1
  169. package/dist/src/gateway/hono/routes/workspace.js +2 -2
  170. package/dist/src/gateway/hono/sse.js +2 -2
  171. package/dist/src/gateway/lock.js +1 -1
  172. package/dist/src/gateway/ports.js +98 -3
  173. package/dist/src/gateway/ports.js.map +1 -1
  174. package/dist/src/gateway/service.d.ts +0 -4
  175. package/dist/src/gateway/service.js +4 -23
  176. package/dist/src/gateway/service.js.map +1 -1
  177. package/dist/src/routing/bindings.js +1 -1
  178. package/dist/src/routing/index.d.ts +1 -1
  179. package/dist/src/routing/index.js +2 -2
  180. package/dist/src/routing/index.js.map +1 -1
  181. package/dist/src/routing/resolve-route.js +1 -1
  182. package/dist/src/routing/session-key.d.ts +0 -5
  183. package/dist/src/routing/session-key.js +1 -27
  184. package/dist/src/routing/session-key.js.map +1 -1
  185. package/dist/src/session/session-title.js +1 -1
  186. package/dist/src/session/store.js +2 -6
  187. package/dist/src/session/store.js.map +1 -1
  188. package/dist/src/session/types.d.ts +0 -10
  189. package/dist/src/session/types.js.map +1 -1
  190. package/package.json +1 -2
  191. package/dist/gateway/static/root/assets/attachment-load-6pRlDPZ8.js +0 -1
  192. package/dist/gateway/static/root/assets/index-DBZ5eXW5.js +0 -16
  193. package/dist/gateway/static/root/assets/index-DBZ5eXW5.js.map +0 -1
  194. package/dist/gateway/static/root/assets/index-KsVMH-Jo.css +0 -2
  195. package/dist/gateway/static/root/assets/navigation-BpLKd2Ca.js +0 -2
  196. package/dist/gateway/static/root/assets/navigation-BpLKd2Ca.js.map +0 -1
  197. package/dist/gateway/static/root/assets/page-header-store-HcRZK5CZ.js +0 -2
  198. package/dist/gateway/static/root/assets/preference-select-fields-B4AJBqUY.js +0 -2
  199. package/dist/gateway/static/root/assets/preference-select-fields-B4AJBqUY.js.map +0 -1
  200. package/dist/gateway/static/root/assets/settings-page-BvSj0JqX.js +0 -2
  201. package/dist/gateway/static/root/assets/settings-page-BvSj0JqX.js.map +0 -1
  202. package/dist/gateway/static/root/assets/url-QmwQTJ-j.js +0 -2
  203. package/dist/gateway/static/root/assets/url-QmwQTJ-j.js.map +0 -1
  204. package/dist/src/acp/commands.d.ts +0 -11
  205. package/dist/src/acp/commands.js +0 -17
  206. package/dist/src/acp/commands.js.map +0 -1
  207. package/dist/src/acp/control-plane/identity-reconcile.d.ts +0 -36
  208. package/dist/src/acp/control-plane/identity-reconcile.js +0 -124
  209. package/dist/src/acp/control-plane/identity-reconcile.js.map +0 -1
  210. package/dist/src/acp/control-plane/index.d.ts +0 -10
  211. package/dist/src/acp/control-plane/index.js +0 -6
  212. package/dist/src/acp/control-plane/manager.d.ts +0 -86
  213. package/dist/src/acp/control-plane/manager.js +0 -502
  214. package/dist/src/acp/control-plane/manager.js.map +0 -1
  215. package/dist/src/acp/control-plane/manager.types.d.ts +0 -125
  216. package/dist/src/acp/control-plane/manager.types.js +0 -14
  217. package/dist/src/acp/control-plane/manager.types.js.map +0 -1
  218. package/dist/src/acp/control-plane/manager.utils.d.ts +0 -29
  219. package/dist/src/acp/control-plane/manager.utils.js +0 -46
  220. package/dist/src/acp/control-plane/manager.utils.js.map +0 -1
  221. package/dist/src/acp/control-plane/runtime-cache-manager.d.ts +0 -49
  222. package/dist/src/acp/control-plane/runtime-cache-manager.js +0 -155
  223. package/dist/src/acp/control-plane/runtime-cache-manager.js.map +0 -1
  224. package/dist/src/acp/control-plane/runtime-cache.d.ts +0 -45
  225. package/dist/src/acp/control-plane/runtime-cache.js +0 -58
  226. package/dist/src/acp/control-plane/runtime-cache.js.map +0 -1
  227. package/dist/src/acp/control-plane/runtime-options.d.ts +0 -30
  228. package/dist/src/acp/control-plane/runtime-options.js +0 -92
  229. package/dist/src/acp/control-plane/runtime-options.js.map +0 -1
  230. package/dist/src/acp/control-plane/session-actor-queue.d.ts +0 -22
  231. package/dist/src/acp/control-plane/session-actor-queue.js +0 -70
  232. package/dist/src/acp/control-plane/session-actor-queue.js.map +0 -1
  233. package/dist/src/acp/control-plane/session-lifecycle-manager.d.ts +0 -59
  234. package/dist/src/acp/control-plane/session-lifecycle-manager.js +0 -209
  235. package/dist/src/acp/control-plane/session-lifecycle-manager.js.map +0 -1
  236. package/dist/src/acp/control-plane/session-store.d.ts +0 -39
  237. package/dist/src/acp/control-plane/session-store.js +0 -149
  238. package/dist/src/acp/control-plane/session-store.js.map +0 -1
  239. package/dist/src/acp/control-plane/turn-manager.d.ts +0 -40
  240. package/dist/src/acp/control-plane/turn-manager.js +0 -134
  241. package/dist/src/acp/control-plane/turn-manager.js.map +0 -1
  242. package/dist/src/acp/event-mapper.d.ts +0 -48
  243. package/dist/src/acp/event-mapper.js +0 -94
  244. package/dist/src/acp/event-mapper.js.map +0 -1
  245. package/dist/src/acp/index.d.ts +0 -10
  246. package/dist/src/acp/index.js +0 -5
  247. package/dist/src/acp/meta.d.ts +0 -15
  248. package/dist/src/acp/meta.js +0 -36
  249. package/dist/src/acp/meta.js.map +0 -1
  250. package/dist/src/acp/routing-integration.d.ts +0 -37
  251. package/dist/src/acp/routing-integration.js +0 -58
  252. package/dist/src/acp/routing-integration.js.map +0 -1
  253. package/dist/src/acp/runtime/backends/index.d.ts +0 -4
  254. package/dist/src/acp/runtime/backends/index.js +0 -2
  255. package/dist/src/acp/runtime/backends/local.d.ts +0 -136
  256. package/dist/src/acp/runtime/backends/local.js +0 -603
  257. package/dist/src/acp/runtime/backends/local.js.map +0 -1
  258. package/dist/src/acp/runtime/error-text.d.ts +0 -16
  259. package/dist/src/acp/runtime/error-text.js +0 -40
  260. package/dist/src/acp/runtime/error-text.js.map +0 -1
  261. package/dist/src/acp/runtime/errors.d.ts +0 -31
  262. package/dist/src/acp/runtime/errors.js +0 -47
  263. package/dist/src/acp/runtime/errors.js.map +0 -1
  264. package/dist/src/acp/runtime/index.d.ts +0 -7
  265. package/dist/src/acp/runtime/index.js +0 -4
  266. package/dist/src/acp/runtime/registry.d.ts +0 -35
  267. package/dist/src/acp/runtime/registry.js +0 -85
  268. package/dist/src/acp/runtime/registry.js.map +0 -1
  269. package/dist/src/acp/runtime/session-identity.d.ts +0 -35
  270. package/dist/src/acp/runtime/session-identity.js +0 -134
  271. package/dist/src/acp/runtime/session-identity.js.map +0 -1
  272. package/dist/src/acp/runtime/types.d.ts +0 -214
  273. package/dist/src/acp/secret-file.d.ts +0 -7
  274. package/dist/src/acp/secret-file.js +0 -19
  275. package/dist/src/acp/secret-file.js.map +0 -1
  276. package/dist/src/acp/server.d.ts +0 -48
  277. package/dist/src/acp/server.js +0 -300
  278. package/dist/src/acp/server.js.map +0 -1
  279. package/dist/src/acp/session.d.ts +0 -29
  280. package/dist/src/acp/session.js +0 -30
  281. package/dist/src/acp/session.js.map +0 -1
  282. package/dist/src/acp/types.d.ts +0 -39
  283. package/dist/src/acp/types.js +0 -13
  284. package/dist/src/acp/types.js.map +0 -1
  285. package/dist/src/agent/image/describe-images.d.ts +0 -18
  286. package/dist/src/agent/image/describe-images.js +0 -19
  287. package/dist/src/agent/image/describe-images.js.map +0 -1
  288. package/dist/src/cli/commands/acp.d.ts +0 -4
  289. package/dist/src/cli/commands/acp.js +0 -200
  290. package/dist/src/cli/commands/acp.js.map +0 -1
  291. /package/dist/src/{acp/runtime/types.js → cli/commands/doctor/index.d.ts} +0 -0
@@ -1,502 +0,0 @@
1
- import { AcpRuntimeError, createUnsupportedControlError, withAcpRuntimeErrorBoundary } from "../runtime/errors.js";
2
- import { createLogger } from "../../utils/logger/index.js";
3
- import { init_logger } from "../../utils/logger.js";
4
- import { SessionRateLimiter } from "../../infra/rate-limit.js";
5
- import { isSessionIdentityPending, resolveSessionIdentityFromMeta } from "../runtime/session-identity.js";
6
- import { reconcileRuntimeSessionIdentifiers } from "./identity-reconcile.js";
7
- import { inferRuntimeOptionPatchFromConfigOption, resolveRuntimeOptionsFromMeta, validateRuntimeConfigOptionInput, validateRuntimeModeInput } from "./runtime-options.js";
8
- import { normalizeActorKey, requireReadySessionMeta, resolveAcpSessionResolutionError } from "./manager.utils.js";
9
- import { SessionActorQueue } from "./session-actor-queue.js";
10
- import { AcpSessionStore, createDefaultAcpSessionStore } from "./session-store.js";
11
- import { TurnManager } from "./turn-manager.js";
12
- import { RuntimeCacheManager } from "./runtime-cache-manager.js";
13
- import { SessionLifecycleManager } from "./session-lifecycle-manager.js";
14
- //#region src/acp/control-plane/manager.ts
15
- init_logger();
16
- var AcpSessionManager = class {
17
- actorQueue = new SessionActorQueue();
18
- turnManager = new TurnManager();
19
- cacheManager;
20
- lifecycleManager;
21
- sessionStore;
22
- rateLimiter;
23
- logger = createLogger("AcpSessionManager");
24
- errorCountsByCode = /* @__PURE__ */ new Map();
25
- constructor(sessionStorePath) {
26
- this.sessionStorePath = sessionStorePath;
27
- this.sessionStore = sessionStorePath ? new AcpSessionStore(sessionStorePath) : createDefaultAcpSessionStore();
28
- this.rateLimiter = new SessionRateLimiter({
29
- maxRequests: 100,
30
- windowMs: 60 * 1e3
31
- });
32
- this.cacheManager = new RuntimeCacheManager({
33
- persistMeta: async (sessionKey, meta) => {
34
- await this.sessionStore.save(sessionKey, {
35
- sessionKey,
36
- acp: meta
37
- });
38
- },
39
- enforceConcurrentLimit: () => {}
40
- });
41
- this.lifecycleManager = new SessionLifecycleManager({
42
- loadEntry: (key) => this.sessionStore.load(key),
43
- saveEntry: (key, entry) => this.sessionStore.save(key, entry),
44
- listEntries: () => this.sessionStore.list(),
45
- enforceConcurrentLimit: () => {}
46
- });
47
- }
48
- /** Initialize the session manager */
49
- async initialize() {
50
- await this.sessionStore.initialize();
51
- }
52
- /** Resolve Session */
53
- async resolveSession(params) {
54
- return this.lifecycleManager.resolveSession({
55
- sessionKey: params.sessionKey,
56
- getCachedMeta: (key) => {
57
- const cached = this.cacheManager.get(key);
58
- return cached ? {
59
- backend: cached.backend,
60
- agent: cached.agent,
61
- runtimeSessionName: cached.handle.runtimeSessionName,
62
- mode: cached.mode,
63
- cwd: cached.cwd,
64
- state: "idle",
65
- lastActivityAt: Date.now()
66
- } : null;
67
- }
68
- });
69
- }
70
- /** Get observability snapshot */
71
- getObservabilitySnapshot(_cfg) {
72
- const latencyStats = this.turnManager.getLatencyStats();
73
- const completedTurns = latencyStats.completed + latencyStats.failed;
74
- const averageLatencyMs = completedTurns > 0 ? Math.round(latencyStats.totalMs / completedTurns) : 0;
75
- const evictionStats = this.cacheManager.getEvictionStats();
76
- return {
77
- runtimeCache: {
78
- activeSessions: this.cacheManager.size(),
79
- idleTtlMs: 0,
80
- evictedTotal: evictionStats.evictedTotal,
81
- ...evictionStats.lastEvictedAt ? { lastEvictedAt: evictionStats.lastEvictedAt } : {}
82
- },
83
- turns: {
84
- active: this.turnManager.getActiveTurnCount(),
85
- queueDepth: this.actorQueue.getTotalPendingCount(),
86
- completed: latencyStats.completed,
87
- failed: latencyStats.failed,
88
- averageLatencyMs,
89
- maxLatencyMs: latencyStats.maxMs
90
- },
91
- errorsByCode: Object.fromEntries([...this.errorCountsByCode.entries()].toSorted(([a], [b]) => a.localeCompare(b)))
92
- };
93
- }
94
- /** Reconciliation: recover pending session identities at startup */
95
- async reconcilePendingSessionIdentities(params) {
96
- const result = {
97
- checked: 0,
98
- resolved: 0,
99
- failed: 0
100
- };
101
- const sessions = await this.lifecycleManager.listSessions();
102
- for (const session of sessions) {
103
- if (!session.acp || !session.sessionKey) continue;
104
- if (!isSessionIdentityPending(resolveSessionIdentityFromMeta(session.acp))) continue;
105
- result.checked += 1;
106
- try {
107
- if (await this.withSessionActor(session.sessionKey, async () => {
108
- const resolution = await this.resolveSession({
109
- cfg: params.cfg,
110
- sessionKey: session.sessionKey
111
- });
112
- if (resolution.kind !== "ready") return false;
113
- const { runtime, handle, meta } = await this.cacheManager.ensureHandle({
114
- cfg: params.cfg,
115
- sessionKey: session.sessionKey,
116
- meta: resolution.meta
117
- });
118
- return !isSessionIdentityPending(resolveSessionIdentityFromMeta((await reconcileRuntimeSessionIdentifiers({
119
- cfg: params.cfg,
120
- sessionKey: session.sessionKey,
121
- runtime,
122
- handle,
123
- meta,
124
- failOnStatusError: false,
125
- setCachedHandle: (key, _h) => {
126
- this.cacheManager.clear(key);
127
- },
128
- writeSessionMeta: async ({ sessionKey, mutate }) => {
129
- const entry = await this.sessionStore.load(sessionKey);
130
- const current = entry?.acp;
131
- const result = mutate(current, entry);
132
- if (result) {
133
- await this.sessionStore.save(sessionKey, {
134
- sessionKey,
135
- acp: result
136
- });
137
- return {
138
- sessionKey,
139
- acp: result
140
- };
141
- }
142
- return null;
143
- }
144
- })).meta));
145
- })) result.resolved += 1;
146
- } catch (error) {
147
- result.failed += 1;
148
- this.logger.warn({
149
- sessionKey: session.sessionKey,
150
- error
151
- }, "Failed to reconcile ACP session identity");
152
- }
153
- }
154
- return result;
155
- }
156
- /** Initialize Session */
157
- async initializeSession(input) {
158
- await this.evictIdleRuntimeHandles({ cfg: input.cfg });
159
- return await this.withSessionActor(input.sessionKey, async () => {
160
- const { runtime, meta } = await this.lifecycleManager.initializeSession({
161
- input,
162
- onRuntimeCreated: async (sessionKey, _rt) => {
163
- this.cacheManager.clear(sessionKey);
164
- }
165
- });
166
- const { handle } = await this.cacheManager.ensureHandle({
167
- cfg: input.cfg,
168
- sessionKey: input.sessionKey,
169
- meta
170
- });
171
- return {
172
- runtime,
173
- handle,
174
- meta
175
- };
176
- });
177
- }
178
- /** Run Turn */
179
- async runTurn(input) {
180
- const rateLimit = this.rateLimiter.consume(input.sessionKey);
181
- if (!rateLimit.allowed) throw new AcpRuntimeError("ACP_TURN_FAILED", `Rate limit exceeded. Retry after ${Math.ceil(rateLimit.retryAfterMs / 1e3)}s.`);
182
- await this.evictIdleRuntimeHandles({ cfg: input.cfg });
183
- await this.withSessionActor(input.sessionKey, async () => {
184
- const resolution = await this.resolveSession({
185
- cfg: input.cfg,
186
- sessionKey: input.sessionKey
187
- });
188
- if (resolution.kind !== "ready") throw resolveAcpSessionResolutionError(resolution);
189
- const { runtime, handle, meta } = await this.cacheManager.ensureHandle({
190
- cfg: input.cfg,
191
- sessionKey: input.sessionKey,
192
- meta: resolution.meta
193
- });
194
- await this.turnManager.executeTurn({
195
- input,
196
- runtime: {
197
- runtime,
198
- handle,
199
- meta
200
- },
201
- onStateChange: async (state, lastError) => {
202
- await this.lifecycleManager.setSessionState({
203
- sessionKey: input.sessionKey,
204
- state,
205
- lastError,
206
- clearLastError: !lastError
207
- });
208
- }
209
- });
210
- });
211
- }
212
- /** Get Session Status */
213
- async getSessionStatus(params) {
214
- this.throwIfAborted(params.signal);
215
- await this.evictIdleRuntimeHandles({ cfg: params.cfg });
216
- return await this.withSessionActor(params.sessionKey, async () => {
217
- this.throwIfAborted(params.signal);
218
- const resolvedMeta = requireReadySessionMeta(await this.resolveSession({
219
- cfg: params.cfg,
220
- sessionKey: params.sessionKey
221
- }));
222
- const { runtime, handle, meta } = await this.cacheManager.ensureHandle({
223
- cfg: params.cfg,
224
- sessionKey: params.sessionKey,
225
- meta: resolvedMeta
226
- });
227
- const capabilities = await this.resolveRuntimeCapabilities({
228
- runtime,
229
- handle
230
- });
231
- let runtimeStatus = await this.getRuntimeStatusSafe(runtime, handle, params.signal);
232
- const identity = resolveSessionIdentityFromMeta(meta);
233
- return {
234
- sessionKey: params.sessionKey,
235
- backend: handle.backend || meta.backend,
236
- agent: meta.agent,
237
- ...identity ? { identity } : {},
238
- state: meta.state,
239
- mode: meta.mode,
240
- runtimeOptions: resolveRuntimeOptionsFromMeta(meta),
241
- capabilities,
242
- runtimeStatus,
243
- lastActivityAt: meta.lastActivityAt,
244
- lastError: meta.lastError
245
- };
246
- }, params.signal);
247
- }
248
- /** Set Session Runtime Mode */
249
- async setSessionRuntimeMode(params) {
250
- const runtimeMode = validateRuntimeModeInput(params.runtimeMode);
251
- await this.evictIdleRuntimeHandles({ cfg: params.cfg });
252
- return await this.withSessionActor(params.sessionKey, async () => {
253
- const resolvedMeta = requireReadySessionMeta(await this.resolveSession({
254
- cfg: params.cfg,
255
- sessionKey: params.sessionKey
256
- }));
257
- const { runtime, handle, meta } = await this.cacheManager.ensureHandle({
258
- cfg: params.cfg,
259
- sessionKey: params.sessionKey,
260
- meta: resolvedMeta
261
- });
262
- if (!(await this.resolveRuntimeCapabilities({
263
- runtime,
264
- handle
265
- })).controls.includes("session/set_mode") || !runtime.setMode) throw createUnsupportedControlError({
266
- backend: handle.backend || meta.backend,
267
- control: "session/set_mode"
268
- });
269
- await withAcpRuntimeErrorBoundary({
270
- run: async () => await runtime.setMode({
271
- handle,
272
- mode: runtimeMode
273
- }),
274
- fallbackCode: "ACP_TURN_FAILED",
275
- fallbackMessage: "Could not update ACP runtime mode."
276
- });
277
- return await this.updateAndPersistOptions(params.sessionKey, { runtimeMode });
278
- });
279
- }
280
- /** Set Session Config Option */
281
- async setSessionConfigOption(params) {
282
- const { key, value } = validateRuntimeConfigOptionInput(params.key, params.value);
283
- await this.evictIdleRuntimeHandles({ cfg: params.cfg });
284
- return await this.withSessionActor(params.sessionKey, async () => {
285
- const resolvedMeta = requireReadySessionMeta(await this.resolveSession({
286
- cfg: params.cfg,
287
- sessionKey: params.sessionKey
288
- }));
289
- const { runtime, handle, meta } = await this.cacheManager.ensureHandle({
290
- cfg: params.cfg,
291
- sessionKey: params.sessionKey,
292
- meta: resolvedMeta
293
- });
294
- const inferredPatch = inferRuntimeOptionPatchFromConfigOption(key, value);
295
- const capabilities = await this.resolveRuntimeCapabilities({
296
- runtime,
297
- handle
298
- });
299
- if (!capabilities.controls.includes("session/set_config_option") || !runtime.setConfigOption) throw createUnsupportedControlError({
300
- backend: handle.backend || meta.backend,
301
- control: "session/set_config_option"
302
- });
303
- const advertisedKeys = new Set((capabilities.configOptionKeys ?? []).map((k) => k.trim().toLowerCase()).filter(Boolean));
304
- if (advertisedKeys.size > 0 && !advertisedKeys.has(key.toLowerCase())) throw new AcpRuntimeError("ACP_BACKEND_UNSUPPORTED_CONTROL", `ACP backend "${handle.backend || meta.backend}" does not accept config key "${key}".`);
305
- await withAcpRuntimeErrorBoundary({
306
- run: async () => await runtime.setConfigOption({
307
- handle,
308
- key,
309
- value
310
- }),
311
- fallbackCode: "ACP_TURN_FAILED",
312
- fallbackMessage: "Could not update ACP runtime config option."
313
- });
314
- return await this.updateAndPersistOptions(params.sessionKey, inferredPatch);
315
- });
316
- }
317
- /** Cancel Session */
318
- async cancelSession(params) {
319
- await this.evictIdleRuntimeHandles({ cfg: params.cfg });
320
- const activeTurn = this.turnManager.getActiveTurn(params.sessionKey);
321
- if (activeTurn) {
322
- if (await this.turnManager.cancelTurn({
323
- sessionKey: params.sessionKey,
324
- runtime: {
325
- runtime: activeTurn.runtime,
326
- handle: activeTurn.handle
327
- },
328
- reason: params.reason
329
- })) return;
330
- }
331
- await this.withSessionActor(params.sessionKey, async () => {
332
- const resolvedMeta = requireReadySessionMeta(await this.resolveSession({
333
- cfg: params.cfg,
334
- sessionKey: params.sessionKey
335
- }));
336
- const { runtime, handle } = await this.cacheManager.ensureHandle({
337
- cfg: params.cfg,
338
- sessionKey: params.sessionKey,
339
- meta: resolvedMeta
340
- });
341
- try {
342
- await runtime.cancel({
343
- handle,
344
- reason: params.reason
345
- });
346
- await this.lifecycleManager.setSessionState({
347
- sessionKey: params.sessionKey,
348
- state: "idle",
349
- clearLastError: true
350
- });
351
- } catch (error) {
352
- const acpError = error instanceof AcpRuntimeError ? error : new AcpRuntimeError("ACP_TURN_FAILED", error instanceof Error ? error.message : "Cancel failed");
353
- await this.lifecycleManager.setSessionState({
354
- sessionKey: params.sessionKey,
355
- state: "error",
356
- lastError: acpError.message
357
- });
358
- throw acpError;
359
- }
360
- });
361
- }
362
- /** Reset Session */
363
- async resetSession(params) {
364
- await this.evictIdleRuntimeHandles({ cfg: params.cfg });
365
- await this.withSessionActor(params.sessionKey, async () => {
366
- const resolvedMeta = requireReadySessionMeta(await this.resolveSession({
367
- cfg: params.cfg,
368
- sessionKey: params.sessionKey
369
- }));
370
- const { runtime, handle } = await this.cacheManager.ensureHandle({
371
- cfg: params.cfg,
372
- sessionKey: params.sessionKey,
373
- meta: resolvedMeta
374
- });
375
- if (!(await this.resolveRuntimeCapabilities({
376
- runtime,
377
- handle
378
- })).controls.includes("session/reset") || !runtime.resetSession) {
379
- await this.lifecycleManager.setSessionState({
380
- sessionKey: params.sessionKey,
381
- state: "idle",
382
- clearLastError: true
383
- });
384
- return;
385
- }
386
- try {
387
- await runtime.resetSession({ handle });
388
- await this.lifecycleManager.setSessionState({
389
- sessionKey: params.sessionKey,
390
- state: "idle",
391
- clearLastError: true
392
- });
393
- } catch (error) {
394
- const acpError = error instanceof AcpRuntimeError ? error : new AcpRuntimeError("ACP_SESSION_RESET_FAILED", error instanceof Error ? error.message : "Reset failed");
395
- await this.lifecycleManager.setSessionState({
396
- sessionKey: params.sessionKey,
397
- state: "error",
398
- lastError: acpError.message
399
- });
400
- throw acpError;
401
- }
402
- });
403
- }
404
- /** Close Session */
405
- async closeSession(input) {
406
- await this.evictIdleRuntimeHandles({ cfg: input.cfg });
407
- return await this.withSessionActor(input.sessionKey, async () => {
408
- const result = await this.lifecycleManager.closeSession({
409
- input,
410
- resolveSession: (key) => this.resolveSession({
411
- cfg: input.cfg,
412
- sessionKey: key
413
- }),
414
- getRuntime: async (key, meta) => this.cacheManager.ensureHandle({
415
- cfg: input.cfg,
416
- sessionKey: key,
417
- meta
418
- }),
419
- clearCached: (key) => this.cacheManager.clear(key)
420
- });
421
- if (result.runtimeClosed || result.metaCleared) this.cacheManager.clear(input.sessionKey);
422
- return result;
423
- });
424
- }
425
- async updateAndPersistOptions(sessionKey, patch) {
426
- const nextOptions = {
427
- ...(await this.sessionStore.load(sessionKey))?.acp?.runtimeOptions ?? {},
428
- ...patch
429
- };
430
- await this.lifecycleManager.updateRuntimeOptions({
431
- sessionKey,
432
- options: nextOptions,
433
- clearCacheIfCwdChanged: (key, newCwd) => {
434
- const cached = this.cacheManager.get(key);
435
- if (cached && (cached.cwd ?? "") !== (newCwd ?? "")) this.cacheManager.clear(key);
436
- }
437
- });
438
- return nextOptions;
439
- }
440
- async resolveRuntimeCapabilities(params) {
441
- if (params.runtime.getCapabilities) return await Promise.resolve(params.runtime.getCapabilities({ handle: params.handle }));
442
- return { controls: [] };
443
- }
444
- async getRuntimeStatusSafe(runtime, handle, signal) {
445
- if (!runtime.getStatus) return {};
446
- try {
447
- this.throwIfAborted(signal);
448
- return await runtime.getStatus({
449
- handle,
450
- signal
451
- });
452
- } catch {
453
- return {};
454
- }
455
- }
456
- async evictIdleRuntimeHandles(params) {
457
- await this.cacheManager.evictIdle({
458
- cfg: params.cfg,
459
- hasActiveTurn: (key) => this.turnManager.hasActiveTurn(key),
460
- onEvict: async (state) => {
461
- await state.runtime.close({
462
- handle: state.handle,
463
- reason: "idle-evicted"
464
- });
465
- }
466
- });
467
- }
468
- async withSessionActor(sessionKey, op, signal) {
469
- return await this.actorQueue.run(normalizeActorKey(sessionKey), async () => {
470
- this.throwIfAborted(signal);
471
- return await op();
472
- });
473
- }
474
- throwIfAborted(signal) {
475
- if (signal?.aborted) throw new AcpRuntimeError("ACP_TURN_FAILED", "ACP operation aborted.");
476
- }
477
- };
478
- let ACP_SESSION_MANAGER_SINGLETON = null;
479
- let ACP_SESSION_MANAGER_INIT_PROMISE = null;
480
- function getAcpSessionManager() {
481
- if (!ACP_SESSION_MANAGER_SINGLETON) {
482
- ACP_SESSION_MANAGER_SINGLETON = new AcpSessionManager();
483
- ACP_SESSION_MANAGER_INIT_PROMISE = ACP_SESSION_MANAGER_SINGLETON.initialize();
484
- }
485
- return ACP_SESSION_MANAGER_SINGLETON;
486
- }
487
- /** Initialize and get the ACP session manager */
488
- async function getAcpSessionManagerAsync() {
489
- const manager = getAcpSessionManager();
490
- if (ACP_SESSION_MANAGER_INIT_PROMISE) {
491
- await ACP_SESSION_MANAGER_INIT_PROMISE;
492
- ACP_SESSION_MANAGER_INIT_PROMISE = null;
493
- }
494
- return manager;
495
- }
496
- const __testing = { resetAcpSessionManagerForTests() {
497
- ACP_SESSION_MANAGER_SINGLETON = null;
498
- } };
499
- //#endregion
500
- export { AcpSessionManager, __testing, getAcpSessionManager, getAcpSessionManagerAsync };
501
-
502
- //# sourceMappingURL=manager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"manager.js","names":[],"sources":["../../../../src/acp/control-plane/manager.ts"],"sourcesContent":["/**\n * ACP Session Manager\n * \n * Core manager for ACP session lifecycle, runtime caching, and turn execution.\n * Refactored to delegate to specialized managers.\n */\n\nimport type { Config } from \"../../config/schema.js\";\nimport { createLogger } from \"../../utils/logger.js\";\nimport { AcpRuntimeError, withAcpRuntimeErrorBoundary } from \"../runtime/errors.js\";\nimport { SessionRateLimiter } from \"../../infra/rate-limit.js\";\nimport {\n isSessionIdentityPending,\n resolveSessionIdentityFromMeta,\n} from \"../runtime/session-identity.js\";\nimport type { AcpRuntime, AcpRuntimeHandle, AcpRuntimeControl } from \"../runtime/types.js\";\nimport {\n type AcpCloseSessionInput,\n type AcpCloseSessionResult,\n type AcpInitializeSessionInput,\n type AcpManagerObservabilitySnapshot,\n type AcpRunTurnInput,\n type AcpSessionResolution,\n type AcpSessionRuntimeOptions,\n type AcpSessionStatus,\n type AcpStartupIdentityReconcileResult,\n type SessionAcpMeta,\n type SessionEntry,\n} from \"./manager.types.js\";\nimport { reconcileRuntimeSessionIdentifiers } from \"./identity-reconcile.js\";\nimport {\n createUnsupportedControlError,\n normalizeActorKey,\n requireReadySessionMeta,\n resolveAcpSessionResolutionError,\n} from \"./manager.utils.js\";\nimport {\n inferRuntimeOptionPatchFromConfigOption,\n resolveRuntimeOptionsFromMeta,\n validateRuntimeConfigOptionInput,\n validateRuntimeModeInput,\n} from \"./runtime-options.js\";\nimport { SessionActorQueue } from \"./session-actor-queue.js\";\nimport { AcpSessionStore, createDefaultAcpSessionStore } from \"./session-store.js\";\nimport { TurnManager } from \"./turn-manager.js\";\nimport { RuntimeCacheManager } from \"./runtime-cache-manager.js\";\nimport { SessionLifecycleManager } from \"./session-lifecycle-manager.js\";\n\n/** Session Store Interface */\ninterface SessionStore {\n load(sessionKey: string): Promise<SessionEntry | null>;\n save(sessionKey: string, entry: SessionEntry): Promise<void>;\n list(): Promise<SessionEntry[]>;\n initialize(): Promise<void>;\n delete(sessionKey: string): Promise<void>;\n}\n\nexport class AcpSessionManager {\n private readonly actorQueue = new SessionActorQueue();\n private readonly turnManager = new TurnManager();\n private readonly cacheManager: RuntimeCacheManager;\n private readonly lifecycleManager: SessionLifecycleManager;\n private readonly sessionStore: SessionStore;\n private readonly rateLimiter: SessionRateLimiter;\n private readonly logger = createLogger(\"AcpSessionManager\");\n private readonly errorCountsByCode = new Map<string, number>();\n\n constructor(private readonly sessionStorePath?: string) {\n this.sessionStore = sessionStorePath\n ? new AcpSessionStore(sessionStorePath)\n : createDefaultAcpSessionStore();\n\n // Initialize rate limiter with defaults (will be updated when config is available)\n this.rateLimiter = new SessionRateLimiter({\n maxRequests: 100,\n windowMs: 60 * 1000, // 1 minute\n });\n\n this.cacheManager = new RuntimeCacheManager({\n persistMeta: async (sessionKey, meta) => {\n await this.sessionStore.save(sessionKey, { sessionKey, acp: meta });\n },\n enforceConcurrentLimit: () => {},\n });\n\n this.lifecycleManager = new SessionLifecycleManager({\n loadEntry: (key) => this.sessionStore.load(key),\n saveEntry: (key, entry) => this.sessionStore.save(key, entry),\n listEntries: () => this.sessionStore.list(),\n enforceConcurrentLimit: () => {},\n });\n }\n\n /** Initialize the session manager */\n async initialize(): Promise<void> {\n await this.sessionStore.initialize();\n }\n\n /** Resolve Session */\n async resolveSession(params: { cfg: Config; sessionKey: string }): Promise<AcpSessionResolution> {\n return this.lifecycleManager.resolveSession({\n sessionKey: params.sessionKey,\n getCachedMeta: (key) => {\n const cached = this.cacheManager.get(key);\n return cached\n ? {\n backend: cached.backend,\n agent: cached.agent,\n runtimeSessionName: cached.handle.runtimeSessionName,\n mode: cached.mode,\n cwd: cached.cwd,\n state: \"idle\",\n lastActivityAt: Date.now(),\n }\n : null;\n },\n });\n }\n\n /** Get observability snapshot */\n getObservabilitySnapshot(_cfg: Config): AcpManagerObservabilitySnapshot {\n const latencyStats = this.turnManager.getLatencyStats();\n const completedTurns = latencyStats.completed + latencyStats.failed;\n const averageLatencyMs =\n completedTurns > 0 ? Math.round(latencyStats.totalMs / completedTurns) : 0;\n const evictionStats = this.cacheManager.getEvictionStats();\n\n return {\n runtimeCache: {\n activeSessions: this.cacheManager.size(),\n idleTtlMs: 0,\n evictedTotal: evictionStats.evictedTotal,\n ...(evictionStats.lastEvictedAt ? { lastEvictedAt: evictionStats.lastEvictedAt } : {}),\n },\n turns: {\n active: this.turnManager.getActiveTurnCount(),\n queueDepth: this.actorQueue.getTotalPendingCount(),\n completed: latencyStats.completed,\n failed: latencyStats.failed,\n averageLatencyMs,\n maxLatencyMs: latencyStats.maxMs,\n },\n errorsByCode: Object.fromEntries(\n [...this.errorCountsByCode.entries()].toSorted(([a], [b]) => a.localeCompare(b)),\n ),\n };\n }\n\n /** Reconciliation: recover pending session identities at startup */\n async reconcilePendingSessionIdentities(params: {\n cfg: Config;\n }): Promise<AcpStartupIdentityReconcileResult> {\n const result: AcpStartupIdentityReconcileResult = {\n checked: 0,\n resolved: 0,\n failed: 0,\n };\n\n const sessions = await this.lifecycleManager.listSessions();\n\n for (const session of sessions) {\n if (!session.acp || !session.sessionKey) continue;\n\n const currentIdentity = resolveSessionIdentityFromMeta(session.acp);\n if (!isSessionIdentityPending(currentIdentity)) continue;\n\n result.checked += 1;\n\n try {\n const becameResolved = await this.withSessionActor(session.sessionKey, async () => {\n const resolution = await this.resolveSession({\n cfg: params.cfg,\n sessionKey: session.sessionKey!,\n });\n\n if (resolution.kind !== \"ready\") return false;\n\n const { runtime, handle, meta } = await this.cacheManager.ensureHandle({\n cfg: params.cfg,\n sessionKey: session.sessionKey!,\n meta: resolution.meta,\n });\n\n const reconciled = await reconcileRuntimeSessionIdentifiers({\n cfg: params.cfg,\n sessionKey: session.sessionKey!,\n runtime,\n handle,\n meta,\n failOnStatusError: false,\n setCachedHandle: (key, _h) => {\n this.cacheManager.clear(key);\n },\n writeSessionMeta: async ({ sessionKey, mutate }) => {\n const entry = await this.sessionStore.load(sessionKey);\n const current = entry?.acp;\n const result = mutate(current, entry);\n if (result) {\n await this.sessionStore.save(sessionKey, { sessionKey, acp: result });\n return { sessionKey, acp: result };\n }\n return null;\n },\n });\n\n return !isSessionIdentityPending(resolveSessionIdentityFromMeta(reconciled.meta));\n });\n\n if (becameResolved) result.resolved += 1;\n } catch (error) {\n result.failed += 1;\n this.logger.warn({ sessionKey: session.sessionKey, error }, \"Failed to reconcile ACP session identity\");\n }\n }\n\n return result;\n }\n\n /** Initialize Session */\n async initializeSession(input: AcpInitializeSessionInput): Promise<{\n runtime: AcpRuntime;\n handle: AcpRuntimeHandle;\n meta: SessionAcpMeta;\n }> {\n await this.evictIdleRuntimeHandles({ cfg: input.cfg });\n\n return await this.withSessionActor(input.sessionKey, async () => {\n const { runtime, meta } = await this.lifecycleManager.initializeSession({\n input,\n onRuntimeCreated: async (sessionKey, _rt) => {\n this.cacheManager.clear(sessionKey);\n },\n });\n\n // Ensure handle and cache it\n const { handle } = await this.cacheManager.ensureHandle({\n cfg: input.cfg,\n sessionKey: input.sessionKey,\n meta,\n });\n\n return { runtime, handle, meta };\n });\n }\n\n /** Run Turn */\n async runTurn(input: AcpRunTurnInput): Promise<void> {\n // Check rate limit\n const rateLimit = this.rateLimiter.consume(input.sessionKey);\n if (!rateLimit.allowed) {\n throw new AcpRuntimeError(\n \"ACP_TURN_FAILED\",\n `Rate limit exceeded. Retry after ${Math.ceil(rateLimit.retryAfterMs / 1000)}s.`\n );\n }\n\n await this.evictIdleRuntimeHandles({ cfg: input.cfg });\n\n await this.withSessionActor(input.sessionKey, async () => {\n const resolution = await this.resolveSession({ cfg: input.cfg, sessionKey: input.sessionKey });\n if (resolution.kind !== \"ready\") {\n throw resolveAcpSessionResolutionError(resolution);\n }\n\n const { runtime, handle, meta } = await this.cacheManager.ensureHandle({\n cfg: input.cfg,\n sessionKey: input.sessionKey,\n meta: resolution.meta,\n });\n\n await this.turnManager.executeTurn({\n input,\n runtime: { runtime, handle, meta },\n onStateChange: async (state, lastError) => {\n await this.lifecycleManager.setSessionState({\n sessionKey: input.sessionKey,\n state,\n lastError,\n clearLastError: !lastError,\n });\n },\n });\n });\n }\n\n /** Get Session Status */\n async getSessionStatus(params: {\n cfg: Config;\n sessionKey: string;\n signal?: AbortSignal;\n }): Promise<AcpSessionStatus> {\n this.throwIfAborted(params.signal);\n await this.evictIdleRuntimeHandles({ cfg: params.cfg });\n\n return await this.withSessionActor(\n params.sessionKey,\n async () => {\n this.throwIfAborted(params.signal);\n\n const resolution = await this.resolveSession({ cfg: params.cfg, sessionKey: params.sessionKey });\n const resolvedMeta = requireReadySessionMeta(resolution);\n\n const { runtime, handle, meta } = await this.cacheManager.ensureHandle({\n cfg: params.cfg,\n sessionKey: params.sessionKey,\n meta: resolvedMeta,\n });\n\n const capabilities = await this.resolveRuntimeCapabilities({ runtime, handle });\n let runtimeStatus = await this.getRuntimeStatusSafe(runtime, handle, params.signal);\n const identity = resolveSessionIdentityFromMeta(meta);\n\n return {\n sessionKey: params.sessionKey,\n backend: handle.backend || meta.backend,\n agent: meta.agent,\n ...(identity ? { identity } : {}),\n state: meta.state,\n mode: meta.mode,\n runtimeOptions: resolveRuntimeOptionsFromMeta(meta),\n capabilities,\n runtimeStatus,\n lastActivityAt: meta.lastActivityAt,\n lastError: meta.lastError,\n };\n },\n params.signal,\n );\n }\n\n /** Set Session Runtime Mode */\n async setSessionRuntimeMode(params: {\n cfg: Config;\n sessionKey: string;\n runtimeMode: string;\n }): Promise<AcpSessionRuntimeOptions> {\n const runtimeMode = validateRuntimeModeInput(params.runtimeMode);\n await this.evictIdleRuntimeHandles({ cfg: params.cfg });\n\n return await this.withSessionActor(params.sessionKey, async () => {\n const resolution = await this.resolveSession({ cfg: params.cfg, sessionKey: params.sessionKey });\n const resolvedMeta = requireReadySessionMeta(resolution);\n\n const { runtime, handle, meta } = await this.cacheManager.ensureHandle({\n cfg: params.cfg,\n sessionKey: params.sessionKey,\n meta: resolvedMeta,\n });\n\n const capabilities = await this.resolveRuntimeCapabilities({ runtime, handle });\n\n if (!capabilities.controls.includes(\"session/set_mode\") || !runtime.setMode) {\n throw createUnsupportedControlError({\n backend: handle.backend || meta.backend,\n control: \"session/set_mode\",\n });\n }\n\n await withAcpRuntimeErrorBoundary({\n run: async () => await runtime.setMode!({ handle, mode: runtimeMode }),\n fallbackCode: \"ACP_TURN_FAILED\",\n fallbackMessage: \"Could not update ACP runtime mode.\",\n });\n\n const nextOptions = await this.updateAndPersistOptions(params.sessionKey, { runtimeMode });\n return nextOptions;\n });\n }\n\n /** Set Session Config Option */\n async setSessionConfigOption(params: {\n cfg: Config;\n sessionKey: string;\n key: string;\n value: string;\n }): Promise<AcpSessionRuntimeOptions> {\n const { key, value } = validateRuntimeConfigOptionInput(params.key, params.value);\n await this.evictIdleRuntimeHandles({ cfg: params.cfg });\n\n return await this.withSessionActor(params.sessionKey, async () => {\n const resolution = await this.resolveSession({ cfg: params.cfg, sessionKey: params.sessionKey });\n const resolvedMeta = requireReadySessionMeta(resolution);\n\n const { runtime, handle, meta } = await this.cacheManager.ensureHandle({\n cfg: params.cfg,\n sessionKey: params.sessionKey,\n meta: resolvedMeta,\n });\n\n const inferredPatch = inferRuntimeOptionPatchFromConfigOption(key, value);\n const capabilities = await this.resolveRuntimeCapabilities({ runtime, handle });\n\n if (!capabilities.controls.includes(\"session/set_config_option\") || !runtime.setConfigOption) {\n throw createUnsupportedControlError({\n backend: handle.backend || meta.backend,\n control: \"session/set_config_option\",\n });\n }\n\n const advertisedKeys = new Set(\n (capabilities.configOptionKeys ?? []).map((k) => k.trim().toLowerCase()).filter(Boolean),\n );\n\n if (advertisedKeys.size > 0 && !advertisedKeys.has(key.toLowerCase())) {\n throw new AcpRuntimeError(\n \"ACP_BACKEND_UNSUPPORTED_CONTROL\",\n `ACP backend \"${handle.backend || meta.backend}\" does not accept config key \"${key}\".`,\n );\n }\n\n await withAcpRuntimeErrorBoundary({\n run: async () => await runtime.setConfigOption!({ handle, key, value }),\n fallbackCode: \"ACP_TURN_FAILED\",\n fallbackMessage: \"Could not update ACP runtime config option.\",\n });\n\n const nextOptions = await this.updateAndPersistOptions(params.sessionKey, inferredPatch);\n return nextOptions;\n });\n }\n\n /** Cancel Session */\n async cancelSession(params: { cfg: Config; sessionKey: string; reason?: string }): Promise<void> {\n await this.evictIdleRuntimeHandles({ cfg: params.cfg });\n\n // Try cancel active turn first\n const activeTurn = this.turnManager.getActiveTurn(params.sessionKey);\n if (activeTurn) {\n const cancelled = await this.turnManager.cancelTurn({\n sessionKey: params.sessionKey,\n runtime: { runtime: activeTurn.runtime, handle: activeTurn.handle },\n reason: params.reason,\n });\n if (cancelled) return;\n }\n\n // Otherwise cancel via session actor\n await this.withSessionActor(params.sessionKey, async () => {\n const resolution = await this.resolveSession({ cfg: params.cfg, sessionKey: params.sessionKey });\n const resolvedMeta = requireReadySessionMeta(resolution);\n\n const { runtime, handle } = await this.cacheManager.ensureHandle({\n cfg: params.cfg,\n sessionKey: params.sessionKey,\n meta: resolvedMeta,\n });\n\n try {\n await runtime.cancel({ handle, reason: params.reason });\n await this.lifecycleManager.setSessionState({\n sessionKey: params.sessionKey,\n state: \"idle\",\n clearLastError: true,\n });\n } catch (error) {\n const acpError =\n error instanceof AcpRuntimeError\n ? error\n : new AcpRuntimeError(\"ACP_TURN_FAILED\", error instanceof Error ? error.message : \"Cancel failed\");\n\n await this.lifecycleManager.setSessionState({\n sessionKey: params.sessionKey,\n state: \"error\",\n lastError: acpError.message,\n });\n throw acpError;\n }\n });\n }\n\n /** Reset Session */\n async resetSession(params: { cfg: Config; sessionKey: string }): Promise<void> {\n await this.evictIdleRuntimeHandles({ cfg: params.cfg });\n\n await this.withSessionActor(params.sessionKey, async () => {\n const resolution = await this.resolveSession({ cfg: params.cfg, sessionKey: params.sessionKey });\n const resolvedMeta = requireReadySessionMeta(resolution);\n\n const { runtime, handle } = await this.cacheManager.ensureHandle({\n cfg: params.cfg,\n sessionKey: params.sessionKey,\n meta: resolvedMeta,\n });\n\n // Check if runtime supports resetSession\n const capabilities = await this.resolveRuntimeCapabilities({ runtime, handle });\n\n if (!capabilities.controls.includes(\"session/reset\") || !runtime.resetSession) {\n // Fallback: just clear session state without calling runtime\n await this.lifecycleManager.setSessionState({\n sessionKey: params.sessionKey,\n state: \"idle\",\n clearLastError: true,\n });\n return;\n }\n\n try {\n await runtime.resetSession!({ handle });\n await this.lifecycleManager.setSessionState({\n sessionKey: params.sessionKey,\n state: \"idle\",\n clearLastError: true,\n });\n } catch (error) {\n const acpError =\n error instanceof AcpRuntimeError\n ? error\n : new AcpRuntimeError(\"ACP_SESSION_RESET_FAILED\", error instanceof Error ? error.message : \"Reset failed\");\n\n await this.lifecycleManager.setSessionState({\n sessionKey: params.sessionKey,\n state: \"error\",\n lastError: acpError.message,\n });\n throw acpError;\n }\n });\n }\n\n /** Close Session */\n async closeSession(input: AcpCloseSessionInput): Promise<AcpCloseSessionResult> {\n await this.evictIdleRuntimeHandles({ cfg: input.cfg });\n\n return await this.withSessionActor(input.sessionKey, async () => {\n const result = await this.lifecycleManager.closeSession({\n input,\n resolveSession: (key) => this.resolveSession({ cfg: input.cfg, sessionKey: key }),\n getRuntime: async (key, meta) => this.cacheManager.ensureHandle({ cfg: input.cfg, sessionKey: key, meta }),\n clearCached: (key) => this.cacheManager.clear(key),\n });\n\n if (result.runtimeClosed || result.metaCleared) {\n this.cacheManager.clear(input.sessionKey);\n }\n\n return result;\n });\n }\n\n // ============== Private Methods ==============\n\n private async updateAndPersistOptions(\n sessionKey: string,\n patch: Partial<AcpSessionRuntimeOptions>,\n ): Promise<AcpSessionRuntimeOptions> {\n const entry = await this.sessionStore.load(sessionKey);\n const current = entry?.acp?.runtimeOptions ?? {};\n const nextOptions = { ...current, ...patch };\n\n await this.lifecycleManager.updateRuntimeOptions({\n sessionKey,\n options: nextOptions,\n clearCacheIfCwdChanged: (key, newCwd) => {\n const cached = this.cacheManager.get(key);\n if (cached && (cached.cwd ?? \"\") !== (newCwd ?? \"\")) {\n this.cacheManager.clear(key);\n }\n },\n });\n\n return nextOptions;\n }\n\n private async resolveRuntimeCapabilities(params: {\n runtime: AcpRuntime;\n handle: AcpRuntimeHandle;\n }): Promise<{ controls: AcpRuntimeControl[]; configOptionKeys?: string[] }> {\n if (params.runtime.getCapabilities) {\n return await Promise.resolve(params.runtime.getCapabilities({ handle: params.handle }));\n }\n return { controls: [] };\n }\n\n private async getRuntimeStatusSafe(\n runtime: AcpRuntime,\n handle: AcpRuntimeHandle,\n signal?: AbortSignal,\n ): Promise<{ summary?: string; details?: Record<string, unknown> }> {\n if (!runtime.getStatus) return {};\n\n try {\n this.throwIfAborted(signal);\n return await runtime.getStatus({ handle, signal });\n } catch {\n return {};\n }\n }\n\n private async evictIdleRuntimeHandles(params: { cfg: Config }): Promise<void> {\n await this.cacheManager.evictIdle({\n cfg: params.cfg,\n hasActiveTurn: (key) => this.turnManager.hasActiveTurn(key),\n onEvict: async (state) => {\n await state.runtime.close({ handle: state.handle, reason: \"idle-evicted\" });\n },\n });\n }\n\n private async withSessionActor<T>(\n sessionKey: string,\n op: () => Promise<T>,\n signal?: AbortSignal,\n ): Promise<T> {\n return await this.actorQueue.run(normalizeActorKey(sessionKey), async () => {\n this.throwIfAborted(signal);\n return await op();\n });\n }\n\n private throwIfAborted(signal?: AbortSignal): void {\n if (signal?.aborted) {\n throw new AcpRuntimeError(\"ACP_TURN_FAILED\", \"ACP operation aborted.\");\n }\n }\n}\n\n// Singleton\nlet ACP_SESSION_MANAGER_SINGLETON: AcpSessionManager | null = null;\nlet ACP_SESSION_MANAGER_INIT_PROMISE: Promise<void> | null = null;\n\nexport function getAcpSessionManager(): AcpSessionManager {\n if (!ACP_SESSION_MANAGER_SINGLETON) {\n ACP_SESSION_MANAGER_SINGLETON = new AcpSessionManager();\n ACP_SESSION_MANAGER_INIT_PROMISE = ACP_SESSION_MANAGER_SINGLETON.initialize();\n }\n return ACP_SESSION_MANAGER_SINGLETON;\n}\n\n/** Initialize and get the ACP session manager */\nexport async function getAcpSessionManagerAsync(): Promise<AcpSessionManager> {\n const manager = getAcpSessionManager();\n if (ACP_SESSION_MANAGER_INIT_PROMISE) {\n await ACP_SESSION_MANAGER_INIT_PROMISE;\n ACP_SESSION_MANAGER_INIT_PROMISE = null;\n }\n return manager;\n}\n\nexport const __testing = {\n resetAcpSessionManagerForTests(): void {\n ACP_SESSION_MANAGER_SINGLETON = null;\n },\n};\n"],"mappings":"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"}