@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
|
@@ -1,351 +0,0 @@
|
|
|
1
|
-
import { t as runCommandWithTimeout } from "./exec-Bv3pyjeM.js";
|
|
2
|
-
import { createWriteStream } from "node:fs";
|
|
3
|
-
import path from "node:path";
|
|
4
|
-
import fs$1 from "node:fs/promises";
|
|
5
|
-
import { pipeline } from "node:stream/promises";
|
|
6
|
-
import { Readable, Transform } from "node:stream";
|
|
7
|
-
import JSZip from "jszip";
|
|
8
|
-
import * as tar from "tar";
|
|
9
|
-
|
|
10
|
-
//#region src/infra/archive.ts
|
|
11
|
-
/** @internal */
|
|
12
|
-
const DEFAULT_MAX_ARCHIVE_BYTES_ZIP = 256 * 1024 * 1024;
|
|
13
|
-
/** @internal */
|
|
14
|
-
const DEFAULT_MAX_ENTRIES = 5e4;
|
|
15
|
-
/** @internal */
|
|
16
|
-
const DEFAULT_MAX_EXTRACTED_BYTES = 512 * 1024 * 1024;
|
|
17
|
-
/** @internal */
|
|
18
|
-
const DEFAULT_MAX_ENTRY_BYTES = 256 * 1024 * 1024;
|
|
19
|
-
const ERROR_ARCHIVE_SIZE_EXCEEDS_LIMIT = "archive size exceeds limit";
|
|
20
|
-
const ERROR_ARCHIVE_ENTRY_COUNT_EXCEEDS_LIMIT = "archive entry count exceeds limit";
|
|
21
|
-
const ERROR_ARCHIVE_ENTRY_EXTRACTED_SIZE_EXCEEDS_LIMIT = "archive entry extracted size exceeds limit";
|
|
22
|
-
const ERROR_ARCHIVE_EXTRACTED_SIZE_EXCEEDS_LIMIT = "archive extracted size exceeds limit";
|
|
23
|
-
const TAR_SUFFIXES = [
|
|
24
|
-
".tgz",
|
|
25
|
-
".tar.gz",
|
|
26
|
-
".tar"
|
|
27
|
-
];
|
|
28
|
-
function resolveArchiveKind(filePath) {
|
|
29
|
-
const lower = filePath.toLowerCase();
|
|
30
|
-
if (lower.endsWith(".zip")) return "zip";
|
|
31
|
-
if (TAR_SUFFIXES.some((suffix) => lower.endsWith(suffix))) return "tar";
|
|
32
|
-
return null;
|
|
33
|
-
}
|
|
34
|
-
async function resolvePackedRootDir(extractDir) {
|
|
35
|
-
const direct = path.join(extractDir, "package");
|
|
36
|
-
try {
|
|
37
|
-
if ((await fs$1.stat(direct)).isDirectory()) return direct;
|
|
38
|
-
} catch {}
|
|
39
|
-
const dirs = (await fs$1.readdir(extractDir, { withFileTypes: true })).filter((entry) => entry.isDirectory()).map((entry) => entry.name);
|
|
40
|
-
if (dirs.length !== 1) throw new Error(`unexpected archive layout (dirs: ${dirs.join(", ")})`);
|
|
41
|
-
const onlyDir = dirs[0];
|
|
42
|
-
if (!onlyDir) throw new Error("unexpected archive layout (no package dir found)");
|
|
43
|
-
return path.join(extractDir, onlyDir);
|
|
44
|
-
}
|
|
45
|
-
async function withTimeout(promise, timeoutMs, label) {
|
|
46
|
-
let timeoutId;
|
|
47
|
-
try {
|
|
48
|
-
return await Promise.race([promise, new Promise((_, reject) => {
|
|
49
|
-
timeoutId = setTimeout(() => reject(/* @__PURE__ */ new Error(`${label} timed out after ${timeoutMs}ms`)), timeoutMs);
|
|
50
|
-
})]);
|
|
51
|
-
} finally {
|
|
52
|
-
if (timeoutId) clearTimeout(timeoutId);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
function resolveSafeBaseDir(destDir) {
|
|
56
|
-
const resolved = path.resolve(destDir);
|
|
57
|
-
return resolved.endsWith(path.sep) ? resolved : `${resolved}${path.sep}`;
|
|
58
|
-
}
|
|
59
|
-
function normalizeArchivePath(raw) {
|
|
60
|
-
return raw.replaceAll("\\", "/");
|
|
61
|
-
}
|
|
62
|
-
function isWindowsDrivePath(p) {
|
|
63
|
-
return /^[a-zA-Z]:[\\/]/.test(p);
|
|
64
|
-
}
|
|
65
|
-
function validateArchiveEntryPath(entryPath) {
|
|
66
|
-
if (!entryPath || entryPath === "." || entryPath === "./") return;
|
|
67
|
-
if (isWindowsDrivePath(entryPath)) throw new Error(`archive entry uses a drive path: ${entryPath}`);
|
|
68
|
-
const normalized = path.posix.normalize(normalizeArchivePath(entryPath));
|
|
69
|
-
if (normalized === ".." || normalized.startsWith("../")) throw new Error(`archive entry escapes destination: ${entryPath}`);
|
|
70
|
-
if (path.posix.isAbsolute(normalized) || normalized.startsWith("//")) throw new Error(`archive entry is absolute: ${entryPath}`);
|
|
71
|
-
}
|
|
72
|
-
function stripArchivePath(entryPath, stripComponents) {
|
|
73
|
-
const raw = normalizeArchivePath(entryPath);
|
|
74
|
-
if (!raw || raw === "." || raw === "./") return null;
|
|
75
|
-
const parts = raw.split("/").filter((part) => part.length > 0 && part !== ".");
|
|
76
|
-
const strip = Math.max(0, Math.floor(stripComponents));
|
|
77
|
-
const stripped = strip === 0 ? parts.join("/") : parts.slice(strip).join("/");
|
|
78
|
-
const result = path.posix.normalize(stripped);
|
|
79
|
-
if (!result || result === "." || result === "./") return null;
|
|
80
|
-
return result;
|
|
81
|
-
}
|
|
82
|
-
function resolveCheckedOutPath(destDir, relPath, original) {
|
|
83
|
-
const safeBase = resolveSafeBaseDir(destDir);
|
|
84
|
-
const outPath = path.resolve(destDir, relPath);
|
|
85
|
-
if (!outPath.startsWith(safeBase)) throw new Error(`archive entry escapes destination: ${original}`);
|
|
86
|
-
return outPath;
|
|
87
|
-
}
|
|
88
|
-
function clampLimit(value) {
|
|
89
|
-
if (typeof value !== "number" || !Number.isFinite(value)) return;
|
|
90
|
-
const v = Math.floor(value);
|
|
91
|
-
return v > 0 ? v : void 0;
|
|
92
|
-
}
|
|
93
|
-
function resolveExtractLimits(limits) {
|
|
94
|
-
return {
|
|
95
|
-
maxArchiveBytes: clampLimit(limits?.maxArchiveBytes) ?? DEFAULT_MAX_ARCHIVE_BYTES_ZIP,
|
|
96
|
-
maxEntries: clampLimit(limits?.maxEntries) ?? DEFAULT_MAX_ENTRIES,
|
|
97
|
-
maxExtractedBytes: clampLimit(limits?.maxExtractedBytes) ?? DEFAULT_MAX_EXTRACTED_BYTES,
|
|
98
|
-
maxEntryBytes: clampLimit(limits?.maxEntryBytes) ?? DEFAULT_MAX_ENTRY_BYTES
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
function assertArchiveEntryCountWithinLimit(entryCount, limits) {
|
|
102
|
-
if (entryCount > limits.maxEntries) throw new Error(ERROR_ARCHIVE_ENTRY_COUNT_EXCEEDS_LIMIT);
|
|
103
|
-
}
|
|
104
|
-
function createByteBudgetTracker(limits) {
|
|
105
|
-
let entryBytes = 0;
|
|
106
|
-
let extractedBytes = 0;
|
|
107
|
-
const addBytes = (bytes) => {
|
|
108
|
-
const b = Math.max(0, Math.floor(bytes));
|
|
109
|
-
if (b === 0) return;
|
|
110
|
-
entryBytes += b;
|
|
111
|
-
if (entryBytes > limits.maxEntryBytes) throw new Error(ERROR_ARCHIVE_ENTRY_EXTRACTED_SIZE_EXCEEDS_LIMIT);
|
|
112
|
-
extractedBytes += b;
|
|
113
|
-
if (extractedBytes > limits.maxExtractedBytes) throw new Error(ERROR_ARCHIVE_EXTRACTED_SIZE_EXCEEDS_LIMIT);
|
|
114
|
-
};
|
|
115
|
-
return {
|
|
116
|
-
startEntry() {
|
|
117
|
-
entryBytes = 0;
|
|
118
|
-
},
|
|
119
|
-
addBytes,
|
|
120
|
-
addEntrySize(size) {
|
|
121
|
-
const s = Math.max(0, Math.floor(size));
|
|
122
|
-
if (s > limits.maxEntryBytes) throw new Error(ERROR_ARCHIVE_ENTRY_EXTRACTED_SIZE_EXCEEDS_LIMIT);
|
|
123
|
-
addBytes(s);
|
|
124
|
-
}
|
|
125
|
-
};
|
|
126
|
-
}
|
|
127
|
-
function createExtractBudgetTransform(params) {
|
|
128
|
-
return new Transform({ transform(chunk, _encoding, callback) {
|
|
129
|
-
try {
|
|
130
|
-
const buf = chunk instanceof Buffer ? chunk : Buffer.from(chunk);
|
|
131
|
-
params.onChunkBytes(buf.byteLength);
|
|
132
|
-
callback(null, buf);
|
|
133
|
-
} catch (err) {
|
|
134
|
-
callback(err instanceof Error ? err : new Error(String(err)));
|
|
135
|
-
}
|
|
136
|
-
} });
|
|
137
|
-
}
|
|
138
|
-
async function readZipEntryStream(entry) {
|
|
139
|
-
if (typeof entry.nodeStream === "function") return entry.nodeStream();
|
|
140
|
-
const buf = await entry.async("nodebuffer");
|
|
141
|
-
return Readable.from(buf);
|
|
142
|
-
}
|
|
143
|
-
async function extractZip(params) {
|
|
144
|
-
const limits = resolveExtractLimits(params.limits);
|
|
145
|
-
if ((await fs$1.stat(params.archivePath)).size > limits.maxArchiveBytes) throw new Error(ERROR_ARCHIVE_SIZE_EXCEEDS_LIMIT);
|
|
146
|
-
const buffer = await fs$1.readFile(params.archivePath);
|
|
147
|
-
const zip = await JSZip.loadAsync(buffer);
|
|
148
|
-
const entries = Object.values(zip.files);
|
|
149
|
-
const strip = Math.max(0, Math.floor(params.stripComponents ?? 0));
|
|
150
|
-
assertArchiveEntryCountWithinLimit(entries.length, limits);
|
|
151
|
-
const budget = createByteBudgetTracker(limits);
|
|
152
|
-
for (const entry of entries) {
|
|
153
|
-
validateArchiveEntryPath(entry.name);
|
|
154
|
-
const relPath = stripArchivePath(entry.name, strip);
|
|
155
|
-
if (!relPath) continue;
|
|
156
|
-
validateArchiveEntryPath(relPath);
|
|
157
|
-
const outPath = resolveCheckedOutPath(params.destDir, relPath, entry.name);
|
|
158
|
-
if (entry.dir) {
|
|
159
|
-
await fs$1.mkdir(outPath, { recursive: true });
|
|
160
|
-
continue;
|
|
161
|
-
}
|
|
162
|
-
await fs$1.mkdir(path.dirname(outPath), { recursive: true });
|
|
163
|
-
budget.startEntry();
|
|
164
|
-
const readable = await readZipEntryStream(entry);
|
|
165
|
-
try {
|
|
166
|
-
await pipeline(readable, createExtractBudgetTransform({ onChunkBytes: budget.addBytes }), createWriteStream(outPath));
|
|
167
|
-
} catch (err) {
|
|
168
|
-
await fs$1.unlink(outPath).catch(() => void 0);
|
|
169
|
-
throw err;
|
|
170
|
-
}
|
|
171
|
-
if (typeof entry.unixPermissions === "number") {
|
|
172
|
-
const mode = entry.unixPermissions & 511;
|
|
173
|
-
if (mode !== 0) await fs$1.chmod(outPath, mode).catch(() => void 0);
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
function readTarEntryInfo(entry) {
|
|
178
|
-
return {
|
|
179
|
-
path: typeof entry === "object" && entry !== null && "path" in entry ? String(entry.path) : "",
|
|
180
|
-
type: typeof entry === "object" && entry !== null && "type" in entry ? String(entry.type) : "",
|
|
181
|
-
size: typeof entry === "object" && entry !== null && "size" in entry && typeof entry.size === "number" && Number.isFinite(entry.size) ? Math.max(0, Math.floor(entry.size)) : 0
|
|
182
|
-
};
|
|
183
|
-
}
|
|
184
|
-
async function extractArchive(params) {
|
|
185
|
-
const kind = params.kind ?? resolveArchiveKind(params.archivePath);
|
|
186
|
-
if (!kind) throw new Error(`unsupported archive: ${params.archivePath}`);
|
|
187
|
-
const label = kind === "zip" ? "extract zip" : "extract tar";
|
|
188
|
-
if (kind === "tar") {
|
|
189
|
-
const strip = Math.max(0, Math.floor(params.stripComponents ?? 0));
|
|
190
|
-
const limits = resolveExtractLimits(params.limits);
|
|
191
|
-
let entryCount = 0;
|
|
192
|
-
const budget = createByteBudgetTracker(limits);
|
|
193
|
-
await withTimeout(tar.x({
|
|
194
|
-
file: params.archivePath,
|
|
195
|
-
cwd: params.destDir,
|
|
196
|
-
strip,
|
|
197
|
-
gzip: params.tarGzip,
|
|
198
|
-
preservePaths: false,
|
|
199
|
-
strict: true,
|
|
200
|
-
onReadEntry(entry) {
|
|
201
|
-
const info = readTarEntryInfo(entry);
|
|
202
|
-
try {
|
|
203
|
-
validateArchiveEntryPath(info.path);
|
|
204
|
-
const relPath = stripArchivePath(info.path, strip);
|
|
205
|
-
if (!relPath) return;
|
|
206
|
-
validateArchiveEntryPath(relPath);
|
|
207
|
-
resolveCheckedOutPath(params.destDir, relPath, info.path);
|
|
208
|
-
if (info.type === "SymbolicLink" || info.type === "Link" || info.type === "BlockDevice" || info.type === "CharacterDevice" || info.type === "FIFO" || info.type === "Socket") throw new Error(`tar entry is a link: ${info.path}`);
|
|
209
|
-
entryCount += 1;
|
|
210
|
-
assertArchiveEntryCountWithinLimit(entryCount, limits);
|
|
211
|
-
budget.addEntrySize(info.size);
|
|
212
|
-
} catch (err) {
|
|
213
|
-
const error = err instanceof Error ? err : new Error(String(err));
|
|
214
|
-
this.abort?.(error);
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
}), params.timeoutMs, label);
|
|
218
|
-
return;
|
|
219
|
-
}
|
|
220
|
-
await withTimeout(extractZip({
|
|
221
|
-
archivePath: params.archivePath,
|
|
222
|
-
destDir: params.destDir,
|
|
223
|
-
stripComponents: params.stripComponents,
|
|
224
|
-
limits: params.limits
|
|
225
|
-
}), params.timeoutMs, label);
|
|
226
|
-
}
|
|
227
|
-
async function fileExists(filePath) {
|
|
228
|
-
try {
|
|
229
|
-
await fs$1.stat(filePath);
|
|
230
|
-
return true;
|
|
231
|
-
} catch {
|
|
232
|
-
return false;
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
async function readJsonFile(filePath) {
|
|
236
|
-
const raw = await fs$1.readFile(filePath, "utf-8");
|
|
237
|
-
return JSON.parse(raw);
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
//#endregion
|
|
241
|
-
//#region src/infra/install-package-dir.ts
|
|
242
|
-
async function installPackageDir(params) {
|
|
243
|
-
params.logger?.info?.(`Installing to ${params.targetDir}…`);
|
|
244
|
-
let backupDir = null;
|
|
245
|
-
if (params.mode === "update" && await fileExists(params.targetDir)) {
|
|
246
|
-
backupDir = `${params.targetDir}.backup-${Date.now()}`;
|
|
247
|
-
await fs$1.rename(params.targetDir, backupDir);
|
|
248
|
-
}
|
|
249
|
-
const rollback = async () => {
|
|
250
|
-
if (!backupDir) return;
|
|
251
|
-
await fs$1.rm(params.targetDir, {
|
|
252
|
-
recursive: true,
|
|
253
|
-
force: true
|
|
254
|
-
}).catch(() => void 0);
|
|
255
|
-
await fs$1.rename(backupDir, params.targetDir).catch(() => void 0);
|
|
256
|
-
};
|
|
257
|
-
try {
|
|
258
|
-
await fs$1.cp(params.sourceDir, params.targetDir, { recursive: true });
|
|
259
|
-
} catch (err) {
|
|
260
|
-
await rollback();
|
|
261
|
-
return {
|
|
262
|
-
ok: false,
|
|
263
|
-
error: `${params.copyErrorPrefix}: ${String(err)}`
|
|
264
|
-
};
|
|
265
|
-
}
|
|
266
|
-
try {
|
|
267
|
-
await params.afterCopy?.();
|
|
268
|
-
} catch (err) {
|
|
269
|
-
await rollback();
|
|
270
|
-
return {
|
|
271
|
-
ok: false,
|
|
272
|
-
error: `post-copy validation failed: ${String(err)}`
|
|
273
|
-
};
|
|
274
|
-
}
|
|
275
|
-
if (params.hasDeps) {
|
|
276
|
-
params.logger?.info?.(params.depsLogMessage);
|
|
277
|
-
const npmRes = await runCommandWithTimeout([
|
|
278
|
-
"npm",
|
|
279
|
-
"install",
|
|
280
|
-
"--omit=dev",
|
|
281
|
-
"--silent",
|
|
282
|
-
"--ignore-scripts"
|
|
283
|
-
], {
|
|
284
|
-
timeoutMs: Math.max(params.timeoutMs, 3e5),
|
|
285
|
-
cwd: params.targetDir
|
|
286
|
-
});
|
|
287
|
-
if (npmRes.code !== 0) {
|
|
288
|
-
await rollback();
|
|
289
|
-
return {
|
|
290
|
-
ok: false,
|
|
291
|
-
error: `npm install failed: ${npmRes.stderr.trim() || npmRes.stdout.trim()}`
|
|
292
|
-
};
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
if (backupDir) await fs$1.rm(backupDir, {
|
|
296
|
-
recursive: true,
|
|
297
|
-
force: true
|
|
298
|
-
}).catch(() => void 0);
|
|
299
|
-
return { ok: true };
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
//#endregion
|
|
303
|
-
//#region src/infra/install-safe-path.ts
|
|
304
|
-
function unscopedPackageName(name) {
|
|
305
|
-
const trimmed = name.trim();
|
|
306
|
-
if (!trimmed) return trimmed;
|
|
307
|
-
return trimmed.includes("/") ? trimmed.split("/").pop() ?? trimmed : trimmed;
|
|
308
|
-
}
|
|
309
|
-
function safeDirName(input) {
|
|
310
|
-
const trimmed = input.trim();
|
|
311
|
-
if (!trimmed) return trimmed;
|
|
312
|
-
return trimmed.replaceAll("/", "__").replaceAll("\\", "__");
|
|
313
|
-
}
|
|
314
|
-
function resolveSafeInstallDir(params) {
|
|
315
|
-
const targetDir = path.join(params.baseDir, safeDirName(params.id));
|
|
316
|
-
const resolvedBase = path.resolve(params.baseDir);
|
|
317
|
-
const resolvedTarget = path.resolve(targetDir);
|
|
318
|
-
const relative = path.relative(resolvedBase, resolvedTarget);
|
|
319
|
-
if (!relative || relative === ".." || relative.startsWith(`..${path.sep}`) || path.isAbsolute(relative)) return {
|
|
320
|
-
ok: false,
|
|
321
|
-
error: params.invalidNameMessage
|
|
322
|
-
};
|
|
323
|
-
return {
|
|
324
|
-
ok: true,
|
|
325
|
-
path: targetDir
|
|
326
|
-
};
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
//#endregion
|
|
330
|
-
//#region src/infra/npm-registry-spec.ts
|
|
331
|
-
function validateRegistryNpmSpec(rawSpec) {
|
|
332
|
-
const spec = rawSpec.trim();
|
|
333
|
-
if (!spec) return "missing npm spec";
|
|
334
|
-
if (/\s/.test(spec)) return "unsupported npm spec: whitespace is not allowed";
|
|
335
|
-
if (spec.includes("://")) return "unsupported npm spec: URLs are not allowed";
|
|
336
|
-
if (spec.includes("#")) return "unsupported npm spec: git refs are not allowed";
|
|
337
|
-
if (spec.includes(":")) return "unsupported npm spec: protocol specs are not allowed";
|
|
338
|
-
const at = spec.lastIndexOf("@");
|
|
339
|
-
const hasVersion = at > 0;
|
|
340
|
-
const name = hasVersion ? spec.slice(0, at) : spec;
|
|
341
|
-
const version = hasVersion ? spec.slice(at + 1) : "";
|
|
342
|
-
if (!(name.startsWith("@") ? /^@[a-z0-9][a-z0-9-._~]*\/[a-z0-9][a-z0-9-._~]*$/.test(name) : /^[a-z0-9][a-z0-9-._~]*$/.test(name))) return "unsupported npm spec: expected <name> or <name>@<version> from the npm registry";
|
|
343
|
-
if (hasVersion) {
|
|
344
|
-
if (!version) return "unsupported npm spec: missing version/tag after @";
|
|
345
|
-
if (/[\\/]/.test(version)) return "unsupported npm spec: invalid version/tag";
|
|
346
|
-
}
|
|
347
|
-
return null;
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
//#endregion
|
|
351
|
-
export { installPackageDir as a, readJsonFile as c, unscopedPackageName as i, resolveArchiveKind as l, resolveSafeInstallDir as n, extractArchive as o, safeDirName as r, fileExists as s, validateRegistryNpmSpec as t, resolvePackedRootDir as u };
|
|
@@ -1,351 +0,0 @@
|
|
|
1
|
-
import { t as runCommandWithTimeout } from "./exec-BizYYQgP.js";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
import { createWriteStream } from "node:fs";
|
|
4
|
-
import fs$1 from "node:fs/promises";
|
|
5
|
-
import { pipeline } from "node:stream/promises";
|
|
6
|
-
import { Readable, Transform } from "node:stream";
|
|
7
|
-
import JSZip from "jszip";
|
|
8
|
-
import * as tar from "tar";
|
|
9
|
-
|
|
10
|
-
//#region src/infra/archive.ts
|
|
11
|
-
/** @internal */
|
|
12
|
-
const DEFAULT_MAX_ARCHIVE_BYTES_ZIP = 256 * 1024 * 1024;
|
|
13
|
-
/** @internal */
|
|
14
|
-
const DEFAULT_MAX_ENTRIES = 5e4;
|
|
15
|
-
/** @internal */
|
|
16
|
-
const DEFAULT_MAX_EXTRACTED_BYTES = 512 * 1024 * 1024;
|
|
17
|
-
/** @internal */
|
|
18
|
-
const DEFAULT_MAX_ENTRY_BYTES = 256 * 1024 * 1024;
|
|
19
|
-
const ERROR_ARCHIVE_SIZE_EXCEEDS_LIMIT = "archive size exceeds limit";
|
|
20
|
-
const ERROR_ARCHIVE_ENTRY_COUNT_EXCEEDS_LIMIT = "archive entry count exceeds limit";
|
|
21
|
-
const ERROR_ARCHIVE_ENTRY_EXTRACTED_SIZE_EXCEEDS_LIMIT = "archive entry extracted size exceeds limit";
|
|
22
|
-
const ERROR_ARCHIVE_EXTRACTED_SIZE_EXCEEDS_LIMIT = "archive extracted size exceeds limit";
|
|
23
|
-
const TAR_SUFFIXES = [
|
|
24
|
-
".tgz",
|
|
25
|
-
".tar.gz",
|
|
26
|
-
".tar"
|
|
27
|
-
];
|
|
28
|
-
function resolveArchiveKind(filePath) {
|
|
29
|
-
const lower = filePath.toLowerCase();
|
|
30
|
-
if (lower.endsWith(".zip")) return "zip";
|
|
31
|
-
if (TAR_SUFFIXES.some((suffix) => lower.endsWith(suffix))) return "tar";
|
|
32
|
-
return null;
|
|
33
|
-
}
|
|
34
|
-
async function resolvePackedRootDir(extractDir) {
|
|
35
|
-
const direct = path.join(extractDir, "package");
|
|
36
|
-
try {
|
|
37
|
-
if ((await fs$1.stat(direct)).isDirectory()) return direct;
|
|
38
|
-
} catch {}
|
|
39
|
-
const dirs = (await fs$1.readdir(extractDir, { withFileTypes: true })).filter((entry) => entry.isDirectory()).map((entry) => entry.name);
|
|
40
|
-
if (dirs.length !== 1) throw new Error(`unexpected archive layout (dirs: ${dirs.join(", ")})`);
|
|
41
|
-
const onlyDir = dirs[0];
|
|
42
|
-
if (!onlyDir) throw new Error("unexpected archive layout (no package dir found)");
|
|
43
|
-
return path.join(extractDir, onlyDir);
|
|
44
|
-
}
|
|
45
|
-
async function withTimeout(promise, timeoutMs, label) {
|
|
46
|
-
let timeoutId;
|
|
47
|
-
try {
|
|
48
|
-
return await Promise.race([promise, new Promise((_, reject) => {
|
|
49
|
-
timeoutId = setTimeout(() => reject(/* @__PURE__ */ new Error(`${label} timed out after ${timeoutMs}ms`)), timeoutMs);
|
|
50
|
-
})]);
|
|
51
|
-
} finally {
|
|
52
|
-
if (timeoutId) clearTimeout(timeoutId);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
function resolveSafeBaseDir(destDir) {
|
|
56
|
-
const resolved = path.resolve(destDir);
|
|
57
|
-
return resolved.endsWith(path.sep) ? resolved : `${resolved}${path.sep}`;
|
|
58
|
-
}
|
|
59
|
-
function normalizeArchivePath(raw) {
|
|
60
|
-
return raw.replaceAll("\\", "/");
|
|
61
|
-
}
|
|
62
|
-
function isWindowsDrivePath(p) {
|
|
63
|
-
return /^[a-zA-Z]:[\\/]/.test(p);
|
|
64
|
-
}
|
|
65
|
-
function validateArchiveEntryPath(entryPath) {
|
|
66
|
-
if (!entryPath || entryPath === "." || entryPath === "./") return;
|
|
67
|
-
if (isWindowsDrivePath(entryPath)) throw new Error(`archive entry uses a drive path: ${entryPath}`);
|
|
68
|
-
const normalized = path.posix.normalize(normalizeArchivePath(entryPath));
|
|
69
|
-
if (normalized === ".." || normalized.startsWith("../")) throw new Error(`archive entry escapes destination: ${entryPath}`);
|
|
70
|
-
if (path.posix.isAbsolute(normalized) || normalized.startsWith("//")) throw new Error(`archive entry is absolute: ${entryPath}`);
|
|
71
|
-
}
|
|
72
|
-
function stripArchivePath(entryPath, stripComponents) {
|
|
73
|
-
const raw = normalizeArchivePath(entryPath);
|
|
74
|
-
if (!raw || raw === "." || raw === "./") return null;
|
|
75
|
-
const parts = raw.split("/").filter((part) => part.length > 0 && part !== ".");
|
|
76
|
-
const strip = Math.max(0, Math.floor(stripComponents));
|
|
77
|
-
const stripped = strip === 0 ? parts.join("/") : parts.slice(strip).join("/");
|
|
78
|
-
const result = path.posix.normalize(stripped);
|
|
79
|
-
if (!result || result === "." || result === "./") return null;
|
|
80
|
-
return result;
|
|
81
|
-
}
|
|
82
|
-
function resolveCheckedOutPath(destDir, relPath, original) {
|
|
83
|
-
const safeBase = resolveSafeBaseDir(destDir);
|
|
84
|
-
const outPath = path.resolve(destDir, relPath);
|
|
85
|
-
if (!outPath.startsWith(safeBase)) throw new Error(`archive entry escapes destination: ${original}`);
|
|
86
|
-
return outPath;
|
|
87
|
-
}
|
|
88
|
-
function clampLimit(value) {
|
|
89
|
-
if (typeof value !== "number" || !Number.isFinite(value)) return;
|
|
90
|
-
const v = Math.floor(value);
|
|
91
|
-
return v > 0 ? v : void 0;
|
|
92
|
-
}
|
|
93
|
-
function resolveExtractLimits(limits) {
|
|
94
|
-
return {
|
|
95
|
-
maxArchiveBytes: clampLimit(limits?.maxArchiveBytes) ?? DEFAULT_MAX_ARCHIVE_BYTES_ZIP,
|
|
96
|
-
maxEntries: clampLimit(limits?.maxEntries) ?? DEFAULT_MAX_ENTRIES,
|
|
97
|
-
maxExtractedBytes: clampLimit(limits?.maxExtractedBytes) ?? DEFAULT_MAX_EXTRACTED_BYTES,
|
|
98
|
-
maxEntryBytes: clampLimit(limits?.maxEntryBytes) ?? DEFAULT_MAX_ENTRY_BYTES
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
function assertArchiveEntryCountWithinLimit(entryCount, limits) {
|
|
102
|
-
if (entryCount > limits.maxEntries) throw new Error(ERROR_ARCHIVE_ENTRY_COUNT_EXCEEDS_LIMIT);
|
|
103
|
-
}
|
|
104
|
-
function createByteBudgetTracker(limits) {
|
|
105
|
-
let entryBytes = 0;
|
|
106
|
-
let extractedBytes = 0;
|
|
107
|
-
const addBytes = (bytes) => {
|
|
108
|
-
const b = Math.max(0, Math.floor(bytes));
|
|
109
|
-
if (b === 0) return;
|
|
110
|
-
entryBytes += b;
|
|
111
|
-
if (entryBytes > limits.maxEntryBytes) throw new Error(ERROR_ARCHIVE_ENTRY_EXTRACTED_SIZE_EXCEEDS_LIMIT);
|
|
112
|
-
extractedBytes += b;
|
|
113
|
-
if (extractedBytes > limits.maxExtractedBytes) throw new Error(ERROR_ARCHIVE_EXTRACTED_SIZE_EXCEEDS_LIMIT);
|
|
114
|
-
};
|
|
115
|
-
return {
|
|
116
|
-
startEntry() {
|
|
117
|
-
entryBytes = 0;
|
|
118
|
-
},
|
|
119
|
-
addBytes,
|
|
120
|
-
addEntrySize(size) {
|
|
121
|
-
const s = Math.max(0, Math.floor(size));
|
|
122
|
-
if (s > limits.maxEntryBytes) throw new Error(ERROR_ARCHIVE_ENTRY_EXTRACTED_SIZE_EXCEEDS_LIMIT);
|
|
123
|
-
addBytes(s);
|
|
124
|
-
}
|
|
125
|
-
};
|
|
126
|
-
}
|
|
127
|
-
function createExtractBudgetTransform(params) {
|
|
128
|
-
return new Transform({ transform(chunk, _encoding, callback) {
|
|
129
|
-
try {
|
|
130
|
-
const buf = chunk instanceof Buffer ? chunk : Buffer.from(chunk);
|
|
131
|
-
params.onChunkBytes(buf.byteLength);
|
|
132
|
-
callback(null, buf);
|
|
133
|
-
} catch (err) {
|
|
134
|
-
callback(err instanceof Error ? err : new Error(String(err)));
|
|
135
|
-
}
|
|
136
|
-
} });
|
|
137
|
-
}
|
|
138
|
-
async function readZipEntryStream(entry) {
|
|
139
|
-
if (typeof entry.nodeStream === "function") return entry.nodeStream();
|
|
140
|
-
const buf = await entry.async("nodebuffer");
|
|
141
|
-
return Readable.from(buf);
|
|
142
|
-
}
|
|
143
|
-
async function extractZip(params) {
|
|
144
|
-
const limits = resolveExtractLimits(params.limits);
|
|
145
|
-
if ((await fs$1.stat(params.archivePath)).size > limits.maxArchiveBytes) throw new Error(ERROR_ARCHIVE_SIZE_EXCEEDS_LIMIT);
|
|
146
|
-
const buffer = await fs$1.readFile(params.archivePath);
|
|
147
|
-
const zip = await JSZip.loadAsync(buffer);
|
|
148
|
-
const entries = Object.values(zip.files);
|
|
149
|
-
const strip = Math.max(0, Math.floor(params.stripComponents ?? 0));
|
|
150
|
-
assertArchiveEntryCountWithinLimit(entries.length, limits);
|
|
151
|
-
const budget = createByteBudgetTracker(limits);
|
|
152
|
-
for (const entry of entries) {
|
|
153
|
-
validateArchiveEntryPath(entry.name);
|
|
154
|
-
const relPath = stripArchivePath(entry.name, strip);
|
|
155
|
-
if (!relPath) continue;
|
|
156
|
-
validateArchiveEntryPath(relPath);
|
|
157
|
-
const outPath = resolveCheckedOutPath(params.destDir, relPath, entry.name);
|
|
158
|
-
if (entry.dir) {
|
|
159
|
-
await fs$1.mkdir(outPath, { recursive: true });
|
|
160
|
-
continue;
|
|
161
|
-
}
|
|
162
|
-
await fs$1.mkdir(path.dirname(outPath), { recursive: true });
|
|
163
|
-
budget.startEntry();
|
|
164
|
-
const readable = await readZipEntryStream(entry);
|
|
165
|
-
try {
|
|
166
|
-
await pipeline(readable, createExtractBudgetTransform({ onChunkBytes: budget.addBytes }), createWriteStream(outPath));
|
|
167
|
-
} catch (err) {
|
|
168
|
-
await fs$1.unlink(outPath).catch(() => void 0);
|
|
169
|
-
throw err;
|
|
170
|
-
}
|
|
171
|
-
if (typeof entry.unixPermissions === "number") {
|
|
172
|
-
const mode = entry.unixPermissions & 511;
|
|
173
|
-
if (mode !== 0) await fs$1.chmod(outPath, mode).catch(() => void 0);
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
function readTarEntryInfo(entry) {
|
|
178
|
-
return {
|
|
179
|
-
path: typeof entry === "object" && entry !== null && "path" in entry ? String(entry.path) : "",
|
|
180
|
-
type: typeof entry === "object" && entry !== null && "type" in entry ? String(entry.type) : "",
|
|
181
|
-
size: typeof entry === "object" && entry !== null && "size" in entry && typeof entry.size === "number" && Number.isFinite(entry.size) ? Math.max(0, Math.floor(entry.size)) : 0
|
|
182
|
-
};
|
|
183
|
-
}
|
|
184
|
-
async function extractArchive(params) {
|
|
185
|
-
const kind = params.kind ?? resolveArchiveKind(params.archivePath);
|
|
186
|
-
if (!kind) throw new Error(`unsupported archive: ${params.archivePath}`);
|
|
187
|
-
const label = kind === "zip" ? "extract zip" : "extract tar";
|
|
188
|
-
if (kind === "tar") {
|
|
189
|
-
const strip = Math.max(0, Math.floor(params.stripComponents ?? 0));
|
|
190
|
-
const limits = resolveExtractLimits(params.limits);
|
|
191
|
-
let entryCount = 0;
|
|
192
|
-
const budget = createByteBudgetTracker(limits);
|
|
193
|
-
await withTimeout(tar.x({
|
|
194
|
-
file: params.archivePath,
|
|
195
|
-
cwd: params.destDir,
|
|
196
|
-
strip,
|
|
197
|
-
gzip: params.tarGzip,
|
|
198
|
-
preservePaths: false,
|
|
199
|
-
strict: true,
|
|
200
|
-
onReadEntry(entry) {
|
|
201
|
-
const info = readTarEntryInfo(entry);
|
|
202
|
-
try {
|
|
203
|
-
validateArchiveEntryPath(info.path);
|
|
204
|
-
const relPath = stripArchivePath(info.path, strip);
|
|
205
|
-
if (!relPath) return;
|
|
206
|
-
validateArchiveEntryPath(relPath);
|
|
207
|
-
resolveCheckedOutPath(params.destDir, relPath, info.path);
|
|
208
|
-
if (info.type === "SymbolicLink" || info.type === "Link" || info.type === "BlockDevice" || info.type === "CharacterDevice" || info.type === "FIFO" || info.type === "Socket") throw new Error(`tar entry is a link: ${info.path}`);
|
|
209
|
-
entryCount += 1;
|
|
210
|
-
assertArchiveEntryCountWithinLimit(entryCount, limits);
|
|
211
|
-
budget.addEntrySize(info.size);
|
|
212
|
-
} catch (err) {
|
|
213
|
-
const error = err instanceof Error ? err : new Error(String(err));
|
|
214
|
-
this.abort?.(error);
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
}), params.timeoutMs, label);
|
|
218
|
-
return;
|
|
219
|
-
}
|
|
220
|
-
await withTimeout(extractZip({
|
|
221
|
-
archivePath: params.archivePath,
|
|
222
|
-
destDir: params.destDir,
|
|
223
|
-
stripComponents: params.stripComponents,
|
|
224
|
-
limits: params.limits
|
|
225
|
-
}), params.timeoutMs, label);
|
|
226
|
-
}
|
|
227
|
-
async function fileExists(filePath) {
|
|
228
|
-
try {
|
|
229
|
-
await fs$1.stat(filePath);
|
|
230
|
-
return true;
|
|
231
|
-
} catch {
|
|
232
|
-
return false;
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
async function readJsonFile(filePath) {
|
|
236
|
-
const raw = await fs$1.readFile(filePath, "utf-8");
|
|
237
|
-
return JSON.parse(raw);
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
//#endregion
|
|
241
|
-
//#region src/infra/install-package-dir.ts
|
|
242
|
-
async function installPackageDir(params) {
|
|
243
|
-
params.logger?.info?.(`Installing to ${params.targetDir}…`);
|
|
244
|
-
let backupDir = null;
|
|
245
|
-
if (params.mode === "update" && await fileExists(params.targetDir)) {
|
|
246
|
-
backupDir = `${params.targetDir}.backup-${Date.now()}`;
|
|
247
|
-
await fs$1.rename(params.targetDir, backupDir);
|
|
248
|
-
}
|
|
249
|
-
const rollback = async () => {
|
|
250
|
-
if (!backupDir) return;
|
|
251
|
-
await fs$1.rm(params.targetDir, {
|
|
252
|
-
recursive: true,
|
|
253
|
-
force: true
|
|
254
|
-
}).catch(() => void 0);
|
|
255
|
-
await fs$1.rename(backupDir, params.targetDir).catch(() => void 0);
|
|
256
|
-
};
|
|
257
|
-
try {
|
|
258
|
-
await fs$1.cp(params.sourceDir, params.targetDir, { recursive: true });
|
|
259
|
-
} catch (err) {
|
|
260
|
-
await rollback();
|
|
261
|
-
return {
|
|
262
|
-
ok: false,
|
|
263
|
-
error: `${params.copyErrorPrefix}: ${String(err)}`
|
|
264
|
-
};
|
|
265
|
-
}
|
|
266
|
-
try {
|
|
267
|
-
await params.afterCopy?.();
|
|
268
|
-
} catch (err) {
|
|
269
|
-
await rollback();
|
|
270
|
-
return {
|
|
271
|
-
ok: false,
|
|
272
|
-
error: `post-copy validation failed: ${String(err)}`
|
|
273
|
-
};
|
|
274
|
-
}
|
|
275
|
-
if (params.hasDeps) {
|
|
276
|
-
params.logger?.info?.(params.depsLogMessage);
|
|
277
|
-
const npmRes = await runCommandWithTimeout([
|
|
278
|
-
"npm",
|
|
279
|
-
"install",
|
|
280
|
-
"--omit=dev",
|
|
281
|
-
"--silent",
|
|
282
|
-
"--ignore-scripts"
|
|
283
|
-
], {
|
|
284
|
-
timeoutMs: Math.max(params.timeoutMs, 3e5),
|
|
285
|
-
cwd: params.targetDir
|
|
286
|
-
});
|
|
287
|
-
if (npmRes.code !== 0) {
|
|
288
|
-
await rollback();
|
|
289
|
-
return {
|
|
290
|
-
ok: false,
|
|
291
|
-
error: `npm install failed: ${npmRes.stderr.trim() || npmRes.stdout.trim()}`
|
|
292
|
-
};
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
if (backupDir) await fs$1.rm(backupDir, {
|
|
296
|
-
recursive: true,
|
|
297
|
-
force: true
|
|
298
|
-
}).catch(() => void 0);
|
|
299
|
-
return { ok: true };
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
//#endregion
|
|
303
|
-
//#region src/infra/install-safe-path.ts
|
|
304
|
-
function unscopedPackageName(name) {
|
|
305
|
-
const trimmed = name.trim();
|
|
306
|
-
if (!trimmed) return trimmed;
|
|
307
|
-
return trimmed.includes("/") ? trimmed.split("/").pop() ?? trimmed : trimmed;
|
|
308
|
-
}
|
|
309
|
-
function safeDirName(input) {
|
|
310
|
-
const trimmed = input.trim();
|
|
311
|
-
if (!trimmed) return trimmed;
|
|
312
|
-
return trimmed.replaceAll("/", "__").replaceAll("\\", "__");
|
|
313
|
-
}
|
|
314
|
-
function resolveSafeInstallDir(params) {
|
|
315
|
-
const targetDir = path.join(params.baseDir, safeDirName(params.id));
|
|
316
|
-
const resolvedBase = path.resolve(params.baseDir);
|
|
317
|
-
const resolvedTarget = path.resolve(targetDir);
|
|
318
|
-
const relative = path.relative(resolvedBase, resolvedTarget);
|
|
319
|
-
if (!relative || relative === ".." || relative.startsWith(`..${path.sep}`) || path.isAbsolute(relative)) return {
|
|
320
|
-
ok: false,
|
|
321
|
-
error: params.invalidNameMessage
|
|
322
|
-
};
|
|
323
|
-
return {
|
|
324
|
-
ok: true,
|
|
325
|
-
path: targetDir
|
|
326
|
-
};
|
|
327
|
-
}
|
|
328
|
-
|
|
329
|
-
//#endregion
|
|
330
|
-
//#region src/infra/npm-registry-spec.ts
|
|
331
|
-
function validateRegistryNpmSpec(rawSpec) {
|
|
332
|
-
const spec = rawSpec.trim();
|
|
333
|
-
if (!spec) return "missing npm spec";
|
|
334
|
-
if (/\s/.test(spec)) return "unsupported npm spec: whitespace is not allowed";
|
|
335
|
-
if (spec.includes("://")) return "unsupported npm spec: URLs are not allowed";
|
|
336
|
-
if (spec.includes("#")) return "unsupported npm spec: git refs are not allowed";
|
|
337
|
-
if (spec.includes(":")) return "unsupported npm spec: protocol specs are not allowed";
|
|
338
|
-
const at = spec.lastIndexOf("@");
|
|
339
|
-
const hasVersion = at > 0;
|
|
340
|
-
const name = hasVersion ? spec.slice(0, at) : spec;
|
|
341
|
-
const version = hasVersion ? spec.slice(at + 1) : "";
|
|
342
|
-
if (!(name.startsWith("@") ? /^@[a-z0-9][a-z0-9-._~]*\/[a-z0-9][a-z0-9-._~]*$/.test(name) : /^[a-z0-9][a-z0-9-._~]*$/.test(name))) return "unsupported npm spec: expected <name> or <name>@<version> from the npm registry";
|
|
343
|
-
if (hasVersion) {
|
|
344
|
-
if (!version) return "unsupported npm spec: missing version/tag after @";
|
|
345
|
-
if (/[\\/]/.test(version)) return "unsupported npm spec: invalid version/tag";
|
|
346
|
-
}
|
|
347
|
-
return null;
|
|
348
|
-
}
|
|
349
|
-
|
|
350
|
-
//#endregion
|
|
351
|
-
export { installPackageDir as a, readJsonFile as c, unscopedPackageName as i, resolveArchiveKind as l, resolveSafeInstallDir as n, extractArchive as o, safeDirName as r, fileExists as s, validateRegistryNpmSpec as t, resolvePackedRootDir as u };
|