remoteclaw 0.1.0-next.2abd2fa → 0.1.0-next.2e9a6cd
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/README.md +9 -7
- package/dist/accounts-A8jZK_v9.js +272 -0
- package/dist/accounts-BegPt5VR.js +36 -0
- package/dist/accounts-BmiimLpP.js +47 -0
- package/dist/accounts-Bomfgw0M.js +32 -0
- package/dist/accounts-Bpk-loA6.js +47 -0
- package/dist/accounts-DAdUdbPk.js +36 -0
- package/dist/accounts-WYyfAiie.js +270 -0
- package/dist/ack-reactions-CMDRj7fJ.js +446 -0
- package/dist/ack-reactions-D7VScSny.js +446 -0
- package/dist/acp-cli-BpMS0SsZ.js +1323 -0
- package/dist/acp-cli-DkXTlCpF.js +1317 -0
- package/dist/active-listener--FT8ewxl.js +37 -0
- package/dist/active-listener-C1StcdIA.js +37 -0
- package/dist/agent-C76P7tEr.js +703 -0
- package/dist/agent-helpers-CK3Obbsi.js +400 -0
- package/dist/agent-helpers-KHUla1K7.js +400 -0
- package/dist/agent-scope-BrDeaWWf.js +116 -0
- package/dist/agent-scope-DxqtYjuJ.js +114 -0
- package/dist/agent-ue8p9AIv.js +704 -0
- package/dist/agents--24oKN80.js +788 -0
- package/dist/agents.config-CWAUoPzG.js +116 -0
- package/dist/agents.config-Ck45E_ce.js +116 -0
- package/dist/audio-B85HoT7E.js +43 -0
- package/dist/audio-BbCUzndz.js +43 -0
- package/dist/audio-preflight-B3f0x3zu.js +69 -0
- package/dist/audio-preflight-Dv76vFTu.js +64 -0
- package/dist/audit-BAbBf2MU.js +3149 -0
- package/dist/audit-g55SYz1m.js +3149 -0
- package/dist/auth-Bq44qPUd.js +448 -0
- package/dist/auth-CVfoI--S.js +281 -0
- package/dist/auth-DTWpZJ1a.js +279 -0
- package/dist/auth-VItd2pwK.js +448 -0
- package/dist/banner-CyPQJybO.js +294 -0
- package/dist/binaries-DbgLoSWv.js +13 -0
- package/dist/bindings-6KojDoIi.js +69 -0
- package/dist/bindings-B6icMMUx.js +69 -0
- package/dist/bonjour-discovery-CQU4QbLK.js +378 -0
- package/dist/bonjour-discovery-D8aOnk3M.js +378 -0
- package/dist/boot/handler.js +42 -69
- package/dist/browser-cli-BH41geGr.js +1693 -0
- package/dist/browser-cli-u4nrjp1h.js +1688 -0
- package/dist/build-info.json +3 -3
- package/dist/call-CMDcRlGW.js +2826 -0
- package/dist/call-D5YKTYSM.js +2827 -0
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/catalog-CUY_iTaG.js +185 -0
- package/dist/catalog-p6W09S2j.js +185 -0
- package/dist/channel-account-context-CA2m93Kt.js +550 -0
- package/dist/channel-account-context-Las-t6RP.js +550 -0
- package/dist/channel-activity-BD603ehL.js +94 -0
- package/dist/channel-activity-CwiF_QMr.js +94 -0
- package/dist/channel-activity-daCpxHdT.js +292 -0
- package/dist/channel-options-CAlClffy.js +33 -0
- package/dist/channel-options-Hl_ep3UG.js +32 -0
- package/dist/channel-selection-CHJ7TumC.js +51 -0
- package/dist/channel-selection-DR7eW8UG.js +51 -0
- package/dist/channel-web-B79j9fSC.js +2134 -0
- package/dist/channel-web-DHTTcipm.js +2136 -0
- package/dist/channels-cli-DeZ95hcx.js +1427 -0
- package/dist/channels-cli-eUCi6jXk.js +1422 -0
- package/dist/channels-status-issues-By77REbh.js +18 -0
- package/dist/channels-status-issues-DXyOO-KH.js +18 -0
- package/dist/chat-envelope-BEDutlnF.js +248 -0
- package/dist/chat-envelope-vJJUdDE7.js +248 -0
- package/dist/chrome-BuAi16Rq.js +1732 -0
- package/dist/chrome-IR-2ukph.js +1733 -0
- package/dist/chunk-C1mQSjas.js +341 -0
- package/dist/chunk-D7VX4pmT.js +341 -0
- package/dist/clack-prompter-BX8SVxtP.js +122 -0
- package/dist/clack-prompter-D6HhVlZW.js +121 -0
- package/dist/cleanup-utils-DNd0wdKZ.js +94 -0
- package/dist/cli/daemon-cli.js +1 -1
- package/dist/cli-CK4Y43rx.js +131 -0
- package/dist/cli-Cha5Uk29.js +126 -0
- package/dist/clipboard-Cbj3McM_.js +31 -0
- package/dist/clipboard-Ne8gaWea.js +31 -0
- package/dist/command-format-D0vKipG9.js +32 -0
- package/dist/command-format-KkslAzwV.js +18 -0
- package/dist/command-logger/handler.js +3 -3
- package/dist/command-registry-07zlvSN8.js +215 -0
- package/dist/commands-DChC3pIF.js +41 -0
- package/dist/commands-DFHMoQgH.js +41 -0
- package/dist/commands-registry-BN04GIlJ.js +891 -0
- package/dist/commands-registry-DbS9NHeX.js +892 -0
- package/dist/common-DHHHAcmR.js +156 -0
- package/dist/common-De-Lakuh.js +156 -0
- package/dist/completion-cli--Jcg794c.js +452 -0
- package/dist/completion-cli-B8n7umme.js +452 -0
- package/dist/config-BupC6eiJ.js +4223 -0
- package/dist/config-CHDaGquZ.js +4225 -0
- package/dist/config-cli-Cu79BThx.js +242 -0
- package/dist/config-cli-DrJtiyW-.js +247 -0
- package/dist/config-guard-BLsqW1qt.js +98 -0
- package/dist/config-guard-NQ7jaYM4.js +75 -0
- package/dist/config-validation-BLllMW0t.js +18 -0
- package/dist/config-validation-DT29VEco.js +18 -0
- package/dist/configure-B25UEQnQ.js +889 -0
- package/dist/configure-CqMUE4Zw.js +891 -0
- package/dist/constants-BbAEYzFC.js +70 -0
- package/dist/constants-tLOgmZZ1.js +70 -0
- package/dist/control-auth-BFbDXKLK.js +397 -0
- package/dist/control-auth-BiiO-FNy.js +397 -0
- package/dist/control-ui/assets/index-CuY3pfh1.js +7716 -0
- package/dist/control-ui/assets/index-CuY3pfh1.js.map +1 -0
- package/dist/control-ui/assets/index-D_fjkN3g.css +1 -0
- package/dist/control-ui/index.html +2 -2
- package/dist/control-ui-assets-BlpSXjlT.js +186 -0
- package/dist/control-ui-assets-eJU2-yvs.js +186 -0
- package/dist/conversation-label-Bn5j3lUT.js +36 -0
- package/dist/conversation-label-L0QTtKji.js +36 -0
- package/dist/cron-cli-BV1o0UgM.js +491 -0
- package/dist/cron-cli-C8j-P8GF.js +496 -0
- package/dist/daemon-cli-BDvU0Xv6.js +1199 -0
- package/dist/daemon-cli-CoNl2Ugf.js +1197 -0
- package/dist/daemon-cli.js +53 -97
- package/dist/daemon-install-BMEnzWwq.js +60 -0
- package/dist/daemon-install-BkUJbdPC.js +55 -0
- package/dist/daemon-install-helpers-B9kMxC1v.js +462 -0
- package/dist/daemon-install-helpers-DoYR5z4H.js +462 -0
- package/dist/deliver-D8P9_nk-.js +481 -0
- package/dist/deliver-F9ed3dhp.js +481 -0
- package/dist/delivery-queue-B6TuHppj.js +244 -0
- package/dist/delivery-queue-BZc3AiGu.js +244 -0
- package/dist/devices-cli-DZgxMNLD.js +322 -0
- package/dist/devices-cli-DlG9ehK0.js +317 -0
- package/dist/diagnostics-CK2HGAFw.js +46 -0
- package/dist/diagnostics-G-C-IuxO.js +46 -0
- package/dist/directory-cli-CY6tHRIZ.js +218 -0
- package/dist/directory-cli-HyvRJ1Ua.js +223 -0
- package/dist/dm-policy-shared-1FdjwGtJ.js +22 -0
- package/dist/dm-policy-shared-CT3er5HI.js +22 -0
- package/dist/dns-cli-Cu-wYvll.js +203 -0
- package/dist/dns-cli-DQdnNJh4.js +198 -0
- package/dist/dock-D038fZZl.js +929 -0
- package/dist/dock-D5pZ3a44.js +928 -0
- package/dist/doctor-completion-BrHnayfU.js +92 -0
- package/dist/doctor-completion-CoZP2KiR.js +92 -0
- package/dist/doctor-config-flow-DJ1nWCTZ.js +1935 -0
- package/dist/doctor-config-flow-DYhXUwEq.js +1934 -0
- package/dist/enable-B5dIjgnm.js +59 -0
- package/dist/enable-FmiEY4ng.js +59 -0
- package/dist/entry.js +14 -16
- package/dist/env-DUb5GiQe.js +60 -0
- package/dist/env-vars-C8WMB8Ix.js +93 -0
- package/dist/errors-CdmXrBic.js +35 -0
- package/dist/errors-DdLfwEVi.js +35 -0
- package/dist/exec-BhkXWg7V.js +164 -0
- package/dist/exec-ClUTXFZ9.js +164 -0
- package/dist/export-html/template.css +0 -36
- package/dist/export-html/template.js +1 -32
- package/dist/extensionAPI.js +1015 -142
- package/dist/fetch-CCuD0LYV.js +67 -0
- package/dist/fetch-JBWLkOpL.js +67 -0
- package/dist/fetch-oku6r8tJ.js +67 -0
- package/dist/file-lock-6NXMPZTT.js +107 -0
- package/dist/file-lock-Ks-RPU6W.js +107 -0
- package/dist/fs-safe-93aDW4mH.js +98 -0
- package/dist/fs-safe-ACrBwOF5.js +88 -0
- package/dist/gateway-cli-CJs4Mxlv.js +23730 -0
- package/dist/gateway-cli-gUVR20v7.js +23725 -0
- package/dist/gateway-rpc-CSdrtPzg.js +28 -0
- package/dist/gateway-rpc-PNA_wUoe.js +28 -0
- package/dist/gmail-setup-utils-DNZEf6T0.js +422 -0
- package/dist/gmail-setup-utils-KPAKWwGy.js +423 -0
- package/dist/health-BCidscV-.js +1417 -0
- package/dist/health-Cw2dr19V.js +1414 -0
- package/dist/health-format-DOhfU1rY.js +28 -0
- package/dist/heartbeat-visibility-C5Vxudi9.js +125 -0
- package/dist/heartbeat-visibility-DHeZ-ko1.js +125 -0
- package/dist/help-format-Ch0EWh7N.js +17 -0
- package/dist/helpers-B4NWktS8.js +10 -0
- package/dist/hook-runner-global-Vj-YQxeR.js +527 -0
- package/dist/hooks-cli---vy0V0j.js +1218 -0
- package/dist/hooks-cli-CX-JUHdJ.js +1223 -0
- package/dist/image-ops-DMl7j7f4.js +354 -0
- package/dist/image-ops-DpkTOzhI.js +354 -0
- package/dist/import-DIjlFm_Y.js +493 -0
- package/dist/import-DdQvVR-_.js +495 -0
- package/dist/inbound-context-CmmmT8IP.js +68 -0
- package/dist/inbound-context-oxIWzEgc.js +68 -0
- package/dist/inbound-path-policy-BdmTOUka.js +90 -0
- package/dist/inbound-path-policy-DYTLjca8.js +90 -0
- package/dist/index.js +106 -105
- package/dist/inspect-C9d1V-lI.js +559 -0
- package/dist/inspect-rHjRqr3W.js +559 -0
- package/dist/installs-QUjSL2ZA.js +325 -0
- package/dist/installs-vT5wnxC4.js +325 -0
- package/dist/ipv4-DdcyK1aU.js +46 -0
- package/dist/ipv4-OHvujh00.js +46 -0
- package/dist/ir-CnMQRFBu.js +940 -0
- package/dist/json-files-BiA_B-xm.js +46 -0
- package/dist/links-CIHbVNO_.js +15 -0
- package/dist/loader-CYigLbch.js +22404 -0
- package/dist/loader-ElWX62xE.js +22401 -0
- package/dist/local-roots-B0QcJDJI.js +313 -0
- package/dist/local-roots-BfXsZRkm.js +314 -0
- package/dist/logger-BtwpYD7c.js +49 -0
- package/dist/logging-CLc3Umm0.js +20 -0
- package/dist/login-C8jHYLxN.js +61 -0
- package/dist/login-D__FYZX9.js +62 -0
- package/dist/login-qr-C0Gd6ybl.js +323 -0
- package/dist/login-qr-D7dw54Yp.js +328 -0
- package/dist/logs-cli-CFOVARdJ.js +234 -0
- package/dist/logs-cli-DtAR__VH.js +239 -0
- package/dist/markdown-tables-ChBqQA_Q.js +29 -0
- package/dist/markdown-tables-xMuH3QnS.js +29 -0
- package/dist/media-CmiNXiOZ.js +10453 -0
- package/dist/media-DYopaoc0.js +940 -0
- package/dist/message-action-names-CACBi-HB.js +2521 -0
- package/dist/message-action-names-CFwlz01T.js +2521 -0
- package/dist/message-channel-DF4I2vOK.js +91 -0
- package/dist/net-COL170MG.js +225 -0
- package/dist/net-QZ8IHNXc.js +225 -0
- package/dist/node-cli-CW8jOcHO.js +24 -0
- package/dist/nodes-cli-B4lvU9N5.js +1349 -0
- package/dist/nodes-cli-B8iTBsI6.js +1344 -0
- package/dist/nodes-screen-CZCXHrWB.js +250 -0
- package/dist/nodes-screen-C_K1vcS5.js +250 -0
- package/dist/note-BVerR3D5.js +92 -0
- package/dist/note-Dk8-EaJg.js +92 -0
- package/dist/npm-registry-spec-Dma0KHft.js +786 -0
- package/dist/npm-registry-spec-vYkxZb6u.js +786 -0
- package/dist/npm-resolution-CcZYnzrL.js +86 -0
- package/dist/npm-resolution-DsATEEGx.js +86 -0
- package/dist/onboard-Csm4bDd_.js +438 -0
- package/dist/onboard-D1b535pC.js +436 -0
- package/dist/onboard-channels-5EIXyDZh.js +2547 -0
- package/dist/onboard-channels-bedB47Hs.js +2548 -0
- package/dist/onboard-config-CcPV3Cqz.js +39 -0
- package/dist/onboard-config-DcTaxmuf.js +39 -0
- package/dist/onboard-helpers-BHNXyhA4.js +364 -0
- package/dist/onboard-helpers-eTUU00t8.js +363 -0
- package/dist/onboard-remote-DwDKQk1K.js +127 -0
- package/dist/onboard-remote-TPbiye5m.js +127 -0
- package/dist/onboarding-D0YGZ_Ux.js +588 -0
- package/dist/onboarding-DCfmKzl2.js +586 -0
- package/dist/onboarding.finalize-BhpsVwME.js +399 -0
- package/dist/onboarding.finalize-CY8vgmi9.js +402 -0
- package/dist/onboarding.gateway-config-C_eqpJ7D.js +192 -0
- package/dist/onboarding.gateway-config-DR1ey6tU.js +199 -0
- package/dist/outbound-Be4BgVqF.js +220 -0
- package/dist/outbound-CXJLn8kn.js +221 -0
- package/dist/outbound-attachment-CbNLn0lk.js +18 -0
- package/dist/outbound-attachment-DNCMF74c.js +18 -0
- package/dist/outbound-attachment-DaStRTGv.js +18 -0
- package/dist/pairing-cli-CxGDUsLT.js +128 -0
- package/dist/pairing-cli-D83T3PG9.js +123 -0
- package/dist/pairing-labels-6f8FqSS5.js +9 -0
- package/dist/pairing-labels-CI5j-OUT.js +9 -0
- package/dist/pairing-store-DnTHRcnO.js +459 -0
- package/dist/pairing-store-ONzqxcNb.js +460 -0
- package/dist/path-env-D7VB7sOO.js +89 -0
- package/dist/path-env-DFiYvvI-.js +89 -0
- package/dist/path-safety-BshBsw4P.js +14 -0
- package/dist/path-safety-CZbhQciI.js +14 -0
- package/dist/plugin-auto-enable-BnCQKkIK.js +302 -0
- package/dist/plugin-auto-enable-CFRs-pcA.js +301 -0
- package/dist/plugin-registry-CV5pfXOU.js +33 -0
- package/dist/plugin-registry-CmG34W0u.js +33 -0
- package/dist/plugin-sdk/agents/agent-helpers.d.ts +0 -1
- package/dist/plugin-sdk/agents/agent-scope.d.ts +10 -0
- package/dist/plugin-sdk/agents/agent-types.d.ts +1 -6
- package/dist/plugin-sdk/agents/agent-utils.d.ts +0 -14
- package/dist/plugin-sdk/agents/provider-utils.d.ts +0 -1
- package/dist/plugin-sdk/agents/subagent-spawn.d.ts +0 -1
- package/dist/plugin-sdk/agents/tools/sessions-helpers.d.ts +0 -1
- package/dist/plugin-sdk/auth/constants.d.ts +16 -0
- package/dist/plugin-sdk/auth/display.d.ts +7 -0
- package/dist/plugin-sdk/auth/doctor.d.ts +8 -0
- package/dist/plugin-sdk/auth/env-injection.d.ts +41 -0
- package/dist/plugin-sdk/auth/index.d.ts +8 -0
- package/dist/plugin-sdk/auth/oauth.d.ts +14 -0
- package/dist/plugin-sdk/auth/provider-auth.d.ts +40 -0
- package/dist/plugin-sdk/auth/session-override.d.ts +18 -0
- package/dist/plugin-sdk/auto-reply/reply/agent-runner-execution.d.ts +0 -1
- package/dist/plugin-sdk/auto-reply/reply/agent-runner-utils.d.ts +0 -2
- package/dist/plugin-sdk/auto-reply/reply/commands-status.d.ts +1 -4
- package/dist/plugin-sdk/auto-reply/reply/commands-types.d.ts +1 -4
- package/dist/plugin-sdk/auto-reply/reply/directive-handling.levels.d.ts +1 -7
- package/dist/plugin-sdk/auto-reply/reply/directive-handling.params.d.ts +1 -4
- package/dist/plugin-sdk/auto-reply/reply/directive-handling.parse.d.ts +1 -7
- package/dist/plugin-sdk/auto-reply/reply/directive-handling.shared.d.ts +1 -4
- package/dist/plugin-sdk/auto-reply/reply/directives.d.ts +3 -15
- package/dist/plugin-sdk/auto-reply/reply/get-reply-directives.d.ts +1 -5
- package/dist/plugin-sdk/auto-reply/reply/get-reply-inline-actions.d.ts +1 -5
- package/dist/plugin-sdk/auto-reply/reply/get-reply-run.d.ts +1 -5
- package/dist/plugin-sdk/auto-reply/reply/queue/types.d.ts +1 -3
- package/dist/plugin-sdk/auto-reply/reply/response-prefix-template.d.ts +4 -6
- package/dist/plugin-sdk/auto-reply/reply/session-run-accounting.d.ts +0 -7
- package/dist/plugin-sdk/auto-reply/reply/session-updates.d.ts +0 -10
- package/dist/plugin-sdk/auto-reply/reply.d.ts +1 -1
- package/dist/plugin-sdk/auto-reply/status.d.ts +2 -6
- package/dist/plugin-sdk/auto-reply/thinking.d.ts +0 -11
- package/dist/plugin-sdk/auto-reply/types.d.ts +1 -2
- package/dist/plugin-sdk/commands/agent/session.d.ts +1 -2
- package/dist/plugin-sdk/config/defaults.d.ts +0 -1
- package/dist/plugin-sdk/config/sessions/types.d.ts +0 -8
- package/dist/plugin-sdk/config/types.agent-defaults.d.ts +28 -112
- package/dist/plugin-sdk/config/types.agents.d.ts +8 -0
- package/dist/plugin-sdk/config/types.messages.d.ts +1 -2
- package/dist/plugin-sdk/config/types.tools.d.ts +1 -1
- package/dist/plugin-sdk/config/zod-schema.agent-defaults.d.ts +9 -66
- package/dist/plugin-sdk/config/zod-schema.agent-runtime.d.ts +5 -13
- package/dist/plugin-sdk/config/zod-schema.agents.d.ts +12 -76
- package/dist/plugin-sdk/config/zod-schema.d.ts +12 -76
- package/dist/plugin-sdk/daemon/constants.d.ts +2 -2
- package/dist/plugin-sdk/gateway/protocol/index.d.ts +1 -3
- package/dist/plugin-sdk/gateway/protocol/schema/sessions.d.ts +0 -2
- package/dist/plugin-sdk/gateway/session-utils.types.d.ts +0 -2
- package/dist/plugin-sdk/index.js +108 -134
- package/dist/plugin-sdk/middleware/auth-key-retry.d.ts +32 -0
- package/dist/plugin-sdk/middleware/channel-bridge.d.ts +4 -0
- package/dist/plugin-sdk/middleware/error-classifier.d.ts +5 -0
- package/dist/plugin-sdk/middleware/media-resolver.d.ts +12 -0
- package/dist/plugin-sdk/middleware/runtime-factory.d.ts +42 -0
- package/dist/plugin-sdk/middleware/types.d.ts +33 -1
- package/dist/plugin-sdk/plugins/types.d.ts +1 -1
- package/dist/plugin-sdk/terminal/palette.d.ts +2 -2
- package/dist/plugins-B4waLB_f.js +453 -0
- package/dist/plugins-D6-JJ1il.js +455 -0
- package/dist/plugins-cli-DG2zHgdP.js +799 -0
- package/dist/plugins-cli-DZvQzkWd.js +794 -0
- package/dist/ports-BcTKFlWl.js +96 -0
- package/dist/ports-DAc2AlZE.js +316 -0
- package/dist/ports-HiuYk3bt.js +96 -0
- package/dist/ports-dEePqmCq.js +370 -0
- package/dist/program-CX-EtQ9W.js +245 -0
- package/dist/program-context-R3wsjl2f.js +474 -0
- package/dist/progress-DQ1drugY.js +124 -0
- package/dist/prompt-edYTUtju.js +21 -0
- package/dist/prompt-select-styled-BzL7v1zQ.js +1647 -0
- package/dist/prompt-select-styled-g5q4srtu.js +1650 -0
- package/dist/prompt-style-CYEpbwXH.js +9 -0
- package/dist/provider-dispatcher-D7qFGoUR.js +660 -0
- package/dist/provider-dispatcher-dB_rm6tV.js +659 -0
- package/dist/push-apns-DQwR-i4_.js +713 -0
- package/dist/push-apns-Dj5RApCY.js +711 -0
- package/dist/pw-ai-DOQMJFB-.js +1911 -0
- package/dist/pw-ai-oqtYDmjQ.js +1907 -0
- package/dist/qr-cli-CBGm_Cik.js +353 -0
- package/dist/qr-cli-D2jZPdW9.js +348 -0
- package/dist/redact-gXuh8MFk.js +191 -0
- package/dist/redact-snapshot-B-2V56Yb.js +2016 -0
- package/dist/redact-snapshot-CD36XSYE.js +2016 -0
- package/dist/register.agent-DLSuiqWE.js +287 -0
- package/dist/register.agent-DcvEt3hG.js +1044 -0
- package/dist/register.configure-3edoYZai.js +131 -0
- package/dist/register.configure-CyOJCmnY.js +125 -0
- package/dist/register.import-Cku0T-PA.js +31 -0
- package/dist/register.import-Dr8TiUVx.js +28 -0
- package/dist/register.maintenance-5aaPQbJk.js +495 -0
- package/dist/register.maintenance-DPSswZDJ.js +498 -0
- package/dist/register.message-BaSVFv92.js +682 -0
- package/dist/register.message-FEI0RiNN.js +687 -0
- package/dist/register.onboard-CO1UZL-9.js +258 -0
- package/dist/register.onboard-DuLKxjXl.js +263 -0
- package/dist/register.setup-CFYYd_Ev.js +115 -0
- package/dist/register.setup-P0UHDBMS.js +110 -0
- package/dist/register.status-health-sessions-D_3vm2yw.js +424 -0
- package/dist/register.status-health-sessions-z9x79dmg.js +665 -0
- package/dist/register.subclis-B-d970d6.js +267 -0
- package/dist/replies-BvarRpHb.js +136 -0
- package/dist/replies-CSzm5168.js +136 -0
- package/dist/reply-CTgksTO1.js +13695 -0
- package/dist/reply-CUyafs4J.js +13692 -0
- package/dist/reply-directives-Caq4zVTg.js +182 -0
- package/dist/reply-directives-D91fapDF.js +182 -0
- package/dist/reply-payloads-te0YnESs.js +527 -0
- package/dist/reply-prefix-Bv8Mv9q8.js +37 -0
- package/dist/reply-prefix-Rk_UEaJa.js +37 -0
- package/dist/resolve-route-BPa6q23t.js +249 -0
- package/dist/resolve-route-CN9BEALz.js +249 -0
- package/dist/response-prefix-template-D-ptXREi.js +134 -0
- package/dist/response-prefix-template-Dckjdftg.js +134 -0
- package/dist/retry-BcZuGfnV.js +77 -0
- package/dist/retry-BzWBtFpP.js +77 -0
- package/dist/run-main-BugUkGES.js +303 -0
- package/dist/runner-CVMXkHe9.js +2295 -0
- package/dist/runner-DOWTBU0-.js +2295 -0
- package/dist/runtime-guard-CXt4yzo-.js +60 -0
- package/dist/secure-random-CBwDBdj1.js +44 -0
- package/dist/security-cli-BQzdzJUp.js +479 -0
- package/dist/security-cli-D2d8RvsT.js +485 -0
- package/dist/send-B3G3I3II.js +349 -0
- package/dist/send-B6IB6ELR.js +547 -0
- package/dist/send-BT8XEvZB.js +332 -0
- package/dist/send-BTupAHVX.js +2245 -0
- package/dist/send-BZCfto_I.js +1174 -0
- package/dist/send-C5EDjThR.js +492 -0
- package/dist/send-CBM54hgN.js +349 -0
- package/dist/send-CPBd6ItT.js +29 -0
- package/dist/send-CzYm7ULP.js +2245 -0
- package/dist/send-D2m_x8xM.js +374 -0
- package/dist/send-DmEBPE2S.js +1779 -0
- package/dist/send-Dt4iCx61.js +426 -0
- package/dist/send-MWjpLHEV.js +11 -0
- package/dist/send-qpwqt34s.js +547 -0
- package/dist/send-rW25uKNz.js +1776 -0
- package/dist/send-uqa6CNuP.js +492 -0
- package/dist/server-BhmYVCED.js +201 -0
- package/dist/server-DaUw1o2B.js +206 -0
- package/dist/server-lifecycle-BeZsBQwF.js +2437 -0
- package/dist/server-lifecycle-C2F1_TE2.js +2437 -0
- package/dist/server-node-events-DoRFbKCT.js +390 -0
- package/dist/server-node-events-jbbbt-4R.js +395 -0
- package/dist/service-BDt-zUvV.js +670 -0
- package/dist/service-Os7W1F2S.js +670 -0
- package/dist/session-B9KGKVrY.js +170 -0
- package/dist/session-DzAupDyj.js +170 -0
- package/dist/session-cost-usage-BYCI739a.js +627 -0
- package/dist/session-cost-usage-DGsPcuMj.js +627 -0
- package/dist/session-dirs-BIg5RHAh.js +947 -0
- package/dist/session-dirs-DwDxjK1p.js +947 -0
- package/dist/session-utils-BgWDCbyx.js +622 -0
- package/dist/session-utils-CxxOeC1M.js +622 -0
- package/dist/sessions-Bwu0l_CG.js +2569 -0
- package/dist/sessions-CiuFFCnt.js +247 -0
- package/dist/shell-env-CsV_IkJj.js +163 -0
- package/dist/shell-env-hZW9j-Uc.js +163 -0
- package/dist/ssrf-B-rF_tZB.js +183 -0
- package/dist/ssrf-D6fl_7ww.js +183 -0
- package/dist/status-BOFm7iyj.js +2065 -0
- package/dist/status-RI2y_M21.js +2061 -0
- package/dist/status.update-DbO7izip.js +79 -0
- package/dist/status.update-wXyvcztI.js +79 -0
- package/dist/store-BLGrRL_E.js +64 -0
- package/dist/store-BYhcsOLr.js +64 -0
- package/dist/store-Dv76bGHg.js +2571 -0
- package/dist/store-Dw93tSB-.js +53 -0
- package/dist/subagent-registry-DWL-tayF.js +4856 -0
- package/dist/subagent-registry-HjR1tO3-.js +4854 -0
- package/dist/subsystem-BCkt9Ocb.js +1079 -0
- package/dist/subsystem-BgxIzx7w.js +1137 -0
- package/dist/system-cli-DtrDDmCt.js +71 -0
- package/dist/system-cli-xDr_Yyaa.js +76 -0
- package/dist/systemd-BlbIQ1PV.js +547 -0
- package/dist/systemd-DzXePo7r.js +547 -0
- package/dist/systemd-linger-mLbBF4pa.js +75 -0
- package/dist/systemd-linger-qlGGW2JB.js +75 -0
- package/dist/table-V_9n7CjP.js +279 -0
- package/dist/tables-Cy3gObW7.js +55 -0
- package/dist/tables-DAuk-Y6F.js +55 -0
- package/dist/tables-DRh09aPZ.js +55 -0
- package/dist/tailnet-BoTa0e2q.js +40 -0
- package/dist/tailnet-Cy0Q27lj.js +40 -0
- package/dist/tailscale-CiWkh0vS.js +230 -0
- package/dist/tailscale-Driw3j8E.js +230 -0
- package/dist/targets-3hewwPvM.js +120 -0
- package/dist/targets-Bkw_co-B.js +220 -0
- package/dist/targets-C1Tt0ZWd.js +2406 -0
- package/dist/targets-CsrqF2M4.js +650 -0
- package/dist/targets-DKriCISG.js +53 -0
- package/dist/targets-DTM2OPnS.js +650 -0
- package/dist/targets-DhhaK2xG.js +53 -0
- package/dist/targets-tDrl_ioQ.js +46 -0
- package/dist/targets-yq1kGK1_.js +2407 -0
- package/dist/thinking-XA5P_zFw.js +88 -0
- package/dist/thinking-l-rrvZwu.js +88 -0
- package/dist/tokens-7ZtWRjA3.js +21 -0
- package/dist/tool-display-AxpSXZVq.js +785 -0
- package/dist/tool-display-D6GD-41Y.js +785 -0
- package/dist/tool-images-D16vIWPg.js +263 -0
- package/dist/tool-images-IVIZ29ID.js +263 -0
- package/dist/trash--8b4GDyV.js +125 -0
- package/dist/trash-ivbG2QWV.js +125 -0
- package/dist/tui-Cbe1EW-B.js +3319 -0
- package/dist/tui-Dj3XrTCV.js +3319 -0
- package/dist/tui-cli-EGqEcdfE.js +64 -0
- package/dist/tui-cli-KKmqnNs2.js +59 -0
- package/dist/update-DruVguh4.js +349 -0
- package/dist/update-cli-C5tdQeGG.js +1371 -0
- package/dist/update-cli-Canq11sh.js +1374 -0
- package/dist/update-y8nz-3OC.js +349 -0
- package/dist/usage-CAuX4vsd.js +5384 -0
- package/dist/utils-C5daYcFn.js +631 -0
- package/dist/web-B9gR_cGR.js +3071 -0
- package/dist/web-DZ8ahrhK.js +77 -0
- package/dist/web-DkYPsnyd.js +71 -0
- package/dist/webhooks-cli-DFqGwW1f.js +329 -0
- package/dist/webhooks-cli-y-E-q0Xo.js +334 -0
- package/dist/whatsapp-actions-BXIe-Uei.js +123 -0
- package/dist/whatsapp-actions-BictxOCB.js +129 -0
- package/dist/widearea-dns-fHQt5-Q3.js +127 -0
- package/dist/workspace-DvbSDgO_.js +449 -0
- package/dist/workspace-zLfKNRwR.js +447 -0
- package/dist/zod-schema-B9RGngMW.js +2696 -0
- package/dist/zod-schema-D3hQ5SKe.js +2696 -0
- package/extensions/matrix/src/matrix/monitor/replies.ts +0 -24
- package/extensions/mattermost/src/mattermost/monitor-helpers.ts +0 -1
- package/package.json +3 -3
- package/dist/accounts-BFy_Z3od.js +0 -272
- package/dist/accounts-BTXSfPWi.js +0 -270
- package/dist/accounts-BxGS70Do.js +0 -36
- package/dist/accounts-CNY1TGj1.js +0 -47
- package/dist/accounts-DBohBlww.js +0 -32
- package/dist/accounts-DqRQ75w3.js +0 -36
- package/dist/accounts-iODF3SK2.js +0 -47
- package/dist/ack-reactions-B11TAC2D.js +0 -446
- package/dist/ack-reactions-BWVjL4H6.js +0 -446
- package/dist/acp-cli-CA1xMmVo.js +0 -1320
- package/dist/acp-cli-CGo6fJVZ.js +0 -1326
- package/dist/active-listener-VzhWW8W6.js +0 -37
- package/dist/active-listener-z0qVEcom.js +0 -37
- package/dist/agent-CTizRPIJ.js +0 -732
- package/dist/agent-D2RVoS5g.js +0 -731
- package/dist/agent-helpers-B6VfZ9_u.js +0 -606
- package/dist/agent-helpers-CTx5KKJu.js +0 -606
- package/dist/agent-scope-BGYzhtWQ.js +0 -121
- package/dist/agent-scope-C50VuLKh.js +0 -119
- package/dist/agents-BuYn-obw.js +0 -788
- package/dist/agents.config-BSTxuTVd.js +0 -116
- package/dist/agents.config-p3V3b9u6.js +0 -116
- package/dist/audio-DPOuhNq7.js +0 -43
- package/dist/audio-VBcVDa08.js +0 -43
- package/dist/audio-preflight-BwmCYeuM.js +0 -64
- package/dist/audio-preflight-co8gjlPX.js +0 -69
- package/dist/audit-oH4urD3G.js +0 -3138
- package/dist/audit-qgtCT3ik.js +0 -3138
- package/dist/auth-CAczFgAO.js +0 -448
- package/dist/auth-Deh9i9Eg.js +0 -448
- package/dist/auth-profiles-BquJGKLC.js +0 -279
- package/dist/auth-profiles-D8vKiBPq.js +0 -281
- package/dist/banner-Cf978khN.js +0 -294
- package/dist/binaries-DXW6oATV.js +0 -13
- package/dist/bindings-CRU_udk8.js +0 -69
- package/dist/bindings-DQZAu8Wv.js +0 -69
- package/dist/bonjour-discovery-DdAk1VyO.js +0 -378
- package/dist/bonjour-discovery-DuhiIZZx.js +0 -378
- package/dist/browser-cli-CZC4h5V4.js +0 -1687
- package/dist/browser-cli-DAgi_aQk.js +0 -1692
- package/dist/call-BbwtB9Y-.js +0 -2828
- package/dist/call-PivL7Uex.js +0 -2829
- package/dist/catalog-BqO6yem_.js +0 -185
- package/dist/catalog-DFmaYwfk.js +0 -185
- package/dist/channel-account-context-CvIDAtHS.js +0 -550
- package/dist/channel-account-context-q-o0pG1A.js +0 -550
- package/dist/channel-activity-BaCNOZpP.js +0 -94
- package/dist/channel-activity-C-G4n9BK.js +0 -292
- package/dist/channel-activity-DTKGf3j5.js +0 -94
- package/dist/channel-options-Cyappik_.js +0 -32
- package/dist/channel-options-DFnypY5S.js +0 -33
- package/dist/channel-selection-BGl53D5K.js +0 -51
- package/dist/channel-selection-NNPbxnyZ.js +0 -51
- package/dist/channel-web-DmhVkWbP.js +0 -2134
- package/dist/channel-web-kRC3UYBJ.js +0 -2136
- package/dist/channels-cli-C5XRkPJl.js +0 -1421
- package/dist/channels-cli-D6TqCI0m.js +0 -1426
- package/dist/channels-status-issues-CUc9mpeW.js +0 -18
- package/dist/channels-status-issues-DwRDzwrV.js +0 -18
- package/dist/chat-envelope-DEZ-5RY8.js +0 -248
- package/dist/chat-envelope-el7Uo-Fe.js +0 -248
- package/dist/chrome-0QaGKb3L.js +0 -1732
- package/dist/chrome-CFeWdP0Y.js +0 -1733
- package/dist/chunk-CSQfUhgF.js +0 -341
- package/dist/chunk-D0Y_w4oX.js +0 -341
- package/dist/clack-prompter-B7tOxhJd.js +0 -122
- package/dist/clack-prompter-CCFnKP_1.js +0 -121
- package/dist/cleanup-utils-CqAVZz2b.js +0 -94
- package/dist/cli-BR2J3c4l.js +0 -125
- package/dist/cli-C1q1vSmN.js +0 -130
- package/dist/clipboard-D7_SKHPK.js +0 -31
- package/dist/clipboard-Dzkx6Q2K.js +0 -31
- package/dist/command-format-CVfo8I5f.js +0 -18
- package/dist/command-format-DgXcqxBt.js +0 -32
- package/dist/command-registry-CYjvOp8W.js +0 -215
- package/dist/commands-CDonBOrw.js +0 -41
- package/dist/commands-D_-bgTlO.js +0 -41
- package/dist/commands-registry-CWJv6xe2.js +0 -892
- package/dist/commands-registry-Ci8_cFk9.js +0 -893
- package/dist/common-CMI-qsF8.js +0 -156
- package/dist/common-DSVmydhm.js +0 -156
- package/dist/completion-cli-8iZJqfmX.js +0 -452
- package/dist/completion-cli-CYDjEZSt.js +0 -452
- package/dist/config-D5XU45KD.js +0 -6953
- package/dist/config-FHu9Bn4R.js +0 -6951
- package/dist/config-cli-Gehy4sav.js +0 -241
- package/dist/config-cli-RC9qMgJq.js +0 -246
- package/dist/config-guard-J-Q_DFWk.js +0 -97
- package/dist/config-guard-cB5a_ANg.js +0 -75
- package/dist/config-validation-BPNyd9_3.js +0 -18
- package/dist/config-validation-BPWuvhVe.js +0 -18
- package/dist/configure-CC2XdRRm.js +0 -891
- package/dist/configure-DxFBJuhZ.js +0 -889
- package/dist/constants-BmRFoHl0.js +0 -67
- package/dist/constants-C9WPAluB.js +0 -67
- package/dist/control-auth-D0tpV3ts.js +0 -397
- package/dist/control-auth-_-0PGRUs.js +0 -397
- package/dist/control-ui/assets/index-B4ZM1lW1.js +0 -7738
- package/dist/control-ui/assets/index-B4ZM1lW1.js.map +0 -1
- package/dist/control-ui/assets/index-PED72sKF.css +0 -1
- package/dist/control-ui-assets-Cx_mw4D0.js +0 -186
- package/dist/control-ui-assets-W1AUuGrO.js +0 -186
- package/dist/conversation-label-C4SDz4sT.js +0 -36
- package/dist/conversation-label-D1frnvYe.js +0 -36
- package/dist/cron-cli-BzERxhr5.js +0 -495
- package/dist/cron-cli-C8j_uslU.js +0 -490
- package/dist/daemon-cli-C95XNbX0.js +0 -1199
- package/dist/daemon-cli-e6sURMqd.js +0 -1197
- package/dist/daemon-install-CcohRvKV.js +0 -55
- package/dist/daemon-install-DDshfT0J.js +0 -60
- package/dist/daemon-install-helpers-CFGAfRlj.js +0 -462
- package/dist/daemon-install-helpers-DIUzSFG1.js +0 -462
- package/dist/defaults-B5KStIBg.js +0 -7
- package/dist/defaults-xUAL2Z-F.js +0 -7
- package/dist/deliver-912khjLK.js +0 -481
- package/dist/deliver-D56J4-1F.js +0 -481
- package/dist/delivery-queue-Cfa9Wmxp.js +0 -244
- package/dist/delivery-queue-CxVRi4tw.js +0 -244
- package/dist/devices-cli-0qDhTgZR.js +0 -316
- package/dist/devices-cli-6SKMR2bV.js +0 -321
- package/dist/diagnostics-99iCgBUh.js +0 -46
- package/dist/diagnostics-VC0cz7kX.js +0 -46
- package/dist/directory-cli-5YXdoVdn.js +0 -217
- package/dist/directory-cli-D3IKCHmn.js +0 -222
- package/dist/dm-policy-shared-4rkjhcrM.js +0 -22
- package/dist/dm-policy-shared-D8lgnmrC.js +0 -22
- package/dist/dns-cli-11CtErVU.js +0 -197
- package/dist/dns-cli-SiEd_1Lq.js +0 -202
- package/dist/dock-BqNINg7k.js +0 -928
- package/dist/dock-CQuu41bw.js +0 -929
- package/dist/doctor-completion-BR1SlAT3.js +0 -92
- package/dist/doctor-completion-CZwpEhIK.js +0 -92
- package/dist/doctor-config-flow-BVkHcvoj.js +0 -1933
- package/dist/doctor-config-flow-DVYRn0An.js +0 -1934
- package/dist/enable-DcJnkzfz.js +0 -59
- package/dist/enable-ibNq4UWy.js +0 -59
- package/dist/env-DeF64iu0.js +0 -60
- package/dist/env-vars-7aZqKPhk.js +0 -93
- package/dist/errors-8F-77i6m.js +0 -35
- package/dist/errors-DZ199hOo.js +0 -35
- package/dist/exec-DbKuYyM1.js +0 -164
- package/dist/exec-DkFE7lqU.js +0 -164
- package/dist/fetch-BFSBLBkA.js +0 -67
- package/dist/fetch-C6XKGA11.js +0 -67
- package/dist/fetch-CEDsOiql.js +0 -67
- package/dist/file-lock-CIvloidc.js +0 -107
- package/dist/file-lock-CzBL_VIx.js +0 -107
- package/dist/fs-safe-DSwT85uK.js +0 -88
- package/dist/fs-safe-DkBhNAc3.js +0 -98
- package/dist/gateway-cli-BEEZhCHv.js +0 -23747
- package/dist/gateway-cli-Nob0g_4y.js +0 -23742
- package/dist/gateway-rpc-CksB-N83.js +0 -28
- package/dist/gateway-rpc-Dq44SkOv.js +0 -28
- package/dist/gmail-setup-utils-Cnx8A5pW.js +0 -422
- package/dist/gmail-setup-utils-nkabbKOE.js +0 -423
- package/dist/health-RT-F3hzT.js +0 -1423
- package/dist/health-SOuaKNRa.js +0 -1420
- package/dist/health-format-BG95OE6N.js +0 -28
- package/dist/heartbeat-visibility-BxkZjE5m.js +0 -125
- package/dist/heartbeat-visibility-CGG-G7px.js +0 -125
- package/dist/help-format-DAxf0l_h.js +0 -17
- package/dist/helpers-kkeXif0Q.js +0 -10
- package/dist/hook-runner-global-DJ14gXFP.js +0 -527
- package/dist/hooks-cli-DyEKryW8.js +0 -1217
- package/dist/hooks-cli-RuEn0-oy.js +0 -1222
- package/dist/image-ops-Bi6JPSkD.js +0 -354
- package/dist/image-ops-DWytvdh_.js +0 -354
- package/dist/import-D8BBZQgl.js +0 -170
- package/dist/import-DQ6NI4Fz.js +0 -168
- package/dist/inbound-context-CPkkQW0i.js +0 -68
- package/dist/inbound-context-DS_kpIYI.js +0 -68
- package/dist/inbound-path-policy-Bg4gZBx-.js +0 -250
- package/dist/inbound-path-policy-sdr5Ji0k.js +0 -250
- package/dist/inspect-Dt8hogS3.js +0 -559
- package/dist/inspect-vYIL1oA0.js +0 -559
- package/dist/installs-aM5dWAyn.js +0 -325
- package/dist/installs-pWdqG8HL.js +0 -325
- package/dist/ipv4--2WXMVtE.js +0 -46
- package/dist/ipv4-CDQpx1A7.js +0 -46
- package/dist/ir-BpaAMTfW.js +0 -940
- package/dist/json-files-DzpTak5i.js +0 -46
- package/dist/links-C3soDNDH.js +0 -15
- package/dist/loader-Ccwsh8Sh.js +0 -22624
- package/dist/loader-y9MhJewT.js +0 -22621
- package/dist/local-roots-BrH0Q63K.js +0 -313
- package/dist/local-roots-nImrw2WR.js +0 -314
- package/dist/logger-Bw3cFE5t.js +0 -49
- package/dist/logging-C-nxX2fn.js +0 -20
- package/dist/login-C_Kt57nO.js +0 -62
- package/dist/login-DOmWDMeP.js +0 -61
- package/dist/login-qr-CXU0wC5K.js +0 -322
- package/dist/login-qr-D0u6fdeO.js +0 -327
- package/dist/logs-cli-CschwP4d.js +0 -238
- package/dist/logs-cli-D7ayUvz_.js +0 -233
- package/dist/markdown-tables-CrmghPAr.js +0 -29
- package/dist/markdown-tables-jrnSPvZ6.js +0 -29
- package/dist/media-CojxZ45J.js +0 -10492
- package/dist/media-DN7yRfrH.js +0 -940
- package/dist/message-action-names-CtEZcmlU.js +0 -2521
- package/dist/message-action-names-WglOO_DT.js +0 -2521
- package/dist/message-channel-DzJqHVZD.js +0 -91
- package/dist/net-Cg8AQeke.js +0 -225
- package/dist/net-D6D0wgcF.js +0 -225
- package/dist/node-cli-Q2-n3Fgv.js +0 -24
- package/dist/nodes-cli-C2SoKfCv.js +0 -1343
- package/dist/nodes-cli-CQmlfx0K.js +0 -1348
- package/dist/nodes-screen-BR9sYoPa.js +0 -250
- package/dist/nodes-screen-Cw7Hv7M2.js +0 -250
- package/dist/note-Dlv4NmlQ.js +0 -92
- package/dist/note-kvWV4xtw.js +0 -92
- package/dist/npm-registry-spec-0qiKawvv.js +0 -786
- package/dist/npm-registry-spec-COvUzy5J.js +0 -786
- package/dist/npm-resolution-6v_Zm-9G.js +0 -86
- package/dist/npm-resolution-BFz7LeoN.js +0 -86
- package/dist/onboard-CgyU-mDL.js +0 -407
- package/dist/onboard-RI4vNTZd.js +0 -405
- package/dist/onboard-channels-DN5JoKPd.js +0 -2548
- package/dist/onboard-channels-DyAd1OZr.js +0 -2547
- package/dist/onboard-config-BCTthQ7J.js +0 -24
- package/dist/onboard-config-y-2cgT0V.js +0 -24
- package/dist/onboard-helpers-BCzZUD0z.js +0 -363
- package/dist/onboard-helpers-sDc2Ky6H.js +0 -362
- package/dist/onboard-remote-CJrMtttl.js +0 -127
- package/dist/onboard-remote-hyQIBguz.js +0 -127
- package/dist/onboarding-DCu1iBTV.js +0 -541
- package/dist/onboarding-zKMitzpb.js +0 -543
- package/dist/onboarding.finalize-ClHhYE2E.js +0 -401
- package/dist/onboarding.finalize-D5JkVJgg.js +0 -398
- package/dist/onboarding.gateway-config-DFh71Ndn.js +0 -198
- package/dist/onboarding.gateway-config-VBk6AP9U.js +0 -191
- package/dist/outbound-BYlZshIw.js +0 -221
- package/dist/outbound-CFfJC1j5.js +0 -220
- package/dist/outbound-attachment-BCNs1u1F.js +0 -18
- package/dist/outbound-attachment-B_0D60Yr.js +0 -18
- package/dist/outbound-attachment-o0seS0CP.js +0 -18
- package/dist/pairing-cli-BeydfoF9.js +0 -122
- package/dist/pairing-cli-DWzX866x.js +0 -127
- package/dist/pairing-labels-B-N8S5Fc.js +0 -9
- package/dist/pairing-labels-B_53dY5L.js +0 -9
- package/dist/pairing-store-BxdqFZGK.js +0 -460
- package/dist/pairing-store-CTkD51uW.js +0 -459
- package/dist/path-env-DR5vn3QL.js +0 -89
- package/dist/path-env-qRJbjJzj.js +0 -89
- package/dist/path-safety-DkT9RmTG.js +0 -14
- package/dist/path-safety-juI2XbO1.js +0 -14
- package/dist/plugin-auto-enable-D23gv7Aw.js +0 -302
- package/dist/plugin-auto-enable-DuPS9XiJ.js +0 -301
- package/dist/plugin-registry-CNu_1KZz.js +0 -33
- package/dist/plugin-registry-DeHwd2jk.js +0 -33
- package/dist/plugin-sdk/agents/agent-helpers/thinking.d.ts +0 -5
- package/dist/plugin-sdk/agents/auth-profiles/constants.d.ts +0 -16
- package/dist/plugin-sdk/agents/auth-profiles/display.d.ts +0 -7
- package/dist/plugin-sdk/agents/auth-profiles/doctor.d.ts +0 -8
- package/dist/plugin-sdk/agents/auth-profiles/oauth.d.ts +0 -14
- package/dist/plugin-sdk/agents/auth-profiles/session-override.d.ts +0 -18
- package/dist/plugin-sdk/agents/auth-profiles.d.ts +0 -8
- package/dist/plugin-sdk/agents/defaults.d.ts +0 -3
- package/dist/plugin-sdk/agents/provider-auth.d.ts +0 -40
- package/dist/plugin-sdk/auto-reply/model-runtime.d.ts +0 -17
- package/dist/plugin-sdk/config/model-input.d.ts +0 -9
- package/dist/plugin-sdk/config/zod-schema.agent-model.d.ts +0 -5
- package/dist/plugin-sdk/sessions/model-overrides.d.ts +0 -14
- package/dist/plugin-sdk/telegram/reasoning-lane-coordinator.d.ts +0 -18
- package/dist/plugins-BflZz0sp.js +0 -453
- package/dist/plugins-cli-DV82scUw.js +0 -798
- package/dist/plugins-cli-Qj1UyIZO.js +0 -793
- package/dist/plugins-woGRXMzU.js +0 -455
- package/dist/ports-DrruB2fK.js +0 -370
- package/dist/ports-GT1yV-Tg.js +0 -96
- package/dist/ports-NPqtlfp0.js +0 -316
- package/dist/ports-QMI4-F9m.js +0 -96
- package/dist/program-CQmIaRUI.js +0 -244
- package/dist/program-context-DEU6ACnL.js +0 -474
- package/dist/progress-CBkSaM6z.js +0 -124
- package/dist/prompt-Bllj1dhc.js +0 -21
- package/dist/prompt-select-styled-BhTN6zE2.js +0 -1650
- package/dist/prompt-select-styled-WopXnjIy.js +0 -1647
- package/dist/prompt-style-DVEm3BZW.js +0 -9
- package/dist/provider-dispatcher-B4QMe-I6.js +0 -659
- package/dist/provider-dispatcher-Bfauw6zz.js +0 -660
- package/dist/push-apns-C0LyG-WB.js +0 -713
- package/dist/push-apns-DuG95AKC.js +0 -711
- package/dist/pw-ai-D9n6-Wa6.js +0 -1906
- package/dist/pw-ai-T280E6Mn.js +0 -1910
- package/dist/qr-cli-DVECWTHN.js +0 -352
- package/dist/qr-cli-hSLixZCe.js +0 -347
- package/dist/redact-eZq1uwNK.js +0 -191
- package/dist/redact-snapshot-BZYLIqe-.js +0 -2028
- package/dist/redact-snapshot-C6hVx_9I.js +0 -2028
- package/dist/register.agent-Dmj-sgEl.js +0 -1043
- package/dist/register.agent-IspcBFeD.js +0 -286
- package/dist/register.configure-BqJEqyGL.js +0 -130
- package/dist/register.configure-PPkU_4Ea.js +0 -124
- package/dist/register.import-Bs-UkOs-.js +0 -27
- package/dist/register.import-DLng8g-e.js +0 -30
- package/dist/register.maintenance-BbpkJil3.js +0 -497
- package/dist/register.maintenance-C5nkOQxa.js +0 -494
- package/dist/register.message-C83Hi1b3.js +0 -681
- package/dist/register.message-D16isu4u.js +0 -686
- package/dist/register.onboard-B8EzX3wY.js +0 -257
- package/dist/register.onboard-CyRbr_0V.js +0 -262
- package/dist/register.setup-DWyoowAz.js +0 -109
- package/dist/register.setup-Dz6GwMnu.js +0 -114
- package/dist/register.status-health-sessions-CbQOfycz.js +0 -423
- package/dist/register.status-health-sessions-DXIWG47y.js +0 -669
- package/dist/register.subclis-DeGP5UPU.js +0 -267
- package/dist/replies-BKrzM0QI.js +0 -136
- package/dist/replies-Cl2gYBVt.js +0 -136
- package/dist/reply-CCu_DY64.js +0 -13900
- package/dist/reply-DSKC8kyS.js +0 -13897
- package/dist/reply-directives-BHJKp1Du.js +0 -182
- package/dist/reply-directives-CD2WycBM.js +0 -182
- package/dist/reply-payloads-D_BM1Anb.js +0 -527
- package/dist/reply-prefix-DBLCYiup.js +0 -38
- package/dist/reply-prefix-Q4DOJSn_.js +0 -38
- package/dist/resolve-route-CBVbY0xS.js +0 -249
- package/dist/resolve-route-DGEgTEif.js +0 -249
- package/dist/response-prefix-template-rVZQOViK.js +0 -136
- package/dist/response-prefix-template-up4REfuR.js +0 -136
- package/dist/retry-BhuXOEVR.js +0 -77
- package/dist/retry-DUjAzOBy.js +0 -77
- package/dist/run-main-Um5xhxla.js +0 -320
- package/dist/runner-yVJ4HB2K.js +0 -2294
- package/dist/runner-z92MWZ3m.js +0 -2294
- package/dist/runtime-guard-DZ_xuCc4.js +0 -60
- package/dist/secure-random-Pl9rPl0l.js +0 -44
- package/dist/security-cli-CdwbWZUj.js +0 -484
- package/dist/security-cli-DP5QJpa5.js +0 -478
- package/dist/send-B1_Ymjb9.js +0 -1778
- package/dist/send-B84axiIa.js +0 -29
- package/dist/send-BN_zYVlx.js +0 -547
- package/dist/send-BqVOxAmK.js +0 -1174
- package/dist/send-Bx9bUGav.js +0 -492
- package/dist/send-C3pdJ6p-.js +0 -2245
- package/dist/send-CBGSXjfD.js +0 -2245
- package/dist/send-CGXyTF22.js +0 -426
- package/dist/send-CKavrhXj.js +0 -11
- package/dist/send-D08Je6DL.js +0 -374
- package/dist/send-D1aYEG-k.js +0 -332
- package/dist/send-DHldI3gf.js +0 -492
- package/dist/send-D_DUQJ6H.js +0 -349
- package/dist/send-Ds63eF4a.js +0 -349
- package/dist/send-YRVDWfSs.js +0 -547
- package/dist/send-xnwty9cY.js +0 -1775
- package/dist/server-BQFoyCRR.js +0 -200
- package/dist/server-DhXw25Jq.js +0 -205
- package/dist/server-lifecycle-BjCCyD3w.js +0 -2437
- package/dist/server-lifecycle-Coyr6Lda.js +0 -2437
- package/dist/server-node-events-De4WZQQD.js +0 -393
- package/dist/server-node-events-dXXayuqY.js +0 -398
- package/dist/service-Bjqii5nW.js +0 -670
- package/dist/service-fp29z5Ww.js +0 -670
- package/dist/session-DBL5nHDy.js +0 -170
- package/dist/session-cost-usage-DX09eTPU.js +0 -627
- package/dist/session-cost-usage-yYi525j3.js +0 -627
- package/dist/session-dirs-Cj5xi7zX.js +0 -947
- package/dist/session-dirs-DdF6TDsE.js +0 -947
- package/dist/session-utils-CEtEq6bi.js +0 -625
- package/dist/session-utils-WmlWAs1r.js +0 -625
- package/dist/session-xKIW6gL2.js +0 -170
- package/dist/sessions--PykPynp.js +0 -2593
- package/dist/sessions-Bw4LRnSr.js +0 -252
- package/dist/ssrf-Ck9HDZpv.js +0 -183
- package/dist/ssrf-m7kFIobZ.js +0 -183
- package/dist/status-CtzYFLLF.js +0 -2072
- package/dist/status-DiN1cq2p.js +0 -2068
- package/dist/status.update-C55QM2xs.js +0 -79
- package/dist/status.update-CBmPXwYN.js +0 -79
- package/dist/store-C3tOpizT.js +0 -64
- package/dist/store-CPJXuhvQ.js +0 -53
- package/dist/store-SusmIfz7.js +0 -2595
- package/dist/store-v3P-OWhi.js +0 -64
- package/dist/subagent-registry-Db4Ho_2Y.js +0 -4858
- package/dist/subagent-registry-Du_j0Fnt.js +0 -4860
- package/dist/subsystem-BUXAJwPD.js +0 -1079
- package/dist/subsystem-COd61u0P.js +0 -1139
- package/dist/system-cli-DYCpLO3T.js +0 -75
- package/dist/system-cli-eAk5wVbP.js +0 -70
- package/dist/systemd-DSnlM3jX.js +0 -547
- package/dist/systemd-TfK8GuTx.js +0 -547
- package/dist/systemd-linger-Axnc1xCb.js +0 -75
- package/dist/systemd-linger-_0_-RY4v.js +0 -75
- package/dist/table-DPTzZyhu.js +0 -279
- package/dist/tables-DI5LGEr1.js +0 -55
- package/dist/tables-PxcSPSO0.js +0 -55
- package/dist/tables-TWiml6b1.js +0 -55
- package/dist/tailnet-CEudzG0i.js +0 -40
- package/dist/tailnet-PnMrjwGT.js +0 -40
- package/dist/tailscale-DTATQxAG.js +0 -230
- package/dist/tailscale-Dbyahx0J.js +0 -230
- package/dist/targets-C1NeMn2J.js +0 -220
- package/dist/targets-CcTME3bp.js +0 -46
- package/dist/targets-CmC5m7Ey.js +0 -53
- package/dist/targets-D-u6Kyio.js +0 -650
- package/dist/targets-D7OKVXMI.js +0 -650
- package/dist/targets-DB4vBpIQ.js +0 -2172
- package/dist/targets-DfqPGOmM.js +0 -2173
- package/dist/targets-DyybKefq.js +0 -53
- package/dist/targets-JCISV-hS.js +0 -120
- package/dist/tokens-DzFOtLlW.js +0 -21
- package/dist/tool-display-Br6mwaJc.js +0 -785
- package/dist/tool-display-sgNwLOBj.js +0 -785
- package/dist/tool-images-BNfIJ_Kj.js +0 -263
- package/dist/tool-images-kloBqxqK.js +0 -263
- package/dist/trash-DPi0aCCQ.js +0 -125
- package/dist/trash-D_Jd_yQZ.js +0 -125
- package/dist/tui-CHc0EfJO.js +0 -3392
- package/dist/tui-CyHwc2uX.js +0 -3392
- package/dist/tui-cli-BvwbrIYO.js +0 -63
- package/dist/tui-cli-C9I18SfW.js +0 -58
- package/dist/update-DxyjwCL2.js +0 -349
- package/dist/update-IX7vdqA8.js +0 -349
- package/dist/update-cli-CBeXUSzq.js +0 -1373
- package/dist/update-cli-DkAWmUrp.js +0 -1370
- package/dist/usage-CYlQW4M2.js +0 -5279
- package/dist/utils-LBKvDoPx.js +0 -631
- package/dist/web-BUYUdnRH.js +0 -3065
- package/dist/web-Dquzwqf4.js +0 -70
- package/dist/web-tS8diboh.js +0 -76
- package/dist/webhooks-cli-B7Vw3CMz.js +0 -333
- package/dist/webhooks-cli-BpZHQlVd.js +0 -328
- package/dist/whatsapp-actions-D5HXezjp.js +0 -128
- package/dist/whatsapp-actions-DaA291Ya.js +0 -122
- package/dist/widearea-dns-DSoaA-eH.js +0 -127
- package/dist/workspace-B4ZvVYT9.js +0 -447
- package/dist/workspace-B8PA8oxJ.js +0 -449
- /package/dist/{account-lookup-0KDSp5Mj.js → account-lookup-BOCzCnir.js} +0 -0
- /package/dist/{account-lookup-zvANGr2x.js → account-lookup-DGscKBsr.js} +0 -0
- /package/dist/{ansi-D04X81yq.js → ansi-aRwLYlzD.js} +0 -0
- /package/dist/{api-BeQMq2iS.js → api-BDff51CS.js} +0 -0
- /package/dist/{api-CxX8-gGz.js → api-qWSMsT8m.js} +0 -0
- /package/dist/{argv-Co-b9Zsc.js → argv-neJY_Hxm.js} +0 -0
- /package/dist/{brew-C4zKZsHX.js → brew-ByYl36Mt.js} +0 -0
- /package/dist/{brew-DbSbN8sD.js → brew-CMSQ5Fek.js} +0 -0
- /package/dist/{chat-type-CYPyHAj-.js → chat-type-BKe459rw.js} +0 -0
- /package/dist/{chat-type-DKb2TlGZ.js → chat-type-DyovJwCt.js} +0 -0
- /package/dist/{cleanup-utils-CwQvD73q.js → cleanup-utils-S_P5Jebv.js} +0 -0
- /package/dist/{cli-name-BicfmwQX.js → cli-name-CRLBidNP.js} +0 -0
- /package/dist/{cli-name-C6rJGl18.js → cli-name-Yv30OygA.js} +0 -0
- /package/dist/{cli-utils-BhXbz2UF.js → cli-utils-C5nQDfa6.js} +0 -0
- /package/dist/{cli-utils-DZe_rVkZ.js → cli-utils-KcEwAsuZ.js} +0 -0
- /package/dist/{client-C61M8zI3.js → client-C7B0uFB0.js} +0 -0
- /package/dist/{client-DdpmATKq.js → client-Cd2HNUX0.js} +0 -0
- /package/dist/{command-options-C4paWSGf.js → command-options-1bi44p_B.js} +0 -0
- /package/dist/{command-options-CA30lfLK.js → command-options-7y5Zrv4M.js} +0 -0
- /package/dist/{config-eval-CjGZtLwx.js → config-eval-CJtk3Msr.js} +0 -0
- /package/dist/{config-eval-H_wlEYIG.js → config-eval-DQIwdWg7.js} +0 -0
- /package/dist/{constants-ChptG3d7.js → constants--3PuQVaS.js} +0 -0
- /package/dist/{constants-DY6b-_Wl.js → constants-DNWjlxZ5.js} +0 -0
- /package/dist/{credentials-BHWUBHMd.js → credentials-BhnauW0K.js} +0 -0
- /package/dist/{credentials-DFsi1_e8.js → credentials-eZcqWNG_.js} +0 -0
- /package/dist/{daemon-runtime-CMnbwryP.js → daemon-runtime-99xh1fGv.js} +0 -0
- /package/dist/{daemon-runtime-CvqE4ysg.js → daemon-runtime-BOcdJaFy.js} +0 -0
- /package/dist/{dangerous-name-matching-BzmiLXmA.js → dangerous-name-matching-YeatnYIA.js} +0 -0
- /package/dist/{dangerous-name-matching-DaVRgwer.js → dangerous-name-matching-oVb1EqYT.js} +0 -0
- /package/dist/{dangerous-tools-BOLoCRv4.js → dangerous-tools-BMt8-6jE.js} +0 -0
- /package/dist/{dangerous-tools-Baq7Q-i6.js → dangerous-tools-CripTfYv.js} +0 -0
- /package/dist/{fetch-timeout-DTIN7CGM.js → fetch-timeout-Db3da8yR.js} +0 -0
- /package/dist/{fetch-timeout-DoySHqfO.js → fetch-timeout-l_6RdoMw.js} +0 -0
- /package/dist/{file-identity-BxlKD8Ys.js → file-identity-Bs9zZOi2.js} +0 -0
- /package/dist/{format-duration-CqUERz51.js → format-duration-Bo-Mxi3E.js} +0 -0
- /package/dist/{format-duration-Ct-yiwkS.js → format-duration-CfrJ5T8k.js} +0 -0
- /package/dist/{format-relative-79_Y1n2Y.js → format-relative-8cNYQsqb.js} +0 -0
- /package/dist/{format-relative-CxLpEQOX.js → format-relative-CZOlQ2pA.js} +0 -0
- /package/dist/{health-format-B_QRD8Si.js → health-format-WMRp1BbP.js} +0 -0
- /package/dist/{heartbeat-wake-LGEgcXjs.js → heartbeat-wake-BtRrOB-t.js} +0 -0
- /package/dist/{heartbeat-wake-Y97geucO.js → heartbeat-wake-eRINROYK.js} +0 -0
- /package/dist/{help-format-NNm_Ov4H.js → help-format-BEb0SPHF.js} +0 -0
- /package/dist/{helpers-BAsMXprO.js → helpers-BJtPtu_2.js} +0 -0
- /package/dist/{helpers-DLgbkcEn.js → helpers-Cj6f8SPZ.js} +0 -0
- /package/dist/{helpers-R7bU5IBz.js → helpers-ryxLx-aM.js} +0 -0
- /package/dist/{host-env-security-szwfmhC4.js → host-env-security-CbiODGvQ.js} +0 -0
- /package/dist/{input-provenance-Bn6thJNm.js → input-provenance-CPhdY-0F.js} +0 -0
- /package/dist/{input-provenance-xUsSMOsz.js → input-provenance-DUNEQoFM.js} +0 -0
- /package/dist/{ip-C9q3Oq20.js → ip-BAhS4rY2.js} +0 -0
- /package/dist/{ip-D0zgNmBV.js → ip-BcdPcLiP.js} +0 -0
- /package/dist/{is-main-DN8-sNR5.js → is-main-KcWqINzy.js} +0 -0
- /package/dist/{json-file-ChO_R9yh.js → json-file-BVvmrQG3.js} +0 -0
- /package/dist/{json-file-B7l5-Xhr.js → json-file-Dbg7nZg1.js} +0 -0
- /package/dist/{json-files-CmpYSF4G.js → json-files-DSKEdz7x.js} +0 -0
- /package/dist/{lanes-ByWMUgrz.js → lanes-Brd-nf-Z.js} +0 -0
- /package/dist/{lanes-cHJ5arWg.js → lanes-COs3zODW.js} +0 -0
- /package/dist/{links-Bz4V7R_p.js → links-gse8sWn-.js} +0 -0
- /package/dist/{location-DBWCGNLq.js → location-D1FM_C63.js} +0 -0
- /package/dist/{location-GbZ0bBRU.js → location-LuzkqHGi.js} +0 -0
- /package/dist/{logger-DyL5G2DO.js → logger-BMP_j_Lx.js} +0 -0
- /package/dist/{logger-BWMPnILd.js → logger-DWbwXLjl.js} +0 -0
- /package/dist/{logger-GvipVDfh.js → logger-DXCDb7qu.js} +0 -0
- /package/dist/{logging-D8-Kozjc.js → logging-CAgCb3n3.js} +0 -0
- /package/dist/{message-channel-uWMAiywE.js → message-channel-D72Bc6Tb.js} +0 -0
- /package/dist/{mime-BS3jhcZE.js → mime-Cqg1jjia.js} +0 -0
- /package/dist/{mime-Cxh_64P6.js → mime-D4bQLMJL.js} +0 -0
- /package/dist/{mutable-allowlist-detectors-DiZDtmlZ.js → mutable-allowlist-detectors-NtI6s4TE.js} +0 -0
- /package/dist/{mutable-allowlist-detectors-U5ThQr9V.js → mutable-allowlist-detectors-nAmo9v5u.js} +0 -0
- /package/dist/{node-cli-Uf6lAntf.js → node-cli-bNJbha3z.js} +0 -0
- /package/dist/{parse-log-line-enq8pduH.js → parse-log-line-BY9Vz72K.js} +0 -0
- /package/dist/{parse-log-line-mz9TG6ig.js → parse-log-line-BrrE4onI.js} +0 -0
- /package/dist/{parse-timeout-BMP8a0_a.js → parse-timeout-Dfyln-4M.js} +0 -0
- /package/dist/{path-guards-CIx4hURU.js → path-guards-D9LU0y9L.js} +0 -0
- /package/dist/{path-guards-CrQOUlsq.js → path-guards-crZaTVvq.js} +0 -0
- /package/dist/plugin-sdk/{agents → auth}/api-key-rotation.d.ts +0 -0
- /package/dist/plugin-sdk/{agents/auth-profiles → auth}/paths.d.ts +0 -0
- /package/dist/plugin-sdk/{agents/auth-profiles → auth}/profiles.d.ts +0 -0
- /package/dist/plugin-sdk/{agents/auth-profiles → auth}/store.d.ts +0 -0
- /package/dist/plugin-sdk/{agents/auth-profiles → auth}/types.d.ts +0 -0
- /package/dist/{plugins-allowlist-BbTQ5Z2k.js → plugins-allowlist-CD4oIJNk.js} +0 -0
- /package/dist/{plugins-allowlist-C20oaESO.js → plugins-allowlist-CUhk3GDh.js} +0 -0
- /package/dist/{polls-B0CCBDeR.js → polls-ChvH1OIW.js} +0 -0
- /package/dist/{polls-CwwHzYBM.js → polls-Dn1C2d1-.js} +0 -0
- /package/dist/{ports-lsof-Wteul3ju.js → ports-lsof-BDQWExpn.js} +0 -0
- /package/dist/{process-scoped-map-CV9kDvfG.js → process-scoped-map-BwUkYFQV.js} +0 -0
- /package/dist/{process-scoped-map-PEvnG75N.js → process-scoped-map-CBWcUvTa.js} +0 -0
- /package/dist/{program-context-jqeI5alP.js → program-context-DtsEOsdM.js} +0 -0
- /package/dist/{progress-C1kUfYL-.js → progress-BjGCAXH7.js} +0 -0
- /package/dist/{prompt-Yn2yClg1.js → prompt-FIISMuNm.js} +0 -0
- /package/dist/{prompt-style-DjEYC_s-.js → prompt-style-DL64_X-p.js} +0 -0
- /package/dist/{provider-utils-3JTMJroG.js → provider-utils-DiLhkKQp.js} +0 -0
- /package/dist/{proxy-DL3MD6-P.js → proxy-DUTF0OYE.js} +0 -0
- /package/dist/{proxy-DpNv2cSV.js → proxy-Dv0sbx6A.js} +0 -0
- /package/dist/{pw-ai-state-CGfLv6nV.js → pw-ai-state-DKhOTqDv.js} +0 -0
- /package/dist/{pw-ai-state-Dynx20hr.js → pw-ai-state-kkp06zyZ.js} +0 -0
- /package/dist/{redact-Dx1Fue21.js → redact-BTeK8lMZ.js} +0 -0
- /package/dist/{redact-identifier-BTIWtaa-.js → redact-identifier-F6t5pklx.js} +0 -0
- /package/dist/{redact-identifier-CAagcfWA.js → redact-identifier-VdOrq-IK.js} +0 -0
- /package/dist/{remoteclaw-root-C2HV2VeC.js → remoteclaw-root-DF8m3X4C.js} +0 -0
- /package/dist/{remoteclaw-root-DybYl8PL.js → remoteclaw-root-rJHOCwzo.js} +0 -0
- /package/dist/{render-CCLsW6Lz.js → render-e7fENCYH.js} +0 -0
- /package/dist/{render-uf6PvGMV.js → render-qcqmrHse.js} +0 -0
- /package/dist/{retry-DnqPAqWp.js → retry-CwZiwLDN.js} +0 -0
- /package/dist/{runtime-DJNp29jv.js → runtime-Ds3E9SqF.js} +0 -0
- /package/dist/{runtime-guard-U-ewY_QH.js → runtime-guard-CdJVmJc0.js} +0 -0
- /package/dist/{secret-equal-BbHdTtqY.js → secret-equal-CDUVxXmp.js} +0 -0
- /package/dist/{secret-equal-CXJEZiWb.js → secret-equal-d3sEnK98.js} +0 -0
- /package/dist/{secure-random-CS2mSdTn.js → secure-random-CJtykx_p.js} +0 -0
- /package/dist/{secure-random-_dzDDlFo.js → secure-random-y6N6Gted.js} +0 -0
- /package/dist/{session-key-5YLnn_qf.js → session-key-BF-9YzxC.js} +0 -0
- /package/dist/{stagger-BXv_apuy.js → stagger-B-_Wnofy.js} +0 -0
- /package/dist/{stagger-MI9gd2rQ.js → stagger-CjkdqPuN.js} +0 -0
- /package/dist/{status-BmtCS3T1.js → status-BFmH9Uge.js} +0 -0
- /package/dist/{status-BrwHRn2B.js → status-BIupzBh9.js} +0 -0
- /package/dist/{strip-inbound-meta-DjKcSFaW.js → strip-inbound-meta-BNXRYvmY.js} +0 -0
- /package/dist/{strip-inbound-meta-jy3bkUab.js → strip-inbound-meta-BtNFmc6V.js} +0 -0
- /package/dist/{table-C1rdyYl9.js → table-Au5EeKD6.js} +0 -0
- /package/dist/{target-errors-BDpPcwh5.js → target-errors-B6YON-5k.js} +0 -0
- /package/dist/{target-errors-DdIAPcMM.js → target-errors-sPHoHj73.js} +0 -0
- /package/dist/{targets-D-qLBpTA.js → targets-BtGRUQMa.js} +0 -0
- /package/dist/{targets-BMenhVHg.js → targets-D3r6Zgic.js} +0 -0
- /package/dist/{targets-C-2xwh9f.js → targets-DDdPVd12.js} +0 -0
- /package/dist/{targets-UncQvCVs.js → targets-Ds5eT_RZ.js} +0 -0
- /package/dist/{targets-D7PT_rdO.js → targets-DtvPW-B8.js} +0 -0
- /package/dist/{text-format-BQ3z_OXA.js → text-format-CFm4X8Ze.js} +0 -0
- /package/dist/{text-format-oWqzVmah.js → text-format-KHU3KzvQ.js} +0 -0
- /package/dist/{tokens-B-jmvNR9.js → tokens-BGw4xHhW.js} +0 -0
- /package/dist/{usage-BdhBT0Vz.js → usage-BEjWlD9A.js} +0 -0
- /package/dist/{usage-format-C3mNLfhI.js → usage-format-Cx3JveFn.js} +0 -0
- /package/dist/{usage-format-DAaPzr_z.js → usage-format-D-ZaYT_e.js} +0 -0
- /package/dist/{usage-BtQcAnf6.js → usage-o8O_TxA-.js} +0 -0
- /package/dist/{widearea-dns-CsmBVbez.js → widearea-dns-DUDYT3z2.js} +0 -0
- /package/dist/{workspace-BzPeZDew.js → workspace-9__vtmnA.js} +0 -0
- /package/dist/{wsl-B_sPlzWw.js → wsl-BLrG__iS.js} +0 -0
- /package/dist/{wsl-BCnYV9O0.js → wsl-C2dudsWt.js} +0 -0
package/dist/extensionAPI.js
CHANGED
|
@@ -13,16 +13,13 @@ import { execFileSync, spawn } from "node:child_process";
|
|
|
13
13
|
import { fileURLToPath } from "node:url";
|
|
14
14
|
import AjvPkg from "ajv";
|
|
15
15
|
import { z } from "zod";
|
|
16
|
+
import { lookup } from "node:dns";
|
|
17
|
+
import { lookup as lookup$1 } from "node:dns/promises";
|
|
18
|
+
import { Agent } from "undici";
|
|
19
|
+
import ipaddr from "ipaddr.js";
|
|
20
|
+
import { fileTypeFromBuffer } from "file-type";
|
|
16
21
|
import { createInterface } from "node:readline";
|
|
17
22
|
|
|
18
|
-
//#region src/config/model-input.ts
|
|
19
|
-
function resolveAgentModelPrimaryValue(model) {
|
|
20
|
-
if (typeof model === "string") return model.trim() || void 0;
|
|
21
|
-
if (!model || typeof model !== "object") return;
|
|
22
|
-
return model.primary?.trim() || void 0;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
//#endregion
|
|
26
23
|
//#region src/infra/home-dir.ts
|
|
27
24
|
function normalize(value) {
|
|
28
25
|
const trimmed = value?.trim();
|
|
@@ -542,8 +539,8 @@ function pruneOldRollingLogs(dir) {
|
|
|
542
539
|
|
|
543
540
|
//#endregion
|
|
544
541
|
//#region src/terminal/palette.ts
|
|
545
|
-
const
|
|
546
|
-
accent: "#
|
|
542
|
+
const PALETTE = {
|
|
543
|
+
accent: "#FF5A36",
|
|
547
544
|
accentBright: "#FF7A3D",
|
|
548
545
|
accentDim: "#D14A22",
|
|
549
546
|
info: "#FF8A5B",
|
|
@@ -559,17 +556,17 @@ const hasForceColor = typeof process.env.FORCE_COLOR === "string" && process.env
|
|
|
559
556
|
const baseChalk = process.env.NO_COLOR && !hasForceColor ? new Chalk({ level: 0 }) : chalk;
|
|
560
557
|
const hex = (value) => baseChalk.hex(value);
|
|
561
558
|
const theme = {
|
|
562
|
-
accent: hex(
|
|
563
|
-
accentBright: hex(
|
|
564
|
-
accentDim: hex(
|
|
565
|
-
info: hex(
|
|
566
|
-
success: hex(
|
|
567
|
-
warn: hex(
|
|
568
|
-
error: hex(
|
|
569
|
-
muted: hex(
|
|
570
|
-
heading: baseChalk.bold.hex(
|
|
571
|
-
command: hex(
|
|
572
|
-
option: hex(
|
|
559
|
+
accent: hex(PALETTE.accent),
|
|
560
|
+
accentBright: hex(PALETTE.accentBright),
|
|
561
|
+
accentDim: hex(PALETTE.accentDim),
|
|
562
|
+
info: hex(PALETTE.info),
|
|
563
|
+
success: hex(PALETTE.success),
|
|
564
|
+
warn: hex(PALETTE.warn),
|
|
565
|
+
error: hex(PALETTE.error),
|
|
566
|
+
muted: hex(PALETTE.muted),
|
|
567
|
+
heading: baseChalk.bold.hex(PALETTE.accent),
|
|
568
|
+
command: hex(PALETTE.accentBright),
|
|
569
|
+
option: hex(PALETTE.warn)
|
|
573
570
|
};
|
|
574
571
|
|
|
575
572
|
//#endregion
|
|
@@ -578,6 +575,10 @@ let globalVerbose = false;
|
|
|
578
575
|
function isVerbose() {
|
|
579
576
|
return globalVerbose;
|
|
580
577
|
}
|
|
578
|
+
function logVerboseConsole(message) {
|
|
579
|
+
if (!globalVerbose) return;
|
|
580
|
+
console.log(theme.muted(message));
|
|
581
|
+
}
|
|
581
582
|
const success = theme.success;
|
|
582
583
|
const warn = theme.warn;
|
|
583
584
|
const info = theme.info;
|
|
@@ -1087,7 +1088,8 @@ function resolveAgentConfig(cfg, agentId) {
|
|
|
1087
1088
|
groupChat: entry.groupChat,
|
|
1088
1089
|
subagents: typeof entry.subagents === "object" && entry.subagents ? entry.subagents : void 0,
|
|
1089
1090
|
sandbox: entry.sandbox,
|
|
1090
|
-
tools: entry.tools
|
|
1091
|
+
tools: entry.tools,
|
|
1092
|
+
auth: entry.auth
|
|
1091
1093
|
};
|
|
1092
1094
|
}
|
|
1093
1095
|
function resolveAgentWorkspaceDir(cfg, agentId) {
|
|
@@ -1096,6 +1098,11 @@ function resolveAgentWorkspaceDir(cfg, agentId) {
|
|
|
1096
1098
|
if (configured) return stripNullBytes(resolveUserPath(configured));
|
|
1097
1099
|
throw new Error(`agent '${id}' has no workspace configured — set agents.list[].workspace in remoteclaw.json`);
|
|
1098
1100
|
}
|
|
1101
|
+
function resolveAgentWorkspaceDirOrNull(cfg, agentId) {
|
|
1102
|
+
const configured = resolveAgentConfig(cfg, normalizeAgentId(agentId))?.workspace?.trim();
|
|
1103
|
+
if (configured) return stripNullBytes(resolveUserPath(configured));
|
|
1104
|
+
return null;
|
|
1105
|
+
}
|
|
1099
1106
|
function resolveAgentDir(cfg, agentId) {
|
|
1100
1107
|
const id = normalizeAgentId(agentId);
|
|
1101
1108
|
const configured = resolveAgentConfig(cfg, id)?.agentDir?.trim();
|
|
@@ -1104,11 +1111,6 @@ function resolveAgentDir(cfg, agentId) {
|
|
|
1104
1111
|
return path.join(root, "agents", id, "agent");
|
|
1105
1112
|
}
|
|
1106
1113
|
|
|
1107
|
-
//#endregion
|
|
1108
|
-
//#region src/agents/defaults.ts
|
|
1109
|
-
const DEFAULT_PROVIDER = "anthropic";
|
|
1110
|
-
const DEFAULT_MODEL = "claude-opus-4-6";
|
|
1111
|
-
|
|
1112
1114
|
//#endregion
|
|
1113
1115
|
//#region src/agents/identity.ts
|
|
1114
1116
|
function resolveAgentIdentity(cfg, agentId) {
|
|
@@ -2168,7 +2170,9 @@ function applyContextPruningDefaults(cfg) {
|
|
|
2168
2170
|
};
|
|
2169
2171
|
modelsMutated = true;
|
|
2170
2172
|
}
|
|
2171
|
-
const
|
|
2173
|
+
const rawModel = defaults.model;
|
|
2174
|
+
const rawPrimary = typeof rawModel === "string" ? rawModel : rawModel?.primary;
|
|
2175
|
+
const primary = resolvePrimaryModelRef(typeof rawPrimary === "string" ? rawPrimary : void 0);
|
|
2172
2176
|
if (primary) {
|
|
2173
2177
|
const parsedPrimary = parseModelRef(primary, "anthropic");
|
|
2174
2178
|
if (isAnthropicCacheRetentionTarget(parsedPrimary)) {
|
|
@@ -2201,25 +2205,6 @@ function applyContextPruningDefaults(cfg) {
|
|
|
2201
2205
|
}
|
|
2202
2206
|
};
|
|
2203
2207
|
}
|
|
2204
|
-
function applyCompactionDefaults(cfg) {
|
|
2205
|
-
const defaults = cfg.agents?.defaults;
|
|
2206
|
-
if (!defaults) return cfg;
|
|
2207
|
-
const compaction = defaults?.compaction;
|
|
2208
|
-
if (compaction?.mode) return cfg;
|
|
2209
|
-
return {
|
|
2210
|
-
...cfg,
|
|
2211
|
-
agents: {
|
|
2212
|
-
...cfg.agents,
|
|
2213
|
-
defaults: {
|
|
2214
|
-
...defaults,
|
|
2215
|
-
compaction: {
|
|
2216
|
-
...compaction,
|
|
2217
|
-
mode: "safeguard"
|
|
2218
|
-
}
|
|
2219
|
-
}
|
|
2220
|
-
}
|
|
2221
|
-
};
|
|
2222
|
-
}
|
|
2223
2208
|
|
|
2224
2209
|
//#endregion
|
|
2225
2210
|
//#region src/config/env-preserve.ts
|
|
@@ -4657,13 +4642,6 @@ function parseDurationMs(raw, opts) {
|
|
|
4657
4642
|
return ms;
|
|
4658
4643
|
}
|
|
4659
4644
|
|
|
4660
|
-
//#endregion
|
|
4661
|
-
//#region src/config/zod-schema.agent-model.ts
|
|
4662
|
-
const AgentModelSchema = z.union([z.string(), z.object({
|
|
4663
|
-
primary: z.string().optional(),
|
|
4664
|
-
fallbacks: z.array(z.string()).optional()
|
|
4665
|
-
}).strict()]);
|
|
4666
|
-
|
|
4667
4645
|
//#endregion
|
|
4668
4646
|
//#region src/config/zod-schema.allowdeny.ts
|
|
4669
4647
|
const AllowDenyActionSchema = z.union([z.literal("allow"), z.literal("deny")]);
|
|
@@ -5037,6 +5015,12 @@ const ProviderCommandsSchema = z.object({ native: NativeCommandsSettingSchema.op
|
|
|
5037
5015
|
|
|
5038
5016
|
//#endregion
|
|
5039
5017
|
//#region src/config/zod-schema.agent-runtime.ts
|
|
5018
|
+
/** Auth profile ref: `false` (skip), single string, or string array (rotation). */
|
|
5019
|
+
const AuthFieldSchema = z.union([
|
|
5020
|
+
z.literal(false),
|
|
5021
|
+
z.string(),
|
|
5022
|
+
z.array(z.string())
|
|
5023
|
+
]).optional();
|
|
5040
5024
|
const BootSchema = z.object({
|
|
5041
5025
|
prompt: z.string().optional(),
|
|
5042
5026
|
file: z.string().optional()
|
|
@@ -5050,7 +5034,6 @@ const HeartbeatSchema = z.object({
|
|
|
5050
5034
|
}).strict().optional(),
|
|
5051
5035
|
model: z.string().optional(),
|
|
5052
5036
|
session: z.string().optional(),
|
|
5053
|
-
includeReasoning: z.boolean().optional(),
|
|
5054
5037
|
target: z.string().optional(),
|
|
5055
5038
|
to: z.string().optional(),
|
|
5056
5039
|
accountId: z.string().optional(),
|
|
@@ -5195,7 +5178,7 @@ const AgentEntrySchema = z.object({
|
|
|
5195
5178
|
name: z.string().optional(),
|
|
5196
5179
|
workspace: z.string().optional(),
|
|
5197
5180
|
agentDir: z.string().optional(),
|
|
5198
|
-
model:
|
|
5181
|
+
model: z.unknown().optional(),
|
|
5199
5182
|
skills: z.array(z.string()).optional(),
|
|
5200
5183
|
humanDelay: HumanDelaySchema.optional(),
|
|
5201
5184
|
heartbeat: HeartbeatSchema,
|
|
@@ -5204,14 +5187,11 @@ const AgentEntrySchema = z.object({
|
|
|
5204
5187
|
groupChat: GroupChatSchema,
|
|
5205
5188
|
subagents: z.object({
|
|
5206
5189
|
allowAgents: z.array(z.string()).optional(),
|
|
5207
|
-
model: z.
|
|
5208
|
-
primary: z.string().optional(),
|
|
5209
|
-
fallbacks: z.array(z.string()).optional()
|
|
5210
|
-
}).strict()]).optional(),
|
|
5211
|
-
thinking: z.string().optional()
|
|
5190
|
+
model: z.unknown().optional()
|
|
5212
5191
|
}).strict().optional(),
|
|
5213
5192
|
editableFiles: z.array(z.string()).optional(),
|
|
5214
|
-
tools: AgentToolsSchema
|
|
5193
|
+
tools: AgentToolsSchema,
|
|
5194
|
+
auth: AuthFieldSchema
|
|
5215
5195
|
}).strict();
|
|
5216
5196
|
const ToolsSchema = z.object({
|
|
5217
5197
|
...CommonToolPolicyFields,
|
|
@@ -5254,13 +5234,10 @@ const ToolsSchema = z.object({
|
|
|
5254
5234
|
//#endregion
|
|
5255
5235
|
//#region src/config/zod-schema.agent-defaults.ts
|
|
5256
5236
|
const AgentDefaultsSchema = z.object({
|
|
5257
|
-
model:
|
|
5258
|
-
imageModel:
|
|
5259
|
-
models: z.
|
|
5260
|
-
|
|
5261
|
-
params: z.record(z.string(), z.unknown()).optional(),
|
|
5262
|
-
streaming: z.boolean().optional()
|
|
5263
|
-
}).strict()).optional(),
|
|
5237
|
+
model: z.unknown().optional(),
|
|
5238
|
+
imageModel: z.unknown().optional(),
|
|
5239
|
+
models: z.unknown().optional(),
|
|
5240
|
+
workspace: z.string().optional(),
|
|
5264
5241
|
repoRoot: z.string().optional(),
|
|
5265
5242
|
skipBootstrap: z.boolean().optional(),
|
|
5266
5243
|
bootstrapMaxChars: z.number().int().positive().optional(),
|
|
@@ -5275,7 +5252,7 @@ const AgentDefaultsSchema = z.object({
|
|
|
5275
5252
|
envelopeTimestamp: z.union([z.literal("on"), z.literal("off")]).optional(),
|
|
5276
5253
|
envelopeElapsed: z.union([z.literal("on"), z.literal("off")]).optional(),
|
|
5277
5254
|
contextTokens: z.number().int().positive().optional(),
|
|
5278
|
-
cliBackends: z.
|
|
5255
|
+
cliBackends: z.unknown().optional(),
|
|
5279
5256
|
contextPruning: z.object({
|
|
5280
5257
|
mode: z.union([z.literal("off"), z.literal("cache-ttl")]).optional(),
|
|
5281
5258
|
ttl: z.string().optional(),
|
|
@@ -5297,21 +5274,6 @@ const AgentDefaultsSchema = z.object({
|
|
|
5297
5274
|
placeholder: z.string().optional()
|
|
5298
5275
|
}).strict().optional()
|
|
5299
5276
|
}).strict().optional(),
|
|
5300
|
-
compaction: z.object({
|
|
5301
|
-
mode: z.union([z.literal("default"), z.literal("safeguard")]).optional(),
|
|
5302
|
-
reserveTokens: z.number().int().nonnegative().optional(),
|
|
5303
|
-
keepRecentTokens: z.number().int().positive().optional(),
|
|
5304
|
-
reserveTokensFloor: z.number().int().nonnegative().optional(),
|
|
5305
|
-
maxHistoryShare: z.number().min(.1).max(.9).optional()
|
|
5306
|
-
}).strict().optional(),
|
|
5307
|
-
thinkingDefault: z.union([
|
|
5308
|
-
z.literal("off"),
|
|
5309
|
-
z.literal("minimal"),
|
|
5310
|
-
z.literal("low"),
|
|
5311
|
-
z.literal("medium"),
|
|
5312
|
-
z.literal("high"),
|
|
5313
|
-
z.literal("xhigh")
|
|
5314
|
-
]).optional(),
|
|
5315
5277
|
verboseDefault: z.union([
|
|
5316
5278
|
z.literal("off"),
|
|
5317
5279
|
z.literal("on"),
|
|
@@ -5341,8 +5303,7 @@ const AgentDefaultsSchema = z.object({
|
|
|
5341
5303
|
maxSpawnDepth: z.number().int().min(1).max(5).optional().describe("Maximum nesting depth for sub-agent spawning. 1 = no nesting (default), 2 = sub-agents can spawn sub-sub-agents."),
|
|
5342
5304
|
maxChildrenPerAgent: z.number().int().min(1).max(20).optional().describe("Maximum number of active children a single agent session can spawn (default: 5)."),
|
|
5343
5305
|
archiveAfterMinutes: z.number().int().positive().optional(),
|
|
5344
|
-
model:
|
|
5345
|
-
thinking: z.string().optional(),
|
|
5306
|
+
model: z.unknown().optional(),
|
|
5346
5307
|
runTimeoutSeconds: z.number().int().min(0).optional(),
|
|
5347
5308
|
announceTimeoutMs: z.number().int().positive().optional()
|
|
5348
5309
|
}).strict().optional(),
|
|
@@ -5353,7 +5314,10 @@ const AgentDefaultsSchema = z.object({
|
|
|
5353
5314
|
z.literal("gemini"),
|
|
5354
5315
|
z.literal("codex"),
|
|
5355
5316
|
z.literal("opencode")
|
|
5356
|
-
]).optional()
|
|
5317
|
+
]).optional(),
|
|
5318
|
+
runtimeArgs: z.array(z.string()).optional(),
|
|
5319
|
+
runtimeEnv: z.record(z.string(), z.string()).optional(),
|
|
5320
|
+
auth: AuthFieldSchema
|
|
5357
5321
|
}).strict().optional();
|
|
5358
5322
|
|
|
5359
5323
|
//#endregion
|
|
@@ -7270,7 +7234,8 @@ function validateIdentityAvatar(config) {
|
|
|
7270
7234
|
});
|
|
7271
7235
|
continue;
|
|
7272
7236
|
}
|
|
7273
|
-
|
|
7237
|
+
const workspaceDir = resolveAgentWorkspaceDirOrNull(config, entry.id ?? resolveDefaultAgentId(config));
|
|
7238
|
+
if (workspaceDir != null && !isWorkspaceAvatarPath(avatar, workspaceDir)) issues.push({
|
|
7274
7239
|
path: `agents.list.${index}.identity.avatar`,
|
|
7275
7240
|
message: "identity.avatar must stay within the agent workspace."
|
|
7276
7241
|
});
|
|
@@ -7346,7 +7311,7 @@ function validateConfigObjectWithPluginsBase(raw, opts) {
|
|
|
7346
7311
|
if (registryInfo) return registryInfo;
|
|
7347
7312
|
const registry = loadPluginManifestRegistry({
|
|
7348
7313
|
config,
|
|
7349
|
-
workspaceDir:
|
|
7314
|
+
workspaceDir: resolveAgentWorkspaceDirOrNull(config, resolveDefaultAgentId(config)) ?? void 0
|
|
7350
7315
|
});
|
|
7351
7316
|
const knownIds = new Set(registry.plugins.map((record) => record.id));
|
|
7352
7317
|
const normalizedPlugins = normalizePluginsConfig(config.plugins);
|
|
@@ -7949,7 +7914,7 @@ function createConfigIO(overrides = {}) {
|
|
|
7949
7914
|
deps.logger.warn(`Config warnings:\\n${details}`);
|
|
7950
7915
|
}
|
|
7951
7916
|
warnIfConfigFromFuture(validated.config, deps.logger);
|
|
7952
|
-
const cfg = applyTalkConfigNormalization(applyModelDefaults(
|
|
7917
|
+
const cfg = applyTalkConfigNormalization(applyModelDefaults(applyContextPruningDefaults(applyAgentDefaults(applySessionDefaults(applyLoggingDefaults(applyMessageDefaults(validated.config)))))));
|
|
7953
7918
|
normalizeConfigPaths(cfg);
|
|
7954
7919
|
const duplicates = findDuplicateAgentDirs(cfg, {
|
|
7955
7920
|
env: deps.env,
|
|
@@ -8009,7 +7974,7 @@ function createConfigIO(overrides = {}) {
|
|
|
8009
7974
|
parsed: {},
|
|
8010
7975
|
resolved: {},
|
|
8011
7976
|
valid: true,
|
|
8012
|
-
config: applyTalkApiKey(applyTalkConfigNormalization(applyModelDefaults(
|
|
7977
|
+
config: applyTalkApiKey(applyTalkConfigNormalization(applyModelDefaults(applyContextPruningDefaults(applyAgentDefaults(applySessionDefaults(applyMessageDefaults({}))))))),
|
|
8013
7978
|
hash,
|
|
8014
7979
|
issues: [],
|
|
8015
7980
|
warnings: [],
|
|
@@ -9810,6 +9775,32 @@ async function withSessionStoreLock(storePath, fn, opts = {}) {
|
|
|
9810
9775
|
});
|
|
9811
9776
|
}
|
|
9812
9777
|
|
|
9778
|
+
//#endregion
|
|
9779
|
+
//#region src/logger.ts
|
|
9780
|
+
const subsystemPrefixRe = /^([a-z][a-z0-9-]{1,20}):\s+(.*)$/i;
|
|
9781
|
+
function splitSubsystem(message) {
|
|
9782
|
+
const match = message.match(subsystemPrefixRe);
|
|
9783
|
+
if (!match) return null;
|
|
9784
|
+
const [, subsystem, rest] = match;
|
|
9785
|
+
return {
|
|
9786
|
+
subsystem,
|
|
9787
|
+
rest
|
|
9788
|
+
};
|
|
9789
|
+
}
|
|
9790
|
+
function logWarn(message, runtime = defaultRuntime) {
|
|
9791
|
+
const parsed = runtime === defaultRuntime ? splitSubsystem(message) : null;
|
|
9792
|
+
if (parsed) {
|
|
9793
|
+
createSubsystemLogger(parsed.subsystem).warn(parsed.rest);
|
|
9794
|
+
return;
|
|
9795
|
+
}
|
|
9796
|
+
runtime.log(warn(message));
|
|
9797
|
+
getLogger().warn(message);
|
|
9798
|
+
}
|
|
9799
|
+
function logDebug(message) {
|
|
9800
|
+
getLogger().debug(message);
|
|
9801
|
+
logVerboseConsole(message);
|
|
9802
|
+
}
|
|
9803
|
+
|
|
9813
9804
|
//#endregion
|
|
9814
9805
|
//#region src/plugins/hook-runner-global.ts
|
|
9815
9806
|
/**
|
|
@@ -9855,46 +9846,77 @@ var DeliveryAdapter = class {
|
|
|
9855
9846
|
async process(events, callbacks) {
|
|
9856
9847
|
let textBuffer = "";
|
|
9857
9848
|
const payloads = [];
|
|
9858
|
-
|
|
9859
|
-
|
|
9860
|
-
|
|
9861
|
-
|
|
9862
|
-
|
|
9863
|
-
|
|
9864
|
-
|
|
9865
|
-
|
|
9866
|
-
|
|
9867
|
-
|
|
9849
|
+
/** Track media delivered via streaming events to avoid duplicates from result.media. */
|
|
9850
|
+
const deliveredMediaKeys = /* @__PURE__ */ new Set();
|
|
9851
|
+
let eventCount = 0;
|
|
9852
|
+
for await (const event of events) {
|
|
9853
|
+
eventCount++;
|
|
9854
|
+
switch (event.type) {
|
|
9855
|
+
case "text":
|
|
9856
|
+
if (event.text === "") break;
|
|
9857
|
+
textBuffer += event.text;
|
|
9858
|
+
while (textBuffer.length > this.chunkLimit) {
|
|
9859
|
+
const { chunk, rest } = splitAtBoundary(textBuffer, this.chunkLimit);
|
|
9860
|
+
textBuffer = rest;
|
|
9861
|
+
const payload = { text: chunk };
|
|
9862
|
+
payloads.push(payload);
|
|
9863
|
+
await callbacks?.onPartialReply?.(payload);
|
|
9864
|
+
}
|
|
9865
|
+
break;
|
|
9866
|
+
case "media": {
|
|
9867
|
+
const mediaUrl = event.media.filePath ?? event.media.sourceUrl;
|
|
9868
|
+
if (mediaUrl) {
|
|
9869
|
+
if (textBuffer.length > 0) {
|
|
9870
|
+
const textPayload = { text: textBuffer };
|
|
9871
|
+
payloads.push(textPayload);
|
|
9872
|
+
await callbacks?.onBlockReply?.(textPayload);
|
|
9873
|
+
textBuffer = "";
|
|
9874
|
+
}
|
|
9875
|
+
deliveredMediaKeys.add(mediaUrl);
|
|
9876
|
+
const payload = { mediaUrl };
|
|
9877
|
+
payloads.push(payload);
|
|
9878
|
+
await callbacks?.onBlockReply?.(payload);
|
|
9879
|
+
}
|
|
9880
|
+
break;
|
|
9868
9881
|
}
|
|
9869
|
-
break;
|
|
9870
|
-
|
|
9871
|
-
|
|
9872
|
-
|
|
9873
|
-
|
|
9874
|
-
|
|
9875
|
-
|
|
9876
|
-
|
|
9877
|
-
|
|
9878
|
-
|
|
9879
|
-
|
|
9880
|
-
};
|
|
9881
|
-
payloads.push(payload);
|
|
9882
|
-
await callbacks?.onBlockReply?.(payload);
|
|
9883
|
-
break;
|
|
9884
|
-
}
|
|
9885
|
-
case "done":
|
|
9886
|
-
if (textBuffer.length > 0) {
|
|
9887
|
-
const payload = { text: textBuffer };
|
|
9882
|
+
case "tool_use": break;
|
|
9883
|
+
case "tool_result": {
|
|
9884
|
+
const payload = { text: formatToolResult(event.toolId, event.output, event.isError) };
|
|
9885
|
+
await callbacks?.onToolResult?.(payload);
|
|
9886
|
+
break;
|
|
9887
|
+
}
|
|
9888
|
+
case "error": {
|
|
9889
|
+
const payload = {
|
|
9890
|
+
text: event.code ? `[${event.code}] ${event.message}` : event.message,
|
|
9891
|
+
isError: true
|
|
9892
|
+
};
|
|
9888
9893
|
payloads.push(payload);
|
|
9889
9894
|
await callbacks?.onBlockReply?.(payload);
|
|
9890
|
-
|
|
9895
|
+
break;
|
|
9891
9896
|
}
|
|
9892
|
-
|
|
9897
|
+
case "done":
|
|
9898
|
+
if (textBuffer.length > 0) {
|
|
9899
|
+
const payload = { text: textBuffer };
|
|
9900
|
+
payloads.push(payload);
|
|
9901
|
+
await callbacks?.onBlockReply?.(payload);
|
|
9902
|
+
textBuffer = "";
|
|
9903
|
+
}
|
|
9904
|
+
if (event.result.media?.length) for (const media of event.result.media) {
|
|
9905
|
+
const url = media.filePath ?? media.sourceUrl;
|
|
9906
|
+
if (url && !deliveredMediaKeys.has(url)) {
|
|
9907
|
+
const payload = { mediaUrl: url };
|
|
9908
|
+
payloads.push(payload);
|
|
9909
|
+
await callbacks?.onBlockReply?.(payload);
|
|
9910
|
+
}
|
|
9911
|
+
}
|
|
9912
|
+
break;
|
|
9913
|
+
}
|
|
9893
9914
|
}
|
|
9894
9915
|
if (textBuffer.length > 0) {
|
|
9895
9916
|
const payload = { text: textBuffer };
|
|
9896
9917
|
payloads.push(payload);
|
|
9897
9918
|
}
|
|
9919
|
+
logDebug(`[delivery-adapter] processed ${eventCount} events into ${payloads.length} payloads (chunkLimit=${this.chunkLimit})`);
|
|
9898
9920
|
return payloads;
|
|
9899
9921
|
}
|
|
9900
9922
|
};
|
|
@@ -10010,9 +10032,19 @@ const fatalAuthPatterns = [
|
|
|
10010
10032
|
* Case-insensitive matching throughout.
|
|
10011
10033
|
*/
|
|
10012
10034
|
function classifyError(message) {
|
|
10013
|
-
for (const pattern of retryablePatterns) if (pattern.test(message))
|
|
10014
|
-
|
|
10015
|
-
|
|
10035
|
+
for (const pattern of retryablePatterns) if (pattern.test(message)) {
|
|
10036
|
+
logDebug(`[error-classifier] classified as retryable: ${message.slice(0, 200)}`);
|
|
10037
|
+
return "retryable";
|
|
10038
|
+
}
|
|
10039
|
+
for (const pattern of contextOverflowPatterns) if (pattern.test(message)) {
|
|
10040
|
+
logDebug(`[error-classifier] classified as context_overflow: ${message.slice(0, 200)}`);
|
|
10041
|
+
return "context_overflow";
|
|
10042
|
+
}
|
|
10043
|
+
for (const pattern of fatalAuthPatterns) if (pattern.test(message)) {
|
|
10044
|
+
logDebug(`[error-classifier] classified as fatal (auth): ${message.slice(0, 200)}`);
|
|
10045
|
+
return "fatal";
|
|
10046
|
+
}
|
|
10047
|
+
logDebug(`[error-classifier] classified as fatal (unmatched): ${message.slice(0, 200)}`);
|
|
10016
10048
|
return "fatal";
|
|
10017
10049
|
}
|
|
10018
10050
|
|
|
@@ -10058,6 +10090,763 @@ async function readMcpSideEffects(filePath) {
|
|
|
10058
10090
|
return result;
|
|
10059
10091
|
}
|
|
10060
10092
|
|
|
10093
|
+
//#endregion
|
|
10094
|
+
//#region src/utils/fetch-timeout.ts
|
|
10095
|
+
/**
|
|
10096
|
+
* Relay abort without forwarding the Event argument as the abort reason.
|
|
10097
|
+
* Using .bind() avoids closure scope capture (memory leak prevention).
|
|
10098
|
+
*/
|
|
10099
|
+
function relayAbort() {
|
|
10100
|
+
this.abort();
|
|
10101
|
+
}
|
|
10102
|
+
/** Returns a bound abort relay for use as an event listener. */
|
|
10103
|
+
function bindAbortRelay(controller) {
|
|
10104
|
+
return relayAbort.bind(controller);
|
|
10105
|
+
}
|
|
10106
|
+
|
|
10107
|
+
//#endregion
|
|
10108
|
+
//#region src/shared/net/ip.ts
|
|
10109
|
+
const BLOCKED_IPV4_SPECIAL_USE_RANGES = new Set([
|
|
10110
|
+
"unspecified",
|
|
10111
|
+
"broadcast",
|
|
10112
|
+
"multicast",
|
|
10113
|
+
"linkLocal",
|
|
10114
|
+
"loopback",
|
|
10115
|
+
"carrierGradeNat",
|
|
10116
|
+
"private",
|
|
10117
|
+
"reserved"
|
|
10118
|
+
]);
|
|
10119
|
+
const PRIVATE_OR_LOOPBACK_IPV4_RANGES = new Set([
|
|
10120
|
+
"loopback",
|
|
10121
|
+
"private",
|
|
10122
|
+
"linkLocal",
|
|
10123
|
+
"carrierGradeNat"
|
|
10124
|
+
]);
|
|
10125
|
+
const PRIVATE_OR_LOOPBACK_IPV6_RANGES = new Set([
|
|
10126
|
+
"unspecified",
|
|
10127
|
+
"loopback",
|
|
10128
|
+
"linkLocal",
|
|
10129
|
+
"uniqueLocal"
|
|
10130
|
+
]);
|
|
10131
|
+
const RFC2544_BENCHMARK_PREFIX = [ipaddr.IPv4.parse("198.18.0.0"), 15];
|
|
10132
|
+
const EMBEDDED_IPV4_SENTINEL_RULES = [
|
|
10133
|
+
{
|
|
10134
|
+
matches: (parts) => parts[0] === 0 && parts[1] === 0 && parts[2] === 0 && parts[3] === 0 && parts[4] === 0 && parts[5] === 0,
|
|
10135
|
+
toHextets: (parts) => [parts[6], parts[7]]
|
|
10136
|
+
},
|
|
10137
|
+
{
|
|
10138
|
+
matches: (parts) => parts[0] === 100 && parts[1] === 65435 && parts[2] === 1 && parts[3] === 0 && parts[4] === 0 && parts[5] === 0,
|
|
10139
|
+
toHextets: (parts) => [parts[6], parts[7]]
|
|
10140
|
+
},
|
|
10141
|
+
{
|
|
10142
|
+
matches: (parts) => parts[0] === 8194,
|
|
10143
|
+
toHextets: (parts) => [parts[1], parts[2]]
|
|
10144
|
+
},
|
|
10145
|
+
{
|
|
10146
|
+
matches: (parts) => parts[0] === 8193 && parts[1] === 0,
|
|
10147
|
+
toHextets: (parts) => [parts[6] ^ 65535, parts[7] ^ 65535]
|
|
10148
|
+
},
|
|
10149
|
+
{
|
|
10150
|
+
matches: (parts) => (parts[4] & 64767) === 0 && parts[5] === 24318,
|
|
10151
|
+
toHextets: (parts) => [parts[6], parts[7]]
|
|
10152
|
+
}
|
|
10153
|
+
];
|
|
10154
|
+
function stripIpv6Brackets(value) {
|
|
10155
|
+
if (value.startsWith("[") && value.endsWith("]")) return value.slice(1, -1);
|
|
10156
|
+
return value;
|
|
10157
|
+
}
|
|
10158
|
+
function isNumericIpv4LiteralPart(value) {
|
|
10159
|
+
return /^[0-9]+$/.test(value) || /^0x[0-9a-f]+$/i.test(value);
|
|
10160
|
+
}
|
|
10161
|
+
function parseIpv6WithEmbeddedIpv4(raw) {
|
|
10162
|
+
if (!raw.includes(":") || !raw.includes(".")) return;
|
|
10163
|
+
const match = /^(.*:)([^:%]+(?:\.[^:%]+){3})(%[0-9A-Za-z]+)?$/i.exec(raw);
|
|
10164
|
+
if (!match) return;
|
|
10165
|
+
const [, prefix, embeddedIpv4, zoneSuffix = ""] = match;
|
|
10166
|
+
if (!ipaddr.IPv4.isValidFourPartDecimal(embeddedIpv4)) return;
|
|
10167
|
+
const octets = embeddedIpv4.split(".").map((part) => Number.parseInt(part, 10));
|
|
10168
|
+
const normalizedIpv6 = `${prefix}${(octets[0] << 8 | octets[1]).toString(16)}:${(octets[2] << 8 | octets[3]).toString(16)}${zoneSuffix}`;
|
|
10169
|
+
if (!ipaddr.IPv6.isValid(normalizedIpv6)) return;
|
|
10170
|
+
return ipaddr.IPv6.parse(normalizedIpv6);
|
|
10171
|
+
}
|
|
10172
|
+
function isIpv4Address(address) {
|
|
10173
|
+
return address.kind() === "ipv4";
|
|
10174
|
+
}
|
|
10175
|
+
function isIpv6Address(address) {
|
|
10176
|
+
return address.kind() === "ipv6";
|
|
10177
|
+
}
|
|
10178
|
+
function normalizeIpv4MappedAddress(address) {
|
|
10179
|
+
if (!isIpv6Address(address)) return address;
|
|
10180
|
+
if (!address.isIPv4MappedAddress()) return address;
|
|
10181
|
+
return address.toIPv4Address();
|
|
10182
|
+
}
|
|
10183
|
+
function parseCanonicalIpAddress(raw) {
|
|
10184
|
+
const trimmed = raw?.trim();
|
|
10185
|
+
if (!trimmed) return;
|
|
10186
|
+
const normalized = stripIpv6Brackets(trimmed);
|
|
10187
|
+
if (!normalized) return;
|
|
10188
|
+
if (ipaddr.IPv4.isValid(normalized)) {
|
|
10189
|
+
if (!ipaddr.IPv4.isValidFourPartDecimal(normalized)) return;
|
|
10190
|
+
return ipaddr.IPv4.parse(normalized);
|
|
10191
|
+
}
|
|
10192
|
+
if (ipaddr.IPv6.isValid(normalized)) return ipaddr.IPv6.parse(normalized);
|
|
10193
|
+
return parseIpv6WithEmbeddedIpv4(normalized);
|
|
10194
|
+
}
|
|
10195
|
+
function parseLooseIpAddress(raw) {
|
|
10196
|
+
const trimmed = raw?.trim();
|
|
10197
|
+
if (!trimmed) return;
|
|
10198
|
+
const normalized = stripIpv6Brackets(trimmed);
|
|
10199
|
+
if (!normalized) return;
|
|
10200
|
+
if (ipaddr.isValid(normalized)) return ipaddr.parse(normalized);
|
|
10201
|
+
return parseIpv6WithEmbeddedIpv4(normalized);
|
|
10202
|
+
}
|
|
10203
|
+
function isCanonicalDottedDecimalIPv4(raw) {
|
|
10204
|
+
const trimmed = raw?.trim();
|
|
10205
|
+
if (!trimmed) return false;
|
|
10206
|
+
const normalized = stripIpv6Brackets(trimmed);
|
|
10207
|
+
if (!normalized) return false;
|
|
10208
|
+
return ipaddr.IPv4.isValidFourPartDecimal(normalized);
|
|
10209
|
+
}
|
|
10210
|
+
function isLegacyIpv4Literal(raw) {
|
|
10211
|
+
const trimmed = raw?.trim();
|
|
10212
|
+
if (!trimmed) return false;
|
|
10213
|
+
const normalized = stripIpv6Brackets(trimmed);
|
|
10214
|
+
if (!normalized || normalized.includes(":")) return false;
|
|
10215
|
+
if (isCanonicalDottedDecimalIPv4(normalized)) return false;
|
|
10216
|
+
const parts = normalized.split(".");
|
|
10217
|
+
if (parts.length === 0 || parts.length > 4) return false;
|
|
10218
|
+
if (parts.some((part) => part.length === 0)) return false;
|
|
10219
|
+
if (!parts.every((part) => isNumericIpv4LiteralPart(part))) return false;
|
|
10220
|
+
return true;
|
|
10221
|
+
}
|
|
10222
|
+
function isPrivateOrLoopbackIpAddress(raw) {
|
|
10223
|
+
const parsed = parseCanonicalIpAddress(raw);
|
|
10224
|
+
if (!parsed) return false;
|
|
10225
|
+
const normalized = normalizeIpv4MappedAddress(parsed);
|
|
10226
|
+
if (isIpv4Address(normalized)) return PRIVATE_OR_LOOPBACK_IPV4_RANGES.has(normalized.range());
|
|
10227
|
+
if (PRIVATE_OR_LOOPBACK_IPV6_RANGES.has(normalized.range())) return true;
|
|
10228
|
+
return (normalized.parts[0] & 65472) === 65216;
|
|
10229
|
+
}
|
|
10230
|
+
function isBlockedSpecialUseIpv4Address(address, options = {}) {
|
|
10231
|
+
const inRfc2544BenchmarkRange = address.match(RFC2544_BENCHMARK_PREFIX);
|
|
10232
|
+
if (inRfc2544BenchmarkRange && options.allowRfc2544BenchmarkRange === true) return false;
|
|
10233
|
+
return BLOCKED_IPV4_SPECIAL_USE_RANGES.has(address.range()) || inRfc2544BenchmarkRange;
|
|
10234
|
+
}
|
|
10235
|
+
function decodeIpv4FromHextets(high, low) {
|
|
10236
|
+
const octets = [
|
|
10237
|
+
high >>> 8 & 255,
|
|
10238
|
+
high & 255,
|
|
10239
|
+
low >>> 8 & 255,
|
|
10240
|
+
low & 255
|
|
10241
|
+
];
|
|
10242
|
+
return ipaddr.IPv4.parse(octets.join("."));
|
|
10243
|
+
}
|
|
10244
|
+
function extractEmbeddedIpv4FromIpv6(address) {
|
|
10245
|
+
if (address.isIPv4MappedAddress()) return address.toIPv4Address();
|
|
10246
|
+
if (address.range() === "rfc6145") return decodeIpv4FromHextets(address.parts[6], address.parts[7]);
|
|
10247
|
+
if (address.range() === "rfc6052") return decodeIpv4FromHextets(address.parts[6], address.parts[7]);
|
|
10248
|
+
for (const rule of EMBEDDED_IPV4_SENTINEL_RULES) {
|
|
10249
|
+
if (!rule.matches(address.parts)) continue;
|
|
10250
|
+
const [high, low] = rule.toHextets(address.parts);
|
|
10251
|
+
return decodeIpv4FromHextets(high, low);
|
|
10252
|
+
}
|
|
10253
|
+
}
|
|
10254
|
+
|
|
10255
|
+
//#endregion
|
|
10256
|
+
//#region src/infra/net/hostname.ts
|
|
10257
|
+
function normalizeHostname(hostname) {
|
|
10258
|
+
const normalized = hostname.trim().toLowerCase().replace(/\.$/, "");
|
|
10259
|
+
if (normalized.startsWith("[") && normalized.endsWith("]")) return normalized.slice(1, -1);
|
|
10260
|
+
return normalized;
|
|
10261
|
+
}
|
|
10262
|
+
|
|
10263
|
+
//#endregion
|
|
10264
|
+
//#region src/infra/net/ssrf.ts
|
|
10265
|
+
var SsrFBlockedError = class extends Error {
|
|
10266
|
+
constructor(message) {
|
|
10267
|
+
super(message);
|
|
10268
|
+
this.name = "SsrFBlockedError";
|
|
10269
|
+
}
|
|
10270
|
+
};
|
|
10271
|
+
const BLOCKED_HOSTNAMES = new Set([
|
|
10272
|
+
"localhost",
|
|
10273
|
+
"localhost.localdomain",
|
|
10274
|
+
"metadata.google.internal"
|
|
10275
|
+
]);
|
|
10276
|
+
function normalizeHostnameSet(values) {
|
|
10277
|
+
if (!values || values.length === 0) return /* @__PURE__ */ new Set();
|
|
10278
|
+
return new Set(values.map((value) => normalizeHostname(value)).filter(Boolean));
|
|
10279
|
+
}
|
|
10280
|
+
function normalizeHostnameAllowlist(values) {
|
|
10281
|
+
if (!values || values.length === 0) return [];
|
|
10282
|
+
return Array.from(new Set(values.map((value) => normalizeHostname(value)).filter((value) => value !== "*" && value !== "*." && value.length > 0)));
|
|
10283
|
+
}
|
|
10284
|
+
function resolveAllowPrivateNetwork(policy) {
|
|
10285
|
+
return policy?.dangerouslyAllowPrivateNetwork === true || policy?.allowPrivateNetwork === true;
|
|
10286
|
+
}
|
|
10287
|
+
function resolveIpv4SpecialUseBlockOptions(policy) {
|
|
10288
|
+
return { allowRfc2544BenchmarkRange: policy?.allowRfc2544BenchmarkRange === true };
|
|
10289
|
+
}
|
|
10290
|
+
function isHostnameAllowedByPattern(hostname, pattern) {
|
|
10291
|
+
if (pattern.startsWith("*.")) {
|
|
10292
|
+
const suffix = pattern.slice(2);
|
|
10293
|
+
if (!suffix || hostname === suffix) return false;
|
|
10294
|
+
return hostname.endsWith(`.${suffix}`);
|
|
10295
|
+
}
|
|
10296
|
+
return hostname === pattern;
|
|
10297
|
+
}
|
|
10298
|
+
function matchesHostnameAllowlist(hostname, allowlist) {
|
|
10299
|
+
if (allowlist.length === 0) return true;
|
|
10300
|
+
return allowlist.some((pattern) => isHostnameAllowedByPattern(hostname, pattern));
|
|
10301
|
+
}
|
|
10302
|
+
function looksLikeUnsupportedIpv4Literal(address) {
|
|
10303
|
+
const parts = address.split(".");
|
|
10304
|
+
if (parts.length === 0 || parts.length > 4) return false;
|
|
10305
|
+
if (parts.some((part) => part.length === 0)) return true;
|
|
10306
|
+
return parts.every((part) => /^[0-9]+$/.test(part) || /^0x/i.test(part));
|
|
10307
|
+
}
|
|
10308
|
+
function isPrivateIpAddress(address, policy) {
|
|
10309
|
+
let normalized = address.trim().toLowerCase();
|
|
10310
|
+
if (normalized.startsWith("[") && normalized.endsWith("]")) normalized = normalized.slice(1, -1);
|
|
10311
|
+
if (!normalized) return false;
|
|
10312
|
+
const blockOptions = resolveIpv4SpecialUseBlockOptions(policy);
|
|
10313
|
+
const strictIp = parseCanonicalIpAddress(normalized);
|
|
10314
|
+
if (strictIp) {
|
|
10315
|
+
if (isIpv4Address(strictIp)) return isBlockedSpecialUseIpv4Address(strictIp, blockOptions);
|
|
10316
|
+
if (isPrivateOrLoopbackIpAddress(strictIp.toString())) return true;
|
|
10317
|
+
const embeddedIpv4 = extractEmbeddedIpv4FromIpv6(strictIp);
|
|
10318
|
+
if (embeddedIpv4) return isBlockedSpecialUseIpv4Address(embeddedIpv4, blockOptions);
|
|
10319
|
+
return false;
|
|
10320
|
+
}
|
|
10321
|
+
if (normalized.includes(":") && !parseLooseIpAddress(normalized)) return true;
|
|
10322
|
+
if (!isCanonicalDottedDecimalIPv4(normalized) && isLegacyIpv4Literal(normalized)) return true;
|
|
10323
|
+
if (looksLikeUnsupportedIpv4Literal(normalized)) return true;
|
|
10324
|
+
return false;
|
|
10325
|
+
}
|
|
10326
|
+
function isBlockedHostnameNormalized(normalized) {
|
|
10327
|
+
if (BLOCKED_HOSTNAMES.has(normalized)) return true;
|
|
10328
|
+
return normalized.endsWith(".localhost") || normalized.endsWith(".local") || normalized.endsWith(".internal");
|
|
10329
|
+
}
|
|
10330
|
+
function isBlockedHostnameOrIp(hostname, policy) {
|
|
10331
|
+
const normalized = normalizeHostname(hostname);
|
|
10332
|
+
if (!normalized) return false;
|
|
10333
|
+
return isBlockedHostnameNormalized(normalized) || isPrivateIpAddress(normalized, policy);
|
|
10334
|
+
}
|
|
10335
|
+
const BLOCKED_HOST_OR_IP_MESSAGE = "Blocked hostname or private/internal/special-use IP address";
|
|
10336
|
+
const BLOCKED_RESOLVED_IP_MESSAGE = "Blocked: resolves to private/internal/special-use IP address";
|
|
10337
|
+
function assertAllowedHostOrIpOrThrow(hostnameOrIp, policy) {
|
|
10338
|
+
if (isBlockedHostnameOrIp(hostnameOrIp, policy)) throw new SsrFBlockedError(BLOCKED_HOST_OR_IP_MESSAGE);
|
|
10339
|
+
}
|
|
10340
|
+
function assertAllowedResolvedAddressesOrThrow(results, policy) {
|
|
10341
|
+
for (const entry of results) if (isBlockedHostnameOrIp(entry.address, policy)) throw new SsrFBlockedError(BLOCKED_RESOLVED_IP_MESSAGE);
|
|
10342
|
+
}
|
|
10343
|
+
function createPinnedLookup(params) {
|
|
10344
|
+
const normalizedHost = normalizeHostname(params.hostname);
|
|
10345
|
+
const fallback = params.fallback ?? lookup;
|
|
10346
|
+
const fallbackLookup = fallback;
|
|
10347
|
+
const fallbackWithOptions = fallback;
|
|
10348
|
+
const records = params.addresses.map((address) => ({
|
|
10349
|
+
address,
|
|
10350
|
+
family: address.includes(":") ? 6 : 4
|
|
10351
|
+
}));
|
|
10352
|
+
let index = 0;
|
|
10353
|
+
return ((host, options, callback) => {
|
|
10354
|
+
const cb = typeof options === "function" ? options : callback;
|
|
10355
|
+
if (!cb) return;
|
|
10356
|
+
const normalized = normalizeHostname(host);
|
|
10357
|
+
if (!normalized || normalized !== normalizedHost) {
|
|
10358
|
+
if (typeof options === "function" || options === void 0) return fallbackLookup(host, cb);
|
|
10359
|
+
return fallbackWithOptions(host, options, cb);
|
|
10360
|
+
}
|
|
10361
|
+
const opts = typeof options === "object" && options !== null ? options : {};
|
|
10362
|
+
const requestedFamily = typeof options === "number" ? options : typeof opts.family === "number" ? opts.family : 0;
|
|
10363
|
+
const candidates = requestedFamily === 4 || requestedFamily === 6 ? records.filter((entry) => entry.family === requestedFamily) : records;
|
|
10364
|
+
const usable = candidates.length > 0 ? candidates : records;
|
|
10365
|
+
if (opts.all) {
|
|
10366
|
+
cb(null, usable);
|
|
10367
|
+
return;
|
|
10368
|
+
}
|
|
10369
|
+
const chosen = usable[index % usable.length];
|
|
10370
|
+
index += 1;
|
|
10371
|
+
cb(null, chosen.address, chosen.family);
|
|
10372
|
+
});
|
|
10373
|
+
}
|
|
10374
|
+
function dedupeAndPreferIpv4(results) {
|
|
10375
|
+
const seen = /* @__PURE__ */ new Set();
|
|
10376
|
+
const ipv4 = [];
|
|
10377
|
+
const otherFamilies = [];
|
|
10378
|
+
for (const entry of results) {
|
|
10379
|
+
if (seen.has(entry.address)) continue;
|
|
10380
|
+
seen.add(entry.address);
|
|
10381
|
+
if (entry.family === 4) {
|
|
10382
|
+
ipv4.push(entry.address);
|
|
10383
|
+
continue;
|
|
10384
|
+
}
|
|
10385
|
+
otherFamilies.push(entry.address);
|
|
10386
|
+
}
|
|
10387
|
+
return [...ipv4, ...otherFamilies];
|
|
10388
|
+
}
|
|
10389
|
+
async function resolvePinnedHostnameWithPolicy(hostname, params = {}) {
|
|
10390
|
+
const normalized = normalizeHostname(hostname);
|
|
10391
|
+
if (!normalized) throw new Error("Invalid hostname");
|
|
10392
|
+
const allowPrivateNetwork = resolveAllowPrivateNetwork(params.policy);
|
|
10393
|
+
const allowedHostnames = normalizeHostnameSet(params.policy?.allowedHostnames);
|
|
10394
|
+
const hostnameAllowlist = normalizeHostnameAllowlist(params.policy?.hostnameAllowlist);
|
|
10395
|
+
const isExplicitAllowed = allowedHostnames.has(normalized);
|
|
10396
|
+
const skipPrivateNetworkChecks = allowPrivateNetwork || isExplicitAllowed;
|
|
10397
|
+
if (!matchesHostnameAllowlist(normalized, hostnameAllowlist)) throw new SsrFBlockedError(`Blocked hostname (not in allowlist): ${hostname}`);
|
|
10398
|
+
if (!skipPrivateNetworkChecks) assertAllowedHostOrIpOrThrow(normalized, params.policy);
|
|
10399
|
+
const results = await (params.lookupFn ?? lookup$1)(normalized, { all: true });
|
|
10400
|
+
if (results.length === 0) throw new Error(`Unable to resolve hostname: ${hostname}`);
|
|
10401
|
+
if (!skipPrivateNetworkChecks) assertAllowedResolvedAddressesOrThrow(results, params.policy);
|
|
10402
|
+
const addresses = dedupeAndPreferIpv4(results);
|
|
10403
|
+
if (addresses.length === 0) throw new Error(`Unable to resolve hostname: ${hostname}`);
|
|
10404
|
+
return {
|
|
10405
|
+
hostname: normalized,
|
|
10406
|
+
addresses,
|
|
10407
|
+
lookup: createPinnedLookup({
|
|
10408
|
+
hostname: normalized,
|
|
10409
|
+
addresses
|
|
10410
|
+
})
|
|
10411
|
+
};
|
|
10412
|
+
}
|
|
10413
|
+
function createPinnedDispatcher(pinned) {
|
|
10414
|
+
return new Agent({ connect: {
|
|
10415
|
+
lookup: pinned.lookup,
|
|
10416
|
+
autoSelectFamily: true,
|
|
10417
|
+
autoSelectFamilyAttemptTimeout: 300
|
|
10418
|
+
} });
|
|
10419
|
+
}
|
|
10420
|
+
async function closeDispatcher(dispatcher) {
|
|
10421
|
+
if (!dispatcher) return;
|
|
10422
|
+
const candidate = dispatcher;
|
|
10423
|
+
try {
|
|
10424
|
+
if (typeof candidate.close === "function") {
|
|
10425
|
+
await candidate.close();
|
|
10426
|
+
return;
|
|
10427
|
+
}
|
|
10428
|
+
if (typeof candidate.destroy === "function") candidate.destroy();
|
|
10429
|
+
} catch {}
|
|
10430
|
+
}
|
|
10431
|
+
|
|
10432
|
+
//#endregion
|
|
10433
|
+
//#region src/infra/net/fetch-guard.ts
|
|
10434
|
+
const DEFAULT_MAX_REDIRECTS = 3;
|
|
10435
|
+
const CROSS_ORIGIN_REDIRECT_SENSITIVE_HEADERS = [
|
|
10436
|
+
"authorization",
|
|
10437
|
+
"proxy-authorization",
|
|
10438
|
+
"cookie",
|
|
10439
|
+
"cookie2"
|
|
10440
|
+
];
|
|
10441
|
+
function isRedirectStatus(status) {
|
|
10442
|
+
return status === 301 || status === 302 || status === 303 || status === 307 || status === 308;
|
|
10443
|
+
}
|
|
10444
|
+
function stripSensitiveHeadersForCrossOriginRedirect(init) {
|
|
10445
|
+
if (!init?.headers) return init;
|
|
10446
|
+
const headers = new Headers(init.headers);
|
|
10447
|
+
for (const header of CROSS_ORIGIN_REDIRECT_SENSITIVE_HEADERS) headers.delete(header);
|
|
10448
|
+
return {
|
|
10449
|
+
...init,
|
|
10450
|
+
headers
|
|
10451
|
+
};
|
|
10452
|
+
}
|
|
10453
|
+
function buildAbortSignal(params) {
|
|
10454
|
+
const { timeoutMs, signal } = params;
|
|
10455
|
+
if (!timeoutMs && !signal) return {
|
|
10456
|
+
signal: void 0,
|
|
10457
|
+
cleanup: () => {}
|
|
10458
|
+
};
|
|
10459
|
+
if (!timeoutMs) return {
|
|
10460
|
+
signal,
|
|
10461
|
+
cleanup: () => {}
|
|
10462
|
+
};
|
|
10463
|
+
const controller = new AbortController();
|
|
10464
|
+
const timeoutId = setTimeout(controller.abort.bind(controller), timeoutMs);
|
|
10465
|
+
const onAbort = bindAbortRelay(controller);
|
|
10466
|
+
if (signal) if (signal.aborted) controller.abort();
|
|
10467
|
+
else signal.addEventListener("abort", onAbort, { once: true });
|
|
10468
|
+
const cleanup = () => {
|
|
10469
|
+
clearTimeout(timeoutId);
|
|
10470
|
+
if (signal) signal.removeEventListener("abort", onAbort);
|
|
10471
|
+
};
|
|
10472
|
+
return {
|
|
10473
|
+
signal: controller.signal,
|
|
10474
|
+
cleanup
|
|
10475
|
+
};
|
|
10476
|
+
}
|
|
10477
|
+
async function fetchWithSsrFGuard(params) {
|
|
10478
|
+
const fetcher = params.fetchImpl ?? globalThis.fetch;
|
|
10479
|
+
if (!fetcher) throw new Error("fetch is not available");
|
|
10480
|
+
const maxRedirects = typeof params.maxRedirects === "number" && Number.isFinite(params.maxRedirects) ? Math.max(0, Math.floor(params.maxRedirects)) : DEFAULT_MAX_REDIRECTS;
|
|
10481
|
+
const { signal, cleanup } = buildAbortSignal({
|
|
10482
|
+
timeoutMs: params.timeoutMs,
|
|
10483
|
+
signal: params.signal
|
|
10484
|
+
});
|
|
10485
|
+
let released = false;
|
|
10486
|
+
const release = async (dispatcher) => {
|
|
10487
|
+
if (released) return;
|
|
10488
|
+
released = true;
|
|
10489
|
+
cleanup();
|
|
10490
|
+
await closeDispatcher(dispatcher ?? void 0);
|
|
10491
|
+
};
|
|
10492
|
+
const visited = /* @__PURE__ */ new Set();
|
|
10493
|
+
let currentUrl = params.url;
|
|
10494
|
+
let currentInit = params.init ? { ...params.init } : void 0;
|
|
10495
|
+
let redirectCount = 0;
|
|
10496
|
+
while (true) {
|
|
10497
|
+
let parsedUrl;
|
|
10498
|
+
try {
|
|
10499
|
+
parsedUrl = new URL(currentUrl);
|
|
10500
|
+
} catch {
|
|
10501
|
+
await release();
|
|
10502
|
+
throw new Error("Invalid URL: must be http or https");
|
|
10503
|
+
}
|
|
10504
|
+
if (!["http:", "https:"].includes(parsedUrl.protocol)) {
|
|
10505
|
+
await release();
|
|
10506
|
+
throw new Error("Invalid URL: must be http or https");
|
|
10507
|
+
}
|
|
10508
|
+
let dispatcher = null;
|
|
10509
|
+
try {
|
|
10510
|
+
const pinned = await resolvePinnedHostnameWithPolicy(parsedUrl.hostname, {
|
|
10511
|
+
lookupFn: params.lookupFn,
|
|
10512
|
+
policy: params.policy
|
|
10513
|
+
});
|
|
10514
|
+
if (params.pinDns !== false) dispatcher = createPinnedDispatcher(pinned);
|
|
10515
|
+
const init = {
|
|
10516
|
+
...currentInit ? { ...currentInit } : {},
|
|
10517
|
+
redirect: "manual",
|
|
10518
|
+
...dispatcher ? { dispatcher } : {},
|
|
10519
|
+
...signal ? { signal } : {}
|
|
10520
|
+
};
|
|
10521
|
+
const response = await fetcher(parsedUrl.toString(), init);
|
|
10522
|
+
if (isRedirectStatus(response.status)) {
|
|
10523
|
+
const location = response.headers.get("location");
|
|
10524
|
+
if (!location) {
|
|
10525
|
+
await release(dispatcher);
|
|
10526
|
+
throw new Error(`Redirect missing location header (${response.status})`);
|
|
10527
|
+
}
|
|
10528
|
+
redirectCount += 1;
|
|
10529
|
+
if (redirectCount > maxRedirects) {
|
|
10530
|
+
await release(dispatcher);
|
|
10531
|
+
throw new Error(`Too many redirects (limit: ${maxRedirects})`);
|
|
10532
|
+
}
|
|
10533
|
+
const nextParsedUrl = new URL(location, parsedUrl);
|
|
10534
|
+
const nextUrl = nextParsedUrl.toString();
|
|
10535
|
+
if (visited.has(nextUrl)) {
|
|
10536
|
+
await release(dispatcher);
|
|
10537
|
+
throw new Error("Redirect loop detected");
|
|
10538
|
+
}
|
|
10539
|
+
if (nextParsedUrl.origin !== parsedUrl.origin) currentInit = stripSensitiveHeadersForCrossOriginRedirect(currentInit);
|
|
10540
|
+
visited.add(nextUrl);
|
|
10541
|
+
response.body?.cancel();
|
|
10542
|
+
await closeDispatcher(dispatcher);
|
|
10543
|
+
currentUrl = nextUrl;
|
|
10544
|
+
continue;
|
|
10545
|
+
}
|
|
10546
|
+
return {
|
|
10547
|
+
response,
|
|
10548
|
+
finalUrl: currentUrl,
|
|
10549
|
+
release: async () => release(dispatcher)
|
|
10550
|
+
};
|
|
10551
|
+
} catch (err) {
|
|
10552
|
+
if (err instanceof SsrFBlockedError) logWarn(`security: blocked URL fetch (${params.auditContext ?? "url-fetch"}) target=${parsedUrl.origin}${parsedUrl.pathname} reason=${err.message}`);
|
|
10553
|
+
await release(dispatcher);
|
|
10554
|
+
throw err;
|
|
10555
|
+
}
|
|
10556
|
+
}
|
|
10557
|
+
}
|
|
10558
|
+
|
|
10559
|
+
//#endregion
|
|
10560
|
+
//#region src/media/constants.ts
|
|
10561
|
+
const MAX_IMAGE_BYTES = 6 * 1024 * 1024;
|
|
10562
|
+
const MAX_AUDIO_BYTES = 16 * 1024 * 1024;
|
|
10563
|
+
const MAX_VIDEO_BYTES = 16 * 1024 * 1024;
|
|
10564
|
+
const MAX_DOCUMENT_BYTES = 100 * 1024 * 1024;
|
|
10565
|
+
|
|
10566
|
+
//#endregion
|
|
10567
|
+
//#region src/media/mime.ts
|
|
10568
|
+
const EXT_BY_MIME = {
|
|
10569
|
+
"image/heic": ".heic",
|
|
10570
|
+
"image/heif": ".heif",
|
|
10571
|
+
"image/jpeg": ".jpg",
|
|
10572
|
+
"image/png": ".png",
|
|
10573
|
+
"image/webp": ".webp",
|
|
10574
|
+
"image/gif": ".gif",
|
|
10575
|
+
"audio/ogg": ".ogg",
|
|
10576
|
+
"audio/mpeg": ".mp3",
|
|
10577
|
+
"audio/x-m4a": ".m4a",
|
|
10578
|
+
"audio/mp4": ".m4a",
|
|
10579
|
+
"video/mp4": ".mp4",
|
|
10580
|
+
"video/quicktime": ".mov",
|
|
10581
|
+
"application/pdf": ".pdf",
|
|
10582
|
+
"application/json": ".json",
|
|
10583
|
+
"application/zip": ".zip",
|
|
10584
|
+
"application/gzip": ".gz",
|
|
10585
|
+
"application/x-tar": ".tar",
|
|
10586
|
+
"application/x-7z-compressed": ".7z",
|
|
10587
|
+
"application/vnd.rar": ".rar",
|
|
10588
|
+
"application/msword": ".doc",
|
|
10589
|
+
"application/vnd.ms-excel": ".xls",
|
|
10590
|
+
"application/vnd.ms-powerpoint": ".ppt",
|
|
10591
|
+
"application/vnd.openxmlformats-officedocument.wordprocessingml.document": ".docx",
|
|
10592
|
+
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": ".xlsx",
|
|
10593
|
+
"application/vnd.openxmlformats-officedocument.presentationml.presentation": ".pptx",
|
|
10594
|
+
"text/csv": ".csv",
|
|
10595
|
+
"text/plain": ".txt",
|
|
10596
|
+
"text/markdown": ".md"
|
|
10597
|
+
};
|
|
10598
|
+
const MIME_BY_EXT = {
|
|
10599
|
+
...Object.fromEntries(Object.entries(EXT_BY_MIME).map(([mime, ext]) => [ext, mime])),
|
|
10600
|
+
".jpeg": "image/jpeg"
|
|
10601
|
+
};
|
|
10602
|
+
function normalizeMimeType(mime) {
|
|
10603
|
+
if (!mime) return;
|
|
10604
|
+
return mime.split(";")[0]?.trim().toLowerCase() || void 0;
|
|
10605
|
+
}
|
|
10606
|
+
async function sniffMime(buffer) {
|
|
10607
|
+
if (!buffer) return;
|
|
10608
|
+
try {
|
|
10609
|
+
return (await fileTypeFromBuffer(buffer))?.mime ?? void 0;
|
|
10610
|
+
} catch {
|
|
10611
|
+
return;
|
|
10612
|
+
}
|
|
10613
|
+
}
|
|
10614
|
+
function getFileExtension(filePath) {
|
|
10615
|
+
if (!filePath) return;
|
|
10616
|
+
try {
|
|
10617
|
+
if (/^https?:\/\//i.test(filePath)) {
|
|
10618
|
+
const url = new URL(filePath);
|
|
10619
|
+
return path.extname(url.pathname).toLowerCase() || void 0;
|
|
10620
|
+
}
|
|
10621
|
+
} catch {}
|
|
10622
|
+
return path.extname(filePath).toLowerCase() || void 0;
|
|
10623
|
+
}
|
|
10624
|
+
function detectMime(opts) {
|
|
10625
|
+
return detectMimeImpl(opts);
|
|
10626
|
+
}
|
|
10627
|
+
function isGenericMime(mime) {
|
|
10628
|
+
if (!mime) return true;
|
|
10629
|
+
const m = mime.toLowerCase();
|
|
10630
|
+
return m === "application/octet-stream" || m === "application/zip";
|
|
10631
|
+
}
|
|
10632
|
+
async function detectMimeImpl(opts) {
|
|
10633
|
+
const ext = getFileExtension(opts.filePath);
|
|
10634
|
+
const extMime = ext ? MIME_BY_EXT[ext] : void 0;
|
|
10635
|
+
const headerMime = normalizeMimeType(opts.headerMime);
|
|
10636
|
+
const sniffed = await sniffMime(opts.buffer);
|
|
10637
|
+
if (sniffed && (!isGenericMime(sniffed) || !extMime)) return sniffed;
|
|
10638
|
+
if (extMime) return extMime;
|
|
10639
|
+
if (headerMime && !isGenericMime(headerMime)) return headerMime;
|
|
10640
|
+
if (sniffed) return sniffed;
|
|
10641
|
+
if (headerMime) return headerMime;
|
|
10642
|
+
}
|
|
10643
|
+
function extensionForMime(mime) {
|
|
10644
|
+
const normalized = normalizeMimeType(mime);
|
|
10645
|
+
if (!normalized) return;
|
|
10646
|
+
return EXT_BY_MIME[normalized];
|
|
10647
|
+
}
|
|
10648
|
+
|
|
10649
|
+
//#endregion
|
|
10650
|
+
//#region src/media/read-response-with-limit.ts
|
|
10651
|
+
async function readResponseWithLimit(res, maxBytes, opts) {
|
|
10652
|
+
const onOverflow = opts?.onOverflow ?? ((params) => /* @__PURE__ */ new Error(`Content too large: ${params.size} bytes (limit: ${params.maxBytes} bytes)`));
|
|
10653
|
+
const body = res.body;
|
|
10654
|
+
if (!body || typeof body.getReader !== "function") {
|
|
10655
|
+
const fallback = Buffer.from(await res.arrayBuffer());
|
|
10656
|
+
if (fallback.length > maxBytes) throw onOverflow({
|
|
10657
|
+
size: fallback.length,
|
|
10658
|
+
maxBytes,
|
|
10659
|
+
res
|
|
10660
|
+
});
|
|
10661
|
+
return fallback;
|
|
10662
|
+
}
|
|
10663
|
+
const reader = body.getReader();
|
|
10664
|
+
const chunks = [];
|
|
10665
|
+
let total = 0;
|
|
10666
|
+
try {
|
|
10667
|
+
while (true) {
|
|
10668
|
+
const { done, value } = await reader.read();
|
|
10669
|
+
if (done) break;
|
|
10670
|
+
if (value?.length) {
|
|
10671
|
+
total += value.length;
|
|
10672
|
+
if (total > maxBytes) {
|
|
10673
|
+
try {
|
|
10674
|
+
await reader.cancel();
|
|
10675
|
+
} catch {}
|
|
10676
|
+
throw onOverflow({
|
|
10677
|
+
size: total,
|
|
10678
|
+
maxBytes,
|
|
10679
|
+
res
|
|
10680
|
+
});
|
|
10681
|
+
}
|
|
10682
|
+
chunks.push(value);
|
|
10683
|
+
}
|
|
10684
|
+
}
|
|
10685
|
+
} finally {
|
|
10686
|
+
try {
|
|
10687
|
+
reader.releaseLock();
|
|
10688
|
+
} catch {}
|
|
10689
|
+
}
|
|
10690
|
+
return Buffer.concat(chunks.map((chunk) => Buffer.from(chunk)), total);
|
|
10691
|
+
}
|
|
10692
|
+
|
|
10693
|
+
//#endregion
|
|
10694
|
+
//#region src/media/fetch.ts
|
|
10695
|
+
var MediaFetchError = class extends Error {
|
|
10696
|
+
constructor(code, message) {
|
|
10697
|
+
super(message);
|
|
10698
|
+
this.code = code;
|
|
10699
|
+
this.name = "MediaFetchError";
|
|
10700
|
+
}
|
|
10701
|
+
};
|
|
10702
|
+
function stripQuotes(value) {
|
|
10703
|
+
return value.replace(/^["']|["']$/g, "");
|
|
10704
|
+
}
|
|
10705
|
+
function parseContentDispositionFileName(header) {
|
|
10706
|
+
if (!header) return;
|
|
10707
|
+
const starMatch = /filename\*\s*=\s*([^;]+)/i.exec(header);
|
|
10708
|
+
if (starMatch?.[1]) {
|
|
10709
|
+
const cleaned = stripQuotes(starMatch[1].trim());
|
|
10710
|
+
const encoded = cleaned.split("''").slice(1).join("''") || cleaned;
|
|
10711
|
+
try {
|
|
10712
|
+
return path.basename(decodeURIComponent(encoded));
|
|
10713
|
+
} catch {
|
|
10714
|
+
return path.basename(encoded);
|
|
10715
|
+
}
|
|
10716
|
+
}
|
|
10717
|
+
const match = /filename\s*=\s*([^;]+)/i.exec(header);
|
|
10718
|
+
if (match?.[1]) return path.basename(stripQuotes(match[1].trim()));
|
|
10719
|
+
}
|
|
10720
|
+
async function readErrorBodySnippet(res, maxChars = 200) {
|
|
10721
|
+
try {
|
|
10722
|
+
const text = await res.text();
|
|
10723
|
+
if (!text) return;
|
|
10724
|
+
const collapsed = text.replace(/\s+/g, " ").trim();
|
|
10725
|
+
if (!collapsed) return;
|
|
10726
|
+
if (collapsed.length <= maxChars) return collapsed;
|
|
10727
|
+
return `${collapsed.slice(0, maxChars)}…`;
|
|
10728
|
+
} catch {
|
|
10729
|
+
return;
|
|
10730
|
+
}
|
|
10731
|
+
}
|
|
10732
|
+
async function fetchRemoteMedia(options) {
|
|
10733
|
+
const { url, fetchImpl, filePathHint, maxBytes, maxRedirects, ssrfPolicy, lookupFn } = options;
|
|
10734
|
+
let res;
|
|
10735
|
+
let finalUrl = url;
|
|
10736
|
+
let release = null;
|
|
10737
|
+
try {
|
|
10738
|
+
const result = await fetchWithSsrFGuard({
|
|
10739
|
+
url,
|
|
10740
|
+
fetchImpl,
|
|
10741
|
+
maxRedirects,
|
|
10742
|
+
policy: ssrfPolicy,
|
|
10743
|
+
lookupFn
|
|
10744
|
+
});
|
|
10745
|
+
res = result.response;
|
|
10746
|
+
finalUrl = result.finalUrl;
|
|
10747
|
+
release = result.release;
|
|
10748
|
+
} catch (err) {
|
|
10749
|
+
throw new MediaFetchError("fetch_failed", `Failed to fetch media from ${url}: ${String(err)}`);
|
|
10750
|
+
}
|
|
10751
|
+
try {
|
|
10752
|
+
if (!res.ok) {
|
|
10753
|
+
const statusText = res.statusText ? ` ${res.statusText}` : "";
|
|
10754
|
+
const redirected = finalUrl !== url ? ` (redirected to ${finalUrl})` : "";
|
|
10755
|
+
let detail = `HTTP ${res.status}${statusText}`;
|
|
10756
|
+
if (!res.body) detail = `HTTP ${res.status}${statusText}; empty response body`;
|
|
10757
|
+
else {
|
|
10758
|
+
const snippet = await readErrorBodySnippet(res);
|
|
10759
|
+
if (snippet) detail += `; body: ${snippet}`;
|
|
10760
|
+
}
|
|
10761
|
+
throw new MediaFetchError("http_error", `Failed to fetch media from ${url}${redirected}: ${detail}`);
|
|
10762
|
+
}
|
|
10763
|
+
const contentLength = res.headers.get("content-length");
|
|
10764
|
+
if (maxBytes && contentLength) {
|
|
10765
|
+
const length = Number(contentLength);
|
|
10766
|
+
if (Number.isFinite(length) && length > maxBytes) throw new MediaFetchError("max_bytes", `Failed to fetch media from ${url}: content length ${length} exceeds maxBytes ${maxBytes}`);
|
|
10767
|
+
}
|
|
10768
|
+
const buffer = maxBytes ? await readResponseWithLimit(res, maxBytes, { onOverflow: ({ maxBytes, res }) => new MediaFetchError("max_bytes", `Failed to fetch media from ${res.url || url}: payload exceeds maxBytes ${maxBytes}`) }) : Buffer.from(await res.arrayBuffer());
|
|
10769
|
+
let fileNameFromUrl;
|
|
10770
|
+
try {
|
|
10771
|
+
const parsed = new URL(finalUrl);
|
|
10772
|
+
fileNameFromUrl = path.basename(parsed.pathname) || void 0;
|
|
10773
|
+
} catch {}
|
|
10774
|
+
const headerFileName = parseContentDispositionFileName(res.headers.get("content-disposition"));
|
|
10775
|
+
let fileName = headerFileName || fileNameFromUrl || (filePathHint ? path.basename(filePathHint) : void 0);
|
|
10776
|
+
const filePathForMime = headerFileName && path.extname(headerFileName) ? headerFileName : filePathHint ?? finalUrl;
|
|
10777
|
+
const contentType = await detectMime({
|
|
10778
|
+
buffer,
|
|
10779
|
+
headerMime: res.headers.get("content-type"),
|
|
10780
|
+
filePath: filePathForMime
|
|
10781
|
+
});
|
|
10782
|
+
if (fileName && !path.extname(fileName) && contentType) {
|
|
10783
|
+
const ext = extensionForMime(contentType);
|
|
10784
|
+
if (ext) fileName = `${fileName}${ext}`;
|
|
10785
|
+
}
|
|
10786
|
+
return {
|
|
10787
|
+
buffer,
|
|
10788
|
+
contentType: contentType ?? void 0,
|
|
10789
|
+
fileName
|
|
10790
|
+
};
|
|
10791
|
+
} finally {
|
|
10792
|
+
if (release) await release();
|
|
10793
|
+
}
|
|
10794
|
+
}
|
|
10795
|
+
|
|
10796
|
+
//#endregion
|
|
10797
|
+
//#region src/middleware/media-resolver.ts
|
|
10798
|
+
/** Max download size for inbound channel media (100 MB). */
|
|
10799
|
+
const MAX_INBOUND_MEDIA_BYTES = 100 * 1024 * 1024;
|
|
10800
|
+
/**
|
|
10801
|
+
* Resolve an array of media URLs (HTTP or local paths) into MediaAttachment
|
|
10802
|
+
* objects suitable for passing to {@link AgentRuntime.execute}.
|
|
10803
|
+
*
|
|
10804
|
+
* Remote URLs are downloaded into `tempDir` so that CLI runtimes can access
|
|
10805
|
+
* them as local files. Local paths are validated for MIME type only.
|
|
10806
|
+
*
|
|
10807
|
+
* Individual resolution failures are silently skipped — a single bad URL
|
|
10808
|
+
* should not prevent the rest of the message from being processed.
|
|
10809
|
+
*/
|
|
10810
|
+
async function resolveMediaAttachments(mediaUrls, tempDir) {
|
|
10811
|
+
const results = [];
|
|
10812
|
+
for (const [index, url] of mediaUrls.entries()) try {
|
|
10813
|
+
const attachment = await resolveOne(url, tempDir, index);
|
|
10814
|
+
if (attachment) {
|
|
10815
|
+
logDebug(`[media-resolver] resolved: url=${url} mime=${attachment.mimeType} path=${attachment.filePath}`);
|
|
10816
|
+
results.push(attachment);
|
|
10817
|
+
}
|
|
10818
|
+
} catch (err) {
|
|
10819
|
+
logDebug(`[media-resolver] failed: url=${url} error=${String(err)}`);
|
|
10820
|
+
}
|
|
10821
|
+
return results;
|
|
10822
|
+
}
|
|
10823
|
+
async function resolveOne(url, tempDir, index) {
|
|
10824
|
+
if (/^https?:\/\//i.test(url)) return downloadRemote(url, tempDir, index);
|
|
10825
|
+
return resolveLocal(url);
|
|
10826
|
+
}
|
|
10827
|
+
async function downloadRemote(url, tempDir, index) {
|
|
10828
|
+
const fetched = await fetchRemoteMedia({
|
|
10829
|
+
url,
|
|
10830
|
+
maxBytes: MAX_INBOUND_MEDIA_BYTES
|
|
10831
|
+
});
|
|
10832
|
+
const mimeType = fetched.contentType ?? "application/octet-stream";
|
|
10833
|
+
const fileName = `inbound-media-${index}${extensionForMime(mimeType) ?? ""}`;
|
|
10834
|
+
const filePath = join(tempDir, fileName);
|
|
10835
|
+
await writeFile(filePath, fetched.buffer);
|
|
10836
|
+
return {
|
|
10837
|
+
mimeType,
|
|
10838
|
+
filePath,
|
|
10839
|
+
sourceUrl: url,
|
|
10840
|
+
fileName: fetched.fileName ?? fileName
|
|
10841
|
+
};
|
|
10842
|
+
}
|
|
10843
|
+
async function resolveLocal(filePath) {
|
|
10844
|
+
return {
|
|
10845
|
+
mimeType: await detectMime({ filePath }) ?? "application/octet-stream",
|
|
10846
|
+
filePath
|
|
10847
|
+
};
|
|
10848
|
+
}
|
|
10849
|
+
|
|
10061
10850
|
//#endregion
|
|
10062
10851
|
//#region src/middleware/cli-runtime-base.ts
|
|
10063
10852
|
/**
|
|
@@ -10088,11 +10877,18 @@ var CLIRuntimeBase = class CLIRuntimeBase {
|
|
|
10088
10877
|
}
|
|
10089
10878
|
async *execute(params) {
|
|
10090
10879
|
const args = this.buildArgs(params);
|
|
10880
|
+
if (params.extraArgs && params.extraArgs.length > 0) args.push(...params.extraArgs);
|
|
10881
|
+
const runtimeEnv = this.buildEnv(params);
|
|
10882
|
+
const callerEnv = params.env ?? {};
|
|
10091
10883
|
const env = {
|
|
10092
10884
|
...process.env,
|
|
10093
|
-
...
|
|
10094
|
-
...
|
|
10885
|
+
...runtimeEnv,
|
|
10886
|
+
...callerEnv
|
|
10095
10887
|
};
|
|
10888
|
+
logDebug(`[agent-runtime] spawn: ${this.command} ${args.map((a) => JSON.stringify(a)).join(" ")}`);
|
|
10889
|
+
logDebug(`[agent-runtime] cwd: ${params.workingDirectory ?? process.cwd()}`);
|
|
10890
|
+
if (Object.keys(runtimeEnv).length > 0) logDebug(`[agent-runtime] runtime env keys: ${Object.keys(runtimeEnv).join(", ")}`);
|
|
10891
|
+
if (Object.keys(callerEnv).length > 0) logDebug(`[agent-runtime] caller env keys: ${Object.keys(callerEnv).join(", ")}`);
|
|
10096
10892
|
const child = spawn(this.command, args, {
|
|
10097
10893
|
cwd: params.workingDirectory,
|
|
10098
10894
|
env,
|
|
@@ -10102,9 +10898,11 @@ var CLIRuntimeBase = class CLIRuntimeBase {
|
|
|
10102
10898
|
"pipe"
|
|
10103
10899
|
]
|
|
10104
10900
|
});
|
|
10901
|
+
logDebug(`[agent-runtime] spawned pid=${child.pid}`);
|
|
10105
10902
|
const startMs = Date.now();
|
|
10106
10903
|
const stderrChunks = [];
|
|
10107
10904
|
let aborted = false;
|
|
10905
|
+
let yieldedEvents = false;
|
|
10108
10906
|
let escalationTimer;
|
|
10109
10907
|
const killWithEscalation = () => {
|
|
10110
10908
|
if (escalationTimer === void 0) escalationTimer = setTimeout(() => {
|
|
@@ -10126,6 +10924,7 @@ var CLIRuntimeBase = class CLIRuntimeBase {
|
|
|
10126
10924
|
if (watchdogTimer !== void 0) clearTimeout(watchdogTimer);
|
|
10127
10925
|
watchdogTimer = setTimeout(() => {
|
|
10128
10926
|
watchdogFired = true;
|
|
10927
|
+
logDebug(`[agent-runtime] pid=${child.pid}: watchdog timeout after ${this.timeoutMs}ms`);
|
|
10129
10928
|
killWithEscalation();
|
|
10130
10929
|
}, this.timeoutMs);
|
|
10131
10930
|
};
|
|
@@ -10165,10 +10964,14 @@ var CLIRuntimeBase = class CLIRuntimeBase {
|
|
|
10165
10964
|
});
|
|
10166
10965
|
});
|
|
10167
10966
|
});
|
|
10168
|
-
if (this.supportsStdinPrompt && params.prompt.length > CLIRuntimeBase.STDIN_PROMPT_THRESHOLD && child.stdin)
|
|
10967
|
+
if (this.supportsStdinPrompt && params.prompt.length > CLIRuntimeBase.STDIN_PROMPT_THRESHOLD && child.stdin) {
|
|
10968
|
+
logDebug(`[agent-runtime] pid=${child.pid}: delivering prompt via stdin (${params.prompt.length} chars)`);
|
|
10969
|
+
child.stdin.write(params.prompt);
|
|
10970
|
+
}
|
|
10169
10971
|
child.stdin?.end();
|
|
10170
10972
|
const onAbort = () => {
|
|
10171
10973
|
aborted = true;
|
|
10974
|
+
logDebug(`[agent-runtime] pid=${child.pid}: abort signal received`);
|
|
10172
10975
|
killWithEscalation();
|
|
10173
10976
|
};
|
|
10174
10977
|
if (params.abortSignal) if (params.abortSignal.aborted) {
|
|
@@ -10183,6 +10986,7 @@ var CLIRuntimeBase = class CLIRuntimeBase {
|
|
|
10183
10986
|
while (eventQueue.length > 0) {
|
|
10184
10987
|
const event = eventQueue.shift();
|
|
10185
10988
|
if (event === null || event === void 0) break;
|
|
10989
|
+
yieldedEvents = true;
|
|
10186
10990
|
yield event;
|
|
10187
10991
|
}
|
|
10188
10992
|
}
|
|
@@ -10190,9 +10994,16 @@ var CLIRuntimeBase = class CLIRuntimeBase {
|
|
|
10190
10994
|
if (watchdogTimer !== void 0) clearTimeout(watchdogTimer);
|
|
10191
10995
|
params.abortSignal?.removeEventListener("abort", onAbort);
|
|
10192
10996
|
}
|
|
10193
|
-
await exitPromise;
|
|
10997
|
+
const { code: exitCode, signal: exitSignal } = await exitPromise;
|
|
10194
10998
|
if (escalationTimer !== void 0) clearTimeout(escalationTimer);
|
|
10195
10999
|
const durationMs = Date.now() - startMs;
|
|
11000
|
+
logDebug(`[agent-runtime] pid=${child.pid}: exited code=${exitCode} signal=${exitSignal} duration=${durationMs}ms`);
|
|
11001
|
+
const stderr = stderrChunks.join("");
|
|
11002
|
+
if (stderr && (exitCode !== 0 || !yieldedEvents)) yield {
|
|
11003
|
+
type: "error",
|
|
11004
|
+
message: stderr.trim(),
|
|
11005
|
+
code: "CLI_STDERR"
|
|
11006
|
+
};
|
|
10196
11007
|
if (watchdogFired) yield {
|
|
10197
11008
|
type: "error",
|
|
10198
11009
|
message: `Watchdog timeout: no output for ${this.timeoutMs}ms`,
|
|
@@ -10210,7 +11021,8 @@ var CLIRuntimeBase = class CLIRuntimeBase {
|
|
|
10210
11021
|
sessionId: void 0,
|
|
10211
11022
|
durationMs,
|
|
10212
11023
|
usage: void 0,
|
|
10213
|
-
aborted
|
|
11024
|
+
aborted,
|
|
11025
|
+
stderr: stderr || void 0
|
|
10214
11026
|
}
|
|
10215
11027
|
};
|
|
10216
11028
|
}
|
|
@@ -10261,6 +11073,11 @@ var ClaudeCliRuntime = class extends CLIRuntimeBase {
|
|
|
10261
11073
|
}
|
|
10262
11074
|
if (parsed.type === "result") {
|
|
10263
11075
|
this.storeResultData(parsed);
|
|
11076
|
+
if (parsed.is_error === true && typeof parsed.result === "string" && parsed.result) return {
|
|
11077
|
+
type: "error",
|
|
11078
|
+
message: parsed.result,
|
|
11079
|
+
code: "CLI_ERROR"
|
|
11080
|
+
};
|
|
10264
11081
|
return null;
|
|
10265
11082
|
}
|
|
10266
11083
|
return null;
|
|
@@ -11075,12 +11892,42 @@ const SUPPORTED_PROVIDERS = [
|
|
|
11075
11892
|
"codex",
|
|
11076
11893
|
"opencode"
|
|
11077
11894
|
];
|
|
11895
|
+
const validatedCommands = /* @__PURE__ */ new Set();
|
|
11896
|
+
/**
|
|
11897
|
+
* Verify that a CLI binary exists on PATH.
|
|
11898
|
+
*
|
|
11899
|
+
* Results are cached per process lifetime so the `which` lookup runs at most
|
|
11900
|
+
* once per command.
|
|
11901
|
+
*/
|
|
11902
|
+
function validateExecutable(command) {
|
|
11903
|
+
if (validatedCommands.has(command)) {
|
|
11904
|
+
logDebug(`[runtime-factory] executable already validated: ${command}`);
|
|
11905
|
+
return;
|
|
11906
|
+
}
|
|
11907
|
+
try {
|
|
11908
|
+
execFileSync("which", [command], { stdio: "ignore" });
|
|
11909
|
+
logDebug(`[runtime-factory] executable validated: ${command}`);
|
|
11910
|
+
validatedCommands.add(command);
|
|
11911
|
+
} catch {
|
|
11912
|
+
throw new Error(`Runtime '${command}' is configured but the '${command}' binary was not found on PATH. Install it or set agents.defaults.runtime to a different provider.`);
|
|
11913
|
+
}
|
|
11914
|
+
}
|
|
11078
11915
|
function createCliRuntime(provider) {
|
|
11079
|
-
|
|
11080
|
-
|
|
11081
|
-
|
|
11082
|
-
case "
|
|
11083
|
-
|
|
11916
|
+
const normalized = provider.trim().toLowerCase();
|
|
11917
|
+
logDebug(`[runtime-factory] creating runtime: provider=${normalized}`);
|
|
11918
|
+
switch (normalized) {
|
|
11919
|
+
case "claude":
|
|
11920
|
+
validateExecutable(normalized);
|
|
11921
|
+
return new ClaudeCliRuntime();
|
|
11922
|
+
case "gemini":
|
|
11923
|
+
validateExecutable(normalized);
|
|
11924
|
+
return new GeminiCliRuntime();
|
|
11925
|
+
case "codex":
|
|
11926
|
+
validateExecutable(normalized);
|
|
11927
|
+
return new CodexCliRuntime();
|
|
11928
|
+
case "opencode":
|
|
11929
|
+
validateExecutable(normalized);
|
|
11930
|
+
return new OpenCodeCliRuntime();
|
|
11084
11931
|
default: throw new Error(`Unknown runtime provider "${provider}". Supported providers: ${SUPPORTED_PROVIDERS.join(", ")}`);
|
|
11085
11932
|
}
|
|
11086
11933
|
}
|
|
@@ -11231,6 +12078,8 @@ var ChannelBridge = class {
|
|
|
11231
12078
|
#workspaceDir;
|
|
11232
12079
|
#chunkLimit;
|
|
11233
12080
|
#mcpServerPath;
|
|
12081
|
+
#runtimeArgs;
|
|
12082
|
+
#runtimeEnv;
|
|
11234
12083
|
constructor(options) {
|
|
11235
12084
|
this.#provider = options.provider;
|
|
11236
12085
|
this.#sessionMap = options.sessionMap;
|
|
@@ -11239,6 +12088,8 @@ var ChannelBridge = class {
|
|
|
11239
12088
|
this.#workspaceDir = options.workspaceDir ?? DEFAULT_WORKSPACE_DIR;
|
|
11240
12089
|
this.#chunkLimit = options.chunkLimit;
|
|
11241
12090
|
this.#mcpServerPath = options.mcpServerPath ?? DEFAULT_MCP_SERVER_PATH;
|
|
12091
|
+
this.#runtimeArgs = options.runtimeArgs;
|
|
12092
|
+
this.#runtimeEnv = options.runtimeEnv;
|
|
11242
12093
|
}
|
|
11243
12094
|
/**
|
|
11244
12095
|
* Process an incoming channel message through the full agent execution pipeline.
|
|
@@ -11248,7 +12099,9 @@ var ChannelBridge = class {
|
|
|
11248
12099
|
*/
|
|
11249
12100
|
async handle(message, callbacks, abortSignal) {
|
|
11250
12101
|
const sessionKey = buildSessionKey(message);
|
|
12102
|
+
logDebug(`[channel-bridge] handle: channel=${message.provider} from=${message.from} channelId=${message.channelId} threadId=${message.replyToId ?? "none"} agentId=${message.agentId ?? "default"} media=${message.mediaUrls?.length ?? 0}`);
|
|
11251
12103
|
const existingSessionId = await this.#sessionMap.get(sessionKey);
|
|
12104
|
+
logDebug(`[channel-bridge] session lookup: key=${formatSessionKeyString(sessionKey)} ${existingSessionId ? `hit=${existingSessionId}` : "miss"}`);
|
|
11252
12105
|
const hookRunner = getGlobalHookRunner();
|
|
11253
12106
|
if (existingSessionId && hookRunner?.hasHooks("session_resumed")) await hookRunner.runSessionResumed({
|
|
11254
12107
|
sessionId: existingSessionId,
|
|
@@ -11275,9 +12128,10 @@ var ChannelBridge = class {
|
|
|
11275
12128
|
const sideEffectsFile = join(invocationDir, "side-effects.ndjson");
|
|
11276
12129
|
try {
|
|
11277
12130
|
const mcpServers = this.#buildMcpConfig(message, sessionKey, sideEffectsFile);
|
|
12131
|
+
logDebug(`[channel-bridge] creating runtime: provider=${this.#provider}`);
|
|
11278
12132
|
const runtime = createCliRuntime(this.#provider);
|
|
11279
12133
|
let workspaceDir = this.#workspaceDir;
|
|
11280
|
-
let
|
|
12134
|
+
let hookEnv;
|
|
11281
12135
|
const runId = randomUUID();
|
|
11282
12136
|
if (hookRunner?.hasHooks("before_runtime_spawn")) {
|
|
11283
12137
|
const spawnResult = await hookRunner.runBeforeRuntimeSpawn({
|
|
@@ -11293,9 +12147,17 @@ var ChannelBridge = class {
|
|
|
11293
12147
|
channelId: message.channelId,
|
|
11294
12148
|
runtimeName: this.#provider
|
|
11295
12149
|
});
|
|
11296
|
-
if (spawnResult?.workspaceDir)
|
|
11297
|
-
|
|
12150
|
+
if (spawnResult?.workspaceDir) {
|
|
12151
|
+
logDebug(`[channel-bridge] hook overrode workspaceDir: ${this.#workspaceDir} -> ${spawnResult.workspaceDir}`);
|
|
12152
|
+
workspaceDir = spawnResult.workspaceDir;
|
|
12153
|
+
}
|
|
12154
|
+
if (spawnResult?.env) {
|
|
12155
|
+
logDebug(`[channel-bridge] hook injected env keys: ${Object.keys(spawnResult.env).join(", ")}`);
|
|
12156
|
+
hookEnv = spawnResult.env;
|
|
12157
|
+
}
|
|
11298
12158
|
}
|
|
12159
|
+
const media = message.mediaUrls?.length ? await resolveMediaAttachments(message.mediaUrls, invocationDir) : void 0;
|
|
12160
|
+
if (media?.length) logDebug(`[channel-bridge] resolved ${media.length}/${message.mediaUrls.length} media attachments`);
|
|
11299
12161
|
const adapter = new DeliveryAdapter(this.#chunkLimit !== void 0 ? { chunkLimit: this.#chunkLimit } : void 0);
|
|
11300
12162
|
let runResult;
|
|
11301
12163
|
let lastError;
|
|
@@ -11303,11 +12165,16 @@ var ChannelBridge = class {
|
|
|
11303
12165
|
try {
|
|
11304
12166
|
const captured = captureResult(runtime.execute({
|
|
11305
12167
|
prompt: systemPrompt + (message.extraContext ? "\n\n" + message.extraContext : "") + "\n\n" + message.text,
|
|
12168
|
+
media: media?.length ? media : void 0,
|
|
11306
12169
|
sessionId: existingSessionId,
|
|
11307
12170
|
mcpServers,
|
|
11308
12171
|
abortSignal,
|
|
11309
12172
|
workingDirectory: workspaceDir,
|
|
11310
|
-
env:
|
|
12173
|
+
env: this.#runtimeEnv || hookEnv ? {
|
|
12174
|
+
...this.#runtimeEnv,
|
|
12175
|
+
...hookEnv
|
|
12176
|
+
} : void 0,
|
|
12177
|
+
extraArgs: this.#runtimeArgs
|
|
11311
12178
|
}));
|
|
11312
12179
|
payloads = await adapter.process(captured.events, callbacks);
|
|
11313
12180
|
runResult = captured.getResult();
|
|
@@ -11315,6 +12182,7 @@ var ChannelBridge = class {
|
|
|
11315
12182
|
} catch (err) {
|
|
11316
12183
|
const errMsg = String(err);
|
|
11317
12184
|
const category = classifyError(errMsg);
|
|
12185
|
+
logDebug(`[channel-bridge] runtime threw: category=${category} error=${errMsg.slice(0, 500)}`);
|
|
11318
12186
|
lastError = errMsg;
|
|
11319
12187
|
payloads = [];
|
|
11320
12188
|
runResult = {
|
|
@@ -11328,7 +12196,11 @@ var ChannelBridge = class {
|
|
|
11328
12196
|
} catch {
|
|
11329
12197
|
mcp = { ...EMPTY_SIDE_EFFECTS };
|
|
11330
12198
|
}
|
|
11331
|
-
|
|
12199
|
+
logDebug(`[channel-bridge] side effects: sentTexts=${mcp.sentTexts.length} sentMedia=${mcp.sentMediaUrls.length} cronAdds=${mcp.cronAdds}`);
|
|
12200
|
+
if (runResult?.sessionId) {
|
|
12201
|
+
logDebug(`[channel-bridge] session update: key=${formatSessionKeyString(sessionKey)} sessionId=${runResult.sessionId}`);
|
|
12202
|
+
await this.#sessionMap.set(sessionKey, runResult.sessionId);
|
|
12203
|
+
}
|
|
11332
12204
|
const finalResult = runResult ?? { ...DEFAULT_RUN_RESULT };
|
|
11333
12205
|
if (hookRunner) {
|
|
11334
12206
|
const runtimeCtx = {
|
|
@@ -11356,6 +12228,7 @@ var ChannelBridge = class {
|
|
|
11356
12228
|
durationMs: finalResult.durationMs
|
|
11357
12229
|
}, runtimeCtx);
|
|
11358
12230
|
}
|
|
12231
|
+
logDebug(`[channel-bridge] complete: runId=${runId} duration=${finalResult.durationMs}ms payloads=${payloads.length} error=${lastError ?? "none"}`);
|
|
11359
12232
|
return {
|
|
11360
12233
|
payloads,
|
|
11361
12234
|
run: finalResult,
|
|
@@ -11517,4 +12390,4 @@ function resolveGatewayCredentialsFromConfig(params) {
|
|
|
11517
12390
|
}
|
|
11518
12391
|
|
|
11519
12392
|
//#endregion
|
|
11520
|
-
export { ChannelBridge,
|
|
12393
|
+
export { ChannelBridge, ensureAgentWorkspace, loadSessionStore, resolveAgentDir, resolveAgentIdentity, resolveAgentTimeoutMs, resolveAgentWorkspaceDir, resolveGatewayCredentialsFromConfig, resolveGatewayPort, resolveSessionFilePath, resolveStorePath, saveSessionStore };
|