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.
- package/CHANGELOG.md +37 -0
- package/dist/{accounts-DbzMEfKN.js → accounts-DCDeFTra.js} +2 -2
- package/dist/{accounts-DimKrt7j.js → accounts-DeqIQjo1.js} +2 -2
- package/dist/{acp-cli-Cs1ai4XO.js → acp-cli-CeYI4XRd.js} +15 -16
- package/dist/{acp-cli-oV2dodPg.js → acp-cli-rNbGXICg.js} +14 -15
- package/dist/{agent-BndgzkUe.js → agent-BvNJF5QL.js} +19 -16
- package/dist/{agent-DZvDwqnd.js → agent-CyMxTyrG.js} +20 -17
- package/dist/{agent-scope-rXQ7WARN.js → agent-scope-BIEhVP4_.js} +1 -1
- package/dist/{agent-scope---6LLHj0.js → agent-scope-CQCus0rI.js} +2 -2
- package/dist/{agent-scope-RCSw6gHy.js → agent-scope-CsRbLH4l.js} +3 -3
- package/dist/{agent-scope-CN8DM4Xb.js → agent-scope-DPIFau3f.js} +1 -1
- package/dist/{audio-preflight-SZRntkxo.js → audio-preflight-BU8W7uxc.js} +10 -10
- package/dist/{audio-preflight-ClVNINDs.js → audio-preflight-CGsumMzb.js} +10 -10
- package/dist/{audio-preflight-txAP3v-C.js → audio-preflight-SLmkJI6-.js} +22 -22
- package/dist/{audio-preflight-BP6s-UPp.js → audio-preflight-jZc5mFCZ.js} +23 -23
- package/dist/{audit-CQzrm61N.js → audit-Dmww_503.js} +70 -18
- package/dist/{audit-DMH3CSXY.js → audit-wPu26VMb.js} +72 -20
- package/dist/{tailscale-DU6DgqVy.js → auth-9x3lqfIY.js} +208 -3
- package/dist/{tailscale-DHfcfRCx.js → auth-CQNl_IaI.js} +190 -3
- package/dist/{auth-health-BB3e3OmN.js → auth-health-C4L4FGBA.js} +1 -1
- package/dist/{auth-health-zZ9dnQGC.js → auth-health-j6epgQbq.js} +1 -1
- package/dist/{auth-profiles-CcJ3hrog.js → auth-profiles-ByNs3eEm.js} +60 -22
- package/dist/build-info.json +3 -3
- package/dist/bundled/boot-md/handler.js +19 -16
- package/dist/bundled/session-memory/handler.js +16 -15
- package/dist/{call-Yxns4CVq.js → call-DVYCIV8m.js} +5 -5
- package/dist/{call-C9az806y.js → call-SolyGS1r.js} +4 -4
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/{channel-options-CjXPwMWu.js → channel-options-BwC2yQcR.js} +4 -4
- package/dist/{channel-options-CX4iYQfR.js → channel-options-Cq9BVDkP.js} +7 -7
- package/dist/{channel-selection-BoQ7GurB.js → channel-selection-D4D6ImhN.js} +2 -2
- package/dist/{channel-selection-C78IwbD-.js → channel-selection-MZAHm4U8.js} +2 -2
- package/dist/{channels-cli-DUHsmX3q.js → channels-cli-9Dsk9Qm7.js} +53 -51
- package/dist/{channels-cli-BXMQPB4x.js → channels-cli-BJUppQll.js} +52 -50
- package/dist/{channels-status-issues-Ca9--azp.js → channels-status-issues-D7GSV1GS.js} +1 -1
- package/dist/{channels-status-issues-CbULFg2X.js → channels-status-issues-DDAWeT-6.js} +1 -1
- package/dist/{chrome-svgmQ8T_.js → chrome-BfB6JdKF.js} +2 -1
- package/dist/{chrome-juQxt0zf.js → chrome-Cvr-57lg.js} +4 -3
- package/dist/{chrome-BCPPeLQ6.js → chrome-DL0avO8n.js} +2 -1
- package/dist/{chrome-yIKmOzCO.js → chrome-foEwx3lN.js} +5 -4
- package/dist/{clack-prompter-Dmvcu3gn.js → clack-prompter-Bz3Mmcl-.js} +5 -5
- package/dist/{clack-prompter-DuBVnTKy.js → clack-prompter-ChCGXfyt.js} +4 -4
- package/dist/cli/daemon-cli.js +1 -1
- package/dist/{cli-FdxAcu_y.js → cli-ZR9ugUBX.js} +42 -40
- package/dist/{cli-By331Q9f.js → cli-miPe4Ujz.js} +42 -40
- package/dist/{client-B0_GiCjB.js → client-BrYfyoDK.js} +52 -3
- package/dist/{client-D7wrC1Ug.js → client-CTwXnRl7.js} +53 -4
- package/dist/{command-format-ayFsmwwz.js → command-format-Bxe0mWee.js} +1 -1
- package/dist/{command-options-BSDiKuyX.js → command-options-BvgxzPbK.js} +4 -4
- package/dist/{commands-BG25qku5.js → commands-BX_OIIVR.js} +4 -4
- package/dist/{completion-cli-C4zxjkC1.js → completion-cli-CR77-jyv.js} +3 -3
- package/dist/{completion-cli-DECEgBWR.js → completion-cli-DnjpxAag.js} +29 -29
- package/dist/{config-B7sno9eI.js → config-Bdhomfei.js} +15 -6
- package/dist/{config-BuF7vm-v.js → config-BvMsmctM.js} +13 -4
- package/dist/{config-D50SQVar.js → config-QYrbd7x7.js} +13 -4
- package/dist/{config-DH9TLUNc.js → config-aFQssWKX.js} +15 -6
- package/dist/{config-guard-DPxxY1iw.js → config-guard-CljaSxJd.js} +39 -39
- package/dist/{configure-BZQ9uSVX.js → configure-BXLiucXo.js} +19 -19
- package/dist/{configure-Cg5IKSUy.js → configure-BYPqXzGZ.js} +19 -19
- package/dist/control-auth-8Cf4WXpR.js +54 -0
- package/dist/control-auth-DBCu3qyv.js +54 -0
- package/dist/{control-service-CBlMVTRu.js → control-service-B5KnPqGP.js} +11 -5
- package/dist/{control-service-B2er20Ke.js → control-service-DKnttEus.js} +10 -4
- package/dist/{cron-cli-B2Zwhy_r.js → cron-cli-D7BRjDv2.js} +17 -17
- package/dist/{cron-cli-EaRUVd0p.js → cron-cli-z1zk_FXQ.js} +16 -16
- package/dist/{daemon-cli-CVNzObIF.js → daemon-cli-BDkU2ocb.js} +18 -18
- package/dist/{daemon-cli-DF6Rxjy6.js → daemon-cli-cNSF93-v.js} +19 -19
- package/dist/{daemon-runtime-BHF5NjQ7.js → daemon-runtime-B0tg_LsX.js} +2 -2
- package/dist/{daemon-runtime-B05PME1z.js → daemon-runtime-Bsjeut6m.js} +3 -3
- package/dist/{deliver-DzcxEcza.js → deliver-CIU9Npgs.js} +306 -12
- package/dist/{deliver-COf5XFo_.js → deliver-DYYCo1G7.js} +302 -8
- package/dist/{deliver-B1jsU2r7.js → deliver-LsxKETro.js} +306 -12
- package/dist/{deliver-CLwC284e.js → deliver-xUU3mGHo.js} +302 -8
- package/dist/{deps-Cva7QM_t.js → deps-QSwGcoNZ.js} +2 -2
- package/dist/{deps-B6602Wid.js → deps-lAAA2zYI.js} +2 -2
- package/dist/{devices-cli-DPg_4aW8.js → devices-cli-BG3-2oqt.js} +13 -13
- package/dist/{devices-cli-D8K3hZR5.js → devices-cli-VIQtOvt_.js} +13 -13
- package/dist/{directory-cli-OGBSVKAZ.js → directory-cli-BCJwjVC0.js} +15 -15
- package/dist/{directory-cli-Bn47fFX7.js → directory-cli-jYzZ02gk.js} +14 -14
- package/dist/{dispatcher-BHsNwFe-.js → dispatcher-DY51b-Zc.js} +2 -2
- package/dist/{dns-cli-DmTHXgwU.js → dns-cli-DHIiMJjS.js} +11 -11
- package/dist/{dns-cli-kk2rysJh.js → dns-cli-pZlv87Ib.js} +11 -11
- package/dist/{docs-cli-CB77CeM4.js → docs-cli-2JDiwfzP.js} +7 -7
- package/dist/{docs-cli-DUcyw0X0.js → docs-cli-BhkYqoIQ.js} +6 -6
- package/dist/{doctor-DwqdkfPa.js → doctor-Bf8EhNtA.js} +33 -33
- package/dist/{doctor-BZfxDGUg.js → doctor-sYG5V4Co.js} +32 -32
- package/dist/entry.js +36 -14
- package/dist/{env-DE9xvYOL.js → env-ONzUVAG2.js} +1 -1
- package/dist/{exec-4WHuOniw.js → exec-B8lXct-k.js} +31 -13
- package/dist/{exec-B8JKbXKW.js → exec-CACT5OAW.js} +1 -1
- package/dist/{exec-D12IZYtJ.js → exec-CJFFoM7H.js} +31 -13
- package/dist/{exec-DXtR2fhb.js → exec-YIosokWE.js} +1 -1
- package/dist/{exec-approvals-cli-GizapOX5.js → exec-approvals-cli-7LH0lwhO.js} +19 -19
- package/dist/{exec-approvals-cli-BWO0Rs-a.js → exec-approvals-cli-apGnQbpj.js} +19 -19
- package/dist/extensionAPI.js +1108 -661
- package/dist/{fetch-CqZP8jwB.js → fetch-DmiOpALK.js} +5 -3
- package/dist/{fetch-timeout-B2KlHXi3.js → fetch-timeout-BEtUjM1S.js} +5 -3
- package/dist/{fetch-timeout-ohY5QmsW.js → fetch-timeout-DEoXG_SF.js} +5 -3
- package/dist/{fetch-timeout-4UKsdtE1.js → fetch-timeout-DTK9vxex.js} +5 -3
- package/dist/{gateway-cli-Bbd1Xbsc.js → gateway-cli-DUdYxlZS.js} +315 -103
- package/dist/{gateway-cli-PR1S0BTe.js → gateway-cli-DbvWmE-9.js} +314 -102
- package/dist/{gateway-rpc-8gue7Qjt.js → gateway-rpc-BByb2Snz.js} +3 -3
- package/dist/{gateway-rpc-DjuxyOm-.js → gateway-rpc-wXSCUZXj.js} +3 -3
- package/dist/{github-copilot-auth-B3chCDfc.js → github-copilot-auth-D7ewvpMd.js} +16 -8
- package/dist/{github-copilot-auth-Cm2SB8Qf.js → github-copilot-auth-DDispnyz.js} +16 -8
- package/dist/{github-copilot-token-SLWintYd.js → github-copilot-token-Cfs0Wxr8.js} +1 -1
- package/dist/{gmail-setup-utils-Cgh0ptgA.js → gmail-setup-utils-Cfns8TQx.js} +3 -3
- package/dist/{gmail-setup-utils-WDyf1gTU.js → gmail-setup-utils-DJb-_5kO.js} +4 -4
- package/dist/{health-format-C0C_Apce.js → health-format-KGPokKJH.js} +68 -28
- package/dist/{health-format-gLMfE2wf.js → health-format-LZDxu3rv.js} +67 -27
- package/dist/{help-format-5iAL_46a.js → help-format-C48TXngO.js} +1 -1
- package/dist/{help-format-DUy1KRxq.js → help-format-R5fLToDw.js} +1 -1
- package/dist/{hooks-cli-CEN1h1ya.js → hooks-cli-CT8JCRkH.js} +46 -44
- package/dist/{hooks-cli-DrchIqSi.js → hooks-cli-S1MKumJO.js} +47 -45
- package/dist/{hooks-status-Cgy6AtQk.js → hooks-status-Cw0xD8Lt.js} +3 -3
- package/dist/{hooks-status--xVLpAXz.js → hooks-status-D9MhwHRp.js} +3 -3
- package/dist/{image-Dkawt9Kg.js → image-Brk1sJbw.js} +4 -4
- package/dist/{image-DI9s9eEx.js → image-C4Nn2p3e.js} +5 -5
- package/dist/{image-LxFvu0wL.js → image-DgtfXMcX.js} +5 -5
- package/dist/{image-B4mDPdyz.js → image-RKwc3fsL.js} +4 -4
- package/dist/index.js +83 -83
- package/dist/{installs-NS0VMPN7.js → installs-CrLcWYHe.js} +4 -4
- package/dist/{installs-DA-eSN1B.js → installs-DscWb9b9.js} +5 -5
- package/dist/{links-CV4oki2u.js → links-B8LAzWwg.js} +1 -1
- package/dist/{links-7M-j83As.js → links-Eax1UO3w.js} +1 -1
- package/dist/llm-slug-generator.js +15 -15
- package/dist/{loader-Caow9TPA.js → loader-KjT074JR.js} +1105 -762
- package/dist/{logging-CeHn2itV.js → logging-BAyPwvdH.js} +1 -1
- package/dist/{logging-D0MyqUlV.js → logging-CRq4h04P.js} +2 -2
- package/dist/{login-qr-Xx8yJrSc.js → login-qr-B6ZgAuIf.js} +5 -5
- package/dist/{login-qr-CoskdtvN.js → login-qr-Bua-p0nG.js} +2 -2
- package/dist/{login-qr-CAk9D-FM.js → login-qr-CuvemJj4.js} +6 -6
- package/dist/{login-qr-kUyMWXV1.js → login-qr-Djr1JfIf.js} +2 -2
- package/dist/{logs-cli-B476pzJS.js → logs-cli-9IAV7rWY.js} +15 -15
- package/dist/{logs-cli-BQRUI_PO.js → logs-cli-EiKzUFPa.js} +14 -14
- package/dist/{manager-CBApH7eR.js → manager-BIMh_eSm.js} +5 -5
- package/dist/{manager-CyJH6WMg.js → manager-CwinWQoz.js} +5 -5
- package/dist/{manager-DScY_ZTT.js → manager-DkqF1GiK.js} +7 -7
- package/dist/{manager-DseK7RWj.js → manager-T1XfGchB.js} +8 -8
- package/dist/{manifest-registry-DFckk-L8.js → manifest-registry-CQhdnDBZ.js} +2 -2
- package/dist/{manifest-registry-BTgLN_W2.js → manifest-registry-u0okVSkU.js} +2 -2
- package/dist/{message-channel-0717wOz-.js → message-channel-BLi2a6Yw.js} +1 -1
- package/dist/{message-channel-BlgPSDAh.js → message-channel-C_MmebBt.js} +1 -1
- package/dist/{model-auth-CbqRVYRp.js → model-auth-CabXIF6O.js} +57 -19
- package/dist/{model-selection-unMJyUIE.js → model-selection-BLuqsGVB.js} +59 -21
- package/dist/{model-selection-B9Y7dKQd.js → model-selection-C1GmkTAV.js} +57 -19
- package/dist/{models-cli-B1cLGcRz.js → models-cli-9jmDv-h3.js} +50 -48
- package/dist/{models-cli-D7sChCi6.js → models-cli-zS9rtWz8.js} +48 -46
- package/dist/{node-cli-ic2C1xs2.js → node-cli-CrpTxTTs.js} +26 -24
- package/dist/{node-cli-CS3KwBh1.js → node-cli-wemUMCg-.js} +25 -23
- package/dist/{node-service-D_Cdq1JI.js → node-service-C8DTHTMg.js} +2 -2
- package/dist/{node-service-_vgO5xR-.js → node-service-WQuEKz6W.js} +1 -1
- package/dist/{nodes-cli-CipcvVMc.js → nodes-cli-BaU2SIFw.js} +16 -16
- package/dist/{nodes-cli-B1meaW7S.js → nodes-cli-Dx23D72n.js} +16 -16
- package/dist/{nodes-screen-N-4_0VIu.js → nodes-screen-C0IuBqUL.js} +1 -1
- package/dist/{note-CAM9PbSJ.js → note-BhRSeNeu.js} +2 -2
- package/dist/{note-Ci08TSbV.js → note-hhtubr2j.js} +1 -1
- package/dist/{onboard-channels-DMcOT0dj.js → onboard-channels-C501x8GI.js} +8 -8
- package/dist/{onboard-channels-CsT3E4bT.js → onboard-channels-Dxzroasd.js} +8 -8
- package/dist/{onboard-skills-DoxkpnEU.js → onboard-skills-DV0Qzvjj.js} +19 -19
- package/dist/{onboard-skills-D-BrCoRN.js → onboard-skills-rlBHcu3Q.js} +18 -18
- package/dist/{onboarding-B92952fz.js → onboarding-CN-EDLjd.js} +34 -34
- package/dist/{pairing-cli-BDUJ5VoX.js → pairing-cli-CDHG4xuI.js} +15 -15
- package/dist/{pairing-cli-0wbU1u8d.js → pairing-cli-CQP34Dlx.js} +14 -14
- package/dist/{pairing-labels-3o3QO3Qn.js → pairing-labels-B6CN0SNH.js} +1 -1
- package/dist/{pairing-labels-Bin1K7_f.js → pairing-labels-CgNHnjzT.js} +1 -1
- package/dist/{pairing-store-CL4rJ7m7.js → pairing-store-CmlRVqOz.js} +2 -2
- package/dist/{pairing-store-fIWI3pXG.js → pairing-store-Dp5_JGnG.js} +3 -3
- package/dist/{path-env-CXWUFfFv.js → path-env-CLvYNwtL.js} +1 -1
- package/dist/{path-env-C5FR_Eay.js → path-env-CaYUVIML.js} +2 -2
- package/dist/{paths-DwKNqk_S.js → paths-B0a4ywSO.js} +30 -5
- package/dist/{paths-RITJT4UY.js → paths-B49s6UZQ.js} +30 -5
- package/dist/{paths-CB2fqqbX.js → paths-D0O87MfH.js} +30 -5
- package/dist/{paths-IivnSNkP.js → paths-DLINmNFQ.js} +31 -6
- package/dist/{pi-embedded-DhYItk8O.js → pi-embedded-Ctrt2kz0.js} +1109 -662
- package/dist/{pi-embedded-helpers-CmftU5Zj.js → pi-embedded-helpers-CMKLjW6X.js} +8 -5
- package/dist/{pi-embedded-helpers-CfXnSIFx.js → pi-embedded-helpers-CUzTc1v6.js} +170 -19
- package/dist/{pi-embedded-helpers-Uan-3N1T.js → pi-embedded-helpers-DfwkwPYD.js} +7 -4
- package/dist/{pi-embedded-helpers-Bri9tk9g.js → pi-embedded-helpers-WDwx99UA.js} +170 -19
- package/dist/{pi-tools.policy-CJFi1sny.js → pi-tools.policy-BpsROZbz.js} +4 -4
- package/dist/{plugin-auto-enable-BY4CqJbD.js → plugin-auto-enable-Bqhc3w5n.js} +5 -5
- package/dist/{plugin-auto-enable-DbQrtQjL.js → plugin-auto-enable-PW76g_PJ.js} +5 -5
- package/dist/plugin-sdk/agents/pi-embedded-runner/run/params.d.ts +2 -0
- package/dist/plugin-sdk/agents/pi-embedded-runner/run/types.d.ts +2 -0
- package/dist/plugin-sdk/agents/pi-embedded-runner/types.d.ts +15 -0
- package/dist/plugin-sdk/agents/pi-embedded-subscribe.handlers.tools.d.ts +1 -1
- package/dist/plugin-sdk/agents/pi-embedded-subscribe.handlers.types.d.ts +2 -0
- package/dist/plugin-sdk/agents/pi-embedded-subscribe.types.d.ts +2 -0
- package/dist/plugin-sdk/agents/session-tool-result-guard-wrapper.d.ts +2 -0
- package/dist/plugin-sdk/agents/session-tool-result-guard.d.ts +4 -0
- package/dist/plugin-sdk/agents/tools/agent-step.d.ts +3 -0
- package/dist/plugin-sdk/agents/usage.d.ts +1 -0
- package/dist/plugin-sdk/auto-reply/reply/reply-reference.d.ts +1 -1
- package/dist/plugin-sdk/auto-reply/reply/session-run-accounting.d.ts +11 -0
- package/dist/plugin-sdk/auto-reply/reply/session-usage.d.ts +8 -0
- package/dist/plugin-sdk/browser/control-auth.d.ts +13 -0
- package/dist/plugin-sdk/channels/plugins/onboarding/signal.d.ts +1 -0
- package/dist/plugin-sdk/cli/prompt.d.ts +1 -0
- package/dist/plugin-sdk/commands/agent/types.d.ts +2 -0
- package/dist/plugin-sdk/config/sessions/paths.d.ts +7 -2
- package/dist/plugin-sdk/config/types.agents.d.ts +2 -0
- package/dist/plugin-sdk/config/types.discord.d.ts +5 -0
- package/dist/plugin-sdk/config/types.gateway.d.ts +15 -0
- package/dist/plugin-sdk/config/types.hooks.d.ts +15 -0
- package/dist/plugin-sdk/config/zod-schema.agents.d.ts +1 -0
- package/dist/plugin-sdk/config/zod-schema.d.ts +11 -0
- package/dist/plugin-sdk/config/zod-schema.providers-core.d.ts +9 -0
- package/dist/plugin-sdk/config/zod-schema.providers.d.ts +4 -0
- package/dist/plugin-sdk/discord/monitor/allow-list.d.ts +15 -0
- package/dist/plugin-sdk/discord/send.types.d.ts +3 -0
- package/dist/plugin-sdk/gateway/auth.d.ts +36 -0
- package/dist/plugin-sdk/gateway/protocol/schema/agent.d.ts +6 -0
- package/dist/plugin-sdk/gateway/session-utils.fs.d.ts +3 -1
- package/dist/plugin-sdk/index.js +295 -99
- package/dist/plugin-sdk/infra/binaries.d.ts +3 -0
- package/dist/plugin-sdk/infra/heartbeat-runner.d.ts +1 -0
- package/dist/plugin-sdk/infra/net/fetch-guard.d.ts +1 -0
- package/dist/plugin-sdk/infra/net/ssrf.d.ts +1 -0
- package/dist/plugin-sdk/infra/tailscale.d.ts +34 -0
- package/dist/plugin-sdk/infra/tmp-openclaw-dir.d.ts +10 -0
- package/dist/plugin-sdk/logging/logger.d.ts +1 -1
- package/dist/plugin-sdk/media/input-files.d.ts +5 -0
- package/dist/plugin-sdk/routing/resolve-route.d.ts +3 -1
- package/dist/plugin-sdk/security/external-content.d.ts +1 -1
- package/dist/plugin-sdk/security/secret-equal.d.ts +1 -0
- package/dist/plugin-sdk/sessions/input-provenance.d.ts +16 -0
- package/dist/plugin-sdk/signal/monitor/event-handler.types.d.ts +8 -0
- package/dist/plugin-sdk/signal/monitor/mentions.d.ts +2 -0
- package/dist/{plugins-3GyCj5KL.js → plugins-4Hqd1WGf.js} +3 -3
- package/dist/{plugins-BL9lIXSA.js → plugins-X7d_tfTE.js} +4 -4
- package/dist/{plugins-cli-Ce7VsvZh.js → plugins-cli-Bgku3EGj.js} +253 -46
- package/dist/{plugins-cli-e9gUebMd.js → plugins-cli-CVToH3if.js} +254 -47
- package/dist/{ports-DupIRXQ0.js → ports-qkt29rdC.js} +2 -2
- package/dist/{program-u22vbFpH.js → program-Cf7lkBur.js} +82 -82
- package/dist/{progress-g9R--HZD.js → progress-C9kngsTD.js} +1 -1
- package/dist/{progress-Da1ehW-x.js → progress-DWqhRakV.js} +1 -1
- package/dist/{prompt-style-Dc0C5HC9.js → prompt-style-BFH5D5LN.js} +1 -1
- package/dist/{prompt-style-lmJDcgtA.js → prompt-style-CIbmaxSa.js} +1 -1
- package/dist/{pw-ai-C43wv1ZF.js → pw-ai-8mdv3h-d.js} +7 -6
- package/dist/{pw-ai-DTZVjndL.js → pw-ai-CM1IsSgZ.js} +5 -5
- package/dist/{pw-ai-zVebjrSG.js → pw-ai-FGoRVblI.js} +3 -3
- package/dist/{pw-ai-CWrnJ98b.js → pw-ai-sS1fRKW_.js} +3 -3
- package/dist/{qmd-manager-NPD5Yh_4.js → qmd-manager-C67Fc8aN.js} +4 -4
- package/dist/{qmd-manager-ozZ933qc.js → qmd-manager-CXVbfg99.js} +7 -7
- package/dist/{qmd-manager-DBCZ1sio.js → qmd-manager-RMRE8Tqt.js} +6 -6
- package/dist/{qmd-manager-a9Bt0405.js → qmd-manager-pyc_MTIe.js} +4 -4
- package/dist/{register.subclis-BpX3ulH1.js → register.subclis-C02e4zuJ.js} +28 -28
- package/dist/{reply-m467_fOC.js → reply-DICXkh_C.js} +911 -568
- package/dist/{routes-82Ywfho6.js → routes-CmOI1hIH.js} +29 -11
- package/dist/{routes-BqxA3ZYr.js → routes-DewK5tq2.js} +29 -12
- package/dist/{rpc-DcGBG-Fp.js → rpc-DHr30euf.js} +3 -3
- package/dist/{rpc-CfdBHlnp.js → rpc-T300F8zI.js} +3 -3
- package/dist/{run-main-aolvSfj3.js → run-main-C5wpthq1.js} +84 -84
- package/dist/{runner-C1G8RFWl.js → runner-CY0nmVme.js} +9 -9
- package/dist/{runner-BCBs8JKA.js → runner-Cfm5nTMc.js} +6 -6
- package/dist/{runner-CInKPsiP.js → runner-D_dujMod.js} +8 -8
- package/dist/{runner-Cwfn-VOM.js → runner-DrGYLH5K.js} +6 -6
- package/dist/{sandbox-B0K9e6Fw.js → sandbox-BKYnhYQH.js} +23 -15
- package/dist/{sandbox-BW8Xnkw1.js → sandbox-Bhjnh1Xg.js} +21 -13
- package/dist/{sandbox-cli-mKCs2J0i.js → sandbox-cli-DBsAjZJN.js} +20 -20
- package/dist/{sandbox-cli-BD5LkZ0B.js → sandbox-cli-rV9LtFeu.js} +19 -19
- package/dist/{security-cli-kgI4soGy.js → security-cli-BIwJM_rs.js} +27 -27
- package/dist/{security-cli-kz8TiyqU.js → security-cli-BRjny8Yu.js} +26 -26
- package/dist/{server-context-fX4xiYRh.js → server-context-BGpGs3qd.js} +7 -7
- package/dist/{server-context-Lb-eUZG_.js → server-context-Cl0U0vE3.js} +5 -5
- package/dist/{server-node-events-Dx18uVrH.js → server-node-events-CBfTbiTA.js} +45 -43
- package/dist/{server-node-events-KqZMN30F.js → server-node-events-QCvh8EgI.js} +45 -43
- package/dist/{service-DZMXgMra.js → service--nPk7DvT.js} +3 -3
- package/dist/{service-DNcIZ5Kp.js → service-99RDXwX4.js} +2 -2
- package/dist/{service-audit-0WLGnoNT.js → service-audit-DnLmRGQt.js} +4 -4
- package/dist/{service-audit-uhZSlxeb.js → service-audit-ckBaRCVC.js} +3 -3
- package/dist/{session-cost-usage-HU4OeRgw.js → session-cost-usage-D7HuoSSD.js} +10 -8
- package/dist/{session-cost-usage-CL8gnHRN.js → session-cost-usage-D9hHANWI.js} +10 -8
- package/dist/{shared-j4Qtr475.js → shared-Bs4vduG4.js} +3 -3
- package/dist/{shared-BBw6F-YC.js → shared-CEY5IkwG.js} +2 -2
- package/dist/{shared-DOZs2SoH.js → shared-DRohONn_.js} +3 -3
- package/dist/{shared-CtP9K-o2.js → shared-ICqOZibV.js} +3 -3
- package/dist/{skill-scanner-C_fQzVDu.js → skill-scanner-rHMtUHtP.js} +1 -1
- package/dist/{skills-BvPUNjxo.js → skills-DRjfSQT3.js} +128 -4
- package/dist/{skills-aFOsriMP.js → skills-DprQj9X2.js} +129 -5
- package/dist/{skills-cli-oWaTJzZd.js → skills-cli-9WO-C55s.js} +12 -12
- package/dist/{skills-cli-E6shXpdd.js → skills-cli-B9eej-EW.js} +13 -13
- package/dist/{skills-status-D4vbIMnz.js → skills-status-5U3P3YfJ.js} +3 -3
- package/dist/{skills-status-DJDaA2Ur.js → skills-status-TDIgVd1K.js} +2 -2
- package/dist/{sqlite-B7FPASCO.js → sqlite-BINzs1U0.js} +2 -2
- package/dist/{sqlite-B4Z1_Ioc.js → sqlite-D4w5TejA.js} +2 -2
- package/dist/{sqlite-BkYnxkQO.js → sqlite-DRRHmlug.js} +2 -2
- package/dist/{sqlite-EuQPVXvn.js → sqlite-F6PGkEm1.js} +2 -2
- package/dist/{status-B2Yr-2J5.js → status-BKGkKC_v.js} +3 -3
- package/dist/{status-DW7m5xUN.js → status-CiHtHdaa.js} +4 -4
- package/dist/{status-CxhnUa5J.js → status-DDWoOpeB.js} +33 -33
- package/dist/{subsystem-Bv7dGhES.js → subsystem-BoExtIHo.js} +32 -13
- package/dist/{system-cli-0JXhJNWm.js → system-cli-B6lr60Io.js} +14 -14
- package/dist/{system-cli-D-0OaMtH.js → system-cli-CprW9G3h.js} +14 -14
- package/dist/{systemd-CNTodvCO.js → systemd-C0VZriGM.js} +2 -2
- package/dist/{systemd-CUJJHgHa.js → systemd-DrmBtJ5T.js} +3 -3
- package/dist/{systemd-hints-cmHtrXUl.js → systemd-hints-DZtXiVHa.js} +1 -1
- package/dist/{systemd-linger-CArPbmvv.js → systemd-linger-NC2kl1SC.js} +2 -2
- package/dist/{systemd-linger-XvT9Y9sb.js → systemd-linger-xdn3BdPh.js} +2 -2
- package/dist/{table-DzBBIqHO.js → table-B8dx3v4v.js} +2 -2
- package/dist/{table-oJQPTUL6.js → table-CwulTLQp.js} +1 -1
- package/dist/{tool-display-Na-EVL83.js → tool-display-CZRIDMRm.js} +1 -1
- package/dist/{tool-display-sHJa3kRs.js → tool-display-ClRud3pg.js} +2 -2
- package/dist/{tui-nGp8ltQK.js → tui-CVTQn-dC.js} +9 -9
- package/dist/{tui-Biw7aqPj.js → tui-Lu8FdrlK.js} +9 -9
- package/dist/{tui-cli-C9FEfG7C.js → tui-cli-BLpTj1X9.js} +25 -25
- package/dist/{tui-cli-Dxnu5JGl.js → tui-cli-BLx5kL2I.js} +25 -25
- package/dist/{tui-formatters-BiNTNGwg.js → tui-formatters-CNySEfJN.js} +5 -5
- package/dist/{tui-formatters-C_baVYUz.js → tui-formatters-DePhZK3J.js} +5 -5
- package/dist/{update-C4rsLj2F.js → update-DHVxMTpQ.js} +3 -3
- package/dist/{update-uwUWrKFu.js → update-DU1geolI.js} +3 -3
- package/dist/{update-cli-cNd_G9E6.js → update-cli-C0hUvJWK.js} +66 -66
- package/dist/{update-cli-CBXp-c4C.js → update-cli-Wb1GB3rL.js} +68 -68
- package/dist/{update-runner-BLsqC24J.js → update-runner--ixK4J3W.js} +10 -10
- package/dist/{update-runner-C_FDpmA3.js → update-runner-7Qa1T9y6.js} +9 -9
- package/dist/{utils-Dk86IbEs.js → utils-BLJAc3ZV.js} +1 -1
- package/dist/{utils-BHPdZE4h.js → utils-Cd9QdCHh.js} +1 -1
- package/dist/{webhooks-cli-BpBKXL7W.js → webhooks-cli-DgcMy7RG.js} +12 -12
- package/dist/{webhooks-cli-wNfhfKqm.js → webhooks-cli-aVzUcJY9.js} +11 -11
- package/dist/{widearea-dns-WVCWJTEb.js → widearea-dns-BaIgNEhY.js} +1 -1
- package/dist/{widearea-dns-BWYPcfby.js → widearea-dns-DzuRdwk5.js} +1 -1
- package/dist/{ws-log-Cafylho7.js → ws-log-CIXbLCka.js} +1 -1
- package/dist/{ws-log-DTUOUVgR.js → ws-log-DcQFZByi.js} +1 -1
- package/dist/{wsl-B-H6Z5wp.js → wsl-BUOkxKJu.js} +2 -2
- package/docs/automation/webhook.md +43 -2
- package/docs/channels/discord.md +29 -1
- package/docs/cli/plugins.md +20 -1
- package/docs/cli/security.md +1 -0
- package/docs/concepts/session-tool.md +1 -0
- package/docs/gateway/configuration-reference.md +11 -0
- package/docs/gateway/configuration.md +3 -0
- package/docs/gateway/openresponses-http-api.md +15 -0
- package/docs/gateway/security/index.md +3 -0
- package/docs/help/faq.md +9 -0
- package/docs/install/installer.md +20 -0
- package/docs/reference/transcript-hygiene.md +18 -0
- package/docs/tools/browser.md +6 -0
- package/extensions/diagnostics-otel/package.json +9 -9
- package/extensions/feishu/package.json +1 -1
- package/extensions/feishu/src/config-schema.ts +6 -0
- package/extensions/feishu/src/reply-dispatcher.test.ts +116 -0
- package/extensions/feishu/src/reply-dispatcher.ts +124 -67
- package/extensions/feishu/src/streaming-card.ts +223 -0
- package/extensions/feishu/src/targets.test.ts +16 -0
- package/extensions/feishu/src/targets.ts +1 -1
- package/extensions/irc/src/client.ts +1 -1
- package/extensions/minimax-portal-auth/index.ts +7 -5
- package/extensions/nostr/package.json +1 -1
- package/package.json +13 -13
- package/dist/auth-BcNHFK-i.js +0 -184
- package/dist/auth-jrfLXze7.js +0 -184
- /package/dist/{archive-DqNr5i8b.js → archive-beaSfAzA.js} +0 -0
- /package/dist/{brew-BIrWdDps.js → brew-BUIxHEkn.js} +0 -0
- /package/dist/{brew-6UyogeLe.js → brew-ROHf0-Xp.js} +0 -0
- /package/dist/{constants-DuoCkWRh.js → constants-BvQ6S8j5.js} +0 -0
- /package/dist/{errors-x4NYs-1P.js → errors-DjZBTJJ3.js} +0 -0
- /package/dist/{helpers-BDvtkJjw.js → helpers-HyeZXsnu.js} +0 -0
- /package/dist/{is-main-CE1eOBYb.js → is-main-BWoXGz7p.js} +0 -0
- /package/dist/{parse-Cjiudy6x.js → parse-Bw0oH-rT.js} +0 -0
- /package/dist/{parse-timeout-DFSPLxpY.js → parse-timeout-D1XX_zN_.js} +0 -0
- /package/dist/{prompts-BOz5176z.js → prompts-Bg96reub.js} +0 -0
- /package/dist/{redact-DuEEf1p1.js → redact-Br9GfacZ.js} +0 -0
- /package/dist/{skill-scanner-CprFkZib.js → skill-scanner-CucvxYhu.js} +0 -0
- /package/dist/{transcript-events-CZ8CG4ht.js → transcript-events-BtNd-j6q.js} +0 -0
package/dist/plugin-sdk/index.js
CHANGED
|
@@ -1476,6 +1476,7 @@ const DiscordGuildChannelSchema = z.object({
|
|
|
1476
1476
|
skills: z.array(z.string()).optional(),
|
|
1477
1477
|
enabled: z.boolean().optional(),
|
|
1478
1478
|
users: z.array(z.union([z.string(), z.number()])).optional(),
|
|
1479
|
+
roles: z.array(z.union([z.string(), z.number()])).optional(),
|
|
1479
1480
|
systemPrompt: z.string().optional(),
|
|
1480
1481
|
includeThreadStarter: z.boolean().optional(),
|
|
1481
1482
|
autoThread: z.boolean().optional()
|
|
@@ -1492,6 +1493,7 @@ const DiscordGuildSchema = z.object({
|
|
|
1492
1493
|
"allowlist"
|
|
1493
1494
|
]).optional(),
|
|
1494
1495
|
users: z.array(z.union([z.string(), z.number()])).optional(),
|
|
1496
|
+
roles: z.array(z.union([z.string(), z.number()])).optional(),
|
|
1495
1497
|
channels: z.record(z.string(), DiscordGuildChannelSchema.optional()).optional()
|
|
1496
1498
|
}).strict();
|
|
1497
1499
|
const DiscordAccountSchema = z.object({
|
|
@@ -2411,6 +2413,31 @@ function resolveGatewayPort(cfg, env = process.env) {
|
|
|
2411
2413
|
return DEFAULT_GATEWAY_PORT;
|
|
2412
2414
|
}
|
|
2413
2415
|
|
|
2416
|
+
//#endregion
|
|
2417
|
+
//#region src/infra/tmp-openclaw-dir.ts
|
|
2418
|
+
const POSIX_OPENCLAW_TMP_DIR = "/tmp/openclaw";
|
|
2419
|
+
function isNodeErrorWithCode(err, code) {
|
|
2420
|
+
return typeof err === "object" && err !== null && "code" in err && err.code === code;
|
|
2421
|
+
}
|
|
2422
|
+
function resolvePreferredOpenClawTmpDir(options = {}) {
|
|
2423
|
+
const accessSync = options.accessSync ?? fs.accessSync;
|
|
2424
|
+
const statSync = options.statSync ?? fs.statSync;
|
|
2425
|
+
const tmpdir = options.tmpdir ?? os.tmpdir;
|
|
2426
|
+
try {
|
|
2427
|
+
if (!statSync(POSIX_OPENCLAW_TMP_DIR).isDirectory()) return path.join(tmpdir(), "openclaw");
|
|
2428
|
+
accessSync(POSIX_OPENCLAW_TMP_DIR, fs.constants.W_OK | fs.constants.X_OK);
|
|
2429
|
+
return POSIX_OPENCLAW_TMP_DIR;
|
|
2430
|
+
} catch (err) {
|
|
2431
|
+
if (!isNodeErrorWithCode(err, "ENOENT")) return path.join(tmpdir(), "openclaw");
|
|
2432
|
+
}
|
|
2433
|
+
try {
|
|
2434
|
+
accessSync("/tmp", fs.constants.W_OK | fs.constants.X_OK);
|
|
2435
|
+
return POSIX_OPENCLAW_TMP_DIR;
|
|
2436
|
+
} catch {
|
|
2437
|
+
return path.join(tmpdir(), "openclaw");
|
|
2438
|
+
}
|
|
2439
|
+
}
|
|
2440
|
+
|
|
2414
2441
|
//#endregion
|
|
2415
2442
|
//#region src/logging/config.ts
|
|
2416
2443
|
function readLoggingConfig() {
|
|
@@ -2471,7 +2498,7 @@ const loggingState = {
|
|
|
2471
2498
|
|
|
2472
2499
|
//#endregion
|
|
2473
2500
|
//#region src/logging/logger.ts
|
|
2474
|
-
const DEFAULT_LOG_DIR =
|
|
2501
|
+
const DEFAULT_LOG_DIR = resolvePreferredOpenClawTmpDir();
|
|
2475
2502
|
const DEFAULT_LOG_FILE = path.join(DEFAULT_LOG_DIR, "openclaw.log");
|
|
2476
2503
|
const LOG_PREFIX = "openclaw";
|
|
2477
2504
|
const LOG_SUFFIX = ".log";
|
|
@@ -2815,17 +2842,10 @@ function restoreTerminalState(reason) {
|
|
|
2815
2842
|
reportRestoreFailure("progress line", err, reason);
|
|
2816
2843
|
}
|
|
2817
2844
|
const stdin = process.stdin;
|
|
2818
|
-
if (stdin.isTTY && typeof stdin.setRawMode === "function") {
|
|
2819
|
-
|
|
2820
|
-
|
|
2821
|
-
|
|
2822
|
-
reportRestoreFailure("raw mode", err, reason);
|
|
2823
|
-
}
|
|
2824
|
-
if (typeof stdin.isPaused === "function" && stdin.isPaused()) try {
|
|
2825
|
-
stdin.resume();
|
|
2826
|
-
} catch (err) {
|
|
2827
|
-
reportRestoreFailure("stdin resume", err, reason);
|
|
2828
|
-
}
|
|
2845
|
+
if (stdin.isTTY && typeof stdin.setRawMode === "function") try {
|
|
2846
|
+
stdin.setRawMode(false);
|
|
2847
|
+
} catch (err) {
|
|
2848
|
+
reportRestoreFailure("raw mode", err, reason);
|
|
2829
2849
|
}
|
|
2830
2850
|
if (process.stdout.isTTY) try {
|
|
2831
2851
|
process.stdout.write(RESET_SEQUENCE);
|
|
@@ -7837,23 +7857,53 @@ function buildMinimaxProvider() {
|
|
|
7837
7857
|
return {
|
|
7838
7858
|
baseUrl: MINIMAX_API_BASE_URL,
|
|
7839
7859
|
api: "openai-completions",
|
|
7840
|
-
models: [
|
|
7841
|
-
|
|
7842
|
-
|
|
7843
|
-
|
|
7844
|
-
|
|
7845
|
-
|
|
7846
|
-
|
|
7847
|
-
|
|
7848
|
-
|
|
7849
|
-
|
|
7850
|
-
|
|
7851
|
-
|
|
7852
|
-
|
|
7853
|
-
|
|
7854
|
-
|
|
7855
|
-
|
|
7856
|
-
|
|
7860
|
+
models: [
|
|
7861
|
+
{
|
|
7862
|
+
id: MINIMAX_DEFAULT_MODEL_ID,
|
|
7863
|
+
name: "MiniMax M2.1",
|
|
7864
|
+
reasoning: false,
|
|
7865
|
+
input: ["text"],
|
|
7866
|
+
cost: MINIMAX_API_COST,
|
|
7867
|
+
contextWindow: MINIMAX_DEFAULT_CONTEXT_WINDOW,
|
|
7868
|
+
maxTokens: MINIMAX_DEFAULT_MAX_TOKENS
|
|
7869
|
+
},
|
|
7870
|
+
{
|
|
7871
|
+
id: "MiniMax-M2.1-lightning",
|
|
7872
|
+
name: "MiniMax M2.1 Lightning",
|
|
7873
|
+
reasoning: false,
|
|
7874
|
+
input: ["text"],
|
|
7875
|
+
cost: MINIMAX_API_COST,
|
|
7876
|
+
contextWindow: MINIMAX_DEFAULT_CONTEXT_WINDOW,
|
|
7877
|
+
maxTokens: MINIMAX_DEFAULT_MAX_TOKENS
|
|
7878
|
+
},
|
|
7879
|
+
{
|
|
7880
|
+
id: MINIMAX_DEFAULT_VISION_MODEL_ID,
|
|
7881
|
+
name: "MiniMax VL 01",
|
|
7882
|
+
reasoning: false,
|
|
7883
|
+
input: ["text", "image"],
|
|
7884
|
+
cost: MINIMAX_API_COST,
|
|
7885
|
+
contextWindow: MINIMAX_DEFAULT_CONTEXT_WINDOW,
|
|
7886
|
+
maxTokens: MINIMAX_DEFAULT_MAX_TOKENS
|
|
7887
|
+
},
|
|
7888
|
+
{
|
|
7889
|
+
id: "MiniMax-M2.5",
|
|
7890
|
+
name: "MiniMax M2.5",
|
|
7891
|
+
reasoning: true,
|
|
7892
|
+
input: ["text"],
|
|
7893
|
+
cost: MINIMAX_API_COST,
|
|
7894
|
+
contextWindow: MINIMAX_DEFAULT_CONTEXT_WINDOW,
|
|
7895
|
+
maxTokens: MINIMAX_DEFAULT_MAX_TOKENS
|
|
7896
|
+
},
|
|
7897
|
+
{
|
|
7898
|
+
id: "MiniMax-M2.5-Lightning",
|
|
7899
|
+
name: "MiniMax M2.5 Lightning",
|
|
7900
|
+
reasoning: true,
|
|
7901
|
+
input: ["text"],
|
|
7902
|
+
cost: MINIMAX_API_COST,
|
|
7903
|
+
contextWindow: MINIMAX_DEFAULT_CONTEXT_WINDOW,
|
|
7904
|
+
maxTokens: MINIMAX_DEFAULT_MAX_TOKENS
|
|
7905
|
+
}
|
|
7906
|
+
]
|
|
7857
7907
|
};
|
|
7858
7908
|
}
|
|
7859
7909
|
function buildMinimaxPortalProvider() {
|
|
@@ -7868,6 +7918,14 @@ function buildMinimaxPortalProvider() {
|
|
|
7868
7918
|
cost: MINIMAX_API_COST,
|
|
7869
7919
|
contextWindow: MINIMAX_DEFAULT_CONTEXT_WINDOW,
|
|
7870
7920
|
maxTokens: MINIMAX_DEFAULT_MAX_TOKENS
|
|
7921
|
+
}, {
|
|
7922
|
+
id: "MiniMax-M2.5",
|
|
7923
|
+
name: "MiniMax M2.5",
|
|
7924
|
+
reasoning: true,
|
|
7925
|
+
input: ["text"],
|
|
7926
|
+
cost: MINIMAX_API_COST,
|
|
7927
|
+
contextWindow: MINIMAX_DEFAULT_CONTEXT_WINDOW,
|
|
7928
|
+
maxTokens: MINIMAX_DEFAULT_MAX_TOKENS
|
|
7871
7929
|
}]
|
|
7872
7930
|
};
|
|
7873
7931
|
}
|
|
@@ -10435,7 +10493,8 @@ const BindingsSchema = z.array(z.object({
|
|
|
10435
10493
|
id: z.string()
|
|
10436
10494
|
}).strict().optional(),
|
|
10437
10495
|
guildId: z.string().optional(),
|
|
10438
|
-
teamId: z.string().optional()
|
|
10496
|
+
teamId: z.string().optional(),
|
|
10497
|
+
roles: z.array(z.string()).optional()
|
|
10439
10498
|
}).strict()
|
|
10440
10499
|
}).strict()).optional();
|
|
10441
10500
|
const BroadcastStrategySchema = z.enum(["parallel", "sequential"]);
|
|
@@ -10924,6 +10983,9 @@ const OpenClawSchema = z.object({
|
|
|
10924
10983
|
enabled: z.boolean().optional(),
|
|
10925
10984
|
path: z.string().optional(),
|
|
10926
10985
|
token: z.string().optional(),
|
|
10986
|
+
defaultSessionKey: z.string().optional(),
|
|
10987
|
+
allowRequestSessionKey: z.boolean().optional(),
|
|
10988
|
+
allowedSessionKeyPrefixes: z.array(z.string()).optional(),
|
|
10927
10989
|
allowedAgentIds: z.array(z.string()).optional(),
|
|
10928
10990
|
maxBodyBytes: z.number().int().positive().optional(),
|
|
10929
10991
|
presets: z.array(z.string()).optional(),
|
|
@@ -11029,8 +11091,10 @@ const OpenClawSchema = z.object({
|
|
|
11029
11091
|
responses: z.object({
|
|
11030
11092
|
enabled: z.boolean().optional(),
|
|
11031
11093
|
maxBodyBytes: z.number().int().positive().optional(),
|
|
11094
|
+
maxUrlParts: z.number().int().nonnegative().optional(),
|
|
11032
11095
|
files: z.object({
|
|
11033
11096
|
allowUrl: z.boolean().optional(),
|
|
11097
|
+
urlAllowlist: z.array(z.string()).optional(),
|
|
11034
11098
|
allowedMimes: z.array(z.string()).optional(),
|
|
11035
11099
|
maxBytes: z.number().int().positive().optional(),
|
|
11036
11100
|
maxChars: z.number().int().positive().optional(),
|
|
@@ -11044,6 +11108,7 @@ const OpenClawSchema = z.object({
|
|
|
11044
11108
|
}).strict().optional(),
|
|
11045
11109
|
images: z.object({
|
|
11046
11110
|
allowUrl: z.boolean().optional(),
|
|
11111
|
+
urlAllowlist: z.array(z.string()).optional(),
|
|
11047
11112
|
allowedMimes: z.array(z.string()).optional(),
|
|
11048
11113
|
maxBytes: z.number().int().positive().optional(),
|
|
11049
11114
|
maxRedirects: z.number().int().nonnegative().optional(),
|
|
@@ -13248,6 +13313,22 @@ function normalizeHostnameSet(values) {
|
|
|
13248
13313
|
if (!values || values.length === 0) return /* @__PURE__ */ new Set();
|
|
13249
13314
|
return new Set(values.map((value) => normalizeHostname(value)).filter(Boolean));
|
|
13250
13315
|
}
|
|
13316
|
+
function normalizeHostnameAllowlist(values) {
|
|
13317
|
+
if (!values || values.length === 0) return [];
|
|
13318
|
+
return Array.from(new Set(values.map((value) => normalizeHostname(value)).filter((value) => value !== "*" && value !== "*." && value.length > 0)));
|
|
13319
|
+
}
|
|
13320
|
+
function isHostnameAllowedByPattern(hostname, pattern) {
|
|
13321
|
+
if (pattern.startsWith("*.")) {
|
|
13322
|
+
const suffix = pattern.slice(2);
|
|
13323
|
+
if (!suffix || hostname === suffix) return false;
|
|
13324
|
+
return hostname.endsWith(`.${suffix}`);
|
|
13325
|
+
}
|
|
13326
|
+
return hostname === pattern;
|
|
13327
|
+
}
|
|
13328
|
+
function matchesHostnameAllowlist(hostname, allowlist) {
|
|
13329
|
+
if (allowlist.length === 0) return true;
|
|
13330
|
+
return allowlist.some((pattern) => isHostnameAllowedByPattern(hostname, pattern));
|
|
13331
|
+
}
|
|
13251
13332
|
function parseIpv4(address) {
|
|
13252
13333
|
const parts = address.split(".");
|
|
13253
13334
|
if (parts.length !== 4) return null;
|
|
@@ -13348,7 +13429,10 @@ async function resolvePinnedHostnameWithPolicy(hostname, params = {}) {
|
|
|
13348
13429
|
const normalized = normalizeHostname(hostname);
|
|
13349
13430
|
if (!normalized) throw new Error("Invalid hostname");
|
|
13350
13431
|
const allowPrivateNetwork = Boolean(params.policy?.allowPrivateNetwork);
|
|
13351
|
-
const
|
|
13432
|
+
const allowedHostnames = normalizeHostnameSet(params.policy?.allowedHostnames);
|
|
13433
|
+
const hostnameAllowlist = normalizeHostnameAllowlist(params.policy?.hostnameAllowlist);
|
|
13434
|
+
const isExplicitAllowed = allowedHostnames.has(normalized);
|
|
13435
|
+
if (!matchesHostnameAllowlist(normalized, hostnameAllowlist)) throw new SsrFBlockedError(`Blocked hostname (not in allowlist): ${hostname}`);
|
|
13352
13436
|
if (!allowPrivateNetwork && !isExplicitAllowed) {
|
|
13353
13437
|
if (isBlockedHostname(normalized)) throw new SsrFBlockedError(`Blocked hostname: ${hostname}`);
|
|
13354
13438
|
if (isPrivateIpAddress(normalized)) throw new SsrFBlockedError("Blocked: private/internal IP address");
|
|
@@ -13369,9 +13453,6 @@ async function resolvePinnedHostnameWithPolicy(hostname, params = {}) {
|
|
|
13369
13453
|
})
|
|
13370
13454
|
};
|
|
13371
13455
|
}
|
|
13372
|
-
async function resolvePinnedHostname(hostname, lookupFn = lookup$1) {
|
|
13373
|
-
return await resolvePinnedHostnameWithPolicy(hostname, { lookupFn });
|
|
13374
|
-
}
|
|
13375
13456
|
function createPinnedDispatcher(pinned) {
|
|
13376
13457
|
return new Agent({ connect: { lookup: pinned.lookup } });
|
|
13377
13458
|
}
|
|
@@ -13541,10 +13622,10 @@ async function fetchWithSsrFGuard(params) {
|
|
|
13541
13622
|
}
|
|
13542
13623
|
let dispatcher = null;
|
|
13543
13624
|
try {
|
|
13544
|
-
const pinned =
|
|
13625
|
+
const pinned = await resolvePinnedHostnameWithPolicy(parsedUrl.hostname, {
|
|
13545
13626
|
lookupFn: params.lookupFn,
|
|
13546
13627
|
policy: params.policy
|
|
13547
|
-
})
|
|
13628
|
+
});
|
|
13548
13629
|
if (params.pinDns !== false) dispatcher = createPinnedDispatcher(pinned);
|
|
13549
13630
|
const init = {
|
|
13550
13631
|
...params.init ? { ...params.init } : {},
|
|
@@ -13581,6 +13662,7 @@ async function fetchWithSsrFGuard(params) {
|
|
|
13581
13662
|
release: async () => release(dispatcher)
|
|
13582
13663
|
};
|
|
13583
13664
|
} catch (err) {
|
|
13665
|
+
if (err instanceof SsrFBlockedError) logWarn(`security: blocked URL fetch (${params.auditContext ?? "url-fetch"}) target=${parsedUrl.origin}${parsedUrl.pathname} reason=${err.message}`);
|
|
13584
13666
|
await release(dispatcher);
|
|
13585
13667
|
throw err;
|
|
13586
13668
|
}
|
|
@@ -13960,6 +14042,8 @@ async function optimizeImageToJpeg(buffer, maxBytes, opts = {}) {
|
|
|
13960
14042
|
//#endregion
|
|
13961
14043
|
//#region src/discord/send.permissions.ts
|
|
13962
14044
|
const PERMISSION_ENTRIES = Object.entries(PermissionFlagsBits).filter(([, value]) => typeof value === "bigint");
|
|
14045
|
+
const ALL_PERMISSIONS = PERMISSION_ENTRIES.reduce((acc, [, value]) => acc | value, 0n);
|
|
14046
|
+
const ADMINISTRATOR_BIT = PermissionFlagsBits.Administrator;
|
|
13963
14047
|
|
|
13964
14048
|
//#endregion
|
|
13965
14049
|
//#region src/discord/send.types.ts
|
|
@@ -15318,6 +15402,14 @@ function buildDeviceAuthPayload(params) {
|
|
|
15318
15402
|
return base.join("|");
|
|
15319
15403
|
}
|
|
15320
15404
|
|
|
15405
|
+
//#endregion
|
|
15406
|
+
//#region src/sessions/input-provenance.ts
|
|
15407
|
+
const INPUT_PROVENANCE_KIND_VALUES = [
|
|
15408
|
+
"external_user",
|
|
15409
|
+
"inter_session",
|
|
15410
|
+
"internal_system"
|
|
15411
|
+
];
|
|
15412
|
+
|
|
15321
15413
|
//#endregion
|
|
15322
15414
|
//#region src/sessions/session-label.ts
|
|
15323
15415
|
const SESSION_LABEL_MAX_LENGTH = 64;
|
|
@@ -15389,6 +15481,12 @@ const AgentParamsSchema = Type.Object({
|
|
|
15389
15481
|
timeout: Type.Optional(Type.Integer({ minimum: 0 })),
|
|
15390
15482
|
lane: Type.Optional(Type.String()),
|
|
15391
15483
|
extraSystemPrompt: Type.Optional(Type.String()),
|
|
15484
|
+
inputProvenance: Type.Optional(Type.Object({
|
|
15485
|
+
kind: Type.String({ enum: [...INPUT_PROVENANCE_KIND_VALUES] }),
|
|
15486
|
+
sourceSessionKey: Type.Optional(Type.String()),
|
|
15487
|
+
sourceChannel: Type.Optional(Type.String()),
|
|
15488
|
+
sourceTool: Type.Optional(Type.String())
|
|
15489
|
+
}, { additionalProperties: false })),
|
|
15392
15490
|
idempotencyKey: NonEmptyString,
|
|
15393
15491
|
label: Type.Optional(SessionLabelString),
|
|
15394
15492
|
spawnedBy: Type.Optional(Type.String())
|
|
@@ -18264,6 +18362,18 @@ async function installSignalCli(runtime) {
|
|
|
18264
18362
|
//#endregion
|
|
18265
18363
|
//#region src/channels/plugins/onboarding/signal.ts
|
|
18266
18364
|
const channel$1 = "signal";
|
|
18365
|
+
const MIN_E164_DIGITS = 5;
|
|
18366
|
+
const MAX_E164_DIGITS = 15;
|
|
18367
|
+
const DIGITS_ONLY = /^\d+$/;
|
|
18368
|
+
const INVALID_SIGNAL_ACCOUNT_ERROR = "Invalid E.164 phone number (must start with + and country code, e.g. +15555550123)";
|
|
18369
|
+
function normalizeSignalAccountInput(value) {
|
|
18370
|
+
const trimmed = value?.trim();
|
|
18371
|
+
if (!trimmed) return null;
|
|
18372
|
+
const digits = normalizeE164(trimmed).slice(1);
|
|
18373
|
+
if (!DIGITS_ONLY.test(digits)) return null;
|
|
18374
|
+
if (digits.length < MIN_E164_DIGITS || digits.length > MAX_E164_DIGITS) return null;
|
|
18375
|
+
return `+${digits}`;
|
|
18376
|
+
}
|
|
18267
18377
|
function setSignalDmPolicy(cfg, dmPolicy) {
|
|
18268
18378
|
const allowFrom = dmPolicy === "open" ? addWildcardAllowFrom(cfg.channels?.signal?.allowFrom) : void 0;
|
|
18269
18379
|
return {
|
|
@@ -18417,15 +18527,22 @@ const signalOnboardingAdapter = {
|
|
|
18417
18527
|
if (!cliDetected) await prompter.note("signal-cli not found. Install it, then rerun this step or set channels.signal.cliPath.", "Signal");
|
|
18418
18528
|
let account = accountConfig.account ?? "";
|
|
18419
18529
|
if (account) {
|
|
18420
|
-
|
|
18421
|
-
|
|
18422
|
-
|
|
18423
|
-
|
|
18530
|
+
const normalizedExisting = normalizeSignalAccountInput(account);
|
|
18531
|
+
if (!normalizedExisting) {
|
|
18532
|
+
await prompter.note("Existing Signal account isn't a valid E.164 number. Please enter it again.", "Signal");
|
|
18533
|
+
account = "";
|
|
18534
|
+
} else {
|
|
18535
|
+
account = normalizedExisting;
|
|
18536
|
+
if (!await prompter.confirm({
|
|
18537
|
+
message: `Signal account set (${account}). Keep it?`,
|
|
18538
|
+
initialValue: true
|
|
18539
|
+
})) account = "";
|
|
18540
|
+
}
|
|
18424
18541
|
}
|
|
18425
|
-
if (!account) account = String(await prompter.text({
|
|
18542
|
+
if (!account) account = normalizeSignalAccountInput(String(await prompter.text({
|
|
18426
18543
|
message: "Signal bot number (E.164)",
|
|
18427
|
-
validate: (value) => value
|
|
18428
|
-
}))
|
|
18544
|
+
validate: (value) => normalizeSignalAccountInput(String(value ?? "")) ? void 0 : INVALID_SIGNAL_ACCOUNT_ERROR
|
|
18545
|
+
}))) ?? "";
|
|
18429
18546
|
if (account) if (signalAccountId === DEFAULT_ACCOUNT_ID) next = {
|
|
18430
18547
|
...next,
|
|
18431
18548
|
channels: {
|
|
@@ -18674,6 +18791,61 @@ const SANDBOX_STATE_DIR = path.join(STATE_DIR, "sandbox");
|
|
|
18674
18791
|
const SANDBOX_REGISTRY_PATH = path.join(SANDBOX_STATE_DIR, "containers.json");
|
|
18675
18792
|
const SANDBOX_BROWSER_REGISTRY_PATH = path.join(SANDBOX_STATE_DIR, "browsers.json");
|
|
18676
18793
|
|
|
18794
|
+
//#endregion
|
|
18795
|
+
//#region src/agents/sandbox-paths.ts
|
|
18796
|
+
const UNICODE_SPACES = /[\u00A0\u2000-\u200A\u202F\u205F\u3000]/g;
|
|
18797
|
+
function normalizeUnicodeSpaces(str) {
|
|
18798
|
+
return str.replace(UNICODE_SPACES, " ");
|
|
18799
|
+
}
|
|
18800
|
+
function expandPath(filePath) {
|
|
18801
|
+
const normalized = normalizeUnicodeSpaces(filePath);
|
|
18802
|
+
if (normalized === "~") return os.homedir();
|
|
18803
|
+
if (normalized.startsWith("~/")) return os.homedir() + normalized.slice(1);
|
|
18804
|
+
return normalized;
|
|
18805
|
+
}
|
|
18806
|
+
function resolveToCwd(filePath, cwd) {
|
|
18807
|
+
const expanded = expandPath(filePath);
|
|
18808
|
+
if (path.isAbsolute(expanded)) return expanded;
|
|
18809
|
+
return path.resolve(cwd, expanded);
|
|
18810
|
+
}
|
|
18811
|
+
function resolveSandboxPath(params) {
|
|
18812
|
+
const resolved = resolveToCwd(params.filePath, params.cwd);
|
|
18813
|
+
const rootResolved = path.resolve(params.root);
|
|
18814
|
+
const relative = path.relative(rootResolved, resolved);
|
|
18815
|
+
if (!relative || relative === "") return {
|
|
18816
|
+
resolved,
|
|
18817
|
+
relative: ""
|
|
18818
|
+
};
|
|
18819
|
+
if (relative.startsWith("..") || path.isAbsolute(relative)) throw new Error(`Path escapes sandbox root (${shortPath(rootResolved)}): ${params.filePath}`);
|
|
18820
|
+
return {
|
|
18821
|
+
resolved,
|
|
18822
|
+
relative
|
|
18823
|
+
};
|
|
18824
|
+
}
|
|
18825
|
+
async function assertSandboxPath(params) {
|
|
18826
|
+
const resolved = resolveSandboxPath(params);
|
|
18827
|
+
await assertNoSymlink(resolved.relative, path.resolve(params.root));
|
|
18828
|
+
return resolved;
|
|
18829
|
+
}
|
|
18830
|
+
async function assertNoSymlink(relative, root) {
|
|
18831
|
+
if (!relative) return;
|
|
18832
|
+
const parts = relative.split(path.sep).filter(Boolean);
|
|
18833
|
+
let current = root;
|
|
18834
|
+
for (const part of parts) {
|
|
18835
|
+
current = path.join(current, part);
|
|
18836
|
+
try {
|
|
18837
|
+
if ((await fs$1.lstat(current)).isSymbolicLink()) throw new Error(`Symlink not allowed in sandbox path: ${current}`);
|
|
18838
|
+
} catch (err) {
|
|
18839
|
+
if (err.code === "ENOENT") return;
|
|
18840
|
+
throw err;
|
|
18841
|
+
}
|
|
18842
|
+
}
|
|
18843
|
+
}
|
|
18844
|
+
function shortPath(value) {
|
|
18845
|
+
if (value.startsWith(os.homedir())) return `~${value.slice(os.homedir().length)}`;
|
|
18846
|
+
return value;
|
|
18847
|
+
}
|
|
18848
|
+
|
|
18677
18849
|
//#endregion
|
|
18678
18850
|
//#region src/agents/skills/plugin-skills.ts
|
|
18679
18851
|
const log$17 = createSubsystemLogger("skills");
|
|
@@ -18695,6 +18867,10 @@ const SELECTOR_UNSUPPORTED_MESSAGE = [
|
|
|
18695
18867
|
"This is more reliable for modern SPAs."
|
|
18696
18868
|
].join("\n");
|
|
18697
18869
|
|
|
18870
|
+
//#endregion
|
|
18871
|
+
//#region src/browser/routes/agent.debug.ts
|
|
18872
|
+
const DEFAULT_TRACE_DIR = resolvePreferredOpenClawTmpDir();
|
|
18873
|
+
|
|
18698
18874
|
//#endregion
|
|
18699
18875
|
//#region src/browser/screenshot.ts
|
|
18700
18876
|
const DEFAULT_BROWSER_SCREENSHOT_MAX_BYTES = 5 * 1024 * 1024;
|
|
@@ -18726,11 +18902,80 @@ function isContextOverflowError(errorMessage) {
|
|
|
18726
18902
|
const hasContextWindow = lower.includes("context window") || lower.includes("context length") || lower.includes("maximum context length");
|
|
18727
18903
|
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");
|
|
18728
18904
|
}
|
|
18905
|
+
const CONTEXT_WINDOW_TOO_SMALL_RE = /context window.*(too small|minimum is)/i;
|
|
18906
|
+
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;
|
|
18907
|
+
const RATE_LIMIT_HINT_RE = /rate limit|too many requests|requests per (?:minute|hour|day)|quota|throttl|429\b/i;
|
|
18908
|
+
function isLikelyContextOverflowError(errorMessage) {
|
|
18909
|
+
if (!errorMessage) return false;
|
|
18910
|
+
if (CONTEXT_WINDOW_TOO_SMALL_RE.test(errorMessage)) return false;
|
|
18911
|
+
if (isRateLimitErrorMessage(errorMessage)) return false;
|
|
18912
|
+
if (isContextOverflowError(errorMessage)) return true;
|
|
18913
|
+
if (RATE_LIMIT_HINT_RE.test(errorMessage)) return false;
|
|
18914
|
+
return CONTEXT_OVERFLOW_HINT_RE.test(errorMessage);
|
|
18915
|
+
}
|
|
18729
18916
|
function isCompactionFailureError(errorMessage) {
|
|
18730
18917
|
if (!errorMessage) return false;
|
|
18731
18918
|
const lower = errorMessage.toLowerCase();
|
|
18732
18919
|
if (!(lower.includes("summarization failed") || lower.includes("auto-compaction") || lower.includes("compaction failed") || lower.includes("compaction"))) return false;
|
|
18733
|
-
|
|
18920
|
+
if (isLikelyContextOverflowError(errorMessage)) return true;
|
|
18921
|
+
return lower.includes("context overflow");
|
|
18922
|
+
}
|
|
18923
|
+
const ERROR_PATTERNS = {
|
|
18924
|
+
rateLimit: [
|
|
18925
|
+
/rate[_ ]limit|too many requests|429/,
|
|
18926
|
+
"exceeded your current quota",
|
|
18927
|
+
"resource has been exhausted",
|
|
18928
|
+
"quota exceeded",
|
|
18929
|
+
"resource_exhausted",
|
|
18930
|
+
"usage limit"
|
|
18931
|
+
],
|
|
18932
|
+
overloaded: [/overloaded_error|"type"\s*:\s*"overloaded_error"/i, "overloaded"],
|
|
18933
|
+
timeout: [
|
|
18934
|
+
"timeout",
|
|
18935
|
+
"timed out",
|
|
18936
|
+
"deadline exceeded",
|
|
18937
|
+
"context deadline exceeded"
|
|
18938
|
+
],
|
|
18939
|
+
billing: [
|
|
18940
|
+
/["']?(?:status|code)["']?\s*[:=]\s*402\b|\bhttp\s*402\b|\berror(?:\s+code)?\s*[:=]?\s*402\b|\b(?:got|returned|received)\s+(?:a\s+)?402\b|^\s*402\s+payment/i,
|
|
18941
|
+
"payment required",
|
|
18942
|
+
"insufficient credits",
|
|
18943
|
+
"credit balance",
|
|
18944
|
+
"plans & billing",
|
|
18945
|
+
"insufficient balance"
|
|
18946
|
+
],
|
|
18947
|
+
auth: [
|
|
18948
|
+
/invalid[_ ]?api[_ ]?key/,
|
|
18949
|
+
"incorrect api key",
|
|
18950
|
+
"invalid token",
|
|
18951
|
+
"authentication",
|
|
18952
|
+
"re-authenticate",
|
|
18953
|
+
"oauth token refresh failed",
|
|
18954
|
+
"unauthorized",
|
|
18955
|
+
"forbidden",
|
|
18956
|
+
"access denied",
|
|
18957
|
+
"expired",
|
|
18958
|
+
"token has expired",
|
|
18959
|
+
/\b401\b/,
|
|
18960
|
+
/\b403\b/,
|
|
18961
|
+
"no credentials found",
|
|
18962
|
+
"no api key found"
|
|
18963
|
+
],
|
|
18964
|
+
format: [
|
|
18965
|
+
"string should match pattern",
|
|
18966
|
+
"tool_use.id",
|
|
18967
|
+
"tool_use_id",
|
|
18968
|
+
"messages.1.content.1.tool_use.id",
|
|
18969
|
+
"invalid request format"
|
|
18970
|
+
]
|
|
18971
|
+
};
|
|
18972
|
+
function matchesErrorPatterns(raw, patterns) {
|
|
18973
|
+
if (!raw) return false;
|
|
18974
|
+
const value = raw.toLowerCase();
|
|
18975
|
+
return patterns.some((pattern) => pattern instanceof RegExp ? pattern.test(value) : value.includes(pattern));
|
|
18976
|
+
}
|
|
18977
|
+
function isRateLimitErrorMessage(raw) {
|
|
18978
|
+
return matchesErrorPatterns(raw, ERROR_PATTERNS.rateLimit);
|
|
18734
18979
|
}
|
|
18735
18980
|
|
|
18736
18981
|
//#endregion
|
|
@@ -20340,6 +20585,10 @@ const discordEventQueueLog = createSubsystemLogger("discord/event-queue");
|
|
|
20340
20585
|
//#region src/pairing/pairing-store.ts
|
|
20341
20586
|
const PAIRING_PENDING_TTL_MS = 3600 * 1e3;
|
|
20342
20587
|
|
|
20588
|
+
//#endregion
|
|
20589
|
+
//#region src/discord/monitor/threading.ts
|
|
20590
|
+
const DISCORD_THREAD_STARTER_CACHE_TTL_MS = 300 * 1e3;
|
|
20591
|
+
|
|
20343
20592
|
//#endregion
|
|
20344
20593
|
//#region src/security/external-content.ts
|
|
20345
20594
|
/**
|
|
@@ -20367,6 +20616,7 @@ const EXTERNAL_SOURCE_LABELS = {
|
|
|
20367
20616
|
email: "Email",
|
|
20368
20617
|
webhook: "Webhook",
|
|
20369
20618
|
api: "API",
|
|
20619
|
+
browser: "Browser",
|
|
20370
20620
|
channel_metadata: "Channel metadata",
|
|
20371
20621
|
web_search: "Web Search",
|
|
20372
20622
|
web_fetch: "Web Fetch",
|
|
@@ -20832,61 +21082,6 @@ async function loginWeb(verbose, waitForConnection, runtime = defaultRuntime, ac
|
|
|
20832
21082
|
//#region src/plugins/tools.ts
|
|
20833
21083
|
const log$6 = createSubsystemLogger("plugins");
|
|
20834
21084
|
|
|
20835
|
-
//#endregion
|
|
20836
|
-
//#region src/agents/sandbox-paths.ts
|
|
20837
|
-
const UNICODE_SPACES = /[\u00A0\u2000-\u200A\u202F\u205F\u3000]/g;
|
|
20838
|
-
function normalizeUnicodeSpaces(str) {
|
|
20839
|
-
return str.replace(UNICODE_SPACES, " ");
|
|
20840
|
-
}
|
|
20841
|
-
function expandPath(filePath) {
|
|
20842
|
-
const normalized = normalizeUnicodeSpaces(filePath);
|
|
20843
|
-
if (normalized === "~") return os.homedir();
|
|
20844
|
-
if (normalized.startsWith("~/")) return os.homedir() + normalized.slice(1);
|
|
20845
|
-
return normalized;
|
|
20846
|
-
}
|
|
20847
|
-
function resolveToCwd(filePath, cwd) {
|
|
20848
|
-
const expanded = expandPath(filePath);
|
|
20849
|
-
if (path.isAbsolute(expanded)) return expanded;
|
|
20850
|
-
return path.resolve(cwd, expanded);
|
|
20851
|
-
}
|
|
20852
|
-
function resolveSandboxPath(params) {
|
|
20853
|
-
const resolved = resolveToCwd(params.filePath, params.cwd);
|
|
20854
|
-
const rootResolved = path.resolve(params.root);
|
|
20855
|
-
const relative = path.relative(rootResolved, resolved);
|
|
20856
|
-
if (!relative || relative === "") return {
|
|
20857
|
-
resolved,
|
|
20858
|
-
relative: ""
|
|
20859
|
-
};
|
|
20860
|
-
if (relative.startsWith("..") || path.isAbsolute(relative)) throw new Error(`Path escapes sandbox root (${shortPath(rootResolved)}): ${params.filePath}`);
|
|
20861
|
-
return {
|
|
20862
|
-
resolved,
|
|
20863
|
-
relative
|
|
20864
|
-
};
|
|
20865
|
-
}
|
|
20866
|
-
async function assertSandboxPath(params) {
|
|
20867
|
-
const resolved = resolveSandboxPath(params);
|
|
20868
|
-
await assertNoSymlink(resolved.relative, path.resolve(params.root));
|
|
20869
|
-
return resolved;
|
|
20870
|
-
}
|
|
20871
|
-
async function assertNoSymlink(relative, root) {
|
|
20872
|
-
if (!relative) return;
|
|
20873
|
-
const parts = relative.split(path.sep).filter(Boolean);
|
|
20874
|
-
let current = root;
|
|
20875
|
-
for (const part of parts) {
|
|
20876
|
-
current = path.join(current, part);
|
|
20877
|
-
try {
|
|
20878
|
-
if ((await fs$1.lstat(current)).isSymbolicLink()) throw new Error(`Symlink not allowed in sandbox path: ${current}`);
|
|
20879
|
-
} catch (err) {
|
|
20880
|
-
if (err.code === "ENOENT") return;
|
|
20881
|
-
throw err;
|
|
20882
|
-
}
|
|
20883
|
-
}
|
|
20884
|
-
}
|
|
20885
|
-
function shortPath(value) {
|
|
20886
|
-
if (value.startsWith(os.homedir())) return `~${value.slice(os.homedir().length)}`;
|
|
20887
|
-
return value;
|
|
20888
|
-
}
|
|
20889
|
-
|
|
20890
21085
|
//#endregion
|
|
20891
21086
|
//#region src/agents/apply-patch.ts
|
|
20892
21087
|
const applyPatchSchema = Type.Object({ input: Type.String({ description: "Patch content using the *** Begin Patch/End Patch format." }) });
|
|
@@ -24965,6 +25160,7 @@ const log = createSubsystemLogger("agent/claude-cli");
|
|
|
24965
25160
|
const DEFAULT_MEMORY_FLUSH_PROMPT = [
|
|
24966
25161
|
"Pre-compaction memory flush.",
|
|
24967
25162
|
"Store durable memories now (use memory/YYYY-MM-DD.md; create memory/ if needed).",
|
|
25163
|
+
"IMPORTANT: If the file already exists, APPEND new content only and do not overwrite existing entries.",
|
|
24968
25164
|
`If nothing to store, reply with ${SILENT_REPLY_TOKEN}.`
|
|
24969
25165
|
].join(" ");
|
|
24970
25166
|
const DEFAULT_MEMORY_FLUSH_SYSTEM_PROMPT = [
|
|
@@ -8,6 +8,7 @@ export type LookupFn = typeof dnsLookup;
|
|
|
8
8
|
export type SsrFPolicy = {
|
|
9
9
|
allowPrivateNetwork?: boolean;
|
|
10
10
|
allowedHostnames?: string[];
|
|
11
|
+
hostnameAllowlist?: string[];
|
|
11
12
|
};
|
|
12
13
|
export declare function isPrivateIpAddress(address: string): boolean;
|
|
13
14
|
export declare function isBlockedHostname(hostname: string): boolean;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { promptYesNo } from "../cli/prompt.js";
|
|
2
|
+
import { runExec } from "../process/exec.js";
|
|
3
|
+
import { type RuntimeEnv } from "../runtime.js";
|
|
4
|
+
/**
|
|
5
|
+
* Locate Tailscale binary using multiple strategies:
|
|
6
|
+
* 1. PATH lookup (via which command)
|
|
7
|
+
* 2. Known macOS app path
|
|
8
|
+
* 3. find /Applications for Tailscale.app
|
|
9
|
+
* 4. locate database (if available)
|
|
10
|
+
*
|
|
11
|
+
* @returns Path to Tailscale binary or null if not found
|
|
12
|
+
*/
|
|
13
|
+
export declare function findTailscaleBinary(): Promise<string | null>;
|
|
14
|
+
export declare function getTailnetHostname(exec?: typeof runExec, detectedBinary?: string): Promise<string>;
|
|
15
|
+
export declare function getTailscaleBinary(): Promise<string>;
|
|
16
|
+
export declare function readTailscaleStatusJson(exec?: typeof runExec, opts?: {
|
|
17
|
+
timeoutMs?: number;
|
|
18
|
+
}): Promise<Record<string, unknown>>;
|
|
19
|
+
export declare function ensureGoInstalled(exec?: typeof runExec, prompt?: typeof promptYesNo, runtime?: RuntimeEnv): Promise<void>;
|
|
20
|
+
export declare function ensureTailscaledInstalled(exec?: typeof runExec, prompt?: typeof promptYesNo, runtime?: RuntimeEnv): Promise<void>;
|
|
21
|
+
export type TailscaleWhoisIdentity = {
|
|
22
|
+
login: string;
|
|
23
|
+
name?: string;
|
|
24
|
+
};
|
|
25
|
+
export declare function ensureFunnel(port: number, exec?: typeof runExec, runtime?: RuntimeEnv, prompt?: typeof promptYesNo): Promise<void>;
|
|
26
|
+
export declare function enableTailscaleServe(port: number, exec?: typeof runExec): Promise<void>;
|
|
27
|
+
export declare function disableTailscaleServe(exec?: typeof runExec): Promise<void>;
|
|
28
|
+
export declare function enableTailscaleFunnel(port: number, exec?: typeof runExec): Promise<void>;
|
|
29
|
+
export declare function disableTailscaleFunnel(exec?: typeof runExec): Promise<void>;
|
|
30
|
+
export declare function readTailscaleWhoisIdentity(ip: string, exec?: typeof runExec, opts?: {
|
|
31
|
+
timeoutMs?: number;
|
|
32
|
+
cacheTtlMs?: number;
|
|
33
|
+
errorTtlMs?: number;
|
|
34
|
+
}): Promise<TailscaleWhoisIdentity | null>;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare const POSIX_OPENCLAW_TMP_DIR = "/tmp/openclaw";
|
|
2
|
+
type ResolvePreferredOpenClawTmpDirOptions = {
|
|
3
|
+
accessSync?: (path: string, mode?: number) => void;
|
|
4
|
+
statSync?: (path: string) => {
|
|
5
|
+
isDirectory(): boolean;
|
|
6
|
+
};
|
|
7
|
+
tmpdir?: () => string;
|
|
8
|
+
};
|
|
9
|
+
export declare function resolvePreferredOpenClawTmpDir(options?: ResolvePreferredOpenClawTmpDirOptions): string;
|
|
10
|
+
export {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Logger as TsLogger } from "tslog";
|
|
2
2
|
import type { ConsoleStyle } from "./console.js";
|
|
3
3
|
import { type LogLevel } from "./levels.js";
|
|
4
|
-
export declare const DEFAULT_LOG_DIR
|
|
4
|
+
export declare const DEFAULT_LOG_DIR: string;
|
|
5
5
|
export declare const DEFAULT_LOG_FILE: string;
|
|
6
6
|
export type LoggerSettings = {
|
|
7
7
|
level?: LogLevel;
|