squidclaw 2026.4.24 → 2026.4.26

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 (1248) hide show
  1. package/dist/.buildstamp +1 -1
  2. package/dist/abort-C3Ip4Pdy.js +201 -0
  3. package/dist/abort.runtime-QNYdlOpn.js +2 -0
  4. package/dist/abort.runtime.js +1 -1
  5. package/dist/access-control-DwlCAZOQ.js +146 -0
  6. package/dist/accounts-C96LVxAj.js +133 -0
  7. package/dist/accounts-CBYP10BZ.js +107 -0
  8. package/dist/accounts-CPDLJugT.js +104 -0
  9. package/dist/accounts-LbGlovbZ.js +2 -0
  10. package/dist/acp-binding-runtime-BzT7m6eA.js +2 -0
  11. package/dist/acp-cli-CPb8l8Kq.js +2194 -0
  12. package/dist/acp-runtime--wBJVnTK.js +68 -0
  13. package/dist/acp-stateful-target-driver-BsXqxZs1.js +87 -0
  14. package/dist/action-agents-fCQzEMVA.js +67 -0
  15. package/dist/action-focus-C54pZO2i.js +123 -0
  16. package/dist/action-help-Dls799vg.js +7 -0
  17. package/dist/action-info-Df7LML-M.js +58 -0
  18. package/dist/action-kill-CzSrpu4H.js +33 -0
  19. package/dist/action-list-8B0fqbE1.js +21 -0
  20. package/dist/action-log-D4Esl7DY.js +30 -0
  21. package/dist/action-runtime-BQL7ZKYp.js +323 -0
  22. package/dist/action-runtime-FEfSljLk.js +72 -0
  23. package/dist/action-runtime-Ih2WV4_Q.js +419 -0
  24. package/dist/action-runtime-api-SwJP8tC2.js +2 -0
  25. package/dist/action-runtime.runtime-Dg0EDpD0.js +2 -0
  26. package/dist/action-runtime.runtime.js +1 -1
  27. package/dist/action-send-FZEWY7z-.js +39 -0
  28. package/dist/action-spawn-D9aYmWtU.js +46 -0
  29. package/dist/action-unfocus-DH_0Sdai.js +28 -0
  30. package/dist/actions-_4VXA2Mi.js +539 -0
  31. package/dist/actions.runtime-C0sq1G1X.js +18 -0
  32. package/dist/actions.runtime-Csmut5JU.js +2 -0
  33. package/dist/actions.runtime-DK1S2kPA.js +5 -0
  34. package/dist/actions.runtime.js +1 -1
  35. package/dist/agent-DDUCovt6.js +2 -0
  36. package/dist/agent-command-B66ZhH42.js +1453 -0
  37. package/dist/agent-components.runtime-BKPjyXtT.js +10 -0
  38. package/dist/agent-components.runtime.js +1 -1
  39. package/dist/agent-runner.runtime-C9TebV0N.js +2712 -0
  40. package/dist/agent-runner.runtime.js +1 -1
  41. package/dist/agent-runtime-t-qKN_UH.js +17 -0
  42. package/dist/agents-BQS1Y3W6.js +5 -0
  43. package/dist/agents-_tqZh21O.js +887 -0
  44. package/dist/api-BHDjzh-P.js +2 -0
  45. package/dist/api-BhSeyy_T.js +2 -0
  46. package/dist/api-BhYwA1V2.js +1085 -0
  47. package/dist/api-CDtkR7PN.js +7 -0
  48. package/dist/api-CxpdTzFP.js +19032 -0
  49. package/dist/api-CyiHB3Bg.js +5 -0
  50. package/dist/api-DLBxNdf6.js +5 -0
  51. package/dist/api-DyFZaXTD.js +2 -0
  52. package/dist/api-JpNozfiq.js +7524 -0
  53. package/dist/api-kcSVTL-D.js +3 -0
  54. package/dist/approval-gateway-resolver-BrmICL5N.js +58 -0
  55. package/dist/approval-gateway-runtime-iBiFwmNK.js +2 -0
  56. package/dist/approval-handler-runtime-6tNhCATs.js +439 -0
  57. package/dist/approval-handler-runtime-Y6qTvYdd.js +3 -0
  58. package/dist/approval-handler.runtime-BjSoNi2w.js +245 -0
  59. package/dist/approval-handler.runtime-CoHzXxnh.js +2 -0
  60. package/dist/approval-handler.runtime-DUXalSxo.js +389 -0
  61. package/dist/approval-handler.runtime-SNOyMr7X.js +130 -0
  62. package/dist/approval-handler.runtime-uqWDos3I.js +285 -0
  63. package/dist/approval-handler.runtime.js +1 -1
  64. package/dist/approval-native-ByQ5cAKu.js +156 -0
  65. package/dist/approval-native-IX9eLH7P.js +130 -0
  66. package/dist/approval-native-runtime-BvK9OIUS.js +709 -0
  67. package/dist/approval-runtime-DrDMdWm9.js +9 -0
  68. package/dist/attachment-normalize-4X-dPdgN.js +1013 -0
  69. package/dist/audit-C621VOev.js +99 -0
  70. package/dist/audit-Cgyz5k-s.js +2 -0
  71. package/dist/audit-I_keYen3.js +885 -0
  72. package/dist/audit.runtime-LrJ3wwQS.js +7 -0
  73. package/dist/audit.runtime.js +1 -1
  74. package/dist/auth-config-utils-T0ZgqKam.js +96 -0
  75. package/dist/binding-routing-dsu8Ei2E.js +50 -0
  76. package/dist/binding-targets-DLGZ_Ium.js +99 -0
  77. package/dist/bot-B_6rj4zN.js +5426 -0
  78. package/dist/bot-message-context.runtime-DkgJddS4.js +8 -0
  79. package/dist/bot-message-context.runtime.js +1 -1
  80. package/dist/bot-message-context.session.runtime-TObgOB7o.js +12 -0
  81. package/dist/bot-message-context.session.runtime.js +1 -1
  82. package/dist/bot-native-commands.delivery.runtime-BZtEbhIe.js +3 -0
  83. package/dist/bot-native-commands.delivery.runtime.js +1 -1
  84. package/dist/bot-native-commands.runtime-BMD61ysH.js +13 -0
  85. package/dist/bot-native-commands.runtime.js +1 -1
  86. package/dist/bridge-server-CS1RLfW4.js +102 -0
  87. package/dist/browser-cdp-CghSlauS.js +2 -0
  88. package/dist/browser-cdp-CvTVpSI6.js +2 -0
  89. package/dist/browser-control-auth-C9pUylzV.js +2 -0
  90. package/dist/browser-control-auth-nhU4A0DX.js +2 -0
  91. package/dist/browser-doctor-BOEftV4I.js +78 -0
  92. package/dist/browser-maintenance-DOcb80F5.js +3 -0
  93. package/dist/browser-node-runtime-BOCwie8T.js +490 -0
  94. package/dist/browser-profiles-BOvL9Nd_.js +2 -0
  95. package/dist/browser-profiles-D7h0J9IB.js +2 -0
  96. package/dist/browser-setup-tools-CeMAH5u9.js +321 -0
  97. package/dist/build-info.json +3 -3
  98. package/dist/bundled/boot-md/handler.js +2 -2
  99. package/dist/bundled/session-memory/handler.js +1 -1
  100. package/dist/call-BPuAN6uk.js +2 -0
  101. package/dist/call-Stm9npN1.js +527 -0
  102. package/dist/call.runtime-pNpOyCMV.js +2 -0
  103. package/dist/call.runtime.js +1 -1
  104. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  105. package/dist/capability-cli-DDNbz6qA.js +1350 -0
  106. package/dist/captured-registration-DiZNTE1j.js +1159 -0
  107. package/dist/channel-5cqa1fkB.js +482 -0
  108. package/dist/channel-B2BtCq9W.js +843 -0
  109. package/dist/channel-B3LQs2NY.js +1146 -0
  110. package/dist/channel-BpRwK42_.js +816 -0
  111. package/dist/channel-D37vkLja.js +226 -0
  112. package/dist/channel-DIhovOIw.js +864 -0
  113. package/dist/channel-DWq9G6kb.js +1109 -0
  114. package/dist/channel-Daae0E3T.js +532 -0
  115. package/dist/channel-DvleEuhM.js +991 -0
  116. package/dist/channel-actions-BdSOWgd_.js +233 -0
  117. package/dist/channel-actions.runtime-BqTVWPRH.js +2 -0
  118. package/dist/channel-actions.runtime.js +1 -1
  119. package/dist/channel-core-Cv3Q_BxL.js +2 -0
  120. package/dist/channel-iCTT2rJY.js +1168 -0
  121. package/dist/channel-inbound-2Azyl-Eq.js +31 -0
  122. package/dist/channel-plugin-runtime-C0B9dm1c.js +784 -0
  123. package/dist/channel-react-action-t-Q8EYHs.js +39 -0
  124. package/dist/channel-runtime-u_0nRFcO.js +427 -0
  125. package/dist/channel-tcRPznyK.js +368 -0
  126. package/dist/channel.runtime-B4njrVR-.js +87 -0
  127. package/dist/channel.runtime-B7f1kmTM.js +131 -0
  128. package/dist/channel.runtime-Bfpl66UH.js +348 -0
  129. package/dist/channel.runtime-C7QMwh86.js +399 -0
  130. package/dist/channel.runtime-Cc3a4FA5.js +2169 -0
  131. package/dist/channel.runtime-Cch8xmFc.js +35114 -0
  132. package/dist/channel.runtime-CfoT2NmX.js +109 -0
  133. package/dist/channel.runtime-DyKO7U-e.js +789 -0
  134. package/dist/channel.runtime-DydTNcYU.js +4 -0
  135. package/dist/channel.runtime-nu19ePyh.js +429 -0
  136. package/dist/channel.runtime.js +1 -1
  137. package/dist/channel.setup-CUbpzSW3.js +8 -0
  138. package/dist/channel.setup-D-X7BY4c.js +17 -0
  139. package/dist/channel.setup-VaEcA2Bw.js +274 -0
  140. package/dist/channel2.runtime-CLngBuRF.js +2067 -0
  141. package/dist/channel2.runtime.js +1 -1
  142. package/dist/channels-cli-BxujBciW.js +246 -0
  143. package/dist/channels-iGV5z9VU.js +1145 -0
  144. package/dist/clawbot-cli-Dq5qEzSA.js +9 -0
  145. package/dist/cli/daemon-cli.js +1 -1
  146. package/dist/cli-C32Tbry-.js +696 -0
  147. package/dist/cli-CEXN0k1o.js +79 -0
  148. package/dist/cli-CGKUU-db.js +64 -0
  149. package/dist/cli-Cx3rv1vo.js +2 -0
  150. package/dist/cli-metadata-D6pLr6rq.js +22 -0
  151. package/dist/cli-startup-metadata.json +1 -1
  152. package/dist/cli.runtime-CiBfmyfs.js +435 -0
  153. package/dist/cli.runtime-DEQio5Lw.js +913 -0
  154. package/dist/cli.runtime.js +1 -1
  155. package/dist/client-1JAVhCV6.js +5 -0
  156. package/dist/client-D1lDccJs.js +7 -0
  157. package/dist/client-Du86RGVU.js +19 -0
  158. package/dist/client-HlUQWLff.js +138 -0
  159. package/dist/client-bootstrap-ByVde6Fa.js +28 -0
  160. package/dist/client-bootstrap-C0Wk4TyE.js +103 -0
  161. package/dist/client-bootstrap-Dh4UZQOs.js +2 -0
  162. package/dist/client-fetch-DJ3v5Zqh.js +6329 -0
  163. package/dist/client-ymH-icZi.js +76 -0
  164. package/dist/command-auth-D_xf4gCH.js +82 -0
  165. package/dist/command-config-resolution-BAsIvTx0.js +23 -0
  166. package/dist/command-config-resolution-CpiepMpe.js +2 -0
  167. package/dist/command-registry-BIG4I3Tl.js +103 -0
  168. package/dist/command-registry-C4qTbytp.js +3 -0
  169. package/dist/command-secret-gateway-CENVpYli.js +528 -0
  170. package/dist/commands-acp-Cs1u2TMa.js +1016 -0
  171. package/dist/commands-compact.runtime-BU8kO8vM.js +9 -0
  172. package/dist/commands-compact.runtime.js +1 -1
  173. package/dist/commands-handlers.runtime-C2sVgHH3.js +3752 -0
  174. package/dist/commands-handlers.runtime.js +1 -1
  175. package/dist/commands-status-Cz9bvbev.js +220 -0
  176. package/dist/commands-status.runtime-B0oVKqlK.js +2 -0
  177. package/dist/commands-status.runtime.js +1 -1
  178. package/dist/commands-subagents-control.runtime-BayeBpt2.js +3 -0
  179. package/dist/commands-subagents-control.runtime-BrvZHkSL.js +2 -0
  180. package/dist/commands-subagents-control.runtime.js +1 -1
  181. package/dist/commands.runtime-CYPSZ2Po.js +103 -0
  182. package/dist/commands.runtime.js +1 -1
  183. package/dist/compact.runtime-q-dUs-qg.js +7 -0
  184. package/dist/compact.runtime.js +1 -1
  185. package/dist/completion-cli-C9KjcjmD.js +464 -0
  186. package/dist/completion-cli-h0Jz9_xh.js +2 -0
  187. package/dist/config-DH9LZzz-.js +555 -0
  188. package/dist/config-cli-CE2z2XhI.js +946 -0
  189. package/dist/configure-B1KcWWIQ.js +1157 -0
  190. package/dist/configure-BFpmOfcM.js +2 -0
  191. package/dist/connect-options-wUo0syAv.js +702 -0
  192. package/dist/connection-auth-DALCO1uk.js +30 -0
  193. package/dist/control-auth-CflplSYR.js +55 -0
  194. package/dist/conversation-binding-runtime-uoVX8Lm4.js +4 -0
  195. package/dist/conversation-runtime-WfUMmAAc.js +31 -0
  196. package/dist/core-BnLEfcOW.js +210 -0
  197. package/dist/core-api-5mOZyT2k.js +372 -0
  198. package/dist/create-client-B5apuysv.js +2 -0
  199. package/dist/create-client-FX-9Y0XK.js +61 -0
  200. package/dist/credentials-oSecax07.js +57 -0
  201. package/dist/credentials-write.runtime-BF3qpFqv.js +12 -0
  202. package/dist/credentials-write.runtime.js +1 -1
  203. package/dist/cron-cli-CquHRHP9.js +637 -0
  204. package/dist/crypto-runtime-BaeaJGjJ.js +3510 -0
  205. package/dist/daemon-cli-C2ygRiWD.js +408 -0
  206. package/dist/daemon-install-Ba_zQ3ks.js +63 -0
  207. package/dist/delegate-k0Mpo7Fv.js +59 -0
  208. package/dist/delivery-BWwkQRrF.js +858 -0
  209. package/dist/devices-cli-BtB_W8Zn.js +329 -0
  210. package/dist/direct-dm-BPup4rb6.js +139 -0
  211. package/dist/directive-handling.fast-lane-D8zsIDMg.js +64 -0
  212. package/dist/directive-handling.fast-lane-DA2YZPX0.js +2 -0
  213. package/dist/directive-handling.impl-D7beV5oV.js +659 -0
  214. package/dist/directive-handling.impl-DukNkNri.js +2 -0
  215. package/dist/directory-live-Bj4yafmF.js +105 -0
  216. package/dist/directory-live-D5tvc0Jj.js +2 -0
  217. package/dist/discovery-B5x1zcdW.js +280 -0
  218. package/dist/discovery-f3K2E-jQ.js +201 -0
  219. package/dist/dispatch-BTn7rXKb.js +970 -0
  220. package/dist/dispatch-acp-Dxchw6dz.js +969 -0
  221. package/dist/dispatch-acp-manager.runtime-v3DvTQTV.js +3 -0
  222. package/dist/dispatch-acp-manager.runtime.js +1 -1
  223. package/dist/dispatch-acp.runtime-BSHeNOOR.js +19 -0
  224. package/dist/dispatch-acp.runtime.js +1 -1
  225. package/dist/docker-harness-B8V4pktJ.js +277 -0
  226. package/dist/doctor-completion-BqOiWnS_.js +90 -0
  227. package/dist/entry.js +1 -1
  228. package/dist/env-auth-DXWyTD3f.js +2 -0
  229. package/dist/exec-approvals-DB9tWYQD.js +272 -0
  230. package/dist/exec-approvals-cli-BQ44KCYG.js +483 -0
  231. package/dist/exec-approvals-ymQFSV4S.js +129 -0
  232. package/dist/extensionAPI.js +1 -1
  233. package/dist/extensions/acpx/index.js +3 -3
  234. package/dist/extensions/acpx/register.runtime.js +1 -1
  235. package/dist/extensions/acpx/runtime-api.js +3 -3
  236. package/dist/extensions/amazon-bedrock/.squidclaw-runtime-deps-stamp.json +1 -1
  237. package/dist/extensions/amazon-bedrock/api.js +2 -2
  238. package/dist/extensions/amazon-bedrock/discovery.js +1 -1
  239. package/dist/extensions/amazon-bedrock/index.js +1 -1
  240. package/dist/extensions/amazon-bedrock/register.sync.runtime.js +1 -1
  241. package/dist/extensions/amazon-bedrock/setup-api.js +1 -1
  242. package/dist/extensions/amazon-bedrock-mantle/.squidclaw-runtime-deps-stamp.json +1 -1
  243. package/dist/extensions/amazon-bedrock-mantle/api.js +1 -1
  244. package/dist/extensions/amazon-bedrock-mantle/discovery.js +1 -1
  245. package/dist/extensions/amazon-bedrock-mantle/index.js +1 -1
  246. package/dist/extensions/amazon-bedrock-mantle/register.sync.runtime.js +1 -1
  247. package/dist/extensions/bluebubbles/api.js +6 -6
  248. package/dist/extensions/browser/browser-bridge.js +1 -1
  249. package/dist/extensions/browser/browser-cdp.js +2 -2
  250. package/dist/extensions/browser/browser-config.js +2 -2
  251. package/dist/extensions/browser/browser-control-auth.js +2 -2
  252. package/dist/extensions/browser/browser-doctor.js +1 -1
  253. package/dist/extensions/browser/browser-maintenance.js +3 -3
  254. package/dist/extensions/browser/browser-profiles.js +2 -2
  255. package/dist/extensions/browser/browser-runtime-api.js +6 -6
  256. package/dist/extensions/browser/index.js +1 -1
  257. package/dist/extensions/browser/plugin-registration.js +1 -1
  258. package/dist/extensions/browser/register.runtime.js +3 -3
  259. package/dist/extensions/browser/runtime-api.js +7 -7
  260. package/dist/extensions/browser/test-support.js +2 -2
  261. package/dist/extensions/device-pair/api.js +1 -1
  262. package/dist/extensions/device-pair/index.js +3 -3
  263. package/dist/extensions/device-pair/notify.js +1 -1
  264. package/dist/extensions/device-pair/pair-command-approve.js +1 -1
  265. package/dist/extensions/diffs/.squidclaw-runtime-deps-stamp.json +1 -1
  266. package/dist/extensions/discord/.squidclaw-runtime-deps-stamp.json +1 -1
  267. package/dist/extensions/discord/action-runtime-api.js +2 -2
  268. package/dist/extensions/discord/api.js +7 -7
  269. package/dist/extensions/discord/channel-plugin-api.js +1 -1
  270. package/dist/extensions/discord/contract-api.js +2 -2
  271. package/dist/extensions/discord/runtime-api.js +11 -11
  272. package/dist/extensions/discord/subagent-hooks-api.js +1 -1
  273. package/dist/extensions/discord/test-api.js +4 -4
  274. package/dist/extensions/feishu/.squidclaw-runtime-deps-stamp.json +1 -1
  275. package/dist/extensions/feishu/api.js +6 -6
  276. package/dist/extensions/feishu/contract-api.js +1 -1
  277. package/dist/extensions/feishu/runtime-api.js +1 -1
  278. package/dist/extensions/google/index.js +1 -1
  279. package/dist/extensions/google/music-generation-provider.js +1 -1
  280. package/dist/extensions/googlechat/api.js +1 -1
  281. package/dist/extensions/googlechat/runtime-api.js +1 -1
  282. package/dist/extensions/googlechat/test-api.js +2 -2
  283. package/dist/extensions/imessage/api.js +6 -6
  284. package/dist/extensions/imessage/runtime-api.js +3 -3
  285. package/dist/extensions/irc/api.js +2 -2
  286. package/dist/extensions/irc/channel-plugin-api.js +1 -1
  287. package/dist/extensions/line/api.js +7 -7
  288. package/dist/extensions/line/contract-api.js +1 -1
  289. package/dist/extensions/line/runtime-api.js +4 -4
  290. package/dist/extensions/line/setup-api.js +1 -1
  291. package/dist/extensions/llm-task/index.js +2 -2
  292. package/dist/extensions/lobster/runtime-api.js +1 -1
  293. package/dist/extensions/matrix/api.js +4 -4
  294. package/dist/extensions/matrix/channel-plugin-api.js +1 -1
  295. package/dist/extensions/matrix/cli-metadata.js +1 -1
  296. package/dist/extensions/matrix/contract-api.js +3 -3
  297. package/dist/extensions/matrix/index.js +1 -1
  298. package/dist/extensions/matrix/plugin-entry.handlers.runtime.js +3 -3
  299. package/dist/extensions/matrix/runtime-heavy-api.js +1 -1
  300. package/dist/extensions/matrix/test-api.js +1 -1
  301. package/dist/extensions/mattermost/api.js +1 -1
  302. package/dist/extensions/mattermost/channel-plugin-api.js +1 -1
  303. package/dist/extensions/mattermost/channel-plugin-runtime.js +1 -1
  304. package/dist/extensions/mattermost/policy-api.js +1 -1
  305. package/dist/extensions/mattermost/runtime-api.js +1 -1
  306. package/dist/extensions/memory-core/cli-metadata.js +2 -2
  307. package/dist/extensions/memory-core/index.js +1 -1
  308. package/dist/extensions/memory-lancedb/cli-metadata.js +1 -1
  309. package/dist/extensions/minimax/index.js +1 -1
  310. package/dist/extensions/minimax/music-generation-provider.js +1 -1
  311. package/dist/extensions/msteams/api.js +1 -1
  312. package/dist/extensions/msteams/runtime-api.js +3 -3
  313. package/dist/extensions/msteams/test-api.js +1 -1
  314. package/dist/extensions/nextcloud-talk/api.js +5 -5
  315. package/dist/extensions/nextcloud-talk/runtime-api.js +2 -2
  316. package/dist/extensions/nostr/api.js +5 -5
  317. package/dist/extensions/nostr/runtime-api.js +3 -3
  318. package/dist/extensions/nostr/setup-api.js +1 -1
  319. package/dist/extensions/nostr/test-api.js +1 -1
  320. package/dist/extensions/openshell/index.js +3 -3
  321. package/dist/extensions/qa-channel/api.js +3 -3
  322. package/dist/extensions/qa-channel/runtime-api.js +3 -3
  323. package/dist/extensions/qa-channel/setup-entry.js +3 -3
  324. package/dist/extensions/qa-lab/api.js +4 -4
  325. package/dist/extensions/qa-lab/index.js +2 -2
  326. package/dist/extensions/qa-lab/runtime-api.js +4 -4
  327. package/dist/extensions/qqbot/.squidclaw-runtime-deps-stamp.json +1 -1
  328. package/dist/extensions/qqbot/api.js +1 -1
  329. package/dist/extensions/signal/api.js +10 -10
  330. package/dist/extensions/signal/reaction-runtime-api.js +1 -1
  331. package/dist/extensions/signal/runtime-api.js +7 -7
  332. package/dist/extensions/slack/.squidclaw-runtime-deps-stamp.json +1 -1
  333. package/dist/extensions/slack/api.js +9 -9
  334. package/dist/extensions/slack/channel-plugin-api.js +1 -1
  335. package/dist/extensions/slack/contract-api.js +3 -3
  336. package/dist/extensions/slack/runtime-api.js +9 -9
  337. package/dist/extensions/slack/security-contract-api.js +1 -1
  338. package/dist/extensions/slack/setup-plugin-api.js +1 -1
  339. package/dist/extensions/slack/test-api.js +4 -4
  340. package/dist/extensions/speech-core/runtime-api.js +1 -1
  341. package/dist/extensions/synology-chat/api.js +2 -2
  342. package/dist/extensions/telegram/.squidclaw-runtime-deps-stamp.json +1 -1
  343. package/dist/extensions/telegram/api.js +11 -11
  344. package/dist/extensions/telegram/channel-plugin-api.js +2 -2
  345. package/dist/extensions/telegram/contract-api.js +4 -4
  346. package/dist/extensions/telegram/runtime-api.js +7 -7
  347. package/dist/extensions/telegram/setup-plugin-api.js +1 -1
  348. package/dist/extensions/telegram/test-api.js +2 -2
  349. package/dist/extensions/telegram/test-support.js +3 -3
  350. package/dist/extensions/tlon/api.js +3 -3
  351. package/dist/extensions/tlon/runtime-api.js +1 -1
  352. package/dist/extensions/tlon/test-api.js +1 -1
  353. package/dist/extensions/twitch/api.js +1 -1
  354. package/dist/extensions/webhooks/.squidclaw-runtime-deps-stamp.json +1 -1
  355. package/dist/extensions/webhooks/api.js +1 -1
  356. package/dist/extensions/webhooks/index.js +1 -1
  357. package/dist/extensions/whatsapp/action-runtime-api.js +1 -1
  358. package/dist/extensions/whatsapp/action-runtime.runtime.js +1 -1
  359. package/dist/extensions/whatsapp/api.js +4 -4
  360. package/dist/extensions/whatsapp/channel-plugin-api.js +1 -1
  361. package/dist/extensions/whatsapp/contract-api.js +1 -1
  362. package/dist/extensions/whatsapp/runtime-api.js +7 -7
  363. package/dist/extensions/whatsapp/setup-plugin-api.js +1 -1
  364. package/dist/extensions/whatsapp/test-api.js +4 -4
  365. package/dist/extensions/zalo/api.js +9 -9
  366. package/dist/extensions/zalo/runtime-api.js +2 -2
  367. package/dist/extensions/zalo/setup-api.js +2 -2
  368. package/dist/extensions/zalouser/api.js +1 -1
  369. package/dist/extensions/zalouser/runtime-api.js +4 -4
  370. package/dist/extensions/zalouser/test-api.js +1 -1
  371. package/dist/format-DsACiUPu.js +941 -0
  372. package/dist/gateway-c-WsPYj4.js +2652 -0
  373. package/dist/gateway-cli-Bnpc2Voo.js +1510 -0
  374. package/dist/gateway-install-token-DIOAhXuh.js +213 -0
  375. package/dist/gateway-rpc-DVaHylV3.js +14 -0
  376. package/dist/gateway-rpc.runtime-kXdx3hkp.js +23 -0
  377. package/dist/gateway-rpc.runtime.js +1 -1
  378. package/dist/gateway-runtime-BhcAFzRw.js +12 -0
  379. package/dist/get-reply-from-config.runtime-d4te9jQo.js +2 -0
  380. package/dist/get-reply-from-config.runtime.js +1 -1
  381. package/dist/graph-users-zs6xFUeS.js +926 -0
  382. package/dist/group-access-B4ZqqG4N.js +119 -0
  383. package/dist/handle-action-DeKTbWt6.js +505 -0
  384. package/dist/health-Dj59Wog_.js +2 -0
  385. package/dist/health-y_vsJR_i.js +578 -0
  386. package/dist/heartbeat-runner-DZxpXVmc.js +1060 -0
  387. package/dist/heartbeat-runner-Do5PsCsd.js +4 -0
  388. package/dist/heartbeat-runner.runtime-B9A8-a50.js +2 -0
  389. package/dist/heartbeat-runner.runtime.js +1 -1
  390. package/dist/http-client-DZ8yqOqh.js +322 -0
  391. package/dist/inbound-reply-dispatch-CgmaSukn.js +73 -0
  392. package/dist/index.js +2 -2
  393. package/dist/infra-runtime-CTXlws25.js +23 -0
  394. package/dist/inline-buttons-9XyokdjH.js +40 -0
  395. package/dist/known-users-DpbiKYbd.js +1180 -0
  396. package/dist/legacy-crypto-restore-C9_FfFfg.js +85 -0
  397. package/dist/library-BpcEZKWC.js +44 -0
  398. package/dist/llm-slug-generator-P7hR4Vjw.js +69 -0
  399. package/dist/llm-slug-generator.js +1 -1
  400. package/dist/login-Ck0Wi5lt.js +2574 -0
  401. package/dist/logs-cli-CXtWYpE2.js +264 -0
  402. package/dist/logs-cli.runtime-aJbUlXPP.js +2 -0
  403. package/dist/logs-cli.runtime.js +1 -1
  404. package/dist/manager-398fysIe.js +2048 -0
  405. package/dist/manager.runtime-BXi2JFi_.js +900 -0
  406. package/dist/manager.runtime.js +1 -1
  407. package/dist/markdown-to-line-BAz5cp2N.js +781 -0
  408. package/dist/matrix-migration.runtime-BJGNsR_f.js +2 -0
  409. package/dist/matrix-migration.runtime.js +1 -1
  410. package/dist/mcp-cli-Dak77dd9.js +747 -0
  411. package/dist/media-text-2gf65U8r.js +146 -0
  412. package/dist/memory-core-CvBuLWAT.js +7 -0
  413. package/dist/memory-core-host-runtime-cli-C6YZxF34.js +9 -0
  414. package/dist/message-DQn4jjjK.js +223 -0
  415. package/dist/message-action-runner-BXCwnHl-.js +1628 -0
  416. package/dist/message-action-runner-Bker0uL5.js +2 -0
  417. package/dist/message-actions-AsXQpb4E.js +143 -0
  418. package/dist/message-handler-CQ_vnfR8.js +1925 -0
  419. package/dist/message.gateway.runtime-CJiz4m8j.js +2 -0
  420. package/dist/message.gateway.runtime.js +1 -1
  421. package/dist/messages-BY_cfyDr.js +139 -0
  422. package/dist/method-scopes-D6zsS-pm.js +2803 -0
  423. package/dist/migration-snapshot.runtime-CuobftaY.js +3 -0
  424. package/dist/migration-snapshot.runtime.js +1 -1
  425. package/dist/models-CUbywYoT.js +3 -0
  426. package/dist/models-Mt05Glx7.js +2565 -0
  427. package/dist/models-cli-Diu9RWcd.js +197 -0
  428. package/dist/monitor-BVQ_6q4q.js +1344 -0
  429. package/dist/monitor-BgZqpzQ4.js +3653 -0
  430. package/dist/monitor-CRyZeOLA.js +5 -0
  431. package/dist/monitor-CTeJMQIS.js +1533 -0
  432. package/dist/monitor-Clsyl6I5.js +1221 -0
  433. package/dist/monitor-DWmNxlg8.js +2 -0
  434. package/dist/monitor-Dl93TMoP.js +524 -0
  435. package/dist/monitor-DulT_zS7.js +673 -0
  436. package/dist/monitor-DxfN501k.js +288 -0
  437. package/dist/monitor-auth-BylfDCgP.js +2470 -0
  438. package/dist/monitor-normalize-8NtJ86WB.js +1018 -0
  439. package/dist/monitor-polling.runtime-bSalr8n9.js +309 -0
  440. package/dist/monitor-polling.runtime.js +1 -1
  441. package/dist/monitor-tQtfAk9w.js +4027 -0
  442. package/dist/monitor-webhook.runtime-1zpAZts3.js +298 -0
  443. package/dist/monitor-webhook.runtime.js +1 -1
  444. package/dist/monitor-wo_dDmjy.js +4 -0
  445. package/dist/monitor.runtime-BuadcqNG.js +2 -0
  446. package/dist/monitor.runtime.js +1 -1
  447. package/dist/monitor.webhook-DWunSb4d.js +152 -0
  448. package/dist/msteams-YxwMN3QQ.js +35 -0
  449. package/dist/music-generation-provider-DPY-Y9pn.js +141 -0
  450. package/dist/music-generation-provider-c5eFh-q4.js +169 -0
  451. package/dist/nextcloud-talk-YBKgqApH.js +17 -0
  452. package/dist/node-cli-BzVdkCht.js +2361 -0
  453. package/dist/nodes-cli-WBuANN5j.js +1046 -0
  454. package/dist/nostr-BSBIORO6.js +20 -0
  455. package/dist/notify-Ca3IwAyy.js +301 -0
  456. package/dist/onboard-CmEE959C.js +620 -0
  457. package/dist/onboard-helpers-J7K9QCXJ.js +210 -0
  458. package/dist/onboard-helpers-c55t1Rta.js +5 -0
  459. package/dist/onboard-remote-BI9k0tWz.js +2 -0
  460. package/dist/onboard-remote-zMTzPAhZ.js +193 -0
  461. package/dist/onboard-skills-BahZW5qf.js +134 -0
  462. package/dist/onboard-skills-C0jpNuK6.js +2 -0
  463. package/dist/operator-approvals-client-BqmunuEw.js +68 -0
  464. package/dist/outbound-adapter-CL3PYt0S.js +186 -0
  465. package/dist/outbound-adapter-Dj9zOahO.js +195 -0
  466. package/dist/outbound-send-deps-Ch1FX3cp.js +179 -0
  467. package/dist/outbound.runtime-CLByNIkJ.js +2 -0
  468. package/dist/outbound.runtime.js +1 -1
  469. package/dist/pair-command-approve-cbRWZncm.js +34 -0
  470. package/dist/persistent-bindings.lifecycle-hzcUlmjI.js +94 -0
  471. package/dist/pi-embedded-1KYWU12i.js +4 -0
  472. package/dist/pi-embedded-CmMqks-z.js +34664 -0
  473. package/dist/pi-embedded.runtime-C_FpZUhj.js +4 -0
  474. package/dist/pi-embedded.runtime.js +1 -1
  475. package/dist/plugin-registration-BhKSTk3H.js +23 -0
  476. package/dist/plugin-sdk/.boundary-entry-shims.stamp +1 -1
  477. package/dist/plugin-sdk/acp-binding-runtime.js +2 -2
  478. package/dist/plugin-sdk/acp-runtime.js +2 -2
  479. package/dist/plugin-sdk/agent-runtime.js +2 -2
  480. package/dist/plugin-sdk/approval-gateway-runtime.js +2 -2
  481. package/dist/plugin-sdk/approval-handler-runtime.js +3 -3
  482. package/dist/plugin-sdk/approval-runtime.js +2 -2
  483. package/dist/plugin-sdk/browser-cdp.js +2 -2
  484. package/dist/plugin-sdk/browser-config.js +5 -5
  485. package/dist/plugin-sdk/browser-control-auth.js +2 -2
  486. package/dist/plugin-sdk/browser-node-runtime.js +3 -3
  487. package/dist/plugin-sdk/browser-profiles.js +2 -2
  488. package/dist/plugin-sdk/browser-setup-tools.js +1 -1
  489. package/dist/plugin-sdk/browser-support.js +4 -4
  490. package/dist/plugin-sdk/channel-core.js +2 -2
  491. package/dist/plugin-sdk/channel-inbound.js +2 -2
  492. package/dist/plugin-sdk/command-auth.js +3 -3
  493. package/dist/plugin-sdk/compat.js +1 -1
  494. package/dist/plugin-sdk/conversation-binding-runtime.js +2 -2
  495. package/dist/plugin-sdk/conversation-runtime.js +3 -3
  496. package/dist/plugin-sdk/core.js +3 -3
  497. package/dist/plugin-sdk/direct-dm.js +1 -1
  498. package/dist/plugin-sdk/gateway-runtime.js +3 -3
  499. package/dist/plugin-sdk/inbound-reply-dispatch.js +1 -1
  500. package/dist/plugin-sdk/index.js +1 -1
  501. package/dist/plugin-sdk/infra-runtime.js +2 -2
  502. package/dist/plugin-sdk/irc.js +2 -2
  503. package/dist/plugin-sdk/matrix.js +1 -1
  504. package/dist/plugin-sdk/memory-core-host-runtime-cli.js +2 -2
  505. package/dist/plugin-sdk/memory-core.js +2 -2
  506. package/dist/plugin-sdk/msteams.js +2 -2
  507. package/dist/plugin-sdk/nextcloud-talk.js +2 -2
  508. package/dist/plugin-sdk/nostr.js +2 -2
  509. package/dist/plugin-sdk/qa-channel.js +3 -3
  510. package/dist/plugin-sdk/reply-dispatch-runtime.js +2 -2
  511. package/dist/plugin-sdk/reply-runtime.js +4 -4
  512. package/dist/plugin-sdk/runtime-secret-resolution.js +1 -1
  513. package/dist/plugin-sdk/runtime.js +2 -2
  514. package/dist/plugin-sdk/sandbox.js +2 -2
  515. package/dist/plugin-sdk/src/agents/tools/call-specialist-tool.d.ts +1 -1
  516. package/dist/plugin-sdk/testing.js +6 -6
  517. package/dist/plugin-sdk/tlon.js +1 -1
  518. package/dist/plugin-sdk/zalo.js +1 -1
  519. package/dist/plugin-sdk/zalouser.js +1 -1
  520. package/dist/plugin-service-I5xNfnqu.js +2479 -0
  521. package/dist/plugins/runtime/index.js +1 -1
  522. package/dist/policy-BcKwMOuf.js +296 -0
  523. package/dist/prepare-1JYgpHMp.js +1311 -0
  524. package/dist/preview-streaming-Dgo51jwq.js +156 -0
  525. package/dist/probe-BJkY768e.js +45 -0
  526. package/dist/probe-BO-QxpgT.js +54 -0
  527. package/dist/probe-CDUK6e0p.js +467 -0
  528. package/dist/probe-CGYSSS6w.js +2 -0
  529. package/dist/probe-C_HVcqqJ.js +1951 -0
  530. package/dist/probe-Dcxae8tq.js +42 -0
  531. package/dist/probe-KUxarUv8.js +2 -0
  532. package/dist/probe-auth-CIcA1us7.js +69 -0
  533. package/dist/probe-auth-DA5iwmzB.js +3 -0
  534. package/dist/probe-bLlnDSfP.js +473 -0
  535. package/dist/probe-d-N_Ew21.js +2 -0
  536. package/dist/probe-hzrJP3l0.js +178 -0
  537. package/dist/probe.runtime-Ba11Eg_b.js +3 -0
  538. package/dist/profile-update-PKvx6HDA.js +67 -0
  539. package/dist/program-B2XUGWf0.js +112 -0
  540. package/dist/prompt-select-styled-BiuIxyVy.js +5126 -0
  541. package/dist/provider-BwOrYaSK.js +6962 -0
  542. package/dist/provider-C7ICmZkE.js +3454 -0
  543. package/dist/provider-dispatcher-DPiA3qdi.js +22 -0
  544. package/dist/provider-session.runtime-PrTPFKkk.js +9 -0
  545. package/dist/provider-session.runtime.js +1 -1
  546. package/dist/provider.runtime-DHJ3gJ4H.js +2 -0
  547. package/dist/provider.runtime.js +1 -1
  548. package/dist/pw-ai-DbNjlJd_.js +2103 -0
  549. package/dist/qa-channel-DPwx33i_.js +2 -0
  550. package/dist/qa-cli-BPK0pssJ.js +8 -0
  551. package/dist/qr-cli-BQZT1W61.js +2 -0
  552. package/dist/qr-cli-zZCvfEGI.js +358 -0
  553. package/dist/reaction-level-BKvUgCPf.js +18 -0
  554. package/dist/reaction-runtime-api-FFve0ASq.js +117 -0
  555. package/dist/reactions-CP7nQ59C.js +1037 -0
  556. package/dist/register.agent-B1iIgZcF.js +240 -0
  557. package/dist/register.configure-CU848AKJ.js +15 -0
  558. package/dist/register.maintenance-0ixk7nTW.js +437 -0
  559. package/dist/register.message-DTWlTzQc.js +646 -0
  560. package/dist/register.onboard-XoYrJne_.js +79 -0
  561. package/dist/register.runtime-C23P0yPV.js +4738 -0
  562. package/dist/register.runtime-Dvg8kppp.js +80 -0
  563. package/dist/register.setup-B0qqtOdc.js +103 -0
  564. package/dist/register.status-health-sessions-DQg4wT9r.js +1209 -0
  565. package/dist/register.subclis-C_eAf5_9.js +232 -0
  566. package/dist/register.subclis-DIE44wj9.js +3 -0
  567. package/dist/register.sync.runtime-CEwGao3L.js +30 -0
  568. package/dist/register.sync.runtime-EcmEVX3D.js +111 -0
  569. package/dist/register.sync.runtime.js +1 -1
  570. package/dist/replies-Bu1-QtzN.js +120 -0
  571. package/dist/reply-CUrPTPsP.js +3408 -0
  572. package/dist/reply-dispatch-runtime-GsI0pwoH.js +3 -0
  573. package/dist/reply-resolver.runtime-Bqa-hTWi.js +3 -0
  574. package/dist/reply-resolver.runtime.js +1 -1
  575. package/dist/reply-runtime-BIkS_Pjw.js +63 -0
  576. package/dist/reply.runtime-C_R0Cuqw.js +2 -0
  577. package/dist/reply.runtime.js +1 -1
  578. package/dist/resolve-channels-BLJSQFnE.js +80 -0
  579. package/dist/resolve-channels-DUug40p5.js +2 -0
  580. package/dist/resolve-targets-CnEbbF0_.js +280 -0
  581. package/dist/resolve-users-CdLN23M6.js +112 -0
  582. package/dist/resolve-users-CqmyP2em.js +2 -0
  583. package/dist/restart-health-BZLsoj5O.js +2 -0
  584. package/dist/restart-health-CyklphHq.js +202 -0
  585. package/dist/route-resolution-D2WXBq57.js +519 -0
  586. package/dist/rpc-_BscaFSu.js +61 -0
  587. package/dist/rpc.runtime-Bx-cycaL.js +21 -0
  588. package/dist/rpc.runtime.js +1 -1
  589. package/dist/run-main-C5SoyJvl.js +452 -0
  590. package/dist/run-wait-BS5Cx7Uv.js +118 -0
  591. package/dist/runtime-B34RI1S7.js +969 -0
  592. package/dist/runtime-BvSPxHWR.js +1030 -0
  593. package/dist/runtime-DWeb-vX-.js +9 -0
  594. package/dist/runtime-api-9QAFrMbQ.js +3 -0
  595. package/dist/runtime-api-BLCDEML4.js +2 -0
  596. package/dist/runtime-api-BLwLTGfK.js +21 -0
  597. package/dist/runtime-api-BR1M4pnK.js +2 -0
  598. package/dist/runtime-api-BUroT61_.js +45 -0
  599. package/dist/runtime-api-CNUiDwYz.js +3 -0
  600. package/dist/runtime-api-CVt6wzTc.js +6 -0
  601. package/dist/runtime-api-C_SJ7wfw.js +10 -0
  602. package/dist/runtime-api-DQzjRmqt.js +12 -0
  603. package/dist/runtime-api-DqR_YumR.js +17 -0
  604. package/dist/runtime-api-ZGDNVbl2.js +6 -0
  605. package/dist/runtime-api-zz8pnymC.js +26 -0
  606. package/dist/runtime-embedded-pi.runtime-TFyAgOC8.js +2 -0
  607. package/dist/runtime-embedded-pi.runtime.js +1 -1
  608. package/dist/runtime-heavy-api-Ba7JNDB8.js +565 -0
  609. package/dist/runtime-internal-DHjVpw4B.js +2 -0
  610. package/dist/runtime-plugins-Ry7x-Mvk.js +69 -0
  611. package/dist/sandbox-BNFwXFuy.js +2587 -0
  612. package/dist/sandbox-Cpt-E1ww.js +4 -0
  613. package/dist/sandbox-cli-Dmg_0MaO.js +445 -0
  614. package/dist/sdk-13NUewAy.js +1124 -0
  615. package/dist/secrets-cli-DQ7xca44.js +2098 -0
  616. package/dist/security-audit-Bn7XX3Su.js +51 -0
  617. package/dist/security-audit-C9BfFv2C.js +108 -0
  618. package/dist/security-audit-CSzyrJSa.js +120 -0
  619. package/dist/security-audit.runtime-PgDhyLjV.js +2 -0
  620. package/dist/security-audit.runtime.js +1 -1
  621. package/dist/security-cli-CP-6Fnhs.js +485 -0
  622. package/dist/send-BXh-TZ84.js +2 -0
  623. package/dist/send-BvPjvO2s.js +1262 -0
  624. package/dist/send-C9vW8YXC.js +2 -0
  625. package/dist/send-CEQIm1mt.js +102 -0
  626. package/dist/send-CpSbfcsb.js +332 -0
  627. package/dist/send-D1Q3UX5Y.js +981 -0
  628. package/dist/send-DDGOGQol.js +389 -0
  629. package/dist/send-Die5cv7L.js +3043 -0
  630. package/dist/send-DnM5edIc.js +3 -0
  631. package/dist/send-F1JhwouX.js +416 -0
  632. package/dist/send.components-DkCGcwf8.js +303 -0
  633. package/dist/send.runtime-B1QyPCQz.js +2 -0
  634. package/dist/send.runtime-ChCiy_ft.js +3 -0
  635. package/dist/send.runtime-Dzgewg8A.js +2 -0
  636. package/dist/send.runtime.js +1 -1
  637. package/dist/send.shared-BH6_OGkl.js +1101 -0
  638. package/dist/sent-thread-cache-CYKgiC-N.js +23 -0
  639. package/dist/server-BE1J4IRF.js +13 -0
  640. package/dist/server-DYEi-Vdc.js +68 -0
  641. package/dist/server-middleware-TYuXgmVe.js +110 -0
  642. package/dist/server-node-events-DefHBCpw.js +449 -0
  643. package/dist/server.impl-Dgq1DI9c.js +30112 -0
  644. package/dist/session-reset-service-DXN9ywpB.js +450 -0
  645. package/dist/session-route-Crn_ogyn.js +156 -0
  646. package/dist/session-store-metadata-BQw3zv_y.js +288 -0
  647. package/dist/session-subagent-reactivation.runtime-DrHo4F4Q.js +2 -0
  648. package/dist/session-subagent-reactivation.runtime.js +1 -1
  649. package/dist/session-tab-registry-B3lsDHHR.js +212 -0
  650. package/dist/sessions.runtime-B0gndd8L.js +2 -0
  651. package/dist/sessions.runtime.js +1 -1
  652. package/dist/setup-api-D2RTa9D-.js +30 -0
  653. package/dist/setup-bootstrap-B4QCZnKl.js +55 -0
  654. package/dist/setup-contract-B3vGY4y-.js +126 -0
  655. package/dist/setup-core-BsBfG93o.js +108 -0
  656. package/dist/setup-core-d8vbI_XJ.js +233 -0
  657. package/dist/setup-f5XZWfKL.js +434 -0
  658. package/dist/setup-surface-BNTSscOJ.js +279 -0
  659. package/dist/setup-surface-BVkx2UYk.js +723 -0
  660. package/dist/setup-surface-Baom1I4y.js +8861 -0
  661. package/dist/setup-surface-CSjeONXo.js +286 -0
  662. package/dist/setup-surface-vf0_-Tdf.js +643 -0
  663. package/dist/setup.finalize-Ye6qhiW9.js +445 -0
  664. package/dist/setup.gateway-config-C7d6a9WA.js +246 -0
  665. package/dist/shared-BKrh9WKJ.js +2 -0
  666. package/dist/shared-Bj8gSTB2.js +180 -0
  667. package/dist/shared-CRwVn0c-.js +252 -0
  668. package/dist/shared-CmQjyXal.js +224 -0
  669. package/dist/shared-DNiJ0u0-.js +766 -0
  670. package/dist/slash-commands.runtime-CqKhtjeF.js +20 -0
  671. package/dist/slash-commands.runtime.js +1 -1
  672. package/dist/slash-dispatch.runtime-DF3wRtha.js +38 -0
  673. package/dist/slash-dispatch.runtime.js +1 -1
  674. package/dist/slash-skill-commands.runtime-C4OqPfgl.js +8 -0
  675. package/dist/slash-skill-commands.runtime.js +1 -1
  676. package/dist/squidclaw-tools.runtime-BqDAGn7F.js +2 -0
  677. package/dist/squidclaw-tools.runtime.js +1 -1
  678. package/dist/src-02qjl7sX.js +2841 -0
  679. package/dist/stage-sandbox-media.runtime-CfMI-qzp.js +231 -0
  680. package/dist/stage-sandbox-media.runtime.js +1 -1
  681. package/dist/startup-verification-DzypxaGj.js +132 -0
  682. package/dist/status-B1QTfIMN.js +607 -0
  683. package/dist/status-B2P6AJxa.js +391 -0
  684. package/dist/status-BramWBLG.js +3 -0
  685. package/dist/status-DhbYtDYM.js +478 -0
  686. package/dist/status-DlBtVbSH.js +2 -0
  687. package/dist/status-all-cwFWvn6A.js +484 -0
  688. package/dist/status-json-CWhbU4Da.js +14 -0
  689. package/dist/status-json-command-CnFFQEwq.js +84 -0
  690. package/dist/status-runtime-shared-D7doYBdy.js +254 -0
  691. package/dist/status.command.text-runtime-CPoFJehc.js +15 -0
  692. package/dist/status.gateway-connection.runtime-GvW1CWN9.js +2 -0
  693. package/dist/status.gateway-connection.runtime.js +1 -1
  694. package/dist/status.gateway-probe-CJiq01Bs.js +16 -0
  695. package/dist/status.scan-1B-9cN63.js +62 -0
  696. package/dist/status.scan-overview-CSJqbcYh.js +395 -0
  697. package/dist/status.scan.fast-json-Bmzyemxt.js +128 -0
  698. package/dist/status.scan.fast-json-D5F9b4ah.js +2 -0
  699. package/dist/status.summary-BYy9qTUS.js +2 -0
  700. package/dist/status.summary-CkEEti0D.js +209 -0
  701. package/dist/sticker-cache-D5r87ZZa.js +184 -0
  702. package/dist/sticker-vision.runtime-DyLJForL.js +16 -0
  703. package/dist/sticker-vision.runtime.js +1 -1
  704. package/dist/storage-CkTymBr-.js +281 -0
  705. package/dist/subagent-announce.registry.runtime-CcnTQckj.js +3 -0
  706. package/dist/subagent-announce.registry.runtime.js +1 -1
  707. package/dist/subagent-followup.runtime-CYde8MYt.js +68 -0
  708. package/dist/subagent-followup.runtime.js +1 -1
  709. package/dist/subagent-hooks-BvK9Cxa6.js +101 -0
  710. package/dist/subagent-list-CpIcW76w.js +167 -0
  711. package/dist/subagent-orphan-recovery-Ct3UM-Bu.js +213 -0
  712. package/dist/subagent-registry-runtime-BoYdq2qL.js +2 -0
  713. package/dist/subagent-registry.runtime-BsPu6xbI.js +3 -0
  714. package/dist/subagent-registry.runtime.js +1 -1
  715. package/dist/subagents-format-BCzskH-u.js +715 -0
  716. package/dist/suite-BmAd-9R0.js +3665 -0
  717. package/dist/suite-DTBteqgI.js +2 -0
  718. package/dist/suite-launch.runtime-D7xJStpn.js +7 -0
  719. package/dist/suite-launch.runtime.js +1 -1
  720. package/dist/system-cli-BcZJNwur.js +59 -0
  721. package/dist/targets-1f9UDi71.js +594 -0
  722. package/dist/targets-BnXEPthE.js +2 -0
  723. package/dist/task-executor-BCxe9JMQ.js +350 -0
  724. package/dist/task-owner-access-BPEsf8od.js +48 -0
  725. package/dist/task-registry-B7FuDS8O.js +2343 -0
  726. package/dist/task-registry-control.runtime-DWqkdq8U.js +3 -0
  727. package/dist/task-registry-control.runtime.js +1 -1
  728. package/dist/task-registry-delivery-runtime-BR8dIB3B.js +3 -0
  729. package/dist/task-registry-delivery-runtime-Bupw3MKP.js +2 -0
  730. package/dist/task-registry.audit-DJg4rOz-.js +420 -0
  731. package/dist/task-registry.maintenance-BroUbQMq.js +2 -0
  732. package/dist/telegram/token.js +1 -1
  733. package/dist/testing-C5-NbjQn.js +637 -0
  734. package/dist/text-report-DwVqspbf.js +587 -0
  735. package/dist/thread-bindings-BVpVTovQ.js +231 -0
  736. package/dist/thread-bindings-CIE_SmMk.js +541 -0
  737. package/dist/thread-bindings-CvgiP7Qb.js +350 -0
  738. package/dist/thread-bindings-Dbs1VNcN.js +223 -0
  739. package/dist/thread-bindings.discord-api-Bnm8k-CQ.js +167 -0
  740. package/dist/thread-bindings.manager-BYftBIxl.js +516 -0
  741. package/dist/thread-bindings.manager-DFHmeFVn.js +2 -0
  742. package/dist/token-B3Uvlep3.js +82 -0
  743. package/dist/tool-actions.runtime-3E6YoP_B.js +534 -0
  744. package/dist/tool-actions.runtime.js +1 -1
  745. package/dist/tools-effective-inventory-DvzzKkKx.js +151 -0
  746. package/dist/tui-cli-CljnRWf3.js +31 -0
  747. package/dist/tui-vfBwCsDi.js +3941 -0
  748. package/dist/ui-5bl9Zasq.js +266 -0
  749. package/dist/update-cli-D0rCj2kZ.js +1484 -0
  750. package/dist/verification-2ekYWAlm.js +2 -0
  751. package/dist/verification-CC00TdzU.js +133 -0
  752. package/dist/webhook-shared-BPFuLVWz.js +49 -0
  753. package/package.json +1 -1
  754. package/dist/abort-B3i9M6G2.js +0 -201
  755. package/dist/abort.runtime-D54SXGb5.js +0 -2
  756. package/dist/access-control--iowLlYm.js +0 -146
  757. package/dist/accounts-B5bzTBVz.js +0 -107
  758. package/dist/accounts-ByeS_9aO.js +0 -104
  759. package/dist/accounts-D6vf619D.js +0 -133
  760. package/dist/accounts-Dk1FIo4_.js +0 -2
  761. package/dist/acp-binding-runtime-ocpCU2-v.js +0 -2
  762. package/dist/acp-cli-CNDP895U.js +0 -2194
  763. package/dist/acp-runtime-nbTE1Phc.js +0 -68
  764. package/dist/acp-stateful-target-driver-ChyAnNgf.js +0 -87
  765. package/dist/action-agents-Ch0mefPf.js +0 -67
  766. package/dist/action-focus-D-nzXF6o.js +0 -123
  767. package/dist/action-help-NAv-aU0d.js +0 -7
  768. package/dist/action-info-DcMI2-ZK.js +0 -58
  769. package/dist/action-kill-CXqD-B-0.js +0 -33
  770. package/dist/action-list-8jjdDY7d.js +0 -21
  771. package/dist/action-log-6odO06BB.js +0 -30
  772. package/dist/action-runtime-CVPm9XLV.js +0 -419
  773. package/dist/action-runtime-CxCmBEj5.js +0 -323
  774. package/dist/action-runtime-DekcFW0U.js +0 -72
  775. package/dist/action-runtime-api-cNh_VnnH.js +0 -2
  776. package/dist/action-runtime.runtime-BbRzrDjs.js +0 -2
  777. package/dist/action-send-DPyRTIFq.js +0 -39
  778. package/dist/action-spawn-DpvYcWJG.js +0 -46
  779. package/dist/action-unfocus-8FI6_QIi.js +0 -28
  780. package/dist/actions-OPb_3bRj.js +0 -539
  781. package/dist/actions.runtime-B3rsBUOP.js +0 -5
  782. package/dist/actions.runtime-CqRkzF2D.js +0 -2
  783. package/dist/actions.runtime-Ty9XPJXe.js +0 -18
  784. package/dist/agent-CiRrkRMO.js +0 -2
  785. package/dist/agent-command-B0QbYo8l.js +0 -1453
  786. package/dist/agent-components.runtime-BX1TJP_W.js +0 -10
  787. package/dist/agent-runner.runtime-Bwgzwf26.js +0 -2712
  788. package/dist/agent-runtime-CfjWN412.js +0 -17
  789. package/dist/agents-CXAAVAaD.js +0 -887
  790. package/dist/agents-SPpD0hO8.js +0 -5
  791. package/dist/api-6NCDe82B.js +0 -5
  792. package/dist/api-BFXKRqtv.js +0 -2
  793. package/dist/api-BPRu6VRr.js +0 -19032
  794. package/dist/api-BkY4N1oM.js +0 -2
  795. package/dist/api-Cq8p6nS6.js +0 -5
  796. package/dist/api-D929nvtw.js +0 -2
  797. package/dist/api-DUI7UM1U.js +0 -7
  798. package/dist/api-DXIejtfT.js +0 -1085
  799. package/dist/api-Mz7fQ97u.js +0 -7524
  800. package/dist/api-pamd3sK4.js +0 -3
  801. package/dist/approval-gateway-resolver-C0T-euYc.js +0 -58
  802. package/dist/approval-gateway-runtime-Dr8hhHsY.js +0 -2
  803. package/dist/approval-handler-runtime-C1vIqhJB.js +0 -3
  804. package/dist/approval-handler-runtime-CQ1rmZw4.js +0 -439
  805. package/dist/approval-handler.runtime-BPTqowDG.js +0 -389
  806. package/dist/approval-handler.runtime-CJIOu270.js +0 -130
  807. package/dist/approval-handler.runtime-Ch4_Sc9Y.js +0 -245
  808. package/dist/approval-handler.runtime-DnXfPApY.js +0 -285
  809. package/dist/approval-handler.runtime-Dy7znaXN.js +0 -2
  810. package/dist/approval-native-D2UI8gkx.js +0 -130
  811. package/dist/approval-native-DXmloUbF.js +0 -156
  812. package/dist/approval-native-runtime-CqdGNulh.js +0 -709
  813. package/dist/approval-runtime-Dk2t8Zy3.js +0 -9
  814. package/dist/attachment-normalize-B2YxnMGv.js +0 -1013
  815. package/dist/audit-BERwKM6w.js +0 -885
  816. package/dist/audit-BFF7MsuO.js +0 -99
  817. package/dist/audit-frAokQ0A.js +0 -2
  818. package/dist/audit.runtime-Bj5X419-.js +0 -7
  819. package/dist/auth-config-utils-BaAnjhyv.js +0 -96
  820. package/dist/binding-routing-BpsF-3xv.js +0 -50
  821. package/dist/binding-targets-Bmj3UJ5-.js +0 -99
  822. package/dist/bot-Cx-u_7Uj.js +0 -5426
  823. package/dist/bot-message-context.runtime-B4zpnEwn.js +0 -8
  824. package/dist/bot-message-context.session.runtime-B1gAkdOu.js +0 -12
  825. package/dist/bot-native-commands.delivery.runtime-C6xxBBDf.js +0 -3
  826. package/dist/bot-native-commands.runtime-Dbsr3sHh.js +0 -13
  827. package/dist/bridge-server-DSGO4m1H.js +0 -102
  828. package/dist/browser-cdp-BEAWexuM.js +0 -2
  829. package/dist/browser-cdp-DiIu37Gt.js +0 -2
  830. package/dist/browser-control-auth-DTOsrJDu.js +0 -2
  831. package/dist/browser-control-auth-DyC4zA7A.js +0 -2
  832. package/dist/browser-doctor-uvADu96v.js +0 -78
  833. package/dist/browser-maintenance-C2Dl-Ve7.js +0 -3
  834. package/dist/browser-node-runtime-DDBOJvNL.js +0 -490
  835. package/dist/browser-profiles-CoDIqHLH.js +0 -2
  836. package/dist/browser-profiles-D7aj7859.js +0 -2
  837. package/dist/browser-setup-tools-BkzM2E6C.js +0 -321
  838. package/dist/call-BmlVEj-k.js +0 -2
  839. package/dist/call-DimnmSfr.js +0 -527
  840. package/dist/call.runtime-oDicDLP9.js +0 -2
  841. package/dist/capability-cli-DJ2Awg2a.js +0 -1350
  842. package/dist/captured-registration-CRRuKs3Z.js +0 -1159
  843. package/dist/channel-B2trs5PT.js +0 -816
  844. package/dist/channel-BCn_Tbdt.js +0 -226
  845. package/dist/channel-BdkYjZav.js +0 -1109
  846. package/dist/channel-C4Uws9p9.js +0 -482
  847. package/dist/channel-C5ZzsbiQ.js +0 -1168
  848. package/dist/channel-CIYg-jK3.js +0 -864
  849. package/dist/channel-CXg-f8BW.js +0 -843
  850. package/dist/channel-Cbq6TTk_.js +0 -368
  851. package/dist/channel-DAhzdj9q.js +0 -532
  852. package/dist/channel-DXBsiIY7.js +0 -1146
  853. package/dist/channel-Dzxv0EXV.js +0 -991
  854. package/dist/channel-actions-ipmwXB0Y.js +0 -233
  855. package/dist/channel-actions.runtime-CDchfnd5.js +0 -2
  856. package/dist/channel-core-BVwVtumb.js +0 -2
  857. package/dist/channel-inbound-Bm88Z7_C.js +0 -31
  858. package/dist/channel-plugin-runtime-BVG5lRuf.js +0 -784
  859. package/dist/channel-react-action-BObDobMB.js +0 -39
  860. package/dist/channel-runtime-CTRgWvAH.js +0 -427
  861. package/dist/channel.runtime-B7v5wHk8.js +0 -131
  862. package/dist/channel.runtime-BszJe_s4.js +0 -2169
  863. package/dist/channel.runtime-CX4_ZCmS.js +0 -429
  864. package/dist/channel.runtime-CdML78ul.js +0 -109
  865. package/dist/channel.runtime-CqwrGm86.js +0 -35114
  866. package/dist/channel.runtime-DP0cjvi3.js +0 -87
  867. package/dist/channel.runtime-DdnmmpEk.js +0 -4
  868. package/dist/channel.runtime-ci1kZJFE.js +0 -399
  869. package/dist/channel.runtime-l_tSS4gp.js +0 -789
  870. package/dist/channel.runtime-mzNwkaVb.js +0 -348
  871. package/dist/channel.setup-B9xAr9fC.js +0 -17
  872. package/dist/channel.setup-BBet-KMT.js +0 -8
  873. package/dist/channel.setup-BZ1mLMx2.js +0 -274
  874. package/dist/channel2.runtime-BsiqUwwM.js +0 -2067
  875. package/dist/channels-DfPjiGw0.js +0 -1145
  876. package/dist/channels-cli-Dv-7LMMV.js +0 -246
  877. package/dist/clawbot-cli-nasr9K6D.js +0 -9
  878. package/dist/cli-BRM7KkAR.js +0 -64
  879. package/dist/cli-CCR3hjJo.js +0 -2
  880. package/dist/cli-DU1kVljA.js +0 -79
  881. package/dist/cli-HYScxqD1.js +0 -696
  882. package/dist/cli-metadata-Lj0vONDU.js +0 -22
  883. package/dist/cli.runtime-1fLltFdi.js +0 -913
  884. package/dist/cli.runtime-CZUqiD5g.js +0 -435
  885. package/dist/client-BUVaKIpJ.js +0 -5
  886. package/dist/client-BVTwwUML.js +0 -19
  887. package/dist/client-BjWLc7Y-.js +0 -76
  888. package/dist/client-_QKDAQDu.js +0 -138
  889. package/dist/client-bootstrap-BFbLRz2C.js +0 -103
  890. package/dist/client-bootstrap-D437UPzx.js +0 -2
  891. package/dist/client-bootstrap-I7-3XCga.js +0 -28
  892. package/dist/client-fetch-AnHvj_3J.js +0 -6329
  893. package/dist/client-hExsWH6o.js +0 -7
  894. package/dist/command-auth-CRa_J5f9.js +0 -82
  895. package/dist/command-config-resolution-DJn8yRN0.js +0 -2
  896. package/dist/command-config-resolution-DfaG_QsG.js +0 -23
  897. package/dist/command-registry-CR66SMrK.js +0 -3
  898. package/dist/command-registry-DPmit1JT.js +0 -103
  899. package/dist/command-secret-gateway-C5wNGlyh.js +0 -528
  900. package/dist/commands-acp-DSkoKaBx.js +0 -1016
  901. package/dist/commands-compact.runtime-Cxk_Bim2.js +0 -9
  902. package/dist/commands-handlers.runtime-7ITzu_F9.js +0 -3752
  903. package/dist/commands-status-YVlf51av.js +0 -220
  904. package/dist/commands-status.runtime-yX733sxU.js +0 -2
  905. package/dist/commands-subagents-control.runtime-CmBQffpY.js +0 -3
  906. package/dist/commands-subagents-control.runtime-DyfC94wk.js +0 -2
  907. package/dist/commands.runtime-CF2CvRdC.js +0 -103
  908. package/dist/compact.runtime-SSFfG-Zn.js +0 -7
  909. package/dist/completion-cli-DacK0s2a.js +0 -2
  910. package/dist/completion-cli-e73PL7WW.js +0 -464
  911. package/dist/config-CNjow647.js +0 -555
  912. package/dist/config-cli-DHrsraFp.js +0 -946
  913. package/dist/configure-BAu4acPI.js +0 -1157
  914. package/dist/configure-CL23G2hb.js +0 -2
  915. package/dist/connect-options-DWuMnfu8.js +0 -702
  916. package/dist/connection-auth-C2SmiqJl.js +0 -30
  917. package/dist/control-auth-CaO1Oeoy.js +0 -55
  918. package/dist/conversation-binding-runtime-Doi63Jbg.js +0 -4
  919. package/dist/conversation-runtime-GGcURk7j.js +0 -31
  920. package/dist/core-CClA2USK.js +0 -210
  921. package/dist/core-api-C_AvPzRu.js +0 -372
  922. package/dist/create-client-BhqAwNbb.js +0 -61
  923. package/dist/create-client-BwsD8tI6.js +0 -2
  924. package/dist/credentials-DJFu83G8.js +0 -57
  925. package/dist/credentials-write.runtime-CR5dnqyZ.js +0 -12
  926. package/dist/cron-cli-Deh3Yeyp.js +0 -637
  927. package/dist/crypto-runtime-VJhxsLhu.js +0 -3510
  928. package/dist/daemon-cli-4bc2x0Xy.js +0 -408
  929. package/dist/daemon-install-1dtUi-ok.js +0 -63
  930. package/dist/delegate-DxwnpjNF.js +0 -59
  931. package/dist/delivery-D5D8dXrE.js +0 -858
  932. package/dist/devices-cli-CCUKlTgc.js +0 -329
  933. package/dist/direct-dm-CM-FJS3G.js +0 -139
  934. package/dist/directive-handling.fast-lane-Bj-ZgNCt.js +0 -64
  935. package/dist/directive-handling.fast-lane-cVtu_YSG.js +0 -2
  936. package/dist/directive-handling.impl-DXYPXQHD.js +0 -659
  937. package/dist/directive-handling.impl-Dbjtj5tk.js +0 -2
  938. package/dist/directory-live-Cl_E8Y0F.js +0 -105
  939. package/dist/directory-live-eYanrAKt.js +0 -2
  940. package/dist/discovery-CDcwVlb2.js +0 -201
  941. package/dist/discovery-toIPU7JM.js +0 -280
  942. package/dist/dispatch-DQdww2GS.js +0 -970
  943. package/dist/dispatch-acp-gH6MGir3.js +0 -969
  944. package/dist/dispatch-acp-manager.runtime-B3868p2b.js +0 -3
  945. package/dist/dispatch-acp.runtime-GxCOV-g5.js +0 -19
  946. package/dist/docker-harness-DuqgDAuF.js +0 -277
  947. package/dist/doctor-completion-CqPBIveI.js +0 -90
  948. package/dist/env-auth-kvshWd0K.js +0 -2
  949. package/dist/exec-approvals-3lAYs6Hb.js +0 -272
  950. package/dist/exec-approvals-DEXYo-hs.js +0 -129
  951. package/dist/exec-approvals-cli-qJuhPDN7.js +0 -483
  952. package/dist/format-Bfm1Y34p.js +0 -941
  953. package/dist/gateway-Coz4zJqF.js +0 -2652
  954. package/dist/gateway-cli-Tr88ODEI.js +0 -1510
  955. package/dist/gateway-install-token-DfFqyLMo.js +0 -213
  956. package/dist/gateway-rpc-BemgYdMc.js +0 -14
  957. package/dist/gateway-rpc.runtime-qMKQlN4e.js +0 -23
  958. package/dist/gateway-runtime-BKHVCtA8.js +0 -12
  959. package/dist/get-reply-from-config.runtime-DvG3QBgw.js +0 -2
  960. package/dist/graph-users-Dl1OMi8u.js +0 -926
  961. package/dist/group-access-C4vUaXrm.js +0 -119
  962. package/dist/handle-action-BZiiHnQe.js +0 -505
  963. package/dist/health-CS7VN2jf.js +0 -2
  964. package/dist/health-DZIRhXhz.js +0 -578
  965. package/dist/heartbeat-runner-BzXA9IWw.js +0 -4
  966. package/dist/heartbeat-runner-D0A8YGZO.js +0 -1060
  967. package/dist/heartbeat-runner.runtime-TppNw-oM.js +0 -2
  968. package/dist/http-client-DkuiEf7A.js +0 -322
  969. package/dist/inbound-reply-dispatch-DpYv3d5p.js +0 -73
  970. package/dist/infra-runtime-tt1_oCoq.js +0 -23
  971. package/dist/inline-buttons-DEuFw3WQ.js +0 -40
  972. package/dist/known-users-CWwrsFGU.js +0 -1180
  973. package/dist/legacy-crypto-restore-BOa2DvvY.js +0 -85
  974. package/dist/library-7cnVS_xi.js +0 -44
  975. package/dist/llm-slug-generator-323FKQOP.js +0 -69
  976. package/dist/login-CiHsm606.js +0 -2574
  977. package/dist/logs-cli-B2cmXZem.js +0 -264
  978. package/dist/logs-cli.runtime-C-Mcv4Zk.js +0 -2
  979. package/dist/manager-CwWzbl_D.js +0 -2048
  980. package/dist/manager.runtime-CqOrg4Qr.js +0 -900
  981. package/dist/markdown-to-line-CbaWO2jk.js +0 -781
  982. package/dist/matrix-migration.runtime-GV26JQ2_.js +0 -2
  983. package/dist/mcp-cli-DGbCa-Cd.js +0 -747
  984. package/dist/media-text-ZfT38pVI.js +0 -146
  985. package/dist/memory-core-CBOoleHk.js +0 -7
  986. package/dist/memory-core-host-runtime-cli-Be-Y3RcN.js +0 -9
  987. package/dist/message-DM01eAnX.js +0 -223
  988. package/dist/message-action-runner-BdICMfSy.js +0 -2
  989. package/dist/message-action-runner-Cb2h2Ijf.js +0 -1628
  990. package/dist/message-actions-DS7xc40R.js +0 -143
  991. package/dist/message-handler-D--3XcDZ.js +0 -1925
  992. package/dist/message.gateway.runtime-IqVan5Ku.js +0 -2
  993. package/dist/messages-CjRvwckc.js +0 -139
  994. package/dist/method-scopes-D4g3NSY1.js +0 -2803
  995. package/dist/migration-snapshot.runtime-BcKQLnnt.js +0 -3
  996. package/dist/models-DovOrFsL.js +0 -2565
  997. package/dist/models-cli-BY-ZivSs.js +0 -197
  998. package/dist/models-ym2zxpHK.js +0 -3
  999. package/dist/monitor-BRJa82Ur.js +0 -2
  1000. package/dist/monitor-BncOnBd9.js +0 -673
  1001. package/dist/monitor-C1p3x-pX.js +0 -1221
  1002. package/dist/monitor-CIPE_311.js +0 -4027
  1003. package/dist/monitor-CNRewRrD.js +0 -288
  1004. package/dist/monitor-Cj_IFxZv.js +0 -1344
  1005. package/dist/monitor-DVLc8Re0.js +0 -4
  1006. package/dist/monitor-J_BnmDo2.js +0 -5
  1007. package/dist/monitor-Qmqec_Yh.js +0 -3653
  1008. package/dist/monitor-_au10paS.js +0 -1533
  1009. package/dist/monitor-auth-Bscspafh.js +0 -2470
  1010. package/dist/monitor-normalize-DoTVhTYT.js +0 -1018
  1011. package/dist/monitor-polling.runtime-DpDlmIwy.js +0 -309
  1012. package/dist/monitor-webhook.runtime-TlmgbOCr.js +0 -298
  1013. package/dist/monitor-xEYRMU-f.js +0 -524
  1014. package/dist/monitor.runtime-CnJJRTbE.js +0 -2
  1015. package/dist/monitor.webhook-BgwkWhHl.js +0 -152
  1016. package/dist/msteams-BUb-S_EX.js +0 -35
  1017. package/dist/music-generation-provider-D1i_RdU5.js +0 -141
  1018. package/dist/music-generation-provider-kW5YoroF.js +0 -169
  1019. package/dist/nextcloud-talk-w5jy_uDk.js +0 -17
  1020. package/dist/node-cli-0I8EBDmz.js +0 -2361
  1021. package/dist/nodes-cli-DDPXput-.js +0 -1046
  1022. package/dist/nostr-CMmrLIba.js +0 -20
  1023. package/dist/notify-53158hb_.js +0 -301
  1024. package/dist/onboard-gasumsAo.js +0 -620
  1025. package/dist/onboard-helpers-BKqqS4fH.js +0 -5
  1026. package/dist/onboard-helpers-ClO1CzUs.js +0 -210
  1027. package/dist/onboard-remote-C_OS9uG-.js +0 -2
  1028. package/dist/onboard-remote-DZwvXndP.js +0 -193
  1029. package/dist/onboard-skills-C2b6Am6N.js +0 -134
  1030. package/dist/onboard-skills-DoUaMa7Q.js +0 -2
  1031. package/dist/operator-approvals-client-Ba5yI2jW.js +0 -68
  1032. package/dist/outbound-adapter-CHAeBJnA.js +0 -186
  1033. package/dist/outbound-adapter-ckaI045x.js +0 -195
  1034. package/dist/outbound-send-deps-CeS2ISdG.js +0 -179
  1035. package/dist/outbound.runtime-DmENyZWi.js +0 -2
  1036. package/dist/pair-command-approve-Dtj5RT3m.js +0 -34
  1037. package/dist/persistent-bindings.lifecycle-DlRf6UNu.js +0 -94
  1038. package/dist/pi-embedded-BCiN8PJJ.js +0 -4
  1039. package/dist/pi-embedded-D6ymZc3i.js +0 -34664
  1040. package/dist/pi-embedded.runtime-BvHY2Qn8.js +0 -4
  1041. package/dist/plugin-registration-pEUuuPNE.js +0 -23
  1042. package/dist/plugin-service-C727jUS8.js +0 -2479
  1043. package/dist/policy-Cx0vwWl-.js +0 -296
  1044. package/dist/prepare-Cvvm6kSX.js +0 -1311
  1045. package/dist/preview-streaming-VPGtgbrj.js +0 -156
  1046. package/dist/probe-BWxk_D41.js +0 -1951
  1047. package/dist/probe-BZ2k40na.js +0 -467
  1048. package/dist/probe-BdrYBtBm.js +0 -42
  1049. package/dist/probe-Bi1t0jFB.js +0 -473
  1050. package/dist/probe-Bm-LFpXO.js +0 -54
  1051. package/dist/probe-BzM7PkDR.js +0 -178
  1052. package/dist/probe-D3nv35y0.js +0 -45
  1053. package/dist/probe-D44CTR-n.js +0 -2
  1054. package/dist/probe-D9_c8Tac.js +0 -2
  1055. package/dist/probe-auth-CvZT2Jdj.js +0 -69
  1056. package/dist/probe-auth-CvvZaT1c.js +0 -3
  1057. package/dist/probe-wE6FkkZ_.js +0 -2
  1058. package/dist/probe.runtime-DGQmUPe5.js +0 -3
  1059. package/dist/profile-update-DJMFQsky.js +0 -67
  1060. package/dist/program-D0cK7yGW.js +0 -112
  1061. package/dist/prompt-select-styled-DIWZZZG6.js +0 -5126
  1062. package/dist/provider-BKJ08C2Z.js +0 -3454
  1063. package/dist/provider-CPi36wyQ.js +0 -6962
  1064. package/dist/provider-dispatcher-CLwZUymC.js +0 -22
  1065. package/dist/provider-session.runtime-B3S_Yeb3.js +0 -9
  1066. package/dist/provider.runtime-DcEvmtmu.js +0 -2
  1067. package/dist/pw-ai-WAQfyGe_.js +0 -2103
  1068. package/dist/qa-channel-Dqe1KaSx.js +0 -2
  1069. package/dist/qa-cli-4xByjTp-.js +0 -8
  1070. package/dist/qr-cli-9amYg6ZB.js +0 -358
  1071. package/dist/qr-cli-Dvj1k6Ck.js +0 -2
  1072. package/dist/reaction-level-cvYUkHnc.js +0 -18
  1073. package/dist/reaction-runtime-api-C4C7zpkB.js +0 -117
  1074. package/dist/reactions--cuRrgXz.js +0 -1037
  1075. package/dist/register.agent-lPQYPQxl.js +0 -240
  1076. package/dist/register.configure-C1Pqkqku.js +0 -15
  1077. package/dist/register.maintenance-D7_7kFLK.js +0 -437
  1078. package/dist/register.message-DuQfx9tH.js +0 -646
  1079. package/dist/register.onboard-GvvDQg6U.js +0 -79
  1080. package/dist/register.runtime-B_q6h9Rj.js +0 -4738
  1081. package/dist/register.runtime-D1J8J3lS.js +0 -80
  1082. package/dist/register.setup-D4ohrJPJ.js +0 -103
  1083. package/dist/register.status-health-sessions-KTNGJBI0.js +0 -1209
  1084. package/dist/register.subclis-BBWrHZw5.js +0 -3
  1085. package/dist/register.subclis-JFPqv7V4.js +0 -232
  1086. package/dist/register.sync.runtime-CBqckwjj.js +0 -111
  1087. package/dist/register.sync.runtime-DLLDETam.js +0 -30
  1088. package/dist/replies-BJ7V-hO1.js +0 -120
  1089. package/dist/reply-Lp7d3a50.js +0 -3408
  1090. package/dist/reply-dispatch-runtime-Gcl_ugF7.js +0 -3
  1091. package/dist/reply-resolver.runtime-D6AfqIU4.js +0 -3
  1092. package/dist/reply-runtime-w3_WmlVR.js +0 -63
  1093. package/dist/reply.runtime-CEzDecR4.js +0 -2
  1094. package/dist/resolve-channels-BdkK4nw3.js +0 -80
  1095. package/dist/resolve-channels-C3XNE8mX.js +0 -2
  1096. package/dist/resolve-targets-CtIyzvLZ.js +0 -280
  1097. package/dist/resolve-users-BakC_OZx.js +0 -112
  1098. package/dist/resolve-users-Fn03Rhb2.js +0 -2
  1099. package/dist/restart-health-BttIk7CU.js +0 -202
  1100. package/dist/restart-health-CFQhuwOp.js +0 -2
  1101. package/dist/route-resolution-SDBGRkWf.js +0 -519
  1102. package/dist/rpc-C9V_pt31.js +0 -61
  1103. package/dist/rpc.runtime-B0h6ayTJ.js +0 -21
  1104. package/dist/run-main-5wQoA813.js +0 -452
  1105. package/dist/run-wait-B-6gAFUS.js +0 -118
  1106. package/dist/runtime-B09Y1cSR.js +0 -1030
  1107. package/dist/runtime-DYbf5mvD.js +0 -9
  1108. package/dist/runtime-ROpfHrig.js +0 -969
  1109. package/dist/runtime-api-B2LT1fsl.js +0 -21
  1110. package/dist/runtime-api-B2iJXOPK.js +0 -45
  1111. package/dist/runtime-api-BKyYF95h.js +0 -2
  1112. package/dist/runtime-api-BXoNiiea.js +0 -26
  1113. package/dist/runtime-api-BZakyLMI.js +0 -6
  1114. package/dist/runtime-api-BjtBN2Lw.js +0 -3
  1115. package/dist/runtime-api-C1cTYm9P.js +0 -2
  1116. package/dist/runtime-api-CSSJcNsF.js +0 -6
  1117. package/dist/runtime-api-CXnnN_KY.js +0 -17
  1118. package/dist/runtime-api-ChdP-48A.js +0 -3
  1119. package/dist/runtime-api-DlZVV51Z.js +0 -10
  1120. package/dist/runtime-api-VACD9DJo.js +0 -12
  1121. package/dist/runtime-embedded-pi.runtime-Eo0EmYFy.js +0 -2
  1122. package/dist/runtime-heavy-api-C4fiMQ21.js +0 -565
  1123. package/dist/runtime-internal-icjNm5UP.js +0 -2
  1124. package/dist/runtime-plugins-B6R10y_D.js +0 -69
  1125. package/dist/sandbox--rLy3kgS.js +0 -4
  1126. package/dist/sandbox-DuJ1KNDG.js +0 -2587
  1127. package/dist/sandbox-cli-4TTvCzDq.js +0 -445
  1128. package/dist/sdk-BYukfk1k.js +0 -1124
  1129. package/dist/secrets-cli-DEn7dm1N.js +0 -2098
  1130. package/dist/security-audit-Bsy0zSyj.js +0 -108
  1131. package/dist/security-audit-Duv6BTNX.js +0 -120
  1132. package/dist/security-audit-YfOVCyuf.js +0 -51
  1133. package/dist/security-audit.runtime-Cyi0ycOc.js +0 -2
  1134. package/dist/security-cli-BcHPRXOi.js +0 -485
  1135. package/dist/send-BIbyQk5P.js +0 -1262
  1136. package/dist/send-CKsL7RVh.js +0 -3
  1137. package/dist/send-CWQq_n5g.js +0 -389
  1138. package/dist/send-CfV7rSkm.js +0 -981
  1139. package/dist/send-CyQx0TY7.js +0 -2
  1140. package/dist/send-DHgcTLAL.js +0 -2
  1141. package/dist/send-DWOFYyaw.js +0 -102
  1142. package/dist/send-DeI_6pOG.js +0 -3043
  1143. package/dist/send-Z15Qe-G0.js +0 -332
  1144. package/dist/send-kKGGtn3Z.js +0 -416
  1145. package/dist/send.components-Bz73vYn8.js +0 -303
  1146. package/dist/send.runtime-BcZGpddi.js +0 -2
  1147. package/dist/send.runtime-BtXm9WEr.js +0 -3
  1148. package/dist/send.runtime-Cvg0x4v0.js +0 -2
  1149. package/dist/send.shared-DYohWc2i.js +0 -1101
  1150. package/dist/sent-thread-cache-CT2xxwbT.js +0 -23
  1151. package/dist/server-Cd7EHHuw.js +0 -68
  1152. package/dist/server-G26weaSi.js +0 -13
  1153. package/dist/server-middleware-CtTwf3pu.js +0 -110
  1154. package/dist/server-node-events-DKZ_nyrQ.js +0 -449
  1155. package/dist/server.impl-D63YZto5.js +0 -30112
  1156. package/dist/session-reset-service-D1M4pLBA.js +0 -450
  1157. package/dist/session-route-tUMBm5PT.js +0 -156
  1158. package/dist/session-store-metadata-DowmkwmG.js +0 -288
  1159. package/dist/session-subagent-reactivation.runtime-mKpYuC3k.js +0 -2
  1160. package/dist/session-tab-registry-DWFtutnL.js +0 -212
  1161. package/dist/sessions.runtime-Cf7RpCAJ.js +0 -2
  1162. package/dist/setup-BRmL5-Jo.js +0 -434
  1163. package/dist/setup-api-CrfiDHi-.js +0 -30
  1164. package/dist/setup-bootstrap-BJpUNvF_.js +0 -55
  1165. package/dist/setup-contract-D-zxoFOW.js +0 -126
  1166. package/dist/setup-core-CG-E-wxi.js +0 -108
  1167. package/dist/setup-core-rh5n0CBJ.js +0 -233
  1168. package/dist/setup-surface-BeAiBe4W.js +0 -279
  1169. package/dist/setup-surface-By9c_qzk.js +0 -8861
  1170. package/dist/setup-surface-D18aEQat.js +0 -723
  1171. package/dist/setup-surface-DAzhKU-9.js +0 -286
  1172. package/dist/setup-surface-DIawZD7y.js +0 -643
  1173. package/dist/setup.finalize-BMwCLPRK.js +0 -445
  1174. package/dist/setup.gateway-config-Ce9dKFXy.js +0 -246
  1175. package/dist/shared-2BPq74or.js +0 -252
  1176. package/dist/shared-BXTcQtcc.js +0 -180
  1177. package/dist/shared-BtxNEzEa.js +0 -224
  1178. package/dist/shared-DLUal8aD.js +0 -766
  1179. package/dist/shared-Dpt4e-O9.js +0 -2
  1180. package/dist/slash-commands.runtime-BtV5q0pv.js +0 -20
  1181. package/dist/slash-dispatch.runtime-BDhbVtP4.js +0 -38
  1182. package/dist/slash-skill-commands.runtime-C2MFQM29.js +0 -8
  1183. package/dist/squidclaw-tools.runtime-BXCvcJOL.js +0 -2
  1184. package/dist/src-UTq3Vwke.js +0 -2841
  1185. package/dist/stage-sandbox-media.runtime-CgbVMvTX.js +0 -231
  1186. package/dist/startup-verification-Bgxg51QM.js +0 -132
  1187. package/dist/status-C6ejKsXs.js +0 -3
  1188. package/dist/status-Co9vYLDq.js +0 -607
  1189. package/dist/status-Dabi0MUR.js +0 -2
  1190. package/dist/status-DkiiNsd1.js +0 -478
  1191. package/dist/status-E8JIm_wq.js +0 -391
  1192. package/dist/status-all-DqdzD3l2.js +0 -484
  1193. package/dist/status-json-DW4G1ifQ.js +0 -14
  1194. package/dist/status-json-command-C_y4Qnfw.js +0 -84
  1195. package/dist/status-runtime-shared-BjdaMBBy.js +0 -254
  1196. package/dist/status.command.text-runtime-Cezf3w14.js +0 -15
  1197. package/dist/status.gateway-connection.runtime-Fty09fSN.js +0 -2
  1198. package/dist/status.gateway-probe-CtyElUAZ.js +0 -16
  1199. package/dist/status.scan-e2ndyoox.js +0 -62
  1200. package/dist/status.scan-overview-Cfxp5RW1.js +0 -395
  1201. package/dist/status.scan.fast-json-BbmQZHtY.js +0 -2
  1202. package/dist/status.scan.fast-json-pFHFJao2.js +0 -128
  1203. package/dist/status.summary--QblCYpN.js +0 -2
  1204. package/dist/status.summary-rbSkau3S.js +0 -209
  1205. package/dist/sticker-cache-BVjpg6Jr.js +0 -184
  1206. package/dist/sticker-vision.runtime-Brteqqqk.js +0 -16
  1207. package/dist/storage-qK6jOD0a.js +0 -281
  1208. package/dist/subagent-announce.registry.runtime-DjrEtLXy.js +0 -3
  1209. package/dist/subagent-followup.runtime-AgUQMRnV.js +0 -68
  1210. package/dist/subagent-hooks-BIkcskal.js +0 -101
  1211. package/dist/subagent-list-Cjy5X9zr.js +0 -167
  1212. package/dist/subagent-orphan-recovery-DoHcGTmY.js +0 -213
  1213. package/dist/subagent-registry-runtime-BtxCxqDG.js +0 -2
  1214. package/dist/subagent-registry.runtime-Dy6yz9QP.js +0 -3
  1215. package/dist/subagents-format-DhZnQqvz.js +0 -715
  1216. package/dist/suite-Bm6-0z9W.js +0 -2
  1217. package/dist/suite-Dy4_-d5w.js +0 -3665
  1218. package/dist/suite-launch.runtime-CT6ZQXhY.js +0 -7
  1219. package/dist/system-cli-Blr_zAnY.js +0 -59
  1220. package/dist/targets-DSLnS3Ju.js +0 -594
  1221. package/dist/targets-zjDM8sUO.js +0 -2
  1222. package/dist/task-executor-C3f8iqwr.js +0 -350
  1223. package/dist/task-owner-access-B1ZJymnj.js +0 -48
  1224. package/dist/task-registry-DwSuIP5x.js +0 -2343
  1225. package/dist/task-registry-control.runtime-D0aPCpac.js +0 -3
  1226. package/dist/task-registry-delivery-runtime-DW5UnNOu.js +0 -3
  1227. package/dist/task-registry-delivery-runtime-OuMCxMMR.js +0 -2
  1228. package/dist/task-registry.audit-CCvavL7s.js +0 -420
  1229. package/dist/task-registry.maintenance-DuJaYBdY.js +0 -2
  1230. package/dist/testing-3s6ggYUi.js +0 -637
  1231. package/dist/text-report-BMFH2D2f.js +0 -587
  1232. package/dist/thread-bindings-BKPRlJ8r.js +0 -350
  1233. package/dist/thread-bindings-BQIzpYsw.js +0 -231
  1234. package/dist/thread-bindings-BqgRY931.js +0 -223
  1235. package/dist/thread-bindings-_V7u3OBb.js +0 -541
  1236. package/dist/thread-bindings.discord-api-D775Moto.js +0 -167
  1237. package/dist/thread-bindings.manager-Cj6MCnrB.js +0 -516
  1238. package/dist/thread-bindings.manager-NzDRPx4c.js +0 -2
  1239. package/dist/token-CXEUIR3T.js +0 -82
  1240. package/dist/tool-actions.runtime-DCp5s7hQ.js +0 -534
  1241. package/dist/tools-effective-inventory-e3f07-S5.js +0 -151
  1242. package/dist/tui-DiVWeFmm.js +0 -3941
  1243. package/dist/tui-cli-QhUFE67j.js +0 -31
  1244. package/dist/ui-DTD0F-R6.js +0 -266
  1245. package/dist/update-cli-CTz2V8Ez.js +0 -1484
  1246. package/dist/verification-1bD881sU.js +0 -133
  1247. package/dist/verification-CCqBFDKu.js +0 -2
  1248. package/dist/webhook-shared-DJeFHRS7.js +0 -49
