activeclaw 2026.2.12 → 2026.2.13

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 (364) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/dist/{accounts-DbzMEfKN.js → accounts-DCDeFTra.js} +2 -2
  3. package/dist/{accounts-DimKrt7j.js → accounts-DeqIQjo1.js} +2 -2
  4. package/dist/{acp-cli-Cs1ai4XO.js → acp-cli-CeYI4XRd.js} +15 -16
  5. package/dist/{acp-cli-oV2dodPg.js → acp-cli-rNbGXICg.js} +14 -15
  6. package/dist/{agent-BndgzkUe.js → agent-BvNJF5QL.js} +19 -16
  7. package/dist/{agent-DZvDwqnd.js → agent-CyMxTyrG.js} +20 -17
  8. package/dist/{agent-scope-rXQ7WARN.js → agent-scope-BIEhVP4_.js} +1 -1
  9. package/dist/{agent-scope---6LLHj0.js → agent-scope-CQCus0rI.js} +2 -2
  10. package/dist/{agent-scope-RCSw6gHy.js → agent-scope-CsRbLH4l.js} +3 -3
  11. package/dist/{agent-scope-CN8DM4Xb.js → agent-scope-DPIFau3f.js} +1 -1
  12. package/dist/{audio-preflight-SZRntkxo.js → audio-preflight-BU8W7uxc.js} +10 -10
  13. package/dist/{audio-preflight-ClVNINDs.js → audio-preflight-CGsumMzb.js} +10 -10
  14. package/dist/{audio-preflight-txAP3v-C.js → audio-preflight-SLmkJI6-.js} +22 -22
  15. package/dist/{audio-preflight-BP6s-UPp.js → audio-preflight-jZc5mFCZ.js} +23 -23
  16. package/dist/{audit-CQzrm61N.js → audit-Dmww_503.js} +70 -18
  17. package/dist/{audit-DMH3CSXY.js → audit-wPu26VMb.js} +72 -20
  18. package/dist/{tailscale-DU6DgqVy.js → auth-9x3lqfIY.js} +208 -3
  19. package/dist/{tailscale-DHfcfRCx.js → auth-CQNl_IaI.js} +190 -3
  20. package/dist/{auth-health-BB3e3OmN.js → auth-health-C4L4FGBA.js} +1 -1
  21. package/dist/{auth-health-zZ9dnQGC.js → auth-health-j6epgQbq.js} +1 -1
  22. package/dist/{auth-profiles-CcJ3hrog.js → auth-profiles-ByNs3eEm.js} +60 -22
  23. package/dist/build-info.json +3 -3
  24. package/dist/bundled/boot-md/handler.js +19 -16
  25. package/dist/bundled/session-memory/handler.js +16 -15
  26. package/dist/{call-Yxns4CVq.js → call-DVYCIV8m.js} +5 -5
  27. package/dist/{call-C9az806y.js → call-SolyGS1r.js} +4 -4
  28. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  29. package/dist/{channel-options-CjXPwMWu.js → channel-options-BwC2yQcR.js} +4 -4
  30. package/dist/{channel-options-CX4iYQfR.js → channel-options-Cq9BVDkP.js} +7 -7
  31. package/dist/{channel-selection-BoQ7GurB.js → channel-selection-D4D6ImhN.js} +2 -2
  32. package/dist/{channel-selection-C78IwbD-.js → channel-selection-MZAHm4U8.js} +2 -2
  33. package/dist/{channels-cli-DUHsmX3q.js → channels-cli-9Dsk9Qm7.js} +53 -51
  34. package/dist/{channels-cli-BXMQPB4x.js → channels-cli-BJUppQll.js} +52 -50
  35. package/dist/{channels-status-issues-Ca9--azp.js → channels-status-issues-D7GSV1GS.js} +1 -1
  36. package/dist/{channels-status-issues-CbULFg2X.js → channels-status-issues-DDAWeT-6.js} +1 -1
  37. package/dist/{chrome-svgmQ8T_.js → chrome-BfB6JdKF.js} +2 -1
  38. package/dist/{chrome-juQxt0zf.js → chrome-Cvr-57lg.js} +4 -3
  39. package/dist/{chrome-BCPPeLQ6.js → chrome-DL0avO8n.js} +2 -1
  40. package/dist/{chrome-yIKmOzCO.js → chrome-foEwx3lN.js} +5 -4
  41. package/dist/{clack-prompter-Dmvcu3gn.js → clack-prompter-Bz3Mmcl-.js} +5 -5
  42. package/dist/{clack-prompter-DuBVnTKy.js → clack-prompter-ChCGXfyt.js} +4 -4
  43. package/dist/cli/daemon-cli.js +1 -1
  44. package/dist/{cli-FdxAcu_y.js → cli-ZR9ugUBX.js} +42 -40
  45. package/dist/{cli-By331Q9f.js → cli-miPe4Ujz.js} +42 -40
  46. package/dist/{client-B0_GiCjB.js → client-BrYfyoDK.js} +52 -3
  47. package/dist/{client-D7wrC1Ug.js → client-CTwXnRl7.js} +53 -4
  48. package/dist/{command-format-ayFsmwwz.js → command-format-Bxe0mWee.js} +1 -1
  49. package/dist/{command-options-BSDiKuyX.js → command-options-BvgxzPbK.js} +4 -4
  50. package/dist/{commands-BG25qku5.js → commands-BX_OIIVR.js} +4 -4
  51. package/dist/{completion-cli-C4zxjkC1.js → completion-cli-CR77-jyv.js} +3 -3
  52. package/dist/{completion-cli-DECEgBWR.js → completion-cli-DnjpxAag.js} +29 -29
  53. package/dist/{config-B7sno9eI.js → config-Bdhomfei.js} +15 -6
  54. package/dist/{config-BuF7vm-v.js → config-BvMsmctM.js} +13 -4
  55. package/dist/{config-D50SQVar.js → config-QYrbd7x7.js} +13 -4
  56. package/dist/{config-DH9TLUNc.js → config-aFQssWKX.js} +15 -6
  57. package/dist/{config-guard-DPxxY1iw.js → config-guard-CljaSxJd.js} +39 -39
  58. package/dist/{configure-BZQ9uSVX.js → configure-BXLiucXo.js} +19 -19
  59. package/dist/{configure-Cg5IKSUy.js → configure-BYPqXzGZ.js} +19 -19
  60. package/dist/control-auth-8Cf4WXpR.js +54 -0
  61. package/dist/control-auth-DBCu3qyv.js +54 -0
  62. package/dist/{control-service-CBlMVTRu.js → control-service-B5KnPqGP.js} +11 -5
  63. package/dist/{control-service-B2er20Ke.js → control-service-DKnttEus.js} +10 -4
  64. package/dist/{cron-cli-B2Zwhy_r.js → cron-cli-D7BRjDv2.js} +17 -17
  65. package/dist/{cron-cli-EaRUVd0p.js → cron-cli-z1zk_FXQ.js} +16 -16
  66. package/dist/{daemon-cli-CVNzObIF.js → daemon-cli-BDkU2ocb.js} +18 -18
  67. package/dist/{daemon-cli-DF6Rxjy6.js → daemon-cli-cNSF93-v.js} +19 -19
  68. package/dist/{daemon-runtime-BHF5NjQ7.js → daemon-runtime-B0tg_LsX.js} +2 -2
  69. package/dist/{daemon-runtime-B05PME1z.js → daemon-runtime-Bsjeut6m.js} +3 -3
  70. package/dist/{deliver-DzcxEcza.js → deliver-CIU9Npgs.js} +306 -12
  71. package/dist/{deliver-COf5XFo_.js → deliver-DYYCo1G7.js} +302 -8
  72. package/dist/{deliver-B1jsU2r7.js → deliver-LsxKETro.js} +306 -12
  73. package/dist/{deliver-CLwC284e.js → deliver-xUU3mGHo.js} +302 -8
  74. package/dist/{deps-Cva7QM_t.js → deps-QSwGcoNZ.js} +2 -2
  75. package/dist/{deps-B6602Wid.js → deps-lAAA2zYI.js} +2 -2
  76. package/dist/{devices-cli-DPg_4aW8.js → devices-cli-BG3-2oqt.js} +13 -13
  77. package/dist/{devices-cli-D8K3hZR5.js → devices-cli-VIQtOvt_.js} +13 -13
  78. package/dist/{directory-cli-OGBSVKAZ.js → directory-cli-BCJwjVC0.js} +15 -15
  79. package/dist/{directory-cli-Bn47fFX7.js → directory-cli-jYzZ02gk.js} +14 -14
  80. package/dist/{dispatcher-BHsNwFe-.js → dispatcher-DY51b-Zc.js} +2 -2
  81. package/dist/{dns-cli-DmTHXgwU.js → dns-cli-DHIiMJjS.js} +11 -11
  82. package/dist/{dns-cli-kk2rysJh.js → dns-cli-pZlv87Ib.js} +11 -11
  83. package/dist/{docs-cli-CB77CeM4.js → docs-cli-2JDiwfzP.js} +7 -7
  84. package/dist/{docs-cli-DUcyw0X0.js → docs-cli-BhkYqoIQ.js} +6 -6
  85. package/dist/{doctor-DwqdkfPa.js → doctor-Bf8EhNtA.js} +33 -33
  86. package/dist/{doctor-BZfxDGUg.js → doctor-sYG5V4Co.js} +32 -32
  87. package/dist/entry.js +36 -14
  88. package/dist/{env-DE9xvYOL.js → env-ONzUVAG2.js} +1 -1
  89. package/dist/{exec-4WHuOniw.js → exec-B8lXct-k.js} +31 -13
  90. package/dist/{exec-B8JKbXKW.js → exec-CACT5OAW.js} +1 -1
  91. package/dist/{exec-D12IZYtJ.js → exec-CJFFoM7H.js} +31 -13
  92. package/dist/{exec-DXtR2fhb.js → exec-YIosokWE.js} +1 -1
  93. package/dist/{exec-approvals-cli-GizapOX5.js → exec-approvals-cli-7LH0lwhO.js} +19 -19
  94. package/dist/{exec-approvals-cli-BWO0Rs-a.js → exec-approvals-cli-apGnQbpj.js} +19 -19
  95. package/dist/extensionAPI.js +1108 -661
  96. package/dist/{fetch-CqZP8jwB.js → fetch-DmiOpALK.js} +5 -3
  97. package/dist/{fetch-timeout-B2KlHXi3.js → fetch-timeout-BEtUjM1S.js} +5 -3
  98. package/dist/{fetch-timeout-ohY5QmsW.js → fetch-timeout-DEoXG_SF.js} +5 -3
  99. package/dist/{fetch-timeout-4UKsdtE1.js → fetch-timeout-DTK9vxex.js} +5 -3
  100. package/dist/{gateway-cli-Bbd1Xbsc.js → gateway-cli-DUdYxlZS.js} +315 -103
  101. package/dist/{gateway-cli-PR1S0BTe.js → gateway-cli-DbvWmE-9.js} +314 -102
  102. package/dist/{gateway-rpc-8gue7Qjt.js → gateway-rpc-BByb2Snz.js} +3 -3
  103. package/dist/{gateway-rpc-DjuxyOm-.js → gateway-rpc-wXSCUZXj.js} +3 -3
  104. package/dist/{github-copilot-auth-B3chCDfc.js → github-copilot-auth-D7ewvpMd.js} +16 -8
  105. package/dist/{github-copilot-auth-Cm2SB8Qf.js → github-copilot-auth-DDispnyz.js} +16 -8
  106. package/dist/{github-copilot-token-SLWintYd.js → github-copilot-token-Cfs0Wxr8.js} +1 -1
  107. package/dist/{gmail-setup-utils-Cgh0ptgA.js → gmail-setup-utils-Cfns8TQx.js} +3 -3
  108. package/dist/{gmail-setup-utils-WDyf1gTU.js → gmail-setup-utils-DJb-_5kO.js} +4 -4
  109. package/dist/{health-format-C0C_Apce.js → health-format-KGPokKJH.js} +68 -28
  110. package/dist/{health-format-gLMfE2wf.js → health-format-LZDxu3rv.js} +67 -27
  111. package/dist/{help-format-5iAL_46a.js → help-format-C48TXngO.js} +1 -1
  112. package/dist/{help-format-DUy1KRxq.js → help-format-R5fLToDw.js} +1 -1
  113. package/dist/{hooks-cli-CEN1h1ya.js → hooks-cli-CT8JCRkH.js} +46 -44
  114. package/dist/{hooks-cli-DrchIqSi.js → hooks-cli-S1MKumJO.js} +47 -45
  115. package/dist/{hooks-status-Cgy6AtQk.js → hooks-status-Cw0xD8Lt.js} +3 -3
  116. package/dist/{hooks-status--xVLpAXz.js → hooks-status-D9MhwHRp.js} +3 -3
  117. package/dist/{image-Dkawt9Kg.js → image-Brk1sJbw.js} +4 -4
  118. package/dist/{image-DI9s9eEx.js → image-C4Nn2p3e.js} +5 -5
  119. package/dist/{image-LxFvu0wL.js → image-DgtfXMcX.js} +5 -5
  120. package/dist/{image-B4mDPdyz.js → image-RKwc3fsL.js} +4 -4
  121. package/dist/index.js +83 -83
  122. package/dist/{installs-NS0VMPN7.js → installs-CrLcWYHe.js} +4 -4
  123. package/dist/{installs-DA-eSN1B.js → installs-DscWb9b9.js} +5 -5
  124. package/dist/{links-CV4oki2u.js → links-B8LAzWwg.js} +1 -1
  125. package/dist/{links-7M-j83As.js → links-Eax1UO3w.js} +1 -1
  126. package/dist/llm-slug-generator.js +15 -15
  127. package/dist/{loader-Caow9TPA.js → loader-KjT074JR.js} +1105 -762
  128. package/dist/{logging-CeHn2itV.js → logging-BAyPwvdH.js} +1 -1
  129. package/dist/{logging-D0MyqUlV.js → logging-CRq4h04P.js} +2 -2
  130. package/dist/{login-qr-Xx8yJrSc.js → login-qr-B6ZgAuIf.js} +5 -5
  131. package/dist/{login-qr-CoskdtvN.js → login-qr-Bua-p0nG.js} +2 -2
  132. package/dist/{login-qr-CAk9D-FM.js → login-qr-CuvemJj4.js} +6 -6
  133. package/dist/{login-qr-kUyMWXV1.js → login-qr-Djr1JfIf.js} +2 -2
  134. package/dist/{logs-cli-B476pzJS.js → logs-cli-9IAV7rWY.js} +15 -15
  135. package/dist/{logs-cli-BQRUI_PO.js → logs-cli-EiKzUFPa.js} +14 -14
  136. package/dist/{manager-CBApH7eR.js → manager-BIMh_eSm.js} +5 -5
  137. package/dist/{manager-CyJH6WMg.js → manager-CwinWQoz.js} +5 -5
  138. package/dist/{manager-DScY_ZTT.js → manager-DkqF1GiK.js} +7 -7
  139. package/dist/{manager-DseK7RWj.js → manager-T1XfGchB.js} +8 -8
  140. package/dist/{manifest-registry-DFckk-L8.js → manifest-registry-CQhdnDBZ.js} +2 -2
  141. package/dist/{manifest-registry-BTgLN_W2.js → manifest-registry-u0okVSkU.js} +2 -2
  142. package/dist/{message-channel-0717wOz-.js → message-channel-BLi2a6Yw.js} +1 -1
  143. package/dist/{message-channel-BlgPSDAh.js → message-channel-C_MmebBt.js} +1 -1
  144. package/dist/{model-auth-CbqRVYRp.js → model-auth-CabXIF6O.js} +57 -19
  145. package/dist/{model-selection-unMJyUIE.js → model-selection-BLuqsGVB.js} +59 -21
  146. package/dist/{model-selection-B9Y7dKQd.js → model-selection-C1GmkTAV.js} +57 -19
  147. package/dist/{models-cli-B1cLGcRz.js → models-cli-9jmDv-h3.js} +50 -48
  148. package/dist/{models-cli-D7sChCi6.js → models-cli-zS9rtWz8.js} +48 -46
  149. package/dist/{node-cli-ic2C1xs2.js → node-cli-CrpTxTTs.js} +26 -24
  150. package/dist/{node-cli-CS3KwBh1.js → node-cli-wemUMCg-.js} +25 -23
  151. package/dist/{node-service-D_Cdq1JI.js → node-service-C8DTHTMg.js} +2 -2
  152. package/dist/{node-service-_vgO5xR-.js → node-service-WQuEKz6W.js} +1 -1
  153. package/dist/{nodes-cli-CipcvVMc.js → nodes-cli-BaU2SIFw.js} +16 -16
  154. package/dist/{nodes-cli-B1meaW7S.js → nodes-cli-Dx23D72n.js} +16 -16
  155. package/dist/{nodes-screen-N-4_0VIu.js → nodes-screen-C0IuBqUL.js} +1 -1
  156. package/dist/{note-CAM9PbSJ.js → note-BhRSeNeu.js} +2 -2
  157. package/dist/{note-Ci08TSbV.js → note-hhtubr2j.js} +1 -1
  158. package/dist/{onboard-channels-DMcOT0dj.js → onboard-channels-C501x8GI.js} +8 -8
  159. package/dist/{onboard-channels-CsT3E4bT.js → onboard-channels-Dxzroasd.js} +8 -8
  160. package/dist/{onboard-skills-DoxkpnEU.js → onboard-skills-DV0Qzvjj.js} +19 -19
  161. package/dist/{onboard-skills-D-BrCoRN.js → onboard-skills-rlBHcu3Q.js} +18 -18
  162. package/dist/{onboarding-B92952fz.js → onboarding-CN-EDLjd.js} +34 -34
  163. package/dist/{pairing-cli-BDUJ5VoX.js → pairing-cli-CDHG4xuI.js} +15 -15
  164. package/dist/{pairing-cli-0wbU1u8d.js → pairing-cli-CQP34Dlx.js} +14 -14
  165. package/dist/{pairing-labels-3o3QO3Qn.js → pairing-labels-B6CN0SNH.js} +1 -1
  166. package/dist/{pairing-labels-Bin1K7_f.js → pairing-labels-CgNHnjzT.js} +1 -1
  167. package/dist/{pairing-store-CL4rJ7m7.js → pairing-store-CmlRVqOz.js} +2 -2
  168. package/dist/{pairing-store-fIWI3pXG.js → pairing-store-Dp5_JGnG.js} +3 -3
  169. package/dist/{path-env-CXWUFfFv.js → path-env-CLvYNwtL.js} +1 -1
  170. package/dist/{path-env-C5FR_Eay.js → path-env-CaYUVIML.js} +2 -2
  171. package/dist/{paths-DwKNqk_S.js → paths-B0a4ywSO.js} +30 -5
  172. package/dist/{paths-RITJT4UY.js → paths-B49s6UZQ.js} +30 -5
  173. package/dist/{paths-CB2fqqbX.js → paths-D0O87MfH.js} +30 -5
  174. package/dist/{paths-IivnSNkP.js → paths-DLINmNFQ.js} +31 -6
  175. package/dist/{pi-embedded-DhYItk8O.js → pi-embedded-Ctrt2kz0.js} +1109 -662
  176. package/dist/{pi-embedded-helpers-CmftU5Zj.js → pi-embedded-helpers-CMKLjW6X.js} +8 -5
  177. package/dist/{pi-embedded-helpers-CfXnSIFx.js → pi-embedded-helpers-CUzTc1v6.js} +170 -19
  178. package/dist/{pi-embedded-helpers-Uan-3N1T.js → pi-embedded-helpers-DfwkwPYD.js} +7 -4
  179. package/dist/{pi-embedded-helpers-Bri9tk9g.js → pi-embedded-helpers-WDwx99UA.js} +170 -19
  180. package/dist/{pi-tools.policy-CJFi1sny.js → pi-tools.policy-BpsROZbz.js} +4 -4
  181. package/dist/{plugin-auto-enable-BY4CqJbD.js → plugin-auto-enable-Bqhc3w5n.js} +5 -5
  182. package/dist/{plugin-auto-enable-DbQrtQjL.js → plugin-auto-enable-PW76g_PJ.js} +5 -5
  183. package/dist/plugin-sdk/agents/pi-embedded-runner/run/params.d.ts +2 -0
  184. package/dist/plugin-sdk/agents/pi-embedded-runner/run/types.d.ts +2 -0
  185. package/dist/plugin-sdk/agents/pi-embedded-runner/types.d.ts +15 -0
  186. package/dist/plugin-sdk/agents/pi-embedded-subscribe.handlers.tools.d.ts +1 -1
  187. package/dist/plugin-sdk/agents/pi-embedded-subscribe.handlers.types.d.ts +2 -0
  188. package/dist/plugin-sdk/agents/pi-embedded-subscribe.types.d.ts +2 -0
  189. package/dist/plugin-sdk/agents/session-tool-result-guard-wrapper.d.ts +2 -0
  190. package/dist/plugin-sdk/agents/session-tool-result-guard.d.ts +4 -0
  191. package/dist/plugin-sdk/agents/tools/agent-step.d.ts +3 -0
  192. package/dist/plugin-sdk/agents/usage.d.ts +1 -0
  193. package/dist/plugin-sdk/auto-reply/reply/reply-reference.d.ts +1 -1
  194. package/dist/plugin-sdk/auto-reply/reply/session-run-accounting.d.ts +11 -0
  195. package/dist/plugin-sdk/auto-reply/reply/session-usage.d.ts +8 -0
  196. package/dist/plugin-sdk/browser/control-auth.d.ts +13 -0
  197. package/dist/plugin-sdk/channels/plugins/onboarding/signal.d.ts +1 -0
  198. package/dist/plugin-sdk/cli/prompt.d.ts +1 -0
  199. package/dist/plugin-sdk/commands/agent/types.d.ts +2 -0
  200. package/dist/plugin-sdk/config/sessions/paths.d.ts +7 -2
  201. package/dist/plugin-sdk/config/types.agents.d.ts +2 -0
  202. package/dist/plugin-sdk/config/types.discord.d.ts +5 -0
  203. package/dist/plugin-sdk/config/types.gateway.d.ts +15 -0
  204. package/dist/plugin-sdk/config/types.hooks.d.ts +15 -0
  205. package/dist/plugin-sdk/config/zod-schema.agents.d.ts +1 -0
  206. package/dist/plugin-sdk/config/zod-schema.d.ts +11 -0
  207. package/dist/plugin-sdk/config/zod-schema.providers-core.d.ts +9 -0
  208. package/dist/plugin-sdk/config/zod-schema.providers.d.ts +4 -0
  209. package/dist/plugin-sdk/discord/monitor/allow-list.d.ts +15 -0
  210. package/dist/plugin-sdk/discord/send.types.d.ts +3 -0
  211. package/dist/plugin-sdk/gateway/auth.d.ts +36 -0
  212. package/dist/plugin-sdk/gateway/protocol/schema/agent.d.ts +6 -0
  213. package/dist/plugin-sdk/gateway/session-utils.fs.d.ts +3 -1
  214. package/dist/plugin-sdk/index.js +295 -99
  215. package/dist/plugin-sdk/infra/binaries.d.ts +3 -0
  216. package/dist/plugin-sdk/infra/heartbeat-runner.d.ts +1 -0
  217. package/dist/plugin-sdk/infra/net/fetch-guard.d.ts +1 -0
  218. package/dist/plugin-sdk/infra/net/ssrf.d.ts +1 -0
  219. package/dist/plugin-sdk/infra/tailscale.d.ts +34 -0
  220. package/dist/plugin-sdk/infra/tmp-openclaw-dir.d.ts +10 -0
  221. package/dist/plugin-sdk/logging/logger.d.ts +1 -1
  222. package/dist/plugin-sdk/media/input-files.d.ts +5 -0
  223. package/dist/plugin-sdk/routing/resolve-route.d.ts +3 -1
  224. package/dist/plugin-sdk/security/external-content.d.ts +1 -1
  225. package/dist/plugin-sdk/security/secret-equal.d.ts +1 -0
  226. package/dist/plugin-sdk/sessions/input-provenance.d.ts +16 -0
  227. package/dist/plugin-sdk/signal/monitor/event-handler.types.d.ts +8 -0
  228. package/dist/plugin-sdk/signal/monitor/mentions.d.ts +2 -0
  229. package/dist/{plugins-3GyCj5KL.js → plugins-4Hqd1WGf.js} +3 -3
  230. package/dist/{plugins-BL9lIXSA.js → plugins-X7d_tfTE.js} +4 -4
  231. package/dist/{plugins-cli-Ce7VsvZh.js → plugins-cli-Bgku3EGj.js} +253 -46
  232. package/dist/{plugins-cli-e9gUebMd.js → plugins-cli-CVToH3if.js} +254 -47
  233. package/dist/{ports-DupIRXQ0.js → ports-qkt29rdC.js} +2 -2
  234. package/dist/{program-u22vbFpH.js → program-Cf7lkBur.js} +82 -82
  235. package/dist/{progress-g9R--HZD.js → progress-C9kngsTD.js} +1 -1
  236. package/dist/{progress-Da1ehW-x.js → progress-DWqhRakV.js} +1 -1
  237. package/dist/{prompt-style-Dc0C5HC9.js → prompt-style-BFH5D5LN.js} +1 -1
  238. package/dist/{prompt-style-lmJDcgtA.js → prompt-style-CIbmaxSa.js} +1 -1
  239. package/dist/{pw-ai-C43wv1ZF.js → pw-ai-8mdv3h-d.js} +7 -6
  240. package/dist/{pw-ai-DTZVjndL.js → pw-ai-CM1IsSgZ.js} +5 -5
  241. package/dist/{pw-ai-zVebjrSG.js → pw-ai-FGoRVblI.js} +3 -3
  242. package/dist/{pw-ai-CWrnJ98b.js → pw-ai-sS1fRKW_.js} +3 -3
  243. package/dist/{qmd-manager-NPD5Yh_4.js → qmd-manager-C67Fc8aN.js} +4 -4
  244. package/dist/{qmd-manager-ozZ933qc.js → qmd-manager-CXVbfg99.js} +7 -7
  245. package/dist/{qmd-manager-DBCZ1sio.js → qmd-manager-RMRE8Tqt.js} +6 -6
  246. package/dist/{qmd-manager-a9Bt0405.js → qmd-manager-pyc_MTIe.js} +4 -4
  247. package/dist/{register.subclis-BpX3ulH1.js → register.subclis-C02e4zuJ.js} +28 -28
  248. package/dist/{reply-m467_fOC.js → reply-DICXkh_C.js} +911 -568
  249. package/dist/{routes-82Ywfho6.js → routes-CmOI1hIH.js} +29 -11
  250. package/dist/{routes-BqxA3ZYr.js → routes-DewK5tq2.js} +29 -12
  251. package/dist/{rpc-DcGBG-Fp.js → rpc-DHr30euf.js} +3 -3
  252. package/dist/{rpc-CfdBHlnp.js → rpc-T300F8zI.js} +3 -3
  253. package/dist/{run-main-aolvSfj3.js → run-main-C5wpthq1.js} +84 -84
  254. package/dist/{runner-C1G8RFWl.js → runner-CY0nmVme.js} +9 -9
  255. package/dist/{runner-BCBs8JKA.js → runner-Cfm5nTMc.js} +6 -6
  256. package/dist/{runner-CInKPsiP.js → runner-D_dujMod.js} +8 -8
  257. package/dist/{runner-Cwfn-VOM.js → runner-DrGYLH5K.js} +6 -6
  258. package/dist/{sandbox-B0K9e6Fw.js → sandbox-BKYnhYQH.js} +23 -15
  259. package/dist/{sandbox-BW8Xnkw1.js → sandbox-Bhjnh1Xg.js} +21 -13
  260. package/dist/{sandbox-cli-mKCs2J0i.js → sandbox-cli-DBsAjZJN.js} +20 -20
  261. package/dist/{sandbox-cli-BD5LkZ0B.js → sandbox-cli-rV9LtFeu.js} +19 -19
  262. package/dist/{security-cli-kgI4soGy.js → security-cli-BIwJM_rs.js} +27 -27
  263. package/dist/{security-cli-kz8TiyqU.js → security-cli-BRjny8Yu.js} +26 -26
  264. package/dist/{server-context-fX4xiYRh.js → server-context-BGpGs3qd.js} +7 -7
  265. package/dist/{server-context-Lb-eUZG_.js → server-context-Cl0U0vE3.js} +5 -5
  266. package/dist/{server-node-events-Dx18uVrH.js → server-node-events-CBfTbiTA.js} +45 -43
  267. package/dist/{server-node-events-KqZMN30F.js → server-node-events-QCvh8EgI.js} +45 -43
  268. package/dist/{service-DZMXgMra.js → service--nPk7DvT.js} +3 -3
  269. package/dist/{service-DNcIZ5Kp.js → service-99RDXwX4.js} +2 -2
  270. package/dist/{service-audit-0WLGnoNT.js → service-audit-DnLmRGQt.js} +4 -4
  271. package/dist/{service-audit-uhZSlxeb.js → service-audit-ckBaRCVC.js} +3 -3
  272. package/dist/{session-cost-usage-HU4OeRgw.js → session-cost-usage-D7HuoSSD.js} +10 -8
  273. package/dist/{session-cost-usage-CL8gnHRN.js → session-cost-usage-D9hHANWI.js} +10 -8
  274. package/dist/{shared-j4Qtr475.js → shared-Bs4vduG4.js} +3 -3
  275. package/dist/{shared-BBw6F-YC.js → shared-CEY5IkwG.js} +2 -2
  276. package/dist/{shared-DOZs2SoH.js → shared-DRohONn_.js} +3 -3
  277. package/dist/{shared-CtP9K-o2.js → shared-ICqOZibV.js} +3 -3
  278. package/dist/{skill-scanner-C_fQzVDu.js → skill-scanner-rHMtUHtP.js} +1 -1
  279. package/dist/{skills-BvPUNjxo.js → skills-DRjfSQT3.js} +128 -4
  280. package/dist/{skills-aFOsriMP.js → skills-DprQj9X2.js} +129 -5
  281. package/dist/{skills-cli-oWaTJzZd.js → skills-cli-9WO-C55s.js} +12 -12
  282. package/dist/{skills-cli-E6shXpdd.js → skills-cli-B9eej-EW.js} +13 -13
  283. package/dist/{skills-status-D4vbIMnz.js → skills-status-5U3P3YfJ.js} +3 -3
  284. package/dist/{skills-status-DJDaA2Ur.js → skills-status-TDIgVd1K.js} +2 -2
  285. package/dist/{sqlite-B7FPASCO.js → sqlite-BINzs1U0.js} +2 -2
  286. package/dist/{sqlite-B4Z1_Ioc.js → sqlite-D4w5TejA.js} +2 -2
  287. package/dist/{sqlite-BkYnxkQO.js → sqlite-DRRHmlug.js} +2 -2
  288. package/dist/{sqlite-EuQPVXvn.js → sqlite-F6PGkEm1.js} +2 -2
  289. package/dist/{status-B2Yr-2J5.js → status-BKGkKC_v.js} +3 -3
  290. package/dist/{status-DW7m5xUN.js → status-CiHtHdaa.js} +4 -4
  291. package/dist/{status-CxhnUa5J.js → status-DDWoOpeB.js} +33 -33
  292. package/dist/{subsystem-Bv7dGhES.js → subsystem-BoExtIHo.js} +32 -13
  293. package/dist/{system-cli-0JXhJNWm.js → system-cli-B6lr60Io.js} +14 -14
  294. package/dist/{system-cli-D-0OaMtH.js → system-cli-CprW9G3h.js} +14 -14
  295. package/dist/{systemd-CNTodvCO.js → systemd-C0VZriGM.js} +2 -2
  296. package/dist/{systemd-CUJJHgHa.js → systemd-DrmBtJ5T.js} +3 -3
  297. package/dist/{systemd-hints-cmHtrXUl.js → systemd-hints-DZtXiVHa.js} +1 -1
  298. package/dist/{systemd-linger-CArPbmvv.js → systemd-linger-NC2kl1SC.js} +2 -2
  299. package/dist/{systemd-linger-XvT9Y9sb.js → systemd-linger-xdn3BdPh.js} +2 -2
  300. package/dist/{table-DzBBIqHO.js → table-B8dx3v4v.js} +2 -2
  301. package/dist/{table-oJQPTUL6.js → table-CwulTLQp.js} +1 -1
  302. package/dist/{tool-display-Na-EVL83.js → tool-display-CZRIDMRm.js} +1 -1
  303. package/dist/{tool-display-sHJa3kRs.js → tool-display-ClRud3pg.js} +2 -2
  304. package/dist/{tui-nGp8ltQK.js → tui-CVTQn-dC.js} +9 -9
  305. package/dist/{tui-Biw7aqPj.js → tui-Lu8FdrlK.js} +9 -9
  306. package/dist/{tui-cli-C9FEfG7C.js → tui-cli-BLpTj1X9.js} +25 -25
  307. package/dist/{tui-cli-Dxnu5JGl.js → tui-cli-BLx5kL2I.js} +25 -25
  308. package/dist/{tui-formatters-BiNTNGwg.js → tui-formatters-CNySEfJN.js} +5 -5
  309. package/dist/{tui-formatters-C_baVYUz.js → tui-formatters-DePhZK3J.js} +5 -5
  310. package/dist/{update-C4rsLj2F.js → update-DHVxMTpQ.js} +3 -3
  311. package/dist/{update-uwUWrKFu.js → update-DU1geolI.js} +3 -3
  312. package/dist/{update-cli-cNd_G9E6.js → update-cli-C0hUvJWK.js} +66 -66
  313. package/dist/{update-cli-CBXp-c4C.js → update-cli-Wb1GB3rL.js} +68 -68
  314. package/dist/{update-runner-BLsqC24J.js → update-runner--ixK4J3W.js} +10 -10
  315. package/dist/{update-runner-C_FDpmA3.js → update-runner-7Qa1T9y6.js} +9 -9
  316. package/dist/{utils-Dk86IbEs.js → utils-BLJAc3ZV.js} +1 -1
  317. package/dist/{utils-BHPdZE4h.js → utils-Cd9QdCHh.js} +1 -1
  318. package/dist/{webhooks-cli-BpBKXL7W.js → webhooks-cli-DgcMy7RG.js} +12 -12
  319. package/dist/{webhooks-cli-wNfhfKqm.js → webhooks-cli-aVzUcJY9.js} +11 -11
  320. package/dist/{widearea-dns-WVCWJTEb.js → widearea-dns-BaIgNEhY.js} +1 -1
  321. package/dist/{widearea-dns-BWYPcfby.js → widearea-dns-DzuRdwk5.js} +1 -1
  322. package/dist/{ws-log-Cafylho7.js → ws-log-CIXbLCka.js} +1 -1
  323. package/dist/{ws-log-DTUOUVgR.js → ws-log-DcQFZByi.js} +1 -1
  324. package/dist/{wsl-B-H6Z5wp.js → wsl-BUOkxKJu.js} +2 -2
  325. package/docs/automation/webhook.md +43 -2
  326. package/docs/channels/discord.md +29 -1
  327. package/docs/cli/plugins.md +20 -1
  328. package/docs/cli/security.md +1 -0
  329. package/docs/concepts/session-tool.md +1 -0
  330. package/docs/gateway/configuration-reference.md +11 -0
  331. package/docs/gateway/configuration.md +3 -0
  332. package/docs/gateway/openresponses-http-api.md +15 -0
  333. package/docs/gateway/security/index.md +3 -0
  334. package/docs/help/faq.md +9 -0
  335. package/docs/install/installer.md +20 -0
  336. package/docs/reference/transcript-hygiene.md +18 -0
  337. package/docs/tools/browser.md +6 -0
  338. package/extensions/diagnostics-otel/package.json +9 -9
  339. package/extensions/feishu/package.json +1 -1
  340. package/extensions/feishu/src/config-schema.ts +6 -0
  341. package/extensions/feishu/src/reply-dispatcher.test.ts +116 -0
  342. package/extensions/feishu/src/reply-dispatcher.ts +124 -67
  343. package/extensions/feishu/src/streaming-card.ts +223 -0
  344. package/extensions/feishu/src/targets.test.ts +16 -0
  345. package/extensions/feishu/src/targets.ts +1 -1
  346. package/extensions/irc/src/client.ts +1 -1
  347. package/extensions/minimax-portal-auth/index.ts +7 -5
  348. package/extensions/nostr/package.json +1 -1
  349. package/package.json +13 -13
  350. package/dist/auth-BcNHFK-i.js +0 -184
  351. package/dist/auth-jrfLXze7.js +0 -184
  352. /package/dist/{archive-DqNr5i8b.js → archive-beaSfAzA.js} +0 -0
  353. /package/dist/{brew-BIrWdDps.js → brew-BUIxHEkn.js} +0 -0
  354. /package/dist/{brew-6UyogeLe.js → brew-ROHf0-Xp.js} +0 -0
  355. /package/dist/{constants-DuoCkWRh.js → constants-BvQ6S8j5.js} +0 -0
  356. /package/dist/{errors-x4NYs-1P.js → errors-DjZBTJJ3.js} +0 -0
  357. /package/dist/{helpers-BDvtkJjw.js → helpers-HyeZXsnu.js} +0 -0
  358. /package/dist/{is-main-CE1eOBYb.js → is-main-BWoXGz7p.js} +0 -0
  359. /package/dist/{parse-Cjiudy6x.js → parse-Bw0oH-rT.js} +0 -0
  360. /package/dist/{parse-timeout-DFSPLxpY.js → parse-timeout-D1XX_zN_.js} +0 -0
  361. /package/dist/{prompts-BOz5176z.js → prompts-Bg96reub.js} +0 -0
  362. /package/dist/{redact-DuEEf1p1.js → redact-Br9GfacZ.js} +0 -0
  363. /package/dist/{skill-scanner-CprFkZib.js → skill-scanner-CucvxYhu.js} +0 -0
  364. /package/dist/{transcript-events-CZ8CG4ht.js → transcript-events-BtNd-j6q.js} +0 -0
