@hienlh/ppm 0.22.9 → 0.22.11
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 +11 -0
- package/CLAUDE.md +3 -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 +11 -1
- package/dist/web/assets/accounts-settings-section-BDXYG6tT.js +1 -0
- package/dist/web/assets/{ai-resource-editor-CtvWAxMW.js → ai-resource-editor-C3rKcZKN.js} +1 -1
- package/dist/web/assets/ai-settings-section-ArqD8Nlg.js +1 -0
- package/dist/web/assets/ai-settings-section-DeWoAdLc.js +1 -0
- package/dist/web/assets/{appearance-settings-section-DRWpbQqj.js → appearance-settings-section-K5o_Di4V.js} +1 -1
- package/dist/web/assets/{branch-review-tab-B3BMVCdK.js → branch-review-tab-BNpYiUhC.js} +1 -1
- package/dist/web/assets/chat-tab-CC8KANoK.js +15 -0
- package/dist/web/assets/code-editor-Ccf0Egrc.js +7 -0
- package/dist/web/assets/{codex-daily-guard-DjLeZ_hE.js → codex-daily-guard-CKk2WFlV.js} +1 -1
- package/dist/web/assets/{conflict-editor-Dx8MnO6j.js → conflict-editor-BCKbdpXy.js} +1 -1
- package/dist/web/assets/{csv-preview-U-Fy9KPT.js → csv-preview-I3a2lGUx.js} +1 -1
- package/dist/web/assets/database-viewer-DCuBR-bZ.js +1 -0
- package/dist/web/assets/{diff-viewer-Bv2J64t8.js → diff-viewer-DGaBe_Ln.js} +1 -1
- package/dist/web/assets/{editor-language-service-C1J6iorq.js → editor-language-service-BaocEaLc.js} +1 -1
- package/dist/web/assets/explorer-body-2GYIYmUh.js +2 -0
- package/dist/web/assets/{explorer-window-content-CZIwX6cE.js → explorer-window-content-CYQSEX-g.js} +1 -1
- package/dist/web/assets/{extension-manager-section-DGSKz5iJ.js → extension-manager-section-BFAGdy3G.js} +1 -1
- package/dist/web/assets/{extension-webview-FuuXP0Aw.js → extension-webview-D5TXIBMf.js} +1 -1
- package/dist/web/assets/{files-settings-section-CGd2yfzl.js → files-settings-section-BE6o-oHu.js} +1 -1
- package/dist/web/assets/{general-settings-section-CcG10nJq.js → general-settings-section-mQiXM537.js} +1 -1
- package/dist/web/assets/{git-log-panel-B-aSlSlu.js → git-log-panel-DqbcM9eC.js} +1 -1
- package/dist/web/assets/{glide-data-grid-usB_4gTg.js → glide-data-grid-BjEF7M5i.js} +3 -3
- package/dist/web/assets/group-chat-tab-aX2GEnkD.js +1 -0
- package/dist/web/assets/index-BoaecXhu.js +52 -0
- package/dist/web/assets/index-aXJy_SvC.css +1 -0
- package/dist/web/assets/{jira-watcher-section-cDMBzIR7.js → jira-watcher-section-BKn3A8zI.js} +1 -1
- package/dist/web/assets/keybindings-store-Brz0qepi.js +1 -0
- package/dist/web/assets/{keyboard-shortcuts-section-CIcdYToP.js → keyboard-shortcuts-section-Ck8KIbJ8.js} +1 -1
- package/dist/web/assets/{markdown-renderer-KTNg80_A.js → markdown-renderer-BGuM2PBI.js} +3 -3
- package/dist/web/assets/{markdown-renderer-BzX5WysW.js → markdown-renderer-Ddz8tPbb.js} +1 -1
- package/dist/web/assets/{mobile-explorer-sheet-cnwXe-Uz.js → mobile-explorer-sheet-DpKfB6iF.js} +1 -1
- package/dist/web/assets/notification-store-ByCdTvCC.js +1 -0
- package/dist/web/assets/{ppmbot-settings-section-CDp69sHV.js → ppmbot-settings-section-DeTFU1b-.js} +1 -1
- package/dist/web/assets/{problems-panel-BiE3c-31.js → problems-panel-Bgkcge5_.js} +1 -1
- package/dist/web/assets/{process-table-DcEq9HCl.js → process-table-DH7pnH5I.js} +1 -1
- package/dist/web/assets/{proxy-settings-section-P_ULFRpZ.js → proxy-settings-section-DMGMRHH-.js} +1 -1
- package/dist/web/assets/{remote-desktop-clipboard-notice-COjdmADR.js → remote-desktop-clipboard-notice-Bj5FtU0O.js} +1 -1
- package/dist/web/assets/{remote-desktop-mobile-sheet-lCU5l2w4.js → remote-desktop-mobile-sheet-BhwVrKxv.js} +2 -2
- package/dist/web/assets/{remote-desktop-mobile-view-Bo-wgZPC.js → remote-desktop-mobile-view-B1oAqbjG.js} +1 -1
- package/dist/web/assets/{remote-desktop-readiness-gate-Cqz8kqWG.js → remote-desktop-readiness-gate-2LE86aTu.js} +1 -1
- package/dist/web/assets/remote-desktop-window-content-u8HwuzyN.js +1 -0
- package/dist/web/assets/{schedules-settings-section-DHs84DvG.js → schedules-settings-section-C8XNDdi9.js} +1 -1
- package/dist/web/assets/{settings-body-CLt6iutX.js → settings-body-DelxmiKf.js} +2 -2
- package/dist/web/assets/settings-store-m6qOXoy4.js +2 -0
- package/dist/web/assets/{settings-tab-DjOxh-vW.js → settings-tab-Cb_dFdA6.js} +1 -1
- package/dist/web/assets/{settings-window-content-BxzSerga.js → settings-window-content-5EQQfC1t.js} +1 -1
- package/dist/web/assets/{sql-query-editor-4Okd-7ss.js → sql-query-editor-B3wrPR6K.js} +1 -1
- package/dist/web/assets/{sqlite-viewer-BqDUckIJ.js → sqlite-viewer-iQXNp0kH.js} +1 -1
- package/dist/web/assets/{system-monitor-body-Ssmt-r5H.js → system-monitor-body-5grJyA7C.js} +2 -2
- package/dist/web/assets/{system-monitor-tab-DNe62hWL.js → system-monitor-tab-CJr797F8.js} +1 -1
- package/dist/web/assets/{system-monitor-window-content-C6vnW_pQ.js → system-monitor-window-content-OGAhFXXo.js} +1 -1
- package/dist/web/assets/{tab-host-window-content--BVyPR1f.js → tab-host-window-content-C-eEo8I7.js} +1 -1
- package/dist/web/assets/{team-member-sheet-CE2eHuFX.js → team-member-sheet-CRvJUtdh.js} +2 -2
- package/dist/web/assets/{team-member-window-content-B1sg0R4H.js → team-member-window-content-C97N4RXb.js} +1 -1
- package/dist/web/assets/{terminal-tab-BrdS4bAy.js → terminal-tab-eZwpkvEe.js} +3 -3
- package/dist/web/assets/{tool-cards-DzYJVhjl.js → tool-cards-Bg4vjDYu.js} +3 -3
- package/dist/web/assets/{use-inline-blame-CKu-Sd-l.js → use-inline-blame-CzR8CnOZ.js} +1 -1
- package/dist/web/assets/{use-lsp-BaG0NUXY.js → use-lsp-BAoOSc-L.js} +1 -1
- package/dist/web/assets/{use-monaco-theme-DvWcXiCH.js → use-monaco-theme-Gd8cpt9n.js} +1 -1
- package/dist/web/assets/{use-websocket-Dj0e6N6t.js → use-websocket-CDfXkXo3.js} +1 -1
- package/dist/web/assets/video-preview-BYJ3aVo1.js +1 -0
- package/dist/web/index.html +3 -3
- package/dist/web/sw.js +1 -1
- 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/claude-agent-sdk.ts +87 -8
- package/src/server/index.ts +9 -0
- package/src/server/routes/mcp-auth.ts +117 -0
- package/src/server/routes/settings.ts +2 -0
- package/src/server/ws/chat-mcp-sign-in-sync.ts +58 -0
- package/src/server/ws/chat.ts +35 -1
- package/src/services/edge-forwarder.ts +191 -191
- package/src/services/mcp-oauth/mcp-control-query.ts +58 -0
- package/src/services/mcp-oauth/mcp-oauth-flows.ts +271 -0
- package/src/services/mcp-oauth/mcp-oauth-redirect.ts +68 -0
- package/src/services/mcp-oauth/mcp-status-probe.ts +76 -0
- package/src/services/windows-process-tree.ts +351 -351
- package/src/web/components/ai-resources/ai-resources-panel.tsx +4 -0
- package/src/web/components/chat/chat-tab.tsx +5 -0
- package/src/web/components/chat/message-input.tsx +4 -2
- package/src/web/components/mcp-auth/claude-ai-connector.ts +11 -0
- package/src/web/components/mcp-auth/mcp-server-name.ts +10 -0
- package/src/web/components/mcp-auth/mcp-sign-in-bar.tsx +74 -0
- package/src/web/components/mcp-auth/mcp-sign-in-dialog.tsx +196 -0
- package/src/web/components/mcp-auth/mcp-sign-in-list.tsx +110 -0
- package/src/web/components/mcp-auth/use-mcp-sign-in-flow.ts +120 -0
- package/src/web/components/settings/ai-settings-section.tsx +11 -0
- package/src/web/hooks/use-chat.ts +14 -0
- package/src/web/lib/api-mcp-auth.ts +54 -0
- package/src/web/stores/settings-store.ts +34 -0
- package/vite.config.ts +6 -0
- package/dist/web/assets/abap-DrxZXLHj.js.br +0 -0
- package/dist/web/assets/abap-DrxZXLHj.js.gz +0 -0
- package/dist/web/assets/accounts-settings-section-Dk9qWWTy.js +0 -1
- package/dist/web/assets/accounts-settings-section-Dk9qWWTy.js.br +0 -0
- package/dist/web/assets/accounts-settings-section-Dk9qWWTy.js.gz +0 -0
- package/dist/web/assets/actionscript-3-DOPR4pRC.js.br +0 -0
- package/dist/web/assets/actionscript-3-DOPR4pRC.js.gz +0 -0
- package/dist/web/assets/ada-DkqjEnDr.js.br +0 -0
- package/dist/web/assets/ada-DkqjEnDr.js.gz +0 -0
- package/dist/web/assets/ai-resource-editor-CtvWAxMW.js.br +0 -0
- package/dist/web/assets/ai-resource-editor-CtvWAxMW.js.gz +0 -0
- package/dist/web/assets/ai-settings-section-BxN-zFfm.js +0 -1
- package/dist/web/assets/ai-settings-section-CfI9nNSa.js +0 -1
- package/dist/web/assets/ai-settings-section-CfI9nNSa.js.br +0 -0
- package/dist/web/assets/ai-settings-section-CfI9nNSa.js.gz +0 -0
- package/dist/web/assets/andromeeda-BSZjevw2.js.br +0 -0
- package/dist/web/assets/andromeeda-BSZjevw2.js.gz +0 -0
- package/dist/web/assets/angular-html-DnrsWZqK.js.br +0 -0
- package/dist/web/assets/angular-html-DnrsWZqK.js.gz +0 -0
- package/dist/web/assets/angular-ts-BXEqA9t1.js.br +0 -0
- package/dist/web/assets/angular-ts-BXEqA9t1.js.gz +0 -0
- package/dist/web/assets/apache-DYwdQ5F_.js.br +0 -0
- package/dist/web/assets/apache-DYwdQ5F_.js.gz +0 -0
- package/dist/web/assets/apex-Dohu7DfB.js.br +0 -0
- package/dist/web/assets/apex-Dohu7DfB.js.gz +0 -0
- package/dist/web/assets/api-client-Jn3njtNw.js.br +0 -0
- package/dist/web/assets/api-client-Jn3njtNw.js.gz +0 -0
- package/dist/web/assets/api-settings-BZFSteM_.js.br +0 -0
- package/dist/web/assets/api-settings-BZFSteM_.js.gz +0 -0
- package/dist/web/assets/apl-DUQ6Oyth.js.br +0 -0
- package/dist/web/assets/apl-DUQ6Oyth.js.gz +0 -0
- package/dist/web/assets/appearance-settings-section-DRWpbQqj.js.br +0 -0
- package/dist/web/assets/appearance-settings-section-DRWpbQqj.js.gz +0 -0
- package/dist/web/assets/applescript-CdfGIVqp.js.br +0 -0
- package/dist/web/assets/applescript-CdfGIVqp.js.gz +0 -0
- package/dist/web/assets/ara-i3_3TMnI.js.br +0 -0
- package/dist/web/assets/ara-i3_3TMnI.js.gz +0 -0
- package/dist/web/assets/asciidoc-DJFM-7vl.js.br +0 -0
- package/dist/web/assets/asciidoc-DJFM-7vl.js.gz +0 -0
- package/dist/web/assets/asm-bMFssizQ.js.br +0 -0
- package/dist/web/assets/asm-bMFssizQ.js.gz +0 -0
- package/dist/web/assets/astro-CakOjJ6X.js.br +0 -0
- package/dist/web/assets/astro-CakOjJ6X.js.gz +0 -0
- package/dist/web/assets/audio-preview-CwCDCN-_.js.br +0 -0
- package/dist/web/assets/audio-preview-CwCDCN-_.js.gz +0 -0
- package/dist/web/assets/aurora-x-CetC7M8b.js.br +0 -0
- package/dist/web/assets/aurora-x-CetC7M8b.js.gz +0 -0
- package/dist/web/assets/awk-FFWx9ZrE.js.br +0 -0
- package/dist/web/assets/awk-FFWx9ZrE.js.gz +0 -0
- package/dist/web/assets/ayu-dark-D4ION2wO.js.br +0 -0
- package/dist/web/assets/ayu-dark-D4ION2wO.js.gz +0 -0
- package/dist/web/assets/ayu-light-BZN99P5A.js.br +0 -0
- package/dist/web/assets/ayu-light-BZN99P5A.js.gz +0 -0
- package/dist/web/assets/ayu-mirage-B-IpsKiL.js.br +0 -0
- package/dist/web/assets/ayu-mirage-B-IpsKiL.js.gz +0 -0
- package/dist/web/assets/ballerina-DhyJcKkq.js.br +0 -0
- package/dist/web/assets/ballerina-DhyJcKkq.js.gz +0 -0
- package/dist/web/assets/bat-GOVQY81F.js.br +0 -0
- package/dist/web/assets/bat-GOVQY81F.js.gz +0 -0
- package/dist/web/assets/beancount-BO749Rhc.js.br +0 -0
- package/dist/web/assets/beancount-BO749Rhc.js.gz +0 -0
- package/dist/web/assets/berry-CHYYKXmK.js.br +0 -0
- package/dist/web/assets/berry-CHYYKXmK.js.gz +0 -0
- package/dist/web/assets/bibtex-BnYiDnxT.js.br +0 -0
- package/dist/web/assets/bibtex-BnYiDnxT.js.gz +0 -0
- package/dist/web/assets/bicep-kljgR_G3.js.br +0 -0
- package/dist/web/assets/bicep-kljgR_G3.js.gz +0 -0
- package/dist/web/assets/bird2-DnLtJGhV.js.br +0 -0
- package/dist/web/assets/bird2-DnLtJGhV.js.gz +0 -0
- package/dist/web/assets/blade-C903KM82.js.br +0 -0
- package/dist/web/assets/blade-C903KM82.js.gz +0 -0
- package/dist/web/assets/branch-review-tab-B3BMVCdK.js.br +0 -0
- package/dist/web/assets/branch-review-tab-B3BMVCdK.js.gz +0 -0
- package/dist/web/assets/bsl-slfcE_kB.js.br +0 -0
- package/dist/web/assets/bsl-slfcE_kB.js.gz +0 -0
- package/dist/web/assets/button-B9CTrsEf.js.br +0 -0
- package/dist/web/assets/button-B9CTrsEf.js.gz +0 -0
- package/dist/web/assets/c-BWO-aeyf.js.br +0 -0
- package/dist/web/assets/c-BWO-aeyf.js.gz +0 -0
- package/dist/web/assets/c3-fc_jio6D.js.br +0 -0
- package/dist/web/assets/c3-fc_jio6D.js.gz +0 -0
- package/dist/web/assets/cadence-DopRCrdB.js.br +0 -0
- package/dist/web/assets/cadence-DopRCrdB.js.gz +0 -0
- package/dist/web/assets/cairo-DRwEaH6w.js.br +0 -0
- package/dist/web/assets/cairo-DRwEaH6w.js.gz +0 -0
- package/dist/web/assets/can-open-in-ppm-CUW3vVJg.js.br +0 -0
- package/dist/web/assets/can-open-in-ppm-CUW3vVJg.js.gz +0 -0
- package/dist/web/assets/catppuccin-frappe-DL6iCUa8.js.br +0 -0
- package/dist/web/assets/catppuccin-frappe-DL6iCUa8.js.gz +0 -0
- package/dist/web/assets/catppuccin-latte-DNF7n3uY.js.br +0 -0
- package/dist/web/assets/catppuccin-latte-DNF7n3uY.js.gz +0 -0
- package/dist/web/assets/catppuccin-macchiato-ByMic_k0.js.br +0 -0
- package/dist/web/assets/catppuccin-macchiato-ByMic_k0.js.gz +0 -0
- package/dist/web/assets/catppuccin-mocha-DcrJtZtv.js.br +0 -0
- package/dist/web/assets/catppuccin-mocha-DcrJtZtv.js.gz +0 -0
- package/dist/web/assets/chat-tab-B0g-TzDa.js +0 -15
- package/dist/web/assets/chat-tab-B0g-TzDa.js.br +0 -0
- package/dist/web/assets/chat-tab-B0g-TzDa.js.gz +0 -0
- package/dist/web/assets/clarity-0cRLlvQe.js.br +0 -0
- package/dist/web/assets/clarity-0cRLlvQe.js.gz +0 -0
- package/dist/web/assets/clojure-DPqZAcpI.js.br +0 -0
- package/dist/web/assets/clojure-DPqZAcpI.js.gz +0 -0
- package/dist/web/assets/cmake-Bx26bw5u.js.br +0 -0
- package/dist/web/assets/cmake-Bx26bw5u.js.gz +0 -0
- package/dist/web/assets/cobol--n4m6b70.js.br +0 -0
- package/dist/web/assets/cobol--n4m6b70.js.gz +0 -0
- package/dist/web/assets/code-editor-DXra_Rnt.js +0 -7
- package/dist/web/assets/code-editor-DXra_Rnt.js.br +0 -0
- package/dist/web/assets/code-editor-DXra_Rnt.js.gz +0 -0
- package/dist/web/assets/codeql-TRoWjo5g.js.br +0 -0
- package/dist/web/assets/codeql-TRoWjo5g.js.gz +0 -0
- package/dist/web/assets/codex-daily-guard-DjLeZ_hE.js.br +0 -0
- package/dist/web/assets/codex-daily-guard-DjLeZ_hE.js.gz +0 -0
- package/dist/web/assets/coffee-CjyFmw8_.js.br +0 -0
- package/dist/web/assets/coffee-CjyFmw8_.js.gz +0 -0
- package/dist/web/assets/common-lisp-Ctohamsb.js.br +0 -0
- package/dist/web/assets/common-lisp-Ctohamsb.js.gz +0 -0
- package/dist/web/assets/conflict-editor-Dx8MnO6j.js.br +0 -0
- package/dist/web/assets/conflict-editor-Dx8MnO6j.js.gz +0 -0
- package/dist/web/assets/context-menu-C6pIsf83.js.br +0 -0
- package/dist/web/assets/context-menu-C6pIsf83.js.gz +0 -0
- package/dist/web/assets/coq-BO6TJSED.js.br +0 -0
- package/dist/web/assets/coq-BO6TJSED.js.gz +0 -0
- package/dist/web/assets/cpp-D18jdQPZ.js.br +0 -0
- package/dist/web/assets/cpp-D18jdQPZ.js.gz +0 -0
- package/dist/web/assets/createLucideIcon-DoiEKeJ_.js.br +0 -0
- package/dist/web/assets/createLucideIcon-DoiEKeJ_.js.gz +0 -0
- package/dist/web/assets/crystal-CySzfH-7.js.br +0 -0
- package/dist/web/assets/crystal-CySzfH-7.js.gz +0 -0
- package/dist/web/assets/csharp-DSy4nlrl.js.br +0 -0
- package/dist/web/assets/csharp-DSy4nlrl.js.gz +0 -0
- package/dist/web/assets/css-Ca_hTmU6.js.br +0 -0
- package/dist/web/assets/css-Ca_hTmU6.js.gz +0 -0
- package/dist/web/assets/csv-DND7YJXD.js.br +0 -0
- package/dist/web/assets/csv-DND7YJXD.js.gz +0 -0
- package/dist/web/assets/csv-parser-DZ_75eCb.js.br +0 -0
- package/dist/web/assets/csv-parser-DZ_75eCb.js.gz +0 -0
- package/dist/web/assets/csv-preview-U-Fy9KPT.js.br +0 -0
- package/dist/web/assets/csv-preview-U-Fy9KPT.js.gz +0 -0
- package/dist/web/assets/cue-BUnWK221.js.br +0 -0
- package/dist/web/assets/cue-BUnWK221.js.gz +0 -0
- package/dist/web/assets/cypher-CInm9Etl.js.br +0 -0
- package/dist/web/assets/cypher-CInm9Etl.js.gz +0 -0
- package/dist/web/assets/d-BbsB8r6R.js.br +0 -0
- package/dist/web/assets/d-BbsB8r6R.js.gz +0 -0
- package/dist/web/assets/dark-plus-DkzIiuQX.js.br +0 -0
- package/dist/web/assets/dark-plus-DkzIiuQX.js.gz +0 -0
- package/dist/web/assets/dart-BG2nw7Se.js.br +0 -0
- package/dist/web/assets/dart-BG2nw7Se.js.gz +0 -0
- package/dist/web/assets/data-grid-overlay-editor-BD9eJweQ.js.br +0 -0
- package/dist/web/assets/data-grid-overlay-editor-BD9eJweQ.js.gz +0 -0
- package/dist/web/assets/data-grid-types-C6UX8kgh.js.br +0 -0
- package/dist/web/assets/data-grid-types-C6UX8kgh.js.gz +0 -0
- package/dist/web/assets/database-viewer-v5S-zzB6.js +0 -1
- package/dist/web/assets/database-viewer-v5S-zzB6.js.br +0 -0
- package/dist/web/assets/database-viewer-v5S-zzB6.js.gz +0 -0
- package/dist/web/assets/dax-j4h6VhlV.js.br +0 -0
- package/dist/web/assets/dax-j4h6VhlV.js.gz +0 -0
- package/dist/web/assets/desktop-Dg34JDlS.js.br +0 -0
- package/dist/web/assets/desktop-Dg34JDlS.js.gz +0 -0
- package/dist/web/assets/dialog-B84_DJQ8.js.br +0 -0
- package/dist/web/assets/dialog-B84_DJQ8.js.gz +0 -0
- package/dist/web/assets/diff-CRrKo-mH.js.br +0 -0
- package/dist/web/assets/diff-CRrKo-mH.js.gz +0 -0
- package/dist/web/assets/diff-viewer-Bv2J64t8.js.br +0 -0
- package/dist/web/assets/diff-viewer-Bv2J64t8.js.gz +0 -0
- package/dist/web/assets/dist-BD2gbdy0.js.br +0 -0
- package/dist/web/assets/dist-BD2gbdy0.js.gz +0 -0
- package/dist/web/assets/dist-D39GQICe.js.br +0 -0
- package/dist/web/assets/dist-D39GQICe.js.gz +0 -0
- package/dist/web/assets/docker-DAtcxZjt.js.br +0 -0
- package/dist/web/assets/docker-DAtcxZjt.js.gz +0 -0
- package/dist/web/assets/docx-preview-CeH6p2Oi.js.br +0 -0
- package/dist/web/assets/docx-preview-CeH6p2Oi.js.gz +0 -0
- package/dist/web/assets/dotenv-DNUcgQCn.js.br +0 -0
- package/dist/web/assets/dotenv-DNUcgQCn.js.gz +0 -0
- package/dist/web/assets/dracula-bhhaShNC.js.br +0 -0
- package/dist/web/assets/dracula-bhhaShNC.js.gz +0 -0
- package/dist/web/assets/dracula-soft-CeHAoi-D.js.br +0 -0
- package/dist/web/assets/dracula-soft-CeHAoi-D.js.gz +0 -0
- package/dist/web/assets/dream-maker-BMH1JI2G.js.br +0 -0
- package/dist/web/assets/dream-maker-BMH1JI2G.js.gz +0 -0
- package/dist/web/assets/edge-B6b5FHmU.js.br +0 -0
- package/dist/web/assets/edge-B6b5FHmU.js.gz +0 -0
- package/dist/web/assets/edit-diff-preview-BG5DsLJG.js.br +0 -0
- package/dist/web/assets/edit-diff-preview-BG5DsLJG.js.gz +0 -0
- package/dist/web/assets/editor-language-service-C1J6iorq.js.br +0 -0
- package/dist/web/assets/editor-language-service-C1J6iorq.js.gz +0 -0
- package/dist/web/assets/elixir-Dpo1rvn2.js.br +0 -0
- package/dist/web/assets/elixir-Dpo1rvn2.js.gz +0 -0
- package/dist/web/assets/elm-D9CNOsWT.js.br +0 -0
- package/dist/web/assets/elm-D9CNOsWT.js.gz +0 -0
- package/dist/web/assets/emacs-lisp-BaAYIdWN.js.br +0 -0
- package/dist/web/assets/emacs-lisp-BaAYIdWN.js.gz +0 -0
- package/dist/web/assets/erb-sY7Yee1W.js.br +0 -0
- package/dist/web/assets/erb-sY7Yee1W.js.gz +0 -0
- package/dist/web/assets/erlang-CfyrBxyF.js.br +0 -0
- package/dist/web/assets/erlang-CfyrBxyF.js.gz +0 -0
- package/dist/web/assets/esm-5AhGJcV8.js.br +0 -0
- package/dist/web/assets/esm-5AhGJcV8.js.gz +0 -0
- package/dist/web/assets/everforest-dark-Cs91gPa_.js.br +0 -0
- package/dist/web/assets/everforest-dark-Cs91gPa_.js.gz +0 -0
- package/dist/web/assets/everforest-light-lTkE6qWA.js.br +0 -0
- package/dist/web/assets/everforest-light-lTkE6qWA.js.gz +0 -0
- package/dist/web/assets/explorer-body-BpTOY2kH.js +0 -2
- package/dist/web/assets/explorer-body-BpTOY2kH.js.br +0 -0
- package/dist/web/assets/explorer-body-BpTOY2kH.js.gz +0 -0
- package/dist/web/assets/explorer-window-content-CZIwX6cE.js.br +0 -0
- package/dist/web/assets/explorer-window-content-CZIwX6cE.js.gz +0 -0
- package/dist/web/assets/extension-manager-section-DGSKz5iJ.js.br +0 -0
- package/dist/web/assets/extension-manager-section-DGSKz5iJ.js.gz +0 -0
- package/dist/web/assets/extension-webview-FuuXP0Aw.js.br +0 -0
- package/dist/web/assets/extension-webview-FuuXP0Aw.js.gz +0 -0
- package/dist/web/assets/fennel-CmhYEhcM.js.br +0 -0
- package/dist/web/assets/fennel-CmhYEhcM.js.gz +0 -0
- package/dist/web/assets/file-icons-wS-OmEVu.js.br +0 -0
- package/dist/web/assets/file-icons-wS-OmEVu.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-Ds3qJ4hC.js.br +0 -0
- package/dist/web/assets/file-store-Ds3qJ4hC.js.gz +0 -0
- package/dist/web/assets/files-settings-section-CGd2yfzl.js.br +0 -0
- package/dist/web/assets/files-settings-section-CGd2yfzl.js.gz +0 -0
- package/dist/web/assets/fish-p1jauFum.js.br +0 -0
- package/dist/web/assets/fish-p1jauFum.js.gz +0 -0
- package/dist/web/assets/fluent-BsH-lUh2.js.br +0 -0
- package/dist/web/assets/fluent-BsH-lUh2.js.gz +0 -0
- package/dist/web/assets/format-file-meta-eKLstbCL.js.br +0 -0
- package/dist/web/assets/format-file-meta-eKLstbCL.js.gz +0 -0
- package/dist/web/assets/fortran-fixed-form-N67gM_wp.js.br +0 -0
- package/dist/web/assets/fortran-fixed-form-N67gM_wp.js.gz +0 -0
- package/dist/web/assets/fortran-free-form-CB6SdVKB.js.br +0 -0
- package/dist/web/assets/fortran-free-form-CB6SdVKB.js.gz +0 -0
- package/dist/web/assets/fs-api-orca76dV.js.br +0 -0
- package/dist/web/assets/fs-api-orca76dV.js.gz +0 -0
- package/dist/web/assets/fsharp-Dq0K01wX.js.br +0 -0
- package/dist/web/assets/fsharp-Dq0K01wX.js.gz +0 -0
- package/dist/web/assets/gdresource-DkFbszqY.js.br +0 -0
- package/dist/web/assets/gdresource-DkFbszqY.js.gz +0 -0
- package/dist/web/assets/gdscript--YoKuvEA.js.br +0 -0
- package/dist/web/assets/gdscript--YoKuvEA.js.gz +0 -0
- package/dist/web/assets/gdshader-BRtMwf5z.js.br +0 -0
- package/dist/web/assets/gdshader-BRtMwf5z.js.gz +0 -0
- package/dist/web/assets/general-settings-section-CcG10nJq.js.br +0 -0
- package/dist/web/assets/general-settings-section-CcG10nJq.js.gz +0 -0
- package/dist/web/assets/genie-wrzVG2Z8.js.br +0 -0
- package/dist/web/assets/genie-wrzVG2Z8.js.gz +0 -0
- package/dist/web/assets/gherkin-HnpURN27.js.br +0 -0
- package/dist/web/assets/gherkin-HnpURN27.js.gz +0 -0
- package/dist/web/assets/git-commit-Ddt_nerD.js.br +0 -2
- package/dist/web/assets/git-commit-Ddt_nerD.js.gz +0 -0
- package/dist/web/assets/git-log-panel-B-aSlSlu.js.br +0 -0
- package/dist/web/assets/git-log-panel-B-aSlSlu.js.gz +0 -0
- package/dist/web/assets/git-repo-store-BCEPfUGT.js.br +0 -0
- package/dist/web/assets/git-repo-store-BCEPfUGT.js.gz +0 -0
- package/dist/web/assets/github-dark-XlZ3pGhn.js.br +0 -0
- package/dist/web/assets/github-dark-XlZ3pGhn.js.gz +0 -0
- package/dist/web/assets/github-dark-default-D_R0hfJe.js.br +0 -0
- package/dist/web/assets/github-dark-default-D_R0hfJe.js.gz +0 -0
- package/dist/web/assets/github-dark-dimmed-BHQgHLnK.js.br +0 -0
- package/dist/web/assets/github-dark-dimmed-BHQgHLnK.js.gz +0 -0
- package/dist/web/assets/github-dark-high-contrast-Pbl4mEFe.js.br +0 -0
- package/dist/web/assets/github-dark-high-contrast-Pbl4mEFe.js.gz +0 -0
- package/dist/web/assets/github-light-0P0VANJn.js.br +0 -0
- package/dist/web/assets/github-light-0P0VANJn.js.gz +0 -0
- package/dist/web/assets/github-light-default-DTfsnyDq.js.br +0 -0
- package/dist/web/assets/github-light-default-DTfsnyDq.js.gz +0 -0
- package/dist/web/assets/github-light-high-contrast-DKITR-5Y.js.br +0 -0
- package/dist/web/assets/github-light-high-contrast-DKITR-5Y.js.gz +0 -0
- package/dist/web/assets/gleam-refSZtkM.js.br +0 -0
- package/dist/web/assets/gleam-refSZtkM.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/glide-data-grid-usB_4gTg.js.br +0 -0
- package/dist/web/assets/glide-data-grid-usB_4gTg.js.gz +0 -0
- package/dist/web/assets/glimmer-js-51jbYnyY.js.br +0 -0
- package/dist/web/assets/glimmer-js-51jbYnyY.js.gz +0 -0
- package/dist/web/assets/glimmer-ts-C5L1J32J.js.br +0 -0
- package/dist/web/assets/glimmer-ts-C5L1J32J.js.gz +0 -0
- package/dist/web/assets/glsl-BcsfmwJZ.js.br +0 -0
- package/dist/web/assets/glsl-BcsfmwJZ.js.gz +0 -0
- package/dist/web/assets/gn-BZ9cGckR.js.br +0 -0
- package/dist/web/assets/gn-BZ9cGckR.js.gz +0 -0
- package/dist/web/assets/gnuplot-CMHqDcTW.js.br +0 -0
- package/dist/web/assets/gnuplot-CMHqDcTW.js.gz +0 -0
- package/dist/web/assets/go-bFdCrzvY.js.br +0 -0
- package/dist/web/assets/go-bFdCrzvY.js.gz +0 -0
- package/dist/web/assets/graphql-dv4wuJsK.js.br +0 -0
- package/dist/web/assets/graphql-dv4wuJsK.js.gz +0 -0
- package/dist/web/assets/groovy-Dvz5tluQ.js.br +0 -0
- package/dist/web/assets/groovy-Dvz5tluQ.js.gz +0 -0
- package/dist/web/assets/group-chat-tab-BAMi_dhb.js +0 -1
- package/dist/web/assets/group-chat-tab-BAMi_dhb.js.br +0 -0
- package/dist/web/assets/group-chat-tab-BAMi_dhb.js.gz +0 -0
- package/dist/web/assets/gruvbox-dark-hard-D0Z-pclr.js.br +0 -0
- package/dist/web/assets/gruvbox-dark-hard-D0Z-pclr.js.gz +0 -0
- package/dist/web/assets/gruvbox-dark-medium-BG6oIRQR.js.br +0 -0
- package/dist/web/assets/gruvbox-dark-medium-BG6oIRQR.js.gz +0 -0
- package/dist/web/assets/gruvbox-dark-soft-ILJ-3tU6.js.br +0 -0
- package/dist/web/assets/gruvbox-dark-soft-ILJ-3tU6.js.gz +0 -0
- package/dist/web/assets/gruvbox-light-hard-Bl95khkz.js.br +0 -0
- package/dist/web/assets/gruvbox-light-hard-Bl95khkz.js.gz +0 -0
- package/dist/web/assets/gruvbox-light-medium-CdislFOh.js.br +0 -0
- package/dist/web/assets/gruvbox-light-medium-CdislFOh.js.gz +0 -0
- package/dist/web/assets/gruvbox-light-soft-CTcEyxlX.js.br +0 -0
- package/dist/web/assets/gruvbox-light-soft-CTcEyxlX.js.gz +0 -0
- package/dist/web/assets/hack-DLE5d3bx.js.br +0 -0
- package/dist/web/assets/hack-DLE5d3bx.js.gz +0 -0
- package/dist/web/assets/haml-CoKfcM3E.js.br +0 -0
- package/dist/web/assets/haml-CoKfcM3E.js.gz +0 -0
- package/dist/web/assets/handlebars-Bn0jy8pD.js.br +0 -0
- package/dist/web/assets/handlebars-Bn0jy8pD.js.gz +0 -0
- package/dist/web/assets/haskell-D9jfkQuH.js.br +0 -0
- package/dist/web/assets/haskell-D9jfkQuH.js.gz +0 -0
- package/dist/web/assets/haxe-Ckfl4osD.js.br +0 -0
- package/dist/web/assets/haxe-Ckfl4osD.js.gz +0 -0
- package/dist/web/assets/hcl-t03N4k5N.js.br +0 -0
- package/dist/web/assets/hcl-t03N4k5N.js.gz +0 -0
- package/dist/web/assets/hjson-B_TIVRki.js.br +0 -0
- package/dist/web/assets/hjson-B_TIVRki.js.gz +0 -0
- package/dist/web/assets/hlsl-BBCTeANz.js.br +0 -0
- package/dist/web/assets/hlsl-BBCTeANz.js.gz +0 -0
- package/dist/web/assets/horizon-CRY-xdGU.js.br +0 -0
- package/dist/web/assets/horizon-CRY-xdGU.js.gz +0 -0
- package/dist/web/assets/horizon-bright-BpUM2C5u.js.br +0 -0
- package/dist/web/assets/horizon-bright-BpUM2C5u.js.gz +0 -0
- package/dist/web/assets/houston-RVyAGlyS.js.br +0 -0
- package/dist/web/assets/houston-RVyAGlyS.js.gz +0 -0
- package/dist/web/assets/html-DXzY5Cew.js.br +0 -0
- package/dist/web/assets/html-DXzY5Cew.js.gz +0 -0
- package/dist/web/assets/http-DepeIWQ1.js.br +0 -0
- package/dist/web/assets/http-DepeIWQ1.js.gz +0 -0
- package/dist/web/assets/hurl-CfsP4sCj.js.br +0 -0
- package/dist/web/assets/hurl-CfsP4sCj.js.gz +0 -0
- package/dist/web/assets/hxml-IfVkY3HL.js.br +0 -0
- package/dist/web/assets/hxml-IfVkY3HL.js.gz +0 -0
- package/dist/web/assets/hy-BHFJHuHd.js.br +0 -0
- package/dist/web/assets/hy-BHFJHuHd.js.gz +0 -0
- package/dist/web/assets/icons-DQjqk0lJ.js.br +0 -0
- package/dist/web/assets/icons-DQjqk0lJ.js.gz +0 -0
- package/dist/web/assets/imba-DyG0_0MS.js.br +0 -0
- package/dist/web/assets/imba-DyG0_0MS.js.gz +0 -0
- package/dist/web/assets/index-CoTvom0K.js +0 -52
- package/dist/web/assets/index-CoTvom0K.js.br +0 -0
- package/dist/web/assets/index-CoTvom0K.js.gz +0 -0
- package/dist/web/assets/index-DLn9-Lrb.css +0 -1
- package/dist/web/assets/index-DLn9-Lrb.css.br +0 -0
- package/dist/web/assets/index-DLn9-Lrb.css.gz +0 -0
- package/dist/web/assets/ini-CsCTH-_o.js.br +0 -5
- package/dist/web/assets/ini-CsCTH-_o.js.gz +0 -0
- package/dist/web/assets/java-JWdrzVo8.js.br +0 -0
- package/dist/web/assets/java-JWdrzVo8.js.gz +0 -0
- package/dist/web/assets/javascript-5aQKJRxB.js.br +0 -0
- package/dist/web/assets/javascript-5aQKJRxB.js.gz +0 -0
- package/dist/web/assets/jinja-DcCmNDQ8.js.br +0 -0
- package/dist/web/assets/jinja-DcCmNDQ8.js.gz +0 -0
- package/dist/web/assets/jira-watcher-section-cDMBzIR7.js.br +0 -3
- package/dist/web/assets/jira-watcher-section-cDMBzIR7.js.gz +0 -0
- package/dist/web/assets/jison-Bt-5cKVZ.js.br +0 -0
- package/dist/web/assets/jison-Bt-5cKVZ.js.gz +0 -0
- package/dist/web/assets/json-BOq7QblK.js.br +0 -0
- package/dist/web/assets/json-BOq7QblK.js.gz +0 -0
- package/dist/web/assets/json5-g3g-IFTV.js.br +0 -0
- package/dist/web/assets/json5-g3g-IFTV.js.gz +0 -0
- package/dist/web/assets/jsonc-DQHBJwib.js.br +0 -0
- package/dist/web/assets/jsonc-DQHBJwib.js.gz +0 -0
- package/dist/web/assets/jsonl-zFLDm4eB.js.br +0 -0
- package/dist/web/assets/jsonl-zFLDm4eB.js.gz +0 -0
- package/dist/web/assets/jsonnet-DgNm2IGn.js.br +0 -0
- package/dist/web/assets/jsonnet-DgNm2IGn.js.gz +0 -0
- package/dist/web/assets/jssm-BErkU0In.js.br +0 -0
- package/dist/web/assets/jssm-BErkU0In.js.gz +0 -0
- package/dist/web/assets/jsx-BSLWViGE.js.br +0 -0
- package/dist/web/assets/jsx-BSLWViGE.js.gz +0 -0
- package/dist/web/assets/julia-DewYVRtE.js.br +0 -0
- package/dist/web/assets/julia-DewYVRtE.js.gz +0 -0
- package/dist/web/assets/just-CLT_ggBy.js.br +0 -0
- package/dist/web/assets/just-CLT_ggBy.js.gz +0 -0
- package/dist/web/assets/kanagawa-dragon-Dgymfjca.js.br +0 -0
- package/dist/web/assets/kanagawa-dragon-Dgymfjca.js.gz +0 -0
- package/dist/web/assets/kanagawa-lotus-CWZEYd27.js.br +0 -0
- package/dist/web/assets/kanagawa-lotus-CWZEYd27.js.gz +0 -0
- package/dist/web/assets/kanagawa-wave-CQg17ecf.js.br +0 -0
- package/dist/web/assets/kanagawa-wave-CQg17ecf.js.gz +0 -0
- package/dist/web/assets/kdl-DY4GHmJC.js.br +0 -0
- package/dist/web/assets/kdl-DY4GHmJC.js.gz +0 -0
- package/dist/web/assets/keybindings-store-D7nwnInl.js +0 -1
- package/dist/web/assets/keyboard-shortcuts-section-CIcdYToP.js.br +0 -0
- package/dist/web/assets/keyboard-shortcuts-section-CIcdYToP.js.gz +0 -0
- package/dist/web/assets/kotlin-DeGTz7bl.js.br +0 -0
- package/dist/web/assets/kotlin-DeGTz7bl.js.gz +0 -0
- package/dist/web/assets/kusto-BN-OqpQj.js.br +0 -0
- package/dist/web/assets/kusto-BN-OqpQj.js.gz +0 -0
- package/dist/web/assets/laserwave-bAqiAiOp.js.br +0 -0
- package/dist/web/assets/laserwave-bAqiAiOp.js.gz +0 -0
- package/dist/web/assets/latex-DXmcayW1.js.br +0 -0
- package/dist/web/assets/latex-DXmcayW1.js.gz +0 -0
- package/dist/web/assets/lean-CAypLWCf.js.br +0 -0
- package/dist/web/assets/lean-CAypLWCf.js.gz +0 -0
- package/dist/web/assets/less-ikHAUlPb.js.br +0 -0
- package/dist/web/assets/less-ikHAUlPb.js.gz +0 -0
- package/dist/web/assets/lib-BWyA9SvU.js.br +0 -0
- package/dist/web/assets/lib-BWyA9SvU.js.gz +0 -0
- package/dist/web/assets/libesm-cUHvIIuW.js.br +0 -0
- package/dist/web/assets/libesm-cUHvIIuW.js.gz +0 -0
- package/dist/web/assets/light-plus-BamuTcT9.js.br +0 -0
- package/dist/web/assets/light-plus-BamuTcT9.js.gz +0 -0
- package/dist/web/assets/liquid-BVcHf0IA.js.br +0 -0
- package/dist/web/assets/liquid-BVcHf0IA.js.gz +0 -0
- package/dist/web/assets/llvm-CddObVkW.js.br +0 -0
- package/dist/web/assets/llvm-CddObVkW.js.gz +0 -0
- package/dist/web/assets/log-CWbfGTTc.js.br +0 -0
- package/dist/web/assets/log-CWbfGTTc.js.gz +0 -0
- package/dist/web/assets/logo-AHyhxX3Z.js.br +0 -0
- package/dist/web/assets/logo-AHyhxX3Z.js.gz +0 -0
- package/dist/web/assets/lua-BYupsB1B.js.br +0 -0
- package/dist/web/assets/lua-BYupsB1B.js.gz +0 -0
- package/dist/web/assets/luau-y7she9L3.js.br +0 -0
- package/dist/web/assets/luau-y7she9L3.js.gz +0 -0
- package/dist/web/assets/make-DP3sQaP3.js.br +0 -0
- package/dist/web/assets/make-DP3sQaP3.js.gz +0 -0
- package/dist/web/assets/markdown-9Nuxib8a.js.br +0 -0
- package/dist/web/assets/markdown-9Nuxib8a.js.gz +0 -0
- package/dist/web/assets/markdown-renderer-KTNg80_A.js.br +0 -0
- package/dist/web/assets/markdown-renderer-KTNg80_A.js.gz +0 -0
- package/dist/web/assets/marko-CsD0R5tv.js.br +0 -0
- package/dist/web/assets/marko-CsD0R5tv.js.gz +0 -0
- package/dist/web/assets/material-theme-DDpm-uS7.js.br +0 -0
- package/dist/web/assets/material-theme-DDpm-uS7.js.gz +0 -0
- package/dist/web/assets/material-theme-darker-CHk91wbm.js.br +0 -0
- package/dist/web/assets/material-theme-darker-CHk91wbm.js.gz +0 -0
- package/dist/web/assets/material-theme-lighter-LkmOI8KM.js.br +0 -0
- package/dist/web/assets/material-theme-lighter-LkmOI8KM.js.gz +0 -0
- package/dist/web/assets/material-theme-ocean-PpkUhB4-.js.br +0 -0
- package/dist/web/assets/material-theme-ocean-PpkUhB4-.js.gz +0 -0
- package/dist/web/assets/material-theme-palenight-DZAigXgW.js.br +0 -0
- package/dist/web/assets/material-theme-palenight-DZAigXgW.js.gz +0 -0
- package/dist/web/assets/matlab-CexKVVPc.js.br +0 -0
- package/dist/web/assets/matlab-CexKVVPc.js.gz +0 -0
- package/dist/web/assets/mdc-DP2tC4Kc.js.br +0 -0
- package/dist/web/assets/mdc-DP2tC4Kc.js.gz +0 -0
- package/dist/web/assets/mdx-BrcepHfI.js.br +0 -0
- package/dist/web/assets/mdx-BrcepHfI.js.gz +0 -0
- package/dist/web/assets/mermaid-CNFhZZaG.js.br +0 -0
- package/dist/web/assets/mermaid-CNFhZZaG.js.gz +0 -0
- package/dist/web/assets/min-dark-hd3nbDV4.js.br +0 -0
- package/dist/web/assets/min-dark-hd3nbDV4.js.gz +0 -0
- package/dist/web/assets/min-light-AqA5jmks.js.br +0 -0
- package/dist/web/assets/min-light-AqA5jmks.js.gz +0 -0
- package/dist/web/assets/mipsasm-B3x4L8Zk.js.br +0 -0
- package/dist/web/assets/mipsasm-B3x4L8Zk.js.gz +0 -0
- package/dist/web/assets/mobile-bottom-sheet-C3TniEP-.js.br +0 -0
- package/dist/web/assets/mobile-bottom-sheet-C3TniEP-.js.gz +0 -0
- package/dist/web/assets/mobile-explorer-sheet-cnwXe-Uz.js.br +0 -0
- package/dist/web/assets/mobile-explorer-sheet-cnwXe-Uz.js.gz +0 -0
- package/dist/web/assets/mojo-CvfXy3YL.js.br +0 -0
- package/dist/web/assets/mojo-CvfXy3YL.js.gz +0 -0
- package/dist/web/assets/monaco/vs/_commonjsHelpers-CT9FvmAN.js +0 -1
- package/dist/web/assets/monaco/vs/abap-D-t0cyap.js +0 -1
- 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 +0 -1
- 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 +0 -93
- 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 +0 -26
- 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 +0 -470
- 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 +0 -58
- 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 +0 -67731
- 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 +0 -1
- package/dist/web/assets/monaco/vs/basic-languages/monaco.contribution.js +0 -1
- 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 +0 -1
- 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 +0 -2
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -3
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -5
- 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 +0 -903
- 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 +0 -1
- 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 +0 -1
- 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 +0 -3
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- package/dist/web/assets/monaco/vs/jsonMode-DULH5oaX.js +0 -7
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- package/dist/web/assets/monaco/vs/language/html/monaco.contribution.js +0 -1
- package/dist/web/assets/monaco/vs/language/json/monaco.contribution.js +0 -1
- package/dist/web/assets/monaco/vs/language/typescript/monaco.contribution.js +0 -1
- package/dist/web/assets/monaco/vs/less-C0eDYdqa.js +0 -2
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1368
- 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 +0 -4
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- package/dist/web/assets/monaco/vs/objective-c-CntZFaHX.js +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -2
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -3
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -3
- 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 +0 -1
- 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 +0 -1
- 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 +0 -11
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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 +0 -298
- 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 +0 -1
- 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 +0 -1
- 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 +0 -1
- 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-CdxwmnU_.js.br +0 -0
- package/dist/web/assets/monokai-CdxwmnU_.js.gz +0 -0
- package/dist/web/assets/moonbit-6Z_VCO0_.js.br +0 -0
- package/dist/web/assets/moonbit-6Z_VCO0_.js.gz +0 -0
- package/dist/web/assets/move-B2__B6Po.js.br +0 -0
- package/dist/web/assets/move-B2__B6Po.js.gz +0 -0
- package/dist/web/assets/narrat-D6vL6wL-.js.br +0 -0
- package/dist/web/assets/narrat-D6vL6wL-.js.gz +0 -0
- package/dist/web/assets/nextflow-FQM6iZO2.js.br +0 -0
- package/dist/web/assets/nextflow-FQM6iZO2.js.gz +0 -0
- package/dist/web/assets/nextflow-groovy-L-FBME4e.js.br +0 -0
- package/dist/web/assets/nextflow-groovy-L-FBME4e.js.gz +0 -0
- package/dist/web/assets/nginx-Bg0TK_a9.js.br +0 -0
- package/dist/web/assets/nginx-Bg0TK_a9.js.gz +0 -0
- package/dist/web/assets/night-owl-DjKrkDjv.js.br +0 -0
- package/dist/web/assets/night-owl-DjKrkDjv.js.gz +0 -0
- package/dist/web/assets/night-owl-light-CeGjPuUQ.js.br +0 -0
- package/dist/web/assets/night-owl-light-CeGjPuUQ.js.gz +0 -0
- package/dist/web/assets/nim-D1kSCHdq.js.br +0 -0
- package/dist/web/assets/nim-D1kSCHdq.js.gz +0 -0
- package/dist/web/assets/nix-dr279CcA.js.br +0 -0
- package/dist/web/assets/nix-dr279CcA.js.gz +0 -0
- package/dist/web/assets/nord-Dxn-_H_Y.js.br +0 -0
- package/dist/web/assets/nord-Dxn-_H_Y.js.gz +0 -0
- package/dist/web/assets/notification-store-Bayjh6Js.js +0 -1
- package/dist/web/assets/notifications-settings-section-C5v8FoH9.js.br +0 -3
- package/dist/web/assets/notifications-settings-section-C5v8FoH9.js.gz +0 -0
- package/dist/web/assets/number-overlay-editor-Bsr04yCI.js.br +0 -0
- package/dist/web/assets/number-overlay-editor-Bsr04yCI.js.gz +0 -0
- package/dist/web/assets/nushell-DgeAQO7j.js.br +0 -0
- package/dist/web/assets/nushell-DgeAQO7j.js.gz +0 -0
- package/dist/web/assets/objective-c-CO0-Pacn.js.br +0 -0
- package/dist/web/assets/objective-c-CO0-Pacn.js.gz +0 -0
- package/dist/web/assets/objective-cpp-SkrjegYw.js.br +0 -0
- package/dist/web/assets/objective-cpp-SkrjegYw.js.gz +0 -0
- package/dist/web/assets/ocaml-CAihtkib.js.br +0 -0
- package/dist/web/assets/ocaml-CAihtkib.js.gz +0 -0
- package/dist/web/assets/odin-D0XZbUDB.js.br +0 -0
- package/dist/web/assets/odin-D0XZbUDB.js.gz +0 -0
- package/dist/web/assets/onboarding-entry-C81awoR5.js.br +0 -0
- package/dist/web/assets/onboarding-entry-C81awoR5.js.gz +0 -0
- package/dist/web/assets/onboarding-quick-orientation-Dqmis-E5.js.br +0 -0
- package/dist/web/assets/onboarding-quick-orientation-Dqmis-E5.js.gz +0 -0
- package/dist/web/assets/one-dark-pro-BUMNMxjX.js.br +0 -0
- package/dist/web/assets/one-dark-pro-BUMNMxjX.js.gz +0 -0
- package/dist/web/assets/one-light-C0Ui69Bx.js.br +0 -0
- package/dist/web/assets/one-light-C0Ui69Bx.js.gz +0 -0
- package/dist/web/assets/openscad-fZ9ggqM-.js.br +0 -0
- package/dist/web/assets/openscad-fZ9ggqM-.js.gz +0 -0
- package/dist/web/assets/overview-panel-9OdBcYJC.js.br +0 -0
- package/dist/web/assets/overview-panel-9OdBcYJC.js.gz +0 -0
- package/dist/web/assets/panel-store-D20Zuf3i.js.br +0 -0
- package/dist/web/assets/panel-store-D20Zuf3i.js.gz +0 -0
- package/dist/web/assets/pascal-DvZm-eun.js.br +0 -0
- package/dist/web/assets/pascal-DvZm-eun.js.gz +0 -0
- package/dist/web/assets/pdf-preview-DuR07OfN.js.br +0 -0
- package/dist/web/assets/pdf-preview-DuR07OfN.js.gz +0 -0
- package/dist/web/assets/perl-B6QNc69s.js.br +0 -0
- package/dist/web/assets/perl-B6QNc69s.js.gz +0 -0
- package/dist/web/assets/php-Bvwf1t96.js.br +0 -0
- package/dist/web/assets/php-Bvwf1t96.js.gz +0 -0
- package/dist/web/assets/pkl-CQSIp_z8.js.br +0 -0
- package/dist/web/assets/pkl-CQSIp_z8.js.gz +0 -0
- package/dist/web/assets/plastic-CMspsouJ.js.br +0 -0
- package/dist/web/assets/plastic-CMspsouJ.js.gz +0 -0
- package/dist/web/assets/plsql-B_HL7UfT.js.br +0 -0
- package/dist/web/assets/plsql-B_HL7UfT.js.gz +0 -0
- package/dist/web/assets/po-DxAfbdfe.js.br +0 -0
- package/dist/web/assets/po-DxAfbdfe.js.gz +0 -0
- package/dist/web/assets/poimandres-JGmqmwux.js.br +0 -0
- package/dist/web/assets/poimandres-JGmqmwux.js.gz +0 -0
- package/dist/web/assets/polar-_mNmplk8.js.br +0 -0
- package/dist/web/assets/polar-_mNmplk8.js.gz +0 -0
- package/dist/web/assets/postcss-GpU0Sjqc.js.br +0 -0
- package/dist/web/assets/postcss-GpU0Sjqc.js.gz +0 -0
- package/dist/web/assets/postgres-viewer-CGf7_g6Z.js.br +0 -0
- package/dist/web/assets/postgres-viewer-CGf7_g6Z.js.gz +0 -0
- package/dist/web/assets/powerquery-B1IP1lCQ.js.br +0 -0
- package/dist/web/assets/powerquery-B1IP1lCQ.js.gz +0 -0
- package/dist/web/assets/powershell-BiSO9XmG.js.br +0 -0
- package/dist/web/assets/powershell-BiSO9XmG.js.gz +0 -0
- package/dist/web/assets/ppmbot-settings-section-CDp69sHV.js.br +0 -0
- package/dist/web/assets/ppmbot-settings-section-CDp69sHV.js.gz +0 -0
- package/dist/web/assets/prisma-4QqDYSnH.js.br +0 -0
- package/dist/web/assets/prisma-4QqDYSnH.js.gz +0 -0
- package/dist/web/assets/problems-panel-BiE3c-31.js.br +0 -0
- package/dist/web/assets/problems-panel-BiE3c-31.js.gz +0 -0
- package/dist/web/assets/process-table-DcEq9HCl.js.br +0 -0
- package/dist/web/assets/process-table-DcEq9HCl.js.gz +0 -0
- package/dist/web/assets/project-store-hNvwfqX3.js.br +0 -0
- package/dist/web/assets/project-store-hNvwfqX3.js.gz +0 -0
- package/dist/web/assets/prolog-BNjvyRqT.js.br +0 -0
- package/dist/web/assets/prolog-BNjvyRqT.js.gz +0 -0
- package/dist/web/assets/proto-RNOumnkw.js.br +0 -0
- package/dist/web/assets/proto-RNOumnkw.js.gz +0 -0
- package/dist/web/assets/proxy-settings-section-P_ULFRpZ.js.br +0 -0
- package/dist/web/assets/proxy-settings-section-P_ULFRpZ.js.gz +0 -0
- package/dist/web/assets/pug-I8oitXP4.js.br +0 -0
- package/dist/web/assets/pug-I8oitXP4.js.gz +0 -0
- package/dist/web/assets/puppet-CDfv5o8f.js.br +0 -0
- package/dist/web/assets/puppet-CDfv5o8f.js.gz +0 -0
- package/dist/web/assets/purescript-YTjSoifd.js.br +0 -0
- package/dist/web/assets/purescript-YTjSoifd.js.gz +0 -0
- package/dist/web/assets/python-Mh7JD25U.js.br +0 -0
- package/dist/web/assets/python-Mh7JD25U.js.gz +0 -0
- package/dist/web/assets/qml-LKb7CHg-.js.br +0 -0
- package/dist/web/assets/qml-LKb7CHg-.js.gz +0 -0
- package/dist/web/assets/qss-DANVkyhy.js.br +0 -0
- package/dist/web/assets/qss-DANVkyhy.js.gz +0 -0
- package/dist/web/assets/query-audit-section-CpiXQVcS.js.br +0 -0
- package/dist/web/assets/query-audit-section-CpiXQVcS.js.gz +0 -0
- package/dist/web/assets/r-DHu15BOo.js.br +0 -0
- package/dist/web/assets/r-DHu15BOo.js.gz +0 -0
- package/dist/web/assets/racket-CwPOn4T1.js.br +0 -0
- package/dist/web/assets/racket-CwPOn4T1.js.gz +0 -0
- package/dist/web/assets/raku-B04lBsXd.js.br +0 -0
- package/dist/web/assets/raku-B04lBsXd.js.gz +0 -0
- package/dist/web/assets/razor-CIPT897U.js.br +0 -0
- package/dist/web/assets/razor-CIPT897U.js.gz +0 -0
- package/dist/web/assets/red-MW6Zm5pd.js.br +0 -0
- package/dist/web/assets/red-MW6Zm5pd.js.gz +0 -0
- package/dist/web/assets/reg-44SURM-E.js.br +0 -0
- package/dist/web/assets/reg-44SURM-E.js.gz +0 -0
- package/dist/web/assets/regexp-Vdt2OEkk.js.br +0 -0
- package/dist/web/assets/regexp-Vdt2OEkk.js.gz +0 -0
- package/dist/web/assets/rel-Gu5Erhpm.js.br +0 -0
- package/dist/web/assets/rel-Gu5Erhpm.js.gz +0 -0
- package/dist/web/assets/remote-desktop-clipboard-notice-COjdmADR.js.br +0 -0
- package/dist/web/assets/remote-desktop-clipboard-notice-COjdmADR.js.gz +0 -0
- package/dist/web/assets/remote-desktop-mobile-sheet-lCU5l2w4.js.br +0 -0
- package/dist/web/assets/remote-desktop-mobile-sheet-lCU5l2w4.js.gz +0 -0
- package/dist/web/assets/remote-desktop-mobile-view-Bo-wgZPC.js.br +0 -0
- package/dist/web/assets/remote-desktop-mobile-view-Bo-wgZPC.js.gz +0 -0
- package/dist/web/assets/remote-desktop-readiness-gate-Cqz8kqWG.js.br +0 -0
- package/dist/web/assets/remote-desktop-readiness-gate-Cqz8kqWG.js.gz +0 -0
- package/dist/web/assets/remote-desktop-window-content-R-aRW07B.js +0 -1
- package/dist/web/assets/remote-desktop-window-content-R-aRW07B.js.br +0 -0
- package/dist/web/assets/remote-desktop-window-content-R-aRW07B.js.gz +0 -0
- package/dist/web/assets/resolve-theme-BNubecVz.js.br +0 -0
- package/dist/web/assets/resolve-theme-BNubecVz.js.gz +0 -0
- package/dist/web/assets/riscv-DZDP0Ce7.js.br +0 -0
- package/dist/web/assets/riscv-DZDP0Ce7.js.gz +0 -0
- package/dist/web/assets/ron-BwLObbl6.js.br +0 -0
- package/dist/web/assets/ron-BwLObbl6.js.gz +0 -0
- package/dist/web/assets/rose-pine-Bz6ToXok.js.br +0 -0
- package/dist/web/assets/rose-pine-Bz6ToXok.js.gz +0 -0
- package/dist/web/assets/rose-pine-dawn-LyFogzAh.js.br +0 -0
- package/dist/web/assets/rose-pine-dawn-LyFogzAh.js.gz +0 -0
- package/dist/web/assets/rose-pine-moon-CpjkefjD.js.br +0 -0
- package/dist/web/assets/rose-pine-moon-CpjkefjD.js.gz +0 -0
- package/dist/web/assets/rosmsg-BldDLaz1.js.br +0 -0
- package/dist/web/assets/rosmsg-BldDLaz1.js.gz +0 -0
- package/dist/web/assets/rst-BpcmfJFA.js.br +0 -0
- package/dist/web/assets/rst-BpcmfJFA.js.gz +0 -0
- package/dist/web/assets/ruby-Cx413jgE.js.br +0 -0
- package/dist/web/assets/ruby-Cx413jgE.js.gz +0 -0
- package/dist/web/assets/rust-74skZ8CC.js.br +0 -0
- package/dist/web/assets/rust-74skZ8CC.js.gz +0 -0
- package/dist/web/assets/sas-B3ui_NHy.js.br +0 -0
- package/dist/web/assets/sas-B3ui_NHy.js.gz +0 -0
- package/dist/web/assets/sass-CitUFDWl.js.br +0 -0
- package/dist/web/assets/sass-CitUFDWl.js.gz +0 -0
- package/dist/web/assets/scala-D2kl5ghT.js.br +0 -0
- package/dist/web/assets/scala-D2kl5ghT.js.gz +0 -0
- package/dist/web/assets/schedules-settings-section-DHs84DvG.js.br +0 -0
- package/dist/web/assets/schedules-settings-section-DHs84DvG.js.gz +0 -0
- package/dist/web/assets/scheme-DZqhC9Xs.js.br +0 -0
- package/dist/web/assets/scheme-DZqhC9Xs.js.gz +0 -0
- package/dist/web/assets/scroll-area-C0fQWNnx.js.br +0 -0
- package/dist/web/assets/scroll-area-C0fQWNnx.js.gz +0 -0
- package/dist/web/assets/scss-V4NlXnGi.js.br +0 -0
- package/dist/web/assets/scss-V4NlXnGi.js.gz +0 -0
- package/dist/web/assets/sdbl-D6a8sHP9.js.br +0 -0
- package/dist/web/assets/sdbl-D6a8sHP9.js.gz +0 -0
- package/dist/web/assets/send-to-chat-C8l7AcV4.js.br +0 -0
- package/dist/web/assets/send-to-chat-C8l7AcV4.js.gz +0 -0
- package/dist/web/assets/settings-body-CLt6iutX.js.br +0 -0
- package/dist/web/assets/settings-body-CLt6iutX.js.gz +0 -0
- package/dist/web/assets/settings-store-tWrnlyEW.js +0 -2
- package/dist/web/assets/settings-store-tWrnlyEW.js.br +0 -0
- package/dist/web/assets/settings-store-tWrnlyEW.js.gz +0 -0
- package/dist/web/assets/shaderlab-Cf7qZ4DR.js.br +0 -0
- package/dist/web/assets/shaderlab-Cf7qZ4DR.js.gz +0 -0
- package/dist/web/assets/shellscript-DRxJLgrx.js.br +0 -0
- package/dist/web/assets/shellscript-DRxJLgrx.js.gz +0 -0
- package/dist/web/assets/slack-dark-DrlPLUB_.js.br +0 -0
- package/dist/web/assets/slack-dark-DrlPLUB_.js.gz +0 -0
- package/dist/web/assets/slack-ochin-Djgychog.js.br +0 -0
- package/dist/web/assets/slack-ochin-Djgychog.js.gz +0 -0
- package/dist/web/assets/smalltalk-CYQHXftK.js.br +0 -0
- package/dist/web/assets/smalltalk-CYQHXftK.js.gz +0 -0
- package/dist/web/assets/snazzy-light-BQAdF14K.js.br +0 -0
- package/dist/web/assets/snazzy-light-BQAdF14K.js.gz +0 -0
- package/dist/web/assets/solarized-dark-JDtJfY-g.js.br +0 -0
- package/dist/web/assets/solarized-dark-JDtJfY-g.js.gz +0 -0
- package/dist/web/assets/solarized-light-DHzVPLDD.js.br +0 -0
- package/dist/web/assets/solarized-light-DHzVPLDD.js.gz +0 -0
- package/dist/web/assets/solidity-CYCEiPu1.js.br +0 -0
- package/dist/web/assets/solidity-CYCEiPu1.js.gz +0 -0
- package/dist/web/assets/soy-CGKN9rxg.js.br +0 -0
- package/dist/web/assets/soy-CGKN9rxg.js.gz +0 -0
- package/dist/web/assets/sparql-CArCsIdI.js.br +0 -0
- package/dist/web/assets/sparql-CArCsIdI.js.gz +0 -0
- package/dist/web/assets/splunk-B7RHmJY2.js.br +0 -0
- package/dist/web/assets/splunk-B7RHmJY2.js.gz +0 -0
- package/dist/web/assets/sql-ljEiM8nf.js.br +0 -0
- package/dist/web/assets/sql-ljEiM8nf.js.gz +0 -0
- package/dist/web/assets/sql-query-editor-4Okd-7ss.js.br +0 -0
- package/dist/web/assets/sql-query-editor-4Okd-7ss.js.gz +0 -0
- package/dist/web/assets/sqlite-viewer-BqDUckIJ.js.br +0 -0
- package/dist/web/assets/sqlite-viewer-BqDUckIJ.js.gz +0 -0
- package/dist/web/assets/ssh-config-B74-n00O.js.br +0 -0
- package/dist/web/assets/ssh-config-B74-n00O.js.gz +0 -0
- package/dist/web/assets/stata-CplvndbA.js.br +0 -0
- package/dist/web/assets/stata-CplvndbA.js.gz +0 -0
- package/dist/web/assets/stylus-xlRhcbpN.js.br +0 -0
- package/dist/web/assets/stylus-xlRhcbpN.js.gz +0 -0
- package/dist/web/assets/surrealql-DwX1PCpP.js.br +0 -0
- package/dist/web/assets/surrealql-DwX1PCpP.js.gz +0 -0
- package/dist/web/assets/svelte-DYCNmQjy.js.br +0 -0
- package/dist/web/assets/svelte-DYCNmQjy.js.gz +0 -0
- package/dist/web/assets/swift-DTFwWJtu.js.br +0 -0
- package/dist/web/assets/swift-DTFwWJtu.js.gz +0 -0
- package/dist/web/assets/synthwave-84-BuCpuX2E.js.br +0 -0
- package/dist/web/assets/synthwave-84-BuCpuX2E.js.gz +0 -0
- package/dist/web/assets/system-monitor-body-Ssmt-r5H.js.br +0 -0
- package/dist/web/assets/system-monitor-body-Ssmt-r5H.js.gz +0 -0
- package/dist/web/assets/system-verilog-CgxJCrOK.js.br +0 -0
- package/dist/web/assets/system-verilog-CgxJCrOK.js.gz +0 -0
- package/dist/web/assets/systemd-D0x7_XYJ.js.br +0 -0
- package/dist/web/assets/systemd-D0x7_XYJ.js.gz +0 -0
- package/dist/web/assets/tab-host-window-content--BVyPR1f.js.br +0 -0
- package/dist/web/assets/tab-host-window-content--BVyPR1f.js.gz +0 -0
- package/dist/web/assets/talonscript-B50aQRuc.js.br +0 -0
- package/dist/web/assets/talonscript-B50aQRuc.js.gz +0 -0
- package/dist/web/assets/tasl-Byv8gHCL.js.br +0 -0
- package/dist/web/assets/tasl-Byv8gHCL.js.gz +0 -0
- package/dist/web/assets/tcl-CzMjCzWo.js.br +0 -0
- package/dist/web/assets/tcl-CzMjCzWo.js.gz +0 -0
- package/dist/web/assets/team-member-sheet-CE2eHuFX.js.br +0 -0
- package/dist/web/assets/team-member-sheet-CE2eHuFX.js.gz +0 -0
- package/dist/web/assets/team-member-window-content-B1sg0R4H.js.br +0 -0
- package/dist/web/assets/team-member-window-content-B1sg0R4H.js.gz +0 -0
- package/dist/web/assets/templ-b_h2-Z9l.js.br +0 -0
- package/dist/web/assets/templ-b_h2-Z9l.js.gz +0 -0
- package/dist/web/assets/terminal-tab-BrdS4bAy.js.br +0 -0
- package/dist/web/assets/terminal-tab-BrdS4bAy.js.gz +0 -0
- package/dist/web/assets/terraform-D6GH4CXG.js.br +0 -0
- package/dist/web/assets/terraform-D6GH4CXG.js.gz +0 -0
- package/dist/web/assets/tex-022M3-MR.js.br +0 -0
- package/dist/web/assets/tex-022M3-MR.js.gz +0 -0
- package/dist/web/assets/tokyo-night-CQ4rTpHY.js.br +0 -0
- package/dist/web/assets/tokyo-night-CQ4rTpHY.js.gz +0 -0
- package/dist/web/assets/toml-D9W-BuJE.js.br +0 -0
- package/dist/web/assets/toml-D9W-BuJE.js.gz +0 -0
- package/dist/web/assets/tool-cards-DzYJVhjl.js.br +0 -0
- package/dist/web/assets/tool-cards-DzYJVhjl.js.gz +0 -0
- package/dist/web/assets/ts-tags-BUl0AdO6.js.br +0 -0
- package/dist/web/assets/ts-tags-BUl0AdO6.js.gz +0 -0
- package/dist/web/assets/tsx-CKaH7SzK.js.br +0 -0
- package/dist/web/assets/tsx-CKaH7SzK.js.gz +0 -0
- package/dist/web/assets/turtle-BddVklvD.js.br +0 -0
- package/dist/web/assets/turtle-BddVklvD.js.gz +0 -0
- package/dist/web/assets/twig-CMzYUcSa.js.br +0 -0
- package/dist/web/assets/twig-CMzYUcSa.js.gz +0 -0
- package/dist/web/assets/typescript-DZozDFsi.js.br +0 -0
- package/dist/web/assets/typescript-DZozDFsi.js.gz +0 -0
- package/dist/web/assets/typespec-D60I2kfB.js.br +0 -0
- package/dist/web/assets/typespec-D60I2kfB.js.gz +0 -0
- package/dist/web/assets/typst-Bxvc-9ID.js.br +0 -0
- package/dist/web/assets/typst-Bxvc-9ID.js.gz +0 -0
- package/dist/web/assets/use-inline-blame-CKu-Sd-l.js.br +0 -0
- package/dist/web/assets/use-inline-blame-CKu-Sd-l.js.gz +0 -0
- package/dist/web/assets/use-lsp-BaG0NUXY.js.br +0 -0
- package/dist/web/assets/use-lsp-BaG0NUXY.js.gz +0 -0
- package/dist/web/assets/utils-Bmf_8h7Y.js.br +0 -0
- package/dist/web/assets/utils-Bmf_8h7Y.js.gz +0 -0
- package/dist/web/assets/v-kVYZE10o.js.br +0 -0
- package/dist/web/assets/v-kVYZE10o.js.gz +0 -0
- package/dist/web/assets/vala-B3zj44PV.js.br +0 -0
- package/dist/web/assets/vala-B3zj44PV.js.gz +0 -0
- package/dist/web/assets/vb-CHgWrFTj.js.br +0 -0
- package/dist/web/assets/vb-CHgWrFTj.js.gz +0 -0
- package/dist/web/assets/vendor-markdown-CuWCHIVb.js.br +0 -0
- package/dist/web/assets/vendor-markdown-CuWCHIVb.js.gz +0 -0
- package/dist/web/assets/vendor-mermaid-D6lgjvVE.js.br +0 -0
- package/dist/web/assets/vendor-mermaid-D6lgjvVE.js.gz +0 -0
- package/dist/web/assets/vendor-ui-DmZ-Mb-H.js.br +0 -0
- package/dist/web/assets/vendor-ui-DmZ-Mb-H.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/vendor-xterm-_yyu5n32.js.br +0 -0
- package/dist/web/assets/vendor-xterm-_yyu5n32.js.gz +0 -0
- package/dist/web/assets/verilog-zIMuE3hE.js.br +0 -0
- package/dist/web/assets/verilog-zIMuE3hE.js.gz +0 -0
- package/dist/web/assets/vesper-BjqPTQr0.js.br +0 -0
- package/dist/web/assets/vesper-BjqPTQr0.js.gz +0 -0
- package/dist/web/assets/vhdl-Q2EtgpQN.js.br +0 -0
- package/dist/web/assets/vhdl-Q2EtgpQN.js.gz +0 -0
- package/dist/web/assets/video-preview-ZyRR49Lr.js +0 -1
- package/dist/web/assets/video-preview-ZyRR49Lr.js.br +0 -0
- package/dist/web/assets/video-preview-ZyRR49Lr.js.gz +0 -0
- package/dist/web/assets/viml-CrtDZkFz.js.br +0 -0
- package/dist/web/assets/viml-CrtDZkFz.js.gz +0 -0
- package/dist/web/assets/vitesse-black-D2VWO3oN.js.br +0 -0
- package/dist/web/assets/vitesse-black-D2VWO3oN.js.gz +0 -0
- package/dist/web/assets/vitesse-dark-lleZmHBJ.js.br +0 -0
- package/dist/web/assets/vitesse-dark-lleZmHBJ.js.gz +0 -0
- package/dist/web/assets/vitesse-light-utUY298S.js.br +0 -0
- package/dist/web/assets/vitesse-light-utUY298S.js.gz +0 -0
- package/dist/web/assets/vue-D83SsURi.js.br +0 -0
- package/dist/web/assets/vue-D83SsURi.js.gz +0 -0
- package/dist/web/assets/vue-html-BGU-OYYb.js.br +0 -0
- package/dist/web/assets/vue-html-BGU-OYYb.js.gz +0 -0
- package/dist/web/assets/vue-vine-1sHE1gZn.js.br +0 -0
- package/dist/web/assets/vue-vine-1sHE1gZn.js.gz +0 -0
- package/dist/web/assets/vyper-LQ1KxOUo.js.br +0 -0
- package/dist/web/assets/vyper-LQ1KxOUo.js.gz +0 -0
- package/dist/web/assets/wasm-B-mpMVDM.js.br +0 -0
- package/dist/web/assets/wasm-B-mpMVDM.js.gz +0 -0
- package/dist/web/assets/wasm-CJ9U4zWg.js.br +0 -0
- package/dist/web/assets/wasm-CJ9U4zWg.js.gz +0 -0
- package/dist/web/assets/wenyan-LqMyA7px.js.br +0 -0
- package/dist/web/assets/wenyan-LqMyA7px.js.gz +0 -0
- package/dist/web/assets/wgsl-eI4U21sm.js.br +0 -0
- package/dist/web/assets/wgsl-eI4U21sm.js.gz +0 -0
- package/dist/web/assets/wikitext-CuWC2dfS.js.br +0 -0
- package/dist/web/assets/wikitext-CuWC2dfS.js.gz +0 -0
- package/dist/web/assets/window-store-UC1jJeLM.js.br +0 -0
- package/dist/web/assets/window-store-UC1jJeLM.js.gz +0 -0
- package/dist/web/assets/wit-CCPY0MNz.js.br +0 -0
- package/dist/web/assets/wit-CCPY0MNz.js.gz +0 -0
- package/dist/web/assets/wolfram-CXhjyJun.js.br +0 -0
- package/dist/web/assets/wolfram-CXhjyJun.js.gz +0 -0
- package/dist/web/assets/xml-bWQJszMK.js.br +0 -0
- package/dist/web/assets/xml-bWQJszMK.js.gz +0 -0
- package/dist/web/assets/xsl-DTMc1Tsm.js.br +0 -0
- package/dist/web/assets/xsl-DTMc1Tsm.js.gz +0 -0
- package/dist/web/assets/yaml-4pzZq5KT.js.br +0 -0
- package/dist/web/assets/yaml-4pzZq5KT.js.gz +0 -0
- package/dist/web/assets/zenscript-BzHPI08Q.js.br +0 -0
- package/dist/web/assets/zenscript-BzHPI08Q.js.gz +0 -0
- package/dist/web/assets/zig-CBuhKUve.js.br +0 -0
- package/dist/web/assets/zig-CBuhKUve.js.gz +0 -0
- package/dist/web/index.html.br +0 -0
- package/dist/web/index.html.gz +0 -0
- package/dist/web/sw.js.br +0 -0
- package/dist/web/sw.js.gz +0 -0
- package/packages/vscode-compat/node_modules/.bin/tsc.bunx +0 -0
- package/packages/vscode-compat/node_modules/.bin/tsc.exe +0 -0
- package/packages/vscode-compat/node_modules/.bin/tsserver.bunx +0 -0
- package/packages/vscode-compat/node_modules/.bin/tsserver.exe +0 -0
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP sign-in flows.
|
|
3
|
+
*
|
|
4
|
+
* Each flow owns one prompt-less Claude subprocess for its whole life, and that is not a
|
|
5
|
+
* detail: when the CLI redirects to its own `http://localhost:<port>/callback`, the
|
|
6
|
+
* listener runs inside that process, so closing it early strands the browser on a dead
|
|
7
|
+
* page. The subprocess is closed as soon as the flow settles, or after `FLOW_TTL_MS`.
|
|
8
|
+
*
|
|
9
|
+
* The tokens the CLI stores are shared with every other Claude process on the machine
|
|
10
|
+
* (same credential store as an interactive `claude`), which is why a sign-in finished here
|
|
11
|
+
* is visible to chats — they only need to reconnect the server (see `onAuthorized`).
|
|
12
|
+
*/
|
|
13
|
+
import { randomUUID } from "node:crypto";
|
|
14
|
+
import type { McpControlHandle, OpenMcpControlQuery } from "./mcp-control-query.ts";
|
|
15
|
+
import { openClaudeMcpControlQuery, withTimeout } from "./mcp-control-query.ts";
|
|
16
|
+
|
|
17
|
+
export type McpAuthFlowStatus = "waiting" | "completing" | "done" | "failed" | "expired" | "cancelled";
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* What the browser is told about a flow. The `state` is not a field of its own, though it
|
|
21
|
+
* is inside `authUrl` — which only the authenticated user who started the flow can read.
|
|
22
|
+
*/
|
|
23
|
+
export interface McpAuthFlowView {
|
|
24
|
+
id: string;
|
|
25
|
+
serverName: string;
|
|
26
|
+
status: McpAuthFlowStatus;
|
|
27
|
+
authUrl?: string;
|
|
28
|
+
callbackExpected: boolean;
|
|
29
|
+
redirectScheme?: "localhost" | "custom";
|
|
30
|
+
error?: string;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
interface Flow extends McpAuthFlowView {
|
|
34
|
+
control: McpControlHandle | null;
|
|
35
|
+
state?: string;
|
|
36
|
+
/** Only set for a "custom" flow: the redirect URI the authorization server was given. */
|
|
37
|
+
redirectUri?: string;
|
|
38
|
+
expiryTimer?: ReturnType<typeof setTimeout>;
|
|
39
|
+
pollTimer?: ReturnType<typeof setInterval>;
|
|
40
|
+
polling?: boolean;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** Long enough to finish a real sign-in (2FA, SSO); short enough not to hoard a subprocess. */
|
|
44
|
+
const FLOW_TTL_MS = 10 * 60_000;
|
|
45
|
+
/** How often a localhost flow checks whether the CLI has finished exchanging the code. */
|
|
46
|
+
const POLL_MS = 2_000;
|
|
47
|
+
/** A settled flow stays readable this long, so a polling dialog sees how it ended. */
|
|
48
|
+
const SETTLED_RETENTION_MS = 5 * 60_000;
|
|
49
|
+
/** How long the CLI gets to produce a sign-in link (it registers a client first, over the network). */
|
|
50
|
+
const START_TIMEOUT_MS = 60_000;
|
|
51
|
+
/** Any other control request: status reads, reconnects, and exchanging the code. */
|
|
52
|
+
const REQUEST_TIMEOUT_MS = 45_000;
|
|
53
|
+
|
|
54
|
+
type AuthorizedListener = (serverName: string) => void;
|
|
55
|
+
|
|
56
|
+
export class McpOAuthFlows {
|
|
57
|
+
private flows = new Map<string, Flow>();
|
|
58
|
+
private listeners = new Set<AuthorizedListener>();
|
|
59
|
+
|
|
60
|
+
constructor(
|
|
61
|
+
private readonly open: OpenMcpControlQuery = openClaudeMcpControlQuery,
|
|
62
|
+
private readonly timing = {
|
|
63
|
+
ttlMs: FLOW_TTL_MS, pollMs: POLL_MS, retentionMs: SETTLED_RETENTION_MS,
|
|
64
|
+
startMs: START_TIMEOUT_MS, requestMs: REQUEST_TIMEOUT_MS,
|
|
65
|
+
},
|
|
66
|
+
) {}
|
|
67
|
+
|
|
68
|
+
/** Called with a server's name each time a sign-in for it succeeds. Returns an unsubscribe. */
|
|
69
|
+
onAuthorized(listener: AuthorizedListener): () => void {
|
|
70
|
+
this.listeners.add(listener);
|
|
71
|
+
return () => this.listeners.delete(listener);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
get(id: string): McpAuthFlowView | null {
|
|
75
|
+
const flow = this.flows.get(id);
|
|
76
|
+
return flow ? view(flow) : null;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Start signing in to `serverName` as a chat in `cwd` would see it. A flow already open
|
|
81
|
+
* for the same server is cancelled: only the newest sign-in link can still succeed.
|
|
82
|
+
*/
|
|
83
|
+
async start(serverName: string, cwd: string, redirectUri?: string): Promise<McpAuthFlowView> {
|
|
84
|
+
for (const f of this.flows.values()) {
|
|
85
|
+
if (f.serverName === serverName && isOpen(f.status)) this.settle(f, "cancelled");
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const t0 = Date.now();
|
|
89
|
+
console.log(`[mcp-oauth] ${serverName}: starting sign-in (cwd=${cwd}, redirect=${redirectUri ? "custom" : "localhost"})`);
|
|
90
|
+
const control = await this.open(cwd);
|
|
91
|
+
const flow: Flow = { id: randomUUID(), serverName, status: "waiting", callbackExpected: false, control };
|
|
92
|
+
this.flows.set(flow.id, flow);
|
|
93
|
+
try {
|
|
94
|
+
// Bounded: the expiry timer only starts once there is a link, so a CLI that never
|
|
95
|
+
// answers would otherwise hold its subprocess open for as long as PPM runs.
|
|
96
|
+
const res = await withTimeout(
|
|
97
|
+
control.query.mcpAuthenticate(serverName, redirectUri),
|
|
98
|
+
this.timing.startMs,
|
|
99
|
+
`${serverName} did not return a sign-in link. Try again.`,
|
|
100
|
+
);
|
|
101
|
+
console.log(`[mcp-oauth] ${serverName}: sign-in link ready in ${Date.now() - t0}ms (redirect=${res.redirectScheme ?? "none"}, flow=${flow.id})`);
|
|
102
|
+
// A newer sign-in for this server may have cancelled this one while the CLI answered.
|
|
103
|
+
if (!isOpen(flow.status)) return view(flow);
|
|
104
|
+
if (!res.requiresUserAction) {
|
|
105
|
+
this.settle(flow, "done");
|
|
106
|
+
return view(flow);
|
|
107
|
+
}
|
|
108
|
+
flow.authUrl = res.authUrl;
|
|
109
|
+
flow.callbackExpected = res.callbackExpected;
|
|
110
|
+
flow.redirectScheme = res.redirectScheme;
|
|
111
|
+
flow.state = res.state;
|
|
112
|
+
if (res.redirectScheme === "custom") flow.redirectUri = redirectUri;
|
|
113
|
+
} catch (e) {
|
|
114
|
+
this.settle(flow, "failed", errorMessage(e));
|
|
115
|
+
return view(flow);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
flow.expiryTimer = setTimeout(() => this.settle(flow, "expired", "The sign-in link expired. Start again."), this.timing.ttlMs);
|
|
119
|
+
// The CLI's own listener gets the code without telling anyone, so the only way to see
|
|
120
|
+
// it finish is to watch the server's status change.
|
|
121
|
+
if (flow.callbackExpected && flow.redirectScheme === "localhost") {
|
|
122
|
+
flow.pollTimer = setInterval(() => { void this.pollStatus(flow); }, this.timing.pollMs);
|
|
123
|
+
}
|
|
124
|
+
return view(flow);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/**
|
|
128
|
+
* Hand the redirect URL to the CLI — pasted by the user, or delivered by the public
|
|
129
|
+
* callback route. The CLI validates it against this flow's `state` itself.
|
|
130
|
+
*/
|
|
131
|
+
async submitCallback(id: string, callbackUrl: string): Promise<McpAuthFlowView> {
|
|
132
|
+
const flow = this.requireFlow(id);
|
|
133
|
+
if (flow.status !== "waiting") return view(flow);
|
|
134
|
+
if (!flow.control) return view(flow);
|
|
135
|
+
flow.status = "completing";
|
|
136
|
+
flow.error = undefined;
|
|
137
|
+
try {
|
|
138
|
+
// The public callback page waits on this; a proxy in front (Cloudflare gives up at
|
|
139
|
+
// 100 s) would otherwise show its own error page while the sign-in carries on.
|
|
140
|
+
await withTimeout(
|
|
141
|
+
flow.control.query.mcpSubmitOAuthCallbackUrl(flow.serverName, callbackUrl),
|
|
142
|
+
this.timing.requestMs,
|
|
143
|
+
`${flow.serverName} did not confirm the sign-in in time. Check the server's status, or start again.`,
|
|
144
|
+
);
|
|
145
|
+
this.settle(flow, "done");
|
|
146
|
+
} catch (e) {
|
|
147
|
+
// A mistyped or foreign URL leaves the CLI's flow open, so let the user try again.
|
|
148
|
+
if (isOpen(flow.status)) {
|
|
149
|
+
flow.status = "waiting";
|
|
150
|
+
flow.error = errorMessage(e);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return view(flow);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/** The flow a redirect's `state` parameter belongs to, if it is still waiting for one. */
|
|
157
|
+
findByState(state: string | null): Flow | null {
|
|
158
|
+
if (!state) return null;
|
|
159
|
+
for (const f of this.flows.values()) {
|
|
160
|
+
if (f.state === state && f.status === "waiting") return f;
|
|
161
|
+
}
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* For a claude.ai connector, whose grant never redirects anywhere: the user says they
|
|
167
|
+
* are done, and a reconnect tells whether that is true.
|
|
168
|
+
*/
|
|
169
|
+
async confirm(id: string): Promise<McpAuthFlowView> {
|
|
170
|
+
const flow = this.requireFlow(id);
|
|
171
|
+
if (flow.status !== "waiting" || !flow.control) return view(flow);
|
|
172
|
+
try {
|
|
173
|
+
await withTimeout(flow.control.query.reconnectMcpServer(flow.serverName), this.timing.requestMs, "reconnect timed out");
|
|
174
|
+
} catch { /* the status read below is what decides */ }
|
|
175
|
+
const status = await this.serverStatus(flow);
|
|
176
|
+
if (status === "connected") this.settle(flow, "done");
|
|
177
|
+
else flow.error = "The server still needs a sign-in. Finish granting access, then try again.";
|
|
178
|
+
return view(flow);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
cancel(id: string): McpAuthFlowView | null {
|
|
182
|
+
const flow = this.flows.get(id);
|
|
183
|
+
if (!flow) return null;
|
|
184
|
+
if (isOpen(flow.status)) this.settle(flow, "cancelled");
|
|
185
|
+
return view(flow);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/** Close every subprocess — for server shutdown and tests. */
|
|
189
|
+
disposeAll(): void {
|
|
190
|
+
for (const f of this.flows.values()) {
|
|
191
|
+
if (isOpen(f.status)) this.settle(f, "cancelled");
|
|
192
|
+
}
|
|
193
|
+
this.flows.clear();
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
private async pollStatus(flow: Flow): Promise<void> {
|
|
197
|
+
// One read at a time: a CLI that stops answering must not collect a request per tick.
|
|
198
|
+
if (flow.status !== "waiting" || flow.polling) return;
|
|
199
|
+
flow.polling = true;
|
|
200
|
+
try {
|
|
201
|
+
const status = await this.serverStatus(flow);
|
|
202
|
+
if (flow.status === "waiting" && status === "connected") this.settle(flow, "done");
|
|
203
|
+
} finally {
|
|
204
|
+
flow.polling = false;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
private async serverStatus(flow: Flow): Promise<string | null> {
|
|
209
|
+
if (!flow.control) return null;
|
|
210
|
+
try {
|
|
211
|
+
const all = await withTimeout(flow.control.query.mcpServerStatus(), this.timing.requestMs, "status timed out");
|
|
212
|
+
return all.find((s) => s.name === flow.serverName)?.status ?? null;
|
|
213
|
+
} catch {
|
|
214
|
+
return null;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
private settle(flow: Flow, status: McpAuthFlowStatus, error?: string): void {
|
|
219
|
+
if (!isOpen(flow.status)) return;
|
|
220
|
+
console.log(`[mcp-oauth] ${flow.serverName}: sign-in ${status}${error ? ` — ${error}` : ""} (flow=${flow.id})`);
|
|
221
|
+
flow.status = status;
|
|
222
|
+
flow.error = error;
|
|
223
|
+
if (flow.expiryTimer) clearTimeout(flow.expiryTimer);
|
|
224
|
+
if (flow.pollTimer) clearInterval(flow.pollTimer);
|
|
225
|
+
flow.expiryTimer = undefined;
|
|
226
|
+
flow.pollTimer = undefined;
|
|
227
|
+
try { flow.control?.close(); } catch { /* already gone */ }
|
|
228
|
+
flow.control = null;
|
|
229
|
+
// The state is single-use; forgetting it keeps a replayed redirect from matching.
|
|
230
|
+
flow.state = undefined;
|
|
231
|
+
if (status === "done") {
|
|
232
|
+
for (const l of this.listeners) {
|
|
233
|
+
try { l(flow.serverName); } catch (e) { console.warn(`[mcp-oauth] listener failed: ${errorMessage(e)}`); }
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
const timer = setTimeout(() => this.flows.delete(flow.id), this.timing.retentionMs);
|
|
237
|
+
(timer as { unref?: () => void }).unref?.();
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
private requireFlow(id: string): Flow {
|
|
241
|
+
const flow = this.flows.get(id);
|
|
242
|
+
if (!flow) throw new McpAuthFlowNotFoundError();
|
|
243
|
+
return flow;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
export class McpAuthFlowNotFoundError extends Error {
|
|
248
|
+
constructor() { super("This sign-in is no longer active. Start again."); }
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
function isOpen(status: McpAuthFlowStatus): boolean {
|
|
252
|
+
return status === "waiting" || status === "completing";
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
function view(f: Flow): McpAuthFlowView {
|
|
256
|
+
return {
|
|
257
|
+
id: f.id,
|
|
258
|
+
serverName: f.serverName,
|
|
259
|
+
status: f.status,
|
|
260
|
+
callbackExpected: f.callbackExpected,
|
|
261
|
+
...(f.authUrl && isOpen(f.status) && { authUrl: f.authUrl }),
|
|
262
|
+
...(f.redirectScheme && { redirectScheme: f.redirectScheme }),
|
|
263
|
+
...(f.error && { error: f.error }),
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
function errorMessage(e: unknown): string {
|
|
268
|
+
return e instanceof Error ? e.message : String(e);
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
export const mcpOAuthFlows = new McpOAuthFlows();
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure decisions for MCP sign-in: where the authorization server sends the browser back
|
|
3
|
+
* to, and which servers need a sign-in at all. Kept free of imports so they can be unit
|
|
4
|
+
* tested without a CLI or a database.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/** Public route that receives the authorization server's redirect and hands it to the CLI. */
|
|
8
|
+
export const MCP_OAUTH_CALLBACK_PATH = "/api/mcp-auth/callback";
|
|
9
|
+
|
|
10
|
+
/** The subset of the SDK's `McpServerStatus` PPM passes around. */
|
|
11
|
+
export interface McpServerState {
|
|
12
|
+
name: string;
|
|
13
|
+
status: string;
|
|
14
|
+
error?: string;
|
|
15
|
+
scope?: string;
|
|
16
|
+
source?: string;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* The redirect URI to ask the CLI for, or undefined to let it use its own
|
|
21
|
+
* `http://localhost:<port>/callback` listener.
|
|
22
|
+
*
|
|
23
|
+
* A redirect back to PPM is what makes a sign-in finish when the browser is not on the
|
|
24
|
+
* host machine (a phone over a tunnel): the CLI's localhost listener is only reachable
|
|
25
|
+
* from the host itself. It is offered only for an https origin, because authorization
|
|
26
|
+
* servers refuse plain-http redirects to anything but loopback, and only when the origin
|
|
27
|
+
* the browser reports is the host this request actually arrived on — otherwise a crafted
|
|
28
|
+
* origin could have the authorization code delivered to somebody else's server.
|
|
29
|
+
*/
|
|
30
|
+
export function customRedirectUri(
|
|
31
|
+
origin: string | undefined,
|
|
32
|
+
requestHosts: Array<string | undefined>,
|
|
33
|
+
): string | undefined {
|
|
34
|
+
if (!origin) return undefined;
|
|
35
|
+
let url: URL;
|
|
36
|
+
try { url = new URL(origin); } catch { return undefined; }
|
|
37
|
+
if (url.protocol !== "https:" || url.username || url.password) return undefined;
|
|
38
|
+
const hosts = requestHosts
|
|
39
|
+
.flatMap((h) => (h ?? "").split(","))
|
|
40
|
+
.map((h) => h.trim().toLowerCase())
|
|
41
|
+
.filter(Boolean);
|
|
42
|
+
if (!hosts.includes(url.host.toLowerCase())) return undefined;
|
|
43
|
+
return `${url.origin}${MCP_OAUTH_CALLBACK_PATH}`;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/** Names of the servers waiting for a sign-in, in the order the CLI reported them. */
|
|
47
|
+
export function needsAuthServerNames(servers: unknown): string[] {
|
|
48
|
+
if (!Array.isArray(servers)) return [];
|
|
49
|
+
const names: string[] = [];
|
|
50
|
+
for (const s of servers) {
|
|
51
|
+
if (s && typeof s === "object" && (s as { status?: unknown }).status === "needs-auth") {
|
|
52
|
+
const name = (s as { name?: unknown }).name;
|
|
53
|
+
if (typeof name === "string" && name && !names.includes(name)) names.push(name);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return names;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Rebuild the redirect the CLI is waiting for from the query string that reached PPM.
|
|
61
|
+
* The request URL itself cannot be forwarded: behind a tunnel it names the local port,
|
|
62
|
+
* not the redirect URI the sign-in was started with.
|
|
63
|
+
*/
|
|
64
|
+
export function callbackUrlFor(redirectUri: string, search: string): string {
|
|
65
|
+
const url = new URL(redirectUri);
|
|
66
|
+
url.search = search.startsWith("?") ? search.slice(1) : search;
|
|
67
|
+
return url.href;
|
|
68
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP server status as a chat in a given directory would see it, for screens that have no
|
|
3
|
+
* chat to ask (the AI Resources list).
|
|
4
|
+
*
|
|
5
|
+
* Every probe starts a Claude subprocess, which in turn connects every configured MCP
|
|
6
|
+
* server — stdio ones included — so answers are cached per directory and concurrent
|
|
7
|
+
* callers share one probe.
|
|
8
|
+
*/
|
|
9
|
+
import type { OpenMcpControlQuery } from "./mcp-control-query.ts";
|
|
10
|
+
import { openClaudeMcpControlQuery, withTimeout } from "./mcp-control-query.ts";
|
|
11
|
+
import type { McpServerState } from "./mcp-oauth-redirect.ts";
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Long, because a probe is not free: it starts a full CLI, which loads every plugin and
|
|
15
|
+
* spawns every stdio MCP server. A sign-in invalidates it, and the list's refresh button
|
|
16
|
+
* asks for a fresh answer, so nothing that changes it here goes unseen.
|
|
17
|
+
*/
|
|
18
|
+
const CACHE_MS = 5 * 60_000;
|
|
19
|
+
/** Servers start "pending"; wait this long for them to settle before answering anyway. */
|
|
20
|
+
const SETTLE_MS = 5_000;
|
|
21
|
+
const SETTLE_POLL_MS = 500;
|
|
22
|
+
/** The first read includes the subprocess starting up and loading plugins. */
|
|
23
|
+
const READ_TIMEOUT_MS = 30_000;
|
|
24
|
+
|
|
25
|
+
export class McpStatusProbe {
|
|
26
|
+
private cache = new Map<string, { at: number; servers: McpServerState[] }>();
|
|
27
|
+
private inFlight = new Map<string, Promise<McpServerState[]>>();
|
|
28
|
+
|
|
29
|
+
constructor(
|
|
30
|
+
private readonly open: OpenMcpControlQuery = openClaudeMcpControlQuery,
|
|
31
|
+
private readonly timing = { cacheMs: CACHE_MS, settleMs: SETTLE_MS, pollMs: SETTLE_POLL_MS, readMs: READ_TIMEOUT_MS },
|
|
32
|
+
) {}
|
|
33
|
+
|
|
34
|
+
async status(cwd: string, opts: { fresh?: boolean } = {}): Promise<McpServerState[]> {
|
|
35
|
+
const cached = this.cache.get(cwd);
|
|
36
|
+
if (!opts.fresh && cached && Date.now() - cached.at < this.timing.cacheMs) return cached.servers;
|
|
37
|
+
const running = this.inFlight.get(cwd);
|
|
38
|
+
if (running) return running;
|
|
39
|
+
|
|
40
|
+
const probe = this.probe(cwd).finally(() => this.inFlight.delete(cwd));
|
|
41
|
+
this.inFlight.set(cwd, probe);
|
|
42
|
+
return probe;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/** Forget every cached answer — a sign-in just changed what they would say. */
|
|
46
|
+
invalidate(): void {
|
|
47
|
+
this.cache.clear();
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
private async probe(cwd: string): Promise<McpServerState[]> {
|
|
51
|
+
const control = await this.open(cwd);
|
|
52
|
+
// Every caller for this directory shares this probe, so it has to end even if the CLI
|
|
53
|
+
// stops answering.
|
|
54
|
+
const read = () => withTimeout(control.query.mcpServerStatus(), this.timing.readMs, "Claude did not report MCP status");
|
|
55
|
+
try {
|
|
56
|
+
const deadline = Date.now() + this.timing.settleMs;
|
|
57
|
+
let servers = await read();
|
|
58
|
+
while (servers.some((s) => s.status === "pending") && Date.now() < deadline) {
|
|
59
|
+
await new Promise((r) => setTimeout(r, this.timing.pollMs));
|
|
60
|
+
servers = await read();
|
|
61
|
+
}
|
|
62
|
+
const slim = servers.map(({ name, status, error, scope, source }) => ({
|
|
63
|
+
name, status,
|
|
64
|
+
...(error && { error }),
|
|
65
|
+
...(scope && { scope }),
|
|
66
|
+
...(source && { source }),
|
|
67
|
+
}));
|
|
68
|
+
this.cache.set(cwd, { at: Date.now(), servers: slim });
|
|
69
|
+
return slim;
|
|
70
|
+
} finally {
|
|
71
|
+
control.close();
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export const mcpStatusProbe = new McpStatusProbe();
|