@@ -0,0 +1,2194 @@
1
+ import { t as isMainModule } from "./is-main-EuRWM-HL.js";
2
+ import { d as readStringValue, i as normalizeLowercaseStringOrEmpty, o as normalizeOptionalLowercaseString, s as normalizeOptionalString, t as hasNonEmptyString } from "./string-coerce-CIT1-v_a.js";
3
+ import { n as defaultRuntime } from "./runtime-beXCX1Aa.js";
4
+ import { _ as shortenHomePath } from "./utils-u-79OBrY.js";
5
+ import { _ as GATEWAY_CLIENT_NAMES, g as GATEWAY_CLIENT_MODES } from "./message-channel-DQjnLsbt.js";
6
+ import { t as formatDocsLink } from "./links-zAiSQkDq.js";
7
+ import { r as theme } from "./theme-BdVoiIKU.js";
8
+ import { n as inheritOptionFromParent } from "./command-options-B2UZtFjA.js";
9
+ import { n as VERSION } from "./version-C_hbgFhJ.js";
10
+ import { c as loadConfig } from "./config-iCb_c-Ku.js";
11
+ import { i as asOptionalRecord } from "./record-coerce-BDH91-dk.js";
12
+ import { t as sanitizeTerminalText } from "./safe-text-mZ4kGTqN.js";
13
+ import { i as omitEnvKeysCaseInsensitive, n as listKnownProviderAuthEnvVarNames } from "./provider-env-vars-CXaZ6PSt.js";
14
+ import { f as GatewayClient } from "./method-scopes-D6zsS-pm.js";
15
+ import { f as isKnownCoreToolId, s as resolveOwnerOnlyToolApprovalClass } from "./tool-policy-D9s7PW1K.js";
16
+ import { r as listThinkingLevels } from "./thinking-Cqek81pv.js";
17
+ import { i as resolveWindowsSpawnProgram, n as materializeWindowsSpawnProgram } from "./windows-spawn-NFABW6Xb.js";
18
+ import { r as isMutatingToolCall } from "./tool-mutation-CFoETI_R.js";
19
+ import { t as getChatCommands } from "./commands-registry.data-lxEVKjL-.js";
20
+ import { t as resolveGatewayClientBootstrap } from "./client-bootstrap-ByVde6Fa.js";
21
+ import { t as ensureSquidClawCliOnPath } from "./path-env-Dyk5uH6K.js";
22
+ import { t as readSecretFromFile } from "./secret-file-CJ04kjzo.js";
23
+ import { fileURLToPath } from "node:url";
24
+ import fs from "node:fs";
25
+ import path from "node:path";
26
+ import { spawn } from "node:child_process";
27
+ import os, { homedir } from "node:os";
28
+ import { randomUUID } from "node:crypto";
29
+ import { Readable, Writable } from "node:stream";
30
+ import * as readline$1 from "node:readline";
31
+ import { AgentSideConnection, ClientSideConnection, PROTOCOL_VERSION, ndJsonStream } from "@agentclientprotocol/sdk";
32
+ //#region src/acp/approval-classifier.ts
33
+ const SAFE_SEARCH_TOOL_IDS = new Set([
34
+ "search",
35
+ "web_search",
36
+ "memory_search"
37
+ ]);
38
+ const TRUSTED_SAFE_TOOL_ALIASES = new Set(["search"]);
39
+ const EXEC_CAPABLE_TOOL_IDS = new Set([
40
+ "exec",
41
+ "spawn",
42
+ "shell",
43
+ "bash",
44
+ "process",
45
+ "code_execution"
46
+ ]);
47
+ const CONTROL_PLANE_TOOL_IDS = new Set([
48
+ "sessions_spawn",
49
+ "sessions_send",
50
+ "session_status"
51
+ ]);
52
+ function readFirstStringValue(source, keys) {
53
+ if (!source) return;
54
+ for (const key of keys) {
55
+ const value = normalizeOptionalString(source[key]);
56
+ if (value) return value;
57
+ }
58
+ }
59
+ function normalizeToolName(value) {
60
+ const normalized = normalizeLowercaseStringOrEmpty(value);
61
+ if (!normalized || normalized.length > 128) return;
62
+ return /^[a-z0-9._-]+$/.test(normalized) ? normalized : void 0;
63
+ }
64
+ function parseToolNameFromTitle(title) {
65
+ if (!title) return;
66
+ const head = normalizeOptionalString(title.split(":", 1)[0]);
67
+ return head ? normalizeToolName(head) : void 0;
68
+ }
69
+ function resolveToolNameForPermission(params) {
70
+ const toolCall = params.toolCall;
71
+ const toolMeta = asOptionalRecord(toolCall?._meta);
72
+ const rawInput = asOptionalRecord(toolCall?.rawInput);
73
+ const fromMeta = readFirstStringValue(toolMeta, [
74
+ "toolName",
75
+ "tool_name",
76
+ "name"
77
+ ]);
78
+ const fromRawInput = readFirstStringValue(rawInput, [
79
+ "tool",
80
+ "toolName",
81
+ "tool_name",
82
+ "name"
83
+ ]);
84
+ const fromTitle = parseToolNameFromTitle(toolCall?.title);
85
+ const metaName = fromMeta ? normalizeToolName(fromMeta) : void 0;
86
+ const rawInputName = fromRawInput ? normalizeToolName(fromRawInput) : void 0;
87
+ const titleName = fromTitle;
88
+ if (fromMeta && !metaName || fromRawInput && !rawInputName) return;
89
+ if (metaName && titleName && metaName !== titleName) return;
90
+ if (rawInputName && metaName && rawInputName !== metaName) return;
91
+ if (rawInputName && titleName && rawInputName !== titleName) return;
92
+ return metaName ?? titleName ?? rawInputName;
93
+ }
94
+ function extractPathFromToolTitle(toolTitle, toolName) {
95
+ if (!toolTitle) return;
96
+ const separator = toolTitle.indexOf(":");
97
+ if (separator < 0) return;
98
+ const tail = toolTitle.slice(separator + 1).trim();
99
+ if (!tail) return;
100
+ const keyedMatch = tail.match(/(?:^|,\s*)(?:path|file_path|filePath)\s*:\s*([^,]+)/);
101
+ if (keyedMatch?.[1]) return keyedMatch[1].trim();
102
+ return toolName === "read" ? tail : void 0;
103
+ }
104
+ function resolveToolPathCandidate(params, toolName, toolTitle) {
105
+ return readFirstStringValue(asOptionalRecord(params.toolCall?.rawInput), [
106
+ "path",
107
+ "file_path",
108
+ "filePath"
109
+ ]) ?? extractPathFromToolTitle(toolTitle, toolName);
110
+ }
111
+ function resolveAbsoluteScopedPath(value, cwd) {
112
+ let candidate = value.trim();
113
+ if (!candidate) return;
114
+ if (candidate.startsWith("file://")) try {
115
+ const parsed = new URL(candidate);
116
+ candidate = decodeURIComponent(parsed.pathname || "");
117
+ } catch {
118
+ return;
119
+ }
120
+ if (candidate === "~") candidate = homedir();
121
+ else if (candidate.startsWith("~/")) candidate = path.join(homedir(), candidate.slice(2));
122
+ return path.isAbsolute(candidate) ? path.normalize(candidate) : path.resolve(cwd, candidate);
123
+ }
124
+ function isReadToolCallScopedToCwd(params, toolName, toolTitle, cwd) {
125
+ if (toolName !== "read") return false;
126
+ const rawPath = resolveToolPathCandidate(params, toolName, toolTitle);
127
+ if (!rawPath) return false;
128
+ const absolutePath = resolveAbsoluteScopedPath(rawPath, cwd);
129
+ if (!absolutePath) return false;
130
+ const root = path.resolve(cwd);
131
+ const relative = path.relative(root, absolutePath);
132
+ return relative === "" || !relative.startsWith("..") && !path.isAbsolute(relative);
133
+ }
134
+ function classifyAcpToolApproval(params) {
135
+ const toolName = resolveToolNameForPermission(params);
136
+ if (!toolName) return {
137
+ toolName: void 0,
138
+ approvalClass: "unknown",
139
+ autoApprove: false
140
+ };
141
+ const isTrustedToolId = isKnownCoreToolId(toolName) || TRUSTED_SAFE_TOOL_ALIASES.has(toolName);
142
+ if (toolName === "read" && isTrustedToolId) {
143
+ const autoApprove = isReadToolCallScopedToCwd(params, toolName, params.toolCall?.title ?? void 0, params.cwd);
144
+ return {
145
+ toolName,
146
+ approvalClass: autoApprove ? "readonly_scoped" : "other",
147
+ autoApprove
148
+ };
149
+ }
150
+ if (SAFE_SEARCH_TOOL_IDS.has(toolName) && isTrustedToolId) return {
151
+ toolName,
152
+ approvalClass: "readonly_search",
153
+ autoApprove: true
154
+ };
155
+ const ownerOnlyApprovalClass = resolveOwnerOnlyToolApprovalClass(toolName);
156
+ if (ownerOnlyApprovalClass) return {
157
+ toolName,
158
+ approvalClass: ownerOnlyApprovalClass,
159
+ autoApprove: false
160
+ };
161
+ if (EXEC_CAPABLE_TOOL_IDS.has(toolName)) return {
162
+ toolName,
163
+ approvalClass: "exec_capable",
164
+ autoApprove: false
165
+ };
166
+ if (CONTROL_PLANE_TOOL_IDS.has(toolName)) return {
167
+ toolName,
168
+ approvalClass: "control_plane",
169
+ autoApprove: false
170
+ };
171
+ if (isMutatingToolCall(toolName, params.toolCall?.rawInput)) return {
172
+ toolName,
173
+ approvalClass: "mutating",
174
+ autoApprove: false
175
+ };
176
+ return {
177
+ toolName,
178
+ approvalClass: "other",
179
+ autoApprove: false
180
+ };
181
+ }
182
+ //#endregion
183
+ //#region src/acp/client.ts
184
+ function resolveToolKindForPermission(toolName, approvalClass) {
185
+ if (!toolName && approvalClass === "unknown") return;
186
+ if (approvalClass === "readonly_scoped") return "readonly_scoped";
187
+ if (approvalClass === "readonly_search") return "readonly_search";
188
+ return approvalClass;
189
+ }
190
+ function pickOption(options, kinds) {
191
+ for (const kind of kinds) {
192
+ const match = options.find((option) => option.kind === kind);
193
+ if (match) return match;
194
+ }
195
+ }
196
+ function selectedPermission(optionId) {
197
+ return { outcome: {
198
+ outcome: "selected",
199
+ optionId
200
+ } };
201
+ }
202
+ function cancelledPermission() {
203
+ return { outcome: { outcome: "cancelled" } };
204
+ }
205
+ function promptUserPermission(toolName, toolTitle) {
206
+ if (!process.stdin.isTTY || !process.stderr.isTTY) {
207
+ console.error(`[permission denied] ${toolName ?? "unknown"}: non-interactive terminal`);
208
+ return Promise.resolve(false);
209
+ }
210
+ return new Promise((resolve) => {
211
+ let settled = false;
212
+ const rl = readline$1.createInterface({
213
+ input: process.stdin,
214
+ output: process.stderr
215
+ });
216
+ const finish = (approved) => {
217
+ if (settled) return;
218
+ settled = true;
219
+ clearTimeout(timeout);
220
+ rl.close();
221
+ resolve(approved);
222
+ };
223
+ const timeout = setTimeout(() => {
224
+ console.error(`\n[permission timeout] denied: ${toolName ?? "unknown"}`);
225
+ finish(false);
226
+ }, 3e4);
227
+ const label = toolTitle ? toolName ? `${toolTitle} (${toolName})` : toolTitle : toolName ?? "unknown tool";
228
+ rl.question(`\n[permission] Allow "${label}"? (y/N) `, (answer) => {
229
+ const approved = normalizeLowercaseStringOrEmpty(answer) === "y";
230
+ console.error(`[permission ${approved ? "approved" : "denied"}] ${toolName ?? "unknown"}`);
231
+ finish(approved);
232
+ });
233
+ });
234
+ }
235
+ async function resolvePermissionRequest(params, deps = {}) {
236
+ const log = deps.log ?? ((line) => console.error(line));
237
+ const prompt = deps.prompt ?? promptUserPermission;
238
+ const cwd = deps.cwd ?? process.cwd();
239
+ const options = params.options ?? [];
240
+ const toolTitle = sanitizeTerminalText(params.toolCall?.title ?? "tool");
241
+ const classification = classifyAcpToolApproval({
242
+ toolCall: params.toolCall,
243
+ cwd
244
+ });
245
+ const toolName = classification.toolName;
246
+ const toolKind = resolveToolKindForPermission(toolName, classification.approvalClass);
247
+ if (options.length === 0) {
248
+ log(`[permission cancelled] ${toolName ?? "unknown"}: no options available`);
249
+ return cancelledPermission();
250
+ }
251
+ const allowOption = pickOption(options, ["allow_once", "allow_always"]);
252
+ const rejectOption = pickOption(options, ["reject_once", "reject_always"]);
253
+ if (!!classification.autoApprove) {
254
+ const option = allowOption ?? options[0];
255
+ if (!option) {
256
+ log(`[permission cancelled] ${toolName}: no selectable options`);
257
+ return cancelledPermission();
258
+ }
259
+ log(`[permission auto-approved] ${toolName} (${toolKind ?? "unknown"})`);
260
+ return selectedPermission(option.optionId);
261
+ }
262
+ log(`\n[permission requested] ${toolTitle}${toolName ? ` (${toolName})` : ""}${toolKind ? ` [${toolKind}]` : ""}`);
263
+ const approved = await prompt(toolName, toolTitle);
264
+ if (approved && allowOption) return selectedPermission(allowOption.optionId);
265
+ if (!approved && rejectOption) return selectedPermission(rejectOption.optionId);
266
+ log(`[permission cancelled] ${toolName ?? "unknown"}: missing ${approved ? "allow" : "reject"} option`);
267
+ return cancelledPermission();
268
+ }
269
+ function toArgs(value) {
270
+ if (!value) return [];
271
+ return Array.isArray(value) ? value : [value];
272
+ }
273
+ function buildServerArgs(opts) {
274
+ const args = ["acp", ...toArgs(opts.serverArgs)];
275
+ if (opts.serverVerbose && !args.includes("--verbose") && !args.includes("-v")) args.push("--verbose");
276
+ return args;
277
+ }
278
+ function resolveAcpClientSpawnEnv(baseEnv = process.env, options = {}) {
279
+ const env = omitEnvKeysCaseInsensitive(baseEnv, options.stripKeys ?? []);
280
+ env.SQUIDCLAW_SHELL = "acp-client";
281
+ return env;
282
+ }
283
+ function shouldStripProviderAuthEnvVarsForAcpServer(params = {}) {
284
+ const serverCommand = normalizeOptionalString(params.serverCommand);
285
+ if (!serverCommand) return true;
286
+ const defaultServerCommand = normalizeOptionalString(params.defaultServerCommand);
287
+ if (!defaultServerCommand || serverCommand !== defaultServerCommand) return false;
288
+ const serverArgs = params.serverArgs ?? [];
289
+ const defaultServerArgs = params.defaultServerArgs ?? [];
290
+ return serverArgs.length === defaultServerArgs.length && serverArgs.every((arg, index) => arg === defaultServerArgs[index]);
291
+ }
292
+ function buildAcpClientStripKeys(params) {
293
+ const stripKeys = new Set(params.activeSkillEnvKeys ?? []);
294
+ if (params.stripProviderAuthEnvVars) for (const key of listKnownProviderAuthEnvVarNames()) stripKeys.add(key);
295
+ return stripKeys;
296
+ }
297
+ const DEFAULT_ACP_SPAWN_RUNTIME = {
298
+ platform: process.platform,
299
+ env: process.env,
300
+ execPath: process.execPath
301
+ };
302
+ function resolveAcpClientSpawnInvocation(params, runtime = DEFAULT_ACP_SPAWN_RUNTIME) {
303
+ const resolved = materializeWindowsSpawnProgram(resolveWindowsSpawnProgram({
304
+ command: params.serverCommand,
305
+ platform: runtime.platform,
306
+ env: runtime.env,
307
+ execPath: runtime.execPath,
308
+ packageName: "squidclaw"
309
+ }), params.serverArgs);
310
+ return {
311
+ command: resolved.command,
312
+ args: resolved.argv,
313
+ shell: resolved.shell,
314
+ windowsHide: resolved.windowsHide
315
+ };
316
+ }
317
+ function resolveSelfEntryPath() {
318
+ try {
319
+ const here = fileURLToPath(import.meta.url);
320
+ const candidate = path.resolve(path.dirname(here), "..", "entry.js");
321
+ if (fs.existsSync(candidate)) return candidate;
322
+ } catch {}
323
+ const argv1 = normalizeOptionalString(process.argv[1]);
324
+ if (argv1) return path.isAbsolute(argv1) ? argv1 : path.resolve(process.cwd(), argv1);
325
+ return null;
326
+ }
327
+ function printSessionUpdate(notification) {
328
+ const update = notification.update;
329
+ if (!("sessionUpdate" in update)) return;
330
+ switch (update.sessionUpdate) {
331
+ case "agent_message_chunk":
332
+ if (update.content?.type === "text") process.stdout.write(update.content.text);
333
+ return;
334
+ case "tool_call":
335
+ console.log(`\n[tool] ${update.title} (${update.status})`);
336
+ return;
337
+ case "tool_call_update":
338
+ if (update.status) console.log(`[tool update] ${update.toolCallId}: ${update.status}`);
339
+ return;
340
+ case "available_commands_update": {
341
+ const names = update.availableCommands?.map((cmd) => `/${cmd.name}`).join(" ");
342
+ if (names) console.log(`\n[commands] ${names}`);
343
+ return;
344
+ }
345
+ default: return;
346
+ }
347
+ }
348
+ async function createAcpClient(opts = {}) {
349
+ const cwd = opts.cwd ?? process.cwd();
350
+ const log = Boolean(opts.verbose) ? (msg) => console.error(`[acp-client] ${msg}`) : () => {};
351
+ ensureSquidClawCliOnPath();
352
+ const serverArgs = buildServerArgs(opts);
353
+ const entryPath = resolveSelfEntryPath();
354
+ const defaultServerCommand = entryPath ? process.execPath : "squidclaw";
355
+ const defaultServerArgs = entryPath ? [entryPath, ...serverArgs] : serverArgs;
356
+ const serverCommand = opts.serverCommand ?? defaultServerCommand;
357
+ const effectiveArgs = opts.serverCommand || !entryPath ? serverArgs : defaultServerArgs;
358
+ const { getActiveSkillEnvKeys } = await import("./env-overrides.runtime-Dm6DE_31.js");
359
+ const stripKeys = buildAcpClientStripKeys({
360
+ stripProviderAuthEnvVars: shouldStripProviderAuthEnvVarsForAcpServer({
361
+ serverCommand,
362
+ serverArgs: effectiveArgs,
363
+ defaultServerCommand,
364
+ defaultServerArgs
365
+ }),
366
+ activeSkillEnvKeys: getActiveSkillEnvKeys()
367
+ });
368
+ const spawnEnv = resolveAcpClientSpawnEnv(process.env, { stripKeys });
369
+ const spawnInvocation = resolveAcpClientSpawnInvocation({
370
+ serverCommand,
371
+ serverArgs: effectiveArgs
372
+ }, {
373
+ platform: process.platform,
374
+ env: spawnEnv,
375
+ execPath: process.execPath
376
+ });
377
+ log(`spawning: ${spawnInvocation.command} ${spawnInvocation.args.join(" ")}`);
378
+ const agent = spawn(spawnInvocation.command, spawnInvocation.args, {
379
+ stdio: [
380
+ "pipe",
381
+ "pipe",
382
+ "inherit"
383
+ ],
384
+ cwd,
385
+ env: spawnEnv,
386
+ shell: spawnInvocation.shell,
387
+ windowsHide: spawnInvocation.windowsHide
388
+ });
389
+ if (!agent.stdin || !agent.stdout) throw new Error("Failed to create ACP stdio pipes");
390
+ const client = new ClientSideConnection(() => ({
391
+ sessionUpdate: async (params) => {
392
+ printSessionUpdate(params);
393
+ },
394
+ requestPermission: async (params) => {
395
+ return resolvePermissionRequest(params, { cwd });
396
+ }
397
+ }), ndJsonStream(Writable.toWeb(agent.stdin), Readable.toWeb(agent.stdout)));
398
+ log("initializing");
399
+ await client.initialize({
400
+ protocolVersion: PROTOCOL_VERSION,
401
+ clientCapabilities: {
402
+ fs: {
403
+ readTextFile: true,
404
+ writeTextFile: true
405
+ },
406
+ terminal: true
407
+ },
408
+ clientInfo: {
409
+ name: "squidclaw-acp-client",
410
+ version: "1.0.0"
411
+ }
412
+ });
413
+ log("creating session");
414
+ return {
415
+ client,
416
+ agent,
417
+ sessionId: (await client.newSession({
418
+ cwd,
419
+ mcpServers: []
420
+ })).sessionId
421
+ };
422
+ }
423
+ async function runAcpClientInteractive(opts = {}) {
424
+ const { client, agent, sessionId } = await createAcpClient(opts);
425
+ const rl = readline$1.createInterface({
426
+ input: process.stdin,
427
+ output: process.stdout
428
+ });
429
+ console.log("SquidClaw ACP client");
430
+ console.log(`Session: ${sessionId}`);
431
+ console.log("Type a prompt, or \"exit\" to quit.\n");
432
+ const prompt = () => {
433
+ rl.question("> ", async (input) => {
434
+ const text = input.trim();
435
+ if (!text) {
436
+ prompt();
437
+ return;
438
+ }
439
+ if (text === "exit" || text === "quit") {
440
+ agent.kill();
441
+ rl.close();
442
+ process.exit(0);
443
+ }
444
+ try {
445
+ const response = await client.prompt({
446
+ sessionId,
447
+ prompt: [{
448
+ type: "text",
449
+ text
450
+ }]
451
+ });
452
+ console.log(`\n[${response.stopReason}]\n`);
453
+ } catch (err) {
454
+ console.error(`\n[error] ${String(err)}\n`);
455
+ }
456
+ prompt();
457
+ });
458
+ };
459
+ prompt();
460
+ agent.on("exit", (code) => {
461
+ console.log(`\nAgent exited with code ${code ?? 0}`);
462
+ rl.close();
463
+ process.exit(code ?? 0);
464
+ });
465
+ }
466
+ //#endregion
467
+ //#region src/infra/fixed-window-rate-limit.ts
468
+ function createFixedWindowRateLimiter(params) {
469
+ const maxRequests = Math.max(1, Math.floor(params.maxRequests));
470
+ const windowMs = Math.max(1, Math.floor(params.windowMs));
471
+ const now = params.now ?? Date.now;
472
+ let count = 0;
473
+ let windowStartMs = 0;
474
+ return {
475
+ consume() {
476
+ const nowMs = now();
477
+ if (nowMs - windowStartMs >= windowMs) {
478
+ windowStartMs = nowMs;
479
+ count = 0;
480
+ }
481
+ if (count >= maxRequests) return {
482
+ allowed: false,
483
+ retryAfterMs: Math.max(0, windowStartMs + windowMs - nowMs),
484
+ remaining: 0
485
+ };
486
+ count += 1;
487
+ return {
488
+ allowed: true,
489
+ retryAfterMs: 0,
490
+ remaining: Math.max(0, maxRequests - count)
491
+ };
492
+ },
493
+ reset() {
494
+ count = 0;
495
+ windowStartMs = 0;
496
+ }
497
+ };
498
+ }
499
+ //#endregion
500
+ //#region src/acp/commands.ts
501
+ const BASE_AVAILABLE_COMMANDS = [
502
+ {
503
+ name: "help",
504
+ description: "Show help and common commands."
505
+ },
506
+ {
507
+ name: "commands",
508
+ description: "List available commands."
509
+ },
510
+ {
511
+ name: "status",
512
+ description: "Show current status."
513
+ },
514
+ {
515
+ name: "context",
516
+ description: "Explain context usage (list|detail|json).",
517
+ input: { hint: "list | detail | json" }
518
+ },
519
+ {
520
+ name: "whoami",
521
+ description: "Show sender id (alias: /id)."
522
+ },
523
+ {
524
+ name: "id",
525
+ description: "Alias for /whoami."
526
+ },
527
+ {
528
+ name: "subagents",
529
+ description: "List or manage sub-agents."
530
+ },
531
+ {
532
+ name: "config",
533
+ description: "Read or write config (owner-only)."
534
+ },
535
+ {
536
+ name: "debug",
537
+ description: "Set runtime-only overrides (owner-only)."
538
+ },
539
+ {
540
+ name: "usage",
541
+ description: "Toggle usage footer (off|tokens|full)."
542
+ },
543
+ {
544
+ name: "stop",
545
+ description: "Stop the current run."
546
+ },
547
+ {
548
+ name: "restart",
549
+ description: "Restart the gateway (if enabled)."
550
+ },
551
+ {
552
+ name: "activation",
553
+ description: "Set group activation (mention|always)."
554
+ },
555
+ {
556
+ name: "send",
557
+ description: "Set send mode (on|off|inherit)."
558
+ },
559
+ {
560
+ name: "reset",
561
+ description: "Reset the session (/new)."
562
+ },
563
+ {
564
+ name: "new",
565
+ description: "Reset the session (/reset)."
566
+ },
567
+ {
568
+ name: "think",
569
+ description: "Set thinking level (off|minimal|low|medium|high|xhigh)."
570
+ },
571
+ {
572
+ name: "verbose",
573
+ description: "Set verbose mode (on|full|off)."
574
+ },
575
+ {
576
+ name: "reasoning",
577
+ description: "Toggle reasoning output (on|off|stream)."
578
+ },
579
+ {
580
+ name: "elevated",
581
+ description: "Toggle elevated mode (on|off)."
582
+ },
583
+ {
584
+ name: "model",
585
+ description: "Select a model (list|status|<name>)."
586
+ },
587
+ {
588
+ name: "queue",
589
+ description: "Adjust queue mode and options."
590
+ },
591
+ {
592
+ name: "bash",
593
+ description: "Run a host command (if enabled)."
594
+ },
595
+ {
596
+ name: "compact",
597
+ description: "Compact the session history."
598
+ }
599
+ ];
600
+ function listDockAvailableCommands() {
601
+ return getChatCommands().filter((command) => command.key.startsWith("dock:")).map((command) => ({
602
+ name: command.textAliases[0]?.replace(/^\//, "").trim() || command.key,
603
+ description: command.description
604
+ }));
605
+ }
606
+ function getAvailableCommands() {
607
+ return [...BASE_AVAILABLE_COMMANDS, ...listDockAvailableCommands()];
608
+ }
609
+ //#endregion
610
+ //#region src/acp/event-mapper.ts
611
+ const TOOL_LOCATION_PATH_KEYS = [
612
+ "path",
613
+ "filePath",
614
+ "file_path",
615
+ "targetPath",
616
+ "target_path",
617
+ "targetFile",
618
+ "target_file",
619
+ "sourcePath",
620
+ "source_path",
621
+ "destinationPath",
622
+ "destination_path",
623
+ "oldPath",
624
+ "old_path",
625
+ "newPath",
626
+ "new_path",
627
+ "outputPath",
628
+ "output_path",
629
+ "inputPath",
630
+ "input_path"
631
+ ];
632
+ const TOOL_LOCATION_LINE_KEYS = [
633
+ "line",
634
+ "lineNumber",
635
+ "line_number",
636
+ "startLine",
637
+ "start_line"
638
+ ];
639
+ const TOOL_RESULT_PATH_MARKER_RE = /^(?:FILE|MEDIA):(.+)$/gm;
640
+ const TOOL_LOCATION_MAX_DEPTH = 4;
641
+ const TOOL_LOCATION_MAX_NODES = 100;
642
+ const INLINE_CONTROL_ESCAPE_MAP = {
643
+ "\0": "\\0",
644
+ "\r": "\\r",
645
+ "\n": "\\n",
646
+ " ": "\\t",
647
+ "\v": "\\v",
648
+ "\f": "\\f",
649
+ "\u2028": "\\u2028",
650
+ "\u2029": "\\u2029"
651
+ };
652
+ function escapeInlineControlChars(value) {
653
+ let escaped = "";
654
+ for (const char of value) {
655
+ const codePoint = char.codePointAt(0);
656
+ if (codePoint === void 0) {
657
+ escaped += char;
658
+ continue;
659
+ }
660
+ if (!(codePoint <= 31 || codePoint >= 127 && codePoint <= 159 || codePoint === 8232 || codePoint === 8233)) {
661
+ escaped += char;
662
+ continue;
663
+ }
664
+ const mapped = INLINE_CONTROL_ESCAPE_MAP[char];
665
+ if (mapped) {
666
+ escaped += mapped;
667
+ continue;
668
+ }
669
+ escaped += codePoint <= 255 ? `\\x${codePoint.toString(16).padStart(2, "0")}` : `\\u${codePoint.toString(16).padStart(4, "0")}`;
670
+ }
671
+ return escaped;
672
+ }
673
+ function escapeResourceTitle(value) {
674
+ return escapeInlineControlChars(value).replace(/[()[\]]/g, (char) => `\\${char}`);
675
+ }
676
+ function normalizeToolLocationPath(value) {
677
+ const trimmed = value.trim();
678
+ if (!trimmed || trimmed.length > 4096 || trimmed.includes("\0") || trimmed.includes("\r") || trimmed.includes("\n")) return;
679
+ if (/^https?:\/\//i.test(trimmed)) return;
680
+ if (/^file:\/\//i.test(trimmed)) try {
681
+ const parsed = new URL(trimmed);
682
+ return decodeURIComponent(parsed.pathname || "") || void 0;
683
+ } catch {
684
+ return;
685
+ }
686
+ return trimmed;
687
+ }
688
+ function normalizeToolLocationLine(value) {
689
+ if (typeof value !== "number" || !Number.isFinite(value)) return;
690
+ const line = Math.floor(value);
691
+ return line > 0 ? line : void 0;
692
+ }
693
+ function extractToolLocationLine(record) {
694
+ for (const key of TOOL_LOCATION_LINE_KEYS) {
695
+ const line = normalizeToolLocationLine(record[key]);
696
+ if (line !== void 0) return line;
697
+ }
698
+ }
699
+ function addToolLocation(locations, rawPath, line) {
700
+ const path = normalizeToolLocationPath(rawPath);
701
+ if (!path) return;
702
+ for (const [existingKey, existing] of locations.entries()) {
703
+ if (existing.path !== path) continue;
704
+ if (line === void 0 || existing.line === line) return;
705
+ if (existing.line === void 0) locations.delete(existingKey);
706
+ }
707
+ const locationKey = `${path}:${line ?? ""}`;
708
+ if (locations.has(locationKey)) return;
709
+ locations.set(locationKey, line ? {
710
+ path,
711
+ line
712
+ } : { path });
713
+ }
714
+ function collectLocationsFromTextMarkers(text, locations) {
715
+ for (const match of text.matchAll(TOOL_RESULT_PATH_MARKER_RE)) {
716
+ const candidate = normalizeOptionalString(match[1]);
717
+ if (candidate) addToolLocation(locations, candidate);
718
+ }
719
+ }
720
+ function collectToolLocations(value, locations, state, depth) {
721
+ if (state.visited >= TOOL_LOCATION_MAX_NODES || depth > TOOL_LOCATION_MAX_DEPTH) return;
722
+ state.visited += 1;
723
+ if (typeof value === "string") {
724
+ collectLocationsFromTextMarkers(value, locations);
725
+ return;
726
+ }
727
+ if (!value || typeof value !== "object") return;
728
+ if (Array.isArray(value)) {
729
+ for (const item of value) {
730
+ collectToolLocations(item, locations, state, depth + 1);
731
+ if (state.visited >= TOOL_LOCATION_MAX_NODES) return;
732
+ }
733
+ return;
734
+ }
735
+ const record = value;
736
+ const line = extractToolLocationLine(record);
737
+ for (const key of TOOL_LOCATION_PATH_KEYS) {
738
+ const rawPath = record[key];
739
+ if (typeof rawPath === "string") addToolLocation(locations, rawPath, line);
740
+ }
741
+ const content = Array.isArray(record.content) ? record.content : void 0;
742
+ if (content) for (const block of content) {
743
+ const entry = asOptionalRecord(block);
744
+ if (entry?.type === "text" && typeof entry.text === "string") collectLocationsFromTextMarkers(entry.text, locations);
745
+ }
746
+ for (const [key, nested] of Object.entries(record)) {
747
+ if (key === "content") continue;
748
+ collectToolLocations(nested, locations, state, depth + 1);
749
+ if (state.visited >= TOOL_LOCATION_MAX_NODES) return;
750
+ }
751
+ }
752
+ function extractTextFromPrompt(prompt, maxBytes) {
753
+ const parts = [];
754
+ let totalBytes = 0;
755
+ for (const block of prompt) {
756
+ let blockText;
757
+ if (block.type === "text") blockText = block.text;
758
+ else if (block.type === "resource") {
759
+ const resource = block.resource;
760
+ if (resource?.text) blockText = resource.text;
761
+ } else if (block.type === "resource_link") {
762
+ const title = block.title ? ` (${escapeResourceTitle(block.title)})` : "";
763
+ const uri = block.uri ? escapeInlineControlChars(block.uri) : "";
764
+ blockText = uri ? `[Resource link${title}] ${uri}` : `[Resource link${title}]`;
765
+ }
766
+ if (blockText !== void 0) {
767
+ if (maxBytes !== void 0) {
768
+ const separatorBytes = parts.length > 0 ? 1 : 0;
769
+ totalBytes += separatorBytes + Buffer.byteLength(blockText, "utf-8");
770
+ if (totalBytes > maxBytes) throw new Error(`Prompt exceeds maximum allowed size of ${maxBytes} bytes`);
771
+ }
772
+ parts.push(blockText);
773
+ }
774
+ }
775
+ return parts.join("\n");
776
+ }
777
+ function extractAttachmentsFromPrompt(prompt) {
778
+ const attachments = [];
779
+ for (const block of prompt) {
780
+ if (block.type !== "image") continue;
781
+ const image = block;
782
+ if (!image.data || !image.mimeType) continue;
783
+ attachments.push({
784
+ type: "image",
785
+ mimeType: image.mimeType,
786
+ content: image.data
787
+ });
788
+ }
789
+ return attachments;
790
+ }
791
+ function formatToolTitle(name, args) {
792
+ const base = name ?? "tool";
793
+ if (!args || Object.keys(args).length === 0) return base;
794
+ return escapeInlineControlChars(`${base}: ${Object.entries(args).map(([key, value]) => {
795
+ const raw = typeof value === "string" ? value : JSON.stringify(value);
796
+ return `${key}: ${raw.length > 100 ? `${raw.slice(0, 100)}...` : raw}`;
797
+ }).join(", ")}`);
798
+ }
799
+ function inferToolKind(name) {
800
+ if (!name) return "other";
801
+ const normalized = normalizeLowercaseStringOrEmpty(name);
802
+ if (normalized.includes("read")) return "read";
803
+ if (normalized.includes("write") || normalized.includes("edit")) return "edit";
804
+ if (normalized.includes("delete") || normalized.includes("remove")) return "delete";
805
+ if (normalized.includes("move") || normalized.includes("rename")) return "move";
806
+ if (normalized.includes("search") || normalized.includes("find")) return "search";
807
+ if (normalized.includes("exec") || normalized.includes("run") || normalized.includes("bash")) return "execute";
808
+ if (normalized.includes("fetch") || normalized.includes("http")) return "fetch";
809
+ return "other";
810
+ }
811
+ function extractToolCallContent(value) {
812
+ if (hasNonEmptyString(value)) return value.trim() ? [{
813
+ type: "content",
814
+ content: {
815
+ type: "text",
816
+ text: value
817
+ }
818
+ }] : void 0;
819
+ const record = asOptionalRecord(value);
820
+ if (!record) return;
821
+ const contents = [];
822
+ const blocks = Array.isArray(record.content) ? record.content : [];
823
+ for (const block of blocks) {
824
+ const entry = asOptionalRecord(block);
825
+ if (entry?.type === "text" && hasNonEmptyString(entry.text)) contents.push({
826
+ type: "content",
827
+ content: {
828
+ type: "text",
829
+ text: entry.text
830
+ }
831
+ });
832
+ }
833
+ if (contents.length > 0) return contents;
834
+ const fallbackText = readStringValue(record.text) ?? readStringValue(record.message) ?? readStringValue(record.error);
835
+ if (!hasNonEmptyString(fallbackText)) return;
836
+ return [{
837
+ type: "content",
838
+ content: {
839
+ type: "text",
840
+ text: fallbackText
841
+ }
842
+ }];
843
+ }
844
+ function extractToolCallLocations(...values) {
845
+ const locations = /* @__PURE__ */ new Map();
846
+ for (const value of values) collectToolLocations(value, locations, { visited: 0 }, 0);
847
+ return locations.size > 0 ? [...locations.values()] : void 0;
848
+ }
849
+ //#endregion
850
+ //#region src/acp/meta.ts
851
+ function readString(meta, keys) {
852
+ if (!meta) return;
853
+ for (const key of keys) {
854
+ const value = normalizeOptionalString(meta[key]);
855
+ if (value) return value;
856
+ }
857
+ }
858
+ function readBool(meta, keys) {
859
+ if (!meta) return;
860
+ for (const key of keys) {
861
+ const value = meta[key];
862
+ if (typeof value === "boolean") return value;
863
+ }
864
+ }
865
+ function readNumber(meta, keys) {
866
+ if (!meta) return;
867
+ for (const key of keys) {
868
+ const value = meta[key];
869
+ if (typeof value === "number" && Number.isFinite(value)) return value;
870
+ }
871
+ }
872
+ //#endregion
873
+ //#region src/acp/session-mapper.ts
874
+ function parseSessionMeta(meta) {
875
+ if (!meta || typeof meta !== "object") return {};
876
+ const record = meta;
877
+ return {
878
+ sessionKey: readString(record, [
879
+ "sessionKey",
880
+ "session",
881
+ "key"
882
+ ]),
883
+ sessionLabel: readString(record, ["sessionLabel", "label"]),
884
+ resetSession: readBool(record, ["resetSession", "reset"]),
885
+ requireExisting: readBool(record, ["requireExistingSession", "requireExisting"]),
886
+ prefixCwd: readBool(record, ["prefixCwd"])
887
+ };
888
+ }
889
+ async function resolveSessionKey(params) {
890
+ const requestedLabel = params.meta.sessionLabel ?? params.opts.defaultSessionLabel;
891
+ const requestedKey = params.meta.sessionKey ?? params.opts.defaultSessionKey;
892
+ const requireExisting = params.meta.requireExisting ?? params.opts.requireExistingSession ?? false;
893
+ if (params.meta.sessionLabel) {
894
+ const resolved = await params.gateway.request("sessions.resolve", { label: params.meta.sessionLabel });
895
+ if (!resolved?.key) throw new Error(`Unable to resolve session label: ${params.meta.sessionLabel}`);
896
+ return resolved.key;
897
+ }
898
+ if (params.meta.sessionKey) {
899
+ if (!requireExisting) return params.meta.sessionKey;
900
+ const resolved = await params.gateway.request("sessions.resolve", { key: params.meta.sessionKey });
901
+ if (!resolved?.key) throw new Error(`Session key not found: ${params.meta.sessionKey}`);
902
+ return resolved.key;
903
+ }
904
+ if (requestedLabel) {
905
+ const resolved = await params.gateway.request("sessions.resolve", { label: requestedLabel });
906
+ if (!resolved?.key) throw new Error(`Unable to resolve session label: ${requestedLabel}`);
907
+ return resolved.key;
908
+ }
909
+ if (requestedKey) {
910
+ if (!requireExisting) return requestedKey;
911
+ const resolved = await params.gateway.request("sessions.resolve", { key: requestedKey });
912
+ if (!resolved?.key) throw new Error(`Session key not found: ${requestedKey}`);
913
+ return resolved.key;
914
+ }
915
+ return params.fallbackKey;
916
+ }
917
+ async function resetSessionIfNeeded(params) {
918
+ if (!(params.meta.resetSession ?? params.opts.resetSession ?? false)) return;
919
+ await params.gateway.request("sessions.reset", { key: params.sessionKey });
920
+ }
921
+ //#endregion
922
+ //#region src/acp/session.ts
923
+ const DEFAULT_MAX_SESSIONS = 5e3;
924
+ const DEFAULT_IDLE_TTL_MS = 1440 * 60 * 1e3;
925
+ function createInMemorySessionStore(options = {}) {
926
+ const maxSessions = Math.max(1, options.maxSessions ?? DEFAULT_MAX_SESSIONS);
927
+ const idleTtlMs = Math.max(1e3, options.idleTtlMs ?? DEFAULT_IDLE_TTL_MS);
928
+ const now = options.now ?? Date.now;
929
+ const sessions = /* @__PURE__ */ new Map();
930
+ const runIdToSessionId = /* @__PURE__ */ new Map();
931
+ const touchSession = (session, nowMs) => {
932
+ session.lastTouchedAt = nowMs;
933
+ };
934
+ const removeSession = (sessionId) => {
935
+ const session = sessions.get(sessionId);
936
+ if (!session) return false;
937
+ if (session.activeRunId) runIdToSessionId.delete(session.activeRunId);
938
+ session.abortController?.abort();
939
+ sessions.delete(sessionId);
940
+ return true;
941
+ };
942
+ const reapIdleSessions = (nowMs) => {
943
+ const idleBefore = nowMs - idleTtlMs;
944
+ for (const [sessionId, session] of sessions.entries()) {
945
+ if (session.activeRunId || session.abortController) continue;
946
+ if (session.lastTouchedAt > idleBefore) continue;
947
+ removeSession(sessionId);
948
+ }
949
+ };
950
+ const evictOldestIdleSession = () => {
951
+ let oldestSessionId = null;
952
+ let oldestLastTouchedAt = Number.POSITIVE_INFINITY;
953
+ for (const [sessionId, session] of sessions.entries()) {
954
+ if (session.activeRunId || session.abortController) continue;
955
+ if (session.lastTouchedAt >= oldestLastTouchedAt) continue;
956
+ oldestLastTouchedAt = session.lastTouchedAt;
957
+ oldestSessionId = sessionId;
958
+ }
959
+ if (!oldestSessionId) return false;
960
+ return removeSession(oldestSessionId);
961
+ };
962
+ const createSession = (params) => {
963
+ const nowMs = now();
964
+ const sessionId = params.sessionId ?? randomUUID();
965
+ const existingSession = sessions.get(sessionId);
966
+ if (existingSession) {
967
+ existingSession.sessionKey = params.sessionKey;
968
+ existingSession.cwd = params.cwd;
969
+ touchSession(existingSession, nowMs);
970
+ return existingSession;
971
+ }
972
+ reapIdleSessions(nowMs);
973
+ if (sessions.size >= maxSessions && !evictOldestIdleSession()) throw new Error(`ACP session limit reached (max ${maxSessions}). Close idle ACP clients and retry.`);
974
+ const session = {
975
+ sessionId,
976
+ sessionKey: params.sessionKey,
977
+ cwd: params.cwd,
978
+ createdAt: nowMs,
979
+ lastTouchedAt: nowMs,
980
+ abortController: null,
981
+ activeRunId: null
982
+ };
983
+ sessions.set(sessionId, session);
984
+ return session;
985
+ };
986
+ const hasSession = (sessionId) => sessions.has(sessionId);
987
+ const getSession = (sessionId) => {
988
+ const session = sessions.get(sessionId);
989
+ if (session) touchSession(session, now());
990
+ return session;
991
+ };
992
+ const getSessionByRunId = (runId) => {
993
+ const sessionId = runIdToSessionId.get(runId);
994
+ if (!sessionId) return;
995
+ const session = sessions.get(sessionId);
996
+ if (session) touchSession(session, now());
997
+ return session;
998
+ };
999
+ const setActiveRun = (sessionId, runId, abortController) => {
1000
+ const session = sessions.get(sessionId);
1001
+ if (!session) return;
1002
+ session.activeRunId = runId;
1003
+ session.abortController = abortController;
1004
+ runIdToSessionId.set(runId, sessionId);
1005
+ touchSession(session, now());
1006
+ };
1007
+ const clearActiveRun = (sessionId) => {
1008
+ const session = sessions.get(sessionId);
1009
+ if (!session) return;
1010
+ if (session.activeRunId) runIdToSessionId.delete(session.activeRunId);
1011
+ session.activeRunId = null;
1012
+ session.abortController = null;
1013
+ touchSession(session, now());
1014
+ };
1015
+ const cancelActiveRun = (sessionId) => {
1016
+ const session = sessions.get(sessionId);
1017
+ if (!session?.abortController) return false;
1018
+ session.abortController.abort();
1019
+ if (session.activeRunId) runIdToSessionId.delete(session.activeRunId);
1020
+ session.abortController = null;
1021
+ session.activeRunId = null;
1022
+ touchSession(session, now());
1023
+ return true;
1024
+ };
1025
+ const clearAllSessionsForTest = () => {
1026
+ for (const session of sessions.values()) session.abortController?.abort();
1027
+ sessions.clear();
1028
+ runIdToSessionId.clear();
1029
+ };
1030
+ return {
1031
+ createSession,
1032
+ hasSession,
1033
+ getSession,
1034
+ getSessionByRunId,
1035
+ setActiveRun,
1036
+ clearActiveRun,
1037
+ cancelActiveRun,
1038
+ clearAllSessionsForTest
1039
+ };
1040
+ }
1041
+ const defaultAcpSessionStore = createInMemorySessionStore();
1042
+ //#endregion
1043
+ //#region src/acp/types.ts
1044
+ const ACP_PROVENANCE_MODE_VALUES = [
1045
+ "off",
1046
+ "meta",
1047
+ "meta+receipt"
1048
+ ];
1049
+ function normalizeAcpProvenanceMode(value) {
1050
+ const normalized = normalizeOptionalLowercaseString(value);
1051
+ if (!normalized) return;
1052
+ return ACP_PROVENANCE_MODE_VALUES.includes(normalized) ? normalized : void 0;
1053
+ }
1054
+ const ACP_AGENT_INFO = {
1055
+ name: "squidclaw-acp",
1056
+ title: "SquidClaw ACP Gateway",
1057
+ version: VERSION
1058
+ };
1059
+ //#endregion
1060
+ //#region src/acp/translator.ts
1061
+ const MAX_PROMPT_BYTES = 2 * 1024 * 1024;
1062
+ const ACP_THOUGHT_LEVEL_CONFIG_ID = "thought_level";
1063
+ const ACP_FAST_MODE_CONFIG_ID = "fast_mode";
1064
+ const ACP_VERBOSE_LEVEL_CONFIG_ID = "verbose_level";
1065
+ const ACP_REASONING_LEVEL_CONFIG_ID = "reasoning_level";
1066
+ const ACP_RESPONSE_USAGE_CONFIG_ID = "response_usage";
1067
+ const ACP_ELEVATED_LEVEL_CONFIG_ID = "elevated_level";
1068
+ const ACP_LOAD_SESSION_REPLAY_LIMIT = 1e6;
1069
+ const ACP_GATEWAY_DISCONNECT_GRACE_MS = 5e3;
1070
+ function isAdminScopeProvenanceRejection(err) {
1071
+ if (!(err instanceof Error)) return false;
1072
+ const gatewayCode = typeof err.gatewayCode === "string" ? err.gatewayCode : void 0;
1073
+ return err.name === "GatewayClientRequestError" && gatewayCode === "INVALID_REQUEST" && err.message.includes("system provenance fields require admin scope");
1074
+ }
1075
+ function isGatewayCloseError(err) {
1076
+ return err instanceof Error && err.message.startsWith("gateway closed (");
1077
+ }
1078
+ const SESSION_CREATE_RATE_LIMIT_DEFAULT_MAX_REQUESTS = 120;
1079
+ const SESSION_CREATE_RATE_LIMIT_DEFAULT_WINDOW_MS = 1e4;
1080
+ function formatThinkingLevelName(level) {
1081
+ switch (level) {
1082
+ case "xhigh": return "Extra High";
1083
+ case "adaptive": return "Adaptive";
1084
+ default: return level.length > 0 ? `${level[0].toUpperCase()}${level.slice(1)}` : "Unknown";
1085
+ }
1086
+ }
1087
+ function buildThinkingModeDescription(level) {
1088
+ if (level === "adaptive") return "Use the Gateway session default thought level.";
1089
+ }
1090
+ function formatConfigValueName(value) {
1091
+ switch (value) {
1092
+ case "xhigh": return "Extra High";
1093
+ default: return value.length > 0 ? `${value[0].toUpperCase()}${value.slice(1)}` : "Unknown";
1094
+ }
1095
+ }
1096
+ function buildSelectConfigOption(params) {
1097
+ return {
1098
+ type: "select",
1099
+ id: params.id,
1100
+ name: params.name,
1101
+ category: params.category,
1102
+ description: params.description,
1103
+ currentValue: params.currentValue,
1104
+ options: params.values.map((value) => ({
1105
+ value,
1106
+ name: formatConfigValueName(value)
1107
+ }))
1108
+ };
1109
+ }
1110
+ function buildSessionPresentation(params) {
1111
+ const row = {
1112
+ ...params.row,
1113
+ ...params.overrides
1114
+ };
1115
+ const availableLevelIds = [...listThinkingLevels(row.modelProvider, row.model)];
1116
+ const currentModeId = normalizeOptionalString(row.thinkingLevel) || "adaptive";
1117
+ if (!availableLevelIds.includes(currentModeId)) availableLevelIds.push(currentModeId);
1118
+ const modes = {
1119
+ currentModeId,
1120
+ availableModes: availableLevelIds.map((level) => ({
1121
+ id: level,
1122
+ name: formatThinkingLevelName(level),
1123
+ description: buildThinkingModeDescription(level)
1124
+ }))
1125
+ };
1126
+ return {
1127
+ configOptions: [
1128
+ buildSelectConfigOption({
1129
+ id: ACP_THOUGHT_LEVEL_CONFIG_ID,
1130
+ name: "Thought level",
1131
+ category: "thought_level",
1132
+ description: "Controls how much deliberate reasoning SquidClaw requests from the Gateway model.",
1133
+ currentValue: currentModeId,
1134
+ values: availableLevelIds
1135
+ }),
1136
+ buildSelectConfigOption({
1137
+ id: ACP_FAST_MODE_CONFIG_ID,
1138
+ name: "Fast mode",
1139
+ description: "Controls whether OpenAI sessions use the Gateway fast-mode profile.",
1140
+ currentValue: row.fastMode ? "on" : "off",
1141
+ values: ["off", "on"]
1142
+ }),
1143
+ buildSelectConfigOption({
1144
+ id: ACP_VERBOSE_LEVEL_CONFIG_ID,
1145
+ name: "Tool verbosity",
1146
+ description: "Controls how much tool progress and output detail SquidClaw keeps enabled for the session.",
1147
+ currentValue: normalizeOptionalString(row.verboseLevel) || "off",
1148
+ values: [
1149
+ "off",
1150
+ "on",
1151
+ "full"
1152
+ ]
1153
+ }),
1154
+ buildSelectConfigOption({
1155
+ id: ACP_REASONING_LEVEL_CONFIG_ID,
1156
+ name: "Reasoning stream",
1157
+ description: "Controls whether reasoning-capable models emit reasoning text for the session.",
1158
+ currentValue: normalizeOptionalString(row.reasoningLevel) || "off",
1159
+ values: [
1160
+ "off",
1161
+ "on",
1162
+ "stream"
1163
+ ]
1164
+ }),
1165
+ buildSelectConfigOption({
1166
+ id: ACP_RESPONSE_USAGE_CONFIG_ID,
1167
+ name: "Usage detail",
1168
+ description: "Controls how much usage information SquidClaw attaches to responses for the session.",
1169
+ currentValue: normalizeOptionalString(row.responseUsage) || "off",
1170
+ values: [
1171
+ "off",
1172
+ "tokens",
1173
+ "full"
1174
+ ]
1175
+ }),
1176
+ buildSelectConfigOption({
1177
+ id: ACP_ELEVATED_LEVEL_CONFIG_ID,
1178
+ name: "Elevated actions",
1179
+ description: "Controls how aggressively the session allows elevated execution behavior.",
1180
+ currentValue: normalizeOptionalString(row.elevatedLevel) || "off",
1181
+ values: [
1182
+ "off",
1183
+ "on",
1184
+ "ask",
1185
+ "full"
1186
+ ]
1187
+ })
1188
+ ],
1189
+ modes
1190
+ };
1191
+ }
1192
+ function extractReplayChunks(message) {
1193
+ const role = typeof message.role === "string" ? message.role : "";
1194
+ if (role !== "user" && role !== "assistant") return [];
1195
+ if (typeof message.content === "string") return message.content.length > 0 ? [{
1196
+ sessionUpdate: role === "user" ? "user_message_chunk" : "agent_message_chunk",
1197
+ text: message.content
1198
+ }] : [];
1199
+ if (!Array.isArray(message.content)) return [];
1200
+ const replayChunks = [];
1201
+ for (const block of message.content) {
1202
+ if (!block || typeof block !== "object" || Array.isArray(block)) continue;
1203
+ const typedBlock = block;
1204
+ if (typedBlock.type === "text" && typeof typedBlock.text === "string" && typedBlock.text) {
1205
+ replayChunks.push({
1206
+ sessionUpdate: role === "user" ? "user_message_chunk" : "agent_message_chunk",
1207
+ text: typedBlock.text
1208
+ });
1209
+ continue;
1210
+ }
1211
+ if (role === "assistant" && typedBlock.type === "thinking" && typeof typedBlock.thinking === "string" && typedBlock.thinking) replayChunks.push({
1212
+ sessionUpdate: "agent_thought_chunk",
1213
+ text: typedBlock.thinking
1214
+ });
1215
+ }
1216
+ return replayChunks;
1217
+ }
1218
+ function buildSessionMetadata(params) {
1219
+ return {
1220
+ title: normalizeOptionalString(params.row?.derivedTitle) || normalizeOptionalString(params.row?.displayName) || normalizeOptionalString(params.row?.label) || params.sessionKey,
1221
+ updatedAt: typeof params.row?.updatedAt === "number" && Number.isFinite(params.row.updatedAt) ? new Date(params.row.updatedAt).toISOString() : null
1222
+ };
1223
+ }
1224
+ function buildSessionUsageSnapshot(row) {
1225
+ const totalTokens = row?.totalTokens;
1226
+ const contextTokens = row?.contextTokens;
1227
+ if (row?.totalTokensFresh !== true || typeof totalTokens !== "number" || !Number.isFinite(totalTokens) || typeof contextTokens !== "number" || !Number.isFinite(contextTokens) || contextTokens <= 0) return;
1228
+ const size = Math.max(0, Math.floor(contextTokens));
1229
+ return {
1230
+ size,
1231
+ used: Math.max(0, Math.min(Math.floor(totalTokens), size))
1232
+ };
1233
+ }
1234
+ function buildSystemInputProvenance(originSessionId) {
1235
+ return {
1236
+ kind: "external_user",
1237
+ originSessionId,
1238
+ sourceChannel: "acp",
1239
+ sourceTool: "squidclaw_acp"
1240
+ };
1241
+ }
1242
+ function buildSystemProvenanceReceipt(params) {
1243
+ return [
1244
+ "[Source Receipt]",
1245
+ "bridge=squidclaw-acp",
1246
+ `originHost=${os.hostname()}`,
1247
+ `originCwd=${shortenHomePath(params.cwd)}`,
1248
+ `acpSessionId=${params.sessionId}`,
1249
+ `originSessionId=${params.sessionId}`,
1250
+ `targetSession=${params.sessionKey}`,
1251
+ "[/Source Receipt]"
1252
+ ].join("\n");
1253
+ }
1254
+ var AcpGatewayAgent = class {
1255
+ getPendingPrompt(sessionId, runId) {
1256
+ const pending = this.pendingPrompts.get(sessionId);
1257
+ if (pending?.idempotencyKey !== runId) return;
1258
+ return pending;
1259
+ }
1260
+ constructor(connection, gateway, opts = {}) {
1261
+ this.pendingPrompts = /* @__PURE__ */ new Map();
1262
+ this.disconnectTimer = null;
1263
+ this.activeDisconnectContext = null;
1264
+ this.disconnectGeneration = 0;
1265
+ this.connection = connection;
1266
+ this.gateway = gateway;
1267
+ this.opts = opts;
1268
+ this.log = opts.verbose ? (msg) => process.stderr.write(`[acp] ${msg}\n`) : () => {};
1269
+ this.sessionStore = opts.sessionStore ?? defaultAcpSessionStore;
1270
+ this.sessionCreateRateLimiter = createFixedWindowRateLimiter({
1271
+ maxRequests: Math.max(1, opts.sessionCreateRateLimit?.maxRequests ?? SESSION_CREATE_RATE_LIMIT_DEFAULT_MAX_REQUESTS),
1272
+ windowMs: Math.max(1e3, opts.sessionCreateRateLimit?.windowMs ?? SESSION_CREATE_RATE_LIMIT_DEFAULT_WINDOW_MS)
1273
+ });
1274
+ }
1275
+ start() {
1276
+ this.log("ready");
1277
+ }
1278
+ handleGatewayReconnect() {
1279
+ this.log("gateway reconnected");
1280
+ const disconnectContext = this.activeDisconnectContext;
1281
+ this.activeDisconnectContext = null;
1282
+ if (!disconnectContext) return;
1283
+ this.reconcilePendingPrompts(disconnectContext.generation, false);
1284
+ }
1285
+ handleGatewayDisconnect(reason) {
1286
+ this.log(`gateway disconnected: ${reason}`);
1287
+ const disconnectContext = {
1288
+ generation: this.disconnectGeneration + 1,
1289
+ reason
1290
+ };
1291
+ this.disconnectGeneration = disconnectContext.generation;
1292
+ this.activeDisconnectContext = disconnectContext;
1293
+ if (this.pendingPrompts.size === 0) return;
1294
+ for (const pending of this.pendingPrompts.values()) pending.disconnectContext = disconnectContext;
1295
+ this.armDisconnectTimer(disconnectContext);
1296
+ }
1297
+ async handleGatewayEvent(evt) {
1298
+ if (evt.event === "chat") {
1299
+ await this.handleChatEvent(evt);
1300
+ return;
1301
+ }
1302
+ if (evt.event === "agent") await this.handleAgentEvent(evt);
1303
+ }
1304
+ async initialize(_params) {
1305
+ return {
1306
+ protocolVersion: PROTOCOL_VERSION,
1307
+ agentCapabilities: {
1308
+ loadSession: true,
1309
+ promptCapabilities: {
1310
+ image: true,
1311
+ audio: false,
1312
+ embeddedContext: true
1313
+ },
1314
+ mcpCapabilities: {
1315
+ http: false,
1316
+ sse: false
1317
+ },
1318
+ sessionCapabilities: { list: {} }
1319
+ },
1320
+ agentInfo: ACP_AGENT_INFO,
1321
+ authMethods: []
1322
+ };
1323
+ }
1324
+ async newSession(params) {
1325
+ this.assertSupportedSessionSetup(params.mcpServers);
1326
+ this.enforceSessionCreateRateLimit("newSession");
1327
+ const sessionId = randomUUID();
1328
+ const meta = parseSessionMeta(params._meta);
1329
+ const sessionKey = await this.resolveSessionKeyFromMeta({
1330
+ meta,
1331
+ fallbackKey: `acp:${sessionId}`
1332
+ });
1333
+ const session = this.sessionStore.createSession({
1334
+ sessionId,
1335
+ sessionKey,
1336
+ cwd: params.cwd
1337
+ });
1338
+ this.log(`newSession: ${session.sessionId} -> ${session.sessionKey}`);
1339
+ const sessionSnapshot = await this.getSessionSnapshot(session.sessionKey);
1340
+ await this.sendSessionSnapshotUpdate(session.sessionId, sessionSnapshot, { includeControls: false });
1341
+ await this.sendAvailableCommands(session.sessionId);
1342
+ const { configOptions, modes } = sessionSnapshot;
1343
+ return {
1344
+ sessionId: session.sessionId,
1345
+ configOptions,
1346
+ modes
1347
+ };
1348
+ }
1349
+ async loadSession(params) {
1350
+ this.assertSupportedSessionSetup(params.mcpServers);
1351
+ if (!this.sessionStore.hasSession(params.sessionId)) this.enforceSessionCreateRateLimit("loadSession");
1352
+ const meta = parseSessionMeta(params._meta);
1353
+ const sessionKey = await this.resolveSessionKeyFromMeta({
1354
+ meta,
1355
+ fallbackKey: params.sessionId
1356
+ });
1357
+ const session = this.sessionStore.createSession({
1358
+ sessionId: params.sessionId,
1359
+ sessionKey,
1360
+ cwd: params.cwd
1361
+ });
1362
+ this.log(`loadSession: ${session.sessionId} -> ${session.sessionKey}`);
1363
+ const [sessionSnapshot, transcript] = await Promise.all([this.getSessionSnapshot(session.sessionKey), this.getSessionTranscript(session.sessionKey).catch((err) => {
1364
+ this.log(`session transcript fallback for ${session.sessionKey}: ${String(err)}`);
1365
+ return [];
1366
+ })]);
1367
+ await this.replaySessionTranscript(session.sessionId, transcript);
1368
+ await this.sendSessionSnapshotUpdate(session.sessionId, sessionSnapshot, { includeControls: false });
1369
+ await this.sendAvailableCommands(session.sessionId);
1370
+ const { configOptions, modes } = sessionSnapshot;
1371
+ return {
1372
+ configOptions,
1373
+ modes
1374
+ };
1375
+ }
1376
+ async unstable_listSessions(params) {
1377
+ const limit = readNumber(params._meta, ["limit"]) ?? 100;
1378
+ const result = await this.gateway.request("sessions.list", { limit });
1379
+ const cwd = params.cwd ?? process.cwd();
1380
+ return {
1381
+ sessions: result.sessions.map((session) => ({
1382
+ sessionId: session.key,
1383
+ cwd,
1384
+ title: session.displayName ?? session.label ?? session.key,
1385
+ updatedAt: session.updatedAt ? new Date(session.updatedAt).toISOString() : void 0,
1386
+ _meta: {
1387
+ sessionKey: session.key,
1388
+ kind: session.kind,
1389
+ channel: session.channel
1390
+ }
1391
+ })),
1392
+ nextCursor: null
1393
+ };
1394
+ }
1395
+ async authenticate(_params) {
1396
+ return {};
1397
+ }
1398
+ async setSessionMode(params) {
1399
+ const session = this.sessionStore.getSession(params.sessionId);
1400
+ if (!session) throw new Error(`Session ${params.sessionId} not found`);
1401
+ if (!params.modeId) return {};
1402
+ try {
1403
+ await this.gateway.request("sessions.patch", {
1404
+ key: session.sessionKey,
1405
+ thinkingLevel: params.modeId
1406
+ });
1407
+ this.log(`setSessionMode: ${session.sessionId} -> ${params.modeId}`);
1408
+ const sessionSnapshot = await this.getSessionSnapshot(session.sessionKey, { thinkingLevel: params.modeId });
1409
+ await this.sendSessionSnapshotUpdate(session.sessionId, sessionSnapshot, { includeControls: true });
1410
+ } catch (err) {
1411
+ this.log(`setSessionMode error: ${String(err)}`);
1412
+ throw err instanceof Error ? err : new Error(String(err));
1413
+ }
1414
+ return {};
1415
+ }
1416
+ async setSessionConfigOption(params) {
1417
+ const session = this.sessionStore.getSession(params.sessionId);
1418
+ if (!session) throw new Error(`Session ${params.sessionId} not found`);
1419
+ const sessionPatch = this.resolveSessionConfigPatch(params.configId, params.value);
1420
+ try {
1421
+ await this.gateway.request("sessions.patch", {
1422
+ key: session.sessionKey,
1423
+ ...sessionPatch.patch
1424
+ });
1425
+ this.log(`setSessionConfigOption: ${session.sessionId} -> ${params.configId}=${params.value}`);
1426
+ const sessionSnapshot = await this.getSessionSnapshot(session.sessionKey, sessionPatch.overrides);
1427
+ await this.sendSessionSnapshotUpdate(session.sessionId, sessionSnapshot, { includeControls: true });
1428
+ return { configOptions: sessionSnapshot.configOptions };
1429
+ } catch (err) {
1430
+ this.log(`setSessionConfigOption error: ${String(err)}`);
1431
+ throw err instanceof Error ? err : new Error(String(err));
1432
+ }
1433
+ }
1434
+ async prompt(params) {
1435
+ const session = this.sessionStore.getSession(params.sessionId);
1436
+ if (!session) throw new Error(`Session ${params.sessionId} not found`);
1437
+ if (session.abortController) this.sessionStore.cancelActiveRun(params.sessionId);
1438
+ const meta = parseSessionMeta(params._meta);
1439
+ const userText = extractTextFromPrompt(params.prompt, MAX_PROMPT_BYTES);
1440
+ const attachments = extractAttachmentsFromPrompt(params.prompt);
1441
+ const prefixCwd = meta.prefixCwd ?? this.opts.prefixCwd ?? true;
1442
+ const displayCwd = shortenHomePath(session.cwd);
1443
+ const message = prefixCwd ? `[Working directory: ${displayCwd}]\n\n${userText}` : userText;
1444
+ const provenanceMode = this.opts.provenanceMode ?? "off";
1445
+ const systemInputProvenance = provenanceMode === "off" ? void 0 : buildSystemInputProvenance(params.sessionId);
1446
+ const systemProvenanceReceipt = provenanceMode === "meta+receipt" ? buildSystemProvenanceReceipt({
1447
+ cwd: session.cwd,
1448
+ sessionId: params.sessionId,
1449
+ sessionKey: session.sessionKey
1450
+ }) : void 0;
1451
+ if (Buffer.byteLength(message, "utf-8") > MAX_PROMPT_BYTES) throw new Error(`Prompt exceeds maximum allowed size of ${MAX_PROMPT_BYTES} bytes`);
1452
+ const abortController = new AbortController();
1453
+ const runId = randomUUID();
1454
+ this.sessionStore.setActiveRun(params.sessionId, runId, abortController);
1455
+ const requestParams = {
1456
+ sessionKey: session.sessionKey,
1457
+ message,
1458
+ attachments: attachments.length > 0 ? attachments : void 0,
1459
+ idempotencyKey: runId,
1460
+ thinking: readString(params._meta, ["thinking", "thinkingLevel"]),
1461
+ deliver: readBool(params._meta, ["deliver"]),
1462
+ timeoutMs: readNumber(params._meta, ["timeoutMs"])
1463
+ };
1464
+ return new Promise((resolve, reject) => {
1465
+ this.pendingPrompts.set(params.sessionId, {
1466
+ sessionId: params.sessionId,
1467
+ sessionKey: session.sessionKey,
1468
+ idempotencyKey: runId,
1469
+ disconnectContext: this.activeDisconnectContext ?? void 0,
1470
+ resolve,
1471
+ reject
1472
+ });
1473
+ if (this.activeDisconnectContext && !this.disconnectTimer) this.armDisconnectTimer(this.activeDisconnectContext);
1474
+ const sendWithProvenanceFallback = async () => {
1475
+ try {
1476
+ await this.gateway.request("chat.send", {
1477
+ ...requestParams,
1478
+ systemInputProvenance,
1479
+ systemProvenanceReceipt
1480
+ }, { timeoutMs: null });
1481
+ const pending = this.getPendingPrompt(params.sessionId, runId);
1482
+ if (pending) pending.sendAccepted = true;
1483
+ } catch (err) {
1484
+ if ((systemInputProvenance || systemProvenanceReceipt) && isAdminScopeProvenanceRejection(err)) {
1485
+ await this.gateway.request("chat.send", requestParams, { timeoutMs: null });
1486
+ const pending = this.getPendingPrompt(params.sessionId, runId);
1487
+ if (pending) pending.sendAccepted = true;
1488
+ return;
1489
+ }
1490
+ throw err;
1491
+ }
1492
+ };
1493
+ sendWithProvenanceFallback().catch((err) => {
1494
+ if (isGatewayCloseError(err) && this.getPendingPrompt(params.sessionId, runId)) return;
1495
+ this.pendingPrompts.delete(params.sessionId);
1496
+ this.sessionStore.clearActiveRun(params.sessionId);
1497
+ if (this.pendingPrompts.size === 0) this.clearDisconnectTimer();
1498
+ reject(err instanceof Error ? err : new Error(String(err)));
1499
+ });
1500
+ });
1501
+ }
1502
+ async cancel(params) {
1503
+ const session = this.sessionStore.getSession(params.sessionId);
1504
+ if (!session) return;
1505
+ const activeRunId = session.activeRunId;
1506
+ this.sessionStore.cancelActiveRun(params.sessionId);
1507
+ const pending = this.pendingPrompts.get(params.sessionId);
1508
+ const scopedRunId = activeRunId ?? pending?.idempotencyKey;
1509
+ if (!scopedRunId) return;
1510
+ try {
1511
+ await this.gateway.request("chat.abort", {
1512
+ sessionKey: session.sessionKey,
1513
+ runId: scopedRunId
1514
+ });
1515
+ } catch (err) {
1516
+ this.log(`cancel error: ${String(err)}`);
1517
+ }
1518
+ if (pending) {
1519
+ this.pendingPrompts.delete(params.sessionId);
1520
+ if (this.pendingPrompts.size === 0) this.clearDisconnectTimer();
1521
+ pending.resolve({ stopReason: "cancelled" });
1522
+ }
1523
+ }
1524
+ async resolveSessionKeyFromMeta(params) {
1525
+ const sessionKey = await resolveSessionKey({
1526
+ meta: params.meta,
1527
+ fallbackKey: params.fallbackKey,
1528
+ gateway: this.gateway,
1529
+ opts: this.opts
1530
+ });
1531
+ await resetSessionIfNeeded({
1532
+ meta: params.meta,
1533
+ sessionKey,
1534
+ gateway: this.gateway,
1535
+ opts: this.opts
1536
+ });
1537
+ return sessionKey;
1538
+ }
1539
+ async handleAgentEvent(evt) {
1540
+ const payload = evt.payload;
1541
+ if (!payload) return;
1542
+ const stream = payload.stream;
1543
+ const runId = payload.runId;
1544
+ const data = payload.data;
1545
+ const sessionKey = payload.sessionKey;
1546
+ if (!stream || !data || !sessionKey) return;
1547
+ if (stream !== "tool") return;
1548
+ const phase = data.phase;
1549
+ const name = data.name;
1550
+ const toolCallId = data.toolCallId;
1551
+ if (!toolCallId) return;
1552
+ const pending = this.findPendingBySessionKey(sessionKey, runId);
1553
+ if (!pending) return;
1554
+ if (phase === "start") {
1555
+ if (!pending.toolCalls) pending.toolCalls = /* @__PURE__ */ new Map();
1556
+ if (pending.toolCalls.has(toolCallId)) return;
1557
+ const args = data.args;
1558
+ const title = formatToolTitle(name, args);
1559
+ const kind = inferToolKind(name);
1560
+ const locations = extractToolCallLocations(args);
1561
+ pending.toolCalls.set(toolCallId, {
1562
+ title,
1563
+ kind,
1564
+ rawInput: args,
1565
+ locations
1566
+ });
1567
+ await this.connection.sessionUpdate({
1568
+ sessionId: pending.sessionId,
1569
+ update: {
1570
+ sessionUpdate: "tool_call",
1571
+ toolCallId,
1572
+ title,
1573
+ status: "in_progress",
1574
+ rawInput: args,
1575
+ kind,
1576
+ locations
1577
+ }
1578
+ });
1579
+ return;
1580
+ }
1581
+ if (phase === "update") {
1582
+ const toolState = pending.toolCalls?.get(toolCallId);
1583
+ const partialResult = data.partialResult;
1584
+ await this.connection.sessionUpdate({
1585
+ sessionId: pending.sessionId,
1586
+ update: {
1587
+ sessionUpdate: "tool_call_update",
1588
+ toolCallId,
1589
+ status: "in_progress",
1590
+ rawOutput: partialResult,
1591
+ content: extractToolCallContent(partialResult),
1592
+ locations: extractToolCallLocations(toolState?.locations, partialResult)
1593
+ }
1594
+ });
1595
+ return;
1596
+ }
1597
+ if (phase === "result") {
1598
+ const isError = Boolean(data.isError);
1599
+ const toolState = pending.toolCalls?.get(toolCallId);
1600
+ pending.toolCalls?.delete(toolCallId);
1601
+ await this.connection.sessionUpdate({
1602
+ sessionId: pending.sessionId,
1603
+ update: {
1604
+ sessionUpdate: "tool_call_update",
1605
+ toolCallId,
1606
+ status: isError ? "failed" : "completed",
1607
+ rawOutput: data.result,
1608
+ content: extractToolCallContent(data.result),
1609
+ locations: extractToolCallLocations(toolState?.locations, data.result)
1610
+ }
1611
+ });
1612
+ }
1613
+ }
1614
+ async handleChatEvent(evt) {
1615
+ const payload = evt.payload;
1616
+ if (!payload) return;
1617
+ const sessionKey = payload.sessionKey;
1618
+ const state = payload.state;
1619
+ const runId = payload.runId;
1620
+ const messageData = payload.message;
1621
+ if (!sessionKey || !state) return;
1622
+ const pending = this.findPendingBySessionKey(sessionKey, runId);
1623
+ if (!pending) return;
1624
+ if (messageData && (state === "delta" || state === "final")) {
1625
+ await this.handleDeltaEvent(pending.sessionId, messageData);
1626
+ if (state === "delta") return;
1627
+ }
1628
+ if (state === "final") {
1629
+ const stopReason = payload.stopReason === "max_tokens" ? "max_tokens" : "end_turn";
1630
+ await this.finishPrompt(pending.sessionId, pending, stopReason);
1631
+ return;
1632
+ }
1633
+ if (state === "aborted") {
1634
+ await this.finishPrompt(pending.sessionId, pending, "cancelled");
1635
+ return;
1636
+ }
1637
+ if (state === "error") this.finishPrompt(pending.sessionId, pending, "end_turn");
1638
+ }
1639
+ async handleDeltaEvent(sessionId, messageData) {
1640
+ const content = messageData.content;
1641
+ const pending = this.pendingPrompts.get(sessionId);
1642
+ if (!pending) return;
1643
+ const fullThought = content?.filter((block) => block?.type === "thinking").map((block) => block.thinking ?? "").join("\n").trimEnd();
1644
+ const sentThoughtSoFar = pending.sentThoughtLength ?? 0;
1645
+ if (fullThought && fullThought.length > sentThoughtSoFar) {
1646
+ const newThought = fullThought.slice(sentThoughtSoFar);
1647
+ pending.sentThoughtLength = fullThought.length;
1648
+ pending.sentThought = fullThought;
1649
+ await this.connection.sessionUpdate({
1650
+ sessionId,
1651
+ update: {
1652
+ sessionUpdate: "agent_thought_chunk",
1653
+ content: {
1654
+ type: "text",
1655
+ text: newThought
1656
+ }
1657
+ }
1658
+ });
1659
+ }
1660
+ const fullText = content?.filter((block) => block?.type === "text").map((block) => block.text ?? "").join("\n").trimEnd();
1661
+ const sentSoFar = pending.sentTextLength ?? 0;
1662
+ if (!fullText || fullText.length <= sentSoFar) return;
1663
+ const newText = fullText.slice(sentSoFar);
1664
+ pending.sentTextLength = fullText.length;
1665
+ pending.sentText = fullText;
1666
+ await this.connection.sessionUpdate({
1667
+ sessionId,
1668
+ update: {
1669
+ sessionUpdate: "agent_message_chunk",
1670
+ content: {
1671
+ type: "text",
1672
+ text: newText
1673
+ }
1674
+ }
1675
+ });
1676
+ }
1677
+ async finishPrompt(sessionId, pending, stopReason) {
1678
+ this.pendingPrompts.delete(sessionId);
1679
+ this.sessionStore.clearActiveRun(sessionId);
1680
+ if (this.pendingPrompts.size === 0) this.clearDisconnectTimer();
1681
+ const sessionSnapshot = await this.getSessionSnapshot(pending.sessionKey);
1682
+ try {
1683
+ await this.sendSessionSnapshotUpdate(sessionId, sessionSnapshot, { includeControls: false });
1684
+ } catch (err) {
1685
+ this.log(`session snapshot update failed for ${sessionId}: ${String(err)}`);
1686
+ }
1687
+ pending.resolve({ stopReason });
1688
+ }
1689
+ findPendingBySessionKey(sessionKey, runId) {
1690
+ for (const pending of this.pendingPrompts.values()) {
1691
+ if (pending.sessionKey !== sessionKey) continue;
1692
+ if (runId && pending.idempotencyKey !== runId) continue;
1693
+ return pending;
1694
+ }
1695
+ }
1696
+ clearDisconnectTimer() {
1697
+ if (!this.disconnectTimer) return;
1698
+ clearTimeout(this.disconnectTimer);
1699
+ this.disconnectTimer = null;
1700
+ }
1701
+ armDisconnectTimer(disconnectContext) {
1702
+ this.clearDisconnectTimer();
1703
+ this.disconnectTimer = setTimeout(() => {
1704
+ this.disconnectTimer = null;
1705
+ this.reconcilePendingPrompts(disconnectContext.generation, true);
1706
+ }, ACP_GATEWAY_DISCONNECT_GRACE_MS);
1707
+ this.disconnectTimer.unref?.();
1708
+ }
1709
+ rejectPendingPrompt(pending, error) {
1710
+ if (this.getPendingPrompt(pending.sessionId, pending.idempotencyKey) !== pending) return;
1711
+ this.pendingPrompts.delete(pending.sessionId);
1712
+ this.sessionStore.clearActiveRun(pending.sessionId);
1713
+ if (this.pendingPrompts.size === 0) this.clearDisconnectTimer();
1714
+ pending.reject(error);
1715
+ }
1716
+ clearPendingDisconnectState(pending, disconnectContext) {
1717
+ if (pending.disconnectContext !== disconnectContext) return;
1718
+ pending.disconnectContext = void 0;
1719
+ }
1720
+ shouldRejectPendingAtDisconnectDeadline(pending, disconnectContext) {
1721
+ return pending.disconnectContext === disconnectContext && (!pending.sendAccepted || this.activeDisconnectContext?.generation === disconnectContext.generation);
1722
+ }
1723
+ async reconcilePendingPrompts(observedDisconnectGeneration, deadlineExpired) {
1724
+ if (this.pendingPrompts.size === 0) {
1725
+ if (this.disconnectGeneration === observedDisconnectGeneration) this.clearDisconnectTimer();
1726
+ return;
1727
+ }
1728
+ const pendingEntries = [...this.pendingPrompts.entries()];
1729
+ let keepDisconnectTimer = false;
1730
+ for (const [sessionId, pending] of pendingEntries) {
1731
+ if (this.pendingPrompts.get(sessionId) !== pending) continue;
1732
+ if (pending.disconnectContext?.generation !== observedDisconnectGeneration) continue;
1733
+ if (await this.reconcilePendingPrompt(sessionId, pending, deadlineExpired)) keepDisconnectTimer = true;
1734
+ }
1735
+ if (!keepDisconnectTimer && this.disconnectGeneration === observedDisconnectGeneration) this.clearDisconnectTimer();
1736
+ }
1737
+ async reconcilePendingPrompt(sessionId, pending, deadlineExpired) {
1738
+ const disconnectContext = pending.disconnectContext;
1739
+ if (!disconnectContext) return false;
1740
+ let result;
1741
+ try {
1742
+ result = await this.gateway.request("agent.wait", {
1743
+ runId: pending.idempotencyKey,
1744
+ timeoutMs: 0
1745
+ }, { timeoutMs: null });
1746
+ } catch (err) {
1747
+ this.log(`agent.wait reconcile failed for ${pending.idempotencyKey}: ${String(err)}`);
1748
+ if (deadlineExpired) {
1749
+ if (this.shouldRejectPendingAtDisconnectDeadline(pending, disconnectContext)) {
1750
+ this.rejectPendingPrompt(pending, /* @__PURE__ */ new Error(`Gateway disconnected: ${disconnectContext.reason}`));
1751
+ return false;
1752
+ }
1753
+ this.clearPendingDisconnectState(pending, disconnectContext);
1754
+ return false;
1755
+ }
1756
+ return true;
1757
+ }
1758
+ const currentPending = this.getPendingPrompt(sessionId, pending.idempotencyKey);
1759
+ if (!currentPending) return false;
1760
+ if (result?.status === "ok") {
1761
+ await this.finishPrompt(sessionId, currentPending, "end_turn");
1762
+ return false;
1763
+ }
1764
+ if (result?.status === "error") {
1765
+ this.finishPrompt(sessionId, currentPending, "end_turn");
1766
+ return false;
1767
+ }
1768
+ if (deadlineExpired) {
1769
+ if (this.shouldRejectPendingAtDisconnectDeadline(currentPending, disconnectContext)) {
1770
+ const currentDisconnectContext = currentPending.disconnectContext;
1771
+ if (!currentDisconnectContext) return false;
1772
+ this.rejectPendingPrompt(currentPending, /* @__PURE__ */ new Error(`Gateway disconnected: ${currentDisconnectContext.reason}`));
1773
+ return false;
1774
+ }
1775
+ this.clearPendingDisconnectState(currentPending, disconnectContext);
1776
+ return false;
1777
+ }
1778
+ return true;
1779
+ }
1780
+ async sendAvailableCommands(sessionId) {
1781
+ await this.connection.sessionUpdate({
1782
+ sessionId,
1783
+ update: {
1784
+ sessionUpdate: "available_commands_update",
1785
+ availableCommands: getAvailableCommands()
1786
+ }
1787
+ });
1788
+ }
1789
+ async getSessionSnapshot(sessionKey, overrides) {
1790
+ try {
1791
+ const row = await this.getGatewaySessionRow(sessionKey);
1792
+ return {
1793
+ ...buildSessionPresentation({
1794
+ row,
1795
+ overrides
1796
+ }),
1797
+ metadata: buildSessionMetadata({
1798
+ row,
1799
+ sessionKey
1800
+ }),
1801
+ usage: buildSessionUsageSnapshot(row)
1802
+ };
1803
+ } catch (err) {
1804
+ this.log(`session presentation fallback for ${sessionKey}: ${String(err)}`);
1805
+ return {
1806
+ ...buildSessionPresentation({ overrides }),
1807
+ metadata: buildSessionMetadata({ sessionKey })
1808
+ };
1809
+ }
1810
+ }
1811
+ async getGatewaySessionRow(sessionKey) {
1812
+ const session = (await this.gateway.request("sessions.list", {
1813
+ limit: 200,
1814
+ search: sessionKey,
1815
+ includeDerivedTitles: true
1816
+ })).sessions.find((entry) => entry.key === sessionKey);
1817
+ if (!session) return;
1818
+ return {
1819
+ displayName: session.displayName,
1820
+ label: session.label,
1821
+ derivedTitle: session.derivedTitle,
1822
+ updatedAt: session.updatedAt,
1823
+ thinkingLevel: session.thinkingLevel,
1824
+ modelProvider: session.modelProvider,
1825
+ model: session.model,
1826
+ fastMode: session.fastMode,
1827
+ verboseLevel: session.verboseLevel,
1828
+ reasoningLevel: session.reasoningLevel,
1829
+ responseUsage: session.responseUsage,
1830
+ elevatedLevel: session.elevatedLevel,
1831
+ totalTokens: session.totalTokens,
1832
+ totalTokensFresh: session.totalTokensFresh,
1833
+ contextTokens: session.contextTokens
1834
+ };
1835
+ }
1836
+ resolveSessionConfigPatch(configId, value) {
1837
+ if (typeof value !== "string") throw new Error(`ACP bridge does not support non-string session config option values for "${configId}".`);
1838
+ switch (configId) {
1839
+ case ACP_THOUGHT_LEVEL_CONFIG_ID: return {
1840
+ patch: { thinkingLevel: value },
1841
+ overrides: { thinkingLevel: value }
1842
+ };
1843
+ case ACP_FAST_MODE_CONFIG_ID: return {
1844
+ patch: { fastMode: value === "on" },
1845
+ overrides: { fastMode: value === "on" }
1846
+ };
1847
+ case ACP_VERBOSE_LEVEL_CONFIG_ID: return {
1848
+ patch: { verboseLevel: value },
1849
+ overrides: { verboseLevel: value }
1850
+ };
1851
+ case ACP_REASONING_LEVEL_CONFIG_ID: return {
1852
+ patch: { reasoningLevel: value },
1853
+ overrides: { reasoningLevel: value }
1854
+ };
1855
+ case ACP_RESPONSE_USAGE_CONFIG_ID: return {
1856
+ patch: { responseUsage: value },
1857
+ overrides: { responseUsage: value }
1858
+ };
1859
+ case ACP_ELEVATED_LEVEL_CONFIG_ID: return {
1860
+ patch: { elevatedLevel: value },
1861
+ overrides: { elevatedLevel: value }
1862
+ };
1863
+ default: throw new Error(`ACP bridge mode does not support session config option "${configId}".`);
1864
+ }
1865
+ }
1866
+ async getSessionTranscript(sessionKey) {
1867
+ const result = await this.gateway.request("sessions.get", {
1868
+ key: sessionKey,
1869
+ limit: ACP_LOAD_SESSION_REPLAY_LIMIT
1870
+ });
1871
+ if (!Array.isArray(result.messages)) return [];
1872
+ return result.messages;
1873
+ }
1874
+ async replaySessionTranscript(sessionId, transcript) {
1875
+ for (const message of transcript) {
1876
+ const replayChunks = extractReplayChunks(message);
1877
+ for (const chunk of replayChunks) await this.connection.sessionUpdate({
1878
+ sessionId,
1879
+ update: {
1880
+ sessionUpdate: chunk.sessionUpdate,
1881
+ content: {
1882
+ type: "text",
1883
+ text: chunk.text
1884
+ }
1885
+ }
1886
+ });
1887
+ }
1888
+ }
1889
+ async sendSessionSnapshotUpdate(sessionId, sessionSnapshot, options) {
1890
+ if (options.includeControls) {
1891
+ await this.connection.sessionUpdate({
1892
+ sessionId,
1893
+ update: {
1894
+ sessionUpdate: "current_mode_update",
1895
+ currentModeId: sessionSnapshot.modes.currentModeId
1896
+ }
1897
+ });
1898
+ await this.connection.sessionUpdate({
1899
+ sessionId,
1900
+ update: {
1901
+ sessionUpdate: "config_option_update",
1902
+ configOptions: sessionSnapshot.configOptions
1903
+ }
1904
+ });
1905
+ }
1906
+ if (sessionSnapshot.metadata) await this.connection.sessionUpdate({
1907
+ sessionId,
1908
+ update: {
1909
+ sessionUpdate: "session_info_update",
1910
+ ...sessionSnapshot.metadata
1911
+ }
1912
+ });
1913
+ if (sessionSnapshot.usage) await this.connection.sessionUpdate({
1914
+ sessionId,
1915
+ update: {
1916
+ sessionUpdate: "usage_update",
1917
+ used: sessionSnapshot.usage.used,
1918
+ size: sessionSnapshot.usage.size,
1919
+ _meta: {
1920
+ source: "gateway-session-store",
1921
+ approximate: true
1922
+ }
1923
+ }
1924
+ });
1925
+ }
1926
+ assertSupportedSessionSetup(mcpServers) {
1927
+ if (mcpServers.length === 0) return;
1928
+ throw new Error("ACP bridge mode does not support per-session MCP servers. Configure MCP on the SquidClaw gateway or agent instead.");
1929
+ }
1930
+ enforceSessionCreateRateLimit(method) {
1931
+ const budget = this.sessionCreateRateLimiter.consume();
1932
+ if (budget.allowed) return;
1933
+ throw new Error(`ACP session creation rate limit exceeded for ${method}; retry after ${Math.ceil(budget.retryAfterMs / 1e3)}s.`);
1934
+ }
1935
+ };
1936
+ //#endregion
1937
+ //#region src/acp/server.ts
1938
+ async function serveAcpGateway(opts = {}) {
1939
+ const bootstrap = await resolveGatewayClientBootstrap({
1940
+ config: loadConfig(),
1941
+ gatewayUrl: opts.gatewayUrl,
1942
+ explicitAuth: {
1943
+ token: opts.gatewayToken,
1944
+ password: opts.gatewayPassword
1945
+ },
1946
+ env: process.env
1947
+ });
1948
+ let agent = null;
1949
+ let onClosed;
1950
+ const closed = new Promise((resolve) => {
1951
+ onClosed = resolve;
1952
+ });
1953
+ let stopped = false;
1954
+ let onGatewayReadyResolve;
1955
+ let onGatewayReadyReject;
1956
+ let gatewayReadySettled = false;
1957
+ const gatewayReady = new Promise((resolve, reject) => {
1958
+ onGatewayReadyResolve = resolve;
1959
+ onGatewayReadyReject = reject;
1960
+ });
1961
+ const resolveGatewayReady = () => {
1962
+ if (gatewayReadySettled) return;
1963
+ gatewayReadySettled = true;
1964
+ onGatewayReadyResolve();
1965
+ };
1966
+ const rejectGatewayReady = (err) => {
1967
+ if (gatewayReadySettled) return;
1968
+ gatewayReadySettled = true;
1969
+ onGatewayReadyReject(err instanceof Error ? err : new Error(String(err)));
1970
+ };
1971
+ const gateway = new GatewayClient({
1972
+ url: bootstrap.url,
1973
+ token: bootstrap.auth.token,
1974
+ password: bootstrap.auth.password,
1975
+ clientName: GATEWAY_CLIENT_NAMES.CLI,
1976
+ clientDisplayName: "ACP",
1977
+ clientVersion: "acp",
1978
+ mode: GATEWAY_CLIENT_MODES.CLI,
1979
+ onEvent: (evt) => {
1980
+ agent?.handleGatewayEvent(evt);
1981
+ },
1982
+ onHelloOk: () => {
1983
+ resolveGatewayReady();
1984
+ agent?.handleGatewayReconnect();
1985
+ },
1986
+ onConnectError: (err) => {
1987
+ rejectGatewayReady(err);
1988
+ },
1989
+ onClose: (code, reason) => {
1990
+ if (!stopped) rejectGatewayReady(/* @__PURE__ */ new Error(`gateway closed before ready (${code}): ${reason}`));
1991
+ agent?.handleGatewayDisconnect(`${code}: ${reason}`);
1992
+ if (stopped) onClosed();
1993
+ }
1994
+ });
1995
+ const shutdown = () => {
1996
+ if (stopped) return;
1997
+ stopped = true;
1998
+ resolveGatewayReady();
1999
+ gateway.stop();
2000
+ onClosed();
2001
+ };
2002
+ process.once("SIGINT", shutdown);
2003
+ process.once("SIGTERM", shutdown);
2004
+ gateway.start();
2005
+ await gatewayReady.catch((err) => {
2006
+ shutdown();
2007
+ throw err;
2008
+ });
2009
+ if (stopped) return closed;
2010
+ new AgentSideConnection((conn) => {
2011
+ agent = new AcpGatewayAgent(conn, gateway, opts);
2012
+ agent.start();
2013
+ return agent;
2014
+ }, ndJsonStream(Writable.toWeb(process.stdout), Readable.toWeb(process.stdin)));
2015
+ return closed;
2016
+ }
2017
+ function parseArgs(args) {
2018
+ const opts = {};
2019
+ let tokenFile;
2020
+ let passwordFile;
2021
+ for (let i = 0; i < args.length; i += 1) {
2022
+ const arg = args[i];
2023
+ if (arg === "--url" || arg === "--gateway-url") {
2024
+ opts.gatewayUrl = args[i + 1];
2025
+ i += 1;
2026
+ continue;
2027
+ }
2028
+ if (arg === "--token" || arg === "--gateway-token") {
2029
+ opts.gatewayToken = args[i + 1];
2030
+ i += 1;
2031
+ continue;
2032
+ }
2033
+ if (arg === "--token-file" || arg === "--gateway-token-file") {
2034
+ tokenFile = args[i + 1];
2035
+ i += 1;
2036
+ continue;
2037
+ }
2038
+ if (arg === "--password" || arg === "--gateway-password") {
2039
+ opts.gatewayPassword = args[i + 1];
2040
+ i += 1;
2041
+ continue;
2042
+ }
2043
+ if (arg === "--password-file" || arg === "--gateway-password-file") {
2044
+ passwordFile = args[i + 1];
2045
+ i += 1;
2046
+ continue;
2047
+ }
2048
+ if (arg === "--session") {
2049
+ opts.defaultSessionKey = args[i + 1];
2050
+ i += 1;
2051
+ continue;
2052
+ }
2053
+ if (arg === "--session-label") {
2054
+ opts.defaultSessionLabel = args[i + 1];
2055
+ i += 1;
2056
+ continue;
2057
+ }
2058
+ if (arg === "--require-existing") {
2059
+ opts.requireExistingSession = true;
2060
+ continue;
2061
+ }
2062
+ if (arg === "--reset-session") {
2063
+ opts.resetSession = true;
2064
+ continue;
2065
+ }
2066
+ if (arg === "--no-prefix-cwd") {
2067
+ opts.prefixCwd = false;
2068
+ continue;
2069
+ }
2070
+ if (arg === "--provenance") {
2071
+ const provenanceMode = normalizeAcpProvenanceMode(args[i + 1]);
2072
+ if (!provenanceMode) throw new Error("Invalid --provenance value. Use off, meta, or meta+receipt.");
2073
+ opts.provenanceMode = provenanceMode;
2074
+ i += 1;
2075
+ continue;
2076
+ }
2077
+ if (arg === "--verbose" || arg === "-v") {
2078
+ opts.verbose = true;
2079
+ continue;
2080
+ }
2081
+ if (arg === "--help" || arg === "-h") {
2082
+ printHelp();
2083
+ process.exit(0);
2084
+ }
2085
+ }
2086
+ const gatewayToken = normalizeOptionalString(opts.gatewayToken);
2087
+ const gatewayPassword = normalizeOptionalString(opts.gatewayPassword);
2088
+ const normalizedTokenFile = normalizeOptionalString(tokenFile);
2089
+ const normalizedPasswordFile = normalizeOptionalString(passwordFile);
2090
+ if (gatewayToken && normalizedTokenFile) throw new Error("Use either --token or --token-file.");
2091
+ if (gatewayPassword && normalizedPasswordFile) throw new Error("Use either --password or --password-file.");
2092
+ if (normalizedTokenFile) opts.gatewayToken = readSecretFromFile(normalizedTokenFile, "Gateway token");
2093
+ if (normalizedPasswordFile) opts.gatewayPassword = readSecretFromFile(normalizedPasswordFile, "Gateway password");
2094
+ return opts;
2095
+ }
2096
+ function printHelp() {
2097
+ console.log(`Usage: squidclaw acp [options]
2098
+
2099
+ Gateway-backed ACP server for IDE integration.
2100
+
2101
+ Options:
2102
+ --url <url> Gateway WebSocket URL
2103
+ --token <token> Gateway auth token
2104
+ --token-file <path> Read gateway auth token from file
2105
+ --password <password> Gateway auth password
2106
+ --password-file <path> Read gateway auth password from file
2107
+ --session <key> Default session key (e.g. "agent:main:main")
2108
+ --session-label <label> Default session label to resolve
2109
+ --require-existing Fail if the session key/label does not exist
2110
+ --reset-session Reset the session key before first use
2111
+ --no-prefix-cwd Do not prefix prompts with the working directory
2112
+ --provenance <mode> ACP provenance mode: off, meta, or meta+receipt
2113
+ --verbose, -v Verbose logging to stderr
2114
+ --help, -h Show this help message
2115
+ `);
2116
+ }
2117
+ if (isMainModule({ currentFile: fileURLToPath(import.meta.url) })) {
2118
+ const argv = process.argv.slice(2);
2119
+ if (argv.includes("--token") || argv.includes("--gateway-token")) console.error("Warning: --token can be exposed via process listings. Prefer --token-file or SQUIDCLAW_GATEWAY_TOKEN.");
2120
+ if (argv.includes("--password") || argv.includes("--gateway-password")) console.error("Warning: --password can be exposed via process listings. Prefer --password-file or SQUIDCLAW_GATEWAY_PASSWORD.");
2121
+ serveAcpGateway(parseArgs(argv)).catch((err) => {
2122
+ console.error(String(err));
2123
+ process.exit(1);
2124
+ });
2125
+ }
2126
+ //#endregion
2127
+ //#region src/cli/acp-cli.ts
2128
+ function resolveSecretOption(params) {
2129
+ const direct = normalizeOptionalString(params.direct);
2130
+ const file = normalizeOptionalString(params.file);
2131
+ if (direct && file) throw new Error(`Use either ${params.directFlag} or ${params.fileFlag} for ${params.label}.`);
2132
+ if (file) return readSecretFromFile(file, params.label);
2133
+ return direct || void 0;
2134
+ }
2135
+ function warnSecretCliFlag(flag) {
2136
+ defaultRuntime.error(`Warning: ${flag} can be exposed via process listings. Prefer ${flag}-file or environment variables.`);
2137
+ }
2138
+ function registerAcpCli(program) {
2139
+ const acp = program.command("acp").description("Run an ACP bridge backed by the Gateway");
2140
+ acp.option("--url <url>", "Gateway WebSocket URL (defaults to gateway.remote.url when configured)").option("--token <token>", "Gateway token (if required)").option("--token-file <path>", "Read gateway token from file").option("--password <password>", "Gateway password (if required)").option("--password-file <path>", "Read gateway password from file").option("--session <key>", "Default session key (e.g. agent:main:main)").option("--session-label <label>", "Default session label to resolve").option("--require-existing", "Fail if the session key/label does not exist", false).option("--reset-session", "Reset the session key before first use", false).option("--no-prefix-cwd", "Do not prefix prompts with the working directory", false).option("--provenance <mode>", "ACP provenance mode: off, meta, or meta+receipt").option("-v, --verbose", "Verbose logging to stderr", false).addHelpText("after", () => `\n${theme.muted("Docs:")} ${formatDocsLink("/cli/acp", "docs.squidclaw.ai/cli/acp")}\n`).action(async (opts) => {
2141
+ try {
2142
+ const gatewayToken = resolveSecretOption({
2143
+ direct: opts.token,
2144
+ file: opts.tokenFile,
2145
+ directFlag: "--token",
2146
+ fileFlag: "--token-file",
2147
+ label: "Gateway token"
2148
+ });
2149
+ const gatewayPassword = resolveSecretOption({
2150
+ direct: opts.password,
2151
+ file: opts.passwordFile,
2152
+ directFlag: "--password",
2153
+ fileFlag: "--password-file",
2154
+ label: "Gateway password"
2155
+ });
2156
+ if (opts.token) warnSecretCliFlag("--token");
2157
+ if (opts.password) warnSecretCliFlag("--password");
2158
+ const provenanceMode = normalizeAcpProvenanceMode(opts.provenance);
2159
+ if (opts.provenance && !provenanceMode) throw new Error("Invalid --provenance value. Use off, meta, or meta+receipt.");
2160
+ await serveAcpGateway({
2161
+ gatewayUrl: opts.url,
2162
+ gatewayToken,
2163
+ gatewayPassword,
2164
+ defaultSessionKey: opts.session,
2165
+ defaultSessionLabel: opts.sessionLabel,
2166
+ requireExistingSession: Boolean(opts.requireExisting),
2167
+ resetSession: Boolean(opts.resetSession),
2168
+ prefixCwd: !opts.noPrefixCwd,
2169
+ provenanceMode,
2170
+ verbose: Boolean(opts.verbose)
2171
+ });
2172
+ } catch (err) {
2173
+ defaultRuntime.error(String(err));
2174
+ defaultRuntime.exit(1);
2175
+ }
2176
+ });
2177
+ acp.command("client").description("Run an interactive ACP client against the local ACP bridge").option("--cwd <dir>", "Working directory for the ACP session").option("--server <command>", "ACP server command (default: squidclaw)").option("--server-args <args...>", "Extra arguments for the ACP server").option("--server-verbose", "Enable verbose logging on the ACP server", false).option("-v, --verbose", "Verbose client logging", false).action(async (opts, command) => {
2178
+ const inheritedVerbose = inheritOptionFromParent(command, "verbose");
2179
+ try {
2180
+ await runAcpClientInteractive({
2181
+ cwd: opts.cwd,
2182
+ serverCommand: opts.server,
2183
+ serverArgs: opts.serverArgs,
2184
+ serverVerbose: Boolean(opts.serverVerbose),
2185
+ verbose: Boolean(opts.verbose || inheritedVerbose)
2186
+ });
2187
+ } catch (err) {
2188
+ defaultRuntime.error(String(err));
2189
+ defaultRuntime.exit(1);
2190
+ }
2191
+ });
2192
+ }
2193
+ //#endregion
2194
+ export { registerAcpCli };