@@ -1,6 +1,6 @@
1
- import { t as createSubsystemLogger } from "./subsystem-Bv7dGhES.js";
2
- import { s as formatSandboxToolPolicyBlockedMessage } from "./sandbox-BW8Xnkw1.js";
3
- import { o as resizeToJpeg, r as getImageMetadata } from "./routes-82Ywfho6.js";
1
+ import { t as createSubsystemLogger } from "./subsystem-BoExtIHo.js";
2
+ import { s as formatSandboxToolPolicyBlockedMessage } from "./sandbox-Bhjnh1Xg.js";
3
+ import { o as resizeToJpeg, r as getImageMetadata } from "./routes-CmOI1hIH.js";
4
4
  import path from "node:path";
5
5
  import fs from "node:fs/promises";
6
6
  import { createHash } from "node:crypto";
@@ -353,19 +353,22 @@ function isContextOverflowError(errorMessage) {
353
353
  return lower.includes("request_too_large") || lower.includes("request exceeds the maximum size") || lower.includes("context length exceeded") || lower.includes("maximum context length") || lower.includes("prompt is too long") || lower.includes("exceeds model context window") || hasRequestSizeExceeds && hasContextWindow || lower.includes("context overflow:") || lower.includes("413") && lower.includes("too large");
354
354
  }
