@hienlh/ppm 0.23.10 → 0.23.12
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 +43 -1
- package/CLAUDE.md +23 -3
- 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 +43 -1
- package/bun.lock +34 -0
- package/dist/web/assets/_basePickBy-BEVUuplK.js +1 -0
- package/dist/web/assets/_basePickBy-BEVUuplK.js.br +0 -0
- package/dist/web/assets/_basePickBy-BEVUuplK.js.gz +0 -0
- package/dist/web/assets/_baseUniq-qb_BgEfK.js +1 -0
- package/dist/web/assets/_baseUniq-qb_BgEfK.js.br +0 -0
- package/dist/web/assets/_baseUniq-qb_BgEfK.js.gz +0 -0
- package/dist/web/assets/accounts-settings-section-CGe5ikvs.js +1 -0
- package/dist/web/assets/accounts-settings-section-CGe5ikvs.js.br +0 -0
- package/dist/web/assets/accounts-settings-section-CGe5ikvs.js.gz +0 -0
- package/dist/web/assets/agent-session-sheet-vBhfHYrC.js +2 -0
- package/dist/web/assets/agent-session-sheet-vBhfHYrC.js.br +0 -0
- package/dist/web/assets/agent-session-sheet-vBhfHYrC.js.gz +0 -0
- package/dist/web/assets/agent-session-window-content-BxIxDN5i.js +1 -0
- package/dist/web/assets/agent-session-window-content-BxIxDN5i.js.br +0 -0
- package/dist/web/assets/agent-session-window-content-BxIxDN5i.js.gz +0 -0
- package/dist/web/assets/ai-resource-editor-Y8clBPRv.js +1 -0
- package/dist/web/assets/ai-resource-editor-Y8clBPRv.js.br +0 -0
- package/dist/web/assets/ai-resource-editor-Y8clBPRv.js.gz +0 -0
- package/dist/web/assets/ai-settings-section-BB8vscte.js +1 -0
- package/dist/web/assets/ai-settings-section-Ck8uN_Bw.js +1 -0
- package/dist/web/assets/ai-settings-section-Ck8uN_Bw.js.br +0 -0
- package/dist/web/assets/ai-settings-section-Ck8uN_Bw.js.gz +0 -0
- package/dist/web/assets/android-tab-BIOUVVoW.js +2 -0
- package/dist/web/assets/android-tab-BIOUVVoW.js.br +0 -0
- package/dist/web/assets/android-tab-BIOUVVoW.js.gz +0 -0
- package/dist/web/assets/angular-html-Djm1KT_p.js +1 -0
- package/dist/web/assets/angular-html-Djm1KT_p.js.br +0 -0
- package/dist/web/assets/angular-html-Djm1KT_p.js.gz +0 -0
- package/dist/web/assets/angular-ts-D8ZYU4i0.js +1 -0
- package/dist/web/assets/angular-ts-D8ZYU4i0.js.br +0 -0
- package/dist/web/assets/angular-ts-D8ZYU4i0.js.gz +0 -0
- package/dist/web/assets/api-settings-Cc_CpfmC.js +1 -0
- package/dist/web/assets/api-settings-Cc_CpfmC.js.br +0 -0
- package/dist/web/assets/api-settings-Cc_CpfmC.js.gz +0 -0
- package/dist/web/assets/api-settings-D1axn9vm.js +1 -0
- package/dist/web/assets/apl-Bxk9ez2r.js +1 -0
- package/dist/web/assets/apl-Bxk9ez2r.js.br +0 -0
- package/dist/web/assets/apl-Bxk9ez2r.js.gz +0 -0
- package/dist/web/assets/appearance-settings-section-Bv5_n9lH.js +1 -0
- package/dist/web/assets/appearance-settings-section-Bv5_n9lH.js.br +0 -0
- package/dist/web/assets/appearance-settings-section-Bv5_n9lH.js.gz +0 -0
- package/dist/web/assets/apps-panel-DXHF0QEv.js +1 -0
- package/dist/web/assets/apps-panel-DXHF0QEv.js.br +0 -0
- package/dist/web/assets/apps-panel-DXHF0QEv.js.gz +0 -0
- package/dist/web/assets/arc-CrBOnruw.js +1 -0
- package/dist/web/assets/arc-CrBOnruw.js.br +0 -0
- package/dist/web/assets/arc-CrBOnruw.js.gz +0 -0
- package/dist/web/assets/architecture-PBZL5I3N-bv6Z6ZTl.js +1 -0
- package/dist/web/assets/architectureDiagram-2XIMDMQ5-sFj2GCA0.js +36 -0
- package/dist/web/assets/architectureDiagram-2XIMDMQ5-sFj2GCA0.js.br +0 -0
- package/dist/web/assets/architectureDiagram-2XIMDMQ5-sFj2GCA0.js.gz +0 -0
- package/dist/web/assets/astro-CCE8GTuJ.js +1 -0
- package/dist/web/assets/astro-CCE8GTuJ.js.br +0 -0
- package/dist/web/assets/astro-CCE8GTuJ.js.gz +0 -0
- package/dist/web/assets/audio-preview-DpjOKEm4.js +1 -0
- package/dist/web/assets/audio-preview-DpjOKEm4.js.br +0 -0
- package/dist/web/assets/audio-preview-DpjOKEm4.js.gz +0 -0
- package/dist/web/assets/blade-pJLFJ0pe.js +1 -0
- package/dist/web/assets/blade-pJLFJ0pe.js.br +0 -0
- package/dist/web/assets/blade-pJLFJ0pe.js.gz +0 -0
- package/dist/web/assets/blockDiagram-WCTKOSBZ-DFag_MHk.js +132 -0
- package/dist/web/assets/blockDiagram-WCTKOSBZ-DFag_MHk.js.br +0 -0
- package/dist/web/assets/blockDiagram-WCTKOSBZ-DFag_MHk.js.gz +0 -0
- package/dist/web/assets/branch-review-tab-4dgMNadQ.js +1 -0
- package/dist/web/assets/branch-review-tab-4dgMNadQ.js.br +0 -0
- package/dist/web/assets/branch-review-tab-4dgMNadQ.js.gz +0 -0
- package/dist/web/assets/bsl-DJPQP6gj.js +1 -0
- package/dist/web/assets/bsl-DJPQP6gj.js.br +0 -0
- package/dist/web/assets/bsl-DJPQP6gj.js.gz +0 -0
- package/dist/web/assets/c4Diagram-IC4MRINW-Bs9OCCbR.js +10 -0
- package/dist/web/assets/c4Diagram-IC4MRINW-Bs9OCCbR.js.br +0 -0
- package/dist/web/assets/c4Diagram-IC4MRINW-Bs9OCCbR.js.gz +0 -0
- package/dist/web/assets/cairo-6pdze4qN.js +1 -0
- package/dist/web/assets/cairo-6pdze4qN.js.br +0 -0
- package/dist/web/assets/cairo-6pdze4qN.js.gz +0 -0
- package/dist/web/assets/channel-C97aABFT.js +1 -0
- package/dist/web/assets/chat-tab-Bbe_77oJ.js +15 -0
- package/dist/web/assets/chat-tab-Bbe_77oJ.js.br +0 -0
- package/dist/web/assets/chat-tab-Bbe_77oJ.js.gz +0 -0
- package/dist/web/assets/chat-tab-D3i5O3dO.js +1 -0
- package/dist/web/assets/chat-tab-D3i5O3dO.js.br +0 -0
- package/dist/web/assets/chat-tab-D3i5O3dO.js.gz +0 -0
- package/dist/web/assets/chunk-4BX2VUAB-Dd8hGWzs.js +1 -0
- package/dist/web/assets/chunk-55IACEB6-BUOmRdCb.js +1 -0
- package/dist/web/assets/chunk-7E7YKBS2-D5i9aZ57.js +1 -0
- package/dist/web/assets/chunk-7R4GIKGN-DBr9s6EE.js +80 -0
- package/dist/web/assets/chunk-7R4GIKGN-DBr9s6EE.js.br +0 -0
- package/dist/web/assets/chunk-7R4GIKGN-DBr9s6EE.js.gz +0 -0
- package/dist/web/assets/chunk-C72U2L5F-CEUvONYx.js +1 -0
- package/dist/web/assets/chunk-EGIJ26TM-BG89sF-p.js +1 -0
- package/dist/web/assets/chunk-FMBD7UC4-BDtpoO-Q.js +15 -0
- package/dist/web/assets/chunk-GEFDOKGD-lFQnV7FQ.js +2 -0
- package/dist/web/assets/chunk-GEFDOKGD-lFQnV7FQ.js.br +0 -0
- package/dist/web/assets/chunk-GEFDOKGD-lFQnV7FQ.js.gz +0 -0
- package/dist/web/assets/chunk-GLR3WWYH-CBQYONd8.js +2 -0
- package/dist/web/assets/chunk-GLR3WWYH-CBQYONd8.js.br +0 -0
- package/dist/web/assets/chunk-GLR3WWYH-CBQYONd8.js.gz +0 -0
- package/dist/web/assets/chunk-HHEYEP7N-Cz5o2sXg.js +1 -0
- package/dist/web/assets/chunk-JSJVCQXG-FBF1o1AC.js +1 -0
- package/dist/web/assets/chunk-JSJVCQXG-FBF1o1AC.js.br +0 -0
- package/dist/web/assets/chunk-JSJVCQXG-FBF1o1AC.js.gz +0 -0
- package/dist/web/assets/chunk-KX2RTZJC-Dfwu46M7.js +1 -0
- package/dist/web/assets/chunk-KYZI473N-DQTRCz9g.js +53 -0
- package/dist/web/assets/chunk-KYZI473N-DQTRCz9g.js.br +0 -0
- package/dist/web/assets/chunk-KYZI473N-DQTRCz9g.js.gz +0 -0
- package/dist/web/assets/chunk-L3YUKLVL-DytBx0nd.js +1 -0
- package/dist/web/assets/chunk-MX3YWQON-Da7GPDei.js +1 -0
- package/dist/web/assets/chunk-MX3YWQON-Da7GPDei.js.br +0 -0
- package/dist/web/assets/chunk-MX3YWQON-Da7GPDei.js.gz +0 -0
- package/dist/web/assets/chunk-NQ4KR5QH-D9-qngPN.js +220 -0
- package/dist/web/assets/chunk-NQ4KR5QH-D9-qngPN.js.br +0 -0
- package/dist/web/assets/chunk-NQ4KR5QH-D9-qngPN.js.gz +0 -0
- package/dist/web/assets/chunk-O4XLMI2P-BFAbMP-p.js +7 -0
- package/dist/web/assets/chunk-O4XLMI2P-BFAbMP-p.js.br +0 -0
- package/dist/web/assets/chunk-O4XLMI2P-BFAbMP-p.js.gz +0 -0
- package/dist/web/assets/chunk-OZEHJAEY-DM7Vtv5V.js +1 -0
- package/dist/web/assets/chunk-OZEHJAEY-DM7Vtv5V.js.br +0 -0
- package/dist/web/assets/chunk-OZEHJAEY-DM7Vtv5V.js.gz +0 -0
- package/dist/web/assets/chunk-PQ6SQG4A-CfSY-HG3.js +1 -0
- package/dist/web/assets/chunk-PQ6SQG4A-CfSY-HG3.js.br +0 -0
- package/dist/web/assets/chunk-PQ6SQG4A-CfSY-HG3.js.gz +0 -0
- package/dist/web/assets/chunk-PU5JKC2W-BFI9jx5F.js +11 -0
- package/dist/web/assets/chunk-PU5JKC2W-BFI9jx5F.js.br +0 -0
- package/dist/web/assets/chunk-PU5JKC2W-BFI9jx5F.js.gz +0 -0
- package/dist/web/assets/chunk-QZHKN3VN-_jIwYKZ3.js +1 -0
- package/dist/web/assets/chunk-R5LLSJPH-CZY_f--s.js +1 -0
- package/dist/web/assets/chunk-WL4C6EOR-BUFIzsiK.js +189 -0
- package/dist/web/assets/chunk-WL4C6EOR-BUFIzsiK.js.br +0 -0
- package/dist/web/assets/chunk-WL4C6EOR-BUFIzsiK.js.gz +0 -0
- package/dist/web/assets/chunk-XIRO2GV7-BxPFOPRI.js +1 -0
- package/dist/web/assets/chunk-XPW4576I-DfOF_qdG.js +32 -0
- package/dist/web/assets/chunk-XPW4576I-DfOF_qdG.js.br +0 -0
- package/dist/web/assets/chunk-XPW4576I-DfOF_qdG.js.gz +0 -0
- package/dist/web/assets/chunk-XZSTWKYB-BNlQ8dIW.js +94 -0
- package/dist/web/assets/chunk-XZSTWKYB-BNlQ8dIW.js.br +0 -0
- package/dist/web/assets/chunk-XZSTWKYB-BNlQ8dIW.js.gz +0 -0
- package/dist/web/assets/chunk-YBOYWFTD-0Is1vHmh.js +1 -0
- package/dist/web/assets/classDiagram-VBA2DB6C-HwLNQY_4.js +1 -0
- package/dist/web/assets/classDiagram-v2-RAHNMMFH-CLUQCcjH.js +1 -0
- package/dist/web/assets/clone-B5kRZECd.js +1 -0
- package/dist/web/assets/cobol-6JrtZ3xT.js +1 -0
- package/dist/web/assets/cobol-6JrtZ3xT.js.br +0 -0
- package/dist/web/assets/cobol-6JrtZ3xT.js.gz +0 -0
- package/dist/web/assets/code-editor-DXsIWoQ1.js +7 -0
- package/dist/web/assets/code-editor-DXsIWoQ1.js.br +0 -0
- package/dist/web/assets/code-editor-DXsIWoQ1.js.gz +0 -0
- package/dist/web/assets/codex-reset-credit-button-DRhievFQ.js +1 -0
- package/dist/web/assets/codex-reset-credit-button-DRhievFQ.js.br +0 -0
- package/dist/web/assets/codex-reset-credit-button-DRhievFQ.js.gz +0 -0
- package/dist/web/assets/coffee-eR0Qd-vR.js +1 -0
- package/dist/web/assets/coffee-eR0Qd-vR.js.br +0 -0
- package/dist/web/assets/coffee-eR0Qd-vR.js.gz +0 -0
- package/dist/web/assets/conflict-editor-D_RImo_V.js +19 -0
- package/dist/web/assets/conflict-editor-D_RImo_V.js.br +0 -0
- package/dist/web/assets/conflict-editor-D_RImo_V.js.gz +0 -0
- package/dist/web/assets/cose-bilkent-S5V4N54A-CAPPRjYz.js +1 -0
- package/dist/web/assets/cose-bilkent-S5V4N54A-CAPPRjYz.js.br +0 -0
- package/dist/web/assets/cose-bilkent-S5V4N54A-CAPPRjYz.js.gz +0 -0
- package/dist/web/assets/cpp-Bp_Laxmd.js +1 -0
- package/dist/web/assets/cpp-Bp_Laxmd.js.br +0 -0
- package/dist/web/assets/cpp-Bp_Laxmd.js.gz +0 -0
- package/dist/web/assets/crystal-bc0lS6i8.js +1 -0
- package/dist/web/assets/crystal-bc0lS6i8.js.br +0 -0
- package/dist/web/assets/crystal-bc0lS6i8.js.gz +0 -0
- package/dist/web/assets/csv-preview-BuFdfLo3.js +2 -0
- package/dist/web/assets/csv-preview-BuFdfLo3.js.br +0 -0
- package/dist/web/assets/csv-preview-BuFdfLo3.js.gz +0 -0
- package/dist/web/assets/dagre-D__SE4Ki.js +1 -0
- package/dist/web/assets/dagre-D__SE4Ki.js.br +0 -0
- package/dist/web/assets/dagre-D__SE4Ki.js.gz +0 -0
- package/dist/web/assets/dagre-KLK3FWXG-By-0HuN_.js +4 -0
- package/dist/web/assets/dagre-KLK3FWXG-By-0HuN_.js.br +0 -0
- package/dist/web/assets/dagre-KLK3FWXG-By-0HuN_.js.gz +0 -0
- package/dist/web/assets/data-grid-overlay-editor-CeZoduke.js +1 -0
- package/dist/web/assets/data-grid-overlay-editor-CeZoduke.js.br +0 -0
- package/dist/web/assets/data-grid-overlay-editor-CeZoduke.js.gz +0 -0
- package/dist/web/assets/database-viewer-ChcbYn9E.js +1 -0
- package/dist/web/assets/database-viewer-ChcbYn9E.js.br +0 -0
- package/dist/web/assets/database-viewer-ChcbYn9E.js.gz +0 -0
- package/dist/web/assets/design-export-client-BfdZB7xK.js +1 -0
- package/dist/web/assets/design-export-client-BfdZB7xK.js.br +0 -0
- package/dist/web/assets/design-export-client-BfdZB7xK.js.gz +0 -0
- package/dist/web/assets/design-responsive-dialog-BiYy3ibS.js +1 -0
- package/dist/web/assets/design-responsive-dialog-BiYy3ibS.js.br +0 -0
- package/dist/web/assets/design-responsive-dialog-BiYy3ibS.js.gz +0 -0
- package/dist/web/assets/design-settings-section-B_xOf51h.js +2 -0
- package/dist/web/assets/design-settings-section-B_xOf51h.js.br +0 -0
- package/dist/web/assets/design-settings-section-B_xOf51h.js.gz +0 -0
- package/dist/web/assets/design-skill-suggestion-BbEDg15Z.js +3 -0
- package/dist/web/assets/design-skill-suggestion-BbEDg15Z.js.br +0 -0
- package/dist/web/assets/design-skill-suggestion-BbEDg15Z.js.gz +0 -0
- package/dist/web/assets/design-system-status-label-ekiLyjKn.js +1 -0
- package/dist/web/assets/design-tab-BQSYJ4cS.js +57 -0
- package/dist/web/assets/design-tab-BQSYJ4cS.js.br +0 -0
- package/dist/web/assets/design-tab-BQSYJ4cS.js.gz +0 -0
- package/dist/web/assets/designs-sidebar-panel-AiPaYfSU.js +1 -0
- package/dist/web/assets/designs-sidebar-panel-AiPaYfSU.js.br +0 -0
- package/dist/web/assets/designs-sidebar-panel-AiPaYfSU.js.gz +0 -0
- package/dist/web/assets/diagram-E7M64L7V-w1uoD2zJ.js +24 -0
- package/dist/web/assets/diagram-E7M64L7V-w1uoD2zJ.js.br +0 -0
- package/dist/web/assets/diagram-E7M64L7V-w1uoD2zJ.js.gz +0 -0
- package/dist/web/assets/diagram-IFDJBPK2-DIZ1Hm8C.js +43 -0
- package/dist/web/assets/diagram-IFDJBPK2-DIZ1Hm8C.js.br +0 -0
- package/dist/web/assets/diagram-IFDJBPK2-DIZ1Hm8C.js.gz +0 -0
- package/dist/web/assets/diagram-P4PSJMXO-DJg8_uM2.js +24 -0
- package/dist/web/assets/diagram-P4PSJMXO-DJg8_uM2.js.br +0 -0
- package/dist/web/assets/diagram-P4PSJMXO-DJg8_uM2.js.gz +0 -0
- package/dist/web/assets/dialog-Bocc0Fgb.js +1 -0
- package/dist/web/assets/dialog-Bocc0Fgb.js.br +0 -0
- package/dist/web/assets/dialog-Bocc0Fgb.js.gz +0 -0
- package/dist/web/assets/diff-viewer-BZ6glGK-.js +4 -0
- package/dist/web/assets/diff-viewer-BZ6glGK-.js.br +0 -0
- package/dist/web/assets/diff-viewer-BZ6glGK-.js.gz +0 -0
- package/dist/web/assets/edge-BxayftlC.js +1 -0
- package/dist/web/assets/edge-BxayftlC.js.br +0 -0
- package/dist/web/assets/edge-BxayftlC.js.gz +0 -0
- package/dist/web/assets/edit-diff-preview-D-FNLOU2.js +7 -0
- package/dist/web/assets/edit-diff-preview-D-FNLOU2.js.br +0 -0
- package/dist/web/assets/edit-diff-preview-D-FNLOU2.js.gz +0 -0
- package/dist/web/assets/editor-language-service-4sbsdqBV.js +1 -0
- package/dist/web/assets/editor-language-service-4sbsdqBV.js.br +0 -0
- package/dist/web/assets/editor-language-service-4sbsdqBV.js.gz +0 -0
- package/dist/web/assets/elixir-CncTBq2d.js +1 -0
- package/dist/web/assets/elixir-CncTBq2d.js.br +0 -0
- package/dist/web/assets/elixir-CncTBq2d.js.gz +0 -0
- package/dist/web/assets/elm-1uJDe5N1.js +1 -0
- package/dist/web/assets/elm-1uJDe5N1.js.br +0 -0
- package/dist/web/assets/elm-1uJDe5N1.js.gz +0 -0
- package/dist/web/assets/erDiagram-INFDFZHY-CXGHzu5w.js +70 -0
- package/dist/web/assets/erDiagram-INFDFZHY-CXGHzu5w.js.br +0 -0
- package/dist/web/assets/erDiagram-INFDFZHY-CXGHzu5w.js.gz +0 -0
- package/dist/web/assets/erb-dH8FUiNl.js +1 -0
- package/dist/web/assets/erb-dH8FUiNl.js.br +0 -0
- package/dist/web/assets/erb-dH8FUiNl.js.gz +0 -0
- package/dist/web/assets/erlang-D0F-1O48.js +1 -0
- package/dist/web/assets/erlang-D0F-1O48.js.br +0 -0
- package/dist/web/assets/erlang-D0F-1O48.js.gz +0 -0
- package/dist/web/assets/esm-C3TeLjGW.js +2 -0
- package/dist/web/assets/esm-C3TeLjGW.js.br +0 -0
- package/dist/web/assets/esm-C3TeLjGW.js.gz +0 -0
- package/dist/web/assets/explorer-body-DbgrG1fe.js +2 -0
- package/dist/web/assets/explorer-body-DbgrG1fe.js.br +0 -0
- package/dist/web/assets/explorer-body-DbgrG1fe.js.gz +0 -0
- package/dist/web/assets/explorer-window-content-BCjWvHpp.js +1 -0
- package/dist/web/assets/explorer-window-content-BCjWvHpp.js.br +0 -0
- package/dist/web/assets/explorer-window-content-BCjWvHpp.js.gz +0 -0
- package/dist/web/assets/extension-manager-section-DiMF4RnT.js +1 -0
- package/dist/web/assets/extension-manager-section-DiMF4RnT.js.br +0 -0
- package/dist/web/assets/extension-manager-section-DiMF4RnT.js.gz +0 -0
- package/dist/web/assets/extension-webview-Coti6Vfw.js +12 -0
- package/dist/web/assets/extension-webview-Coti6Vfw.js.br +0 -0
- package/dist/web/assets/extension-webview-Coti6Vfw.js.gz +0 -0
- package/dist/web/assets/file-store-Cm7-pHux.js +1 -0
- package/dist/web/assets/file-store-Cm7-pHux.js.br +0 -0
- package/dist/web/assets/file-store-Cm7-pHux.js.gz +0 -0
- package/dist/web/assets/files-settings-section-ZTVwOwx0.js +1 -0
- package/dist/web/assets/files-settings-section-ZTVwOwx0.js.br +0 -0
- package/dist/web/assets/files-settings-section-ZTVwOwx0.js.gz +0 -0
- package/dist/web/assets/flowDiagram-PKNHOUZH-CZmY6JEk.js +162 -0
- package/dist/web/assets/flowDiagram-PKNHOUZH-CZmY6JEk.js.br +0 -0
- package/dist/web/assets/flowDiagram-PKNHOUZH-CZmY6JEk.js.gz +0 -0
- package/dist/web/assets/format-file-meta-Drxf2J-k.js +1 -0
- package/dist/web/assets/format-file-meta-Drxf2J-k.js.br +0 -0
- package/dist/web/assets/format-file-meta-Drxf2J-k.js.gz +0 -0
- package/dist/web/assets/fortran-fixed-form-DB7wVefV.js +1 -0
- package/dist/web/assets/fortran-fixed-form-DB7wVefV.js.br +0 -0
- package/dist/web/assets/fortran-fixed-form-DB7wVefV.js.gz +0 -0
- package/dist/web/assets/fsharp-B5-po_gS.js +1 -0
- package/dist/web/assets/fsharp-B5-po_gS.js.br +0 -0
- package/dist/web/assets/fsharp-B5-po_gS.js.gz +0 -0
- package/dist/web/assets/ganttDiagram-A5KZAMGK-CZbyfmux.js +292 -0
- package/dist/web/assets/ganttDiagram-A5KZAMGK-CZbyfmux.js.br +0 -0
- package/dist/web/assets/ganttDiagram-A5KZAMGK-CZbyfmux.js.gz +0 -0
- package/dist/web/assets/gdresource-DkWx6_xT.js +1 -0
- package/dist/web/assets/gdresource-DkWx6_xT.js.br +0 -0
- package/dist/web/assets/gdresource-DkWx6_xT.js.gz +0 -0
- package/dist/web/assets/general-settings-section-B7Hjx_fb.js +1 -0
- package/dist/web/assets/general-settings-section-B7Hjx_fb.js.br +0 -0
- package/dist/web/assets/general-settings-section-B7Hjx_fb.js.gz +0 -0
- package/dist/web/assets/git-commit-XsMhdamD.js +1 -0
- package/dist/web/assets/git-commit-XsMhdamD.js.br +0 -0
- package/dist/web/assets/git-commit-XsMhdamD.js.gz +0 -0
- package/dist/web/assets/git-log-panel-CbcJ_YEH.js +1 -0
- package/dist/web/assets/git-log-panel-CbcJ_YEH.js.br +0 -0
- package/dist/web/assets/git-log-panel-CbcJ_YEH.js.gz +0 -0
- package/dist/web/assets/git-rebase-CXs4QunZ.js +1 -0
- package/dist/web/assets/gitGraph-HDMCJU4V-COyQftEp.js +1 -0
- package/dist/web/assets/gitGraphDiagram-K3NZZRJ6-C9g4d3bV.js +65 -0
- package/dist/web/assets/gitGraphDiagram-K3NZZRJ6-C9g4d3bV.js.br +0 -0
- package/dist/web/assets/gitGraphDiagram-K3NZZRJ6-C9g4d3bV.js.gz +0 -0
- package/dist/web/assets/glide-data-grid-BfByGSf1.js +141 -0
- package/dist/web/assets/glide-data-grid-BfByGSf1.js.br +0 -0
- package/dist/web/assets/glide-data-grid-BfByGSf1.js.gz +0 -0
- package/dist/web/assets/glimmer-js-CHoxSy4K.js +1 -0
- package/dist/web/assets/glimmer-js-CHoxSy4K.js.br +0 -0
- package/dist/web/assets/glimmer-js-CHoxSy4K.js.gz +0 -0
- package/dist/web/assets/glimmer-ts-DY0DCf-r.js +1 -0
- package/dist/web/assets/glimmer-ts-DY0DCf-r.js.br +0 -0
- package/dist/web/assets/glimmer-ts-DY0DCf-r.js.gz +0 -0
- package/dist/web/assets/glsl-E9hxFBBJ.js +1 -0
- package/dist/web/assets/glsl-E9hxFBBJ.js.br +0 -0
- package/dist/web/assets/glsl-E9hxFBBJ.js.gz +0 -0
- package/dist/web/assets/graphlib-eYluCODn.js +1 -0
- package/dist/web/assets/graphlib-eYluCODn.js.br +0 -0
- package/dist/web/assets/graphlib-eYluCODn.js.gz +0 -0
- package/dist/web/assets/graphql-DAalq3Uo.js +1 -0
- package/dist/web/assets/graphql-DAalq3Uo.js.br +0 -0
- package/dist/web/assets/graphql-DAalq3Uo.js.gz +0 -0
- package/dist/web/assets/group-chat-tab-DCo9OP3D.js +1 -0
- package/dist/web/assets/group-chat-tab-DCo9OP3D.js.br +0 -0
- package/dist/web/assets/group-chat-tab-DCo9OP3D.js.gz +0 -0
- package/dist/web/assets/hack-e6ehmpqx.js +1 -0
- package/dist/web/assets/hack-e6ehmpqx.js.br +0 -0
- package/dist/web/assets/hack-e6ehmpqx.js.gz +0 -0
- package/dist/web/assets/haml-Pr4yq62b.js +1 -0
- package/dist/web/assets/haml-Pr4yq62b.js.br +0 -0
- package/dist/web/assets/haml-Pr4yq62b.js.gz +0 -0
- package/dist/web/assets/handlebars-ZERVZ8gn.js +1 -0
- package/dist/web/assets/handlebars-ZERVZ8gn.js.br +0 -0
- package/dist/web/assets/handlebars-ZERVZ8gn.js.gz +0 -0
- package/dist/web/assets/html-BmwVFf5D.js +1 -0
- package/dist/web/assets/html-BmwVFf5D.js.br +0 -0
- package/dist/web/assets/html-BmwVFf5D.js.gz +0 -0
- package/dist/web/assets/html-derivative-C1JIrmAY.js +1 -0
- package/dist/web/assets/http-BI6PtTvX.js +1 -0
- package/dist/web/assets/http-BI6PtTvX.js.br +0 -0
- package/dist/web/assets/http-BI6PtTvX.js.gz +0 -0
- package/dist/web/assets/hurl-CJGLGxAF.js +1 -0
- package/dist/web/assets/hurl-CJGLGxAF.js.br +0 -0
- package/dist/web/assets/hurl-CJGLGxAF.js.gz +0 -0
- package/dist/web/assets/hxml-B6i0QuF9.js +1 -0
- package/dist/web/assets/hxml-B6i0QuF9.js.br +0 -0
- package/dist/web/assets/hxml-B6i0QuF9.js.gz +0 -0
- package/dist/web/assets/image-preview-Cjlps7Pt.js +1 -0
- package/dist/web/assets/index-CyDLBddf.js +52 -0
- package/dist/web/assets/index-CyDLBddf.js.br +0 -0
- package/dist/web/assets/index-CyDLBddf.js.gz +0 -0
- package/dist/web/assets/index-Dh5apC3I.css +1 -0
- package/dist/web/assets/index-Dh5apC3I.css.br +0 -0
- package/dist/web/assets/index-Dh5apC3I.css.gz +0 -0
- package/dist/web/assets/info-3K5VOQVL-M5BVLjMe.js +1 -0
- package/dist/web/assets/infoDiagram-LFFYTUFH-BpJuT5o9.js +2 -0
- package/dist/web/assets/isEmpty-BjAN1oSC.js +1 -0
- package/dist/web/assets/isEmpty-BjAN1oSC.js.br +0 -0
- package/dist/web/assets/isEmpty-BjAN1oSC.js.gz +0 -0
- package/dist/web/assets/ishikawaDiagram-PHBUUO56-JbOmOY2f.js +70 -0
- package/dist/web/assets/ishikawaDiagram-PHBUUO56-JbOmOY2f.js.br +0 -0
- package/dist/web/assets/ishikawaDiagram-PHBUUO56-JbOmOY2f.js.gz +0 -0
- package/dist/web/assets/jinja-CM-duDMo.js +1 -0
- package/dist/web/assets/jinja-CM-duDMo.js.br +0 -0
- package/dist/web/assets/jinja-CM-duDMo.js.gz +0 -0
- package/dist/web/assets/jira-watcher-section-Dz_-sUC2.js +1 -0
- package/dist/web/assets/jison-F9rAmqyI.js +1 -0
- package/dist/web/assets/jison-F9rAmqyI.js.br +0 -0
- package/dist/web/assets/jison-F9rAmqyI.js.gz +0 -0
- package/dist/web/assets/journeyDiagram-4ABVD52K-C7_tilrE.js +139 -0
- package/dist/web/assets/journeyDiagram-4ABVD52K-C7_tilrE.js.br +0 -0
- package/dist/web/assets/journeyDiagram-4ABVD52K-C7_tilrE.js.gz +0 -0
- package/dist/web/assets/julia-AVSSuAUz.js +1 -0
- package/dist/web/assets/julia-AVSSuAUz.js.br +0 -0
- package/dist/web/assets/julia-AVSSuAUz.js.gz +0 -0
- package/dist/web/assets/just-Dw8IR-fy.js +1 -0
- package/dist/web/assets/just-Dw8IR-fy.js.br +0 -0
- package/dist/web/assets/just-Dw8IR-fy.js.gz +0 -0
- package/dist/web/assets/kanban-definition-K7BYSVSG-DvbxKeXt.js +89 -0
- package/dist/web/assets/kanban-definition-K7BYSVSG-DvbxKeXt.js.br +0 -0
- package/dist/web/assets/kanban-definition-K7BYSVSG-DvbxKeXt.js.gz +0 -0
- package/dist/web/assets/keybindings-store-BTq5Z7XP.js +1 -0
- package/dist/web/assets/keyboard-shortcuts-section-Ba5NYwlG.js +1 -0
- package/dist/web/assets/keyboard-shortcuts-section-Ba5NYwlG.js.br +0 -0
- package/dist/web/assets/keyboard-shortcuts-section-Ba5NYwlG.js.gz +0 -0
- package/dist/web/assets/language-servers-section-DJJ7SFXo.js +2 -0
- package/dist/web/assets/language-servers-section-DJJ7SFXo.js.br +0 -0
- package/dist/web/assets/language-servers-section-DJJ7SFXo.js.gz +0 -0
- package/dist/web/assets/latex-37_9fLdz.js +1 -0
- package/dist/web/assets/latex-37_9fLdz.js.br +0 -0
- package/dist/web/assets/latex-37_9fLdz.js.gz +0 -0
- package/dist/web/assets/line-CYtSrseF.js +1 -0
- package/dist/web/assets/linear-DyCrWAir.js +1 -0
- package/dist/web/assets/linear-DyCrWAir.js.br +0 -0
- package/dist/web/assets/linear-DyCrWAir.js.gz +0 -0
- package/dist/web/assets/liquid-CaR1gaJt.js +1 -0
- package/dist/web/assets/liquid-CaR1gaJt.js.br +0 -0
- package/dist/web/assets/liquid-CaR1gaJt.js.gz +0 -0
- package/dist/web/assets/lsp-client-Dr3vQ1bb.js +1 -0
- package/dist/web/assets/lsp-client-Dr3vQ1bb.js.br +0 -0
- package/dist/web/assets/lsp-client-Dr3vQ1bb.js.gz +0 -0
- package/dist/web/assets/lua-IFhrYmKl.js +1 -0
- package/dist/web/assets/lua-IFhrYmKl.js.br +0 -0
- package/dist/web/assets/lua-IFhrYmKl.js.gz +0 -0
- package/dist/web/assets/markdown-renderer-CmnqFfTU.js +5 -0
- package/dist/web/assets/markdown-renderer-CmnqFfTU.js.br +0 -0
- package/dist/web/assets/markdown-renderer-CmnqFfTU.js.gz +0 -0
- package/dist/web/assets/markdown-renderer-LJdVMbGl.js +1 -0
- package/dist/web/assets/marko-2g0T6atb.js +1 -0
- package/dist/web/assets/marko-2g0T6atb.js.br +0 -0
- package/dist/web/assets/marko-2g0T6atb.js.gz +0 -0
- package/dist/web/assets/mdc-Dku_3sTh.js +1 -0
- package/dist/web/assets/mdc-Dku_3sTh.js.br +0 -0
- package/dist/web/assets/mdc-Dku_3sTh.js.gz +0 -0
- package/dist/web/assets/mermaid-parser.core-C5vBM3kO.js +4 -0
- package/dist/web/assets/mermaid-parser.core-C5vBM3kO.js.br +0 -0
- package/dist/web/assets/mermaid-parser.core-C5vBM3kO.js.gz +0 -0
- package/dist/web/assets/mermaid.core-D5SAzB7L.js +11 -0
- package/dist/web/assets/mermaid.core-D5SAzB7L.js.br +0 -0
- package/dist/web/assets/mermaid.core-D5SAzB7L.js.gz +0 -0
- package/dist/web/assets/mindmap-definition-YRQLILUH-juNCbDFr.js +68 -0
- package/dist/web/assets/mindmap-definition-YRQLILUH-juNCbDFr.js.br +0 -0
- package/dist/web/assets/mindmap-definition-YRQLILUH-juNCbDFr.js.gz +0 -0
- package/dist/web/assets/mobile-bottom-sheet-D4UyOatB.js +1 -0
- package/dist/web/assets/mobile-bottom-sheet-D4UyOatB.js.br +0 -0
- package/dist/web/assets/mobile-bottom-sheet-D4UyOatB.js.gz +0 -0
- package/dist/web/assets/mobile-explorer-sheet-BiIhZtJ2.js +1 -0
- package/dist/web/assets/mobile-explorer-sheet-BiIhZtJ2.js.br +0 -0
- package/dist/web/assets/mobile-explorer-sheet-BiIhZtJ2.js.gz +0 -0
- package/dist/web/assets/new-design-dialog-DI_hxvFV.js +1 -0
- package/dist/web/assets/new-design-dialog-DI_hxvFV.js.br +0 -0
- package/dist/web/assets/new-design-dialog-DI_hxvFV.js.gz +0 -0
- package/dist/web/assets/nextflow-DwUrPV3b.js +1 -0
- package/dist/web/assets/nextflow-DwUrPV3b.js.br +0 -0
- package/dist/web/assets/nextflow-DwUrPV3b.js.gz +0 -0
- package/dist/web/assets/nginx-D10J2vrQ.js +1 -0
- package/dist/web/assets/nginx-D10J2vrQ.js.br +0 -0
- package/dist/web/assets/nginx-D10J2vrQ.js.gz +0 -0
- package/dist/web/assets/nim-BonDnBCZ.js +1 -0
- package/dist/web/assets/nim-BonDnBCZ.js.br +0 -0
- package/dist/web/assets/nim-BonDnBCZ.js.gz +0 -0
- package/dist/web/assets/notification-store-9lBSplOV.js +1 -0
- package/dist/web/assets/notifications-settings-section-0s-2OKRv.js +1 -0
- package/dist/web/assets/notifications-settings-section-0s-2OKRv.js.br +0 -0
- package/dist/web/assets/notifications-settings-section-0s-2OKRv.js.gz +0 -0
- package/dist/web/assets/number-overlay-editor-CHqPl6Pv.js +9 -0
- package/dist/web/assets/number-overlay-editor-CHqPl6Pv.js.br +0 -0
- package/dist/web/assets/number-overlay-editor-CHqPl6Pv.js.gz +0 -0
- package/dist/web/assets/onboarding-entry-CGFdGLLP.js +1 -0
- package/dist/web/assets/onboarding-entry-CGFdGLLP.js.br +0 -0
- package/dist/web/assets/onboarding-entry-CGFdGLLP.js.gz +0 -0
- package/dist/web/assets/onboarding-quick-orientation-DPHYFMbA.js +1 -0
- package/dist/web/assets/onboarding-quick-orientation-DPHYFMbA.js.br +0 -0
- package/dist/web/assets/onboarding-quick-orientation-DPHYFMbA.js.gz +0 -0
- package/dist/web/assets/ordinal-CEpaoDoJ.js +1 -0
- package/dist/web/assets/ordinal-CEpaoDoJ.js.br +0 -0
- package/dist/web/assets/ordinal-CEpaoDoJ.js.gz +0 -0
- package/dist/web/assets/overview-panel-3htxfZS2.js +1 -0
- package/dist/web/assets/overview-panel-3htxfZS2.js.br +0 -0
- package/dist/web/assets/overview-panel-3htxfZS2.js.gz +0 -0
- package/dist/web/assets/packet-RMMSAZCW-DCgVLum2.js +1 -0
- package/dist/web/assets/panel-store-B6PoCwBA.js +1 -0
- package/dist/web/assets/panel-store-B6PoCwBA.js.br +0 -0
- package/dist/web/assets/panel-store-B6PoCwBA.js.gz +0 -0
- package/dist/web/assets/performance-panel-V8gpnnf7.js +3 -0
- package/dist/web/assets/performance-panel-V8gpnnf7.js.br +0 -0
- package/dist/web/assets/performance-panel-V8gpnnf7.js.gz +0 -0
- package/dist/web/assets/perl-DmdIiZTm.js +1 -0
- package/dist/web/assets/perl-DmdIiZTm.js.br +0 -0
- package/dist/web/assets/perl-DmdIiZTm.js.gz +0 -0
- package/dist/web/assets/php-DXGvCIY0.js +1 -0
- package/dist/web/assets/php-DXGvCIY0.js.br +0 -0
- package/dist/web/assets/php-DXGvCIY0.js.gz +0 -0
- package/dist/web/assets/pie-UPGHQEXC-pxihnmef.js +1 -0
- package/dist/web/assets/pieDiagram-SKSYHLDU-CiJCYElI.js +30 -0
- package/dist/web/assets/pieDiagram-SKSYHLDU-CiJCYElI.js.br +0 -0
- package/dist/web/assets/pieDiagram-SKSYHLDU-CiJCYElI.js.gz +0 -0
- package/dist/web/assets/postgres-viewer-sWS-ogTC.js +3 -0
- package/dist/web/assets/postgres-viewer-sWS-ogTC.js.br +0 -0
- package/dist/web/assets/postgres-viewer-sWS-ogTC.js.gz +0 -0
- package/dist/web/assets/ppmbot-settings-section-CT8vvlzk.js +1 -0
- package/dist/web/assets/ppmbot-settings-section-CT8vvlzk.js.br +0 -0
- package/dist/web/assets/ppmbot-settings-section-CT8vvlzk.js.gz +0 -0
- package/dist/web/assets/pptx-export-Ugjv0hso.js +111 -0
- package/dist/web/assets/pptx-export-Ugjv0hso.js.br +0 -0
- package/dist/web/assets/pptx-export-Ugjv0hso.js.gz +0 -0
- package/dist/web/assets/problems-panel-Gcy79pSS.js +1 -0
- package/dist/web/assets/problems-panel-Gcy79pSS.js.br +0 -0
- package/dist/web/assets/problems-panel-Gcy79pSS.js.gz +0 -0
- package/dist/web/assets/process-row-format-u6y7lOee.js +1 -0
- package/dist/web/assets/process-table-BUTIp9Oy.js +1 -0
- package/dist/web/assets/process-table-BUTIp9Oy.js.br +0 -0
- package/dist/web/assets/process-table-BUTIp9Oy.js.gz +0 -0
- package/dist/web/assets/proxy-settings-section-Buv_8y54.js +1 -0
- package/dist/web/assets/proxy-settings-section-Buv_8y54.js.br +0 -0
- package/dist/web/assets/proxy-settings-section-Buv_8y54.js.gz +0 -0
- package/dist/web/assets/pug-BgMlgmpT.js +1 -0
- package/dist/web/assets/pug-BgMlgmpT.js.br +0 -0
- package/dist/web/assets/pug-BgMlgmpT.js.gz +0 -0
- package/dist/web/assets/qml-DjqBS8bc.js +1 -0
- package/dist/web/assets/qml-DjqBS8bc.js.br +0 -0
- package/dist/web/assets/qml-DjqBS8bc.js.gz +0 -0
- package/dist/web/assets/quadrantDiagram-337W2JSQ-D3q5dHQe.js +7 -0
- package/dist/web/assets/quadrantDiagram-337W2JSQ-D3q5dHQe.js.br +0 -0
- package/dist/web/assets/quadrantDiagram-337W2JSQ-D3q5dHQe.js.gz +0 -0
- package/dist/web/assets/query-audit-section-N2DQtgJx.js +1 -0
- package/dist/web/assets/query-audit-section-N2DQtgJx.js.br +0 -0
- package/dist/web/assets/query-audit-section-N2DQtgJx.js.gz +0 -0
- package/dist/web/assets/radar-KQ55EAFF-CeeNXQSm.js +1 -0
- package/dist/web/assets/razor-CzV29vlj.js +1 -0
- package/dist/web/assets/razor-CzV29vlj.js.br +0 -0
- package/dist/web/assets/razor-CzV29vlj.js.gz +0 -0
- package/dist/web/assets/remote-desktop-clipboard-notice-CRvJqmaz.js +1 -0
- package/dist/web/assets/remote-desktop-clipboard-notice-CRvJqmaz.js.br +0 -0
- package/dist/web/assets/remote-desktop-clipboard-notice-CRvJqmaz.js.gz +0 -0
- package/dist/web/assets/remote-desktop-mobile-sheet-BoYINLbJ.js +2 -0
- package/dist/web/assets/remote-desktop-mobile-sheet-BoYINLbJ.js.br +0 -0
- package/dist/web/assets/remote-desktop-mobile-sheet-BoYINLbJ.js.gz +0 -0
- package/dist/web/assets/remote-desktop-mobile-view-DPdP0yYu.js +1 -0
- package/dist/web/assets/remote-desktop-mobile-view-DPdP0yYu.js.br +0 -0
- package/dist/web/assets/remote-desktop-mobile-view-DPdP0yYu.js.gz +0 -0
- package/dist/web/assets/remote-desktop-readiness-gate-BeQ_Jrp7.js +1 -0
- package/dist/web/assets/remote-desktop-readiness-gate-BeQ_Jrp7.js.br +0 -0
- package/dist/web/assets/remote-desktop-readiness-gate-BeQ_Jrp7.js.gz +0 -0
- package/dist/web/assets/remote-desktop-settings-section-Bs4sHS3l.js +1 -0
- package/dist/web/assets/remote-desktop-settings-section-Bs4sHS3l.js.br +0 -0
- package/dist/web/assets/remote-desktop-settings-section-Bs4sHS3l.js.gz +0 -0
- package/dist/web/assets/remote-desktop-window-content-DDr__JxQ.js +1 -0
- package/dist/web/assets/remote-desktop-window-content-DDr__JxQ.js.br +0 -0
- package/dist/web/assets/remote-desktop-window-content-DDr__JxQ.js.gz +0 -0
- package/dist/web/assets/requirementDiagram-Z7DCOOCP-BZfeEsxv.js +73 -0
- package/dist/web/assets/requirementDiagram-Z7DCOOCP-BZfeEsxv.js.br +0 -0
- package/dist/web/assets/requirementDiagram-Z7DCOOCP-BZfeEsxv.js.gz +0 -0
- package/dist/web/assets/rst-DffOOLD7.js +1 -0
- package/dist/web/assets/rst-DffOOLD7.js.br +0 -0
- package/dist/web/assets/rst-DffOOLD7.js.gz +0 -0
- package/dist/web/assets/ruby-C5DczJCc.js +1 -0
- package/dist/web/assets/ruby-C5DczJCc.js.br +0 -0
- package/dist/web/assets/ruby-C5DczJCc.js.gz +0 -0
- package/dist/web/assets/run-in-terminal-DCBNtYHQ.js +1 -0
- package/dist/web/assets/sankeyDiagram-WA2Y5GQK-CxM5iAJY.js +10 -0
- package/dist/web/assets/sankeyDiagram-WA2Y5GQK-CxM5iAJY.js.br +0 -0
- package/dist/web/assets/sankeyDiagram-WA2Y5GQK-CxM5iAJY.js.gz +0 -0
- package/dist/web/assets/sas-CoO1xLdH.js +1 -0
- package/dist/web/assets/sas-CoO1xLdH.js.br +0 -0
- package/dist/web/assets/sas-CoO1xLdH.js.gz +0 -0
- package/dist/web/assets/schedules-settings-section-_cHX2qOa.js +1 -0
- package/dist/web/assets/schedules-settings-section-_cHX2qOa.js.br +0 -0
- package/dist/web/assets/schedules-settings-section-_cHX2qOa.js.gz +0 -0
- package/dist/web/assets/scss-d9PFDNvb.js +1 -0
- package/dist/web/assets/scss-d9PFDNvb.js.br +0 -0
- package/dist/web/assets/scss-d9PFDNvb.js.gz +0 -0
- package/dist/web/assets/send-to-chat-dNqNV7Y4.js +1 -0
- package/dist/web/assets/send-to-chat-dNqNV7Y4.js.br +0 -0
- package/dist/web/assets/send-to-chat-dNqNV7Y4.js.gz +0 -0
- package/dist/web/assets/sequenceDiagram-2WXFIKYE-D4PdZNfQ.js +145 -0
- package/dist/web/assets/sequenceDiagram-2WXFIKYE-D4PdZNfQ.js.br +0 -0
- package/dist/web/assets/sequenceDiagram-2WXFIKYE-D4PdZNfQ.js.gz +0 -0
- package/dist/web/assets/services-panel-Dm54cnW3.js +1 -0
- package/dist/web/assets/services-panel-Dm54cnW3.js.br +0 -0
- package/dist/web/assets/services-panel-Dm54cnW3.js.gz +0 -0
- package/dist/web/assets/session-list-sync-triggers-ATvz-1g3.js +1 -0
- package/dist/web/assets/session-list-sync-triggers-ATvz-1g3.js.br +0 -0
- package/dist/web/assets/session-list-sync-triggers-ATvz-1g3.js.gz +0 -0
- package/dist/web/assets/settings-body-DRRQNaDA.js +1 -0
- package/dist/web/assets/settings-body-DRRQNaDA.js.br +0 -0
- package/dist/web/assets/settings-body-DRRQNaDA.js.gz +0 -0
- package/dist/web/assets/settings-section-content-DRaHfvm8.js +1 -0
- package/dist/web/assets/settings-section-content-U3mIx6hF.js +2 -0
- package/dist/web/assets/settings-section-content-U3mIx6hF.js.br +0 -0
- package/dist/web/assets/settings-section-content-U3mIx6hF.js.gz +0 -0
- package/dist/web/assets/settings-store-Cyuo8ceh.js +2 -0
- package/dist/web/assets/settings-store-Cyuo8ceh.js.br +0 -0
- package/dist/web/assets/settings-store-Cyuo8ceh.js.gz +0 -0
- package/dist/web/assets/settings-tab-CB_BhHTK.js +1 -0
- package/dist/web/assets/settings-window-content-CgZIMNX8.js +1 -0
- package/dist/web/assets/shaderlab-BkB57LhQ.js +1 -0
- package/dist/web/assets/shaderlab-BkB57LhQ.js.br +0 -0
- package/dist/web/assets/shaderlab-BkB57LhQ.js.gz +0 -0
- package/dist/web/assets/shellsession-CTpUym8_.js +1 -0
- package/dist/web/assets/slash-command-picker-CQlIqMW0.js +1 -0
- package/dist/web/assets/slash-command-picker-CQlIqMW0.js.br +0 -0
- package/dist/web/assets/slash-command-picker-CQlIqMW0.js.gz +0 -0
- package/dist/web/assets/soy-CGmWpNZ2.js +1 -0
- package/dist/web/assets/soy-CGmWpNZ2.js.br +0 -0
- package/dist/web/assets/soy-CGmWpNZ2.js.gz +0 -0
- package/dist/web/assets/sparql-DtdOj_MX.js +1 -0
- package/dist/web/assets/sparql-DtdOj_MX.js.br +0 -0
- package/dist/web/assets/sparql-DtdOj_MX.js.gz +0 -0
- package/dist/web/assets/sql-query-editor--Z4bcqd8.js +1 -0
- package/dist/web/assets/sql-query-editor--Z4bcqd8.js.br +0 -0
- package/dist/web/assets/sql-query-editor--Z4bcqd8.js.gz +0 -0
- package/dist/web/assets/sqlite-viewer-CSmX3qaj.js +1 -0
- package/dist/web/assets/sqlite-viewer-CSmX3qaj.js.br +0 -0
- package/dist/web/assets/sqlite-viewer-CSmX3qaj.js.gz +0 -0
- package/dist/web/assets/stata-6W_BX14b.js +1 -0
- package/dist/web/assets/stata-6W_BX14b.js.br +0 -0
- package/dist/web/assets/stata-6W_BX14b.js.gz +0 -0
- package/dist/web/assets/stateDiagram-RAJIS63D-BasP-g7l.js +1 -0
- package/dist/web/assets/stateDiagram-RAJIS63D-BasP-g7l.js.br +0 -0
- package/dist/web/assets/stateDiagram-RAJIS63D-BasP-g7l.js.gz +0 -0
- package/dist/web/assets/stateDiagram-v2-FVOUBMTO-DH7CpDey.js +1 -0
- package/dist/web/assets/surrealql-BhmbH4Yk.js +1 -0
- package/dist/web/assets/surrealql-BhmbH4Yk.js.br +0 -0
- package/dist/web/assets/surrealql-BhmbH4Yk.js.gz +0 -0
- package/dist/web/assets/svelte-D6EOFdO-.js +1 -0
- package/dist/web/assets/svelte-D6EOFdO-.js.br +0 -0
- package/dist/web/assets/svelte-D6EOFdO-.js.gz +0 -0
- package/dist/web/assets/system-monitor-body-LannpU6H.js +2 -0
- package/dist/web/assets/system-monitor-body-LannpU6H.js.br +0 -0
- package/dist/web/assets/system-monitor-body-LannpU6H.js.gz +0 -0
- package/dist/web/assets/system-monitor-tab-BfVucwEF.js +1 -0
- package/dist/web/assets/system-monitor-window-content-kLNW9Ln3.js +1 -0
- package/dist/web/assets/tab-host-window-content-II_FtOYM.js +1 -0
- package/dist/web/assets/tab-host-window-content-II_FtOYM.js.br +0 -0
- package/dist/web/assets/tab-host-window-content-II_FtOYM.js.gz +0 -0
- package/dist/web/assets/tab-store-DCpc0g0Q.js +1 -0
- package/dist/web/assets/templ-DuLJgZN8.js +1 -0
- package/dist/web/assets/templ-DuLJgZN8.js.br +0 -0
- package/dist/web/assets/templ-DuLJgZN8.js.gz +0 -0
- package/dist/web/assets/terminal-tab-CTe2polt.js +3 -0
- package/dist/web/assets/terminal-tab-CTe2polt.js.br +0 -0
- package/dist/web/assets/terminal-tab-CTe2polt.js.gz +0 -0
- package/dist/web/assets/tex-D8IJD2J1.js +1 -0
- package/dist/web/assets/tex-D8IJD2J1.js.br +0 -0
- package/dist/web/assets/tex-D8IJD2J1.js.gz +0 -0
- package/dist/web/assets/timeline-definition-YZTLITO2-Do92I8eh.js +61 -0
- package/dist/web/assets/timeline-definition-YZTLITO2-Do92I8eh.js.br +0 -0
- package/dist/web/assets/timeline-definition-YZTLITO2-Do92I8eh.js.gz +0 -0
- package/dist/web/assets/tool-cards-rxLXbBSm.js +9 -0
- package/dist/web/assets/tool-cards-rxLXbBSm.js.br +0 -0
- package/dist/web/assets/tool-cards-rxLXbBSm.js.gz +0 -0
- package/dist/web/assets/treemap-KZPCXAKY-OVcqjFQG.js +1 -0
- package/dist/web/assets/ts-tags-BxVcUOvj.js +1 -0
- package/dist/web/assets/ts-tags-BxVcUOvj.js.br +0 -0
- package/dist/web/assets/ts-tags-BxVcUOvj.js.gz +0 -0
- package/dist/web/assets/twig-BT8vDHa2.js +1 -0
- package/dist/web/assets/twig-BT8vDHa2.js.br +0 -0
- package/dist/web/assets/twig-BT8vDHa2.js.gz +0 -0
- package/dist/web/assets/use-h264-canvas-decoder-BfO9QrlH.js +1 -0
- package/dist/web/assets/use-h264-canvas-decoder-BfO9QrlH.js.br +0 -0
- package/dist/web/assets/use-h264-canvas-decoder-BfO9QrlH.js.gz +0 -0
- package/dist/web/assets/use-inline-blame-CxZ_QWzS.js +16 -0
- package/dist/web/assets/use-inline-blame-CxZ_QWzS.js.br +0 -0
- package/dist/web/assets/use-inline-blame-CxZ_QWzS.js.gz +0 -0
- package/dist/web/assets/use-lsp-gCNE5A9K.js +6 -0
- package/dist/web/assets/use-lsp-gCNE5A9K.js.br +0 -0
- package/dist/web/assets/use-lsp-gCNE5A9K.js.gz +0 -0
- package/dist/web/assets/use-monaco-theme-DvNGcCvz.js +1 -0
- package/dist/web/assets/use-process-kill-Cbiu1mbY.js +1 -0
- package/dist/web/assets/use-process-kill-Cbiu1mbY.js.br +0 -0
- package/dist/web/assets/use-process-kill-Cbiu1mbY.js.gz +0 -0
- package/dist/web/assets/use-websocket-AC7EG1LK.js +1 -0
- package/dist/web/assets/vennDiagram-LZ73GAT5-ITFNzHRx.js +34 -0
- package/dist/web/assets/vennDiagram-LZ73GAT5-ITFNzHRx.js.br +0 -0
- package/dist/web/assets/vennDiagram-LZ73GAT5-ITFNzHRx.js.gz +0 -0
- package/dist/web/assets/video-preview-C2Y61WUE.js +1 -0
- package/dist/web/assets/video-preview-C2Y61WUE.js.br +0 -0
- package/dist/web/assets/video-preview-C2Y61WUE.js.gz +0 -0
- package/dist/web/assets/voice-settings-section-DCXZeLYI.js +1 -0
- package/dist/web/assets/voice-settings-section-DCXZeLYI.js.br +0 -0
- package/dist/web/assets/voice-settings-section-DCXZeLYI.js.gz +0 -0
- package/dist/web/assets/vue-BcyG2SyR.js +1 -0
- package/dist/web/assets/vue-BcyG2SyR.js.br +0 -0
- package/dist/web/assets/vue-BcyG2SyR.js.gz +0 -0
- package/dist/web/assets/vue-html-D8iVjZTe.js +1 -0
- package/dist/web/assets/vue-html-D8iVjZTe.js.br +0 -0
- package/dist/web/assets/vue-html-D8iVjZTe.js.gz +0 -0
- package/dist/web/assets/vue-vine-DxBjHHk4.js +1 -0
- package/dist/web/assets/vue-vine-DxBjHHk4.js.br +0 -0
- package/dist/web/assets/vue-vine-DxBjHHk4.js.gz +0 -0
- package/dist/web/assets/window-pip-registry-9Y9LQQYS.js +1 -0
- package/dist/web/assets/xml-Zepcw_qF.js +1 -0
- package/dist/web/assets/xml-Zepcw_qF.js.br +0 -0
- package/dist/web/assets/xml-Zepcw_qF.js.gz +0 -0
- package/dist/web/assets/xsl-_m-WMWv3.js +1 -0
- package/dist/web/assets/xsl-_m-WMWv3.js.br +0 -0
- package/dist/web/assets/xsl-_m-WMWv3.js.gz +0 -0
- package/dist/web/assets/xychartDiagram-JWTSCODW-Z12EI4TX.js +7 -0
- package/dist/web/assets/xychartDiagram-JWTSCODW-Z12EI4TX.js.br +0 -0
- package/dist/web/assets/xychartDiagram-JWTSCODW-Z12EI4TX.js.gz +0 -0
- package/dist/web/index.html +70 -26
- package/dist/web/index.html.br +0 -0
- package/dist/web/index.html.gz +0 -0
- package/dist/web/sw.js +1 -1
- package/dist/web/sw.js.br +0 -0
- package/dist/web/sw.js.gz +0 -0
- package/docs/architecture/android-emulator-phase0-report-260921.md +310 -0
- package/docs/architecture/android-emulator-phase2-report-260921.md +163 -0
- package/docs/architecture/android-emulator-phase3-report-260921.md +203 -0
- package/docs/architecture/android-emulator-phase4-report-260921.md +191 -0
- package/docs/architecture/android-emulator-plan-260920.md +376 -0
- package/docs/architecture/data-and-storage.md +1 -1
- package/docs/architecture/plugins-and-tracing.md +48 -7
- package/docs/architecture/workspace-and-ui.md +18 -8
- package/docs/deployment-guide.md +17 -0
- package/package.json +4 -2
- package/scripts/gen-android-proto.ts +37 -0
- package/scripts/release.sh +3 -1
- package/src/cli/commands/chat-cmd.ts +2 -2
- package/src/providers/claude-agent-sdk-query-options.ts +28 -0
- package/src/providers/claude-agent-sdk.ts +153 -71
- package/src/providers/claude-warm-spare.ts +176 -0
- package/src/providers/codex-app-server/codex-provider.ts +7 -4
- package/src/providers/provider.interface.ts +1 -0
- package/src/server/index.ts +55 -0
- package/src/server/middleware/gzip-json.ts +13 -1
- package/src/server/routes/android.ts +616 -0
- package/src/server/routes/chat.ts +31 -0
- package/src/server/routes/design-preview.ts +8 -2
- package/src/server/routes/design-settings.ts +88 -0
- package/src/server/routes/design-systems.ts +81 -0
- package/src/server/routes/designs.ts +11 -6
- package/src/server/routes/files.ts +52 -5
- package/src/server/routes/remote-desktop.ts +95 -2
- package/src/server/routes/resources.ts +2 -2
- package/src/server/routes/system-services.ts +15 -13
- package/src/server/routes/trace.ts +66 -0
- package/src/server/ws/android.ts +101 -0
- package/src/server/ws/chat.ts +12 -17
- package/src/server/ws/global.ts +13 -1
- package/src/server/ws/remote-desktop.ts +6 -1
- package/src/services/android/android-apk.ts +387 -0
- package/src/services/android/android-capabilities.ts +154 -0
- package/src/services/android/android-flag.ts +12 -0
- package/src/services/android/android-grpc.ts +124 -0
- package/src/services/android/android-input.ts +129 -0
- package/src/services/android/android-logcat.ts +169 -0
- package/src/services/android/android-nonce.ts +50 -0
- package/src/services/android/android-operations.ts +124 -0
- package/src/services/android/android-screenshot.ts +53 -0
- package/src/services/android/android-session.ts +510 -0
- package/src/services/android/android-video.ts +495 -0
- package/src/services/android/avd-list.ts +131 -0
- package/src/services/android/avd-manager.ts +397 -0
- package/src/services/android/device-registry.ts +223 -0
- package/src/services/android/emulator-discovery.ts +160 -0
- package/src/services/android/emulator-launcher.ts +290 -0
- package/src/services/android/proto/emulator-controller-descriptor.ts +10 -0
- package/src/services/android/proto/emulator_controller.proto +1791 -0
- package/src/services/android/sdk-discovery.ts +178 -0
- package/src/services/android/system-images.ts +124 -0
- package/src/services/chat.service.ts +106 -10
- package/src/services/config.service.ts +1 -1
- package/src/services/design/design-edit-undo-journal.ts +9 -0
- package/src/services/design/design-instructions-auto-setup-block.ts +36 -0
- package/src/services/design/design-instructions-system-block.ts +49 -0
- package/src/services/design/design-instructions.ts +59 -15
- package/src/services/design/design-manifest-system.ts +30 -0
- package/src/services/design/design-settings.service.ts +25 -0
- package/src/services/design/design-skill-sources.ts +70 -0
- package/src/services/design/design-slug.ts +4 -1
- package/src/services/design/design-starter-template.ts +4 -4
- package/src/services/design/design-store.service.ts +33 -17
- package/src/services/design/design-systems-paths.ts +119 -0
- package/src/services/design/design-systems-showcase-template.ts +42 -0
- package/src/services/design/design-systems-showcase.ts +76 -0
- package/src/services/design/design-systems-stale.ts +85 -0
- package/src/services/design/design-systems.service.ts +246 -0
- package/src/services/design/design-turn-snapshot.ts +5 -0
- package/src/services/design/design-tweaks-commit.service.ts +1 -1
- package/src/services/design/design-user-instructions.ts +92 -0
- package/src/services/design/design-user-section.ts +96 -0
- package/src/services/design/design-variants-resolve.ts +24 -0
- package/src/services/design/export/css-url-inline.ts +4 -3
- package/src/services/design/export/design-export-asset-reader.ts +23 -9
- package/src/services/design/export/design-zip-export.ts +51 -3
- package/src/services/design/preview/design-preview-scope.ts +27 -5
- package/src/services/design/preview/design-systems-alias.ts +20 -0
- package/src/services/design/source/design-style-sources.ts +16 -7
- package/src/services/file-filter.service.ts +2 -61
- package/src/services/file-glob.ts +67 -0
- package/src/services/file-index/file-index-runner.ts +169 -0
- package/src/services/file-index/file-index-worker.ts +73 -0
- package/src/services/file-index/index-search.ts +152 -0
- package/src/services/file-index/index-walk.ts +109 -0
- package/src/services/file-list-index.service.ts +189 -70
- package/src/services/file-watcher/linux-inotify.ts +238 -0
- package/src/services/file-watcher/watch-tree.ts +37 -6
- package/src/services/file-watcher.service.ts +40 -8
- package/src/services/file.service.ts +17 -6
- package/src/services/fs-credential-path-guard.ts +57 -20
- package/src/services/group-chat/group-chat.service.ts +1 -1
- package/src/services/jira-debug-session.service.ts +1 -1
- package/src/services/ppmbot/ppmbot-delegation.ts +1 -1
- package/src/services/ppmbot/ppmbot-service.ts +1 -1
- package/src/services/project-content-search.service.ts +45 -11
- package/src/services/proxy-agent-turn.ts +7 -3
- package/src/services/remote-desktop/mediamtx-catalog.ts +89 -0
- package/src/services/remote-desktop/mediamtx-config.ts +91 -0
- package/src/services/remote-desktop/mediamtx-install.service.ts +191 -0
- package/src/services/remote-desktop/mediamtx-paths.ts +51 -0
- package/src/services/remote-desktop/mediamtx-process.ts +152 -0
- package/src/services/remote-desktop/remote-desktop-capture-wayland.ts +312 -0
- package/src/services/remote-desktop/remote-desktop-capture.ts +60 -4
- package/src/services/remote-desktop/remote-desktop-portal.ts +529 -0
- package/src/services/remote-desktop/remote-desktop-requirements.ts +56 -20
- package/src/services/remote-desktop/remote-desktop-session.ts +77 -3
- package/src/services/remote-desktop/remote-desktop-whep-registry.ts +36 -0
- package/src/services/scheduler-runner.ts +2 -3
- package/src/services/session-trace/browser-trace-ingest.ts +131 -0
- package/src/services/session-trace/session-trace-cleanup.ts +65 -0
- package/src/services/session-trace/session-trace-db.ts +89 -0
- package/src/services/session-trace/session-trace-store.ts +132 -0
- package/src/services/session-trace/trace-coalescer.ts +86 -0
- package/src/services/session-trace/trace-recorder.ts +304 -0
- package/src/services/session-trace/trace-writer.ts +83 -0
- package/src/services/system-metrics/core-foundation-darwin.ts +98 -0
- package/src/services/system-metrics/cpu-details-darwin.ts +268 -0
- package/src/services/system-metrics/cpu-memory-collector.ts +26 -11
- package/src/services/system-metrics/darwin-ffi.ts +232 -0
- package/src/services/system-metrics/darwin-tool-reads.ts +111 -0
- package/src/services/system-metrics/device-collector-darwin.ts +78 -0
- package/src/services/system-metrics/device-collector-types.ts +4 -3
- package/src/services/system-metrics/disk-devices-darwin.ts +194 -0
- package/src/services/system-metrics/disk-inventory-darwin.ts +222 -0
- package/src/services/system-metrics/disk-net-collector-darwin.ts +16 -64
- package/src/services/system-metrics/gpu-darwin.ts +327 -0
- package/src/services/system-metrics/hardware-inventory.ts +50 -4
- package/src/services/system-metrics/hid-temperature-darwin.ts +148 -0
- package/src/services/system-metrics/ioreport-darwin.ts +389 -0
- package/src/services/system-metrics/memory-darwin.ts +200 -20
- package/src/services/system-metrics/net-devices-darwin.ts +207 -0
- package/src/services/system-metrics/net-inventory-darwin.ts +67 -0
- package/src/services/system-metrics/plist-binary.ts +236 -0
- package/src/services/system-metrics/plist-xml.ts +204 -0
- package/src/services/system-metrics/process-collector-darwin.ts +72 -15
- package/src/services/system-metrics/process-collector-types.ts +7 -2
- package/src/services/system-metrics/process-io-darwin.ts +62 -0
- package/src/services/system-metrics/process-net-collector-darwin.ts +7 -3
- package/src/services/system-metrics/process-path-darwin.ts +43 -0
- package/src/services/system-metrics/sensors-darwin.ts +93 -0
- package/src/services/system-metrics/smc-darwin.ts +574 -0
- package/src/services/system-metrics/system-metrics-platform.ts +21 -5
- package/src/services/system-metrics/system-metrics-tick.ts +8 -7
- package/src/services/system-metrics/wifi-darwin.ts +224 -0
- package/src/services/system-services/app-icon-service.ts +32 -6
- package/src/services/system-services/app-icons-darwin.ts +88 -0
- package/src/services/system-services/apps-darwin.ts +275 -0
- package/src/services/system-services/apps-linux.ts +3 -0
- package/src/services/system-services/launchd-collector.ts +273 -0
- package/src/services/system-services/launchd-guard.ts +125 -0
- package/src/services/system-services/launchd-job-index.ts +80 -0
- package/src/services/system-services/launchd-logs.ts +317 -0
- package/src/services/system-services/launchd-parse.ts +259 -0
- package/src/services/system-services/service-backend.ts +39 -0
- package/src/services/system-services/systemd-collector.ts +1 -0
- package/src/shared/android-avd.ts +53 -0
- package/src/shared/android-protocol.ts +184 -0
- package/src/shared/design-canvas-check-format.ts +8 -2
- package/src/shared/design-skill-mentions.ts +112 -0
- package/src/shared/design-skill-suggestion.ts +50 -0
- package/src/shared/design-system-init-prompt.ts +73 -18
- package/src/shared/design-types.ts +53 -4
- package/src/shared/design-variants.ts +101 -0
- package/src/shared/file-index-limits.ts +17 -0
- package/src/shared/session-trace.ts +61 -0
- package/src/types/chat.ts +19 -1
- package/src/types/config.ts +27 -0
- package/src/types/project.ts +9 -0
- package/src/types/system-hardware.ts +10 -1
- package/src/types/system-metrics.ts +38 -14
- package/src/types/system-services.ts +63 -16
- package/src/web/app.tsx +5 -0
- package/src/web/components/android/android-apk-upload.ts +75 -0
- package/src/web/components/android/android-avd-create-dialog.tsx +305 -0
- package/src/web/components/android/android-avd-destroy-dialog.tsx +151 -0
- package/src/web/components/android/android-clipboard-panel.tsx +94 -0
- package/src/web/components/android/android-controls.tsx +128 -0
- package/src/web/components/android/android-coords.ts +99 -0
- package/src/web/components/android/android-device-list.tsx +329 -0
- package/src/web/components/android/android-install-panel.tsx +280 -0
- package/src/web/components/android/android-log-filter.ts +75 -0
- package/src/web/components/android/android-logcat-panel.tsx +214 -0
- package/src/web/components/android/android-screenshot-download.ts +56 -0
- package/src/web/components/android/android-tab.tsx +66 -0
- package/src/web/components/android/android-tools-drawer.tsx +76 -0
- package/src/web/components/android/android-viewer.tsx +200 -0
- package/src/web/components/android/android-ws-url.ts +21 -0
- package/src/web/components/android/open-android.ts +21 -0
- package/src/web/components/android/use-android-available.ts +29 -0
- package/src/web/components/android/use-android-keyboard.ts +111 -0
- package/src/web/components/android/use-android-session.ts +277 -0
- package/src/web/components/android/use-android-touch.ts +123 -0
- package/src/web/components/chat/chat-tab.tsx +52 -3
- package/src/web/components/chat/message-input.tsx +8 -15
- package/src/web/components/design/canvas/design-canvas-pane.tsx +21 -37
- package/src/web/components/design/canvas/design-issues-badge.tsx +7 -4
- package/src/web/components/design/canvas/use-design-canvas.ts +15 -9
- package/src/web/components/design/canvas/use-design-frame.ts +36 -0
- package/src/web/components/design/canvas/use-design-live-reload.ts +23 -3
- package/src/web/components/design/canvas/use-design-preview-url.ts +33 -8
- package/src/web/components/design/design-skill-suggestion.tsx +79 -0
- package/src/web/components/design/design-system-setup-banner.tsx +116 -0
- package/src/web/components/design/design-systems-sidebar-group.tsx +68 -0
- package/src/web/components/design/design-tab.tsx +12 -6
- package/src/web/components/design/design-toolbar-badge.tsx +11 -0
- package/src/web/components/design/design-toolbar-list.tsx +5 -2
- package/src/web/components/design/design-toolbar.tsx +21 -21
- package/src/web/components/design/designs-sidebar-panel.tsx +34 -14
- package/src/web/components/design/dialogs/new-design-dialog.tsx +46 -4
- package/src/web/components/design/export/use-design-export.ts +46 -26
- package/src/web/components/design/use-design-auto-check.ts +2 -1
- package/src/web/components/design/variants/design-variant-controls.tsx +67 -0
- package/src/web/components/design/variants/use-design-variants.ts +62 -0
- package/src/web/components/editor/compare-picker.tsx +12 -2
- package/src/web/components/explorer/file-tree.tsx +6 -7
- package/src/web/components/explorer/use-tree-row-dnd.ts +0 -2
- package/src/web/components/floating-window/window-content-registry.ts +8 -8
- package/src/web/components/layout/command-palette.tsx +31 -9
- package/src/web/components/layout/mobile-drawer.tsx +8 -1
- package/src/web/components/layout/nav-section-rail.tsx +8 -1
- package/src/web/components/layout/reparenting-tab.tsx +2 -2
- package/src/web/components/layout/tab-content.tsx +5 -0
- package/src/web/components/layout/tab-pool.tsx +31 -20
- package/src/web/components/remote-desktop/use-h264-canvas-decoder.ts +23 -1
- package/src/web/components/remote-desktop/use-remote-desktop-connection.ts +64 -6
- package/src/web/components/remote-desktop/use-webrtc-canvas-video.ts +255 -0
- package/src/web/components/root-error-boundary.tsx +5 -0
- package/src/web/components/settings/design-app-form-dialog.tsx +87 -0
- package/src/web/components/settings/design-app-remove-dialog.tsx +51 -0
- package/src/web/components/settings/design-apps-settings-section.tsx +108 -0
- package/src/web/components/settings/design-instructions-editor.tsx +97 -0
- package/src/web/components/settings/design-settings-section.tsx +132 -0
- package/src/web/components/settings/design-skill-mention-status.tsx +41 -0
- package/src/web/components/settings/remote-desktop-settings-section.tsx +176 -0
- package/src/web/components/settings/settings-categories.ts +6 -0
- package/src/web/components/settings/settings-section-content.tsx +25 -17
- package/src/web/components/system/performance/cpu-detail.tsx +29 -8
- package/src/web/components/system/performance/fans-detail.tsx +20 -6
- package/src/web/components/system/performance/gpu-detail.tsx +36 -17
- package/src/web/components/system/performance/memory-detail.tsx +48 -25
- package/src/web/components/system/performance/nic-detail.tsx +6 -4
- package/src/web/components/system/performance/performance-panel.tsx +25 -9
- package/src/web/components/system/performance/use-hardware-inventory.ts +21 -1
- package/src/web/components/system/process-group-row.tsx +1 -1
- package/src/web/components/system/process-row-format.ts +6 -3
- package/src/web/components/system/process-row.tsx +1 -1
- package/src/web/components/system/process-table-toolbar.tsx +1 -1
- package/src/web/components/system/services/service-action-confirm.tsx +39 -5
- package/src/web/components/system/services/service-details-sheet.tsx +36 -12
- package/src/web/components/system/services/service-details-text.ts +44 -0
- package/src/web/components/system/services/service-resources.ts +10 -3
- package/src/web/components/system/services/service-row.tsx +14 -6
- package/src/web/components/system/services/service-rows.ts +15 -3
- package/src/web/components/system/services/services-panel.tsx +20 -12
- package/src/web/components/system/system-monitor-body.tsx +1 -0
- package/src/web/hooks/use-chat-prewarm.ts +53 -0
- package/src/web/hooks/use-chat.ts +18 -4
- package/src/web/hooks/use-file-index-invalidation.ts +7 -5
- package/src/web/hooks/use-global-events.ts +12 -1
- package/src/web/hooks/use-remote-file-search.ts +39 -0
- package/src/web/hooks/use-ui-preload.ts +38 -0
- package/src/web/index.html +43 -0
- package/src/web/lib/chunk-recovery.ts +5 -1
- package/src/web/lib/design/api-design-settings.ts +48 -0
- package/src/web/lib/design/api-design-systems.ts +49 -0
- package/src/web/lib/design/api-designs.ts +14 -10
- package/src/web/lib/design/design-change-filter.ts +12 -0
- package/src/web/lib/design/design-export-client.ts +5 -3
- package/src/web/lib/design/design-handoff-prompt.ts +8 -1
- package/src/web/lib/design/design-system-banner-state.ts +42 -0
- package/src/web/lib/design/design-system-status-label.ts +10 -0
- package/src/web/lib/design/design-view-prefs.ts +33 -9
- package/src/web/lib/design/last-used-design-system.ts +22 -0
- package/src/web/lib/design/run-design-system-setup.ts +52 -0
- package/src/web/lib/device-id.ts +39 -0
- package/src/web/lib/feature-badges.ts +2 -0
- package/src/web/lib/lazy-with-preload.tsx +43 -0
- package/src/web/lib/preload-ui.ts +60 -0
- package/src/web/lib/score-file-search.ts +27 -14
- package/src/web/lib/send-to-chat.ts +12 -3
- package/src/web/lib/slash-trigger.ts +27 -0
- package/src/web/lib/tab-type-icons.ts +2 -1
- package/src/web/lib/trace-boot.ts +8 -0
- package/src/web/lib/trace-client.ts +516 -0
- package/src/web/main.tsx +12 -0
- package/src/web/stores/file-store.ts +124 -18
- package/src/web/stores/panel-utils.ts +3 -0
- package/src/web/stores/tab-store.ts +2 -1
- package/src/web/stores/window-panel-persistence.ts +3 -0
- package/vite.config.ts +15 -1
- package/dist/web/assets/_basePickBy-Bw69zEQE.js +0 -1
- package/dist/web/assets/_basePickBy-Bw69zEQE.js.br +0 -0
- package/dist/web/assets/_basePickBy-Bw69zEQE.js.gz +0 -0
- package/dist/web/assets/_baseUniq-DAyolJ43.js +0 -1
- package/dist/web/assets/_baseUniq-DAyolJ43.js.br +0 -0
- package/dist/web/assets/_baseUniq-DAyolJ43.js.gz +0 -0
- package/dist/web/assets/accounts-settings-section-BOBJbG7i.js +0 -1
- package/dist/web/assets/accounts-settings-section-BOBJbG7i.js.br +0 -0
- package/dist/web/assets/accounts-settings-section-BOBJbG7i.js.gz +0 -0
- package/dist/web/assets/agent-session-sheet-CjD4hBZV.js +0 -2
- package/dist/web/assets/agent-session-sheet-CjD4hBZV.js.br +0 -0
- package/dist/web/assets/agent-session-sheet-CjD4hBZV.js.gz +0 -0
- package/dist/web/assets/agent-session-window-content-Drm1HsSn.js +0 -1
- package/dist/web/assets/agent-session-window-content-Drm1HsSn.js.br +0 -0
- package/dist/web/assets/agent-session-window-content-Drm1HsSn.js.gz +0 -0
- package/dist/web/assets/ai-resource-editor-M1Eax2Hc.js +0 -1
- package/dist/web/assets/ai-resource-editor-M1Eax2Hc.js.br +0 -0
- package/dist/web/assets/ai-resource-editor-M1Eax2Hc.js.gz +0 -0
- package/dist/web/assets/ai-settings-section-B73t9SXm.js +0 -1
- package/dist/web/assets/ai-settings-section-H173dm1k.js +0 -1
- package/dist/web/assets/ai-settings-section-H173dm1k.js.br +0 -0
- package/dist/web/assets/ai-settings-section-H173dm1k.js.gz +0 -0
- package/dist/web/assets/angular-html-J6Ms52K8.js +0 -1
- package/dist/web/assets/angular-html-J6Ms52K8.js.br +0 -0
- package/dist/web/assets/angular-html-J6Ms52K8.js.gz +0 -0
- package/dist/web/assets/angular-ts-CAhRz96e.js +0 -1
- package/dist/web/assets/angular-ts-CAhRz96e.js.br +0 -0
- package/dist/web/assets/angular-ts-CAhRz96e.js.gz +0 -0
- package/dist/web/assets/api-settings-BA_n8cPt.js +0 -1
- package/dist/web/assets/api-settings-BWgfXl7o.js +0 -1
- package/dist/web/assets/api-settings-BWgfXl7o.js.br +0 -0
- package/dist/web/assets/api-settings-BWgfXl7o.js.gz +0 -0
- package/dist/web/assets/apl-2MCcXlWR.js +0 -1
- package/dist/web/assets/apl-2MCcXlWR.js.br +0 -0
- package/dist/web/assets/apl-2MCcXlWR.js.gz +0 -0
- package/dist/web/assets/appearance-settings-section-Dqu20pt8.js +0 -1
- package/dist/web/assets/appearance-settings-section-Dqu20pt8.js.br +0 -0
- package/dist/web/assets/appearance-settings-section-Dqu20pt8.js.gz +0 -0
- package/dist/web/assets/apps-panel-mkrzY7K0.js +0 -1
- package/dist/web/assets/apps-panel-mkrzY7K0.js.br +0 -0
- package/dist/web/assets/apps-panel-mkrzY7K0.js.gz +0 -0
- package/dist/web/assets/arc-tdiKo2LM.js +0 -1
- package/dist/web/assets/arc-tdiKo2LM.js.br +0 -0
- package/dist/web/assets/arc-tdiKo2LM.js.gz +0 -0
- package/dist/web/assets/architecture-PBZL5I3N-Dd8ecdVL.js +0 -1
- package/dist/web/assets/architectureDiagram-2XIMDMQ5-D3Kyv-1E.js +0 -36
- package/dist/web/assets/architectureDiagram-2XIMDMQ5-D3Kyv-1E.js.br +0 -0
- package/dist/web/assets/architectureDiagram-2XIMDMQ5-D3Kyv-1E.js.gz +0 -0
- package/dist/web/assets/astro-Df1OdN4m.js +0 -1
- package/dist/web/assets/astro-Df1OdN4m.js.br +0 -0
- package/dist/web/assets/astro-Df1OdN4m.js.gz +0 -0
- package/dist/web/assets/audio-preview-BrS2qNK0.js +0 -1
- package/dist/web/assets/audio-preview-BrS2qNK0.js.br +0 -0
- package/dist/web/assets/audio-preview-BrS2qNK0.js.gz +0 -0
- package/dist/web/assets/blade-Cd63UVub.js +0 -1
- package/dist/web/assets/blade-Cd63UVub.js.br +0 -0
- package/dist/web/assets/blade-Cd63UVub.js.gz +0 -0
- package/dist/web/assets/blockDiagram-WCTKOSBZ-BMAZdvRi.js +0 -132
- package/dist/web/assets/blockDiagram-WCTKOSBZ-BMAZdvRi.js.br +0 -0
- package/dist/web/assets/blockDiagram-WCTKOSBZ-BMAZdvRi.js.gz +0 -0
- package/dist/web/assets/branch-review-tab-Dw3bNixU.js +0 -1
- package/dist/web/assets/branch-review-tab-Dw3bNixU.js.br +0 -0
- package/dist/web/assets/branch-review-tab-Dw3bNixU.js.gz +0 -0
- package/dist/web/assets/bsl-1CuDa_M4.js +0 -1
- package/dist/web/assets/bsl-1CuDa_M4.js.br +0 -0
- package/dist/web/assets/bsl-1CuDa_M4.js.gz +0 -0
- package/dist/web/assets/c4Diagram-IC4MRINW-CAjD3Gn8.js +0 -10
- package/dist/web/assets/c4Diagram-IC4MRINW-CAjD3Gn8.js.br +0 -0
- package/dist/web/assets/c4Diagram-IC4MRINW-CAjD3Gn8.js.gz +0 -0
- package/dist/web/assets/cairo-DU1PMYXA.js +0 -1
- package/dist/web/assets/cairo-DU1PMYXA.js.br +0 -0
- package/dist/web/assets/cairo-DU1PMYXA.js.gz +0 -0
- package/dist/web/assets/channel-BKByU_R7.js +0 -1
- package/dist/web/assets/chat-tab-BAbcVFzD.js +0 -15
- package/dist/web/assets/chat-tab-BAbcVFzD.js.br +0 -0
- package/dist/web/assets/chat-tab-BAbcVFzD.js.gz +0 -0
- package/dist/web/assets/chat-tab-BaXGaBEC.js +0 -1
- package/dist/web/assets/chat-tab-BaXGaBEC.js.br +0 -4
- package/dist/web/assets/chat-tab-BaXGaBEC.js.gz +0 -0
- package/dist/web/assets/chunk-4BX2VUAB-Bn-YX9SD.js +0 -1
- package/dist/web/assets/chunk-55IACEB6-BF1QUNzF.js +0 -1
- package/dist/web/assets/chunk-7E7YKBS2-Y8i842vs.js +0 -1
- package/dist/web/assets/chunk-7R4GIKGN-aYUi4Dg7.js +0 -80
- package/dist/web/assets/chunk-7R4GIKGN-aYUi4Dg7.js.br +0 -0
- package/dist/web/assets/chunk-7R4GIKGN-aYUi4Dg7.js.gz +0 -0
- package/dist/web/assets/chunk-C72U2L5F-DePb5v0g.js +0 -1
- package/dist/web/assets/chunk-EGIJ26TM-Cf91EBG8.js +0 -1
- package/dist/web/assets/chunk-FMBD7UC4-DBgmdGFu.js +0 -15
- package/dist/web/assets/chunk-GEFDOKGD-ChmKs9PJ.js +0 -2
- package/dist/web/assets/chunk-GEFDOKGD-ChmKs9PJ.js.br +0 -0
- package/dist/web/assets/chunk-GEFDOKGD-ChmKs9PJ.js.gz +0 -0
- package/dist/web/assets/chunk-GLR3WWYH-B1nZul8I.js +0 -2
- package/dist/web/assets/chunk-GLR3WWYH-B1nZul8I.js.br +0 -0
- package/dist/web/assets/chunk-GLR3WWYH-B1nZul8I.js.gz +0 -0
- package/dist/web/assets/chunk-HHEYEP7N-CoR3TyGL.js +0 -1
- package/dist/web/assets/chunk-JSJVCQXG-BpatlovW.js +0 -1
- package/dist/web/assets/chunk-JSJVCQXG-BpatlovW.js.br +0 -0
- package/dist/web/assets/chunk-JSJVCQXG-BpatlovW.js.gz +0 -0
- package/dist/web/assets/chunk-KX2RTZJC-CTJV1WGB.js +0 -1
- package/dist/web/assets/chunk-KYZI473N-BxfmPzFJ.js +0 -53
- package/dist/web/assets/chunk-KYZI473N-BxfmPzFJ.js.br +0 -0
- package/dist/web/assets/chunk-KYZI473N-BxfmPzFJ.js.gz +0 -0
- package/dist/web/assets/chunk-L3YUKLVL-BExrHOyg.js +0 -1
- package/dist/web/assets/chunk-MX3YWQON-BG9ObxKs.js +0 -1
- package/dist/web/assets/chunk-MX3YWQON-BG9ObxKs.js.br +0 -0
- package/dist/web/assets/chunk-MX3YWQON-BG9ObxKs.js.gz +0 -0
- package/dist/web/assets/chunk-NQ4KR5QH-B8xmieTd.js +0 -220
- package/dist/web/assets/chunk-NQ4KR5QH-B8xmieTd.js.br +0 -0
- package/dist/web/assets/chunk-NQ4KR5QH-B8xmieTd.js.gz +0 -0
- package/dist/web/assets/chunk-O4XLMI2P-Cf2YvmZo.js +0 -7
- package/dist/web/assets/chunk-O4XLMI2P-Cf2YvmZo.js.br +0 -0
- package/dist/web/assets/chunk-O4XLMI2P-Cf2YvmZo.js.gz +0 -0
- package/dist/web/assets/chunk-OZEHJAEY-wW-79da1.js +0 -1
- package/dist/web/assets/chunk-OZEHJAEY-wW-79da1.js.br +0 -0
- package/dist/web/assets/chunk-OZEHJAEY-wW-79da1.js.gz +0 -0
- package/dist/web/assets/chunk-PQ6SQG4A-BhCLzZ_8.js +0 -1
- package/dist/web/assets/chunk-PQ6SQG4A-BhCLzZ_8.js.br +0 -0
- package/dist/web/assets/chunk-PQ6SQG4A-BhCLzZ_8.js.gz +0 -0
- package/dist/web/assets/chunk-PU5JKC2W-CKUcSNda.js +0 -11
- package/dist/web/assets/chunk-PU5JKC2W-CKUcSNda.js.br +0 -0
- package/dist/web/assets/chunk-PU5JKC2W-CKUcSNda.js.gz +0 -0
- package/dist/web/assets/chunk-QZHKN3VN-CxEEroyy.js +0 -1
- package/dist/web/assets/chunk-R5LLSJPH-C6YJaeiQ.js +0 -1
- package/dist/web/assets/chunk-WL4C6EOR-fpGz5Qkt.js +0 -189
- package/dist/web/assets/chunk-WL4C6EOR-fpGz5Qkt.js.br +0 -0
- package/dist/web/assets/chunk-WL4C6EOR-fpGz5Qkt.js.gz +0 -0
- package/dist/web/assets/chunk-XIRO2GV7-D4mb9uez.js +0 -1
- package/dist/web/assets/chunk-XPW4576I-BsnVFuiw.js +0 -32
- package/dist/web/assets/chunk-XPW4576I-BsnVFuiw.js.br +0 -0
- package/dist/web/assets/chunk-XPW4576I-BsnVFuiw.js.gz +0 -0
- package/dist/web/assets/chunk-XZSTWKYB-C5ZAMBUL.js +0 -94
- package/dist/web/assets/chunk-XZSTWKYB-C5ZAMBUL.js.br +0 -0
- package/dist/web/assets/chunk-XZSTWKYB-C5ZAMBUL.js.gz +0 -0
- package/dist/web/assets/chunk-YBOYWFTD-D_MZS495.js +0 -1
- package/dist/web/assets/classDiagram-VBA2DB6C-C8hWXhiY.js +0 -1
- package/dist/web/assets/classDiagram-v2-RAHNMMFH-CagMLDTJ.js +0 -1
- package/dist/web/assets/clone-BqgSwKma.js +0 -1
- package/dist/web/assets/cobol-Bf7PNJa-.js +0 -1
- package/dist/web/assets/cobol-Bf7PNJa-.js.br +0 -0
- package/dist/web/assets/cobol-Bf7PNJa-.js.gz +0 -0
- package/dist/web/assets/code-editor-CXLANXnI.js +0 -7
- package/dist/web/assets/code-editor-CXLANXnI.js.br +0 -0
- package/dist/web/assets/code-editor-CXLANXnI.js.gz +0 -0
- package/dist/web/assets/codex-reset-credit-button-CB8Dfhki.js +0 -1
- package/dist/web/assets/codex-reset-credit-button-CB8Dfhki.js.br +0 -0
- package/dist/web/assets/codex-reset-credit-button-CB8Dfhki.js.gz +0 -0
- package/dist/web/assets/coffee-DWtdhq5t.js +0 -1
- package/dist/web/assets/coffee-DWtdhq5t.js.br +0 -0
- package/dist/web/assets/coffee-DWtdhq5t.js.gz +0 -0
- package/dist/web/assets/conflict-editor-CKsxIw3v.js +0 -19
- package/dist/web/assets/conflict-editor-CKsxIw3v.js.br +0 -0
- package/dist/web/assets/conflict-editor-CKsxIw3v.js.gz +0 -0
- package/dist/web/assets/cose-bilkent-S5V4N54A-Bl1C2PtT.js +0 -1
- package/dist/web/assets/cose-bilkent-S5V4N54A-Bl1C2PtT.js.br +0 -0
- package/dist/web/assets/cose-bilkent-S5V4N54A-Bl1C2PtT.js.gz +0 -0
- package/dist/web/assets/cpp-tzJ6DEF8.js +0 -1
- package/dist/web/assets/cpp-tzJ6DEF8.js.br +0 -0
- package/dist/web/assets/cpp-tzJ6DEF8.js.gz +0 -0
- package/dist/web/assets/crystal-D3O_7u8O.js +0 -1
- package/dist/web/assets/crystal-D3O_7u8O.js.br +0 -0
- package/dist/web/assets/crystal-D3O_7u8O.js.gz +0 -0
- package/dist/web/assets/csv-preview-U0v_r_-7.js +0 -2
- package/dist/web/assets/csv-preview-U0v_r_-7.js.br +0 -0
- package/dist/web/assets/csv-preview-U0v_r_-7.js.gz +0 -0
- package/dist/web/assets/dagre-KLK3FWXG-Dk_l3Pes.js +0 -4
- package/dist/web/assets/dagre-KLK3FWXG-Dk_l3Pes.js.br +0 -0
- package/dist/web/assets/dagre-KLK3FWXG-Dk_l3Pes.js.gz +0 -0
- package/dist/web/assets/dagre-Xi7wK-JA.js +0 -1
- package/dist/web/assets/dagre-Xi7wK-JA.js.br +0 -0
- package/dist/web/assets/dagre-Xi7wK-JA.js.gz +0 -0
- package/dist/web/assets/data-grid-overlay-editor-BtbgZvja.js +0 -1
- package/dist/web/assets/data-grid-overlay-editor-BtbgZvja.js.br +0 -0
- package/dist/web/assets/data-grid-overlay-editor-BtbgZvja.js.gz +0 -0
- package/dist/web/assets/database-viewer-xQyUcBoL.js +0 -1
- package/dist/web/assets/database-viewer-xQyUcBoL.js.br +0 -0
- package/dist/web/assets/database-viewer-xQyUcBoL.js.gz +0 -0
- package/dist/web/assets/design-export-client-D9h9wJ3e.js +0 -1
- package/dist/web/assets/design-export-client-D9h9wJ3e.js.br +0 -0
- package/dist/web/assets/design-export-client-D9h9wJ3e.js.gz +0 -0
- package/dist/web/assets/design-responsive-dialog-BhyR-zhE.js +0 -1
- package/dist/web/assets/design-responsive-dialog-BhyR-zhE.js.br +0 -0
- package/dist/web/assets/design-responsive-dialog-BhyR-zhE.js.gz +0 -0
- package/dist/web/assets/design-tab-aaAt2_QE.js +0 -33
- package/dist/web/assets/design-tab-aaAt2_QE.js.br +0 -0
- package/dist/web/assets/design-tab-aaAt2_QE.js.gz +0 -0
- package/dist/web/assets/designs-sidebar-panel-CTzO4Thu.js +0 -1
- package/dist/web/assets/designs-sidebar-panel-CTzO4Thu.js.br +0 -0
- package/dist/web/assets/designs-sidebar-panel-CTzO4Thu.js.gz +0 -0
- package/dist/web/assets/diagram-E7M64L7V-CMHanwJ6.js +0 -24
- package/dist/web/assets/diagram-E7M64L7V-CMHanwJ6.js.br +0 -0
- package/dist/web/assets/diagram-E7M64L7V-CMHanwJ6.js.gz +0 -0
- package/dist/web/assets/diagram-IFDJBPK2-C7JWw7ZZ.js +0 -43
- package/dist/web/assets/diagram-IFDJBPK2-C7JWw7ZZ.js.br +0 -0
- package/dist/web/assets/diagram-IFDJBPK2-C7JWw7ZZ.js.gz +0 -0
- package/dist/web/assets/diagram-P4PSJMXO-C7U4pK7W.js +0 -24
- package/dist/web/assets/diagram-P4PSJMXO-C7U4pK7W.js.br +0 -0
- package/dist/web/assets/diagram-P4PSJMXO-C7U4pK7W.js.gz +0 -0
- package/dist/web/assets/dialog-z8PLkL8n.js +0 -1
- package/dist/web/assets/dialog-z8PLkL8n.js.br +0 -0
- package/dist/web/assets/dialog-z8PLkL8n.js.gz +0 -0
- package/dist/web/assets/diff-viewer-CSE2-OE7.js +0 -4
- package/dist/web/assets/diff-viewer-CSE2-OE7.js.br +0 -0
- package/dist/web/assets/diff-viewer-CSE2-OE7.js.gz +0 -0
- package/dist/web/assets/edge-Ken4Hk5e.js +0 -1
- package/dist/web/assets/edge-Ken4Hk5e.js.br +0 -0
- package/dist/web/assets/edge-Ken4Hk5e.js.gz +0 -0
- package/dist/web/assets/edit-diff-preview-gH6pRk4S.js +0 -7
- package/dist/web/assets/edit-diff-preview-gH6pRk4S.js.br +0 -0
- package/dist/web/assets/edit-diff-preview-gH6pRk4S.js.gz +0 -0
- package/dist/web/assets/editor-language-service-CYl04pUy.js +0 -1
- package/dist/web/assets/editor-language-service-CYl04pUy.js.br +0 -0
- package/dist/web/assets/editor-language-service-CYl04pUy.js.gz +0 -0
- package/dist/web/assets/elixir-qzSsEy1Q.js +0 -1
- package/dist/web/assets/elixir-qzSsEy1Q.js.br +0 -0
- package/dist/web/assets/elixir-qzSsEy1Q.js.gz +0 -0
- package/dist/web/assets/elm-BKU79v-o.js +0 -1
- package/dist/web/assets/elm-BKU79v-o.js.br +0 -0
- package/dist/web/assets/elm-BKU79v-o.js.gz +0 -0
- package/dist/web/assets/erDiagram-INFDFZHY-D1kHE5Qj.js +0 -70
- package/dist/web/assets/erDiagram-INFDFZHY-D1kHE5Qj.js.br +0 -0
- package/dist/web/assets/erDiagram-INFDFZHY-D1kHE5Qj.js.gz +0 -0
- package/dist/web/assets/erb-CUMr2kDy.js +0 -1
- package/dist/web/assets/erb-CUMr2kDy.js.br +0 -0
- package/dist/web/assets/erb-CUMr2kDy.js.gz +0 -0
- package/dist/web/assets/erlang-DPA9imAd.js +0 -1
- package/dist/web/assets/erlang-DPA9imAd.js.br +0 -0
- package/dist/web/assets/erlang-DPA9imAd.js.gz +0 -0
- package/dist/web/assets/esm-DShyAo_4.js +0 -2
- package/dist/web/assets/esm-DShyAo_4.js.br +0 -0
- package/dist/web/assets/esm-DShyAo_4.js.gz +0 -0
- package/dist/web/assets/explorer-body-BBOcvwmV.js +0 -2
- package/dist/web/assets/explorer-body-BBOcvwmV.js.br +0 -0
- package/dist/web/assets/explorer-body-BBOcvwmV.js.gz +0 -0
- package/dist/web/assets/explorer-window-content-juCGcrkc.js +0 -1
- package/dist/web/assets/explorer-window-content-juCGcrkc.js.br +0 -0
- package/dist/web/assets/explorer-window-content-juCGcrkc.js.gz +0 -0
- package/dist/web/assets/extension-manager-section-poMRmwvg.js +0 -1
- package/dist/web/assets/extension-manager-section-poMRmwvg.js.br +0 -0
- package/dist/web/assets/extension-manager-section-poMRmwvg.js.gz +0 -0
- package/dist/web/assets/extension-webview-0QfzTI6s.js +0 -12
- package/dist/web/assets/extension-webview-0QfzTI6s.js.br +0 -0
- package/dist/web/assets/extension-webview-0QfzTI6s.js.gz +0 -0
- package/dist/web/assets/file-store-DCU7_YyB.js +0 -1
- package/dist/web/assets/file-store-DCU7_YyB.js.br +0 -0
- package/dist/web/assets/file-store-DCU7_YyB.js.gz +0 -0
- package/dist/web/assets/files-settings-section-DJptxRgH.js +0 -1
- package/dist/web/assets/files-settings-section-DJptxRgH.js.br +0 -0
- package/dist/web/assets/files-settings-section-DJptxRgH.js.gz +0 -0
- package/dist/web/assets/flowDiagram-PKNHOUZH-5j6r0h8E.js +0 -162
- package/dist/web/assets/flowDiagram-PKNHOUZH-5j6r0h8E.js.br +0 -0
- package/dist/web/assets/flowDiagram-PKNHOUZH-5j6r0h8E.js.gz +0 -0
- package/dist/web/assets/format-file-meta-B0ZpqzSM.js +0 -1
- package/dist/web/assets/format-file-meta-B0ZpqzSM.js.br +0 -0
- package/dist/web/assets/format-file-meta-B0ZpqzSM.js.gz +0 -0
- package/dist/web/assets/fortran-fixed-form-BnRe75vJ.js +0 -1
- package/dist/web/assets/fortran-fixed-form-BnRe75vJ.js.br +0 -0
- package/dist/web/assets/fortran-fixed-form-BnRe75vJ.js.gz +0 -0
- package/dist/web/assets/fsharp-C0D14cqr.js +0 -1
- package/dist/web/assets/fsharp-C0D14cqr.js.br +0 -0
- package/dist/web/assets/fsharp-C0D14cqr.js.gz +0 -0
- package/dist/web/assets/ganttDiagram-A5KZAMGK-CJX_hRxO.js +0 -292
- package/dist/web/assets/ganttDiagram-A5KZAMGK-CJX_hRxO.js.br +0 -0
- package/dist/web/assets/ganttDiagram-A5KZAMGK-CJX_hRxO.js.gz +0 -0
- package/dist/web/assets/gdresource-DDQStAPx.js +0 -1
- package/dist/web/assets/gdresource-DDQStAPx.js.br +0 -0
- package/dist/web/assets/gdresource-DDQStAPx.js.gz +0 -0
- package/dist/web/assets/general-settings-section-BFNbdDNv.js +0 -1
- package/dist/web/assets/general-settings-section-BFNbdDNv.js.br +0 -0
- package/dist/web/assets/general-settings-section-BFNbdDNv.js.gz +0 -0
- package/dist/web/assets/git-commit-BcF7ip8n.js +0 -1
- package/dist/web/assets/git-commit-BcF7ip8n.js.br +0 -2
- package/dist/web/assets/git-commit-BcF7ip8n.js.gz +0 -0
- package/dist/web/assets/git-log-panel-SMMIbjSe.js +0 -1
- package/dist/web/assets/git-log-panel-SMMIbjSe.js.br +0 -0
- package/dist/web/assets/git-log-panel-SMMIbjSe.js.gz +0 -0
- package/dist/web/assets/git-rebase-DQ-DGs9P.js +0 -1
- package/dist/web/assets/gitGraph-HDMCJU4V-Dwqx7AzH.js +0 -1
- package/dist/web/assets/gitGraphDiagram-K3NZZRJ6-DnkwBYek.js +0 -65
- package/dist/web/assets/gitGraphDiagram-K3NZZRJ6-DnkwBYek.js.br +0 -0
- package/dist/web/assets/gitGraphDiagram-K3NZZRJ6-DnkwBYek.js.gz +0 -0
- package/dist/web/assets/glide-data-grid-DZVmgu0T.js +0 -141
- package/dist/web/assets/glide-data-grid-DZVmgu0T.js.br +0 -0
- package/dist/web/assets/glide-data-grid-DZVmgu0T.js.gz +0 -0
- package/dist/web/assets/glimmer-js-Cn05Qf4f.js +0 -1
- package/dist/web/assets/glimmer-js-Cn05Qf4f.js.br +0 -0
- package/dist/web/assets/glimmer-js-Cn05Qf4f.js.gz +0 -0
- package/dist/web/assets/glimmer-ts-ukNFxH-o.js +0 -1
- package/dist/web/assets/glimmer-ts-ukNFxH-o.js.br +0 -0
- package/dist/web/assets/glimmer-ts-ukNFxH-o.js.gz +0 -0
- package/dist/web/assets/glsl-D7XHVdFd.js +0 -1
- package/dist/web/assets/glsl-D7XHVdFd.js.br +0 -0
- package/dist/web/assets/glsl-D7XHVdFd.js.gz +0 -0
- package/dist/web/assets/graphlib-otYit1an.js +0 -1
- package/dist/web/assets/graphlib-otYit1an.js.br +0 -0
- package/dist/web/assets/graphlib-otYit1an.js.gz +0 -0
- package/dist/web/assets/graphql-BujSBt9z.js +0 -1
- package/dist/web/assets/graphql-BujSBt9z.js.br +0 -0
- package/dist/web/assets/graphql-BujSBt9z.js.gz +0 -0
- package/dist/web/assets/group-chat-tab-d_aaYuK_.js +0 -1
- package/dist/web/assets/group-chat-tab-d_aaYuK_.js.br +0 -0
- package/dist/web/assets/group-chat-tab-d_aaYuK_.js.gz +0 -0
- package/dist/web/assets/hack-zmnOVU3R.js +0 -1
- package/dist/web/assets/hack-zmnOVU3R.js.br +0 -0
- package/dist/web/assets/hack-zmnOVU3R.js.gz +0 -0
- package/dist/web/assets/haml-DIs8wmxP.js +0 -1
- package/dist/web/assets/haml-DIs8wmxP.js.br +0 -0
- package/dist/web/assets/haml-DIs8wmxP.js.gz +0 -0
- package/dist/web/assets/handlebars-BjIyUuCC.js +0 -1
- package/dist/web/assets/handlebars-BjIyUuCC.js.br +0 -0
- package/dist/web/assets/handlebars-BjIyUuCC.js.gz +0 -0
- package/dist/web/assets/html-Dgrt7dRq.js +0 -1
- package/dist/web/assets/html-Dgrt7dRq.js.br +0 -0
- package/dist/web/assets/html-Dgrt7dRq.js.gz +0 -0
- package/dist/web/assets/html-derivative-CsPUnWon.js +0 -1
- package/dist/web/assets/http-CUl13kbR.js +0 -1
- package/dist/web/assets/http-CUl13kbR.js.br +0 -0
- package/dist/web/assets/http-CUl13kbR.js.gz +0 -0
- package/dist/web/assets/hurl-BXqL73E2.js +0 -1
- package/dist/web/assets/hurl-BXqL73E2.js.br +0 -0
- package/dist/web/assets/hurl-BXqL73E2.js.gz +0 -0
- package/dist/web/assets/hxml-DXKLhcpl.js +0 -1
- package/dist/web/assets/hxml-DXKLhcpl.js.br +0 -0
- package/dist/web/assets/hxml-DXKLhcpl.js.gz +0 -0
- package/dist/web/assets/image-preview-DuODZoNO.js +0 -1
- package/dist/web/assets/index-BmsPSBtF.css +0 -1
- package/dist/web/assets/index-BmsPSBtF.css.br +0 -0
- package/dist/web/assets/index-BmsPSBtF.css.gz +0 -0
- package/dist/web/assets/index-CIscPw4g.js +0 -52
- package/dist/web/assets/index-CIscPw4g.js.br +0 -0
- package/dist/web/assets/index-CIscPw4g.js.gz +0 -0
- package/dist/web/assets/info-3K5VOQVL-BNTEA-rE.js +0 -1
- package/dist/web/assets/infoDiagram-LFFYTUFH-Cy0n0rSo.js +0 -2
- package/dist/web/assets/isEmpty-BDA3VnUk.js +0 -1
- package/dist/web/assets/isEmpty-BDA3VnUk.js.br +0 -2
- package/dist/web/assets/isEmpty-BDA3VnUk.js.gz +0 -0
- package/dist/web/assets/ishikawaDiagram-PHBUUO56-C5OufTs3.js +0 -70
- package/dist/web/assets/ishikawaDiagram-PHBUUO56-C5OufTs3.js.br +0 -0
- package/dist/web/assets/ishikawaDiagram-PHBUUO56-C5OufTs3.js.gz +0 -0
- package/dist/web/assets/jinja-BcLcRUjT.js +0 -1
- package/dist/web/assets/jinja-BcLcRUjT.js.br +0 -0
- package/dist/web/assets/jinja-BcLcRUjT.js.gz +0 -0
- package/dist/web/assets/jira-watcher-section-CsbhnLLn.js +0 -1
- package/dist/web/assets/jison-B9yzZVz4.js +0 -1
- package/dist/web/assets/jison-B9yzZVz4.js.br +0 -0
- package/dist/web/assets/jison-B9yzZVz4.js.gz +0 -0
- package/dist/web/assets/journeyDiagram-4ABVD52K-CEF5TlV8.js +0 -139
- package/dist/web/assets/journeyDiagram-4ABVD52K-CEF5TlV8.js.br +0 -0
- package/dist/web/assets/journeyDiagram-4ABVD52K-CEF5TlV8.js.gz +0 -0
- package/dist/web/assets/julia-CJkZzFKP.js +0 -1
- package/dist/web/assets/julia-CJkZzFKP.js.br +0 -0
- package/dist/web/assets/julia-CJkZzFKP.js.gz +0 -0
- package/dist/web/assets/just-C44GS86E.js +0 -1
- package/dist/web/assets/just-C44GS86E.js.br +0 -0
- package/dist/web/assets/just-C44GS86E.js.gz +0 -0
- package/dist/web/assets/kanban-definition-K7BYSVSG-BPtiCSi5.js +0 -89
- package/dist/web/assets/kanban-definition-K7BYSVSG-BPtiCSi5.js.br +0 -0
- package/dist/web/assets/kanban-definition-K7BYSVSG-BPtiCSi5.js.gz +0 -0
- package/dist/web/assets/keybindings-store-BPs0pM0r.js +0 -1
- package/dist/web/assets/keyboard-shortcuts-section-CXqc2OtM.js +0 -1
- package/dist/web/assets/keyboard-shortcuts-section-CXqc2OtM.js.br +0 -0
- package/dist/web/assets/keyboard-shortcuts-section-CXqc2OtM.js.gz +0 -0
- package/dist/web/assets/language-servers-section-B4FsBVvZ.js +0 -2
- package/dist/web/assets/language-servers-section-B4FsBVvZ.js.br +0 -0
- package/dist/web/assets/language-servers-section-B4FsBVvZ.js.gz +0 -0
- package/dist/web/assets/latex-DInNvJDf.js +0 -1
- package/dist/web/assets/latex-DInNvJDf.js.br +0 -0
- package/dist/web/assets/latex-DInNvJDf.js.gz +0 -0
- package/dist/web/assets/line-CM_Cil_v.js +0 -1
- package/dist/web/assets/linear-uttzXe-M.js +0 -1
- package/dist/web/assets/linear-uttzXe-M.js.br +0 -0
- package/dist/web/assets/linear-uttzXe-M.js.gz +0 -0
- package/dist/web/assets/liquid-CBcFjKJU.js +0 -1
- package/dist/web/assets/liquid-CBcFjKJU.js.br +0 -0
- package/dist/web/assets/liquid-CBcFjKJU.js.gz +0 -0
- package/dist/web/assets/lsp-client-MQ4mjDfT.js +0 -1
- package/dist/web/assets/lsp-client-MQ4mjDfT.js.br +0 -0
- package/dist/web/assets/lsp-client-MQ4mjDfT.js.gz +0 -0
- package/dist/web/assets/lua-BZXtZv2R.js +0 -1
- package/dist/web/assets/lua-BZXtZv2R.js.br +0 -0
- package/dist/web/assets/lua-BZXtZv2R.js.gz +0 -0
- package/dist/web/assets/markdown-renderer-BvCZZlue.js +0 -1
- package/dist/web/assets/markdown-renderer-CjPb5pns.js +0 -5
- package/dist/web/assets/markdown-renderer-CjPb5pns.js.br +0 -0
- package/dist/web/assets/markdown-renderer-CjPb5pns.js.gz +0 -0
- package/dist/web/assets/marko-rw0cyptA.js +0 -1
- package/dist/web/assets/marko-rw0cyptA.js.br +0 -0
- package/dist/web/assets/marko-rw0cyptA.js.gz +0 -0
- package/dist/web/assets/mdc-DlEHJVBz.js +0 -1
- package/dist/web/assets/mdc-DlEHJVBz.js.br +0 -0
- package/dist/web/assets/mdc-DlEHJVBz.js.gz +0 -0
- package/dist/web/assets/mermaid-parser.core-D15K-OQt.js +0 -4
- package/dist/web/assets/mermaid-parser.core-D15K-OQt.js.br +0 -0
- package/dist/web/assets/mermaid-parser.core-D15K-OQt.js.gz +0 -0
- package/dist/web/assets/mermaid.core-CzH9eDdk.js +0 -11
- package/dist/web/assets/mermaid.core-CzH9eDdk.js.br +0 -0
- package/dist/web/assets/mermaid.core-CzH9eDdk.js.gz +0 -0
- package/dist/web/assets/mindmap-definition-YRQLILUH-Bs0uMwX_.js +0 -68
- package/dist/web/assets/mindmap-definition-YRQLILUH-Bs0uMwX_.js.br +0 -0
- package/dist/web/assets/mindmap-definition-YRQLILUH-Bs0uMwX_.js.gz +0 -0
- package/dist/web/assets/mobile-bottom-sheet-CLic9ovp.js +0 -1
- package/dist/web/assets/mobile-bottom-sheet-CLic9ovp.js.br +0 -0
- package/dist/web/assets/mobile-bottom-sheet-CLic9ovp.js.gz +0 -0
- package/dist/web/assets/mobile-explorer-sheet-0aGhVQtI.js +0 -1
- package/dist/web/assets/mobile-explorer-sheet-0aGhVQtI.js.br +0 -0
- package/dist/web/assets/mobile-explorer-sheet-0aGhVQtI.js.gz +0 -0
- package/dist/web/assets/new-design-dialog-2oT2oc_F.js +0 -1
- package/dist/web/assets/new-design-dialog-2oT2oc_F.js.br +0 -0
- package/dist/web/assets/new-design-dialog-2oT2oc_F.js.gz +0 -0
- package/dist/web/assets/nextflow-DxkUhMdp.js +0 -1
- package/dist/web/assets/nextflow-DxkUhMdp.js.br +0 -0
- package/dist/web/assets/nextflow-DxkUhMdp.js.gz +0 -0
- package/dist/web/assets/nginx-62Ft1TFn.js +0 -1
- package/dist/web/assets/nginx-62Ft1TFn.js.br +0 -0
- package/dist/web/assets/nginx-62Ft1TFn.js.gz +0 -0
- package/dist/web/assets/nim-DcHjQWnX.js +0 -1
- package/dist/web/assets/nim-DcHjQWnX.js.br +0 -0
- package/dist/web/assets/nim-DcHjQWnX.js.gz +0 -0
- package/dist/web/assets/notification-store-Dd25PMPQ.js +0 -1
- package/dist/web/assets/notifications-settings-section-QeNYQwV1.js +0 -1
- package/dist/web/assets/notifications-settings-section-QeNYQwV1.js.br +0 -3
- package/dist/web/assets/notifications-settings-section-QeNYQwV1.js.gz +0 -0
- package/dist/web/assets/number-overlay-editor-xzM7GhYV.js +0 -9
- package/dist/web/assets/number-overlay-editor-xzM7GhYV.js.br +0 -0
- package/dist/web/assets/number-overlay-editor-xzM7GhYV.js.gz +0 -0
- package/dist/web/assets/onboarding-entry-Bh-WE3vq.js +0 -1
- package/dist/web/assets/onboarding-entry-Bh-WE3vq.js.br +0 -0
- package/dist/web/assets/onboarding-entry-Bh-WE3vq.js.gz +0 -0
- package/dist/web/assets/onboarding-quick-orientation-WLKI95GY.js +0 -1
- package/dist/web/assets/onboarding-quick-orientation-WLKI95GY.js.br +0 -0
- package/dist/web/assets/onboarding-quick-orientation-WLKI95GY.js.gz +0 -0
- package/dist/web/assets/ordinal-tB7t1fBX.js +0 -1
- package/dist/web/assets/ordinal-tB7t1fBX.js.br +0 -0
- package/dist/web/assets/ordinal-tB7t1fBX.js.gz +0 -0
- package/dist/web/assets/overview-panel-jYyiDmut.js +0 -1
- package/dist/web/assets/overview-panel-jYyiDmut.js.br +0 -0
- package/dist/web/assets/overview-panel-jYyiDmut.js.gz +0 -0
- package/dist/web/assets/packet-RMMSAZCW-PexBvQKN.js +0 -1
- package/dist/web/assets/panel-store-1X6yM3XZ.js +0 -1
- package/dist/web/assets/panel-store-1X6yM3XZ.js.br +0 -0
- package/dist/web/assets/panel-store-1X6yM3XZ.js.gz +0 -0
- package/dist/web/assets/performance-panel-Ub96qrEH.js +0 -3
- package/dist/web/assets/performance-panel-Ub96qrEH.js.br +0 -0
- package/dist/web/assets/performance-panel-Ub96qrEH.js.gz +0 -0
- package/dist/web/assets/perl-Ceq8UFIR.js +0 -1
- package/dist/web/assets/perl-Ceq8UFIR.js.br +0 -0
- package/dist/web/assets/perl-Ceq8UFIR.js.gz +0 -0
- package/dist/web/assets/php-1Lsklgkb.js +0 -1
- package/dist/web/assets/php-1Lsklgkb.js.br +0 -0
- package/dist/web/assets/php-1Lsklgkb.js.gz +0 -0
- package/dist/web/assets/pie-UPGHQEXC-Cnk03D15.js +0 -1
- package/dist/web/assets/pieDiagram-SKSYHLDU-C6kQJeXW.js +0 -30
- package/dist/web/assets/pieDiagram-SKSYHLDU-C6kQJeXW.js.br +0 -0
- package/dist/web/assets/pieDiagram-SKSYHLDU-C6kQJeXW.js.gz +0 -0
- package/dist/web/assets/postgres-viewer-DiI6yvzb.js +0 -3
- package/dist/web/assets/postgres-viewer-DiI6yvzb.js.br +0 -0
- package/dist/web/assets/postgres-viewer-DiI6yvzb.js.gz +0 -0
- package/dist/web/assets/ppmbot-settings-section-CPMGP66g.js +0 -1
- package/dist/web/assets/ppmbot-settings-section-CPMGP66g.js.br +0 -0
- package/dist/web/assets/ppmbot-settings-section-CPMGP66g.js.gz +0 -0
- package/dist/web/assets/pptx-export-D378qi81.js +0 -111
- package/dist/web/assets/pptx-export-D378qi81.js.br +0 -0
- package/dist/web/assets/pptx-export-D378qi81.js.gz +0 -0
- package/dist/web/assets/problems-panel-CWwzZIP3.js +0 -1
- package/dist/web/assets/problems-panel-CWwzZIP3.js.br +0 -0
- package/dist/web/assets/problems-panel-CWwzZIP3.js.gz +0 -0
- package/dist/web/assets/process-row-format-Dbs_tAZ2.js +0 -1
- package/dist/web/assets/process-table-BwPws3zS.js +0 -1
- package/dist/web/assets/process-table-BwPws3zS.js.br +0 -0
- package/dist/web/assets/process-table-BwPws3zS.js.gz +0 -0
- package/dist/web/assets/proxy-settings-section-nS8VbxI_.js +0 -1
- package/dist/web/assets/proxy-settings-section-nS8VbxI_.js.br +0 -0
- package/dist/web/assets/proxy-settings-section-nS8VbxI_.js.gz +0 -0
- package/dist/web/assets/pug-Baa_KKxu.js +0 -1
- package/dist/web/assets/pug-Baa_KKxu.js.br +0 -0
- package/dist/web/assets/pug-Baa_KKxu.js.gz +0 -0
- package/dist/web/assets/qml-DkxSUM4O.js +0 -1
- package/dist/web/assets/qml-DkxSUM4O.js.br +0 -0
- package/dist/web/assets/qml-DkxSUM4O.js.gz +0 -0
- package/dist/web/assets/quadrantDiagram-337W2JSQ-CpNJp34_.js +0 -7
- package/dist/web/assets/quadrantDiagram-337W2JSQ-CpNJp34_.js.br +0 -0
- package/dist/web/assets/quadrantDiagram-337W2JSQ-CpNJp34_.js.gz +0 -0
- package/dist/web/assets/query-audit-section-Dv5Pxn-w.js +0 -1
- package/dist/web/assets/query-audit-section-Dv5Pxn-w.js.br +0 -0
- package/dist/web/assets/query-audit-section-Dv5Pxn-w.js.gz +0 -0
- package/dist/web/assets/radar-KQ55EAFF-DAKOTfGS.js +0 -1
- package/dist/web/assets/razor-DXiIfWAM.js +0 -1
- package/dist/web/assets/razor-DXiIfWAM.js.br +0 -0
- package/dist/web/assets/razor-DXiIfWAM.js.gz +0 -0
- package/dist/web/assets/remote-desktop-clipboard-notice-DEbdu0hC.js +0 -1
- package/dist/web/assets/remote-desktop-clipboard-notice-DEbdu0hC.js.br +0 -0
- package/dist/web/assets/remote-desktop-clipboard-notice-DEbdu0hC.js.gz +0 -0
- package/dist/web/assets/remote-desktop-mobile-sheet-BJm-akVY.js +0 -2
- package/dist/web/assets/remote-desktop-mobile-sheet-BJm-akVY.js.br +0 -0
- package/dist/web/assets/remote-desktop-mobile-sheet-BJm-akVY.js.gz +0 -0
- package/dist/web/assets/remote-desktop-mobile-view-DPdGFD6C.js +0 -1
- package/dist/web/assets/remote-desktop-mobile-view-DPdGFD6C.js.br +0 -0
- package/dist/web/assets/remote-desktop-mobile-view-DPdGFD6C.js.gz +0 -0
- package/dist/web/assets/remote-desktop-readiness-gate-DV7YgSpP.js +0 -1
- package/dist/web/assets/remote-desktop-readiness-gate-DV7YgSpP.js.br +0 -0
- package/dist/web/assets/remote-desktop-readiness-gate-DV7YgSpP.js.gz +0 -0
- package/dist/web/assets/remote-desktop-window-content-BktcWMjD.js +0 -1
- package/dist/web/assets/remote-desktop-window-content-BktcWMjD.js.br +0 -0
- package/dist/web/assets/remote-desktop-window-content-BktcWMjD.js.gz +0 -0
- package/dist/web/assets/requirementDiagram-Z7DCOOCP-DDJk4m9N.js +0 -73
- package/dist/web/assets/requirementDiagram-Z7DCOOCP-DDJk4m9N.js.br +0 -0
- package/dist/web/assets/requirementDiagram-Z7DCOOCP-DDJk4m9N.js.gz +0 -0
- package/dist/web/assets/rst-D-Y9n5Co.js +0 -1
- package/dist/web/assets/rst-D-Y9n5Co.js.br +0 -0
- package/dist/web/assets/rst-D-Y9n5Co.js.gz +0 -0
- package/dist/web/assets/ruby-B-F9BwY7.js +0 -1
- package/dist/web/assets/ruby-B-F9BwY7.js.br +0 -0
- package/dist/web/assets/ruby-B-F9BwY7.js.gz +0 -0
- package/dist/web/assets/run-in-terminal-B_PCeBqG.js +0 -1
- package/dist/web/assets/sankeyDiagram-WA2Y5GQK-BwS5Ty3s.js +0 -10
- package/dist/web/assets/sankeyDiagram-WA2Y5GQK-BwS5Ty3s.js.br +0 -0
- package/dist/web/assets/sankeyDiagram-WA2Y5GQK-BwS5Ty3s.js.gz +0 -0
- package/dist/web/assets/sas-fuBUrPyY.js +0 -1
- package/dist/web/assets/sas-fuBUrPyY.js.br +0 -0
- package/dist/web/assets/sas-fuBUrPyY.js.gz +0 -0
- package/dist/web/assets/schedules-settings-section-B3HYKSVh.js +0 -1
- package/dist/web/assets/schedules-settings-section-B3HYKSVh.js.br +0 -0
- package/dist/web/assets/schedules-settings-section-B3HYKSVh.js.gz +0 -0
- package/dist/web/assets/scss-D-S9GOOa.js +0 -1
- package/dist/web/assets/scss-D-S9GOOa.js.br +0 -0
- package/dist/web/assets/scss-D-S9GOOa.js.gz +0 -0
- package/dist/web/assets/send-to-chat-Bjg6c8Ld.js +0 -1
- package/dist/web/assets/send-to-chat-Bjg6c8Ld.js.br +0 -0
- package/dist/web/assets/send-to-chat-Bjg6c8Ld.js.gz +0 -0
- package/dist/web/assets/sequenceDiagram-2WXFIKYE-Bzj80L9s.js +0 -145
- package/dist/web/assets/sequenceDiagram-2WXFIKYE-Bzj80L9s.js.br +0 -0
- package/dist/web/assets/sequenceDiagram-2WXFIKYE-Bzj80L9s.js.gz +0 -0
- package/dist/web/assets/services-panel-D6k6AVS4.js +0 -1
- package/dist/web/assets/services-panel-D6k6AVS4.js.br +0 -0
- package/dist/web/assets/services-panel-D6k6AVS4.js.gz +0 -0
- package/dist/web/assets/settings-body-Cu0mNA5x.js +0 -2
- package/dist/web/assets/settings-body-Cu0mNA5x.js.br +0 -0
- package/dist/web/assets/settings-body-Cu0mNA5x.js.gz +0 -0
- package/dist/web/assets/settings-store-DIV25PM_.js +0 -2
- package/dist/web/assets/settings-store-DIV25PM_.js.br +0 -0
- package/dist/web/assets/settings-store-DIV25PM_.js.gz +0 -0
- package/dist/web/assets/settings-tab-C-A6RNQ3.js +0 -1
- package/dist/web/assets/settings-window-content-48e5FJAq.js +0 -1
- package/dist/web/assets/shaderlab-CbKXv2hc.js +0 -1
- package/dist/web/assets/shaderlab-CbKXv2hc.js.br +0 -0
- package/dist/web/assets/shaderlab-CbKXv2hc.js.gz +0 -0
- package/dist/web/assets/shellsession-QyLVGGSs.js +0 -1
- package/dist/web/assets/soy-D3jPyr8y.js +0 -1
- package/dist/web/assets/soy-D3jPyr8y.js.br +0 -0
- package/dist/web/assets/soy-D3jPyr8y.js.gz +0 -0
- package/dist/web/assets/sparql-CYT9glll.js +0 -1
- package/dist/web/assets/sparql-CYT9glll.js.br +0 -0
- package/dist/web/assets/sparql-CYT9glll.js.gz +0 -0
- package/dist/web/assets/sql-query-editor-CgGWYu9K.js +0 -1
- package/dist/web/assets/sql-query-editor-CgGWYu9K.js.br +0 -0
- package/dist/web/assets/sql-query-editor-CgGWYu9K.js.gz +0 -0
- package/dist/web/assets/sqlite-viewer-Co1Oi3dv.js +0 -1
- package/dist/web/assets/sqlite-viewer-Co1Oi3dv.js.br +0 -0
- package/dist/web/assets/sqlite-viewer-Co1Oi3dv.js.gz +0 -0
- package/dist/web/assets/stata-CuZibPbZ.js +0 -1
- package/dist/web/assets/stata-CuZibPbZ.js.br +0 -0
- package/dist/web/assets/stata-CuZibPbZ.js.gz +0 -0
- package/dist/web/assets/stateDiagram-RAJIS63D-BFSaNtAC.js +0 -1
- package/dist/web/assets/stateDiagram-RAJIS63D-BFSaNtAC.js.br +0 -0
- package/dist/web/assets/stateDiagram-RAJIS63D-BFSaNtAC.js.gz +0 -0
- package/dist/web/assets/stateDiagram-v2-FVOUBMTO-Dq5o5Edc.js +0 -1
- package/dist/web/assets/surrealql-DCt_HqT_.js +0 -1
- package/dist/web/assets/surrealql-DCt_HqT_.js.br +0 -0
- package/dist/web/assets/surrealql-DCt_HqT_.js.gz +0 -0
- package/dist/web/assets/svelte-Dxef3zzb.js +0 -1
- package/dist/web/assets/svelte-Dxef3zzb.js.br +0 -0
- package/dist/web/assets/svelte-Dxef3zzb.js.gz +0 -0
- package/dist/web/assets/system-monitor-body-DxPKVa-W.js +0 -2
- package/dist/web/assets/system-monitor-body-DxPKVa-W.js.br +0 -0
- package/dist/web/assets/system-monitor-body-DxPKVa-W.js.gz +0 -0
- package/dist/web/assets/system-monitor-tab-4miOZuQQ.js +0 -1
- package/dist/web/assets/system-monitor-window-content-B-A7DdML.js +0 -1
- package/dist/web/assets/tab-host-window-content-CChcpg1v.js +0 -1
- package/dist/web/assets/tab-host-window-content-CChcpg1v.js.br +0 -0
- package/dist/web/assets/tab-host-window-content-CChcpg1v.js.gz +0 -0
- package/dist/web/assets/tab-store-D33icgdA.js +0 -1
- package/dist/web/assets/templ-BxPyLSW3.js +0 -1
- package/dist/web/assets/templ-BxPyLSW3.js.br +0 -0
- package/dist/web/assets/templ-BxPyLSW3.js.gz +0 -0
- package/dist/web/assets/terminal-tab-BDqlyBLK.js +0 -3
- package/dist/web/assets/terminal-tab-BDqlyBLK.js.br +0 -0
- package/dist/web/assets/terminal-tab-BDqlyBLK.js.gz +0 -0
- package/dist/web/assets/tex-X8wxt-z9.js +0 -1
- package/dist/web/assets/tex-X8wxt-z9.js.br +0 -0
- package/dist/web/assets/tex-X8wxt-z9.js.gz +0 -0
- package/dist/web/assets/timeline-definition-YZTLITO2-DeyGFXdF.js +0 -61
- package/dist/web/assets/timeline-definition-YZTLITO2-DeyGFXdF.js.br +0 -0
- package/dist/web/assets/timeline-definition-YZTLITO2-DeyGFXdF.js.gz +0 -0
- package/dist/web/assets/tool-cards-iJ8tyrLq.js +0 -9
- package/dist/web/assets/tool-cards-iJ8tyrLq.js.br +0 -0
- package/dist/web/assets/tool-cards-iJ8tyrLq.js.gz +0 -0
- package/dist/web/assets/treemap-KZPCXAKY-CWZwaAa2.js +0 -1
- package/dist/web/assets/ts-tags-xWmciEKa.js +0 -1
- package/dist/web/assets/ts-tags-xWmciEKa.js.br +0 -0
- package/dist/web/assets/ts-tags-xWmciEKa.js.gz +0 -0
- package/dist/web/assets/twig-B62mBY9Q.js +0 -1
- package/dist/web/assets/twig-B62mBY9Q.js.br +0 -0
- package/dist/web/assets/twig-B62mBY9Q.js.gz +0 -0
- package/dist/web/assets/use-inline-blame-D9js570a.js +0 -16
- package/dist/web/assets/use-inline-blame-D9js570a.js.br +0 -0
- package/dist/web/assets/use-inline-blame-D9js570a.js.gz +0 -0
- package/dist/web/assets/use-lsp-BYtylZId.js +0 -6
- package/dist/web/assets/use-lsp-BYtylZId.js.br +0 -0
- package/dist/web/assets/use-lsp-BYtylZId.js.gz +0 -0
- package/dist/web/assets/use-monaco-theme-DJ8y_7IZ.js +0 -1
- package/dist/web/assets/use-process-kill-BS84S-kD.js +0 -1
- package/dist/web/assets/use-process-kill-BS84S-kD.js.br +0 -0
- package/dist/web/assets/use-process-kill-BS84S-kD.js.gz +0 -0
- package/dist/web/assets/use-websocket-Mqj27umG.js +0 -1
- package/dist/web/assets/vennDiagram-LZ73GAT5-Bbwf0YLL.js +0 -34
- package/dist/web/assets/vennDiagram-LZ73GAT5-Bbwf0YLL.js.br +0 -0
- package/dist/web/assets/vennDiagram-LZ73GAT5-Bbwf0YLL.js.gz +0 -0
- package/dist/web/assets/video-preview-BuzUAIma.js +0 -1
- package/dist/web/assets/video-preview-BuzUAIma.js.br +0 -0
- package/dist/web/assets/video-preview-BuzUAIma.js.gz +0 -0
- package/dist/web/assets/voice-settings-section-DnwQjBbw.js +0 -1
- package/dist/web/assets/voice-settings-section-DnwQjBbw.js.br +0 -0
- package/dist/web/assets/voice-settings-section-DnwQjBbw.js.gz +0 -0
- package/dist/web/assets/vue-Dx8GG0dF.js +0 -1
- package/dist/web/assets/vue-Dx8GG0dF.js.br +0 -0
- package/dist/web/assets/vue-Dx8GG0dF.js.gz +0 -0
- package/dist/web/assets/vue-html-Dg_kQiUk.js +0 -1
- package/dist/web/assets/vue-html-Dg_kQiUk.js.br +0 -0
- package/dist/web/assets/vue-html-Dg_kQiUk.js.gz +0 -0
- package/dist/web/assets/vue-vine-Da7b1CgK.js +0 -1
- package/dist/web/assets/vue-vine-Da7b1CgK.js.br +0 -0
- package/dist/web/assets/vue-vine-Da7b1CgK.js.gz +0 -0
- package/dist/web/assets/window-pip-registry-Bl--fK8-.js +0 -1
- package/dist/web/assets/xml-Gz-NM9x2.js +0 -1
- package/dist/web/assets/xml-Gz-NM9x2.js.br +0 -0
- package/dist/web/assets/xml-Gz-NM9x2.js.gz +0 -0
- package/dist/web/assets/xsl-DkiCKXu5.js +0 -1
- package/dist/web/assets/xsl-DkiCKXu5.js.br +0 -0
- package/dist/web/assets/xsl-DkiCKXu5.js.gz +0 -0
- package/dist/web/assets/xychartDiagram-JWTSCODW-BtHgREli.js +0 -7
- package/dist/web/assets/xychartDiagram-JWTSCODW-BtHgREli.js.br +0 -0
- package/dist/web/assets/xychartDiagram-JWTSCODW-BtHgREli.js.gz +0 -0
- /package/dist/web/assets/{__vite-browser-external-BMqZFa_k.js → __vite-browser-external-C5mXParC.js} +0 -0
- /package/dist/web/assets/{abap-DEWZ8BfO.js → abap-Ds6L4g_T.js} +0 -0
- /package/dist/web/assets/{abap-DEWZ8BfO.js.br → abap-Ds6L4g_T.js.br} +0 -0
- /package/dist/web/assets/{abap-DEWZ8BfO.js.gz → abap-Ds6L4g_T.js.gz} +0 -0
- /package/dist/web/assets/{actionscript-3-Csfd4JWP.js → actionscript-3-CLNiH4aj.js} +0 -0
- /package/dist/web/assets/{actionscript-3-Csfd4JWP.js.br → actionscript-3-CLNiH4aj.js.br} +0 -0
- /package/dist/web/assets/{actionscript-3-Csfd4JWP.js.gz → actionscript-3-CLNiH4aj.js.gz} +0 -0
- /package/dist/web/assets/{ada-DV_KFgBU.js → ada-BoiebnO1.js} +0 -0
- /package/dist/web/assets/{ada-DV_KFgBU.js.br → ada-BoiebnO1.js.br} +0 -0
- /package/dist/web/assets/{ada-DV_KFgBU.js.gz → ada-BoiebnO1.js.gz} +0 -0
- /package/dist/web/assets/{agent-session-sheet-store-BcQbnaV2.js → agent-session-sheet-store-_OeezCXB.js} +0 -0
- /package/dist/web/assets/{andromeeda-wg0iUpxt.js → andromeeda-CdMZLp1H.js} +0 -0
- /package/dist/web/assets/{andromeeda-wg0iUpxt.js.br → andromeeda-CdMZLp1H.js.br} +0 -0
- /package/dist/web/assets/{andromeeda-wg0iUpxt.js.gz → andromeeda-CdMZLp1H.js.gz} +0 -0
- /package/dist/web/assets/{apache-CdwViB2Y.js → apache-BKOdPQIP.js} +0 -0
- /package/dist/web/assets/{apache-CdwViB2Y.js.br → apache-BKOdPQIP.js.br} +0 -0
- /package/dist/web/assets/{apache-CdwViB2Y.js.gz → apache-BKOdPQIP.js.gz} +0 -0
- /package/dist/web/assets/{apex-DjpPrCTU.js → apex-kTmPDDVo.js} +0 -0
- /package/dist/web/assets/{apex-DjpPrCTU.js.br → apex-kTmPDDVo.js.br} +0 -0
- /package/dist/web/assets/{apex-DjpPrCTU.js.gz → apex-kTmPDDVo.js.gz} +0 -0
- /package/dist/web/assets/{api-themes-DiF-wuKh.js → api-themes-BtMBSjuM.js} +0 -0
- /package/dist/web/assets/{applescript-CGbSGD4R.js → applescript-C65SMPLe.js} +0 -0
- /package/dist/web/assets/{applescript-CGbSGD4R.js.br → applescript-C65SMPLe.js.br} +0 -0
- /package/dist/web/assets/{applescript-CGbSGD4R.js.gz → applescript-C65SMPLe.js.gz} +0 -0
- /package/dist/web/assets/{apply-theme-aVoqSG0I.js → apply-theme-Cc_cmrD5.js} +0 -0
- /package/dist/web/assets/{ara-1-9TqW15.js → ara-BKT6no2T.js} +0 -0
- /package/dist/web/assets/{ara-1-9TqW15.js.br → ara-BKT6no2T.js.br} +0 -0
- /package/dist/web/assets/{ara-1-9TqW15.js.gz → ara-BKT6no2T.js.gz} +0 -0
- /package/dist/web/assets/{array-fwuN0Fua.js → array-F4LNYbhF.js} +0 -0
- /package/dist/web/assets/{asciidoc-DzSPlQkC.js → asciidoc-BGur0ue3.js} +0 -0
- /package/dist/web/assets/{asciidoc-DzSPlQkC.js.br → asciidoc-BGur0ue3.js.br} +0 -0
- /package/dist/web/assets/{asciidoc-DzSPlQkC.js.gz → asciidoc-BGur0ue3.js.gz} +0 -0
- /package/dist/web/assets/{asm-C3PsH5OJ.js → asm-DOfgqCKD.js} +0 -0
- /package/dist/web/assets/{asm-C3PsH5OJ.js.br → asm-DOfgqCKD.js.br} +0 -0
- /package/dist/web/assets/{asm-C3PsH5OJ.js.gz → asm-DOfgqCKD.js.gz} +0 -0
- /package/dist/web/assets/{aurora-x--713kWoQ.js → aurora-x-D64MWGxe.js} +0 -0
- /package/dist/web/assets/{aurora-x--713kWoQ.js.br → aurora-x-D64MWGxe.js.br} +0 -0
- /package/dist/web/assets/{aurora-x--713kWoQ.js.gz → aurora-x-D64MWGxe.js.gz} +0 -0
- /package/dist/web/assets/{awk-DmvCNQFQ.js → awk-B_r8LcWp.js} +0 -0
- /package/dist/web/assets/{awk-DmvCNQFQ.js.br → awk-B_r8LcWp.js.br} +0 -0
- /package/dist/web/assets/{awk-DmvCNQFQ.js.gz → awk-B_r8LcWp.js.gz} +0 -0
- /package/dist/web/assets/{ayu-dark-8co70cPM.js → ayu-dark-DlDyr9-5.js} +0 -0
- /package/dist/web/assets/{ayu-dark-8co70cPM.js.br → ayu-dark-DlDyr9-5.js.br} +0 -0
- /package/dist/web/assets/{ayu-dark-8co70cPM.js.gz → ayu-dark-DlDyr9-5.js.gz} +0 -0
- /package/dist/web/assets/{ayu-light-CAGFfaLb.js → ayu-light-BF0a181n.js} +0 -0
- /package/dist/web/assets/{ayu-light-CAGFfaLb.js.br → ayu-light-BF0a181n.js.br} +0 -0
- /package/dist/web/assets/{ayu-light-CAGFfaLb.js.gz → ayu-light-BF0a181n.js.gz} +0 -0
- /package/dist/web/assets/{ayu-mirage-Bpbk4keR.js → ayu-mirage-B6hnRsHM.js} +0 -0
- /package/dist/web/assets/{ayu-mirage-Bpbk4keR.js.br → ayu-mirage-B6hnRsHM.js.br} +0 -0
- /package/dist/web/assets/{ayu-mirage-Bpbk4keR.js.gz → ayu-mirage-B6hnRsHM.js.gz} +0 -0
- /package/dist/web/assets/{ballerina-BHbHOl8y.js → ballerina-CyhD34qA.js} +0 -0
- /package/dist/web/assets/{ballerina-BHbHOl8y.js.br → ballerina-CyhD34qA.js.br} +0 -0
- /package/dist/web/assets/{ballerina-BHbHOl8y.js.gz → ballerina-CyhD34qA.js.gz} +0 -0
- /package/dist/web/assets/{bat-BcnkOgri.js → bat-wHB_k1YG.js} +0 -0
- /package/dist/web/assets/{bat-BcnkOgri.js.br → bat-wHB_k1YG.js.br} +0 -0
- /package/dist/web/assets/{bat-BcnkOgri.js.gz → bat-wHB_k1YG.js.gz} +0 -0
- /package/dist/web/assets/{beancount-952ROYkl.js → beancount-SUF8MnzM.js} +0 -0
- /package/dist/web/assets/{beancount-952ROYkl.js.br → beancount-SUF8MnzM.js.br} +0 -0
- /package/dist/web/assets/{beancount-952ROYkl.js.gz → beancount-SUF8MnzM.js.gz} +0 -0
- /package/dist/web/assets/{berry-yDQfynXd.js → berry-BP_34_jr.js} +0 -0
- /package/dist/web/assets/{berry-yDQfynXd.js.br → berry-BP_34_jr.js.br} +0 -0
- /package/dist/web/assets/{berry-yDQfynXd.js.gz → berry-BP_34_jr.js.gz} +0 -0
- /package/dist/web/assets/{bibtex-TdWMdJVz.js → bibtex-DKgKw2bN.js} +0 -0
- /package/dist/web/assets/{bibtex-TdWMdJVz.js.br → bibtex-DKgKw2bN.js.br} +0 -0
- /package/dist/web/assets/{bibtex-TdWMdJVz.js.gz → bibtex-DKgKw2bN.js.gz} +0 -0
- /package/dist/web/assets/{bicep-CFQHR1PY.js → bicep-BjU-KQeN.js} +0 -0
- /package/dist/web/assets/{bicep-CFQHR1PY.js.br → bicep-BjU-KQeN.js.br} +0 -0
- /package/dist/web/assets/{bicep-CFQHR1PY.js.gz → bicep-BjU-KQeN.js.gz} +0 -0
- /package/dist/web/assets/{bird2-BdRJM4BV.js → bird2-CCFmrT2P.js} +0 -0
- /package/dist/web/assets/{bird2-BdRJM4BV.js.br → bird2-CCFmrT2P.js.br} +0 -0
- /package/dist/web/assets/{bird2-BdRJM4BV.js.gz → bird2-CCFmrT2P.js.gz} +0 -0
- /package/dist/web/assets/{button-CsmGH5xa.js → button-DeAyLH9U.js} +0 -0
- /package/dist/web/assets/{button-CsmGH5xa.js.br → button-DeAyLH9U.js.br} +0 -0
- /package/dist/web/assets/{button-CsmGH5xa.js.gz → button-DeAyLH9U.js.gz} +0 -0
- /package/dist/web/assets/{c-Bc2eqPiL.js → c-BX-1170_.js} +0 -0
- /package/dist/web/assets/{c-Bc2eqPiL.js.br → c-BX-1170_.js.br} +0 -0
- /package/dist/web/assets/{c-Bc2eqPiL.js.gz → c-BX-1170_.js.gz} +0 -0
- /package/dist/web/assets/{c3-CRxq42OE.js → c3-DSc4IcLQ.js} +0 -0
- /package/dist/web/assets/{c3-CRxq42OE.js.br → c3-DSc4IcLQ.js.br} +0 -0
- /package/dist/web/assets/{c3-CRxq42OE.js.gz → c3-DSc4IcLQ.js.gz} +0 -0
- /package/dist/web/assets/{cadence-CvKiCJ6i.js → cadence-CUaLlWyn.js} +0 -0
- /package/dist/web/assets/{cadence-CvKiCJ6i.js.br → cadence-CUaLlWyn.js.br} +0 -0
- /package/dist/web/assets/{cadence-CvKiCJ6i.js.gz → cadence-CUaLlWyn.js.gz} +0 -0
- /package/dist/web/assets/{can-open-in-ppm-B9ZwTOGE.js → can-open-in-ppm-DeE2-kd5.js} +0 -0
- /package/dist/web/assets/{can-open-in-ppm-B9ZwTOGE.js.br → can-open-in-ppm-DeE2-kd5.js.br} +0 -0
- /package/dist/web/assets/{can-open-in-ppm-B9ZwTOGE.js.gz → can-open-in-ppm-DeE2-kd5.js.gz} +0 -0
- /package/dist/web/assets/{catppuccin-frappe-CYln5D8J.js → catppuccin-frappe-BT3IMDYa.js} +0 -0
- /package/dist/web/assets/{catppuccin-frappe-CYln5D8J.js.br → catppuccin-frappe-BT3IMDYa.js.br} +0 -0
- /package/dist/web/assets/{catppuccin-frappe-CYln5D8J.js.gz → catppuccin-frappe-BT3IMDYa.js.gz} +0 -0
- /package/dist/web/assets/{catppuccin-latte-Dw_yaLRM.js → catppuccin-latte-DM9i15n3.js} +0 -0
- /package/dist/web/assets/{catppuccin-latte-Dw_yaLRM.js.br → catppuccin-latte-DM9i15n3.js.br} +0 -0
- /package/dist/web/assets/{catppuccin-latte-Dw_yaLRM.js.gz → catppuccin-latte-DM9i15n3.js.gz} +0 -0
- /package/dist/web/assets/{catppuccin-macchiato-CO6892Hz.js → catppuccin-macchiato-CAEDr_h3.js} +0 -0
- /package/dist/web/assets/{catppuccin-macchiato-CO6892Hz.js.br → catppuccin-macchiato-CAEDr_h3.js.br} +0 -0
- /package/dist/web/assets/{catppuccin-macchiato-CO6892Hz.js.gz → catppuccin-macchiato-CAEDr_h3.js.gz} +0 -0
- /package/dist/web/assets/{catppuccin-mocha-CKpp7FzS.js → catppuccin-mocha-BzOmDckq.js} +0 -0
- /package/dist/web/assets/{catppuccin-mocha-CKpp7FzS.js.br → catppuccin-mocha-BzOmDckq.js.br} +0 -0
- /package/dist/web/assets/{catppuccin-mocha-CKpp7FzS.js.gz → catppuccin-mocha-BzOmDckq.js.gz} +0 -0
- /package/dist/web/assets/{chat-preparation-cache-DoS7sdal.js → chat-preparation-cache-BUCR58h4.js} +0 -0
- /package/dist/web/assets/{chat-preparation-cache-DoS7sdal.js.br → chat-preparation-cache-BUCR58h4.js.br} +0 -0
- /package/dist/web/assets/{chat-preparation-cache-DoS7sdal.js.gz → chat-preparation-cache-BUCR58h4.js.gz} +0 -0
- /package/dist/web/assets/{clarity-CEkTmKo1.js → clarity-BijZXjQ6.js} +0 -0
- /package/dist/web/assets/{clarity-CEkTmKo1.js.br → clarity-BijZXjQ6.js.br} +0 -0
- /package/dist/web/assets/{clarity-CEkTmKo1.js.gz → clarity-BijZXjQ6.js.gz} +0 -0
- /package/dist/web/assets/{clojure-DtkOZ-xf.js → clojure--ad2221W.js} +0 -0
- /package/dist/web/assets/{clojure-DtkOZ-xf.js.br → clojure--ad2221W.js.br} +0 -0
- /package/dist/web/assets/{clojure-DtkOZ-xf.js.gz → clojure--ad2221W.js.gz} +0 -0
- /package/dist/web/assets/{cmake-DVVDhwHM.js → cmake-DyjUMpXU.js} +0 -0
- /package/dist/web/assets/{cmake-DVVDhwHM.js.br → cmake-DyjUMpXU.js.br} +0 -0
- /package/dist/web/assets/{cmake-DVVDhwHM.js.gz → cmake-DyjUMpXU.js.gz} +0 -0
- /package/dist/web/assets/{codeowners-Dg3cj8f_.js → codeowners-BeMhKnC9.js} +0 -0
- /package/dist/web/assets/{codeql-DExLR_AI.js → codeql-BGtwwp5_.js} +0 -0
- /package/dist/web/assets/{codeql-DExLR_AI.js.br → codeql-BGtwwp5_.js.br} +0 -0
- /package/dist/web/assets/{codeql-DExLR_AI.js.gz → codeql-BGtwwp5_.js.gz} +0 -0
- /package/dist/web/assets/{common-lisp-Cy8I242f.js → common-lisp--ldIKs5M.js} +0 -0
- /package/dist/web/assets/{common-lisp-Cy8I242f.js.br → common-lisp--ldIKs5M.js.br} +0 -0
- /package/dist/web/assets/{common-lisp-Cy8I242f.js.gz → common-lisp--ldIKs5M.js.gz} +0 -0
- /package/dist/web/assets/{context-menu-CH1mvCwA.js → context-menu-7OX80HDB.js} +0 -0
- /package/dist/web/assets/{context-menu-CH1mvCwA.js.br → context-menu-7OX80HDB.js.br} +0 -0
- /package/dist/web/assets/{context-menu-CH1mvCwA.js.gz → context-menu-7OX80HDB.js.gz} +0 -0
- /package/dist/web/assets/{coq-2MKB1MCt.js → coq-CRn01_Db.js} +0 -0
- /package/dist/web/assets/{coq-2MKB1MCt.js.br → coq-CRn01_Db.js.br} +0 -0
- /package/dist/web/assets/{coq-2MKB1MCt.js.gz → coq-CRn01_Db.js.gz} +0 -0
- /package/dist/web/assets/{csharp-B23liTj2.js → csharp-CuWM1IYq.js} +0 -0
- /package/dist/web/assets/{csharp-B23liTj2.js.br → csharp-CuWM1IYq.js.br} +0 -0
- /package/dist/web/assets/{csharp-B23liTj2.js.gz → csharp-CuWM1IYq.js.gz} +0 -0
- /package/dist/web/assets/{css-Dclh0w-I.js → css-CQ_jz6Vl.js} +0 -0
- /package/dist/web/assets/{css-Dclh0w-I.js.br → css-CQ_jz6Vl.js.br} +0 -0
- /package/dist/web/assets/{css-Dclh0w-I.js.gz → css-CQ_jz6Vl.js.gz} +0 -0
- /package/dist/web/assets/{csv-BSGq6VGV.js → csv-DP77pbR8.js} +0 -0
- /package/dist/web/assets/{csv-BSGq6VGV.js.br → csv-DP77pbR8.js.br} +0 -0
- /package/dist/web/assets/{csv-BSGq6VGV.js.gz → csv-DP77pbR8.js.gz} +0 -0
- /package/dist/web/assets/{csv-parser-CoLcPhFa.js → csv-parser-CoxPdyLw.js} +0 -0
- /package/dist/web/assets/{csv-parser-CoLcPhFa.js.br → csv-parser-CoxPdyLw.js.br} +0 -0
- /package/dist/web/assets/{csv-parser-CoLcPhFa.js.gz → csv-parser-CoxPdyLw.js.gz} +0 -0
- /package/dist/web/assets/{cue-DoNxdOeO.js → cue-DScL5ELc.js} +0 -0
- /package/dist/web/assets/{cue-DoNxdOeO.js.br → cue-DScL5ELc.js.br} +0 -0
- /package/dist/web/assets/{cue-DoNxdOeO.js.gz → cue-DScL5ELc.js.gz} +0 -0
- /package/dist/web/assets/{cypher-CMv1bDcv.js → cypher-8ehI2vrw.js} +0 -0
- /package/dist/web/assets/{cypher-CMv1bDcv.js.br → cypher-8ehI2vrw.js.br} +0 -0
- /package/dist/web/assets/{cypher-CMv1bDcv.js.gz → cypher-8ehI2vrw.js.gz} +0 -0
- /package/dist/web/assets/{cytoscape.esm-BJRTLoyA.js → cytoscape.esm-BokGhmK2.js} +0 -0
- /package/dist/web/assets/{cytoscape.esm-BJRTLoyA.js.br → cytoscape.esm-BokGhmK2.js.br} +0 -0
- /package/dist/web/assets/{cytoscape.esm-BJRTLoyA.js.gz → cytoscape.esm-BokGhmK2.js.gz} +0 -0
- /package/dist/web/assets/{d-Bm0b9fys.js → d-BvFZUewv.js} +0 -0
- /package/dist/web/assets/{d-Bm0b9fys.js.br → d-BvFZUewv.js.br} +0 -0
- /package/dist/web/assets/{d-Bm0b9fys.js.gz → d-BvFZUewv.js.gz} +0 -0
- /package/dist/web/assets/{dark-plus-82qvJDG3.js → dark-plus-DKLywSFP.js} +0 -0
- /package/dist/web/assets/{dark-plus-82qvJDG3.js.br → dark-plus-DKLywSFP.js.br} +0 -0
- /package/dist/web/assets/{dark-plus-82qvJDG3.js.gz → dark-plus-DKLywSFP.js.gz} +0 -0
- /package/dist/web/assets/{dart-DLmCeCvv.js → dart-Cs_NJAZ7.js} +0 -0
- /package/dist/web/assets/{dart-DLmCeCvv.js.br → dart-Cs_NJAZ7.js.br} +0 -0
- /package/dist/web/assets/{dart-DLmCeCvv.js.gz → dart-Cs_NJAZ7.js.gz} +0 -0
- /package/dist/web/assets/{data-grid-types-DatI2Wee.js → data-grid-types-CHD9-pon.js} +0 -0
- /package/dist/web/assets/{data-grid-types-DatI2Wee.js.br → data-grid-types-CHD9-pon.js.br} +0 -0
- /package/dist/web/assets/{data-grid-types-DatI2Wee.js.gz → data-grid-types-CHD9-pon.js.gz} +0 -0
- /package/dist/web/assets/{dax-hmEu7gn8.js → dax-BB8KgXzI.js} +0 -0
- /package/dist/web/assets/{dax-hmEu7gn8.js.br → dax-BB8KgXzI.js.br} +0 -0
- /package/dist/web/assets/{dax-hmEu7gn8.js.gz → dax-BB8KgXzI.js.gz} +0 -0
- /package/dist/web/assets/{defaultLocale-DlBUp7Bx.js → defaultLocale-4xAk2LVU.js} +0 -0
- /package/dist/web/assets/{defaultLocale-DlBUp7Bx.js.br → defaultLocale-4xAk2LVU.js.br} +0 -0
- /package/dist/web/assets/{defaultLocale-DlBUp7Bx.js.gz → defaultLocale-4xAk2LVU.js.gz} +0 -0
- /package/dist/web/assets/{desktop-87mPFqP1.js → desktop-Cs6Sk5Pu.js} +0 -0
- /package/dist/web/assets/{desktop-87mPFqP1.js.br → desktop-Cs6Sk5Pu.js.br} +0 -0
- /package/dist/web/assets/{desktop-87mPFqP1.js.gz → desktop-Cs6Sk5Pu.js.gz} +0 -0
- /package/dist/web/assets/{diff-BWtbKGfD.js → diff-CXSq83h3.js} +0 -0
- /package/dist/web/assets/{diff-BWtbKGfD.js.br → diff-CXSq83h3.js.br} +0 -0
- /package/dist/web/assets/{diff-BWtbKGfD.js.gz → diff-CXSq83h3.js.gz} +0 -0
- /package/dist/web/assets/{dist-BqxPR6NU.js → dist-0EbiTA3n.js} +0 -0
- /package/dist/web/assets/{dist-BqxPR6NU.js.br → dist-0EbiTA3n.js.br} +0 -0
- /package/dist/web/assets/{dist-BqxPR6NU.js.gz → dist-0EbiTA3n.js.gz} +0 -0
- /package/dist/web/assets/{dist-wmDsBD_Z.js → dist-CBtAY9iX.js} +0 -0
- /package/dist/web/assets/{dist-wmDsBD_Z.js.br → dist-CBtAY9iX.js.br} +0 -0
- /package/dist/web/assets/{dist-wmDsBD_Z.js.gz → dist-CBtAY9iX.js.gz} +0 -0
- /package/dist/web/assets/{dist-XSD1JRzx.js → dist-CWwUZUqE.js} +0 -0
- /package/dist/web/assets/{dist-XSD1JRzx.js.br → dist-CWwUZUqE.js.br} +0 -0
- /package/dist/web/assets/{dist-XSD1JRzx.js.gz → dist-CWwUZUqE.js.gz} +0 -0
- /package/dist/web/assets/{dist-C0dQXa-d.js → dist-D7mSb2HC.js} +0 -0
- /package/dist/web/assets/{dist-C0dQXa-d.js.br → dist-D7mSb2HC.js.br} +0 -0
- /package/dist/web/assets/{dist-C0dQXa-d.js.gz → dist-D7mSb2HC.js.gz} +0 -0
- /package/dist/web/assets/{docker-RfG6N-zU.js → docker-BX5p1mZ3.js} +0 -0
- /package/dist/web/assets/{docker-RfG6N-zU.js.br → docker-BX5p1mZ3.js.br} +0 -0
- /package/dist/web/assets/{docker-RfG6N-zU.js.gz → docker-BX5p1mZ3.js.gz} +0 -0
- /package/dist/web/assets/{docx-preview-b-Ui9jDq.js → docx-preview-Dt6RQpfA.js} +0 -0
- /package/dist/web/assets/{docx-preview-b-Ui9jDq.js.br → docx-preview-Dt6RQpfA.js.br} +0 -0
- /package/dist/web/assets/{docx-preview-b-Ui9jDq.js.gz → docx-preview-Dt6RQpfA.js.gz} +0 -0
- /package/dist/web/assets/{dotenv-trsAOvRf.js → dotenv-D8xdMiRo.js} +0 -0
- /package/dist/web/assets/{dotenv-trsAOvRf.js.br → dotenv-D8xdMiRo.js.br} +0 -0
- /package/dist/web/assets/{dotenv-trsAOvRf.js.gz → dotenv-D8xdMiRo.js.gz} +0 -0
- /package/dist/web/assets/{dracula-C6ZiL3YY.js → dracula-BNPKmiGE.js} +0 -0
- /package/dist/web/assets/{dracula-C6ZiL3YY.js.br → dracula-BNPKmiGE.js.br} +0 -0
- /package/dist/web/assets/{dracula-C6ZiL3YY.js.gz → dracula-BNPKmiGE.js.gz} +0 -0
- /package/dist/web/assets/{dracula-soft-C6kVBbXm.js → dracula-soft-Bv4lLEFc.js} +0 -0
- /package/dist/web/assets/{dracula-soft-C6kVBbXm.js.br → dracula-soft-Bv4lLEFc.js.br} +0 -0
- /package/dist/web/assets/{dracula-soft-C6kVBbXm.js.gz → dracula-soft-Bv4lLEFc.js.gz} +0 -0
- /package/dist/web/assets/{dream-maker-CRh_7vvZ.js → dream-maker-Yg8FPJu3.js} +0 -0
- /package/dist/web/assets/{dream-maker-CRh_7vvZ.js.br → dream-maker-Yg8FPJu3.js.br} +0 -0
- /package/dist/web/assets/{dream-maker-CRh_7vvZ.js.gz → dream-maker-Yg8FPJu3.js.gz} +0 -0
- /package/dist/web/assets/{editor-font-BWW2uS94.js → editor-font-CBszn6vt.js} +0 -0
- /package/dist/web/assets/{emacs-lisp-BiU1bqgK.js → emacs-lisp-kBgNJmB7.js} +0 -0
- /package/dist/web/assets/{emacs-lisp-BiU1bqgK.js.br → emacs-lisp-kBgNJmB7.js.br} +0 -0
- /package/dist/web/assets/{emacs-lisp-BiU1bqgK.js.gz → emacs-lisp-kBgNJmB7.js.gz} +0 -0
- /package/dist/web/assets/{everforest-dark-BtuvbpkD.js → everforest-dark-7XTfQW4s.js} +0 -0
- /package/dist/web/assets/{everforest-dark-BtuvbpkD.js.br → everforest-dark-7XTfQW4s.js.br} +0 -0
- /package/dist/web/assets/{everforest-dark-BtuvbpkD.js.gz → everforest-dark-7XTfQW4s.js.gz} +0 -0
- /package/dist/web/assets/{everforest-light-CsYaHRi1.js → everforest-light-CmPZPQmV.js} +0 -0
- /package/dist/web/assets/{everforest-light-CsYaHRi1.js.br → everforest-light-CmPZPQmV.js.br} +0 -0
- /package/dist/web/assets/{everforest-light-CsYaHRi1.js.gz → everforest-light-CmPZPQmV.js.gz} +0 -0
- /package/dist/web/assets/{fennel-Dtsq8ZYv.js → fennel-Dm71IPM6.js} +0 -0
- /package/dist/web/assets/{fennel-Dtsq8ZYv.js.br → fennel-Dm71IPM6.js.br} +0 -0
- /package/dist/web/assets/{fennel-Dtsq8ZYv.js.gz → fennel-Dm71IPM6.js.gz} +0 -0
- /package/dist/web/assets/{file-icons-Ed_yLyef.js → file-icons-CK0J4QSy.js} +0 -0
- /package/dist/web/assets/{file-icons-Ed_yLyef.js.br → file-icons-CK0J4QSy.js.br} +0 -0
- /package/dist/web/assets/{file-icons-Ed_yLyef.js.gz → file-icons-CK0J4QSy.js.gz} +0 -0
- /package/dist/web/assets/{fish-BEGdv5E9.js → fish-CIzcfZjZ.js} +0 -0
- /package/dist/web/assets/{fish-BEGdv5E9.js.br → fish-CIzcfZjZ.js.br} +0 -0
- /package/dist/web/assets/{fish-BEGdv5E9.js.gz → fish-CIzcfZjZ.js.gz} +0 -0
- /package/dist/web/assets/{fluent-DC8BEF1H.js → fluent-DFSMEphj.js} +0 -0
- /package/dist/web/assets/{fluent-DC8BEF1H.js.br → fluent-DFSMEphj.js.br} +0 -0
- /package/dist/web/assets/{fluent-DC8BEF1H.js.gz → fluent-DFSMEphj.js.gz} +0 -0
- /package/dist/web/assets/{format-bytes-DZ8bW_uF.js → format-bytes-FQmpZ25A.js} +0 -0
- /package/dist/web/assets/{format-date-Fd9tpNaw.js → format-date-BMtvCeb9.js} +0 -0
- /package/dist/web/assets/{fortran-free-form-CbCf7Hhd.js → fortran-free-form-xnlj2dLW.js} +0 -0
- /package/dist/web/assets/{fortran-free-form-CbCf7Hhd.js.br → fortran-free-form-xnlj2dLW.js.br} +0 -0
- /package/dist/web/assets/{fortran-free-form-CbCf7Hhd.js.gz → fortran-free-form-xnlj2dLW.js.gz} +0 -0
- /package/dist/web/assets/{fs-api-vF_bQoeL.js → fs-api-IX9SHt5k.js} +0 -0
- /package/dist/web/assets/{fs-api-vF_bQoeL.js.br → fs-api-IX9SHt5k.js.br} +0 -0
- /package/dist/web/assets/{fs-api-vF_bQoeL.js.gz → fs-api-IX9SHt5k.js.gz} +0 -0
- /package/dist/web/assets/{gdscript-BsZ85lP7.js → gdscript-DFnznHD1.js} +0 -0
- /package/dist/web/assets/{gdscript-BsZ85lP7.js.br → gdscript-DFnznHD1.js.br} +0 -0
- /package/dist/web/assets/{gdscript-BsZ85lP7.js.gz → gdscript-DFnznHD1.js.gz} +0 -0
- /package/dist/web/assets/{gdshader-BA91hZRm.js → gdshader-B9wvgXVU.js} +0 -0
- /package/dist/web/assets/{gdshader-BA91hZRm.js.br → gdshader-B9wvgXVU.js.br} +0 -0
- /package/dist/web/assets/{gdshader-BA91hZRm.js.gz → gdshader-B9wvgXVU.js.gz} +0 -0
- /package/dist/web/assets/{genie-enEetKUw.js → genie-Bz0RXdFf.js} +0 -0
- /package/dist/web/assets/{genie-enEetKUw.js.br → genie-Bz0RXdFf.js.br} +0 -0
- /package/dist/web/assets/{genie-enEetKUw.js.gz → genie-Bz0RXdFf.js.gz} +0 -0
- /package/dist/web/assets/{gherkin-COZUwJIo.js → gherkin-ZD8lWd_U.js} +0 -0
- /package/dist/web/assets/{gherkin-COZUwJIo.js.br → gherkin-ZD8lWd_U.js.br} +0 -0
- /package/dist/web/assets/{gherkin-COZUwJIo.js.gz → gherkin-ZD8lWd_U.js.gz} +0 -0
- /package/dist/web/assets/{git-repo-store-CdoOpvmf.js → git-repo-store-B_u5RzIM.js} +0 -0
- /package/dist/web/assets/{git-repo-store-CdoOpvmf.js.br → git-repo-store-B_u5RzIM.js.br} +0 -0
- /package/dist/web/assets/{git-repo-store-CdoOpvmf.js.gz → git-repo-store-B_u5RzIM.js.gz} +0 -0
- /package/dist/web/assets/{github-dark-t2tfi1SJ.js → github-dark-D8IE4lln.js} +0 -0
- /package/dist/web/assets/{github-dark-t2tfi1SJ.js.br → github-dark-D8IE4lln.js.br} +0 -0
- /package/dist/web/assets/{github-dark-t2tfi1SJ.js.gz → github-dark-D8IE4lln.js.gz} +0 -0
- /package/dist/web/assets/{github-dark-default-D2yZVLvM.js → github-dark-default-Bv2-je5j.js} +0 -0
- /package/dist/web/assets/{github-dark-default-D2yZVLvM.js.br → github-dark-default-Bv2-je5j.js.br} +0 -0
- /package/dist/web/assets/{github-dark-default-D2yZVLvM.js.gz → github-dark-default-Bv2-je5j.js.gz} +0 -0
- /package/dist/web/assets/{github-dark-dimmed-BgC9vtNW.js → github-dark-dimmed-Dn2Abfcl.js} +0 -0
- /package/dist/web/assets/{github-dark-dimmed-BgC9vtNW.js.br → github-dark-dimmed-Dn2Abfcl.js.br} +0 -0
- /package/dist/web/assets/{github-dark-dimmed-BgC9vtNW.js.gz → github-dark-dimmed-Dn2Abfcl.js.gz} +0 -0
- /package/dist/web/assets/{github-dark-high-contrast-BKl-163d.js → github-dark-high-contrast-CPYPXNHn.js} +0 -0
- /package/dist/web/assets/{github-dark-high-contrast-BKl-163d.js.br → github-dark-high-contrast-CPYPXNHn.js.br} +0 -0
- /package/dist/web/assets/{github-dark-high-contrast-BKl-163d.js.gz → github-dark-high-contrast-CPYPXNHn.js.gz} +0 -0
- /package/dist/web/assets/{github-light-DEwlVIuj.js → github-light-CVOMBMvb.js} +0 -0
- /package/dist/web/assets/{github-light-DEwlVIuj.js.br → github-light-CVOMBMvb.js.br} +0 -0
- /package/dist/web/assets/{github-light-DEwlVIuj.js.gz → github-light-CVOMBMvb.js.gz} +0 -0
- /package/dist/web/assets/{github-light-default-HMg-nrfE.js → github-light-default-6Ayk6lJY.js} +0 -0
- /package/dist/web/assets/{github-light-default-HMg-nrfE.js.br → github-light-default-6Ayk6lJY.js.br} +0 -0
- /package/dist/web/assets/{github-light-default-HMg-nrfE.js.gz → github-light-default-6Ayk6lJY.js.gz} +0 -0
- /package/dist/web/assets/{github-light-high-contrast-CuR1V74b.js → github-light-high-contrast-BTGKd6JI.js} +0 -0
- /package/dist/web/assets/{github-light-high-contrast-CuR1V74b.js.br → github-light-high-contrast-BTGKd6JI.js.br} +0 -0
- /package/dist/web/assets/{github-light-high-contrast-CuR1V74b.js.gz → github-light-high-contrast-BTGKd6JI.js.gz} +0 -0
- /package/dist/web/assets/{gleam-tHyKijM-.js → gleam-UeA7_OU8.js} +0 -0
- /package/dist/web/assets/{gleam-tHyKijM-.js.br → gleam-UeA7_OU8.js.br} +0 -0
- /package/dist/web/assets/{gleam-tHyKijM-.js.gz → gleam-UeA7_OU8.js.gz} +0 -0
- /package/dist/web/assets/{gn-B3FY6J2p.js → gn-DrdNDhFj.js} +0 -0
- /package/dist/web/assets/{gn-B3FY6J2p.js.br → gn-DrdNDhFj.js.br} +0 -0
- /package/dist/web/assets/{gn-B3FY6J2p.js.gz → gn-DrdNDhFj.js.gz} +0 -0
- /package/dist/web/assets/{gnuplot-Cje7PcKl.js → gnuplot-D8vxhaGw.js} +0 -0
- /package/dist/web/assets/{gnuplot-Cje7PcKl.js.br → gnuplot-D8vxhaGw.js.br} +0 -0
- /package/dist/web/assets/{gnuplot-Cje7PcKl.js.gz → gnuplot-D8vxhaGw.js.gz} +0 -0
- /package/dist/web/assets/{go-atStgiph.js → go-atNMhmH3.js} +0 -0
- /package/dist/web/assets/{go-atStgiph.js.br → go-atNMhmH3.js.br} +0 -0
- /package/dist/web/assets/{go-atStgiph.js.gz → go-atNMhmH3.js.gz} +0 -0
- /package/dist/web/assets/{groovy-D-N79UJ6.js → groovy-CLRzHDW2.js} +0 -0
- /package/dist/web/assets/{groovy-D-N79UJ6.js.br → groovy-CLRzHDW2.js.br} +0 -0
- /package/dist/web/assets/{groovy-D-N79UJ6.js.gz → groovy-CLRzHDW2.js.gz} +0 -0
- /package/dist/web/assets/{gruvbox-dark-hard-CHgWXjNO.js → gruvbox-dark-hard-CMSNCrAk.js} +0 -0
- /package/dist/web/assets/{gruvbox-dark-hard-CHgWXjNO.js.br → gruvbox-dark-hard-CMSNCrAk.js.br} +0 -0
- /package/dist/web/assets/{gruvbox-dark-hard-CHgWXjNO.js.gz → gruvbox-dark-hard-CMSNCrAk.js.gz} +0 -0
- /package/dist/web/assets/{gruvbox-dark-medium-CiWfpHxH.js → gruvbox-dark-medium-CR5wAM1c.js} +0 -0
- /package/dist/web/assets/{gruvbox-dark-medium-CiWfpHxH.js.br → gruvbox-dark-medium-CR5wAM1c.js.br} +0 -0
- /package/dist/web/assets/{gruvbox-dark-medium-CiWfpHxH.js.gz → gruvbox-dark-medium-CR5wAM1c.js.gz} +0 -0
- /package/dist/web/assets/{gruvbox-dark-soft-B6jtjdRS.js → gruvbox-dark-soft-Ba1gP2O2.js} +0 -0
- /package/dist/web/assets/{gruvbox-dark-soft-B6jtjdRS.js.br → gruvbox-dark-soft-Ba1gP2O2.js.br} +0 -0
- /package/dist/web/assets/{gruvbox-dark-soft-B6jtjdRS.js.gz → gruvbox-dark-soft-Ba1gP2O2.js.gz} +0 -0
- /package/dist/web/assets/{gruvbox-light-hard-B28dnJUc.js → gruvbox-light-hard-ChSY383t.js} +0 -0
- /package/dist/web/assets/{gruvbox-light-hard-B28dnJUc.js.br → gruvbox-light-hard-ChSY383t.js.br} +0 -0
- /package/dist/web/assets/{gruvbox-light-hard-B28dnJUc.js.gz → gruvbox-light-hard-ChSY383t.js.gz} +0 -0
- /package/dist/web/assets/{gruvbox-light-medium-BGYycI_C.js → gruvbox-light-medium-DebZzeA2.js} +0 -0
- /package/dist/web/assets/{gruvbox-light-medium-BGYycI_C.js.br → gruvbox-light-medium-DebZzeA2.js.br} +0 -0
- /package/dist/web/assets/{gruvbox-light-medium-BGYycI_C.js.gz → gruvbox-light-medium-DebZzeA2.js.gz} +0 -0
- /package/dist/web/assets/{gruvbox-light-soft-D34Ny5x-.js → gruvbox-light-soft-CEWqv8Ew.js} +0 -0
- /package/dist/web/assets/{gruvbox-light-soft-D34Ny5x-.js.br → gruvbox-light-soft-CEWqv8Ew.js.br} +0 -0
- /package/dist/web/assets/{gruvbox-light-soft-D34Ny5x-.js.gz → gruvbox-light-soft-CEWqv8Ew.js.gz} +0 -0
- /package/dist/web/assets/{haskell-Dd7RWo7q.js → haskell-CkgCblz9.js} +0 -0
- /package/dist/web/assets/{haskell-Dd7RWo7q.js.br → haskell-CkgCblz9.js.br} +0 -0
- /package/dist/web/assets/{haskell-Dd7RWo7q.js.gz → haskell-CkgCblz9.js.gz} +0 -0
- /package/dist/web/assets/{haxe-BZTENFeU.js → haxe-DwOdNXRl.js} +0 -0
- /package/dist/web/assets/{haxe-BZTENFeU.js.br → haxe-DwOdNXRl.js.br} +0 -0
- /package/dist/web/assets/{haxe-BZTENFeU.js.gz → haxe-DwOdNXRl.js.gz} +0 -0
- /package/dist/web/assets/{hcl-B2-pv_Um.js → hcl-DXsxN8nX.js} +0 -0
- /package/dist/web/assets/{hcl-B2-pv_Um.js.br → hcl-DXsxN8nX.js.br} +0 -0
- /package/dist/web/assets/{hcl-B2-pv_Um.js.gz → hcl-DXsxN8nX.js.gz} +0 -0
- /package/dist/web/assets/{hjson-DuEq9Q4E.js → hjson-oBOZxrL4.js} +0 -0
- /package/dist/web/assets/{hjson-DuEq9Q4E.js.br → hjson-oBOZxrL4.js.br} +0 -0
- /package/dist/web/assets/{hjson-DuEq9Q4E.js.gz → hjson-oBOZxrL4.js.gz} +0 -0
- /package/dist/web/assets/{hlsl-Cktd6biI.js → hlsl-VEZxDU3L.js} +0 -0
- /package/dist/web/assets/{hlsl-Cktd6biI.js.br → hlsl-VEZxDU3L.js.br} +0 -0
- /package/dist/web/assets/{hlsl-Cktd6biI.js.gz → hlsl-VEZxDU3L.js.gz} +0 -0
- /package/dist/web/assets/{horizon-CBC77M7h.js → horizon-C_xHTsMO.js} +0 -0
- /package/dist/web/assets/{horizon-CBC77M7h.js.br → horizon-C_xHTsMO.js.br} +0 -0
- /package/dist/web/assets/{horizon-CBC77M7h.js.gz → horizon-C_xHTsMO.js.gz} +0 -0
- /package/dist/web/assets/{horizon-bright-D4Nxn_E0.js → horizon-bright-CJd-vMFG.js} +0 -0
- /package/dist/web/assets/{horizon-bright-D4Nxn_E0.js.br → horizon-bright-CJd-vMFG.js.br} +0 -0
- /package/dist/web/assets/{horizon-bright-D4Nxn_E0.js.gz → horizon-bright-CJd-vMFG.js.gz} +0 -0
- /package/dist/web/assets/{houston-CeUPsuAw.js → houston-BYOfZpV9.js} +0 -0
- /package/dist/web/assets/{houston-CeUPsuAw.js.br → houston-BYOfZpV9.js.br} +0 -0
- /package/dist/web/assets/{houston-CeUPsuAw.js.gz → houston-BYOfZpV9.js.gz} +0 -0
- /package/dist/web/assets/{hy-C2Krcc1P.js → hy-DiruP4wR.js} +0 -0
- /package/dist/web/assets/{hy-C2Krcc1P.js.br → hy-DiruP4wR.js.br} +0 -0
- /package/dist/web/assets/{hy-C2Krcc1P.js.gz → hy-DiruP4wR.js.gz} +0 -0
- /package/dist/web/assets/{image-gallery-FN-9YT5_.js → image-gallery-B16hO6Ab.js} +0 -0
- /package/dist/web/assets/{image-preview-geometry-CC7s9J5U.js → image-preview-geometry-D4Ihz4UV.js} +0 -0
- /package/dist/web/assets/{imba-BGyTjryK.js → imba-BBm5cmpQ.js} +0 -0
- /package/dist/web/assets/{imba-BGyTjryK.js.br → imba-BBm5cmpQ.js.br} +0 -0
- /package/dist/web/assets/{imba-BGyTjryK.js.gz → imba-BBm5cmpQ.js.gz} +0 -0
- /package/dist/web/assets/{ini-BU3tDmkh.js → ini-DIjchSIH.js} +0 -0
- /package/dist/web/assets/{ini-BU3tDmkh.js.br → ini-DIjchSIH.js.br} +0 -0
- /package/dist/web/assets/{ini-BU3tDmkh.js.gz → ini-DIjchSIH.js.gz} +0 -0
- /package/dist/web/assets/{init-C8iN2fqI.js → init-Cf64k-PQ.js} +0 -0
- /package/dist/web/assets/{input-CP31LZnN.js → input-CG8PS8mS.js} +0 -0
- /package/dist/web/assets/{isArrayLikeObject-Brn5jPfX.js → isArrayLikeObject-DoNOpNUH.js} +0 -0
- /package/dist/web/assets/{isArrayLikeObject-Brn5jPfX.js.br → isArrayLikeObject-DoNOpNUH.js.br} +0 -0
- /package/dist/web/assets/{isArrayLikeObject-Brn5jPfX.js.gz → isArrayLikeObject-DoNOpNUH.js.gz} +0 -0
- /package/dist/web/assets/{java-DLdTpwDa.js → java-BjdsRxXN.js} +0 -0
- /package/dist/web/assets/{java-DLdTpwDa.js.br → java-BjdsRxXN.js.br} +0 -0
- /package/dist/web/assets/{java-DLdTpwDa.js.gz → java-BjdsRxXN.js.gz} +0 -0
- /package/dist/web/assets/{javascript-C8bwxWiO.js → javascript-R2SZ_OEC.js} +0 -0
- /package/dist/web/assets/{javascript-C8bwxWiO.js.br → javascript-R2SZ_OEC.js.br} +0 -0
- /package/dist/web/assets/{javascript-C8bwxWiO.js.gz → javascript-R2SZ_OEC.js.gz} +0 -0
- /package/dist/web/assets/{json-CLNZq64B.js → json-CYCJeTwK.js} +0 -0
- /package/dist/web/assets/{json-CLNZq64B.js.br → json-CYCJeTwK.js.br} +0 -0
- /package/dist/web/assets/{json-CLNZq64B.js.gz → json-CYCJeTwK.js.gz} +0 -0
- /package/dist/web/assets/{json5-hP9gUO92.js → json5-0Pz845K0.js} +0 -0
- /package/dist/web/assets/{json5-hP9gUO92.js.br → json5-0Pz845K0.js.br} +0 -0
- /package/dist/web/assets/{json5-hP9gUO92.js.gz → json5-0Pz845K0.js.gz} +0 -0
- /package/dist/web/assets/{jsonc-BxRoxKXl.js → jsonc-B0jdT4uM.js} +0 -0
- /package/dist/web/assets/{jsonc-BxRoxKXl.js.br → jsonc-B0jdT4uM.js.br} +0 -0
- /package/dist/web/assets/{jsonc-BxRoxKXl.js.gz → jsonc-B0jdT4uM.js.gz} +0 -0
- /package/dist/web/assets/{jsonl-CVi8ZVNj.js → jsonl-CdvFKZtz.js} +0 -0
- /package/dist/web/assets/{jsonl-CVi8ZVNj.js.br → jsonl-CdvFKZtz.js.br} +0 -0
- /package/dist/web/assets/{jsonl-CVi8ZVNj.js.gz → jsonl-CdvFKZtz.js.gz} +0 -0
- /package/dist/web/assets/{jsonnet-BN-joSvb.js → jsonnet-BYd5ZGqe.js} +0 -0
- /package/dist/web/assets/{jsonnet-BN-joSvb.js.br → jsonnet-BYd5ZGqe.js.br} +0 -0
- /package/dist/web/assets/{jsonnet-BN-joSvb.js.gz → jsonnet-BYd5ZGqe.js.gz} +0 -0
- /package/dist/web/assets/{jssm-AsgbjMDo.js → jssm-BlBU_IK1.js} +0 -0
- /package/dist/web/assets/{jssm-AsgbjMDo.js.br → jssm-BlBU_IK1.js.br} +0 -0
- /package/dist/web/assets/{jssm-AsgbjMDo.js.gz → jssm-BlBU_IK1.js.gz} +0 -0
- /package/dist/web/assets/{jsx-CCOY790H.js → jsx-CsWR7aMm.js} +0 -0
- /package/dist/web/assets/{jsx-CCOY790H.js.br → jsx-CsWR7aMm.js.br} +0 -0
- /package/dist/web/assets/{jsx-CCOY790H.js.gz → jsx-CsWR7aMm.js.gz} +0 -0
- /package/dist/web/assets/{kanagawa-dragon-CX1DyNVl.js → kanagawa-dragon-C6ogFc3X.js} +0 -0
- /package/dist/web/assets/{kanagawa-dragon-CX1DyNVl.js.br → kanagawa-dragon-C6ogFc3X.js.br} +0 -0
- /package/dist/web/assets/{kanagawa-dragon-CX1DyNVl.js.gz → kanagawa-dragon-C6ogFc3X.js.gz} +0 -0
- /package/dist/web/assets/{kanagawa-lotus-BVeyRHCu.js → kanagawa-lotus-8esZNUbA.js} +0 -0
- /package/dist/web/assets/{kanagawa-lotus-BVeyRHCu.js.br → kanagawa-lotus-8esZNUbA.js.br} +0 -0
- /package/dist/web/assets/{kanagawa-lotus-BVeyRHCu.js.gz → kanagawa-lotus-8esZNUbA.js.gz} +0 -0
- /package/dist/web/assets/{kanagawa-wave-5mUx8ANY.js → kanagawa-wave-C-yWQ6RD.js} +0 -0
- /package/dist/web/assets/{kanagawa-wave-5mUx8ANY.js.br → kanagawa-wave-C-yWQ6RD.js.br} +0 -0
- /package/dist/web/assets/{kanagawa-wave-5mUx8ANY.js.gz → kanagawa-wave-C-yWQ6RD.js.gz} +0 -0
- /package/dist/web/assets/{katex-ChDYIJeh.js → katex-Cz0KLyXA.js} +0 -0
- /package/dist/web/assets/{katex-ChDYIJeh.js.br → katex-Cz0KLyXA.js.br} +0 -0
- /package/dist/web/assets/{katex-ChDYIJeh.js.gz → katex-Cz0KLyXA.js.gz} +0 -0
- /package/dist/web/assets/{kdl-Chk5I0ya.js → kdl-D712OVXR.js} +0 -0
- /package/dist/web/assets/{kdl-Chk5I0ya.js.br → kdl-D712OVXR.js.br} +0 -0
- /package/dist/web/assets/{kdl-Chk5I0ya.js.gz → kdl-D712OVXR.js.gz} +0 -0
- /package/dist/web/assets/{kotlin--vOpGKe5.js → kotlin-BEUa7XzN.js} +0 -0
- /package/dist/web/assets/{kotlin--vOpGKe5.js.br → kotlin-BEUa7XzN.js.br} +0 -0
- /package/dist/web/assets/{kotlin--vOpGKe5.js.gz → kotlin-BEUa7XzN.js.gz} +0 -0
- /package/dist/web/assets/{kusto-CKcW11Xh.js → kusto-n4J6aIey.js} +0 -0
- /package/dist/web/assets/{kusto-CKcW11Xh.js.br → kusto-n4J6aIey.js.br} +0 -0
- /package/dist/web/assets/{kusto-CKcW11Xh.js.gz → kusto-n4J6aIey.js.gz} +0 -0
- /package/dist/web/assets/{laserwave-BvQ5sNh2.js → laserwave-CddL9sH-.js} +0 -0
- /package/dist/web/assets/{laserwave-BvQ5sNh2.js.br → laserwave-CddL9sH-.js.br} +0 -0
- /package/dist/web/assets/{laserwave-BvQ5sNh2.js.gz → laserwave-CddL9sH-.js.gz} +0 -0
- /package/dist/web/assets/{lean-8_xcSRiB.js → lean-CS8dnaPi.js} +0 -0
- /package/dist/web/assets/{lean-8_xcSRiB.js.br → lean-CS8dnaPi.js.br} +0 -0
- /package/dist/web/assets/{lean-8_xcSRiB.js.gz → lean-CS8dnaPi.js.gz} +0 -0
- /package/dist/web/assets/{less-By3o8hyi.js → less-D7VWEXeK.js} +0 -0
- /package/dist/web/assets/{less-By3o8hyi.js.br → less-D7VWEXeK.js.br} +0 -0
- /package/dist/web/assets/{less-By3o8hyi.js.gz → less-D7VWEXeK.js.gz} +0 -0
- /package/dist/web/assets/{lib-g-qFlogj.js → lib-6APiJkU3.js} +0 -0
- /package/dist/web/assets/{lib-g-qFlogj.js.br → lib-6APiJkU3.js.br} +0 -0
- /package/dist/web/assets/{lib-g-qFlogj.js.gz → lib-6APiJkU3.js.gz} +0 -0
- /package/dist/web/assets/{libesm-DAF5_F99.js → libesm-5wREk7JN.js} +0 -0
- /package/dist/web/assets/{libesm-DAF5_F99.js.br → libesm-5wREk7JN.js.br} +0 -0
- /package/dist/web/assets/{libesm-DAF5_F99.js.gz → libesm-5wREk7JN.js.gz} +0 -0
- /package/dist/web/assets/{light-plus-DLxZxwR2.js → light-plus-DUh-yC9k.js} +0 -0
- /package/dist/web/assets/{light-plus-DLxZxwR2.js.br → light-plus-DUh-yC9k.js.br} +0 -0
- /package/dist/web/assets/{light-plus-DLxZxwR2.js.gz → light-plus-DUh-yC9k.js.gz} +0 -0
- /package/dist/web/assets/{llvm-1Hx1tyeu.js → llvm-P1D8XyMB.js} +0 -0
- /package/dist/web/assets/{llvm-1Hx1tyeu.js.br → llvm-P1D8XyMB.js.br} +0 -0
- /package/dist/web/assets/{llvm-1Hx1tyeu.js.gz → llvm-P1D8XyMB.js.gz} +0 -0
- /package/dist/web/assets/{log-DqC4fyM8.js → log-BGft0RQz.js} +0 -0
- /package/dist/web/assets/{log-DqC4fyM8.js.br → log-BGft0RQz.js.br} +0 -0
- /package/dist/web/assets/{log-DqC4fyM8.js.gz → log-BGft0RQz.js.gz} +0 -0
- /package/dist/web/assets/{logo-CRRMYYoS.js → logo-uFZx2JEw.js} +0 -0
- /package/dist/web/assets/{logo-CRRMYYoS.js.br → logo-uFZx2JEw.js.br} +0 -0
- /package/dist/web/assets/{logo-CRRMYYoS.js.gz → logo-uFZx2JEw.js.gz} +0 -0
- /package/dist/web/assets/{luau-B_3cEvun.js → luau-aDpnpIe3.js} +0 -0
- /package/dist/web/assets/{luau-B_3cEvun.js.br → luau-aDpnpIe3.js.br} +0 -0
- /package/dist/web/assets/{luau-B_3cEvun.js.gz → luau-aDpnpIe3.js.gz} +0 -0
- /package/dist/web/assets/{make-BZXWV-XK.js → make-DwjpJeU5.js} +0 -0
- /package/dist/web/assets/{make-BZXWV-XK.js.br → make-DwjpJeU5.js.br} +0 -0
- /package/dist/web/assets/{make-BZXWV-XK.js.gz → make-DwjpJeU5.js.gz} +0 -0
- /package/dist/web/assets/{markdown-Cl7yApmu.js → markdown-DC-eWqXi.js} +0 -0
- /package/dist/web/assets/{markdown-Cl7yApmu.js.br → markdown-DC-eWqXi.js.br} +0 -0
- /package/dist/web/assets/{markdown-Cl7yApmu.js.gz → markdown-DC-eWqXi.js.gz} +0 -0
- /package/dist/web/assets/{marked.esm-BHcxKPtl.js → marked.esm-DDb9MclE.js} +0 -0
- /package/dist/web/assets/{marked.esm-BHcxKPtl.js.br → marked.esm-DDb9MclE.js.br} +0 -0
- /package/dist/web/assets/{marked.esm-BHcxKPtl.js.gz → marked.esm-DDb9MclE.js.gz} +0 -0
- /package/dist/web/assets/{material-theme-BHubOdNd.js → material-theme-9BivM5cB.js} +0 -0
- /package/dist/web/assets/{material-theme-BHubOdNd.js.br → material-theme-9BivM5cB.js.br} +0 -0
- /package/dist/web/assets/{material-theme-BHubOdNd.js.gz → material-theme-9BivM5cB.js.gz} +0 -0
- /package/dist/web/assets/{material-theme-darker-KB-xfYQj.js → material-theme-darker-Bg7I3WIw.js} +0 -0
- /package/dist/web/assets/{material-theme-darker-KB-xfYQj.js.br → material-theme-darker-Bg7I3WIw.js.br} +0 -0
- /package/dist/web/assets/{material-theme-darker-KB-xfYQj.js.gz → material-theme-darker-Bg7I3WIw.js.gz} +0 -0
- /package/dist/web/assets/{material-theme-lighter-BIAYveG-.js → material-theme-lighter-BoEshpBb.js} +0 -0
- /package/dist/web/assets/{material-theme-lighter-BIAYveG-.js.br → material-theme-lighter-BoEshpBb.js.br} +0 -0
- /package/dist/web/assets/{material-theme-lighter-BIAYveG-.js.gz → material-theme-lighter-BoEshpBb.js.gz} +0 -0
- /package/dist/web/assets/{material-theme-ocean-IXLiJMmJ.js → material-theme-ocean-CmKcBlBP.js} +0 -0
- /package/dist/web/assets/{material-theme-ocean-IXLiJMmJ.js.br → material-theme-ocean-CmKcBlBP.js.br} +0 -0
- /package/dist/web/assets/{material-theme-ocean-IXLiJMmJ.js.gz → material-theme-ocean-CmKcBlBP.js.gz} +0 -0
- /package/dist/web/assets/{material-theme-palenight-CKBeKmDI.js → material-theme-palenight-CUyfHC0C.js} +0 -0
- /package/dist/web/assets/{material-theme-palenight-CKBeKmDI.js.br → material-theme-palenight-CUyfHC0C.js.br} +0 -0
- /package/dist/web/assets/{material-theme-palenight-CKBeKmDI.js.gz → material-theme-palenight-CUyfHC0C.js.gz} +0 -0
- /package/dist/web/assets/{math-BSR_MMrJ.js → math-DAaFbMeh.js} +0 -0
- /package/dist/web/assets/{matlab-CVke_bIU.js → matlab-CqBfVqYF.js} +0 -0
- /package/dist/web/assets/{matlab-CVke_bIU.js.br → matlab-CqBfVqYF.js.br} +0 -0
- /package/dist/web/assets/{matlab-CVke_bIU.js.gz → matlab-CqBfVqYF.js.gz} +0 -0
- /package/dist/web/assets/{mdx-BoM6tA01.js → mdx-CdC2mVzF.js} +0 -0
- /package/dist/web/assets/{mdx-BoM6tA01.js.br → mdx-CdC2mVzF.js.br} +0 -0
- /package/dist/web/assets/{mdx-BoM6tA01.js.gz → mdx-CdC2mVzF.js.gz} +0 -0
- /package/dist/web/assets/{media-url-mOPwQ_ey.js → media-url-CrT-qulZ.js} +0 -0
- /package/dist/web/assets/{mermaid-dj9LCxrU.js → mermaid-B542RnGP.js} +0 -0
- /package/dist/web/assets/{mermaid-dj9LCxrU.js.br → mermaid-B542RnGP.js.br} +0 -0
- /package/dist/web/assets/{mermaid-dj9LCxrU.js.gz → mermaid-B542RnGP.js.gz} +0 -0
- /package/dist/web/assets/{metric-chart-canvas-CVd7LO3m.js → metric-chart-canvas-D7f-LQ8x.js} +0 -0
- /package/dist/web/assets/{metric-chart-canvas-CVd7LO3m.js.br → metric-chart-canvas-D7f-LQ8x.js.br} +0 -0
- /package/dist/web/assets/{metric-chart-canvas-CVd7LO3m.js.gz → metric-chart-canvas-D7f-LQ8x.js.gz} +0 -0
- /package/dist/web/assets/{min-dark-CRi7sS-5.js → min-dark-uGP-9UE_.js} +0 -0
- /package/dist/web/assets/{min-dark-CRi7sS-5.js.br → min-dark-uGP-9UE_.js.br} +0 -0
- /package/dist/web/assets/{min-dark-CRi7sS-5.js.gz → min-dark-uGP-9UE_.js.gz} +0 -0
- /package/dist/web/assets/{min-light-Dgp1R_pl.js → min-light-BkFlXt3G.js} +0 -0
- /package/dist/web/assets/{min-light-Dgp1R_pl.js.br → min-light-BkFlXt3G.js.br} +0 -0
- /package/dist/web/assets/{min-light-Dgp1R_pl.js.gz → min-light-BkFlXt3G.js.gz} +0 -0
- /package/dist/web/assets/{mipsasm-n1Jay_kN.js → mipsasm-CkaxcMA-.js} +0 -0
- /package/dist/web/assets/{mipsasm-n1Jay_kN.js.br → mipsasm-CkaxcMA-.js.br} +0 -0
- /package/dist/web/assets/{mipsasm-n1Jay_kN.js.gz → mipsasm-CkaxcMA-.js.gz} +0 -0
- /package/dist/web/assets/{mojo-DY4XpIlH.js → mojo-DDh7AQLv.js} +0 -0
- /package/dist/web/assets/{mojo-DY4XpIlH.js.br → mojo-DDh7AQLv.js.br} +0 -0
- /package/dist/web/assets/{mojo-DY4XpIlH.js.gz → mojo-DDh7AQLv.js.gz} +0 -0
- /package/dist/web/assets/{monaco-dotenv-language-CQpgAhmX.js → monaco-dotenv-language-DbSss7YR.js} +0 -0
- /package/dist/web/assets/{monokai-MPQsLu-o.js → monokai-BA4dkSrE.js} +0 -0
- /package/dist/web/assets/{monokai-MPQsLu-o.js.br → monokai-BA4dkSrE.js.br} +0 -0
- /package/dist/web/assets/{monokai-MPQsLu-o.js.gz → monokai-BA4dkSrE.js.gz} +0 -0
- /package/dist/web/assets/{moonbit-M5su_7_F.js → moonbit-DGxZDax4.js} +0 -0
- /package/dist/web/assets/{moonbit-M5su_7_F.js.br → moonbit-DGxZDax4.js.br} +0 -0
- /package/dist/web/assets/{moonbit-M5su_7_F.js.gz → moonbit-DGxZDax4.js.gz} +0 -0
- /package/dist/web/assets/{move-CYYhJ2zp.js → move-C1HZaVNc.js} +0 -0
- /package/dist/web/assets/{move-CYYhJ2zp.js.br → move-C1HZaVNc.js.br} +0 -0
- /package/dist/web/assets/{move-CYYhJ2zp.js.gz → move-C1HZaVNc.js.gz} +0 -0
- /package/dist/web/assets/{narrat-CL2YcnxD.js → narrat-g4c9qhYS.js} +0 -0
- /package/dist/web/assets/{narrat-CL2YcnxD.js.br → narrat-g4c9qhYS.js.br} +0 -0
- /package/dist/web/assets/{narrat-CL2YcnxD.js.gz → narrat-g4c9qhYS.js.gz} +0 -0
- /package/dist/web/assets/{nextflow-groovy-Gol2hLKv.js → nextflow-groovy-CisdbLPv.js} +0 -0
- /package/dist/web/assets/{nextflow-groovy-Gol2hLKv.js.br → nextflow-groovy-CisdbLPv.js.br} +0 -0
- /package/dist/web/assets/{nextflow-groovy-Gol2hLKv.js.gz → nextflow-groovy-CisdbLPv.js.gz} +0 -0
- /package/dist/web/assets/{night-owl-k4Wf6vT5.js → night-owl-ds7NNgBg.js} +0 -0
- /package/dist/web/assets/{night-owl-k4Wf6vT5.js.br → night-owl-ds7NNgBg.js.br} +0 -0
- /package/dist/web/assets/{night-owl-k4Wf6vT5.js.gz → night-owl-ds7NNgBg.js.gz} +0 -0
- /package/dist/web/assets/{night-owl-light-BFys3GTP.js → night-owl-light-DurCGAfC.js} +0 -0
- /package/dist/web/assets/{night-owl-light-BFys3GTP.js.br → night-owl-light-DurCGAfC.js.br} +0 -0
- /package/dist/web/assets/{night-owl-light-BFys3GTP.js.gz → night-owl-light-DurCGAfC.js.gz} +0 -0
- /package/dist/web/assets/{nix--Y3Gk7HX.js → nix-D7kCv9F9.js} +0 -0
- /package/dist/web/assets/{nix--Y3Gk7HX.js.br → nix-D7kCv9F9.js.br} +0 -0
- /package/dist/web/assets/{nix--Y3Gk7HX.js.gz → nix-D7kCv9F9.js.gz} +0 -0
- /package/dist/web/assets/{nord-BeZnxDcj.js → nord-C-O3ceAv.js} +0 -0
- /package/dist/web/assets/{nord-BeZnxDcj.js.br → nord-C-O3ceAv.js.br} +0 -0
- /package/dist/web/assets/{nord-BeZnxDcj.js.gz → nord-C-O3ceAv.js.gz} +0 -0
- /package/dist/web/assets/{nushell-BzCnhP84.js → nushell-oUYTGkzu.js} +0 -0
- /package/dist/web/assets/{nushell-BzCnhP84.js.br → nushell-oUYTGkzu.js.br} +0 -0
- /package/dist/web/assets/{nushell-BzCnhP84.js.gz → nushell-oUYTGkzu.js.gz} +0 -0
- /package/dist/web/assets/{objective-c-Dp7k0at7.js → objective-c-CzqHoRSj.js} +0 -0
- /package/dist/web/assets/{objective-c-Dp7k0at7.js.br → objective-c-CzqHoRSj.js.br} +0 -0
- /package/dist/web/assets/{objective-c-Dp7k0at7.js.gz → objective-c-CzqHoRSj.js.gz} +0 -0
- /package/dist/web/assets/{objective-cpp-DlP31ffn.js → objective-cpp-DJ8fgF2d.js} +0 -0
- /package/dist/web/assets/{objective-cpp-DlP31ffn.js.br → objective-cpp-DJ8fgF2d.js.br} +0 -0
- /package/dist/web/assets/{objective-cpp-DlP31ffn.js.gz → objective-cpp-DJ8fgF2d.js.gz} +0 -0
- /package/dist/web/assets/{ocaml-6zqfFlDt.js → ocaml-B_nWFfqA.js} +0 -0
- /package/dist/web/assets/{ocaml-6zqfFlDt.js.br → ocaml-B_nWFfqA.js.br} +0 -0
- /package/dist/web/assets/{ocaml-6zqfFlDt.js.gz → ocaml-B_nWFfqA.js.gz} +0 -0
- /package/dist/web/assets/{odin-Cwj0GwxV.js → odin-BUQfWY13.js} +0 -0
- /package/dist/web/assets/{odin-Cwj0GwxV.js.br → odin-BUQfWY13.js.br} +0 -0
- /package/dist/web/assets/{odin-Cwj0GwxV.js.gz → odin-BUQfWY13.js.gz} +0 -0
- /package/dist/web/assets/{one-dark-pro-9ZCBq-1e.js → one-dark-pro-DJQor_US.js} +0 -0
- /package/dist/web/assets/{one-dark-pro-9ZCBq-1e.js.br → one-dark-pro-DJQor_US.js.br} +0 -0
- /package/dist/web/assets/{one-dark-pro-9ZCBq-1e.js.gz → one-dark-pro-DJQor_US.js.gz} +0 -0
- /package/dist/web/assets/{one-light-Cph_d1Z-.js → one-light-BMvQ1R6M.js} +0 -0
- /package/dist/web/assets/{one-light-Cph_d1Z-.js.br → one-light-BMvQ1R6M.js.br} +0 -0
- /package/dist/web/assets/{one-light-Cph_d1Z-.js.gz → one-light-BMvQ1R6M.js.gz} +0 -0
- /package/dist/web/assets/{openscad-xKXlLDww.js → openscad-DTylcqP8.js} +0 -0
- /package/dist/web/assets/{openscad-xKXlLDww.js.br → openscad-DTylcqP8.js.br} +0 -0
- /package/dist/web/assets/{openscad-xKXlLDww.js.gz → openscad-DTylcqP8.js.gz} +0 -0
- /package/dist/web/assets/{pascal-D8Ly58pC.js → pascal-D0N_7LGg.js} +0 -0
- /package/dist/web/assets/{pascal-D8Ly58pC.js.br → pascal-D0N_7LGg.js.br} +0 -0
- /package/dist/web/assets/{pascal-D8Ly58pC.js.gz → pascal-D0N_7LGg.js.gz} +0 -0
- /package/dist/web/assets/{path-BBZ3nmRT.js → path-LyOWnqX5.js} +0 -0
- /package/dist/web/assets/{path-BBZ3nmRT.js.br → path-LyOWnqX5.js.br} +0 -0
- /package/dist/web/assets/{path-BBZ3nmRT.js.gz → path-LyOWnqX5.js.gz} +0 -0
- /package/dist/web/assets/{pdf-preview-PWDBbNwt.js → pdf-preview-B8A4T-ES.js} +0 -0
- /package/dist/web/assets/{pdf-preview-PWDBbNwt.js.br → pdf-preview-B8A4T-ES.js.br} +0 -0
- /package/dist/web/assets/{pdf-preview-PWDBbNwt.js.gz → pdf-preview-B8A4T-ES.js.gz} +0 -0
- /package/dist/web/assets/{pkl-Ckef1qFU.js → pkl-HQNdCmJT.js} +0 -0
- /package/dist/web/assets/{pkl-Ckef1qFU.js.br → pkl-HQNdCmJT.js.br} +0 -0
- /package/dist/web/assets/{pkl-Ckef1qFU.js.gz → pkl-HQNdCmJT.js.gz} +0 -0
- /package/dist/web/assets/{plastic-IckJTiFF.js → plastic-QMrjD10f.js} +0 -0
- /package/dist/web/assets/{plastic-IckJTiFF.js.br → plastic-QMrjD10f.js.br} +0 -0
- /package/dist/web/assets/{plastic-IckJTiFF.js.gz → plastic-QMrjD10f.js.gz} +0 -0
- /package/dist/web/assets/{plsql-DvrKSOLR.js → plsql-Ds9EzM4F.js} +0 -0
- /package/dist/web/assets/{plsql-DvrKSOLR.js.br → plsql-Ds9EzM4F.js.br} +0 -0
- /package/dist/web/assets/{plsql-DvrKSOLR.js.gz → plsql-Ds9EzM4F.js.gz} +0 -0
- /package/dist/web/assets/{po-CAU2W5ki.js → po-CM8JtETE.js} +0 -0
- /package/dist/web/assets/{po-CAU2W5ki.js.br → po-CM8JtETE.js.br} +0 -0
- /package/dist/web/assets/{po-CAU2W5ki.js.gz → po-CM8JtETE.js.gz} +0 -0
- /package/dist/web/assets/{poimandres-Bgni5euO.js → poimandres-fat7kglW.js} +0 -0
- /package/dist/web/assets/{poimandres-Bgni5euO.js.br → poimandres-fat7kglW.js.br} +0 -0
- /package/dist/web/assets/{poimandres-Bgni5euO.js.gz → poimandres-fat7kglW.js.gz} +0 -0
- /package/dist/web/assets/{polar-CM5bsdfq.js → polar-CnOzO2UD.js} +0 -0
- /package/dist/web/assets/{polar-CM5bsdfq.js.br → polar-CnOzO2UD.js.br} +0 -0
- /package/dist/web/assets/{polar-CM5bsdfq.js.gz → polar-CnOzO2UD.js.gz} +0 -0
- /package/dist/web/assets/{postcss-B_FJDLw-.js → postcss-BaqfiaQC.js} +0 -0
- /package/dist/web/assets/{postcss-B_FJDLw-.js.br → postcss-BaqfiaQC.js.br} +0 -0
- /package/dist/web/assets/{postcss-B_FJDLw-.js.gz → postcss-BaqfiaQC.js.gz} +0 -0
- /package/dist/web/assets/{powerquery-CQl458mG.js → powerquery-CtMX6ik_.js} +0 -0
- /package/dist/web/assets/{powerquery-CQl458mG.js.br → powerquery-CtMX6ik_.js.br} +0 -0
- /package/dist/web/assets/{powerquery-CQl458mG.js.gz → powerquery-CtMX6ik_.js.gz} +0 -0
- /package/dist/web/assets/{powershell-XkQNRD_d.js → powershell-BaTgHUxS.js} +0 -0
- /package/dist/web/assets/{powershell-XkQNRD_d.js.br → powershell-BaTgHUxS.js.br} +0 -0
- /package/dist/web/assets/{powershell-XkQNRD_d.js.gz → powershell-BaTgHUxS.js.gz} +0 -0
- /package/dist/web/assets/{prisma-CAYa37xo.js → prisma-BLaoUK-7.js} +0 -0
- /package/dist/web/assets/{prisma-CAYa37xo.js.br → prisma-BLaoUK-7.js.br} +0 -0
- /package/dist/web/assets/{prisma-CAYa37xo.js.gz → prisma-BLaoUK-7.js.gz} +0 -0
- /package/dist/web/assets/{prolog-DhrbUCR0.js → prolog-0I-GhZLt.js} +0 -0
- /package/dist/web/assets/{prolog-DhrbUCR0.js.br → prolog-0I-GhZLt.js.br} +0 -0
- /package/dist/web/assets/{prolog-DhrbUCR0.js.gz → prolog-0I-GhZLt.js.gz} +0 -0
- /package/dist/web/assets/{proto-Djemj7Is.js → proto-CHfg51WI.js} +0 -0
- /package/dist/web/assets/{proto-Djemj7Is.js.br → proto-CHfg51WI.js.br} +0 -0
- /package/dist/web/assets/{proto-Djemj7Is.js.gz → proto-CHfg51WI.js.gz} +0 -0
- /package/dist/web/assets/{puppet-OeZAIY0k.js → puppet-B0WZdEhx.js} +0 -0
- /package/dist/web/assets/{puppet-OeZAIY0k.js.br → puppet-B0WZdEhx.js.br} +0 -0
- /package/dist/web/assets/{puppet-OeZAIY0k.js.gz → puppet-B0WZdEhx.js.gz} +0 -0
- /package/dist/web/assets/{purescript-B1goqZLW.js → purescript-CrVZ4Uql.js} +0 -0
- /package/dist/web/assets/{purescript-B1goqZLW.js.br → purescript-CrVZ4Uql.js.br} +0 -0
- /package/dist/web/assets/{purescript-B1goqZLW.js.gz → purescript-CrVZ4Uql.js.gz} +0 -0
- /package/dist/web/assets/{python-DV-HoFeK.js → python-aEpe7ZUF.js} +0 -0
- /package/dist/web/assets/{python-DV-HoFeK.js.br → python-aEpe7ZUF.js.br} +0 -0
- /package/dist/web/assets/{python-DV-HoFeK.js.gz → python-aEpe7ZUF.js.gz} +0 -0
- /package/dist/web/assets/{qmldir--lp1j2AJ.js → qmldir-DxTPc3lc.js} +0 -0
- /package/dist/web/assets/{qss-Yi2yczza.js → qss-D-nPbCGx.js} +0 -0
- /package/dist/web/assets/{qss-Yi2yczza.js.br → qss-D-nPbCGx.js.br} +0 -0
- /package/dist/web/assets/{qss-Yi2yczza.js.gz → qss-D-nPbCGx.js.gz} +0 -0
- /package/dist/web/assets/{r-7ZmKRlHm.js → r-BLnTqw3q.js} +0 -0
- /package/dist/web/assets/{r-7ZmKRlHm.js.br → r-BLnTqw3q.js.br} +0 -0
- /package/dist/web/assets/{r-7ZmKRlHm.js.gz → r-BLnTqw3q.js.gz} +0 -0
- /package/dist/web/assets/{racket-fwmwNOYz.js → racket-DNO4210g.js} +0 -0
- /package/dist/web/assets/{racket-fwmwNOYz.js.br → racket-DNO4210g.js.br} +0 -0
- /package/dist/web/assets/{racket-fwmwNOYz.js.gz → racket-DNO4210g.js.gz} +0 -0
- /package/dist/web/assets/{raku-DV8ZvXLi.js → raku-iZJO4hxf.js} +0 -0
- /package/dist/web/assets/{raku-DV8ZvXLi.js.br → raku-iZJO4hxf.js.br} +0 -0
- /package/dist/web/assets/{raku-DV8ZvXLi.js.gz → raku-iZJO4hxf.js.gz} +0 -0
- /package/dist/web/assets/{red-njAFcCD-.js → red-F3EQNsNx.js} +0 -0
- /package/dist/web/assets/{red-njAFcCD-.js.br → red-F3EQNsNx.js.br} +0 -0
- /package/dist/web/assets/{red-njAFcCD-.js.gz → red-F3EQNsNx.js.gz} +0 -0
- /package/dist/web/assets/{reg-B0zsm4Ng.js → reg-DD_Uwu3t.js} +0 -0
- /package/dist/web/assets/{reg-B0zsm4Ng.js.br → reg-DD_Uwu3t.js.br} +0 -0
- /package/dist/web/assets/{reg-B0zsm4Ng.js.gz → reg-DD_Uwu3t.js.gz} +0 -0
- /package/dist/web/assets/{regexp-BxNvyxL0.js → regexp-D3RlqUxN.js} +0 -0
- /package/dist/web/assets/{regexp-BxNvyxL0.js.br → regexp-D3RlqUxN.js.br} +0 -0
- /package/dist/web/assets/{regexp-BxNvyxL0.js.gz → regexp-D3RlqUxN.js.gz} +0 -0
- /package/dist/web/assets/{rel-BkCYIlpx.js → rel-DM5GSHUR.js} +0 -0
- /package/dist/web/assets/{rel-BkCYIlpx.js.br → rel-DM5GSHUR.js.br} +0 -0
- /package/dist/web/assets/{rel-BkCYIlpx.js.gz → rel-DM5GSHUR.js.gz} +0 -0
- /package/dist/web/assets/{resolve-theme-B87m6l4i.js → resolve-theme-STMsK2vc.js} +0 -0
- /package/dist/web/assets/{resolve-theme-B87m6l4i.js.br → resolve-theme-STMsK2vc.js.br} +0 -0
- /package/dist/web/assets/{resolve-theme-B87m6l4i.js.gz → resolve-theme-STMsK2vc.js.gz} +0 -0
- /package/dist/web/assets/{riscv-BkIhxDPz.js → riscv-C_jO4gJw.js} +0 -0
- /package/dist/web/assets/{riscv-BkIhxDPz.js.br → riscv-C_jO4gJw.js.br} +0 -0
- /package/dist/web/assets/{riscv-BkIhxDPz.js.gz → riscv-C_jO4gJw.js.gz} +0 -0
- /package/dist/web/assets/{ron-Dz2XANaL.js → ron--r6_MG5U.js} +0 -0
- /package/dist/web/assets/{ron-Dz2XANaL.js.br → ron--r6_MG5U.js.br} +0 -0
- /package/dist/web/assets/{ron-Dz2XANaL.js.gz → ron--r6_MG5U.js.gz} +0 -0
- /package/dist/web/assets/{rose-pine-eIr8UZ5b.js → rose-pine-NjvlliYf.js} +0 -0
- /package/dist/web/assets/{rose-pine-eIr8UZ5b.js.br → rose-pine-NjvlliYf.js.br} +0 -0
- /package/dist/web/assets/{rose-pine-eIr8UZ5b.js.gz → rose-pine-NjvlliYf.js.gz} +0 -0
- /package/dist/web/assets/{rose-pine-dawn-DN9kWMIp.js → rose-pine-dawn-DnsL01oA.js} +0 -0
- /package/dist/web/assets/{rose-pine-dawn-DN9kWMIp.js.br → rose-pine-dawn-DnsL01oA.js.br} +0 -0
- /package/dist/web/assets/{rose-pine-dawn-DN9kWMIp.js.gz → rose-pine-dawn-DnsL01oA.js.gz} +0 -0
- /package/dist/web/assets/{rose-pine-moon-CARJbo1N.js → rose-pine-moon-DQTuCjVy.js} +0 -0
- /package/dist/web/assets/{rose-pine-moon-CARJbo1N.js.br → rose-pine-moon-DQTuCjVy.js.br} +0 -0
- /package/dist/web/assets/{rose-pine-moon-CARJbo1N.js.gz → rose-pine-moon-DQTuCjVy.js.gz} +0 -0
- /package/dist/web/assets/{rosmsg-CvdFrq8H.js → rosmsg-BQrgxzms.js} +0 -0
- /package/dist/web/assets/{rosmsg-CvdFrq8H.js.br → rosmsg-BQrgxzms.js.br} +0 -0
- /package/dist/web/assets/{rosmsg-CvdFrq8H.js.gz → rosmsg-BQrgxzms.js.gz} +0 -0
- /package/dist/web/assets/{rough.esm-DjDoC3p1.js → rough.esm-CSLcW3u5.js} +0 -0
- /package/dist/web/assets/{rough.esm-DjDoC3p1.js.br → rough.esm-CSLcW3u5.js.br} +0 -0
- /package/dist/web/assets/{rough.esm-DjDoC3p1.js.gz → rough.esm-CSLcW3u5.js.gz} +0 -0
- /package/dist/web/assets/{rust-Dn0IvdCe.js → rust-CP39BBh-.js} +0 -0
- /package/dist/web/assets/{rust-Dn0IvdCe.js.br → rust-CP39BBh-.js.br} +0 -0
- /package/dist/web/assets/{rust-Dn0IvdCe.js.gz → rust-CP39BBh-.js.gz} +0 -0
- /package/dist/web/assets/{sass-DuXbHlxS.js → sass-CMiN16ff.js} +0 -0
- /package/dist/web/assets/{sass-DuXbHlxS.js.br → sass-CMiN16ff.js.br} +0 -0
- /package/dist/web/assets/{sass-DuXbHlxS.js.gz → sass-CMiN16ff.js.gz} +0 -0
- /package/dist/web/assets/{scala-f9V3Hdhj.js → scala-jm4Hro87.js} +0 -0
- /package/dist/web/assets/{scala-f9V3Hdhj.js.br → scala-jm4Hro87.js.br} +0 -0
- /package/dist/web/assets/{scala-f9V3Hdhj.js.gz → scala-jm4Hro87.js.gz} +0 -0
- /package/dist/web/assets/{scheme-mmNiztuh.js → scheme-Ct_BnC2r.js} +0 -0
- /package/dist/web/assets/{scheme-mmNiztuh.js.br → scheme-Ct_BnC2r.js.br} +0 -0
- /package/dist/web/assets/{scheme-mmNiztuh.js.gz → scheme-Ct_BnC2r.js.gz} +0 -0
- /package/dist/web/assets/{scroll-area-Dp-P38kg.js → scroll-area-sjOeAfoD.js} +0 -0
- /package/dist/web/assets/{scroll-area-Dp-P38kg.js.br → scroll-area-sjOeAfoD.js.br} +0 -0
- /package/dist/web/assets/{scroll-area-Dp-P38kg.js.gz → scroll-area-sjOeAfoD.js.gz} +0 -0
- /package/dist/web/assets/{sdbl-C-Dtt518.js → sdbl-CnOjqCoH.js} +0 -0
- /package/dist/web/assets/{sdbl-C-Dtt518.js.br → sdbl-CnOjqCoH.js.br} +0 -0
- /package/dist/web/assets/{sdbl-C-Dtt518.js.gz → sdbl-CnOjqCoH.js.gz} +0 -0
- /package/dist/web/assets/{separator-B0xYRplF.js → separator-dHj3Km--.js} +0 -0
- /package/dist/web/assets/{shellscript-DqPlhOxY.js → shellscript-C6sdrDvR.js} +0 -0
- /package/dist/web/assets/{shellscript-DqPlhOxY.js.br → shellscript-C6sdrDvR.js.br} +0 -0
- /package/dist/web/assets/{shellscript-DqPlhOxY.js.gz → shellscript-C6sdrDvR.js.gz} +0 -0
- /package/dist/web/assets/{slack-dark-CcJuw2GE.js → slack-dark-BOdgeH19.js} +0 -0
- /package/dist/web/assets/{slack-dark-CcJuw2GE.js.br → slack-dark-BOdgeH19.js.br} +0 -0
- /package/dist/web/assets/{slack-dark-CcJuw2GE.js.gz → slack-dark-BOdgeH19.js.gz} +0 -0
- /package/dist/web/assets/{slack-ochin-DhF5J4kG.js → slack-ochin-DBMQIw0j.js} +0 -0
- /package/dist/web/assets/{slack-ochin-DhF5J4kG.js.br → slack-ochin-DBMQIw0j.js.br} +0 -0
- /package/dist/web/assets/{slack-ochin-DhF5J4kG.js.gz → slack-ochin-DBMQIw0j.js.gz} +0 -0
- /package/dist/web/assets/{smalltalk-I7kpfF3K.js → smalltalk-BMQqYubg.js} +0 -0
- /package/dist/web/assets/{smalltalk-I7kpfF3K.js.br → smalltalk-BMQqYubg.js.br} +0 -0
- /package/dist/web/assets/{smalltalk-I7kpfF3K.js.gz → smalltalk-BMQqYubg.js.gz} +0 -0
- /package/dist/web/assets/{snazzy-light-C7twsQ2A.js → snazzy-light-DwnLbrVG.js} +0 -0
- /package/dist/web/assets/{snazzy-light-C7twsQ2A.js.br → snazzy-light-DwnLbrVG.js.br} +0 -0
- /package/dist/web/assets/{snazzy-light-C7twsQ2A.js.gz → snazzy-light-DwnLbrVG.js.gz} +0 -0
- /package/dist/web/assets/{solarized-dark-BNugyimf.js → solarized-dark-DXJnupYd.js} +0 -0
- /package/dist/web/assets/{solarized-dark-BNugyimf.js.br → solarized-dark-DXJnupYd.js.br} +0 -0
- /package/dist/web/assets/{solarized-dark-BNugyimf.js.gz → solarized-dark-DXJnupYd.js.gz} +0 -0
- /package/dist/web/assets/{solarized-light-CvgUnQ1w.js → solarized-light-DqhyrtI4.js} +0 -0
- /package/dist/web/assets/{solarized-light-CvgUnQ1w.js.br → solarized-light-DqhyrtI4.js.br} +0 -0
- /package/dist/web/assets/{solarized-light-CvgUnQ1w.js.gz → solarized-light-DqhyrtI4.js.gz} +0 -0
- /package/dist/web/assets/{solidity-BDgrLeJ1.js → solidity-BM0p0sku.js} +0 -0
- /package/dist/web/assets/{solidity-BDgrLeJ1.js.br → solidity-BM0p0sku.js.br} +0 -0
- /package/dist/web/assets/{solidity-BDgrLeJ1.js.gz → solidity-BM0p0sku.js.gz} +0 -0
- /package/dist/web/assets/{sortable-header-IH47XuRI.js → sortable-header-BOa8o7NJ.js} +0 -0
- /package/dist/web/assets/{sortable-header-IH47XuRI.js.br → sortable-header-BOa8o7NJ.js.br} +0 -0
- /package/dist/web/assets/{sortable-header-IH47XuRI.js.gz → sortable-header-BOa8o7NJ.js.gz} +0 -0
- /package/dist/web/assets/{splunk-CNuF6KkM.js → splunk-Cq6_jbaY.js} +0 -0
- /package/dist/web/assets/{splunk-CNuF6KkM.js.br → splunk-Cq6_jbaY.js.br} +0 -0
- /package/dist/web/assets/{splunk-CNuF6KkM.js.gz → splunk-Cq6_jbaY.js.gz} +0 -0
- /package/dist/web/assets/{sql-D48c69Jw.js → sql-CPfIb_cO.js} +0 -0
- /package/dist/web/assets/{sql-D48c69Jw.js.br → sql-CPfIb_cO.js.br} +0 -0
- /package/dist/web/assets/{sql-D48c69Jw.js.gz → sql-CPfIb_cO.js.gz} +0 -0
- /package/dist/web/assets/{src-BbwyNwWE.js → src-C7A68uNq.js} +0 -0
- /package/dist/web/assets/{src-BbwyNwWE.js.br → src-C7A68uNq.js.br} +0 -0
- /package/dist/web/assets/{src-BbwyNwWE.js.gz → src-C7A68uNq.js.gz} +0 -0
- /package/dist/web/assets/{ssh-config-B1wBqiS9.js → ssh-config-GRgzMVtG.js} +0 -0
- /package/dist/web/assets/{ssh-config-B1wBqiS9.js.br → ssh-config-GRgzMVtG.js.br} +0 -0
- /package/dist/web/assets/{ssh-config-B1wBqiS9.js.gz → ssh-config-GRgzMVtG.js.gz} +0 -0
- /package/dist/web/assets/{stylus-OJB8j7V7.js → stylus-DNs7ubf9.js} +0 -0
- /package/dist/web/assets/{stylus-OJB8j7V7.js.br → stylus-DNs7ubf9.js.br} +0 -0
- /package/dist/web/assets/{stylus-OJB8j7V7.js.gz → stylus-DNs7ubf9.js.gz} +0 -0
- /package/dist/web/assets/{swift-7GM5UsQV.js → swift-BQV34vng.js} +0 -0
- /package/dist/web/assets/{swift-7GM5UsQV.js.br → swift-BQV34vng.js.br} +0 -0
- /package/dist/web/assets/{swift-7GM5UsQV.js.gz → swift-BQV34vng.js.gz} +0 -0
- /package/dist/web/assets/{synthwave-84-D68U5tV6.js → synthwave-84-CypcdXbA.js} +0 -0
- /package/dist/web/assets/{synthwave-84-D68U5tV6.js.br → synthwave-84-CypcdXbA.js.br} +0 -0
- /package/dist/web/assets/{synthwave-84-D68U5tV6.js.gz → synthwave-84-CypcdXbA.js.gz} +0 -0
- /package/dist/web/assets/{system-verilog-BMr6tYGp.js → system-verilog-DaLPjQ4v.js} +0 -0
- /package/dist/web/assets/{system-verilog-BMr6tYGp.js.br → system-verilog-DaLPjQ4v.js.br} +0 -0
- /package/dist/web/assets/{system-verilog-BMr6tYGp.js.gz → system-verilog-DaLPjQ4v.js.gz} +0 -0
- /package/dist/web/assets/{systemd-EuUPsqCT.js → systemd-CXHFtmNc.js} +0 -0
- /package/dist/web/assets/{systemd-EuUPsqCT.js.br → systemd-CXHFtmNc.js.br} +0 -0
- /package/dist/web/assets/{systemd-EuUPsqCT.js.gz → systemd-CXHFtmNc.js.gz} +0 -0
- /package/dist/web/assets/{talonscript-DjUAMefb.js → talonscript-DI9nO5jX.js} +0 -0
- /package/dist/web/assets/{talonscript-DjUAMefb.js.br → talonscript-DI9nO5jX.js.br} +0 -0
- /package/dist/web/assets/{talonscript-DjUAMefb.js.gz → talonscript-DI9nO5jX.js.gz} +0 -0
- /package/dist/web/assets/{tasl-fq_y40Gw.js → tasl-BAQyAl0c.js} +0 -0
- /package/dist/web/assets/{tasl-fq_y40Gw.js.br → tasl-BAQyAl0c.js.br} +0 -0
- /package/dist/web/assets/{tasl-fq_y40Gw.js.gz → tasl-BAQyAl0c.js.gz} +0 -0
- /package/dist/web/assets/{tcl-C_4KPJpi.js → tcl-BP_ozI58.js} +0 -0
- /package/dist/web/assets/{tcl-C_4KPJpi.js.br → tcl-BP_ozI58.js.br} +0 -0
- /package/dist/web/assets/{tcl-C_4KPJpi.js.gz → tcl-BP_ozI58.js.gz} +0 -0
- /package/dist/web/assets/{terraform-D2x4kIoh.js → terraform-NrndR0yZ.js} +0 -0
- /package/dist/web/assets/{terraform-D2x4kIoh.js.br → terraform-NrndR0yZ.js.br} +0 -0
- /package/dist/web/assets/{terraform-D2x4kIoh.js.gz → terraform-NrndR0yZ.js.gz} +0 -0
- /package/dist/web/assets/{tokyo-night-CUGo2Zr_.js → tokyo-night-CbUQlN8D.js} +0 -0
- /package/dist/web/assets/{tokyo-night-CUGo2Zr_.js.br → tokyo-night-CbUQlN8D.js.br} +0 -0
- /package/dist/web/assets/{tokyo-night-CUGo2Zr_.js.gz → tokyo-night-CbUQlN8D.js.gz} +0 -0
- /package/dist/web/assets/{toml-BcDWUUhX.js → toml-BM_zrMLj.js} +0 -0
- /package/dist/web/assets/{toml-BcDWUUhX.js.br → toml-BM_zrMLj.js.br} +0 -0
- /package/dist/web/assets/{toml-BcDWUUhX.js.gz → toml-BM_zrMLj.js.gz} +0 -0
- /package/dist/web/assets/{tsv-C8SvedcS.js → tsv-CfyllNPO.js} +0 -0
- /package/dist/web/assets/{tsx-lkr-nm_S.js → tsx-BROcpVjE.js} +0 -0
- /package/dist/web/assets/{tsx-lkr-nm_S.js.br → tsx-BROcpVjE.js.br} +0 -0
- /package/dist/web/assets/{tsx-lkr-nm_S.js.gz → tsx-BROcpVjE.js.gz} +0 -0
- /package/dist/web/assets/{turtle-B_e2j7qe.js → turtle-CHmyeS9k.js} +0 -0
- /package/dist/web/assets/{turtle-B_e2j7qe.js.br → turtle-CHmyeS9k.js.br} +0 -0
- /package/dist/web/assets/{turtle-B_e2j7qe.js.gz → turtle-CHmyeS9k.js.gz} +0 -0
- /package/dist/web/assets/{typescript-kiqZ6P0m.js → typescript-BVwspRg8.js} +0 -0
- /package/dist/web/assets/{typescript-kiqZ6P0m.js.br → typescript-BVwspRg8.js.br} +0 -0
- /package/dist/web/assets/{typescript-kiqZ6P0m.js.gz → typescript-BVwspRg8.js.gz} +0 -0
- /package/dist/web/assets/{typespec-C_5SOJR4.js → typespec-DXRppCgc.js} +0 -0
- /package/dist/web/assets/{typespec-C_5SOJR4.js.br → typespec-DXRppCgc.js.br} +0 -0
- /package/dist/web/assets/{typespec-C_5SOJR4.js.gz → typespec-DXRppCgc.js.gz} +0 -0
- /package/dist/web/assets/{typst-C_MV14-S.js → typst-L5uwArOj.js} +0 -0
- /package/dist/web/assets/{typst-C_MV14-S.js.br → typst-L5uwArOj.js.br} +0 -0
- /package/dist/web/assets/{typst-C_MV14-S.js.gz → typst-L5uwArOj.js.gz} +0 -0
- /package/dist/web/assets/{use-blob-url-B3R1DMZ0.js → use-blob-url-BC69n15x.js} +0 -0
- /package/dist/web/assets/{use-is-mobile-CkO33jqU.js → use-is-mobile-BClDZJP5.js} +0 -0
- /package/dist/web/assets/{use-visual-viewport-C307OVeV.js → use-visual-viewport-BGpcMnIx.js} +0 -0
- /package/dist/web/assets/{v-DaGxeDE4.js → v-Bz99d5uk.js} +0 -0
- /package/dist/web/assets/{v-DaGxeDE4.js.br → v-Bz99d5uk.js.br} +0 -0
- /package/dist/web/assets/{v-DaGxeDE4.js.gz → v-Bz99d5uk.js.gz} +0 -0
- /package/dist/web/assets/{vala-og0dxQci.js → vala-B-CtBLX1.js} +0 -0
- /package/dist/web/assets/{vala-og0dxQci.js.br → vala-B-CtBLX1.js.br} +0 -0
- /package/dist/web/assets/{vala-og0dxQci.js.gz → vala-B-CtBLX1.js.gz} +0 -0
- /package/dist/web/assets/{vb-6CaJs6KS.js → vb-DHqiz9Cp.js} +0 -0
- /package/dist/web/assets/{vb-6CaJs6KS.js.br → vb-DHqiz9Cp.js.br} +0 -0
- /package/dist/web/assets/{vb-6CaJs6KS.js.gz → vb-DHqiz9Cp.js.gz} +0 -0
- /package/dist/web/assets/{vendor-xterm-DHxOhwwM.js → vendor-xterm-CfasyE0m.js} +0 -0
- /package/dist/web/assets/{vendor-xterm-DHxOhwwM.js.br → vendor-xterm-CfasyE0m.js.br} +0 -0
- /package/dist/web/assets/{vendor-xterm-DHxOhwwM.js.gz → vendor-xterm-CfasyE0m.js.gz} +0 -0
- /package/dist/web/assets/{verilog-DITuWErO.js → verilog-DbTkSkM7.js} +0 -0
- /package/dist/web/assets/{verilog-DITuWErO.js.br → verilog-DbTkSkM7.js.br} +0 -0
- /package/dist/web/assets/{verilog-DITuWErO.js.gz → verilog-DbTkSkM7.js.gz} +0 -0
- /package/dist/web/assets/{vesper-lpvVk8gJ.js → vesper-2aVei4Le.js} +0 -0
- /package/dist/web/assets/{vesper-lpvVk8gJ.js.br → vesper-2aVei4Le.js.br} +0 -0
- /package/dist/web/assets/{vesper-lpvVk8gJ.js.gz → vesper-2aVei4Le.js.gz} +0 -0
- /package/dist/web/assets/{vhdl-BH7O0w5d.js → vhdl-BJJSCnQQ.js} +0 -0
- /package/dist/web/assets/{vhdl-BH7O0w5d.js.br → vhdl-BJJSCnQQ.js.br} +0 -0
- /package/dist/web/assets/{vhdl-BH7O0w5d.js.gz → vhdl-BJJSCnQQ.js.gz} +0 -0
- /package/dist/web/assets/{viml-BAdOLdlU.js → viml-qxSvRN8n.js} +0 -0
- /package/dist/web/assets/{viml-BAdOLdlU.js.br → viml-qxSvRN8n.js.br} +0 -0
- /package/dist/web/assets/{viml-BAdOLdlU.js.gz → viml-qxSvRN8n.js.gz} +0 -0
- /package/dist/web/assets/{vitesse-black-CVq0tV6W.js → vitesse-black-CjR1y0Bv.js} +0 -0
- /package/dist/web/assets/{vitesse-black-CVq0tV6W.js.br → vitesse-black-CjR1y0Bv.js.br} +0 -0
- /package/dist/web/assets/{vitesse-black-CVq0tV6W.js.gz → vitesse-black-CjR1y0Bv.js.gz} +0 -0
- /package/dist/web/assets/{vitesse-dark-C5igeaQr.js → vitesse-dark-jrcdsqkn.js} +0 -0
- /package/dist/web/assets/{vitesse-dark-C5igeaQr.js.br → vitesse-dark-jrcdsqkn.js.br} +0 -0
- /package/dist/web/assets/{vitesse-dark-C5igeaQr.js.gz → vitesse-dark-jrcdsqkn.js.gz} +0 -0
- /package/dist/web/assets/{vitesse-light-BYsPg_gN.js → vitesse-light-DkC_qU0k.js} +0 -0
- /package/dist/web/assets/{vitesse-light-BYsPg_gN.js.br → vitesse-light-DkC_qU0k.js.br} +0 -0
- /package/dist/web/assets/{vitesse-light-BYsPg_gN.js.gz → vitesse-light-DkC_qU0k.js.gz} +0 -0
- /package/dist/web/assets/{vyper-BrpU-131.js → vyper-WAhkfwIX.js} +0 -0
- /package/dist/web/assets/{vyper-BrpU-131.js.br → vyper-WAhkfwIX.js.br} +0 -0
- /package/dist/web/assets/{vyper-BrpU-131.js.gz → vyper-WAhkfwIX.js.gz} +0 -0
- /package/dist/web/assets/{wasm-BTWJu1hM.js → wasm-BYGI5YYa.js} +0 -0
- /package/dist/web/assets/{wasm-BTWJu1hM.js.br → wasm-BYGI5YYa.js.br} +0 -0
- /package/dist/web/assets/{wasm-BTWJu1hM.js.gz → wasm-BYGI5YYa.js.gz} +0 -0
- /package/dist/web/assets/{wasm-WCHstPNa.js → wasm-Miuao4O0.js} +0 -0
- /package/dist/web/assets/{wasm-WCHstPNa.js.br → wasm-Miuao4O0.js.br} +0 -0
- /package/dist/web/assets/{wasm-WCHstPNa.js.gz → wasm-Miuao4O0.js.gz} +0 -0
- /package/dist/web/assets/{wenyan-OcBsGWgI.js → wenyan-Dd5qjF8u.js} +0 -0
- /package/dist/web/assets/{wenyan-OcBsGWgI.js.br → wenyan-Dd5qjF8u.js.br} +0 -0
- /package/dist/web/assets/{wenyan-OcBsGWgI.js.gz → wenyan-Dd5qjF8u.js.gz} +0 -0
- /package/dist/web/assets/{wgsl-BHOPLF5w.js → wgsl-C3T5a0UO.js} +0 -0
- /package/dist/web/assets/{wgsl-BHOPLF5w.js.br → wgsl-C3T5a0UO.js.br} +0 -0
- /package/dist/web/assets/{wgsl-BHOPLF5w.js.gz → wgsl-C3T5a0UO.js.gz} +0 -0
- /package/dist/web/assets/{wikitext-BF6KBxPK.js → wikitext-CvCJjxSa.js} +0 -0
- /package/dist/web/assets/{wikitext-BF6KBxPK.js.br → wikitext-CvCJjxSa.js.br} +0 -0
- /package/dist/web/assets/{wikitext-BF6KBxPK.js.gz → wikitext-CvCJjxSa.js.gz} +0 -0
- /package/dist/web/assets/{wit-CIP-bHDR.js → wit-DybvG9BU.js} +0 -0
- /package/dist/web/assets/{wit-CIP-bHDR.js.br → wit-DybvG9BU.js.br} +0 -0
- /package/dist/web/assets/{wit-CIP-bHDR.js.gz → wit-DybvG9BU.js.gz} +0 -0
- /package/dist/web/assets/{wolfram-DX3pie6r.js → wolfram-CdhnrpZ7.js} +0 -0
- /package/dist/web/assets/{wolfram-DX3pie6r.js.br → wolfram-CdhnrpZ7.js.br} +0 -0
- /package/dist/web/assets/{wolfram-DX3pie6r.js.gz → wolfram-CdhnrpZ7.js.gz} +0 -0
- /package/dist/web/assets/{ws-auth-J3hw0Mhc.js → ws-auth-Ytui7dXP.js} +0 -0
- /package/dist/web/assets/{yaml-CtIxN55b.js → yaml-B0HIje0z.js} +0 -0
- /package/dist/web/assets/{yaml-CtIxN55b.js.br → yaml-B0HIje0z.js.br} +0 -0
- /package/dist/web/assets/{yaml-CtIxN55b.js.gz → yaml-B0HIje0z.js.gz} +0 -0
- /package/dist/web/assets/{zenscript-BYsmNQ3N.js → zenscript-CcLSNTvD.js} +0 -0
- /package/dist/web/assets/{zenscript-BYsmNQ3N.js.br → zenscript-CcLSNTvD.js.br} +0 -0
- /package/dist/web/assets/{zenscript-BYsmNQ3N.js.gz → zenscript-CcLSNTvD.js.gz} +0 -0
- /package/dist/web/assets/{zig-Bj2fs45Q.js → zig-dAelYAUr.js} +0 -0
- /package/dist/web/assets/{zig-Bj2fs45Q.js.br → zig-dAelYAUr.js.br} +0 -0
- /package/dist/web/assets/{zig-Bj2fs45Q.js.gz → zig-dAelYAUr.js.gz} +0 -0
|
@@ -0,0 +1,376 @@
|
|
|
1
|
+
# Plan: Android Emulator trong PPM
|
|
2
|
+
|
|
3
|
+
Ngày: 2026-09-20. Trạng thái: **đề xuất triển khai, chưa viết tính năng**.
|
|
4
|
+
Đối chiếu repository tại `641da958`; nghiên cứu tài liệu và mã nguồn upstream ngày 2026-09-20.
|
|
5
|
+
|
|
6
|
+
## 1. Kết quả cần đạt
|
|
7
|
+
|
|
8
|
+
Người dùng mở **Android** trong PPM, chọn máy ảo, bấm Start/Open và thao tác trực tiếp: chạm, vuốt, giữ, gõ chữ, Home/Back/Recent, xoay màn hình. Mỗi máy có tab riêng; desktop có thể pop-out/PiP theo cơ chế sẵn có, điện thoại dùng giao diện cảm ứng. Emulator chạy trên máy host cài PPM; trình duyệt chỉ hiển thị và gửi thao tác.
|
|
9
|
+
|
|
10
|
+
Phạm vi mặc định: Android Emulator chính thức/AVD trên cùng host PPM; Linux trước để xác minh, Windows và macOS là các nền tảng phải kiểm chứng trước khi công bố hỗ trợ. Hai máy ảo độc lập là bài kiểm tra thiết kế; mặc định giới hạn một máy do PPM khởi động đồng thời để tránh chiếm tài nguyên host. Có thể tăng giới hạn sau kiểm tra RAM/CPU.
|
|
11
|
+
|
|
12
|
+
Không yêu cầu Android Studio đang mở. SDK, system image và AVD có thể dùng chung với Studio. Không cam kết toàn bộ tính năng của Studio: debugger, profiler, Gradle integration, camera/AR/XR và device farm nằm ngoài bản đầu. Điện thoại USB/Wi-Fi là giai đoạn mở rộng, chưa phải yêu cầu đã chốt.
|
|
13
|
+
|
|
14
|
+
## 2. Android Studio thực sự làm gì
|
|
15
|
+
|
|
16
|
+
| Bằng chứng upstream | Bài học áp dụng cho PPM |
|
|
17
|
+
|---|---|
|
|
18
|
+
| `EmulatorController.kt` kết nối localhost gRPC, gắn credentials, quản lý trạng thái và gọi các dịch vụ emulator | Backend PPM giữ kết nối native và thông tin xác thực; browser dùng API PPM. [S1] |
|
|
19
|
+
| `EmulatorView.kt` yêu cầu `streamScreenshot` ở định dạng `RGB888`, kích thước theo vùng hiển thị; hủy feed cũ khi thay đổi | Lấy màn hình trực tiếp từ emulator, scale theo viewport; không chụp cửa sổ desktop. [S2] |
|
|
20
|
+
| View chuyển chuột/phím/touch thành sự kiện emulator | Viết bộ chuyển input Android riêng; không dùng bộ inject input vào OS của Remote Desktop. [S2] |
|
|
21
|
+
| `emulator_controller.proto` có screenshot, input, clipboard, VM state, rotation/display metadata và timestamp | Có cơ sở xây tab tương tác; phải pin schema và probe năng lực từng phiên bản. [S3] |
|
|
22
|
+
| Device Manager quản lý AVD, cấu hình phần cứng và system image | Tách **danh sách máy/config** khỏi **phiên đang chạy/viewer**. [S4] |
|
|
23
|
+
| Tài liệu CLI minh họa Studio dùng `-qt-hide-window`, `-grpc-use-token`, `-idle-grpc-timeout` | Flags phụ thuộc phiên bản; kiểm tra `-help` trên binary thật, không copy cứng hoặc nhầm “ẩn cửa sổ” với “headless”. [S5] |
|
|
24
|
+
|
|
25
|
+
Đính chính đề xuất ban đầu: **chưa có căn cứ nói Android Studio dùng scrcpy cho embedded emulator**. Nguồn đã đọc cho thấy gRPC + screenshot feed. Scrcpy là một phương án của PPM, không phải mô tả kiến trúc Studio.
|
|
26
|
+
|
|
27
|
+
Phần khác biệt cần tự thiết kế: Studio và emulator ở cùng máy; PPM có browser qua LAN/tunnel. Một frame RGB 720×1280 cần 2,764,800 byte; 30 fps xấp xỉ 83 MB/s trước overhead. Không chuyển raw RGB qua Internet. Con số là phép tính dung lượng, không phải benchmark.
|
|
28
|
+
|
|
29
|
+
Google cũng có demo browser dùng gateway nối gRPC `rtc2` và WebRTC. Đây là hướng tham khảo riêng cho web, không đồng nghĩa embedded Studio dùng WebRTC. Proto `rtc_service_v2.proto` trên SDK máy này ghi rõ API experimental. [S6]
|
|
30
|
+
|
|
31
|
+
## 3. Bằng chứng tại máy và repository
|
|
32
|
+
|
|
33
|
+
Kiểm tra read-only, chưa boot/stop AVD và chưa thử phiên streaming:
|
|
34
|
+
|
|
35
|
+
- Emulator: `/home/thawngho/Android/Sdk/emulator/emulator`, phiên bản **36.5.10.0**, build **15081367**.
|
|
36
|
+
- `-list-avds`: **Pixel_9**, **Pixel_Tablet**.
|
|
37
|
+
- `-accel-check`: **KVM installed and usable**; chưa xác minh GPU rendering hoặc tốc độ boot.
|
|
38
|
+
- ADB trên PATH: `/usr/bin/adb`, **1.0.41**, package **37.0.0-android-tools**. Khi triển khai cần chọn một ADB nhất quán với SDK; không thay server ADB đang chạy chỉ vì phát hiện khác phiên bản.
|
|
39
|
+
- SDK có `emulator_controller.proto`, `rtc_service.proto`, `rtc_service_v2.proto`, snapshot/UI protos. Có file không chứng minh RPC hoạt động trên binary: phase 0 phải gọi thử.
|
|
40
|
+
- PPM có Hono/Bun WS, ffmpeg, WebCodecs viewer, tab pool và pop-out. Remote Desktop session hiện thu hồi **mọi** session khác khi mở phiên mới; không thể dùng nguyên manager này cho Android.
|
|
41
|
+
- TabPool giữ tab ẩn mounted. Phải ngừng feed/release input theo visibility thực tế, không chỉ cleanup khi unmount.
|
|
42
|
+
- Decoder Remote Desktop đang tạo timestamp theo 30 fps; chưa phải pipeline đồng bộ audio/video.
|
|
43
|
+
- `.claude/workflows/*`, `.ck.json` và biến `CK_PLAN_DATE_FORMAT` không có trong checkout này. Plan dùng `YYMMDD` theo tên tài liệu hiện có; áp dụng `CLAUDE.md`, roadmap, code/design standards đã có.
|
|
44
|
+
|
|
45
|
+
## 4. Quyết định kiến trúc / ADR đề xuất
|
|
46
|
+
|
|
47
|
+
### ADR-A: Backend native gRPC cho emulator
|
|
48
|
+
|
|
49
|
+
**Ưu tiên:** Bun service gọi emulator gRPC; ADB dùng discovery/boot readiness, cài APK và logcat. SDK command-line tools quản lý AVD khi tới giai đoạn quản lý máy.
|
|
50
|
+
|
|
51
|
+
> **Đính chính sau Phase 3 (2026-09-21, đo thật):** logcat **không** đi qua `adb logcat` như câu
|
|
52
|
+
> trên viết, mà qua gRPC `streamLogcat` — dùng lại đúng channel đã xác thực, không thêm tiến
|
|
53
|
+
> trình con mỗi máy, và có sẵn cả khi adb serial còn `null` lúc máy đang boot. Theo chính comment
|
|
54
|
+
> trong proto, `streamLogcat` chạy `logcat` trong guest qua `AdbShellStream`, nên dữ liệu là một.
|
|
55
|
+
> Cái mất là không đẩy được filter xuống thiết bị. **Cài APK thì vẫn đi adb** đúng như trên, vì
|
|
56
|
+
> `EmulatorController` không có RPC install nào. Hai phép đo đi kèm, cả hai đều trái với thứ đọc
|
|
57
|
+
> proto ra: `LogMessage.sort = Parsed` **không được cài đặt** và hỏng bằng cách gửi stream rỗng
|
|
58
|
+
> (334 message trống trong 8 s, không lỗi), còn unary `getLogcat` trả `12 UNIMPLEMENTED`. Xem
|
|
59
|
+
> `android-emulator-phase3-report-260921.md` §2.
|
|
60
|
+
|
|
61
|
+
Lý do: phù hợp emulator-first và học đúng ranh giới từ Studio; không cần cài server vào Android guest cho đường chính. Rủi ro: schema/auth/discovery thay đổi; thư viện gRPC Node không mặc nhiên tương thích Bun/binary compiled. Thử `@grpc/grpc-js` với protobuf client được generate/pin trước; chỉ thêm dependency sau spike. Không tự viết lại HTTP/2/gRPC, không đổi backend sang Go hay thêm Python service mặc định. [S9]
|
|
62
|
+
|
|
63
|
+
Chỉ chọn subset RPC cần dùng nhưng giữ nguồn/schema, revision và license. Không tải proto tùy ý từ mạng lúc chạy.
|
|
64
|
+
|
|
65
|
+
**Cấm `protoLoader.loadSync()`.** Nó đọc file `.proto` từ đĩa lúc chạy, và trong binary
|
|
66
|
+
`bun build --compile` đường dẫn trỏ vào `/$bunfs/root/` nên ném `ENOENT` — đo được ở Phase 0, đúng
|
|
67
|
+
bài học "compiled PPM không với tới node_modules của chính nó" trong CLAUDE.md. Đường duy nhất là
|
|
68
|
+
`protoLoader.fromJSON()` với descriptor JSON sinh lúc build và `import` vào module để bundler nhúng.
|
|
69
|
+
Đã chứng minh: binary chạy từ thư mục ngoài checkout trả `getStatus` trong 17.5 ms và pass toàn bộ
|
|
70
|
+
bài cancellation/deadline/cleanup y hệt bản chạy từ source. Tạo compatibility record gồm emulator version, auth mode, RPC capabilities và lỗi có hướng xử lý.
|
|
71
|
+
|
|
72
|
+
### ADR-B: Media qua WebSocket cùng origin là đường cơ sở
|
|
73
|
+
|
|
74
|
+
| Phương án | Ưu điểm | Chi phí / kết luận |
|
|
75
|
+
|---|---|---|
|
|
76
|
+
| gRPC RGB → ffmpeg H.264 → WSS → WebCodecs | Input/lifecycle giống Studio; đi cùng đường truy cập PPM | Encode thêm trên host, copy frame, xử lý resize; **phương án ưu tiên cần benchmark** |
|
|
77
|
+
| Native emulator WebRTC + signaling qua PPM | Browser media stack, có khả năng giảm encode trung gian | API experimental; ICE/TURN, NAT và chính sách thu hồi phiên cần kiểm chứng; để mở rộng sau |
|
|
78
|
+
| Scrcpy server → H.264 qua ADB → WSS | Luồng nén từ guest, dùng được cho máy thật | Client/server phải khớp phiên bản, deploy artifact vào guest; **contingency nếu gRPC media không đạt** [S7] |
|
|
79
|
+
| gRPC PNG → WSS → canvas | Dễ xác minh correctness, không phụ thuộc VideoDecoder | Băng thông/CPU lớn; chế độ tương thích giới hạn kích thước và fps, không dùng làm chuẩn hiệu năng |
|
|
80
|
+
| **gRPC MMAP side channel → ffmpeg → WSS** | Pixel không đi qua grpc-js chút nào; gRPC chỉ mang `seq`/`timestampUs` | `ImageTransport.MMAP` (`emulator_controller.proto` field 6): client sở hữu handle shm/mmap. Đo được 318/318 frame có pixel thật, **0 byte** qua gRPC. Proto tự cảnh báo *"the mmap can result in tearing"*. **Để dành**, chưa cần ở v1 |
|
|
81
|
+
|
|
82
|
+
**Quyết định (Phase 0, 2026-09-21): giữ option 1 làm đường chính.** Đo trên host Linux, emulator
|
|
83
|
+
36.5.10, Bun 1.3.11, `@grpc/grpc-js` 1.14.0, với chuyển động liên tục thật: RGB888 720×1600 đạt
|
|
84
|
+
**39.9 fps / 131.9 MiB/s**, full-res 1080×2400 đạt **40.0 fps / 297.4 MiB/s**, **không rớt frame nào**
|
|
85
|
+
(seq liên tục). Pipeline đầy đủ ra **360/360 frame** decode được ở **3.90 Mbit/s**. `h264_vaapi` tốn
|
|
86
|
+
**0.33 core** so với 64–80% của libx264. Ngưỡng 83 MB/s mà plan lo không phải là ngưỡng. Không
|
|
87
|
+
chuyển sang scrcpy. Chi tiết: `docs/architecture/android-emulator-phase0-report-260921.md`.
|
|
88
|
+
|
|
89
|
+
Ba chi tiết schema phải tôn trọng khi hiện thực hoá — cả ba đều đã được **đo lại ở Phase 2**, và
|
|
90
|
+
hai trong số đó hoá ra đoạn văn cũ ở đây ghi sai:
|
|
91
|
+
|
|
92
|
+
1. `ImageFormat.width/height` là **hộp bao giữ tỉ lệ**, không phải kích thước ra lệnh (proto:
|
|
93
|
+
*"will never exceed the given width, but can be less"*). Phải xin hộp **vuông** để trần áp lên
|
|
94
|
+
cạnh dài, và đọc kích thước thật từ `format.width/height` của chính frame — đó là trường
|
|
95
|
+
output, và cũng là thứ khiến việc xoay màn hình chạy đúng mà không phải đoán.
|
|
96
|
+
2. ~~Thứ tự pixel là bottom-up nên phải có `vflip`~~ — **sai**. Câu đó chép từ comment trong
|
|
97
|
+
proto. So từng hàng với `adb exec-out screencap` trên emulator 36.5.10: khớp ở mức chênh lệch
|
|
98
|
+
**1.21**/pixel khi căn thẳng và **37.15** khi lật. Buffer là **top-down**; thêm `vflip` làm mọi
|
|
99
|
+
màn hình lộn ngược mà không báo lỗi.
|
|
100
|
+
3. Sau khi một `streamScreenshot` bị cancel, mọi stream mở sau đó trả **đúng 1 frame** rồi im, kể
|
|
101
|
+
cả trên channel mới. Nên đổi mức chất lượng **không được** mở lại stream: mở đúng một stream ở
|
|
102
|
+
trần rung cao nhất cho cả phiên, đổi rung bằng `scale` trong ffmpeg.
|
|
103
|
+
|
|
104
|
+
Và một chi tiết input: `Touch.x/y` luôn là **pixel panel gốc chưa xoay**, không đổi theo hướng màn
|
|
105
|
+
hình (đo bằng `getevent`), nên toạ độ trên frame đã xoay phải được xoay ngược lại trước khi gửi.
|
|
106
|
+
|
|
107
|
+
Chỉ productize một đường chính; không xây đồng thời ba backend. Nếu raw→H.264 không đạt ngân sách, ghi ADR cập nhật rồi chuyển sang scrcpy cho video/control thay vì kết hợp input của backend này với geometry backend khác chưa được kiểm chứng.
|
|
108
|
+
|
|
109
|
+
WebSocket được Cloudflare hỗ trợ; cần heartbeat và reconnect vì kết nối có thể bị ngắt. WebRTC media đi qua tuyến ICE riêng; việc trang PPM mở được qua tunnel không chứng minh media WebRTC tới được. Không mặc định yêu cầu người dùng dựng TURN. [S6, S10]
|
|
110
|
+
|
|
111
|
+
### ADR-C: Module nội bộ độc lập, lazy-load
|
|
112
|
+
|
|
113
|
+
Đặt backend trong `src/services/android/`, UI trong `src/web/components/android/`. Dùng route/tab riêng; chỉ trích xuất tiện ích codec thực sự dùng chung. Runtime registry theo device, không tạo framework plugin mới.
|
|
114
|
+
|
|
115
|
+
Đây là bước thực dụng theo hiện trạng: extension RPC/webview hiện chưa có media/control capability đã được chứng minh. Giữ API service có ranh giới rõ để có thể chuyển thành plugin khi nền tảng hỗ trợ. Không nới quyền spawn toàn cục của extension chỉ để gọi emulator.
|
|
116
|
+
|
|
117
|
+
### ADR-D: Vòng đời emulator tách khỏi viewer
|
|
118
|
+
|
|
119
|
+
Đóng tab/refresh/mất mạng không stop emulator. Stop là hành động riêng, chỉ áp dụng máy PPM sở hữu; máy attach từ Studio mặc định chỉ Disconnect. Không kill ADB server, không kill theo tên process.
|
|
120
|
+
|
|
121
|
+
## 5. Luồng và hợp đồng nội bộ
|
|
122
|
+
|
|
123
|
+
```mermaid
|
|
124
|
+
flowchart LR
|
|
125
|
+
B[Android tab trong browser] <-->|HTTPS: máy và tác vụ| H[PPM Hono API]
|
|
126
|
+
B <-->|WSS: input, trạng thái, video nén| W[Android session manager]
|
|
127
|
+
H --> D[Device registry và lifecycle]
|
|
128
|
+
D --> T[SDK tools và ADB]
|
|
129
|
+
W -->|input và trạng thái| G[gRPC adapter localhost]
|
|
130
|
+
G <--> E[Android Emulator]
|
|
131
|
+
G -->|RGB frames nội bộ host| F[ffmpeg encoder]
|
|
132
|
+
F -->|H.264 access units| W
|
|
133
|
+
T --> E
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
Đồ thị là phương án ADR-B ưu tiên; thay media adapter nếu phase 0 chọn khác.
|
|
137
|
+
|
|
138
|
+
**Identity:** `avdId` dựa trên canonical AVD config path + SDK context; ID opaque cấp bởi server. `deviceId` chỉ runtime instance, đi cùng `generation`, ADB serial, PID/start identity và gRPC endpoint. Không dùng ADB serial làm ID tab bền vững. Restart máy làm runtime identity thay đổi nhưng vẫn mở lại đúng AVD.
|
|
139
|
+
|
|
140
|
+
**State máy:** `stopped → starting → booting → ready → stopping → stopped`; lỗi boot thành `error`, ADB offline hiện riêng. **State viewer:** `disconnected → connecting → viewing/controlling → paused/reconnecting/error`. Khả năng video sẵn sàng có thể trước Android boot-complete; install APK chỉ khi guest ready.
|
|
141
|
+
|
|
142
|
+
**Discovery:** SDK path do người dùng chọn → env Android SDK phù hợp → vị trí chuẩn OS/PATH. Tôn trọng AVD home overrides — nhưng **`ANDROID_AVD_HOME` thay thế chứ không cộng dồn**: set nó thì AVD của người dùng biến mất khỏi `-list-avds`, nên PPM không được set biến này toàn cục (đo ở Phase 0). Và **không bao giờ truyền `-grpc <port>`**: `emulator -help` ghi `-grpc-use-jwt ... (default, disable with -grpc flag)`, nên ghim port cố định chính là tự hạ kênh điều khiển xuống không xác thực — luôn discovery. Thực tế gRPC đã bật sẵn không cần cờ nào (`Started GRPC server at 127.0.0.1:8554, security: Local, auth: +token`), và emulator tự cảnh báo *"Basic token auth should only be used by android-studio"*, nên PPM đi đường JWT. Đọc discovery files của emulator user hiện tại với giới hạn kích thước; xác minh PID/process identity, AVD và endpoint loopback trước sử dụng. Không giả định mọi OS/version dùng một đường dẫn `avd/running`. Credentials chỉ nằm backend. Hỗ trợ token/JWT theo phiên bản đã test, báo unsupported nếu chưa có; không hạ xuống unauthenticated khi thất bại. [S8]
|
|
143
|
+
|
|
144
|
+
**Lifecycle:** mutex theo AVD + start idempotency; refresh/chạm Start hai lần không spawn hai process. Dùng argv, deadline boot có cấu hình, log ring buffer, cancellation. Timeout cho lựa chọn Retry/Stop rõ ràng; chỉ xử lý process được task đó tạo. Kiểm tra AVD đang được Studio dùng, không xóa lock file để cưỡng ép chạy.
|
|
145
|
+
|
|
146
|
+
**PPM restart:** không tự boot máy theo restored tab. Runtime registry được dựng lại từ discovery + ownership record tối thiểu; kiểm tra PID start identity để tránh PID reuse. Encoder/viewer session kết thúc, emulator do PPM tạo được giữ chạy và nhận lại nếu runtime/process ownership còn hợp lệ. Phase 0 phải thử thực tế hành vi process group/service shutdown trên từng OS; khi chưa xác minh thì không quảng cáo giữ máy xuyên restart.
|
|
147
|
+
|
|
148
|
+
**Session:** một controller lease trên mỗi runtime device; client thứ hai bị báo đang sử dụng, có hành động Take control rõ ràng. V1 chưa cần nhiều viewer thụ động. Hai device có hai session độc lập; tuyệt đối không ngắt Remote Desktop hay máy khác. Lease đề xuất heartbeat 5 giây, expire 15 giây; server hết lease phải giải phóng input. Reconnect lấy nonce mới và không replay thao tác cũ. Server cấp capability reconnect ngắn hạn, chỉ giữ trong memory của browser, bind session/device/token generation; reconnect hợp lệ thay socket cũ nguyên tử, không đợi lease hết hạn. Take control tăng generation, hủy cả pending auth/reconnect của controller cũ. Refresh mất capability thì chờ lease hoặc Take control chủ động; mục tiêu reconnect 5 giây chỉ áp dụng kết nối còn capability hợp lệ.
|
|
149
|
+
|
|
150
|
+
**API dự kiến (tên có thể điều chỉnh theo convention repository):**
|
|
151
|
+
|
|
152
|
+
| Endpoint | Contract chính |
|
|
153
|
+
|---|---|
|
|
154
|
+
| `GET /api/android/capabilities` | SDK/tool versions, host accel, streaming/backend readiness, lý do thiếu |
|
|
155
|
+
| `GET /api/android/devices` | AVD + runtime instance, state, ownership và capabilities; không token/đường dẫn nhạy cảm |
|
|
156
|
+
| `POST /api/android/avds/:avdId/start` | Validated launch profile, idempotency key → operation ID |
|
|
157
|
+
| `GET /api/android/operations/:id` | Pending/progress/result/error; client reconnect không khởi động lại operation |
|
|
158
|
+
| `POST /api/android/devices/:deviceId/stop` | Check generation và ownership, graceful stop → operation ID |
|
|
159
|
+
| `POST /api/android/devices/:deviceId/sessions` | Viewport/codec capabilities → session ID + nonce ngắn hạn |
|
|
160
|
+
| `WS /ws/android` | Auth đầu tiên, device/session binding; JSON control + binary video |
|
|
161
|
+
| `DELETE /api/android/sessions/:id` | Đóng viewer/idempotent, không stop máy |
|
|
162
|
+
| Phase 3: install/screenshot/logcat | API typed riêng, không mở generic shell/RPC proxy |
|
|
163
|
+
| Phase 4: AVD create/delete/wipe | Thao tác riêng, xác nhận target và hậu quả |
|
|
164
|
+
|
|
165
|
+
HTTP dùng `ok/err` hiện có. Các thao tác lâu trả operation ID, không giữ HTTP request chờ boot nhiều phút. Discovery khi Android UI hoạt động có interval/backoff giới hạn; feature chưa dùng không spawn/poll liên tục.
|
|
166
|
+
|
|
167
|
+
**WS envelope phiên bản 1:** auth, ready, geometry, input, input-reset, quality, visibility, heartbeat, error; metadata gồm session generation và geometry generation. Binary video có version, generation, sequence, timestamp/PTS, config/keyframe flag, kích thước payload. Final layout ghi trong `src/shared/android-protocol.ts` và test với fixture trước khi viết UI. Không gửi base64 video trong JSON.
|
|
168
|
+
|
|
169
|
+
**Media:** một encoder mỗi active device; RGB chỉ trong host. Giới hạn frame dimensions, message size và pending buffers. Không block Bun loop bằng encode sync. Trước encode chỉ giữ latest frame; ffmpeg rawvideo stdin không có frame header nên một khi bắt đầu write phải hoàn tất frame đó, kể cả partial write/backpressure. Chỉ drop nguyên frame chưa bắt đầu; validate stride, pixel layout và kích thước. Sau encode không drop delta tùy ý rồi tiếp tục decode: bỏ đến keyframe hợp lệ hoặc restart/request keyframe. Resize/rotation bắt đầu generation mới, gửi codec config + keyframe, bỏ late frames từ generation cũ. Duy trì timestamp monotonic từ pipeline; chưa thêm audio ở v1.
|
|
170
|
+
|
|
171
|
+
## 6. UX và input
|
|
172
|
+
|
|
173
|
+
**Device Manager:** danh sách AVD: tên, loại phone/tablet, API/ABI, trạng thái, Start/Open/Disconnect/Stop theo ownership. Empty state phân biệt chưa có SDK, thiếu emulator/system image, chưa có AVD, acceleration không dùng được. Không spinner vô thời hạn.
|
|
174
|
+
|
|
175
|
+
**Viewer:** toolbar Home, Back, Recent, Rotate, Volume, Power, Fit/100%, Disconnect; hiển thị trạng thái kết nối và lựa chọn chất lượng. Stop nằm trong menu riêng. Action chưa được backend hỗ trợ có lý do rõ ràng. Phase 3 thêm Screenshot, Install APK và Logcat ở panel phụ.
|
|
176
|
+
|
|
177
|
+
**Mobile:** viewport giữ đúng aspect ratio; nút điều khiển chính ở dưới, target ≥44×44; menu/dialog dùng bottom sheet. Có nút Keyboard và vùng nhập text dùng IME. Pinch trên màn hình Android gửi multi-touch khi bật chế độ tương tác; zoom viewer có chế độ riêng để hai hành vi không xung đột.
|
|
178
|
+
|
|
179
|
+
**Input correctness:**
|
|
180
|
+
|
|
181
|
+
- Pointer capture, ID ổn định cho nhiều ngón; down/move/up/cancel; long press và drag dựa trên thời gian thực, không lặp `adb shell input` mỗi frame.
|
|
182
|
+
- Ánh xạ CSS bounds/letterboxing → frame hiển thị → native display coordinates. Xét DPR, rotation, resize, display metadata. Reject input theo geometry cũ; cancel gesture khi geometry đổi.
|
|
183
|
+
- Pointer cancel, blur, tab hidden, mất controller, disconnect đều release keys/touches. Timeout server là lớp dự phòng cho browser mất mạng không gửi được release.
|
|
184
|
+
- Phân biệt physical key với text/IME (`beforeinput`, composition). **Phase 0 đo được: `sendKey.text` chỉ mang ASCII in được [32-127).** `"café"` tới nơi thành `"caf"`, còn tiếng Việt, emoji và CJK mất sạch — không lỗi, chỉ cắt cụt âm thầm. `setClipboard` giữ nguyên `"Tiếng Việt 😀"` (xác minh cả round-trip lẫn nhìn trong guest). Nên **mọi ký tự ngoài ASCII phải đi đường clipboard**, không phải `text`; đó là ràng buộc thiết kế của IME mobile ở phase 2, không phải chi tiết tối ưu.
|
|
185
|
+
- Clipboard là thao tác copy/paste chủ động giữa browser và guest, không bật đồng bộ clipboard OS host mặc định. Giữ nguyên giới hạn quyền clipboard của browser.
|
|
186
|
+
- Không chiếm shortcut PPM khi canvas không focus. PiP dùng đúng ownerDocument/window, không gắn listener cứng vào document chính.
|
|
187
|
+
|
|
188
|
+
`VideoDecoder` phụ thuộc secure context và codec thực tế. Probe `isConfigSupported`; HTTPS/localhost dùng H.264 khi có. Browser không hỗ trợ hoặc LAN HTTP có chế độ PNG tốc độ thấp, ghi nhãn chất lượng rõ ràng; nếu không đạt mức dùng được thì báo hướng mở HTTPS/trình duyệt hỗ trợ, không để màn hình đen. Backend được chọn phải chứng minh được screenshot fallback: gRPC dùng PNG, nếu chọn scrcpy thì thử ADB screenshot có giới hạn tần suất/độ phân giải; không giữ thêm toàn bộ gRPC stack chỉ để fallback. [S11]
|
|
189
|
+
|
|
190
|
+
## 7. Bảo vệ phiên và dữ liệu
|
|
191
|
+
|
|
192
|
+
Đây là yêu cầu chức năng của kênh điều khiển host/device, không phải bổ sung hệ thống phân quyền nhiều người dùng.
|
|
193
|
+
|
|
194
|
+
- Bắt buộc PPM auth enabled; validate Origin đầy đủ ở upgrade và tạo phiên, có allowlist dev proxy cụ thể. Không copy kiểm tra chỉ hostname của Remote Desktop như bảo đảm same-origin chung. **Phase 0 xác nhận câu trên đúng:** `assertSessionAllowed` trong `src/server/routes/remote-desktop.ts:28-46` so sánh **hostname, bỏ qua port**, có chủ ý và có comment — dev proxy của Vite ghi đè `Host` mà không thêm `X-Forwarded-Host`, nên so cả `host:port` sẽ chặn mọi phiên dev. Android dùng lại đúng khuôn đó, nhưng phải nhớ nó **không** phải bảo đảm same-origin đầy đủ: một trang khác **port** trên cùng hostname vẫn qua được.
|
|
195
|
+
- Nonce single-use TTL đề xuất 30 giây, bind auth context, device/generation, session và quyền control. Chưa auth không tạo encoder/gRPC session; auth timeout đề xuất 5 giây. PPM hiện dùng bearer token chung, không giả định đã có user/session identity phía server: logout browser phải gửi close/release, server có lease expiry dự phòng; token đổi/auth tắt thu hồi toàn bộ Android sessions.
|
|
196
|
+
- RPC chỉ gọi endpoint loopback server đã discovery; browser không nhập URL gRPC hay command tùy ý. Không public ADB/gRPC/TURN credentials qua API/logs.
|
|
197
|
+
- Bound control message size, input rate, video/encoder allocation và concurrent operations. Không nuốt key-up/cancel vì rate limiting; quá tải thì reset input.
|
|
198
|
+
- Cài APK nhận upload ID hoặc file qua existing path guards; xác thực đích, quota, deadline, cleanup temp qua `getPpmDir()`. Không cho upload chọn đường ghi tự do. Không tự uninstall app khi install lỗi chữ ký.
|
|
199
|
+
- Log chỉ metadata/errors, phiên bản, latency/bytes/drop counts; không lưu màn hình, clipboard hay text gõ mặc định.
|
|
200
|
+
- AVD/SDK người dùng hiện có giữ vị trí native Android; dữ liệu quản lý/cache riêng PPM qua `getPpmDir()`. Tests dùng SDK/AVD home giả và `PPM_HOME` tạm.
|
|
201
|
+
|
|
202
|
+
## 8. Bản đồ thay đổi code
|
|
203
|
+
|
|
204
|
+
Tất cả đường dẫn Android dưới đây là **dự kiến tạo**, chưa tồn tại.
|
|
205
|
+
|
|
206
|
+
| Phần | Điểm tích hợp |
|
|
207
|
+
|---|---|
|
|
208
|
+
| Backend Android | `src/services/android/`: sdk-discovery, device-registry, emulator-launcher, grpc-client/auth, session-manager, input, video-pipeline, operations |
|
|
209
|
+
| Schema/protocol | `src/shared/android-protocol.ts`, generated/pinned protobuf dưới module Android; build-time generate, runtime không cần protoc |
|
|
210
|
+
| HTTP/WS | `src/server/routes/android.ts`, `src/server/ws/android.ts`; đăng ký Hono/upgrade/dispatch trong `src/server/index.ts` |
|
|
211
|
+
| UI | `src/web/components/android/`: manager, tab, viewport, toolbar, input hooks, setup; lazy-loaded |
|
|
212
|
+
| Tab registry | `src/web/stores/tab-store.ts`, `panel-utils.ts`, `components/layout/tab-pool.tsx`, `tab-content.tsx` |
|
|
213
|
+
| Pop-out/icon/navigation | `window-panel-persistence.ts`, `lib/tab-type-icons.ts`, nav rail/mobile drawer/command palette; dùng `tab-host` sẵn có |
|
|
214
|
+
| Settings | `settings-categories.ts`, `settings-section-content.tsx`, settings routes, `src/types/config.ts`, config service |
|
|
215
|
+
| Codec reuse | Remote Desktop H.264 decoder/SPS/NAL helpers: trích xuất phần thuần dùng chung nếu cần, giữ regression tests đường cũ |
|
|
216
|
+
| Packaging | `package.json`, `.npmignore`, build/release pipeline, third-party notices; kiểm tra npm và compiled binary |
|
|
217
|
+
|
|
218
|
+
SDK path/default launch limits là host config trong KV hiện có; fit/quality là preference từng browser. Chưa cần migration DB mới hoặc ấn định migration number. Chỉ lưu ownership metadata tối thiểu nếu restart reconciliation thực sự cần; không lưu secret hoặc process handle trong workspace JSON.
|
|
219
|
+
|
|
220
|
+
## 9. Các giai đoạn và điều kiện hoàn thành
|
|
221
|
+
|
|
222
|
+
### Phase 0 — Chứng minh protocol, runtime và media
|
|
223
|
+
|
|
224
|
+
- Tạo spike riêng, scratch PPM_HOME và test AVD do task tạo; không sửa Pixel_9/Pixel_Tablet của người dùng để test destructive flows.
|
|
225
|
+
- Pin emulator/proto/dependency versions; đọc help thực tế, kiểm chứng discovery/token hoặc JWT, `getStatus`, screenshot, touch/key/text, rotation. So sánh tọa độ bằng test app có điểm chạm hiển thị.
|
|
226
|
+
- Chạy gRPC dưới Bun source **và compiled PPM**, working directory ngoài checkout; chứng minh cancellation/deadline/resource cleanup.
|
|
227
|
+
- Đo gRPC RGB→ffmpeg→H.264→browser; PNG làm correctness baseline. Có fixture stdin slow-consumer/partial writes để xác minh frame boundary. Nếu không đạt, benchmark scrcpy candidate và screenshot fallback tương ứng; native WebRTC chỉ spike phụ khi có lý do, không làm dependency để hoàn thành v1.
|
|
228
|
+
- Đo trên LAN và PPM tunnel: fps khi có chuyển động, bitrate, click-to-visible p50/p95, CPU/RSS của PPM + encoder riêng và emulator riêng, ảnh hưởng chat/terminal, rotation, hide/resume.
|
|
229
|
+
- Output: report versions/commands/numbers, quyết định media, giới hạn browser/OS, schema/auth compatibility. **Gate:** boot/stream/control/cleanup thật và ngân sách sơ bộ đạt; chưa đạt thì sửa ADR trước phase 1.
|
|
230
|
+
|
|
231
|
+
### Phase 1 — SDK discovery và vòng đời máy
|
|
232
|
+
|
|
233
|
+
- Capabilities/setup diagnostics; list AVD/runtime, Start/Open/Stop có ownership, trạng thái và operation progress.
|
|
234
|
+
- Registry identity, per-AVD mutex, timeouts, stderr bounded, port/discovery races và restart reconcile.
|
|
235
|
+
- Gate: start đúng một máy, không double spawn; attach máy ngoài không nhận quyền stop; lỗi SDK/KVM/boot actionable; không tác động ADB/AVD khác.
|
|
236
|
+
|
|
237
|
+
### Phase 2 — Tab hiển thị và điều khiển hoàn chỉnh
|
|
238
|
+
|
|
239
|
+
- Dedicated route/WS auth + lease, media adapter đã chọn, viewport và Android input.
|
|
240
|
+
- Toolbar cơ bản, Unicode/IME, multi-touch, rotation, quality, pause/resume, disconnect/reconnect.
|
|
241
|
+
- Tích hợp tab, pop-out/PiP và mobile; fallback browser; không bật emulator khi restore workspace.
|
|
242
|
+
- Gate: nghiệm thu tình huống 1–9 và 11 bên dưới trên served build. Đây là bản đầu có thể dùng để thao tác máy ảo hằng ngày; tình huống 10 thuộc phase 3, tình huống 12 thuộc phase 4.
|
|
243
|
+
|
|
244
|
+
> **Đính chính sau khi người dùng thử thật (đo 2026-09-21).**
|
|
245
|
+
> Ba lỗi, cả ba **không sinh ra một dòng lỗi nào** ở bất kỳ tầng nào:
|
|
246
|
+
> 1. **Ảnh cuộn/méo từ khung thứ hai trở đi.** `FileSink.write()` của Bun nhận trọn chunk và trả
|
|
247
|
+
> về một con số **không phải** "đã ghi bao nhiêu byte của chunk này". Vòng `off += n` vì thế
|
|
248
|
+
> gửi lại phần đuôi nhiều lần: đo bằng `cat`, một khung 4.924.800 byte tới nơi thành
|
|
249
|
+
> **28.043.840 byte (5,7×)**. Luồng rawvideo vào ffmpeg lệch vĩnh viễn — khung **đầu** vẫn
|
|
250
|
+
> đúng, mọi khung sau bị vẽ cuộn. Ghi **một lần** rồi `flush()`. Test phải đo **byte tới nơi**,
|
|
251
|
+
> không đếm khung: mọi bộ đếm trong pipeline đều báo đúng trong khi ffmpeg nhận gấp 5,7 lần.
|
|
252
|
+
> 2. **Màn hình đứng yên thì không có video.** `streamScreenshot` là *change-driven*: đo được
|
|
253
|
+
> **2 khung trong 15 giây** trên một máy nằm ở launcher. Chỉ nạp ffmpeg khi có khung mới nghĩa
|
|
254
|
+
> là luồng H.264 im hẳn, và người vào xem lúc đó kẹt ở "Waiting for the first frame…" cho tới
|
|
255
|
+
> khi có gì đó động đậy trong guest. Phải **nạp lại khung cuối theo nhịp fps** của rung. E2E cũ
|
|
256
|
+
> không thấy vì nó chạy kèm một vòng swipe liên tục.
|
|
257
|
+
> Nhưng nhịp đầy đủ không miễn phí: đo trên máy đứng im, một viewer giữ ffmpeg ở **55% một
|
|
258
|
+
> core** — mỗi khung rgb24 đều bị scale và hwupload lại dù không một pixel nào đổi. Lùi về 10
|
|
259
|
+
> fps sau 1 giây không đổi thì còn **11,7 khung/s vào ffmpeg, 23% một core**, trong khi client
|
|
260
|
+
> vẫn nhận **24,9 access unit/s**: demuxer rawvideo khai 25 fps nên CFR mặc định của ffmpeg
|
|
261
|
+
> nhân bản khung để bù lại, mà khung nhân bản gần như không tốn gì — phần đắt nằm ở mỗi khung
|
|
262
|
+
> *đầu vào*. Hệ quả cần biết: **tốc độ trên dây luôn là 25 fps**, không phải `fps` của rung
|
|
263
|
+
> (24/30/30), và `-g = fps/2` vì thế là GOP 0,6 s chứ không phải 0,5 s. Chưa sửa — muốn đúng
|
|
264
|
+
> thì phải đặt `-framerate` cho input, và đó là thay đổi ngoài phạm vi ba lỗi này.
|
|
265
|
+
> 3. **`avd.id` mới là danh tính, không phải `avd.name`.** File discovery có cả hai, và với mọi AVD
|
|
266
|
+
> tạo bằng Android Studio chúng khác nhau: `avd.id=Pixel_9` cạnh `avd.name=Pixel 9`. Khớp theo
|
|
267
|
+
> tên hiển thị thì emulator đang chạy không khớp được dòng AVD của chính nó — danh sách hiện
|
|
268
|
+
> máy là "stopped" *và* mọc thêm một dòng `external:` không có geometry. Không thấy suốt 4 phase
|
|
269
|
+
> vì mọi AVD dùng để test đều tên một từ, nơi hai trường trùng nhau.
|
|
270
|
+
|
|
271
|
+
### Phase 3 — Công cụ làm việc với app
|
|
272
|
+
|
|
273
|
+
- Install APK bằng picker/upload và chọn file project; progress/cancel, lỗi ABI/minSdk/chữ ký, split APK chỉ nếu có workflow rõ ràng.
|
|
274
|
+
- Screenshot tải về; clipboard chủ động; Logcat theo device với filter, pause/clear-view và ring buffer, không ghi vô hạn vào DB.
|
|
275
|
+
- Gate: install đúng target khi có hai máy; hủy upload không để temp; logs hidden ngừng subscription; không log nội dung input/clipboard.
|
|
276
|
+
|
|
277
|
+
### Phase 4 — Device Manager đầy đủ hơn
|
|
278
|
+
|
|
279
|
+
- Tạo AVD từ system image đã cài, chọn phone/tablet profile, ABI theo host, RAM/storage hợp lý. Các API typed bọc SDK tools, không nối chuỗi shell.
|
|
280
|
+
- **Bắt buộc ghi `hw.keyboard=yes` vào `config.ini`.** `avdmanager` mặc định `no` (Studio thì `yes`), và khi tắt thì touch gRPC vẫn chạy hoàn hảo trong khi `sendKey` trả `OK` và **không một ký tự nào tới guest** — không lỗi, không log. Đã loại trừ allowlist và `-no-window` bằng thực nghiệm ở Phase 0.
|
|
281
|
+
- Cold boot, quick-boot policy; quản lý snapshot là task riêng, serialize với start/stop. Wipe/Delete có xác nhận tên máy và hậu quả, chỉ khi stopped.
|
|
282
|
+
- Có thể cài system image qua UI sau khi hiển thị dung lượng, license và tiến trình; không tự chấp nhận SDK license hay tải nhiều GB khi mở tab. SDK tools có `sdkmanager`/`avdmanager`; tài liệu mới cũng giới thiệu Android CLI, nên probe tool có sẵn và pin đường được test. [S4, S5, S12, S13]
|
|
283
|
+
- Gate: tạo→boot→stop→mở lại giữ dữ liệu; wipe/delete chỉ trúng AVD đã chọn; không sửa AVD Studio đang chạy. Không cần build lại toàn bộ SDK Manager của Studio.
|
|
284
|
+
|
|
285
|
+
> **Đính chính sau Phase 4 (đo 2026-09-21, xem `android-emulator-phase4-report-260921.md`).**
|
|
286
|
+
> Ba điều plan không nói, và cả ba đều hỏng **im lặng**:
|
|
287
|
+
> 1. `ANDROID_AVD_HOME` phải trỏ vào một thư mục **có thật**. Trỏ vào thư mục không tồn tại thì
|
|
288
|
+
> `avdmanager` không báo lỗi — nó quay về `~/.android/avd`, tức thư mục AVD **thật của người
|
|
289
|
+
> dùng**, và ghi AVD vào đó. Giống hệt trường hợp không set biến này cho tiến trình con.
|
|
290
|
+
> `createAvd` phải `mkdir -p` avdHome trước, và vẫn kiểm tra `config.ini` có hiện ra đúng chỗ.
|
|
291
|
+
> 2. **Wipe không được xoá `userdata.img`.** `emulator -help-disk-images` xếp nó vào nhóm ảnh
|
|
292
|
+
> *khởi tạo* cùng `system.img`, và định nghĩa `-wipe-data` là *copy nội dung của userdata.img
|
|
293
|
+
> vào userdata-qemu.img* — xoá nó là xoá bản gốc mà wipe cần để khôi phục.
|
|
294
|
+
> 3. `hardware-qemu.ini.lock` chứa pid **kết thúc bằng byte NUL** (`519772\0`). `trim()` không bỏ
|
|
295
|
+
> NUL, nên `Number()` ra `NaN` và mọi emulator đang chạy đều bị đọc là "không khoá" — dòng cảnh
|
|
296
|
+
> báo "đang mở trong Android Studio" chưa từng hiện kể từ Phase 1. Lấy cụm số đầu file.
|
|
297
|
+
|
|
298
|
+
### Phase 5 — Đóng gói, ổn định và phát hành
|
|
299
|
+
|
|
300
|
+
- Test source/npm/compiled ở Linux, Windows, macOS; đường dẫn có khoảng trắng/Unicode, PATH của service khác terminal, không có Android Studio, thiếu ffmpeg/tool.
|
|
301
|
+
- Test thực trên mobile Safari/Chrome và desktop Chromium/Firefox theo capabilities, cả mạng cục bộ/tunnel.
|
|
302
|
+
- Documentation setup/troubleshoot/compatibility, license notices; feature flag opt-in, lazy load; tắt flag phải cleanup session/encoder nhưng không wipe/stop emulator ngoài ý muốn.
|
|
303
|
+
- Gate: artifacts được serve đúng build, regression Remote Desktop/chat/terminal pass; rollback chỉ tắt tính năng, không thay schema hoặc AVD data.
|
|
304
|
+
|
|
305
|
+
Thứ tự: **0 → 1 → 2 → 3 → 4 → 5**. Việc kiểm tra packaging/mobile/security diễn ra từ phase 0–2, không để cuối mới phát hiện. Có thể release preview sau phase 2 nếu ghi rõ chưa có AVD CRUD/công cụ phase 3–4. Chưa gắn số version hay lịch ngày trước khi có benchmark và test trên OS đích.
|
|
306
|
+
|
|
307
|
+
## 10. Ngân sách hiệu năng và cách đo
|
|
308
|
+
|
|
309
|
+
Đây là **mục tiêu nghiệm thu đề xuất**, chưa phải số đo đã đạt:
|
|
310
|
+
|
|
311
|
+
| Chỉ số | Mục tiêu ban đầu |
|
|
312
|
+
|---|---|
|
|
313
|
+
| Chất lượng chuẩn | 720p-equivalent, 30 fps khi màn hình chuyển động; bitrate mục tiêu 2–6 Mbps |
|
|
314
|
+
| LAN input-to-visible | p95 ≤150 ms trên host/reference client đủ tài nguyên |
|
|
315
|
+
| Tunnel input-to-visible | p95 ≤300 ms với RTT ≤100 ms, downstream ≥10 Mbps; báo điều kiện mạng khi đo |
|
|
316
|
+
| Thời gian first frame | ≤3 giây từ khi emulator đã sẵn sàng, không gồm cold boot |
|
|
317
|
+
| Encoder backlog | ≤2 raw frames; encode/decode/network queues đều có hard cap |
|
|
318
|
+
| PPM + encoder overhead | Mục tiêu ≤1 CPU core bình quân, ≤250 MiB RSS tăng thêm/device ở profile chuẩn; không tính emulator |
|
|
319
|
+
| Idle/ẩn | Dừng feed/encoder sau grace ≤5 giây khi không còn viewer; emulator vẫn chạy |
|
|
320
|
+
| Reconnect | ≤5 giây sau mạng phục hồi trong test, nonce mới/keyframe mới, không input cũ |
|
|
321
|
+
| Soak | 60 phút có rotate/reconnect; không tăng RAM đều, không rò encoder/gRPC/touch |
|
|
322
|
+
|
|
323
|
+
Đo click-to-visible bằng test app đổi màu khi nhận touch, quay/timestamp trên cùng browser clock; không trừ trực tiếp clock host và client chưa đồng bộ. Ghi cấu hình host/GPU/guest/browser và thông số mạng. Nếu ngân sách không đạt thì hạ profile hoặc đổi media theo ADR; không gọi số mục tiêu là benchmark.
|
|
324
|
+
|
|
325
|
+
## 11. Ma trận kiểm thử và Definition of Done
|
|
326
|
+
|
|
327
|
+
Unit/contract: parser SDK/discovery và stale PID, identity, argv/path validation, protocol packet bounds, codec generation, geometry tại 0/90/180/270°, DPR/letterbox, pointer/key cancellation, IME composition, lease expiry/nonce replay.
|
|
328
|
+
|
|
329
|
+
Integration: fake SDK processes + gRPC fixture có auth, timeout và disconnect; HTTP/WS thực qua route registration; lỗi giữa lúc auth/start/rotate, start hai lần, logout, đổi token, stop nhầm generation, thiếu quyền host. Hai thiết bị chạy đồng thời không tranh session; feature không ảnh hưởng Remote Desktop.
|
|
330
|
+
|
|
331
|
+
E2E bắt buộc với emulator thật và **bundle đã build/serve trên instance riêng**:
|
|
332
|
+
|
|
333
|
+
1. SDK có sẵn → list AVD → Start → boot progress → Open có hình.
|
|
334
|
+
2. Tap/long press/swipe/drag; hai ngón pinch; Home/Back/Recent/Power/Volume hoạt động.
|
|
335
|
+
3. Gõ `Tiếng Việt`, emoji **qua đường clipboard** (Phase 0 chứng minh `sendKey.text` không mang được); ASCII qua `key`; Enter/Backspace; bàn phím mobile không gõ đôi/mất composition.
|
|
336
|
+
4. Rotate liên tục trong khi kéo, resize/fit/100%; chạm vẫn đúng vị trí, không stuck touch.
|
|
337
|
+
5. Chuyển tab ẩn/hiện, pop-out/PiP/return; không double stream hoặc mất ownership.
|
|
338
|
+
6. Mất mạng 30 giây rồi reconnect; input được release, không replay click; máy vẫn chạy.
|
|
339
|
+
7. Client thứ hai nhận thông báo đang dùng; Take control thu hồi client cũ và input cũ.
|
|
340
|
+
8. Hai AVD khác nhau và Remote Desktop không đá nhau; vượt limit có lỗi rõ ràng.
|
|
341
|
+
9. Refresh/restore workspace không boot hoặc tự giành control; emulator đã chạy có thể reconnect.
|
|
342
|
+
10. Install APK đúng máy; screenshot đúng khung Android; Logcat có cap/cleanup.
|
|
343
|
+
11. Stop máy PPM sở hữu; máy Studio chỉ Disconnect; stale PID/AVD lock không gây kill sai.
|
|
344
|
+
12. Wipe/Delete task-test AVD có xác nhận và đúng target; Cold boot/Quick boot không mất dữ liệu ngoài hành động wipe.
|
|
345
|
+
|
|
346
|
+
Release checklist: cold browser origin tránh cache cũ; kiểm tra hash/timestamp served bundle; full asset pipeline gồm Monaco/precompress; isolated `PPM_HOME` và port đã kiểm tra không trùng. Không stop `ppm.service` từ session này để build. Nếu suite tổng treo theo baseline đã biết, báo rõ và chạy từng file liên quan, không tuyên bố full suite pass.
|
|
347
|
+
|
|
348
|
+
## 12. Những việc cần chốt bằng thử nghiệm
|
|
349
|
+
|
|
350
|
+
- Bun gRPC + compiled binary có hoạt động ổn với auth/stream cancellation không?
|
|
351
|
+
- RGB→H.264 có đạt ngân sách trên Linux/Windows/macOS, hay nên chọn scrcpy media?
|
|
352
|
+
- Phiên bản emulator tối thiểu, flags headless/hidden, discovery layout và auth modes nào được hỗ trợ chính thức?
|
|
353
|
+
- Unicode/text injection thực tế của gRPC trên các guest image; cơ chế nào cần cho mobile IME?
|
|
354
|
+
- Process lifecycle qua PPM restart/service shutdown ở từng OS giữ emulator như thiết kế được không?
|
|
355
|
+
- Chọn máy Windows/macOS và thiết bị browser thật để chạy ma trận; máy hiện tại chỉ chứng minh prerequisites Linux.
|
|
356
|
+
|
|
357
|
+
Các câu hỏi này không chặn việc lập plan. Chúng là deliverable của spike/validation; không âm thầm coi giả định là chức năng đã có.
|
|
358
|
+
|
|
359
|
+
## Nguồn tham khảo
|
|
360
|
+
|
|
361
|
+
- **S1 — Studio controller (pinned revision):** https://android.googlesource.com/platform/tools/adt/idea/+/2aa920453118ffa8cd6b2996ca95e4e7187d01c2/streaming/src/com/android/tools/idea/streaming/emulator/EmulatorController.kt
|
|
362
|
+
- **S2 — Studio view (cùng revision; đọc raw Gitiles):** https://android.googlesource.com/platform/tools/adt/idea/+/2aa920453118ffa8cd6b2996ca95e4e7187d01c2/streaming/src/com/android/tools/idea/streaming/emulator/EmulatorView.kt
|
|
363
|
+
- **S3 — Emulator controller schema:** https://android.googlesource.com/platform/tools/base/+/refs/heads/mirror-goog-studio-main/emulator/proto/emulator_controller.proto ; đối chiếu file SDK cục bộ 36.5.10 ở `emulator/lib/emulator_controller.proto`.
|
|
364
|
+
- **S4 — Device Manager / AVD:** https://developer.android.com/studio/run/managing-avds
|
|
365
|
+
- **S5 — Emulator CLI:** https://developer.android.com/studio/run/emulator-commandline
|
|
366
|
+
- **S6 — Google browser/WebRTC demo:** https://github.com/google/android-emulator-container-scripts/blob/master/gateway/DEMO.md ; đối chiếu `emulator/lib/rtc_service_v2.proto` cục bộ, có cảnh báo experimental.
|
|
367
|
+
- **S7 — Scrcpy architecture/protocol:** https://github.com/Genymobile/scrcpy/blob/master/doc/develop.md
|
|
368
|
+
- **S8 — Emulator gRPC/authentication:** https://android.googlesource.com/platform/external/qemu/+/686efa16baf59d776cadc3f975d12570fe44bbb9/android/android-grpc/docs/
|
|
369
|
+
- **S9 — gRPC Node API (không phải chứng nhận Bun compatibility):** https://grpc.io/docs/languages/node/basics/
|
|
370
|
+
- **S10 — Cloudflare WebSocket support:** https://developers.cloudflare.com/network/websockets/
|
|
371
|
+
- **S11 — Browser VideoDecoder:** https://developer.mozilla.org/en-US/docs/Web/API/VideoDecoder
|
|
372
|
+
- **S12 — sdkmanager:** https://developer.android.com/tools/sdkmanager
|
|
373
|
+
- **S13 — avdmanager:** https://developer.android.com/tools/avdmanager
|
|
374
|
+
- **S14 — Host acceleration:** https://developer.android.com/studio/run/emulator-acceleration
|
|
375
|
+
|
|
376
|
+
Nguồn branch/master là tài liệu động, chỉ dùng để nghiên cứu. Khi triển khai phải pin revision/hash dependency và giữ notices tương ứng. Kế hoạch không sao chép nguyên implementation Studio và không bundle SDK/system images vào PPM.
|
|
@@ -19,7 +19,7 @@ the loop seeded from the bus (windowed + rolling summary).
|
|
|
19
19
|
| **TagService** | Session tagging CRUD, bulk operations, tag-session enrichment | seedDefaultTags, getTagsByProject, createTag, updateTag, deleteTag, setSessionTag, bulkSetSessionTag, getSessionTags, getTagSessionCounts |
|
|
20
20
|
| **DraftService** | Chat draft auto-save per session, 50KB cap | get, upsert, delete, deleteOrphaned |
|
|
21
21
|
| **FileFilterService** | Glob pattern matching + precedence-enforced filtering (hardcoded ⊂ global ⊂ project) | mergeFilters, isPathIgnored, matchesPattern |
|
|
22
|
-
| **SystemMetricsService** (`src/services/system-metrics/`) | Whole-machine Task Manager backend: CPU per core + RAM
|
|
22
|
+
| **SystemMetricsService** (`src/services/system-metrics/`) | Whole-machine Task Manager backend: CPU per core + RAM (`/proc` on Linux, `host_statistics64` on macOS, `node:os` elsewhere), disk/net/GPU + all processes via per-OS collectors (Linux `/proc`/`/sys`; macOS the kernel over `bun:ffi` — `host_statistics64`, `proc_pid_rusage`, SMC, IOReport, CoreWLAN — plus `ps` and one memoised `ioreg`/`netstat`/`ifconfig` read per tick; Windows one long-lived PowerShell REPL child, `Win32_Process` + `PerfRawData` per 2 s tick), delta-based CPU%, grouping by app root, aggregate-only 30-min history. Two SSE tiers on `/api/system/resources/stream`: `light` (status bar, no children spawned) and `full` (`?processes=1`, demand-gated collectors, 60 s teardown). Subscriber lease (sid + 10 s ping, 30 s expiry) because Cloudflare tunnel never propagates client disconnects. Guarded `POST /resources/kill`: protected set (PPM server/supervisor/edge/cloudflared, OS-critical names), ancestor/tree-intersection rule, `startedAt` identity re-query → 409, JSON + `X-PPM-Request` header. | subscribe, unsubscribe, ping, getLatest, kill, reapExpired |
|
|
23
23
|
|
|
24
24
|
**Key Files:** `src/services/*.service.ts`, `src/services/tag.service.ts`, `src/services/ppmbot/*.ts`, `src/services/bash-output-spy.ts`, `src/services/system-metrics/system-metrics.service.ts`, `src/services/system-metrics/kill-guard.ts`, `src/services/system-metrics/powershell-session.ts`, `src/services/redact-secrets.ts`, `src/services/file-filter.service.ts`, `src/cli/commands/bot-cmd.ts`
|
|
25
25
|
|
|
@@ -4,8 +4,9 @@ Two rules adopted on 2026-09-11, borrowed from DeepSeek Harness: **Everything is
|
|
|
4
4
|
run is traceable.** PPM is a platform that embeds things around an AI agent — the IDE is one of
|
|
5
5
|
those things, not the product.
|
|
6
6
|
|
|
7
|
-
**Status:
|
|
8
|
-
|
|
7
|
+
**Status (2026-09-25): Rule 1's trace is built** — `src/services/session-trace/` and
|
|
8
|
+
`src/web/lib/trace-client.ts`; where the build departs from the design is listed under *As built*.
|
|
9
|
+
**Rule 2 is still design only**; it exists so that work starts from a decision instead of a guess.
|
|
9
10
|
|
|
10
11
|
Rewriting the backend in Go was considered and rejected on the same day — see `docs/lessons-learned.md`.
|
|
11
12
|
|
|
@@ -160,11 +161,12 @@ real question too, and it keeps one `seq` space per key.
|
|
|
160
161
|
"All of the browser's logs" is read as: `console.error` and `console.warn` are sent; `console.log`
|
|
161
162
|
and `info` go into a **50-entry ring buffer** that rides along as breadcrumbs on the next error. That
|
|
162
163
|
is what a failure needs — the lines just before it — without paying for logging while nothing is
|
|
163
|
-
wrong.
|
|
164
|
+
wrong. (Reversed when built: every level is sent — see *As built*.)
|
|
164
165
|
|
|
165
166
|
Ingest is one route — `POST /api/trace` — taking a small batch. It sits behind `authMiddleware` like
|
|
166
|
-
the rest of `/api/*` (`index.ts:177`), so an error raised while logged out is lost; accepted.
|
|
167
|
-
things it needs, none
|
|
167
|
+
the rest of `/api/*` (`index.ts:177`), so an error raised while logged out is lost; accepted. (As
|
|
168
|
+
built, the client holds such rows until a sign-in — see *As built*.) Three things it needs, none
|
|
169
|
+
optional:
|
|
168
170
|
|
|
169
171
|
- **A cap and a schema check.** Batch ≤ 50, payload ≤ 16 KB each; treat the body as hostile and drop
|
|
170
172
|
what does not fit.
|
|
@@ -178,8 +180,9 @@ Client side, `root-error-boundary.tsx:87` and `chunk-recovery.ts` already know s
|
|
|
178
180
|
`main.tsx`** so it lives in the boot shell — in a lazy chunk it could not report the one failure that
|
|
179
181
|
matters most, a missing chunk. The case where the entry never runs at all (`__ppmEntryRan` false)
|
|
180
182
|
gets a bundle-free beacon in `index.html`'s inline watchdog, reading the Bearer token from
|
|
181
|
-
`localStorage["ppm-auth-token"]`. Buffer locally and flush with `
|
|
182
|
-
|
|
183
|
+
`localStorage["ppm-auth-token"]`. Buffer locally and flush with `keepalive` on `pagehide`, because
|
|
184
|
+
the common case for a fatal client error is that the network is also what broke. (Not `sendBeacon`:
|
|
185
|
+
it cannot carry the `Authorization` header.)
|
|
183
186
|
|
|
184
187
|
### Retention
|
|
185
188
|
|
|
@@ -194,6 +197,44 @@ sessions that predate the log or were created outside PPM. That is the point whe
|
|
|
194
197
|
tax gets repaid: cross-provider history stops depending on `getFullMessages` being implemented
|
|
195
198
|
(only Claude implements it today, so the search index is better for one provider than the others).
|
|
196
199
|
|
|
200
|
+
### As built (2026-09-25)
|
|
201
|
+
|
|
202
|
+
What differs from the design above, and why:
|
|
203
|
+
|
|
204
|
+
- **Every console level is sent**, at the user's request: batched (errors within 1 s, the rest
|
|
205
|
+
within 5 s), capped at 300 entries a minute per tab, then one `console_dropped{count}`. Each
|
|
206
|
+
error-level entry still carries the 50 lines before it as breadcrumbs.
|
|
207
|
+
- **Logged out is held, not lost.** A 401 leaves the queue in place and nothing is sent again until
|
|
208
|
+
the stored token changes — a storage read every 5 s, no request — so a fresh device's login screen
|
|
209
|
+
is not the one page that cannot be debugged. Rows still only reach the server authenticated. The
|
|
210
|
+
watchdog beacon cannot do this: when the entry never ran there is no code left to retry with.
|
|
211
|
+
- **`trace_aliases`** maps an id a provider migrated to (`session_migrated`) back to the trace the
|
|
212
|
+
run started under, so a follow-up, an abort or a browser row filed under the new id joins it.
|
|
213
|
+
- **`context_added`** records the shared provider context PPM prefixes to a message (or hands to a
|
|
214
|
+
provider that places it), in full — at most 12 000 characters, and only when it changed. Found in
|
|
215
|
+
verification: a mock asked approval for `rm -rf` because the word "remove" was in
|
|
216
|
+
`~/.claude/CLAUDE.md`, text the trace had not recorded. Design instructions are not recorded; they
|
|
217
|
+
are rebuilt from the stored slug.
|
|
218
|
+
- **A bare system signal is counted on the block it arrives in.** The Claude SDK sends a data-less
|
|
219
|
+
`system/thinking_tokens` between every two thinking deltas; treated as events, they split each
|
|
220
|
+
thinking block into a row per delta — 84 of one real turn's 92 rows. Inside a text or thinking
|
|
221
|
+
block such a signal now becomes `signals: {thinking_tokens: N}` on the block's row; outside one it
|
|
222
|
+
is still a row of its own.
|
|
223
|
+
- **`run_closed` only for an unanswered turn.** Every caller but the WebSocket stops reading at
|
|
224
|
+
`done`, so that is how a run normally ends and it gets no row. `consumer_closed` and `no_done` are
|
|
225
|
+
written only when a turn, or a follow-up queued behind it, never got its `done`.
|
|
226
|
+
- **The API proxy** (`proxy-agent-turn.ts`) does not go through `ChatService`, so its stream is
|
|
227
|
+
wrapped in `traceStream` with origin `proxy`.
|
|
228
|
+
- **Reading without sqlite:** `GET /api/trace/sessions/:id` returns a session's merged timeline —
|
|
229
|
+
its rows plus every browser row whose `ref_id` is one of its ids.
|
|
230
|
+
- **Measured:** 50 mock turns against a clean HEAD and the traced build, alternating: `/api/health`
|
|
231
|
+
p50 0.85–0.94 ms and p99 4.4–5.0 ms on both, no event-loop stall on either. A synthetic heavy
|
|
232
|
+
stream (76 010 events → 6 040 rows) cost 49.7 ms in all, 0.57 µs per event; the worst single call
|
|
233
|
+
was the end-of-turn write at 3.75 ms.
|
|
234
|
+
- **Not in the trace yet:** events of nested subagents (never streamed — see `CLAUDE.md`) and
|
|
235
|
+
background `bash_output`. The older `session_logs` / `logSessionEvent` still exists and could be
|
|
236
|
+
retired in favour of this log.
|
|
237
|
+
|
|
197
238
|
---
|
|
198
239
|
|
|
199
240
|
## Rule 2 — Everything is a plugin
|
|
@@ -263,20 +263,25 @@ A link may name one place in the file — `app.ts:120`, `app.ts:120-140`, `app.t
|
|
|
263
263
|
|
|
264
264
|
## Design mode
|
|
265
265
|
|
|
266
|
-
A **Design tab** puts a design chat beside a live, sandboxed canvas of what the agent builds: a page or a slide deck (`kind` `page` or `slides`), made of plain HTML/CSS files the user can export or
|
|
266
|
+
A **Design tab** puts a design chat beside a live, sandboxed canvas of what the agent builds: a page or a slide deck (`kind` `page` or `slides`), made of plain HTML/CSS files the user can export or build in real code from a new chat. It opens from the sidebar's Designs section, the palette's "New Design…" (the dialog is hosted by `command-palette-design-commands.tsx`, since the palette is mounted on every layout) or the deep link `/project/<p>/design/<slug>`. The layout follows the tab's own width, not the viewport (`lib/design/design-layout-mode.ts`): a draggable chat/canvas split at 940px and up, one pane below 860px (the previous layout holds in between, so dragging a panel divider does not flicker), switched by a Canvas | Chat toggle in the toolbar. The toolbar's Layout menu pins Auto / Split / Canvas only / Chat only per device (`design-view-prefs.ts`), and Expand canvas lifts the canvas over the whole window (Esc or Exit full view to leave). Below `md` it is always one pane with a Canvas / Chat / More bar in the thumb zone. Every one of these is the same tree (`design-split-layout.tsx`) restyled by CSS, because moving the iframe reloads the design and unmounting the chat drops its socket; the one reload left is PPM's shell moving the whole tab into its mobile slot when the viewport crosses `md`. UI in `src/web/components/design/`, one tab per design, never popped out (`NON_POPPABLE_TAB_TYPES`: the bridge accepts messages only from an iframe whose parent is the main window).
|
|
267
267
|
|
|
268
268
|
**Storage** (`src/services/design/`, REST under `/api/project/:name/designs`, `src/server/routes/designs.ts` plus one sub-router per feature):
|
|
269
269
|
- `designs/<slug>/` is the design: `index.html` (the entry), `design.json` (`title`, `kind`, `entry`, timestamps and the agent's `tweaks[]`; unknown fields are carried through) and whatever else the agent writes.
|
|
270
|
-
- `designs/DESIGN.md` and `designs/tokens.css` are the
|
|
270
|
+
- `designs/DESIGN.md` and `designs/tokens.css` are the *default app's* design system (every project has one, implicitly, at the project root) shared by every design that belongs to it — a page links `../tokens.css` and `../systems/default/kit/app.css`. `DESIGN.md`'s `## Screens and components` section maps each screen to the source files that build it, so a design session can read them and reproduce a screen faithfully.
|
|
271
|
+
- **Declared apps** (`design-systems.service.ts`, `design-systems-paths.ts`, REST `/api/project/:name/designs/systems`, mounted before `/:slug` since `systems` is a reserved slug): a monorepo or a container folder (Nxsys's `payroll-fe`, `umbrella-fe`…) can have more than one UI app, each with its own design system. An app is `designs/systems/<id>/system.json` (`label`, `root` relative to the project, `platform: "web" | "mobile"`, server-recorded `builtFrom`); its `DESIGN.md`/`tokens.css`/`kit/` live in that same folder — except `default`, whose files stay at the legacy `designs/` root and are never moved. Settings → Design's "Apps in this project" (`design-apps-settings-section.tsx`) declares, edits and removes them (no auto-detection); a design's `design.json` carries `system: "<id>"` (absent = `default`).
|
|
272
|
+
- **Showcase and automatic setup.** Each app has a showcase design at the fixed slug `system-<id>` (manifest `showcaseFor`), listed in the sidebar's own "Design systems" group (`design-systems-sidebar-group.tsx`) instead of the ordinary Designs list. Most users do not know what a design system is, so nothing asks them: the first design turn of any kind for an app whose `DESIGN.md` does not exist yet carries an extra instructions block (`design-instructions-auto-setup-block.ts`, embedding `buildDesignSystemInitPrompt`'s own text so the two cannot drift) that tells the agent to notify the user in one line, set the system up itself — `designs/systems/<id>/` and the showcase's `designs/system-<id>/index.html` are explicitly writable for that one turn, the only exception to "Where to work" — then build what was actually asked for. `chatService.resolveDesignOptions` gets the showcase design's own folder and manifest ready first (`ensureShowcaseDesign`), so the agent only ever has to write its `index.html`. The canvas More menu's "Set up design system" still gets or creates that showcase and auto-sends the brief as an ordinary chat message, for a manual re-run (the stale "Refresh" flow); a tab that has not mounted its composer yet is retried for up to 2 s before falling back to a plain prefill. `builtFrom` (`git rev-parse HEAD` of the app's root) is recorded server-side, via the same debounced hook as the turn snapshot (`design-turn-snapshot.ts` → `recordBuiltFromAfterDesignTurn`): unconditionally after a showcase session's turn (what the manual re-run relies on to clear "may be outdated"), or, for an ordinary design, only the one turn that leaves `DESIGN.md` in place while `builtFrom` was still absent — never on a later, unrelated edit.
|
|
273
|
+
- **Stale reminder** (`design-systems-stale.ts`, cached per (root, HEAD)): comparing `builtFrom.commit..HEAD` restricted to the app root, a theme/style-config file changed (`tailwind.config.*`, `postcss.config.*`, anything named or pathed like theme/tokens/variables, a `styles/`/`theme/` `.scss`/`.less` partial) or at least 20 changed UI files makes it stale ("may be outdated (N UI files changed)"); no repo, no `builtFrom`, or a timed-out `git diff` is "unknown", shown as "built <date>", never as stale.
|
|
271
274
|
- `designs/<slug>/.design/` is the canvas's own data and is never part of the design: its `.gitignore` is `*`, the file watcher skips it (`file-watcher/ignore-rules.ts`), the preview route never serves it. `history/<id>/{meta.json,files/}` holds snapshots (`turn`, `pre-restore`, `before-edit`, `manual`; 100 protected + 30 `before-edit` kept, tree-hash dedupe, a design over 50 MB or 5000 files is skipped), `comments.json` the pinned comments. Because nothing there is watched, History and Comments refresh on `design:history_changed` / `design:comments_changed` from `/ws/global` (`design-events.ts`).
|
|
272
275
|
- Restore snapshots the current state first and swaps through a journal (`design-restore-journal.ts`), so a crash mid-restore is finished from the staged copy on the next access rather than leaving half a design.
|
|
273
276
|
- Every tree operation goes through `design-safe-walk.ts` (no symlinks, no FIFOs, no credential paths, depth and size caps).
|
|
274
277
|
|
|
275
278
|
**The design session** is an ordinary chat session whose `session_metadata.design_slug` is fixed at creation (`POST /chat/sessions` with `designSlug`, accepted only on a provider with `supportsDesignInstructions` — Claude and Codex). `chatService.prepareSendOptions` rebuilds the instruction block from the stored slug on every turn, whoever sends it (WebSocket, `ppm chat send`, scheduler, bots): Claude gets it appended to the `claude_code` preset, Codex as `developerInstructions` (`design-instructions.ts`). The permission mode defaults exactly as for a new chat (the provider's configured default, normally `bypassPermissions`), because a design agent reads and searches the project constantly and a stricter default asked on every file. A user who picks `acceptEdits` for a design session gets the tighter design policy: project file reads and writes are approved, shell and every other tool ask (`design-tool-policy.ts` for Claude, `workspace-write` + `untrusted` for Codex). Every `done`, and every terminal background task, schedules a `turn` snapshot 2 s later (`design-turn-snapshot.ts`). The tab keeps the session in design mode: a fork is swapped in place, `/clear` starts the next session in the same tab, the embedded history lists only this design's sessions, and opening a design session from anywhere focuses its design tab (`openSessionInItsTab`, `tabSessionId()` in `src/web/lib/tab-session-id.ts`).
|
|
276
279
|
|
|
280
|
+
**The user's design instructions** (Settings → Design, `design-settings-section.tsx`; `GET/PUT /api/settings/design`, `src/server/routes/design-settings.ts`) are one global text (config row `design.instructions`, 8 KB UTF-8 cap, `design-settings.service.ts`). `design-user-section.ts` appends them after PPM's block, quoted in a `<user_design_instructions>` block under a statement that PPM's rules win. `/name` and `$name` mentions (`src/shared/design-skill-mentions.ts`) are resolved per session against the skills that provider can load (`design-skill-sources.ts`: Claude's slash discovery for the project narrowed to `.claude`, `CLAUDE_CONFIG_DIR` and plugins, since the Skill tool cannot run a `.codex`/`.ppm` skill the composer also lists; Codex's `skills/list` for the session's cwd and account): Claude is told to invoke the canonical name with the Skill tool, Codex to use `$name` (Codex's own mention syntax, the same rewrite `provider-skill-sigil.ts` does in chat). A name found nowhere is "not a skill, read it as text", any mention adds the ask-before-installing rule, and an unreadable list (an empty codex answer counts) marks the names unchecked; listing has a 5 s timeout and a 60 s back-off after a failure so a broken codex cannot spawn an app-server per turn. The editor reuses the composer's `SlashCommandPicker` and `slash-trigger.ts`. When nothing named resolves and no `ui-ux-pro-max` is installed, the pane (and a hint in New Design) shows the upstream install commands (`design-skill-suggestion.ts`); PPM never installs a skill. Claude snapshots its system prompt at a session's first request and Codex reads developer instructions on connect, so a change reaches new design chats; the section is cached per session and text. e2e `tests/e2e/design-settings-e2e.mjs`.
|
|
281
|
+
|
|
277
282
|
**The canvas** (`src/server/routes/design-preview.ts`):
|
|
278
283
|
- `POST /api/design-preview` (authenticated) mints a token for one design and one purpose. A canvas token lives 30 min idle and 8 h at most, and is extended only by authenticated refreshes; within the last hour a refresh rotates it. Print and standalone tokens last 10 min and cannot be refreshed. Unauthenticated content reads never extend a token (`design-preview-tokens.ts`).
|
|
279
|
-
- `/api/design-preview/content/<token>/<slug>/…` is mounted before auth and serves `designs/<slug>/**` plus
|
|
284
|
+
- `/api/design-preview/content/<token>/<slug>/…` is mounted before auth and serves `designs/<slug>/**` plus two read-only aliases, `../tokens.css` and `../systems/<id>/**` (an app's folder; `default` remaps to the legacy `designs/` root), nothing else (`preview/design-preview-scope.ts`). ACAO is `null`, which answers the sandboxed document's `Origin: null` and nobody else.
|
|
280
285
|
- `buildDesignCsp` (`preview/design-csp.ts`): `sandbox allow-scripts` (with `allow-modals` for the print view only), inline scripts and `'unsafe-eval'`, the CDN hosts in `src/shared/design-cdn-hosts.ts` for scripts, styles, fonts and images, and `connect-src` limited to the design's own files. Accepted residuals: jsdelivr and unpkg execute any npm/GitHub code, and a design script can still navigate its own frame; there is no shell `frame-src`, so the bridge's link guard and the 3 s liveness check are what catch it.
|
|
281
286
|
- The HTML is instrumented with parse5 (`preview/html-instrument.ts`): every source element gets `data-ppm-id`, its start-tag offset in the BOM-less text, valid only for that file's `gen` (16 hex chars of SHA-256; linked stylesheets report theirs in `cssGens`). The bridge script is the first thing in `<head>`.
|
|
282
287
|
- A dead token serves the expired page (`preview/expired-page.ts`), which posts `expired`; the canvas re-mints and reloads.
|
|
@@ -289,24 +294,29 @@ A **Design tab** puts a design chat beside a live, sandboxed canvas of what the
|
|
|
289
294
|
|
|
290
295
|
**Write-backs:**
|
|
291
296
|
- *Comments.* An anchor is `ppmId` + tag + text quote with prefix/suffix + a CSS path. It is re-resolved on every `ready` (same tag only, 0.55 similarity threshold, orphaned rather than guessed) and re-checked against the source by the server. The element context in a prompt is a snippet the server slices from the source (`design-comment-element-context.ts`), fenced as untrusted (`design-comments-prompt.ts`). "Send to AI" shows the whole message first and only fills the design chat's composer.
|
|
292
|
-
- *Tweaks.* `design.json` declares controls bound to CSS custom properties. Moving one restyles the frame live; Apply patches the last winning declaration in the design's own `:root` or appends a `:root` block (`source/tweak-patch-plan.ts`). A value in `../tokens.css
|
|
297
|
+
- *Tweaks.* `design.json` declares controls bound to CSS custom properties. Moving one restyles the frame live; Apply patches the last winning declaration in the design's own `:root` or appends a `:root` block (`source/tweak-patch-plan.ts`). A value set last in `../tokens.css` or `../systems/<id>/**` (both read-only), inside an at-rule or behind `!important` is refused, and values pass an allowlist, not a denylist.
|
|
293
298
|
- *Move and resize.* The frame's `transform-commit` is a proposal. The parent writes it only with Move on, the chat idle, its own target, the current `ready` gen and `navigator.userActivation.isActive` (`src/web/lib/design/design-transform-proposal.ts`). The server re-checks the gen (409 `stale`) and the tag at the offset (409 `element-moved`), rate-limits (1 per 500 ms, 30 per minute), snapshots `before-edit` and writes only `translate`/`width`/`height` px into that element's `style` attribute.
|
|
294
299
|
- *Undo* reverses the exact spans a canvas write replaced, with 32 characters of context on each side, so later AI edits elsewhere survive. The journal is in memory (50 writes per design, lost on restart); `cannot-undo` points to History (`design-edit-undo-journal.ts`).
|
|
295
300
|
|
|
301
|
+
**Asking first, and variants.** The instructions tell the agent to ask at most 3 short questions, in one go, before the first build when the request leaves purpose, audience, content, style, page vs deck or the number of variants open (Claude with `AskUserQuestion`, Codex in a plain message), and never for edits or when told to just build. A design holds up to 5 variants: `index.html` is variant 1, `variant-2.html`… sit beside it, and `design.json` lists them as `variants: [{ file, label }]`.
|
|
302
|
+
- `src/shared/design-variants.ts` parses that list tolerantly (flat `*.html` names only, deduped case-insensitively, entry forced first, capped at 5, labels 40 chars); `design-variants-resolve.ts` also drops files that do not exist yet. The summary carries `variants` and `variantWarnings` (shown in the canvas issues badge). A top-level page other than the entry appearing refetches the summary (`mayChangeVariants`), since an agent writes the manifest before the pages.
|
|
303
|
+
- The switcher (`variants/`) is a toolbar menu on desktop and a More-sheet section on phones, shown from 2 variants; the choice is per design per device (`design-view-prefs.ts`) and falls back to the entry when the file leaves the list. Switching re-points the canvas through the token *refresh* (`retarget` in `use-design-preview-url.ts`), which keeps the token; `POST /api/design-preview` takes `entry`, which must be a listed variant. Comments, tweaks, move/resize and checks already key on the `ready` file; the print/standalone views, the single-HTML export and the "Build in new chat" brief use the variant on screen (the ZIP is the whole folder), and the automatic check says how many variants went unchecked.
|
|
304
|
+
- Keeping or dropping a variant is done by the agent in the design chat, not from the canvas (there is no "Use this variant" button): the instructions tell it to make the kept file `index.html`, delete the dropped ones and update `variants` in `design.json` (or leave the field out for a single variant). The turn snapshot already covers what it deletes, so it is recoverable from Version history.
|
|
305
|
+
|
|
296
306
|
**Exports** (`src/server/routes/design-export.ts`, `src/services/design/export/`, client `src/web/components/design/export/`):
|
|
297
|
-
- ZIP: the design folder plus `DESIGN.md`/`tokens.css`, no dotfiles
|
|
298
|
-
- Standalone HTML: local CSS, images, fonts and scripts inlined as data URLs within per-asset and total budgets. Whatever stays linked is listed (`X-PPM-Export-Warning-List`).
|
|
307
|
+
- ZIP: the design folder plus `DESIGN.md`/`tokens.css`, and each app the design's own files reference via `../systems/<id>/` (re-rooted to `systems/<id>/**` in the zip; for `default` that means copying its legacy root files under `systems/default/`, since a static zip has no server-side alias to remap them), no dotfiles, `.design/` or `system.json`, capped at 5000 files / 512 MB.
|
|
308
|
+
- Standalone HTML: local CSS, images, fonts and scripts inlined as data URLs within per-asset and total budgets, `../systems/<id>/**` assets included the same way as `../tokens.css`. Whatever stays linked is listed (`X-PPM-Export-Warning-List`).
|
|
299
309
|
- PDF: the print view is a print-purpose token with `@page` rules and one page per `section.slide`, opened by a real `rel="noopener noreferrer"` link. Fidelity is the browser's own print engine.
|
|
300
310
|
- PPTX: the bridge measures the laid-out slides (`bridge-extract-slides.ts`), `pptx-slide-mapper.ts` turns them into native text boxes, shapes and images, and `pptxgenjs` runs in a lazy chunk (`pptx-export.ts`). Gradients and shadows are approximated and images the canvas cannot read are skipped; each one is listed after the save, with the fonts PowerPoint needs.
|
|
301
311
|
- Every download Blob is `application/octet-stream` (`design-export-client.ts`).
|
|
302
|
-
- *Hand off to code
|
|
312
|
+
- *Build in new chat* (a toolbar bar button, replacing "Hand off to code") opens a new, ordinary chat with an editable brief (`design-handoff-prompt.ts`, treats everything under `designs/` as untrusted reference material) and a screenshot of the variant on screen attached as an image — the same self-check screenshot `design_check` uses (`runCanvasCheck`), fed into the new tab's composer through its own drop path (`pendingAttachmentDataUrl` tab metadata → `externalFiles`). A capture failure still opens the chat, just without the image, and says so in a toast. Export stays for building on another machine.
|
|
303
313
|
|
|
304
314
|
**Canvas self-check.** The agent runs on the server and never sees the canvas, so the frame measures itself (`bridge-layout-grid.ts`, `bridge-layout-boxes.ts`): grid items auto-placed into implicit tracks (found with an absolutely positioned `1 / -1` probe, whose box is the explicit grid), sideways page overflow, elements running off the viewport, text cut off by an `overflow: hidden` ancestor, content squeezed under 4 px, and overlapping in-flow siblings; the parent adds the runtime issues it collected and the device frame. At most 30 findings of 300 characters, validated again by the parent and the server (`src/shared/design-canvas-check.ts`) and fenced as untrusted when an agent reads them.
|
|
305
315
|
- *`design_check` tool.* `/api/design-mcp` is a minimal MCP Streamable HTTP endpoint (JSON responses only) mounted before auth and authorized by a per-session capability token (`design/mcp/`, in memory, stored by SHA-256, bound to session + project + slug, revoked with the session). `chatService` adds it to a design session's options with a URL on the port the server actually bound (`server-listen-address.ts`). Claude gets it as an `http` MCP server with the token in `Authorization` and the tool pre-approved; Codex gets a `mcp_servers.ppm_design` config override on `thread/start`/`thread/resume` with `bearer_token_env_var`, so the token lives only in that app-server's environment. A call emits `design:check_request` on `/ws/global`; the first open canvas POSTs `/designs/:slug/check/:requestId` (authenticated, 768 KB cap) and the tool returns the text plus a JPEG screenshot (≤ 1280 px, ≤ 400 KB) drawn in the frame by `modern-screenshot`, whose source the parent sends in the lazy chunk it lives in. No canvas open means an error after 20 s.
|
|
306
316
|
- *After each turn* (`use-design-auto-check.ts`): when the canvas reloaded during the turn or within 8 s of its end, it is measured once quiet for 700 ms; findings go into the issues badge and, at most twice per user message, back to the agent as a `[Canvas check]` message — sent only into an empty, idle composer, otherwise added as a chip.
|
|
307
317
|
- Real-browser check of the grid rule and the screenshot: `node tests/e2e/design-canvas-check-e2e.mjs` (no PPM server; needs Playwright and Chrome).
|
|
308
318
|
|
|
309
|
-
End to end: `tests/e2e/design-mode-e2e.mjs` (1366 px and 390 px, isolated server, scripted providers).
|
|
319
|
+
End to end: `tests/e2e/design-mode-e2e.mjs` (1366 px and 390 px, isolated server, scripted providers; `PPM_DESIGN_E2E_ONLY=variants` runs the named steps only), including declaring an app, the New Design dialog's app picker (no setup step in it any more), a design's own first turn auto-setting its app's system up and building on it in the same turn, its showcase and stale reminder (`fixtures/design-mode-steps-systems.mjs`); Settings → Design itself is `tests/e2e/design-settings-e2e.mjs`.
|
|
310
320
|
|
|
311
321
|
## Terminal Flow
|
|
312
322
|
|