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,9 +1,10 @@
1
- import { _ as resolveConfigDir } from "./utils-BHPdZE4h.js";
2
- import { n as runExec } from "./exec-DXtR2fhb.js";
1
+ import { W as resolvePreferredOpenClawTmpDir } from "./subsystem-BoExtIHo.js";
2
+ import { _ as resolveConfigDir } from "./utils-Cd9QdCHh.js";
3
+ import { n as runExec } from "./exec-YIosokWE.js";
3
4
  import { t as parseBooleanValue } from "./boolean-BgXe2hyu.js";
4
- import { c as writeConfigFile, i as loadConfig } from "./config-DH9TLUNc.js";
5
- import { D as DEFAULT_AI_SNAPSHOT_EFFICIENT_MAX_CHARS, E as DEFAULT_AI_SNAPSHOT_EFFICIENT_DEPTH, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, a as resolveOpenClawUserDataDir, h as captureScreenshot, k as DEFAULT_BROWSER_DEFAULT_PROFILE_NAME, m as resolveBrowserExecutableForPlatform, y as snapshotAria } from "./chrome-juQxt0zf.js";
6
- import { a as resolveProfile, c as getUsedColors, d as deriveDefaultBrowserCdpPortRange, f as getPwAiModule$1, l as getUsedPorts, n as movePathToTrash, o as allocateCdpPort, r as parseHttpUrl, s as allocateColor, u as isValidProfileName } from "./server-context-Lb-eUZG_.js";
5
+ import { c as writeConfigFile, i as loadConfig } from "./config-aFQssWKX.js";
6
+ import { D as DEFAULT_AI_SNAPSHOT_EFFICIENT_MAX_CHARS, E as DEFAULT_AI_SNAPSHOT_EFFICIENT_DEPTH, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, a as resolveOpenClawUserDataDir, h as captureScreenshot, k as DEFAULT_BROWSER_DEFAULT_PROFILE_NAME, m as resolveBrowserExecutableForPlatform, y as snapshotAria } from "./chrome-Cvr-57lg.js";
7
+ import { a as resolveProfile, c as getUsedColors, d as deriveDefaultBrowserCdpPortRange, f as getPwAiModule$1, l as getUsedPorts, n as movePathToTrash, o as allocateCdpPort, r as parseHttpUrl, s as allocateColor, u as isValidProfileName } from "./server-context-Cl0U0vE3.js";
7
8
  import fs from "node:fs";
8
9
  import os from "node:os";
9
10
  import path from "node:path";