355
355
  const CONTEXT_WINDOW_TOO_SMALL_RE = /context window.*(too small|minimum is)/i;
356
- const CONTEXT_OVERFLOW_HINT_RE = /context.*overflow|context window.*(too (?:large|long)|exceed|over|limit|max(?:imum)?|requested|sent|tokens)|(?:prompt|request|input).*(too (?:large|long)|exceed|over|limit|max(?:imum)?)/i;
356
+ const CONTEXT_OVERFLOW_HINT_RE = /context.*overflow|context window.*(too (?:large|long)|exceed|over|limit|max(?:imum)?|requested|sent|tokens)|prompt.*(too (?:large|long)|exceed|over|limit|max(?:imum)?)|(?:request|input).*(?:context|window|length|token).*(too (?:large|long)|exceed|over|limit|max(?:imum)?)/i;
357
+ const RATE_LIMIT_HINT_RE = /rate limit|too many requests|requests per (?:minute|hour|day)|quota|throttl|429\b/i;
357
358
  function isLikelyContextOverflowError(errorMessage) {
358
359
  if (!errorMessage) return false;
359
360
  if (CONTEXT_WINDOW_TOO_SMALL_RE.test(errorMessage)) return false;
360
361
  if (isRateLimitErrorMessage(errorMessage)) return false;
361
362
  if (isContextOverflowError(errorMessage)) return true;
363
+ if (RATE_LIMIT_HINT_RE.test(errorMessage)) return false;
362
364
  return CONTEXT_OVERFLOW_HINT_RE.test(errorMessage);
363
365
  }
