@gguf/claw 2026.2.9 → 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 +159 -0
- package/LICENSE +1 -1
- package/dist/{accounts-MyAvfCVH.js → accounts-54zZMYCo.js} +5 -2
- package/dist/{accounts-DbzMEfKN.js → accounts-Bvh0DFxS.js} +5 -2
- package/dist/{acp-cli-MZ3h1E1n.js → acp-cli-BslcOPdx.js} +146 -25
- package/dist/{acp-cli-DKJRTfwB.js → acp-cli-D6rk5cOh.js} +145 -24
- package/dist/{agent-whSJT2Lk.js → agent-C0yL70cy.js} +26 -20
- package/dist/{agent-c1QNeDmV.js → agent-DjZxytiC.js} +26 -20
- package/dist/{agent-scope-D3me2AZa.js → agent-scope-Bkr9fZtl.js} +31 -14
- package/dist/{agent-scope-Dp8sREli.js → agent-scope-DASgjz2_.js} +199 -14
- package/dist/{agent-scope-DnyDZ5RH.js → agent-scope-GYIs5dyU.js} +30 -13
- package/dist/{agent-scope-Dpav7C-i.js → agent-scope-okUOVjE5.js} +32 -11
- package/dist/audio-preflight-B0kLz-Ma.js +60 -0
- package/dist/audio-preflight-BCs_J33s.js +60 -0
- package/dist/audio-preflight-CTl2RCyF.js +71 -0
- package/dist/audio-preflight-MhF6YlAY.js +74 -0
- package/dist/{audit-BFYy1qSw.js → audit-BYfhZ7LA.js} +454 -31
- package/dist/{audit-Dn2cBl2x.js → audit-CfPZ_5Id.js} +452 -29
- package/dist/auth-9nTeB2Je.js +602 -0
- package/dist/auth-CLhyWwAU.js +593 -0
- package/dist/{auth-health-Cx5exPMV.js → auth-health-CWiLyzSr.js} +1 -1
- package/dist/{auth-health-DjT4fUpw.js → auth-health-qD4RND47.js} +1 -1
- package/dist/{auth-profiles-FJ3VY25a.js → auth-profiles-Cp9MtUdM.js} +353 -33
- package/dist/build-info.json +2 -2
- package/dist/bundled/boot-md/handler.js +33 -25
- package/dist/bundled/session-memory/handler.js +33 -22
- package/dist/{call-CD2IZCHT.js → call-CjEdFGAf.js} +7 -7
- package/dist/{call-CM25qgxz.js → call-DAfkvtVq.js} +6 -6
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/canvas-host/a2ui/a2ui.bundle.js +7 -1
- package/dist/{channel-options-CremuJyh.js → channel-options-B8dPzlyO.js} +4 -4
- package/dist/{channel-options-D-JnJ4Ft.js → channel-options-Bq5IC5Tv.js} +12 -7
- package/dist/{channel-selection-DAHCVAX4.js → channel-selection-BaW1xXEa.js} +2 -2
- package/dist/{channel-selection-DPV9hvY8.js → channel-selection-dR0jCgTn.js} +2 -2
- package/dist/{channels-cli-6deHFr9t.js → channels-cli-hPo28hWS.js} +61 -56
- package/dist/{channels-cli-D3tKmhlt.js → channels-cli-zi3rO0jq.js} +62 -57
- package/dist/{channels-status-issues-BN1ICfdy.js → channels-status-issues-kb-M2Fi0.js} +1 -1
- package/dist/{channels-status-issues-DFhI_u0p.js → channels-status-issues-ketdwZun.js} +1 -1
- package/dist/{chrome-B2UjqY-9.js → chrome--Fe8F5Kf.js} +24 -12
- package/dist/{chrome-COabMr6f.js → chrome-BWeMtFGf.js} +24 -12
- package/dist/{chrome-CQd_MVOA.js → chrome-Bx24uq7B.js} +27 -15
- package/dist/{chrome-CxRJz4ZD.js → chrome-n_3rtK2c.js} +22 -11
- package/dist/{clack-prompter-BkNZ4Xdw.js → clack-prompter-B-tJmODa.js} +5 -5
- package/dist/{clack-prompter-DuBVnTKy.js → clack-prompter-DpuKn_Uy.js} +5 -5
- package/dist/cli/daemon-cli.js +8 -1
- package/dist/cli-9lwO6Ttx.js +94 -0
- package/dist/cli-CNNdyxPO.js +91 -0
- package/dist/{client-DMloFP_O.js → client-BhZjzrH2.js} +73 -9
- package/dist/{client-C0gQ7hrj.js → client-DyAxKXKY.js} +73 -9
- package/dist/{command-format-ayFsmwwz.js → command-format-Bxe0mWee.js} +1 -1
- package/dist/{command-options-BQdH6qnK.js → command-options-BDV7Xgs-.js} +9 -4
- package/dist/{commands-BWHYcc83.js → commands-gOiRcfoU.js} +4 -4
- package/dist/{tui-formatters-BDP_71Xt.js → commands-registry-6NUFrejL.js} +6 -114
- package/dist/{tui-formatters-CIx4sCQO.js → commands-registry-DGgkLQ7A.js} +6 -114
- package/dist/{completion-cli-DEJia0V1.js → completion-cli-B1kHKJZX.js} +30 -30
- package/dist/{completion-cli-D_0fx2O6.js → completion-cli-Drks7xRK.js} +3 -3
- package/dist/{config-CQt4vGxI.js → config-7NCznPmF.js} +336 -97
- package/dist/{config-fCnPoWjU.js → config-B8v0zg48.js} +295 -99
- package/dist/{config-Bj2eDa02.js → config-CeWMHOiQ.js} +295 -99
- package/dist/{config-ethqi73X.js → config-D8pgDSNo.js} +358 -99
- package/dist/{config-guard-BJuqQvng.js → config-guard-RbHxYc9j.js} +212 -63
- package/dist/{configure-skrLiSwW.js → configure-DLp2Xz7L.js} +59 -40
- package/dist/{configure-C-pYuYg_.js → configure-Su1S0gi-.js} +58 -39
- package/dist/control-auth-BlWU-jBl.js +54 -0
- package/dist/control-auth-C8rIqEdA.js +54 -0
- package/dist/{control-service-BDgF-FZ0.js → control-service-BNDthc1N.js} +11 -5
- package/dist/{control-service-Djd_WI3_.js → control-service-COF59GQe.js} +10 -4
- package/dist/control-ui/assets/{index-CnB9IO4a.js → index-BECn2L1T.js} +369 -368
- package/dist/control-ui/assets/index-BECn2L1T.js.map +1 -0
- package/dist/control-ui/assets/index-DRPcd1Z4.css +1 -0
- package/dist/control-ui/index.html +2 -2
- package/dist/{cron-cli-CB6CufAb.js → cron-cli-CSy4-JGS.js} +20 -20
- package/dist/{cron-cli-Db6fardJ.js → cron-cli-Db3uCDIT.js} +21 -21
- package/dist/{daemon-cli-Xe22v7lZ.js → daemon-cli-BLbzcTuD.js} +61 -22
- package/dist/{daemon-cli-BlHK0ly2.js → daemon-cli-DR0D35MO.js} +60 -21
- package/dist/{daemon-runtime-CMqH8BUE.js → daemon-runtime-ZWXvLDxx.js} +3 -3
- package/dist/{daemon-runtime-DwQFvDXZ.js → daemon-runtime-pVcZ2KDE.js} +3 -3
- package/dist/{deliver-CD7-BhYD.js → deliver-BHNoC9Yk.js} +396 -290
- package/dist/{deliver-BdGjIcTC.js → deliver-C_5eGQrX.js} +392 -286
- package/dist/{deliver-nTKaXF--.js → deliver-DPHZlWgr.js} +392 -287
- package/dist/{deliver-CDMGxRoW.js → deliver-geVWJ52I.js} +394 -288
- package/dist/{deps-BDQ_K8zf.js → deps-CP0dcOgD.js} +2 -2
- package/dist/{deps-D60FbgTP.js → deps-DW5r2IEk.js} +2 -2
- package/dist/{devices-cli-N559801X.js → devices-cli-BViqX5pl.js} +15 -15
- package/dist/{devices-cli-IxmPLIk8.js → devices-cli-DpYaY-iM.js} +14 -14
- package/dist/{directory-cli-Caq-OYk8.js → directory-cli-BWD1DdKf.js} +16 -16
- package/dist/{directory-cli-ClrdmQL-.js → directory-cli-BcvZfkfo.js} +17 -17
- package/dist/{dispatcher-BfXtm4Dl.js → dispatcher-4Qn951N3.js} +5 -3
- package/dist/{dns-cli-DgVO0Pkw.js → dns-cli-_Ych2tu9.js} +12 -12
- package/dist/{dns-cli-BTNZkWHs.js → dns-cli-gQCxUXgU.js} +13 -13
- package/dist/{docs-cli-9Xan7C6D.js → docs-cli-Bseiau7J.js} +7 -7
- package/dist/{docs-cli-DZULc91f.js → docs-cli-DzBTlWQE.js} +8 -8
- package/dist/{doctor-D39rZvNH.js → doctor-BNkYYahD.js} +37 -36
- package/dist/{doctor-Dq1YeYdH.js → doctor-DzIgdPx1.js} +37 -36
- package/dist/entry.js +77 -21
- package/dist/{env-B5YXooWp.js → env-BUuSkE19.js} +1 -1
- package/dist/{exec-DFOtZbI0.js → exec-BPQSKwGa.js} +5 -3
- package/dist/{exec-B8JKbXKW.js → exec-DqZFMawz.js} +5 -3
- package/dist/{exec-Bas1hoSJ.js → exec-EKUaAU91.js} +57 -18
- package/dist/{exec-CiH_vkWn.js → exec-_PSUrMP8.js} +528 -19
- package/dist/{exec-approvals-DGPTjO0N.js → exec-approvals-Bqk-tIxY.js} +134 -51
- package/dist/{exec-approvals-C9InMoAB.js → exec-approvals-C67V-ljH.js} +134 -51
- package/dist/{exec-approvals-cli-EASbqFd-.js → exec-approvals-cli-D6vfSqQu.js} +22 -22
- package/dist/{exec-approvals-cli-DPHItoxG.js → exec-approvals-cli-DAdoki_R.js} +21 -21
- package/dist/extensionAPI.js +8518 -9140
- package/dist/fetch-Bz1WxfzV.js +285 -0
- package/dist/fetch-D2O8s8I1.js +285 -0
- package/dist/fetch-Dm-nCwa_.js +285 -0
- package/dist/fetch-wuOZDzdT.js +285 -0
- package/dist/{gateway-cli-BFqUIif8.js → gateway-cli-C-k7JPlr.js} +1868 -1072
- package/dist/{gateway-cli-v4kSPsLE.js → gateway-cli-DIIJ9Z0Y.js} +1870 -1074
- package/dist/{gateway-rpc-D6LrkcSA.js → gateway-rpc-D6jLh81b.js} +3 -3
- package/dist/{gateway-rpc-dHFK02Kk.js → gateway-rpc-aqysUyf5.js} +3 -3
- package/dist/{github-copilot-auth-CQIWc0hC.js → github-copilot-auth-BUqfX7hG.js} +316 -52
- package/dist/{github-copilot-auth-D2jfnapd.js → github-copilot-auth-By-nyRb6.js} +316 -52
- package/dist/{github-copilot-token-SLWintYd.js → github-copilot-token-C9W4SY9o.js} +7 -4
- package/dist/{github-copilot-token-BW-SEg7E.js → github-copilot-token-CiF5Iyi2.js} +6 -3
- package/dist/{github-copilot-token-C9IJh2Pn.js → github-copilot-token-DatTe1w-.js} +6 -3
- package/dist/{github-copilot-token-wCk9Fg_E.js → github-copilot-token-c9Igt3ZH.js} +6 -3
- package/dist/{gmail-setup-utils-CVNgLkXL.js → gmail-setup-utils-HvKMdooP.js} +4 -4
- package/dist/{gmail-setup-utils-CAM1vbUS.js → gmail-setup-utils-c-iF00aL.js} +3 -3
- package/dist/{health-format-C77hrjEQ.js → health-format-BORnJOeS.js} +106 -44
- package/dist/{health-format-DDYtlkB9.js → health-format-Nd0jcoqM.js} +105 -43
- package/dist/{help-format-CUnac_bT.js → help-format-Cd5PLwXe.js} +1 -1
- package/dist/{help-format-aiW76js8.js → help-format-DYBEvMOX.js} +1 -1
- package/dist/{hooks-cli-DsflBRxX.js → hooks-cli-3KdsbdRi.js} +53 -47
- package/dist/{hooks-cli-C7kctMuZ.js → hooks-cli-BThja6wK.js} +53 -47
- package/dist/{hooks-status-DRAVHSPg.js → hooks-status-BbIz0zmm.js} +6 -5
- package/dist/{hooks-status-lHWrY64E.js → hooks-status-DPJORMB6.js} +6 -5
- package/dist/{image--gbzucyh.js → image-BaJKrmCs.js} +12 -8
- package/dist/{image-ORs4LLwg.js → image-D-5pUELC.js} +13 -9
- package/dist/{image-DMnjYGdA.js → image-TvL5YI_W.js} +13 -9
- package/dist/{image-BVNytEIn.js → image-bodq5cUH.js} +13 -9
- package/dist/index.js +261 -109
- package/dist/{installs-CXGV291R.js → installs-BrOMqREO.js} +7 -6
- package/dist/{installs-89zeUsVn.js → installs-z69au9Te.js} +7 -6
- package/dist/{links-Dg90NTyF.js → links-AVB88xxH.js} +1 -1
- package/dist/{links-7M-j83As.js → links-DpxpaKe1.js} +1 -1
- package/dist/llm-slug-generator.js +18 -19
- package/dist/{loader-BnzQyT31.js → loader-CS-5lMQa.js} +3694 -4531
- package/dist/{logging-DuK6YXuK.js → logging-B3KnAryz.js} +2 -2
- package/dist/{logging-CNq0UUgf.js → logging-DEPo2hji.js} +1 -1
- package/dist/{login-qr-CJ__cE3-.js → login-qr--28WL1TN.js} +11 -5
- package/dist/{login-qr-BVeOFfNW.js → login-qr-4o2aC2UE.js} +9 -4
- package/dist/{login-qr-BJChByHH.js → login-qr-BUdeu1Sl.js} +8 -2
- package/dist/{login-qr-KUOtNJaQ.js → login-qr-BsYM2E1y.js} +12 -6
- package/dist/{logs-cli-Cm7AiarR.js → logs-cli-DDMD5w5_.js} +38 -22
- package/dist/{logs-cli-BWmtAsjp.js → logs-cli-DvPoVKCN.js} +38 -22
- package/dist/{manager-C-jXr9ks.js → manager-CXo1uqmO.js} +102 -86
- package/dist/{manager-CMFBuvVd.js → manager-ChW0jk7T.js} +101 -85
- package/dist/{manager-D2Ndphg3.js → manager-DUOe7ud6.js} +100 -85
- package/dist/{manager-BsdlwsL5.js → manager-PoxUqdN_.js} +98 -82
- package/dist/{manifest-registry-D5SiA3xq.js → manifest-registry-CVsqjgX0.js} +40 -2
- package/dist/{manifest-registry-DyMRD3rY.js → manifest-registry-jeAPx6AW.js} +40 -2
- package/dist/{message-channel-CHRYQtAM.js → message-channel-CTtrEkmW.js} +1 -1
- package/dist/{message-channel-BlgPSDAh.js → message-channel-DWcu72r7.js} +1 -1
- package/dist/{model-auth-BqjMkNFs.js → model-auth-BvODRbV0.js} +362 -35
- package/dist/{model-selection-DbsbOAoh.js → model-selection-B53OvWCf.js} +353 -33
- package/dist/{model-selection-DlV6wnTr.js → model-selection-vC82fEiP.js} +331 -30
- package/dist/{models-cli-DIFBrK4W.js → models-cli-DqsKsOgd.js} +66 -55
- package/dist/{models-cli-0XhQQbMW.js → models-cli-NV0bnh8l.js} +66 -55
- package/dist/{node-cli-BMUfVCSq.js → node-cli-C7YleuBk.js} +54 -44
- package/dist/{node-cli-DY4lzhDA.js → node-cli-CxwoHnZ6.js} +54 -44
- package/dist/{node-service-DQ-tiSie.js → node-service-C7f_uvx9.js} +2 -2
- package/dist/{node-service-u8g85nD3.js → node-service-De_WkxJe.js} +2 -2
- package/dist/{nodes-cli-BX6oWnLC.js → nodes-cli-BxrMVI9V.js} +25 -23
- package/dist/{nodes-cli-CVHzcQo2.js → nodes-cli-Clb0ocwB.js} +24 -22
- package/dist/{nodes-screen-DGlNPbk4.js → nodes-screen-CVL9363A.js} +48 -6
- package/dist/{nodes-screen-lykd2cny.js → nodes-screen-DsHJIN2I.js} +47 -5
- package/dist/{note-Ci08TSbV.js → note-Duiadw1g.js} +1 -1
- package/dist/{note-DVO1KLaW.js → note-uC6iDp4y.js} +2 -2
- package/dist/{onboard-channels-DTkFFbzS.js → onboard-channels-C5Iaafwb.js} +10 -10
- package/dist/{onboard-channels-CtDnwaF5.js → onboard-channels-C5uL3i8d.js} +11 -11
- package/dist/{onboard-skills-BnAcpzfX.js → onboard-skills-BFxdI1Y1.js} +1143 -112
- package/dist/{onboard-skills-DuoDzEmI.js → onboard-skills-DUG8Y0se.js} +1142 -111
- package/dist/{onboarding-DvhiiHh0.js → onboarding-ClzElK4D.js} +56 -48
- package/dist/{openclaw-root-93W6UrUK.js → openclaw-root-BKsZvO6K.js} +6 -2
- package/dist/{openclaw-root-9ILYSmJ9.js → openclaw-root-CEnmuBUN.js} +6 -2
- package/dist/{pairing-cli-BKJHBxwT.js → pairing-cli-BWWFZF7Q.js} +16 -16
- package/dist/{pairing-cli-DJHjPBwu.js → pairing-cli-BrFLxnug.js} +16 -16
- package/dist/{pairing-labels-xImhiJax.js → pairing-labels-C8KULWNH.js} +1 -1
- package/dist/{pairing-labels-CHxlh3tT.js → pairing-labels-Dt2vXyI7.js} +1 -1
- package/dist/{pairing-store-CO6umWFP.js → pairing-store-Dz-ArTQS.js} +3 -3
- package/dist/{pairing-store-BpPUNzmB.js → pairing-store-gQdv7Ruh.js} +2 -2
- package/dist/{path-env-Nq83EHH9.js → path-env-BRKerjt1.js} +2 -2
- package/dist/{path-env-CXWUFfFv.js → path-env-OJAyUeWW.js} +1 -1
- package/dist/paths-BZK4Ct0I.js +81 -0
- package/dist/paths-DWYi0R_2.js +78 -0
- package/dist/{paths-Bkhd_qY8.js → paths-DdKf4lHp.js} +35 -5
- package/dist/paths-SFzVNGbc.js +78 -0
- package/dist/pi-auth-json-D7hGObyW.js +12 -0
- package/dist/pi-auth-json-DgvHjfJy.js +8 -0
- package/dist/pi-auth-json-la6lnAzY.js +79 -0
- package/dist/pi-auth-json-p3vsMR7W.js +79 -0
- package/dist/{pi-embedded-C1qKCgDT.js → pi-embedded-De6SeAPs.js} +9518 -9968
- package/dist/{pi-embedded-helpers-DtPn5RC8.js → pi-embedded-helpers-BrUBxrE2.js} +70 -10
- package/dist/{pi-embedded-helpers-DhEkdWB1.js → pi-embedded-helpers-D0mqOwwq.js} +821 -128
- package/dist/{pi-embedded-helpers-7AjuNiiJ.js → pi-embedded-helpers-DpJb0kUk.js} +69 -9
- package/dist/{pi-embedded-helpers-BTkXgwJ7.js → pi-embedded-helpers-ZI1UCSRM.js} +927 -136
- package/dist/{pi-tools.policy-gG96mWwA.js → pi-tools.policy-z5Wd_2WN.js} +4 -4
- package/dist/{plugin-auto-enable-D5ye7QnB.js → plugin-auto-enable-B8mX3rX3.js} +14 -5
- package/dist/{plugin-auto-enable-BROgMZcf.js → plugin-auto-enable-OO0eDINB.js} +14 -5
- package/dist/plugin-sdk/agents/apply-patch-update.d.ts +3 -1
- package/dist/plugin-sdk/agents/apply-patch.d.ts +11 -3
- package/dist/plugin-sdk/agents/auth-profiles/profiles.d.ts +5 -0
- package/dist/plugin-sdk/agents/auth-profiles.d.ts +1 -1
- package/dist/plugin-sdk/agents/bash-process-registry.d.ts +1 -0
- package/dist/plugin-sdk/agents/bash-tools.exec.d.ts +26 -0
- package/dist/plugin-sdk/agents/current-time.d.ts +17 -0
- package/dist/plugin-sdk/agents/huggingface-models.d.ts +17 -0
- package/dist/plugin-sdk/agents/models-config.providers.d.ts +10 -0
- package/dist/plugin-sdk/agents/openclaw-tools.d.ts +2 -0
- package/dist/plugin-sdk/agents/pi-auth-json.d.ts +14 -0
- package/dist/plugin-sdk/agents/pi-embedded-helpers/errors.d.ts +5 -1
- package/dist/plugin-sdk/agents/pi-embedded-helpers.d.ts +1 -1
- package/dist/plugin-sdk/agents/pi-embedded-runner/google.d.ts +1 -0
- package/dist/plugin-sdk/agents/pi-embedded-runner/run/images.d.ts +9 -4
- package/dist/plugin-sdk/agents/pi-embedded-runner/run/params.d.ts +2 -0
- package/dist/plugin-sdk/agents/pi-embedded-runner/run/payloads.d.ts +1 -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/pi-tools.read.d.ts +8 -3
- package/dist/plugin-sdk/agents/sandbox/constants.d.ts +1 -1
- package/dist/plugin-sdk/agents/sandbox/docker.d.ts +14 -3
- package/dist/plugin-sdk/agents/sandbox/fs-bridge.d.ts +56 -0
- package/dist/plugin-sdk/agents/sandbox/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/subagent-registry.d.ts +3 -1
- package/dist/plugin-sdk/agents/tools/agent-step.d.ts +3 -0
- package/dist/plugin-sdk/agents/tools/browser-tool.schema.d.ts +2 -2
- package/dist/plugin-sdk/agents/tools/common.d.ts +4 -0
- package/dist/plugin-sdk/agents/tools/image-tool.d.ts +9 -1
- package/dist/plugin-sdk/agents/tools/web-search.d.ts +10 -1
- package/dist/plugin-sdk/agents/usage.d.ts +1 -0
- package/dist/plugin-sdk/auto-reply/reply/commands-status.d.ts +1 -0
- package/dist/plugin-sdk/auto-reply/reply/get-reply-directives.d.ts +1 -0
- package/dist/plugin-sdk/auto-reply/reply/memory-flush.d.ts +2 -2
- package/dist/plugin-sdk/auto-reply/reply/mentions.d.ts +1 -0
- package/dist/plugin-sdk/auto-reply/reply/model-selection.d.ts +3 -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/auto-reply/status.d.ts +2 -0
- package/dist/plugin-sdk/auto-reply/templating.d.ts +3 -0
- package/dist/plugin-sdk/auto-reply/thinking.d.ts +1 -1
- package/dist/plugin-sdk/auto-reply/types.d.ts +2 -0
- package/dist/plugin-sdk/browser/cdp.helpers.d.ts +2 -1
- package/dist/plugin-sdk/browser/client-actions-core.d.ts +1 -0
- package/dist/plugin-sdk/browser/control-auth.d.ts +13 -0
- package/dist/plugin-sdk/browser/pw-ai.d.ts +1 -1
- package/dist/plugin-sdk/browser/pw-session.d.ts +25 -0
- package/dist/plugin-sdk/browser/pw-tools-core.interactions.d.ts +2 -0
- package/dist/plugin-sdk/browser/routes/dispatcher.d.ts +1 -0
- package/dist/plugin-sdk/browser/routes/types.d.ts +5 -0
- package/dist/plugin-sdk/channels/plugins/onboarding/signal.d.ts +1 -0
- package/dist/plugin-sdk/channels/registry.d.ts +2 -2
- package/dist/plugin-sdk/cli/nodes-camera.d.ts +8 -2
- 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/commands/onboard-helpers.d.ts +1 -0
- package/dist/plugin-sdk/commands/onboard-types.d.ts +9 -1
- package/dist/plugin-sdk/commands/signal-install.d.ts +20 -0
- package/dist/plugin-sdk/config/config.d.ts +1 -1
- package/dist/plugin-sdk/config/group-policy.d.ts +3 -0
- package/dist/plugin-sdk/config/merge-patch.d.ts +1 -0
- package/dist/plugin-sdk/config/sessions/paths.d.ts +14 -4
- package/dist/plugin-sdk/config/sessions/store.d.ts +8 -0
- package/dist/plugin-sdk/config/sessions/types.d.ts +8 -0
- package/dist/plugin-sdk/config/types.agents.d.ts +2 -0
- package/dist/plugin-sdk/config/types.channels.d.ts +2 -0
- package/dist/plugin-sdk/config/types.d.ts +1 -0
- package/dist/plugin-sdk/config/types.discord.d.ts +5 -0
- package/dist/plugin-sdk/config/types.gateway.d.ts +35 -0
- package/dist/plugin-sdk/config/types.hooks.d.ts +23 -1
- package/dist/plugin-sdk/config/types.irc.d.ts +96 -0
- package/dist/plugin-sdk/config/types.memory.d.ts +2 -0
- package/dist/plugin-sdk/config/types.openclaw.d.ts +6 -0
- package/dist/plugin-sdk/config/types.queue.d.ts +1 -0
- package/dist/plugin-sdk/config/types.slack.d.ts +2 -0
- package/dist/plugin-sdk/config/types.telegram.d.ts +2 -0
- package/dist/plugin-sdk/config/validation.d.ts +20 -0
- package/dist/plugin-sdk/config/zod-schema.agents.d.ts +1 -0
- package/dist/plugin-sdk/config/zod-schema.core.d.ts +2 -0
- package/dist/plugin-sdk/config/zod-schema.d.ts +193 -2
- package/dist/plugin-sdk/config/zod-schema.hooks.d.ts +3 -2
- package/dist/plugin-sdk/config/zod-schema.providers-core.d.ts +378 -0
- package/dist/plugin-sdk/config/zod-schema.providers.d.ts +176 -0
- package/dist/plugin-sdk/config/zod-schema.sensitive.d.ts +2 -0
- package/dist/plugin-sdk/config/zod-schema.session.d.ts +1 -0
- package/dist/plugin-sdk/cron/service/jobs.d.ts +8 -0
- package/dist/plugin-sdk/cron/service/state.d.ts +1 -0
- package/dist/plugin-sdk/cron/types.d.ts +2 -0
- package/dist/plugin-sdk/discord/monitor/allow-list.d.ts +15 -0
- package/dist/plugin-sdk/discord/send.types.d.ts +5 -0
- package/dist/plugin-sdk/gateway/auth-rate-limit.d.ts +59 -0
- package/dist/plugin-sdk/gateway/auth.d.ts +47 -0
- package/dist/plugin-sdk/gateway/net.d.ts +5 -0
- package/dist/plugin-sdk/gateway/protocol/index.d.ts +7 -7
- package/dist/plugin-sdk/gateway/protocol/schema/agent.d.ts +7 -1
- package/dist/plugin-sdk/gateway/protocol/schema/channels.d.ts +21 -0
- package/dist/plugin-sdk/gateway/protocol/schema/types.d.ts +3 -1
- package/dist/plugin-sdk/gateway/session-utils.fs.d.ts +3 -1
- package/dist/plugin-sdk/gateway/session-utils.types.d.ts +1 -0
- package/dist/plugin-sdk/imessage/send.d.ts +12 -0
- package/dist/plugin-sdk/index.js +2147 -900
- package/dist/plugin-sdk/infra/binaries.d.ts +3 -0
- package/dist/plugin-sdk/infra/brew.d.ts +8 -0
- package/dist/plugin-sdk/infra/heartbeat-active-hours.d.ts +5 -0
- package/dist/plugin-sdk/infra/heartbeat-runner.d.ts +1 -0
- package/dist/plugin-sdk/infra/heartbeat-wake.d.ts +8 -1
- 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/outbound/message.d.ts +2 -0
- package/dist/plugin-sdk/infra/outbound/outbound-send-service.d.ts +2 -0
- package/dist/plugin-sdk/infra/session-cost-usage.d.ts +3 -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/console.d.ts +4 -0
- package/dist/plugin-sdk/logging/logger.d.ts +1 -1
- package/dist/plugin-sdk/logging/state.d.ts +1 -0
- package/dist/plugin-sdk/logging.d.ts +2 -2
- package/dist/plugin-sdk/markdown/ir.d.ts +1 -1
- package/dist/plugin-sdk/markdown/whatsapp.d.ts +14 -0
- package/dist/plugin-sdk/media/input-files.d.ts +5 -0
- package/dist/plugin-sdk/media/store.d.ts +10 -0
- package/dist/plugin-sdk/media-understanding/audio-preflight.d.ts +16 -0
- package/dist/plugin-sdk/media-understanding/types.d.ts +1 -0
- package/dist/plugin-sdk/memory/backend-config.d.ts +2 -1
- package/dist/plugin-sdk/memory/embedding-chunk-limits.d.ts +3 -0
- package/dist/plugin-sdk/memory/embedding-input-limits.d.ts +2 -0
- package/dist/plugin-sdk/memory/embedding-model-limits.d.ts +2 -0
- package/dist/plugin-sdk/memory/embeddings.d.ts +1 -0
- package/dist/plugin-sdk/memory/internal.d.ts +11 -0
- package/dist/plugin-sdk/memory/manager.d.ts +0 -6
- package/dist/plugin-sdk/memory/qmd-manager.d.ts +2 -0
- package/dist/plugin-sdk/memory/qmd-query-parser.d.ts +8 -0
- package/dist/plugin-sdk/memory/session-files.d.ts +2 -0
- package/dist/plugin-sdk/process/command-queue.d.ts +16 -0
- package/dist/plugin-sdk/providers/github-copilot-token.d.ts +3 -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/plugin-sdk/slack/monitor/commands.d.ts +5 -0
- package/dist/plugin-sdk/slack/monitor/media.d.ts +21 -0
- package/dist/plugin-sdk/slack/types.d.ts +1 -0
- package/dist/plugin-sdk/telegram/bot-message-context.d.ts +2 -1
- package/dist/plugin-sdk/telegram/fetch.d.ts +1 -0
- package/dist/plugin-sdk/telegram/monitor.d.ts +1 -0
- package/dist/plugin-sdk/telegram/send.d.ts +3 -0
- package/dist/plugin-sdk/tts/tts.d.ts +2 -2
- package/dist/plugin-sdk/utils/fetch-timeout.d.ts +2 -0
- package/dist/plugin-sdk/web/media.d.ts +12 -2
- package/dist/{plugins-CQw3z3Nw.js → plugins-CTjLu-z-.js} +4 -4
- package/dist/{plugins-B7F0Ly9G.js → plugins-CxrdL_IZ.js} +3 -3
- package/dist/{plugins-cli-CJ74eHvr.js → plugins-cli-CbX97Kvt.js} +259 -49
- package/dist/{plugins-cli-ubDwUAzK.js → plugins-cli-Dn9OeO53.js} +257 -47
- package/dist/{ports-kYsTYQdA.js → ports-C8YYHVlc.js} +2 -2
- package/dist/{program-1bQ15ivo.js → program-D-mNC0It.js} +86 -83
- package/dist/{progress-Da1ehW-x.js → progress-COHv-uNT.js} +1 -1
- package/dist/{progress-COzt9PNY.js → progress-DZb6yPcJ.js} +1 -1
- package/dist/{prompt-style-Dc0C5HC9.js → prompt-style-Cf1r1L6k.js} +1 -1
- package/dist/{prompt-style-DjZDxcFg.js → prompt-style-lSlXMhsd.js} +1 -1
- package/dist/{pw-ai-CQ4-gUNR.js → pw-ai-6GzTgK5g.js} +205 -32
- package/dist/{pw-ai-1NN0FrJb.js → pw-ai-C8YhJRaI.js} +207 -32
- package/dist/{pw-ai-qEMUq5Mt.js → pw-ai-CKGenizV.js} +203 -29
- package/dist/{pw-ai-IOqEXO1O.js → pw-ai-D7devT89.js} +206 -32
- package/dist/{qmd-manager-CEwp3el1.js → qmd-manager-CQzWovq-.js} +71 -90
- package/dist/{qmd-manager-D6N3qvQ5.js → qmd-manager-Cs8RJVQp.js} +73 -90
- package/dist/{qmd-manager-C48QzrRe.js → qmd-manager-DdgrQ2kc.js} +71 -88
- package/dist/{qmd-manager-DaUqCKB_.js → qmd-manager-dyIoOvKl.js} +73 -90
- package/dist/{register.subclis-Cm-VJ5nP.js → register.subclis-ifHtmF3e.js} +29 -29
- package/dist/{reply-CBs4e9Rm.js → reply-VIHqsQ-k.js} +7906 -8743
- package/dist/{routes-9ygR0GOk.js → routes-CaCvio4Q.js} +36 -15
- package/dist/{routes-BrWrBk2R.js → routes-Cpfxk96k.js} +36 -14
- package/dist/{rpc-Cjuz2Gv1.js → rpc-BhB01Bhj.js} +3 -3
- package/dist/{rpc-DhkLVY5H.js → rpc-C5WsS_Ne.js} +3 -3
- package/dist/{run-main-BlZ5l-X9.js → run-main-DVy6KJTe.js} +88 -85
- package/dist/runner-B7CKBC80.js +1800 -0
- package/dist/runner-BEy5ZGFv.js +1901 -0
- package/dist/runner-Bv0BmJPF.js +1800 -0
- package/dist/runner-ChqVEgPx.js +1901 -0
- package/dist/{sandbox-qt49csTr.js → sandbox-BAChxjC5.js} +627 -157
- package/dist/{sandbox-CPZiaKcS.js → sandbox-DNHDwHw8.js} +628 -158
- package/dist/{sandbox-cli-C6_iNuqO.js → sandbox-cli-9oq67QEg.js} +22 -22
- package/dist/{sandbox-cli-C_wK-KAE.js → sandbox-cli-BiNq9yUe.js} +22 -22
- package/dist/{security-cli-CTTD1vms.js → security-cli-CRg03hvq.js} +28 -28
- package/dist/{security-cli-DRpGF2Yc.js → security-cli-LmBBHnmh.js} +28 -28
- package/dist/{server-context-lyNcqJYD.js → server-context-FwqBRH3K.js} +10 -10
- package/dist/{server-context-39mkstUs.js → server-context-RY7lRaxl.js} +9 -9
- package/dist/{server-node-events-V_G9BRRw.js → server-node-events-BbHOZX3O.js} +48 -43
- package/dist/{server-node-events-o9G18PaE.js → server-node-events-CngNLVL-.js} +50 -45
- package/dist/{service-DOlJdIqe.js → service-BnqdBTAK.js} +8 -4
- package/dist/{service-DDPRbf8a.js → service-DZN7KRok.js} +8 -4
- package/dist/{service-audit-VDRrWefh.js → service-audit-0Eil3ISN.js} +4 -4
- package/dist/{service-audit-CVy00Ze_.js → service-audit-B8KIOe8A.js} +4 -4
- package/dist/{session-cost-usage-CcCEQNuc.js → session-cost-usage-B-tyjp76.js} +14 -14
- package/dist/{session-cost-usage-PvyVZz-g.js → session-cost-usage-BYUb7fov.js} +14 -14
- package/dist/{shared-BnpC3wMU.js → shared-BCdNboU1.js} +3 -3
- package/dist/{shared-CagUDdmp.js → shared-CsAwU6-q.js} +3 -3
- package/dist/{shared-BDk_zC9p.js → shared-Csn6DLBA.js} +5 -5
- package/dist/{shared-C92wo-6f.js → shared-DEanAgja.js} +4 -4
- package/dist/{skill-scanner-C_fQzVDu.js → skill-scanner-BrGkh5K7.js} +1 -1
- package/dist/{skill-scanner-DrVEHfC6.js → skill-scanner-CucvxYhu.js} +1 -1
- package/dist/{skills-Ccsv3IQq.js → skills-CE7by2IF.js} +151 -8
- package/dist/{skills-_eKGrw9z.js → skills-Dz15dAM4.js} +152 -9
- package/dist/{skills-cli-DqvLjooh.js → skills-cli-B5b75pDK.js} +13 -13
- package/dist/{skills-cli-DUncybht.js → skills-cli-CbCDrYwp.js} +13 -13
- package/dist/{skills-status-Cp2ZFhIx.js → skills-status-B99Us6yS.js} +2 -2
- package/dist/{skills-status-Ck0CCFZG.js → skills-status-ChM7JE47.js} +3 -3
- package/dist/{sqlite-DODNHWJb.js → sqlite-2UsPaJz5.js} +97 -2
- package/dist/{sqlite-cSdsHVEw.js → sqlite-CASnHrgX.js} +97 -1
- package/dist/{sqlite-Bwo2rASR.js → sqlite-CVWiMkGu.js} +97 -1
- package/dist/{sqlite-CpqIbY4-.js → sqlite-CcIWkGaM.js} +97 -1
- package/dist/{status-Bmx9_1C7.js → status-CKuX1-zb.js} +3 -3
- package/dist/{status-CBGgwlTW.js → status-Cm4q6o-I.js} +57 -49
- package/dist/{status-DkJgtvSz.js → status-DD2iqGc9.js} +4 -4
- package/dist/{subsystem-DPnkvS73.js → subsystem-DHfJG4gk.js} +73 -20
- package/dist/{system-cli-9fQ1uLiz.js → system-cli-BVJDR474.js} +87 -15
- package/dist/{system-cli-Gq8OWHFg.js → system-cli-C3Y_9VpI.js} +88 -16
- package/dist/{systemd-Pa7LURHB.js → systemd-DxddcFsa.js} +3 -3
- package/dist/{systemd-hints-zi4ohCOY.js → systemd-hints-BVLopJ9O.js} +1 -1
- package/dist/{systemd-linger-CDo2UbHM.js → systemd-linger-BThjV1Sr.js} +2 -2
- package/dist/{systemd-linger-6_naJcJp.js → systemd-linger-D3Va1Cv7.js} +2 -2
- package/dist/{systemd-BEWwfwn0.js → systemd-s3S2HVog.js} +3 -3
- package/dist/{table-Bb9gAVIp.js → table-BIk8Aan_.js} +2 -2
- package/dist/{table-cCoGqLsk.js → table-Bvka_vkc.js} +1 -1
- package/dist/{tool-display-DUVhO36P.js → tool-display-DbdMQFZx.js} +2 -2
- package/dist/{tool-display-DNOVCI6J.js → tool-display-kpW5Hg2z.js} +2 -2
- package/dist/{tui-DDVqLwqT.js → tui-B40Z2jMa.js} +120 -14
- package/dist/{tui-cli-CurbazQf.js → tui-cli-Bwa6K7xR.js} +28 -28
- package/dist/{tui-cli-BeN2K38I.js → tui-cli-DD6g7uZb.js} +27 -27
- package/dist/{tui-B9zLJxf6.js → tui-lFMZUnx6.js} +121 -13
- package/dist/{update-Ct9sqJC_.js → update-Bos8PPCG.js} +3 -3
- package/dist/{update--i077azM.js → update-Cg8MtrEr.js} +3 -3
- package/dist/{update-cli-CT5W0kpw.js → update-cli-CC-wTeje.js} +92 -73
- package/dist/{update-cli-C87lNK1S.js → update-cli-CULnXFL_.js} +91 -72
- package/dist/{update-runner-BIttRDyV.js → update-runner-BaLsla0c.js} +11 -11
- package/dist/{update-runner-xbeVkAD9.js → update-runner-Dbsdl5AU.js} +10 -10
- package/dist/{utils-Dk86IbEs.js → utils-BLJAc3ZV.js} +1 -1
- package/dist/{utils-BTaR--Ln.js → utils-BtIMES3N.js} +1 -1
- package/dist/{webhooks-cli-Db3zyJaw.js → webhooks-cli-ClHLUu_j.js} +21 -13
- package/dist/{webhooks-cli-DUUa8gVY.js → webhooks-cli-DVXr2uyN.js} +21 -13
- package/dist/{widearea-dns-BgYasW6m.js → widearea-dns-C4RnIR9O.js} +3 -3
- package/dist/{widearea-dns-CMIG6-74.js → widearea-dns-Ypwgjpsr.js} +3 -3
- package/dist/{ws-C0k_dhCP.js → ws-BcJt4pcg.js} +24 -2
- package/dist/{ws-DtDKpbLR.js → ws-MC-rTJLe.js} +24 -2
- package/dist/{ws-log-cMNgAyLy.js → ws-log-WrJ4QYu7.js} +1 -1
- package/dist/{ws-log-C6vm_XMA.js → ws-log-lip4ETlm.js} +2 -2
- package/dist/{wsl-rfIr_Sde.js → wsl-BvTIzy-8.js} +5 -3
- package/docs/assets/install-script.svg +1 -0
- package/docs/automation/hooks.md +1 -38
- package/docs/automation/webhook.md +52 -2
- package/docs/channels/discord.md +389 -381
- package/docs/channels/grammy.md +1 -1
- package/docs/channels/imessage.md +229 -218
- package/docs/channels/index.md +1 -0
- package/docs/channels/irc.md +234 -0
- package/docs/channels/msteams.md +2 -0
- package/docs/channels/pairing.md +1 -1
- package/docs/channels/slack.md +295 -415
- package/docs/channels/telegram.md +397 -460
- package/docs/channels/whatsapp.md +338 -310
- package/docs/ci.md +0 -12
- package/docs/cli/hooks.md +1 -14
- package/docs/cli/index.md +6 -1
- package/docs/cli/logs.md +4 -0
- package/docs/cli/onboard.md +33 -0
- package/docs/cli/plugins.md +20 -1
- package/docs/cli/security.md +2 -0
- package/docs/concepts/architecture.md +0 -16
- package/docs/concepts/memory.md +7 -4
- package/docs/concepts/model-providers.md +27 -0
- package/docs/concepts/session-tool.md +1 -0
- package/docs/concepts/system-prompt.md +13 -0
- package/docs/docs.json +18 -12
- package/docs/experiments/plans/browser-evaluate-cdp-refactor.md +229 -0
- package/docs/gateway/configuration-examples.md +9 -2
- package/docs/gateway/configuration-reference.md +2345 -0
- package/docs/gateway/configuration.md +338 -3297
- package/docs/gateway/index.md +162 -238
- package/docs/gateway/openai-http-api.md +1 -0
- package/docs/gateway/openresponses-http-api.md +16 -0
- package/docs/gateway/remote-gateway-readme.md +0 -16
- package/docs/gateway/security/index.md +4 -16
- package/docs/gateway/tools-invoke-http-api.md +26 -1
- package/docs/help/faq.md +9 -0
- package/docs/help/testing.md +11 -0
- package/docs/install/docker.md +18 -0
- package/docs/install/hetzner.md +21 -0
- package/docs/install/installer.md +20 -0
- package/docs/nodes/audio.md +19 -0
- package/docs/platforms/mac/release.md +7 -7
- package/docs/providers/glm.md +3 -3
- package/docs/providers/huggingface.md +209 -0
- package/docs/providers/index.md +3 -0
- package/docs/providers/litellm.md +153 -0
- package/docs/providers/together.md +2 -2
- package/docs/providers/vllm.md +92 -0
- package/docs/providers/zai.md +2 -2
- package/docs/reference/credits.md +4 -28
- package/docs/reference/test.md +2 -1
- package/docs/reference/token-use.md +1 -1
- package/docs/reference/transcript-hygiene.md +18 -0
- package/docs/start/getting-started.md +5 -0
- package/docs/start/onboarding-overview.md +51 -0
- package/docs/start/onboarding.md +1 -0
- package/docs/start/openclaw.md +0 -16
- package/docs/start/wizard-cli-automation.md +17 -0
- package/docs/start/wizard-cli-reference.md +12 -0
- package/docs/start/wizard.md +3 -1
- package/docs/tools/browser.md +6 -0
- package/docs/zh-CN/automation/hooks.md +1 -38
- package/docs/zh-CN/cli/hooks.md +1 -14
- package/extensions/bluebubbles/package.json +1 -1
- package/extensions/bluebubbles/src/monitor.test.ts +40 -28
- package/extensions/bluebubbles/src/monitor.ts +0 -4
- package/extensions/copilot-proxy/package.json +1 -1
- package/extensions/diagnostics-otel/package.json +10 -10
- package/extensions/discord/package.json +1 -1
- package/extensions/feishu/package.json +2 -5
- package/extensions/feishu/src/bot.checkBotMentioned.test.ts +64 -0
- package/extensions/feishu/src/bot.test.ts +265 -0
- package/extensions/feishu/src/bot.ts +73 -18
- package/extensions/feishu/src/channel.test.ts +48 -0
- package/extensions/feishu/src/channel.ts +1 -3
- package/extensions/feishu/src/config-schema.ts +6 -0
- package/extensions/feishu/src/docx.ts +14 -4
- package/extensions/feishu/src/media.test.ts +151 -0
- package/extensions/feishu/src/media.ts +27 -13
- 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/google-antigravity-auth/package.json +1 -1
- package/extensions/google-gemini-cli-auth/oauth.test.ts +4 -1
- package/extensions/google-gemini-cli-auth/package.json +1 -1
- package/extensions/googlechat/package.json +1 -1
- package/extensions/googlechat/src/channel.ts +3 -20
- package/extensions/googlechat/src/resolve-target.test.ts +138 -0
- package/extensions/imessage/package.json +1 -1
- package/extensions/irc/index.ts +17 -0
- package/extensions/irc/openclaw.plugin.json +9 -0
- package/extensions/irc/package.json +14 -0
- package/extensions/irc/src/accounts.ts +268 -0
- package/extensions/irc/src/channel.ts +367 -0
- package/extensions/irc/src/client.test.ts +43 -0
- package/extensions/irc/src/client.ts +439 -0
- package/extensions/irc/src/config-schema.test.ts +27 -0
- package/extensions/irc/src/config-schema.ts +97 -0
- package/extensions/irc/src/control-chars.ts +22 -0
- package/extensions/irc/src/inbound.ts +334 -0
- package/extensions/irc/src/monitor.test.ts +43 -0
- package/extensions/irc/src/monitor.ts +158 -0
- package/extensions/irc/src/normalize.test.ts +46 -0
- package/extensions/irc/src/normalize.ts +117 -0
- package/extensions/irc/src/onboarding.test.ts +118 -0
- package/extensions/irc/src/onboarding.ts +479 -0
- package/extensions/irc/src/policy.test.ts +132 -0
- package/extensions/irc/src/policy.ts +157 -0
- package/extensions/irc/src/probe.ts +64 -0
- package/extensions/irc/src/protocol.test.ts +44 -0
- package/extensions/irc/src/protocol.ts +169 -0
- package/extensions/irc/src/runtime.ts +14 -0
- package/extensions/irc/src/send.ts +99 -0
- package/extensions/irc/src/types.ts +94 -0
- package/extensions/line/package.json +1 -1
- package/extensions/llm-task/package.json +1 -1
- package/extensions/lobster/package.json +1 -1
- package/extensions/matrix/CHANGELOG.md +6 -0
- package/extensions/matrix/node_modules/.bin/markdown-it +2 -2
- package/extensions/matrix/node_modules/.bin/markdown-it.CMD +2 -2
- package/extensions/matrix/node_modules/.bin/markdown-it.ps1 +2 -2
- package/extensions/matrix/package.json +2 -2
- package/extensions/matrix/src/matrix/monitor/media.ts +4 -2
- package/extensions/mattermost/package.json +1 -1
- package/extensions/memory-core/package.json +1 -1
- package/extensions/memory-lancedb/index.ts +6 -2
- package/extensions/memory-lancedb/node_modules/.bin/openai +2 -2
- package/extensions/memory-lancedb/node_modules/.bin/openai.CMD +2 -2
- package/extensions/memory-lancedb/node_modules/.bin/openai.ps1 +2 -2
- package/extensions/memory-lancedb/package.json +2 -2
- package/extensions/minimax-portal-auth/index.ts +7 -5
- package/extensions/minimax-portal-auth/package.json +1 -1
- package/extensions/msteams/CHANGELOG.md +6 -0
- package/extensions/msteams/package.json +1 -1
- package/extensions/msteams/src/media-helpers.test.ts +9 -0
- package/extensions/msteams/src/media-helpers.ts +15 -1
- package/extensions/msteams/src/mentions.test.ts +235 -0
- package/extensions/msteams/src/mentions.ts +114 -0
- package/extensions/msteams/src/messenger.test.ts +81 -1
- package/extensions/msteams/src/messenger.ts +11 -2
- package/extensions/nextcloud-talk/package.json +1 -1
- package/extensions/nostr/CHANGELOG.md +6 -0
- package/extensions/nostr/package.json +2 -2
- package/extensions/open-prose/package.json +1 -1
- package/extensions/signal/package.json +1 -1
- package/extensions/slack/package.json +1 -1
- package/extensions/telegram/package.json +1 -1
- package/extensions/telegram/src/channel.ts +1 -0
- package/extensions/tlon/package.json +1 -1
- package/extensions/twitch/CHANGELOG.md +6 -0
- package/extensions/twitch/package.json +1 -1
- package/extensions/twitch/src/onboarding.test.ts +5 -0
- package/extensions/twitch/src/outbound.test.ts +17 -6
- package/extensions/twitch/src/outbound.ts +12 -10
- package/extensions/voice-call/CHANGELOG.md +6 -0
- package/extensions/voice-call/package.json +1 -1
- package/extensions/voice-call/src/media-stream.ts +7 -1
- package/extensions/voice-call/src/providers/twilio.test.ts +5 -3
- package/extensions/voice-call/src/providers/twilio.ts +12 -1
- package/extensions/whatsapp/package.json +1 -1
- package/extensions/whatsapp/src/channel.ts +6 -16
- package/extensions/whatsapp/src/resolve-target.test.ts +154 -0
- package/extensions/zalo/CHANGELOG.md +6 -0
- package/extensions/zalo/package.json +1 -1
- package/extensions/zalouser/CHANGELOG.md +6 -0
- package/extensions/zalouser/package.json +1 -1
- package/package.json +26 -22
- package/dist/auth-BcNHFK-i.js +0 -184
- package/dist/auth-DkjJ3pm-.js +0 -184
- package/dist/boolean-M-esQJt6.js +0 -30
- package/dist/bundled/soul-evil/HOOK.md +0 -71
- package/dist/bundled/soul-evil/handler.js +0 -194
- package/dist/cli-B631__JU.js +0 -89
- package/dist/cli-DVhCVZZ6.js +0 -86
- package/dist/config-CI7EpvlP.js +0 -15
- package/dist/constants-DuoCkWRh.js +0 -65
- package/dist/control-ui/assets/index-CnB9IO4a.js.map +0 -1
- package/dist/control-ui/assets/index-DWhx-9JL.css +0 -1
- package/dist/date-time-c6HTX6IW.js +0 -187
- package/dist/frontmatter-xwTm0734.js +0 -105
- package/dist/parse-DqAvJRIf.js +0 -23
- package/dist/parse-duration-De_tAQSe.js +0 -24
- package/dist/parse-timeout-DV8NQQWk.js +0 -16
- package/dist/paths-IivnSNkP.js +0 -51
- package/dist/paths-MnZaxqPw.js +0 -48
- package/dist/paths-uoGO2aiO.js +0 -48
- package/dist/pi-model-discovery-DzFOAbQt.js +0 -20
- package/dist/plugin-sdk/tui/tui-formatters.d.ts +0 -31
- package/dist/session-key-nXYQSv-a.js +0 -167
- package/dist/tailscale-DU6DgqVy.js +0 -225
- package/dist/tailscale-DzJUWmKf.js +0 -252
- package/dist/utils-dp_OM900.js +0 -476
- package/docs/hooks/soul-evil.md +0 -69
- package/docs/zh-CN/hooks/soul-evil.md +0 -72
- package/skills/local-places/SERVER_README.md +0 -101
- package/skills/local-places/SKILL.md +0 -102
- package/skills/local-places/pyproject.toml +0 -21
- package/skills/local-places/src/local_places/__init__.py +0 -2
- package/skills/local-places/src/local_places/google_places.py +0 -314
- package/skills/local-places/src/local_places/main.py +0 -65
- package/skills/local-places/src/local_places/schemas.py +0 -107
- /package/dist/{archive-CXhvR9nU.js → archive-aSMUcOc6.js} +0 -0
- /package/dist/{archive-D0z3LZDK.js → archive-beaSfAzA.js} +0 -0
- /package/dist/{brew-BIrWdDps.js → brew-DlQQMJ3n.js} +0 -0
- /package/dist/{brew-B7YK4ZoL.js → brew-ROHf0-Xp.js} +0 -0
- /package/dist/{cli-utils-PlLcDZlM.js → cli-utils-CRhVAaLV.js} +0 -0
- /package/dist/{cli-utils-R-ECs5cY.js → cli-utils-CodyYLHe.js} +0 -0
- /package/dist/{command-format-BUxhT1xL.js → command-format-qUVxzqYm.js} +0 -0
- /package/dist/{constants-CNTiY-ZN.js → constants-BvQ6S8j5.js} +0 -0
- /package/dist/{errors-D3tYRJWG.js → errors-B91HIDPD.js} +0 -0
- /package/dist/{errors-B0eT3jVv.js → errors-Bv81hF2P.js} +0 -0
- /package/dist/{errors-x4NYs-1P.js → errors-Cojm0Kl7.js} +0 -0
- /package/dist/{format-CaxeRcue.js → format-CL8VOhxX.js} +0 -0
- /package/dist/{format-DLOJPZmo.js → format-DcfK-dwd.js} +0 -0
- /package/dist/{format-duration-CEmFWLyX.js → format-duration--hQihAvf.js} +0 -0
- /package/dist/{format-duration-DCXJx2ba.js → format-duration-84n6_DgO.js} +0 -0
- /package/dist/{format-relative-79_Y1n2Y.js → format-relative-Cywx6ldk.js} +0 -0
- /package/dist/{format-relative-Db7eqEu8.js → format-relative-cegC_FF5.js} +0 -0
- /package/dist/{helpers-CQI-5xS9.js → helpers-8O7IVGO-.js} +0 -0
- /package/dist/{helpers-DdwqKAAS.js → helpers-ByYj2Aq5.js} +0 -0
- /package/dist/{helpers-CRzoyyXS.js → helpers-CUVSCDJV.js} +0 -0
- /package/dist/{helpers-C89IG08W.js → helpers-HyeZXsnu.js} +0 -0
- /package/dist/{is-main-qJ675wPV.js → is-main-B9A8S9YC.js} +0 -0
- /package/dist/{is-main-WWuz28Ip.js → is-main-BWoXGz7p.js} +0 -0
- /package/dist/{logging-BzvBIA3Y.js → logging-D-Jq2wIo.js} +0 -0
- /package/dist/{logging-CfEk_PnX.js → logging-fywhKCmE.js} +0 -0
- /package/dist/{parse-Cjiudy6x.js → parse-Bw0oH-rT.js} +0 -0
- /package/dist/{parse-log-line-CUrpqe1w.js → parse-log-line-BuRiE-Ij.js} +0 -0
- /package/dist/{parse-log-line-D2UGw0wR.js → parse-log-line-CfVgwy6x.js} +0 -0
- /package/dist/{parse-timeout-DFSPLxpY.js → parse-timeout-D1XX_zN_.js} +0 -0
- /package/dist/{pi-model-discovery-CV2V1HHz.js → pi-model-discovery-DqgqUyAv.js} +0 -0
- /package/dist/{pi-model-discovery-DzEIEgHL.js → pi-model-discovery-EwKVHlZB.js} +0 -0
- /package/dist/{prompts--d-6l5Ln.js → prompts-Bg96reub.js} +0 -0
- /package/dist/{prompts-CXLLIBwP.js → prompts-Dszjy1n_.js} +0 -0
- /package/dist/{redact-BRmQPYDR.js → redact-BIMJ3ntQ.js} +0 -0
- /package/dist/{redact-BHmk44DI.js → redact-BRsnXqwD.js} +0 -0
- /package/dist/{redact-DAKeu7PA.js → redact-UvkXqguc.js} +0 -0
- /package/dist/{status-Cv36yYdi.js → status-C_dMhoE0.js} +0 -0
- /package/dist/{status-Drziap9H.js → status-DCkF_L3U.js} +0 -0
- /package/dist/{systemd-hints-CH4pbCFD.js → systemd-hints-CXNtLw9Q.js} +0 -0
- /package/dist/{tailnet-CL5GtL7t.js → tailnet-DATIFSsY.js} +0 -0
- /package/dist/{tailnet-DGRSvYuQ.js → tailnet-uoFvUSsw.js} +0 -0
- /package/dist/{transcript-events-BlIONGVn.js → transcript-events-BHS7QoRl.js} +0 -0
- /package/dist/{transcript-events-C1hdue6u.js → transcript-events-Bp7fGnwv.js} +0 -0
- /package/dist/{transcript-events-CZ8CG4ht.js → transcript-events-Ch7wLX-j.js} +0 -0
- /package/dist/{usage-format-6Uar63S0.js → usage-format-Bhl_WCWP.js} +0 -0
- /package/dist/{usage-format-hd37en6b.js → usage-format-CpORtVCG.js} +0 -0
- /package/extensions/{feishu → irc}/node_modules/.bin/claw +0 -0
- /package/extensions/{feishu → irc}/node_modules/.bin/claw.CMD +0 -0
- /package/extensions/{feishu → irc}/node_modules/.bin/claw.ps1 +0 -0
- /package/extensions/{feishu → irc}/node_modules/.bin/moltbot +0 -0
- /package/extensions/{feishu → irc}/node_modules/.bin/moltbot.CMD +0 -0
- /package/extensions/{feishu → irc}/node_modules/.bin/moltbot.ps1 +0 -0
- /package/extensions/{feishu → irc}/node_modules/.bin/pigbot +0 -0
- /package/extensions/{feishu → irc}/node_modules/.bin/pigbot.CMD +0 -0
- /package/extensions/{feishu → irc}/node_modules/.bin/pigbot.ps1 +0 -0
|
@@ -1,23 +1,24 @@
|
|
|
1
1
|
import { g as resolveStateDir, m as resolveOAuthDir, o as resolveConfigPath } from "./paths-DVBShlw6.js";
|
|
2
2
|
import { l as normalizeAgentId } from "./session-key-BWxPj0z_.js";
|
|
3
|
-
import { n as runExec } from "./exec-
|
|
4
|
-
import { c as resolveDefaultAgentId, s as resolveAgentWorkspaceDir } from "./agent-scope-
|
|
3
|
+
import { n as runExec } from "./exec-BPQSKwGa.js";
|
|
4
|
+
import { c as resolveDefaultAgentId, s as resolveAgentWorkspaceDir } from "./agent-scope-GYIs5dyU.js";
|
|
5
5
|
import { t as formatCliCommand } from "./command-format-ChfKqObn.js";
|
|
6
|
-
import {
|
|
7
|
-
import { a as MANIFEST_KEY } from "./manifest-registry-
|
|
8
|
-
import { n as listChannelPlugins } from "./plugins-
|
|
9
|
-
import { $ as
|
|
10
|
-
import { i as loadWorkspaceSkillEntries } from "./skills-
|
|
11
|
-
import { n as formatErrorMessage } from "./errors-
|
|
12
|
-
import { a as resolveProfile, i as resolveBrowserConfig } from "./server-context-
|
|
13
|
-
import { h as GATEWAY_CLIENT_NAMES, m as GATEWAY_CLIENT_MODES } from "./message-channel-
|
|
14
|
-
import { t as GatewayClient } from "./client-
|
|
15
|
-
import { t as buildGatewayConnectionDetails } from "./call-
|
|
16
|
-
import { i as readChannelAllowFromStore } from "./pairing-store-
|
|
17
|
-
import { c as resolveNativeSkillsEnabled, n as isToolAllowedByPolicies, s as resolveNativeCommandsEnabled } from "./pi-tools.policy-
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
6
|
+
import { A as MAX_INCLUDE_DEPTH, k as INCLUDE_KEY, r as createConfigIO } from "./config-CeWMHOiQ.js";
|
|
7
|
+
import { a as MANIFEST_KEY, l as normalizePluginsConfig } from "./manifest-registry-jeAPx6AW.js";
|
|
8
|
+
import { n as listChannelPlugins } from "./plugins-CTjLu-z-.js";
|
|
9
|
+
import { $ as resolveSandboxConfigForAgent, ct as resolveToolProfilePolicy, tt as resolveSandboxToolPolicyForAgent } from "./sandbox-BAChxjC5.js";
|
|
10
|
+
import { i as loadWorkspaceSkillEntries } from "./skills-Dz15dAM4.js";
|
|
11
|
+
import { n as formatErrorMessage } from "./errors-Bv81hF2P.js";
|
|
12
|
+
import { a as resolveProfile, i as resolveBrowserConfig } from "./server-context-RY7lRaxl.js";
|
|
13
|
+
import { h as GATEWAY_CLIENT_NAMES, m as GATEWAY_CLIENT_MODES } from "./message-channel-CTtrEkmW.js";
|
|
14
|
+
import { t as GatewayClient } from "./client-DyAxKXKY.js";
|
|
15
|
+
import { t as buildGatewayConnectionDetails } from "./call-DAfkvtVq.js";
|
|
16
|
+
import { i as readChannelAllowFromStore } from "./pairing-store-gQdv7Ruh.js";
|
|
17
|
+
import { c as resolveNativeSkillsEnabled, n as isToolAllowedByPolicies, s as resolveNativeCommandsEnabled } from "./pi-tools.policy-z5Wd_2WN.js";
|
|
18
|
+
import { i as resolveGatewayAuth } from "./auth-9nTeB2Je.js";
|
|
19
|
+
import { n as resolveBrowserControlAuth } from "./control-auth-C8rIqEdA.js";
|
|
20
|
+
import { t as resolveChannelDefaultAccountId } from "./helpers-HyeZXsnu.js";
|
|
21
|
+
import { t as scanDirectoryWithSummary } from "./skill-scanner-CucvxYhu.js";
|
|
21
22
|
import os from "node:os";
|
|
22
23
|
import path from "node:path";
|
|
23
24
|
import JSON5 from "json5";
|
|
@@ -109,6 +110,143 @@ async function probeGateway(opts) {
|
|
|
109
110
|
});
|
|
110
111
|
}
|
|
111
112
|
|
|
113
|
+
//#endregion
|
|
114
|
+
//#region src/gateway/node-command-policy.ts
|
|
115
|
+
const CANVAS_COMMANDS = [
|
|
116
|
+
"canvas.present",
|
|
117
|
+
"canvas.hide",
|
|
118
|
+
"canvas.navigate",
|
|
119
|
+
"canvas.eval",
|
|
120
|
+
"canvas.snapshot",
|
|
121
|
+
"canvas.a2ui.push",
|
|
122
|
+
"canvas.a2ui.pushJSONL",
|
|
123
|
+
"canvas.a2ui.reset"
|
|
124
|
+
];
|
|
125
|
+
const CAMERA_COMMANDS = ["camera.list"];
|
|
126
|
+
const CAMERA_DANGEROUS_COMMANDS = ["camera.snap", "camera.clip"];
|
|
127
|
+
const SCREEN_DANGEROUS_COMMANDS = ["screen.record"];
|
|
128
|
+
const LOCATION_COMMANDS = ["location.get"];
|
|
129
|
+
const DEVICE_COMMANDS = ["device.info", "device.status"];
|
|
130
|
+
const CONTACTS_COMMANDS = ["contacts.search"];
|
|
131
|
+
const CONTACTS_DANGEROUS_COMMANDS = ["contacts.add"];
|
|
132
|
+
const CALENDAR_COMMANDS = ["calendar.events"];
|
|
133
|
+
const CALENDAR_DANGEROUS_COMMANDS = ["calendar.add"];
|
|
134
|
+
const REMINDERS_COMMANDS = ["reminders.list"];
|
|
135
|
+
const REMINDERS_DANGEROUS_COMMANDS = ["reminders.add"];
|
|
136
|
+
const PHOTOS_COMMANDS = ["photos.latest"];
|
|
137
|
+
const MOTION_COMMANDS = ["motion.activity", "motion.pedometer"];
|
|
138
|
+
const SMS_DANGEROUS_COMMANDS = ["sms.send"];
|
|
139
|
+
const IOS_SYSTEM_COMMANDS = ["system.notify"];
|
|
140
|
+
const SYSTEM_COMMANDS = [
|
|
141
|
+
"system.run",
|
|
142
|
+
"system.which",
|
|
143
|
+
"system.notify",
|
|
144
|
+
"system.execApprovals.get",
|
|
145
|
+
"system.execApprovals.set",
|
|
146
|
+
"browser.proxy"
|
|
147
|
+
];
|
|
148
|
+
const DEFAULT_DANGEROUS_NODE_COMMANDS = [
|
|
149
|
+
...CAMERA_DANGEROUS_COMMANDS,
|
|
150
|
+
...SCREEN_DANGEROUS_COMMANDS,
|
|
151
|
+
...CONTACTS_DANGEROUS_COMMANDS,
|
|
152
|
+
...CALENDAR_DANGEROUS_COMMANDS,
|
|
153
|
+
...REMINDERS_DANGEROUS_COMMANDS,
|
|
154
|
+
...SMS_DANGEROUS_COMMANDS
|
|
155
|
+
];
|
|
156
|
+
const PLATFORM_DEFAULTS = {
|
|
157
|
+
ios: [
|
|
158
|
+
...CANVAS_COMMANDS,
|
|
159
|
+
...CAMERA_COMMANDS,
|
|
160
|
+
...LOCATION_COMMANDS,
|
|
161
|
+
...DEVICE_COMMANDS,
|
|
162
|
+
...CONTACTS_COMMANDS,
|
|
163
|
+
...CALENDAR_COMMANDS,
|
|
164
|
+
...REMINDERS_COMMANDS,
|
|
165
|
+
...PHOTOS_COMMANDS,
|
|
166
|
+
...MOTION_COMMANDS,
|
|
167
|
+
...IOS_SYSTEM_COMMANDS
|
|
168
|
+
],
|
|
169
|
+
android: [
|
|
170
|
+
...CANVAS_COMMANDS,
|
|
171
|
+
...CAMERA_COMMANDS,
|
|
172
|
+
...LOCATION_COMMANDS,
|
|
173
|
+
...DEVICE_COMMANDS,
|
|
174
|
+
...CONTACTS_COMMANDS,
|
|
175
|
+
...CALENDAR_COMMANDS,
|
|
176
|
+
...REMINDERS_COMMANDS,
|
|
177
|
+
...PHOTOS_COMMANDS,
|
|
178
|
+
...MOTION_COMMANDS
|
|
179
|
+
],
|
|
180
|
+
macos: [
|
|
181
|
+
...CANVAS_COMMANDS,
|
|
182
|
+
...CAMERA_COMMANDS,
|
|
183
|
+
...LOCATION_COMMANDS,
|
|
184
|
+
...DEVICE_COMMANDS,
|
|
185
|
+
...CONTACTS_COMMANDS,
|
|
186
|
+
...CALENDAR_COMMANDS,
|
|
187
|
+
...REMINDERS_COMMANDS,
|
|
188
|
+
...PHOTOS_COMMANDS,
|
|
189
|
+
...MOTION_COMMANDS,
|
|
190
|
+
...SYSTEM_COMMANDS
|
|
191
|
+
],
|
|
192
|
+
linux: [...SYSTEM_COMMANDS],
|
|
193
|
+
windows: [...SYSTEM_COMMANDS],
|
|
194
|
+
unknown: [
|
|
195
|
+
...CANVAS_COMMANDS,
|
|
196
|
+
...CAMERA_COMMANDS,
|
|
197
|
+
...LOCATION_COMMANDS,
|
|
198
|
+
...SYSTEM_COMMANDS
|
|
199
|
+
]
|
|
200
|
+
};
|
|
201
|
+
function normalizePlatformId(platform, deviceFamily) {
|
|
202
|
+
const raw = (platform ?? "").trim().toLowerCase();
|
|
203
|
+
if (raw.startsWith("ios")) return "ios";
|
|
204
|
+
if (raw.startsWith("android")) return "android";
|
|
205
|
+
if (raw.startsWith("mac")) return "macos";
|
|
206
|
+
if (raw.startsWith("darwin")) return "macos";
|
|
207
|
+
if (raw.startsWith("win")) return "windows";
|
|
208
|
+
if (raw.startsWith("linux")) return "linux";
|
|
209
|
+
const family = (deviceFamily ?? "").trim().toLowerCase();
|
|
210
|
+
if (family.includes("iphone") || family.includes("ipad") || family.includes("ios")) return "ios";
|
|
211
|
+
if (family.includes("android")) return "android";
|
|
212
|
+
if (family.includes("mac")) return "macos";
|
|
213
|
+
if (family.includes("windows")) return "windows";
|
|
214
|
+
if (family.includes("linux")) return "linux";
|
|
215
|
+
return "unknown";
|
|
216
|
+
}
|
|
217
|
+
function resolveNodeCommandAllowlist(cfg, node) {
|
|
218
|
+
const base = PLATFORM_DEFAULTS[normalizePlatformId(node?.platform, node?.deviceFamily)] ?? PLATFORM_DEFAULTS.unknown;
|
|
219
|
+
const extra = cfg.gateway?.nodes?.allowCommands ?? [];
|
|
220
|
+
const deny = new Set(cfg.gateway?.nodes?.denyCommands ?? []);
|
|
221
|
+
const allow = new Set([...base, ...extra].map((cmd) => cmd.trim()).filter(Boolean));
|
|
222
|
+
for (const blocked of deny) {
|
|
223
|
+
const trimmed = blocked.trim();
|
|
224
|
+
if (trimmed) allow.delete(trimmed);
|
|
225
|
+
}
|
|
226
|
+
return allow;
|
|
227
|
+
}
|
|
228
|
+
function isNodeCommandAllowed(params) {
|
|
229
|
+
const command = params.command.trim();
|
|
230
|
+
if (!command) return {
|
|
231
|
+
ok: false,
|
|
232
|
+
reason: "command required"
|
|
233
|
+
};
|
|
234
|
+
if (!params.allowlist.has(command)) return {
|
|
235
|
+
ok: false,
|
|
236
|
+
reason: "command not allowlisted"
|
|
237
|
+
};
|
|
238
|
+
if (Array.isArray(params.declaredCommands) && params.declaredCommands.length > 0) {
|
|
239
|
+
if (!params.declaredCommands.includes(command)) return {
|
|
240
|
+
ok: false,
|
|
241
|
+
reason: "command not declared by node"
|
|
242
|
+
};
|
|
243
|
+
} else return {
|
|
244
|
+
ok: false,
|
|
245
|
+
reason: "node did not declare commands"
|
|
246
|
+
};
|
|
247
|
+
return { ok: true };
|
|
248
|
+
}
|
|
249
|
+
|
|
112
250
|
//#endregion
|
|
113
251
|
//#region src/security/audit-extra.sync.ts
|
|
114
252
|
const SMALL_MODEL_PARAM_B_MAX = 300;
|
|
@@ -143,6 +281,11 @@ function looksLikeEnvRef(value) {
|
|
|
143
281
|
const v = value.trim();
|
|
144
282
|
return v.startsWith("${") && v.endsWith("}");
|
|
145
283
|
}
|
|
284
|
+
function isGatewayRemotelyExposed(cfg) {
|
|
285
|
+
if ((typeof cfg.gateway?.bind === "string" ? cfg.gateway.bind : "loopback") !== "loopback") return true;
|
|
286
|
+
const tailscaleMode = cfg.gateway?.tailscale?.mode ?? "off";
|
|
287
|
+
return tailscaleMode === "serve" || tailscaleMode === "funnel";
|
|
288
|
+
}
|
|
146
289
|
function addModel(models, raw, source) {
|
|
147
290
|
if (typeof raw !== "string") return;
|
|
148
291
|
const id = raw.trim();
|
|
@@ -221,9 +364,14 @@ function isClaude45OrHigher(id) {
|
|
|
221
364
|
function extractAgentIdFromSource(source) {
|
|
222
365
|
return source.match(/^agents\.list\.([^.]*)\./)?.[1] ?? null;
|
|
223
366
|
}
|
|
224
|
-
function
|
|
367
|
+
function unionAllow$1(base, extra) {
|
|
368
|
+
if (!Array.isArray(extra) || extra.length === 0) return base;
|
|
369
|
+
if (!Array.isArray(base) || base.length === 0) return Array.from(new Set(["*", ...extra]));
|
|
370
|
+
return Array.from(new Set([...base, ...extra]));
|
|
371
|
+
}
|
|
372
|
+
function pickToolPolicy$1(config) {
|
|
225
373
|
if (!config) return null;
|
|
226
|
-
const allow = Array.isArray(config.allow) ? config.allow : void 0;
|
|
374
|
+
const allow = Array.isArray(config.allow) ? unionAllow$1(config.allow, config.alsoAllow) : Array.isArray(config.alsoAllow) && config.alsoAllow.length > 0 ? unionAllow$1(void 0, config.alsoAllow) : void 0;
|
|
227
375
|
const deny = Array.isArray(config.deny) ? config.deny : void 0;
|
|
228
376
|
if (!allow && !deny) return null;
|
|
229
377
|
return {
|
|
@@ -231,13 +379,54 @@ function pickToolPolicy(config) {
|
|
|
231
379
|
deny
|
|
232
380
|
};
|
|
233
381
|
}
|
|
234
|
-
function
|
|
382
|
+
function hasConfiguredDockerConfig(docker) {
|
|
383
|
+
if (!docker || typeof docker !== "object") return false;
|
|
384
|
+
return Object.values(docker).some((value) => value !== void 0);
|
|
385
|
+
}
|
|
386
|
+
function normalizeNodeCommand(value) {
|
|
387
|
+
return typeof value === "string" ? value.trim() : "";
|
|
388
|
+
}
|
|
389
|
+
function listKnownNodeCommands(cfg) {
|
|
390
|
+
const baseCfg = {
|
|
391
|
+
...cfg,
|
|
392
|
+
gateway: {
|
|
393
|
+
...cfg.gateway,
|
|
394
|
+
nodes: {
|
|
395
|
+
...cfg.gateway?.nodes,
|
|
396
|
+
denyCommands: []
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
};
|
|
400
|
+
const out = /* @__PURE__ */ new Set();
|
|
401
|
+
for (const platform of [
|
|
402
|
+
"ios",
|
|
403
|
+
"android",
|
|
404
|
+
"macos",
|
|
405
|
+
"linux",
|
|
406
|
+
"windows",
|
|
407
|
+
"unknown"
|
|
408
|
+
]) {
|
|
409
|
+
const allow = resolveNodeCommandAllowlist(baseCfg, { platform });
|
|
410
|
+
for (const cmd of allow) {
|
|
411
|
+
const normalized = normalizeNodeCommand(cmd);
|
|
412
|
+
if (normalized) out.add(normalized);
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
return out;
|
|
416
|
+
}
|
|
417
|
+
function looksLikeNodeCommandPattern(value) {
|
|
418
|
+
if (!value) return false;
|
|
419
|
+
if (/[?*[\]{}(),|]/.test(value)) return true;
|
|
420
|
+
if (value.startsWith("/") || value.endsWith("/") || value.startsWith("^") || value.endsWith("$")) return true;
|
|
421
|
+
return /\s/.test(value) || value.includes("group:");
|
|
422
|
+
}
|
|
423
|
+
function resolveToolPolicies$1(params) {
|
|
235
424
|
const policies = [];
|
|
236
425
|
const profilePolicy = resolveToolProfilePolicy(params.agentTools?.profile ?? params.cfg.tools?.profile);
|
|
237
426
|
if (profilePolicy) policies.push(profilePolicy);
|
|
238
|
-
const globalPolicy = pickToolPolicy(params.cfg.tools ?? void 0);
|
|
427
|
+
const globalPolicy = pickToolPolicy$1(params.cfg.tools ?? void 0);
|
|
239
428
|
if (globalPolicy) policies.push(globalPolicy);
|
|
240
|
-
const agentPolicy = pickToolPolicy(params.agentTools);
|
|
429
|
+
const agentPolicy = pickToolPolicy$1(params.agentTools);
|
|
241
430
|
if (agentPolicy) policies.push(agentPolicy);
|
|
242
431
|
if (params.sandboxMode === "all") {
|
|
243
432
|
const sandboxPolicy = resolveSandboxToolPolicyForAgent(params.cfg, params.agentId ?? void 0);
|
|
@@ -285,13 +474,14 @@ function listGroupPolicyOpen(cfg) {
|
|
|
285
474
|
function collectAttackSurfaceSummaryFindings(cfg) {
|
|
286
475
|
const group = summarizeGroupPolicy(cfg);
|
|
287
476
|
const elevated = cfg.tools?.elevated?.enabled !== false;
|
|
288
|
-
const
|
|
477
|
+
const webhooksEnabled = cfg.hooks?.enabled === true;
|
|
478
|
+
const internalHooksEnabled = cfg.hooks?.internal?.enabled === true;
|
|
289
479
|
const browserEnabled = cfg.browser?.enabled ?? true;
|
|
290
480
|
return [{
|
|
291
481
|
checkId: "summary.attack_surface",
|
|
292
482
|
severity: "info",
|
|
293
483
|
title: "Attack surface summary",
|
|
294
|
-
detail: `groups: open=${group.open}, allowlist=${group.allowlist}\ntools.elevated: ${elevated ? "enabled" : "disabled"}\nhooks: ${
|
|
484
|
+
detail: `groups: open=${group.open}, allowlist=${group.allowlist}\ntools.elevated: ${elevated ? "enabled" : "disabled"}\nhooks.webhooks: ${webhooksEnabled ? "enabled" : "disabled"}\nhooks.internal: ${internalHooksEnabled ? "enabled" : "disabled"}\nbrowser control: ${browserEnabled ? "enabled" : "disabled"}`
|
|
295
485
|
}];
|
|
296
486
|
}
|
|
297
487
|
function collectSyncedFolderFindings(params) {
|
|
@@ -353,6 +543,97 @@ function collectHooksHardeningFindings(cfg) {
|
|
|
353
543
|
detail: "hooks.path='/' would shadow other HTTP endpoints and is unsafe.",
|
|
354
544
|
remediation: "Use a dedicated path like '/hooks'."
|
|
355
545
|
});
|
|
546
|
+
const allowRequestSessionKey = cfg.hooks?.allowRequestSessionKey === true;
|
|
547
|
+
const defaultSessionKey = typeof cfg.hooks?.defaultSessionKey === "string" ? cfg.hooks.defaultSessionKey.trim() : "";
|
|
548
|
+
const allowedPrefixes = Array.isArray(cfg.hooks?.allowedSessionKeyPrefixes) ? cfg.hooks.allowedSessionKeyPrefixes.map((prefix) => prefix.trim()).filter((prefix) => prefix.length > 0) : [];
|
|
549
|
+
const remoteExposure = isGatewayRemotelyExposed(cfg);
|
|
550
|
+
if (!defaultSessionKey) findings.push({
|
|
551
|
+
checkId: "hooks.default_session_key_unset",
|
|
552
|
+
severity: "warn",
|
|
553
|
+
title: "hooks.defaultSessionKey is not configured",
|
|
554
|
+
detail: "Hook agent runs without explicit sessionKey use generated per-request keys. Set hooks.defaultSessionKey to keep hook ingress scoped to a known session.",
|
|
555
|
+
remediation: "Set hooks.defaultSessionKey (for example, \"hook:ingress\")."
|
|
556
|
+
});
|
|
557
|
+
if (allowRequestSessionKey) findings.push({
|
|
558
|
+
checkId: "hooks.request_session_key_enabled",
|
|
559
|
+
severity: remoteExposure ? "critical" : "warn",
|
|
560
|
+
title: "External hook payloads may override sessionKey",
|
|
561
|
+
detail: "hooks.allowRequestSessionKey=true allows `/hooks/agent` callers to choose the session key. Treat hook token holders as full-trust unless you also restrict prefixes.",
|
|
562
|
+
remediation: "Set hooks.allowRequestSessionKey=false (recommended) or constrain hooks.allowedSessionKeyPrefixes."
|
|
563
|
+
});
|
|
564
|
+
if (allowRequestSessionKey && allowedPrefixes.length === 0) findings.push({
|
|
565
|
+
checkId: "hooks.request_session_key_prefixes_missing",
|
|
566
|
+
severity: remoteExposure ? "critical" : "warn",
|
|
567
|
+
title: "Request sessionKey override is enabled without prefix restrictions",
|
|
568
|
+
detail: "hooks.allowRequestSessionKey=true and hooks.allowedSessionKeyPrefixes is unset/empty, so request payloads can target arbitrary session key shapes.",
|
|
569
|
+
remediation: "Set hooks.allowedSessionKeyPrefixes (for example, [\"hook:\"]) or disable request overrides."
|
|
570
|
+
});
|
|
571
|
+
return findings;
|
|
572
|
+
}
|
|
573
|
+
function collectSandboxDockerNoopFindings(cfg) {
|
|
574
|
+
const findings = [];
|
|
575
|
+
const configuredPaths = [];
|
|
576
|
+
const agents = Array.isArray(cfg.agents?.list) ? cfg.agents.list : [];
|
|
577
|
+
const defaultsSandbox = cfg.agents?.defaults?.sandbox;
|
|
578
|
+
const hasDefaultDocker = hasConfiguredDockerConfig(defaultsSandbox?.docker);
|
|
579
|
+
const defaultMode = defaultsSandbox?.mode ?? "off";
|
|
580
|
+
const hasAnySandboxEnabledAgent = agents.some((entry) => {
|
|
581
|
+
if (!entry || typeof entry !== "object" || typeof entry.id !== "string") return false;
|
|
582
|
+
return resolveSandboxConfigForAgent(cfg, entry.id).mode !== "off";
|
|
583
|
+
});
|
|
584
|
+
if (hasDefaultDocker && defaultMode === "off" && !hasAnySandboxEnabledAgent) configuredPaths.push("agents.defaults.sandbox.docker");
|
|
585
|
+
for (const entry of agents) {
|
|
586
|
+
if (!entry || typeof entry !== "object" || typeof entry.id !== "string") continue;
|
|
587
|
+
if (!hasConfiguredDockerConfig(entry.sandbox?.docker)) continue;
|
|
588
|
+
if (resolveSandboxConfigForAgent(cfg, entry.id).mode === "off") configuredPaths.push(`agents.list.${entry.id}.sandbox.docker`);
|
|
589
|
+
}
|
|
590
|
+
if (configuredPaths.length === 0) return findings;
|
|
591
|
+
findings.push({
|
|
592
|
+
checkId: "sandbox.docker_config_mode_off",
|
|
593
|
+
severity: "warn",
|
|
594
|
+
title: "Sandbox docker settings configured while sandbox mode is off",
|
|
595
|
+
detail: "These docker settings will not take effect until sandbox mode is enabled:\n" + configuredPaths.map((entry) => `- ${entry}`).join("\n"),
|
|
596
|
+
remediation: "Enable sandbox mode (`agents.defaults.sandbox.mode=\"non-main\"` or `\"all\"`) where needed, or remove unused docker settings."
|
|
597
|
+
});
|
|
598
|
+
return findings;
|
|
599
|
+
}
|
|
600
|
+
function collectNodeDenyCommandPatternFindings(cfg) {
|
|
601
|
+
const findings = [];
|
|
602
|
+
const denyListRaw = cfg.gateway?.nodes?.denyCommands;
|
|
603
|
+
if (!Array.isArray(denyListRaw) || denyListRaw.length === 0) return findings;
|
|
604
|
+
const denyList = denyListRaw.map(normalizeNodeCommand).filter(Boolean);
|
|
605
|
+
if (denyList.length === 0) return findings;
|
|
606
|
+
const knownCommands = listKnownNodeCommands(cfg);
|
|
607
|
+
const patternLike = denyList.filter((entry) => looksLikeNodeCommandPattern(entry));
|
|
608
|
+
const unknownExact = denyList.filter((entry) => !looksLikeNodeCommandPattern(entry) && !knownCommands.has(entry));
|
|
609
|
+
if (patternLike.length === 0 && unknownExact.length === 0) return findings;
|
|
610
|
+
const detailParts = [];
|
|
611
|
+
if (patternLike.length > 0) detailParts.push(`Pattern-like entries (not supported by exact matching): ${patternLike.join(", ")}`);
|
|
612
|
+
if (unknownExact.length > 0) detailParts.push(`Unknown command names (not in defaults/allowCommands): ${unknownExact.join(", ")}`);
|
|
613
|
+
const examples = Array.from(knownCommands).slice(0, 8);
|
|
614
|
+
findings.push({
|
|
615
|
+
checkId: "gateway.nodes.deny_commands_ineffective",
|
|
616
|
+
severity: "warn",
|
|
617
|
+
title: "Some gateway.nodes.denyCommands entries are ineffective",
|
|
618
|
+
detail: "gateway.nodes.denyCommands uses exact command-name matching only.\n" + detailParts.map((entry) => `- ${entry}`).join("\n"),
|
|
619
|
+
remediation: `Use exact command names (for example: ${examples.join(", ")}). If you need broader restrictions, remove risky commands from allowCommands/default workflows.`
|
|
620
|
+
});
|
|
621
|
+
return findings;
|
|
622
|
+
}
|
|
623
|
+
function collectMinimalProfileOverrideFindings(cfg) {
|
|
624
|
+
const findings = [];
|
|
625
|
+
if (cfg.tools?.profile !== "minimal") return findings;
|
|
626
|
+
const overrides = (cfg.agents?.list ?? []).filter((entry) => {
|
|
627
|
+
return Boolean(entry && typeof entry === "object" && typeof entry.id === "string" && entry.tools?.profile && entry.tools.profile !== "minimal");
|
|
628
|
+
}).map((entry) => `${entry.id}=${entry.tools?.profile}`);
|
|
629
|
+
if (overrides.length === 0) return findings;
|
|
630
|
+
findings.push({
|
|
631
|
+
checkId: "tools.profile_minimal_overridden",
|
|
632
|
+
severity: "warn",
|
|
633
|
+
title: "Global tools.profile=minimal is overridden by agent profiles",
|
|
634
|
+
detail: "Global minimal profile is set, but these agent profiles take precedence:\n" + overrides.map((entry) => `- agents.list.${entry}`).join("\n"),
|
|
635
|
+
remediation: "Set those agents to `tools.profile=\"minimal\"` (or remove the agent override) if you want minimal tools enforced globally."
|
|
636
|
+
});
|
|
356
637
|
return findings;
|
|
357
638
|
}
|
|
358
639
|
function collectModelHygieneFindings(cfg) {
|
|
@@ -434,7 +715,7 @@ function collectSmallModelRiskFindings(params) {
|
|
|
434
715
|
const agentId = extractAgentIdFromSource(entry.source);
|
|
435
716
|
const sandboxMode = resolveSandboxConfigForAgent(params.cfg, agentId ?? void 0).mode;
|
|
436
717
|
const agentTools = agentId && params.cfg.agents?.list ? params.cfg.agents.list.find((agent) => agent?.id === agentId)?.tools : void 0;
|
|
437
|
-
const policies = resolveToolPolicies({
|
|
718
|
+
const policies = resolveToolPolicies$1({
|
|
438
719
|
cfg: params.cfg,
|
|
439
720
|
agentTools,
|
|
440
721
|
sandboxMode,
|
|
@@ -860,6 +1141,68 @@ function formatCodeSafetyDetails(findings, rootDir) {
|
|
|
860
1141
|
return ` - [${finding.ruleId}] ${finding.message} (${normalizedPath}:${finding.line})`;
|
|
861
1142
|
}).join("\n");
|
|
862
1143
|
}
|
|
1144
|
+
function unionAllow(base, extra) {
|
|
1145
|
+
if (!Array.isArray(extra) || extra.length === 0) return base;
|
|
1146
|
+
if (!Array.isArray(base) || base.length === 0) return Array.from(new Set(["*", ...extra]));
|
|
1147
|
+
return Array.from(new Set([...base, ...extra]));
|
|
1148
|
+
}
|
|
1149
|
+
function pickToolPolicy(config) {
|
|
1150
|
+
if (!config) return;
|
|
1151
|
+
const allow = Array.isArray(config.allow) ? unionAllow(config.allow, config.alsoAllow) : Array.isArray(config.alsoAllow) && config.alsoAllow.length > 0 ? unionAllow(void 0, config.alsoAllow) : void 0;
|
|
1152
|
+
const deny = Array.isArray(config.deny) ? config.deny : void 0;
|
|
1153
|
+
if (!allow && !deny) return;
|
|
1154
|
+
return {
|
|
1155
|
+
allow,
|
|
1156
|
+
deny
|
|
1157
|
+
};
|
|
1158
|
+
}
|
|
1159
|
+
function resolveToolPolicies(params) {
|
|
1160
|
+
const policies = [
|
|
1161
|
+
resolveToolProfilePolicy(params.agentTools?.profile ?? params.cfg.tools?.profile),
|
|
1162
|
+
pickToolPolicy(params.cfg.tools ?? void 0),
|
|
1163
|
+
pickToolPolicy(params.agentTools)
|
|
1164
|
+
];
|
|
1165
|
+
if (params.sandboxMode === "all") policies.push(resolveSandboxToolPolicyForAgent(params.cfg, params.agentId ?? void 0));
|
|
1166
|
+
return policies;
|
|
1167
|
+
}
|
|
1168
|
+
function normalizePluginIdSet(entries) {
|
|
1169
|
+
return new Set(entries.map((entry) => entry.trim().toLowerCase()).filter(Boolean));
|
|
1170
|
+
}
|
|
1171
|
+
function resolveEnabledExtensionPluginIds(params) {
|
|
1172
|
+
const normalized = normalizePluginsConfig(params.cfg.plugins);
|
|
1173
|
+
if (!normalized.enabled) return [];
|
|
1174
|
+
const allowSet = normalizePluginIdSet(normalized.allow);
|
|
1175
|
+
const denySet = normalizePluginIdSet(normalized.deny);
|
|
1176
|
+
const entryById = /* @__PURE__ */ new Map();
|
|
1177
|
+
for (const [id, entry] of Object.entries(normalized.entries)) entryById.set(id.trim().toLowerCase(), entry);
|
|
1178
|
+
const enabled = [];
|
|
1179
|
+
for (const id of params.pluginDirs) {
|
|
1180
|
+
const normalizedId = id.trim().toLowerCase();
|
|
1181
|
+
if (!normalizedId) continue;
|
|
1182
|
+
if (denySet.has(normalizedId)) continue;
|
|
1183
|
+
if (allowSet.size > 0 && !allowSet.has(normalizedId)) continue;
|
|
1184
|
+
if (entryById.get(normalizedId)?.enabled === false) continue;
|
|
1185
|
+
enabled.push(normalizedId);
|
|
1186
|
+
}
|
|
1187
|
+
return enabled;
|
|
1188
|
+
}
|
|
1189
|
+
function collectAllowEntries(config) {
|
|
1190
|
+
const out = [];
|
|
1191
|
+
if (Array.isArray(config?.allow)) out.push(...config.allow);
|
|
1192
|
+
if (Array.isArray(config?.alsoAllow)) out.push(...config.alsoAllow);
|
|
1193
|
+
return out.map((entry) => entry.trim().toLowerCase()).filter(Boolean);
|
|
1194
|
+
}
|
|
1195
|
+
function hasExplicitPluginAllow(params) {
|
|
1196
|
+
return params.allowEntries.some((entry) => entry === "group:plugins" || params.enabledPluginIds.has(entry));
|
|
1197
|
+
}
|
|
1198
|
+
function hasProviderPluginAllow(params) {
|
|
1199
|
+
if (!params.byProvider) return false;
|
|
1200
|
+
for (const policy of Object.values(params.byProvider)) if (hasExplicitPluginAllow({
|
|
1201
|
+
allowEntries: collectAllowEntries(policy),
|
|
1202
|
+
enabledPluginIds: params.enabledPluginIds
|
|
1203
|
+
})) return true;
|
|
1204
|
+
return false;
|
|
1205
|
+
}
|
|
863
1206
|
async function collectPluginsTrustFindings(params) {
|
|
864
1207
|
const findings = [];
|
|
865
1208
|
const extensionsDir = path.join(params.stateDir, "extensions");
|
|
@@ -895,6 +1238,55 @@ async function collectPluginsTrustFindings(params) {
|
|
|
895
1238
|
remediation: "Set plugins.allow to an explicit list of plugin ids you trust."
|
|
896
1239
|
});
|
|
897
1240
|
}
|
|
1241
|
+
const enabledExtensionPluginIds = resolveEnabledExtensionPluginIds({
|
|
1242
|
+
cfg: params.cfg,
|
|
1243
|
+
pluginDirs
|
|
1244
|
+
});
|
|
1245
|
+
if (enabledExtensionPluginIds.length > 0) {
|
|
1246
|
+
const enabledPluginSet = new Set(enabledExtensionPluginIds);
|
|
1247
|
+
const contexts = [{ label: "default" }];
|
|
1248
|
+
for (const entry of params.cfg.agents?.list ?? []) {
|
|
1249
|
+
if (!entry || typeof entry !== "object" || typeof entry.id !== "string") continue;
|
|
1250
|
+
contexts.push({
|
|
1251
|
+
label: `agents.list.${entry.id}`,
|
|
1252
|
+
agentId: entry.id,
|
|
1253
|
+
tools: entry.tools
|
|
1254
|
+
});
|
|
1255
|
+
}
|
|
1256
|
+
const permissiveContexts = [];
|
|
1257
|
+
for (const context of contexts) {
|
|
1258
|
+
const profile = context.tools?.profile ?? params.cfg.tools?.profile;
|
|
1259
|
+
const restrictiveProfile = Boolean(resolveToolProfilePolicy(profile));
|
|
1260
|
+
const sandboxMode = resolveSandboxConfigForAgent(params.cfg, context.agentId).mode;
|
|
1261
|
+
const broadPolicy = isToolAllowedByPolicies("__openclaw_plugin_probe__", resolveToolPolicies({
|
|
1262
|
+
cfg: params.cfg,
|
|
1263
|
+
agentTools: context.tools,
|
|
1264
|
+
sandboxMode,
|
|
1265
|
+
agentId: context.agentId
|
|
1266
|
+
}));
|
|
1267
|
+
const explicitPluginAllow = !restrictiveProfile && (hasExplicitPluginAllow({
|
|
1268
|
+
allowEntries: collectAllowEntries(params.cfg.tools),
|
|
1269
|
+
enabledPluginIds: enabledPluginSet
|
|
1270
|
+
}) || hasProviderPluginAllow({
|
|
1271
|
+
byProvider: params.cfg.tools?.byProvider,
|
|
1272
|
+
enabledPluginIds: enabledPluginSet
|
|
1273
|
+
}) || hasExplicitPluginAllow({
|
|
1274
|
+
allowEntries: collectAllowEntries(context.tools),
|
|
1275
|
+
enabledPluginIds: enabledPluginSet
|
|
1276
|
+
}) || hasProviderPluginAllow({
|
|
1277
|
+
byProvider: context.tools?.byProvider,
|
|
1278
|
+
enabledPluginIds: enabledPluginSet
|
|
1279
|
+
}));
|
|
1280
|
+
if (broadPolicy || explicitPluginAllow) permissiveContexts.push(context.label);
|
|
1281
|
+
}
|
|
1282
|
+
if (permissiveContexts.length > 0) findings.push({
|
|
1283
|
+
checkId: "plugins.tools_reachable_permissive_policy",
|
|
1284
|
+
severity: "warn",
|
|
1285
|
+
title: "Extension plugin tools may be reachable under permissive tool policy",
|
|
1286
|
+
detail: `Enabled extension plugins: ${enabledExtensionPluginIds.join(", ")}.\nPermissive tool policy contexts:\n${permissiveContexts.map((entry) => `- ${entry}`).join("\n")}`,
|
|
1287
|
+
remediation: "Use restrictive profiles (`minimal`/`coding`) or explicit tool allowlists that exclude plugin tools for agents handling untrusted input."
|
|
1288
|
+
});
|
|
1289
|
+
}
|
|
898
1290
|
return findings;
|
|
899
1291
|
}
|
|
900
1292
|
async function collectIncludeFilePermFindings(params) {
|
|
@@ -1361,6 +1753,7 @@ function collectGatewayConfigFindings(cfg, env) {
|
|
|
1361
1753
|
const hasSharedSecret = auth.mode === "token" && hasToken || auth.mode === "password" && hasPassword;
|
|
1362
1754
|
const hasTailscaleAuth = auth.allowTailscale && tailscaleMode === "serve";
|
|
1363
1755
|
const hasGatewayAuth = hasSharedSecret || hasTailscaleAuth;
|
|
1756
|
+
const remotelyExposed = bind !== "loopback" || tailscaleMode === "serve" || tailscaleMode === "funnel";
|
|
1364
1757
|
if (bind !== "loopback" && !hasSharedSecret) findings.push({
|
|
1365
1758
|
checkId: "gateway.bind_no_auth",
|
|
1366
1759
|
severity: "critical",
|
|
@@ -1416,9 +1809,28 @@ function collectGatewayConfigFindings(cfg, env) {
|
|
|
1416
1809
|
title: "Gateway token looks short",
|
|
1417
1810
|
detail: `gateway auth token is ${token.length} chars; prefer a long random token.`
|
|
1418
1811
|
});
|
|
1812
|
+
const chatCompletionsEnabled = cfg.gateway?.http?.endpoints?.chatCompletions?.enabled === true;
|
|
1813
|
+
const responsesEnabled = cfg.gateway?.http?.endpoints?.responses?.enabled === true;
|
|
1814
|
+
if (chatCompletionsEnabled || responsesEnabled) {
|
|
1815
|
+
const enabledEndpoints = [chatCompletionsEnabled ? "/v1/chat/completions" : null, responsesEnabled ? "/v1/responses" : null].filter((value) => Boolean(value));
|
|
1816
|
+
findings.push({
|
|
1817
|
+
checkId: "gateway.http.session_key_override_enabled",
|
|
1818
|
+
severity: remotelyExposed ? "warn" : "info",
|
|
1819
|
+
title: "HTTP APIs accept explicit session key override headers",
|
|
1820
|
+
detail: `${enabledEndpoints.join(", ")} support x-openclaw-session-key. Any authenticated caller can route requests into arbitrary sessions.`,
|
|
1821
|
+
remediation: "Treat HTTP API credentials as full-trust, disable unused endpoints, and avoid sharing tokens across tenants."
|
|
1822
|
+
});
|
|
1823
|
+
}
|
|
1824
|
+
if (bind !== "loopback" && !cfg.gateway?.auth?.rateLimit) findings.push({
|
|
1825
|
+
checkId: "gateway.auth_no_rate_limit",
|
|
1826
|
+
severity: "warn",
|
|
1827
|
+
title: "No auth rate limiting configured",
|
|
1828
|
+
detail: "gateway.bind is not loopback but no gateway.auth.rateLimit is configured. Without rate limiting, brute-force auth attacks are not mitigated.",
|
|
1829
|
+
remediation: "Set gateway.auth.rateLimit (e.g. { maxAttempts: 10, windowMs: 60000, lockoutMs: 300000 })."
|
|
1830
|
+
});
|
|
1419
1831
|
return findings;
|
|
1420
1832
|
}
|
|
1421
|
-
function collectBrowserControlFindings(cfg) {
|
|
1833
|
+
function collectBrowserControlFindings(cfg, env) {
|
|
1422
1834
|
const findings = [];
|
|
1423
1835
|
let resolved;
|
|
1424
1836
|
try {
|
|
@@ -1434,6 +1846,14 @@ function collectBrowserControlFindings(cfg) {
|
|
|
1434
1846
|
return findings;
|
|
1435
1847
|
}
|
|
1436
1848
|
if (!resolved.enabled) return findings;
|
|
1849
|
+
const browserAuth = resolveBrowserControlAuth(cfg, env);
|
|
1850
|
+
if (!browserAuth.token && !browserAuth.password) findings.push({
|
|
1851
|
+
checkId: "browser.control_no_auth",
|
|
1852
|
+
severity: "critical",
|
|
1853
|
+
title: "Browser control has no auth",
|
|
1854
|
+
detail: "Browser control HTTP routes are enabled but no gateway.auth token/password is configured. Any local process (or SSRF to loopback) can call browser control endpoints.",
|
|
1855
|
+
remediation: "Set gateway.auth.token (recommended) or gateway.auth.password so browser control HTTP routes require authentication. Restarting the gateway will auto-generate gateway.auth.token when browser control is enabled."
|
|
1856
|
+
});
|
|
1437
1857
|
for (const name of Object.keys(resolved.profiles)) {
|
|
1438
1858
|
const profile = resolveProfile(resolved, name);
|
|
1439
1859
|
if (!profile || profile.cdpIsLoopback) continue;
|
|
@@ -1535,7 +1955,7 @@ async function collectChannelSecurityFindings(params) {
|
|
|
1535
1955
|
severity: "warn",
|
|
1536
1956
|
title: `${input.label} DMs share the main session`,
|
|
1537
1957
|
detail: "Multiple DM senders currently share the main session, which can leak context across users.",
|
|
1538
|
-
remediation: "
|
|
1958
|
+
remediation: "Run: " + formatCliCommand("openclaw config set session.dmScope \"per-channel-peer\"") + " (or \"per-account-channel-peer\" for multi-account channels) to isolate DM sessions per sender."
|
|
1539
1959
|
});
|
|
1540
1960
|
};
|
|
1541
1961
|
for (const plugin of params.plugins) {
|
|
@@ -1778,10 +2198,13 @@ async function runSecurityAudit(opts) {
|
|
|
1778
2198
|
configPath
|
|
1779
2199
|
}));
|
|
1780
2200
|
findings.push(...collectGatewayConfigFindings(cfg, env));
|
|
1781
|
-
findings.push(...collectBrowserControlFindings(cfg));
|
|
2201
|
+
findings.push(...collectBrowserControlFindings(cfg, env));
|
|
1782
2202
|
findings.push(...collectLoggingFindings(cfg));
|
|
1783
2203
|
findings.push(...collectElevatedFindings(cfg));
|
|
1784
2204
|
findings.push(...collectHooksHardeningFindings(cfg));
|
|
2205
|
+
findings.push(...collectSandboxDockerNoopFindings(cfg));
|
|
2206
|
+
findings.push(...collectNodeDenyCommandPatternFindings(cfg));
|
|
2207
|
+
findings.push(...collectMinimalProfileOverrideFindings(cfg));
|
|
1785
2208
|
findings.push(...collectSecretsInConfigFindings(cfg));
|
|
1786
2209
|
findings.push(...collectModelHygieneFindings(cfg));
|
|
1787
2210
|
findings.push(...collectSmallModelRiskFindings({
|
|
@@ -1855,4 +2278,4 @@ async function runSecurityAudit(opts) {
|
|
|
1855
2278
|
}
|
|
1856
2279
|
|
|
1857
2280
|
//#endregion
|
|
1858
|
-
export {
|
|
2281
|
+
export { resolveNodeCommandAllowlist as a, isNodeCommandAllowed as i, createIcaclsResetCommand as n, probeGateway as o, formatIcaclsResetCommand as r, runSecurityAudit as t };
|