silentlake 2026.3.24

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 (1893) hide show
  1. package/CHANGELOG.md +4587 -0
  2. package/LICENSE +21 -0
  3. package/README.md +248 -0
  4. package/assets/avatar-placeholder.svg +19 -0
  5. package/assets/chrome-extension/icons/icon128.png +0 -0
  6. package/assets/chrome-extension/icons/icon16.png +0 -0
  7. package/assets/chrome-extension/icons/icon32.png +0 -0
  8. package/assets/chrome-extension/icons/icon48.png +0 -0
  9. package/assets/dmg-background-small.png +0 -0
  10. package/assets/dmg-background.png +0 -0
  11. package/assets/silentlake-banner.png +0 -0
  12. package/dist/APEv2Parser-BZv_dP9t.js +269 -0
  13. package/dist/APEv2Parser-CPzxFNBB.js +5 -0
  14. package/dist/AbstractID3Parser-mvDFcjYV.js +47 -0
  15. package/dist/AiffParser-BXQ9SRZk.js +145 -0
  16. package/dist/AsfParser-CmBDUlZE.js +631 -0
  17. package/dist/BasicParser-DhmXREDo.js +853 -0
  18. package/dist/DsdiffParser-CTKKGyZg.js +150 -0
  19. package/dist/DsfParser-Ds-YQe4Z.js +101 -0
  20. package/dist/FlacParser-B1XVPgXF.js +5 -0
  21. package/dist/FlacParser-DMPyL1y4.js +367 -0
  22. package/dist/ID3v1Parser-BICWWVDG.js +289 -0
  23. package/dist/ID3v2Parser-BmZHSUqs.js +650 -0
  24. package/dist/ID3v2Token-DeJf4tYQ.js +145 -0
  25. package/dist/MP4Parser-Cjf-Zs8T.js +1061 -0
  26. package/dist/MatroskaParser-DgBzBe8t.js +909 -0
  27. package/dist/MpegParser-D5swTpA1.js +744 -0
  28. package/dist/MusepackParser-D8EQXnpK.js +285 -0
  29. package/dist/OggParser-BcIYPHwP.js +390 -0
  30. package/dist/Util-D_zGsr97.js +170 -0
  31. package/dist/WavPackParser-hosU8gfo.js +166 -0
  32. package/dist/WaveParser-CA00FZrC.js +273 -0
  33. package/dist/abort-cutoff-CERmtgZI.js +56 -0
  34. package/dist/abort-cutoff.runtime-DZkGKKzv.js +61 -0
  35. package/dist/abort-signal-CsrBEr94.js +13 -0
  36. package/dist/account-helpers-D3c_eI7c.js +37 -0
  37. package/dist/account-helpers-ru3jdZSV.js +12 -0
  38. package/dist/account-id-DZnNZg8x.js +1 -0
  39. package/dist/account-id-ZCrgXl7Z.js +44 -0
  40. package/dist/account-lookup-nkoa-foB.js +10 -0
  41. package/dist/account-snapshot-fields-Cvq7803C.js +116 -0
  42. package/dist/account-summary-B5Xzvntm.js +36 -0
  43. package/dist/accounts-43SvCDEA.js +212 -0
  44. package/dist/accounts-CYgFhv2o.js +105 -0
  45. package/dist/accounts-ChlyF7cx.js +112 -0
  46. package/dist/ack-reactions-CNVwfOBj.js +43 -0
  47. package/dist/acp-cli-B4Rv7-xU.js +2033 -0
  48. package/dist/acp-runtime-BdLdT-QY.js +1 -0
  49. package/dist/actions.runtime-CqnQssoB.js +217 -0
  50. package/dist/actions.runtime-FLmCvVRd.js +236 -0
  51. package/dist/agent-CBOdzEvR.js +1 -0
  52. package/dist/agent-scope-BLhzf-o0.js +17 -0
  53. package/dist/agent-scope-DPP4Z_UU.js +193 -0
  54. package/dist/agents-D8pBK0II.js +855 -0
  55. package/dist/agents-Dihz1Ihx.js +323 -0
  56. package/dist/agents.config-C_lrnc9J.js +18 -0
  57. package/dist/agents.config-D1VqC78r.js +121 -0
  58. package/dist/allow-from-BPSBITdd.js +9 -0
  59. package/dist/allow-from-BwTLpvhp.js +20 -0
  60. package/dist/allow-from-C4iBpqFI.js +62 -0
  61. package/dist/allowlist-config-edit-CKbnMmwS.js +279 -0
  62. package/dist/allowlist-match-CYmPgg1K.js +63 -0
  63. package/dist/ansi-BEJF8NKS.js +54 -0
  64. package/dist/anthropic-vertex-provider-Dd5agCN9.js +60 -0
  65. package/dist/apply.runtime-DhKxNSJE.js +370 -0
  66. package/dist/apply.runtime-ghlh-P6X.js +211 -0
  67. package/dist/archive-Tr0wIUO-.js +532 -0
  68. package/dist/arg-split-Dtda0YDl.js +38 -0
  69. package/dist/artifacts-C_4LekPC.js +39 -0
  70. package/dist/audit-BOPSQQtd.js +54 -0
  71. package/dist/audit-C5kdrCi_.js +788 -0
  72. package/dist/audit-channel.allow-from.runtime-B7BHNblL.js +17 -0
  73. package/dist/audit-channel.collect.runtime-CjAbXFBV.js +521 -0
  74. package/dist/audit-channel.discord.runtime-BBY6S9lg.js +5 -0
  75. package/dist/audit-channel.telegram.runtime-SJnxOJH2.js +8 -0
  76. package/dist/audit-channel.zalouser.runtime-SGRWvHxT.js +5 -0
  77. package/dist/audit-extra.async-DY8v7LXH.js +817 -0
  78. package/dist/audit-fs-oDMUa5N_.js +375 -0
  79. package/dist/audit-membership-runtime-BPjFryEx.js +261 -0
  80. package/dist/audit.deep.runtime-WFf-TpsD.js +31 -0
  81. package/dist/audit.nondeep.runtime-B4BaEaRU.js +842 -0
  82. package/dist/audit.runtime-rFjCrods.js +74 -0
  83. package/dist/auth-O6LQFLHJ.js +416 -0
  84. package/dist/auth-choice-DIBaxmAQ.js +219 -0
  85. package/dist/auth-choice-PrbpIjyg.js +610 -0
  86. package/dist/auth-choice-legacy-Clyw2lVc.js +17 -0
  87. package/dist/auth-choice-options-ohUw8QR-.js +127 -0
  88. package/dist/auth-choice-prompt-Cm0s-9Du.js +215 -0
  89. package/dist/auth-choice-prompt-DI-Xl1Nv.js +36 -0
  90. package/dist/auth-choice-rKBOd02a.js +64 -0
  91. package/dist/auth-choice.apply-helpers-BibBSEl9.js +66 -0
  92. package/dist/auth-choice.plugin-providers.runtime-gqF9NO7_.js +219 -0
  93. package/dist/auth-health-TWboMYA5.js +166 -0
  94. package/dist/auth-mode-policy-DywddkT-.js +18 -0
  95. package/dist/auth-profiles-CWEIQV77.js +1047 -0
  96. package/dist/auth-profiles.runtime-B98lwopF.js +48 -0
  97. package/dist/avatar-policy-Ds9e6uHI.js +67 -0
  98. package/dist/axios-xDDnM0KG.js +12831 -0
  99. package/dist/backup-create-B6JAR6jJ.js +461 -0
  100. package/dist/banner-bez5CpOK.js +351 -0
  101. package/dist/base-session-key-Cf2rkwag.js +14 -0
  102. package/dist/bindings-BV4AtNSY.js +21 -0
  103. package/dist/bindings-kjwuC11Q.js +69 -0
  104. package/dist/bluebubbles-C1M3Geg0.js +87 -0
  105. package/dist/bluebubbles-DRW3JdOY.js +603 -0
  106. package/dist/bluebubbles-dEl4QpYz.js +37 -0
  107. package/dist/bonjour-discovery-C2oY96BG.js +376 -0
  108. package/dist/boolean-DKtCJu_W.js +29 -0
  109. package/dist/boolean-param-xAGXUSSN.js +13 -0
  110. package/dist/boundary-file-read-BP6VMpqH.js +106 -0
  111. package/dist/boundary-path-B3FFLYNx.js +557 -0
  112. package/dist/brave-CkimJe4j.js +405 -0
  113. package/dist/brew-DSwWqzLd.js +44 -0
  114. package/dist/browser-cli-D3kBUBNc.js +1502 -0
  115. package/dist/bundled/boot-md/handler.js +381 -0
  116. package/dist/bundled/bootstrap-extra-files/handler.js +56 -0
  117. package/dist/bundled/command-logger/handler.js +62 -0
  118. package/dist/bundled/session-memory/handler.js +401 -0
  119. package/dist/call-BDvaXe4i.js +44 -0
  120. package/dist/call-BmLt3xO1.js +639 -0
  121. package/dist/catalog-BwAYUfL7.js +240 -0
  122. package/dist/channel-BBCuV5OT.js +4945 -0
  123. package/dist/channel-BDBXuqeg.js +321 -0
  124. package/dist/channel-C8h1Irxm.js +1284 -0
  125. package/dist/channel-CbGpFzo4.js +1602 -0
  126. package/dist/channel-Ci3K8fI9.js +1006 -0
  127. package/dist/channel-DGT5N1v7.js +1077 -0
  128. package/dist/channel-account-context-Bwa-YH_o.js +104 -0
  129. package/dist/channel-actions-DU2CR3xW.js +37 -0
  130. package/dist/channel-activity-B8aReQoE.js +35 -0
  131. package/dist/channel-config-3Uv6ve2_.js +115 -0
  132. package/dist/channel-config-helpers-CieQWILI.js +377 -0
  133. package/dist/channel-config-schema-DEVsCZpj.js +1 -0
  134. package/dist/channel-feedback-G6zh8efr.js +245 -0
  135. package/dist/channel-inbound-DwzVf2PK.js +395 -0
  136. package/dist/channel-lifecycle-CpU1dRbh.js +354 -0
  137. package/dist/channel-options-DJaIP4Dv.js +38 -0
  138. package/dist/channel-pairing-D54mn51y.js +66 -0
  139. package/dist/channel-plugin-common-BhTxCE5t.js +1 -0
  140. package/dist/channel-plugin-ids-CFeS3qir.js +26 -0
  141. package/dist/channel-plugin-resolution-DUngfdFj.js +112 -0
  142. package/dist/channel-policy-C4GKHvhz.js +1 -0
  143. package/dist/channel-reply-pipeline-CPTuaW8n.js +15 -0
  144. package/dist/channel-send-result-By8EpCPw.js +40 -0
  145. package/dist/channel-setup-Ck35g7zI.js +49 -0
  146. package/dist/channel-shared-LkXtTPXk.js +308 -0
  147. package/dist/channel-summary-CdYLGMVt.js +137 -0
  148. package/dist/channel-summary-D33z52ft.js +41 -0
  149. package/dist/channel-targets-DfnKGXez.js +87 -0
  150. package/dist/channel.runtime-DAyBR2A5.js +324 -0
  151. package/dist/channel.runtime-DVq5tC2D.js +35 -0
  152. package/dist/channel.runtime-DaLTDGtF.js +288 -0
  153. package/dist/channel.runtime-FKfTev2g.js +512 -0
  154. package/dist/channel.runtime-owqedh1t.js +268 -0
  155. package/dist/channel.runtime-wOTeiifp.js +230 -0
  156. package/dist/channels-CIHgkPea.js +408 -0
  157. package/dist/channels-ZXK6Jiuk.js +1393 -0
  158. package/dist/channels-cli-Bj6qSlkE.js +412 -0
  159. package/dist/channels-status-issues-C_U44M8Y.js +16 -0
  160. package/dist/chat-type-C-n03mQY.js +10 -0
  161. package/dist/clack-prompter-DuzDnaLi.js +112 -0
  162. package/dist/clawbot-cli-YNPuwmTB.js +218 -0
  163. package/dist/cli/daemon-cli.js +88 -0
  164. package/dist/cli-CW46WAZn.js +254 -0
  165. package/dist/cli-name-Daok7A7-.js +25 -0
  166. package/dist/cli-runtime-aAVwbEYy.js +7 -0
  167. package/dist/cli-utils-Np4NAAtt.js +39 -0
  168. package/dist/command-format-CYK9XiUC.js +16 -0
  169. package/dist/command-format-g8YUHNir.js +2 -0
  170. package/dist/command-gating-BQXGSqc9.js +40 -0
  171. package/dist/command-options-5coRiipK.js +25 -0
  172. package/dist/command-poll-backoff-CpkSns-6.js +56 -0
  173. package/dist/command-poll-backoff.runtime-YT6EGcLN.js +7 -0
  174. package/dist/command-registry-BI2MOs89.js +242 -0
  175. package/dist/command-registry-BMsxnuoC.js +14 -0
  176. package/dist/command-secret-gateway-ChXyZwos.js +211 -0
  177. package/dist/command-secret-targets-COcwhn-D.js +88 -0
  178. package/dist/command-secret-targets-CQJT3viO.js +3 -0
  179. package/dist/commands-Bb9xUwz9.js +42 -0
  180. package/dist/commands-core-C1usZXC2.js +4923 -0
  181. package/dist/commands-core.runtime-OTZivlO2.js +232 -0
  182. package/dist/commands-registry-ChCep1KJ.js +295 -0
  183. package/dist/commands-registry.data-XyUTELK9.js +904 -0
  184. package/dist/commands-registry.runtime-m5WTxFtv.js +25 -0
  185. package/dist/commands-status.runtime-C8_hpNgj.js +211 -0
  186. package/dist/commands.runtime-BZPnQKcW.js +232 -0
  187. package/dist/common-CUBlLRXB.js +457 -0
  188. package/dist/compact.runtime-Djmzpbn6.js +216 -0
  189. package/dist/completion-cli-D8tLgE5W.js +445 -0
  190. package/dist/completion-cli-Dz89naVA.js +17 -0
  191. package/dist/config-6sZwvXJD.js +88 -0
  192. package/dist/config-B7tPwoHZ.js +38 -0
  193. package/dist/config-DdDLrP_v.js +273 -0
  194. package/dist/config-cli-C10R8azD.js +945 -0
  195. package/dist/config-guard-B1c73BYQ.js +126 -0
  196. package/dist/config-helpers-3u5wfLBu.js +117 -0
  197. package/dist/config-pn7LKJdW.js +23 -0
  198. package/dist/config-presence-BmUF_5K9.js +79 -0
  199. package/dist/config-regex-CvZFnWkO.js +39 -0
  200. package/dist/config-runtime-CstET7fq.js +142 -0
  201. package/dist/config-schema-5YkIW1xw.js +270 -0
  202. package/dist/config-schema-B1UGMwZ8.js +31 -0
  203. package/dist/config-schema-DzlnsY3D.js +33 -0
  204. package/dist/config-state-CE0CGjey.js +288 -0
  205. package/dist/config-validation-CkVqgkHr.js +272 -0
  206. package/dist/config-value-DgJrpclm.js +25 -0
  207. package/dist/configure-DMkp7Sr4.js +1126 -0
  208. package/dist/configure-DOrQthLy.js +344 -0
  209. package/dist/connection-auth-BSQJeDOU.js +30 -0
  210. package/dist/constants-C_Scc680.js +71 -0
  211. package/dist/control-ui-assets-DjqeIg6A.js +232 -0
  212. package/dist/control-ui-shared-DP000Pxd.js +29 -0
  213. package/dist/conversation-runtime-1O0Aaolb.js +1458 -0
  214. package/dist/core-C7aHA4Aq.js +187 -0
  215. package/dist/core-command-descriptors-DCUYAEZd.js +96 -0
  216. package/dist/credentials-BPwBlm1X.js +265 -0
  217. package/dist/cron-cli-N2Hw_02d.js +579 -0
  218. package/dist/daemon-cli-DgfaF9xx.js +354 -0
  219. package/dist/daemon-install-CbclJo5M.js +134 -0
  220. package/dist/daemon-install-plan.shared-DK6BHlWI.js +222 -0
  221. package/dist/daemon-runtime-CbClrCwc.js +12 -0
  222. package/dist/dangerous-config-flags-BJtLWIk7.js +15 -0
  223. package/dist/dangerous-name-matching-DZa_t0RM.js +44 -0
  224. package/dist/dangerous-tools-yGPDFTHh.js +27 -0
  225. package/dist/date-time-DCAyaBop.js +118 -0
  226. package/dist/dedupe-Cgnk5BbX.js +55 -0
  227. package/dist/defaults-CEdZhIIb.js +6 -0
  228. package/dist/delegate-D4ql5N70.js +43 -0
  229. package/dist/deliver-B004w1Mv.js +212 -0
  230. package/dist/deliver-runtime-IYvc0giI.js +211 -0
  231. package/dist/delivery-queue-B19wDCjT.js +3 -0
  232. package/dist/delivery-queue-DrrqB4Hi.js +299 -0
  233. package/dist/device-auth-GEXe9vqR.js +15 -0
  234. package/dist/device-bootstrap-CwwokLEY.js +96 -0
  235. package/dist/device-bootstrap-Dbhe6oe8.js +1 -0
  236. package/dist/device-metadata-normalization-BDSQ_eA7.js +21 -0
  237. package/dist/device-pairing-cFWbBray.js +553 -0
  238. package/dist/devices-cli-DzycjFzS.js +366 -0
  239. package/dist/diagnostic-DqJXx_4Q.js +310 -0
  240. package/dist/diagnostic-events-ktCoG8Br.js +48 -0
  241. package/dist/diagnostics-CMhyGsPu.js +33 -0
  242. package/dist/diagnostics-DpLHpQ9c.js +14 -0
  243. package/dist/directive-handling.fast-lane-toP_ri_H.js +273 -0
  244. package/dist/directive-handling.impl-BRARyrsT.js +638 -0
  245. package/dist/directive-handling.impl-CUB4MOnK.js +214 -0
  246. package/dist/directive-handling.levels-8vnMeuGX.js +2 -0
  247. package/dist/directive-handling.levels-CoruY1AA.js +13 -0
  248. package/dist/directive-handling.persist.runtime-78Du6PgL.js +170 -0
  249. package/dist/directive-handling.shared-DCGUCHjn.js +147 -0
  250. package/dist/directory-cli-DVsDcgIU.js +437 -0
  251. package/dist/directory-config-helpers-CURJ8mj7.js +129 -0
  252. package/dist/directory-runtime-DhC8QkMq.js +19 -0
  253. package/dist/directory.static-DQaG9ohH.js +44 -0
  254. package/dist/discord-CYj8s73O.js +214 -0
  255. package/dist/discord-L9zvSHVn.js +635 -0
  256. package/dist/discord-core-5tkl-BzP.js +1 -0
  257. package/dist/dm-policy-shared-6bCJzHOS.js +188 -0
  258. package/dist/dns-cli-BMvHy265.js +223 -0
  259. package/dist/docker-XFNiArwM.js +1254 -0
  260. package/dist/docs-cli-BTaH94wD.js +176 -0
  261. package/dist/doctor-completion-DKx5m2UC.js +90 -0
  262. package/dist/doctor-config-preflight-BzQgc3_t.js +40 -0
  263. package/dist/doctor-config-preflight-DxVCut8L.js +150 -0
  264. package/dist/doctor-state-migrations-CTF66iAy.js +732 -0
  265. package/dist/doctor-state-migrations-D0VP4dUh.js +212 -0
  266. package/dist/entry-status-B2OWAf0s.js +172 -0
  267. package/dist/entry.js +210 -0
  268. package/dist/env-BP70DGuy.js +30 -0
  269. package/dist/env-overrides-JneV60sd.js +434 -0
  270. package/dist/env-overrides.runtime-DLrwions.js +18 -0
  271. package/dist/env-substitution-D6t_sLS_.js +136 -0
  272. package/dist/errors-BxyFnvP3.js +58 -0
  273. package/dist/exec-Dmex2w_d.js +310 -0
  274. package/dist/exec-approvals-BJhuySBz.js +386 -0
  275. package/dist/exec-approvals-allowlist-B_wPddCb.js +384 -0
  276. package/dist/exec-approvals-cli-C2dwhSkX.js +427 -0
  277. package/dist/exec-safe-bin-runtime-policy-BZkObC8r.js +89 -0
  278. package/dist/exec-safety-CaaBy-Zw.js +24 -0
  279. package/dist/extension-shared-5txN7IXK.js +74 -0
  280. package/dist/extensionAPI.js +218 -0
  281. package/dist/extensions/amazon-bedrock/index.js +231 -0
  282. package/dist/extensions/anthropic/index.js +330 -0
  283. package/dist/extensions/bluebubbles/index.js +224 -0
  284. package/dist/extensions/bluebubbles/setup-entry.js +289 -0
  285. package/dist/extensions/brave/index.js +23 -0
  286. package/dist/extensions/byteplus/index.js +112 -0
  287. package/dist/extensions/chutes/index.js +221 -0
  288. package/dist/extensions/cloudflare-ai-gateway/index.js +218 -0
  289. package/dist/extensions/copilot-proxy/index.js +125 -0
  290. package/dist/extensions/device-pair/index.js +1040 -0
  291. package/dist/extensions/discord/index.js +215 -0
  292. package/dist/extensions/discord/setup-entry.js +215 -0
  293. package/dist/extensions/elevenlabs/index.js +223 -0
  294. package/dist/extensions/fal/index.js +112 -0
  295. package/dist/extensions/feishu/index.js +227 -0
  296. package/dist/extensions/feishu/setup-entry.js +112 -0
  297. package/dist/extensions/firecrawl/index.js +211 -0
  298. package/dist/extensions/github-copilot/index.js +490 -0
  299. package/dist/extensions/google/index.js +211 -0
  300. package/dist/extensions/huggingface/index.js +108 -0
  301. package/dist/extensions/imessage/index.js +223 -0
  302. package/dist/extensions/imessage/setup-entry.js +220 -0
  303. package/dist/extensions/irc/index.js +220 -0
  304. package/dist/extensions/irc/setup-entry.js +222 -0
  305. package/dist/extensions/kilocode/index.js +282 -0
  306. package/dist/extensions/kimi-coding/index.js +148 -0
  307. package/dist/extensions/line/index.js +57 -0
  308. package/dist/extensions/line/setup-entry.js +49 -0
  309. package/dist/extensions/llm-task/index.js +157 -0
  310. package/dist/extensions/lobster/index.js +261 -0
  311. package/dist/extensions/mattermost/index.js +220 -0
  312. package/dist/extensions/mattermost/setup-entry.js +222 -0
  313. package/dist/extensions/memory-core/index.js +36 -0
  314. package/dist/extensions/microsoft/index.js +223 -0
  315. package/dist/extensions/minimax/index.js +437 -0
  316. package/dist/extensions/mistral/index.js +149 -0
  317. package/dist/extensions/modelstudio/index.js +144 -0
  318. package/dist/extensions/moonshot/index.js +211 -0
  319. package/dist/extensions/nextcloud-talk/index.js +221 -0
  320. package/dist/extensions/nextcloud-talk/setup-entry.js +223 -0
  321. package/dist/extensions/nvidia/index.js +29 -0
  322. package/dist/extensions/ollama/index.js +118 -0
  323. package/dist/extensions/open-prose/index.js +10 -0
  324. package/dist/extensions/openai/index.js +677 -0
  325. package/dist/extensions/opencode/index.js +116 -0
  326. package/dist/extensions/opencode-go/index.js +114 -0
  327. package/dist/extensions/openrouter/index.js +398 -0
  328. package/dist/extensions/openshell/index.js +923 -0
  329. package/dist/extensions/perplexity/index.js +23 -0
  330. package/dist/extensions/phone-control/index.js +276 -0
  331. package/dist/extensions/qianfan/index.js +114 -0
  332. package/dist/extensions/qwen-portal-auth/index.js +350 -0
  333. package/dist/extensions/sglang/index.js +285 -0
  334. package/dist/extensions/signal/index.js +218 -0
  335. package/dist/extensions/signal/setup-entry.js +218 -0
  336. package/dist/extensions/slack/index.js +222 -0
  337. package/dist/extensions/slack/setup-entry.js +220 -0
  338. package/dist/extensions/synology-chat/index.js +56 -0
  339. package/dist/extensions/synology-chat/setup-entry.js +58 -0
  340. package/dist/extensions/synthetic/index.js +112 -0
  341. package/dist/extensions/talk-voice/index.js +197 -0
  342. package/dist/extensions/tavily/index.js +211 -0
  343. package/dist/extensions/telegram/index.js +221 -0
  344. package/dist/extensions/telegram/setup-entry.js +221 -0
  345. package/dist/extensions/thread-ownership/index.js +70 -0
  346. package/dist/extensions/together/index.js +113 -0
  347. package/dist/extensions/venice/index.js +132 -0
  348. package/dist/extensions/vercel-ai-gateway/index.js +86 -0
  349. package/dist/extensions/vllm/index.js +285 -0
  350. package/dist/extensions/voice-call/index.js +5715 -0
  351. package/dist/extensions/volcengine/index.js +112 -0
  352. package/dist/extensions/xai/index.js +211 -0
  353. package/dist/extensions/xiaomi/index.js +115 -0
  354. package/dist/extensions/zai/index.js +559 -0
  355. package/dist/extensions/zalo/index.js +225 -0
  356. package/dist/extensions/zalo/setup-entry.js +226 -0
  357. package/dist/external-content-BUdUOqkv.js +238 -0
  358. package/dist/feishu-CgbwAF0e.js +2664 -0
  359. package/dist/feishu-Dh5fEbh5.js +59127 -0
  360. package/dist/fetch-guard-DIyN1HW5.js +165 -0
  361. package/dist/fetch-timeout-C5xpMuGd.js +36 -0
  362. package/dist/file-identity-Cw0fQxYY.js +11 -0
  363. package/dist/file-lock-WbEmczmY.js +107 -0
  364. package/dist/filter-oMGaNOM1.js +20 -0
  365. package/dist/format-DH8ysi7s.js +19 -0
  366. package/dist/format-datetime-BGS6tLDE.js +73 -0
  367. package/dist/format-duration-CO0BGWB0.js +57 -0
  368. package/dist/format-relative-C3nDxnXz.js +54 -0
  369. package/dist/frontmatter-S5vS-I4a.js +309 -0
  370. package/dist/fs-safe-D3qzH-ab.js +731 -0
  371. package/dist/gateway-cli-PQNp7o0j.js +28378 -0
  372. package/dist/gateway-install-token-DV5KjD4F.js +164 -0
  373. package/dist/gateway-rpc-C0Ey-rik.js +26 -0
  374. package/dist/gateway-runtime-ih2e7a2K.js +42 -0
  375. package/dist/gaxios-fetch-compat-KX6bsqFm.js +165 -0
  376. package/dist/gemini-auth-B5ljg7jr.js +29 -0
  377. package/dist/git-commit-BIdLubm5.js +2 -0
  378. package/dist/git-commit-OvUvjri2.js +177 -0
  379. package/dist/github-copilot-auth-Ccm-cBwy.js +104 -0
  380. package/dist/global-singleton-4KwY5RvX.js +13 -0
  381. package/dist/globals-41sdSaKv.js +38 -0
  382. package/dist/gmail-setup-utils-BX68dZla.js +419 -0
  383. package/dist/group-access-DJZrYPx1.js +113 -0
  384. package/dist/group-keys-BD_IYSMs.js +44 -0
  385. package/dist/group-policy-CWFxv3iB.js +201 -0
  386. package/dist/group-policy-warnings-Ddu6lBkh.js +175 -0
  387. package/dist/health-Bu1sbyYy.js +573 -0
  388. package/dist/health-Cbxc9Bn3.js +59 -0
  389. package/dist/health-format-B5XfOTuJ.js +26 -0
  390. package/dist/heartbeat-7aHh0m3d.js +169 -0
  391. package/dist/heartbeat-summary-Das49TYq.js +57 -0
  392. package/dist/help-CcbF7-ha.js +81 -0
  393. package/dist/help-format-Dv45FpYu.js +15 -0
  394. package/dist/helpers-DJ-5HEbE.js +24 -0
  395. package/dist/helpers-MxyaLZUk.js +32 -0
  396. package/dist/history-CHjo8B5W.js +102 -0
  397. package/dist/hook-runtime-BnNBi_q4.js +1 -0
  398. package/dist/hooks-cli-DUYK4RM1.js +1102 -0
  399. package/dist/hooks-policy-BL6HDLUn.js +20 -0
  400. package/dist/hooks-status-gzNmo3li.js +78 -0
  401. package/dist/host-env-security-BogNN146.js +223 -0
  402. package/dist/http-body-CCiSfloA.js +237 -0
  403. package/dist/http-registry-WFFbLYRd.js +153 -0
  404. package/dist/identity-DovQV4zD.js +112 -0
  405. package/dist/identity-cyBYcoXS.js +84 -0
  406. package/dist/identity-file-EndG1nfc.js +60 -0
  407. package/dist/image-generation-CNKc-mFK.js +441 -0
  408. package/dist/image-kJ7Tbov4.js +211 -0
  409. package/dist/image-ops-j01UkxEv.js +371 -0
  410. package/dist/imessage-B5pSMT47.js +219 -0
  411. package/dist/imessage-CoIuY1Ro.js +1451 -0
  412. package/dist/imessage-Cqjsq4VW.js +190 -0
  413. package/dist/imessage-core-CsYJuaRZ.js +1 -0
  414. package/dist/inbound-envelope-4P3IIJc3.js +61 -0
  415. package/dist/inbound-reply-dispatch-i2Vekqyy.js +72 -0
  416. package/dist/includes-7XyL3p1c.js +188 -0
  417. package/dist/includes-scan-y-rS6tTw.js +55 -0
  418. package/dist/index.js +57 -0
  419. package/dist/infra/warning-filter.js +2 -0
  420. package/dist/inspect-CcxlJ1ba.js +279 -0
  421. package/dist/install-safe-path-Rwbw1XCZ.js +62 -0
  422. package/dist/installs-iHi2aSjM.js +532 -0
  423. package/dist/interactive-F7iY0yED.js +8 -0
  424. package/dist/interactive-runtime-OweOj_Vv.js +90 -0
  425. package/dist/internal-hooks-0uipqzRY.js +156 -0
  426. package/dist/io-BX49DsSJ.js +35 -0
  427. package/dist/io-jOnQRia2.js +7178 -0
  428. package/dist/ip-C8vmzVu0.js +203 -0
  429. package/dist/ipv4-DAmsJVOV.js +82 -0
  430. package/dist/irc-AZ-Ec8be.js +12 -0
  431. package/dist/irc-CCSRuEC2.js +660 -0
  432. package/dist/is-main-YViS6wOn.js +27 -0
  433. package/dist/issue-format-CBEXVico.js +31 -0
  434. package/dist/issue-format-D3HehoKZ.js +4 -0
  435. package/dist/json-file-C2zjA0Gv.js +23 -0
  436. package/dist/json-files-WW-H_psG.js +60 -0
  437. package/dist/json-pointer-f9dEnBoR.js +43 -0
  438. package/dist/json-store-O1LwpnBH.js +37 -0
  439. package/dist/kb-cli-DMZs6PCu.js +65 -0
  440. package/dist/keyed-async-queue-CPUWV5Pm.js +32 -0
  441. package/dist/kill-tree-CbjXBw3z.js +149 -0
  442. package/dist/kilocode-shared-DS7_0IMs.js +29 -0
  443. package/dist/launchd-tyqGVx9U.js +491 -0
  444. package/dist/lazy-runtime-BcXbyAaC.js +1 -0
  445. package/dist/lazy-runtime-bWkd2cs3.js +29 -0
  446. package/dist/legacy-names-CUNZ4vHN.js +7 -0
  447. package/dist/legacy-web-search-BgZjNG2h.js +222 -0
  448. package/dist/lib-CERS7N4b.js +503 -0
  449. package/dist/lib-PPICrHv1.js +1938 -0
  450. package/dist/library-CZ461krl.js +211 -0
  451. package/dist/lifecycle-core-Dnxnw0oy.js +382 -0
  452. package/dist/line/accounts.js +10 -0
  453. package/dist/line/send.js +39 -0
  454. package/dist/line/template-messages.js +2 -0
  455. package/dist/line-CJSvwApm.js +1 -0
  456. package/dist/line-N9vL-2JB.js +688 -0
  457. package/dist/line-core-BOIxkjgu.js +1 -0
  458. package/dist/links-Bilm-v0z.js +13 -0
  459. package/dist/llm-slug-generator-BuAuQ5Ft.js +68 -0
  460. package/dist/llm-slug-generator.js +212 -0
  461. package/dist/llm-task-Dx8ymRFr.js +1 -0
  462. package/dist/local-roots-DAzCjWbC.js +34 -0
  463. package/dist/location-DefAH9WS.js +42 -0
  464. package/dist/logger-CoEtkjhn.js +550 -0
  465. package/dist/logger-Cqy7-Maj.js +70 -0
  466. package/dist/logging-B2wMcpWV.js +13 -0
  467. package/dist/logging-Bz1qZDPg.js +16 -0
  468. package/dist/logging-CArEWRgI.js +36 -0
  469. package/dist/logging-CbTTfADU.js +1 -0
  470. package/dist/logs-cli-BSjKwaur.js +261 -0
  471. package/dist/magic-string.es-DJPWMt-n.js +1011 -0
  472. package/dist/main-session-DKr0lBVk.js +36 -0
  473. package/dist/manager-ChTGDe87.js +2005 -0
  474. package/dist/manager-DuwFn87U.js +4226 -0
  475. package/dist/manager-runtime-E16jsvRe.js +59 -0
  476. package/dist/manager.runtime-F9F1eFiB.js +827 -0
  477. package/dist/manifest-registry-B90TyTWl.js +1350 -0
  478. package/dist/map-size-CMTQVKUV.js +15 -0
  479. package/dist/markdown-to-line-BWwaRx5F.js +640 -0
  480. package/dist/mask-api-key-CprzEe7l.js +10 -0
  481. package/dist/matrix-DzvdUw97.js +228 -0
  482. package/dist/matrix-migration-snapshot-adoDbNii.js +702 -0
  483. package/dist/mattermost-DO0BCfF3.js +1 -0
  484. package/dist/mattermost-SjOt4QDb.js +15 -0
  485. package/dist/mcp-cli-BC_VPl_o.js +94 -0
  486. package/dist/mcp-config-Coky4zS4.js +108 -0
  487. package/dist/media-limits-Cuvmmhop.js +14 -0
  488. package/dist/media-understanding-DD2uMjK8.js +48 -0
  489. package/dist/media-understanding.runtime-Kbb2bRmk.js +216 -0
  490. package/dist/memory-DBjQ0TPd.js +1 -0
  491. package/dist/memory-cli-Cm4Df0hJ.js +215 -0
  492. package/dist/memory-cli-yzqneSF8.js +541 -0
  493. package/dist/memory-search-Das1tiuB.js +204 -0
  494. package/dist/memory-search-DxmSTjHq.js +18 -0
  495. package/dist/mention-gating-B_q-EHFx.js +25 -0
  496. package/dist/mentions-Bxys_va0.js +154 -0
  497. package/dist/message-channel-Cy-gN4K2.js +106 -0
  498. package/dist/message-hook-mappers-BBTV3JRQ.js +249 -0
  499. package/dist/method-scopes-DgypDW23.js +2649 -0
  500. package/dist/mime-C4vVTBso.js +150 -0
  501. package/dist/minimal-C5yUxtHy.js +2120 -0
  502. package/dist/model-auth-B__TJTPw.js +309 -0
  503. package/dist/model-auth-env-CF9ts7Th.js +111 -0
  504. package/dist/model-catalog.runtime-CWh17vcc.js +211 -0
  505. package/dist/model-id-normalization-Y-MIsyK_.js +16 -0
  506. package/dist/model-input-BB2wSAHb.js +20 -0
  507. package/dist/model-overrides-sIzKU2wo.js +84 -0
  508. package/dist/model-param-b-DIFEhICm.js +15 -0
  509. package/dist/model-picker-CAPjetT3.js +400 -0
  510. package/dist/model-picker-DEw9viWc.js +215 -0
  511. package/dist/model-picker.runtime-ixYl7lB5.js +224 -0
  512. package/dist/model-selection-BTpJnslv.js +437 -0
  513. package/dist/model-selection-Ci9cPkL2.js +765 -0
  514. package/dist/model-suppression.runtime-D8cIb6Y5.js +216 -0
  515. package/dist/models-BQtc3khN.js +226 -0
  516. package/dist/models-CQgBV5dW.js +2536 -0
  517. package/dist/models-cli-DbQ-QpQk.js +418 -0
  518. package/dist/models-config-D2xK-G6c.js +211 -0
  519. package/dist/models-config.providers.discovery-BaIk1NKL.js +141 -0
  520. package/dist/models-config.runtime-Cf7q9uAQ.js +211 -0
  521. package/dist/monitor-B5QmKaD7.js +3272 -0
  522. package/dist/monitor-CL5OYLih.js +878 -0
  523. package/dist/monitor-CNZxrM4d.js +3145 -0
  524. package/dist/monitor-CyQVZdDh.js +223 -0
  525. package/dist/multimodal-DC43jYNv.js +75 -0
  526. package/dist/mutable-allowlist-detectors-C6EAzWYE.js +62 -0
  527. package/dist/net-DlJFp95v.js +270 -0
  528. package/dist/network-mode-DOgvmom4.js +17 -0
  529. package/dist/nextcloud-talk-ChMP88s-.js +12 -0
  530. package/dist/nextcloud-talk-CwnkUy8E.js +1 -0
  531. package/dist/node-cli-BZDC7rXg.js +2484 -0
  532. package/dist/node-command-policy-Bg2g6Xjp.js +192 -0
  533. package/dist/node-commands-B6W6Eo0b.js +11 -0
  534. package/dist/node-require-BgDD9bTi.js +14 -0
  535. package/dist/node-resolve-BunMro3f.js +69 -0
  536. package/dist/node-service-CEZZaqba.js +65 -0
  537. package/dist/node-startup-env-Gz8ZQniA.js +50 -0
  538. package/dist/nodes-cli-B4Jr9vct.js +1330 -0
  539. package/dist/nodes-screen-CQ7IvP62.js +401 -0
  540. package/dist/normalize-secret-input-_PgpexOG.js +32 -0
  541. package/dist/note-dfjacCV8.js +109 -0
  542. package/dist/npm-pack-install-CYNRv-vM.js +574 -0
  543. package/dist/npm-resolution-Ml2aA6Nu.js +60 -0
  544. package/dist/oauth.runtime-DA_48MPQ.js +687 -0
  545. package/dist/oauth.runtime-DS1ry5__.js +318 -0
  546. package/dist/oauth.runtime-qCkidk8J.js +180 -0
  547. package/dist/ollama-defaults-asNuGW4_.js +4 -0
  548. package/dist/onboard-BM6gO6Uw.js +589 -0
  549. package/dist/onboard-D9IU-7uw.js +48 -0
  550. package/dist/onboard-DQaHGPRm.js +25 -0
  551. package/dist/onboard-channels-BdQtLjYb.js +300 -0
  552. package/dist/onboard-channels-DIVUygs5.js +1257 -0
  553. package/dist/onboard-config-DFKb-0sE.js +29 -0
  554. package/dist/onboard-config-DYykzJhx.js +2 -0
  555. package/dist/onboard-custom-CDP4w1AT.js +216 -0
  556. package/dist/onboard-custom-DhJN13UV.js +644 -0
  557. package/dist/onboard-helpers-B7XTd4Pw.js +335 -0
  558. package/dist/onboard-helpers-BUKtx5Bq.js +54 -0
  559. package/dist/onboard-hooks-BHSSLAhI.js +73 -0
  560. package/dist/onboard-remote-BOzEPdHA.js +59 -0
  561. package/dist/onboard-remote-DVza19_k.js +182 -0
  562. package/dist/onboard-search-CrS-n9_3.js +446 -0
  563. package/dist/onboard-skills-BojzIPvk.js +133 -0
  564. package/dist/onboard-skills-D7HyCVjz.js +69 -0
  565. package/dist/openai-codex-provider.runtime-BFsopDHI.js +2 -0
  566. package/dist/openai-defaults-B7FUywsh.js +10 -0
  567. package/dist/openclaw-exec-env-AcZ9we1N.js +14 -0
  568. package/dist/openclaw-root-TUHYdr9B.js +88 -0
  569. package/dist/openclaw-tools.runtime-draZJo5r.js +211 -0
  570. package/dist/outbound-media-69yrWRDt.js +11 -0
  571. package/dist/outbound-runtime-ic_7ulJJ.js +1 -0
  572. package/dist/pairing-challenge-CNrPmmi9.js +48 -0
  573. package/dist/pairing-cli-BohXW2BK.js +150 -0
  574. package/dist/pairing-labels-CNKCSmBK.js +7 -0
  575. package/dist/pairing-message-CBv2njJT.js +4 -0
  576. package/dist/pairing-store-C4lsd4pO.js +590 -0
  577. package/dist/pairing-token-gKj4SNFJ.js +55 -0
  578. package/dist/parse-duration-BBGYkY0S.js +41 -0
  579. package/dist/parse-finite-number-CP4MQF_w.js +30 -0
  580. package/dist/parse-log-line-CVh9zu3Q.js +43 -0
  581. package/dist/parse-port-COyt3COn.js +8 -0
  582. package/dist/path-alias-guards-ZTKqurNH.js +40 -0
  583. package/dist/path-env-CPkz6U0Y.js +87 -0
  584. package/dist/paths-CTjJI9l0.js +179 -0
  585. package/dist/paths-GHJ97ebE.js +268 -0
  586. package/dist/paths-nCHyK08H.js +56 -0
  587. package/dist/perplexity-Beshd9zu.js +422 -0
  588. package/dist/persistent-dedupe-bjKjVI5u.js +116 -0
  589. package/dist/pi-embedded-CSQySvOV.js +168518 -0
  590. package/dist/pi-model-discovery-CuX5CDyZ.js +125 -0
  591. package/dist/pi-model-discovery-runtime-DNsMrX1n.js +44 -0
  592. package/dist/pi-tools.before-tool-call.runtime-DxVqzMVf.js +387 -0
  593. package/dist/platform-launcher-CqGy6UhP.js +83 -0
  594. package/dist/plugin-entry-CwuwM1jC.js +17 -0
  595. package/dist/plugin-install-JJwfOXtg.js +216 -0
  596. package/dist/plugin-install-plan-cixz1_W4.js +49 -0
  597. package/dist/plugin-install-vkpI1UNd.js +184 -0
  598. package/dist/plugin-registry-C3j_DUnj.js +51 -0
  599. package/dist/plugin-registry-DB_yxabS.js +213 -0
  600. package/dist/plugin-sdk/account-helpers.js +3 -0
  601. package/dist/plugin-sdk/account-id.js +2 -0
  602. package/dist/plugin-sdk/account-resolution.js +216 -0
  603. package/dist/plugin-sdk/acp-runtime.js +46 -0
  604. package/dist/plugin-sdk/agent-runtime.js +215 -0
  605. package/dist/plugin-sdk/allow-from.js +17 -0
  606. package/dist/plugin-sdk/allowlist-config-edit.js +2 -0
  607. package/dist/plugin-sdk/bluebubbles.js +232 -0
  608. package/dist/plugin-sdk/boolean-param.js +2 -0
  609. package/dist/plugin-sdk/channel-actions.js +16 -0
  610. package/dist/plugin-sdk/channel-config-helpers.js +15 -0
  611. package/dist/plugin-sdk/channel-config-schema.js +5 -0
  612. package/dist/plugin-sdk/channel-contract.js +1 -0
  613. package/dist/plugin-sdk/channel-feedback.js +4 -0
  614. package/dist/plugin-sdk/channel-inbound.js +53 -0
  615. package/dist/plugin-sdk/channel-lifecycle.js +2 -0
  616. package/dist/plugin-sdk/channel-pairing.js +2 -0
  617. package/dist/plugin-sdk/channel-policy.js +19 -0
  618. package/dist/plugin-sdk/channel-reply-pipeline.js +23 -0
  619. package/dist/plugin-sdk/channel-runtime.js +33 -0
  620. package/dist/plugin-sdk/channel-send-result.js +2 -0
  621. package/dist/plugin-sdk/channel-setup.js +24 -0
  622. package/dist/plugin-sdk/channel-targets.js +3 -0
  623. package/dist/plugin-sdk/cli-runtime.js +5 -0
  624. package/dist/plugin-sdk/command-auth.js +212 -0
  625. package/dist/plugin-sdk/compat.js +59 -0
  626. package/dist/plugin-sdk/config-runtime.js +51 -0
  627. package/dist/plugin-sdk/conversation-runtime.js +55 -0
  628. package/dist/plugin-sdk/core.js +40 -0
  629. package/dist/plugin-sdk/device-bootstrap.js +6 -0
  630. package/dist/plugin-sdk/diagnostics-otel.js +7 -0
  631. package/dist/plugin-sdk/diffs.js +3 -0
  632. package/dist/plugin-sdk/directory-runtime.js +5 -0
  633. package/dist/plugin-sdk/discord-core.js +26 -0
  634. package/dist/plugin-sdk/discord.js +219 -0
  635. package/dist/plugin-sdk/extension-shared.js +15 -0
  636. package/dist/plugin-sdk/feishu.js +101 -0
  637. package/dist/plugin-sdk/gateway-runtime.js +46 -0
  638. package/dist/plugin-sdk/googlechat.js +93 -0
  639. package/dist/plugin-sdk/group-access.js +2 -0
  640. package/dist/plugin-sdk/hook-runtime.js +12 -0
  641. package/dist/plugin-sdk/image-generation.js +51 -0
  642. package/dist/plugin-sdk/imessage-core.js +214 -0
  643. package/dist/plugin-sdk/imessage.js +223 -0
  644. package/dist/plugin-sdk/index.js +55 -0
  645. package/dist/plugin-sdk/infra-runtime.js +223 -0
  646. package/dist/plugin-sdk/interactive-runtime.js +3 -0
  647. package/dist/plugin-sdk/irc.js +232 -0
  648. package/dist/plugin-sdk/json-store.js +9 -0
  649. package/dist/plugin-sdk/keyed-async-queue.js +2 -0
  650. package/dist/plugin-sdk/lazy-runtime.js +2 -0
  651. package/dist/plugin-sdk/line-core.js +29 -0
  652. package/dist/plugin-sdk/line.js +22 -0
  653. package/dist/plugin-sdk/llm-task.js +7 -0
  654. package/dist/plugin-sdk/matrix-runtime-heavy.js +223 -0
  655. package/dist/plugin-sdk/matrix-runtime-shared.js +2 -0
  656. package/dist/plugin-sdk/matrix.js +84 -0
  657. package/dist/plugin-sdk/mattermost.js +233 -0
  658. package/dist/plugin-sdk/media-runtime.js +212 -0
  659. package/dist/plugin-sdk/media-understanding-runtime.js +211 -0
  660. package/dist/plugin-sdk/media-understanding.js +15 -0
  661. package/dist/plugin-sdk/memory-core.js +2 -0
  662. package/dist/plugin-sdk/memory-lancedb.js +2 -0
  663. package/dist/plugin-sdk/msteams.js +244 -0
  664. package/dist/plugin-sdk/nextcloud-talk.js +231 -0
  665. package/dist/plugin-sdk/nostr.js +50 -0
  666. package/dist/plugin-sdk/ollama-setup.js +33 -0
  667. package/dist/plugin-sdk/outbound-runtime.js +23 -0
  668. package/dist/plugin-sdk/plugin-entry.js +3 -0
  669. package/dist/plugin-sdk/plugin-runtime.js +211 -0
  670. package/dist/plugin-sdk/process-runtime.js +12 -0
  671. package/dist/plugin-sdk/provider-auth-api-key.js +53 -0
  672. package/dist/plugin-sdk/provider-auth-login.js +2 -0
  673. package/dist/plugin-sdk/provider-auth.js +37 -0
  674. package/dist/plugin-sdk/provider-catalog.js +2 -0
  675. package/dist/plugin-sdk/provider-env-vars.js +2 -0
  676. package/dist/plugin-sdk/provider-google.js +3 -0
  677. package/dist/plugin-sdk/provider-models.js +27 -0
  678. package/dist/plugin-sdk/provider-onboard.js +20 -0
  679. package/dist/plugin-sdk/provider-setup.js +58 -0
  680. package/dist/plugin-sdk/provider-stream.js +211 -0
  681. package/dist/plugin-sdk/provider-usage.js +18 -0
  682. package/dist/plugin-sdk/provider-web-search.js +23 -0
  683. package/dist/plugin-sdk/provider-zai-endpoint.js +3 -0
  684. package/dist/plugin-sdk/reply-history.js +23 -0
  685. package/dist/plugin-sdk/reply-payload.js +2 -0
  686. package/dist/plugin-sdk/reply-runtime.js +211 -0
  687. package/dist/plugin-sdk/request-url.js +2 -0
  688. package/dist/plugin-sdk/routing.js +25 -0
  689. package/dist/plugin-sdk/runtime-env.js +15 -0
  690. package/dist/plugin-sdk/runtime-store.js +2 -0
  691. package/dist/plugin-sdk/runtime.js +15 -0
  692. package/dist/plugin-sdk/sandbox.js +66 -0
  693. package/dist/plugin-sdk/secret-input.js +3 -0
  694. package/dist/plugin-sdk/security-runtime.js +18 -0
  695. package/dist/plugin-sdk/self-hosted-provider-setup.js +33 -0
  696. package/dist/plugin-sdk/setup-adapter-runtime.js +2 -0
  697. package/dist/plugin-sdk/setup-runtime.js +17 -0
  698. package/dist/plugin-sdk/setup-tools.js +21 -0
  699. package/dist/plugin-sdk/setup.js +26 -0
  700. package/dist/plugin-sdk/signal.js +220 -0
  701. package/dist/plugin-sdk/slack-core.js +22 -0
  702. package/dist/plugin-sdk/slack.js +223 -0
  703. package/dist/plugin-sdk/speech-runtime.js +213 -0
  704. package/dist/plugin-sdk/speech.js +212 -0
  705. package/dist/plugin-sdk/ssrf-runtime.js +5 -0
  706. package/dist/plugin-sdk/state-paths.js +3 -0
  707. package/dist/plugin-sdk/status-helpers.js +9 -0
  708. package/dist/plugin-sdk/telegram-core.js +23 -0
  709. package/dist/plugin-sdk/telegram.js +224 -0
  710. package/dist/plugin-sdk/testing.js +13174 -0
  711. package/dist/plugin-sdk/text-runtime.js +45 -0
  712. package/dist/plugin-sdk/thread-bindings-runtime.js +2 -0
  713. package/dist/plugin-sdk/thread-ownership.js +2 -0
  714. package/dist/plugin-sdk/tlon.js +57 -0
  715. package/dist/plugin-sdk/tool-send.js +2 -0
  716. package/dist/plugin-sdk/twitch.js +46 -0
  717. package/dist/plugin-sdk/voice-call.js +213 -0
  718. package/dist/plugin-sdk/web-media.js +28 -0
  719. package/dist/plugin-sdk/webhook-ingress.js +7 -0
  720. package/dist/plugin-sdk/webhook-path.js +2 -0
  721. package/dist/plugin-sdk/whatsapp-core.js +219 -0
  722. package/dist/plugin-sdk/whatsapp-shared.js +18 -0
  723. package/dist/plugin-sdk/windows-spawn.js +2 -0
  724. package/dist/plugin-sdk/zalo.js +239 -0
  725. package/dist/plugin-sdk/zalouser.js +240 -0
  726. package/dist/plugins/build-smoke-entry.js +211 -0
  727. package/dist/plugins/runtime/index.js +229 -0
  728. package/dist/plugins-1Z50ecJ6.js +1 -0
  729. package/dist/plugins-C6fKmNuA.js +7 -0
  730. package/dist/plugins-cli-BkgQkGaU.js +1192 -0
  731. package/dist/policy-CpkbSAfm.js +60 -0
  732. package/dist/polls-B2VH7SN9.js +35 -0
  733. package/dist/ports-BjWuIIQw.js +262 -0
  734. package/dist/ports-DFiK_Jc-.js +385 -0
  735. package/dist/ports-lsof-DtJqhFOr.js +25 -0
  736. package/dist/ports-probe-BQqp8l8E.js +14 -0
  737. package/dist/preflight-audio.runtime-Fi9mofpp.js +216 -0
  738. package/dist/probe-BM9sbCgS.js +20 -0
  739. package/dist/probe-DLBOZftS.js +134 -0
  740. package/dist/probe-auth-Bjp3G4CI.js +48 -0
  741. package/dist/probe-auth-DMSPTRRk.js +45 -0
  742. package/dist/process-runtime-C7el-Ri4.js +1 -0
  743. package/dist/process-scoped-map-C4gOa-gv.js +61 -0
  744. package/dist/profile-utils-BcMYGFPT.js +15 -0
  745. package/dist/profiles-D17eMKQZ.js +683 -0
  746. package/dist/program-Ch-76sgl.js +155 -0
  747. package/dist/program-context-BMWNUfqL.js +10 -0
  748. package/dist/program-context-CD_RvRYh.js +2 -0
  749. package/dist/progress-D1r9bZU1.js +132 -0
  750. package/dist/prompt-select-styled-NUKYS9QR.js +4879 -0
  751. package/dist/prompt-style-BvciNCqy.js +7 -0
  752. package/dist/prompts-NtuylUyl.js +9 -0
  753. package/dist/prototype-keys-Cm_8mWvq.js +11 -0
  754. package/dist/provider-api-key-auth-BE0taXiB.js +108 -0
  755. package/dist/provider-api-key-auth.runtime-jDZZUAMX.js +34 -0
  756. package/dist/provider-auth-Bw8x1a3o.js +58 -0
  757. package/dist/provider-auth-api-key-BrQYvdxi.js +1 -0
  758. package/dist/provider-auth-choice-BYbPq0eC.js +128 -0
  759. package/dist/provider-auth-choice-helpers-Bj1GkOSn.js +48 -0
  760. package/dist/provider-auth-choice-preference-tKq5gaJL.js +192 -0
  761. package/dist/provider-auth-choice.runtime-DegPpvRJ.js +223 -0
  762. package/dist/provider-auth-choices-QSilukI1.js +58 -0
  763. package/dist/provider-auth-guidance-gninjjq8.js +34 -0
  764. package/dist/provider-auth-helpers-B0dS-1WK.js +86 -0
  765. package/dist/provider-auth-input-BftBdgvW.js +112 -0
  766. package/dist/provider-auth-login-D0n0lMuc.js +8 -0
  767. package/dist/provider-auth-login.runtime-LvuBkQrc.js +243 -0
  768. package/dist/provider-auth-mode-sTdccIKL.js +20 -0
  769. package/dist/provider-auth-ref-BS3gwrNr.js +168 -0
  770. package/dist/provider-auth-ref-BmEcEN7K.js +3 -0
  771. package/dist/provider-catalog--18-pW5t.js +11 -0
  772. package/dist/provider-catalog-2P2hel74.js +48 -0
  773. package/dist/provider-catalog-B0FqWSwe.js +48 -0
  774. package/dist/provider-catalog-BvORKzzD.js +91 -0
  775. package/dist/provider-catalog-C34j1_or.js +26 -0
  776. package/dist/provider-catalog-C5vmXjmb.js +11 -0
  777. package/dist/provider-catalog-CBufm2Dr.js +36 -0
  778. package/dist/provider-catalog-D7QvsUXS.js +12 -0
  779. package/dist/provider-catalog-DKy_dzQZ.js +41 -0
  780. package/dist/provider-env-vars-CsQlY7bF.js +110 -0
  781. package/dist/provider-id-BpXo5t6v.js +31 -0
  782. package/dist/provider-model-allowlist-4HSOnlX-.js +24 -0
  783. package/dist/provider-model-primary-NJ-xlhec.js +53 -0
  784. package/dist/provider-models-C2EjYMwW.js +2416 -0
  785. package/dist/provider-oauth-flow-BQN6F6EC.js +33 -0
  786. package/dist/provider-ollama-setup-DhQvDwAj.js +309 -0
  787. package/dist/provider-onboard-CjOfyeQG.js +1 -0
  788. package/dist/provider-onboarding-config-DOZ3pFA6.js +165 -0
  789. package/dist/provider-openai-codex-oauth-tls-Bo8U4D3E.js +101 -0
  790. package/dist/provider-runtime.runtime-DnP2jpoM.js +211 -0
  791. package/dist/provider-self-hosted-setup-CUrmsugW.js +182 -0
  792. package/dist/provider-usage-ClDVmkhl.js +633 -0
  793. package/dist/provider-usage-DIC6cn-3.js +211 -0
  794. package/dist/provider-web-search-NzK8ep1E.js +507 -0
  795. package/dist/provider-wizard-C6jCuyQe.js +236 -0
  796. package/dist/provider-zai-endpoint-DeDABzT4.js +106 -0
  797. package/dist/proxy-H5O2p6AP.js +121 -0
  798. package/dist/proxy-env-DG2u55RW.js +40 -0
  799. package/dist/push-apns-D4zD2tmP.js +1050 -0
  800. package/dist/pw-ai-BuPUVeUK.js +1876 -0
  801. package/dist/qmd-manager-BpygGMW9.js +1571 -0
  802. package/dist/qr-cli-DnWHXcxh.js +370 -0
  803. package/dist/qr-cli-yaZ0FZ6z.js +213 -0
  804. package/dist/query-expansion-Do45hILP.js +1114 -0
  805. package/dist/reactions-BcC_XZqD.js +281 -0
  806. package/dist/read-only-account-inspect-DPJzadPo.js +42 -0
  807. package/dist/read-only-account-inspect.discord.runtime-CW9DDKH8.js +216 -0
  808. package/dist/read-only-account-inspect.slack.runtime-BcXBPyh3.js +216 -0
  809. package/dist/read-only-account-inspect.telegram.runtime-Y7h0Jbdj.js +216 -0
  810. package/dist/redact-BDinS1q9.js +102 -0
  811. package/dist/redact-identifier-FUiWQxv5.js +13 -0
  812. package/dist/redact-snapshot-DBPmeYy2.js +2654 -0
  813. package/dist/ref-contract-CCBBbf1r.js +53 -0
  814. package/dist/register-CppP7Ddc.js +43 -0
  815. package/dist/register.agent-BOD5ROGQ.js +546 -0
  816. package/dist/register.backup-Y2VGqcRu.js +269 -0
  817. package/dist/register.configure-1qiTINph.js +354 -0
  818. package/dist/register.maintenance-shn-zigv.js +694 -0
  819. package/dist/register.message-mR4CLSoo.js +812 -0
  820. package/dist/register.onboard-CkDryVid.js +298 -0
  821. package/dist/register.setup-B0xW5olD.js +318 -0
  822. package/dist/register.status-health-sessions-CuhWc03j.js +604 -0
  823. package/dist/register.subclis-BazXM5TW.js +315 -0
  824. package/dist/register.subclis-C2d8UDhH.js +13 -0
  825. package/dist/registry-C3q59Qj0.js +55 -0
  826. package/dist/registry-CPsHw6xU.js +219 -0
  827. package/dist/registry-CxgtJ09C.js +28 -0
  828. package/dist/registry-rgYi7KoO.js +160 -0
  829. package/dist/repair-qXnOAvDy.js +105 -0
  830. package/dist/replies-EiwmmZ_W.js +122 -0
  831. package/dist/reply-history-CVCD5oE9.js +1 -0
  832. package/dist/reply-payload-DBGc074f.js +232 -0
  833. package/dist/report-cli-DB1jQx32.js +42 -0
  834. package/dist/request-url-BKfWAQx8.js +10 -0
  835. package/dist/resolve-Ckjd8TAk.js +14 -0
  836. package/dist/resolve-T2q_0ARF.js +619 -0
  837. package/dist/resolve-route-vEY3ONZ2.js +466 -0
  838. package/dist/resolve-utils-CbqJY2bs.js +102 -0
  839. package/dist/response-generator-VdoCcQ3y.js +153 -0
  840. package/dist/restart-stale-pids-CLGiqU2E.js +187 -0
  841. package/dist/retry-D15TD1S3.js +168 -0
  842. package/dist/root-help-B9Aou4ho.js +32 -0
  843. package/dist/routes-TpLEcKO8.js +7084 -0
  844. package/dist/routing-Y3m0o-kB.js +26 -0
  845. package/dist/rpc-C6MN-nVc.js +67 -0
  846. package/dist/run-command-DRKv5Lj6.js +32 -0
  847. package/dist/run-main-YZSMdx0B.js +424 -0
  848. package/dist/run-with-concurrency-BrSjWzpg.js +41 -0
  849. package/dist/runtime-B66W9flm.js +43 -0
  850. package/dist/runtime-C9VaVKYZ.js +2338 -0
  851. package/dist/runtime-CT2LIJZu.js +91 -0
  852. package/dist/runtime-CqDQ81eY.js +143 -0
  853. package/dist/runtime-CuvWMN7E.js +89 -0
  854. package/dist/runtime-D4_OpzA1.js +5 -0
  855. package/dist/runtime-DP-4DZja.js +5 -0
  856. package/dist/runtime-Dl17x_cV.js +1 -0
  857. package/dist/runtime-Z35JoYPC.js +30 -0
  858. package/dist/runtime-api-D79M0lQN.js +1 -0
  859. package/dist/runtime-api-y3zfnQGK.js +39 -0
  860. package/dist/runtime-discord-ops.runtime-Bg5h5v9-.js +234 -0
  861. package/dist/runtime-env-a_iwdJIv.js +1 -0
  862. package/dist/runtime-forwarders-DtMc8rBP.js +44 -0
  863. package/dist/runtime-group-policy-B7irU4eu.js +59 -0
  864. package/dist/runtime-guard-y62lPDGY.js +58 -0
  865. package/dist/runtime-parse-CeqXmZHJ.js +84 -0
  866. package/dist/runtime-paths-CstaCCMi.js +334 -0
  867. package/dist/runtime-slack-ops.runtime-BumgKDhS.js +226 -0
  868. package/dist/runtime-status-CgL02wYX.js +15 -0
  869. package/dist/runtime-store-Bt3Sdbrn.js +22 -0
  870. package/dist/runtime-telegram-ops.runtime-rSLQ3KrE.js +233 -0
  871. package/dist/runtime-whatsapp-boundary-xZem0NyQ.js +364 -0
  872. package/dist/safe-open-sync-Bt9R1Mnf.js +83 -0
  873. package/dist/safe-regex-tLlDZYfM.js +244 -0
  874. package/dist/safe-text-B_CQuica.js +16 -0
  875. package/dist/sandbox-CUUouiKs.js +2795 -0
  876. package/dist/sandbox-cli-BN8y0Get.js +499 -0
  877. package/dist/sandbox-paths-fqp_TZdO.js +144 -0
  878. package/dist/sandbox-qSs4h3sk.js +1 -0
  879. package/dist/sanitize-env-vars-vNSNqm0y.js +74 -0
  880. package/dist/scan-paths-BJmvUZ1E.js +28 -0
  881. package/dist/search-manager-DWhFgwyp.js +17 -0
  882. package/dist/search-manager-r8Cw4ZRv.js +392 -0
  883. package/dist/secret-equal-ObQfyZGa.js +9 -0
  884. package/dist/secret-file-Ch0yuOXR.js +11 -0
  885. package/dist/secret-file-DYJtH6kf.js +92 -0
  886. package/dist/secret-input-4REZ4sHo.js +35 -0
  887. package/dist/secrets-cli-D1df8b0o.js +2304 -0
  888. package/dist/secure-random-Cs8tw_HQ.js +10 -0
  889. package/dist/security-cli-V66ESmdT.js +676 -0
  890. package/dist/security-runtime-BuEhpJVE.js +23 -0
  891. package/dist/send-3tabvle6.js +100 -0
  892. package/dist/send-CC5J3tyW.js +1026 -0
  893. package/dist/send-deps-CrFMNvqO.js +19 -0
  894. package/dist/send-i2-mdtiE.js +250 -0
  895. package/dist/server-BTOjmlyi.js +116 -0
  896. package/dist/server-middleware-CCqKhKUb.js +106 -0
  897. package/dist/server-node-events-D6y22Tt8.js +611 -0
  898. package/dist/server-startup-matrix-migration-DHWSoS73.js +1595 -0
  899. package/dist/service-Bxc9uL2e.js +774 -0
  900. package/dist/service-CBLajPZL.js +21 -0
  901. package/dist/session-cost-usage-BmbaBvk4.js +212 -0
  902. package/dist/session-cost-usage-C30Jl2SI.js +615 -0
  903. package/dist/session-fork.runtime-BZfcC1Nc.js +51 -0
  904. package/dist/session-key-gFFk3uv9.js +216 -0
  905. package/dist/session-write-lock-DNKvpjKf.js +324 -0
  906. package/dist/sessions-BIH_j_XS.js +222 -0
  907. package/dist/sessions-D5dWcxC_.js +212 -0
  908. package/dist/sessions-DaSBVNwD.js +669 -0
  909. package/dist/setup-C2XF1YH3.js +397 -0
  910. package/dist/setup-CN-teRpz.js +8 -0
  911. package/dist/setup-adapter-runtime-Bjv2adwG.js +1 -0
  912. package/dist/setup-binary-BOJA7zdN.js +30 -0
  913. package/dist/setup-browser-BhNPCUtK.js +71 -0
  914. package/dist/setup-core-BsG09DZH.js +149 -0
  915. package/dist/setup-core-D-O1GQax.js +162 -0
  916. package/dist/setup-core-Dtm54Rcq.js +510 -0
  917. package/dist/setup-entry-B1mTa7bU.js +10 -0
  918. package/dist/setup-entry-CTMgw-K5.js +13 -0
  919. package/dist/setup-entry-Cmd_cufO.js +13 -0
  920. package/dist/setup-entry-CybgA3zP.js +12 -0
  921. package/dist/setup-entry-DED_hL6i.js +12 -0
  922. package/dist/setup-entry-WCq9VMWx.js +14 -0
  923. package/dist/setup-group-access-BtPApRvE.js +70 -0
  924. package/dist/setup-helpers-B62Ecg9r.js +362 -0
  925. package/dist/setup-surface-B7A7qowY.js +452 -0
  926. package/dist/setup-surface-BBYJVRXc.js +380 -0
  927. package/dist/setup-surface-CFUz_BJi.js +298 -0
  928. package/dist/setup-tools-BPiMjAN7.js +1 -0
  929. package/dist/setup-wizard-helpers-COZ1UAdX.js +770 -0
  930. package/dist/setup-wizard-proxy-Slwi-1gX.js +116 -0
  931. package/dist/setup.finalize-B8O01nge.js +633 -0
  932. package/dist/setup.gateway-config-BPDIFk__.js +288 -0
  933. package/dist/setup.secret-input-BL-bqJpt.js +25 -0
  934. package/dist/shared-AygSbeCK.js +50 -0
  935. package/dist/shared-BHqDLkMG.js +127 -0
  936. package/dist/shared-BPtG8PgB.js +70 -0
  937. package/dist/shared-BU0QgVMZ.js +36 -0
  938. package/dist/shared-Bzr2UyEm.js +351 -0
  939. package/dist/shared-C_XXbGIF.js +87 -0
  940. package/dist/shared-Diw3KzwZ.js +82 -0
  941. package/dist/shared-DngjQumT.js +196 -0
  942. package/dist/shared-DzH3zmAy.js +64 -0
  943. package/dist/shared-LeP8iUTz.js +54 -0
  944. package/dist/shell-argv-DWV43Vya.js +72 -0
  945. package/dist/shell-env-cD92jEyV.js +181 -0
  946. package/dist/signal-BQd9f9dF.js +315 -0
  947. package/dist/signal-Ca7y47bM.js +46 -0
  948. package/dist/signal-Did9U_fa.js +214 -0
  949. package/dist/signal-cli-install-DxoL8CgF.js +188 -0
  950. package/dist/skill-commands-CiSwTFBQ.js +652 -0
  951. package/dist/skill-commands.runtime-CEwlWT4j.js +34 -0
  952. package/dist/skill-scanner-DG7MT7pu.js +354 -0
  953. package/dist/skills-BC8GJ9Rp.js +22 -0
  954. package/dist/skills-CCgKs_NJ.js +863 -0
  955. package/dist/skills-cli-dhYXJCuL.js +339 -0
  956. package/dist/skills-install-DiriUXJd.js +763 -0
  957. package/dist/skills-status-BmQTn4jL.js +23 -0
  958. package/dist/skills-status-a9b899Y3.js +169 -0
  959. package/dist/slack-CXgv7nu7.js +730 -0
  960. package/dist/slack-CcSByPzI.js +217 -0
  961. package/dist/slack-CtcCh0Lj.js +24537 -0
  962. package/dist/slack-core-DcsbATUs.js +1 -0
  963. package/dist/slash-commands.runtime-kO8EUKYW.js +228 -0
  964. package/dist/slash-dispatch.runtime-Bu2yMeFy.js +238 -0
  965. package/dist/slash-skill-commands.runtime-wwX3tF84.js +216 -0
  966. package/dist/speech-bSreRuDH.js +1 -0
  967. package/dist/speech-runtime-y1FcnGVA.js +1 -0
  968. package/dist/src-CmXHIz5f.js +846 -0
  969. package/dist/ssh-config-ChqR6ijV.js +77 -0
  970. package/dist/ssh-tunnel-Cz51VBAt.js +159 -0
  971. package/dist/ssh-tunnel-DWze2IQS.js +16 -0
  972. package/dist/ssrf-Dk9XaoKN.js +220 -0
  973. package/dist/ssrf-policy-Dk6oMa20.js +69 -0
  974. package/dist/ssrf-runtime-C-mAQLVA.js +1 -0
  975. package/dist/stagger-DU7FjHYo.js +54 -0
  976. package/dist/state-paths-DJIGEFq_.js +1 -0
  977. package/dist/status-69r8-Zey.js +75 -0
  978. package/dist/status-BdLTvZOL.js +44 -0
  979. package/dist/status-Bt7DQmRI.js +1665 -0
  980. package/dist/status-CoUFSBgt.js +202 -0
  981. package/dist/status-DbI3Kbh5.js +235 -0
  982. package/dist/status-DeKlzu_o.js +212 -0
  983. package/dist/status-Haie42Fc.js +606 -0
  984. package/dist/status-helpers-Cda-rGLX.js +101 -0
  985. package/dist/status-json-DS1M_MWJ.js +322 -0
  986. package/dist/status.link-channel-Cb8bZ_Od.js +40 -0
  987. package/dist/status.scan.deps.runtime-7_6VUs50.js +77 -0
  988. package/dist/status.scan.runtime-DtR8BIE9.js +14 -0
  989. package/dist/status.summary-l_Bi1buR.js +600 -0
  990. package/dist/status.summary.runtime-Cng6MzRU.js +151 -0
  991. package/dist/status.update-DtbnnPKx.js +79 -0
  992. package/dist/store-CvL8MPei.js +1446 -0
  993. package/dist/store.runtime-hgnvmZgO.js +43 -0
  994. package/dist/string-normalization-CvzuCAZv.js +19 -0
  995. package/dist/string-sample-BOLqzr4Y.js +11 -0
  996. package/dist/subagent-orphan-recovery-si1z2iBu.js +407 -0
  997. package/dist/subagent-registry-runtime-CXUDI8gL.js +211 -0
  998. package/dist/subcli-descriptors-CY_nHzpZ.js +151 -0
  999. package/dist/subsystem-CUp-6QQf.js +421 -0
  1000. package/dist/synology-chat-CdejNfs0.js +12 -0
  1001. package/dist/system-cli-DkOaXHkQ.js +99 -0
  1002. package/dist/system-events-mAu6Ap6K.js +75 -0
  1003. package/dist/system-message-DA9eUYzB.js +16 -0
  1004. package/dist/system-run-command-Cxq2F1MB.js +258 -0
  1005. package/dist/systemd-CrxZBFae.js +557 -0
  1006. package/dist/systemd-hints-y-zJ9aTm.js +315 -0
  1007. package/dist/systemd-linger-BdklDcLg.js +16 -0
  1008. package/dist/systemd-linger-DLrbG9_d.js +68 -0
  1009. package/dist/table-DFMOhmNZ.js +305 -0
  1010. package/dist/tailnet-ofqBrXzu.js +38 -0
  1011. package/dist/tailscale-Cbsx-2HB.js +254 -0
  1012. package/dist/target-errors-ksphhzJg.js +26 -0
  1013. package/dist/target-registry-krAVlXi_.js +1321 -0
  1014. package/dist/telegram/audit.js +2 -0
  1015. package/dist/telegram/token.js +211 -0
  1016. package/dist/telegram-BjDUP22F.js +10910 -0
  1017. package/dist/telegram-DMiNSGAJ.js +575 -0
  1018. package/dist/telegram-Dt11B3JL.js +218 -0
  1019. package/dist/telegram-core-B4Jo-uko.js +1 -0
  1020. package/dist/template-messages-kh7VfgOb.js +214 -0
  1021. package/dist/text-chunking-CUf5WgqG.js +19 -0
  1022. package/dist/text-format-sFXlJfHH.js +8 -0
  1023. package/dist/text-runtime-C_Roi_Je.js +1418 -0
  1024. package/dist/theme-B5HDbQfl.js +2 -0
  1025. package/dist/theme-CdOoMzRk.js +34 -0
  1026. package/dist/thinking-BBD_0HSp.js +68 -0
  1027. package/dist/thinking.shared-CncvRHts.js +246 -0
  1028. package/dist/thread-bindings-messages-Cdo8jSa9.js +229 -0
  1029. package/dist/thread-bindings-policy-DMjOaNyR.js +119 -0
  1030. package/dist/thread-bindings-runtime-Ckwk3Uuz.js +1 -0
  1031. package/dist/threading-helpers-Cq55SUtb.js +14 -0
  1032. package/dist/timeouts-BwR1sGom.js +72 -0
  1033. package/dist/tmp-openclaw-dir-idKIOMmb.js +102 -0
  1034. package/dist/token-Bgv8XEsC.js +50 -0
  1035. package/dist/tool-catalog-BV6FcEWS.js +337 -0
  1036. package/dist/tool-policy-match-CHqTCSdK.js +46 -0
  1037. package/dist/tool-send-9LXKcrda.js +16 -0
  1038. package/dist/topology-cli-BhUXVViF.js +43 -0
  1039. package/dist/transcript-events-B1V6z5ct.js +29 -0
  1040. package/dist/tui-DDJMGCFK.js +3838 -0
  1041. package/dist/tui-cli-ByN-ZH6y.js +237 -0
  1042. package/dist/typebox-D0SHDJST.js +175 -0
  1043. package/dist/types-BCKGVVld.js +83 -0
  1044. package/dist/types-CtpUGsDP.js +30 -0
  1045. package/dist/types.secrets-BWSeXrF4.js +80 -0
  1046. package/dist/types.tools-BBO8HCi6.js +22 -0
  1047. package/dist/typing-DG_YqWJ7.js +224 -0
  1048. package/dist/unhandled-rejections-CDJ8dOVP.js +170 -0
  1049. package/dist/unhandled-rejections-O6cVOz2D.js +4 -0
  1050. package/dist/update-Br8U-txJ.js +1039 -0
  1051. package/dist/update-check-C3TeQaWg.js +464 -0
  1052. package/dist/update-cli-XHfIntD0.js +1625 -0
  1053. package/dist/update-offset-store-36vzzZXw.js +211 -0
  1054. package/dist/upsert-with-lock-Bb96JHpb.js +34 -0
  1055. package/dist/url-userinfo-Db63ng4y.js +14 -0
  1056. package/dist/utils-Bxk6BLTg.js +236 -0
  1057. package/dist/utils-vDeUf98G.js +7 -0
  1058. package/dist/version-DCY9_obP.js +64 -0
  1059. package/dist/version-DRF-wKTV.js +2 -0
  1060. package/dist/voice-call-D4fgwZNO.js +1 -0
  1061. package/dist/warning-filter-CgvLQB4Y.js +56 -0
  1062. package/dist/web-media-BfBb8i48.js +1 -0
  1063. package/dist/web-media-CtU6jM5V.js +498 -0
  1064. package/dist/webhook-ingress-CupqYpKM.js +338 -0
  1065. package/dist/webhook-memory-guards-BHrFZ4yq.js +129 -0
  1066. package/dist/webhook-path-BGFZ55ML.js +22 -0
  1067. package/dist/webhook-shared-Cvk3b0ac.js +349 -0
  1068. package/dist/webhooks-cli-vOAoBF9b.js +357 -0
  1069. package/dist/whatsapp-D5nD0rGG.js +58 -0
  1070. package/dist/whatsapp-DXbWlm3A.js +82 -0
  1071. package/dist/whatsapp-core-C2WGMsaY.js +89451 -0
  1072. package/dist/whatsapp-heartbeat-CSWnPQ7q.js +84 -0
  1073. package/dist/whatsapp-shared-BmHKqTtR.js +95 -0
  1074. package/dist/widearea-dns-CXimgJzu.js +125 -0
  1075. package/dist/windows-argv-IXrdWrJj.js +145 -0
  1076. package/dist/windows-spawn-vMJGZo89.js +154 -0
  1077. package/dist/with-timeout-2AKTISee.js +58 -0
  1078. package/dist/workspace-BH7CXmrr.js +479 -0
  1079. package/dist/workspace-dirs-_O4V3xCR.js +13 -0
  1080. package/dist/workspace-v5XppK5M.js +302 -0
  1081. package/dist/ws-By-QcLjg.js +11 -0
  1082. package/dist/wsl-BV3Cb66X.js +57 -0
  1083. package/dist/zalo-CHQzsLhE.js +301 -0
  1084. package/dist/zalo-CcJ3J9f2.js +13 -0
  1085. package/dist/zod-schema.agent-runtime-T_EC_6fg.js +600 -0
  1086. package/dist/zod-schema.core-BdgRr-F1.js +545 -0
  1087. package/dist/zod-schema.providers-core-Dgq7MTqU.js +1613 -0
  1088. package/docs/.i18n/README.md +31 -0
  1089. package/docs/.i18n/glossary.ja-JP.json +14 -0
  1090. package/docs/.i18n/glossary.zh-CN.json +242 -0
  1091. package/docs/.i18n/ja-JP.tm.jsonl +0 -0
  1092. package/docs/assets/install-script.svg +1 -0
  1093. package/docs/assets/macos-onboarding/01-macos-warning.jpeg +0 -0
  1094. package/docs/assets/macos-onboarding/02-local-networks.jpeg +0 -0
  1095. package/docs/assets/macos-onboarding/03-security-notice.png +0 -0
  1096. package/docs/assets/macos-onboarding/04-choose-gateway.png +0 -0
  1097. package/docs/assets/macos-onboarding/05-permissions.png +0 -0
  1098. package/docs/assets/openclaw-logo-text-dark.png +0 -0
  1099. package/docs/assets/openclaw-logo-text-dark.svg +418 -0
  1100. package/docs/assets/openclaw-logo-text.png +0 -0
  1101. package/docs/assets/openclaw-logo-text.svg +418 -0
  1102. package/docs/assets/pixel-lobster.svg +60 -0
  1103. package/docs/assets/showcase/agents-ui.jpg +0 -0
  1104. package/docs/assets/showcase/bambu-cli.png +0 -0
  1105. package/docs/assets/showcase/codexmonitor.png +0 -0
  1106. package/docs/assets/showcase/gohome-grafana.png +0 -0
  1107. package/docs/assets/showcase/ios-testflight.jpg +0 -0
  1108. package/docs/assets/showcase/oura-health.png +0 -0
  1109. package/docs/assets/showcase/padel-cli.svg +11 -0
  1110. package/docs/assets/showcase/padel-screenshot.jpg +0 -0
  1111. package/docs/assets/showcase/papla-tts.jpg +0 -0
  1112. package/docs/assets/showcase/pr-review-telegram.jpg +0 -0
  1113. package/docs/assets/showcase/roborock-screenshot.jpg +0 -0
  1114. package/docs/assets/showcase/roborock-status.svg +13 -0
  1115. package/docs/assets/showcase/roof-camera-sky.jpg +0 -0
  1116. package/docs/assets/showcase/snag.png +0 -0
  1117. package/docs/assets/showcase/tesco-shop.jpg +0 -0
  1118. package/docs/assets/showcase/wienerlinien.png +0 -0
  1119. package/docs/assets/showcase/wine-cellar-skill.jpg +0 -0
  1120. package/docs/assets/showcase/winix-air-purifier.jpg +0 -0
  1121. package/docs/assets/showcase/xuezh-pronunciation.jpeg +0 -0
  1122. package/docs/assets/sponsors/blacksmith.svg +14 -0
  1123. package/docs/assets/sponsors/convex.svg +16 -0
  1124. package/docs/assets/sponsors/openai.svg +3 -0
  1125. package/docs/assets/sponsors/vercel.svg +5 -0
  1126. package/docs/auth-credential-semantics.md +53 -0
  1127. package/docs/automation/auth-monitoring.md +44 -0
  1128. package/docs/automation/cron-jobs.md +727 -0
  1129. package/docs/automation/cron-vs-heartbeat.md +286 -0
  1130. package/docs/automation/gmail-pubsub.md +256 -0
  1131. package/docs/automation/hooks.md +1049 -0
  1132. package/docs/automation/poll.md +86 -0
  1133. package/docs/automation/standing-orders.md +251 -0
  1134. package/docs/automation/troubleshooting.md +122 -0
  1135. package/docs/automation/webhook.md +217 -0
  1136. package/docs/brave-search.md +93 -0
  1137. package/docs/channels/bluebubbles.md +347 -0
  1138. package/docs/channels/broadcast-groups.md +442 -0
  1139. package/docs/channels/channel-routing.md +139 -0
  1140. package/docs/channels/discord.md +1229 -0
  1141. package/docs/channels/feishu.md +747 -0
  1142. package/docs/channels/googlechat.md +261 -0
  1143. package/docs/channels/group-messages.md +84 -0
  1144. package/docs/channels/groups.md +379 -0
  1145. package/docs/channels/imessage.md +367 -0
  1146. package/docs/channels/index.md +47 -0
  1147. package/docs/channels/irc.md +242 -0
  1148. package/docs/channels/line.md +194 -0
  1149. package/docs/channels/location.md +56 -0
  1150. package/docs/channels/matrix.md +677 -0
  1151. package/docs/channels/mattermost.md +427 -0
  1152. package/docs/channels/msteams.md +780 -0
  1153. package/docs/channels/nextcloud-talk.md +138 -0
  1154. package/docs/channels/nostr.md +242 -0
  1155. package/docs/channels/pairing.md +114 -0
  1156. package/docs/channels/signal.md +329 -0
  1157. package/docs/channels/slack.md +603 -0
  1158. package/docs/channels/synology-chat.md +132 -0
  1159. package/docs/channels/telegram.md +987 -0
  1160. package/docs/channels/tlon.md +276 -0
  1161. package/docs/channels/troubleshooting.md +118 -0
  1162. package/docs/channels/twitch.md +379 -0
  1163. package/docs/channels/whatsapp.md +460 -0
  1164. package/docs/channels/zalo.md +243 -0
  1165. package/docs/channels/zalouser.md +181 -0
  1166. package/docs/ci.md +55 -0
  1167. package/docs/cli/acp.md +288 -0
  1168. package/docs/cli/agent.md +29 -0
  1169. package/docs/cli/agents.md +123 -0
  1170. package/docs/cli/approvals.md +50 -0
  1171. package/docs/cli/backup.md +76 -0
  1172. package/docs/cli/browser.md +106 -0
  1173. package/docs/cli/channels.md +102 -0
  1174. package/docs/cli/clawbot.md +21 -0
  1175. package/docs/cli/completion.md +35 -0
  1176. package/docs/cli/config.md +295 -0
  1177. package/docs/cli/configure.md +36 -0
  1178. package/docs/cli/cron.md +77 -0
  1179. package/docs/cli/daemon.md +53 -0
  1180. package/docs/cli/dashboard.md +22 -0
  1181. package/docs/cli/devices.md +139 -0
  1182. package/docs/cli/directory.md +63 -0
  1183. package/docs/cli/dns.md +23 -0
  1184. package/docs/cli/docs.md +15 -0
  1185. package/docs/cli/doctor.md +48 -0
  1186. package/docs/cli/gateway.md +235 -0
  1187. package/docs/cli/health.md +21 -0
  1188. package/docs/cli/hooks.md +318 -0
  1189. package/docs/cli/index.md +1147 -0
  1190. package/docs/cli/logs.md +28 -0
  1191. package/docs/cli/memory.md +66 -0
  1192. package/docs/cli/message.md +278 -0
  1193. package/docs/cli/models.md +81 -0
  1194. package/docs/cli/node.md +127 -0
  1195. package/docs/cli/nodes.md +75 -0
  1196. package/docs/cli/onboard.md +157 -0
  1197. package/docs/cli/pairing.md +32 -0
  1198. package/docs/cli/plugins.md +186 -0
  1199. package/docs/cli/qr.md +46 -0
  1200. package/docs/cli/reset.md +20 -0
  1201. package/docs/cli/sandbox.md +197 -0
  1202. package/docs/cli/secrets.md +188 -0
  1203. package/docs/cli/security.md +79 -0
  1204. package/docs/cli/sessions.md +110 -0
  1205. package/docs/cli/setup.md +29 -0
  1206. package/docs/cli/skills.md +26 -0
  1207. package/docs/cli/status.md +30 -0
  1208. package/docs/cli/system.md +60 -0
  1209. package/docs/cli/tui.md +30 -0
  1210. package/docs/cli/uninstall.md +20 -0
  1211. package/docs/cli/update.md +103 -0
  1212. package/docs/cli/voicecall.md +34 -0
  1213. package/docs/cli/webhooks.md +25 -0
  1214. package/docs/concepts/agent-loop.md +148 -0
  1215. package/docs/concepts/agent-workspace.md +236 -0
  1216. package/docs/concepts/agent.md +122 -0
  1217. package/docs/concepts/architecture.md +137 -0
  1218. package/docs/concepts/compaction.md +123 -0
  1219. package/docs/concepts/context-engine.md +268 -0
  1220. package/docs/concepts/context.md +172 -0
  1221. package/docs/concepts/delegate-architecture.md +296 -0
  1222. package/docs/concepts/features.md +73 -0
  1223. package/docs/concepts/markdown-formatting.md +130 -0
  1224. package/docs/concepts/memory.md +108 -0
  1225. package/docs/concepts/messages.md +154 -0
  1226. package/docs/concepts/model-failover.md +152 -0
  1227. package/docs/concepts/model-providers.md +607 -0
  1228. package/docs/concepts/models.md +225 -0
  1229. package/docs/concepts/multi-agent.md +552 -0
  1230. package/docs/concepts/oauth.md +158 -0
  1231. package/docs/concepts/presence.md +102 -0
  1232. package/docs/concepts/queue.md +89 -0
  1233. package/docs/concepts/retry.md +69 -0
  1234. package/docs/concepts/session-pruning.md +121 -0
  1235. package/docs/concepts/session-tool.md +242 -0
  1236. package/docs/concepts/session.md +310 -0
  1237. package/docs/concepts/streaming.md +155 -0
  1238. package/docs/concepts/system-prompt.md +132 -0
  1239. package/docs/concepts/timezone.md +91 -0
  1240. package/docs/concepts/typebox.md +291 -0
  1241. package/docs/concepts/typing-indicators.md +68 -0
  1242. package/docs/concepts/usage-tracking.md +35 -0
  1243. package/docs/date-time.md +128 -0
  1244. package/docs/debug/node-issue.md +85 -0
  1245. package/docs/diagnostics/flags.md +91 -0
  1246. package/docs/docs.json +2061 -0
  1247. package/docs/gateway/authentication.md +179 -0
  1248. package/docs/gateway/background-process.md +97 -0
  1249. package/docs/gateway/bonjour.md +177 -0
  1250. package/docs/gateway/bridge-protocol.md +91 -0
  1251. package/docs/gateway/cli-backends.md +225 -0
  1252. package/docs/gateway/configuration-examples.md +651 -0
  1253. package/docs/gateway/configuration-reference.md +3123 -0
  1254. package/docs/gateway/configuration.md +633 -0
  1255. package/docs/gateway/discovery.md +123 -0
  1256. package/docs/gateway/doctor.md +362 -0
  1257. package/docs/gateway/gateway-lock.md +34 -0
  1258. package/docs/gateway/health.md +44 -0
  1259. package/docs/gateway/heartbeat.md +393 -0
  1260. package/docs/gateway/index.md +261 -0
  1261. package/docs/gateway/local-models.md +152 -0
  1262. package/docs/gateway/logging.md +113 -0
  1263. package/docs/gateway/multiple-gateways.md +112 -0
  1264. package/docs/gateway/network-model.md +22 -0
  1265. package/docs/gateway/openai-http-api.md +132 -0
  1266. package/docs/gateway/openresponses-http-api.md +295 -0
  1267. package/docs/gateway/openshell.md +307 -0
  1268. package/docs/gateway/pairing.md +99 -0
  1269. package/docs/gateway/protocol.md +267 -0
  1270. package/docs/gateway/remote-gateway-readme.md +158 -0
  1271. package/docs/gateway/remote.md +153 -0
  1272. package/docs/gateway/sandbox-vs-tool-policy-vs-elevated.md +134 -0
  1273. package/docs/gateway/sandboxing.md +469 -0
  1274. package/docs/gateway/secrets-plan-contract.md +116 -0
  1275. package/docs/gateway/secrets.md +503 -0
  1276. package/docs/gateway/security/index.md +1213 -0
  1277. package/docs/gateway/tailscale.md +132 -0
  1278. package/docs/gateway/tools-invoke-http-api.md +110 -0
  1279. package/docs/gateway/troubleshooting.md +378 -0
  1280. package/docs/gateway/trusted-proxy-auth.md +330 -0
  1281. package/docs/help/debugging.md +168 -0
  1282. package/docs/help/environment.md +163 -0
  1283. package/docs/help/faq.md +2999 -0
  1284. package/docs/help/index.md +28 -0
  1285. package/docs/help/scripts.md +28 -0
  1286. package/docs/help/testing.md +524 -0
  1287. package/docs/help/troubleshooting.md +297 -0
  1288. package/docs/images/configure-model-picker-unsearchable.png +0 -0
  1289. package/docs/images/feishu-step2-create-app.png +0 -0
  1290. package/docs/images/feishu-step3-credentials.png +0 -0
  1291. package/docs/images/feishu-step4-permissions.png +0 -0
  1292. package/docs/images/feishu-step5-bot-capability.png +0 -0
  1293. package/docs/images/feishu-step6-event-subscription.png +0 -0
  1294. package/docs/images/feishu-verification-token.png +0 -0
  1295. package/docs/images/groups-flow.svg +52 -0
  1296. package/docs/images/mobile-ui-screenshot.png +0 -0
  1297. package/docs/index.md +196 -0
  1298. package/docs/install/ansible.md +230 -0
  1299. package/docs/install/azure.md +311 -0
  1300. package/docs/install/bun.md +55 -0
  1301. package/docs/install/development-channels.md +120 -0
  1302. package/docs/install/digitalocean.md +129 -0
  1303. package/docs/install/docker-vm-runtime.md +142 -0
  1304. package/docs/install/docker.md +375 -0
  1305. package/docs/install/exe-dev.md +126 -0
  1306. package/docs/install/fly.md +501 -0
  1307. package/docs/install/gcp.md +402 -0
  1308. package/docs/install/hetzner.md +251 -0
  1309. package/docs/install/index.md +183 -0
  1310. package/docs/install/installer.md +415 -0
  1311. package/docs/install/kubernetes.md +191 -0
  1312. package/docs/install/macos-vm.md +281 -0
  1313. package/docs/install/migrating-matrix.md +346 -0
  1314. package/docs/install/migrating.md +110 -0
  1315. package/docs/install/nix.md +89 -0
  1316. package/docs/install/node.md +138 -0
  1317. package/docs/install/northflank.mdx +54 -0
  1318. package/docs/install/oracle.md +156 -0
  1319. package/docs/install/podman.md +133 -0
  1320. package/docs/install/railway.mdx +100 -0
  1321. package/docs/install/raspberry-pi.md +159 -0
  1322. package/docs/install/render.mdx +169 -0
  1323. package/docs/install/uninstall.md +128 -0
  1324. package/docs/install/updating.md +128 -0
  1325. package/docs/ja-JP/index.md +186 -0
  1326. package/docs/ja-JP/start/getting-started.md +125 -0
  1327. package/docs/ja-JP/start/wizard.md +77 -0
  1328. package/docs/logging.md +352 -0
  1329. package/docs/nav-tabs-underline.js +100 -0
  1330. package/docs/network.md +54 -0
  1331. package/docs/nodes/audio.md +187 -0
  1332. package/docs/nodes/camera.md +162 -0
  1333. package/docs/nodes/images.md +72 -0
  1334. package/docs/nodes/index.md +393 -0
  1335. package/docs/nodes/location-command.md +98 -0
  1336. package/docs/nodes/media-understanding.md +394 -0
  1337. package/docs/nodes/talk.md +92 -0
  1338. package/docs/nodes/troubleshooting.md +114 -0
  1339. package/docs/nodes/voicewake.md +66 -0
  1340. package/docs/perplexity.md +174 -0
  1341. package/docs/pi-dev.md +80 -0
  1342. package/docs/pi.md +567 -0
  1343. package/docs/platforms/android.md +168 -0
  1344. package/docs/platforms/digitalocean.md +266 -0
  1345. package/docs/platforms/index.md +54 -0
  1346. package/docs/platforms/ios.md +220 -0
  1347. package/docs/platforms/linux.md +94 -0
  1348. package/docs/platforms/mac/bundled-gateway.md +73 -0
  1349. package/docs/platforms/mac/canvas.md +125 -0
  1350. package/docs/platforms/mac/child-process.md +69 -0
  1351. package/docs/platforms/mac/dev-setup.md +104 -0
  1352. package/docs/platforms/mac/health.md +34 -0
  1353. package/docs/platforms/mac/icon.md +31 -0
  1354. package/docs/platforms/mac/logging.md +57 -0
  1355. package/docs/platforms/mac/menu-bar.md +81 -0
  1356. package/docs/platforms/mac/peekaboo.md +65 -0
  1357. package/docs/platforms/mac/permissions.md +50 -0
  1358. package/docs/platforms/mac/remote.md +84 -0
  1359. package/docs/platforms/mac/signing.md +47 -0
  1360. package/docs/platforms/mac/skills.md +33 -0
  1361. package/docs/platforms/mac/voice-overlay.md +60 -0
  1362. package/docs/platforms/mac/voicewake.md +67 -0
  1363. package/docs/platforms/mac/webchat.md +43 -0
  1364. package/docs/platforms/mac/xpc.md +61 -0
  1365. package/docs/platforms/macos.md +226 -0
  1366. package/docs/platforms/oracle.md +303 -0
  1367. package/docs/platforms/raspberry-pi.md +412 -0
  1368. package/docs/platforms/windows.md +241 -0
  1369. package/docs/plugins/agent-tools.md +10 -0
  1370. package/docs/plugins/architecture.md +1363 -0
  1371. package/docs/plugins/building-extensions.md +10 -0
  1372. package/docs/plugins/building-plugins.md +376 -0
  1373. package/docs/plugins/bundles.md +181 -0
  1374. package/docs/plugins/community.md +141 -0
  1375. package/docs/plugins/manifest.md +145 -0
  1376. package/docs/plugins/sdk-migration.md +169 -0
  1377. package/docs/plugins/voice-call.md +380 -0
  1378. package/docs/plugins/zalouser.md +77 -0
  1379. package/docs/prose.md +134 -0
  1380. package/docs/providers/anthropic.md +259 -0
  1381. package/docs/providers/bedrock.md +176 -0
  1382. package/docs/providers/claude-max-api-proxy.md +154 -0
  1383. package/docs/providers/cloudflare-ai-gateway.md +71 -0
  1384. package/docs/providers/deepgram.md +93 -0
  1385. package/docs/providers/github-copilot.md +72 -0
  1386. package/docs/providers/glm.md +43 -0
  1387. package/docs/providers/google.md +78 -0
  1388. package/docs/providers/groq.md +96 -0
  1389. package/docs/providers/huggingface.md +209 -0
  1390. package/docs/providers/index.md +69 -0
  1391. package/docs/providers/kilocode.md +74 -0
  1392. package/docs/providers/litellm.md +154 -0
  1393. package/docs/providers/minimax.md +224 -0
  1394. package/docs/providers/mistral.md +54 -0
  1395. package/docs/providers/models.md +45 -0
  1396. package/docs/providers/modelstudio.md +66 -0
  1397. package/docs/providers/moonshot.md +175 -0
  1398. package/docs/providers/nvidia.md +55 -0
  1399. package/docs/providers/ollama.md +352 -0
  1400. package/docs/providers/openai.md +303 -0
  1401. package/docs/providers/opencode-go.md +45 -0
  1402. package/docs/providers/opencode.md +64 -0
  1403. package/docs/providers/openrouter.md +37 -0
  1404. package/docs/providers/perplexity-provider.md +62 -0
  1405. package/docs/providers/qianfan.md +38 -0
  1406. package/docs/providers/qwen.md +53 -0
  1407. package/docs/providers/sglang.md +104 -0
  1408. package/docs/providers/synthetic.md +99 -0
  1409. package/docs/providers/together.md +66 -0
  1410. package/docs/providers/venice.md +282 -0
  1411. package/docs/providers/vercel-ai-gateway.md +60 -0
  1412. package/docs/providers/vllm.md +92 -0
  1413. package/docs/providers/volcengine.md +74 -0
  1414. package/docs/providers/xai.md +60 -0
  1415. package/docs/providers/xiaomi.md +86 -0
  1416. package/docs/providers/zai.md +46 -0
  1417. package/docs/reference/AGENTS.default.md +126 -0
  1418. package/docs/reference/RELEASING.md +42 -0
  1419. package/docs/reference/api-usage-costs.md +144 -0
  1420. package/docs/reference/credits.md +30 -0
  1421. package/docs/reference/device-models.md +47 -0
  1422. package/docs/reference/memory-config.md +711 -0
  1423. package/docs/reference/prompt-caching.md +185 -0
  1424. package/docs/reference/rpc.md +43 -0
  1425. package/docs/reference/secretref-credential-surface.md +140 -0
  1426. package/docs/reference/secretref-user-supplied-credentials-matrix.json +563 -0
  1427. package/docs/reference/session-management-compaction.md +324 -0
  1428. package/docs/reference/templates/AGENTS.dev.md +83 -0
  1429. package/docs/reference/templates/AGENTS.md +219 -0
  1430. package/docs/reference/templates/BOOT.md +11 -0
  1431. package/docs/reference/templates/BOOTSTRAP.md +62 -0
  1432. package/docs/reference/templates/HEARTBEAT.md +14 -0
  1433. package/docs/reference/templates/IDENTITY.dev.md +47 -0
  1434. package/docs/reference/templates/IDENTITY.md +29 -0
  1435. package/docs/reference/templates/SOUL.dev.md +76 -0
  1436. package/docs/reference/templates/SOUL.md +43 -0
  1437. package/docs/reference/templates/TOOLS.dev.md +24 -0
  1438. package/docs/reference/templates/TOOLS.md +47 -0
  1439. package/docs/reference/templates/USER.dev.md +18 -0
  1440. package/docs/reference/templates/USER.md +23 -0
  1441. package/docs/reference/test.md +90 -0
  1442. package/docs/reference/token-use.md +175 -0
  1443. package/docs/reference/transcript-hygiene.md +151 -0
  1444. package/docs/reference/wizard.md +235 -0
  1445. package/docs/security/CONTRIBUTING-THREAT-MODEL.md +98 -0
  1446. package/docs/security/THREAT-MODEL-ATLAS.md +611 -0
  1447. package/docs/security/formal-verification.md +167 -0
  1448. package/docs/start/bootstrapping.md +41 -0
  1449. package/docs/start/docs-directory.md +66 -0
  1450. package/docs/start/getting-started.md +116 -0
  1451. package/docs/start/hubs.md +198 -0
  1452. package/docs/start/lore.md +219 -0
  1453. package/docs/start/onboarding-overview.md +67 -0
  1454. package/docs/start/onboarding.md +91 -0
  1455. package/docs/start/openclaw.md +216 -0
  1456. package/docs/start/quickstart.md +22 -0
  1457. package/docs/start/setup.md +164 -0
  1458. package/docs/start/showcase.md +418 -0
  1459. package/docs/start/wizard-cli-automation.md +215 -0
  1460. package/docs/start/wizard-cli-reference.md +299 -0
  1461. package/docs/start/wizard.md +125 -0
  1462. package/docs/style.css +37 -0
  1463. package/docs/tools/acp-agents.md +623 -0
  1464. package/docs/tools/agent-send.md +100 -0
  1465. package/docs/tools/apply-patch.md +51 -0
  1466. package/docs/tools/brave-search.md +93 -0
  1467. package/docs/tools/browser-linux-troubleshooting.md +138 -0
  1468. package/docs/tools/browser-login.md +73 -0
  1469. package/docs/tools/browser-wsl2-windows-remote-cdp-troubleshooting.md +211 -0
  1470. package/docs/tools/browser.md +731 -0
  1471. package/docs/tools/btw.md +142 -0
  1472. package/docs/tools/capability-cookbook.md +119 -0
  1473. package/docs/tools/clawhub.md +257 -0
  1474. package/docs/tools/creating-skills.md +117 -0
  1475. package/docs/tools/diffs.md +386 -0
  1476. package/docs/tools/elevated.md +114 -0
  1477. package/docs/tools/exec-approvals.md +400 -0
  1478. package/docs/tools/exec.md +204 -0
  1479. package/docs/tools/firecrawl.md +140 -0
  1480. package/docs/tools/index.md +137 -0
  1481. package/docs/tools/llm-task.md +119 -0
  1482. package/docs/tools/lobster.md +340 -0
  1483. package/docs/tools/loop-detection.md +100 -0
  1484. package/docs/tools/multi-agent-sandbox-tools.md +364 -0
  1485. package/docs/tools/pdf.md +156 -0
  1486. package/docs/tools/perplexity-search.md +174 -0
  1487. package/docs/tools/plugin.md +251 -0
  1488. package/docs/tools/reactions.md +64 -0
  1489. package/docs/tools/skills-config.md +86 -0
  1490. package/docs/tools/skills.md +306 -0
  1491. package/docs/tools/slash-commands.md +294 -0
  1492. package/docs/tools/subagents.md +295 -0
  1493. package/docs/tools/tavily.md +125 -0
  1494. package/docs/tools/thinking.md +96 -0
  1495. package/docs/tools/tts.md +406 -0
  1496. package/docs/tools/web.md +516 -0
  1497. package/docs/tts.md +406 -0
  1498. package/docs/vps.md +112 -0
  1499. package/docs/web/control-ui.md +275 -0
  1500. package/docs/web/dashboard.md +54 -0
  1501. package/docs/web/index.md +120 -0
  1502. package/docs/web/tui.md +170 -0
  1503. package/docs/web/webchat.md +61 -0
  1504. package/docs/whatsapp-openclaw-ai-zh.jpg +0 -0
  1505. package/docs/whatsapp-openclaw.jpg +0 -0
  1506. package/docs/zh-CN/AGENTS.md +61 -0
  1507. package/docs/zh-CN/automation/auth-monitoring.md +47 -0
  1508. package/docs/zh-CN/automation/cron-jobs.md +435 -0
  1509. package/docs/zh-CN/automation/cron-vs-heartbeat.md +286 -0
  1510. package/docs/zh-CN/automation/gmail-pubsub.md +249 -0
  1511. package/docs/zh-CN/automation/hooks.md +1051 -0
  1512. package/docs/zh-CN/automation/poll.md +76 -0
  1513. package/docs/zh-CN/automation/troubleshooting.md +8 -0
  1514. package/docs/zh-CN/automation/webhook.md +163 -0
  1515. package/docs/zh-CN/brave-search.md +60 -0
  1516. package/docs/zh-CN/channels/bluebubbles.md +354 -0
  1517. package/docs/zh-CN/channels/broadcast-groups.md +449 -0
  1518. package/docs/zh-CN/channels/channel-routing.md +117 -0
  1519. package/docs/zh-CN/channels/discord.md +468 -0
  1520. package/docs/zh-CN/channels/feishu.md +728 -0
  1521. package/docs/zh-CN/channels/googlechat.md +257 -0
  1522. package/docs/zh-CN/channels/grammy.md +38 -0
  1523. package/docs/zh-CN/channels/group-messages.md +91 -0
  1524. package/docs/zh-CN/channels/groups.md +379 -0
  1525. package/docs/zh-CN/channels/imessage.md +302 -0
  1526. package/docs/zh-CN/channels/index.md +53 -0
  1527. package/docs/zh-CN/channels/line.md +180 -0
  1528. package/docs/zh-CN/channels/location.md +63 -0
  1529. package/docs/zh-CN/channels/matrix.md +221 -0
  1530. package/docs/zh-CN/channels/mattermost.md +144 -0
  1531. package/docs/zh-CN/channels/msteams.md +775 -0
  1532. package/docs/zh-CN/channels/nextcloud-talk.md +142 -0
  1533. package/docs/zh-CN/channels/nostr.md +249 -0
  1534. package/docs/zh-CN/channels/pairing.md +89 -0
  1535. package/docs/zh-CN/channels/signal.md +209 -0
  1536. package/docs/zh-CN/channels/slack.md +531 -0
  1537. package/docs/zh-CN/channels/synology-chat.md +138 -0
  1538. package/docs/zh-CN/channels/telegram.md +751 -0
  1539. package/docs/zh-CN/channels/tlon.md +136 -0
  1540. package/docs/zh-CN/channels/troubleshooting.md +36 -0
  1541. package/docs/zh-CN/channels/twitch.md +385 -0
  1542. package/docs/zh-CN/channels/whatsapp.md +411 -0
  1543. package/docs/zh-CN/channels/zalo.md +196 -0
  1544. package/docs/zh-CN/channels/zalouser.md +147 -0
  1545. package/docs/zh-CN/cli/acp.md +173 -0
  1546. package/docs/zh-CN/cli/agent.md +30 -0
  1547. package/docs/zh-CN/cli/agents.md +82 -0
  1548. package/docs/zh-CN/cli/approvals.md +57 -0
  1549. package/docs/zh-CN/cli/browser.md +114 -0
  1550. package/docs/zh-CN/cli/channels.md +86 -0
  1551. package/docs/zh-CN/cli/config.md +57 -0
  1552. package/docs/zh-CN/cli/configure.md +38 -0
  1553. package/docs/zh-CN/cli/cron.md +43 -0
  1554. package/docs/zh-CN/cli/dashboard.md +23 -0
  1555. package/docs/zh-CN/cli/devices.md +74 -0
  1556. package/docs/zh-CN/cli/directory.md +70 -0
  1557. package/docs/zh-CN/cli/dns.md +30 -0
  1558. package/docs/zh-CN/cli/docs.md +22 -0
  1559. package/docs/zh-CN/cli/doctor.md +48 -0
  1560. package/docs/zh-CN/cli/gateway.md +206 -0
  1561. package/docs/zh-CN/cli/health.md +28 -0
  1562. package/docs/zh-CN/cli/hooks.md +298 -0
  1563. package/docs/zh-CN/cli/index.md +1143 -0
  1564. package/docs/zh-CN/cli/logs.md +31 -0
  1565. package/docs/zh-CN/cli/memory.md +52 -0
  1566. package/docs/zh-CN/cli/message.md +246 -0
  1567. package/docs/zh-CN/cli/models.md +85 -0
  1568. package/docs/zh-CN/cli/node.md +115 -0
  1569. package/docs/zh-CN/cli/nodes.md +80 -0
  1570. package/docs/zh-CN/cli/onboard.md +164 -0
  1571. package/docs/zh-CN/cli/pairing.md +28 -0
  1572. package/docs/zh-CN/cli/plugins.md +66 -0
  1573. package/docs/zh-CN/cli/reset.md +24 -0
  1574. package/docs/zh-CN/cli/sandbox.md +158 -0
  1575. package/docs/zh-CN/cli/security.md +33 -0
  1576. package/docs/zh-CN/cli/sessions.md +23 -0
  1577. package/docs/zh-CN/cli/setup.md +36 -0
  1578. package/docs/zh-CN/cli/skills.md +33 -0
  1579. package/docs/zh-CN/cli/status.md +33 -0
  1580. package/docs/zh-CN/cli/system.md +63 -0
  1581. package/docs/zh-CN/cli/tui.md +30 -0
  1582. package/docs/zh-CN/cli/uninstall.md +24 -0
  1583. package/docs/zh-CN/cli/update.md +101 -0
  1584. package/docs/zh-CN/cli/voicecall.md +41 -0
  1585. package/docs/zh-CN/cli/webhooks.md +32 -0
  1586. package/docs/zh-CN/concepts/agent-loop.md +146 -0
  1587. package/docs/zh-CN/concepts/agent-workspace.md +219 -0
  1588. package/docs/zh-CN/concepts/agent.md +115 -0
  1589. package/docs/zh-CN/concepts/architecture.md +123 -0
  1590. package/docs/zh-CN/concepts/compaction.md +67 -0
  1591. package/docs/zh-CN/concepts/context.md +168 -0
  1592. package/docs/zh-CN/concepts/features.md +59 -0
  1593. package/docs/zh-CN/concepts/markdown-formatting.md +117 -0
  1594. package/docs/zh-CN/concepts/memory.md +412 -0
  1595. package/docs/zh-CN/concepts/messages.md +141 -0
  1596. package/docs/zh-CN/concepts/model-failover.md +145 -0
  1597. package/docs/zh-CN/concepts/model-providers.md +606 -0
  1598. package/docs/zh-CN/concepts/models.md +225 -0
  1599. package/docs/zh-CN/concepts/multi-agent.md +372 -0
  1600. package/docs/zh-CN/concepts/oauth.md +164 -0
  1601. package/docs/zh-CN/concepts/presence.md +99 -0
  1602. package/docs/zh-CN/concepts/queue.md +94 -0
  1603. package/docs/zh-CN/concepts/retry.md +76 -0
  1604. package/docs/zh-CN/concepts/session-pruning.md +129 -0
  1605. package/docs/zh-CN/concepts/session-tool.md +200 -0
  1606. package/docs/zh-CN/concepts/session.md +166 -0
  1607. package/docs/zh-CN/concepts/streaming.md +133 -0
  1608. package/docs/zh-CN/concepts/system-prompt.md +101 -0
  1609. package/docs/zh-CN/concepts/timezone.md +96 -0
  1610. package/docs/zh-CN/concepts/typebox.md +284 -0
  1611. package/docs/zh-CN/concepts/typing-indicators.md +74 -0
  1612. package/docs/zh-CN/concepts/usage-tracking.md +42 -0
  1613. package/docs/zh-CN/date-time.md +129 -0
  1614. package/docs/zh-CN/debug/node-issue.md +90 -0
  1615. package/docs/zh-CN/diagnostics/flags.md +98 -0
  1616. package/docs/zh-CN/gateway/authentication.md +184 -0
  1617. package/docs/zh-CN/gateway/background-process.md +100 -0
  1618. package/docs/zh-CN/gateway/bonjour.md +174 -0
  1619. package/docs/zh-CN/gateway/bridge-protocol.md +86 -0
  1620. package/docs/zh-CN/gateway/cli-backends.md +213 -0
  1621. package/docs/zh-CN/gateway/configuration-examples.md +587 -0
  1622. package/docs/zh-CN/gateway/configuration-reference.md +3103 -0
  1623. package/docs/zh-CN/gateway/configuration.md +640 -0
  1624. package/docs/zh-CN/gateway/discovery.md +123 -0
  1625. package/docs/zh-CN/gateway/doctor.md +238 -0
  1626. package/docs/zh-CN/gateway/gateway-lock.md +41 -0
  1627. package/docs/zh-CN/gateway/health.md +42 -0
  1628. package/docs/zh-CN/gateway/heartbeat.md +274 -0
  1629. package/docs/zh-CN/gateway/index.md +335 -0
  1630. package/docs/zh-CN/gateway/local-models.md +159 -0
  1631. package/docs/zh-CN/gateway/logging.md +114 -0
  1632. package/docs/zh-CN/gateway/multiple-gateways.md +119 -0
  1633. package/docs/zh-CN/gateway/network-model.md +23 -0
  1634. package/docs/zh-CN/gateway/openai-http-api.md +125 -0
  1635. package/docs/zh-CN/gateway/openresponses-http-api.md +317 -0
  1636. package/docs/zh-CN/gateway/pairing.md +99 -0
  1637. package/docs/zh-CN/gateway/protocol.md +220 -0
  1638. package/docs/zh-CN/gateway/remote-gateway-readme.md +164 -0
  1639. package/docs/zh-CN/gateway/remote.md +133 -0
  1640. package/docs/zh-CN/gateway/sandbox-vs-tool-policy-vs-elevated.md +135 -0
  1641. package/docs/zh-CN/gateway/sandboxing.md +188 -0
  1642. package/docs/zh-CN/gateway/security/index.md +777 -0
  1643. package/docs/zh-CN/gateway/tailscale.md +124 -0
  1644. package/docs/zh-CN/gateway/tools-invoke-http-api.md +92 -0
  1645. package/docs/zh-CN/gateway/troubleshooting.md +771 -0
  1646. package/docs/zh-CN/help/debugging.md +160 -0
  1647. package/docs/zh-CN/help/environment.md +88 -0
  1648. package/docs/zh-CN/help/faq.md +2640 -0
  1649. package/docs/zh-CN/help/index.md +28 -0
  1650. package/docs/zh-CN/help/scripts.md +35 -0
  1651. package/docs/zh-CN/help/testing.md +375 -0
  1652. package/docs/zh-CN/help/troubleshooting.md +104 -0
  1653. package/docs/zh-CN/index.md +186 -0
  1654. package/docs/zh-CN/install/ansible.md +215 -0
  1655. package/docs/zh-CN/install/bun.md +65 -0
  1656. package/docs/zh-CN/install/development-channels.md +81 -0
  1657. package/docs/zh-CN/install/docker.md +532 -0
  1658. package/docs/zh-CN/install/exe-dev.md +133 -0
  1659. package/docs/zh-CN/install/fly.md +490 -0
  1660. package/docs/zh-CN/install/gcp.md +510 -0
  1661. package/docs/zh-CN/install/hetzner.md +337 -0
  1662. package/docs/zh-CN/install/index.md +235 -0
  1663. package/docs/zh-CN/install/installer.md +422 -0
  1664. package/docs/zh-CN/install/macos-vm.md +288 -0
  1665. package/docs/zh-CN/install/migrating.md +199 -0
  1666. package/docs/zh-CN/install/nix.md +99 -0
  1667. package/docs/zh-CN/install/node.md +8 -0
  1668. package/docs/zh-CN/install/northflank.mdx +60 -0
  1669. package/docs/zh-CN/install/railway.mdx +106 -0
  1670. package/docs/zh-CN/install/render.mdx +169 -0
  1671. package/docs/zh-CN/install/uninstall.md +135 -0
  1672. package/docs/zh-CN/install/updating.md +233 -0
  1673. package/docs/zh-CN/logging.md +329 -0
  1674. package/docs/zh-CN/network.md +59 -0
  1675. package/docs/zh-CN/nodes/audio.md +120 -0
  1676. package/docs/zh-CN/nodes/camera.md +162 -0
  1677. package/docs/zh-CN/nodes/images.md +79 -0
  1678. package/docs/zh-CN/nodes/index.md +348 -0
  1679. package/docs/zh-CN/nodes/location-command.md +120 -0
  1680. package/docs/zh-CN/nodes/media-understanding.md +380 -0
  1681. package/docs/zh-CN/nodes/talk.md +97 -0
  1682. package/docs/zh-CN/nodes/troubleshooting.md +8 -0
  1683. package/docs/zh-CN/nodes/voicewake.md +72 -0
  1684. package/docs/zh-CN/perplexity.md +102 -0
  1685. package/docs/zh-CN/pi-dev.md +77 -0
  1686. package/docs/zh-CN/pi.md +619 -0
  1687. package/docs/zh-CN/platforms/android.md +155 -0
  1688. package/docs/zh-CN/platforms/digitalocean.md +273 -0
  1689. package/docs/zh-CN/platforms/index.md +60 -0
  1690. package/docs/zh-CN/platforms/ios.md +114 -0
  1691. package/docs/zh-CN/platforms/linux.md +100 -0
  1692. package/docs/zh-CN/platforms/mac/bundled-gateway.md +75 -0
  1693. package/docs/zh-CN/platforms/mac/canvas.md +128 -0
  1694. package/docs/zh-CN/platforms/mac/child-process.md +73 -0
  1695. package/docs/zh-CN/platforms/mac/dev-setup.md +109 -0
  1696. package/docs/zh-CN/platforms/mac/health.md +41 -0
  1697. package/docs/zh-CN/platforms/mac/icon.md +38 -0
  1698. package/docs/zh-CN/platforms/mac/logging.md +64 -0
  1699. package/docs/zh-CN/platforms/mac/menu-bar.md +88 -0
  1700. package/docs/zh-CN/platforms/mac/peekaboo.md +62 -0
  1701. package/docs/zh-CN/platforms/mac/permissions.md +46 -0
  1702. package/docs/zh-CN/platforms/mac/remote.md +90 -0
  1703. package/docs/zh-CN/platforms/mac/signing.md +54 -0
  1704. package/docs/zh-CN/platforms/mac/skills.md +40 -0
  1705. package/docs/zh-CN/platforms/mac/voice-overlay.md +67 -0
  1706. package/docs/zh-CN/platforms/mac/voicewake.md +74 -0
  1707. package/docs/zh-CN/platforms/mac/webchat.md +43 -0
  1708. package/docs/zh-CN/platforms/mac/xpc.md +68 -0
  1709. package/docs/zh-CN/platforms/macos.md +193 -0
  1710. package/docs/zh-CN/platforms/oracle.md +310 -0
  1711. package/docs/zh-CN/platforms/raspberry-pi.md +416 -0
  1712. package/docs/zh-CN/platforms/windows.md +247 -0
  1713. package/docs/zh-CN/plugins/agent-tools.md +99 -0
  1714. package/docs/zh-CN/plugins/manifest.md +68 -0
  1715. package/docs/zh-CN/plugins/voice-call.md +250 -0
  1716. package/docs/zh-CN/plugins/zalouser.md +88 -0
  1717. package/docs/zh-CN/prose.md +141 -0
  1718. package/docs/zh-CN/providers/anthropic.md +265 -0
  1719. package/docs/zh-CN/providers/bedrock.md +170 -0
  1720. package/docs/zh-CN/providers/claude-max-api-proxy.md +155 -0
  1721. package/docs/zh-CN/providers/cloudflare-ai-gateway.md +78 -0
  1722. package/docs/zh-CN/providers/deepgram.md +97 -0
  1723. package/docs/zh-CN/providers/github-copilot.md +67 -0
  1724. package/docs/zh-CN/providers/glm.md +50 -0
  1725. package/docs/zh-CN/providers/huggingface.md +216 -0
  1726. package/docs/zh-CN/providers/index.md +69 -0
  1727. package/docs/zh-CN/providers/kilocode.md +80 -0
  1728. package/docs/zh-CN/providers/litellm.md +160 -0
  1729. package/docs/zh-CN/providers/minimax.md +222 -0
  1730. package/docs/zh-CN/providers/mistral.md +61 -0
  1731. package/docs/zh-CN/providers/models.md +51 -0
  1732. package/docs/zh-CN/providers/moonshot.md +182 -0
  1733. package/docs/zh-CN/providers/nvidia.md +62 -0
  1734. package/docs/zh-CN/providers/ollama.md +359 -0
  1735. package/docs/zh-CN/providers/openai.md +308 -0
  1736. package/docs/zh-CN/providers/opencode-go.md +52 -0
  1737. package/docs/zh-CN/providers/opencode.md +71 -0
  1738. package/docs/zh-CN/providers/openrouter.md +44 -0
  1739. package/docs/zh-CN/providers/qianfan.md +45 -0
  1740. package/docs/zh-CN/providers/qwen.md +55 -0
  1741. package/docs/zh-CN/providers/sglang.md +111 -0
  1742. package/docs/zh-CN/providers/synthetic.md +106 -0
  1743. package/docs/zh-CN/providers/together.md +72 -0
  1744. package/docs/zh-CN/providers/venice.md +289 -0
  1745. package/docs/zh-CN/providers/vercel-ai-gateway.md +66 -0
  1746. package/docs/zh-CN/providers/xiaomi.md +93 -0
  1747. package/docs/zh-CN/providers/zai.md +53 -0
  1748. package/docs/zh-CN/reference/AGENTS.default.md +131 -0
  1749. package/docs/zh-CN/reference/RELEASING.md +48 -0
  1750. package/docs/zh-CN/reference/api-usage-costs.md +141 -0
  1751. package/docs/zh-CN/reference/credits.md +34 -0
  1752. package/docs/zh-CN/reference/device-models.md +54 -0
  1753. package/docs/zh-CN/reference/rpc.md +48 -0
  1754. package/docs/zh-CN/reference/session-management-compaction.md +287 -0
  1755. package/docs/zh-CN/reference/templates/AGENTS.dev.md +89 -0
  1756. package/docs/zh-CN/reference/templates/AGENTS.md +225 -0
  1757. package/docs/zh-CN/reference/templates/BOOT.md +17 -0
  1758. package/docs/zh-CN/reference/templates/BOOTSTRAP.md +68 -0
  1759. package/docs/zh-CN/reference/templates/HEARTBEAT.md +18 -0
  1760. package/docs/zh-CN/reference/templates/IDENTITY.dev.md +54 -0
  1761. package/docs/zh-CN/reference/templates/IDENTITY.md +36 -0
  1762. package/docs/zh-CN/reference/templates/SOUL.dev.md +83 -0
  1763. package/docs/zh-CN/reference/templates/SOUL.md +49 -0
  1764. package/docs/zh-CN/reference/templates/TOOLS.dev.md +31 -0
  1765. package/docs/zh-CN/reference/templates/TOOLS.md +53 -0
  1766. package/docs/zh-CN/reference/templates/USER.dev.md +25 -0
  1767. package/docs/zh-CN/reference/templates/USER.md +30 -0
  1768. package/docs/zh-CN/reference/test.md +57 -0
  1769. package/docs/zh-CN/reference/token-use.md +119 -0
  1770. package/docs/zh-CN/reference/transcript-hygiene.md +109 -0
  1771. package/docs/zh-CN/reference/wizard.md +242 -0
  1772. package/docs/zh-CN/security/formal-verification.md +171 -0
  1773. package/docs/zh-CN/start/bootstrapping.md +9 -0
  1774. package/docs/zh-CN/start/docs-directory.md +70 -0
  1775. package/docs/zh-CN/start/getting-started.md +143 -0
  1776. package/docs/zh-CN/start/hubs.md +194 -0
  1777. package/docs/zh-CN/start/lore.md +226 -0
  1778. package/docs/zh-CN/start/onboarding-overview.md +58 -0
  1779. package/docs/zh-CN/start/onboarding.md +105 -0
  1780. package/docs/zh-CN/start/openclaw.md +248 -0
  1781. package/docs/zh-CN/start/quickstart.md +88 -0
  1782. package/docs/zh-CN/start/setup.md +153 -0
  1783. package/docs/zh-CN/start/showcase.md +423 -0
  1784. package/docs/zh-CN/start/wizard-cli-automation.md +222 -0
  1785. package/docs/zh-CN/start/wizard-cli-reference.md +306 -0
  1786. package/docs/zh-CN/start/wizard.md +132 -0
  1787. package/docs/zh-CN/tools/agent-send.md +59 -0
  1788. package/docs/zh-CN/tools/apply-patch.md +57 -0
  1789. package/docs/zh-CN/tools/browser-linux-troubleshooting.md +144 -0
  1790. package/docs/zh-CN/tools/browser-login.md +75 -0
  1791. package/docs/zh-CN/tools/browser.md +553 -0
  1792. package/docs/zh-CN/tools/chrome-extension.md +183 -0
  1793. package/docs/zh-CN/tools/clawhub.md +209 -0
  1794. package/docs/zh-CN/tools/creating-skills.md +61 -0
  1795. package/docs/zh-CN/tools/elevated.md +64 -0
  1796. package/docs/zh-CN/tools/exec-approvals.md +234 -0
  1797. package/docs/zh-CN/tools/exec.md +169 -0
  1798. package/docs/zh-CN/tools/firecrawl.md +68 -0
  1799. package/docs/zh-CN/tools/index.md +515 -0
  1800. package/docs/zh-CN/tools/llm-task.md +117 -0
  1801. package/docs/zh-CN/tools/lobster.md +349 -0
  1802. package/docs/zh-CN/tools/multi-agent-sandbox-tools.md +401 -0
  1803. package/docs/zh-CN/tools/plugin.md +1612 -0
  1804. package/docs/zh-CN/tools/reactions.md +29 -0
  1805. package/docs/zh-CN/tools/skills-config.md +78 -0
  1806. package/docs/zh-CN/tools/skills.md +279 -0
  1807. package/docs/zh-CN/tools/slash-commands.md +205 -0
  1808. package/docs/zh-CN/tools/subagents.md +167 -0
  1809. package/docs/zh-CN/tools/thinking.md +80 -0
  1810. package/docs/zh-CN/tools/web.md +289 -0
  1811. package/docs/zh-CN/tts.md +375 -0
  1812. package/docs/zh-CN/vps.md +47 -0
  1813. package/docs/zh-CN/web/control-ui.md +191 -0
  1814. package/docs/zh-CN/web/dashboard.md +53 -0
  1815. package/docs/zh-CN/web/index.md +118 -0
  1816. package/docs/zh-CN/web/tui.md +166 -0
  1817. package/docs/zh-CN/web/webchat.md +56 -0
  1818. package/openclaw.mjs +135 -0
  1819. package/package.json +835 -0
  1820. package/skills/1password/SKILL.md +70 -0
  1821. package/skills/1password/references/cli-examples.md +29 -0
  1822. package/skills/1password/references/get-started.md +17 -0
  1823. package/skills/apple-notes/SKILL.md +77 -0
  1824. package/skills/apple-reminders/SKILL.md +118 -0
  1825. package/skills/bear-notes/SKILL.md +107 -0
  1826. package/skills/blogwatcher/SKILL.md +69 -0
  1827. package/skills/blucli/SKILL.md +47 -0
  1828. package/skills/bluebubbles/SKILL.md +131 -0
  1829. package/skills/camsnap/SKILL.md +45 -0
  1830. package/skills/canvas/SKILL.md +198 -0
  1831. package/skills/clawhub/SKILL.md +77 -0
  1832. package/skills/coding-agent/SKILL.md +295 -0
  1833. package/skills/discord/SKILL.md +197 -0
  1834. package/skills/doubao-code/SKILL.md +43 -0
  1835. package/skills/eightctl/SKILL.md +50 -0
  1836. package/skills/gemini/SKILL.md +43 -0
  1837. package/skills/gh-issues/SKILL.md +865 -0
  1838. package/skills/gifgrep/SKILL.md +79 -0
  1839. package/skills/github/SKILL.md +163 -0
  1840. package/skills/gog/SKILL.md +116 -0
  1841. package/skills/goplaces/SKILL.md +52 -0
  1842. package/skills/healthcheck/SKILL.md +245 -0
  1843. package/skills/himalaya/SKILL.md +257 -0
  1844. package/skills/himalaya/references/configuration.md +184 -0
  1845. package/skills/himalaya/references/message-composition.md +199 -0
  1846. package/skills/imsg/SKILL.md +122 -0
  1847. package/skills/kimi-code/SKILL.md +42 -0
  1848. package/skills/mcporter/SKILL.md +61 -0
  1849. package/skills/model-usage/SKILL.md +69 -0
  1850. package/skills/model-usage/references/codexbar-cli.md +33 -0
  1851. package/skills/model-usage/scripts/model_usage.py +320 -0
  1852. package/skills/model-usage/scripts/test_model_usage.py +40 -0
  1853. package/skills/nano-pdf/SKILL.md +38 -0
  1854. package/skills/node-connect/SKILL.md +142 -0
  1855. package/skills/notion/SKILL.md +174 -0
  1856. package/skills/obsidian/SKILL.md +81 -0
  1857. package/skills/openai-image-gen/SKILL.md +92 -0
  1858. package/skills/openai-image-gen/scripts/gen.py +328 -0
  1859. package/skills/openai-image-gen/scripts/test_gen.py +140 -0
  1860. package/skills/openai-whisper/SKILL.md +38 -0
  1861. package/skills/openai-whisper-api/SKILL.md +52 -0
  1862. package/skills/openai-whisper-api/scripts/transcribe.sh +85 -0
  1863. package/skills/openhue/SKILL.md +112 -0
  1864. package/skills/oracle/SKILL.md +125 -0
  1865. package/skills/ordercli/SKILL.md +78 -0
  1866. package/skills/peekaboo/SKILL.md +190 -0
  1867. package/skills/sag/SKILL.md +87 -0
  1868. package/skills/session-logs/SKILL.md +115 -0
  1869. package/skills/sherpa-onnx-tts/SKILL.md +103 -0
  1870. package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +178 -0
  1871. package/skills/skill-creator/SKILL.md +372 -0
  1872. package/skills/skill-creator/license.txt +202 -0
  1873. package/skills/skill-creator/scripts/init_skill.py +378 -0
  1874. package/skills/skill-creator/scripts/package_skill.py +139 -0
  1875. package/skills/skill-creator/scripts/quick_validate.py +159 -0
  1876. package/skills/skill-creator/scripts/test_package_skill.py +160 -0
  1877. package/skills/skill-creator/scripts/test_quick_validate.py +72 -0
  1878. package/skills/slack/SKILL.md +144 -0
  1879. package/skills/songsee/SKILL.md +49 -0
  1880. package/skills/sonoscli/SKILL.md +65 -0
  1881. package/skills/spotify-player/SKILL.md +64 -0
  1882. package/skills/summarize/SKILL.md +87 -0
  1883. package/skills/things-mac/SKILL.md +86 -0
  1884. package/skills/tmux/SKILL.md +153 -0
  1885. package/skills/tmux/scripts/find-sessions.sh +112 -0
  1886. package/skills/tmux/scripts/wait-for-text.sh +83 -0
  1887. package/skills/trello/SKILL.md +95 -0
  1888. package/skills/video-frames/SKILL.md +46 -0
  1889. package/skills/video-frames/scripts/frame.sh +81 -0
  1890. package/skills/voice-call/SKILL.md +45 -0
  1891. package/skills/wacli/SKILL.md +72 -0
  1892. package/skills/weather/SKILL.md +112 -0
  1893. package/skills/xurl/SKILL.md +461 -0