@@ -590,6 +591,7 @@ function registerBrowserAgentActRoutes(app, ctx) {
590
591
 
591
592
  //#endregion
592
593
  //#region src/browser/routes/agent.debug.ts
594
+ const DEFAULT_TRACE_DIR = resolvePreferredOpenClawTmpDir();
593
595
  function registerBrowserAgentDebugRoutes(app, ctx) {
594
596
  app.get("/console", async (req, res) => {
595
597
  const profileCtx = resolveProfileContext(req, res, ctx);
@@ -700,7 +702,7 @@ function registerBrowserAgentDebugRoutes(app, ctx) {
700
702
  const pw = await requirePwAi(res, "trace stop");
701
703
  if (!pw) return;
702
704
  const id = crypto.randomUUID();
703
- const dir = "/tmp/openclaw";
705
+ const dir = DEFAULT_TRACE_DIR;
704
706
  await fs$1.mkdir(dir, { recursive: true });
705
707
  const tracePath = out.trim() || path.join(dir, `browser-trace-${id}.zip`);
706
708
  await pw.traceStopViaPlaywright({
@@ -743,6 +745,22 @@ function normalizeHostnameSet(values) {
743
745
  if (!values || values.length === 0) return /* @__PURE__ */ new Set();
744
746
  return new Set(values.map((value) => normalizeHostname(value)).filter(Boolean));
745
747
  }
748
+ function normalizeHostnameAllowlist(values) {
749
+ if (!values || values.length === 0) return [];
750
+ return Array.from(new Set(values.map((value) => normalizeHostname(value)).filter((value) => value !== "*" && value !== "*." && value.length > 0)));
751
+ }
752
+ function isHostnameAllowedByPattern(hostname, pattern) {
753
+ if (pattern.startsWith("*.")) {
754
+ const suffix = pattern.slice(2);
755
+ if (!suffix || hostname === suffix) return false;
756
+ return hostname.endsWith(`.${suffix}`);
757
+ }
758
+ return hostname === pattern;
759
+ }
760
+ function matchesHostnameAllowlist(hostname, allowlist) {
761
+ if (allowlist.length === 0) return true;
762
+ return allowlist.some((pattern) => isHostnameAllowedByPattern(hostname, pattern));
763
+ }
746
764
  function parseIpv4(address) {
747
765
  const parts = address.split(".");
748
766
  if (parts.length !== 4) return null;
@@ -843,7 +861,10 @@ async function resolvePinnedHostnameWithPolicy(hostname, params = {}) {
843
861
  const normalized = normalizeHostname(hostname);
844
862
  if (!normalized) throw new Error("Invalid hostname");
845
863
  const allowPrivateNetwork = Boolean(params.policy?.allowPrivateNetwork);
846
- const isExplicitAllowed = normalizeHostnameSet(params.policy?.allowedHostnames).has(normalized);
864
+ const allowedHostnames = normalizeHostnameSet(params.policy?.allowedHostnames);
865
+ const hostnameAllowlist = normalizeHostnameAllowlist(params.policy?.hostnameAllowlist);
866
+ const isExplicitAllowed = allowedHostnames.has(normalized);
867
+ if (!matchesHostnameAllowlist(normalized, hostnameAllowlist)) throw new SsrFBlockedError(`Blocked hostname (not in allowlist): ${hostname}`);
847
868
  if (!allowPrivateNetwork && !isExplicitAllowed) {
848
869
  if (isBlockedHostname(normalized)) throw new SsrFBlockedError(`Blocked hostname: ${hostname}`);
849
870
  if (isPrivateIpAddress(normalized)) throw new SsrFBlockedError("Blocked: private/internal IP address");
@@ -864,9 +885,6 @@ async function resolvePinnedHostnameWithPolicy(hostname, params = {}) {
864
885
  })
865
886
  };
866
887
  }
867
- async function resolvePinnedHostname(hostname, lookupFn = lookup$1) {
868
- return await resolvePinnedHostnameWithPolicy(hostname, { lookupFn });
869
- }
870
888
  function createPinnedDispatcher(pinned) {
871
889
  return new Agent({ connect: { lookup: pinned.lookup } });
872
890
  }
@@ -2412,4 +2430,4 @@ function registerBrowserRoutes(app, ctx) {
2412
2430
  }
2413
2431
 
2414
2432
  //#endregion
2415
- export { resolvePinnedHostnameWithPolicy as C, resolvePinnedHostname as S, maxBytesForKind as _, optimizeImageToPng as a, closeDispatcher as b, saveMediaBuffer as c, getFileExtension as d, imageMimeFromFormat as f, MAX_IMAGE_BYTES as g, kindFromMime as h, hasAlphaChannel as i, detectMime as l, isGifMedia as m, convertHeicToJpeg as n, resizeToJpeg as o, isAudioFileName as p, getImageMetadata as r, getMediaDir as s, registerBrowserRoutes as t, extensionForMime as u, mediaKindFromMime as v, createPinnedDispatcher as x, SsrFBlockedError as y };
2433
+ export { resolvePinnedHostnameWithPolicy as S, maxBytesForKind as _, optimizeImageToPng as a, closeDispatcher as b, saveMediaBuffer as c, getFileExtension as d, imageMimeFromFormat as f, MAX_IMAGE_BYTES as g, kindFromMime as h, hasAlphaChannel as i, detectMime as l, isGifMedia as m, convertHeicToJpeg as n, resizeToJpeg as o, isAudioFileName as p, getImageMetadata as r, getMediaDir as s, registerBrowserRoutes as t, extensionForMime as u, mediaKindFromMime as v, createPinnedDispatcher as x, SsrFBlockedError as y };
@@ -1,9 +1,9 @@
1
- import { a as parseBooleanValue } from "./entry.js";
2
- import { g as resolveConfigDir } from "./utils-Dk86IbEs.js";
3
- import { n as runExec } from "./exec-B8JKbXKW.js";
4
- import { c as writeConfigFile, i as loadConfig } from "./config-B7sno9eI.js";
5
- import { c as allocateColor, d as isValidProfileName, f as deriveDefaultBrowserCdpPortRange, i as parseHttpUrl, l as getUsedColors, n as movePathToTrash, o as resolveProfile, r as getPwAiModule$1, s as allocateCdpPort, u as getUsedPorts } from "./server-context-fX4xiYRh.js";
6
- import { C as DEFAULT_AI_SNAPSHOT_EFFICIENT_DEPTH, E as DEFAULT_BROWSER_DEFAULT_PROFILE_NAME, T as DEFAULT_AI_SNAPSHOT_MAX_CHARS, a as resolveOpenClawUserDataDir, f as captureScreenshot, g as snapshotAria, s as resolveBrowserExecutableForPlatform, w as DEFAULT_AI_SNAPSHOT_EFFICIENT_MAX_CHARS } from "./chrome-yIKmOzCO.js";
1
+ import { Q as resolvePreferredOpenClawTmpDir, a as parseBooleanValue } from "./entry.js";
2
+ import { g as resolveConfigDir } from "./utils-BLJAc3ZV.js";
3
+ import { n as runExec } from "./exec-CACT5OAW.js";
4
+ import { c as writeConfigFile, i as loadConfig } from "./config-Bdhomfei.js";
5
+ import { c as allocateColor, d as isValidProfileName, f as deriveDefaultBrowserCdpPortRange, i as parseHttpUrl, l as getUsedColors, n as movePathToTrash, o as resolveProfile, r as getPwAiModule$1, s as allocateCdpPort, u as getUsedPorts } from "./server-context-BGpGs3qd.js";
6
+ import { C as DEFAULT_AI_SNAPSHOT_EFFICIENT_DEPTH, E as DEFAULT_BROWSER_DEFAULT_PROFILE_NAME, T as DEFAULT_AI_SNAPSHOT_MAX_CHARS, a as resolveOpenClawUserDataDir, f as captureScreenshot, g as snapshotAria, s as resolveBrowserExecutableForPlatform, w as DEFAULT_AI_SNAPSHOT_EFFICIENT_MAX_CHARS } from "./chrome-foEwx3lN.js";
7
7
  import path from "node:path";
8
8
  import os from "node:os";
9
9
  import fs from "node:fs";
@@ -510,6 +510,22 @@ function normalizeHostnameSet(values) {
510
510
  if (!values || values.length === 0) return /* @__PURE__ */ new Set();
511
511
  return new Set(values.map((value) => normalizeHostname(value)).filter(Boolean));
512
512
  }
513
+ function normalizeHostnameAllowlist(values) {
514
+ if (!values || values.length === 0) return [];
515
+ return Array.from(new Set(values.map((value) => normalizeHostname(value)).filter((value) => value !== "*" && value !== "*." && value.length > 0)));
516
+ }
517
+ function isHostnameAllowedByPattern(hostname, pattern) {
518
+ if (pattern.startsWith("*.")) {
519
+ const suffix = pattern.slice(2);
520
+ if (!suffix || hostname === suffix) return false;
521
+ return hostname.endsWith(`.${suffix}`);
522
+ }
523
+ return hostname === pattern;
524
+ }
525
+ function matchesHostnameAllowlist(hostname, allowlist) {
526
+ if (allowlist.length === 0) return true;
527
+ return allowlist.some((pattern) => isHostnameAllowedByPattern(hostname, pattern));
528
+ }
513
529
  function parseIpv4(address) {
514
530
  const parts = address.split(".");
515
531
  if (parts.length !== 4) return null;
@@ -610,7 +626,10 @@ async function resolvePinnedHostnameWithPolicy(hostname, params = {}) {
610
626
  const normalized = normalizeHostname(hostname);
611
627
  if (!normalized) throw new Error("Invalid hostname");
612
628
  const allowPrivateNetwork = Boolean(params.policy?.allowPrivateNetwork);
613
- const isExplicitAllowed = normalizeHostnameSet(params.policy?.allowedHostnames).has(normalized);
629
+ const allowedHostnames = normalizeHostnameSet(params.policy?.allowedHostnames);
630
+ const hostnameAllowlist = normalizeHostnameAllowlist(params.policy?.hostnameAllowlist);
631
+ const isExplicitAllowed = allowedHostnames.has(normalized);
632
+ if (!matchesHostnameAllowlist(normalized, hostnameAllowlist)) throw new SsrFBlockedError(`Blocked hostname (not in allowlist): ${hostname}`);
614
633
  if (!allowPrivateNetwork && !isExplicitAllowed) {
615
634
  if (isBlockedHostname(normalized)) throw new SsrFBlockedError(`Blocked hostname: ${hostname}`);
616
635
  if (isPrivateIpAddress(normalized)) throw new SsrFBlockedError("Blocked: private/internal IP address");
@@ -631,9 +650,6 @@ async function resolvePinnedHostnameWithPolicy(hostname, params = {}) {
631
650
  })
632
651
  };
633
652
  }
634
- async function resolvePinnedHostname(hostname, lookupFn = lookup$1) {
635
- return await resolvePinnedHostnameWithPolicy(hostname, { lookupFn });
636
- }
637
653
  function createPinnedDispatcher(pinned) {
638
654
  return new Agent({ connect: { lookup: pinned.lookup } });
639
655
  }
@@ -1225,6 +1241,7 @@ function registerBrowserAgentActRoutes(app, ctx) {
1225
1241
 
1226
1242
  //#endregion
1227
1243
  //#region src/browser/routes/agent.debug.ts
1244
+ const DEFAULT_TRACE_DIR = resolvePreferredOpenClawTmpDir();
1228
1245
  function registerBrowserAgentDebugRoutes(app, ctx) {
1229
1246
  app.get("/console", async (req, res) => {
1230
1247
  const profileCtx = resolveProfileContext(req, res, ctx);
@@ -1335,7 +1352,7 @@ function registerBrowserAgentDebugRoutes(app, ctx) {
1335
1352
  const pw = await requirePwAi(res, "trace stop");
1336
1353
  if (!pw) return;
1337
1354
  const id = crypto.randomUUID();
1338
- const dir = "/tmp/openclaw";
1355
+ const dir = DEFAULT_TRACE_DIR;
1339
1356
  await fs$1.mkdir(dir, { recursive: true });
1340
1357
  const tracePath = out.trim() || path.join(dir, `browser-trace-${id}.zip`);
1341
1358
  await pw.traceStopViaPlaywright({
@@ -2412,4 +2429,4 @@ function registerBrowserRoutes(app, ctx) {
2412
2429
  }
2413
2430
 
2414
2431
  //#endregion
2415
- export { mediaKindFromMime as C, maxBytesForKind as S, imageMimeFromFormat as _, closeDispatcher as a, kindFromMime as b, resolvePinnedHostnameWithPolicy as c, hasAlphaChannel as d, optimizeImageToPng as f, getFileExtension as g, extensionForMime as h, SsrFBlockedError as i, convertHeicToJpeg as l, detectMime as m, getMediaDir as n, createPinnedDispatcher as o, resizeToJpeg as p, saveMediaBuffer as r, resolvePinnedHostname as s, registerBrowserRoutes as t, getImageMetadata as u, isAudioFileName as v, MAX_IMAGE_BYTES as x, isGifMedia as y };
2432
+ export { mediaKindFromMime as S, isAudioFileName as _, closeDispatcher as a, MAX_IMAGE_BYTES as b, convertHeicToJpeg as c, optimizeImageToPng as d, resizeToJpeg as f, imageMimeFromFormat as g, getFileExtension as h, SsrFBlockedError as i, getImageMetadata as l, extensionForMime as m, getMediaDir as n, createPinnedDispatcher as o, detectMime as p, saveMediaBuffer as r, resolvePinnedHostnameWithPolicy as s, registerBrowserRoutes as t, hasAlphaChannel as u, isGifMedia as v, maxBytesForKind as x, kindFromMime as y };
@@ -1,6 +1,6 @@
1
- import { n as callGateway } from "./call-Yxns4CVq.js";
2
- import { h as GATEWAY_CLIENT_NAMES, m as GATEWAY_CLIENT_MODES } from "./message-channel-BlgPSDAh.js";
3
- import { n as withProgress } from "./progress-Da1ehW-x.js";
1
+ import { n as callGateway } from "./call-DVYCIV8m.js";
2
+ import { h as GATEWAY_CLIENT_NAMES, m as GATEWAY_CLIENT_MODES } from "./message-channel-C_MmebBt.js";
3
+ import { n as withProgress } from "./progress-DWqhRakV.js";
4
4
 
5
5
  //#region src/cli/nodes-cli/format.ts
6
6
  function parsePairingList(value) {
@@ -1,6 +1,6 @@
1
- import { h as GATEWAY_CLIENT_NAMES, m as GATEWAY_CLIENT_MODES } from "./message-channel-0717wOz-.js";
2
- import { n as callGateway } from "./call-C9az806y.js";
3
- import { n as withProgress } from "./progress-g9R--HZD.js";
1
+ import { h as GATEWAY_CLIENT_NAMES, m as GATEWAY_CLIENT_MODES } from "./message-channel-BLi2a6Yw.js";
2
+ import { n as callGateway } from "./call-SolyGS1r.js";
3
+ import { n as withProgress } from "./progress-C9kngsTD.js";
4
4
 
5
5
  //#region src/cli/nodes-cli/format.ts
6
6
  function parsePairingList(value) {
@@ -1,87 +1,87 @@
1
1
  import { c as enableConsoleCapture, i as normalizeEnv, n as isTruthyEnvValue, p as defaultRuntime } from "./entry.js";
2
- import "./auth-profiles-CcJ3hrog.js";
3
- import "./utils-Dk86IbEs.js";
4
- import "./exec-B8JKbXKW.js";
5
- import "./agent-scope-RCSw6gHy.js";
6
- import "./github-copilot-token-SLWintYd.js";
2
+ import "./auth-profiles-ByNs3eEm.js";
3
+ import "./utils-BLJAc3ZV.js";
4
+ import "./exec-CACT5OAW.js";
5
+ import "./agent-scope-CsRbLH4l.js";
6
+ import "./github-copilot-token-Cfs0Wxr8.js";
7
7
  import "./pi-model-discovery-DzEIEgHL.js";
8
- import { M as VERSION, N as loadDotEnv } from "./config-B7sno9eI.js";
9
- import "./manifest-registry-BTgLN_W2.js";
10
- import "./server-context-fX4xiYRh.js";
11
- import "./chrome-yIKmOzCO.js";
12
- import { r as formatUncaughtError } from "./errors-x4NYs-1P.js";
13
- import "./control-service-B2er20Ke.js";
14
- import { t as ensureOpenClawCliOnPath } from "./path-env-CXWUFfFv.js";
15
- import "./tailscale-DU6DgqVy.js";
16
- import "./auth-BcNHFK-i.js";
17
- import "./client-D7wrC1Ug.js";
18
- import "./call-Yxns4CVq.js";
19
- import "./message-channel-BlgPSDAh.js";
20
- import "./links-7M-j83As.js";
21
- import "./plugin-auto-enable-BY4CqJbD.js";
22
- import "./plugins-3GyCj5KL.js";
8
+ import { M as VERSION, N as loadDotEnv } from "./config-Bdhomfei.js";
9
+ import "./manifest-registry-u0okVSkU.js";
10
+ import "./server-context-BGpGs3qd.js";
11
+ import "./chrome-foEwx3lN.js";
12
+ import "./auth-9x3lqfIY.js";
13
+ import "./control-auth-8Cf4WXpR.js";
14
+ import { r as formatUncaughtError } from "./errors-DjZBTJJ3.js";
15
+ import "./control-service-DKnttEus.js";
16
+ import { t as ensureOpenClawCliOnPath } from "./path-env-CLvYNwtL.js";
17
+ import "./client-CTwXnRl7.js";
18
+ import "./call-DVYCIV8m.js";
19
+ import "./message-channel-C_MmebBt.js";
20
+ import "./links-B8LAzWwg.js";
21
+ import "./plugin-auto-enable-Bqhc3w5n.js";
22
+ import "./plugins-4Hqd1WGf.js";
23
23
  import "./logging-CfEk_PnX.js";
24
- import "./accounts-DbzMEfKN.js";
25
- import "./loader-Caow9TPA.js";
26
- import "./progress-Da1ehW-x.js";
27
- import "./prompt-style-Dc0C5HC9.js";
28
- import "./note-Ci08TSbV.js";
29
- import "./clack-prompter-DuBVnTKy.js";
30
- import "./onboard-channels-DMcOT0dj.js";
24
+ import "./accounts-DCDeFTra.js";
25
+ import "./loader-KjT074JR.js";
26
+ import "./progress-DWqhRakV.js";
27
+ import "./prompt-style-BFH5D5LN.js";
28
+ import "./note-hhtubr2j.js";
29
+ import "./clack-prompter-ChCGXfyt.js";
30
+ import "./onboard-channels-C501x8GI.js";
31
31
  import "./archive-D0z3LZDK.js";
32
- import "./skill-scanner-C_fQzVDu.js";
33
- import "./installs-NS0VMPN7.js";
34
- import "./manager-DseK7RWj.js";
35
- import "./paths-IivnSNkP.js";
36
- import "./sqlite-B7FPASCO.js";
37
- import "./redact-DuEEf1p1.js";
38
- import "./routes-BqxA3ZYr.js";
39
- import "./pi-embedded-helpers-Uan-3N1T.js";
40
- import "./deliver-DzcxEcza.js";
41
- import "./fetch-timeout-B2KlHXi3.js";
42
- import "./sandbox-B0K9e6Fw.js";
43
- import "./tui-formatters-C_baVYUz.js";
44
- import "./wsl-B-H6Z5wp.js";
45
- import "./skills-BvPUNjxo.js";
46
- import "./image-LxFvu0wL.js";
47
- import "./tool-display-sHJa3kRs.js";
48
- import "./channel-selection-BoQ7GurB.js";
49
- import "./session-cost-usage-CL8gnHRN.js";
50
- import { m as installUnhandledRejectionHandler } from "./runner-C1G8RFWl.js";
51
- import "./commands-BG25qku5.js";
52
- import "./pairing-store-fIWI3pXG.js";
53
- import "./login-qr-CAk9D-FM.js";
54
- import "./pairing-labels-Bin1K7_f.js";
55
- import "./channels-status-issues-Ca9--azp.js";
56
- import { n as ensurePluginRegistryLoaded } from "./command-options-BSDiKuyX.js";
57
- import { a as getCommandPath, c as getPrimaryCommand, d as hasHelpOrVersion } from "./register.subclis-BpX3ulH1.js";
58
- import "./completion-cli-C4zxjkC1.js";
59
- import "./gateway-rpc-8gue7Qjt.js";
60
- import "./deps-Cva7QM_t.js";
61
- import { h as assertSupportedRuntime } from "./daemon-runtime-BHF5NjQ7.js";
62
- import "./service-DNcIZ5Kp.js";
63
- import "./systemd-CNTodvCO.js";
64
- import "./service-audit-uhZSlxeb.js";
65
- import "./table-oJQPTUL6.js";
66
- import "./widearea-dns-WVCWJTEb.js";
67
- import "./audit-DMH3CSXY.js";
68
- import "./onboard-skills-DoxkpnEU.js";
69
- import "./health-format-gLMfE2wf.js";
70
- import "./update-runner-BLsqC24J.js";
71
- import "./github-copilot-auth-Cm2SB8Qf.js";
72
- import "./logging-D0MyqUlV.js";
73
- import "./hooks-status-Cgy6AtQk.js";
74
- import "./status-CxhnUa5J.js";
75
- import "./skills-status-DJDaA2Ur.js";
76
- import "./tui-Biw7aqPj.js";
77
- import "./agent-DZvDwqnd.js";
78
- import "./node-service-_vgO5xR-.js";
79
- import "./auth-health-zZ9dnQGC.js";
80
- import { a as findRoutedCommand, n as emitCliBanner, t as ensureConfigReady } from "./config-guard-DPxxY1iw.js";
81
- import "./help-format-DUy1KRxq.js";
82
- import "./configure-BZQ9uSVX.js";
83
- import "./systemd-linger-CArPbmvv.js";
84
- import "./doctor-BZfxDGUg.js";
32
+ import "./skill-scanner-rHMtUHtP.js";
33
+ import "./installs-CrLcWYHe.js";
34
+ import "./deliver-CIU9Npgs.js";
35
+ import "./manager-T1XfGchB.js";
36
+ import "./paths-DLINmNFQ.js";
37
+ import "./sqlite-BINzs1U0.js";
38
+ import "./redact-Br9GfacZ.js";
39
+ import "./routes-DewK5tq2.js";
40
+ import "./pi-embedded-helpers-DfwkwPYD.js";
41
+ import "./fetch-timeout-DTK9vxex.js";
42
+ import "./sandbox-BKYnhYQH.js";
43
+ import "./tui-formatters-DePhZK3J.js";
44
+ import "./wsl-BUOkxKJu.js";
45
+ import "./skills-DRjfSQT3.js";
46
+ import "./image-DgtfXMcX.js";
47
+ import "./tool-display-ClRud3pg.js";
48
+ import "./channel-selection-D4D6ImhN.js";
49
+ import "./session-cost-usage-D9hHANWI.js";
50
+ import { m as installUnhandledRejectionHandler } from "./runner-CY0nmVme.js";
51
+ import "./commands-BX_OIIVR.js";
52
+ import "./pairing-store-Dp5_JGnG.js";
53
+ import "./login-qr-CuvemJj4.js";
54
+ import "./pairing-labels-CgNHnjzT.js";
55
+ import "./channels-status-issues-D7GSV1GS.js";
56
+ import { n as ensurePluginRegistryLoaded } from "./command-options-BvgxzPbK.js";
57
+ import { a as getCommandPath, c as getPrimaryCommand, d as hasHelpOrVersion } from "./register.subclis-C02e4zuJ.js";
58
+ import "./completion-cli-CR77-jyv.js";
59
+ import "./gateway-rpc-BByb2Snz.js";
60
+ import "./deps-QSwGcoNZ.js";
61
+ import { h as assertSupportedRuntime } from "./daemon-runtime-B0tg_LsX.js";
62
+ import "./service-99RDXwX4.js";
63
+ import "./systemd-C0VZriGM.js";
64
+ import "./service-audit-ckBaRCVC.js";
65
+ import "./table-CwulTLQp.js";
66
+ import "./widearea-dns-BaIgNEhY.js";
67
+ import "./audit-wPu26VMb.js";
68
+ import "./onboard-skills-DV0Qzvjj.js";
69
+ import "./health-format-LZDxu3rv.js";
70
+ import "./update-runner--ixK4J3W.js";
71
+ import "./github-copilot-auth-DDispnyz.js";
72
+ import "./logging-CRq4h04P.js";
73
+ import "./hooks-status-Cw0xD8Lt.js";
74
+ import "./status-DDWoOpeB.js";
75
+ import "./skills-status-TDIgVd1K.js";
76
+ import "./tui-Lu8FdrlK.js";
77
+ import "./agent-CyMxTyrG.js";
78
+ import "./node-service-WQuEKz6W.js";
79
+ import "./auth-health-j6epgQbq.js";
80
+ import { a as findRoutedCommand, n as emitCliBanner, t as ensureConfigReady } from "./config-guard-CljaSxJd.js";
81
+ import "./help-format-R5fLToDw.js";
82
+ import "./configure-BXLiucXo.js";
83
+ import "./systemd-linger-xdn3BdPh.js";
84
+ import "./doctor-sYG5V4Co.js";
85
85
  import path from "node:path";
86
86
  import process$1 from "node:process";
87
87
  import fs from "node:fs";
@@ -128,7 +128,7 @@ async function runCli(argv = process$1.argv) {
128
128
  assertSupportedRuntime();
129
129
  if (await tryRouteCli(normalizedArgv)) return;
130
130
  enableConsoleCapture();
131
- const { buildProgram } = await import("./program-u22vbFpH.js");
131
+ const { buildProgram } = await import("./program-Cf7lkBur.js");
132
132
  const program = buildProgram();
133
133
  installUnhandledRejectionHandler();
134
134
  process$1.on("uncaughtException", (error) => {
@@ -138,12 +138,12 @@ async function runCli(argv = process$1.argv) {
138
138
  const parseArgv = rewriteUpdateFlagArgv(normalizedArgv);
139
139
  const primary = getPrimaryCommand(parseArgv);
140
140
  if (primary) {
141
- const { registerSubCliByName } = await import("./register.subclis-BpX3ulH1.js").then((n) => n.i);
141
+ const { registerSubCliByName } = await import("./register.subclis-C02e4zuJ.js").then((n) => n.i);
142
142
  await registerSubCliByName(program, primary);
143
143
  }
144
144
  if (!(!primary && hasHelpOrVersion(parseArgv))) {
145
- const { registerPluginCliCommands } = await import("./cli-FdxAcu_y.js");
146
- const { loadConfig } = await import("./config-B7sno9eI.js").then((n) => n.t);
145
+ const { registerPluginCliCommands } = await import("./cli-ZR9ugUBX.js");
146
+ const { loadConfig } = await import("./config-Bdhomfei.js").then((n) => n.t);
147
147
  registerPluginCliCommands(program, loadConfig());
148
148
  }
149
149
  await program.parseAsync(parseArgv);
@@ -1,12 +1,12 @@
1
- import { w as shouldLogVerbose, x as logVerbose } from "./entry.js";
2
- import { S as resolveOpenClawAgentDir, U as normalizeGoogleModelId, ct as resolveApiKeyForProvider, k as normalizeProviderId, st as requireApiKey } from "./auth-profiles-CcJ3hrog.js";
3
- import { n as runExec } from "./exec-B8JKbXKW.js";
4
- import { i as loadConfig } from "./config-B7sno9eI.js";
5
- import { r as formatUncaughtError, t as extractErrorCode } from "./errors-x4NYs-1P.js";
6
- import { _ as normalizeChatType } from "./plugins-3GyCj5KL.js";
7
- import { b as kindFromMime, g as getFileExtension, m as detectMime, v as isAudioFileName } from "./routes-BqxA3ZYr.js";
8
- import { i as fetchWithSsrFGuard, n as MediaFetchError, r as fetchRemoteMedia, t as fetchWithTimeout } from "./fetch-timeout-B2KlHXi3.js";
9
- import { t as describeImageWithModel, y as ensureOpenClawModelsJson } from "./image-LxFvu0wL.js";
1
+ import { S as logVerbose, T as shouldLogVerbose } from "./entry.js";
2
+ import { S as resolveOpenClawAgentDir, U as normalizeGoogleModelId, ct as resolveApiKeyForProvider, k as normalizeProviderId, st as requireApiKey } from "./auth-profiles-ByNs3eEm.js";
3
+ import { n as runExec } from "./exec-CACT5OAW.js";
4
+ import { i as loadConfig } from "./config-Bdhomfei.js";
5
+ import { r as formatUncaughtError, t as extractErrorCode } from "./errors-DjZBTJJ3.js";
6
+ import { _ as normalizeChatType } from "./plugins-4Hqd1WGf.js";
7
+ import { _ as isAudioFileName, h as getFileExtension, p as detectMime, y as kindFromMime } from "./routes-DewK5tq2.js";
8
+ import { i as fetchWithSsrFGuard, n as MediaFetchError, r as fetchRemoteMedia, t as fetchWithTimeout } from "./fetch-timeout-DTK9vxex.js";
9
+ import { t as describeImageWithModel, y as ensureOpenClawModelsJson } from "./image-DgtfXMcX.js";
10
10
  import path from "node:path";
11
11
  import process$1 from "node:process";
12
12
  import os from "node:os";
@@ -1,9 +1,9 @@
1
- import { Y as logVerbose, Z as shouldLogVerbose, n as runExec } from "./exec-4WHuOniw.js";
2
- import { Cn as getFileExtension, Dn as kindFromMime, Kn as normalizeChatType, Tn as isAudioFileName, xn as detectMime } from "./pi-embedded-helpers-Bri9tk9g.js";
3
- import { C as normalizeProviderId, _ as resolveOpenClawAgentDir, i as resolveApiKeyForProvider, k as normalizeGoogleModelId, r as requireApiKey } from "./model-auth-CbqRVYRp.js";
4
- import { t as loadConfig } from "./config-BuF7vm-v.js";
5
- import { b as ensureOpenClawModelsJson, t as describeImageWithModel } from "./image-Dkawt9Kg.js";
6
- import { i as fetchWithSsrFGuard, n as MediaFetchError, r as fetchRemoteMedia, t as fetchWithTimeout } from "./fetch-timeout-4UKsdtE1.js";
1
+ import { Y as logVerbose, Z as shouldLogVerbose, n as runExec } from "./exec-B8lXct-k.js";
2
+ import { Cn as detectMime, Dn as isAudioFileName, Jn as normalizeChatType, Tn as getFileExtension, kn as kindFromMime } from "./pi-embedded-helpers-WDwx99UA.js";
3
+ import { C as normalizeProviderId, _ as resolveOpenClawAgentDir, i as resolveApiKeyForProvider, k as normalizeGoogleModelId, r as requireApiKey } from "./model-auth-CabXIF6O.js";
4
+ import { t as loadConfig } from "./config-BvMsmctM.js";
5
+ import { b as ensureOpenClawModelsJson, t as describeImageWithModel } from "./image-Brk1sJbw.js";
6
+ import { i as fetchWithSsrFGuard, n as MediaFetchError, r as fetchRemoteMedia, t as fetchWithTimeout } from "./fetch-timeout-BEtUjM1S.js";
7
7
  import fs from "node:fs/promises";
8
8
  import os from "node:os";
9
9
  import path from "node:path";
@@ -1,12 +1,12 @@
1
- import { A as logVerbose, N as shouldLogVerbose } from "./subsystem-Bv7dGhES.js";
2
- import { n as runExec } from "./exec-DXtR2fhb.js";
3
- import { B as resolveApiKeyForProvider, bt as resolveOpenClawAgentDir, s as normalizeProviderId, x as normalizeGoogleModelId, z as requireApiKey } from "./model-selection-unMJyUIE.js";
4
- import { i as loadConfig } from "./config-DH9TLUNc.js";
5
- import { b as normalizeChatType } from "./plugins-BL9lIXSA.js";
6
- import { t as describeImageWithModel, v as ensureOpenClawModelsJson } from "./image-DI9s9eEx.js";
7
- import { d as getFileExtension, h as kindFromMime, l as detectMime, p as isAudioFileName } from "./routes-82Ywfho6.js";
1
+ import { A as logVerbose, N as shouldLogVerbose } from "./subsystem-BoExtIHo.js";
2
+ import { n as runExec } from "./exec-YIosokWE.js";
3
+ import { B as resolveApiKeyForProvider, bt as resolveOpenClawAgentDir, s as normalizeProviderId, x as normalizeGoogleModelId, z as requireApiKey } from "./model-selection-BLuqsGVB.js";
4
+ import { i as loadConfig } from "./config-aFQssWKX.js";
5
+ import { b as normalizeChatType } from "./plugins-X7d_tfTE.js";
6
+ import { t as describeImageWithModel, v as ensureOpenClawModelsJson } from "./image-C4Nn2p3e.js";
7
+ import { d as getFileExtension, h as kindFromMime, l as detectMime, p as isAudioFileName } from "./routes-CmOI1hIH.js";
8
8
  import { r as formatUncaughtError, t as extractErrorCode } from "./errors-Bv81hF2P.js";
9
- import { i as fetchWithSsrFGuard, n as fetchRemoteMedia, r as fetchWithTimeout, t as MediaFetchError } from "./fetch-CqZP8jwB.js";
9
+ import { i as fetchWithSsrFGuard, n as fetchRemoteMedia, r as fetchWithTimeout, t as MediaFetchError } from "./fetch-DmiOpALK.js";
10
10
  import process$1 from "node:process";
11
11
  import { fileURLToPath } from "node:url";
12
12
  import { constants } from "node:fs";
@@ -1,9 +1,9 @@
1
- import { J as logVerbose, X as shouldLogVerbose, n as runExec } from "./exec-D12IZYtJ.js";
2
- import { B as resolveOpenClawAgentDir, b as resolveApiKeyForProvider, f as normalizeGoogleModelId, o as normalizeProviderId, y as requireApiKey } from "./model-selection-B9Y7dKQd.js";
3
- import { Cn as isAudioFileName, Tn as kindFromMime, Wn as normalizeChatType, xn as getFileExtension, yn as detectMime } from "./pi-embedded-helpers-CfXnSIFx.js";
4
- import { t as loadConfig } from "./config-D50SQVar.js";
5
- import { b as ensureOpenClawModelsJson, t as describeImageWithModel } from "./image-B4mDPdyz.js";
6
- import { i as fetchWithSsrFGuard, n as MediaFetchError, r as fetchRemoteMedia, t as fetchWithTimeout } from "./fetch-timeout-ohY5QmsW.js";
1
+ import { J as logVerbose, X as shouldLogVerbose, n as runExec } from "./exec-CJFFoM7H.js";
2
+ import { B as resolveOpenClawAgentDir, b as resolveApiKeyForProvider, f as normalizeGoogleModelId, o as normalizeProviderId, y as requireApiKey } from "./model-selection-C1GmkTAV.js";
3
+ import { Cn as getFileExtension, Dn as kindFromMime, Kn as normalizeChatType, Tn as isAudioFileName, xn as detectMime } from "./pi-embedded-helpers-CUzTc1v6.js";
4
+ import { t as loadConfig } from "./config-QYrbd7x7.js";
5
+ import { b as ensureOpenClawModelsJson, t as describeImageWithModel } from "./image-RKwc3fsL.js";
6
+ import { i as fetchWithSsrFGuard, n as MediaFetchError, r as fetchRemoteMedia, t as fetchWithTimeout } from "./fetch-timeout-DEoXG_SF.js";
7
7
  import path from "node:path";
8
8
  import { constants } from "node:fs";
9
9
  import os from "node:os";
@@ -1,18 +1,18 @@
1
- import { L as STATE_DIR, Q as CHAT_CHANNEL_ORDER, Z as CHANNEL_IDS, ct as requireActivePluginRegistry, nt as getChatChannelMeta, o as createSubsystemLogger, p as defaultRuntime } from "./entry.js";
2
- import { t as formatCliCommand } from "./command-format-ayFsmwwz.js";
1
+ import { $ as CHANNEL_IDS, R as STATE_DIR, et as CHAT_CHANNEL_ORDER, it as getChatChannelMeta, o as createSubsystemLogger, p as defaultRuntime, ut as requireActivePluginRegistry } from "./entry.js";
2
+ import { t as formatCliCommand } from "./command-format-Bxe0mWee.js";
3
3
  import { c as normalizeAccountId$1, d as resolveAgentIdFromSessionKey, i as buildAgentMainSessionKey, l as normalizeAgentId, n as DEFAULT_AGENT_ID, t as DEFAULT_ACCOUNT_ID, u as normalizeMainKey } from "./session-key-DVvxnFKg.js";
4
- import { c as escapeRegExp, m as normalizeE164, y as resolveUserPath } from "./utils-Dk86IbEs.js";
5
- import { b as DEFAULT_USER_FILENAME, d as DEFAULT_AGENTS_FILENAME, f as DEFAULT_AGENT_WORKSPACE_DIR, h as DEFAULT_IDENTITY_FILENAME, l as resolveSessionAgentId, m as DEFAULT_HEARTBEAT_FILENAME, n as resolveAgentConfig, p as DEFAULT_BOOTSTRAP_FILENAME, v as DEFAULT_SOUL_FILENAME, x as ensureAgentWorkspace, y as DEFAULT_TOOLS_FILENAME } from "./agent-scope-RCSw6gHy.js";
6
- import { d as parseByteSize, g as parseDurationMs, i as loadConfig } from "./config-B7sno9eI.js";
7
- import { o as resolveProfile, t as createBrowserRouteContext } from "./server-context-fX4xiYRh.js";
8
- import { A as DEFAULT_OPENCLAW_BROWSER_PROFILE_NAME, D as DEFAULT_BROWSER_EVALUATE_ENABLED, O as DEFAULT_OPENCLAW_BROWSER_COLOR } from "./chrome-yIKmOzCO.js";
9
- import { c as listDeliverableMessageChannels, l as normalizeMessageChannel } from "./message-channel-BlgPSDAh.js";
10
- import { _ as normalizeChatType, a as normalizeWhatsAppTarget, c as resolveTelegramAccount, m as resolveSlackReplyToMode, p as resolveSlackAccount, r as normalizeChannelId, y as resolveDiscordAccount } from "./plugins-3GyCj5KL.js";
11
- import { n as resolveWhatsAppAccount } from "./accounts-DbzMEfKN.js";
12
- import { r as resolveSessionTranscriptPath, t as resolveDefaultSessionStorePath } from "./paths-IivnSNkP.js";
13
- import { t as emitSessionTranscriptUpdate } from "./transcript-events-CZ8CG4ht.js";
14
- import { t as registerBrowserRoutes } from "./routes-BqxA3ZYr.js";
15
- import { o as syncSkillsToWorkspace } from "./skills-BvPUNjxo.js";
4
+ import { c as escapeRegExp, m as normalizeE164, y as resolveUserPath } from "./utils-BLJAc3ZV.js";
5
+ import { b as DEFAULT_USER_FILENAME, d as DEFAULT_AGENTS_FILENAME, f as DEFAULT_AGENT_WORKSPACE_DIR, h as DEFAULT_IDENTITY_FILENAME, l as resolveSessionAgentId, m as DEFAULT_HEARTBEAT_FILENAME, n as resolveAgentConfig, p as DEFAULT_BOOTSTRAP_FILENAME, v as DEFAULT_SOUL_FILENAME, x as ensureAgentWorkspace, y as DEFAULT_TOOLS_FILENAME } from "./agent-scope-CsRbLH4l.js";
6
+ import { d as parseByteSize, g as parseDurationMs, i as loadConfig } from "./config-Bdhomfei.js";
7
+ import { o as resolveProfile, t as createBrowserRouteContext } from "./server-context-BGpGs3qd.js";
8
+ import { A as DEFAULT_OPENCLAW_BROWSER_PROFILE_NAME, D as DEFAULT_BROWSER_EVALUATE_ENABLED, O as DEFAULT_OPENCLAW_BROWSER_COLOR } from "./chrome-foEwx3lN.js";
9
+ import { c as listDeliverableMessageChannels, l as normalizeMessageChannel } from "./message-channel-C_MmebBt.js";
10
+ import { _ as normalizeChatType, a as normalizeWhatsAppTarget, c as resolveTelegramAccount, m as resolveSlackReplyToMode, p as resolveSlackAccount, r as normalizeChannelId, y as resolveDiscordAccount } from "./plugins-4Hqd1WGf.js";
11
+ import { n as resolveWhatsAppAccount } from "./accounts-DCDeFTra.js";
12
+ import { n as resolveSessionFilePath, t as resolveDefaultSessionStorePath } from "./paths-DLINmNFQ.js";
13
+ import { t as emitSessionTranscriptUpdate } from "./transcript-events-BtNd-j6q.js";
14
+ import { t as registerBrowserRoutes } from "./routes-DewK5tq2.js";
15
+ import { o as syncSkillsToWorkspace } from "./skills-DRjfSQT3.js";
16
16
  import { spawn } from "node:child_process";
17
17
  import path from "node:path";
18
18
  import fs from "node:fs";
@@ -2849,7 +2849,15 @@ async function appendAssistantMessageToSessionTranscript(params) {
2849
2849
  ok: false,
2850
2850
  reason: `unknown sessionKey: ${sessionKey}`
2851
2851
  };
2852
- const sessionFile = entry.sessionFile?.trim() || resolveSessionTranscriptPath(entry.sessionId, params.agentId);
2852
+ let sessionFile;
2853
+ try {
2854
+ sessionFile = resolveSessionFilePath(entry.sessionId, entry, { sessionsDir: path.dirname(storePath) });
2855
+ } catch (err) {
2856
+ return {
2857
+ ok: false,
2858
+ reason: err instanceof Error ? err.message : String(err)
2859
+ };
2860
+ }
2853
2861
  await ensureSessionHeader({
2854
2862
  sessionFile,
2855
2863
  sessionId: entry.sessionId
@@ -1,18 +1,18 @@
1
1
  import { r as STATE_DIR } from "./paths-DVBShlw6.js";
2
- import { c as defaultRuntime, m as CHAT_CHANNEL_ORDER, p as CHANNEL_IDS, t as createSubsystemLogger, v as getChatChannelMeta, w as requireActivePluginRegistry } from "./subsystem-Bv7dGhES.js";
3
- import { b as resolveUserPath, h as normalizeE164, l as escapeRegExp } from "./utils-BHPdZE4h.js";
2
+ import { c as defaultRuntime, m as CHAT_CHANNEL_ORDER, p as CHANNEL_IDS, t as createSubsystemLogger, v as getChatChannelMeta, w as requireActivePluginRegistry } from "./subsystem-BoExtIHo.js";
3
+ import { b as resolveUserPath, h as normalizeE164, l as escapeRegExp } from "./utils-Cd9QdCHh.js";
4
4
  import { c as normalizeAccountId$1, d as resolveAgentIdFromSessionKey, i as buildAgentMainSessionKey, l as normalizeAgentId, n as DEFAULT_AGENT_ID, t as DEFAULT_ACCOUNT_ID, u as normalizeMainKey } from "./session-key-BWxPj0z_.js";
5
- import { b as DEFAULT_USER_FILENAME, d as DEFAULT_AGENTS_FILENAME, f as DEFAULT_AGENT_WORKSPACE_DIR, h as DEFAULT_IDENTITY_FILENAME, l as resolveSessionAgentId, m as DEFAULT_HEARTBEAT_FILENAME, n as resolveAgentConfig, p as DEFAULT_BOOTSTRAP_FILENAME, v as DEFAULT_SOUL_FILENAME, x as ensureAgentWorkspace, y as DEFAULT_TOOLS_FILENAME } from "./agent-scope---6LLHj0.js";
5
+ import { b as DEFAULT_USER_FILENAME, d as DEFAULT_AGENTS_FILENAME, f as DEFAULT_AGENT_WORKSPACE_DIR, h as DEFAULT_IDENTITY_FILENAME, l as resolveSessionAgentId, m as DEFAULT_HEARTBEAT_FILENAME, n as resolveAgentConfig, p as DEFAULT_BOOTSTRAP_FILENAME, v as DEFAULT_SOUL_FILENAME, x as ensureAgentWorkspace, y as DEFAULT_TOOLS_FILENAME } from "./agent-scope-CQCus0rI.js";
6
6
  import { t as formatCliCommand } from "./command-format-ChfKqObn.js";
7
- import { d as parseByteSize, g as parseDurationMs, i as loadConfig } from "./config-DH9TLUNc.js";
8
- import { a as normalizeWhatsAppTarget, b as normalizeChatType, c as resolveTelegramAccount, m as resolveSlackReplyToMode, p as resolveSlackAccount, r as normalizeChannelId, v as resolveDiscordAccount } from "./plugins-BL9lIXSA.js";
9
- import { A as DEFAULT_BROWSER_EVALUATE_ENABLED, N as DEFAULT_OPENCLAW_BROWSER_PROFILE_NAME, j as DEFAULT_OPENCLAW_BROWSER_COLOR } from "./chrome-juQxt0zf.js";
10
- import { o as syncSkillsToWorkspace } from "./skills-aFOsriMP.js";
11
- import { t as registerBrowserRoutes } from "./routes-82Ywfho6.js";
12
- import { a as resolveProfile, t as createBrowserRouteContext } from "./server-context-Lb-eUZG_.js";
13
- import { c as listDeliverableMessageChannels, l as normalizeMessageChannel } from "./message-channel-0717wOz-.js";
14
- import { n as resolveWhatsAppAccount } from "./accounts-DimKrt7j.js";
15
- import { r as resolveSessionTranscriptPath, t as resolveDefaultSessionStorePath } from "./paths-RITJT4UY.js";
7
+ import { d as parseByteSize, g as parseDurationMs, i as loadConfig } from "./config-aFQssWKX.js";
8
+ import { a as normalizeWhatsAppTarget, b as normalizeChatType, c as resolveTelegramAccount, m as resolveSlackReplyToMode, p as resolveSlackAccount, r as normalizeChannelId, v as resolveDiscordAccount } from "./plugins-X7d_tfTE.js";
9
+ import { A as DEFAULT_BROWSER_EVALUATE_ENABLED, N as DEFAULT_OPENCLAW_BROWSER_PROFILE_NAME, j as DEFAULT_OPENCLAW_BROWSER_COLOR } from "./chrome-Cvr-57lg.js";
10
+ import { o as syncSkillsToWorkspace } from "./skills-DprQj9X2.js";
11
+ import { t as registerBrowserRoutes } from "./routes-CmOI1hIH.js";
12
+ import { a as resolveProfile, t as createBrowserRouteContext } from "./server-context-Cl0U0vE3.js";
13
+ import { c as listDeliverableMessageChannels, l as normalizeMessageChannel } from "./message-channel-BLi2a6Yw.js";
14
+ import { n as resolveWhatsAppAccount } from "./accounts-DeqIQjo1.js";
15
+ import { n as resolveSessionFilePath, t as resolveDefaultSessionStorePath } from "./paths-B49s6UZQ.js";
16
16
  import { t as emitSessionTranscriptUpdate } from "./transcript-events-Bp7fGnwv.js";
17
17
  import fs from "node:fs";
18
18
  import path from "node:path";
@@ -2850,7 +2850,15 @@ async function appendAssistantMessageToSessionTranscript(params) {
2850
2850
  ok: false,
2851
2851
  reason: `unknown sessionKey: ${sessionKey}`
2852
2852
  };
2853
- const sessionFile = entry.sessionFile?.trim() || resolveSessionTranscriptPath(entry.sessionId, params.agentId);
2853
+ let sessionFile;
2854
+ try {
2855
+ sessionFile = resolveSessionFilePath(entry.sessionId, entry, { sessionsDir: path.dirname(storePath) });
2856
+ } catch (err) {
2857
+ return {
2858
+ ok: false,
2859
+ reason: err instanceof Error ? err.message : String(err)
2860
+ };
2861
+ }
2854
2862
  await ensureSessionHeader({
2855
2863
  sessionFile,
2856
2864
  sessionId: entry.sessionId