fengming 0.3.4 → 0.3.5
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 +3 -2
- package/dist/abort-CjCDVBbH.js +277 -0
- package/dist/abort.runtime-DxJ8129J.js +2 -0
- package/dist/abort.runtime.js +1 -1
- package/dist/accounts-Cyn0sm_v.js +423 -0
- package/dist/accounts-DzcLKcN5.js +2 -0
- package/dist/acp/control-plane/manager.js +1 -1
- package/dist/acp-spawn-4lfz_3K9.js +1286 -0
- package/dist/acp-spawn-BCUjuO6L.js +2 -0
- package/dist/acp-stateful-target-driver-Bv99uwEA.js +89 -0
- package/dist/action-info-CP-p6RHS.js +75 -0
- package/dist/active-runtime-registry-DjKe53a5.js +62 -0
- package/dist/active-tool-schema-warnings-p7CqUnu1.js +105 -0
- package/dist/active-tool-schema-warnings-pGI92yka.js +2 -0
- package/dist/agent-B77yluip.js +1825 -0
- package/dist/agent-BooUvZnR.js +2 -0
- package/dist/agent-bundle-lsp-runtime-3ieSgTgo.js +389 -0
- package/dist/agent-bundle-lsp-runtime-CkJ0XJK7.js +2 -0
- package/dist/agent-bundle-mcp-materialize-BH-esGZL.js +124 -0
- package/dist/agent-bundle-mcp-tools-DkixTTnL.js +3 -0
- package/dist/agent-command-BJKcnQy6.js +1435 -0
- package/dist/agent-delivery-CEfe_Zzt.js +117 -0
- package/dist/agent-harness-runtime-R_Ae6o9C.js +207 -0
- package/dist/agent-kWSaRcQt.js +3 -0
- package/dist/agent-model-discovery-C49swEgd.js +238 -0
- package/dist/agent-model-discovery-DZbixJQs.js +3 -0
- package/dist/agent-runner-utils-BChpi9Ec.js +267 -0
- package/dist/agent-runner.runtime-3LOdt215.js +3784 -0
- package/dist/agent-runner.runtime.js +1 -1
- package/dist/agent-runtime-3jsv8b7Y.js +199 -0
- package/dist/agent-runtime-label-uoFI4ovH.js +30 -0
- package/dist/agent-runtime-metadata-BhFt6kLt.js +53 -0
- package/dist/agent-tool-result-middleware-loader-BxYJNC1i.js +55 -0
- package/dist/agent-tools-COLEG7aL.js +2506 -0
- package/dist/agent-tools.before-tool-call--rMZI5Rd.js +1274 -0
- package/dist/agent-tools.before-tool-call-CbX2sfP4.js +2 -0
- package/dist/agent-via-gateway-DfKij3De.js +486 -0
- package/dist/agent-wait-dedupe-BAUSJotw.js +180 -0
- package/dist/agents/agent-bundle-mcp-materialize.js +1 -1
- package/dist/agents/auth-profiles.runtime.js +1 -1
- package/dist/agents/compaction-planning.worker.js +1 -1
- package/dist/agents/embedded-agent-runner/effective-tool-policy.js +1 -1
- package/dist/agents/embedded-agent-runner/tool-split.js +1 -1
- package/dist/agents/model-catalog.runtime.js +1 -1
- package/dist/agents/model-provider-auth.worker.js +3 -3
- package/dist/agents/models-config.runtime.js +1 -1
- package/dist/agents-CZSNDJWD.js +632 -0
- package/dist/agents.command-shared-DgbjfH23.js +16 -0
- package/dist/agents.commands.add-DknGM1oz.js +304 -0
- package/dist/agents.commands.bind-DDVI0yDe.js +265 -0
- package/dist/agents.commands.delete-Dv4RHEhc.js +128 -0
- package/dist/agents.commands.identity-BSZbc1QR.js +143 -0
- package/dist/agents.commands.list-CA0OTw59.js +235 -0
- package/dist/aliases-EY1GbfwT.js +97 -0
- package/dist/api-CY0oKcRz.js +3 -0
- package/dist/api-DgjY0gIl.js +6 -0
- package/dist/api-VyMyAYze.js +2 -0
- package/dist/api-key-rotation-DxPKIdmC.js +167 -0
- package/dist/app-registration-BBDxCbFo.js +194 -0
- package/dist/apply-DMYy7tc3.js +544 -0
- package/dist/apply-Dd0n97MD.js +2 -0
- package/dist/apply-bHIT1nMp.js +416 -0
- package/dist/apply-g8x7Z83S.js +510 -0
- package/dist/apply-nnbx9TaB.js +2 -0
- package/dist/approval-native-helpers-CjaYvOaZ.js +398 -0
- package/dist/artifacts-B55YR-uA.js +368 -0
- package/dist/assistant-hJaOgfKl.js +291 -0
- package/dist/attachment-normalize-COsastJx.js +213 -0
- package/dist/attempt-execution-fDWDWcWe.js +584 -0
- package/dist/attempt-execution.helpers-Cze5xPim.js +969 -0
- package/dist/attempt-execution.runtime-B1iCG6LN.js +3 -0
- package/dist/attempt-execution.runtime.js +1 -1
- package/dist/attempt.prompt-helpers-CkBYHBBo.js +543 -0
- package/dist/attempt.tool-run-context-DzfRK5pV.js +1240 -0
- package/dist/audio-preflight.runtime-rjWd9uyk.js +7 -0
- package/dist/audio-preflight.runtime.js +1 -1
- package/dist/audit-DgFtNg3U.js +1108 -0
- package/dist/audit-L8EC3WhV.js +477 -0
- package/dist/audit.nondeep.runtime-D0sQ6bO2.js +1416 -0
- package/dist/audit.nondeep.runtime.js +1 -1
- package/dist/audit.runtime-CiG82F31.js +7 -0
- package/dist/audit.runtime.js +1 -1
- package/dist/auth-CzPdsZVM.js +567 -0
- package/dist/auth-choice-BNzS9QBI.js +3 -0
- package/dist/auth-choice-Cwr5kgcD.js +110 -0
- package/dist/auth-choice-DW9qPpMS.js +400 -0
- package/dist/auth-choice.apply.api-providers-C68tOdqj.js +34 -0
- package/dist/auth-choice.apply.api-providers-DSRK0gYo.js +2 -0
- package/dist/auth-choice.plugin-providers.runtime-BJ9VyO1C.js +11 -0
- package/dist/auth-choice.plugin-providers.runtime.js +1 -1
- package/dist/auth-health-BanKwsTW.js +219 -0
- package/dist/auth-list-Dq8obVno.js +115 -0
- package/dist/auth-order-VXqoAroP.js +105 -0
- package/dist/auth-profiles-6VFEdgC-.js +73 -0
- package/dist/auth-profiles-a0M4JYYg.js +14 -0
- package/dist/backend-config-COaTdVnN.js +259 -0
- package/dist/bash-tools-BMAquSiM.js +3 -0
- package/dist/bash-tools-DLiUXfaS.js +3497 -0
- package/dist/binding-routing-Bwvdx_7S.js +113 -0
- package/dist/binding-targets-Z_d0mK_1.js +121 -0
- package/dist/bootstrap-files-CoCV_zqu.js +202 -0
- package/dist/bootstrap-files-_T3VoTrV.js +3 -0
- package/dist/bridge-server-BIaNurGa.js +113 -0
- package/dist/browser-cli-D4wL8NU9.js +230 -0
- package/dist/browser-cli-actions-input-z40PGiYI.js +522 -0
- package/dist/browser-cli-actions-observe-C4TeyNke.js +81 -0
- package/dist/browser-cli-debug-Dv0gH-c8.js +137 -0
- package/dist/browser-cli-inspect-BUXeITYc.js +117 -0
- package/dist/browser-cli-manage-qMb3Yw5Y.js +446 -0
- package/dist/browser-cli-resize-CZWnGwGz.js +32 -0
- package/dist/browser-cli-shared-BpinhvE3.js +69 -0
- package/dist/browser-cli-state-CBbKqqgP.js +371 -0
- package/dist/browser-cli-uI5GGX51.js +2 -0
- package/dist/browser-control-auth-CFPJXdN_.js +2 -0
- package/dist/browser-profiles-D4ni3t4J.js +2 -0
- package/dist/browser-runtime-Dm5D_PLf.js +389 -0
- package/dist/browser-tool.schema-Bek02ox5.js +132 -0
- package/dist/btw-command-DdrwvCK4.js +18 -0
- package/dist/build-DkEeJ9sO.js +261 -0
- package/dist/build-info.json +2 -2
- package/dist/bundled/boot-md/handler.js +2 -2
- package/dist/bundled/session-memory/handler.js +1 -1
- package/dist/bundled-channel-config-schema-BeowdkHi.d.ts +3168 -0
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/capability-cli-DTRuKZJC.js +1809 -0
- package/dist/capability-provider-runtime-Cpp-Jq9g.js +346 -0
- package/dist/cdp.helpers-GfQkB-B5.js +637 -0
- package/dist/channel-BRehZ4Cg.js +2309 -0
- package/dist/channel-actions-hdQKe_se.js +46 -0
- package/dist/channel-bootstrap.runtime-BzjlNG_j.js +38 -0
- package/dist/channel-bootstrap.runtime-CmNNVl40.js +2 -0
- package/dist/channel-bootstrap.runtime.js +1 -1
- package/dist/channel-core-BLcWqSk-.js +5 -0
- package/dist/channel-inbound-pR1B7HTU.js +121 -0
- package/dist/channel-message-W0VurpjH.js +12 -0
- package/dist/channel-outbound-DO4HI6E_.js +436 -0
- package/dist/channel-plugin-resolution-CLA7S5_A.js +2 -0
- package/dist/channel-plugin-resolution-DzwVj01h.js +135 -0
- package/dist/channel-resolution-DOPyiG4k.js +46 -0
- package/dist/channel-selection-kwoWZDQ3.js +171 -0
- package/dist/channel-selection.runtime-LiDliif9.js +2 -0
- package/dist/channel-selection.runtime.js +1 -1
- package/dist/channel.runtime-DDt3PayH.js +697 -0
- package/dist/channel.runtime.js +1 -1
- package/dist/channels-CKJd4eUz.js +1004 -0
- package/dist/channels-cli-DLAPi8pX.js +331 -0
- package/dist/chat-6WsYrS9m.js +3 -0
- package/dist/chat-DpsCEXAx.js +2940 -0
- package/dist/chrome-BWHc9vYG.js +1517 -0
- package/dist/chrome-mcp-BGKgR8A_.js +2 -0
- package/dist/chrome-mcp-Bg5D5PDc.js +864 -0
- package/dist/claude-live-session-BLCZnv-A.js +2 -0
- package/dist/claude-live-session-CGnB64D6.js +1338 -0
- package/dist/clawbot-cli-ynXzgp8B.js +9 -0
- package/dist/cli/daemon-cli.js +3 -3
- package/dist/cli/gateway-lifecycle.runtime.js +4 -4
- package/dist/cli/run-main.js +12 -12
- package/dist/cli-B4Ttnj0P.js +2 -0
- package/dist/cli-BjVgdamH.js +2 -0
- package/dist/cli-CNqBrHLU.js +293 -0
- package/dist/cli-backends.runtime-DoxtCrow.js +7 -0
- package/dist/cli-backends.runtime.js +1 -1
- package/dist/cli-compaction-BCuLbs75.js +363 -0
- package/dist/cli-mthNIkji.js +141 -0
- package/dist/cli-registry-loader-B2sNTdgY.js +2 -0
- package/dist/cli-registry-loader-Dz9YFrjw.js +193 -0
- package/dist/cli-runner-C9t-9-Io.js +597 -0
- package/dist/cli-runner-D21qMGk7.js +2 -0
- package/dist/cli-runner.runtime-BNqbJFgu.js +3 -0
- package/dist/cli-runner.runtime-Dv50IEvH.js +4 -0
- package/dist/cli-runner.runtime.js +1 -1
- package/dist/cli-session-jBtClYfT.js +119 -0
- package/dist/cli-startup-metadata.json +9 -9
- package/dist/cli.runtime-CGBzSGAG.js +1276 -0
- package/dist/cli.runtime.js +1 -1
- package/dist/codex-native-web-search-B3C-srtm.js +20 -0
- package/dist/codex-native-web-search-B7xh2Xcb.js +4 -0
- package/dist/codex-native-web-search-core-CrwANQg5.js +106 -0
- package/dist/command-auth-Dz_pdczs.js +135 -0
- package/dist/command-config-resolution-XCA63Yv8.js +25 -0
- package/dist/command-config-resolution-xtKMDTG9.js +2 -0
- package/dist/command-config-resolution.runtime-xtKMDTG9.js +2 -0
- package/dist/command-config-resolution.runtime.js +1 -1
- package/dist/command-execution-startup-CasEqEXh.js +90 -0
- package/dist/command-primitives-runtime-DC9gtSI3.js +3 -0
- package/dist/command-registry-BQnMdca9.js +9 -0
- package/dist/command-registry-core-hx2t1jQP.js +114 -0
- package/dist/command-registry-rbKA-L_8.js +4 -0
- package/dist/command-secret-gateway-7oveYQCx.js +589 -0
- package/dist/command-secret-targets-B7M1Us_C.js +2 -0
- package/dist/command-status-builders-DrSoZhiI.js +147 -0
- package/dist/command-status.runtime-By0071-y.js +90 -0
- package/dist/command-status.runtime.js +1 -1
- package/dist/commands/status.summary.runtime.js +3 -3
- package/dist/commands-B1MnUj5-.js +161 -0
- package/dist/commands-compact.runtime-DELj3JaW.js +10 -0
- package/dist/commands-compact.runtime.js +1 -1
- package/dist/commands-core.runtime-Zw0grrkC.js +2 -0
- package/dist/commands-core.runtime.js +1 -1
- package/dist/commands-handlers.runtime-BCl_ZHJZ.js +6327 -0
- package/dist/commands-handlers.runtime.js +1 -1
- package/dist/commands-models-Uurm-0C3.js +448 -0
- package/dist/commands-registry-Bo1AeDcq.js +195 -0
- package/dist/commands-registry.runtime-C9DBHyhh.js +4 -0
- package/dist/commands-registry.runtime.js +1 -1
- package/dist/commands-status-BoAXH-wg.js +16 -0
- package/dist/commands-status-CNALMTN9.js +3 -0
- package/dist/commands-status.runtime-CNALMTN9.js +3 -0
- package/dist/commands-status.runtime.js +1 -1
- package/dist/commands-subagents-control.runtime-Dl4IuTzV.js +2 -0
- package/dist/commands-subagents-control.runtime.js +1 -1
- package/dist/commands-system-prompt-BPzpLmUp.js +2 -0
- package/dist/commands-system-prompt-DCOZSNh5.js +161 -0
- package/dist/commands.runtime-bfCLM0Sg.js +175 -0
- package/dist/commands.runtime.js +1 -1
- package/dist/commitments/runtime.js +1 -1
- package/dist/common-CoOYhmSg.js +286 -0
- package/dist/compact-yqaUOESq.js +1165 -0
- package/dist/compact.runtime-Y91AFZVE.js +12 -0
- package/dist/compact.runtime.js +1 -1
- package/dist/compaction-planning-DVnykwzd.js +202 -0
- package/dist/completion-cli-BJjq_g_B.js +393 -0
- package/dist/config-CsmSEaNn.js +374 -0
- package/dist/config-CtNXZ0iy.js +610 -0
- package/dist/config-cli-CNpIVdqp.js +1703 -0
- package/dist/config-mutation-B-SErGM0.js +5 -0
- package/dist/config-mutations-Bu3ahkX8.js +161 -0
- package/dist/config-utils-Bv0Nisds.js +141 -0
- package/dist/config-validation-DitvTYD8.js +33 -0
- package/dist/configure-CdjbRKTg.js +771 -0
- package/dist/configure-Cvi-5ml4.js +3 -0
- package/dist/configure.commands-BJii4733.js +1253 -0
- package/dist/configure.commands-tJzVFJ0o.js +2 -0
- package/dist/context-D1N9oPds.js +2 -0
- package/dist/context-XMtJ9b3v.js +248 -0
- package/dist/context-engine-host-compat-3QznbSaW.js +280 -0
- package/dist/context-engine-host-compat-DquSpnKD.js +2 -0
- package/dist/context-engine-lifecycle-Bqdhy9JU.js +627 -0
- package/dist/control-auth-CMW_9jmY.js +114 -0
- package/dist/control-service-D-r3k91q.js +40 -0
- package/dist/control-service-uIPYrp9F.js +3 -0
- package/dist/control-ui/assets/activity-DgMhyllD.js +124 -0
- package/dist/control-ui/assets/agents-CsRhxO2O.js +1030 -0
- package/dist/control-ui/assets/channels-Dq8bzpMg.js +120 -0
- package/dist/control-ui/assets/cron-Dk5bqYwg.js +1016 -0
- package/dist/control-ui/assets/debug-CNIwFEQO.js +97 -0
- package/dist/control-ui/assets/index-CV2NsPlu.js +7214 -0
- package/dist/control-ui/assets/instances-DLr0iEvT.js +57 -0
- package/dist/control-ui/assets/nodes-D3JEksjl.js +444 -0
- package/dist/control-ui/assets/sessions-nbXWGlHZ.js +425 -0
- package/dist/control-ui/assets/skills-tBOi8OBq.js +362 -0
- package/dist/control-ui/assets/workboard-ClTo7wmK.js +402 -0
- package/dist/control-ui/index.html +1 -1
- package/dist/control-ui/sw.js +1 -1
- package/dist/control-ui-AkRMsk9S.js +750 -0
- package/dist/conversation-label-generator-DHtcgSBn.js +72 -0
- package/dist/conversation-runtime-BEgHW4ta.js +31 -0
- package/dist/core-Bslrvfnp.js +284 -0
- package/dist/core-api-BOlUb7G8.js +5 -0
- package/dist/core-api-CiBoGa2I.js +2 -0
- package/dist/crestodian/crestodian.js +1 -1
- package/dist/crestodian/rescue-message.js +1 -1
- package/dist/crestodian-mXnyuHx9.js +55 -0
- package/dist/cron-PbdpyFrD.js +453 -0
- package/dist/daemon-install-C-d4dFvn.js +66 -0
- package/dist/daemon-install-auth-profiles-store.runtime-CvE2EVVo.js +2 -0
- package/dist/daemon-install-auth-profiles-store.runtime.js +1 -1
- package/dist/dashboard-Ey5dnvMI.js +263 -0
- package/dist/defaults-CsRAv-qE.js +130 -0
- package/dist/defaults-DHZBSNHC.js +3 -0
- package/dist/defaults.constants-CR4S_tvw.js +76 -0
- package/dist/deliver-BkuuFBlm.js +1399 -0
- package/dist/deliver-P4upyes7.js +3 -0
- package/dist/deliver-runtime-CjnLI_nC.js +2 -0
- package/dist/delivery-outbound.runtime-fcJ-M8qj.js +7 -0
- package/dist/delivery-outbound.runtime.js +1 -1
- package/dist/delivery-queue-BqgHvNlY.js +863 -0
- package/dist/delivery-queue-CfsRscJb.js +2 -0
- package/dist/delivery-queue-runtime-D0PKG1Bv.js +16 -0
- package/dist/delivery-target.runtime-C5e8d0WH.js +45 -0
- package/dist/delivery-target.runtime.js +1 -1
- package/dist/delivery.runtime-2Ut8xM3P.js +470 -0
- package/dist/delivery.runtime.js +1 -1
- package/dist/detached-task-runtime-OOZBqRy-.js +86 -0
- package/dist/diagnostics-zf6WQ2h7.js +168 -0
- package/dist/dialogue-C8IOya-l.js +37 -0
- package/dist/direct-dm-wPF-KfNb.js +81 -0
- package/dist/directive-handling.defaults-C-1lmFYo.js +22 -0
- package/dist/directive-handling.fast-lane-DENPMtYI.js +70 -0
- package/dist/directive-handling.impl-C1p5t3qA.js +2 -0
- package/dist/directive-handling.impl-DOo2Sa7C.js +823 -0
- package/dist/directive-handling.model-selection-6gC-fr_g.js +122 -0
- package/dist/directive-handling.persist.runtime-CuhUd2kW.js +274 -0
- package/dist/directive-handling.persist.runtime.js +1 -1
- package/dist/directives-BIKSyN8C.js +319 -0
- package/dist/directory-cli-DZ0PU0Rv.js +239 -0
- package/dist/dispatch-DQLImAqt.js +2057 -0
- package/dist/dispatch-acp-DzyX7wsq.js +1102 -0
- package/dist/dispatch-acp-manager.runtime-CoAfs4O1.js +3 -0
- package/dist/dispatch-acp-manager.runtime.js +1 -1
- package/dist/dispatch-acp-media.runtime-7uUP_jr9.js +4 -0
- package/dist/dispatch-acp-media.runtime.js +1 -1
- package/dist/dispatch-acp-transcript.runtime-BUlmV_h0.js +40 -0
- package/dist/dispatch-acp-transcript.runtime.js +1 -1
- package/dist/dispatch-acp-tts.runtime-ChBnVkNt.js +3 -0
- package/dist/dispatch-acp-tts.runtime.js +1 -1
- package/dist/dispatch-acp.runtime-DAexFaBu.js +18 -0
- package/dist/dispatch-acp.runtime.js +1 -1
- package/dist/dispatcher-D3IQEbf9.js +106 -0
- package/dist/doctor-BSqEqfb6.js +760 -0
- package/dist/doctor-auth-flat-profiles-BIZ4wsYP.js +2 -0
- package/dist/doctor-auth-flat-profiles-DXtD5LfC.js +516 -0
- package/dist/doctor-auth-legacy-oauth-DwFbRYTP.js +48 -0
- package/dist/doctor-auth-oauth-sidecar-6I3FEJbi.js +2 -0
- package/dist/doctor-auth-oauth-sidecar-BSC3rnDM.js +177 -0
- package/dist/doctor-auth-tVGsUiM6.js +216 -0
- package/dist/doctor-bootstrap-size-B0q6bdkO.js +57 -0
- package/dist/doctor-claude-cli-Bn79OuBT.js +150 -0
- package/dist/doctor-config-flow-CCwocXpV.js +1819 -0
- package/dist/doctor-core-checks-D7-1l8jy.js +666 -0
- package/dist/doctor-core-checks-eM8FNi8B.js +2 -0
- package/dist/doctor-core-checks.runtime-Dc03aeoU.js +278 -0
- package/dist/doctor-core-checks.runtime.js +1 -1
- package/dist/doctor-gRYfpEbB.js +6 -0
- package/dist/doctor-gateway-daemon-flow-KTnHAdeV.js +349 -0
- package/dist/doctor-gateway-services-BByDQtjY.js +465 -0
- package/dist/doctor-health-CnoM718z.js +65 -0
- package/dist/doctor-health-contributions-flVKMQwr.js +874 -0
- package/dist/doctor-lint-BBm6gtBa.js +95 -0
- package/dist/doctor-memory-search-DjHVDCGo.js +407 -0
- package/dist/doctor-state-integrity-Bgw25cz1.js +1257 -0
- package/dist/doctor-tool-result-cap-advice-B8wTpiTO.js +27 -0
- package/dist/doctor-workspace-status-DcjeJIpT.js +76 -0
- package/dist/dreaming-BE4t8DVf.js +523 -0
- package/dist/dreaming-command-DWm1lB-Z.js +101 -0
- package/dist/dreaming-narrative-8DM-OMrm.js +721 -0
- package/dist/dreaming-narrative-CcFfheQI.js +2 -0
- package/dist/dreaming-phases-CqOhhTdZ.js +2 -0
- package/dist/dreaming-phases-D9eT6Kk0.js +1162 -0
- package/dist/drive-D2M5B7-2.js +899 -0
- package/dist/echo-transcript-B-wl5MoX.js +52 -0
- package/dist/effective-tool-policy-Cx8mC5aA.js +89 -0
- package/dist/embedded-agent-BTvtoOe_.js +4 -0
- package/dist/embedded-agent-CGmSKuNM.js +4074 -0
- package/dist/embedded-agent-helpers-CboIPx57.js +6 -0
- package/dist/embedded-agent-helpers-cw0InMDZ.js +1037 -0
- package/dist/embedded-agent.runtime-Bfe4bjyF.js +4 -0
- package/dist/embedded-agent.runtime.js +1 -1
- package/dist/embedded-backend-D-EshN85.js +744 -0
- package/dist/embedded-gateway-stub.runtime-Cx9qs0KV.js +12 -0
- package/dist/embedded-gateway-stub.runtime.js +1 -1
- package/dist/embedding-provider-runtime-DaXfsUPo.js +86 -0
- package/dist/embedding-providers-CdU99clu.js +2 -0
- package/dist/embeddings-http-BQnlTr-1.js +222 -0
- package/dist/engine-qmd-5jbjGywA.js +708 -0
- package/dist/engine-storage-CfAgwoDp.js +203 -0
- package/dist/entry.js +1 -1
- package/dist/errors-C0AUxo3P.js +2 -0
- package/dist/exec-approval-forwarder.runtime-BvR47p5Z.js +4 -0
- package/dist/exec-approval-forwarder.runtime.js +1 -1
- package/dist/exec-approval-session-target-CCqYgaVa.js +177 -0
- package/dist/exec-auto-reviewer-BfJaNkNy.js +2 -0
- package/dist/exec-auto-reviewer-Dqx7I88Z.js +241 -0
- package/dist/execute.runtime-Qb6Z75sG.js +579 -0
- package/dist/execute.runtime.js +1 -1
- package/dist/extensionAPI.js +2 -2
- package/dist/extensions/active-memory/index.js +3 -3
- package/dist/extensions/admin-http-rpc/index.js +1 -1
- package/dist/extensions/alibaba/index.js +1 -1
- package/dist/extensions/alibaba/video-generation-provider.js +1 -1
- package/dist/extensions/baichuan/index.js +1 -1
- package/dist/extensions/browser/browser-bridge.js +1 -1
- package/dist/extensions/browser/browser-cdp.js +1 -1
- package/dist/extensions/browser/browser-config.js +5 -5
- package/dist/extensions/browser/browser-control-auth.js +2 -2
- package/dist/extensions/browser/browser-doctor.js +3 -3
- package/dist/extensions/browser/browser-maintenance.js +1 -1
- package/dist/extensions/browser/browser-profiles.js +3 -3
- package/dist/extensions/browser/browser-runtime-api.js +14 -14
- package/dist/extensions/browser/cli-metadata.js +1 -1
- package/dist/extensions/browser/index.js +1 -1
- package/dist/extensions/browser/plugin-registration.js +1 -1
- package/dist/extensions/browser/register.runtime.js +4 -4
- package/dist/extensions/browser/runtime-api.js +16 -16
- package/dist/extensions/byteplus/index.js +3 -3
- package/dist/extensions/byteplus/video-generation-provider.js +1 -1
- package/dist/extensions/canvas/index.js +3 -3
- package/dist/extensions/canvas/runtime-api.js +2 -2
- package/dist/extensions/deepseek/index.js +1 -1
- package/dist/extensions/device-pair/api.js +2 -2
- package/dist/extensions/device-pair/pair-command-approve.js +1 -1
- package/dist/extensions/device-pair/qr-image.js +2 -2
- package/dist/extensions/longcat/index.js +1 -1
- package/dist/extensions/memory-core/api.js +3 -3
- package/dist/extensions/memory-core/cli-metadata.js +1 -1
- package/dist/extensions/memory-core/cli.js +2 -2
- package/dist/extensions/memory-core/index.js +11 -11
- package/dist/extensions/memory-core/manager-runtime.js +1 -1
- package/dist/extensions/memory-core/runtime-api.js +6 -6
- package/dist/extensions/minimax/image-generation-provider.js +1 -1
- package/dist/extensions/minimax/index.js +7 -7
- package/dist/extensions/minimax/media-understanding-provider.js +1 -1
- package/dist/extensions/minimax/music-generation-provider.js +1 -1
- package/dist/extensions/minimax/oauth.js +1 -1
- package/dist/extensions/minimax/oauth.runtime.js +1 -1
- package/dist/extensions/minimax/provider-registration.js +1 -1
- package/dist/extensions/minimax/speech-provider.js +1 -1
- package/dist/extensions/minimax/video-generation-provider.js +1 -1
- package/dist/extensions/minimax/web-search-provider.js +1 -1
- package/dist/extensions/moonshot/index.js +5 -5
- package/dist/extensions/moonshot/media-understanding-provider.js +1 -1
- package/dist/extensions/moonshot/web-search-provider.js +1 -1
- package/dist/extensions/qianfan/index.js +1 -1
- package/dist/extensions/qwen/index.js +5 -5
- package/dist/extensions/qwen/media-understanding-provider.js +1 -1
- package/dist/extensions/qwen/video-generation-provider.js +1 -1
- package/dist/extensions/sensenova/index.js +1 -1
- package/dist/extensions/skill-workshop/api.js +2 -2
- package/dist/extensions/skill-workshop/index.js +4 -4
- package/dist/extensions/stepfun/index.js +2 -2
- package/dist/extensions/tavily/index.js +1 -1
- package/dist/extensions/tavily/web-search-provider.js +1 -1
- package/dist/extensions/tencent/index.js +2 -2
- package/dist/extensions/tiangong/index.js +1 -1
- package/dist/extensions/volcengine/index.js +3 -3
- package/dist/extensions/volcengine/speech-provider.js +1 -1
- package/dist/extensions/webhooks/api.js +1 -1
- package/dist/extensions/webhooks/index.js +1 -1
- package/dist/extensions/weixin/index.js +3 -3
- package/dist/extensions/workboard/index.js +2 -2
- package/dist/extensions/xiaomi/index.js +4 -4
- package/dist/extensions/xiaomi/speech-provider.js +1 -1
- package/dist/extensions/xingchen/index.js +1 -1
- package/dist/extensions/yi/index.js +1 -1
- package/dist/extensions/zai/index.js +4 -4
- package/dist/extensions/zai/media-understanding-provider.js +1 -1
- package/dist/extensions/zhinao/index.js +1 -1
- package/dist/external-cli-auth-selection-CM_aOUJw.js +113 -0
- package/dist/extra-params-Bm1eLWN9.js +615 -0
- package/dist/fallback-notice-state-v1kyWACv.js +15 -0
- package/dist/fallbacks-CDllk2g1.js +31 -0
- package/dist/fallbacks-shared-DdMKEmAC.js +116 -0
- package/dist/fengming-runtime-DSv30J04.js +33 -0
- package/dist/fengming-runtime-config-BE-DquuY.js +2 -0
- package/dist/fengming-runtime-memory-BE-DquuY.js +2 -0
- package/dist/fengming-runtime-session-BE-DquuY.js +2 -0
- package/dist/fengming-tools-DHb-ZeDC.js +12221 -0
- package/dist/flows-Cz3y10A9.js +189 -0
- package/dist/fs-utils-D05rps7O.js +9 -0
- package/dist/gateway/protocol/index.d.ts +1 -1
- package/dist/gateway-DTi2D7ZS.js +133 -0
- package/dist/gateway-cli-DT2fL2fX.js +443 -0
- package/dist/gateway-install-token-CJhAycOA.js +136 -0
- package/dist/gateway-method-runtime-BuiYTDQk.js +21 -0
- package/dist/gateway-runtime-C5_cVlSW.js +23 -0
- package/dist/get-reply-Cz-dUrWm.js +5198 -0
- package/dist/get-reply-from-config.runtime-BC1HT67i.js +2 -0
- package/dist/get-reply-from-config.runtime.js +1 -1
- package/dist/github-copilot-token-09lxV3kH.js +2 -0
- package/dist/health-CmihbcqN.js +621 -0
- package/dist/health-D8L37hBZ.js +111 -0
- package/dist/health-DU7I9RrJ.js +3 -0
- package/dist/health-state-QZ2E6xGQ.js +106 -0
- package/dist/heartbeat-runner-Bz5PMzEI.js +1930 -0
- package/dist/heartbeat-runner-DfqqQ_8w.js +5 -0
- package/dist/heartbeat-runner.runtime-8BshUhoS.js +3 -0
- package/dist/heartbeat-runner.runtime.js +1 -1
- package/dist/helpers-Bkq4POdX.js +406 -0
- package/dist/hook-helpers-nmDwt3Fa.js +44 -0
- package/dist/hooks-9FOcRqfu.js +536 -0
- package/dist/hooks-cli-CrQelcwo.js +465 -0
- package/dist/http-endpoint-helpers-BD5u6YsT.js +37 -0
- package/dist/http-utils-RcKuBJ0I.js +98 -0
- package/dist/image-DwNoypK2.js +385 -0
- package/dist/image-fallbacks-BUyDnmUX.js +31 -0
- package/dist/image-generation-core.auth.runtime-CA8miEMh.js +2 -0
- package/dist/image-generation-core.auth.runtime.js +1 -1
- package/dist/image-generation-provider-DXMW5EmB.js +152 -0
- package/dist/image-runtime-D5QpNNzz.js +9 -0
- package/dist/image-tool.helpers-6vGxo1Y0.js +150 -0
- package/dist/images-BGWLzQEJ.js +416 -0
- package/dist/images-Db4UB3JG.js +2 -0
- package/dist/inbound-reply-dispatch-DRF6ZmQg.js +2 -0
- package/dist/inbound-reply-dispatch-RAKLqow4.js +147 -0
- package/dist/index-DhOQs6M_.d.ts +1497 -0
- package/dist/index.js +1 -1
- package/dist/infra-runtime-BFrpRc_V.js +32 -0
- package/dist/init-sR7bCS9D.js +59 -0
- package/dist/install-BzdJbOUx.js +262 -0
- package/dist/install.runtime-Zye6pbZ6.js +2 -0
- package/dist/internal-DL_vFx8C.js +399 -0
- package/dist/isolated-agent-Qif8Llbt.js +2 -0
- package/dist/isolated-agent-aqEjxqs-.js +1097 -0
- package/dist/kernel-B-i4c2IK.js +979 -0
- package/dist/kernel-DYDJ_hLb.js +3 -0
- package/dist/kimi-web-search-provider.runtime-95HAkvHY.js +307 -0
- package/dist/kimi-web-search-provider.runtime.js +1 -1
- package/dist/library-CZVbE5hF.js +45 -0
- package/dist/lifecycle-C8M3YLbT.js +2 -0
- package/dist/lifecycle-CPDNQnUN.js +570 -0
- package/dist/lifecycle-DpuP7n3J.js +355 -0
- package/dist/lifecycle.runtime-C8M3YLbT.js +2 -0
- package/dist/lifecycle.runtime.js +1 -1
- package/dist/link-understanding/apply.runtime.js +3 -3
- package/dist/list-B_ALwpPl.js +2 -0
- package/dist/list-Bda_GYFy.js +207 -0
- package/dist/list.list-command-W9OGfAIU.js +429 -0
- package/dist/list.model-row-LV4AaX0H.js +39 -0
- package/dist/list.probe-CrZm6BH2.js +451 -0
- package/dist/list.probe-Dfdmb8bC.js +2 -0
- package/dist/list.provider-catalog-7T1jKk0n.js +211 -0
- package/dist/list.provider-catalog-DjGyZVEj.js +2 -0
- package/dist/list.registry-load-DkCS8JZQ.js +152 -0
- package/dist/list.row-sources-B1vjo_Y9.js +474 -0
- package/dist/list.source-plan-C9Sa6zRK.js +81 -0
- package/dist/list.status-command-9daSZZDm.js +815 -0
- package/dist/live-model-switch-Dy-UFUMS.js +119 -0
- package/dist/llm-slug-generator-DEmh5-_1.js +78 -0
- package/dist/llm-slug-generator.js +1 -1
- package/dist/load-config-CvQpC8k6.js +27 -0
- package/dist/load-context-_qSHpZ5S.js +82 -0
- package/dist/loader-CntMt07B.js +7008 -0
- package/dist/local-dispatch.runtime-BSN_gqNS.js +10 -0
- package/dist/local-dispatch.runtime.js +1 -1
- package/dist/main-session-restart-recovery-Db7366lt.js +2 -0
- package/dist/main-session-restart-recovery-n87NTooQ.js +389 -0
- package/dist/managed-image-attachments-BTBBHlKl.js +2 -0
- package/dist/managed-image-attachments-C6_V1yX0.js +616 -0
- package/dist/manager-CKrWxjV6.js +3737 -0
- package/dist/manager-Dvb1FVnx.js +2314 -0
- package/dist/mcp/plugin-tools-serve.js +2 -2
- package/dist/mcp-http-CSoGXOa_.js +583 -0
- package/dist/mcp-http-D4ieDB3W.js +2 -0
- package/dist/media-runtime-GeQTQkkK.js +391 -0
- package/dist/media-services-CWbIUZDe.js +416 -0
- package/dist/media-understanding/apply.runtime.js +1 -1
- package/dist/media-understanding-DXc2BD2L.js +87 -0
- package/dist/media-understanding-provider-BkdUiVWU.js +70 -0
- package/dist/media-understanding-provider-BlgmLViW.js +13 -0
- package/dist/media-understanding-provider-C9P2VjkC.js +29 -0
- package/dist/media-understanding-provider-CJlbgAvl.js +69 -0
- package/dist/memory-CnC2jM1l.js +437 -0
- package/dist/memory-core-host-engine-embeddings-Dy9vN-Ce.js +667 -0
- package/dist/memory-core-host-engine-foundation-C-pGGQnm.js +15 -0
- package/dist/memory-core-host-engine-qmd-DLJDON9w.js +2 -0
- package/dist/memory-core-host-engine-storage-Bzf-C8XE.js +2 -0
- package/dist/memory-core-host-runtime-cli-_LWA6G3x.js +10 -0
- package/dist/memory-core-host-runtime-core-CromkNBr.js +12 -0
- package/dist/memory-core-host-runtime-files-DpbviC1b.js +4 -0
- package/dist/memory-embedding-provider-runtime-CaVVaYC5.js +36 -0
- package/dist/memory-host-core-B5dWHwBF.js +78 -0
- package/dist/memory-host-search.runtime-DqlCFac1.js +2 -0
- package/dist/memory-host-search.runtime.js +1 -1
- package/dist/memory-runtime-BCeeWb1G.js +2 -0
- package/dist/memory-runtime-pR9KGin0.js +57 -0
- package/dist/memory-search-CpDEEY2Q.js +235 -0
- package/dist/message-BeGCG-D8.js +284 -0
- package/dist/message-YGMOyqP5.js +2 -0
- package/dist/message-action-runner-ByMT3_eb.js +1922 -0
- package/dist/message-action-runner-VXmKO_W7.js +2 -0
- package/dist/message-handler-MZ0DMbCx.js +1806 -0
- package/dist/metadata-registry-loader-BH9D1UOx.js +2 -0
- package/dist/metadata-registry-loader-BK1cHCas.js +22 -0
- package/dist/migrate-BA6w0hd3.js +2 -0
- package/dist/migrate-BGuQC-1W.js +458 -0
- package/dist/migration-provider-runtime-BBdDegWG.js +2 -0
- package/dist/migration-provider-runtime-C5WUjrQz.js +68 -0
- package/dist/minimax-web-search-provider.runtime-suVFk3Zx.js +148 -0
- package/dist/minimax-web-search-provider.runtime.js +1 -1
- package/dist/model-BJZXR9dq.js +1302 -0
- package/dist/model-BL7xlN5h.js +2 -0
- package/dist/model-auth-C-6dYVob.js +6 -0
- package/dist/model-auth-DJz7R41W.js +705 -0
- package/dist/model-auth-label-DKNXktIu.js +67 -0
- package/dist/model-catalog-BjiK5rtT.js +3 -0
- package/dist/model-catalog-DM1CTjkW.js +434 -0
- package/dist/model-catalog-visibility-DEJZG0In.js +76 -0
- package/dist/model-config.helpers-BKcUeE_P.js +95 -0
- package/dist/model-context-tokens-5y_PQELY.js +572 -0
- package/dist/model-fallback-BDdBR053.js +1288 -0
- package/dist/model-fallback-auth.runtime-pcWfkIUF.js +5 -0
- package/dist/model-fallback-auth.runtime.js +1 -1
- package/dist/model-picker-Bpvp4_N4.js +1135 -0
- package/dist/model-picker-DWPPtq6d.js +3 -0
- package/dist/model-picker-visibility-BtdqVF80.js +22 -0
- package/dist/model-picker.runtime-CYlqts2z.js +48 -0
- package/dist/model-picker.runtime.js +1 -1
- package/dist/model-pricing-cache-BmmncDqL.js +856 -0
- package/dist/model-pricing-cache-CEwRyWw2.js +3 -0
- package/dist/model-pricing-cache-state-B8Aspp85.js +83 -0
- package/dist/model-provider-auth-B3KXoKkE.js +2 -0
- package/dist/model-provider-auth-Bo_8T7of.js +375 -0
- package/dist/model-runtime-aliases-Br-ZlhrL.js +133 -0
- package/dist/model-selection-D5-ERakL.js +254 -0
- package/dist/model-selection-DrzgktRu.js +7 -0
- package/dist/model-selection-ibwsPgIw.js +352 -0
- package/dist/model-selection.runtime-BRkOZejt.js +7 -0
- package/dist/model-selection.runtime.js +1 -1
- package/dist/models-RPAH3ZBn.js +57 -0
- package/dist/models-auth-status-Cwu9OXU8.js +280 -0
- package/dist/models-cli-CrYkSUoa.js +257 -0
- package/dist/models-config-Ayzj9gDz.js +1189 -0
- package/dist/models-config-BFcjB7nN.js +2 -0
- package/dist/models-config.providers.secrets-CCRUW7gL.js +2 -0
- package/dist/models-config.providers.secrets-DdX_XSRo.js +382 -0
- package/dist/models-http-jLFnelH7.js +88 -0
- package/dist/monitor-CqWICrjO.js +60 -0
- package/dist/monitor-DwccYPfp.js +1024 -0
- package/dist/monitor.account-e9EVttpP.js +5382 -0
- package/dist/music-generation-provider-Dfc--R-x.js +308 -0
- package/dist/native-hook-relay-Cioqiqv8.js +1378 -0
- package/dist/native-hook-relay-DRwJIspI.js +19 -0
- package/dist/node-cli-CrG3LH9J.js +2806 -0
- package/dist/node-command-policy-CkBTEmhl.js +295 -0
- package/dist/nodes-BxrWFA09.js +1483 -0
- package/dist/nodes-DFPTGZjc.js +3 -0
- package/dist/nodes-cli-Czwyt6r1.js +960 -0
- package/dist/nodes-pending-B_4QHyB2.js +211 -0
- package/dist/nodes-utils-c4k31OaG.js +85 -0
- package/dist/oauth-BXncC0JP.js +852 -0
- package/dist/oauth-Ba1O2vqP.js +207 -0
- package/dist/oauth-CGQkfxbJ.js +746 -0
- package/dist/onboard-I5tQlVm6.js +768 -0
- package/dist/onboard-channels-BleKfB1D.js +2 -0
- package/dist/onboard-channels-jVaUjGYX.js +1534 -0
- package/dist/onboard-custom-BR_5oqUr.js +3 -0
- package/dist/onboard-custom-Ss0DThuP.js +280 -0
- package/dist/onboard-custom-config-B-knjQm7.js +422 -0
- package/dist/onboard-search-BsIztGYF.js +412 -0
- package/dist/openai-compat-errors-UkLkk8Q9.js +136 -0
- package/dist/openai-http-mTQB44gu.js +836 -0
- package/dist/openai-transport-stream-CZSs3SIi.js +3427 -0
- package/dist/openresponses-http-BA1Shmj-.js +1175 -0
- package/dist/operations-DhgPih1F.js +805 -0
- package/dist/order-CaXafMPG.js +218 -0
- package/dist/outbound-attachment-BAp7DXDc.js +19 -0
- package/dist/param-readers-De-m2SoB.js +2 -0
- package/dist/payloads-Dg9aAEOC.js +256 -0
- package/dist/persistent-bindings.lifecycle-BkLOz501.js +2 -0
- package/dist/persistent-bindings.lifecycle-e2MLbBCo.js +85 -0
- package/dist/plugin-enabled-CGSENjXc.js +232 -0
- package/dist/plugin-install-BI9_bsVT.js +118 -0
- package/dist/plugin-install-an4V2iXO.js +2 -0
- package/dist/plugin-install-config-policy-C66Nss3D.js +169 -0
- package/dist/plugin-registration-DMerQktl.js +97 -0
- package/dist/plugin-registry-BZfdCw65.js +3 -0
- package/dist/plugin-registry-I1fegSdK.js +2 -0
- package/dist/plugin-runtime-B3XMLJka.js +102 -0
- package/dist/plugin-sdk/.boundary-entry-shims.stamp +1 -1
- package/dist/plugin-sdk/acp-binding-runtime.js +1 -1
- package/dist/plugin-sdk/acp-runtime-backend.js +1 -1
- package/dist/plugin-sdk/acp-runtime.js +2 -2
- package/dist/plugin-sdk/agent-harness-runtime.js +16 -16
- package/dist/plugin-sdk/agent-harness-task-runtime.js +4 -4
- package/dist/plugin-sdk/agent-harness.js +17 -17
- package/dist/plugin-sdk/agent-runtime.js +17 -17
- package/dist/plugin-sdk/agent-sessions.js +1 -1
- package/dist/plugin-sdk/approval-native-runtime.js +2 -2
- package/dist/plugin-sdk/approval-reaction-runtime.js +1 -1
- package/dist/plugin-sdk/approval-runtime.js +2 -2
- package/dist/plugin-sdk/bundled-channel-config-schema-BsOWCrJT.d.ts +3169 -0
- package/dist/plugin-sdk/bundled-channel-config-schema.d.ts +1 -1
- package/dist/plugin-sdk/channel-actions.js +2 -2
- package/dist/plugin-sdk/channel-config-schema-legacy.d.ts +1 -1
- package/dist/plugin-sdk/channel-core.js +2 -2
- package/dist/plugin-sdk/channel-envelope.js +1 -1
- package/dist/plugin-sdk/channel-inbound-roots.js +1 -1
- package/dist/plugin-sdk/channel-inbound.js +4 -4
- package/dist/plugin-sdk/channel-location.js +1 -1
- package/dist/plugin-sdk/channel-message-runtime.js +5 -5
- package/dist/plugin-sdk/channel-message.js +5 -5
- package/dist/plugin-sdk/channel-outbound.js +2 -2
- package/dist/plugin-sdk/channel-reply-options-runtime.js +1 -1
- package/dist/plugin-sdk/command-auth-native.js +2 -2
- package/dist/plugin-sdk/command-auth.js +4 -4
- package/dist/plugin-sdk/command-primitives-runtime.js +2 -2
- package/dist/plugin-sdk/command-status-runtime.js +1 -1
- package/dist/plugin-sdk/command-status.js +1 -1
- package/dist/plugin-sdk/compat.js +2 -2
- package/dist/plugin-sdk/config-mutation.js +2 -2
- package/dist/plugin-sdk/config-runtime.js +1 -1
- package/dist/plugin-sdk/config-schema.d.ts +2 -2
- package/dist/plugin-sdk/conversation-binding-runtime.js +1 -1
- package/dist/plugin-sdk/conversation-runtime.js +3 -3
- package/dist/plugin-sdk/core.js +3 -3
- package/dist/plugin-sdk/delivery-queue-runtime.js +1 -1
- package/dist/plugin-sdk/direct-dm.js +1 -1
- package/dist/plugin-sdk/discord.d.ts +1 -1
- package/dist/plugin-sdk/embedding-providers.js +2 -2
- package/dist/plugin-sdk/gateway-method-runtime.js +1 -1
- package/dist/plugin-sdk/gateway-runtime.js +2 -2
- package/dist/plugin-sdk/health.js +1 -1
- package/dist/plugin-sdk/image-generation-core.js +3 -3
- package/dist/plugin-sdk/image-generation-runtime.js +1 -1
- package/dist/plugin-sdk/image-generation.js +2 -2
- package/dist/plugin-sdk/inbound-reply-dispatch.js +3 -3
- package/dist/plugin-sdk/index.js +1 -1
- package/dist/plugin-sdk/infra-runtime.js +3 -3
- package/dist/plugin-sdk/mattermost.js +1 -1
- package/dist/plugin-sdk/media-generation-runtime-shared.js +1 -1
- package/dist/plugin-sdk/media-generation-runtime.js +1 -1
- package/dist/plugin-sdk/media-runtime.js +7 -7
- package/dist/plugin-sdk/media-understanding-runtime.js +1 -1
- package/dist/plugin-sdk/media-understanding.js +2 -2
- package/dist/plugin-sdk/memory-core-host-engine-embeddings.js +4 -4
- package/dist/plugin-sdk/memory-core-host-engine-foundation.js +2 -2
- package/dist/plugin-sdk/memory-core-host-engine-qmd.js +2 -2
- package/dist/plugin-sdk/memory-core-host-engine-storage.js +6 -6
- package/dist/plugin-sdk/memory-core-host-runtime-cli.js +2 -2
- package/dist/plugin-sdk/memory-core-host-runtime-core.js +3 -3
- package/dist/plugin-sdk/memory-core-host-runtime-files.js +4 -4
- package/dist/plugin-sdk/memory-core.js +3 -3
- package/dist/plugin-sdk/memory-host-core.js +3 -3
- package/dist/plugin-sdk/memory-host-files.js +4 -4
- package/dist/plugin-sdk/memory-host-search.js +1 -1
- package/dist/plugin-sdk/models-provider-runtime.js +1 -1
- package/dist/plugin-sdk/music-generation-core.js +1 -1
- package/dist/plugin-sdk/native-command-registry.js +1 -1
- package/dist/plugin-sdk/outbound-media.js +2 -2
- package/dist/plugin-sdk/outbound-runtime.js +3 -3
- package/dist/plugin-sdk/param-readers.js +2 -2
- package/dist/plugin-sdk/plugin-runtime.js +2 -2
- package/dist/plugin-sdk/provider-auth-api-key.js +4 -4
- package/dist/plugin-sdk/provider-auth-login.js +1 -1
- package/dist/plugin-sdk/provider-auth-runtime.js +2 -2
- package/dist/plugin-sdk/provider-auth.js +6 -6
- package/dist/plugin-sdk/provider-catalog-runtime.js +2 -2
- package/dist/plugin-sdk/provider-entry.js +1 -1
- package/dist/plugin-sdk/provider-setup.js +1 -1
- package/dist/plugin-sdk/provider-stream-family.js +3 -3
- package/dist/plugin-sdk/provider-stream.js +2 -2
- package/dist/plugin-sdk/provider-transport-runtime.js +1 -1
- package/dist/plugin-sdk/provider-web-fetch.js +2 -2
- package/dist/plugin-sdk/provider-web-search.js +4 -4
- package/dist/plugin-sdk/realtime-bootstrap-context.js +2 -2
- package/dist/plugin-sdk/realtime-transcription.js +1 -1
- package/dist/plugin-sdk/realtime-voice.js +2 -2
- package/dist/plugin-sdk/reply-dispatch-runtime.js +1 -1
- package/dist/plugin-sdk/reply-runtime.js +6 -6
- package/dist/plugin-sdk/runtime-secret-resolution.js +2 -2
- package/dist/plugin-sdk/runtime.js +3 -3
- package/dist/plugin-sdk/self-hosted-provider-setup.js +1 -1
- package/dist/plugin-sdk/simple-completion-runtime.js +1 -1
- package/dist/plugin-sdk/speech-core.js +2 -2
- package/dist/plugin-sdk/speech.js +1 -1
- package/dist/plugin-sdk/tool-plugin.js +1 -1
- package/dist/plugin-sdk/transcripts.js +1 -1
- package/dist/plugin-sdk/tts-runtime.js +1 -1
- package/dist/plugin-sdk/video-generation-core.js +2 -2
- package/dist/plugin-sdk/video-generation-runtime.js +1 -1
- package/dist/plugin-sdk/web-media.js +3 -3
- package/dist/plugin-sdk/zalouser.js +1 -1
- package/dist/plugin-service-2XF6Lu_a.js +1249 -0
- package/dist/plugins/build-smoke-entry.js +2 -2
- package/dist/plugins/loader.js +1 -1
- package/dist/plugins/provider-discovery.runtime.js +1 -1
- package/dist/plugins/provider-runtime.runtime.js +1 -1
- package/dist/plugins/runtime/index.js +19 -19
- package/dist/plugins/tools.js +1 -1
- package/dist/plugins-authoring-command-CCX6tJwd.js +304 -0
- package/dist/plugins-cli-HX8nTV2h.js +63 -0
- package/dist/plugins-cli.runtime-BYn4VsLP.js +339 -0
- package/dist/plugins-cli.runtime.js +1 -1
- package/dist/plugins-command-helpers-ByuW-yNj.js +2 -0
- package/dist/plugins-command-helpers-DaaxGnCD.js +164 -0
- package/dist/plugins-inspect-command-C9NDk23X.js +248 -0
- package/dist/plugins-install-command-B0NfUxeA.js +993 -0
- package/dist/plugins-install-command-BmuScfLI.js +2 -0
- package/dist/plugins-install-persist-CfwO876P.js +252 -0
- package/dist/plugins-list-command-Bx8X908n.js +184 -0
- package/dist/plugins-uninstall-command-p6h44-Ft.js +118 -0
- package/dist/postinstall-inventory.json +862 -862
- package/dist/prepare.runtime-8DdQ4k9k.js +798 -0
- package/dist/prepare.runtime.js +1 -1
- package/dist/presentation-card-DeAf3jYW.js +164 -0
- package/dist/preview-warnings-BF7nlTo8.js +618 -0
- package/dist/profiles-DUhMLnqX.js +194 -0
- package/dist/program-C7f_U7fr.js +131 -0
- package/dist/provider-adapters-CWLwE9KS.js +104 -0
- package/dist/provider-api-key-auth-CshQbUPZ.js +117 -0
- package/dist/provider-api-key-auth.runtime-B64jPCKn.js +14 -0
- package/dist/provider-api-key-auth.runtime.js +1 -1
- package/dist/provider-auth-D-I3YLSn.js +281 -0
- package/dist/provider-auth-api-key-Bub0Rjak.js +5 -0
- package/dist/provider-auth-choice-DpNAEScm.js +311 -0
- package/dist/provider-auth-choice-helpers-Bof937LW.js +210 -0
- package/dist/provider-auth-choice.runtime-B3spikLY.js +18 -0
- package/dist/provider-auth-choice.runtime-vVgz7FKq.js +2 -0
- package/dist/provider-auth-choice.runtime.js +1 -1
- package/dist/provider-auth-guidance-DcCL0Q2U.js +2 -0
- package/dist/provider-auth-guidance-rWRMN4Jn.js +34 -0
- package/dist/provider-auth-helpers-Cp8L-Xha.js +177 -0
- package/dist/provider-auth-login.runtime-BJUzc4iH.js +156 -0
- package/dist/provider-auth-login.runtime.js +1 -1
- package/dist/provider-auth-runtime-DmcWtzbb.js +186 -0
- package/dist/provider-discovery-JyAJi97k.js +95 -0
- package/dist/provider-discovery.runtime-D_0WTYr8.js +290 -0
- package/dist/provider-discovery.runtime.js +1 -1
- package/dist/provider-dispatcher-C8Jt94Xl.js +22 -0
- package/dist/provider-dispatcher.runtime.js +1 -1
- package/dist/provider-entry-By0ggZuI.js +134 -0
- package/dist/provider-hook-runtime-B8AUbQxf.js +255 -0
- package/dist/provider-openai-codex-oauth-C9Mmnt7d.js +2 -0
- package/dist/provider-openai-codex-oauth-CH5Jg1vk.js +44 -0
- package/dist/provider-registration-C1zvaHQP.js +235 -0
- package/dist/provider-registry-B9diJyLv.js +31 -0
- package/dist/provider-registry-BXSxmPGA.js +61 -0
- package/dist/provider-registry-CoE-sxbq.js +61 -0
- package/dist/provider-registry-DLth_GdI.js +61 -0
- package/dist/provider-registry-J4LRd5Rg.js +36 -0
- package/dist/provider-runtime-B4cw16pt.js +3 -0
- package/dist/provider-runtime-DNNbfwOK.js +386 -0
- package/dist/provider-runtime.runtime-98mAe_ni.js +26 -0
- package/dist/provider-runtime.runtime.js +1 -1
- package/dist/provider-self-hosted-setup-Dysv2Kwt.js +373 -0
- package/dist/provider-stream-BLaC8bqO.js +1084 -0
- package/dist/provider-stream-Caa5YOx2.js +313 -0
- package/dist/provider-stream-family-CvvfxLyP.js +2 -0
- package/dist/provider-usage-CVNosTP3.js +71 -0
- package/dist/provider-usage-D2NudXbO.js +4 -0
- package/dist/provider-usage.load-DG6R3lkG.js +357 -0
- package/dist/provider-web-search-DmgTaxRU.js +58 -0
- package/dist/provider-wizard-Cw-5H3tX.js +125 -0
- package/dist/providers.runtime-DF0T9lFz.js +240 -0
- package/dist/providers.runtime-oM9Vn1wr.js +2 -0
- package/dist/providers.runtime.js +1 -1
- package/dist/proxy-BxGnVyJu.js +662 -0
- package/dist/public-artifacts-BMP9hZfh.js +7 -0
- package/dist/pw-ai-CD52qfYo.js +3064 -0
- package/dist/qmd-manager-BYbvU4YC.js +2040 -0
- package/dist/qr-cli-Btz2ZdO3.js +2 -0
- package/dist/qr-cli-eyTRwMm2.js +371 -0
- package/dist/qr-image-BCwiO6tL.js +2 -0
- package/dist/queue-CJRoTOBi.js +923 -0
- package/dist/read-file-ogB-HjbK.js +183 -0
- package/dist/register-service-commands-D_gQ3b6_.js +77 -0
- package/dist/register.agent-DXQLn-r0.js +152 -0
- package/dist/register.configure-FavQPGce.js +16 -0
- package/dist/register.crestodian-Cbfmnl6h.js +24 -0
- package/dist/register.maintenance-B8xODEMU.js +85 -0
- package/dist/register.message-B8PYgZ-j.js +404 -0
- package/dist/register.migrate-CieoN8zZ.js +106 -0
- package/dist/register.onboard-BqWDIDKH.js +115 -0
- package/dist/register.setup-CgeTBW4T.js +40 -0
- package/dist/register.status-health-sessions-C99aHa5h.js +293 -0
- package/dist/register.subclis-79SvyMFt.js +31 -0
- package/dist/register.subclis-CXrO8_TO.js +3 -0
- package/dist/register.subclis-core-GoXV1yMG.js +273 -0
- package/dist/rem-harness-laL5luQa.js +649 -0
- package/dist/repair-sequencing-DGY2mBg6.js +652 -0
- package/dist/reply-media-paths.runtime-BeWVPkgy.js +2 -0
- package/dist/reply-media-paths.runtime-rzAV_Kee.js +154 -0
- package/dist/reply-media-paths.runtime.js +1 -1
- package/dist/reply-payloads-D_JHMviC.js +79 -0
- package/dist/reply-payloads-dedupe-B9GGGaL-.js +176 -0
- package/dist/reply-payloads-dedupe.runtime--C3jHs9y.js +2 -0
- package/dist/reply-payloads-dedupe.runtime.js +1 -1
- package/dist/reply-timing-tracker-DPjlETUb.js +205 -0
- package/dist/reply-turn-admission-DdfIwcMK.js +2056 -0
- package/dist/reply.runtime-BC1HT67i.js +2 -0
- package/dist/reply.runtime.js +1 -1
- package/dist/reset-preserved-selection-Czd80hug.js +45 -0
- package/dist/resolve-COJFlAZT.js +106 -0
- package/dist/restart-B9GMMIZt.js +121 -0
- package/dist/result-fallback-classifier-By0Z6b8r.js +98 -0
- package/dist/root-help-Bp0kGaUZ.js +43 -0
- package/dist/route-CgG9Z7OI.js +475 -0
- package/dist/route-reply-D9_9oRg1.js +174 -0
- package/dist/route-reply.runtime-BwNl3h2m.js +2 -0
- package/dist/route-reply.runtime.js +1 -1
- package/dist/routes-Cz2NHUV4.js +2 -0
- package/dist/routes-DMo6Eacc.js +3701 -0
- package/dist/run-SFRSThMI.js +1162 -0
- package/dist/run-auth-profile.runtime-BxLM8m_2.js +2 -0
- package/dist/run-auth-profile.runtime.js +1 -1
- package/dist/run-command-Cd5iN7eN.js +2 -0
- package/dist/run-command-ah46O06U.js +23 -0
- package/dist/run-context-DGCQJldA.js +66 -0
- package/dist/run-context.runtime-CSBHDAd5.js +2 -0
- package/dist/run-context.runtime.js +1 -1
- package/dist/run-delivery.runtime-C9xoiZ3h.js +762 -0
- package/dist/run-delivery.runtime.js +1 -1
- package/dist/run-embedded.runtime-D8bz5vfV.js +4 -0
- package/dist/run-embedded.runtime.js +1 -1
- package/dist/run-execution-cli.runtime-BAa8KPn7.js +4 -0
- package/dist/run-execution-cli.runtime.js +1 -1
- package/dist/run-executor.runtime-CNnemqSa.js +330 -0
- package/dist/run-executor.runtime.js +1 -1
- package/dist/run-model-catalog.runtime-Dh7EghXr.js +2 -0
- package/dist/run-model-catalog.runtime.js +1 -1
- package/dist/run-session-state-cMlTFwT_.js +159 -0
- package/dist/run-subagent-registry.runtime-BgQU86-E.js +2 -0
- package/dist/run-subagent-registry.runtime.js +1 -1
- package/dist/runner-B3YXRJOB.js +704 -0
- package/dist/runner.entries-DMTKpRDP.js +1485 -0
- package/dist/runtime-BHReFHE2.js +2 -0
- package/dist/runtime-BiQZ6Usw.js +615 -0
- package/dist/runtime-CAeriu2O.js +10 -0
- package/dist/runtime-CAnCRCX3.js +224 -0
- package/dist/runtime-CV_2NqSY.js +300 -0
- package/dist/runtime-CmpnvXo3.js +245 -0
- package/dist/runtime-D2fci1Ey.js +2 -0
- package/dist/runtime-DAsYmYeA.js +3 -0
- package/dist/runtime-DeA45VKG.js +210 -0
- package/dist/runtime-DvkZ8tHI.js +436 -0
- package/dist/runtime-DxVUR2Xg.js +2 -0
- package/dist/runtime-api-B88le0UE.js +12 -0
- package/dist/runtime-channel-AubRWvnH.js +2 -0
- package/dist/runtime-channel-DdclSuEu.js +148 -0
- package/dist/runtime-config-collectors-DukTj2va.js +525 -0
- package/dist/runtime-embedded-agent.runtime-BpLweeFv.js +2 -0
- package/dist/runtime-embedded-agent.runtime.js +1 -1
- package/dist/runtime-internal-CaoUylZw.js +2 -0
- package/dist/runtime-llm.runtime-DlpqGc7S.js +307 -0
- package/dist/runtime-llm.runtime.js +1 -1
- package/dist/runtime-model-auth.runtime-CLAaWzxY.js +46 -0
- package/dist/runtime-model-auth.runtime-DxVvqRTd.js +2 -0
- package/dist/runtime-model-auth.runtime.js +1 -1
- package/dist/runtime-options-TTtN01-I.js +275 -0
- package/dist/runtime-plugin-ClqxJSbp.js +92 -0
- package/dist/runtime-plugins-Bq01wLXP.js +32 -0
- package/dist/runtime-plugins.runtime-cwCvl1TR.js +2 -0
- package/dist/runtime-plugins.runtime.js +1 -1
- package/dist/runtime-prepare.runtime-Cz_hV_k5.js +81 -0
- package/dist/runtime-prepare.runtime.js +1 -1
- package/dist/runtime-provider-QCJq90av.js +24 -0
- package/dist/runtime-provider-Wllc3jC6.js +2 -0
- package/dist/runtime-registry-loader-BM1mQBJr.js +2 -0
- package/dist/runtime-registry-loader-DzhYCt4s.js +117 -0
- package/dist/runtime-shared-BfqOW-Vb.js +365 -0
- package/dist/runtime-web-channel-plugin-BcVPgD14.js +204 -0
- package/dist/runtime-web-tools-fallback.runtime.js +1 -1
- package/dist/scan-ldbaD8jq.js +573 -0
- package/dist/sdk-security-runtime-Bxhq2O1G.js +86 -0
- package/dist/sdk-setup-tools-CsQM9pF0.js +8 -0
- package/dist/secrets-cli-DbpIf4-z.js +150 -0
- package/dist/security-cli-BK4Xpa6h.js +520 -0
- package/dist/selection-BXKik6Ps.js +3 -0
- package/dist/selection-D4O3gK3Q.js +18365 -0
- package/dist/send-DaoGIay5.js +1222 -0
- package/dist/send-DzNjJGJX.js +178 -0
- package/dist/send-f5w9krNS.js +711 -0
- package/dist/send-media-cOciBxcg.js +2072 -0
- package/dist/send-result-DMFwBuOl.js +141 -0
- package/dist/server-BoC1mxZ-.js +24 -0
- package/dist/server-DZnI6w5k.js +72 -0
- package/dist/server-aux-handlers-BwRdYdub.js +1347 -0
- package/dist/server-chat-Q95f4ywD.js +827 -0
- package/dist/server-close.runtime.js +3 -3
- package/dist/server-context-CnXNaarB.js +2 -0
- package/dist/server-context-DRBebo7Y.js +955 -0
- package/dist/server-cron-C0o0ZvqF.js +3173 -0
- package/dist/server-cron-CLeBvurR.js +2 -0
- package/dist/server-maintenance-CqHfTnFD.js +152 -0
- package/dist/server-methods-BmlBQJMD.js +497 -0
- package/dist/server-middleware-DJhnR6jl.js +122 -0
- package/dist/server-model-catalog-CoSSk_Gy.js +2 -0
- package/dist/server-model-catalog-D32oDTQp.js +73 -0
- package/dist/server-node-events-DX9a4etQ.js +597 -0
- package/dist/server-plugin-bootstrap-Vco-EpxY.js +71 -0
- package/dist/server-plugins-WBX2fZRp.js +435 -0
- package/dist/server-reload-handlers-DGJLH8bg.js +719 -0
- package/dist/server-restart-sentinel-Bvon7f8K.js +700 -0
- package/dist/server-runtime-services-BNcH4vhR.js +3 -0
- package/dist/server-runtime-services-BjcQG5y7.js +147 -0
- package/dist/server-runtime-subscriptions-W39HeyoT.js +67 -0
- package/dist/server-session-events-CO73dMU-.js +244 -0
- package/dist/server-session-key-D8V67lDk.js +2 -0
- package/dist/server-session-key-v-KYSmRS.js +75 -0
- package/dist/server-startup-config-u54lUdWN.js +305 -0
- package/dist/server-startup-early-Cy5kArJG.js +87 -0
- package/dist/server-startup-memory-DvINFAYn.js +72 -0
- package/dist/server-startup-plugins-CerpbOSQ.js +127 -0
- package/dist/server-startup-post-attach-COUCwhNa.js +793 -0
- package/dist/server-ws-runtime-BfznAnbI.js +374 -0
- package/dist/server.impl-dQXccj0z.js +2622 -0
- package/dist/session-cost-usage-Bs5yIOBH.js +1600 -0
- package/dist/session-kill-http-DVleb3RW.js +121 -0
- package/dist/session-log-runtime-OG7J4j9m.js +1258 -0
- package/dist/session-override-LIWl5a9T.js +134 -0
- package/dist/session-reset-model.runtime-BpnTi4sa.js +144 -0
- package/dist/session-reset-model.runtime.js +1 -1
- package/dist/session-reset-service-HA07zS8L.js +651 -0
- package/dist/session-status.runtime-D6_clH8l.js +2 -0
- package/dist/session-status.runtime.js +1 -1
- package/dist/session-store-Cj4Rh6qc.js +273 -0
- package/dist/session-store.runtime-DSCxACdZ.js +4 -0
- package/dist/session-store.runtime.js +1 -1
- package/dist/session-subagent-reactivation.runtime-CcwaHAxg.js +2 -0
- package/dist/session-subagent-reactivation.runtime.js +1 -1
- package/dist/session-tab-registry-C-9uI2Wi.js +551 -0
- package/dist/session-utils-BRtPESA4.js +1508 -0
- package/dist/sessions-Beltl3Ra.js +1917 -0
- package/dist/sessions-DR-X-j8D.js +316 -0
- package/dist/sessions-cleanup-CR1CFcJb.js +165 -0
- package/dist/sessions-history-http-CjyHWYEv.js +432 -0
- package/dist/sessions-patch-peSeltuF.js +401 -0
- package/dist/sessions-resolve-D9ULr95s.js +180 -0
- package/dist/sessions-table-Da6bua9d.js +161 -0
- package/dist/sessions-uKpnhod0.js +12736 -0
- package/dist/sessions.runtime-C1mVNaU3.js +2 -0
- package/dist/sessions.runtime.js +1 -1
- package/dist/set-DVj21EuB.js +31 -0
- package/dist/set-image-JChDCaAP.js +17 -0
- package/dist/setup-5I-zpID3.js +614 -0
- package/dist/setup-CjtY6cli.js +2 -0
- package/dist/setup-onboard-configure-help-fast-path-C5GcSuXb.js +64 -0
- package/dist/setup.finalize-Bf10PNbl.js +586 -0
- package/dist/setup.gateway-config-EH5Rvwzy.js +281 -0
- package/dist/setup.migration-import-CoeV4Kc1.js +200 -0
- package/dist/setup.migration-import-DFFGw4DI.js +2 -0
- package/dist/setup.post-install-migration-DcQmWTE7.js +128 -0
- package/dist/shared-BFSJZ6B3.js +212 -0
- package/dist/shared-CVM-dYkO.js +5 -0
- package/dist/shared-fvgcmCsj.js +71 -0
- package/dist/simple-completion-runtime-C_TXe4M1.js +2 -0
- package/dist/simple-completion-runtime-DREq-fcF.js +206 -0
- package/dist/simple-completion-transport-DtD1fEvJ.js +83 -0
- package/dist/snapshot-urls-B-wkwDI9.js +317 -0
- package/dist/speech-core-KQg6oKcR.js +119 -0
- package/dist/speech-provider-DfyLYitQ.js +171 -0
- package/dist/speech-provider-oDvTumNW.js +227 -0
- package/dist/speech-provider-yL-TQ3Em.js +233 -0
- package/dist/stale-oauth-profile-shadows-CW11VYMM.js +2 -0
- package/dist/stale-oauth-profile-shadows-DFl6Lyf1.js +186 -0
- package/dist/standalone-runtime-registry-loader-BiponY-y.js +59 -0
- package/dist/startup-context-PVXYM-X3.js +314 -0
- package/dist/status-BA_0z83w.js +249 -0
- package/dist/status-Bc7BGlRt.js +2 -0
- package/dist/status-BwPWg9eQ.js +3 -0
- package/dist/status-CLQ66eml.js +4 -0
- package/dist/status-Ci2gChtY.js +466 -0
- package/dist/status-CmtBWJEE.js +2 -0
- package/dist/status-DdnMnPNs.js +73 -0
- package/dist/status-all-BpTvkYrt.js +573 -0
- package/dist/status-json-CizozZCr.js +15 -0
- package/dist/status-json-command-FzKa2t6O.js +84 -0
- package/dist/status-message-BHbnxwmt.js +495 -0
- package/dist/status-message.runtime-Df5WBBAk.js +6 -0
- package/dist/status-message.runtime.js +1 -1
- package/dist/status-queue.runtime-CXnZV4Bj.js +2 -0
- package/dist/status-queue.runtime.js +1 -1
- package/dist/status-runtime-shared-D3Hz8WZ_.js +289 -0
- package/dist/status-subagents.runtime-PoDdwwaw.js +32 -0
- package/dist/status-subagents.runtime.js +1 -1
- package/dist/status-text-DNxXSCuI.js +301 -0
- package/dist/status.command-C_e9GcMg.js +2 -0
- package/dist/status.command-DjVKDmt_.js +425 -0
- package/dist/status.command.text-runtime-BeHlqL8b.js +15 -0
- package/dist/status.runtime-h--fx9HY.js +2 -0
- package/dist/status.scan-WyR8TeJz.js +72 -0
- package/dist/status.scan-overview-CMzUAQMQ.js +460 -0
- package/dist/status.scan.deps.runtime-1JTrdyHk.js +19 -0
- package/dist/status.scan.deps.runtime.js +1 -1
- package/dist/status.scan.fast-json-D2jw1wKO.js +163 -0
- package/dist/status.scan.fast-json-DbN1KxJT.js +2 -0
- package/dist/status.summary-6ZijZM1g.js +2 -0
- package/dist/status.summary-CiCsChO-.js +276 -0
- package/dist/store-CdBPITcg.js +2302 -0
- package/dist/store-D0l2NCdn.js +3 -0
- package/dist/stored-model-override-HEgnFh6b.js +79 -0
- package/dist/subagent-announce-BUv_kA1W.js +353 -0
- package/dist/subagent-announce-delivery-Ci2Y_p--.js +1369 -0
- package/dist/subagent-control-BM3vNgsQ.js +492 -0
- package/dist/subagent-control.runtime-Df3pVQL9.js +3 -0
- package/dist/subagent-control.runtime.js +1 -1
- package/dist/subagent-hooks-CN2fLez2.js +2 -0
- package/dist/subagent-hooks-CeOmTJBf.js +230 -0
- package/dist/subagent-hooks-api-Cfe4DAT9.js +23 -0
- package/dist/subagent-registry-B9RPAXUs.js +2627 -0
- package/dist/subagent-registry-C7tedtVB.js +3 -0
- package/dist/subagent-registry.runtime.js +2 -2
- package/dist/subagent-session-cleanup-y0ijZ-LQ.js +390 -0
- package/dist/system-DVtrOGbV.js +111 -0
- package/dist/system-prompt-config-BVmrcmmr.js +918 -0
- package/dist/talk-CrdgqTCl.js +2454 -0
- package/dist/target-id-CrUyi-Uq.js +107 -0
- package/dist/targets-KZ2ezPwx.js +267 -0
- package/dist/targets.runtime-iZ8KdQ1C.js +2 -0
- package/dist/targets.runtime.js +1 -1
- package/dist/task-executor-893pMqzn.js +349 -0
- package/dist/task-owner-access-DC7MKz3n.js +74 -0
- package/dist/task-registry-control.runtime.js +2 -2
- package/dist/task-registry-delivery-runtime-YGMOyqP5.js +2 -0
- package/dist/task-registry-uaYJfgXF.js +2362 -0
- package/dist/task-registry.maintenance-Dx0m2NYh.js +2 -0
- package/dist/task-registry.maintenance-gApg-XOt.js +764 -0
- package/dist/task-status-access-CFhD_ieY.js +18 -0
- package/dist/tasks-B_Qoz38D.js +153 -0
- package/dist/tasks-DtV85zJT.js +548 -0
- package/dist/tasks-audit-system-Con3yYnm.js +210 -0
- package/dist/tasks-json-BM3pauZl.js +73 -0
- package/dist/tavily-web-search-provider.runtime-Cmyyc5kX.js +112 -0
- package/dist/tavily-web-search-provider.runtime.js +1 -1
- package/dist/text-report-CKxmVmt5.js +695 -0
- package/dist/text-transforms.runtime-DVwVsBRS.js +113 -0
- package/dist/text-transforms.runtime.js +1 -1
- package/dist/thread-bindings-B6UEVp9q.js +228 -0
- package/dist/tool-KOZc7TIF.js +143 -0
- package/dist/tool-dispatch-Ca4z2GEr.js +155 -0
- package/dist/tool-images-CzDwHeDR.js +247 -0
- package/dist/tool-plugin-BvQBJ2gU.js +93 -0
- package/dist/tool-resolution-Ddxl6tjh.js +153 -0
- package/dist/tool-result-truncation-BSKuIhd5.js +498 -0
- package/dist/tool-schema-nB27q-vb.js +40 -0
- package/dist/tool-schema-projection-COrMarLR.js +215 -0
- package/dist/tool-split-BjPHBFrv.js +323 -0
- package/dist/tools-CV40BWkc.js +901 -0
- package/dist/tools-catalog-5stC7W2V.js +156 -0
- package/dist/tools-effective-BVjqz2FV.js +442 -0
- package/dist/tools-effective-inventory-esPY5jRB.js +379 -0
- package/dist/tools-invoke-Czk_NM9G.js +51 -0
- package/dist/tools-invoke-http-D7PbsODz.js +68 -0
- package/dist/tools-invoke-shared-CzrEn0Dm.js +200 -0
- package/dist/tools-rSjgf61B.js +579 -0
- package/dist/tools.runtime-DiChCSGI.js +5 -0
- package/dist/tools.runtime.js +1 -1
- package/dist/transcript-rewrite-4IQefjvK.js +688 -0
- package/dist/transcripts-tool-BXTS8tE5.js +2 -0
- package/dist/transcripts-tool-CeWGgz5k.js +656 -0
- package/dist/tts-BS8EeM8p.js +2 -0
- package/dist/tts-BlTZjsaE.js +194 -0
- package/dist/tts-runtime-BfRdJDyY.js +1337 -0
- package/dist/tts-vRSvSw-t.js +3 -0
- package/dist/tts.runtime-ChBnVkNt.js +3 -0
- package/dist/tts.runtime-CmVCUbzq.js +2 -0
- package/dist/tts.runtime.js +1 -1
- package/dist/tui-BoQVBgWB.js +4860 -0
- package/dist/tui-DBYK9BeQ.js +2 -0
- package/dist/tui-backend-X0NI7rAv.js +256 -0
- package/dist/tui-cli-BpUtjV38.js +40 -0
- package/dist/typing-policy-CBwyAQh4.js +199 -0
- package/dist/usage-Bl-tgGx-.js +623 -0
- package/dist/usage-Cj_ektBl.js +1113 -0
- package/dist/usage-format-DWO9ckX3.js +394 -0
- package/dist/usage-format-DnCIXsqG.js +2 -0
- package/dist/video-generation-provider-B7ib4AeI.js +297 -0
- package/dist/video-generation-provider-CXQ6fqJx.js +64 -0
- package/dist/video-generation-provider-DXjl05T6.js +325 -0
- package/dist/video-generation-provider-Db8h71jA.js +77 -0
- package/dist/web-fetch/runtime.js +1 -1
- package/dist/web-fetch-providers.runtime-DhPkYjgB.js +41 -0
- package/dist/web-fetch-providers.runtime.js +1 -1
- package/dist/web-guarded-fetch-BdsVyvDS.js +58 -0
- package/dist/web-guarded-fetch-CJR3JCwT.js +2 -0
- package/dist/web-media-BzzQJAwk.js +4 -0
- package/dist/web-media-DViZjNBa.js +2 -0
- package/dist/web-media-inHawfBU.js +651 -0
- package/dist/web-provider-runtime-shared-Cc08Lt9p.js +142 -0
- package/dist/web-search-provider-common-CtbtmUL-.js +252 -0
- package/dist/web-search-providers.runtime-B7x_cRVn.js +41 -0
- package/dist/web-search-providers.runtime.js +1 -1
- package/dist/zod-schema.core-Cuz0lz6m.d.ts +166 -0
- package/package.json +1 -1
- package/dist/abort-CR0u3VsG.js +0 -277
- package/dist/abort.runtime-CXUxanGg.js +0 -2
- package/dist/accounts-BxBaquAf.js +0 -423
- package/dist/accounts-vQjpoqEe.js +0 -2
- package/dist/acp-spawn-2elSoS0E.js +0 -1286
- package/dist/acp-spawn-DtKOHNO1.js +0 -2
- package/dist/acp-stateful-target-driver-BqeA5j0h.js +0 -89
- package/dist/action-info-B8NotHFw.js +0 -75
- package/dist/active-runtime-registry-BO9mpPuB.js +0 -62
- package/dist/active-tool-schema-warnings-C8vGj5FX.js +0 -105
- package/dist/active-tool-schema-warnings-CVeFJuWI.js +0 -2
- package/dist/agent-BgEaDMdp.js +0 -1825
- package/dist/agent-_V5GbziF.js +0 -2
- package/dist/agent-bundle-lsp-runtime-0jBcDEHh.js +0 -389
- package/dist/agent-bundle-lsp-runtime-CQ6dZLs_.js +0 -2
- package/dist/agent-bundle-mcp-materialize-Cu6JqMzC.js +0 -124
- package/dist/agent-bundle-mcp-tools-BGL827cn.js +0 -3
- package/dist/agent-command-CMJdGr16.js +0 -1435
- package/dist/agent-delivery-DMu1MOeq.js +0 -117
- package/dist/agent-harness-runtime-BKSW2E1O.js +0 -207
- package/dist/agent-model-discovery-Cu4YL31r.js +0 -3
- package/dist/agent-model-discovery-DdmVtkZo.js +0 -238
- package/dist/agent-runner-utils-DXNDhwkI.js +0 -267
- package/dist/agent-runner.runtime-Cym4Odfd.js +0 -3784
- package/dist/agent-runtime-BkbhevY3.js +0 -199
- package/dist/agent-runtime-label-DNP06p76.js +0 -30
- package/dist/agent-runtime-metadata-JaTKc7mA.js +0 -53
- package/dist/agent-tool-result-middleware-loader-FbZE0Qpk.js +0 -55
- package/dist/agent-tools-Nwh8BlKX.js +0 -2506
- package/dist/agent-tools.before-tool-call-BwY-FYFl.js +0 -1274
- package/dist/agent-tools.before-tool-call-DwUmYhE3.js +0 -2
- package/dist/agent-u5NDWrw9.js +0 -3
- package/dist/agent-via-gateway-DMtOMwZa.js +0 -486
- package/dist/agent-wait-dedupe-CLuKbI_7.js +0 -180
- package/dist/agents-CiW7UEuB.js +0 -632
- package/dist/agents.command-shared-CXGSQscb.js +0 -16
- package/dist/agents.commands.add-BYBrZDXD.js +0 -304
- package/dist/agents.commands.bind-nfg3AlVc.js +0 -265
- package/dist/agents.commands.delete-pRj6vIrn.js +0 -128
- package/dist/agents.commands.identity-Ci2PnDDl.js +0 -143
- package/dist/agents.commands.list-Crj3BmqB.js +0 -235
- package/dist/aliases-BFspFx3-.js +0 -97
- package/dist/api-BiXhdPle.js +0 -3
- package/dist/api-Cptkjys5.js +0 -6
- package/dist/api-D3vT4ZVi.js +0 -2
- package/dist/api-key-rotation-CQgW8LEx.js +0 -167
- package/dist/app-registration-YW276fZC.js +0 -194
- package/dist/apply-BRxKrOiK.js +0 -510
- package/dist/apply-D0fWCa-U.js +0 -2
- package/dist/apply-DIR8y0ZA.js +0 -2
- package/dist/apply-DNUIV0Lt.js +0 -416
- package/dist/apply-Dux9jI7f.js +0 -544
- package/dist/approval-native-helpers-BMT-5X47.js +0 -398
- package/dist/artifacts-CTrtIv9T.js +0 -368
- package/dist/assistant-ClfI8Kho.js +0 -291
- package/dist/attachment-normalize-DAW86mZY.js +0 -213
- package/dist/attempt-execution-DTi2UfET.js +0 -584
- package/dist/attempt-execution.helpers-DrX0QToi.js +0 -969
- package/dist/attempt-execution.runtime-BCmAxwGy.js +0 -3
- package/dist/attempt.prompt-helpers-BE6kGRtT.js +0 -543
- package/dist/attempt.tool-run-context-J9O2yjbV.js +0 -1240
- package/dist/audio-preflight.runtime-D3GXVYBI.js +0 -7
- package/dist/audit-5T20D-xm.js +0 -1108
- package/dist/audit-CWuV5GlP.js +0 -477
- package/dist/audit.nondeep.runtime-DeYwRDYj.js +0 -1416
- package/dist/audit.runtime-rUlvK4Rb.js +0 -7
- package/dist/auth-DunUSatn.js +0 -567
- package/dist/auth-choice--eBzca8Y.js +0 -3
- package/dist/auth-choice-DJ9jsFUq.js +0 -400
- package/dist/auth-choice-_pLkIdVh.js +0 -110
- package/dist/auth-choice.apply.api-providers-CALcopRP.js +0 -2
- package/dist/auth-choice.apply.api-providers-Dzzm1snk.js +0 -34
- package/dist/auth-choice.plugin-providers.runtime-BHKTeZZc.js +0 -11
- package/dist/auth-health-Cs4OjiF2.js +0 -219
- package/dist/auth-list-bwJ4QDs0.js +0 -115
- package/dist/auth-order-BoHN3Dc_.js +0 -105
- package/dist/auth-profiles-BOLncVgy.js +0 -73
- package/dist/auth-profiles-BiQRkULt.js +0 -14
- package/dist/backend-config-B5yga5ay.js +0 -259
- package/dist/bash-tools-BWvldguc.js +0 -3
- package/dist/bash-tools-DEAAO5np.js +0 -3497
- package/dist/binding-routing-BbtHmU_l.js +0 -113
- package/dist/binding-targets-DSNv3-QA.js +0 -121
- package/dist/bootstrap-files-DD8V2dLe.js +0 -202
- package/dist/bootstrap-files-_6u1uJW2.js +0 -3
- package/dist/bridge-server-v1-XPnAZ.js +0 -113
- package/dist/browser-cli-CnpuO4KR.js +0 -230
- package/dist/browser-cli-DPbIn8SK.js +0 -2
- package/dist/browser-cli-actions-input-DoGR6LI-.js +0 -522
- package/dist/browser-cli-actions-observe-CYMpgmtF.js +0 -81
- package/dist/browser-cli-debug-ChJjSq-h.js +0 -137
- package/dist/browser-cli-inspect-Bbci-WPG.js +0 -117
- package/dist/browser-cli-manage-Bnscjb7b.js +0 -446
- package/dist/browser-cli-resize-D1MJdvZI.js +0 -32
- package/dist/browser-cli-shared-BCQwqz51.js +0 -69
- package/dist/browser-cli-state-BWkPsvUg.js +0 -371
- package/dist/browser-control-auth-CEP_ExeC.js +0 -2
- package/dist/browser-profiles-SvnqnHVN.js +0 -2
- package/dist/browser-runtime-0mRxjFpp.js +0 -389
- package/dist/browser-tool.schema--CLR3nDv.js +0 -132
- package/dist/btw-command-DV6HfrRV.js +0 -18
- package/dist/build-DiRmljCi.js +0 -261
- package/dist/bundled-channel-config-schema-Bte--ZlY.d.ts +0 -3168
- package/dist/capability-cli-ATfwTYFe.js +0 -1809
- package/dist/capability-provider-runtime-l3nnLGvn.js +0 -346
- package/dist/cdp.helpers-IIuc0KGS.js +0 -637
- package/dist/channel-CzTD2ouI.js +0 -2309
- package/dist/channel-actions-B5Yk5Axf.js +0 -46
- package/dist/channel-bootstrap.runtime-C9F-Pq1o.js +0 -38
- package/dist/channel-bootstrap.runtime-TPyY5Ngv.js +0 -2
- package/dist/channel-core-XMZJ-ZGF.js +0 -5
- package/dist/channel-inbound-DvqkKmiH.js +0 -121
- package/dist/channel-message-CnJ4vUyt.js +0 -12
- package/dist/channel-outbound-BhefGAqY.js +0 -436
- package/dist/channel-plugin-resolution-BiaJ8aRa.js +0 -2
- package/dist/channel-plugin-resolution-D_CxkMVc.js +0 -135
- package/dist/channel-resolution-DzI28gIM.js +0 -46
- package/dist/channel-selection-CLFO4-eQ.js +0 -171
- package/dist/channel-selection.runtime-Beb2-bMH.js +0 -2
- package/dist/channel.runtime-By5T5eGw.js +0 -697
- package/dist/channels-BrRY9Mag.js +0 -1004
- package/dist/channels-cli-CF--e2RU.js +0 -331
- package/dist/chat-BTMPilpx.js +0 -2940
- package/dist/chat-DnC7XCWK.js +0 -3
- package/dist/chrome-C3_dN9jE.js +0 -1517
- package/dist/chrome-mcp-5jjDHIgn.js +0 -864
- package/dist/chrome-mcp-DFAa-WzK.js +0 -2
- package/dist/claude-live-session-BUPeOzLE.js +0 -1338
- package/dist/claude-live-session-Bprgmr1-.js +0 -2
- package/dist/clawbot-cli-5UVkLT1Y.js +0 -9
- package/dist/cli-6a6sMEUB.js +0 -2
- package/dist/cli-COCN9B5e.js +0 -2
- package/dist/cli-CpI4dBXy.js +0 -141
- package/dist/cli-YLx-ekdH.js +0 -293
- package/dist/cli-backends.runtime-CsBjr7ag.js +0 -7
- package/dist/cli-compaction-Bh0oMwUa.js +0 -363
- package/dist/cli-registry-loader-DDbaAJgY.js +0 -2
- package/dist/cli-registry-loader-xc2Ah8S4.js +0 -193
- package/dist/cli-runner-BfSrIn-9.js +0 -597
- package/dist/cli-runner-D_FAjNbR.js +0 -2
- package/dist/cli-runner.runtime-BJetQDu1.js +0 -3
- package/dist/cli-runner.runtime-BKJQkc7C.js +0 -4
- package/dist/cli-session-Cy3IeH0g.js +0 -119
- package/dist/cli.runtime-BpOz0s3N.js +0 -1276
- package/dist/codex-native-web-search-BDtKRV3F.js +0 -4
- package/dist/codex-native-web-search-C0TrfoMX.js +0 -20
- package/dist/codex-native-web-search-core-CzlK1GfN.js +0 -106
- package/dist/command-auth-CFnvdYX2.js +0 -135
- package/dist/command-config-resolution-B_86rG8v.js +0 -2
- package/dist/command-config-resolution-BbadcA2M.js +0 -25
- package/dist/command-config-resolution.runtime-B_86rG8v.js +0 -2
- package/dist/command-execution-startup-Rrwwdg_5.js +0 -90
- package/dist/command-primitives-runtime-C9bTt5IV.js +0 -3
- package/dist/command-registry-CbpdQKmu.js +0 -9
- package/dist/command-registry-Dw-XC_Zk.js +0 -4
- package/dist/command-registry-core-rvEDki6p.js +0 -114
- package/dist/command-secret-gateway-BX6BIiFn.js +0 -589
- package/dist/command-secret-targets-DCzlTkb5.js +0 -2
- package/dist/command-status-builders-DIsZN9aY.js +0 -147
- package/dist/command-status.runtime-C2x4yMRd.js +0 -90
- package/dist/commands-FYCxWqIx.js +0 -161
- package/dist/commands-compact.runtime-BTMQfx1k.js +0 -10
- package/dist/commands-core.runtime-CuNLz2wm.js +0 -2
- package/dist/commands-handlers.runtime-DyNuPOmY.js +0 -6327
- package/dist/commands-models-s7BRmLQh.js +0 -448
- package/dist/commands-registry-BxEq-3UJ.js +0 -195
- package/dist/commands-registry.runtime-CbXW33S_.js +0 -4
- package/dist/commands-status-BRJMba4h.js +0 -16
- package/dist/commands-status-DCXEwlSF.js +0 -3
- package/dist/commands-status.runtime-DCXEwlSF.js +0 -3
- package/dist/commands-subagents-control.runtime-CduLQJFD.js +0 -2
- package/dist/commands-system-prompt-B3LD8CDs.js +0 -161
- package/dist/commands-system-prompt-DPsXTqOQ.js +0 -2
- package/dist/commands.runtime-3sVz8Qgo.js +0 -175
- package/dist/common-CZvBLb3w.js +0 -286
- package/dist/compact-DxU_9XEc.js +0 -1165
- package/dist/compact.runtime-CqQTypVl.js +0 -12
- package/dist/compaction-planning-DArTi9SN.js +0 -202
- package/dist/completion-cli-CiKl5HhI.js +0 -393
- package/dist/config--yllOaSC.js +0 -374
- package/dist/config-Yt5UcD91.js +0 -610
- package/dist/config-cli-BeXS3R6k.js +0 -1703
- package/dist/config-mutation-cQeWhUqy.js +0 -5
- package/dist/config-mutations-Cg04LH_S.js +0 -161
- package/dist/config-utils-Dhq_UKMC.js +0 -141
- package/dist/config-validation-BANohTKD.js +0 -33
- package/dist/configure-CWxhlx9G.js +0 -771
- package/dist/configure-Jejkc6dn.js +0 -3
- package/dist/configure.commands-BYy1bz8G.js +0 -2
- package/dist/configure.commands-C3hDvZse.js +0 -1253
- package/dist/context-DptQ59DZ.js +0 -248
- package/dist/context-_ZshNBhD.js +0 -2
- package/dist/context-engine-host-compat-C_eflvRw.js +0 -2
- package/dist/context-engine-host-compat-s15Pu845.js +0 -280
- package/dist/context-engine-lifecycle-COHFLnj4.js +0 -627
- package/dist/control-auth-CQJpLoIb.js +0 -114
- package/dist/control-service-BFSgA0Py.js +0 -40
- package/dist/control-service-D7GZv-GS.js +0 -3
- package/dist/control-ui/assets/activity-CCu43qU8.js +0 -124
- package/dist/control-ui/assets/agents-DCvsB0yO.js +0 -1030
- package/dist/control-ui/assets/channels-CpM2j5xT.js +0 -120
- package/dist/control-ui/assets/cron-CLXNfwYa.js +0 -1016
- package/dist/control-ui/assets/debug-BcJ34lrC.js +0 -97
- package/dist/control-ui/assets/index-CuBn2YpX.js +0 -7214
- package/dist/control-ui/assets/instances-Bu6NM_Hs.js +0 -57
- package/dist/control-ui/assets/nodes-Bd1WzVLK.js +0 -444
- package/dist/control-ui/assets/sessions-C2r8pbt7.js +0 -425
- package/dist/control-ui/assets/skills-DIjn93ee.js +0 -362
- package/dist/control-ui/assets/workboard-CHb0if1l.js +0 -402
- package/dist/control-ui-ChfTPXZo.js +0 -750
- package/dist/conversation-label-generator-CTfnInQF.js +0 -72
- package/dist/conversation-runtime-B7oAN9Tq.js +0 -31
- package/dist/core-api-CBD0dvTQ.js +0 -5
- package/dist/core-api-ClCm_yM8.js +0 -2
- package/dist/core-wuoxL08a.js +0 -284
- package/dist/crestodian--iYeGB8u.js +0 -55
- package/dist/cron-D2SzQyqo.js +0 -453
- package/dist/daemon-install-B6CAkU3V.js +0 -66
- package/dist/daemon-install-auth-profiles-store.runtime-Cpt5LSD6.js +0 -2
- package/dist/dashboard-ChYOQjM2.js +0 -263
- package/dist/defaults-CCopehWw.js +0 -130
- package/dist/defaults-H4kBp17N.js +0 -3
- package/dist/defaults.constants-CjB9HP6f.js +0 -76
- package/dist/deliver-BzPhWO_F.js +0 -3
- package/dist/deliver-DGyKH3Qi.js +0 -1399
- package/dist/deliver-runtime-Ca2kcQoZ.js +0 -2
- package/dist/delivery-outbound.runtime-D7ycPxY-.js +0 -7
- package/dist/delivery-queue-CnLv30ko.js +0 -863
- package/dist/delivery-queue-CuaDjNMh.js +0 -2
- package/dist/delivery-queue-runtime-DO2vqOIJ.js +0 -16
- package/dist/delivery-target.runtime-QcBVk_j8.js +0 -45
- package/dist/delivery.runtime-L09v4tys.js +0 -470
- package/dist/detached-task-runtime-BqU7YXYT.js +0 -86
- package/dist/diagnostics-T-Hk_Qzi.js +0 -168
- package/dist/dialogue-C0VnTMMn.js +0 -37
- package/dist/direct-dm-BWn67tDD.js +0 -81
- package/dist/directive-handling.defaults-DO6Snm4_.js +0 -22
- package/dist/directive-handling.fast-lane-BemYRfPn.js +0 -70
- package/dist/directive-handling.impl-BMVh1pMh.js +0 -823
- package/dist/directive-handling.impl-vr4MsYbt.js +0 -2
- package/dist/directive-handling.model-selection-DegP9exp.js +0 -122
- package/dist/directive-handling.persist.runtime-BUdU6_zm.js +0 -274
- package/dist/directives-1xk_ZcMf.js +0 -319
- package/dist/directory-cli-D83WEjEG.js +0 -239
- package/dist/dispatch-Ck2tvRYH.js +0 -2057
- package/dist/dispatch-acp-GdaHNdvf.js +0 -1102
- package/dist/dispatch-acp-manager.runtime-BGSrJqrW.js +0 -3
- package/dist/dispatch-acp-media.runtime-DQ8dYQh8.js +0 -4
- package/dist/dispatch-acp-transcript.runtime-CsJZGhnu.js +0 -40
- package/dist/dispatch-acp-tts.runtime-Bo-QxKgx.js +0 -3
- package/dist/dispatch-acp.runtime-C_u7sGcQ.js +0 -18
- package/dist/dispatcher-GtuYO6Ni.js +0 -106
- package/dist/doctor-B2qP9g8d.js +0 -760
- package/dist/doctor-D9wCez5t.js +0 -6
- package/dist/doctor-auth-XnseqtS7.js +0 -216
- package/dist/doctor-auth-flat-profiles-B6cL-TiJ.js +0 -516
- package/dist/doctor-auth-flat-profiles-Birb7qIk.js +0 -2
- package/dist/doctor-auth-legacy-oauth-CXO3OtyG.js +0 -48
- package/dist/doctor-auth-oauth-sidecar-BSgQPbcS.js +0 -177
- package/dist/doctor-auth-oauth-sidecar-CzzyNwxc.js +0 -2
- package/dist/doctor-bootstrap-size-BlVcO5D6.js +0 -57
- package/dist/doctor-claude-cli-_MTVnCQ-.js +0 -150
- package/dist/doctor-config-flow-0kxzjUjK.js +0 -1819
- package/dist/doctor-core-checks-C_g9REOd.js +0 -666
- package/dist/doctor-core-checks-CahzmM1L.js +0 -2
- package/dist/doctor-core-checks.runtime-Bi_oTiTZ.js +0 -278
- package/dist/doctor-gateway-daemon-flow-UAIWsI9w.js +0 -349
- package/dist/doctor-gateway-services-BiMEGiw_.js +0 -465
- package/dist/doctor-health-C69GVfMl.js +0 -65
- package/dist/doctor-health-contributions-Bz19QhI4.js +0 -874
- package/dist/doctor-lint-BVW4E6Qf.js +0 -95
- package/dist/doctor-memory-search-D2PWzDCY.js +0 -407
- package/dist/doctor-state-integrity-DuJIszQj.js +0 -1257
- package/dist/doctor-tool-result-cap-advice-Dpn4zNH3.js +0 -27
- package/dist/doctor-workspace-status-nW9TcIWi.js +0 -76
- package/dist/dreaming-CcOWzGN5.js +0 -523
- package/dist/dreaming-command-sxm3FQGb.js +0 -101
- package/dist/dreaming-narrative-BSRwiUPL.js +0 -2
- package/dist/dreaming-narrative-BskwmYdC.js +0 -721
- package/dist/dreaming-phases-BuHjGyPw.js +0 -2
- package/dist/dreaming-phases-ChVT8Ovk.js +0 -1162
- package/dist/drive-C_u5W4ln.js +0 -899
- package/dist/echo-transcript-tnZWH4EO.js +0 -52
- package/dist/effective-tool-policy-CeHdL2D7.js +0 -89
- package/dist/embedded-agent-CGULn3lb.js +0 -4
- package/dist/embedded-agent-DZTa1YiK.js +0 -4074
- package/dist/embedded-agent-helpers-B65K9o55.js +0 -6
- package/dist/embedded-agent-helpers-BPXCvWBb.js +0 -1037
- package/dist/embedded-agent.runtime-TfBgXcUV.js +0 -4
- package/dist/embedded-backend-BAaFwayA.js +0 -744
- package/dist/embedded-gateway-stub.runtime-CNyrjvgT.js +0 -12
- package/dist/embedding-provider-runtime-EnkHdROJ.js +0 -86
- package/dist/embedding-providers-CDkDb0kv.js +0 -2
- package/dist/embeddings-http-ClIu4_mP.js +0 -222
- package/dist/engine-qmd-DZRiT9i4.js +0 -708
- package/dist/engine-storage-BEqlN8TR.js +0 -203
- package/dist/errors-Co8auIlv.js +0 -2
- package/dist/exec-approval-forwarder.runtime-C7QvfWQ6.js +0 -4
- package/dist/exec-approval-session-target-ChuH1nXL.js +0 -177
- package/dist/exec-auto-reviewer-Bm7380HF.js +0 -2
- package/dist/exec-auto-reviewer-BrrdGleK.js +0 -241
- package/dist/execute.runtime-B-8jUqDB.js +0 -579
- package/dist/external-cli-auth-selection-0BxmRUps.js +0 -113
- package/dist/extra-params-BgyvpEpv.js +0 -615
- package/dist/fallback-notice-state-BXk_kRWM.js +0 -15
- package/dist/fallbacks-CPdVRP81.js +0 -31
- package/dist/fallbacks-shared-CSGf1oaf.js +0 -116
- package/dist/fengming-runtime-NUA51sEw.js +0 -33
- package/dist/fengming-runtime-config-CIZ-SHPt.js +0 -2
- package/dist/fengming-runtime-memory-CIZ-SHPt.js +0 -2
- package/dist/fengming-runtime-session-CIZ-SHPt.js +0 -2
- package/dist/fengming-tools-MvRSt0JA.js +0 -12221
- package/dist/flows-BocRit8D.js +0 -189
- package/dist/fs-utils-DSXeBcjj.js +0 -9
- package/dist/gateway-BCrUxrVw.js +0 -133
- package/dist/gateway-cli-B8bXBd_L.js +0 -443
- package/dist/gateway-install-token-pngTMc-f.js +0 -136
- package/dist/gateway-method-runtime-ueZTz7WH.js +0 -21
- package/dist/gateway-runtime-DbsoThML.js +0 -23
- package/dist/get-reply-DUuaxcBz.js +0 -5198
- package/dist/get-reply-from-config.runtime-B4Dgs3Hg.js +0 -2
- package/dist/github-copilot-token-7AfRRF7J.js +0 -2
- package/dist/health-7Yq5zpoZ.js +0 -3
- package/dist/health-DlZqxm2f.js +0 -621
- package/dist/health-DxesUuur.js +0 -111
- package/dist/health-state-BMG8kOby.js +0 -106
- package/dist/heartbeat-runner-Bq7A_Cjm.js +0 -5
- package/dist/heartbeat-runner-DVwbVyft.js +0 -1930
- package/dist/heartbeat-runner.runtime-DQ2NPXMD.js +0 -3
- package/dist/helpers-PCu2RivJ.js +0 -406
- package/dist/hook-helpers-DLEnCRO7.js +0 -44
- package/dist/hooks-Bv-otcl7.js +0 -536
- package/dist/hooks-cli-C5ve0nzF.js +0 -465
- package/dist/http-endpoint-helpers-w2SagsQz.js +0 -37
- package/dist/http-utils-CVvn0ZA-.js +0 -98
- package/dist/image-BeixBis4.js +0 -385
- package/dist/image-fallbacks-CPbmIMn9.js +0 -31
- package/dist/image-generation-core.auth.runtime-Co38iRxQ.js +0 -2
- package/dist/image-generation-provider-BA4Ar91S.js +0 -152
- package/dist/image-runtime-7ZsfioS1.js +0 -9
- package/dist/image-tool.helpers-upjA3ksB.js +0 -150
- package/dist/images-ChLi1Uog.js +0 -2
- package/dist/images-nB0XAnTa.js +0 -416
- package/dist/inbound-reply-dispatch-DglobJ8j.js +0 -2
- package/dist/inbound-reply-dispatch-QKOgNx-m.js +0 -147
- package/dist/index-AZzJCgph.d.ts +0 -1497
- package/dist/infra-runtime-CGD3RE_2.js +0 -32
- package/dist/init-poVZDCAM.js +0 -59
- package/dist/install-Dn9oPGmU.js +0 -262
- package/dist/install.runtime-D5sllsjl.js +0 -2
- package/dist/internal-CnOL_Roa.js +0 -399
- package/dist/isolated-agent-CNw6E3F0.js +0 -1097
- package/dist/isolated-agent-DjkHhEyR.js +0 -2
- package/dist/kernel-B5Y5IQ-A.js +0 -3
- package/dist/kernel-CMuO4VJy.js +0 -979
- package/dist/kimi-web-search-provider.runtime-V4m_MHsk.js +0 -307
- package/dist/library-B-1EZjtY.js +0 -45
- package/dist/lifecycle-B-5gEZ7O.js +0 -570
- package/dist/lifecycle-Bzh5Jo09.js +0 -2
- package/dist/lifecycle-DvbcJYMl.js +0 -355
- package/dist/lifecycle.runtime-Bzh5Jo09.js +0 -2
- package/dist/list-B4xSHRdU.js +0 -2
- package/dist/list-BnhZHpxx.js +0 -207
- package/dist/list.list-command-DAz-Ws_6.js +0 -429
- package/dist/list.model-row-DtdX9KDu.js +0 -39
- package/dist/list.probe-CY6lxq51.js +0 -2
- package/dist/list.probe-DPuE1GOH.js +0 -451
- package/dist/list.provider-catalog-BHc9WXI6.js +0 -211
- package/dist/list.provider-catalog-CFbrroys.js +0 -2
- package/dist/list.registry-load-C1_sr3gb.js +0 -152
- package/dist/list.row-sources-BMtHc9oi.js +0 -474
- package/dist/list.source-plan-Dth72qPP.js +0 -81
- package/dist/list.status-command-BXCnEq8Q.js +0 -815
- package/dist/live-model-switch-Dxav22vq.js +0 -119
- package/dist/llm-slug-generator-6o8RXL11.js +0 -78
- package/dist/load-config-EF3n0Dyo.js +0 -27
- package/dist/load-context-CI_ogQt_.js +0 -82
- package/dist/loader-DtwEzpp-.js +0 -7008
- package/dist/local-dispatch.runtime-21liE3rA.js +0 -10
- package/dist/main-session-restart-recovery-D1g62iJ5.js +0 -2
- package/dist/main-session-restart-recovery-v2I9CEXi.js +0 -389
- package/dist/managed-image-attachments-BEl5qfCT.js +0 -616
- package/dist/managed-image-attachments-D5KqX2Qy.js +0 -2
- package/dist/manager-DZc3xiNq.js +0 -2314
- package/dist/manager-Vf3vLTGe.js +0 -3737
- package/dist/mcp-http-BaJoPKF9.js +0 -583
- package/dist/mcp-http-CpEaJIGJ.js +0 -2
- package/dist/media-runtime-DtP_Ff8m.js +0 -391
- package/dist/media-services-CXYbyIIp.js +0 -416
- package/dist/media-understanding-DvTIsIyr.js +0 -87
- package/dist/media-understanding-provider-DBBAvuwG.js +0 -13
- package/dist/media-understanding-provider-DOf_uZrx.js +0 -70
- package/dist/media-understanding-provider-DdRfNh9h.js +0 -69
- package/dist/media-understanding-provider-mqpQDt8V.js +0 -29
- package/dist/memory-BNk25Hi6.js +0 -437
- package/dist/memory-core-host-engine-embeddings-XsK5xS70.js +0 -667
- package/dist/memory-core-host-engine-foundation-BYkoOLXl.js +0 -15
- package/dist/memory-core-host-engine-qmd-0JuUCKCK.js +0 -2
- package/dist/memory-core-host-engine-storage-MCFGjDwW.js +0 -2
- package/dist/memory-core-host-runtime-cli-fVGH65E8.js +0 -10
- package/dist/memory-core-host-runtime-core-JtXIAdlM.js +0 -12
- package/dist/memory-core-host-runtime-files-BGw_ypoN.js +0 -4
- package/dist/memory-embedding-provider-runtime-3UBzs4sx.js +0 -36
- package/dist/memory-host-core-Y_O5V-mu.js +0 -78
- package/dist/memory-host-search.runtime-B4TzyvmR.js +0 -2
- package/dist/memory-runtime-9kEPAeKV.js +0 -2
- package/dist/memory-runtime-BU4t85uu.js +0 -57
- package/dist/memory-search-CVX--mSz.js +0 -235
- package/dist/message-BVXoNpWP.js +0 -284
- package/dist/message-HaiKqj0A.js +0 -2
- package/dist/message-action-runner-Chwzn02r.js +0 -2
- package/dist/message-action-runner-tEEliptt.js +0 -1922
- package/dist/message-handler-CHDS_NF-.js +0 -1806
- package/dist/metadata-registry-loader-Croa1pgR.js +0 -22
- package/dist/metadata-registry-loader-w0p86vis.js +0 -2
- package/dist/migrate-CPCZJ4H5.js +0 -2
- package/dist/migrate-CUj6m6Cx.js +0 -458
- package/dist/migration-provider-runtime-4r4WGtf2.js +0 -2
- package/dist/migration-provider-runtime-TxrH_mM7.js +0 -68
- package/dist/minimax-web-search-provider.runtime-Dr2GJiWj.js +0 -148
- package/dist/model-BQSouNOa.js +0 -2
- package/dist/model-CAk0bcuO.js +0 -1302
- package/dist/model-auth-BF7w9Fiv.js +0 -705
- package/dist/model-auth-label-r729wcPk.js +0 -67
- package/dist/model-auth-us8b_D5d.js +0 -6
- package/dist/model-catalog-BGykBGxx.js +0 -434
- package/dist/model-catalog-BVXrqFbI.js +0 -3
- package/dist/model-catalog-visibility-Bsup46vy.js +0 -76
- package/dist/model-config.helpers-wzD1EEfE.js +0 -95
- package/dist/model-context-tokens-DrIU9eJc.js +0 -572
- package/dist/model-fallback-GySPjr3J.js +0 -1288
- package/dist/model-fallback-auth.runtime-Dg_Jmguu.js +0 -5
- package/dist/model-picker-BI6jXOjt.js +0 -3
- package/dist/model-picker-DYyJHhfH.js +0 -1135
- package/dist/model-picker-visibility-D_IMZfxd.js +0 -22
- package/dist/model-picker.runtime-B70kQMyc.js +0 -48
- package/dist/model-pricing-cache-CSpUDzSt.js +0 -856
- package/dist/model-pricing-cache-dkPwTUVJ.js +0 -3
- package/dist/model-pricing-cache-state-C6shoEWy.js +0 -83
- package/dist/model-provider-auth-BfZHbTaj.js +0 -2
- package/dist/model-provider-auth-CPCBWvqL.js +0 -375
- package/dist/model-runtime-aliases-DUzusc9_.js +0 -133
- package/dist/model-selection-8UzO5mgF.js +0 -254
- package/dist/model-selection-Cb7azWw1.js +0 -7
- package/dist/model-selection-jDYEo0WI.js +0 -352
- package/dist/model-selection.runtime-D_yHZLbs.js +0 -7
- package/dist/models-BxA2IU3W.js +0 -57
- package/dist/models-auth-status-yG7yyRcv.js +0 -280
- package/dist/models-cli-DUt4uiMH.js +0 -257
- package/dist/models-config-B5bkuh6A.js +0 -1189
- package/dist/models-config-Xj8vG_x2.js +0 -2
- package/dist/models-config.providers.secrets-DNBB440Z.js +0 -2
- package/dist/models-config.providers.secrets-DNIQlBSE.js +0 -382
- package/dist/models-http-DMILRsry.js +0 -88
- package/dist/monitor-2_c2Ttjf.js +0 -1024
- package/dist/monitor-7tD_FE_5.js +0 -60
- package/dist/monitor.account-D0F9tnWD.js +0 -5382
- package/dist/music-generation-provider-3ykPaUwR.js +0 -308
- package/dist/native-hook-relay-BJKHIhWd.js +0 -1378
- package/dist/native-hook-relay-V8Kappw1.js +0 -19
- package/dist/node-cli-BLVyQ93e.js +0 -2806
- package/dist/node-command-policy-B0ezpI_O.js +0 -295
- package/dist/nodes-DnWH_15m.js +0 -3
- package/dist/nodes-RkB4ZmP6.js +0 -1483
- package/dist/nodes-cli-upwPs91b.js +0 -960
- package/dist/nodes-pending--sojaxpI.js +0 -211
- package/dist/nodes-utils-Yks_uDZK.js +0 -85
- package/dist/oauth-CQN2efEy.js +0 -207
- package/dist/oauth-DApi3OI9.js +0 -746
- package/dist/oauth-DkUWBub2.js +0 -852
- package/dist/onboard-CiQSBSrz.js +0 -768
- package/dist/onboard-channels-DaWYXiLv.js +0 -1534
- package/dist/onboard-channels-DnwM2_IL.js +0 -2
- package/dist/onboard-custom-BQPckD0V.js +0 -3
- package/dist/onboard-custom-config-BmbThk2-.js +0 -422
- package/dist/onboard-custom-xInFj1Rs.js +0 -280
- package/dist/onboard-search-DSfmthe5.js +0 -412
- package/dist/openai-compat-errors-VR4SN1MV.js +0 -136
- package/dist/openai-http-DV95ynPi.js +0 -836
- package/dist/openai-transport-stream-BwpzqR-b.js +0 -3427
- package/dist/openresponses-http-DPchx8IC.js +0 -1175
- package/dist/operations-f9R8j-r9.js +0 -805
- package/dist/order-BQx8mNGZ.js +0 -218
- package/dist/outbound-attachment-C4yojK6p.js +0 -19
- package/dist/param-readers-BIXyd5la.js +0 -2
- package/dist/payloads-DrY1bKyF.js +0 -256
- package/dist/persistent-bindings.lifecycle-BiPN7luW.js +0 -85
- package/dist/persistent-bindings.lifecycle-X3wfan2Z.js +0 -2
- package/dist/plugin-enabled-CqsBObeO.js +0 -232
- package/dist/plugin-install-CfB1_kpX.js +0 -118
- package/dist/plugin-install-DzMraXHH.js +0 -2
- package/dist/plugin-install-config-policy-BD_elPNg.js +0 -169
- package/dist/plugin-registration-Dy58ncPf.js +0 -97
- package/dist/plugin-registry-BlmODeop.js +0 -3
- package/dist/plugin-registry-k5OK18l5.js +0 -2
- package/dist/plugin-runtime-B3t53CKr.js +0 -102
- package/dist/plugin-sdk/bundled-channel-config-schema-UtIBjviA.d.ts +0 -3169
- package/dist/plugin-service-sKF4gWFm.js +0 -1249
- package/dist/plugins-authoring-command-I72k2cuv.js +0 -304
- package/dist/plugins-cli-DMQRbPsU.js +0 -63
- package/dist/plugins-cli.runtime-CvDuKFJj.js +0 -339
- package/dist/plugins-command-helpers-C5WMM4bk.js +0 -164
- package/dist/plugins-command-helpers-DDt_pMQ4.js +0 -2
- package/dist/plugins-inspect-command-ka7Hpld3.js +0 -248
- package/dist/plugins-install-command-BHSgof-_.js +0 -2
- package/dist/plugins-install-command-t5caX9q_.js +0 -993
- package/dist/plugins-install-persist-Bah1m3x7.js +0 -252
- package/dist/plugins-list-command-BXLWwXHM.js +0 -184
- package/dist/plugins-uninstall-command-C_3m6CrW.js +0 -118
- package/dist/prepare.runtime-COZaHg5E.js +0 -798
- package/dist/presentation-card-CciJv4ru.js +0 -164
- package/dist/preview-warnings-L4VuEOyB.js +0 -618
- package/dist/profiles-CM2xoUYX.js +0 -194
- package/dist/program-B-4C7bC-.js +0 -131
- package/dist/provider-adapters-Eh8mS2Fd.js +0 -104
- package/dist/provider-api-key-auth-DTh2cbmS.js +0 -117
- package/dist/provider-api-key-auth.runtime-DrTYYfxK.js +0 -14
- package/dist/provider-auth-Bnaijzmv.js +0 -281
- package/dist/provider-auth-api-key-CNP8o5E7.js +0 -5
- package/dist/provider-auth-choice-Devw4sQf.js +0 -311
- package/dist/provider-auth-choice-helpers-DmVudRp6.js +0 -210
- package/dist/provider-auth-choice.runtime-C337IQ3W.js +0 -2
- package/dist/provider-auth-choice.runtime-DqGYalFo.js +0 -18
- package/dist/provider-auth-guidance-Bk4WV6Lg.js +0 -2
- package/dist/provider-auth-guidance-C7NCKuKn.js +0 -34
- package/dist/provider-auth-helpers-r7mC8I5l.js +0 -177
- package/dist/provider-auth-login.runtime-BFJgAAS6.js +0 -156
- package/dist/provider-auth-runtime-BiLPGiMW.js +0 -186
- package/dist/provider-discovery-uxRmAIf_.js +0 -95
- package/dist/provider-discovery.runtime-mwbSivDS.js +0 -290
- package/dist/provider-dispatcher-CtKWj3r-.js +0 -22
- package/dist/provider-entry-DjACqdrB.js +0 -134
- package/dist/provider-hook-runtime-CpJsM7Dk.js +0 -255
- package/dist/provider-openai-codex-oauth-DWGmVUYg.js +0 -2
- package/dist/provider-openai-codex-oauth-ctxd00JW.js +0 -44
- package/dist/provider-registration-l8EX4voM.js +0 -235
- package/dist/provider-registry-BgIQXJle.js +0 -31
- package/dist/provider-registry-CVuzobHN.js +0 -36
- package/dist/provider-registry-DmdDbSQs.js +0 -61
- package/dist/provider-registry-LqtLqheu.js +0 -61
- package/dist/provider-registry-pTYVjODc.js +0 -61
- package/dist/provider-runtime-BQZSuC9l.js +0 -3
- package/dist/provider-runtime-D9Q-7VuO.js +0 -386
- package/dist/provider-runtime.runtime-C6YZ8YI0.js +0 -26
- package/dist/provider-self-hosted-setup-BIAD2ISe.js +0 -373
- package/dist/provider-stream-DScdaoRo.js +0 -313
- package/dist/provider-stream-PE0IxmpZ.js +0 -1084
- package/dist/provider-stream-family-S2fhlydZ.js +0 -2
- package/dist/provider-usage-DVKHMF6l.js +0 -4
- package/dist/provider-usage-EEjx1av0.js +0 -71
- package/dist/provider-usage.load-Cu11xbrw.js +0 -357
- package/dist/provider-web-search-Dbk7MO-1.js +0 -58
- package/dist/provider-wizard-DS2Xb2eu.js +0 -125
- package/dist/providers.runtime-BPhGcupv.js +0 -240
- package/dist/providers.runtime-DoylK-ht.js +0 -2
- package/dist/proxy-BxacG0p3.js +0 -662
- package/dist/public-artifacts-Dq3y7bBv.js +0 -7
- package/dist/pw-ai-DlSSqerW.js +0 -3064
- package/dist/qmd-manager-B_SG-ejE.js +0 -2040
- package/dist/qr-cli-CT-sE_j9.js +0 -2
- package/dist/qr-cli-DPlDCXJQ.js +0 -371
- package/dist/qr-image--VmmvuDB.js +0 -2
- package/dist/queue-Be2Y7PcO.js +0 -923
- package/dist/read-file-hhemkDfq.js +0 -183
- package/dist/register-service-commands-CeVpCQU3.js +0 -77
- package/dist/register.agent-JLsb-giw.js +0 -152
- package/dist/register.configure-CP0Q-ost.js +0 -16
- package/dist/register.crestodian-CBXyXEix.js +0 -24
- package/dist/register.maintenance-DGIPQ2Vo.js +0 -85
- package/dist/register.message-BBQwz0Ld.js +0 -404
- package/dist/register.migrate-CkgNlvLD.js +0 -106
- package/dist/register.onboard-CS9gRK0c.js +0 -115
- package/dist/register.setup-DhqDOer9.js +0 -40
- package/dist/register.status-health-sessions-CiwQN_lw.js +0 -293
- package/dist/register.subclis-86Md7P0P.js +0 -3
- package/dist/register.subclis-CTVI8zvZ.js +0 -31
- package/dist/register.subclis-core-Cy4AnRCu.js +0 -273
- package/dist/rem-harness-vSsq3HiK.js +0 -649
- package/dist/repair-sequencing-SHADYdcA.js +0 -652
- package/dist/reply-media-paths.runtime-Bf5nxPuP.js +0 -154
- package/dist/reply-media-paths.runtime-sLsMpKGO.js +0 -2
- package/dist/reply-payloads-CJ3w8rSA.js +0 -79
- package/dist/reply-payloads-dedupe-DDFXWCVR.js +0 -176
- package/dist/reply-payloads-dedupe.runtime-DbXPzKmG.js +0 -2
- package/dist/reply-timing-tracker-DjVIBsVb.js +0 -205
- package/dist/reply-turn-admission-nEW5QbY5.js +0 -2056
- package/dist/reply.runtime-B4Dgs3Hg.js +0 -2
- package/dist/reset-preserved-selection-CVD1yeVC.js +0 -45
- package/dist/resolve-DidlinMh.js +0 -106
- package/dist/restart-DzTrO95c.js +0 -121
- package/dist/result-fallback-classifier-BqsFUDvP.js +0 -98
- package/dist/root-help-QGs0dCCN.js +0 -43
- package/dist/route-B3R-uzFG.js +0 -475
- package/dist/route-reply-CdfhgIoY.js +0 -174
- package/dist/route-reply.runtime-DwuU2WjH.js +0 -2
- package/dist/routes-ChXmJocl.js +0 -3701
- package/dist/routes-D-ZF4AdA.js +0 -2
- package/dist/run-ClmVDTET.js +0 -1162
- package/dist/run-auth-profile.runtime-CTxrwz0y.js +0 -2
- package/dist/run-command-CqZJQ0Im.js +0 -2
- package/dist/run-command-GClW75NL.js +0 -23
- package/dist/run-context-BOdGeRg5.js +0 -66
- package/dist/run-context.runtime-CwuKVYPj.js +0 -2
- package/dist/run-delivery.runtime-BQ39dm34.js +0 -762
- package/dist/run-embedded.runtime-e1K4Bt1_.js +0 -4
- package/dist/run-execution-cli.runtime-Cjrgt4cV.js +0 -4
- package/dist/run-executor.runtime-C2JE6JGb.js +0 -330
- package/dist/run-model-catalog.runtime-DkrLKopr.js +0 -2
- package/dist/run-session-state-C5YdQs7o.js +0 -159
- package/dist/run-subagent-registry.runtime-Dl_lXi6y.js +0 -2
- package/dist/runner-CNGHdaIg.js +0 -704
- package/dist/runner.entries-dckPkeld.js +0 -1485
- package/dist/runtime-9LxcVCyw.js +0 -615
- package/dist/runtime-BCOtBS5G.js +0 -3
- package/dist/runtime-C-pgjoJr.js +0 -210
- package/dist/runtime-CyF0vJXG.js +0 -10
- package/dist/runtime-D-7lMvGV.js +0 -2
- package/dist/runtime-D17OmF9G.js +0 -224
- package/dist/runtime-D6SweufG.js +0 -245
- package/dist/runtime-DVAM7AFd.js +0 -2
- package/dist/runtime-DX2ClrP-.js +0 -436
- package/dist/runtime-FOOWuiYX.js +0 -300
- package/dist/runtime-api-B0F0JsV1.js +0 -12
- package/dist/runtime-cREKSBYC.js +0 -2
- package/dist/runtime-channel-BmD4hoCR.js +0 -148
- package/dist/runtime-channel-BsebQSPL.js +0 -2
- package/dist/runtime-config-collectors-BjYeQ0Tk.js +0 -525
- package/dist/runtime-embedded-agent.runtime-A4r23Bn8.js +0 -2
- package/dist/runtime-internal-DkV-EMTK.js +0 -2
- package/dist/runtime-llm.runtime-BQKNnuRc.js +0 -307
- package/dist/runtime-model-auth.runtime-BbGqHVM5.js +0 -2
- package/dist/runtime-model-auth.runtime-rtJH4LBB.js +0 -46
- package/dist/runtime-options-B0EGb1Wq.js +0 -275
- package/dist/runtime-plugin-Bdqm44bH.js +0 -92
- package/dist/runtime-plugins-rZk1eAK_.js +0 -32
- package/dist/runtime-plugins.runtime-DApiYzny.js +0 -2
- package/dist/runtime-prepare.runtime-DWxvnbyY.js +0 -81
- package/dist/runtime-provider-B0slPjtk.js +0 -2
- package/dist/runtime-provider-DLgupOKt.js +0 -24
- package/dist/runtime-registry-loader-Cf2HuMjd.js +0 -2
- package/dist/runtime-registry-loader-DLzDrA7e.js +0 -117
- package/dist/runtime-shared-Bg-OiD4u.js +0 -365
- package/dist/runtime-web-channel-plugin-DrMjRaqi.js +0 -204
- package/dist/scan-DA7Oqxuv.js +0 -573
- package/dist/sdk-security-runtime-WjOaCbga.js +0 -86
- package/dist/sdk-setup-tools-DaYT6_jD.js +0 -8
- package/dist/secrets-cli-fJQ0geWO.js +0 -150
- package/dist/security-cli-CJMwGp8U.js +0 -520
- package/dist/selection-BNwLQzqJ.js +0 -3
- package/dist/selection-Cj-l80pO.js +0 -18365
- package/dist/send-DstYcrDW.js +0 -711
- package/dist/send-aTxtLkJm.js +0 -178
- package/dist/send-media-OG5Gd31l.js +0 -2072
- package/dist/send-qwDMMnM6.js +0 -1222
- package/dist/send-result-BWRKr16H.js +0 -141
- package/dist/server-CMtA1S09.js +0 -24
- package/dist/server-DIRaYiiH.js +0 -72
- package/dist/server-aux-handlers-BRO-9-Jf.js +0 -1347
- package/dist/server-chat-0J_ke0ph.js +0 -827
- package/dist/server-context-DWOSX34k.js +0 -2
- package/dist/server-context-R7MFLFdI.js +0 -955
- package/dist/server-cron-2FuFg2j8.js +0 -2
- package/dist/server-cron-ChPAVQtg.js +0 -3173
- package/dist/server-maintenance-ZvS7Id6T.js +0 -152
- package/dist/server-methods-DSbhPK3k.js +0 -497
- package/dist/server-middleware-CYxFU-e5.js +0 -122
- package/dist/server-model-catalog-B22UhmRr.js +0 -73
- package/dist/server-model-catalog-BJIHPP3P.js +0 -2
- package/dist/server-node-events-tNWJnXQM.js +0 -597
- package/dist/server-plugin-bootstrap-Ccu97zi8.js +0 -71
- package/dist/server-plugins-ByXwKPnj.js +0 -435
- package/dist/server-reload-handlers-ConGiT9Q.js +0 -719
- package/dist/server-restart-sentinel-mPHo61LL.js +0 -700
- package/dist/server-runtime-services-BR1icaUW.js +0 -3
- package/dist/server-runtime-services-Bx8n34dj.js +0 -147
- package/dist/server-runtime-subscriptions-CZklTkRG.js +0 -67
- package/dist/server-session-events-DxdiZYM2.js +0 -244
- package/dist/server-session-key-CYvLslFO.js +0 -75
- package/dist/server-session-key-D9GQut81.js +0 -2
- package/dist/server-startup-config-Byb0vR8j.js +0 -305
- package/dist/server-startup-early-a65fHTQS.js +0 -87
- package/dist/server-startup-memory-ClwzC9jX.js +0 -72
- package/dist/server-startup-plugins-CaBj0Nt2.js +0 -127
- package/dist/server-startup-post-attach-B7TcxkmO.js +0 -793
- package/dist/server-ws-runtime-Cxk_CqMr.js +0 -374
- package/dist/server.impl-CQ6dnx43.js +0 -2622
- package/dist/session-cost-usage-GsYDNvka.js +0 -1600
- package/dist/session-kill-http-CKkxZhhd.js +0 -121
- package/dist/session-log-runtime-Bwc2Oijk.js +0 -1258
- package/dist/session-override-CWbKiXiC.js +0 -134
- package/dist/session-reset-model.runtime-CDFMjwWA.js +0 -144
- package/dist/session-reset-service-SE0aK4cw.js +0 -651
- package/dist/session-status.runtime-Df89I7Fk.js +0 -2
- package/dist/session-store-RkvjJPMQ.js +0 -273
- package/dist/session-store.runtime-C7P5asx7.js +0 -4
- package/dist/session-subagent-reactivation.runtime-BhGUZG1Z.js +0 -2
- package/dist/session-tab-registry-9rSuQ0Yz.js +0 -551
- package/dist/session-utils-De8TIM0h.js +0 -1508
- package/dist/sessions-6b9a00Tl.js +0 -1917
- package/dist/sessions-CEPHczjC.js +0 -316
- package/dist/sessions-CEojHc8b.js +0 -12736
- package/dist/sessions-cleanup-BkG7_sq9.js +0 -165
- package/dist/sessions-history-http-BjJEfjJa.js +0 -432
- package/dist/sessions-patch-PwG5sknc.js +0 -401
- package/dist/sessions-resolve-CSIrd_fi.js +0 -180
- package/dist/sessions-table-8CbU7jXa.js +0 -161
- package/dist/sessions.runtime-BYHMD0M7.js +0 -2
- package/dist/set-BJDpe28W.js +0 -31
- package/dist/set-image-CwTFx7PX.js +0 -17
- package/dist/setup-B6LmeIms.js +0 -614
- package/dist/setup-B_zxHfYu.js +0 -2
- package/dist/setup-onboard-configure-help-fast-path-Bck3SKEH.js +0 -64
- package/dist/setup.finalize-CmLYX-Rf.js +0 -586
- package/dist/setup.gateway-config-H_89Msro.js +0 -281
- package/dist/setup.migration-import-DVzyUjX6.js +0 -2
- package/dist/setup.migration-import-DmJpqoqf.js +0 -200
- package/dist/setup.post-install-migration-WPFWKXXg.js +0 -128
- package/dist/shared-CUhu8NTs.js +0 -5
- package/dist/shared-D-BN2JhY.js +0 -71
- package/dist/shared-ES8nDIcn.js +0 -212
- package/dist/simple-completion-runtime-BGZkWvKr.js +0 -206
- package/dist/simple-completion-runtime-CM_IISYW.js +0 -2
- package/dist/simple-completion-transport-Bo0u9dhp.js +0 -83
- package/dist/snapshot-urls-C1KjRQD5.js +0 -317
- package/dist/speech-core-Bas7e4h0.js +0 -119
- package/dist/speech-provider-BonJQv5S.js +0 -227
- package/dist/speech-provider-CwdKQmDv.js +0 -171
- package/dist/speech-provider-DcQRnYhZ.js +0 -233
- package/dist/stale-oauth-profile-shadows-C3aeAWfv.js +0 -186
- package/dist/stale-oauth-profile-shadows-m5rb8dPc.js +0 -2
- package/dist/standalone-runtime-registry-loader-B9n2LBKC.js +0 -59
- package/dist/startup-context-DY7C4riM.js +0 -314
- package/dist/status-6EPKat7p.js +0 -73
- package/dist/status-C6Fa7Dsf.js +0 -2
- package/dist/status-CNnxDQlM.js +0 -4
- package/dist/status-D2Scvbc0.js +0 -3
- package/dist/status-Ducanro3.js +0 -2
- package/dist/status-_XX_6QVA.js +0 -466
- package/dist/status-all-BP1u6vou.js +0 -573
- package/dist/status-json-DPlOJ_ue.js +0 -15
- package/dist/status-json-command-BT7EwVKj.js +0 -84
- package/dist/status-message-Dzr9-MX-.js +0 -495
- package/dist/status-message.runtime-DFezIt1d.js +0 -6
- package/dist/status-prBlcUV5.js +0 -249
- package/dist/status-queue.runtime-C1bmg2rl.js +0 -2
- package/dist/status-runtime-shared-RjKIPEQ0.js +0 -289
- package/dist/status-subagents.runtime-tsCCe4Ny.js +0 -32
- package/dist/status-text-Bkeyg8Bf.js +0 -301
- package/dist/status.command-D06_4ATq.js +0 -425
- package/dist/status.command-dDEZM84a.js +0 -2
- package/dist/status.command.text-runtime-WH9tP7yg.js +0 -15
- package/dist/status.runtime-B76GaBIR.js +0 -2
- package/dist/status.scan-Bc6clx0F.js +0 -72
- package/dist/status.scan-overview-v_-AaFhC.js +0 -460
- package/dist/status.scan.deps.runtime-BkH1HAb4.js +0 -19
- package/dist/status.scan.fast-json-CrlfKKI3.js +0 -2
- package/dist/status.scan.fast-json-D8v6zfP8.js +0 -163
- package/dist/status.summary-DBhvgOPr.js +0 -276
- package/dist/status.summary-hQV0PKFO.js +0 -2
- package/dist/store-BClomp_4.js +0 -3
- package/dist/store-BHqDPtNw.js +0 -2302
- package/dist/stored-model-override-vm4CtQWX.js +0 -79
- package/dist/subagent-announce-D244Q4w2.js +0 -353
- package/dist/subagent-announce-delivery-qKZfF7Bs.js +0 -1369
- package/dist/subagent-control-c87mVGUE.js +0 -492
- package/dist/subagent-control.runtime-DfQtIsDb.js +0 -3
- package/dist/subagent-hooks-B_UW5Len.js +0 -2
- package/dist/subagent-hooks-CYvFWt_r.js +0 -230
- package/dist/subagent-hooks-api-DZgaJf19.js +0 -23
- package/dist/subagent-registry-BlcoCggo.js +0 -2627
- package/dist/subagent-registry-CuObhNeO.js +0 -3
- package/dist/subagent-session-cleanup-hFF8Z34s.js +0 -390
- package/dist/system-CN_Knfqq.js +0 -111
- package/dist/system-prompt-config-BmZlhYK9.js +0 -918
- package/dist/talk-DrjGczYs.js +0 -2454
- package/dist/target-id-BNpbyWkq.js +0 -107
- package/dist/targets-CQcGo6u4.js +0 -267
- package/dist/targets.runtime-DwcxNI-x.js +0 -2
- package/dist/task-executor-CZg-qt4u.js +0 -349
- package/dist/task-owner-access-Duem5jjb.js +0 -74
- package/dist/task-registry-Cw8pc3Ry.js +0 -2362
- package/dist/task-registry-delivery-runtime-HaiKqj0A.js +0 -2
- package/dist/task-registry.maintenance-BLv3wpK9.js +0 -764
- package/dist/task-registry.maintenance-CvlIcxE-.js +0 -2
- package/dist/task-status-access-C5nDJSI4.js +0 -18
- package/dist/tasks-D3CfEAlq.js +0 -548
- package/dist/tasks-WKnE5fvr.js +0 -153
- package/dist/tasks-audit-system-okJjcOjU.js +0 -210
- package/dist/tasks-json-C-iUgWNu.js +0 -73
- package/dist/tavily-web-search-provider.runtime-jpagljrA.js +0 -112
- package/dist/text-report-BTsF3Pv3.js +0 -695
- package/dist/text-transforms.runtime-CgH_pbcQ.js +0 -113
- package/dist/thread-bindings-BWxpUE9U.js +0 -228
- package/dist/tool-DhJbbm91.js +0 -143
- package/dist/tool-dispatch-CpFUfblu.js +0 -155
- package/dist/tool-images-C-tFlXjE.js +0 -247
- package/dist/tool-plugin-3NejWxZW.js +0 -93
- package/dist/tool-resolution-oW8Cbamd.js +0 -153
- package/dist/tool-result-truncation-CWFGf7Eu.js +0 -498
- package/dist/tool-schema-CMtc7PdZ.js +0 -40
- package/dist/tool-schema-projection-DJRPEEvY.js +0 -215
- package/dist/tool-split-E4RdK5jS.js +0 -323
- package/dist/tools-BAl3JiNw.js +0 -901
- package/dist/tools-DC8tCPxR.js +0 -579
- package/dist/tools-catalog-Dzv9zaBD.js +0 -156
- package/dist/tools-effective-CGvzyIL2.js +0 -442
- package/dist/tools-effective-inventory-GI5N5Q9v.js +0 -379
- package/dist/tools-invoke-CU2U0hNH.js +0 -51
- package/dist/tools-invoke-http-8s3FiUy4.js +0 -68
- package/dist/tools-invoke-shared-DIETrEY7.js +0 -200
- package/dist/tools.runtime-Bnm8CI7w.js +0 -5
- package/dist/transcript-rewrite-Buv2ITw4.js +0 -688
- package/dist/transcripts-tool-BCFlLCFd.js +0 -2
- package/dist/transcripts-tool-CWgNd0Uw.js +0 -656
- package/dist/tts-Aguo4zC5.js +0 -3
- package/dist/tts-Bf77cURn.js +0 -2
- package/dist/tts-DnADOKOP.js +0 -194
- package/dist/tts-runtime-MBSH-nOM.js +0 -1337
- package/dist/tts.runtime-B-NR9osE.js +0 -2
- package/dist/tts.runtime-Bo-QxKgx.js +0 -3
- package/dist/tui-B0CdNmCz.js +0 -4860
- package/dist/tui-ByRcXM3Z.js +0 -2
- package/dist/tui-backend-C52BUoZI.js +0 -256
- package/dist/tui-cli-BQHpZ4n0.js +0 -40
- package/dist/typing-policy-XspVOezC.js +0 -199
- package/dist/usage-BOYwzimH.js +0 -1113
- package/dist/usage-BSmLrVWB.js +0 -623
- package/dist/usage-format-CfzICmvv.js +0 -2
- package/dist/usage-format-DPJKCPic.js +0 -394
- package/dist/video-generation-provider-CdCTztQ7.js +0 -77
- package/dist/video-generation-provider-MUUshUzz.js +0 -325
- package/dist/video-generation-provider-XmzzTa6e.js +0 -297
- package/dist/video-generation-provider-weiQUJE5.js +0 -64
- package/dist/web-fetch-providers.runtime-tD9zqAS2.js +0 -41
- package/dist/web-guarded-fetch-CyhQZ1yD.js +0 -2
- package/dist/web-guarded-fetch-DIXHI-yJ.js +0 -58
- package/dist/web-media-BPnTMYE5.js +0 -4
- package/dist/web-media-DV_tCQiQ.js +0 -2
- package/dist/web-media-DYydVGCK.js +0 -651
- package/dist/web-provider-runtime-shared-h3M6Bqyg.js +0 -142
- package/dist/web-search-provider-common-CEYWuDcp.js +0 -252
- package/dist/web-search-providers.runtime-YrayP296.js +0 -41
- package/dist/zod-schema.core-BGLctDlK.d.ts +0 -166
- /package/dist/{acp-runtime-backend-CHZtaM6t.js → acp-runtime-backend-B83JR5Zf.js} +0 -0
- /package/dist/{agent-turn-attachments-BYCRK86s.js → agent-turn-attachments-D5uJijuK.js} +0 -0
- /package/dist/{auth-install-policy-t46tJ8jV.js → auth-install-policy-BIpdwrZ9.js} +0 -0
- /package/dist/{cli-backends-BHXnrVN_.js → cli-backends-79CCRQ2a.js} +0 -0
- /package/dist/{command-secret-targets-DZ0J2Wm3.js → command-secret-targets-BOJlcBil.js} +0 -0
- /package/dist/{commands-DWp49Exc.js → commands-Dw9hwmVt.js} +0 -0
- /package/dist/{commands-reset-hooks-MMq2dvff.js → commands-reset-hooks-epArfNOY.js} +0 -0
- /package/dist/{delegate-Dkj_5OvH.js → delegate-Bw8NQXVr.js} +0 -0
- /package/dist/{jobs-BGELIHcx.js → jobs-BIOTaq7l.js} +0 -0
- /package/dist/{kimi-web-search-provider-4PlMYsPx.js → kimi-web-search-provider-Bzg_DiXO.js} +0 -0
- /package/dist/{memory-host-search-Ds9GiNpf.js → memory-host-search-Dph0Mq-v.js} +0 -0
- /package/dist/{minimax-web-search-provider-d5gTJUNg.js → minimax-web-search-provider-CETxDkkI.js} +0 -0
- /package/dist/{model-selection-cli-CO6BHPiL.js → model-selection-cli-DizUvxeY.js} +0 -0
- /package/dist/{provider-auth-choice-preference-f7Us6TQL.js → provider-auth-choice-preference-uJn1811S.js} +0 -0
- /package/dist/{runtime-wfO9bV5y.js → runtime-BEVbpIgZ.js} +0 -0
- /package/dist/{runtime-web-tools-B6vr1LZs.js → runtime-web-tools-Bf0aEe-F.js} +0 -0
- /package/dist/{runtime-web-tools-fallback.runtime-Crs7KfH5.js → runtime-web-tools-fallback.runtime-DU6rTj6l.js} +0 -0
- /package/dist/{session-subagent-reactivation-H5Rdwkyy.js → session-subagent-reactivation-Bb5SCi9J.js} +0 -0
- /package/dist/{tavily-web-search-provider-DbdIzpMv.js → tavily-web-search-provider-CIEhV60D.js} +0 -0
|
@@ -0,0 +1,2072 @@
|
|
|
1
|
+
import { n as resolvePreferredFengMingTmpDir } from "./tmp-fengming-dir-0p6iJKE-.js";
|
|
2
|
+
import { n as normalizeAccountId } from "./account-id-B0YIFDpA.js";
|
|
3
|
+
import { t as getGlobalHookRunner, u as fireAndForgetHook } from "./hook-runner-global-lWQvOg8l.js";
|
|
4
|
+
import { d as toPluginMessageSentEvent, l as toPluginMessageContext, t as buildCanonicalSentMessageHookContext } from "./message-hook-mappers-Lw-1gD5K.js";
|
|
5
|
+
import "./infra-runtime-BFrpRc_V.js";
|
|
6
|
+
import "./plugin-runtime-B3XMLJka.js";
|
|
7
|
+
import "./hook-runtime-Djc3mfS0.js";
|
|
8
|
+
import { fileURLToPath } from "node:url";
|
|
9
|
+
import fs from "node:fs";
|
|
10
|
+
import path from "node:path";
|
|
11
|
+
import fs$1 from "node:fs/promises";
|
|
12
|
+
import os from "node:os";
|
|
13
|
+
import crypto, { createCipheriv, createDecipheriv } from "node:crypto";
|
|
14
|
+
//#region extensions/weixin/src/storage/state-dir.ts
|
|
15
|
+
/** Resolve the OpenClaw state directory (mirrors core logic in src/infra). */
|
|
16
|
+
function resolveStateDir() {
|
|
17
|
+
return process.env.OPENCLAW_STATE_DIR?.trim() || process.env.CLAWDBOT_STATE_DIR?.trim() || path.join(os.homedir(), ".openclaw");
|
|
18
|
+
}
|
|
19
|
+
//#endregion
|
|
20
|
+
//#region extensions/weixin/src/util/logger.ts
|
|
21
|
+
/**
|
|
22
|
+
* Plugin logger — writes JSON lines to the main openclaw log file:
|
|
23
|
+
* <tmpDir>/openclaw-YYYY-MM-DD.log
|
|
24
|
+
* Same file and format used by all other channels.
|
|
25
|
+
*/
|
|
26
|
+
const MAIN_LOG_DIR = resolvePreferredFengMingTmpDir();
|
|
27
|
+
const SUBSYSTEM = "gateway/channels/openclaw-weixin";
|
|
28
|
+
const RUNTIME = "node";
|
|
29
|
+
const RUNTIME_VERSION = process.versions.node;
|
|
30
|
+
const HOSTNAME = os.hostname() || "unknown";
|
|
31
|
+
const PARENT_NAMES = ["openclaw"];
|
|
32
|
+
/** tslog-compatible level IDs (higher = more severe). */
|
|
33
|
+
const LEVEL_IDS = {
|
|
34
|
+
TRACE: 1,
|
|
35
|
+
DEBUG: 2,
|
|
36
|
+
INFO: 3,
|
|
37
|
+
WARN: 4,
|
|
38
|
+
ERROR: 5,
|
|
39
|
+
FATAL: 6
|
|
40
|
+
};
|
|
41
|
+
const DEFAULT_LOG_LEVEL = "INFO";
|
|
42
|
+
function resolveMinLevel() {
|
|
43
|
+
const env = process.env.OPENCLAW_LOG_LEVEL?.toUpperCase();
|
|
44
|
+
if (env && env in LEVEL_IDS) return LEVEL_IDS[env];
|
|
45
|
+
return LEVEL_IDS[DEFAULT_LOG_LEVEL];
|
|
46
|
+
}
|
|
47
|
+
let minLevelId = resolveMinLevel();
|
|
48
|
+
/** Shift a Date into local time so toISOString() renders local clock digits. */
|
|
49
|
+
function toLocalISO(now) {
|
|
50
|
+
const offsetMs = -now.getTimezoneOffset() * 6e4;
|
|
51
|
+
const sign = offsetMs >= 0 ? "+" : "-";
|
|
52
|
+
const abs = Math.abs(now.getTimezoneOffset());
|
|
53
|
+
const offStr = `${sign}${String(Math.floor(abs / 60)).padStart(2, "0")}:${String(abs % 60).padStart(2, "0")}`;
|
|
54
|
+
return new Date(now.getTime() + offsetMs).toISOString().replace("Z", offStr);
|
|
55
|
+
}
|
|
56
|
+
function localDateKey(now) {
|
|
57
|
+
return toLocalISO(now).slice(0, 10);
|
|
58
|
+
}
|
|
59
|
+
function resolveMainLogPath() {
|
|
60
|
+
const dateKey = localDateKey(/* @__PURE__ */ new Date());
|
|
61
|
+
return path.join(MAIN_LOG_DIR, `openclaw-${dateKey}.log`);
|
|
62
|
+
}
|
|
63
|
+
let logDirEnsured = false;
|
|
64
|
+
function buildLoggerName(accountId) {
|
|
65
|
+
return accountId ? `${SUBSYSTEM}/${accountId}` : SUBSYSTEM;
|
|
66
|
+
}
|
|
67
|
+
function writeLog(level, message, accountId) {
|
|
68
|
+
if ((LEVEL_IDS[level] ?? LEVEL_IDS.INFO) < minLevelId) return;
|
|
69
|
+
const now = /* @__PURE__ */ new Date();
|
|
70
|
+
const loggerName = buildLoggerName(accountId);
|
|
71
|
+
const prefixedMessage = accountId ? `[${accountId}] ${message}` : message;
|
|
72
|
+
const entry = JSON.stringify({
|
|
73
|
+
"0": loggerName,
|
|
74
|
+
"1": prefixedMessage,
|
|
75
|
+
_meta: {
|
|
76
|
+
runtime: RUNTIME,
|
|
77
|
+
runtimeVersion: RUNTIME_VERSION,
|
|
78
|
+
hostname: HOSTNAME,
|
|
79
|
+
name: loggerName,
|
|
80
|
+
parentNames: PARENT_NAMES,
|
|
81
|
+
date: now.toISOString(),
|
|
82
|
+
logLevelId: LEVEL_IDS[level] ?? LEVEL_IDS.INFO,
|
|
83
|
+
logLevelName: level
|
|
84
|
+
},
|
|
85
|
+
time: toLocalISO(now)
|
|
86
|
+
});
|
|
87
|
+
try {
|
|
88
|
+
if (!logDirEnsured) {
|
|
89
|
+
fs.mkdirSync(MAIN_LOG_DIR, { recursive: true });
|
|
90
|
+
logDirEnsured = true;
|
|
91
|
+
}
|
|
92
|
+
fs.appendFileSync(resolveMainLogPath(), `${entry}\n`, "utf-8");
|
|
93
|
+
} catch {}
|
|
94
|
+
}
|
|
95
|
+
/** Creates a logger instance, optionally bound to a specific account. */
|
|
96
|
+
function createLogger(accountId) {
|
|
97
|
+
return {
|
|
98
|
+
info(message) {
|
|
99
|
+
writeLog("INFO", message, accountId);
|
|
100
|
+
},
|
|
101
|
+
debug(message) {
|
|
102
|
+
writeLog("DEBUG", message, accountId);
|
|
103
|
+
},
|
|
104
|
+
warn(message) {
|
|
105
|
+
writeLog("WARN", message, accountId);
|
|
106
|
+
},
|
|
107
|
+
error(message) {
|
|
108
|
+
writeLog("ERROR", message, accountId);
|
|
109
|
+
},
|
|
110
|
+
withAccount(id) {
|
|
111
|
+
return createLogger(id);
|
|
112
|
+
},
|
|
113
|
+
getLogFilePath() {
|
|
114
|
+
return resolveMainLogPath();
|
|
115
|
+
},
|
|
116
|
+
close() {}
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
const logger = createLogger();
|
|
120
|
+
//#endregion
|
|
121
|
+
//#region extensions/weixin/src/auth/pairing.ts
|
|
122
|
+
/**
|
|
123
|
+
* Resolve the framework credentials directory (mirrors core resolveOAuthDir).
|
|
124
|
+
* Path: $OPENCLAW_OAUTH_DIR || $OPENCLAW_STATE_DIR/credentials || ~/.openclaw/credentials
|
|
125
|
+
*/
|
|
126
|
+
function resolveCredentialsDir() {
|
|
127
|
+
const override = process.env.OPENCLAW_OAUTH_DIR?.trim();
|
|
128
|
+
if (override) return override;
|
|
129
|
+
return path.join(resolveStateDir(), "credentials");
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Sanitize a channel/account key for safe use in filenames (mirrors core safeChannelKey).
|
|
133
|
+
*/
|
|
134
|
+
function safeKey(raw) {
|
|
135
|
+
const trimmed = raw.trim().toLowerCase();
|
|
136
|
+
if (!trimmed) throw new Error("invalid key for allowFrom path");
|
|
137
|
+
const safe = trimmed.replace(/[\\/:*?"<>|]/g, "_").replace(/\.\./g, "_");
|
|
138
|
+
if (!safe || safe === "_") throw new Error("invalid key for allowFrom path");
|
|
139
|
+
return safe;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Resolve the framework allowFrom file path for a given account.
|
|
143
|
+
* Mirrors: `resolveAllowFromPath(channel, env, accountId)` from core.
|
|
144
|
+
* Path: `<credDir>/openclaw-weixin-<accountId>-allowFrom.json`
|
|
145
|
+
*/
|
|
146
|
+
function resolveFrameworkAllowFromPath(accountId) {
|
|
147
|
+
const base = safeKey("openclaw-weixin");
|
|
148
|
+
const safeAccount = safeKey(accountId);
|
|
149
|
+
return path.join(resolveCredentialsDir(), `${base}-${safeAccount}-allowFrom.json`);
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Read the framework allowFrom list for an account (user IDs authorized via pairing).
|
|
153
|
+
* Returns an empty array when the file is missing or unreadable.
|
|
154
|
+
*/
|
|
155
|
+
function readFrameworkAllowFromList(accountId) {
|
|
156
|
+
const filePath = resolveFrameworkAllowFromPath(accountId);
|
|
157
|
+
try {
|
|
158
|
+
if (!fs.existsSync(filePath)) return [];
|
|
159
|
+
const raw = fs.readFileSync(filePath, "utf-8");
|
|
160
|
+
const parsed = JSON.parse(raw);
|
|
161
|
+
if (Array.isArray(parsed.allowFrom)) return parsed.allowFrom.filter((id) => typeof id === "string" && id.trim() !== "");
|
|
162
|
+
} catch {}
|
|
163
|
+
return [];
|
|
164
|
+
}
|
|
165
|
+
//#endregion
|
|
166
|
+
//#region extensions/weixin/src/auth/accounts.ts
|
|
167
|
+
const DEFAULT_BASE_URL = "https://ilinkai.weixin.qq.com";
|
|
168
|
+
const CDN_BASE_URL = "https://novac2c.cdn.weixin.qq.com/c2c";
|
|
169
|
+
/**
|
|
170
|
+
* Pattern-based reverse of normalizeWeixinAccountId for known weixin ID suffixes.
|
|
171
|
+
* Used only as a compatibility fallback when loading accounts / sync bufs stored
|
|
172
|
+
* under the old raw ID.
|
|
173
|
+
* e.g. "b0f5860fdecb-im-bot" → "b0f5860fdecb@im.bot"
|
|
174
|
+
*/
|
|
175
|
+
function deriveRawAccountId(normalizedId) {
|
|
176
|
+
if (normalizedId.endsWith("-im-bot")) return `${normalizedId.slice(0, -7)}@im.bot`;
|
|
177
|
+
if (normalizedId.endsWith("-im-wechat")) return `${normalizedId.slice(0, -10)}@im.wechat`;
|
|
178
|
+
}
|
|
179
|
+
function resolveWeixinStateDir() {
|
|
180
|
+
return path.join(resolveStateDir(), "openclaw-weixin");
|
|
181
|
+
}
|
|
182
|
+
function resolveAccountIndexPath() {
|
|
183
|
+
return path.join(resolveWeixinStateDir(), "accounts.json");
|
|
184
|
+
}
|
|
185
|
+
/** Returns all accountIds registered via QR login. */
|
|
186
|
+
function listIndexedWeixinAccountIds() {
|
|
187
|
+
const filePath = resolveAccountIndexPath();
|
|
188
|
+
try {
|
|
189
|
+
if (!fs.existsSync(filePath)) return [];
|
|
190
|
+
const raw = fs.readFileSync(filePath, "utf-8");
|
|
191
|
+
const parsed = JSON.parse(raw);
|
|
192
|
+
if (!Array.isArray(parsed)) return [];
|
|
193
|
+
return parsed.filter((id) => typeof id === "string" && id.trim() !== "");
|
|
194
|
+
} catch {
|
|
195
|
+
return [];
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
/** Add accountId to the persistent index (no-op if already present). */
|
|
199
|
+
function registerWeixinAccountId(accountId) {
|
|
200
|
+
const dir = resolveWeixinStateDir();
|
|
201
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
202
|
+
const existing = listIndexedWeixinAccountIds();
|
|
203
|
+
if (existing.includes(accountId)) return;
|
|
204
|
+
const updated = [...existing, accountId];
|
|
205
|
+
fs.writeFileSync(resolveAccountIndexPath(), JSON.stringify(updated, null, 2), "utf-8");
|
|
206
|
+
}
|
|
207
|
+
/** Remove accountId from the persistent index. */
|
|
208
|
+
function unregisterWeixinAccountId(accountId) {
|
|
209
|
+
const existing = listIndexedWeixinAccountIds();
|
|
210
|
+
const updated = existing.filter((id) => id !== accountId);
|
|
211
|
+
if (updated.length !== existing.length) fs.writeFileSync(resolveAccountIndexPath(), JSON.stringify(updated, null, 2), "utf-8");
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Remove stale accounts that share the same userId as the newly-bound account.
|
|
215
|
+
* Called after a successful QR login to ensure only the latest account remains
|
|
216
|
+
* for a given WeChat user, preventing ambiguous contextToken matches.
|
|
217
|
+
*
|
|
218
|
+
* @param onClearContextTokens callback to clear context tokens for the removed account
|
|
219
|
+
*/
|
|
220
|
+
function clearStaleAccountsForUserId(currentAccountId, userId, onClearContextTokens) {
|
|
221
|
+
if (!userId) return;
|
|
222
|
+
const allIds = listIndexedWeixinAccountIds();
|
|
223
|
+
for (const id of allIds) {
|
|
224
|
+
if (id === currentAccountId) continue;
|
|
225
|
+
if (loadWeixinAccount(id)?.userId?.trim() === userId) {
|
|
226
|
+
logger.info(`clearStaleAccountsForUserId: removing stale account=${id} (same userId=${userId})`);
|
|
227
|
+
onClearContextTokens?.(id);
|
|
228
|
+
clearWeixinAccount(id);
|
|
229
|
+
unregisterWeixinAccountId(id);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
function resolveAccountsDir() {
|
|
234
|
+
return path.join(resolveWeixinStateDir(), "accounts");
|
|
235
|
+
}
|
|
236
|
+
function resolveAccountPath(accountId) {
|
|
237
|
+
return path.join(resolveAccountsDir(), `${accountId}.json`);
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Legacy single-file token: `credentials/openclaw-weixin/credentials.json` (pre per-account files).
|
|
241
|
+
*/
|
|
242
|
+
function loadLegacyToken() {
|
|
243
|
+
const legacyPath = path.join(resolveStateDir(), "credentials", "openclaw-weixin", "credentials.json");
|
|
244
|
+
try {
|
|
245
|
+
if (!fs.existsSync(legacyPath)) return void 0;
|
|
246
|
+
const raw = fs.readFileSync(legacyPath, "utf-8");
|
|
247
|
+
const parsed = JSON.parse(raw);
|
|
248
|
+
return typeof parsed.token === "string" ? parsed.token : void 0;
|
|
249
|
+
} catch {
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
function readAccountFile(filePath) {
|
|
254
|
+
try {
|
|
255
|
+
if (fs.existsSync(filePath)) return JSON.parse(fs.readFileSync(filePath, "utf-8"));
|
|
256
|
+
} catch {}
|
|
257
|
+
return null;
|
|
258
|
+
}
|
|
259
|
+
/** Load account data by ID, with compatibility fallbacks. */
|
|
260
|
+
function loadWeixinAccount(accountId) {
|
|
261
|
+
const primary = readAccountFile(resolveAccountPath(accountId));
|
|
262
|
+
if (primary) return primary;
|
|
263
|
+
const rawId = deriveRawAccountId(accountId);
|
|
264
|
+
if (rawId) {
|
|
265
|
+
const compat = readAccountFile(resolveAccountPath(rawId));
|
|
266
|
+
if (compat) return compat;
|
|
267
|
+
}
|
|
268
|
+
const token = loadLegacyToken();
|
|
269
|
+
if (token) return { token };
|
|
270
|
+
return null;
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Persist account data after QR login (merges into existing file).
|
|
274
|
+
* - token: overwritten when provided.
|
|
275
|
+
* - baseUrl: stored when non-empty; resolveWeixinAccount falls back to DEFAULT_BASE_URL.
|
|
276
|
+
* - userId: set when `update.userId` is provided; omitted from file when cleared to empty.
|
|
277
|
+
*/
|
|
278
|
+
function saveWeixinAccount(accountId, update) {
|
|
279
|
+
const dir = resolveAccountsDir();
|
|
280
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
281
|
+
const existing = loadWeixinAccount(accountId) ?? {};
|
|
282
|
+
const token = update.token?.trim() || existing.token;
|
|
283
|
+
const baseUrl = update.baseUrl?.trim() || existing.baseUrl;
|
|
284
|
+
const userId = update.userId !== void 0 ? update.userId.trim() || void 0 : existing.userId?.trim() || void 0;
|
|
285
|
+
const data = {
|
|
286
|
+
...token ? {
|
|
287
|
+
token,
|
|
288
|
+
savedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
289
|
+
} : {},
|
|
290
|
+
...baseUrl ? { baseUrl } : {},
|
|
291
|
+
...userId ? { userId } : {}
|
|
292
|
+
};
|
|
293
|
+
const filePath = resolveAccountPath(accountId);
|
|
294
|
+
fs.writeFileSync(filePath, JSON.stringify(data, null, 2), "utf-8");
|
|
295
|
+
try {
|
|
296
|
+
fs.chmodSync(filePath, 384);
|
|
297
|
+
} catch {}
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Remove all files associated with an account:
|
|
301
|
+
* - accounts/{accountId}.json (credentials)
|
|
302
|
+
* - accounts/{accountId}.sync.json (getUpdates sync buf)
|
|
303
|
+
* - accounts/{accountId}.context-tokens.json (context tokens on disk)
|
|
304
|
+
* - credentials/openclaw-weixin-{accountId}-allowFrom.json (authorized users)
|
|
305
|
+
*/
|
|
306
|
+
function clearWeixinAccount(accountId) {
|
|
307
|
+
const dir = resolveAccountsDir();
|
|
308
|
+
const accountFiles = [
|
|
309
|
+
`${accountId}.json`,
|
|
310
|
+
`${accountId}.sync.json`,
|
|
311
|
+
`${accountId}.context-tokens.json`
|
|
312
|
+
];
|
|
313
|
+
for (const file of accountFiles) try {
|
|
314
|
+
fs.unlinkSync(path.join(dir, file));
|
|
315
|
+
} catch {}
|
|
316
|
+
try {
|
|
317
|
+
fs.unlinkSync(resolveFrameworkAllowFromPath(accountId));
|
|
318
|
+
} catch {}
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* Resolve the openclaw.json config file path.
|
|
322
|
+
* Checks OPENCLAW_CONFIG env var, then state dir.
|
|
323
|
+
*/
|
|
324
|
+
function resolveConfigPath() {
|
|
325
|
+
const envPath = process.env.OPENCLAW_CONFIG?.trim();
|
|
326
|
+
if (envPath) return envPath;
|
|
327
|
+
return path.join(resolveStateDir(), "openclaw.json");
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Read `routeTag` from openclaw.json (for callers without an `FengMingConfig` object).
|
|
331
|
+
* Checks per-account `channels.<id>.accounts[accountId].routeTag` first, then section-level
|
|
332
|
+
* `channels.<id>.routeTag`. Matches `feat_weixin_extension` behavior; channel key is `"openclaw-weixin"`.
|
|
333
|
+
*
|
|
334
|
+
* The config is cached after the first read since routeTag does not change at runtime.
|
|
335
|
+
*/
|
|
336
|
+
let cachedRouteTagSection;
|
|
337
|
+
function loadRouteTagSection() {
|
|
338
|
+
if (cachedRouteTagSection !== void 0) return cachedRouteTagSection;
|
|
339
|
+
try {
|
|
340
|
+
const configPath = resolveConfigPath();
|
|
341
|
+
if (!fs.existsSync(configPath)) {
|
|
342
|
+
cachedRouteTagSection = null;
|
|
343
|
+
return null;
|
|
344
|
+
}
|
|
345
|
+
const raw = fs.readFileSync(configPath, "utf-8");
|
|
346
|
+
const section = JSON.parse(raw).channels?.["openclaw-weixin"] ?? null;
|
|
347
|
+
cachedRouteTagSection = section;
|
|
348
|
+
return section;
|
|
349
|
+
} catch {
|
|
350
|
+
cachedRouteTagSection = null;
|
|
351
|
+
return null;
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
function loadConfigRouteTag(accountId) {
|
|
355
|
+
const section = loadRouteTagSection();
|
|
356
|
+
if (!section) return void 0;
|
|
357
|
+
if (accountId) {
|
|
358
|
+
const tag = section.accounts?.[accountId]?.routeTag;
|
|
359
|
+
if (typeof tag === "number") return String(tag);
|
|
360
|
+
if (typeof tag === "string" && tag.trim()) return tag.trim();
|
|
361
|
+
}
|
|
362
|
+
if (typeof section.routeTag === "number") return String(section.routeTag);
|
|
363
|
+
return typeof section.routeTag === "string" && section.routeTag.trim() ? section.routeTag.trim() : void 0;
|
|
364
|
+
}
|
|
365
|
+
/**
|
|
366
|
+
* Read `botAgent` from `channels.openclaw-weixin.botAgent` in openclaw.json.
|
|
367
|
+
* Returns the raw configured string (caller is responsible for sanitization)
|
|
368
|
+
* or undefined when not set. Reuses the cached channel section.
|
|
369
|
+
*/
|
|
370
|
+
function loadConfigBotAgent() {
|
|
371
|
+
const section = loadRouteTagSection();
|
|
372
|
+
if (!section) return void 0;
|
|
373
|
+
const value = section.botAgent;
|
|
374
|
+
return typeof value === "string" && value.trim() ? value : void 0;
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Bump `channels.openclaw-weixin.channelConfigUpdatedAt` in openclaw.json on each successful login
|
|
378
|
+
* so the gateway reloads config from disk (no empty `accounts: {}` placeholder).
|
|
379
|
+
*/
|
|
380
|
+
async function triggerWeixinChannelReload() {
|
|
381
|
+
try {
|
|
382
|
+
const { loadConfig, writeConfigFile } = await import("./plugin-sdk/config-runtime.js");
|
|
383
|
+
const cfg = loadConfig();
|
|
384
|
+
const channels = cfg.channels ?? {};
|
|
385
|
+
const existing = channels["openclaw-weixin"] ?? {};
|
|
386
|
+
await writeConfigFile({
|
|
387
|
+
...cfg,
|
|
388
|
+
channels: {
|
|
389
|
+
...channels,
|
|
390
|
+
"openclaw-weixin": {
|
|
391
|
+
...existing,
|
|
392
|
+
channelConfigUpdatedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
});
|
|
396
|
+
logger.info("triggerWeixinChannelReload: wrote channel config to openclaw.json");
|
|
397
|
+
} catch (err) {
|
|
398
|
+
logger.warn(`triggerWeixinChannelReload: failed to update config: ${String(err)}`);
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
/** List accountIds from the index file (written at QR login). */
|
|
402
|
+
function listWeixinAccountIds(_cfg) {
|
|
403
|
+
return listIndexedWeixinAccountIds();
|
|
404
|
+
}
|
|
405
|
+
/** Resolve a weixin account by ID, merging config and stored credentials. */
|
|
406
|
+
function resolveWeixinAccount(cfg, accountId) {
|
|
407
|
+
const raw = accountId?.trim();
|
|
408
|
+
if (!raw) throw new Error("weixin: accountId is required (no default account)");
|
|
409
|
+
const id = normalizeAccountId(raw);
|
|
410
|
+
const section = cfg.channels?.["openclaw-weixin"];
|
|
411
|
+
const accountCfg = section?.accounts?.[id] ?? section ?? {};
|
|
412
|
+
const accountData = loadWeixinAccount(id);
|
|
413
|
+
const token = accountData?.token?.trim() || void 0;
|
|
414
|
+
return {
|
|
415
|
+
accountId: id,
|
|
416
|
+
baseUrl: accountData?.baseUrl?.trim() || "https://ilinkai.weixin.qq.com",
|
|
417
|
+
cdnBaseUrl: accountCfg.cdnBaseUrl?.trim() || "https://novac2c.cdn.weixin.qq.com/c2c",
|
|
418
|
+
token,
|
|
419
|
+
enabled: accountCfg.enabled !== false,
|
|
420
|
+
configured: Boolean(token),
|
|
421
|
+
name: accountCfg.name?.trim() || void 0
|
|
422
|
+
};
|
|
423
|
+
}
|
|
424
|
+
//#endregion
|
|
425
|
+
//#region extensions/weixin/src/util/redact.ts
|
|
426
|
+
const DEFAULT_BODY_MAX_LEN = 200;
|
|
427
|
+
const DEFAULT_TOKEN_PREFIX_LEN = 6;
|
|
428
|
+
/**
|
|
429
|
+
* Truncate a string, appending a length indicator when trimmed.
|
|
430
|
+
* Returns `""` for empty/undefined input.
|
|
431
|
+
*/
|
|
432
|
+
function truncate(s, max) {
|
|
433
|
+
if (!s) return "";
|
|
434
|
+
if (s.length <= max) return s;
|
|
435
|
+
return `${s.slice(0, max)}…(len=${s.length})`;
|
|
436
|
+
}
|
|
437
|
+
/**
|
|
438
|
+
* Redact a token/secret: show only the first few chars + total length.
|
|
439
|
+
* Returns `"(none)"` when absent.
|
|
440
|
+
*/
|
|
441
|
+
function redactToken(token, prefixLen = DEFAULT_TOKEN_PREFIX_LEN) {
|
|
442
|
+
if (!token) return "(none)";
|
|
443
|
+
if (token.length <= prefixLen) return `****(len=${token.length})`;
|
|
444
|
+
return `${token.slice(0, prefixLen)}…(len=${token.length})`;
|
|
445
|
+
}
|
|
446
|
+
/**
|
|
447
|
+
* Truncate a JSON body string to `maxLen` chars for safe logging.
|
|
448
|
+
* Redacts known sensitive fields before truncating.
|
|
449
|
+
*/
|
|
450
|
+
function redactBody(body, maxLen = DEFAULT_BODY_MAX_LEN) {
|
|
451
|
+
if (!body) return "(empty)";
|
|
452
|
+
const redacted = body.replace(/"(context_token|bot_token|token|authorization|Authorization)"\s*:\s*"[^"]*"/g, "\"$1\":\"<redacted>\"");
|
|
453
|
+
if (redacted.length <= maxLen) return redacted;
|
|
454
|
+
return `${redacted.slice(0, maxLen)}…(truncated, totalLen=${redacted.length})`;
|
|
455
|
+
}
|
|
456
|
+
/**
|
|
457
|
+
* Strip query string (which often contains signatures/tokens) from a URL,
|
|
458
|
+
* keeping only origin + pathname.
|
|
459
|
+
*/
|
|
460
|
+
function redactUrl(rawUrl) {
|
|
461
|
+
try {
|
|
462
|
+
const u = new URL(rawUrl);
|
|
463
|
+
const base = `${u.origin}${u.pathname}`;
|
|
464
|
+
return u.search ? `${base}?<redacted>` : base;
|
|
465
|
+
} catch {
|
|
466
|
+
return truncate(rawUrl, 80);
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
//#endregion
|
|
470
|
+
//#region extensions/weixin/src/api/api.ts
|
|
471
|
+
/**
|
|
472
|
+
* Identify whether a parsed package.json belongs to this plugin.
|
|
473
|
+
*
|
|
474
|
+
* The walk-up search may pass through unrelated `package.json` files
|
|
475
|
+
* (e.g. nested `node_modules/<dep>/package.json`); only ours is accepted.
|
|
476
|
+
*/
|
|
477
|
+
function isOwnPackageJson(parsed) {
|
|
478
|
+
if (parsed.ilink_appid !== void 0) return true;
|
|
479
|
+
return typeof parsed.name === "string" && parsed.name.includes("openclaw-weixin");
|
|
480
|
+
}
|
|
481
|
+
/**
|
|
482
|
+
* Walk up from `startDir` searching for the plugin's own `package.json`.
|
|
483
|
+
*
|
|
484
|
+
* Resilient to differing layouts between dev (TS source under `src/`) and
|
|
485
|
+
* publish (compiled output under `dist/src/`) by not assuming a fixed depth.
|
|
486
|
+
*/
|
|
487
|
+
function readPackageJsonFromDir(startDir) {
|
|
488
|
+
try {
|
|
489
|
+
let dir = startDir;
|
|
490
|
+
const { root } = path.parse(dir);
|
|
491
|
+
while (dir && dir !== root) {
|
|
492
|
+
const candidate = path.join(dir, "package.json");
|
|
493
|
+
if (fs.existsSync(candidate)) try {
|
|
494
|
+
const parsed = JSON.parse(fs.readFileSync(candidate, "utf-8"));
|
|
495
|
+
if (isOwnPackageJson(parsed)) return parsed;
|
|
496
|
+
} catch {}
|
|
497
|
+
dir = path.dirname(dir);
|
|
498
|
+
}
|
|
499
|
+
} catch {}
|
|
500
|
+
return {};
|
|
501
|
+
}
|
|
502
|
+
function readPackageJson() {
|
|
503
|
+
return readPackageJsonFromDir(path.dirname(fileURLToPath(import.meta.url)));
|
|
504
|
+
}
|
|
505
|
+
const pkg = readPackageJson();
|
|
506
|
+
const CHANNEL_VERSION = pkg.version ?? "unknown";
|
|
507
|
+
/** iLink-App-Id: 直接读取 package.json 顶层 ilink_appid 字段。 */
|
|
508
|
+
const ILINK_APP_ID = pkg.ilink_appid ?? "";
|
|
509
|
+
/**
|
|
510
|
+
* iLink-App-ClientVersion: uint32 encoded as 0x00MMNNPP
|
|
511
|
+
* High 8 bits fixed to 0; remaining bits: major<<16 | minor<<8 | patch.
|
|
512
|
+
* e.g. "1.0.11" -> 0x0001000B = 65547
|
|
513
|
+
*/
|
|
514
|
+
function buildClientVersion(version) {
|
|
515
|
+
const parts = version.split(".").map((p) => parseInt(p, 10));
|
|
516
|
+
const major = parts[0] ?? 0;
|
|
517
|
+
const minor = parts[1] ?? 0;
|
|
518
|
+
const patch = parts[2] ?? 0;
|
|
519
|
+
return (major & 255) << 16 | (minor & 255) << 8 | patch & 255;
|
|
520
|
+
}
|
|
521
|
+
const ILINK_APP_CLIENT_VERSION = buildClientVersion(pkg.version ?? "0.0.0");
|
|
522
|
+
/**
|
|
523
|
+
* Default `bot_agent` value used when the upstream app does not declare one.
|
|
524
|
+
* Mirrors the role of HTTP `User-Agent`'s implicit "no UA" fallback.
|
|
525
|
+
*/
|
|
526
|
+
const DEFAULT_BOT_AGENT = "凤鸣";
|
|
527
|
+
/** Maximum length (bytes) of the sanitized `bot_agent` string. */
|
|
528
|
+
const BOT_AGENT_MAX_LEN = 256;
|
|
529
|
+
/**
|
|
530
|
+
* Sanitize a user-supplied `botAgent` config value into a wire-safe string.
|
|
531
|
+
*
|
|
532
|
+
* Grammar (UA-style):
|
|
533
|
+
* bot_agent = product *( SP product )
|
|
534
|
+
* product = name "/" version [ SP "(" comment ")" ]
|
|
535
|
+
* name = 1*32( ALPHA / DIGIT / "_" / "." / "-" )
|
|
536
|
+
* version = 1*32( ALPHA / DIGIT / "_" / "." / "+" / "-" )
|
|
537
|
+
* comment = 1*64( printable ASCII minus "(" ")" )
|
|
538
|
+
*
|
|
539
|
+
* Tokens that fail to parse are dropped silently (no partial tokens kept).
|
|
540
|
+
* Returns `DEFAULT_BOT_AGENT` when the input is empty / all tokens dropped /
|
|
541
|
+
* the result exceeds the length cap after truncation.
|
|
542
|
+
*/
|
|
543
|
+
function sanitizeBotAgent(raw) {
|
|
544
|
+
if (!raw || typeof raw !== "string") return DEFAULT_BOT_AGENT;
|
|
545
|
+
const trimmed = raw.trim();
|
|
546
|
+
if (!trimmed) return DEFAULT_BOT_AGENT;
|
|
547
|
+
const productRe = /^[A-Za-z0-9_.\-]{1,32}\/[A-Za-z0-9_.+\-]{1,32}$/;
|
|
548
|
+
const commentCharRe = /^[\x20-\x27\x2A-\x7E]{1,64}$/;
|
|
549
|
+
const rawTokens = trimmed.split(/\s+/);
|
|
550
|
+
const tokens = [];
|
|
551
|
+
for (let i = 0; i < rawTokens.length; i += 1) {
|
|
552
|
+
const tok = rawTokens[i];
|
|
553
|
+
if (tok.startsWith("(") && !tok.endsWith(")")) {
|
|
554
|
+
let acc = tok;
|
|
555
|
+
while (i + 1 < rawTokens.length && !acc.endsWith(")")) {
|
|
556
|
+
i += 1;
|
|
557
|
+
acc += " " + rawTokens[i];
|
|
558
|
+
}
|
|
559
|
+
tokens.push(acc);
|
|
560
|
+
} else tokens.push(tok);
|
|
561
|
+
}
|
|
562
|
+
const accepted = [];
|
|
563
|
+
let pendingProduct = null;
|
|
564
|
+
for (const tok of tokens) {
|
|
565
|
+
if (tok.startsWith("(") && tok.endsWith(")")) {
|
|
566
|
+
const inner = tok.slice(1, -1);
|
|
567
|
+
if (pendingProduct && commentCharRe.test(inner)) {
|
|
568
|
+
accepted.push(`${pendingProduct} (${inner})`);
|
|
569
|
+
pendingProduct = null;
|
|
570
|
+
} else if (pendingProduct) {
|
|
571
|
+
accepted.push(pendingProduct);
|
|
572
|
+
pendingProduct = null;
|
|
573
|
+
}
|
|
574
|
+
continue;
|
|
575
|
+
}
|
|
576
|
+
if (pendingProduct) {
|
|
577
|
+
accepted.push(pendingProduct);
|
|
578
|
+
pendingProduct = null;
|
|
579
|
+
}
|
|
580
|
+
if (productRe.test(tok)) pendingProduct = tok;
|
|
581
|
+
}
|
|
582
|
+
if (pendingProduct) accepted.push(pendingProduct);
|
|
583
|
+
if (accepted.length === 0) return DEFAULT_BOT_AGENT;
|
|
584
|
+
const joined = accepted.join(" ");
|
|
585
|
+
if (Buffer.byteLength(joined, "utf-8") <= BOT_AGENT_MAX_LEN) return joined;
|
|
586
|
+
const truncated = [];
|
|
587
|
+
let len = 0;
|
|
588
|
+
for (const t of accepted) {
|
|
589
|
+
const add = (truncated.length === 0 ? 0 : 1) + Buffer.byteLength(t, "utf-8");
|
|
590
|
+
if (len + add > BOT_AGENT_MAX_LEN) break;
|
|
591
|
+
truncated.push(t);
|
|
592
|
+
len += add;
|
|
593
|
+
}
|
|
594
|
+
return truncated.length > 0 ? truncated.join(" ") : DEFAULT_BOT_AGENT;
|
|
595
|
+
}
|
|
596
|
+
/** Build the `base_info` payload included in every API request. */
|
|
597
|
+
function buildBaseInfo() {
|
|
598
|
+
return {
|
|
599
|
+
channel_version: CHANNEL_VERSION,
|
|
600
|
+
bot_agent: sanitizeBotAgent(loadConfigBotAgent())
|
|
601
|
+
};
|
|
602
|
+
}
|
|
603
|
+
/** Default timeout for long-poll getUpdates requests. */
|
|
604
|
+
const DEFAULT_LONG_POLL_TIMEOUT_MS = 35e3;
|
|
605
|
+
/** Default timeout for regular API requests (sendMessage, getUploadUrl). */
|
|
606
|
+
const DEFAULT_API_TIMEOUT_MS = 15e3;
|
|
607
|
+
/** Default timeout for lightweight API requests (getConfig, sendTyping). */
|
|
608
|
+
const DEFAULT_CONFIG_TIMEOUT_MS = 1e4;
|
|
609
|
+
function ensureTrailingSlash(url) {
|
|
610
|
+
return url.endsWith("/") ? url : `${url}/`;
|
|
611
|
+
}
|
|
612
|
+
/** X-WECHAT-UIN header: random uint32 -> decimal string -> base64. */
|
|
613
|
+
function randomWechatUin() {
|
|
614
|
+
const uint32 = crypto.randomBytes(4).readUInt32BE(0);
|
|
615
|
+
return Buffer.from(String(uint32), "utf-8").toString("base64");
|
|
616
|
+
}
|
|
617
|
+
/** Build headers shared by both GET and POST requests. */
|
|
618
|
+
function buildCommonHeaders() {
|
|
619
|
+
const headers = {
|
|
620
|
+
"iLink-App-Id": ILINK_APP_ID,
|
|
621
|
+
"iLink-App-ClientVersion": String(ILINK_APP_CLIENT_VERSION)
|
|
622
|
+
};
|
|
623
|
+
const routeTag = loadConfigRouteTag();
|
|
624
|
+
if (routeTag) headers.SKRouteTag = routeTag;
|
|
625
|
+
return headers;
|
|
626
|
+
}
|
|
627
|
+
function buildHeaders(opts) {
|
|
628
|
+
const headers = {
|
|
629
|
+
"Content-Type": "application/json",
|
|
630
|
+
AuthorizationType: "ilink_bot_token",
|
|
631
|
+
"X-WECHAT-UIN": randomWechatUin(),
|
|
632
|
+
...buildCommonHeaders()
|
|
633
|
+
};
|
|
634
|
+
if (opts.token?.trim()) headers.Authorization = `Bearer ${opts.token.trim()}`;
|
|
635
|
+
logger.debug(`requestHeaders: ${JSON.stringify({
|
|
636
|
+
...headers,
|
|
637
|
+
Authorization: headers.Authorization ? "Bearer ***" : void 0
|
|
638
|
+
})}`);
|
|
639
|
+
return headers;
|
|
640
|
+
}
|
|
641
|
+
/**
|
|
642
|
+
* GET fetch wrapper: send a GET request to a Weixin API endpoint.
|
|
643
|
+
* When `timeoutMs` is set, the request is aborted after that many milliseconds.
|
|
644
|
+
* Query parameters should already be encoded in `endpoint`.
|
|
645
|
+
* Returns the raw response text on success; throws on HTTP error or (if used) timeout abort.
|
|
646
|
+
*/
|
|
647
|
+
async function apiGetFetch(params) {
|
|
648
|
+
const base = ensureTrailingSlash(params.baseUrl);
|
|
649
|
+
const url = new URL(params.endpoint, base);
|
|
650
|
+
const hdrs = buildCommonHeaders();
|
|
651
|
+
logger.debug(`GET ${redactUrl(url.toString())}`);
|
|
652
|
+
const timeoutMs = params.timeoutMs;
|
|
653
|
+
const controller = timeoutMs != null && timeoutMs > 0 ? new AbortController() : void 0;
|
|
654
|
+
const t = controller != null && timeoutMs != null ? setTimeout(() => controller.abort(), timeoutMs) : void 0;
|
|
655
|
+
try {
|
|
656
|
+
const res = await fetch(url.toString(), {
|
|
657
|
+
method: "GET",
|
|
658
|
+
headers: hdrs,
|
|
659
|
+
...controller ? { signal: controller.signal } : {}
|
|
660
|
+
});
|
|
661
|
+
if (t !== void 0) clearTimeout(t);
|
|
662
|
+
const rawText = await res.text();
|
|
663
|
+
logger.debug(`${params.label} status=${res.status} raw=${redactBody(rawText)}`);
|
|
664
|
+
if (!res.ok) throw new Error(`${params.label} ${res.status}: ${rawText}`);
|
|
665
|
+
return rawText;
|
|
666
|
+
} catch (err) {
|
|
667
|
+
if (t !== void 0) clearTimeout(t);
|
|
668
|
+
throw err;
|
|
669
|
+
}
|
|
670
|
+
}
|
|
671
|
+
/**
|
|
672
|
+
* Combine an internal timeout controller with an optional external abort signal.
|
|
673
|
+
* This lets gateway channel-stop aborts cancel in-flight long-poll requests
|
|
674
|
+
* immediately while preserving the existing timeout-driven AbortError path.
|
|
675
|
+
*/
|
|
676
|
+
function combineAbortSignals(params) {
|
|
677
|
+
const { internal, external } = params;
|
|
678
|
+
if (!external) return {
|
|
679
|
+
signal: internal?.signal,
|
|
680
|
+
cleanup: () => {}
|
|
681
|
+
};
|
|
682
|
+
if (!internal) return {
|
|
683
|
+
signal: external,
|
|
684
|
+
cleanup: () => {}
|
|
685
|
+
};
|
|
686
|
+
if (external.aborted) {
|
|
687
|
+
internal.abort();
|
|
688
|
+
return {
|
|
689
|
+
signal: internal.signal,
|
|
690
|
+
cleanup: () => {}
|
|
691
|
+
};
|
|
692
|
+
}
|
|
693
|
+
const onExternalAbort = () => internal.abort();
|
|
694
|
+
external.addEventListener("abort", onExternalAbort, { once: true });
|
|
695
|
+
return {
|
|
696
|
+
signal: internal.signal,
|
|
697
|
+
cleanup: () => external.removeEventListener("abort", onExternalAbort)
|
|
698
|
+
};
|
|
699
|
+
}
|
|
700
|
+
/**
|
|
701
|
+
* Common fetch wrapper: POST JSON to a Weixin API endpoint.
|
|
702
|
+
* When `timeoutMs` is provided, the request is aborted after that many milliseconds.
|
|
703
|
+
* When omitted, no client-side timeout is applied (relies on OS/TCP stack).
|
|
704
|
+
* Returns the raw response text on success; throws on HTTP error or timeout.
|
|
705
|
+
*
|
|
706
|
+
* When `abortSignal` is provided, an external abort (e.g. gateway channel stop)
|
|
707
|
+
* cancels the in-flight request immediately instead of waiting for `timeoutMs`.
|
|
708
|
+
*/
|
|
709
|
+
async function apiPostFetch(params) {
|
|
710
|
+
const base = ensureTrailingSlash(params.baseUrl);
|
|
711
|
+
const url = new URL(params.endpoint, base);
|
|
712
|
+
const hdrs = buildHeaders({ token: params.token });
|
|
713
|
+
logger.debug(`POST ${redactUrl(url.toString())} body=${redactBody(params.body)}`);
|
|
714
|
+
const controller = params.timeoutMs !== void 0 ? new AbortController() : void 0;
|
|
715
|
+
const t = controller != null && params.timeoutMs !== void 0 ? setTimeout(() => controller.abort(), params.timeoutMs) : void 0;
|
|
716
|
+
const { signal, cleanup } = combineAbortSignals({
|
|
717
|
+
internal: controller,
|
|
718
|
+
external: params.abortSignal
|
|
719
|
+
});
|
|
720
|
+
try {
|
|
721
|
+
const res = await fetch(url.toString(), {
|
|
722
|
+
method: "POST",
|
|
723
|
+
headers: hdrs,
|
|
724
|
+
body: params.body,
|
|
725
|
+
...signal ? { signal } : {}
|
|
726
|
+
});
|
|
727
|
+
if (t !== void 0) clearTimeout(t);
|
|
728
|
+
const rawText = await res.text();
|
|
729
|
+
logger.debug(`${params.label} status=${res.status} raw=${redactBody(rawText)}`);
|
|
730
|
+
if (!res.ok) throw new Error(`${params.label} ${res.status}: ${rawText}`);
|
|
731
|
+
return rawText;
|
|
732
|
+
} catch (err) {
|
|
733
|
+
if (t !== void 0) clearTimeout(t);
|
|
734
|
+
throw err;
|
|
735
|
+
} finally {
|
|
736
|
+
cleanup();
|
|
737
|
+
}
|
|
738
|
+
}
|
|
739
|
+
/**
|
|
740
|
+
* Long-poll getUpdates. Server should hold the request until new messages or timeout.
|
|
741
|
+
*
|
|
742
|
+
* On client-side timeout (no server response within timeoutMs), returns an empty response
|
|
743
|
+
* with ret=0 so the caller can simply retry. This is normal for long-poll.
|
|
744
|
+
*/
|
|
745
|
+
async function getUpdates(params) {
|
|
746
|
+
const timeout = params.timeoutMs ?? DEFAULT_LONG_POLL_TIMEOUT_MS;
|
|
747
|
+
try {
|
|
748
|
+
const rawText = await apiPostFetch({
|
|
749
|
+
baseUrl: params.baseUrl,
|
|
750
|
+
endpoint: "ilink/bot/getupdates",
|
|
751
|
+
body: JSON.stringify({
|
|
752
|
+
get_updates_buf: params.get_updates_buf ?? "",
|
|
753
|
+
base_info: buildBaseInfo()
|
|
754
|
+
}),
|
|
755
|
+
token: params.token,
|
|
756
|
+
timeoutMs: timeout,
|
|
757
|
+
label: "getUpdates",
|
|
758
|
+
abortSignal: params.abortSignal
|
|
759
|
+
});
|
|
760
|
+
return JSON.parse(rawText);
|
|
761
|
+
} catch (err) {
|
|
762
|
+
if (err instanceof Error && err.name === "AbortError") {
|
|
763
|
+
if (params.abortSignal?.aborted) logger.debug(`getUpdates: aborted by external signal`);
|
|
764
|
+
else logger.debug(`getUpdates: client-side timeout after ${timeout}ms, returning empty response`);
|
|
765
|
+
return {
|
|
766
|
+
ret: 0,
|
|
767
|
+
msgs: [],
|
|
768
|
+
get_updates_buf: params.get_updates_buf
|
|
769
|
+
};
|
|
770
|
+
}
|
|
771
|
+
throw err;
|
|
772
|
+
}
|
|
773
|
+
}
|
|
774
|
+
/** Get a pre-signed CDN upload URL for a file. */
|
|
775
|
+
async function getUploadUrl(params) {
|
|
776
|
+
const rawText = await apiPostFetch({
|
|
777
|
+
baseUrl: params.baseUrl,
|
|
778
|
+
endpoint: "ilink/bot/getuploadurl",
|
|
779
|
+
body: JSON.stringify({
|
|
780
|
+
filekey: params.filekey,
|
|
781
|
+
media_type: params.media_type,
|
|
782
|
+
to_user_id: params.to_user_id,
|
|
783
|
+
rawsize: params.rawsize,
|
|
784
|
+
rawfilemd5: params.rawfilemd5,
|
|
785
|
+
filesize: params.filesize,
|
|
786
|
+
thumb_rawsize: params.thumb_rawsize,
|
|
787
|
+
thumb_rawfilemd5: params.thumb_rawfilemd5,
|
|
788
|
+
thumb_filesize: params.thumb_filesize,
|
|
789
|
+
no_need_thumb: params.no_need_thumb,
|
|
790
|
+
aeskey: params.aeskey,
|
|
791
|
+
base_info: buildBaseInfo()
|
|
792
|
+
}),
|
|
793
|
+
token: params.token,
|
|
794
|
+
timeoutMs: params.timeoutMs ?? DEFAULT_API_TIMEOUT_MS,
|
|
795
|
+
label: "getUploadUrl"
|
|
796
|
+
});
|
|
797
|
+
return JSON.parse(rawText);
|
|
798
|
+
}
|
|
799
|
+
/** Send a single message downstream. */
|
|
800
|
+
async function sendMessage(params) {
|
|
801
|
+
await apiPostFetch({
|
|
802
|
+
baseUrl: params.baseUrl,
|
|
803
|
+
endpoint: "ilink/bot/sendmessage",
|
|
804
|
+
body: JSON.stringify({
|
|
805
|
+
...params.body,
|
|
806
|
+
base_info: buildBaseInfo()
|
|
807
|
+
}),
|
|
808
|
+
token: params.token,
|
|
809
|
+
timeoutMs: params.timeoutMs ?? DEFAULT_API_TIMEOUT_MS,
|
|
810
|
+
label: "sendMessage"
|
|
811
|
+
});
|
|
812
|
+
}
|
|
813
|
+
/** Fetch bot config (includes typing_ticket) for a given user. */
|
|
814
|
+
async function getConfig(params) {
|
|
815
|
+
const rawText = await apiPostFetch({
|
|
816
|
+
baseUrl: params.baseUrl,
|
|
817
|
+
endpoint: "ilink/bot/getconfig",
|
|
818
|
+
body: JSON.stringify({
|
|
819
|
+
ilink_user_id: params.ilinkUserId,
|
|
820
|
+
context_token: params.contextToken,
|
|
821
|
+
base_info: buildBaseInfo()
|
|
822
|
+
}),
|
|
823
|
+
token: params.token,
|
|
824
|
+
timeoutMs: params.timeoutMs ?? DEFAULT_CONFIG_TIMEOUT_MS,
|
|
825
|
+
label: "getConfig"
|
|
826
|
+
});
|
|
827
|
+
return JSON.parse(rawText);
|
|
828
|
+
}
|
|
829
|
+
/** Send a typing indicator to a user. */
|
|
830
|
+
async function sendTyping(params) {
|
|
831
|
+
await apiPostFetch({
|
|
832
|
+
baseUrl: params.baseUrl,
|
|
833
|
+
endpoint: "ilink/bot/sendtyping",
|
|
834
|
+
body: JSON.stringify({
|
|
835
|
+
...params.body,
|
|
836
|
+
base_info: buildBaseInfo()
|
|
837
|
+
}),
|
|
838
|
+
token: params.token,
|
|
839
|
+
timeoutMs: params.timeoutMs ?? DEFAULT_CONFIG_TIMEOUT_MS,
|
|
840
|
+
label: "sendTyping"
|
|
841
|
+
});
|
|
842
|
+
}
|
|
843
|
+
/**
|
|
844
|
+
* Notify Weixin that this channel client is stopping (gateway shutdown / channel stop).
|
|
845
|
+
* Uses a standalone timeout (not the gateway abort signal) so the request can finish
|
|
846
|
+
* after OpenClaw has already aborted the long-poll.
|
|
847
|
+
*/
|
|
848
|
+
async function notifyStop(params) {
|
|
849
|
+
const rawText = await apiPostFetch({
|
|
850
|
+
baseUrl: params.baseUrl,
|
|
851
|
+
endpoint: "ilink/bot/msg/notifystop",
|
|
852
|
+
body: JSON.stringify({ base_info: buildBaseInfo() }),
|
|
853
|
+
token: params.token,
|
|
854
|
+
timeoutMs: params.timeoutMs ?? DEFAULT_CONFIG_TIMEOUT_MS,
|
|
855
|
+
label: "notifyStop"
|
|
856
|
+
});
|
|
857
|
+
return JSON.parse(rawText);
|
|
858
|
+
}
|
|
859
|
+
/**
|
|
860
|
+
* Notify Weixin that this channel client is starting (gateway startup / channel start).
|
|
861
|
+
*/
|
|
862
|
+
async function notifyStart(params) {
|
|
863
|
+
const rawText = await apiPostFetch({
|
|
864
|
+
baseUrl: params.baseUrl,
|
|
865
|
+
endpoint: "ilink/bot/msg/notifystart",
|
|
866
|
+
body: JSON.stringify({ base_info: buildBaseInfo() }),
|
|
867
|
+
token: params.token,
|
|
868
|
+
timeoutMs: params.timeoutMs ?? DEFAULT_CONFIG_TIMEOUT_MS,
|
|
869
|
+
label: "notifyStart"
|
|
870
|
+
});
|
|
871
|
+
return JSON.parse(rawText);
|
|
872
|
+
}
|
|
873
|
+
//#endregion
|
|
874
|
+
//#region extensions/weixin/src/api/session-guard.ts
|
|
875
|
+
const SESSION_PAUSE_DURATION_MS = 3600 * 1e3;
|
|
876
|
+
const pauseUntilMap = /* @__PURE__ */ new Map();
|
|
877
|
+
/** Pause all inbound/outbound API calls for `accountId` for one hour. */
|
|
878
|
+
function pauseSession(accountId) {
|
|
879
|
+
const until = Date.now() + SESSION_PAUSE_DURATION_MS;
|
|
880
|
+
pauseUntilMap.set(accountId, until);
|
|
881
|
+
logger.info(`session-guard: paused accountId=${accountId} until=${new Date(until).toISOString()} (${SESSION_PAUSE_DURATION_MS / 1e3}s)`);
|
|
882
|
+
}
|
|
883
|
+
/** Returns `true` when the bot is still within its one-hour cooldown window. */
|
|
884
|
+
function isSessionPaused(accountId) {
|
|
885
|
+
const until = pauseUntilMap.get(accountId);
|
|
886
|
+
if (until === void 0) return false;
|
|
887
|
+
if (Date.now() >= until) {
|
|
888
|
+
pauseUntilMap.delete(accountId);
|
|
889
|
+
return false;
|
|
890
|
+
}
|
|
891
|
+
return true;
|
|
892
|
+
}
|
|
893
|
+
/** Milliseconds remaining until the pause expires (0 when not paused). */
|
|
894
|
+
function getRemainingPauseMs(accountId) {
|
|
895
|
+
const until = pauseUntilMap.get(accountId);
|
|
896
|
+
if (until === void 0) return 0;
|
|
897
|
+
const remaining = until - Date.now();
|
|
898
|
+
if (remaining <= 0) {
|
|
899
|
+
pauseUntilMap.delete(accountId);
|
|
900
|
+
return 0;
|
|
901
|
+
}
|
|
902
|
+
return remaining;
|
|
903
|
+
}
|
|
904
|
+
/** Throw if the session is currently paused. Call before any API request. */
|
|
905
|
+
function assertSessionActive(accountId) {
|
|
906
|
+
if (isSessionPaused(accountId)) {
|
|
907
|
+
const remainingMin = Math.ceil(getRemainingPauseMs(accountId) / 6e4);
|
|
908
|
+
throw new Error(`session paused for accountId=${accountId}, ${remainingMin} min remaining (errcode -14)`);
|
|
909
|
+
}
|
|
910
|
+
}
|
|
911
|
+
//#endregion
|
|
912
|
+
//#region extensions/weixin/src/cdn/aes-ecb.ts
|
|
913
|
+
/**
|
|
914
|
+
* Shared AES-128-ECB crypto utilities for CDN upload and download.
|
|
915
|
+
*/
|
|
916
|
+
/** Encrypt buffer with AES-128-ECB (PKCS7 padding is default). */
|
|
917
|
+
function encryptAesEcb(plaintext, key) {
|
|
918
|
+
const cipher = createCipheriv("aes-128-ecb", key, null);
|
|
919
|
+
return Buffer.concat([cipher.update(plaintext), cipher.final()]);
|
|
920
|
+
}
|
|
921
|
+
/** Decrypt buffer with AES-128-ECB (PKCS7 padding). */
|
|
922
|
+
function decryptAesEcb(ciphertext, key) {
|
|
923
|
+
const decipher = createDecipheriv("aes-128-ecb", key, null);
|
|
924
|
+
return Buffer.concat([decipher.update(ciphertext), decipher.final()]);
|
|
925
|
+
}
|
|
926
|
+
/** Compute AES-128-ECB ciphertext size (PKCS7 padding to 16-byte boundary). */
|
|
927
|
+
function aesEcbPaddedSize(plaintextSize) {
|
|
928
|
+
return Math.ceil((plaintextSize + 1) / 16) * 16;
|
|
929
|
+
}
|
|
930
|
+
//#endregion
|
|
931
|
+
//#region extensions/weixin/src/cdn/cdn-url.ts
|
|
932
|
+
/** Build a CDN download URL from encrypt_query_param. */
|
|
933
|
+
function buildCdnDownloadUrl(encryptedQueryParam, cdnBaseUrl) {
|
|
934
|
+
return `${cdnBaseUrl}/download?encrypted_query_param=${encodeURIComponent(encryptedQueryParam)}`;
|
|
935
|
+
}
|
|
936
|
+
/** Build a CDN upload URL from upload_param and filekey. */
|
|
937
|
+
function buildCdnUploadUrl(params) {
|
|
938
|
+
return `${params.cdnBaseUrl}/upload?encrypted_query_param=${encodeURIComponent(params.uploadParam)}&filekey=${encodeURIComponent(params.filekey)}`;
|
|
939
|
+
}
|
|
940
|
+
//#endregion
|
|
941
|
+
//#region extensions/weixin/src/cdn/cdn-upload.ts
|
|
942
|
+
/** Maximum retry attempts for CDN upload. */
|
|
943
|
+
const UPLOAD_MAX_RETRIES = 3;
|
|
944
|
+
/**
|
|
945
|
+
* Upload one buffer to the Weixin CDN with AES-128-ECB encryption.
|
|
946
|
+
* Returns the download encrypted_query_param from the CDN response.
|
|
947
|
+
* Retries up to UPLOAD_MAX_RETRIES times on server errors; client errors (4xx) abort immediately.
|
|
948
|
+
*/
|
|
949
|
+
async function uploadBufferToCdn(params) {
|
|
950
|
+
const { buf, uploadFullUrl, uploadParam, filekey, cdnBaseUrl, label, aeskey } = params;
|
|
951
|
+
const ciphertext = encryptAesEcb(buf, aeskey);
|
|
952
|
+
const trimmedFull = uploadFullUrl?.trim();
|
|
953
|
+
let cdnUrl;
|
|
954
|
+
if (trimmedFull) cdnUrl = trimmedFull;
|
|
955
|
+
else if (uploadParam) cdnUrl = buildCdnUploadUrl({
|
|
956
|
+
cdnBaseUrl,
|
|
957
|
+
uploadParam,
|
|
958
|
+
filekey
|
|
959
|
+
});
|
|
960
|
+
else throw new Error(`${label}: CDN upload URL missing (need upload_full_url or upload_param)`);
|
|
961
|
+
logger.debug(`${label}: CDN POST url=${redactUrl(cdnUrl)} ciphertextSize=${ciphertext.length}`);
|
|
962
|
+
let downloadParam;
|
|
963
|
+
let lastError;
|
|
964
|
+
for (let attempt = 1; attempt <= UPLOAD_MAX_RETRIES; attempt++) try {
|
|
965
|
+
const res = await fetch(cdnUrl, {
|
|
966
|
+
method: "POST",
|
|
967
|
+
headers: { "Content-Type": "application/octet-stream" },
|
|
968
|
+
body: new Uint8Array(ciphertext)
|
|
969
|
+
});
|
|
970
|
+
if (res.status >= 400 && res.status < 500) {
|
|
971
|
+
const errMsg = res.headers.get("x-error-message") ?? await res.text();
|
|
972
|
+
logger.error(`${label}: CDN client error attempt=${attempt} status=${res.status} errMsg=${errMsg}`);
|
|
973
|
+
throw new Error(`CDN upload client error ${res.status}: ${errMsg}`);
|
|
974
|
+
}
|
|
975
|
+
if (res.status !== 200) {
|
|
976
|
+
const errMsg = res.headers.get("x-error-message") ?? `status ${res.status}`;
|
|
977
|
+
logger.error(`${label}: CDN server error attempt=${attempt} status=${res.status} errMsg=${errMsg}`);
|
|
978
|
+
throw new Error(`CDN upload server error: ${errMsg}`);
|
|
979
|
+
}
|
|
980
|
+
downloadParam = res.headers.get("x-encrypted-param") ?? void 0;
|
|
981
|
+
if (!downloadParam) {
|
|
982
|
+
logger.error(`${label}: CDN response missing x-encrypted-param header attempt=${attempt}`);
|
|
983
|
+
throw new Error("CDN upload response missing x-encrypted-param header");
|
|
984
|
+
}
|
|
985
|
+
logger.debug(`${label}: CDN upload success attempt=${attempt}`);
|
|
986
|
+
break;
|
|
987
|
+
} catch (err) {
|
|
988
|
+
lastError = err;
|
|
989
|
+
if (err instanceof Error && err.message.includes("client error")) throw err;
|
|
990
|
+
if (attempt < UPLOAD_MAX_RETRIES) logger.error(`${label}: attempt ${attempt} failed, retrying... err=${String(err)}`);
|
|
991
|
+
else logger.error(`${label}: all ${UPLOAD_MAX_RETRIES} attempts failed err=${String(err)}`);
|
|
992
|
+
}
|
|
993
|
+
if (!downloadParam) throw lastError instanceof Error ? lastError : /* @__PURE__ */ new Error(`CDN upload failed after ${UPLOAD_MAX_RETRIES} attempts`);
|
|
994
|
+
return { downloadParam };
|
|
995
|
+
}
|
|
996
|
+
//#endregion
|
|
997
|
+
//#region extensions/weixin/src/media/mime.ts
|
|
998
|
+
const EXTENSION_TO_MIME = {
|
|
999
|
+
".pdf": "application/pdf",
|
|
1000
|
+
".doc": "application/msword",
|
|
1001
|
+
".docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
|
|
1002
|
+
".xls": "application/vnd.ms-excel",
|
|
1003
|
+
".xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
|
1004
|
+
".ppt": "application/vnd.ms-powerpoint",
|
|
1005
|
+
".pptx": "application/vnd.openxmlformats-officedocument.presentationml.presentation",
|
|
1006
|
+
".txt": "text/plain",
|
|
1007
|
+
".csv": "text/csv",
|
|
1008
|
+
".zip": "application/zip",
|
|
1009
|
+
".tar": "application/x-tar",
|
|
1010
|
+
".gz": "application/gzip",
|
|
1011
|
+
".mp3": "audio/mpeg",
|
|
1012
|
+
".ogg": "audio/ogg",
|
|
1013
|
+
".wav": "audio/wav",
|
|
1014
|
+
".mp4": "video/mp4",
|
|
1015
|
+
".mov": "video/quicktime",
|
|
1016
|
+
".webm": "video/webm",
|
|
1017
|
+
".mkv": "video/x-matroska",
|
|
1018
|
+
".avi": "video/x-msvideo",
|
|
1019
|
+
".png": "image/png",
|
|
1020
|
+
".jpg": "image/jpeg",
|
|
1021
|
+
".jpeg": "image/jpeg",
|
|
1022
|
+
".gif": "image/gif",
|
|
1023
|
+
".webp": "image/webp",
|
|
1024
|
+
".bmp": "image/bmp"
|
|
1025
|
+
};
|
|
1026
|
+
const MIME_TO_EXTENSION = {
|
|
1027
|
+
"image/jpeg": ".jpg",
|
|
1028
|
+
"image/jpg": ".jpg",
|
|
1029
|
+
"image/png": ".png",
|
|
1030
|
+
"image/gif": ".gif",
|
|
1031
|
+
"image/webp": ".webp",
|
|
1032
|
+
"image/bmp": ".bmp",
|
|
1033
|
+
"video/mp4": ".mp4",
|
|
1034
|
+
"video/quicktime": ".mov",
|
|
1035
|
+
"video/webm": ".webm",
|
|
1036
|
+
"video/x-matroska": ".mkv",
|
|
1037
|
+
"video/x-msvideo": ".avi",
|
|
1038
|
+
"audio/mpeg": ".mp3",
|
|
1039
|
+
"audio/ogg": ".ogg",
|
|
1040
|
+
"audio/wav": ".wav",
|
|
1041
|
+
"application/pdf": ".pdf",
|
|
1042
|
+
"application/zip": ".zip",
|
|
1043
|
+
"application/x-tar": ".tar",
|
|
1044
|
+
"application/gzip": ".gz",
|
|
1045
|
+
"text/plain": ".txt",
|
|
1046
|
+
"text/csv": ".csv"
|
|
1047
|
+
};
|
|
1048
|
+
/** Get MIME type from filename extension. Returns "application/octet-stream" for unknown extensions. */
|
|
1049
|
+
function getMimeFromFilename(filename) {
|
|
1050
|
+
return EXTENSION_TO_MIME[path.extname(filename).toLowerCase()] ?? "application/octet-stream";
|
|
1051
|
+
}
|
|
1052
|
+
/** Get file extension from MIME type. Returns ".bin" for unknown types. */
|
|
1053
|
+
function getExtensionFromMime(mimeType) {
|
|
1054
|
+
return MIME_TO_EXTENSION[mimeType.split(";")[0].trim().toLowerCase()] ?? ".bin";
|
|
1055
|
+
}
|
|
1056
|
+
/** Get file extension from Content-Type header or URL path. Returns ".bin" for unknown. */
|
|
1057
|
+
function getExtensionFromContentTypeOrUrl(contentType, url) {
|
|
1058
|
+
if (contentType) {
|
|
1059
|
+
const ext = getExtensionFromMime(contentType);
|
|
1060
|
+
if (ext !== ".bin") return ext;
|
|
1061
|
+
}
|
|
1062
|
+
const ext = path.extname(new URL(url).pathname).toLowerCase();
|
|
1063
|
+
return new Set(Object.keys(EXTENSION_TO_MIME)).has(ext) ? ext : ".bin";
|
|
1064
|
+
}
|
|
1065
|
+
//#endregion
|
|
1066
|
+
//#region extensions/weixin/src/util/random.ts
|
|
1067
|
+
/**
|
|
1068
|
+
* Generate a prefixed unique ID using timestamp + crypto random bytes.
|
|
1069
|
+
* Format: `{prefix}:{timestamp}-{8-char hex}`
|
|
1070
|
+
*/
|
|
1071
|
+
function generateId(prefix) {
|
|
1072
|
+
return `${prefix}:${Date.now()}-${crypto.randomBytes(4).toString("hex")}`;
|
|
1073
|
+
}
|
|
1074
|
+
/**
|
|
1075
|
+
* Generate a temporary file name with random suffix.
|
|
1076
|
+
* Format: `{prefix}-{timestamp}-{8-char hex}{ext}`
|
|
1077
|
+
*/
|
|
1078
|
+
function tempFileName(prefix, ext) {
|
|
1079
|
+
return `${prefix}-${Date.now()}-${crypto.randomBytes(4).toString("hex")}${ext}`;
|
|
1080
|
+
}
|
|
1081
|
+
//#endregion
|
|
1082
|
+
//#region extensions/weixin/src/api/types.ts
|
|
1083
|
+
/** proto: UploadMediaType */
|
|
1084
|
+
const UploadMediaType = {
|
|
1085
|
+
IMAGE: 1,
|
|
1086
|
+
VIDEO: 2,
|
|
1087
|
+
FILE: 3,
|
|
1088
|
+
VOICE: 4
|
|
1089
|
+
};
|
|
1090
|
+
const MessageType = {
|
|
1091
|
+
NONE: 0,
|
|
1092
|
+
USER: 1,
|
|
1093
|
+
BOT: 2
|
|
1094
|
+
};
|
|
1095
|
+
const MessageItemType = {
|
|
1096
|
+
NONE: 0,
|
|
1097
|
+
TEXT: 1,
|
|
1098
|
+
IMAGE: 2,
|
|
1099
|
+
VOICE: 3,
|
|
1100
|
+
FILE: 4,
|
|
1101
|
+
VIDEO: 5,
|
|
1102
|
+
TOOL_CALL_START: 11,
|
|
1103
|
+
TOOL_CALL_RESULT: 12
|
|
1104
|
+
};
|
|
1105
|
+
const MessageState = {
|
|
1106
|
+
NEW: 0,
|
|
1107
|
+
GENERATING: 1,
|
|
1108
|
+
FINISH: 2
|
|
1109
|
+
};
|
|
1110
|
+
/** Typing status: 1 = typing (default), 2 = cancel typing. */
|
|
1111
|
+
const TypingStatus = {
|
|
1112
|
+
TYPING: 1,
|
|
1113
|
+
CANCEL: 2
|
|
1114
|
+
};
|
|
1115
|
+
//#endregion
|
|
1116
|
+
//#region extensions/weixin/src/cdn/upload.ts
|
|
1117
|
+
/**
|
|
1118
|
+
* Download a remote media URL (image, video, file) to a local temp file in destDir.
|
|
1119
|
+
* Returns the local file path; extension is inferred from Content-Type / URL.
|
|
1120
|
+
*/
|
|
1121
|
+
async function downloadRemoteImageToTemp(url, destDir) {
|
|
1122
|
+
logger.debug(`downloadRemoteImageToTemp: fetching url=${url}`);
|
|
1123
|
+
const res = await fetch(url);
|
|
1124
|
+
if (!res.ok) {
|
|
1125
|
+
const msg = `remote media download failed: ${res.status} ${res.statusText} url=${url}`;
|
|
1126
|
+
logger.error(`downloadRemoteImageToTemp: ${msg}`);
|
|
1127
|
+
throw new Error(msg);
|
|
1128
|
+
}
|
|
1129
|
+
const buf = Buffer.from(await res.arrayBuffer());
|
|
1130
|
+
logger.debug(`downloadRemoteImageToTemp: downloaded ${buf.length} bytes`);
|
|
1131
|
+
await fs$1.mkdir(destDir, { recursive: true });
|
|
1132
|
+
const ext = getExtensionFromContentTypeOrUrl(res.headers.get("content-type"), url);
|
|
1133
|
+
const name = tempFileName("weixin-remote", ext);
|
|
1134
|
+
const filePath = path.join(destDir, name);
|
|
1135
|
+
await fs$1.writeFile(filePath, buf);
|
|
1136
|
+
logger.debug(`downloadRemoteImageToTemp: saved to ${filePath} ext=${ext}`);
|
|
1137
|
+
return filePath;
|
|
1138
|
+
}
|
|
1139
|
+
/**
|
|
1140
|
+
* Common upload pipeline: read file → hash → gen aeskey → getUploadUrl → uploadBufferToCdn → return info.
|
|
1141
|
+
*/
|
|
1142
|
+
async function uploadMediaToCdn(params) {
|
|
1143
|
+
const { filePath, toUserId, opts, cdnBaseUrl, mediaType, label } = params;
|
|
1144
|
+
const plaintext = await fs$1.readFile(filePath);
|
|
1145
|
+
const rawsize = plaintext.length;
|
|
1146
|
+
const rawfilemd5 = crypto.createHash("md5").update(plaintext).digest("hex");
|
|
1147
|
+
const filesize = aesEcbPaddedSize(rawsize);
|
|
1148
|
+
const filekey = crypto.randomBytes(16).toString("hex");
|
|
1149
|
+
const aeskey = crypto.randomBytes(16);
|
|
1150
|
+
logger.debug(`${label}: file=${filePath} rawsize=${rawsize} filesize=${filesize} md5=${rawfilemd5} filekey=${filekey}`);
|
|
1151
|
+
const uploadUrlResp = await getUploadUrl({
|
|
1152
|
+
...opts,
|
|
1153
|
+
filekey,
|
|
1154
|
+
media_type: mediaType,
|
|
1155
|
+
to_user_id: toUserId,
|
|
1156
|
+
rawsize,
|
|
1157
|
+
rawfilemd5,
|
|
1158
|
+
filesize,
|
|
1159
|
+
no_need_thumb: true,
|
|
1160
|
+
aeskey: aeskey.toString("hex")
|
|
1161
|
+
});
|
|
1162
|
+
const uploadFullUrl = uploadUrlResp.upload_full_url?.trim();
|
|
1163
|
+
const uploadParam = uploadUrlResp.upload_param;
|
|
1164
|
+
if (!uploadFullUrl && !uploadParam) {
|
|
1165
|
+
logger.error(`${label}: getUploadUrl returned no upload URL (need upload_full_url or upload_param), resp=${JSON.stringify(uploadUrlResp)}`);
|
|
1166
|
+
throw new Error(`${label}: getUploadUrl returned no upload URL`);
|
|
1167
|
+
}
|
|
1168
|
+
const { downloadParam: downloadEncryptedQueryParam } = await uploadBufferToCdn({
|
|
1169
|
+
buf: plaintext,
|
|
1170
|
+
uploadFullUrl: uploadFullUrl || void 0,
|
|
1171
|
+
uploadParam: uploadParam ?? void 0,
|
|
1172
|
+
filekey,
|
|
1173
|
+
cdnBaseUrl,
|
|
1174
|
+
aeskey,
|
|
1175
|
+
label: `${label}[orig filekey=${filekey}]`
|
|
1176
|
+
});
|
|
1177
|
+
return {
|
|
1178
|
+
filekey,
|
|
1179
|
+
downloadEncryptedQueryParam,
|
|
1180
|
+
aeskey: aeskey.toString("hex"),
|
|
1181
|
+
fileSize: rawsize,
|
|
1182
|
+
fileSizeCiphertext: filesize
|
|
1183
|
+
};
|
|
1184
|
+
}
|
|
1185
|
+
/** Upload a local image file to the Weixin CDN with AES-128-ECB encryption. */
|
|
1186
|
+
async function uploadFileToWeixin(params) {
|
|
1187
|
+
return uploadMediaToCdn({
|
|
1188
|
+
...params,
|
|
1189
|
+
mediaType: UploadMediaType.IMAGE,
|
|
1190
|
+
label: "uploadFileToWeixin"
|
|
1191
|
+
});
|
|
1192
|
+
}
|
|
1193
|
+
/** Upload a local video file to the Weixin CDN. */
|
|
1194
|
+
async function uploadVideoToWeixin(params) {
|
|
1195
|
+
return uploadMediaToCdn({
|
|
1196
|
+
...params,
|
|
1197
|
+
mediaType: UploadMediaType.VIDEO,
|
|
1198
|
+
label: "uploadVideoToWeixin"
|
|
1199
|
+
});
|
|
1200
|
+
}
|
|
1201
|
+
/**
|
|
1202
|
+
* Upload a local file attachment (non-image, non-video) to the Weixin CDN.
|
|
1203
|
+
* Uses media_type=FILE; no thumbnail required.
|
|
1204
|
+
*/
|
|
1205
|
+
async function uploadFileAttachmentToWeixin(params) {
|
|
1206
|
+
return uploadMediaToCdn({
|
|
1207
|
+
...params,
|
|
1208
|
+
mediaType: UploadMediaType.FILE,
|
|
1209
|
+
label: "uploadFileAttachmentToWeixin"
|
|
1210
|
+
});
|
|
1211
|
+
}
|
|
1212
|
+
//#endregion
|
|
1213
|
+
//#region extensions/weixin/src/messaging/inbound.ts
|
|
1214
|
+
/**
|
|
1215
|
+
* contextToken is issued per-message by the Weixin getupdates API and must
|
|
1216
|
+
* be echoed verbatim in every outbound send. The in-memory map is the primary
|
|
1217
|
+
* lookup; a disk-backed file per account ensures tokens survive gateway restarts.
|
|
1218
|
+
*/
|
|
1219
|
+
const contextTokenStore = /* @__PURE__ */ new Map();
|
|
1220
|
+
function contextTokenKey(accountId, userId) {
|
|
1221
|
+
return `${accountId}:${userId}`;
|
|
1222
|
+
}
|
|
1223
|
+
function resolveContextTokenFilePath(accountId) {
|
|
1224
|
+
return path.join(resolveStateDir(), "openclaw-weixin", "accounts", `${accountId}.context-tokens.json`);
|
|
1225
|
+
}
|
|
1226
|
+
/** Persist all context tokens for a given account to disk. */
|
|
1227
|
+
function persistContextTokens(accountId) {
|
|
1228
|
+
const prefix = `${accountId}:`;
|
|
1229
|
+
const tokens = {};
|
|
1230
|
+
for (const [k, v] of contextTokenStore) if (k.startsWith(prefix)) tokens[k.slice(prefix.length)] = v;
|
|
1231
|
+
const filePath = resolveContextTokenFilePath(accountId);
|
|
1232
|
+
try {
|
|
1233
|
+
const dir = path.dirname(filePath);
|
|
1234
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
1235
|
+
fs.writeFileSync(filePath, JSON.stringify(tokens, null, 0), "utf-8");
|
|
1236
|
+
} catch (err) {
|
|
1237
|
+
logger.warn(`persistContextTokens: failed to write ${filePath}: ${String(err)}`);
|
|
1238
|
+
}
|
|
1239
|
+
}
|
|
1240
|
+
/**
|
|
1241
|
+
* Restore persisted context tokens for an account into the in-memory map.
|
|
1242
|
+
* Called once during gateway startAccount to survive restarts.
|
|
1243
|
+
*/
|
|
1244
|
+
function restoreContextTokens(accountId) {
|
|
1245
|
+
const filePath = resolveContextTokenFilePath(accountId);
|
|
1246
|
+
try {
|
|
1247
|
+
if (!fs.existsSync(filePath)) return;
|
|
1248
|
+
const raw = fs.readFileSync(filePath, "utf-8");
|
|
1249
|
+
const tokens = JSON.parse(raw);
|
|
1250
|
+
let count = 0;
|
|
1251
|
+
for (const [userId, token] of Object.entries(tokens)) if (typeof token === "string" && token) {
|
|
1252
|
+
contextTokenStore.set(contextTokenKey(accountId, userId), token);
|
|
1253
|
+
count++;
|
|
1254
|
+
}
|
|
1255
|
+
logger.info(`restoreContextTokens: restored ${count} tokens for account=${accountId}`);
|
|
1256
|
+
} catch (err) {
|
|
1257
|
+
logger.warn(`restoreContextTokens: failed to read ${filePath}: ${String(err)}`);
|
|
1258
|
+
}
|
|
1259
|
+
}
|
|
1260
|
+
/** Remove all context tokens for a given account (memory + disk). */
|
|
1261
|
+
function clearContextTokensForAccount(accountId) {
|
|
1262
|
+
const prefix = `${accountId}:`;
|
|
1263
|
+
for (const k of [...contextTokenStore.keys()]) if (k.startsWith(prefix)) contextTokenStore.delete(k);
|
|
1264
|
+
const filePath = resolveContextTokenFilePath(accountId);
|
|
1265
|
+
try {
|
|
1266
|
+
if (fs.existsSync(filePath)) fs.unlinkSync(filePath);
|
|
1267
|
+
} catch (err) {
|
|
1268
|
+
logger.warn(`clearContextTokensForAccount: failed to remove ${filePath}: ${String(err)}`);
|
|
1269
|
+
}
|
|
1270
|
+
logger.info(`clearContextTokensForAccount: cleared tokens for account=${accountId}`);
|
|
1271
|
+
}
|
|
1272
|
+
/** Store a context token for a given account+user pair (memory + disk). */
|
|
1273
|
+
function setContextToken(accountId, userId, token) {
|
|
1274
|
+
const k = contextTokenKey(accountId, userId);
|
|
1275
|
+
logger.debug(`setContextToken: key=${k}`);
|
|
1276
|
+
contextTokenStore.set(k, token);
|
|
1277
|
+
persistContextTokens(accountId);
|
|
1278
|
+
}
|
|
1279
|
+
/** Retrieve the cached context token for a given account+user pair. */
|
|
1280
|
+
function getContextToken(accountId, userId) {
|
|
1281
|
+
const k = contextTokenKey(accountId, userId);
|
|
1282
|
+
const val = contextTokenStore.get(k);
|
|
1283
|
+
logger.debug(`getContextToken: key=${k} found=${val !== void 0} storeSize=${contextTokenStore.size}`);
|
|
1284
|
+
return val;
|
|
1285
|
+
}
|
|
1286
|
+
/**
|
|
1287
|
+
* Find all accountIds that have an active contextToken for the given userId.
|
|
1288
|
+
* Used to infer the sending bot account from the recipient address when
|
|
1289
|
+
* accountId is not explicitly provided (e.g. cron delivery).
|
|
1290
|
+
*
|
|
1291
|
+
* Returns all matching accountIds (not just the first) so the caller can
|
|
1292
|
+
* detect ambiguity when multiple accounts have sessions with the same user.
|
|
1293
|
+
*/
|
|
1294
|
+
function findAccountIdsByContextToken(accountIds, userId) {
|
|
1295
|
+
return accountIds.filter((id) => contextTokenStore.has(contextTokenKey(id, userId)));
|
|
1296
|
+
}
|
|
1297
|
+
function generateMessageSid() {
|
|
1298
|
+
return generateId("openclaw-weixin");
|
|
1299
|
+
}
|
|
1300
|
+
/** Returns true if the message item is a media type (image, video, file, or voice). */
|
|
1301
|
+
function isMediaItem(item) {
|
|
1302
|
+
return item.type === MessageItemType.IMAGE || item.type === MessageItemType.VIDEO || item.type === MessageItemType.FILE || item.type === MessageItemType.VOICE;
|
|
1303
|
+
}
|
|
1304
|
+
function bodyFromItemList(itemList) {
|
|
1305
|
+
if (!itemList?.length) return "";
|
|
1306
|
+
for (const item of itemList) {
|
|
1307
|
+
if (item.type === MessageItemType.TEXT && item.text_item?.text != null) {
|
|
1308
|
+
const text = String(item.text_item.text);
|
|
1309
|
+
const ref = item.ref_msg;
|
|
1310
|
+
if (!ref) return text;
|
|
1311
|
+
if (ref.message_item && isMediaItem(ref.message_item)) return text;
|
|
1312
|
+
const parts = [];
|
|
1313
|
+
if (ref.title) parts.push(ref.title);
|
|
1314
|
+
if (ref.message_item) {
|
|
1315
|
+
const refBody = bodyFromItemList([ref.message_item]);
|
|
1316
|
+
if (refBody) parts.push(refBody);
|
|
1317
|
+
}
|
|
1318
|
+
if (!parts.length) return text;
|
|
1319
|
+
return `[引用: ${parts.join(" | ")}]\n${text}`;
|
|
1320
|
+
}
|
|
1321
|
+
if (item.type === MessageItemType.VOICE && item.voice_item?.text) return item.voice_item.text;
|
|
1322
|
+
}
|
|
1323
|
+
return "";
|
|
1324
|
+
}
|
|
1325
|
+
/**
|
|
1326
|
+
* Convert a WeixinMessage from getUpdates to the inbound MsgContext for the core pipeline.
|
|
1327
|
+
* Media: only pass MediaPath (local file, after CDN download + decrypt).
|
|
1328
|
+
* We never pass MediaUrl — the upstream CDN URL is encrypted/auth-only.
|
|
1329
|
+
* Priority when multiple media types present: image > video > file > voice.
|
|
1330
|
+
*/
|
|
1331
|
+
function weixinMessageToMsgContext(msg, accountId, opts) {
|
|
1332
|
+
const from_user_id = msg.from_user_id ?? "";
|
|
1333
|
+
const ctx = {
|
|
1334
|
+
Body: bodyFromItemList(msg.item_list),
|
|
1335
|
+
From: from_user_id,
|
|
1336
|
+
To: from_user_id,
|
|
1337
|
+
AccountId: accountId,
|
|
1338
|
+
OriginatingChannel: "openclaw-weixin",
|
|
1339
|
+
OriginatingTo: from_user_id,
|
|
1340
|
+
MessageSid: generateMessageSid(),
|
|
1341
|
+
Timestamp: msg.create_time_ms,
|
|
1342
|
+
Provider: "openclaw-weixin",
|
|
1343
|
+
ChatType: "direct"
|
|
1344
|
+
};
|
|
1345
|
+
if (msg.context_token) ctx.context_token = msg.context_token;
|
|
1346
|
+
if (opts?.decryptedPicPath) {
|
|
1347
|
+
ctx.MediaPath = opts.decryptedPicPath;
|
|
1348
|
+
ctx.MediaType = "image/*";
|
|
1349
|
+
} else if (opts?.decryptedVideoPath) {
|
|
1350
|
+
ctx.MediaPath = opts.decryptedVideoPath;
|
|
1351
|
+
ctx.MediaType = "video/mp4";
|
|
1352
|
+
} else if (opts?.decryptedFilePath) {
|
|
1353
|
+
ctx.MediaPath = opts.decryptedFilePath;
|
|
1354
|
+
ctx.MediaType = opts.fileMediaType ?? "application/octet-stream";
|
|
1355
|
+
} else if (opts?.decryptedVoicePath) {
|
|
1356
|
+
ctx.MediaPath = opts.decryptedVoicePath;
|
|
1357
|
+
ctx.MediaType = opts.voiceMediaType ?? "audio/wav";
|
|
1358
|
+
}
|
|
1359
|
+
return ctx;
|
|
1360
|
+
}
|
|
1361
|
+
/** Extract the context_token from an inbound WeixinMsgContext. */
|
|
1362
|
+
function getContextTokenFromMsgContext(ctx) {
|
|
1363
|
+
return ctx.context_token;
|
|
1364
|
+
}
|
|
1365
|
+
//#endregion
|
|
1366
|
+
//#region extensions/weixin/src/messaging/outbound-hooks.ts
|
|
1367
|
+
const CHANNEL_ID = "openclaw-weixin";
|
|
1368
|
+
/**
|
|
1369
|
+
* Run message_sending hook before sending.
|
|
1370
|
+
* Returns the (possibly modified) text content plus a cancelled flag.
|
|
1371
|
+
* Hook errors are caught and logged — sending proceeds regardless.
|
|
1372
|
+
*/
|
|
1373
|
+
async function applyWeixinMessageSendingHook(params) {
|
|
1374
|
+
const hookRunner = getGlobalHookRunner();
|
|
1375
|
+
if (!hookRunner?.hasHooks("message_sending")) return {
|
|
1376
|
+
cancelled: false,
|
|
1377
|
+
text: params.text
|
|
1378
|
+
};
|
|
1379
|
+
try {
|
|
1380
|
+
const hookResult = await hookRunner.runMessageSending({
|
|
1381
|
+
to: params.to,
|
|
1382
|
+
content: params.text,
|
|
1383
|
+
metadata: {
|
|
1384
|
+
channel: CHANNEL_ID,
|
|
1385
|
+
accountId: params.accountId,
|
|
1386
|
+
runId: params.runId,
|
|
1387
|
+
...params.mediaUrl ? { mediaUrls: [params.mediaUrl] } : {}
|
|
1388
|
+
}
|
|
1389
|
+
}, {
|
|
1390
|
+
channelId: CHANNEL_ID,
|
|
1391
|
+
accountId: params.accountId
|
|
1392
|
+
});
|
|
1393
|
+
if (hookResult?.cancel) return {
|
|
1394
|
+
cancelled: true,
|
|
1395
|
+
text: params.text
|
|
1396
|
+
};
|
|
1397
|
+
return {
|
|
1398
|
+
cancelled: false,
|
|
1399
|
+
text: hookResult?.content ?? params.text
|
|
1400
|
+
};
|
|
1401
|
+
} catch (err) {
|
|
1402
|
+
logger.warn(`message_sending hook error, proceeding with send: ${String(err)}`);
|
|
1403
|
+
return {
|
|
1404
|
+
cancelled: false,
|
|
1405
|
+
text: params.text
|
|
1406
|
+
};
|
|
1407
|
+
}
|
|
1408
|
+
}
|
|
1409
|
+
/**
|
|
1410
|
+
* Fire message_sent hook (fire-and-forget) after a send attempt.
|
|
1411
|
+
*/
|
|
1412
|
+
function emitWeixinMessageSent(params) {
|
|
1413
|
+
const hookRunner = getGlobalHookRunner();
|
|
1414
|
+
if (!hookRunner?.hasHooks("message_sent")) return;
|
|
1415
|
+
const canonical = buildCanonicalSentMessageHookContext({
|
|
1416
|
+
to: params.to,
|
|
1417
|
+
content: params.content,
|
|
1418
|
+
success: params.success,
|
|
1419
|
+
error: params.error,
|
|
1420
|
+
channelId: CHANNEL_ID,
|
|
1421
|
+
accountId: params.accountId,
|
|
1422
|
+
conversationId: params.to,
|
|
1423
|
+
runId: params.runId
|
|
1424
|
+
});
|
|
1425
|
+
fireAndForgetHook(Promise.resolve(hookRunner.runMessageSent(toPluginMessageSentEvent(canonical), toPluginMessageContext(canonical))), "weixin: message_sent plugin hook failed");
|
|
1426
|
+
}
|
|
1427
|
+
//#endregion
|
|
1428
|
+
//#region extensions/weixin/src/messaging/markdown-filter.ts
|
|
1429
|
+
/**
|
|
1430
|
+
* Streaming markdown filter — character-level state machine that strips
|
|
1431
|
+
* unsupported markdown syntax on-the-fly.
|
|
1432
|
+
*
|
|
1433
|
+
* Outputs as much filtered text as possible on each `feed()` call, only
|
|
1434
|
+
* holding back the minimum characters needed for pattern disambiguation
|
|
1435
|
+
* (e.g. a trailing `*` that might become `***`).
|
|
1436
|
+
*
|
|
1437
|
+
* Constructs passed through (not filtered):
|
|
1438
|
+
* - Code fences (```)
|
|
1439
|
+
* - Inline code (`)
|
|
1440
|
+
* - Tables (|...|)
|
|
1441
|
+
* - Horizontal rules (---, ***, ___)
|
|
1442
|
+
* - Bold (**)
|
|
1443
|
+
* - Italic/bold-italic wrapping non-CJK content
|
|
1444
|
+
*
|
|
1445
|
+
* Constructs filtered (markers stripped, content kept):
|
|
1446
|
+
* - Italic/bold-italic wrapping CJK content
|
|
1447
|
+
* - Headings H5/H6 (#####, ######)
|
|
1448
|
+
* - Images () — removed entirely
|
|
1449
|
+
*
|
|
1450
|
+
* States:
|
|
1451
|
+
* - **sol** (start-of-line): checks for line-start patterns (```, >, #####, indent)
|
|
1452
|
+
* - **body**: scans for inline patterns (![, ~~, ***) and outputs safe chars
|
|
1453
|
+
* - **fence**: inside a fenced code block, passes through until closing ```
|
|
1454
|
+
* - **inline**: accumulating content inside an inline marker pair
|
|
1455
|
+
*/
|
|
1456
|
+
var StreamingMarkdownFilter = class StreamingMarkdownFilter {
|
|
1457
|
+
constructor() {
|
|
1458
|
+
this.buf = "";
|
|
1459
|
+
this.fence = false;
|
|
1460
|
+
this.sol = true;
|
|
1461
|
+
this.inl = null;
|
|
1462
|
+
}
|
|
1463
|
+
feed(delta) {
|
|
1464
|
+
this.buf += delta;
|
|
1465
|
+
return this.pump(false);
|
|
1466
|
+
}
|
|
1467
|
+
flush() {
|
|
1468
|
+
return this.pump(true);
|
|
1469
|
+
}
|
|
1470
|
+
pump(eof) {
|
|
1471
|
+
let out = "";
|
|
1472
|
+
while (this.buf) {
|
|
1473
|
+
const sLen = this.buf.length;
|
|
1474
|
+
const sSol = this.sol;
|
|
1475
|
+
const sFence = this.fence;
|
|
1476
|
+
const sInl = this.inl;
|
|
1477
|
+
if (this.fence) out += this.pumpFence(eof);
|
|
1478
|
+
else if (this.inl) out += this.pumpInline(eof);
|
|
1479
|
+
else if (this.sol) out += this.pumpSOL(eof);
|
|
1480
|
+
else out += this.pumpBody(eof);
|
|
1481
|
+
if (this.buf.length === sLen && this.sol === sSol && this.fence === sFence && this.inl === sInl) break;
|
|
1482
|
+
}
|
|
1483
|
+
if (eof && this.inl) {
|
|
1484
|
+
out += ({
|
|
1485
|
+
image: "![",
|
|
1486
|
+
bold3: "***",
|
|
1487
|
+
italic: "*",
|
|
1488
|
+
ubold3: "___",
|
|
1489
|
+
uitalic: "_"
|
|
1490
|
+
}[this.inl.type] ?? "") + this.inl.acc;
|
|
1491
|
+
this.inl = null;
|
|
1492
|
+
}
|
|
1493
|
+
return out;
|
|
1494
|
+
}
|
|
1495
|
+
/** Inside a code fence: pass content and markers through verbatim. */
|
|
1496
|
+
pumpFence(eof) {
|
|
1497
|
+
if (this.sol) {
|
|
1498
|
+
if (this.buf.length < 3 && !eof) return "";
|
|
1499
|
+
if (this.buf.startsWith("```")) {
|
|
1500
|
+
const nl = this.buf.indexOf("\n", 3);
|
|
1501
|
+
if (nl !== -1) {
|
|
1502
|
+
this.fence = false;
|
|
1503
|
+
const line = this.buf.slice(0, nl + 1);
|
|
1504
|
+
this.buf = this.buf.slice(nl + 1);
|
|
1505
|
+
this.sol = true;
|
|
1506
|
+
return line;
|
|
1507
|
+
}
|
|
1508
|
+
if (eof) {
|
|
1509
|
+
this.fence = false;
|
|
1510
|
+
const line = this.buf;
|
|
1511
|
+
this.buf = "";
|
|
1512
|
+
return line;
|
|
1513
|
+
}
|
|
1514
|
+
return "";
|
|
1515
|
+
}
|
|
1516
|
+
this.sol = false;
|
|
1517
|
+
}
|
|
1518
|
+
const nl = this.buf.indexOf("\n");
|
|
1519
|
+
if (nl !== -1) {
|
|
1520
|
+
const chunk = this.buf.slice(0, nl + 1);
|
|
1521
|
+
this.buf = this.buf.slice(nl + 1);
|
|
1522
|
+
this.sol = true;
|
|
1523
|
+
return chunk;
|
|
1524
|
+
}
|
|
1525
|
+
const chunk = this.buf;
|
|
1526
|
+
this.buf = "";
|
|
1527
|
+
return chunk;
|
|
1528
|
+
}
|
|
1529
|
+
/** At start of line: detect and consume line-start patterns, then transition to body. */
|
|
1530
|
+
pumpSOL(eof) {
|
|
1531
|
+
const b = this.buf;
|
|
1532
|
+
if (b[0] === "\n") {
|
|
1533
|
+
this.buf = b.slice(1);
|
|
1534
|
+
return "\n";
|
|
1535
|
+
}
|
|
1536
|
+
if (b[0] === "`") {
|
|
1537
|
+
if (b.length < 3 && !eof) return "";
|
|
1538
|
+
if (b.startsWith("```")) {
|
|
1539
|
+
const nl = b.indexOf("\n", 3);
|
|
1540
|
+
if (nl !== -1) {
|
|
1541
|
+
this.fence = true;
|
|
1542
|
+
const line = b.slice(0, nl + 1);
|
|
1543
|
+
this.buf = b.slice(nl + 1);
|
|
1544
|
+
this.sol = true;
|
|
1545
|
+
return line;
|
|
1546
|
+
}
|
|
1547
|
+
if (eof) {
|
|
1548
|
+
this.buf = "";
|
|
1549
|
+
return b;
|
|
1550
|
+
}
|
|
1551
|
+
return "";
|
|
1552
|
+
}
|
|
1553
|
+
this.sol = false;
|
|
1554
|
+
return "";
|
|
1555
|
+
}
|
|
1556
|
+
if (b[0] === ">") {
|
|
1557
|
+
this.sol = false;
|
|
1558
|
+
return "";
|
|
1559
|
+
}
|
|
1560
|
+
if (b[0] === "#") {
|
|
1561
|
+
let n = 0;
|
|
1562
|
+
while (n < b.length && b[n] === "#") n++;
|
|
1563
|
+
if (n === b.length && !eof) return "";
|
|
1564
|
+
if (n >= 5 && n <= 6 && n < b.length && b[n] === " ") {
|
|
1565
|
+
this.buf = b.slice(n + 1);
|
|
1566
|
+
this.sol = false;
|
|
1567
|
+
return "";
|
|
1568
|
+
}
|
|
1569
|
+
this.sol = false;
|
|
1570
|
+
return "";
|
|
1571
|
+
}
|
|
1572
|
+
if (b[0] === " " || b[0] === " ") {
|
|
1573
|
+
if (b.search(/[^ \t]/) === -1 && !eof) return "";
|
|
1574
|
+
this.sol = false;
|
|
1575
|
+
return "";
|
|
1576
|
+
}
|
|
1577
|
+
if (b[0] === "-" || b[0] === "*" || b[0] === "_") {
|
|
1578
|
+
const ch = b[0];
|
|
1579
|
+
let j = 0;
|
|
1580
|
+
while (j < b.length && (b[j] === ch || b[j] === " ")) j++;
|
|
1581
|
+
if (j === b.length && !eof) return "";
|
|
1582
|
+
if (j === b.length || b[j] === "\n") {
|
|
1583
|
+
let count = 0;
|
|
1584
|
+
for (let k = 0; k < j; k++) if (b[k] === ch) count++;
|
|
1585
|
+
if (count >= 3) {
|
|
1586
|
+
if (j < b.length) {
|
|
1587
|
+
this.buf = b.slice(j + 1);
|
|
1588
|
+
this.sol = true;
|
|
1589
|
+
return b.slice(0, j + 1);
|
|
1590
|
+
}
|
|
1591
|
+
this.buf = "";
|
|
1592
|
+
return b;
|
|
1593
|
+
}
|
|
1594
|
+
}
|
|
1595
|
+
this.sol = false;
|
|
1596
|
+
return "";
|
|
1597
|
+
}
|
|
1598
|
+
this.sol = false;
|
|
1599
|
+
return "";
|
|
1600
|
+
}
|
|
1601
|
+
/** Scan line body for inline pattern triggers; output safe chars eagerly. */
|
|
1602
|
+
pumpBody(eof) {
|
|
1603
|
+
let out = "";
|
|
1604
|
+
let i = 0;
|
|
1605
|
+
while (i < this.buf.length) {
|
|
1606
|
+
const c = this.buf[i];
|
|
1607
|
+
if (c === "\n") {
|
|
1608
|
+
out += this.buf.slice(0, i + 1);
|
|
1609
|
+
this.buf = this.buf.slice(i + 1);
|
|
1610
|
+
this.sol = true;
|
|
1611
|
+
return out;
|
|
1612
|
+
}
|
|
1613
|
+
if (c === "!" && i + 1 < this.buf.length && this.buf[i + 1] === "[") {
|
|
1614
|
+
out += this.buf.slice(0, i);
|
|
1615
|
+
this.buf = this.buf.slice(i + 2);
|
|
1616
|
+
this.inl = {
|
|
1617
|
+
type: "image",
|
|
1618
|
+
acc: ""
|
|
1619
|
+
};
|
|
1620
|
+
return out;
|
|
1621
|
+
}
|
|
1622
|
+
if (c === "~") {
|
|
1623
|
+
i++;
|
|
1624
|
+
continue;
|
|
1625
|
+
}
|
|
1626
|
+
if (c === "*") {
|
|
1627
|
+
if (i + 2 < this.buf.length && this.buf[i + 1] === "*" && this.buf[i + 2] === "*") {
|
|
1628
|
+
out += this.buf.slice(0, i);
|
|
1629
|
+
this.buf = this.buf.slice(i + 3);
|
|
1630
|
+
this.inl = {
|
|
1631
|
+
type: "bold3",
|
|
1632
|
+
acc: ""
|
|
1633
|
+
};
|
|
1634
|
+
return out;
|
|
1635
|
+
}
|
|
1636
|
+
if (i + 1 < this.buf.length && this.buf[i + 1] === "*") {
|
|
1637
|
+
i += 2;
|
|
1638
|
+
continue;
|
|
1639
|
+
}
|
|
1640
|
+
if (i + 1 < this.buf.length && this.buf[i + 1] !== " " && this.buf[i + 1] !== "\n") {
|
|
1641
|
+
out += this.buf.slice(0, i);
|
|
1642
|
+
this.buf = this.buf.slice(i + 1);
|
|
1643
|
+
this.inl = {
|
|
1644
|
+
type: "italic",
|
|
1645
|
+
acc: ""
|
|
1646
|
+
};
|
|
1647
|
+
return out;
|
|
1648
|
+
}
|
|
1649
|
+
i++;
|
|
1650
|
+
continue;
|
|
1651
|
+
}
|
|
1652
|
+
if (c === "_") {
|
|
1653
|
+
if (i + 2 < this.buf.length && this.buf[i + 1] === "_" && this.buf[i + 2] === "_") {
|
|
1654
|
+
out += this.buf.slice(0, i);
|
|
1655
|
+
this.buf = this.buf.slice(i + 3);
|
|
1656
|
+
this.inl = {
|
|
1657
|
+
type: "ubold3",
|
|
1658
|
+
acc: ""
|
|
1659
|
+
};
|
|
1660
|
+
return out;
|
|
1661
|
+
}
|
|
1662
|
+
if (i + 1 < this.buf.length && this.buf[i + 1] === "_") {
|
|
1663
|
+
i += 2;
|
|
1664
|
+
continue;
|
|
1665
|
+
}
|
|
1666
|
+
if (i + 1 < this.buf.length && this.buf[i + 1] !== " " && this.buf[i + 1] !== "\n") {
|
|
1667
|
+
out += this.buf.slice(0, i);
|
|
1668
|
+
this.buf = this.buf.slice(i + 1);
|
|
1669
|
+
this.inl = {
|
|
1670
|
+
type: "uitalic",
|
|
1671
|
+
acc: ""
|
|
1672
|
+
};
|
|
1673
|
+
return out;
|
|
1674
|
+
}
|
|
1675
|
+
i++;
|
|
1676
|
+
continue;
|
|
1677
|
+
}
|
|
1678
|
+
i++;
|
|
1679
|
+
}
|
|
1680
|
+
let hold = 0;
|
|
1681
|
+
if (!eof) {
|
|
1682
|
+
if (this.buf.endsWith("**")) hold = 2;
|
|
1683
|
+
else if (this.buf.endsWith("__")) hold = 2;
|
|
1684
|
+
else if (this.buf.endsWith("*")) hold = 1;
|
|
1685
|
+
else if (this.buf.endsWith("_")) hold = 1;
|
|
1686
|
+
else if (this.buf.endsWith("!")) hold = 1;
|
|
1687
|
+
}
|
|
1688
|
+
out += this.buf.slice(0, this.buf.length - hold);
|
|
1689
|
+
this.buf = hold > 0 ? this.buf.slice(-hold) : "";
|
|
1690
|
+
return out;
|
|
1691
|
+
}
|
|
1692
|
+
/** Accumulate inline content until closing marker is found. */
|
|
1693
|
+
pumpInline(_eof) {
|
|
1694
|
+
if (!this.inl) return "";
|
|
1695
|
+
this.inl.acc += this.buf;
|
|
1696
|
+
this.buf = "";
|
|
1697
|
+
switch (this.inl.type) {
|
|
1698
|
+
case "bold3": {
|
|
1699
|
+
const idx = this.inl.acc.indexOf("***");
|
|
1700
|
+
if (idx !== -1) {
|
|
1701
|
+
const content = this.inl.acc.slice(0, idx);
|
|
1702
|
+
this.buf = this.inl.acc.slice(idx + 3);
|
|
1703
|
+
this.inl = null;
|
|
1704
|
+
if (StreamingMarkdownFilter.containsCJK(content)) return content;
|
|
1705
|
+
return `***${content}***`;
|
|
1706
|
+
}
|
|
1707
|
+
return "";
|
|
1708
|
+
}
|
|
1709
|
+
case "ubold3": {
|
|
1710
|
+
const idx = this.inl.acc.indexOf("___");
|
|
1711
|
+
if (idx !== -1) {
|
|
1712
|
+
const content = this.inl.acc.slice(0, idx);
|
|
1713
|
+
this.buf = this.inl.acc.slice(idx + 3);
|
|
1714
|
+
this.inl = null;
|
|
1715
|
+
if (StreamingMarkdownFilter.containsCJK(content)) return content;
|
|
1716
|
+
return `___${content}___`;
|
|
1717
|
+
}
|
|
1718
|
+
return "";
|
|
1719
|
+
}
|
|
1720
|
+
case "italic":
|
|
1721
|
+
for (let j = 0; j < this.inl.acc.length; j++) {
|
|
1722
|
+
if (this.inl.acc[j] === "\n") {
|
|
1723
|
+
const r = "*" + this.inl.acc.slice(0, j + 1);
|
|
1724
|
+
this.buf = this.inl.acc.slice(j + 1);
|
|
1725
|
+
this.inl = null;
|
|
1726
|
+
this.sol = true;
|
|
1727
|
+
return r;
|
|
1728
|
+
}
|
|
1729
|
+
if (this.inl.acc[j] === "*") {
|
|
1730
|
+
if (j + 1 < this.inl.acc.length && this.inl.acc[j + 1] === "*") {
|
|
1731
|
+
j++;
|
|
1732
|
+
continue;
|
|
1733
|
+
}
|
|
1734
|
+
const content = this.inl.acc.slice(0, j);
|
|
1735
|
+
this.buf = this.inl.acc.slice(j + 1);
|
|
1736
|
+
this.inl = null;
|
|
1737
|
+
if (StreamingMarkdownFilter.containsCJK(content)) return content;
|
|
1738
|
+
return `*${content}*`;
|
|
1739
|
+
}
|
|
1740
|
+
}
|
|
1741
|
+
return "";
|
|
1742
|
+
case "uitalic":
|
|
1743
|
+
for (let j = 0; j < this.inl.acc.length; j++) {
|
|
1744
|
+
if (this.inl.acc[j] === "\n") {
|
|
1745
|
+
const r = "_" + this.inl.acc.slice(0, j + 1);
|
|
1746
|
+
this.buf = this.inl.acc.slice(j + 1);
|
|
1747
|
+
this.inl = null;
|
|
1748
|
+
this.sol = true;
|
|
1749
|
+
return r;
|
|
1750
|
+
}
|
|
1751
|
+
if (this.inl.acc[j] === "_") {
|
|
1752
|
+
if (j + 1 < this.inl.acc.length && this.inl.acc[j + 1] === "_") {
|
|
1753
|
+
j++;
|
|
1754
|
+
continue;
|
|
1755
|
+
}
|
|
1756
|
+
const content = this.inl.acc.slice(0, j);
|
|
1757
|
+
this.buf = this.inl.acc.slice(j + 1);
|
|
1758
|
+
this.inl = null;
|
|
1759
|
+
if (StreamingMarkdownFilter.containsCJK(content)) return content;
|
|
1760
|
+
return `_${content}_`;
|
|
1761
|
+
}
|
|
1762
|
+
}
|
|
1763
|
+
return "";
|
|
1764
|
+
case "image": {
|
|
1765
|
+
const cb = this.inl.acc.indexOf("]");
|
|
1766
|
+
if (cb === -1) return "";
|
|
1767
|
+
if (cb + 1 >= this.inl.acc.length) return "";
|
|
1768
|
+
if (this.inl.acc[cb + 1] !== "(") {
|
|
1769
|
+
const r = "![" + this.inl.acc.slice(0, cb + 1);
|
|
1770
|
+
this.buf = this.inl.acc.slice(cb + 1);
|
|
1771
|
+
this.inl = null;
|
|
1772
|
+
return r;
|
|
1773
|
+
}
|
|
1774
|
+
const cp = this.inl.acc.indexOf(")", cb + 2);
|
|
1775
|
+
if (cp !== -1) {
|
|
1776
|
+
this.buf = this.inl.acc.slice(cp + 1);
|
|
1777
|
+
this.inl = null;
|
|
1778
|
+
return "";
|
|
1779
|
+
}
|
|
1780
|
+
return "";
|
|
1781
|
+
}
|
|
1782
|
+
}
|
|
1783
|
+
return "";
|
|
1784
|
+
}
|
|
1785
|
+
static containsCJK(text) {
|
|
1786
|
+
return /[\u2E80-\u9FFF\uAC00-\uD7AF\uF900-\uFAFF]/.test(text);
|
|
1787
|
+
}
|
|
1788
|
+
};
|
|
1789
|
+
//#endregion
|
|
1790
|
+
//#region extensions/weixin/src/messaging/send.ts
|
|
1791
|
+
function generateClientId() {
|
|
1792
|
+
return generateId("openclaw-weixin");
|
|
1793
|
+
}
|
|
1794
|
+
/** Build a SendMessageReq containing a single text message. */
|
|
1795
|
+
function buildTextMessageReq(params) {
|
|
1796
|
+
const { to, text, contextToken, runId, clientId } = params;
|
|
1797
|
+
const item_list = text ? [{
|
|
1798
|
+
type: MessageItemType.TEXT,
|
|
1799
|
+
text_item: { text }
|
|
1800
|
+
}] : [];
|
|
1801
|
+
return { msg: {
|
|
1802
|
+
from_user_id: "",
|
|
1803
|
+
to_user_id: to,
|
|
1804
|
+
client_id: clientId,
|
|
1805
|
+
message_type: MessageType.BOT,
|
|
1806
|
+
message_state: MessageState.FINISH,
|
|
1807
|
+
item_list: item_list.length ? item_list : void 0,
|
|
1808
|
+
context_token: contextToken ?? void 0,
|
|
1809
|
+
run_id: runId ?? void 0
|
|
1810
|
+
} };
|
|
1811
|
+
}
|
|
1812
|
+
/** Build a SendMessageReq from a reply payload (text only; image send uses sendImageMessageWeixin). */
|
|
1813
|
+
function buildSendMessageReq(params) {
|
|
1814
|
+
const { to, contextToken, runId, payload, clientId } = params;
|
|
1815
|
+
return buildTextMessageReq({
|
|
1816
|
+
to,
|
|
1817
|
+
text: payload.text ?? "",
|
|
1818
|
+
contextToken,
|
|
1819
|
+
runId,
|
|
1820
|
+
clientId
|
|
1821
|
+
});
|
|
1822
|
+
}
|
|
1823
|
+
/**
|
|
1824
|
+
* Send a plain text message downstream.
|
|
1825
|
+
*/
|
|
1826
|
+
async function sendMessageWeixin(params) {
|
|
1827
|
+
const { to, text, opts } = params;
|
|
1828
|
+
if (!opts.contextToken) logger.warn(`sendMessageWeixin: contextToken missing for to=${to}, sending without context`);
|
|
1829
|
+
const clientId = generateClientId();
|
|
1830
|
+
const req = buildSendMessageReq({
|
|
1831
|
+
to,
|
|
1832
|
+
contextToken: opts.contextToken,
|
|
1833
|
+
runId: opts.runId,
|
|
1834
|
+
payload: { text },
|
|
1835
|
+
clientId
|
|
1836
|
+
});
|
|
1837
|
+
try {
|
|
1838
|
+
await sendMessage({
|
|
1839
|
+
baseUrl: opts.baseUrl,
|
|
1840
|
+
token: opts.token,
|
|
1841
|
+
timeoutMs: opts.timeoutMs,
|
|
1842
|
+
body: req
|
|
1843
|
+
});
|
|
1844
|
+
} catch (err) {
|
|
1845
|
+
logger.error(`sendMessageWeixin: failed to=${to} clientId=${clientId} err=${String(err)}`);
|
|
1846
|
+
throw err;
|
|
1847
|
+
}
|
|
1848
|
+
return { messageId: clientId };
|
|
1849
|
+
}
|
|
1850
|
+
/** Send a single structured MessageItem downstream. */
|
|
1851
|
+
async function sendMessageItemWeixin(params) {
|
|
1852
|
+
const { to, item, opts } = params;
|
|
1853
|
+
if (!opts.contextToken) logger.warn(`sendMessageItemWeixin: contextToken missing for to=${to}, sending without context`);
|
|
1854
|
+
const clientId = params.clientId ?? generateClientId();
|
|
1855
|
+
const req = { msg: {
|
|
1856
|
+
from_user_id: "",
|
|
1857
|
+
to_user_id: to,
|
|
1858
|
+
client_id: clientId,
|
|
1859
|
+
message_type: MessageType.BOT,
|
|
1860
|
+
message_state: MessageState.FINISH,
|
|
1861
|
+
item_list: [item],
|
|
1862
|
+
context_token: opts.contextToken ?? void 0,
|
|
1863
|
+
run_id: opts.runId
|
|
1864
|
+
} };
|
|
1865
|
+
try {
|
|
1866
|
+
await sendMessage({
|
|
1867
|
+
baseUrl: opts.baseUrl,
|
|
1868
|
+
token: opts.token,
|
|
1869
|
+
timeoutMs: opts.timeoutMs,
|
|
1870
|
+
body: req
|
|
1871
|
+
});
|
|
1872
|
+
} catch (err) {
|
|
1873
|
+
logger.error(`${params.label ?? "sendMessageItemWeixin"}: failed to=${to} clientId=${clientId} err=${String(err)}`);
|
|
1874
|
+
throw err;
|
|
1875
|
+
}
|
|
1876
|
+
return { messageId: clientId };
|
|
1877
|
+
}
|
|
1878
|
+
/**
|
|
1879
|
+
* Send one or more MessageItems (optionally preceded by a text caption) downstream.
|
|
1880
|
+
* Each item is sent as its own request so that item_list always has exactly one entry.
|
|
1881
|
+
*/
|
|
1882
|
+
async function sendMediaItems(params) {
|
|
1883
|
+
const { to, text, mediaItem, opts, label } = params;
|
|
1884
|
+
const runId = opts.runId;
|
|
1885
|
+
const items = [];
|
|
1886
|
+
if (text) items.push({
|
|
1887
|
+
type: MessageItemType.TEXT,
|
|
1888
|
+
text_item: { text }
|
|
1889
|
+
});
|
|
1890
|
+
items.push(mediaItem);
|
|
1891
|
+
let lastClientId = "";
|
|
1892
|
+
for (const item of items) {
|
|
1893
|
+
lastClientId = generateClientId();
|
|
1894
|
+
const req = { msg: {
|
|
1895
|
+
from_user_id: "",
|
|
1896
|
+
to_user_id: to,
|
|
1897
|
+
client_id: lastClientId,
|
|
1898
|
+
message_type: MessageType.BOT,
|
|
1899
|
+
message_state: MessageState.FINISH,
|
|
1900
|
+
item_list: [item],
|
|
1901
|
+
context_token: opts.contextToken ?? void 0,
|
|
1902
|
+
run_id: runId
|
|
1903
|
+
} };
|
|
1904
|
+
try {
|
|
1905
|
+
await sendMessage({
|
|
1906
|
+
baseUrl: opts.baseUrl,
|
|
1907
|
+
token: opts.token,
|
|
1908
|
+
timeoutMs: opts.timeoutMs,
|
|
1909
|
+
body: req
|
|
1910
|
+
});
|
|
1911
|
+
} catch (err) {
|
|
1912
|
+
logger.error(`${label}: failed to=${to} clientId=${lastClientId} err=${String(err)}`);
|
|
1913
|
+
throw err;
|
|
1914
|
+
}
|
|
1915
|
+
}
|
|
1916
|
+
logger.info(`${label}: success to=${to} clientId=${lastClientId}`);
|
|
1917
|
+
return { messageId: lastClientId };
|
|
1918
|
+
}
|
|
1919
|
+
/**
|
|
1920
|
+
* Send an image message downstream using a previously uploaded file.
|
|
1921
|
+
* Optionally include a text caption as a separate TEXT item before the image.
|
|
1922
|
+
*
|
|
1923
|
+
* ImageItem fields:
|
|
1924
|
+
* - media.encrypt_query_param: CDN download param
|
|
1925
|
+
* - media.aes_key: AES key, base64-encoded
|
|
1926
|
+
* - mid_size: original ciphertext file size
|
|
1927
|
+
*/
|
|
1928
|
+
async function sendImageMessageWeixin(params) {
|
|
1929
|
+
const { to, text, uploaded, opts } = params;
|
|
1930
|
+
if (!opts.contextToken) logger.warn(`sendImageMessageWeixin: contextToken missing for to=${to}, sending without context`);
|
|
1931
|
+
logger.info(`sendImageMessageWeixin: to=${to} filekey=${uploaded.filekey} fileSize=${uploaded.fileSize} aeskey=present`);
|
|
1932
|
+
return sendMediaItems({
|
|
1933
|
+
to,
|
|
1934
|
+
text,
|
|
1935
|
+
mediaItem: {
|
|
1936
|
+
type: MessageItemType.IMAGE,
|
|
1937
|
+
image_item: {
|
|
1938
|
+
media: {
|
|
1939
|
+
encrypt_query_param: uploaded.downloadEncryptedQueryParam,
|
|
1940
|
+
aes_key: Buffer.from(uploaded.aeskey).toString("base64"),
|
|
1941
|
+
encrypt_type: 1
|
|
1942
|
+
},
|
|
1943
|
+
mid_size: uploaded.fileSizeCiphertext
|
|
1944
|
+
}
|
|
1945
|
+
},
|
|
1946
|
+
opts,
|
|
1947
|
+
label: "sendImageMessageWeixin"
|
|
1948
|
+
});
|
|
1949
|
+
}
|
|
1950
|
+
/**
|
|
1951
|
+
* Send a video message downstream using a previously uploaded file.
|
|
1952
|
+
* VideoItem: media (CDN ref), video_size (ciphertext bytes).
|
|
1953
|
+
* Includes an optional text caption sent as a separate TEXT item first.
|
|
1954
|
+
*/
|
|
1955
|
+
async function sendVideoMessageWeixin(params) {
|
|
1956
|
+
const { to, text, uploaded, opts } = params;
|
|
1957
|
+
if (!opts.contextToken) logger.warn(`sendVideoMessageWeixin: contextToken missing for to=${to}, sending without context`);
|
|
1958
|
+
return sendMediaItems({
|
|
1959
|
+
to,
|
|
1960
|
+
text,
|
|
1961
|
+
mediaItem: {
|
|
1962
|
+
type: MessageItemType.VIDEO,
|
|
1963
|
+
video_item: {
|
|
1964
|
+
media: {
|
|
1965
|
+
encrypt_query_param: uploaded.downloadEncryptedQueryParam,
|
|
1966
|
+
aes_key: Buffer.from(uploaded.aeskey).toString("base64"),
|
|
1967
|
+
encrypt_type: 1
|
|
1968
|
+
},
|
|
1969
|
+
video_size: uploaded.fileSizeCiphertext
|
|
1970
|
+
}
|
|
1971
|
+
},
|
|
1972
|
+
opts,
|
|
1973
|
+
label: "sendVideoMessageWeixin"
|
|
1974
|
+
});
|
|
1975
|
+
}
|
|
1976
|
+
/**
|
|
1977
|
+
* Send a file attachment downstream using a previously uploaded file.
|
|
1978
|
+
* FileItem: media (CDN ref), file_name, len (plaintext bytes as string).
|
|
1979
|
+
* Includes an optional text caption sent as a separate TEXT item first.
|
|
1980
|
+
*/
|
|
1981
|
+
async function sendFileMessageWeixin(params) {
|
|
1982
|
+
const { to, text, fileName, uploaded, opts } = params;
|
|
1983
|
+
if (!opts.contextToken) logger.warn(`sendFileMessageWeixin: contextToken missing for to=${to}, sending without context`);
|
|
1984
|
+
return sendMediaItems({
|
|
1985
|
+
to,
|
|
1986
|
+
text,
|
|
1987
|
+
mediaItem: {
|
|
1988
|
+
type: MessageItemType.FILE,
|
|
1989
|
+
file_item: {
|
|
1990
|
+
media: {
|
|
1991
|
+
encrypt_query_param: uploaded.downloadEncryptedQueryParam,
|
|
1992
|
+
aes_key: Buffer.from(uploaded.aeskey).toString("base64"),
|
|
1993
|
+
encrypt_type: 1
|
|
1994
|
+
},
|
|
1995
|
+
file_name: fileName,
|
|
1996
|
+
len: String(uploaded.fileSize)
|
|
1997
|
+
}
|
|
1998
|
+
},
|
|
1999
|
+
opts,
|
|
2000
|
+
label: "sendFileMessageWeixin"
|
|
2001
|
+
});
|
|
2002
|
+
}
|
|
2003
|
+
//#endregion
|
|
2004
|
+
//#region extensions/weixin/src/messaging/send-media.ts
|
|
2005
|
+
/**
|
|
2006
|
+
* Upload a local file and send it as a weixin message, routing by MIME type:
|
|
2007
|
+
* video/* → uploadVideoToWeixin + sendVideoMessageWeixin
|
|
2008
|
+
* image/* → uploadFileToWeixin + sendImageMessageWeixin
|
|
2009
|
+
* else → uploadFileAttachmentToWeixin + sendFileMessageWeixin
|
|
2010
|
+
*
|
|
2011
|
+
* Used by both the auto-reply deliver path (monitor.ts) and the outbound
|
|
2012
|
+
* sendMedia path (channel.ts) so they stay in sync.
|
|
2013
|
+
*/
|
|
2014
|
+
async function sendWeixinMediaFile(params) {
|
|
2015
|
+
const { filePath, to, text, opts, cdnBaseUrl } = params;
|
|
2016
|
+
const mime = getMimeFromFilename(filePath);
|
|
2017
|
+
const uploadOpts = {
|
|
2018
|
+
baseUrl: opts.baseUrl,
|
|
2019
|
+
token: opts.token
|
|
2020
|
+
};
|
|
2021
|
+
if (mime.startsWith("video/")) {
|
|
2022
|
+
logger.info(`[weixin] sendWeixinMediaFile: uploading video filePath=${filePath} to=${to}`);
|
|
2023
|
+
const uploaded = await uploadVideoToWeixin({
|
|
2024
|
+
filePath,
|
|
2025
|
+
toUserId: to,
|
|
2026
|
+
opts: uploadOpts,
|
|
2027
|
+
cdnBaseUrl
|
|
2028
|
+
});
|
|
2029
|
+
logger.info(`[weixin] sendWeixinMediaFile: video upload done filekey=${uploaded.filekey} size=${uploaded.fileSize}`);
|
|
2030
|
+
return sendVideoMessageWeixin({
|
|
2031
|
+
to,
|
|
2032
|
+
text,
|
|
2033
|
+
uploaded,
|
|
2034
|
+
opts
|
|
2035
|
+
});
|
|
2036
|
+
}
|
|
2037
|
+
if (mime.startsWith("image/")) {
|
|
2038
|
+
logger.info(`[weixin] sendWeixinMediaFile: uploading image filePath=${filePath} to=${to}`);
|
|
2039
|
+
const uploaded = await uploadFileToWeixin({
|
|
2040
|
+
filePath,
|
|
2041
|
+
toUserId: to,
|
|
2042
|
+
opts: uploadOpts,
|
|
2043
|
+
cdnBaseUrl
|
|
2044
|
+
});
|
|
2045
|
+
logger.info(`[weixin] sendWeixinMediaFile: image upload done filekey=${uploaded.filekey} size=${uploaded.fileSize}`);
|
|
2046
|
+
return sendImageMessageWeixin({
|
|
2047
|
+
to,
|
|
2048
|
+
text,
|
|
2049
|
+
uploaded,
|
|
2050
|
+
opts
|
|
2051
|
+
});
|
|
2052
|
+
}
|
|
2053
|
+
const fileName = path.basename(filePath);
|
|
2054
|
+
logger.info(`[weixin] sendWeixinMediaFile: uploading file attachment filePath=${filePath} name=${fileName} to=${to}`);
|
|
2055
|
+
const uploaded = await uploadFileAttachmentToWeixin({
|
|
2056
|
+
filePath,
|
|
2057
|
+
fileName,
|
|
2058
|
+
toUserId: to,
|
|
2059
|
+
opts: uploadOpts,
|
|
2060
|
+
cdnBaseUrl
|
|
2061
|
+
});
|
|
2062
|
+
logger.info(`[weixin] sendWeixinMediaFile: file upload done filekey=${uploaded.filekey} size=${uploaded.fileSize}`);
|
|
2063
|
+
return sendFileMessageWeixin({
|
|
2064
|
+
to,
|
|
2065
|
+
text,
|
|
2066
|
+
fileName,
|
|
2067
|
+
uploaded,
|
|
2068
|
+
opts
|
|
2069
|
+
});
|
|
2070
|
+
}
|
|
2071
|
+
//#endregion
|
|
2072
|
+
export { sendTyping as A, registerWeixinAccountId as B, pauseSession as C, getUpdates as D, getConfig as E, clearStaleAccountsForUserId as F, logger as G, saveWeixinAccount as H, deriveRawAccountId as I, resolveStateDir as K, listIndexedWeixinAccountIds as L, redactToken as M, CDN_BASE_URL as N, notifyStart as O, DEFAULT_BASE_URL as P, listWeixinAccountIds as R, getRemainingPauseMs as S, apiPostFetch as T, triggerWeixinChannelReload as U, resolveWeixinAccount as V, readFrameworkAllowFromList as W, TypingStatus as _, applyWeixinMessageSendingHook as a, decryptAesEcb as b, findAccountIdsByContextToken as c, isMediaItem as d, restoreContextTokens as f, MessageItemType as g, downloadRemoteImageToTemp as h, StreamingMarkdownFilter as i, redactBody as j, notifyStop as k, getContextToken as l, weixinMessageToMsgContext as m, sendMessageItemWeixin as n, emitWeixinMessageSent as o, setContextToken as p, sendMessageWeixin as r, clearContextTokensForAccount as s, sendWeixinMediaFile as t, getContextTokenFromMsgContext as u, getMimeFromFilename as v, apiGetFetch as w, assertSessionActive as x, buildCdnDownloadUrl as y, loadWeixinAccount as z };
|