364
366
  function isCompactionFailureError(errorMessage) {
365
367
  if (!errorMessage) return false;
366
368
  const lower = errorMessage.toLowerCase();
367
369
  if (!(lower.includes("summarization failed") || lower.includes("auto-compaction") || lower.includes("compaction failed") || lower.includes("compaction"))) return false;
368
- return isContextOverflowError(errorMessage) || lower.includes("context overflow");
370
+ if (isLikelyContextOverflowError(errorMessage)) return true;
371
+ return lower.includes("context overflow");
369
372
  }
370
373
  const ERROR_PAYLOAD_PREFIX_RE = /^(?:error|api\s*error|apierror|openai\s*error|anthropic\s*error|gateway\s*error)[:\s-]+/i;
371
374
  const FINAL_TAG_RE = /<\s*\/?\s*final\s*>/gi;
@@ -1,12 +1,12 @@
1
1
  import { i as resolveGatewayPort, t as STATE_DIR } from "./paths-rb94mUrR.js";
2
- import { C as resolveOpenClawPackageRootSync, D as buildAgentMainSessionKey, M as normalizeAgentId, N as normalizeMainKey, P as resolveAgentIdFromSessionKey, T as DEFAULT_AGENT_ID, _ as DEFAULT_TOOLS_FILENAME, c as resolveDefaultAgentId, d as DEFAULT_AGENTS_FILENAME, f as DEFAULT_AGENT_WORKSPACE_DIR, g as DEFAULT_SOUL_FILENAME, h as DEFAULT_IDENTITY_FILENAME, j as normalizeAccountId$1, l as resolveSessionAgentId, m as DEFAULT_HEARTBEAT_FILENAME, n as resolveAgentConfig, p as DEFAULT_BOOTSTRAP_FILENAME, v as DEFAULT_USER_FILENAME, w as DEFAULT_ACCOUNT_ID, y as ensureAgentWorkspace } from "./agent-scope-CN8DM4Xb.js";
3
- import { C as CONFIG_DIR, I as resolveConfigDir, O as escapeRegExp, P as normalizeE164, R as resolveUserPath, _ as normalizeAnyChannelId, b as getActivePluginRegistry, g as getChatChannelMeta, h as CHAT_CHANNEL_ORDER, l as createSubsystemLogger, m as CHANNEL_IDS, n as runExec, u as defaultRuntime, x as requireActivePluginRegistry, y as normalizeChatChannelId } from "./exec-D12IZYtJ.js";
4
- import { O as isTruthyEnvValue, k as parseBooleanValue } from "./model-selection-B9Y7dKQd.js";
2
+ import { C as resolveOpenClawPackageRootSync, D as buildAgentMainSessionKey, M as normalizeAgentId, N as normalizeMainKey, P as resolveAgentIdFromSessionKey, T as DEFAULT_AGENT_ID, _ as DEFAULT_TOOLS_FILENAME, c as resolveDefaultAgentId, d as DEFAULT_AGENTS_FILENAME, f as DEFAULT_AGENT_WORKSPACE_DIR, g as DEFAULT_SOUL_FILENAME, h as DEFAULT_IDENTITY_FILENAME, j as normalizeAccountId$1, l as resolveSessionAgentId, m as DEFAULT_HEARTBEAT_FILENAME, n as resolveAgentConfig, p as DEFAULT_BOOTSTRAP_FILENAME, v as DEFAULT_USER_FILENAME, w as DEFAULT_ACCOUNT_ID, y as ensureAgentWorkspace } from "./agent-scope-DPIFau3f.js";
3
+ import { C as CONFIG_DIR, I as resolveConfigDir, O as escapeRegExp, P as normalizeE164, R as resolveUserPath, _ as normalizeAnyChannelId, at as resolvePreferredOpenClawTmpDir, b as getActivePluginRegistry, g as getChatChannelMeta, h as CHAT_CHANNEL_ORDER, l as createSubsystemLogger, m as CHANNEL_IDS, n as runExec, u as defaultRuntime, x as requireActivePluginRegistry, y as normalizeChatChannelId } from "./exec-CJFFoM7H.js";
4
+ import { O as isTruthyEnvValue, k as parseBooleanValue } from "./model-selection-C1GmkTAV.js";
5
5
  import { t as formatCliCommand } from "./command-format-CFzL448l.js";
