@hienlh/ppm 0.23.1 → 0.23.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +10 -0
- package/CLAUDE.md +1 -0
- package/assets/skills/ppm/SKILL.md +1 -1
- package/assets/skills/ppm/references/cli-reference.md +4 -4
- package/assets/skills/ppm/references/http-api.md +1 -1
- package/dist/web/assets/abap-DWbETETF.js.br +0 -0
- package/dist/web/assets/abap-DWbETETF.js.gz +0 -0
- package/dist/web/assets/accounts-settings-section-Cs7BC5O1.js +1 -0
- package/dist/web/assets/accounts-settings-section-Cs7BC5O1.js.br +0 -0
- package/dist/web/assets/accounts-settings-section-Cs7BC5O1.js.gz +0 -0
- package/dist/web/assets/actionscript-3-C278tgAF.js.br +0 -0
- package/dist/web/assets/actionscript-3-C278tgAF.js.gz +0 -0
- package/dist/web/assets/ada-C_5J29IC.js.br +0 -0
- package/dist/web/assets/ada-C_5J29IC.js.gz +0 -0
- package/dist/web/assets/{ai-resource-editor-BFVg2d2a.js → ai-resource-editor-TCREp5Ml.js} +1 -1
- package/dist/web/assets/ai-resource-editor-TCREp5Ml.js.br +0 -0
- package/dist/web/assets/ai-resource-editor-TCREp5Ml.js.gz +0 -0
- package/dist/web/assets/{ai-settings-section-BJw7E_lM.js → ai-settings-section-B7Un4KiW.js} +1 -1
- package/dist/web/assets/ai-settings-section-B7Un4KiW.js.br +0 -0
- package/dist/web/assets/ai-settings-section-B7Un4KiW.js.gz +0 -0
- package/dist/web/assets/{ai-settings-section-CO-i3ghA.js → ai-settings-section-BlKlcihJ.js} +1 -1
- package/dist/web/assets/andromeeda-Ct0fb9Zo.js.br +0 -0
- package/dist/web/assets/andromeeda-Ct0fb9Zo.js.gz +0 -0
- package/dist/web/assets/angular-html-D-rbk4zq.js.br +0 -0
- package/dist/web/assets/angular-html-D-rbk4zq.js.gz +0 -0
- package/dist/web/assets/angular-ts-B_ldKah2.js.br +0 -0
- package/dist/web/assets/angular-ts-B_ldKah2.js.gz +0 -0
- package/dist/web/assets/apache-oMwCqc2o.js.br +0 -0
- package/dist/web/assets/apache-oMwCqc2o.js.gz +0 -0
- package/dist/web/assets/apex-n6XQQudq.js.br +0 -0
- package/dist/web/assets/apex-n6XQQudq.js.gz +0 -0
- package/dist/web/assets/api-client-c8YOpTlT.js.br +0 -0
- package/dist/web/assets/api-client-c8YOpTlT.js.gz +0 -0
- package/dist/web/assets/api-settings-0s1Rfgcu.js.br +1 -0
- package/dist/web/assets/api-settings-0s1Rfgcu.js.gz +0 -0
- package/dist/web/assets/apl-19Dr02g6.js.br +0 -0
- package/dist/web/assets/apl-19Dr02g6.js.gz +0 -0
- package/dist/web/assets/{appearance-settings-section-Ck_FPs9g.js → appearance-settings-section-DACtiDor.js} +1 -1
- package/dist/web/assets/appearance-settings-section-DACtiDor.js.br +0 -0
- package/dist/web/assets/appearance-settings-section-DACtiDor.js.gz +0 -0
- package/dist/web/assets/applescript-QDMA6blY.js.br +0 -0
- package/dist/web/assets/applescript-QDMA6blY.js.gz +0 -0
- package/dist/web/assets/ara-D6rg_rTp.js.br +0 -0
- package/dist/web/assets/ara-D6rg_rTp.js.gz +0 -0
- package/dist/web/assets/asciidoc-DVeBWv0S.js.br +0 -0
- package/dist/web/assets/asciidoc-DVeBWv0S.js.gz +0 -0
- package/dist/web/assets/asm-DzHQzzqu.js.br +0 -0
- package/dist/web/assets/asm-DzHQzzqu.js.gz +0 -0
- package/dist/web/assets/astro-1q5o0N64.js.br +0 -0
- package/dist/web/assets/astro-1q5o0N64.js.gz +0 -0
- package/dist/web/assets/audio-preview-DXtE1Lpz.js.br +0 -0
- package/dist/web/assets/audio-preview-DXtE1Lpz.js.gz +0 -0
- package/dist/web/assets/aurora-x-pJESoXa6.js.br +0 -0
- package/dist/web/assets/aurora-x-pJESoXa6.js.gz +0 -0
- package/dist/web/assets/awk-BwfK4mzn.js.br +0 -0
- package/dist/web/assets/awk-BwfK4mzn.js.gz +0 -0
- package/dist/web/assets/ayu-dark-CG-9c7ej.js.br +0 -0
- package/dist/web/assets/ayu-dark-CG-9c7ej.js.gz +0 -0
- package/dist/web/assets/ayu-light-BGUfMG6m.js.br +0 -0
- package/dist/web/assets/ayu-light-BGUfMG6m.js.gz +0 -0
- package/dist/web/assets/ayu-mirage-CMD89qy6.js.br +0 -0
- package/dist/web/assets/ayu-mirage-CMD89qy6.js.gz +0 -0
- package/dist/web/assets/ballerina-CP5gYaiB.js.br +0 -0
- package/dist/web/assets/ballerina-CP5gYaiB.js.gz +0 -0
- package/dist/web/assets/bat-DCRdiK45.js.br +0 -0
- package/dist/web/assets/bat-DCRdiK45.js.gz +0 -0
- package/dist/web/assets/beancount-DHkDiOKO.js.br +0 -0
- package/dist/web/assets/beancount-DHkDiOKO.js.gz +0 -0
- package/dist/web/assets/berry-B6TPldKS.js.br +0 -0
- package/dist/web/assets/berry-B6TPldKS.js.gz +0 -0
- package/dist/web/assets/bibtex-DIor8yh9.js.br +0 -0
- package/dist/web/assets/bibtex-DIor8yh9.js.gz +0 -0
- package/dist/web/assets/bicep-BbIdLZZ_.js.br +0 -0
- package/dist/web/assets/bicep-BbIdLZZ_.js.gz +0 -0
- package/dist/web/assets/bird2-C76TmOG1.js.br +0 -0
- package/dist/web/assets/bird2-C76TmOG1.js.gz +0 -0
- package/dist/web/assets/blade-BNgXZCCk.js.br +0 -0
- package/dist/web/assets/blade-BNgXZCCk.js.gz +0 -0
- package/dist/web/assets/{branch-review-tab-CNVxMRuo.js → branch-review-tab-vHJuFXtB.js} +1 -1
- package/dist/web/assets/branch-review-tab-vHJuFXtB.js.br +0 -0
- package/dist/web/assets/branch-review-tab-vHJuFXtB.js.gz +0 -0
- package/dist/web/assets/bsl-C5u8-gEq.js.br +0 -0
- package/dist/web/assets/bsl-C5u8-gEq.js.gz +0 -0
- package/dist/web/assets/button-CBehaXpV.js.br +0 -0
- package/dist/web/assets/button-CBehaXpV.js.gz +0 -0
- package/dist/web/assets/c-Dko4ZphN.js.br +0 -0
- package/dist/web/assets/c-Dko4ZphN.js.gz +0 -0
- package/dist/web/assets/c3-CqZ77xXr.js.br +0 -0
- package/dist/web/assets/c3-CqZ77xXr.js.gz +0 -0
- package/dist/web/assets/cadence-BlaAb6F6.js.br +0 -0
- package/dist/web/assets/cadence-BlaAb6F6.js.gz +0 -0
- package/dist/web/assets/cairo-CrhmfCJH.js.br +0 -0
- package/dist/web/assets/cairo-CrhmfCJH.js.gz +0 -0
- package/dist/web/assets/can-open-in-ppm-D8T6Xca-.js.br +0 -0
- package/dist/web/assets/can-open-in-ppm-D8T6Xca-.js.gz +0 -0
- package/dist/web/assets/catppuccin-frappe-BuV7Zg67.js.br +0 -0
- package/dist/web/assets/catppuccin-frappe-BuV7Zg67.js.gz +0 -0
- package/dist/web/assets/catppuccin-latte-B7HXEZf7.js.br +0 -0
- package/dist/web/assets/catppuccin-latte-B7HXEZf7.js.gz +0 -0
- package/dist/web/assets/catppuccin-macchiato-B0KctcoC.js.br +0 -0
- package/dist/web/assets/catppuccin-macchiato-B0KctcoC.js.gz +0 -0
- package/dist/web/assets/catppuccin-mocha-Bofr5rzo.js.br +0 -0
- package/dist/web/assets/catppuccin-mocha-Bofr5rzo.js.gz +0 -0
- package/dist/web/assets/{chat-tab-DqLqcBci.js → chat-tab-Ba3NvUgt.js} +1 -1
- package/dist/web/assets/chat-tab-Ba3NvUgt.js.br +0 -0
- package/dist/web/assets/chat-tab-Ba3NvUgt.js.gz +0 -0
- package/dist/web/assets/chat-tab-DeISufm0.js +15 -0
- package/dist/web/assets/chat-tab-DeISufm0.js.br +0 -0
- package/dist/web/assets/chat-tab-DeISufm0.js.gz +0 -0
- package/dist/web/assets/clarity-CerfZ3dW.js.br +0 -0
- package/dist/web/assets/clarity-CerfZ3dW.js.gz +0 -0
- package/dist/web/assets/clojure-BCEG1uj6.js.br +0 -0
- package/dist/web/assets/clojure-BCEG1uj6.js.gz +0 -0
- package/dist/web/assets/cmake-CRxSSKSr.js.br +0 -0
- package/dist/web/assets/cmake-CRxSSKSr.js.gz +0 -0
- package/dist/web/assets/cobol-BgRxrYyZ.js.br +0 -0
- package/dist/web/assets/cobol-BgRxrYyZ.js.gz +0 -0
- package/dist/web/assets/{code-editor-wEeCvvMR.js → code-editor-BCwiLVyc.js} +3 -3
- package/dist/web/assets/code-editor-BCwiLVyc.js.br +0 -0
- package/dist/web/assets/code-editor-BCwiLVyc.js.gz +0 -0
- package/dist/web/assets/codeql-DlnOpgWF.js.br +0 -0
- package/dist/web/assets/codeql-DlnOpgWF.js.gz +0 -0
- package/dist/web/assets/codex-sign-in-again-dialog-DcIOYhAe.js +1 -0
- package/dist/web/assets/codex-sign-in-again-dialog-DcIOYhAe.js.br +0 -0
- package/dist/web/assets/codex-sign-in-again-dialog-DcIOYhAe.js.gz +0 -0
- package/dist/web/assets/coffee-9hmEOIYs.js.br +0 -0
- package/dist/web/assets/coffee-9hmEOIYs.js.gz +0 -0
- package/dist/web/assets/common-lisp-DgIX9jkq.js.br +0 -0
- package/dist/web/assets/common-lisp-DgIX9jkq.js.gz +0 -0
- package/dist/web/assets/{conflict-editor-Cu-z_LdX.js → conflict-editor-0YEDQ--c.js} +1 -1
- package/dist/web/assets/conflict-editor-0YEDQ--c.js.br +0 -0
- package/dist/web/assets/conflict-editor-0YEDQ--c.js.gz +0 -0
- package/dist/web/assets/context-menu-CjYTq8DI.js.br +0 -0
- package/dist/web/assets/context-menu-CjYTq8DI.js.gz +0 -0
- package/dist/web/assets/coq-CFeLOER-.js.br +0 -0
- package/dist/web/assets/coq-CFeLOER-.js.gz +0 -0
- package/dist/web/assets/cpp-BntsLe3X.js.br +0 -0
- package/dist/web/assets/cpp-BntsLe3X.js.gz +0 -0
- package/dist/web/assets/createLucideIcon-DBXq3G0e.js.br +0 -0
- package/dist/web/assets/createLucideIcon-DBXq3G0e.js.gz +0 -0
- package/dist/web/assets/crystal-CoXN2Gj8.js.br +0 -0
- package/dist/web/assets/crystal-CoXN2Gj8.js.gz +0 -0
- package/dist/web/assets/csharp-BGFGcV8G.js.br +0 -0
- package/dist/web/assets/csharp-BGFGcV8G.js.gz +0 -0
- package/dist/web/assets/css-DKuKlxIj.js.br +0 -0
- package/dist/web/assets/css-DKuKlxIj.js.gz +0 -0
- package/dist/web/assets/csv-Cx126-fo.js.br +0 -0
- package/dist/web/assets/csv-Cx126-fo.js.gz +0 -0
- package/dist/web/assets/csv-parser-BXeH-yzY.js.br +0 -0
- package/dist/web/assets/csv-parser-BXeH-yzY.js.gz +0 -0
- package/dist/web/assets/{csv-preview-DHbBIqUu.js → csv-preview-CYxznB1I.js} +1 -1
- package/dist/web/assets/csv-preview-CYxznB1I.js.br +0 -0
- package/dist/web/assets/csv-preview-CYxznB1I.js.gz +0 -0
- package/dist/web/assets/cue-Cd0PEGFL.js.br +0 -0
- package/dist/web/assets/cue-Cd0PEGFL.js.gz +0 -0
- package/dist/web/assets/cypher-QS9S-1Nu.js.br +0 -0
- package/dist/web/assets/cypher-QS9S-1Nu.js.gz +0 -0
- package/dist/web/assets/d-Bx6zK6J7.js.br +0 -0
- package/dist/web/assets/d-Bx6zK6J7.js.gz +0 -0
- package/dist/web/assets/dark-plus-DLqXEd2I.js.br +0 -0
- package/dist/web/assets/dark-plus-DLqXEd2I.js.gz +0 -0
- package/dist/web/assets/dart-BL2C2Z6E.js.br +0 -0
- package/dist/web/assets/dart-BL2C2Z6E.js.gz +0 -0
- package/dist/web/assets/data-grid-overlay-editor-2ERlh7_N.js.br +0 -0
- package/dist/web/assets/data-grid-overlay-editor-2ERlh7_N.js.gz +0 -0
- package/dist/web/assets/data-grid-types-DatI2Wee.js.br +0 -0
- package/dist/web/assets/data-grid-types-DatI2Wee.js.gz +0 -0
- package/dist/web/assets/{database-viewer-_McYjRzc.js → database-viewer-eP3gCxGb.js} +1 -1
- package/dist/web/assets/database-viewer-eP3gCxGb.js.br +0 -0
- package/dist/web/assets/database-viewer-eP3gCxGb.js.gz +0 -0
- package/dist/web/assets/dax-ClxUDxvY.js.br +0 -0
- package/dist/web/assets/dax-ClxUDxvY.js.gz +0 -0
- package/dist/web/assets/design-export-client-SWCbGwwU.js.br +0 -0
- package/dist/web/assets/design-export-client-SWCbGwwU.js.gz +0 -0
- package/dist/web/assets/design-responsive-dialog-CcJETHO2.js.br +0 -0
- package/dist/web/assets/design-responsive-dialog-CcJETHO2.js.gz +0 -0
- package/dist/web/assets/{design-tab-C0TUD5g-.js → design-tab-B7aVMMfj.js} +1 -1
- package/dist/web/assets/design-tab-B7aVMMfj.js.br +0 -0
- package/dist/web/assets/design-tab-B7aVMMfj.js.gz +0 -0
- package/dist/web/assets/{designs-sidebar-panel-XCAwSNtg.js → designs-sidebar-panel-8KI79o1u.js} +1 -1
- package/dist/web/assets/designs-sidebar-panel-8KI79o1u.js.br +0 -0
- package/dist/web/assets/designs-sidebar-panel-8KI79o1u.js.gz +0 -0
- package/dist/web/assets/desktop-DLEkw1UR.js.br +0 -0
- package/dist/web/assets/desktop-DLEkw1UR.js.gz +0 -0
- package/dist/web/assets/dialog-tzBRkGeW.js.br +0 -0
- package/dist/web/assets/dialog-tzBRkGeW.js.gz +0 -0
- package/dist/web/assets/diff-Dlp9KQSL.js.br +0 -0
- package/dist/web/assets/diff-Dlp9KQSL.js.gz +0 -0
- package/dist/web/assets/{diff-viewer-C4z-_68x.js → diff-viewer-B_K7VQup.js} +1 -1
- package/dist/web/assets/diff-viewer-B_K7VQup.js.br +0 -0
- package/dist/web/assets/diff-viewer-B_K7VQup.js.gz +0 -0
- package/dist/web/assets/dist-CDpxSUMU.js.br +0 -0
- package/dist/web/assets/dist-CDpxSUMU.js.gz +0 -0
- package/dist/web/assets/dist-CgtN5c7X.js.br +0 -0
- package/dist/web/assets/dist-CgtN5c7X.js.gz +0 -0
- package/dist/web/assets/dist-wmDsBD_Z.js.br +0 -0
- package/dist/web/assets/dist-wmDsBD_Z.js.gz +0 -0
- package/dist/web/assets/docker-DVBsQYb-.js.br +0 -0
- package/dist/web/assets/docker-DVBsQYb-.js.gz +0 -0
- package/dist/web/assets/docx-preview-C-UKGMXR.js.br +0 -0
- package/dist/web/assets/docx-preview-C-UKGMXR.js.gz +0 -0
- package/dist/web/assets/dotenv-DjBB7S8B.js.br +0 -0
- package/dist/web/assets/dotenv-DjBB7S8B.js.gz +0 -0
- package/dist/web/assets/dracula-Cu055q9D.js.br +0 -0
- package/dist/web/assets/dracula-Cu055q9D.js.gz +0 -0
- package/dist/web/assets/dracula-soft-BiX_luwV.js.br +0 -0
- package/dist/web/assets/dracula-soft-BiX_luwV.js.gz +0 -0
- package/dist/web/assets/dream-maker-S6ie6kFg.js.br +0 -0
- package/dist/web/assets/dream-maker-S6ie6kFg.js.gz +0 -0
- package/dist/web/assets/edge-gf7weBFr.js.br +0 -0
- package/dist/web/assets/edge-gf7weBFr.js.gz +0 -0
- package/dist/web/assets/edit-diff-preview-8nIct7kS.js.br +0 -0
- package/dist/web/assets/edit-diff-preview-8nIct7kS.js.gz +0 -0
- package/dist/web/assets/{editor-language-service-D8hW_eew.js → editor-language-service-DYBxZX66.js} +1 -1
- package/dist/web/assets/editor-language-service-DYBxZX66.js.br +0 -0
- package/dist/web/assets/editor-language-service-DYBxZX66.js.gz +0 -0
- package/dist/web/assets/elixir-DOEwBYus.js.br +0 -0
- package/dist/web/assets/elixir-DOEwBYus.js.gz +0 -0
- package/dist/web/assets/elm-7yx1A5qt.js.br +0 -0
- package/dist/web/assets/elm-7yx1A5qt.js.gz +0 -0
- package/dist/web/assets/emacs-lisp-DpOda430.js.br +0 -0
- package/dist/web/assets/emacs-lisp-DpOda430.js.gz +0 -0
- package/dist/web/assets/erb-Bm_J_rBw.js.br +0 -0
- package/dist/web/assets/erb-Bm_J_rBw.js.gz +0 -0
- package/dist/web/assets/erlang-DgkAVj5y.js.br +0 -0
- package/dist/web/assets/erlang-DgkAVj5y.js.gz +0 -0
- package/dist/web/assets/esm-wquH4IhX.js.br +0 -0
- package/dist/web/assets/esm-wquH4IhX.js.gz +0 -0
- package/dist/web/assets/everforest-dark-BAfSXdLG.js.br +0 -0
- package/dist/web/assets/everforest-dark-BAfSXdLG.js.gz +0 -0
- package/dist/web/assets/everforest-light-Dp59kp4R.js.br +0 -0
- package/dist/web/assets/everforest-light-Dp59kp4R.js.gz +0 -0
- package/dist/web/assets/{explorer-body-CdxolRQG.js → explorer-body-C0syNltJ.js} +1 -1
- package/dist/web/assets/explorer-body-C0syNltJ.js.br +0 -0
- package/dist/web/assets/explorer-body-C0syNltJ.js.gz +0 -0
- package/dist/web/assets/{explorer-window-content-D1fkI_cL.js → explorer-window-content-CfIomwTq.js} +1 -1
- package/dist/web/assets/explorer-window-content-CfIomwTq.js.br +0 -0
- package/dist/web/assets/explorer-window-content-CfIomwTq.js.gz +0 -0
- package/dist/web/assets/{extension-manager-section-CAaSoAuG.js → extension-manager-section-CL7pl3re.js} +1 -1
- package/dist/web/assets/extension-manager-section-CL7pl3re.js.br +0 -0
- package/dist/web/assets/extension-manager-section-CL7pl3re.js.gz +0 -0
- package/dist/web/assets/{extension-webview-DmBZun_i.js → extension-webview-FHTB0jh1.js} +1 -1
- package/dist/web/assets/extension-webview-FHTB0jh1.js.br +0 -0
- package/dist/web/assets/extension-webview-FHTB0jh1.js.gz +0 -0
- package/dist/web/assets/fennel-CNaNUmMo.js.br +0 -0
- package/dist/web/assets/fennel-CNaNUmMo.js.gz +0 -0
- package/dist/web/assets/file-icons-BlOxPo3P.js.br +0 -0
- package/dist/web/assets/file-icons-BlOxPo3P.js.gz +0 -0
- package/dist/web/assets/file-icons.generated-BtBErEwb.css.br +0 -0
- package/dist/web/assets/file-icons.generated-BtBErEwb.css.gz +0 -0
- package/dist/web/assets/file-store-CTlJqj2m.js.br +0 -0
- package/dist/web/assets/file-store-CTlJqj2m.js.gz +0 -0
- package/dist/web/assets/{files-settings-section-BFIzSuBh.js → files-settings-section-C574RfCl.js} +1 -1
- package/dist/web/assets/files-settings-section-C574RfCl.js.br +0 -0
- package/dist/web/assets/files-settings-section-C574RfCl.js.gz +0 -0
- package/dist/web/assets/fish-C8Z04ic7.js.br +0 -0
- package/dist/web/assets/fish-C8Z04ic7.js.gz +0 -0
- package/dist/web/assets/fluent-Bugk01mf.js.br +0 -0
- package/dist/web/assets/fluent-Bugk01mf.js.gz +0 -0
- package/dist/web/assets/format-file-meta-DLaHgkdx.js.br +0 -0
- package/dist/web/assets/format-file-meta-DLaHgkdx.js.gz +0 -0
- package/dist/web/assets/fortran-fixed-form-s8lQifxM.js.br +0 -0
- package/dist/web/assets/fortran-fixed-form-s8lQifxM.js.gz +0 -0
- package/dist/web/assets/fortran-free-form-csIz6MQj.js.br +0 -0
- package/dist/web/assets/fortran-free-form-csIz6MQj.js.gz +0 -0
- package/dist/web/assets/fs-api-RVc5RtTA.js.br +0 -0
- package/dist/web/assets/fs-api-RVc5RtTA.js.gz +0 -0
- package/dist/web/assets/fsharp-D6bmDjka.js.br +0 -0
- package/dist/web/assets/fsharp-D6bmDjka.js.gz +0 -0
- package/dist/web/assets/gdresource-wPII3GWW.js.br +0 -0
- package/dist/web/assets/gdresource-wPII3GWW.js.gz +0 -0
- package/dist/web/assets/gdscript-fdzYQLfk.js.br +0 -0
- package/dist/web/assets/gdscript-fdzYQLfk.js.gz +0 -0
- package/dist/web/assets/gdshader-CfsEtDeZ.js.br +0 -0
- package/dist/web/assets/gdshader-CfsEtDeZ.js.gz +0 -0
- package/dist/web/assets/{general-settings-section-BLLUvdhX.js → general-settings-section--DSUTrEP.js} +1 -1
- package/dist/web/assets/general-settings-section--DSUTrEP.js.br +0 -0
- package/dist/web/assets/general-settings-section--DSUTrEP.js.gz +0 -0
- package/dist/web/assets/genie-CtHN5N2Q.js.br +0 -0
- package/dist/web/assets/genie-CtHN5N2Q.js.gz +0 -0
- package/dist/web/assets/gherkin-gSp2ZJTf.js.br +0 -0
- package/dist/web/assets/gherkin-gSp2ZJTf.js.gz +0 -0
- package/dist/web/assets/git-commit-DqLhxK6K.js.br +0 -0
- package/dist/web/assets/git-commit-DqLhxK6K.js.gz +0 -0
- package/dist/web/assets/{git-log-panel-Lq2Vkm8w.js → git-log-panel-BzwEbRwN.js} +1 -1
- package/dist/web/assets/git-log-panel-BzwEbRwN.js.br +0 -0
- package/dist/web/assets/git-log-panel-BzwEbRwN.js.gz +0 -0
- package/dist/web/assets/git-repo-store-DFTJ5ngK.js.br +0 -0
- package/dist/web/assets/git-repo-store-DFTJ5ngK.js.gz +0 -0
- package/dist/web/assets/github-dark-D7O9efii.js.br +0 -0
- package/dist/web/assets/github-dark-D7O9efii.js.gz +0 -0
- package/dist/web/assets/github-dark-default-Bv2wIhqD.js.br +0 -0
- package/dist/web/assets/github-dark-default-Bv2wIhqD.js.gz +0 -0
- package/dist/web/assets/github-dark-dimmed-BuY_SpCX.js.br +0 -0
- package/dist/web/assets/github-dark-dimmed-BuY_SpCX.js.gz +0 -0
- package/dist/web/assets/github-dark-high-contrast-Chv0f5Wu.js.br +0 -0
- package/dist/web/assets/github-dark-high-contrast-Chv0f5Wu.js.gz +0 -0
- package/dist/web/assets/github-light-DV8f-W2f.js.br +0 -0
- package/dist/web/assets/github-light-DV8f-W2f.js.gz +0 -0
- package/dist/web/assets/github-light-default-CNBSU3dB.js.br +0 -0
- package/dist/web/assets/github-light-default-CNBSU3dB.js.gz +0 -0
- package/dist/web/assets/github-light-high-contrast-sg94tHwU.js.br +0 -0
- package/dist/web/assets/github-light-high-contrast-sg94tHwU.js.gz +0 -0
- package/dist/web/assets/gleam-w7270-PJ.js.br +0 -0
- package/dist/web/assets/gleam-w7270-PJ.js.gz +0 -0
- package/dist/web/assets/{glide-data-grid-CHdKFqis.js → glide-data-grid-CUNWBFfN.js} +1 -1
- package/dist/web/assets/glide-data-grid-CUNWBFfN.js.br +0 -0
- package/dist/web/assets/glide-data-grid-CUNWBFfN.js.gz +0 -0
- package/dist/web/assets/glide-data-grid-nthEL3fk.css.br +0 -0
- package/dist/web/assets/glide-data-grid-nthEL3fk.css.gz +0 -0
- package/dist/web/assets/glimmer-js-CmHFqq4N.js.br +0 -0
- package/dist/web/assets/glimmer-js-CmHFqq4N.js.gz +0 -0
- package/dist/web/assets/glimmer-ts-vLmZC1JJ.js.br +0 -0
- package/dist/web/assets/glimmer-ts-vLmZC1JJ.js.gz +0 -0
- package/dist/web/assets/glsl-DArPh0ws.js.br +0 -0
- package/dist/web/assets/glsl-DArPh0ws.js.gz +0 -0
- package/dist/web/assets/gn-yo_iE_A_.js.br +0 -0
- package/dist/web/assets/gn-yo_iE_A_.js.gz +0 -0
- package/dist/web/assets/gnuplot-DSBPrzl4.js.br +0 -0
- package/dist/web/assets/gnuplot-DSBPrzl4.js.gz +0 -0
- package/dist/web/assets/go-D1S7g97D.js.br +0 -0
- package/dist/web/assets/go-D1S7g97D.js.gz +0 -0
- package/dist/web/assets/graphql-B-_Ilekp.js.br +0 -0
- package/dist/web/assets/graphql-B-_Ilekp.js.gz +0 -0
- package/dist/web/assets/groovy-C7xW-5IV.js.br +0 -0
- package/dist/web/assets/groovy-C7xW-5IV.js.gz +0 -0
- package/dist/web/assets/{group-chat-tab-D2bluLme.js → group-chat-tab-Dp1p4Jdu.js} +1 -1
- package/dist/web/assets/group-chat-tab-Dp1p4Jdu.js.br +0 -0
- package/dist/web/assets/group-chat-tab-Dp1p4Jdu.js.gz +0 -0
- package/dist/web/assets/gruvbox-dark-hard-BZald7Z_.js.br +0 -0
- package/dist/web/assets/gruvbox-dark-hard-BZald7Z_.js.gz +0 -0
- package/dist/web/assets/gruvbox-dark-medium-v6W4PZne.js.br +0 -0
- package/dist/web/assets/gruvbox-dark-medium-v6W4PZne.js.gz +0 -0
- package/dist/web/assets/gruvbox-dark-soft-CN5mIGkw.js.br +0 -0
- package/dist/web/assets/gruvbox-dark-soft-CN5mIGkw.js.gz +0 -0
- package/dist/web/assets/gruvbox-light-hard-D3NIGRxd.js.br +0 -0
- package/dist/web/assets/gruvbox-light-hard-D3NIGRxd.js.gz +0 -0
- package/dist/web/assets/gruvbox-light-medium-m4ShuCnD.js.br +0 -0
- package/dist/web/assets/gruvbox-light-medium-m4ShuCnD.js.gz +0 -0
- package/dist/web/assets/gruvbox-light-soft-BEEYNyk-.js.br +0 -0
- package/dist/web/assets/gruvbox-light-soft-BEEYNyk-.js.gz +0 -0
- package/dist/web/assets/hack-4KVRpwwM.js.br +0 -0
- package/dist/web/assets/hack-4KVRpwwM.js.gz +0 -0
- package/dist/web/assets/haml-DoK94C5G.js.br +0 -0
- package/dist/web/assets/haml-DoK94C5G.js.gz +0 -0
- package/dist/web/assets/handlebars-D0_6yNlK.js.br +0 -0
- package/dist/web/assets/handlebars-D0_6yNlK.js.gz +0 -0
- package/dist/web/assets/haskell-CgtdXIH3.js.br +0 -0
- package/dist/web/assets/haskell-CgtdXIH3.js.gz +0 -0
- package/dist/web/assets/haxe-D7HQqtIx.js.br +0 -0
- package/dist/web/assets/haxe-D7HQqtIx.js.gz +0 -0
- package/dist/web/assets/hcl-C-YHDaXH.js.br +0 -0
- package/dist/web/assets/hcl-C-YHDaXH.js.gz +0 -0
- package/dist/web/assets/hjson-BrgEMvJK.js.br +0 -0
- package/dist/web/assets/hjson-BrgEMvJK.js.gz +0 -0
- package/dist/web/assets/hlsl-BsDumu1j.js.br +0 -0
- package/dist/web/assets/hlsl-BsDumu1j.js.gz +0 -0
- package/dist/web/assets/horizon-D9Kre3KQ.js.br +0 -0
- package/dist/web/assets/horizon-D9Kre3KQ.js.gz +0 -0
- package/dist/web/assets/horizon-bright-DJq8c_Yq.js.br +0 -0
- package/dist/web/assets/horizon-bright-DJq8c_Yq.js.gz +0 -0
- package/dist/web/assets/houston-B9tnxzX8.js.br +0 -0
- package/dist/web/assets/houston-B9tnxzX8.js.gz +0 -0
- package/dist/web/assets/html-BOqZwhzR.js.br +0 -0
- package/dist/web/assets/html-BOqZwhzR.js.gz +0 -0
- package/dist/web/assets/http-B6pQhqN4.js.br +0 -0
- package/dist/web/assets/http-B6pQhqN4.js.gz +0 -0
- package/dist/web/assets/hurl-BjW79rql.js.br +0 -0
- package/dist/web/assets/hurl-BjW79rql.js.gz +0 -0
- package/dist/web/assets/hxml-B1Yl76u6.js.br +0 -0
- package/dist/web/assets/hxml-B1Yl76u6.js.gz +0 -0
- package/dist/web/assets/hy-DUYVvXOj.js.br +0 -0
- package/dist/web/assets/hy-DUYVvXOj.js.gz +0 -0
- package/dist/web/assets/icons-CO_II6D-.js.br +0 -0
- package/dist/web/assets/icons-CO_II6D-.js.gz +0 -0
- package/dist/web/assets/imba-CGW-TsRm.js.br +0 -0
- package/dist/web/assets/imba-CGW-TsRm.js.gz +0 -0
- package/dist/web/assets/{index-DSbUqWiH.js → index-CvUGUp7d.js} +5 -5
- package/dist/web/assets/index-CvUGUp7d.js.br +0 -0
- package/dist/web/assets/index-CvUGUp7d.js.gz +0 -0
- package/dist/web/assets/index-DMA-So69.css +1 -0
- package/dist/web/assets/index-DMA-So69.css.br +0 -0
- package/dist/web/assets/index-DMA-So69.css.gz +0 -0
- package/dist/web/assets/ini-PqgYiEAV.js.br +5 -0
- package/dist/web/assets/ini-PqgYiEAV.js.gz +0 -0
- package/dist/web/assets/java-DPqGHyuh.js.br +0 -0
- package/dist/web/assets/java-DPqGHyuh.js.gz +0 -0
- package/dist/web/assets/javascript-D8x_R8ev.js.br +0 -0
- package/dist/web/assets/javascript-D8x_R8ev.js.gz +0 -0
- package/dist/web/assets/jinja-DOkXV84k.js.br +0 -0
- package/dist/web/assets/jinja-DOkXV84k.js.gz +0 -0
- package/dist/web/assets/{jira-watcher-section-BOe_ztas.js → jira-watcher-section-DoXl0GAq.js} +1 -1
- package/dist/web/assets/jira-watcher-section-DoXl0GAq.js.br +0 -0
- package/dist/web/assets/jira-watcher-section-DoXl0GAq.js.gz +0 -0
- package/dist/web/assets/jison-CGzlyBWT.js.br +0 -0
- package/dist/web/assets/jison-CGzlyBWT.js.gz +0 -0
- package/dist/web/assets/json-kcFjaEWA.js.br +0 -0
- package/dist/web/assets/json-kcFjaEWA.js.gz +0 -0
- package/dist/web/assets/json5-sbkvqHou.js.br +0 -0
- package/dist/web/assets/json5-sbkvqHou.js.gz +0 -0
- package/dist/web/assets/jsonc-pnywfpws.js.br +0 -0
- package/dist/web/assets/jsonc-pnywfpws.js.gz +0 -0
- package/dist/web/assets/jsonl-ZPOQ0pRn.js.br +0 -0
- package/dist/web/assets/jsonl-ZPOQ0pRn.js.gz +0 -0
- package/dist/web/assets/jsonnet-B_Q7j1YF.js.br +0 -0
- package/dist/web/assets/jsonnet-B_Q7j1YF.js.gz +0 -0
- package/dist/web/assets/jssm-K-xYeQyp.js.br +0 -0
- package/dist/web/assets/jssm-K-xYeQyp.js.gz +0 -0
- package/dist/web/assets/jsx-BzlJCumN.js.br +0 -0
- package/dist/web/assets/jsx-BzlJCumN.js.gz +0 -0
- package/dist/web/assets/julia-CZrbm1Fa.js.br +0 -0
- package/dist/web/assets/julia-CZrbm1Fa.js.gz +0 -0
- package/dist/web/assets/just-bRG6zWI_.js.br +0 -0
- package/dist/web/assets/just-bRG6zWI_.js.gz +0 -0
- package/dist/web/assets/kanagawa-dragon-DAdLBtU8.js.br +0 -0
- package/dist/web/assets/kanagawa-dragon-DAdLBtU8.js.gz +0 -0
- package/dist/web/assets/kanagawa-lotus-5BwvVGu8.js.br +0 -0
- package/dist/web/assets/kanagawa-lotus-5BwvVGu8.js.gz +0 -0
- package/dist/web/assets/kanagawa-wave-C0h9fsDT.js.br +0 -0
- package/dist/web/assets/kanagawa-wave-C0h9fsDT.js.gz +0 -0
- package/dist/web/assets/kdl-DXSsFcms.js.br +0 -0
- package/dist/web/assets/kdl-DXSsFcms.js.gz +0 -0
- package/dist/web/assets/{keybindings-store-DFPJBiXT.js → keybindings-store-BqGm9AgI.js} +1 -1
- package/dist/web/assets/{keyboard-shortcuts-section-CJubMhMq.js → keyboard-shortcuts-section-BogwnAdr.js} +1 -1
- package/dist/web/assets/keyboard-shortcuts-section-BogwnAdr.js.br +0 -0
- package/dist/web/assets/keyboard-shortcuts-section-BogwnAdr.js.gz +0 -0
- package/dist/web/assets/kotlin-BXNIvloo.js.br +0 -0
- package/dist/web/assets/kotlin-BXNIvloo.js.gz +0 -0
- package/dist/web/assets/kusto-wM3eio5V.js.br +0 -0
- package/dist/web/assets/kusto-wM3eio5V.js.gz +0 -0
- package/dist/web/assets/laserwave-FcbxdP2A.js.br +0 -0
- package/dist/web/assets/laserwave-FcbxdP2A.js.gz +0 -0
- package/dist/web/assets/latex-CZHLEkde.js.br +0 -0
- package/dist/web/assets/latex-CZHLEkde.js.gz +0 -0
- package/dist/web/assets/lean-RenzGeoM.js.br +0 -0
- package/dist/web/assets/lean-RenzGeoM.js.gz +0 -0
- package/dist/web/assets/less-CcUdtNJi.js.br +0 -0
- package/dist/web/assets/less-CcUdtNJi.js.gz +0 -0
- package/dist/web/assets/lib-KePrAxj7.js.br +0 -0
- package/dist/web/assets/lib-KePrAxj7.js.gz +0 -0
- package/dist/web/assets/libesm-DMnQ3WlF.js.br +0 -0
- package/dist/web/assets/libesm-DMnQ3WlF.js.gz +0 -0
- package/dist/web/assets/light-plus-BsMoOZJR.js.br +0 -0
- package/dist/web/assets/light-plus-BsMoOZJR.js.gz +0 -0
- package/dist/web/assets/liquid-Dcfq3Ccc.js.br +0 -0
- package/dist/web/assets/liquid-Dcfq3Ccc.js.gz +0 -0
- package/dist/web/assets/llvm-CyylMBuq.js.br +0 -0
- package/dist/web/assets/llvm-CyylMBuq.js.gz +0 -0
- package/dist/web/assets/log-BOi0GB58.js.br +0 -0
- package/dist/web/assets/log-BOi0GB58.js.gz +0 -0
- package/dist/web/assets/logo-BQUr3X2Y.js.br +0 -0
- package/dist/web/assets/logo-BQUr3X2Y.js.gz +0 -0
- package/dist/web/assets/lua-Ggfu9EYp.js.br +0 -0
- package/dist/web/assets/lua-Ggfu9EYp.js.gz +0 -0
- package/dist/web/assets/luau-3YZRDIsh.js.br +0 -0
- package/dist/web/assets/luau-3YZRDIsh.js.gz +0 -0
- package/dist/web/assets/make-DEkKRDRU.js.br +0 -0
- package/dist/web/assets/make-DEkKRDRU.js.gz +0 -0
- package/dist/web/assets/markdown-BmFN0-A1.js.br +0 -0
- package/dist/web/assets/markdown-BmFN0-A1.js.gz +0 -0
- package/dist/web/assets/{markdown-renderer-DxSQ4aqW.js → markdown-renderer-C33dsNJ_.js} +1 -1
- package/dist/web/assets/{markdown-renderer-6oU-L6RN.js → markdown-renderer-CZiECUJp.js} +1 -1
- package/dist/web/assets/markdown-renderer-CZiECUJp.js.br +0 -0
- package/dist/web/assets/markdown-renderer-CZiECUJp.js.gz +0 -0
- package/dist/web/assets/marko-BUwN_Iax.js.br +0 -0
- package/dist/web/assets/marko-BUwN_Iax.js.gz +0 -0
- package/dist/web/assets/material-theme-DqLHjEZ8.js.br +0 -0
- package/dist/web/assets/material-theme-DqLHjEZ8.js.gz +0 -0
- package/dist/web/assets/material-theme-darker-DhbvULnI.js.br +0 -0
- package/dist/web/assets/material-theme-darker-DhbvULnI.js.gz +0 -0
- package/dist/web/assets/material-theme-lighter-C_aA4yVe.js.br +0 -0
- package/dist/web/assets/material-theme-lighter-C_aA4yVe.js.gz +0 -0
- package/dist/web/assets/material-theme-ocean-Pk5JltJS.js.br +0 -0
- package/dist/web/assets/material-theme-ocean-Pk5JltJS.js.gz +0 -0
- package/dist/web/assets/material-theme-palenight-DNi3VguV.js.br +0 -0
- package/dist/web/assets/material-theme-palenight-DNi3VguV.js.gz +0 -0
- package/dist/web/assets/matlab-BqUtv2ml.js.br +0 -0
- package/dist/web/assets/matlab-BqUtv2ml.js.gz +0 -0
- package/dist/web/assets/mdc-CIifdeNY.js.br +0 -0
- package/dist/web/assets/mdc-CIifdeNY.js.gz +0 -0
- package/dist/web/assets/mdx-DFMrnHBn.js.br +0 -0
- package/dist/web/assets/mdx-DFMrnHBn.js.gz +0 -0
- package/dist/web/assets/mermaid-BpyuE0L_.js.br +0 -0
- package/dist/web/assets/mermaid-BpyuE0L_.js.gz +0 -0
- package/dist/web/assets/min-dark-DVfCMEPW.js.br +0 -0
- package/dist/web/assets/min-dark-DVfCMEPW.js.gz +0 -0
- package/dist/web/assets/min-light-B96aMADV.js.br +0 -0
- package/dist/web/assets/min-light-B96aMADV.js.gz +0 -0
- package/dist/web/assets/mipsasm-DHhEcvKr.js.br +0 -0
- package/dist/web/assets/mipsasm-DHhEcvKr.js.gz +0 -0
- package/dist/web/assets/mobile-bottom-sheet-Cf4kV1hS.js.br +0 -0
- package/dist/web/assets/mobile-bottom-sheet-Cf4kV1hS.js.gz +0 -0
- package/dist/web/assets/{mobile-explorer-sheet-D0968cuP.js → mobile-explorer-sheet-BOgo9tbK.js} +1 -1
- package/dist/web/assets/mobile-explorer-sheet-BOgo9tbK.js.br +0 -0
- package/dist/web/assets/mobile-explorer-sheet-BOgo9tbK.js.gz +0 -0
- package/dist/web/assets/mojo-BQ6HsVIQ.js.br +0 -0
- package/dist/web/assets/mojo-BQ6HsVIQ.js.gz +0 -0
- package/dist/web/assets/monaco/vs/_commonjsHelpers-CT9FvmAN.js +1 -0
- package/dist/web/assets/monaco/vs/abap-D-t0cyap.js +1 -0
- package/dist/web/assets/monaco/vs/abap-D-t0cyap.js.br +0 -0
- package/dist/web/assets/monaco/vs/abap-D-t0cyap.js.gz +0 -0
- package/dist/web/assets/monaco/vs/apex-CcIm7xu6.js +1 -0
- package/dist/web/assets/monaco/vs/apex-CcIm7xu6.js.br +0 -0
- package/dist/web/assets/monaco/vs/apex-CcIm7xu6.js.gz +0 -0
- package/dist/web/assets/monaco/vs/assets/css.worker-HnVq6Ewq.js +93 -0
- package/dist/web/assets/monaco/vs/assets/css.worker-HnVq6Ewq.js.br +0 -0
- package/dist/web/assets/monaco/vs/assets/css.worker-HnVq6Ewq.js.gz +0 -0
- package/dist/web/assets/monaco/vs/assets/editor.worker-Be8ye1pW.js +26 -0
- package/dist/web/assets/monaco/vs/assets/editor.worker-Be8ye1pW.js.br +0 -0
- package/dist/web/assets/monaco/vs/assets/editor.worker-Be8ye1pW.js.gz +0 -0
- package/dist/web/assets/monaco/vs/assets/html.worker-B51mlPHg.js +470 -0
- package/dist/web/assets/monaco/vs/assets/html.worker-B51mlPHg.js.br +0 -0
- package/dist/web/assets/monaco/vs/assets/html.worker-B51mlPHg.js.gz +0 -0
- package/dist/web/assets/monaco/vs/assets/json.worker-DKiEKt88.js +58 -0
- package/dist/web/assets/monaco/vs/assets/json.worker-DKiEKt88.js.br +0 -0
- package/dist/web/assets/monaco/vs/assets/json.worker-DKiEKt88.js.gz +0 -0
- package/dist/web/assets/monaco/vs/assets/ts.worker-CMbG-7ft.js +67731 -0
- package/dist/web/assets/monaco/vs/assets/ts.worker-CMbG-7ft.js.br +0 -0
- package/dist/web/assets/monaco/vs/assets/ts.worker-CMbG-7ft.js.gz +0 -0
- package/dist/web/assets/monaco/vs/azcli-BA0tQDCg.js +1 -0
- package/dist/web/assets/monaco/vs/basic-languages/monaco.contribution.js +1 -0
- package/dist/web/assets/monaco/vs/basic-languages/monaco.contribution.js.br +0 -0
- package/dist/web/assets/monaco/vs/basic-languages/monaco.contribution.js.gz +0 -0
- package/dist/web/assets/monaco/vs/bat-C397hTD6.js +1 -0
- package/dist/web/assets/monaco/vs/bat-C397hTD6.js.br +0 -0
- package/dist/web/assets/monaco/vs/bat-C397hTD6.js.gz +0 -0
- package/dist/web/assets/monaco/vs/bicep-DF5aW17k.js +2 -0
- package/dist/web/assets/monaco/vs/bicep-DF5aW17k.js.br +0 -0
- package/dist/web/assets/monaco/vs/bicep-DF5aW17k.js.gz +0 -0
- package/dist/web/assets/monaco/vs/cameligo-plsz8qhj.js +1 -0
- package/dist/web/assets/monaco/vs/cameligo-plsz8qhj.js.br +0 -0
- package/dist/web/assets/monaco/vs/cameligo-plsz8qhj.js.gz +0 -0
- package/dist/web/assets/monaco/vs/clojure-Y2auQMzK.js +1 -0
- package/dist/web/assets/monaco/vs/clojure-Y2auQMzK.js.br +0 -0
- package/dist/web/assets/monaco/vs/clojure-Y2auQMzK.js.gz +0 -0
- package/dist/web/assets/monaco/vs/coffee-Bu45yuWE.js +1 -0
- package/dist/web/assets/monaco/vs/coffee-Bu45yuWE.js.br +0 -0
- package/dist/web/assets/monaco/vs/coffee-Bu45yuWE.js.gz +0 -0
- package/dist/web/assets/monaco/vs/cpp-CkKPQIni.js +1 -0
- package/dist/web/assets/monaco/vs/cpp-CkKPQIni.js.br +0 -0
- package/dist/web/assets/monaco/vs/cpp-CkKPQIni.js.gz +0 -0
- package/dist/web/assets/monaco/vs/csharp-CX28MZyh.js +1 -0
- package/dist/web/assets/monaco/vs/csharp-CX28MZyh.js.br +0 -0
- package/dist/web/assets/monaco/vs/csharp-CX28MZyh.js.gz +0 -0
- package/dist/web/assets/monaco/vs/csp-D8uWnyxW.js +1 -0
- package/dist/web/assets/monaco/vs/csp-D8uWnyxW.js.br +0 -0
- package/dist/web/assets/monaco/vs/csp-D8uWnyxW.js.gz +0 -0
- package/dist/web/assets/monaco/vs/css-CaeNmE3S.js +3 -0
- package/dist/web/assets/monaco/vs/css-CaeNmE3S.js.br +0 -0
- package/dist/web/assets/monaco/vs/css-CaeNmE3S.js.gz +0 -0
- package/dist/web/assets/monaco/vs/cssMode-CjiAH6dQ.js +1 -0
- package/dist/web/assets/monaco/vs/cssMode-CjiAH6dQ.js.br +0 -0
- package/dist/web/assets/monaco/vs/cssMode-CjiAH6dQ.js.gz +0 -0
- package/dist/web/assets/monaco/vs/cypher-DVThT8BS.js +1 -0
- package/dist/web/assets/monaco/vs/cypher-DVThT8BS.js.br +0 -0
- package/dist/web/assets/monaco/vs/cypher-DVThT8BS.js.gz +0 -0
- package/dist/web/assets/monaco/vs/dart-CmGfCvrO.js +1 -0
- package/dist/web/assets/monaco/vs/dart-CmGfCvrO.js.br +0 -0
- package/dist/web/assets/monaco/vs/dart-CmGfCvrO.js.gz +0 -0
- package/dist/web/assets/monaco/vs/dockerfile-CZqqYdch.js +1 -0
- package/dist/web/assets/monaco/vs/dockerfile-CZqqYdch.js.br +0 -0
- package/dist/web/assets/monaco/vs/dockerfile-CZqqYdch.js.gz +0 -0
- package/dist/web/assets/monaco/vs/ecl-30fUercY.js +1 -0
- package/dist/web/assets/monaco/vs/ecl-30fUercY.js.br +0 -0
- package/dist/web/assets/monaco/vs/ecl-30fUercY.js.gz +0 -0
- package/dist/web/assets/monaco/vs/editor/editor.main.css +1 -0
- package/dist/web/assets/monaco/vs/editor/editor.main.css.br +0 -0
- package/dist/web/assets/monaco/vs/editor/editor.main.css.gz +0 -0
- package/dist/web/assets/monaco/vs/editor/editor.main.js +5 -0
- package/dist/web/assets/monaco/vs/editor/editor.main.js.br +0 -0
- package/dist/web/assets/monaco/vs/editor/editor.main.js.gz +0 -0
- package/dist/web/assets/monaco/vs/editor.api-CalNCsUg.js +903 -0
- package/dist/web/assets/monaco/vs/editor.api-CalNCsUg.js.br +0 -0
- package/dist/web/assets/monaco/vs/editor.api-CalNCsUg.js.gz +0 -0
- package/dist/web/assets/monaco/vs/elixir-xjPaIfzF.js +1 -0
- package/dist/web/assets/monaco/vs/elixir-xjPaIfzF.js.br +0 -0
- package/dist/web/assets/monaco/vs/elixir-xjPaIfzF.js.gz +0 -0
- package/dist/web/assets/monaco/vs/flow9-DqtmStfK.js +1 -0
- package/dist/web/assets/monaco/vs/flow9-DqtmStfK.js.br +0 -0
- package/dist/web/assets/monaco/vs/flow9-DqtmStfK.js.gz +0 -0
- package/dist/web/assets/monaco/vs/freemarker2-Cz_sV6Md.js +3 -0
- package/dist/web/assets/monaco/vs/freemarker2-Cz_sV6Md.js.br +0 -0
- package/dist/web/assets/monaco/vs/freemarker2-Cz_sV6Md.js.gz +0 -0
- package/dist/web/assets/monaco/vs/fsharp-BOMdg4U1.js +1 -0
- package/dist/web/assets/monaco/vs/fsharp-BOMdg4U1.js.br +0 -0
- package/dist/web/assets/monaco/vs/fsharp-BOMdg4U1.js.gz +0 -0
- package/dist/web/assets/monaco/vs/go-D_hbi-Jt.js +1 -0
- package/dist/web/assets/monaco/vs/go-D_hbi-Jt.js.br +0 -0
- package/dist/web/assets/monaco/vs/go-D_hbi-Jt.js.gz +0 -0
- package/dist/web/assets/monaco/vs/graphql-CKUU4kLG.js +1 -0
- package/dist/web/assets/monaco/vs/graphql-CKUU4kLG.js.br +0 -0
- package/dist/web/assets/monaco/vs/graphql-CKUU4kLG.js.gz +0 -0
- package/dist/web/assets/monaco/vs/handlebars-OwglfO-1.js +1 -0
- package/dist/web/assets/monaco/vs/handlebars-OwglfO-1.js.br +0 -0
- package/dist/web/assets/monaco/vs/handlebars-OwglfO-1.js.gz +0 -0
- package/dist/web/assets/monaco/vs/hcl-DTaboeZW.js +1 -0
- package/dist/web/assets/monaco/vs/hcl-DTaboeZW.js.br +0 -0
- package/dist/web/assets/monaco/vs/hcl-DTaboeZW.js.gz +0 -0
- package/dist/web/assets/monaco/vs/html-Pa1xEWsY.js +1 -0
- package/dist/web/assets/monaco/vs/html-Pa1xEWsY.js.br +0 -0
- package/dist/web/assets/monaco/vs/html-Pa1xEWsY.js.gz +0 -0
- package/dist/web/assets/monaco/vs/htmlMode-Bz67EXwp.js +1 -0
- package/dist/web/assets/monaco/vs/htmlMode-Bz67EXwp.js.br +0 -0
- package/dist/web/assets/monaco/vs/htmlMode-Bz67EXwp.js.gz +0 -0
- package/dist/web/assets/monaco/vs/ini-CsNwO04R.js +1 -0
- package/dist/web/assets/monaco/vs/ini-CsNwO04R.js.br +0 -0
- package/dist/web/assets/monaco/vs/ini-CsNwO04R.js.gz +0 -0
- package/dist/web/assets/monaco/vs/java-CI4ZMsH9.js +1 -0
- package/dist/web/assets/monaco/vs/java-CI4ZMsH9.js.br +0 -0
- package/dist/web/assets/monaco/vs/java-CI4ZMsH9.js.gz +0 -0
- package/dist/web/assets/monaco/vs/javascript-PczUCGdz.js +1 -0
- package/dist/web/assets/monaco/vs/jsonMode-DULH5oaX.js +7 -0
- package/dist/web/assets/monaco/vs/jsonMode-DULH5oaX.js.br +0 -0
- package/dist/web/assets/monaco/vs/jsonMode-DULH5oaX.js.gz +0 -0
- package/dist/web/assets/monaco/vs/julia-BwzEvaQw.js +1 -0
- package/dist/web/assets/monaco/vs/julia-BwzEvaQw.js.br +0 -0
- package/dist/web/assets/monaco/vs/julia-BwzEvaQw.js.gz +0 -0
- package/dist/web/assets/monaco/vs/kotlin-IUYPiTV8.js +1 -0
- package/dist/web/assets/monaco/vs/kotlin-IUYPiTV8.js.br +0 -0
- package/dist/web/assets/monaco/vs/kotlin-IUYPiTV8.js.gz +0 -0
- package/dist/web/assets/monaco/vs/language/css/monaco.contribution.js +1 -0
- package/dist/web/assets/monaco/vs/language/html/monaco.contribution.js +1 -0
- package/dist/web/assets/monaco/vs/language/json/monaco.contribution.js +1 -0
- package/dist/web/assets/monaco/vs/language/typescript/monaco.contribution.js +1 -0
- package/dist/web/assets/monaco/vs/less-C0eDYdqa.js +2 -0
- package/dist/web/assets/monaco/vs/less-C0eDYdqa.js.br +0 -0
- package/dist/web/assets/monaco/vs/less-C0eDYdqa.js.gz +0 -0
- package/dist/web/assets/monaco/vs/lexon-iON-Kj97.js +1 -0
- package/dist/web/assets/monaco/vs/lexon-iON-Kj97.js.br +0 -0
- package/dist/web/assets/monaco/vs/lexon-iON-Kj97.js.gz +0 -0
- package/dist/web/assets/monaco/vs/liquid-DqKjdPGy.js +1 -0
- package/dist/web/assets/monaco/vs/liquid-DqKjdPGy.js.br +0 -0
- package/dist/web/assets/monaco/vs/liquid-DqKjdPGy.js.gz +0 -0
- package/dist/web/assets/monaco/vs/loader.js +1368 -0
- package/dist/web/assets/monaco/vs/loader.js.br +0 -0
- package/dist/web/assets/monaco/vs/loader.js.gz +0 -0
- package/dist/web/assets/monaco/vs/lspLanguageFeatures-kM9O9rjY.js +4 -0
- package/dist/web/assets/monaco/vs/lspLanguageFeatures-kM9O9rjY.js.br +0 -0
- package/dist/web/assets/monaco/vs/lspLanguageFeatures-kM9O9rjY.js.gz +0 -0
- package/dist/web/assets/monaco/vs/lua-DtygF91M.js +1 -0
- package/dist/web/assets/monaco/vs/lua-DtygF91M.js.br +0 -0
- package/dist/web/assets/monaco/vs/lua-DtygF91M.js.gz +0 -0
- package/dist/web/assets/monaco/vs/m3-CsR4AuFi.js +1 -0
- package/dist/web/assets/monaco/vs/m3-CsR4AuFi.js.br +0 -0
- package/dist/web/assets/monaco/vs/m3-CsR4AuFi.js.gz +0 -0
- package/dist/web/assets/monaco/vs/markdown-C_rD0bIw.js +1 -0
- package/dist/web/assets/monaco/vs/markdown-C_rD0bIw.js.br +0 -0
- package/dist/web/assets/monaco/vs/markdown-C_rD0bIw.js.gz +0 -0
- package/dist/web/assets/monaco/vs/mdx-DEWtB1K5.js +1 -0
- package/dist/web/assets/monaco/vs/mdx-DEWtB1K5.js.br +0 -0
- package/dist/web/assets/monaco/vs/mdx-DEWtB1K5.js.gz +0 -0
- package/dist/web/assets/monaco/vs/mips-CiYP61RB.js +1 -0
- package/dist/web/assets/monaco/vs/mips-CiYP61RB.js.br +0 -0
- package/dist/web/assets/monaco/vs/mips-CiYP61RB.js.gz +0 -0
- package/dist/web/assets/monaco/vs/monaco.contribution-D2OdxNBt.js +1 -0
- package/dist/web/assets/monaco/vs/monaco.contribution-D2OdxNBt.js.br +0 -0
- package/dist/web/assets/monaco/vs/monaco.contribution-D2OdxNBt.js.gz +0 -0
- package/dist/web/assets/monaco/vs/monaco.contribution-DO3azKX8.js +1 -0
- package/dist/web/assets/monaco/vs/monaco.contribution-DO3azKX8.js.br +0 -0
- package/dist/web/assets/monaco/vs/monaco.contribution-DO3azKX8.js.gz +0 -0
- package/dist/web/assets/monaco/vs/monaco.contribution-EcChJV6a.js +1 -0
- package/dist/web/assets/monaco/vs/monaco.contribution-EcChJV6a.js.br +0 -0
- package/dist/web/assets/monaco/vs/monaco.contribution-EcChJV6a.js.gz +0 -0
- package/dist/web/assets/monaco/vs/monaco.contribution-qLAYrEOP.js +1 -0
- package/dist/web/assets/monaco/vs/monaco.contribution-qLAYrEOP.js.br +0 -0
- package/dist/web/assets/monaco/vs/monaco.contribution-qLAYrEOP.js.gz +0 -0
- package/dist/web/assets/monaco/vs/msdax-C38-sJlp.js +1 -0
- package/dist/web/assets/monaco/vs/msdax-C38-sJlp.js.br +0 -0
- package/dist/web/assets/monaco/vs/msdax-C38-sJlp.js.gz +0 -0
- package/dist/web/assets/monaco/vs/mysql-CdtbpvbG.js +1 -0
- package/dist/web/assets/monaco/vs/mysql-CdtbpvbG.js.br +0 -0
- package/dist/web/assets/monaco/vs/mysql-CdtbpvbG.js.gz +0 -0
- package/dist/web/assets/monaco/vs/nls.messages-loader.js +1 -0
- package/dist/web/assets/monaco/vs/objective-c-CntZFaHX.js +1 -0
- package/dist/web/assets/monaco/vs/objective-c-CntZFaHX.js.br +0 -0
- package/dist/web/assets/monaco/vs/objective-c-CntZFaHX.js.gz +0 -0
- package/dist/web/assets/monaco/vs/pascal-r6kuqfl_.js +1 -0
- package/dist/web/assets/monaco/vs/pascal-r6kuqfl_.js.br +0 -0
- package/dist/web/assets/monaco/vs/pascal-r6kuqfl_.js.gz +0 -0
- package/dist/web/assets/monaco/vs/pascaligo-BiXoTmXh.js +1 -0
- package/dist/web/assets/monaco/vs/pascaligo-BiXoTmXh.js.br +0 -0
- package/dist/web/assets/monaco/vs/pascaligo-BiXoTmXh.js.gz +0 -0
- package/dist/web/assets/monaco/vs/perl-DABw_TcH.js +1 -0
- package/dist/web/assets/monaco/vs/perl-DABw_TcH.js.br +0 -0
- package/dist/web/assets/monaco/vs/perl-DABw_TcH.js.gz +0 -0
- package/dist/web/assets/monaco/vs/pgsql-me_jFXeX.js +1 -0
- package/dist/web/assets/monaco/vs/pgsql-me_jFXeX.js.br +0 -0
- package/dist/web/assets/monaco/vs/pgsql-me_jFXeX.js.gz +0 -0
- package/dist/web/assets/monaco/vs/php-D_kh-9LK.js +1 -0
- package/dist/web/assets/monaco/vs/php-D_kh-9LK.js.br +0 -0
- package/dist/web/assets/monaco/vs/php-D_kh-9LK.js.gz +0 -0
- package/dist/web/assets/monaco/vs/pla-VfZjczW0.js +1 -0
- package/dist/web/assets/monaco/vs/pla-VfZjczW0.js.br +0 -0
- package/dist/web/assets/monaco/vs/pla-VfZjczW0.js.gz +0 -0
- package/dist/web/assets/monaco/vs/postiats-BBSzz8Pk.js +1 -0
- package/dist/web/assets/monaco/vs/postiats-BBSzz8Pk.js.br +0 -0
- package/dist/web/assets/monaco/vs/postiats-BBSzz8Pk.js.gz +0 -0
- package/dist/web/assets/monaco/vs/powerquery-Dt-g_2cc.js +1 -0
- package/dist/web/assets/monaco/vs/powerquery-Dt-g_2cc.js.br +0 -0
- package/dist/web/assets/monaco/vs/powerquery-Dt-g_2cc.js.gz +0 -0
- package/dist/web/assets/monaco/vs/powershell-B-7ap1zc.js +1 -0
- package/dist/web/assets/monaco/vs/powershell-B-7ap1zc.js.br +0 -0
- package/dist/web/assets/monaco/vs/powershell-B-7ap1zc.js.gz +0 -0
- package/dist/web/assets/monaco/vs/protobuf-BmtuEB1A.js +2 -0
- package/dist/web/assets/monaco/vs/protobuf-BmtuEB1A.js.br +0 -0
- package/dist/web/assets/monaco/vs/protobuf-BmtuEB1A.js.gz +0 -0
- package/dist/web/assets/monaco/vs/pug-BRpRNeEb.js +1 -0
- package/dist/web/assets/monaco/vs/pug-BRpRNeEb.js.br +0 -0
- package/dist/web/assets/monaco/vs/pug-BRpRNeEb.js.gz +0 -0
- package/dist/web/assets/monaco/vs/python-Cr0UkIbn.js +1 -0
- package/dist/web/assets/monaco/vs/python-Cr0UkIbn.js.br +0 -0
- package/dist/web/assets/monaco/vs/python-Cr0UkIbn.js.gz +0 -0
- package/dist/web/assets/monaco/vs/qsharp-BzsFaUU9.js +1 -0
- package/dist/web/assets/monaco/vs/qsharp-BzsFaUU9.js.br +0 -0
- package/dist/web/assets/monaco/vs/qsharp-BzsFaUU9.js.gz +0 -0
- package/dist/web/assets/monaco/vs/r-f8dDdrp4.js +1 -0
- package/dist/web/assets/monaco/vs/r-f8dDdrp4.js.br +0 -0
- package/dist/web/assets/monaco/vs/r-f8dDdrp4.js.gz +0 -0
- package/dist/web/assets/monaco/vs/razor-BYAHOTkz.js +1 -0
- package/dist/web/assets/monaco/vs/razor-BYAHOTkz.js.br +0 -0
- package/dist/web/assets/monaco/vs/razor-BYAHOTkz.js.gz +0 -0
- package/dist/web/assets/monaco/vs/redis-fvZQY4PI.js +1 -0
- package/dist/web/assets/monaco/vs/redis-fvZQY4PI.js.br +0 -0
- package/dist/web/assets/monaco/vs/redis-fvZQY4PI.js.gz +0 -0
- package/dist/web/assets/monaco/vs/redshift-45Et0LQi.js +1 -0
- package/dist/web/assets/monaco/vs/redshift-45Et0LQi.js.br +0 -0
- package/dist/web/assets/monaco/vs/redshift-45Et0LQi.js.gz +0 -0
- package/dist/web/assets/monaco/vs/restructuredtext-C7UUFKFD.js +1 -0
- package/dist/web/assets/monaco/vs/restructuredtext-C7UUFKFD.js.br +0 -0
- package/dist/web/assets/monaco/vs/restructuredtext-C7UUFKFD.js.gz +0 -0
- package/dist/web/assets/monaco/vs/ruby-CZO8zYTz.js +1 -0
- package/dist/web/assets/monaco/vs/ruby-CZO8zYTz.js.br +0 -0
- package/dist/web/assets/monaco/vs/ruby-CZO8zYTz.js.gz +0 -0
- package/dist/web/assets/monaco/vs/rust-Bfetafyc.js +1 -0
- package/dist/web/assets/monaco/vs/rust-Bfetafyc.js.br +0 -0
- package/dist/web/assets/monaco/vs/rust-Bfetafyc.js.gz +0 -0
- package/dist/web/assets/monaco/vs/sb-3GYllVck.js +1 -0
- package/dist/web/assets/monaco/vs/sb-3GYllVck.js.br +0 -0
- package/dist/web/assets/monaco/vs/sb-3GYllVck.js.gz +0 -0
- package/dist/web/assets/monaco/vs/scala-foMgrKo1.js +1 -0
- package/dist/web/assets/monaco/vs/scala-foMgrKo1.js.br +0 -0
- package/dist/web/assets/monaco/vs/scala-foMgrKo1.js.gz +0 -0
- package/dist/web/assets/monaco/vs/scheme-CHdMtr7p.js +1 -0
- package/dist/web/assets/monaco/vs/scheme-CHdMtr7p.js.br +0 -0
- package/dist/web/assets/monaco/vs/scheme-CHdMtr7p.js.gz +0 -0
- package/dist/web/assets/monaco/vs/scss-C1cmLt9V.js +3 -0
- package/dist/web/assets/monaco/vs/scss-C1cmLt9V.js.br +0 -0
- package/dist/web/assets/monaco/vs/scss-C1cmLt9V.js.gz +0 -0
- package/dist/web/assets/monaco/vs/shell-ClXCKCEW.js +1 -0
- package/dist/web/assets/monaco/vs/shell-ClXCKCEW.js.br +0 -0
- package/dist/web/assets/monaco/vs/shell-ClXCKCEW.js.gz +0 -0
- package/dist/web/assets/monaco/vs/solidity-MZ6ExpPy.js +1 -0
- package/dist/web/assets/monaco/vs/solidity-MZ6ExpPy.js.br +0 -0
- package/dist/web/assets/monaco/vs/solidity-MZ6ExpPy.js.gz +0 -0
- package/dist/web/assets/monaco/vs/sophia-DWkuSsPQ.js +1 -0
- package/dist/web/assets/monaco/vs/sophia-DWkuSsPQ.js.br +0 -0
- package/dist/web/assets/monaco/vs/sophia-DWkuSsPQ.js.gz +0 -0
- package/dist/web/assets/monaco/vs/sparql-AUGFYSyk.js +1 -0
- package/dist/web/assets/monaco/vs/sparql-AUGFYSyk.js.br +0 -0
- package/dist/web/assets/monaco/vs/sparql-AUGFYSyk.js.gz +0 -0
- package/dist/web/assets/monaco/vs/sql-32GpJSV2.js +1 -0
- package/dist/web/assets/monaco/vs/sql-32GpJSV2.js.br +0 -0
- package/dist/web/assets/monaco/vs/sql-32GpJSV2.js.gz +0 -0
- package/dist/web/assets/monaco/vs/st-CuDFIVZ_.js +1 -0
- package/dist/web/assets/monaco/vs/st-CuDFIVZ_.js.br +0 -0
- package/dist/web/assets/monaco/vs/st-CuDFIVZ_.js.gz +0 -0
- package/dist/web/assets/monaco/vs/swift-n-2HociN.js +3 -0
- package/dist/web/assets/monaco/vs/swift-n-2HociN.js.br +0 -0
- package/dist/web/assets/monaco/vs/swift-n-2HociN.js.gz +0 -0
- package/dist/web/assets/monaco/vs/systemverilog-Ch4vA8Yt.js +1 -0
- package/dist/web/assets/monaco/vs/systemverilog-Ch4vA8Yt.js.br +0 -0
- package/dist/web/assets/monaco/vs/systemverilog-Ch4vA8Yt.js.gz +0 -0
- package/dist/web/assets/monaco/vs/tcl-D74tq1nH.js +1 -0
- package/dist/web/assets/monaco/vs/tcl-D74tq1nH.js.br +0 -0
- package/dist/web/assets/monaco/vs/tcl-D74tq1nH.js.gz +0 -0
- package/dist/web/assets/monaco/vs/tsMode-CZz1Umrk.js +11 -0
- package/dist/web/assets/monaco/vs/tsMode-CZz1Umrk.js.br +0 -0
- package/dist/web/assets/monaco/vs/tsMode-CZz1Umrk.js.gz +0 -0
- package/dist/web/assets/monaco/vs/twig-C6taOxMV.js +1 -0
- package/dist/web/assets/monaco/vs/twig-C6taOxMV.js.br +0 -0
- package/dist/web/assets/monaco/vs/twig-C6taOxMV.js.gz +0 -0
- package/dist/web/assets/monaco/vs/typescript-DfOrAzoV.js +1 -0
- package/dist/web/assets/monaco/vs/typescript-DfOrAzoV.js.br +0 -0
- package/dist/web/assets/monaco/vs/typescript-DfOrAzoV.js.gz +0 -0
- package/dist/web/assets/monaco/vs/typespec-D-PIh9Xw.js +1 -0
- package/dist/web/assets/monaco/vs/typespec-D-PIh9Xw.js.br +0 -0
- package/dist/web/assets/monaco/vs/typespec-D-PIh9Xw.js.gz +0 -0
- package/dist/web/assets/monaco/vs/vb-Dyb2648j.js +1 -0
- package/dist/web/assets/monaco/vs/vb-Dyb2648j.js.br +0 -0
- package/dist/web/assets/monaco/vs/vb-Dyb2648j.js.gz +0 -0
- package/dist/web/assets/monaco/vs/wgsl-BhLXMOR0.js +298 -0
- package/dist/web/assets/monaco/vs/wgsl-BhLXMOR0.js.br +0 -0
- package/dist/web/assets/monaco/vs/wgsl-BhLXMOR0.js.gz +0 -0
- package/dist/web/assets/monaco/vs/workers-DcJshg-q.js +1 -0
- package/dist/web/assets/monaco/vs/workers-DcJshg-q.js.br +0 -0
- package/dist/web/assets/monaco/vs/workers-DcJshg-q.js.gz +0 -0
- package/dist/web/assets/monaco/vs/xml-CdsdnY8S.js +1 -0
- package/dist/web/assets/monaco/vs/xml-CdsdnY8S.js.br +0 -0
- package/dist/web/assets/monaco/vs/xml-CdsdnY8S.js.gz +0 -0
- package/dist/web/assets/monaco/vs/yaml-DYGvmE88.js +1 -0
- package/dist/web/assets/monaco/vs/yaml-DYGvmE88.js.br +0 -0
- package/dist/web/assets/monaco/vs/yaml-DYGvmE88.js.gz +0 -0
- package/dist/web/assets/monokai-amcXAKGG.js.br +0 -0
- package/dist/web/assets/monokai-amcXAKGG.js.gz +0 -0
- package/dist/web/assets/moonbit-CGSXXQJI.js.br +0 -0
- package/dist/web/assets/moonbit-CGSXXQJI.js.gz +0 -0
- package/dist/web/assets/move-BOa4mq0q.js.br +0 -0
- package/dist/web/assets/move-BOa4mq0q.js.gz +0 -0
- package/dist/web/assets/narrat-dBYNSnhr.js.br +0 -0
- package/dist/web/assets/narrat-dBYNSnhr.js.gz +0 -0
- package/dist/web/assets/{new-design-dialog-CbrMbKum.js → new-design-dialog-DcoejI1s.js} +1 -1
- package/dist/web/assets/new-design-dialog-DcoejI1s.js.br +0 -0
- package/dist/web/assets/new-design-dialog-DcoejI1s.js.gz +0 -0
- package/dist/web/assets/nextflow-DufnRZW1.js.br +0 -0
- package/dist/web/assets/nextflow-DufnRZW1.js.gz +0 -0
- package/dist/web/assets/nextflow-groovy-Dm2Y_qgn.js.br +0 -0
- package/dist/web/assets/nextflow-groovy-Dm2Y_qgn.js.gz +0 -0
- package/dist/web/assets/nginx-DtUJGfad.js.br +0 -0
- package/dist/web/assets/nginx-DtUJGfad.js.gz +0 -0
- package/dist/web/assets/night-owl-Dy9ibYHN.js.br +0 -0
- package/dist/web/assets/night-owl-Dy9ibYHN.js.gz +0 -0
- package/dist/web/assets/night-owl-light-DamYjQKi.js.br +0 -0
- package/dist/web/assets/night-owl-light-DamYjQKi.js.gz +0 -0
- package/dist/web/assets/nim-BeBPwibr.js.br +0 -0
- package/dist/web/assets/nim-BeBPwibr.js.gz +0 -0
- package/dist/web/assets/nix-C1LyoszC.js.br +0 -0
- package/dist/web/assets/nix-C1LyoszC.js.gz +0 -0
- package/dist/web/assets/nord-LtGRYAFI.js.br +0 -0
- package/dist/web/assets/nord-LtGRYAFI.js.gz +0 -0
- package/dist/web/assets/{notification-store-BO3RInEL.js → notification-store-D88Y9kF_.js} +1 -1
- package/dist/web/assets/notifications-settings-section-Bfxqz65i.js.br +0 -0
- package/dist/web/assets/notifications-settings-section-Bfxqz65i.js.gz +0 -0
- package/dist/web/assets/number-overlay-editor-xzM7GhYV.js.br +0 -0
- package/dist/web/assets/number-overlay-editor-xzM7GhYV.js.gz +0 -0
- package/dist/web/assets/nushell-BMoOkt47.js.br +0 -0
- package/dist/web/assets/nushell-BMoOkt47.js.gz +0 -0
- package/dist/web/assets/objective-c-CILaOZJu.js.br +0 -0
- package/dist/web/assets/objective-c-CILaOZJu.js.gz +0 -0
- package/dist/web/assets/objective-cpp-D5Fo-SoM.js.br +0 -0
- package/dist/web/assets/objective-cpp-D5Fo-SoM.js.gz +0 -0
- package/dist/web/assets/ocaml-D1TCTCEJ.js.br +0 -0
- package/dist/web/assets/ocaml-D1TCTCEJ.js.gz +0 -0
- package/dist/web/assets/odin-CjdYcmpW.js.br +0 -0
- package/dist/web/assets/odin-CjdYcmpW.js.gz +0 -0
- package/dist/web/assets/onboarding-entry-CcvySZ_l.js.br +0 -0
- package/dist/web/assets/onboarding-entry-CcvySZ_l.js.gz +0 -0
- package/dist/web/assets/onboarding-quick-orientation-CT4PylG0.js.br +0 -0
- package/dist/web/assets/onboarding-quick-orientation-CT4PylG0.js.gz +0 -0
- package/dist/web/assets/one-dark-pro-GpsZUGZl.js.br +0 -0
- package/dist/web/assets/one-dark-pro-GpsZUGZl.js.gz +0 -0
- package/dist/web/assets/one-light-DlketcS4.js.br +0 -0
- package/dist/web/assets/one-light-DlketcS4.js.gz +0 -0
- package/dist/web/assets/openscad-BoT8wwuI.js.br +0 -0
- package/dist/web/assets/openscad-BoT8wwuI.js.gz +0 -0
- package/dist/web/assets/overview-panel-DshAIz6C.js.br +0 -0
- package/dist/web/assets/overview-panel-DshAIz6C.js.gz +0 -0
- package/dist/web/assets/panel-store-BUQ-CPsd.js.br +0 -0
- package/dist/web/assets/panel-store-BUQ-CPsd.js.gz +0 -0
- package/dist/web/assets/pascal-Cqy403Sf.js.br +0 -0
- package/dist/web/assets/pascal-Cqy403Sf.js.gz +0 -0
- package/dist/web/assets/pdf-preview-BWim6mu1.js.br +0 -0
- package/dist/web/assets/pdf-preview-BWim6mu1.js.gz +0 -0
- package/dist/web/assets/perl-hV0EoLCp.js.br +0 -0
- package/dist/web/assets/perl-hV0EoLCp.js.gz +0 -0
- package/dist/web/assets/php-N1YBqBhK.js.br +0 -0
- package/dist/web/assets/php-N1YBqBhK.js.gz +0 -0
- package/dist/web/assets/pkl-D6gRI9qQ.js.br +0 -0
- package/dist/web/assets/pkl-D6gRI9qQ.js.gz +0 -0
- package/dist/web/assets/plastic-DgvX8DXX.js.br +0 -0
- package/dist/web/assets/plastic-DgvX8DXX.js.gz +0 -0
- package/dist/web/assets/plsql-CTDnCVE3.js.br +0 -0
- package/dist/web/assets/plsql-CTDnCVE3.js.gz +0 -0
- package/dist/web/assets/po-DDnzm7AQ.js.br +0 -0
- package/dist/web/assets/po-DDnzm7AQ.js.gz +0 -0
- package/dist/web/assets/poimandres-C4HQwFp-.js.br +0 -0
- package/dist/web/assets/poimandres-C4HQwFp-.js.gz +0 -0
- package/dist/web/assets/polar-WBTQdMzX.js.br +0 -0
- package/dist/web/assets/polar-WBTQdMzX.js.gz +0 -0
- package/dist/web/assets/postcss-CWxogTg1.js.br +0 -0
- package/dist/web/assets/postcss-CWxogTg1.js.gz +0 -0
- package/dist/web/assets/postgres-viewer-HwlL1UTJ.js.br +0 -0
- package/dist/web/assets/postgres-viewer-HwlL1UTJ.js.gz +0 -0
- package/dist/web/assets/powerquery-DVtReIRR.js.br +0 -0
- package/dist/web/assets/powerquery-DVtReIRR.js.gz +0 -0
- package/dist/web/assets/powershell-Cb_RNzSh.js.br +0 -0
- package/dist/web/assets/powershell-Cb_RNzSh.js.gz +0 -0
- package/dist/web/assets/{ppmbot-settings-section-CHr2FIDj.js → ppmbot-settings-section-DF0kqdyO.js} +1 -1
- package/dist/web/assets/ppmbot-settings-section-DF0kqdyO.js.br +0 -0
- package/dist/web/assets/ppmbot-settings-section-DF0kqdyO.js.gz +0 -0
- package/dist/web/assets/pptx-export-D6DOknBD.js.br +0 -0
- package/dist/web/assets/pptx-export-D6DOknBD.js.gz +0 -0
- package/dist/web/assets/prisma-nKLUh3DY.js.br +0 -0
- package/dist/web/assets/prisma-nKLUh3DY.js.gz +0 -0
- package/dist/web/assets/{problems-panel-41z59l78.js → problems-panel-DRcq5ChN.js} +1 -1
- package/dist/web/assets/problems-panel-DRcq5ChN.js.br +0 -0
- package/dist/web/assets/problems-panel-DRcq5ChN.js.gz +0 -0
- package/dist/web/assets/{process-table-CVMEMJqQ.js → process-table-Ds0S_YK-.js} +1 -1
- package/dist/web/assets/process-table-Ds0S_YK-.js.br +0 -0
- package/dist/web/assets/process-table-Ds0S_YK-.js.gz +0 -0
- package/dist/web/assets/project-store-C5gJXkvb.js.br +0 -0
- package/dist/web/assets/project-store-C5gJXkvb.js.gz +0 -0
- package/dist/web/assets/prolog-BD9orEy4.js.br +0 -0
- package/dist/web/assets/prolog-BD9orEy4.js.gz +0 -0
- package/dist/web/assets/proto-B-AFoz75.js.br +0 -0
- package/dist/web/assets/proto-B-AFoz75.js.gz +0 -0
- package/dist/web/assets/{proxy-settings-section-B4dkvCCx.js → proxy-settings-section-Q-ttqVOa.js} +1 -1
- package/dist/web/assets/proxy-settings-section-Q-ttqVOa.js.br +0 -0
- package/dist/web/assets/proxy-settings-section-Q-ttqVOa.js.gz +0 -0
- package/dist/web/assets/pug-IMA1knL7.js.br +0 -0
- package/dist/web/assets/pug-IMA1knL7.js.gz +0 -0
- package/dist/web/assets/puppet-DDW6wWm4.js.br +0 -0
- package/dist/web/assets/puppet-DDW6wWm4.js.gz +0 -0
- package/dist/web/assets/purescript-DXy49AJg.js.br +0 -0
- package/dist/web/assets/purescript-DXy49AJg.js.gz +0 -0
- package/dist/web/assets/python-BQnvDlc7.js.br +0 -0
- package/dist/web/assets/python-BQnvDlc7.js.gz +0 -0
- package/dist/web/assets/qml-DuwVuXga.js.br +0 -0
- package/dist/web/assets/qml-DuwVuXga.js.gz +0 -0
- package/dist/web/assets/qss-8XaprLEt.js.br +0 -0
- package/dist/web/assets/qss-8XaprLEt.js.gz +0 -0
- package/dist/web/assets/query-audit-section-Cn11xqgz.js.br +0 -0
- package/dist/web/assets/query-audit-section-Cn11xqgz.js.gz +0 -0
- package/dist/web/assets/r-DsXT2lmn.js.br +0 -0
- package/dist/web/assets/r-DsXT2lmn.js.gz +0 -0
- package/dist/web/assets/racket-ChcVp15M.js.br +0 -0
- package/dist/web/assets/racket-ChcVp15M.js.gz +0 -0
- package/dist/web/assets/raku-dEgEXW0A.js.br +0 -0
- package/dist/web/assets/raku-dEgEXW0A.js.gz +0 -0
- package/dist/web/assets/razor-Be4LE-G0.js.br +0 -0
- package/dist/web/assets/razor-Be4LE-G0.js.gz +0 -0
- package/dist/web/assets/red-hmwjontD.js.br +0 -0
- package/dist/web/assets/red-hmwjontD.js.gz +0 -0
- package/dist/web/assets/reg-CIkOufh2.js.br +0 -0
- package/dist/web/assets/reg-CIkOufh2.js.gz +0 -0
- package/dist/web/assets/regexp-ztLDvplH.js.br +0 -0
- package/dist/web/assets/regexp-ztLDvplH.js.gz +0 -0
- package/dist/web/assets/rel-NXKKDiTi.js.br +0 -0
- package/dist/web/assets/rel-NXKKDiTi.js.gz +0 -0
- package/dist/web/assets/{remote-desktop-clipboard-notice-Co4vEiiB.js → remote-desktop-clipboard-notice-CvPPtrRq.js} +1 -1
- package/dist/web/assets/remote-desktop-clipboard-notice-CvPPtrRq.js.br +0 -0
- package/dist/web/assets/remote-desktop-clipboard-notice-CvPPtrRq.js.gz +0 -0
- package/dist/web/assets/{remote-desktop-mobile-sheet-Cv4yo7K4.js → remote-desktop-mobile-sheet-B-TT9Fdt.js} +2 -2
- package/dist/web/assets/remote-desktop-mobile-sheet-B-TT9Fdt.js.br +0 -0
- package/dist/web/assets/remote-desktop-mobile-sheet-B-TT9Fdt.js.gz +0 -0
- package/dist/web/assets/{remote-desktop-mobile-view-CcuulHIu.js → remote-desktop-mobile-view-hUnYxXDk.js} +1 -1
- package/dist/web/assets/remote-desktop-mobile-view-hUnYxXDk.js.br +0 -0
- package/dist/web/assets/remote-desktop-mobile-view-hUnYxXDk.js.gz +0 -0
- package/dist/web/assets/{remote-desktop-readiness-gate-ouPRvBlu.js → remote-desktop-readiness-gate-CUmaeiX9.js} +1 -1
- package/dist/web/assets/remote-desktop-readiness-gate-CUmaeiX9.js.br +0 -0
- package/dist/web/assets/remote-desktop-readiness-gate-CUmaeiX9.js.gz +0 -0
- package/dist/web/assets/{remote-desktop-window-content-DmH3jBuG.js → remote-desktop-window-content-DEPUOOGw.js} +1 -1
- package/dist/web/assets/remote-desktop-window-content-DEPUOOGw.js.br +0 -0
- package/dist/web/assets/remote-desktop-window-content-DEPUOOGw.js.gz +0 -0
- package/dist/web/assets/resolve-theme-B87m6l4i.js.br +0 -0
- package/dist/web/assets/resolve-theme-B87m6l4i.js.gz +0 -0
- package/dist/web/assets/riscv-BEIzhPcg.js.br +0 -0
- package/dist/web/assets/riscv-BEIzhPcg.js.gz +0 -0
- package/dist/web/assets/rolldown-runtime-C5c2KzVm.js.br +0 -0
- package/dist/web/assets/rolldown-runtime-C5c2KzVm.js.gz +0 -0
- package/dist/web/assets/ron-CW2Bt8rN.js.br +0 -0
- package/dist/web/assets/ron-CW2Bt8rN.js.gz +0 -0
- package/dist/web/assets/rose-pine-DhnBfr5a.js.br +0 -0
- package/dist/web/assets/rose-pine-DhnBfr5a.js.gz +0 -0
- package/dist/web/assets/rose-pine-dawn-Jyj59rVs.js.br +0 -0
- package/dist/web/assets/rose-pine-dawn-Jyj59rVs.js.gz +0 -0
- package/dist/web/assets/rose-pine-moon-BMulxhJC.js.br +0 -0
- package/dist/web/assets/rose-pine-moon-BMulxhJC.js.gz +0 -0
- package/dist/web/assets/rosmsg-DuctJm-Q.js.br +0 -0
- package/dist/web/assets/rosmsg-DuctJm-Q.js.gz +0 -0
- package/dist/web/assets/rst-BdtOZUlL.js.br +0 -0
- package/dist/web/assets/rst-BdtOZUlL.js.gz +0 -0
- package/dist/web/assets/ruby-DTna6e9n.js.br +0 -0
- package/dist/web/assets/ruby-DTna6e9n.js.gz +0 -0
- package/dist/web/assets/rust-FbJ2fCp9.js.br +0 -0
- package/dist/web/assets/rust-FbJ2fCp9.js.gz +0 -0
- package/dist/web/assets/sas-X50YKLBX.js.br +0 -0
- package/dist/web/assets/sas-X50YKLBX.js.gz +0 -0
- package/dist/web/assets/sass-Dfxwdu2h.js.br +0 -0
- package/dist/web/assets/sass-Dfxwdu2h.js.gz +0 -0
- package/dist/web/assets/scala-ClsSR0wG.js.br +0 -0
- package/dist/web/assets/scala-ClsSR0wG.js.gz +0 -0
- package/dist/web/assets/{schedules-settings-section-Dy6hARk0.js → schedules-settings-section-Bv_wrzDp.js} +1 -1
- package/dist/web/assets/schedules-settings-section-Bv_wrzDp.js.br +0 -0
- package/dist/web/assets/schedules-settings-section-Bv_wrzDp.js.gz +0 -0
- package/dist/web/assets/scheme-Jj_Cc-8H.js.br +0 -0
- package/dist/web/assets/scheme-Jj_Cc-8H.js.gz +0 -0
- package/dist/web/assets/scroll-area-xAtds1T-.js.br +0 -0
- package/dist/web/assets/scroll-area-xAtds1T-.js.gz +0 -0
- package/dist/web/assets/scss-cQk9zuqD.js.br +0 -0
- package/dist/web/assets/scss-cQk9zuqD.js.gz +0 -0
- package/dist/web/assets/sdbl-Bi8D_DGN.js.br +0 -0
- package/dist/web/assets/sdbl-Bi8D_DGN.js.gz +0 -0
- package/dist/web/assets/send-to-chat-TSKk3fI9.js.br +0 -0
- package/dist/web/assets/send-to-chat-TSKk3fI9.js.gz +0 -0
- package/dist/web/assets/{settings-body-CZSwxG0i.js → settings-body-C5_chEpq.js} +2 -2
- package/dist/web/assets/settings-body-C5_chEpq.js.br +0 -0
- package/dist/web/assets/settings-body-C5_chEpq.js.gz +0 -0
- package/dist/web/assets/settings-store-DXmQug0m.js.br +0 -0
- package/dist/web/assets/settings-store-DXmQug0m.js.gz +0 -0
- package/dist/web/assets/{settings-tab-B_WPC-y7.js → settings-tab-CogpEbq5.js} +1 -1
- package/dist/web/assets/{settings-window-content-CSWdwQn1.js → settings-window-content-BNRirQDZ.js} +1 -1
- package/dist/web/assets/shaderlab-CSeOcwk6.js.br +0 -0
- package/dist/web/assets/shaderlab-CSeOcwk6.js.gz +0 -0
- package/dist/web/assets/shellscript-Dtzjnpp9.js.br +0 -0
- package/dist/web/assets/shellscript-Dtzjnpp9.js.gz +0 -0
- package/dist/web/assets/slack-dark-B7gbmJT9.js.br +0 -0
- package/dist/web/assets/slack-dark-B7gbmJT9.js.gz +0 -0
- package/dist/web/assets/slack-ochin-O7j_c76D.js.br +0 -0
- package/dist/web/assets/slack-ochin-O7j_c76D.js.gz +0 -0
- package/dist/web/assets/smalltalk-BD5-U3JK.js.br +0 -0
- package/dist/web/assets/smalltalk-BD5-U3JK.js.gz +0 -0
- package/dist/web/assets/snazzy-light-BbiRB69_.js.br +0 -0
- package/dist/web/assets/snazzy-light-BbiRB69_.js.gz +0 -0
- package/dist/web/assets/solarized-dark-2OWHYEBu.js.br +0 -0
- package/dist/web/assets/solarized-dark-2OWHYEBu.js.gz +0 -0
- package/dist/web/assets/solarized-light-Cew4YqT3.js.br +0 -0
- package/dist/web/assets/solarized-light-Cew4YqT3.js.gz +0 -0
- package/dist/web/assets/solidity-Bpbne2Tx.js.br +0 -0
- package/dist/web/assets/solidity-Bpbne2Tx.js.gz +0 -0
- package/dist/web/assets/soy-DeMex-y3.js.br +0 -0
- package/dist/web/assets/soy-DeMex-y3.js.gz +0 -0
- package/dist/web/assets/sparql-CDZTYDwx.js.br +0 -0
- package/dist/web/assets/sparql-CDZTYDwx.js.gz +0 -0
- package/dist/web/assets/splunk-Dq86L1_O.js.br +0 -0
- package/dist/web/assets/splunk-Dq86L1_O.js.gz +0 -0
- package/dist/web/assets/sql-BS_vTOM8.js.br +0 -0
- package/dist/web/assets/sql-BS_vTOM8.js.gz +0 -0
- package/dist/web/assets/{sql-query-editor-6Ee_Zn5j.js → sql-query-editor-Bg3lOrmt.js} +1 -1
- package/dist/web/assets/sql-query-editor-Bg3lOrmt.js.br +0 -0
- package/dist/web/assets/sql-query-editor-Bg3lOrmt.js.gz +0 -0
- package/dist/web/assets/{sqlite-viewer-Cj0S_m9V.js → sqlite-viewer-DMKtDkI6.js} +1 -1
- package/dist/web/assets/sqlite-viewer-DMKtDkI6.js.br +0 -0
- package/dist/web/assets/sqlite-viewer-DMKtDkI6.js.gz +0 -0
- package/dist/web/assets/ssh-config-j5hsMvbs.js.br +0 -0
- package/dist/web/assets/ssh-config-j5hsMvbs.js.gz +0 -0
- package/dist/web/assets/stata-PkjbLwNy.js.br +0 -0
- package/dist/web/assets/stata-PkjbLwNy.js.gz +0 -0
- package/dist/web/assets/stylus-DWhCIBg0.js.br +0 -0
- package/dist/web/assets/stylus-DWhCIBg0.js.gz +0 -0
- package/dist/web/assets/surrealql-BJ6bKPXV.js.br +0 -0
- package/dist/web/assets/surrealql-BJ6bKPXV.js.gz +0 -0
- package/dist/web/assets/svelte-D4u1sGpe.js.br +0 -0
- package/dist/web/assets/svelte-D4u1sGpe.js.gz +0 -0
- package/dist/web/assets/swift-29fG5ztW.js.br +0 -0
- package/dist/web/assets/swift-29fG5ztW.js.gz +0 -0
- package/dist/web/assets/synthwave-84-DraIUmiw.js.br +0 -0
- package/dist/web/assets/synthwave-84-DraIUmiw.js.gz +0 -0
- package/dist/web/assets/{system-monitor-body-PQqXdK4a.js → system-monitor-body-Dst39LA7.js} +2 -2
- package/dist/web/assets/system-monitor-body-Dst39LA7.js.br +0 -0
- package/dist/web/assets/system-monitor-body-Dst39LA7.js.gz +0 -0
- package/dist/web/assets/{system-monitor-tab-BEjvgQuQ.js → system-monitor-tab-CEwME1_C.js} +1 -1
- package/dist/web/assets/{system-monitor-window-content-DZwvvN-M.js → system-monitor-window-content-DQRBjn9z.js} +1 -1
- package/dist/web/assets/system-verilog-DqcJAWq_.js.br +0 -0
- package/dist/web/assets/system-verilog-DqcJAWq_.js.gz +0 -0
- package/dist/web/assets/systemd-BUPJrx1D.js.br +0 -0
- package/dist/web/assets/systemd-BUPJrx1D.js.gz +0 -0
- package/dist/web/assets/{tab-host-window-content-CnV4Z4Yt.js → tab-host-window-content-Dlunzrfh.js} +1 -1
- package/dist/web/assets/tab-host-window-content-Dlunzrfh.js.br +0 -0
- package/dist/web/assets/tab-host-window-content-Dlunzrfh.js.gz +0 -0
- package/dist/web/assets/talonscript-BGYbnAKh.js.br +0 -0
- package/dist/web/assets/talonscript-BGYbnAKh.js.gz +0 -0
- package/dist/web/assets/tasl-CwbSJqng.js.br +0 -0
- package/dist/web/assets/tasl-CwbSJqng.js.gz +0 -0
- package/dist/web/assets/tcl-Ba9376wa.js.br +0 -0
- package/dist/web/assets/tcl-Ba9376wa.js.gz +0 -0
- package/dist/web/assets/{team-member-sheet-8EVCTM-X.js → team-member-sheet-CPZGU9j5.js} +2 -2
- package/dist/web/assets/team-member-sheet-CPZGU9j5.js.br +0 -0
- package/dist/web/assets/team-member-sheet-CPZGU9j5.js.gz +0 -0
- package/dist/web/assets/{team-member-window-content-Bc0ydBAn.js → team-member-window-content-CwI9JD_H.js} +1 -1
- package/dist/web/assets/team-member-window-content-CwI9JD_H.js.br +0 -0
- package/dist/web/assets/team-member-window-content-CwI9JD_H.js.gz +0 -0
- package/dist/web/assets/templ-vtFoIgGG.js.br +0 -0
- package/dist/web/assets/templ-vtFoIgGG.js.gz +0 -0
- package/dist/web/assets/{terminal-tab-0b63-txz.js → terminal-tab-BcQXleSa.js} +1 -1
- package/dist/web/assets/terminal-tab-BcQXleSa.js.br +0 -0
- package/dist/web/assets/terminal-tab-BcQXleSa.js.gz +0 -0
- package/dist/web/assets/terraform-ChSasWu8.js.br +0 -0
- package/dist/web/assets/terraform-ChSasWu8.js.gz +0 -0
- package/dist/web/assets/tex-o6JLe3Qo.js.br +0 -0
- package/dist/web/assets/tex-o6JLe3Qo.js.gz +0 -0
- package/dist/web/assets/tokyo-night-Bbw1Yguv.js.br +0 -0
- package/dist/web/assets/tokyo-night-Bbw1Yguv.js.gz +0 -0
- package/dist/web/assets/toml-CYb7zi5B.js.br +0 -0
- package/dist/web/assets/toml-CYb7zi5B.js.gz +0 -0
- package/dist/web/assets/{tool-cards-C09WknHl.js → tool-cards-DsQdMorI.js} +2 -2
- package/dist/web/assets/tool-cards-DsQdMorI.js.br +0 -0
- package/dist/web/assets/tool-cards-DsQdMorI.js.gz +0 -0
- package/dist/web/assets/ts-tags-DkmPnhIx.js.br +0 -0
- package/dist/web/assets/ts-tags-DkmPnhIx.js.gz +0 -0
- package/dist/web/assets/tsx-BUq9xm2T.js.br +0 -0
- package/dist/web/assets/tsx-BUq9xm2T.js.gz +0 -0
- package/dist/web/assets/turtle-DIoQTATC.js.br +0 -0
- package/dist/web/assets/turtle-DIoQTATC.js.gz +0 -0
- package/dist/web/assets/twig-I9ja_Rk_.js.br +0 -0
- package/dist/web/assets/twig-I9ja_Rk_.js.gz +0 -0
- package/dist/web/assets/typescript-CP3RLBKz.js.br +0 -0
- package/dist/web/assets/typescript-CP3RLBKz.js.gz +0 -0
- package/dist/web/assets/typespec-Dpr1bC2k.js.br +0 -0
- package/dist/web/assets/typespec-Dpr1bC2k.js.gz +0 -0
- package/dist/web/assets/typst-D4WMCDMn.js.br +0 -0
- package/dist/web/assets/typst-D4WMCDMn.js.gz +0 -0
- package/dist/web/assets/{use-inline-blame-BuAc9IXE.js → use-inline-blame--fS-pzzX.js} +1 -1
- package/dist/web/assets/use-inline-blame--fS-pzzX.js.br +0 -0
- package/dist/web/assets/use-inline-blame--fS-pzzX.js.gz +0 -0
- package/dist/web/assets/{use-lsp-DAtq1G0M.js → use-lsp-DK26Eter.js} +1 -1
- package/dist/web/assets/use-lsp-DK26Eter.js.br +0 -0
- package/dist/web/assets/use-lsp-DK26Eter.js.gz +0 -0
- package/dist/web/assets/{use-monaco-theme-Ch_znquJ.js → use-monaco-theme-BVatH9yZ.js} +1 -1
- package/dist/web/assets/{use-websocket-DGEOad8p.js → use-websocket-C1mloX0R.js} +1 -1
- package/dist/web/assets/utils-btZ8C8-R.js.br +0 -0
- package/dist/web/assets/utils-btZ8C8-R.js.gz +0 -0
- package/dist/web/assets/v-B1wY-VFU.js.br +0 -0
- package/dist/web/assets/v-B1wY-VFU.js.gz +0 -0
- package/dist/web/assets/vala-BKqhrirP.js.br +0 -0
- package/dist/web/assets/vala-BKqhrirP.js.gz +0 -0
- package/dist/web/assets/vb-S9PHCa7-.js.br +0 -0
- package/dist/web/assets/vb-S9PHCa7-.js.gz +0 -0
- package/dist/web/assets/vendor-markdown-QKPNiWEd.js.br +0 -0
- package/dist/web/assets/vendor-markdown-QKPNiWEd.js.gz +0 -0
- package/dist/web/assets/vendor-mermaid-eg2XWIjK.js.br +0 -0
- package/dist/web/assets/vendor-mermaid-eg2XWIjK.js.gz +0 -0
- package/dist/web/assets/vendor-ui-BHh12_0v.js.br +0 -0
- package/dist/web/assets/vendor-ui-BHh12_0v.js.gz +0 -0
- package/dist/web/assets/vendor-xterm-BHKF_Nsf.js.br +0 -0
- package/dist/web/assets/vendor-xterm-BHKF_Nsf.js.gz +0 -0
- package/dist/web/assets/vendor-xterm-DkTCHfhq.css.br +0 -0
- package/dist/web/assets/vendor-xterm-DkTCHfhq.css.gz +0 -0
- package/dist/web/assets/verilog-CrztYl3V.js.br +0 -0
- package/dist/web/assets/verilog-CrztYl3V.js.gz +0 -0
- package/dist/web/assets/vesper-C5KfcyFv.js.br +0 -0
- package/dist/web/assets/vesper-C5KfcyFv.js.gz +0 -0
- package/dist/web/assets/vhdl-D0qMeIJu.js.br +0 -0
- package/dist/web/assets/vhdl-D0qMeIJu.js.gz +0 -0
- package/dist/web/assets/{video-preview-DH3RtwVT.js → video-preview-C48Go7JZ.js} +1 -1
- package/dist/web/assets/video-preview-C48Go7JZ.js.br +0 -0
- package/dist/web/assets/video-preview-C48Go7JZ.js.gz +0 -0
- package/dist/web/assets/viml-Dsv9mRPK.js.br +0 -0
- package/dist/web/assets/viml-Dsv9mRPK.js.gz +0 -0
- package/dist/web/assets/vitesse-black-rJvNN5GN.js.br +0 -0
- package/dist/web/assets/vitesse-black-rJvNN5GN.js.gz +0 -0
- package/dist/web/assets/vitesse-dark-CYp0WWjf.js.br +0 -0
- package/dist/web/assets/vitesse-dark-CYp0WWjf.js.gz +0 -0
- package/dist/web/assets/vitesse-light-BczSAvzE.js.br +0 -0
- package/dist/web/assets/vitesse-light-BczSAvzE.js.gz +0 -0
- package/dist/web/assets/vue-DJf-APPD.js.br +0 -0
- package/dist/web/assets/vue-DJf-APPD.js.gz +0 -0
- package/dist/web/assets/vue-html-DUJ89Ycn.js.br +0 -0
- package/dist/web/assets/vue-html-DUJ89Ycn.js.gz +0 -0
- package/dist/web/assets/vue-vine-CWUFwuRE.js.br +0 -0
- package/dist/web/assets/vue-vine-CWUFwuRE.js.gz +0 -0
- package/dist/web/assets/vyper-DM7bKz7E.js.br +0 -0
- package/dist/web/assets/vyper-DM7bKz7E.js.gz +0 -0
- package/dist/web/assets/wasm-BXCHhbrz.js.br +0 -0
- package/dist/web/assets/wasm-BXCHhbrz.js.gz +0 -0
- package/dist/web/assets/wasm-CAJoqhGc.js.br +0 -0
- package/dist/web/assets/wasm-CAJoqhGc.js.gz +0 -0
- package/dist/web/assets/wenyan-NQ8fdbEq.js.br +0 -0
- package/dist/web/assets/wenyan-NQ8fdbEq.js.gz +0 -0
- package/dist/web/assets/wgsl-C88C7vmC.js.br +0 -0
- package/dist/web/assets/wgsl-C88C7vmC.js.gz +0 -0
- package/dist/web/assets/wikitext-D92r7uX8.js.br +0 -0
- package/dist/web/assets/wikitext-D92r7uX8.js.gz +0 -0
- package/dist/web/assets/window-store-B4cbZ5rr.js.br +0 -0
- package/dist/web/assets/window-store-B4cbZ5rr.js.gz +0 -0
- package/dist/web/assets/wit-DNvTfQjW.js.br +0 -0
- package/dist/web/assets/wit-DNvTfQjW.js.gz +0 -0
- package/dist/web/assets/wolfram-CNS5lCGj.js.br +0 -0
- package/dist/web/assets/wolfram-CNS5lCGj.js.gz +0 -0
- package/dist/web/assets/xml-DshhaDKq.js.br +0 -0
- package/dist/web/assets/xml-DshhaDKq.js.gz +0 -0
- package/dist/web/assets/xsl-BlRNlmF7.js.br +0 -0
- package/dist/web/assets/xsl-BlRNlmF7.js.gz +0 -0
- package/dist/web/assets/yaml-seUOGdyI.js.br +0 -0
- package/dist/web/assets/yaml-seUOGdyI.js.gz +0 -0
- package/dist/web/assets/zenscript-B_rGi-H_.js.br +0 -0
- package/dist/web/assets/zenscript-B_rGi-H_.js.gz +0 -0
- package/dist/web/assets/zig-BRi9UYQa.js.br +0 -0
- package/dist/web/assets/zig-BRi9UYQa.js.gz +0 -0
- package/dist/web/index.html +2 -2
- package/dist/web/index.html.br +0 -0
- package/dist/web/index.html.gz +0 -0
- package/dist/web/sw.js +1 -1
- package/dist/web/sw.js.br +0 -0
- package/dist/web/sw.js.gz +0 -0
- package/package.json +1 -1
- package/scripts/check-ppm-dir-usage.sh +0 -0
- package/scripts/install.sh +0 -0
- package/scripts/release.sh +0 -0
- package/src/providers/codex-app-server/codex-auth-failure.ts +51 -0
- package/src/providers/codex-app-server/codex-event-mapper.ts +8 -0
- package/src/providers/codex-app-server/codex-provider.ts +97 -19
- package/src/providers/codex-app-server/codex-usage-source.ts +14 -1
- package/src/server/routes/codex-accounts.ts +18 -6
- package/src/services/codex-account-auth-state.ts +58 -0
- package/src/services/codex-account-login.ts +42 -9
- package/src/services/codex-account.service.ts +42 -7
- package/src/services/proxy-agent-anthropic-bridge.ts +2 -2
- package/src/services/proxy-agent-bridge.ts +2 -2
- package/src/services/proxy-agent-turn.ts +80 -20
- package/src/services/proxy-image-bridge.ts +3 -3
- package/src/services/proxy.service.ts +1 -1
- package/src/web/components/chat/codex-usage-panel.tsx +13 -1
- package/src/web/components/chat/usage-badge.tsx +14 -0
- package/src/web/components/settings/accounts/account-add-dialog.tsx +10 -3
- package/src/web/components/settings/accounts/account-card.tsx +15 -4
- package/src/web/components/settings/accounts/account-hint.tsx +19 -2
- package/src/web/components/settings/accounts/claude-accounts-section.tsx +10 -2
- package/src/web/components/settings/accounts/codex-accounts-section.tsx +18 -2
- package/src/web/components/settings/accounts/codex-add-account-dialog.tsx +50 -33
- package/src/web/components/settings/accounts/codex-sign-in-again-dialog.tsx +47 -0
- package/src/web/components/settings/accounts/use-codex-accounts.ts +18 -4
- package/dist/web/assets/accounts-settings-section-BR7t8CEk.js +0 -1
- package/dist/web/assets/chat-tab-MdU9Jr3F.js +0 -15
- package/dist/web/assets/codex-daily-guard-B21M4m-P.js +0 -1
- package/dist/web/assets/index-CzYrKDUF.css +0 -1
|
@@ -26,6 +26,10 @@ import {
|
|
|
26
26
|
import { dailyGuardMessage, dailyGuardState } from "../../shared/codex-daily-guard.ts";
|
|
27
27
|
import { isCodexAccountUsageLimited, markCodexAccountUsageLimited } from "../../services/codex-account-cooldown.ts";
|
|
28
28
|
import { isCodexUsageLimit, codexErrorMessage, parseCodexUsageLimitReset } from "./codex-usage-limit.ts";
|
|
29
|
+
import { isCodexAuthFailure, codexErrorText, codexSignedOutMessage } from "./codex-auth-failure.ts";
|
|
30
|
+
import {
|
|
31
|
+
isCodexAccountAuthFailed, markCodexAccountAuthFailed, clearCodexAccountAuthFailure,
|
|
32
|
+
} from "../../services/codex-account-auth-state.ts";
|
|
29
33
|
import { killProcessTree } from "../../services/windows-process-tree.ts";
|
|
30
34
|
import { homedir } from "node:os";
|
|
31
35
|
import { join } from "node:path";
|
|
@@ -181,8 +185,16 @@ interface LiveSession {
|
|
|
181
185
|
/** The turn currently in flight, kept so a rotation can send it again on the new
|
|
182
186
|
* account. Cleared when the turn ends — there is then nothing to replay. */
|
|
183
187
|
lastTurnInput?: { message: string; opts?: SendMessageOpts };
|
|
188
|
+
/** The running turn has already been reported as failed (its account is signed out) and
|
|
189
|
+
* interrupted. Codex keeps narrating it — more retry notices, a final error, then
|
|
190
|
+
* `turn/completed` — none of which may reach the caller a second time. Cleared by that
|
|
191
|
+
* `turn/completed`, which is also when the queue may move on. */
|
|
192
|
+
discardingTurn?: boolean;
|
|
184
193
|
}
|
|
185
194
|
|
|
195
|
+
/** Why a turn is being moved to another account. */
|
|
196
|
+
type RotationKind = "usage" | "auth";
|
|
197
|
+
|
|
186
198
|
/** A follow-up held back because a turn was already running. */
|
|
187
199
|
interface QueuedTurn {
|
|
188
200
|
message: string;
|
|
@@ -516,7 +528,15 @@ export class CodexAppServerProvider implements AIProvider {
|
|
|
516
528
|
// A quota refusal can come back as the rejection of the request itself rather than
|
|
517
529
|
// as an `error` notification, and it is the same situation either way — move the
|
|
518
530
|
// turn to an account that still has room instead of showing the refusal.
|
|
519
|
-
if (isCodexUsageLimit(reason) && this.beginRotation(live, reason)) return;
|
|
531
|
+
if (isCodexUsageLimit(reason) && this.beginRotation(live, reason, "usage")) return;
|
|
532
|
+
if (isCodexAuthFailure(reason)) {
|
|
533
|
+
this.markSessionAccountSignedOut(live, reason);
|
|
534
|
+
if (this.beginRotation(live, reason, "auth")) return;
|
|
535
|
+
live.channel.push({ type: "error", message: codexSignedOutMessage(this.sessionAccountLabel(live)) });
|
|
536
|
+
live.channel.push({ type: "done", sessionId: live.threadId ?? "", resultSubtype: "error_during_execution" });
|
|
537
|
+
this.endTurn(live);
|
|
538
|
+
return;
|
|
539
|
+
}
|
|
520
540
|
if (!live.client.isClosed) live.channel.push({ type: "error", message: redactTruncate(reason, 256) });
|
|
521
541
|
// No turn is running, so nothing will report `turn/completed` — release the
|
|
522
542
|
// queue here or every later follow-up waits on a turn that never existed.
|
|
@@ -556,6 +576,7 @@ export class CodexAppServerProvider implements AIProvider {
|
|
|
556
576
|
live.turnInFlight = false;
|
|
557
577
|
live.activeTurnId = null;
|
|
558
578
|
live.interruptRequested = false;
|
|
579
|
+
live.discardingTurn = false;
|
|
559
580
|
live.lastTurnInput = undefined;
|
|
560
581
|
const next = live.pendingTurns.shift();
|
|
561
582
|
if (next) void this.startTurn(live, next.message, next.opts);
|
|
@@ -575,29 +596,64 @@ export class CodexAppServerProvider implements AIProvider {
|
|
|
575
596
|
* user untouched. That is the honest outcome: an error saying the quota is spent is worth
|
|
576
597
|
* more than a silent retry on the account that just said so.
|
|
577
598
|
*/
|
|
578
|
-
private beginRotation(live: LiveSession, reason: string): boolean {
|
|
599
|
+
private beginRotation(live: LiveSession, reason: string, kind: RotationKind): boolean {
|
|
579
600
|
const threadId = live.threadId;
|
|
580
601
|
if (!threadId || live.rotating) return false;
|
|
581
602
|
const currentId = getSessionCodexAccount(threadId);
|
|
582
603
|
const candidates = listCodexAccounts().filter(
|
|
583
|
-
(a) => a.status !== "disabled" && a.id !== currentId
|
|
604
|
+
(a) => a.status !== "disabled" && a.id !== currentId
|
|
605
|
+
&& !isCodexAccountUsageLimited(a.id) && !isCodexAccountAuthFailed(a.id),
|
|
584
606
|
);
|
|
585
607
|
if (candidates.length === 0) return false;
|
|
586
608
|
live.rotating = true;
|
|
587
|
-
void this.rotateAccount(live, threadId, currentId, reason);
|
|
609
|
+
void this.rotateAccount(live, threadId, currentId, reason, kind);
|
|
588
610
|
return true;
|
|
589
611
|
}
|
|
590
612
|
|
|
591
|
-
/**
|
|
613
|
+
/** Mark the account serving this session as signed out, if it is a managed one. */
|
|
614
|
+
private markSessionAccountSignedOut(live: LiveSession, reason: string): void {
|
|
615
|
+
const accountId = live.threadId ? getSessionCodexAccount(live.threadId) : null;
|
|
616
|
+
if (accountId) markCodexAccountAuthFailed(accountId, redactTruncate(reason, 256));
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
private sessionAccountLabel(live: LiveSession): string | null {
|
|
620
|
+
const accountId = live.threadId ? getSessionCodexAccount(live.threadId) : null;
|
|
621
|
+
return accountId ? getCodexAccount(accountId)?.label ?? null : null;
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
/**
|
|
625
|
+
* The running turn's account turned out to be signed out.
|
|
626
|
+
*
|
|
627
|
+
* Recognised on codex's FIRST retry notice rather than its final error: the notice already
|
|
628
|
+
* names the 401, and waiting out the rest of the loop is ~24s of a subprocess and a request
|
|
629
|
+
* held open for an answer that cannot come. Moves the turn to another account when one can
|
|
630
|
+
* take it; otherwise reports it and interrupts the turn, discarding what codex still says
|
|
631
|
+
* about it.
|
|
632
|
+
*/
|
|
633
|
+
private handleAuthFailure(live: LiveSession, reason: string): void {
|
|
634
|
+
this.markSessionAccountSignedOut(live, reason);
|
|
635
|
+
if (this.beginRotation(live, reason, "auth")) return;
|
|
636
|
+
live.discardingTurn = true;
|
|
637
|
+
this.interruptActiveTurn(live);
|
|
638
|
+
live.channel.push({ type: "error", message: codexSignedOutMessage(this.sessionAccountLabel(live)) });
|
|
639
|
+
live.channel.push({ type: "done", sessionId: live.threadId ?? "", resultSubtype: "error_during_execution" });
|
|
640
|
+
}
|
|
641
|
+
|
|
642
|
+
/** Bench the refused account, move the session onto a fresh one, and send the turn again. */
|
|
592
643
|
private async rotateAccount(
|
|
593
644
|
live: LiveSession,
|
|
594
645
|
threadId: string,
|
|
595
646
|
currentId: string | null,
|
|
596
647
|
reason: string,
|
|
648
|
+
kind: RotationKind,
|
|
597
649
|
): Promise<void> {
|
|
598
650
|
const pending = live.lastTurnInput;
|
|
599
|
-
const reset = parseCodexUsageLimitReset(reason);
|
|
600
|
-
|
|
651
|
+
const reset = kind === "usage" ? parseCodexUsageLimitReset(reason) : null;
|
|
652
|
+
// A signed-out account was already marked by the caller; only a quota refusal parks here.
|
|
653
|
+
if (currentId && kind === "usage") markCodexAccountUsageLimited(currentId, reset?.atMs);
|
|
654
|
+
const giveUp = (): void => this.abandonRotation(live, kind === "auth"
|
|
655
|
+
? codexSignedOutMessage(currentId ? getCodexAccount(currentId)?.label : null)
|
|
656
|
+
: this.usageLimitMessage(reason, reset?.text));
|
|
601
657
|
|
|
602
658
|
let next: CodexAccount | null = null;
|
|
603
659
|
try {
|
|
@@ -612,12 +668,12 @@ export class CodexAppServerProvider implements AIProvider {
|
|
|
612
668
|
next = selectCodexAccount(currentId ? { exclude: [currentId] } : undefined);
|
|
613
669
|
}
|
|
614
670
|
|
|
615
|
-
if (!next) {
|
|
671
|
+
if (!next) { giveUp(); return; }
|
|
616
672
|
|
|
617
|
-
console.warn(`[codex] session=${threadId} usage limit — switching to ${next.id} (${next.label})`);
|
|
673
|
+
console.warn(`[codex] session=${threadId} ${kind === "auth" ? "account signed out" : "usage limit"} — switching to ${next.id} (${next.label})`);
|
|
618
674
|
live.channel.push({
|
|
619
675
|
type: "account_retry",
|
|
620
|
-
reason: "Usage limit reached — switching account",
|
|
676
|
+
reason: kind === "auth" ? "Account signed out — switching account" : "Usage limit reached — switching account",
|
|
621
677
|
accountId: next.id,
|
|
622
678
|
accountLabel: next.label,
|
|
623
679
|
});
|
|
@@ -626,7 +682,7 @@ export class CodexAppServerProvider implements AIProvider {
|
|
|
626
682
|
await this.respawnOn(live, threadId, next);
|
|
627
683
|
} catch (e) {
|
|
628
684
|
console.error(`[codex] session=${threadId} rotation to ${next.id} failed: ${redactTruncate((e as Error)?.message, 200)}`);
|
|
629
|
-
|
|
685
|
+
giveUp();
|
|
630
686
|
return;
|
|
631
687
|
}
|
|
632
688
|
|
|
@@ -639,14 +695,15 @@ export class CodexAppServerProvider implements AIProvider {
|
|
|
639
695
|
else this.endTurn(live);
|
|
640
696
|
}
|
|
641
697
|
|
|
698
|
+
private usageLimitMessage(reason: string, resetText?: string): string {
|
|
699
|
+
const suffix = resetText ? ` Try again ${resetText}.` : "";
|
|
700
|
+
return `${redactTruncate(reason, 512)}${suffix} Add another account in Settings → Accounts, or wait for the reset.`;
|
|
701
|
+
}
|
|
702
|
+
|
|
642
703
|
/** No account could take the turn — report the refusal and close the turn out. */
|
|
643
|
-
private abandonRotation(live: LiveSession,
|
|
704
|
+
private abandonRotation(live: LiveSession, message: string): void {
|
|
644
705
|
live.rotating = false;
|
|
645
|
-
|
|
646
|
-
live.channel.push({
|
|
647
|
-
type: "error",
|
|
648
|
-
message: `${redactTruncate(reason, 512)}${suffix} Add another account in Settings → Accounts, or wait for the reset.`,
|
|
649
|
-
});
|
|
706
|
+
live.channel.push({ type: "error", message });
|
|
650
707
|
live.channel.push({ type: "done", sessionId: live.threadId ?? "", resultSubtype: "error_during_execution" });
|
|
651
708
|
this.endTurn(live);
|
|
652
709
|
}
|
|
@@ -825,14 +882,35 @@ export class CodexAppServerProvider implements AIProvider {
|
|
|
825
882
|
private handleNotification(live: LiveSession, notif: JsonRpcNotification): void {
|
|
826
883
|
// A quota refusal is an ordinary `error` notification, so it has to be recognised
|
|
827
884
|
// before the mapper turns it into a plain error card in front of the user.
|
|
828
|
-
if (notif.method === "error" && !live.rotating) {
|
|
885
|
+
if (notif.method === "error" && !live.rotating && !live.discardingTurn) {
|
|
886
|
+
// Retry notices count too: the headline says only "Reconnecting... N/5", but their
|
|
887
|
+
// details name the 401, and waiting for the final error costs the whole retry loop.
|
|
888
|
+
const authText = codexErrorText(notif.params);
|
|
889
|
+
if (isCodexAuthFailure(authText)) { this.handleAuthFailure(live, authText); return; }
|
|
829
890
|
const reason = codexErrorMessage(notif.params);
|
|
830
|
-
if (isCodexUsageLimit(reason) && this.beginRotation(live, reason)) return;
|
|
891
|
+
if (isCodexUsageLimit(reason) && this.beginRotation(live, reason, "usage")) return;
|
|
831
892
|
}
|
|
832
893
|
// Mid-rotation the subprocess behind this session is being replaced. Anything it still
|
|
833
894
|
// emits describes the turn that was refused — including its `turn/completed`, which
|
|
834
895
|
// would close the turn the caller is about to be given a second time.
|
|
835
896
|
if (live.rotating) return;
|
|
897
|
+
// A turn already reported as failed: swallow the rest of it, and let the queue move on
|
|
898
|
+
// only once codex confirms it is over.
|
|
899
|
+
if (live.discardingTurn) {
|
|
900
|
+
if (notif.method === "turn/completed") {
|
|
901
|
+
live.discardingTurn = false;
|
|
902
|
+
live.currentAssistant = "";
|
|
903
|
+
live.currentEvents = [];
|
|
904
|
+
this.endTurn(live);
|
|
905
|
+
}
|
|
906
|
+
return;
|
|
907
|
+
}
|
|
908
|
+
if (notif.method === "turn/completed"
|
|
909
|
+
&& (notif.params as { turn?: { status?: string } })?.turn?.status === "completed" && live.threadId) {
|
|
910
|
+
// An answered turn is proof the login works, whatever was observed before.
|
|
911
|
+
const accountId = getSessionCodexAccount(live.threadId);
|
|
912
|
+
if (accountId) clearCodexAccountAuthFailure(accountId);
|
|
913
|
+
}
|
|
836
914
|
if (notif.method === "item/agentMessage/delta") {
|
|
837
915
|
const d = (notif.params as { delta?: string })?.delta;
|
|
838
916
|
if (typeof d === "string") live.currentAssistant += d;
|
|
@@ -3,6 +3,8 @@ import type { ProviderUsageSource } from "../../services/provider-usage/usage-so
|
|
|
3
3
|
import { AMBIENT_ACCOUNT_KEY } from "../../services/provider-usage/usage-source.ts";
|
|
4
4
|
import { listCodexAccounts, getCodexAccount } from "../../services/codex-account.service.ts";
|
|
5
5
|
import { fetchCodexUsageLive } from "./codex-usage-fetch.ts";
|
|
6
|
+
import { isCodexAuthFailure } from "./codex-auth-failure.ts";
|
|
7
|
+
import { markCodexAccountAuthFailed, clearCodexAccountAuthFailure } from "../../services/codex-account-auth-state.ts";
|
|
6
8
|
|
|
7
9
|
/**
|
|
8
10
|
* Codex's plug into the shared usage layer.
|
|
@@ -29,7 +31,18 @@ export const codexUsageSource: ProviderUsageSource = {
|
|
|
29
31
|
// object would be persisted as a real reading for an account that is gone.
|
|
30
32
|
if (!account) throw new Error(`codex account ${accountId} no longer exists`);
|
|
31
33
|
|
|
32
|
-
|
|
34
|
+
let usage: UsageInfo;
|
|
35
|
+
try {
|
|
36
|
+
usage = await fetchCodexUsageLive(account.home);
|
|
37
|
+
} catch (e) {
|
|
38
|
+
// The sweep is the one thing that reads every account on a timer, so it is what keeps
|
|
39
|
+
// a signed-out account benched between turns — and what notices it first, before any
|
|
40
|
+
// turn is spent on it.
|
|
41
|
+
const message = (e as Error)?.message ?? String(e);
|
|
42
|
+
if (isCodexAuthFailure(message)) markCodexAccountAuthFailed(account.id, message.slice(0, 256));
|
|
43
|
+
throw e;
|
|
44
|
+
}
|
|
45
|
+
clearCodexAccountAuthFailure(account.id);
|
|
33
46
|
// The rate-limit payload carries the plan name, which the parser puts in
|
|
34
47
|
// activeAccountLabel; the account's own label is the truthful one.
|
|
35
48
|
return { ...usage, activeAccountId: account.id, activeAccountLabel: account.label };
|
|
@@ -3,11 +3,20 @@ import { ok, err } from "../../types/api.ts";
|
|
|
3
3
|
import { listCodexAccounts, removeCodexAccount, getAllCodexUsages, getCodexStrategy, setCodexStrategy, selectCodexAccount, setCodexAccountStatus, setCodexDailyGuard, codexUsageLevel, type CodexStrategy } from "../../services/codex-account.service.ts";
|
|
4
4
|
import { addApiKeyAccount, startDeviceLogin, getDeviceLoginStatus, cancelDeviceLogin, startBrowserLogin, submitBrowserCallback, getBrowserLoginStatus, cancelBrowserLogin } from "../../services/codex-account-login.ts";
|
|
5
5
|
import { exportCodexEncrypted, importCodexEncrypted } from "../../services/codex-account-portability.ts";
|
|
6
|
+
import { isCodexAccountAuthFailed } from "../../services/codex-account-auth-state.ts";
|
|
6
7
|
|
|
7
8
|
/** Codex multi-account management. Mounted under /api/codex-accounts (auth-guarded). */
|
|
8
9
|
export const codexAccountsRoutes = new Hono();
|
|
9
10
|
|
|
10
|
-
|
|
11
|
+
/**
|
|
12
|
+
* `signedOut` is the server's live observation (a revoked/expired login seen on a turn or a
|
|
13
|
+
* quota read), not a stored field. The usage endpoint keeps serving the last good reading
|
|
14
|
+
* for such an account, so without it the card looked healthy while every turn failed.
|
|
15
|
+
*/
|
|
16
|
+
codexAccountsRoutes.get("/", (c) => c.json(ok({
|
|
17
|
+
accounts: listCodexAccounts().map((a) => ({ ...a, signedOut: isCodexAccountAuthFailed(a.id) })),
|
|
18
|
+
strategy: getCodexStrategy(),
|
|
19
|
+
})));
|
|
11
20
|
|
|
12
21
|
/** Per-account quota map { [accountId]: UsageInfo }. */
|
|
13
22
|
codexAccountsRoutes.get("/usage", async (c) => c.json(ok(await getAllCodexUsages())));
|
|
@@ -73,10 +82,12 @@ codexAccountsRoutes.post("/api-key", async (c) => {
|
|
|
73
82
|
catch (e) { return c.json(err((e as Error).message), 400); }
|
|
74
83
|
});
|
|
75
84
|
|
|
76
|
-
/** Begin ChatGPT device-code login → returns { id, userCode, verificationUrl }.
|
|
85
|
+
/** Begin ChatGPT device-code login → returns { id, userCode, verificationUrl }.
|
|
86
|
+
* With `accountId`, signs that existing account in again instead of adding one. */
|
|
77
87
|
codexAccountsRoutes.post("/device-login", async (c) => {
|
|
78
|
-
const body = await c.req.json<{ label?: string }>().catch(() => ({} as { label?: string }));
|
|
79
|
-
|
|
88
|
+
const body = await c.req.json<{ label?: string; accountId?: unknown }>().catch(() => ({} as { label?: string; accountId?: unknown }));
|
|
89
|
+
if (body.accountId !== undefined && typeof body.accountId !== "string") return c.json(err("accountId must be a string"), 400);
|
|
90
|
+
try { return c.json(ok(await startDeviceLogin(body.label, undefined, body.accountId))); }
|
|
80
91
|
catch (e) { return c.json(err((e as Error).message), 400); }
|
|
81
92
|
});
|
|
82
93
|
|
|
@@ -92,10 +103,11 @@ codexAccountsRoutes.delete("/device-login/:id", (c) => {
|
|
|
92
103
|
|
|
93
104
|
/** Browser OAuth uses the same durable polling as device-code login. */
|
|
94
105
|
codexAccountsRoutes.post("/browser-login", async (c) => {
|
|
95
|
-
const body = await c.req.json<{ label?: string }>().catch(() => ({} as { label?: string }));
|
|
106
|
+
const body = await c.req.json<{ label?: string; accountId?: unknown }>().catch(() => ({} as { label?: string; accountId?: unknown }));
|
|
96
107
|
if (body.label !== undefined && typeof body.label !== "string") return c.json(err("label must be a string"), 400);
|
|
108
|
+
if (body.accountId !== undefined && typeof body.accountId !== "string") return c.json(err("accountId must be a string"), 400);
|
|
97
109
|
c.header("Cache-Control", "no-store");
|
|
98
|
-
try { return c.json(ok(await startBrowserLogin(body.label))); }
|
|
110
|
+
try { return c.json(ok(await startBrowserLogin(body.label, undefined, body.accountId))); }
|
|
99
111
|
catch (e) { return c.json(err((e as Error).message), 400); }
|
|
100
112
|
});
|
|
101
113
|
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Codex accounts the server has seen refused for a revoked or expired login.
|
|
3
|
+
*
|
|
4
|
+
* Sibling of `codex-account-cooldown.ts`, and in memory for the same reason: this is the
|
|
5
|
+
* server's own observation, not the user's on/off switch, and writing it into the account
|
|
6
|
+
* row would show an account the user never touched as changed in Settings.
|
|
7
|
+
*
|
|
8
|
+
* Unlike a quota park this is a hard exclusion from selection. A spent quota still answers
|
|
9
|
+
* slowly; a signed-out account never answers at all, and every turn handed to it costs a
|
|
10
|
+
* subprocess and ~24s of codex retrying before it says so. That is what let a burst of
|
|
11
|
+
* proxy requests pin the server until the supervisor killed it.
|
|
12
|
+
*
|
|
13
|
+
* The mark lapses on its own so a misread error cannot bench an account forever, and the
|
|
14
|
+
* usage sweep (every 5 minutes) renews it for as long as the account really is signed out.
|
|
15
|
+
* A successful usage read, a completed turn or a fresh sign-in clears it at once.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
const MARK_TTL_MS = 15 * 60 * 1000;
|
|
19
|
+
|
|
20
|
+
interface AuthFailure {
|
|
21
|
+
until: number;
|
|
22
|
+
reason: string;
|
|
23
|
+
since: number;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const failures = new Map<string, AuthFailure>();
|
|
27
|
+
|
|
28
|
+
/** Record that this account's login was refused. */
|
|
29
|
+
export function markCodexAccountAuthFailed(accountId: string, reason: string): void {
|
|
30
|
+
const now = Date.now();
|
|
31
|
+
const prev = failures.get(accountId);
|
|
32
|
+
const fresh = !prev || prev.until <= now;
|
|
33
|
+
failures.set(accountId, { until: now + MARK_TTL_MS, reason, since: fresh ? now : prev.since });
|
|
34
|
+
if (fresh) console.warn(`[codex] account ${accountId} is signed out — skipping it until it signs in again`);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/** Whether the account is currently known to be signed out. Lapsed marks drop as read. */
|
|
38
|
+
export function isCodexAccountAuthFailed(accountId: string): boolean {
|
|
39
|
+
const f = failures.get(accountId);
|
|
40
|
+
if (!f) return false;
|
|
41
|
+
if (f.until <= Date.now()) { failures.delete(accountId); return false; }
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/** When the account was first seen signed out, or null if it is not. */
|
|
46
|
+
export function codexAccountAuthFailedSince(accountId: string): number | null {
|
|
47
|
+
return isCodexAccountAuthFailed(accountId) ? failures.get(accountId)!.since : null;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/** The account answered normally again — drop the mark. */
|
|
51
|
+
export function clearCodexAccountAuthFailure(accountId: string): void {
|
|
52
|
+
if (failures.delete(accountId)) console.log(`[codex] account ${accountId} is signed in again`);
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/** Test seam: forget every mark. */
|
|
56
|
+
export function _resetCodexAuthFailuresForTesting(): void {
|
|
57
|
+
failures.clear();
|
|
58
|
+
}
|
|
@@ -17,7 +17,9 @@ import { randomUUID } from "node:crypto";
|
|
|
17
17
|
import { mkdirSync, rmSync } from "node:fs";
|
|
18
18
|
import { buildCodexCallback, buildCodexSuccessCallback, checkCodexLoginPort, parseBrowserLogin, type BrowserLoginCallback } from "./codex-login-callback.ts";
|
|
19
19
|
import { CodexJsonRpcClient, CONTROL_REQUEST_TIMEOUT_MS } from "../providers/codex-app-server/codex-jsonrpc-client.ts";
|
|
20
|
-
import { codexAccountHome, createCodexAccount, type CodexAccount } from "./codex-account.service.ts";
|
|
20
|
+
import { codexAccountHome, createCodexAccount, getCodexAccount, updateCodexAccountMeta, type CodexAccount } from "./codex-account.service.ts";
|
|
21
|
+
import { clearCodexAccountAuthFailure } from "./codex-account-auth-state.ts";
|
|
22
|
+
import { refreshUsage } from "./provider-usage/usage-registry.ts";
|
|
21
23
|
|
|
22
24
|
const CLIENT_INFO = { name: "ppm", title: "PPM", version: "0.0.0" };
|
|
23
25
|
const CAPABILITIES = { experimentalApi: true, requestAttestation: false, optOutNotificationMethods: null };
|
|
@@ -78,6 +80,9 @@ interface ChatGptLogin {
|
|
|
78
80
|
browser?: BrowserLoginCallback;
|
|
79
81
|
callbackAbort?: AbortController;
|
|
80
82
|
client: LoginClient; home: string; label?: string;
|
|
83
|
+
/** Signing an existing account in again: the login runs in that account's own home and
|
|
84
|
+
* finalises by updating its row instead of creating one. */
|
|
85
|
+
reloginId?: string;
|
|
81
86
|
status: DeviceLoginStatus;
|
|
82
87
|
timer: ReturnType<typeof setTimeout>;
|
|
83
88
|
/** True from the completion notification until the account is written. The
|
|
@@ -116,7 +121,8 @@ function disposeLogin(id: string, rmHome: boolean): void {
|
|
|
116
121
|
clearTimeout(p.timer);
|
|
117
122
|
p.callbackAbort?.abort();
|
|
118
123
|
try { p.client.close(); } catch { /* ignore */ }
|
|
119
|
-
|
|
124
|
+
// A re-login borrows a live account's home; abandoning it must never delete that.
|
|
125
|
+
if (rmHome && !p.reloginId) { try { rmSync(p.home, { recursive: true, force: true }); } catch { /* ignore */ } }
|
|
120
126
|
}
|
|
121
127
|
|
|
122
128
|
/** Record the outcome and stop the app-server. First settle wins, so the close
|
|
@@ -131,7 +137,8 @@ function settle(id: string, status: Exclude<DeviceLoginStatus, { state: "pending
|
|
|
131
137
|
try { p.client.close(); } catch { /* ignore */ }
|
|
132
138
|
// A failure leaves no account owning the dir, so the half-built home goes now.
|
|
133
139
|
// A success must keep it: createCodexAccount adopted it as the account's home.
|
|
134
|
-
|
|
140
|
+
// A failed re-login leaves the account's home alone — it still belongs to the account.
|
|
141
|
+
if (status.state === "error" && !p.reloginId) { try { rmSync(p.home, { recursive: true, force: true }); } catch { /* ignore */ } }
|
|
135
142
|
p.timer = unref(setTimeout(() => { pendingLogins.delete(id); }, RESULT_GRACE_MS));
|
|
136
143
|
}
|
|
137
144
|
|
|
@@ -147,6 +154,21 @@ async function finalizeLogin(id: string, notif: CompletionNotification): Promise
|
|
|
147
154
|
const read = await p.client.request<AccountRead>("account/read", {}, CONTROL_REQUEST_TIMEOUT_MS);
|
|
148
155
|
if (!read?.account) throw new Error("login completed but account is empty");
|
|
149
156
|
if (p.status.state !== "pending") return;
|
|
157
|
+
if (p.reloginId) {
|
|
158
|
+
const existing = getCodexAccount(p.reloginId);
|
|
159
|
+
if (!existing) throw new Error("That account was removed while signing in. Add it again.");
|
|
160
|
+
updateCodexAccountMeta(existing.id, {
|
|
161
|
+
// The label is the user's name for this account ("Work"), not a copy of the email.
|
|
162
|
+
label: p.label || existing.label,
|
|
163
|
+
planType: read.account.planType ?? existing.planType ?? null,
|
|
164
|
+
});
|
|
165
|
+
// The fresh login is the proof: stop skipping the account and read its quota now,
|
|
166
|
+
// rather than showing the stale reading until the next five-minute sweep.
|
|
167
|
+
clearCodexAccountAuthFailure(existing.id);
|
|
168
|
+
void refreshUsage("codex", existing.id);
|
|
169
|
+
settle(id, { state: "done", account: getCodexAccount(existing.id)! });
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
150
172
|
const account = createCodexAccount({
|
|
151
173
|
id, label: p.label || read.account.email || "ChatGPT", type: "chatgpt",
|
|
152
174
|
planType: read.account.planType ?? null,
|
|
@@ -163,12 +185,19 @@ async function startChatGptLogin(
|
|
|
163
185
|
method: "device" | "browser",
|
|
164
186
|
label: string | undefined,
|
|
165
187
|
makeClient: () => LoginClient,
|
|
188
|
+
reloginId?: string,
|
|
166
189
|
): Promise<ChatGptLoginStart> {
|
|
167
190
|
if (method === "browser" && hasPendingBrowserLogin()) {
|
|
168
191
|
throw new Error("A browser login is already in progress. Finish or cancel it first.");
|
|
169
192
|
}
|
|
193
|
+
// Re-login signs the SAME account in again, in its own CODEX_HOME: the id, the sessions
|
|
194
|
+
// bound to it, its transcripts and its settings all stay. Removing and re-adding was the
|
|
195
|
+
// only way before, and it cost every one of those.
|
|
196
|
+
const target = reloginId ? getCodexAccount(reloginId) : null;
|
|
197
|
+
if (reloginId && !target) throw new Error("Account not found");
|
|
198
|
+
if (target && target.type !== "chatgpt") throw new Error("Only a ChatGPT sign-in can be renewed; replace an API key by adding it again.");
|
|
170
199
|
const id = randomUUID();
|
|
171
|
-
const home = codexAccountHome(id);
|
|
200
|
+
const home = target ? target.home : codexAccountHome(id);
|
|
172
201
|
mkdirSync(home, { recursive: true, mode: 0o700 });
|
|
173
202
|
const client = makeClient();
|
|
174
203
|
client.onNotification((n) => {
|
|
@@ -178,7 +207,10 @@ async function startChatGptLogin(
|
|
|
178
207
|
});
|
|
179
208
|
client.onClose(() => settle(id, { state: "error", error: "login process exited" }));
|
|
180
209
|
const timer = unref(setTimeout(() => settle(id, { state: "error", error: "timed out" }), method === "browser" ? BROWSER_LOGIN_TTL : DEVICE_LOGIN_TTL));
|
|
181
|
-
const pending: ChatGptLogin = {
|
|
210
|
+
const pending: ChatGptLogin = {
|
|
211
|
+
method, client, home, label, status: { state: "pending" }, timer, finalizing: false,
|
|
212
|
+
...(target ? { reloginId: target.id } : {}),
|
|
213
|
+
};
|
|
182
214
|
pendingLogins.set(id, pending);
|
|
183
215
|
try {
|
|
184
216
|
if (method === "browser") await checkCodexLoginPort();
|
|
@@ -195,13 +227,14 @@ async function startChatGptLogin(
|
|
|
195
227
|
}
|
|
196
228
|
}
|
|
197
229
|
|
|
198
|
-
|
|
199
|
-
|
|
230
|
+
/** `reloginId` signs that existing ChatGPT account in again instead of adding a new one. */
|
|
231
|
+
export async function startDeviceLogin(label?: string, makeClient: () => LoginClient = () => new CodexJsonRpcClient(), reloginId?: string) {
|
|
232
|
+
const { id, userCode, verificationUrl } = await startChatGptLogin("device", label, makeClient, reloginId);
|
|
200
233
|
return { id, userCode, verificationUrl };
|
|
201
234
|
}
|
|
202
235
|
|
|
203
|
-
export async function startBrowserLogin(label?: string, makeClient: () => LoginClient = () => new CodexJsonRpcClient()) {
|
|
204
|
-
const { id, authUrl } = await startChatGptLogin("browser", label, makeClient);
|
|
236
|
+
export async function startBrowserLogin(label?: string, makeClient: () => LoginClient = () => new CodexJsonRpcClient(), reloginId?: string) {
|
|
237
|
+
const { id, authUrl } = await startChatGptLogin("browser", label, makeClient, reloginId);
|
|
205
238
|
return { id, authUrl };
|
|
206
239
|
}
|
|
207
240
|
|
|
@@ -16,6 +16,8 @@ import { configService } from "./config.service.ts";
|
|
|
16
16
|
import { encrypt, decrypt } from "../lib/account-crypto.ts";
|
|
17
17
|
import { getOrFetchUsage } from "./provider-usage/usage-registry.ts";
|
|
18
18
|
import { isCodexAccountUsageLimited } from "./codex-account-cooldown.ts";
|
|
19
|
+
import { isCodexAccountAuthFailed } from "./codex-account-auth-state.ts";
|
|
20
|
+
import { codexSignedOutMessage } from "../providers/codex-app-server/codex-auth-failure.ts";
|
|
19
21
|
import { dailyGuardMessage, dailyGuardState } from "../shared/codex-daily-guard.ts";
|
|
20
22
|
import type { UsageInfo } from "../providers/provider.interface.ts";
|
|
21
23
|
|
|
@@ -149,6 +151,35 @@ export function setCodexDailyGuard(id: string, enabled: boolean): CodexAccount |
|
|
|
149
151
|
|
|
150
152
|
export class CodexDailyGuardError extends Error {}
|
|
151
153
|
|
|
154
|
+
/** Every managed account that could serve is signed out. */
|
|
155
|
+
export class CodexSignedOutError extends Error {}
|
|
156
|
+
|
|
157
|
+
/**
|
|
158
|
+
* Accounts that can be handed a turn at all: switched on, and not known to be signed out.
|
|
159
|
+
*
|
|
160
|
+
* Both exclusions are hard. Off is the user's say-so; signed out is an account that will
|
|
161
|
+
* refuse every turn after ~24s of codex retrying, so handing it back "because nothing else
|
|
162
|
+
* was left" buys a slow failure instead of a fast one.
|
|
163
|
+
*/
|
|
164
|
+
function servableAccounts(): CodexAccount[] {
|
|
165
|
+
return listCodexAccounts().filter((a) => a.status !== "disabled" && !isCodexAccountAuthFailed(a.id));
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Throw when accounts are enabled but every one of them is signed out.
|
|
170
|
+
*
|
|
171
|
+
* Without this the selector finds nothing, the caller falls back to the ambient ~/.codex
|
|
172
|
+
* login — usually absent or stale on a machine that manages accounts — and the turn fails
|
|
173
|
+
* with an error that names neither account.
|
|
174
|
+
*/
|
|
175
|
+
function assertSomeAccountSignedIn(): void {
|
|
176
|
+
const enabled = listCodexAccounts().filter((a) => a.status !== "disabled");
|
|
177
|
+
if (enabled.length === 0 || enabled.some((a) => !isCodexAccountAuthFailed(a.id))) return;
|
|
178
|
+
throw new CodexSignedOutError(enabled.length === 1
|
|
179
|
+
? codexSignedOutMessage(enabled[0]!.label)
|
|
180
|
+
: `Every Codex account is signed out (${enabled.map((a) => a.label).join(", ")}). Press "Sign in again" on their cards in Settings → Accounts → Codex.`);
|
|
181
|
+
}
|
|
182
|
+
|
|
152
183
|
/** Remove the account row and its CODEX_HOME dir. */
|
|
153
184
|
export function removeCodexAccount(id: string): void {
|
|
154
185
|
const acct = getCodexAccount(id);
|
|
@@ -242,7 +273,7 @@ export function selectCodexAccount(opts?: { strategy?: CodexStrategy; usageOf?:
|
|
|
242
273
|
// `exclude` is hard for the same reason: its only caller is the rotation away from an
|
|
243
274
|
// account that just refused the turn, and falling back to it would rotate in a circle.
|
|
244
275
|
const excluded = new Set(opts?.exclude ?? []);
|
|
245
|
-
const all =
|
|
276
|
+
const all = servableAccounts().filter((a) => !excluded.has(a.id));
|
|
246
277
|
if (all.length === 0) return null;
|
|
247
278
|
if (all.length === 1) return all[0]!;
|
|
248
279
|
const strategy = opts?.strategy ?? getCodexStrategy();
|
|
@@ -276,7 +307,7 @@ export function peekCodexAccount(): CodexAccount | null {
|
|
|
276
307
|
// Status and the quota park are the two things this can filter on without going async, so
|
|
277
308
|
// it does both. Usage lives behind a fetch and stays out of reach here; the consuming pick
|
|
278
309
|
// endpoint reads it instead.
|
|
279
|
-
const accts = withQuotaLeft(
|
|
310
|
+
const accts = withQuotaLeft(servableAccounts());
|
|
280
311
|
if (accts.length === 0) return null;
|
|
281
312
|
if (accts.length === 1) return accts[0]!;
|
|
282
313
|
return getCodexStrategy() === "fill-first" ? accts[0]! : null;
|
|
@@ -287,6 +318,11 @@ export async function resolveCodexAccountForSession(sessionId?: string): Promise
|
|
|
287
318
|
// Session-less callers (the model list) have nothing sticky to honour and fall
|
|
288
319
|
// straight through to the configured strategy.
|
|
289
320
|
const sticky = sessionId ? getSessionCodexAccount(sessionId) : null;
|
|
321
|
+
// A signed-out account lets go of its sessions too: it would refuse the turn after
|
|
322
|
+
// codex's full retry loop, and there is no quota reset to wait for.
|
|
323
|
+
assertSomeAccountSignedIn();
|
|
324
|
+
const keepable = (a: CodexAccount | null): a is CodexAccount =>
|
|
325
|
+
!!a && a.status !== "disabled" && !isCodexAccountUsageLimited(a.id) && !isCodexAccountAuthFailed(a.id);
|
|
290
326
|
// A binding is held for the prompt cache, not honoured unconditionally: an account the
|
|
291
327
|
// user has switched off has to let go of the sessions sitting on it, or turning it off
|
|
292
328
|
// would do nothing for exactly the conversations already using it. An account parked for
|
|
@@ -296,7 +332,7 @@ export async function resolveCodexAccountForSession(sessionId?: string): Promise
|
|
|
296
332
|
// account able to serve it cannot. Parked accounts count as unable for the same reason
|
|
297
333
|
// they are skipped below, so a pool of two where one is out of quota resolves without a
|
|
298
334
|
// network read at all.
|
|
299
|
-
const usable =
|
|
335
|
+
const usable = servableAccounts().filter((a) => !isCodexAccountUsageLimited(a.id));
|
|
300
336
|
const guarded = usable.filter((a) => a.dailyGuardEnabled);
|
|
301
337
|
if (guarded.length > 0) {
|
|
302
338
|
const usages = await getAllCodexUsages();
|
|
@@ -309,8 +345,7 @@ export async function resolveCodexAccountForSession(sessionId?: string): Promise
|
|
|
309
345
|
});
|
|
310
346
|
if (blocked.length > 0) {
|
|
311
347
|
const stickyAccount = sticky ? getCodexAccount(sticky) : null;
|
|
312
|
-
if (stickyAccount && !blocked.includes(stickyAccount.id)
|
|
313
|
-
&& stickyAccount.status !== "disabled" && !isCodexAccountUsageLimited(stickyAccount.id)) return stickyAccount;
|
|
348
|
+
if (keepable(stickyAccount) && !blocked.includes(stickyAccount.id)) return stickyAccount;
|
|
314
349
|
if (blocked.length === usable.length && sessionId) {
|
|
315
350
|
const account = getCodexAccount(blocked[0]!);
|
|
316
351
|
const usage = account ? usages[account.id] : undefined;
|
|
@@ -321,13 +356,13 @@ export async function resolveCodexAccountForSession(sessionId?: string): Promise
|
|
|
321
356
|
}
|
|
322
357
|
if (sticky) {
|
|
323
358
|
const a = getCodexAccount(sticky);
|
|
324
|
-
if (
|
|
359
|
+
if (keepable(a)) return a;
|
|
325
360
|
}
|
|
326
361
|
return selectCodexAccount({ usageOf: (id) => codexUsageLevel(usages[id]) });
|
|
327
362
|
}
|
|
328
363
|
if (sticky) {
|
|
329
364
|
const a = getCodexAccount(sticky);
|
|
330
|
-
if (
|
|
365
|
+
if (keepable(a)) return a;
|
|
331
366
|
}
|
|
332
367
|
if (usable.length <= 1) return selectCodexAccount();
|
|
333
368
|
// Usage is read for every strategy, not just lowest-usage: it is also what lets the
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* setting that base to `…/proxy/<provider>`.
|
|
8
8
|
*/
|
|
9
9
|
import {
|
|
10
|
-
startAgentTurn, usageOf, resolveProvider, proxyableProviderIds,
|
|
10
|
+
startAgentTurn, usageOf, resolveProvider, proxyableProviderIds, turnFailureResponse,
|
|
11
11
|
} from "./proxy-agent-turn.ts";
|
|
12
12
|
import {
|
|
13
13
|
buildPromptFromAnthropicMessages, hasUnsupportedAnthropicBlocks, messageResponse, anthropicError,
|
|
@@ -99,6 +99,6 @@ export async function forwardAgentMessages(
|
|
|
99
99
|
? await runStreaming(providerId, body)
|
|
100
100
|
: await runNonStreaming(providerId, body);
|
|
101
101
|
} catch (e) {
|
|
102
|
-
return
|
|
102
|
+
return turnFailureResponse(e, anthropicError);
|
|
103
103
|
}
|
|
104
104
|
}
|
|
@@ -15,7 +15,7 @@ import { mkdtempSync, writeFileSync, rmSync } from "node:fs";
|
|
|
15
15
|
import { tmpdir } from "node:os";
|
|
16
16
|
import { join } from "node:path";
|
|
17
17
|
import {
|
|
18
|
-
startAgentTurn, usageOf, resolveProvider, proxyableProviderIds,
|
|
18
|
+
startAgentTurn, usageOf, resolveProvider, proxyableProviderIds, turnFailureResponse,
|
|
19
19
|
} from "./proxy-agent-turn.ts";
|
|
20
20
|
import { decodeImagePayload } from "./proxy-image-bridge.ts";
|
|
21
21
|
import {
|
|
@@ -140,7 +140,7 @@ export async function forwardAgentChatCompletions(
|
|
|
140
140
|
? await runStreaming(providerId, body)
|
|
141
141
|
: await runNonStreaming(providerId, body);
|
|
142
142
|
} catch (e) {
|
|
143
|
-
return
|
|
143
|
+
return turnFailureResponse(e, openAiError);
|
|
144
144
|
}
|
|
145
145
|
}
|
|
146
146
|
|