activeclaw 2026.2.12 → 2026.2.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +37 -0
- package/dist/{accounts-DbzMEfKN.js → accounts-DCDeFTra.js} +2 -2
- package/dist/{accounts-DimKrt7j.js → accounts-DeqIQjo1.js} +2 -2
- package/dist/{acp-cli-Cs1ai4XO.js → acp-cli-CeYI4XRd.js} +15 -16
- package/dist/{acp-cli-oV2dodPg.js → acp-cli-rNbGXICg.js} +14 -15
- package/dist/{agent-BndgzkUe.js → agent-BvNJF5QL.js} +19 -16
- package/dist/{agent-DZvDwqnd.js → agent-CyMxTyrG.js} +20 -17
- package/dist/{agent-scope-rXQ7WARN.js → agent-scope-BIEhVP4_.js} +1 -1
- package/dist/{agent-scope---6LLHj0.js → agent-scope-CQCus0rI.js} +2 -2
- package/dist/{agent-scope-RCSw6gHy.js → agent-scope-CsRbLH4l.js} +3 -3
- package/dist/{agent-scope-CN8DM4Xb.js → agent-scope-DPIFau3f.js} +1 -1
- package/dist/{audio-preflight-SZRntkxo.js → audio-preflight-BU8W7uxc.js} +10 -10
- package/dist/{audio-preflight-ClVNINDs.js → audio-preflight-CGsumMzb.js} +10 -10
- package/dist/{audio-preflight-txAP3v-C.js → audio-preflight-SLmkJI6-.js} +22 -22
- package/dist/{audio-preflight-BP6s-UPp.js → audio-preflight-jZc5mFCZ.js} +23 -23
- package/dist/{audit-CQzrm61N.js → audit-Dmww_503.js} +70 -18
- package/dist/{audit-DMH3CSXY.js → audit-wPu26VMb.js} +72 -20
- package/dist/{tailscale-DU6DgqVy.js → auth-9x3lqfIY.js} +208 -3
- package/dist/{tailscale-DHfcfRCx.js → auth-CQNl_IaI.js} +190 -3
- package/dist/{auth-health-BB3e3OmN.js → auth-health-C4L4FGBA.js} +1 -1
- package/dist/{auth-health-zZ9dnQGC.js → auth-health-j6epgQbq.js} +1 -1
- package/dist/{auth-profiles-CcJ3hrog.js → auth-profiles-ByNs3eEm.js} +60 -22
- package/dist/build-info.json +3 -3
- package/dist/bundled/boot-md/handler.js +19 -16
- package/dist/bundled/session-memory/handler.js +16 -15
- package/dist/{call-Yxns4CVq.js → call-DVYCIV8m.js} +5 -5
- package/dist/{call-C9az806y.js → call-SolyGS1r.js} +4 -4
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/{channel-options-CjXPwMWu.js → channel-options-BwC2yQcR.js} +4 -4
- package/dist/{channel-options-CX4iYQfR.js → channel-options-Cq9BVDkP.js} +7 -7
- package/dist/{channel-selection-BoQ7GurB.js → channel-selection-D4D6ImhN.js} +2 -2
- package/dist/{channel-selection-C78IwbD-.js → channel-selection-MZAHm4U8.js} +2 -2
- package/dist/{channels-cli-DUHsmX3q.js → channels-cli-9Dsk9Qm7.js} +53 -51
- package/dist/{channels-cli-BXMQPB4x.js → channels-cli-BJUppQll.js} +52 -50
- package/dist/{channels-status-issues-Ca9--azp.js → channels-status-issues-D7GSV1GS.js} +1 -1
- package/dist/{channels-status-issues-CbULFg2X.js → channels-status-issues-DDAWeT-6.js} +1 -1
- package/dist/{chrome-svgmQ8T_.js → chrome-BfB6JdKF.js} +2 -1
- package/dist/{chrome-juQxt0zf.js → chrome-Cvr-57lg.js} +4 -3
- package/dist/{chrome-BCPPeLQ6.js → chrome-DL0avO8n.js} +2 -1
- package/dist/{chrome-yIKmOzCO.js → chrome-foEwx3lN.js} +5 -4
- package/dist/{clack-prompter-Dmvcu3gn.js → clack-prompter-Bz3Mmcl-.js} +5 -5
- package/dist/{clack-prompter-DuBVnTKy.js → clack-prompter-ChCGXfyt.js} +4 -4
- package/dist/cli/daemon-cli.js +1 -1
- package/dist/{cli-FdxAcu_y.js → cli-ZR9ugUBX.js} +42 -40
- package/dist/{cli-By331Q9f.js → cli-miPe4Ujz.js} +42 -40
- package/dist/{client-B0_GiCjB.js → client-BrYfyoDK.js} +52 -3
- package/dist/{client-D7wrC1Ug.js → client-CTwXnRl7.js} +53 -4
- package/dist/{command-format-ayFsmwwz.js → command-format-Bxe0mWee.js} +1 -1
- package/dist/{command-options-BSDiKuyX.js → command-options-BvgxzPbK.js} +4 -4
- package/dist/{commands-BG25qku5.js → commands-BX_OIIVR.js} +4 -4
- package/dist/{completion-cli-C4zxjkC1.js → completion-cli-CR77-jyv.js} +3 -3
- package/dist/{completion-cli-DECEgBWR.js → completion-cli-DnjpxAag.js} +29 -29
- package/dist/{config-B7sno9eI.js → config-Bdhomfei.js} +15 -6
- package/dist/{config-BuF7vm-v.js → config-BvMsmctM.js} +13 -4
- package/dist/{config-D50SQVar.js → config-QYrbd7x7.js} +13 -4
- package/dist/{config-DH9TLUNc.js → config-aFQssWKX.js} +15 -6
- package/dist/{config-guard-DPxxY1iw.js → config-guard-CljaSxJd.js} +39 -39
- package/dist/{configure-BZQ9uSVX.js → configure-BXLiucXo.js} +19 -19
- package/dist/{configure-Cg5IKSUy.js → configure-BYPqXzGZ.js} +19 -19
- package/dist/control-auth-8Cf4WXpR.js +54 -0
- package/dist/control-auth-DBCu3qyv.js +54 -0
- package/dist/{control-service-CBlMVTRu.js → control-service-B5KnPqGP.js} +11 -5
- package/dist/{control-service-B2er20Ke.js → control-service-DKnttEus.js} +10 -4
- package/dist/{cron-cli-B2Zwhy_r.js → cron-cli-D7BRjDv2.js} +17 -17
- package/dist/{cron-cli-EaRUVd0p.js → cron-cli-z1zk_FXQ.js} +16 -16
- package/dist/{daemon-cli-CVNzObIF.js → daemon-cli-BDkU2ocb.js} +18 -18
- package/dist/{daemon-cli-DF6Rxjy6.js → daemon-cli-cNSF93-v.js} +19 -19
- package/dist/{daemon-runtime-BHF5NjQ7.js → daemon-runtime-B0tg_LsX.js} +2 -2
- package/dist/{daemon-runtime-B05PME1z.js → daemon-runtime-Bsjeut6m.js} +3 -3
- package/dist/{deliver-DzcxEcza.js → deliver-CIU9Npgs.js} +306 -12
- package/dist/{deliver-COf5XFo_.js → deliver-DYYCo1G7.js} +302 -8
- package/dist/{deliver-B1jsU2r7.js → deliver-LsxKETro.js} +306 -12
- package/dist/{deliver-CLwC284e.js → deliver-xUU3mGHo.js} +302 -8
- package/dist/{deps-Cva7QM_t.js → deps-QSwGcoNZ.js} +2 -2
- package/dist/{deps-B6602Wid.js → deps-lAAA2zYI.js} +2 -2
- package/dist/{devices-cli-DPg_4aW8.js → devices-cli-BG3-2oqt.js} +13 -13
- package/dist/{devices-cli-D8K3hZR5.js → devices-cli-VIQtOvt_.js} +13 -13
- package/dist/{directory-cli-OGBSVKAZ.js → directory-cli-BCJwjVC0.js} +15 -15
- package/dist/{directory-cli-Bn47fFX7.js → directory-cli-jYzZ02gk.js} +14 -14
- package/dist/{dispatcher-BHsNwFe-.js → dispatcher-DY51b-Zc.js} +2 -2
- package/dist/{dns-cli-DmTHXgwU.js → dns-cli-DHIiMJjS.js} +11 -11
- package/dist/{dns-cli-kk2rysJh.js → dns-cli-pZlv87Ib.js} +11 -11
- package/dist/{docs-cli-CB77CeM4.js → docs-cli-2JDiwfzP.js} +7 -7
- package/dist/{docs-cli-DUcyw0X0.js → docs-cli-BhkYqoIQ.js} +6 -6
- package/dist/{doctor-DwqdkfPa.js → doctor-Bf8EhNtA.js} +33 -33
- package/dist/{doctor-BZfxDGUg.js → doctor-sYG5V4Co.js} +32 -32
- package/dist/entry.js +36 -14
- package/dist/{env-DE9xvYOL.js → env-ONzUVAG2.js} +1 -1
- package/dist/{exec-4WHuOniw.js → exec-B8lXct-k.js} +31 -13
- package/dist/{exec-B8JKbXKW.js → exec-CACT5OAW.js} +1 -1
- package/dist/{exec-D12IZYtJ.js → exec-CJFFoM7H.js} +31 -13
- package/dist/{exec-DXtR2fhb.js → exec-YIosokWE.js} +1 -1
- package/dist/{exec-approvals-cli-GizapOX5.js → exec-approvals-cli-7LH0lwhO.js} +19 -19
- package/dist/{exec-approvals-cli-BWO0Rs-a.js → exec-approvals-cli-apGnQbpj.js} +19 -19
- package/dist/extensionAPI.js +1108 -661
- package/dist/{fetch-CqZP8jwB.js → fetch-DmiOpALK.js} +5 -3
- package/dist/{fetch-timeout-B2KlHXi3.js → fetch-timeout-BEtUjM1S.js} +5 -3
- package/dist/{fetch-timeout-ohY5QmsW.js → fetch-timeout-DEoXG_SF.js} +5 -3
- package/dist/{fetch-timeout-4UKsdtE1.js → fetch-timeout-DTK9vxex.js} +5 -3
- package/dist/{gateway-cli-Bbd1Xbsc.js → gateway-cli-DUdYxlZS.js} +315 -103
- package/dist/{gateway-cli-PR1S0BTe.js → gateway-cli-DbvWmE-9.js} +314 -102
- package/dist/{gateway-rpc-8gue7Qjt.js → gateway-rpc-BByb2Snz.js} +3 -3
- package/dist/{gateway-rpc-DjuxyOm-.js → gateway-rpc-wXSCUZXj.js} +3 -3
- package/dist/{github-copilot-auth-B3chCDfc.js → github-copilot-auth-D7ewvpMd.js} +16 -8
- package/dist/{github-copilot-auth-Cm2SB8Qf.js → github-copilot-auth-DDispnyz.js} +16 -8
- package/dist/{github-copilot-token-SLWintYd.js → github-copilot-token-Cfs0Wxr8.js} +1 -1
- package/dist/{gmail-setup-utils-Cgh0ptgA.js → gmail-setup-utils-Cfns8TQx.js} +3 -3
- package/dist/{gmail-setup-utils-WDyf1gTU.js → gmail-setup-utils-DJb-_5kO.js} +4 -4
- package/dist/{health-format-C0C_Apce.js → health-format-KGPokKJH.js} +68 -28
- package/dist/{health-format-gLMfE2wf.js → health-format-LZDxu3rv.js} +67 -27
- package/dist/{help-format-5iAL_46a.js → help-format-C48TXngO.js} +1 -1
- package/dist/{help-format-DUy1KRxq.js → help-format-R5fLToDw.js} +1 -1
- package/dist/{hooks-cli-CEN1h1ya.js → hooks-cli-CT8JCRkH.js} +46 -44
- package/dist/{hooks-cli-DrchIqSi.js → hooks-cli-S1MKumJO.js} +47 -45
- package/dist/{hooks-status-Cgy6AtQk.js → hooks-status-Cw0xD8Lt.js} +3 -3
- package/dist/{hooks-status--xVLpAXz.js → hooks-status-D9MhwHRp.js} +3 -3
- package/dist/{image-Dkawt9Kg.js → image-Brk1sJbw.js} +4 -4
- package/dist/{image-DI9s9eEx.js → image-C4Nn2p3e.js} +5 -5
- package/dist/{image-LxFvu0wL.js → image-DgtfXMcX.js} +5 -5
- package/dist/{image-B4mDPdyz.js → image-RKwc3fsL.js} +4 -4
- package/dist/index.js +83 -83
- package/dist/{installs-NS0VMPN7.js → installs-CrLcWYHe.js} +4 -4
- package/dist/{installs-DA-eSN1B.js → installs-DscWb9b9.js} +5 -5
- package/dist/{links-CV4oki2u.js → links-B8LAzWwg.js} +1 -1
- package/dist/{links-7M-j83As.js → links-Eax1UO3w.js} +1 -1
- package/dist/llm-slug-generator.js +15 -15
- package/dist/{loader-Caow9TPA.js → loader-KjT074JR.js} +1105 -762
- package/dist/{logging-CeHn2itV.js → logging-BAyPwvdH.js} +1 -1
- package/dist/{logging-D0MyqUlV.js → logging-CRq4h04P.js} +2 -2
- package/dist/{login-qr-Xx8yJrSc.js → login-qr-B6ZgAuIf.js} +5 -5
- package/dist/{login-qr-CoskdtvN.js → login-qr-Bua-p0nG.js} +2 -2
- package/dist/{login-qr-CAk9D-FM.js → login-qr-CuvemJj4.js} +6 -6
- package/dist/{login-qr-kUyMWXV1.js → login-qr-Djr1JfIf.js} +2 -2
- package/dist/{logs-cli-B476pzJS.js → logs-cli-9IAV7rWY.js} +15 -15
- package/dist/{logs-cli-BQRUI_PO.js → logs-cli-EiKzUFPa.js} +14 -14
- package/dist/{manager-CBApH7eR.js → manager-BIMh_eSm.js} +5 -5
- package/dist/{manager-CyJH6WMg.js → manager-CwinWQoz.js} +5 -5
- package/dist/{manager-DScY_ZTT.js → manager-DkqF1GiK.js} +7 -7
- package/dist/{manager-DseK7RWj.js → manager-T1XfGchB.js} +8 -8
- package/dist/{manifest-registry-DFckk-L8.js → manifest-registry-CQhdnDBZ.js} +2 -2
- package/dist/{manifest-registry-BTgLN_W2.js → manifest-registry-u0okVSkU.js} +2 -2
- package/dist/{message-channel-0717wOz-.js → message-channel-BLi2a6Yw.js} +1 -1
- package/dist/{message-channel-BlgPSDAh.js → message-channel-C_MmebBt.js} +1 -1
- package/dist/{model-auth-CbqRVYRp.js → model-auth-CabXIF6O.js} +57 -19
- package/dist/{model-selection-unMJyUIE.js → model-selection-BLuqsGVB.js} +59 -21
- package/dist/{model-selection-B9Y7dKQd.js → model-selection-C1GmkTAV.js} +57 -19
- package/dist/{models-cli-B1cLGcRz.js → models-cli-9jmDv-h3.js} +50 -48
- package/dist/{models-cli-D7sChCi6.js → models-cli-zS9rtWz8.js} +48 -46
- package/dist/{node-cli-ic2C1xs2.js → node-cli-CrpTxTTs.js} +26 -24
- package/dist/{node-cli-CS3KwBh1.js → node-cli-wemUMCg-.js} +25 -23
- package/dist/{node-service-D_Cdq1JI.js → node-service-C8DTHTMg.js} +2 -2
- package/dist/{node-service-_vgO5xR-.js → node-service-WQuEKz6W.js} +1 -1
- package/dist/{nodes-cli-CipcvVMc.js → nodes-cli-BaU2SIFw.js} +16 -16
- package/dist/{nodes-cli-B1meaW7S.js → nodes-cli-Dx23D72n.js} +16 -16
- package/dist/{nodes-screen-N-4_0VIu.js → nodes-screen-C0IuBqUL.js} +1 -1
- package/dist/{note-CAM9PbSJ.js → note-BhRSeNeu.js} +2 -2
- package/dist/{note-Ci08TSbV.js → note-hhtubr2j.js} +1 -1
- package/dist/{onboard-channels-DMcOT0dj.js → onboard-channels-C501x8GI.js} +8 -8
- package/dist/{onboard-channels-CsT3E4bT.js → onboard-channels-Dxzroasd.js} +8 -8
- package/dist/{onboard-skills-DoxkpnEU.js → onboard-skills-DV0Qzvjj.js} +19 -19
- package/dist/{onboard-skills-D-BrCoRN.js → onboard-skills-rlBHcu3Q.js} +18 -18
- package/dist/{onboarding-B92952fz.js → onboarding-CN-EDLjd.js} +34 -34
- package/dist/{pairing-cli-BDUJ5VoX.js → pairing-cli-CDHG4xuI.js} +15 -15
- package/dist/{pairing-cli-0wbU1u8d.js → pairing-cli-CQP34Dlx.js} +14 -14
- package/dist/{pairing-labels-3o3QO3Qn.js → pairing-labels-B6CN0SNH.js} +1 -1
- package/dist/{pairing-labels-Bin1K7_f.js → pairing-labels-CgNHnjzT.js} +1 -1
- package/dist/{pairing-store-CL4rJ7m7.js → pairing-store-CmlRVqOz.js} +2 -2
- package/dist/{pairing-store-fIWI3pXG.js → pairing-store-Dp5_JGnG.js} +3 -3
- package/dist/{path-env-CXWUFfFv.js → path-env-CLvYNwtL.js} +1 -1
- package/dist/{path-env-C5FR_Eay.js → path-env-CaYUVIML.js} +2 -2
- package/dist/{paths-DwKNqk_S.js → paths-B0a4ywSO.js} +30 -5
- package/dist/{paths-RITJT4UY.js → paths-B49s6UZQ.js} +30 -5
- package/dist/{paths-CB2fqqbX.js → paths-D0O87MfH.js} +30 -5
- package/dist/{paths-IivnSNkP.js → paths-DLINmNFQ.js} +31 -6
- package/dist/{pi-embedded-DhYItk8O.js → pi-embedded-Ctrt2kz0.js} +1109 -662
- package/dist/{pi-embedded-helpers-CmftU5Zj.js → pi-embedded-helpers-CMKLjW6X.js} +8 -5
- package/dist/{pi-embedded-helpers-CfXnSIFx.js → pi-embedded-helpers-CUzTc1v6.js} +170 -19
- package/dist/{pi-embedded-helpers-Uan-3N1T.js → pi-embedded-helpers-DfwkwPYD.js} +7 -4
- package/dist/{pi-embedded-helpers-Bri9tk9g.js → pi-embedded-helpers-WDwx99UA.js} +170 -19
- package/dist/{pi-tools.policy-CJFi1sny.js → pi-tools.policy-BpsROZbz.js} +4 -4
- package/dist/{plugin-auto-enable-BY4CqJbD.js → plugin-auto-enable-Bqhc3w5n.js} +5 -5
- package/dist/{plugin-auto-enable-DbQrtQjL.js → plugin-auto-enable-PW76g_PJ.js} +5 -5
- package/dist/plugin-sdk/agents/pi-embedded-runner/run/params.d.ts +2 -0
- package/dist/plugin-sdk/agents/pi-embedded-runner/run/types.d.ts +2 -0
- package/dist/plugin-sdk/agents/pi-embedded-runner/types.d.ts +15 -0
- package/dist/plugin-sdk/agents/pi-embedded-subscribe.handlers.tools.d.ts +1 -1
- package/dist/plugin-sdk/agents/pi-embedded-subscribe.handlers.types.d.ts +2 -0
- package/dist/plugin-sdk/agents/pi-embedded-subscribe.types.d.ts +2 -0
- package/dist/plugin-sdk/agents/session-tool-result-guard-wrapper.d.ts +2 -0
- package/dist/plugin-sdk/agents/session-tool-result-guard.d.ts +4 -0
- package/dist/plugin-sdk/agents/tools/agent-step.d.ts +3 -0
- package/dist/plugin-sdk/agents/usage.d.ts +1 -0
- package/dist/plugin-sdk/auto-reply/reply/reply-reference.d.ts +1 -1
- package/dist/plugin-sdk/auto-reply/reply/session-run-accounting.d.ts +11 -0
- package/dist/plugin-sdk/auto-reply/reply/session-usage.d.ts +8 -0
- package/dist/plugin-sdk/browser/control-auth.d.ts +13 -0
- package/dist/plugin-sdk/channels/plugins/onboarding/signal.d.ts +1 -0
- package/dist/plugin-sdk/cli/prompt.d.ts +1 -0
- package/dist/plugin-sdk/commands/agent/types.d.ts +2 -0
- package/dist/plugin-sdk/config/sessions/paths.d.ts +7 -2
- package/dist/plugin-sdk/config/types.agents.d.ts +2 -0
- package/dist/plugin-sdk/config/types.discord.d.ts +5 -0
- package/dist/plugin-sdk/config/types.gateway.d.ts +15 -0
- package/dist/plugin-sdk/config/types.hooks.d.ts +15 -0
- package/dist/plugin-sdk/config/zod-schema.agents.d.ts +1 -0
- package/dist/plugin-sdk/config/zod-schema.d.ts +11 -0
- package/dist/plugin-sdk/config/zod-schema.providers-core.d.ts +9 -0
- package/dist/plugin-sdk/config/zod-schema.providers.d.ts +4 -0
- package/dist/plugin-sdk/discord/monitor/allow-list.d.ts +15 -0
- package/dist/plugin-sdk/discord/send.types.d.ts +3 -0
- package/dist/plugin-sdk/gateway/auth.d.ts +36 -0
- package/dist/plugin-sdk/gateway/protocol/schema/agent.d.ts +6 -0
- package/dist/plugin-sdk/gateway/session-utils.fs.d.ts +3 -1
- package/dist/plugin-sdk/index.js +295 -99
- package/dist/plugin-sdk/infra/binaries.d.ts +3 -0
- package/dist/plugin-sdk/infra/heartbeat-runner.d.ts +1 -0
- package/dist/plugin-sdk/infra/net/fetch-guard.d.ts +1 -0
- package/dist/plugin-sdk/infra/net/ssrf.d.ts +1 -0
- package/dist/plugin-sdk/infra/tailscale.d.ts +34 -0
- package/dist/plugin-sdk/infra/tmp-openclaw-dir.d.ts +10 -0
- package/dist/plugin-sdk/logging/logger.d.ts +1 -1
- package/dist/plugin-sdk/media/input-files.d.ts +5 -0
- package/dist/plugin-sdk/routing/resolve-route.d.ts +3 -1
- package/dist/plugin-sdk/security/external-content.d.ts +1 -1
- package/dist/plugin-sdk/security/secret-equal.d.ts +1 -0
- package/dist/plugin-sdk/sessions/input-provenance.d.ts +16 -0
- package/dist/plugin-sdk/signal/monitor/event-handler.types.d.ts +8 -0
- package/dist/plugin-sdk/signal/monitor/mentions.d.ts +2 -0
- package/dist/{plugins-3GyCj5KL.js → plugins-4Hqd1WGf.js} +3 -3
- package/dist/{plugins-BL9lIXSA.js → plugins-X7d_tfTE.js} +4 -4
- package/dist/{plugins-cli-Ce7VsvZh.js → plugins-cli-Bgku3EGj.js} +253 -46
- package/dist/{plugins-cli-e9gUebMd.js → plugins-cli-CVToH3if.js} +254 -47
- package/dist/{ports-DupIRXQ0.js → ports-qkt29rdC.js} +2 -2
- package/dist/{program-u22vbFpH.js → program-Cf7lkBur.js} +82 -82
- package/dist/{progress-g9R--HZD.js → progress-C9kngsTD.js} +1 -1
- package/dist/{progress-Da1ehW-x.js → progress-DWqhRakV.js} +1 -1
- package/dist/{prompt-style-Dc0C5HC9.js → prompt-style-BFH5D5LN.js} +1 -1
- package/dist/{prompt-style-lmJDcgtA.js → prompt-style-CIbmaxSa.js} +1 -1
- package/dist/{pw-ai-C43wv1ZF.js → pw-ai-8mdv3h-d.js} +7 -6
- package/dist/{pw-ai-DTZVjndL.js → pw-ai-CM1IsSgZ.js} +5 -5
- package/dist/{pw-ai-zVebjrSG.js → pw-ai-FGoRVblI.js} +3 -3
- package/dist/{pw-ai-CWrnJ98b.js → pw-ai-sS1fRKW_.js} +3 -3
- package/dist/{qmd-manager-NPD5Yh_4.js → qmd-manager-C67Fc8aN.js} +4 -4
- package/dist/{qmd-manager-ozZ933qc.js → qmd-manager-CXVbfg99.js} +7 -7
- package/dist/{qmd-manager-DBCZ1sio.js → qmd-manager-RMRE8Tqt.js} +6 -6
- package/dist/{qmd-manager-a9Bt0405.js → qmd-manager-pyc_MTIe.js} +4 -4
- package/dist/{register.subclis-BpX3ulH1.js → register.subclis-C02e4zuJ.js} +28 -28
- package/dist/{reply-m467_fOC.js → reply-DICXkh_C.js} +911 -568
- package/dist/{routes-82Ywfho6.js → routes-CmOI1hIH.js} +29 -11
- package/dist/{routes-BqxA3ZYr.js → routes-DewK5tq2.js} +29 -12
- package/dist/{rpc-DcGBG-Fp.js → rpc-DHr30euf.js} +3 -3
- package/dist/{rpc-CfdBHlnp.js → rpc-T300F8zI.js} +3 -3
- package/dist/{run-main-aolvSfj3.js → run-main-C5wpthq1.js} +84 -84
- package/dist/{runner-C1G8RFWl.js → runner-CY0nmVme.js} +9 -9
- package/dist/{runner-BCBs8JKA.js → runner-Cfm5nTMc.js} +6 -6
- package/dist/{runner-CInKPsiP.js → runner-D_dujMod.js} +8 -8
- package/dist/{runner-Cwfn-VOM.js → runner-DrGYLH5K.js} +6 -6
- package/dist/{sandbox-B0K9e6Fw.js → sandbox-BKYnhYQH.js} +23 -15
- package/dist/{sandbox-BW8Xnkw1.js → sandbox-Bhjnh1Xg.js} +21 -13
- package/dist/{sandbox-cli-mKCs2J0i.js → sandbox-cli-DBsAjZJN.js} +20 -20
- package/dist/{sandbox-cli-BD5LkZ0B.js → sandbox-cli-rV9LtFeu.js} +19 -19
- package/dist/{security-cli-kgI4soGy.js → security-cli-BIwJM_rs.js} +27 -27
- package/dist/{security-cli-kz8TiyqU.js → security-cli-BRjny8Yu.js} +26 -26
- package/dist/{server-context-fX4xiYRh.js → server-context-BGpGs3qd.js} +7 -7
- package/dist/{server-context-Lb-eUZG_.js → server-context-Cl0U0vE3.js} +5 -5
- package/dist/{server-node-events-Dx18uVrH.js → server-node-events-CBfTbiTA.js} +45 -43
- package/dist/{server-node-events-KqZMN30F.js → server-node-events-QCvh8EgI.js} +45 -43
- package/dist/{service-DZMXgMra.js → service--nPk7DvT.js} +3 -3
- package/dist/{service-DNcIZ5Kp.js → service-99RDXwX4.js} +2 -2
- package/dist/{service-audit-0WLGnoNT.js → service-audit-DnLmRGQt.js} +4 -4
- package/dist/{service-audit-uhZSlxeb.js → service-audit-ckBaRCVC.js} +3 -3
- package/dist/{session-cost-usage-HU4OeRgw.js → session-cost-usage-D7HuoSSD.js} +10 -8
- package/dist/{session-cost-usage-CL8gnHRN.js → session-cost-usage-D9hHANWI.js} +10 -8
- package/dist/{shared-j4Qtr475.js → shared-Bs4vduG4.js} +3 -3
- package/dist/{shared-BBw6F-YC.js → shared-CEY5IkwG.js} +2 -2
- package/dist/{shared-DOZs2SoH.js → shared-DRohONn_.js} +3 -3
- package/dist/{shared-CtP9K-o2.js → shared-ICqOZibV.js} +3 -3
- package/dist/{skill-scanner-C_fQzVDu.js → skill-scanner-rHMtUHtP.js} +1 -1
- package/dist/{skills-BvPUNjxo.js → skills-DRjfSQT3.js} +128 -4
- package/dist/{skills-aFOsriMP.js → skills-DprQj9X2.js} +129 -5
- package/dist/{skills-cli-oWaTJzZd.js → skills-cli-9WO-C55s.js} +12 -12
- package/dist/{skills-cli-E6shXpdd.js → skills-cli-B9eej-EW.js} +13 -13
- package/dist/{skills-status-D4vbIMnz.js → skills-status-5U3P3YfJ.js} +3 -3
- package/dist/{skills-status-DJDaA2Ur.js → skills-status-TDIgVd1K.js} +2 -2
- package/dist/{sqlite-B7FPASCO.js → sqlite-BINzs1U0.js} +2 -2
- package/dist/{sqlite-B4Z1_Ioc.js → sqlite-D4w5TejA.js} +2 -2
- package/dist/{sqlite-BkYnxkQO.js → sqlite-DRRHmlug.js} +2 -2
- package/dist/{sqlite-EuQPVXvn.js → sqlite-F6PGkEm1.js} +2 -2
- package/dist/{status-B2Yr-2J5.js → status-BKGkKC_v.js} +3 -3
- package/dist/{status-DW7m5xUN.js → status-CiHtHdaa.js} +4 -4
- package/dist/{status-CxhnUa5J.js → status-DDWoOpeB.js} +33 -33
- package/dist/{subsystem-Bv7dGhES.js → subsystem-BoExtIHo.js} +32 -13
- package/dist/{system-cli-0JXhJNWm.js → system-cli-B6lr60Io.js} +14 -14
- package/dist/{system-cli-D-0OaMtH.js → system-cli-CprW9G3h.js} +14 -14
- package/dist/{systemd-CNTodvCO.js → systemd-C0VZriGM.js} +2 -2
- package/dist/{systemd-CUJJHgHa.js → systemd-DrmBtJ5T.js} +3 -3
- package/dist/{systemd-hints-cmHtrXUl.js → systemd-hints-DZtXiVHa.js} +1 -1
- package/dist/{systemd-linger-CArPbmvv.js → systemd-linger-NC2kl1SC.js} +2 -2
- package/dist/{systemd-linger-XvT9Y9sb.js → systemd-linger-xdn3BdPh.js} +2 -2
- package/dist/{table-DzBBIqHO.js → table-B8dx3v4v.js} +2 -2
- package/dist/{table-oJQPTUL6.js → table-CwulTLQp.js} +1 -1
- package/dist/{tool-display-Na-EVL83.js → tool-display-CZRIDMRm.js} +1 -1
- package/dist/{tool-display-sHJa3kRs.js → tool-display-ClRud3pg.js} +2 -2
- package/dist/{tui-nGp8ltQK.js → tui-CVTQn-dC.js} +9 -9
- package/dist/{tui-Biw7aqPj.js → tui-Lu8FdrlK.js} +9 -9
- package/dist/{tui-cli-C9FEfG7C.js → tui-cli-BLpTj1X9.js} +25 -25
- package/dist/{tui-cli-Dxnu5JGl.js → tui-cli-BLx5kL2I.js} +25 -25
- package/dist/{tui-formatters-BiNTNGwg.js → tui-formatters-CNySEfJN.js} +5 -5
- package/dist/{tui-formatters-C_baVYUz.js → tui-formatters-DePhZK3J.js} +5 -5
- package/dist/{update-C4rsLj2F.js → update-DHVxMTpQ.js} +3 -3
- package/dist/{update-uwUWrKFu.js → update-DU1geolI.js} +3 -3
- package/dist/{update-cli-cNd_G9E6.js → update-cli-C0hUvJWK.js} +66 -66
- package/dist/{update-cli-CBXp-c4C.js → update-cli-Wb1GB3rL.js} +68 -68
- package/dist/{update-runner-BLsqC24J.js → update-runner--ixK4J3W.js} +10 -10
- package/dist/{update-runner-C_FDpmA3.js → update-runner-7Qa1T9y6.js} +9 -9
- package/dist/{utils-Dk86IbEs.js → utils-BLJAc3ZV.js} +1 -1
- package/dist/{utils-BHPdZE4h.js → utils-Cd9QdCHh.js} +1 -1
- package/dist/{webhooks-cli-BpBKXL7W.js → webhooks-cli-DgcMy7RG.js} +12 -12
- package/dist/{webhooks-cli-wNfhfKqm.js → webhooks-cli-aVzUcJY9.js} +11 -11
- package/dist/{widearea-dns-WVCWJTEb.js → widearea-dns-BaIgNEhY.js} +1 -1
- package/dist/{widearea-dns-BWYPcfby.js → widearea-dns-DzuRdwk5.js} +1 -1
- package/dist/{ws-log-Cafylho7.js → ws-log-CIXbLCka.js} +1 -1
- package/dist/{ws-log-DTUOUVgR.js → ws-log-DcQFZByi.js} +1 -1
- package/dist/{wsl-B-H6Z5wp.js → wsl-BUOkxKJu.js} +2 -2
- package/docs/automation/webhook.md +43 -2
- package/docs/channels/discord.md +29 -1
- package/docs/cli/plugins.md +20 -1
- package/docs/cli/security.md +1 -0
- package/docs/concepts/session-tool.md +1 -0
- package/docs/gateway/configuration-reference.md +11 -0
- package/docs/gateway/configuration.md +3 -0
- package/docs/gateway/openresponses-http-api.md +15 -0
- package/docs/gateway/security/index.md +3 -0
- package/docs/help/faq.md +9 -0
- package/docs/install/installer.md +20 -0
- package/docs/reference/transcript-hygiene.md +18 -0
- package/docs/tools/browser.md +6 -0
- package/extensions/diagnostics-otel/package.json +9 -9
- package/extensions/feishu/package.json +1 -1
- package/extensions/feishu/src/config-schema.ts +6 -0
- package/extensions/feishu/src/reply-dispatcher.test.ts +116 -0
- package/extensions/feishu/src/reply-dispatcher.ts +124 -67
- package/extensions/feishu/src/streaming-card.ts +223 -0
- package/extensions/feishu/src/targets.test.ts +16 -0
- package/extensions/feishu/src/targets.ts +1 -1
- package/extensions/irc/src/client.ts +1 -1
- package/extensions/minimax-portal-auth/index.ts +7 -5
- package/extensions/nostr/package.json +1 -1
- package/package.json +13 -13
- package/dist/auth-BcNHFK-i.js +0 -184
- package/dist/auth-jrfLXze7.js +0 -184
- /package/dist/{archive-DqNr5i8b.js → archive-beaSfAzA.js} +0 -0
- /package/dist/{brew-BIrWdDps.js → brew-BUIxHEkn.js} +0 -0
- /package/dist/{brew-6UyogeLe.js → brew-ROHf0-Xp.js} +0 -0
- /package/dist/{constants-DuoCkWRh.js → constants-BvQ6S8j5.js} +0 -0
- /package/dist/{errors-x4NYs-1P.js → errors-DjZBTJJ3.js} +0 -0
- /package/dist/{helpers-BDvtkJjw.js → helpers-HyeZXsnu.js} +0 -0
- /package/dist/{is-main-CE1eOBYb.js → is-main-BWoXGz7p.js} +0 -0
- /package/dist/{parse-Cjiudy6x.js → parse-Bw0oH-rT.js} +0 -0
- /package/dist/{parse-timeout-DFSPLxpY.js → parse-timeout-D1XX_zN_.js} +0 -0
- /package/dist/{prompts-BOz5176z.js → prompts-Bg96reub.js} +0 -0
- /package/dist/{redact-DuEEf1p1.js → redact-Br9GfacZ.js} +0 -0
- /package/dist/{skill-scanner-CprFkZib.js → skill-scanner-CucvxYhu.js} +0 -0
- /package/dist/{transcript-events-CZ8CG4ht.js → transcript-events-BtNd-j6q.js} +0 -0
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Feishu Streaming Card - Card Kit streaming API for real-time text output
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import type { Client } from "@larksuiteoapi/node-sdk";
|
|
6
|
+
import type { FeishuDomain } from "./types.js";
|
|
7
|
+
|
|
8
|
+
type Credentials = { appId: string; appSecret: string; domain?: FeishuDomain };
|
|
9
|
+
type CardState = { cardId: string; messageId: string; sequence: number; currentText: string };
|
|
10
|
+
|
|
11
|
+
// Token cache (keyed by domain + appId)
|
|
12
|
+
const tokenCache = new Map<string, { token: string; expiresAt: number }>();
|
|
13
|
+
|
|
14
|
+
function resolveApiBase(domain?: FeishuDomain): string {
|
|
15
|
+
if (domain === "lark") {
|
|
16
|
+
return "https://open.larksuite.com/open-apis";
|
|
17
|
+
}
|
|
18
|
+
if (domain && domain !== "feishu" && domain.startsWith("http")) {
|
|
19
|
+
return `${domain.replace(/\/+$/, "")}/open-apis`;
|
|
20
|
+
}
|
|
21
|
+
return "https://open.feishu.cn/open-apis";
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
async function getToken(creds: Credentials): Promise<string> {
|
|
25
|
+
const key = `${creds.domain ?? "feishu"}|${creds.appId}`;
|
|
26
|
+
const cached = tokenCache.get(key);
|
|
27
|
+
if (cached && cached.expiresAt > Date.now() + 60000) {
|
|
28
|
+
return cached.token;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const res = await fetch(`${resolveApiBase(creds.domain)}/auth/v3/tenant_access_token/internal`, {
|
|
32
|
+
method: "POST",
|
|
33
|
+
headers: { "Content-Type": "application/json" },
|
|
34
|
+
body: JSON.stringify({ app_id: creds.appId, app_secret: creds.appSecret }),
|
|
35
|
+
});
|
|
36
|
+
const data = (await res.json()) as {
|
|
37
|
+
code: number;
|
|
38
|
+
msg: string;
|
|
39
|
+
tenant_access_token?: string;
|
|
40
|
+
expire?: number;
|
|
41
|
+
};
|
|
42
|
+
if (data.code !== 0 || !data.tenant_access_token) {
|
|
43
|
+
throw new Error(`Token error: ${data.msg}`);
|
|
44
|
+
}
|
|
45
|
+
tokenCache.set(key, {
|
|
46
|
+
token: data.tenant_access_token,
|
|
47
|
+
expiresAt: Date.now() + (data.expire ?? 7200) * 1000,
|
|
48
|
+
});
|
|
49
|
+
return data.tenant_access_token;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function truncateSummary(text: string, max = 50): string {
|
|
53
|
+
if (!text) {
|
|
54
|
+
return "";
|
|
55
|
+
}
|
|
56
|
+
const clean = text.replace(/\n/g, " ").trim();
|
|
57
|
+
return clean.length <= max ? clean : clean.slice(0, max - 3) + "...";
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/** Streaming card session manager */
|
|
61
|
+
export class FeishuStreamingSession {
|
|
62
|
+
private client: Client;
|
|
63
|
+
private creds: Credentials;
|
|
64
|
+
private state: CardState | null = null;
|
|
65
|
+
private queue: Promise<void> = Promise.resolve();
|
|
66
|
+
private closed = false;
|
|
67
|
+
private log?: (msg: string) => void;
|
|
68
|
+
private lastUpdateTime = 0;
|
|
69
|
+
private pendingText: string | null = null;
|
|
70
|
+
private updateThrottleMs = 100; // Throttle updates to max 10/sec
|
|
71
|
+
|
|
72
|
+
constructor(client: Client, creds: Credentials, log?: (msg: string) => void) {
|
|
73
|
+
this.client = client;
|
|
74
|
+
this.creds = creds;
|
|
75
|
+
this.log = log;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
async start(
|
|
79
|
+
receiveId: string,
|
|
80
|
+
receiveIdType: "open_id" | "user_id" | "union_id" | "email" | "chat_id" = "chat_id",
|
|
81
|
+
): Promise<void> {
|
|
82
|
+
if (this.state) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const apiBase = resolveApiBase(this.creds.domain);
|
|
87
|
+
const cardJson = {
|
|
88
|
+
schema: "2.0",
|
|
89
|
+
config: {
|
|
90
|
+
streaming_mode: true,
|
|
91
|
+
summary: { content: "[Generating...]" },
|
|
92
|
+
streaming_config: { print_frequency_ms: { default: 50 }, print_step: { default: 2 } },
|
|
93
|
+
},
|
|
94
|
+
body: {
|
|
95
|
+
elements: [{ tag: "markdown", content: "⏳ Thinking...", element_id: "content" }],
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
// Create card entity
|
|
100
|
+
const createRes = await fetch(`${apiBase}/cardkit/v1/cards`, {
|
|
101
|
+
method: "POST",
|
|
102
|
+
headers: {
|
|
103
|
+
Authorization: `Bearer ${await getToken(this.creds)}`,
|
|
104
|
+
"Content-Type": "application/json",
|
|
105
|
+
},
|
|
106
|
+
body: JSON.stringify({ type: "card_json", data: JSON.stringify(cardJson) }),
|
|
107
|
+
});
|
|
108
|
+
const createData = (await createRes.json()) as {
|
|
109
|
+
code: number;
|
|
110
|
+
msg: string;
|
|
111
|
+
data?: { card_id: string };
|
|
112
|
+
};
|
|
113
|
+
if (createData.code !== 0 || !createData.data?.card_id) {
|
|
114
|
+
throw new Error(`Create card failed: ${createData.msg}`);
|
|
115
|
+
}
|
|
116
|
+
const cardId = createData.data.card_id;
|
|
117
|
+
|
|
118
|
+
// Send card message
|
|
119
|
+
const sendRes = await this.client.im.message.create({
|
|
120
|
+
params: { receive_id_type: receiveIdType },
|
|
121
|
+
data: {
|
|
122
|
+
receive_id: receiveId,
|
|
123
|
+
msg_type: "interactive",
|
|
124
|
+
content: JSON.stringify({ type: "card", data: { card_id: cardId } }),
|
|
125
|
+
},
|
|
126
|
+
});
|
|
127
|
+
if (sendRes.code !== 0 || !sendRes.data?.message_id) {
|
|
128
|
+
throw new Error(`Send card failed: ${sendRes.msg}`);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
this.state = { cardId, messageId: sendRes.data.message_id, sequence: 1, currentText: "" };
|
|
132
|
+
this.log?.(`Started streaming: cardId=${cardId}, messageId=${sendRes.data.message_id}`);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
async update(text: string): Promise<void> {
|
|
136
|
+
if (!this.state || this.closed) {
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
// Throttle: skip if updated recently, but remember pending text
|
|
140
|
+
const now = Date.now();
|
|
141
|
+
if (now - this.lastUpdateTime < this.updateThrottleMs) {
|
|
142
|
+
this.pendingText = text;
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
this.pendingText = null;
|
|
146
|
+
this.lastUpdateTime = now;
|
|
147
|
+
|
|
148
|
+
this.queue = this.queue.then(async () => {
|
|
149
|
+
if (!this.state || this.closed) {
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
this.state.currentText = text;
|
|
153
|
+
this.state.sequence += 1;
|
|
154
|
+
const apiBase = resolveApiBase(this.creds.domain);
|
|
155
|
+
await fetch(`${apiBase}/cardkit/v1/cards/${this.state.cardId}/elements/content/content`, {
|
|
156
|
+
method: "PUT",
|
|
157
|
+
headers: {
|
|
158
|
+
Authorization: `Bearer ${await getToken(this.creds)}`,
|
|
159
|
+
"Content-Type": "application/json",
|
|
160
|
+
},
|
|
161
|
+
body: JSON.stringify({
|
|
162
|
+
content: text,
|
|
163
|
+
sequence: this.state.sequence,
|
|
164
|
+
uuid: `s_${this.state.cardId}_${this.state.sequence}`,
|
|
165
|
+
}),
|
|
166
|
+
}).catch((e) => this.log?.(`Update failed: ${String(e)}`));
|
|
167
|
+
});
|
|
168
|
+
await this.queue;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
async close(finalText?: string): Promise<void> {
|
|
172
|
+
if (!this.state || this.closed) {
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
this.closed = true;
|
|
176
|
+
await this.queue;
|
|
177
|
+
|
|
178
|
+
// Use finalText, or pending throttled text, or current text
|
|
179
|
+
const text = finalText ?? this.pendingText ?? this.state.currentText;
|
|
180
|
+
const apiBase = resolveApiBase(this.creds.domain);
|
|
181
|
+
|
|
182
|
+
// Only send final update if content differs from what's already displayed
|
|
183
|
+
if (text && text !== this.state.currentText) {
|
|
184
|
+
this.state.sequence += 1;
|
|
185
|
+
await fetch(`${apiBase}/cardkit/v1/cards/${this.state.cardId}/elements/content/content`, {
|
|
186
|
+
method: "PUT",
|
|
187
|
+
headers: {
|
|
188
|
+
Authorization: `Bearer ${await getToken(this.creds)}`,
|
|
189
|
+
"Content-Type": "application/json",
|
|
190
|
+
},
|
|
191
|
+
body: JSON.stringify({
|
|
192
|
+
content: text,
|
|
193
|
+
sequence: this.state.sequence,
|
|
194
|
+
uuid: `s_${this.state.cardId}_${this.state.sequence}`,
|
|
195
|
+
}),
|
|
196
|
+
}).catch(() => {});
|
|
197
|
+
this.state.currentText = text;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// Close streaming mode
|
|
201
|
+
this.state.sequence += 1;
|
|
202
|
+
await fetch(`${apiBase}/cardkit/v1/cards/${this.state.cardId}/settings`, {
|
|
203
|
+
method: "PATCH",
|
|
204
|
+
headers: {
|
|
205
|
+
Authorization: `Bearer ${await getToken(this.creds)}`,
|
|
206
|
+
"Content-Type": "application/json; charset=utf-8",
|
|
207
|
+
},
|
|
208
|
+
body: JSON.stringify({
|
|
209
|
+
settings: JSON.stringify({
|
|
210
|
+
config: { streaming_mode: false, summary: { content: truncateSummary(text) } },
|
|
211
|
+
}),
|
|
212
|
+
sequence: this.state.sequence,
|
|
213
|
+
uuid: `c_${this.state.cardId}_${this.state.sequence}`,
|
|
214
|
+
}),
|
|
215
|
+
}).catch((e) => this.log?.(`Close failed: ${String(e)}`));
|
|
216
|
+
|
|
217
|
+
this.log?.(`Closed streaming: cardId=${this.state.cardId}`);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
isActive(): boolean {
|
|
221
|
+
return this.state !== null && !this.closed;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { describe, expect, it } from "vitest";
|
|
2
|
+
import { resolveReceiveIdType } from "./targets.js";
|
|
3
|
+
|
|
4
|
+
describe("resolveReceiveIdType", () => {
|
|
5
|
+
it("resolves chat IDs by oc_ prefix", () => {
|
|
6
|
+
expect(resolveReceiveIdType("oc_123")).toBe("chat_id");
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
it("resolves open IDs by ou_ prefix", () => {
|
|
10
|
+
expect(resolveReceiveIdType("ou_123")).toBe("open_id");
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
it("defaults unprefixed IDs to user_id", () => {
|
|
14
|
+
expect(resolveReceiveIdType("u_123")).toBe("user_id");
|
|
15
|
+
});
|
|
16
|
+
});
|
|
@@ -57,7 +57,7 @@ export function resolveReceiveIdType(id: string): "chat_id" | "open_id" | "user_
|
|
|
57
57
|
if (trimmed.startsWith(OPEN_ID_PREFIX)) {
|
|
58
58
|
return "open_id";
|
|
59
59
|
}
|
|
60
|
-
return "
|
|
60
|
+
return "user_id";
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
export function looksLikeFeishuId(raw: string): boolean {
|
|
@@ -8,7 +8,7 @@ import { loginMiniMaxPortalOAuth, type MiniMaxRegion } from "./oauth.js";
|
|
|
8
8
|
|
|
9
9
|
const PROVIDER_ID = "minimax-portal";
|
|
10
10
|
const PROVIDER_LABEL = "MiniMax";
|
|
11
|
-
const DEFAULT_MODEL = "MiniMax-M2.
|
|
11
|
+
const DEFAULT_MODEL = "MiniMax-M2.5";
|
|
12
12
|
const DEFAULT_BASE_URL_CN = "https://api.minimaxi.com/anthropic";
|
|
13
13
|
const DEFAULT_BASE_URL_GLOBAL = "https://api.minimax.io/anthropic";
|
|
14
14
|
const DEFAULT_CONTEXT_WINDOW = 200000;
|
|
@@ -27,11 +27,12 @@ function buildModelDefinition(params: {
|
|
|
27
27
|
id: string;
|
|
28
28
|
name: string;
|
|
29
29
|
input: Array<"text" | "image">;
|
|
30
|
+
reasoning?: boolean;
|
|
30
31
|
}) {
|
|
31
32
|
return {
|
|
32
33
|
id: params.id,
|
|
33
34
|
name: params.name,
|
|
34
|
-
reasoning: false,
|
|
35
|
+
reasoning: params.reasoning ?? false,
|
|
35
36
|
input: params.input,
|
|
36
37
|
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
|
|
37
38
|
contextWindow: DEFAULT_CONTEXT_WINDOW,
|
|
@@ -89,9 +90,10 @@ function createOAuthHandler(region: MiniMaxRegion) {
|
|
|
89
90
|
input: ["text"],
|
|
90
91
|
}),
|
|
91
92
|
buildModelDefinition({
|
|
92
|
-
id: "MiniMax-M2.
|
|
93
|
-
name: "MiniMax M2.
|
|
93
|
+
id: "MiniMax-M2.5",
|
|
94
|
+
name: "MiniMax M2.5",
|
|
94
95
|
input: ["text"],
|
|
96
|
+
reasoning: true,
|
|
95
97
|
}),
|
|
96
98
|
],
|
|
97
99
|
},
|
|
@@ -101,7 +103,7 @@ function createOAuthHandler(region: MiniMaxRegion) {
|
|
|
101
103
|
defaults: {
|
|
102
104
|
models: {
|
|
103
105
|
[modelRef("MiniMax-M2.1")]: { alias: "minimax-m2.1" },
|
|
104
|
-
[modelRef("MiniMax-M2.
|
|
106
|
+
[modelRef("MiniMax-M2.5")]: { alias: "minimax-m2.5" },
|
|
105
107
|
},
|
|
106
108
|
},
|
|
107
109
|
},
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "activeclaw",
|
|
3
|
-
"version": "2026.2.
|
|
3
|
+
"version": "2026.2.13",
|
|
4
4
|
"description": "Multi-channel AI gateway with extensible messaging integrations",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"license": "MIT",
|
|
@@ -110,19 +110,19 @@
|
|
|
110
110
|
},
|
|
111
111
|
"dependencies": {
|
|
112
112
|
"@agentclientprotocol/sdk": "0.14.1",
|
|
113
|
-
"@aws-sdk/client-bedrock": "^3.
|
|
113
|
+
"@aws-sdk/client-bedrock": "^3.989.0",
|
|
114
114
|
"@buape/carbon": "0.14.0",
|
|
115
|
-
"@clack/prompts": "^1.0.
|
|
115
|
+
"@clack/prompts": "^1.0.1",
|
|
116
116
|
"@grammyjs/runner": "^2.0.3",
|
|
117
117
|
"@grammyjs/transformer-throttler": "^1.2.1",
|
|
118
118
|
"@homebridge/ciao": "^1.3.5",
|
|
119
|
-
"@larksuiteoapi/node-sdk": "^1.
|
|
119
|
+
"@larksuiteoapi/node-sdk": "^1.59.0",
|
|
120
120
|
"@line/bot-sdk": "^10.6.0",
|
|
121
121
|
"@lydell/node-pty": "1.2.0-beta.3",
|
|
122
|
-
"@mariozechner/pi-agent-core": "0.52.
|
|
123
|
-
"@mariozechner/pi-ai": "0.52.
|
|
124
|
-
"@mariozechner/pi-coding-agent": "0.52.
|
|
125
|
-
"@mariozechner/pi-tui": "0.52.
|
|
122
|
+
"@mariozechner/pi-agent-core": "0.52.10",
|
|
123
|
+
"@mariozechner/pi-ai": "0.52.10",
|
|
124
|
+
"@mariozechner/pi-coding-agent": "0.52.10",
|
|
125
|
+
"@mariozechner/pi-tui": "0.52.10",
|
|
126
126
|
"@mozilla/readability": "^0.6.0",
|
|
127
127
|
"@sinclair/typebox": "0.34.48",
|
|
128
128
|
"@slack/bolt": "^4.6.0",
|
|
@@ -135,7 +135,7 @@
|
|
|
135
135
|
"commander": "^14.0.3",
|
|
136
136
|
"croner": "^10.0.1",
|
|
137
137
|
"discord-api-types": "^0.38.38",
|
|
138
|
-
"dotenv": "^17.
|
|
138
|
+
"dotenv": "^17.3.1",
|
|
139
139
|
"express": "^5.2.1",
|
|
140
140
|
"file-type": "^21.3.0",
|
|
141
141
|
"grammy": "^1.40.0",
|
|
@@ -171,13 +171,13 @@
|
|
|
171
171
|
"@types/proper-lockfile": "^4.1.4",
|
|
172
172
|
"@types/qrcode-terminal": "^0.12.2",
|
|
173
173
|
"@types/ws": "^8.18.1",
|
|
174
|
-
"@typescript/native-preview": "7.0.0-dev.
|
|
174
|
+
"@typescript/native-preview": "7.0.0-dev.20260212.1",
|
|
175
175
|
"@vitest/coverage-v8": "^4.0.18",
|
|
176
176
|
"lit": "^3.3.2",
|
|
177
177
|
"ollama": "^0.6.3",
|
|
178
|
-
"oxfmt": "0.
|
|
179
|
-
"oxlint": "^1.
|
|
180
|
-
"oxlint-tsgolint": "^0.12.
|
|
178
|
+
"oxfmt": "0.32.0",
|
|
179
|
+
"oxlint": "^1.47.0",
|
|
180
|
+
"oxlint-tsgolint": "^0.12.1",
|
|
181
181
|
"rolldown": "1.0.0-rc.4",
|
|
182
182
|
"tsdown": "^0.20.3",
|
|
183
183
|
"tsx": "^4.21.0",
|
package/dist/auth-BcNHFK-i.js
DELETED
|
@@ -1,184 +0,0 @@
|
|
|
1
|
-
import { i as isTrustedProxyAddress, l as resolveGatewayClientIp, n as isLoopbackAddress, o as parseForwardedForClientIp } from "./ws-C0k_dhCP.js";
|
|
2
|
-
import { c as readTailscaleWhoisIdentity } from "./tailscale-DU6DgqVy.js";
|
|
3
|
-
import { timingSafeEqual } from "node:crypto";
|
|
4
|
-
|
|
5
|
-
//#region src/gateway/auth.ts
|
|
6
|
-
function safeEqual(a, b) {
|
|
7
|
-
if (a.length !== b.length) return false;
|
|
8
|
-
return timingSafeEqual(Buffer.from(a), Buffer.from(b));
|
|
9
|
-
}
|
|
10
|
-
function normalizeLogin(login) {
|
|
11
|
-
return login.trim().toLowerCase();
|
|
12
|
-
}
|
|
13
|
-
function getHostName(hostHeader) {
|
|
14
|
-
const host = (hostHeader ?? "").trim().toLowerCase();
|
|
15
|
-
if (!host) return "";
|
|
16
|
-
if (host.startsWith("[")) {
|
|
17
|
-
const end = host.indexOf("]");
|
|
18
|
-
if (end !== -1) return host.slice(1, end);
|
|
19
|
-
}
|
|
20
|
-
const [name] = host.split(":");
|
|
21
|
-
return name ?? "";
|
|
22
|
-
}
|
|
23
|
-
function headerValue(value) {
|
|
24
|
-
return Array.isArray(value) ? value[0] : value;
|
|
25
|
-
}
|
|
26
|
-
function resolveTailscaleClientIp(req) {
|
|
27
|
-
if (!req) return;
|
|
28
|
-
const forwardedFor = headerValue(req.headers?.["x-forwarded-for"]);
|
|
29
|
-
return forwardedFor ? parseForwardedForClientIp(forwardedFor) : void 0;
|
|
30
|
-
}
|
|
31
|
-
function resolveRequestClientIp(req, trustedProxies) {
|
|
32
|
-
if (!req) return;
|
|
33
|
-
return resolveGatewayClientIp({
|
|
34
|
-
remoteAddr: req.socket?.remoteAddress ?? "",
|
|
35
|
-
forwardedFor: headerValue(req.headers?.["x-forwarded-for"]),
|
|
36
|
-
realIp: headerValue(req.headers?.["x-real-ip"]),
|
|
37
|
-
trustedProxies
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
function isLocalDirectRequest(req, trustedProxies) {
|
|
41
|
-
if (!req) return false;
|
|
42
|
-
if (!isLoopbackAddress(resolveRequestClientIp(req, trustedProxies) ?? "")) return false;
|
|
43
|
-
const host = getHostName(req.headers?.host);
|
|
44
|
-
const hostIsLocal = host === "localhost" || host === "127.0.0.1" || host === "::1";
|
|
45
|
-
const hostIsTailscaleServe = host.endsWith(".ts.net");
|
|
46
|
-
const hasForwarded = Boolean(req.headers?.["x-forwarded-for"] || req.headers?.["x-real-ip"] || req.headers?.["x-forwarded-host"]);
|
|
47
|
-
const remoteIsTrustedProxy = isTrustedProxyAddress(req.socket?.remoteAddress, trustedProxies);
|
|
48
|
-
return (hostIsLocal || hostIsTailscaleServe) && (!hasForwarded || remoteIsTrustedProxy);
|
|
49
|
-
}
|
|
50
|
-
function getTailscaleUser(req) {
|
|
51
|
-
if (!req) return null;
|
|
52
|
-
const login = req.headers["tailscale-user-login"];
|
|
53
|
-
if (typeof login !== "string" || !login.trim()) return null;
|
|
54
|
-
const nameRaw = req.headers["tailscale-user-name"];
|
|
55
|
-
const profilePic = req.headers["tailscale-user-profile-pic"];
|
|
56
|
-
const name = typeof nameRaw === "string" && nameRaw.trim() ? nameRaw.trim() : login.trim();
|
|
57
|
-
return {
|
|
58
|
-
login: login.trim(),
|
|
59
|
-
name,
|
|
60
|
-
profilePic: typeof profilePic === "string" && profilePic.trim() ? profilePic.trim() : void 0
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
function hasTailscaleProxyHeaders(req) {
|
|
64
|
-
if (!req) return false;
|
|
65
|
-
return Boolean(req.headers["x-forwarded-for"] && req.headers["x-forwarded-proto"] && req.headers["x-forwarded-host"]);
|
|
66
|
-
}
|
|
67
|
-
function isTailscaleProxyRequest(req) {
|
|
68
|
-
if (!req) return false;
|
|
69
|
-
return isLoopbackAddress(req.socket?.remoteAddress) && hasTailscaleProxyHeaders(req);
|
|
70
|
-
}
|
|
71
|
-
async function resolveVerifiedTailscaleUser(params) {
|
|
72
|
-
const { req, tailscaleWhois } = params;
|
|
73
|
-
const tailscaleUser = getTailscaleUser(req);
|
|
74
|
-
if (!tailscaleUser) return {
|
|
75
|
-
ok: false,
|
|
76
|
-
reason: "tailscale_user_missing"
|
|
77
|
-
};
|
|
78
|
-
if (!isTailscaleProxyRequest(req)) return {
|
|
79
|
-
ok: false,
|
|
80
|
-
reason: "tailscale_proxy_missing"
|
|
81
|
-
};
|
|
82
|
-
const clientIp = resolveTailscaleClientIp(req);
|
|
83
|
-
if (!clientIp) return {
|
|
84
|
-
ok: false,
|
|
85
|
-
reason: "tailscale_whois_failed"
|
|
86
|
-
};
|
|
87
|
-
const whois = await tailscaleWhois(clientIp);
|
|
88
|
-
if (!whois?.login) return {
|
|
89
|
-
ok: false,
|
|
90
|
-
reason: "tailscale_whois_failed"
|
|
91
|
-
};
|
|
92
|
-
if (normalizeLogin(whois.login) !== normalizeLogin(tailscaleUser.login)) return {
|
|
93
|
-
ok: false,
|
|
94
|
-
reason: "tailscale_user_mismatch"
|
|
95
|
-
};
|
|
96
|
-
return {
|
|
97
|
-
ok: true,
|
|
98
|
-
user: {
|
|
99
|
-
login: whois.login,
|
|
100
|
-
name: whois.name ?? tailscaleUser.name,
|
|
101
|
-
profilePic: tailscaleUser.profilePic
|
|
102
|
-
}
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
function resolveGatewayAuth(params) {
|
|
106
|
-
const authConfig = params.authConfig ?? {};
|
|
107
|
-
const env = params.env ?? process.env;
|
|
108
|
-
const token = authConfig.token ?? env.OPENCLAW_GATEWAY_TOKEN ?? env.CLAWDBOT_GATEWAY_TOKEN ?? void 0;
|
|
109
|
-
const password = authConfig.password ?? env.OPENCLAW_GATEWAY_PASSWORD ?? env.CLAWDBOT_GATEWAY_PASSWORD ?? void 0;
|
|
110
|
-
const mode = authConfig.mode ?? (password ? "password" : "token");
|
|
111
|
-
return {
|
|
112
|
-
mode,
|
|
113
|
-
token,
|
|
114
|
-
password,
|
|
115
|
-
allowTailscale: authConfig.allowTailscale ?? (params.tailscaleMode === "serve" && mode !== "password")
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
function assertGatewayAuthConfigured(auth) {
|
|
119
|
-
if (auth.mode === "token" && !auth.token) {
|
|
120
|
-
if (auth.allowTailscale) return;
|
|
121
|
-
throw new Error("gateway auth mode is token, but no token was configured (set gateway.auth.token or OPENCLAW_GATEWAY_TOKEN)");
|
|
122
|
-
}
|
|
123
|
-
if (auth.mode === "password" && !auth.password) throw new Error("gateway auth mode is password, but no password was configured");
|
|
124
|
-
}
|
|
125
|
-
async function authorizeGatewayConnect(params) {
|
|
126
|
-
const { auth, connectAuth, req, trustedProxies } = params;
|
|
127
|
-
const tailscaleWhois = params.tailscaleWhois ?? readTailscaleWhoisIdentity;
|
|
128
|
-
const localDirect = isLocalDirectRequest(req, trustedProxies);
|
|
129
|
-
if (auth.allowTailscale && !localDirect) {
|
|
130
|
-
const tailscaleCheck = await resolveVerifiedTailscaleUser({
|
|
131
|
-
req,
|
|
132
|
-
tailscaleWhois
|
|
133
|
-
});
|
|
134
|
-
if (tailscaleCheck.ok) return {
|
|
135
|
-
ok: true,
|
|
136
|
-
method: "tailscale",
|
|
137
|
-
user: tailscaleCheck.user.login
|
|
138
|
-
};
|
|
139
|
-
}
|
|
140
|
-
if (auth.mode === "token") {
|
|
141
|
-
if (!auth.token) return {
|
|
142
|
-
ok: false,
|
|
143
|
-
reason: "token_missing_config"
|
|
144
|
-
};
|
|
145
|
-
if (!connectAuth?.token) return {
|
|
146
|
-
ok: false,
|
|
147
|
-
reason: "token_missing"
|
|
148
|
-
};
|
|
149
|
-
if (!safeEqual(connectAuth.token, auth.token)) return {
|
|
150
|
-
ok: false,
|
|
151
|
-
reason: "token_mismatch"
|
|
152
|
-
};
|
|
153
|
-
return {
|
|
154
|
-
ok: true,
|
|
155
|
-
method: "token"
|
|
156
|
-
};
|
|
157
|
-
}
|
|
158
|
-
if (auth.mode === "password") {
|
|
159
|
-
const password = connectAuth?.password;
|
|
160
|
-
if (!auth.password) return {
|
|
161
|
-
ok: false,
|
|
162
|
-
reason: "password_missing_config"
|
|
163
|
-
};
|
|
164
|
-
if (!password) return {
|
|
165
|
-
ok: false,
|
|
166
|
-
reason: "password_missing"
|
|
167
|
-
};
|
|
168
|
-
if (!safeEqual(password, auth.password)) return {
|
|
169
|
-
ok: false,
|
|
170
|
-
reason: "password_mismatch"
|
|
171
|
-
};
|
|
172
|
-
return {
|
|
173
|
-
ok: true,
|
|
174
|
-
method: "password"
|
|
175
|
-
};
|
|
176
|
-
}
|
|
177
|
-
return {
|
|
178
|
-
ok: false,
|
|
179
|
-
reason: "unauthorized"
|
|
180
|
-
};
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
//#endregion
|
|
184
|
-
export { resolveGatewayAuth as i, authorizeGatewayConnect as n, isLocalDirectRequest as r, assertGatewayAuthConfigured as t };
|