@hienlh/ppm 0.23.20 → 0.23.22
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 +26 -0
- package/CLAUDE.md +3 -2
- package/assets/skills/ppm/SKILL.md +1 -1
- package/assets/skills/ppm/references/http-api.md +1 -1
- package/dist/web/assets/{accounts-settings-section-BTga1zwH.js → accounts-settings-section-CiNmIj02.js} +1 -1
- package/dist/web/assets/accounts-settings-section-CiNmIj02.js.br +0 -0
- package/dist/web/assets/accounts-settings-section-CiNmIj02.js.gz +0 -0
- package/dist/web/assets/{agent-session-sheet-Q3kasbrZ.js → agent-session-sheet-DRR36PDA.js} +2 -2
- package/dist/web/assets/agent-session-sheet-DRR36PDA.js.br +0 -0
- package/dist/web/assets/agent-session-sheet-DRR36PDA.js.gz +0 -0
- package/dist/web/assets/{agent-session-window-content-UNuEprIK.js → agent-session-window-content-DMhy16BM.js} +1 -1
- package/dist/web/assets/agent-session-window-content-DMhy16BM.js.br +0 -0
- package/dist/web/assets/agent-session-window-content-DMhy16BM.js.gz +0 -0
- package/dist/web/assets/{ai-resource-editor-BEwA6Do0.js → ai-resource-editor-BG8boPw7.js} +1 -1
- package/dist/web/assets/ai-resource-editor-BG8boPw7.js.br +0 -0
- package/dist/web/assets/ai-resource-editor-BG8boPw7.js.gz +0 -0
- package/dist/web/assets/{ai-settings-section-DVKJPM0n.js → ai-settings-section-DMGM1hYx.js} +1 -1
- package/dist/web/assets/ai-settings-section-DMGM1hYx.js.br +0 -0
- package/dist/web/assets/ai-settings-section-DMGM1hYx.js.gz +0 -0
- package/dist/web/assets/{ai-settings-section-DlfY5lFT.js → ai-settings-section-De5dYWlC.js} +1 -1
- package/dist/web/assets/{android-tab-BNa6R9fV.js → android-tab-lHDxD93G.js} +1 -1
- package/dist/web/assets/android-tab-lHDxD93G.js.br +0 -0
- package/dist/web/assets/android-tab-lHDxD93G.js.gz +0 -0
- package/dist/web/assets/{appearance-settings-section-CjWFwWNn.js → appearance-settings-section-DO-ZyoMj.js} +1 -1
- package/dist/web/assets/appearance-settings-section-DO-ZyoMj.js.br +0 -0
- package/dist/web/assets/appearance-settings-section-DO-ZyoMj.js.gz +0 -0
- package/dist/web/assets/{apps-panel-D4xjeMN9.js → apps-panel-CH-0CHYY.js} +1 -1
- package/dist/web/assets/apps-panel-CH-0CHYY.js.br +0 -0
- package/dist/web/assets/apps-panel-CH-0CHYY.js.gz +0 -0
- package/dist/web/assets/{branch-review-tab-BCW5294d.js → branch-review-tab-CdGtvekz.js} +1 -1
- package/dist/web/assets/branch-review-tab-CdGtvekz.js.br +0 -0
- package/dist/web/assets/branch-review-tab-CdGtvekz.js.gz +0 -0
- package/dist/web/assets/{chat-tab-BG0M1D3d.js → chat-tab-DMqWnFIo.js} +1 -1
- package/dist/web/assets/chat-tab-DMqWnFIo.js.br +0 -0
- package/dist/web/assets/chat-tab-DMqWnFIo.js.gz +0 -0
- package/dist/web/assets/{chat-tab-DsW93LTL.js → chat-tab-DzWpwPFb.js} +4 -4
- package/dist/web/assets/chat-tab-DzWpwPFb.js.br +0 -0
- package/dist/web/assets/chat-tab-DzWpwPFb.js.gz +0 -0
- package/dist/web/assets/{code-editor-AxLIpK-b.js → code-editor-BCv8ONNS.js} +4 -4
- package/dist/web/assets/code-editor-BCv8ONNS.js.br +0 -0
- package/dist/web/assets/code-editor-BCv8ONNS.js.gz +0 -0
- package/dist/web/assets/{codex-reset-credit-button-BnRmkBZu.js → codex-reset-credit-button-CGMbIHak.js} +1 -1
- package/dist/web/assets/codex-reset-credit-button-CGMbIHak.js.br +0 -0
- package/dist/web/assets/codex-reset-credit-button-CGMbIHak.js.gz +0 -0
- package/dist/web/assets/{conflict-editor-BwuNUPAK.js → conflict-editor-3WmzqBlW.js} +1 -1
- package/dist/web/assets/conflict-editor-3WmzqBlW.js.br +0 -0
- package/dist/web/assets/conflict-editor-3WmzqBlW.js.gz +0 -0
- package/dist/web/assets/{connection-form-tab-CM2o80eB.js → connection-form-tab-BoWucvAe.js} +1 -1
- package/dist/web/assets/connection-form-tab-BoWucvAe.js.br +0 -0
- package/dist/web/assets/connection-form-tab-BoWucvAe.js.gz +0 -0
- package/dist/web/assets/{csv-preview-C7ErHm4U.js → csv-preview-BCgGsy7F.js} +1 -1
- package/dist/web/assets/csv-preview-BCgGsy7F.js.br +0 -0
- package/dist/web/assets/csv-preview-BCgGsy7F.js.gz +0 -0
- package/dist/web/assets/{db-tab-parts-C8jbkfxO.js → db-tab-parts-o6QMHBbA.js} +1 -1
- package/dist/web/assets/db-tab-parts-o6QMHBbA.js.br +0 -0
- package/dist/web/assets/db-tab-parts-o6QMHBbA.js.gz +0 -0
- package/dist/web/assets/{design-settings-section-BcGEY4Zf.js → design-settings-section-seo6SdSk.js} +1 -1
- package/dist/web/assets/design-settings-section-seo6SdSk.js.br +0 -0
- package/dist/web/assets/design-settings-section-seo6SdSk.js.gz +0 -0
- package/dist/web/assets/{design-tab-BGPYNFvy.js → design-tab-B-f_b2LM.js} +1 -1
- package/dist/web/assets/design-tab-B-f_b2LM.js.br +0 -0
- package/dist/web/assets/design-tab-B-f_b2LM.js.gz +0 -0
- package/dist/web/assets/{designs-sidebar-panel-BgMj7xRm.js → designs-sidebar-panel-CVT_TQP7.js} +1 -1
- package/dist/web/assets/designs-sidebar-panel-CVT_TQP7.js.br +0 -0
- package/dist/web/assets/designs-sidebar-panel-CVT_TQP7.js.gz +0 -0
- package/dist/web/assets/{diff-viewer-BKJkesHk.js → diff-viewer-y9uBp_8u.js} +1 -1
- package/dist/web/assets/diff-viewer-y9uBp_8u.js.br +0 -0
- package/dist/web/assets/diff-viewer-y9uBp_8u.js.gz +0 -0
- package/dist/web/assets/{docx-preview-DD5oD_nL.js → docx-preview-Dn_x3Inm.js} +1 -1
- package/dist/web/assets/docx-preview-Dn_x3Inm.js.br +0 -0
- package/dist/web/assets/docx-preview-Dn_x3Inm.js.gz +0 -0
- package/dist/web/assets/{editor-dialog--07lKJxl.js → editor-dialog-BwNXSajD.js} +1 -1
- package/dist/web/assets/editor-dialog-BwNXSajD.js.br +0 -0
- package/dist/web/assets/editor-dialog-BwNXSajD.js.gz +0 -0
- package/dist/web/assets/{editor-language-service-51xjO5d3.js → editor-language-service-XA_TnPLN.js} +1 -1
- package/dist/web/assets/editor-language-service-XA_TnPLN.js.br +0 -0
- package/dist/web/assets/editor-language-service-XA_TnPLN.js.gz +0 -0
- package/dist/web/assets/{explorer-body-BXK5SjJQ.js → explorer-body-DukR7zM9.js} +1 -1
- package/dist/web/assets/explorer-body-DukR7zM9.js.br +0 -0
- package/dist/web/assets/explorer-body-DukR7zM9.js.gz +0 -0
- package/dist/web/assets/{explorer-window-content-DKXcCmuX.js → explorer-window-content-BjTZ44S3.js} +1 -1
- package/dist/web/assets/explorer-window-content-BjTZ44S3.js.br +0 -0
- package/dist/web/assets/explorer-window-content-BjTZ44S3.js.gz +0 -0
- package/dist/web/assets/{extension-manager-section-CTpQP6te.js → extension-manager-section-C4WD1BPQ.js} +1 -1
- package/dist/web/assets/extension-manager-section-C4WD1BPQ.js.br +0 -0
- package/dist/web/assets/extension-manager-section-C4WD1BPQ.js.gz +0 -0
- package/dist/web/assets/{extension-webview-COT-yLrM.js → extension-webview-CV2ujflc.js} +1 -1
- package/dist/web/assets/extension-webview-CV2ujflc.js.br +0 -0
- package/dist/web/assets/extension-webview-CV2ujflc.js.gz +0 -0
- package/dist/web/assets/{files-settings-section-CgVR0fqi.js → files-settings-section-hS5ixQ8o.js} +1 -1
- package/dist/web/assets/files-settings-section-hS5ixQ8o.js.br +0 -0
- package/dist/web/assets/files-settings-section-hS5ixQ8o.js.gz +0 -0
- package/dist/web/assets/{general-settings-section-BEMIbE4Y.js → general-settings-section-BnKYY0AA.js} +1 -1
- package/dist/web/assets/general-settings-section-BnKYY0AA.js.br +0 -0
- package/dist/web/assets/general-settings-section-BnKYY0AA.js.gz +0 -0
- package/dist/web/assets/{git-log-panel-Cp2174iI.js → git-log-panel-JiWfR5xv.js} +1 -1
- package/dist/web/assets/git-log-panel-JiWfR5xv.js.br +0 -0
- package/dist/web/assets/git-log-panel-JiWfR5xv.js.gz +0 -0
- package/dist/web/assets/{git-review-tab-CpMJ0qDi.js → git-review-tab-DgvcY__Q.js} +1 -1
- package/dist/web/assets/git-review-tab-DgvcY__Q.js.br +0 -0
- package/dist/web/assets/git-review-tab-DgvcY__Q.js.gz +0 -0
- package/dist/web/assets/{glide-data-grid-BAhwWUhO.js → glide-data-grid-r1MKxDjz.js} +1 -1
- package/dist/web/assets/glide-data-grid-r1MKxDjz.js.br +0 -0
- package/dist/web/assets/glide-data-grid-r1MKxDjz.js.gz +0 -0
- package/dist/web/assets/{grid-save-dialog-DmJhaWOl.js → grid-save-dialog-Fa0yA-Ep.js} +1 -1
- package/dist/web/assets/grid-save-dialog-Fa0yA-Ep.js.br +0 -0
- package/dist/web/assets/grid-save-dialog-Fa0yA-Ep.js.gz +0 -0
- package/dist/web/assets/{group-chat-tab-Bq7-Yegf.js → group-chat-tab-B2Q8yqSX.js} +1 -1
- package/dist/web/assets/group-chat-tab-B2Q8yqSX.js.br +0 -0
- package/dist/web/assets/group-chat-tab-B2Q8yqSX.js.gz +0 -0
- package/dist/web/assets/{impexp-tab-COx3Cvs7.js → impexp-tab-B8Ht4l32.js} +1 -1
- package/dist/web/assets/impexp-tab-B8Ht4l32.js.br +0 -0
- package/dist/web/assets/impexp-tab-B8Ht4l32.js.gz +0 -0
- package/dist/web/assets/{index-BGk8EFQb.js → index-BtAn_krv.js} +5 -5
- package/dist/web/assets/index-BtAn_krv.js.br +0 -0
- package/dist/web/assets/index-BtAn_krv.js.gz +0 -0
- package/dist/web/assets/{jira-watcher-section-BEPbsi62.js → jira-watcher-section--ibKZfBs.js} +1 -1
- package/dist/web/assets/{keybindings-store-DzcSIJUF.js → keybindings-store-Cwxl4tHv.js} +1 -1
- package/dist/web/assets/{keyboard-shortcuts-section-Bqg7AZiZ.js → keyboard-shortcuts-section-aoiLpWwf.js} +1 -1
- package/dist/web/assets/keyboard-shortcuts-section-aoiLpWwf.js.br +0 -0
- package/dist/web/assets/keyboard-shortcuts-section-aoiLpWwf.js.gz +0 -0
- package/dist/web/assets/{language-servers-section-CJ47DSIA.js → language-servers-section-BkGAezo6.js} +2 -2
- package/dist/web/assets/language-servers-section-BkGAezo6.js.br +0 -0
- package/dist/web/assets/language-servers-section-BkGAezo6.js.gz +0 -0
- package/dist/web/assets/{logs-app-BK-n-y_K.js → logs-app-DYgPtmjm.js} +1 -1
- package/dist/web/assets/logs-app-DYgPtmjm.js.br +0 -0
- package/dist/web/assets/logs-app-DYgPtmjm.js.gz +0 -0
- package/dist/web/assets/{logs-tab-B84EZJ1b.js → logs-tab-BbDosK63.js} +1 -1
- package/dist/web/assets/{logs-window-content-B1uN_3pN.js → logs-window-content-CEXAyv-f.js} +1 -1
- package/dist/web/assets/{lsp-client-DHSaAyJW.js → lsp-client-CIcphNmU.js} +1 -1
- package/dist/web/assets/lsp-client-CIcphNmU.js.br +0 -0
- package/dist/web/assets/lsp-client-CIcphNmU.js.gz +0 -0
- package/dist/web/assets/{markdown-renderer-BjDQUqT-.js → markdown-renderer-BNzQeoAO.js} +1 -1
- package/dist/web/assets/{markdown-renderer-CpxdNG0f.js → markdown-renderer-dk1w3goH.js} +1 -1
- package/dist/web/assets/markdown-renderer-dk1w3goH.js.br +0 -0
- package/dist/web/assets/markdown-renderer-dk1w3goH.js.gz +0 -0
- package/dist/web/assets/{mobile-explorer-sheet-BBwXGmXA.js → mobile-explorer-sheet-D4lPZQZc.js} +1 -1
- package/dist/web/assets/mobile-explorer-sheet-D4lPZQZc.js.br +0 -0
- package/dist/web/assets/mobile-explorer-sheet-D4lPZQZc.js.gz +0 -0
- package/dist/web/assets/{new-design-dialog-B_ZOvGhR.js → new-design-dialog-CIq7xspW.js} +1 -1
- package/dist/web/assets/new-design-dialog-CIq7xspW.js.br +0 -0
- package/dist/web/assets/new-design-dialog-CIq7xspW.js.gz +0 -0
- package/dist/web/assets/{notification-store-HuMqfadD.js → notification-store-Rv36noYX.js} +1 -1
- package/dist/web/assets/notifications-settings-section-CoWMtXCC.js +1 -0
- package/dist/web/assets/notifications-settings-section-CoWMtXCC.js.br +0 -0
- package/dist/web/assets/notifications-settings-section-CoWMtXCC.js.gz +0 -0
- package/dist/web/assets/{ppmbot-settings-section-JDvyI-gZ.js → ppmbot-settings-section-Ct0UwA6T.js} +1 -1
- package/dist/web/assets/ppmbot-settings-section-Ct0UwA6T.js.br +0 -0
- package/dist/web/assets/ppmbot-settings-section-Ct0UwA6T.js.gz +0 -0
- package/dist/web/assets/{problems-panel-Bsv_L6T2.js → problems-panel-D-HT-0PE.js} +1 -1
- package/dist/web/assets/problems-panel-D-HT-0PE.js.br +0 -0
- package/dist/web/assets/problems-panel-D-HT-0PE.js.gz +0 -0
- package/dist/web/assets/{process-table-3kZyWOJx.js → process-table-CXN0s4Pq.js} +1 -1
- package/dist/web/assets/process-table-CXN0s4Pq.js.br +0 -0
- package/dist/web/assets/process-table-CXN0s4Pq.js.gz +0 -0
- package/dist/web/assets/{proxy-settings-section-CYcmIp7W.js → proxy-settings-section-e6WWzP8n.js} +1 -1
- package/dist/web/assets/proxy-settings-section-e6WWzP8n.js.br +0 -0
- package/dist/web/assets/proxy-settings-section-e6WWzP8n.js.gz +0 -0
- package/dist/web/assets/{query-tab-CjrWnQUl.js → query-tab-C7C67t8F.js} +1 -1
- package/dist/web/assets/query-tab-C7C67t8F.js.br +0 -0
- package/dist/web/assets/query-tab-C7C67t8F.js.gz +0 -0
- package/dist/web/assets/{remote-access-settings-section-iQkakiVx.js → remote-access-settings-section-gGoATCF9.js} +1 -1
- package/dist/web/assets/remote-access-settings-section-gGoATCF9.js.br +0 -0
- package/dist/web/assets/remote-access-settings-section-gGoATCF9.js.gz +0 -0
- package/dist/web/assets/{remote-desktop-clipboard-notice-CFLnb7ML.js → remote-desktop-clipboard-notice-D5KjvMZx.js} +1 -1
- package/dist/web/assets/remote-desktop-clipboard-notice-D5KjvMZx.js.br +0 -0
- package/dist/web/assets/remote-desktop-clipboard-notice-D5KjvMZx.js.gz +0 -0
- package/dist/web/assets/{remote-desktop-mobile-sheet-C_-_-Nkz.js → remote-desktop-mobile-sheet-CY_DsGXZ.js} +2 -2
- package/dist/web/assets/remote-desktop-mobile-sheet-CY_DsGXZ.js.br +0 -0
- package/dist/web/assets/remote-desktop-mobile-sheet-CY_DsGXZ.js.gz +0 -0
- package/dist/web/assets/{remote-desktop-mobile-view-BnHSrind.js → remote-desktop-mobile-view-DdpI-RF8.js} +1 -1
- package/dist/web/assets/remote-desktop-mobile-view-DdpI-RF8.js.br +0 -0
- package/dist/web/assets/remote-desktop-mobile-view-DdpI-RF8.js.gz +0 -0
- package/dist/web/assets/{remote-desktop-readiness-gate-BGHJ7Sv6.js → remote-desktop-readiness-gate-WIyCCAv5.js} +1 -1
- package/dist/web/assets/remote-desktop-readiness-gate-WIyCCAv5.js.br +0 -0
- package/dist/web/assets/remote-desktop-readiness-gate-WIyCCAv5.js.gz +0 -0
- package/dist/web/assets/{remote-desktop-window-content-BBm1YwM8.js → remote-desktop-window-content-BMORZLZt.js} +1 -1
- package/dist/web/assets/remote-desktop-window-content-BMORZLZt.js.br +0 -0
- package/dist/web/assets/remote-desktop-window-content-BMORZLZt.js.gz +0 -0
- package/dist/web/assets/{rename-object-dialog-BLnF9xyn.js → rename-object-dialog-pIgWe_AL.js} +1 -1
- package/dist/web/assets/rename-object-dialog-pIgWe_AL.js.br +0 -0
- package/dist/web/assets/rename-object-dialog-pIgWe_AL.js.gz +0 -0
- package/dist/web/assets/{review-code-DG7sCIzr.js → review-code-oTNcTYlI.js} +1 -1
- package/dist/web/assets/review-code-oTNcTYlI.js.br +0 -0
- package/dist/web/assets/review-code-oTNcTYlI.js.gz +0 -0
- package/dist/web/assets/{save-as-dialog-KW7cErWh.js → save-as-dialog-CnPLGTaL.js} +1 -1
- package/dist/web/assets/save-as-dialog-CnPLGTaL.js.br +0 -0
- package/dist/web/assets/save-as-dialog-CnPLGTaL.js.gz +0 -0
- package/dist/web/assets/{schedules-settings-section-B4AV4ORv.js → schedules-settings-section-CREqHG_i.js} +1 -1
- package/dist/web/assets/schedules-settings-section-CREqHG_i.js.br +0 -0
- package/dist/web/assets/schedules-settings-section-CREqHG_i.js.gz +0 -0
- package/dist/web/assets/{session-review-tab-C5nPyBzo.js → session-review-tab-nFVJYYJH.js} +1 -1
- package/dist/web/assets/session-review-tab-nFVJYYJH.js.br +0 -0
- package/dist/web/assets/session-review-tab-nFVJYYJH.js.gz +0 -0
- package/dist/web/assets/{settings-body-xWSmRXUD.js → settings-body-DNzH0wOQ.js} +1 -1
- package/dist/web/assets/settings-body-DNzH0wOQ.js.br +0 -0
- package/dist/web/assets/settings-body-DNzH0wOQ.js.gz +0 -0
- package/dist/web/assets/{settings-rows-ChKBHk07.js → settings-rows-D02_4sDY.js} +1 -1
- package/dist/web/assets/settings-rows-D02_4sDY.js.br +0 -0
- package/dist/web/assets/settings-rows-D02_4sDY.js.gz +0 -0
- package/dist/web/assets/settings-section-content-BYW_9mHv.js +1 -0
- package/dist/web/assets/{settings-section-content-DdVdyPVX.js → settings-section-content-DWopMfmq.js} +2 -2
- package/dist/web/assets/settings-section-content-DWopMfmq.js.br +0 -0
- package/dist/web/assets/settings-section-content-DWopMfmq.js.gz +0 -0
- package/dist/web/assets/{settings-tab-CzaBBNoj.js → settings-tab-Cg0v5kO7.js} +1 -1
- package/dist/web/assets/{settings-window-content-DAvWSu_O.js → settings-window-content-CqhwxJJn.js} +1 -1
- package/dist/web/assets/{slash-command-picker-Cn2Fdz2p.js → slash-command-picker-Bcizxvbh.js} +1 -1
- package/dist/web/assets/slash-command-picker-Bcizxvbh.js.br +0 -0
- package/dist/web/assets/slash-command-picker-Bcizxvbh.js.gz +0 -0
- package/dist/web/assets/{sql-object-tab-_mPRCvD9.js → sql-object-tab-b1Z2zVBm.js} +1 -1
- package/dist/web/assets/sql-object-tab-b1Z2zVBm.js.br +0 -0
- package/dist/web/assets/sql-object-tab-b1Z2zVBm.js.gz +0 -0
- package/dist/web/assets/{sqlite-viewer-B8VZt-mA.js → sqlite-viewer-DhPv28tq.js} +1 -1
- package/dist/web/assets/sqlite-viewer-DhPv28tq.js.br +0 -0
- package/dist/web/assets/sqlite-viewer-DhPv28tq.js.gz +0 -0
- package/dist/web/assets/{structure-save-dialog-Lcst7kAl.js → structure-save-dialog-sGUpqs8D.js} +1 -1
- package/dist/web/assets/structure-save-dialog-sGUpqs8D.js.br +0 -0
- package/dist/web/assets/structure-save-dialog-sGUpqs8D.js.gz +0 -0
- package/dist/web/assets/{structure-tab-ljJCzxUe.js → structure-tab-Bo2OmDOc.js} +1 -1
- package/dist/web/assets/structure-tab-Bo2OmDOc.js.br +0 -0
- package/dist/web/assets/structure-tab-Bo2OmDOc.js.gz +0 -0
- package/dist/web/assets/{system-monitor-body-CTi5xUZz.js → system-monitor-body-C475Et9u.js} +2 -2
- package/dist/web/assets/system-monitor-body-C475Et9u.js.br +0 -0
- package/dist/web/assets/system-monitor-body-C475Et9u.js.gz +0 -0
- package/dist/web/assets/{system-monitor-tab-DeL2YoXO.js → system-monitor-tab-Cm52yoW8.js} +1 -1
- package/dist/web/assets/{system-monitor-window-content-DK-rQIZh.js → system-monitor-window-content-YYsGHxZF.js} +1 -1
- package/dist/web/assets/{tab-host-window-content-CG0vPTc_.js → tab-host-window-content-BKI6QoDa.js} +1 -1
- package/dist/web/assets/tab-host-window-content-BKI6QoDa.js.br +0 -0
- package/dist/web/assets/tab-host-window-content-BKI6QoDa.js.gz +0 -0
- package/dist/web/assets/{table-tab-CTZ3nCWV.js → table-tab-D-nKWMJR.js} +1 -1
- package/dist/web/assets/table-tab-D-nKWMJR.js.br +0 -0
- package/dist/web/assets/table-tab-D-nKWMJR.js.gz +0 -0
- package/dist/web/assets/{telegram-bot-token-field-DF7zq7_h.js → telegram-bot-token-field-BeNS2X2k.js} +1 -1
- package/dist/web/assets/telegram-bot-token-field-BeNS2X2k.js.br +0 -0
- package/dist/web/assets/telegram-bot-token-field-BeNS2X2k.js.gz +0 -0
- package/dist/web/assets/{terminal-tab-B_jECWTH.js → terminal-tab-BbP753Ab.js} +1 -1
- package/dist/web/assets/terminal-tab-BbP753Ab.js.br +0 -0
- package/dist/web/assets/terminal-tab-BbP753Ab.js.gz +0 -0
- package/dist/web/assets/{tool-cards-CsD_VXcG.js → tool-cards-Dh8Ekn2W.js} +2 -2
- package/dist/web/assets/tool-cards-Dh8Ekn2W.js.br +0 -0
- package/dist/web/assets/tool-cards-Dh8Ekn2W.js.gz +0 -0
- package/dist/web/assets/{tools-settings-section-DbBr0Hnr.js → tools-settings-section-DGZRIULE.js} +1 -1
- package/dist/web/assets/tools-settings-section-DGZRIULE.js.br +0 -0
- package/dist/web/assets/tools-settings-section-DGZRIULE.js.gz +0 -0
- package/dist/web/assets/{use-inline-blame-BA2mrMxT.js → use-inline-blame-BxwM-Wkj.js} +1 -1
- package/dist/web/assets/use-inline-blame-BxwM-Wkj.js.br +0 -0
- package/dist/web/assets/use-inline-blame-BxwM-Wkj.js.gz +0 -0
- package/dist/web/assets/{use-lsp-ChbrzwvS.js → use-lsp-BqvwRKmM.js} +1 -1
- package/dist/web/assets/use-lsp-BqvwRKmM.js.br +0 -0
- package/dist/web/assets/use-lsp-BqvwRKmM.js.gz +0 -0
- package/dist/web/assets/{use-monaco-theme-C3_wfz5J.js → use-monaco-theme-DU0EpDHH.js} +1 -1
- package/dist/web/assets/{use-process-kill-C-YetnGd.js → use-process-kill-CVN_c4KF.js} +1 -1
- package/dist/web/assets/use-process-kill-CVN_c4KF.js.br +0 -0
- package/dist/web/assets/use-process-kill-CVN_c4KF.js.gz +0 -0
- package/dist/web/assets/{use-sql-schema-info-pKwLD9wk.js → use-sql-schema-info-C0wBmR6-.js} +1 -1
- package/dist/web/assets/use-sql-schema-info-C0wBmR6-.js.br +0 -0
- package/dist/web/assets/use-sql-schema-info-C0wBmR6-.js.gz +0 -0
- package/dist/web/assets/{use-websocket-BFnUq0-x.js → use-websocket-K0OUXbbY.js} +1 -1
- package/dist/web/assets/{web-preview-tab-DGLPuZYM.js → web-preview-tab-DOgLv8Gt.js} +1 -1
- package/dist/web/assets/web-preview-tab-DOgLv8Gt.js.br +0 -0
- package/dist/web/assets/web-preview-tab-DOgLv8Gt.js.gz +0 -0
- package/dist/web/index.html +1 -1
- 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/deployment-guide.md +39 -0
- package/package.json +1 -1
- package/scripts/mem-diag-report.ts +31 -0
- package/src/providers/registry.ts +10 -1
- package/src/server/index.ts +7 -6
- package/src/server/middleware/access-log.ts +3 -0
- package/src/server/middleware/cors-headers.ts +44 -0
- package/src/server/routes/chat.ts +4 -1
- package/src/server/routes/database-impexp.ts +1 -1
- package/src/server/routes/design-preview.ts +2 -2
- package/src/server/ws/chat.ts +3 -0
- package/src/services/compact-segment.ts +14 -19
- package/src/services/database/grid-export-tickets.ts +6 -2
- package/src/services/database/impexp/readers/file-text.ts +6 -3
- package/src/services/edge-forwarder.ts +12 -0
- package/src/services/file-chunks.ts +39 -0
- package/src/services/file-lines.ts +10 -17
- package/src/services/lsp/lsp-manager.ts +3 -0
- package/src/services/memory-diagnostics-native.ts +110 -0
- package/src/services/memory-diagnostics-report.ts +200 -0
- package/src/services/memory-diagnostics-requests.ts +95 -0
- package/src/services/memory-diagnostics-spawns.ts +242 -0
- package/src/services/memory-diagnostics.ts +121 -23
- package/src/services/memory-watchdog.ts +185 -0
- package/src/services/nested-subagent-spy.ts +3 -0
- package/src/services/process-thread-snapshot.ts +12 -2
- package/src/services/process-tree-memory.ts +161 -0
- package/src/services/read-lines.ts +16 -27
- package/src/services/supervisor.ts +1 -0
- package/src/services/terminal.service.ts +8 -0
- package/src/services/transcript-images-file.ts +7 -11
- package/src/web/components/chat/question-card.tsx +10 -4
- package/src/web/components/settings/notifications-settings-section.tsx +14 -1
- package/src/web/lib/web-push-client.ts +35 -5
- package/src/web/lib/web-push-support.ts +57 -4
- package/dist/web/assets/accounts-settings-section-BTga1zwH.js.br +0 -0
- package/dist/web/assets/accounts-settings-section-BTga1zwH.js.gz +0 -0
- package/dist/web/assets/agent-session-sheet-Q3kasbrZ.js.br +0 -0
- package/dist/web/assets/agent-session-sheet-Q3kasbrZ.js.gz +0 -0
- package/dist/web/assets/agent-session-window-content-UNuEprIK.js.br +0 -0
- package/dist/web/assets/agent-session-window-content-UNuEprIK.js.gz +0 -0
- package/dist/web/assets/ai-resource-editor-BEwA6Do0.js.br +0 -0
- package/dist/web/assets/ai-resource-editor-BEwA6Do0.js.gz +0 -0
- package/dist/web/assets/ai-settings-section-DVKJPM0n.js.br +0 -0
- package/dist/web/assets/ai-settings-section-DVKJPM0n.js.gz +0 -0
- package/dist/web/assets/android-tab-BNa6R9fV.js.br +0 -0
- package/dist/web/assets/android-tab-BNa6R9fV.js.gz +0 -0
- package/dist/web/assets/appearance-settings-section-CjWFwWNn.js.br +0 -0
- package/dist/web/assets/appearance-settings-section-CjWFwWNn.js.gz +0 -0
- package/dist/web/assets/apps-panel-D4xjeMN9.js.br +0 -0
- package/dist/web/assets/apps-panel-D4xjeMN9.js.gz +0 -0
- package/dist/web/assets/branch-review-tab-BCW5294d.js.br +0 -0
- package/dist/web/assets/branch-review-tab-BCW5294d.js.gz +0 -0
- package/dist/web/assets/chat-tab-BG0M1D3d.js.br +0 -3
- package/dist/web/assets/chat-tab-BG0M1D3d.js.gz +0 -0
- package/dist/web/assets/chat-tab-DsW93LTL.js.br +0 -0
- package/dist/web/assets/chat-tab-DsW93LTL.js.gz +0 -0
- package/dist/web/assets/code-editor-AxLIpK-b.js.br +0 -0
- package/dist/web/assets/code-editor-AxLIpK-b.js.gz +0 -0
- package/dist/web/assets/codex-reset-credit-button-BnRmkBZu.js.br +0 -0
- package/dist/web/assets/codex-reset-credit-button-BnRmkBZu.js.gz +0 -0
- package/dist/web/assets/conflict-editor-BwuNUPAK.js.br +0 -0
- package/dist/web/assets/conflict-editor-BwuNUPAK.js.gz +0 -0
- package/dist/web/assets/connection-form-tab-CM2o80eB.js.br +0 -0
- package/dist/web/assets/connection-form-tab-CM2o80eB.js.gz +0 -0
- package/dist/web/assets/csv-preview-C7ErHm4U.js.br +0 -0
- package/dist/web/assets/csv-preview-C7ErHm4U.js.gz +0 -0
- package/dist/web/assets/db-tab-parts-C8jbkfxO.js.br +0 -0
- package/dist/web/assets/db-tab-parts-C8jbkfxO.js.gz +0 -0
- package/dist/web/assets/design-settings-section-BcGEY4Zf.js.br +0 -0
- package/dist/web/assets/design-settings-section-BcGEY4Zf.js.gz +0 -0
- package/dist/web/assets/design-tab-BGPYNFvy.js.br +0 -0
- package/dist/web/assets/design-tab-BGPYNFvy.js.gz +0 -0
- package/dist/web/assets/designs-sidebar-panel-BgMj7xRm.js.br +0 -0
- package/dist/web/assets/designs-sidebar-panel-BgMj7xRm.js.gz +0 -0
- package/dist/web/assets/diff-viewer-BKJkesHk.js.br +0 -0
- package/dist/web/assets/diff-viewer-BKJkesHk.js.gz +0 -0
- package/dist/web/assets/docx-preview-DD5oD_nL.js.br +0 -0
- package/dist/web/assets/docx-preview-DD5oD_nL.js.gz +0 -0
- package/dist/web/assets/editor-dialog--07lKJxl.js.br +0 -0
- package/dist/web/assets/editor-dialog--07lKJxl.js.gz +0 -0
- package/dist/web/assets/editor-language-service-51xjO5d3.js.br +0 -0
- package/dist/web/assets/editor-language-service-51xjO5d3.js.gz +0 -0
- package/dist/web/assets/explorer-body-BXK5SjJQ.js.br +0 -0
- package/dist/web/assets/explorer-body-BXK5SjJQ.js.gz +0 -0
- package/dist/web/assets/explorer-window-content-DKXcCmuX.js.br +0 -0
- package/dist/web/assets/explorer-window-content-DKXcCmuX.js.gz +0 -0
- package/dist/web/assets/extension-manager-section-CTpQP6te.js.br +0 -0
- package/dist/web/assets/extension-manager-section-CTpQP6te.js.gz +0 -0
- package/dist/web/assets/extension-webview-COT-yLrM.js.br +0 -0
- package/dist/web/assets/extension-webview-COT-yLrM.js.gz +0 -0
- package/dist/web/assets/files-settings-section-CgVR0fqi.js.br +0 -0
- package/dist/web/assets/files-settings-section-CgVR0fqi.js.gz +0 -0
- package/dist/web/assets/general-settings-section-BEMIbE4Y.js.br +0 -0
- package/dist/web/assets/general-settings-section-BEMIbE4Y.js.gz +0 -0
- package/dist/web/assets/git-log-panel-Cp2174iI.js.br +0 -0
- package/dist/web/assets/git-log-panel-Cp2174iI.js.gz +0 -0
- package/dist/web/assets/git-review-tab-CpMJ0qDi.js.br +0 -0
- package/dist/web/assets/git-review-tab-CpMJ0qDi.js.gz +0 -0
- package/dist/web/assets/glide-data-grid-BAhwWUhO.js.br +0 -0
- package/dist/web/assets/glide-data-grid-BAhwWUhO.js.gz +0 -0
- package/dist/web/assets/grid-save-dialog-DmJhaWOl.js.br +0 -0
- package/dist/web/assets/grid-save-dialog-DmJhaWOl.js.gz +0 -0
- package/dist/web/assets/group-chat-tab-Bq7-Yegf.js.br +0 -0
- package/dist/web/assets/group-chat-tab-Bq7-Yegf.js.gz +0 -0
- package/dist/web/assets/impexp-tab-COx3Cvs7.js.br +0 -0
- package/dist/web/assets/impexp-tab-COx3Cvs7.js.gz +0 -0
- package/dist/web/assets/index-BGk8EFQb.js.br +0 -0
- package/dist/web/assets/index-BGk8EFQb.js.gz +0 -0
- package/dist/web/assets/keyboard-shortcuts-section-Bqg7AZiZ.js.br +0 -0
- package/dist/web/assets/keyboard-shortcuts-section-Bqg7AZiZ.js.gz +0 -0
- package/dist/web/assets/language-servers-section-CJ47DSIA.js.br +0 -0
- package/dist/web/assets/language-servers-section-CJ47DSIA.js.gz +0 -0
- package/dist/web/assets/logs-app-BK-n-y_K.js.br +0 -0
- package/dist/web/assets/logs-app-BK-n-y_K.js.gz +0 -0
- package/dist/web/assets/lsp-client-DHSaAyJW.js.br +0 -0
- package/dist/web/assets/lsp-client-DHSaAyJW.js.gz +0 -0
- package/dist/web/assets/markdown-renderer-CpxdNG0f.js.br +0 -0
- package/dist/web/assets/markdown-renderer-CpxdNG0f.js.gz +0 -0
- package/dist/web/assets/mobile-explorer-sheet-BBwXGmXA.js.br +0 -0
- package/dist/web/assets/mobile-explorer-sheet-BBwXGmXA.js.gz +0 -0
- package/dist/web/assets/new-design-dialog-B_ZOvGhR.js.br +0 -0
- package/dist/web/assets/new-design-dialog-B_ZOvGhR.js.gz +0 -0
- package/dist/web/assets/notifications-settings-section-D7fIVFHe.js +0 -1
- package/dist/web/assets/notifications-settings-section-D7fIVFHe.js.br +0 -0
- package/dist/web/assets/notifications-settings-section-D7fIVFHe.js.gz +0 -0
- package/dist/web/assets/ppmbot-settings-section-JDvyI-gZ.js.br +0 -0
- package/dist/web/assets/ppmbot-settings-section-JDvyI-gZ.js.gz +0 -0
- package/dist/web/assets/problems-panel-Bsv_L6T2.js.br +0 -0
- package/dist/web/assets/problems-panel-Bsv_L6T2.js.gz +0 -0
- package/dist/web/assets/process-table-3kZyWOJx.js.br +0 -0
- package/dist/web/assets/process-table-3kZyWOJx.js.gz +0 -0
- package/dist/web/assets/proxy-settings-section-CYcmIp7W.js.br +0 -0
- package/dist/web/assets/proxy-settings-section-CYcmIp7W.js.gz +0 -0
- package/dist/web/assets/query-tab-CjrWnQUl.js.br +0 -0
- package/dist/web/assets/query-tab-CjrWnQUl.js.gz +0 -0
- package/dist/web/assets/remote-access-settings-section-iQkakiVx.js.br +0 -0
- package/dist/web/assets/remote-access-settings-section-iQkakiVx.js.gz +0 -0
- package/dist/web/assets/remote-desktop-clipboard-notice-CFLnb7ML.js.br +0 -0
- package/dist/web/assets/remote-desktop-clipboard-notice-CFLnb7ML.js.gz +0 -0
- package/dist/web/assets/remote-desktop-mobile-sheet-C_-_-Nkz.js.br +0 -0
- package/dist/web/assets/remote-desktop-mobile-sheet-C_-_-Nkz.js.gz +0 -0
- package/dist/web/assets/remote-desktop-mobile-view-BnHSrind.js.br +0 -0
- package/dist/web/assets/remote-desktop-mobile-view-BnHSrind.js.gz +0 -0
- package/dist/web/assets/remote-desktop-readiness-gate-BGHJ7Sv6.js.br +0 -0
- package/dist/web/assets/remote-desktop-readiness-gate-BGHJ7Sv6.js.gz +0 -0
- package/dist/web/assets/remote-desktop-window-content-BBm1YwM8.js.br +0 -0
- package/dist/web/assets/remote-desktop-window-content-BBm1YwM8.js.gz +0 -0
- package/dist/web/assets/rename-object-dialog-BLnF9xyn.js.br +0 -0
- package/dist/web/assets/rename-object-dialog-BLnF9xyn.js.gz +0 -0
- package/dist/web/assets/review-code-DG7sCIzr.js.br +0 -0
- package/dist/web/assets/review-code-DG7sCIzr.js.gz +0 -0
- package/dist/web/assets/save-as-dialog-KW7cErWh.js.br +0 -0
- package/dist/web/assets/save-as-dialog-KW7cErWh.js.gz +0 -0
- package/dist/web/assets/schedules-settings-section-B4AV4ORv.js.br +0 -0
- package/dist/web/assets/schedules-settings-section-B4AV4ORv.js.gz +0 -0
- package/dist/web/assets/session-review-tab-C5nPyBzo.js.br +0 -0
- package/dist/web/assets/session-review-tab-C5nPyBzo.js.gz +0 -0
- package/dist/web/assets/settings-body-xWSmRXUD.js.br +0 -0
- package/dist/web/assets/settings-body-xWSmRXUD.js.gz +0 -0
- package/dist/web/assets/settings-rows-ChKBHk07.js.br +0 -0
- package/dist/web/assets/settings-rows-ChKBHk07.js.gz +0 -0
- package/dist/web/assets/settings-section-content-BOh2jaWV.js +0 -1
- package/dist/web/assets/settings-section-content-DdVdyPVX.js.br +0 -0
- package/dist/web/assets/settings-section-content-DdVdyPVX.js.gz +0 -0
- package/dist/web/assets/slash-command-picker-Cn2Fdz2p.js.br +0 -0
- package/dist/web/assets/slash-command-picker-Cn2Fdz2p.js.gz +0 -0
- package/dist/web/assets/sql-object-tab-_mPRCvD9.js.br +0 -0
- package/dist/web/assets/sql-object-tab-_mPRCvD9.js.gz +0 -0
- package/dist/web/assets/sqlite-viewer-B8VZt-mA.js.br +0 -0
- package/dist/web/assets/sqlite-viewer-B8VZt-mA.js.gz +0 -0
- package/dist/web/assets/structure-save-dialog-Lcst7kAl.js.br +0 -0
- package/dist/web/assets/structure-save-dialog-Lcst7kAl.js.gz +0 -0
- package/dist/web/assets/structure-tab-ljJCzxUe.js.br +0 -0
- package/dist/web/assets/structure-tab-ljJCzxUe.js.gz +0 -0
- package/dist/web/assets/system-monitor-body-CTi5xUZz.js.br +0 -0
- package/dist/web/assets/system-monitor-body-CTi5xUZz.js.gz +0 -0
- package/dist/web/assets/tab-host-window-content-CG0vPTc_.js.br +0 -0
- package/dist/web/assets/tab-host-window-content-CG0vPTc_.js.gz +0 -0
- package/dist/web/assets/table-tab-CTZ3nCWV.js.br +0 -0
- package/dist/web/assets/table-tab-CTZ3nCWV.js.gz +0 -0
- package/dist/web/assets/telegram-bot-token-field-DF7zq7_h.js.br +0 -0
- package/dist/web/assets/telegram-bot-token-field-DF7zq7_h.js.gz +0 -0
- package/dist/web/assets/terminal-tab-B_jECWTH.js.br +0 -0
- package/dist/web/assets/terminal-tab-B_jECWTH.js.gz +0 -0
- package/dist/web/assets/tool-cards-CsD_VXcG.js.br +0 -0
- package/dist/web/assets/tool-cards-CsD_VXcG.js.gz +0 -0
- package/dist/web/assets/tools-settings-section-DbBr0Hnr.js.br +0 -0
- package/dist/web/assets/tools-settings-section-DbBr0Hnr.js.gz +0 -0
- package/dist/web/assets/use-inline-blame-BA2mrMxT.js.br +0 -0
- package/dist/web/assets/use-inline-blame-BA2mrMxT.js.gz +0 -0
- package/dist/web/assets/use-lsp-ChbrzwvS.js.br +0 -0
- package/dist/web/assets/use-lsp-ChbrzwvS.js.gz +0 -0
- package/dist/web/assets/use-process-kill-C-YetnGd.js.br +0 -0
- package/dist/web/assets/use-process-kill-C-YetnGd.js.gz +0 -0
- package/dist/web/assets/use-sql-schema-info-pKwLD9wk.js.br +0 -0
- package/dist/web/assets/use-sql-schema-info-pKwLD9wk.js.gz +0 -0
- package/dist/web/assets/web-preview-tab-DGLPuZYM.js.br +0 -0
- package/dist/web/assets/web-preview-tab-DGLPuZYM.js.gz +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/edit-diff-preview-DyWUMlkI.js","assets/rolldown-runtime-C5c2KzVm.js","assets/vendor-markdown-C-P1aR4p.js","assets/libesm-B6LsX5wH.js","assets/markdown-renderer-
|
|
2
|
-
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,$n as i,A as a,Br as o,D as s,Dn as c,E as l,Er as u,Et as d,Fn as f,Ft as p,G as m,I as h,K as g,Kr as _,L as v,M as y,Mn as b,Mr as x,Nn as S,Or as C,P as ee,Q as w,S as te,Ur as ne,V as T,Vn as E,Vr as re,Yr as ie,Yt as ae,Zr as oe,_t as D,ar as O,at as se,bn as ce,br as le,dn as k,en as ue,g as de,gr as fe,gt as pe,hr as me,ir as he,jr as ge,k as _e,li as ve,ln as A,n as j,nn as M,oi as N,or as ye,pi as be,qr as xe,rn as Se,t as Ce,ti as we,tr as Te,tt as P,ui as F,ut as I,w as Ee,wr as De,xn as L,xr as R,yn as Oe,yt as ke,z as Ae}from"./icons-BwyIKaTT.js";import{t as je}from"./createLucideIcon-D9_fdOKS.js";import{t as z}from"./file-diff-CcDhJkXB.js";import{a as Me,d as B,f as V,k as H,o as U,p as Ne,r as W,u as G,v as Pe}from"./api-client-xQDlhUTu.js";import{t as Fe}from"./settings-store-B4mLp19V.js";import{t as K}from"./preload-helper-CM8YhcCa.js";import{n as q,r as Ie,t as Le}from"./utils-Bslrbb-G.js";import{n as Re,r as ze,t as Be}from"./panel-store-BJhazigC.js";import{i as Ve}from"./project-store-BLGl9IAO.js";import{a as He,c as Ue,d as We,i as Ge,l as Ke,o as qe,r as Je,s as Ye,t as Xe,u as Ze}from"./session-list-sync-triggers-DtJI5KF0.js";import{t as Qe}from"./tab-store-D5I52eLN.js";import{t as $e}from"./format-date-CSHaU2wN.js";import{a as et,i as tt,n as J,r as nt,s as rt,t as it}from"./chat-preparation-cache-190LLyy7.js";import{o as Y}from"./file-store-BQ41vIs5.js";import{n as X}from"./use-is-mobile-VRV9eZy1.js";import{t as at}from"./open-settings-EXR4zoZG.js";import{u as ot}from"./onboarding-quick-orientation-CTHtIRib.js";import{r as st}from"./clipboard-D-VCry-F.js";import{t as ct}from"./button-C9ZXWb3b.js";import{n as lt,o as ut,t as dt}from"./dialog-Dn_2tuYa.js";import{n as ft}from"./file-icons-JInFtBVl.js";import{n as pt,t as mt}from"./patch-tab-metadata-C92YkrRX.js";import{i as ht,m as gt,r as _t,t as vt}from"./dropdown-menu-BQidk_OJ.js";import{t as Z}from"./mobile-bottom-sheet-DArbIyrD.js";import{t as yt}from"./input-C3oVNCMq.js";import{n as bt}from"./db-types-CNhENouW.js";import{Ai as xt,B as St,F as Ct,Fn as wt,G as Tt,Gi as Et,H as Dt,I as Ot,K as kt,Mi as At,N as jt,P as Mt,Pi as Nt,Ri as Pt,Sn as Ft,U as It,Ui as Lt,W as Rt,Wi as zt,Xr as Bt,ci as Vt,in as Ht,ji as Ut,ki as Wt,li as Gt,r as Kt,t as qt,zi as Jt}from"./index-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/edit-diff-preview-DyWUMlkI.js","assets/rolldown-runtime-C5c2KzVm.js","assets/vendor-markdown-C-P1aR4p.js","assets/libesm-B6LsX5wH.js","assets/markdown-renderer-BNzQeoAO.js","assets/vendor-ui-BTSIXzhZ.js","assets/lib-5Chotbwm.js","assets/markdown-renderer-dk1w3goH.js","assets/index-BtAn_krv.js","assets/preload-helper-CM8YhcCa.js","assets/button-C9ZXWb3b.js","assets/utils-Bslrbb-G.js","assets/createLucideIcon-D9_fdOKS.js","assets/file-diff-CcDhJkXB.js","assets/git-commit-horizontal-BPdj2L1i.js","assets/api-client-xQDlhUTu.js","assets/react-BZ0kba1-.js","assets/open-db-tabs-CtWIWHOa.js","assets/window-store-DqX_qmkQ.js","assets/panel-store-BJhazigC.js","assets/session-list-sync-triggers-DtJI5KF0.js","assets/project-store-BLGl9IAO.js","assets/project-framework-store-DwLxaRan.js","assets/explorer-model-BtJN4MZ9.js","assets/db-sidebar-reveal-_qw0CliT.js","assets/settings-store-B4mLp19V.js","assets/use-is-mobile-VRV9eZy1.js","assets/db-types-CNhENouW.js","assets/tab-store-D5I52eLN.js","assets/use-db-driver-installed-anzWkGi5.js","assets/impexp-state-BWKOuRGj.js","assets/file-store-BQ41vIs5.js","assets/sql-identifiers-DDISwQor.js","assets/db-explorer-store-BmpvDHz6.js","assets/onboarding-quick-orientation-CTHtIRib.js","assets/dialog-Dn_2tuYa.js","assets/portal-container-context-NBi-KGK0.js","assets/icons-BwyIKaTT.js","assets/format-file-meta-DdYtk07C.js","assets/fs-api-CFtQzsIJ.js","assets/open-settings-EXR4zoZG.js","assets/settings-categories-Ajj4ui27.js","assets/adaptive-context-menu-C4jNSORA.js","assets/context-menu-BCuZYfWC.js","assets/mobile-bottom-sheet-DArbIyrD.js","assets/use-visual-viewport-MmugpRg-.js","assets/dropdown-menu-BQidk_OJ.js","assets/input-C3oVNCMq.js","assets/scroll-area-DOlQJGZp.js","assets/start-ellipsis-CU8GkxaV.js","assets/chat-preparation-cache-190LLyy7.js","assets/clipboard-D-VCry-F.js","assets/file-icons-JInFtBVl.js","assets/format-date-CSHaU2wN.js","assets/git-repo-store-CKB5fdNP.js","assets/patch-tab-metadata-C92YkrRX.js","assets/ws-auth-CbF6GqxP.js","assets/apply-theme-ORrEdHKT.js","assets/resolve-theme-BqoL27BW.js","assets/index-BACBJm4i.css","assets/image-gallery-BuxSgBug.js","assets/run-in-terminal-ujoc25vj.js","assets/api-client-xR05zj6r.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
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,$n as i,A as a,Br as o,D as s,Dn as c,E as l,Er as u,Et as d,Fn as f,Ft as p,G as m,I as h,K as g,Kr as _,L as v,M as y,Mn as b,Mr as x,Nn as S,Or as C,P as ee,Q as w,S as te,Ur as ne,V as T,Vn as E,Vr as re,Yr as ie,Yt as ae,Zr as oe,_t as D,ar as O,at as se,bn as ce,br as le,dn as k,en as ue,g as de,gr as fe,gt as pe,hr as me,ir as he,jr as ge,k as _e,li as ve,ln as A,n as j,nn as M,oi as N,or as ye,pi as be,qr as xe,rn as Se,t as Ce,ti as we,tr as Te,tt as P,ui as F,ut as I,w as Ee,wr as De,xn as L,xr as R,yn as Oe,yt as ke,z as Ae}from"./icons-BwyIKaTT.js";import{t as je}from"./createLucideIcon-D9_fdOKS.js";import{t as z}from"./file-diff-CcDhJkXB.js";import{a as Me,d as B,f as V,k as H,o as U,p as Ne,r as W,u as G,v as Pe}from"./api-client-xQDlhUTu.js";import{t as Fe}from"./settings-store-B4mLp19V.js";import{t as K}from"./preload-helper-CM8YhcCa.js";import{n as q,r as Ie,t as Le}from"./utils-Bslrbb-G.js";import{n as Re,r as ze,t as Be}from"./panel-store-BJhazigC.js";import{i as Ve}from"./project-store-BLGl9IAO.js";import{a as He,c as Ue,d as We,i as Ge,l as Ke,o as qe,r as Je,s as Ye,t as Xe,u as Ze}from"./session-list-sync-triggers-DtJI5KF0.js";import{t as Qe}from"./tab-store-D5I52eLN.js";import{t as $e}from"./format-date-CSHaU2wN.js";import{a as et,i as tt,n as J,r as nt,s as rt,t as it}from"./chat-preparation-cache-190LLyy7.js";import{o as Y}from"./file-store-BQ41vIs5.js";import{n as X}from"./use-is-mobile-VRV9eZy1.js";import{t as at}from"./open-settings-EXR4zoZG.js";import{u as ot}from"./onboarding-quick-orientation-CTHtIRib.js";import{r as st}from"./clipboard-D-VCry-F.js";import{t as ct}from"./button-C9ZXWb3b.js";import{n as lt,o as ut,t as dt}from"./dialog-Dn_2tuYa.js";import{n as ft}from"./file-icons-JInFtBVl.js";import{n as pt,t as mt}from"./patch-tab-metadata-C92YkrRX.js";import{i as ht,m as gt,r as _t,t as vt}from"./dropdown-menu-BQidk_OJ.js";import{t as Z}from"./mobile-bottom-sheet-DArbIyrD.js";import{t as yt}from"./input-C3oVNCMq.js";import{n as bt}from"./db-types-CNhENouW.js";import{Ai as xt,B as St,F as Ct,Fn as wt,G as Tt,Gi as Et,H as Dt,I as Ot,K as kt,Mi as At,N as jt,P as Mt,Pi as Nt,Ri as Pt,Sn as Ft,U as It,Ui as Lt,W as Rt,Wi as zt,Xr as Bt,ci as Vt,in as Ht,ji as Ut,ki as Wt,li as Gt,r as Kt,t as qt,zi as Jt}from"./index-BtAn_krv.js";import{a as Yt,c as Xt,d as Zt,g as Qt,h as $t,i as en,m as tn,n as nn,o as rn,p as an,r as on,s as sn}from"./tool-cards-Dh8Ekn2W.js";import{n as cn,r as ln,t as un}from"./image-gallery-BuxSgBug.js";import{c as dn,s as fn}from"./db-ai-tools-CVbbW_MZ.js";import{a as pn,c as mn,l as hn,n as gn,o as _n,r as vn,s as yn,t as bn}from"./session-turns-D3QpTtCq.js";import{t as xn}from"./use-websocket-K0OUXbbY.js";import{g as Sn}from"./api-settings-vmIRFNwZ.js";import{C as Cn,S as wn,b as Tn,c as En,d as Dn,f as On,g as kn,h as An,l as jn,m as Mn,p as Nn,s as Pn,t as Fn,v as In,x as Ln,y as Rn}from"./session-changes-bar-VfS2sHuH.js";import{t as zn}from"./onboarding-entry-eehqBvyM.js";import{n as Bn,t as Vn}from"./send-to-chat-CWV1qd3c.js";import{i as Hn,n as Un,r as Wn,t as Gn}from"./slash-command-picker-Bcizxvbh.js";import{t as Kn}from"./ai-settings-section-DMGM1hYx.js";import{b as qn,c as Jn,f as Yn,i as Xn,l as Zn,m as Qn,n as $n,o as er,s as tr,t as nr,u as rr,v as ir,x as ar}from"./codex-reset-credit-button-CGMbIHak.js";var or=je(`slash`,[[`path`,{d:`M22 2 2 22`,key:`y4kqgn`}]]);function sr(e){return`Answers to Codex question ${encodeURIComponent(e)}:\n`}function cr(e,t,n){return sr(e)+(n?t.map(e=>`${e.question}\n${n[e.id??e.question]??``}`).join(`
|
|
3
3
|
|
|
4
|
-
`):`Skipped by the user.`)}var Q=e(t(),1),$=n();function lr(e){let[t,n]=(0,Q.useState)({}),[r,i]=(0,Q.useState)({}),[a,o]=(0,Q.useState)(0),s=(0,Q.useCallback)((e,t)=>{n(n=>({...n,[e]:[t]})),i(t=>({...t,[e]:``}))},[]),c=(0,Q.useCallback)((e,t)=>{n(n=>{let r=n[e]||[];return{...n,[e]:r.includes(t)?r.filter(e=>e!==t):[...r,t]}})},[]),l=(0,Q.useCallback)((e,t)=>{i(n=>({...n,[e]:t})),t&&n(t=>({...t,[e]:[]}))},[]),u=(0,Q.useCallback)(e=>(t[e]?.length??0)>0||(r[e]?.trim().length??0)>0,[t,r]);return{answers:t,customInputs:r,activeTab:a,setActiveTab:o,handleSingleSelect:s,handleMultiSelect:c,handleCustomInput:l,hasAnswer:u,allAnswered:(0,Q.useMemo)(()=>e.every((e,t)=>u(t)),[e,u]),getFinalAnswer:(0,Q.useCallback)(e=>r[e]?.trim()||(t[e]??[]).join(`, `),[t,r]),goToNextTab:(0,Q.useCallback)(()=>o(t=>Math.min(t+1,e.length-1)),[e.length]),goToPrevTab:(0,Q.useCallback)(()=>o(e=>Math.max(e-1,0)),[])}}function ur(e){let[t,n]=(0,Q.useState)(0),r=(0,Q.useRef)(null);
|
|
4
|
+
`):`Skipped by the user.`)}var Q=e(t(),1),$=n();function lr(e){let[t,n]=(0,Q.useState)({}),[r,i]=(0,Q.useState)({}),[a,o]=(0,Q.useState)(0),s=(0,Q.useCallback)((e,t)=>{n(n=>({...n,[e]:[t]})),i(t=>({...t,[e]:``}))},[]),c=(0,Q.useCallback)((e,t)=>{n(n=>{let r=n[e]||[];return{...n,[e]:r.includes(t)?r.filter(e=>e!==t):[...r,t]}})},[]),l=(0,Q.useCallback)((e,t)=>{i(n=>({...n,[e]:t})),t&&n(t=>({...t,[e]:[]}))},[]),u=(0,Q.useCallback)(e=>(t[e]?.length??0)>0||(r[e]?.trim().length??0)>0,[t,r]);return{answers:t,customInputs:r,activeTab:a,setActiveTab:o,handleSingleSelect:s,handleMultiSelect:c,handleCustomInput:l,hasAnswer:u,allAnswered:(0,Q.useMemo)(()=>e.every((e,t)=>u(t)),[e,u]),getFinalAnswer:(0,Q.useCallback)(e=>r[e]?.trim()||(t[e]??[]).join(`, `),[t,r]),goToNextTab:(0,Q.useCallback)(()=>o(t=>Math.min(t+1,e.length-1)),[e.length]),goToPrevTab:(0,Q.useCallback)(()=>o(e=>Math.max(e-1,0)),[])}}function ur(e){let[t,n]=(0,Q.useState)(0),r=(0,Q.useRef)(null);(0,Q.useEffect)(()=>n(0),[e.activeTab]),(0,Q.useEffect)(()=>{if(!e.enabled)return;let i=r=>{let i=e.customInputRef.current,a=!!i&&i.ownerDocument.activeElement===i;if(!a&&r.key>=`1`&&r.key<=`9`){r.preventDefault();let t=parseInt(r.key)-1;t<e.totalOptions-1&&(n(t),e.onSelectOption(t));return}if(!a&&(r.key===`o`||r.key===`O`||r.key===`0`)){r.preventDefault(),e.customInputRef.current?.focus(),n(e.totalOptions-1);return}if(r.key===`Tab`&&e.questions.length>1){r.preventDefault(),r.shiftKey?e.goToPrevTab():e.goToNextTab();return}if(!a){if(r.key===`ArrowLeft`){r.preventDefault(),e.goToPrevTab();return}if(r.key===`ArrowRight`){r.preventDefault(),e.goToNextTab();return}if(r.key===`ArrowUp`){r.preventDefault(),n(e=>Math.max(0,e-1));return}if(r.key===`ArrowDown`){r.preventDefault(),n(t=>Math.min(e.totalOptions-1,t+1));return}if(r.key===` `){r.preventDefault(),e.onSelectOption(t);return}}if(r.key===`Enter`){r.preventDefault(),e.allAnswered?e.onSubmit():e.hasAnswer(e.activeTab)&&e.goToNextTab();return}r.key===`Escape`&&a&&e.customInputRef.current?.blur()},a=r.current;return a&&(a.addEventListener(`keydown`,i),a.setAttribute(`tabindex`,`0`)),()=>{a?.removeEventListener(`keydown`,i)}},[e,t]);let i=(0,Q.useRef)(e.autoFocus);return(0,Q.useEffect)(()=>{let e=r.current;i.current&&e&&!e.contains(e.ownerDocument.activeElement)&&e.focus()},[]),{focusedOption:t,setFocusedOption:n,containerRef:r}}function dr({questions:e,onSubmit:t,onSkip:n,autoFocus:r=!0}){let i=(0,Q.useRef)(null),a=lr(e),o=e[a.activeTab],s=o?o.options.length+1:0,c=e.length>1,l=(0,Q.useCallback)(()=>{if(!a.allAnswered)return;let n={};e.forEach((e,t)=>{n[e.id??e.question]=a.getFinalAnswer(t)}),t(n)},[a.allAnswered,a.getFinalAnswer,e,t]),u=(0,Q.useCallback)(e=>{if(!(!o||e<0))if(e<o.options.length){let t=o.options[e]?.label;if(!t)return;o.multiSelect?a.handleMultiSelect(a.activeTab,t):a.handleSingleSelect(a.activeTab,t)}else e===o.options.length&&i.current?.focus()},[o,a]),d=ur({questions:e,activeTab:a.activeTab,totalOptions:s,allAnswered:a.allAnswered,hasAnswer:a.hasAnswer,onSelectOption:u,goToNextTab:a.goToNextTab,goToPrevTab:a.goToPrevTab,onSubmit:l,customInputRef:i,enabled:!0,autoFocus:r}),f=(0,Q.useCallback)(e=>{u(e),d.setFocusedOption(e)},[u,d.setFocusedOption]);return(0,$.jsxs)(`div`,{ref:d.containerRef,className:`rounded-lg border-2 border-primary/30 bg-primary/5 p-3 space-y-3 outline-none animate-in slide-in-from-bottom-2`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between text-sm font-medium text-text-primary`,children:[(0,$.jsxs)(`span`,{children:[`AI has `,c?`${e.length} questions`:`a question`]}),(0,$.jsxs)(`span`,{className:`text-[10px] text-text-secondary font-normal`,children:[c?`←→ tabs · `:``,`↑↓ options · 1-`,Math.min(s-1,9),` select · Enter submit`]})]}),c&&(0,$.jsx)(`div`,{className:`flex gap-1 p-1 bg-background rounded-md overflow-x-auto border border-border`,children:e.map((e,t)=>(0,$.jsxs)(`button`,{className:`flex items-center gap-1.5 px-3 py-1.5 rounded text-xs whitespace-nowrap transition-all ${a.activeTab===t?`bg-primary text-primary-foreground`:a.hasAnswer(t)?`text-primary bg-transparent`:`text-text-secondary hover:bg-surface-elevated`}`,onClick:()=>{a.setActiveTab(t),d.setFocusedOption(0)},tabIndex:-1,children:[(0,$.jsx)(`span`,{className:`flex items-center justify-center w-4 h-4 rounded-full text-[10px] font-semibold ${a.activeTab===t?`bg-white/20`:a.hasAnswer(t)?`bg-primary/20 text-primary`:`bg-surface-elevated text-text-secondary`}`,children:a.hasAnswer(t)?`✓`:t+1}),(0,$.jsx)(`span`,{className:`max-w-[100px] overflow-hidden text-ellipsis`,children:e.header||`Q${t+1}`})]},t))}),o&&(0,$.jsxs)(`div`,{className:`space-y-2`,children:[!c&&o.header&&(0,$.jsx)(`div`,{className:`text-[11px] font-semibold uppercase tracking-wide text-text-secondary`,children:o.header}),(0,$.jsx)(`div`,{className:`text-sm text-text-primary select-text`,children:o.question}),o.multiSelect&&(0,$.jsx)(`div`,{className:`text-[11px] text-text-secondary`,children:`Select multiple`}),(0,$.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[o.options.map((e,t)=>{let n=(a.answers[a.activeTab]||[]).includes(e.label),r=d.focusedOption===t;return(0,$.jsxs)(`div`,{role:`button`,onClick:()=>f(t),className:`text-left flex items-start gap-2.5 rounded px-2.5 py-2 text-xs border transition-all cursor-pointer select-text ${n?`border-primary bg-primary/10 text-text-primary`:`border-border bg-background text-text-secondary hover:border-primary/40 hover:bg-primary/5`} ${r?`ring-2 ring-primary/40 ring-offset-1 ring-offset-background`:``}`,children:[(0,$.jsx)(`span`,{className:`flex items-center justify-center w-4.5 h-4.5 rounded text-[10px] font-semibold shrink-0 mt-px ${n?`bg-primary/20 text-primary`:`bg-surface-elevated text-text-secondary`}`,children:t+1}),(0,$.jsxs)(`div`,{className:`flex flex-col gap-0.5 flex-1`,children:[(0,$.jsx)(`span`,{className:`font-medium text-text-primary`,children:e.label}),e.description&&(0,$.jsx)(`span`,{className:`text-[11px] text-text-secondary`,children:e.description})]})]},t)}),(0,$.jsxs)(`div`,{className:`flex items-start gap-2.5 rounded px-2.5 py-2 text-xs border border-dashed transition-all border-border bg-transparent ${d.focusedOption===s-1?`ring-2 ring-primary/40 ring-offset-1 ring-offset-background`:``}`,children:[(0,$.jsx)(`span`,{className:`flex items-center justify-center w-4.5 h-4.5 rounded bg-surface-elevated text-text-secondary text-[10px] font-semibold shrink-0 mt-px`,children:`O`}),(0,$.jsx)(`input`,{ref:i,type:`text`,className:`flex-1 px-2 py-1 text-xs bg-surface border border-border rounded text-text-primary outline-none placeholder:text-text-subtle focus:border-primary`,placeholder:`Other (press O to type)...`,value:a.customInputs[a.activeTab]||``,onChange:e=>a.handleCustomInput(a.activeTab,e.target.value),onFocus:()=>d.setFocusedOption(s-1)})]})]})]}),(0,$.jsxs)(`div`,{className:`flex gap-2 justify-end pt-1`,children:[c&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`button`,{className:`px-3 py-1.5 text-xs rounded border border-border bg-background text-text-primary hover:bg-surface-elevated disabled:opacity-40 disabled:cursor-not-allowed transition-colors`,onClick:a.goToPrevTab,disabled:a.activeTab===0,tabIndex:-1,children:`← Prev`}),(0,$.jsx)(`button`,{className:`px-3 py-1.5 text-xs rounded border border-border bg-background text-text-primary hover:bg-surface-elevated disabled:opacity-40 disabled:cursor-not-allowed transition-colors`,onClick:a.goToNextTab,disabled:a.activeTab===e.length-1,tabIndex:-1,children:`Next →`})]}),(0,$.jsx)(`button`,{onClick:n,className:`px-4 py-1.5 rounded border border-border bg-background text-text-secondary text-xs hover:bg-surface-elevated transition-colors`,tabIndex:-1,children:`Skip`}),(0,$.jsxs)(`button`,{onClick:l,disabled:!a.allAnswered,className:`px-4 py-1.5 rounded bg-primary text-primary-foreground text-xs font-medium hover:bg-primary/80 transition-colors disabled:opacity-40 disabled:cursor-not-allowed`,tabIndex:-1,children:[`Submit `,a.allAnswered?`✓`:`(${e.filter((e,t)=>a.hasAnswer(t)).length}/${e.length})`]})]})]})}var fr=(0,Q.createContext)({messages:[]});function pr({itemId:e,questions:t}){let{messages:n,onSend:r}=(0,Q.useContext)(fr),i=sr(e),a=n.find(e=>e.role===`user`&&e.content.startsWith(i));return a||!r?(0,$.jsxs)(`div`,{className:`rounded-lg border border-border bg-surface p-3 text-sm whitespace-pre-wrap`,children:[a?a.content.slice(i.length):t.map(e=>e.question).join(`
|
|
5
5
|
`),(0,$.jsx)(`div`,{className:`mt-2 text-xs text-text-secondary`,children:a?`Response sent`:`Connect to answer this question`})]}):(0,$.jsx)(dr,{questions:t,autoFocus:!1,onSubmit:n=>r(cr(e,t,n)),onSkip:()=>r(cr(e,t))})}var mr={maxImages:4,maxBase64PerImage:5e6,maxBase64Total:1e7};function hr(e){let t=[],n=0;for(let r of e)if(r.imageData){if(t.length>=mr.maxImages)break;r.imageData.data.length>mr.maxBase64PerImage||n+r.imageData.data.length>mr.maxBase64Total||(n+=r.imageData.data.length,t.push(r.imageData))}return t}function gr(e,t){let n=new Set(t),r=[],i=[];for(let t of e)t.serverPath&&(t.imageData&&n.has(t.imageData)?r.push(t.serverPath):i.push(t.serverPath));return{inlineImagePaths:r,pathOnlyPaths:i}}var _r=class{attempt=null;constructor(e){this.emit=e}start(e,t,n){this.fail(),!(!t||!n)&&(this.attempt={sessionId:e,attemptId:Ie()},this.emit({type:`started`,...this.attempt}))}migrate(e){if(!this.attempt||this.attempt.sessionId===e)return;let t=this.attempt.sessionId;this.attempt.sessionId=e,this.emit({type:`session`,...this.attempt,previousSessionId:t})}select(e){this.attempt&&this.attempt.sessionId!==e&&this.fail()}fail(){if(!this.attempt)return;let e=this.attempt;this.attempt=null,this.emit({type:`failed`,...e})}finish(e){if(!this.attempt)return;let t=this.attempt;this.attempt=null,this.emit({type:e?`succeeded`:`failed`,...t,hasContent:e})}};function vr(e){let t=0;for(let n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n)|0;return Math.abs(t).toString(36)}function yr(e,t){let n=`pc-${vr(t)}-`;return e.map(e=>e.id?{...e,id:`${n}${e.id}`}:e)}function br(e,t){if(t.size===0)return e;let n=[],r=new Set,i=e=>{for(let a of e){let e=a.id?t.get(a.id):void 0;e&&e.length>0&&a.id&&!r.has(a.id)&&(r.add(a.id),i(e)),n.push(a)}};return i(e),n}var xr=null;function Sr(){return xr||=new AudioContext,xr}function Cr(e,t,n,r,i=`sine`){let a=Sr(),o=a.createOscillator(),s=a.createGain();o.type=i,o.frequency.value=e,s.gain.setValueAtTime(r,n),s.gain.exponentialRampToValueAtTime(.001,n+t),o.connect(s),s.connect(a.destination),o.start(n),o.stop(n+t)}function wr(){let e=Sr().currentTime;Cr(523,.15,e,.15),Cr(659,.2,e+.12,.15)}function Tr(){let e=Sr().currentTime;Cr(880,.12,e,.18,`square`),Cr(698,.12,e+.15,.18,`square`),Cr(880,.15,e+.3,.15,`square`)}function Er(){let e=Sr().currentTime;Cr(440,.12,e,.12),Cr(523,.12,e+.1,.12),Cr(659,.18,e+.2,.12)}var Dr={done:wr,approval_request:Tr,question:Er};function Or(e){try{Dr[e]?.()}catch{}}function kr(e){return e.inputTokens+e.cacheReadTokens+e.cacheWriteTokens}function Ar(e){return e.inputTokens+e.cacheWriteTokens}var jr=.5,Mr=.9,Nr={cache_expired:`the session's prompt cache had already lapsed, so PPM released its subprocess`,idle_timeout:`the session sat idle with no tab open long enough for PPM to release its subprocess`,warm_idle_cap:`too many idle sessions were holding a subprocess, so this one was released early`,tab_closed:`PPM shut the session's subprocess down when the last tab disconnected`,set_model:`the model was changed, which restarts the session`,stream_ended:`the session's subprocess had already exited`,resume:`the session was resumed on a new subprocess`};function Pr(e){let t=Ar(e),n=kr(e);if(!e.coldStart||n<2e4)return{level:`ok`,wastedTokens:t,reason:``};let r=e.cacheHitRate<jr?`bad`:e.cacheHitRate<Mr?`warn`:`ok`;if(r===`ok`)return{level:r,wastedTokens:t,reason:``};let i=e.coldReason?Nr[e.coldReason]??`the session restarted (${e.coldReason})`:null;return{level:r,wastedTokens:t,reason:i?`${Rr(t)} of this session's transcript was re-sent uncached because ${i}.`:`${Rr(t)} of this session's transcript was re-sent uncached.`}}var Fr=.1,Ir=1.25;function Lr(e){let t=kr(e);if(t===0)return 1;let n=e.inputTokens+e.cacheWriteTokens*Ir+e.cacheReadTokens*Fr,r=t*Fr;return r>0?Math.max(1,n/r):1}function Rr(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`:e>=1e3?`${(e/1e3).toFixed(e>=1e4?0:1)}k`:String(e)}function zr(e){return e.map(e=>e.events?{...e,events:an(e.events)}:e)}var Br={hasTeams:!1,teamNames:[],messageCount:0,unreadCount:0},Vr=50;function Hr(e){if(document.hidden)return!1;let{panels:t}=Be.getState();for(let n of Object.values(t))if(ze(n.tabs.find(e=>e.id===n.activeTabId))===e)return!0;return!1}function Ur(e,t=`claude`,n=``,r,i,a){let o=(0,Q.useRef)(a?.onMessageRejected);o.current=a?.onMessageRejected;let s=(0,Q.useRef)([]),c=(0,Q.useRef)(0),l=(0,Q.useRef)(i);l.current=i;let u=(0,Q.useRef)(null);u.current||=new _r(e=>l.current?.(e));let[d,f]=(0,Q.useState)([]),[p,m]=(0,Q.useState)(new Map),[h,g]=(0,Q.useState)(!1),[_,v]=(0,Q.useState)({}),[y,b]=(0,Q.useState)(0),x=(0,Q.useRef)(0),[S,C]=(0,Q.useState)(0),[ee,w]=(0,Q.useState)(null),[te,ne]=(0,Q.useState)(!1),T=(0,Q.useRef)(!1),E=(0,Q.useRef)(!1),re=(0,Q.useRef)(null),ie=(0,Q.useRef)(!1),ae=(0,Q.useCallback)(e=>{let t=e?.start??0;x.current=t,b(t),C(e?.userOrdinalOffset??0),w(t>0?e?.predecessorId??null:null)},[]),[oe,D]=(0,Q.useState)(`idle`),[O,se]=(0,Q.useState)(!1),[ce,le]=(0,Q.useState)(0),[k,ue]=(0,Q.useState)(null),[de,fe]=(0,Q.useState)(null),[pe,me]=(0,Q.useState)(null),[he,ge]=(0,Q.useState)(null),[_e,ve]=(0,Q.useState)([]),[A,j]=(0,Q.useState)(null),[M,N]=(0,Q.useState)([]),ye=(0,Q.useRef)([]),[be,xe]=(0,Q.useState)(null),[Se,Ce]=(0,Q.useState)(null),[we,Te]=(0,Q.useState)(!1),[P,F]=(0,Q.useState)(null),[I,Ee]=(0,Q.useState)(null),De=(0,Q.useRef)(null),L=(0,Q.useRef)(null),[R,Oe]=(0,Q.useState)(null),ke=(0,Q.useRef)(null),[Ae,je]=(0,Q.useState)(!0),z=(0,Q.useRef)(null),Me=(0,Q.useRef)(null),B=(0,Q.useRef)(``),V=(0,Q.useRef)([]),Ne=(0,Q.useRef)(new Map),G=(0,Q.useRef)(null),[Pe,Fe]=(0,Q.useState)(null),K=(0,Q.useRef)(`idle`),q=(0,Q.useRef)(null),Ie=(0,Q.useRef)(()=>{}),Le=(0,Q.useRef)(null),Re=(0,Q.useRef)(0),ze=(0,Q.useRef)(0),Ve=(0,Q.useRef)(!1),He=(0,Q.useRef)(null),Ue=(0,Q.useRef)([]),We=(0,Q.useRef)(0),Ge=(0,Q.useRef)(!1),Ke=(0,Q.useRef)(!1),Je=(0,Q.useRef)(null),Ye=(0,Q.useRef)(!1),Ze=(0,Q.useRef)(new Set),Qe=(0,Q.useRef)(0),$e=(0,Q.useRef)(null),et=(0,Q.useRef)(0),tt=(0,Q.useRef)(!1),J=(0,Q.useRef)(e);J.current=e;let nt=(0,Q.useRef)(r);nt.current=r;let rt=(0,Q.useRef)([]);rt.current=d;let it=(0,Q.useRef)(n);it.current=n;let Y=(0,Q.useRef)(null),X=(0,Q.useRef)(0),at=(0,Q.useRef)({teamNames:new Set,messages:[]}),st=(0,Q.useRef)(0),[ct,lt]=(0,Q.useState)(Br),[ut,dt]=(0,Q.useState)([]),ft=(0,Q.useCallback)(()=>{let e=at.current;lt({hasTeams:e.teamNames.size>0,teamNames:Array.from(e.teamNames),messageCount:e.messages.length,unreadCount:st.current}),dt([...e.messages])},[]),pt=(0,Q.useCallback)(()=>{st.current=0,ft()},[ft]),mt=(0,Q.useCallback)(async e=>{try{let t=await W.get(`/api/teams/${encodeURIComponent(e)}`);if(!t?.messages)return;let n=at.current.messages,r=t.messages.filter(e=>!n.some(t=>t.timestamp===e.timestamp&&t.from===e.from));n.push(...r),n.sort((e,t)=>new Date(e.timestamp).getTime()-new Date(t.timestamp).getTime()),n.length>500&&n.splice(0,n.length-500),ft()}catch{}},[ft]),ht=oe!==`idle`;(0,Q.useEffect)(()=>{if(e)return ot.getState().setStreaming(e,oe!==`idle`,n),()=>{ot.getState().setStreaming(e,!1)}},[e,oe,n]);let gt=(0,Q.useCallback)((e,t)=>{let n=r=>{for(let i=0;i<r.length;i++){let a=r[i];if(a.type===`tool_use`){if((a.tool===`Agent`||a.tool===`Task`)&&a.toolUseId===t){let t=Zt(a,e);return[[...r.slice(0,i),t,...r.slice(i+1)],!0]}if(a.children?.length){let[e,t]=n(a.children);if(t)return[[...r.slice(0,i),{...a,children:e},...r.slice(i+1)],!0]}}}return[r,!1]},[r,i]=n(V.current);return i&&(V.current=r),i},[]),_t=(0,Q.useCallback)((e,t)=>{let n=e=>e.type===`tool_use`&&(e.tool===`Agent`||e.tool===`Task`)&&e.toolUseId===t,r=rt.current,i=-1;for(let e=r.length-1;e>=0;e--)if(r[e].events?.some(n)){i=e;break}return i===-1?!1:(f(t=>{let r=-1;for(let e=t.length-1;e>=0;e--)if(t[e].events?.some(n)){r=e;break}if(r===-1)return t;let i=t[r],a=i.events.map(t=>n(t)?Zt(t,e):t);return[...t.slice(0,r),{...i,events:a},...t.slice(r+1)]}),!0)},[]),vt=(0,Q.useCallback)(()=>{X.current=0;let e=B.current,t=[...V.current],n=G.current;(0,Q.startTransition)(()=>{f(r=>{let i=r[r.length-1];return i?.role===`assistant`&&!i.id.startsWith(`final-`)?[...r.slice(0,-1),{...i,content:e,events:t,...n}]:[...r,{id:`streaming-${Date.now()}`,role:`assistant`,content:e,events:t,timestamp:new Date().toISOString(),...n}]})})},[]),Z=(0,Q.useCallback)(()=>{X.current||=window.setTimeout(vt,100)},[vt]),yt=(0,Q.useCallback)((e,t)=>{let n=t=>t.type===`tool_use`&&(t.tool===`Agent`||t.tool===`Task`)&&t.toolUseId===e,r=V.current.findIndex(n);if(r!==-1){V.current[r]={...V.current[r],bgStatus:t},Z();return}f(e=>{let r=-1;for(let t=e.length-1;t>=0;t--)if(e[t].events?.some(n)){r=t;break}if(r===-1)return e;let i=e[r],a=i.events.map(e=>n(e)?{...e,bgStatus:t}:e);return[...e.slice(0,r),{...i,events:a},...e.slice(r+1)]})},[Z]),bt=(0,Q.useCallback)(e=>{let t=e,n=t?.type;if(!n)return;let r=e=>{let n=V.current,r=n.findIndex(e);r===-1?n.push(t):n[r]=t};switch(n){case`account_info`:G.current={accountId:t.accountId,accountLabel:t.accountLabel},Fe({id:t.accountId,label:t.accountLabel??null}),xe(null);break;case`account_retry`:t.accountId&&t.accountLabel&&(G.current={accountId:t.accountId,accountLabel:t.accountLabel},Fe({id:t.accountId,label:t.accountLabel})),V.current.push(t),Z();break;case`status_update`:{let e=t.accountLabel?` (${t.accountLabel})`:``;xe(`${t.message}${e}`);break}case`text`:{let e=t.parentToolUseId;if(e&>(t,e)){Z();break}if(e){_t(t,e);break}B.current+=t.content,V.current.push(t),Z();break}case`thinking`:{let e=t.parentToolUseId;if(e&>(t,e)){Z();break}if(e){_t(t,e);break}V.current.push(t),Z();break}case`tool_use`:{if(t.tool===`AskUserQuestion`){t.toolUseId&&Ze.current.add(t.toolUseId);break}let e=t.parentToolUseId;if(e&>(t,e)){Z();break}if(e){_t(t,e);break}let n=t.toolUseId;r(e=>!!n&&e.type===`tool_use`&&e.toolUseId===n),Z();break}case`tool_result`:{let e=t.toolUseId;if(e&&Ne.current.delete(e),e&&Ze.current.has(e))break;let n=t.parentToolUseId;if(n&>(t,n)){Z();break}if(n){_t(t,n);break}if(K.current===`idle`&&e?.startsWith(`subagent-`)){f(n=>n.map(n=>n.events?.some(t=>t.type===`tool_use`&&t.toolUseId===e)?{...n,events:n.events.map(n=>n.type===`tool_use`&&n.toolUseId===e?{...n,result:{output:t.output,isError:t.isError,exitCode:t.exitCode}}:n)}:n));break}r(t=>!!e&&t.type===`tool_result`&&t.toolUseId===e),Z();break}case`approval_resolved`:{let e=t.requestId;if(t.approved&&t.answers){let n=V.current.find(t=>t.type===`approval_request`&&t.requestId===e&&t.tool===`AskUserQuestion`),r=n&&n.input;r&&typeof r==`object`&&(r.answers=t.answers,f(e=>[...e]))}ue(t=>t&&t.requestId===e?null:t),Y.current!=null&&(H.dismiss(Y.current),Y.current=null);break}case`approval_request`:{let e=fn(t.tool,t.input);if(e||r(e=>e.type===`approval_request`&&e.requestId===t.requestId),Ye.current)break;if(ue({requestId:t.requestId,tool:t.tool,input:t.input}),J.current&&!Hr(J.current)){Or(t.tool===`AskUserQuestion`?`question`:`approval_request`);let n=J.current,r=t.tool===`AskUserQuestion`;Y.current=H[r?`info`:`warning`](r?`AI has a question`:e?`AI wants to change ${e.connectionName}`:`${t.tool} needs permission`,{description:it.current||`Session ${n.slice(0,8)}`,duration:1/0,action:{label:`Go to session`,onClick:()=>{let{panels:e}=Be.getState();for(let[t,r]of Object.entries(e)){let e=r.tabs.find(e=>e.metadata?.sessionId===n);if(e){Be.getState().setActiveTab(e.id,t);break}}}}})}break}case`error`:if(t.parentToolUseId){gt(t,t.parentToolUseId)?Z():_t(t,t.parentToolUseId);break}Ye.current||u.current?.fail(),f(e=>{let n=e[e.length-1];if(n?.role===`assistant`){let r=V.current,i=r[r.length-1],a=i?.type===`error`&&i.message===t.message?r:[...r,t];return V.current=a,[...e.slice(0,-1),{...n,events:a}]}return n?.role===`system`&&n.content===t.message?e:[...e,{id:`error-${Date.now()}`,role:`system`,content:t.message,events:[t],timestamp:new Date().toISOString()}]});break;case`team_detected`:{let e=t.teamName;e&&(at.current.teamNames.add(e),ft(),mt(e));break}case`team_inbox`:{let e=t.messages;if(Array.isArray(e)){let t=at.current.messages;t.push(...e),t.length>500&&t.splice(0,t.length-500),st.current+=e.length,ft()}break}case`team_updated`:ft();break;case`bash_output`:{let e=t.toolUseId;if(e){let n=Ne.current.get(e);n?(n.content+=t.content,n.content.length>5e5&&(n.content=n.content.slice(-5e5)),n.lineCount=t.lineCount):Ne.current.set(e,{content:t.content,lineCount:t.lineCount}),Z()}break}case`subagent_status`:{let e=t.toolUseId,n=t.status;e&&n&&yt(e,n);break}case`background_registry`:{let e=t.shells??[];ye.current=e,N(e);break}case`done`:{if(t.parentToolUseId||(Ye.current||u.current?.finish(!!B.current.trim()),K.current===`idle`))break;t.contextWindowPct!=null&&fe(t.contextWindowPct),J.current&&!Hr(J.current)&&Or(`done`),X.current&&=(clearTimeout(X.current),0);let e=B.current,n=[...V.current],r=G.current;Ve.current=!!e||n.length>0;let i=t.lastMessageUuid,a=t.usage;f(t=>{let o=t[t.length-1];return o?.role===`assistant`?[...t.slice(0,-1),{...o,id:`final-${Date.now()}`,content:e||o.content,events:n.length>0?n:o.events,...i&&{sdkUuid:i},...a&&{usage:a}}]:e||n.length>0?[...t,{id:`final-${Date.now()}`,role:`assistant`,content:e,events:n,timestamp:new Date().toISOString(),...i&&{sdkUuid:i},...a&&{usage:a},...r}]:t}),a&&ge(e=>e&&{...e,lastTurnEndedAt:Date.now(),billedPrefixTokens:kr(a),...a.contextTokens!=null&&{contextTokens:a.contextTokens},...a.cacheTtlMs!=null&&{ttlMs:a.cacheTtlMs},compactedAt:a.compactedAt}),B.current=``,V.current=[],G.current=null,$e.current=null,Ne.current.clear(),xe(null);break}}},[gt,_t,Z,yt,ft,mt]),xt=(0,Q.useCallback)(e=>{let t;try{t=JSON.parse(e.data)}catch{return}if(t.type===`tab_open`){rn(t,{sessionId:J.current??``,projectName:it.current||void 0},e=>Ie.current(e));return}if(Ye.current){Ue.current.push(e);return}if(t.type===`ping`){let e=t.streamSeq;typeof e==`number`&&e>We.current&&!Ge.current&&!Ke.current&&(Ge.current=!0,Ie.current(JSON.stringify({type:`resync`})));return}let n=t.streamSeq;if(typeof n==`number`&&(Ke.current?We.current=Math.max(We.current,n):n===We.current+1?We.current=n:n>We.current&&!Ge.current&&(Ge.current=!0,Ie.current(JSON.stringify({type:`resync`})))),t.type===`message_rejected`){let e=t,n=typeof e.clientMessageId==`string`?s.current.findIndex(t=>t.id===e.clientMessageId):s.current.findLastIndex(t=>t.content===e.content&&JSON.stringify(t.replyTo??null)===JSON.stringify(e.replyTo??null));if(n!==-1){let[t]=s.current.splice(n,1);f(e=>e.filter(e=>e.id!==t.id).map(e=>e.id===t.finalizedId&&t.originalAssistantId?{...e,id:t.originalAssistantId}:e)),t.wasIdle&&n===s.current.length&&(u.current?.fail(),D(`idle`),K.current=`idle`),!t.wasIdle&&K.current!==`idle`&&!Ve.current&&(B.current=t.streamingContent+B.current,V.current=[...t.streamingEvents,...V.current],(B.current||V.current.length)&&Z());let r=mn(t.encoded);o.current?.({...r,message:e.message})}o.current||H.error(e.message||`Message could not be sent`);return}if(t.type===`user_message`){Re.current++;let e=t.content;f(n=>{let r=n[n.length-1];return r?.role===`user`&&r.content===e?n:[...n,{id:`user-remote-${Date.now()}`,role:`user`,content:e,timestamp:t.timestamp??new Date().toISOString()}]});return}if(t.type===`title_updated`){Ce(t.title??null);return}if(t.type===`session_migrated`){let e=t.newSessionId;e&&e!==J.current&&(u.current?.migrate(e),nt.current?.(e));return}if(t.type===`mcp_status`){let e=t.needsAuth;ve(Array.isArray(e)?e:[]);return}if(t.type===`turn_stop`){j(t.stop??null);return}if(t.type===`compact_status`){let e=t.status;e===`compacting`?me(`compacting`):e===`done`&&me(null);return}if(t.type===`phase_changed`){let e=t.phase,n=K.current!==`idle`;if(!n&&e!==`idle`&&(Ve.current=!1),e!==`idle`&&Re.current++,e!==`idle`&&j(null),D(e),K.current=e,le(e===`connecting`?t.elapsed??0:0),e===`idle`){let e=Ke.current;Ge.current=!1,Ke.current=!1,me(null),xe(null),(e||n&&!Ve.current)&&Le.current?.()}return}if(t.type===`session_state`){Te(!0),se(!1),F(t.sessionId??J.current);let e=t,n=e.phase;n!==`idle`&&Re.current++;let r=K.current===`idle`;if(r&&n!==`idle`&&(Ve.current=!1),D(n),K.current=n,e.sessionTitle&&Ce(e.sessionTitle),e.model&&(L.current&&e.model!==L.current||(e.model===L.current&&(L.current=null),Ee(e.model),De.current=e.model)),typeof e.effort==`string`&&(Oe(e.effort),ke.current=e.effort),typeof e.thinking==`boolean`&&je(e.thinking),e.pendingApproval&&ue({requestId:e.pendingApproval.requestId,tool:e.pendingApproval.tool,input:e.pendingApproval.input}),me(e.compactStatus===`compacting`?`compacting`:null),n===`idle`?`turnStop`in e&&j(e.turnStop??null):j(null),ge(e.promptCache??null),ve(Array.isArray(e.mcpNeedsAuth)?e.mcpNeedsAuth:[]),n===`idle`){let e=Ke.current;Ge.current=!1,Ke.current=!1;let t=Date.now()-et.current<5e3;(e||!(r&&(t||tt.current)))&&Le.current?.(),se(!1)}return}if(t.type===`turn_events`){Re.current++;let e=t.events,n=t.userMessage;if(!e?.length&&!n){se(!1);return}Qe.current&&=(cancelAnimationFrame(Qe.current),0),$e.current=n,f(e=>{let t=[...e],r=t.length;for(;r>0&&t[r-1].role===`assistant`;)r--;if(n!=null&&r>0&&t[r-1].role===`user`&&t[r-1].content===n)t=t.slice(0,r-1);else{let e=t[t.length-1];e?.role===`assistant`&&e.id.startsWith(`streaming-`)&&(t=t.slice(0,-1))}if(n){let e=t[t.length-1];(e?.role!==`user`||e.content!==n)&&(t=[...t,{id:`user-replay-${Date.now()}`,role:`user`,content:n,timestamp:new Date().toISOString()}])}return t}),B.current=``,V.current=[],G.current=null,Ye.current=!0;let r=0,i=()=>{let n=Math.min(r+100,e.length);for(let t=r;t<n;t++)bt(e[t]);if(r=n,r<e.length)Qe.current=requestAnimationFrame(i);else{Qe.current=0,Ye.current=!1;let e=t.streamSeq,n=t.truncated===!0;Ke.current=n,!n&&typeof e==`number`&&(We.current=e),Ge.current=!1,se(!1);let r=Ue.current.splice(0);for(let e of r)Je.current?.(e)}};Qe.current=requestAnimationFrame(i);return}bt(t)},[bt,Z]);Je.current=xt;let{send:St,connect:Ct}=xn({url:e&&n?`/ws/project/${encodeURIComponent(n)}/chat/${e}?providerId=${encodeURIComponent(t)}`:``,onMessage:xt,autoConnect:!!e&&!!n,idleTimeoutMs:45e3,onConnectionChange:e=>{e||(u.current?.fail(),Te(!1),se(!0))}});Ie.current=St,(0,Q.useEffect)(()=>{let r=!1;u.current?.select(e);let i=ze.current;Ve.current=!1,Re.current++,We.current=0,Ge.current=!1,Ke.current=!1,Me.current&&Me.current!==e&&(L.current=null,z.current=null,Fe(null)),Me.current=e??null,s.current=[],D(`idle`),K.current=`idle`,ue(null),Y.current!=null&&(H.dismiss(Y.current),Y.current=null),me(null),ve([]),j(null),m(new Map),v({}),ae(),ie.current=!1,T.current=!1,ne(!1),B.current=``,V.current=[],$e.current=null,et.current=0,Ne.current.clear(),X.current&&=(clearTimeout(X.current),0),Te(!1),F(null),se(!1),at.current={teamNames:new Set,messages:[]},st.current=0,lt(Br),dt([]),e&&W.get(`/api/teams`).then(t=>{r||!Array.isArray(t)||t.filter(t=>(t?.name??t?.team_name)===e).length!==0&&(at.current.teamNames.add(e),ft(),mt(e))}).catch(()=>{});let a=new Set(rt.current.map(e=>e.id));return e&&n?(tt.current=!0,g(!0),W.get(`${U(n)}/chat/sessions/${e}/messages?providerId=${t}&limit=${Vr}`).then(e=>{if(r||ze.current!==i)return;let t=Array.isArray(e)?{messages:e,versionMap:{}}:e,n=zr(Array.isArray(t?.messages)?t.messages:[]);t?.versionMap&&v(t.versionMap),ae(t),t?.canonicalSessionId&&t.canonicalSessionId!==J.current&&nt.current?.(t.canonicalSessionId);let o=$e.current;if(o!=null){for(let e=n.length-1;e>=0;e--)if(n[e].role===`user`&&n[e].content===o){n=n.slice(0,e);break}}f(e=>{let t=e.filter(e=>!a.has(e.id));return[...n,...t]}),et.current=Date.now()}).catch(t=>{!r&&ze.current===i&&(f(e=>e.filter(e=>!a.has(e.id))),t?.status===404&&n&&qe.getState().removeSession(Xe(n),e))}).finally(()=>{r||(tt.current=!1,g(!1))})):f([]),()=>{r=!0,tt.current=!1,He.current?.abort(),He.current=null,X.current&&clearTimeout(X.current),X.current=0,Qe.current&&cancelAnimationFrame(Qe.current),Qe.current=0,Ye.current=!1,Ue.current=[]}},[e,t,n,ft,mt]);let wt=(0,Q.useCallback)(()=>({...De.current&&{model:De.current},...ke.current&&{effort:ke.current},...z.current!==null&&{thinking:z.current}}),[]),Tt=(0,Q.useCallback)((e,t)=>{if(!e.trim()&&!t?.images?.length)return;let n=hn(e,t?.replyTo);Re.current++,j(null);let r=K.current!==`idle`;J.current&&u.current?.start(J.current,!r,we&&P===J.current),Ve.current=!1;let i=`final-${Date.now()}-${c.current+1}`,a=rt.current.at(-1);if(r){X.current&&=(clearTimeout(X.current),0);let e=B.current,t=[...V.current];f(n=>{let r=n[n.length-1];return r?.role===`assistant`?[...n.slice(0,-1),{...r,id:i,content:e||r.content,events:t.length>0?t:r.events}]:n})}let o=`user-${Date.now()}-${++c.current}`;s.current=s.current.filter(e=>Date.now()-e.sentAt<6e4),t?.replyTo&&s.current.push({id:o,content:e,encoded:n,replyTo:t.replyTo,sentAt:Date.now(),wasIdle:!r,streamingContent:B.current,streamingEvents:[...V.current],finalizedId:r?i:void 0,originalAssistantId:a?.role===`assistant`?a.id:void 0}),s.current.length>20&&s.current.shift(),f(e=>[...e,{id:o,role:`user`,content:n,timestamp:new Date().toISOString()}]),B.current=``,V.current=[],q.current=null,r?(D(`thinking`),K.current=`thinking`):(D(`initializing`),K.current=`initializing`),ue(null),Y.current!=null&&(H.dismiss(Y.current),Y.current=null),St(JSON.stringify({type:`message`,clientMessageId:o,content:e,permissionMode:t?.permissionMode,priority:t?.priority,images:t?.images,imagePaths:t?.imagePaths,replyTo:t?.replyTo,...wt()}))},[St,we,P,wt]),Et=(0,Q.useCallback)(e=>{Ee(e),De.current=e,L.current=e,St(JSON.stringify({type:`set_model`,model:e}))},[St]),Dt=(0,Q.useCallback)(e=>{Oe(e),ke.current=e,St(JSON.stringify({type:`set_effort`,effort:e}))},[St]),Ot=(0,Q.useCallback)(e=>{je(e),z.current=e,St(JSON.stringify({type:`set_thinking`,enabled:e}))},[St]),kt=(0,Q.useCallback)((e,t,n)=>{if(St(JSON.stringify({type:`approval_response`,requestId:e,approved:t,data:n})),t&&n){let t=V.current.find(t=>t.type===`approval_request`&&t.requestId===e&&t.tool===`AskUserQuestion`);if(t){let e=t.input;e&&typeof e==`object`&&(e.answers=n)}f(e=>[...e])}ue(null),Y.current!=null&&(H.dismiss(Y.current),Y.current=null)},[St]),At=(0,Q.useCallback)(()=>{if(u.current?.fail(),K.current===`idle`)return;St(JSON.stringify({type:`cancel`}));let e=B.current,t=[...V.current];f(n=>{let r=n[n.length-1];return r?.role===`assistant`?[...n.slice(0,-1),{...r,id:`final-${Date.now()}`,content:e||r.content,events:t.length>0?t:r.events}]:n}),B.current=``,V.current=[],Ne.current.clear(),q.current=null,D(`idle`),K.current=`idle`,ue(null),Y.current!=null&&(H.dismiss(Y.current),Y.current=null)},[St]),jt=(0,Q.useCallback)(e=>{e&&St(JSON.stringify({type:`kill_background_shell`,shellId:e}))},[St]),Mt=(0,Q.useCallback)(e=>{if(!e)return;let t=e.replace(/\.output$/,``);return ye.current.find(n=>n.shellId===t||n.outputPath.endsWith(e)||n.outputPath.endsWith(`${t}.output`))},[]);(0,Q.useEffect)(()=>{e&&qt.getState().setSessionShells(e,M)},[e,M]),(0,Q.useEffect)(()=>{if(e)return qt.getState().retainSession(e),()=>{qt.getState().releaseSession(e)}},[e]);let Nt=(0,Q.useCallback)(()=>{Te(!1),se(!0),Ct()},[Ct]),Pt=(0,Q.useCallback)(()=>{if(!e||!n||K.current!==`idle`)return;let r=He.current;if(r&&!r.signal.aborted&&re.current===r){ie.current=!0;return}He.current?.abort();let i=new AbortController;re.current=i,He.current=i;let a=Re.current,o=x.current;W.get(`${U(n)}/chat/sessions/${e}/messages?providerId=${t}&from=${o}&limit=${Vr}`,{signal:i.signal}).then(t=>{if(i.signal.aborted||He.current!==i||Re.current!==a||K.current!==`idle`||J.current!==e||it.current!==n||Ye.current)return;let r=Array.isArray(t)?{messages:t,versionMap:void 0}:t;if(r?.versionMap&&v(r.versionMap),T.current){E.current=!0;return}if(x.current!==o){queueMicrotask(()=>Le.current?.());return}Array.isArray(r?.messages)&&r.messages.length>0&&(ze.current++,X.current&&=(clearTimeout(X.current),0),ae(r),f(zr(r.messages)),B.current=``,V.current=[]),et.current=Date.now()}).catch(()=>{}).finally(()=>{re.current===i&&(re.current=null,ie.current&&!i.signal.aborted&&(ie.current=!1,Le.current?.()))})},[e,t,n,ae]),Ft=(0,Q.useCallback)(async()=>{let r=x.current;if(!(!e||!n||r<=0||T.current)){T.current=!0,ne(!0);try{let i=await W.get(`${U(n)}/chat/sessions/${e}/messages?providerId=${t}&limit=${Vr}&before=${r}`);if(J.current!==e||x.current!==r)return;let a=zr(Array.isArray(i?.messages)?i.messages:[]);f(e=>{let t=new Set(e.map(e=>e.id));return[...a.filter(e=>!t.has(e.id)),...e]}),ae(i)}finally{T.current=!1,ne(!1),E.current&&(E.current=!1,Le.current?.())}}},[e,t,n,ae]);Le.current=Pt;let It=(0,Q.useCallback)(async(e,t)=>{if(!n)throw Error(`No project context available`);let r=e.replace(/^pc-[^-]+-/,``),i=`${U(n)}/chat/pre-compact-messages?jsonlPath=${encodeURIComponent(t)}&before=${encodeURIComponent(r)}`,a=yr(await W.get(i),t);return m(t=>{let n=new Map(t);return n.set(e,a),n}),a.length},[n]),Lt=(0,Q.useCallback)(e=>p.has(e),[p]),Rt=(0,Q.useCallback)(e=>{f(t=>t.filter(t=>t.id!==e))},[]),zt=(0,Q.useCallback)(()=>{f(e=>e.filter(e=>e.role!==`system`))},[]);return{messages:d,renderedMessages:(0,Q.useMemo)(()=>br(d,p),[d,p]),expandCompact:It,isCompactExpanded:Lt,dismissMessage:Rt,clearErrors:zt,messagesLoading:h,versionMap:_,hasOlderHistory:y>0,loadingOlderHistory:te,loadOlderHistory:Ft,userOrdinalOffset:S,historyPredecessorId:ee,isStreaming:ht,phase:oe,isReconnecting:O,connectingElapsed:ce,pendingApproval:k,contextWindowPct:de,compactStatus:pe,promptCache:he,mcpNeedsAuth:_e,turnStop:A,statusMessage:be,sessionTitle:Se,liveAccount:Pe,model:I,setModel:Et,effort:R,setEffort:Dt,thinking:Ae,setThinking:Ot,turnSettings:wt,teamActivity:ct,teamMessages:ut,markTeamRead:pt,bashPartialOutput:Ne,backgroundShells:M,killBackgroundShell:jt,findBackgroundShellByOutput:Mt,sendMessage:Tt,respondToApproval:kt,cancelStreaming:At,reconnect:Nt,refetchMessages:Pt,isConnected:we&&P===e}}var Wr=300,Gr=6e4;function Kr(e){let{enabled:t,projectName:n,providerId:r,permissionMode:i,accountId:a,picks:o}=e,s=(0,Q.useRef)(0),c=(0,Q.useRef)(()=>{}),l=(0,Q.useRef)(t);return l.current=t,c.current=()=>{s.current=Date.now(),W.post(`${U(n)}/chat/prewarm`,{providerId:r,permissionMode:i,accountId:a,...o}).catch(()=>{})},(0,Q.useEffect)(()=>{if(!t)return;let e=setTimeout(()=>c.current(),Wr);return()=>clearTimeout(e)},[t,JSON.stringify([n,r,i??null,a??null,o])]),(0,Q.useCallback)(()=>{l.current&&Date.now()-s.current>=Gr&&c.current()},[])}function qr(e,t,n){let r=mt(e);return n&&r&&!r.sessionId&&(!r.pickedAccountId||r.pickedAccountProvider!==t)&&(r.providerPending||r.providerId===t)&&pt(e,{pickedAccountId:n.id,pickedAccountLabel:n.label,pickedAccountProvider:t}),n}function Jr(e,t,n){let r=(0,Q.useRef)(new Map),i=(0,Q.useRef)(!0);(0,Q.useEffect)(()=>(i.current=!0,()=>{i.current=!1}),[]);let a=(0,Q.useCallback)(t=>{if(!e)return Promise.resolve(null);let n=mt(e);if(n?.pickedAccountProvider===t&&typeof n.pickedAccountId==`string`)return Promise.resolve({id:n.pickedAccountId,label:typeof n.pickedAccountLabel==`string`?n.pickedAccountLabel:null});if(ni(e,t))return Promise.resolve(null);let a=n=>i.current?qr(e,t,n):n,o=r.current.get(t);if(o)return o.then(a);let s=ei(e),c=(s?s.catch(()=>null):Promise.resolve(null)).then(()=>{let n=mt(e);return n?.pickedAccountProvider===t&&typeof n.pickedAccountId==`string`?{id:n.pickedAccountId,label:typeof n.pickedAccountLabel==`string`?n.pickedAccountLabel:null}:ni(e,t)?null:Sn(t,AbortSignal.timeout(3e4))}).then(a).catch(e=>{throw r.current.get(t)===c&&r.current.delete(t),e});return r.current.set(t,c),c},[e]);return(0,Q.useEffect)(()=>{n&&a(t).catch(()=>{})},[n,t,a]),a}var Yr=(e,t,n)=>W.post(e,t,{signal:n}),Xr=new Map,Zr=new Set,Qr=new Map;function $r(e,t,n){let r=Xr.get(e);if(r)return r;let i=Yr(`${U(t.name)}/chat/prepare`,n,AbortSignal.timeout(it)).then(n=>(Xr.get(e)===i?(Zr.add(e),ai(e,t,n)):ii(t,n),n));Xr.set(e,i),n.providerId&&Rt(t.name,n.providerId,i.then(e=>e.slash,()=>null));let a=()=>{setTimeout(()=>{Xr.get(e)===i&&Xr.delete(e)},it)};return i.then(a,a),i}function ei(e){return e?Xr.get(e):void 0}function ti(e){return Zr.has(e)}function ni(e,t){return Qr.get(e)===t}function ri(e){Xr.delete(e),Zr.delete(e),Qr.delete(e)}function ii(e,t){V(t.settings),Ne(Pe(e),t.providers),rt(e.name,t.providers),t.tags&&qe.getState().seedTags(e,t.tags),t.slash&&Tt(e,t.providerId,t.slash)}function ai(e,t,n){ii(t,n),n.pickedAccount===null&&Qr.set(e,n.providerId);let r=n.pickedAccount&&n.pickedAccount!==`timeout`&&n.pickedAccount!==`skipped`?n.pickedAccount:null;qr(e,n.providerId,r),n.usage&&fi(ui(t.name,n.providerId,void 0,r?.id),n.usage,n.usage.lastFetchedAt??null,r?.id)}var oi=12e4,si=3e4,ci=new Map,li=new Map;function ui(e,t,n,r){return JSON.stringify([e,t,n,r])}function di(e,t,n,r){let i=!n||t?.activeAccountId===n;return{scope:e,usage:i?t??{}:{},fetchedAt:i?r??null:null}}function fi(e,t,n,r){ci.set(e,di(e,t,r,n)),li.set(e,Date.now())}function pi(e,t=`claude`,n,r,i=!0,a){let o=n?void 0:r,s=ui(e,t,n,r),[c,l]=(0,Q.useState)(null),[u,d]=(0,Q.useState)(!1),f=(0,Q.useRef)(null),p=(0,Q.useRef)(0),m=(0,Q.useCallback)((a=!1)=>{if(!i||!e)return Promise.resolve();let c=++p.current;d(!0);let u=a?`&refresh=1`:``,f=n?`&session=${encodeURIComponent(n)}`:``,m=o?`&accountId=${encodeURIComponent(o)}`:``;return W.get(`${U(e)}/chat/usage?providerId=${t}${f}${m}${u}`).then(e=>{if(c!==p.current)return;let t=di(s,e,r,e?.lastFetchedAt);ci.set(s,t),l(t)}).catch(()=>{}).finally(()=>{c===p.current&&d(!1)})},[e,t,n,o,r,s,i]);(0,Q.useEffect)(()=>{if(l(null),d(!1),!i)return;let e=!1,t,n=()=>{e||(t=setTimeout(()=>m(),500))},r=a?ei(a):void 0;return r?r.then(()=>{if(e)return;let t=li.get(s),r=ci.get(s);if(r&&t!==void 0&&Date.now()-t<si){l(r);return}n()},()=>{e||n()}):n(),f.current=setInterval(()=>m(),oi),()=>{e=!0,++p.current,t&&clearTimeout(t),f.current&&clearInterval(f.current)}},[m,i,a,s]);let h=(0,Q.useCallback)(()=>m(!0),[m]),g=(0,Q.useCallback)(()=>m(),[m]),_=i?c?.scope===s?c:ci.get(s):null;return{usageInfo:_?.usage??{},usageLoading:u,lastFetchedAt:_?.fetchedAt??null,refreshUsage:h,reloadUsage:g}}function mi(e){let{tabId:t,sessionId:n,designSlug:r,projectName:i,providerId:a}=e;(0,Q.useEffect)(()=>{if(!t||!n||r||!i||Be.getState().getPanelForTab(t)?.tabs.find(e=>e.id===t)?.type!==`chat`)return;let e=!1;return W.get(`${U(i)}/chat/sessions/${encodeURIComponent(n)}/design`).then(({designSlug:r})=>{if(e||!r)return;let o=Be.getState().getPanelForTab(t)?.id;Vt({projectName:i,slug:r,sessionId:n,providerId:a,panelId:o,inPlace:!0}),Be.getState().closeTab(t,o)}).catch(()=>{}),()=>{e=!0}},[t,n,r,i,a])}function hi(e){if(e.role===`assistant`)return(e.events?.length?e.events.filter(e=>e.type===`text`).map(e=>e.content).join(``):e.content).trim();if(e.role!==`user`)return``;let t=pn(e.content);if(t.tags.some(e=>[`task-notification`,`environment_details`,`local-command-caveat`].includes(e.name)))return``;let n=[t.command?.name,t.text].filter(Boolean);return t.files.length&&n.push(`Attached files: ${t.files.map(e=>e.split(/[\\/]/).pop()).join(`, `)}`),n.join(`
|
|
6
|
-
`).trim()}function gi(e,t,n){let r=hi(e);if(!r||e.role===`system`||e.id.startsWith(`streaming-`))return null;let i=Array.from(r);return{version:1,sessionId:t,providerId:n,messageId:e.id,...e.sdkUuid?{sdkUuid:e.sdkUuid}:{},role:e.role,timestamp:e.timestamp,quote:i.slice(0,yn).join(``),truncated:i.length>yn}}function _i(e,t,n,r){if(t.sessionId!==n||t.providerId!==r)return null;let i=e=>{if(e.role!==t.role)return!1;let n=hi(e);return t.truncated?Array.from(n).slice(0,yn).join(``)===t.quote:n===t.quote},a=e.filter(e=>(t.sdkUuid&&e.sdkUuid===t.sdkUuid||e.id===t.messageId&&e.timestamp===t.timestamp)&&i(e));if(a.length===1)return a[0];if(a.length>1)return null;let o=e.filter(e=>e.timestamp===t.timestamp&&i(e));return o.length===1?o[0]:null}function vi(e){let t=Array(e.length),n=0;for(let r=0;r<e.length;r++){let i=e[r].role===`user`;i&&n++,t[r]=i?n:0}return t}var yi={damping:.7,stiffness:.05,mass:1.25},bi=70,xi=1e3/60,Si=350,Ci=!1;globalThis.document?.addEventListener(`mousedown`,()=>{Ci=!0}),globalThis.document?.addEventListener(`mouseup`,()=>{Ci=!1}),globalThis.document?.addEventListener(`click`,()=>{Ci=!1});var wi=(e={})=>{let[t,n]=(0,Q.useState)(!1),[r,i]=(0,Q.useState)(e.initial!==!1),[a,o]=(0,Q.useState)(!1),s=(0,Q.useRef)(null);s.current=e;let c=(0,Q.useCallback)(()=>{if(!Ci)return!1;let e=window.getSelection();if(!e||!e.rangeCount)return!1;let t=e.getRangeAt(0);return t.commonAncestorContainer.contains(g.current)||g.current?.contains(t.commonAncestorContainer)},[]),l=(0,Q.useCallback)(e=>{d.isAtBottom=e,i(e)},[]),u=(0,Q.useCallback)(e=>{d.escapedFromLock=e,n(e)},[]),d=(0,Q.useMemo)(()=>{let n;return{escapedFromLock:t,isAtBottom:r,resizeDifference:0,accumulated:0,velocity:0,listeners:new Set,get scrollTop(){return g.current?.scrollTop??0},set scrollTop(e){if(g.current){let{scrollBehavior:t}=getComputedStyle(g.current);t!==`auto`&&(g.current.style.scrollBehavior=`auto`),g.current.scrollTop=e,d.ignoreScrollToTop=g.current.scrollTop,t!==`auto`&&(g.current.style.scrollBehavior=t)}},get targetScrollTop(){return!g.current||!_.current?0:g.current.scrollHeight-1-g.current.clientHeight},get calculatedTargetScrollTop(){if(!g.current||!_.current)return 0;let{targetScrollTop:t}=this;if(!e.targetScrollTop)return t;if(n?.targetScrollTop===t)return n.calculatedScrollTop;let r=Math.max(Math.min(e.targetScrollTop(t,{scrollElement:g.current,contentElement:_.current}),t),0);return n={targetScrollTop:t,calculatedScrollTop:r},requestAnimationFrame(()=>{n=void 0}),r},get scrollDifference(){return this.calculatedTargetScrollTop-this.scrollTop},get isNearBottom(){return this.scrollDifference<=bi}}},[]),f=(0,Q.useCallback)((e={})=>{typeof e==`string`&&(e={animation:e}),e.preserveScrollPosition||l(!0);let t=Date.now()+(Number(e.wait)||0),n=Di(s.current,e.animation),{ignoreEscapes:r=!1}=e,i,a=d.calculatedTargetScrollTop;e.duration instanceof Promise?e.duration.finally(()=>{i=Date.now()}):i=t+(e.duration??0);let o=async()=>{let e=new Promise(requestAnimationFrame).then(()=>{if(!d.isAtBottom)return d.animation=void 0,!1;let{scrollTop:l}=d,u=performance.now(),p=(u-(d.lastTick??u))/xi;if(d.animation||={behavior:n,promise:e,ignoreEscapes:r},d.animation.behavior===n&&(d.lastTick=u),c()||t>Date.now())return o();if(l<Math.min(a,d.calculatedTargetScrollTop)){if(d.animation?.behavior===n){if(n===`instant`)return d.scrollTop=d.calculatedTargetScrollTop,o();d.velocity=(n.damping*d.velocity+n.stiffness*d.scrollDifference)/n.mass,d.accumulated+=d.velocity*p,d.scrollTop+=d.accumulated,d.scrollTop!==l&&(d.accumulated=0)}return o()}return i>Date.now()?(a=d.calculatedTargetScrollTop,o()):(d.animation=void 0,d.scrollTop<d.calculatedTargetScrollTop?f({animation:Di(s.current,s.current.resize),ignoreEscapes:r,duration:Math.max(0,i-Date.now())||void 0}):d.isAtBottom)});return e.then(e=>(requestAnimationFrame(()=>{d.animation||(d.lastTick=void 0,d.velocity=0)}),e))};return e.wait!==!0&&(d.animation=void 0),d.animation?.behavior===n?d.animation.promise:o()},[l,c,d]),p=(0,Q.useCallback)(()=>{u(!0),l(!1)},[u,l]),m=(0,Q.useCallback)(({target:e})=>{if(e!==g.current)return;let{scrollTop:t,ignoreScrollToTop:n}=d,{lastScrollTop:r=t}=d;d.lastScrollTop=t,d.ignoreScrollToTop=void 0,n&&n>t&&(r=n),o(d.isNearBottom),setTimeout(()=>{if(d.resizeDifference||t===n)return;if(c()){u(!0),l(!1);return}let e=t>r,i=t<r;if(d.animation?.ignoreEscapes){d.scrollTop=r;return}i&&(u(!0),l(!1)),e&&u(!1),!d.escapedFromLock&&d.isNearBottom&&l(!0)},1)},[u,l,c,d]),h=(0,Q.useCallback)(({target:e,deltaY:t})=>{let n=e;for(;![`scroll`,`auto`].includes(getComputedStyle(n).overflow);){if(!n.parentElement)return;n=n.parentElement}n===g.current&&t<0&&g.current.scrollHeight>g.current.clientHeight&&!d.animation?.ignoreEscapes&&(u(!0),l(!1))},[u,l,d]),g=Ti(e=>{g.current?.removeEventListener(`scroll`,m),g.current?.removeEventListener(`wheel`,h),e?.addEventListener(`scroll`,m,{passive:!0}),e?.addEventListener(`wheel`,h,{passive:!0})},[]),_=Ti(e=>{if(d.resizeObserver?.disconnect(),d.resizeObserver=void 0,!e)return;let t;d.resizeObserver=new ResizeObserver(([e])=>{let{height:n}=e.contentRect,r=n-(t??n);if(d.resizeDifference=r,d.scrollTop>d.targetScrollTop&&(d.scrollTop=d.targetScrollTop),o(d.isNearBottom),r>=0){let e=Di(s.current,t?s.current.resize:s.current.initial);f({animation:e,wait:!0,preserveScrollPosition:!0,duration:e===`instant`?void 0:Si})}else d.isNearBottom&&(u(!1),l(!0));t=n,requestAnimationFrame(()=>{setTimeout(()=>{d.resizeDifference===r&&(d.resizeDifference=0)},1)})}),d.resizeObserver?.observe(e)},[]);return{contentRef:_,scrollRef:g,scrollToBottom:f,stopScroll:p,isAtBottom:r||a,isNearBottom:a,escapedFromLock:t,state:d}};function Ti(e,t){let n=(0,Q.useCallback)(t=>(n.current=t,e(t)),t);return n}var Ei=new Map;function Di(...e){let t={...yi},n=!1;for(let r of e){if(r===`instant`){n=!0;continue}typeof r==`object`&&(n=!1,t.damping=r.damping??t.damping,t.stiffness=r.stiffness??t.stiffness,t.mass=r.mass??t.mass)}let r=JSON.stringify(t);return Ei.has(r)||Ei.set(r,Object.freeze(t)),n?`instant`:Ei.get(r)}var Oi=60,ki=8,Ai=1400;function ji(e){if(e.scrollHeight<=e.clientHeight)return!1;let t=getComputedStyle(e).overflowY;return t===`auto`||t===`scroll`}function Mi(e,t){let n=[],r=e.parentElement;for(;r&&r!==t;)ji(r)&&n.push(r),r=r.parentElement;return n}function Ni(){return typeof matchMedia==`function`&&matchMedia(`(prefers-reduced-motion: reduce)`).matches}function Pi(e,t){let n=e.querySelector(`[data-edit-ref="${CSS.escape(t)}"]`);if(n)return{el:n,level:`edit`};let r=t.replace(/-\d+$/,``),i=e.querySelector(`[data-tool-ref="${CSS.escape(r)}"]`);return i?{el:i,level:`card`}:null}function Fi(e,t,n,r){let i=e.scrollTop+t.getBoundingClientRect().top-e.getBoundingClientRect().top-n;e.scrollTo({top:i,behavior:r?`smooth`:`auto`})}function Ii(e,t){let n=Pi(e,t);if(!n)return()=>{};let{el:r,level:i}=n;for(let t of Mi(r,e))Fi(t,r,ki,!1);Fi(e,r,Oi,!Ni()),r.dataset.flash=i;let a=setTimeout(()=>{delete r.dataset.flash},Ai);return()=>{clearTimeout(a),delete r.dataset.flash}}var Li=(e,t)=>`${e}\0${t.toolUseId??``}\0${t.editIndex}`,Ri=e=>e.replace(/\\/g,`/`);function zi(e,t,n){let r=new Map(t.map(e=>[Ri(e.path),e])),i=new Map;for(let t of e){let e=r.get(Ri(t.filePath)),a=!!e?.blocks?.some(e=>e.calls?.length);for(let r of t.edits){let o=Li(t.filePath,r),s=n.get(o),c=r.toolUseId&&e?.blocks?e.blocks.filter(e=>e.calls?.includes(r.toolUseId)):[],l=null;c.length>0?l=c.every(e=>e.kept)?`kept`:`open`:e?.sinceReview&&r.toolUseId?l=`kept`:(s||a&&r.toolUseId)&&(l=`reverted`),i.set(o,{state:l,...e?{file:e}:{},keys:c.map(e=>e.key),...s?{undoId:s}:{}})}}return i}function Bi(e){let t={open:0,kept:0,reverted:0,known:0};for(let n of e.values())n.state&&(t.known++,t[n.state]++);return t}function Vi(e){return e.known===0?null:e.open>0?{tone:`todo`,text:`${e.open} edit${e.open===1?``:`s`} to review`}:e.reverted>0?{tone:`reverted`,text:`${e.reverted} reverted`}:{tone:`kept`,text:`Kept`}}function Hi(e,t){let n=new Map;for(let r of e){if(!r.file)continue;let e=new Set(r.file.blocks?.filter(e=>!e.kept).map(e=>e.key)),i=t===`open`?r.keys.filter(t=>e.has(t)):r.keys;if(i.length===0)continue;let a=n.get(r.file.path)??{path:r.file.path,version:r.file.version,keys:new Set};for(let e of i)a.keys.add(e);n.set(r.file.path,a)}return[...n.values()].map(e=>({path:e.path,version:e.version,keys:[...e.keys]}))}var Ui=(0,Q.createContext)(null),Wi=()=>(0,Q.useContext)(Ui),Gi=new Map;function Ki(e){return e instanceof Error?e.message:`The change could not be saved.`}function qi({changes:e,turn:t}){let n=Wi(),[r,i]=(0,Q.useState)(new Map),[a,o]=(0,Q.useState)(!1),[s,c]=(0,Q.useState)(null),l=(0,Q.useMemo)(()=>n&&e?zi(e,n.files,r):Gi,[n,e,r]),u=(0,Q.useMemo)(()=>Bi(l),[l]),d=(0,Q.useCallback)(()=>{n&&(n.refresh(),On({projectName:n.projectName,sessionId:n.sessionId}))},[n]),f=(0,Q.useCallback)(async(e,t=!0)=>{o(!0);try{return await e()}catch(e){return c({text:Ki(e)}),null}finally{o(!1),t&&d()}},[d]),p=(0,Q.useCallback)((e,t)=>{let n=[];for(let[r,i]of l)i.file?.path===e&&i.keys.some(e=>t.includes(e))&&n.push(r);return n},[l]),m=(0,Q.useCallback)((e,t,r)=>{if(!n)return;let a=Hi(t,r);a.length!==0&&f(async()=>{let t=await Mn(n.projectName,n.sessionId,e,a),r=t.files.filter(e=>e.stale||e.error);if(r.length>0&&c({text:r.some(e=>e.stale)?`A file changed since this was shown. Look again before answering.`:r[0].error}),e===`revert`&&t.undoId){let e=t.undoId,n=a.reduce((e,t)=>e+t.keys.length,0);i(t=>{let n=new Map(t);for(let t of a)for(let r of p(t.path,t.keys))n.set(r,e);return n}),c({text:`Reverted ${n===1?`1 block`:`${n} blocks`}.`,undoId:e})}return t})},[n,f,p]),h=(0,Q.useCallback)(e=>{n&&f(async()=>{let t=await Ln(n.projectName,n.sessionId,e);return t.stale?(c({text:`Nothing was put back: a file changed after the revert.`}),t):(i(t=>new Map([...t].filter(([,t])=>t!==e))),c(null),t)})},[n,f]),g=e=>l.get(e),_=e=>{let t=g(e);t?.state===`open`&&m(`keep`,[t],`open`)},v=e=>{let t=g(e);(t?.state===`open`||t?.state===`kept`)&&m(`revert`,[t],`all`)},y=e=>{let t=g(e);t?.state===`kept`&&t.keys.length>0?m(`open`,[t],`all`):t?.state===`reverted`&&t.undoId&&h(t.undoId)},b=()=>m(`keep`,[...l.values()].filter(e=>e.state===`open`),`open`),x=(0,Q.useCallback)(async()=>!n||!t?null:f(()=>Rn(n.projectName,n.sessionId,t.calls),!1),[n,t,f]),S=(0,Q.useCallback)(async e=>{if(!n||!t)return null;let r=await f(()=>Rn(n.projectName,n.sessionId,t.calls,e.files.map(e=>({path:e.path,version:e.version}))));if(!r)return null;if(r.stale)return r;let a=r.files.filter(e=>e.error);if(r.undoId){let e=r.undoId,t=new Set(r.files.filter(e=>e.action!==`none`).map(e=>e.path.replace(/\\/g,`/`)));i(n=>{let r=new Map(n);for(let[n,i]of l){let a=(i.file?.path??n.split(`\0`)[0]).replace(/\\/g,`/`);t.has(a)&&r.set(n,e)}return r})}return c(a.length>0?{text:`${a.length} file${a.length===1?``:`s`} could not be written: ${a[0].error}`,...r.undoId?{undoId:r.undoId}:{}}:r.undoId?{text:`Reverted this turn's changes.`,undoId:r.undoId}:{text:`Nothing to put back.`}),null},[n,t,f,l]);return{enabled:!!n&&u.known>0,reviews:l,summary:u,busy:a,notice:s,dismissNotice:()=>c(null),keep:_,revert:v,change:y,keepAll:b,previewRevertTurn:x,applyRevertTurn:S,undo:h,openReview:e=>n?.openReview(e)}}function Ji(e){try{return new Date(e).toLocaleString()}catch{return``}}function Yi({icon:e,label:t,title:n,onClick:r,touchTarget:i}){return(0,$.jsxs)(`button`,{type:`button`,onClick:r,title:n,"aria-label":t,className:q(`inline-flex items-center justify-center gap-1 rounded-md px-1.5 py-1 text-text-subtle hover:text-text-primary hover:bg-surface transition-colors`,i&&`min-h-[44px] min-w-[44px] md:min-h-0 md:min-w-0`),children:[e,(0,$.jsx)(`span`,{children:t})]})}function Xi({content:e}){let[t,n]=(0,Q.useState)(!1);return(0,$.jsx)(Yi,{icon:t?(0,$.jsx)(a,{className:`size-3.5`}):(0,$.jsx)(I,{className:`size-3.5`}),label:t?`Copied`:`Copy`,title:`Copy message to clipboard`,onClick:()=>{st(e),n(!0),setTimeout(()=>n(!1),1500)}})}function Zi({timestamp:e,content:t,className:n,children:r}){return(0,$.jsxs)(`div`,{className:q(`flex items-center gap-0.5 flex-wrap text-xs text-text-subtle select-none`,n),children:[(0,$.jsx)(`time`,{title:Ji(e),className:`pr-1 tabular-nums`,children:$e(e)}),(0,$.jsx)(Xi,{content:t}),r]})}function Qi(e){let t=0,n=0;for(let r of e)t+=r.linesAdded,n+=r.linesRemoved;return{added:t,removed:n}}function $i({count:e,totals:t,status:n,open:r,onToggle:i,ref:o}){let s=`${e} file${e===1?``:`s`}`;return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`span`,{"aria-hidden":!0,className:`mx-1.5 h-3.5 w-px bg-border-soft`}),(0,$.jsxs)(`button`,{ref:o,type:`button`,onClick:i,"aria-expanded":r,"aria-label":`${s} changed this turn, ${t.added} added, ${t.removed} removed${n?`, ${n.text}`:``}`,className:q(`inline-flex items-center gap-[7px] rounded-full font-mono text-[11.5px]`,`px-3 min-h-11 md:min-h-0 md:px-[9px] md:py-[5px]`,`text-text-secondary transition-colors hover:bg-surface hover:text-text-primary`,r&&`bg-accent-wash text-text-primary`),children:[(0,$.jsx)(`span`,{"aria-hidden":!0,className:`size-[5px] shrink-0 rounded-full bg-primary`}),(0,$.jsx)(`span`,{children:s}),(0,$.jsxs)(`span`,{className:`flex items-center gap-[5px] tabular-nums`,children:[(0,$.jsxs)(`span`,{className:`text-success`,children:[`+`,t.added]}),(0,$.jsxs)(`span`,{className:`text-error`,children:[`−`,t.removed]})]}),n&&(0,$.jsxs)(`span`,{"data-testid":`turn-review-status`,className:q(`inline-flex items-center gap-[5px] border-l border-border-soft pl-2 font-sans`,n.tone===`todo`?`text-warning`:n.tone===`kept`?`text-success`:`text-text-2`),children:[n.tone===`todo`&&(0,$.jsx)(`span`,{"aria-hidden":!0,className:`size-1.5 rounded-full bg-current`}),n.tone===`kept`&&(0,$.jsx)(a,{className:`size-3`}),n.text]})]})]})}function ea(e){if(!e)return!1;let t=e.closest(`[data-tab-pool-id]`)?.dataset.tabPoolId;if(!t)return e.offsetParent!==null;let{panels:n,focusedPanelId:r}=Be.getState();return n[r]?.activeTabId===t}var ta=(0,Q.lazy)(()=>K(()=>import(`./edit-diff-preview-DyWUMlkI.js`),__vite__mapDeps([0,1,2,3])));function na(e){let t=Math.max(e.lastIndexOf(`/`),e.lastIndexOf(`\\`));return t<0?{base:e,dir:``}:{base:e.slice(t+1),dir:e.slice(0,t)}}var ra=(e,t)=>`${e} ${t}${e===1?``:`s`}`;function ia(e){return`${ra(e.reduce((e,t)=>e+t.edits.length,0),`edit`)} in ${ra(e.length,`file`)}`}var aa=`inline-flex items-center gap-1.5 whitespace-nowrap border font-medium transition-colors disabled:opacity-50`;function oa({review:e,mobile:t,busy:n,onKeep:r,onRevert:i}){let o=t?`h-11 flex-1 justify-center rounded-[10px] px-3.5 text-sm`:`h-[26px] rounded-[7px] px-2.5 text-xs`;return(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`button`,{type:`button`,disabled:n,title:e.keys.length>1?`Put back the ${e.keys.length} blocks this edit wrote`:`Put these lines back`,onClick:i,className:q(aa,o,`border-border bg-bg text-text hover:border-error/50 hover:text-error`),children:[(0,$.jsx)(fe,{className:t?`size-5`:`size-3.5`}),`Revert`]}),(0,$.jsxs)(`button`,{type:`button`,disabled:n,title:`Keep this change`,onClick:r,className:q(aa,o,`border-transparent bg-primary text-primary-foreground hover:bg-primary/90`),children:[(0,$.jsx)(a,{className:t?`size-5`:`size-3.5`}),`Keep`]})]})}function sa({change:e,edit:t,index:n,review:r,mobile:i,busy:o,actions:s,onJump:c}){let l=Li(e.filePath,t),u=r?.state??null,d=u===`kept`||u===`reverted`,f=u===`kept`?(r?.keys.length??0)>0:u===`reverted`&&!!r?.undoId;return(0,$.jsxs)(`div`,{"data-edit-key":l,"data-state":u??`unknown`,className:q(`mt-1.5 rounded-lg border border-border-soft bg-bg`,d&&`border-dashed`),children:[(0,$.jsxs)(`div`,{className:q(`flex flex-wrap items-center gap-x-2 gap-y-1.5 py-1 pr-1.5 pl-2.5 text-[11.5px] text-text-subtle`,i?`min-h-[52px]`:`min-h-9`,!d&&`border-b border-border-soft`),children:[(0,$.jsxs)(`span`,{children:[(0,$.jsxs)(`b`,{className:`font-semibold text-text-2`,children:[`Edit `,n+1]}),` of `,e.edits.length]}),t.editRef&&(0,$.jsxs)(`button`,{type:`button`,title:`Scroll the chat to the tool card that made this edit`,onClick:()=>c(t.editRef),className:q(`inline-flex items-center gap-1 whitespace-nowrap rounded-[5px] px-1.5 font-medium text-text-2 hover:bg-surface-hover hover:text-text`,i?`min-h-11`:`h-6`),children:[(0,$.jsx)(de,{className:`size-3.5`}),i?`Chat`:`Show in chat`]}),(0,$.jsx)(`span`,{className:`flex-1`}),u===`open`&&!i&&(0,$.jsx)(oa,{review:r,mobile:!1,busy:o,onKeep:()=>s.keep(l),onRevert:()=>s.revert(l)}),d&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`span`,{className:q(`inline-flex items-center gap-1 font-semibold`,u===`kept`?`text-primary`:`text-error`),children:[u===`kept`?(0,$.jsx)(a,{className:`size-3.5`}):(0,$.jsx)(fe,{className:`size-3.5`}),u===`kept`?`Kept`:`Reverted`]}),f&&(0,$.jsxs)(`button`,{type:`button`,disabled:o,title:u===`reverted`?`Put back what the agent wrote here`:`Open this edit again`,onClick:()=>s.change(l),className:q(`inline-flex items-center gap-1 whitespace-nowrap rounded-[5px] px-1.5 font-medium text-text-2 hover:bg-surface-hover hover:text-text disabled:opacity-50`,i?`min-h-11`:`h-6`),children:[(0,$.jsx)(ie,{className:`size-3.5`}),`Change`]})]})]}),!d&&(0,$.jsx)(`div`,{className:`px-1 py-1`,children:(0,$.jsx)(Q.Suspense,{fallback:(0,$.jsx)(`div`,{className:`h-4`}),children:(0,$.jsx)(ta,{oldStr:t.oldStr,newStr:t.newStr,filePath:e.filePath})})}),u===`open`&&i&&(0,$.jsx)(`div`,{className:`flex gap-2 border-t border-border-soft p-2`,children:(0,$.jsx)(oa,{review:r,mobile:!0,busy:o,onKeep:()=>s.keep(l),onRevert:()=>s.revert(l)})})]})}function ca({change:e,review:t,mobile:n,onJump:r}){let{base:i,dir:a}=na(e.filePath);return(0,$.jsxs)(`div`,{"data-file-group":e.filePath,children:[(0,$.jsxs)(`div`,{className:`flex min-h-10 items-center gap-2 pt-1.5 text-[13px]`,title:e.filePath,children:[(0,$.jsx)(ft,{name:i,className:`size-4 shrink-0`}),(0,$.jsx)(`b`,{className:`shrink-0 font-semibold`,children:i}),a&&(0,$.jsx)(`span`,{className:`min-w-0 overflow-hidden text-ellipsis whitespace-nowrap text-left text-xs text-text-subtle [direction:rtl]`,children:(0,$.jsx)(`bdi`,{children:a})}),e.viaSubagent&&(0,$.jsxs)(`span`,{title:`Changed by a sub-agent`,className:`inline-flex shrink-0 items-center gap-[3px] rounded px-[5px] text-[10px] font-semibold leading-[15px] text-info bg-[color-mix(in_srgb,var(--info)_14%,transparent)]`,children:[(0,$.jsx)(Ee,{className:`size-3`}),`Sub-agent`]}),(0,$.jsx)(`span`,{className:`flex-1`}),(0,$.jsx)(jn,{added:e.linesAdded,removed:e.linesRemoved,className:`shrink-0 font-mono text-[11px]`})]}),e.edits.map((i,a)=>(0,$.jsx)(sa,{change:e,edit:i,index:a,review:t.reviews.get(Li(e.filePath,i)),mobile:n,busy:t.busy,actions:t,onJump:r},i.editRef??`${i.toolUseId}:${a}`))]})}function la({notice:e,mobile:t,busy:n,onUndo:r,onDismiss:i}){return(0,$.jsxs)(`div`,{role:`status`,"data-testid":`turn-review-notice`,className:q(`flex items-center gap-2 border-b border-border-soft bg-panel-2 pl-3.5`,t?`min-h-12 pr-1 text-sm`:`min-h-9 pr-1.5 text-xs`),children:[(0,$.jsx)(`span`,{className:`min-w-0 flex-1`,children:e.text}),e.undoId&&(0,$.jsx)(ct,{variant:`ghost`,size:t?`sm`:`xs`,className:q(`text-primary hover:text-primary`,t&&`h-11`),disabled:n,onClick:()=>r(e.undoId),children:`Undo`}),(0,$.jsx)(`button`,{type:`button`,"aria-label":`Dismiss`,onClick:i,className:q(`inline-grid shrink-0 place-items-center rounded-md text-text-subtle hover:bg-surface-hover hover:text-text`,t?`size-11`:`size-6`),children:(0,$.jsx)(ve,{className:`size-3.5`})})]})}function ua(e){let[t,n]=(0,Q.useState)(null),{previewRevertTurn:r,applyRevertTurn:i}=e,a=(0,Q.useCallback)(()=>n(null),[]),o=(0,Q.useCallback)(async()=>{n({preview:null,loading:!0,moved:!1});let e=await r();n(e?{preview:e,loading:!1,moved:!1}:null)},[r]),s=(0,Q.useCallback)(async()=>{if(!t?.preview)return;n({...t,loading:!0});let e=await i(t.preview);n(e?{preview:{files:e.files},loading:!1,moved:!0}:null)},[t,i]);return{open:!!t,preview:t?.preview??null,loading:t?.loading??!1,moved:t?.moved??!1,start:o,cancel:a,confirm:s}}function da(e){return e.files.filter(e=>e.action!==`none`)}function fa(e){return e.action===`delete`?`file removed`:e.action===`restore`?`file put back`:ra(e.changes,`change`)}function pa(){let e=Wi()?.sessionId,t=Cn(t=>e?t.bySession[e]?.byCall:void 0);return e=>{let n=[],r=!1;for(let i of e){let e=i?t?.get(i):void 0;e&&!n.includes(e)?n.push(e):e||(r=!0)}let i=n.map(gn);return(r||i.length===0)&&i.push(e.length===0?`a later change`:`a change outside this chat`),i.join(` and `)}}function ma({preview:e,mobile:t}){let n=pa(),r=da(e),i=e.files.flatMap(e=>e.skipped.map(t=>({f:e,s:t}))),a=e.files.filter(e=>e.error),o=(e,n,r=!1)=>(0,$.jsx)(`div`,{className:q(`flex items-center gap-2.5 border-b border-border-soft px-3.5 py-1.5 last:border-b-0`,t?`min-h-[52px] text-sm`:`min-h-9 text-[12.5px]`,r&&`bg-[color-mix(in_srgb,var(--warning)_9%,transparent)]`),children:e},n);return r.length===0&&i.length===0&&a.length===0?(0,$.jsx)(`p`,{className:`m-0 text-text-2`,children:`Nothing this turn wrote is left to put back.`}):(0,$.jsxs)(`div`,{className:`overflow-hidden rounded-xl border border-border-soft`,"data-testid":`revert-turn-summary`,children:[r.map(e=>{let{base:t,dir:n}=na(e.path);return o((0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(ft,{name:t,className:`size-4 shrink-0`}),(0,$.jsxs)(`span`,{className:`flex min-w-0 flex-1 flex-col leading-[1.3]`,children:[(0,$.jsx)(`b`,{className:`truncate font-medium`,children:t}),(0,$.jsxs)(`small`,{className:`flex min-w-0 gap-1 whitespace-nowrap text-[11.5px] text-text-subtle`,children:[n&&(0,$.jsx)(`span`,{className:`min-w-0 overflow-hidden text-ellipsis text-left [direction:rtl]`,children:(0,$.jsx)(`bdi`,{children:n})}),(0,$.jsxs)(`span`,{className:`shrink-0`,children:[n&&`· `,fa(e)]})]})]}),(0,$.jsx)(jn,{added:e.added,removed:e.removed,className:`shrink-0 font-mono text-[11px]`})]}),`f:${e.path}`)}),i.map(({f:e,s:t},r)=>o((0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(xe,{className:`size-4 shrink-0 text-warning`}),(0,$.jsxs)(`span`,{className:`min-w-0 flex-1 leading-[1.4] text-text-2`,children:[(0,$.jsx)(`b`,{className:`font-semibold text-text`,children:na(e.path).base}),` line `,t.line,` stays as it is — `,n(t.by),` changed it again.`]})]}),`s:${e.path}:${r}`,!0)),a.map(e=>o((0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(xe,{className:`size-4 shrink-0 text-error`}),(0,$.jsxs)(`span`,{className:`min-w-0 flex-1 leading-[1.4] text-text-2`,children:[(0,$.jsx)(`b`,{className:`font-semibold text-text`,children:na(e.path).base}),`: `,e.error]})]}),`e:${e.path}`,!0))]})}function ha({flow:e,mobile:t}){if(!e.preview)return(0,$.jsx)(`p`,{className:`m-0 text-text-2`,children:`Working out what this turn wrote…`});let n=da(e.preview),r=n.reduce((e,t)=>e+t.added,0),i=n.reduce((e,t)=>e+t.removed,0),a=e.preview.files.some(e=>e.skipped.length>0);return(0,$.jsxs)($.Fragment,{children:[e.moved&&(0,$.jsx)(`p`,{className:`m-0 mb-2 font-medium text-warning`,children:`A file changed since — this is what reverting does now.`}),n.length>0&&(0,$.jsxs)(`p`,{className:`m-0 mb-3 text-text-2`,children:[`Puts back what this answer wrote, on disk: `,ra(n.reduce((e,t)=>e+Math.max(t.changes,1),0),`change`),` in `,ra(n.length,`file`),`,`,` `,(0,$.jsxs)(`span`,{className:`font-mono text-success`,children:[`+`,r]}),` `,(0,$.jsxs)(`span`,{className:`font-mono text-error`,children:[`−`,i]}),` undone.`,!a&&` No later turn changed these lines.`]}),(0,$.jsx)(ma,{preview:e.preview,mobile:t}),(0,$.jsx)(`p`,{className:q(`m-0 mt-3 text-text-subtle`,t?`text-[13px]`:`text-xs`),children:`The chat itself stays as it is. You can undo it right after.`})]})}var ga=null;function _a(e){return e instanceof HTMLElement?e.tagName===`INPUT`||e.tagName===`TEXTAREA`||e.isContentEditable:!1}function va({changes:e,turn:t,review:n,onJump:r,onClose:i}){let o=(0,Q.useRef)(null),s=(0,Q.useId)(),c=ua(n),l=Qi(e);(0,Q.useEffect)(()=>(ga=s,o.current?.querySelector(`button`)?.focus({preventScroll:!0}),()=>{ga===s&&(ga=null)}),[s]);let u=c.cancel,d=c.open;(0,Q.useEffect)(()=>{let e=e=>{e.key!==`Escape`||ga!==s||!ea(o.current)||_a(document.activeElement)||(e.preventDefault(),d?u():i())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[s,d,u,i]);let f=!!c.preview&&da(c.preview).length===0;return(0,$.jsxs)(`div`,{ref:o,"data-testid":`turn-change-tray`,className:`mt-0.5 rounded-xl border border-border bg-panel shadow-[var(--shadow-float)]`,children:[(0,$.jsxs)(`div`,{className:`relative flex min-h-12 flex-wrap items-center gap-x-2.5 gap-y-1.5 border-b border-border-soft py-1.5 pr-2 pl-3.5`,children:[(0,$.jsx)(`h4`,{className:`m-0 text-[13px] font-semibold`,children:`Changed this turn`}),(0,$.jsxs)(`span`,{className:`inline-flex items-center gap-1.5 text-xs text-text-subtle`,children:[ia(e),` · `,(0,$.jsx)(jn,{added:l.added,removed:l.removed,className:`font-mono text-[11px]`})]}),(0,$.jsxs)(`div`,{className:`relative ml-auto flex flex-wrap items-center justify-end gap-1.5`,children:[n.enabled&&t&&(0,$.jsxs)(ct,{variant:`ghost`,size:`sm`,className:`text-text-secondary`,"aria-expanded":c.open,disabled:n.busy&&!c.open,onClick:()=>c.open?c.cancel():void c.start(),children:[(0,$.jsx)(fe,{}),`Revert turn…`]}),n.summary.open>0&&(0,$.jsxs)(ct,{size:`sm`,disabled:n.busy,onClick:n.keepAll,children:[(0,$.jsx)(a,{}),`Keep all`]}),n.enabled&&(0,$.jsxs)(ct,{variant:`ghost`,size:`sm`,className:`text-primary hover:text-primary`,onClick:()=>n.openReview(e[0]?.filePath),children:[(0,$.jsx)(z,{}),`Review in tab`]}),(0,$.jsx)(`button`,{type:`button`,onClick:i,"aria-label":`Close change tray`,title:`Close (Esc)`,className:`inline-grid size-8 shrink-0 place-items-center rounded-lg text-text-subtle transition-colors hover:bg-surface hover:text-text-primary`,children:(0,$.jsx)(ve,{className:`size-3.5`})}),c.open&&t&&(0,$.jsxs)(`div`,{role:`dialog`,"aria-label":`Revert ${gn(t)}?`,"data-testid":`revert-turn-confirm`,className:`absolute top-full right-0 z-40 mt-1.5 w-[400px] max-w-[calc(100vw-48px)] rounded-xl border border-border bg-panel-2 p-3.5 text-[12.5px] leading-normal shadow-[var(--shadow-float),0_18px_40px_-16px_rgba(0,0,0,.6)]`,children:[(0,$.jsxs)(`h5`,{className:`m-0 mb-1.5 flex items-center gap-2 text-[13px] font-semibold text-text`,children:[(0,$.jsx)(fe,{className:`size-4 text-error`}),`Revert `,gn(t),`?`]}),(0,$.jsx)(ha,{flow:c,mobile:!1}),(0,$.jsxs)(`div`,{className:`mt-3 flex justify-end gap-1.5`,children:[(0,$.jsx)(ct,{variant:`ghost`,size:`sm`,onClick:c.cancel,children:`Cancel`}),(0,$.jsxs)(ct,{variant:`destructive`,size:`sm`,disabled:c.loading||!c.preview||f,onClick:()=>void c.confirm(),children:[(0,$.jsx)(fe,{}),`Revert turn`]})]})]})]})]}),n.notice&&(0,$.jsx)(la,{notice:n.notice,mobile:!1,busy:n.busy,onUndo:n.undo,onDismiss:n.dismissNotice}),(0,$.jsx)(`div`,{className:`max-h-[560px] overflow-y-auto rounded-b-xl px-3 pt-1 pb-3`,children:e.map(e=>(0,$.jsx)(ca,{change:e,review:n,mobile:!1,onJump:r},e.filePath))})]})}var ya=`inline-flex h-11 flex-1 items-center justify-center gap-2 rounded-[10px] border px-3.5 text-sm font-medium disabled:opacity-50`;function ba({label:e,onClick:t,children:n}){return(0,$.jsx)(`button`,{type:`button`,onClick:t,"aria-label":e,className:`inline-flex size-11 shrink-0 items-center justify-center rounded-lg text-text-subtle transition-colors hover:bg-surface hover:text-text-primary`,children:n})}function xa({title:e,sub:t,icon:n,onClose:r,children:i}){return(0,$.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1 pt-0.5 pr-1.5 pb-2 pl-4`,children:[(0,$.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[n,(0,$.jsx)(`h4`,{className:`m-0 min-w-0 truncate text-[15px] font-semibold`,children:e})]}),t&&(0,$.jsx)(`p`,{className:`m-0 mt-0.5 line-clamp-2 text-xs text-text-subtle`,children:t})]}),i,(0,$.jsx)(ba,{label:`Close`,onClick:r,children:(0,$.jsx)(ve,{className:`size-5`})})]})}function Sa({changes:e,turn:t,review:n,open:r,onClose:i,onJump:o}){let s=(0,Q.useRef)(null),c=ua(n),{summary:l}=n,u=()=>{c.cancel(),i()},d=e=>{u(),o(e)};(0,Q.useEffect)(()=>{if(!r)return;let e=s.current,t=()=>Array.from(e?.querySelectorAll(`button:not([disabled])`)??[]);t()[0]?.focus();let n=e=>{if(e.key===`Escape`){e.preventDefault(),c.open?c.cancel():u();return}if(e.key!==`Tab`)return;let n=t();if(n.length===0)return;let r=n[0],i=n[n.length-1];e.shiftKey&&document.activeElement===r?(e.preventDefault(),i.focus()):!e.shiftKey&&document.activeElement===i&&(e.preventDefault(),r.focus())};return window.addEventListener(`keydown`,n),()=>window.removeEventListener(`keydown`,n)},[r,c.open]);let f=!!c.preview&&da(c.preview).length===0,p=t?vn(t.at):``;return(0,$.jsx)(Z,{open:r,onClose:u,className:`flex max-h-[90%] flex-col rounded-t-[14px] motion-reduce:animate-none`,children:(0,$.jsx)(`div`,{ref:s,"data-testid":`turn-change-sheet`,className:`flex min-h-0 flex-1 flex-col`,children:c.open&&t?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(xa,{title:`Revert ${gn(t)}?`,sub:[p,t.prompt].filter(Boolean).join(` · `),icon:(0,$.jsx)(fe,{className:`size-5 shrink-0 text-error`}),onClose:c.cancel}),(0,$.jsx)(`div`,{"data-testid":`revert-turn-confirm`,className:`min-h-0 flex-1 overflow-y-auto px-4 text-sm leading-normal`,children:(0,$.jsx)(ha,{flow:c,mobile:!0})}),(0,$.jsxs)(`div`,{className:`flex gap-2 px-4 pt-3 pb-1`,children:[(0,$.jsx)(`button`,{type:`button`,className:q(ya,`border-border bg-panel-2 text-text`),onClick:c.cancel,children:`Cancel`}),(0,$.jsxs)(`button`,{type:`button`,disabled:c.loading||!c.preview||f,className:q(ya,`border-transparent bg-[color-mix(in_srgb,var(--error)_85%,#000)] text-white`),onClick:()=>void c.confirm(),children:[(0,$.jsx)(fe,{className:`size-5`}),`Revert turn`]})]})]}):(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(xa,{title:`Changed this turn`,sub:`${ia(e)}${l.kept>0?` · ${l.kept} kept`:``}`,onClose:u,children:n.enabled&&(0,$.jsxs)(`button`,{type:`button`,onClick:()=>{u(),n.openReview(e[0]?.filePath)},className:`inline-flex h-11 shrink-0 items-center gap-1.5 rounded-lg px-2.5 text-sm font-medium text-primary`,children:[(0,$.jsx)(z,{className:`size-4`}),`Review`]})}),n.notice&&(0,$.jsx)(la,{notice:n.notice,mobile:!0,busy:n.busy,onUndo:n.undo,onDismiss:n.dismissNotice}),(0,$.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto border-t border-border-soft px-3 pb-3`,children:e.map(e=>(0,$.jsx)(ca,{change:e,review:n,mobile:!0,onJump:d},e.filePath))}),n.enabled&&(t||l.open>0)&&(0,$.jsxs)(`div`,{className:`flex gap-2 px-3 pt-2 pb-1`,children:[t&&(0,$.jsxs)(`button`,{type:`button`,disabled:n.busy,className:q(ya,`border-border bg-panel-2 text-text`),onClick:()=>void c.start(),children:[(0,$.jsx)(fe,{className:`size-5`}),`Revert turn…`]}),l.open>0&&(0,$.jsxs)(`button`,{type:`button`,disabled:n.busy,className:q(ya,`border-transparent bg-primary text-primary-foreground`),onClick:n.keepAll,children:[(0,$.jsx)(a,{className:`size-5`}),`Keep all `,l.open]})]})]})})})}function Ca({timestamp:e,content:t,changes:n,turn:r,onJumpToEdit:i,onReply:a}){let[o,s]=(0,Q.useState)(!1),c=X(),l=(0,Q.useRef)(null),u=qi({changes:n,turn:r}),d=Wi(),f=()=>{s(!1),l.current?.focus()},p=(0,$.jsxs)(Zi,{timestamp:e,content:t,className:`-mt-1.5`,children:[a&&(0,$.jsx)(Yi,{icon:(0,$.jsx)(fe,{className:`size-3.5`}),label:`Reply`,title:`Reply to this message`,onClick:a,touchTarget:!0}),n&&n.length>0&&(0,$.jsx)($i,{ref:l,count:n.length,totals:Qi(n),status:Vi(u.summary),open:o,onToggle:()=>{if(o)return f();d?.refresh(),s(!0)}})]});return!n||n.length===0?p:(0,$.jsxs)($.Fragment,{children:[p,c?(0,$.jsx)(Sa,{changes:n,turn:r,review:u,open:o,onClose:f,onJump:i??(()=>{})}):o&&(0,$.jsx)(va,{changes:n,turn:r,review:u,onJump:e=>{s(!1),i?.(e)},onClose:f})]})}function wa({usage:e}){let[t,n]=(0,Q.useState)(!1),r=Pr(e);if(r.level===`ok`)return null;let i=Lr(e),a=kr(e),o=Math.round(e.cacheHitRate*100),s=r.level===`bad`;return(0,$.jsxs)(`div`,{className:`rounded-md border px-2.5 py-2 text-[11px] ${s?`border-warning/40 bg-warning/10`:`border-border bg-surface`}`,children:[(0,$.jsxs)(`button`,{onClick:()=>n(e=>!e),"aria-expanded":t,className:`flex w-full items-start gap-2 py-1 text-left text-text-secondary transition-colors hover:text-text-primary`,children:[(0,$.jsx)(xe,{className:`mt-px size-3.5 shrink-0 ${s?`text-warning`:`text-text-subtle`}`}),(0,$.jsxs)(`span`,{className:`flex-1`,children:[`Costly turn — `,o,`% of a `,Rr(a),`-token transcript came from cache, so it cost about`,` `,(0,$.jsxs)(`strong`,{className:`font-semibold`,children:[i.toFixed(1),`x`]}),` a fully cached turn.`]}),(0,$.jsx)(ee,{className:`mt-px size-3.5 shrink-0 transition-transform ${t?`rotate-180`:``}`})]}),t&&(0,$.jsxs)(`div`,{className:`mt-2 flex flex-col gap-2 border-t border-border pt-2`,children:[r.reason&&(0,$.jsx)(`p`,{className:`text-text-secondary`,children:r.reason}),(0,$.jsxs)(`dl`,{className:`grid grid-cols-2 gap-x-3 gap-y-1 font-mono text-[10.5px] text-text-subtle`,children:[(0,$.jsx)(Ta,{label:`From cache`,value:`${Rr(e.cacheReadTokens)} (${o}%)`}),(0,$.jsx)(Ta,{label:`Written to cache`,value:Rr(e.cacheWriteTokens)}),(0,$.jsx)(Ta,{label:`Fresh input`,value:Rr(e.inputTokens)}),(0,$.jsx)(Ta,{label:`Output`,value:Rr(e.outputTokens)}),(0,$.jsx)(Ta,{label:`Model`,value:e.model||`unknown`}),(0,$.jsx)(Ta,{label:`Cost`,value:`$${e.costUsd.toFixed(4)}`})]}),(0,$.jsx)(`p`,{className:`text-text-subtle`,children:`A turn stays cached while the session keeps running. Closing the last tab of an idle session, switching model, or a retry all restart it, and the next turn re-sends the transcript at full price.`})]})]})}function Ta({label:e,value:t}){return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`dt`,{className:`truncate`,children:e}),(0,$.jsx)(`dd`,{className:`truncate text-right text-text-secondary`,children:t})]})}function Ea(e,t,n,r){let[i,a]=(0,Q.useState)([]),o=(0,Q.useRef)(null);return(0,Q.useEffect)(()=>{if(!n||!e||!t){a([]);return}let r=!1;return o.current&&clearTimeout(o.current),o.current=setTimeout(()=>{W.get(`/api/project/${encodeURIComponent(e)}/chat/sessions/${encodeURIComponent(t)}/tasks`).then(e=>{r||a(e)}).catch(()=>{})},300),()=>{r=!0,o.current&&clearTimeout(o.current)}},[e,t,n,r]),i}var Da=new Set([`TaskCreate`,`TaskUpdate`,`TaskStop`]);function Oa(e){let t=0;for(let n of e)if(n.events)for(let e of n.events)e.type===`tool_use`&&Da.has(e.tool)&&t++;return t}var ka={completed:{icon:`✓`,cls:`text-success`},in_progress:{icon:`▶`,cls:`text-warning`},stopped:{icon:`■`,cls:`text-text-subtle`},pending:{icon:`○`,cls:`text-text-subtle`}};function Aa({projectName:e,sessionId:t,messages:n}){let r=(0,Q.useMemo)(()=>Oa(n),[n]),i=Ea(e,t,r>0,r),[a,o]=(0,Q.useState)(!0);if(i.length===0||i.every(e=>e.status===`completed`||e.status===`stopped`))return null;let s=i.filter(e=>e.status===`completed`).length,c=i.length,l=c?Math.round(s/c*100):0;return(0,$.jsxs)(`div`,{className:`shrink-0 border-b border-border bg-surface/60 backdrop-blur-sm`,children:[(0,$.jsxs)(`button`,{type:`button`,onClick:()=>o(e=>!e),className:`flex items-center gap-2 w-full px-3 min-h-11 text-left text-xs hover:bg-surface transition-colors`,children:[a?(0,$.jsx)(v,{className:`size-3.5 shrink-0`}):(0,$.jsx)(ee,{className:`size-3.5 shrink-0`}),(0,$.jsx)(ce,{className:`size-3.5 shrink-0 text-text-secondary`}),(0,$.jsx)(`span`,{className:`text-text-primary font-medium`,children:`Tasks`}),(0,$.jsxs)(`span`,{className:`text-text-subtle`,children:[s,`/`,c,` done`]}),(0,$.jsx)(`span`,{className:`ml-auto h-1 w-16 rounded-full bg-border overflow-hidden shrink-0`,children:(0,$.jsx)(`span`,{className:`block h-full bg-success/70`,style:{width:`${l}%`}})})]}),!a&&(0,$.jsx)(`ul`,{className:`px-3 pb-2 space-y-0.5 max-h-48 overflow-y-auto`,children:i.map(e=>(0,$.jsx)(ja,{task:e},e.id))})]})}function ja({task:e}){let t=ka[e.status]??ka.pending,n=e.status===`in_progress`;return(0,$.jsxs)(`li`,{className:`flex items-start gap-1.5 text-xs rounded px-1 ${n?`bg-warning/10`:``}`,children:[(0,$.jsx)(`span`,{className:`shrink-0 mt-0.5 ${t.cls}`,children:t.icon}),(0,$.jsx)(`span`,{className:e.status===`completed`?`line-through text-text-subtle`:n?`text-text-primary font-medium`:`text-text-secondary`,children:e.subject||(0,$.jsxs)(`span`,{className:`text-text-subtle italic`,children:[`#`,e.id,` (no title)`]})})]})}var Ma=/read the full transcript at:\s*(\S+\.jsonl)/i;function Na(e){return e.match(Ma)?.[1]?.trim()??null}var Pa=class extends Q.Component{state={hasError:!1};static getDerivedStateFromError(){return{hasError:!0}}render(){return this.state.hasError?this.props.fallback?this.props.fallback:this.props.fallbackContent?(0,$.jsx)(`div`,{className:`text-sm whitespace-pre-wrap break-words text-text-primary opacity-80`,children:this.props.fallbackContent}):null:this.props.children}},Fa=K(()=>import(`./markdown-renderer-BjDQUqT-.js`),__vite__mapDeps([4,5,1,2,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61])),Ia=(0,Q.lazy)(()=>Fa.then(e=>({default:e.MarkdownRenderer}))),La=/<teammate-message[^>]*>[\s\S]*?<\/teammate-message>/g;function Ra(e){return e.replace(La,``).replace(/\n{3,}/g,`
|
|
6
|
+
`).trim()}function gi(e,t,n){let r=hi(e);if(!r||e.role===`system`||e.id.startsWith(`streaming-`))return null;let i=Array.from(r);return{version:1,sessionId:t,providerId:n,messageId:e.id,...e.sdkUuid?{sdkUuid:e.sdkUuid}:{},role:e.role,timestamp:e.timestamp,quote:i.slice(0,yn).join(``),truncated:i.length>yn}}function _i(e,t,n,r){if(t.sessionId!==n||t.providerId!==r)return null;let i=e=>{if(e.role!==t.role)return!1;let n=hi(e);return t.truncated?Array.from(n).slice(0,yn).join(``)===t.quote:n===t.quote},a=e.filter(e=>(t.sdkUuid&&e.sdkUuid===t.sdkUuid||e.id===t.messageId&&e.timestamp===t.timestamp)&&i(e));if(a.length===1)return a[0];if(a.length>1)return null;let o=e.filter(e=>e.timestamp===t.timestamp&&i(e));return o.length===1?o[0]:null}function vi(e){let t=Array(e.length),n=0;for(let r=0;r<e.length;r++){let i=e[r].role===`user`;i&&n++,t[r]=i?n:0}return t}var yi={damping:.7,stiffness:.05,mass:1.25},bi=70,xi=1e3/60,Si=350,Ci=!1;globalThis.document?.addEventListener(`mousedown`,()=>{Ci=!0}),globalThis.document?.addEventListener(`mouseup`,()=>{Ci=!1}),globalThis.document?.addEventListener(`click`,()=>{Ci=!1});var wi=(e={})=>{let[t,n]=(0,Q.useState)(!1),[r,i]=(0,Q.useState)(e.initial!==!1),[a,o]=(0,Q.useState)(!1),s=(0,Q.useRef)(null);s.current=e;let c=(0,Q.useCallback)(()=>{if(!Ci)return!1;let e=window.getSelection();if(!e||!e.rangeCount)return!1;let t=e.getRangeAt(0);return t.commonAncestorContainer.contains(g.current)||g.current?.contains(t.commonAncestorContainer)},[]),l=(0,Q.useCallback)(e=>{d.isAtBottom=e,i(e)},[]),u=(0,Q.useCallback)(e=>{d.escapedFromLock=e,n(e)},[]),d=(0,Q.useMemo)(()=>{let n;return{escapedFromLock:t,isAtBottom:r,resizeDifference:0,accumulated:0,velocity:0,listeners:new Set,get scrollTop(){return g.current?.scrollTop??0},set scrollTop(e){if(g.current){let{scrollBehavior:t}=getComputedStyle(g.current);t!==`auto`&&(g.current.style.scrollBehavior=`auto`),g.current.scrollTop=e,d.ignoreScrollToTop=g.current.scrollTop,t!==`auto`&&(g.current.style.scrollBehavior=t)}},get targetScrollTop(){return!g.current||!_.current?0:g.current.scrollHeight-1-g.current.clientHeight},get calculatedTargetScrollTop(){if(!g.current||!_.current)return 0;let{targetScrollTop:t}=this;if(!e.targetScrollTop)return t;if(n?.targetScrollTop===t)return n.calculatedScrollTop;let r=Math.max(Math.min(e.targetScrollTop(t,{scrollElement:g.current,contentElement:_.current}),t),0);return n={targetScrollTop:t,calculatedScrollTop:r},requestAnimationFrame(()=>{n=void 0}),r},get scrollDifference(){return this.calculatedTargetScrollTop-this.scrollTop},get isNearBottom(){return this.scrollDifference<=bi}}},[]),f=(0,Q.useCallback)((e={})=>{typeof e==`string`&&(e={animation:e}),e.preserveScrollPosition||l(!0);let t=Date.now()+(Number(e.wait)||0),n=Di(s.current,e.animation),{ignoreEscapes:r=!1}=e,i,a=d.calculatedTargetScrollTop;e.duration instanceof Promise?e.duration.finally(()=>{i=Date.now()}):i=t+(e.duration??0);let o=async()=>{let e=new Promise(requestAnimationFrame).then(()=>{if(!d.isAtBottom)return d.animation=void 0,!1;let{scrollTop:l}=d,u=performance.now(),p=(u-(d.lastTick??u))/xi;if(d.animation||={behavior:n,promise:e,ignoreEscapes:r},d.animation.behavior===n&&(d.lastTick=u),c()||t>Date.now())return o();if(l<Math.min(a,d.calculatedTargetScrollTop)){if(d.animation?.behavior===n){if(n===`instant`)return d.scrollTop=d.calculatedTargetScrollTop,o();d.velocity=(n.damping*d.velocity+n.stiffness*d.scrollDifference)/n.mass,d.accumulated+=d.velocity*p,d.scrollTop+=d.accumulated,d.scrollTop!==l&&(d.accumulated=0)}return o()}return i>Date.now()?(a=d.calculatedTargetScrollTop,o()):(d.animation=void 0,d.scrollTop<d.calculatedTargetScrollTop?f({animation:Di(s.current,s.current.resize),ignoreEscapes:r,duration:Math.max(0,i-Date.now())||void 0}):d.isAtBottom)});return e.then(e=>(requestAnimationFrame(()=>{d.animation||(d.lastTick=void 0,d.velocity=0)}),e))};return e.wait!==!0&&(d.animation=void 0),d.animation?.behavior===n?d.animation.promise:o()},[l,c,d]),p=(0,Q.useCallback)(()=>{u(!0),l(!1)},[u,l]),m=(0,Q.useCallback)(({target:e})=>{if(e!==g.current)return;let{scrollTop:t,ignoreScrollToTop:n}=d,{lastScrollTop:r=t}=d;d.lastScrollTop=t,d.ignoreScrollToTop=void 0,n&&n>t&&(r=n),o(d.isNearBottom),setTimeout(()=>{if(d.resizeDifference||t===n)return;if(c()){u(!0),l(!1);return}let e=t>r,i=t<r;if(d.animation?.ignoreEscapes){d.scrollTop=r;return}i&&(u(!0),l(!1)),e&&u(!1),!d.escapedFromLock&&d.isNearBottom&&l(!0)},1)},[u,l,c,d]),h=(0,Q.useCallback)(({target:e,deltaY:t})=>{let n=e;for(;![`scroll`,`auto`].includes(getComputedStyle(n).overflow);){if(!n.parentElement)return;n=n.parentElement}n===g.current&&t<0&&g.current.scrollHeight>g.current.clientHeight&&!d.animation?.ignoreEscapes&&(u(!0),l(!1))},[u,l,d]),g=Ti(e=>{g.current?.removeEventListener(`scroll`,m),g.current?.removeEventListener(`wheel`,h),e?.addEventListener(`scroll`,m,{passive:!0}),e?.addEventListener(`wheel`,h,{passive:!0})},[]),_=Ti(e=>{if(d.resizeObserver?.disconnect(),d.resizeObserver=void 0,!e)return;let t;d.resizeObserver=new ResizeObserver(([e])=>{let{height:n}=e.contentRect,r=n-(t??n);if(d.resizeDifference=r,d.scrollTop>d.targetScrollTop&&(d.scrollTop=d.targetScrollTop),o(d.isNearBottom),r>=0){let e=Di(s.current,t?s.current.resize:s.current.initial);f({animation:e,wait:!0,preserveScrollPosition:!0,duration:e===`instant`?void 0:Si})}else d.isNearBottom&&(u(!1),l(!0));t=n,requestAnimationFrame(()=>{setTimeout(()=>{d.resizeDifference===r&&(d.resizeDifference=0)},1)})}),d.resizeObserver?.observe(e)},[]);return{contentRef:_,scrollRef:g,scrollToBottom:f,stopScroll:p,isAtBottom:r||a,isNearBottom:a,escapedFromLock:t,state:d}};function Ti(e,t){let n=(0,Q.useCallback)(t=>(n.current=t,e(t)),t);return n}var Ei=new Map;function Di(...e){let t={...yi},n=!1;for(let r of e){if(r===`instant`){n=!0;continue}typeof r==`object`&&(n=!1,t.damping=r.damping??t.damping,t.stiffness=r.stiffness??t.stiffness,t.mass=r.mass??t.mass)}let r=JSON.stringify(t);return Ei.has(r)||Ei.set(r,Object.freeze(t)),n?`instant`:Ei.get(r)}var Oi=60,ki=8,Ai=1400;function ji(e){if(e.scrollHeight<=e.clientHeight)return!1;let t=getComputedStyle(e).overflowY;return t===`auto`||t===`scroll`}function Mi(e,t){let n=[],r=e.parentElement;for(;r&&r!==t;)ji(r)&&n.push(r),r=r.parentElement;return n}function Ni(){return typeof matchMedia==`function`&&matchMedia(`(prefers-reduced-motion: reduce)`).matches}function Pi(e,t){let n=e.querySelector(`[data-edit-ref="${CSS.escape(t)}"]`);if(n)return{el:n,level:`edit`};let r=t.replace(/-\d+$/,``),i=e.querySelector(`[data-tool-ref="${CSS.escape(r)}"]`);return i?{el:i,level:`card`}:null}function Fi(e,t,n,r){let i=e.scrollTop+t.getBoundingClientRect().top-e.getBoundingClientRect().top-n;e.scrollTo({top:i,behavior:r?`smooth`:`auto`})}function Ii(e,t){let n=Pi(e,t);if(!n)return()=>{};let{el:r,level:i}=n;for(let t of Mi(r,e))Fi(t,r,ki,!1);Fi(e,r,Oi,!Ni()),r.dataset.flash=i;let a=setTimeout(()=>{delete r.dataset.flash},Ai);return()=>{clearTimeout(a),delete r.dataset.flash}}var Li=(e,t)=>`${e}\0${t.toolUseId??``}\0${t.editIndex}`,Ri=e=>e.replace(/\\/g,`/`);function zi(e,t,n){let r=new Map(t.map(e=>[Ri(e.path),e])),i=new Map;for(let t of e){let e=r.get(Ri(t.filePath)),a=!!e?.blocks?.some(e=>e.calls?.length);for(let r of t.edits){let o=Li(t.filePath,r),s=n.get(o),c=r.toolUseId&&e?.blocks?e.blocks.filter(e=>e.calls?.includes(r.toolUseId)):[],l=null;c.length>0?l=c.every(e=>e.kept)?`kept`:`open`:e?.sinceReview&&r.toolUseId?l=`kept`:(s||a&&r.toolUseId)&&(l=`reverted`),i.set(o,{state:l,...e?{file:e}:{},keys:c.map(e=>e.key),...s?{undoId:s}:{}})}}return i}function Bi(e){let t={open:0,kept:0,reverted:0,known:0};for(let n of e.values())n.state&&(t.known++,t[n.state]++);return t}function Vi(e){return e.known===0?null:e.open>0?{tone:`todo`,text:`${e.open} edit${e.open===1?``:`s`} to review`}:e.reverted>0?{tone:`reverted`,text:`${e.reverted} reverted`}:{tone:`kept`,text:`Kept`}}function Hi(e,t){let n=new Map;for(let r of e){if(!r.file)continue;let e=new Set(r.file.blocks?.filter(e=>!e.kept).map(e=>e.key)),i=t===`open`?r.keys.filter(t=>e.has(t)):r.keys;if(i.length===0)continue;let a=n.get(r.file.path)??{path:r.file.path,version:r.file.version,keys:new Set};for(let e of i)a.keys.add(e);n.set(r.file.path,a)}return[...n.values()].map(e=>({path:e.path,version:e.version,keys:[...e.keys]}))}var Ui=(0,Q.createContext)(null),Wi=()=>(0,Q.useContext)(Ui),Gi=new Map;function Ki(e){return e instanceof Error?e.message:`The change could not be saved.`}function qi({changes:e,turn:t}){let n=Wi(),[r,i]=(0,Q.useState)(new Map),[a,o]=(0,Q.useState)(!1),[s,c]=(0,Q.useState)(null),l=(0,Q.useMemo)(()=>n&&e?zi(e,n.files,r):Gi,[n,e,r]),u=(0,Q.useMemo)(()=>Bi(l),[l]),d=(0,Q.useCallback)(()=>{n&&(n.refresh(),On({projectName:n.projectName,sessionId:n.sessionId}))},[n]),f=(0,Q.useCallback)(async(e,t=!0)=>{o(!0);try{return await e()}catch(e){return c({text:Ki(e)}),null}finally{o(!1),t&&d()}},[d]),p=(0,Q.useCallback)((e,t)=>{let n=[];for(let[r,i]of l)i.file?.path===e&&i.keys.some(e=>t.includes(e))&&n.push(r);return n},[l]),m=(0,Q.useCallback)((e,t,r)=>{if(!n)return;let a=Hi(t,r);a.length!==0&&f(async()=>{let t=await Mn(n.projectName,n.sessionId,e,a),r=t.files.filter(e=>e.stale||e.error);if(r.length>0&&c({text:r.some(e=>e.stale)?`A file changed since this was shown. Look again before answering.`:r[0].error}),e===`revert`&&t.undoId){let e=t.undoId,n=a.reduce((e,t)=>e+t.keys.length,0);i(t=>{let n=new Map(t);for(let t of a)for(let r of p(t.path,t.keys))n.set(r,e);return n}),c({text:`Reverted ${n===1?`1 block`:`${n} blocks`}.`,undoId:e})}return t})},[n,f,p]),h=(0,Q.useCallback)(e=>{n&&f(async()=>{let t=await Ln(n.projectName,n.sessionId,e);return t.stale?(c({text:`Nothing was put back: a file changed after the revert.`}),t):(i(t=>new Map([...t].filter(([,t])=>t!==e))),c(null),t)})},[n,f]),g=e=>l.get(e),_=e=>{let t=g(e);t?.state===`open`&&m(`keep`,[t],`open`)},v=e=>{let t=g(e);(t?.state===`open`||t?.state===`kept`)&&m(`revert`,[t],`all`)},y=e=>{let t=g(e);t?.state===`kept`&&t.keys.length>0?m(`open`,[t],`all`):t?.state===`reverted`&&t.undoId&&h(t.undoId)},b=()=>m(`keep`,[...l.values()].filter(e=>e.state===`open`),`open`),x=(0,Q.useCallback)(async()=>!n||!t?null:f(()=>Rn(n.projectName,n.sessionId,t.calls),!1),[n,t,f]),S=(0,Q.useCallback)(async e=>{if(!n||!t)return null;let r=await f(()=>Rn(n.projectName,n.sessionId,t.calls,e.files.map(e=>({path:e.path,version:e.version}))));if(!r)return null;if(r.stale)return r;let a=r.files.filter(e=>e.error);if(r.undoId){let e=r.undoId,t=new Set(r.files.filter(e=>e.action!==`none`).map(e=>e.path.replace(/\\/g,`/`)));i(n=>{let r=new Map(n);for(let[n,i]of l){let a=(i.file?.path??n.split(`\0`)[0]).replace(/\\/g,`/`);t.has(a)&&r.set(n,e)}return r})}return c(a.length>0?{text:`${a.length} file${a.length===1?``:`s`} could not be written: ${a[0].error}`,...r.undoId?{undoId:r.undoId}:{}}:r.undoId?{text:`Reverted this turn's changes.`,undoId:r.undoId}:{text:`Nothing to put back.`}),null},[n,t,f,l]);return{enabled:!!n&&u.known>0,reviews:l,summary:u,busy:a,notice:s,dismissNotice:()=>c(null),keep:_,revert:v,change:y,keepAll:b,previewRevertTurn:x,applyRevertTurn:S,undo:h,openReview:e=>n?.openReview(e)}}function Ji(e){try{return new Date(e).toLocaleString()}catch{return``}}function Yi({icon:e,label:t,title:n,onClick:r,touchTarget:i}){return(0,$.jsxs)(`button`,{type:`button`,onClick:r,title:n,"aria-label":t,className:q(`inline-flex items-center justify-center gap-1 rounded-md px-1.5 py-1 text-text-subtle hover:text-text-primary hover:bg-surface transition-colors`,i&&`min-h-[44px] min-w-[44px] md:min-h-0 md:min-w-0`),children:[e,(0,$.jsx)(`span`,{children:t})]})}function Xi({content:e}){let[t,n]=(0,Q.useState)(!1);return(0,$.jsx)(Yi,{icon:t?(0,$.jsx)(a,{className:`size-3.5`}):(0,$.jsx)(I,{className:`size-3.5`}),label:t?`Copied`:`Copy`,title:`Copy message to clipboard`,onClick:()=>{st(e),n(!0),setTimeout(()=>n(!1),1500)}})}function Zi({timestamp:e,content:t,className:n,children:r}){return(0,$.jsxs)(`div`,{className:q(`flex items-center gap-0.5 flex-wrap text-xs text-text-subtle select-none`,n),children:[(0,$.jsx)(`time`,{title:Ji(e),className:`pr-1 tabular-nums`,children:$e(e)}),(0,$.jsx)(Xi,{content:t}),r]})}function Qi(e){let t=0,n=0;for(let r of e)t+=r.linesAdded,n+=r.linesRemoved;return{added:t,removed:n}}function $i({count:e,totals:t,status:n,open:r,onToggle:i,ref:o}){let s=`${e} file${e===1?``:`s`}`;return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`span`,{"aria-hidden":!0,className:`mx-1.5 h-3.5 w-px bg-border-soft`}),(0,$.jsxs)(`button`,{ref:o,type:`button`,onClick:i,"aria-expanded":r,"aria-label":`${s} changed this turn, ${t.added} added, ${t.removed} removed${n?`, ${n.text}`:``}`,className:q(`inline-flex items-center gap-[7px] rounded-full font-mono text-[11.5px]`,`px-3 min-h-11 md:min-h-0 md:px-[9px] md:py-[5px]`,`text-text-secondary transition-colors hover:bg-surface hover:text-text-primary`,r&&`bg-accent-wash text-text-primary`),children:[(0,$.jsx)(`span`,{"aria-hidden":!0,className:`size-[5px] shrink-0 rounded-full bg-primary`}),(0,$.jsx)(`span`,{children:s}),(0,$.jsxs)(`span`,{className:`flex items-center gap-[5px] tabular-nums`,children:[(0,$.jsxs)(`span`,{className:`text-success`,children:[`+`,t.added]}),(0,$.jsxs)(`span`,{className:`text-error`,children:[`−`,t.removed]})]}),n&&(0,$.jsxs)(`span`,{"data-testid":`turn-review-status`,className:q(`inline-flex items-center gap-[5px] border-l border-border-soft pl-2 font-sans`,n.tone===`todo`?`text-warning`:n.tone===`kept`?`text-success`:`text-text-2`),children:[n.tone===`todo`&&(0,$.jsx)(`span`,{"aria-hidden":!0,className:`size-1.5 rounded-full bg-current`}),n.tone===`kept`&&(0,$.jsx)(a,{className:`size-3`}),n.text]})]})]})}function ea(e){if(!e)return!1;let t=e.closest(`[data-tab-pool-id]`)?.dataset.tabPoolId;if(!t)return e.offsetParent!==null;let{panels:n,focusedPanelId:r}=Be.getState();return n[r]?.activeTabId===t}var ta=(0,Q.lazy)(()=>K(()=>import(`./edit-diff-preview-DyWUMlkI.js`),__vite__mapDeps([0,1,2,3])));function na(e){let t=Math.max(e.lastIndexOf(`/`),e.lastIndexOf(`\\`));return t<0?{base:e,dir:``}:{base:e.slice(t+1),dir:e.slice(0,t)}}var ra=(e,t)=>`${e} ${t}${e===1?``:`s`}`;function ia(e){return`${ra(e.reduce((e,t)=>e+t.edits.length,0),`edit`)} in ${ra(e.length,`file`)}`}var aa=`inline-flex items-center gap-1.5 whitespace-nowrap border font-medium transition-colors disabled:opacity-50`;function oa({review:e,mobile:t,busy:n,onKeep:r,onRevert:i}){let o=t?`h-11 flex-1 justify-center rounded-[10px] px-3.5 text-sm`:`h-[26px] rounded-[7px] px-2.5 text-xs`;return(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`button`,{type:`button`,disabled:n,title:e.keys.length>1?`Put back the ${e.keys.length} blocks this edit wrote`:`Put these lines back`,onClick:i,className:q(aa,o,`border-border bg-bg text-text hover:border-error/50 hover:text-error`),children:[(0,$.jsx)(fe,{className:t?`size-5`:`size-3.5`}),`Revert`]}),(0,$.jsxs)(`button`,{type:`button`,disabled:n,title:`Keep this change`,onClick:r,className:q(aa,o,`border-transparent bg-primary text-primary-foreground hover:bg-primary/90`),children:[(0,$.jsx)(a,{className:t?`size-5`:`size-3.5`}),`Keep`]})]})}function sa({change:e,edit:t,index:n,review:r,mobile:i,busy:o,actions:s,onJump:c}){let l=Li(e.filePath,t),u=r?.state??null,d=u===`kept`||u===`reverted`,f=u===`kept`?(r?.keys.length??0)>0:u===`reverted`&&!!r?.undoId;return(0,$.jsxs)(`div`,{"data-edit-key":l,"data-state":u??`unknown`,className:q(`mt-1.5 rounded-lg border border-border-soft bg-bg`,d&&`border-dashed`),children:[(0,$.jsxs)(`div`,{className:q(`flex flex-wrap items-center gap-x-2 gap-y-1.5 py-1 pr-1.5 pl-2.5 text-[11.5px] text-text-subtle`,i?`min-h-[52px]`:`min-h-9`,!d&&`border-b border-border-soft`),children:[(0,$.jsxs)(`span`,{children:[(0,$.jsxs)(`b`,{className:`font-semibold text-text-2`,children:[`Edit `,n+1]}),` of `,e.edits.length]}),t.editRef&&(0,$.jsxs)(`button`,{type:`button`,title:`Scroll the chat to the tool card that made this edit`,onClick:()=>c(t.editRef),className:q(`inline-flex items-center gap-1 whitespace-nowrap rounded-[5px] px-1.5 font-medium text-text-2 hover:bg-surface-hover hover:text-text`,i?`min-h-11`:`h-6`),children:[(0,$.jsx)(de,{className:`size-3.5`}),i?`Chat`:`Show in chat`]}),(0,$.jsx)(`span`,{className:`flex-1`}),u===`open`&&!i&&(0,$.jsx)(oa,{review:r,mobile:!1,busy:o,onKeep:()=>s.keep(l),onRevert:()=>s.revert(l)}),d&&(0,$.jsxs)($.Fragment,{children:[(0,$.jsxs)(`span`,{className:q(`inline-flex items-center gap-1 font-semibold`,u===`kept`?`text-primary`:`text-error`),children:[u===`kept`?(0,$.jsx)(a,{className:`size-3.5`}):(0,$.jsx)(fe,{className:`size-3.5`}),u===`kept`?`Kept`:`Reverted`]}),f&&(0,$.jsxs)(`button`,{type:`button`,disabled:o,title:u===`reverted`?`Put back what the agent wrote here`:`Open this edit again`,onClick:()=>s.change(l),className:q(`inline-flex items-center gap-1 whitespace-nowrap rounded-[5px] px-1.5 font-medium text-text-2 hover:bg-surface-hover hover:text-text disabled:opacity-50`,i?`min-h-11`:`h-6`),children:[(0,$.jsx)(ie,{className:`size-3.5`}),`Change`]})]})]}),!d&&(0,$.jsx)(`div`,{className:`px-1 py-1`,children:(0,$.jsx)(Q.Suspense,{fallback:(0,$.jsx)(`div`,{className:`h-4`}),children:(0,$.jsx)(ta,{oldStr:t.oldStr,newStr:t.newStr,filePath:e.filePath})})}),u===`open`&&i&&(0,$.jsx)(`div`,{className:`flex gap-2 border-t border-border-soft p-2`,children:(0,$.jsx)(oa,{review:r,mobile:!0,busy:o,onKeep:()=>s.keep(l),onRevert:()=>s.revert(l)})})]})}function ca({change:e,review:t,mobile:n,onJump:r}){let{base:i,dir:a}=na(e.filePath);return(0,$.jsxs)(`div`,{"data-file-group":e.filePath,children:[(0,$.jsxs)(`div`,{className:`flex min-h-10 items-center gap-2 pt-1.5 text-[13px]`,title:e.filePath,children:[(0,$.jsx)(ft,{name:i,className:`size-4 shrink-0`}),(0,$.jsx)(`b`,{className:`shrink-0 font-semibold`,children:i}),a&&(0,$.jsx)(`span`,{className:`min-w-0 overflow-hidden text-ellipsis whitespace-nowrap text-left text-xs text-text-subtle [direction:rtl]`,children:(0,$.jsx)(`bdi`,{children:a})}),e.viaSubagent&&(0,$.jsxs)(`span`,{title:`Changed by a sub-agent`,className:`inline-flex shrink-0 items-center gap-[3px] rounded px-[5px] text-[10px] font-semibold leading-[15px] text-info bg-[color-mix(in_srgb,var(--info)_14%,transparent)]`,children:[(0,$.jsx)(Ee,{className:`size-3`}),`Sub-agent`]}),(0,$.jsx)(`span`,{className:`flex-1`}),(0,$.jsx)(jn,{added:e.linesAdded,removed:e.linesRemoved,className:`shrink-0 font-mono text-[11px]`})]}),e.edits.map((i,a)=>(0,$.jsx)(sa,{change:e,edit:i,index:a,review:t.reviews.get(Li(e.filePath,i)),mobile:n,busy:t.busy,actions:t,onJump:r},i.editRef??`${i.toolUseId}:${a}`))]})}function la({notice:e,mobile:t,busy:n,onUndo:r,onDismiss:i}){return(0,$.jsxs)(`div`,{role:`status`,"data-testid":`turn-review-notice`,className:q(`flex items-center gap-2 border-b border-border-soft bg-panel-2 pl-3.5`,t?`min-h-12 pr-1 text-sm`:`min-h-9 pr-1.5 text-xs`),children:[(0,$.jsx)(`span`,{className:`min-w-0 flex-1`,children:e.text}),e.undoId&&(0,$.jsx)(ct,{variant:`ghost`,size:t?`sm`:`xs`,className:q(`text-primary hover:text-primary`,t&&`h-11`),disabled:n,onClick:()=>r(e.undoId),children:`Undo`}),(0,$.jsx)(`button`,{type:`button`,"aria-label":`Dismiss`,onClick:i,className:q(`inline-grid shrink-0 place-items-center rounded-md text-text-subtle hover:bg-surface-hover hover:text-text`,t?`size-11`:`size-6`),children:(0,$.jsx)(ve,{className:`size-3.5`})})]})}function ua(e){let[t,n]=(0,Q.useState)(null),{previewRevertTurn:r,applyRevertTurn:i}=e,a=(0,Q.useCallback)(()=>n(null),[]),o=(0,Q.useCallback)(async()=>{n({preview:null,loading:!0,moved:!1});let e=await r();n(e?{preview:e,loading:!1,moved:!1}:null)},[r]),s=(0,Q.useCallback)(async()=>{if(!t?.preview)return;n({...t,loading:!0});let e=await i(t.preview);n(e?{preview:{files:e.files},loading:!1,moved:!0}:null)},[t,i]);return{open:!!t,preview:t?.preview??null,loading:t?.loading??!1,moved:t?.moved??!1,start:o,cancel:a,confirm:s}}function da(e){return e.files.filter(e=>e.action!==`none`)}function fa(e){return e.action===`delete`?`file removed`:e.action===`restore`?`file put back`:ra(e.changes,`change`)}function pa(){let e=Wi()?.sessionId,t=Cn(t=>e?t.bySession[e]?.byCall:void 0);return e=>{let n=[],r=!1;for(let i of e){let e=i?t?.get(i):void 0;e&&!n.includes(e)?n.push(e):e||(r=!0)}let i=n.map(gn);return(r||i.length===0)&&i.push(e.length===0?`a later change`:`a change outside this chat`),i.join(` and `)}}function ma({preview:e,mobile:t}){let n=pa(),r=da(e),i=e.files.flatMap(e=>e.skipped.map(t=>({f:e,s:t}))),a=e.files.filter(e=>e.error),o=(e,n,r=!1)=>(0,$.jsx)(`div`,{className:q(`flex items-center gap-2.5 border-b border-border-soft px-3.5 py-1.5 last:border-b-0`,t?`min-h-[52px] text-sm`:`min-h-9 text-[12.5px]`,r&&`bg-[color-mix(in_srgb,var(--warning)_9%,transparent)]`),children:e},n);return r.length===0&&i.length===0&&a.length===0?(0,$.jsx)(`p`,{className:`m-0 text-text-2`,children:`Nothing this turn wrote is left to put back.`}):(0,$.jsxs)(`div`,{className:`overflow-hidden rounded-xl border border-border-soft`,"data-testid":`revert-turn-summary`,children:[r.map(e=>{let{base:t,dir:n}=na(e.path);return o((0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(ft,{name:t,className:`size-4 shrink-0`}),(0,$.jsxs)(`span`,{className:`flex min-w-0 flex-1 flex-col leading-[1.3]`,children:[(0,$.jsx)(`b`,{className:`truncate font-medium`,children:t}),(0,$.jsxs)(`small`,{className:`flex min-w-0 gap-1 whitespace-nowrap text-[11.5px] text-text-subtle`,children:[n&&(0,$.jsx)(`span`,{className:`min-w-0 overflow-hidden text-ellipsis text-left [direction:rtl]`,children:(0,$.jsx)(`bdi`,{children:n})}),(0,$.jsxs)(`span`,{className:`shrink-0`,children:[n&&`· `,fa(e)]})]})]}),(0,$.jsx)(jn,{added:e.added,removed:e.removed,className:`shrink-0 font-mono text-[11px]`})]}),`f:${e.path}`)}),i.map(({f:e,s:t},r)=>o((0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(xe,{className:`size-4 shrink-0 text-warning`}),(0,$.jsxs)(`span`,{className:`min-w-0 flex-1 leading-[1.4] text-text-2`,children:[(0,$.jsx)(`b`,{className:`font-semibold text-text`,children:na(e.path).base}),` line `,t.line,` stays as it is — `,n(t.by),` changed it again.`]})]}),`s:${e.path}:${r}`,!0)),a.map(e=>o((0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(xe,{className:`size-4 shrink-0 text-error`}),(0,$.jsxs)(`span`,{className:`min-w-0 flex-1 leading-[1.4] text-text-2`,children:[(0,$.jsx)(`b`,{className:`font-semibold text-text`,children:na(e.path).base}),`: `,e.error]})]}),`e:${e.path}`,!0))]})}function ha({flow:e,mobile:t}){if(!e.preview)return(0,$.jsx)(`p`,{className:`m-0 text-text-2`,children:`Working out what this turn wrote…`});let n=da(e.preview),r=n.reduce((e,t)=>e+t.added,0),i=n.reduce((e,t)=>e+t.removed,0),a=e.preview.files.some(e=>e.skipped.length>0);return(0,$.jsxs)($.Fragment,{children:[e.moved&&(0,$.jsx)(`p`,{className:`m-0 mb-2 font-medium text-warning`,children:`A file changed since — this is what reverting does now.`}),n.length>0&&(0,$.jsxs)(`p`,{className:`m-0 mb-3 text-text-2`,children:[`Puts back what this answer wrote, on disk: `,ra(n.reduce((e,t)=>e+Math.max(t.changes,1),0),`change`),` in `,ra(n.length,`file`),`,`,` `,(0,$.jsxs)(`span`,{className:`font-mono text-success`,children:[`+`,r]}),` `,(0,$.jsxs)(`span`,{className:`font-mono text-error`,children:[`−`,i]}),` undone.`,!a&&` No later turn changed these lines.`]}),(0,$.jsx)(ma,{preview:e.preview,mobile:t}),(0,$.jsx)(`p`,{className:q(`m-0 mt-3 text-text-subtle`,t?`text-[13px]`:`text-xs`),children:`The chat itself stays as it is. You can undo it right after.`})]})}var ga=null;function _a(e){return e instanceof HTMLElement?e.tagName===`INPUT`||e.tagName===`TEXTAREA`||e.isContentEditable:!1}function va({changes:e,turn:t,review:n,onJump:r,onClose:i}){let o=(0,Q.useRef)(null),s=(0,Q.useId)(),c=ua(n),l=Qi(e);(0,Q.useEffect)(()=>(ga=s,o.current?.querySelector(`button`)?.focus({preventScroll:!0}),()=>{ga===s&&(ga=null)}),[s]);let u=c.cancel,d=c.open;(0,Q.useEffect)(()=>{let e=e=>{e.key!==`Escape`||ga!==s||!ea(o.current)||_a(document.activeElement)||(e.preventDefault(),d?u():i())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[s,d,u,i]);let f=!!c.preview&&da(c.preview).length===0;return(0,$.jsxs)(`div`,{ref:o,"data-testid":`turn-change-tray`,className:`mt-0.5 rounded-xl border border-border bg-panel shadow-[var(--shadow-float)]`,children:[(0,$.jsxs)(`div`,{className:`relative flex min-h-12 flex-wrap items-center gap-x-2.5 gap-y-1.5 border-b border-border-soft py-1.5 pr-2 pl-3.5`,children:[(0,$.jsx)(`h4`,{className:`m-0 text-[13px] font-semibold`,children:`Changed this turn`}),(0,$.jsxs)(`span`,{className:`inline-flex items-center gap-1.5 text-xs text-text-subtle`,children:[ia(e),` · `,(0,$.jsx)(jn,{added:l.added,removed:l.removed,className:`font-mono text-[11px]`})]}),(0,$.jsxs)(`div`,{className:`relative ml-auto flex flex-wrap items-center justify-end gap-1.5`,children:[n.enabled&&t&&(0,$.jsxs)(ct,{variant:`ghost`,size:`sm`,className:`text-text-secondary`,"aria-expanded":c.open,disabled:n.busy&&!c.open,onClick:()=>c.open?c.cancel():void c.start(),children:[(0,$.jsx)(fe,{}),`Revert turn…`]}),n.summary.open>0&&(0,$.jsxs)(ct,{size:`sm`,disabled:n.busy,onClick:n.keepAll,children:[(0,$.jsx)(a,{}),`Keep all`]}),n.enabled&&(0,$.jsxs)(ct,{variant:`ghost`,size:`sm`,className:`text-primary hover:text-primary`,onClick:()=>n.openReview(e[0]?.filePath),children:[(0,$.jsx)(z,{}),`Review in tab`]}),(0,$.jsx)(`button`,{type:`button`,onClick:i,"aria-label":`Close change tray`,title:`Close (Esc)`,className:`inline-grid size-8 shrink-0 place-items-center rounded-lg text-text-subtle transition-colors hover:bg-surface hover:text-text-primary`,children:(0,$.jsx)(ve,{className:`size-3.5`})}),c.open&&t&&(0,$.jsxs)(`div`,{role:`dialog`,"aria-label":`Revert ${gn(t)}?`,"data-testid":`revert-turn-confirm`,className:`absolute top-full right-0 z-40 mt-1.5 w-[400px] max-w-[calc(100vw-48px)] rounded-xl border border-border bg-panel-2 p-3.5 text-[12.5px] leading-normal shadow-[var(--shadow-float),0_18px_40px_-16px_rgba(0,0,0,.6)]`,children:[(0,$.jsxs)(`h5`,{className:`m-0 mb-1.5 flex items-center gap-2 text-[13px] font-semibold text-text`,children:[(0,$.jsx)(fe,{className:`size-4 text-error`}),`Revert `,gn(t),`?`]}),(0,$.jsx)(ha,{flow:c,mobile:!1}),(0,$.jsxs)(`div`,{className:`mt-3 flex justify-end gap-1.5`,children:[(0,$.jsx)(ct,{variant:`ghost`,size:`sm`,onClick:c.cancel,children:`Cancel`}),(0,$.jsxs)(ct,{variant:`destructive`,size:`sm`,disabled:c.loading||!c.preview||f,onClick:()=>void c.confirm(),children:[(0,$.jsx)(fe,{}),`Revert turn`]})]})]})]})]}),n.notice&&(0,$.jsx)(la,{notice:n.notice,mobile:!1,busy:n.busy,onUndo:n.undo,onDismiss:n.dismissNotice}),(0,$.jsx)(`div`,{className:`max-h-[560px] overflow-y-auto rounded-b-xl px-3 pt-1 pb-3`,children:e.map(e=>(0,$.jsx)(ca,{change:e,review:n,mobile:!1,onJump:r},e.filePath))})]})}var ya=`inline-flex h-11 flex-1 items-center justify-center gap-2 rounded-[10px] border px-3.5 text-sm font-medium disabled:opacity-50`;function ba({label:e,onClick:t,children:n}){return(0,$.jsx)(`button`,{type:`button`,onClick:t,"aria-label":e,className:`inline-flex size-11 shrink-0 items-center justify-center rounded-lg text-text-subtle transition-colors hover:bg-surface hover:text-text-primary`,children:n})}function xa({title:e,sub:t,icon:n,onClose:r,children:i}){return(0,$.jsxs)(`div`,{className:`flex shrink-0 items-center gap-1 pt-0.5 pr-1.5 pb-2 pl-4`,children:[(0,$.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2`,children:[n,(0,$.jsx)(`h4`,{className:`m-0 min-w-0 truncate text-[15px] font-semibold`,children:e})]}),t&&(0,$.jsx)(`p`,{className:`m-0 mt-0.5 line-clamp-2 text-xs text-text-subtle`,children:t})]}),i,(0,$.jsx)(ba,{label:`Close`,onClick:r,children:(0,$.jsx)(ve,{className:`size-5`})})]})}function Sa({changes:e,turn:t,review:n,open:r,onClose:i,onJump:o}){let s=(0,Q.useRef)(null),c=ua(n),{summary:l}=n,u=()=>{c.cancel(),i()},d=e=>{u(),o(e)};(0,Q.useEffect)(()=>{if(!r)return;let e=s.current,t=()=>Array.from(e?.querySelectorAll(`button:not([disabled])`)??[]);t()[0]?.focus();let n=e=>{if(e.key===`Escape`){e.preventDefault(),c.open?c.cancel():u();return}if(e.key!==`Tab`)return;let n=t();if(n.length===0)return;let r=n[0],i=n[n.length-1];e.shiftKey&&document.activeElement===r?(e.preventDefault(),i.focus()):!e.shiftKey&&document.activeElement===i&&(e.preventDefault(),r.focus())};return window.addEventListener(`keydown`,n),()=>window.removeEventListener(`keydown`,n)},[r,c.open]);let f=!!c.preview&&da(c.preview).length===0,p=t?vn(t.at):``;return(0,$.jsx)(Z,{open:r,onClose:u,className:`flex max-h-[90%] flex-col rounded-t-[14px] motion-reduce:animate-none`,children:(0,$.jsx)(`div`,{ref:s,"data-testid":`turn-change-sheet`,className:`flex min-h-0 flex-1 flex-col`,children:c.open&&t?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(xa,{title:`Revert ${gn(t)}?`,sub:[p,t.prompt].filter(Boolean).join(` · `),icon:(0,$.jsx)(fe,{className:`size-5 shrink-0 text-error`}),onClose:c.cancel}),(0,$.jsx)(`div`,{"data-testid":`revert-turn-confirm`,className:`min-h-0 flex-1 overflow-y-auto px-4 text-sm leading-normal`,children:(0,$.jsx)(ha,{flow:c,mobile:!0})}),(0,$.jsxs)(`div`,{className:`flex gap-2 px-4 pt-3 pb-1`,children:[(0,$.jsx)(`button`,{type:`button`,className:q(ya,`border-border bg-panel-2 text-text`),onClick:c.cancel,children:`Cancel`}),(0,$.jsxs)(`button`,{type:`button`,disabled:c.loading||!c.preview||f,className:q(ya,`border-transparent bg-[color-mix(in_srgb,var(--error)_85%,#000)] text-white`),onClick:()=>void c.confirm(),children:[(0,$.jsx)(fe,{className:`size-5`}),`Revert turn`]})]})]}):(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(xa,{title:`Changed this turn`,sub:`${ia(e)}${l.kept>0?` · ${l.kept} kept`:``}`,onClose:u,children:n.enabled&&(0,$.jsxs)(`button`,{type:`button`,onClick:()=>{u(),n.openReview(e[0]?.filePath)},className:`inline-flex h-11 shrink-0 items-center gap-1.5 rounded-lg px-2.5 text-sm font-medium text-primary`,children:[(0,$.jsx)(z,{className:`size-4`}),`Review`]})}),n.notice&&(0,$.jsx)(la,{notice:n.notice,mobile:!0,busy:n.busy,onUndo:n.undo,onDismiss:n.dismissNotice}),(0,$.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto border-t border-border-soft px-3 pb-3`,children:e.map(e=>(0,$.jsx)(ca,{change:e,review:n,mobile:!0,onJump:d},e.filePath))}),n.enabled&&(t||l.open>0)&&(0,$.jsxs)(`div`,{className:`flex gap-2 px-3 pt-2 pb-1`,children:[t&&(0,$.jsxs)(`button`,{type:`button`,disabled:n.busy,className:q(ya,`border-border bg-panel-2 text-text`),onClick:()=>void c.start(),children:[(0,$.jsx)(fe,{className:`size-5`}),`Revert turn…`]}),l.open>0&&(0,$.jsxs)(`button`,{type:`button`,disabled:n.busy,className:q(ya,`border-transparent bg-primary text-primary-foreground`),onClick:n.keepAll,children:[(0,$.jsx)(a,{className:`size-5`}),`Keep all `,l.open]})]})]})})})}function Ca({timestamp:e,content:t,changes:n,turn:r,onJumpToEdit:i,onReply:a}){let[o,s]=(0,Q.useState)(!1),c=X(),l=(0,Q.useRef)(null),u=qi({changes:n,turn:r}),d=Wi(),f=()=>{s(!1),l.current?.focus()},p=(0,$.jsxs)(Zi,{timestamp:e,content:t,className:`-mt-1.5`,children:[a&&(0,$.jsx)(Yi,{icon:(0,$.jsx)(fe,{className:`size-3.5`}),label:`Reply`,title:`Reply to this message`,onClick:a,touchTarget:!0}),n&&n.length>0&&(0,$.jsx)($i,{ref:l,count:n.length,totals:Qi(n),status:Vi(u.summary),open:o,onToggle:()=>{if(o)return f();d?.refresh(),s(!0)}})]});return!n||n.length===0?p:(0,$.jsxs)($.Fragment,{children:[p,c?(0,$.jsx)(Sa,{changes:n,turn:r,review:u,open:o,onClose:f,onJump:i??(()=>{})}):o&&(0,$.jsx)(va,{changes:n,turn:r,review:u,onJump:e=>{s(!1),i?.(e)},onClose:f})]})}function wa({usage:e}){let[t,n]=(0,Q.useState)(!1),r=Pr(e);if(r.level===`ok`)return null;let i=Lr(e),a=kr(e),o=Math.round(e.cacheHitRate*100),s=r.level===`bad`;return(0,$.jsxs)(`div`,{className:`rounded-md border px-2.5 py-2 text-[11px] ${s?`border-warning/40 bg-warning/10`:`border-border bg-surface`}`,children:[(0,$.jsxs)(`button`,{onClick:()=>n(e=>!e),"aria-expanded":t,className:`flex w-full items-start gap-2 py-1 text-left text-text-secondary transition-colors hover:text-text-primary`,children:[(0,$.jsx)(xe,{className:`mt-px size-3.5 shrink-0 ${s?`text-warning`:`text-text-subtle`}`}),(0,$.jsxs)(`span`,{className:`flex-1`,children:[`Costly turn — `,o,`% of a `,Rr(a),`-token transcript came from cache, so it cost about`,` `,(0,$.jsxs)(`strong`,{className:`font-semibold`,children:[i.toFixed(1),`x`]}),` a fully cached turn.`]}),(0,$.jsx)(ee,{className:`mt-px size-3.5 shrink-0 transition-transform ${t?`rotate-180`:``}`})]}),t&&(0,$.jsxs)(`div`,{className:`mt-2 flex flex-col gap-2 border-t border-border pt-2`,children:[r.reason&&(0,$.jsx)(`p`,{className:`text-text-secondary`,children:r.reason}),(0,$.jsxs)(`dl`,{className:`grid grid-cols-2 gap-x-3 gap-y-1 font-mono text-[10.5px] text-text-subtle`,children:[(0,$.jsx)(Ta,{label:`From cache`,value:`${Rr(e.cacheReadTokens)} (${o}%)`}),(0,$.jsx)(Ta,{label:`Written to cache`,value:Rr(e.cacheWriteTokens)}),(0,$.jsx)(Ta,{label:`Fresh input`,value:Rr(e.inputTokens)}),(0,$.jsx)(Ta,{label:`Output`,value:Rr(e.outputTokens)}),(0,$.jsx)(Ta,{label:`Model`,value:e.model||`unknown`}),(0,$.jsx)(Ta,{label:`Cost`,value:`$${e.costUsd.toFixed(4)}`})]}),(0,$.jsx)(`p`,{className:`text-text-subtle`,children:`A turn stays cached while the session keeps running. Closing the last tab of an idle session, switching model, or a retry all restart it, and the next turn re-sends the transcript at full price.`})]})]})}function Ta({label:e,value:t}){return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(`dt`,{className:`truncate`,children:e}),(0,$.jsx)(`dd`,{className:`truncate text-right text-text-secondary`,children:t})]})}function Ea(e,t,n,r){let[i,a]=(0,Q.useState)([]),o=(0,Q.useRef)(null);return(0,Q.useEffect)(()=>{if(!n||!e||!t){a([]);return}let r=!1;return o.current&&clearTimeout(o.current),o.current=setTimeout(()=>{W.get(`/api/project/${encodeURIComponent(e)}/chat/sessions/${encodeURIComponent(t)}/tasks`).then(e=>{r||a(e)}).catch(()=>{})},300),()=>{r=!0,o.current&&clearTimeout(o.current)}},[e,t,n,r]),i}var Da=new Set([`TaskCreate`,`TaskUpdate`,`TaskStop`]);function Oa(e){let t=0;for(let n of e)if(n.events)for(let e of n.events)e.type===`tool_use`&&Da.has(e.tool)&&t++;return t}var ka={completed:{icon:`✓`,cls:`text-success`},in_progress:{icon:`▶`,cls:`text-warning`},stopped:{icon:`■`,cls:`text-text-subtle`},pending:{icon:`○`,cls:`text-text-subtle`}};function Aa({projectName:e,sessionId:t,messages:n}){let r=(0,Q.useMemo)(()=>Oa(n),[n]),i=Ea(e,t,r>0,r),[a,o]=(0,Q.useState)(!0);if(i.length===0||i.every(e=>e.status===`completed`||e.status===`stopped`))return null;let s=i.filter(e=>e.status===`completed`).length,c=i.length,l=c?Math.round(s/c*100):0;return(0,$.jsxs)(`div`,{className:`shrink-0 border-b border-border bg-surface/60 backdrop-blur-sm`,children:[(0,$.jsxs)(`button`,{type:`button`,onClick:()=>o(e=>!e),className:`flex items-center gap-2 w-full px-3 min-h-11 text-left text-xs hover:bg-surface transition-colors`,children:[a?(0,$.jsx)(v,{className:`size-3.5 shrink-0`}):(0,$.jsx)(ee,{className:`size-3.5 shrink-0`}),(0,$.jsx)(ce,{className:`size-3.5 shrink-0 text-text-secondary`}),(0,$.jsx)(`span`,{className:`text-text-primary font-medium`,children:`Tasks`}),(0,$.jsxs)(`span`,{className:`text-text-subtle`,children:[s,`/`,c,` done`]}),(0,$.jsx)(`span`,{className:`ml-auto h-1 w-16 rounded-full bg-border overflow-hidden shrink-0`,children:(0,$.jsx)(`span`,{className:`block h-full bg-success/70`,style:{width:`${l}%`}})})]}),!a&&(0,$.jsx)(`ul`,{className:`px-3 pb-2 space-y-0.5 max-h-48 overflow-y-auto`,children:i.map(e=>(0,$.jsx)(ja,{task:e},e.id))})]})}function ja({task:e}){let t=ka[e.status]??ka.pending,n=e.status===`in_progress`;return(0,$.jsxs)(`li`,{className:`flex items-start gap-1.5 text-xs rounded px-1 ${n?`bg-warning/10`:``}`,children:[(0,$.jsx)(`span`,{className:`shrink-0 mt-0.5 ${t.cls}`,children:t.icon}),(0,$.jsx)(`span`,{className:e.status===`completed`?`line-through text-text-subtle`:n?`text-text-primary font-medium`:`text-text-secondary`,children:e.subject||(0,$.jsxs)(`span`,{className:`text-text-subtle italic`,children:[`#`,e.id,` (no title)`]})})]})}var Ma=/read the full transcript at:\s*(\S+\.jsonl)/i;function Na(e){return e.match(Ma)?.[1]?.trim()??null}var Pa=class extends Q.Component{state={hasError:!1};static getDerivedStateFromError(){return{hasError:!0}}render(){return this.state.hasError?this.props.fallback?this.props.fallback:this.props.fallbackContent?(0,$.jsx)(`div`,{className:`text-sm whitespace-pre-wrap break-words text-text-primary opacity-80`,children:this.props.fallbackContent}):null:this.props.children}},Fa=K(()=>import(`./markdown-renderer-BNzQeoAO.js`),__vite__mapDeps([4,5,1,2,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61])),Ia=(0,Q.lazy)(()=>Fa.then(e=>({default:e.MarkdownRenderer}))),La=/<teammate-message[^>]*>[\s\S]*?<\/teammate-message>/g;function Ra(e){return e.replace(La,``).replace(/\n{3,}/g,`
|
|
7
7
|
|
|
8
8
|
`).trim()}function za({content:e,projectName:t,isStreaming:n,rawHtml:r}){let i=Ra(e);return i?(0,$.jsx)(Pa,{fallbackContent:i,children:(0,$.jsx)(Q.Suspense,{fallback:(0,$.jsx)(`div`,{className:`animate-pulse h-4 bg-muted rounded`}),children:(0,$.jsx)(Ia,{content:i,projectName:t,codeActions:!0,isStreaming:n,rawHtml:r})})}):null}function Ba({reply:e,onJump:t,unavailable:n,onCancel:r,preview:i}){let[a,o]=(0,Q.useState)(!1);return(0,$.jsxs)(`div`,{className:`mb-2 min-w-0 rounded-md border border-border border-l-2 border-l-primary bg-surface/60 px-2 py-1 text-xs text-text-secondary`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,$.jsxs)(`button`,{type:`button`,onClick:t,disabled:!t,className:`min-h-[44px] md:min-h-0 text-left font-medium text-primary disabled:text-text-secondary`,children:[i?`Replying to `:`Reply to `,e.role===`user`?`you`:`AI`]}),r&&(0,$.jsx)(`button`,{type:`button`,onClick:r,"aria-label":`Cancel reply`,title:`Cancel reply`,className:`flex min-h-[44px] min-w-[44px] items-center justify-center rounded hover:bg-surface-hover`,children:(0,$.jsx)(F,{className:`size-4`})})]}),(0,$.jsx)(`p`,{className:`whitespace-pre-wrap break-words select-text ${a?`max-h-60 overflow-y-auto`:`line-clamp-2`}`,children:e.quote}),e.truncated&&(0,$.jsx)(`p`,{className:`mt-1 text-text-subtle`,children:`Quote shortened to 12,000 characters`}),n&&(0,$.jsx)(`p`,{className:`mt-1 text-text-subtle`,children:`Original message unavailable`}),(0,$.jsx)(`button`,{type:`button`,onClick:()=>o(!a),className:`min-h-[44px] md:min-h-0 text-primary hover:underline`,children:a?`Show less`:`Show quote`})]})}function Va({group:e,onNavigate:t,disabled:n}){if(!e||e.ids.length<2)return null;let{ids:r,currentIndex:i}=e,a=e=>{let i=r[e];i&&!n&&t(i)};return(0,$.jsxs)(`div`,{className:`mt-1 flex items-center gap-1 text-xs text-text-subtle select-none`,children:[(0,$.jsx)(`button`,{type:`button`,onClick:()=>a(i-1),disabled:n||i<=0,"aria-label":`Previous version`,className:`flex items-center justify-center rounded p-0.5 hover:text-text-primary disabled:opacity-30 disabled:cursor-default`,children:(0,$.jsx)(h,{className:`size-3.5`})}),(0,$.jsxs)(`span`,{className:`tabular-nums`,children:[i+1,`/`,r.length]}),(0,$.jsx)(`button`,{type:`button`,onClick:()=>a(i+1),disabled:n||i>=r.length-1,"aria-label":`Next version`,className:`flex items-center justify-center rounded p-0.5 hover:text-text-primary disabled:opacity-30 disabled:cursor-default`,children:(0,$.jsx)(v,{className:`size-3.5`})})]})}var Ha=new Set([`.png`,`.jpg`,`.jpeg`,`.gif`,`.webp`]);function Ua(e,t){let n=Le(e);return`/api/project/${encodeURIComponent(t??`_`)}/chat/uploads/${encodeURIComponent(n)}`}function Wa(e){let t=e.lastIndexOf(`.`);return t===-1?!1:Ha.has(e.slice(t).toLowerCase())}var Ga=new Map;function Ka(e){let[t,n]=(0,Q.useState)(()=>Ga.get(e)?.url??null),[r,i]=(0,Q.useState)(!1);return(0,Q.useEffect)(()=>{let t=Ga.get(e);if(t){n(t.url);return}let r=!1,a=Me();return fetch(e,{headers:a?{Authorization:`Bearer ${a}`}:{}}).then(e=>{if(!e.ok)throw Error(`Failed`);return e.blob()}).then(t=>{if(r)return;let i=URL.createObjectURL(t);Ga.set(e,{url:i}),n(i)}).catch(()=>{r||i(!0)}),()=>{r=!0}},[e]),{blobUrl:t,error:r}}function qa({filePath:e,projectName:t}){let{blobUrl:n,error:r}=Ka(Ua(e,t)),i=Kt(e=>e.open),a=Le(e);return(0,$.jsxs)(`button`,{type:`button`,onClick:e=>n&&i(n,a,ln(e.currentTarget)),className:`flex items-center gap-1 rounded-md border border-border/60 bg-background/40 px-1.5 py-0.5 text-[11px] text-text-secondary hover:bg-surface transition-colors cursor-pointer`,children:[n?(0,$.jsx)(`img`,{src:n,alt:a,[un]:``,className:`size-4 rounded-sm object-cover shrink-0`}):r?(0,$.jsx)(M,{className:`size-3 shrink-0`}):(0,$.jsx)(`div`,{className:`size-4 rounded-sm bg-surface animate-pulse shrink-0`}),(0,$.jsx)(`span`,{className:`truncate max-w-32`,children:a})]})}var Ja=new Set([`task-notification`,`environment_details`,`local-command-caveat`]);function Ya({content:e,messageId:t,timestamp:n,projectName:r,onFork:i,onEdit:a,onReply:o,onJumpToReply:s,replyAvailable:c,isEditing:l,sessionId:u,providerId:f,versionGroup:p,onNavigateVersion:m,versionNavDisabled:h}){let{files:g,text:_,tags:v,command:y,terminalBlocks:b,idePath:x,agent:S,replyTo:C}=(0,Q.useMemo)(()=>pn(e),[e]),w=v.some(e=>Ja.has(e.name)),[te,ne]=(0,Q.useState)(!1),[T,E]=(0,Q.useState)(!1),re=(0,Q.useRef)(null);return(0,Q.useEffect)(()=>{let e=re.current;if(!e)return;let t=()=>E(e.scrollHeight>e.clientHeight+2);t();let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[_]),(0,$.jsxs)(`div`,{className:q(`flex flex-col gap-1`,!w&&`items-end`),children:[(0,$.jsxs)(`div`,{"data-user-message":w?void 0:`true`,style:w?void 0:{borderRadius:`var(--rad) var(--rad) 4px var(--rad)`},className:q(`group/user relative px-3 py-2 text-sm border shadow-sm transition-all`,w?`rounded-lg bg-surface/40 border-border/40 text-text-secondary`:`max-w-[80%] bg-accent-wash border-accent-wash-border text-text`,l&&`ring-2 ring-primary/60 border-primary/40`),children:[C&&(0,$.jsx)(Ba,{reply:C,onJump:c?.(C)?()=>s?.(C):void 0,unavailable:!c?.(C)}),v.length>0&&(0,$.jsx)(Za,{tags:v}),S&&(0,$.jsx)(`div`,{className:`flex items-center gap-1.5 mb-0.5`,children:(0,$.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded-md bg-sky-500/15 border border-sky-500/25 px-2 py-0.5 text-xs font-medium text-sky-600 dark:text-sky-400`,children:[(0,$.jsx)(Ee,{className:`size-3 shrink-0`}),S]})}),y&&(0,$.jsx)(`div`,{className:`flex items-center gap-1.5 mb-0.5`,children:(0,$.jsxs)(`span`,{className:`inline-flex items-center gap-1 rounded-md bg-primary/15 border border-primary/20 px-2 py-0.5 text-xs font-medium text-primary`,children:[(0,$.jsx)(or,{className:`size-3 shrink-0`}),y.name]})}),x&&(0,$.jsxs)(`div`,{className:`flex items-center gap-1.5 mb-1 text-[11px] text-text-subtle`,children:[(0,$.jsx)(`span`,{className:`shrink-0`,children:`Opened in IDE:`}),(0,$.jsx)(to,{path:x,projectName:r})]}),g.length>0&&(0,$.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:g.map((e,t)=>Wa(e)?(0,$.jsx)(qa,{filePath:e,projectName:r},t):(0,$.jsxs)(`div`,{className:`flex items-center gap-1 rounded-md border border-border/60 bg-background/40 px-1.5 py-0.5 text-[11px] text-text-secondary`,children:[(0,$.jsx)(d,{className:`size-3 shrink-0`}),(0,$.jsx)(`span`,{className:`truncate max-w-32`,children:Le(e)})]},t))}),b.length>0&&(0,$.jsx)(`div`,{className:`space-y-1.5`,children:b.map((e,t)=>(0,$.jsx)(Xa,{content:e},t))}),_&&(0,$.jsx)(`div`,{ref:re,className:q(`whitespace-pre-wrap break-words transition-all duration-200 select-text`,!te&&`line-clamp-2`,te&&`max-h-[50vh] overflow-y-auto`),children:w?(0,$.jsx)(ro,{text:_,projectName:r}):(0,$.jsx)(no,{text:_})}),(T||te)&&(0,$.jsx)(`button`,{onClick:()=>ne(!te),className:q(`flex items-center gap-1 text-xs mt-1 transition-colors`,w?`text-text-subtle hover:text-text-secondary`:`text-primary/70 hover:text-primary`),children:te?(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(Ae,{className:`size-3`}),`Show less`]}):(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(ee,{className:`size-3`}),`Show more`]})}),!w&&m&&(0,$.jsx)(Va,{group:p,onNavigate:m,disabled:h})]}),!w&&(0,$.jsxs)(Zi,{timestamp:n,content:mn(e).content,children:[o&&(0,$.jsx)(Yi,{icon:(0,$.jsx)(fe,{className:`size-3.5`}),label:`Reply`,title:`Reply to this message`,onClick:o,touchTarget:!0}),a&&(0,$.jsx)(Yi,{icon:(0,$.jsx)(Te,{className:`size-3.5`}),label:`Edit`,title:`Edit this message (continue in the same tab)`,onClick:a}),i&&(0,$.jsx)(Yi,{icon:(0,$.jsx)(fe,{className:`size-3.5`}),label:`Fork`,title:`Retry from this message (fork into a new tab)`,onClick:i})]})]})}function Xa({content:e}){let[t,n]=(0,Q.useState)(!1);return(0,$.jsxs)(`div`,{children:[(0,$.jsxs)(`button`,{type:`button`,onClick:()=>n(!t),className:q(`flex items-center gap-1.5 rounded-md border px-2 py-1 text-xs transition-colors`,t?`border-primary/50 bg-surface-elevated text-text-primary`:`border-border/60 bg-background/40 text-text-secondary hover:bg-surface`),children:[(0,$.jsx)(ne,{className:`size-3.5 shrink-0`}),(0,$.jsx)(`span`,{children:`Terminal output`}),(0,$.jsx)(ee,{className:q(`size-3 shrink-0 transition-transform`,t&&`rotate-180`)})]}),t&&(0,$.jsx)(`pre`,{className:`mt-1 max-h-40 overflow-auto rounded-md border border-border bg-background p-2 text-xs text-text-primary font-mono whitespace-pre-wrap break-words`,children:e})]})}function Za({tags:e}){return(0,$.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:e.map((e,t)=>(0,$.jsx)(Qa,{tag:e},t))})}function Qa({tag:e}){let[t,n]=(0,Q.useState)(!1);return e.name===`task-notification`?(0,$.jsx)(eo,{content:e.content}):(0,$.jsxs)(`div`,{className:`text-xs`,children:[(0,$.jsxs)(`button`,{onClick:()=>n(!t),className:`flex items-center gap-1 rounded-full border border-border/60 bg-surface/50 px-2 py-0.5 text-text-subtle hover:text-text-secondary hover:bg-surface transition-colors`,children:[(0,$.jsx)(o,{className:`size-2.5`}),(0,$.jsx)(`span`,{children:e.label}),(0,$.jsx)(v,{className:q(`size-2.5 transition-transform`,t&&`rotate-90`)})]}),t&&(0,$.jsx)(`div`,{className:`mt-1 rounded border border-border/40 bg-surface/30 px-2 py-1.5 text-[11px] text-text-subtle/80 whitespace-pre-wrap max-h-40 overflow-y-auto leading-relaxed`,children:e.content})]})}function $a(e,t){return e.match(RegExp(`<${t}>([\\s\\S]*?)</${t}>`))?.[1]?.trim()||void 0}function eo({content:e}){let[t,n]=(0,Q.useState)(!1),r=$a(e,`status`),i=$a(e,`summary`),a=$a(e,`output-file`),o=$a(e,`result`);return(0,$.jsxs)(`div`,{className:`text-xs`,children:[(0,$.jsxs)(`button`,{onClick:()=>n(!t),className:`flex items-center gap-1.5 rounded-full border border-border/60 bg-surface/50 px-2 py-0.5 text-text-subtle hover:text-text-secondary hover:bg-surface transition-colors`,children:[r===`completed`?(0,$.jsx)(y,{className:`size-2.5 text-success`}):(0,$.jsx)(F,{className:`size-2.5 text-warning`}),(0,$.jsx)(`span`,{className:`truncate max-w-80`,children:i??`Task notification`}),(0,$.jsx)(v,{className:q(`size-2.5 transition-transform shrink-0`,t&&`rotate-90`)})]}),t&&(0,$.jsxs)(`div`,{className:`mt-1 rounded border border-border/40 bg-surface/30 px-2 py-1.5 space-y-1.5`,children:[i&&(0,$.jsx)(`p`,{className:`text-[11px] text-text-secondary`,children:i}),a&&(0,$.jsx)(to,{path:a}),o&&(0,$.jsx)(`div`,{className:`text-[11px] text-text-subtle/80 max-h-60 overflow-y-auto leading-relaxed`,children:(0,$.jsx)(za,{content:o,rawHtml:!1})})]})]})}function to({path:e,projectName:t}){return(0,$.jsxs)(`button`,{type:`button`,onClick:(0,Q.useCallback)(()=>{let n=Qe.getState().openTab,r=t??Ve.getState().activeProject?.name,i=Le(e),a={filePath:e};r&&(a.projectName=r),W.get(`/api/fs/read?path=${encodeURIComponent(e)}`).then(()=>{n({type:`editor`,title:i,metadata:a,projectId:null,closable:!0})}).catch(()=>{n({type:`editor`,title:i,metadata:a,projectId:null,closable:!0})})},[e,t]),className:`inline-flex items-center gap-1 rounded border border-border/50 bg-surface/50 px-1.5 py-0.5 font-mono text-[10px] text-text-secondary hover:text-text-primary hover:bg-surface transition-colors cursor-pointer`,children:[(0,$.jsx)(d,{className:`size-2.5 shrink-0`}),(0,$.jsx)(`span`,{className:`truncate max-w-60`,children:Le(e)}),(0,$.jsx)(pe,{className:`size-2 shrink-0 opacity-50`})]})}function no({text:e}){let t=(0,Q.useMemo)(()=>{let t=/(https?:\/\/[^\s<>()]+[^\s<>().,;:!?'"])/g,n=[],r=0,i;for(;(i=t.exec(e))!==null;)i.index>r&&n.push({kind:`text`,value:e.slice(r,i.index)}),n.push({kind:`url`,value:i[1]}),r=i.index+i[0].length;return r<e.length&&n.push({kind:`text`,value:e.slice(r)}),n},[e]);return t.every(e=>e.kind===`text`)?(0,$.jsx)($.Fragment,{children:e}):(0,$.jsx)($.Fragment,{children:t.map((e,t)=>e.kind===`url`?(0,$.jsx)(`a`,{href:e.value,target:`_blank`,rel:`noopener noreferrer`,className:`text-primary underline underline-offset-2 hover:text-primary/80 break-all`,onClick:e=>e.stopPropagation(),children:e.value},t):(0,$.jsx)(`span`,{children:e.value},t))})}function ro({text:e,projectName:t}){return(0,$.jsx)($.Fragment,{children:(0,Q.useMemo)(()=>{let t=/(\/(?:[\w.\-]+\/)+[\w.\-]+)/g,n=[],r=0,i;for(;(i=t.exec(e))!==null;)i.index>r&&n.push({kind:`text`,value:e.slice(r,i.index)}),n.push({kind:`path`,value:i[1]}),r=i.index+i[0].length;return r<e.length&&n.push({kind:`text`,value:e.slice(r)}),n},[e]).map((e,n)=>e.kind===`path`?(0,$.jsx)(to,{path:e.value,projectName:t},n):(0,$.jsx)(`span`,{children:e.value},n))})}function io({events:e,isStreaming:t,projectName:n,bashPartialOutput:r}){let i=[],a=``,o=``;for(let t=0;t<e.length;t++){let n=e[t];if(n.type===`thinking`){a&&=(i.push({kind:`text`,content:a}),``),o+=n.content;continue}if(o&&=(i.push({kind:`thinking`,content:o}),``),n.type===`account_retry`){a&&=(i.push({kind:`text`,content:a}),``);let e=n.accountLabel??`another account`,t=n.reason??`Auth failed`;i.push({kind:`text`,content:`\n\n> ↻ ${t} — retrying with **${e}**...\n\n`});continue}if(n.type===`text`)a+=n.content;else if(n.type===`tool_use`){let e=n.toolUseId,t=e?i.find(t=>t.kind===`tool`&&t.tool.type===`tool_use`&&t.tool.toolUseId===e):void 0;if(t){t.tool=n;continue}a&&=(i.push({kind:`text`,content:a}),``),i.push({kind:`tool`,tool:n})}else n.type===`tool_result`||(a&&=(i.push({kind:`text`,content:a}),``),i.push({kind:`tool`,tool:n}))}o&&i.push({kind:`thinking`,content:o}),a&&i.push({kind:`text`,content:a});let s=e.filter(e=>e.type===`tool_result`);for(let e of s){let t=e.toolUseId;if(t){let n=i.find(e=>e.kind===`tool`&&e.tool.type===`tool_use`&&e.tool.toolUseId===t);if(n){n.result=e;continue}}let n=i.find(e=>e.kind===`tool`&&!e.result);n&&(n.result=e)}for(let e of i)if(e.kind===`tool`&&!e.result&&e.tool.type===`tool_use`){let t=e.tool.result;t&&(e.result={type:`tool_result`,output:t.output,isError:t.isError,exitCode:t.exitCode})}for(let e=0;e<i.length;e++){let n=i[e];if(n.kind===`tool`&&!n.result){let r=!1;if(n.tool.type===`tool_use`&&n.tool.tool===`Read`){let t=n.tool.input?.file_path;t&&(r=i.slice(e+1).some(e=>e.kind===`tool`&&e.result&&e.tool.type===`tool_use`&&e.tool.tool===`Edit`&&e.tool.input?.file_path===t))}n.completed=r||!t}}return(0,$.jsx)($.Fragment,{children:i.map((e,a)=>{if(e.kind===`thinking`)return(0,$.jsx)(ao,{content:e.content,projectName:n,isStreaming:t&&a===i.length-1},`think-${a}`);if(e.kind===`text`){let r=t&&a===i.length-1;return(0,$.jsx)(`div`,{className:`text-sm text-text-primary select-text`,children:(0,$.jsx)(oo,{content:e.content,animate:r,projectName:n})},`text-${a}`)}if(e.tool.type===`tool_use`&&e.tool.tool===`RequestUserInput`&&!e.tool.parentToolUseId){let t=e.tool.input;return(0,$.jsx)(pr,{itemId:e.tool.toolUseId,questions:t.questions},e.tool.toolUseId)}return(0,$.jsx)(nn,{tool:e.tool,result:e.result,completed:e.completed,projectName:n,bashPartialOutput:r},`tool-${a}`)})})}function ao({content:e,projectName:t,isStreaming:n}){let[r,i]=(0,Q.useState)(n),a=(0,Q.useRef)(null);return(0,Q.useEffect)(()=>{!n&&e.length>0&&i(!1)},[n,e.length]),(0,Q.useEffect)(()=>{n&&r&&a.current&&(a.current.scrollTop=a.current.scrollHeight)},[e,n,r]),(0,$.jsxs)(`div`,{className:`rounded border border-border/50 bg-surface/30 text-xs`,children:[(0,$.jsxs)(`button`,{onClick:()=>i(!r),className:`flex items-center gap-2 px-2 py-1.5 w-full text-left hover:bg-surface transition-colors text-text-subtle`,children:[n?(0,$.jsx)(L,{className:`size-3 animate-spin`}):(0,$.jsx)(v,{className:`size-3 transition-transform ${r?`rotate-90`:``}`}),(0,$.jsxs)(`span`,{children:[`Thinking`,n?`...`:``]}),!n&&(0,$.jsx)(`span`,{className:`text-text-subtle/50 ml-auto`,children:e.length>100?`${Math.round(e.length/4)} tokens`:``})]}),r&&(0,$.jsx)(`div`,{ref:a,className:`max-h-60 overflow-y-auto`,children:(0,$.jsx)(`div`,{className:`px-2 pb-2 text-text-subtle/80 text-[11px] leading-relaxed`,children:(0,$.jsx)(za,{content:e,projectName:t,isStreaming:n})})})]})}function oo({content:e,animate:t,projectName:n}){return(0,$.jsxs)($.Fragment,{children:[(0,$.jsx)(za,{content:e,projectName:n,isStreaming:t}),t&&(0,$.jsx)(`span`,{className:`text-text-subtle text-sm animate-pulse`,children:`Thinking...`})]})}function so({lastMessage:e,phase:t,elapsed:n,statusMessage:r}){let i=!e||e.role!==`assistant`,a=e?.events?.length?e.events[e.events.length-1].type===`tool_result`:!1;return!r&&!i&&!a?null:(0,$.jsxs)(`div`,{className:`flex flex-col gap-1 text-sm`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2 text-text-subtle`,children:[(0,$.jsx)(L,{className:`size-3 animate-spin`}),(0,$.jsxs)(`span`,{children:[r||(t===`initializing`?`Initializing`:t===`connecting`?`Connecting`:t===`thinking`?`Thinking`:`Processing`),i&&(n??0)>0&&(0,$.jsxs)(`span`,{className:`text-text-subtle/60`,children:[`... (`,n,`s)`]})]})]}),t===`connecting`&&(n??0)>=30&&(0,$.jsx)(`p`,{className:`text-xs text-warning/80 ml-5`,children:`Taking longer than usual — may be rate-limited or API slow. Try sending a new message to retry.`})]})}function co({compaction:e}){let{trigger:t,preTokens:n,postTokens:r,savedTokens:i,durationMs:a}=e;return(0,$.jsxs)(`div`,{className:`flex items-center gap-2 pt-2 text-[11px] text-text-subtle`,title:[t===`manual`?`Ran with /compact`:`Ran automatically on a full context window`,`${Rr(n)} → ${Rr(r)} tokens`,...a==null?[]:[`took ${lo(a)}`]].join(` · `),children:[(0,$.jsx)(`div`,{className:`h-px flex-1 bg-border`}),(0,$.jsxs)(`span`,{className:`flex shrink-0 items-center gap-1.5`,children:[(0,$.jsx)(k,{className:`size-3.5`}),(0,$.jsxs)(`span`,{className:`tabular-nums`,children:[`Compacted session · saved `,Rr(i),` tokens`]})]}),(0,$.jsx)(`div`,{className:`h-px flex-1 bg-border`})]})}function lo(e){let t=Math.round(e/1e3);return t<60?`${t}s`:`${Math.floor(t/60)}m ${t%60}s`}function uo(){let[e,t]=(0,Q.useState)(()=>Date.now());return(0,Q.useEffect)(()=>{let e=setInterval(()=>t(Date.now()),6e4);return()=>clearInterval(e)},[]),e}function fo(e,t){let n=po(e,t);return n.kind===`cold`?{idleMs:n.idleMs,reason:n.reason,...n.contextTokens!=null&&{contextTokens:n.contextTokens}}:null}function po(e,t){if(!e)return{kind:`unknown`};if(e.compactedAt!=null)return{kind:`cold`,reason:`compacted`,idleMs:Math.max(0,t-e.compactedAt)};if(e.lastTurnEndedAt==null||e.billedPrefixTokens==null||e.billedPrefixTokens<2e4)return{kind:`unknown`};let n=t-e.lastTurnEndedAt;return n<e.ttlMs?{kind:`warm`,remainingMs:Math.min(e.ttlMs,e.ttlMs-n)}:{kind:`cold`,reason:`expired`,idleMs:n,...e.contextTokens!=null&&{contextTokens:e.contextTokens}}}var mo=6e4,ho=60*mo,go=24*ho;function _o(e){if(e>=go){let t=Math.floor(e/go),n=Math.floor(e%go/ho);return n>0?`${t}d ${n}h`:`${t}d`}if(e>=ho){let t=Math.floor(e/ho),n=Math.floor(e%ho/mo);return n>0?`${t}h ${n}m`:`${t}h`}return`${Math.max(1,Math.floor(e/mo))}m`}function vo(e){return`${Math.max(1,Math.ceil(e/mo))}m`}function yo(e){if(e>=1e6){let t=e/1e6;return`${t>=10?Math.round(t):t.toFixed(1)}M`}return e>=1e3?`${Math.round(e/1e3)}k`:`${e}`}function bo({promptCache:e}){let t=fo(e,uo());return t?(0,$.jsx)(`div`,{className:`px-4 pt-4 pb-4 select-none`,children:(0,$.jsxs)(`div`,{className:`flex w-fit items-start gap-2 rounded-md border border-border bg-surface px-2.5 py-2 text-[11px] text-text-secondary`,children:[(0,$.jsx)(P,{className:`mt-px size-3.5 shrink-0 text-text-subtle`}),t.reason===`compacted`?(0,$.jsxs)(`span`,{children:[`The conversation was compacted`,` `,(0,$.jsx)(`span`,{className:`tabular-nums`,children:_o(t.idleMs)}),` ago, so the prompt cache no longer covers it and your next message will re-cache it.`]}):(0,$.jsxs)(`span`,{children:[`Idle `,(0,$.jsx)(`span`,{className:`tabular-nums`,children:_o(t.idleMs)}),`. The prompt cache has likely expired, so your next message re-sends`,` `,t.contextTokens==null?`the whole transcript`:(0,$.jsxs)($.Fragment,{children:[`about`,` `,(0,$.jsx)(`span`,{className:`tabular-nums`,children:yo(t.contextTokens)}),` `,`tokens`]}),` `,`at full price.`]})]})}):null}function xo({projectName:e,onSelectSession:t}){return(0,$.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-6 text-text-secondary overflow-y-auto`,children:[(0,$.jsxs)(`div`,{className:`flex flex-col items-center gap-3 px-4 w-full`,children:[(0,$.jsx)(Ee,{className:`size-10 text-text-subtle`}),(0,$.jsx)(`p`,{className:`text-sm`,children:`Send a message to start a new conversation`}),(0,$.jsx)(zn,{compact:!0})]}),(0,$.jsx)(Wt,{projectName:e,onSelectSession:t,className:`w-full px-4`})]})}var So=3200,Co=1e3,wo={hasAbove:!1,atBottom:!0,idx:0,total:0};function To({scrollElement:e,userIndices:t,scrollToBottom:n}){let r=X(),[i,a]=(0,Q.useState)(wo),[o,s]=(0,Q.useState)(!1),[c,l]=(0,Q.useState)(0),u=(0,Q.useRef)(So),d=(0,Q.useRef)(null),f=(0,Q.useRef)(null),p=(0,Q.useRef)(!1),h=(0,Q.useRef)(!1),g=(e,t,n)=>t.getBoundingClientRect().top-n+e.scrollTop,_=(0,Q.useCallback)(e=>Array.from(e.querySelectorAll(`[data-msg-index]`)).filter(e=>t.includes(Number(e.dataset.msgIndex))),[t]);(0,Q.useEffect)(()=>{let t=e;if(!t)return;let n=0,r=()=>{let e=t.scrollTop,n=t.getBoundingClientRect().top,r=_(t).map(e=>g(t,e,n)),i=0;for(let t=0;t<r.length;t++)r[t]<=e+12&&(i=t+1);let o={hasAbove:r.some(t=>t<e-4),atBottom:t.scrollHeight-e-t.clientHeight<8,idx:i,total:r.length};a(e=>e.hasAbove===o.hasAbove&&e.atBottom===o.atBottom&&e.idx===o.idx&&e.total===o.total?e:o)},i=()=>{n&&cancelAnimationFrame(n),n=requestAnimationFrame(r)};r(),t.addEventListener(`scroll`,i,{passive:!0});let o=new ResizeObserver(i);return o.observe(t),()=>{n&&cancelAnimationFrame(n),t.removeEventListener(`scroll`,i),o.disconnect()}},[e,_]),(0,Q.useEffect)(()=>{if(!o)return;let e=setTimeout(()=>s(!1),u.current);return()=>clearTimeout(e)},[o,i.idx,c]),(0,Q.useEffect)(()=>{if(!o||!h.current)return;h.current=!1;let e=d.current;(e?.querySelector(`button:not(:disabled)`)??e)?.focus()},[o]),(0,Q.useEffect)(()=>{o||!p.current||(p.current=!1,f.current?.focus())},[o]);let v=(0,Q.useCallback)(()=>{u.current=So,l(e=>e+1)},[]),y=(0,Q.useCallback)(()=>{let t=e;if(!t)return;let n=t.scrollTop,r=t.getBoundingClientRect().top,i;for(let e of _(t)){let a=g(t,e,r);if(a<n-4)i=a;else break}i!=null&&t.scrollTo({top:i,behavior:`auto`}),v()},[e,_,v]),b=(0,Q.useCallback)(()=>{let t=e;if(!t)return;let r=t.scrollTop,i=t.getBoundingClientRect().top,a=_(t).map(e=>g(t,e,i)).find(e=>e>r+4);a==null?n({animation:`instant`}):t.scrollTo({top:a,behavior:`auto`}),v()},[e,_,n,v]),x=(0,Q.useCallback)(()=>{n({animation:`instant`}),v()},[n,v]);(0,Q.useEffect)(()=>{let t=e;if(!t)return;let n=e=>()=>{ea(t)&&(e(),u.current=Co,s(!0))},r=n(y),i=n(b);return window.addEventListener(`chat-nav-prev`,r),window.addEventListener(`chat-nav-next`,i),()=>{window.removeEventListener(`chat-nav-prev`,r),window.removeEventListener(`chat-nav-next`,i)}},[e,y,b]);let S=q(`w-[34px] flex items-center justify-center rounded-[9px] text-text-secondary`,`motion-safe:transition-colors hover:bg-surface-elevated hover:text-foreground`,`disabled:opacity-30 disabled:cursor-default disabled:hover:bg-transparent disabled:hover:text-text-secondary`,r?`h-9`:`h-[30px]`);return(0,$.jsx)(`div`,{className:`absolute bottom-3 right-2.5 z-10 flex flex-col items-end gap-1.5`,children:o?(0,$.jsxs)(`div`,{ref:d,tabIndex:-1,className:`flex flex-col p-[3px] rounded-xl border border-border bg-surface-elevated/95 backdrop-blur-[8px] shadow-lg outline-none`,onFocus:()=>{p.current=!0},onKeyDown:e=>{e.key===`Escape`&&s(!1)},children:[(0,$.jsx)(`button`,{type:`button`,onClick:y,disabled:!i.hasAbove,"aria-label":`Jump to previous message`,className:S,children:(0,$.jsx)(Ae,{className:`size-[15px]`})}),(0,$.jsx)(`span`,{className:`font-mono text-[10px] font-medium text-text-subtle text-center py-px`,"aria-label":`Message ${i.idx||1} of ${i.total}`,children:i.total?`${i.idx||1}/${i.total}`:`0/0`}),(0,$.jsx)(`button`,{type:`button`,onClick:b,disabled:i.atBottom,"aria-label":`Jump to next message`,className:S,children:(0,$.jsx)(ee,{className:`size-[15px]`})}),(0,$.jsx)(`button`,{type:`button`,onClick:x,disabled:i.atBottom,"aria-label":`Jump to latest`,className:S,children:(0,$.jsx)(T,{className:`size-[13px]`})})]}):(0,$.jsx)(`button`,{ref:f,type:`button`,onClick:()=>{u.current=So,h.current=!0,s(!0)},"aria-label":`Navigate messages`,"aria-expanded":!1,title:`Navigate messages`,className:q(`group flex items-center justify-center`,r?`size-11`:`size-[30px]`),children:(0,$.jsx)(`span`,{className:q(`flex items-center justify-center rounded-full border border-border bg-surface-elevated/55 backdrop-blur-[6px] text-text-subtle`,`motion-safe:transition-colors group-hover:bg-surface-elevated group-hover:text-foreground`,r?`size-9`:`size-[30px]`),children:(0,$.jsx)(m,{className:`size-[15px]`})})})})}function Eo({requestId:e,input:t}){let[n,r]=(0,Q.useState)(``),[i,a]=(0,Q.useState)(!1),[o,s]=(0,Q.useState)(null),c=!i&&(!t.passwordRequired||n.length>0),l=dn(t.dbType,t.sql),d=async r=>{a(!0),s(null);let i=r&&t.passwordRequired?{approved:r,password:n}:{approved:r};try{await W.post(`/api/db/ai-approvals/${encodeURIComponent(e)}`,i)}catch(e){s(e instanceof Error?e.message:String(e)),a(!1)}};return(0,$.jsxs)(`div`,{className:`rounded-lg border-2 border-warning/40 bg-warning/10 p-3 space-y-2 select-text`,children:[(0,$.jsxs)(`div`,{className:`flex items-center gap-2 text-warning text-sm font-medium`,children:[(0,$.jsx)(u,{className:`size-4`}),(0,$.jsx)(`span`,{children:`Approve a database change`})]}),(0,$.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1.5 text-xs`,children:[t.color&&(0,$.jsx)(`span`,{className:`size-2.5 rounded-full shrink-0`,style:{backgroundColor:t.color}}),(0,$.jsx)(`span`,{className:`font-medium text-text-primary`,children:t.connectionName}),t.database&&(0,$.jsxs)(`span`,{className:`font-mono text-text-secondary`,children:[`/ `,t.database]}),(0,$.jsxs)(`span`,{className:`text-text-subtle`,children:[bt[t.dbType]??t.dbType,t.group?` · ${t.group}`:``]}),t.readonly&&(0,$.jsx)(`span`,{className:`rounded px-1.5 py-0.5 text-[10px] bg-panel-2 text-text-3`,children:`readonly — lifted for this script only`})]}),t.reason&&(0,$.jsx)(`p`,{className:`text-xs text-text-primary whitespace-pre-wrap`,children:t.reason}),(0,$.jsx)(`pre`,{className:`text-xs font-mono text-text-secondary overflow-auto max-h-64 whitespace-pre-wrap break-all bg-background rounded p-2 border border-border`,children:t.sql}),(0,$.jsxs)(`p`,{className:`text-[11px] text-text-subtle`,children:[`Runs once, in one transaction.`,t.expectedRows!=null&&` Rolled back unless exactly ${t.expectedRows} row${t.expectedRows===1?``:`s`} change.`]}),l&&(0,$.jsx)(`p`,{className:`text-[11px] text-warning`,children:l}),(0,$.jsxs)(`form`,{className:`flex flex-col gap-2 md:flex-row md:items-center`,onSubmit:e=>{e.preventDefault(),c&&d(!0)},children:[t.passwordRequired&&(0,$.jsx)(yt,{type:`password`,autoComplete:`current-password`,placeholder:`PPM password`,"aria-label":`PPM password`,value:n,onChange:e=>r(e.target.value),"aria-invalid":!!o,disabled:i,className:`h-11 md:h-8 md:max-w-56`}),(0,$.jsxs)(`div`,{className:`flex gap-2`,children:[(0,$.jsx)(`button`,{type:`submit`,disabled:!c,className:`flex-1 md:flex-none h-11 md:h-8 px-4 rounded bg-warning text-white text-xs font-medium hover:bg-warning/80 transition-colors disabled:opacity-50`,children:`Run once`}),(0,$.jsx)(`button`,{type:`button`,disabled:i,onClick:()=>void d(!1),className:`flex-1 md:flex-none h-11 md:h-8 px-4 rounded border border-border text-text-primary text-xs font-medium hover:bg-panel-2 transition-colors disabled:opacity-50`,children:`Decline`})]})]}),o&&(0,$.jsx)(`p`,{className:`text-xs text-error`,children:o})]})}var Do=8e3;function Oo(){return(0,$.jsxs)(`div`,{className:`px-4 pt-4 space-y-4`,"aria-busy":`true`,"aria-label":`Loading previous conversation`,children:[(0,$.jsxs)(`div`,{className:`flex items-center justify-center gap-1.5 text-xs text-text-secondary`,children:[(0,$.jsx)(L,{className:`size-3 animate-spin`}),`Loading previous conversation…`]}),[0,1,2].map(e=>(0,$.jsx)(`div`,{className:e%2==0?`flex justify-end`:`flex justify-start`,children:(0,$.jsxs)(`div`,{className:`animate-pulse space-y-2 rounded-lg bg-surface p-3 ${e%2==0?`w-1/2`:`w-3/4`}`,children:[(0,$.jsx)(`div`,{className:`h-3 rounded bg-border`}),(0,$.jsx)(`div`,{className:`h-3 w-5/6 rounded bg-border`}),e%2==1&&(0,$.jsx)(`div`,{className:`h-3 w-2/3 rounded bg-border`})]})},e))]})}function ko({messages:e,messagesLoading:t,keepStaleWhileLoading:n,pendingApproval:r,onApprovalResponse:i,isStreaming:a,phase:o,onSelectSession:s,connectingElapsed:c,statusMessage:l,compactStatus:u,promptCache:d,projectName:f,onFork:p,onEdit:m,editingMsgId:h,sessionId:g,providerId:_,onNavigateVersion:v,versionMap:y,bashPartialOutput:b,onExpandCompact:x,isCompactExpanded:S,hasOlderHistory:C=!1,onLoadOlderHistory:ee,userOrdinalOffset:w=0,historyPredecessorId:te=null,onDismissMessage:ne,onClearErrors:T,onReply:E}){let{scrollRef:re,contentRef:ie,scrollToBottom:ae,stopScroll:oe,isAtBottom:D}=wi({initial:`instant`,resize:`instant`}),O=(0,Q.useMemo)(()=>e.filter(e=>{let t=e.content&&e.content.trim().length>0,n=e.events&&e.events.length>0;return e.role===`user`?t:t||n}),[e]),se=(0,Q.useMemo)(()=>vi(O),[O]),ce=!!r||a,le=r?fn(r.tool,r.input):null,[k,ue]=(0,Q.useState)(null),de=(0,Q.useCallback)(e=>{re(e),ue(e)},[re]),fe=(0,Q.useRef)(new Map),pe=(0,Q.useMemo)(()=>{let e=fe.current,t=new Map;for(let n=0;n<O.length;n++){let r=O[n];if(r.role!==`assistant`||O[n+1]?.role===`assistant`)continue;let i=`${r.id}:${r.events?.length??0}`,a=e.get(i);a||(a=tn($t(O,n)),e.set(i,a)),a.length>0&&t.set(n,a)}return t},[O]),me=(0,Q.useRef)(null),he=(0,Q.useCallback)(e=>{k&&(me.current?.(),me.current=Ii(k,e))},[k]);(0,Q.useEffect)(()=>()=>me.current?.(),[]);let ge=(0,Q.useMemo)(()=>bn(e),[e]);(0,Q.useEffect)(()=>{g&&Cn.getState().publish(g,ge,!0)},[g,ge]);let _e=(0,Q.useRef)(new Map),ve=(0,Q.useMemo)(()=>{let e=new Map(ge.map(e=>[e.messageId,e])),t=new Map;for(let n of pe.keys()){let r;for(let t=n;t>=0&&!r;t--)O[t].role===`user`&&(r=e.get(O[t].id));if(!r)continue;let i=_e.current.get(r.messageId);i&&i.n===r.n&&i.at===r.at&&i.prompt===r.prompt&&i.calls.length===r.calls.length&&i.calls[i.calls.length-1]===r.calls[r.calls.length-1]?r=i:_e.current.set(r.messageId,r),t.set(n,r)}return t},[ge,pe,O]);(0,Q.useEffect)(()=>{if(g)return()=>Cn.getState().release(g)},[g]);let[A,M]=(0,Q.useState)(!1),[N,ye]=(0,Q.useState)(null),be=(0,Q.useRef)(null);(0,Q.useLayoutEffect)(()=>{let e=k;e&&be.current!=null&&(e.scrollTop=e.scrollHeight-be.current,A||(be.current=null))},[O.length,k,A]),(0,Q.useLayoutEffect)(()=>{k&&ae({animation:`instant`})},[g,k]);let xe=(0,Q.useRef)(!0);(0,Q.useEffect)(()=>{k&&k.clientHeight>0&&(xe.current=D)},[D,k]),(0,Q.useEffect)(()=>{let e=k;if(!e)return;let t=e.clientHeight,n=new ResizeObserver(()=>{let n=e.clientHeight,r=t===0&&n>0;t=n,r&&!xe.current&&oe()});return n.observe(e),()=>n.disconnect()},[k,oe]);let Se=(0,Q.useCallback)(e=>{if(!g||!_)return;let t=gi(e,g,_);t&&E?.(t)},[g,_,E]),Ce=(0,Q.useCallback)(e=>!!_i(O,e,g,_),[O,g,_]),we=(0,Q.useRef)(null);(0,Q.useEffect)(()=>()=>we.current?.(),[]);let Te=(0,Q.useCallback)(e=>{let t=k?.querySelector(`[data-msg-index="${e}"]`);if(!k||!t)return!1;oe(),we.current?.(),k.scrollTo({top:k.scrollTop+t.getBoundingClientRect().top-k.getBoundingClientRect().top-24,behavior:`smooth`}),t.classList.add(`bg-primary/10`,`ring-1`,`ring-primary/40`);let n=()=>t.classList.remove(`bg-primary/10`,`ring-1`,`ring-primary/40`),r=setTimeout(n,1400);return we.current=()=>{clearTimeout(r),n()},!0},[k,oe]),P=(0,Q.useCallback)(e=>{let t=_i(O,e,g,_);t&&Te(O.indexOf(t))},[O,g,_,Te]),I=wn(e=>g&&e.request?.sessionId===g?e.request:null);(0,Q.useEffect)(()=>{if(!I||!k)return;let e,t=()=>{let n=I.toolUseId&&`${I.toolUseId}-0`,r=I.messageId?O.findIndex(e=>e.id===I.messageId):-1;if(k.clientHeight>0){if(n&&Pi(k,n))return oe(),he(n),wn.getState().done(I);if(r>=0&&Te(r))return wn.getState().done(I)}if(Date.now()-I.at>Do)return wn.getState().done(I);e=setTimeout(t,150)};return t(),()=>clearTimeout(e)},[I,k,O,oe,he,Te]);let De=(0,Q.useCallback)((e,t)=>{p?.(e,t)},[p]),L=(0,Q.useCallback)((e,t,n)=>{m?.(e,t,n)},[m]),R=(0,Q.useCallback)(e=>{ne?.(e)},[ne]),Oe=(0,Q.useMemo)(()=>O.reduce((e,t)=>t.role===`system`?e+1:e,0),[O]),ke=(0,Q.useMemo)(()=>O.reduce((e,t,n)=>(t.role===`user`&&e.push(n),e),[]),[O]),Ae=(0,Q.useCallback)(()=>{if(!x||!S)return null;for(let e of O){if(S(e.id))continue;let t=Na(e.content||``);if(t)return{id:e.id,jsonlPath:t};if(e.events){for(let t of e.events)if(t.type===`text`){let n=Na(t.content||``);if(n)return{id:e.id,jsonlPath:n}}}}return null},[O,x,S])(),je=C&&!!ee,z=je||!!Ae,Me=Ae?.id??null,B=Ae?.jsonlPath??null,V=(0,Q.useCallback)(async()=>{if(A)return;let e=je?ee:Me&&B&&x?()=>x(Me,B):null;if(!e)return;let t=k;be.current=t?t.scrollHeight-t.scrollTop:null,M(!0),ye(null);try{await e()}catch(e){ye(e instanceof Error?e.message:`Could not load previous conversation`)}finally{M(!1)}},[je,ee,Me,B,x,A,k]),H=(0,Q.useRef)(null);return(0,Q.useEffect)(()=>{let e=k,t=H.current;if(!e||!t||!z||N)return;let n=new IntersectionObserver(e=>{e.some(e=>e.isIntersecting)&&V()},{root:e,rootMargin:`400px 0px 0px 0px`});return n.observe(t),()=>n.disconnect()},[k,z,N,V]),t&&(!n||e.length===0)?(0,$.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-3 text-text-secondary`,children:[(0,$.jsx)(Ee,{className:`size-10 text-text-subtle animate-pulse`}),(0,$.jsx)(`p`,{className:`text-sm`,children:`Loading messages...`})]}):e.length===0&&!a?(0,$.jsx)(xo,{projectName:f||``,onSelectSession:s||(()=>{})}):(0,$.jsxs)(`div`,{className:`relative flex-1 overflow-hidden flex flex-col min-h-0`,children:[(0,$.jsx)(Aa,{projectName:f,sessionId:g,messages:e}),Oe>1&&T&&(0,$.jsx)(`div`,{className:`absolute top-2 left-0 right-0 z-20 flex justify-center pointer-events-none`,children:(0,$.jsxs)(`button`,{type:`button`,onClick:T,className:`pointer-events-auto flex items-center gap-1.5 rounded-full bg-error/15 border border-error/25 px-3 py-1 text-xs text-error hover:bg-error/25 shadow-md backdrop-blur-sm`,children:[(0,$.jsx)(F,{className:`size-3.5`}),`Clear all errors (`,Oe,`)`]})}),!A&&N&&(0,$.jsx)(`div`,{className:`absolute top-2 left-0 right-0 z-10 flex justify-center`,children:(0,$.jsxs)(`button`,{type:`button`,onClick:()=>{ye(null),V()},className:`inline-flex items-center gap-1.5 rounded-md border border-border bg-surface px-3 py-2 text-xs text-text-primary hover:bg-surface-hover min-h-[44px] md:min-h-0`,children:[(0,$.jsx)(j,{className:`size-3.5 text-destructive`}),(0,$.jsxs)(`span`,{children:[`Could not load previous conversation: `,N]}),(0,$.jsx)(`span`,{className:`underline`,children:`Retry`})]})}),(0,$.jsx)(`div`,{ref:de,[cn]:``,className:`flex-1 overflow-y-auto overflow-x-hidden [overflow-anchor:none]`,style:{WebkitOverflowScrolling:`touch`,overscrollBehavior:`contain`},children:(0,$.jsxs)(`div`,{ref:ie,className:`w-full`,children:[z&&(0,$.jsx)(`div`,{ref:H,"aria-hidden":!0,className:`h-px`}),A&&(0,$.jsx)(Oo,{}),O.map((e,t)=>{let n=t>0?O[t-1]:void 0,r=se[t]??0,i=r?r+w:0,o=i?y?.[i]:void 0,s=e.role===`user`&&h!=null&&e.id===h,c=O[t+1],l=e.role===`assistant`&&c?.role!==`assistant`,u,d;if(l){let e=[];for(let n=t;n>=0&&O[n].role===`assistant`;n--){let t=Ao(O[n]);t&&(e.unshift(t),d??=O[n])}u=e.join(`
|
|
9
9
|
|
|
Binary file
|
|
Binary file
|