6
- import { b as resolveMemorySlotDecision, d as parseDurationMs, g as MANIFEST_KEY, h as LEGACY_MANIFEST_KEYS, i as writeConfigFile, j as resolveWhatsAppAccount, o as parseByteSize, p as loadPluginManifestRegistry, t as loadConfig, v as normalizePluginsConfig, y as resolveEnableState } from "./config-D50SQVar.js";
7
- import { A as DEFAULT_OPENCLAW_BROWSER_PROFILE_NAME, C as DEFAULT_AI_SNAPSHOT_EFFICIENT_DEPTH, D as DEFAULT_BROWSER_EVALUATE_ENABLED, E as DEFAULT_BROWSER_DEFAULT_PROFILE_NAME, O as DEFAULT_OPENCLAW_BROWSER_COLOR, T as DEFAULT_AI_SNAPSHOT_MAX_CHARS, _ as ensureChromeExtensionRelayServer, a as resolveOpenClawUserDataDir, b as isLoopbackHost, c as captureScreenshot, d as normalizeCdpWsUrl, f as snapshotAria, h as getHeadersWithAuth, i as launchOpenClawChrome, k as DEFAULT_OPENCLAW_BROWSER_ENABLED, l as createTargetViaCdp, n as isChromeCdpReady, o as stopOpenClawChrome, p as appendCdpPath, r as isChromeReachable, s as resolveBrowserExecutableForPlatform, v as stopChromeExtensionRelayServer, w as DEFAULT_AI_SNAPSHOT_EFFICIENT_MAX_CHARS } from "./chrome-BCPPeLQ6.js";
6
+ import { b as resolveMemorySlotDecision, d as parseDurationMs, g as MANIFEST_KEY, h as LEGACY_MANIFEST_KEYS, i as writeConfigFile, j as resolveWhatsAppAccount, o as parseByteSize, p as loadPluginManifestRegistry, t as loadConfig, v as normalizePluginsConfig, y as resolveEnableState } from "./config-QYrbd7x7.js";
7
+ import { A as DEFAULT_OPENCLAW_BROWSER_PROFILE_NAME, C as DEFAULT_AI_SNAPSHOT_EFFICIENT_DEPTH, D as DEFAULT_BROWSER_EVALUATE_ENABLED, E as DEFAULT_BROWSER_DEFAULT_PROFILE_NAME, O as DEFAULT_OPENCLAW_BROWSER_COLOR, T as DEFAULT_AI_SNAPSHOT_MAX_CHARS, _ as ensureChromeExtensionRelayServer, a as resolveOpenClawUserDataDir, b as isLoopbackHost, c as captureScreenshot, d as normalizeCdpWsUrl, f as snapshotAria, h as getHeadersWithAuth, i as launchOpenClawChrome, k as DEFAULT_OPENCLAW_BROWSER_ENABLED, l as createTargetViaCdp, n as isChromeCdpReady, o as stopOpenClawChrome, p as appendCdpPath, r as isChromeReachable, s as resolveBrowserExecutableForPlatform, v as stopChromeExtensionRelayServer, w as DEFAULT_AI_SNAPSHOT_EFFICIENT_MAX_CHARS } from "./chrome-DL0avO8n.js";
8
8
  import { n as formatErrorMessage, t as extractErrorCode } from "./errors-dpUbQseI.js";
9
- import { r as resolveSessionTranscriptPath, t as resolveDefaultSessionStorePath } from "./paths-CB2fqqbX.js";
9
+ import { n as resolveSessionFilePath, t as resolveDefaultSessionStorePath } from "./paths-D0O87MfH.js";
10
10
  import { t as emitSessionTranscriptUpdate } from "./transcript-events-BrkSiEN9.js";
11
11
  import path from "node:path";
12
12
  import fs from "node:fs";
@@ -1679,6 +1679,83 @@ function applySkillEnvOverridesFromSnapshot(params) {
1679
1679
  };
1680
1680
  }
1681
1681
 
