@hienlh/ppm 0.23.13 → 0.23.15
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 +58 -0
- package/CLAUDE.md +19 -4
- package/THIRD-PARTY-NOTICES.md +1 -1
- package/assets/skills/ppm/SKILL.md +3 -2
- package/assets/skills/ppm/references/cli-reference.md +4 -4
- package/assets/skills/ppm/references/common-tasks.md +6 -0
- package/assets/skills/ppm/references/http-api.md +13 -1
- package/bun.lock +15 -0
- package/dist/web/assets/accounts-settings-section-B5YXy0vd.js +1 -0
- package/dist/web/assets/accounts-settings-section-B5YXy0vd.js.br +0 -0
- package/dist/web/assets/accounts-settings-section-B5YXy0vd.js.gz +0 -0
- package/dist/web/assets/adaptive-context-menu-C4jNSORA.js +1 -0
- package/dist/web/assets/adaptive-context-menu-C4jNSORA.js.br +0 -0
- package/dist/web/assets/adaptive-context-menu-C4jNSORA.js.gz +0 -0
- package/dist/web/assets/agent-session-sheet-Bj42PwCK.js +2 -0
- package/dist/web/assets/agent-session-sheet-Bj42PwCK.js.br +0 -0
- package/dist/web/assets/agent-session-sheet-Bj42PwCK.js.gz +0 -0
- package/dist/web/assets/agent-session-sheet-store-BAfLnsLX.js +1 -0
- package/dist/web/assets/agent-session-window-content-LqL6fVPU.js +1 -0
- package/dist/web/assets/agent-session-window-content-LqL6fVPU.js.br +0 -0
- package/dist/web/assets/agent-session-window-content-LqL6fVPU.js.gz +0 -0
- package/dist/web/assets/ai-resource-editor-jVv2nvAG.js +1 -0
- package/dist/web/assets/ai-resource-editor-jVv2nvAG.js.br +0 -0
- package/dist/web/assets/ai-resource-editor-jVv2nvAG.js.gz +0 -0
- package/dist/web/assets/ai-settings-section-C9Q-v8fY.js +1 -0
- package/dist/web/assets/ai-settings-section-C9Q-v8fY.js.br +0 -0
- package/dist/web/assets/ai-settings-section-C9Q-v8fY.js.gz +0 -0
- package/dist/web/assets/ai-settings-section-CN5BR1ZZ.js +1 -0
- package/dist/web/assets/android-tab-CwqiuEZP.js +2 -0
- package/dist/web/assets/android-tab-CwqiuEZP.js.br +0 -0
- package/dist/web/assets/android-tab-CwqiuEZP.js.gz +0 -0
- package/dist/web/assets/api-client-xQDlhUTu.js +1 -0
- package/dist/web/assets/api-client-xQDlhUTu.js.br +0 -0
- package/dist/web/assets/api-client-xQDlhUTu.js.gz +0 -0
- package/dist/web/assets/api-client-xR05zj6r.js +1 -0
- package/dist/web/assets/api-settings-VAi0LpIJ.js +1 -0
- package/dist/web/assets/api-settings-vmIRFNwZ.js +1 -0
- package/dist/web/assets/api-settings-vmIRFNwZ.js.br +0 -0
- package/dist/web/assets/api-settings-vmIRFNwZ.js.gz +0 -0
- package/dist/web/assets/api-themes-CaXofG7d.js +1 -0
- package/dist/web/assets/appearance-settings-section-D0JIfiRx.js +1 -0
- package/dist/web/assets/appearance-settings-section-D0JIfiRx.js.br +0 -0
- package/dist/web/assets/appearance-settings-section-D0JIfiRx.js.gz +0 -0
- package/dist/web/assets/apps-panel-Cz_KJ37M.js +1 -0
- package/dist/web/assets/apps-panel-Cz_KJ37M.js.br +0 -0
- package/dist/web/assets/apps-panel-Cz_KJ37M.js.gz +0 -0
- package/dist/web/assets/audio-preview-Dq7qZ_6i.js +1 -0
- package/dist/web/assets/audio-preview-Dq7qZ_6i.js.br +0 -0
- package/dist/web/assets/audio-preview-Dq7qZ_6i.js.gz +0 -0
- package/dist/web/assets/branch-review-tab-C3QNpsm7.js +1 -0
- package/dist/web/assets/branch-review-tab-C3QNpsm7.js.br +0 -0
- package/dist/web/assets/branch-review-tab-C3QNpsm7.js.gz +0 -0
- package/dist/web/assets/button-C9ZXWb3b.js +1 -0
- package/dist/web/assets/button-C9ZXWb3b.js.br +0 -0
- package/dist/web/assets/button-C9ZXWb3b.js.gz +0 -0
- package/dist/web/assets/chat-preparation-cache-190LLyy7.js +1 -0
- package/dist/web/assets/chat-preparation-cache-190LLyy7.js.br +0 -0
- package/dist/web/assets/chat-preparation-cache-190LLyy7.js.gz +0 -0
- package/dist/web/assets/chat-tab-D14CUl0J.js +1 -0
- package/dist/web/assets/chat-tab-D14CUl0J.js.br +0 -0
- package/dist/web/assets/chat-tab-D14CUl0J.js.gz +0 -0
- package/dist/web/assets/chat-tab-D8iAVZKV.js +16 -0
- package/dist/web/assets/chat-tab-D8iAVZKV.js.br +0 -0
- package/dist/web/assets/chat-tab-D8iAVZKV.js.gz +0 -0
- package/dist/web/assets/code-editor-B7gbH4-x.js +10 -0
- package/dist/web/assets/code-editor-B7gbH4-x.js.br +0 -0
- package/dist/web/assets/code-editor-B7gbH4-x.js.gz +0 -0
- package/dist/web/assets/codex-reset-credit-button-DQDtyvnd.js +1 -0
- package/dist/web/assets/codex-reset-credit-button-DQDtyvnd.js.br +0 -0
- package/dist/web/assets/codex-reset-credit-button-DQDtyvnd.js.gz +0 -0
- package/dist/web/assets/conflict-editor-ktOkrODA.js +19 -0
- package/dist/web/assets/conflict-editor-ktOkrODA.js.br +0 -0
- package/dist/web/assets/conflict-editor-ktOkrODA.js.gz +0 -0
- package/dist/web/assets/connection-form-tab-CxvExR7T.js +4 -0
- package/dist/web/assets/connection-form-tab-CxvExR7T.js.br +0 -0
- package/dist/web/assets/connection-form-tab-CxvExR7T.js.gz +0 -0
- package/dist/web/assets/context-menu-BCuZYfWC.js +1 -0
- package/dist/web/assets/context-menu-BCuZYfWC.js.br +0 -0
- package/dist/web/assets/context-menu-BCuZYfWC.js.gz +0 -0
- package/dist/web/assets/createLucideIcon-D9_fdOKS.js +1 -0
- package/dist/web/assets/createLucideIcon-D9_fdOKS.js.br +0 -0
- package/dist/web/assets/createLucideIcon-D9_fdOKS.js.gz +0 -0
- package/dist/web/assets/csv-preview-CBDMTEsF.js +10 -0
- package/dist/web/assets/csv-preview-CBDMTEsF.js.br +0 -0
- package/dist/web/assets/csv-preview-CBDMTEsF.js.gz +0 -0
- package/dist/web/assets/database-drivers-section-DJvU6bf5.js +1 -0
- package/dist/web/assets/database-drivers-section-DJvU6bf5.js.br +0 -0
- package/dist/web/assets/database-drivers-section-DJvU6bf5.js.gz +0 -0
- package/dist/web/assets/db-ai-tools-CVbbW_MZ.js +1 -0
- package/dist/web/assets/db-ai-tools-CVbbW_MZ.js.br +0 -0
- package/dist/web/assets/db-ai-tools-CVbbW_MZ.js.gz +0 -0
- package/dist/web/assets/db-explorer-store-BmpvDHz6.js +1 -0
- package/dist/web/assets/db-explorer-store-BmpvDHz6.js.br +0 -0
- package/dist/web/assets/db-explorer-store-BmpvDHz6.js.gz +0 -0
- package/dist/web/assets/db-sidebar-reveal-_qw0CliT.js +1 -0
- package/dist/web/assets/db-sidebar-reveal-_qw0CliT.js.br +0 -0
- package/dist/web/assets/db-sidebar-reveal-_qw0CliT.js.gz +0 -0
- package/dist/web/assets/db-tab-parts-BgVpKbi6.js +1 -0
- package/dist/web/assets/db-tab-parts-BgVpKbi6.js.br +0 -0
- package/dist/web/assets/db-tab-parts-BgVpKbi6.js.gz +0 -0
- package/dist/web/assets/db-types-CNhENouW.js +1 -0
- package/dist/web/assets/design-canvas-check-BIHc2d_k.js +1 -0
- package/dist/web/assets/design-canvas-check-BIHc2d_k.js.br +0 -0
- package/dist/web/assets/design-canvas-check-BIHc2d_k.js.gz +0 -0
- package/dist/web/assets/design-export-client-CJ3w7Zrk.js +1 -0
- package/dist/web/assets/design-export-client-CJ3w7Zrk.js.br +0 -0
- package/dist/web/assets/design-export-client-CJ3w7Zrk.js.gz +0 -0
- package/dist/web/assets/design-responsive-dialog-MAFgVOmv.js +1 -0
- package/dist/web/assets/design-responsive-dialog-MAFgVOmv.js.br +0 -0
- package/dist/web/assets/design-responsive-dialog-MAFgVOmv.js.gz +0 -0
- package/dist/web/assets/design-settings-section-DPGw61pY.js +2 -0
- package/dist/web/assets/design-settings-section-DPGw61pY.js.br +0 -0
- package/dist/web/assets/design-settings-section-DPGw61pY.js.gz +0 -0
- package/dist/web/assets/design-skill-suggestion-Dmmg_ap5.js +3 -0
- package/dist/web/assets/design-skill-suggestion-Dmmg_ap5.js.br +0 -0
- package/dist/web/assets/design-skill-suggestion-Dmmg_ap5.js.gz +0 -0
- package/dist/web/assets/design-tab-BiCqHNl3.js +57 -0
- package/dist/web/assets/design-tab-BiCqHNl3.js.br +0 -0
- package/dist/web/assets/design-tab-BiCqHNl3.js.gz +0 -0
- package/dist/web/assets/designs-sidebar-panel-pcJ2Rx5G.js +1 -0
- package/dist/web/assets/designs-sidebar-panel-pcJ2Rx5G.js.br +0 -0
- package/dist/web/assets/designs-sidebar-panel-pcJ2Rx5G.js.gz +0 -0
- package/dist/web/assets/dialog-Dn_2tuYa.js +1 -0
- package/dist/web/assets/dialog-Dn_2tuYa.js.br +0 -0
- package/dist/web/assets/dialog-Dn_2tuYa.js.gz +0 -0
- package/dist/web/assets/diff-viewer-CLAvyqVG.js +4 -0
- package/dist/web/assets/diff-viewer-CLAvyqVG.js.br +0 -0
- package/dist/web/assets/diff-viewer-CLAvyqVG.js.gz +0 -0
- package/dist/web/assets/docx-preview-XSkD2IL6.js +12 -0
- package/dist/web/assets/docx-preview-XSkD2IL6.js.br +0 -0
- package/dist/web/assets/docx-preview-XSkD2IL6.js.gz +0 -0
- package/dist/web/assets/dropdown-menu-BQidk_OJ.js +1 -0
- package/dist/web/assets/dropdown-menu-BQidk_OJ.js.br +0 -0
- package/dist/web/assets/dropdown-menu-BQidk_OJ.js.gz +0 -0
- package/dist/web/assets/edit-diff-preview-DyWUMlkI.js +7 -0
- package/dist/web/assets/edit-diff-preview-DyWUMlkI.js.br +0 -0
- package/dist/web/assets/edit-diff-preview-DyWUMlkI.js.gz +0 -0
- package/dist/web/assets/editor-dialog-cQvqVZAR.js +1 -0
- package/dist/web/assets/editor-dialog-cQvqVZAR.js.br +0 -0
- package/dist/web/assets/editor-dialog-cQvqVZAR.js.gz +0 -0
- package/dist/web/assets/editor-language-service-6-7mS6_9.js +1 -0
- package/dist/web/assets/editor-language-service-6-7mS6_9.js.br +0 -0
- package/dist/web/assets/editor-language-service-6-7mS6_9.js.gz +0 -0
- package/dist/web/assets/explorer-body-BlGDPmNa.js +2 -0
- package/dist/web/assets/explorer-body-BlGDPmNa.js.br +0 -0
- package/dist/web/assets/explorer-body-BlGDPmNa.js.gz +0 -0
- package/dist/web/assets/explorer-model-BtJN4MZ9.js +1 -0
- package/dist/web/assets/explorer-model-BtJN4MZ9.js.br +0 -0
- package/dist/web/assets/explorer-model-BtJN4MZ9.js.gz +0 -0
- package/dist/web/assets/explorer-window-content-BLWY8GJ_.js +1 -0
- package/dist/web/assets/explorer-window-content-BLWY8GJ_.js.br +0 -0
- package/dist/web/assets/explorer-window-content-BLWY8GJ_.js.gz +0 -0
- package/dist/web/assets/extension-manager-section-NSEt5f4z.js +1 -0
- package/dist/web/assets/extension-manager-section-NSEt5f4z.js.br +0 -0
- package/dist/web/assets/extension-manager-section-NSEt5f4z.js.gz +0 -0
- package/dist/web/assets/extension-webview-BkAEBWin.js +12 -0
- package/dist/web/assets/extension-webview-BkAEBWin.js.br +0 -0
- package/dist/web/assets/extension-webview-BkAEBWin.js.gz +0 -0
- package/dist/web/assets/file-diff-CcDhJkXB.js +1 -0
- package/dist/web/assets/file-icons-JInFtBVl.js +1 -0
- package/dist/web/assets/file-icons-JInFtBVl.js.br +0 -0
- package/dist/web/assets/file-icons-JInFtBVl.js.gz +0 -0
- package/dist/web/assets/file-store-BQ41vIs5.js +1 -0
- package/dist/web/assets/file-store-BQ41vIs5.js.br +0 -0
- package/dist/web/assets/file-store-BQ41vIs5.js.gz +0 -0
- package/dist/web/assets/files-settings-section-Bq7liJ_r.js +1 -0
- package/dist/web/assets/files-settings-section-Bq7liJ_r.js.br +0 -0
- package/dist/web/assets/files-settings-section-Bq7liJ_r.js.gz +0 -0
- package/dist/web/assets/filter-dialog-frame-BkEbqBA4.js +1 -0
- package/dist/web/assets/filter-dialog-frame-BkEbqBA4.js.br +0 -0
- package/dist/web/assets/filter-dialog-frame-BkEbqBA4.js.gz +0 -0
- package/dist/web/assets/format-file-meta-DdYtk07C.js +1 -0
- package/dist/web/assets/format-file-meta-DdYtk07C.js.br +0 -0
- package/dist/web/assets/format-file-meta-DdYtk07C.js.gz +0 -0
- package/dist/web/assets/fs-api-CFtQzsIJ.js +1 -0
- package/dist/web/assets/fs-api-CFtQzsIJ.js.br +0 -0
- package/dist/web/assets/fs-api-CFtQzsIJ.js.gz +0 -0
- package/dist/web/assets/general-settings-section-DvHROAMa.js +1 -0
- package/dist/web/assets/general-settings-section-DvHROAMa.js.br +0 -0
- package/dist/web/assets/general-settings-section-DvHROAMa.js.gz +0 -0
- package/dist/web/assets/git-commit-horizontal-BPdj2L1i.js +1 -0
- package/dist/web/assets/git-log-panel-Cu9kK48H.js +1 -0
- package/dist/web/assets/git-log-panel-Cu9kK48H.js.br +0 -0
- package/dist/web/assets/git-log-panel-Cu9kK48H.js.gz +0 -0
- package/dist/web/assets/git-repo-store-CKB5fdNP.js +1 -0
- package/dist/web/assets/git-repo-store-CKB5fdNP.js.br +0 -0
- package/dist/web/assets/git-repo-store-CKB5fdNP.js.gz +0 -0
- package/dist/web/assets/git-review-tab-B_JT649W.js +3 -0
- package/dist/web/assets/git-review-tab-B_JT649W.js.br +0 -0
- package/dist/web/assets/git-review-tab-B_JT649W.js.gz +0 -0
- package/dist/web/assets/glide-data-grid-BlposOph.js +177 -0
- package/dist/web/assets/glide-data-grid-BlposOph.js.br +0 -0
- package/dist/web/assets/glide-data-grid-BlposOph.js.gz +0 -0
- package/dist/web/assets/grid-save-dialog-B0d0qhnN.js +2 -0
- package/dist/web/assets/grid-save-dialog-B0d0qhnN.js.br +0 -0
- package/dist/web/assets/grid-save-dialog-B0d0qhnN.js.gz +0 -0
- package/dist/web/assets/group-chat-tab-jirUsGm-.js +1 -0
- package/dist/web/assets/group-chat-tab-jirUsGm-.js.br +0 -0
- package/dist/web/assets/group-chat-tab-jirUsGm-.js.gz +0 -0
- package/dist/web/assets/html-preview-loads-CMWBC-iv.js +1 -0
- package/dist/web/assets/icons-BwyIKaTT.js +1 -0
- package/dist/web/assets/icons-BwyIKaTT.js.br +0 -0
- package/dist/web/assets/icons-BwyIKaTT.js.gz +0 -0
- package/dist/web/assets/image-preview-gOBK9zED.js +1 -0
- package/dist/web/assets/impexp-tab-HJVcOTYJ.js +1 -0
- package/dist/web/assets/impexp-tab-HJVcOTYJ.js.br +0 -0
- package/dist/web/assets/impexp-tab-HJVcOTYJ.js.gz +0 -0
- package/dist/web/assets/index-DLB3j_P0.js +59 -0
- package/dist/web/assets/index-DLB3j_P0.js.br +0 -0
- package/dist/web/assets/index-DLB3j_P0.js.gz +0 -0
- package/dist/web/assets/index-M3DUzop8.css +1 -0
- package/dist/web/assets/index-M3DUzop8.css.br +0 -0
- package/dist/web/assets/index-M3DUzop8.css.gz +0 -0
- package/dist/web/assets/input-C3oVNCMq.js +1 -0
- package/dist/web/assets/jira-watcher-section-EQvdnETB.js +1 -0
- package/dist/web/assets/keybindings-store-CEy-Sdcc.js +1 -0
- package/dist/web/assets/keyboard-shortcuts-section-DN21gB-T.js +1 -0
- package/dist/web/assets/keyboard-shortcuts-section-DN21gB-T.js.br +0 -0
- package/dist/web/assets/keyboard-shortcuts-section-DN21gB-T.js.gz +0 -0
- package/dist/web/assets/language-servers-section-DOcZ72FJ.js +2 -0
- package/dist/web/assets/language-servers-section-DOcZ72FJ.js.br +0 -0
- package/dist/web/assets/language-servers-section-DOcZ72FJ.js.gz +0 -0
- package/dist/web/assets/lib-5Chotbwm.js +2 -0
- package/dist/web/assets/lib-5Chotbwm.js.br +0 -0
- package/dist/web/assets/lib-5Chotbwm.js.gz +0 -0
- package/dist/web/assets/logs-app-C7n9GSCn.js +13 -0
- package/dist/web/assets/logs-app-C7n9GSCn.js.br +0 -0
- package/dist/web/assets/logs-app-C7n9GSCn.js.gz +0 -0
- package/dist/web/assets/logs-tab-CSOiexvx.js +1 -0
- package/dist/web/assets/logs-window-content-C4Qs6-0q.js +1 -0
- package/dist/web/assets/lsp-client-DpYmPhXX.js +1 -0
- package/dist/web/assets/lsp-client-DpYmPhXX.js.br +0 -0
- package/dist/web/assets/lsp-client-DpYmPhXX.js.gz +0 -0
- package/dist/web/assets/markdown-renderer-CtEl6qAt.js +4 -0
- package/dist/web/assets/markdown-renderer-CtEl6qAt.js.br +0 -0
- package/dist/web/assets/markdown-renderer-CtEl6qAt.js.gz +0 -0
- package/dist/web/assets/markdown-renderer-Df3r-CCb.js +1 -0
- package/dist/web/assets/media-url-Cn2yRAxP.js +1 -0
- package/dist/web/assets/metric-chart-canvas-DEW16Su8.js +1 -0
- package/dist/web/assets/metric-chart-canvas-DEW16Su8.js.br +0 -0
- package/dist/web/assets/metric-chart-canvas-DEW16Su8.js.gz +0 -0
- package/dist/web/assets/mobile-bottom-sheet-DArbIyrD.js +1 -0
- package/dist/web/assets/mobile-bottom-sheet-DArbIyrD.js.br +0 -0
- package/dist/web/assets/mobile-bottom-sheet-DArbIyrD.js.gz +0 -0
- package/dist/web/assets/mobile-explorer-sheet-B-rcKEL9.js +1 -0
- package/dist/web/assets/mobile-explorer-sheet-B-rcKEL9.js.br +0 -0
- package/dist/web/assets/mobile-explorer-sheet-B-rcKEL9.js.gz +0 -0
- package/dist/web/assets/new-design-dialog-DgztQK5R.js +1 -0
- package/dist/web/assets/new-design-dialog-DgztQK5R.js.br +0 -0
- package/dist/web/assets/new-design-dialog-DgztQK5R.js.gz +0 -0
- package/dist/web/assets/notification-store-B92dvP_u.js +1 -0
- package/dist/web/assets/notifications-settings-section-JiGvaCFx.js +1 -0
- package/dist/web/assets/notifications-settings-section-JiGvaCFx.js.br +0 -0
- package/dist/web/assets/notifications-settings-section-JiGvaCFx.js.gz +0 -0
- package/dist/web/assets/onboarding-entry-eehqBvyM.js +1 -0
- package/dist/web/assets/onboarding-entry-eehqBvyM.js.br +0 -0
- package/dist/web/assets/onboarding-entry-eehqBvyM.js.gz +0 -0
- package/dist/web/assets/onboarding-quick-orientation-CTHtIRib.js +1 -0
- package/dist/web/assets/onboarding-quick-orientation-CTHtIRib.js.br +0 -0
- package/dist/web/assets/onboarding-quick-orientation-CTHtIRib.js.gz +0 -0
- package/dist/web/assets/open-db-tabs-CtWIWHOa.js +1 -0
- package/dist/web/assets/open-db-tabs-CtWIWHOa.js.br +0 -0
- package/dist/web/assets/open-db-tabs-CtWIWHOa.js.gz +0 -0
- package/dist/web/assets/open-settings-EXR4zoZG.js +1 -0
- package/dist/web/assets/overview-panel-DEGF2DmZ.js +1 -0
- package/dist/web/assets/overview-panel-DEGF2DmZ.js.br +0 -0
- package/dist/web/assets/overview-panel-DEGF2DmZ.js.gz +0 -0
- package/dist/web/assets/panel-store-BJhazigC.js +1 -0
- package/dist/web/assets/panel-store-BJhazigC.js.br +0 -0
- package/dist/web/assets/panel-store-BJhazigC.js.gz +0 -0
- package/dist/web/assets/patch-tab-metadata-C92YkrRX.js +1 -0
- package/dist/web/assets/pdf-preview-C9gMtv2a.js +1 -0
- package/dist/web/assets/pdf-preview-C9gMtv2a.js.br +0 -0
- package/dist/web/assets/pdf-preview-C9gMtv2a.js.gz +0 -0
- package/dist/web/assets/performance-panel-TkwfKIZa.js +3 -0
- package/dist/web/assets/performance-panel-TkwfKIZa.js.br +0 -0
- package/dist/web/assets/performance-panel-TkwfKIZa.js.gz +0 -0
- package/dist/web/assets/portal-container-context-NBi-KGK0.js +1 -0
- package/dist/web/assets/ppmbot-settings-section-XfrZ8VoC.js +1 -0
- package/dist/web/assets/ppmbot-settings-section-XfrZ8VoC.js.br +0 -0
- package/dist/web/assets/ppmbot-settings-section-XfrZ8VoC.js.gz +0 -0
- package/dist/web/assets/pptx-export-B2wCBWlV.js +111 -0
- package/dist/web/assets/pptx-export-B2wCBWlV.js.br +0 -0
- package/dist/web/assets/pptx-export-B2wCBWlV.js.gz +0 -0
- package/dist/web/assets/problems-panel-CDzwSJn6.js +1 -0
- package/dist/web/assets/problems-panel-CDzwSJn6.js.br +0 -0
- package/dist/web/assets/problems-panel-CDzwSJn6.js.gz +0 -0
- package/dist/web/assets/process-row-format-CytRH7g2.js +1 -0
- package/dist/web/assets/process-table-C_B39GHm.js +1 -0
- package/dist/web/assets/process-table-C_B39GHm.js.br +0 -0
- package/dist/web/assets/process-table-C_B39GHm.js.gz +0 -0
- package/dist/web/assets/project-framework-store-DwLxaRan.js +1 -0
- package/dist/web/assets/project-store-BLGl9IAO.js +1 -0
- package/dist/web/assets/project-store-BLGl9IAO.js.br +0 -0
- package/dist/web/assets/project-store-BLGl9IAO.js.gz +0 -0
- package/dist/web/assets/proxy-settings-section-CvaOvYIv.js +1 -0
- package/dist/web/assets/proxy-settings-section-CvaOvYIv.js.br +0 -0
- package/dist/web/assets/proxy-settings-section-CvaOvYIv.js.gz +0 -0
- package/dist/web/assets/query-audit-section-D_WDp1m-.js +1 -0
- package/dist/web/assets/query-audit-section-D_WDp1m-.js.br +0 -0
- package/dist/web/assets/query-audit-section-D_WDp1m-.js.gz +0 -0
- package/dist/web/assets/query-tab-B8aMpAbI.js +22 -0
- package/dist/web/assets/query-tab-B8aMpAbI.js.br +0 -0
- package/dist/web/assets/query-tab-B8aMpAbI.js.gz +0 -0
- package/dist/web/assets/react-BZ0kba1-.js +1 -0
- package/dist/web/assets/remote-access-settings-section-Bv0eawR4.js +1 -0
- package/dist/web/assets/remote-access-settings-section-Bv0eawR4.js.br +0 -0
- package/dist/web/assets/remote-access-settings-section-Bv0eawR4.js.gz +0 -0
- package/dist/web/assets/remote-desktop-clipboard-notice-BpDakRY0.js +1 -0
- package/dist/web/assets/remote-desktop-clipboard-notice-BpDakRY0.js.br +0 -0
- package/dist/web/assets/remote-desktop-clipboard-notice-BpDakRY0.js.gz +0 -0
- package/dist/web/assets/remote-desktop-mobile-sheet-C5GQ3kzY.js +2 -0
- package/dist/web/assets/remote-desktop-mobile-sheet-C5GQ3kzY.js.br +0 -0
- package/dist/web/assets/remote-desktop-mobile-sheet-C5GQ3kzY.js.gz +0 -0
- package/dist/web/assets/remote-desktop-mobile-view-CZb5EMEK.js +1 -0
- package/dist/web/assets/remote-desktop-mobile-view-CZb5EMEK.js.br +0 -0
- package/dist/web/assets/remote-desktop-mobile-view-CZb5EMEK.js.gz +0 -0
- package/dist/web/assets/remote-desktop-readiness-gate-CipNtLX5.js +1 -0
- package/dist/web/assets/remote-desktop-readiness-gate-CipNtLX5.js.br +0 -0
- package/dist/web/assets/remote-desktop-readiness-gate-CipNtLX5.js.gz +0 -0
- package/dist/web/assets/remote-desktop-settings-section-ZAsBRwjq.js +1 -0
- package/dist/web/assets/remote-desktop-settings-section-ZAsBRwjq.js.br +0 -0
- package/dist/web/assets/remote-desktop-settings-section-ZAsBRwjq.js.gz +0 -0
- package/dist/web/assets/remote-desktop-window-content-B7OXXvAM.js +1 -0
- package/dist/web/assets/remote-desktop-window-content-B7OXXvAM.js.br +0 -0
- package/dist/web/assets/remote-desktop-window-content-B7OXXvAM.js.gz +0 -0
- package/dist/web/assets/rename-object-dialog-B4W6S7Xg.js +1 -0
- package/dist/web/assets/rename-object-dialog-B4W6S7Xg.js.br +0 -0
- package/dist/web/assets/rename-object-dialog-B4W6S7Xg.js.gz +0 -0
- package/dist/web/assets/review-code-B4osj0k1.js +5 -0
- package/dist/web/assets/review-code-B4osj0k1.js.br +0 -0
- package/dist/web/assets/review-code-B4osj0k1.js.gz +0 -0
- package/dist/web/assets/run-in-terminal-button-m3i-Hcou.js +1 -0
- package/dist/web/assets/run-in-terminal-ujoc25vj.js +1 -0
- package/dist/web/assets/save-as-dialog-DpXv_f1d.js +1 -0
- package/dist/web/assets/save-as-dialog-DpXv_f1d.js.br +5 -0
- package/dist/web/assets/save-as-dialog-DpXv_f1d.js.gz +0 -0
- package/dist/web/assets/schedules-settings-section-BbaPbc28.js +1 -0
- package/dist/web/assets/schedules-settings-section-BbaPbc28.js.br +0 -0
- package/dist/web/assets/schedules-settings-section-BbaPbc28.js.gz +0 -0
- package/dist/web/assets/scroll-area-DOlQJGZp.js +1 -0
- package/dist/web/assets/scroll-area-DOlQJGZp.js.br +0 -0
- package/dist/web/assets/scroll-area-DOlQJGZp.js.gz +0 -0
- package/dist/web/assets/send-to-chat-CWV1qd3c.js +1 -0
- package/dist/web/assets/send-to-chat-CWV1qd3c.js.br +0 -0
- package/dist/web/assets/send-to-chat-CWV1qd3c.js.gz +0 -0
- package/dist/web/assets/separator-DmU9aJwq.js +1 -0
- package/dist/web/assets/services-panel-CZQOrvth.js +1 -0
- package/dist/web/assets/services-panel-CZQOrvth.js.br +0 -0
- package/dist/web/assets/services-panel-CZQOrvth.js.gz +0 -0
- package/dist/web/assets/session-changes-bar-VfS2sHuH.js +1 -0
- package/dist/web/assets/session-changes-bar-VfS2sHuH.js.br +0 -0
- package/dist/web/assets/session-changes-bar-VfS2sHuH.js.gz +0 -0
- package/dist/web/assets/session-list-sync-triggers-DtJI5KF0.js +1 -0
- package/dist/web/assets/session-list-sync-triggers-DtJI5KF0.js.br +0 -0
- package/dist/web/assets/session-list-sync-triggers-DtJI5KF0.js.gz +0 -0
- package/dist/web/assets/session-review-tab-Aq3FEooH.js +6 -0
- package/dist/web/assets/session-review-tab-Aq3FEooH.js.br +0 -0
- package/dist/web/assets/session-review-tab-Aq3FEooH.js.gz +0 -0
- package/dist/web/assets/settings-body-vXbOWchN.js +1 -0
- package/dist/web/assets/settings-body-vXbOWchN.js.br +0 -0
- package/dist/web/assets/settings-body-vXbOWchN.js.gz +0 -0
- package/dist/web/assets/settings-categories-Ajj4ui27.js +1 -0
- package/dist/web/assets/settings-categories-Ajj4ui27.js.br +0 -0
- package/dist/web/assets/settings-categories-Ajj4ui27.js.gz +0 -0
- package/dist/web/assets/settings-rows-DD7Gxmst.js +1 -0
- package/dist/web/assets/settings-rows-DD7Gxmst.js.br +0 -0
- package/dist/web/assets/settings-rows-DD7Gxmst.js.gz +0 -0
- package/dist/web/assets/settings-section-content-CVtvJ6ze.js +1 -0
- package/dist/web/assets/settings-section-content-DkUJFop6.js +2 -0
- package/dist/web/assets/settings-section-content-DkUJFop6.js.br +0 -0
- package/dist/web/assets/settings-section-content-DkUJFop6.js.gz +0 -0
- package/dist/web/assets/settings-store-B4mLp19V.js +2 -0
- package/dist/web/assets/settings-store-B4mLp19V.js.br +0 -0
- package/dist/web/assets/settings-store-B4mLp19V.js.gz +0 -0
- package/dist/web/assets/settings-tab-Cdv9_OIe.js +1 -0
- package/dist/web/assets/settings-window-content-DLa6Ph4u.js +1 -0
- package/dist/web/assets/share-BV49OI6q.css +2 -0
- package/dist/web/assets/share-BV49OI6q.css.br +0 -0
- package/dist/web/assets/share-BV49OI6q.css.gz +0 -0
- package/dist/web/assets/share-D5ufGmNI.js +9 -0
- package/dist/web/assets/share-D5ufGmNI.js.br +0 -0
- package/dist/web/assets/share-D5ufGmNI.js.gz +0 -0
- package/dist/web/assets/slash-command-picker-lILYDfK3.js +1 -0
- package/dist/web/assets/slash-command-picker-lILYDfK3.js.br +0 -0
- package/dist/web/assets/slash-command-picker-lILYDfK3.js.gz +0 -0
- package/dist/web/assets/sortable-header-DwzTFLkG.js +1 -0
- package/dist/web/assets/sortable-header-DwzTFLkG.js.br +0 -0
- package/dist/web/assets/sortable-header-DwzTFLkG.js.gz +0 -0
- package/dist/web/assets/split-sql-statements-DcAeXbk_.js +5 -0
- package/dist/web/assets/split-sql-statements-DcAeXbk_.js.br +0 -0
- package/dist/web/assets/split-sql-statements-DcAeXbk_.js.gz +0 -0
- package/dist/web/assets/sql-completion-provider-CS-ElfgJ.js +1 -0
- package/dist/web/assets/sql-completion-provider-CS-ElfgJ.js.br +0 -0
- package/dist/web/assets/sql-completion-provider-CS-ElfgJ.js.gz +0 -0
- package/dist/web/assets/sql-object-tab-Da42SMK5.js +1 -0
- package/dist/web/assets/sql-object-tab-Da42SMK5.js.br +0 -0
- package/dist/web/assets/sql-object-tab-Da42SMK5.js.gz +0 -0
- package/dist/web/assets/sqlite-viewer-V3SKNukY.js +1 -0
- package/dist/web/assets/sqlite-viewer-V3SKNukY.js.br +0 -0
- package/dist/web/assets/sqlite-viewer-V3SKNukY.js.gz +0 -0
- package/dist/web/assets/start-ellipsis-CU8GkxaV.js +1 -0
- package/dist/web/assets/structure-save-dialog-B635iyPI.js +1 -0
- package/dist/web/assets/structure-save-dialog-B635iyPI.js.br +0 -0
- package/dist/web/assets/structure-save-dialog-B635iyPI.js.gz +0 -0
- package/dist/web/assets/structure-tab-Co9d8ktU.js +3 -0
- package/dist/web/assets/structure-tab-Co9d8ktU.js.br +0 -0
- package/dist/web/assets/structure-tab-Co9d8ktU.js.gz +0 -0
- package/dist/web/assets/system-monitor-body-DC0j8RqP.js +2 -0
- package/dist/web/assets/system-monitor-body-DC0j8RqP.js.br +0 -0
- package/dist/web/assets/system-monitor-body-DC0j8RqP.js.gz +0 -0
- package/dist/web/assets/system-monitor-tab-DA8BcdXo.js +1 -0
- package/dist/web/assets/system-monitor-window-content-BiuLo8XW.js +1 -0
- package/dist/web/assets/tab-host-window-content-Crvt1r5F.js +1 -0
- package/dist/web/assets/tab-host-window-content-Crvt1r5F.js.br +0 -0
- package/dist/web/assets/tab-host-window-content-Crvt1r5F.js.gz +0 -0
- package/dist/web/assets/tab-store-D5I52eLN.js +1 -0
- package/dist/web/assets/table-tab-C2cYw7a0.js +2 -0
- package/dist/web/assets/table-tab-C2cYw7a0.js.br +0 -0
- package/dist/web/assets/table-tab-C2cYw7a0.js.gz +0 -0
- package/dist/web/assets/telegram-bot-token-field-BqNtOo5n.js +1 -0
- package/dist/web/assets/telegram-bot-token-field-BqNtOo5n.js.br +0 -0
- package/dist/web/assets/telegram-bot-token-field-BqNtOo5n.js.gz +0 -0
- package/dist/web/assets/terminal-tab-CrKxibGC.js +3 -0
- package/dist/web/assets/terminal-tab-CrKxibGC.js.br +0 -0
- package/dist/web/assets/terminal-tab-CrKxibGC.js.gz +0 -0
- package/dist/web/assets/tool-cards-BRto67jM.js +15 -0
- package/dist/web/assets/tool-cards-BRto67jM.js.br +0 -0
- package/dist/web/assets/tool-cards-BRto67jM.js.gz +0 -0
- package/dist/web/assets/tools-settings-section-DEvZsrxq.js +1 -0
- package/dist/web/assets/tools-settings-section-DEvZsrxq.js.br +0 -0
- package/dist/web/assets/tools-settings-section-DEvZsrxq.js.gz +0 -0
- package/dist/web/assets/use-at-most-wide-BHsrzvv3.js +1 -0
- package/dist/web/assets/use-blob-url-Clm7wbB_.js +1 -0
- package/dist/web/assets/use-db-driver-installed-anzWkGi5.js +1 -0
- package/dist/web/assets/use-db-read-BCYhIrJM.js +1 -0
- package/dist/web/assets/use-db-read-BCYhIrJM.js.br +0 -0
- package/dist/web/assets/use-db-read-BCYhIrJM.js.gz +0 -0
- package/dist/web/assets/use-db-tab-B8LjdDb7.js +1 -0
- package/dist/web/assets/use-db-tab-B8LjdDb7.js.br +0 -0
- package/dist/web/assets/use-db-tab-B8LjdDb7.js.gz +0 -0
- package/dist/web/assets/use-design-canvas-check-DBsLf1At.js +1 -0
- package/dist/web/assets/use-design-canvas-check-DBsLf1At.js.br +0 -0
- package/dist/web/assets/use-design-canvas-check-DBsLf1At.js.gz +0 -0
- package/dist/web/assets/use-h264-canvas-decoder-_zqeiVx8.js +1 -0
- package/dist/web/assets/use-h264-canvas-decoder-_zqeiVx8.js.br +0 -0
- package/dist/web/assets/use-h264-canvas-decoder-_zqeiVx8.js.gz +0 -0
- package/dist/web/assets/use-inline-blame-CRWJU6Rq.js +16 -0
- package/dist/web/assets/use-inline-blame-CRWJU6Rq.js.br +0 -0
- package/dist/web/assets/use-inline-blame-CRWJU6Rq.js.gz +0 -0
- package/dist/web/assets/use-is-mobile-VRV9eZy1.js +1 -0
- package/dist/web/assets/use-lsp-B-otjr-6.js +6 -0
- package/dist/web/assets/use-lsp-B-otjr-6.js.br +0 -0
- package/dist/web/assets/use-lsp-B-otjr-6.js.gz +0 -0
- package/dist/web/assets/use-monaco-theme-BiDXRJ4e.js +1 -0
- package/dist/web/assets/use-opener-focus-CDRKhHwX.js +1 -0
- package/dist/web/assets/use-process-kill-BW2UW0mZ.js +1 -0
- package/dist/web/assets/use-process-kill-BW2UW0mZ.js.br +0 -0
- package/dist/web/assets/use-process-kill-BW2UW0mZ.js.gz +0 -0
- package/dist/web/assets/use-sql-schema-info-D_Kc2FI7.js +4 -0
- package/dist/web/assets/use-sql-schema-info-D_Kc2FI7.js.br +0 -0
- package/dist/web/assets/use-sql-schema-info-D_Kc2FI7.js.gz +0 -0
- package/dist/web/assets/use-visual-viewport-MmugpRg-.js +1 -0
- package/dist/web/assets/use-websocket-n3Ud9vEA.js +1 -0
- package/dist/web/assets/vendor-markdown-C-P1aR4p.js +291 -0
- package/dist/web/assets/vendor-markdown-C-P1aR4p.js.br +0 -0
- package/dist/web/assets/vendor-markdown-C-P1aR4p.js.gz +0 -0
- package/dist/web/assets/vendor-ui-BTSIXzhZ.js +45 -0
- package/dist/web/assets/vendor-ui-BTSIXzhZ.js.br +0 -0
- package/dist/web/assets/vendor-ui-BTSIXzhZ.js.gz +0 -0
- package/dist/web/assets/video-preview-CjB6wesi.js +1 -0
- package/dist/web/assets/video-preview-CjB6wesi.js.br +0 -0
- package/dist/web/assets/video-preview-CjB6wesi.js.gz +0 -0
- package/dist/web/assets/voice-settings-section-C6Wb6q5o.js +1 -0
- package/dist/web/assets/voice-settings-section-C6Wb6q5o.js.br +0 -0
- package/dist/web/assets/voice-settings-section-C6Wb6q5o.js.gz +0 -0
- package/dist/web/assets/web-preview-tab-doNpegW3.js +1 -0
- package/dist/web/assets/web-preview-tab-doNpegW3.js.br +0 -0
- package/dist/web/assets/web-preview-tab-doNpegW3.js.gz +0 -0
- package/dist/web/assets/window-store-DqX_qmkQ.js +1 -0
- package/dist/web/assets/window-store-DqX_qmkQ.js.br +0 -0
- package/dist/web/assets/window-store-DqX_qmkQ.js.gz +0 -0
- package/dist/web/assets/ws-auth-CbF6GqxP.js +1 -0
- package/dist/web/design-share-page/index.html +18 -0
- package/dist/web/index.html +47 -47
- 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/ai-chat-and-providers.md +258 -26
- package/docs/architecture/data-and-storage.md +9 -3
- package/docs/architecture/workspace-and-ui.md +42 -5
- package/docs/project-roadmap.md +5 -0
- package/package.json +6 -2
- package/scripts/gen-product-icons.ts +1 -0
- package/src/cli/commands/db-cmd.ts +79 -1
- package/src/providers/claude-agent-sdk-query-options.ts +42 -10
- package/src/providers/claude-agent-sdk.ts +19 -6
- package/src/providers/codex-app-server/codex-provider.ts +9 -3
- package/src/providers/codex-app-server/codex-thread-params.ts +34 -4
- package/src/server/index.ts +17 -5
- package/src/server/middleware/access-log.ts +6 -3
- package/src/server/routes/accounts.ts +3 -2
- package/src/server/routes/chat-file-changes.ts +15 -1
- package/src/server/routes/chat.ts +92 -18
- package/src/server/routes/database-query.ts +14 -5
- package/src/server/routes/database.ts +14 -0
- package/src/server/routes/debug-crash.ts +30 -0
- package/src/server/routes/design-comments.ts +56 -7
- package/src/server/routes/design-share-address.ts +20 -0
- package/src/server/routes/design-share-guest-comments.ts +120 -0
- package/src/server/routes/design-share-guest-files.ts +99 -0
- package/src/server/routes/design-share-guest-shared.ts +95 -0
- package/src/server/routes/design-share-guest.ts +77 -0
- package/src/server/routes/design-shares.ts +90 -0
- package/src/server/routes/designs.ts +2 -0
- package/src/server/routes/settings.ts +12 -0
- package/src/server/routes/static.ts +10 -2
- package/src/server/ws/chat.ts +113 -39
- package/src/server/ws/global.ts +10 -8
- package/src/services/account.service.ts +57 -18
- package/src/services/chat.service.ts +16 -6
- package/src/services/db-ai-tools/db-ai-connections.ts +48 -0
- package/src/services/db-ai-tools/db-ai-format.ts +107 -0
- package/src/services/db-ai-tools/db-ai-run.ts +199 -0
- package/src/services/db-ai-tools/db-ai-target.ts +59 -0
- package/src/services/db-ai-tools/db-ai-tools-endpoint.ts +225 -0
- package/src/services/db-ai-tools/db-ai-tools-tokens.ts +33 -0
- package/src/services/db-ai-tools/db-ai-tools-tool.ts +131 -0
- package/src/services/db-ai-tools/db-approval-broker.ts +157 -0
- package/src/services/db.service.ts +25 -1
- package/src/services/design/bridge/bridge-picker.ts +15 -5
- package/src/services/design/bridge/guest-bridge.ts +19 -0
- package/src/services/design/comments/design-comment-element-context.ts +28 -6
- package/src/services/design/comments/design-comment-input.ts +47 -0
- package/src/services/design/comments/design-comment-views.ts +146 -0
- package/src/services/design/comments/design-comments-revision.ts +19 -0
- package/src/services/design/comments/design-comments-store.ts +82 -9
- package/src/services/design/design-comment-replies.service.ts +126 -0
- package/src/services/design/design-comments.service.ts +77 -34
- package/src/services/design/design-restore.service.ts +6 -2
- package/src/services/design/design-snapshots.service.ts +8 -2
- package/src/services/design/design-store.service.ts +7 -1
- package/src/services/design/design-write-rate-limit.ts +11 -17
- package/src/services/design/preview/design-guest-alias.ts +64 -0
- package/src/services/design/preview/design-preview-html.ts +16 -3
- package/src/services/design/preview/design-preview-scope.ts +29 -5
- package/src/services/design/share/design-share-address.ts +81 -0
- package/src/services/design/share/design-share-changed-files.ts +74 -0
- package/src/services/design/share/design-share-client-key.ts +72 -0
- package/src/services/design/share/design-share-code.ts +116 -0
- package/src/services/design/share/design-share-comments.service.ts +162 -0
- package/src/services/design/share/design-share-guest-link.ts +109 -0
- package/src/services/design/share/design-share-guest-page.ts +86 -0
- package/src/services/design/share/design-share-link-rules.ts +83 -0
- package/src/services/design/share/design-share-links-store.ts +157 -0
- package/src/services/design/share/design-share-links.service.ts +174 -0
- package/src/services/design/share/design-share-notifier.ts +192 -0
- package/src/services/design/share/design-share-rate-limit.ts +71 -0
- package/src/services/design/share/design-share-resolve.ts +31 -0
- package/src/services/mcp-http-endpoint.ts +23 -10
- package/src/services/mysql.service.ts +6 -2
- package/src/services/notification-format.ts +10 -2
- package/src/services/notification-link.ts +1 -1
- package/src/services/notification.service.ts +47 -15
- package/src/services/ppm-password.ts +26 -0
- package/src/services/project-name-for-path.ts +18 -0
- package/src/services/query-audit/query-audit.service.ts +7 -4
- package/src/services/remote-desktop/access-unit-assembler.ts +11 -7
- package/src/services/remote-desktop/nal-splitter.ts +14 -1
- package/src/services/remote-desktop/remote-desktop-capture-wayland.ts +47 -21
- package/src/services/remote-desktop/remote-desktop-encoder-args.ts +5 -3
- package/src/services/session-file-baselines/session-file-baselines.service.ts +48 -0
- package/src/services/session-file-baselines/session-file-blame.ts +57 -24
- package/src/services/session-file-baselines/session-file-changes.service.ts +220 -22
- package/src/services/session-file-baselines/session-file-history.ts +5 -1
- package/src/services/session-file-baselines/session-file-writes.ts +28 -0
- package/src/services/sliding-window-limiter.ts +106 -0
- package/src/services/tab-tools-mcp/open-url-tool.ts +149 -0
- package/src/services/tab-tools-mcp/tab-open-broker.ts +12 -4
- package/src/services/tab-tools-mcp/tab-tools-mcp-endpoint.ts +66 -22
- package/src/services/tab-tools-mcp/tab-tools-mcp-tokens.ts +3 -1
- package/src/services/tab-tools-mcp/tab-tools-mcp-tool.ts +78 -6
- package/src/services/tab-tools-mcp/terminal-text.ts +45 -0
- package/src/services/tab-tools-mcp/terminal-tools.ts +297 -0
- package/src/services/terminal.service.ts +39 -4
- package/src/shared/db-ai-tools.ts +118 -0
- package/src/shared/db-query-script.ts +16 -0
- package/src/shared/design-comment-thread-types.ts +80 -0
- package/src/shared/design-comment-types.ts +53 -4
- package/src/shared/design-share-guest-types.ts +59 -0
- package/src/shared/design-share-types.ts +100 -0
- package/src/shared/notification-settings.ts +4 -3
- package/src/shared/ppm-tools.ts +39 -0
- package/src/shared/session-file-changes.ts +16 -0
- package/src/shared/tab-open-protocol.ts +50 -6
- package/src/shared/untrusted-text.ts +15 -1
- package/src/types/chat.ts +7 -1
- package/src/types/config.ts +5 -2
- package/src/types/database.ts +6 -0
- package/src/web/components/chat/chat-history-bar.tsx +10 -6
- package/src/web/components/chat/chat-tab.tsx +7 -1
- package/src/web/components/chat/db-execute-approval-card.tsx +100 -0
- package/src/web/components/chat/db-tool-card.tsx +42 -0
- package/src/web/components/chat/device-tool-card.tsx +45 -0
- package/src/web/components/chat/message-input.tsx +9 -6
- package/src/web/components/chat/message-list.tsx +6 -1
- package/src/web/components/chat/message-markdown.tsx +6 -3
- package/src/web/components/chat/message-user-bubble.tsx +2 -1
- package/src/web/components/chat/model-thinking-selector.tsx +6 -4
- package/src/web/components/chat/prompt-cache-chip.tsx +1 -1
- package/src/web/components/chat/running-agents-bar.tsx +164 -76
- package/src/web/components/chat/session-changes-bar.tsx +46 -13
- package/src/web/components/chat/tool-cards.tsx +29 -1
- package/src/web/components/chat/turn-change-rollup.tsx +8 -1
- package/src/web/components/chat/usage-badge.tsx +3 -3
- package/src/web/components/database/query/query-run-state.ts +11 -1
- package/src/web/components/database/query/query-tab.tsx +33 -7
- package/src/web/components/database/query/use-query-runner.ts +3 -0
- package/src/web/components/database/query/write-once-dialog.tsx +70 -0
- package/src/web/components/design/canvas/design-canvas-pane.tsx +5 -2
- package/src/web/components/design/comments/comment-author-label.tsx +23 -0
- package/src/web/components/design/comments/comment-composer.tsx +6 -14
- package/src/web/components/design/comments/comment-pins-overlay.tsx +8 -3
- package/src/web/components/design/comments/comment-thread-replies.tsx +82 -0
- package/src/web/components/design/comments/comment-thread-text-box.tsx +69 -0
- package/src/web/components/design/comments/comment-thread-view.tsx +115 -0
- package/src/web/components/design/comments/comments-panel.tsx +33 -10
- package/src/web/components/design/comments/comments-send-preview.tsx +20 -8
- package/src/web/components/design/comments/design-comments-layer.tsx +3 -1
- package/src/web/components/design/comments/use-comment-pins.ts +3 -0
- package/src/web/components/design/comments/use-design-comments-feature.ts +40 -25
- package/src/web/components/design/comments/use-design-comments.ts +44 -12
- package/src/web/components/design/design-split-layout.tsx +106 -10
- package/src/web/components/design/design-tab-context.ts +2 -0
- package/src/web/components/design/design-tab.tsx +5 -1
- package/src/web/components/design/design-toolbar.tsx +24 -4
- package/src/web/components/design/share/design-share-dialog.tsx +81 -0
- package/src/web/components/design/share/new-share-link-form.tsx +85 -0
- package/src/web/components/design/share/share-address-block.tsx +101 -0
- package/src/web/components/design/share/share-changed-files.tsx +30 -0
- package/src/web/components/design/share/share-expiry-picker.tsx +44 -0
- package/src/web/components/design/share/share-repin-panel.tsx +64 -0
- package/src/web/components/design/share/share-row-panel.tsx +35 -0
- package/src/web/components/design/share/share-version-picker.tsx +67 -0
- package/src/web/components/design/share/shared-link-action-panels.tsx +120 -0
- package/src/web/components/design/share/shared-link-row.tsx +131 -0
- package/src/web/components/design/share/shared-links-list.tsx +33 -0
- package/src/web/components/design/share/use-share-address.ts +74 -0
- package/src/web/components/design/share/use-share-links.ts +93 -0
- package/src/web/components/design/use-design-layout.ts +7 -4
- package/src/web/components/editor/diff-viewer.tsx +16 -12
- package/src/web/components/editor/docx-preview.tsx +7 -2
- package/src/web/components/floating-window/close-window.ts +32 -0
- package/src/web/components/floating-window/floating-window.tsx +65 -24
- package/src/web/components/floating-window/open-tab-in-pip.ts +3 -0
- package/src/web/components/floating-window/use-window-drag.ts +33 -7
- package/src/web/components/floating-window/use-window-meta.ts +138 -0
- package/src/web/components/floating-window/window-chrome-contract.ts +19 -2
- package/src/web/components/floating-window/window-dock-layout.ts +72 -0
- package/src/web/components/floating-window/window-dock-list.tsx +156 -0
- package/src/web/components/floating-window/window-dock.tsx +192 -0
- package/src/web/components/floating-window/window-geometry.ts +39 -1
- package/src/web/components/floating-window/window-layer.tsx +59 -23
- package/src/web/components/floating-window/window-persistence.ts +16 -3
- package/src/web/components/floating-window/window-store-types.ts +13 -2
- package/src/web/components/floating-window/window-store.ts +75 -8
- package/src/web/components/floating-window/window-title-identity.tsx +86 -0
- package/src/web/components/layout/status-bar.tsx +3 -0
- package/src/web/components/layout/tab-pop-out-menu-item.tsx +2 -2
- package/src/web/components/logs/open-logs.ts +0 -1
- package/src/web/components/os-explorer/actions/explorer-actions-upload.ts +2 -1
- package/src/web/components/os-explorer/skins/macos-window-chrome.tsx +17 -11
- package/src/web/components/os-explorer/skins/windows-window-chrome.tsx +14 -5
- package/src/web/components/remote-desktop/use-remote-desktop-readiness.ts +8 -3
- package/src/web/components/settings/accounts/account-add-dialog.tsx +25 -13
- package/src/web/components/settings/accounts/claude-accounts-section.tsx +3 -3
- package/src/web/components/settings/ai-settings-section.tsx +0 -20
- package/src/web/components/settings/design-settings-section.tsx +3 -0
- package/src/web/components/settings/design-window-setting.tsx +28 -0
- package/src/web/components/settings/settings-categories.ts +3 -0
- package/src/web/components/settings/settings-section-content.tsx +1 -0
- package/src/web/components/settings/tools-settings-section.tsx +120 -0
- package/src/web/components/shared/docx-html-sanitize.ts +59 -0
- package/src/web/components/shared/markdown-code-block.tsx +3 -1
- package/src/web/components/shared/markdown-renderer.tsx +15 -3
- package/src/web/components/shared/markdown-sanitize.ts +65 -0
- package/src/web/components/web-preview/web-preview-tab.tsx +6 -3
- package/src/web/design-share-page/index.html +17 -0
- package/src/web/design-share-page/main.tsx +11 -0
- package/src/web/design-share-page/share-api.ts +131 -0
- package/src/web/design-share-page/share-app.tsx +14 -0
- package/src/web/design-share-page/share-bottom-sheet.tsx +61 -0
- package/src/web/design-share-page/share-canvas.tsx +92 -0
- package/src/web/design-share-page/share-composer.tsx +104 -0
- package/src/web/design-share-page/share-entry.tsx +92 -0
- package/src/web/design-share-page/share-identity.ts +81 -0
- package/src/web/design-share-page/share-name-prompt.tsx +59 -0
- package/src/web/design-share-page/share-panel-content.tsx +57 -0
- package/src/web/design-share-page/share-pins-overlay.tsx +50 -0
- package/src/web/design-share-page/share-review.tsx +123 -0
- package/src/web/design-share-page/share-states.tsx +78 -0
- package/src/web/design-share-page/share-thread-model.ts +83 -0
- package/src/web/design-share-page/share-thread-view.tsx +61 -0
- package/src/web/design-share-page/share-threads-panel.tsx +103 -0
- package/src/web/design-share-page/share-toolbar.tsx +105 -0
- package/src/web/design-share-page/share-ui.ts +30 -0
- package/src/web/design-share-page/share.css +63 -0
- package/src/web/design-share-page/use-share-canvas.ts +51 -0
- package/src/web/design-share-page/use-share-info.ts +34 -0
- package/src/web/design-share-page/use-share-session.ts +75 -0
- package/src/web/design-share-page/use-share-threads.ts +139 -0
- package/src/web/hooks/use-chat.ts +5 -2
- package/src/web/hooks/use-design-session-redirect.ts +3 -2
- package/src/web/hooks/use-git-repo.ts +36 -16
- package/src/web/hooks/use-global-events.ts +4 -0
- package/src/web/hooks/use-inline-blame.ts +17 -11
- package/src/web/hooks/use-notification-clicks.ts +23 -5
- package/src/web/hooks/use-session-file-changes.ts +118 -41
- package/src/web/hooks/use-url-sync.ts +5 -4
- package/src/web/lib/api-settings.ts +2 -0
- package/src/web/lib/chat-attempt-lifecycle.ts +3 -1
- package/src/web/lib/db-tool-call.ts +57 -0
- package/src/web/lib/design/api-design-comments.ts +39 -9
- package/src/web/lib/design/api-design-shares.ts +47 -0
- package/src/web/lib/design/design-comments-prompt.ts +108 -23
- package/src/web/lib/design/design-layout-mode.ts +16 -1
- package/src/web/lib/design/design-share-address-state.ts +88 -0
- package/src/web/lib/design/design-share-expiry.ts +96 -0
- package/src/web/lib/design/design-share-link-status.ts +66 -0
- package/src/web/lib/design/design-view-prefs.ts +20 -1
- package/src/web/lib/design/open-design-tab.ts +54 -1
- package/src/web/lib/git-repo-scope.ts +60 -0
- package/src/web/lib/icons.generated.tsx +3 -1
- package/src/web/lib/model-display-name.ts +16 -0
- package/src/web/lib/open-ai-tab.ts +129 -19
- package/src/web/lib/running-agent-rows.ts +52 -0
- package/src/web/lib/session-file-changes-client.ts +6 -0
- package/src/web/lib/session-file-changes.ts +13 -0
- package/src/web/lib/tab-tool-call.ts +37 -1
- package/src/web/lib/utils.ts +4 -1
- package/src/web/stores/panel-store.ts +13 -1
- package/src/web/stores/panel-utils.ts +9 -4
- package/src/web/stores/settings-store.ts +14 -0
- package/src/web/stores/window-panel-actions.ts +21 -3
- package/src/web/stores/window-panel-persistence.ts +2 -1
- package/src/web/sw-notification-click.ts +12 -1
- package/templates/skill/SKILL.md.tmpl +2 -1
- package/templates/skill/common-tasks.md +6 -0
- package/vite.config.ts +10 -0
- package/vite.share.config.ts +43 -0
- package/dist/web/assets/accounts-settings-section-DU-lTifs.js +0 -1
- package/dist/web/assets/accounts-settings-section-DU-lTifs.js.br +0 -0
- package/dist/web/assets/accounts-settings-section-DU-lTifs.js.gz +0 -0
- package/dist/web/assets/adaptive-context-menu-Cq7ynvIn.js +0 -1
- package/dist/web/assets/adaptive-context-menu-Cq7ynvIn.js.br +0 -0
- package/dist/web/assets/adaptive-context-menu-Cq7ynvIn.js.gz +0 -0
- package/dist/web/assets/agent-session-sheet-At6Rt-Yf.js +0 -2
- package/dist/web/assets/agent-session-sheet-At6Rt-Yf.js.br +0 -0
- package/dist/web/assets/agent-session-sheet-At6Rt-Yf.js.gz +0 -0
- package/dist/web/assets/agent-session-sheet-store-BoBrAw5i.js +0 -1
- package/dist/web/assets/agent-session-window-content-CB_uvabH.js +0 -1
- package/dist/web/assets/agent-session-window-content-CB_uvabH.js.br +0 -0
- package/dist/web/assets/agent-session-window-content-CB_uvabH.js.gz +0 -0
- package/dist/web/assets/ai-resource-editor-Czearm3I.js +0 -1
- package/dist/web/assets/ai-resource-editor-Czearm3I.js.br +0 -0
- package/dist/web/assets/ai-resource-editor-Czearm3I.js.gz +0 -0
- package/dist/web/assets/ai-settings-section-AOgAUCgH.js +0 -1
- package/dist/web/assets/ai-settings-section-B_OFMlrt.js +0 -1
- package/dist/web/assets/ai-settings-section-B_OFMlrt.js.br +0 -0
- package/dist/web/assets/ai-settings-section-B_OFMlrt.js.gz +0 -0
- package/dist/web/assets/android-tab-L7DmLfHG.js +0 -2
- package/dist/web/assets/android-tab-L7DmLfHG.js.br +0 -0
- package/dist/web/assets/android-tab-L7DmLfHG.js.gz +0 -0
- package/dist/web/assets/api-client-DAQfiXg0.js +0 -1
- package/dist/web/assets/api-client-OiA8Ida1.js +0 -1
- package/dist/web/assets/api-client-OiA8Ida1.js.br +0 -0
- package/dist/web/assets/api-client-OiA8Ida1.js.gz +0 -0
- package/dist/web/assets/api-settings-D2H6gjen.js +0 -1
- package/dist/web/assets/api-settings-D2H6gjen.js.br +0 -0
- package/dist/web/assets/api-settings-D2H6gjen.js.gz +0 -0
- package/dist/web/assets/api-settings-DHhcUHtx.js +0 -1
- package/dist/web/assets/api-themes-CE8gPZ3X.js +0 -1
- package/dist/web/assets/appearance-settings-section-s3KWKTBm.js +0 -1
- package/dist/web/assets/appearance-settings-section-s3KWKTBm.js.br +0 -0
- package/dist/web/assets/appearance-settings-section-s3KWKTBm.js.gz +0 -0
- package/dist/web/assets/apps-panel-DaojtUvh.js +0 -1
- package/dist/web/assets/apps-panel-DaojtUvh.js.br +0 -0
- package/dist/web/assets/apps-panel-DaojtUvh.js.gz +0 -0
- package/dist/web/assets/audio-preview-CWcPZqTA.js +0 -1
- package/dist/web/assets/audio-preview-CWcPZqTA.js.br +0 -4
- package/dist/web/assets/audio-preview-CWcPZqTA.js.gz +0 -0
- package/dist/web/assets/branch-review-tab-9UB4ccpF.js +0 -1
- package/dist/web/assets/branch-review-tab-9UB4ccpF.js.br +0 -0
- package/dist/web/assets/branch-review-tab-9UB4ccpF.js.gz +0 -0
- package/dist/web/assets/button-Br60hGkw.js +0 -1
- package/dist/web/assets/button-Br60hGkw.js.br +0 -0
- package/dist/web/assets/button-Br60hGkw.js.gz +0 -0
- package/dist/web/assets/chat-preparation-cache-CRX9WAK5.js +0 -1
- package/dist/web/assets/chat-preparation-cache-CRX9WAK5.js.br +0 -0
- package/dist/web/assets/chat-preparation-cache-CRX9WAK5.js.gz +0 -0
- package/dist/web/assets/chat-tab-DMVb_mgx.js +0 -1
- package/dist/web/assets/chat-tab-DMVb_mgx.js.br +0 -0
- package/dist/web/assets/chat-tab-DMVb_mgx.js.gz +0 -0
- package/dist/web/assets/chat-tab-s7uAnh-h.js +0 -17
- package/dist/web/assets/chat-tab-s7uAnh-h.js.br +0 -0
- package/dist/web/assets/chat-tab-s7uAnh-h.js.gz +0 -0
- package/dist/web/assets/code-editor-JK49X9EX.js +0 -10
- package/dist/web/assets/code-editor-JK49X9EX.js.br +0 -0
- package/dist/web/assets/code-editor-JK49X9EX.js.gz +0 -0
- package/dist/web/assets/codex-reset-credit-button-CxJsBnff.js +0 -1
- package/dist/web/assets/codex-reset-credit-button-CxJsBnff.js.br +0 -0
- package/dist/web/assets/codex-reset-credit-button-CxJsBnff.js.gz +0 -0
- package/dist/web/assets/conflict-editor-rOpVkK9P.js +0 -19
- package/dist/web/assets/conflict-editor-rOpVkK9P.js.br +0 -0
- package/dist/web/assets/conflict-editor-rOpVkK9P.js.gz +0 -0
- package/dist/web/assets/connection-form-tab-BGmb918E.js +0 -4
- package/dist/web/assets/connection-form-tab-BGmb918E.js.br +0 -0
- package/dist/web/assets/connection-form-tab-BGmb918E.js.gz +0 -0
- package/dist/web/assets/context-menu-BoQ6lxte.js +0 -1
- package/dist/web/assets/context-menu-BoQ6lxte.js.br +0 -0
- package/dist/web/assets/context-menu-BoQ6lxte.js.gz +0 -0
- package/dist/web/assets/createLucideIcon-DBXq3G0e.js +0 -1
- package/dist/web/assets/createLucideIcon-DBXq3G0e.js.br +0 -0
- package/dist/web/assets/createLucideIcon-DBXq3G0e.js.gz +0 -0
- package/dist/web/assets/csv-preview-CM7su92m.js +0 -10
- package/dist/web/assets/csv-preview-CM7su92m.js.br +0 -0
- package/dist/web/assets/csv-preview-CM7su92m.js.gz +0 -0
- package/dist/web/assets/database-drivers-section-C6ZKPWaE.js +0 -1
- package/dist/web/assets/database-drivers-section-C6ZKPWaE.js.br +0 -0
- package/dist/web/assets/database-drivers-section-C6ZKPWaE.js.gz +0 -0
- package/dist/web/assets/db-explorer-store-BcLxq-X0.js +0 -1
- package/dist/web/assets/db-explorer-store-BcLxq-X0.js.br +0 -0
- package/dist/web/assets/db-explorer-store-BcLxq-X0.js.gz +0 -0
- package/dist/web/assets/db-tab-parts-DvmnlA6V.js +0 -1
- package/dist/web/assets/db-tab-parts-DvmnlA6V.js.br +0 -0
- package/dist/web/assets/db-tab-parts-DvmnlA6V.js.gz +0 -0
- package/dist/web/assets/db-types-9ac-eYxf.js +0 -1
- package/dist/web/assets/db-types-9ac-eYxf.js.br +0 -0
- package/dist/web/assets/db-types-9ac-eYxf.js.gz +0 -0
- package/dist/web/assets/design-canvas-check-Bo76Q6Qr.js +0 -1
- package/dist/web/assets/design-canvas-check-Bo76Q6Qr.js.br +0 -0
- package/dist/web/assets/design-canvas-check-Bo76Q6Qr.js.gz +0 -0
- package/dist/web/assets/design-export-client-ClwRg798.js +0 -1
- package/dist/web/assets/design-export-client-ClwRg798.js.br +0 -0
- package/dist/web/assets/design-export-client-ClwRg798.js.gz +0 -0
- package/dist/web/assets/design-responsive-dialog-Cdccv3Nw.js +0 -1
- package/dist/web/assets/design-responsive-dialog-Cdccv3Nw.js.br +0 -0
- package/dist/web/assets/design-responsive-dialog-Cdccv3Nw.js.gz +0 -0
- package/dist/web/assets/design-settings-section-CuxZSLAr.js +0 -2
- package/dist/web/assets/design-settings-section-CuxZSLAr.js.br +0 -0
- package/dist/web/assets/design-settings-section-CuxZSLAr.js.gz +0 -0
- package/dist/web/assets/design-skill-suggestion-DZQjG8FV.js +0 -3
- package/dist/web/assets/design-skill-suggestion-DZQjG8FV.js.br +0 -0
- package/dist/web/assets/design-skill-suggestion-DZQjG8FV.js.gz +0 -0
- package/dist/web/assets/design-tab-JlKmHVkd.js +0 -57
- package/dist/web/assets/design-tab-JlKmHVkd.js.br +0 -0
- package/dist/web/assets/design-tab-JlKmHVkd.js.gz +0 -0
- package/dist/web/assets/designs-sidebar-panel-C1EwWf4Z.js +0 -1
- package/dist/web/assets/designs-sidebar-panel-C1EwWf4Z.js.br +0 -0
- package/dist/web/assets/designs-sidebar-panel-C1EwWf4Z.js.gz +0 -0
- package/dist/web/assets/dialog-DOaEX6AK.js +0 -1
- package/dist/web/assets/dialog-DOaEX6AK.js.br +0 -0
- package/dist/web/assets/dialog-DOaEX6AK.js.gz +0 -0
- package/dist/web/assets/diff-viewer-FidH7Nsq.js +0 -4
- package/dist/web/assets/diff-viewer-FidH7Nsq.js.br +0 -0
- package/dist/web/assets/diff-viewer-FidH7Nsq.js.gz +0 -0
- package/dist/web/assets/docx-preview-ENiLGqzy.js +0 -12
- package/dist/web/assets/docx-preview-ENiLGqzy.js.br +0 -0
- package/dist/web/assets/docx-preview-ENiLGqzy.js.gz +0 -0
- package/dist/web/assets/dropdown-menu-DB3yyoVz.js +0 -1
- package/dist/web/assets/dropdown-menu-DB3yyoVz.js.br +0 -0
- package/dist/web/assets/dropdown-menu-DB3yyoVz.js.gz +0 -0
- package/dist/web/assets/edit-diff-preview-D4EqC86X.js +0 -7
- package/dist/web/assets/edit-diff-preview-D4EqC86X.js.br +0 -0
- package/dist/web/assets/edit-diff-preview-D4EqC86X.js.gz +0 -0
- package/dist/web/assets/editor-dialog-DC7dUWAX.js +0 -1
- package/dist/web/assets/editor-dialog-DC7dUWAX.js.br +0 -0
- package/dist/web/assets/editor-dialog-DC7dUWAX.js.gz +0 -0
- package/dist/web/assets/editor-language-service-0pN0TxYN.js +0 -1
- package/dist/web/assets/editor-language-service-0pN0TxYN.js.br +0 -0
- package/dist/web/assets/editor-language-service-0pN0TxYN.js.gz +0 -0
- package/dist/web/assets/explorer-body-tFaUp9_Q.js +0 -2
- package/dist/web/assets/explorer-body-tFaUp9_Q.js.br +0 -0
- package/dist/web/assets/explorer-body-tFaUp9_Q.js.gz +0 -0
- package/dist/web/assets/explorer-model-BmgFEsj1.js +0 -1
- package/dist/web/assets/explorer-model-BmgFEsj1.js.br +0 -0
- package/dist/web/assets/explorer-model-BmgFEsj1.js.gz +0 -0
- package/dist/web/assets/explorer-window-content-XnRTZT_X.js +0 -1
- package/dist/web/assets/explorer-window-content-XnRTZT_X.js.br +0 -0
- package/dist/web/assets/explorer-window-content-XnRTZT_X.js.gz +0 -0
- package/dist/web/assets/extension-manager-section-DEbwRPf1.js +0 -1
- package/dist/web/assets/extension-manager-section-DEbwRPf1.js.br +0 -0
- package/dist/web/assets/extension-manager-section-DEbwRPf1.js.gz +0 -0
- package/dist/web/assets/extension-webview-C9ApceLU.js +0 -12
- package/dist/web/assets/extension-webview-C9ApceLU.js.br +0 -0
- package/dist/web/assets/extension-webview-C9ApceLU.js.gz +0 -0
- package/dist/web/assets/file-diff-lX1a7RLF.js +0 -1
- package/dist/web/assets/file-icons-DpwcJLL4.js +0 -1
- package/dist/web/assets/file-icons-DpwcJLL4.js.br +0 -0
- package/dist/web/assets/file-icons-DpwcJLL4.js.gz +0 -0
- package/dist/web/assets/file-store-Bk1WYfdy.js +0 -1
- package/dist/web/assets/file-store-Bk1WYfdy.js.br +0 -0
- package/dist/web/assets/file-store-Bk1WYfdy.js.gz +0 -0
- package/dist/web/assets/files-settings-section-C8MacVFQ.js +0 -1
- package/dist/web/assets/files-settings-section-C8MacVFQ.js.br +0 -0
- package/dist/web/assets/files-settings-section-C8MacVFQ.js.gz +0 -0
- package/dist/web/assets/filter-dialog-frame-CoWlaNRy.js +0 -1
- package/dist/web/assets/filter-dialog-frame-CoWlaNRy.js.br +0 -0
- package/dist/web/assets/filter-dialog-frame-CoWlaNRy.js.gz +0 -0
- package/dist/web/assets/format-file-meta-C0LKHE3e.js +0 -1
- package/dist/web/assets/format-file-meta-C0LKHE3e.js.br +0 -0
- package/dist/web/assets/format-file-meta-C0LKHE3e.js.gz +0 -0
- package/dist/web/assets/fs-api-BQrIEcvo.js +0 -1
- package/dist/web/assets/fs-api-BQrIEcvo.js.br +0 -0
- package/dist/web/assets/fs-api-BQrIEcvo.js.gz +0 -0
- package/dist/web/assets/general-settings-section-DZRRGdlQ.js +0 -1
- package/dist/web/assets/general-settings-section-DZRRGdlQ.js.br +0 -0
- package/dist/web/assets/general-settings-section-DZRRGdlQ.js.gz +0 -0
- package/dist/web/assets/git-commit-horizontal-BVihXafd.js +0 -1
- package/dist/web/assets/git-log-panel-g2pBnu6r.js +0 -1
- package/dist/web/assets/git-log-panel-g2pBnu6r.js.br +0 -0
- package/dist/web/assets/git-log-panel-g2pBnu6r.js.gz +0 -0
- package/dist/web/assets/git-repo-store-BOYLnV67.js +0 -1
- package/dist/web/assets/git-repo-store-BOYLnV67.js.br +0 -0
- package/dist/web/assets/git-repo-store-BOYLnV67.js.gz +0 -0
- package/dist/web/assets/git-review-tab-BzI5mxWd.js +0 -3
- package/dist/web/assets/git-review-tab-BzI5mxWd.js.br +0 -0
- package/dist/web/assets/git-review-tab-BzI5mxWd.js.gz +0 -0
- package/dist/web/assets/glide-data-grid-BxvI3ehr.js +0 -177
- package/dist/web/assets/glide-data-grid-BxvI3ehr.js.br +0 -0
- package/dist/web/assets/glide-data-grid-BxvI3ehr.js.gz +0 -0
- package/dist/web/assets/grid-save-dialog-D55Po6Vu.js +0 -2
- package/dist/web/assets/grid-save-dialog-D55Po6Vu.js.br +0 -0
- package/dist/web/assets/grid-save-dialog-D55Po6Vu.js.gz +0 -0
- package/dist/web/assets/group-chat-tab-CoMC-Fx1.js +0 -1
- package/dist/web/assets/group-chat-tab-CoMC-Fx1.js.br +0 -0
- package/dist/web/assets/group-chat-tab-CoMC-Fx1.js.gz +0 -0
- package/dist/web/assets/icons-JMA45Ifw.js +0 -1
- package/dist/web/assets/icons-JMA45Ifw.js.br +0 -0
- package/dist/web/assets/icons-JMA45Ifw.js.gz +0 -0
- package/dist/web/assets/image-preview-D7KR11Xo.js +0 -1
- package/dist/web/assets/impexp-tab-JF6JF8eO.js +0 -1
- package/dist/web/assets/impexp-tab-JF6JF8eO.js.br +0 -0
- package/dist/web/assets/impexp-tab-JF6JF8eO.js.gz +0 -0
- package/dist/web/assets/index-DyYGWFVa.css +0 -1
- package/dist/web/assets/index-DyYGWFVa.css.br +0 -0
- package/dist/web/assets/index-DyYGWFVa.css.gz +0 -0
- package/dist/web/assets/index-ItT-dTPV.js +0 -59
- package/dist/web/assets/index-ItT-dTPV.js.br +0 -0
- package/dist/web/assets/index-ItT-dTPV.js.gz +0 -0
- package/dist/web/assets/input-CKGoVpYv.js +0 -1
- package/dist/web/assets/jira-watcher-section-CvyXLyjO.js +0 -1
- package/dist/web/assets/keybindings-store-CeEtx6js.js +0 -1
- package/dist/web/assets/keyboard-shortcuts-section-MUIE0Rvf.js +0 -1
- package/dist/web/assets/keyboard-shortcuts-section-MUIE0Rvf.js.br +0 -0
- package/dist/web/assets/keyboard-shortcuts-section-MUIE0Rvf.js.gz +0 -0
- package/dist/web/assets/language-servers-section-DiYURB24.js +0 -2
- package/dist/web/assets/language-servers-section-DiYURB24.js.br +0 -0
- package/dist/web/assets/language-servers-section-DiYURB24.js.gz +0 -0
- package/dist/web/assets/logs-app-CJlNqOdc.js +0 -13
- package/dist/web/assets/logs-app-CJlNqOdc.js.br +0 -0
- package/dist/web/assets/logs-app-CJlNqOdc.js.gz +0 -0
- package/dist/web/assets/logs-tab-BoAlm_8H.js +0 -1
- package/dist/web/assets/logs-window-content-nNm4jl1s.js +0 -1
- package/dist/web/assets/lsp-client-LnKiMWeG.js +0 -1
- package/dist/web/assets/lsp-client-LnKiMWeG.js.br +0 -0
- package/dist/web/assets/lsp-client-LnKiMWeG.js.gz +0 -0
- package/dist/web/assets/markdown-renderer-8Hef5MLx.js +0 -1
- package/dist/web/assets/markdown-renderer-BH_CFPJw.js +0 -5
- package/dist/web/assets/markdown-renderer-BH_CFPJw.js.br +0 -0
- package/dist/web/assets/markdown-renderer-BH_CFPJw.js.gz +0 -0
- package/dist/web/assets/media-url-CsdZ6q_T.js +0 -1
- package/dist/web/assets/metric-chart-canvas-LAMaVJTu.js +0 -1
- package/dist/web/assets/metric-chart-canvas-LAMaVJTu.js.br +0 -0
- package/dist/web/assets/metric-chart-canvas-LAMaVJTu.js.gz +0 -0
- package/dist/web/assets/mobile-bottom-sheet-CGmmdp_5.js +0 -1
- package/dist/web/assets/mobile-bottom-sheet-CGmmdp_5.js.br +0 -0
- package/dist/web/assets/mobile-bottom-sheet-CGmmdp_5.js.gz +0 -0
- package/dist/web/assets/mobile-explorer-sheet-Dh2ZECzL.js +0 -1
- package/dist/web/assets/mobile-explorer-sheet-Dh2ZECzL.js.br +0 -0
- package/dist/web/assets/mobile-explorer-sheet-Dh2ZECzL.js.gz +0 -0
- package/dist/web/assets/new-design-dialog-CgBUrVFx.js +0 -1
- package/dist/web/assets/new-design-dialog-CgBUrVFx.js.br +0 -0
- package/dist/web/assets/new-design-dialog-CgBUrVFx.js.gz +0 -0
- package/dist/web/assets/notification-store-CXC7u6MW.js +0 -1
- package/dist/web/assets/notifications-settings-section-CPbx23nU.js +0 -1
- package/dist/web/assets/notifications-settings-section-CPbx23nU.js.br +0 -0
- package/dist/web/assets/notifications-settings-section-CPbx23nU.js.gz +0 -0
- package/dist/web/assets/onboarding-entry--MWe4amV.js +0 -1
- package/dist/web/assets/onboarding-entry--MWe4amV.js.br +0 -0
- package/dist/web/assets/onboarding-entry--MWe4amV.js.gz +0 -0
- package/dist/web/assets/onboarding-quick-orientation-DZYQekRt.js +0 -1
- package/dist/web/assets/onboarding-quick-orientation-DZYQekRt.js.br +0 -0
- package/dist/web/assets/onboarding-quick-orientation-DZYQekRt.js.gz +0 -0
- package/dist/web/assets/open-db-tabs-CkQe49j_.js +0 -1
- package/dist/web/assets/open-db-tabs-CkQe49j_.js.br +0 -0
- package/dist/web/assets/open-db-tabs-CkQe49j_.js.gz +0 -0
- package/dist/web/assets/open-settings-DsGBn73g.js +0 -1
- package/dist/web/assets/overview-panel-CcUGDvnt.js +0 -1
- package/dist/web/assets/overview-panel-CcUGDvnt.js.br +0 -0
- package/dist/web/assets/overview-panel-CcUGDvnt.js.gz +0 -0
- package/dist/web/assets/panel-store-DmP16Fo0.js +0 -1
- package/dist/web/assets/panel-store-DmP16Fo0.js.br +0 -0
- package/dist/web/assets/panel-store-DmP16Fo0.js.gz +0 -0
- package/dist/web/assets/patch-tab-metadata-B-jH5svY.js +0 -1
- package/dist/web/assets/pdf-preview-DMUIWb9B.js +0 -1
- package/dist/web/assets/pdf-preview-DMUIWb9B.js.br +0 -0
- package/dist/web/assets/pdf-preview-DMUIWb9B.js.gz +0 -0
- package/dist/web/assets/performance-panel-CJDLUwrs.js +0 -3
- package/dist/web/assets/performance-panel-CJDLUwrs.js.br +0 -0
- package/dist/web/assets/performance-panel-CJDLUwrs.js.gz +0 -0
- package/dist/web/assets/portal-container-context-BXAsDqrB.js +0 -1
- package/dist/web/assets/ppmbot-settings-section-DTCTPQ-R.js +0 -1
- package/dist/web/assets/ppmbot-settings-section-DTCTPQ-R.js.br +0 -0
- package/dist/web/assets/ppmbot-settings-section-DTCTPQ-R.js.gz +0 -0
- package/dist/web/assets/pptx-export-BxmgltJ4.js +0 -111
- package/dist/web/assets/pptx-export-BxmgltJ4.js.br +0 -0
- package/dist/web/assets/pptx-export-BxmgltJ4.js.gz +0 -0
- package/dist/web/assets/problems-panel-DX32QDH_.js +0 -1
- package/dist/web/assets/problems-panel-DX32QDH_.js.br +0 -0
- package/dist/web/assets/problems-panel-DX32QDH_.js.gz +0 -0
- package/dist/web/assets/process-row-format-CBw-CQCx.js +0 -1
- package/dist/web/assets/process-table-CX-NhOg6.js +0 -1
- package/dist/web/assets/process-table-CX-NhOg6.js.br +0 -0
- package/dist/web/assets/process-table-CX-NhOg6.js.gz +0 -0
- package/dist/web/assets/project-framework-store-Bi5dyHdx.js +0 -1
- package/dist/web/assets/project-store-CEGoLMOl.js +0 -1
- package/dist/web/assets/project-store-CEGoLMOl.js.br +0 -0
- package/dist/web/assets/project-store-CEGoLMOl.js.gz +0 -0
- package/dist/web/assets/proxy-settings-section-BGNvFe7e.js +0 -1
- package/dist/web/assets/proxy-settings-section-BGNvFe7e.js.br +0 -0
- package/dist/web/assets/proxy-settings-section-BGNvFe7e.js.gz +0 -0
- package/dist/web/assets/query-audit-section-DTHI5GP7.js +0 -1
- package/dist/web/assets/query-audit-section-DTHI5GP7.js.br +0 -0
- package/dist/web/assets/query-audit-section-DTHI5GP7.js.gz +0 -0
- package/dist/web/assets/query-tab-qMlIkHRk.js +0 -22
- package/dist/web/assets/query-tab-qMlIkHRk.js.br +0 -0
- package/dist/web/assets/query-tab-qMlIkHRk.js.gz +0 -0
- package/dist/web/assets/react-PkBxFcos.js +0 -1
- package/dist/web/assets/remote-access-settings-section-t2BYAA9g.js +0 -1
- package/dist/web/assets/remote-access-settings-section-t2BYAA9g.js.br +0 -0
- package/dist/web/assets/remote-access-settings-section-t2BYAA9g.js.gz +0 -0
- package/dist/web/assets/remote-desktop-clipboard-notice-ChUU6Jts.js +0 -1
- package/dist/web/assets/remote-desktop-clipboard-notice-ChUU6Jts.js.br +0 -0
- package/dist/web/assets/remote-desktop-clipboard-notice-ChUU6Jts.js.gz +0 -0
- package/dist/web/assets/remote-desktop-mobile-sheet-_bopEtCa.js +0 -2
- package/dist/web/assets/remote-desktop-mobile-sheet-_bopEtCa.js.br +0 -0
- package/dist/web/assets/remote-desktop-mobile-sheet-_bopEtCa.js.gz +0 -0
- package/dist/web/assets/remote-desktop-mobile-view-D9G4kDfa.js +0 -1
- package/dist/web/assets/remote-desktop-mobile-view-D9G4kDfa.js.br +0 -0
- package/dist/web/assets/remote-desktop-mobile-view-D9G4kDfa.js.gz +0 -0
- package/dist/web/assets/remote-desktop-readiness-gate-Yz9eVB3-.js +0 -1
- package/dist/web/assets/remote-desktop-readiness-gate-Yz9eVB3-.js.br +0 -0
- package/dist/web/assets/remote-desktop-readiness-gate-Yz9eVB3-.js.gz +0 -0
- package/dist/web/assets/remote-desktop-settings-section-BTGGSjZY.js +0 -1
- package/dist/web/assets/remote-desktop-settings-section-BTGGSjZY.js.br +0 -0
- package/dist/web/assets/remote-desktop-settings-section-BTGGSjZY.js.gz +0 -0
- package/dist/web/assets/remote-desktop-window-content-B8ZaG2bL.js +0 -1
- package/dist/web/assets/remote-desktop-window-content-B8ZaG2bL.js.br +0 -0
- package/dist/web/assets/remote-desktop-window-content-B8ZaG2bL.js.gz +0 -0
- package/dist/web/assets/rename-object-dialog-FSlcdUoB.js +0 -1
- package/dist/web/assets/rename-object-dialog-FSlcdUoB.js.br +0 -0
- package/dist/web/assets/rename-object-dialog-FSlcdUoB.js.gz +0 -0
- package/dist/web/assets/review-code-CfuJeLYd.js +0 -5
- package/dist/web/assets/review-code-CfuJeLYd.js.br +0 -0
- package/dist/web/assets/review-code-CfuJeLYd.js.gz +0 -0
- package/dist/web/assets/run-in-terminal-Bk9Bw7G1.js +0 -1
- package/dist/web/assets/run-in-terminal-button-DFPQUlZs.js +0 -1
- package/dist/web/assets/save-as-dialog-Bj9VpGYf.js +0 -1
- package/dist/web/assets/save-as-dialog-Bj9VpGYf.js.br +0 -0
- package/dist/web/assets/save-as-dialog-Bj9VpGYf.js.gz +0 -0
- package/dist/web/assets/schedules-settings-section-DNJ4K7zS.js +0 -1
- package/dist/web/assets/schedules-settings-section-DNJ4K7zS.js.br +0 -0
- package/dist/web/assets/schedules-settings-section-DNJ4K7zS.js.gz +0 -0
- package/dist/web/assets/scroll-area-6Am1KMiB.js +0 -1
- package/dist/web/assets/scroll-area-6Am1KMiB.js.br +0 -0
- package/dist/web/assets/scroll-area-6Am1KMiB.js.gz +0 -0
- package/dist/web/assets/send-to-chat-Bcm_Lcog.js +0 -1
- package/dist/web/assets/send-to-chat-Bcm_Lcog.js.br +0 -0
- package/dist/web/assets/send-to-chat-Bcm_Lcog.js.gz +0 -0
- package/dist/web/assets/separator-BOYUIPkH.js +0 -1
- package/dist/web/assets/services-panel-CBRTsROB.js +0 -1
- package/dist/web/assets/services-panel-CBRTsROB.js.br +0 -0
- package/dist/web/assets/services-panel-CBRTsROB.js.gz +0 -0
- package/dist/web/assets/session-changes-bar-BRopa3Dh.js +0 -1
- package/dist/web/assets/session-changes-bar-BRopa3Dh.js.br +0 -0
- package/dist/web/assets/session-changes-bar-BRopa3Dh.js.gz +0 -0
- package/dist/web/assets/session-list-sync-triggers-DitiR5h1.js +0 -1
- package/dist/web/assets/session-list-sync-triggers-DitiR5h1.js.br +0 -0
- package/dist/web/assets/session-list-sync-triggers-DitiR5h1.js.gz +0 -0
- package/dist/web/assets/session-review-tab--kNB_FKQ.js +0 -6
- package/dist/web/assets/session-review-tab--kNB_FKQ.js.br +0 -0
- package/dist/web/assets/session-review-tab--kNB_FKQ.js.gz +0 -0
- package/dist/web/assets/settings-body-B-s0fEjc.js +0 -1
- package/dist/web/assets/settings-body-B-s0fEjc.js.br +0 -0
- package/dist/web/assets/settings-body-B-s0fEjc.js.gz +0 -0
- package/dist/web/assets/settings-categories-CcR9eL3x.js +0 -1
- package/dist/web/assets/settings-categories-CcR9eL3x.js.br +0 -0
- package/dist/web/assets/settings-categories-CcR9eL3x.js.gz +0 -0
- package/dist/web/assets/settings-section-content-BJ35dy5r.js +0 -1
- package/dist/web/assets/settings-section-content-DckksvTg.js +0 -2
- package/dist/web/assets/settings-section-content-DckksvTg.js.br +0 -0
- package/dist/web/assets/settings-section-content-DckksvTg.js.gz +0 -0
- package/dist/web/assets/settings-store-WeJyQVL8.js +0 -2
- package/dist/web/assets/settings-store-WeJyQVL8.js.br +0 -0
- package/dist/web/assets/settings-store-WeJyQVL8.js.gz +0 -0
- package/dist/web/assets/settings-tab-BlX33GEN.js +0 -1
- package/dist/web/assets/settings-window-content-B-7yV1_q.js +0 -1
- package/dist/web/assets/slash-command-picker-BBcy6w6m.js +0 -1
- package/dist/web/assets/slash-command-picker-BBcy6w6m.js.br +0 -0
- package/dist/web/assets/slash-command-picker-BBcy6w6m.js.gz +0 -0
- package/dist/web/assets/sortable-header-B9gfWik4.js +0 -1
- package/dist/web/assets/sortable-header-B9gfWik4.js.br +0 -0
- package/dist/web/assets/sortable-header-B9gfWik4.js.gz +0 -0
- package/dist/web/assets/sql-completion-provider-CaTHVr1l.js +0 -5
- package/dist/web/assets/sql-completion-provider-CaTHVr1l.js.br +0 -0
- package/dist/web/assets/sql-completion-provider-CaTHVr1l.js.gz +0 -0
- package/dist/web/assets/sql-object-tab-DVo4bxRI.js +0 -1
- package/dist/web/assets/sql-object-tab-DVo4bxRI.js.br +0 -0
- package/dist/web/assets/sql-object-tab-DVo4bxRI.js.gz +0 -0
- package/dist/web/assets/sqlite-viewer-BGfIpl5x.js +0 -1
- package/dist/web/assets/sqlite-viewer-BGfIpl5x.js.br +0 -0
- package/dist/web/assets/sqlite-viewer-BGfIpl5x.js.gz +0 -0
- package/dist/web/assets/start-ellipsis-rBh37k0n.js +0 -1
- package/dist/web/assets/structure-save-dialog-STK_RFCK.js +0 -1
- package/dist/web/assets/structure-save-dialog-STK_RFCK.js.br +0 -0
- package/dist/web/assets/structure-save-dialog-STK_RFCK.js.gz +0 -0
- package/dist/web/assets/structure-tab-DuLnsTC4.js +0 -3
- package/dist/web/assets/structure-tab-DuLnsTC4.js.br +0 -0
- package/dist/web/assets/structure-tab-DuLnsTC4.js.gz +0 -0
- package/dist/web/assets/system-monitor-body-BIjW16Pb.js +0 -2
- package/dist/web/assets/system-monitor-body-BIjW16Pb.js.br +0 -0
- package/dist/web/assets/system-monitor-body-BIjW16Pb.js.gz +0 -0
- package/dist/web/assets/system-monitor-tab-B6_tC9LO.js +0 -1
- package/dist/web/assets/system-monitor-window-content-CwBzqMUe.js +0 -1
- package/dist/web/assets/tab-host-window-content-CpdEjkZd.js +0 -1
- package/dist/web/assets/tab-host-window-content-CpdEjkZd.js.br +0 -0
- package/dist/web/assets/tab-host-window-content-CpdEjkZd.js.gz +0 -0
- package/dist/web/assets/tab-store-nNzRNfVV.js +0 -1
- package/dist/web/assets/table-tab-B5asfTBP.js +0 -2
- package/dist/web/assets/table-tab-B5asfTBP.js.br +0 -0
- package/dist/web/assets/table-tab-B5asfTBP.js.gz +0 -0
- package/dist/web/assets/telegram-bot-token-field-BiqKbXwE.js +0 -1
- package/dist/web/assets/telegram-bot-token-field-BiqKbXwE.js.br +0 -0
- package/dist/web/assets/telegram-bot-token-field-BiqKbXwE.js.gz +0 -0
- package/dist/web/assets/terminal-tab-DpMONMVB.js +0 -3
- package/dist/web/assets/terminal-tab-DpMONMVB.js.br +0 -0
- package/dist/web/assets/terminal-tab-DpMONMVB.js.gz +0 -0
- package/dist/web/assets/tool-cards-DoDKxqN4.js +0 -14
- package/dist/web/assets/tool-cards-DoDKxqN4.js.br +0 -0
- package/dist/web/assets/tool-cards-DoDKxqN4.js.gz +0 -0
- package/dist/web/assets/use-at-most-wide-BQFi1Sjv.js +0 -1
- package/dist/web/assets/use-blob-url-D7ElNPnW.js +0 -1
- package/dist/web/assets/use-db-driver-installed-BscdI-wS.js +0 -1
- package/dist/web/assets/use-db-read-DYuyNA5i.js +0 -1
- package/dist/web/assets/use-db-read-DYuyNA5i.js.br +0 -0
- package/dist/web/assets/use-db-read-DYuyNA5i.js.gz +0 -0
- package/dist/web/assets/use-db-tab-Cr4lXxwF.js +0 -1
- package/dist/web/assets/use-db-tab-Cr4lXxwF.js.br +0 -0
- package/dist/web/assets/use-db-tab-Cr4lXxwF.js.gz +0 -0
- package/dist/web/assets/use-design-canvas-check-DKlyMp-S.js +0 -1
- package/dist/web/assets/use-design-canvas-check-DKlyMp-S.js.br +0 -0
- package/dist/web/assets/use-design-canvas-check-DKlyMp-S.js.gz +0 -0
- package/dist/web/assets/use-h264-canvas-decoder-DAjp9oHe.js +0 -1
- package/dist/web/assets/use-h264-canvas-decoder-DAjp9oHe.js.br +0 -0
- package/dist/web/assets/use-h264-canvas-decoder-DAjp9oHe.js.gz +0 -0
- package/dist/web/assets/use-inline-blame-DS0HrHJ3.js +0 -16
- package/dist/web/assets/use-inline-blame-DS0HrHJ3.js.br +0 -0
- package/dist/web/assets/use-inline-blame-DS0HrHJ3.js.gz +0 -0
- package/dist/web/assets/use-is-mobile-BXHbkfs9.js +0 -1
- package/dist/web/assets/use-lsp-BTVDYrt6.js +0 -6
- package/dist/web/assets/use-lsp-BTVDYrt6.js.br +0 -0
- package/dist/web/assets/use-lsp-BTVDYrt6.js.gz +0 -0
- package/dist/web/assets/use-monaco-theme-DqnhExsm.js +0 -1
- package/dist/web/assets/use-opener-focus-C5L5UUJs.js +0 -1
- package/dist/web/assets/use-process-kill-D-SGQxDn.js +0 -1
- package/dist/web/assets/use-process-kill-D-SGQxDn.js.br +0 -0
- package/dist/web/assets/use-process-kill-D-SGQxDn.js.gz +0 -0
- package/dist/web/assets/use-sql-schema-info-DRb9dAKi.js +0 -4
- package/dist/web/assets/use-sql-schema-info-DRb9dAKi.js.br +0 -0
- package/dist/web/assets/use-sql-schema-info-DRb9dAKi.js.gz +0 -0
- package/dist/web/assets/use-visual-viewport-CQ6-A0Dt.js +0 -1
- package/dist/web/assets/use-websocket-C6RnlNVJ.js +0 -1
- package/dist/web/assets/vendor-markdown-QKPNiWEd.js +0 -291
- package/dist/web/assets/vendor-markdown-QKPNiWEd.js.br +0 -0
- package/dist/web/assets/vendor-markdown-QKPNiWEd.js.gz +0 -0
- package/dist/web/assets/vendor-ui-CS1GvlOm.js +0 -45
- package/dist/web/assets/vendor-ui-CS1GvlOm.js.br +0 -0
- package/dist/web/assets/vendor-ui-CS1GvlOm.js.gz +0 -0
- package/dist/web/assets/video-preview-CYzeUPfH.js +0 -1
- package/dist/web/assets/video-preview-CYzeUPfH.js.br +0 -0
- package/dist/web/assets/video-preview-CYzeUPfH.js.gz +0 -0
- package/dist/web/assets/voice-settings-section-C01d-toF.js +0 -1
- package/dist/web/assets/voice-settings-section-C01d-toF.js.br +0 -0
- package/dist/web/assets/voice-settings-section-C01d-toF.js.gz +0 -0
- package/dist/web/assets/web-preview-tab-F5C3quQs.js +0 -1
- package/dist/web/assets/web-preview-tab-F5C3quQs.js.br +0 -0
- package/dist/web/assets/web-preview-tab-F5C3quQs.js.gz +0 -0
- package/dist/web/assets/window-pip-registry-DSoB7T3k.js +0 -1
- package/dist/web/assets/window-store-zJczRsv4.js +0 -1
- package/dist/web/assets/window-store-zJczRsv4.js.br +0 -0
- package/dist/web/assets/window-store-zJczRsv4.js.gz +0 -0
- package/dist/web/assets/ws-auth-cWeQ7_61.js +0 -1
- /package/dist/web/assets/{__vite-browser-external-B4VNaaaA.js → __vite-browser-external-DL4jXWNt.js} +0 -0
- /package/dist/web/assets/{clipboard-D3XnL7CB.js → clipboard-D-VCry-F.js} +0 -0
- /package/dist/web/assets/{clipboard-D3XnL7CB.js.br → clipboard-D-VCry-F.js.br} +0 -0
- /package/dist/web/assets/{clipboard-D3XnL7CB.js.gz → clipboard-D-VCry-F.js.gz} +0 -0
- /package/dist/web/assets/{code-fence-vHZyBehL.js → code-fence-BK57HRhJ.js} +0 -0
- /package/dist/web/assets/{design-system-status-label-Cus6e2Df.js → design-system-status-label-KA4ESjWe.js} +0 -0
- /package/dist/web/assets/{format-bytes-B2kC4sbB.js → format-bytes-he3TR0bV.js} +0 -0
- /package/dist/web/assets/{session-turns-gmrmXzeg.js → session-turns-D3QpTtCq.js} +0 -0
- /package/dist/web/assets/{session-turns-gmrmXzeg.js.br → session-turns-D3QpTtCq.js.br} +0 -0
- /package/dist/web/assets/{session-turns-gmrmXzeg.js.gz → session-turns-D3QpTtCq.js.gz} +0 -0
- /package/dist/web/assets/{vendor-xterm-sFX94k3w.js → vendor-xterm-DRhOk3kW.js} +0 -0
- /package/dist/web/assets/{vendor-xterm-sFX94k3w.js.br → vendor-xterm-DRhOk3kW.js.br} +0 -0
- /package/dist/web/assets/{vendor-xterm-sFX94k3w.js.gz → vendor-xterm-DRhOk3kW.js.gz} +0 -0
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import{$ as r,A as i,An as a,Cn as o,Cr as s,D as c,Dr as l,Ft as u,Gt as d,Hr as f,M as p,O as m,P as h,Vn as g,ai as _,br as v,c as ee,cr as y,dn as b,er as x,fr as S,gt as C,hr as te,ht as w,jn as T,jr as E,kr as D,li as O,m as k,nt as A,o as j,on as M,or as ne,qr as N,si as P,t as F,tt as re,ut as ie,vt as I,w as ae,xn as oe,xr as L}from"./icons-BwyIKaTT.js";import{k as R}from"./api-client-xQDlhUTu.js";import{t as z}from"./react-BZ0kba1-.js";import{t as B}from"./settings-store-B4mLp19V.js";import{n as V}from"./utils-Bslrbb-G.js";import{r as se,t as ce}from"./panel-store-BJhazigC.js";import{i as H}from"./project-store-BLGl9IAO.js";import{r as U}from"./clipboard-D-VCry-F.js";import{t as W}from"./button-C9ZXWb3b.js";import{a as G,i as K,l as le,m as ue,r as de,t as fe}from"./dropdown-menu-BQidk_OJ.js";import{t as q}from"./mobile-bottom-sheet-DArbIyrD.js";import{$t as pe,At as me,Bt as J,Ct as he,Dt as Y,Et as ge,F as _e,Ft as ve,Gt as ye,Ht as be,I as xe,It as Se,Ji as Ce,Jt as we,Ki as Te,Kn as Ee,Kt as De,Lt as Oe,Mt as ke,Nt as Ae,Ot as je,Pt as X,Qt as Me,Rt as Ne,St as Pe,Tt as Fe,Ut as Ie,Vt as Le,Wt as Re,Xt as ze,Yt as Be,Zt as Ve,_t as He,ai as Ue,at as We,bt as Ge,en as Ke,gt as qe,jt as Je,kt as Ye,nn as Xe,on as Ze,qi as Qe,qt as $e,rn as et,tn as tt,vt as nt,wt as rt,xt as it,yt as at,zt as ot}from"./index-DLB3j_P0.js";import{i as st,r as ct}from"./send-to-chat-CWV1qd3c.js";import{t as lt}from"./code-fence-BK57HRhJ.js";var ut=/\b[a-z0-9]+(?:-[a-z0-9]+)+\.trycloudflare\.com\b/gi,dt=[/()\b(?:sk-[\w-]{20,}|gh[pousr]_[A-Za-z0-9]{30,}|github_pat_\w{30,}|eyJ[\w-]{8,}\.eyJ[\w-]{8,}\.[\w-]*)/g,/(\d{6,}:)[\w-]{30,}/g,/(:\/\/[^/\s:@]*:)[^@\s/\u0001]+(?=@)/g,/([?&#][\w.-]*(?:token|key|secret|passw|auth|code|state|ticket|sig|credential)[\w.-]*=)[^&#\s"'<>[\]\u0001]+/gi,/(\b(?:proxy-)?authorization["']?\s*[:=]\s*["']?)(?:(?:basic|bearer|digest|token)\s+)?[^\s"',;\u0001]+/gi,/(\b(?:set-)?cookie["']?\s*[:=]\s*["']?)(?=[^\s=;"']+=)[^\r\n"'\u0001]+/gi,/(\bbearer\s+)[^\s"',;[\]\u0001]+/gi,/((?:token|secret|passw(?:or)?d|api[_-]?key|access[_-]?key|private[_-]?key)["']?\s*[:=]\s*["']?)[^\s"'&,;)}[\]\u0001]+/gi],ft=/(?:\/home\/|\/Users\/)[^/\s"'`]+|[A-Za-z]:(?:\\{1,2}|\/)Users(?:\\{1,2}|\/)[^\\/\s"'`]+/gi,pt=/[\w.+-]+@[\w-]+(?:\.[\w-]+)+/g,mt=/\b([0-9a-f]{8})-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b/gi;function ht(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function gt(e,t,n=!1){let r=e=>n?`\u0001${e}\u0002`:e,i=e.replace(ut,()=>r(`<tunnel>.trycloudflare.com`));for(let e of dt)i=i.replace(e,(e,t)=>`${t}${r(`[REDACTED]`)}`);t.home&&(i=i.replace(ft,()=>r(`~`))),t.email&&(i=i.replace(pt,()=>r(`<email>`))),t.chats&&(i=i.replace(mt,(e,t)=>r(t)));let a=(t.projects??[]).filter(e=>e.trim().length>=3);if(a.length){let e=RegExp(`(?<![\\w-])(?:${a.map(ht).sort((e,t)=>t.length-e.length).join(`|`)})(?![\\w-])`,`gi`);i=i.replace(e,()=>r(`<project>`))}return i}function _t(e){return[`secrets`,e.home&&`home paths`,e.email&&`emails`,e.chats&&`chat ids`,e.projects?.length&&`project names`].filter(e=>!!e)}var vt=8192,yt=[0,5,20];function bt(e){let t=e.ctx&&e.around?Ye(e.around.before.slice(-e.ctx)):[],n=e.ctx&&e.around?Ye(e.around.after.slice(0,e.ctx)):[];return[...t.map(e=>({row:e,ctx:!0})),...e.rows.map(e=>({row:e,ctx:!1})),...n.map(e=>({row:e,ctx:!0}))]}function xt(e){return e.rows.reduce((e,t)=>e+t.count,0)}function St(e){let t=new Set(e.map(e=>e.src));return t.size===1?[...t][0]:`all`}var Ct=e=>new Date(e).toISOString().slice(11,19);function wt(e){let t=e.rows[0],n=e.rows[e.rows.length-1],r=t&&n?` · ${Ct(t.entry.ts)}–${Ct(n.lastTs)} UTC`:``;return`${we(e.src)}${r}`}function Tt(e){return bt(e).map(e=>ze(e.row.entry,e.row.count))}function Et({fields:e,snippets:t,environment:n,redact:r,mark:i=!1}){let a=e=>gt(e,r,i),o=[`### What happened`,a(e.what.trim())||`_Not filled in_`,``,`### Steps to reproduce`,a(e.steps.trim())||`_Not filled in_`,``];if(e.expected.trim()&&o.push(`### Expected`,a(e.expected.trim()),``),t.length){o.push(`### Log lines`);for(let e of t){let t=Tt(e).map(a),n=lt(t.join(`
|
|
2
|
+
`)),r=xt(e);o.push(``,`<details><summary>${wt(e)} · ${X(r,`line`)}${e.ctx?` and ${e.ctx} around`:``}</summary>`,``,n,...t,n,`</details>`)}o.push(``)}return n.length&&o.push(`### Environment`,...n.map(([e,t])=>`- ${e}: ${a(t)}`),``),o.push(`<sub>Sent from PPM → Logs. Removed before sending: ${_t(r).join(`, `)}.</sub>`),o.join(`
|
|
3
|
+
`)}function Dt(e,t,n){let r=[`title=${encodeURIComponent(e)}`];return t.length&&r.push(`labels=${encodeURIComponent(t.join(`,`))}`),n!==null&&r.push(`body=${encodeURIComponent(n)}`),`https://github.com/${pe}/issues/new?${r.join(`&`)}`}function Ot(e,t){return`# ${e.trim()||`Bug report`}\n\n${t}`}var Z=e(t(),1),kt=500,At=2e4,jt=4e3,Mt=0,Nt=null,Pt=()=>xe(JSON.stringify({type:Ke}));function Ft(){return Mt++===0&&(Pt(),Nt=_e(Pt)),()=>{--Mt>0||(Nt?.(),Nt=null,xe(JSON.stringify({type:tt})))}}function It(e,t){return JSON.stringify([e.src,e.levels,e.tagsOff,e.q,e.regex,e.caseSensitive,e.chat,t])}function Lt(e){let t={};for(let[n,r]of Object.entries(e))t[n]={...r,tags:r.tags.map(e=>[e[0],e[1]])};return t}function Rt(e,t,n,r){let i=e.meta;if(!i||!t.length)return e;let a={...i.titles,...n},o=new Set(e.entries.slice(-jt).map(e=>e.id)),s=t.filter(e=>e.ts>=i.fromTs&&!o.has(e.id));if(!s.length)return e;let c=Lt(i.stats);ye(c,s);let l=De(r),u=s.filter(e=>Be(e,r,l,a)),d=i.chats.map(e=>({...e}));for(let e of s){if(!e.sid)continue;let t=d.find(t=>t.sid===e.sid);t?(t.count++,t.last=e.ts):d.unshift({sid:e.sid,title:a[e.sid]??null,count:1,last:e.ts})}let f=u.length?e.entries.concat(u):e.entries,p=i.hasMore;return f.length>At&&(f=f.slice(-At),p=!0),{...e,entries:f,meta:{...i,stats:c,chats:d,titles:a,matched:i.matched+u.length,inRange:i.inRange+s.filter(e=>r.src===`all`||e.src===r.src).length,hasMore:p},batch:u.length?{seq:(e.batch?.seq??0)+1,count:u.length}:e.batch}}function zt(e,t,n){let r=It(e,t),[i,a]=(0,Z.useState)({key:r,entries:[],meta:null,loading:!0,loadingEarlier:!1,error:null,batch:null}),[o,s]=(0,Z.useState)(0),[c,l]=(0,Z.useState)(0),u=(0,Z.useRef)(e);u.current=e;let d=(0,Z.useRef)(i);d.current=i;let f=(0,Z.useRef)(n);f.current=n;let p=(0,Z.useRef)(e.q),m=(0,Z.useRef)(null),h=(0,Z.useRef)({entries:[],titles:{}});(0,Z.useEffect)(()=>Ft(),[]),(0,Z.useEffect)(()=>_e(()=>s(e=>e+1)),[]),(0,Z.useEffect)(()=>{let n=new AbortController;m.current={entries:[],titles:{}},h.current={entries:[],titles:{}},l(0),a(e=>({...e,key:r,loading:!0,error:null}));let i=e.q===p.current?0:250;p.current=e.q;let o=setTimeout(()=>{Pe({...e,range:t,from:Se(t,Date.now()),limit:kt},n.signal).then(t=>{if(n.signal.aborted)return;let{entries:i,...o}=t,s=m.current??{entries:[],titles:{}};m.current=null,a(Rt({key:r,entries:i,meta:o,loading:!1,loadingEarlier:!1,error:null,batch:null},s.entries,s.titles,e))}).catch(e=>{n.signal.aborted||(m.current=null,a(t=>({...t,key:r,loading:!1,error:e instanceof Error?e.message:String(e)})))})},i);return()=>{clearTimeout(o),n.abort()}},[r,o]),(0,Z.useEffect)(()=>{let e=e=>{let t=e.detail;if(t?.entries?.length){if(m.current){m.current.entries.push(...t.entries),Object.assign(m.current.titles,t.titles);return}if(f.current){h.current.entries.push(...t.entries),Object.assign(h.current.titles,t.titles);let e=u.current,n=De(e),r={...d.current.meta?.titles,...h.current.titles};l(i=>i+t.entries.filter(t=>Be(t,e,n,r)).length);return}a(e=>Rt(e,t.entries,t.titles??{},u.current))}};return window.addEventListener(`logs:lines`,e),()=>window.removeEventListener(`logs:lines`,e)},[]),(0,Z.useEffect)(()=>{if(n)return;let{entries:e,titles:t}=h.current;h.current={entries:[],titles:{}},l(0),e.length&&a(n=>Rt(n,e,t,u.current))},[n]);let g=(0,Z.useCallback)(async e=>{let n=d.current;if(!n.meta?.hasMore||n.loadingEarlier||n.loading||!n.entries.length)return!1;let r=n.key;a(e=>({...e,loadingEarlier:!0}));try{let i=await Pe({...u.current,range:t,from:n.meta.fromTs,before:n.entries[0].id,limit:kt,...e?{reach:e}:{}}),o=d.current;if(o.key!==r||!o.meta)return a(e=>({...e,loadingEarlier:!1})),!1;let s=new Set(o.entries.slice(0,jt).map(e=>e.id)),c=i.entries.filter(e=>!s.has(e.id));return a(e=>e.key!==r||!e.meta?{...e,loadingEarlier:!1}:{...e,entries:c.concat(e.entries),meta:{...e.meta,hasMore:i.hasMore,titles:{...i.titles,...e.meta.titles},reachMissed:i.reachMissed},loadingEarlier:!1}),c.length>0}catch{return a(e=>({...e,loadingEarlier:!1})),!1}},[t]),_=(0,Z.useCallback)(()=>s(e=>e+1),[]);return(0,Z.useMemo)(()=>({...i,pausedCount:c,loadEarlier:g,reload:_}),[i,c,g,_])}function Bt(){let[e,t]=(0,Z.useState)(null),[n,r]=(0,Z.useState)(null),i=(0,Z.useCallback)(async()=>{try{t(await it()),r(null)}catch(e){r(e instanceof Error?e.message:String(e))}},[]);return(0,Z.useEffect)(()=>{i();let e=()=>void i();return window.addEventListener(Me,e),()=>window.removeEventListener(Me,e)},[i]),{data:e,error:n,analyze:(0,Z.useCallback)(async e=>{t(e=>e&&{...e,running:!0,error:null}),await qe(e)},[]),setAuto:(0,Z.useCallback)(async e=>{t(t=>t&&{...t,auto:e}),await Fe(e),await i()},[i]),setDismissed:(0,Z.useCallback)(async(e,n)=>{t(t=>t&&{...t,issues:t.issues.map(t=>t.id===e?{...t,dismissed:n}:t)}),await He(e,n)},[]),undismissAll:(0,Z.useCallback)(async()=>{t(e=>e&&{...e,issues:e.issues.map(e=>({...e,dismissed:!1}))}),await ge()},[])}}var Vt=null;function Ht(){return Vt??=Ge().then(e=>[...e,[`Browser`,We(navigator.userAgent)]]).catch(e=>{throw Vt=null,e}),Vt}var Ut=0,Wt={title:``,labels:[],what:``,steps:``,expected:``},Gt=(e,t)=>e.length===t.length&&e.every((e,n)=>e.key===t[n].key&&e.count===t[n].count),Kt=z((e,t)=>({snippets:[],fields:Wt,status:`none`,stale:!1,fresh:!1,error:null,model:null,basis:0,view:`write`,envOff:[],priv:{home:!0,email:!0,chats:!0,projects:!1},add:n=>{if(!n.length||t().snippets.some(e=>Gt(e.rows,n)))return!1;let r=n.map(e=>e.entry),i={id:`s${++Ut}`,src:St(r),rows:n,ctx:0,around:null};return e(e=>({snippets:[...e.snippets,i],stale:e.status===`done`})),!0},remove:n=>{let r=t().snippets.findIndex(e=>e.id===n);if(r<0)return null;let i=t().snippets[r];return e(e=>({snippets:e.snippets.filter(e=>e.id!==n),stale:e.status===`done`})),{snippet:i,index:r}},restore:(t,n)=>{e(e=>{let r=e.snippets.slice();return r.splice(Math.min(n,r.length),0,t),{snippets:r}})},setContext:async(n,r)=>{e(e=>({snippets:e.snippets.map(e=>e.id===n?{...e,ctx:r}:e)}));let i=t().snippets.find(e=>e.id===n);if(!r||!i||i.around)return;let a=i.rows.flatMap(e=>e.ids);try{let t=await at([a[0],a[a.length-1]],20,i.src);e(e=>({snippets:e.snippets.map(e=>e.id===n?{...e,around:t}:e)}))}catch{}},setFields:t=>e(e=>({fields:{...e.fields,...t}})),setView:t=>e({view:t}),toggleEnv:t=>e(e=>({envOff:e.envOff.includes(t)?e.envOff.filter(e=>e!==t):[...e.envOff,t]})),togglePriv:t=>e(e=>({priv:{...e.priv,[t]:!e.priv[t]}})),draft:async()=>{let{snippets:n,status:r}=t();if(!(!n.length||r===`drafting`)){e({status:`drafting`,view:`write`,error:null});try{let r=(await Ht().catch(()=>[])).filter(([e])=>!t().envOff.includes(e)),i=await nt({snippets:n.map(e=>({label:wt(e),lines:Tt(e)})),environment:r});e({status:`done`,fields:{title:i.title,labels:i.labels,what:i.what,steps:i.steps,expected:i.expected},model:i.model,basis:n.reduce((e,t)=>e+xt(t),0),stale:!1,fresh:!0}),setTimeout(()=>e({fresh:!1}),900)}catch(t){e(e=>({status:e.model?`done`:`none`,error:t instanceof Error?t.message:String(t)}))}}}})),Q=n(),qt={all:b,ai:ae,shell:f,server:F,ext:S,files:u,auto:m,tunnel:A,browser:d},Jt={debug:`DEBUG`,info:`INFO`,warn:`WARN`,error:`ERROR`,fatal:`FATAL`};function Yt({text:e,re:t}){return t?(0,Q.jsx)(Q.Fragment,{children:ot(e,t).map((e,t)=>e.hit?(0,Q.jsx)(`mark`,{className:`lg-hit`,children:e.text},t):(0,Q.jsx)(Z.Fragment,{children:e.text},t))}):(0,Q.jsx)(Q.Fragment,{children:e})}function Xt({msg:e,re:t,titles:n,onChat:r}){return(0,Q.jsx)(Q.Fragment,{children:Ae(e).map((e,i)=>{if(e.kind===`chat`){let t=n[e.sid]??e.sid.slice(0,8);return r?(0,Q.jsx)(`button`,{type:`button`,className:`lg-sess`,title:`Show only this chat · ${e.sid}`,onClick:()=>r(e.sid),children:t},i):(0,Q.jsx)(`span`,{className:`lg-sess`,children:t},i)}return e.kind===`quote`?(0,Q.jsx)(`span`,{className:`q`,children:(0,Q.jsx)(Yt,{text:e.text,re:t})},i):e.kind===`key`?(0,Q.jsx)(`span`,{className:`k`,children:(0,Q.jsx)(Yt,{text:e.text,re:t})},i):(0,Q.jsx)(Yt,{text:e.text,re:t},i)})})}var Zt=/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/g;function Qt({row:e,utc:t,ctx:n,trim:r}){let i=e.entry,a=i.msg.replace(Zt,e=>e.slice(0,8)),o=r&&a.length>150?`${a.slice(0,149)}…`:a;return(0,Q.jsxs)(`div`,{className:n?`r ctx`:`r`,children:[(0,Q.jsx)(`span`,{className:`t`,children:je(i.ts,t)}),` `,(0,Q.jsx)(`span`,{className:i.lv,children:Jt[i.lv].padEnd(5,` `)}),` `,(0,Q.jsx)(`span`,{className:`g`,children:i.tag}),` `,o,e.count>1&&(0,Q.jsx)(`span`,{className:`t`,children:` ×${e.count}`}),!!i.more?.length&&(0,Q.jsx)(`span`,{className:`t`,children:` +${i.more.length} lines`})]})}function $t({paused:e,pending:t}){return(0,Q.jsxs)(`span`,{className:`flex items-center gap-1.5 whitespace-nowrap text-[10px] text-text-subtle`,"data-testid":`logs-live`,children:[e?(0,Q.jsx)(x,{className:`size-3 text-warning`}):(0,Q.jsx)(_,{className:`size-3 text-success`}),(0,Q.jsx)(`span`,{children:e?`Paused${t?` · ${t.toLocaleString(`en-US`)} new`:``}`:`Live`})]})}function en({title:e,children:t}){return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`div`,{className:`lg-sheet-sec`,children:e}),(0,Q.jsx)(`div`,{className:`lg-sheet-chips`,children:t})]})}var $={keys:new Set,anchor:null,cursor:null};function tn(e){return{keys:new Set([e]),anchor:e,cursor:e}}function nn(e,t,n,r=!1){let i=e.anchor??n,a=Je(t,i,n);return{keys:new Set(r?[...e.keys,...a]:a),anchor:i,cursor:n}}function rn(e,t){let n=new Set(e.keys);return n.has(t)?n.delete(t):n.add(t),{keys:n,anchor:t,cursor:t}}function an(e,t){return t.keys.size?e.filter(e=>t.keys.has(e.key)):[]}function on(e,t){let n=e.levels;return!n.error||!n.warn||!n.info||n.debug||!!e.chat||!!e.q||e.tagsOff.length>0||t!==`1h`}var sn=e=>e.reduce((e,t)=>e+t.count,0),cn=e=>e.map(e=>ze(e.entry,e.count)).join(`
|
|
4
|
+
`);async function ln(e){e.length&&(await U(cn(e))?R.success(`Copied ${X(sn(e),`line`)}`):R.error(`Could not copy the lines`))}function un(){let e=ct();if(e)return Object.values(ce.getState().panels).flatMap(e=>e.tabs).find(t=>t.id===e)}function dn(e,t){if(!e.length)return;let n=[...new Set(e.map(e=>we(e.entry.src)))].join(`, `),r=cn(e),i=lt(r);st({text:`Selected lines from the PPM logs (${n})\n${i}\n${r}\n${i}`,label:`Log selection`,newTab:t,asContext:!0})}function fn(e,t,n=!1){return e.length?Kt.getState().add([...e])?(n||R.success(`Added ${X(sn(e),`line`)} to the report`,t?{action:{label:`Open`,onClick:t}}:void 0),!0):(n||R(`These lines are already in the report`),!1):!1}var pn=e=>String(e).padStart(2,`0`);function mn(e){if(!e.length)return;let t=new Date,n=`ppm-logs-${t.getFullYear()}${pn(t.getMonth()+1)}${pn(t.getDate())}-${pn(t.getHours())}${pn(t.getMinutes())}.log`,r=URL.createObjectURL(new Blob([`${cn(e)}\n`],{type:`application/octet-stream`})),i=document.createElement(`a`);i.href=r,i.download=n,i.rel=`noopener`,i.style.display=`none`,document.body.appendChild(i),i.click(),i.remove(),setTimeout(()=>URL.revokeObjectURL(r),1e4),R.success(`Saved ${n} with ${X(sn(e),`line`)}`)}var hn=24,gn=200;function _n(e,{follow:t,setFollow:n,feed:r,size:i,virtualizer:a,keep:o}){let s=(0,Z.useRef)(0),[c,l]=(0,Z.useState)(0),u=(0,Z.useCallback)((e=gn)=>{s.current=performance.now()+e},[]),d=(0,Z.useCallback)(()=>{let t=e.current;t&&(u(),t.scrollTop=t.scrollHeight)},[e,u]);(0,Z.useLayoutEffect)(()=>{let e=o.current;if(e!=null&&!t){let{count:t,getItemKey:n}=a.options;for(let r=0;r<t;r++)if(n(r)===e){u(),a.scrollToIndex(r,{align:`start`});break}}return()=>{let e=a.getVirtualItemForOffset(a.scrollOffset??0);o.current=e?String(e.key):null}},[]),(0,Z.useLayoutEffect)(()=>{t&&d()},[t,i,d]),(0,Z.useEffect)(()=>l(0),[r.key]),(0,Z.useEffect)(()=>{t&&l(0)},[t]);let f=r.batch;return(0,Z.useEffect)(()=>{f&&!t&&l(e=>e+f.count)},[f?.seq]),{newCount:c,onScroll:(0,Z.useCallback)(()=>{let r=e.current;if(!r||performance.now()<s.current)return;let i=r.scrollHeight-r.scrollTop-r.clientHeight<hn;i!==t&&n(i)},[e,t,n]),ownScroll:u}}var vn=`flex items-center gap-1 whitespace-nowrap rounded bg-surface-elevated text-text-primary transition-colors hover:bg-primary hover:text-primary-foreground active:bg-primary active:text-primary-foreground px-2 py-0.5 text-xs`,yn=5,bn={ai:`sdk, chat, usage, accounts`,shell:`bash-spy, bg-shell, terminal`,server:`supervisor, startup, stderr`,ext:`extensions, language servers`,files:`file-watcher, file-index, git`,auto:`scheduler, ppmbot, jira`,tunnel:`cloudflared.log`,browser:`Console`};function xn(e,t){return e?t===`all`?Object.values(e).reduce((e,t)=>({total:e.total+t.total,err:e.err+t.err,warn:e.warn+t.warn}),{total:0,err:0,warn:0}):e[t]:{total:0,err:0,warn:0}}function Sn(e,t,n){if(e===`tunnel`)return`cloudflared.log`;if(e===`browser`)return n?`Console · ${X(n.browserDevices,`device`)}`:bn.browser;let r=t?.[e]?.tags.slice(0,3).map(e=>e[0]);return r?.length?r.join(`, `):bn[e]}function Cn(e,t){return t?e===`all`?`ppm.log, cloudflared.log, ${X(t.browserDevices,`browser`)}`:e===`tunnel`?t.cloudflaredPath?`cloudflared.log · ${Y(t.cloudflaredBytes)}`:`no cloudflared.log yet`:e===`browser`?`browser consoles · ${X(t.browserDevices,`device`)}`:`ppm.log · ${Y(t.ppmLogBytes)}`:``}function wn({src:e,files:t}){return e===`tunnel`?t.cloudflaredPath?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`b`,{children:t.cloudflaredPath}),(0,Q.jsx)(`br`,{}),`Written by cloudflared itself, to the second.`]}):(0,Q.jsx)(Q.Fragment,{children:`No cloudflared.log yet. It appears once a tunnel has run.`}):e===`browser`?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`b`,{children:`Browser consoles`}),(0,Q.jsx)(`br`,{}),`Sent by every open PPM tab and kept `,X(t.browserRetentionDays,`day`),`.`]}):e===`all`?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`b`,{children:t.ppmLogPath}),` and its `,X(t.rotatedFiles,`older file`),`, `,(0,Q.jsx)(`b`,{children:`cloudflared.log`}),` and `,X(t.browserDevices,`browser`),`, merged by time.`]}):(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`b`,{children:t.ppmLogPath}),(0,Q.jsx)(`br`,{}),Y(t.ppmLogBytes),` of `,Y(t.capBytes),`. When full it becomes ppm.log.1; `,t.generations,` files are kept.`]})}var Tn=(0,Z.memo)(function({row:e,index:t,selected:n,cursor:r,flash:i,open:a,utc:o,re:s,titles:c,onChat:l,onToggleMore:u,measure:d}){let f=e.entry,p=f.more?.length??0;return(0,Q.jsxs)(`div`,{ref:d,"data-index":t,"data-key":e.key,role:`option`,"aria-selected":n,className:V(`lg-row`,$e(f.lv)===`error`&&`err`,n&&`sel`,r&&`cur`,i&&`flash`),children:[(0,Q.jsx)(`span`,{className:`lg-mark`}),(0,Q.jsx)(`span`,{className:`lg-t`,children:je(f.ts,o)}),(0,Q.jsx)(`span`,{className:`lg-lv ${f.lv}`,children:Jt[f.lv]}),(0,Q.jsx)(`span`,{className:`lg-tg`,title:f.tag,children:f.tag}),(0,Q.jsxs)(`span`,{className:`lg-m`,children:[(0,Q.jsx)(Xt,{msg:f.msg,re:s,titles:c,onChat:l}),e.count>1&&(0,Q.jsxs)(`span`,{className:`lg-x`,title:`The same line ${e.count} times in a row`,children:[`×`,e.count.toLocaleString(`en-US`)]}),p>0&&(0,Q.jsx)(`button`,{type:`button`,className:`lg-pchip`,onClick:()=>u(e.key),children:a?`Hide lines`:`+${X(p,`line`)}`})]}),a&&p>0&&(0,Q.jsx)(`div`,{className:`lg-more`,children:(0,Q.jsx)(Yt,{text:f.more.join(`
|
|
5
|
+
`),re:s})})]})});function En({lv:e,cls:t,label:n,n:r,filter:i,setFilter:a}){return(0,Q.jsxs)(`button`,{type:`button`,className:V(`lg-chip`,t),"aria-pressed":i.levels[e],onClick:()=>a({levels:{...i.levels,[e]:!i.levels[e]}}),children:[(0,Q.jsx)(`span`,{className:`dot`}),n,r!=null&&(0,Q.jsx)(`span`,{className:`n`,children:Ne(r)})]})}function Dn(e){let{feed:t,rows:n,filter:o,setFilter:c,range:l,setRange:u,sel:d,setSel:f,follow:p,setFollow:m,paused:_,setPaused:v,utc:y,wrap:b}=e,S=t.meta,C=B(e=>e.setLogsWrap),E=(0,Z.useRef)(null),D=(0,Z.useRef)(null),O=(0,Z.useRef)(null),k=(0,Z.useRef)(null),[A,M]=(0,Z.useState)(()=>new Set),[N,F]=(0,Z.useState)(!1),[I,ae]=(0,Z.useState)(()=>new Set),R=(0,Z.useMemo)(()=>De(o),[o]),z=(0,Z.useMemo)(()=>me(R),[R]),se=(0,Z.useMemo)(()=>S?.titles??{},[S?.titles]),ce=S?.restarts,H=(0,Z.useMemo)(()=>{let e=Oe(n,ce??[]),t=[];for(let r of n){let n=e.get(r.key);n!=null&&t.push({kind:`div`,key:`restart-${n}`,at:n}),t.push({kind:`row`,key:r.key,row:r})}return t},[n,ce]),U=(0,Z.useMemo)(()=>new Map(H.map((e,t)=>[e.key,t])),[H]),W=(0,Z.useMemo)(()=>n.map(e=>e.key),[n]),G=(0,Z.useMemo)(()=>an(n,d),[n,d]),q=Ue({count:H.length,getScrollElement:()=>E.current,estimateSize:e=>H[e]?.kind===`div`?32:20,getItemKey:e=>H[e]?.key??e,overscan:24,paddingStart:4,paddingEnd:64}),pe=q.getVirtualItems(),J=q.getTotalSize(),{newCount:he,onScroll:Y,ownScroll:ge}=_n(E,{follow:p,setFollow:m,feed:t,size:J+H.length,virtualizer:q,keep:e.listTop});(0,Z.useEffect)(()=>M(new Set),[t.key]);let _e=t.batch;(0,Z.useEffect)(()=>{if(!_e||_e.count>yn)return;let e=new Set(t.entries.slice(-_e.count).map(e=>e.id)),r=new Set;for(let t=n.length-1;t>=0&&r.size<_e.count;t--)if(n[t].ids.some(t=>e.has(t)))r.add(n[t].key);else if(r.size)break;ae(r);let i=setTimeout(()=>ae(new Set),1200);return()=>clearTimeout(i)},[_e?.seq]);let ve=e.reveal;(0,Z.useLayoutEffect)(()=>{if(!ve)return;let e=U.get(ve.key);e!=null&&(ge(600),q.scrollToIndex(e,{align:`center`}),E.current?.focus({preventScroll:!0}))},[ve?.seq]),(0,Z.useLayoutEffect)(()=>{let e=k.current;if(!e)return;let t=U.get(e);t==null||t===0||(k.current=null,ge(),q.scrollToIndex(t,{align:`start`}))},[U,q,ge]);let ye=(0,Z.useCallback)(async()=>{m(!1),k.current=W[0]??null,await t.loadEarlier()||(k.current=null)},[t,W,m]),xe=(0,Z.useCallback)(()=>{let e=O.current,t=E.current,n=D.current;if(!e||!t||!n||!G.length)return;let r=U.get(G[0].key),i=U.get(G[G.length-1].key),a=q.measurementsCache,o=r==null?void 0:a[r],s=i==null?void 0:a[i];if(!o||!s)return;let c=e.offsetHeight,l=e.offsetWidth,u=s.end+4;u+c>t.scrollTop+t.clientHeight&&o.start-c-4>=t.scrollTop&&(u=o.start-c-4);let d=n.querySelector(`.lg-m`),f=d?d.getBoundingClientRect().left-n.getBoundingClientRect().left:0,p=Math.max(t.scrollLeft+6,Math.min(f,t.scrollLeft+t.clientWidth-l-6));e.style.transform=`translate(${Math.round(Math.max(0,p))}px, ${Math.round(u)}px)`},[G,U,q]);(0,Z.useLayoutEffect)(()=>{xe()}),(0,Z.useEffect)(()=>{let e=E.current;if(!e)return;let t=new ResizeObserver(()=>xe());return t.observe(e),()=>t.disconnect()},[xe]);let Se=()=>{xe(),Y()},Ee=e=>{if(e.button!==0)return;let t=e.target,n=t.closest(`.lg-row`);if(!n||t.closest(`button, a`))return;let r=n.dataset.key;r&&(e.preventDefault(),E.current?.focus({preventScroll:!0}),e.shiftKey&&d.anchor?f(nn(d,W,r,e.ctrlKey||e.metaKey)):e.ctrlKey||e.metaKey?f(rn(d,r)):d.keys.size===1&&d.keys.has(r)?f({keys:new Set,anchor:r,cursor:r}):(f(tn(r)),F(!0)))},Ae=e=>{if(!N)return;let t=e.target.closest(`.lg-row`)?.dataset.key;t&&t!==d.cursor&&f(nn(d,W,t))};(0,Z.useEffect)(()=>{if(!N)return;let e=E.current?.ownerDocument??document,t=()=>F(!1);return e.addEventListener(`mouseup`,t),()=>e.removeEventListener(`mouseup`,t)},[N]);let Me=(0,Z.useCallback)(e=>{M(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]),Pe=(0,Z.useCallback)(e=>c({chat:e}),[c]),Fe=e=>{if(e.key===`Escape`){d.keys.size&&(e.stopPropagation(),f($));return}if(!W.length)return;let t=e.ctrlKey||e.metaKey;if(e.key===`ArrowDown`||e.key===`ArrowUp`){e.preventDefault();let t=d.cursor?W.indexOf(d.cursor):-1;t=t<0?e.key===`ArrowDown`?0:W.length-1:Math.max(0,Math.min(W.length-1,t+(e.key===`ArrowDown`?1:-1)));let n=W[t];e.shiftKey?f(nn(d.anchor?d:{...d,anchor:d.cursor??n},W,n)):f({keys:d.keys,anchor:d.keys.size?d.anchor:n,cursor:n});let r=U.get(n);r!=null&&q.scrollToIndex(r,{align:`auto`})}else if(e.key===` `&&d.cursor)e.preventDefault(),f(rn(d,d.cursor));else if(t&&e.key.toLowerCase()===`a`)e.preventDefault(),f({keys:new Set(W),anchor:W[0],cursor:W[W.length-1]});else if(t&&e.key.toLowerCase()===`c`&&G.length)e.preventDefault(),ln(G);else if(e.key===`Enter`&&d.cursor){let e=n.find(e=>e.key===d.cursor);e?.entry.more?.length&&Me(e.key)}},Le=()=>f($),ze=xn(S?.stats,o.src),Be=pe[0],Ve=G.length>0&&!N,He=R===void 0||!!S?.badRegex,We=o.chat?se[o.chat]??o.chat.slice(0,8):`All chats`,Ge=o.src===`all`?[]:S?.stats[o.src].tags??[],Ke=new Set(o.tagsOff),qe=l===`restart`?S?.fromTs:S?.restarts.at(-1);return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`nav`,{className:`lg-side`,"aria-label":`Log sources`,children:[(0,Q.jsx)(On,{id:`all`,label:`All sources`,sub:`ppm.log, cloudflared.log, browsers`,stats:xn(S?.stats,`all`),current:o.src===`all`,onPick:()=>c({src:`all`,tagsOff:[]})}),(0,Q.jsx)(`div`,{className:`lg-group`,children:`Server · ppm.log`}),Re.filter(e=>e.group===`ppm`).map(e=>(0,Q.jsx)(On,{id:e.id,label:e.label,sub:Sn(e.id,S?.stats,S?.files),stats:S?.stats[e.id],current:o.src===e.id,onPick:()=>c({src:e.id,tagsOff:[]})},e.id)),(0,Q.jsx)(`div`,{className:`lg-group`,children:`Elsewhere`}),Re.filter(e=>e.group===`elsewhere`).map(e=>(0,Q.jsx)(On,{id:e.id,label:e.label,sub:Sn(e.id,S?.stats,S?.files),stats:S?.stats[e.id],current:o.src===e.id,onPick:()=>c({src:e.id,tagsOff:[]})},e.id)),S&&(0,Q.jsx)(`div`,{className:`lg-side-file`,children:(0,Q.jsx)(wn,{src:o.src,files:S.files})})]}),(0,Q.jsxs)(`section`,{className:`lg-view`,"aria-label":we(o.src),children:[(0,Q.jsxs)(`div`,{className:`lg-tools`,children:[(0,Q.jsxs)(`div`,{className:`lg-search`,children:[(0,Q.jsx)(L,{}),(0,Q.jsx)(`input`,{type:`search`,value:o.q,onChange:e=>c({q:e.target.value}),placeholder:o.src===`all`?`Search all logs`:`Search ${we(o.src)}`,"aria-label":`Search logs`,"aria-invalid":!!o.q&&He,title:o.q&&He?`This regular expression does not compile`:void 0}),(0,Q.jsxs)(`span`,{className:`lg-inl`,children:[(0,Q.jsx)(`button`,{type:`button`,title:`Match case`,"aria-pressed":o.caseSensitive,onClick:()=>c({caseSensitive:!o.caseSensitive}),children:(0,Q.jsx)(Ce,{})}),(0,Q.jsx)(`button`,{type:`button`,title:`Regular expression`,"aria-pressed":o.regex,onClick:()=>c({regex:!o.regex}),children:(0,Q.jsx)(Te,{})})]})]}),(0,Q.jsx)(`span`,{className:`lg-sep`}),(0,Q.jsx)(En,{lv:`error`,cls:`e`,label:`Errors`,n:ze.err,filter:o,setFilter:c}),(0,Q.jsx)(En,{lv:`warn`,cls:`w`,label:`Warnings`,n:ze.warn,filter:o,setFilter:c}),(0,Q.jsx)(En,{lv:`info`,label:`Info`,filter:o,setFilter:c}),(0,Q.jsx)(En,{lv:`debug`,label:`Debug`,filter:o,setFilter:c}),(0,Q.jsx)(`span`,{className:`lg-sep lg-hide-narrow`}),(0,Q.jsxs)(fe,{children:[(0,Q.jsx)(ue,{asChild:!0,children:(0,Q.jsxs)(`button`,{type:`button`,className:V(`lg-ghost`,o.chat&&`on`),title:o.chat?`Only lines naming ${We}`:`Lines from every chat`,children:[(0,Q.jsx)(a,{}),(0,Q.jsx)(`span`,{className:`max-w-[140px] truncate`,children:We}),(0,Q.jsx)(h,{className:`chev`})]})}),(0,Q.jsx)(kn,{filter:o,setFilter:c,chats:S?.chats??[],titles:se})]}),(0,Q.jsxs)(fe,{children:[(0,Q.jsx)(ue,{asChild:!0,children:(0,Q.jsxs)(`button`,{type:`button`,className:`lg-ghost`,children:[(0,Q.jsx)(re,{}),Ie[l],(0,Q.jsx)(h,{className:`chev`})]})}),(0,Q.jsx)(de,{align:`start`,className:`min-w-52`,children:be.map(e=>(0,Q.jsxs)(K,{onSelect:()=>u(e),children:[(0,Q.jsx)(`span`,{children:Ie[e]}),l===e?(0,Q.jsx)(i,{className:`ml-auto`}):e===`restart`&&qe?(0,Q.jsx)(`span`,{className:`lg-mi-sub`,children:je(qe,y).slice(0,5)}):e===`all`&&S?(0,Q.jsx)(`span`,{className:`lg-mi-sub`,children:X(1+S.files.rotatedFiles,`file`)}):null]},e))})]}),(0,Q.jsx)(`span`,{className:`lg-fill`}),(t.loading||t.loadingEarlier)&&(0,Q.jsx)(`span`,{className:`lg-busy`,"aria-label":`Reading the logs`,children:(0,Q.jsx)(oe,{className:`animate-spin`})}),(0,Q.jsx)(`button`,{type:`button`,className:`lg-ibtn`,title:`Wrap long lines`,"aria-pressed":b,onClick:()=>C(!b),children:(0,Q.jsx)(P,{})}),(0,Q.jsx)(`button`,{type:`button`,className:`lg-ibtn`,title:`Follow new lines`,"aria-pressed":p,onClick:()=>m(!p),children:(0,Q.jsx)(ee,{})}),(0,Q.jsx)(`button`,{type:`button`,className:`lg-ibtn`,title:_?`Resume live lines`:`Pause live lines`,"aria-pressed":_,onClick:()=>v(!_),children:_?(0,Q.jsx)(ne,{}):(0,Q.jsx)(x,{})}),(0,Q.jsx)(`button`,{type:`button`,className:`lg-ibtn lg-hide-narrow`,title:`Download these lines`,onClick:()=>mn(n),disabled:!n.length,children:(0,Q.jsx)(w,{})}),(0,Q.jsxs)(fe,{children:[(0,Q.jsx)(ue,{asChild:!0,children:(0,Q.jsx)(`button`,{type:`button`,className:`lg-ibtn`,title:`More`,"aria-label":`More`,children:(0,Q.jsx)(g,{})})}),(0,Q.jsxs)(de,{align:`end`,className:`min-w-52`,children:[(0,Q.jsxs)(K,{disabled:!n.length,onSelect:()=>void ln(n),children:[(0,Q.jsx)(ie,{}),`Copy visible lines`,(0,Q.jsx)(`span`,{className:`lg-mi-sub`,children:sn(n).toLocaleString(`en-US`)})]}),(0,Q.jsxs)(K,{disabled:!n.length,onSelect:()=>mn(n),children:[(0,Q.jsx)(w,{}),`Download as .log`]}),(0,Q.jsxs)(K,{onSelect:()=>t.reload(),children:[(0,Q.jsx)(te,{}),`Read again`]}),(0,Q.jsx)(le,{}),(0,Q.jsxs)(K,{onSelect:e.togglePrefs,children:[(0,Q.jsx)(s,{}),`Preferences`]})]})]})]}),Ge.length>0&&(0,Q.jsxs)(`div`,{className:`lg-tagbar`,children:[(0,Q.jsx)(`span`,{className:`lg-tagbar-lbl`,children:`Tags`}),Ge.map(([e,t])=>{let n=`${o.src}:${e}`;return(0,Q.jsxs)(`button`,{type:`button`,className:`lg-tag`,"aria-pressed":!Ke.has(n),onClick:()=>c({tagsOff:Ke.has(n)?o.tagsOff.filter(e=>e!==n):[...o.tagsOff,n]}),children:[e,(0,Q.jsx)(`span`,{className:`n`,children:Ne(t)})]},e)})]}),(0,Q.jsx)(`div`,{ref:E,className:V(`lg-list`,b&&`wrap`),tabIndex:0,role:`listbox`,"aria-multiselectable":`true`,"aria-label":`Log lines`,"aria-busy":t.loading,onScroll:Se,onMouseDown:Ee,onMouseOver:Ae,onKeyDown:Fe,"data-testid":`logs-list`,children:n.length>0?(0,Q.jsxs)(`div`,{ref:D,className:`lg-rows`,style:{height:J,padding:0},children:[(0,Q.jsx)(`div`,{style:{transform:`translateY(${Be?.start??0}px)`},children:pe.map(e=>{let t=H[e.index];return t.kind===`div`?(0,Q.jsxs)(`div`,{ref:q.measureElement,"data-index":e.index,className:`lg-div`,children:[(0,Q.jsx)(te,{}),`PPM restarted at `,je(t.at,y).slice(0,8)]},t.key):(0,Q.jsx)(Tn,{row:t.row,index:e.index,selected:d.keys.has(t.key),cursor:d.cursor===t.key,flash:I.has(t.key),open:A.has(t.key),utc:y,re:z,titles:se,onChat:Pe,onToggleMore:Me,measure:q.measureElement},t.key)})}),Ve&&(0,Q.jsxs)(`div`,{ref:O,className:`lg-selbar absolute left-0 top-0 z-10 flex max-w-full flex-wrap gap-1 rounded-md border border-border bg-surface p-0.5 shadow-md`,role:`group`,"aria-label":`Selected lines`,"data-testid":`logs-selbar`,children:[(0,Q.jsx)(`span`,{className:`lg-selcount`,children:X(sn(G),`line`)}),(0,Q.jsxs)(`button`,{type:`button`,className:vn,onClick:()=>{dn(G,!1),Le()},children:[(0,Q.jsx)(a,{}),`Add to current chat`]}),(0,Q.jsxs)(`button`,{type:`button`,className:vn,onClick:()=>{dn(G,!0),Le()},children:[(0,Q.jsx)(T,{}),`Add to new chat`]}),(0,Q.jsxs)(`button`,{type:`button`,className:vn,onClick:()=>{fn(G,()=>e.goTo(`report`)),Le()},children:[(0,Q.jsx)(r,{}),`Add to report`]}),(0,Q.jsxs)(`button`,{type:`button`,className:vn,onClick:()=>void ln(G),children:[(0,Q.jsx)(ie,{}),`Copy`]})]})]}):(0,Q.jsx)(An,{...e})}),he>0&&!p&&(0,Q.jsxs)(`button`,{type:`button`,className:`lg-newpill`,onClick:()=>m(!0),children:[(0,Q.jsx)(j,{}),X(he,`new line`)]}),(0,Q.jsxs)(`div`,{className:`lg-foot`,children:[(0,Q.jsx)(`span`,{className:`src`,children:Cn(o.src,S?.files)}),S&&(0,Q.jsx)(`span`,{children:S.hasMore?`${sn(n).toLocaleString(`en-US`)} of ${X(S.matched,`line`)}`:X(S.matched,`line`)}),(0,Q.jsx)(`button`,{type:`button`,disabled:!S?.hasMore||t.loadingEarlier||t.loading,onClick:()=>void ye(),children:t.loadingEarlier?`Loading…`:`Load earlier`}),(0,Q.jsx)(`span`,{className:`sp`}),(0,Q.jsx)(`span`,{className:`tz`,children:y?`UTC`:`Local time (${ke()})`})]})]})]})}function On({id:e,label:t,sub:n,stats:r,current:i,onPick:a}){let o=qt[e],s=r?.err??0,c=r?.warn??0;return(0,Q.jsxs)(`button`,{type:`button`,"aria-current":i,title:t,onClick:a,className:V(`lg-src flex min-h-11 w-full items-center gap-3 px-3 py-2 text-left transition-colors`,s?`has-e`:c?`has-w`:``,i?`bg-primary/10 text-text-primary`:`hover:bg-surface-hover`),children:[(0,Q.jsx)(o,{className:`lg-src-ic size-4 shrink-0`}),(0,Q.jsxs)(`span`,{className:`lg-src-txt`,children:[(0,Q.jsx)(`b`,{children:t}),(0,Q.jsx)(`small`,{children:n})]}),(0,Q.jsxs)(`span`,{className:`lg-cnts`,children:[(s>0||c>0)&&(0,Q.jsxs)(`span`,{className:`flex gap-1`,children:[s>0&&(0,Q.jsx)(`span`,{className:`lg-pill e`,title:X(s,`error`),children:Ne(s)}),c>0&&(0,Q.jsx)(`span`,{className:`lg-pill w`,title:X(c,`warning`),children:Ne(c)})]}),(0,Q.jsx)(`span`,{className:`lg-total`,title:`Lines in this range`,children:Ne(r?.total??0)})]})]})}function kn({filter:e,setFilter:t,chats:n,titles:r}){let o=se(un());return(0,Q.jsxs)(de,{align:`start`,className:`max-h-80 min-w-60 max-w-80`,children:[(0,Q.jsx)(G,{className:`text-xs font-normal text-text-subtle`,children:`Show lines from`}),(0,Q.jsxs)(K,{onSelect:()=>t({chat:null}),children:[(0,Q.jsx)(b,{}),`All chats`,!e.chat&&(0,Q.jsx)(i,{className:`ml-auto`})]}),(0,Q.jsx)(le,{}),n.length===0&&(0,Q.jsx)(G,{className:`text-xs font-normal text-text-subtle`,children:`No chat named in this range`}),n.slice(0,40).map(n=>(0,Q.jsxs)(K,{onSelect:()=>t({chat:n.sid}),children:[(0,Q.jsx)(a,{}),(0,Q.jsx)(`span`,{className:`min-w-0 truncate`,children:n.title??r[n.sid]??n.sid.slice(0,8)}),e.chat===n.sid?(0,Q.jsx)(i,{className:`ml-auto`}):(0,Q.jsx)(`span`,{className:`lg-mi-sub`,children:n.sid===o?`this tab`:n.sid.slice(0,8)})]},n.sid))]})}function An(e){let{feed:t,filter:n,range:r}=e;return t.error&&!t.loading?(0,Q.jsxs)(`div`,{className:`lg-empty`,children:[`Could not read the logs: `,t.error,`. `,(0,Q.jsx)(`button`,{type:`button`,onClick:()=>t.reload(),children:`Try again`})]}):t.loading||!t.meta?(0,Q.jsx)(`div`,{className:`lg-empty`,children:`Reading the logs…`}):on(n,r)?(0,Q.jsxs)(`div`,{className:`lg-empty`,children:[`No lines match these filters. `,(0,Q.jsx)(`button`,{type:`button`,onClick:e.clearFilters,children:`Clear filters`})]}):(0,Q.jsxs)(`div`,{className:`lg-empty`,children:[`Nothing in `,Ie[r].toLowerCase(),`. `,(0,Q.jsx)(`button`,{type:`button`,onClick:()=>e.setRange(`all`),children:`Show everything kept`})]})}var jn=450,Mn=8,Nn=[[`error`,`e`,`Errors`],[`warn`,`w`,`Warnings`],[`info`,``,`Info`],[`debug`,``,`Debug`]];function Pn(e){let{feed:t,rows:n,filter:i,setFilter:o,range:s,setRange:c,sel:l,setSel:u,follow:d,setFollow:f,utc:p}=e,m=t.meta,h=(0,Z.useRef)(null),g=(0,Z.useRef)(null),[_,v]=(0,Z.useState)(!1),[ee,y]=(0,Z.useState)(()=>new Set),[b,x]=(0,Z.useState)(null),S=B(e=>e.setLogsUtc),C=(0,Z.useMemo)(()=>De(i),[i]),te=(0,Z.useMemo)(()=>me(C),[C]),w=(0,Z.useMemo)(()=>m?.titles??{},[m?.titles]),E=(0,Z.useMemo)(()=>n.map(e=>e.key),[n]),k=(0,Z.useMemo)(()=>an(n,l),[n,l]),A=_||l.keys.size>0,M=Ue({count:n.length,getScrollElement:()=>h.current,estimateSize:()=>64,getItemKey:e=>n[e]?.key??e,overscan:10}),ne=M.getTotalSize(),{newCount:N,onScroll:P}=_n(h,{follow:d,setFollow:f,feed:t,size:ne+n.length,virtualizer:M,keep:e.listTop}),F=(0,Z.useCallback)(()=>{v(!1),u($)},[u]),re=e=>{if(A){l.anchor===e&&l.keys.size===1?u({keys:new Set,anchor:null,cursor:null}):l.anchor?u(nn(l,E,e)):u(tn(e));return}y(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},I=()=>{g.current&&clearTimeout(g.current.timer),g.current=null},ae=e=>{if(e.pointerType===`mouse`&&e.button!==0)return;let t=e.target,n=t.closest(`.lg-prow`)?.dataset.key;if(!n||t.closest(`button, a`))return;I();let r=setTimeout(()=>{g.current&&(g.current.fired=!0,v(!0),u(tn(n)),navigator.vibrate?.(10))},jn);g.current={key:n,x:e.clientX,y:e.clientY,timer:r,fired:!1}},oe=e=>{let t=g.current;t&&Math.hypot(e.clientX-t.x,e.clientY-t.y)>Mn&&I()},R=()=>{let e=g.current;e&&(clearTimeout(e.timer),g.current=null,e.fired||re(e.key))},z=sn(k),se=k[0],ce=k[k.length-1],H=se&&ce?J(se.entry.ts,ce.lastTs,p):``,U=b===`chat`?un():void 0,G=m?Object.values(m.stats):[],K=e=>{dn(k,e),x(null),F()};return(0,Q.jsxs)(`div`,{className:`lg-view`,children:[(0,Q.jsxs)(`div`,{className:`lg-pchips`,"aria-label":`Sources`,children:[(0,Q.jsx)(Fn,{id:`all`,label:`All`,err:G.reduce((e,t)=>e+t.err,0),warn:G.reduce((e,t)=>e+t.warn,0),current:i.src===`all`,onPick:()=>o({src:`all`,tagsOff:[]})}),Re.map(e=>(0,Q.jsx)(Fn,{id:e.id,label:e.label,err:m?.stats[e.id].err??0,warn:m?.stats[e.id].warn??0,current:i.src===e.id,onPick:()=>o({src:e.id,tagsOff:[]})},e.id))]}),(0,Q.jsxs)(`div`,{className:`lg-psearch`,children:[(0,Q.jsxs)(`div`,{className:`lg-search`,children:[(0,Q.jsx)(L,{}),(0,Q.jsx)(`input`,{type:`search`,value:i.q,onChange:e=>o({q:e.target.value}),placeholder:`Search logs`,"aria-label":`Search logs`,"aria-invalid":!!i.q&&(C===void 0||!!m?.badRegex),enterKeyHint:`search`})]}),(0,Q.jsxs)(`button`,{type:`button`,className:`lg-pfilter`,"aria-label":`Filters`,onClick:()=>x(`filter`),children:[(0,Q.jsx)(D,{}),on(i,s)&&(0,Q.jsx)(`span`,{className:`dotn`})]})]}),!A&&n.length>0&&(0,Q.jsx)(`div`,{className:`lg-phint`,children:`Long-press a line to select it, then tap the last line you need.`}),(0,Q.jsxs)(`div`,{className:`relative flex min-h-0 flex-1 flex-col`,children:[(0,Q.jsx)(`div`,{ref:h,className:`lg-plist`,onScroll:P,onPointerDown:ae,onPointerMove:oe,onPointerUp:R,onPointerCancel:I,onPointerLeave:I,onContextMenu:e=>{e.target.closest(`.lg-prow`)&&e.preventDefault()},"data-testid":`logs-plist`,children:n.length>0?(0,Q.jsx)(`div`,{style:{height:ne,position:`relative`},children:(0,Q.jsx)(`div`,{style:{transform:`translateY(${M.getVirtualItems()[0]?.start??0}px)`},children:M.getVirtualItems().map(e=>{let t=n[e.index];return(0,Q.jsx)(In,{row:t,index:e.index,selecting:A,selected:l.keys.has(t.key),open:ee.has(t.key),utc:p,re:te,titles:w,onChat:e=>o({chat:e}),measure:M.measureElement},t.key)})})}):(0,Q.jsx)(An,{...e})}),N>0&&!d&&(0,Q.jsxs)(`button`,{type:`button`,className:`lg-newpill`,style:{bottom:12},onClick:()=>f(!0),children:[(0,Q.jsx)(j,{}),X(N,`new line`)]})]}),A&&(0,Q.jsxs)(`div`,{className:`lg-pbar`,"data-testid":`logs-pbar`,children:[(0,Q.jsx)(W,{variant:`ghost`,size:`icon`,className:`size-11`,"aria-label":`Stop selecting`,onClick:F,children:(0,Q.jsx)(O,{className:`size-5`})}),(0,Q.jsxs)(`span`,{className:`cnt`,children:[z?`${X(z,`line`)} selected`:`Nothing selected`,(0,Q.jsx)(`small`,{children:z?H:`Tap lines to select them`})]}),(0,Q.jsxs)(W,{variant:`outline`,className:`min-h-11 px-3`,disabled:!z,onClick:()=>x(`chat`),children:[(0,Q.jsx)(a,{className:`size-4`}),`Ask AI`]}),(0,Q.jsxs)(W,{className:`min-h-11 px-3`,disabled:!z,onClick:()=>{fn(k,()=>e.goTo(`report`)),F()},children:[(0,Q.jsx)(r,{className:`size-4`}),`Report`]})]}),(0,Q.jsxs)(q,{open:b===`chat`,onClose:()=>x(null),children:[(0,Q.jsxs)(`div`,{className:`lg-sheet-title`,children:[`Ask AI about `,X(z,`line`),(0,Q.jsx)(`small`,{children:H})]}),(0,Q.jsxs)(`div`,{className:`lg-sheet-list`,children:[(0,Q.jsxs)(`button`,{type:`button`,className:`lg-sheet-row`,onClick:()=>K(!1),children:[(0,Q.jsx)(a,{}),(0,Q.jsxs)(`span`,{children:[`Add to current chat`,(0,Q.jsx)(`small`,{children:U?U.title:`Opens a new chat`})]})]}),(0,Q.jsxs)(`button`,{type:`button`,className:`lg-sheet-row`,onClick:()=>K(!0),children:[(0,Q.jsx)(T,{}),(0,Q.jsxs)(`span`,{children:[`Add to new chat`,(0,Q.jsx)(`small`,{children:`Starts a chat with these lines attached`})]})]}),(0,Q.jsxs)(`button`,{type:`button`,className:`lg-sheet-row`,onClick:()=>{ln(k),x(null)},children:[(0,Q.jsx)(ie,{}),(0,Q.jsx)(`span`,{children:`Copy lines`})]})]})]}),(0,Q.jsxs)(q,{open:b===`filter`,onClose:()=>x(null),className:`flex max-h-[calc(var(--sheet-vh,100dvh)*0.85)] flex-col`,children:[(0,Q.jsx)(`div`,{className:`lg-sheet-title`,children:`Filters`}),(0,Q.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-y-auto`,children:[(0,Q.jsx)(en,{title:`Levels`,children:Nn.map(([e,t,n])=>(0,Q.jsxs)(`button`,{type:`button`,className:V(`lg-chip`,t),"aria-pressed":i.levels[e],onClick:()=>o({levels:{...i.levels,[e]:!i.levels[e]}}),children:[(0,Q.jsx)(`span`,{className:`dot`}),n]},e))}),(0,Q.jsxs)(en,{title:`Chat`,children:[(0,Q.jsx)(`button`,{type:`button`,className:`lg-chip`,"aria-pressed":!i.chat,onClick:()=>o({chat:null}),children:`All chats`}),i.chat&&!m?.chats.slice(0,4).some(e=>e.sid===i.chat)&&(0,Q.jsx)(`button`,{type:`button`,className:`lg-chip`,"aria-pressed":!0,children:(0,Q.jsx)(`span`,{className:`t`,children:w[i.chat]??i.chat.slice(0,8)})}),(m?.chats??[]).slice(0,4).map(e=>(0,Q.jsx)(`button`,{type:`button`,className:`lg-chip`,"aria-pressed":i.chat===e.sid,onClick:()=>o({chat:e.sid}),children:(0,Q.jsx)(`span`,{className:`t`,children:e.title??w[e.sid]??e.sid.slice(0,8)})},e.sid))]}),(0,Q.jsx)(en,{title:`Time`,children:be.map(e=>(0,Q.jsx)(`button`,{type:`button`,className:`lg-chip`,"aria-pressed":s===e,onClick:()=>c(e),children:Ie[e]},e))}),(0,Q.jsx)(`div`,{className:`lg-sheet-list`,children:(0,Q.jsxs)(`label`,{className:`lg-sheet-row`,children:[(0,Q.jsx)(Ee,{checked:p,onCheckedChange:S}),(0,Q.jsx)(`span`,{children:`Show times in UTC`})]})})]}),(0,Q.jsxs)(`div`,{className:`lg-sheet-foot`,children:[(0,Q.jsx)(W,{variant:`outline`,className:`min-h-11 flex-1`,onClick:e.clearFilters,children:`Reset`}),(0,Q.jsx)(W,{className:`min-h-11 flex-1`,onClick:()=>x(null),children:t.loading?`Reading…`:`Show ${X(m?.matched??0,`line`)}`})]})]})]})}function Fn({id:e,label:t,err:n,warn:r,current:i,onPick:a}){let o=qt[e];return(0,Q.jsxs)(`button`,{type:`button`,className:`lg-chip`,"aria-pressed":i,onClick:a,children:[(0,Q.jsx)(o,{}),t,n>0?(0,Q.jsx)(`span`,{className:`lg-pill e`,children:n}):r>0?(0,Q.jsx)(`span`,{className:`lg-pill w`,children:r}):null]})}function In({row:e,index:t,selecting:n,selected:r,open:a,utc:o,re:s,titles:c,onChat:l,measure:u}){let d=e.entry,f=d.more?.length??0;return(0,Q.jsxs)(`div`,{ref:u,"data-index":t,"data-key":e.key,"aria-selected":n?r:void 0,className:V(`lg-prow`,$e(d.lv)===`error`&&`err`,r&&`sel`,a&&`open`),children:[(0,Q.jsx)(`div`,{className:`lg-prow-g`,children:n?(0,Q.jsx)(`span`,{className:`lg-pcheck`,children:r&&(0,Q.jsx)(i,{})}):(0,Q.jsx)(`span`,{className:`lv ${d.lv}`})}),(0,Q.jsxs)(`div`,{className:`min-w-0`,children:[(0,Q.jsxs)(`div`,{className:`lg-prow-meta`,children:[(0,Q.jsx)(`span`,{children:je(d.ts,o)}),(0,Q.jsx)(`span`,{className:`lv ${d.lv}`,children:Jt[d.lv]}),(0,Q.jsx)(`span`,{className:`tg`,children:d.tag}),e.count>1&&(0,Q.jsxs)(`span`,{children:[`×`,e.count]}),f>0&&(0,Q.jsxs)(`span`,{children:[`+`,X(f,`line`)]})]}),(0,Q.jsxs)(`div`,{className:`lg-prow-msg`,children:[(0,Q.jsx)(Xt,{msg:d.msg,re:s,titles:c,onChat:l}),a&&f>0&&(0,Q.jsxs)(Q.Fragment,{children:[`
|
|
6
|
+
`,(0,Q.jsx)(Yt,{text:d.more.join(`
|
|
7
|
+
`),re:s})]})]})]})]})}var Ln={bug:{label:`Likely PPM bug`,icon:c,chip:`e`},setup:{label:`Your setup`,icon:s,chip:`w`},upstream:{label:`Upstream`,icon:C},expected:{label:`Expected`,icon:i}},Rn=3;function zn(e){let t=[e.errors>0&&X(e.errors,`error`),e.warnings>0&&X(e.warnings,`warning`)].filter(Boolean);return t.length?t.join(` · `):X(e.count,`time`)}function Bn({utc:e,phone:t,issues:n,goTo:r,showInLogs:i}){let{data:a,error:s}=n,[c,l]=(0,Z.useState)(`all`);if(!a)return(0,Q.jsx)(`div`,{className:`lg-pane`,children:(0,Q.jsx)(`div`,{className:`lg-pane-in`,children:(0,Q.jsx)(`div`,{className:`lg-empty`,children:s?(0,Q.jsxs)(Q.Fragment,{children:[`Could not read what AI found: `,s]}):`Reading what AI found…`})})});let u=a.issues.filter(e=>!e.dismissed),d=e=>u.filter(t=>t.cls===e).length,f=d(`bug`),p=d(`setup`)+d(`upstream`),m=d(`expected`),h=a.issues.length-u.length,g=u.filter(e=>c===`all`||e.cls===c).sort((e,t)=>Ve.indexOf(e.cls)-Ve.indexOf(t.cls)||t.last-e.last),_=Math.max(1,Math.round((Date.now()-a.windowFrom)/36e5)),v=a.analyzedAt===null,ee=v?`Not sorted yet`:[f&&X(f,`likely bug`),p&&`${p} to check`,m&&`${m} expected`].filter(Boolean).join(`, `)||`Nothing left to look at`,y=e=>{fn(Ye(e.lines),void 0,!0),r(`report`),Kt.getState().draft()},b=e=>{n.setDismissed(e.id,!0),R(e.cls===`expected`?`Hidden. The lines stay in Logs.`:`Dismissed`,{action:{label:`Undo`,onClick:()=>void n.setDismissed(e.id,!1)}})};return(0,Q.jsx)(`div`,{className:`lg-pane`,"data-testid":`logs-issues`,children:(0,Q.jsxs)(`div`,{className:`lg-pane-in`,children:[(0,Q.jsxs)(`div`,{className:`lg-ai-head`,children:[(0,Q.jsx)(`span`,{className:`lg-ai-ic`,children:(0,Q.jsx)(E,{})}),(0,Q.jsxs)(`div`,{className:`lg-ai-txt`,children:[a.running?(0,Q.jsxs)(`h3`,{className:`lg-analyzing`,children:[(0,Q.jsx)(oe,{className:`animate-spin`}),a.unsorted?`Reading ${X(a.unsorted,`error and warning`,`errors and warnings`)}…`:`Reading the errors and warnings…`]}):(0,Q.jsx)(`h3`,{children:ee}),(0,Q.jsxs)(`p`,{children:[v?`Claude can group`:`Claude grouped`,` the last `,X(_,`hour`),` of errors and warnings by cause. Info lines are not sent.`]}),a.error&&!a.running&&(0,Q.jsxs)(`p`,{className:`err`,children:[`The last run failed: `,a.error]}),(0,Q.jsxs)(`div`,{className:`lg-ai-meta`,children:[(0,Q.jsxs)(`span`,{children:[(0,Q.jsx)(E,{}),a.model]}),a.analyzedAt&&(0,Q.jsxs)(`span`,{children:[(0,Q.jsx)(re,{}),`Updated `,je(a.analyzedAt,e).slice(0,5)]}),a.lastRun&&(0,Q.jsxs)(`span`,{children:[X(a.lastRun.lines,`line`),` → `,X(a.lastRun.patterns,`pattern`),` · `,Ne(a.lastRun.tokens),` tokens`]}),!v&&a.unsorted>0&&!a.running&&(0,Q.jsxs)(`span`,{children:[X(a.unsorted,`new line`),` not sorted yet`]}),(0,Q.jsxs)(`span`,{children:[(0,Q.jsx)(o,{}),`Secrets removed first`]})]})]}),(0,Q.jsxs)(`div`,{className:`lg-ai-act`,children:[(0,Q.jsxs)(W,{variant:`outline`,size:`sm`,disabled:a.running,onClick:()=>void n.analyze(!v),className:t?`min-h-11`:void 0,children:[(0,Q.jsx)(te,{}),v?`Analyze`:`Re-analyze`]}),(0,Q.jsxs)(`label`,{className:`lg-autoline`,children:[(0,Q.jsx)(Ee,{checked:a.auto,onCheckedChange:e=>void n.setAuto(e)}),`Auto`]})]})]}),(0,Q.jsxs)(`div`,{className:`lg-filters`,children:[(0,Q.jsx)(Vn,{id:`all`,label:`All`,n:u.length,cur:c,set:l}),Ve.map(e=>(0,Q.jsx)(Vn,{id:e,label:Ln[e].label,chip:Ln[e].chip,n:d(e),cur:c,set:l},e))]}),g.map(t=>(0,Q.jsx)(Hn,{it:t,utc:e,onDraft:()=>y(t),onChat:()=>dn(Ye(t.lines),!1),onShow:()=>i(t.lines),onDismiss:()=>b(t)},t.id)),!g.length&&(0,Q.jsx)(`div`,{className:`lg-empty`,children:v?`Press Analyze to sort the errors and warnings.`:u.length?`Nothing in this group.`:`No errors or warnings worth a look in the last ${X(_,`hour`)}.`}),(0,Q.jsxs)(`div`,{className:`lg-muted`,children:[(0,Q.jsx)(M,{}),(0,Q.jsx)(`span`,{children:`Nothing goes to GitHub from here: a report opens for you to read first.`}),h>0&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`span`,{children:[X(h,`issue`),` hidden`]}),(0,Q.jsx)(`button`,{type:`button`,onClick:()=>void n.undismissAll(),children:`Show again`})]})]})]})})}function Vn({id:e,label:t,chip:n,n:r,cur:i,set:a}){return(0,Q.jsxs)(`button`,{type:`button`,className:V(`lg-chip`,n),"aria-pressed":i===e,onClick:()=>a(e),children:[t,` `,(0,Q.jsx)(`span`,{className:`n`,children:r})]})}function Hn({it:e,utc:t,onDraft:n,onChat:r,onShow:i,onDismiss:o}){let s=Ln[e.cls],c=s.icon,l=qt[e.src],u=Ye(e.lines);return(0,Q.jsxs)(`article`,{className:V(`lg-issue`,e.cls===`bug`&&`bug`),"data-testid":`logs-issue`,children:[(0,Q.jsxs)(`div`,{className:`lg-issue-top`,children:[(0,Q.jsxs)(`span`,{className:`lg-cls ${e.cls}`,children:[(0,Q.jsx)(c,{}),s.label]}),(0,Q.jsxs)(`span`,{className:`lg-area`,children:[(0,Q.jsx)(l,{}),e.area]}),(0,Q.jsxs)(`span`,{className:`lg-occ`,children:[zn(e),` · last `,je(e.last,t).slice(0,5)]})]}),(0,Q.jsx)(`h4`,{children:e.title}),(0,Q.jsx)(`p`,{className:`lg-why`,children:e.why}),e.fix&&(0,Q.jsxs)(`div`,{className:`lg-fix`,children:[(0,Q.jsx)(M,{}),(0,Q.jsx)(`span`,{children:e.fix})]}),u.length>0&&(0,Q.jsxs)(`div`,{className:`lg-evid`,children:[u.slice(0,Rn).map(e=>(0,Q.jsx)(Qt,{row:e,utc:t,trim:!0},e.key)),u.length>Rn&&(0,Q.jsx)(`div`,{className:`r`,children:(0,Q.jsxs)(`span`,{className:`t`,children:[`+ `,X(u.length-Rn,`more line`)]})})]}),(0,Q.jsxs)(`div`,{className:`lg-issue-act`,children:[e.cls===`bug`&&(0,Q.jsxs)(W,{size:`sm`,onClick:n,children:[(0,Q.jsx)(Qe,{}),`Draft report`]}),(0,Q.jsxs)(W,{variant:`outline`,size:`sm`,onClick:r,children:[(0,Q.jsx)(a,{}),`Ask in chat`]}),(0,Q.jsxs)(W,{variant:`ghost`,size:`sm`,onClick:i,disabled:!e.lines.length,children:[(0,Q.jsx)(k,{}),`Show in Logs`]}),e.cls!==`bug`&&(0,Q.jsxs)(W,{variant:`ghost`,size:`sm`,onClick:n,children:[(0,Q.jsx)(Qe,{}),`Report anyway`]}),(0,Q.jsxs)(W,{variant:`ghost`,size:`sm`,className:`ml-auto`,onClick:o,children:[(0,Q.jsx)(I,{}),e.cls===`expected`?`Hide`:`Dismiss`]})]})]})}var Un=[[`home`,`Home folder`,`/home/you → ~`],[`email`,`Email addresses`,`you@example.com → <email>`],[`chats`,`Chat ids`,`53952680-0b07-… → 53952680`],[`projects`,`Project names`,`my-app → <project>`]],Wn=700,Gn=null;function Kn(){return Gn??=he().catch(()=>(Gn=null,[])),Gn}var qn=e=>e.replace(/^Claude\s+/i,``);function Jn(e){return e.split(/(\u0001[^\u0002]*\u0002)/).map((e,t)=>e.startsWith(``)?(0,Q.jsx)(`mark`,{children:e.slice(1,-1)},t):(0,Q.jsx)(Z.Fragment,{children:e},t))}function Yn(e){return e.startsWith(`### `)?(0,Q.jsx)(`span`,{className:`h`,children:Jn(e)}):/^(<\/?(details|summary|sub)\b|`{3,}|~{3,})/.test(e)?(0,Q.jsx)(`span`,{className:`c`,children:Jn(e)}):Jn(e)}function Xn({utc:e,phone:t,issues:n,goTo:r,showInLogs:a}){let s=Kt(),{snippets:c,fields:u,status:d,stale:f,fresh:m,error:h,model:g,basis:_,view:ee,envOff:b,priv:x}=s,S=H(e=>e.projects).map(e=>e.name),[C,w]=(0,Z.useState)(null),[T,D]=(0,Z.useState)(null),[k,A]=(0,Z.useState)(null);(0,Z.useEffect)(()=>{let e=!0;return Ht().then(t=>{e&&w(t)},()=>{e&&w([])}),Kn().then(t=>{e&&D(t)}),()=>{e=!1}},[]);let j=(0,Z.useMemo)(()=>({home:x.home,email:x.email,chats:x.chats,projects:x.projects?S:[]}),[x.home,x.email,x.chats,x.projects,S.join(`
|
|
8
|
+
`)]),ne=(0,Z.useMemo)(()=>(C??[]).filter(([e])=>!b.includes(e)),[C,b]),P=gt(u.title.trim(),j),F=(0,Z.useMemo)(()=>Et({fields:u,snippets:c,environment:ne,redact:j}),[u,c,ne,j]),re=Dt(P,u.labels,F),I=re.length>vt,ae=I?Dt(P,u.labels,null):re,L=c.reduce((e,t)=>e+xt(t),0),z=d===`drafting`,B=u.title.trim();if((0,Z.useEffect)(()=>{if(A(null),B.length<8)return;let e=!0,t=setTimeout(()=>{rt(gt(B,j)).then(t=>{e&&A(t)},()=>{})},Wn);return()=>{e=!1,clearTimeout(t)}},[B,j]),!c.length&&d===`none`)return(0,Q.jsx)(`div`,{className:`lg-pane`,children:(0,Q.jsxs)(`div`,{className:`lg-rep-empty`,"data-testid":`logs-report-empty`,children:[(0,Q.jsx)(`div`,{className:`lg-ai-ic`,children:(0,Q.jsx)(Qe,{})}),(0,Q.jsx)(`h3`,{children:`Nothing in the report yet`}),(0,Q.jsxs)(`p`,{children:[`Select lines in Logs and choose `,(0,Q.jsx)(`b`,{children:`Add to report`}),`. Or open Issues: AI may already have found something worth reporting.`]}),(0,Q.jsxs)(`div`,{className:`row`,children:[(0,Q.jsxs)(W,{variant:`outline`,size:`sm`,className:V(t&&`min-h-11`),onClick:()=>r(`logs`),children:[(0,Q.jsx)(v,{}),`Go to Logs`]}),(0,Q.jsxs)(W,{size:`sm`,className:V(t&&`min-h-11`),onClick:()=>r(`issues`),children:[(0,Q.jsx)(E,{}),`See what AI found`]})]})]})});let se=()=>{I?U(F).then(e=>{e?R.success(`Body copied. Paste it into the issue that just opened.`):R.error(`Could not copy the body. Use Copy as Markdown, then paste it into the issue.`)}):R.success(`Opened the new issue on GitHub. Check it there, then press Submit.`)},ce=async()=>{await U(Ot(P,F))?R.success(`Copied the issue as Markdown`):R.error(`Could not copy the issue`)},le=e=>{let t=s.remove(e.id);t&&R(`Removed ${X(xt(e),`line`)} from the report`,{action:{label:`Undo`,onClick:()=>Kt.getState().restore(t.snippet,t.index)}})},q=()=>void s.draft(),me=g??n.data?.model??`Claude Haiku 4.5`,J=d===`done`?(0,Q.jsx)(E,{className:`ai`}):null,he=Math.min(100,re.length/vt*100),Y=(e,t)=>(0,Q.jsx)(W,{asChild:!0,className:t,children:(0,Q.jsxs)(`a`,{href:ae,target:`_blank`,rel:`noopener noreferrer`,onClick:se,children:[(0,Q.jsx)(Qe,{}),e]})});return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(`div`,{className:`lg-pane`,"data-testid":`logs-report`,children:(0,Q.jsxs)(`div`,{className:`lg-rep`,children:[(0,Q.jsxs)(`div`,{className:`lg-rep-main`,children:[(0,Q.jsxs)(`div`,{className:`lg-rep-top`,children:[(0,Q.jsxs)(`h3`,{children:[(0,Q.jsx)(Qe,{}),`New issue for `,pe]}),(0,Q.jsxs)(`div`,{className:`lg-seg`,role:`tablist`,"aria-label":`Write or preview`,children:[(0,Q.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":ee===`write`,onClick:()=>s.setView(`write`),children:`Write`}),(0,Q.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":ee===`preview`,onClick:()=>s.setView(`preview`),children:`Preview`})]}),(0,Q.jsx)(`p`,{children:`Nothing is sent from here. GitHub opens with this filled in, and you submit it there.`})]}),ee===`preview`?(0,Q.jsxs)(`pre`,{className:`lg-md`,"data-testid":`logs-report-preview`,children:[(0,Q.jsx)(`span`,{className:`c`,children:`Title: `}),u.title.trim()?Jn(gt(u.title.trim(),j,!0)):(0,Q.jsx)(`span`,{className:`c`,children:`(no title yet)`}),`
|
|
9
|
+
`,(0,Q.jsxs)(`span`,{className:`c`,children:[`Labels: `,u.labels.join(`, `)||`none`]}),`
|
|
10
|
+
|
|
11
|
+
`,Et({fields:u,snippets:c,environment:ne,redact:j,mark:!0}).split(`
|
|
12
|
+
`).map((e,t)=>(0,Q.jsxs)(Z.Fragment,{children:[Yn(e),`
|
|
13
|
+
`]},t))]}):(0,Q.jsxs)(Q.Fragment,{children:[d===`done`?(0,Q.jsxs)(`div`,{className:`lg-aidone`,children:[(0,Q.jsx)(p,{}),(0,Q.jsx)(`span`,{children:h?(0,Q.jsxs)(`span`,{className:`text-error`,children:[`Could not write it again: `,h]}):f?`You changed the lines after Claude wrote this.`:(0,Q.jsxs)(Q.Fragment,{children:[`Drafted by `,(0,Q.jsx)(`b`,{children:me}),` from `,X(_,`line`),`. Read it over before sending.`]})}),(0,Q.jsxs)(W,{variant:`ghost`,size:`xs`,className:`ml-auto`,onClick:q,children:[(0,Q.jsx)(te,{}),f?`Write again`:`Redo`]})]}):(0,Q.jsxs)(`div`,{className:`lg-aibox`,children:[(0,Q.jsx)(`span`,{className:`lg-ai-ic`,children:(0,Q.jsx)(E,{})}),(0,Q.jsxs)(`div`,{className:`lg-aibox-txt`,children:[(0,Q.jsx)(`b`,{children:z?`Writing the report…`:`Let AI write it up`}),(0,Q.jsx)(`span`,{children:z?`Reading ${X(L,`line`)} and the environment.`:`Claude reads the ${X(L,`line`)} below and fills in the title, what happened, the steps and what you expected.`}),h&&!z&&(0,Q.jsxs)(`span`,{className:`err`,children:[`Could not write it: `,h]})]}),(0,Q.jsx)(`div`,{className:`lg-aibox-act`,children:z?(0,Q.jsxs)(`span`,{className:`lg-analyzing`,children:[(0,Q.jsx)(oe,{className:`animate-spin`}),`Drafting`]}):(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`span`,{className:`lg-modelchip`,children:[(0,Q.jsx)(E,{}),qn(me)]}),(0,Q.jsxs)(W,{size:`sm`,className:V(t&&`min-h-11`),disabled:!L,onClick:q,children:[(0,Q.jsx)(E,{}),`Draft with AI`]})]})})]}),(0,Q.jsxs)(`div`,{className:`lg-field`,children:[(0,Q.jsxs)(`label`,{htmlFor:`lg-rep-title`,children:[`Title`,J]}),z?(0,Q.jsx)(`div`,{className:`lg-skel`}):(0,Q.jsx)(`input`,{id:`lg-rep-title`,className:V(`lg-input`,m&&`lg-filled`),value:u.title,onChange:e=>s.setFields({title:e.target.value}),placeholder:`What went wrong, in one line`})]}),(0,Q.jsxs)(`div`,{className:`lg-field`,children:[(0,Q.jsx)(`span`,{className:`lbl`,children:`Labels`}),(0,Q.jsxs)(`div`,{className:`lg-labels`,children:[u.labels.map(e=>(0,Q.jsxs)(`span`,{className:`lg-label`,children:[e,(0,Q.jsx)(`button`,{type:`button`,className:`x`,"aria-label":`Remove ${e}`,onClick:()=>s.setFields({labels:u.labels.filter(t=>t!==e)}),children:(0,Q.jsx)(O,{})})]},e)),(0,Q.jsxs)(fe,{children:[(0,Q.jsx)(ue,{asChild:!0,children:(0,Q.jsxs)(`button`,{type:`button`,className:`lg-label add`,children:[(0,Q.jsx)(y,{}),`Add label`]})}),(0,Q.jsxs)(de,{align:`start`,className:`max-h-72 min-w-48`,children:[(0,Q.jsx)(G,{className:`text-xs font-normal text-text-subtle`,children:`Add a label`}),T===null&&(0,Q.jsx)(G,{className:`text-xs font-normal`,children:`Reading the labels…`}),T?.filter(e=>!u.labels.includes(e)).map(e=>(0,Q.jsx)(K,{onSelect:()=>s.setFields({labels:[...u.labels,e]}),children:e},e)),T&&!T.some(e=>!u.labels.includes(e))&&(0,Q.jsx)(G,{className:`text-xs font-normal`,children:T.length?`No more labels`:`Could not read the labels`})]})]})]})]}),(0,Q.jsx)(Zn,{id:`lg-rep-what`,label:`What happened`,mark:J,busy:z,fresh:m,rows:3,value:u.what,placeholder:`What you were doing and what went wrong`,onChange:e=>s.setFields({what:e})}),(0,Q.jsxs)(`div`,{className:`lg-grid2`,children:[(0,Q.jsx)(Zn,{id:`lg-rep-steps`,label:`Steps to reproduce`,mark:J,busy:z,fresh:m,rows:4,value:u.steps,placeholder:`1. …`,onChange:e=>s.setFields({steps:e})}),(0,Q.jsx)(Zn,{id:`lg-rep-expected`,label:`Expected`,mark:J,busy:z,fresh:m,rows:4,value:u.expected,placeholder:`What should have happened`,onChange:e=>s.setFields({expected:e})})]}),(0,Q.jsxs)(`div`,{className:`lg-field`,children:[(0,Q.jsxs)(`span`,{className:`lbl`,children:[`Log lines `,(0,Q.jsxs)(`span`,{className:`font-normal text-text-subtle`,children:[X(L,`line`),` from `,X(c.length,`place`)]})]}),(0,Q.jsx)(`div`,{className:`lg-snips`,children:c.map(t=>(0,Q.jsx)(Qn,{s:t,utc:e,onContext:e=>void s.setContext(t.id,e),onShow:()=>a(t.rows.map(e=>e.entry)),onRemove:()=>le(t)},t.id))}),(0,Q.jsxs)(`button`,{type:`button`,className:`lg-addmore`,onClick:()=>{r(`logs`),R(`Select lines, then choose Add to report`)},children:[(0,Q.jsx)(y,{}),`Add lines from Logs`]})]})]})]}),(0,Q.jsxs)(`aside`,{className:`lg-rep-side`,children:[(0,Q.jsx)(`div`,{className:`lg-card`,children:(0,Q.jsxs)(`div`,{className:`lg-send`,children:[(0,Q.jsxs)(`div`,{children:[(0,Q.jsxs)(`div`,{className:`lg-meter-l`,children:[(0,Q.jsx)(`span`,{children:I?`Too long for a link`:`Fits in a GitHub link`}),(0,Q.jsxs)(`span`,{children:[(re.length/1024).toFixed(1),` / `,vt/1024,` KB`]})]}),(0,Q.jsx)(`div`,{className:V(`lg-meter`,he>85&&`warn`),children:(0,Q.jsx)(`i`,{style:{width:`${he.toFixed(1)}%`}})})]}),!t&&(0,Q.jsxs)(Q.Fragment,{children:[Y(I?`Copy body and open GitHub`:`Open GitHub issue`,`w-full`),(0,Q.jsxs)(W,{variant:`outline`,size:`sm`,className:`w-full`,onClick:()=>void ce(),children:[(0,Q.jsx)(ie,{}),`Copy as Markdown`]})]}),(0,Q.jsx)(`div`,{className:`lg-send-note`,children:I?`The body is copied for you to paste. The title and labels still go in the link.`:`Opens github.com/${pe}/issues/new in your browser, signed in as you. Labels stick only if you can triage that repository.`}),k&&(0,Q.jsxs)(`div`,{className:V(`lg-dupe`,k.issues.length>0&&`found`),children:[k.issues.length?(0,Q.jsx)(N,{}):(0,Q.jsx)(p,{}),(0,Q.jsx)(`span`,{children:k.issues.length?(0,Q.jsxs)(Q.Fragment,{children:[`Open issues that look like this one:`,(0,Q.jsx)(`ul`,{children:k.issues.slice(0,3).map(e=>(0,Q.jsx)(`li`,{children:(0,Q.jsxs)(`a`,{href:e.url,target:`_blank`,rel:`noopener noreferrer`,children:[`#`,e.number,` `,e.title]})},e.number))})]}):(0,Q.jsxs)(Q.Fragment,{children:[`No open issue looks like this one. Searched `,`hienlh/ppm`,` for “`,k.query,`”.`]})})]})]})}),(0,Q.jsxs)(`div`,{className:`lg-card`,children:[(0,Q.jsxs)(`div`,{className:`lg-card-h`,children:[(0,Q.jsx)(l,{}),`Removed before sending`,(0,Q.jsx)(`span`,{className:`sub`,children:`see Preview`})]}),(0,Q.jsxs)(`div`,{className:`lg-priv`,children:[(0,Q.jsxs)(`div`,{className:`lg-priv-row`,children:[(0,Q.jsxs)(`span`,{className:`t`,children:[(0,Q.jsx)(`b`,{children:`Secrets and tokens`}),(0,Q.jsx)(`small`,{children:`API keys, OAuth tokens, tunnel addresses`})]}),(0,Q.jsx)(`span`,{className:`inline-flex`,title:`Always removed`,children:(0,Q.jsx)(o,{className:`lock`})})]}),Un.map(([e,t,n])=>(0,Q.jsxs)(`label`,{className:`lg-priv-row`,children:[(0,Q.jsxs)(`span`,{className:`t`,children:[(0,Q.jsx)(`b`,{children:t}),(0,Q.jsx)(`small`,{children:n})]}),(0,Q.jsx)(Ee,{checked:x[e],onCheckedChange:()=>s.togglePriv(e)})]},e))]})]}),(0,Q.jsxs)(`div`,{className:`lg-card`,children:[(0,Q.jsxs)(`div`,{className:`lg-card-h`,children:[(0,Q.jsx)(M,{}),`Environment`,(0,Q.jsx)(`span`,{className:`sub`,children:`untick to leave out`})]}),(0,Q.jsxs)(`div`,{className:`lg-card-b lg-env`,children:[C===null&&(0,Q.jsx)(`span`,{className:`text-xs text-text-subtle`,children:`Reading…`}),C?.map(([e,t])=>{let n=!b.includes(e);return(0,Q.jsxs)(`label`,{children:[(0,Q.jsx)(`input`,{type:`checkbox`,className:`sr-only`,checked:n,onChange:()=>s.toggleEnv(e)}),(0,Q.jsx)(`span`,{className:`lg-check`,"aria-hidden":`true`,"data-on":n,children:n&&(0,Q.jsx)(i,{})}),(0,Q.jsx)(`b`,{children:e}),(0,Q.jsx)(`span`,{className:`v`,children:t})]},e)})]})]})]})]})}),t&&(0,Q.jsxs)(`div`,{className:`lg-pfoot`,children:[(0,Q.jsxs)(W,{variant:`outline`,className:`min-h-11 flex-1`,onClick:()=>void ce(),children:[(0,Q.jsx)(ie,{}),`Copy`]}),Y(`Open on GitHub`,`min-h-11 flex-1`)]})]})}function Zn({id:e,label:t,mark:n,busy:r,fresh:i,rows:a,value:o,placeholder:s,onChange:c}){return(0,Q.jsxs)(`div`,{className:`lg-field`,children:[(0,Q.jsxs)(`label`,{htmlFor:e,children:[t,n]}),r?(0,Q.jsx)(`div`,{className:`lg-skel tall`}):(0,Q.jsx)(`textarea`,{id:e,className:V(`lg-textarea`,i&&`lg-filled`),rows:a,value:o,placeholder:s,onChange:e=>c(e.target.value)})]})}function Qn({s:e,utc:t,onContext:n,onShow:r,onRemove:i}){let a=qt[e.src],o=e.rows[0],s=e.rows[e.rows.length-1];return(0,Q.jsxs)(`div`,{className:`lg-snip`,children:[(0,Q.jsxs)(`div`,{className:`lg-snip-h`,children:[(0,Q.jsxs)(`span`,{className:`src`,children:[(0,Q.jsx)(a,{}),we(e.src)]}),(0,Q.jsxs)(`span`,{className:`rng`,children:[o&&s?J(o.entry.ts,s.lastTs,t):``,` · `,X(xt(e),`line`)]}),(0,Q.jsxs)(`span`,{className:`lg-ctxsel`,children:[`Context`,yt.map(t=>(0,Q.jsx)(`button`,{type:`button`,"aria-pressed":e.ctx===t,onClick:()=>n(t),children:t?`±${t}`:`none`},t))]}),(0,Q.jsxs)(`span`,{className:`end`,children:[(0,Q.jsx)(W,{variant:`ghost`,size:`icon-xs`,title:`Show in Logs`,"aria-label":`Show in Logs`,onClick:r,children:(0,Q.jsx)(k,{})}),(0,Q.jsx)(W,{variant:`ghost`,size:`icon-xs`,title:`Take out of the report`,"aria-label":`Take out of the report`,onClick:i,children:(0,Q.jsx)(O,{})})]})]}),(0,Q.jsx)(`div`,{className:`lg-snip-b`,children:bt(e).map((e,n)=>(0,Q.jsx)(Qt,{row:e.row,utc:t,ctx:e.ctx},n))})]})}var $n={logs:`Logs`,issues:`Issues`,report:`Report`};function er({mode:e,initialView:t=`logs`,onViewChange:n}){let r=e===`phone`,[i,a]=(0,Z.useState)(t),[o,c]=(0,Z.useState)(Le),[l,u]=(0,Z.useState)(`1h`),[d,f]=(0,Z.useState)(!1),[p,m]=(0,Z.useState)(!0),[h,g]=(0,Z.useState)($),[_,v]=(0,Z.useState)(!1),[ee,y]=(0,Z.useState)(null),[b,x]=(0,Z.useState)(null),S=(0,Z.useRef)(null),C=B(e=>e.logsUtc),te=B(e=>e.logsWrap),w=zt(o,l,d),T=(0,Z.useMemo)(()=>Ye(w.entries),[w.entries]),D=Bt(),O=Kt(e=>e.snippets.reduce((e,t)=>e+xt(t),0)),k=(0,Z.useRef)(n);k.current=n;let A=(0,Z.useCallback)(e=>{a(e),k.current?.(e)},[]),j=(0,Z.useCallback)(e=>{c(t=>({...t,...e})),g($)},[]),M=(0,Z.useCallback)(e=>{u(e),g($)},[]),ne=(0,Z.useCallback)(()=>{c(e=>({...Le,src:e.src})),u(`1h`),g($)},[]),N=(0,Z.useCallback)(e=>{g(e),e.keys.size&&m(!1)},[]),P=(0,Z.useCallback)(e=>{e&&((e.chat||e.src)&&(c({...Le,src:e.src??`all`,chat:e.chat??null}),e.chat&&u(`all`),g($),m(!0)),e.view?A(e.view):(e.chat||e.src)&&A(`logs`))},[A]);(0,Z.useEffect)(()=>{P(Ze());let e=()=>P(Ze());return window.addEventListener(Xe,e),()=>window.removeEventListener(Xe,e)},[P]);let F=(0,Z.useCallback)(e=>{if(!e.length)return;let t=e.reduce((e,t)=>t.ts<e.ts?t:e),n={...Le,src:St(e),levels:{...Le.levels,debug:e.some(e=>e.lv===`debug`)}},r=ve(t.ts,Date.now());c(n),u(r),g($),m(!1),x({ids:e.map(e=>e.id),key:It(n,r),reach:t.id,reached:!1}),A(`logs`)},[A]);(0,Z.useEffect)(()=>{if(!b||w.key!==b.key||w.loading||w.loadingEarlier||!w.meta)return;let e=new Set(b.ids),t=T.filter(t=>t.ids.some(t=>e.has(t)));if(t.reduce((t,n)=>t+n.ids.filter(t=>e.has(t)).length,0)<e.size&&w.meta.hasMore&&!b.reached){x({...b,reached:!0}),w.loadEarlier(b.reach);return}if(x(null),!t.length){R(w.meta.reachMissed===`far`?`Those lines are too far back to show here`:`Those lines are no longer kept`);return}g({keys:new Set(t.map(e=>e.key)),anchor:t[0].key,cursor:t[t.length-1].key}),y({key:t[0].key,seq:Date.now()})},[b,w,T]);let[re,ie]=(0,Z.useState)(!1),I=(0,Z.useRef)(O);(0,Z.useEffect)(()=>{let e=O>I.current;if(I.current=O,!e)return;ie(!0);let t=setTimeout(()=>ie(!1),1200);return()=>clearTimeout(t)},[O]);let ae=D.data?.issues.filter(e=>e.cls!==`expected`&&!e.dismissed).length??0,oe={feed:w,rows:T,filter:o,setFilter:j,clearFilters:ne,range:l,setRange:M,paused:d,setPaused:f,follow:p,setFollow:m,sel:h,setSel:N,utc:C,wrap:r||te,reveal:ee,listTop:S,goTo:A,togglePrefs:()=>v(e=>!e)},L={utc:C,phone:r,issues:D,goTo:A,showInLogs:F};return(0,Q.jsxs)(`div`,{className:`lg-app`,"data-mode":r?`phone`:`window`,"data-testid":`logs-app`,children:[r&&(0,Q.jsxs)(`div`,{className:`lg-head`,children:[(0,Q.jsx)(`h2`,{children:`Logs`}),(0,Q.jsx)($t,{paused:d,pending:w.pausedCount})]}),(0,Q.jsxs)(`div`,{className:`lg-tabs`,role:`tablist`,"aria-label":`Logs`,children:[et.map(e=>(0,Q.jsxs)(`button`,{type:`button`,role:`tab`,"aria-selected":i===e,onClick:()=>A(e),"data-testid":`logs-tab-${e}`,className:V(`inline-flex min-h-11 shrink-0 items-center px-4 text-sm font-medium transition-colors`,i===e?`-mb-px border-b-2 border-primary text-text-primary`:`text-text-subtle hover:text-text-secondary`),children:[e===`issues`&&(0,Q.jsx)(E,{className:`lg-tab-ai`}),$n[e],e===`issues`&&ae>0&&(0,Q.jsx)(`span`,{className:`lg-tabn`,children:ae}),e===`report`&&O>0&&(0,Q.jsx)(`span`,{className:V(`lg-tabn acc`,re&&`pulse`),children:O.toLocaleString(`en-US`)})]},e)),!r&&(0,Q.jsxs)(`div`,{className:`ml-auto flex shrink-0 items-center gap-2 pl-3 pr-1`,children:[(0,Q.jsx)($t,{paused:d,pending:w.pausedCount}),(0,Q.jsx)(`button`,{type:`button`,"aria-label":`Logs preferences`,"aria-expanded":_,onClick:()=>v(e=>!e),className:V(`flex size-11 items-center justify-center rounded transition-colors md:size-8`,_?`bg-primary/10 text-primary`:`text-text-subtle hover:bg-surface-hover hover:text-text-secondary`),children:(0,Q.jsx)(s,{className:`size-4`})})]})]}),_&&!r&&(0,Q.jsx)(tr,{auto:D.data?.auto,setAuto:D.setAuto,files:w.meta?.files}),(0,Q.jsx)(`div`,{className:`lg-body`,children:i===`logs`?r?(0,Q.jsx)(Pn,{...oe}):(0,Q.jsx)(Dn,{...oe}):i===`issues`?(0,Q.jsx)(Bn,{...L}):(0,Q.jsx)(Xn,{...L})})]})}function tr({auto:e,setAuto:t,files:n}){let r=B(e=>e.logsUtc),i=B(e=>e.setLogsUtc),a=B(e=>e.logsBadge),o=B(e=>e.setLogsBadge);return(0,Q.jsxs)(`div`,{className:`lg-prefs`,"data-testid":`logs-prefs`,children:[(0,Q.jsxs)(`span`,{className:`inline-flex items-center gap-2`,children:[`Times`,(0,Q.jsxs)(`button`,{type:`button`,className:`lg-chip`,"aria-pressed":!r,onClick:()=>i(!1),children:[`Local (`,ke(),`)`]}),(0,Q.jsx)(`button`,{type:`button`,className:`lg-chip`,"aria-pressed":r,onClick:()=>i(!0),children:`UTC`})]}),(0,Q.jsxs)(`label`,{children:[(0,Q.jsx)(Ee,{checked:a,onCheckedChange:o}),`Red dot on the Logs button for a likely bug`]}),(0,Q.jsxs)(`label`,{children:[(0,Q.jsx)(Ee,{checked:!!e,disabled:e===void 0,onCheckedChange:e=>void t(e)}),`Let AI sort new errors and warnings`]}),n&&(0,Q.jsxs)(`span`,{children:[`Keeps `,(0,Q.jsxs)(`b`,{children:[n.generations,` × `,Y(n.capBytes)]}),` of ppm.log and `,(0,Q.jsx)(`b`,{children:X(n.browserRetentionDays,`day`)}),` of browser logs`]})]})}export{er as t};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{E as e}from"./vendor-markdown-C-P1aR4p.js";import"./vendor-ui-BTSIXzhZ.js";import"./icons-BwyIKaTT.js";import"./api-client-xQDlhUTu.js";import"./settings-store-B4mLp19V.js";import"./portal-container-context-NBi-KGK0.js";import"./window-store-DqX_qmkQ.js";import"./panel-store-BJhazigC.js";import"./project-store-BLGl9IAO.js";import"./project-framework-store-DwLxaRan.js";import"./session-list-sync-triggers-DtJI5KF0.js";import"./tab-store-D5I52eLN.js";import"./use-is-mobile-VRV9eZy1.js";import"./button-C9ZXWb3b.js";import"./dropdown-menu-BQidk_OJ.js";import"./mobile-bottom-sheet-DArbIyrD.js";import"./use-visual-viewport-MmugpRg-.js";import"./send-to-chat-CWV1qd3c.js";import{t}from"./logs-app-C7n9GSCn.js";var n=e(),r=()=>(0,n.jsx)(t,{mode:`phone`});export{r as LogsTab};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{E as e}from"./vendor-markdown-C-P1aR4p.js";import"./vendor-ui-BTSIXzhZ.js";import"./icons-BwyIKaTT.js";import"./api-client-xQDlhUTu.js";import"./settings-store-B4mLp19V.js";import"./portal-container-context-NBi-KGK0.js";import{n as t}from"./window-store-DqX_qmkQ.js";import"./panel-store-BJhazigC.js";import"./project-store-BLGl9IAO.js";import"./project-framework-store-DwLxaRan.js";import"./session-list-sync-triggers-DtJI5KF0.js";import"./tab-store-D5I52eLN.js";import"./use-is-mobile-VRV9eZy1.js";import"./button-C9ZXWb3b.js";import"./dropdown-menu-BQidk_OJ.js";import"./mobile-bottom-sheet-DArbIyrD.js";import"./use-visual-viewport-MmugpRg-.js";import{an as n}from"./index-DLB3j_P0.js";import"./send-to-chat-CWV1qd3c.js";import{t as r}from"./logs-app-C7n9GSCn.js";var i=e();function a({id:e,payload:a}){let o=t(e=>e.setPayload);return(0,i.jsx)(r,{mode:`window`,initialView:n(a?.view),onViewChange:t=>o(e,{view:t})})}export{a as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-C5c2KzVm.js";import{L as t}from"./index-DLB3j_P0.js";var n=e({LspConnection:()=>a,acquireLspConnection:()=>s,releaseLspConnection:()=>l,retryUnavailableLspDocuments:()=>c}),r=15e3;function i(e){clearTimeout(e.timer),e.detach?.()}var a=class{ws;docs=new Map;pending=new Map;notificationListeners=new Set;statusListeners=new Set;nextId=1;constructor(e){this.projectName=e,this.ws=new t(`/ws/project/${encodeURIComponent(e)}/lsp`),this.ws.onMessage(e=>this.receive(e)),this.ws.connect()}open(e,t){this.docs.set(e,{source:t,status:{state:`opening`}}),this.setStatus(e,{state:`opening`}),this.sendOpen(e)}sendOpen(e){let t=this.docs.get(e);t&&this.send({t:`open`,path:e,version:t.source.getVersion(),text:t.source.getText(),clientUri:t.source.clientUri})}close(e){this.docs.delete(e)&&this.send({t:`close`,path:e})}change(e,t,n){this.docs.has(e)&&this.send({t:`change`,path:e,version:t,changes:n})}save(e,t){this.docs.has(e)&&this.send({t:`save`,path:e,text:t})}statusOf(e){return this.docs.get(e)?.status}retryUnavailable(){for(let[e,t]of this.docs)t.status.state===`unavailable`&&(this.setStatus(e,{state:`opening`}),this.sendOpen(e))}request(e,t,n,i={}){let a=this.docs.get(e);if(!a||a.status.state!==`ready`)return Promise.reject(Error(`No language server is ready for ${e}`));let{timeoutMs:o=r,signal:s}=i;if(s?.aborted)return Promise.reject(Error(`${t} was cancelled`));let c=this.nextId++;return new Promise((r,i)=>{let a=setTimeout(()=>{this.pending.delete(c),this.send({t:`cancel`,id:c}),i(Error(`${t} timed out`))},o),l=()=>{this.pending.delete(c)&&(clearTimeout(a),this.send({t:`cancel`,id:c}),i(Error(`${t} was cancelled`)))};s?.addEventListener(`abort`,l,{once:!0}),this.pending.set(c,{resolve:r,reject:i,timer:a,detach:s?()=>s.removeEventListener(`abort`,l):void 0}),this.send({t:`request`,id:c,path:e,method:t,params:n})})}onNotification(e){return this.notificationListeners.add(e),()=>this.notificationListeners.delete(e)}onStatus(e){return this.statusListeners.add(e),()=>this.statusListeners.delete(e)}send(e){this.ws.send(JSON.stringify(e))}receive(e){let t;try{t=JSON.parse(typeof e.data==`string`?e.data:``)}catch{return}switch(t.t){case`hello`:for(let e of this.docs.keys())this.sendOpen(e);break;case`ready`:this.setStatus(String(t.path),{state:`ready`,languageId:String(t.languageId),server:t.server,projectPath:String(t.projectPath??``),capabilities:t.capabilities??{}});break;case`unavailable`:this.setStatus(String(t.path),{state:`unavailable`,reason:String(t.reason),server:t.server??null,message:String(t.message)});break;case`resync`:{let e=String(t.path),n=this.docs.get(e);n&&this.send({t:`change`,path:e,version:n.source.getVersion(),text:n.source.getText()});break}case`response`:{let e=this.pending.get(Number(t.id));if(!e)return;i(e),this.pending.delete(Number(t.id)),e.resolve(t.result);break}case`error`:{let e=this.pending.get(Number(t.id));if(!e)return;i(e),this.pending.delete(Number(t.id)),e.reject(Error(String(t.message)));break}case`notification`:for(let e of this.notificationListeners)e(String(t.method),t.params);break}}setStatus(e,t){let n=this.docs.get(e);n&&(n.status=t);for(let n of this.statusListeners)n(e,t)}dispose(){for(let e of this.pending.values())i(e),e.reject(Error(`The language server connection was closed`));this.pending.clear(),this.docs.clear(),this.notificationListeners.clear(),this.statusListeners.clear(),this.ws.disconnect()}},o=new Map;function s(e){let t=o.get(e);if(t)return t.holders++,t.connection;let n=new a(e);return o.set(e,{connection:n,holders:1}),n}function c(){for(let e of o.values())e.connection.retryUnavailable()}function l(e){let t=o.get(e);return!t||(t.holders--,t.holders>0)?!1:(o.delete(e),t.connection.dispose(),!0)}export{c as i,n,l as r,s as t};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/mermaid.core-DNHX7DSU.js","assets/preload-helper-CM8YhcCa.js","assets/dist-ChawRilJ.js","assets/rolldown-runtime-C5c2KzVm.js","assets/chunk-PU5JKC2W-DJY3yjhJ.js","assets/src-C1GX5Kxw.js","assets/chunk-GEFDOKGD-DnsnpeGb.js","assets/math-iYw0Gln4.js","assets/chunk-7R4GIKGN-vQspoIwd.js","assets/isArrayLikeObject-DHTG10am.js","assets/marked.esm-jqwIt-AK.js","assets/isEmpty-dcb0OVvj.js","assets/chunk-GLR3WWYH-Co8QL50g.js","assets/chunk-KYZI473N-B6LAvX90.js","assets/chunk-PQ6SQG4A-B9GHRcOM.js","assets/chunk-YBOYWFTD-DVV5zPYi.js","assets/rough.esm-DK8Fp44C.js","assets/chunk-O4XLMI2P-DeFJl-l6.js","assets/line-DXN3CJk7.js","assets/path-z62pEMqs.js","assets/array-BQrdK5nm.js","assets/chunk-MX3YWQON-EGGLXe7u.js","assets/chunk-HHEYEP7N-CErk3LHZ.js","assets/chunk-XPW4576I-CYBtYKPi.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{C as t,D as n,E as r,T as i,a,b as o,c as s,d as c,f as l,i as u,l as d,n as ee,o as te,r as ne,s as re,t as f,v as p,w as m,x as ie}from"./vendor-markdown-C-P1aR4p.js";import{a as h}from"./api-client-xQDlhUTu.js";import{t as ae}from"./preload-helper-CM8YhcCa.js";import{t as g}from"./utils-Bslrbb-G.js";import{i as oe}from"./project-store-BLGl9IAO.js";import{t as _}from"./tab-store-D5I52eLN.js";import{i as se,o as ce,t as v}from"./file-store-BQ41vIs5.js";import{r as le}from"./clipboard-D-VCry-F.js";import{n as y}from"./fs-api-CFtQzsIJ.js";import{$ as ue,M as de,Q as fe,Ur as pe,Z as b,_i as me,it as he,j as ge,n as _e,r as ve,rt as x,t as ye}from"./index-DLB3j_P0.js";import{r as be,t as xe}from"./image-gallery-BuxSgBug.js";import{a as S,c as C,l as Se,n as w,o as T,s as E,t as Ce}from"./lib-5Chotbwm.js";import{r as D}from"./run-in-terminal-ujoc25vj.js";function O(e){u(e,[/\r?\n|\r/g,k])}function k(){return{type:`break`}}function A(){return function(e){O(e)}}var we={},Te={}.hasOwnProperty,j=x(`type`,{handlers:{root:De,element:Me,text:Ae,comment:je,doctype:ke}});function Ee(e,n){let r=(n||we).space;return j(e,r===`svg`?m:t)}function De(e,t){let n={nodeName:`#document`,mode:(e.data||{}).quirksMode?`quirks`:`no-quirks`,childNodes:[]};return n.childNodes=M(e.children,n,t),N(e,n),n}function Oe(e,t){let n={nodeName:`#document-fragment`,childNodes:[]};return n.childNodes=M(e.children,n,t),N(e,n),n}function ke(e){let t={nodeName:`#documentType`,name:`html`,publicId:``,systemId:``,parentNode:null};return N(e,t),t}function Ae(e){let t={nodeName:`#text`,value:e.value,parentNode:null};return N(e,t),t}function je(e){let t={nodeName:`#comment`,data:e.value,parentNode:null};return N(e,t),t}function Me(e,t){let n=t,r=n;e.type===`element`&&e.tagName.toLowerCase()===`svg`&&n.space===`html`&&(r=m);let i=[],a;if(e.properties){for(a in e.properties)if(a!==`children`&&Te.call(e.properties,a)){let t=Ne(r,a,e.properties[a]);t&&i.push(t)}}let o=r.space;p(o);let s={nodeName:e.tagName,tagName:e.tagName,attrs:i,namespaceURI:l[o],childNodes:[],parentNode:null};return s.childNodes=M(e.children,s,r),N(e,s),e.tagName===`template`&&e.content&&(s.content=Oe(e.content,r)),s}function Ne(e,t,n){let r=i(e,t);if(n===!1||n==null||typeof n==`number`&&Number.isNaN(n)||!n&&r.boolean)return;Array.isArray(n)&&(n=r.commaSeparated?ie(n):o(n));let a={name:r.attribute,value:n===!0?``:String(n)};if(r.space&&r.space!==`html`&&r.space!==`svg`){let e=a.name.indexOf(`:`);e<0?a.prefix=``:(a.name=a.name.slice(e+1),a.prefix=r.attribute.slice(0,e)),a.namespace=l[r.space]}return a}function M(e,t,n){let r=-1,i=[];if(e)for(;++r<e.length;){let a=j(e[r],n);a.parentNode=t,i.push(a)}return i}function N(e,t){let n=e.position;n&&n.start&&n.end&&(p(typeof n.start.offset==`number`),p(typeof n.end.offset==`number`),t.sourceCodeLocation={startLine:n.start.line,startCol:n.start.column,startOffset:n.start.offset,endLine:n.end.line,endCol:n.end.column,endOffset:n.end.offset})}var Pe=/<(\/?)(iframe|noembed|noframes|plaintext|script|style|textarea|title|xmp)(?=[\t\n\f\r />])/gi,Fe=new Set([`mdxFlowExpression`,`mdxJsxFlowElement`,`mdxJsxTextElement`,`mdxTextExpression`,`mdxjsEsm`]),P={sourceCodeLocationInfo:!0,scriptingEnabled:!1};function F(e,t){let n=Ge(e),r=x(`type`,{handlers:{root:Ie,element:Le,text:Re,comment:L,doctype:ze,raw:Ve},unknown:He}),i={parser:n?new S(P):S.getFragmentParser(void 0,P),handle(e){r(e,i)},stitches:!1,options:t||{}};r(e,i),R(i,d());let a=Se(n?i.parser.document:i.parser.getFragment(),{file:i.options.file});return i.stitches&&re(a,`comment`,function(e,t,n){let r=e;if(r.value.stitch&&n&&t!==void 0){let e=n.children;return e[t]=r.value.stitch,t}}),a.type===`root`&&a.children.length===1&&a.children[0].type===e.type?a.children[0]:a}function I(e,t){let n=-1;if(e)for(;++n<e.length;)t.handle(e[n])}function Ie(e,t){I(e.children,t)}function Le(e,t){Ue(e,t),I(e.children,t),We(e,t)}function Re(e,t){t.parser.tokenizer.state>4&&(t.parser.tokenizer.state=0);let n={type:C.CHARACTER,chars:e.value,location:B(e)};R(t,d(e)),t.parser.currentToken=n,t.parser._processToken(t.parser.currentToken)}function ze(e,t){let n={type:C.DOCTYPE,name:`html`,forceQuirks:!1,publicId:``,systemId:``,location:B(e)};R(t,d(e)),t.parser.currentToken=n,t.parser._processToken(t.parser.currentToken)}function Be(e,t){t.stitches=!0;let n=Ke(e);`children`in e&&`children`in n&&(n.children=F({type:`root`,children:e.children},t.options).children),L({type:`comment`,value:{stitch:n}},t)}function L(e,t){let n=e.value,r={type:C.COMMENT,data:n,location:B(e)};R(t,d(e)),t.parser.currentToken=r,t.parser._processToken(t.parser.currentToken)}function Ve(e,t){if(t.parser.tokenizer.preprocessor.html=``,t.parser.tokenizer.preprocessor.pos=-1,t.parser.tokenizer.preprocessor.lastGapPos=-2,t.parser.tokenizer.preprocessor.gapStack=[],t.parser.tokenizer.preprocessor.skipNextNewLine=!1,t.parser.tokenizer.preprocessor.lastChunkWritten=!1,t.parser.tokenizer.preprocessor.endOfChunkHit=!1,t.parser.tokenizer.preprocessor.isEol=!1,z(t,d(e)),t.parser.tokenizer.write(t.options.tagfilter?e.value.replace(Pe,`<$1$2`):e.value,!1),t.parser.tokenizer._runParsingLoop(),t.parser.tokenizer.state===72||t.parser.tokenizer.state===78){t.parser.tokenizer.preprocessor.lastChunkWritten=!0;let e=t.parser.tokenizer._consume();t.parser.tokenizer._callState(e)}}function He(e,t){let n=e;if(t.options.passThrough&&t.options.passThrough.includes(n.type))Be(n,t);else{let e=``;throw Fe.has(n.type)&&(e=". It looks like you are using MDX nodes with `hast-util-raw` (or `rehype-raw`). If you use this because you are using remark or rehype plugins that inject `'html'` nodes, then please raise an issue with that plugin, as its a bad and slow idea. If you use this because you are using markdown syntax, then you have to configure this utility (or plugin) to pass through these nodes (see `passThrough` in docs), but you can also migrate to use the MDX syntax"),Error("Cannot compile `"+n.type+"` node"+e)}}function R(e,t){z(e,t);let n=e.parser.tokenizer.currentCharacterToken;n&&n.location&&(n.location.endLine=e.parser.tokenizer.preprocessor.line,n.location.endCol=e.parser.tokenizer.preprocessor.col+1,n.location.endOffset=e.parser.tokenizer.preprocessor.offset+1,e.parser.currentToken=n,e.parser._processToken(e.parser.currentToken)),e.parser.tokenizer.paused=!1,e.parser.tokenizer.inLoop=!1,e.parser.tokenizer.active=!1,e.parser.tokenizer.returnState=T.DATA,e.parser.tokenizer.charRefCode=-1,e.parser.tokenizer.consumedAfterSnapshot=-1,e.parser.tokenizer.currentLocation=null,e.parser.tokenizer.currentCharacterToken=null,e.parser.tokenizer.currentToken=null,e.parser.tokenizer.currentAttr={name:``,value:``}}function z(e,t){if(t&&t.offset!==void 0){let n={startLine:t.line,startCol:t.column,startOffset:t.offset,endLine:-1,endCol:-1,endOffset:-1};e.parser.tokenizer.preprocessor.lineStartPos=-t.column+1,e.parser.tokenizer.preprocessor.droppedBufferSize=t.offset,e.parser.tokenizer.preprocessor.line=t.line,e.parser.tokenizer.currentLocation=n}}function Ue(e,t){let n=e.tagName.toLowerCase();if(t.parser.tokenizer.state===T.PLAINTEXT)return;R(t,d(e));let r=t.parser.openElements.current,i=`namespaceURI`in r?r.namespaceURI:l.html;i===l.html&&n===`svg`&&(i=l.svg);let a=Ee({...e,children:[]},{space:i===l.svg?`svg`:`html`}),o={type:C.START_TAG,tagName:n,tagID:E(n),selfClosing:!1,ackSelfClosing:!1,attrs:`attrs`in a?a.attrs:[],location:B(e)};t.parser.currentToken=o,t.parser._processToken(t.parser.currentToken),t.parser.tokenizer.lastStartTagName=n}function We(e,t){let n=e.tagName.toLowerCase();if(!t.parser.tokenizer.inForeignNode&&he.includes(n)||t.parser.tokenizer.state===T.PLAINTEXT)return;R(t,s(e));let r={type:C.END_TAG,tagName:n,tagID:E(n),selfClosing:!1,ackSelfClosing:!1,attrs:[],location:B(e)};t.parser.currentToken=r,t.parser._processToken(t.parser.currentToken),n===t.parser.tokenizer.lastStartTagName&&(t.parser.tokenizer.state===T.RCDATA||t.parser.tokenizer.state===T.RAWTEXT||t.parser.tokenizer.state===T.SCRIPT_DATA)&&(t.parser.tokenizer.state=T.DATA)}function Ge(e){let t=e.type===`root`?e.children[0]:e;return!!(t&&(t.type===`doctype`||t.type===`element`&&t.tagName.toLowerCase()===`html`))}function B(e){let t=d(e)||{line:void 0,column:void 0,offset:void 0},n=s(e)||{line:void 0,column:void 0,offset:void 0};return{startLine:t.line,startCol:t.column,startOffset:t.offset,endLine:n.line,endCol:n.column,endOffset:n.offset}}function Ke(e){return`children`in e?c({...e,children:[]}):c(e)}function qe(e){return function(t,n){return F(t,{...e,file:n})}}var V=`$$`,Je=[{open:`\\[`,close:`\\]`,allowNewline:!0},{open:`\\(`,close:`\\)`,allowNewline:!1}];function Ye(e){let t=[],n=``,r=0,i=-1,a=0;for(let o of e.split(`
|
|
3
|
+
`)){let e=a+o.length,s=/^ {0,3}(`{3,}|~{3,})/.exec(o);i>=0?s&&s[1][0]===n&&s[1].length>=r&&/^ {0,3}[`~]+[ \t]*$/.test(o)&&(t.push([i,e]),i=-1):s&&(n=s[1][0],r=s[1].length,i=a),a=e+1}return i>=0&&t.push([i,e.length]),t}function Xe(e,t){let n=[],r=0;for(;r<e.length;){let i=t.find(([e,t])=>r>=e&&r<t);if(i){r=i[1];continue}if(e[r]!=="`"){r++;continue}let a=0;for(;e[r+a]==="`";)a++;let o=r+a,s=-1;for(;o<e.length;){if(e[o]!=="`"){o++;continue}let t=0;for(;e[o+t]==="`";)t++;if(t===a){s=o+t;break}o+=t}if(s<0){r+=a;continue}n.push([r,s]),r=s}return n}function Ze(e){if(!e.includes(`\\[`)&&!e.includes(`\\(`))return e;let t=Ye(e),n=[...t,...Xe(e,t)],r=e=>n.some(([t,n])=>e>=t&&e<n),i=``,a=0;for(;a<e.length;){let t=n.find(([e,t])=>a>=e&&a<t);if(t){i+=e.slice(a,t[1]),a=t[1];continue}let o=Je.find(t=>e.startsWith(t.open,a));if(!o||e[a-1]===`\\`){i+=e[a],a++;continue}let s=a+o.open.length,c=o.allowNewline?e.length:Qe(e,`
|
|
4
|
+
`,s),l=-1;for(let t=s;t<=c-o.close.length;t++)if(e.startsWith(o.close,t)&&!r(t)){l=t;break}if(l<0){i+=e[a],a++;continue}i+=V+e.slice(s,l)+V,a=l+o.close.length}return i}function Qe(e,t,n){let r=e.indexOf(t,n);return r<0?e.length:r}var H=e(n(),1),$e=RegExp(`\\.(ts|tsx|js|jsx|mjs|cjs|py|json|md|mdx|yaml|yml|toml|css|scss|less|html|htm|sh|bash|zsh|go|rs|sql|rb|java|kt|swift|c|cpp|h|hpp|cs|vue|svelte|txt|env|cfg|conf|ini|xml|csv|log|dockerfile|makefile|gradle|output)$`,`i`),et=/[*?{}\[\]]/,U=/^(\/|[A-Za-z]:[/\\])/;function tt(e){return U.test(e)||W(e)?e:te(e)}function W(e){if(!e||e.startsWith(`#`)||/[?*\u0000-\u001f]/.test(e))return null;let t=e;if(/^file:/i.test(t)){let e=t.match(/^file:\/\/(?:localhost)?(\/.*)$/i);if(!e)return null;t=e[1]}let n=de(t);if(!n)return null;let r=n.line?n.path:n.path.split(`#`)[0];try{r=decodeURIComponent(r)}catch{return null}return!r||/[\u0000-\u001f\u007f]/.test(r)||/^[\\/]{2}/.test(r)||/^[a-z][a-z\d+.-]*:/i.test(r)&&!/^[a-z]:[/\\]/i.test(r)?null:(r=r.replace(/^\/([a-z]:[/\\])/i,`$1`),{path:r,line:n.line})}var G=(0,H.createContext)(null),K=()=>(0,H.useContext)(G);function q(e,t){return e.flatMap(e=>[...e.name===t?[e.path]:[],...q(e.children??[],t)])}function nt(e){let t=_(e=>e.openTab),n=_(e=>e.updateTab);return(0,H.useCallback)(async(r,i)=>{if(!r)return;let a=()=>me(ge(r,i));if(/\.output$/.test(r)){let e=ye.getState(),t=e.findByOutput(r);if(t){e.openPanel(t.shellId);return}}let o=oe.getState().projects.find(t=>t.name===e)?.path,s=/^(\/|[a-z]:[/\\]|~(?:[/\\]|$))/i.test(r),c=s?r:o?v(o,r):null;if(!c){a();return}let l=async r=>{let s=await y.stat(r);for(let e=0;s.kind===`symlink`&&s.target&&e<8;e++){let e=s.target,t=s.path.slice(0,s.path.length-s.name.length);s=await y.stat(/^(\/|[a-z]:[/\\])/i.test(e)?e:v(t,e))}if(s.kind===`directory`){await pe(s.path);return}if(s.kind!==`file`){a();return}let c=o?se(o,s.path):null,l={filePath:c??s.path};e&&(l.projectName=e),i&&Object.assign(l,{lineNumber:i.start,endLine:i.end,revealAt:Date.now()});let u=t({type:`editor`,title:s.name,metadata:l,projectId:c===null?null:e??null,closable:!0});i&&u&&n(u,{metadata:l})};try{await l(c)}catch{if(!s&&!/[/\\]/.test(r)&&o){let e=q(ce.getState().tree,g(r));if(e.length===1)try{await l(v(o,e[0]));return}catch{}}a()}},[e,t,n])}var J=r();function rt(e,t,n){let[r,i]=(0,H.useState)(()=>n?fe(e,t):null);return(0,H.useEffect)(()=>{if(!n){i(null);return}let r=!1;b();let a=()=>{b(),ue(e,t).then(e=>{r||i(e)}).catch(()=>{r||i(null)})};a();let o=()=>{a()};return window.addEventListener(`ppm:shiki-theme-change`,o),()=>{r=!0,window.removeEventListener(`ppm:shiki-theme-change`,o)}},[e,t,n]),r}var it=/^(sequenceDiagram|flowchart|graph\s|classDiagram|stateDiagram|erDiagram|journey|gantt|pie|quadrantChart|requirementDiagram|gitGraph|mindmap|timeline|sankey|xychart|block-beta|packet-beta|architecture-beta|kanban)\b/,Y=null;function at(){return Y||=ae(()=>import(`./mermaid.core-DNHX7DSU.js`).then(e=>(e.default.initialize({startOnLoad:!1,theme:`default`,securityLevel:`strict`,fontFamily:`ui-sans-serif, system-ui, sans-serif`}),e.default)),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23])),Y}function X(e){return e?e.type===`text`?e.value??``:e.children?e.children.map(X).join(``):``:``}function ot({children:e,node:t,...n}){let{codeActions:r,projectName:i,isStreaming:a}=K(),o=t?.children?.[0],s=(o?.properties?.className??[]).find(e=>e.startsWith(`language-`))?.replace(`language-`,``),c=X(o);if(s===`mermaid`||!s&&it.test(c.trim()))return(0,J.jsx)(lt,{source:c.trim()});let l=/^(bash|sh|shell|zsh)$/.test(s||``)||!s&&c.startsWith(`$`),u=rt(c,s,!a),d=(0,H.useMemo)(()=>u?{__html:u}:null,[u]);return(0,J.jsxs)(`div`,{className:`relative group`,children:[d?(0,J.jsx)(`div`,{className:`shiki-block`,dangerouslySetInnerHTML:d}):(0,J.jsx)(`pre`,{...n,children:e}),r&&(0,J.jsxs)(`div`,{className:`code-actions absolute top-1 right-1 flex gap-1`,children:[(0,J.jsx)(Q,{title:`Copy`,icon:(0,J.jsx)(ut,{}),activeIcon:(0,J.jsx)(dt,{}),onClick:()=>void le(c)}),l&&i&&(0,J.jsx)(Q,{title:`Send to terminal`,icon:(0,J.jsx)(ft,{}),onClick:()=>D(c,i)})]})]})}var st=/^(.+?):(\d+)(?:-(\d+))?$/;function Z(e){return!!e&&!e.includes(` `)&&!et.test(e)&&$e.test(e)}function ct({className:e,children:t,node:n,...r}){let{openFileOrSearch:i}=K();if(e)return(0,J.jsx)(`code`,{className:e,...r,children:t});let a=String(t??``).trim(),o=null,s,c=a.match(st);if(c&&Z(c[1])?(o=c[1],s={start:Number(c[2]),end:c[3]?Number(c[3]):void 0}):Z(a)&&(o=a),o){let e=o;return(0,J.jsx)(`code`,{onClick:()=>i(e,s),style:{cursor:`pointer`,textDecoration:`underline`,textDecorationStyle:`dotted`},...r,children:t})}return(0,J.jsx)(`code`,{...r,children:t})}function lt({source:e}){let{openDiagramOverlay:t}=K(),[n,r]=(0,H.useState)(null),i=(0,H.useMemo)(()=>n?{__html:n}:null,[n]);return(0,H.useEffect)(()=>{let t=!1,n=`mermaid-${Math.random().toString(36).slice(2,9)}`;return at().then(async i=>{if(!await i.parse(e,{suppressErrors:!0}))throw Error(`invalid mermaid syntax`);let{svg:a}=await i.render(n,e);t||r(a)}).catch(()=>{document.getElementById(n)?.remove(),document.getElementById(`d${n}`)?.remove()}),()=>{t=!0}},[e]),!n||!i?(0,J.jsx)(`pre`,{children:(0,J.jsx)(`code`,{children:e})}):(0,J.jsxs)(`div`,{className:`mermaid-diagram group relative cursor-pointer rounded-lg border border-border bg-white dark:bg-panel-2 p-3 overflow-x-auto my-2`,onClick:()=>t(n),children:[(0,J.jsx)(`div`,{dangerouslySetInnerHTML:i}),(0,J.jsx)(`div`,{className:`absolute top-2 right-2 flex items-center gap-1 px-2 py-1 rounded bg-black/60 text-white text-xs can-hover:opacity-0 can-hover:group-hover:opacity-100 transition-opacity pointer-events-none`,children:`Click to expand`})]})}function Q({title:e,icon:t,activeIcon:n,onClick:r}){let[i,a]=(0,H.useState)(!1);return(0,J.jsx)(`button`,{className:`flex items-center justify-center size-6 rounded bg-surface-elevated/80 hover:bg-surface-elevated text-text-secondary hover:text-text-primary transition-colors border border-border/50`,title:e,onClick:()=>{r(),n&&(a(!0),setTimeout(()=>a(!1),2e3))},children:i&&n?n:t})}var ut=()=>(0,J.jsxs)(`svg`,{width:`12`,height:`12`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,J.jsx)(`rect`,{width:`14`,height:`14`,x:`8`,y:`8`,rx:`2`,ry:`2`}),(0,J.jsx)(`path`,{d:`M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2`})]}),dt=()=>(0,J.jsx)(`svg`,{width:`12`,height:`12`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:(0,J.jsx)(`polyline`,{points:`20 6 9 17 4 12`})}),ft=()=>(0,J.jsxs)(`svg`,{width:`12`,height:`12`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,J.jsx)(`polyline`,{points:`4 17 10 11 4 5`}),(0,J.jsx)(`line`,{x1:`12`,y1:`19`,x2:`20`,y2:`19`})]}),pt={...w,strip:[...w.strip??[],`style`],tagNames:[...w.tagNames??[],`abbr`,`mark`,`small`,`u`],ancestors:{...w.ancestors,source:[`picture`]},attributes:{...w.attributes,code:[[`className`,/^language-./,`math-inline`,`math-display`]]},protocols:{cite:[`http`,`https`],longDesc:[`http`,`https`]}},mt=w.clobberPrefix??`user-content-`;function $(e){let t=e.tagName===`a`?e.properties?.href:void 0;typeof t==`string`&&t.length>1&&t.startsWith(`#`)&&(e.properties.href=`#${mt}${t.slice(1)}`),e.children?.forEach($)}function ht(){return e=>$(e)}var gt={clobberPrefix:``},_t=[[ne,{singleTilde:!1}],[ee,{singleDollarTextMath:!1}],A],vt=[qe,[Ce,pt],ht,f],yt=[f],bt={a:St,img:Ct,pre:ot,code:ct,table:wt};function xt({content:e,projectName:t,className:n=``,codeActions:r=!1,isStreaming:i=!1,rawHtml:o=!0}){let s=ve(e=>e.open),c=_e(e=>e.open),l=nt(t),u=(0,H.useMemo)(()=>Ze(e),[e]),d=(0,H.useMemo)(()=>({projectName:t,codeActions:r,isStreaming:i,openFileOrSearch:l,openImageOverlay:s,openDiagramOverlay:c}),[t,r,i,l,s,c]);return(0,J.jsx)(G.Provider,{value:d,children:(0,J.jsx)(`div`,{className:`markdown-content prose-sm ${i?`is-streaming`:``} ${n}`,children:(0,J.jsx)(a,{remarkPlugins:_t,rehypePlugins:o?vt:yt,remarkRehypeOptions:o?gt:void 0,urlTransform:tt,components:bt,children:u})})})}function St({href:e,children:t,node:n,...r}){let{openFileOrSearch:i}=K();if(e?.match(/^(https?:)?\/\//i))return(0,J.jsx)(`a`,{href:e,target:`_blank`,rel:`noopener noreferrer`,...r,children:t});let a=e?W(e):null;return a?(0,J.jsx)(`a`,{href:e,onClick:e=>{e.preventDefault(),i(a.path,a.line)},...r,children:t}):(0,J.jsx)(`a`,{href:e,...r,children:t})}function Ct({src:e,alt:t,node:n,...r}){let{openImageOverlay:i}=K(),[a,o]=(0,H.useState)(null),[s,c]=(0,H.useState)(!1);(0,H.useEffect)(()=>{if(!e||!U.test(e))return;c(!0);let t=!1,n=null,r=h();return fetch(`/api/fs/raw?path=${encodeURIComponent(e)}`,{headers:r?{Authorization:`Bearer ${r}`}:{}}).then(e=>{if(!e.ok)throw Error();return e.blob()}).then(e=>{t||(n=URL.createObjectURL(e),o(n),c(!1))}).catch(()=>{t||c(!1)}),()=>{t=!0,n&&URL.revokeObjectURL(n)}},[e]);let l=a||e||``,u=t||(e?g(e):``);return(0,J.jsx)(`img`,{src:l,alt:u,[xe]:``,onClick:e=>l&&i(l,u,be(e.currentTarget)),className:`max-h-[400px] max-w-full object-contain rounded-md border border-border cursor-pointer`,style:{opacity:s?.3:1,minHeight:s?48:void 0,minWidth:s?48:void 0},...r})}function wt({children:e,node:t,...n}){return(0,J.jsx)(`div`,{className:`table-scroll-wrapper overflow-x-auto`,children:(0,J.jsx)(`table`,{...n,children:e})})}export{xt as t};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./vendor-markdown-C-P1aR4p.js";import"./vendor-ui-BTSIXzhZ.js";import"./icons-BwyIKaTT.js";import"./api-client-xQDlhUTu.js";import"./settings-store-B4mLp19V.js";import"./window-store-DqX_qmkQ.js";import"./panel-store-BJhazigC.js";import"./project-store-BLGl9IAO.js";import"./project-framework-store-DwLxaRan.js";import"./session-list-sync-triggers-DtJI5KF0.js";import"./tab-store-D5I52eLN.js";import"./file-store-BQ41vIs5.js";import"./use-is-mobile-VRV9eZy1.js";import"./settings-categories-Ajj4ui27.js";import"./open-settings-EXR4zoZG.js";import"./git-repo-store-CKB5fdNP.js";import"./fs-api-CFtQzsIJ.js";import"./lib-5Chotbwm.js";import{t as e}from"./markdown-renderer-CtEl6qAt.js";import"./run-in-terminal-ujoc25vj.js";export{e as MarkdownRenderer};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as e,o as t,r as n}from"./api-client-xQDlhUTu.js";function r(e){return/^(\/|[A-Za-z]:[/\\])/.test(e)}function i(e,n,i){return`${r(n)?`/api/fs`:`${t(i)}/files`}/${e}?path=${encodeURIComponent(n)}`}function a(t){let n=e();return n?`${t}&token=${encodeURIComponent(n)}`:t}function o(e,t){return a(i(`raw`,e,t))}function s(e,t,n=0,r){let o=i(`transcode`,e,t);return n>0&&(o+=`&start=${n.toFixed(3)}`),r&&(o+=`&sid=${encodeURIComponent(r)}`),a(o)}function c(n,i,a){let o=r(n)?`/api/fs`:`${t(i)}/files`,s=e();fetch(`${o}/transcode?sid=${encodeURIComponent(a)}`,{method:`DELETE`,keepalive:!0,headers:s?{Authorization:`Bearer ${s}`}:{}}).catch(()=>{})}function l(){return Math.random().toString(36).slice(2,10)+Date.now().toString(36)}function u(e,t){return n.get(i(`probe`,e,t))}export{s as a,c as i,u as n,o as r,l as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";var r=e(t(),1);function i(e){let[t,n]=(0,r.useState)(0);return(0,r.useEffect)(()=>{let t=e.current;if(!t||(n(t.clientWidth),typeof ResizeObserver>`u`))return;let r=new ResizeObserver(e=>{let r=Math.floor(e[0]?.contentRect.width??t.clientWidth);n(e=>e===r?e:r)});return r.observe(t),()=>r.disconnect()},[e]),t}function a(e,t){return t===void 0?Math.max(...e,1):t}function o(e,t){let n=/^var\((--[\w-]+)\)$/.exec(e.trim());return n&&t.getPropertyValue(n[1]).trim()||e}var s=n(),c=10,l=5;function u(e){let t=Math.max(0,...e.map(e=>e.data.length)),n=Array(t).fill(0);for(let t of e)for(let e=0;e<t.data.length;e++)n[e]+=t.data[e]??0;return n}var d=(0,r.memo)(function({series:e,height:t,maxValue:n,grid:d=!1,stacked:f=!1}){let p=(0,r.useRef)(null),m=(0,r.useRef)(null),h=i(p);return(0,r.useEffect)(()=>{let r=m.current;if(!r||h===0)return;let i=r.getContext(`2d`);if(!i)return;let s=window.devicePixelRatio||1;r.width=h*s,r.height=t*s,i.scale(s,s),i.clearRect(0,0,h,t);let p=getComputedStyle(r),g=e=>o(e,p),_=t-4,v=Math.max(1,...e.map(e=>e.data.length));if(d){i.strokeStyle=g(`var(--color-border)`),i.globalAlpha=.5,i.lineWidth=1,i.beginPath();for(let e=1;e<c;e++){let n=Math.round(h/c*e)+.5;i.moveTo(n,0),i.lineTo(n,t)}for(let e=1;e<l;e++){let n=Math.round(t/l*e)+.5;i.moveTo(0,n),i.lineTo(h,n)}i.stroke(),i.globalAlpha=1}if(v<2){i.beginPath(),i.strokeStyle=g(`var(--color-border)`),i.lineWidth=1,i.moveTo(0,t-2),i.lineTo(h,t-2),i.stroke();return}let y=a(f?u(e):e.flatMap(e=>e.data),n);if(f){let t=Array(Math.max(0,...e.map(e=>e.data.length))).fill(0);for(let n of e){if(n.data.length<2)continue;let e=h/(n.data.length-1),r=e=>2+_-e/y*_;i.beginPath();for(let a=0;a<n.data.length;a++){let o=(t[a]??0)+(n.data[a]??0),s=[a*e,r(o)];a===0?i.moveTo(s[0],s[1]):i.lineTo(s[0],s[1])}for(let a=n.data.length-1;a>=0;a--)i.lineTo(a*e,r(t[a]??0));i.closePath(),i.fillStyle=g(n.color),i.globalAlpha=.75,i.fill(),i.globalAlpha=1;for(let e=0;e<n.data.length;e++)t[e]=(t[e]??0)+(n.data[e]??0)}return}for(let n of e){if(n.data.length<2)continue;let e=h/(n.data.length-1);i.beginPath(),i.moveTo(0,t-2);for(let t=0;t<n.data.length;t++){let r=t*e,a=2+_-n.data[t]/y*_;i.lineTo(r,a)}i.lineTo((n.data.length-1)*e,t-2),i.closePath(),i.fillStyle=g(n.color),i.globalAlpha=.12,i.fill(),i.globalAlpha=1,i.beginPath(),i.strokeStyle=g(n.color),i.lineWidth=1.5,i.lineJoin=`round`;for(let t=0;t<n.data.length;t++){let r=t*e,a=2+_-n.data[t]/y*_;t===0?i.moveTo(r,a):i.lineTo(r,a)}i.stroke()}},[e,h,t,n,d,f]),(0,s.jsx)(`div`,{ref:p,className:`w-full min-w-0 overflow-hidden`,style:{height:t},children:(0,s.jsx)(`canvas`,{ref:m,style:{width:h||`100%`,height:t},className:`block`})})});export{i as n,d as t};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import{vt as r}from"./vendor-ui-BTSIXzhZ.js";import{n as i}from"./utils-Bslrbb-G.js";import{n as a}from"./portal-container-context-NBi-KGK0.js";import{t as o}from"./use-visual-viewport-MmugpRg-.js";var s=e(t(),1),c=80;function l(e){let t=e;for(;t&&t!==document.body;){let e=getComputedStyle(t).overflowY;if((e===`auto`||e===`scroll`)&&t.scrollHeight>t.clientHeight)return t;t=t.parentElement}return null}function u(e){let[t,n]=(0,s.useState)(0),r=(0,s.useRef)(0),i=(0,s.useRef)(!1),a=(0,s.useRef)(0),o=(0,s.useRef)(null);return{dragY:t,swipeHandlers:{onTouchStart:(0,s.useCallback)(e=>{r.current=e.touches[0].clientY,i.current=!0,a.current=0,o.current=l(e.target),n(0)},[]),onTouchMove:(0,s.useCallback)(e=>{if(!i.current)return;let t=e.touches[0].clientY,s=o.current;if(s&&s.scrollTop>0){r.current=t,a.current!==0&&(a.current=0,n(0));return}let c=t-r.current,l=Math.max(0,c);a.current=l,n(l)},[]),onTouchEnd:(0,s.useCallback)(()=>{i.current&&(i.current=!1,a.current>=c&&e(),a.current=0,n(0))},[e])},dragStyle:t>0?{transform:`translateY(${t}px)`}:void 0,backdropOpacity:t>0?Math.max(0,1-t/300):1,isDragging:t>0}}var d=e(r(),1),f=n();function p({open:e,onClose:t,children:n,className:r,zIndex:s=50}){let{dragY:c,swipeHandlers:l,dragStyle:p,backdropOpacity:h,isDragging:g}=u(t),_=a(),v=o(e);return e?(0,d.createPortal)((0,f.jsxs)(`div`,{className:`fixed inset-0`,style:{zIndex:s,"--sheet-vh":v?`${v.height}px`:`100dvh`,"--sheet-kb":v?`${v.keyboardInset}px`:`0px`},onClick:t,children:[(0,f.jsx)(`div`,{className:`absolute inset-0 bg-black/40 animate-in fade-in-0 duration-200`,style:g?{opacity:h}:void 0}),(0,f.jsxs)(`div`,{className:i(`absolute bottom-0 left-0 right-0 rounded-t-2xl bg-popover text-popover-foreground border-t border-border`,v?.keyboardOpen?`pb-[var(--sheet-kb,0px)]`:`pb-[max(0.5rem,env(safe-area-inset-bottom))]`,!g&&`animate-in slide-in-from-bottom duration-200`,r),style:p,onClick:e=>e.stopPropagation(),...l,children:[(0,f.jsx)(`div`,{className:`flex justify-center pt-3 pb-1 shrink-0`,children:(0,f.jsx)(`div`,{className:`w-10 h-1 rounded-full bg-border`})}),n]})]}),m(_)):null}function m(e){return e??document.getElementById(`root`)??document.body}var h=(0,s.createContext)({open:!1,setOpen:()=>{}});function g({children:e,onClick:t,variant:n,className:r,disabled:a}){let{setOpen:o}=(0,s.useContext)(h);return(0,f.jsx)(`button`,{disabled:a,className:i(`flex w-full items-center gap-2 rounded-lg px-3 py-3 text-sm text-left`,`active:bg-accent transition-colors select-none`,`disabled:pointer-events-none disabled:opacity-50`,n===`destructive`&&`text-destructive`,`[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,r),onClick:e=>{t?.(e),o(!1)},children:e})}function _({className:e}){return(0,f.jsx)(`div`,{className:i(`-mx-1 my-1 h-px bg-border`,e)})}function v({children:e,className:t}){return(0,f.jsx)(`div`,{className:i(`flex items-center gap-2 px-3 py-2 text-xs font-medium text-muted-foreground select-none`,`[&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4`,t),children:e})}function y({children:e,className:t}){return(0,f.jsx)(`div`,{className:i(`pl-2`,t),children:e})}export{y as a,_ as i,h as n,v as o,g as r,p as t};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import"./vendor-ui-BTSIXzhZ.js";import"./icons-BwyIKaTT.js";import{t as r}from"./explorer-body-BlGDPmNa.js";import"./api-client-xQDlhUTu.js";import"./settings-store-B4mLp19V.js";import"./portal-container-context-NBi-KGK0.js";import"./window-store-DqX_qmkQ.js";import"./panel-store-BJhazigC.js";import"./project-store-BLGl9IAO.js";import"./project-framework-store-DwLxaRan.js";import"./session-list-sync-triggers-DtJI5KF0.js";import"./tab-store-D5I52eLN.js";import"./context-menu-BCuZYfWC.js";import"./file-store-BQ41vIs5.js";import"./use-is-mobile-VRV9eZy1.js";import"./button-C9ZXWb3b.js";import"./dialog-Dn_2tuYa.js";import"./file-icons-JInFtBVl.js";import"./dropdown-menu-BQidk_OJ.js";import{t as i}from"./mobile-bottom-sheet-DArbIyrD.js";import"./use-visual-viewport-MmugpRg-.js";import"./adaptive-context-menu-C4jNSORA.js";import"./fs-api-CFtQzsIJ.js";import"./format-file-meta-DdYtk07C.js";import{Gr as a,Wr as o,ni as s}from"./index-DLB3j_P0.js";var c=e(t(),1),l=n();function u(){let e=a(e=>e.isOpen),t=a(e=>e.close),n=a(e=>e.setSelectMode),u=s(e=>e.slices[o]?.path),d=s(e=>e.slices[o]?.inlineEdit?.kind===`rename`);(0,c.useEffect)(()=>{n(!1)},[u,n]);let f=e=>{d&&e.stopPropagation()};return e?(0,l.jsx)(i,{open:e,onClose:t,zIndex:45,className:`flex h-[var(--sheet-vh)] flex-col p-0`,children:(0,l.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col`,onTouchStart:f,onTouchMove:f,children:u?(0,l.jsx)(r,{windowId:o,initialPath:u,variant:`sheet`}):(0,l.jsx)(`div`,{className:`flex flex-1 items-center justify-center text-sm text-text-2`,children:`Loading…`})})}):null}export{u as MobileExplorerSheet};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import"./vendor-ui-BTSIXzhZ.js";import{ur as r,xn as i,xt as a}from"./icons-BwyIKaTT.js";import"./api-client-xQDlhUTu.js";import"./settings-store-B4mLp19V.js";import{n as o}from"./utils-Bslrbb-G.js";import"./portal-container-context-NBi-KGK0.js";import"./window-store-DqX_qmkQ.js";import{n as s}from"./panel-store-BJhazigC.js";import"./project-store-BLGl9IAO.js";import"./project-framework-store-DwLxaRan.js";import"./session-list-sync-triggers-DtJI5KF0.js";import"./tab-store-D5I52eLN.js";import"./chat-preparation-cache-190LLyy7.js";import"./use-is-mobile-VRV9eZy1.js";import"./settings-categories-Ajj4ui27.js";import{t as c}from"./open-settings-EXR4zoZG.js";import{t as l}from"./button-C9ZXWb3b.js";import"./dialog-Dn_2tuYa.js";import"./patch-tab-metadata-C92YkrRX.js";import"./mobile-bottom-sheet-DArbIyrD.js";import"./use-visual-viewport-MmugpRg-.js";import{E as u,S as d,b as f,ci as p}from"./index-DLB3j_P0.js";import{a as m}from"./api-settings-vmIRFNwZ.js";import{s as h,t as g}from"./design-responsive-dialog-MAFgVOmv.js";import{i as _,l as v,n as y,u as b}from"./design-skill-suggestion-Dmmg_ap5.js";var x=e(t(),1),S=`ppm-design-last-system:`;function C(e){try{return localStorage.getItem(S+e)}catch{return null}}function w(e,t){try{localStorage.setItem(S+e,t)}catch{}}var T=n(),E=120,D=[{id:`page`,label:`Page`,hint:`A page, screen or prototype`,icon:a},{id:`slides`,label:`Slides`,hint:`A 1280×720 slide deck`,icon:r}];function O({projectName:e,onClose:t}){let[n,r]=(0,x.useState)(``),[a,S]=(0,x.useState)(`page`),[O,k]=(0,x.useState)(null),[A,j]=(0,x.useState)(``),[M,N]=(0,x.useState)(null),[P,F]=(0,x.useState)(`default`),[I,L]=(0,x.useState)(null),[R,z]=(0,x.useState)(!1);(0,x.useEffect)(()=>{let t=!1;return Promise.all([u(e),m().catch(()=>null)]).then(([e,n])=>{if(t)return;k(e);let r=n?s(n):void 0;j((e.find(e=>e.id===r)??e[0])?.id??``)}).catch(e=>{t||(k([]),L(e.message||`Could not load providers`))}),h(e).then(n=>{if(t)return;N(n);let r=C(e);F(r&&n.some(e=>e.id===r)?r:n[0]?.id??`default`)}).catch(()=>{t||N([])}),()=>{t=!0}},[e]);let[B,V]=(0,x.useState)(!1);(0,x.useEffect)(()=>{let t=!1;return v(e).then(e=>{let n=b(e);t||V(n.length>0&&_(e.instructions,n))}).catch(()=>{}),()=>{t=!0}},[e]);let H=n.trim(),U=!!H&&!!A&&!!M&&!R,W=async()=>{if(U){z(!0),L(null);try{let n=await d(e,{title:H,kind:a,system:P});w(e,P),f(e),p({projectName:e,slug:n.slug,title:n.title,providerId:A,fresh:!0}),t()}catch(e){L(e.message||`Could not create the design`),z(!1)}}};return(0,T.jsx)(g,{open:!0,onClose:()=>{R||t()},title:`New design`,description:`The AI builds it in designs/ in this project, with a live preview beside the chat.`,footer:(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(l,{variant:`outline`,onClick:t,disabled:R,children:`Cancel`}),(0,T.jsxs)(l,{onClick:()=>void W(),disabled:!U,children:[R&&(0,T.jsx)(i,{className:`size-4 animate-spin`}),` Create`]})]}),children:(0,T.jsxs)(`form`,{className:`flex flex-col gap-4`,onSubmit:e=>{e.preventDefault(),W()},children:[(0,T.jsxs)(`label`,{className:`flex flex-col gap-1 text-xs font-medium text-text-secondary`,children:[`Title`,(0,T.jsx)(`input`,{autoFocus:!0,value:n,maxLength:E,onChange:e=>r(e.target.value),placeholder:`e.g. Pricing page`,className:`min-h-11 w-full rounded-md border border-border bg-background px-3 text-sm text-foreground placeholder:text-text-subtle focus:outline-none focus:ring-1 focus:ring-primary md:min-h-9`})]}),(0,T.jsx)(`div`,{role:`radiogroup`,"aria-label":`Kind`,className:`grid grid-cols-2 gap-2`,children:D.map(e=>(0,T.jsxs)(`button`,{type:`button`,role:`radio`,"aria-checked":a===e.id,onClick:()=>S(e.id),className:o(`flex min-h-14 flex-col items-start gap-0.5 rounded-md border p-2 text-left`,a===e.id?`border-primary`:`border-border`),children:[(0,T.jsxs)(`span`,{className:`flex items-center gap-1.5 text-sm font-medium`,children:[(0,T.jsx)(e.icon,{className:`size-4`}),` `,e.label]}),(0,T.jsx)(`span`,{className:`text-xs text-text-subtle`,children:e.hint})]},e.id))}),M&&M.length>1&&(0,T.jsxs)(`label`,{className:`flex flex-col gap-1 text-xs font-medium text-text-secondary`,children:[`Which app is this for?`,(0,T.jsx)(`select`,{value:P,onChange:e=>F(e.target.value),className:`min-h-11 w-full rounded-md border border-border bg-background px-2 text-sm text-foreground md:min-h-9`,children:M.map(e=>(0,T.jsx)(`option`,{value:e.id,children:e.label},e.id))})]}),(0,T.jsxs)(`label`,{className:`flex flex-col gap-1 text-xs font-medium text-text-secondary`,children:[`AI provider`,O===null?(0,T.jsxs)(`span`,{className:`flex min-h-11 items-center gap-2 text-sm text-text-subtle`,children:[(0,T.jsx)(i,{className:`size-4 animate-spin`}),` Loading…`]}):O.length===0?(0,T.jsx)(`span`,{className:`text-sm text-text-subtle`,children:`No configured provider can run design sessions. Enable Claude or Codex in Settings.`}):(0,T.jsx)(`select`,{value:A,onChange:e=>j(e.target.value),className:`min-h-11 w-full rounded-md border border-border bg-background px-2 text-sm text-foreground md:min-h-9`,children:O.map(e=>(0,T.jsx)(`option`,{value:e.id,children:e.name},e.id))})]}),B&&(0,T.jsx)(y,{onOpenSettings:()=>{t(),c(`design`)}}),I&&(0,T.jsx)(`p`,{className:`text-xs text-destructive`,role:`alert`,children:I})]})})}export{O as NewDesignDialog};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./vendor-markdown-C-P1aR4p.js";import"./vendor-ui-BTSIXzhZ.js";import"./api-client-xQDlhUTu.js";import{Ri as e}from"./index-DLB3j_P0.js";export{e as useNotificationStore};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import"./vendor-ui-BTSIXzhZ.js";import{Ar as r,Kr as i,Ln as a,P as o,Sr as s,gt as c,xn as l}from"./icons-BwyIKaTT.js";import{k as u,r as d}from"./api-client-xQDlhUTu.js";import{n as f}from"./utils-Bslrbb-G.js";import{t as p}from"./format-date-CSHaU2wN.js";import{n as m,t as h}from"./button-C9ZXWb3b.js";import{t as g}from"./input-C3oVNCMq.js";import{t as _}from"./separator-DmU9aJwq.js";import{n as v,r as y,t as b}from"./settings-rows-DD7Gxmst.js";import{i as x,n as S,r as C,t as w}from"./telegram-bot-token-field-BqNtOo5n.js";var T=e(t(),1),E=`Notifications are blocked for this site. Allow them in the browser's site settings, then turn this on again.`;function D(e){return e.secure?e.ios&&!e.standalone?{state:`unavailable`,message:`On iPhone and iPad, push works only in PPM added to the Home Screen: tap Share → Add to Home Screen, open PPM from there, then turn this on.`}:!e.serviceWorker||!e.pushManager||!e.notification?{state:`unavailable`,message:`This browser cannot receive push notifications.`}:e.permission===`denied`?{state:`blocked`,message:E}:{state:`available`}:{state:`unavailable`,message:`Push needs PPM on HTTPS or localhost. Browsers turn it off on a plain HTTP address like this one.`}}function O(e,t,n){return/iPhone|iPad|iPod/.test(e)||t===`MacIntel`&&n>1}function k(e,t=!1){let n=/Edg(A|iOS)?\//.test(e)?`Edge`:/OPR\//.test(e)?`Opera`:/SamsungBrowser\//.test(e)?`Samsung Internet`:/Firefox\/|FxiOS\//.test(e)?`Firefox`:/Chrome\/|CriOS\//.test(e)?`Chrome`:/Safari\//.test(e)?`Safari`:`Browser`,r=/Android/.test(e)?`Android`:/iPhone|iPod/.test(e)?`iPhone`:/iPad/.test(e)||t?`iPad`:/Mac OS X/.test(e)?`macOS`:/Windows/.test(e)?`Windows`:/CrOS/.test(e)?`ChromeOS`:/Linux/.test(e)?`Linux`:``;return r?`${n} on ${r}`:n}function A(e){let t=e.replace(/-/g,`+`).replace(/_/g,`/`).padEnd(Math.ceil(e.length/4)*4,`=`),n=atob(t),r=new Uint8Array(n.length);for(let e=0;e<n.length;e++)r[e]=n.charCodeAt(e);return r}function j(e){let t=``;for(let n of e)t+=String.fromCharCode(n);return btoa(t).replace(/\+/g,`-`).replace(/\//g,`_`).replace(/=+$/,``)}function M(){return navigator.platform===`MacIntel`&&navigator.maxTouchPoints>1}function N(){return D({secure:window.isSecureContext,serviceWorker:`serviceWorker`in navigator,pushManager:`PushManager`in window,notification:`Notification`in window,ios:O(navigator.userAgent,navigator.platform,navigator.maxTouchPoints),standalone:window.matchMedia?.(`(display-mode: standalone)`).matches||navigator.standalone===!0,permission:`Notification`in window?Notification.permission:null})}function P(){return k(navigator.userAgent,M())}async function F(){return N().state===`unavailable`?null:await(await navigator.serviceWorker.getRegistration())?.pushManager.getSubscription()??null}function I(e,t){let n=e.options.applicationServerKey;return!!n&&j(new Uint8Array(n))===t}async function L(e){let t=await Notification.requestPermission();if(t!==`granted`)throw Error(t===`denied`?E:`Notifications were not allowed.`);if(!await navigator.serviceWorker.getRegistration())throw Error(`PPM's service worker is not running on this page, so it cannot receive push.`);let n=await navigator.serviceWorker.ready,r=await n.pushManager.getSubscription();return r&&!I(r,e)&&(await d.post(`/api/notifications/push/unsubscribe`,{endpoint:r.endpoint}).catch(()=>{}),await r.unsubscribe(),r=null),r??=await n.pushManager.subscribe({userVisibleOnly:!0,applicationServerKey:A(e)}),d.post(`/api/notifications/push/subscribe`,{subscription:r.toJSON(),label:P(),origin:window.location.origin})}async function R(){let e=await F();if(e)try{await d.post(`/api/notifications/push/unsubscribe`,{endpoint:e.endpoint})}finally{await e.unsubscribe()}}var z=[`done`,`approval_request`,`question`,`schedule`,`jira`,`design_review`],B=[{seconds:0,label:`Right away`},{seconds:30,label:`After 30 seconds`},{seconds:60,label:`After 1 minute`},{seconds:120,label:`After 2 minutes`},{seconds:300,label:`After 5 minutes`}],V={done:{label:`Chat finished`,note:`The AI finished answering.`},approval_request:{label:`Needs approval`,note:`A tool is waiting for your permission.`},question:{label:`AI has a question`,note:`The AI asked you something and is waiting.`},schedule:{label:`Scheduled run finished`,note:`A schedule completed or failed.`},jira:{label:`Jira`,note:`A watcher found new issues, or a debug run finished.`},design_review:{label:`Reviewer comments`,note:`Someone commented on a design you shared.`}};function H(e,t){return{events:{...e.events,...t.events??{}},delay_seconds:t.delay_seconds??e.delay_seconds,telegram:t.telegram??e.telegram,ntfy:t.ntfy??e.ntfy}}function U(e){let t=e.trim();if(!t)return null;try{let e=new URL(/^[a-z][a-z0-9+.-]*:\/\//i.test(t)?t:`https://${t}`);return e.protocol!==`https:`&&e.protocol!==`http:`||!e.hostname||e.username||e.password?null:`${e.origin}${e.pathname.replace(/\/+$/,``)}`}catch{return null}}var W=n(),G=`https://ntfy.sh`;function K(){let e=crypto.getRandomValues(new Uint8Array(12));return`ppm-${Array.from(e,e=>`abcdefghijklmnopqrstuvwxyz0123456789`[e%36]).join(``)}`}function q(e){try{return new URL(e).host}catch{return e}}function J({status:e,onSaved:t,onRemove:n}){let r=(0,T.useId)(),i=(0,T.useId)(),a=(0,T.useId)(),[s,l]=(0,T.useState)(e.server||G),[u,p]=(0,T.useState)(()=>e.topic||K()),[_,v]=(0,T.useState)(``),[y,b]=(0,T.useState)(!1),[x,S]=(0,T.useState)(null),[C,w]=(0,T.useState)(!e.configured),E=U(s),D=e.tokenSet&&E===e.server,O=!e.configured||E!==e.server||u.trim()!==e.topic||_.trim()!==``,k=e=>t=>{e(t.target.value),S(null)},A=async()=>{b(!0),S(null);try{let e=await d.put(`/api/notifications/ntfy`,{server:s,topic:u,..._.trim()?{token:_.trim()}:{}});v(``),w(!1),t(e)}catch(e){S(e instanceof Error?e.message:String(e))}finally{b(!1)}};return(0,W.jsxs)(`div`,{className:`space-y-2`,children:[(0,W.jsxs)(`form`,{className:`space-y-3`,onSubmit:e=>{e.preventDefault(),A()},children:[(0,W.jsx)(Y,{id:r,label:`Server`,children:(0,W.jsx)(g,{id:r,inputMode:`url`,autoCapitalize:`none`,autoCorrect:`off`,autoComplete:`off`,spellCheck:!1,placeholder:G,value:s,onChange:k(l),className:`h-11 w-full text-sm md:h-9`})}),(0,W.jsx)(Y,{id:i,label:`Topic`,children:(0,W.jsx)(g,{id:i,autoCapitalize:`none`,autoCorrect:`off`,autoComplete:`off`,spellCheck:!1,value:u,onChange:k(p),className:`h-11 w-full font-mono text-sm md:h-9`})}),(0,W.jsx)(Y,{id:a,label:`Access token — only if the server requires sign-in`,children:(0,W.jsx)(g,{id:a,type:`password`,autoComplete:`off`,spellCheck:!1,placeholder:D?`•••••• (saved)`:`tk_…`,value:_,onChange:k(v),className:`h-11 w-full font-mono text-sm md:h-9`})}),e.tokenSet&&!D&&!_.trim()&&(0,W.jsxs)(`p`,{className:`text-xs leading-relaxed text-muted-foreground`,children:[`The saved token is for `,q(e.server),` and is not sent to another server.`]}),x&&(0,W.jsx)(`p`,{className:`text-xs text-error`,children:x}),(0,W.jsxs)(`div`,{className:`flex flex-col gap-2 sm:flex-row`,children:[(0,W.jsx)(h,{type:`submit`,disabled:y||!O,className:`min-h-11 cursor-pointer md:min-h-9`,children:y?`Checking…`:`Save`}),e.configured&&(0,W.jsx)(h,{type:`button`,variant:`ghost`,onClick:n,className:`min-h-11 cursor-pointer text-error hover:text-error md:min-h-9`,children:`Remove ntfy`})]})]}),(0,W.jsxs)(`button`,{type:`button`,onClick:()=>w(e=>!e),"aria-expanded":C,className:`flex min-h-11 cursor-pointer items-center gap-1 text-xs text-primary md:min-h-8`,children:[(0,W.jsx)(o,{className:f(`size-3.5 transition-transform`,!C&&`-rotate-90`)}),`How to set up ntfy`]}),C&&(0,W.jsxs)(`div`,{className:`space-y-3 rounded-lg border border-border px-4 py-3`,children:[(0,W.jsxs)(`ol`,{className:`list-decimal space-y-1.5 pl-4 text-sm leading-relaxed`,children:[(0,W.jsx)(`li`,{children:`Install the ntfy app on your phone, or open the server in a browser.`}),(0,W.jsxs)(`li`,{children:[`Subscribe to the topic above. For a server other than ntfy.sh, turn on `,(0,W.jsx)(`b`,{children:`Use another server`}),` and enter its address.`]}),(0,W.jsxs)(`li`,{children:[`If the server asks you to sign in, create a token in its web app under `,(0,W.jsx)(`b`,{children:`Account → Access tokens`}),` and paste it above. Its user needs permission to publish to the topic.`]}),(0,W.jsx)(`li`,{children:`Save, then send a test.`})]}),(0,W.jsxs)(`p`,{className:`text-xs leading-relaxed text-muted-foreground`,children:[`On ntfy.sh anyone who knows a topic's name can read it, so keep the name hard to guess. An iPhone gets instant alerts from a server of your own only when that server sets`,` `,(0,W.jsx)(`code`,{className:`rounded bg-muted px-1 py-0.5`,children:`upstream-base-url: "https://ntfy.sh"`}),`.`]}),(0,W.jsxs)(`a`,{href:`https://docs.ntfy.sh/subscribe/phone/`,target:`_blank`,rel:`noopener noreferrer`,className:f(m({variant:`outline`}),`min-h-11 w-full gap-2 md:min-h-9 sm:w-auto`),children:[`The ntfy app guide`,(0,W.jsx)(c,{className:`size-3.5`})]})]})]})}function Y({id:e,label:t,children:n}){return(0,W.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,W.jsx)(`label`,{htmlFor:e,className:`text-xs text-muted-foreground`,children:t}),n]})}var X=e=>e instanceof Error?e.message:String(e),Z=e=>p(new Date(e).toISOString());function Q(){let[e,t]=(0,T.useState)(null),[n,r]=(0,T.useState)(null),i=(0,T.useCallback)(async()=>{try{t(await d.get(`/api/notifications/settings`)),r(null)}catch(e){r(X(e))}},[]);(0,T.useEffect)(()=>{i()},[i]);let a=(0,T.useCallback)(async e=>{t(t=>t&&H(t,e));try{await d.put(`/api/notifications/settings`,e)}catch(e){u.error(`Could not save`,{description:X(e)}),await i()}},[i]);return e?(0,W.jsxs)(`div`,{className:`space-y-6`,children:[(0,W.jsx)(ee,{settings:e,update:a}),(0,W.jsx)(_,{}),(0,W.jsx)(te,{}),(0,W.jsx)(_,{}),(0,W.jsx)(ne,{settings:e,update:a}),(0,W.jsx)(_,{}),(0,W.jsx)(re,{settings:e,update:a})]}):(0,W.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:n??`Loading…`})}function ee({settings:e,update:t}){let n=(0,T.useId)(),r=B.some(t=>t.seconds===e.delay_seconds)?B:[...B,{seconds:e.delay_seconds,label:`After ${e.delay_seconds} seconds`}];return(0,W.jsxs)(`section`,{className:`space-y-3`,children:[(0,W.jsx)(v,{title:`When to notify`,children:`For every channel below, on every device.`}),(0,W.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,W.jsx)(`label`,{htmlFor:n,className:`text-xs text-muted-foreground`,children:`Send a notification`}),(0,W.jsx)(`select`,{id:n,value:e.delay_seconds,onChange:e=>void t({delay_seconds:Number(e.target.value)}),className:`h-11 w-full rounded-md border border-input bg-background px-3 text-sm focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring md:h-9`,children:r.map(e=>(0,W.jsx)(`option`,{value:e.seconds,children:e.label},e.seconds))}),(0,W.jsx)(`p`,{className:`text-xs leading-relaxed text-muted-foreground`,children:e.delay_seconds===0?`Sent the moment it happens, even while you are looking at the chat.`:`Sent only if the chat is still unread by then. Opening it in PPM on any device cancels the notification, and so does answering an approval.`})]}),(0,W.jsx)(`div`,{className:`divide-y divide-border rounded-lg border border-border`,children:z.map(n=>(0,W.jsx)(y,{label:V[n].label,note:V[n].note,checked:e.events[n],onChange:e=>void t({events:{[n]:e}})},n))})]})}function te(){let[e,t]=(0,T.useState)(null),[n,o]=(0,T.useState)(null),[c,f]=(0,T.useState)(null),[p,m]=(0,T.useState)(!1),[h,g]=(0,T.useState)(null),_=N(),x=(0,T.useCallback)(async()=>{try{let[e,n]=await Promise.all([d.get(`/api/notifications/push`),F().catch(()=>null)]);t(e),o(n),f(null)}catch(e){f(X(e))}},[]);(0,T.useEffect)(()=>{x()},[x]);let S=n&&e&&I(n,e.publicKey)?e.devices.find(e=>e.endpoint===n.endpoint)??null:null,C=async t=>{if(e){m(!0);try{t?(await L(e.publicKey),u.success(`Push is on for this device`)):await R()}catch(e){u.error(t?`Could not turn push on`:`Could not turn push off`,{description:X(e)})}finally{m(!1),await x()}}},w=async e=>{g(e.id);try{await d.post(`/api/notifications/push/test`,{id:e.id}),u.success(`Test sent to ${e.label}`)}catch(e){u.error(`Test not delivered`,{description:X(e)})}finally{g(null),await x()}},E=async e=>{if(e.id===S?.id)return C(!1);try{await d.post(`/api/notifications/push/unsubscribe`,{id:e.id})}catch(e){u.error(`Could not remove it`,{description:X(e)})}finally{await x()}},D=_.state===`unavailable`||_.state===`blocked`&&!S;return(0,W.jsxs)(`section`,{className:`space-y-3`,children:[(0,W.jsx)(v,{title:`Push notifications`,children:`Alerts on this phone or computer, even with PPM closed. Turn it on in each browser that should get them.`}),(0,W.jsx)(`div`,{className:`rounded-lg border border-border`,children:(0,W.jsx)(y,{label:`This device`,note:P(),checked:!!S,disabled:p||!e||D,onChange:e=>void C(e)})}),_.state!==`available`&&(0,W.jsx)(`p`,{className:`text-xs leading-relaxed text-warning`,children:_.message}),c&&(0,W.jsx)(`p`,{className:`text-xs text-error`,children:c}),e&&e.devices.length>0&&(0,W.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,W.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`Receiving push`}),(0,W.jsx)(`ul`,{className:`divide-y divide-border rounded-lg border border-border`,children:e.devices.map(e=>(0,W.jsxs)(`li`,{className:`flex items-center gap-3 py-1.5 pl-4 pr-1`,children:[(0,W.jsx)(/Android|iPhone|iPad/.test(e.label)?r:a,{className:`size-4 shrink-0 text-muted-foreground`}),(0,W.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,W.jsxs)(`p`,{className:`flex min-w-0 items-center gap-1.5 text-sm`,children:[(0,W.jsx)(`span`,{className:`truncate`,children:e.label}),e.id===S?.id&&(0,W.jsx)(`span`,{className:`shrink-0 rounded bg-primary/10 px-1.5 py-0.5 text-[10px] text-primary`,children:`This device`})]}),(0,W.jsxs)(`p`,{className:`truncate text-xs text-muted-foreground`,children:[$(e.origin),` · `,e.lastSuccessAt?`delivered ${Z(e.lastSuccessAt)}`:`added ${Z(e.createdAt)}`]}),e.lastError&&(0,W.jsx)(`p`,{className:`break-words text-xs text-error`,children:e.lastError})]}),(0,W.jsx)(b,{label:`Send a test to ${e.label}`,disabled:h!==null,onClick:()=>void w(e),children:h===e.id?(0,W.jsx)(l,{className:`size-4 animate-spin`}):(0,W.jsx)(s,{className:`size-4`})}),(0,W.jsx)(b,{label:`Stop push to ${e.label}`,danger:!0,disabled:p,onClick:()=>void E(e),children:(0,W.jsx)(i,{className:`size-4`})})]},e.id))})]})]})}function $(e){try{return new URL(e).host}catch{return e}}function ne({settings:e,update:t}){let[n,r]=(0,T.useState)(null),[i,a]=(0,T.useState)(null),[o,c]=(0,T.useState)(!1),f=(0,T.useCallback)(async()=>{try{let e=await d.get(`/api/notifications/telegram`);return r(e),a(null),e}catch(e){return a(X(e)),null}},[]);(0,T.useEffect)(()=>{f()},[f]);let{link:p,starting:m,connect:g,cancel:_}=x(`/api/notifications/telegram/connect`,n,f),b=async e=>{try{await d.del(`/api/notifications/telegram/chats/${encodeURIComponent(e.chatId)}`),u.success(`Disconnected ${e.name}`,{description:`It no longer gets alerts.`})}catch(e){u.error(`Could not disconnect`,{description:X(e)})}finally{await f()}},E=async()=>{c(!0);try{await d.post(`/api/settings/telegram/test`,{}),u.success(`Test sent to Telegram`)}catch(e){u.error(`Test not delivered`,{description:X(e)})}finally{c(!1)}},D=n?.chats??[];return(0,W.jsxs)(`section`,{className:`space-y-3`,children:[(0,W.jsx)(v,{title:`Telegram`,children:`Alerts in a chat with your own Telegram bot. A chat connected here gets alerts and nothing else — PPMBot has its own bot and chats.`}),i&&(0,W.jsx)(`p`,{className:`text-xs text-error`,children:i}),n?.configured&&(0,W.jsxs)(W.Fragment,{children:[n.sharedWithPPMBot&&(0,W.jsx)(`p`,{className:`text-xs leading-relaxed text-muted-foreground`,children:`PPMBot answers through this bot too, so alerts arrive in your PPMBot chats. Give PPMBot a bot of its own in Settings → PPMBot to keep them apart.`}),(0,W.jsx)(`div`,{className:`rounded-lg border border-border`,children:(0,W.jsx)(y,{label:`Send notifications to Telegram`,note:D.length===0?`No chat connected yet`:D.length===1?`1 chat connected`:`${D.length} chats connected`,checked:e.telegram,onChange:e=>void t({telegram:e})})}),(0,W.jsx)(C,{chats:D,onDisconnect:e=>void b(e)}),p?(0,W.jsx)(S,{link:p,botUsername:n.botUsername,error:n.connect.error,onCancel:()=>void _()}):(0,W.jsxs)(`div`,{className:`flex flex-col gap-2 sm:flex-row`,children:[(0,W.jsxs)(h,{onClick:()=>void g(),disabled:m,className:`min-h-11 cursor-pointer gap-2 md:min-h-9`,children:[m?(0,W.jsx)(l,{className:`size-4 animate-spin`}):(0,W.jsx)(s,{className:`size-4`}),D.length===0?`Connect Telegram`:`Connect another chat`]}),D.length>0&&(0,W.jsx)(h,{variant:`outline`,onClick:()=>void E(),disabled:o,className:`min-h-11 cursor-pointer md:min-h-9`,children:o?`Sending…`:`Send a test`})]})]}),n&&(0,W.jsx)(w,{configured:n.configured,botUsername:n.botUsername,onSaved:()=>void f()})]})}function re({settings:e,update:t}){let[n,r]=(0,T.useState)(null),[i,a]=(0,T.useState)(null),[o,s]=(0,T.useState)(!1),l=(0,T.useCallback)(async()=>{try{r(await d.get(`/api/notifications/ntfy`)),a(null)}catch(e){a(X(e))}},[]);(0,T.useEffect)(()=>{l()},[l]);let p=async()=>{s(!0);try{await d.post(`/api/notifications/ntfy/test`,{}),u.success(`Test sent to ntfy`)}catch(e){u.error(`Test not delivered`,{description:X(e)})}finally{s(!1)}},g=async()=>{try{await d.del(`/api/notifications/ntfy`),u.success(`ntfy removed`)}catch(e){u.error(`Could not remove ntfy`,{description:X(e)})}finally{await l()}};return(0,W.jsxs)(`section`,{className:`space-y-3`,children:[(0,W.jsx)(v,{title:`ntfy`,children:`Alerts through an ntfy server — ntfy.sh or one of your own — on every phone and computer subscribed to your topic.`}),i&&(0,W.jsx)(`p`,{className:`text-xs text-error`,children:i}),n?.configured&&(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`div`,{className:`rounded-lg border border-border`,children:(0,W.jsx)(y,{label:`Send notifications to ntfy`,note:(0,W.jsxs)(W.Fragment,{children:[`Topic `,(0,W.jsx)(`span`,{className:`font-mono`,children:n.topic}),` on `,$(n.server)]}),checked:e.ntfy,onChange:e=>void t({ntfy:e})})}),(0,W.jsxs)(`div`,{className:`flex flex-col gap-2 sm:flex-row`,children:[(0,W.jsx)(h,{variant:`outline`,onClick:()=>void p(),disabled:o,className:`min-h-11 cursor-pointer md:min-h-9`,children:o?`Sending…`:`Send a test`}),(0,W.jsxs)(`a`,{href:`${n.server}/${n.topic}`,target:`_blank`,rel:`noopener noreferrer`,className:f(m({variant:`outline`}),`min-h-11 gap-2 md:min-h-9`),children:[`Open the topic`,(0,W.jsx)(c,{className:`size-3.5`})]})]})]}),n&&(0,W.jsx)(J,{status:n,onSaved:r,onRemove:()=>void g()},`${n.server}/${n.topic}`)]})}export{Q as NotificationsSettingsSection};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{E as e}from"./vendor-markdown-C-P1aR4p.js";import{jr as t,on as n}from"./icons-BwyIKaTT.js";import{i as r}from"./project-store-BLGl9IAO.js";import{a as i,r as a}from"./onboarding-quick-orientation-CTHtIRib.js";import{t as o}from"./button-C9ZXWb3b.js";var s=e();function c({compact:e=!1}){let c=i(),l=r(e=>e.activeProject?.name),u=c.goal&&c.familiarity&&c.status!==`finished`,d=`h-11 can-hover:h-7 min-w-0 gap-1.5 rounded px-2 py-0 text-xs font-normal text-text-secondary shadow-none hover:bg-surface-elevated/60 hover:text-foreground active:bg-surface-elevated focus-visible:ring-2 focus-visible:ring-primary/50 motion-reduce:transition-none whitespace-nowrap`;return(0,s.jsxs)(`div`,{role:`group`,"aria-label":`Learn PPM`,className:`${e?`justify-center`:`justify-start`} max-w-full inline-flex flex-wrap items-center gap-x-1 gap-y-0`,children:[(0,s.jsxs)(o,{variant:`ghost`,className:d,onClick:()=>u?c.resume(l):c.status===`finished`?c.replay():c.begin(),children:[(0,s.jsx)(t,{"aria-hidden":!0,className:`size-3 shrink-0`}),(0,s.jsx)(`span`,{children:u?`Resume guided tour`:c.status===`unseen`?`Get started with PPM`:`Open guided tour`})]}),(0,s.jsx)(`span`,{"aria-hidden":!0,className:`h-3 w-px shrink-0 bg-border`}),(0,s.jsxs)(o,{variant:`ghost`,className:d,onClick:a,children:[(0,s.jsx)(n,{"aria-hidden":!0,className:`size-3 shrink-0`}),(0,s.jsx)(`span`,{children:`Quick orientation`})]})]})}export{c as t};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import{Bt as r,Cr as i,D as a,Gt as o,It as s,Jn as c,T as l,Ut as u,br as d,fr as f,jr as p,nt as m,pt as h,ti as g,x as _,xr as v}from"./icons-BwyIKaTT.js";import{t as y}from"./react-BZ0kba1-.js";import{n as b}from"./use-is-mobile-VRV9eZy1.js";import{t as x}from"./button-C9ZXWb3b.js";import{n as S,o as C,r as w,t as T}from"./dialog-Dn_2tuYa.js";var E=y(e=>({sessions:new Map,setStreaming:(t,n,r)=>e(e=>{let i=new Map(e.sessions);return n?i.set(t,r??i.get(t)??``):i.delete(t),{sessions:i}}),replaceAllStreaming:t=>e(()=>({sessions:new Map(t.map(e=>[e.sessionId,e.projectName]))})),dropSession:t=>e(e=>{if(!e.sessions.has(t))return e;let n=new Map(e.sessions);return n.delete(t),{sessions:n}})})),D=e=>t=>{if(!e)return!1;for(let n of t.sessions.values())if(n===e)return!0;return!1},O=[{id:`history`,label:`Chat History`,shortLabel:`History`,icon:l},{id:`teams`,label:`Teams`,icon:g,badge:`teams`},{id:`designs`,label:`Designs`,icon:c,badge:`designs`},{id:`explorer`,label:`Explorer`,icon:s},{id:`search`,label:`Search`,icon:v},{id:`git`,label:`Git`,icon:u},{id:`database`,label:`Database`,icon:h},{id:`tunnels`,label:`Port Forwarding`,shortLabel:`Ports`,icon:o},{id:`ai-resources`,label:`AI Resources`,shortLabel:`AI`,icon:p}];function k(e){let t=[...O];e.jiraEnabled&&t.push({id:`jira`,label:`Jira`,icon:a});let n=e.contributions?.views;if(n){let e=n.sidebar??n.explorer??[];for(let n of e)t.push({id:`ext:${n.id}`,label:n.name,icon:f})}return t}var A={ai:[`project`,`chat`,`send`,`history`],explore:[`project`,`file`,`search`],developer:[`project`,`terminal`,`git`,`run`]};function j(e){return e?A[e]:[]}var M={project:`project`,chat:`chat`,send:`chat-input`,history:`chat-history`,file:`explorer`,search:`search`,terminal:`terminal`,git:`git`,run:`explorer`};function N(){return{version:1,status:`unseen`,familiarity:null,goal:null,currentStep:null,completed:[],skipped:[],projectName:null,sessionId:null,attempt:null,runDocumentReady:!1}}function P(e,t=!1){if(e.status!==`active`||!e.currentStep)return e;let n=e.completed.filter(t=>t!==e.currentStep),r=e.skipped.filter(t=>t!==e.currentStep);(t?r:n).push(e.currentStep);let i=j(e.goal),a=i.slice(i.indexOf(e.currentStep)+1).find(e=>!n.includes(e)&&!r.includes(e));return{...e,completed:n,skipped:r,currentStep:a??e.currentStep,status:a?`active`:`finished`}}function F(e,t){if(t.type===`chat-failed`&&t.projectName===e.projectName&&e.attempt?.id===t.attemptId&&e.attempt.tabId===t.tabId&&e.attempt.sessionId===t.sessionId)return{...e,attempt:{...e.attempt,failed:!0}};if(e.status!==`active`||!t.visible||t.projectName!==e.projectName)return e;let n=e.currentStep;if(t.type===`run-document-ready`&&n===`run`)return{...e,runDocumentReady:!0};if(t.type===`chat-opened`&&n===`chat`)return P(e);if(t.type===`chat-started`&&n===`send`)return e.attempt?.id===t.attemptId?e:{...e,sessionId:t.sessionId,attempt:{id:t.attemptId,tabId:t.tabId,sessionId:t.sessionId,failed:!1}};if(t.type===`chat-session`&&e.attempt?.id===t.attemptId&&e.attempt.tabId===t.tabId&&e.attempt.sessionId===t.previousSessionId)return{...e,sessionId:t.sessionId,attempt:{...e.attempt,sessionId:t.sessionId}};if(t.type===`chat-failed`||t.type===`chat-succeeded`){let r=e.attempt;return!r||r.id!==t.attemptId||r.tabId!==t.tabId||r.sessionId!==t.sessionId?e:t.type===`chat-failed`?{...e,attempt:{...r,failed:!0}}:n===`send`&&!r.failed&&t.hasContent?P(e):e}if(t.type===`history-opened`&&n===`history`&&e.completed.includes(`send`)&&t.sessionId===e.sessionId)return P(e);if(t.type===`file-ready`){if(n===`file`)return P(e);if(n===`run`&&t.isRunDocument)return{...e,runDocumentReady:!0}}return t.type===`search-succeeded`&&n===`search`||t.type===`terminal-ready`&&n===`terminal`||t.type===`git-ready`&&n===`git`||t.type===`run-acknowledged`&&n===`run`&&e.runDocumentReady?P(e):e}function I(e){let{version:t,status:n,familiarity:r,goal:i,currentStep:a,completed:o,skipped:s,projectName:c,sessionId:l}=e;return JSON.stringify({version:t,status:n,familiarity:r,goal:i,currentStep:a,completed:o,skipped:s,projectName:c,sessionId:l})}function L(e){let t=N();if(!e)return t;try{let n=JSON.parse(e);if(!n||n.version!==1||![`unseen`,`choosing`,`active`,`paused`,`dismissed`,`finished`].includes(n.status)||![null,`beginner`,`familiar`,`advanced`].includes(n.familiarity)||![null,`ai`,`explore`,`developer`].includes(n.goal))return t;let r=j(n.goal);if(n.currentStep!==null&&!r.includes(n.currentStep)||![n.completed,n.skipped].every(e=>Array.isArray(e)&&e.every(e=>r.includes(e)))||![n.projectName,n.sessionId].every(e=>e===null||typeof e==`string`)||[`active`,`finished`].includes(n.status)&&(!n.familiarity||!n.goal||!n.currentStep))return t;let i=[...new Set(n.completed)],a=[...new Set(n.skipped)].filter(e=>!i.includes(e));return{...t,status:n.status===`active`?`paused`:n.status,familiarity:n.familiarity,goal:n.goal,currentStep:n.currentStep,completed:i,skipped:a,projectName:n.projectName,sessionId:n.sessionId}}catch{return t}}var R=`ppm-onboarding-v1`;function z(){try{return L(typeof localStorage>`u`?null:localStorage.getItem(R))}catch{return N()}}var B=y((e,t)=>{let n=t=>e(e=>{if(!e.goal||!e.familiarity)return{status:`choosing`};let n=t===void 0?e.projectName:t,r=n!==e.projectName,i={...e,status:`active`,projectName:n,currentStep:r||!e.currentStep?`project`:e.currentStep,completed:r?[]:e.completed,skipped:r?[]:e.skipped,attempt:r?null:e.attempt,sessionId:r?null:e.sessionId,runDocumentReady:r?!1:e.runDocumentReady};return i.currentStep===`project`&&n?P(i):i});return{...z(),begin:()=>e({status:`choosing`}),chooseFamiliarity:t=>e({familiarity:t}),chooseGoal:t=>e(e=>e.goal===t?{goal:t}:{goal:t,currentStep:`project`,completed:e.completed.includes(`project`)&&e.projectName?[`project`]:[],skipped:[],sessionId:null,attempt:null,runDocumentReady:!1}),start:n,pause:()=>e(e=>e.status===`active`||e.status===`choosing`?{status:`paused`,attempt:null}:{}),dismiss:()=>e({status:`dismissed`,attempt:null}),resume:n,replay:()=>e({...N(),status:`choosing`}),skip:()=>e(e=>P(e,!0)),back:()=>e(e=>{let t=j(e.goal),n=e.currentStep?t.indexOf(e.currentStep):-1;return n>0?{currentStep:t[n-1],status:`active`}:{}}),changeChoices:()=>e({status:`choosing`,attempt:null}),observe:t=>e(e=>F(e,t)),setProjectContext:n=>{let r=t();r.status===`active`&&(r.currentStep===`project`&&n?e(P({...r,projectName:n})):n!==r.projectName&&e({status:`paused`,attempt:null,runDocumentReady:!1}))}}});B.subscribe(e=>{try{typeof localStorage<`u`&&localStorage.setItem(R,I(e))}catch{}});var V=e(t(),1),H=n();function U({stepKey:e,order:t,className:n,children:r}){let i=(0,V.useRef)(null),a=(0,V.useRef)({stepKey:e,order:t});return(0,V.useLayoutEffect)(()=>{let n=a.current;a.current={stepKey:e,order:t};let r=i.current;if(n.stepKey===e||!r?.animate)return;let o=window.matchMedia(`(prefers-reduced-motion: reduce)`);if(o.matches)return;let s=r.animate([{opacity:.35,transform:`translateX(${t<n.order?-12:12}px)`},{opacity:1,transform:`translateX(0)`}],{duration:200,easing:`cubic-bezier(0.2, 0, 0, 1)`});s.finished.catch(()=>{});let c=()=>{o.matches&&s.cancel()};return o.addEventListener(`change`,c),()=>{s.cancel(),o.removeEventListener(`change`,c)}},[e,t]),(0,H.jsx)(`div`,{ref:i,"data-onboarding-transition":e,className:n,children:r})}var W=`ppm:open-quick-orientation`;function G(){window.dispatchEvent(new Event(W))}var K={history:`Return to earlier AI conversations and continue where you left off.`,teams:`Find group conversations with multiple AI agents.`,designs:`Design pages and slide decks with AI beside a live preview.`,explorer:`Browse files and folders in the selected project.`,search:`Find words across your project's files.`,git:`Review changed files and diffs before committing your work.`,database:`Browse connected databases and open the query editor.`,tunnels:`Open a dev server running on this machine from another device, over Tailscale or Cloudflare.`,"ai-resources":`Find available AI skills, commands and agents.`},q=[{title:`Notifications`,icon:_,body:`See conversations that finished or need your attention.`},{title:`Cloud & Share`,icon:m,body:`Find sharing and remote-access options for this PPM instance.`},{title:`File Explorer`,icon:r,body:`Browse the host computer, beyond the selected project.`},{title:`Settings`,icon:i,body:`Configure AI, appearance and preferences; reopen guided tours.`},{title:`Logs`,icon:d,body:`Read what PPM logged, see what AI made of recent errors, and report a bug with the lines that show it.`}];function J({onClose:e,onTryPalette:t}){let[n,r]=(0,V.useState)(`palette`),i=b(),a=(0,V.useRef)(document.activeElement),o=(0,V.useRef)(!1);return(0,H.jsx)(T,{open:!0,onOpenChange:t=>{t||e()},children:(0,H.jsxs)(S,{className:`max-h-[88dvh] overflow-y-auto sm:max-w-2xl p-5 sm:p-6`,onCloseAutoFocus:e=>{e.preventDefault(),o.current||(a.current?.isConnected?a.current:document.querySelector(`aside[aria-label="PPM guided tour"] button`))?.focus()},children:[(0,H.jsx)(`div`,{className:`text-xs font-medium uppercase tracking-widest text-primary`,children:`Quick orientation`}),(0,H.jsx)(C,{className:`text-xl`,children:`Find your way around PPM`}),(0,H.jsx)(w,{children:`Two shortcuts to getting comfortable. Your guided-tour progress stays saved.`}),(0,H.jsxs)(`div`,{className:`flex gap-2`,"aria-label":`Orientation topics`,children:[(0,H.jsx)(x,{variant:n===`palette`?`default`:`outline`,className:`min-h-11 flex-1`,"aria-pressed":n===`palette`,onClick:()=>r(`palette`),children:`Command Palette`}),(0,H.jsx)(x,{variant:n===`rail`?`default`:`outline`,className:`min-h-11 flex-1`,"aria-pressed":n===`rail`,onClick:()=>r(`rail`),children:i?`Navigation buttons`:`Left rail`})]}),(0,H.jsx)(U,{stepKey:n,order:n===`palette`?0:1,children:n===`palette`?(0,H.jsxs)(`section`,{className:`space-y-4`,"aria-label":`Command Palette introduction`,children:[(0,H.jsxs)(`div`,{className:`rounded-lg border border-border bg-surface p-4`,children:[(0,H.jsx)(v,{className:`size-6 text-primary mb-3`}),(0,H.jsx)(`h3`,{className:`font-medium`,children:`One place to find actions and files`}),(0,H.jsx)(`p`,{className:`text-sm text-text-secondary mt-2`,children:`Type what you need, such as “Settings”, “Open Terminal”, or a filename. Choose a result to open it.`})]}),(0,H.jsx)(`p`,{className:`text-sm text-text-secondary`,children:i?`No keyboard required: tap Open Command Palette below. The same palette works on your phone.`:`Double-tap Shift to open it from anywhere. F1 is the default shortcut and can be changed in Settings → Keyboard Shortcuts.`}),(0,H.jsx)(`p`,{className:`text-sm text-text-secondary`,children:`With a keyboard, use ↑ / ↓ to select a result, Enter to open it, and Escape to close. Opening the palette alone does not run a command.`}),(0,H.jsx)(x,{className:`w-full min-h-11`,onClick:()=>{o.current=!0,t()},children:`Open Command Palette`})]}):(0,H.jsxs)(`section`,{"aria-label":`Navigation introduction`,className:`space-y-4`,children:[(0,H.jsx)(`p`,{className:`text-sm text-text-secondary`,children:i?`Tap the menu button at the bottom to open navigation. These are the same sections shown in the left rail on desktop.`:`The icon strip on the left switches between project sections. Hover for labels; click a section to open it. Clicking the active section again collapses it.`}),(0,H.jsx)(`div`,{className:`grid sm:grid-cols-2 gap-3`,children:O.map(({id:e,label:t,icon:n})=>(0,H.jsxs)(`div`,{className:`flex gap-3 rounded-lg border border-border p-3`,children:[(0,H.jsx)(n,{className:`size-5 shrink-0 text-primary mt-0.5`}),(0,H.jsxs)(`div`,{children:[(0,H.jsx)(`h3`,{className:`text-sm font-medium`,children:t}),(0,H.jsx)(`p`,{className:`text-sm text-text-secondary mt-1`,children:K[e]})]})]},e))}),(0,H.jsx)(`h3`,{className:`font-medium text-sm`,children:i?`Utilities in the navigation menu`:`Utilities at the bottom of the rail`}),(0,H.jsx)(`div`,{className:`space-y-3`,children:q.filter(e=>!i||e.title!==`Notifications`).map(({title:e,icon:t,body:n})=>(0,H.jsxs)(`div`,{className:`flex gap-3`,children:[(0,H.jsx)(t,{className:`size-4 shrink-0 text-primary mt-1`}),(0,H.jsxs)(`p`,{className:`text-sm text-text-secondary`,children:[(0,H.jsx)(`strong`,{className:`font-medium text-foreground`,children:e}),` — `,n]})]},e))}),i&&(0,H.jsx)(`p`,{className:`text-sm text-text-secondary`,children:`Mobile uses shorter labels: History, Ports and AI for the matching sections above; Files and Cloud for File Explorer and Cloud & Share. The menu badge signals conversations needing attention.`}),(0,H.jsx)(`p`,{className:`text-xs text-text-secondary`,children:`Jira, Remote Desktop and extension buttons appear when available. Button order can be customized.`})]})}),(0,H.jsx)(x,{variant:`ghost`,className:`min-h-11`,onClick:e,children:`Back to what I was doing`})]})})}export{B as a,k as c,U as i,D as l,J as n,M as o,G as r,j as s,W as t,E as u};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./utils-Bslrbb-G.js";import{J as t,W as n,X as r,Y as i,it as a,nt as o,xt as s}from"./window-store-DqX_qmkQ.js";import{t as c}from"./panel-store-BJhazigC.js";import{t as l}from"./tab-store-D5I52eLN.js";import{E as u}from"./explorer-model-BtJN4MZ9.js";function d(e){let t=e.toLowerCase();return t.endsWith(`[]`)?`other`:/^(character varying|varchar|character|char|bpchar|text|name|citext)\b/.test(t)?`text`:/^(smallint|integer|bigint|int[248]?|numeric|decimal|real|double precision|float[48]?|money|oid|smallserial|serial|bigserial)\b/.test(t)?`number`:t===`boolean`||t===`bool`?`boolean`:t===`date`?`date`:/^timestamp(\(\d+\))? with time zone$/.test(t)||t===`timestamptz`?`datetimetz`:/^timestamp/.test(t)?`datetime`:/^time/.test(t)?`time`:t===`bytea`?`binary`:t===`json`||t===`jsonb`?`json`:`other`}function f(e){let t=e.toUpperCase();return/BOOL/.test(t)?`boolean`:/^DATE$/.test(t)?`date`:/DATETIME|TIMESTAMP/.test(t)?`datetime`:/^TIME$/.test(t)?`time`:/JSON/.test(t)?`json`:/INT/.test(t)?`number`:/CHAR|CLOB|TEXT/.test(t)?`text`:t===``?`other`:/BLOB/.test(t)?`binary`:/REAL|FLOA|DOUB|NUM|DEC/.test(t)?`number`:`other`}function p(e){let t=e.toLowerCase().trim();return/^(tinyint\(1\)|bool|boolean|bit\(1\))(\s|$)/.test(t)?`boolean`:/^(tinyint|smallint|mediumint|int|integer|bigint|decimal|numeric|dec|fixed|float|double|real|bit|year)\b/.test(t)?`number`:/^(char|varchar|tinytext|text|mediumtext|longtext|enum|set|national)\b/.test(t)?`text`:t===`date`?`date`:/^(datetime|timestamp)\b/.test(t)?`datetime`:/^time\b/.test(t)?`time`:/^(binary|varbinary|tinyblob|blob|mediumblob|longblob)\b/.test(t)?`binary`:t===`json`?`json`:`other`}var ee={postgres:d,sqlite:f,mysql:p,mariadb:p};function m(e,t){return(ee[e]??(()=>`other`))(t)}var te=1e4,ne=5e3,re=4e3;function ie(e){let t=new Set(e),n=new Set;return e.map(e=>{if(!n.has(e))return n.add(e),e;let r=2;for(;n.has(`${e} (${r})`)||t.has(`${e} (${r})`);)r++;let i=`${e} (${r})`;return n.add(i),i})}function h(e,t){let n=ie(e.map(e=>e.name));return{keys:n,records:t.map(e=>{let t={};return n.forEach((n,r)=>{t[n]=e[r]}),t})}}function ae(e){let{keys:t,records:n}=h(e.columns,e.rows);return{...e,columns:t,rows:n}}var oe=[`!=`,`<>`,`<=`,`>=`,`!^`,`!$`,`=`,`<`,`>`,`+`,`~`,`^`,`$`],g=new Set([`+`,`~`,`^`,`!^`,`$`,`!$`]),se=64,_=/\s/,ce=/^-?(?:\d+\.?\d*|\.\d+)(?:e[+-]?\d+)?$/i,le=/^(\d{4})(?:-(\d{2})(?:-(\d{2})(?:[T ](\d{2}):(\d{2})(?::(\d{2})(?:\.(\d{1,6}))?)?(Z|[+-]\d{2}(?::?\d{2})?)?)?)?)?$/i,ue=/^\d{4}-\d{2}-\d{2}$/,de=/^\d{2}:\d{2}(?::\d{2}(?:\.\d{1,6})?)?(?:Z|[+-]\d{2}(?::?\d{2})?)?$/i,fe=`use 2021, 2021-02, 2021-02-15 or 2021-02-15 23:15`,v=class extends Error{constructor(e,t,n){super(e),this.start=t,this.end=n}};function y(e,t,n){throw new v(e,t,n)}function b(e,t){for(;t<e.length&&_.test(e[t]);)t++;return t}function pe(e,t){let n=e[t],r=``;for(let i=t+1;i<e.length;i++)if(e[i]!==n)r+=e[i];else if(e[i+1]===n)r+=n,i++;else return{value:r,end:i+1};y(`Missing closing ${n}`,t,e.length)}function me(e,t){let n=0,r=null,i=-1;for(let a=t;a<e.length;a++){let o=e[a];if(r)o===r&&(r=null);else if(o===`'`||o===`"`||o==="`")r=o;else if(o===`;`)i<0&&(i=a);else if(o===`{`)n++;else if(o===`}`&&--n===0){let n=e.slice(t+1,a).trim();return n||y(`The SQL condition is empty`,t,a+1),n.length>4e3&&y(`An SQL condition may hold at most ${re} characters`,t,a+1),i>=0&&y(`An SQL condition may not contain ";"`,i,i+1),{sql:n,end:a+1}}}y(`Missing closing }`,t,e.length)}function he(e,t){let n=oe.find(n=>e.startsWith(n,t))??null,r=t;n&&(r=b(e,t+n.length),(r===e.length||e[r]===`,`)&&y(`Expected a value after "${n}"`,t,t+n.length));let i=e[r];if(i===`'`||i===`"`){let{value:i,end:a}=pe(e,r);return{op:n,text:i,quoted:!0,sql:!1,start:t,valueStart:r,end:a}}if(i===`{`&&!n){let{sql:n,end:i}=me(e,r);return{op:null,text:n,quoted:!1,sql:!0,start:t,valueStart:r,end:i}}let a=r;for(;a<e.length&&!_.test(e[a])&&e[a]!==`,`;)a++;return{op:n,text:e.slice(r,a),quoted:!1,sql:!1,start:t,valueStart:r,end:a}}function x(e){let t=b(e,0);if(t===e.length)return[];let n=[[]];for(;;){e[t]===`,`&&y(`Expected a value before ","`,t,t+1);let r=he(e,t);n[n.length-1].push(r);let i=b(e,r.end);if(i===e.length)return n;e[i]===`,`?(t=b(e,i+1),t===e.length&&y(`Expected a value after ","`,i,i+1),n.push([])):i===r.end?y(`Expected a space or a comma`,i,i+1):t=i}}function S(e){return e&&e.op===null&&!e.quoted&&!e.sql?e.text.toUpperCase():null}function C(e){switch(e){case`number`:case`boolean`:case`binary`:return e;case`date`:case`datetime`:case`datetimetz`:return`date`;default:return`text`}}var w=(e,t=1)=>({alt:[[e]],used:t});function T(e,t){y(`"${e.op}" does not work on ${t} columns`,e.start,e.start+e.op.length)}function ge(e,t){let n=e[t],r=S(n);if(r===`EMPTY`)return w({op:`isEmpty`});if(r===`NOT`&&S(e[t+1])===`EMPTY`)return w({op:`notEmpty`},2);let i=n.text;switch(n.op){case null:case`+`:return w({op:`contains`,value:i});case`~`:return w({op:`notContains`,value:i});case`^`:return w({op:`startsWith`,value:i});case`!^`:return w({op:`notStartsWith`,value:i});case`$`:return w({op:`endsWith`,value:i});case`!$`:return w({op:`notEndsWith`,value:i});case`=`:return w({op:`eq`,value:i});case`!=`:case`<>`:return w({op:`ne`,value:i});case`<`:return w({op:`lt`,value:i});case`>`:return w({op:`gt`,value:i});case`<=`:return w({op:`le`,value:i});case`>=`:return w({op:`ge`,value:i})}}function _e(e){let t=Number(e);if(!Number.isFinite(t))return e;if(/^-?\d+$/.test(e))return Number.isSafeInteger(t)?t:e;let n=e.replace(/^-/,``).replace(/e.*$/i,``).replace(`.`,``).replace(/^0+/,``).replace(/0+$/,``);return n.length<=15&&!(t===0&&n!==``)?t:e}function ve(e){e.op&&g.has(e.op)&&T(e,`number`),ce.test(e.text)||y(`"${e.text}" is not a number`,e.valueStart,e.end);let t=_e(e.text);switch(e.op){case`!=`:case`<>`:return w({op:`ne`,value:t});case`<`:return w({op:`lt`,value:t});case`>`:return w({op:`gt`,value:t});case`<=`:return w({op:`le`,value:t});case`>=`:return w({op:`ge`,value:t});default:return w({op:`eq`,value:t})}}function ye(e){e.op&&e.op!==`=`&&T(e,`boolean`);let t=e.text.toUpperCase();if(t===`TRUE`||t===`1`)return w({op:`isTrue`});if(t===`FALSE`||t===`0`)return w({op:`isFalse`});y(`"${e.text}" is not TRUE or FALSE`,e.valueStart,e.end)}function E(e,t=1,n=1,r=0,i=0,a=0,o=``){return{y:e,mo:t,d:n,h:r,mi:i,s:a,frac:o}}function D(e,t,n){let r=new Date(0);return r.setUTCFullYear(e.y,e.mo-1,e.d),r.setUTCHours(e.h,e.mi,e.s,0),t===`year`?r.setUTCFullYear(r.getUTCFullYear()+n):t===`month`?r.setUTCMonth(r.getUTCMonth()+n):t===`day`?r.setUTCDate(r.getUTCDate()+n):t===`minute`?r.setUTCMinutes(r.getUTCMinutes()+n):r.setUTCSeconds(r.getUTCSeconds()+n),E(r.getUTCFullYear(),r.getUTCMonth()+1,r.getUTCDate(),r.getUTCHours(),r.getUTCMinutes(),r.getUTCSeconds(),e.frac)}function O(e,t){if(t!==`fraction`)return D(e,t,1);let n=e.frac.length,r=Number(e.frac)+1;return r<10**n?{...e,frac:String(r).padStart(n,`0`)}:{...D(e,`second`,1),frac:`0`.repeat(n)}}function be(e,t){let n=new Date(0);return n.setUTCFullYear(e,t,0),n.getUTCDate()}var k=(e,t=2)=>String(e).padStart(t,`0`);function xe(e){return`${k(e.y,4)}-${k(e.mo)}-${k(e.d)} ${k(e.h)}:${k(e.mi)}:${k(e.s)}${e.frac?`.${e.frac}`:``}`}function Se(e){let t=Math.abs(e);return`${e<0?`-`:`+`}${k(Math.floor(t/60))}:${k(t%60)}`}function Ce(e){let t=new Date(2e3,0,1);return t.setFullYear(e.y,e.mo-1,e.d),t.setHours(e.h,e.mi,e.s,0),Se(-Math.round(t.getTimezoneOffset()))}function we(e){let t=le.exec(e);if(!t)return null;let[,n,r,i,a,o,s,c,l]=t,u=E(Number(n),r?Number(r):1,i?Number(i):1,a?Number(a):0,o?Number(o):0,s?Number(s):0,c??``);if(u.mo<1||u.mo>12||u.d<1||u.d>be(u.y,u.mo)||u.h>23||u.mi>59||u.s>59)return null;let d=c?`fraction`:s?`second`:o?`minute`:i?`day`:r?`month`:`year`,f=null;if(l)if(l.toUpperCase()===`Z`)f=0;else{let e=Number(l.slice(1,3)),t=Number(l.slice(3).replace(`:`,``)||`0`);if(e>23||t>59)return null;f=(l[0]===`-`?-1:1)*(e*60+t)}return{start:u,precision:d,zone:f}}function A(e,t,n,r){let i=e=>({at:xe(e),offset:r??Ce(e)}),a=i(t),o=n.y<=9999?i(n):null,s=e=>({op:`dateRange`,from:e.at,offset:e.offset}),c=e=>({op:`dateRange`,to:e.at,offset:e.offset});switch(e.op){case`!=`:case`<>`:return o?[[c(a)],[s(o)]]:[[c(a)]];case`>`:return o||y(`Nothing comes after the year 9999`,e.start,e.end),[[s(o)]];case`>=`:return[[s(a)]];case`<`:return[[c(a)]];case`<=`:return o?[[c(o)]]:[[{op:`notNull`}]];default:return o?a.offset===o.offset?[[{op:`dateRange`,from:a.at,to:o.at,offset:a.offset}]]:[[s(a),c(o)]]:[[s(a)]]}}var Te={YESTERDAY:-1,TODAY:0,TOMORROW:1},Ee={LAST:-1,THIS:0,NEXT:1};function De(e,t,n){let r=E(e.getFullYear(),e.getMonth()+1,e.getDate());if(n===`WEEK`){let n=D(r,`day`,7*t-(e.getDay()+6)%7);return[n,D(n,`day`,7)]}if(n===`MONTH`){let e=D(E(r.y,r.mo),`month`,t);return[e,D(e,`month`,1)]}let i=E(r.y+t);return[i,D(i,`year`,1)]}function Oe(e,t,n){let r=e[t],i=e[t+1];if(r.op&&g.has(r.op)&&T(r,`date`),!r.quoted){let e=r.text.toUpperCase(),t=Te[e];if(t!==void 0){let e=D(E(n.getFullYear(),n.getMonth()+1,n.getDate()),`day`,t);return{alt:A(r,e,D(e,`day`,1),null),used:1}}let a=Ee[e];if(a!==void 0){let t=S(i);t!==`WEEK`&&t!==`MONTH`&&t!==`YEAR`&&y(`Expected WEEK, MONTH or YEAR after ${e}`,r.valueStart,r.end);let[o,s]=De(n,a,t);return{alt:A({...r,end:i.end},o,s,null),used:2}}}let a=!r.quoted&&ue.test(r.text)&&S(i)!==null&&de.test(i.text),o=a?{...r,text:`${r.text} ${i.text}`,end:i.end}:r,s=we(o.text)??y(`"${o.text}" is not a date — ${fe}`,o.valueStart,o.end),c=a?2:1;if(s.zone===null)return{alt:A(o,s.start,O(s.start,s.precision),null),used:c};let l=D(s.start,`minute`,-s.zone);return{alt:A(o,l,O(l,s.precision),`+00:00`),used:c}}function ke(e,t,n,r){let i=e[t];if(i.sql)return w({op:`rawSql`,sql:i.text});let a=S(i);if(a===`NULL`)return w({op:`isNull`});if(a===`NOT`&&S(e[t+1])===`NULL`)return w({op:`notNull`},2);switch(n){case`text`:return ge(e,t);case`number`:return ve(i);case`boolean`:return ye(i);case`date`:return Oe(e,t,r);case`binary`:y(`A binary column can only be filtered with NULL, NOT NULL or an SQL condition in braces`,i.start,i.end)}}function Ae(e,t,n){let r=[[]];for(let i=0;i<e.length;){let{alt:a,used:o}=ke(e,i,t,n);r.length*a.length>se&&y(`Too many conditions joined with spaces`,e[i].start,e[i+o-1].end),r=r.flatMap(e=>a.map(t=>[...e,...t])),i+=o}return r}function je(e,t){let n=e=>e.length===1&&e[0].op===`eq`,r=e.filter(n).map(e=>e[0].value);if(r.length<2)return e;r.length>5e3&&y(`More than ${ne} values`,0,t.length);let i=e.findIndex(n),a=e.filter(e=>!n(e));return[...a.slice(0,i),[{op:`in`,values:r}],...a.slice(i)]}function j(e){if(!(e instanceof v))throw e;return{ok:!1,error:{message:e.message,start:e.start,end:e.end}}}function M(e,t,n=new Date){try{let r=C(t);return{ok:!0,anyOf:je(x(e).flatMap(e=>Ae(e,r,n)),e)}}catch(e){return j(e)}}function N(e,t,n=new Date){try{let t=x(e).flat().find(e=>e.sql);t&&y(`An SQL condition only works in one column's own filter`,t.start,t.end)}catch(e){return j(e)}let r=t.flatMap(t=>{let r=M(e,t.kind,n);return r.ok&&r.anyOf.length>0?[{column:t.name,anyOf:r.anyOf}]:[]});return r.length===0&&e.trim()?{ok:!1,error:{message:`No column can read this filter`,start:0,end:e.length}}:{ok:!0,groups:r}}var P={columns:{}},Me={state:`empty`};function Ne(e,t){return e.map(e=>({name:e.name,kind:t?m(t,e.type):`other`}))}function F(e,t){if(!e||!e.text.trim())return Me;let n=t(e.text);return n.ok?{state:e.off?`off`:`ok`}:{state:`bad`,error:n.error}}function Pe(e,t,n=new Date){return F(e,e=>M(e,t,n))}function Fe(e,t,n=new Date){return F(e,e=>N(e,t,n))}function Ie(e,t,n=new Date){let r=t.flatMap(t=>{let r=e.columns[t.name];if(!r||r.off)return[];let i=M(r.text,t.kind,n);return i.ok&&i.anyOf.length>0?[{column:t.name,anyOf:i.anyOf}]:[]}),i=e.multi,a=i&&!i.off?N(i.text,t,n):null;return{filters:r,anyColumn:a?.ok?a.groups:[]}}function Le(e,t,n){let r={...e.columns};return n.trim()?r[t]={text:n}:delete r[t],{...e,columns:r}}function Re(e,t){let{multi:n,...r}=e;return t.trim()?{...r,multi:{text:t}}:r}var I=(e,t)=>t?{text:e.text,off:!0}:{text:e.text};function ze(e,t,n){if(t===null)return e.multi?{...e,multi:I(e.multi,n)}:e;let r=e.columns[t];return r?{...e,columns:{...e.columns,[t]:I(r,n)}}:e}function L(e){return Object.keys(e.columns).length>0||!!e.multi?.text.trim()}function Be(e,t){let n=new Set(t.map(e=>e.name)),r=Object.entries(e.columns).filter(([e])=>n.has(e));return r.length===Object.keys(e.columns).length?e:{...e,columns:Object.fromEntries(r)}}var R=`filters`,z={columns:1e3,name:1e3,text:1e4},B=e=>typeof e==`object`&&!!e&&!Array.isArray(e);function V(e){return!B(e)||typeof e.text!=`string`||!e.text.trim()||e.text.length>z.text?null:I({text:e.text},e.off===!0)}function Ve(e){let t=e?.[R];if(!B(t))return P;let n=B(t.columns)?Object.entries(t.columns).slice(0,z.columns).flatMap(([e,t])=>{let n=V(t);return n&&e&&e.length<=z.name?[[e,n]]:[]}):[],r=V(t.multi);return r?{columns:Object.fromEntries(n),multi:r}:{columns:Object.fromEntries(n)}}function H(e,t){let{[R]:n,...r}=e??{};return L(t)?{...r,[R]:t}:r}var He={is:`=`,isNot:`<>`,contains:``,begins:`^`,ends:`$`};function Ue(e,t){return t.split(/\r?\n/).map(e=>e.trim()).filter(Boolean).map(t=>`${He[e]}'${t.replaceAll(`'`,`''`)}'`).join(e===`isNot`?` `:`,`)}var U=`gridView`,W={min:170,max:420,initial:300},G={columns:1e3,name:1e3},K={min:40,max:2e3},q={hidden:[],panelWidth:W.initial,columnWidths:{},form:!1},J=e=>typeof e==`object`&&!!e&&!Array.isArray(e),Y=e=>typeof e==`string`&&e.length>0&&e.length<=G.name;function X(e){return Number.isFinite(e)?Math.round(Math.min(W.max,Math.max(W.min,e))):W.initial}function We(e){let t=e?.[U];if(!J(t))return q;let n=Array.isArray(t.hidden)?[...new Set(t.hidden.slice(0,G.columns).filter(Y))]:[],r=typeof t.panelWidth==`number`?X(t.panelWidth):W.initial,i=J(t.columnWidths)?Object.entries(t.columnWidths).slice(0,G.columns).flatMap(([e,t])=>Y(e)&&typeof t==`number`&&Number.isFinite(t)&&t>=K.min&&t<=K.max?[[e,Math.round(t)]]:[]):[];return{hidden:n,panelWidth:r,columnWidths:Object.fromEntries(i),form:t.form===!0}}function Z(e,t){let{[U]:n,...r}=e??{},i={};return t.hidden.length&&(i.hidden=t.hidden),t.panelWidth!==W.initial&&(i.panelWidth=t.panelWidth),Object.keys(t.columnWidths).length&&(i.columnWidths=t.columnWidths),t.form&&(i.form=!0),Object.keys(i).length?{...r,[U]:i}:r}function Ge(e,t){let n=u(t,e);return{target:{kind:`connection`,connectionId:e.id,...n?{database:n}:{}},connectionName:e.name,dbType:e.type,connectionColor:e.color}}function Ke(e,t){let n=t?.connectionName,r=t?.connectionColor;return{target:e,...typeof n==`string`?{connectionName:n}:{},...typeof t?.dbType==`string`?{dbType:t.dbType}:{},...typeof r==`string`?{connectionColor:r}:{}}}function Q(e){return{...r(e.target),...e.connectionName?{connectionName:e.connectionName}:{},...e.dbType?{dbType:e.dbType}:{},...e.connectionColor?{connectionColor:e.connectionColor}:{}}}function $(e){return e.target.kind===`file`?e.target.projectName??null:null}function qe(e,t,r,i){return c.getState().openTab({type:e,title:n(t.target,t.connectionName,r.name),projectId:$(t),closable:!0,metadata:{...Q(t),schemaName:r.schema??``,tableName:r.name,...r.kind?{objectKind:r.kind}:{}}},i)}function Je(e,t){return qe(`database`,e,t)}function Ye(t,r,i){let a={...Q(t),schemaName:r.schema??``,tableName:r.name,instance:e()};return c.getState().openTab({type:`database`,title:n(t.target,t.connectionName,r.name),projectId:$(t),closable:!0,metadata:Z(H(a,i),{...q,form:!0})})}function Xe(e,t,n){return qe(`db-structure`,e,t,n)}function Ze(e,t,n){let r=c.getState().getPanelForTab(e),i=r?r.tabs.findIndex(t=>t.id===e):-1,a=Xe(t,n,r?.id);return r?(c.getState().closeTab(e,r.id),i>=0&&c.getState().reorderTab(a,r.id,i),a):a}function Qe(t,n){let r=a(Object.values(c.getState().panels).flatMap(e=>e.tabs));return l.getState().openTab({type:`db-structure`,title:`Table #${r}`,projectId:$(t),closable:!0,metadata:{...Q(t),...o(s(n),r,e())}})}function $e(e,t){return l.getState().openTab({type:`db-sql`,title:n(e.target,e.connectionName,t.name),projectId:$(e),closable:!0,metadata:{...Q(e),schemaName:t.schema??``,objectKind:t.kind,objectName:t.name,...t.args===void 0?{}:{objectArgs:t.args},...t.table?{objectTable:t.table}:{}}})}function et(e,n,r={}){let a=t(Object.values(c.getState().panels).flatMap(e=>e.tabs));return l.getState().openTab({type:`db-query`,title:`Query ${a}`,projectId:$(e),closable:!0,metadata:{...Q(e),...i(n,a,r)}})}export{H as A,L as C,Le as D,Ve as E,ae as F,h as I,m as L,N as M,M as N,ze as O,te as P,Be as S,Fe as T,R as _,Xe as a,Ie as b,Ke as c,W as d,U as f,P as g,Z as h,$e as i,C as j,Re as k,Ge as l,We as m,et as n,Ze as o,X as p,Ye as r,Je as s,Qe as t,q as u,z as v,Ue as w,Ne as x,Pe as y};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as e}from"./window-store-DqX_qmkQ.js";import{t}from"./tab-store-D5I52eLN.js";import{t as n}from"./use-is-mobile-VRV9eZy1.js";import{r}from"./settings-categories-Ajj4ui27.js";function i(e,t,n){return e?{kind:`tab`,tab:{type:`settings`,title:`Settings`,projectId:null,closable:!0,...n&&{metadata:{category:n}}}}:t?{kind:`focus`,id:t,...n&&{category:n}}:{kind:`window`,...n&&{category:n}}}function a(a){let o=e.getState(),s=Object.values(o.windows).find(e=>e.kind===`settings`),c=i(n(),s?.id??null,a);if(c.kind===`tab`){let e=t.getState(),n=e.openTab(c.tab);a&&n&&e.updateTab(n,{metadata:{category:a}})}else c.kind===`focus`?(c.category&&o.setPayload(c.id,{category:c.category}),o.focus(c.id)):o.open(`settings`,c.category?{category:c.category}:void 0);a&&window.dispatchEvent(new CustomEvent(r,{detail:a}))}export{a as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{s as e}from"./rolldown-runtime-C5c2KzVm.js";import{D as t,E as n}from"./vendor-markdown-C-P1aR4p.js";import{n as r}from"./utils-Bslrbb-G.js";import{r as i,t as a}from"./format-bytes-he3TR0bV.js";import{t as o}from"./metric-chart-canvas-DEW16Su8.js";var s=e(t(),1),c=n();function l(e){return e>80?`bg-error`:e>50?`bg-warning`:`bg-success`}function u({cores:e}){return(0,c.jsx)(`div`,{className:`flex items-end gap-0.5 min-h-11 w-full`,"data-testid":`sysmon-core-bars`,"data-core-count":e.length,children:e.map((e,t)=>(0,c.jsx)(`div`,{className:`flex-1 h-11 flex items-end rounded-sm overflow-hidden bg-surface-hover`,title:`Core ${t}: ${e.toFixed(0)}%`,children:(0,c.jsx)(`div`,{className:r(`w-full transition-[height]`,l(e)),style:{height:`${Math.max(2,Math.min(100,e))}%`}})},t))})}function d({testId:e,data:t,onOpen:n,openLabel:i,children:a}){let o=`rounded-lg border border-border p-4 space-y-2`,s={"data-testid":e,...t};return n?(0,c.jsx)(`button`,{type:`button`,onClick:n,"aria-label":i,...s,className:r(o,`w-full text-left cursor-pointer transition-colors`,`hover:bg-surface-hover hover:border-primary/40`,`focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary`),children:a}):(0,c.jsx)(`div`,{className:o,...s,children:a})}function f(e){return e>80?`text-error`:e>50?`text-warning`:`text-success`}function p({total:e,cores:t,model:n,series:r,onOpen:i}){return(0,c.jsxs)(d,{testId:`sysmon-card-cpu`,data:{"data-cpu-total":e},onOpen:i,openLabel:`CPU details`,children:[(0,c.jsxs)(`div`,{className:`flex items-baseline justify-between`,children:[(0,c.jsx)(`h3`,{className:`text-sm font-medium`,children:`CPU`}),(0,c.jsxs)(`span`,{className:`text-2xl font-semibold ${f(e)}`,children:[e.toFixed(1),`%`]})]}),(0,c.jsx)(o,{series:[{data:r,color:`var(--color-primary)`}],height:56,maxValue:100,grid:!0}),(0,c.jsx)(u,{cores:t}),(0,c.jsx)(`p`,{className:`text-[11px] text-text-subtle truncate`,title:n,children:n})]})}function m({usedMB:e,totalMB:t,percent:n,series:r,onOpen:a}){return(0,c.jsxs)(d,{testId:`sysmon-card-mem`,data:{"data-mem-percent":n},onOpen:a,openLabel:`Memory details`,children:[(0,c.jsxs)(`div`,{className:`flex items-baseline justify-between`,children:[(0,c.jsx)(`h3`,{className:`text-sm font-medium`,children:`Memory`}),(0,c.jsxs)(`span`,{className:`text-2xl font-semibold`,children:[n.toFixed(1),`%`]})]}),(0,c.jsx)(o,{series:[{data:r,color:`var(--color-primary)`}],height:56,maxValue:100,grid:!0}),(0,c.jsxs)(`p`,{className:`text-[11px] text-text-subtle`,children:[i(e),` / `,i(t)]})]})}function h({available:e,inBps:t,outBps:n,readSeries:r,writeSeries:i,measuring:s,onOpen:l}){return(0,c.jsxs)(d,{testId:`sysmon-card-disk`,data:{"data-available":e},onOpen:l,openLabel:`Disk details`,children:[(0,c.jsx)(`h3`,{className:`text-sm font-medium`,children:`Disk`}),e?(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(o,{series:[{data:r,color:`var(--color-primary)`},{data:i,color:`var(--color-warning)`}],height:56,grid:!0}),(0,c.jsxs)(`p`,{className:`text-[11px] text-text-subtle`,children:[`Read `,a(t),` · Write `,a(n)]})]}):(0,c.jsx)(`p`,{className:`text-[11px] text-text-subtle`,children:s?`measuring…`:`n/a`})]})}function g({available:e,inBps:t,outBps:n,downSeries:r,upSeries:i,measuring:s,onOpen:l}){return(0,c.jsxs)(d,{testId:`sysmon-card-net`,data:{"data-available":e},onOpen:l,openLabel:`Network details`,children:[(0,c.jsx)(`h3`,{className:`text-sm font-medium`,children:`Network`}),e?(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(o,{series:[{data:r,color:`var(--color-primary)`},{data:i,color:`var(--color-warning)`}],height:56,grid:!0}),(0,c.jsxs)(`p`,{className:`text-[11px] text-text-subtle`,children:[`Down `,a(t),` · Up `,a(n)]})]}):(0,c.jsx)(`p`,{className:`text-[11px] text-text-subtle`,children:s?`measuring…`:`n/a`})]})}function _({name:e,utilPercent:t,vramUsedMB:n,vramTotalMB:r,series:a,onOpen:s}){return(0,c.jsxs)(d,{testId:`sysmon-card-gpu`,onOpen:s,openLabel:`${e} details`,children:[(0,c.jsxs)(`div`,{className:`flex items-baseline justify-between gap-2`,children:[(0,c.jsx)(`h3`,{className:`text-sm font-medium truncate`,title:e,children:e}),(0,c.jsxs)(`span`,{className:`text-2xl font-semibold shrink-0`,children:[t.toFixed(0),`%`]})]}),(0,c.jsx)(o,{series:[{data:a,color:`var(--color-primary)`}],height:56,maxValue:100,grid:!0}),r>0&&(0,c.jsxs)(`p`,{className:`text-[11px] text-text-subtle`,children:[`VRAM `,i(n),` / `,i(r)]})]})}function v(e,t){let n=null,r=-1/0;for(let i of e){let e=t(i);e!==null&&e>r&&(n=i,r=e)}return n??e[0]??null}function y(e){let t=v(e.disks??[],e=>e.available?e.busyPercent:null);return t?`disk:${t.id}`:null}function b(e){let t=v(e.nics??[],e=>e.available?e.rxBps+e.txBps:null);return t?`nic:${t.id}`:null}function x(e,t){return`gpu:${e??t}`}var S=200;function C(e){return(0,s.useMemo)(()=>{let t=e.slice(-S),n=[],r=[],i=[],a=[],o=[],s=[],c=[];for(let e of t)n.push(e.system.cpu.total),r.push(e.system.mem.percent),i.push(e.system.disk.available?e.system.disk.inBps:0),a.push(e.system.disk.available?e.system.disk.outBps:0),o.push(e.system.net.available?e.system.net.inBps:0),s.push(e.system.net.available?e.system.net.outBps:0),e.system.gpus.forEach((e,t)=>{(c[t]??=[]).push(e.utilPercent)});return{cpu:n,mem:r,diskRead:i,diskWrite:a,netDown:o,netUp:s,gpuUtil:c}},[e])}function w({system:e,history:t,onOpenDevice:n}){let r=C(t),i=t.length<=1,a=e=>n&&e?()=>n(e):void 0;return(0,c.jsxs)(`div`,{className:`p-4 grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-4`,"data-testid":`sysmon-overview`,children:[(0,c.jsx)(p,{total:e.cpu.total,cores:e.cpu.cores,model:e.cpu.model,series:r.cpu,onOpen:a(`cpu`)}),(0,c.jsx)(m,{usedMB:e.mem.usedMB,totalMB:e.mem.totalMB,percent:e.mem.percent,series:r.mem,onOpen:a(`memory`)}),(0,c.jsx)(h,{available:e.disk.available,inBps:e.disk.inBps,outBps:e.disk.outBps,readSeries:r.diskRead,writeSeries:r.diskWrite,measuring:i,onOpen:a(y(e))}),(0,c.jsx)(g,{available:e.net.available,inBps:e.net.inBps,outBps:e.net.outBps,downSeries:r.netDown,upSeries:r.netUp,measuring:i,onOpen:a(b(e))}),e.gpus.map((e,t)=>(0,c.jsx)(_,{name:e.name,utilPercent:e.utilPercent,vramUsedMB:e.vramUsedMB,vramTotalMB:e.vramTotalMB,series:r.gpuUtil[t]??[],onOpen:a(x(e.id,t))},`${e.name}-${t}`))]})}export{w as OverviewPanel};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{d as e,h as t,u as n,v as r}from"./api-client-xQDlhUTu.js";import{t as i}from"./react-BZ0kba1-.js";import{A as a,B as o,D as s,H as c,I as l,L as u,M as d,O as f,P as p,R as m,T as h,U as g,V as _,j as v,k as y,n as b,z as x}from"./window-store-DqX_qmkQ.js";import{i as S}from"./project-store-BLGl9IAO.js";import{t as C}from"./session-list-sync-triggers-DtJI5KF0.js";var ee=15,te=85;function ne(e){return Math.min(te,Math.max(ee,e))}function w(e,t){let n=e.filter(e=>e!==t);return n.push(t),n.length>50&&n.shift(),n}function T(e){let t=e().panels[h];if(!t)return 0;let n=e().currentProject;return t.tabs.filter(e=>!e.projectId||!n||e.projectId===n).length}function E(e){let t=e().currentProject;e().openInDock({type:`terminal`,title:`Terminal`,projectId:t??null,closable:!0,metadata:t?{projectName:t}:void 0})}function D(e,t){return function(){let{dock:n}=t(),r=!n.visible;e({dock:{...n,visible:r}}),j(t),r&&T(t)===0&&E(t)}}function O(e,t){return function(n){let{dock:r}=t();e({dock:{...r,visible:n}}),j(t)}}function k(e,t){return function(n){let{dock:r}=t();e({dock:{...r,height:ne(n)}}),j(t)}}function A(e,t){return function(n){let{panels:r,dock:i}=t(),a=r.__dock__??f(),o=n;if(n.type===`terminal`&&!n.metadata?.terminalIndex){let e=Object.values(r).flatMap(e=>e.tabs).filter(e=>e.type===`terminal`).map(e=>{let t=e.id.match(/^terminal:(\d+)/);return t?parseInt(t[1],10):0}),t=e.length>0?Math.max(...e)+1:1;o={...n,metadata:{...n.metadata,terminalIndex:t}}}let s=v(o.type,o.metadata);if(a.tabs.find(e=>e.id===s))return e(e=>({dock:{...e.dock,visible:!0},panels:{...e.panels,[h]:{...a,activeTabId:s,tabHistory:w(a.tabHistory,s)}}})),j(t),s;let c={...o,id:s},l=[...a.tabs,c],u=w(a.tabHistory,s);return e(e=>({dock:{...e.dock,visible:!0},panels:{...e.panels,[h]:{...a,tabs:l,activeTabId:s,tabHistory:u}}})),j(t),s}}function re(e,t){return function(n,r){t().moveTab(n,r,h);let{dock:i}=t();e({dock:{...i,visible:!0}}),j(t)}}function j(e){let{currentProject:t,panels:n,grid:r,focusedPanelId:i,dock:a}=e();if(!t)return;let o=new Set(r.flat()),s={};for(let[e,t]of Object.entries(n))o.has(e)&&(s[e]=t);x(t,{panels:s,grid:r,focusedPanelId:i,dock:a,dockPanel:n.__dock__??f()})}function ie(e,t,n){return{...n,[e]:t}}function M(e,t){return t[e]??{visible:!1,height:30}}function ae(e,t){return t&&e.visible?{...e,visible:!1}:e}var N=`ppm-window-panels`,oe={terminal:!0,chat:!0,editor:!0,database:!0,"db-structure":!0,"db-sql":!0,"db-query":!0,"db-impexp":!0,"db-connection":!0,sqlite:!0,"git-diff":!0,"branch-review":!0,"session-review":!0,"git-review":!0,settings:!1,extension:!0,"extension-webview":!0,"conflict-editor":!0,"system-monitor":!1,"git-log":!0,"ai-resource":!0,group:!0,problems:!1,design:!0,android:!0,"web-preview":!0,logs:!1};function se(e){return typeof e==`string`&&oe[e]===!0}function ce(e){if(!e||typeof e!=`object`)return!1;let t=e;return typeof t.id==`string`&&!!t.id&&typeof t.title==`string`&&se(t.type)}function P(e){let t={};for(let[n,r]of Object.entries(e))!l(n)||r.tabs.length===0||(t[n]=r);return t}function F(e){try{let t=P(e);Object.keys(t).length===0?localStorage.removeItem(N):localStorage.setItem(N,JSON.stringify(t))}catch{}}function I(){let e=null;try{e=localStorage.getItem(N)}catch{return{}}if(!e)return{};let t;try{t=JSON.parse(e)}catch{return{}}if(!t||typeof t!=`object`||Array.isArray(t))return{};let n={};for(let[e,r]of Object.entries(t)){if(!l(e)||!r||typeof r!=`object`)continue;let t=r;if(!Array.isArray(t.tabs))continue;let i=o({id:e,tabs:t.tabs.filter(e=>!!e&&typeof e==`object`&&typeof e.id==`string`),activeTabId:typeof t.activeTabId==`string`?t.activeTabId:null,tabHistory:Array.isArray(t.tabHistory)?t.tabHistory.filter(e=>typeof e==`string`):[]}),a=i.tabs.filter(ce);if(a.length===0)continue;let s=new Set(a.map(e=>e.id)),c=i.tabHistory.filter(e=>s.has(e));n[e]={id:e,tabs:a,activeTabId:i.activeTabId&&s.has(i.activeTabId)?i.activeTabId:c[c.length-1]??a[a.length-1].id,tabHistory:c}}return n}function L(e,t){let n=e.flat();return t&&n.includes(t)?t:n[0]??null}function R(e){F(e().panels),j(e)}function z(e,t,n){if(t().panels[n]?.tabs.length){F(t().panels);return}e(e=>{let{[n]:t,...r}=e.panels;return{panels:r}}),F(t().panels);let r=c(n);r&&b.getState().close(r)}var B=!1;function V(e,t){if(B)return;B=!0;let n=I();Object.keys(n).length!==0&&e({panels:{...n,...t().panels}})}function H(e,t){return function(n,r,i={}){if(t().isMobile())return null;let o=t().panels[r]?.tabs.find(e=>e.id===n);if(!o||s.has(o.type))return null;let c=b.getState();if(Object.keys(c.windows).length>=8)return null;let l=c.open(`tab-host`,{originPanelId:r,title:o.title,...i.closeTabsOnClose?{closeTabsOnClose:!0}:{}},i.rect),u=g(l);e(e=>({panels:{...e.panels,[u]:a(l)}})),t().moveTab(n,r,u);let d=L(t().grid,r);return d&&e({focusedPanelId:d}),R(t),l}}function U(e,t){return function(n,r){let i=g(n),a=t().panels[i];if(!a)return;let o=W(t(),r);if(o)for(let e of[...a.tabs])t().moveTab(e.id,i,o);e(e=>{let{[i]:t,...n}=e.panels,r=L(e.grid,o??e.focusedPanelId);return r?{panels:n,focusedPanelId:r}:{panels:n}}),R(t),b.getState().close(n)}}function W(e,t){return t&&e.panels[t]&&!l(t)?t:L(e.grid,e.focusedPanelId)}function le(e,t){let n={...e},r=[];for(let[i,a]of Object.entries(e)){if(!l(i))continue;let e=a.tabs.filter(e=>e.projectId!==t);if(e.length===a.tabs.length)continue;let o=c(i);if(e.length===0){delete n[i],o&&r.push(o);continue}let s=new Set(e.map(e=>e.id)),u=a.tabHistory.filter(e=>s.has(e));n[i]={...a,tabs:e,tabHistory:u,activeTabId:a.activeTabId&&s.has(a.activeTabId)?a.activeTabId:u[u.length-1]??e[e.length-1].id}}return{panels:n,windowIdsToClose:r}}var ue=new Set([`chat`,`design`]);function G(e){if(!e||!ue.has(e.type))return;let t=e.metadata?.sessionId;return typeof t==`string`&&t?t:void 0}function K(e,t){return e.new_chat_provider_mode===`follow-focus`&&t&&t!==`default`?t:e.default_provider||`claude`}var de=new Set([`settings`,`git-log`]),fe=new Set([`database`,`db-structure`,`db-sql`]),pe=new Set([`projects`,`git-status`,`git-graph`]);function q(e,t){if(!e)return null;let n=e.tabs.filter(e=>!e.projectId||e.projectId===t);if(n.length===0)return null;for(let t=e.tabHistory.length-1;t>=0;t--){let r=e.tabHistory[t];if(n.some(e=>e.id===r))return r}return n[n.length-1].id}function me(t,i){let a=n(),o=t?e(r(C(t))):null,s=a?K(a,i):null;return a&&s&&o?.some(e=>e.id===s)?{providerId:s,permissionMode:a.providers[s]?.permission_mode??`bypassPermissions`,permissionModeSource:`cache`}:{providerPending:!0,focusedProviderOnOpen:i}}function J(e,t){if(e.permissionMode&&e.permissionModeSource!==`cache`)return{};let r=n()?.providers[t]?.permission_mode;return r?{permissionMode:r,permissionModeSource:`cache`}:{}}function Y(e,t){let n=e.filter(e=>e!==t);return n.push(t),n.length>50&&n.shift(),n}function X(e,t){let n=Date.now();return e.map(e=>e.id===t?{...e,metadata:{...e.metadata,lastActiveAt:n}}:e)}function Z(e){let t=c(e);t&&b.getState().focus(t)}function he(){let e=y(),t=f();return{panels:{[e.id]:e,[h]:t},grid:[[e.id]],focusedPanelId:e.id}}var Q=i()((e,n)=>{function r(){let{currentProject:e,panels:t,grid:r,focusedPanelId:i,dock:a}=n();if(!e)return;let o=new Set(r.flat()),s={};for(let[e,n]of Object.entries(t))o.has(e)&&(s[e]=n);x(e,{panels:s,grid:r,focusedPanelId:i,dock:a,dockPanel:t[h]})}function i(e){return Object.values(n().panels).find(t=>t.tabs.some(t=>t.id===e))}function a(e){return e??n().focusedPanelId}function o(e){return l(e)?n().focusedPanelId:e}return{...he(),currentProject:null,lastFocusedChatProviders:{},projectGrids:{},projectFocused:{},dock:{visible:!1,height:30},projectDock:{},dockExpanded:!1,toggleDock:D(e,n),setDockVisible:O(e,n),setDockHeight:k(e,n),toggleDockExpanded:()=>e(e=>({dockExpanded:!e.dockExpanded})),openInDock:A(e,n),redockTab:re(e,n),popOutTab:H(e,n),redockFromWindow:U(e,n),switchProject:r=>{if(r!==`__global__`){let e=S.getState().projects.find(e=>e.name===r);e&&t(e)}V(e,n);let{currentProject:i,panels:a,grid:o,focusedPanelId:s,projectGrids:c,projectFocused:l,dock:d,projectDock:m}=n();if(i===r)return;let g={...c},v={...l},b=i?ie(i,d,m):{...m};if(i){g[i]=o,v[i]=s;let e=new Set(o.flat()),t={};for(let[n,r]of Object.entries(a))e.has(n)&&(t[n]=r);x(i,{panels:t,grid:o,focusedPanelId:s,dock:d,dockPanel:a[h]})}if(g[r]){let t=g[r],n=v[r]??t[0]?.[0]??``,i=M(r,b),o=a[h];e({currentProject:r,panels:o?{...a,[h]:{...o,activeTabId:q(o,r)}}:a,grid:t,focusedPanelId:n,projectGrids:g,projectFocused:v,dock:i,projectDock:b});return}let C=u(r);if(C&&Object.keys(C.panels).length>0){let t=!1,i={};for(let[e,n]of Object.entries(C.panels)){let a=_(n.tabs,r).filter(e=>!pe.has(e.type));a.length!==n.tabs.length&&(t=!0);let o=n.tabHistory.filter(e=>a.some(t=>t.id===e)),s=n.activeTabId&&a.some(e=>e.id===n.activeTabId)?n.activeTabId:o[o.length-1]??a[0]?.id??null;i[e]={...n,tabs:a,tabHistory:o,activeTabId:s}}let o=C.grid;for(let e of o.flat())if(!((i[e]?.tabs.length??0)>0)){if(o.flat().length<=1)break;o=p(o,e),delete i[e],t=!0}let s=o.flat().includes(C.focusedPanelId)?C.focusedPanelId:o.flat()[0]??C.focusedPanelId,c=a.__dock__??f(),l=C.dockPanel??f(),u=[...c.tabs];for(let e of l.tabs)u.some(t=>t.id===e.id)||u.push(e);let d={...c,tabs:u,tabHistory:[...new Set([...c.tabHistory,...l.tabHistory])].filter(e=>u.some(t=>t.id===e)),activeTabId:null};d.activeTabId=q(d,r);let m={...a,...i,[h]:d};g[r]=o,v[r]=s;let y=ae(C.dock??M(r,b),n().isMobile());e({currentProject:r,panels:m,grid:o,focusedPanelId:s,projectGrids:g,projectFocused:v,dock:y,projectDock:b}),t&&x(r,{panels:i,grid:o,focusedPanelId:s,dock:y,dockPanel:d})}else{let t=y(),n=[[t.id]],i={...a,[t.id]:t};g[r]=n,v[r]=t.id;let o=M(r,b);x(r,{panels:{[t.id]:t},grid:n,focusedPanelId:t.id,dock:o,dockPanel:a[h]}),e({currentProject:r,panels:i,grid:n,focusedPanelId:t.id,projectGrids:g,projectFocused:v,dock:o,projectDock:b})}},reloadProject:t=>{let{projectGrids:r,projectFocused:i,projectDock:a,panels:o}=n(),s={...r},c={...i},l={...a};delete s[t],delete c[t],delete l[t];let u=r[t],d=u?new Set(u.flat()):new Set,f={...o};for(let e of d)e!==`__dock__`&&delete f[e];let p=f[h];if(p){let e=p.tabs.filter(e=>e.projectId!==t),n=new Set(e.map(e=>e.id));f[h]={...p,tabs:e,tabHistory:p.tabHistory.filter(e=>n.has(e)),activeTabId:p.activeTabId&&n.has(p.activeTabId)?p.activeTabId:e[e.length-1]?.id??null}}let m=le(f,t);e({projectGrids:s,projectFocused:c,projectDock:l,panels:m.panels,currentProject:null}),F(m.panels);for(let e of m.windowIdsToClose)b.getState().close(e);n().switchProject(t)},setFocusedPanel:(t,r=!0)=>{if(l(t))return;let i=n().panels[t];i&&(e({focusedPanelId:t}),r&&$(i.tabs.find(e=>e.id===i.activeTabId)))},openTab:(t,i)=>{let s=n().isMobile(),u=s?n().grid[0]?.[0]??a(i):a(i);if(!n().panels[u])return``;if(t.type===`chat`&&!t.metadata?.sessionId&&!t.metadata?.providerId){let e=t.projectId??t.metadata?.projectName??n().currentProject??void 0,r=e?n().lastFocusedChatProviders[e]:void 0;t={...t,metadata:{...t.metadata,...me(e,r)}}}else t.type===`chat`&&t.metadata&&!t.metadata.sessionId&&typeof t.metadata.providerId==`string`&&(t={...t,metadata:{...t.metadata,...J(t.metadata,t.metadata.providerId)}});if(t.type===`terminal`&&!t.metadata?.terminalIndex){let e=Object.values(n().panels).flatMap(e=>e.tabs).filter(e=>e.type===`terminal`).map(e=>{let t=e.id.match(/^terminal:(\d+)/);return t?parseInt(t[1],10):0}),r=e.length>0?Math.max(...e)+1:1;t={...t,metadata:{...t.metadata,terminalIndex:r}}}let d=v(t.type,t.metadata);if(t.type===`chat`&&t.metadata?.sessionId){let i=t.metadata.sessionId;for(let t of Object.values(n().panels)){let n=t.tabs.find(e=>G(e)===i);if(n)return $(n),e(e=>({focusedPanelId:o(t.id),panels:{...e.panels,[t.id]:{...t,tabs:X(t.tabs,n.id),activeTabId:n.id,tabHistory:Y(t.tabHistory,n.id)}}})),Z(t.id),r(),n.id}}if(t.type===`design`){let i=t.metadata?.designSlug,a=t.projectId??t.metadata?.projectName;for(let t of Object.values(n().panels)){let n=t.tabs.find(e=>e.type===`design`&&e.metadata?.designSlug===i&&(e.projectId??e.metadata?.projectName)===a);if(n)return e(e=>({focusedPanelId:o(t.id),panels:{...e.panels,[t.id]:{...t,tabs:X(t.tabs,n.id),activeTabId:n.id,tabHistory:Y(t.tabHistory,n.id)}}})),Z(t.id),r(),n.id}}if(fe.has(t.type)){let t=s?[]:Object.keys(n().panels).filter(l),i=[...n().grid.flat(),...t];for(let t of i){let i=n().panels[t],a=i?.tabs.find(e=>e.id===d||e.id.startsWith(`${d}@`));if(!i||!a)continue;e(e=>({focusedPanelId:o(i.id),panels:{...e.panels,[i.id]:{...i,tabs:X(i.tabs,a.id),activeTabId:a.id,tabHistory:Y(i.tabHistory,a.id)}}}));let s=c(i.id);return s&&(b.getState().focus(s),F(n().panels)),r(),a.id}}if(de.has(t.type))for(let t of Object.values(n().panels)){let n=t.tabs.find(e=>e.id===d);if(n)return e(e=>({focusedPanelId:o(t.id),panels:{...e.panels,[t.id]:{...t,tabs:X(t.tabs,n.id),activeTabId:n.id,tabHistory:Y(t.tabHistory,n.id)}}})),r(),n.id}if(s)for(let t of n().grid.flat()){let i=n().panels[t];if(!i)continue;let a=i.tabs.find(e=>e.id===d||e.id.startsWith(`${d}@`));if(a)return e(e=>({focusedPanelId:i.id,panels:{...e.panels,[i.id]:{...i,tabs:X(i.tabs,a.id),activeTabId:a.id,tabHistory:Y(i.tabHistory,a.id)}}})),r(),a.id}let f=n().panels[u],p=f.tabs.find(e=>e.id===d);if(p)return e(e=>({panels:{...e.panels,[u]:{...f,tabs:X(f.tabs,p.id),activeTabId:p.id,tabHistory:Y(f.tabHistory,p.id)}}})),r(),p.id;let m=Object.values(n().panels).some(e=>e.id!==u&&e.tabs.some(e=>e.id===d))?`${d}@${u}`:d,h={...t,id:m,metadata:{...t.metadata,lastActiveAt:Date.now()}};return e(e=>{let t=e.panels[u];return{focusedPanelId:u,panels:{...e.panels,[u]:{...t,tabs:[...t.tabs,h],activeTabId:m,tabHistory:Y(t.tabHistory,m)}}}}),r(),m},closeTab:(t,a)=>{let o=a?n().panels[a]:i(t);if(!o)return;let s=o.id;if(t.startsWith(`terminal:`))try{localStorage.removeItem(`ppm:terminal-session:${t}`)}catch{}e(e=>{let n=e.panels[s],r=n.tabs.filter(e=>e.id!==t),i=n.tabHistory.filter(e=>e!==t),a=n.activeTabId;if(n.activeTabId===t){let e=i.length>0?i[i.length-1]:null;a=e&&r.some(t=>t.id===e)?e:r[r.length-1]?.id??null}let o=e.grid.flat().length,c=l(s)||o>1&&s!==`__dock__`;if(r.length===0&&c){let{[s]:t,...n}=e.panels,r=p(e.grid,s);return{panels:n,grid:r,focusedPanelId:e.focusedPanelId===s?r.flat()[0]??Object.keys(n)[0]:e.focusedPanelId}}return{panels:{...e.panels,[s]:{...n,tabs:r,activeTabId:a,tabHistory:i}}}}),r(),s===`__dock__`&&T(n)===0&&n().setDockVisible(!1),l(s)&&z(e,n,s)},setActiveTab:(t,a)=>{let s=a?n().panels[a]:i(t);if(!s)return;$(s.tabs.find(e=>e.id===t));let c=s.id;e(e=>{let n=e.panels[c];return{focusedPanelId:o(c),panels:{...e.panels,[c]:{...n,tabs:X(n.tabs,t),activeTabId:t,tabHistory:Y(n.tabHistory,t)}}}}),r()},updateTab:(t,n)=>{let a=i(t);a&&(e(e=>({panels:{...e.panels,[a.id]:{...a,tabs:a.tabs.map(e=>e.id===t?{...e,...n}:e)}}})),r())},reorderTab:(t,i,a)=>{let o=n().panels[i];if(!o)return;let s=o.tabs.findIndex(e=>e.id===t);if(s===-1||s===a)return;let c=[...o.tabs],[l]=c.splice(s,1);c.splice(a,0,l),e(e=>({panels:{...e.panels,[i]:{...o,tabs:c}}})),r()},moveTab:(t,i,a,o)=>{if(i===a)return;let s=n().panels[i],c=n().panels[a];if(!s||!c)return;let u=s.tabs.find(e=>e.id===t);if(!u)return;let d=s.tabs.filter(e=>e.id!==t),f=s.tabHistory.filter(e=>e!==t),m=s.activeTabId===t?f[f.length-1]??d[d.length-1]?.id??null:s.activeTabId,h=[...c.tabs];o===void 0?h.push(u):h.splice(o,0,u),e(e=>{let n=e.grid.flat().length,r=i===`__dock__`||l(i);if(d.length===0&&n>1&&!r){let{[i]:n,...r}=e.panels;return{panels:{...r,[a]:{...c,tabs:h,activeTabId:t,tabHistory:Y(c.tabHistory,t)}},grid:p(e.grid,i),focusedPanelId:a}}return{focusedPanelId:a,panels:{...e.panels,[i]:{...s,tabs:d,activeTabId:m,tabHistory:f},[a]:{...c,tabs:h,activeTabId:t,tabHistory:Y(c.tabHistory,t)}}}}),r(),l(i)&&z(e,n,i)},splitPanel:(t,i,a,o)=>{let{grid:s,panels:c}=n(),l=n().isMobile(),u=c[a];if(!u)return!1;let f=u.tabs.find(e=>e.id===i);if(!f)return!1;let h=d(s,o??a);if(!h)return!1;let g=t===`left`||t===`right`,_=t===`up`||t===`down`;if(g&&(s[h.row]?.length??0)>=m(l)||_&&s.length>=3)return!1;let v=y([f],f.id);v.tabHistory=[f.id];let b=u.tabs.filter(e=>e.id!==i),x=u.tabHistory.filter(e=>e!==i),S=u.activeTabId===i?x[x.length-1]??b[b.length-1]?.id??null:u.activeTabId,C;if(g)C=s.map((e,n)=>{if(n!==h.row)return e;let r=[...e],i=t===`right`?h.col+1:h.col;return r.splice(i,0,v.id),r});else{C=[...s];let e=t===`down`?h.row+1:h.row;C.splice(e,0,[v.id])}return e(e=>{let t=e.grid.flat().length,n={...e.panels,[v.id]:v};if(b.length===0&&t>1){let{[a]:e,...t}=n;n=t,C=p(C,a)}else n[a]={...u,tabs:b,activeTabId:S,tabHistory:x};return{panels:n,grid:C,focusedPanelId:v.id}}),r(),!0},closePanel:t=>{let{panels:i,grid:a}=n();if(a.flat().length<=1)return;let o=i[t];if(!o)return;d(a,t);let s=a.flat(),c=s.indexOf(t),l=c>0?s[c-1]:s[1],u=i[l];u&&(e(e=>{let{[t]:n,...r}=e.panels,i=[...u.tabs,...o.tabs],a=u.activeTabId??o.activeTabId;return{panels:{...r,[l]:{...u,tabs:i,activeTabId:a,tabHistory:[...u.tabHistory,...o.tabHistory]}},grid:p(e.grid,t),focusedPanelId:l}}),r())},getPanelForTab:e=>i(e),isMobile:()=>typeof window<`u`&&window.innerWidth<768}});function $(e){let t=Q.getState();if(e?.type!==`chat`||e.metadata?.providerPending)return;let n=e.projectId??e.metadata?.projectName??t.currentProject,r=e.metadata?.providerId??`claude`;r!==`default`&&(!n||t.lastFocusedChatProviders[n]===r||Q.setState({lastFocusedChatProviders:{...t.lastFocusedChatProviders,[n]:r}}))}Q.subscribe((e,t)=>{let n=e.panels[e.focusedPanelId],r=n?.tabs.find(e=>e.id===n.activeTabId),i=t.panels[e.focusedPanelId],a=i?.tabs.find(e=>e.id===i.activeTabId);r?.id===a?.id&&r?.metadata?.providerId===a?.metadata?.providerId&&e.currentProject===t.currentProject||$(r)});export{R as i,K as n,G as r,Q as t};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./panel-store-BJhazigC.js";function t(t,r){let i=e.getState(),a=i.getPanelForTab(t)?.tabs.find(e=>e.id===t)?.metadata;i.updateTab(t,{metadata:n(a,r)})}function n(e,t){return{...e,...t}}function r(t){return e.getState().getPanelForTab(t)?.tabs.find(e=>e.id===t)?.metadata}export{t as n,r as t};
|