@noxsoft/anima 2.0.2 → 2.0.4
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 +1260 -28
- package/dist/accounts-Bth3PpPD.js +260 -0
- package/dist/accounts-D8CPKNkN.js +259 -0
- package/dist/acp-cli-ByK6lS6c.js +1081 -0
- package/dist/acp-cli-CaQCjIw4.js +1084 -0
- package/dist/agent-BgIkqd3F.js +725 -0
- package/dist/agent-N5BDcge4.js +725 -0
- package/dist/agent-events-COH7NDW2.js +182 -0
- package/dist/agent-scope-CPphqq-U.js +452 -0
- package/dist/agent-scope-DZgptr9J.js +452 -0
- package/dist/agent-scope-cj2QCT6R.js +112 -0
- package/dist/agents-NEudYMdg.js +774 -0
- package/dist/agents.config-Bujs-NIy.js +182 -0
- package/dist/agents.config-jp7OLssr.js +182 -0
- package/dist/argv-BMZMiW7v.js +73 -0
- package/dist/audit-C-UJhfdv.js +2401 -0
- package/dist/audit-CeCO7SK5.js +2401 -0
- package/dist/auth-BNZsOHGF.js +648 -0
- package/dist/auth-DMPZWzEa.js +639 -0
- package/dist/auth-choice-5VnaGMD-.js +2681 -0
- package/dist/auth-choice-DA2k4vs8.js +2681 -0
- package/dist/auth-health-B7FqA26_.js +149 -0
- package/dist/auth-health-VO_MPqVX.js +149 -0
- package/dist/auth-profiles-BDrNYX_n.js +1564 -0
- package/dist/auth-profiles-CxSHydjn.js +2689 -0
- package/dist/banner-BtDZPRzi.js +294 -0
- package/dist/browser-cli-8yQMpxb8.js +1679 -0
- package/dist/browser-cli-Czg3JtDH.js +1676 -0
- package/dist/build-info.json +3 -3
- package/dist/bundled/boot-md/handler.js +16 -16
- package/dist/bundled/bootstrap-extra-files/handler.js +4 -4
- package/dist/bundled/command-logger/handler.js +1 -1
- package/dist/bundled/session-memory/handler.js +5 -5
- package/dist/call-BIzCaKZb.js +282 -0
- package/dist/call-BYDpTVCZ.js +282 -0
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/catalog-CqKiUgu6.js +185 -0
- package/dist/catalog-DMfEg-oK.js +185 -0
- package/dist/channel-options-BrtCtyrT.js +32 -0
- package/dist/channel-options-CO21Gl8p.js +33 -0
- package/dist/channel-selection-Bbm1lq3P.js +51 -0
- package/dist/channel-selection-CqcX7Ocw.js +51 -0
- package/dist/channel-web-DrsT6OAE.js +2162 -0
- package/dist/channels-cli-Juyh1S6n.js +1304 -0
- package/dist/channels-cli-zNvi1m5c.js +1306 -0
- package/dist/channels-status-issues-CqzqshW4.js +18 -0
- package/dist/channels-status-issues-DdJdO866.js +18 -0
- package/dist/chrome-C4dOMO8z.js +1601 -0
- package/dist/chrome-DdcDzAtH.js +1629 -0
- package/dist/chrome-U3DRzjJD.js +1601 -0
- package/dist/chunk-D2nLsrEW.js +348 -0
- package/dist/clack-prompter-BI3RDW5w.js +92 -0
- package/dist/clack-prompter-Dwr1m_IZ.js +92 -0
- package/dist/cli/daemon-cli.js +1 -1
- package/dist/cli-C3cpDaz8.js +99 -0
- package/dist/cli-CjWUGdGC.js +101 -0
- package/dist/cli-session-BVjY_XrW.js +5463 -0
- package/dist/cli-session-gtuYN2Iq.js +5408 -0
- package/dist/client-Dswwze5_.js +1692 -0
- package/dist/client-LRKFjo4A.js +1692 -0
- package/dist/clipboard-BZKS9O1u.js +31 -0
- package/dist/clipboard-DES8b1AM.js +31 -0
- package/dist/command-format-CP1YTNCl.js +52 -0
- package/dist/command-format-CVL4K5cj.js +52 -0
- package/dist/command-format-G6N2zghg.js +38 -0
- package/dist/command-registry-BBvNvysr.js +248 -0
- package/dist/commands-AZ3n8Y2c.js +726 -0
- package/dist/commands-BMnD_QRY.js +726 -0
- package/dist/commands-registry-cFqZ6Ib4.js +766 -0
- package/dist/commands-registry-q13H7ng5.js +766 -0
- package/dist/common-CX5458fH.js +287 -0
- package/dist/common-DJbnT8ws.js +287 -0
- package/dist/completion-cli-BADRBcIl.js +432 -0
- package/dist/completion-cli-DMQgiObF.js +431 -0
- package/dist/config-CU-Axg8P.js +5704 -0
- package/dist/config-DaqbUdkI.js +5705 -0
- package/dist/config-cli-BPlbwiuA.js +244 -0
- package/dist/config-cli-DXgZJkPU.js +247 -0
- package/dist/config-guard-Ba49JNds.js +76 -0
- package/dist/config-guard-Cu0qMKZJ.js +93 -0
- package/dist/config-kVVm5EYV.js +6523 -0
- package/dist/config-sync-CzLnLTXt.js +91 -0
- package/dist/config-sync-DuydxPWx.js +91 -0
- package/dist/configure-CHgacLyi.js +960 -0
- package/dist/configure-DfHXDa1L.js +959 -0
- package/dist/context-DzgXOckU.js +60 -0
- package/dist/control-service-8_wKHwBa.js +72 -0
- package/dist/control-service-BtL1Jto_.js +72 -0
- package/dist/cron-cli-BCzSR2c0.js +448 -0
- package/dist/cron-cli-CCWNkykU.js +451 -0
- package/dist/daemon-cli-Bjkbu9Vy.js +565 -0
- package/dist/daemon-cli-CmlHcC1J.js +566 -0
- package/dist/daemon-cli.js +16 -16
- package/dist/daemon-runtime-C0tz7VAC.js +460 -0
- package/dist/daemon-runtime-rUTqCVwJ.js +460 -0
- package/dist/deliver-BBggsviM.js +1097 -0
- package/dist/deliver-CePITOl8.js +1162 -0
- package/dist/deliver-DFnVaetP.js +1097 -0
- package/dist/delivery-queue-BJQK3oh5.js +220 -0
- package/dist/deps-CeEKhrp7.js +42 -0
- package/dist/devices-cli-DQrDMrZH.js +198 -0
- package/dist/devices-cli-Oe-A1Dv0.js +195 -0
- package/dist/diagnostics-DxMFrBLO.js +35 -0
- package/dist/diagnostics-m79ZlMmZ.js +35 -0
- package/dist/directory-cli-BL6h8cGF.js +246 -0
- package/dist/directory-cli-Cjgmi_sj.js +243 -0
- package/dist/dispatcher-DAFbQM-c.js +100 -0
- package/dist/dispatcher-DNd40gUn.js +100 -0
- package/dist/dist-CqDI82ei.js +929 -0
- package/dist/dist-DnHRxR5U.js +929 -0
- package/dist/dns-cli-CFtV3BXK.js +200 -0
- package/dist/dns-cli-NyIHvQ5S.js +197 -0
- package/dist/dock-BdXLb5oY.js +753 -0
- package/dist/dock-jYICmNcI.js +753 -0
- package/dist/docs-cli-CrOaIK_H.js +161 -0
- package/dist/docs-cli-D_cmJDSr.js +159 -0
- package/dist/doctor-BpGxKrBl.js +1815 -0
- package/dist/doctor-D12wNQPU.js +1813 -0
- package/dist/doctor-completion-DeOfofek.js +92 -0
- package/dist/doctor-completion-DwjqdEcK.js +92 -0
- package/dist/doctor-config-flow-BI3mpkbd.js +1232 -0
- package/dist/doctor-config-flow-wMHheFkC.js +1232 -0
- package/dist/engine-BCtL-AMw.js +563 -0
- package/dist/engine-Bk_UT413.js +563 -0
- package/dist/entry.js +5 -5
- package/dist/env-v6411I8h.js +32 -0
- package/dist/exec-B7sUS164.js +1167 -0
- package/dist/exec-approvals-CroGJRUg.js +1221 -0
- package/dist/exec-approvals-cli-BTxF_RsH.js +371 -0
- package/dist/exec-approvals-cli-n1gyGwH2.js +368 -0
- package/dist/exec-mhSykkaa.js +255 -0
- package/dist/extensionAPI.js +3 -3
- package/dist/frontmatter-BmHq0vRD.js +204 -0
- package/dist/gateway-cli-DDBadlrS.js +19971 -0
- package/dist/gateway-cli-IZNkOMBe.js +19972 -0
- package/dist/gateway-rpc-Dtx8HN-n.js +28 -0
- package/dist/gateway-rpc-L2PVSqGj.js +28 -0
- package/dist/github-copilot-auth-DKyqDaGU.js +1418 -0
- package/dist/github-copilot-auth-DXpOMSd3.js +1418 -0
- package/dist/gmail-setup-utils-BKNczIJ9.js +428 -0
- package/dist/gmail-setup-utils-co0ppccC.js +428 -0
- package/dist/health-Bm8ZTvC3.js +1253 -0
- package/dist/health-DUf1gt4E.js +1258 -0
- package/dist/health-format-BksT6F68.js +208 -0
- package/dist/health-format-uzh1xYLD.js +208 -0
- package/dist/heartbeat-visibility-1TJb1Zao.js +98 -0
- package/dist/heartbeat-visibility-CwodtdcX.js +98 -0
- package/dist/help-format-C6cv_aZp.js +17 -0
- package/dist/helpers-N-uSFKOn.js +10 -0
- package/dist/hooks-cli-1POsXqOl.js +993 -0
- package/dist/hooks-cli-BGjILbze.js +991 -0
- package/dist/hooks-status-DE07n5RC.js +356 -0
- package/dist/hooks-status-Du-d1jde.js +356 -0
- package/dist/image-ops-B_AYV3tp.js +541 -0
- package/dist/image-ops-Bp0C6Mvr.js +541 -0
- package/dist/index.js +82 -82
- package/dist/init-9A0s7bWG.js +122 -0
- package/dist/init-DoyCHJDC.js +122 -0
- package/dist/installs-D1C9wHAq.js +383 -0
- package/dist/installs-Dh4dHayM.js +383 -0
- package/dist/ipv4-DCItfaJo.js +1964 -0
- package/dist/ipv4-DSOUVx0i.js +1964 -0
- package/dist/lanes-BvSnHq2h.js +232 -0
- package/dist/lifecycle-core-BY4WIf9g.js +388 -0
- package/dist/lifecycle-core-TQKyXO-6.js +387 -0
- package/dist/links-CNu_8RZl.js +15 -0
- package/dist/links-D2tt2ouh.js +15 -0
- package/dist/llm-slug-generator.js +4 -4
- package/dist/logging-BIeRw0WR.js +15 -0
- package/dist/logging-C7lb3Vjc.js +15 -0
- package/dist/login-DXWKewA2.js +59 -0
- package/dist/login-Fhh4uWmf.js +61 -0
- package/dist/login-pPs3UO38.js +61 -0
- package/dist/login-qr-CevLD8cV.js +326 -0
- package/dist/login-qr-GF2JMIy-.js +323 -0
- package/dist/login-qr-ZYYKD6Yt.js +321 -0
- package/dist/logs-cli-CzXbX8HZ.js +242 -0
- package/dist/logs-cli-D9ngH9PF.js +245 -0
- package/dist/manager-BD5rA3w0.js +3244 -0
- package/dist/manager-BDPgBQSH.js +3246 -0
- package/dist/manager-DRWMWM--.js +3244 -0
- package/dist/manifest-registry-DbvPaBXY.js +748 -0
- package/dist/manifest-registry-kHX_MFa1.js +748 -0
- package/dist/markdown-tables-CqwihY2m.js +347 -0
- package/dist/markdown-tables-DJV7eAJZ.js +348 -0
- package/dist/media-lUqN-0O9.js +1342 -0
- package/dist/memory-cli-BLXSpgnN.js +868 -0
- package/dist/memory-cli-BcGVkkRJ.js +869 -0
- package/dist/message-channel-D_jIO87f.js +110 -0
- package/dist/migrate-BpVOar4L.js +157 -0
- package/dist/migrate-CkgGDkWy.js +157 -0
- package/dist/model-selection-Cqt6aJ0G.js +2691 -0
- package/dist/models-CExsNQPH.js +2510 -0
- package/dist/models-cli-Ba3Jmwev.js +2739 -0
- package/dist/models-cli-iDAlsbL2.js +258 -0
- package/dist/net-0A_zcaQD.js +218 -0
- package/dist/node-cli-ATmwCXIk.js +1319 -0
- package/dist/node-cli-DYFR_V25.js +1322 -0
- package/dist/node-service-CN4LqR1A.js +67 -0
- package/dist/node-service-CWt3MdSC.js +67 -0
- package/dist/nodes-cli-BeVmhTz3.js +1197 -0
- package/dist/nodes-cli-QeJIfa18.js +1200 -0
- package/dist/nodes-screen-DHyWAlla.js +234 -0
- package/dist/nodes-screen-qs3jRBPk.js +234 -0
- package/dist/note-CSlg2BnB.js +73 -0
- package/dist/note-Ctvglhp1.js +73 -0
- package/dist/npm-registry-spec-DQd4M22q.js +351 -0
- package/dist/npm-registry-spec-PxisIMts.js +351 -0
- package/dist/onboard-DeruD10m.js +1166 -0
- package/dist/onboard-SAcu5N6N.js +1165 -0
- package/dist/onboard-channels-C4iSfFXR.js +672 -0
- package/dist/onboard-channels-oVTVgoyg.js +672 -0
- package/dist/onboard-helpers-B8roRwLP.js +365 -0
- package/dist/onboard-helpers-Dgh26hgP.js +365 -0
- package/dist/onboarding-Bi-ac8we.js +911 -0
- package/dist/onboarding-C2gjB2u8.js +910 -0
- package/dist/orchestrator-DlbAYMQP.js +357 -0
- package/dist/orchestrator-DlwVRVDA.js +357 -0
- package/dist/outbound-CkKgc6iR.js +2062 -0
- package/dist/outbound-Vfm5yDh3.js +214 -0
- package/dist/outbound-bs_VK51X.js +214 -0
- package/dist/outbound-send-deps-DDjiMfEL.js +55 -0
- package/dist/pairing-cli-CJYeuEik.js +118 -0
- package/dist/pairing-cli-mqopHI8s.js +121 -0
- package/dist/pairing-store-BsXzUDPv.js +388 -0
- package/dist/pairing-store-DoNj00-X.js +388 -0
- package/dist/path-env-C_xpiG8l.js +89 -0
- package/dist/path-env-DSSMHu5A.js +89 -0
- package/dist/paths-B1vRVCad.js +126 -0
- package/dist/paths-BMuHNFxg.js +238 -0
- package/dist/paths-BXQQzXGQ.js +129 -0
- package/dist/paths-Buw_geoe.js +54 -0
- package/dist/paths-DA9WYabg.js +222 -0
- package/dist/paths-DfQGx0_k.js +129 -0
- package/dist/pi-auth-json-DOPW3e4X.js +78 -0
- package/dist/pi-auth-json-MruLmI_X.js +82 -0
- package/dist/pi-auth-json-lae_wwwo.js +80 -0
- package/dist/pi-model-discovery-7q0GxMrp.js +3 -0
- package/dist/pi-tools.policy-Csmla32P.js +200 -0
- package/dist/pi-tools.policy-xYdDLEv9.js +200 -0
- package/dist/plugin-auto-enable-CViVVWgg.js +282 -0
- package/dist/plugin-auto-enable-CjZ238UI.js +282 -0
- package/dist/plugin-registry-B4Aw2hzq.js +32 -0
- package/dist/plugin-registry-DW81arxW.js +32 -0
- package/dist/plugin-sdk/cli/cli-name.d.ts +1 -1
- package/dist/plugin-sdk/config/paths.d.ts +2 -2
- package/dist/plugin-sdk/index.js +7 -7
- package/dist/plugins-DhcGAPDB.js +38 -0
- package/dist/plugins-DtghNRtM.js +168 -0
- package/dist/plugins-cli-4vWTmOAb.js +736 -0
- package/dist/plugins-cli-CdTMbP0X.js +734 -0
- package/dist/polls-D6eCdatA.js +1343 -0
- package/dist/ports-BtZx-JKD.js +96 -0
- package/dist/ports-C8bKN8s0.js +96 -0
- package/dist/ports-DHiKnPRX.js +344 -0
- package/dist/ports-vd93M_Pt.js +317 -0
- package/dist/program-CX3aUVeb.js +176 -0
- package/dist/program-context-BPos0ivo.js +496 -0
- package/dist/progress-oiAjiiNi.js +133 -0
- package/dist/prompt-style-Cm4wOtKm.js +9 -0
- package/dist/pw-ai-4QbK5YFe.js +1865 -0
- package/dist/pw-ai-BWz3Cxt7.js +1868 -0
- package/dist/pw-ai-C83HBue2.js +1867 -0
- package/dist/qmd-manager-BcMeZiGD.js +938 -0
- package/dist/qmd-manager-CPypGJ0P.js +935 -0
- package/dist/qmd-manager-CRrSkfia.js +937 -0
- package/dist/register.agent-DDY8KJhn.js +265 -0
- package/dist/register.agent-DKawm-9d.js +1003 -0
- package/dist/register.anima-CEWUo29k.js +193 -0
- package/dist/register.anima-DBWz2rk_.js +193 -0
- package/dist/register.configure-BX67qV8k.js +103 -0
- package/dist/register.configure-CWsySuiq.js +101 -0
- package/dist/register.maintenance-0k-ZNhDg.js +543 -0
- package/dist/register.maintenance-BIwx1fzX.js +543 -0
- package/dist/register.message-CXPsoakA.js +657 -0
- package/dist/register.message-DA3jvfgI.js +660 -0
- package/dist/register.onboard-C4HG7Hqv.js +170 -0
- package/dist/register.onboard-GOpdif-j.js +170 -0
- package/dist/register.setup-B17vZT7C.js +175 -0
- package/dist/register.setup-GJyUDCqh.js +175 -0
- package/dist/register.status-health-sessions-D5876dGx.js +313 -0
- package/dist/register.status-health-sessions-lOewVIZR.js +142 -0
- package/dist/register.subclis-Dwnujj5C.js +255 -0
- package/dist/reply-CR5T_oQJ.js +32212 -0
- package/dist/reply-prefix-BcrS4Umd.js +100 -0
- package/dist/reply-prefix-Btb5o2NH.js +100 -0
- package/dist/reply-r089HuRA.js +32212 -0
- package/dist/routes-B4czFzIb.js +1820 -0
- package/dist/routes-ucJWAk5O.js +1820 -0
- package/dist/rpc-BnKxnQ0v.js +70 -0
- package/dist/rpc-DgE-xnyx.js +70 -0
- package/dist/run-main-B74kv84C.js +371 -0
- package/dist/runtime-guard-CKFdts2L.js +60 -0
- package/dist/sandbox-CJTS3er6.js +858 -0
- package/dist/sandbox-DBSiVHt_.js +859 -0
- package/dist/sandbox-cli-CrkjyU5M.js +461 -0
- package/dist/sandbox-cli-D1r5y6Sz.js +458 -0
- package/dist/security-cli-BZUdnkhn.js +462 -0
- package/dist/security-cli-DS09ebvA.js +465 -0
- package/dist/server-context-C0xZbYhg.js +824 -0
- package/dist/server-context-DVh2z7om.js +824 -0
- package/dist/server-node-events-bu9lpkMH.js +233 -0
- package/dist/server-node-events-i1Rrww31.js +231 -0
- package/dist/service-CJJwLEor.js +642 -0
- package/dist/service-DxLxBhaU.js +642 -0
- package/dist/service-audit-DB4Y3Ekp.js +488 -0
- package/dist/service-audit-M8y4TXVb.js +488 -0
- package/dist/session-CGxOLFs2.js +179 -0
- package/dist/session-DTTbdKb0.js +181 -0
- package/dist/session-cost-usage-FcdJl9c3.js +600 -0
- package/dist/session-cost-usage-qdfsGU2a.js +600 -0
- package/dist/session-yOhWcsD2.js +181 -0
- package/dist/sessions-B-Cu7JZq.js +1296 -0
- package/dist/sessions-BgLN4KFr.js +180 -0
- package/dist/sessions-CnRjwdVr.js +1296 -0
- package/dist/sessions-wRKla1Qh.js +2038 -0
- package/dist/shared-DS3UaJSP.js +66 -0
- package/dist/shared-DxNHzky3.js +77 -0
- package/dist/shared-Qpt4hUDi.js +66 -0
- package/dist/shared-kzrojZ1B.js +77 -0
- package/dist/skill-scanner-DLJji5Ye.js +263 -0
- package/dist/skills-BWFIEp4j.js +807 -0
- package/dist/skills-DV4zKdCx.js +808 -0
- package/dist/skills-cli-BY53ILm2.js +289 -0
- package/dist/skills-cli-CO3gxl8A.js +286 -0
- package/dist/skills-status-DX5pcqY3.js +166 -0
- package/dist/skills-status-zhcKzGkp.js +166 -0
- package/dist/sqlite-B6MojU1I.js +321 -0
- package/dist/sqlite-CuprTGR7.js +453 -0
- package/dist/sqlite-dzD-jMjs.js +368 -0
- package/dist/start-Cu3aLoSf.js +297 -0
- package/dist/start-Dz7tMAl8.js +296 -0
- package/dist/status-CaSxhxfV.js +2132 -0
- package/dist/status-D2C0JCX3.js +2137 -0
- package/dist/status-DlFMsQzh.js +27 -0
- package/dist/status-G0CITnKR.js +27 -0
- package/dist/status.update-CHjhVxJY.js +79 -0
- package/dist/status.update-DVFelehi.js +79 -0
- package/dist/subagent-registry-3Xb4el-8.js +14 -0
- package/dist/subagent-registry-CdSjz14I.js +2760 -0
- package/dist/subagent-registry-DNDhbHWi.js +2759 -0
- package/dist/subsystem-DfKstnEK.js +860 -0
- package/dist/system-cli-B5mt0FWa.js +82 -0
- package/dist/system-cli-Dg3UQ3Zz.js +79 -0
- package/dist/systemd-B43AvOGx.js +452 -0
- package/dist/systemd-RpPE0XGg.js +452 -0
- package/dist/systemd-hints-DMJT-Bbc.js +36 -0
- package/dist/systemd-hints-vRInKcz9.js +36 -0
- package/dist/systemd-linger-Dzyxqsod.js +75 -0
- package/dist/systemd-linger-EujbmI5A.js +75 -0
- package/dist/table-DhXHfRX2.js +279 -0
- package/dist/table-bWCLW-3P.js +279 -0
- package/dist/timeout-Ddn-5kAO.js +232 -0
- package/dist/tokens-3psI_Qk2.js +14 -0
- package/dist/tokens-BaM53PEx.js +14 -0
- package/dist/trash-Bmxs1Rnm.js +23 -0
- package/dist/trash-C39a6hKA.js +23 -0
- package/dist/tui-BHgBWhHE.js +3894 -0
- package/dist/tui-cli-B9Sq5-cC.js +50 -0
- package/dist/tui-cli-Dw7v4JoJ.js +47 -0
- package/dist/tui-mUwDwqvd.js +3894 -0
- package/dist/update-DF0GHG0j.js +317 -0
- package/dist/update-DoZLVjva.js +317 -0
- package/dist/update-check-Bt1dVPVN.js +400 -0
- package/dist/update-check-D5qAKes7.js +400 -0
- package/dist/update-cli-BNu2Oi7H.js +1105 -0
- package/dist/update-cli-D36AmALA.js +1105 -0
- package/dist/update-runner-CNQQaTwA.js +894 -0
- package/dist/update-runner-CvxZmbu-.js +894 -0
- package/dist/usage-BGCwNnjk.js +4516 -0
- package/dist/utils-DZ8pnOD5.js +243 -0
- package/dist/web-B5QG839O.js +46842 -0
- package/dist/web-Cmnvk9v0.js +2203 -0
- package/dist/web-Cv2KnTnL.js +63 -0
- package/dist/webhooks-cli-B6y89Pj_.js +319 -0
- package/dist/webhooks-cli-BDzHON4w.js +316 -0
- package/dist/whatsapp-actions-C_5MwVxM.js +45 -0
- package/dist/whatsapp-actions-hgYA12To.js +53 -0
- package/dist/whatsapp-actions-zTiVOoOV.js +49 -0
- package/dist/widearea-dns-BeIdnISJ.js +127 -0
- package/dist/widearea-dns-CF1gxpJ-.js +127 -0
- package/dist/workspace-DLna1IxR.js +649 -0
- package/dist/ws-log-Q4wO1Ztb.js +267 -0
- package/dist/ws-log-xF0kxDzp.js +267 -0
- package/package.json +1 -2
- package/dist/accounts-Cc5E4IDO.js +0 -260
- package/dist/accounts-CcVrwKqv.js +0 -259
- package/dist/acp-cli-DvphOKuh.js +0 -1081
- package/dist/acp-cli-p28pQ65a.js +0 -1084
- package/dist/agent-Cj7uDJaZ.js +0 -725
- package/dist/agent-Cuj9-2sT.js +0 -725
- package/dist/agent-events-BEBQsyE5.js +0 -182
- package/dist/agent-scope-BVf4aSwY.js +0 -112
- package/dist/agent-scope-OZi7lb8S.js +0 -452
- package/dist/agent-scope-V1bi9OYL.js +0 -452
- package/dist/agents-BUWqn_Ui.js +0 -774
- package/dist/agents.config-Dvo2ULxs.js +0 -182
- package/dist/agents.config-d6H0_3oj.js +0 -182
- package/dist/argv-DqUHKf0o.js +0 -73
- package/dist/audit-C6okOOSh.js +0 -2401
- package/dist/audit-VWjIdwC7.js +0 -2401
- package/dist/auth-91o2YM96.js +0 -648
- package/dist/auth-choice-CAmACV13.js +0 -2681
- package/dist/auth-choice-p3SeHPj2.js +0 -2681
- package/dist/auth-health-B_jXrWe6.js +0 -149
- package/dist/auth-health-DCicUKYR.js +0 -149
- package/dist/auth-lZ26wsbN.js +0 -639
- package/dist/auth-profiles-CCDD56dU.js +0 -1564
- package/dist/auth-profiles-DxI8L7bs.js +0 -2689
- package/dist/banner-Cohn04J6.js +0 -294
- package/dist/browser-cli-DANzjztE.js +0 -1676
- package/dist/browser-cli-WjsVH741.js +0 -1679
- package/dist/call-BAHvlu2G.js +0 -282
- package/dist/call-Ct7EGP_L.js +0 -282
- package/dist/catalog-BAayBt1L.js +0 -185
- package/dist/catalog-BNsf97BM.js +0 -185
- package/dist/channel-options-Dx9nPlX8.js +0 -33
- package/dist/channel-options-ZdvXrTGs.js +0 -32
- package/dist/channel-selection-CujyiWGM.js +0 -51
- package/dist/channel-selection-DfGpCyh2.js +0 -51
- package/dist/channel-web-CC0hkgkR.js +0 -2162
- package/dist/channels-cli-D7lNBpIb.js +0 -1304
- package/dist/channels-cli-DUPG8WDv.js +0 -1306
- package/dist/channels-status-issues-DBc1pU_R.js +0 -18
- package/dist/channels-status-issues-DjO9MHIG.js +0 -18
- package/dist/chrome-Bi6iZ5sG.js +0 -1601
- package/dist/chrome-DNSv7Cpy.js +0 -1629
- package/dist/chrome-DScZx4Lk.js +0 -1601
- package/dist/chunk-mxPVo000.js +0 -348
- package/dist/clack-prompter-B0kl7shw.js +0 -92
- package/dist/clack-prompter-B1YxZdRy.js +0 -92
- package/dist/cli-CfHUkOD0.js +0 -101
- package/dist/cli-ClMrIh6l.js +0 -99
- package/dist/cli-session-BkPTd9Pk.js +0 -5463
- package/dist/cli-session-Dd8DKb5a.js +0 -5408
- package/dist/client-C1avc0vD.js +0 -1692
- package/dist/client-CC94YZrT.js +0 -1692
- package/dist/clipboard-B2fBy8tG.js +0 -31
- package/dist/clipboard-BbGnZskJ.js +0 -31
- package/dist/command-format-Clp46jkj.js +0 -38
- package/dist/command-format-DELazozB.js +0 -52
- package/dist/command-format-SkzzRqR1.js +0 -52
- package/dist/command-registry-DZ4hkmA0.js +0 -248
- package/dist/commands-DtYZJSPn.js +0 -568
- package/dist/commands-Dujk1JmY.js +0 -568
- package/dist/commands-registry-Bd0xbvwG.js +0 -766
- package/dist/commands-registry-DYfRSVF3.js +0 -766
- package/dist/common-D6bu0zHC.js +0 -287
- package/dist/common-zW9Y2P1B.js +0 -287
- package/dist/completion-cli-tSe7Pmqm.js +0 -431
- package/dist/completion-cli-vn4IScs5.js +0 -432
- package/dist/config-C8rUDJXY.js +0 -5704
- package/dist/config-CLZ_XGVw.js +0 -6523
- package/dist/config-SY8M0kM_.js +0 -5705
- package/dist/config-cli-1V7D2Wsw.js +0 -247
- package/dist/config-cli-CjWEC81L.js +0 -244
- package/dist/config-guard-BW2gpKj_.js +0 -93
- package/dist/config-guard-BvxuzHpo.js +0 -76
- package/dist/config-sync-CoIIbEOe.js +0 -91
- package/dist/config-sync-DvAttep0.js +0 -91
- package/dist/configure-Bf0oupCE.js +0 -959
- package/dist/configure-DRM-7zFf.js +0 -960
- package/dist/context-D5iEFzv9.js +0 -60
- package/dist/control-service-C8m8F9pr.js +0 -72
- package/dist/control-service-DKotCWCg.js +0 -72
- package/dist/cron-cli-DB_FLYHD.js +0 -448
- package/dist/cron-cli-bxm5lrrO.js +0 -451
- package/dist/daemon-cli-1LsOnICv.js +0 -566
- package/dist/daemon-cli-CC2NrJ7a.js +0 -565
- package/dist/daemon-runtime-BXZhtBL9.js +0 -460
- package/dist/daemon-runtime-DW4USC7r.js +0 -460
- package/dist/deliver-B4HuPwJA.js +0 -1162
- package/dist/deliver-LiY5oL52.js +0 -1097
- package/dist/deliver-xrmk7xjh.js +0 -1097
- package/dist/delivery-queue-TnQykYsg.js +0 -220
- package/dist/deps-CMMOiOsF.js +0 -42
- package/dist/devices-cli-Be5he2SA.js +0 -195
- package/dist/devices-cli-z6ecoFe9.js +0 -198
- package/dist/diagnostics-Dj75aEHN.js +0 -35
- package/dist/diagnostics-DlIw6fqD.js +0 -35
- package/dist/directory-cli-CEy-0nxj.js +0 -243
- package/dist/directory-cli-DpzKcigr.js +0 -246
- package/dist/dispatcher-10Shiuz3.js +0 -100
- package/dist/dispatcher-3Jae6AiW.js +0 -100
- package/dist/dns-cli-Bat1pkc-.js +0 -200
- package/dist/dns-cli-NohNyEo0.js +0 -197
- package/dist/dock-DbxBBv30.js +0 -753
- package/dist/dock-cPBY4qGl.js +0 -753
- package/dist/docs-cli-BWp6p-Tq.js +0 -161
- package/dist/docs-cli-x22FnZfL.js +0 -159
- package/dist/doctor-BrT5m_on.js +0 -1815
- package/dist/doctor-Pp2HVnjM.js +0 -1813
- package/dist/doctor-completion-DNTimX9o.js +0 -92
- package/dist/doctor-completion-ylN9QAJ6.js +0 -92
- package/dist/doctor-config-flow-D1w3700T.js +0 -1232
- package/dist/doctor-config-flow-Dq50iE1R.js +0 -1232
- package/dist/engine-B9avUJL5.js +0 -563
- package/dist/engine-BiUQ25D4.js +0 -563
- package/dist/env-0lJfCPsw.js +0 -32
- package/dist/exec-BenD3A5l.js +0 -1167
- package/dist/exec-Bv3pyjeM.js +0 -255
- package/dist/exec-approvals-CdLmKX2R.js +0 -1221
- package/dist/exec-approvals-cli-DXfV6G8H.js +0 -368
- package/dist/exec-approvals-cli-J2cZs10o.js +0 -371
- package/dist/frontmatter-YijVi0FQ.js +0 -204
- package/dist/gateway-cli-DOAbA0pc.js +0 -19972
- package/dist/gateway-cli-QpWtBhQy.js +0 -19971
- package/dist/gateway-rpc-DJKBil9s.js +0 -28
- package/dist/gateway-rpc-DVterpLP.js +0 -28
- package/dist/github-copilot-auth-4IUFp669.js +0 -1418
- package/dist/github-copilot-auth-C9E0IROs.js +0 -1418
- package/dist/gmail-setup-utils-BPo_LkKI.js +0 -428
- package/dist/gmail-setup-utils-D3Yqgor7.js +0 -428
- package/dist/health-BeZnqp6m.js +0 -1258
- package/dist/health-Cn2OoVWZ.js +0 -1253
- package/dist/health-format-CdP99j3Y.js +0 -208
- package/dist/health-format-JEChH08S.js +0 -208
- package/dist/heartbeat-visibility-BL3WAchI.js +0 -98
- package/dist/heartbeat-visibility-CQ9QimI7.js +0 -98
- package/dist/help-format-Dl4bsrLI.js +0 -17
- package/dist/helpers-ZKNRexvX.js +0 -10
- package/dist/hooks-cli-D99hXt7K.js +0 -991
- package/dist/hooks-cli-DMB8RiEO.js +0 -993
- package/dist/hooks-status-B-e96dZj.js +0 -356
- package/dist/hooks-status-C_9sE0ox.js +0 -356
- package/dist/image-ops-Dlt3T7th.js +0 -541
- package/dist/image-ops-omlvdfah.js +0 -541
- package/dist/init-Bm04RagW.js +0 -122
- package/dist/init-CaJBf4p1.js +0 -122
- package/dist/installs-C2iMRBVz.js +0 -383
- package/dist/installs-D-cPGdCw.js +0 -383
- package/dist/ipv4-Bf7NS3QU.js +0 -1964
- package/dist/ipv4-wWNs8IH_.js +0 -1964
- package/dist/lanes-CNxj3tit.js +0 -232
- package/dist/lifecycle-core-B_7XRcvF.js +0 -388
- package/dist/lifecycle-core-By83PVAK.js +0 -387
- package/dist/links-BfjHVTB_.js +0 -15
- package/dist/links-DPGe0OHw.js +0 -15
- package/dist/logging-DB6BQmhi.js +0 -15
- package/dist/logging-mcb66J0p.js +0 -15
- package/dist/login-BDCg6D0N.js +0 -61
- package/dist/login-BDfnbjnZ.js +0 -59
- package/dist/login-BqH1itcg.js +0 -61
- package/dist/login-qr-CyOw3R4r.js +0 -321
- package/dist/login-qr-D8ECtb72.js +0 -323
- package/dist/login-qr-RnR7e4Bw.js +0 -326
- package/dist/logs-cli--j89L74J.js +0 -245
- package/dist/logs-cli-DpEMg_Gq.js +0 -242
- package/dist/manager-B4OyvcxT.js +0 -3244
- package/dist/manager-Cqc1CeH7.js +0 -3246
- package/dist/manager-DUyQPFvj.js +0 -3244
- package/dist/manifest-registry-CW1zCyRF.js +0 -748
- package/dist/manifest-registry-D4lM2RdV.js +0 -748
- package/dist/markdown-tables-BT1X6jqH.js +0 -347
- package/dist/markdown-tables-DHgOK2vI.js +0 -348
- package/dist/media-THyainiE.js +0 -1342
- package/dist/memory-cli-BKocCWXM.js +0 -868
- package/dist/memory-cli-Jmma-xI_.js +0 -869
- package/dist/message-channel-dSTVVCyX.js +0 -110
- package/dist/migrate-BR6iAIjO.js +0 -157
- package/dist/migrate-D0EcMs0f.js +0 -157
- package/dist/model-selection-YcSr9CgC.js +0 -2691
- package/dist/models-1vUQBVfw.js +0 -2510
- package/dist/models-cli-BK3BwUhL.js +0 -2739
- package/dist/models-cli-DECrM8oA.js +0 -258
- package/dist/net-B5lXhYLV.js +0 -218
- package/dist/node-cli-cLHUNpPD.js +0 -1319
- package/dist/node-cli-fO7Y132S.js +0 -1322
- package/dist/node-service-BFxHJsno.js +0 -67
- package/dist/node-service-DUnan4uK.js +0 -67
- package/dist/nodes-cli-BCq35E6N.js +0 -1200
- package/dist/nodes-cli-vD7MwAKP.js +0 -1197
- package/dist/nodes-screen-1YiLkqr5.js +0 -234
- package/dist/nodes-screen-DZeD8hE5.js +0 -234
- package/dist/note-Bi8Wb8DV.js +0 -73
- package/dist/note-uiuPxhyX.js +0 -73
- package/dist/npm-registry-spec-B-XIShkB.js +0 -351
- package/dist/npm-registry-spec-za3itb5Y.js +0 -351
- package/dist/onboard-Ds6w_sWo.js +0 -1165
- package/dist/onboard-SAVx3bp4.js +0 -1166
- package/dist/onboard-channels-Cg_EkBa4.js +0 -672
- package/dist/onboard-channels-D7NbA55V.js +0 -672
- package/dist/onboard-helpers-DO_hgZb9.js +0 -365
- package/dist/onboard-helpers-_XgJgeqh.js +0 -365
- package/dist/onboarding-3hLmDd0r.js +0 -911
- package/dist/onboarding-B4LKLsbU.js +0 -910
- package/dist/orchestrator-BKzmyBWy.js +0 -357
- package/dist/orchestrator-BN3QCz2s.js +0 -357
- package/dist/outbound-BgA9hNlP.js +0 -2062
- package/dist/outbound-CjdvVhUI.js +0 -214
- package/dist/outbound-DOGe6qb2.js +0 -214
- package/dist/outbound-send-deps-Du5aBpd7.js +0 -55
- package/dist/pairing-cli-2vnyg_Nd.js +0 -118
- package/dist/pairing-cli-BH1KQtNV.js +0 -121
- package/dist/pairing-store-DJz_9Gv0.js +0 -388
- package/dist/pairing-store-DmOzxcuk.js +0 -388
- package/dist/path-env-Bu6k0jDQ.js +0 -89
- package/dist/path-env-C0zQSjw8.js +0 -89
- package/dist/paths-BTc4nk-6.js +0 -126
- package/dist/paths-BgUi2Z2G.js +0 -54
- package/dist/paths-C6VCWKo3.js +0 -238
- package/dist/paths-CCxa0o9c.js +0 -222
- package/dist/paths-CxRf2rBG.js +0 -129
- package/dist/paths-hcX1Gqg5.js +0 -129
- package/dist/pi-auth-json-B68R7q7_.js +0 -82
- package/dist/pi-auth-json-CR0jXAgq.js +0 -78
- package/dist/pi-auth-json-ZYzi3nxs.js +0 -80
- package/dist/pi-model-discovery-Cxs4pvC2.js +0 -3
- package/dist/pi-tools.policy-D81U5xy0.js +0 -200
- package/dist/pi-tools.policy-DSHkkb5b.js +0 -200
- package/dist/plugin-auto-enable-CxF4bpDN.js +0 -282
- package/dist/plugin-auto-enable-jNaAeyEh.js +0 -282
- package/dist/plugin-registry-C7XWotZG.js +0 -32
- package/dist/plugin-registry-DcUCbGax.js +0 -32
- package/dist/plugins-B362e77G.js +0 -168
- package/dist/plugins-CmSUIUNi.js +0 -38
- package/dist/plugins-cli-BsCEnoQ7.js +0 -734
- package/dist/plugins-cli-QSIsMUG7.js +0 -736
- package/dist/polls-CItfB1H8.js +0 -1343
- package/dist/ports-BVLMN1Sr.js +0 -96
- package/dist/ports-CqLSlU6Z.js +0 -317
- package/dist/ports-D94CwCrv.js +0 -344
- package/dist/ports-D_NHthOz.js +0 -96
- package/dist/program-DkJHjI0R.js +0 -176
- package/dist/program-context-DnyGM2SC.js +0 -496
- package/dist/progress-Bek_GyWS.js +0 -133
- package/dist/prompt-style-lu0clOOE.js +0 -9
- package/dist/pw-ai-BLVMuSLv.js +0 -1867
- package/dist/pw-ai-DZJWEF_f.js +0 -1865
- package/dist/pw-ai-dzf-ptcn.js +0 -1868
- package/dist/qmd-manager-Cur_Ekn0.js +0 -937
- package/dist/qmd-manager-DNAUuwjK.js +0 -938
- package/dist/qmd-manager-DepEoASu.js +0 -935
- package/dist/register.agent-CSWvzOkR.js +0 -265
- package/dist/register.agent-UeH2NXmH.js +0 -1003
- package/dist/register.anima-DOdee0dh.js +0 -193
- package/dist/register.anima-HHDWsz6r.js +0 -193
- package/dist/register.configure-CSJFxdz9.js +0 -103
- package/dist/register.configure-D84Fvcz4.js +0 -101
- package/dist/register.maintenance-B3pvNbZb.js +0 -543
- package/dist/register.maintenance-BKVOwkw6.js +0 -543
- package/dist/register.message-BAO6CPl2.js +0 -657
- package/dist/register.message-OXoOKE_6.js +0 -660
- package/dist/register.onboard-BK_ixVmD.js +0 -170
- package/dist/register.onboard-cfCaPx6j.js +0 -170
- package/dist/register.setup-BGfDnzph.js +0 -175
- package/dist/register.setup-Y-Q74M-0.js +0 -175
- package/dist/register.status-health-sessions-CT14eitH.js +0 -142
- package/dist/register.status-health-sessions-TfZMzAUn.js +0 -313
- package/dist/register.subclis-BZwdlNHC.js +0 -255
- package/dist/reply-mlsExaZm.js +0 -32212
- package/dist/reply-prefix-B0CfR4bM.js +0 -100
- package/dist/reply-prefix-w4a39ybC.js +0 -100
- package/dist/reply-qalRISe_.js +0 -32212
- package/dist/routes-CENsHJyg.js +0 -1820
- package/dist/routes-DO0HqW2e.js +0 -1820
- package/dist/rpc-C0pjNhBi.js +0 -70
- package/dist/rpc-DZ44PIXE.js +0 -70
- package/dist/run-main-BMpKw8Mp.js +0 -371
- package/dist/runtime-guard-BSUFiAQV.js +0 -60
- package/dist/sandbox-BIGfMYEI.js +0 -858
- package/dist/sandbox-DxP3IpUP.js +0 -859
- package/dist/sandbox-cli-DtLGH8sL.js +0 -461
- package/dist/sandbox-cli-_Tg7lfJ_.js +0 -458
- package/dist/security-cli-BRwgbedo.js +0 -462
- package/dist/security-cli-D3bSuyZt.js +0 -465
- package/dist/server-context-49XFFxFg.js +0 -824
- package/dist/server-context-LrlgrZzS.js +0 -824
- package/dist/server-node-events-Dm52i7NW.js +0 -231
- package/dist/server-node-events-QX523UyF.js +0 -233
- package/dist/service-BNVpYcQe.js +0 -642
- package/dist/service-D56aMXUB.js +0 -642
- package/dist/service-audit-D0X_XAB2.js +0 -488
- package/dist/service-audit-qmf6XMmP.js +0 -488
- package/dist/session-CrQQLLhx.js +0 -179
- package/dist/session-LocsOOWJ.js +0 -181
- package/dist/session-Vlce2BAT.js +0 -181
- package/dist/session-cost-usage-BwiTZuKl.js +0 -600
- package/dist/session-cost-usage-DT9YNXTJ.js +0 -600
- package/dist/sessions-BfV53TbG.js +0 -1296
- package/dist/sessions-BimpX_km.js +0 -180
- package/dist/sessions-DcXpzig0.js +0 -1296
- package/dist/sessions-Wd18dukK.js +0 -2038
- package/dist/shared-Bsr69u_7.js +0 -77
- package/dist/shared-Cgly1vPb.js +0 -66
- package/dist/shared-JOo05hST.js +0 -66
- package/dist/shared-f7dvQsi7.js +0 -77
- package/dist/skill-scanner-CkaVLABv.js +0 -263
- package/dist/skills-B-G7UHOa.js +0 -808
- package/dist/skills-B5LQx4lT.js +0 -807
- package/dist/skills-cli-DUGe2ZWW.js +0 -286
- package/dist/skills-cli-DtOk0bvK.js +0 -289
- package/dist/skills-status-Clq9ZnYu.js +0 -166
- package/dist/skills-status-JQluhU-P.js +0 -166
- package/dist/sqlite-BukcjdJa.js +0 -321
- package/dist/sqlite-CGcOZZ0C.js +0 -368
- package/dist/sqlite-Ck6f9KWc.js +0 -453
- package/dist/start--xmSFepB.js +0 -372
- package/dist/start-BdlZbqrr.js +0 -371
- package/dist/status-BgoeFm6g.js +0 -2137
- package/dist/status-BjjDrUq7.js +0 -27
- package/dist/status-Ct0DgOZ-.js +0 -2132
- package/dist/status-RA_uNmK0.js +0 -27
- package/dist/status.update-BjOH3GlS.js +0 -79
- package/dist/status.update-DLU1qBf0.js +0 -79
- package/dist/subagent-registry-9RLdKxES.js +0 -2760
- package/dist/subagent-registry-Byuex3zp.js +0 -2759
- package/dist/subagent-registry-DOBunBYS.js +0 -14
- package/dist/subsystem-Dowf8fSU.js +0 -860
- package/dist/system-cli-C5oBpzni.js +0 -79
- package/dist/system-cli-DXNKD_Id.js +0 -82
- package/dist/systemd-BSrHDyeU.js +0 -452
- package/dist/systemd-By5xdSB4.js +0 -452
- package/dist/systemd-hints-BtjL_5Rh.js +0 -36
- package/dist/systemd-hints-sJmr6cjb.js +0 -36
- package/dist/systemd-linger-CTmV2Gci.js +0 -75
- package/dist/systemd-linger-CmyqQkeC.js +0 -75
- package/dist/table-BL0lJzsm.js +0 -279
- package/dist/table-DoiRPsn0.js +0 -279
- package/dist/timeout-CswI_K-U.js +0 -232
- package/dist/tokens-C-X7wDKj.js +0 -14
- package/dist/tokens-DkvqA72p.js +0 -14
- package/dist/trash-BJLK1vMn.js +0 -23
- package/dist/trash-_x5UZ94k.js +0 -23
- package/dist/tui-BHjxDFZC.js +0 -3894
- package/dist/tui-CgOocwN8.js +0 -3894
- package/dist/tui-cli-5ANH8dE5.js +0 -47
- package/dist/tui-cli-BQ4P-JW_.js +0 -50
- package/dist/update-LFgxHHPd.js +0 -317
- package/dist/update-TxptCqk7.js +0 -317
- package/dist/update-check-CWc7YXmc.js +0 -400
- package/dist/update-check-IhlWaui6.js +0 -400
- package/dist/update-cli-PtXU62w7.js +0 -1105
- package/dist/update-cli-Va0EtETG.js +0 -1105
- package/dist/update-runner-BLeKFkiB.js +0 -894
- package/dist/update-runner-Iuzpc-_y.js +0 -894
- package/dist/usage-ApGvBLVg.js +0 -4516
- package/dist/utils-Bsw__U-F.js +0 -243
- package/dist/web-B6_Ky60G.js +0 -63
- package/dist/web-EZLQEWXY.js +0 -46842
- package/dist/web-pec8YJUX.js +0 -2203
- package/dist/webhooks-cli-BYQKTHTp.js +0 -319
- package/dist/webhooks-cli-C2_xtsUQ.js +0 -316
- package/dist/whatsapp-actions-C72VCq8f.js +0 -49
- package/dist/whatsapp-actions-Ck9Uv0Nw.js +0 -45
- package/dist/whatsapp-actions-D0reTj2k.js +0 -53
- package/dist/widearea-dns-B6ocX23x.js +0 -127
- package/dist/widearea-dns-NsEUNYwz.js +0 -127
- package/dist/workspace-Dcfoy5JJ.js +0 -649
- package/dist/ws-log-N8R5MvGE.js +0 -267
- package/dist/ws-log-gwFxPxj5.js +0 -267
- /package/dist/{auto-update-CUeF99gI.js → auto-update-CpF0fycd.js} +0 -0
- /package/dist/{auto-update-cgkp9ZTJ.js → auto-update-DNWdO7uF.js} +0 -0
- /package/dist/{brew-CVZkr0GU.js → brew-nqf_MiE4.js} +0 -0
- /package/dist/{budget-DxYQSekw.js → budget-CPedI-qW.js} +0 -0
- /package/dist/{budget-BWBp8Res.js → budget-CRpvqDRX.js} +0 -0
- /package/dist/{cli-utils-DtAxdCte.js → cli-utils-C1YHVD4o.js} +0 -0
- /package/dist/{command-options-CSbuuqHr.js → command-options-BbponVnw.js} +0 -0
- /package/dist/{command-options-Cp1tf96a.js → command-options-s0gnvXnS.js} +0 -0
- /package/dist/{constants-O8yBqCBv.js → constants-Dhb6zSIV.js} +0 -0
- /package/dist/{dangerous-tools-5ObDWy1N.js → dangerous-tools-DGTtJ_JR.js} +0 -0
- /package/dist/{dangerous-tools-Jwr7jqNw.js → dangerous-tools-DxrfTOfT.js} +0 -0
- /package/dist/{delivery-queue-B6IHz4Ry.js → delivery-queue-Bxm0nzw7.js} +0 -0
- /package/dist/{display-BDOsXu8F.js → display-Jy3UdGzA.js} +0 -0
- /package/dist/{errors-CHow2wtt.js → errors-CKaCqKga.js} +0 -0
- /package/dist/{exec-BizYYQgP.js → exec-DDmuVVNq.js} +0 -0
- /package/dist/{format-Mq6iU0_5.js → format-ByEjgyTF.js} +0 -0
- /package/dist/{format-duration-DhWzz_5b.js → format-duration-Aaj5tjJd.js} +0 -0
- /package/dist/{format-relative-C6kUHuOj.js → format-relative-79_Y1n2Y.js} +0 -0
- /package/dist/{help-format-DUBI91Ti.js → help-format-BMKzarov.js} +0 -0
- /package/dist/{helpers-eJFa4K6r.js → helpers-DpEB9Mh0.js} +0 -0
- /package/dist/{helpers-DLgbkcEn.js → helpers-FMld9sBT.js} +0 -0
- /package/dist/{input-provenance-DJBdpeKk.js → input-provenance-Cy_KnBlP.js} +0 -0
- /package/dist/{is-main-Dt9DTcH1.js → is-main-yjaVwMtJ.js} +0 -0
- /package/dist/{loader-l2OBdJ8x.js → loader-Br7Vr0zn.js} +0 -0
- /package/dist/{loader-BoYxRfcW.js → loader-CkmOrXcC.js} +0 -0
- /package/dist/{logging-BdnOSVPD.js → logging-CY-Q5cwf.js} +0 -0
- /package/dist/{message-channel-w4F2b2F6.js → message-channel-dua8OOGJ.js} +0 -0
- /package/dist/{mime-B1ZoR53M.js → mime-CBg4KybI.js} +0 -0
- /package/dist/{model-param-b-DPwyNGn8.js → model-param-b-DW9f0NN8.js} +0 -0
- /package/dist/{node-match-8XZnaid6.js → node-match-BV8bTBd4.js} +0 -0
- /package/dist/{normalize-GDK8JTNW.js → normalize-_lmlBOW9.js} +0 -0
- /package/dist/{openclaw-root-C85WMnVV.js → openclaw-root-JPvmPTf7.js} +0 -0
- /package/dist/{outbound-send-deps-ANnAhImn.js → outbound-send-deps-BfUvuWGa.js} +0 -0
- /package/dist/{parse-6-2MDhdT.js → parse-CZRwKocn.js} +0 -0
- /package/dist/{parse-log-line-Bqh1SSzC.js → parse-log-line-CvrZEK6A.js} +0 -0
- /package/dist/{parse-log-line-DUZCjXbl.js → parse-log-line-mLdat0AH.js} +0 -0
- /package/dist/{parse-port-BKB9Exlg.js → parse-port-BSOOdo7I.js} +0 -0
- /package/dist/{parse-port-DrfvwwiL.js → parse-port-Y0NK62x1.js} +0 -0
- /package/dist/{parse-timeout-Di_tcEmi.js → parse-timeout-DVPQ3n9j.js} +0 -0
- /package/dist/{paths-DcVEkYX5.js → paths-DHjlJ6cn.js} +0 -0
- /package/dist/{pi-model-discovery-DsRqYJLy.js → pi-model-discovery-DzEIEgHL.js} +0 -0
- /package/dist/{plugins-CDJw924T.js → plugins-D6PBOdkn.js} +0 -0
- /package/dist/{program-context-Bvn8046-.js → program-context-Q1hkT73c.js} +0 -0
- /package/dist/{progress-CbZ2D53A.js → progress-C9Ha1NJh.js} +0 -0
- /package/dist/{prompt-style-DKy6qQxR.js → prompt-style-DQi8j03a.js} +0 -0
- /package/dist/{prompts-BI__va99.js → prompts-BEHxUC3w.js} +0 -0
- /package/dist/{prompts-_dDWkCAz.js → prompts-CSOhuiqe.js} +0 -0
- /package/dist/{queue-D_u34pbL.js → queue-BJGo7kAB.js} +0 -0
- /package/dist/{queue-PG591iID.js → queue-DYgUbdoq.js} +0 -0
- /package/dist/{redact-ClVwO7Nn.js → redact-CyKvdFrg.js} +0 -0
- /package/dist/{registry-Bs_DJK9E.js → registry-C5MAYD4V.js} +0 -0
- /package/dist/{registry-D_zlP1U-.js → registry-CRrXXVs0.js} +0 -0
- /package/dist/{requirements-BzZxj2Wu.js → requirements-CGkxTCu4.js} +0 -0
- /package/dist/{requirements-DIW1svgA.js → requirements-CIDaOcbO.js} +0 -0
- /package/dist/{runtime-guard-DeOXA_86.js → runtime-guard-nL3Lp8T-.js} +0 -0
- /package/dist/{secret-equal-Dghy3xsA.js → secret-equal-DJpmLXlG.js} +0 -0
- /package/dist/{send-BhAfdGII.js → send-CTcxgDDU.js} +0 -0
- /package/dist/{send-ga9udK1_.js → send-DPezUR3-.js} +0 -0
- /package/dist/{send-C2t9xpXI.js → send-DZQTaG7-.js} +0 -0
- /package/dist/{send-DigO-i9j.js → send-VDff2gra.js} +0 -0
- /package/dist/{send-Dz2BDHll.js → send-bgQNV8d1.js} +0 -0
- /package/dist/{session-key-BGiG_JcT.js → session-key-CQT-NR6w.js} +0 -0
- /package/dist/{shell-argv-CAq1mLa2.js → shell-argv-n9IueeJQ.js} +0 -0
- /package/dist/{skill-scanner-Coo4QoCd.js → skill-scanner-o6NgVMD9.js} +0 -0
- /package/dist/{status-CMnlcBVc.js → status-C53kTIXF.js} +0 -0
- /package/dist/{status-tDZPwewW.js → status-CZDDA_Sy.js} +0 -0
- /package/dist/{system-run-command-X9lDJIy0.js → system-run-command-BCjUffN9.js} +0 -0
- /package/dist/{system-run-command-DGk7dwQP.js → system-run-command-CqAqKL9K.js} +0 -0
- /package/dist/{tailnet-CuiNECdL.js → tailnet-Ciwjv243.js} +0 -0
- /package/dist/{templates-CeYJjVzw.js → templates-37RKpACb.js} +0 -0
- /package/dist/{templates-I3Z0xplD.js → templates-DPalk30o.js} +0 -0
- /package/dist/{thinking-BXEswx1X.js → thinking-2hxwmvTl.js} +0 -0
- /package/dist/{transcript-events-C1hdue6u.js → transcript-events-Bp7fGnwv.js} +0 -0
- /package/dist/{transcript-tools-DuyYOkUq.js → transcript-tools-D4Lbxlka.js} +0 -0
- /package/dist/{usage-format-BAirWUSO.js → usage-format-6Uar63S0.js} +0 -0
- /package/dist/{utils-C9sj30YY.js → utils-DT8uXjFS.js} +0 -0
- /package/dist/{wsl-CqyuRvtM.js → wsl-CrPvx2kZ.js} +0 -0
- /package/dist/{wsl-ymJYvc9Q.js → wsl-UvJ5dHah.js} +0 -0
package/dist/polls-CItfB1H8.js
DELETED
|
@@ -1,1343 +0,0 @@
|
|
|
1
|
-
import { r as STATE_DIR } from "./paths-C6VCWKo3.js";
|
|
2
|
-
import { F as shouldLogVerbose, M as logVerbose } from "./subsystem-Dowf8fSU.js";
|
|
3
|
-
import { b as resolveUserPath } from "./utils-Bsw__U-F.js";
|
|
4
|
-
import { t as DEFAULT_ACCOUNT_ID } from "./session-key-DxcgHezu.js";
|
|
5
|
-
import { c as logWarn } from "./exec-Bv3pyjeM.js";
|
|
6
|
-
import { t as formatCliCommand } from "./command-format-DELazozB.js";
|
|
7
|
-
import { a as resizeToJpeg, c as createPinnedDispatcher, d as resolvePinnedHostnameWithPolicy, i as optimizeImageToPng, o as SsrFBlockedError, r as hasAlphaChannel, s as closeDispatcher, t as convertHeicToJpeg } from "./image-ops-omlvdfah.js";
|
|
8
|
-
import { c as maxBytesForKind, l as mediaKindFromMime, n as extensionForMime, t as detectMime } from "./mime-C1RlpUSs.js";
|
|
9
|
-
import { fileURLToPath } from "node:url";
|
|
10
|
-
import os from "node:os";
|
|
11
|
-
import path from "node:path";
|
|
12
|
-
import fs from "node:fs/promises";
|
|
13
|
-
import MarkdownIt from "markdown-it";
|
|
14
|
-
|
|
15
|
-
//#region src/utils/fetch-timeout.ts
|
|
16
|
-
/**
|
|
17
|
-
* Relay abort without forwarding the Event argument as the abort reason.
|
|
18
|
-
* Using .bind() avoids closure scope capture (memory leak prevention).
|
|
19
|
-
*/
|
|
20
|
-
function relayAbort() {
|
|
21
|
-
this.abort();
|
|
22
|
-
}
|
|
23
|
-
/** Returns a bound abort relay for use as an event listener. */
|
|
24
|
-
function bindAbortRelay(controller) {
|
|
25
|
-
return relayAbort.bind(controller);
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Fetch wrapper that adds timeout support via AbortController.
|
|
29
|
-
*
|
|
30
|
-
* @param url - The URL to fetch
|
|
31
|
-
* @param init - RequestInit options (headers, method, body, etc.)
|
|
32
|
-
* @param timeoutMs - Timeout in milliseconds
|
|
33
|
-
* @param fetchFn - The fetch implementation to use (defaults to global fetch)
|
|
34
|
-
* @returns The fetch Response
|
|
35
|
-
* @throws AbortError if the request times out
|
|
36
|
-
*/
|
|
37
|
-
async function fetchWithTimeout(url, init, timeoutMs, fetchFn = fetch) {
|
|
38
|
-
const controller = new AbortController();
|
|
39
|
-
const timer = setTimeout(controller.abort.bind(controller), Math.max(1, timeoutMs));
|
|
40
|
-
try {
|
|
41
|
-
return await fetchFn(url, {
|
|
42
|
-
...init,
|
|
43
|
-
signal: controller.signal
|
|
44
|
-
});
|
|
45
|
-
} finally {
|
|
46
|
-
clearTimeout(timer);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
//#endregion
|
|
51
|
-
//#region src/infra/net/fetch-guard.ts
|
|
52
|
-
const DEFAULT_MAX_REDIRECTS = 3;
|
|
53
|
-
function isRedirectStatus(status) {
|
|
54
|
-
return status === 301 || status === 302 || status === 303 || status === 307 || status === 308;
|
|
55
|
-
}
|
|
56
|
-
function buildAbortSignal(params) {
|
|
57
|
-
const { timeoutMs, signal } = params;
|
|
58
|
-
if (!timeoutMs && !signal) return {
|
|
59
|
-
signal: void 0,
|
|
60
|
-
cleanup: () => {}
|
|
61
|
-
};
|
|
62
|
-
if (!timeoutMs) return {
|
|
63
|
-
signal,
|
|
64
|
-
cleanup: () => {}
|
|
65
|
-
};
|
|
66
|
-
const controller = new AbortController();
|
|
67
|
-
const timeoutId = setTimeout(controller.abort.bind(controller), timeoutMs);
|
|
68
|
-
const onAbort = bindAbortRelay(controller);
|
|
69
|
-
if (signal) if (signal.aborted) controller.abort();
|
|
70
|
-
else signal.addEventListener("abort", onAbort, { once: true });
|
|
71
|
-
const cleanup = () => {
|
|
72
|
-
clearTimeout(timeoutId);
|
|
73
|
-
if (signal) signal.removeEventListener("abort", onAbort);
|
|
74
|
-
};
|
|
75
|
-
return {
|
|
76
|
-
signal: controller.signal,
|
|
77
|
-
cleanup
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
async function fetchWithSsrFGuard(params) {
|
|
81
|
-
const fetcher = params.fetchImpl ?? globalThis.fetch;
|
|
82
|
-
if (!fetcher) throw new Error("fetch is not available");
|
|
83
|
-
const maxRedirects = typeof params.maxRedirects === "number" && Number.isFinite(params.maxRedirects) ? Math.max(0, Math.floor(params.maxRedirects)) : DEFAULT_MAX_REDIRECTS;
|
|
84
|
-
const { signal, cleanup } = buildAbortSignal({
|
|
85
|
-
timeoutMs: params.timeoutMs,
|
|
86
|
-
signal: params.signal
|
|
87
|
-
});
|
|
88
|
-
let released = false;
|
|
89
|
-
const release = async (dispatcher) => {
|
|
90
|
-
if (released) return;
|
|
91
|
-
released = true;
|
|
92
|
-
cleanup();
|
|
93
|
-
await closeDispatcher(dispatcher ?? void 0);
|
|
94
|
-
};
|
|
95
|
-
const visited = /* @__PURE__ */ new Set();
|
|
96
|
-
let currentUrl = params.url;
|
|
97
|
-
let redirectCount = 0;
|
|
98
|
-
while (true) {
|
|
99
|
-
let parsedUrl;
|
|
100
|
-
try {
|
|
101
|
-
parsedUrl = new URL(currentUrl);
|
|
102
|
-
} catch {
|
|
103
|
-
await release();
|
|
104
|
-
throw new Error("Invalid URL: must be http or https");
|
|
105
|
-
}
|
|
106
|
-
if (!["http:", "https:"].includes(parsedUrl.protocol)) {
|
|
107
|
-
await release();
|
|
108
|
-
throw new Error("Invalid URL: must be http or https");
|
|
109
|
-
}
|
|
110
|
-
let dispatcher = null;
|
|
111
|
-
try {
|
|
112
|
-
const pinned = await resolvePinnedHostnameWithPolicy(parsedUrl.hostname, {
|
|
113
|
-
lookupFn: params.lookupFn,
|
|
114
|
-
policy: params.policy
|
|
115
|
-
});
|
|
116
|
-
if (params.pinDns !== false) dispatcher = createPinnedDispatcher(pinned);
|
|
117
|
-
const init = {
|
|
118
|
-
...params.init ? { ...params.init } : {},
|
|
119
|
-
redirect: "manual",
|
|
120
|
-
...dispatcher ? { dispatcher } : {},
|
|
121
|
-
...signal ? { signal } : {}
|
|
122
|
-
};
|
|
123
|
-
const response = await fetcher(parsedUrl.toString(), init);
|
|
124
|
-
if (isRedirectStatus(response.status)) {
|
|
125
|
-
const location = response.headers.get("location");
|
|
126
|
-
if (!location) {
|
|
127
|
-
await release(dispatcher);
|
|
128
|
-
throw new Error(`Redirect missing location header (${response.status})`);
|
|
129
|
-
}
|
|
130
|
-
redirectCount += 1;
|
|
131
|
-
if (redirectCount > maxRedirects) {
|
|
132
|
-
await release(dispatcher);
|
|
133
|
-
throw new Error(`Too many redirects (limit: ${maxRedirects})`);
|
|
134
|
-
}
|
|
135
|
-
const nextUrl = new URL(location, parsedUrl).toString();
|
|
136
|
-
if (visited.has(nextUrl)) {
|
|
137
|
-
await release(dispatcher);
|
|
138
|
-
throw new Error("Redirect loop detected");
|
|
139
|
-
}
|
|
140
|
-
visited.add(nextUrl);
|
|
141
|
-
response.body?.cancel();
|
|
142
|
-
await closeDispatcher(dispatcher);
|
|
143
|
-
currentUrl = nextUrl;
|
|
144
|
-
continue;
|
|
145
|
-
}
|
|
146
|
-
return {
|
|
147
|
-
response,
|
|
148
|
-
finalUrl: currentUrl,
|
|
149
|
-
release: async () => release(dispatcher)
|
|
150
|
-
};
|
|
151
|
-
} catch (err) {
|
|
152
|
-
if (err instanceof SsrFBlockedError) logWarn(`security: blocked URL fetch (${params.auditContext ?? "url-fetch"}) target=${parsedUrl.origin}${parsedUrl.pathname} reason=${err.message}`);
|
|
153
|
-
await release(dispatcher);
|
|
154
|
-
throw err;
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
//#endregion
|
|
160
|
-
//#region src/media/read-response-with-limit.ts
|
|
161
|
-
async function readResponseWithLimit(res, maxBytes, opts) {
|
|
162
|
-
const onOverflow = opts?.onOverflow ?? ((params) => /* @__PURE__ */ new Error(`Content too large: ${params.size} bytes (limit: ${params.maxBytes} bytes)`));
|
|
163
|
-
const body = res.body;
|
|
164
|
-
if (!body || typeof body.getReader !== "function") {
|
|
165
|
-
const fallback = Buffer.from(await res.arrayBuffer());
|
|
166
|
-
if (fallback.length > maxBytes) throw onOverflow({
|
|
167
|
-
size: fallback.length,
|
|
168
|
-
maxBytes,
|
|
169
|
-
res
|
|
170
|
-
});
|
|
171
|
-
return fallback;
|
|
172
|
-
}
|
|
173
|
-
const reader = body.getReader();
|
|
174
|
-
const chunks = [];
|
|
175
|
-
let total = 0;
|
|
176
|
-
try {
|
|
177
|
-
while (true) {
|
|
178
|
-
const { done, value } = await reader.read();
|
|
179
|
-
if (done) break;
|
|
180
|
-
if (value?.length) {
|
|
181
|
-
total += value.length;
|
|
182
|
-
if (total > maxBytes) {
|
|
183
|
-
try {
|
|
184
|
-
await reader.cancel();
|
|
185
|
-
} catch {}
|
|
186
|
-
throw onOverflow({
|
|
187
|
-
size: total,
|
|
188
|
-
maxBytes,
|
|
189
|
-
res
|
|
190
|
-
});
|
|
191
|
-
}
|
|
192
|
-
chunks.push(value);
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
} finally {
|
|
196
|
-
try {
|
|
197
|
-
reader.releaseLock();
|
|
198
|
-
} catch {}
|
|
199
|
-
}
|
|
200
|
-
return Buffer.concat(chunks.map((chunk) => Buffer.from(chunk)), total);
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
//#endregion
|
|
204
|
-
//#region src/media/fetch.ts
|
|
205
|
-
var MediaFetchError = class extends Error {
|
|
206
|
-
constructor(code, message) {
|
|
207
|
-
super(message);
|
|
208
|
-
this.code = code;
|
|
209
|
-
this.name = "MediaFetchError";
|
|
210
|
-
}
|
|
211
|
-
};
|
|
212
|
-
function stripQuotes(value) {
|
|
213
|
-
return value.replace(/^["']|["']$/g, "");
|
|
214
|
-
}
|
|
215
|
-
function parseContentDispositionFileName(header) {
|
|
216
|
-
if (!header) return;
|
|
217
|
-
const starMatch = /filename\*\s*=\s*([^;]+)/i.exec(header);
|
|
218
|
-
if (starMatch?.[1]) {
|
|
219
|
-
const cleaned = stripQuotes(starMatch[1].trim());
|
|
220
|
-
const encoded = cleaned.split("''").slice(1).join("''") || cleaned;
|
|
221
|
-
try {
|
|
222
|
-
return path.basename(decodeURIComponent(encoded));
|
|
223
|
-
} catch {
|
|
224
|
-
return path.basename(encoded);
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
const match = /filename\s*=\s*([^;]+)/i.exec(header);
|
|
228
|
-
if (match?.[1]) return path.basename(stripQuotes(match[1].trim()));
|
|
229
|
-
}
|
|
230
|
-
async function readErrorBodySnippet(res, maxChars = 200) {
|
|
231
|
-
try {
|
|
232
|
-
const text = await res.text();
|
|
233
|
-
if (!text) return;
|
|
234
|
-
const collapsed = text.replace(/\s+/g, " ").trim();
|
|
235
|
-
if (!collapsed) return;
|
|
236
|
-
if (collapsed.length <= maxChars) return collapsed;
|
|
237
|
-
return `${collapsed.slice(0, maxChars)}…`;
|
|
238
|
-
} catch {
|
|
239
|
-
return;
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
async function fetchRemoteMedia(options) {
|
|
243
|
-
const { url, fetchImpl, filePathHint, maxBytes, maxRedirects, ssrfPolicy, lookupFn } = options;
|
|
244
|
-
let res;
|
|
245
|
-
let finalUrl = url;
|
|
246
|
-
let release = null;
|
|
247
|
-
try {
|
|
248
|
-
const result = await fetchWithSsrFGuard({
|
|
249
|
-
url,
|
|
250
|
-
fetchImpl,
|
|
251
|
-
maxRedirects,
|
|
252
|
-
policy: ssrfPolicy,
|
|
253
|
-
lookupFn
|
|
254
|
-
});
|
|
255
|
-
res = result.response;
|
|
256
|
-
finalUrl = result.finalUrl;
|
|
257
|
-
release = result.release;
|
|
258
|
-
} catch (err) {
|
|
259
|
-
throw new MediaFetchError("fetch_failed", `Failed to fetch media from ${url}: ${String(err)}`);
|
|
260
|
-
}
|
|
261
|
-
try {
|
|
262
|
-
if (!res.ok) {
|
|
263
|
-
const statusText = res.statusText ? ` ${res.statusText}` : "";
|
|
264
|
-
const redirected = finalUrl !== url ? ` (redirected to ${finalUrl})` : "";
|
|
265
|
-
let detail = `HTTP ${res.status}${statusText}`;
|
|
266
|
-
if (!res.body) detail = `HTTP ${res.status}${statusText}; empty response body`;
|
|
267
|
-
else {
|
|
268
|
-
const snippet = await readErrorBodySnippet(res);
|
|
269
|
-
if (snippet) detail += `; body: ${snippet}`;
|
|
270
|
-
}
|
|
271
|
-
throw new MediaFetchError("http_error", `Failed to fetch media from ${url}${redirected}: ${detail}`);
|
|
272
|
-
}
|
|
273
|
-
const contentLength = res.headers.get("content-length");
|
|
274
|
-
if (maxBytes && contentLength) {
|
|
275
|
-
const length = Number(contentLength);
|
|
276
|
-
if (Number.isFinite(length) && length > maxBytes) throw new MediaFetchError("max_bytes", `Failed to fetch media from ${url}: content length ${length} exceeds maxBytes ${maxBytes}`);
|
|
277
|
-
}
|
|
278
|
-
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());
|
|
279
|
-
let fileNameFromUrl;
|
|
280
|
-
try {
|
|
281
|
-
const parsed = new URL(finalUrl);
|
|
282
|
-
fileNameFromUrl = path.basename(parsed.pathname) || void 0;
|
|
283
|
-
} catch {}
|
|
284
|
-
const headerFileName = parseContentDispositionFileName(res.headers.get("content-disposition"));
|
|
285
|
-
let fileName = headerFileName || fileNameFromUrl || (filePathHint ? path.basename(filePathHint) : void 0);
|
|
286
|
-
const filePathForMime = headerFileName && path.extname(headerFileName) ? headerFileName : filePathHint ?? finalUrl;
|
|
287
|
-
const contentType = await detectMime({
|
|
288
|
-
buffer,
|
|
289
|
-
headerMime: res.headers.get("content-type"),
|
|
290
|
-
filePath: filePathForMime
|
|
291
|
-
});
|
|
292
|
-
if (fileName && !path.extname(fileName) && contentType) {
|
|
293
|
-
const ext = extensionForMime(contentType);
|
|
294
|
-
if (ext) fileName = `${fileName}${ext}`;
|
|
295
|
-
}
|
|
296
|
-
return {
|
|
297
|
-
buffer,
|
|
298
|
-
contentType: contentType ?? void 0,
|
|
299
|
-
fileName
|
|
300
|
-
};
|
|
301
|
-
} finally {
|
|
302
|
-
if (release) await release();
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
|
|
306
|
-
//#endregion
|
|
307
|
-
//#region src/markdown/ir.ts
|
|
308
|
-
function createMarkdownIt(options) {
|
|
309
|
-
const md = new MarkdownIt({
|
|
310
|
-
html: false,
|
|
311
|
-
linkify: options.linkify ?? true,
|
|
312
|
-
breaks: false,
|
|
313
|
-
typographer: false
|
|
314
|
-
});
|
|
315
|
-
md.enable("strikethrough");
|
|
316
|
-
if (options.tableMode && options.tableMode !== "off") md.enable("table");
|
|
317
|
-
else md.disable("table");
|
|
318
|
-
if (options.autolink === false) md.disable("autolink");
|
|
319
|
-
return md;
|
|
320
|
-
}
|
|
321
|
-
function getAttr(token, name) {
|
|
322
|
-
if (token.attrGet) return token.attrGet(name);
|
|
323
|
-
if (token.attrs) {
|
|
324
|
-
for (const [key, value] of token.attrs) if (key === name) return value;
|
|
325
|
-
}
|
|
326
|
-
return null;
|
|
327
|
-
}
|
|
328
|
-
function createTextToken(base, content) {
|
|
329
|
-
return {
|
|
330
|
-
...base,
|
|
331
|
-
type: "text",
|
|
332
|
-
content,
|
|
333
|
-
children: void 0
|
|
334
|
-
};
|
|
335
|
-
}
|
|
336
|
-
function applySpoilerTokens(tokens) {
|
|
337
|
-
for (const token of tokens) if (token.children && token.children.length > 0) token.children = injectSpoilersIntoInline(token.children);
|
|
338
|
-
}
|
|
339
|
-
function injectSpoilersIntoInline(tokens) {
|
|
340
|
-
const result = [];
|
|
341
|
-
const state = { spoilerOpen: false };
|
|
342
|
-
for (const token of tokens) {
|
|
343
|
-
if (token.type !== "text") {
|
|
344
|
-
result.push(token);
|
|
345
|
-
continue;
|
|
346
|
-
}
|
|
347
|
-
const content = token.content ?? "";
|
|
348
|
-
if (!content.includes("||")) {
|
|
349
|
-
result.push(token);
|
|
350
|
-
continue;
|
|
351
|
-
}
|
|
352
|
-
let index = 0;
|
|
353
|
-
while (index < content.length) {
|
|
354
|
-
const next = content.indexOf("||", index);
|
|
355
|
-
if (next === -1) {
|
|
356
|
-
if (index < content.length) result.push(createTextToken(token, content.slice(index)));
|
|
357
|
-
break;
|
|
358
|
-
}
|
|
359
|
-
if (next > index) result.push(createTextToken(token, content.slice(index, next)));
|
|
360
|
-
state.spoilerOpen = !state.spoilerOpen;
|
|
361
|
-
result.push({ type: state.spoilerOpen ? "spoiler_open" : "spoiler_close" });
|
|
362
|
-
index = next + 2;
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
return result;
|
|
366
|
-
}
|
|
367
|
-
function initRenderTarget() {
|
|
368
|
-
return {
|
|
369
|
-
text: "",
|
|
370
|
-
styles: [],
|
|
371
|
-
openStyles: [],
|
|
372
|
-
links: [],
|
|
373
|
-
linkStack: []
|
|
374
|
-
};
|
|
375
|
-
}
|
|
376
|
-
function resolveRenderTarget(state) {
|
|
377
|
-
return state.table?.currentCell ?? state;
|
|
378
|
-
}
|
|
379
|
-
function appendText(state, value) {
|
|
380
|
-
if (!value) return;
|
|
381
|
-
const target = resolveRenderTarget(state);
|
|
382
|
-
target.text += value;
|
|
383
|
-
}
|
|
384
|
-
function openStyle(state, style) {
|
|
385
|
-
const target = resolveRenderTarget(state);
|
|
386
|
-
target.openStyles.push({
|
|
387
|
-
style,
|
|
388
|
-
start: target.text.length
|
|
389
|
-
});
|
|
390
|
-
}
|
|
391
|
-
function closeStyle(state, style) {
|
|
392
|
-
const target = resolveRenderTarget(state);
|
|
393
|
-
for (let i = target.openStyles.length - 1; i >= 0; i -= 1) if (target.openStyles[i]?.style === style) {
|
|
394
|
-
const start = target.openStyles[i].start;
|
|
395
|
-
target.openStyles.splice(i, 1);
|
|
396
|
-
const end = target.text.length;
|
|
397
|
-
if (end > start) target.styles.push({
|
|
398
|
-
start,
|
|
399
|
-
end,
|
|
400
|
-
style
|
|
401
|
-
});
|
|
402
|
-
return;
|
|
403
|
-
}
|
|
404
|
-
}
|
|
405
|
-
function appendParagraphSeparator(state) {
|
|
406
|
-
if (state.env.listStack.length > 0) return;
|
|
407
|
-
if (state.table) return;
|
|
408
|
-
state.text += "\n\n";
|
|
409
|
-
}
|
|
410
|
-
function appendListPrefix(state) {
|
|
411
|
-
const stack = state.env.listStack;
|
|
412
|
-
const top = stack[stack.length - 1];
|
|
413
|
-
if (!top) return;
|
|
414
|
-
top.index += 1;
|
|
415
|
-
const indent = " ".repeat(Math.max(0, stack.length - 1));
|
|
416
|
-
const prefix = top.type === "ordered" ? `${top.index}. ` : "• ";
|
|
417
|
-
state.text += `${indent}${prefix}`;
|
|
418
|
-
}
|
|
419
|
-
function renderInlineCode(state, content) {
|
|
420
|
-
if (!content) return;
|
|
421
|
-
const target = resolveRenderTarget(state);
|
|
422
|
-
const start = target.text.length;
|
|
423
|
-
target.text += content;
|
|
424
|
-
target.styles.push({
|
|
425
|
-
start,
|
|
426
|
-
end: start + content.length,
|
|
427
|
-
style: "code"
|
|
428
|
-
});
|
|
429
|
-
}
|
|
430
|
-
function renderCodeBlock(state, content) {
|
|
431
|
-
let code = content ?? "";
|
|
432
|
-
if (!code.endsWith("\n")) code = `${code}\n`;
|
|
433
|
-
const target = resolveRenderTarget(state);
|
|
434
|
-
const start = target.text.length;
|
|
435
|
-
target.text += code;
|
|
436
|
-
target.styles.push({
|
|
437
|
-
start,
|
|
438
|
-
end: start + code.length,
|
|
439
|
-
style: "code_block"
|
|
440
|
-
});
|
|
441
|
-
if (state.env.listStack.length === 0) target.text += "\n";
|
|
442
|
-
}
|
|
443
|
-
function handleLinkClose(state) {
|
|
444
|
-
const target = resolveRenderTarget(state);
|
|
445
|
-
const link = target.linkStack.pop();
|
|
446
|
-
if (!link?.href) return;
|
|
447
|
-
const href = link.href.trim();
|
|
448
|
-
if (!href) return;
|
|
449
|
-
const start = link.labelStart;
|
|
450
|
-
const end = target.text.length;
|
|
451
|
-
if (end <= start) {
|
|
452
|
-
target.links.push({
|
|
453
|
-
start,
|
|
454
|
-
end,
|
|
455
|
-
href
|
|
456
|
-
});
|
|
457
|
-
return;
|
|
458
|
-
}
|
|
459
|
-
target.links.push({
|
|
460
|
-
start,
|
|
461
|
-
end,
|
|
462
|
-
href
|
|
463
|
-
});
|
|
464
|
-
}
|
|
465
|
-
function initTableState() {
|
|
466
|
-
return {
|
|
467
|
-
headers: [],
|
|
468
|
-
rows: [],
|
|
469
|
-
currentRow: [],
|
|
470
|
-
currentCell: null,
|
|
471
|
-
inHeader: false
|
|
472
|
-
};
|
|
473
|
-
}
|
|
474
|
-
function finishTableCell(cell) {
|
|
475
|
-
closeRemainingStyles(cell);
|
|
476
|
-
return {
|
|
477
|
-
text: cell.text,
|
|
478
|
-
styles: cell.styles,
|
|
479
|
-
links: cell.links
|
|
480
|
-
};
|
|
481
|
-
}
|
|
482
|
-
function trimCell(cell) {
|
|
483
|
-
const text = cell.text;
|
|
484
|
-
let start = 0;
|
|
485
|
-
let end = text.length;
|
|
486
|
-
while (start < end && /\s/.test(text[start] ?? "")) start += 1;
|
|
487
|
-
while (end > start && /\s/.test(text[end - 1] ?? "")) end -= 1;
|
|
488
|
-
if (start === 0 && end === text.length) return cell;
|
|
489
|
-
const trimmedText = text.slice(start, end);
|
|
490
|
-
const trimmedLength = trimmedText.length;
|
|
491
|
-
const trimmedStyles = [];
|
|
492
|
-
for (const span of cell.styles) {
|
|
493
|
-
const sliceStart = Math.max(0, span.start - start);
|
|
494
|
-
const sliceEnd = Math.min(trimmedLength, span.end - start);
|
|
495
|
-
if (sliceEnd > sliceStart) trimmedStyles.push({
|
|
496
|
-
start: sliceStart,
|
|
497
|
-
end: sliceEnd,
|
|
498
|
-
style: span.style
|
|
499
|
-
});
|
|
500
|
-
}
|
|
501
|
-
const trimmedLinks = [];
|
|
502
|
-
for (const span of cell.links) {
|
|
503
|
-
const sliceStart = Math.max(0, span.start - start);
|
|
504
|
-
const sliceEnd = Math.min(trimmedLength, span.end - start);
|
|
505
|
-
if (sliceEnd > sliceStart) trimmedLinks.push({
|
|
506
|
-
start: sliceStart,
|
|
507
|
-
end: sliceEnd,
|
|
508
|
-
href: span.href
|
|
509
|
-
});
|
|
510
|
-
}
|
|
511
|
-
return {
|
|
512
|
-
text: trimmedText,
|
|
513
|
-
styles: trimmedStyles,
|
|
514
|
-
links: trimmedLinks
|
|
515
|
-
};
|
|
516
|
-
}
|
|
517
|
-
function appendCell(state, cell) {
|
|
518
|
-
if (!cell.text) return;
|
|
519
|
-
const start = state.text.length;
|
|
520
|
-
state.text += cell.text;
|
|
521
|
-
for (const span of cell.styles) state.styles.push({
|
|
522
|
-
start: start + span.start,
|
|
523
|
-
end: start + span.end,
|
|
524
|
-
style: span.style
|
|
525
|
-
});
|
|
526
|
-
for (const link of cell.links) state.links.push({
|
|
527
|
-
start: start + link.start,
|
|
528
|
-
end: start + link.end,
|
|
529
|
-
href: link.href
|
|
530
|
-
});
|
|
531
|
-
}
|
|
532
|
-
function appendCellTextOnly(state, cell) {
|
|
533
|
-
if (!cell.text) return;
|
|
534
|
-
state.text += cell.text;
|
|
535
|
-
}
|
|
536
|
-
function renderTableAsBullets(state) {
|
|
537
|
-
if (!state.table) return;
|
|
538
|
-
const headers = state.table.headers.map(trimCell);
|
|
539
|
-
const rows = state.table.rows.map((row) => row.map(trimCell));
|
|
540
|
-
if (headers.length === 0 && rows.length === 0) return;
|
|
541
|
-
if (headers.length > 1 && rows.length > 0) for (const row of rows) {
|
|
542
|
-
if (row.length === 0) continue;
|
|
543
|
-
const rowLabel = row[0];
|
|
544
|
-
if (rowLabel?.text) {
|
|
545
|
-
const labelStart = state.text.length;
|
|
546
|
-
appendCell(state, rowLabel);
|
|
547
|
-
const labelEnd = state.text.length;
|
|
548
|
-
if (labelEnd > labelStart) state.styles.push({
|
|
549
|
-
start: labelStart,
|
|
550
|
-
end: labelEnd,
|
|
551
|
-
style: "bold"
|
|
552
|
-
});
|
|
553
|
-
state.text += "\n";
|
|
554
|
-
}
|
|
555
|
-
for (let i = 1; i < row.length; i++) {
|
|
556
|
-
const header = headers[i];
|
|
557
|
-
const value = row[i];
|
|
558
|
-
if (!value?.text) continue;
|
|
559
|
-
state.text += "• ";
|
|
560
|
-
if (header?.text) {
|
|
561
|
-
appendCell(state, header);
|
|
562
|
-
state.text += ": ";
|
|
563
|
-
} else state.text += `Column ${i}: `;
|
|
564
|
-
appendCell(state, value);
|
|
565
|
-
state.text += "\n";
|
|
566
|
-
}
|
|
567
|
-
state.text += "\n";
|
|
568
|
-
}
|
|
569
|
-
else for (const row of rows) {
|
|
570
|
-
for (let i = 0; i < row.length; i++) {
|
|
571
|
-
const header = headers[i];
|
|
572
|
-
const value = row[i];
|
|
573
|
-
if (!value?.text) continue;
|
|
574
|
-
state.text += "• ";
|
|
575
|
-
if (header?.text) {
|
|
576
|
-
appendCell(state, header);
|
|
577
|
-
state.text += ": ";
|
|
578
|
-
}
|
|
579
|
-
appendCell(state, value);
|
|
580
|
-
state.text += "\n";
|
|
581
|
-
}
|
|
582
|
-
state.text += "\n";
|
|
583
|
-
}
|
|
584
|
-
}
|
|
585
|
-
function renderTableAsCode(state) {
|
|
586
|
-
if (!state.table) return;
|
|
587
|
-
const headers = state.table.headers.map(trimCell);
|
|
588
|
-
const rows = state.table.rows.map((row) => row.map(trimCell));
|
|
589
|
-
const columnCount = Math.max(headers.length, ...rows.map((row) => row.length));
|
|
590
|
-
if (columnCount === 0) return;
|
|
591
|
-
const widths = Array.from({ length: columnCount }, () => 0);
|
|
592
|
-
const updateWidths = (cells) => {
|
|
593
|
-
for (let i = 0; i < columnCount; i += 1) {
|
|
594
|
-
const width = cells[i]?.text.length ?? 0;
|
|
595
|
-
if (widths[i] < width) widths[i] = width;
|
|
596
|
-
}
|
|
597
|
-
};
|
|
598
|
-
updateWidths(headers);
|
|
599
|
-
for (const row of rows) updateWidths(row);
|
|
600
|
-
const codeStart = state.text.length;
|
|
601
|
-
const appendRow = (cells) => {
|
|
602
|
-
state.text += "|";
|
|
603
|
-
for (let i = 0; i < columnCount; i += 1) {
|
|
604
|
-
state.text += " ";
|
|
605
|
-
const cell = cells[i];
|
|
606
|
-
if (cell) appendCellTextOnly(state, cell);
|
|
607
|
-
const pad = widths[i] - (cell?.text.length ?? 0);
|
|
608
|
-
if (pad > 0) state.text += " ".repeat(pad);
|
|
609
|
-
state.text += " |";
|
|
610
|
-
}
|
|
611
|
-
state.text += "\n";
|
|
612
|
-
};
|
|
613
|
-
const appendDivider = () => {
|
|
614
|
-
state.text += "|";
|
|
615
|
-
for (let i = 0; i < columnCount; i += 1) {
|
|
616
|
-
const dashCount = Math.max(3, widths[i]);
|
|
617
|
-
state.text += ` ${"-".repeat(dashCount)} |`;
|
|
618
|
-
}
|
|
619
|
-
state.text += "\n";
|
|
620
|
-
};
|
|
621
|
-
appendRow(headers);
|
|
622
|
-
appendDivider();
|
|
623
|
-
for (const row of rows) appendRow(row);
|
|
624
|
-
const codeEnd = state.text.length;
|
|
625
|
-
if (codeEnd > codeStart) state.styles.push({
|
|
626
|
-
start: codeStart,
|
|
627
|
-
end: codeEnd,
|
|
628
|
-
style: "code_block"
|
|
629
|
-
});
|
|
630
|
-
if (state.env.listStack.length === 0) state.text += "\n";
|
|
631
|
-
}
|
|
632
|
-
function renderTokens(tokens, state) {
|
|
633
|
-
for (const token of tokens) switch (token.type) {
|
|
634
|
-
case "inline":
|
|
635
|
-
if (token.children) renderTokens(token.children, state);
|
|
636
|
-
break;
|
|
637
|
-
case "text":
|
|
638
|
-
appendText(state, token.content ?? "");
|
|
639
|
-
break;
|
|
640
|
-
case "em_open":
|
|
641
|
-
openStyle(state, "italic");
|
|
642
|
-
break;
|
|
643
|
-
case "em_close":
|
|
644
|
-
closeStyle(state, "italic");
|
|
645
|
-
break;
|
|
646
|
-
case "strong_open":
|
|
647
|
-
openStyle(state, "bold");
|
|
648
|
-
break;
|
|
649
|
-
case "strong_close":
|
|
650
|
-
closeStyle(state, "bold");
|
|
651
|
-
break;
|
|
652
|
-
case "s_open":
|
|
653
|
-
openStyle(state, "strikethrough");
|
|
654
|
-
break;
|
|
655
|
-
case "s_close":
|
|
656
|
-
closeStyle(state, "strikethrough");
|
|
657
|
-
break;
|
|
658
|
-
case "code_inline":
|
|
659
|
-
renderInlineCode(state, token.content ?? "");
|
|
660
|
-
break;
|
|
661
|
-
case "spoiler_open":
|
|
662
|
-
if (state.enableSpoilers) openStyle(state, "spoiler");
|
|
663
|
-
break;
|
|
664
|
-
case "spoiler_close":
|
|
665
|
-
if (state.enableSpoilers) closeStyle(state, "spoiler");
|
|
666
|
-
break;
|
|
667
|
-
case "link_open": {
|
|
668
|
-
const href = getAttr(token, "href") ?? "";
|
|
669
|
-
const target = resolveRenderTarget(state);
|
|
670
|
-
target.linkStack.push({
|
|
671
|
-
href,
|
|
672
|
-
labelStart: target.text.length
|
|
673
|
-
});
|
|
674
|
-
break;
|
|
675
|
-
}
|
|
676
|
-
case "link_close":
|
|
677
|
-
handleLinkClose(state);
|
|
678
|
-
break;
|
|
679
|
-
case "image":
|
|
680
|
-
appendText(state, token.content ?? "");
|
|
681
|
-
break;
|
|
682
|
-
case "softbreak":
|
|
683
|
-
case "hardbreak":
|
|
684
|
-
appendText(state, "\n");
|
|
685
|
-
break;
|
|
686
|
-
case "paragraph_close":
|
|
687
|
-
appendParagraphSeparator(state);
|
|
688
|
-
break;
|
|
689
|
-
case "heading_open":
|
|
690
|
-
if (state.headingStyle === "bold") openStyle(state, "bold");
|
|
691
|
-
break;
|
|
692
|
-
case "heading_close":
|
|
693
|
-
if (state.headingStyle === "bold") closeStyle(state, "bold");
|
|
694
|
-
appendParagraphSeparator(state);
|
|
695
|
-
break;
|
|
696
|
-
case "blockquote_open":
|
|
697
|
-
if (state.blockquotePrefix) state.text += state.blockquotePrefix;
|
|
698
|
-
openStyle(state, "blockquote");
|
|
699
|
-
break;
|
|
700
|
-
case "blockquote_close":
|
|
701
|
-
closeStyle(state, "blockquote");
|
|
702
|
-
break;
|
|
703
|
-
case "bullet_list_open":
|
|
704
|
-
if (state.env.listStack.length > 0) state.text += "\n";
|
|
705
|
-
state.env.listStack.push({
|
|
706
|
-
type: "bullet",
|
|
707
|
-
index: 0
|
|
708
|
-
});
|
|
709
|
-
break;
|
|
710
|
-
case "bullet_list_close":
|
|
711
|
-
state.env.listStack.pop();
|
|
712
|
-
if (state.env.listStack.length === 0) state.text += "\n";
|
|
713
|
-
break;
|
|
714
|
-
case "ordered_list_open": {
|
|
715
|
-
if (state.env.listStack.length > 0) state.text += "\n";
|
|
716
|
-
const start = Number(getAttr(token, "start") ?? "1");
|
|
717
|
-
state.env.listStack.push({
|
|
718
|
-
type: "ordered",
|
|
719
|
-
index: start - 1
|
|
720
|
-
});
|
|
721
|
-
break;
|
|
722
|
-
}
|
|
723
|
-
case "ordered_list_close":
|
|
724
|
-
state.env.listStack.pop();
|
|
725
|
-
if (state.env.listStack.length === 0) state.text += "\n";
|
|
726
|
-
break;
|
|
727
|
-
case "list_item_open":
|
|
728
|
-
appendListPrefix(state);
|
|
729
|
-
break;
|
|
730
|
-
case "list_item_close":
|
|
731
|
-
if (!state.text.endsWith("\n")) state.text += "\n";
|
|
732
|
-
break;
|
|
733
|
-
case "code_block":
|
|
734
|
-
case "fence":
|
|
735
|
-
renderCodeBlock(state, token.content ?? "");
|
|
736
|
-
break;
|
|
737
|
-
case "html_block":
|
|
738
|
-
case "html_inline":
|
|
739
|
-
appendText(state, token.content ?? "");
|
|
740
|
-
break;
|
|
741
|
-
case "table_open":
|
|
742
|
-
if (state.tableMode !== "off") {
|
|
743
|
-
state.table = initTableState();
|
|
744
|
-
state.hasTables = true;
|
|
745
|
-
}
|
|
746
|
-
break;
|
|
747
|
-
case "table_close":
|
|
748
|
-
if (state.table) {
|
|
749
|
-
if (state.tableMode === "bullets") renderTableAsBullets(state);
|
|
750
|
-
else if (state.tableMode === "code") renderTableAsCode(state);
|
|
751
|
-
}
|
|
752
|
-
state.table = null;
|
|
753
|
-
break;
|
|
754
|
-
case "thead_open":
|
|
755
|
-
if (state.table) state.table.inHeader = true;
|
|
756
|
-
break;
|
|
757
|
-
case "thead_close":
|
|
758
|
-
if (state.table) state.table.inHeader = false;
|
|
759
|
-
break;
|
|
760
|
-
case "tbody_open":
|
|
761
|
-
case "tbody_close": break;
|
|
762
|
-
case "tr_open":
|
|
763
|
-
if (state.table) state.table.currentRow = [];
|
|
764
|
-
break;
|
|
765
|
-
case "tr_close":
|
|
766
|
-
if (state.table) {
|
|
767
|
-
if (state.table.inHeader) state.table.headers = state.table.currentRow;
|
|
768
|
-
else state.table.rows.push(state.table.currentRow);
|
|
769
|
-
state.table.currentRow = [];
|
|
770
|
-
}
|
|
771
|
-
break;
|
|
772
|
-
case "th_open":
|
|
773
|
-
case "td_open":
|
|
774
|
-
if (state.table) state.table.currentCell = initRenderTarget();
|
|
775
|
-
break;
|
|
776
|
-
case "th_close":
|
|
777
|
-
case "td_close":
|
|
778
|
-
if (state.table?.currentCell) {
|
|
779
|
-
state.table.currentRow.push(finishTableCell(state.table.currentCell));
|
|
780
|
-
state.table.currentCell = null;
|
|
781
|
-
}
|
|
782
|
-
break;
|
|
783
|
-
case "hr":
|
|
784
|
-
state.text += "───\n\n";
|
|
785
|
-
break;
|
|
786
|
-
default:
|
|
787
|
-
if (token.children) renderTokens(token.children, state);
|
|
788
|
-
break;
|
|
789
|
-
}
|
|
790
|
-
}
|
|
791
|
-
function closeRemainingStyles(target) {
|
|
792
|
-
for (let i = target.openStyles.length - 1; i >= 0; i -= 1) {
|
|
793
|
-
const open = target.openStyles[i];
|
|
794
|
-
const end = target.text.length;
|
|
795
|
-
if (end > open.start) target.styles.push({
|
|
796
|
-
start: open.start,
|
|
797
|
-
end,
|
|
798
|
-
style: open.style
|
|
799
|
-
});
|
|
800
|
-
}
|
|
801
|
-
target.openStyles = [];
|
|
802
|
-
}
|
|
803
|
-
function clampStyleSpans(spans, maxLength) {
|
|
804
|
-
const clamped = [];
|
|
805
|
-
for (const span of spans) {
|
|
806
|
-
const start = Math.max(0, Math.min(span.start, maxLength));
|
|
807
|
-
const end = Math.max(start, Math.min(span.end, maxLength));
|
|
808
|
-
if (end > start) clamped.push({
|
|
809
|
-
start,
|
|
810
|
-
end,
|
|
811
|
-
style: span.style
|
|
812
|
-
});
|
|
813
|
-
}
|
|
814
|
-
return clamped;
|
|
815
|
-
}
|
|
816
|
-
function clampLinkSpans(spans, maxLength) {
|
|
817
|
-
const clamped = [];
|
|
818
|
-
for (const span of spans) {
|
|
819
|
-
const start = Math.max(0, Math.min(span.start, maxLength));
|
|
820
|
-
const end = Math.max(start, Math.min(span.end, maxLength));
|
|
821
|
-
if (end > start) clamped.push({
|
|
822
|
-
start,
|
|
823
|
-
end,
|
|
824
|
-
href: span.href
|
|
825
|
-
});
|
|
826
|
-
}
|
|
827
|
-
return clamped;
|
|
828
|
-
}
|
|
829
|
-
function mergeStyleSpans(spans) {
|
|
830
|
-
const sorted = [...spans].toSorted((a, b) => {
|
|
831
|
-
if (a.start !== b.start) return a.start - b.start;
|
|
832
|
-
if (a.end !== b.end) return a.end - b.end;
|
|
833
|
-
return a.style.localeCompare(b.style);
|
|
834
|
-
});
|
|
835
|
-
const merged = [];
|
|
836
|
-
for (const span of sorted) {
|
|
837
|
-
const prev = merged[merged.length - 1];
|
|
838
|
-
if (prev && prev.style === span.style && (span.start < prev.end || span.start === prev.end && span.style !== "blockquote")) {
|
|
839
|
-
prev.end = Math.max(prev.end, span.end);
|
|
840
|
-
continue;
|
|
841
|
-
}
|
|
842
|
-
merged.push({ ...span });
|
|
843
|
-
}
|
|
844
|
-
return merged;
|
|
845
|
-
}
|
|
846
|
-
function markdownToIRWithMeta(markdown, options = {}) {
|
|
847
|
-
const env = { listStack: [] };
|
|
848
|
-
const tokens = createMarkdownIt(options).parse(markdown ?? "", env);
|
|
849
|
-
if (options.enableSpoilers) applySpoilerTokens(tokens);
|
|
850
|
-
const tableMode = options.tableMode ?? "off";
|
|
851
|
-
const state = {
|
|
852
|
-
text: "",
|
|
853
|
-
styles: [],
|
|
854
|
-
openStyles: [],
|
|
855
|
-
links: [],
|
|
856
|
-
linkStack: [],
|
|
857
|
-
env,
|
|
858
|
-
headingStyle: options.headingStyle ?? "none",
|
|
859
|
-
blockquotePrefix: options.blockquotePrefix ?? "",
|
|
860
|
-
enableSpoilers: options.enableSpoilers ?? false,
|
|
861
|
-
tableMode,
|
|
862
|
-
table: null,
|
|
863
|
-
hasTables: false
|
|
864
|
-
};
|
|
865
|
-
renderTokens(tokens, state);
|
|
866
|
-
closeRemainingStyles(state);
|
|
867
|
-
const trimmedLength = state.text.trimEnd().length;
|
|
868
|
-
let codeBlockEnd = 0;
|
|
869
|
-
for (const span of state.styles) {
|
|
870
|
-
if (span.style !== "code_block") continue;
|
|
871
|
-
if (span.end > codeBlockEnd) codeBlockEnd = span.end;
|
|
872
|
-
}
|
|
873
|
-
const finalLength = Math.max(trimmedLength, codeBlockEnd);
|
|
874
|
-
return {
|
|
875
|
-
ir: {
|
|
876
|
-
text: finalLength === state.text.length ? state.text : state.text.slice(0, finalLength),
|
|
877
|
-
styles: mergeStyleSpans(clampStyleSpans(state.styles, finalLength)),
|
|
878
|
-
links: clampLinkSpans(state.links, finalLength)
|
|
879
|
-
},
|
|
880
|
-
hasTables: state.hasTables
|
|
881
|
-
};
|
|
882
|
-
}
|
|
883
|
-
|
|
884
|
-
//#endregion
|
|
885
|
-
//#region src/markdown/render.ts
|
|
886
|
-
const STYLE_RANK = new Map([
|
|
887
|
-
"blockquote",
|
|
888
|
-
"code_block",
|
|
889
|
-
"code",
|
|
890
|
-
"bold",
|
|
891
|
-
"italic",
|
|
892
|
-
"strikethrough",
|
|
893
|
-
"spoiler"
|
|
894
|
-
].map((style, index) => [style, index]));
|
|
895
|
-
function sortStyleSpans(spans) {
|
|
896
|
-
return [...spans].toSorted((a, b) => {
|
|
897
|
-
if (a.start !== b.start) return a.start - b.start;
|
|
898
|
-
if (a.end !== b.end) return b.end - a.end;
|
|
899
|
-
return (STYLE_RANK.get(a.style) ?? 0) - (STYLE_RANK.get(b.style) ?? 0);
|
|
900
|
-
});
|
|
901
|
-
}
|
|
902
|
-
function renderMarkdownWithMarkers(ir, options) {
|
|
903
|
-
const text = ir.text ?? "";
|
|
904
|
-
if (!text) return "";
|
|
905
|
-
const styleMarkers = options.styleMarkers;
|
|
906
|
-
const styled = sortStyleSpans(ir.styles.filter((span) => Boolean(styleMarkers[span.style])));
|
|
907
|
-
const boundaries = /* @__PURE__ */ new Set();
|
|
908
|
-
boundaries.add(0);
|
|
909
|
-
boundaries.add(text.length);
|
|
910
|
-
const startsAt = /* @__PURE__ */ new Map();
|
|
911
|
-
for (const span of styled) {
|
|
912
|
-
if (span.start === span.end) continue;
|
|
913
|
-
boundaries.add(span.start);
|
|
914
|
-
boundaries.add(span.end);
|
|
915
|
-
const bucket = startsAt.get(span.start);
|
|
916
|
-
if (bucket) bucket.push(span);
|
|
917
|
-
else startsAt.set(span.start, [span]);
|
|
918
|
-
}
|
|
919
|
-
for (const spans of startsAt.values()) spans.sort((a, b) => {
|
|
920
|
-
if (a.end !== b.end) return b.end - a.end;
|
|
921
|
-
return (STYLE_RANK.get(a.style) ?? 0) - (STYLE_RANK.get(b.style) ?? 0);
|
|
922
|
-
});
|
|
923
|
-
const linkStarts = /* @__PURE__ */ new Map();
|
|
924
|
-
if (options.buildLink) for (const link of ir.links) {
|
|
925
|
-
if (link.start === link.end) continue;
|
|
926
|
-
const rendered = options.buildLink(link, text);
|
|
927
|
-
if (!rendered) continue;
|
|
928
|
-
boundaries.add(rendered.start);
|
|
929
|
-
boundaries.add(rendered.end);
|
|
930
|
-
const openBucket = linkStarts.get(rendered.start);
|
|
931
|
-
if (openBucket) openBucket.push(rendered);
|
|
932
|
-
else linkStarts.set(rendered.start, [rendered]);
|
|
933
|
-
}
|
|
934
|
-
const points = [...boundaries].toSorted((a, b) => a - b);
|
|
935
|
-
const stack = [];
|
|
936
|
-
let out = "";
|
|
937
|
-
for (let i = 0; i < points.length; i += 1) {
|
|
938
|
-
const pos = points[i];
|
|
939
|
-
while (stack.length && stack[stack.length - 1]?.end === pos) {
|
|
940
|
-
const item = stack.pop();
|
|
941
|
-
if (item) out += item.close;
|
|
942
|
-
}
|
|
943
|
-
const openingItems = [];
|
|
944
|
-
const openingLinks = linkStarts.get(pos);
|
|
945
|
-
if (openingLinks && openingLinks.length > 0) for (const [index, link] of openingLinks.entries()) openingItems.push({
|
|
946
|
-
end: link.end,
|
|
947
|
-
open: link.open,
|
|
948
|
-
close: link.close,
|
|
949
|
-
kind: "link",
|
|
950
|
-
index
|
|
951
|
-
});
|
|
952
|
-
const openingStyles = startsAt.get(pos);
|
|
953
|
-
if (openingStyles) for (const [index, span] of openingStyles.entries()) {
|
|
954
|
-
const marker = styleMarkers[span.style];
|
|
955
|
-
if (!marker) continue;
|
|
956
|
-
openingItems.push({
|
|
957
|
-
end: span.end,
|
|
958
|
-
open: marker.open,
|
|
959
|
-
close: marker.close,
|
|
960
|
-
kind: "style",
|
|
961
|
-
style: span.style,
|
|
962
|
-
index
|
|
963
|
-
});
|
|
964
|
-
}
|
|
965
|
-
if (openingItems.length > 0) {
|
|
966
|
-
openingItems.sort((a, b) => {
|
|
967
|
-
if (a.end !== b.end) return b.end - a.end;
|
|
968
|
-
if (a.kind !== b.kind) return a.kind === "link" ? -1 : 1;
|
|
969
|
-
if (a.kind === "style" && b.kind === "style") return (STYLE_RANK.get(a.style) ?? 0) - (STYLE_RANK.get(b.style) ?? 0);
|
|
970
|
-
return a.index - b.index;
|
|
971
|
-
});
|
|
972
|
-
for (const item of openingItems) {
|
|
973
|
-
out += item.open;
|
|
974
|
-
stack.push({
|
|
975
|
-
close: item.close,
|
|
976
|
-
end: item.end
|
|
977
|
-
});
|
|
978
|
-
}
|
|
979
|
-
}
|
|
980
|
-
const next = points[i + 1];
|
|
981
|
-
if (next === void 0) break;
|
|
982
|
-
if (next > pos) out += options.escapeText(text.slice(pos, next));
|
|
983
|
-
}
|
|
984
|
-
return out;
|
|
985
|
-
}
|
|
986
|
-
|
|
987
|
-
//#endregion
|
|
988
|
-
//#region src/markdown/tables.ts
|
|
989
|
-
const MARKDOWN_STYLE_MARKERS = {
|
|
990
|
-
bold: {
|
|
991
|
-
open: "**",
|
|
992
|
-
close: "**"
|
|
993
|
-
},
|
|
994
|
-
italic: {
|
|
995
|
-
open: "_",
|
|
996
|
-
close: "_"
|
|
997
|
-
},
|
|
998
|
-
strikethrough: {
|
|
999
|
-
open: "~~",
|
|
1000
|
-
close: "~~"
|
|
1001
|
-
},
|
|
1002
|
-
code: {
|
|
1003
|
-
open: "`",
|
|
1004
|
-
close: "`"
|
|
1005
|
-
},
|
|
1006
|
-
code_block: {
|
|
1007
|
-
open: "```\n",
|
|
1008
|
-
close: "```"
|
|
1009
|
-
}
|
|
1010
|
-
};
|
|
1011
|
-
function convertMarkdownTables(markdown, mode) {
|
|
1012
|
-
if (!markdown || mode === "off") return markdown;
|
|
1013
|
-
const { ir, hasTables } = markdownToIRWithMeta(markdown, {
|
|
1014
|
-
linkify: false,
|
|
1015
|
-
autolink: false,
|
|
1016
|
-
headingStyle: "none",
|
|
1017
|
-
blockquotePrefix: "",
|
|
1018
|
-
tableMode: mode
|
|
1019
|
-
});
|
|
1020
|
-
if (!hasTables) return markdown;
|
|
1021
|
-
return renderMarkdownWithMarkers(ir, {
|
|
1022
|
-
styleMarkers: MARKDOWN_STYLE_MARKERS,
|
|
1023
|
-
escapeText: (text) => text,
|
|
1024
|
-
buildLink: (link, text) => {
|
|
1025
|
-
const href = link.href.trim();
|
|
1026
|
-
if (!href) return null;
|
|
1027
|
-
if (!text.slice(link.start, link.end)) return null;
|
|
1028
|
-
return {
|
|
1029
|
-
start: link.start,
|
|
1030
|
-
end: link.end,
|
|
1031
|
-
open: "[",
|
|
1032
|
-
close: `](${href})`
|
|
1033
|
-
};
|
|
1034
|
-
}
|
|
1035
|
-
});
|
|
1036
|
-
}
|
|
1037
|
-
|
|
1038
|
-
//#endregion
|
|
1039
|
-
//#region src/web/active-listener.ts
|
|
1040
|
-
const listeners = /* @__PURE__ */ new Map();
|
|
1041
|
-
function resolveWebAccountId(accountId) {
|
|
1042
|
-
return (accountId ?? "").trim() || DEFAULT_ACCOUNT_ID;
|
|
1043
|
-
}
|
|
1044
|
-
function requireActiveWebListener(accountId) {
|
|
1045
|
-
const id = resolveWebAccountId(accountId);
|
|
1046
|
-
const listener = listeners.get(id) ?? null;
|
|
1047
|
-
if (!listener) throw new Error(`No active WhatsApp Web listener (account: ${id}). Start the gateway, then link WhatsApp with: ${formatCliCommand(`anima channels login --channel whatsapp --account ${id}`)}.`);
|
|
1048
|
-
return {
|
|
1049
|
-
accountId: id,
|
|
1050
|
-
listener
|
|
1051
|
-
};
|
|
1052
|
-
}
|
|
1053
|
-
function setActiveWebListener(accountIdOrListener, maybeListener) {
|
|
1054
|
-
const { accountId, listener } = typeof accountIdOrListener === "string" ? {
|
|
1055
|
-
accountId: accountIdOrListener,
|
|
1056
|
-
listener: maybeListener ?? null
|
|
1057
|
-
} : {
|
|
1058
|
-
accountId: DEFAULT_ACCOUNT_ID,
|
|
1059
|
-
listener: accountIdOrListener ?? null
|
|
1060
|
-
};
|
|
1061
|
-
const id = resolveWebAccountId(accountId);
|
|
1062
|
-
if (!listener) listeners.delete(id);
|
|
1063
|
-
else listeners.set(id, listener);
|
|
1064
|
-
if (id === DEFAULT_ACCOUNT_ID) {}
|
|
1065
|
-
}
|
|
1066
|
-
function getActiveWebListener(accountId) {
|
|
1067
|
-
const id = resolveWebAccountId(accountId);
|
|
1068
|
-
return listeners.get(id) ?? null;
|
|
1069
|
-
}
|
|
1070
|
-
|
|
1071
|
-
//#endregion
|
|
1072
|
-
//#region src/web/media.ts
|
|
1073
|
-
function getDefaultLocalRoots() {
|
|
1074
|
-
return [
|
|
1075
|
-
os.tmpdir(),
|
|
1076
|
-
path.join(STATE_DIR, "media"),
|
|
1077
|
-
path.join(STATE_DIR, "agents"),
|
|
1078
|
-
path.join(STATE_DIR, "workspace"),
|
|
1079
|
-
path.join(STATE_DIR, "sandboxes")
|
|
1080
|
-
];
|
|
1081
|
-
}
|
|
1082
|
-
async function assertLocalMediaAllowed(mediaPath, localRoots) {
|
|
1083
|
-
if (localRoots === "any") return;
|
|
1084
|
-
const roots = localRoots ?? getDefaultLocalRoots();
|
|
1085
|
-
let resolved;
|
|
1086
|
-
try {
|
|
1087
|
-
resolved = await fs.realpath(mediaPath);
|
|
1088
|
-
} catch {
|
|
1089
|
-
resolved = path.resolve(mediaPath);
|
|
1090
|
-
}
|
|
1091
|
-
for (const root of roots) {
|
|
1092
|
-
let resolvedRoot;
|
|
1093
|
-
try {
|
|
1094
|
-
resolvedRoot = await fs.realpath(root);
|
|
1095
|
-
} catch {
|
|
1096
|
-
resolvedRoot = path.resolve(root);
|
|
1097
|
-
}
|
|
1098
|
-
if (resolvedRoot === path.parse(resolvedRoot).root) throw new Error(`Invalid localRoots entry (refuses filesystem root): ${root}. Pass a narrower directory.`);
|
|
1099
|
-
if (resolved === resolvedRoot || resolved.startsWith(resolvedRoot + path.sep)) return;
|
|
1100
|
-
}
|
|
1101
|
-
throw new Error(`Local media path is not under an allowed directory: ${mediaPath}`);
|
|
1102
|
-
}
|
|
1103
|
-
const HEIC_MIME_RE = /^image\/hei[cf]$/i;
|
|
1104
|
-
const HEIC_EXT_RE = /\.(heic|heif)$/i;
|
|
1105
|
-
const MB = 1024 * 1024;
|
|
1106
|
-
function formatMb(bytes, digits = 2) {
|
|
1107
|
-
return (bytes / MB).toFixed(digits);
|
|
1108
|
-
}
|
|
1109
|
-
function formatCapLimit(label, cap, size) {
|
|
1110
|
-
return `${label} exceeds ${formatMb(cap, 0)}MB limit (got ${formatMb(size)}MB)`;
|
|
1111
|
-
}
|
|
1112
|
-
function formatCapReduce(label, cap, size) {
|
|
1113
|
-
return `${label} could not be reduced below ${formatMb(cap, 0)}MB (got ${formatMb(size)}MB)`;
|
|
1114
|
-
}
|
|
1115
|
-
function isHeicSource(opts) {
|
|
1116
|
-
if (opts.contentType && HEIC_MIME_RE.test(opts.contentType.trim())) return true;
|
|
1117
|
-
if (opts.fileName && HEIC_EXT_RE.test(opts.fileName.trim())) return true;
|
|
1118
|
-
return false;
|
|
1119
|
-
}
|
|
1120
|
-
function toJpegFileName(fileName) {
|
|
1121
|
-
if (!fileName) return;
|
|
1122
|
-
const trimmed = fileName.trim();
|
|
1123
|
-
if (!trimmed) return fileName;
|
|
1124
|
-
const parsed = path.parse(trimmed);
|
|
1125
|
-
if (!parsed.ext || HEIC_EXT_RE.test(parsed.ext)) return path.format({
|
|
1126
|
-
dir: parsed.dir,
|
|
1127
|
-
name: parsed.name || trimmed,
|
|
1128
|
-
ext: ".jpg"
|
|
1129
|
-
});
|
|
1130
|
-
return path.format({
|
|
1131
|
-
dir: parsed.dir,
|
|
1132
|
-
name: parsed.name,
|
|
1133
|
-
ext: ".jpg"
|
|
1134
|
-
});
|
|
1135
|
-
}
|
|
1136
|
-
function logOptimizedImage(params) {
|
|
1137
|
-
if (!shouldLogVerbose()) return;
|
|
1138
|
-
if (params.optimized.optimizedSize >= params.originalSize) return;
|
|
1139
|
-
if (params.optimized.format === "png") {
|
|
1140
|
-
logVerbose(`Optimized PNG (preserving alpha) from ${formatMb(params.originalSize)}MB to ${formatMb(params.optimized.optimizedSize)}MB (side≤${params.optimized.resizeSide}px)`);
|
|
1141
|
-
return;
|
|
1142
|
-
}
|
|
1143
|
-
logVerbose(`Optimized media from ${formatMb(params.originalSize)}MB to ${formatMb(params.optimized.optimizedSize)}MB (side≤${params.optimized.resizeSide}px, q=${params.optimized.quality})`);
|
|
1144
|
-
}
|
|
1145
|
-
async function optimizeImageWithFallback(params) {
|
|
1146
|
-
const { buffer, cap, meta } = params;
|
|
1147
|
-
if ((meta?.contentType === "image/png" || meta?.fileName?.toLowerCase().endsWith(".png")) && await hasAlphaChannel(buffer)) {
|
|
1148
|
-
const optimized = await optimizeImageToPng(buffer, cap);
|
|
1149
|
-
if (optimized.buffer.length <= cap) return {
|
|
1150
|
-
...optimized,
|
|
1151
|
-
format: "png"
|
|
1152
|
-
};
|
|
1153
|
-
if (shouldLogVerbose()) logVerbose(`PNG with alpha still exceeds ${formatMb(cap, 0)}MB after optimization; falling back to JPEG`);
|
|
1154
|
-
}
|
|
1155
|
-
return {
|
|
1156
|
-
...await optimizeImageToJpeg(buffer, cap, meta),
|
|
1157
|
-
format: "jpeg"
|
|
1158
|
-
};
|
|
1159
|
-
}
|
|
1160
|
-
async function loadWebMediaInternal(mediaUrl, options = {}) {
|
|
1161
|
-
const { maxBytes, optimizeImages = true, ssrfPolicy, localRoots, sandboxValidated = false, readFile: readFileOverride } = options;
|
|
1162
|
-
mediaUrl = mediaUrl.replace(/^\s*MEDIA\s*:\s*/i, "");
|
|
1163
|
-
if (mediaUrl.startsWith("file://")) try {
|
|
1164
|
-
mediaUrl = fileURLToPath(mediaUrl);
|
|
1165
|
-
} catch {
|
|
1166
|
-
throw new Error(`Invalid file:// URL: ${mediaUrl}`);
|
|
1167
|
-
}
|
|
1168
|
-
const optimizeAndClampImage = async (buffer, cap, meta) => {
|
|
1169
|
-
const originalSize = buffer.length;
|
|
1170
|
-
const optimized = await optimizeImageWithFallback({
|
|
1171
|
-
buffer,
|
|
1172
|
-
cap,
|
|
1173
|
-
meta
|
|
1174
|
-
});
|
|
1175
|
-
logOptimizedImage({
|
|
1176
|
-
originalSize,
|
|
1177
|
-
optimized
|
|
1178
|
-
});
|
|
1179
|
-
if (optimized.buffer.length > cap) throw new Error(formatCapReduce("Media", cap, optimized.buffer.length));
|
|
1180
|
-
const contentType = optimized.format === "png" ? "image/png" : "image/jpeg";
|
|
1181
|
-
const fileName = optimized.format === "jpeg" && meta && isHeicSource(meta) ? toJpegFileName(meta.fileName) : meta?.fileName;
|
|
1182
|
-
return {
|
|
1183
|
-
buffer: optimized.buffer,
|
|
1184
|
-
contentType,
|
|
1185
|
-
kind: "image",
|
|
1186
|
-
fileName
|
|
1187
|
-
};
|
|
1188
|
-
};
|
|
1189
|
-
const clampAndFinalize = async (params) => {
|
|
1190
|
-
const cap = maxBytes !== void 0 ? maxBytes : maxBytesForKind(params.kind);
|
|
1191
|
-
if (params.kind === "image") {
|
|
1192
|
-
const isGif = params.contentType === "image/gif";
|
|
1193
|
-
if (isGif || !optimizeImages) {
|
|
1194
|
-
if (params.buffer.length > cap) throw new Error(formatCapLimit(isGif ? "GIF" : "Media", cap, params.buffer.length));
|
|
1195
|
-
return {
|
|
1196
|
-
buffer: params.buffer,
|
|
1197
|
-
contentType: params.contentType,
|
|
1198
|
-
kind: params.kind,
|
|
1199
|
-
fileName: params.fileName
|
|
1200
|
-
};
|
|
1201
|
-
}
|
|
1202
|
-
return { ...await optimizeAndClampImage(params.buffer, cap, {
|
|
1203
|
-
contentType: params.contentType,
|
|
1204
|
-
fileName: params.fileName
|
|
1205
|
-
}) };
|
|
1206
|
-
}
|
|
1207
|
-
if (params.buffer.length > cap) throw new Error(formatCapLimit("Media", cap, params.buffer.length));
|
|
1208
|
-
return {
|
|
1209
|
-
buffer: params.buffer,
|
|
1210
|
-
contentType: params.contentType ?? void 0,
|
|
1211
|
-
kind: params.kind,
|
|
1212
|
-
fileName: params.fileName
|
|
1213
|
-
};
|
|
1214
|
-
};
|
|
1215
|
-
if (/^https?:\/\//i.test(mediaUrl)) {
|
|
1216
|
-
const defaultFetchCap = maxBytesForKind("unknown");
|
|
1217
|
-
const { buffer, contentType, fileName } = await fetchRemoteMedia({
|
|
1218
|
-
url: mediaUrl,
|
|
1219
|
-
maxBytes: maxBytes === void 0 ? defaultFetchCap : optimizeImages ? Math.max(maxBytes, defaultFetchCap) : maxBytes,
|
|
1220
|
-
ssrfPolicy
|
|
1221
|
-
});
|
|
1222
|
-
return await clampAndFinalize({
|
|
1223
|
-
buffer,
|
|
1224
|
-
contentType,
|
|
1225
|
-
kind: mediaKindFromMime(contentType),
|
|
1226
|
-
fileName
|
|
1227
|
-
});
|
|
1228
|
-
}
|
|
1229
|
-
if (mediaUrl.startsWith("~")) mediaUrl = resolveUserPath(mediaUrl);
|
|
1230
|
-
if ((sandboxValidated || localRoots === "any") && !readFileOverride) throw new Error("Refusing localRoots bypass without readFile override. Use sandboxValidated with readFile, or pass explicit localRoots.");
|
|
1231
|
-
if (!(sandboxValidated || localRoots === "any")) await assertLocalMediaAllowed(mediaUrl, localRoots);
|
|
1232
|
-
const data = readFileOverride ? await readFileOverride(mediaUrl) : await fs.readFile(mediaUrl);
|
|
1233
|
-
const mime = await detectMime({
|
|
1234
|
-
buffer: data,
|
|
1235
|
-
filePath: mediaUrl
|
|
1236
|
-
});
|
|
1237
|
-
const kind = mediaKindFromMime(mime);
|
|
1238
|
-
let fileName = path.basename(mediaUrl) || void 0;
|
|
1239
|
-
if (fileName && !path.extname(fileName) && mime) {
|
|
1240
|
-
const ext = extensionForMime(mime);
|
|
1241
|
-
if (ext) fileName = `${fileName}${ext}`;
|
|
1242
|
-
}
|
|
1243
|
-
return await clampAndFinalize({
|
|
1244
|
-
buffer: data,
|
|
1245
|
-
contentType: mime,
|
|
1246
|
-
kind,
|
|
1247
|
-
fileName
|
|
1248
|
-
});
|
|
1249
|
-
}
|
|
1250
|
-
async function loadWebMedia(mediaUrl, maxBytesOrOptions, options) {
|
|
1251
|
-
if (typeof maxBytesOrOptions === "number" || maxBytesOrOptions === void 0) return await loadWebMediaInternal(mediaUrl, {
|
|
1252
|
-
maxBytes: maxBytesOrOptions,
|
|
1253
|
-
optimizeImages: true,
|
|
1254
|
-
ssrfPolicy: options?.ssrfPolicy,
|
|
1255
|
-
localRoots: options?.localRoots
|
|
1256
|
-
});
|
|
1257
|
-
return await loadWebMediaInternal(mediaUrl, {
|
|
1258
|
-
...maxBytesOrOptions,
|
|
1259
|
-
optimizeImages: maxBytesOrOptions.optimizeImages ?? true
|
|
1260
|
-
});
|
|
1261
|
-
}
|
|
1262
|
-
async function optimizeImageToJpeg(buffer, maxBytes, opts = {}) {
|
|
1263
|
-
let source = buffer;
|
|
1264
|
-
if (isHeicSource(opts)) try {
|
|
1265
|
-
source = await convertHeicToJpeg(buffer);
|
|
1266
|
-
} catch (err) {
|
|
1267
|
-
throw new Error(`HEIC image conversion failed: ${String(err)}`, { cause: err });
|
|
1268
|
-
}
|
|
1269
|
-
const sides = [
|
|
1270
|
-
2048,
|
|
1271
|
-
1536,
|
|
1272
|
-
1280,
|
|
1273
|
-
1024,
|
|
1274
|
-
800
|
|
1275
|
-
];
|
|
1276
|
-
const qualities = [
|
|
1277
|
-
80,
|
|
1278
|
-
70,
|
|
1279
|
-
60,
|
|
1280
|
-
50,
|
|
1281
|
-
40
|
|
1282
|
-
];
|
|
1283
|
-
let smallest = null;
|
|
1284
|
-
for (const side of sides) for (const quality of qualities) try {
|
|
1285
|
-
const out = await resizeToJpeg({
|
|
1286
|
-
buffer: source,
|
|
1287
|
-
maxSide: side,
|
|
1288
|
-
quality,
|
|
1289
|
-
withoutEnlargement: true
|
|
1290
|
-
});
|
|
1291
|
-
const size = out.length;
|
|
1292
|
-
if (!smallest || size < smallest.size) smallest = {
|
|
1293
|
-
buffer: out,
|
|
1294
|
-
size,
|
|
1295
|
-
resizeSide: side,
|
|
1296
|
-
quality
|
|
1297
|
-
};
|
|
1298
|
-
if (size <= maxBytes) return {
|
|
1299
|
-
buffer: out,
|
|
1300
|
-
optimizedSize: size,
|
|
1301
|
-
resizeSide: side,
|
|
1302
|
-
quality
|
|
1303
|
-
};
|
|
1304
|
-
} catch {}
|
|
1305
|
-
if (smallest) return {
|
|
1306
|
-
buffer: smallest.buffer,
|
|
1307
|
-
optimizedSize: smallest.size,
|
|
1308
|
-
resizeSide: smallest.resizeSide,
|
|
1309
|
-
quality: smallest.quality
|
|
1310
|
-
};
|
|
1311
|
-
throw new Error("Failed to optimize image");
|
|
1312
|
-
}
|
|
1313
|
-
|
|
1314
|
-
//#endregion
|
|
1315
|
-
//#region src/polls.ts
|
|
1316
|
-
function normalizePollInput(input, options = {}) {
|
|
1317
|
-
const question = input.question.trim();
|
|
1318
|
-
if (!question) throw new Error("Poll question is required");
|
|
1319
|
-
const cleaned = (input.options ?? []).map((option) => option.trim()).filter(Boolean);
|
|
1320
|
-
if (cleaned.length < 2) throw new Error("Poll requires at least 2 options");
|
|
1321
|
-
if (options.maxOptions !== void 0 && cleaned.length > options.maxOptions) throw new Error(`Poll supports at most ${options.maxOptions} options`);
|
|
1322
|
-
const maxSelectionsRaw = input.maxSelections;
|
|
1323
|
-
const maxSelections = typeof maxSelectionsRaw === "number" && Number.isFinite(maxSelectionsRaw) ? Math.floor(maxSelectionsRaw) : 1;
|
|
1324
|
-
if (maxSelections < 1) throw new Error("maxSelections must be at least 1");
|
|
1325
|
-
if (maxSelections > cleaned.length) throw new Error("maxSelections cannot exceed option count");
|
|
1326
|
-
const durationSecondsRaw = input.durationSeconds;
|
|
1327
|
-
const durationSeconds = typeof durationSecondsRaw === "number" && Number.isFinite(durationSecondsRaw) ? Math.floor(durationSecondsRaw) : void 0;
|
|
1328
|
-
if (durationSeconds !== void 0 && durationSeconds < 1) throw new Error("durationSeconds must be at least 1");
|
|
1329
|
-
const durationRaw = input.durationHours;
|
|
1330
|
-
const durationHours = typeof durationRaw === "number" && Number.isFinite(durationRaw) ? Math.floor(durationRaw) : void 0;
|
|
1331
|
-
if (durationHours !== void 0 && durationHours < 1) throw new Error("durationHours must be at least 1");
|
|
1332
|
-
if (durationSeconds !== void 0 && durationHours !== void 0) throw new Error("durationSeconds and durationHours are mutually exclusive");
|
|
1333
|
-
return {
|
|
1334
|
-
question,
|
|
1335
|
-
options: cleaned,
|
|
1336
|
-
maxSelections,
|
|
1337
|
-
durationSeconds,
|
|
1338
|
-
durationHours
|
|
1339
|
-
};
|
|
1340
|
-
}
|
|
1341
|
-
|
|
1342
|
-
//#endregion
|
|
1343
|
-
export { requireActiveWebListener as a, MediaFetchError as c, fetchWithSsrFGuard as d, bindAbortRelay as f, getActiveWebListener as i, fetchRemoteMedia as l, getDefaultLocalRoots as n, setActiveWebListener as o, fetchWithTimeout as p, loadWebMedia as r, convertMarkdownTables as s, normalizePollInput as t, readResponseWithLimit as u };
|