@hienlh/ppm 0.23.15 → 0.23.17
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 +14 -0
- package/CLAUDE.md +1 -0
- package/assets/skills/ppm/SKILL.md +1 -1
- package/assets/skills/ppm/references/cli-reference.md +4 -4
- package/assets/skills/ppm/references/http-api.md +1 -1
- package/dist/web/assets/{accounts-settings-section-B5YXy0vd.js → accounts-settings-section-BqsI4Ixj.js} +1 -1
- package/dist/web/assets/accounts-settings-section-BqsI4Ixj.js.br +0 -0
- package/dist/web/assets/accounts-settings-section-BqsI4Ixj.js.gz +0 -0
- package/dist/web/assets/{agent-session-sheet-Bj42PwCK.js → agent-session-sheet-BmoNB8BG.js} +2 -2
- package/dist/web/assets/agent-session-sheet-BmoNB8BG.js.br +0 -0
- package/dist/web/assets/agent-session-sheet-BmoNB8BG.js.gz +0 -0
- package/dist/web/assets/{agent-session-window-content-LqL6fVPU.js → agent-session-window-content-rlCrYBYv.js} +1 -1
- package/dist/web/assets/agent-session-window-content-rlCrYBYv.js.br +0 -0
- package/dist/web/assets/agent-session-window-content-rlCrYBYv.js.gz +0 -0
- package/dist/web/assets/{ai-resource-editor-jVv2nvAG.js → ai-resource-editor-CUOR9Xtf.js} +1 -1
- package/dist/web/assets/ai-resource-editor-CUOR9Xtf.js.br +0 -0
- package/dist/web/assets/ai-resource-editor-CUOR9Xtf.js.gz +0 -0
- package/dist/web/assets/{ai-settings-section-C9Q-v8fY.js → ai-settings-section-CNdbcCaI.js} +1 -1
- package/dist/web/assets/ai-settings-section-CNdbcCaI.js.br +0 -0
- package/dist/web/assets/ai-settings-section-CNdbcCaI.js.gz +0 -0
- package/dist/web/assets/{ai-settings-section-CN5BR1ZZ.js → ai-settings-section-aXXTb0dN.js} +1 -1
- package/dist/web/assets/{android-tab-CwqiuEZP.js → android-tab-BsuTMKJw.js} +1 -1
- package/dist/web/assets/android-tab-BsuTMKJw.js.br +0 -0
- package/dist/web/assets/android-tab-BsuTMKJw.js.gz +0 -0
- package/dist/web/assets/{appearance-settings-section-D0JIfiRx.js → appearance-settings-section-Dk6d_fTo.js} +1 -1
- package/dist/web/assets/appearance-settings-section-Dk6d_fTo.js.br +0 -0
- package/dist/web/assets/appearance-settings-section-Dk6d_fTo.js.gz +0 -0
- package/dist/web/assets/{apps-panel-Cz_KJ37M.js → apps-panel-C20ys4Cy.js} +1 -1
- package/dist/web/assets/apps-panel-C20ys4Cy.js.br +0 -0
- package/dist/web/assets/apps-panel-C20ys4Cy.js.gz +0 -0
- package/dist/web/assets/{branch-review-tab-C3QNpsm7.js → branch-review-tab-CcvkQMRA.js} +1 -1
- package/dist/web/assets/branch-review-tab-CcvkQMRA.js.br +0 -0
- package/dist/web/assets/branch-review-tab-CcvkQMRA.js.gz +0 -0
- package/dist/web/assets/{chat-tab-D14CUl0J.js → chat-tab-BAh37UwG.js} +1 -1
- package/dist/web/assets/chat-tab-BAh37UwG.js.br +0 -0
- package/dist/web/assets/chat-tab-BAh37UwG.js.gz +0 -0
- package/dist/web/assets/chat-tab-D-cl4yMo.js +19 -0
- package/dist/web/assets/chat-tab-D-cl4yMo.js.br +0 -0
- package/dist/web/assets/chat-tab-D-cl4yMo.js.gz +0 -0
- package/dist/web/assets/{code-editor-B7gbH4-x.js → code-editor-DIGsPNPS.js} +4 -4
- package/dist/web/assets/code-editor-DIGsPNPS.js.br +0 -0
- package/dist/web/assets/{code-editor-B7gbH4-x.js.gz → code-editor-DIGsPNPS.js.gz} +0 -0
- package/dist/web/assets/{codex-reset-credit-button-DQDtyvnd.js → codex-reset-credit-button-C0a2svAw.js} +1 -1
- package/dist/web/assets/codex-reset-credit-button-C0a2svAw.js.br +0 -0
- package/dist/web/assets/codex-reset-credit-button-C0a2svAw.js.gz +0 -0
- package/dist/web/assets/{conflict-editor-ktOkrODA.js → conflict-editor-zORSNMk6.js} +1 -1
- package/dist/web/assets/conflict-editor-zORSNMk6.js.br +0 -0
- package/dist/web/assets/conflict-editor-zORSNMk6.js.gz +0 -0
- package/dist/web/assets/{connection-form-tab-CxvExR7T.js → connection-form-tab-BkE7wACA.js} +1 -1
- package/dist/web/assets/connection-form-tab-BkE7wACA.js.br +0 -0
- package/dist/web/assets/connection-form-tab-BkE7wACA.js.gz +0 -0
- package/dist/web/assets/{csv-preview-CBDMTEsF.js → csv-preview-CDUY0I94.js} +1 -1
- package/dist/web/assets/csv-preview-CDUY0I94.js.br +0 -0
- package/dist/web/assets/csv-preview-CDUY0I94.js.gz +0 -0
- package/dist/web/assets/{db-tab-parts-BgVpKbi6.js → db-tab-parts-tgVIgcs5.js} +1 -1
- package/dist/web/assets/db-tab-parts-tgVIgcs5.js.br +0 -0
- package/dist/web/assets/db-tab-parts-tgVIgcs5.js.gz +0 -0
- package/dist/web/assets/{design-settings-section-DPGw61pY.js → design-settings-section-CqFPwhis.js} +1 -1
- package/dist/web/assets/design-settings-section-CqFPwhis.js.br +0 -0
- package/dist/web/assets/design-settings-section-CqFPwhis.js.gz +0 -0
- package/dist/web/assets/{design-tab-BiCqHNl3.js → design-tab-CVTzge3p.js} +1 -1
- package/dist/web/assets/design-tab-CVTzge3p.js.br +0 -0
- package/dist/web/assets/design-tab-CVTzge3p.js.gz +0 -0
- package/dist/web/assets/{designs-sidebar-panel-pcJ2Rx5G.js → designs-sidebar-panel-DKTSE1LS.js} +1 -1
- package/dist/web/assets/designs-sidebar-panel-DKTSE1LS.js.br +0 -0
- package/dist/web/assets/designs-sidebar-panel-DKTSE1LS.js.gz +0 -0
- package/dist/web/assets/{diff-viewer-CLAvyqVG.js → diff-viewer-3VDHcDag.js} +1 -1
- package/dist/web/assets/diff-viewer-3VDHcDag.js.br +0 -0
- package/dist/web/assets/diff-viewer-3VDHcDag.js.gz +0 -0
- package/dist/web/assets/{docx-preview-XSkD2IL6.js → docx-preview-FgE_WU6t.js} +1 -1
- package/dist/web/assets/docx-preview-FgE_WU6t.js.br +0 -0
- package/dist/web/assets/docx-preview-FgE_WU6t.js.gz +0 -0
- package/dist/web/assets/{editor-dialog-cQvqVZAR.js → editor-dialog-BhK77FSu.js} +1 -1
- package/dist/web/assets/editor-dialog-BhK77FSu.js.br +0 -0
- package/dist/web/assets/editor-dialog-BhK77FSu.js.gz +0 -0
- package/dist/web/assets/{editor-language-service-6-7mS6_9.js → editor-language-service-BIN7M57r.js} +1 -1
- package/dist/web/assets/editor-language-service-BIN7M57r.js.br +4 -0
- package/dist/web/assets/editor-language-service-BIN7M57r.js.gz +0 -0
- package/dist/web/assets/{explorer-body-BlGDPmNa.js → explorer-body-DNsWiVO3.js} +1 -1
- package/dist/web/assets/explorer-body-DNsWiVO3.js.br +0 -0
- package/dist/web/assets/explorer-body-DNsWiVO3.js.gz +0 -0
- package/dist/web/assets/{explorer-window-content-BLWY8GJ_.js → explorer-window-content-DnOJYhRX.js} +1 -1
- package/dist/web/assets/explorer-window-content-DnOJYhRX.js.br +0 -0
- package/dist/web/assets/explorer-window-content-DnOJYhRX.js.gz +0 -0
- package/dist/web/assets/{extension-manager-section-NSEt5f4z.js → extension-manager-section-CJtRpUUs.js} +1 -1
- package/dist/web/assets/extension-manager-section-CJtRpUUs.js.br +0 -0
- package/dist/web/assets/extension-manager-section-CJtRpUUs.js.gz +0 -0
- package/dist/web/assets/{extension-webview-BkAEBWin.js → extension-webview-Bza7cPL1.js} +1 -1
- package/dist/web/assets/extension-webview-Bza7cPL1.js.br +0 -0
- package/dist/web/assets/extension-webview-Bza7cPL1.js.gz +0 -0
- package/dist/web/assets/{files-settings-section-Bq7liJ_r.js → files-settings-section-8rWMj1Oi.js} +1 -1
- package/dist/web/assets/files-settings-section-8rWMj1Oi.js.br +0 -0
- package/dist/web/assets/files-settings-section-8rWMj1Oi.js.gz +0 -0
- package/dist/web/assets/{general-settings-section-DvHROAMa.js → general-settings-section-joWQEgIn.js} +1 -1
- package/dist/web/assets/general-settings-section-joWQEgIn.js.br +0 -0
- package/dist/web/assets/general-settings-section-joWQEgIn.js.gz +0 -0
- package/dist/web/assets/{git-log-panel-Cu9kK48H.js → git-log-panel-BxYYWEiU.js} +1 -1
- package/dist/web/assets/git-log-panel-BxYYWEiU.js.br +0 -0
- package/dist/web/assets/git-log-panel-BxYYWEiU.js.gz +0 -0
- package/dist/web/assets/{git-review-tab-B_JT649W.js → git-review-tab-Btnvgk1e.js} +1 -1
- package/dist/web/assets/git-review-tab-Btnvgk1e.js.br +0 -0
- package/dist/web/assets/git-review-tab-Btnvgk1e.js.gz +0 -0
- package/dist/web/assets/{glide-data-grid-BlposOph.js → glide-data-grid-lCwaM1Gy.js} +1 -1
- package/dist/web/assets/glide-data-grid-lCwaM1Gy.js.br +0 -0
- package/dist/web/assets/glide-data-grid-lCwaM1Gy.js.gz +0 -0
- package/dist/web/assets/{grid-save-dialog-B0d0qhnN.js → grid-save-dialog-DoEEQ1vM.js} +1 -1
- package/dist/web/assets/grid-save-dialog-DoEEQ1vM.js.br +0 -0
- package/dist/web/assets/grid-save-dialog-DoEEQ1vM.js.gz +0 -0
- package/dist/web/assets/{group-chat-tab-jirUsGm-.js → group-chat-tab-B7Dwx9uL.js} +1 -1
- package/dist/web/assets/group-chat-tab-B7Dwx9uL.js.br +0 -0
- package/dist/web/assets/group-chat-tab-B7Dwx9uL.js.gz +0 -0
- package/dist/web/assets/{impexp-tab-HJVcOTYJ.js → impexp-tab-BtEDbQSn.js} +1 -1
- package/dist/web/assets/impexp-tab-BtEDbQSn.js.br +0 -0
- package/dist/web/assets/impexp-tab-BtEDbQSn.js.gz +0 -0
- package/dist/web/assets/index-BACBJm4i.css +1 -0
- package/dist/web/assets/index-BACBJm4i.css.br +0 -0
- package/dist/web/assets/index-BACBJm4i.css.gz +0 -0
- package/dist/web/assets/{index-DLB3j_P0.js → index-CPBujJc_.js} +5 -5
- package/dist/web/assets/index-CPBujJc_.js.br +0 -0
- package/dist/web/assets/index-CPBujJc_.js.gz +0 -0
- package/dist/web/assets/{jira-watcher-section-EQvdnETB.js → jira-watcher-section-mnly-maX.js} +1 -1
- package/dist/web/assets/{keybindings-store-CEy-Sdcc.js → keybindings-store-BSPTMRiv.js} +1 -1
- package/dist/web/assets/{keyboard-shortcuts-section-DN21gB-T.js → keyboard-shortcuts-section-DULhEWPg.js} +1 -1
- package/dist/web/assets/keyboard-shortcuts-section-DULhEWPg.js.br +0 -0
- package/dist/web/assets/keyboard-shortcuts-section-DULhEWPg.js.gz +0 -0
- package/dist/web/assets/{language-servers-section-DOcZ72FJ.js → language-servers-section-CwBJsJ31.js} +2 -2
- package/dist/web/assets/language-servers-section-CwBJsJ31.js.br +0 -0
- package/dist/web/assets/language-servers-section-CwBJsJ31.js.gz +0 -0
- package/dist/web/assets/{logs-app-C7n9GSCn.js → logs-app-DatfI2Up.js} +1 -1
- package/dist/web/assets/logs-app-DatfI2Up.js.br +0 -0
- package/dist/web/assets/logs-app-DatfI2Up.js.gz +0 -0
- package/dist/web/assets/{logs-tab-CSOiexvx.js → logs-tab-an_9ujcz.js} +1 -1
- package/dist/web/assets/{logs-window-content-C4Qs6-0q.js → logs-window-content-Usr3JTmE.js} +1 -1
- package/dist/web/assets/{lsp-client-DpYmPhXX.js → lsp-client-tCCcXWsR.js} +1 -1
- package/dist/web/assets/lsp-client-tCCcXWsR.js.br +0 -0
- package/dist/web/assets/lsp-client-tCCcXWsR.js.gz +0 -0
- package/dist/web/assets/{markdown-renderer-CtEl6qAt.js → markdown-renderer-D0YUMQLE.js} +1 -1
- package/dist/web/assets/markdown-renderer-D0YUMQLE.js.br +0 -0
- package/dist/web/assets/markdown-renderer-D0YUMQLE.js.gz +0 -0
- package/dist/web/assets/{markdown-renderer-Df3r-CCb.js → markdown-renderer-DdzxNveP.js} +1 -1
- package/dist/web/assets/{mobile-explorer-sheet-B-rcKEL9.js → mobile-explorer-sheet-Bo27IRye.js} +1 -1
- package/dist/web/assets/mobile-explorer-sheet-Bo27IRye.js.br +0 -0
- package/dist/web/assets/mobile-explorer-sheet-Bo27IRye.js.gz +0 -0
- package/dist/web/assets/{new-design-dialog-DgztQK5R.js → new-design-dialog-DIOCWZW1.js} +1 -1
- package/dist/web/assets/new-design-dialog-DIOCWZW1.js.br +0 -0
- package/dist/web/assets/new-design-dialog-DIOCWZW1.js.gz +0 -0
- package/dist/web/assets/{notification-store-B92dvP_u.js → notification-store-CRPOp-6B.js} +1 -1
- package/dist/web/assets/{notifications-settings-section-JiGvaCFx.js → notifications-settings-section-DSSCTkfX.js} +1 -1
- package/dist/web/assets/notifications-settings-section-DSSCTkfX.js.br +0 -0
- package/dist/web/assets/notifications-settings-section-DSSCTkfX.js.gz +0 -0
- package/dist/web/assets/{ppmbot-settings-section-XfrZ8VoC.js → ppmbot-settings-section-BIYSlZu5.js} +1 -1
- package/dist/web/assets/ppmbot-settings-section-BIYSlZu5.js.br +0 -0
- package/dist/web/assets/ppmbot-settings-section-BIYSlZu5.js.gz +0 -0
- package/dist/web/assets/{problems-panel-CDzwSJn6.js → problems-panel-CH-00nA7.js} +1 -1
- package/dist/web/assets/problems-panel-CH-00nA7.js.br +0 -0
- package/dist/web/assets/problems-panel-CH-00nA7.js.gz +0 -0
- package/dist/web/assets/{process-table-C_B39GHm.js → process-table-DQO0g5do.js} +1 -1
- package/dist/web/assets/process-table-DQO0g5do.js.br +0 -0
- package/dist/web/assets/process-table-DQO0g5do.js.gz +0 -0
- package/dist/web/assets/{proxy-settings-section-CvaOvYIv.js → proxy-settings-section-Buo3hvQ4.js} +1 -1
- package/dist/web/assets/proxy-settings-section-Buo3hvQ4.js.br +0 -0
- package/dist/web/assets/proxy-settings-section-Buo3hvQ4.js.gz +0 -0
- package/dist/web/assets/{query-tab-B8aMpAbI.js → query-tab-CU0QVZpj.js} +1 -1
- package/dist/web/assets/query-tab-CU0QVZpj.js.br +0 -0
- package/dist/web/assets/query-tab-CU0QVZpj.js.gz +0 -0
- package/dist/web/assets/{remote-access-settings-section-Bv0eawR4.js → remote-access-settings-section-vlHMJPdY.js} +1 -1
- package/dist/web/assets/remote-access-settings-section-vlHMJPdY.js.br +0 -0
- package/dist/web/assets/remote-access-settings-section-vlHMJPdY.js.gz +0 -0
- package/dist/web/assets/{remote-desktop-clipboard-notice-BpDakRY0.js → remote-desktop-clipboard-notice-DNqX7d1L.js} +1 -1
- package/dist/web/assets/remote-desktop-clipboard-notice-DNqX7d1L.js.br +0 -0
- package/dist/web/assets/remote-desktop-clipboard-notice-DNqX7d1L.js.gz +0 -0
- package/dist/web/assets/{remote-desktop-mobile-sheet-C5GQ3kzY.js → remote-desktop-mobile-sheet-Dz7tctpc.js} +2 -2
- package/dist/web/assets/remote-desktop-mobile-sheet-Dz7tctpc.js.br +0 -0
- package/dist/web/assets/remote-desktop-mobile-sheet-Dz7tctpc.js.gz +0 -0
- package/dist/web/assets/{remote-desktop-mobile-view-CZb5EMEK.js → remote-desktop-mobile-view-BqhQdShH.js} +1 -1
- package/dist/web/assets/remote-desktop-mobile-view-BqhQdShH.js.br +0 -0
- package/dist/web/assets/remote-desktop-mobile-view-BqhQdShH.js.gz +0 -0
- package/dist/web/assets/{remote-desktop-readiness-gate-CipNtLX5.js → remote-desktop-readiness-gate-rnTq4ZQS.js} +1 -1
- package/dist/web/assets/remote-desktop-readiness-gate-rnTq4ZQS.js.br +0 -0
- package/dist/web/assets/remote-desktop-readiness-gate-rnTq4ZQS.js.gz +0 -0
- package/dist/web/assets/{remote-desktop-window-content-B7OXXvAM.js → remote-desktop-window-content-TqjHt0_5.js} +1 -1
- package/dist/web/assets/remote-desktop-window-content-TqjHt0_5.js.br +0 -0
- package/dist/web/assets/remote-desktop-window-content-TqjHt0_5.js.gz +0 -0
- package/dist/web/assets/{rename-object-dialog-B4W6S7Xg.js → rename-object-dialog-D0YpY40E.js} +1 -1
- package/dist/web/assets/rename-object-dialog-D0YpY40E.js.br +0 -0
- package/dist/web/assets/rename-object-dialog-D0YpY40E.js.gz +0 -0
- package/dist/web/assets/{review-code-B4osj0k1.js → review-code-DsF9921h.js} +1 -1
- package/dist/web/assets/review-code-DsF9921h.js.br +0 -0
- package/dist/web/assets/{review-code-B4osj0k1.js.gz → review-code-DsF9921h.js.gz} +0 -0
- package/dist/web/assets/{save-as-dialog-DpXv_f1d.js → save-as-dialog-niU7kVMJ.js} +1 -1
- package/dist/web/assets/save-as-dialog-niU7kVMJ.js.br +0 -0
- package/dist/web/assets/save-as-dialog-niU7kVMJ.js.gz +0 -0
- package/dist/web/assets/{schedules-settings-section-BbaPbc28.js → schedules-settings-section-Heuv2Kj4.js} +1 -1
- package/dist/web/assets/schedules-settings-section-Heuv2Kj4.js.br +0 -0
- package/dist/web/assets/schedules-settings-section-Heuv2Kj4.js.gz +0 -0
- package/dist/web/assets/{session-review-tab-Aq3FEooH.js → session-review-tab-Dob0FLvA.js} +1 -1
- package/dist/web/assets/session-review-tab-Dob0FLvA.js.br +0 -0
- package/dist/web/assets/session-review-tab-Dob0FLvA.js.gz +0 -0
- package/dist/web/assets/{settings-body-vXbOWchN.js → settings-body-5t6SQbLx.js} +1 -1
- package/dist/web/assets/settings-body-5t6SQbLx.js.br +0 -0
- package/dist/web/assets/settings-body-5t6SQbLx.js.gz +0 -0
- package/dist/web/assets/{settings-rows-DD7Gxmst.js → settings-rows-B0w15zot.js} +1 -1
- package/dist/web/assets/settings-rows-B0w15zot.js.br +0 -0
- package/dist/web/assets/settings-rows-B0w15zot.js.gz +0 -0
- package/dist/web/assets/{settings-section-content-DkUJFop6.js → settings-section-content-D41IJ62x.js} +2 -2
- package/dist/web/assets/settings-section-content-D41IJ62x.js.br +0 -0
- package/dist/web/assets/settings-section-content-D41IJ62x.js.gz +0 -0
- package/dist/web/assets/settings-section-content-DuVO6erO.js +1 -0
- package/dist/web/assets/{settings-tab-Cdv9_OIe.js → settings-tab-DGU5FVbO.js} +1 -1
- package/dist/web/assets/{settings-window-content-DLa6Ph4u.js → settings-window-content-Da5PY5MZ.js} +1 -1
- package/dist/web/assets/{slash-command-picker-lILYDfK3.js → slash-command-picker-DpZsPuNf.js} +1 -1
- package/dist/web/assets/slash-command-picker-DpZsPuNf.js.br +0 -0
- package/dist/web/assets/slash-command-picker-DpZsPuNf.js.gz +0 -0
- package/dist/web/assets/{sql-object-tab-Da42SMK5.js → sql-object-tab-BTS8aHGO.js} +1 -1
- package/dist/web/assets/sql-object-tab-BTS8aHGO.js.br +0 -0
- package/dist/web/assets/sql-object-tab-BTS8aHGO.js.gz +0 -0
- package/dist/web/assets/{sqlite-viewer-V3SKNukY.js → sqlite-viewer-CVo5eqWj.js} +1 -1
- package/dist/web/assets/sqlite-viewer-CVo5eqWj.js.br +0 -0
- package/dist/web/assets/sqlite-viewer-CVo5eqWj.js.gz +0 -0
- package/dist/web/assets/{structure-save-dialog-B635iyPI.js → structure-save-dialog-B9Q-Rhgj.js} +1 -1
- package/dist/web/assets/structure-save-dialog-B9Q-Rhgj.js.br +0 -0
- package/dist/web/assets/structure-save-dialog-B9Q-Rhgj.js.gz +0 -0
- package/dist/web/assets/{structure-tab-Co9d8ktU.js → structure-tab-_cQn0KG7.js} +1 -1
- package/dist/web/assets/structure-tab-_cQn0KG7.js.br +0 -0
- package/dist/web/assets/structure-tab-_cQn0KG7.js.gz +0 -0
- package/dist/web/assets/{system-monitor-body-DC0j8RqP.js → system-monitor-body-YS3i1PUs.js} +2 -2
- package/dist/web/assets/system-monitor-body-YS3i1PUs.js.br +0 -0
- package/dist/web/assets/system-monitor-body-YS3i1PUs.js.gz +0 -0
- package/dist/web/assets/{system-monitor-tab-DA8BcdXo.js → system-monitor-tab-D63xmd8U.js} +1 -1
- package/dist/web/assets/{system-monitor-window-content-BiuLo8XW.js → system-monitor-window-content-DkCsK8Ed.js} +1 -1
- package/dist/web/assets/{tab-host-window-content-Crvt1r5F.js → tab-host-window-content-CrASOMX8.js} +1 -1
- package/dist/web/assets/tab-host-window-content-CrASOMX8.js.br +0 -0
- package/dist/web/assets/tab-host-window-content-CrASOMX8.js.gz +0 -0
- package/dist/web/assets/{table-tab-C2cYw7a0.js → table-tab-JlfqyPZR.js} +1 -1
- package/dist/web/assets/table-tab-JlfqyPZR.js.br +0 -0
- package/dist/web/assets/table-tab-JlfqyPZR.js.gz +0 -0
- package/dist/web/assets/{telegram-bot-token-field-BqNtOo5n.js → telegram-bot-token-field-ctRa2529.js} +1 -1
- package/dist/web/assets/telegram-bot-token-field-ctRa2529.js.br +0 -0
- package/dist/web/assets/telegram-bot-token-field-ctRa2529.js.gz +0 -0
- package/dist/web/assets/{terminal-tab-CrKxibGC.js → terminal-tab-BsXBBru0.js} +1 -1
- package/dist/web/assets/terminal-tab-BsXBBru0.js.br +0 -0
- package/dist/web/assets/terminal-tab-BsXBBru0.js.gz +0 -0
- package/dist/web/assets/{tool-cards-BRto67jM.js → tool-cards-BDzK03U4.js} +3 -3
- package/dist/web/assets/tool-cards-BDzK03U4.js.br +0 -0
- package/dist/web/assets/tool-cards-BDzK03U4.js.gz +0 -0
- package/dist/web/assets/{tools-settings-section-DEvZsrxq.js → tools-settings-section-DCG74pbd.js} +1 -1
- package/dist/web/assets/tools-settings-section-DCG74pbd.js.br +0 -0
- package/dist/web/assets/tools-settings-section-DCG74pbd.js.gz +0 -0
- package/dist/web/assets/{use-inline-blame-CRWJU6Rq.js → use-inline-blame-BOn_m8f-.js} +1 -1
- package/dist/web/assets/use-inline-blame-BOn_m8f-.js.br +0 -0
- package/dist/web/assets/use-inline-blame-BOn_m8f-.js.gz +0 -0
- package/dist/web/assets/{use-lsp-B-otjr-6.js → use-lsp-D144ftsf.js} +1 -1
- package/dist/web/assets/use-lsp-D144ftsf.js.br +0 -0
- package/dist/web/assets/use-lsp-D144ftsf.js.gz +0 -0
- package/dist/web/assets/{use-monaco-theme-BiDXRJ4e.js → use-monaco-theme-ArU1f9T6.js} +1 -1
- package/dist/web/assets/{use-process-kill-BW2UW0mZ.js → use-process-kill-BdmXHMFE.js} +1 -1
- package/dist/web/assets/use-process-kill-BdmXHMFE.js.br +0 -0
- package/dist/web/assets/use-process-kill-BdmXHMFE.js.gz +0 -0
- package/dist/web/assets/{use-sql-schema-info-D_Kc2FI7.js → use-sql-schema-info-BQXSMw6p.js} +1 -1
- package/dist/web/assets/use-sql-schema-info-BQXSMw6p.js.br +0 -0
- package/dist/web/assets/use-sql-schema-info-BQXSMw6p.js.gz +0 -0
- package/dist/web/assets/{use-websocket-n3Ud9vEA.js → use-websocket-rWdrMWa8.js} +1 -1
- package/dist/web/assets/{web-preview-tab-doNpegW3.js → web-preview-tab-B2OSrnl9.js} +1 -1
- package/dist/web/assets/web-preview-tab-B2OSrnl9.js.br +0 -0
- package/dist/web/assets/web-preview-tab-B2OSrnl9.js.gz +0 -0
- package/dist/web/index.html +2 -2
- package/dist/web/index.html.br +0 -0
- package/dist/web/index.html.gz +0 -0
- package/dist/web/sw.js +1 -1
- package/dist/web/sw.js.br +0 -0
- package/dist/web/sw.js.gz +0 -0
- package/docs/architecture/ai-chat-and-providers.md +22 -0
- package/package.json +1 -1
- package/src/providers/claude-agent-sdk.ts +37 -7
- package/src/providers/codex-app-server/codex-event-mapper.ts +3 -0
- package/src/providers/codex-app-server/codex-provider.ts +3 -21
- package/src/providers/codex-app-server/codex-rollout-items.ts +3 -0
- package/src/providers/codex-app-server/codex-thread-params.ts +1 -0
- package/src/providers/codex-app-server/codex-user-input.ts +41 -0
- package/src/server/ws/chat-token-rotation.ts +150 -0
- package/src/server/ws/chat.ts +28 -0
- package/src/services/account.service.ts +14 -0
- package/src/shared/chat-questions.ts +19 -0
- package/src/web/components/chat/async-question-card.tsx +24 -0
- package/src/web/components/chat/chat-reconnect-banner.tsx +54 -0
- package/src/web/components/chat/chat-tab.tsx +13 -15
- package/src/web/components/chat/message-events.tsx +6 -0
- package/src/web/components/chat/question-card.tsx +8 -10
- package/src/web/components/chat/tool-cards.tsx +4 -4
- package/src/web/hooks/use-reconnect-indicator.ts +49 -0
- package/dist/web/assets/accounts-settings-section-B5YXy0vd.js.br +0 -0
- package/dist/web/assets/accounts-settings-section-B5YXy0vd.js.gz +0 -0
- package/dist/web/assets/agent-session-sheet-Bj42PwCK.js.br +0 -0
- package/dist/web/assets/agent-session-sheet-Bj42PwCK.js.gz +0 -0
- package/dist/web/assets/agent-session-window-content-LqL6fVPU.js.br +0 -0
- package/dist/web/assets/agent-session-window-content-LqL6fVPU.js.gz +0 -0
- package/dist/web/assets/ai-resource-editor-jVv2nvAG.js.br +0 -0
- package/dist/web/assets/ai-resource-editor-jVv2nvAG.js.gz +0 -0
- package/dist/web/assets/ai-settings-section-C9Q-v8fY.js.br +0 -0
- package/dist/web/assets/ai-settings-section-C9Q-v8fY.js.gz +0 -0
- package/dist/web/assets/android-tab-CwqiuEZP.js.br +0 -0
- package/dist/web/assets/android-tab-CwqiuEZP.js.gz +0 -0
- package/dist/web/assets/appearance-settings-section-D0JIfiRx.js.br +0 -0
- package/dist/web/assets/appearance-settings-section-D0JIfiRx.js.gz +0 -0
- package/dist/web/assets/apps-panel-Cz_KJ37M.js.br +0 -0
- package/dist/web/assets/apps-panel-Cz_KJ37M.js.gz +0 -0
- package/dist/web/assets/branch-review-tab-C3QNpsm7.js.br +0 -0
- package/dist/web/assets/branch-review-tab-C3QNpsm7.js.gz +0 -0
- package/dist/web/assets/chat-tab-D14CUl0J.js.br +0 -0
- package/dist/web/assets/chat-tab-D14CUl0J.js.gz +0 -0
- package/dist/web/assets/chat-tab-D8iAVZKV.js +0 -16
- package/dist/web/assets/chat-tab-D8iAVZKV.js.br +0 -0
- package/dist/web/assets/chat-tab-D8iAVZKV.js.gz +0 -0
- package/dist/web/assets/code-editor-B7gbH4-x.js.br +0 -0
- package/dist/web/assets/codex-reset-credit-button-DQDtyvnd.js.br +0 -0
- package/dist/web/assets/codex-reset-credit-button-DQDtyvnd.js.gz +0 -0
- package/dist/web/assets/conflict-editor-ktOkrODA.js.br +0 -0
- package/dist/web/assets/conflict-editor-ktOkrODA.js.gz +0 -0
- package/dist/web/assets/connection-form-tab-CxvExR7T.js.br +0 -0
- package/dist/web/assets/connection-form-tab-CxvExR7T.js.gz +0 -0
- package/dist/web/assets/csv-preview-CBDMTEsF.js.br +0 -0
- package/dist/web/assets/csv-preview-CBDMTEsF.js.gz +0 -0
- package/dist/web/assets/db-tab-parts-BgVpKbi6.js.br +0 -0
- package/dist/web/assets/db-tab-parts-BgVpKbi6.js.gz +0 -0
- package/dist/web/assets/design-settings-section-DPGw61pY.js.br +0 -0
- package/dist/web/assets/design-settings-section-DPGw61pY.js.gz +0 -0
- package/dist/web/assets/design-tab-BiCqHNl3.js.br +0 -0
- package/dist/web/assets/design-tab-BiCqHNl3.js.gz +0 -0
- package/dist/web/assets/designs-sidebar-panel-pcJ2Rx5G.js.br +0 -0
- package/dist/web/assets/designs-sidebar-panel-pcJ2Rx5G.js.gz +0 -0
- package/dist/web/assets/diff-viewer-CLAvyqVG.js.br +0 -0
- package/dist/web/assets/diff-viewer-CLAvyqVG.js.gz +0 -0
- package/dist/web/assets/docx-preview-XSkD2IL6.js.br +0 -0
- package/dist/web/assets/docx-preview-XSkD2IL6.js.gz +0 -0
- package/dist/web/assets/editor-dialog-cQvqVZAR.js.br +0 -0
- package/dist/web/assets/editor-dialog-cQvqVZAR.js.gz +0 -0
- package/dist/web/assets/editor-language-service-6-7mS6_9.js.br +0 -0
- package/dist/web/assets/editor-language-service-6-7mS6_9.js.gz +0 -0
- package/dist/web/assets/explorer-body-BlGDPmNa.js.br +0 -0
- package/dist/web/assets/explorer-body-BlGDPmNa.js.gz +0 -0
- package/dist/web/assets/explorer-window-content-BLWY8GJ_.js.br +0 -0
- package/dist/web/assets/explorer-window-content-BLWY8GJ_.js.gz +0 -0
- package/dist/web/assets/extension-manager-section-NSEt5f4z.js.br +0 -0
- package/dist/web/assets/extension-manager-section-NSEt5f4z.js.gz +0 -0
- package/dist/web/assets/extension-webview-BkAEBWin.js.br +0 -0
- package/dist/web/assets/extension-webview-BkAEBWin.js.gz +0 -0
- package/dist/web/assets/files-settings-section-Bq7liJ_r.js.br +0 -0
- package/dist/web/assets/files-settings-section-Bq7liJ_r.js.gz +0 -0
- package/dist/web/assets/general-settings-section-DvHROAMa.js.br +0 -0
- package/dist/web/assets/general-settings-section-DvHROAMa.js.gz +0 -0
- package/dist/web/assets/git-log-panel-Cu9kK48H.js.br +0 -0
- package/dist/web/assets/git-log-panel-Cu9kK48H.js.gz +0 -0
- package/dist/web/assets/git-review-tab-B_JT649W.js.br +0 -0
- package/dist/web/assets/git-review-tab-B_JT649W.js.gz +0 -0
- package/dist/web/assets/glide-data-grid-BlposOph.js.br +0 -0
- package/dist/web/assets/glide-data-grid-BlposOph.js.gz +0 -0
- package/dist/web/assets/grid-save-dialog-B0d0qhnN.js.br +0 -0
- package/dist/web/assets/grid-save-dialog-B0d0qhnN.js.gz +0 -0
- package/dist/web/assets/group-chat-tab-jirUsGm-.js.br +0 -0
- package/dist/web/assets/group-chat-tab-jirUsGm-.js.gz +0 -0
- package/dist/web/assets/impexp-tab-HJVcOTYJ.js.br +0 -0
- package/dist/web/assets/impexp-tab-HJVcOTYJ.js.gz +0 -0
- package/dist/web/assets/index-DLB3j_P0.js.br +0 -0
- package/dist/web/assets/index-DLB3j_P0.js.gz +0 -0
- package/dist/web/assets/index-M3DUzop8.css +0 -1
- package/dist/web/assets/index-M3DUzop8.css.br +0 -0
- package/dist/web/assets/index-M3DUzop8.css.gz +0 -0
- package/dist/web/assets/keyboard-shortcuts-section-DN21gB-T.js.br +0 -0
- package/dist/web/assets/keyboard-shortcuts-section-DN21gB-T.js.gz +0 -0
- package/dist/web/assets/language-servers-section-DOcZ72FJ.js.br +0 -0
- package/dist/web/assets/language-servers-section-DOcZ72FJ.js.gz +0 -0
- package/dist/web/assets/logs-app-C7n9GSCn.js.br +0 -0
- package/dist/web/assets/logs-app-C7n9GSCn.js.gz +0 -0
- package/dist/web/assets/lsp-client-DpYmPhXX.js.br +0 -0
- package/dist/web/assets/lsp-client-DpYmPhXX.js.gz +0 -0
- package/dist/web/assets/markdown-renderer-CtEl6qAt.js.br +0 -0
- package/dist/web/assets/markdown-renderer-CtEl6qAt.js.gz +0 -0
- package/dist/web/assets/mobile-explorer-sheet-B-rcKEL9.js.br +0 -0
- package/dist/web/assets/mobile-explorer-sheet-B-rcKEL9.js.gz +0 -0
- package/dist/web/assets/new-design-dialog-DgztQK5R.js.br +0 -0
- package/dist/web/assets/new-design-dialog-DgztQK5R.js.gz +0 -0
- package/dist/web/assets/notifications-settings-section-JiGvaCFx.js.br +0 -0
- package/dist/web/assets/notifications-settings-section-JiGvaCFx.js.gz +0 -0
- package/dist/web/assets/ppmbot-settings-section-XfrZ8VoC.js.br +0 -0
- package/dist/web/assets/ppmbot-settings-section-XfrZ8VoC.js.gz +0 -0
- package/dist/web/assets/problems-panel-CDzwSJn6.js.br +0 -0
- package/dist/web/assets/problems-panel-CDzwSJn6.js.gz +0 -0
- package/dist/web/assets/process-table-C_B39GHm.js.br +0 -0
- package/dist/web/assets/process-table-C_B39GHm.js.gz +0 -0
- package/dist/web/assets/proxy-settings-section-CvaOvYIv.js.br +0 -0
- package/dist/web/assets/proxy-settings-section-CvaOvYIv.js.gz +0 -0
- package/dist/web/assets/query-tab-B8aMpAbI.js.br +0 -0
- package/dist/web/assets/query-tab-B8aMpAbI.js.gz +0 -0
- package/dist/web/assets/remote-access-settings-section-Bv0eawR4.js.br +0 -0
- package/dist/web/assets/remote-access-settings-section-Bv0eawR4.js.gz +0 -0
- package/dist/web/assets/remote-desktop-clipboard-notice-BpDakRY0.js.br +0 -0
- package/dist/web/assets/remote-desktop-clipboard-notice-BpDakRY0.js.gz +0 -0
- package/dist/web/assets/remote-desktop-mobile-sheet-C5GQ3kzY.js.br +0 -0
- package/dist/web/assets/remote-desktop-mobile-sheet-C5GQ3kzY.js.gz +0 -0
- package/dist/web/assets/remote-desktop-mobile-view-CZb5EMEK.js.br +0 -0
- package/dist/web/assets/remote-desktop-mobile-view-CZb5EMEK.js.gz +0 -0
- package/dist/web/assets/remote-desktop-readiness-gate-CipNtLX5.js.br +0 -0
- package/dist/web/assets/remote-desktop-readiness-gate-CipNtLX5.js.gz +0 -0
- package/dist/web/assets/remote-desktop-window-content-B7OXXvAM.js.br +0 -0
- package/dist/web/assets/remote-desktop-window-content-B7OXXvAM.js.gz +0 -0
- package/dist/web/assets/rename-object-dialog-B4W6S7Xg.js.br +0 -0
- package/dist/web/assets/rename-object-dialog-B4W6S7Xg.js.gz +0 -0
- package/dist/web/assets/review-code-B4osj0k1.js.br +0 -0
- package/dist/web/assets/save-as-dialog-DpXv_f1d.js.br +0 -5
- package/dist/web/assets/save-as-dialog-DpXv_f1d.js.gz +0 -0
- package/dist/web/assets/schedules-settings-section-BbaPbc28.js.br +0 -0
- package/dist/web/assets/schedules-settings-section-BbaPbc28.js.gz +0 -0
- package/dist/web/assets/session-review-tab-Aq3FEooH.js.br +0 -0
- package/dist/web/assets/session-review-tab-Aq3FEooH.js.gz +0 -0
- package/dist/web/assets/settings-body-vXbOWchN.js.br +0 -0
- package/dist/web/assets/settings-body-vXbOWchN.js.gz +0 -0
- package/dist/web/assets/settings-rows-DD7Gxmst.js.br +0 -0
- package/dist/web/assets/settings-rows-DD7Gxmst.js.gz +0 -0
- package/dist/web/assets/settings-section-content-CVtvJ6ze.js +0 -1
- package/dist/web/assets/settings-section-content-DkUJFop6.js.br +0 -0
- package/dist/web/assets/settings-section-content-DkUJFop6.js.gz +0 -0
- package/dist/web/assets/slash-command-picker-lILYDfK3.js.br +0 -0
- package/dist/web/assets/slash-command-picker-lILYDfK3.js.gz +0 -0
- package/dist/web/assets/sql-object-tab-Da42SMK5.js.br +0 -0
- package/dist/web/assets/sql-object-tab-Da42SMK5.js.gz +0 -0
- package/dist/web/assets/sqlite-viewer-V3SKNukY.js.br +0 -0
- package/dist/web/assets/sqlite-viewer-V3SKNukY.js.gz +0 -0
- package/dist/web/assets/structure-save-dialog-B635iyPI.js.br +0 -0
- package/dist/web/assets/structure-save-dialog-B635iyPI.js.gz +0 -0
- package/dist/web/assets/structure-tab-Co9d8ktU.js.br +0 -0
- package/dist/web/assets/structure-tab-Co9d8ktU.js.gz +0 -0
- package/dist/web/assets/system-monitor-body-DC0j8RqP.js.br +0 -0
- package/dist/web/assets/system-monitor-body-DC0j8RqP.js.gz +0 -0
- package/dist/web/assets/tab-host-window-content-Crvt1r5F.js.br +0 -0
- package/dist/web/assets/tab-host-window-content-Crvt1r5F.js.gz +0 -0
- package/dist/web/assets/table-tab-C2cYw7a0.js.br +0 -0
- package/dist/web/assets/table-tab-C2cYw7a0.js.gz +0 -0
- package/dist/web/assets/telegram-bot-token-field-BqNtOo5n.js.br +0 -0
- package/dist/web/assets/telegram-bot-token-field-BqNtOo5n.js.gz +0 -0
- package/dist/web/assets/terminal-tab-CrKxibGC.js.br +0 -0
- package/dist/web/assets/terminal-tab-CrKxibGC.js.gz +0 -0
- package/dist/web/assets/tool-cards-BRto67jM.js.br +0 -0
- package/dist/web/assets/tool-cards-BRto67jM.js.gz +0 -0
- package/dist/web/assets/tools-settings-section-DEvZsrxq.js.br +0 -0
- package/dist/web/assets/tools-settings-section-DEvZsrxq.js.gz +0 -0
- package/dist/web/assets/use-inline-blame-CRWJU6Rq.js.br +0 -0
- package/dist/web/assets/use-inline-blame-CRWJU6Rq.js.gz +0 -0
- package/dist/web/assets/use-lsp-B-otjr-6.js.br +0 -0
- package/dist/web/assets/use-lsp-B-otjr-6.js.gz +0 -0
- package/dist/web/assets/use-process-kill-BW2UW0mZ.js.br +0 -0
- package/dist/web/assets/use-process-kill-BW2UW0mZ.js.gz +0 -0
- package/dist/web/assets/use-sql-schema-info-D_Kc2FI7.js.br +0 -0
- package/dist/web/assets/use-sql-schema-info-D_Kc2FI7.js.gz +0 -0
- package/dist/web/assets/web-preview-tab-doNpegW3.js.br +0 -0
- package/dist/web/assets/web-preview-tab-doNpegW3.js.gz +0 -0
|
@@ -12,6 +12,8 @@ import type { SessionPhase } from "../../../types/api";
|
|
|
12
12
|
import type { BashPartialEntry } from "../../hooks/use-chat";
|
|
13
13
|
import { ToolCard } from "./tool-cards";
|
|
14
14
|
import { MarkdownContent } from "./message-markdown";
|
|
15
|
+
import { AsyncQuestionCard } from "./async-question-card";
|
|
16
|
+
import { ASYNC_QUESTION_TOOL, type ChatQuestion } from "../../../shared/chat-questions";
|
|
15
17
|
|
|
16
18
|
/**
|
|
17
19
|
* Renders events in order — consecutive text events merged into one bubble,
|
|
@@ -163,6 +165,10 @@ export function InterleavedEvents({ events, isStreaming, projectName, bashPartia
|
|
|
163
165
|
</div>
|
|
164
166
|
);
|
|
165
167
|
}
|
|
168
|
+
if (group.tool.type === "tool_use" && group.tool.tool === ASYNC_QUESTION_TOOL && !group.tool.parentToolUseId) {
|
|
169
|
+
const input = group.tool.input as { questions: ChatQuestion[] };
|
|
170
|
+
return <AsyncQuestionCard key={group.tool.toolUseId} itemId={group.tool.toolUseId!} questions={input.questions} />;
|
|
171
|
+
}
|
|
166
172
|
return <ToolCard key={`tool-${i}`} tool={group.tool} result={group.result} completed={group.completed} projectName={projectName} bashPartialOutput={bashPartialOutput} />;
|
|
167
173
|
})}
|
|
168
174
|
</>
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { useState, useCallback, useMemo, useEffect, useRef } from "react";
|
|
2
|
+
import type { ChatQuestion } from "../../../shared/chat-questions";
|
|
2
3
|
|
|
3
4
|
/* ── Types ── */
|
|
4
5
|
export interface QuestionOption {
|
|
@@ -6,17 +7,13 @@ export interface QuestionOption {
|
|
|
6
7
|
description?: string;
|
|
7
8
|
}
|
|
8
9
|
|
|
9
|
-
export
|
|
10
|
-
question: string;
|
|
11
|
-
header?: string;
|
|
12
|
-
options: QuestionOption[];
|
|
13
|
-
multiSelect?: boolean;
|
|
14
|
-
}
|
|
10
|
+
export type Question = ChatQuestion;
|
|
15
11
|
|
|
16
12
|
interface QuestionCardProps {
|
|
17
13
|
questions: Question[];
|
|
18
14
|
onSubmit: (answers: Record<string, string>) => void;
|
|
19
15
|
onSkip: () => void;
|
|
16
|
+
autoFocus?: boolean;
|
|
20
17
|
}
|
|
21
18
|
|
|
22
19
|
/* ── Hook: form state ── */
|
|
@@ -81,6 +78,7 @@ function useQuestionKeyboard(config: {
|
|
|
81
78
|
onSubmit: () => void;
|
|
82
79
|
customInputRef: React.RefObject<HTMLInputElement | null>;
|
|
83
80
|
enabled: boolean;
|
|
81
|
+
autoFocus: boolean;
|
|
84
82
|
}) {
|
|
85
83
|
const [focusedOption, setFocusedOption] = useState(0);
|
|
86
84
|
const containerRef = useRef<HTMLDivElement>(null);
|
|
@@ -139,7 +137,7 @@ function useQuestionKeyboard(config: {
|
|
|
139
137
|
// Same reason: asking the main document whether focus is already inside the card answers
|
|
140
138
|
// "no" for a card living in another document, and this effect re-runs on every render —
|
|
141
139
|
// which would yank focus out of the custom input after each keystroke.
|
|
142
|
-
if (!el.contains(el.ownerDocument.activeElement)) el.focus();
|
|
140
|
+
if (config.autoFocus && !el.contains(el.ownerDocument.activeElement)) el.focus();
|
|
143
141
|
}
|
|
144
142
|
return () => { el?.removeEventListener("keydown", handleKeyDown); };
|
|
145
143
|
}, [config, focusedOption]);
|
|
@@ -148,7 +146,7 @@ function useQuestionKeyboard(config: {
|
|
|
148
146
|
}
|
|
149
147
|
|
|
150
148
|
/* ── Component ── */
|
|
151
|
-
export function QuestionCard({ questions, onSubmit, onSkip }: QuestionCardProps) {
|
|
149
|
+
export function QuestionCard({ questions, onSubmit, onSkip, autoFocus = true }: QuestionCardProps) {
|
|
152
150
|
const customInputRef = useRef<HTMLInputElement>(null);
|
|
153
151
|
const form = useQuestionForm(questions);
|
|
154
152
|
const currentQ = questions[form.activeTab];
|
|
@@ -158,7 +156,7 @@ export function QuestionCard({ questions, onSubmit, onSkip }: QuestionCardProps)
|
|
|
158
156
|
const handleSubmit = useCallback(() => {
|
|
159
157
|
if (!form.allAnswered) return;
|
|
160
158
|
const result: Record<string, string> = {};
|
|
161
|
-
questions.forEach((q, i) => { result[q.question] = form.getFinalAnswer(i); });
|
|
159
|
+
questions.forEach((q, i) => { result[q.id ?? q.question] = form.getFinalAnswer(i); });
|
|
162
160
|
onSubmit(result);
|
|
163
161
|
}, [form.allAnswered, form.getFinalAnswer, questions, onSubmit]);
|
|
164
162
|
|
|
@@ -182,7 +180,7 @@ export function QuestionCard({ questions, onSubmit, onSkip }: QuestionCardProps)
|
|
|
182
180
|
allAnswered: form.allAnswered, hasAnswer: form.hasAnswer,
|
|
183
181
|
onSelectOption: handleSelectOption,
|
|
184
182
|
goToNextTab: form.goToNextTab, goToPrevTab: form.goToPrevTab,
|
|
185
|
-
onSubmit: handleSubmit, customInputRef, enabled: true,
|
|
183
|
+
onSubmit: handleSubmit, customInputRef, enabled: true, autoFocus,
|
|
186
184
|
});
|
|
187
185
|
|
|
188
186
|
const selectWithFocus = useCallback(
|
|
@@ -626,7 +626,7 @@ function ToolDetails({
|
|
|
626
626
|
</div>
|
|
627
627
|
);
|
|
628
628
|
case "AskUserQuestion": {
|
|
629
|
-
const qs = (input.questions as Array<{ question: string; header?: string; options: Array<{ label: string; description?: string }>; multiSelect?: boolean }>) ?? [];
|
|
629
|
+
const qs = (input.questions as Array<{ id?: string; question: string; header?: string; options: Array<{ label: string; description?: string }>; multiSelect?: boolean }>) ?? [];
|
|
630
630
|
const answers = (input.answers as Record<string, string>) ?? {};
|
|
631
631
|
return (
|
|
632
632
|
<div className="space-y-2">
|
|
@@ -635,7 +635,7 @@ function ToolDetails({
|
|
|
635
635
|
<p className="text-text-primary font-medium">{q.header ? `${q.header}: ` : ""}{q.question}</p>
|
|
636
636
|
<div className="flex flex-wrap gap-1">
|
|
637
637
|
{q.options.map((opt, oi) => {
|
|
638
|
-
const answer = answers[q.question] ?? "";
|
|
638
|
+
const answer = answers[q.id ?? q.question] ?? answers[q.question] ?? "";
|
|
639
639
|
const isSelected = answer.split(", ").includes(opt.label);
|
|
640
640
|
return (
|
|
641
641
|
<span key={oi} className={`inline-block rounded px-1.5 py-0.5 text-xs border ${
|
|
@@ -646,8 +646,8 @@ function ToolDetails({
|
|
|
646
646
|
);
|
|
647
647
|
})}
|
|
648
648
|
</div>
|
|
649
|
-
{answers[q.question] && (
|
|
650
|
-
<p className="text-foreground text-xs">Answer: {answers[q.question]}</p>
|
|
649
|
+
{(answers[q.id ?? q.question] ?? answers[q.question]) && (
|
|
650
|
+
<p className="text-foreground text-xs">Answer: {answers[q.id ?? q.question] ?? answers[q.question]}</p>
|
|
651
651
|
)}
|
|
652
652
|
</div>
|
|
653
653
|
))}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { useCallback, useEffect, useState } from "react";
|
|
2
|
+
|
|
3
|
+
/** What the chat shows while its socket is being re-established. */
|
|
4
|
+
export type ReconnectStage = "hidden" | "reconnecting" | "lost";
|
|
5
|
+
|
|
6
|
+
/** A reconnect that lands within this window is never shown — returning to the app should not flash. */
|
|
7
|
+
export const RECONNECT_SHOW_DELAY_MS = 800;
|
|
8
|
+
/** Past this the connection is reported lost and a retry is offered. */
|
|
9
|
+
export const RECONNECT_LOST_AFTER_MS = 8_000;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Turns a raw `isReconnecting` flag into what is worth telling the user.
|
|
13
|
+
*
|
|
14
|
+
* A phone browser closes the socket of every page it sends to the background, so a
|
|
15
|
+
* reconnect follows almost every return to PPM and usually finishes in well under a
|
|
16
|
+
* second. Both timers restart whenever the page becomes visible again: timers frozen
|
|
17
|
+
* while the page was hidden fire as soon as it resumes, which would otherwise report
|
|
18
|
+
* a connection that started reconnecting a moment ago as lost.
|
|
19
|
+
*/
|
|
20
|
+
export function useReconnectIndicator(
|
|
21
|
+
isReconnecting: boolean,
|
|
22
|
+
showDelayMs = RECONNECT_SHOW_DELAY_MS,
|
|
23
|
+
lostAfterMs = RECONNECT_LOST_AFTER_MS,
|
|
24
|
+
): { stage: ReconnectStage; restart: () => void } {
|
|
25
|
+
const [stage, setStage] = useState<ReconnectStage>("hidden");
|
|
26
|
+
const [epoch, setEpoch] = useState(0);
|
|
27
|
+
const restart = useCallback(() => setEpoch((n) => n + 1), []);
|
|
28
|
+
|
|
29
|
+
useEffect(() => {
|
|
30
|
+
const onVisibility = () => {
|
|
31
|
+
if (document.visibilityState === "visible") restart();
|
|
32
|
+
};
|
|
33
|
+
document.addEventListener("visibilitychange", onVisibility);
|
|
34
|
+
return () => document.removeEventListener("visibilitychange", onVisibility);
|
|
35
|
+
}, [restart]);
|
|
36
|
+
|
|
37
|
+
useEffect(() => {
|
|
38
|
+
setStage("hidden");
|
|
39
|
+
if (!isReconnecting) return;
|
|
40
|
+
const show = setTimeout(() => setStage("reconnecting"), showDelayMs);
|
|
41
|
+
const lost = setTimeout(() => setStage("lost"), lostAfterMs);
|
|
42
|
+
return () => {
|
|
43
|
+
clearTimeout(show);
|
|
44
|
+
clearTimeout(lost);
|
|
45
|
+
};
|
|
46
|
+
}, [isReconnecting, showDelayMs, lostAfterMs, epoch]);
|
|
47
|
+
|
|
48
|
+
return { stage, restart };
|
|
49
|
+
}
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|