1682
+ //#endregion
1683
+ //#region src/agents/sandbox-paths.ts
1684
+ const UNICODE_SPACES = /[\u00A0\u2000-\u200A\u202F\u205F\u3000]/g;
1685
+ const HTTP_URL_RE = /^https?:\/\//i;
1686
+ const DATA_URL_RE = /^data:/i;
1687
+ function normalizeUnicodeSpaces(str) {
1688
+ return str.replace(UNICODE_SPACES, " ");
1689
+ }
1690
+ function expandPath(filePath) {
1691
+ const normalized = normalizeUnicodeSpaces(filePath);
1692
+ if (normalized === "~") return os.homedir();
1693
+ if (normalized.startsWith("~/")) return os.homedir() + normalized.slice(1);
1694
+ return normalized;
1695
+ }
1696
+ function resolveToCwd(filePath, cwd) {
1697
+ const expanded = expandPath(filePath);
1698
+ if (path.isAbsolute(expanded)) return expanded;
1699
+ return path.resolve(cwd, expanded);
1700
+ }
1701
+ function resolveSandboxPath(params) {
1702
+ const resolved = resolveToCwd(params.filePath, params.cwd);
1703
+ const rootResolved = path.resolve(params.root);
1704
+ const relative = path.relative(rootResolved, resolved);
1705
+ if (!relative || relative === "") return {
1706
+ resolved,
1707
+ relative: ""
1708
+ };
1709
+ if (relative.startsWith("..") || path.isAbsolute(relative)) throw new Error(`Path escapes sandbox root (${shortPath(rootResolved)}): ${params.filePath}`);
1710
+ return {
1711
+ resolved,
1712
+ relative
1713
+ };
1714
+ }
1715
+ async function assertSandboxPath(params) {
1716
+ const resolved = resolveSandboxPath(params);
1717
+ await assertNoSymlink(resolved.relative, path.resolve(params.root));
1718
+ return resolved;
1719
+ }
1720
+ function assertMediaNotDataUrl(media) {
1721
+ const raw = media.trim();
1722
+ if (DATA_URL_RE.test(raw)) throw new Error("data: URLs are not supported for media. Use buffer instead.");
1723
+ }
1724
+ async function resolveSandboxedMediaSource(params) {
1725
+ const raw = params.media.trim();
1726
+ if (!raw) return raw;
1727
+ if (HTTP_URL_RE.test(raw)) return raw;
1728
+ let candidate = raw;
1729
+ if (/^file:\/\//i.test(candidate)) try {
1730
+ candidate = fileURLToPath(candidate);
1731
+ } catch {
1732
+ throw new Error(`Invalid file:// URL for sandboxed media: ${raw}`);
1733
+ }
1734
+ return (await assertSandboxPath({
1735
+ filePath: candidate,
1736
+ cwd: params.sandboxRoot,
1737
+ root: params.sandboxRoot
1738
+ })).resolved;
1739
+ }
1740
+ async function assertNoSymlink(relative, root) {
1741
+ if (!relative) return;
1742
+ const parts = relative.split(path.sep).filter(Boolean);
1743
+ let current = root;
1744
+ for (const part of parts) {
1745
+ current = path.join(current, part);
1746
+ try {
1747
+ if ((await fs$1.lstat(current)).isSymbolicLink()) throw new Error(`Symlink not allowed in sandbox path: ${current}`);
1748
+ } catch (err) {
1749
+ if (err.code === "ENOENT") return;
1750
+ throw err;
1751
+ }
1752
+ }
1753
+ }
1754
+ function shortPath(value) {
1755
+ if (value.startsWith(os.homedir())) return `~${value.slice(os.homedir().length)}`;
1756
+ return value;
1757
+ }
1758
+
1682
1759
  //#endregion
1683
1760
  //#region src/agents/skills/bundled-dir.ts
