activeclaw 2026.2.11 → 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 +106 -0
- package/dist/{accounts-DbzMEfKN.js → accounts-DCDeFTra.js} +2 -2
- package/dist/{accounts-C2elk6PC.js → accounts-DeqIQjo1.js} +2 -2
- package/dist/{acp-cli-CVFTdsQY.js → acp-cli-CeYI4XRd.js} +15 -16
- package/dist/{acp-cli-BpJwIyLl.js → acp-cli-rNbGXICg.js} +14 -15
- package/dist/{agent-Bz1r5O8q.js → agent-BvNJF5QL.js} +19 -15
- package/dist/{agent-22-R4bNS.js → agent-CyMxTyrG.js} +20 -16
- package/dist/{agent-scope-D8miw9q_.js → agent-scope-BIEhVP4_.js} +172 -4
- package/dist/{agent-scope-CGmuusG9.js → agent-scope-CQCus0rI.js} +3 -3
- package/dist/{agent-scope-DQuy3dwI.js → agent-scope-CsRbLH4l.js} +4 -4
- package/dist/{agent-scope-BEf5crnU.js → agent-scope-DPIFau3f.js} +5 -1
- package/dist/audio-preflight-BU8W7uxc.js +60 -0
- package/dist/audio-preflight-CGsumMzb.js +60 -0
- package/dist/audio-preflight-SLmkJI6-.js +74 -0
- package/dist/audio-preflight-jZc5mFCZ.js +71 -0
- package/dist/{audit-C4wLaF0D.js → audit-Dmww_503.js} +71 -19
- package/dist/{audit-CY-yopxa.js → audit-wPu26VMb.js} +72 -20
- package/dist/{tailscale-DU6DgqVy.js → auth-9x3lqfIY.js} +208 -3
- package/dist/{tailscale-Cu-2HNvU.js → auth-CQNl_IaI.js} +190 -3
- package/dist/{auth-health-BFKUoCwJ.js → auth-health-C4L4FGBA.js} +1 -1
- package/dist/{auth-health-d7BMZlWG.js → auth-health-j6epgQbq.js} +1 -1
- package/dist/{auth-profiles-Bv1AEm-Y.js → auth-profiles-ByNs3eEm.js} +87 -31
- package/dist/build-info.json +3 -3
- package/dist/bundled/boot-md/handler.js +28 -22
- package/dist/bundled/session-memory/handler.js +33 -22
- package/dist/{call-7yrB6v4I.js → call-DVYCIV8m.js} +5 -5
- package/dist/{call-Bek1xlgk.js → call-SolyGS1r.js} +6 -6
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/{channel-options-3mdYN0C_.js → channel-options-BwC2yQcR.js} +4 -4
- package/dist/{channel-options-DJ0b1m7B.js → channel-options-Cq9BVDkP.js} +12 -7
- package/dist/{channel-selection-RZimme3j.js → channel-selection-D4D6ImhN.js} +2 -2
- package/dist/{channel-selection-B9b7Kuit.js → channel-selection-MZAHm4U8.js} +2 -2
- package/dist/{channels-cli-CYbK2Dku.js → channels-cli-9Dsk9Qm7.js} +57 -53
- package/dist/{channels-cli-BFznbGOs.js → channels-cli-BJUppQll.js} +59 -55
- package/dist/{channels-status-issues-B3KkflfR.js → channels-status-issues-D7GSV1GS.js} +1 -1
- package/dist/{channels-status-issues-DQkRaZts.js → channels-status-issues-DDAWeT-6.js} +1 -1
- package/dist/{chrome-Db7w64LF.js → chrome-BfB6JdKF.js} +4 -4
- package/dist/{chrome-Dm-EgOjJ.js → chrome-Cvr-57lg.js} +6 -5
- package/dist/{chrome-CF16STk9.js → chrome-DL0avO8n.js} +2 -1
- package/dist/{chrome-yIKmOzCO.js → chrome-foEwx3lN.js} +5 -4
- package/dist/{clack-prompter-BCiBkJVr.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-Cl3PdJei.js → cli-ZR9ugUBX.js} +42 -38
- package/dist/cli-miPe4Ujz.js +93 -0
- package/dist/{client-6xKrRC-1.js → client-BrYfyoDK.js} +54 -5
- package/dist/{client-DMloFP_O.js → client-CTwXnRl7.js} +54 -5
- package/dist/{command-format-ayFsmwwz.js → command-format-Bxe0mWee.js} +1 -1
- package/dist/{command-options-BTAzyqqb.js → command-options-BvgxzPbK.js} +9 -4
- package/dist/{commands-CjEGXOZ_.js → commands-BX_OIIVR.js} +4 -4
- package/dist/{completion-cli-DrJGfJGl.js → completion-cli-CR77-jyv.js} +3 -3
- package/dist/{completion-cli-DOec3E2Z.js → completion-cli-DnjpxAag.js} +30 -30
- package/dist/{config-B00lvFac.js → config-Bdhomfei.js} +21 -7
- package/dist/{config-XBdA0ciN.js → config-BvMsmctM.js} +83 -9
- package/dist/{config-BqGVMf1y.js → config-QYrbd7x7.js} +60 -6
- package/dist/{config--NUdpACy.js → config-aFQssWKX.js} +21 -7
- package/dist/{config-guard-4kCO_rnQ.js → config-guard-CljaSxJd.js} +160 -51
- package/dist/{configure-B69emwZv.js → configure-BXLiucXo.js} +28 -25
- package/dist/{configure-sMhpLzFf.js → configure-BYPqXzGZ.js} +28 -25
- package/dist/control-auth-8Cf4WXpR.js +54 -0
- package/dist/control-auth-DBCu3qyv.js +54 -0
- package/dist/{control-service-Db_1V-KY.js → control-service-B5KnPqGP.js} +11 -5
- package/dist/{control-service-IRAmbcbN.js → control-service-DKnttEus.js} +10 -4
- package/dist/control-ui/assets/{index-CnB9IO4a.js → index-B4LPvte9.js} +369 -369
- package/dist/control-ui/assets/index-B4LPvte9.js.map +1 -0
- package/dist/control-ui/index.html +1 -1
- package/dist/{cron-cli-Cum2324v.js → cron-cli-D7BRjDv2.js} +20 -20
- package/dist/{cron-cli-DhUWcYdk.js → cron-cli-z1zk_FXQ.js} +19 -19
- package/dist/{daemon-cli-q7nkEF5-.js → daemon-cli-BDkU2ocb.js} +60 -21
- package/dist/{daemon-cli-CTC2CHci.js → daemon-cli-cNSF93-v.js} +59 -20
- package/dist/{daemon-runtime-c0uXH4Dl.js → daemon-runtime-B0tg_LsX.js} +3 -3
- package/dist/{daemon-runtime-UsK-tOty.js → daemon-runtime-Bsjeut6m.js} +3 -3
- package/dist/{deliver-hf-WKyWd.js → deliver-CIU9Npgs.js} +373 -281
- package/dist/{deliver-CT6KiDqO.js → deliver-DYYCo1G7.js} +369 -278
- package/dist/{deliver-T9d44OpZ.js → deliver-LsxKETro.js} +371 -279
- package/dist/{deliver-CPy8jYj9.js → deliver-xUU3mGHo.js} +369 -277
- package/dist/{deps-Bv1kLtwo.js → deps-QSwGcoNZ.js} +2 -2
- package/dist/{deps-DFQdAWQc.js → deps-lAAA2zYI.js} +2 -2
- package/dist/{devices-cli-Cm7U1py9.js → devices-cli-BG3-2oqt.js} +14 -14
- package/dist/{devices-cli-ZpjlfK-e.js → devices-cli-VIQtOvt_.js} +14 -14
- package/dist/{directory-cli-B14TUSJA.js → directory-cli-BCJwjVC0.js} +16 -16
- package/dist/{directory-cli-67kzd4I5.js → directory-cli-jYzZ02gk.js} +14 -14
- package/dist/{dispatcher-3ElQWGVI.js → dispatcher-DY51b-Zc.js} +2 -2
- package/dist/{dns-cli-CU-xfhTN.js → dns-cli-DHIiMJjS.js} +12 -12
- package/dist/{dns-cli-Dqj7O6Q_.js → dns-cli-pZlv87Ib.js} +11 -11
- package/dist/{docs-cli-CamBqzb5.js → docs-cli-2JDiwfzP.js} +8 -8
- package/dist/{docs-cli-Cj3L5oqB.js → docs-cli-BhkYqoIQ.js} +7 -7
- package/dist/{doctor-BV1kvbMm.js → doctor-Bf8EhNtA.js} +36 -35
- package/dist/{doctor-BJirShBi.js → doctor-sYG5V4Co.js} +34 -33
- package/dist/entry.js +56 -18
- package/dist/{env-BxRc6wWv.js → env-ONzUVAG2.js} +1 -1
- package/dist/{exec-CijMSZd9.js → exec-B8lXct-k.js} +503 -14
- package/dist/{exec-B8JKbXKW.js → exec-CACT5OAW.js} +1 -1
- package/dist/{exec-57A8Rlc8.js → exec-CJFFoM7H.js} +32 -13
- package/dist/{exec-Cv_Ofd1m.js → exec-YIosokWE.js} +1 -1
- package/dist/{exec-approvals-cli-DEzz9Iai.js → exec-approvals-cli-7LH0lwhO.js} +21 -21
- package/dist/{exec-approvals-cli-DhXj3hQX.js → exec-approvals-cli-apGnQbpj.js} +21 -21
- package/dist/extensionAPI.js +7733 -8746
- package/dist/fetch-DmiOpALK.js +274 -0
- package/dist/fetch-timeout-BEtUjM1S.js +274 -0
- package/dist/fetch-timeout-DEoXG_SF.js +274 -0
- package/dist/fetch-timeout-DTK9vxex.js +274 -0
- package/dist/{gateway-cli-D1EdIq8I.js → gateway-cli-DUdYxlZS.js} +491 -136
- package/dist/{gateway-cli-B_xDUDy2.js → gateway-cli-DbvWmE-9.js} +495 -140
- package/dist/{gateway-rpc-3B5y445n.js → gateway-rpc-BByb2Snz.js} +3 -3
- package/dist/{gateway-rpc-BoL2vinh.js → gateway-rpc-wXSCUZXj.js} +3 -3
- package/dist/{github-copilot-auth-Omqrto0J.js → github-copilot-auth-D7ewvpMd.js} +205 -17
- package/dist/{github-copilot-auth-CZxurvdz.js → github-copilot-auth-DDispnyz.js} +205 -17
- package/dist/{github-copilot-token-SLWintYd.js → github-copilot-token-Cfs0Wxr8.js} +1 -1
- package/dist/{gmail-setup-utils-BXQKsLtI.js → gmail-setup-utils-Cfns8TQx.js} +3 -3
- package/dist/{gmail-setup-utils-CHcssBOA.js → gmail-setup-utils-DJb-_5kO.js} +4 -4
- package/dist/{health-format-Dy1caGsq.js → health-format-KGPokKJH.js} +97 -42
- package/dist/{health-format-DrGFg8bx.js → health-format-LZDxu3rv.js} +95 -40
- package/dist/{help-format-DAj7l5uV.js → help-format-C48TXngO.js} +1 -1
- package/dist/{help-format-CUnac_bT.js → help-format-R5fLToDw.js} +1 -1
- package/dist/{hooks-cli-ptEf6TIM.js → hooks-cli-CT8JCRkH.js} +51 -46
- package/dist/{hooks-cli-Bhf5VRp1.js → hooks-cli-S1MKumJO.js} +49 -44
- package/dist/{hooks-status-Br-2bK2G.js → hooks-status-Cw0xD8Lt.js} +3 -3
- package/dist/{hooks-status-DNQJSa4B.js → hooks-status-D9MhwHRp.js} +3 -3
- package/dist/{image-rOFfK3PJ.js → image-Brk1sJbw.js} +10 -7
- package/dist/{image-fUwR7slg.js → image-C4Nn2p3e.js} +10 -7
- package/dist/{image-Ds4NLGPR.js → image-DgtfXMcX.js} +9 -6
- package/dist/{image-Dnnxt82I.js → image-RKwc3fsL.js} +8 -5
- package/dist/index.js +208 -97
- package/dist/{installs-CRSjQxbR.js → installs-CrLcWYHe.js} +8 -7
- package/dist/{installs-89zeUsVn.js → installs-DscWb9b9.js} +8 -7
- package/dist/{links-7M-j83As.js → links-B8LAzWwg.js} +1 -1
- package/dist/{links-C591fM9M.js → links-Eax1UO3w.js} +1 -1
- package/dist/llm-slug-generator.js +18 -19
- package/dist/{loader-wXwp4rZJ.js → loader-KjT074JR.js} +5722 -6888
- package/dist/{logging-MMRGFxGI.js → logging-BAyPwvdH.js} +1 -1
- package/dist/{logging-DuK6YXuK.js → logging-CRq4h04P.js} +2 -2
- package/dist/{login-qr-wM8BnKJh.js → login-qr-B6ZgAuIf.js} +5 -5
- package/dist/{login-qr-CPEsT6dN.js → login-qr-Bua-p0nG.js} +3 -4
- package/dist/{login-qr-CGEu5TU-.js → login-qr-CuvemJj4.js} +6 -6
- package/dist/{login-qr-DH150tTp.js → login-qr-Djr1JfIf.js} +2 -2
- package/dist/{logs-cli-ClgkHnfT.js → logs-cli-9IAV7rWY.js} +38 -22
- package/dist/{logs-cli-CmfINsOj.js → logs-cli-EiKzUFPa.js} +37 -21
- package/dist/{manager-DYo4PlVM.js → manager-BIMh_eSm.js} +7 -8
- package/dist/{manager-D6EbxDV4.js → manager-CwinWQoz.js} +5 -5
- package/dist/{manager-BbnHek5T.js → manager-DkqF1GiK.js} +9 -9
- package/dist/{manager-CcVYv0N5.js → manager-T1XfGchB.js} +8 -8
- package/dist/{manifest-registry-3It8Z8yN.js → manifest-registry-CQhdnDBZ.js} +40 -2
- package/dist/{manifest-registry-D5SiA3xq.js → manifest-registry-u0okVSkU.js} +40 -2
- package/dist/{message-channel-Cu61-7H6.js → message-channel-BLi2a6Yw.js} +1 -1
- package/dist/{message-channel-BlgPSDAh.js → message-channel-C_MmebBt.js} +1 -1
- package/dist/{model-auth-ioeR_zLX.js → model-auth-CabXIF6O.js} +116 -34
- package/dist/{model-selection-BK7DuyH8.js → model-selection-BLuqsGVB.js} +86 -30
- package/dist/{model-selection-CezC36lH.js → model-selection-C1GmkTAV.js} +84 -28
- package/dist/{models-cli-C3uGdOrd.js → models-cli-9jmDv-h3.js} +52 -48
- package/dist/{models-cli-CUIVPgXE.js → models-cli-zS9rtWz8.js} +53 -49
- package/dist/{node-cli-BxBGSuPE.js → node-cli-CrpTxTTs.js} +28 -26
- package/dist/{node-cli-CdYAsuQQ.js → node-cli-wemUMCg-.js} +28 -26
- package/dist/{node-service-u8g85nD3.js → node-service-C8DTHTMg.js} +2 -2
- package/dist/{node-service-CM5vkdIo.js → node-service-WQuEKz6W.js} +2 -2
- package/dist/{nodes-cli-By6yeCTB.js → nodes-cli-BaU2SIFw.js} +20 -20
- package/dist/{nodes-cli-BaVMTAPc.js → nodes-cli-Dx23D72n.js} +20 -20
- package/dist/{nodes-screen-Dvl_ohUY.js → nodes-screen-C0IuBqUL.js} +1 -1
- package/dist/{note-5WqioBRA.js → note-BhRSeNeu.js} +2 -2
- package/dist/{note-Ci08TSbV.js → note-hhtubr2j.js} +1 -1
- package/dist/{onboard-channels-DxXvp8og.js → onboard-channels-C501x8GI.js} +8 -8
- package/dist/{onboard-channels-CXhnVy4E.js → onboard-channels-Dxzroasd.js} +8 -8
- package/dist/{onboard-skills-CBxsRGyf.js → onboard-skills-DV0Qzvjj.js} +440 -136
- package/dist/{onboard-skills-DQwOQ6Ry.js → onboard-skills-rlBHcu3Q.js} +439 -135
- package/dist/{onboarding-Du_7qEng.js → onboarding-CN-EDLjd.js} +38 -38
- package/dist/{openclaw-root-JLDMp6ux.js → openclaw-root-1VeFrph_.js} +4 -0
- package/dist/{openclaw-root-Dw6gumSU.js → openclaw-root-BNlEap4i.js} +4 -0
- package/dist/{pairing-cli-CRQDpj8f.js → pairing-cli-CDHG4xuI.js} +15 -15
- package/dist/{pairing-cli-Cng1KFWw.js → pairing-cli-CQP34Dlx.js} +15 -15
- package/dist/{pairing-labels-Ciu3Zoxj.js → pairing-labels-B6CN0SNH.js} +1 -1
- package/dist/{pairing-labels-CWFEtSc3.js → pairing-labels-CgNHnjzT.js} +1 -1
- package/dist/{pairing-store-c-QQ2u8p.js → pairing-store-CmlRVqOz.js} +2 -2
- package/dist/{pairing-store-CgXR3ZWJ.js → pairing-store-Dp5_JGnG.js} +3 -3
- package/dist/{path-env-CXWUFfFv.js → path-env-CLvYNwtL.js} +1 -1
- package/dist/{path-env-BgLvMbz_.js → path-env-CaYUVIML.js} +2 -2
- package/dist/{paths-MnZaxqPw.js → paths-B0a4ywSO.js} +30 -5
- package/dist/{paths-Bkhd_qY8.js → paths-B49s6UZQ.js} +30 -5
- package/dist/{paths-DL6EIRTw.js → paths-D0O87MfH.js} +30 -5
- package/dist/{paths-IivnSNkP.js → paths-DLINmNFQ.js} +31 -6
- package/dist/{pi-embedded-CgPTEqlB.js → pi-embedded-Ctrt2kz0.js} +8759 -9600
- package/dist/{pi-embedded-helpers-DYH6OWft.js → pi-embedded-helpers-CMKLjW6X.js} +68 -9
- package/dist/{pi-embedded-helpers-y1_Se0yq.js → pi-embedded-helpers-CUzTc1v6.js} +241 -24
- package/dist/{pi-embedded-helpers-Bkpd4fTr.js → pi-embedded-helpers-DfwkwPYD.js} +67 -8
- package/dist/{pi-embedded-helpers-BbWRSUnc.js → pi-embedded-helpers-WDwx99UA.js} +347 -32
- package/dist/{pi-tools.policy-akYsGFiA.js → pi-tools.policy-BpsROZbz.js} +4 -4
- package/dist/{plugin-auto-enable-lZwe2yX5.js → plugin-auto-enable-Bqhc3w5n.js} +5 -5
- package/dist/{plugin-auto-enable-AOSOJ-v1.js → plugin-auto-enable-PW76g_PJ.js} +5 -5
- package/dist/plugin-sdk/agents/bash-process-registry.d.ts +1 -0
- package/dist/plugin-sdk/agents/models-config.providers.d.ts +10 -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/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/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/tools/browser-tool.schema.d.ts +1 -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/heartbeat.d.ts +1 -1
- package/dist/plugin-sdk/auto-reply/reply/get-reply-directives.d.ts +1 -0
- 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/types.d.ts +2 -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/commands/onboard-types.d.ts +7 -1
- 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/types.memory.d.ts +2 -0
- package/dist/plugin-sdk/config/zod-schema.agents.d.ts +1 -0
- package/dist/plugin-sdk/config/zod-schema.d.ts +13 -1
- package/dist/plugin-sdk/config/zod-schema.hooks.d.ts +1 -1
- 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/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.d.ts +36 -0
- package/dist/plugin-sdk/gateway/protocol/index.d.ts +0 -3
- package/dist/plugin-sdk/gateway/protocol/schema/agent.d.ts +7 -1
- package/dist/plugin-sdk/gateway/session-utils.fs.d.ts +3 -1
- package/dist/plugin-sdk/index.js +935 -660
- package/dist/plugin-sdk/infra/binaries.d.ts +3 -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/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/console.d.ts +1 -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/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-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/qmd-manager.d.ts +2 -0
- package/dist/plugin-sdk/memory/qmd-query-parser.d.ts +8 -0
- package/dist/plugin-sdk/process/command-queue.d.ts +16 -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/telegram/bot-message-context.d.ts +2 -1
- package/dist/plugin-sdk/telegram/send.d.ts +3 -0
- package/dist/plugin-sdk/web/media.d.ts +2 -0
- package/dist/{plugins-Db5BiELK.js → plugins-4Hqd1WGf.js} +3 -3
- package/dist/{plugins-CNaHNND_.js → plugins-X7d_tfTE.js} +4 -4
- package/dist/{plugins-cli-8G-hQPCu.js → plugins-cli-Bgku3EGj.js} +253 -44
- package/dist/{plugins-cli-CDiocaDE.js → plugins-cli-CVToH3if.js} +257 -48
- package/dist/{ports-BeebfNCb.js → ports-qkt29rdC.js} +2 -2
- package/dist/{program-0Cj9YxRN.js → program-Cf7lkBur.js} +82 -80
- package/dist/{progress-DIQJt9Va.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-CjQRlDx4.js → prompt-style-CIbmaxSa.js} +1 -1
- package/dist/{pw-ai-C43wv1ZF.js → pw-ai-8mdv3h-d.js} +7 -6
- package/dist/{pw-ai-COWYvUfG.js → pw-ai-CM1IsSgZ.js} +6 -6
- package/dist/{pw-ai-BxJ-KCIy.js → pw-ai-FGoRVblI.js} +5 -6
- package/dist/{pw-ai-CsvaObGM.js → pw-ai-sS1fRKW_.js} +3 -3
- package/dist/{qmd-manager-CpsjQyaZ.js → qmd-manager-C67Fc8aN.js} +79 -26
- package/dist/{qmd-manager-C9YWFeG6.js → qmd-manager-CXVbfg99.js} +81 -26
- package/dist/{qmd-manager-C02E8ixK.js → qmd-manager-RMRE8Tqt.js} +81 -26
- package/dist/{qmd-manager-BzY2LQTT.js → qmd-manager-pyc_MTIe.js} +78 -23
- package/dist/{register.subclis-DUkirdHn.js → register.subclis-C02e4zuJ.js} +29 -29
- package/dist/{reply--b7BsXGP.js → reply-DICXkh_C.js} +7289 -8455
- package/dist/{routes-DUkEKAc1.js → routes-CmOI1hIH.js} +29 -11
- package/dist/{routes-B4QQiFju.js → routes-DewK5tq2.js} +29 -12
- package/dist/{rpc-CuMtxrRT.js → rpc-DHr30euf.js} +3 -3
- package/dist/{rpc-Blt6MJ4F.js → rpc-T300F8zI.js} +3 -3
- package/dist/{run-main-XZcPA23b.js → run-main-C5wpthq1.js} +84 -82
- package/dist/runner-CY0nmVme.js +1886 -0
- package/dist/runner-Cfm5nTMc.js +1785 -0
- package/dist/runner-D_dujMod.js +1886 -0
- package/dist/runner-DrGYLH5K.js +1785 -0
- package/dist/{sandbox-Aks-9EcZ.js → sandbox-BKYnhYQH.js} +24 -17
- package/dist/{sandbox-DqUO2K83.js → sandbox-Bhjnh1Xg.js} +23 -16
- package/dist/{sandbox-cli-C99Thxi8.js → sandbox-cli-DBsAjZJN.js} +21 -21
- package/dist/{sandbox-cli-CJqRM4V6.js → sandbox-cli-rV9LtFeu.js} +21 -21
- package/dist/{security-cli-iqYLMOz3.js → security-cli-BIwJM_rs.js} +27 -27
- package/dist/{security-cli-DW3lCz-o.js → security-cli-BRjny8Yu.js} +27 -27
- package/dist/{server-context-fX4xiYRh.js → server-context-BGpGs3qd.js} +7 -7
- package/dist/{server-context-8Qt35QdF.js → server-context-Cl0U0vE3.js} +7 -7
- package/dist/{server-node-events-CHWXfb_T.js → server-node-events-CBfTbiTA.js} +48 -44
- package/dist/{server-node-events-BzrEnKLX.js → server-node-events-QCvh8EgI.js} +45 -41
- package/dist/{service-Cd4BxKuo.js → service--nPk7DvT.js} +8 -4
- package/dist/{service-DDPRbf8a.js → service-99RDXwX4.js} +8 -4
- package/dist/{service-audit-CCFxuvKs.js → service-audit-DnLmRGQt.js} +4 -4
- package/dist/{service-audit-x6jCN-6a.js → service-audit-ckBaRCVC.js} +4 -4
- package/dist/{session-cost-usage-CcCEQNuc.js → session-cost-usage-D7HuoSSD.js} +12 -10
- package/dist/{session-cost-usage-PvyVZz-g.js → session-cost-usage-D9hHANWI.js} +12 -10
- package/dist/{shared-ILguacOr.js → shared-Bs4vduG4.js} +3 -3
- package/dist/{shared-CagUDdmp.js → shared-CEY5IkwG.js} +3 -3
- package/dist/{shared-gOyV38rM.js → shared-DRohONn_.js} +4 -4
- package/dist/{shared-BDk_zC9p.js → shared-ICqOZibV.js} +4 -4
- package/dist/{skill-scanner-C_fQzVDu.js → skill-scanner-CucvxYhu.js} +1 -1
- package/dist/{skill-scanner-DrVEHfC6.js → skill-scanner-rHMtUHtP.js} +1 -1
- package/dist/{skills-D5UZZZSY.js → skills-DRjfSQT3.js} +141 -6
- package/dist/{skills-ccAgQ3Ad.js → skills-DprQj9X2.js} +142 -7
- package/dist/{skills-cli-DQilTG3n.js → skills-cli-9WO-C55s.js} +12 -12
- package/dist/{skills-cli-ggyLBtAY.js → skills-cli-B9eej-EW.js} +13 -13
- package/dist/{skills-status-BosMnzIs.js → skills-status-5U3P3YfJ.js} +3 -3
- package/dist/{skills-status-DjtPPMnY.js → skills-status-TDIgVd1K.js} +2 -2
- package/dist/{sqlite-B7FPASCO.js → sqlite-BINzs1U0.js} +2 -2
- package/dist/{sqlite-Btrgi7-j.js → sqlite-D4w5TejA.js} +3 -3
- package/dist/{sqlite-BrQ9tw8B.js → sqlite-DRRHmlug.js} +3 -3
- package/dist/{sqlite-HepBVDoX.js → sqlite-F6PGkEm1.js} +2 -2
- package/dist/{status-BByCntWS.js → status-BKGkKC_v.js} +3 -3
- package/dist/{status-Dt7RE_Yy.js → status-CiHtHdaa.js} +4 -4
- package/dist/{status-zfL4Yej7.js → status-DDWoOpeB.js} +37 -37
- package/dist/{subsystem-Bh1Y_6Uv.js → subsystem-BoExtIHo.js} +52 -17
- package/dist/{system-cli-DwuUkdkH.js → system-cli-B6lr60Io.js} +14 -14
- package/dist/{system-cli-Clqsx8U5.js → system-cli-CprW9G3h.js} +14 -14
- package/dist/{systemd-BEWwfwn0.js → systemd-C0VZriGM.js} +3 -3
- package/dist/{systemd-D6wTPnHi.js → systemd-DrmBtJ5T.js} +3 -3
- package/dist/{systemd-hints-zi4ohCOY.js → systemd-hints-DZtXiVHa.js} +1 -1
- package/dist/{systemd-linger-CDo2UbHM.js → systemd-linger-NC2kl1SC.js} +2 -2
- package/dist/{systemd-linger-BxjTrgoH.js → systemd-linger-xdn3BdPh.js} +2 -2
- package/dist/{table-DEnmtvl5.js → table-B8dx3v4v.js} +2 -2
- package/dist/{table-cCoGqLsk.js → table-CwulTLQp.js} +1 -1
- package/dist/{tool-display-DskiU8Kt.js → tool-display-CZRIDMRm.js} +2 -2
- package/dist/{tool-display-o-dDAlqF.js → tool-display-ClRud3pg.js} +2 -2
- package/dist/{tui-BdJWZdto.js → tui-CVTQn-dC.js} +14 -13
- package/dist/{tui-Bc7XUQGP.js → tui-Lu8FdrlK.js} +13 -14
- package/dist/{tui-cli-BGYh0UL0.js → tui-cli-BLpTj1X9.js} +27 -27
- package/dist/{tui-cli-D3n-O9zB.js → tui-cli-BLx5kL2I.js} +26 -26
- package/dist/{tui-formatters-CA85v4U2.js → tui-formatters-CNySEfJN.js} +6 -6
- package/dist/{tui-formatters-C3NarH24.js → tui-formatters-DePhZK3J.js} +6 -6
- package/dist/{update-JB16aPIY.js → update-DHVxMTpQ.js} +3 -3
- package/dist/{update-Ct9sqJC_.js → update-DU1geolI.js} +3 -3
- package/dist/{update-cli-wWKDS3cm.js → update-cli-C0hUvJWK.js} +89 -71
- package/dist/{update-cli-DDXp_N9B.js → update-cli-Wb1GB3rL.js} +88 -70
- package/dist/{update-runner-ChTf6O6p.js → update-runner--ixK4J3W.js} +11 -11
- package/dist/{update-runner-CmE6cHdn.js → update-runner-7Qa1T9y6.js} +10 -10
- package/dist/{utils-Dk86IbEs.js → utils-BLJAc3ZV.js} +1 -1
- package/dist/{utils-es4ygvQ-.js → utils-Cd9QdCHh.js} +1 -1
- package/dist/{webhooks-cli-CVIE9TtX.js → webhooks-cli-DgcMy7RG.js} +12 -12
- package/dist/{webhooks-cli-BmKSiQQC.js → webhooks-cli-aVzUcJY9.js} +11 -11
- package/dist/{widearea-dns-2ah0bkAj.js → widearea-dns-BaIgNEhY.js} +3 -3
- package/dist/{widearea-dns-CMIG6-74.js → widearea-dns-DzuRdwk5.js} +3 -3
- package/dist/{ws-DtDKpbLR.js → ws-CHCQHs0F.js} +1 -1
- package/dist/{ws-log-BP3z_g6Z.js → ws-log-CIXbLCka.js} +1 -1
- package/dist/{ws-log-D7MkvKhg.js → ws-log-DcQFZByi.js} +2 -2
- package/dist/{wsl-Cwo7X0Un.js → wsl-BUOkxKJu.js} +2 -2
- package/docs/assets/install-script.svg +1 -0
- package/docs/automation/hooks.md +1 -38
- package/docs/automation/webhook.md +43 -2
- package/docs/channels/discord.md +389 -381
- package/docs/channels/imessage.md +229 -218
- package/docs/channels/slack.md +294 -415
- package/docs/channels/telegram.md +401 -505
- 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 +30 -0
- package/docs/cli/plugins.md +20 -1
- package/docs/cli/security.md +1 -0
- package/docs/concepts/memory.md +7 -4
- package/docs/concepts/session-tool.md +1 -0
- package/docs/docs.json +11 -11
- package/docs/gateway/configuration-examples.md +9 -2
- package/docs/gateway/configuration-reference.md +2329 -0
- package/docs/gateway/configuration.md +338 -3304
- package/docs/gateway/index.md +162 -238
- 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/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/index.md +1 -0
- package/docs/providers/litellm.md +153 -0
- package/docs/providers/zai.md +2 -2
- package/docs/reference/templates/AGENTS.md +26 -26
- package/docs/reference/templates/HEARTBEAT.md +31 -2
- package/docs/reference/templates/SOUL.md +14 -8
- package/docs/reference/transcript-hygiene.md +18 -0
- package/docs/start/getting-started.md +5 -0
- package/docs/start/wizard-cli-automation.md +17 -0
- package/docs/start/wizard-cli-reference.md +12 -0
- 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.ts +1 -1
- 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/package.json +1 -1
- package/extensions/googlechat/package.json +1 -1
- package/extensions/imessage/package.json +1 -1
- package/extensions/irc/package.json +1 -1
- package/extensions/irc/src/client.ts +1 -1
- 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/package.json +2 -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/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/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/tlon/package.json +1 -1
- package/extensions/twitch/CHANGELOG.md +6 -0
- package/extensions/twitch/package.json +1 -1
- 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/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-BvIPpm7G.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-DJbWJ9aB.js +0 -89
- package/dist/config-CI7EpvlP.js +0 -15
- package/dist/control-ui/assets/index-CnB9IO4a.js.map +0 -1
- package/dist/date-time-c6HTX6IW.js +0 -187
- package/dist/frontmatter-xwTm0734.js +0 -105
- package/dist/parse-duration-De_tAQSe.js +0 -24
- package/dist/session-key-nXYQSv-a.js +0 -167
- 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/dist/{archive-CXhvR9nU.js → archive-beaSfAzA.js} +0 -0
- /package/dist/{brew-BIrWdDps.js → brew-BUIxHEkn.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-LcHOt63h.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/{constants-DuoCkWRh.js → constants-JPeoOZnw.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-DjZBTJJ3.js} +0 -0
- /package/dist/{exec-approvals-DGPTjO0N.js → exec-approvals-Cb4ZLukq.js} +0 -0
- /package/dist/{exec-approvals-DhmKpiIo.js → exec-approvals-DQ8TVVmj.js} +0 -0
- /package/dist/{format-CaxeRcue.js → format-CNU-Zkrz.js} +0 -0
- /package/dist/{format-DLOJPZmo.js → format-DcfK-dwd.js} +0 -0
- /package/dist/{format-duration-Be5Z7JdJ.js → format-duration-84n6_DgO.js} +0 -0
- /package/dist/{format-duration-CEmFWLyX.js → format-duration-Bo9zNKwO.js} +0 -0
- /package/dist/{format-relative-79_Y1n2Y.js → format-relative-CZOlQ2pA.js} +0 -0
- /package/dist/{format-relative-Db7eqEu8.js → format-relative-cegC_FF5.js} +0 -0
- /package/dist/{github-copilot-token-C9IJh2Pn.js → github-copilot-token-DkiRbJdR.js} +0 -0
- /package/dist/{helpers-CQI-5xS9.js → helpers-8O7IVGO-.js} +0 -0
- /package/dist/{helpers-CRzoyyXS.js → helpers-D_jqdWkd.js} +0 -0
- /package/dist/{helpers-C89IG08W.js → helpers-HyeZXsnu.js} +0 -0
- /package/dist/{is-main-WWuz28Ip.js → is-main-BWoXGz7p.js} +0 -0
- /package/dist/{logging-BzvBIA3Y.js → logging-fywhKCmE.js} +0 -0
- /package/dist/{nodes-screen-lykd2cny.js → nodes-screen-CdCWeiwy.js} +0 -0
- /package/dist/{parse-Cjiudy6x.js → parse-Bw0oH-rT.js} +0 -0
- /package/dist/{parse-DqAvJRIf.js → parse-ioZhOtha.js} +0 -0
- /package/dist/{parse-log-line-CUrpqe1w.js → parse-log-line-BoDqomM4.js} +0 -0
- /package/dist/{parse-log-line-D2UGw0wR.js → parse-log-line-DPxH1XZx.js} +0 -0
- /package/dist/{parse-timeout-DFSPLxpY.js → parse-timeout-D1XX_zN_.js} +0 -0
- /package/dist/{parse-timeout-DV8NQQWk.js → parse-timeout-DMW-z4Iz.js} +0 -0
- /package/dist/{pi-model-discovery-CV2V1HHz.js → pi-model-discovery-DqgqUyAv.js} +0 -0
- /package/dist/{pi-model-discovery-DzFOAbQt.js → pi-model-discovery-EwKVHlZB.js} +0 -0
- /package/dist/{prompts--d-6l5Ln.js → prompts-Bg96reub.js} +0 -0
- /package/dist/{redact-DAKeu7PA.js → redact-BRsnXqwD.js} +0 -0
- /package/dist/{redact-DuEEf1p1.js → redact-Br9GfacZ.js} +0 -0
- /package/dist/{redact-BOIof271.js → redact-BrXLgslJ.js} +0 -0
- /package/dist/{status-Cv36yYdi.js → status-BRZfQbJ2.js} +0 -0
- /package/dist/{status-Drziap9H.js → status-CoAy6bEC.js} +0 -0
- /package/dist/{systemd-hints-CH4pbCFD.js → systemd-hints-CXNtLw9Q.js} +0 -0
- /package/dist/{tailnet-DGRSvYuQ.js → tailnet-DATIFSsY.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-BtNd-j6q.js} +0 -0
- /package/dist/{usage-format-6Uar63S0.js → usage-format-C4JfTbSp.js} +0 -0
- /package/dist/{usage-format-hd37en6b.js → usage-format-CpORtVCG.js} +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { s as resolveStateDir, u as resolveRequiredHomeDir } from "./paths-rb94mUrR.js";
|
|
2
|
-
import { F as pathExists, R as resolveUserPath, t as runCommandWithTimeout } from "./exec-
|
|
2
|
+
import { F as pathExists, R as resolveUserPath, t as runCommandWithTimeout } from "./exec-CJFFoM7H.js";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import fs from "node:fs";
|
|
5
5
|
import os from "node:os";
|
|
@@ -217,6 +217,10 @@ function findPackageRootSync(startDir, maxDepth = 12) {
|
|
|
217
217
|
function candidateDirsFromArgv1(argv1) {
|
|
218
218
|
const normalized = path.resolve(argv1);
|
|
219
219
|
const candidates = [path.dirname(normalized)];
|
|
220
|
+
try {
|
|
221
|
+
const resolved = fs.realpathSync(normalized);
|
|
222
|
+
if (resolved !== normalized) candidates.push(path.dirname(resolved));
|
|
223
|
+
} catch {}
|
|
220
224
|
const parts = normalized.split(path.sep);
|
|
221
225
|
const binIndex = parts.lastIndexOf(".bin");
|
|
222
226
|
if (binIndex > 0 && parts[binIndex - 1] === "node_modules") {
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import "./paths-rb94mUrR.js";
|
|
2
|
+
import "./agent-scope-DPIFau3f.js";
|
|
3
|
+
import { J as logVerbose, X as shouldLogVerbose } from "./exec-CJFFoM7H.js";
|
|
4
|
+
import "./model-selection-C1GmkTAV.js";
|
|
5
|
+
import "./github-copilot-token-wCk9Fg_E.js";
|
|
6
|
+
import "./pi-embedded-helpers-CUzTc1v6.js";
|
|
7
|
+
import "./config-QYrbd7x7.js";
|
|
8
|
+
import "./pi-model-discovery-EhM2JAQo.js";
|
|
9
|
+
import "./chrome-DL0avO8n.js";
|
|
10
|
+
import "./paths-D0O87MfH.js";
|
|
11
|
+
import "./image-RKwc3fsL.js";
|
|
12
|
+
import "./redact-BIMJ3ntQ.js";
|
|
13
|
+
import "./fetch-timeout-DEoXG_SF.js";
|
|
14
|
+
import { a as runCapability, l as isAudioAttachment, n as createMediaAttachmentCache, r as normalizeMediaAttachments, t as buildProviderRegistry } from "./runner-DrGYLH5K.js";
|
|
15
|
+
|
|
16
|
+
//#region src/media-understanding/audio-preflight.ts
|
|
17
|
+
/**
|
|
18
|
+
* Transcribes the first audio attachment BEFORE mention checking.
|
|
19
|
+
* This allows voice notes to be processed in group chats with requireMention: true.
|
|
20
|
+
* Returns the transcript or undefined if transcription fails or no audio is found.
|
|
21
|
+
*/
|
|
22
|
+
async function transcribeFirstAudio(params) {
|
|
23
|
+
const { ctx, cfg } = params;
|
|
24
|
+
const audioConfig = cfg.tools?.media?.audio;
|
|
25
|
+
if (!audioConfig || audioConfig.enabled === false) return;
|
|
26
|
+
const attachments = normalizeMediaAttachments(ctx);
|
|
27
|
+
if (!attachments || attachments.length === 0) return;
|
|
28
|
+
const firstAudio = attachments.find((att) => att && isAudioAttachment(att) && !att.alreadyTranscribed);
|
|
29
|
+
if (!firstAudio) return;
|
|
30
|
+
if (shouldLogVerbose()) logVerbose(`audio-preflight: transcribing attachment ${firstAudio.index} for mention check`);
|
|
31
|
+
const providerRegistry = buildProviderRegistry(params.providers);
|
|
32
|
+
const cache = createMediaAttachmentCache(attachments);
|
|
33
|
+
try {
|
|
34
|
+
const result = await runCapability({
|
|
35
|
+
capability: "audio",
|
|
36
|
+
cfg,
|
|
37
|
+
ctx,
|
|
38
|
+
attachments: cache,
|
|
39
|
+
media: attachments,
|
|
40
|
+
agentDir: params.agentDir,
|
|
41
|
+
providerRegistry,
|
|
42
|
+
config: audioConfig,
|
|
43
|
+
activeModel: params.activeModel
|
|
44
|
+
});
|
|
45
|
+
if (!result || result.outputs.length === 0) return;
|
|
46
|
+
const audioOutput = result.outputs.find((output) => output.kind === "audio.transcription");
|
|
47
|
+
if (!audioOutput || !audioOutput.text) return;
|
|
48
|
+
firstAudio.alreadyTranscribed = true;
|
|
49
|
+
if (shouldLogVerbose()) logVerbose(`audio-preflight: transcribed ${audioOutput.text.length} chars from attachment ${firstAudio.index}`);
|
|
50
|
+
return audioOutput.text;
|
|
51
|
+
} catch (err) {
|
|
52
|
+
if (shouldLogVerbose()) logVerbose(`audio-preflight: transcription failed: ${String(err)}`);
|
|
53
|
+
return;
|
|
54
|
+
} finally {
|
|
55
|
+
await cache.cleanup();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
//#endregion
|
|
60
|
+
export { transcribeFirstAudio };
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import "./paths-BZtyHNCi.js";
|
|
2
|
+
import "./agent-scope-BIEhVP4_.js";
|
|
3
|
+
import { Y as logVerbose, Z as shouldLogVerbose } from "./exec-B8lXct-k.js";
|
|
4
|
+
import "./pi-embedded-helpers-WDwx99UA.js";
|
|
5
|
+
import "./model-auth-CabXIF6O.js";
|
|
6
|
+
import "./config-BvMsmctM.js";
|
|
7
|
+
import "./github-copilot-token-DkiRbJdR.js";
|
|
8
|
+
import "./pi-model-discovery-DqgqUyAv.js";
|
|
9
|
+
import "./chrome-BfB6JdKF.js";
|
|
10
|
+
import "./paths-B0a4ywSO.js";
|
|
11
|
+
import "./image-Brk1sJbw.js";
|
|
12
|
+
import "./redact-BrXLgslJ.js";
|
|
13
|
+
import "./fetch-timeout-BEtUjM1S.js";
|
|
14
|
+
import { a as runCapability, l as isAudioAttachment, n as createMediaAttachmentCache, r as normalizeMediaAttachments, t as buildProviderRegistry } from "./runner-Cfm5nTMc.js";
|
|
15
|
+
|
|
16
|
+
//#region src/media-understanding/audio-preflight.ts
|
|
17
|
+
/**
|
|
18
|
+
* Transcribes the first audio attachment BEFORE mention checking.
|
|
19
|
+
* This allows voice notes to be processed in group chats with requireMention: true.
|
|
20
|
+
* Returns the transcript or undefined if transcription fails or no audio is found.
|
|
21
|
+
*/
|
|
22
|
+
async function transcribeFirstAudio(params) {
|
|
23
|
+
const { ctx, cfg } = params;
|
|
24
|
+
const audioConfig = cfg.tools?.media?.audio;
|
|
25
|
+
if (!audioConfig || audioConfig.enabled === false) return;
|
|
26
|
+
const attachments = normalizeMediaAttachments(ctx);
|
|
27
|
+
if (!attachments || attachments.length === 0) return;
|
|
28
|
+
const firstAudio = attachments.find((att) => att && isAudioAttachment(att) && !att.alreadyTranscribed);
|
|
29
|
+
if (!firstAudio) return;
|
|
30
|
+
if (shouldLogVerbose()) logVerbose(`audio-preflight: transcribing attachment ${firstAudio.index} for mention check`);
|
|
31
|
+
const providerRegistry = buildProviderRegistry(params.providers);
|
|
32
|
+
const cache = createMediaAttachmentCache(attachments);
|
|
33
|
+
try {
|
|
34
|
+
const result = await runCapability({
|
|
35
|
+
capability: "audio",
|
|
36
|
+
cfg,
|
|
37
|
+
ctx,
|
|
38
|
+
attachments: cache,
|
|
39
|
+
media: attachments,
|
|
40
|
+
agentDir: params.agentDir,
|
|
41
|
+
providerRegistry,
|
|
42
|
+
config: audioConfig,
|
|
43
|
+
activeModel: params.activeModel
|
|
44
|
+
});
|
|
45
|
+
if (!result || result.outputs.length === 0) return;
|
|
46
|
+
const audioOutput = result.outputs.find((output) => output.kind === "audio.transcription");
|
|
47
|
+
if (!audioOutput || !audioOutput.text) return;
|
|
48
|
+
firstAudio.alreadyTranscribed = true;
|
|
49
|
+
if (shouldLogVerbose()) logVerbose(`audio-preflight: transcribed ${audioOutput.text.length} chars from attachment ${firstAudio.index}`);
|
|
50
|
+
return audioOutput.text;
|
|
51
|
+
} catch (err) {
|
|
52
|
+
if (shouldLogVerbose()) logVerbose(`audio-preflight: transcription failed: ${String(err)}`);
|
|
53
|
+
return;
|
|
54
|
+
} finally {
|
|
55
|
+
await cache.cleanup();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
//#endregion
|
|
60
|
+
export { transcribeFirstAudio };
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import "./paths-DVBShlw6.js";
|
|
2
|
+
import { A as logVerbose, N as shouldLogVerbose } from "./subsystem-BoExtIHo.js";
|
|
3
|
+
import "./utils-Cd9QdCHh.js";
|
|
4
|
+
import "./pi-embedded-helpers-CMKLjW6X.js";
|
|
5
|
+
import "./exec-YIosokWE.js";
|
|
6
|
+
import "./agent-scope-CQCus0rI.js";
|
|
7
|
+
import "./model-selection-BLuqsGVB.js";
|
|
8
|
+
import "./github-copilot-token-BW-SEg7E.js";
|
|
9
|
+
import "./boolean-BgXe2hyu.js";
|
|
10
|
+
import "./env-ONzUVAG2.js";
|
|
11
|
+
import "./config-aFQssWKX.js";
|
|
12
|
+
import "./manifest-registry-CQhdnDBZ.js";
|
|
13
|
+
import "./plugins-X7d_tfTE.js";
|
|
14
|
+
import "./sandbox-Bhjnh1Xg.js";
|
|
15
|
+
import { a as runCapability, l as isAudioAttachment, n as createMediaAttachmentCache, r as normalizeMediaAttachments, t as buildProviderRegistry } from "./runner-D_dujMod.js";
|
|
16
|
+
import "./image-C4Nn2p3e.js";
|
|
17
|
+
import "./pi-model-discovery-EwKVHlZB.js";
|
|
18
|
+
import "./chrome-Cvr-57lg.js";
|
|
19
|
+
import "./skills-DprQj9X2.js";
|
|
20
|
+
import "./routes-CmOI1hIH.js";
|
|
21
|
+
import "./server-context-Cl0U0vE3.js";
|
|
22
|
+
import "./message-channel-BLi2a6Yw.js";
|
|
23
|
+
import "./logging-fywhKCmE.js";
|
|
24
|
+
import "./accounts-DeqIQjo1.js";
|
|
25
|
+
import "./paths-B49s6UZQ.js";
|
|
26
|
+
import "./redact-BRsnXqwD.js";
|
|
27
|
+
import "./tool-display-CZRIDMRm.js";
|
|
28
|
+
import "./fetch-DmiOpALK.js";
|
|
29
|
+
|
|
30
|
+
//#region src/media-understanding/audio-preflight.ts
|
|
31
|
+
/**
|
|
32
|
+
* Transcribes the first audio attachment BEFORE mention checking.
|
|
33
|
+
* This allows voice notes to be processed in group chats with requireMention: true.
|
|
34
|
+
* Returns the transcript or undefined if transcription fails or no audio is found.
|
|
35
|
+
*/
|
|
36
|
+
async function transcribeFirstAudio(params) {
|
|
37
|
+
const { ctx, cfg } = params;
|
|
38
|
+
const audioConfig = cfg.tools?.media?.audio;
|
|
39
|
+
if (!audioConfig || audioConfig.enabled === false) return;
|
|
40
|
+
const attachments = normalizeMediaAttachments(ctx);
|
|
41
|
+
if (!attachments || attachments.length === 0) return;
|
|
42
|
+
const firstAudio = attachments.find((att) => att && isAudioAttachment(att) && !att.alreadyTranscribed);
|
|
43
|
+
if (!firstAudio) return;
|
|
44
|
+
if (shouldLogVerbose()) logVerbose(`audio-preflight: transcribing attachment ${firstAudio.index} for mention check`);
|
|
45
|
+
const providerRegistry = buildProviderRegistry(params.providers);
|
|
46
|
+
const cache = createMediaAttachmentCache(attachments);
|
|
47
|
+
try {
|
|
48
|
+
const result = await runCapability({
|
|
49
|
+
capability: "audio",
|
|
50
|
+
cfg,
|
|
51
|
+
ctx,
|
|
52
|
+
attachments: cache,
|
|
53
|
+
media: attachments,
|
|
54
|
+
agentDir: params.agentDir,
|
|
55
|
+
providerRegistry,
|
|
56
|
+
config: audioConfig,
|
|
57
|
+
activeModel: params.activeModel
|
|
58
|
+
});
|
|
59
|
+
if (!result || result.outputs.length === 0) return;
|
|
60
|
+
const audioOutput = result.outputs.find((output) => output.kind === "audio.transcription");
|
|
61
|
+
if (!audioOutput || !audioOutput.text) return;
|
|
62
|
+
firstAudio.alreadyTranscribed = true;
|
|
63
|
+
if (shouldLogVerbose()) logVerbose(`audio-preflight: transcribed ${audioOutput.text.length} chars from attachment ${firstAudio.index}`);
|
|
64
|
+
return audioOutput.text;
|
|
65
|
+
} catch (err) {
|
|
66
|
+
if (shouldLogVerbose()) logVerbose(`audio-preflight: transcription failed: ${String(err)}`);
|
|
67
|
+
return;
|
|
68
|
+
} finally {
|
|
69
|
+
await cache.cleanup();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
//#endregion
|
|
74
|
+
export { transcribeFirstAudio };
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { S as logVerbose, T as shouldLogVerbose } from "./entry.js";
|
|
2
|
+
import "./auth-profiles-ByNs3eEm.js";
|
|
3
|
+
import "./utils-BLJAc3ZV.js";
|
|
4
|
+
import "./exec-CACT5OAW.js";
|
|
5
|
+
import "./agent-scope-CsRbLH4l.js";
|
|
6
|
+
import "./github-copilot-token-Cfs0Wxr8.js";
|
|
7
|
+
import "./pi-model-discovery-DzEIEgHL.js";
|
|
8
|
+
import "./config-Bdhomfei.js";
|
|
9
|
+
import "./manifest-registry-u0okVSkU.js";
|
|
10
|
+
import "./server-context-BGpGs3qd.js";
|
|
11
|
+
import "./chrome-foEwx3lN.js";
|
|
12
|
+
import "./message-channel-C_MmebBt.js";
|
|
13
|
+
import "./plugins-4Hqd1WGf.js";
|
|
14
|
+
import "./logging-CfEk_PnX.js";
|
|
15
|
+
import "./accounts-DCDeFTra.js";
|
|
16
|
+
import "./paths-DLINmNFQ.js";
|
|
17
|
+
import "./redact-Br9GfacZ.js";
|
|
18
|
+
import "./routes-DewK5tq2.js";
|
|
19
|
+
import "./pi-embedded-helpers-DfwkwPYD.js";
|
|
20
|
+
import "./fetch-timeout-DTK9vxex.js";
|
|
21
|
+
import "./sandbox-BKYnhYQH.js";
|
|
22
|
+
import "./skills-DRjfSQT3.js";
|
|
23
|
+
import "./image-DgtfXMcX.js";
|
|
24
|
+
import "./tool-display-ClRud3pg.js";
|
|
25
|
+
import { a as runCapability, n as createMediaAttachmentCache, o as isAudioAttachment, r as normalizeMediaAttachments, t as buildProviderRegistry } from "./runner-CY0nmVme.js";
|
|
26
|
+
|
|
27
|
+
//#region src/media-understanding/audio-preflight.ts
|
|
28
|
+
/**
|
|
29
|
+
* Transcribes the first audio attachment BEFORE mention checking.
|
|
30
|
+
* This allows voice notes to be processed in group chats with requireMention: true.
|
|
31
|
+
* Returns the transcript or undefined if transcription fails or no audio is found.
|
|
32
|
+
*/
|
|
33
|
+
async function transcribeFirstAudio(params) {
|
|
34
|
+
const { ctx, cfg } = params;
|
|
35
|
+
const audioConfig = cfg.tools?.media?.audio;
|
|
36
|
+
if (!audioConfig || audioConfig.enabled === false) return;
|
|
37
|
+
const attachments = normalizeMediaAttachments(ctx);
|
|
38
|
+
if (!attachments || attachments.length === 0) return;
|
|
39
|
+
const firstAudio = attachments.find((att) => att && isAudioAttachment(att) && !att.alreadyTranscribed);
|
|
40
|
+
if (!firstAudio) return;
|
|
41
|
+
if (shouldLogVerbose()) logVerbose(`audio-preflight: transcribing attachment ${firstAudio.index} for mention check`);
|
|
42
|
+
const providerRegistry = buildProviderRegistry(params.providers);
|
|
43
|
+
const cache = createMediaAttachmentCache(attachments);
|
|
44
|
+
try {
|
|
45
|
+
const result = await runCapability({
|
|
46
|
+
capability: "audio",
|
|
47
|
+
cfg,
|
|
48
|
+
ctx,
|
|
49
|
+
attachments: cache,
|
|
50
|
+
media: attachments,
|
|
51
|
+
agentDir: params.agentDir,
|
|
52
|
+
providerRegistry,
|
|
53
|
+
config: audioConfig,
|
|
54
|
+
activeModel: params.activeModel
|
|
55
|
+
});
|
|
56
|
+
if (!result || result.outputs.length === 0) return;
|
|
57
|
+
const audioOutput = result.outputs.find((output) => output.kind === "audio.transcription");
|
|
58
|
+
if (!audioOutput || !audioOutput.text) return;
|
|
59
|
+
firstAudio.alreadyTranscribed = true;
|
|
60
|
+
if (shouldLogVerbose()) logVerbose(`audio-preflight: transcribed ${audioOutput.text.length} chars from attachment ${firstAudio.index}`);
|
|
61
|
+
return audioOutput.text;
|
|
62
|
+
} catch (err) {
|
|
63
|
+
if (shouldLogVerbose()) logVerbose(`audio-preflight: transcription failed: ${String(err)}`);
|
|
64
|
+
return;
|
|
65
|
+
} finally {
|
|
66
|
+
await cache.cleanup();
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
//#endregion
|
|
71
|
+
export { transcribeFirstAudio };
|
|
@@ -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-YIosokWE.js";
|
|
4
|
+
import { c as resolveDefaultAgentId, s as resolveAgentWorkspaceDir } from "./agent-scope-CQCus0rI.js";
|
|
5
5
|
import { t as formatCliCommand } from "./command-format-ChfKqObn.js";
|
|
6
|
-
import { D as INCLUDE_KEY, O as MAX_INCLUDE_DEPTH, r as createConfigIO } from "./config
|
|
7
|
-
import { a as MANIFEST_KEY } from "./manifest-registry-
|
|
8
|
-
import { n as listChannelPlugins } from "./plugins-
|
|
9
|
-
import { $ as resolveSandboxToolPolicyForAgent, Z as resolveSandboxConfigForAgent, ot as resolveToolProfilePolicy } from "./sandbox-
|
|
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 { D as INCLUDE_KEY, O as MAX_INCLUDE_DEPTH, r as createConfigIO } from "./config-aFQssWKX.js";
|
|
7
|
+
import { a as MANIFEST_KEY } from "./manifest-registry-CQhdnDBZ.js";
|
|
8
|
+
import { n as listChannelPlugins } from "./plugins-X7d_tfTE.js";
|
|
9
|
+
import { $ as resolveSandboxToolPolicyForAgent, Z as resolveSandboxConfigForAgent, ot as resolveToolProfilePolicy } from "./sandbox-Bhjnh1Xg.js";
|
|
10
|
+
import { i as loadWorkspaceSkillEntries } from "./skills-DprQj9X2.js";
|
|
11
|
+
import { n as formatErrorMessage } from "./errors-Bv81hF2P.js";
|
|
12
|
+
import { a as resolveProfile, i as resolveBrowserConfig } from "./server-context-Cl0U0vE3.js";
|
|
13
|
+
import { h as GATEWAY_CLIENT_NAMES, m as GATEWAY_CLIENT_MODES } from "./message-channel-BLi2a6Yw.js";
|
|
14
|
+
import { t as GatewayClient } from "./client-BrYfyoDK.js";
|
|
15
|
+
import { t as buildGatewayConnectionDetails } from "./call-SolyGS1r.js";
|
|
16
|
+
import { i as readChannelAllowFromStore } from "./pairing-store-CmlRVqOz.js";
|
|
17
|
+
import { c as resolveNativeSkillsEnabled, n as isToolAllowedByPolicies, s as resolveNativeCommandsEnabled } from "./pi-tools.policy-BpsROZbz.js";
|
|
18
|
+
import { i as resolveGatewayAuth } from "./auth-CQNl_IaI.js";
|
|
19
|
+
import { n as resolveBrowserControlAuth } from "./control-auth-DBCu3qyv.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";
|
|
@@ -143,6 +144,11 @@ function looksLikeEnvRef(value) {
|
|
|
143
144
|
const v = value.trim();
|
|
144
145
|
return v.startsWith("${") && v.endsWith("}");
|
|
145
146
|
}
|
|
147
|
+
function isGatewayRemotelyExposed(cfg) {
|
|
148
|
+
if ((typeof cfg.gateway?.bind === "string" ? cfg.gateway.bind : "loopback") !== "loopback") return true;
|
|
149
|
+
const tailscaleMode = cfg.gateway?.tailscale?.mode ?? "off";
|
|
150
|
+
return tailscaleMode === "serve" || tailscaleMode === "funnel";
|
|
151
|
+
}
|
|
146
152
|
function addModel(models, raw, source) {
|
|
147
153
|
if (typeof raw !== "string") return;
|
|
148
154
|
const id = raw.trim();
|
|
@@ -353,6 +359,31 @@ function collectHooksHardeningFindings(cfg) {
|
|
|
353
359
|
detail: "hooks.path='/' would shadow other HTTP endpoints and is unsafe.",
|
|
354
360
|
remediation: "Use a dedicated path like '/hooks'."
|
|
355
361
|
});
|
|
362
|
+
const allowRequestSessionKey = cfg.hooks?.allowRequestSessionKey === true;
|
|
363
|
+
const defaultSessionKey = typeof cfg.hooks?.defaultSessionKey === "string" ? cfg.hooks.defaultSessionKey.trim() : "";
|
|
364
|
+
const allowedPrefixes = Array.isArray(cfg.hooks?.allowedSessionKeyPrefixes) ? cfg.hooks.allowedSessionKeyPrefixes.map((prefix) => prefix.trim()).filter((prefix) => prefix.length > 0) : [];
|
|
365
|
+
const remoteExposure = isGatewayRemotelyExposed(cfg);
|
|
366
|
+
if (!defaultSessionKey) findings.push({
|
|
367
|
+
checkId: "hooks.default_session_key_unset",
|
|
368
|
+
severity: "warn",
|
|
369
|
+
title: "hooks.defaultSessionKey is not configured",
|
|
370
|
+
detail: "Hook agent runs without explicit sessionKey use generated per-request keys. Set hooks.defaultSessionKey to keep hook ingress scoped to a known session.",
|
|
371
|
+
remediation: "Set hooks.defaultSessionKey (for example, \"hook:ingress\")."
|
|
372
|
+
});
|
|
373
|
+
if (allowRequestSessionKey) findings.push({
|
|
374
|
+
checkId: "hooks.request_session_key_enabled",
|
|
375
|
+
severity: remoteExposure ? "critical" : "warn",
|
|
376
|
+
title: "External hook payloads may override sessionKey",
|
|
377
|
+
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.",
|
|
378
|
+
remediation: "Set hooks.allowRequestSessionKey=false (recommended) or constrain hooks.allowedSessionKeyPrefixes."
|
|
379
|
+
});
|
|
380
|
+
if (allowRequestSessionKey && allowedPrefixes.length === 0) findings.push({
|
|
381
|
+
checkId: "hooks.request_session_key_prefixes_missing",
|
|
382
|
+
severity: remoteExposure ? "critical" : "warn",
|
|
383
|
+
title: "Request sessionKey override is enabled without prefix restrictions",
|
|
384
|
+
detail: "hooks.allowRequestSessionKey=true and hooks.allowedSessionKeyPrefixes is unset/empty, so request payloads can target arbitrary session key shapes.",
|
|
385
|
+
remediation: "Set hooks.allowedSessionKeyPrefixes (for example, [\"hook:\"]) or disable request overrides."
|
|
386
|
+
});
|
|
356
387
|
return findings;
|
|
357
388
|
}
|
|
358
389
|
function collectModelHygieneFindings(cfg) {
|
|
@@ -1361,6 +1392,7 @@ function collectGatewayConfigFindings(cfg, env) {
|
|
|
1361
1392
|
const hasSharedSecret = auth.mode === "token" && hasToken || auth.mode === "password" && hasPassword;
|
|
1362
1393
|
const hasTailscaleAuth = auth.allowTailscale && tailscaleMode === "serve";
|
|
1363
1394
|
const hasGatewayAuth = hasSharedSecret || hasTailscaleAuth;
|
|
1395
|
+
const remotelyExposed = bind !== "loopback" || tailscaleMode === "serve" || tailscaleMode === "funnel";
|
|
1364
1396
|
if (bind !== "loopback" && !hasSharedSecret) findings.push({
|
|
1365
1397
|
checkId: "gateway.bind_no_auth",
|
|
1366
1398
|
severity: "critical",
|
|
@@ -1416,9 +1448,21 @@ function collectGatewayConfigFindings(cfg, env) {
|
|
|
1416
1448
|
title: "Gateway token looks short",
|
|
1417
1449
|
detail: `gateway auth token is ${token.length} chars; prefer a long random token.`
|
|
1418
1450
|
});
|
|
1451
|
+
const chatCompletionsEnabled = cfg.gateway?.http?.endpoints?.chatCompletions?.enabled === true;
|
|
1452
|
+
const responsesEnabled = cfg.gateway?.http?.endpoints?.responses?.enabled === true;
|
|
1453
|
+
if (chatCompletionsEnabled || responsesEnabled) {
|
|
1454
|
+
const enabledEndpoints = [chatCompletionsEnabled ? "/v1/chat/completions" : null, responsesEnabled ? "/v1/responses" : null].filter((value) => Boolean(value));
|
|
1455
|
+
findings.push({
|
|
1456
|
+
checkId: "gateway.http.session_key_override_enabled",
|
|
1457
|
+
severity: remotelyExposed ? "warn" : "info",
|
|
1458
|
+
title: "HTTP APIs accept explicit session key override headers",
|
|
1459
|
+
detail: `${enabledEndpoints.join(", ")} support x-openclaw-session-key. Any authenticated caller can route requests into arbitrary sessions.`,
|
|
1460
|
+
remediation: "Treat HTTP API credentials as full-trust, disable unused endpoints, and avoid sharing tokens across tenants."
|
|
1461
|
+
});
|
|
1462
|
+
}
|
|
1419
1463
|
return findings;
|
|
1420
1464
|
}
|
|
1421
|
-
function collectBrowserControlFindings(cfg) {
|
|
1465
|
+
function collectBrowserControlFindings(cfg, env) {
|
|
1422
1466
|
const findings = [];
|
|
1423
1467
|
let resolved;
|
|
1424
1468
|
try {
|
|
@@ -1434,6 +1478,14 @@ function collectBrowserControlFindings(cfg) {
|
|
|
1434
1478
|
return findings;
|
|
1435
1479
|
}
|
|
1436
1480
|
if (!resolved.enabled) return findings;
|
|
1481
|
+
const browserAuth = resolveBrowserControlAuth(cfg, env);
|
|
1482
|
+
if (!browserAuth.token && !browserAuth.password) findings.push({
|
|
1483
|
+
checkId: "browser.control_no_auth",
|
|
1484
|
+
severity: "critical",
|
|
1485
|
+
title: "Browser control has no auth",
|
|
1486
|
+
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.",
|
|
1487
|
+
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."
|
|
1488
|
+
});
|
|
1437
1489
|
for (const name of Object.keys(resolved.profiles)) {
|
|
1438
1490
|
const profile = resolveProfile(resolved, name);
|
|
1439
1491
|
if (!profile || profile.cdpIsLoopback) continue;
|
|
@@ -1778,7 +1830,7 @@ async function runSecurityAudit(opts) {
|
|
|
1778
1830
|
configPath
|
|
1779
1831
|
}));
|
|
1780
1832
|
findings.push(...collectGatewayConfigFindings(cfg, env));
|
|
1781
|
-
findings.push(...collectBrowserControlFindings(cfg));
|
|
1833
|
+
findings.push(...collectBrowserControlFindings(cfg, env));
|
|
1782
1834
|
findings.push(...collectLoggingFindings(cfg));
|
|
1783
1835
|
findings.push(...collectElevatedFindings(cfg));
|
|
1784
1836
|
findings.push(...collectHooksHardeningFindings(cfg));
|
|
@@ -1,23 +1,24 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as formatCliCommand } from "./command-format-
|
|
1
|
+
import { V as resolveConfigPath, Y as resolveOAuthDir, Z as resolveStateDir } from "./entry.js";
|
|
2
|
+
import { t as formatCliCommand } from "./command-format-Bxe0mWee.js";
|
|
3
3
|
import { l as normalizeAgentId } from "./session-key-DVvxnFKg.js";
|
|
4
|
-
import { n as runExec } from "./exec-
|
|
5
|
-
import { c as resolveDefaultAgentId, s as resolveAgentWorkspaceDir } from "./agent-scope-
|
|
6
|
-
import { D as INCLUDE_KEY, O as MAX_INCLUDE_DEPTH, r as createConfigIO } from "./config-
|
|
7
|
-
import { a as MANIFEST_KEY } from "./manifest-registry-
|
|
8
|
-
import { a as resolveBrowserConfig, o as resolveProfile } from "./server-context-
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import { t as
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
4
|
+
import { n as runExec } from "./exec-CACT5OAW.js";
|
|
5
|
+
import { c as resolveDefaultAgentId, s as resolveAgentWorkspaceDir } from "./agent-scope-CsRbLH4l.js";
|
|
6
|
+
import { D as INCLUDE_KEY, O as MAX_INCLUDE_DEPTH, r as createConfigIO } from "./config-Bdhomfei.js";
|
|
7
|
+
import { a as MANIFEST_KEY } from "./manifest-registry-u0okVSkU.js";
|
|
8
|
+
import { a as resolveBrowserConfig, o as resolveProfile } from "./server-context-BGpGs3qd.js";
|
|
9
|
+
import { i as resolveGatewayAuth } from "./auth-9x3lqfIY.js";
|
|
10
|
+
import { n as resolveBrowserControlAuth } from "./control-auth-8Cf4WXpR.js";
|
|
11
|
+
import { n as formatErrorMessage } from "./errors-DjZBTJJ3.js";
|
|
12
|
+
import { t as GatewayClient } from "./client-CTwXnRl7.js";
|
|
13
|
+
import { t as buildGatewayConnectionDetails } from "./call-DVYCIV8m.js";
|
|
14
|
+
import { h as GATEWAY_CLIENT_NAMES, m as GATEWAY_CLIENT_MODES } from "./message-channel-C_MmebBt.js";
|
|
15
|
+
import { n as listChannelPlugins } from "./plugins-4Hqd1WGf.js";
|
|
15
16
|
import { t as resolveChannelDefaultAccountId } from "./helpers-DdwqKAAS.js";
|
|
16
|
-
import { t as scanDirectoryWithSummary } from "./skill-scanner-
|
|
17
|
-
import { G as resolveSandboxToolPolicyForAgent, Q as resolveToolProfilePolicy, U as resolveSandboxConfigForAgent } from "./sandbox-
|
|
18
|
-
import { i as loadWorkspaceSkillEntries } from "./skills-
|
|
19
|
-
import { a as isToolAllowedByPolicies, n as resolveNativeCommandsEnabled, r as resolveNativeSkillsEnabled } from "./commands-
|
|
20
|
-
import { i as readChannelAllowFromStore } from "./pairing-store-
|
|
17
|
+
import { t as scanDirectoryWithSummary } from "./skill-scanner-rHMtUHtP.js";
|
|
18
|
+
import { G as resolveSandboxToolPolicyForAgent, Q as resolveToolProfilePolicy, U as resolveSandboxConfigForAgent } from "./sandbox-BKYnhYQH.js";
|
|
19
|
+
import { i as loadWorkspaceSkillEntries } from "./skills-DRjfSQT3.js";
|
|
20
|
+
import { a as isToolAllowedByPolicies, n as resolveNativeCommandsEnabled, r as resolveNativeSkillsEnabled } from "./commands-BX_OIIVR.js";
|
|
21
|
+
import { i as readChannelAllowFromStore } from "./pairing-store-Dp5_JGnG.js";
|
|
21
22
|
import path from "node:path";
|
|
22
23
|
import os from "node:os";
|
|
23
24
|
import JSON5 from "json5";
|
|
@@ -143,6 +144,11 @@ function looksLikeEnvRef(value) {
|
|
|
143
144
|
const v = value.trim();
|
|
144
145
|
return v.startsWith("${") && v.endsWith("}");
|
|
145
146
|
}
|
|
147
|
+
function isGatewayRemotelyExposed(cfg) {
|
|
148
|
+
if ((typeof cfg.gateway?.bind === "string" ? cfg.gateway.bind : "loopback") !== "loopback") return true;
|
|
149
|
+
const tailscaleMode = cfg.gateway?.tailscale?.mode ?? "off";
|
|
150
|
+
return tailscaleMode === "serve" || tailscaleMode === "funnel";
|
|
151
|
+
}
|
|
146
152
|
function addModel(models, raw, source) {
|
|
147
153
|
if (typeof raw !== "string") return;
|
|
148
154
|
const id = raw.trim();
|
|
@@ -353,6 +359,31 @@ function collectHooksHardeningFindings(cfg) {
|
|
|
353
359
|
detail: "hooks.path='/' would shadow other HTTP endpoints and is unsafe.",
|
|
354
360
|
remediation: "Use a dedicated path like '/hooks'."
|
|
355
361
|
});
|
|
362
|
+
const allowRequestSessionKey = cfg.hooks?.allowRequestSessionKey === true;
|
|
363
|
+
const defaultSessionKey = typeof cfg.hooks?.defaultSessionKey === "string" ? cfg.hooks.defaultSessionKey.trim() : "";
|
|
364
|
+
const allowedPrefixes = Array.isArray(cfg.hooks?.allowedSessionKeyPrefixes) ? cfg.hooks.allowedSessionKeyPrefixes.map((prefix) => prefix.trim()).filter((prefix) => prefix.length > 0) : [];
|
|
365
|
+
const remoteExposure = isGatewayRemotelyExposed(cfg);
|
|
366
|
+
if (!defaultSessionKey) findings.push({
|
|
367
|
+
checkId: "hooks.default_session_key_unset",
|
|
368
|
+
severity: "warn",
|
|
369
|
+
title: "hooks.defaultSessionKey is not configured",
|
|
370
|
+
detail: "Hook agent runs without explicit sessionKey use generated per-request keys. Set hooks.defaultSessionKey to keep hook ingress scoped to a known session.",
|
|
371
|
+
remediation: "Set hooks.defaultSessionKey (for example, \"hook:ingress\")."
|
|
372
|
+
});
|
|
373
|
+
if (allowRequestSessionKey) findings.push({
|
|
374
|
+
checkId: "hooks.request_session_key_enabled",
|
|
375
|
+
severity: remoteExposure ? "critical" : "warn",
|
|
376
|
+
title: "External hook payloads may override sessionKey",
|
|
377
|
+
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.",
|
|
378
|
+
remediation: "Set hooks.allowRequestSessionKey=false (recommended) or constrain hooks.allowedSessionKeyPrefixes."
|
|
379
|
+
});
|
|
380
|
+
if (allowRequestSessionKey && allowedPrefixes.length === 0) findings.push({
|
|
381
|
+
checkId: "hooks.request_session_key_prefixes_missing",
|
|
382
|
+
severity: remoteExposure ? "critical" : "warn",
|
|
383
|
+
title: "Request sessionKey override is enabled without prefix restrictions",
|
|
384
|
+
detail: "hooks.allowRequestSessionKey=true and hooks.allowedSessionKeyPrefixes is unset/empty, so request payloads can target arbitrary session key shapes.",
|
|
385
|
+
remediation: "Set hooks.allowedSessionKeyPrefixes (for example, [\"hook:\"]) or disable request overrides."
|
|
386
|
+
});
|
|
356
387
|
return findings;
|
|
357
388
|
}
|
|
358
389
|
function collectModelHygieneFindings(cfg) {
|
|
@@ -1361,6 +1392,7 @@ function collectGatewayConfigFindings(cfg, env) {
|
|
|
1361
1392
|
const hasSharedSecret = auth.mode === "token" && hasToken || auth.mode === "password" && hasPassword;
|
|
1362
1393
|
const hasTailscaleAuth = auth.allowTailscale && tailscaleMode === "serve";
|
|
1363
1394
|
const hasGatewayAuth = hasSharedSecret || hasTailscaleAuth;
|
|
1395
|
+
const remotelyExposed = bind !== "loopback" || tailscaleMode === "serve" || tailscaleMode === "funnel";
|
|
1364
1396
|
if (bind !== "loopback" && !hasSharedSecret) findings.push({
|
|
1365
1397
|
checkId: "gateway.bind_no_auth",
|
|
1366
1398
|
severity: "critical",
|
|
@@ -1416,9 +1448,21 @@ function collectGatewayConfigFindings(cfg, env) {
|
|
|
1416
1448
|
title: "Gateway token looks short",
|
|
1417
1449
|
detail: `gateway auth token is ${token.length} chars; prefer a long random token.`
|
|
1418
1450
|
});
|
|
1451
|
+
const chatCompletionsEnabled = cfg.gateway?.http?.endpoints?.chatCompletions?.enabled === true;
|
|
1452
|
+
const responsesEnabled = cfg.gateway?.http?.endpoints?.responses?.enabled === true;
|
|
1453
|
+
if (chatCompletionsEnabled || responsesEnabled) {
|
|
1454
|
+
const enabledEndpoints = [chatCompletionsEnabled ? "/v1/chat/completions" : null, responsesEnabled ? "/v1/responses" : null].filter((value) => Boolean(value));
|
|
1455
|
+
findings.push({
|
|
1456
|
+
checkId: "gateway.http.session_key_override_enabled",
|
|
1457
|
+
severity: remotelyExposed ? "warn" : "info",
|
|
1458
|
+
title: "HTTP APIs accept explicit session key override headers",
|
|
1459
|
+
detail: `${enabledEndpoints.join(", ")} support x-openclaw-session-key. Any authenticated caller can route requests into arbitrary sessions.`,
|
|
1460
|
+
remediation: "Treat HTTP API credentials as full-trust, disable unused endpoints, and avoid sharing tokens across tenants."
|
|
1461
|
+
});
|
|
1462
|
+
}
|
|
1419
1463
|
return findings;
|
|
1420
1464
|
}
|
|
1421
|
-
function collectBrowserControlFindings(cfg) {
|
|
1465
|
+
function collectBrowserControlFindings(cfg, env) {
|
|
1422
1466
|
const findings = [];
|
|
1423
1467
|
let resolved;
|
|
1424
1468
|
try {
|
|
@@ -1434,6 +1478,14 @@ function collectBrowserControlFindings(cfg) {
|
|
|
1434
1478
|
return findings;
|
|
1435
1479
|
}
|
|
1436
1480
|
if (!resolved.enabled) return findings;
|
|
1481
|
+
const browserAuth = resolveBrowserControlAuth(cfg, env);
|
|
1482
|
+
if (!browserAuth.token && !browserAuth.password) findings.push({
|
|
1483
|
+
checkId: "browser.control_no_auth",
|
|
1484
|
+
severity: "critical",
|
|
1485
|
+
title: "Browser control has no auth",
|
|
1486
|
+
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.",
|
|
1487
|
+
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."
|
|
1488
|
+
});
|
|
1437
1489
|
for (const name of Object.keys(resolved.profiles)) {
|
|
1438
1490
|
const profile = resolveProfile(resolved, name);
|
|
1439
1491
|
if (!profile || profile.cdpIsLoopback) continue;
|
|
@@ -1778,7 +1830,7 @@ async function runSecurityAudit(opts) {
|
|
|
1778
1830
|
configPath
|
|
1779
1831
|
}));
|
|
1780
1832
|
findings.push(...collectGatewayConfigFindings(cfg, env));
|
|
1781
|
-
findings.push(...collectBrowserControlFindings(cfg));
|
|
1833
|
+
findings.push(...collectBrowserControlFindings(cfg, env));
|
|
1782
1834
|
findings.push(...collectLoggingFindings(cfg));
|
|
1783
1835
|
findings.push(...collectElevatedFindings(cfg));
|
|
1784
1836
|
findings.push(...collectHooksHardeningFindings(cfg));
|