@@ -0,0 +1,2005 @@
1
+ import { a as logVerbose } from "./globals-41sdSaKv.js";
2
+ import { S as parseAgentSessionKey, c as normalizeAgentId, l as normalizeMainKey, v as isAcpSessionKey } from "./session-key-gFFk3uv9.js";
3
+ import { s as loadConfig } from "./io-jOnQRia2.js";
4
+ import { l as updateSessionStore, n as loadSessionStore } from "./store-CvL8MPei.js";
5
+ import { i as resolveMainSessionKey, t as canonicalizeMainSessionAlias } from "./main-session-DKr0lBVk.js";
6
+ import { t as resolveAllAgentSessionStoreTargets } from "./sessions-DaSBVNwD.js";
7
+ import { l as resolveStorePath } from "./paths-CTjJI9l0.js";
8
+ import { n as mergeSessionEntry } from "./types-BCKGVVld.js";
9
+ import { t as KeyedAsyncQueue } from "./keyed-async-queue-CPUWV5Pm.js";
10
+ import { isAbsolute } from "node:path";
11
+ //#region src/agents/timeout.ts
12
+ const DEFAULT_AGENT_TIMEOUT_SECONDS = 2880 * 60;
13
+ const MAX_SAFE_TIMEOUT_MS = 2147e6;
14
+ const normalizeNumber = (value) => typeof value === "number" && Number.isFinite(value) ? Math.floor(value) : void 0;
15
+ function resolveAgentTimeoutSeconds(cfg) {
16
+ const seconds = normalizeNumber(cfg?.agents?.defaults?.timeoutSeconds) ?? DEFAULT_AGENT_TIMEOUT_SECONDS;
17
+ return Math.max(seconds, 1);
18
+ }
19
+ function resolveAgentTimeoutMs(opts) {
20
+ const minMs = Math.max(normalizeNumber(opts.minMs) ?? 1, 1);
21
+ const clampTimeoutMs = (valueMs) => Math.min(Math.max(valueMs, minMs), MAX_SAFE_TIMEOUT_MS);
22
+ const defaultMs = clampTimeoutMs(resolveAgentTimeoutSeconds(opts.cfg) * 1e3);
23
+ const NO_TIMEOUT_MS = MAX_SAFE_TIMEOUT_MS;
24
+ const overrideMs = normalizeNumber(opts.overrideMs);
25
+ if (overrideMs !== void 0) {
26
+ if (overrideMs === 0) return NO_TIMEOUT_MS;
27
+ if (overrideMs < 0) return defaultMs;
28
+ return clampTimeoutMs(overrideMs);
29
+ }
30
+ const overrideSeconds = normalizeNumber(opts.overrideSeconds);
31
+ if (overrideSeconds !== void 0) {
32
+ if (overrideSeconds === 0) return NO_TIMEOUT_MS;
33
+ if (overrideSeconds < 0) return defaultMs;
34
+ return clampTimeoutMs(overrideSeconds * 1e3);
35
+ }
36
+ return defaultMs;
37
+ }
38
+ //#endregion
39
+ //#region src/acp/runtime/errors.ts
40
+ const ACP_ERROR_CODES = [
41
+ "ACP_BACKEND_MISSING",
42
+ "ACP_BACKEND_UNAVAILABLE",
43
+ "ACP_BACKEND_UNSUPPORTED_CONTROL",
44
+ "ACP_DISPATCH_DISABLED",
45
+ "ACP_INVALID_RUNTIME_OPTION",
46
+ "ACP_SESSION_INIT_FAILED",
47
+ "ACP_TURN_FAILED"
48
+ ];
49
+ var AcpRuntimeError = class extends Error {
50
+ constructor(code, message, options) {
51
+ super(message);
52
+ this.name = "AcpRuntimeError";
53
+ this.code = code;
54
+ this.cause = options?.cause;
55
+ }
56
+ };
57
+ function isAcpRuntimeError(value) {
58
+ return value instanceof AcpRuntimeError;
59
+ }
60
+ function toAcpRuntimeError(params) {
61
+ if (params.error instanceof AcpRuntimeError) return params.error;
62
+ if (params.error instanceof Error) return new AcpRuntimeError(params.fallbackCode, params.error.message, { cause: params.error });
63
+ return new AcpRuntimeError(params.fallbackCode, params.fallbackMessage, { cause: params.error });
64
+ }
65
+ async function withAcpRuntimeErrorBoundary(params) {
66
+ try {
67
+ return await params.run();
68
+ } catch (error) {
69
+ throw toAcpRuntimeError({
70
+ error,
71
+ fallbackCode: params.fallbackCode,
72
+ fallbackMessage: params.fallbackMessage
73
+ });
74
+ }
75
+ }
76
+ //#endregion
77
+ //#region src/acp/runtime/session-identity.ts
78
+ function normalizeText$1(value) {
79
+ if (typeof value !== "string") return;
80
+ return value.trim() || void 0;
81
+ }
82
+ function normalizeIdentityState(value) {
83
+ if (value !== "pending" && value !== "resolved") return;
84
+ return value;
85
+ }
86
+ function normalizeIdentitySource(value) {
87
+ if (value !== "ensure" && value !== "status" && value !== "event") return;
88
+ return value;
89
+ }
90
+ function normalizeIdentity(identity) {
91
+ if (!identity) return;
92
+ const state = normalizeIdentityState(identity.state);
93
+ const source = normalizeIdentitySource(identity.source);
94
+ const acpxRecordId = normalizeText$1(identity.acpxRecordId);
95
+ const acpxSessionId = normalizeText$1(identity.acpxSessionId);
96
+ const agentSessionId = normalizeText$1(identity.agentSessionId);
97
+ const lastUpdatedAt = typeof identity.lastUpdatedAt === "number" && Number.isFinite(identity.lastUpdatedAt) ? identity.lastUpdatedAt : void 0;
98
+ if (!state && !source && !Boolean(acpxRecordId || acpxSessionId || agentSessionId) && lastUpdatedAt === void 0) return;
99
+ return {
100
+ state: state ?? (Boolean(acpxSessionId || agentSessionId) ? "resolved" : "pending"),
101
+ ...acpxRecordId ? { acpxRecordId } : {},
102
+ ...acpxSessionId ? { acpxSessionId } : {},
103
+ ...agentSessionId ? { agentSessionId } : {},
104
+ source: source ?? "status",
105
+ lastUpdatedAt: lastUpdatedAt ?? Date.now()
106
+ };
107
+ }
108
+ function resolveSessionIdentityFromMeta(meta) {
109
+ if (!meta) return;
110
+ return normalizeIdentity(meta.identity);
111
+ }
112
+ function resolveRuntimeResumeSessionId(identity) {
113
+ if (!identity) return;
114
+ return normalizeText$1(identity.acpxSessionId) ?? normalizeText$1(identity.agentSessionId);
115
+ }
116
+ function isSessionIdentityPending(identity) {
117
+ if (!identity) return true;
118
+ return identity.state === "pending";
119
+ }
120
+ function identityEquals(left, right) {
121
+ const a = normalizeIdentity(left);
122
+ const b = normalizeIdentity(right);
123
+ if (!a && !b) return true;
124
+ if (!a || !b) return false;
125
+ return a.state === b.state && a.acpxRecordId === b.acpxRecordId && a.acpxSessionId === b.acpxSessionId && a.agentSessionId === b.agentSessionId && a.source === b.source;
126
+ }
127
+ function mergeSessionIdentity(params) {
128
+ const current = normalizeIdentity(params.current);
129
+ const incoming = normalizeIdentity(params.incoming);
130
+ if (!current) {
131
+ if (!incoming) return;
132
+ return {
133
+ ...incoming,
134
+ lastUpdatedAt: params.now
135
+ };
136
+ }
137
+ if (!incoming) return current;
138
+ const currentResolved = current.state === "resolved";
139
+ const incomingResolved = incoming.state === "resolved";
140
+ const allowIncomingValue = !currentResolved || incomingResolved;
141
+ const nextRecordId = allowIncomingValue && incoming.acpxRecordId ? incoming.acpxRecordId : current.acpxRecordId;
142
+ const nextAcpxSessionId = allowIncomingValue && incoming.acpxSessionId ? incoming.acpxSessionId : current.acpxSessionId;
143
+ const nextAgentSessionId = allowIncomingValue && incoming.agentSessionId ? incoming.agentSessionId : current.agentSessionId;
144
+ const nextState = Boolean(nextAcpxSessionId || nextAgentSessionId) ? "resolved" : currentResolved ? "resolved" : incoming.state;
145
+ const nextSource = allowIncomingValue ? incoming.source : current.source;
146
+ return {
147
+ state: nextState,
148
+ ...nextRecordId ? { acpxRecordId: nextRecordId } : {},
149
+ ...nextAcpxSessionId ? { acpxSessionId: nextAcpxSessionId } : {},
150
+ ...nextAgentSessionId ? { agentSessionId: nextAgentSessionId } : {},
151
+ source: nextSource,
152
+ lastUpdatedAt: params.now
153
+ };
154
+ }
155
+ function createIdentityFromEnsure(params) {
156
+ const acpxRecordId = normalizeText$1(params.handle.acpxRecordId);
157
+ const acpxSessionId = normalizeText$1(params.handle.backendSessionId);
158
+ const agentSessionId = normalizeText$1(params.handle.agentSessionId);
159
+ if (!acpxRecordId && !acpxSessionId && !agentSessionId) return;
160
+ return {
161
+ state: "pending",
162
+ ...acpxRecordId ? { acpxRecordId } : {},
163
+ ...acpxSessionId ? { acpxSessionId } : {},
164
+ ...agentSessionId ? { agentSessionId } : {},
165
+ source: "ensure",
166
+ lastUpdatedAt: params.now
167
+ };
168
+ }
169
+ function createIdentityFromStatus(params) {
170
+ if (!params.status) return;
171
+ const details = params.status.details;
172
+ const acpxRecordId = normalizeText$1(params.status.acpxRecordId) ?? normalizeText$1(details?.acpxRecordId);
173
+ const acpxSessionId = normalizeText$1(params.status.backendSessionId) ?? normalizeText$1(details?.backendSessionId) ?? normalizeText$1(details?.acpxSessionId);
174
+ const agentSessionId = normalizeText$1(params.status.agentSessionId) ?? normalizeText$1(details?.agentSessionId);
175
+ if (!acpxRecordId && !acpxSessionId && !agentSessionId) return;
176
+ return {
177
+ state: Boolean(acpxSessionId || agentSessionId) ? "resolved" : "pending",
178
+ ...acpxRecordId ? { acpxRecordId } : {},
179
+ ...acpxSessionId ? { acpxSessionId } : {},
180
+ ...agentSessionId ? { agentSessionId } : {},
181
+ source: "status",
182
+ lastUpdatedAt: params.now
183
+ };
184
+ }
185
+ function resolveRuntimeHandleIdentifiersFromIdentity(identity) {
186
+ if (!identity) return {};
187
+ return {
188
+ ...identity.acpxSessionId ? { backendSessionId: identity.acpxSessionId } : {},
189
+ ...identity.agentSessionId ? { agentSessionId: identity.agentSessionId } : {}
190
+ };
191
+ }
192
+ //#endregion
193
+ //#region src/acp/control-plane/manager.utils.ts
194
+ function resolveAcpAgentFromSessionKey(sessionKey, fallback = "main") {
195
+ return normalizeAgentId(parseAgentSessionKey(sessionKey)?.agentId ?? fallback);
196
+ }
197
+ function resolveMissingMetaError(sessionKey) {
198
+ return new AcpRuntimeError("ACP_SESSION_INIT_FAILED", `ACP metadata is missing for ${sessionKey}. Recreate this ACP session with /acp spawn and rebind the thread.`);
199
+ }
200
+ function resolveAcpSessionResolutionError(resolution) {
201
+ if (resolution.kind === "ready") return null;
202
+ if (resolution.kind === "stale") return resolution.error;
203
+ return new AcpRuntimeError("ACP_SESSION_INIT_FAILED", `Session is not ACP-enabled: ${resolution.sessionKey}`);
204
+ }
205
+ function requireReadySessionMeta(resolution) {
206
+ if (resolution.kind === "ready") return resolution.meta;
207
+ throw resolveAcpSessionResolutionError(resolution);
208
+ }
209
+ function normalizeSessionKey(sessionKey) {
210
+ return sessionKey.trim();
211
+ }
212
+ function canonicalizeAcpSessionKey(params) {
213
+ const normalized = normalizeSessionKey(params.sessionKey);
214
+ if (!normalized) return "";
215
+ const lowered = normalized.toLowerCase();
216
+ if (lowered === "global" || lowered === "unknown") return lowered;
217
+ const parsed = parseAgentSessionKey(lowered);
218
+ if (parsed) return canonicalizeMainSessionAlias({
219
+ cfg: params.cfg,
220
+ agentId: parsed.agentId,
221
+ sessionKey: lowered
222
+ });
223
+ const mainKey = normalizeMainKey(params.cfg.session?.mainKey);
224
+ if (lowered === "main" || lowered === mainKey) return resolveMainSessionKey(params.cfg);
225
+ return lowered;
226
+ }
227
+ function normalizeActorKey(sessionKey) {
228
+ return sessionKey.trim().toLowerCase();
229
+ }
230
+ function normalizeAcpErrorCode(code) {
231
+ if (!code) return "ACP_TURN_FAILED";
232
+ const normalized = code.trim().toUpperCase();
233
+ for (const allowed of ACP_ERROR_CODES) if (allowed === normalized) return allowed;
234
+ return "ACP_TURN_FAILED";
235
+ }
236
+ function createUnsupportedControlError(params) {
237
+ return new AcpRuntimeError("ACP_BACKEND_UNSUPPORTED_CONTROL", `ACP backend "${params.backend}" does not support ${params.control}.`);
238
+ }
239
+ function resolveRuntimeIdleTtlMs(cfg) {
240
+ const ttlMinutes = cfg.acp?.runtime?.ttlMinutes;
241
+ if (typeof ttlMinutes !== "number" || !Number.isFinite(ttlMinutes) || ttlMinutes <= 0) return 0;
242
+ return Math.round(ttlMinutes * 60 * 1e3);
243
+ }
244
+ function hasLegacyAcpIdentityProjection(meta) {
245
+ const raw = meta;
246
+ return Object.hasOwn(raw, "backendSessionId") || Object.hasOwn(raw, "agentSessionId") || Object.hasOwn(raw, "sessionIdsProvisional");
247
+ }
248
+ //#endregion
249
+ //#region src/acp/control-plane/manager.identity-reconcile.ts
250
+ async function reconcileManagerRuntimeSessionIdentifiers(params) {
251
+ let runtimeStatus = params.runtimeStatus;
252
+ if (!runtimeStatus && params.runtime.getStatus) try {
253
+ runtimeStatus = await withAcpRuntimeErrorBoundary({
254
+ run: async () => await params.runtime.getStatus({ handle: params.handle }),
255
+ fallbackCode: "ACP_TURN_FAILED",
256
+ fallbackMessage: "Could not read ACP runtime status."
257
+ });
258
+ } catch (error) {
259
+ if (params.failOnStatusError) throw error;
260
+ logVerbose(`acp-manager: failed to refresh ACP runtime status for ${params.sessionKey}: ${String(error)}`);
261
+ return {
262
+ handle: params.handle,
263
+ meta: params.meta,
264
+ runtimeStatus
265
+ };
266
+ }
267
+ const now = Date.now();
268
+ const currentIdentity = resolveSessionIdentityFromMeta(params.meta);
269
+ const nextIdentity = mergeSessionIdentity({
270
+ current: currentIdentity,
271
+ incoming: createIdentityFromStatus({
272
+ status: runtimeStatus,
273
+ now
274
+ }),
275
+ now
276
+ }) ?? currentIdentity;
277
+ const handleIdentifiers = resolveRuntimeHandleIdentifiersFromIdentity(nextIdentity);
278
+ const handleChanged = handleIdentifiers.backendSessionId !== params.handle.backendSessionId || handleIdentifiers.agentSessionId !== params.handle.agentSessionId;
279
+ const nextHandle = handleChanged ? {
280
+ ...params.handle,
281
+ ...handleIdentifiers.backendSessionId ? { backendSessionId: handleIdentifiers.backendSessionId } : {},
282
+ ...handleIdentifiers.agentSessionId ? { agentSessionId: handleIdentifiers.agentSessionId } : {}
283
+ } : params.handle;
284
+ if (handleChanged) params.setCachedHandle(params.sessionKey, nextHandle);
285
+ if (!(!identityEquals(currentIdentity, nextIdentity) || hasLegacyAcpIdentityProjection(params.meta))) return {
286
+ handle: nextHandle,
287
+ meta: params.meta,
288
+ runtimeStatus
289
+ };
290
+ const nextMeta = {
291
+ backend: params.meta.backend,
292
+ agent: params.meta.agent,
293
+ runtimeSessionName: params.meta.runtimeSessionName,
294
+ ...nextIdentity ? { identity: nextIdentity } : {},
295
+ mode: params.meta.mode,
296
+ ...params.meta.runtimeOptions ? { runtimeOptions: params.meta.runtimeOptions } : {},
297
+ ...params.meta.cwd ? { cwd: params.meta.cwd } : {},
298
+ lastActivityAt: now,
299
+ state: params.meta.state,
300
+ ...params.meta.lastError ? { lastError: params.meta.lastError } : {}
301
+ };
302
+ if (!identityEquals(currentIdentity, nextIdentity)) {
303
+ const currentAgentSessionId = currentIdentity?.agentSessionId ?? "<none>";
304
+ const nextAgentSessionId = nextIdentity?.agentSessionId ?? "<none>";
305
+ const currentAcpxSessionId = currentIdentity?.acpxSessionId ?? "<none>";
306
+ const nextAcpxSessionId = nextIdentity?.acpxSessionId ?? "<none>";
307
+ const currentAcpxRecordId = currentIdentity?.acpxRecordId ?? "<none>";
308
+ const nextAcpxRecordId = nextIdentity?.acpxRecordId ?? "<none>";
309
+ logVerbose(`acp-manager: session identity updated for ${params.sessionKey} (agentSessionId ${currentAgentSessionId} -> ${nextAgentSessionId}, acpxSessionId ${currentAcpxSessionId} -> ${nextAcpxSessionId}, acpxRecordId ${currentAcpxRecordId} -> ${nextAcpxRecordId})`);
310
+ }
311
+ await params.writeSessionMeta({
312
+ cfg: params.cfg,
313
+ sessionKey: params.sessionKey,
314
+ mutate: (current, entry) => {
315
+ if (!entry) return null;
316
+ const base = current ?? entry.acp;
317
+ if (!base) return null;
318
+ return {
319
+ backend: base.backend,
320
+ agent: base.agent,
321
+ runtimeSessionName: base.runtimeSessionName,
322
+ ...nextIdentity ? { identity: nextIdentity } : {},
323
+ mode: base.mode,
324
+ ...base.runtimeOptions ? { runtimeOptions: base.runtimeOptions } : {},
325
+ ...base.cwd ? { cwd: base.cwd } : {},
326
+ state: base.state,
327
+ lastActivityAt: now,
328
+ ...base.lastError ? { lastError: base.lastError } : {}
329
+ };
330
+ }
331
+ });
332
+ return {
333
+ handle: nextHandle,
334
+ meta: nextMeta,
335
+ runtimeStatus
336
+ };
337
+ }
338
+ //#endregion
339
+ //#region src/acp/control-plane/runtime-options.ts
340
+ const MAX_RUNTIME_MODE_LENGTH = 64;
341
+ const MAX_MODEL_LENGTH = 200;
342
+ const MAX_PERMISSION_PROFILE_LENGTH = 80;
343
+ const MAX_CWD_LENGTH = 4096;
344
+ const MIN_TIMEOUT_SECONDS = 1;
345
+ const MAX_TIMEOUT_SECONDS = 1440 * 60;
346
+ const MAX_BACKEND_OPTION_KEY_LENGTH = 64;
347
+ const MAX_BACKEND_OPTION_VALUE_LENGTH = 512;
348
+ const MAX_BACKEND_EXTRAS = 32;
349
+ const SAFE_OPTION_KEY_RE = /^[a-z0-9][a-z0-9._:-]*$/i;
350
+ function failInvalidOption(message) {
351
+ throw new AcpRuntimeError("ACP_INVALID_RUNTIME_OPTION", message);
352
+ }
353
+ function validateNoControlChars(value, field) {
354
+ for (let i = 0; i < value.length; i += 1) {
355
+ const code = value.charCodeAt(i);
356
+ if (code < 32 || code === 127) failInvalidOption(`${field} must not include control characters.`);
357
+ }
358
+ return value;
359
+ }
360
+ function validateBoundedText(params) {
361
+ const normalized = normalizeText(params.value);
362
+ if (!normalized) failInvalidOption(`${params.field} must not be empty.`);
363
+ if (normalized.length > params.maxLength) failInvalidOption(`${params.field} must be at most ${params.maxLength} characters.`);
364
+ return validateNoControlChars(normalized, params.field);
365
+ }
366
+ function validateBackendOptionKey(rawKey) {
367
+ const key = validateBoundedText({
368
+ value: rawKey,
369
+ field: "ACP config key",
370
+ maxLength: MAX_BACKEND_OPTION_KEY_LENGTH
371
+ });
372
+ if (!SAFE_OPTION_KEY_RE.test(key)) failInvalidOption("ACP config key must use letters, numbers, dots, colons, underscores, or dashes.");
373
+ return key;
374
+ }
375
+ function validateBackendOptionValue(rawValue) {
376
+ return validateBoundedText({
377
+ value: rawValue,
378
+ field: "ACP config value",
379
+ maxLength: MAX_BACKEND_OPTION_VALUE_LENGTH
380
+ });
381
+ }
382
+ function validateRuntimeModeInput(rawMode) {
383
+ return validateBoundedText({
384
+ value: rawMode,
385
+ field: "Runtime mode",
386
+ maxLength: MAX_RUNTIME_MODE_LENGTH
387
+ });
388
+ }
389
+ function validateRuntimeModelInput(rawModel) {
390
+ return validateBoundedText({
391
+ value: rawModel,
392
+ field: "Model id",
393
+ maxLength: MAX_MODEL_LENGTH
394
+ });
395
+ }
396
+ function validateRuntimePermissionProfileInput(rawProfile) {
397
+ return validateBoundedText({
398
+ value: rawProfile,
399
+ field: "Permission profile",
400
+ maxLength: MAX_PERMISSION_PROFILE_LENGTH
401
+ });
402
+ }
403
+ function validateRuntimeCwdInput(rawCwd) {
404
+ const cwd = validateBoundedText({
405
+ value: rawCwd,
406
+ field: "Working directory",
407
+ maxLength: MAX_CWD_LENGTH
408
+ });
409
+ if (!isAbsolute(cwd)) failInvalidOption(`Working directory must be an absolute path. Received "${cwd}".`);
410
+ return cwd;
411
+ }
412
+ function validateRuntimeTimeoutSecondsInput(rawTimeout) {
413
+ if (typeof rawTimeout !== "number" || !Number.isFinite(rawTimeout)) failInvalidOption("Timeout must be a positive integer in seconds.");
414
+ const timeout = Math.round(rawTimeout);
415
+ if (timeout < MIN_TIMEOUT_SECONDS || timeout > MAX_TIMEOUT_SECONDS) failInvalidOption(`Timeout must be between ${MIN_TIMEOUT_SECONDS} and ${MAX_TIMEOUT_SECONDS} seconds.`);
416
+ return timeout;
417
+ }
418
+ function parseRuntimeTimeoutSecondsInput(rawTimeout) {
419
+ const normalized = normalizeText(rawTimeout);
420
+ if (!normalized || !/^\d+$/.test(normalized)) failInvalidOption("Timeout must be a positive integer in seconds.");
421
+ return validateRuntimeTimeoutSecondsInput(Number.parseInt(normalized, 10));
422
+ }
423
+ function validateRuntimeConfigOptionInput(rawKey, rawValue) {
424
+ return {
425
+ key: validateBackendOptionKey(rawKey),
426
+ value: validateBackendOptionValue(rawValue)
427
+ };
428
+ }
429
+ function validateRuntimeOptionPatch(patch) {
430
+ if (!patch) return {};
431
+ const rawPatch = patch;
432
+ const allowedKeys = new Set([
433
+ "runtimeMode",
434
+ "model",
435
+ "cwd",
436
+ "permissionProfile",
437
+ "timeoutSeconds",
438
+ "backendExtras"
439
+ ]);
440
+ for (const key of Object.keys(rawPatch)) if (!allowedKeys.has(key)) failInvalidOption(`Unknown runtime option "${key}".`);
441
+ const next = {};
442
+ if (Object.hasOwn(rawPatch, "runtimeMode")) if (rawPatch.runtimeMode === void 0) next.runtimeMode = void 0;
443
+ else next.runtimeMode = validateRuntimeModeInput(rawPatch.runtimeMode);
444
+ if (Object.hasOwn(rawPatch, "model")) if (rawPatch.model === void 0) next.model = void 0;
445
+ else next.model = validateRuntimeModelInput(rawPatch.model);
446
+ if (Object.hasOwn(rawPatch, "cwd")) if (rawPatch.cwd === void 0) next.cwd = void 0;
447
+ else next.cwd = validateRuntimeCwdInput(rawPatch.cwd);
448
+ if (Object.hasOwn(rawPatch, "permissionProfile")) if (rawPatch.permissionProfile === void 0) next.permissionProfile = void 0;
449
+ else next.permissionProfile = validateRuntimePermissionProfileInput(rawPatch.permissionProfile);
450
+ if (Object.hasOwn(rawPatch, "timeoutSeconds")) if (rawPatch.timeoutSeconds === void 0) next.timeoutSeconds = void 0;
451
+ else next.timeoutSeconds = validateRuntimeTimeoutSecondsInput(rawPatch.timeoutSeconds);
452
+ if (Object.hasOwn(rawPatch, "backendExtras")) {
453
+ const rawExtras = rawPatch.backendExtras;
454
+ if (rawExtras === void 0) next.backendExtras = void 0;
455
+ else if (!rawExtras || typeof rawExtras !== "object" || Array.isArray(rawExtras)) failInvalidOption("Backend extras must be a key/value object.");
456
+ else {
457
+ const entries = Object.entries(rawExtras);
458
+ if (entries.length > MAX_BACKEND_EXTRAS) failInvalidOption(`Backend extras must include at most ${MAX_BACKEND_EXTRAS} entries.`);
459
+ const extras = {};
460
+ for (const [entryKey, entryValue] of entries) {
461
+ const { key, value } = validateRuntimeConfigOptionInput(entryKey, entryValue);
462
+ extras[key] = value;
463
+ }
464
+ next.backendExtras = Object.keys(extras).length > 0 ? extras : void 0;
465
+ }
466
+ }
467
+ return next;
468
+ }
469
+ function normalizeText(value) {
470
+ if (typeof value !== "string") return;
471
+ return value.trim() || void 0;
472
+ }
473
+ function normalizeRuntimeOptions(options) {
474
+ const runtimeMode = normalizeText(options?.runtimeMode);
475
+ const model = normalizeText(options?.model);
476
+ const cwd = normalizeText(options?.cwd);
477
+ const permissionProfile = normalizeText(options?.permissionProfile);
478
+ let timeoutSeconds;
479
+ if (typeof options?.timeoutSeconds === "number" && Number.isFinite(options.timeoutSeconds)) {
480
+ const rounded = Math.round(options.timeoutSeconds);
481
+ if (rounded > 0) timeoutSeconds = rounded;
482
+ }
483
+ const backendExtrasEntries = Object.entries(options?.backendExtras ?? {}).map(([key, value]) => [normalizeText(key), normalizeText(value)]).filter(([key, value]) => Boolean(key && value));
484
+ const backendExtras = backendExtrasEntries.length > 0 ? Object.fromEntries(backendExtrasEntries) : void 0;
485
+ return {
486
+ ...runtimeMode ? { runtimeMode } : {},
487
+ ...model ? { model } : {},
488
+ ...cwd ? { cwd } : {},
489
+ ...permissionProfile ? { permissionProfile } : {},
490
+ ...typeof timeoutSeconds === "number" ? { timeoutSeconds } : {},
491
+ ...backendExtras ? { backendExtras } : {}
492
+ };
493
+ }
494
+ function mergeRuntimeOptions(params) {
495
+ const current = normalizeRuntimeOptions(params.current);
496
+ const patch = normalizeRuntimeOptions(validateRuntimeOptionPatch(params.patch));
497
+ const mergedExtras = {
498
+ ...current.backendExtras,
499
+ ...patch.backendExtras
500
+ };
501
+ return normalizeRuntimeOptions({
502
+ ...current,
503
+ ...patch,
504
+ ...Object.keys(mergedExtras).length > 0 ? { backendExtras: mergedExtras } : {}
505
+ });
506
+ }
507
+ function resolveRuntimeOptionsFromMeta(meta) {
508
+ const normalized = normalizeRuntimeOptions(meta.runtimeOptions);
509
+ if (normalized.cwd || !meta.cwd) return normalized;
510
+ return normalizeRuntimeOptions({
511
+ ...normalized,
512
+ cwd: meta.cwd
513
+ });
514
+ }
515
+ function runtimeOptionsEqual(a, b) {
516
+ return JSON.stringify(normalizeRuntimeOptions(a)) === JSON.stringify(normalizeRuntimeOptions(b));
517
+ }
518
+ function buildRuntimeControlSignature(options) {
519
+ const normalized = normalizeRuntimeOptions(options);
520
+ const extras = Object.entries(normalized.backendExtras ?? {}).toSorted(([a], [b]) => a.localeCompare(b));
521
+ return JSON.stringify({
522
+ runtimeMode: normalized.runtimeMode ?? null,
523
+ model: normalized.model ?? null,
524
+ permissionProfile: normalized.permissionProfile ?? null,
525
+ timeoutSeconds: normalized.timeoutSeconds ?? null,
526
+ backendExtras: extras
527
+ });
528
+ }
529
+ function buildRuntimeConfigOptionPairs(options) {
530
+ const normalized = normalizeRuntimeOptions(options);
531
+ const pairs = /* @__PURE__ */ new Map();
532
+ if (normalized.model) pairs.set("model", normalized.model);
533
+ if (normalized.permissionProfile) pairs.set("approval_policy", normalized.permissionProfile);
534
+ if (typeof normalized.timeoutSeconds === "number") pairs.set("timeout", String(normalized.timeoutSeconds));
535
+ for (const [key, value] of Object.entries(normalized.backendExtras ?? {})) if (!pairs.has(key)) pairs.set(key, value);
536
+ return [...pairs.entries()];
537
+ }
538
+ function inferRuntimeOptionPatchFromConfigOption(key, value) {
539
+ const validated = validateRuntimeConfigOptionInput(key, value);
540
+ const normalizedKey = validated.key.toLowerCase();
541
+ if (normalizedKey === "model") return { model: validateRuntimeModelInput(validated.value) };
542
+ if (normalizedKey === "approval_policy" || normalizedKey === "permission_profile" || normalizedKey === "permissions") return { permissionProfile: validateRuntimePermissionProfileInput(validated.value) };
543
+ if (normalizedKey === "timeout" || normalizedKey === "timeout_seconds") return { timeoutSeconds: parseRuntimeTimeoutSecondsInput(validated.value) };
544
+ if (normalizedKey === "cwd") return { cwd: validateRuntimeCwdInput(validated.value) };
545
+ return { backendExtras: { [validated.key]: validated.value } };
546
+ }
547
+ //#endregion
548
+ //#region src/acp/control-plane/manager.runtime-controls.ts
549
+ async function resolveManagerRuntimeCapabilities(params) {
550
+ let reported;
551
+ if (params.runtime.getCapabilities) reported = await withAcpRuntimeErrorBoundary({
552
+ run: async () => await params.runtime.getCapabilities({ handle: params.handle }),
553
+ fallbackCode: "ACP_TURN_FAILED",
554
+ fallbackMessage: "Could not read ACP runtime capabilities."
555
+ });
556
+ const controls = new Set(reported?.controls ?? []);
557
+ if (params.runtime.setMode) controls.add("session/set_mode");
558
+ if (params.runtime.setConfigOption) controls.add("session/set_config_option");
559
+ if (params.runtime.getStatus) controls.add("session/status");
560
+ const normalizedKeys = (reported?.configOptionKeys ?? []).map((entry) => normalizeText(entry)).filter(Boolean);
561
+ return {
562
+ controls: [...controls].toSorted(),
563
+ ...normalizedKeys.length > 0 ? { configOptionKeys: normalizedKeys } : {}
564
+ };
565
+ }
566
+ async function applyManagerRuntimeControls(params) {
567
+ const options = resolveRuntimeOptionsFromMeta(params.meta);
568
+ const signature = buildRuntimeControlSignature(options);
569
+ const cached = params.getCachedRuntimeState(params.sessionKey);
570
+ if (cached?.appliedControlSignature === signature) return;
571
+ const capabilities = await resolveManagerRuntimeCapabilities({
572
+ runtime: params.runtime,
573
+ handle: params.handle
574
+ });
575
+ const backend = params.handle.backend || params.meta.backend;
576
+ const runtimeMode = normalizeText(options.runtimeMode);
577
+ const configOptions = buildRuntimeConfigOptionPairs(options);
578
+ const advertisedKeys = new Set((capabilities.configOptionKeys ?? []).map((entry) => normalizeText(entry)).filter(Boolean));
579
+ await withAcpRuntimeErrorBoundary({
580
+ run: async () => {
581
+ if (runtimeMode) {
582
+ if (!capabilities.controls.includes("session/set_mode") || !params.runtime.setMode) throw createUnsupportedControlError({
583
+ backend,
584
+ control: "session/set_mode"
585
+ });
586
+ await params.runtime.setMode({
587
+ handle: params.handle,
588
+ mode: runtimeMode
589
+ });
590
+ }
591
+ if (configOptions.length > 0) {
592
+ if (!capabilities.controls.includes("session/set_config_option") || !params.runtime.setConfigOption) throw createUnsupportedControlError({
593
+ backend,
594
+ control: "session/set_config_option"
595
+ });
596
+ for (const [key, value] of configOptions) {
597
+ if (advertisedKeys.size > 0 && !advertisedKeys.has(key)) throw new AcpRuntimeError("ACP_BACKEND_UNSUPPORTED_CONTROL", `ACP backend "${backend}" does not accept config key "${key}".`);
598
+ await params.runtime.setConfigOption({
599
+ handle: params.handle,
600
+ key,
601
+ value
602
+ });
603
+ }
604
+ }
605
+ },
606
+ fallbackCode: "ACP_TURN_FAILED",
607
+ fallbackMessage: "Could not apply ACP runtime options before turn execution."
608
+ });
609
+ if (cached) cached.appliedControlSignature = signature;
610
+ }
611
+ //#endregion
612
+ //#region src/acp/runtime/registry.ts
613
+ const ACP_RUNTIME_REGISTRY_STATE_KEY = Symbol.for("openclaw.acpRuntimeRegistryState");
614
+ function createAcpRuntimeRegistryGlobalState() {
615
+ return { backendsById: /* @__PURE__ */ new Map() };
616
+ }
617
+ function resolveAcpRuntimeRegistryGlobalState() {
618
+ const runtimeGlobal = globalThis;
619
+ if (!runtimeGlobal[ACP_RUNTIME_REGISTRY_STATE_KEY]) runtimeGlobal[ACP_RUNTIME_REGISTRY_STATE_KEY] = createAcpRuntimeRegistryGlobalState();
620
+ return runtimeGlobal[ACP_RUNTIME_REGISTRY_STATE_KEY];
621
+ }
622
+ const ACP_BACKENDS_BY_ID = resolveAcpRuntimeRegistryGlobalState().backendsById;
623
+ function normalizeBackendId(id) {
624
+ return id?.trim().toLowerCase() || "";
625
+ }
626
+ function isBackendHealthy(backend) {
627
+ if (!backend.healthy) return true;
628
+ try {
629
+ return backend.healthy();
630
+ } catch {
631
+ return false;
632
+ }
633
+ }
634
+ function registerAcpRuntimeBackend(backend) {
635
+ const id = normalizeBackendId(backend.id);
636
+ if (!id) throw new Error("ACP runtime backend id is required");
637
+ if (!backend.runtime) throw new Error(`ACP runtime backend "${id}" is missing runtime implementation`);
638
+ ACP_BACKENDS_BY_ID.set(id, {
639
+ ...backend,
640
+ id
641
+ });
642
+ }
643
+ function unregisterAcpRuntimeBackend(id) {
644
+ const normalized = normalizeBackendId(id);
645
+ if (!normalized) return;
646
+ ACP_BACKENDS_BY_ID.delete(normalized);
647
+ }
648
+ function getAcpRuntimeBackend(id) {
649
+ const normalized = normalizeBackendId(id);
650
+ if (normalized) return ACP_BACKENDS_BY_ID.get(normalized) ?? null;
651
+ if (ACP_BACKENDS_BY_ID.size === 0) return null;
652
+ for (const backend of ACP_BACKENDS_BY_ID.values()) if (isBackendHealthy(backend)) return backend;
653
+ return ACP_BACKENDS_BY_ID.values().next().value ?? null;
654
+ }
655
+ function requireAcpRuntimeBackend(id) {
656
+ const normalized = normalizeBackendId(id);
657
+ const backend = getAcpRuntimeBackend(normalized || void 0);
658
+ if (!backend) throw new AcpRuntimeError("ACP_BACKEND_MISSING", "ACP runtime backend is not configured. Install and enable the acpx runtime plugin.");
659
+ if (!isBackendHealthy(backend)) throw new AcpRuntimeError("ACP_BACKEND_UNAVAILABLE", "ACP runtime backend is currently unavailable. Try again in a moment.");
660
+ if (normalized && backend.id !== normalized) throw new AcpRuntimeError("ACP_BACKEND_MISSING", `ACP runtime backend "${normalized}" is not registered.`);
661
+ return backend;
662
+ }
663
+ //#endregion
664
+ //#region src/acp/runtime/session-meta.ts
665
+ function resolveStoreSessionKey(store, sessionKey) {
666
+ const normalized = sessionKey.trim();
667
+ if (!normalized) return "";
668
+ if (store[normalized]) return normalized;
669
+ const lower = normalized.toLowerCase();
670
+ if (store[lower]) return lower;
671
+ for (const key of Object.keys(store)) if (key.toLowerCase() === lower) return key;
672
+ return lower;
673
+ }
674
+ function resolveSessionStorePathForAcp(params) {
675
+ const cfg = params.cfg ?? loadConfig();
676
+ const parsed = parseAgentSessionKey(params.sessionKey);
677
+ return {
678
+ cfg,
679
+ storePath: resolveStorePath(cfg.session?.store, { agentId: parsed?.agentId })
680
+ };
681
+ }
682
+ function readAcpSessionEntry(params) {
683
+ const sessionKey = params.sessionKey.trim();
684
+ if (!sessionKey) return null;
685
+ const { cfg, storePath } = resolveSessionStorePathForAcp({
686
+ sessionKey,
687
+ cfg: params.cfg
688
+ });
689
+ let store;
690
+ let storeReadFailed = false;
691
+ try {
692
+ store = loadSessionStore(storePath);
693
+ } catch {
694
+ storeReadFailed = true;
695
+ store = {};
696
+ }
697
+ const storeSessionKey = resolveStoreSessionKey(store, sessionKey);
698
+ const entry = store[storeSessionKey];
699
+ return {
700
+ cfg,
701
+ storePath,
702
+ sessionKey,
703
+ storeSessionKey,
704
+ entry,
705
+ acp: entry?.acp,
706
+ storeReadFailed
707
+ };
708
+ }
709
+ async function listAcpSessionEntries(params) {
710
+ const cfg = params.cfg ?? loadConfig();
711
+ const storeTargets = await resolveAllAgentSessionStoreTargets(cfg, params.env ? { env: params.env } : void 0);
712
+ const entries = [];
713
+ for (const target of storeTargets) {
714
+ const storePath = target.storePath;
715
+ let store;
716
+ try {
717
+ store = loadSessionStore(storePath);
718
+ } catch {
719
+ continue;
720
+ }
721
+ for (const [sessionKey, entry] of Object.entries(store)) {
722
+ if (!entry?.acp) continue;
723
+ entries.push({
724
+ cfg,
725
+ storePath,
726
+ sessionKey,
727
+ storeSessionKey: sessionKey,
728
+ entry,
729
+ acp: entry.acp
730
+ });
731
+ }
732
+ }
733
+ return entries;
734
+ }
735
+ async function upsertAcpSessionMeta(params) {
736
+ const sessionKey = params.sessionKey.trim();
737
+ if (!sessionKey) return null;
738
+ const { storePath } = resolveSessionStorePathForAcp({
739
+ sessionKey,
740
+ cfg: params.cfg
741
+ });
742
+ return await updateSessionStore(storePath, (store) => {
743
+ const storeSessionKey = resolveStoreSessionKey(store, sessionKey);
744
+ const currentEntry = store[storeSessionKey];
745
+ const nextMeta = params.mutate(currentEntry?.acp, currentEntry);
746
+ if (nextMeta === void 0) return currentEntry ?? null;
747
+ if (nextMeta === null && !currentEntry) return null;
748
+ const nextEntry = mergeSessionEntry(currentEntry, { acp: nextMeta ?? void 0 });
749
+ if (nextMeta === null) delete nextEntry.acp;
750
+ store[storeSessionKey] = nextEntry;
751
+ return nextEntry;
752
+ }, {
753
+ activeSessionKey: sessionKey.toLowerCase(),
754
+ allowDropAcpMetaSessionKeys: [sessionKey]
755
+ });
756
+ }
757
+ //#endregion
758
+ //#region src/acp/control-plane/manager.types.ts
759
+ const DEFAULT_DEPS = {
760
+ listAcpSessions: listAcpSessionEntries,
761
+ readSessionEntry: readAcpSessionEntry,
762
+ upsertSessionMeta: upsertAcpSessionMeta,
763
+ requireRuntimeBackend: requireAcpRuntimeBackend
764
+ };
765
+ //#endregion
766
+ //#region src/acp/control-plane/runtime-cache.ts
767
+ var RuntimeCache = class {
768
+ constructor() {
769
+ this.cache = /* @__PURE__ */ new Map();
770
+ }
771
+ size() {
772
+ return this.cache.size;
773
+ }
774
+ has(actorKey) {
775
+ return this.cache.has(actorKey);
776
+ }
777
+ get(actorKey, params = {}) {
778
+ const entry = this.cache.get(actorKey);
779
+ if (!entry) return null;
780
+ if (params.touch !== false) entry.lastTouchedAt = params.now ?? Date.now();
781
+ return entry.state;
782
+ }
783
+ peek(actorKey) {
784
+ return this.get(actorKey, { touch: false });
785
+ }
786
+ getLastTouchedAt(actorKey) {
787
+ return this.cache.get(actorKey)?.lastTouchedAt ?? null;
788
+ }
789
+ set(actorKey, state, params = {}) {
790
+ this.cache.set(actorKey, {
791
+ state,
792
+ lastTouchedAt: params.now ?? Date.now()
793
+ });
794
+ }
795
+ clear(actorKey) {
796
+ this.cache.delete(actorKey);
797
+ }
798
+ snapshot(params = {}) {
799
+ const now = params.now ?? Date.now();
800
+ const entries = [];
801
+ for (const [actorKey, entry] of this.cache.entries()) entries.push({
802
+ actorKey,
803
+ state: entry.state,
804
+ lastTouchedAt: entry.lastTouchedAt,
805
+ idleMs: Math.max(0, now - entry.lastTouchedAt)
806
+ });
807
+ return entries;
808
+ }
809
+ collectIdleCandidates(params) {
810
+ if (!Number.isFinite(params.maxIdleMs) || params.maxIdleMs <= 0) return [];
811
+ const now = params.now ?? Date.now();
812
+ return this.snapshot({ now }).filter((entry) => entry.idleMs >= params.maxIdleMs);
813
+ }
814
+ };
815
+ //#endregion
816
+ //#region src/acp/control-plane/session-actor-queue.ts
817
+ var SessionActorQueue = class {
818
+ constructor() {
819
+ this.queue = new KeyedAsyncQueue();
820
+ this.pendingBySession = /* @__PURE__ */ new Map();
821
+ }
822
+ getTailMapForTesting() {
823
+ return this.queue.getTailMapForTesting();
824
+ }
825
+ getTotalPendingCount() {
826
+ let total = 0;
827
+ for (const count of this.pendingBySession.values()) total += count;
828
+ return total;
829
+ }
830
+ getPendingCountForSession(actorKey) {
831
+ return this.pendingBySession.get(actorKey) ?? 0;
832
+ }
833
+ async run(actorKey, op) {
834
+ return this.queue.enqueue(actorKey, op, {
835
+ onEnqueue: () => {
836
+ this.pendingBySession.set(actorKey, (this.pendingBySession.get(actorKey) ?? 0) + 1);
837
+ },
838
+ onSettle: () => {
839
+ const pending = (this.pendingBySession.get(actorKey) ?? 1) - 1;
840
+ if (pending <= 0) this.pendingBySession.delete(actorKey);
841
+ else this.pendingBySession.set(actorKey, pending);
842
+ }
843
+ });
844
+ }
845
+ };
846
+ //#endregion
847
+ //#region src/acp/control-plane/manager.core.ts
848
+ const ACP_TURN_TIMEOUT_GRACE_MS = 1e3;
849
+ const ACP_TURN_TIMEOUT_CLEANUP_GRACE_MS = 2e3;
850
+ const ACP_TURN_TIMEOUT_REASON = "turn-timeout";
851
+ var AcpSessionManager = class {
852
+ constructor(deps = DEFAULT_DEPS) {
853
+ this.deps = deps;
854
+ this.actorQueue = new SessionActorQueue();
855
+ this.actorTailBySession = this.actorQueue.getTailMapForTesting();
856
+ this.runtimeCache = new RuntimeCache();
857
+ this.activeTurnBySession = /* @__PURE__ */ new Map();
858
+ this.turnLatencyStats = {
859
+ completed: 0,
860
+ failed: 0,
861
+ totalMs: 0,
862
+ maxMs: 0
863
+ };
864
+ this.errorCountsByCode = /* @__PURE__ */ new Map();
865
+ this.evictedRuntimeCount = 0;
866
+ }
867
+ resolveSession(params) {
868
+ const sessionKey = canonicalizeAcpSessionKey(params);
869
+ if (!sessionKey) return {
870
+ kind: "none",
871
+ sessionKey
872
+ };
873
+ const acp = this.deps.readSessionEntry({
874
+ cfg: params.cfg,
875
+ sessionKey
876
+ })?.acp;
877
+ if (acp) return {
878
+ kind: "ready",
879
+ sessionKey,
880
+ meta: acp
881
+ };
882
+ if (isAcpSessionKey(sessionKey)) return {
883
+ kind: "stale",
884
+ sessionKey,
885
+ error: resolveMissingMetaError(sessionKey)
886
+ };
887
+ return {
888
+ kind: "none",
889
+ sessionKey
890
+ };
891
+ }
892
+ getObservabilitySnapshot(cfg) {
893
+ const completedTurns = this.turnLatencyStats.completed + this.turnLatencyStats.failed;
894
+ const averageLatencyMs = completedTurns > 0 ? Math.round(this.turnLatencyStats.totalMs / completedTurns) : 0;
895
+ return {
896
+ runtimeCache: {
897
+ activeSessions: this.runtimeCache.size(),
898
+ idleTtlMs: resolveRuntimeIdleTtlMs(cfg),
899
+ evictedTotal: this.evictedRuntimeCount,
900
+ ...this.lastEvictedAt ? { lastEvictedAt: this.lastEvictedAt } : {}
901
+ },
902
+ turns: {
903
+ active: this.activeTurnBySession.size,
904
+ queueDepth: this.actorQueue.getTotalPendingCount(),
905
+ completed: this.turnLatencyStats.completed,
906
+ failed: this.turnLatencyStats.failed,
907
+ averageLatencyMs,
908
+ maxLatencyMs: this.turnLatencyStats.maxMs
909
+ },
910
+ errorsByCode: Object.fromEntries([...this.errorCountsByCode.entries()].toSorted(([a], [b]) => a.localeCompare(b)))
911
+ };
912
+ }
913
+ async reconcilePendingSessionIdentities(params) {
914
+ let checked = 0;
915
+ let resolved = 0;
916
+ let failed = 0;
917
+ let acpSessions;
918
+ try {
919
+ acpSessions = await this.deps.listAcpSessions({ cfg: params.cfg });
920
+ } catch (error) {
921
+ logVerbose(`acp-manager: startup identity scan failed: ${String(error)}`);
922
+ return {
923
+ checked,
924
+ resolved,
925
+ failed: failed + 1
926
+ };
927
+ }
928
+ for (const session of acpSessions) {
929
+ if (!session.acp || !session.sessionKey) continue;
930
+ if (!isSessionIdentityPending(resolveSessionIdentityFromMeta(session.acp))) continue;
931
+ checked += 1;
932
+ try {
933
+ if (await this.withSessionActor(session.sessionKey, async () => {
934
+ const resolution = this.resolveSession({
935
+ cfg: params.cfg,
936
+ sessionKey: session.sessionKey
937
+ });
938
+ if (resolution.kind !== "ready") return false;
939
+ const { runtime, handle, meta } = await this.ensureRuntimeHandle({
940
+ cfg: params.cfg,
941
+ sessionKey: session.sessionKey,
942
+ meta: resolution.meta
943
+ });
944
+ return !isSessionIdentityPending(resolveSessionIdentityFromMeta((await this.reconcileRuntimeSessionIdentifiers({
945
+ cfg: params.cfg,
946
+ sessionKey: session.sessionKey,
947
+ runtime,
948
+ handle,
949
+ meta,
950
+ failOnStatusError: false
951
+ })).meta));
952
+ })) resolved += 1;
953
+ } catch (error) {
954
+ failed += 1;
955
+ logVerbose(`acp-manager: startup identity reconcile failed for ${session.sessionKey}: ${String(error)}`);
956
+ }
957
+ }
958
+ return {
959
+ checked,
960
+ resolved,
961
+ failed
962
+ };
963
+ }
964
+ async initializeSession(input) {
965
+ const sessionKey = canonicalizeAcpSessionKey({
966
+ cfg: input.cfg,
967
+ sessionKey: input.sessionKey
968
+ });
969
+ if (!sessionKey) throw new AcpRuntimeError("ACP_SESSION_INIT_FAILED", "ACP session key is required.");
970
+ const agent = normalizeAgentId(input.agent);
971
+ await this.evictIdleRuntimeHandles({ cfg: input.cfg });
972
+ return await this.withSessionActor(sessionKey, async () => {
973
+ const backend = this.deps.requireRuntimeBackend(input.backendId || input.cfg.acp?.backend);
974
+ const runtime = backend.runtime;
975
+ const initialRuntimeOptions = validateRuntimeOptionPatch({ cwd: input.cwd });
976
+ const requestedCwd = initialRuntimeOptions.cwd;
977
+ this.enforceConcurrentSessionLimit({
978
+ cfg: input.cfg,
979
+ sessionKey
980
+ });
981
+ const handle = await withAcpRuntimeErrorBoundary({
982
+ run: async () => await runtime.ensureSession({
983
+ sessionKey,
984
+ agent,
985
+ mode: input.mode,
986
+ resumeSessionId: input.resumeSessionId,
987
+ cwd: requestedCwd
988
+ }),
989
+ fallbackCode: "ACP_SESSION_INIT_FAILED",
990
+ fallbackMessage: "Could not initialize ACP session runtime."
991
+ });
992
+ const effectiveCwd = normalizeText(handle.cwd) ?? requestedCwd;
993
+ const effectiveRuntimeOptions = normalizeRuntimeOptions({
994
+ ...initialRuntimeOptions,
995
+ ...effectiveCwd ? { cwd: effectiveCwd } : {}
996
+ });
997
+ const identityNow = Date.now();
998
+ const initializedIdentity = mergeSessionIdentity({
999
+ current: void 0,
1000
+ incoming: createIdentityFromEnsure({
1001
+ handle,
1002
+ now: identityNow
1003
+ }),
1004
+ now: identityNow
1005
+ }) ?? {
1006
+ state: "pending",
1007
+ source: "ensure",
1008
+ lastUpdatedAt: identityNow
1009
+ };
1010
+ const meta = {
1011
+ backend: handle.backend || backend.id,
1012
+ agent,
1013
+ runtimeSessionName: handle.runtimeSessionName,
1014
+ identity: initializedIdentity,
1015
+ mode: input.mode,
1016
+ ...Object.keys(effectiveRuntimeOptions).length > 0 ? { runtimeOptions: effectiveRuntimeOptions } : {},
1017
+ cwd: effectiveCwd,
1018
+ state: "idle",
1019
+ lastActivityAt: Date.now()
1020
+ };
1021
+ try {
1022
+ if (!(await this.writeSessionMeta({
1023
+ cfg: input.cfg,
1024
+ sessionKey,
1025
+ mutate: () => meta,
1026
+ failOnError: true
1027
+ }))?.acp) throw new AcpRuntimeError("ACP_SESSION_INIT_FAILED", `Could not persist ACP metadata for ${sessionKey}.`);
1028
+ } catch (error) {
1029
+ await runtime.close({
1030
+ handle,
1031
+ reason: "init-meta-failed"
1032
+ }).catch((closeError) => {
1033
+ logVerbose(`acp-manager: cleanup close failed after metadata write error for ${sessionKey}: ${String(closeError)}`);
1034
+ });
1035
+ throw error;
1036
+ }
1037
+ this.setCachedRuntimeState(sessionKey, {
1038
+ runtime,
1039
+ handle,
1040
+ backend: handle.backend || backend.id,
1041
+ agent,
1042
+ mode: input.mode,
1043
+ cwd: effectiveCwd
1044
+ });
1045
+ return {
1046
+ runtime,
1047
+ handle,
1048
+ meta
1049
+ };
1050
+ });
1051
+ }
1052
+ async getSessionStatus(params) {
1053
+ const sessionKey = canonicalizeAcpSessionKey(params);
1054
+ if (!sessionKey) throw new AcpRuntimeError("ACP_SESSION_INIT_FAILED", "ACP session key is required.");
1055
+ this.throwIfAborted(params.signal);
1056
+ await this.evictIdleRuntimeHandles({ cfg: params.cfg });
1057
+ return await this.withSessionActor(sessionKey, async () => {
1058
+ this.throwIfAborted(params.signal);
1059
+ const resolvedMeta = requireReadySessionMeta(this.resolveSession({
1060
+ cfg: params.cfg,
1061
+ sessionKey
1062
+ }));
1063
+ const { runtime, handle: ensuredHandle, meta: ensuredMeta } = await this.ensureRuntimeHandle({
1064
+ cfg: params.cfg,
1065
+ sessionKey,
1066
+ meta: resolvedMeta
1067
+ });
1068
+ let handle = ensuredHandle;
1069
+ let meta = ensuredMeta;
1070
+ const capabilities = await this.resolveRuntimeCapabilities({
1071
+ runtime,
1072
+ handle
1073
+ });
1074
+ let runtimeStatus;
1075
+ if (runtime.getStatus) runtimeStatus = await withAcpRuntimeErrorBoundary({
1076
+ run: async () => {
1077
+ this.throwIfAborted(params.signal);
1078
+ const status = await runtime.getStatus({
1079
+ handle,
1080
+ ...params.signal ? { signal: params.signal } : {}
1081
+ });
1082
+ this.throwIfAborted(params.signal);
1083
+ return status;
1084
+ },
1085
+ fallbackCode: "ACP_TURN_FAILED",
1086
+ fallbackMessage: "Could not read ACP runtime status."
1087
+ });
1088
+ ({handle, meta, runtimeStatus} = await this.reconcileRuntimeSessionIdentifiers({
1089
+ cfg: params.cfg,
1090
+ sessionKey,
1091
+ runtime,
1092
+ handle,
1093
+ meta,
1094
+ runtimeStatus,
1095
+ failOnStatusError: true
1096
+ }));
1097
+ const identity = resolveSessionIdentityFromMeta(meta);
1098
+ return {
1099
+ sessionKey,
1100
+ backend: handle.backend || meta.backend,
1101
+ agent: meta.agent,
1102
+ ...identity ? { identity } : {},
1103
+ state: meta.state,
1104
+ mode: meta.mode,
1105
+ runtimeOptions: resolveRuntimeOptionsFromMeta(meta),
1106
+ capabilities,
1107
+ runtimeStatus,
1108
+ lastActivityAt: meta.lastActivityAt,
1109
+ lastError: meta.lastError
1110
+ };
1111
+ }, params.signal);
1112
+ }
1113
+ async setSessionRuntimeMode(params) {
1114
+ const sessionKey = canonicalizeAcpSessionKey(params);
1115
+ if (!sessionKey) throw new AcpRuntimeError("ACP_SESSION_INIT_FAILED", "ACP session key is required.");
1116
+ const runtimeMode = validateRuntimeModeInput(params.runtimeMode);
1117
+ await this.evictIdleRuntimeHandles({ cfg: params.cfg });
1118
+ return await this.withSessionActor(sessionKey, async () => {
1119
+ const resolvedMeta = requireReadySessionMeta(this.resolveSession({
1120
+ cfg: params.cfg,
1121
+ sessionKey
1122
+ }));
1123
+ const { runtime, handle, meta } = await this.ensureRuntimeHandle({
1124
+ cfg: params.cfg,
1125
+ sessionKey,
1126
+ meta: resolvedMeta
1127
+ });
1128
+ if (!(await this.resolveRuntimeCapabilities({
1129
+ runtime,
1130
+ handle
1131
+ })).controls.includes("session/set_mode") || !runtime.setMode) throw createUnsupportedControlError({
1132
+ backend: handle.backend || meta.backend,
1133
+ control: "session/set_mode"
1134
+ });
1135
+ await withAcpRuntimeErrorBoundary({
1136
+ run: async () => await runtime.setMode({
1137
+ handle,
1138
+ mode: runtimeMode
1139
+ }),
1140
+ fallbackCode: "ACP_TURN_FAILED",
1141
+ fallbackMessage: "Could not update ACP runtime mode."
1142
+ });
1143
+ const nextOptions = mergeRuntimeOptions({
1144
+ current: resolveRuntimeOptionsFromMeta(meta),
1145
+ patch: { runtimeMode }
1146
+ });
1147
+ await this.persistRuntimeOptions({
1148
+ cfg: params.cfg,
1149
+ sessionKey,
1150
+ options: nextOptions
1151
+ });
1152
+ return nextOptions;
1153
+ });
1154
+ }
1155
+ async setSessionConfigOption(params) {
1156
+ const sessionKey = canonicalizeAcpSessionKey(params);
1157
+ if (!sessionKey) throw new AcpRuntimeError("ACP_SESSION_INIT_FAILED", "ACP session key is required.");
1158
+ const normalizedOption = validateRuntimeConfigOptionInput(params.key, params.value);
1159
+ const key = normalizedOption.key;
1160
+ const value = normalizedOption.value;
1161
+ await this.evictIdleRuntimeHandles({ cfg: params.cfg });
1162
+ return await this.withSessionActor(sessionKey, async () => {
1163
+ const resolvedMeta = requireReadySessionMeta(this.resolveSession({
1164
+ cfg: params.cfg,
1165
+ sessionKey
1166
+ }));
1167
+ const { runtime, handle, meta } = await this.ensureRuntimeHandle({
1168
+ cfg: params.cfg,
1169
+ sessionKey,
1170
+ meta: resolvedMeta
1171
+ });
1172
+ const inferredPatch = inferRuntimeOptionPatchFromConfigOption(key, value);
1173
+ const capabilities = await this.resolveRuntimeCapabilities({
1174
+ runtime,
1175
+ handle
1176
+ });
1177
+ if (!capabilities.controls.includes("session/set_config_option") || !runtime.setConfigOption) throw createUnsupportedControlError({
1178
+ backend: handle.backend || meta.backend,
1179
+ control: "session/set_config_option"
1180
+ });
1181
+ const advertisedKeys = new Set((capabilities.configOptionKeys ?? []).map((entry) => normalizeText(entry)).filter(Boolean));
1182
+ if (advertisedKeys.size > 0 && !advertisedKeys.has(key)) throw new AcpRuntimeError("ACP_BACKEND_UNSUPPORTED_CONTROL", `ACP backend "${handle.backend || meta.backend}" does not accept config key "${key}".`);
1183
+ await withAcpRuntimeErrorBoundary({
1184
+ run: async () => await runtime.setConfigOption({
1185
+ handle,
1186
+ key,
1187
+ value
1188
+ }),
1189
+ fallbackCode: "ACP_TURN_FAILED",
1190
+ fallbackMessage: "Could not update ACP runtime config option."
1191
+ });
1192
+ const nextOptions = mergeRuntimeOptions({
1193
+ current: resolveRuntimeOptionsFromMeta(meta),
1194
+ patch: inferredPatch
1195
+ });
1196
+ await this.persistRuntimeOptions({
1197
+ cfg: params.cfg,
1198
+ sessionKey,
1199
+ options: nextOptions
1200
+ });
1201
+ return nextOptions;
1202
+ });
1203
+ }
1204
+ async updateSessionRuntimeOptions(params) {
1205
+ const sessionKey = canonicalizeAcpSessionKey(params);
1206
+ const validatedPatch = validateRuntimeOptionPatch(params.patch);
1207
+ if (!sessionKey) throw new AcpRuntimeError("ACP_SESSION_INIT_FAILED", "ACP session key is required.");
1208
+ await this.evictIdleRuntimeHandles({ cfg: params.cfg });
1209
+ return await this.withSessionActor(sessionKey, async () => {
1210
+ const nextOptions = mergeRuntimeOptions({
1211
+ current: resolveRuntimeOptionsFromMeta(requireReadySessionMeta(this.resolveSession({
1212
+ cfg: params.cfg,
1213
+ sessionKey
1214
+ }))),
1215
+ patch: validatedPatch
1216
+ });
1217
+ await this.persistRuntimeOptions({
1218
+ cfg: params.cfg,
1219
+ sessionKey,
1220
+ options: nextOptions
1221
+ });
1222
+ return nextOptions;
1223
+ });
1224
+ }
1225
+ async resetSessionRuntimeOptions(params) {
1226
+ const sessionKey = canonicalizeAcpSessionKey(params);
1227
+ if (!sessionKey) throw new AcpRuntimeError("ACP_SESSION_INIT_FAILED", "ACP session key is required.");
1228
+ await this.evictIdleRuntimeHandles({ cfg: params.cfg });
1229
+ return await this.withSessionActor(sessionKey, async () => {
1230
+ const resolvedMeta = requireReadySessionMeta(this.resolveSession({
1231
+ cfg: params.cfg,
1232
+ sessionKey
1233
+ }));
1234
+ const { runtime, handle } = await this.ensureRuntimeHandle({
1235
+ cfg: params.cfg,
1236
+ sessionKey,
1237
+ meta: resolvedMeta
1238
+ });
1239
+ await withAcpRuntimeErrorBoundary({
1240
+ run: async () => await runtime.close({
1241
+ handle,
1242
+ reason: "reset-runtime-options"
1243
+ }),
1244
+ fallbackCode: "ACP_TURN_FAILED",
1245
+ fallbackMessage: "Could not reset ACP runtime options."
1246
+ });
1247
+ this.clearCachedRuntimeState(sessionKey);
1248
+ await this.persistRuntimeOptions({
1249
+ cfg: params.cfg,
1250
+ sessionKey,
1251
+ options: {}
1252
+ });
1253
+ return {};
1254
+ });
1255
+ }
1256
+ async runTurn(input) {
1257
+ const sessionKey = canonicalizeAcpSessionKey({
1258
+ cfg: input.cfg,
1259
+ sessionKey: input.sessionKey
1260
+ });
1261
+ if (!sessionKey) throw new AcpRuntimeError("ACP_SESSION_INIT_FAILED", "ACP session key is required.");
1262
+ await this.evictIdleRuntimeHandles({ cfg: input.cfg });
1263
+ await this.withSessionActor(sessionKey, async () => {
1264
+ const turnStartedAt = Date.now();
1265
+ const actorKey = normalizeActorKey(sessionKey);
1266
+ for (let attempt = 0; attempt < 2; attempt += 1) {
1267
+ const resolvedMeta = requireReadySessionMeta(this.resolveSession({
1268
+ cfg: input.cfg,
1269
+ sessionKey
1270
+ }));
1271
+ let runtime;
1272
+ let handle;
1273
+ let meta;
1274
+ let activeTurn;
1275
+ let internalAbortController;
1276
+ let onCallerAbort;
1277
+ let activeTurnStarted = false;
1278
+ let sawTurnOutput = false;
1279
+ let retryFreshHandle = false;
1280
+ let skipPostTurnCleanup = false;
1281
+ try {
1282
+ const ensured = await this.ensureRuntimeHandle({
1283
+ cfg: input.cfg,
1284
+ sessionKey,
1285
+ meta: resolvedMeta
1286
+ });
1287
+ runtime = ensured.runtime;
1288
+ handle = ensured.handle;
1289
+ meta = ensured.meta;
1290
+ await this.applyRuntimeControls({
1291
+ sessionKey,
1292
+ runtime,
1293
+ handle,
1294
+ meta
1295
+ });
1296
+ await this.setSessionState({
1297
+ cfg: input.cfg,
1298
+ sessionKey,
1299
+ state: "running",
1300
+ clearLastError: true
1301
+ });
1302
+ internalAbortController = new AbortController();
1303
+ onCallerAbort = () => {
1304
+ internalAbortController?.abort();
1305
+ };
1306
+ if (input.signal?.aborted) internalAbortController.abort();
1307
+ else if (input.signal) input.signal.addEventListener("abort", onCallerAbort, { once: true });
1308
+ activeTurn = {
1309
+ runtime,
1310
+ handle,
1311
+ abortController: internalAbortController
1312
+ };
1313
+ this.activeTurnBySession.set(actorKey, activeTurn);
1314
+ activeTurnStarted = true;
1315
+ let streamError = null;
1316
+ const combinedSignal = input.signal && typeof AbortSignal.any === "function" ? AbortSignal.any([input.signal, internalAbortController.signal]) : internalAbortController.signal;
1317
+ const eventGate = { open: true };
1318
+ const turnPromise = (async () => {
1319
+ for await (const event of runtime.runTurn({
1320
+ handle,
1321
+ text: input.text,
1322
+ attachments: input.attachments,
1323
+ mode: input.mode,
1324
+ requestId: input.requestId,
1325
+ signal: combinedSignal
1326
+ })) {
1327
+ if (!eventGate.open) continue;
1328
+ if (event.type === "error") streamError = new AcpRuntimeError(normalizeAcpErrorCode(event.code), event.message?.trim() || "ACP turn failed before completion.");
1329
+ else if (event.type === "text_delta" || event.type === "tool_call") sawTurnOutput = true;
1330
+ if (input.onEvent) await input.onEvent(event);
1331
+ }
1332
+ if (eventGate.open && streamError) throw streamError;
1333
+ })();
1334
+ const turnTimeoutMs = this.resolveTurnTimeoutMs({
1335
+ cfg: input.cfg,
1336
+ meta
1337
+ });
1338
+ const sessionMode = meta.mode;
1339
+ await this.awaitTurnWithTimeout({
1340
+ sessionKey,
1341
+ turnPromise,
1342
+ timeoutMs: turnTimeoutMs + ACP_TURN_TIMEOUT_GRACE_MS,
1343
+ timeoutLabelMs: turnTimeoutMs,
1344
+ onTimeout: async () => {
1345
+ eventGate.open = false;
1346
+ skipPostTurnCleanup = true;
1347
+ if (!activeTurn) return;
1348
+ await this.cleanupTimedOutTurn({
1349
+ sessionKey,
1350
+ activeTurn,
1351
+ mode: sessionMode
1352
+ });
1353
+ }
1354
+ });
1355
+ if (streamError) throw streamError;
1356
+ this.recordTurnCompletion({ startedAt: turnStartedAt });
1357
+ await this.setSessionState({
1358
+ cfg: input.cfg,
1359
+ sessionKey,
1360
+ state: "idle",
1361
+ clearLastError: true
1362
+ });
1363
+ return;
1364
+ } catch (error) {
1365
+ const acpError = toAcpRuntimeError({
1366
+ error,
1367
+ fallbackCode: activeTurnStarted ? "ACP_TURN_FAILED" : "ACP_SESSION_INIT_FAILED",
1368
+ fallbackMessage: activeTurnStarted ? "ACP turn failed before completion." : "Could not initialize ACP session runtime."
1369
+ });
1370
+ retryFreshHandle = this.shouldRetryTurnWithFreshHandle({
1371
+ attempt,
1372
+ sessionKey,
1373
+ error: acpError,
1374
+ sawTurnOutput
1375
+ });
1376
+ if (retryFreshHandle) continue;
1377
+ this.recordTurnCompletion({
1378
+ startedAt: turnStartedAt,
1379
+ errorCode: acpError.code
1380
+ });
1381
+ await this.setSessionState({
1382
+ cfg: input.cfg,
1383
+ sessionKey,
1384
+ state: "error",
1385
+ lastError: acpError.message
1386
+ });
1387
+ throw acpError;
1388
+ } finally {
1389
+ if (input.signal && onCallerAbort) input.signal.removeEventListener("abort", onCallerAbort);
1390
+ if (activeTurn && this.activeTurnBySession.get(actorKey) === activeTurn) this.activeTurnBySession.delete(actorKey);
1391
+ if (!retryFreshHandle && !skipPostTurnCleanup && runtime && handle && meta && meta.mode !== "oneshot") ({handle} = await this.reconcileRuntimeSessionIdentifiers({
1392
+ cfg: input.cfg,
1393
+ sessionKey,
1394
+ runtime,
1395
+ handle,
1396
+ meta,
1397
+ failOnStatusError: false
1398
+ }));
1399
+ if (!retryFreshHandle && !skipPostTurnCleanup && runtime && handle && meta && meta.mode === "oneshot") try {
1400
+ await runtime.close({
1401
+ handle,
1402
+ reason: "oneshot-complete"
1403
+ });
1404
+ } catch (error) {
1405
+ logVerbose(`acp-manager: ACP oneshot close failed for ${sessionKey}: ${String(error)}`);
1406
+ } finally {
1407
+ this.clearCachedRuntimeState(sessionKey);
1408
+ }
1409
+ }
1410
+ if (retryFreshHandle) continue;
1411
+ }
1412
+ }, input.signal);
1413
+ }
1414
+ resolveTurnTimeoutMs(params) {
1415
+ const runtimeTimeoutSeconds = resolveRuntimeOptionsFromMeta(params.meta).timeoutSeconds;
1416
+ if (typeof runtimeTimeoutSeconds === "number" && Number.isFinite(runtimeTimeoutSeconds) && runtimeTimeoutSeconds > 0) return Math.max(1e3, Math.round(runtimeTimeoutSeconds * 1e3));
1417
+ return resolveAgentTimeoutMs({
1418
+ cfg: params.cfg,
1419
+ minMs: 1e3
1420
+ });
1421
+ }
1422
+ async awaitTurnWithTimeout(params) {
1423
+ const observedTurnPromise = params.turnPromise.then((value) => ({
1424
+ kind: "value",
1425
+ value
1426
+ }), (error) => ({
1427
+ kind: "error",
1428
+ error
1429
+ }));
1430
+ if (params.timeoutMs <= 0) {
1431
+ const outcome = await observedTurnPromise;
1432
+ if (outcome.kind === "error") throw outcome.error;
1433
+ return outcome.value;
1434
+ }
1435
+ const timeoutToken = Symbol("acp-turn-timeout");
1436
+ let timer;
1437
+ const timeoutPromise = new Promise((resolve) => {
1438
+ timer = setTimeout(() => resolve(timeoutToken), params.timeoutMs);
1439
+ timer.unref?.();
1440
+ });
1441
+ try {
1442
+ const outcome = await Promise.race([observedTurnPromise, timeoutPromise]);
1443
+ if (outcome === timeoutToken) {
1444
+ observedTurnPromise.then((lateOutcome) => {
1445
+ if (lateOutcome.kind === "error") logVerbose(`acp-manager: detached late turn error after timeout for ${params.sessionKey}: ${String(lateOutcome.error)}`);
1446
+ });
1447
+ await params.onTimeout();
1448
+ throw new AcpRuntimeError("ACP_TURN_FAILED", `ACP turn timed out after ${Math.max(1, Math.round(params.timeoutLabelMs / 1e3))}s.`);
1449
+ }
1450
+ if (outcome.kind === "error") throw outcome.error;
1451
+ return outcome.value;
1452
+ } finally {
1453
+ if (timer) clearTimeout(timer);
1454
+ }
1455
+ }
1456
+ async cleanupTimedOutTurn(params) {
1457
+ params.activeTurn.abortController.abort();
1458
+ if (!params.activeTurn.cancelPromise) params.activeTurn.cancelPromise = params.activeTurn.runtime.cancel({
1459
+ handle: params.activeTurn.handle,
1460
+ reason: ACP_TURN_TIMEOUT_REASON
1461
+ });
1462
+ const cancelFinished = await this.awaitCleanupWithGrace({
1463
+ sessionKey: params.sessionKey,
1464
+ label: "cancel",
1465
+ promise: params.activeTurn.cancelPromise
1466
+ });
1467
+ if (params.mode !== "oneshot") return;
1468
+ const closePromise = params.activeTurn.runtime.close({
1469
+ handle: params.activeTurn.handle,
1470
+ reason: ACP_TURN_TIMEOUT_REASON
1471
+ });
1472
+ const closeFinished = await this.awaitCleanupWithGrace({
1473
+ sessionKey: params.sessionKey,
1474
+ label: "close",
1475
+ promise: closePromise
1476
+ });
1477
+ if (cancelFinished && closeFinished) {
1478
+ this.clearCachedRuntimeStateIfHandleMatches({
1479
+ sessionKey: params.sessionKey,
1480
+ handle: params.activeTurn.handle
1481
+ });
1482
+ return;
1483
+ }
1484
+ Promise.allSettled([params.activeTurn.cancelPromise, closePromise]).then(() => {
1485
+ this.clearCachedRuntimeStateIfHandleMatches({
1486
+ sessionKey: params.sessionKey,
1487
+ handle: params.activeTurn.handle
1488
+ });
1489
+ });
1490
+ }
1491
+ async awaitCleanupWithGrace(params) {
1492
+ const observedCleanupPromise = params.promise.then(() => ({ kind: "done" }), (error) => ({
1493
+ kind: "error",
1494
+ error
1495
+ }));
1496
+ const timeoutToken = Symbol(`acp-timeout-${params.label}`);
1497
+ let timer;
1498
+ const timeoutPromise = new Promise((resolve) => {
1499
+ timer = setTimeout(() => resolve(timeoutToken), ACP_TURN_TIMEOUT_CLEANUP_GRACE_MS);
1500
+ timer.unref?.();
1501
+ });
1502
+ try {
1503
+ const outcome = await Promise.race([observedCleanupPromise, timeoutPromise]);
1504
+ if (outcome === timeoutToken) {
1505
+ observedCleanupPromise.then((lateOutcome) => {
1506
+ if (lateOutcome.kind === "error") logVerbose(`acp-manager: detached timed-out turn ${params.label} cleanup failed for ${params.sessionKey}: ${String(lateOutcome.error)}`);
1507
+ });
1508
+ logVerbose(`acp-manager: timed-out turn ${params.label} cleanup exceeded ${ACP_TURN_TIMEOUT_CLEANUP_GRACE_MS}ms for ${params.sessionKey}`);
1509
+ return false;
1510
+ }
1511
+ if (outcome.kind === "error") logVerbose(`acp-manager: timed-out turn ${params.label} cleanup failed for ${params.sessionKey}: ${String(outcome.error)}`);
1512
+ return true;
1513
+ } finally {
1514
+ if (timer) clearTimeout(timer);
1515
+ }
1516
+ }
1517
+ async cancelSession(params) {
1518
+ const sessionKey = canonicalizeAcpSessionKey(params);
1519
+ if (!sessionKey) throw new AcpRuntimeError("ACP_SESSION_INIT_FAILED", "ACP session key is required.");
1520
+ await this.evictIdleRuntimeHandles({ cfg: params.cfg });
1521
+ const actorKey = normalizeActorKey(sessionKey);
1522
+ const activeTurn = this.activeTurnBySession.get(actorKey);
1523
+ if (activeTurn) {
1524
+ activeTurn.abortController.abort();
1525
+ if (!activeTurn.cancelPromise) activeTurn.cancelPromise = activeTurn.runtime.cancel({
1526
+ handle: activeTurn.handle,
1527
+ reason: params.reason
1528
+ });
1529
+ await withAcpRuntimeErrorBoundary({
1530
+ run: async () => await activeTurn.cancelPromise,
1531
+ fallbackCode: "ACP_TURN_FAILED",
1532
+ fallbackMessage: "ACP cancel failed before completion."
1533
+ });
1534
+ return;
1535
+ }
1536
+ await this.withSessionActor(sessionKey, async () => {
1537
+ const resolvedMeta = requireReadySessionMeta(this.resolveSession({
1538
+ cfg: params.cfg,
1539
+ sessionKey
1540
+ }));
1541
+ const { runtime, handle } = await this.ensureRuntimeHandle({
1542
+ cfg: params.cfg,
1543
+ sessionKey,
1544
+ meta: resolvedMeta
1545
+ });
1546
+ try {
1547
+ await withAcpRuntimeErrorBoundary({
1548
+ run: async () => await runtime.cancel({
1549
+ handle,
1550
+ reason: params.reason
1551
+ }),
1552
+ fallbackCode: "ACP_TURN_FAILED",
1553
+ fallbackMessage: "ACP cancel failed before completion."
1554
+ });
1555
+ await this.setSessionState({
1556
+ cfg: params.cfg,
1557
+ sessionKey,
1558
+ state: "idle",
1559
+ clearLastError: true
1560
+ });
1561
+ } catch (error) {
1562
+ const acpError = toAcpRuntimeError({
1563
+ error,
1564
+ fallbackCode: "ACP_TURN_FAILED",
1565
+ fallbackMessage: "ACP cancel failed before completion."
1566
+ });
1567
+ await this.setSessionState({
1568
+ cfg: params.cfg,
1569
+ sessionKey,
1570
+ state: "error",
1571
+ lastError: acpError.message
1572
+ });
1573
+ throw acpError;
1574
+ }
1575
+ });
1576
+ }
1577
+ async closeSession(input) {
1578
+ const sessionKey = canonicalizeAcpSessionKey({
1579
+ cfg: input.cfg,
1580
+ sessionKey: input.sessionKey
1581
+ });
1582
+ if (!sessionKey) throw new AcpRuntimeError("ACP_SESSION_INIT_FAILED", "ACP session key is required.");
1583
+ await this.evictIdleRuntimeHandles({ cfg: input.cfg });
1584
+ return await this.withSessionActor(sessionKey, async () => {
1585
+ const resolution = this.resolveSession({
1586
+ cfg: input.cfg,
1587
+ sessionKey
1588
+ });
1589
+ const resolutionError = resolveAcpSessionResolutionError(resolution);
1590
+ if (resolutionError) {
1591
+ if (input.requireAcpSession ?? true) throw resolutionError;
1592
+ return {
1593
+ runtimeClosed: false,
1594
+ metaCleared: false
1595
+ };
1596
+ }
1597
+ const meta = requireReadySessionMeta(resolution);
1598
+ let runtimeClosed = false;
1599
+ let runtimeNotice;
1600
+ try {
1601
+ const { runtime, handle } = await this.ensureRuntimeHandle({
1602
+ cfg: input.cfg,
1603
+ sessionKey,
1604
+ meta
1605
+ });
1606
+ await withAcpRuntimeErrorBoundary({
1607
+ run: async () => await runtime.close({
1608
+ handle,
1609
+ reason: input.reason
1610
+ }),
1611
+ fallbackCode: "ACP_TURN_FAILED",
1612
+ fallbackMessage: "ACP close failed before completion."
1613
+ });
1614
+ runtimeClosed = true;
1615
+ this.clearCachedRuntimeState(sessionKey);
1616
+ } catch (error) {
1617
+ const acpError = toAcpRuntimeError({
1618
+ error,
1619
+ fallbackCode: "ACP_TURN_FAILED",
1620
+ fallbackMessage: "ACP close failed before completion."
1621
+ });
1622
+ if (input.allowBackendUnavailable && (acpError.code === "ACP_BACKEND_MISSING" || acpError.code === "ACP_BACKEND_UNAVAILABLE" || this.isRecoverableAcpxExitError(acpError.message))) {
1623
+ this.clearCachedRuntimeState(sessionKey);
1624
+ runtimeNotice = acpError.message;
1625
+ } else throw acpError;
1626
+ }
1627
+ let metaCleared = false;
1628
+ if (input.clearMeta) {
1629
+ await this.writeSessionMeta({
1630
+ cfg: input.cfg,
1631
+ sessionKey,
1632
+ mutate: (_current, entry) => {
1633
+ if (!entry) return null;
1634
+ return null;
1635
+ },
1636
+ failOnError: true
1637
+ });
1638
+ metaCleared = true;
1639
+ }
1640
+ return {
1641
+ runtimeClosed,
1642
+ runtimeNotice,
1643
+ metaCleared
1644
+ };
1645
+ });
1646
+ }
1647
+ async ensureRuntimeHandle(params) {
1648
+ const agent = params.meta.agent?.trim() || resolveAcpAgentFromSessionKey(params.sessionKey, "main");
1649
+ const mode = params.meta.mode;
1650
+ const runtimeOptions = resolveRuntimeOptionsFromMeta(params.meta);
1651
+ const cwd = runtimeOptions.cwd ?? normalizeText(params.meta.cwd);
1652
+ const configuredBackend = (params.meta.backend || params.cfg.acp?.backend || "").trim();
1653
+ const cached = this.getCachedRuntimeState(params.sessionKey);
1654
+ if (cached) {
1655
+ const backendMatches = !configuredBackend || cached.backend === configuredBackend;
1656
+ const agentMatches = cached.agent === agent;
1657
+ const modeMatches = cached.mode === mode;
1658
+ const cwdMatches = (cached.cwd ?? "") === (cwd ?? "");
1659
+ if (backendMatches && agentMatches && modeMatches && cwdMatches && await this.isCachedRuntimeHandleReusable({
1660
+ sessionKey: params.sessionKey,
1661
+ runtime: cached.runtime,
1662
+ handle: cached.handle
1663
+ })) return {
1664
+ runtime: cached.runtime,
1665
+ handle: cached.handle,
1666
+ meta: params.meta
1667
+ };
1668
+ this.clearCachedRuntimeState(params.sessionKey);
1669
+ }
1670
+ this.enforceConcurrentSessionLimit({
1671
+ cfg: params.cfg,
1672
+ sessionKey: params.sessionKey
1673
+ });
1674
+ const backend = this.deps.requireRuntimeBackend(configuredBackend || void 0);
1675
+ const runtime = backend.runtime;
1676
+ const previousMeta = params.meta;
1677
+ const previousIdentity = resolveSessionIdentityFromMeta(previousMeta);
1678
+ const persistedResumeSessionId = mode === "persistent" ? resolveRuntimeResumeSessionId(previousIdentity) : void 0;
1679
+ const ensureSession = async (resumeSessionId) => await withAcpRuntimeErrorBoundary({
1680
+ run: async () => await runtime.ensureSession({
1681
+ sessionKey: params.sessionKey,
1682
+ agent,
1683
+ mode,
1684
+ ...resumeSessionId ? { resumeSessionId } : {},
1685
+ cwd
1686
+ }),
1687
+ fallbackCode: "ACP_SESSION_INIT_FAILED",
1688
+ fallbackMessage: "Could not initialize ACP session runtime."
1689
+ });
1690
+ let ensured;
1691
+ if (persistedResumeSessionId) try {
1692
+ ensured = await ensureSession(persistedResumeSessionId);
1693
+ } catch (error) {
1694
+ const acpError = toAcpRuntimeError({
1695
+ error,
1696
+ fallbackCode: "ACP_SESSION_INIT_FAILED",
1697
+ fallbackMessage: "Could not initialize ACP session runtime."
1698
+ });
1699
+ if (acpError.code !== "ACP_SESSION_INIT_FAILED") throw acpError;
1700
+ logVerbose(`acp-manager: resume init failed for ${params.sessionKey}; retrying without persisted ACP session id: ${acpError.message}`);
1701
+ ensured = await ensureSession();
1702
+ }
1703
+ else ensured = await ensureSession();
1704
+ const now = Date.now();
1705
+ const effectiveCwd = normalizeText(ensured.cwd) ?? cwd;
1706
+ const nextRuntimeOptions = normalizeRuntimeOptions({
1707
+ ...runtimeOptions,
1708
+ ...effectiveCwd ? { cwd: effectiveCwd } : {}
1709
+ });
1710
+ const nextIdentity = mergeSessionIdentity({
1711
+ current: previousIdentity,
1712
+ incoming: createIdentityFromEnsure({
1713
+ handle: ensured,
1714
+ now
1715
+ }),
1716
+ now
1717
+ }) ?? previousIdentity;
1718
+ const nextHandleIdentifiers = resolveRuntimeHandleIdentifiersFromIdentity(nextIdentity);
1719
+ const nextHandle = {
1720
+ ...ensured,
1721
+ ...nextHandleIdentifiers.backendSessionId ? { backendSessionId: nextHandleIdentifiers.backendSessionId } : {},
1722
+ ...nextHandleIdentifiers.agentSessionId ? { agentSessionId: nextHandleIdentifiers.agentSessionId } : {}
1723
+ };
1724
+ const nextMeta = {
1725
+ backend: ensured.backend || backend.id,
1726
+ agent,
1727
+ runtimeSessionName: ensured.runtimeSessionName,
1728
+ ...nextIdentity ? { identity: nextIdentity } : {},
1729
+ mode: params.meta.mode,
1730
+ ...Object.keys(nextRuntimeOptions).length > 0 ? { runtimeOptions: nextRuntimeOptions } : {},
1731
+ ...effectiveCwd ? { cwd: effectiveCwd } : {},
1732
+ state: previousMeta.state,
1733
+ lastActivityAt: now,
1734
+ ...previousMeta.lastError ? { lastError: previousMeta.lastError } : {}
1735
+ };
1736
+ if (previousMeta.backend !== nextMeta.backend || previousMeta.runtimeSessionName !== nextMeta.runtimeSessionName || !identityEquals(previousIdentity, nextIdentity) || previousMeta.agent !== nextMeta.agent || previousMeta.cwd !== nextMeta.cwd || !runtimeOptionsEqual(previousMeta.runtimeOptions, nextMeta.runtimeOptions) || hasLegacyAcpIdentityProjection(previousMeta)) await this.writeSessionMeta({
1737
+ cfg: params.cfg,
1738
+ sessionKey: params.sessionKey,
1739
+ mutate: (_current, entry) => {
1740
+ if (!entry) return null;
1741
+ return nextMeta;
1742
+ }
1743
+ });
1744
+ this.setCachedRuntimeState(params.sessionKey, {
1745
+ runtime,
1746
+ handle: nextHandle,
1747
+ backend: ensured.backend || backend.id,
1748
+ agent,
1749
+ mode,
1750
+ cwd: effectiveCwd,
1751
+ appliedControlSignature: void 0
1752
+ });
1753
+ return {
1754
+ runtime,
1755
+ handle: nextHandle,
1756
+ meta: nextMeta
1757
+ };
1758
+ }
1759
+ async isCachedRuntimeHandleReusable(params) {
1760
+ if (!params.runtime.getStatus) return true;
1761
+ try {
1762
+ const status = await params.runtime.getStatus({ handle: params.handle });
1763
+ if (this.isRuntimeStatusUnavailable(status)) {
1764
+ this.clearCachedRuntimeState(params.sessionKey);
1765
+ logVerbose(`acp-manager: evicting cached runtime handle for ${params.sessionKey} after unhealthy status probe: ${status.summary ?? "status unavailable"}`);
1766
+ return false;
1767
+ }
1768
+ return true;
1769
+ } catch (error) {
1770
+ this.clearCachedRuntimeState(params.sessionKey);
1771
+ logVerbose(`acp-manager: evicting cached runtime handle for ${params.sessionKey} after status probe failed: ${String(error)}`);
1772
+ return false;
1773
+ }
1774
+ }
1775
+ isRuntimeStatusUnavailable(status) {
1776
+ if (!status) return false;
1777
+ const detailsStatus = typeof status.details?.status === "string" ? status.details.status.trim().toLowerCase() : "";
1778
+ if (detailsStatus === "dead" || detailsStatus === "no-session") return true;
1779
+ const summaryStatus = (status.summary?.match(/\bstatus=([^\s]+)/i))?.[1]?.trim().toLowerCase() ?? "";
1780
+ return summaryStatus === "dead" || summaryStatus === "no-session";
1781
+ }
1782
+ async persistRuntimeOptions(params) {
1783
+ const normalized = normalizeRuntimeOptions(params.options);
1784
+ const hasOptions = Object.keys(normalized).length > 0;
1785
+ await this.writeSessionMeta({
1786
+ cfg: params.cfg,
1787
+ sessionKey: params.sessionKey,
1788
+ mutate: (current, entry) => {
1789
+ if (!entry) return null;
1790
+ const base = current ?? entry.acp;
1791
+ if (!base) return null;
1792
+ return {
1793
+ backend: base.backend,
1794
+ agent: base.agent,
1795
+ runtimeSessionName: base.runtimeSessionName,
1796
+ ...base.identity ? { identity: base.identity } : {},
1797
+ mode: base.mode,
1798
+ runtimeOptions: hasOptions ? normalized : void 0,
1799
+ cwd: normalized.cwd,
1800
+ state: base.state,
1801
+ lastActivityAt: Date.now(),
1802
+ ...base.lastError ? { lastError: base.lastError } : {}
1803
+ };
1804
+ },
1805
+ failOnError: true
1806
+ });
1807
+ const cached = this.getCachedRuntimeState(params.sessionKey);
1808
+ if (!cached) return;
1809
+ if ((cached.cwd ?? "") !== (normalized.cwd ?? "")) {
1810
+ this.clearCachedRuntimeState(params.sessionKey);
1811
+ return;
1812
+ }
1813
+ cached.appliedControlSignature = void 0;
1814
+ }
1815
+ enforceConcurrentSessionLimit(params) {
1816
+ const configuredLimit = params.cfg.acp?.maxConcurrentSessions;
1817
+ if (typeof configuredLimit !== "number" || !Number.isFinite(configuredLimit)) return;
1818
+ const limit = Math.max(1, Math.floor(configuredLimit));
1819
+ const actorKey = normalizeActorKey(params.sessionKey);
1820
+ if (this.runtimeCache.has(actorKey)) return;
1821
+ const activeCount = this.runtimeCache.size();
1822
+ if (activeCount >= limit) throw new AcpRuntimeError("ACP_SESSION_INIT_FAILED", `ACP max concurrent sessions reached (${activeCount}/${limit}).`);
1823
+ }
1824
+ recordTurnCompletion(params) {
1825
+ const durationMs = Math.max(0, Date.now() - params.startedAt);
1826
+ this.turnLatencyStats.totalMs += durationMs;
1827
+ this.turnLatencyStats.maxMs = Math.max(this.turnLatencyStats.maxMs, durationMs);
1828
+ if (params.errorCode) {
1829
+ this.turnLatencyStats.failed += 1;
1830
+ this.recordErrorCode(params.errorCode);
1831
+ return;
1832
+ }
1833
+ this.turnLatencyStats.completed += 1;
1834
+ }
1835
+ recordErrorCode(code) {
1836
+ const normalized = normalizeAcpErrorCode(code);
1837
+ this.errorCountsByCode.set(normalized, (this.errorCountsByCode.get(normalized) ?? 0) + 1);
1838
+ }
1839
+ shouldRetryTurnWithFreshHandle(params) {
1840
+ if (params.attempt > 0 || params.sawTurnOutput) return false;
1841
+ if (!this.isRecoverableAcpxExitError(params.error.message)) return false;
1842
+ this.clearCachedRuntimeState(params.sessionKey);
1843
+ logVerbose(`acp-manager: retrying ${params.sessionKey} with a fresh runtime handle after early turn failure: ${params.error.message}`);
1844
+ return true;
1845
+ }
1846
+ isRecoverableAcpxExitError(message) {
1847
+ return /^acpx exited with code \d+/i.test(message.trim());
1848
+ }
1849
+ async evictIdleRuntimeHandles(params) {
1850
+ const idleTtlMs = resolveRuntimeIdleTtlMs(params.cfg);
1851
+ if (idleTtlMs <= 0 || this.runtimeCache.size() === 0) return;
1852
+ const now = Date.now();
1853
+ const candidates = this.runtimeCache.collectIdleCandidates({
1854
+ maxIdleMs: idleTtlMs,
1855
+ now
1856
+ });
1857
+ if (candidates.length === 0) return;
1858
+ for (const candidate of candidates) await this.actorQueue.run(candidate.actorKey, async () => {
1859
+ if (this.activeTurnBySession.has(candidate.actorKey)) return;
1860
+ const lastTouchedAt = this.runtimeCache.getLastTouchedAt(candidate.actorKey);
1861
+ if (lastTouchedAt == null || now - lastTouchedAt < idleTtlMs) return;
1862
+ const cached = this.runtimeCache.peek(candidate.actorKey);
1863
+ if (!cached) return;
1864
+ this.runtimeCache.clear(candidate.actorKey);
1865
+ this.evictedRuntimeCount += 1;
1866
+ this.lastEvictedAt = Date.now();
1867
+ try {
1868
+ await cached.runtime.close({
1869
+ handle: cached.handle,
1870
+ reason: "idle-evicted"
1871
+ });
1872
+ } catch (error) {
1873
+ logVerbose(`acp-manager: idle eviction close failed for ${candidate.state.handle.sessionKey}: ${String(error)}`);
1874
+ }
1875
+ });
1876
+ }
1877
+ async resolveRuntimeCapabilities(params) {
1878
+ return await resolveManagerRuntimeCapabilities(params);
1879
+ }
1880
+ async applyRuntimeControls(params) {
1881
+ await applyManagerRuntimeControls({
1882
+ ...params,
1883
+ getCachedRuntimeState: (sessionKey) => this.getCachedRuntimeState(sessionKey)
1884
+ });
1885
+ }
1886
+ async setSessionState(params) {
1887
+ await this.writeSessionMeta({
1888
+ cfg: params.cfg,
1889
+ sessionKey: params.sessionKey,
1890
+ mutate: (current, entry) => {
1891
+ if (!entry) return null;
1892
+ const base = current ?? entry.acp;
1893
+ if (!base) return null;
1894
+ const next = {
1895
+ backend: base.backend,
1896
+ agent: base.agent,
1897
+ runtimeSessionName: base.runtimeSessionName,
1898
+ ...base.identity ? { identity: base.identity } : {},
1899
+ mode: base.mode,
1900
+ ...base.runtimeOptions ? { runtimeOptions: base.runtimeOptions } : {},
1901
+ ...base.cwd ? { cwd: base.cwd } : {},
1902
+ state: params.state,
1903
+ lastActivityAt: Date.now(),
1904
+ ...base.lastError ? { lastError: base.lastError } : {}
1905
+ };
1906
+ if (params.lastError?.trim()) next.lastError = params.lastError.trim();
1907
+ else if (params.clearLastError) delete next.lastError;
1908
+ return next;
1909
+ }
1910
+ });
1911
+ }
1912
+ async reconcileRuntimeSessionIdentifiers(params) {
1913
+ return await reconcileManagerRuntimeSessionIdentifiers({
1914
+ ...params,
1915
+ setCachedHandle: (sessionKey, handle) => {
1916
+ const cached = this.getCachedRuntimeState(sessionKey);
1917
+ if (cached) cached.handle = handle;
1918
+ },
1919
+ writeSessionMeta: async (writeParams) => await this.writeSessionMeta(writeParams)
1920
+ });
1921
+ }
1922
+ async writeSessionMeta(params) {
1923
+ try {
1924
+ return await this.deps.upsertSessionMeta({
1925
+ cfg: params.cfg,
1926
+ sessionKey: params.sessionKey,
1927
+ mutate: params.mutate
1928
+ });
1929
+ } catch (error) {
1930
+ if (params.failOnError) throw error;
1931
+ logVerbose(`acp-manager: failed persisting ACP metadata for ${params.sessionKey}: ${String(error)}`);
1932
+ return null;
1933
+ }
1934
+ }
1935
+ async withSessionActor(sessionKey, op, signal) {
1936
+ const actorKey = normalizeActorKey(sessionKey);
1937
+ this.throwIfAborted(signal);
1938
+ let actorStarted = false;
1939
+ const queued = this.actorQueue.run(actorKey, async () => {
1940
+ actorStarted = true;
1941
+ this.throwIfAborted(signal);
1942
+ return await op();
1943
+ });
1944
+ if (!signal) return await queued;
1945
+ return await new Promise((resolve, reject) => {
1946
+ let settled = false;
1947
+ const cleanup = () => {
1948
+ signal.removeEventListener("abort", onAbort);
1949
+ };
1950
+ const settleValue = (value) => {
1951
+ if (settled) return;
1952
+ settled = true;
1953
+ cleanup();
1954
+ resolve(value);
1955
+ };
1956
+ const settleError = (error) => {
1957
+ if (settled) return;
1958
+ settled = true;
1959
+ cleanup();
1960
+ reject(error);
1961
+ };
1962
+ const onAbort = () => {
1963
+ if (actorStarted) return;
1964
+ try {
1965
+ this.throwIfAborted(signal);
1966
+ } catch (error) {
1967
+ settleError(error);
1968
+ }
1969
+ };
1970
+ signal.addEventListener("abort", onAbort, { once: true });
1971
+ queued.then(settleValue, settleError);
1972
+ if (signal.aborted) onAbort();
1973
+ });
1974
+ }
1975
+ throwIfAborted(signal) {
1976
+ if (!signal?.aborted) return;
1977
+ throw new AcpRuntimeError("ACP_TURN_FAILED", "ACP operation aborted.");
1978
+ }
1979
+ getCachedRuntimeState(sessionKey) {
1980
+ return this.runtimeCache.get(normalizeActorKey(sessionKey));
1981
+ }
1982
+ setCachedRuntimeState(sessionKey, state) {
1983
+ this.runtimeCache.set(normalizeActorKey(sessionKey), state);
1984
+ }
1985
+ clearCachedRuntimeState(sessionKey) {
1986
+ this.runtimeCache.clear(normalizeActorKey(sessionKey));
1987
+ }
1988
+ clearCachedRuntimeStateIfHandleMatches(params) {
1989
+ const cached = this.getCachedRuntimeState(params.sessionKey);
1990
+ if (!cached || !this.runtimeHandlesMatch(cached.handle, params.handle)) return;
1991
+ this.clearCachedRuntimeState(params.sessionKey);
1992
+ }
1993
+ runtimeHandlesMatch(a, b) {
1994
+ return a.sessionKey === b.sessionKey && a.backend === b.backend && a.runtimeSessionName === b.runtimeSessionName && (a.cwd ?? "") === (b.cwd ?? "") && (a.acpxRecordId ?? "") === (b.acpxRecordId ?? "") && (a.backendSessionId ?? "") === (b.backendSessionId ?? "") && (a.agentSessionId ?? "") === (b.agentSessionId ?? "");
1995
+ }
1996
+ };
1997
+ //#endregion
1998
+ //#region src/acp/control-plane/manager.ts
1999
+ let ACP_SESSION_MANAGER_SINGLETON = null;
2000
+ function getAcpSessionManager() {
2001
+ if (!ACP_SESSION_MANAGER_SINGLETON) ACP_SESSION_MANAGER_SINGLETON = new AcpSessionManager();
2002
+ return ACP_SESSION_MANAGER_SINGLETON;
2003
+ }
2004
+ //#endregion
2005
+ export { resolveSessionIdentityFromMeta as _, registerAcpRuntimeBackend as a, toAcpRuntimeError as b, parseRuntimeTimeoutSecondsInput as c, validateRuntimeModeInput as d, validateRuntimeModelInput as f, isSessionIdentityPending as g, resolveAcpSessionResolutionError as h, getAcpRuntimeBackend as i, validateRuntimeConfigOptionInput as l, resolveAcpAgentFromSessionKey as m, readAcpSessionEntry as n, requireAcpRuntimeBackend as o, validateRuntimePermissionProfileInput as p, resolveSessionStorePathForAcp as r, unregisterAcpRuntimeBackend as s, getAcpSessionManager as t, validateRuntimeCwdInput as u, AcpRuntimeError as v, resolveAgentTimeoutMs as x, isAcpRuntimeError as y };