@pi-chamber/web 0.1.8
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 +43 -0
- package/bin/cli-entry.js +55 -0
- package/bin/cli-output.js +140 -0
- package/bin/cli-output.test.js +36 -0
- package/bin/cli.js +383 -0
- package/bin/cli.test.js +1065 -0
- package/bin/lib/DOCUMENTATION.md +31 -0
- package/bin/lib/cli-api-target.js +74 -0
- package/bin/lib/cli-args.js +846 -0
- package/bin/lib/cli-errors.js +18 -0
- package/bin/lib/cli-http.js +252 -0
- package/bin/lib/cli-lifecycle.js +421 -0
- package/bin/lib/cli-log-files.js +93 -0
- package/bin/lib/cli-network.js +186 -0
- package/bin/lib/cli-paths.js +128 -0
- package/bin/lib/cli-ports.js +51 -0
- package/bin/lib/cli-process.js +342 -0
- package/bin/lib/cli-startup.js +371 -0
- package/bin/lib/cli-tunnel-capabilities.js +9 -0
- package/bin/lib/cli-tunnel-profiles.js +366 -0
- package/bin/lib/cli-tunnel-utils.js +300 -0
- package/bin/lib/commands-connect-url.js +329 -0
- package/bin/lib/commands-lifecycle.js +396 -0
- package/bin/lib/commands-logs.js +110 -0
- package/bin/lib/commands-serve.js +419 -0
- package/bin/lib/commands-startup.js +64 -0
- package/bin/lib/commands-status.js +114 -0
- package/bin/lib/commands-tunnel.js +1761 -0
- package/bin/lib/commands-update.js +184 -0
- package/bin/lib/commands-update.test.js +98 -0
- package/dist/apple-touch-icon-120x120.png +0 -0
- package/dist/apple-touch-icon-152x152.png +0 -0
- package/dist/apple-touch-icon-167x167.png +0 -0
- package/dist/apple-touch-icon-180x180.png +0 -0
- package/dist/apple-touch-icon.png +0 -0
- package/dist/apple-touch-icon.svg +13 -0
- package/dist/assets/CommitSection-DGGArAb2.js +1 -0
- package/dist/assets/DiagramEditor-ig5nYV6t.js +1 -0
- package/dist/assets/DiagramView-8Qr6pwwI.js +1 -0
- package/dist/assets/DiffView-BHS4m_K7.js +18 -0
- package/dist/assets/FilesView-DmZcdwl-.js +14 -0
- package/dist/assets/GitView-gfHxmc66.js +6 -0
- package/dist/assets/JsonTreeView-DbFqka3P.js +1 -0
- package/dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- package/dist/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- package/dist/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- package/dist/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- package/dist/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- package/dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- package/dist/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- package/dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- package/dist/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- package/dist/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- package/dist/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- package/dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- package/dist/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- package/dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- package/dist/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- package/dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- package/dist/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- package/dist/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- package/dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- package/dist/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- package/dist/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- package/dist/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- package/dist/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- package/dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- package/dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- package/dist/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- package/dist/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- package/dist/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- package/dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- package/dist/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- package/dist/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- package/dist/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- package/dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- package/dist/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- package/dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- package/dist/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- package/dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- package/dist/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- package/dist/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- package/dist/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- package/dist/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- package/dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- package/dist/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- package/dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- package/dist/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- package/dist/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- package/dist/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- package/dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- package/dist/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- package/dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- package/dist/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- package/dist/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- package/dist/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- package/dist/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- package/dist/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- package/dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- package/dist/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- package/dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- package/dist/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- package/dist/assets/MarkdownRendererImpl-B07lHhBl.js +12 -0
- package/dist/assets/PatchDiff-DD9pAs47.js +1 -0
- package/dist/assets/PierreDiffViewer-Bo0_BCT7.js +136 -0
- package/dist/assets/SessionSwitcherDropdown-t7WZX24f.js +1 -0
- package/dist/assets/SettingsView-CtsS4oDI.js +3 -0
- package/dist/assets/SettingsWindow-DIRGn3eQ.js +1 -0
- package/dist/assets/TerminalView-BV3KOtdA.css +1 -0
- package/dist/assets/TerminalView-DUwO1CCY.js +46 -0
- package/dist/assets/ToolOutputDialog-iZG2ey4T.js +15 -0
- package/dist/assets/ToolPartDiffPreview-FTexlZSz.js +8 -0
- package/dist/assets/VirtualizedFileDiff-DD5IznIe.js +10 -0
- package/dist/assets/Virtualizer-BxW2CJGB.js +1 -0
- package/dist/assets/abap-BdImnpbu.js +1 -0
- package/dist/assets/abap-Dg923wIy.js +1 -0
- package/dist/assets/actionscript-3-8WTK4YD2.js +1 -0
- package/dist/assets/actionscript-3-CoDkCxhg.js +1 -0
- package/dist/assets/ada-CTi7YQtL.js +1 -0
- package/dist/assets/ada-bCR0ucgS.js +1 -0
- package/dist/assets/andromeeda-C4gqWexZ.js +1 -0
- package/dist/assets/andromeeda-CT0vplkN.js +1 -0
- package/dist/assets/angular-html-CU67Zn6k.js +1 -0
- package/dist/assets/angular-html-D2R1pe45.js +1 -0
- package/dist/assets/angular-ts-BDmYQnhm.js +1 -0
- package/dist/assets/angular-ts-BwZT4LLn.js +1 -0
- package/dist/assets/apache-PcO-DBxQ.js +1 -0
- package/dist/assets/apache-Pmp26Uib.js +1 -0
- package/dist/assets/apex-CnCu5_gb.js +1 -0
- package/dist/assets/apex-D8_7TLub.js +1 -0
- package/dist/assets/apl-B4CMkyY2.js +1 -0
- package/dist/assets/apl-DkfyvC6M.js +1 -0
- package/dist/assets/apl-dKokRX4l.js +1 -0
- package/dist/assets/appThemeRegistry-BK0dHKa6.js +1 -0
- package/dist/assets/applescript-Co6uUVPk.js +1 -0
- package/dist/assets/applescript-Ds_W2jPS.js +1 -0
- package/dist/assets/ara-BRHolxvo.js +1 -0
- package/dist/assets/ara-C1--7J61.js +1 -0
- package/dist/assets/asciiarmor-Df11BRmG.js +1 -0
- package/dist/assets/asciidoc-Ve4PFQV2.js +1 -0
- package/dist/assets/asciidoc-nTfEFGxb.js +1 -0
- package/dist/assets/asm-CTFRnVOM.js +1 -0
- package/dist/assets/asm-D_Q5rh1f.js +1 -0
- package/dist/assets/asn1-EdZsLKOL.js +1 -0
- package/dist/assets/asterisk-B-8jnY81.js +1 -0
- package/dist/assets/astro-CbQHKStN.js +1 -0
- package/dist/assets/astro-DtPAdMss.js +1 -0
- package/dist/assets/aurora-x-C0VKFdlO.js +1 -0
- package/dist/assets/aurora-x-D-2ljcwZ.js +1 -0
- package/dist/assets/awk-CrWgQKhV.js +1 -0
- package/dist/assets/awk-DMzUqQB5.js +1 -0
- package/dist/assets/ayu-dark-DYE7WIF3.js +1 -0
- package/dist/assets/ayu-dark-wZ6ORhBL.js +1 -0
- package/dist/assets/ayu-light-BA47KaF1.js +1 -0
- package/dist/assets/ayu-light-xXLJ_Ch1.js +1 -0
- package/dist/assets/ayu-mirage-32ctXXKs.js +1 -0
- package/dist/assets/ayu-mirage-CQckA_sP.js +1 -0
- package/dist/assets/ballerina-BFfxhgS-.js +1 -0
- package/dist/assets/ballerina-a0yOSyc5.js +1 -0
- package/dist/assets/bat-B0cHNp6s.js +1 -0
- package/dist/assets/bat-BkioyH1T.js +1 -0
- package/dist/assets/beancount-dPJi_gci.js +1 -0
- package/dist/assets/beancount-k_qm7-4y.js +1 -0
- package/dist/assets/berry-CVKoklHx.js +1 -0
- package/dist/assets/berry-uYugtg8r.js +1 -0
- package/dist/assets/bibtex-CHM0blh-.js +1 -0
- package/dist/assets/bibtex-DRcCXNgM.js +1 -0
- package/dist/assets/bicep-Bmn6On1c.js +1 -0
- package/dist/assets/bicep-jWz-hQ8I.js +1 -0
- package/dist/assets/bird2-DPOp833l.js +1 -0
- package/dist/assets/bird2-DaGXIRGu.js +1 -0
- package/dist/assets/blade-D4QpJJKB.js +1 -0
- package/dist/assets/blade-QlWdzBxO.js +1 -0
- package/dist/assets/brainfuck-C4LP7Hcl.js +1 -0
- package/dist/assets/bsl-BO_Y6i37.js +1 -0
- package/dist/assets/bsl-jNujDQK2.js +1 -0
- package/dist/assets/c-BG-tZi7o.js +1 -0
- package/dist/assets/c-BIGW1oBm.js +1 -0
- package/dist/assets/c3-Fcb8_HKm.js +1 -0
- package/dist/assets/c3-eo99z4R2.js +1 -0
- package/dist/assets/cadence-BuaeHeSu.js +1 -0
- package/dist/assets/cadence-Bv_4Rxtq.js +1 -0
- package/dist/assets/cairo-BYiDgOF2.js +1 -0
- package/dist/assets/cairo-KRGpt6FW.js +1 -0
- package/dist/assets/catppuccin-frappe-CfssSZMA.js +1 -0
- package/dist/assets/catppuccin-frappe-DFWUc33u.js +1 -0
- package/dist/assets/catppuccin-latte-C9dUb6Cb.js +1 -0
- package/dist/assets/catppuccin-latte-DoBaWTGn.js +1 -0
- package/dist/assets/catppuccin-macchiato-BkAuvdZC.js +1 -0
- package/dist/assets/catppuccin-macchiato-DQyhUUbL.js +1 -0
- package/dist/assets/catppuccin-mocha-D87Tk5Gz.js +1 -0
- package/dist/assets/catppuccin-mocha-D9fcC0iT.js +1 -0
- package/dist/assets/clarity-CC_0IFDj.js +1 -0
- package/dist/assets/clarity-D53aC0YG.js +1 -0
- package/dist/assets/clike-B9uivgTg.js +1 -0
- package/dist/assets/clojure-BMjYHr_A.js +1 -0
- package/dist/assets/clojure-KnfDkB_V.js +1 -0
- package/dist/assets/clojure-P80f7IUj.js +1 -0
- package/dist/assets/cmake-BQqOBYOt.js +1 -0
- package/dist/assets/cmake-D1j8_8rp.js +1 -0
- package/dist/assets/cmake-bh2MLnkv.js +1 -0
- package/dist/assets/cobol-CWcv1MsR.js +1 -0
- package/dist/assets/cobol-dIXRVV9Y.js +1 -0
- package/dist/assets/cobol-nwyudZeR.js +1 -0
- package/dist/assets/codeowners-Bp6g37R7.js +1 -0
- package/dist/assets/codeowners-CtwIM3TN.js +1 -0
- package/dist/assets/codeql-D164juXQ.js +1 -0
- package/dist/assets/codeql-DsOJ9woJ.js +1 -0
- package/dist/assets/coffee-Bk-z6oI_.js +1 -0
- package/dist/assets/coffee-Ch7k5sss.js +1 -0
- package/dist/assets/coffeescript-S37ZYGWr.js +1 -0
- package/dist/assets/collapsible-ODWWxk4f.js +1 -0
- package/dist/assets/common-lisp-Cg-RD9OK.js +1 -0
- package/dist/assets/common-lisp-DXc9XcIM.js +1 -0
- package/dist/assets/commonlisp-DBKNyK5s.js +1 -0
- package/dist/assets/computeVirtualFileMetrics-DdXkLFAD.js +3 -0
- package/dist/assets/contextFileOpenGuard-uC4OerzL.js +1 -0
- package/dist/assets/coq-BBL5-mG4.js +1 -0
- package/dist/assets/coq-DkFqJrB1.js +1 -0
- package/dist/assets/cpp-C0lzDePx.js +1 -0
- package/dist/assets/cpp-CofmeUqb.js +1 -0
- package/dist/assets/crystal-Bhade0k2.js +1 -0
- package/dist/assets/crystal-SjHAIU92.js +1 -0
- package/dist/assets/crystal-tKQVLTB8.js +1 -0
- package/dist/assets/csharp-B7nLXyi8.js +1 -0
- package/dist/assets/csharp-COcwbKMJ.js +1 -0
- package/dist/assets/css-BnMrqG3P.js +1 -0
- package/dist/assets/css-DPfMkruS.js +1 -0
- package/dist/assets/css-PZBBrkI0.js +1 -0
- package/dist/assets/csv-D5aBhKLr.js +1 -0
- package/dist/assets/csv-fuZLfV_i.js +1 -0
- package/dist/assets/cue-D82EKSYY.js +1 -0
- package/dist/assets/cue-WCin6O4e.js +1 -0
- package/dist/assets/cypher-COkxafJQ.js +1 -0
- package/dist/assets/cypher-C_CwsFkJ.js +1 -0
- package/dist/assets/cypher-DYQk2G82.js +1 -0
- package/dist/assets/d-85-TOEBH.js +1 -0
- package/dist/assets/d-DVc-yF-l.js +1 -0
- package/dist/assets/d-pRatUO7H.js +1 -0
- package/dist/assets/dark-plus-C3mMm8J8.js +1 -0
- package/dist/assets/dark-plus-DLU5INA3.js +1 -0
- package/dist/assets/dart-CF10PKvl.js +1 -0
- package/dist/assets/dart-YLd5yyRs.js +1 -0
- package/dist/assets/dax-CEL-wOlO.js +1 -0
- package/dist/assets/dax-oldcCaJg.js +1 -0
- package/dist/assets/desktop-BmXAJ9_W.js +1 -0
- package/dist/assets/desktop-DZfyBMgF.js +1 -0
- package/dist/assets/diff-D97Zzqfu.js +1 -0
- package/dist/assets/diff-DbItnlRl.js +1 -0
- package/dist/assets/diff-jW5kmiru.js +1 -0
- package/dist/assets/docker-BcOcwvcX.js +1 -0
- package/dist/assets/docker-DG9neUKd.js +1 -0
- package/dist/assets/dockerfile-BKs6k2Af.js +1 -0
- package/dist/assets/document-attachments-BslE4Ns7.js +30 -0
- package/dist/assets/dotenv-Bea-FkXq.js +1 -0
- package/dist/assets/dotenv-Da5cRb03.js +1 -0
- package/dist/assets/dracula-BzJJZx-M.js +1 -0
- package/dist/assets/dracula-XcYHBZy6.js +1 -0
- package/dist/assets/dracula-soft-BPeX9gxW.js +1 -0
- package/dist/assets/dracula-soft-BXkSAIEj.js +1 -0
- package/dist/assets/dream-maker-BtqSS_iP.js +1 -0
- package/dist/assets/dream-maker-DAHQwpwp.js +1 -0
- package/dist/assets/dtd-DF_7sFjM.js +1 -0
- package/dist/assets/dylan-DwRh75JA.js +1 -0
- package/dist/assets/ebnf-CDyGwa7X.js +1 -0
- package/dist/assets/ecl-Cabwm37j.js +1 -0
- package/dist/assets/edge-BkV0erSs.js +1 -0
- package/dist/assets/edge-zt3dU95k.js +1 -0
- package/dist/assets/eiffel-CnydiIhH.js +1 -0
- package/dist/assets/elixir-CDX3lj18.js +1 -0
- package/dist/assets/elixir-JolcG37e.js +1 -0
- package/dist/assets/elm-BjIDgKzz.js +1 -0
- package/dist/assets/elm-DbKCFpqz.js +1 -0
- package/dist/assets/elm-vLlmbW-K.js +1 -0
- package/dist/assets/emacs-lisp-C9XAeP06.js +1 -0
- package/dist/assets/emacs-lisp-DMBh55R4.js +1 -0
- package/dist/assets/erb-B12qg9BL.js +1 -0
- package/dist/assets/erb-rsjdL4fB.js +1 -0
- package/dist/assets/erlang-BNw1qcRV.js +1 -0
- package/dist/assets/erlang-DNeY46SW.js +1 -0
- package/dist/assets/erlang-DsQrWhSR.js +1 -0
- package/dist/assets/everforest-dark-BgDCqdQA.js +1 -0
- package/dist/assets/everforest-dark-WOub3wle.js +1 -0
- package/dist/assets/everforest-light-C8M2exoo.js +1 -0
- package/dist/assets/everforest-light-DCUg8VH8.js +1 -0
- package/dist/assets/factor-kuTfRLto.js +1 -0
- package/dist/assets/fcl-Kvtd6kyn.js +1 -0
- package/dist/assets/fennel-BYunw83y.js +1 -0
- package/dist/assets/fennel-DBMsxtrh.js +1 -0
- package/dist/assets/fish-BvzEVeQv.js +1 -0
- package/dist/assets/fish-BxskpYPN.js +1 -0
- package/dist/assets/fluent-Bwo2XpEt.js +1 -0
- package/dist/assets/fluent-C4IJs8-o.js +1 -0
- package/dist/assets/forth-Ffai-XNe.js +1 -0
- package/dist/assets/fortran-DYz_wnZ1.js +1 -0
- package/dist/assets/fortran-fixed-form-CkoXwp7k.js +1 -0
- package/dist/assets/fortran-fixed-form-DFFnVrrY.js +1 -0
- package/dist/assets/fortran-free-form-BxgE0vQu.js +1 -0
- package/dist/assets/fortran-free-form-DB5N_DgY.js +1 -0
- package/dist/assets/fsharp-CXgrBDvD.js +1 -0
- package/dist/assets/fsharp-DRAF1jsN.js +1 -0
- package/dist/assets/gas-Bneqetm1.js +1 -0
- package/dist/assets/gdresource-BD-1uzY7.js +1 -0
- package/dist/assets/gdresource-BOOCDP_w.js +1 -0
- package/dist/assets/gdscript-C3mT4Uym.js +1 -0
- package/dist/assets/gdscript-C5YyOfLZ.js +1 -0
- package/dist/assets/gdshader-DkwncUOv.js +1 -0
- package/dist/assets/gdshader-G7X6ysY3.js +1 -0
- package/dist/assets/genie-D0YGMca9.js +1 -0
- package/dist/assets/genie-DSsjfZMX.js +1 -0
- package/dist/assets/gherkin-Cl2Fw-_0.js +1 -0
- package/dist/assets/gherkin-DyxjwDmM.js +1 -0
- package/dist/assets/gherkin-heZmZLOM.js +1 -0
- package/dist/assets/git-commit-CJPsQObV.js +1 -0
- package/dist/assets/git-commit-F4YmCXRG.js +1 -0
- package/dist/assets/git-rebase-DeZqv4fp.js +1 -0
- package/dist/assets/git-rebase-r7XF79zn.js +1 -0
- package/dist/assets/github-dark-BQV5ugrc.js +1 -0
- package/dist/assets/github-dark-DHJKELXO.js +1 -0
- package/dist/assets/github-dark-default-Cuk6v7N8.js +1 -0
- package/dist/assets/github-dark-default-DLWDM7FH.js +1 -0
- package/dist/assets/github-dark-dimmed-D1FmiR_p.js +1 -0
- package/dist/assets/github-dark-dimmed-DH5Ifo-i.js +1 -0
- package/dist/assets/github-dark-high-contrast-BilLoi0o.js +1 -0
- package/dist/assets/github-dark-high-contrast-E3gJ1_iC.js +1 -0
- package/dist/assets/github-light-DAi9KRSo.js +1 -0
- package/dist/assets/github-light-Rcb2q3L5.js +1 -0
- package/dist/assets/github-light-default-CQ75esMw.js +1 -0
- package/dist/assets/github-light-default-D7oLnXFd.js +1 -0
- package/dist/assets/github-light-high-contrast-BfjtVDDH.js +1 -0
- package/dist/assets/github-light-high-contrast-CRF1wyLy.js +1 -0
- package/dist/assets/gleam-BeBqoPwE.js +1 -0
- package/dist/assets/gleam-BspZqrRM.js +1 -0
- package/dist/assets/glimmer-js-BuyKUjfV.js +1 -0
- package/dist/assets/glimmer-js-Rg0-pVw9.js +1 -0
- package/dist/assets/glimmer-ts-D9iniPFN.js +1 -0
- package/dist/assets/glimmer-ts-U6CK756n.js +1 -0
- package/dist/assets/glsl-BOG9l2nV.js +1 -0
- package/dist/assets/glsl-DplSGwfg.js +1 -0
- package/dist/assets/gn-Dxr0sSUf.js +1 -0
- package/dist/assets/gn-n2N0HUVH.js +1 -0
- package/dist/assets/gnuplot-CtW3R_Hz.js +1 -0
- package/dist/assets/gnuplot-DdkO51Og.js +1 -0
- package/dist/assets/go-BBr2UQCn.js +1 -0
- package/dist/assets/go-CxLEBnE3.js +1 -0
- package/dist/assets/graphql-B6XHM4uj.js +1 -0
- package/dist/assets/graphql-ChdNCCLP.js +1 -0
- package/dist/assets/groovy-D9Dt4D0W.js +1 -0
- package/dist/assets/groovy-DFxE31Qs.js +1 -0
- package/dist/assets/groovy-gcz8RCvz.js +1 -0
- package/dist/assets/gruvbox-dark-hard-C37G1gbc.js +1 -0
- package/dist/assets/gruvbox-dark-hard-CFHQjOhq.js +1 -0
- package/dist/assets/gruvbox-dark-medium-C3G9m3TV.js +1 -0
- package/dist/assets/gruvbox-dark-medium-GsRaNv29.js +1 -0
- package/dist/assets/gruvbox-dark-soft-CVdnzihN.js +1 -0
- package/dist/assets/gruvbox-dark-soft-eZmcmZ9I.js +1 -0
- package/dist/assets/gruvbox-light-hard-BYj-vz_3.js +1 -0
- package/dist/assets/gruvbox-light-hard-CH1njM8p.js +1 -0
- package/dist/assets/gruvbox-light-medium-BdQlDiiF.js +1 -0
- package/dist/assets/gruvbox-light-medium-DRw_LuNl.js +1 -0
- package/dist/assets/gruvbox-light-soft-BGNwjiRh.js +1 -0
- package/dist/assets/gruvbox-light-soft-hJgmCMqR.js +1 -0
- package/dist/assets/hack-CaT9iCJl.js +1 -0
- package/dist/assets/hack-Cxa-FaZ4.js +1 -0
- package/dist/assets/haml-2e0EI6Is.js +1 -0
- package/dist/assets/haml-B8DHNrY2.js +1 -0
- package/dist/assets/handlebars-BL8al0AC.js +1 -0
- package/dist/assets/handlebars-CojHdNmS.js +1 -0
- package/dist/assets/haskell-BfdhR_WN.js +1 -0
- package/dist/assets/haskell-Cw1EW3IL.js +1 -0
- package/dist/assets/haskell-Df6bDoY_.js +1 -0
- package/dist/assets/haxe-CzTSHFRz.js +1 -0
- package/dist/assets/haxe-DVIybFAS.js +1 -0
- package/dist/assets/haxe-H-WmDvRZ.js +1 -0
- package/dist/assets/hcl-B6OePqme.js +1 -0
- package/dist/assets/hcl-BWvSN4gD.js +1 -0
- package/dist/assets/hjson-D2jn7IRw.js +1 -0
- package/dist/assets/hjson-D5-asLiD.js +1 -0
- package/dist/assets/hlsl-D3lLCCz7.js +1 -0
- package/dist/assets/hlsl-MKeth5V9.js +1 -0
- package/dist/assets/horizon-BUw7H-hv.js +1 -0
- package/dist/assets/horizon-bright-Cn-bp-IR.js +1 -0
- package/dist/assets/horizon-bright-CoQRYDvy.js +1 -0
- package/dist/assets/horizon-cslQss18.js +1 -0
- package/dist/assets/houston-DnULxvSX.js +1 -0
- package/dist/assets/houston-RHIKkNfR.js +1 -0
- package/dist/assets/html-DOf0XnR2.js +1 -0
- package/dist/assets/html-GMplVEZG.js +1 -0
- package/dist/assets/html-derivative-BFtXZ54Q.js +1 -0
- package/dist/assets/html-derivative-DfCZ6Hio.js +1 -0
- package/dist/assets/http-CG3jvXcS.js +1 -0
- package/dist/assets/http-DBlCnlav.js +1 -0
- package/dist/assets/http-jrhK8wxY.js +1 -0
- package/dist/assets/hurl-CxQrh4RI.js +1 -0
- package/dist/assets/hurl-irOxFIW8.js +1 -0
- package/dist/assets/hxml-Bvhsp5Yf.js +1 -0
- package/dist/assets/hxml-CkS3Eie7.js +1 -0
- package/dist/assets/hy-DFXneXwc.js +1 -0
- package/dist/assets/hy-DI6mCUnw.js +1 -0
- package/dist/assets/idl-BEugSyMb.js +1 -0
- package/dist/assets/imba-D-Pk5S0X.js +1 -0
- package/dist/assets/imba-DGztddWO.js +1 -0
- package/dist/assets/index-CRB7i1S2.js +8 -0
- package/dist/assets/index-C_Mo87uS.css +1 -0
- package/dist/assets/index-MSKFS67y.js +1 -0
- package/dist/assets/ini-BEwlwnbL.js +1 -0
- package/dist/assets/ini-Dix3pTmg.js +1 -0
- package/dist/assets/isDiffPlainText-CeCQwHA2.js +1 -0
- package/dist/assets/isFilePlainText-BcfhE9FH.js +1 -0
- package/dist/assets/java-BTDmaRNO.js +1 -0
- package/dist/assets/java-CylS5w8V.js +1 -0
- package/dist/assets/javascript-BO_2ioGC.js +1 -0
- package/dist/assets/javascript-WyGyM1wV.js +1 -0
- package/dist/assets/javascript-wDzz0qaB.js +1 -0
- package/dist/assets/jinja-4LBKfQ-Z.js +1 -0
- package/dist/assets/jinja-D0mZ3q2r.js +1 -0
- package/dist/assets/jison-B9XHrcYJ.js +1 -0
- package/dist/assets/jison-wvAkD_A8.js +1 -0
- package/dist/assets/json-B8JryHcM.js +1 -0
- package/dist/assets/json-Cp-IABpG.js +1 -0
- package/dist/assets/json5-C9tS-k6U.js +1 -0
- package/dist/assets/json5-Cdatmj9n.js +1 -0
- package/dist/assets/jsonc-CvUCa1o5.js +1 -0
- package/dist/assets/jsonc-Des-eS-w.js +1 -0
- package/dist/assets/jsonl-9I_GBd5L.js +1 -0
- package/dist/assets/jsonl-DcaNXYhu.js +1 -0
- package/dist/assets/jsonnet-DFQXde-d.js +1 -0
- package/dist/assets/jsonnet-XoenQ2oc.js +1 -0
- package/dist/assets/jssm-C2t-YnRu.js +1 -0
- package/dist/assets/jssm-CWE2S0Z5.js +1 -0
- package/dist/assets/jsx-8cLv2Six.js +1 -0
- package/dist/assets/jsx-g9-lgVsj.js +1 -0
- package/dist/assets/julia-C1oINnwa.js +1 -0
- package/dist/assets/julia-CxzCAyBv.js +1 -0
- package/dist/assets/julia-DuME0IfC.js +1 -0
- package/dist/assets/just-Bo3fV9RY.js +1 -0
- package/dist/assets/just-Cw27pwNe.js +1 -0
- package/dist/assets/kanagawa-dragon-BOvIHJVT.js +1 -0
- package/dist/assets/kanagawa-dragon-CkXjmgJE.js +1 -0
- package/dist/assets/kanagawa-lotus-Bwcd7Bvx.js +1 -0
- package/dist/assets/kanagawa-lotus-CfQXZHmo.js +1 -0
- package/dist/assets/kanagawa-wave-0SAlpf0s.js +1 -0
- package/dist/assets/kanagawa-wave-DWedfzmr.js +1 -0
- package/dist/assets/kdl-CMbyIXjQ.js +1 -0
- package/dist/assets/kdl-DV7GczEv.js +1 -0
- package/dist/assets/kimi-for-coding-eVEHug_h.svg +3 -0
- package/dist/assets/kotlin-BQy537ds.js +1 -0
- package/dist/assets/kotlin-BdnUsdx6.js +1 -0
- package/dist/assets/kusto-B_y0uMaZ.js +1 -0
- package/dist/assets/kusto-DZf3V79B.js +1 -0
- package/dist/assets/laserwave-DUszq2jm.js +1 -0
- package/dist/assets/laserwave-si7wuSrt.js +1 -0
- package/dist/assets/latex-CWtU0Tv5.js +1 -0
- package/dist/assets/latex-CZAhoKip.js +1 -0
- package/dist/assets/lean-BZvkOJ9d.js +1 -0
- package/dist/assets/lean-C4RHkN41.js +1 -0
- package/dist/assets/less-B1dDrJ26.js +1 -0
- package/dist/assets/less-XNfgnZC7.js +1 -0
- package/dist/assets/light-plus-B7mTdjB0.js +1 -0
- package/dist/assets/light-plus-g_Fi9vkG.js +1 -0
- package/dist/assets/liquid-DFlqVvG0.js +1 -0
- package/dist/assets/liquid-DYVedYrR.js +1 -0
- package/dist/assets/livescript-BwQOo05w.js +1 -0
- package/dist/assets/llmapi-detailed-Pup_107f.svg +28 -0
- package/dist/assets/llvm-BJRUtCev.js +1 -0
- package/dist/assets/llvm-DjAJT7YJ.js +1 -0
- package/dist/assets/log-2UxHyX5q.js +1 -0
- package/dist/assets/log-CcaF_xNv.js +1 -0
- package/dist/assets/logo-BtOb2qkB.js +1 -0
- package/dist/assets/logo-D9WQLoKQ.js +1 -0
- package/dist/assets/lua-8Av-h-ns.js +1 -0
- package/dist/assets/lua-BaeVxFsk.js +1 -0
- package/dist/assets/lua-BgMRiT3U.js +1 -0
- package/dist/assets/luau-BTSFCcFb.js +1 -0
- package/dist/assets/luau-C-HG3fhB.js +1 -0
- package/dist/assets/main-CPygRDd9.js +134 -0
- package/dist/assets/main-DZg4qzOe.js +2 -0
- package/dist/assets/make-CHLpvVh8.js +1 -0
- package/dist/assets/make-DXVx14cr.js +1 -0
- package/dist/assets/markdown-Cvjx9yec.js +1 -0
- package/dist/assets/markdown-DX-TNHnc.js +1 -0
- package/dist/assets/markdown-shiki.worker-DnvH1S1x.js +12 -0
- package/dist/assets/markdownCore-BULtt6Xa.js +2 -0
- package/dist/assets/marko-CnJfTvn9.js +1 -0
- package/dist/assets/marko-DiIoNBFw.js +1 -0
- package/dist/assets/material-theme-CIJ3cGaW.js +1 -0
- package/dist/assets/material-theme-D5KoaKCx.js +1 -0
- package/dist/assets/material-theme-darker-BWg3m1GB.js +1 -0
- package/dist/assets/material-theme-darker-BfHTSMKl.js +1 -0
- package/dist/assets/material-theme-lighter-B0m2ddpp.js +1 -0
- package/dist/assets/material-theme-lighter-DR8HWMN7.js +1 -0
- package/dist/assets/material-theme-ocean-CZf9pk28.js +1 -0
- package/dist/assets/material-theme-ocean-CyktbL80.js +1 -0
- package/dist/assets/material-theme-palenight-BF01YeZy.js +1 -0
- package/dist/assets/material-theme-palenight-Csfq5Kiy.js +1 -0
- package/dist/assets/mathematica-DTrFuWx2.js +1 -0
- package/dist/assets/matlab-D7o27uSR.js +1 -0
- package/dist/assets/matlab-DzreyMvm.js +1 -0
- package/dist/assets/mbox-CNhZ1qSd.js +1 -0
- package/dist/assets/mdc-BMNejdWA.js +1 -0
- package/dist/assets/mdc-D_DpLax5.js +1 -0
- package/dist/assets/mdx-C2fqO2XY.js +1 -0
- package/dist/assets/mdx-Cmh6b_Ma.js +1 -0
- package/dist/assets/mermaid-Cwy4Up_p.js +1 -0
- package/dist/assets/mermaid-mWjccvbQ.js +1 -0
- package/dist/assets/min-dark-CafNBF8u.js +1 -0
- package/dist/assets/min-dark-DhfaepVE.js +1 -0
- package/dist/assets/min-light-6xx0uMgm.js +1 -0
- package/dist/assets/min-light-CTRr51gU.js +1 -0
- package/dist/assets/miniChat-BFotDgpO.js +2 -0
- package/dist/assets/mipsasm-CKIfxQSi.js +1 -0
- package/dist/assets/mipsasm-yE_Aqo9y.js +1 -0
- package/dist/assets/mirc-CjQqDB4T.js +1 -0
- package/dist/assets/mllike-BO34x3tv.js +1 -0
- package/dist/assets/mobile-3LLzhN5Q.js +2 -0
- package/dist/assets/modelica-Dc1JOy9r.js +1 -0
- package/dist/assets/mojo-M6pJPbMk.js +1 -0
- package/dist/assets/mojo-rZm6bMo-.js +1 -0
- package/dist/assets/monokai-BodnsaDQ.js +1 -0
- package/dist/assets/monokai-D4h5O-jR.js +1 -0
- package/dist/assets/moonbit-CR8uFLGd.js +1 -0
- package/dist/assets/moonbit-_H4v1dQx.js +1 -0
- package/dist/assets/move-CyYMWVy5.js +1 -0
- package/dist/assets/move-IF9eRakj.js +1 -0
- package/dist/assets/mscgen-BA5vi2Kp.js +1 -0
- package/dist/assets/mumps-BT43cFF4.js +1 -0
- package/dist/assets/narrat-DRg8JJMk.js +1 -0
- package/dist/assets/narrat-DXUZ_ZkW.js +1 -0
- package/dist/assets/nextflow-BPolriEg.js +1 -0
- package/dist/assets/nextflow-Zz6hmt5N.js +1 -0
- package/dist/assets/nextflow-groovy-BeH2EWoN.js +1 -0
- package/dist/assets/nextflow-groovy-pQRwk_Jg.js +1 -0
- package/dist/assets/nginx-BpAMiNFr.js +1 -0
- package/dist/assets/nginx-DSXkacNc.js +1 -0
- package/dist/assets/nginx-DdIZxoE0.js +1 -0
- package/dist/assets/night-owl-C39BiMTA.js +1 -0
- package/dist/assets/night-owl-EdP2Hztp.js +1 -0
- package/dist/assets/night-owl-light-Bk-lYVyk.js +1 -0
- package/dist/assets/night-owl-light-CMTm3GFP.js +1 -0
- package/dist/assets/nim-CVrawwO9.js +1 -0
- package/dist/assets/nim-e2z2kCcq.js +1 -0
- package/dist/assets/nix-Ckjrpg0r.js +1 -0
- package/dist/assets/nix-CwoSXNpI.js +1 -0
- package/dist/assets/nord-BAu0wM6c.js +1 -0
- package/dist/assets/nord-Ddv68eIx.js +1 -0
- package/dist/assets/nsis-LdVXkNf5.js +1 -0
- package/dist/assets/ntriples-BfvgReVJ.js +1 -0
- package/dist/assets/nushell-Cz2AlsmD.js +1 -0
- package/dist/assets/nushell-DtHLcZf1.js +1 -0
- package/dist/assets/objective-c-BoaBTdtz.js +1 -0
- package/dist/assets/objective-c-DXmwc3jG.js +1 -0
- package/dist/assets/objective-cpp-CLxacb5B.js +1 -0
- package/dist/assets/objective-cpp-DstR8hNy.js +1 -0
- package/dist/assets/ocaml-C0hk2d4L.js +1 -0
- package/dist/assets/ocaml-DTbn2Hv7.js +1 -0
- package/dist/assets/octave-CWZ4xMHY.js +1 -0
- package/dist/assets/odin-BBf5iR-q.js +1 -0
- package/dist/assets/odin-Bxc4S6Xn.js +1 -0
- package/dist/assets/one-dark-pro-DVMEJ2y_.js +1 -0
- package/dist/assets/one-dark-pro-utPxbBbJ.js +1 -0
- package/dist/assets/one-light-BuCQ22aO.js +1 -0
- package/dist/assets/one-light-C3Wv6jpd.js +1 -0
- package/dist/assets/openscad-C4EeE6gA.js +1 -0
- package/dist/assets/openscad-CXHpNBsb.js +1 -0
- package/dist/assets/oz-BzwKVEFT.js +1 -0
- package/dist/assets/pascal--L3eBynH.js +1 -0
- package/dist/assets/pascal-D93ZcfNL.js +1 -0
- package/dist/assets/pascal-Sr-XLSE6.js +1 -0
- package/dist/assets/perl-C0TMdlhV.js +1 -0
- package/dist/assets/perl-C95KruZl.js +1 -0
- package/dist/assets/perl-CdXCOZ3F.js +1 -0
- package/dist/assets/permissionStore-BRcQ9Jgt.js +1 -0
- package/dist/assets/php-B4Kqya17.js +1 -0
- package/dist/assets/php-Dhbhpdrm.js +1 -0
- package/dist/assets/pig-CevX1Tat.js +1 -0
- package/dist/assets/pkl-CRusufhw.js +1 -0
- package/dist/assets/pkl-u5AG7uiY.js +1 -0
- package/dist/assets/plastic-3e1v2bzS.js +1 -0
- package/dist/assets/plastic-CXnNNlFZ.js +1 -0
- package/dist/assets/plsql-ChMvpjG-.js +1 -0
- package/dist/assets/plsql-Dbm3tV2N.js +1 -0
- package/dist/assets/po-BTJTHyun.js +1 -0
- package/dist/assets/po-LG0lFwH4.js +1 -0
- package/dist/assets/poimandres-BrOVMvuE.js +1 -0
- package/dist/assets/poimandres-CS3Unz2-.js +1 -0
- package/dist/assets/polar-C0HS_06l.js +1 -0
- package/dist/assets/polar-DjOs3GWb.js +1 -0
- package/dist/assets/postcss-CXtECtnM.js +1 -0
- package/dist/assets/postcss-GRRkWn2F.js +1 -0
- package/dist/assets/powerquery-CEu0bR-o.js +1 -0
- package/dist/assets/powerquery-DHf-dtTS.js +1 -0
- package/dist/assets/powershell-CFHJl5sT.js +1 -0
- package/dist/assets/powershell-DXrKVo3G.js +1 -0
- package/dist/assets/powershell-Dpen1YoG.js +1 -0
- package/dist/assets/prisma-Dd19v3D-.js +1 -0
- package/dist/assets/prisma-Dgf8IN_C.js +1 -0
- package/dist/assets/prolog-9JcfiY6I.js +1 -0
- package/dist/assets/prolog-CbFg5uaA.js +1 -0
- package/dist/assets/properties-C78fOPTZ.js +1 -0
- package/dist/assets/proto-C7zT0LnQ.js +1 -0
- package/dist/assets/proto-dqx_Sj2i.js +1 -0
- package/dist/assets/protobuf-ChK-085T.js +1 -0
- package/dist/assets/pug-CGlum2m_.js +1 -0
- package/dist/assets/pug-CIGw5rlb.js +1 -0
- package/dist/assets/pug-CoOVtr4u.js +1 -0
- package/dist/assets/puppet-BMWR74SV.js +1 -0
- package/dist/assets/puppet-DMA9R1ak.js +1 -0
- package/dist/assets/puppet-Di57VbSS.js +1 -0
- package/dist/assets/purescript-BgpM7rDH.js +1 -0
- package/dist/assets/purescript-CklMAg4u.js +1 -0
- package/dist/assets/python-B6Ihcp-E.js +1 -0
- package/dist/assets/python-B6aJPvgy.js +1 -0
- package/dist/assets/python-Cso5vRIg.js +1 -0
- package/dist/assets/q-pXgVlZs6.js +1 -0
- package/dist/assets/qml-3beO22l8.js +1 -0
- package/dist/assets/qml-DmGQGbca.js +1 -0
- package/dist/assets/qmldir-C8lEn-DE.js +1 -0
- package/dist/assets/qmldir-DXd9s5XC.js +1 -0
- package/dist/assets/qss-B7NnhfIi.js +1 -0
- package/dist/assets/qss-IeuSbFQv.js +1 -0
- package/dist/assets/r-1ts4xG1r.js +1 -0
- package/dist/assets/r-B6wPVr8A.js +1 -0
- package/dist/assets/r-Dspwwk_N.js +1 -0
- package/dist/assets/racket-BqYA7rlc.js +1 -0
- package/dist/assets/racket-CeDx7KO2.js +1 -0
- package/dist/assets/raku-BMJwmrCS.js +1 -0
- package/dist/assets/raku-DXvB9xmW.js +1 -0
- package/dist/assets/razor-BaMsy-R7.js +1 -0
- package/dist/assets/razor-Uh8Bk_45.js +1 -0
- package/dist/assets/red-DR6ZwibK.js +1 -0
- package/dist/assets/red-bN70gL4F.js +1 -0
- package/dist/assets/reg-C-SQnVFl.js +1 -0
- package/dist/assets/reg-Cvyu2Gnx.js +1 -0
- package/dist/assets/regexp-CDVJQ6XC.js +1 -0
- package/dist/assets/regexp-DK-WlHNu.js +1 -0
- package/dist/assets/registerCustomTheme-BBXUCRnG.js +1 -0
- package/dist/assets/rel-BlqNHz8k.js +1 -0
- package/dist/assets/rel-C3B-1QV4.js +1 -0
- package/dist/assets/renderElectronMiniChatApp-DGmmT9Wf.js +1 -0
- package/dist/assets/renderMobileApp-Dd8P9hvM.js +23 -0
- package/dist/assets/riscv-BM1_JUlF.js +1 -0
- package/dist/assets/riscv-C5dpdlr7.js +1 -0
- package/dist/assets/ron-D8l8udqQ.js +1 -0
- package/dist/assets/ron-j5NfrB3z.js +1 -0
- package/dist/assets/rose-pine-CN2F2lJl.js +1 -0
- package/dist/assets/rose-pine-dawn-0S8NEhsA.js +1 -0
- package/dist/assets/rose-pine-dawn-DHQR4-dF.js +1 -0
- package/dist/assets/rose-pine-moon-D4_iv3hh.js +1 -0
- package/dist/assets/rose-pine-moon-DzBDT4rc.js +1 -0
- package/dist/assets/rose-pine-qdsjHGoJ.js +1 -0
- package/dist/assets/rosmsg-BJDFO7_C.js +1 -0
- package/dist/assets/rosmsg-ZkSIzPhc.js +1 -0
- package/dist/assets/rpm-CTu-6PCP.js +1 -0
- package/dist/assets/rst-BrH8l1NY.js +1 -0
- package/dist/assets/rst-C371KPjr.js +1 -0
- package/dist/assets/ruby-B2Rjki9n.js +1 -0
- package/dist/assets/ruby-DusoydGj.js +1 -0
- package/dist/assets/ruby-Dw2BHqvy.js +1 -0
- package/dist/assets/runtimeSurface-Cnqjhb6Y.js +1 -0
- package/dist/assets/rust-B1yitclQ.js +1 -0
- package/dist/assets/rust-CxuBE0J8.js +1 -0
- package/dist/assets/sas-B4kiWyti.js +1 -0
- package/dist/assets/sas-DtSHuIwI.js +1 -0
- package/dist/assets/sas-cz2c8ADy.js +1 -0
- package/dist/assets/sass-Cj5Yp3dK.js +1 -0
- package/dist/assets/sass-bfEVHPJ8.js +1 -0
- package/dist/assets/scala-C151Ov-r.js +1 -0
- package/dist/assets/scala-Dtw19ca_.js +1 -0
- package/dist/assets/scheme-C41bIUwD.js +1 -0
- package/dist/assets/scheme-C98Dy4si.js +1 -0
- package/dist/assets/scheme-OJppFQF3.js +1 -0
- package/dist/assets/scss-DxBkwadj.js +1 -0
- package/dist/assets/scss-OYdSNvt2.js +1 -0
- package/dist/assets/sdbl-CvZs3G9c.js +1 -0
- package/dist/assets/sdbl-DVxCFoDh.js +1 -0
- package/dist/assets/shaderlab-CEJedz68.js +1 -0
- package/dist/assets/shaderlab-Dg9Lc6iA.js +1 -0
- package/dist/assets/shellscript-DgJyDXW6.js +1 -0
- package/dist/assets/shellscript-Yzrsuije.js +1 -0
- package/dist/assets/shellsession-BADoaaVG.js +1 -0
- package/dist/assets/shellsession-DSlzxnCM.js +1 -0
- package/dist/assets/sieve-C3Gn_uJK.js +1 -0
- package/dist/assets/simple-mode-GW_nhZxv.js +1 -0
- package/dist/assets/slack-dark-BthQWCQV.js +1 -0
- package/dist/assets/slack-dark-CWRQmTmo.js +1 -0
- package/dist/assets/slack-ochin-DO_ok7XK.js +1 -0
- package/dist/assets/slack-ochin-DqwNpetd.js +1 -0
- package/dist/assets/smalltalk-B9IHbYt7.js +1 -0
- package/dist/assets/smalltalk-BERRCDM3.js +1 -0
- package/dist/assets/smalltalk-CnHTOXQT.js +1 -0
- package/dist/assets/snazzy-light-B5llO_gK.js +1 -0
- package/dist/assets/snazzy-light-Bw305WKR.js +1 -0
- package/dist/assets/solarized-dark-DXbdFlpD.js +1 -0
- package/dist/assets/solarized-dark-G9yBjKj_.js +1 -0
- package/dist/assets/solarized-light-DeSzljQz.js +1 -0
- package/dist/assets/solarized-light-L9t79GZl.js +1 -0
- package/dist/assets/solidity-B3CjIuAd.js +1 -0
- package/dist/assets/solidity-rGO070M0.js +1 -0
- package/dist/assets/solr-DehyRSwq.js +1 -0
- package/dist/assets/soy-BSb8SaP0.js +1 -0
- package/dist/assets/soy-Brmx7dQM.js +1 -0
- package/dist/assets/sparql-BJh4JEw-.js +1 -0
- package/dist/assets/sparql-DkYu6x3z.js +1 -0
- package/dist/assets/sparql-rVzFXLq3.js +1 -0
- package/dist/assets/splunk-BtCnVYZw.js +1 -0
- package/dist/assets/splunk-h-bNAnbk.js +1 -0
- package/dist/assets/spreadsheet-BCZA_wO0.js +1 -0
- package/dist/assets/sql-BLtJtn59.js +1 -0
- package/dist/assets/sql-BbONfI8K.js +1 -0
- package/dist/assets/sql-D0XecflT.js +1 -0
- package/dist/assets/ssh-config-CywOjoXH.js +1 -0
- package/dist/assets/ssh-config-_ykCGR6B.js +1 -0
- package/dist/assets/stata-BH5u7GGu.js +1 -0
- package/dist/assets/stata-BKjsT8qe.js +1 -0
- package/dist/assets/stex-C3f8Ysf7.js +1 -0
- package/dist/assets/stylus-B533Al4x.js +1 -0
- package/dist/assets/stylus-BEDo0Tqx.js +1 -0
- package/dist/assets/stylus-CIg617SB.js +1 -0
- package/dist/assets/surrealql-2KNEnAt7.js +1 -0
- package/dist/assets/surrealql-Bq5Q-fJD.js +1 -0
- package/dist/assets/svelte-C_ipcX3V.js +1 -0
- package/dist/assets/svelte-xaxjcSSP.js +1 -0
- package/dist/assets/swift-BzpIVaGY.js +1 -0
- package/dist/assets/swift-D82vCrfD.js +1 -0
- package/dist/assets/swift-tEesUtni.js +1 -0
- package/dist/assets/synthwave-84-CbfX1IO0.js +1 -0
- package/dist/assets/synthwave-84-DRVv-_m_.js +1 -0
- package/dist/assets/system-verilog-CnnmHF94.js +1 -0
- package/dist/assets/system-verilog-Qdm_1g2q.js +1 -0
- package/dist/assets/systemd-4A_iFExJ.js +1 -0
- package/dist/assets/systemd-DKMPPZjB.js +1 -0
- package/dist/assets/talonscript-CkByrt1z.js +1 -0
- package/dist/assets/talonscript-eRuyeYHl.js +1 -0
- package/dist/assets/tasl-B9CVvjfG.js +1 -0
- package/dist/assets/tasl-QIJgUcNo.js +1 -0
- package/dist/assets/tcl-Bq9dbVAF.js +1 -0
- package/dist/assets/tcl-DVfN8rqt.js +1 -0
- package/dist/assets/tcl-dwOrl1Do.js +1 -0
- package/dist/assets/templ-BVTOctZ7.js +1 -0
- package/dist/assets/templ-P3uqSqPl.js +1 -0
- package/dist/assets/terraform-BETggiCN.js +1 -0
- package/dist/assets/terraform-CAp711iT.js +1 -0
- package/dist/assets/tex-BHxF5DMe.js +1 -0
- package/dist/assets/tex-idrVyKtj.js +1 -0
- package/dist/assets/textile-CnDTJFAw.js +1 -0
- package/dist/assets/themeResolver-BmJyTmjJ.js +1 -0
- package/dist/assets/tiddlywiki-DO-Gjzrf.js +1 -0
- package/dist/assets/tiki-DGYXhP31.js +1 -0
- package/dist/assets/tokyo-night-BvwC8l2v.js +1 -0
- package/dist/assets/tokyo-night-hegEt444.js +1 -0
- package/dist/assets/toml-Bm5Em-hy.js +1 -0
- package/dist/assets/toml-Ms459DBw.js +1 -0
- package/dist/assets/toml-vGWfd6FD.js +1 -0
- package/dist/assets/troff-wAsdV37c.js +1 -0
- package/dist/assets/ts-tags-C-gylFal.js +1 -0
- package/dist/assets/ts-tags-zn1MmPIZ.js +1 -0
- package/dist/assets/tsv-BFtm7NXx.js +1 -0
- package/dist/assets/tsv-B_m7g4N7.js +1 -0
- package/dist/assets/tsx-COt5Ahok.js +1 -0
- package/dist/assets/tsx-D6116Ycy.js +1 -0
- package/dist/assets/ttcn-CfJYG6tj.js +1 -0
- package/dist/assets/ttcn-cfg-B9xdYoR4.js +1 -0
- package/dist/assets/turtle-B1tBg_DP.js +1 -0
- package/dist/assets/turtle-BsS91CYL.js +1 -0
- package/dist/assets/turtle-DpRhbQZY.js +1 -0
- package/dist/assets/twig-DNn4PbVi.js +1 -0
- package/dist/assets/twig-DuP5mDZ4.js +1 -0
- package/dist/assets/typescript-BPQ3VLAy.js +1 -0
- package/dist/assets/typescript-BqvgUolh.js +1 -0
- package/dist/assets/typespec-BGHnOYBU.js +1 -0
- package/dist/assets/typespec-DhK7u29_.js +1 -0
- package/dist/assets/typst-DHCkPAjA.js +1 -0
- package/dist/assets/typst-Dfd71gQj.js +1 -0
- package/dist/assets/useAppFontEffects-DXASDavv.js +7043 -0
- package/dist/assets/useInlineCommentController-KJFe98HG.js +2 -0
- package/dist/assets/useOpenInAppsStore-DHAeT9zx.js +1 -0
- package/dist/assets/useWindowTitle-BcwmWC0M.js +10 -0
- package/dist/assets/v-BH76v7br.js +1 -0
- package/dist/assets/v-BcVCzyr7.js +1 -0
- package/dist/assets/vala-CsfeWuGM.js +1 -0
- package/dist/assets/vala-z59IxkFd.js +1 -0
- package/dist/assets/vb-4AxSLKIU.js +1 -0
- package/dist/assets/vb-CmGdzxic.js +1 -0
- package/dist/assets/vb-D17OF-Vu.js +1 -0
- package/dist/assets/vbscript-BuJXcnF6.js +1 -0
- package/dist/assets/velocity-D8B20fx6.js +1 -0
- package/dist/assets/vendor-aparajita-capacitor-secure-storage-5IShChL0.js +1 -0
- package/dist/assets/vendor-aria-hidden-DvXkyWUv.js +1 -0
- package/dist/assets/vendor-base-ui-DwfTg5wD.js +1 -0
- package/dist/assets/vendor-beautiful-mermaid-r4GK_usS.js +119 -0
- package/dist/assets/vendor-capacitor-app-BrDJj9I_.js +1 -0
- package/dist/assets/vendor-capacitor-core-B4EWRrHz.js +1 -0
- package/dist/assets/vendor-capacitor-keyboard-CYccoJjr.js +1 -0
- package/dist/assets/vendor-capacitor-push-notifications-KNe1zSBF.js +1 -0
- package/dist/assets/vendor-capacitor-status-bar-B-N0EOVk.js +1 -0
- package/dist/assets/vendor-ccount-c2V3InAJ.js +1 -0
- package/dist/assets/vendor-character-entities-html4-D7taRCQ7.js +1 -0
- package/dist/assets/vendor-character-entities-legacy-BpoLgcEt.js +1 -0
- package/dist/assets/vendor-class-variance-authority-5VPnzWs2.js +1 -0
- package/dist/assets/vendor-clsx-B-dksMZM.js +1 -0
- package/dist/assets/vendor-cmdk-BCEUzcHE.js +1 -0
- package/dist/assets/vendor-codemirror-autocomplete-3xMyV7a2.js +1 -0
- package/dist/assets/vendor-codemirror-commands-Bzf12ODH.js +1 -0
- package/dist/assets/vendor-codemirror-lang-angular-0K6s6cvb.js +1 -0
- package/dist/assets/vendor-codemirror-lang-cpp-B0aL03z-.js +1 -0
- package/dist/assets/vendor-codemirror-lang-css-C4jEScp7.js +1 -0
- package/dist/assets/vendor-codemirror-lang-go-CgrfVBPr.js +7 -0
- package/dist/assets/vendor-codemirror-lang-html-C1Svvdey.js +1 -0
- package/dist/assets/vendor-codemirror-lang-java-DNPz7_Bx.js +1 -0
- package/dist/assets/vendor-codemirror-lang-javascript-CrbeaEAU.js +13 -0
- package/dist/assets/vendor-codemirror-lang-jinja-DL8BR_RG.js +1 -0
- package/dist/assets/vendor-codemirror-lang-json-BTvAjwkJ.js +1 -0
- package/dist/assets/vendor-codemirror-lang-less-CPABt6NZ.js +1 -0
- package/dist/assets/vendor-codemirror-lang-liquid-BLOLOBMg.js +1 -0
- package/dist/assets/vendor-codemirror-lang-markdown-BloD9GN-.js +1 -0
- package/dist/assets/vendor-codemirror-lang-php-FIZMTuWM.js +1 -0
- package/dist/assets/vendor-codemirror-lang-python-CR2g6ukK.js +3 -0
- package/dist/assets/vendor-codemirror-lang-rust-lsPqn4k4.js +1 -0
- package/dist/assets/vendor-codemirror-lang-sass-CtECMwzH.js +1 -0
- package/dist/assets/vendor-codemirror-lang-sql-BtmZrrZH.js +2 -0
- package/dist/assets/vendor-codemirror-lang-vue-Br6DrntY.js +1 -0
- package/dist/assets/vendor-codemirror-lang-wast-DT7IlCnb.js +1 -0
- package/dist/assets/vendor-codemirror-lang-xml-wNr-LZOf.js +1 -0
- package/dist/assets/vendor-codemirror-lang-yaml-BTKFwfc2.js +1 -0
- package/dist/assets/vendor-codemirror-language-BuDklWi8.js +3 -0
- package/dist/assets/vendor-codemirror-language-data-CFVH0pe8.js +2 -0
- package/dist/assets/vendor-codemirror-search-BzyfPoRb.js +2 -0
- package/dist/assets/vendor-codemirror-state-Wdz6Qsow.js +5 -0
- package/dist/assets/vendor-codemirror-view-pXtfpqbT.js +4 -0
- package/dist/assets/vendor-comma-separated-tokens-D8TqSuIK.js +1 -0
- package/dist/assets/vendor-crelt-C8TCjufn.js +1 -0
- package/dist/assets/vendor-detect-node-es-l0sNRNKZ.js +1 -0
- package/dist/assets/vendor-diff-C3JhlQdm.js +13 -0
- package/dist/assets/vendor-dijkstrajs-COg3n3zL.js +1 -0
- package/dist/assets/vendor-dnd-kit-accessibility-Cv52zwWT.js +1 -0
- package/dist/assets/vendor-dnd-kit-core-GipZW2tY.js +5 -0
- package/dist/assets/vendor-dnd-kit-sortable-Ct2QxIHb.js +1 -0
- package/dist/assets/vendor-dnd-kit-utilities-CrOcp0Bp.js +1 -0
- package/dist/assets/vendor-dompurify-r8glNMJW.js +2 -0
- package/dist/assets/vendor-elkjs-CRCLNXjf.js +24 -0
- package/dist/assets/vendor-entities-C3BA0AJP.js +1 -0
- package/dist/assets/vendor-fflate-C7GOKjkv.js +1 -0
- package/dist/assets/vendor-floating-ui-core-CXmKXOXc.js +1 -0
- package/dist/assets/vendor-floating-ui-dom-Bkw82kL9.js +1 -0
- package/dist/assets/vendor-floating-ui-react-dom-sVFnuruh.js +1 -0
- package/dist/assets/vendor-floating-ui-utils-BzXdqYpP.js +1 -0
- package/dist/assets/vendor-framer-motion-DJASDzNt.js +1 -0
- package/dist/assets/vendor-fuse.js-Dw8P0qyA.js +1 -0
- package/dist/assets/vendor-get-nonce-C-Z93AgS.js +1 -0
- package/dist/assets/vendor-ghostty-web-CrxinGGH.js +13 -0
- package/dist/assets/vendor-hast-util-to-html-BKBhbTDb.js +9 -0
- package/dist/assets/vendor-hast-util-whitespace-D4Wp6AEg.js +1 -0
- package/dist/assets/vendor-heic2any-L8hyfc24.js +66 -0
- package/dist/assets/vendor-html-to-image-BeoRn2gJ.js +2 -0
- package/dist/assets/vendor-html-void-elements-CkdplsNl.js +1 -0
- package/dist/assets/vendor-katex-CHD9BdDO.js +257 -0
- package/dist/assets/vendor-katex-Cp579UoJ.css +1 -0
- package/dist/assets/vendor-lezer-common-B3-cUCR_.js +1 -0
- package/dist/assets/vendor-lezer-cpp-BleAU9o-.js +1 -0
- package/dist/assets/vendor-lezer-css-C5xB6jxd.js +1 -0
- package/dist/assets/vendor-lezer-go-CXK1UKk8.js +1 -0
- package/dist/assets/vendor-lezer-highlight-CDMHUZ74.js +1 -0
- package/dist/assets/vendor-lezer-html-C0I1p52t.js +1 -0
- package/dist/assets/vendor-lezer-java-D_zzj-NV.js +1 -0
- package/dist/assets/vendor-lezer-javascript-D7Tj24ot.js +1 -0
- package/dist/assets/vendor-lezer-json-Iaex0UN-.js +1 -0
- package/dist/assets/vendor-lezer-lr-bhwg1HMg.js +1 -0
- package/dist/assets/vendor-lezer-markdown-C6g-d6P3.js +6 -0
- package/dist/assets/vendor-lezer-php-_DHrbsZG.js +1 -0
- package/dist/assets/vendor-lezer-python-CvuFxeZl.js +1 -0
- package/dist/assets/vendor-lezer-rust-Lqgd5SAo.js +1 -0
- package/dist/assets/vendor-lezer-sass-Dnm2lY4t.js +1 -0
- package/dist/assets/vendor-lezer-xml-hUDuAyS5.js +1 -0
- package/dist/assets/vendor-lezer-yaml-BNIl6S_O.js +1 -0
- package/dist/assets/vendor-lru_map-B-cPXHXW.js +1 -0
- package/dist/assets/vendor-marijn-find-cluster-break-DXwl3gUT.js +1 -0
- package/dist/assets/vendor-marked-i_gIkIP3.js +59 -0
- package/dist/assets/vendor-morphdom-B7dS_VPB.js +1 -0
- package/dist/assets/vendor-motion-dom-DJLgZh4Q.js +1 -0
- package/dist/assets/vendor-motion-l0sNRNKZ.js +1 -0
- package/dist/assets/vendor-motion-utils-BGh8QBgx.js +1 -0
- package/dist/assets/vendor-oniguruma-parser-C0D4_9rT.js +33 -0
- package/dist/assets/vendor-oniguruma-to-es-DLBnFDCE.js +94 -0
- package/dist/assets/vendor-pierre-theme-Bp7SdUL6.js +1 -0
- package/dist/assets/vendor-pierre-theming-C6Z4M5_u.js +1 -0
- package/dist/assets/vendor-property-information-rJCbAzvX.js +1 -0
- package/dist/assets/vendor-qrcode-COsmt6jn.js +8 -0
- package/dist/assets/vendor-radix-ui-primitive-Dc_FVRD7.js +1 -0
- package/dist/assets/vendor-radix-ui-react-compose-refs-D1GnwnP9.js +1 -0
- package/dist/assets/vendor-radix-ui-react-context-CM4yFQ2I.js +1 -0
- package/dist/assets/vendor-radix-ui-react-dialog-jX3Dld8c.js +5 -0
- package/dist/assets/vendor-radix-ui-react-dismissable-layer-M7LsH3yL.js +1 -0
- package/dist/assets/vendor-radix-ui-react-focus-guards-D5MZ0nQs.js +1 -0
- package/dist/assets/vendor-radix-ui-react-focus-scope-C2K7lNPv.js +1 -0
- package/dist/assets/vendor-radix-ui-react-id-BcxRjnbX.js +1 -0
- package/dist/assets/vendor-radix-ui-react-portal-xlJWBfDg.js +1 -0
- package/dist/assets/vendor-radix-ui-react-presence-Btn-Dp7L.js +1 -0
- package/dist/assets/vendor-radix-ui-react-primitive-CfpW6_IT.js +1 -0
- package/dist/assets/vendor-radix-ui-react-slot-BxUc3Pvz.js +1 -0
- package/dist/assets/vendor-radix-ui-react-use-callback-ref-UKEWHtoP.js +1 -0
- package/dist/assets/vendor-radix-ui-react-use-controllable-state-C_ecoh35.js +1 -0
- package/dist/assets/vendor-radix-ui-react-use-effect-event-DkJl_Rn_.js +1 -0
- package/dist/assets/vendor-radix-ui-react-use-escape-keydown-Co13lHGj.js +1 -0
- package/dist/assets/vendor-radix-ui-react-use-layout-effect-0fyGwS2_.js +1 -0
- package/dist/assets/vendor-react-DYyjh7Q0.js +9 -0
- package/dist/assets/vendor-react-drawio-Boqanm0j.js +1 -0
- package/dist/assets/vendor-react-remove-scroll-CfeMe0DL.js +4 -0
- package/dist/assets/vendor-react-remove-scroll-bar-C9YRs2nU.js +38 -0
- package/dist/assets/vendor-react-style-singleton-B1H4bWSG.js +1 -0
- package/dist/assets/vendor-regex-BBWcyTkg.js +16 -0
- package/dist/assets/vendor-regex-recursion-JU4mF-dD.js +1 -0
- package/dist/assets/vendor-regex-utilities-2BQyy0xI.js +1 -0
- package/dist/assets/vendor-remend-BWYYytN3.js +22 -0
- package/dist/assets/vendor-remixicon-react-CzPq62YO.js +1 -0
- package/dist/assets/vendor-replit-codemirror-vim-BUqe2Slv.js +39 -0
- package/dist/assets/vendor-reselect-l0sNRNKZ.js +1 -0
- package/dist/assets/vendor-scheduler-7OC5HNn7.js +1 -0
- package/dist/assets/vendor-shiki-Bbf2GEcE.js +2 -0
- package/dist/assets/vendor-shikijs-core-CGM_jqPK.js +2 -0
- package/dist/assets/vendor-shikijs-engine-javascript-Cme4830A.js +1 -0
- package/dist/assets/vendor-shikijs-engine-oniguruma-DPWuIF1G.js +1 -0
- package/dist/assets/vendor-shikijs-transformers-CZWsLLKm.js +1 -0
- package/dist/assets/vendor-shikijs-types-CPSbSeK6.js +1 -0
- package/dist/assets/vendor-shikijs-vscode-textmate-BgLrS_2D.js +3 -0
- package/dist/assets/vendor-simplewebauthn-browser-VDA66rT_.js +2 -0
- package/dist/assets/vendor-sonner-dWA7qvjr.js +1 -0
- package/dist/assets/vendor-space-separated-tokens-DD3iYX1K.js +1 -0
- package/dist/assets/vendor-stringify-entities-CsH1VEn9.js +1 -0
- package/dist/assets/vendor-style-mod-NZ5MEPvj.js +3 -0
- package/dist/assets/vendor-tailwind-merge-CPcsbTWB.js +1 -0
- package/dist/assets/vendor-tanstack-react-virtual-IrbCBGJ4.js +1 -0
- package/dist/assets/vendor-tanstack-virtual-core-Dubg10g5.js +1 -0
- package/dist/assets/vendor-tslib-De9GV7Vy.js +1 -0
- package/dist/assets/vendor-use-callback-ref-CJB0R85I.js +1 -0
- package/dist/assets/vendor-use-sidecar-C-AuTczP.js +1 -0
- package/dist/assets/vendor-use-sync-external-store-B7OScDIw.js +1 -0
- package/dist/assets/vendor-vite-runtime-DD1OZmLC.js +1 -0
- package/dist/assets/vendor-w3c-keyname-Vcq4gwWv.js +1 -0
- package/dist/assets/vendor-workbox-window-BIl4cyR9.js +2 -0
- package/dist/assets/vendor-zumer-snapdom-Btyu_Xi2.js +8 -0
- package/dist/assets/vendor-zustand-CnsBKjP5.js +6 -0
- package/dist/assets/vendor-zwitch-C2o2j-tx.js +1 -0
- package/dist/assets/verilog-BQ8w6xss.js +1 -0
- package/dist/assets/verilog-C6RDOZhf.js +1 -0
- package/dist/assets/verilog-LfQUkHDc.js +1 -0
- package/dist/assets/vesper--t9w6MWz.js +1 -0
- package/dist/assets/vesper-DU1UobuO.js +1 -0
- package/dist/assets/vhdl-CeAyd5Ju.js +1 -0
- package/dist/assets/vhdl-DJCsFYgn.js +1 -0
- package/dist/assets/vhdl-lSbBsy5d.js +1 -0
- package/dist/assets/viml-CJc9bBzg.js +1 -0
- package/dist/assets/viml-pbKHW3Ia.js +1 -0
- package/dist/assets/vitesse-black-B_BYPdvp.js +1 -0
- package/dist/assets/vitesse-black-Bkuqu6BP.js +1 -0
- package/dist/assets/vitesse-dark-D0r3Knsf.js +1 -0
- package/dist/assets/vitesse-dark-DOSOf2Sz.js +1 -0
- package/dist/assets/vitesse-light-CVO1_9PV.js +1 -0
- package/dist/assets/vitesse-light-gUX51GpB.js +1 -0
- package/dist/assets/vue-D2k0BAl5.js +1 -0
- package/dist/assets/vue-DN_0RTcg.js +1 -0
- package/dist/assets/vue-html-AaS7Mt5G.js +1 -0
- package/dist/assets/vue-html-zEfNEgpj.js +1 -0
- package/dist/assets/vue-vine-CQOfvN7w.js +1 -0
- package/dist/assets/vue-vine-D9eCaTqi.js +1 -0
- package/dist/assets/vyper-CDx5xZoG.js +1 -0
- package/dist/assets/vyper-DpazWNpx.js +1 -0
- package/dist/assets/wasm-CFi-k9--.js +1 -0
- package/dist/assets/wasm-CG6Dc4jp.js +1 -0
- package/dist/assets/wasm-MzD3tlZU.js +1 -0
- package/dist/assets/web-components-CNPQSzpa.js +1390 -0
- package/dist/assets/webidl-ZXfAyPTL.js +1 -0
- package/dist/assets/wenyan-BV7otONQ.js +1 -0
- package/dist/assets/wenyan-CYFFG9DK.js +1 -0
- package/dist/assets/wgsl-CxjTZs-b.js +1 -0
- package/dist/assets/wgsl-Dx-B1_4e.js +1 -0
- package/dist/assets/wikitext-BhOHFoWU.js +1 -0
- package/dist/assets/wikitext-Bx2qct8O.js +1 -0
- package/dist/assets/wit-5i3qLPDT.js +1 -0
- package/dist/assets/wit-DDW3hD69.js +1 -0
- package/dist/assets/wolfram-lXgVvXCa.js +1 -0
- package/dist/assets/wolfram-pu21K997.js +1 -0
- package/dist/assets/worker-BBk7yuNN.js +153 -0
- package/dist/assets/workerFactory-tw7cIdmV.js +1 -0
- package/dist/assets/xml-BkAJuBCc.js +1 -0
- package/dist/assets/xml-sdJ4AIDG.js +1 -0
- package/dist/assets/xquery-DzFWVndE.js +1 -0
- package/dist/assets/xsl-C6UUWSil.js +1 -0
- package/dist/assets/xsl-CtQFsRM5.js +1 -0
- package/dist/assets/yacas-BJ4BC0dw.js +1 -0
- package/dist/assets/yaml-Bopit2L3.js +1 -0
- package/dist/assets/yaml-Buea-lGh.js +1 -0
- package/dist/assets/z80-Hz9HOZM7.js +1 -0
- package/dist/assets/zenscript-BIAKq-aR.js +1 -0
- package/dist/assets/zenscript-DVFEvuxE.js +1 -0
- package/dist/assets/zig-VOosw3JB.js +1 -0
- package/dist/assets/zig-bSFrHQ7n.js +1 -0
- package/dist/favicon-16.png +0 -0
- package/dist/favicon-32.png +0 -0
- package/dist/favicon.png +0 -0
- package/dist/favicon.svg +13 -0
- package/dist/index.html +658 -0
- package/dist/logo-dark-192x192.png +0 -0
- package/dist/logo-dark-512x512.svg +13 -0
- package/dist/logo-light-192x192.png +0 -0
- package/dist/logo-light-512x512.svg +13 -0
- package/dist/mini-chat.html +121 -0
- package/dist/mobile.html +79 -0
- package/dist/pwa-192.png +0 -0
- package/dist/pwa-512.png +0 -0
- package/dist/pwa-maskable-192.png +0 -0
- package/dist/pwa-maskable-512.png +0 -0
- package/dist/site.webmanifest +21 -0
- package/dist/sw.js +1 -0
- package/package.json +115 -0
- package/public/apple-touch-icon-120x120.png +0 -0
- package/public/apple-touch-icon-152x152.png +0 -0
- package/public/apple-touch-icon-167x167.png +0 -0
- package/public/apple-touch-icon-180x180.png +0 -0
- package/public/apple-touch-icon.png +0 -0
- package/public/apple-touch-icon.svg +13 -0
- package/public/favicon-16.png +0 -0
- package/public/favicon-32.png +0 -0
- package/public/favicon.png +0 -0
- package/public/favicon.svg +13 -0
- package/public/logo-dark-192x192.png +0 -0
- package/public/logo-dark-512x512.svg +13 -0
- package/public/logo-light-192x192.png +0 -0
- package/public/logo-light-512x512.svg +13 -0
- package/public/pwa-192.png +0 -0
- package/public/pwa-512.png +0 -0
- package/public/pwa-maskable-192.png +0 -0
- package/public/pwa-maskable-512.png +0 -0
- package/public/site.webmanifest +21 -0
- package/server/index.d.ts +35 -0
- package/server/index.js +206 -0
- package/server/lib/client-auth/pairing.js +308 -0
- package/server/lib/client-auth/pairing.test.js +142 -0
- package/server/lib/client-auth/remote-clients.js +280 -0
- package/server/lib/client-auth/remote-clients.test.js +158 -0
- package/server/lib/cloudflare-tunnel.js +606 -0
- package/server/lib/fs/DOCUMENTATION.md +39 -0
- package/server/lib/fs/pick-directory.js +236 -0
- package/server/lib/fs/pick-directory.test.js +134 -0
- package/server/lib/fs/routes.js +1543 -0
- package/server/lib/fs/routes.test.js +920 -0
- package/server/lib/fs/search.js +238 -0
- package/server/lib/git/DOCUMENTATION.md +180 -0
- package/server/lib/git/credentials.js +41 -0
- package/server/lib/git/identity-storage.js +113 -0
- package/server/lib/git/index.js +6 -0
- package/server/lib/git/issue-2746-longpaths.test.js +206 -0
- package/server/lib/git/routes.js +1089 -0
- package/server/lib/git/routes.test.js +210 -0
- package/server/lib/git/service.js +4927 -0
- package/server/lib/git/service.test.js +1216 -0
- package/server/lib/inherited-env.js +74 -0
- package/server/lib/inherited-env.test.js +65 -0
- package/server/lib/ngrok-tunnel.js +343 -0
- package/server/lib/ngrok-tunnel.test.js +50 -0
- package/server/lib/package-manager.js +850 -0
- package/server/lib/package-manager.test.js +370 -0
- package/server/lib/path-realpath-cache.js +85 -0
- package/server/lib/path-realpath-cache.test.js +75 -0
- package/server/lib/pi/archive-store.js +52 -0
- package/server/lib/pi/archive-store.test.js +32 -0
- package/server/lib/pi/attachment-store.js +98 -0
- package/server/lib/pi/attachment-store.test.js +40 -0
- package/server/lib/pi/custom-themes.js +33 -0
- package/server/lib/pi/custom-themes.test.js +21 -0
- package/server/lib/pi/legacy-ui-model-defaults.js +57 -0
- package/server/lib/pi/legacy-ui-model-defaults.test.js +65 -0
- package/server/lib/pi/model-config-store.js +173 -0
- package/server/lib/pi/model-config-store.test.js +42 -0
- package/server/lib/pi/routes.js +956 -0
- package/server/lib/pi/routes.test.js +733 -0
- package/server/lib/pi/session-daemon/DOCUMENTATION.md +41 -0
- package/server/lib/pi/session-daemon/daemon-process.js +113 -0
- package/server/lib/pi/session-daemon/ipc-client.js +144 -0
- package/server/lib/pi/session-daemon/runtime-registry.js +149 -0
- package/server/lib/pi/session-daemon/runtime-registry.test.js +109 -0
- package/server/lib/pi/session-daemon/session-daemon.js +1903 -0
- package/server/lib/pi/session-daemon/session-daemon.test.js +1306 -0
- package/server/lib/pi/session-daemon/session-jsonl.js +94 -0
- package/server/lib/pi/session-daemon/session-jsonl.test.js +73 -0
- package/server/lib/pi/session-daemon/supervisor.js +458 -0
- package/server/lib/pi/session-daemon/supervisor.test.js +212 -0
- package/server/lib/pi/session-folders-store.js +74 -0
- package/server/lib/pi/session-folders-store.test.js +45 -0
- package/server/lib/pi/session-lifecycle.integration.test.js +197 -0
- package/server/lib/pi/settings-store.js +133 -0
- package/server/lib/pi/settings-store.test.js +113 -0
- package/server/lib/pi/thinking-levels.js +39 -0
- package/server/lib/pi/thinking-levels.test.js +34 -0
- package/server/lib/pi/ui-settings-store.js +68 -0
- package/server/lib/pi/ui-settings-store.test.js +40 -0
- package/server/lib/pichamber-data-dir.js +78 -0
- package/server/lib/pichamber-data-dir.test.js +105 -0
- package/server/lib/pichamber-data-root-authority.test.js +81 -0
- package/server/lib/preview/proxy-runtime.js +1604 -0
- package/server/lib/preview/proxy-runtime.test.js +528 -0
- package/server/lib/pwa-keys-contract.test.ts +62 -0
- package/server/lib/relay/DOCUMENTATION.md +106 -0
- package/server/lib/relay/cross-compat.test.js +135 -0
- package/server/lib/relay/e2ee.js +341 -0
- package/server/lib/relay/e2ee.test.js +124 -0
- package/server/lib/relay/host-client.js +389 -0
- package/server/lib/relay/host-client.test.js +292 -0
- package/server/lib/relay/identity.js +93 -0
- package/server/lib/relay/identity.test.js +78 -0
- package/server/lib/relay/service.js +9 -0
- package/server/lib/relay/signing-key.js +73 -0
- package/server/lib/relay/tunnel-codec.js +373 -0
- package/server/lib/relay/tunnel-codec.test.js +58 -0
- package/server/lib/relay/tunnel-host.js +465 -0
- package/server/lib/security/bind-host.js +40 -0
- package/server/lib/security/bind-host.test.js +36 -0
- package/server/lib/security/packaged-client-origins.js +11 -0
- package/server/lib/security/request-security.js +122 -0
- package/server/lib/security/request-security.test.js +57 -0
- package/server/lib/server/cli-entry-runtime.js +44 -0
- package/server/lib/server/cli-options.js +132 -0
- package/server/lib/server/core-routes.js +1041 -0
- package/server/lib/server/cors.js +51 -0
- package/server/lib/server/cors.test.js +37 -0
- package/server/lib/server/lan-addresses.js +41 -0
- package/server/lib/server/lan-addresses.test.js +42 -0
- package/server/lib/server/path-utils.js +27 -0
- package/server/lib/server/tunnel-auth.js +586 -0
- package/server/lib/terminal/DOCUMENTATION.md +48 -0
- package/server/lib/terminal/history.js +83 -0
- package/server/lib/terminal/history.test.js +19 -0
- package/server/lib/terminal/runtime.js +391 -0
- package/server/lib/terminal/runtime.test.js +566 -0
- package/server/lib/terminal/shells.js +100 -0
- package/server/lib/terminal/shells.test.js +73 -0
- package/server/lib/terminal/terminal-ws-protocol.js +68 -0
- package/server/lib/terminal/terminal-ws-protocol.test.js +145 -0
- package/server/lib/terminal/theme-response.js +98 -0
- package/server/lib/terminal/theme-response.test.js +70 -0
- package/server/lib/tunnels/DOCUMENTATION.md +33 -0
- package/server/lib/tunnels/executable-search.js +140 -0
- package/server/lib/tunnels/executable-search.test.js +96 -0
- package/server/lib/tunnels/install-help.js +56 -0
- package/server/lib/tunnels/install-help.test.js +31 -0
- package/server/lib/tunnels/providers/cloudflare.js +54 -0
- package/server/lib/tunnels/providers/ngrok.js +32 -0
- package/server/lib/tunnels/types.js +16 -0
- package/server/lib/ui-auth/DOCUMENTATION.md +44 -0
- package/server/lib/ui-auth/ui-auth.js +972 -0
- package/server/lib/ui-auth/ui-auth.test.js +250 -0
- package/server/lib/ui-auth/ui-passkeys.js +543 -0
- package/server/lib/workspace/host.js +91 -0
|
@@ -0,0 +1,846 @@
|
|
|
1
|
+
import { TunnelCliError, EXIT_CODE } from './cli-errors.js';
|
|
2
|
+
|
|
3
|
+
const DEFAULT_PORT = 3000;
|
|
4
|
+
const DEFAULT_TAIL_LINES = 200;
|
|
5
|
+
|
|
6
|
+
function levenshteinDistance(a, b) {
|
|
7
|
+
const m = a.length;
|
|
8
|
+
const n = b.length;
|
|
9
|
+
const dp = Array.from({ length: m + 1 }, () => new Array(n + 1).fill(0));
|
|
10
|
+
for (let i = 0; i <= m; i++) dp[i][0] = i;
|
|
11
|
+
for (let j = 0; j <= n; j++) dp[0][j] = j;
|
|
12
|
+
for (let i = 1; i <= m; i++) {
|
|
13
|
+
for (let j = 1; j <= n; j++) {
|
|
14
|
+
dp[i][j] = a[i - 1] === b[j - 1]
|
|
15
|
+
? dp[i - 1][j - 1]
|
|
16
|
+
: 1 + Math.min(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return dp[m][n];
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function findClosestMatch(input, candidates, maxDistance = 3) {
|
|
23
|
+
if (typeof input !== 'string' || input.length === 0 || !Array.isArray(candidates)) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
const normalized = input.toLowerCase();
|
|
27
|
+
let bestCandidate = null;
|
|
28
|
+
let bestDistance = maxDistance + 1;
|
|
29
|
+
for (const candidate of candidates) {
|
|
30
|
+
const distance = levenshteinDistance(normalized, candidate.toLowerCase());
|
|
31
|
+
if (distance < bestDistance) {
|
|
32
|
+
bestDistance = distance;
|
|
33
|
+
bestCandidate = candidate;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return bestDistance <= maxDistance ? bestCandidate : null;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function splitOptionToken(arg) {
|
|
40
|
+
if (!arg.startsWith('-')) return null;
|
|
41
|
+
if (arg.startsWith('--')) {
|
|
42
|
+
const eqIndex = arg.indexOf('=');
|
|
43
|
+
return {
|
|
44
|
+
name: eqIndex >= 0 ? arg.slice(2, eqIndex) : arg.slice(2),
|
|
45
|
+
inlineValue: eqIndex >= 0 ? arg.slice(eqIndex + 1) : undefined,
|
|
46
|
+
long: true,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
name: arg.slice(1),
|
|
51
|
+
inlineValue: undefined,
|
|
52
|
+
long: false,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function parseArgs(argv = process.argv.slice(2)) {
|
|
57
|
+
const args = Array.isArray(argv) ? [...argv] : [];
|
|
58
|
+
const options = {
|
|
59
|
+
port: DEFAULT_PORT,
|
|
60
|
+
host: undefined,
|
|
61
|
+
uiPassword: process.env.PICHAMBER_UI_PASSWORD || process.env.PICHAMBER_UI_PASSWORD || undefined,
|
|
62
|
+
json: false,
|
|
63
|
+
all: false,
|
|
64
|
+
follow: true,
|
|
65
|
+
lines: DEFAULT_TAIL_LINES,
|
|
66
|
+
limit: undefined,
|
|
67
|
+
provider: undefined,
|
|
68
|
+
mode: undefined,
|
|
69
|
+
profile: undefined,
|
|
70
|
+
name: undefined,
|
|
71
|
+
title: undefined,
|
|
72
|
+
configPath: undefined,
|
|
73
|
+
token: undefined,
|
|
74
|
+
tokenFile: undefined,
|
|
75
|
+
tokenStdin: false,
|
|
76
|
+
hostname: undefined,
|
|
77
|
+
server: undefined,
|
|
78
|
+
connectTtl: undefined,
|
|
79
|
+
sessionTtl: undefined,
|
|
80
|
+
qr: false,
|
|
81
|
+
explicitQr: false,
|
|
82
|
+
force: false,
|
|
83
|
+
showSecrets: false,
|
|
84
|
+
dryRun: false,
|
|
85
|
+
plain: false,
|
|
86
|
+
quiet: false,
|
|
87
|
+
explicitPort: false,
|
|
88
|
+
explicitUiPassword: false,
|
|
89
|
+
envSnapshot: true,
|
|
90
|
+
foreground: false,
|
|
91
|
+
lan: false,
|
|
92
|
+
apiOnly: false,
|
|
93
|
+
project: undefined,
|
|
94
|
+
session: undefined,
|
|
95
|
+
message: undefined,
|
|
96
|
+
prompt: undefined,
|
|
97
|
+
model: undefined,
|
|
98
|
+
agent: undefined,
|
|
99
|
+
variant: undefined,
|
|
100
|
+
directory: undefined,
|
|
101
|
+
role: undefined,
|
|
102
|
+
last: false,
|
|
103
|
+
wait: false,
|
|
104
|
+
timeout: undefined,
|
|
105
|
+
lastAssistant: false,
|
|
106
|
+
withStatus: false,
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
const removedFlagErrors = [];
|
|
110
|
+
const positional = [];
|
|
111
|
+
let helpRequested = false;
|
|
112
|
+
let versionRequested = false;
|
|
113
|
+
|
|
114
|
+
const consumeValue = (index, inlineValue) => {
|
|
115
|
+
if (typeof inlineValue === 'string' && inlineValue.length > 0) {
|
|
116
|
+
return { value: inlineValue, nextIndex: index };
|
|
117
|
+
}
|
|
118
|
+
const candidate = args[index + 1];
|
|
119
|
+
if (typeof candidate === 'string' && !candidate.startsWith('-')) {
|
|
120
|
+
return { value: candidate, nextIndex: index + 1 };
|
|
121
|
+
}
|
|
122
|
+
return { value: undefined, nextIndex: index };
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
for (let i = 0; i < args.length; i++) {
|
|
126
|
+
const arg = args[i];
|
|
127
|
+
const parsedToken = splitOptionToken(arg);
|
|
128
|
+
if (!parsedToken) {
|
|
129
|
+
positional.push(arg);
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
const { name, inlineValue, long } = parsedToken;
|
|
134
|
+
switch (name) {
|
|
135
|
+
case 'port':
|
|
136
|
+
case 'p': {
|
|
137
|
+
const { value: consumedValue, nextIndex: consumedIndex } = consumeValue(i, inlineValue);
|
|
138
|
+
let value = consumedValue;
|
|
139
|
+
let nextIndex = consumedIndex;
|
|
140
|
+
|
|
141
|
+
// Support explicit negative numeric values like `-p -1` so we can report
|
|
142
|
+
// a clear range validation error instead of "Unknown option".
|
|
143
|
+
if (value === undefined && typeof inlineValue !== 'string') {
|
|
144
|
+
const candidate = args[i + 1];
|
|
145
|
+
if (typeof candidate === 'string' && /^-\d+$/.test(candidate)) {
|
|
146
|
+
value = candidate;
|
|
147
|
+
nextIndex = i + 1;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
i = nextIndex;
|
|
152
|
+
|
|
153
|
+
if (typeof value !== 'string' || value.trim().length === 0) {
|
|
154
|
+
throw new TunnelCliError('Missing value for --port.', EXIT_CODE.USAGE_ERROR);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
if (!/^-?\d+$/.test(value.trim())) {
|
|
158
|
+
throw new TunnelCliError(`Invalid port value: ${value}`, EXIT_CODE.USAGE_ERROR);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
const parsed = parseInt(value, 10);
|
|
162
|
+
if (parsed < 1 || parsed > 65535) {
|
|
163
|
+
throw new TunnelCliError(`Invalid port value: ${parsed}`, EXIT_CODE.USAGE_ERROR);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
options.port = parsed;
|
|
167
|
+
options.explicitPort = true;
|
|
168
|
+
break;
|
|
169
|
+
}
|
|
170
|
+
case 'host': {
|
|
171
|
+
const { value, nextIndex } = consumeValue(i, inlineValue);
|
|
172
|
+
i = nextIndex;
|
|
173
|
+
if (typeof value !== 'string' || value.trim().length === 0) {
|
|
174
|
+
throw new TunnelCliError('Missing value for --host.', EXIT_CODE.USAGE_ERROR);
|
|
175
|
+
}
|
|
176
|
+
options.host = value.trim();
|
|
177
|
+
break;
|
|
178
|
+
}
|
|
179
|
+
case 'lan':
|
|
180
|
+
options.lan = true;
|
|
181
|
+
break;
|
|
182
|
+
case 'ui-password': {
|
|
183
|
+
const { value, nextIndex } = consumeValue(i, inlineValue);
|
|
184
|
+
i = nextIndex;
|
|
185
|
+
options.uiPassword = typeof value === 'string' ? value : '';
|
|
186
|
+
options.explicitUiPassword = true;
|
|
187
|
+
break;
|
|
188
|
+
}
|
|
189
|
+
case 'provider': {
|
|
190
|
+
const { value, nextIndex } = consumeValue(i, inlineValue);
|
|
191
|
+
i = nextIndex;
|
|
192
|
+
options.provider = typeof value === 'string' ? value : options.provider;
|
|
193
|
+
break;
|
|
194
|
+
}
|
|
195
|
+
case 'mode': {
|
|
196
|
+
const { value, nextIndex } = consumeValue(i, inlineValue);
|
|
197
|
+
i = nextIndex;
|
|
198
|
+
options.mode = typeof value === 'string' ? value : options.mode;
|
|
199
|
+
break;
|
|
200
|
+
}
|
|
201
|
+
case 'profile': {
|
|
202
|
+
const { value, nextIndex } = consumeValue(i, inlineValue);
|
|
203
|
+
i = nextIndex;
|
|
204
|
+
options.profile = typeof value === 'string' ? value : options.profile;
|
|
205
|
+
break;
|
|
206
|
+
}
|
|
207
|
+
case 'name': {
|
|
208
|
+
const { value, nextIndex } = consumeValue(i, inlineValue);
|
|
209
|
+
i = nextIndex;
|
|
210
|
+
options.name = typeof value === 'string' ? value : options.name;
|
|
211
|
+
break;
|
|
212
|
+
}
|
|
213
|
+
case 'title': {
|
|
214
|
+
const { value, nextIndex } = consumeValue(i, inlineValue);
|
|
215
|
+
i = nextIndex;
|
|
216
|
+
options.title = typeof value === 'string' ? value : options.title;
|
|
217
|
+
break;
|
|
218
|
+
}
|
|
219
|
+
case 'branch': {
|
|
220
|
+
const { value, nextIndex } = consumeValue(i, inlineValue);
|
|
221
|
+
i = nextIndex;
|
|
222
|
+
options.branch = typeof value === 'string' ? value : options.branch;
|
|
223
|
+
break;
|
|
224
|
+
}
|
|
225
|
+
case 'start-ref':
|
|
226
|
+
case 'base': {
|
|
227
|
+
const { value, nextIndex } = consumeValue(i, inlineValue);
|
|
228
|
+
i = nextIndex;
|
|
229
|
+
options.startRef = typeof value === 'string' ? value : options.startRef;
|
|
230
|
+
break;
|
|
231
|
+
}
|
|
232
|
+
case 'upstream':
|
|
233
|
+
options.setUpstream = true;
|
|
234
|
+
break;
|
|
235
|
+
case 'no-upstream':
|
|
236
|
+
options.setUpstream = false;
|
|
237
|
+
break;
|
|
238
|
+
case 'project': {
|
|
239
|
+
const { value, nextIndex } = consumeValue(i, inlineValue);
|
|
240
|
+
i = nextIndex;
|
|
241
|
+
options.project = typeof value === 'string' ? value : options.project;
|
|
242
|
+
break;
|
|
243
|
+
}
|
|
244
|
+
case 'dir':
|
|
245
|
+
case 'directory': {
|
|
246
|
+
const { value, nextIndex } = consumeValue(i, inlineValue);
|
|
247
|
+
i = nextIndex;
|
|
248
|
+
options.directory = typeof value === 'string' ? value : options.directory;
|
|
249
|
+
break;
|
|
250
|
+
}
|
|
251
|
+
case 'session': {
|
|
252
|
+
const { value, nextIndex } = consumeValue(i, inlineValue);
|
|
253
|
+
i = nextIndex;
|
|
254
|
+
options.session = typeof value === 'string' ? value : options.session;
|
|
255
|
+
break;
|
|
256
|
+
}
|
|
257
|
+
case 'message': {
|
|
258
|
+
const { value, nextIndex } = consumeValue(i, inlineValue);
|
|
259
|
+
i = nextIndex;
|
|
260
|
+
options.message = typeof value === 'string' ? value : options.message;
|
|
261
|
+
break;
|
|
262
|
+
}
|
|
263
|
+
case 'prompt': {
|
|
264
|
+
const { value, nextIndex } = consumeValue(i, inlineValue);
|
|
265
|
+
i = nextIndex;
|
|
266
|
+
options.prompt = typeof value === 'string' ? value : options.prompt;
|
|
267
|
+
break;
|
|
268
|
+
}
|
|
269
|
+
case 'model': {
|
|
270
|
+
const { value, nextIndex } = consumeValue(i, inlineValue);
|
|
271
|
+
i = nextIndex;
|
|
272
|
+
options.model = typeof value === 'string' ? value : options.model;
|
|
273
|
+
break;
|
|
274
|
+
}
|
|
275
|
+
case 'config': {
|
|
276
|
+
const { value, nextIndex } = consumeValue(i, inlineValue);
|
|
277
|
+
i = nextIndex;
|
|
278
|
+
options.configPath = typeof value === 'string' ? value : null;
|
|
279
|
+
break;
|
|
280
|
+
}
|
|
281
|
+
case 'token': {
|
|
282
|
+
const { value, nextIndex } = consumeValue(i, inlineValue);
|
|
283
|
+
i = nextIndex;
|
|
284
|
+
options.token = typeof value === 'string' ? value : options.token;
|
|
285
|
+
break;
|
|
286
|
+
}
|
|
287
|
+
case 'token-file': {
|
|
288
|
+
const { value, nextIndex } = consumeValue(i, inlineValue);
|
|
289
|
+
i = nextIndex;
|
|
290
|
+
options.tokenFile = typeof value === 'string' ? value : options.tokenFile;
|
|
291
|
+
break;
|
|
292
|
+
}
|
|
293
|
+
case 'token-stdin':
|
|
294
|
+
options.tokenStdin = true;
|
|
295
|
+
break;
|
|
296
|
+
case 'hostname': {
|
|
297
|
+
const { value, nextIndex } = consumeValue(i, inlineValue);
|
|
298
|
+
i = nextIndex;
|
|
299
|
+
options.hostname = typeof value === 'string' ? value : options.hostname;
|
|
300
|
+
break;
|
|
301
|
+
}
|
|
302
|
+
case 'server':
|
|
303
|
+
case 'server-url': {
|
|
304
|
+
const { value, nextIndex } = consumeValue(i, inlineValue);
|
|
305
|
+
i = nextIndex;
|
|
306
|
+
if (typeof value !== 'string' || value.trim().length === 0) {
|
|
307
|
+
throw new TunnelCliError('Missing value for --server.', EXIT_CODE.USAGE_ERROR);
|
|
308
|
+
}
|
|
309
|
+
options.server = value.trim();
|
|
310
|
+
break;
|
|
311
|
+
}
|
|
312
|
+
case 'connect-ttl': {
|
|
313
|
+
const { value, nextIndex } = consumeValue(i, inlineValue);
|
|
314
|
+
i = nextIndex;
|
|
315
|
+
options.connectTtl = typeof value === 'string' ? value : options.connectTtl;
|
|
316
|
+
break;
|
|
317
|
+
}
|
|
318
|
+
case 'session-ttl': {
|
|
319
|
+
const { value, nextIndex } = consumeValue(i, inlineValue);
|
|
320
|
+
i = nextIndex;
|
|
321
|
+
options.sessionTtl = typeof value === 'string' ? value : options.sessionTtl;
|
|
322
|
+
break;
|
|
323
|
+
}
|
|
324
|
+
case 'json':
|
|
325
|
+
options.json = true;
|
|
326
|
+
break;
|
|
327
|
+
case 'all':
|
|
328
|
+
options.all = true;
|
|
329
|
+
break;
|
|
330
|
+
case 'last':
|
|
331
|
+
options.last = true;
|
|
332
|
+
break;
|
|
333
|
+
case 'last-assistant':
|
|
334
|
+
options.lastAssistant = true;
|
|
335
|
+
break;
|
|
336
|
+
case 'wait':
|
|
337
|
+
options.wait = true;
|
|
338
|
+
break;
|
|
339
|
+
case 'timeout': {
|
|
340
|
+
const { value, nextIndex } = consumeValue(i, inlineValue);
|
|
341
|
+
i = nextIndex;
|
|
342
|
+
options.timeout = typeof value === 'string' ? value : options.timeout;
|
|
343
|
+
break;
|
|
344
|
+
}
|
|
345
|
+
case 'with-status':
|
|
346
|
+
options.withStatus = true;
|
|
347
|
+
break;
|
|
348
|
+
case 'role': {
|
|
349
|
+
const { value, nextIndex } = consumeValue(i, inlineValue);
|
|
350
|
+
i = nextIndex;
|
|
351
|
+
options.role = typeof value === 'string' ? value : options.role;
|
|
352
|
+
break;
|
|
353
|
+
}
|
|
354
|
+
case 'no-follow':
|
|
355
|
+
options.follow = false;
|
|
356
|
+
break;
|
|
357
|
+
case 'no-env-snapshot':
|
|
358
|
+
options.envSnapshot = false;
|
|
359
|
+
break;
|
|
360
|
+
case 'lines': {
|
|
361
|
+
const { value, nextIndex } = consumeValue(i, inlineValue);
|
|
362
|
+
i = nextIndex;
|
|
363
|
+
const parsed = parseInt(value ?? '', 10);
|
|
364
|
+
if (Number.isFinite(parsed) && parsed > 0) {
|
|
365
|
+
options.lines = parsed;
|
|
366
|
+
}
|
|
367
|
+
break;
|
|
368
|
+
}
|
|
369
|
+
case 'limit': {
|
|
370
|
+
const { value, nextIndex } = consumeValue(i, inlineValue);
|
|
371
|
+
i = nextIndex;
|
|
372
|
+
const parsed = parseInt(value ?? '', 10);
|
|
373
|
+
if (!Number.isFinite(parsed) || parsed < 1) {
|
|
374
|
+
throw new TunnelCliError('Invalid limit value. Provide a positive integer.', EXIT_CODE.USAGE_ERROR);
|
|
375
|
+
}
|
|
376
|
+
options.limit = parsed;
|
|
377
|
+
break;
|
|
378
|
+
}
|
|
379
|
+
case 'relay':
|
|
380
|
+
options.relay = true;
|
|
381
|
+
break;
|
|
382
|
+
case 'qr':
|
|
383
|
+
options.qr = true;
|
|
384
|
+
options.explicitQr = true;
|
|
385
|
+
break;
|
|
386
|
+
case 'no-qr':
|
|
387
|
+
options.qr = false;
|
|
388
|
+
options.explicitQr = true;
|
|
389
|
+
break;
|
|
390
|
+
case 'force':
|
|
391
|
+
options.force = true;
|
|
392
|
+
break;
|
|
393
|
+
case 'show-secrets':
|
|
394
|
+
options.showSecrets = true;
|
|
395
|
+
break;
|
|
396
|
+
case 'dry-run':
|
|
397
|
+
options.dryRun = true;
|
|
398
|
+
break;
|
|
399
|
+
case 'plain':
|
|
400
|
+
options.plain = true;
|
|
401
|
+
break;
|
|
402
|
+
case 'quiet':
|
|
403
|
+
case 'q':
|
|
404
|
+
options.quiet = true;
|
|
405
|
+
break;
|
|
406
|
+
case 'help':
|
|
407
|
+
case 'h':
|
|
408
|
+
helpRequested = true;
|
|
409
|
+
break;
|
|
410
|
+
case 'version':
|
|
411
|
+
case 'v':
|
|
412
|
+
versionRequested = true;
|
|
413
|
+
break;
|
|
414
|
+
case 'foreground':
|
|
415
|
+
case 'no-daemon':
|
|
416
|
+
options.foreground = true;
|
|
417
|
+
break;
|
|
418
|
+
case 'api-only':
|
|
419
|
+
options.apiOnly = true;
|
|
420
|
+
break;
|
|
421
|
+
case 'daemon':
|
|
422
|
+
case 'd':
|
|
423
|
+
// Legacy no-op: daemon mode is already the default, but older clients
|
|
424
|
+
// may still pass this when starting a remote server.
|
|
425
|
+
break;
|
|
426
|
+
case 'try-cf-tunnel':
|
|
427
|
+
removedFlagErrors.push('`--try-cf-tunnel` was removed. Use: pichamber tunnel start --provider cloudflare --mode quick');
|
|
428
|
+
break;
|
|
429
|
+
case 'tunnel-qr':
|
|
430
|
+
removedFlagErrors.push('`--tunnel-qr` was removed. Use: pichamber tunnel start ... --qr');
|
|
431
|
+
break;
|
|
432
|
+
case 'tunnel-password-url':
|
|
433
|
+
removedFlagErrors.push('`--tunnel-password-url` was removed. Use UI password auth directly after tunnel start.');
|
|
434
|
+
break;
|
|
435
|
+
case 'tunnel-provider':
|
|
436
|
+
case 'tunnel-mode':
|
|
437
|
+
case 'tunnel-config':
|
|
438
|
+
case 'tunnel-token':
|
|
439
|
+
case 'tunnel-hostname':
|
|
440
|
+
case 'tunnel':
|
|
441
|
+
removedFlagErrors.push(`\`--${name}\` was removed from top-level serve flow. Use: pichamber tunnel start ...`);
|
|
442
|
+
break;
|
|
443
|
+
default:
|
|
444
|
+
if (!long && name.length === 1) {
|
|
445
|
+
removedFlagErrors.push(`Unknown option: -${name}`);
|
|
446
|
+
} else {
|
|
447
|
+
removedFlagErrors.push(`Unknown option: --${name}`);
|
|
448
|
+
}
|
|
449
|
+
break;
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
const command = positional[0] || 'serve';
|
|
454
|
+
const subcommand = command === 'tunnel' ? (positional[1] || 'help') : null;
|
|
455
|
+
const tunnelAction = command === 'tunnel' ? (positional[2] || null) : null;
|
|
456
|
+
const startupAction = command === 'startup' ? (positional[1] || 'status') : null;
|
|
457
|
+
|
|
458
|
+
if (options.lan && typeof options.host !== 'string') {
|
|
459
|
+
options.host = '0.0.0.0';
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
if (command !== 'tunnel' && typeof options.hostname === 'string' && typeof options.host !== 'string') {
|
|
463
|
+
options.host = options.hostname;
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
return {
|
|
467
|
+
command,
|
|
468
|
+
subcommand,
|
|
469
|
+
tunnelAction,
|
|
470
|
+
startupAction,
|
|
471
|
+
options,
|
|
472
|
+
removedFlagErrors,
|
|
473
|
+
helpRequested,
|
|
474
|
+
versionRequested,
|
|
475
|
+
};
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
function showHelp() {
|
|
479
|
+
console.log(`
|
|
480
|
+
PiChamber - Web interface for the Pi coding agent
|
|
481
|
+
|
|
482
|
+
USAGE:
|
|
483
|
+
pichamber [COMMAND] [OPTIONS]
|
|
484
|
+
|
|
485
|
+
COMMANDS:
|
|
486
|
+
serve Start the web server (daemon default)
|
|
487
|
+
stop Stop running instance(s)
|
|
488
|
+
restart Stop and start the server
|
|
489
|
+
status Show server status
|
|
490
|
+
tunnel Tunnel lifecycle commands
|
|
491
|
+
startup Manage launch at system startup
|
|
492
|
+
logs Tail PiChamber logs
|
|
493
|
+
connect-url Generate URL/QR for connecting another client
|
|
494
|
+
update Check for and install updates
|
|
495
|
+
|
|
496
|
+
OPTIONS:
|
|
497
|
+
-p, --port Web server port (default: ${DEFAULT_PORT})
|
|
498
|
+
--host Bind address (default: 127.0.0.1)
|
|
499
|
+
--hostname Alias for --host outside tunnel commands
|
|
500
|
+
--lan Bind to 0.0.0.0 for LAN access
|
|
501
|
+
--server <url> Public/server URL for connect-url links
|
|
502
|
+
--relay connect-url: also include the end-to-end-encrypted relay transport
|
|
503
|
+
--ui-password [password] Protect browser UI with a password (generates one when omitted)
|
|
504
|
+
--api-only Start API routes only, without serving browser UI assets
|
|
505
|
+
--foreground Run server in foreground (use with systemd/process managers)
|
|
506
|
+
--no-daemon Alias for --foreground
|
|
507
|
+
-h, --help Show help
|
|
508
|
+
-v, --version Show version
|
|
509
|
+
|
|
510
|
+
ENVIRONMENT:
|
|
511
|
+
PICHAMBER_HOST Bind address (e.g. 0.0.0.0 for all interfaces)
|
|
512
|
+
PICHAMBER_UI_PASSWORD Alternative to --ui-password flag
|
|
513
|
+
PICHAMBER_API_ONLY Set to true/1 to start API routes only
|
|
514
|
+
PICHAMBER_DATA_DIR Override PiChamber data directory
|
|
515
|
+
|
|
516
|
+
(Legacy PICHAMBER_* spellings are still honored.)
|
|
517
|
+
|
|
518
|
+
EXAMPLES:
|
|
519
|
+
pichamber # Start in daemon mode on default port 3000 (or free port)
|
|
520
|
+
pichamber --port 8080 # Start on port 8080 (daemon)
|
|
521
|
+
pichamber --lan --port 3002 # Start on LAN at 0.0.0.0:3002
|
|
522
|
+
pichamber serve --foreground # Start in foreground (for systemd Type=simple)
|
|
523
|
+
pichamber connect-url --port 3000 --qr
|
|
524
|
+
pichamber connect-url --server https://pichamber.example.com
|
|
525
|
+
pichamber startup enable # Start PiChamber at user login
|
|
526
|
+
pichamber tunnel help # Show tunnel lifecycle help
|
|
527
|
+
pichamber logs # Follow logs for latest running instance
|
|
528
|
+
`);
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
function showStartupHelp() {
|
|
532
|
+
console.log(`
|
|
533
|
+
PiChamber Startup Commands
|
|
534
|
+
|
|
535
|
+
USAGE:
|
|
536
|
+
pichamber startup <SUBCOMMAND> [OPTIONS]
|
|
537
|
+
|
|
538
|
+
SUBCOMMANDS:
|
|
539
|
+
status Show startup integration status
|
|
540
|
+
enable Install and start native user startup integration
|
|
541
|
+
disable Stop and remove native user startup integration
|
|
542
|
+
|
|
543
|
+
OPTIONS:
|
|
544
|
+
-p, --port Web server port used by startup service
|
|
545
|
+
--host Bind address used by startup service
|
|
546
|
+
--ui-password Protect browser UI with single password
|
|
547
|
+
--api-only Start API routes only, without serving browser UI assets
|
|
548
|
+
--no-env-snapshot Do not save current environment for startup service
|
|
549
|
+
--json Output machine-readable JSON
|
|
550
|
+
-q, --quiet Suppress non-essential output
|
|
551
|
+
|
|
552
|
+
EXAMPLES:
|
|
553
|
+
pichamber startup enable
|
|
554
|
+
pichamber startup enable --port 3000
|
|
555
|
+
pichamber startup enable --port 3000 --api-only --host 0.0.0.0
|
|
556
|
+
pichamber startup status --json
|
|
557
|
+
`);
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
function showConnectUrlHelp() {
|
|
561
|
+
console.log(`
|
|
562
|
+
PiChamber Connect URL
|
|
563
|
+
|
|
564
|
+
USAGE:
|
|
565
|
+
pichamber connect-url [OPTIONS]
|
|
566
|
+
|
|
567
|
+
DESCRIPTION:
|
|
568
|
+
Generate an pichamber:// connection link for adding this server to another
|
|
569
|
+
PiChamber app. If no server is running on the selected port, it starts one.
|
|
570
|
+
|
|
571
|
+
OPTIONS:
|
|
572
|
+
-p, --port <port> Server port to use or start (default: ${DEFAULT_PORT})
|
|
573
|
+
--host <address> Bind address when starting the server
|
|
574
|
+
--hostname <address> Alias for --host
|
|
575
|
+
--lan Bind to 0.0.0.0 for LAN access when starting
|
|
576
|
+
--server <url> Public URL saved into the connection link
|
|
577
|
+
--server-url <url> Alias for --server
|
|
578
|
+
--relay Also include the end-to-end-encrypted relay transport
|
|
579
|
+
so the link works away from the local network. The
|
|
580
|
+
device prefers the direct connection when reachable;
|
|
581
|
+
the instance brings the relay up on its own. Set
|
|
582
|
+
PICHAMBER_RELAY_URL to use a self-hosted relay.
|
|
583
|
+
--name <label> Label saved with the remote client token
|
|
584
|
+
--ui-password <value> Protect browser access when UI routes are enabled
|
|
585
|
+
--api-only Start in headless/API-only mode when starting
|
|
586
|
+
--qr Print a QR code for the connection link
|
|
587
|
+
--json Output machine-readable JSON
|
|
588
|
+
-q, --quiet Print only the connection link
|
|
589
|
+
-h, --help Show this help
|
|
590
|
+
|
|
591
|
+
EXAMPLES:
|
|
592
|
+
pichamber connect-url --port 3000 --qr
|
|
593
|
+
pichamber connect-url --port 3000 --api-only --lan --server http://workstation.local:3000 --qr
|
|
594
|
+
pichamber connect-url --server https://pichamber.example.com --name Workstation
|
|
595
|
+
pichamber connect-url --relay --name "My laptop"
|
|
596
|
+
`);
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
function showTunnelHelp() {
|
|
600
|
+
console.log(`
|
|
601
|
+
Tunnel Lifecycle Commands
|
|
602
|
+
|
|
603
|
+
USAGE:
|
|
604
|
+
pichamber tunnel <SUBCOMMAND> [OPTIONS]
|
|
605
|
+
|
|
606
|
+
SUBCOMMANDS:
|
|
607
|
+
help Show this tunnel help
|
|
608
|
+
providers Show available tunnel providers and capabilities
|
|
609
|
+
ready Check tunnel readiness for a provider
|
|
610
|
+
doctor Run deep tunnel diagnostics
|
|
611
|
+
status Show tunnel status
|
|
612
|
+
start Start a tunnel
|
|
613
|
+
stop Stop active tunnel (keep server running)
|
|
614
|
+
profile Manage saved managed-remote profiles
|
|
615
|
+
|
|
616
|
+
COMMON OPTIONS:
|
|
617
|
+
-p, --port Target PiChamber instance port
|
|
618
|
+
--host Bind address when auto-starting an instance
|
|
619
|
+
--lan Bind to 0.0.0.0 when auto-starting an instance
|
|
620
|
+
--ui-password [password] Protect browser UI when auto-starting an instance (generates one when omitted)
|
|
621
|
+
--api-only Start API routes only when auto-starting an instance
|
|
622
|
+
--json Output machine-readable JSON
|
|
623
|
+
--all Apply to all running instances (doctor default, stop)
|
|
624
|
+
|
|
625
|
+
START OPTIONS:
|
|
626
|
+
--provider <id> Tunnel provider id (default: cloudflare)
|
|
627
|
+
--mode <id> Tunnel mode (default: quick)
|
|
628
|
+
--profile <name> Start tunnel from saved profile name
|
|
629
|
+
--config [path] Managed-local config path (optional)
|
|
630
|
+
--token <token> Managed-remote token (visible in process list)
|
|
631
|
+
--token-file <path> Read token from file (recommended)
|
|
632
|
+
--token-stdin Read token from stdin
|
|
633
|
+
--hostname <hostname> Managed-remote hostname
|
|
634
|
+
--connect-ttl <value> Connect-link TTL (e.g. 30m, 24h, 1d)
|
|
635
|
+
--session-ttl <value> Session TTL (e.g. 8h, 24h, 1d)
|
|
636
|
+
--qr Print QR code for resulting tunnel URL
|
|
637
|
+
--no-qr Disable QR output
|
|
638
|
+
--dry-run Validate inputs without applying changes
|
|
639
|
+
|
|
640
|
+
OUTPUT OPTIONS:
|
|
641
|
+
--show-secrets Show full tokens in output (default: redacted)
|
|
642
|
+
--plain Disable colors and decorations
|
|
643
|
+
-q, --quiet Suppress non-essential output
|
|
644
|
+
--json Output machine-readable JSON
|
|
645
|
+
|
|
646
|
+
BEHAVIOR NOTES:
|
|
647
|
+
- One active tunnel per PiChamber instance.
|
|
648
|
+
- Starting a different mode/provider replaces the current tunnel and revokes old connect links/sessions.
|
|
649
|
+
- Connect links are one-time; generating a new link revokes the previous unused link.
|
|
650
|
+
|
|
651
|
+
PROFILE USAGE:
|
|
652
|
+
pichamber tunnel profile list [--provider <id>] [--json]
|
|
653
|
+
pichamber tunnel profile show --name <name> [--provider <id>] [--json]
|
|
654
|
+
pichamber tunnel profile add --provider <id> --mode managed-remote --name <name> --hostname <host> --token <token> [--force] [--json]
|
|
655
|
+
pichamber tunnel profile add --provider <id> --mode managed-remote --name <name> --hostname <host> --token-file <path> [--force] [--json]
|
|
656
|
+
pichamber tunnel profile remove --name <name> [--provider <id>] [--json]
|
|
657
|
+
|
|
658
|
+
SHELL COMPLETION:
|
|
659
|
+
pichamber tunnel completion bash Generate Bash completion script
|
|
660
|
+
pichamber tunnel completion zsh Generate Zsh completion script
|
|
661
|
+
pichamber tunnel completion fish Generate Fish completion script
|
|
662
|
+
|
|
663
|
+
EXAMPLES:
|
|
664
|
+
pichamber tunnel providers
|
|
665
|
+
pichamber tunnel ready --provider cloudflare
|
|
666
|
+
pichamber tunnel doctor --provider cloudflare
|
|
667
|
+
pichamber tunnel status
|
|
668
|
+
pichamber tunnel start --qr
|
|
669
|
+
pichamber tunnel start --profile prod-main
|
|
670
|
+
pichamber tunnel start --provider cloudflare --mode managed-remote --token-file ~/.secrets/cf-token --hostname app.example.com
|
|
671
|
+
pichamber tunnel start --provider cloudflare --mode managed-local --config ~/.cloudflared/config.yml
|
|
672
|
+
pichamber tunnel start --dry-run --provider cloudflare --mode managed-remote --token-file ~/.secrets/cf-token --hostname app.example.com
|
|
673
|
+
echo "$TOKEN" | pichamber tunnel profile add --provider cloudflare --mode managed-remote --name prod-main --hostname app.example.com --token-stdin
|
|
674
|
+
pichamber tunnel profile list --provider cloudflare
|
|
675
|
+
pichamber tunnel profile list --json --show-secrets
|
|
676
|
+
pichamber tunnel stop --port 3000
|
|
677
|
+
`);
|
|
678
|
+
}
|
|
679
|
+
|
|
680
|
+
function generateCompletionScript(shell) {
|
|
681
|
+
const normalized = typeof shell === 'string' ? shell.trim().toLowerCase() : '';
|
|
682
|
+
|
|
683
|
+
if (normalized === 'bash') {
|
|
684
|
+
return `# Bash completion for pichamber tunnel
|
|
685
|
+
# Add to ~/.bashrc: eval "$(pichamber tunnel completion bash)"
|
|
686
|
+
_pichamber_tunnel() {
|
|
687
|
+
local cur prev commands tunnel_commands profile_commands common_flags start_flags
|
|
688
|
+
COMPREPLY=()
|
|
689
|
+
cur="\${COMP_WORDS[COMP_CWORD]}"
|
|
690
|
+
prev="\${COMP_WORDS[COMP_CWORD-1]}"
|
|
691
|
+
|
|
692
|
+
commands="serve stop restart status tunnel logs update"},{
|
|
693
|
+
tunnel_commands="help providers ready doctor status start stop profile completion"
|
|
694
|
+
profile_commands="list show add remove"
|
|
695
|
+
common_flags="--port --foreground --no-daemon --json --all --help --version --plain --quiet"
|
|
696
|
+
start_flags="--provider --mode --profile --config --token --token-file --token-stdin --hostname --connect-ttl --session-ttl --qr --no-qr --dry-run --show-secrets"
|
|
697
|
+
|
|
698
|
+
if [[ \${COMP_CWORD} -eq 1 ]]; then
|
|
699
|
+
COMPREPLY=( $(compgen -W "\${commands}" -- "\${cur}") )
|
|
700
|
+
return 0
|
|
701
|
+
fi
|
|
702
|
+
|
|
703
|
+
if [[ "\${COMP_WORDS[1]}" == "tunnel" ]]; then
|
|
704
|
+
if [[ \${COMP_CWORD} -eq 2 ]]; then
|
|
705
|
+
COMPREPLY=( $(compgen -W "\${tunnel_commands}" -- "\${cur}") )
|
|
706
|
+
return 0
|
|
707
|
+
fi
|
|
708
|
+
if [[ "\${COMP_WORDS[2]}" == "profile" && \${COMP_CWORD} -eq 3 ]]; then
|
|
709
|
+
COMPREPLY=( $(compgen -W "\${profile_commands}" -- "\${cur}") )
|
|
710
|
+
return 0
|
|
711
|
+
fi
|
|
712
|
+
if [[ "\${COMP_WORDS[2]}" == "completion" && \${COMP_CWORD} -eq 3 ]]; then
|
|
713
|
+
COMPREPLY=( $(compgen -W "bash zsh fish" -- "\${cur}") )
|
|
714
|
+
return 0
|
|
715
|
+
fi
|
|
716
|
+
if [[ "\${COMP_WORDS[2]}" == "start" ]]; then
|
|
717
|
+
COMPREPLY=( $(compgen -W "\${start_flags} \${common_flags}" -- "\${cur}") )
|
|
718
|
+
return 0
|
|
719
|
+
fi
|
|
720
|
+
COMPREPLY=( $(compgen -W "\${common_flags}" -- "\${cur}") )
|
|
721
|
+
return 0
|
|
722
|
+
fi
|
|
723
|
+
|
|
724
|
+
COMPREPLY=( $(compgen -W "\${common_flags}" -- "\${cur}") )
|
|
725
|
+
return 0
|
|
726
|
+
}
|
|
727
|
+
complete -F _pichamber_tunnel pichamber
|
|
728
|
+
`;
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
if (normalized === 'zsh') {
|
|
732
|
+
return `#compdef pichamber
|
|
733
|
+
# Zsh completion for pichamber tunnel
|
|
734
|
+
# Add to ~/.zshrc: eval "$(pichamber tunnel completion zsh)"
|
|
735
|
+
|
|
736
|
+
_pichamber() {
|
|
737
|
+
local -a commands tunnel_commands profile_commands
|
|
738
|
+
|
|
739
|
+
commands=(
|
|
740
|
+
'serve:Start the web server'
|
|
741
|
+
'stop:Stop running instance(s)'
|
|
742
|
+
'restart:Stop and start the server'
|
|
743
|
+
'status:Show server status'
|
|
744
|
+
'tunnel:Tunnel lifecycle commands'
|
|
745
|
+
'logs:Tail PiChamber logs'
|
|
746
|
+
'update:Check for and install updates'
|
|
747
|
+
)
|
|
748
|
+
|
|
749
|
+
tunnel_commands=(
|
|
750
|
+
'help:Show tunnel help'
|
|
751
|
+
'providers:Show available providers'
|
|
752
|
+
'ready:Check tunnel readiness'
|
|
753
|
+
'doctor:Run tunnel diagnostics'
|
|
754
|
+
'status:Show tunnel status'
|
|
755
|
+
'start:Start a tunnel'
|
|
756
|
+
'stop:Stop active tunnel'
|
|
757
|
+
'profile:Manage saved profiles'
|
|
758
|
+
'completion:Generate shell completion'
|
|
759
|
+
)
|
|
760
|
+
|
|
761
|
+
profile_commands=(
|
|
762
|
+
'list:List profiles'
|
|
763
|
+
'show:Show profile details'
|
|
764
|
+
'add:Add a profile'
|
|
765
|
+
'remove:Remove a profile'
|
|
766
|
+
)
|
|
767
|
+
|
|
768
|
+
_arguments -C \\
|
|
769
|
+
'1:command:->command' \\
|
|
770
|
+
'*::arg:->args'
|
|
771
|
+
|
|
772
|
+
case \$state in
|
|
773
|
+
command)
|
|
774
|
+
_describe 'command' commands
|
|
775
|
+
;;
|
|
776
|
+
args)
|
|
777
|
+
case \$words[1] in
|
|
778
|
+
tunnel)
|
|
779
|
+
if (( CURRENT == 2 )); then
|
|
780
|
+
_describe 'tunnel command' tunnel_commands
|
|
781
|
+
elif [[ \$words[2] == "profile" ]] && (( CURRENT == 3 )); then
|
|
782
|
+
_describe 'profile action' profile_commands
|
|
783
|
+
elif [[ \$words[2] == "completion" ]] && (( CURRENT == 3 )); then
|
|
784
|
+
_values 'shell' bash zsh fish
|
|
785
|
+
fi
|
|
786
|
+
;;
|
|
787
|
+
esac
|
|
788
|
+
;;
|
|
789
|
+
esac
|
|
790
|
+
}
|
|
791
|
+
|
|
792
|
+
compdef _pichamber pichamber
|
|
793
|
+
`;
|
|
794
|
+
}
|
|
795
|
+
|
|
796
|
+
if (normalized === 'fish') {
|
|
797
|
+
return `# Fish completion for pichamber tunnel
|
|
798
|
+
# Save to ~/.config/fish/completions/pichamber.fish
|
|
799
|
+
|
|
800
|
+
complete -c pichamber -n '__fish_use_subcommand' -a 'serve' -d 'Start the web server'
|
|
801
|
+
complete -c pichamber -n '__fish_seen_subcommand_from serve' -l foreground -d 'Run in foreground (for systemd/process managers)'
|
|
802
|
+
complete -c pichamber -n '__fish_seen_subcommand_from serve' -l no-daemon -d 'Run in foreground (alias for --foreground)'
|
|
803
|
+
complete -c pichamber -n '__fish_use_subcommand' -a 'stop' -d 'Stop running instance(s)'
|
|
804
|
+
complete -c pichamber -n '__fish_use_subcommand' -a 'restart' -d 'Stop and start the server'
|
|
805
|
+
complete -c pichamber -n '__fish_use_subcommand' -a 'status' -d 'Show server status'
|
|
806
|
+
complete -c pichamber -n '__fish_use_subcommand' -a 'tunnel' -d 'Tunnel lifecycle commands'
|
|
807
|
+
complete -c pichamber -n '__fish_use_subcommand' -a 'logs' -d 'Tail logs'
|
|
808
|
+
complete -c pichamber -n '__fish_use_subcommand' -a 'update' -d 'Check for updates'
|
|
809
|
+
|
|
810
|
+
complete -c pichamber -n '__fish_seen_subcommand_from tunnel; and not __fish_seen_subcommand_from help providers ready doctor status start stop profile completion' -a 'help' -d 'Show tunnel help'
|
|
811
|
+
complete -c pichamber -n '__fish_seen_subcommand_from tunnel; and not __fish_seen_subcommand_from help providers ready doctor status start stop profile completion' -a 'providers' -d 'Show providers'
|
|
812
|
+
complete -c pichamber -n '__fish_seen_subcommand_from tunnel; and not __fish_seen_subcommand_from help providers ready doctor status start stop profile completion' -a 'ready' -d 'Check readiness'
|
|
813
|
+
complete -c pichamber -n '__fish_seen_subcommand_from tunnel; and not __fish_seen_subcommand_from help providers ready doctor status start stop profile completion' -a 'doctor' -d 'Run diagnostics'
|
|
814
|
+
complete -c pichamber -n '__fish_seen_subcommand_from tunnel; and not __fish_seen_subcommand_from help providers ready doctor status start stop profile completion' -a 'status' -d 'Show tunnel status'
|
|
815
|
+
complete -c pichamber -n '__fish_seen_subcommand_from tunnel; and not __fish_seen_subcommand_from help providers ready doctor status start stop profile completion' -a 'start' -d 'Start a tunnel'
|
|
816
|
+
complete -c pichamber -n '__fish_seen_subcommand_from tunnel; and not __fish_seen_subcommand_from help providers ready doctor status start stop profile completion' -a 'stop' -d 'Stop tunnel'
|
|
817
|
+
complete -c pichamber -n '__fish_seen_subcommand_from tunnel; and not __fish_seen_subcommand_from help providers ready doctor status start stop profile completion' -a 'profile' -d 'Manage profiles'
|
|
818
|
+
complete -c pichamber -n '__fish_seen_subcommand_from tunnel; and not __fish_seen_subcommand_from help providers ready doctor status start stop profile completion' -a 'completion' -d 'Generate completions'
|
|
819
|
+
|
|
820
|
+
complete -c pichamber -n '__fish_seen_subcommand_from tunnel; and __fish_seen_subcommand_from start' -l provider -d 'Provider id'
|
|
821
|
+
complete -c pichamber -n '__fish_seen_subcommand_from tunnel; and __fish_seen_subcommand_from start' -l mode -d 'Tunnel mode'
|
|
822
|
+
complete -c pichamber -n '__fish_seen_subcommand_from tunnel; and __fish_seen_subcommand_from start' -l profile -d 'Profile name'
|
|
823
|
+
complete -c pichamber -n '__fish_seen_subcommand_from tunnel; and __fish_seen_subcommand_from start' -l config -d 'Config path'
|
|
824
|
+
complete -c pichamber -n '__fish_seen_subcommand_from tunnel; and __fish_seen_subcommand_from start' -l token -d 'Token'
|
|
825
|
+
complete -c pichamber -n '__fish_seen_subcommand_from tunnel; and __fish_seen_subcommand_from start' -l token-file -d 'Token file path'
|
|
826
|
+
complete -c pichamber -n '__fish_seen_subcommand_from tunnel; and __fish_seen_subcommand_from start' -l token-stdin -d 'Read token from stdin'
|
|
827
|
+
complete -c pichamber -n '__fish_seen_subcommand_from tunnel; and __fish_seen_subcommand_from start' -l hostname -d 'Hostname'
|
|
828
|
+
complete -c pichamber -n '__fish_seen_subcommand_from tunnel; and __fish_seen_subcommand_from start' -l dry-run -d 'Validate without applying'
|
|
829
|
+
complete -c pichamber -n '__fish_seen_subcommand_from tunnel; and __fish_seen_subcommand_from start' -l qr -d 'Show QR code'
|
|
830
|
+
`;
|
|
831
|
+
}
|
|
832
|
+
|
|
833
|
+
return null;
|
|
834
|
+
}
|
|
835
|
+
|
|
836
|
+
|
|
837
|
+
export {
|
|
838
|
+
DEFAULT_PORT,
|
|
839
|
+
parseArgs,
|
|
840
|
+
showHelp,
|
|
841
|
+
showStartupHelp,
|
|
842
|
+
showConnectUrlHelp,
|
|
843
|
+
showTunnelHelp,
|
|
844
|
+
generateCompletionScript,
|
|
845
|
+
findClosestMatch,
|
|
846
|
+
};
|