1684
1761
  function looksLikeSkillsDir(dir) {
@@ -1922,6 +1999,36 @@ function resolveSkillsPromptForRun(params) {
1922
1999
  function loadWorkspaceSkillEntries(workspaceDir, opts) {
1923
2000
  return loadSkillEntries(workspaceDir, opts);
1924
2001
  }
2002
+ function resolveUniqueSyncedSkillDirName(base, used) {
2003
+ if (!used.has(base)) {
2004
+ used.add(base);
2005
+ return base;
2006
+ }
2007
+ for (let index = 2; index < 1e4; index += 1) {
2008
+ const candidate = `${base}-${index}`;
2009
+ if (!used.has(candidate)) {
2010
+ used.add(candidate);
2011
+ return candidate;
2012
+ }
2013
+ }
2014
+ let fallbackIndex = 1e4;
2015
+ let fallback = `${base}-${fallbackIndex}`;
2016
+ while (used.has(fallback)) {
2017
+ fallbackIndex += 1;
2018
+ fallback = `${base}-${fallbackIndex}`;
2019
+ }
2020
+ used.add(fallback);
2021
+ return fallback;
2022
+ }
2023
+ function resolveSyncedSkillDestinationPath(params) {
2024
+ const sourceDirName = path.basename(params.entry.skill.baseDir).trim();
2025
+ if (!sourceDirName || sourceDirName === "." || sourceDirName === "..") return null;
2026
+ return resolveSandboxPath({
2027
+ filePath: resolveUniqueSyncedSkillDirName(sourceDirName, params.usedDirNames),
2028
+ cwd: params.targetSkillsDir,
2029
+ root: params.targetSkillsDir
2030
+ }).resolved;
2031
+ }
1925
2032
  async function syncSkillsToWorkspace(params) {
1926
2033
  const sourceDir = resolveUserPath(params.sourceWorkspaceDir);
1927
2034
  const targetDir = resolveUserPath(params.targetWorkspaceDir);
@@ -1938,8 +2045,24 @@ async function syncSkillsToWorkspace(params) {
1938
2045
  force: true
1939
2046
  });
1940
2047
  await fsp.mkdir(targetSkillsDir, { recursive: true });
2048
+ const usedDirNames = /* @__PURE__ */ new Set();
1941
2049
  for (const entry of entries) {
1942
- const dest = path.join(targetSkillsDir, entry.skill.name);
2050
+ let dest = null;
2051
+ try {
2052
+ dest = resolveSyncedSkillDestinationPath({
2053
+ targetSkillsDir,
2054
+ entry,
2055
+ usedDirNames
2056
+ });
2057
+ } catch (error) {
2058
+ const message = error instanceof Error ? error.message : JSON.stringify(error);
2059
+ console.warn(`[skills] Failed to resolve safe destination for ${entry.skill.name}: ${message}`);
2060
+ continue;
2061
+ }
2062
+ if (!dest) {
2063
+ console.warn(`[skills] Failed to resolve safe destination for ${entry.skill.name}: invalid source directory name`);
2064
+ continue;
2065
+ }
1943
2066
  try {
1944
2067
  await fsp.cp(entry.skill.baseDir, dest, {
1945
2068
  recursive: true,
@@ -2052,7 +2175,7 @@ function isModuleNotFoundError(err) {
2052
2175
  }
2053
2176
  async function loadPwAiModule(mode) {
2054
2177
  try {
2055
- return await import("./pw-ai-CWrnJ98b.js");
2178
+ return await import("./pw-ai-sS1fRKW_.js");
2056
2179
  } catch (err) {
2057
2180
  if (mode === "soft") return null;
2058
2181
  if (isModuleNotFoundError(err)) return null;
@@ -2609,6 +2732,7 @@ function registerBrowserAgentActRoutes(app, ctx) {
2609
2732
 
2610
2733
  //#endregion
2611
2734
  //#region src/browser/routes/agent.debug.ts
2735
+ const DEFAULT_TRACE_DIR = resolvePreferredOpenClawTmpDir();
2612
2736
  function registerBrowserAgentDebugRoutes(app, ctx) {
2613
2737
  app.get("/console", async (req, res) => {
2614
2738
  const profileCtx = resolveProfileContext(req, res, ctx);
@@ -2719,7 +2843,7 @@ function registerBrowserAgentDebugRoutes(app, ctx) {
2719
2843
  const pw = await requirePwAi(res, "trace stop");
2720
2844
  if (!pw) return;
2721
2845
  const id = crypto.randomUUID();
2722
- const dir = "/tmp/openclaw";
2846
+ const dir = DEFAULT_TRACE_DIR;
2723
2847
  await fs$1.mkdir(dir, { recursive: true });
2724
2848
  const tracePath = out.trim() || path.join(dir, `browser-trace-${id}.zip`);
2725
2849
  await pw.traceStopViaPlaywright({
@@ -2762,6 +2886,22 @@ function normalizeHostnameSet(values) {
2762
2886
  if (!values || values.length === 0) return /* @__PURE__ */ new Set();
2763
2887
  return new Set(values.map((value) => normalizeHostname(value)).filter(Boolean));
2764
2888
  }
2889
+ function normalizeHostnameAllowlist(values) {
2890
+ if (!values || values.length === 0) return [];
2891
+ return Array.from(new Set(values.map((value) => normalizeHostname(value)).filter((value) => value !== "*" && value !== "*." && value.length > 0)));
2892
+ }
2893
+ function isHostnameAllowedByPattern(hostname, pattern) {
2894
+ if (pattern.startsWith("*.")) {
2895
+ const suffix = pattern.slice(2);
2896
+ if (!suffix || hostname === suffix) return false;
2897
+ return hostname.endsWith(`.${suffix}`);
2898
+ }
2899
+ return hostname === pattern;
2900
+ }
2901
+ function matchesHostnameAllowlist(hostname, allowlist) {
2902
+ if (allowlist.length === 0) return true;
2903
+ return allowlist.some((pattern) => isHostnameAllowedByPattern(hostname, pattern));
2904
+ }
2765
2905
  function parseIpv4(address) {
2766
2906
  const parts = address.split(".");
2767
2907
  if (parts.length !== 4) return null;
@@ -2862,7 +3002,10 @@ async function resolvePinnedHostnameWithPolicy(hostname, params = {}) {
2862
3002
  const normalized = normalizeHostname(hostname);
2863
3003
  if (!normalized) throw new Error("Invalid hostname");
2864
3004
  const allowPrivateNetwork = Boolean(params.policy?.allowPrivateNetwork);
2865
- const isExplicitAllowed = normalizeHostnameSet(params.policy?.allowedHostnames).has(normalized);
3005
+ const allowedHostnames = normalizeHostnameSet(params.policy?.allowedHostnames);
3006
+ const hostnameAllowlist = normalizeHostnameAllowlist(params.policy?.hostnameAllowlist);
3007
+ const isExplicitAllowed = allowedHostnames.has(normalized);
3008
+ if (!matchesHostnameAllowlist(normalized, hostnameAllowlist)) throw new SsrFBlockedError(`Blocked hostname (not in allowlist): ${hostname}`);
2866
3009
  if (!allowPrivateNetwork && !isExplicitAllowed) {
2867
3010
  if (isBlockedHostname(normalized)) throw new SsrFBlockedError(`Blocked hostname: ${hostname}`);
2868
3011
  if (isPrivateIpAddress(normalized)) throw new SsrFBlockedError("Blocked: private/internal IP address");
@@ -2883,9 +3026,6 @@ async function resolvePinnedHostnameWithPolicy(hostname, params = {}) {
2883
3026
  })
2884
3027
  };
2885
3028
  }
2886
- async function resolvePinnedHostname(hostname, lookupFn = lookup$1) {
2887
- return await resolvePinnedHostnameWithPolicy(hostname, { lookupFn });
2888
- }
2889
3029
  function createPinnedDispatcher(pinned) {
2890
3030
  return new Agent({ connect: { lookup: pinned.lookup } });
2891
3031
  }
@@ -4874,11 +5014,11 @@ function createProfileContext(opts, profile) {
4874
5014
  const userDataDir = resolveOpenClawUserDataDir(profile.name);
4875
5015
  const profileState = getProfileState();
4876
5016
  if (await isHttpReachable(300) && !profileState.running) try {
4877
- await (await import("./pw-ai-CWrnJ98b.js")).closePlaywrightBrowserConnection();
5017
+ await (await import("./pw-ai-sS1fRKW_.js")).closePlaywrightBrowserConnection();
4878
5018
  } catch {}
4879
5019
  if (profileState.running) await stopRunningBrowser();
4880
5020
  try {
4881
- await (await import("./pw-ai-CWrnJ98b.js")).closePlaywrightBrowserConnection();
5021
+ await (await import("./pw-ai-sS1fRKW_.js")).closePlaywrightBrowserConnection();
4882
5022
  } catch {}
4883
5023
  if (!fs.existsSync(userDataDir)) return {
4884
5024
  moved: false,
@@ -7314,7 +7454,15 @@ async function appendAssistantMessageToSessionTranscript(params) {
7314
7454
  ok: false,
7315
7455
  reason: `unknown sessionKey: ${sessionKey}`
7316
7456
  };
7317
- const sessionFile = entry.sessionFile?.trim() || resolveSessionTranscriptPath(entry.sessionId, params.agentId);
7457
+ let sessionFile;
7458
+ try {
7459
+ sessionFile = resolveSessionFilePath(entry.sessionId, entry, { sessionsDir: path.dirname(storePath) });
7460
+ } catch (err) {
7461
+ return {
7462
+ ok: false,
7463
+ reason: err instanceof Error ? err.message : String(err)
7464
+ };
7465
+ }
7318
7466
  await ensureSessionHeader({
7319
7467
  sessionFile,
7320
7468
  sessionId: entry.sessionId
@@ -7584,19 +7732,22 @@ function isContextOverflowError(errorMessage) {
7584
7732
  return lower.includes("request_too_large") || lower.includes("request exceeds the maximum size") || lower.includes("context length exceeded") || lower.includes("maximum context length") || lower.includes("prompt is too long") || lower.includes("exceeds model context window") || hasRequestSizeExceeds && hasContextWindow || lower.includes("context overflow:") || lower.includes("413") && lower.includes("too large");
7585
7733
  }
7586
7734
  const CONTEXT_WINDOW_TOO_SMALL_RE = /context window.*(too small|minimum is)/i;
7587
- const CONTEXT_OVERFLOW_HINT_RE = /context.*overflow|context window.*(too (?:large|long)|exceed|over|limit|max(?:imum)?|requested|sent|tokens)|(?:prompt|request|input).*(too (?:large|long)|exceed|over|limit|max(?:imum)?)/i;
7735
+ const CONTEXT_OVERFLOW_HINT_RE = /context.*overflow|context window.*(too (?:large|long)|exceed|over|limit|max(?:imum)?|requested|sent|tokens)|prompt.*(too (?:large|long)|exceed|over|limit|max(?:imum)?)|(?:request|input).*(?:context|window|length|token).*(too (?:large|long)|exceed|over|limit|max(?:imum)?)/i;
7736
+ const RATE_LIMIT_HINT_RE = /rate limit|too many requests|requests per (?:minute|hour|day)|quota|throttl|429\b/i;
7588
7737
  function isLikelyContextOverflowError(errorMessage) {
7589
7738
  if (!errorMessage) return false;
7590
7739
  if (CONTEXT_WINDOW_TOO_SMALL_RE.test(errorMessage)) return false;
7591
7740
  if (isRateLimitErrorMessage(errorMessage)) return false;
7592
7741
  if (isContextOverflowError(errorMessage)) return true;
7742
+ if (RATE_LIMIT_HINT_RE.test(errorMessage)) return false;
7593
7743
  return CONTEXT_OVERFLOW_HINT_RE.test(errorMessage);
7594
7744
  }
7595
7745
  function isCompactionFailureError(errorMessage) {
7596
7746
  if (!errorMessage) return false;
7597
7747
  const lower = errorMessage.toLowerCase();
7598
7748
  if (!(lower.includes("summarization failed") || lower.includes("auto-compaction") || lower.includes("compaction failed") || lower.includes("compaction"))) return false;
7599
- return isContextOverflowError(errorMessage) || lower.includes("context overflow");
7749
+ if (isLikelyContextOverflowError(errorMessage)) return true;
7750
+ return lower.includes("context overflow");
7600
7751
  }
7601
7752
  const ERROR_PAYLOAD_PREFIX_RE = /^(?:error|api\s*error|apierror|openai\s*error|anthropic\s*error|gateway\s*error)[:\s-]+/i;
7602
7753
  const FINAL_TAG_RE = /<\s*\/?\s*final\s*>/gi;
@@ -8794,4 +8945,4 @@ function validateAnthropicTurns(messages) {
8794
8945
  }
8795
8946
 
8796
8947
  //#endregion
8797
- export { updateLastRoute as $, expandPolicyWithPluginGroups as $t, isBillingAssistantError as A, resolveSignalAccount as An, convertHeicToJpeg as At, isTransientHttpError as B, listBindings as Bn, resolvePinnedHostname as Bt, BILLING_ERROR_USER_MESSAGE as C, isAudioFileName as Cn, resolveChannelGroupToolsPolicy as Ct, formatRawAssistantErrorForUi as D, maxBytesForKind as Dn, registerBrowserRoutes as Dt, formatBillingErrorMessage as E, MAX_IMAGE_BYTES$1 as En, createBrowserRouteContext as Et, isFailoverErrorMessage as F, normalizeWhatsAppTarget as Fn, getMediaDir as Ft, resolveSandboxContext as G, listEnabledDiscordAccounts as Gn, resolveSkillsPromptForRun as Gt, parseImageSizeError as H, resolveSlackAppToken as Hn, buildWorkspaceSkillCommandSpecs as Ht, isLikelyContextOverflowError as I, listEnabledTelegramAccounts as In, saveMediaBuffer as It, resolveMirroredTranscriptText as J, applySkillEnvOverridesFromSnapshot as Jt, resolveSandboxRuntimeStatus as K, resolveDiscordAccount as Kn, resolvePluginSkillDirs as Kt, isRateLimitAssistantError as L, listTelegramAccountIds as Ln, SsrFBlockedError as Lt, isCompactionFailureError as M, listChannelPlugins as Mn, hasAlphaChannel as Mt, isContextOverflowError as N, normalizeChannelId as Nn, optimizeImageToPng as Nt, getApiErrorPayloadFingerprint as O, mediaKindFromMime as On, resolveBrowserConfig as Ot, isFailoverAssistantError as P, isWhatsAppGroupJid as Pn, resizeToJpeg as Pt, saveSessionStore as Q, collectExplicitAllowlist as Qt, isRawApiErrorPayload as R, resolveTelegramAccount as Rn, closeDispatcher as Rt, isGoogleModelApi as S, imageMimeFromFormat as Sn, resolveChannelGroupRequireMention as St, formatAssistantErrorText as T, kindFromMime as Tn, resolveGroupSessionKey as Tt, sanitizeUserFacingText as U, resolveSlackBotToken as Un, buildWorkspaceSkillSnapshot as Ut, parseImageDimensionError as V, resolveSlackAccount as Vn, resolvePinnedHostnameWithPolicy as Vt, ensureSandboxWorkspaceForSession as W, normalizeChatType as Wn, loadWorkspaceSkillEntries as Wt, readSessionUpdatedAt as X, applyOwnerOnlyToolPolicy as Xt, loadSessionStore as Y, resolveSandboxConfigForAgent as Yt, recordSessionMetaFromInbound as Z, buildPluginToolGroups as Zt, sanitizeSessionMessagesImages as _, GATEWAY_CLIENT_MODES as _n, deriveSessionMetaPatch as _t, formatXHighModelHint as a, ensureSessionHeader$1 as an, deliveryContextKey as at, downgradeOpenAIReasoningBlocks as b, extensionForMime as bn, resolveIMessageAccount as bt, normalizeReasoningLevel as c, INTERNAL_MESSAGE_CHANNEL as cn, normalizeSessionDeliveryFields as ct, normalizeVerboseLevel as d, isMarkdownCapableMessageChannel as dn, resolveChannelResetConfig as dt, expandToolGroups as en, updateSessionStore as et, resolveResponseUsageMode as f, listDeliverableMessageChannels as fn, resolveSessionResetPolicy as ft, normalizeTextForComparison as g, GATEWAY_CLIENT_IDS as gn, resolveMainSessionKey as gt, isMessagingToolDuplicateNormalized as h, resolveMessageChannel as hn, DEFAULT_RESET_TRIGGERS as ht, formatThinkingLevels as i, buildBootstrapContextFiles as in, deliveryContextFromSession as it, isCloudCodeAssistFormatError as j, getChannelPlugin as jn, getImageMetadata as jt, isAuthAssistantError as k, listEnabledSignalAccounts as kn, resolveProfile as kt, normalizeThinkLevel as l, isDeliverableMessageChannel as ln, resolveSessionKey as lt, isMessagingToolDuplicate as m, resolveGatewayMessageChannel as mn, resolveThreadFlag as mt, validateGeminiTurns as n, resolveToolProfilePolicy as nn, isCacheEnabled as nt, listThinkingLevels as o, resolveBootstrapMaxChars as on, mergeDeliveryContext as ot, supportsXHighThinking as p, normalizeMessageChannel as pn, resolveSessionResetType as pt, appendAssistantMessageToSessionTranscript as q, normalizeDiscordToken as qn, applySkillEnvOverrides as qt, pickFallbackThinkingLevel as r, stripPluginOnlyAllowlist as rn, resolveCacheTtlMs as rt, normalizeElevatedLevel as s, sanitizeGoogleTurnOrdering as sn, normalizeDeliveryContext as st, validateAnthropicTurns as t, normalizeToolName as tn, updateSessionStoreEntry as tt, normalizeUsageDisplay as u, isInternalMessageChannel as un, evaluateSessionFreshness as ut, sanitizeImageBlocks as v, GATEWAY_CLIENT_NAMES as vn, getChannelDock as vt, classifyFailoverReason as w, isGifMedia as wn, resolveConversationLabel as wt, isAntigravityClaude as x, getFileExtension as xn, resolveChannelGroupPolicy as xt, sanitizeToolResultImages as y, detectMime as yn, listChannelDocks as yt, isTimeoutErrorMessage as z, resolveTelegramToken as zn, createPinnedDispatcher as zt };
8948
+ export { updateLastRoute as $, buildPluginToolGroups as $t, isBillingAssistantError as A, mediaKindFromMime as An, convertHeicToJpeg as At, isTransientHttpError as B, resolveTelegramAccount as Bn, resolvePinnedHostnameWithPolicy as Bt, BILLING_ERROR_USER_MESSAGE as C, getFileExtension as Cn, resolveChannelGroupToolsPolicy as Ct, formatRawAssistantErrorForUi as D, kindFromMime as Dn, registerBrowserRoutes as Dt, formatBillingErrorMessage as E, isGifMedia as En, createBrowserRouteContext as Et, isFailoverErrorMessage as F, normalizeChannelId as Fn, getMediaDir as Ft, resolveSandboxContext as G, resolveSlackBotToken as Gn, resolvePluginSkillDirs as Gt, parseImageSizeError as H, listBindings as Hn, buildWorkspaceSkillSnapshot as Ht, isLikelyContextOverflowError as I, isWhatsAppGroupJid as In, saveMediaBuffer as It, resolveMirroredTranscriptText as J, resolveDiscordAccount as Jn, resolveSandboxedMediaSource as Jt, resolveSandboxRuntimeStatus as K, normalizeChatType as Kn, assertMediaNotDataUrl as Kt, isRateLimitAssistantError as L, normalizeWhatsAppTarget as Ln, SsrFBlockedError as Lt, isCompactionFailureError as M, resolveSignalAccount as Mn, hasAlphaChannel as Mt, isContextOverflowError as N, getChannelPlugin as Nn, optimizeImageToPng as Nt, getApiErrorPayloadFingerprint as O, MAX_IMAGE_BYTES$1 as On, resolveBrowserConfig as Ot, isFailoverAssistantError as P, listChannelPlugins as Pn, resizeToJpeg as Pt, saveSessionStore as Q, applyOwnerOnlyToolPolicy as Qt, isRawApiErrorPayload as R, listEnabledTelegramAccounts as Rn, closeDispatcher as Rt, isGoogleModelApi as S, extensionForMime as Sn, resolveChannelGroupRequireMention as St, formatAssistantErrorText as T, isAudioFileName as Tn, resolveGroupSessionKey as Tt, sanitizeUserFacingText as U, resolveSlackAccount as Un, loadWorkspaceSkillEntries as Ut, parseImageDimensionError as V, resolveTelegramToken as Vn, buildWorkspaceSkillCommandSpecs as Vt, ensureSandboxWorkspaceForSession as W, resolveSlackAppToken as Wn, resolveSkillsPromptForRun as Wt, readSessionUpdatedAt as X, applySkillEnvOverridesFromSnapshot as Xt, loadSessionStore as Y, normalizeDiscordToken as Yn, applySkillEnvOverrides as Yt, recordSessionMetaFromInbound as Z, resolveSandboxConfigForAgent as Zt, sanitizeSessionMessagesImages as _, resolveMessageChannel as _n, deriveSessionMetaPatch as _t, formatXHighModelHint as a, stripPluginOnlyAllowlist as an, deliveryContextKey as at, downgradeOpenAIReasoningBlocks as b, GATEWAY_CLIENT_NAMES as bn, resolveIMessageAccount as bt, normalizeReasoningLevel as c, resolveBootstrapMaxChars as cn, normalizeSessionDeliveryFields as ct, normalizeVerboseLevel as d, isDeliverableMessageChannel as dn, resolveChannelResetConfig as dt, collectExplicitAllowlist as en, updateSessionStore as et, resolveResponseUsageMode as f, isInternalMessageChannel as fn, resolveSessionResetPolicy as ft, normalizeTextForComparison as g, resolveGatewayMessageChannel as gn, resolveMainSessionKey as gt, isMessagingToolDuplicateNormalized as h, normalizeMessageChannel as hn, DEFAULT_RESET_TRIGGERS as ht, formatThinkingLevels as i, resolveToolProfilePolicy as in, deliveryContextFromSession as it, isCloudCodeAssistFormatError as j, listEnabledSignalAccounts as jn, getImageMetadata as jt, isAuthAssistantError as k, maxBytesForKind as kn, resolveProfile as kt, normalizeThinkLevel as l, sanitizeGoogleTurnOrdering as ln, resolveSessionKey as lt, isMessagingToolDuplicate as m, listDeliverableMessageChannels as mn, resolveThreadFlag as mt, validateGeminiTurns as n, expandToolGroups as nn, isCacheEnabled as nt, listThinkingLevels as o, buildBootstrapContextFiles as on, mergeDeliveryContext as ot, supportsXHighThinking as p, isMarkdownCapableMessageChannel as pn, resolveSessionResetType as pt, appendAssistantMessageToSessionTranscript as q, listEnabledDiscordAccounts as qn, assertSandboxPath as qt, pickFallbackThinkingLevel as r, normalizeToolName as rn, resolveCacheTtlMs as rt, normalizeElevatedLevel as s, ensureSessionHeader$1 as sn, normalizeDeliveryContext as st, validateAnthropicTurns as t, expandPolicyWithPluginGroups as tn, updateSessionStoreEntry as tt, normalizeUsageDisplay as u, INTERNAL_MESSAGE_CHANNEL as un, evaluateSessionFreshness as ut, sanitizeImageBlocks as v, GATEWAY_CLIENT_IDS as vn, getChannelDock as vt, classifyFailoverReason as w, imageMimeFromFormat as wn, resolveConversationLabel as wt, isAntigravityClaude as x, detectMime as xn, resolveChannelGroupPolicy as xt, sanitizeToolResultImages as y, GATEWAY_CLIENT_MODES as yn, listChannelDocks as yt, isTimeoutErrorMessage as z, listTelegramAccountIds as zn, createPinnedDispatcher as zt };
@@ -1,6 +1,6 @@
1
1
  import { o as createSubsystemLogger } from "./entry.js";
2
- import { p as resizeToJpeg, u as getImageMetadata } from "./routes-BqxA3ZYr.js";
3
- import { s as formatSandboxToolPolicyBlockedMessage } from "./sandbox-B0K9e6Fw.js";
2
+ import { f as resizeToJpeg, l as getImageMetadata } from "./routes-DewK5tq2.js";
3
+ import { s as formatSandboxToolPolicyBlockedMessage } from "./sandbox-BKYnhYQH.js";
4
4
  import path from "node:path";
5
5
  import fs from "node:fs/promises";
6
6
  import { createHash } from "node:crypto";
@@ -513,19 +513,22 @@ function isContextOverflowError(errorMessage) {
513
513
  return lower.includes("request_too_large") || lower.includes("request exceeds the maximum size") || lower.includes("context length exceeded") || lower.includes("maximum context length") || lower.includes("prompt is too long") || lower.includes("exceeds model context window") || hasRequestSizeExceeds && hasContextWindow || lower.includes("context overflow:") || lower.includes("413") && lower.includes("too large");
514
514
  }
515
515
  const CONTEXT_WINDOW_TOO_SMALL_RE = /context window.*(too small|minimum is)/i;
516
- const CONTEXT_OVERFLOW_HINT_RE = /context.*overflow|context window.*(too (?:large|long)|exceed|over|limit|max(?:imum)?|requested|sent|tokens)|(?:prompt|request|input).*(too (?:large|long)|exceed|over|limit|max(?:imum)?)/i;
516
+ const CONTEXT_OVERFLOW_HINT_RE = /context.*overflow|context window.*(too (?:large|long)|exceed|over|limit|max(?:imum)?|requested|sent|tokens)|prompt.*(too (?:large|long)|exceed|over|limit|max(?:imum)?)|(?:request|input).*(?:context|window|length|token).*(too (?:large|long)|exceed|over|limit|max(?:imum)?)/i;
517
+ const RATE_LIMIT_HINT_RE = /rate limit|too many requests|requests per (?:minute|hour|day)|quota|throttl|429\b/i;
517
518
  function isLikelyContextOverflowError(errorMessage) {
518
519
  if (!errorMessage) return false;
519
520
  if (CONTEXT_WINDOW_TOO_SMALL_RE.test(errorMessage)) return false;
520
521
  if (isRateLimitErrorMessage(errorMessage)) return false;
521
522
  if (isContextOverflowError(errorMessage)) return true;
523
+ if (RATE_LIMIT_HINT_RE.test(errorMessage)) return false;
522
524
  return CONTEXT_OVERFLOW_HINT_RE.test(errorMessage);
523
525
  }
524
526
  function isCompactionFailureError(errorMessage) {
525
527
  if (!errorMessage) return false;
526
528
  const lower = errorMessage.toLowerCase();
527
529
  if (!(lower.includes("summarization failed") || lower.includes("auto-compaction") || lower.includes("compaction failed") || lower.includes("compaction"))) return false;
528
- return isContextOverflowError(errorMessage) || lower.includes("context overflow");
530
+ if (isLikelyContextOverflowError(errorMessage)) return true;
531
+ return lower.includes("context overflow");
529
532
  }
530
533
  const ERROR_PAYLOAD_PREFIX_RE = /^(?:error|api\s*error|apierror|openai\s*error|anthropic\s*error|gateway\s*error)[:\s-]+/i;
531
534
  const FINAL_TAG_RE = /<\s*\/?\s*final\s*>/gi;