@openhands/agent-canvas 1.16.0 → 1.18.0
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/README.md +1 -1
- package/README.windows.md +2 -2
- package/build/assets/{acp-providers-CX3Lh9gj.js → acp-providers-DcY_mKYa.js} +1 -1
- package/build/assets/active-backend-context-BnH4-L8h.js +2 -0
- package/build/assets/{agent-context-settings-DSZlXrLj.js → agent-context-settings-D3peZkjX.js} +1 -1
- package/build/assets/agent-profiles-service.api-DkeZaqIl.js +1 -0
- package/build/assets/agent-profiles-settings-7yMWYjGF.js +1 -0
- package/build/assets/agent-server-client-options-EHB23gyx.js +1 -0
- package/build/assets/agent-server-config-C_x8Otd9.js +1 -0
- package/build/assets/agent-server-conversation-service.api-jiCopc2E.js +88 -0
- package/build/assets/agent-settings-BF8hM6wb.js +2 -0
- package/build/assets/agent-settings-YPutBAeR.js +1 -0
- package/build/assets/alert-banner-eYyqvHL3.js +1 -0
- package/build/assets/{api-error-message-B-XdSk3b.js → api-error-message-BXo0lCI5.js} +1 -1
- package/build/assets/api-key-entry-screen-CCBvBD8u.js +1 -0
- package/build/assets/app-settings-BtYDs-Be.js +1 -0
- package/build/assets/automation-detail-BxXhb_m2.js +3 -0
- package/build/assets/{automation-export-D3a3of4G.js → automation-export-BJsfi7n2.js} +1 -1
- package/build/assets/automation-git-sync-B7o_Nbl-.js +1 -0
- package/build/assets/automation-setup-route-qaJ6lLCf.js +3 -0
- package/build/assets/{automation-templates-BRppNh99.js → automation-templates-Bb98r-kx.js} +1 -1
- package/build/assets/automations-list-DEPVNud3.js +1 -0
- package/build/assets/{back-nav-button-Cjl_hoxq.js → back-nav-button-B2yBiVMB.js} +1 -1
- package/build/assets/backend-form-modal-DxisQV_6.js +1 -0
- package/build/assets/backend-synced-settings-badge-DLEp6cq7.js +1 -0
- package/build/assets/badge-ehL-kgeO.js +1 -0
- package/build/assets/{base-modal-D_L0oEbG.js → base-modal-C1a0TsSx.js} +1 -1
- package/build/assets/bot-ByolqPEr.js +1 -0
- package/build/assets/{brand-button-BAfk4wGP.js → brand-button-CUMfjb99.js} +1 -1
- package/build/assets/browser-SE24Tk8g.js +46 -0
- package/build/assets/browser-tab-HjJxHA0V.js +1 -0
- package/build/assets/canvas-extension-page-BsUGBb1T.js +1 -0
- package/build/assets/canvas-extensions-C9Tm6s_E.js +1 -0
- package/build/assets/{canvas-extensions-runtime-2_x5Ezmi.js → canvas-extensions-runtime-B8kxM4rO.js} +1 -1
- package/build/assets/{chat-send-button-MUQqCZCS.js → chat-send-button-CGvc2wpE.js} +1 -1
- package/build/assets/check-Bo8s5Ylg.js +1 -0
- package/build/assets/chevron-down-Cr6Fn_wS.js +1 -0
- package/build/assets/chevron-right-CfdfRn-8.js +1 -0
- package/build/assets/circle-check-5pH3qCji.js +1 -0
- package/build/assets/circle-plus-check-toggle-BDX_ctNs.js +1 -0
- package/build/assets/{cloud-funnel-analytics-CztBCCPp.js → cloud-funnel-analytics-D5uJ_4JE.js} +1 -1
- package/build/assets/{cog-D-MPQW6G.js → cog-CAEugqtV.js} +1 -1
- package/build/assets/command-menu-CQxs4mtX.js +1 -0
- package/build/assets/commits-tab-D0xgjipP.js +1 -0
- package/build/assets/{condenser-settings-DmEOje-7.js → condenser-settings-D63NJRBT.js} +1 -1
- package/build/assets/confirmation-modal-78sd9Vny.js +1 -0
- package/build/assets/{context-menu-list-item-I86vKcmM.js → context-menu-list-item-Cm7-7Y-7.js} +1 -1
- package/build/assets/conversation-B_nweu5p.js +93 -0
- package/build/assets/conversation-edjzrv5w.js +1 -0
- package/build/assets/conversation-panel-edjzrv5w.js +1 -0
- package/build/assets/conversation-state-store-9D_3P7q4.js +1 -0
- package/build/assets/conversation-store-DC-JlJuq.js +6 -0
- package/build/assets/{conversation-tab-empty-state-FIbh_lc8.js → conversation-tab-empty-state-B3dpJXX0.js} +1 -1
- package/build/assets/copy-to-clipboard-button-B1ljgNxO.js +1 -0
- package/build/assets/device-verify-D5QRIS_x.js +1 -0
- package/build/assets/{dropdown-classes-Bc1djN0-.js → dropdown-classes-BGvOvW2_.js} +1 -1
- package/build/assets/edit-automation-modal-D_JWSmxT.js +1 -0
- package/build/assets/empty-state-FK_s1B60.js +1 -0
- package/build/assets/{entry.client-CqyPPjOq.js → entry.client-BMafTpjO.js} +2 -2
- package/build/assets/enum-filter-dropdown-UNaom12H.js +1 -0
- package/build/assets/environment-switch-overlay-COibRUA-.js +1 -0
- package/build/assets/error-state-Cf8LRuuY.js +1 -0
- package/build/assets/extensions-hub-C_6ahIua.js +1 -0
- package/build/assets/extensions-navigation-C5GfpzFe.js +1 -0
- package/build/assets/external-link-Bd7Tga-1.js +1 -0
- package/build/assets/files-tab-D5PPIWI1.js +1 -0
- package/build/assets/{form-control-classes-Bkh5FGrD.js → form-control-classes-Dbq-7YP_.js} +1 -1
- package/build/assets/format-model-name-Dfh9Udrx.js +1 -0
- package/build/assets/get-git-path-jU2zjqIB.js +1 -0
- package/build/assets/git-repo-dropdown-BoDDWXfX.js +1 -0
- package/build/assets/git-repo-dropdown-uxlFw2gn.js +1 -0
- package/build/assets/highlighted-source-view-C7pAXrT0.js +1 -0
- package/build/assets/home-BM5_Wz_R.js +1 -0
- package/build/assets/home-Ivfm7KC4.js +1 -0
- package/build/assets/home-automation-run-tooltip-B1N2uO9p.js +1 -0
- package/build/assets/home-store-DCbei3DX.js +1 -0
- package/build/assets/hooks-service-Dnmhqc0Z.js +1 -0
- package/build/assets/index-home-td9BN2T3.js +1 -0
- package/build/assets/info-BcajzHn1.js +1 -0
- package/build/assets/install-server-modal-B81I-5OE.js +1 -0
- package/build/assets/kebab-menu-item-content-SCJBwZnp.js +1 -0
- package/build/assets/{key-BmVyxs-2.js → key-O84CMFHb.js} +1 -1
- package/build/assets/launch-ZLxI4opd.js +1 -0
- package/build/assets/list-filter-B8PQk3RA.js +1 -0
- package/build/assets/{list-todo-apgLVjMw.js → list-todo-Caa8E1X_.js} +1 -1
- package/build/assets/llm-not-configured-banner-Dh_ajcM8.js +27 -0
- package/build/assets/llm-settings-CODhjQzy.js +1 -0
- package/build/assets/llm-settings-CZaXYgtw.js +1 -0
- package/build/assets/llm-subscription-service-CgIDc38n.js +1 -0
- package/build/assets/loader-circle-BxJgk73D.js +1 -0
- package/build/assets/{loading-spinner-BY9N3pOe.js → loading-spinner-BeLV0IXf.js} +1 -1
- package/build/assets/manage-backends-modal-cMXqCb-B.js +1 -0
- package/build/assets/manifest-bfeccb98.js +1 -0
- package/build/assets/manifest-subpage-layout-CVZgVKoY.js +1 -0
- package/build/assets/{map-provider-Cu3Zgumb.js → map-provider-iRs80q_6.js} +1 -1
- package/build/assets/markdown-renderer-DyFl9-mL.js +8 -0
- package/build/assets/mcp-CraxoXQv.js +1 -0
- package/build/assets/{mcp-marketplace-utils-AIBzzHTO.js → mcp-marketplace-utils-C7PYr293.js} +1 -1
- package/build/assets/mcp-page-CteH_K0N.js +9 -0
- package/build/assets/messages-Bk1xhbU2.js +41 -0
- package/build/assets/{modal-body-BxZjsju9.js → modal-body-C24WsdFb.js} +1 -1
- package/build/assets/{modal-classes-C8eycCwG.js → modal-classes-B0b9eiL8.js} +1 -1
- package/build/assets/modal-close-button-DfqfB2Nj.js +1 -0
- package/build/assets/{mouse-pointer-click-Co2uyaPA.js → mouse-pointer-click-BXlRN92t.js} +1 -1
- package/build/assets/onboarding-DXFBRqEy.js +1 -0
- package/build/assets/onboarding-modal-BT3Gx_sZ.js +1 -0
- package/build/assets/organization-service.api-B5CvmnYQ.js +1 -0
- package/build/assets/pencil-q-ihqDYv.js +1 -0
- package/build/assets/pin-BdroVQdN.js +1 -0
- package/build/assets/planner-tab-CstoOlAB.js +1 -0
- package/build/assets/plug-7ACOEbMs.js +1 -0
- package/build/assets/plugins-management-service-5rqVPEGN.js +1 -0
- package/build/assets/plus-C2e21TFC.js +1 -0
- package/build/assets/profiles-service.api-D1XKMgr0.js +1 -0
- package/build/assets/providers-XmZ9HM4Q.js +1 -0
- package/build/assets/proxy-XP6U1Dhv.js +1 -0
- package/build/assets/{puzzle-JM_QaRm0.js → puzzle-LJYnuxKe.js} +1 -1
- package/build/assets/react-BX7IV650.js +1 -0
- package/build/assets/recommended-automations-launcher-DEHRKIAg.js +1 -0
- package/build/assets/refresh-cw-BtdC3T8P.js +1 -0
- package/build/assets/root-CM6IZHlg.css +1 -0
- package/build/assets/root-DdFkodKW.js +2 -0
- package/build/assets/root-layout-DUquNZTU.js +2 -0
- package/build/assets/schema-field-Y3F8JvXd.js +1 -0
- package/build/assets/scroll-fade-state-Dt_fx2kf.js +1 -0
- package/build/assets/sdk-section-page-CNZTLwH9.js +1 -0
- package/build/assets/secret-form-9-BoGA40.js +1 -0
- package/build/assets/secrets-service-BOIsfD9j.js +1 -0
- package/build/assets/secrets-settings-CBJgFr42.js +1 -0
- package/build/assets/settings-D4hdToD4.js +1 -0
- package/build/assets/settings-dropdown-input-DBvsZ7-Q.js +1 -0
- package/build/assets/settings-index-DeQphyBK.js +1 -0
- package/build/assets/settings-input-dVuzapBA.js +1 -0
- package/build/assets/{settings-list-classes-BzeSZbF2.js → settings-list-classes-DhAPuXm6.js} +1 -1
- package/build/assets/settings-modal-tHiJ8iYV.js +1 -0
- package/build/assets/settings-nav-GAQjW1a-.js +16 -0
- package/build/assets/settings-service.api-C1vZH9Vh.js +1 -0
- package/build/assets/settings-switch-DDd1cQ8t.js +1 -0
- package/build/assets/{settings-utils-UYpEdPuD.js → settings-utils-BTaaRhLZ.js} +1 -1
- package/build/assets/shared-conversation-Cyg7m7ns.js +1 -0
- package/build/assets/shield-check-C3Rl0NF8.js +1 -0
- package/build/assets/{sidebar-layout-D6fS8-Gl.js → sidebar-layout-DH0E-5KW.js} +1 -1
- package/build/assets/sidebar-mobile-menu-toggle-CQ4iky__.js +1 -0
- package/build/assets/{sidebar-nav-link-DQQcMf1A.js → sidebar-nav-link-oLQiKUBu.js} +1 -1
- package/build/assets/{sidebar-onboarding-checklist-storage-BBkeI6Bp.js → sidebar-onboarding-checklist-storage-TfvNNnnr.js} +1 -1
- package/build/assets/sidebar-store-DAZVH-DR.js +1 -0
- package/build/assets/skill-card-pill-row-DfjIfj0K.js +1 -0
- package/build/assets/{skill-filter-w__3UCEE.js → skill-filter-DsNLmn76.js} +2 -2
- package/build/assets/{skill-icon-badge-RQkq8wvl.js → skill-icon-badge-0MK_68Nc.js} +1 -1
- package/build/assets/skill-scope-BE-H9TSZ.js +1 -0
- package/build/assets/skills-plugins-vzSdxSk_.js +1 -0
- package/build/assets/skills-settings-BiPOH9H9.js +1 -0
- package/build/assets/styled-tooltip-CejG0rqv.js +1 -0
- package/build/assets/task-list-tab-OkZSqnTp.js +1 -0
- package/build/assets/{terminal-CNElN42a.js → terminal-Dph60VFZ.js} +2 -2
- package/build/assets/toggle-switch-B2uXaAUS.js +1 -0
- package/build/assets/trash-2-Bb40zQzs.js +1 -0
- package/build/assets/trash-Ckh7yCaB.js +1 -0
- package/build/assets/triangle-alert-DEdu-b_L.js +1 -0
- package/build/assets/{typography-v1KN0tzi.js → typography-DgcLGdHk.js} +1 -1
- package/build/assets/usage-tab-MCmNRAnR.js +1 -0
- package/build/assets/use-acp-credential-form-ychoGqjC.js +1 -0
- package/build/assets/use-activate-agent-profile-8L8Xdghy.js +1 -0
- package/build/assets/use-agent-profiles-Bi8hSkze.js +1 -0
- package/build/assets/{use-automation-health-E6NZi9rb.js → use-automation-health-U99vvHxx.js} +1 -1
- package/build/assets/use-automation-permissions-Buus0R6h.js +1 -0
- package/build/assets/{use-automations-xijQKIl9.js → use-automations-Bq5hVuv0.js} +1 -1
- package/build/assets/{use-can-manage-org-profiles-CrJP5262.js → use-can-manage-org-profiles-MzIeEV8F.js} +1 -1
- package/build/assets/use-canvas-extensions-Ca9KoVEm.js +1 -0
- package/build/assets/{use-cloud-current-user-id-CDfAHpPX.js → use-cloud-current-user-id-B4ZLUZSa.js} +1 -1
- package/build/assets/use-config-l5tkDHyD.js +1 -0
- package/build/assets/use-create-conversation-i_PdFdIs.js +1 -0
- package/build/assets/use-create-secret-CjWq0J4O.js +1 -0
- package/build/assets/use-free-models-gCsJ5BV0.js +1 -0
- package/build/assets/{use-get-secrets-K3jmk-LH.js → use-get-secrets-CMTuWEp_.js} +1 -1
- package/build/assets/use-is-authed-A2Yinlt0.js +1 -0
- package/build/assets/{use-launch-skill-in-chat-BYjYihBP.js → use-launch-skill-in-chat-QbXDhiHr.js} +1 -1
- package/build/assets/use-llm-configured-Dl4zg8ht.js +1 -0
- package/build/assets/use-llm-profiles-SWsuFmFu.js +1 -0
- package/build/assets/use-manifest-capabilities-CdqYfUAC.js +1 -0
- package/build/assets/use-onboarding-completion-Xl63ZvzQ.js +1 -0
- package/build/assets/use-pinned-home-route-BXDIUaxQ.js +1 -0
- package/build/assets/use-plugins-marketplace-BIIaPiaB.js +1 -0
- package/build/assets/use-save-agent-profile-D-ZHHE94.js +1 -0
- package/build/assets/{use-save-settings-DYqkKv7T.js → use-save-settings-Dapkf4cC.js} +1 -1
- package/build/assets/use-settings-C2KKQKVC.js +1 -0
- package/build/assets/use-settings-nav-items-TOc0Rsfd.js +1 -0
- package/build/assets/use-tracking-j4uo9VEW.js +3 -0
- package/build/assets/{use-user-conversation-B9Gebw_g.js → use-user-conversation-5UFqMoO4.js} +1 -1
- package/build/assets/{useInfiniteQuery-C926xzY4.js → useInfiniteQuery-CtSRG7uW.js} +1 -1
- package/build/assets/{useMutation-B-qc391N.js → useMutation-Cszf8mKy.js} +1 -1
- package/build/assets/useQueries-pUohFMSP.js +1 -0
- package/build/assets/useQuery-DAAacS7O.js +1 -0
- package/build/assets/useTranslation-CCgUjPJF.js +1 -0
- package/build/assets/utils-BgLSZdyy.js +1 -0
- package/build/assets/{vendor~conversation-panel~conversation-C8Fn4XOf.js → vendor~conversation-panel~conversation-C22sJuWZ.js} +1 -1
- package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~b0x1wrp2-Z0lly3FE.js +2 -0
- package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~czjee3a3-BXXGJNDU.js +185 -0
- package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~ew9ih1s8-40UR63Gt.js +1 -0
- package/build/assets/{vendor~index-home~home~conversation-panel~conversation-hWywRBaR.js → vendor~index-home~home~conversation-panel~conversation-UTl7gUo9.js} +1 -1
- package/build/assets/vendor~root-layout-CcdIqs-C.js +1 -0
- package/build/assets/{vendor~root-layout~conversation-panel~conversation-BMbMgaGu.js → vendor~root-layout~conversation-panel~conversation-C3EBV3kp.js} +1 -1
- package/build/assets/vendor~root-layout~conversation-panel~conversation~skills-settings~automations-list~shared-~bovqqk8e-BCe0JJVy.js +1 -0
- package/build/assets/{vendor~root-layout~index-home~home~conversation-panel~conversation-j5MFqfSy.js → vendor~root-layout~index-home~home~conversation-panel~conversation-BGGbPcYh.js} +1 -1
- package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~mcp~automations-list~aut~ibfbmr9f-CxhwKuAd.js +1 -0
- package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~nj1hli3r-DP9wmsjo.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~inibp4qe-CnsDDzeE.js} +1 -1
- package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~eo2nf80n-CUmIwQCN.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~eo2nf80n-3eJ4ExtV.js} +12 -6
- package/build/assets/{verification-settings-gw_q6vkL.js → verification-settings-DdBpaVPz.js} +1 -1
- package/build/assets/{wrench-CUEI1krB.js → wrench-B8Wg_nbp.js} +1 -1
- package/build/assets/x-CX8lVGwm.js +1 -0
- package/build/index.html +4 -4
- package/build/locales/ar/openhands.json +79 -22
- package/build/locales/ca/openhands.json +79 -22
- package/build/locales/de/openhands.json +79 -22
- package/build/locales/en/openhands.json +79 -22
- package/build/locales/es/openhands.json +79 -22
- package/build/locales/fr/openhands.json +79 -22
- package/build/locales/it/openhands.json +79 -22
- package/build/locales/ja/openhands.json +79 -22
- package/build/locales/ko-KR/openhands.json +79 -22
- package/build/locales/no/openhands.json +79 -22
- package/build/locales/pt/openhands.json +79 -22
- package/build/locales/tr/openhands.json +79 -22
- package/build/locales/uk/openhands.json +79 -22
- package/build/locales/zh-CN/openhands.json +79 -22
- package/build/locales/zh-TW/openhands.json +79 -22
- package/config/defaults.json +3 -3
- package/dist/api/agent-server-adapter.cjs +3 -3
- package/dist/api/agent-server-adapter.cjs.map +1 -1
- package/dist/api/agent-server-adapter.d.ts +72 -12
- package/dist/api/agent-server-adapter.js +234 -132
- package/dist/api/agent-server-adapter.js.map +1 -1
- package/dist/api/agent-server-config.cjs +1 -1
- package/dist/api/agent-server-config.cjs.map +1 -1
- package/dist/api/agent-server-config.d.ts +6 -0
- package/dist/api/agent-server-config.js +6 -3
- package/dist/api/agent-server-config.js.map +1 -1
- package/dist/api/automation-service/automation-service.api.cjs +1 -1
- package/dist/api/automation-service/automation-service.api.cjs.map +1 -1
- package/dist/api/automation-service/automation-service.api.d.ts +2 -2
- package/dist/api/automation-service/automation-service.api.js +7 -7
- package/dist/api/automation-service/automation-service.api.js.map +1 -1
- package/dist/api/cloud/organization-service.api.cjs.map +1 -1
- package/dist/api/cloud/organization-service.api.d.ts +9 -1
- package/dist/api/cloud/organization-service.api.js.map +1 -1
- package/dist/api/cloud/provider-connections-service.api.cjs +2 -0
- package/dist/api/cloud/provider-connections-service.api.cjs.map +1 -0
- package/dist/api/cloud/provider-connections-service.api.d.ts +5 -0
- package/dist/api/cloud/provider-connections-service.api.js +50 -0
- package/dist/api/cloud/provider-connections-service.api.js.map +1 -0
- package/dist/api/cloud/skills-service.api.cjs +1 -1
- package/dist/api/cloud/skills-service.api.cjs.map +1 -1
- package/dist/api/cloud/skills-service.api.d.ts +10 -0
- package/dist/api/cloud/skills-service.api.js +11 -1
- package/dist/api/cloud/skills-service.api.js.map +1 -1
- package/dist/api/config-service/config-service.api.cjs +1 -1
- package/dist/api/config-service/config-service.api.cjs.map +1 -1
- package/dist/api/config-service/config-service.api.js +6 -2
- package/dist/api/config-service/config-service.api.js.map +1 -1
- package/dist/api/config-service/config-service.types.d.ts +13 -0
- package/dist/api/conversation-metadata-store.cjs +1 -1
- package/dist/api/conversation-metadata-store.cjs.map +1 -1
- package/dist/api/conversation-metadata-store.d.ts +24 -0
- package/dist/api/conversation-metadata-store.js +10 -2
- package/dist/api/conversation-metadata-store.js.map +1 -1
- package/dist/api/conversation-service/agent-server-conversation-service.api.cjs +1 -1
- package/dist/api/conversation-service/agent-server-conversation-service.api.cjs.map +1 -1
- package/dist/api/conversation-service/agent-server-conversation-service.api.d.ts +20 -0
- package/dist/api/conversation-service/agent-server-conversation-service.api.js +126 -77
- package/dist/api/conversation-service/agent-server-conversation-service.api.js.map +1 -1
- package/dist/api/hooks-service.cjs +2 -0
- package/dist/api/hooks-service.cjs.map +1 -0
- package/dist/api/hooks-service.d.ts +13 -0
- package/dist/api/hooks-service.js +20 -0
- package/dist/api/hooks-service.js.map +1 -0
- package/dist/api/provider-connections-service/provider-connections-service.api.cjs +1 -1
- package/dist/api/provider-connections-service/provider-connections-service.api.cjs.map +1 -1
- package/dist/api/provider-connections-service/provider-connections-service.api.js +25 -16
- package/dist/api/provider-connections-service/provider-connections-service.api.js.map +1 -1
- package/dist/api/settings-service/settings-service.api.cjs +1 -1
- package/dist/api/settings-service/settings-service.api.cjs.map +1 -1
- package/dist/api/settings-service/settings-service.api.d.ts +2 -0
- package/dist/api/settings-service/settings-service.api.js +18 -10
- package/dist/api/settings-service/settings-service.api.js.map +1 -1
- package/dist/api/skills-service.cjs +1 -1
- package/dist/api/skills-service.cjs.map +1 -1
- package/dist/api/skills-service.d.ts +7 -0
- package/dist/api/skills-service.js +11 -8
- package/dist/api/skills-service.js.map +1 -1
- package/dist/components/conversation-events/chat/event-message-components/critic-result-display.cjs +1 -1
- package/dist/components/conversation-events/chat/event-message-components/critic-result-display.js +5 -5
- package/dist/components/conversation-events/chat/event-message-components/finish-event-message.cjs +1 -1
- package/dist/components/conversation-events/chat/event-message-components/finish-event-message.cjs.map +1 -1
- package/dist/components/conversation-events/chat/event-message-components/finish-event-message.js +2 -1
- package/dist/components/conversation-events/chat/event-message-components/finish-event-message.js.map +1 -1
- package/dist/components/conversation-events/chat/event-message-components/generic-event-message-wrapper.cjs +1 -1
- package/dist/components/conversation-events/chat/event-message-components/generic-event-message-wrapper.cjs.map +1 -1
- package/dist/components/conversation-events/chat/event-message-components/generic-event-message-wrapper.d.ts +1 -1
- package/dist/components/conversation-events/chat/event-message-components/generic-event-message-wrapper.js +28 -28
- package/dist/components/conversation-events/chat/event-message-components/generic-event-message-wrapper.js.map +1 -1
- package/dist/components/conversation-events/chat/event-message-components/thought-event-message.cjs +1 -1
- package/dist/components/conversation-events/chat/event-message-components/thought-event-message.cjs.map +1 -1
- package/dist/components/conversation-events/chat/event-message-components/thought-event-message.js +2 -1
- package/dist/components/conversation-events/chat/event-message-components/thought-event-message.js.map +1 -1
- package/dist/components/conversation-events/chat/event-message-components/user-assistant-event-message.cjs +1 -1
- package/dist/components/conversation-events/chat/event-message-components/user-assistant-event-message.cjs.map +1 -1
- package/dist/components/conversation-events/chat/event-message-components/user-assistant-event-message.d.ts +1 -1
- package/dist/components/conversation-events/chat/event-message-components/user-assistant-event-message.js +37 -37
- package/dist/components/conversation-events/chat/event-message-components/user-assistant-event-message.js.map +1 -1
- package/dist/components/conversation-events/chat/event-message.cjs +2 -2
- package/dist/components/conversation-events/chat/event-message.cjs.map +1 -1
- package/dist/components/conversation-events/chat/event-message.js +79 -70
- package/dist/components/conversation-events/chat/event-message.js.map +1 -1
- package/dist/components/conversation-events/chat/messages.cjs +1 -1
- package/dist/components/conversation-events/chat/messages.cjs.map +1 -1
- package/dist/components/conversation-events/chat/messages.js +28 -27
- package/dist/components/conversation-events/chat/messages.js.map +1 -1
- package/dist/components/features/automations/automation-card.cjs +1 -1
- package/dist/components/features/automations/automation-card.cjs.map +1 -1
- package/dist/components/features/automations/automation-card.js +104 -97
- package/dist/components/features/automations/automation-card.js.map +1 -1
- package/dist/components/features/automations/automation-list-row.cjs +1 -1
- package/dist/components/features/automations/automation-list-row.cjs.map +1 -1
- package/dist/components/features/automations/automation-list-row.js +89 -77
- package/dist/components/features/automations/automation-list-row.js.map +1 -1
- package/dist/components/features/automations/build-automation-menu-items.cjs +1 -1
- package/dist/components/features/automations/build-automation-menu-items.cjs.map +1 -1
- package/dist/components/features/automations/build-automation-menu-items.d.ts +3 -1
- package/dist/components/features/automations/build-automation-menu-items.js +12 -11
- package/dist/components/features/automations/build-automation-menu-items.js.map +1 -1
- package/dist/components/features/automations/detail/configuration-section.d.ts +7 -1
- package/dist/components/features/automations/detail/detail-header.d.ts +10 -5
- package/dist/components/features/automations/detail/run-status-badge.cjs +1 -1
- package/dist/components/features/automations/detail/run-status-badge.cjs.map +1 -1
- package/dist/components/features/automations/detail/run-status-badge.d.ts +2 -2
- package/dist/components/features/automations/detail/run-status-badge.js +82 -53
- package/dist/components/features/automations/detail/run-status-badge.js.map +1 -1
- package/dist/components/features/automations/kebab-menu.cjs +1 -1
- package/dist/components/features/automations/kebab-menu.cjs.map +1 -1
- package/dist/components/features/automations/kebab-menu.js +9 -5
- package/dist/components/features/automations/kebab-menu.js.map +1 -1
- package/dist/components/features/automations/recommended-automations-launcher.cjs +1 -1
- package/dist/components/features/automations/recommended-automations-launcher.cjs.map +1 -1
- package/dist/components/features/automations/recommended-automations-launcher.js +12 -12
- package/dist/components/features/automations/recommended-automations-launcher.js.map +1 -1
- package/dist/components/features/automations/recommended-automations-section.cjs +1 -1
- package/dist/components/features/automations/recommended-automations-section.js +9 -9
- package/dist/components/features/backends/backend-selector.cjs +1 -1
- package/dist/components/features/backends/backend-selector.cjs.map +1 -1
- package/dist/components/features/backends/backend-selector.js +123 -112
- package/dist/components/features/backends/backend-selector.js.map +1 -1
- package/dist/components/features/backends/manage-backends-modal.cjs +1 -1
- package/dist/components/features/backends/manage-backends-modal.cjs.map +1 -1
- package/dist/components/features/backends/manage-backends-modal.js +29 -29
- package/dist/components/features/backends/manage-backends-modal.js.map +1 -1
- package/dist/components/features/chat/change-agent-button.cjs +1 -1
- package/dist/components/features/chat/change-agent-button.js +4 -4
- package/dist/components/features/chat/chat-interface.cjs +2 -2
- package/dist/components/features/chat/chat-interface.cjs.map +1 -1
- package/dist/components/features/chat/chat-interface.js +137 -137
- package/dist/components/features/chat/chat-interface.js.map +1 -1
- package/dist/components/features/chat/chat-message.cjs +1 -1
- package/dist/components/features/chat/chat-message.cjs.map +1 -1
- package/dist/components/features/chat/chat-message.d.ts +2 -1
- package/dist/components/features/chat/chat-message.js +88 -79
- package/dist/components/features/chat/chat-message.js.map +1 -1
- package/dist/components/features/chat/components/chat-input-llm-profile-picker.cjs +1 -1
- package/dist/components/features/chat/components/chat-input-llm-profile-picker.cjs.map +1 -1
- package/dist/components/features/chat/components/chat-input-llm-profile-picker.js +62 -61
- package/dist/components/features/chat/components/chat-input-llm-profile-picker.js.map +1 -1
- package/dist/components/features/chat/components/context-window-meter.cjs +1 -1
- package/dist/components/features/chat/components/context-window-meter.js +4 -4
- package/dist/components/features/chat/confirmation-mode-enabled.cjs +1 -1
- package/dist/components/features/chat/confirmation-mode-enabled.js +4 -4
- package/dist/components/features/chat/generic-event-message.cjs +1 -1
- package/dist/components/features/chat/generic-event-message.cjs.map +1 -1
- package/dist/components/features/chat/generic-event-message.d.ts +2 -1
- package/dist/components/features/chat/generic-event-message.js +41 -22
- package/dist/components/features/chat/generic-event-message.js.map +1 -1
- package/dist/components/features/chat/interactive-chat-box.cjs +1 -1
- package/dist/components/features/chat/interactive-chat-box.cjs.map +1 -1
- package/dist/components/features/chat/interactive-chat-box.js +20 -19
- package/dist/components/features/chat/interactive-chat-box.js.map +1 -1
- package/dist/components/features/chat/model-messages.cjs +1 -1
- package/dist/components/features/chat/model-messages.cjs.map +1 -1
- package/dist/components/features/chat/model-messages.js +27 -26
- package/dist/components/features/chat/model-messages.js.map +1 -1
- package/dist/components/features/conversation/conversation-overview-git-section.cjs +1 -1
- package/dist/components/features/conversation/conversation-overview-git-section.js +4 -4
- package/dist/components/features/conversation/conversation-overview-skills-panel.cjs +1 -1
- package/dist/components/features/conversation/conversation-overview-skills-panel.js +4 -4
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.cjs +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.cjs.map +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.js +77 -78
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.js.map +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs.cjs +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs.cjs.map +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs.js +88 -88
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs.js.map +1 -1
- package/dist/components/features/conversation-panel/advanced-conversation-options-modal.cjs +2 -0
- package/dist/components/features/conversation-panel/advanced-conversation-options-modal.cjs.map +1 -0
- package/dist/components/features/conversation-panel/advanced-conversation-options-modal.d.ts +21 -0
- package/dist/components/features/conversation-panel/advanced-conversation-options-modal.js +239 -0
- package/dist/components/features/conversation-panel/advanced-conversation-options-modal.js.map +1 -0
- package/dist/components/features/conversation-panel/budget-display.cjs +1 -1
- package/dist/components/features/conversation-panel/budget-display.cjs.map +1 -1
- package/dist/components/features/conversation-panel/budget-display.d.ts +1 -2
- package/dist/components/features/conversation-panel/budget-display.js +12 -19
- package/dist/components/features/conversation-panel/budget-display.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-active-tag-filters.cjs +2 -0
- package/dist/components/features/conversation-panel/conversation-active-tag-filters.cjs.map +1 -0
- package/dist/components/features/conversation-panel/conversation-active-tag-filters.d.ts +28 -0
- package/dist/components/features/conversation-panel/conversation-active-tag-filters.js +69 -0
- package/dist/components/features/conversation-panel/conversation-active-tag-filters.js.map +1 -0
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.d.ts +2 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.js +19 -18
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.d.ts +2 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.js +91 -80
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.js +45 -44
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.js +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card.d.ts +7 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card.js +87 -81
- package/dist/components/features/conversation-panel/conversation-card/conversation-card.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.d.ts +2 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.js +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.d.ts +2 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.js +2 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-layouts-menu.cjs +2 -0
- package/dist/components/features/conversation-panel/conversation-layouts-menu.cjs.map +1 -0
- package/dist/components/features/conversation-panel/conversation-layouts-menu.d.ts +29 -0
- package/dist/components/features/conversation-panel/conversation-layouts-menu.js +177 -0
- package/dist/components/features/conversation-panel/conversation-layouts-menu.js.map +1 -0
- package/dist/components/features/conversation-panel/conversation-panel-list-helpers.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-panel-list-helpers.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-panel-list-helpers.d.ts +37 -0
- package/dist/components/features/conversation-panel/conversation-panel-list-helpers.js +85 -45
- package/dist/components/features/conversation-panel/conversation-panel-list-helpers.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-panel.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-panel.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-panel.js +296 -290
- package/dist/components/features/conversation-panel/conversation-panel.js.map +1 -1
- package/dist/components/features/conversation-panel/edit-conversation-tags-modal.cjs +2 -0
- package/dist/components/features/conversation-panel/edit-conversation-tags-modal.cjs.map +1 -0
- package/dist/components/features/conversation-panel/edit-conversation-tags-modal.d.ts +22 -0
- package/dist/components/features/conversation-panel/edit-conversation-tags-modal.js +153 -0
- package/dist/components/features/conversation-panel/edit-conversation-tags-modal.js.map +1 -0
- package/dist/components/features/conversation-panel/hide-older-conversations-row.cjs +2 -0
- package/dist/components/features/conversation-panel/hide-older-conversations-row.cjs.map +1 -0
- package/dist/components/features/conversation-panel/hide-older-conversations-row.d.ts +6 -0
- package/dist/components/features/conversation-panel/hide-older-conversations-row.js +65 -0
- package/dist/components/features/conversation-panel/hide-older-conversations-row.js.map +1 -0
- package/dist/components/features/conversation-panel/menu-row.cjs +1 -1
- package/dist/components/features/conversation-panel/menu-row.cjs.map +1 -1
- package/dist/components/features/conversation-panel/menu-row.d.ts +11 -1
- package/dist/components/features/conversation-panel/menu-row.js +27 -16
- package/dist/components/features/conversation-panel/menu-row.js.map +1 -1
- package/dist/components/features/home/featured-automations/automation-health-indicator.cjs +1 -1
- package/dist/components/features/home/featured-automations/automation-health-indicator.cjs.map +1 -1
- package/dist/components/features/home/featured-automations/automation-health-indicator.js +1 -1
- package/dist/components/features/home/featured-automations/automation-health-indicator.js.map +1 -1
- package/dist/components/features/home/featured-automations/automation-run-activity-metrics.cjs +1 -1
- package/dist/components/features/home/featured-automations/automation-run-activity-metrics.cjs.map +1 -1
- package/dist/components/features/home/featured-automations/automation-run-activity-metrics.d.ts +4 -3
- package/dist/components/features/home/featured-automations/automation-run-activity-metrics.js +22 -25
- package/dist/components/features/home/featured-automations/automation-run-activity-metrics.js.map +1 -1
- package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.cjs +1 -1
- package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.cjs.map +1 -1
- package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.d.ts +1 -1
- package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.js +15 -15
- package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.js.map +1 -1
- package/dist/components/features/home/featured-automations/automation-run-health.cjs +1 -1
- package/dist/components/features/home/featured-automations/automation-run-health.cjs.map +1 -1
- package/dist/components/features/home/featured-automations/automation-run-health.d.ts +5 -3
- package/dist/components/features/home/featured-automations/automation-run-health.js +30 -23
- package/dist/components/features/home/featured-automations/automation-run-health.js.map +1 -1
- package/dist/components/features/home/featured-automations/build-home-automation-menu-items.d.ts +1 -2
- package/dist/components/features/home/featured-automations/build-pinned-automation-menu-items.d.ts +0 -1
- package/dist/components/features/home/featured-automations/home-automation-activity.d.ts +3 -2
- package/dist/components/features/home/featured-automations/home-automation-run-tooltip.cjs +1 -1
- package/dist/components/features/home/featured-automations/home-automation-run-tooltip.cjs.map +1 -1
- package/dist/components/features/home/featured-automations/home-automation-run-tooltip.d.ts +1 -1
- package/dist/components/features/home/featured-automations/home-automation-run-tooltip.js +42 -42
- package/dist/components/features/home/featured-automations/home-automation-run-tooltip.js.map +1 -1
- package/dist/components/features/images/image-lightbox.cjs +2 -0
- package/dist/components/features/images/image-lightbox.cjs.map +1 -0
- package/dist/components/features/images/image-lightbox.d.ts +11 -0
- package/dist/components/features/images/image-lightbox.js +37 -0
- package/dist/components/features/images/image-lightbox.js.map +1 -0
- package/dist/components/features/images/image-preview.cjs +1 -1
- package/dist/components/features/images/image-preview.cjs.map +1 -1
- package/dist/components/features/images/image-preview.d.ts +2 -1
- package/dist/components/features/images/image-preview.js +33 -13
- package/dist/components/features/images/image-preview.js.map +1 -1
- package/dist/components/features/manifest/manifest-form-field.d.ts +3 -1
- package/dist/components/features/manifest/manifest-review-step.d.ts +3 -1
- package/dist/components/features/onboarding/steps/setup-llm-step.d.ts +3 -4
- package/dist/components/features/settings/cloud-settings-link.cjs +1 -1
- package/dist/components/features/settings/cloud-settings-link.cjs.map +1 -1
- package/dist/components/features/settings/cloud-settings-link.d.ts +3 -1
- package/dist/components/features/settings/cloud-settings-link.js +22 -19
- package/dist/components/features/settings/cloud-settings-link.js.map +1 -1
- package/dist/components/features/settings/integrations-settings-link.cjs +1 -1
- package/dist/components/features/settings/integrations-settings-link.cjs.map +1 -1
- package/dist/components/features/settings/integrations-settings-link.d.ts +3 -1
- package/dist/components/features/settings/integrations-settings-link.js +20 -17
- package/dist/components/features/settings/integrations-settings-link.js.map +1 -1
- package/dist/components/features/settings/llm-profiles/llm-settings-local-view.cjs +1 -1
- package/dist/components/features/settings/llm-profiles/llm-settings-local-view.js +3 -2
- package/dist/components/features/settings/llm-profiles/profile-row.cjs +1 -1
- package/dist/components/features/settings/llm-profiles/profile-row.js +1 -1
- package/dist/components/features/settings/llm-profiles/profiles-body.d.ts +2 -2
- package/dist/components/features/settings/sdk-settings/sdk-section-page.cjs +1 -1
- package/dist/components/features/settings/sdk-settings/sdk-section-page.cjs.map +1 -1
- package/dist/components/features/settings/sdk-settings/sdk-section-page.d.ts +8 -7
- package/dist/components/features/settings/sdk-settings/sdk-section-page.js +172 -142
- package/dist/components/features/settings/sdk-settings/sdk-section-page.js.map +1 -1
- package/dist/components/features/settings/secrets-settings/secret-form.cjs +1 -1
- package/dist/components/features/settings/secrets-settings/secret-form.cjs.map +1 -1
- package/dist/components/features/settings/secrets-settings/secret-form.js +38 -25
- package/dist/components/features/settings/secrets-settings/secret-form.js.map +1 -1
- package/dist/components/features/settings/settings-dropdown-input.cjs +1 -1
- package/dist/components/features/settings/settings-dropdown-input.js +6 -6
- package/dist/components/features/sidebar/sidebar-rail-body.cjs +1 -1
- package/dist/components/features/sidebar/sidebar-rail-body.cjs.map +1 -1
- package/dist/components/features/sidebar/sidebar-rail-body.d.ts +4 -1
- package/dist/components/features/sidebar/sidebar-rail-body.js +157 -139
- package/dist/components/features/sidebar/sidebar-rail-body.js.map +1 -1
- package/dist/components/features/sidebar/sidebar.cjs +1 -1
- package/dist/components/features/sidebar/sidebar.cjs.map +1 -1
- package/dist/components/features/sidebar/sidebar.js +28 -26
- package/dist/components/features/sidebar/sidebar.js.map +1 -1
- package/dist/components/features/sidebar/use-sidebar-onboarding-checklist.cjs +1 -1
- package/dist/components/features/sidebar/use-sidebar-onboarding-checklist.js +3 -3
- package/dist/components/features/skills/extensions-navigation.cjs +1 -1
- package/dist/components/features/skills/extensions-navigation.cjs.map +1 -1
- package/dist/components/features/skills/extensions-navigation.js +3 -3
- package/dist/components/features/skills/extensions-navigation.js.map +1 -1
- package/dist/components/providers/agent-server-ui-providers.cjs +1 -1
- package/dist/components/providers/agent-server-ui-providers.cjs.map +1 -1
- package/dist/components/providers/agent-server-ui-providers.js +33 -29
- package/dist/components/providers/agent-server-ui-providers.js.map +1 -1
- package/dist/components/shared/buttons/remove-button.cjs +1 -1
- package/dist/components/shared/buttons/remove-button.cjs.map +1 -1
- package/dist/components/shared/buttons/remove-button.d.ts +2 -1
- package/dist/components/shared/buttons/remove-button.js +2 -1
- package/dist/components/shared/buttons/remove-button.js.map +1 -1
- package/dist/components/shared/buttons/styled-tooltip.cjs +1 -1
- package/dist/components/shared/buttons/styled-tooltip.cjs.map +1 -1
- package/dist/components/shared/buttons/styled-tooltip.d.ts +2 -1
- package/dist/components/shared/buttons/styled-tooltip.js +2 -1
- package/dist/components/shared/buttons/styled-tooltip.js.map +1 -1
- package/dist/components/shared/filters/enum-filter-dropdown.cjs +1 -1
- package/dist/components/shared/filters/enum-filter-dropdown.cjs.map +1 -1
- package/dist/components/shared/filters/enum-filter-dropdown.d.ts +5 -1
- package/dist/components/shared/filters/enum-filter-dropdown.js +14 -14
- package/dist/components/shared/filters/enum-filter-dropdown.js.map +1 -1
- package/dist/components/shared/free-models-note.cjs +2 -0
- package/dist/components/shared/free-models-note.cjs.map +1 -0
- package/dist/components/shared/free-models-note.d.ts +3 -0
- package/dist/components/shared/free-models-note.js +20 -0
- package/dist/components/shared/free-models-note.js.map +1 -0
- package/dist/components/shared/modals/confirmation-modal.cjs +1 -1
- package/dist/components/shared/modals/confirmation-modal.cjs.map +1 -1
- package/dist/components/shared/modals/confirmation-modal.d.ts +2 -1
- package/dist/components/shared/modals/confirmation-modal.js +8 -8
- package/dist/components/shared/modals/confirmation-modal.js.map +1 -1
- package/dist/components/shared/modals/settings/model-selector.cjs +1 -1
- package/dist/components/shared/modals/settings/model-selector.cjs.map +1 -1
- package/dist/components/shared/modals/settings/model-selector.js +102 -112
- package/dist/components/shared/modals/settings/model-selector.js.map +1 -1
- package/dist/config/defaults.cjs +1 -1
- package/dist/config/defaults.cjs.map +1 -1
- package/dist/config/defaults.js +3 -3
- package/dist/config/defaults.js.map +1 -1
- package/dist/constants/acp-providers.cjs.map +1 -1
- package/dist/constants/acp-providers.d.ts +12 -0
- package/dist/constants/acp-providers.js.map +1 -1
- package/dist/constants/settings-nav.d.ts +8 -0
- package/dist/contexts/conversation-websocket-context.cjs +3 -3
- package/dist/contexts/conversation-websocket-context.cjs.map +1 -1
- package/dist/contexts/conversation-websocket-context.d.ts +5 -0
- package/dist/contexts/conversation-websocket-context.js +194 -198
- package/dist/contexts/conversation-websocket-context.js.map +1 -1
- package/dist/contexts/websocket-provider-wrapper.cjs +1 -1
- package/dist/contexts/websocket-provider-wrapper.cjs.map +1 -1
- package/dist/contexts/websocket-provider-wrapper.js +31 -15
- package/dist/contexts/websocket-provider-wrapper.js.map +1 -1
- package/dist/hooks/chat/record-model-switch-message.cjs +1 -1
- package/dist/hooks/chat/record-model-switch-message.cjs.map +1 -1
- package/dist/hooks/chat/record-model-switch-message.d.ts +31 -0
- package/dist/hooks/chat/record-model-switch-message.js +25 -12
- package/dist/hooks/chat/record-model-switch-message.js.map +1 -1
- package/dist/hooks/chat/use-plan-mode-interceptor.cjs +2 -0
- package/dist/hooks/chat/use-plan-mode-interceptor.cjs.map +1 -0
- package/dist/hooks/chat/use-plan-mode-interceptor.d.ts +16 -0
- package/dist/hooks/chat/use-plan-mode-interceptor.js +43 -0
- package/dist/hooks/chat/use-plan-mode-interceptor.js.map +1 -0
- package/dist/hooks/chat/use-slash-command.cjs +1 -1
- package/dist/hooks/chat/use-slash-command.cjs.map +1 -1
- package/dist/hooks/chat/use-slash-command.js +63 -62
- package/dist/hooks/chat/use-slash-command.js.map +1 -1
- package/dist/hooks/mutation/use-create-conversation.cjs +1 -1
- package/dist/hooks/mutation/use-create-conversation.cjs.map +1 -1
- package/dist/hooks/mutation/use-create-conversation.js +5 -1
- package/dist/hooks/mutation/use-create-conversation.js.map +1 -1
- package/dist/hooks/mutation/use-read-conversation-file.cjs +1 -1
- package/dist/hooks/mutation/use-read-conversation-file.cjs.map +1 -1
- package/dist/hooks/mutation/use-read-conversation-file.js +11 -4
- package/dist/hooks/mutation/use-read-conversation-file.js.map +1 -1
- package/dist/hooks/mutation/use-save-settings.cjs +1 -1
- package/dist/hooks/mutation/use-save-settings.js +3 -3
- package/dist/hooks/mutation/use-switch-llm-profile.cjs +1 -1
- package/dist/hooks/mutation/use-switch-llm-profile.cjs.map +1 -1
- package/dist/hooks/mutation/use-switch-llm-profile.js +13 -25
- package/dist/hooks/mutation/use-switch-llm-profile.js.map +1 -1
- package/dist/hooks/mutation/use-update-conversation-tags.cjs +2 -0
- package/dist/hooks/mutation/use-update-conversation-tags.cjs.map +1 -0
- package/dist/hooks/mutation/use-update-conversation-tags.d.ts +8 -0
- package/dist/hooks/mutation/use-update-conversation-tags.js +45 -0
- package/dist/hooks/mutation/use-update-conversation-tags.js.map +1 -0
- package/dist/hooks/query/query-keys.cjs +1 -1
- package/dist/hooks/query/query-keys.cjs.map +1 -1
- package/dist/hooks/query/query-keys.d.ts +6 -0
- package/dist/hooks/query/query-keys.js +2 -2
- package/dist/hooks/query/query-keys.js.map +1 -1
- package/dist/hooks/query/use-automation-sdk-version.cjs +1 -1
- package/dist/hooks/query/use-automation-sdk-version.cjs.map +1 -1
- package/dist/hooks/query/use-automation-sdk-version.d.ts +0 -1
- package/dist/hooks/query/use-automation-sdk-version.js +30 -55
- package/dist/hooks/query/use-automation-sdk-version.js.map +1 -1
- package/dist/hooks/query/use-conversation-skills.cjs +1 -1
- package/dist/hooks/query/use-conversation-skills.cjs.map +1 -1
- package/dist/hooks/query/use-conversation-skills.d.ts +14 -5
- package/dist/hooks/query/use-conversation-skills.js +20 -4
- package/dist/hooks/query/use-conversation-skills.js.map +1 -1
- package/dist/hooks/query/use-free-models.cjs +2 -0
- package/dist/hooks/query/use-free-models.cjs.map +1 -0
- package/dist/hooks/query/use-free-models.d.ts +23 -0
- package/dist/hooks/query/use-free-models.js +67 -0
- package/dist/hooks/query/use-free-models.js.map +1 -0
- package/dist/hooks/query/use-local-git-info.cjs.map +1 -1
- package/dist/hooks/query/use-local-git-info.js.map +1 -1
- package/dist/hooks/query/use-provider-connections.cjs +1 -1
- package/dist/hooks/query/use-provider-connections.cjs.map +1 -1
- package/dist/hooks/query/use-provider-connections.d.ts +6 -3
- package/dist/hooks/query/use-provider-connections.js +7 -3
- package/dist/hooks/query/use-provider-connections.js.map +1 -1
- package/dist/hooks/query/use-provider-models.cjs +1 -1
- package/dist/hooks/query/use-provider-models.cjs.map +1 -1
- package/dist/hooks/query/use-provider-models.js +34 -25
- package/dist/hooks/query/use-provider-models.js.map +1 -1
- package/dist/hooks/query/use-search-providers.cjs +1 -1
- package/dist/hooks/query/use-search-providers.cjs.map +1 -1
- package/dist/hooks/query/use-search-providers.js +31 -19
- package/dist/hooks/query/use-search-providers.js.map +1 -1
- package/dist/hooks/query/use-sub-conversations.cjs +1 -1
- package/dist/hooks/query/use-sub-conversations.cjs.map +1 -1
- package/dist/hooks/query/use-sub-conversations.js +16 -16
- package/dist/hooks/query/use-sub-conversations.js.map +1 -1
- package/dist/hooks/use-acp-model-context.cjs +1 -1
- package/dist/hooks/use-acp-model-context.js +3 -3
- package/dist/hooks/use-agent-state.cjs +1 -1
- package/dist/hooks/use-agent-state.cjs.map +1 -1
- package/dist/hooks/use-agent-state.d.ts +17 -1
- package/dist/hooks/use-agent-state.js +19 -9
- package/dist/hooks/use-agent-state.js.map +1 -1
- package/dist/hooks/use-automation-permissions.cjs +2 -0
- package/dist/hooks/use-automation-permissions.cjs.map +1 -0
- package/dist/hooks/use-automation-permissions.d.ts +43 -0
- package/dist/hooks/use-automation-permissions.js +52 -0
- package/dist/hooks/use-automation-permissions.js.map +1 -0
- package/dist/hooks/use-chat-input-model-state.cjs +1 -1
- package/dist/hooks/use-chat-input-model-state.js +3 -3
- package/dist/hooks/use-handle-plan-click.cjs +1 -1
- package/dist/hooks/use-handle-plan-click.cjs.map +1 -1
- package/dist/hooks/use-handle-plan-click.d.ts +3 -1
- package/dist/hooks/use-handle-plan-click.js +85 -26
- package/dist/hooks/use-handle-plan-click.js.map +1 -1
- package/dist/hooks/use-home-automation-actions.cjs +1 -1
- package/dist/hooks/use-home-automation-actions.cjs.map +1 -1
- package/dist/hooks/use-home-automation-actions.d.ts +1 -2
- package/dist/hooks/use-home-automation-actions.js +1 -1
- package/dist/hooks/use-home-automation-actions.js.map +1 -1
- package/dist/hooks/use-llm-configured.cjs +1 -1
- package/dist/hooks/use-llm-configured.js +3 -3
- package/dist/hooks/use-manifest-preflight.d.ts +1 -1
- package/dist/hooks/use-unified-websocket-status.cjs +1 -1
- package/dist/hooks/use-unified-websocket-status.cjs.map +1 -1
- package/dist/hooks/use-unified-websocket-status.d.ts +7 -0
- package/dist/hooks/use-unified-websocket-status.js +5 -1
- package/dist/hooks/use-unified-websocket-status.js.map +1 -1
- package/dist/i18n/declaration.cjs +1 -1
- package/dist/i18n/declaration.cjs.map +1 -1
- package/dist/i18n/declaration.d.ts +71 -14
- package/dist/i18n/declaration.js +1 -1
- package/dist/i18n/declaration.js.map +1 -1
- package/dist/i18n/translation.cjs +2 -2
- package/dist/i18n/translation.cjs.map +1 -1
- package/dist/i18n/translation.js +1281 -312
- package/dist/i18n/translation.js.map +1 -1
- package/dist/locales/ar/openhands.json +79 -22
- package/dist/locales/ca/openhands.json +79 -22
- package/dist/locales/de/openhands.json +79 -22
- package/dist/locales/en/openhands.json +79 -22
- package/dist/locales/es/openhands.json +79 -22
- package/dist/locales/fr/openhands.json +79 -22
- package/dist/locales/it/openhands.json +79 -22
- package/dist/locales/ja/openhands.json +79 -22
- package/dist/locales/ko-KR/openhands.json +79 -22
- package/dist/locales/no/openhands.json +79 -22
- package/dist/locales/pt/openhands.json +79 -22
- package/dist/locales/tr/openhands.json +79 -22
- package/dist/locales/uk/openhands.json +79 -22
- package/dist/locales/zh-CN/openhands.json +79 -22
- package/dist/locales/zh-TW/openhands.json +79 -22
- package/dist/manifests/automation-insights.cjs.map +1 -1
- package/dist/manifests/automation-insights.d.ts +10 -2
- package/dist/manifests/automation-insights.js.map +1 -1
- package/dist/manifests/automation-setup.cjs +1 -1
- package/dist/manifests/automation-setup.cjs.map +1 -1
- package/dist/manifests/automation-setup.d.ts +9 -16
- package/dist/manifests/automation-setup.js +17 -7
- package/dist/manifests/automation-setup.js.map +1 -1
- package/dist/manifests/manifest-actions.d.ts +1 -1
- package/dist/manifests/manifest-capabilities.d.ts +3 -1
- package/dist/manifests/manifest-local-validation.cjs +2 -0
- package/dist/manifests/manifest-local-validation.cjs.map +1 -0
- package/dist/manifests/manifest-local-validation.d.ts +15 -11
- package/dist/manifests/manifest-local-validation.js +8 -0
- package/dist/manifests/manifest-local-validation.js.map +1 -0
- package/dist/manifests/manifest-template.cjs +2 -0
- package/dist/manifests/manifest-template.cjs.map +1 -0
- package/dist/manifests/manifest-template.d.ts +4 -4
- package/dist/manifests/manifest-template.js +12 -0
- package/dist/manifests/manifest-template.js.map +1 -0
- package/dist/manifests/manifest-validation.cjs +1 -1
- package/dist/manifests/manifest-validation.cjs.map +1 -1
- package/dist/manifests/manifest-validation.js +106 -28
- package/dist/manifests/manifest-validation.js.map +1 -1
- package/dist/manifests/types.cjs.map +1 -1
- package/dist/manifests/types.d.ts +39 -4
- package/dist/manifests/types.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/custom-automation/manifest.cjs +8 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/custom-automation/manifest.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/custom-automation/manifest.js +221 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/custom-automation/manifest.js.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.js +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.js +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/qa-changes/manifest.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/qa-changes/manifest.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/qa-changes/manifest.js +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/qa-changes/manifest.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog-index.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog-index.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog-index.js +22 -20
- package/dist/node_modules/@openhands/extensions/automations/catalog-index.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/interface.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/automations/interface.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/interface.js +2 -1
- package/dist/node_modules/@openhands/extensions/automations/interface.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/gitlab.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/gitlab.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/gitlab.js +24 -5
- package/dist/node_modules/@openhands/extensions/integrations/catalog/gitlab.js.map +1 -1
- package/dist/node_modules/@tanstack/react-query/build/modern/QueryClientProvider.cjs +1 -1
- package/dist/node_modules/@tanstack/react-query/build/modern/QueryClientProvider.js +1 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-question-mark.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-question-mark.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-question-mark.js +21 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-question-mark.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/shrink.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/shrink.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/shrink.js +23 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/shrink.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/sliders-horizontal.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/sliders-horizontal.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/sliders-horizontal.js +43 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/sliders-horizontal.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/tags.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/tags.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/tags.js +22 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/tags.js.map +1 -0
- package/dist/package.cjs +1 -1
- package/dist/package.cjs.map +1 -1
- package/dist/package.js +4 -4
- package/dist/package.js.map +1 -1
- package/dist/routes/agent-settings.d.ts +2 -0
- package/dist/routes/app-settings.cjs +1 -1
- package/dist/routes/app-settings.cjs.map +1 -1
- package/dist/routes/app-settings.js +53 -48
- package/dist/routes/app-settings.js.map +1 -1
- package/dist/routes/llm-settings.cjs +1 -1
- package/dist/routes/llm-settings.cjs.map +1 -1
- package/dist/routes/llm-settings.d.ts +3 -1
- package/dist/routes/llm-settings.js +120 -127
- package/dist/routes/llm-settings.js.map +1 -1
- package/dist/routes/planner-tab.cjs +1 -1
- package/dist/routes/planner-tab.cjs.map +1 -1
- package/dist/routes/planner-tab.js +44 -28
- package/dist/routes/planner-tab.js.map +1 -1
- package/dist/services/telemetry.cjs +1 -1
- package/dist/services/telemetry.cjs.map +1 -1
- package/dist/services/telemetry.d.ts +5 -0
- package/dist/services/telemetry.js +122 -115
- package/dist/services/telemetry.js.map +1 -1
- package/dist/stores/conversation-panel-preferences-store.cjs +1 -1
- package/dist/stores/conversation-panel-preferences-store.cjs.map +1 -1
- package/dist/stores/conversation-panel-preferences-store.d.ts +32 -5
- package/dist/stores/conversation-panel-preferences-store.js +29 -12
- package/dist/stores/conversation-panel-preferences-store.js.map +1 -1
- package/dist/stores/conversation-state-store.cjs +1 -1
- package/dist/stores/conversation-state-store.cjs.map +1 -1
- package/dist/stores/conversation-state-store.d.ts +9 -3
- package/dist/stores/conversation-state-store.js +6 -3
- package/dist/stores/conversation-state-store.js.map +1 -1
- package/dist/stores/conversation-store.cjs +1 -1
- package/dist/stores/conversation-store.cjs.map +1 -1
- package/dist/stores/conversation-store.d.ts +2 -0
- package/dist/stores/conversation-store.js +3 -0
- package/dist/stores/conversation-store.js.map +1 -1
- package/dist/stores/free-models-store.cjs +2 -0
- package/dist/stores/free-models-store.cjs.map +1 -0
- package/dist/stores/free-models-store.d.ts +30 -0
- package/dist/stores/free-models-store.js +22 -0
- package/dist/stores/free-models-store.js.map +1 -0
- package/dist/stores/model-store.cjs +1 -1
- package/dist/stores/model-store.cjs.map +1 -1
- package/dist/stores/model-store.d.ts +7 -0
- package/dist/stores/model-store.js +4 -0
- package/dist/stores/model-store.js.map +1 -1
- package/dist/types/automation.cjs.map +1 -1
- package/dist/types/automation.d.ts +46 -1
- package/dist/types/automation.js.map +1 -1
- package/dist/ui/context-menu.d.ts +1 -1
- package/dist/ui/toggle-switch.cjs +1 -1
- package/dist/ui/toggle-switch.cjs.map +1 -1
- package/dist/ui/toggle-switch.d.ts +4 -1
- package/dist/ui/toggle-switch.js +4 -3
- package/dist/ui/toggle-switch.js.map +1 -1
- package/dist/utils/automation-catalog.cjs +1 -1
- package/dist/utils/automation-catalog.cjs.map +1 -1
- package/dist/utils/automation-catalog.d.ts +12 -1
- package/dist/utils/automation-catalog.js +42 -12
- package/dist/utils/automation-catalog.js.map +1 -1
- package/dist/utils/automation-run-display.cjs +2 -0
- package/dist/utils/automation-run-display.cjs.map +1 -0
- package/dist/utils/automation-run-display.d.ts +20 -0
- package/dist/utils/automation-run-display.js +85 -0
- package/dist/utils/automation-run-display.js.map +1 -0
- package/dist/utils/automation-schedule.cjs +1 -1
- package/dist/utils/automation-schedule.cjs.map +1 -1
- package/dist/utils/automation-schedule.d.ts +16 -0
- package/dist/utils/automation-schedule.js +2 -0
- package/dist/utils/automation-schedule.js.map +1 -1
- package/dist/utils/constants.cjs +1 -1
- package/dist/utils/constants.cjs.map +1 -1
- package/dist/utils/constants.d.ts +4 -0
- package/dist/utils/constants.js +23 -3
- package/dist/utils/constants.js.map +1 -1
- package/dist/utils/format-event-timestamp.cjs +2 -0
- package/dist/utils/format-event-timestamp.cjs.map +1 -0
- package/dist/utils/format-event-timestamp.d.ts +1 -0
- package/dist/utils/format-event-timestamp.js +13 -0
- package/dist/utils/format-event-timestamp.js.map +1 -0
- package/dist/utils/format-model-name.cjs +1 -1
- package/dist/utils/format-model-name.cjs.map +1 -1
- package/dist/utils/format-model-name.d.ts +27 -6
- package/dist/utils/format-model-name.js +14 -6
- package/dist/utils/format-model-name.js.map +1 -1
- package/dist/utils/git-diff-stats.cjs +2 -2
- package/dist/utils/git-diff-stats.cjs.map +1 -1
- package/dist/utils/git-diff-stats.d.ts +4 -0
- package/dist/utils/git-diff-stats.js +12 -2
- package/dist/utils/git-diff-stats.js.map +1 -1
- package/dist/utils/plan-file.cjs +4 -0
- package/dist/utils/plan-file.cjs.map +1 -0
- package/dist/utils/plan-file.d.ts +18 -0
- package/dist/utils/plan-file.js +58 -0
- package/dist/utils/plan-file.js.map +1 -0
- package/dist/utils/recommended-automation-rail.cjs +1 -1
- package/dist/utils/recommended-automation-rail.cjs.map +1 -1
- package/dist/utils/recommended-automation-rail.js +1 -0
- package/dist/utils/recommended-automation-rail.js.map +1 -1
- package/dist/utils/scroll-fade-state.cjs +1 -1
- package/dist/utils/scroll-fade-state.cjs.map +1 -1
- package/dist/utils/scroll-fade-state.d.ts +6 -0
- package/dist/utils/scroll-fade-state.js +8 -1
- package/dist/utils/scroll-fade-state.js.map +1 -1
- package/dist/utils/sdk-settings-schema.cjs +1 -1
- package/dist/utils/sdk-settings-schema.cjs.map +1 -1
- package/dist/utils/sdk-settings-schema.d.ts +1 -0
- package/dist/utils/sdk-settings-schema.js +25 -22
- package/dist/utils/sdk-settings-schema.js.map +1 -1
- package/dist/utils/utils.cjs +1 -1
- package/dist/utils/utils.cjs.map +1 -1
- package/dist/utils/utils.js +11 -11
- package/dist/utils/utils.js.map +1 -1
- package/package.json +4 -4
- package/scripts/check-sdk-version-sync.mjs +6 -6
- package/scripts/dev-safe.mjs +1 -1
- package/scripts/dev-with-automation.mjs +1 -1
- package/scripts/static-server.mjs +33 -1
- package/build/assets/active-backend-context-CrHTlgvN.js +0 -2
- package/build/assets/agent-profiles-settings-Dzgb7G9z.js +0 -1
- package/build/assets/agent-server-conversation-service.api-tnqNjbpE.js +0 -86
- package/build/assets/agent-settings-DLtsqaOs.js +0 -2
- package/build/assets/agent-settings-fFvR-XC2.js +0 -1
- package/build/assets/alert-banner-HP6mX-Vr.js +0 -1
- package/build/assets/api-key-entry-screen-qTzrmJcr.js +0 -1
- package/build/assets/app-settings-dbnneVaV.js +0 -1
- package/build/assets/automation-detail-BmwlCUAB.js +0 -3
- package/build/assets/automation-git-sync-CprN5DcU.js +0 -1
- package/build/assets/automation-setup-route-C40kXjMY.js +0 -1
- package/build/assets/automations-list-DuNcRawl.js +0 -1
- package/build/assets/backend-form-modal-lhGwzXFI.js +0 -1
- package/build/assets/backend-synced-settings-badge-DPkz30BE.js +0 -1
- package/build/assets/badge-BU3S0VtE.js +0 -1
- package/build/assets/bot-dMYHVfYM.js +0 -1
- package/build/assets/browser-DSAo0tz1.js +0 -46
- package/build/assets/browser-tab-C9vy56R5.js +0 -1
- package/build/assets/canvas-extension-page-dx1gFrfW.js +0 -1
- package/build/assets/canvas-extensions-8A-XhpgP.js +0 -1
- package/build/assets/check-CS0vmpQQ.js +0 -1
- package/build/assets/chevron-down-e1QBpjVy.js +0 -1
- package/build/assets/chevron-right-ZG4R5G4Q.js +0 -1
- package/build/assets/circle-check-DzWLNsbE.js +0 -1
- package/build/assets/circle-plus-check-toggle-BO_kFZt3.js +0 -1
- package/build/assets/command-menu--UIlGL72.js +0 -1
- package/build/assets/commits-tab-AnZwLvh-.js +0 -1
- package/build/assets/confirmation-modal-Dv1ktp8K.js +0 -1
- package/build/assets/conversation-BbGrAO4Z.js +0 -93
- package/build/assets/conversation-mYT6NAoj.js +0 -1
- package/build/assets/conversation-panel-mYT6NAoj.js +0 -1
- package/build/assets/conversation-state-store-B0ImPLHO.js +0 -1
- package/build/assets/conversation-store-Ca3ghXap.js +0 -6
- package/build/assets/copy-to-clipboard-button-Ca8iSkkA.js +0 -1
- package/build/assets/device-verify-Bhn2e_Ye.js +0 -1
- package/build/assets/edit-automation-modal-DadGbJ2u.js +0 -1
- package/build/assets/empty-state-BoGVDecT.js +0 -1
- package/build/assets/enum-filter-dropdown-Bgca129f.js +0 -1
- package/build/assets/environment-switch-overlay-BmBRT7gv.js +0 -1
- package/build/assets/error-state-Body8Ngd.js +0 -1
- package/build/assets/extensions-hub-CcDqq_vR.js +0 -1
- package/build/assets/extensions-navigation-Cr4yzYk4.js +0 -1
- package/build/assets/external-link-DKUlnCQV.js +0 -1
- package/build/assets/files-tab-D4o2VyE_.js +0 -1
- package/build/assets/format-model-name-CasAP3nd.js +0 -1
- package/build/assets/get-git-path-ChKDVHZp.js +0 -1
- package/build/assets/git-repo-dropdown-4ROKl2cB.js +0 -1
- package/build/assets/git-repo-dropdown-BkqzkMmM.js +0 -1
- package/build/assets/highlighted-source-view-BFRxGT_Q.js +0 -1
- package/build/assets/home-ChpSuepX.js +0 -1
- package/build/assets/home-DIsB440S.js +0 -1
- package/build/assets/home-automation-run-tooltip-BVNDWjAH.js +0 -1
- package/build/assets/home-store-CY9Ej0ux.js +0 -1
- package/build/assets/index-home-BdlrFIif.js +0 -1
- package/build/assets/info-B6RQawoW.js +0 -1
- package/build/assets/install-server-modal-Dpy89p4g.js +0 -1
- package/build/assets/kebab-menu-item-content-D8hSNGmm.js +0 -1
- package/build/assets/launch-IrTDEFCs.js +0 -1
- package/build/assets/list-filter-DsEK7NFC.js +0 -1
- package/build/assets/llm-not-configured-banner-CIFABh3K.js +0 -27
- package/build/assets/llm-settings-B9juXhIa.js +0 -1
- package/build/assets/llm-settings-De1d5dfr.js +0 -1
- package/build/assets/llm-subscription-service-BpJ0ouQo.js +0 -1
- package/build/assets/loader-circle-CC1au6hc.js +0 -1
- package/build/assets/manage-backends-modal-BrPV3oB-.js +0 -1
- package/build/assets/manifest-80fb1c29.js +0 -1
- package/build/assets/manifest-subpage-layout-CAOYzrYp.js +0 -1
- package/build/assets/markdown-renderer-BzTlxI8x.js +0 -8
- package/build/assets/mcp-BTs_SXfZ.js +0 -1
- package/build/assets/mcp-page-BEBYqH_K.js +0 -9
- package/build/assets/messages-DKV9cRc2.js +0 -41
- package/build/assets/modal-close-button-DDzdRvCs.js +0 -1
- package/build/assets/onboarding-DV_OXoeP.js +0 -1
- package/build/assets/onboarding-modal-rkyBYkeQ.js +0 -1
- package/build/assets/organization-service.api-DrYNkEN_.js +0 -1
- package/build/assets/pencil-47jAZH_V.js +0 -1
- package/build/assets/pin-By41Vl5J.js +0 -1
- package/build/assets/planner-tab-C9uZmhme.js +0 -1
- package/build/assets/plug-CG5HFcNG.js +0 -1
- package/build/assets/plugins-management-service-BMJgC3Ga.js +0 -1
- package/build/assets/plus-C7Slq-0I.js +0 -1
- package/build/assets/profiles-service.api-ChoKrL0l.js +0 -1
- package/build/assets/providers-BhMcY5nv.js +0 -1
- package/build/assets/proxy-9Fe1v5na.js +0 -1
- package/build/assets/recommended-automations-launcher-6ABrI9Cy.js +0 -1
- package/build/assets/refresh-cw-3q3Frrii.js +0 -1
- package/build/assets/root-Dc8YmC9F.js +0 -2
- package/build/assets/root-VDaypvK4.css +0 -1
- package/build/assets/root-layout-CXkhSPYh.js +0 -2
- package/build/assets/schema-field-D-y9-LDb.js +0 -1
- package/build/assets/scroll-fade-state-Dw-i4SGq.js +0 -1
- package/build/assets/sdk-section-page-BlFiizlG.js +0 -1
- package/build/assets/secret-form-BB7the8W.js +0 -1
- package/build/assets/secrets-service-ByZVENbp.js +0 -1
- package/build/assets/secrets-settings-B_GpxKW2.js +0 -1
- package/build/assets/settings-C0EWuBtA.js +0 -1
- package/build/assets/settings-dropdown-input-BcwylHs2.js +0 -1
- package/build/assets/settings-index-5w5UW2K3.js +0 -1
- package/build/assets/settings-input-Db-1g8Ql.js +0 -1
- package/build/assets/settings-modal-DfJ3tcJQ.js +0 -1
- package/build/assets/settings-service.api-DJ1r62Zr.js +0 -1
- package/build/assets/settings-switch-CS-dJDmA.js +0 -1
- package/build/assets/shared-conversation-CA5ISEDy.js +0 -1
- package/build/assets/shield-check-D2aCRd16.js +0 -1
- package/build/assets/sidebar-mobile-menu-toggle-C_fb0Jki.js +0 -1
- package/build/assets/sidebar-store-DGqHkVLw.js +0 -1
- package/build/assets/skill-card-pill-row-B27-xyig.js +0 -1
- package/build/assets/skill-scope-B42H-XOc.js +0 -1
- package/build/assets/skills-plugins-tgF8EiXC.js +0 -1
- package/build/assets/skills-settings-BgJ9PaOe.js +0 -1
- package/build/assets/styled-tooltip-C4jf5Fv9.js +0 -1
- package/build/assets/task-list-tab-C5zcaktH.js +0 -1
- package/build/assets/toggle-switch-ChOLXv2n.js +0 -1
- package/build/assets/trash-2-D7K26eDO.js +0 -1
- package/build/assets/trash-D-HYiVYM.js +0 -1
- package/build/assets/triangle-alert-CtdXWHUI.js +0 -1
- package/build/assets/usage-tab-CVDffLPt.js +0 -1
- package/build/assets/use-acp-credential-form-XIQmpX6M.js +0 -1
- package/build/assets/use-activate-agent-profile-BLfmvDiG.js +0 -1
- package/build/assets/use-agent-profiles-Bd9Bvvp1.js +0 -1
- package/build/assets/use-canvas-extensions-Bi693ujJ.js +0 -1
- package/build/assets/use-config-A9QovgXO.js +0 -1
- package/build/assets/use-create-conversation-Dx3l7mFZ.js +0 -1
- package/build/assets/use-create-secret-B9cUFWRG.js +0 -1
- package/build/assets/use-has-permission-B3C8rQmR.js +0 -1
- package/build/assets/use-is-authed-nTBcM7dE.js +0 -1
- package/build/assets/use-llm-configured-BV9nZ1_j.js +0 -1
- package/build/assets/use-llm-profiles-BO-P4Oyo.js +0 -1
- package/build/assets/use-manifest-capabilities-Cw_flwEz.js +0 -1
- package/build/assets/use-onboarding-completion-D8U7k4Qb.js +0 -1
- package/build/assets/use-pinned-home-route-CckOZrmb.js +0 -1
- package/build/assets/use-plugins-marketplace-7i94Zu3Z.js +0 -1
- package/build/assets/use-save-agent-profile-BUjSsDXK.js +0 -1
- package/build/assets/use-settings-DSXLbvBl.js +0 -1
- package/build/assets/use-settings-nav-items-CwRw-CmX.js +0 -16
- package/build/assets/use-tracking-D53y3TH9.js +0 -3
- package/build/assets/useQueries-DlbhlH9I.js +0 -1
- package/build/assets/useQuery-BSTgq1rl.js +0 -1
- package/build/assets/utils-CN5ZfZy1.js +0 -1
- package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~czjee3a3-DqZDXfg2.js +0 -186
- package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~ew9ih1s8-rfV8mQ9m.js +0 -1
- package/build/assets/vendor~root-layout-C9Ju9DQg.js +0 -1
- package/build/assets/vendor~root-layout~conversation-panel~conversation~skills-settings~automations-list~shared-~bovqqk8e-BWir3rJs.js +0 -1
- package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~mcp~automations-list~aut~ibfbmr9f-cDuKr-WD.js +0 -1
- package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~iyia17eu-Chf7vmKB.js +0 -1
- package/build/assets/x-DJdhbdmt.js +0 -1
- package/dist/components/features/conversation-panel/conversation-panel-filter-menu.cjs +0 -2
- package/dist/components/features/conversation-panel/conversation-panel-filter-menu.cjs.map +0 -1
- package/dist/components/features/conversation-panel/conversation-panel-filter-menu.d.ts +0 -35
- package/dist/components/features/conversation-panel/conversation-panel-filter-menu.js +0 -247
- package/dist/components/features/conversation-panel/conversation-panel-filter-menu.js.map +0 -1
- package/dist/hooks/query/use-skills.cjs +0 -2
- package/dist/hooks/query/use-skills.cjs.map +0 -1
- package/dist/hooks/query/use-skills.d.ts +0 -7
- package/dist/hooks/query/use-skills.js +0 -13
- package/dist/hooks/query/use-skills.js.map +0 -1
- package/dist/hooks/use-has-permission.cjs +0 -2
- package/dist/hooks/use-has-permission.cjs.map +0 -1
- package/dist/hooks/use-has-permission.d.ts +0 -1
- package/dist/hooks/use-has-permission.js +0 -8
- package/dist/hooks/use-has-permission.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/eye.cjs +0 -2
- package/dist/node_modules/lucide-react/dist/esm/icons/eye.cjs.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/eye.js +0 -14
- package/dist/node_modules/lucide-react/dist/esm/icons/eye.js.map +0 -1
|
@@ -1,11 +1,16 @@
|
|
|
1
|
-
import { type AutomationFilterMode, type ConversationSortField, type OrganizeMode, type ThreadScope } from "#/components/features/conversation-panel/conversation-panel-list-helpers";
|
|
1
|
+
import { type AutomationFilterMode, type ConversationSortField, type OlderConversationCutoff, type OrganizeMode, type ThreadScope } from "#/components/features/conversation-panel/conversation-panel-list-helpers";
|
|
2
2
|
/**
|
|
3
3
|
* User-toggleable display preferences for the sidebar conversation list
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* so the menu state
|
|
4
|
+
* (the layouts menu and the advanced-options modal behind it). These are
|
|
5
|
+
* intentionally persisted to localStorage (via the same `zustand/persist`
|
|
6
|
+
* pattern used by `home-store` and `workspaces-store`) so the menu state
|
|
7
|
+
* survives full reloads.
|
|
7
8
|
*
|
|
8
|
-
*
|
|
9
|
+
* Every persisted narrowing field must have a control that can see and undo
|
|
10
|
+
* it, or a reload silently hides conversations with nothing on screen to say
|
|
11
|
+
* why — see `ConversationActiveTagFilters`.
|
|
12
|
+
*
|
|
13
|
+
* To add a new preference exposed by those menus:
|
|
9
14
|
* 1. Add a field here with a sensible default in `initialState`.
|
|
10
15
|
* 2. Add matching `setX`/`toggleX` actions below.
|
|
11
16
|
* 3. Read/write through the store in `conversation-panel.tsx`.
|
|
@@ -14,6 +19,11 @@ import { type AutomationFilterMode, type ConversationSortField, type OrganizeMod
|
|
|
14
19
|
*/
|
|
15
20
|
interface ConversationPanelPreferencesState {
|
|
16
21
|
showOlderConversations: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Age threshold used when `showOlderConversations` is false. Conversations
|
|
24
|
+
* last updated before this interval are hidden.
|
|
25
|
+
*/
|
|
26
|
+
olderConversationCutoff: OlderConversationCutoff;
|
|
17
27
|
showArchivedConversations: boolean;
|
|
18
28
|
showRepoBranchMetadata: boolean;
|
|
19
29
|
showLlmProfiles: boolean;
|
|
@@ -24,11 +34,16 @@ interface ConversationPanelPreferencesState {
|
|
|
24
34
|
threadScope: ThreadScope;
|
|
25
35
|
automationFilterMode: AutomationFilterMode;
|
|
26
36
|
selectedAutomationNames: string[];
|
|
37
|
+
selectedTagFacets: string[];
|
|
27
38
|
groupFolderOrder: string[];
|
|
28
39
|
}
|
|
40
|
+
/** The complete preference bundle controlled by conversation layout presets. */
|
|
41
|
+
export type LayoutSettingsSlice = Pick<ConversationPanelPreferencesState, "organizeMode" | "conversationSort" | "threadScope" | "showOlderConversations" | "showRepoBranchMetadata" | "showLlmProfiles" | "showTagsMetadata" | "showHoverMetadata">;
|
|
42
|
+
export declare const DEFAULT_LAYOUT_SETTINGS: LayoutSettingsSlice;
|
|
29
43
|
interface ConversationPanelPreferencesActions {
|
|
30
44
|
setShowOlderConversations: (value: boolean) => void;
|
|
31
45
|
toggleShowOlderConversations: () => void;
|
|
46
|
+
setOlderConversationCutoff: (value: OlderConversationCutoff) => void;
|
|
32
47
|
setShowArchivedConversations: (value: boolean) => void;
|
|
33
48
|
toggleShowArchivedConversations: () => void;
|
|
34
49
|
setShowRepoBranchMetadata: (value: boolean) => void;
|
|
@@ -44,6 +59,18 @@ interface ConversationPanelPreferencesActions {
|
|
|
44
59
|
setThreadScope: (value: ThreadScope) => void;
|
|
45
60
|
setAutomationFilterMode: (value: AutomationFilterMode) => void;
|
|
46
61
|
toggleAutomationName: (name: string) => void;
|
|
62
|
+
/**
|
|
63
|
+
* Clears both facet selections (tags and automation names) — the two
|
|
64
|
+
* narrowings the active-filter strip renders as chips.
|
|
65
|
+
*
|
|
66
|
+
* Deliberately leaves `automationFilterMode` alone: the strip shows no chip
|
|
67
|
+
* for the mode, and it must not silently switch a surface it doesn't show.
|
|
68
|
+
* The mode keeps its own rows in the advanced-options modal.
|
|
69
|
+
*/
|
|
70
|
+
clearFilterSelections: () => void;
|
|
71
|
+
toggleTagFacet: (facet: string) => void;
|
|
72
|
+
/** Applies a layout preset's partial bundle in one set(). */
|
|
73
|
+
applyLayoutSettings: (settings: Partial<LayoutSettingsSlice>) => void;
|
|
47
74
|
setGroupFolderOrder: (order: readonly string[]) => void;
|
|
48
75
|
}
|
|
49
76
|
type ConversationPanelPreferencesStore = ConversationPanelPreferencesState & ConversationPanelPreferencesActions;
|
|
@@ -1,23 +1,29 @@
|
|
|
1
1
|
import { create as e } from "../node_modules/zustand/esm/react.js";
|
|
2
2
|
import { createJSONStorage as t, persist as n } from "../node_modules/zustand/esm/middleware.js";
|
|
3
|
+
import { isOlderConversationCutoff as r } from "../components/features/conversation-panel/conversation-panel-list-helpers.js";
|
|
3
4
|
//#region src/stores/conversation-panel-preferences-store.ts
|
|
4
|
-
var
|
|
5
|
-
showOlderConversations: !0,
|
|
6
|
-
showArchivedConversations: !1,
|
|
7
|
-
showRepoBranchMetadata: !1,
|
|
8
|
-
showLlmProfiles: !1,
|
|
9
|
-
showTagsMetadata: !1,
|
|
10
|
-
showHoverMetadata: !0,
|
|
5
|
+
var i = {
|
|
11
6
|
organizeMode: "chronological",
|
|
12
7
|
conversationSort: "updated",
|
|
13
8
|
threadScope: "all",
|
|
9
|
+
showOlderConversations: !0,
|
|
10
|
+
showRepoBranchMetadata: !1,
|
|
11
|
+
showLlmProfiles: !1,
|
|
12
|
+
showTagsMetadata: !0,
|
|
13
|
+
showHoverMetadata: !0
|
|
14
|
+
}, a = {
|
|
15
|
+
...i,
|
|
16
|
+
olderConversationCutoff: "7d",
|
|
17
|
+
showArchivedConversations: !1,
|
|
14
18
|
automationFilterMode: "all",
|
|
15
19
|
selectedAutomationNames: [],
|
|
20
|
+
selectedTagFacets: [],
|
|
16
21
|
groupFolderOrder: []
|
|
17
|
-
},
|
|
18
|
-
...
|
|
22
|
+
}, o = e()(n((e) => ({
|
|
23
|
+
...a,
|
|
19
24
|
setShowOlderConversations: (t) => e(() => ({ showOlderConversations: t })),
|
|
20
25
|
toggleShowOlderConversations: () => e((e) => ({ showOlderConversations: !e.showOlderConversations })),
|
|
26
|
+
setOlderConversationCutoff: (t) => e(() => ({ olderConversationCutoff: r(t) ? t : "7d" })),
|
|
21
27
|
setShowArchivedConversations: (t) => e(() => ({ showArchivedConversations: t })),
|
|
22
28
|
toggleShowArchivedConversations: () => e((e) => ({ showArchivedConversations: !e.showArchivedConversations })),
|
|
23
29
|
setShowRepoBranchMetadata: (t) => e(() => ({ showRepoBranchMetadata: t })),
|
|
@@ -31,14 +37,24 @@ var r = {
|
|
|
31
37
|
setOrganizeMode: (t) => e(() => ({ organizeMode: t })),
|
|
32
38
|
setConversationSort: (t) => e(() => ({ conversationSort: t })),
|
|
33
39
|
setThreadScope: (t) => e(() => ({ threadScope: t })),
|
|
34
|
-
setAutomationFilterMode: (t) => e(() => ({
|
|
40
|
+
setAutomationFilterMode: (t) => e((e) => ({
|
|
41
|
+
automationFilterMode: t,
|
|
42
|
+
selectedAutomationNames: t === "only-automations" ? e.selectedAutomationNames : []
|
|
43
|
+
})),
|
|
35
44
|
toggleAutomationName: (t) => e((e) => ({ selectedAutomationNames: e.selectedAutomationNames.includes(t) ? e.selectedAutomationNames.filter((e) => e !== t) : [...e.selectedAutomationNames, t] })),
|
|
36
|
-
|
|
45
|
+
clearFilterSelections: () => e(() => ({
|
|
46
|
+
selectedTagFacets: [],
|
|
47
|
+
selectedAutomationNames: []
|
|
48
|
+
})),
|
|
49
|
+
toggleTagFacet: (t) => e((e) => ({ selectedTagFacets: e.selectedTagFacets.includes(t) ? e.selectedTagFacets.filter((e) => e !== t) : [...e.selectedTagFacets, t] })),
|
|
50
|
+
setGroupFolderOrder: (t) => e(() => ({ groupFolderOrder: [...t] })),
|
|
51
|
+
applyLayoutSettings: (t) => e(() => ({ ...t }))
|
|
37
52
|
}), {
|
|
38
53
|
name: "conversation-panel-preferences",
|
|
39
54
|
storage: t(() => localStorage),
|
|
40
55
|
partialize: (e) => ({
|
|
41
56
|
showOlderConversations: e.showOlderConversations,
|
|
57
|
+
olderConversationCutoff: r(e.olderConversationCutoff) ? e.olderConversationCutoff : "7d",
|
|
42
58
|
showArchivedConversations: e.showArchivedConversations,
|
|
43
59
|
showRepoBranchMetadata: e.showRepoBranchMetadata,
|
|
44
60
|
showLlmProfiles: e.showLlmProfiles,
|
|
@@ -49,10 +65,11 @@ var r = {
|
|
|
49
65
|
threadScope: e.threadScope,
|
|
50
66
|
automationFilterMode: e.automationFilterMode,
|
|
51
67
|
selectedAutomationNames: e.selectedAutomationNames,
|
|
68
|
+
selectedTagFacets: e.selectedTagFacets,
|
|
52
69
|
groupFolderOrder: e.groupFolderOrder
|
|
53
70
|
})
|
|
54
71
|
}));
|
|
55
72
|
//#endregion
|
|
56
|
-
export { i as useConversationPanelPreferencesStore };
|
|
73
|
+
export { i as DEFAULT_LAYOUT_SETTINGS, o as useConversationPanelPreferencesStore };
|
|
57
74
|
|
|
58
75
|
//# sourceMappingURL=conversation-panel-preferences-store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-panel-preferences-store.js","names":[],"sources":["../../src/stores/conversation-panel-preferences-store.ts"],"sourcesContent":["import { create } from \"zustand\";\nimport { persist, createJSONStorage } from \"zustand/middleware\";\nimport {\n type AutomationFilterMode,\n type ConversationSortField,\n type OrganizeMode,\n type ThreadScope,\n} from \"#/components/features/conversation-panel/conversation-panel-list-helpers\";\n\n/**\n * User-toggleable display preferences for the sidebar conversation list\n * filter menu. These are intentionally persisted to localStorage (via the\n * same `zustand/persist` pattern used by `home-store` and `workspaces-store`)\n * so the menu state survives full reloads.\n *\n * To add a new preference exposed by the filter menu:\n * 1. Add a field here with a sensible default in `initialState`.\n * 2. Add matching `setX`/`toggleX` actions below.\n * 3. Read/write through the store in `conversation-panel.tsx`.\n * No additional plumbing (storage keys, sanitization, etc.) is required —\n * `persist` handles migration of unknown fields gracefully.\n */\ninterface ConversationPanelPreferencesState {\n showOlderConversations: boolean;\n showArchivedConversations: boolean;\n showRepoBranchMetadata: boolean;\n showLlmProfiles: boolean;\n showTagsMetadata: boolean;\n showHoverMetadata: boolean;\n organizeMode: OrganizeMode;\n conversationSort: ConversationSortField;\n threadScope: ThreadScope;\n automationFilterMode: AutomationFilterMode;\n selectedAutomationNames: string[];\n groupFolderOrder: string[];\n}\n\ninterface ConversationPanelPreferencesActions {\n setShowOlderConversations: (value: boolean) => void;\n toggleShowOlderConversations: () => void;\n setShowArchivedConversations: (value: boolean) => void;\n toggleShowArchivedConversations: () => void;\n setShowRepoBranchMetadata: (value: boolean) => void;\n toggleShowRepoBranchMetadata: () => void;\n setShowLlmProfiles: (value: boolean) => void;\n toggleShowLlmProfiles: () => void;\n setShowTagsMetadata: (value: boolean) => void;\n toggleShowTagsMetadata: () => void;\n setShowHoverMetadata: (value: boolean) => void;\n toggleShowHoverMetadata: () => void;\n setOrganizeMode: (value: OrganizeMode) => void;\n setConversationSort: (value: ConversationSortField) => void;\n setThreadScope: (value: ThreadScope) => void;\n setAutomationFilterMode: (value: AutomationFilterMode) => void;\n toggleAutomationName: (name: string) => void;\n setGroupFolderOrder: (order: readonly string[]) => void;\n}\n\ntype ConversationPanelPreferencesStore = ConversationPanelPreferencesState &\n ConversationPanelPreferencesActions;\n\nconst initialState: ConversationPanelPreferencesState = {\n showOlderConversations: true,\n showArchivedConversations: false,\n showRepoBranchMetadata: false,\n showLlmProfiles: false,\n showTagsMetadata: false,\n showHoverMetadata: true,\n organizeMode: \"chronological\",\n conversationSort: \"updated\",\n threadScope: \"all\",\n automationFilterMode: \"all\",\n selectedAutomationNames: [],\n groupFolderOrder: [],\n};\n\nexport const useConversationPanelPreferencesStore =\n create<ConversationPanelPreferencesStore>()(\n persist(\n (set) => ({\n ...initialState,\n\n setShowOlderConversations: (value) =>\n set(() => ({ showOlderConversations: value })),\n toggleShowOlderConversations: () =>\n set((state) => ({\n showOlderConversations: !state.showOlderConversations,\n })),\n\n setShowArchivedConversations: (value) =>\n set(() => ({ showArchivedConversations: value })),\n toggleShowArchivedConversations: () =>\n set((state) => ({\n showArchivedConversations: !state.showArchivedConversations,\n })),\n\n setShowRepoBranchMetadata: (value) =>\n set(() => ({ showRepoBranchMetadata: value })),\n toggleShowRepoBranchMetadata: () =>\n set((state) => ({\n showRepoBranchMetadata: !state.showRepoBranchMetadata,\n })),\n\n setShowLlmProfiles: (value) => set(() => ({ showLlmProfiles: value })),\n toggleShowLlmProfiles: () =>\n set((state) => ({\n showLlmProfiles: !state.showLlmProfiles,\n })),\n\n setShowTagsMetadata: (value) =>\n set(() => ({ showTagsMetadata: value })),\n toggleShowTagsMetadata: () =>\n set((state) => ({\n showTagsMetadata: !state.showTagsMetadata,\n })),\n\n setShowHoverMetadata: (value) =>\n set(() => ({ showHoverMetadata: value })),\n toggleShowHoverMetadata: () =>\n set((state) => ({\n showHoverMetadata: !state.showHoverMetadata,\n })),\n\n setOrganizeMode: (value) => set(() => ({ organizeMode: value })),\n setConversationSort: (value) =>\n set(() => ({ conversationSort: value })),\n setThreadScope: (value) => set(() => ({ threadScope: value })),\n setAutomationFilterMode: (value) =>\n set(() => ({ automationFilterMode: value })),\n toggleAutomationName: (name) =>\n set((state) => ({\n selectedAutomationNames: state.selectedAutomationNames.includes(\n name,\n )\n ? state.selectedAutomationNames.filter(\n (existing) => existing !== name,\n )\n : [...state.selectedAutomationNames, name],\n })),\n setGroupFolderOrder: (order) =>\n set(() => ({ groupFolderOrder: [...order] })),\n }),\n {\n name: \"conversation-panel-preferences\",\n storage: createJSONStorage(() => localStorage),\n // Only persist the data fields — actions are recreated on each load.\n partialize: (state): ConversationPanelPreferencesState => ({\n showOlderConversations: state.showOlderConversations,\n showArchivedConversations: state.showArchivedConversations,\n showRepoBranchMetadata: state.showRepoBranchMetadata,\n showLlmProfiles: state.showLlmProfiles,\n showTagsMetadata: state.showTagsMetadata,\n showHoverMetadata: state.showHoverMetadata,\n organizeMode: state.organizeMode,\n conversationSort: state.conversationSort,\n threadScope: state.threadScope,\n automationFilterMode: state.automationFilterMode,\n selectedAutomationNames: state.selectedAutomationNames,\n groupFolderOrder: state.groupFolderOrder,\n }),\n },\n ),\n );\n"],"mappings":";;;AA6DA,IAAM,IAAkD;CACtD,wBAAwB;CACxB,2BAA2B;CAC3B,wBAAwB;CACxB,iBAAiB;CACjB,kBAAkB;CAClB,mBAAmB;CACnB,cAAc;CACd,kBAAkB;CAClB,aAAa;CACb,sBAAsB;CACtB,yBAAyB,CAAC;CAC1B,kBAAkB,CAAC;AACrB,GAEa,IACX,EAA0C,EACxC,GACG,OAAS;CACR,GAAG;CAEH,4BAA4B,MAC1B,SAAW,EAAE,wBAAwB,EAAM,EAAE;CAC/C,oCACE,GAAK,OAAW,EACd,wBAAwB,CAAC,EAAM,uBACjC,EAAE;CAEJ,+BAA+B,MAC7B,SAAW,EAAE,2BAA2B,EAAM,EAAE;CAClD,uCACE,GAAK,OAAW,EACd,2BAA2B,CAAC,EAAM,0BACpC,EAAE;CAEJ,4BAA4B,MAC1B,SAAW,EAAE,wBAAwB,EAAM,EAAE;CAC/C,oCACE,GAAK,OAAW,EACd,wBAAwB,CAAC,EAAM,uBACjC,EAAE;CAEJ,qBAAqB,MAAU,SAAW,EAAE,iBAAiB,EAAM,EAAE;CACrE,6BACE,GAAK,OAAW,EACd,iBAAiB,CAAC,EAAM,gBAC1B,EAAE;CAEJ,sBAAsB,MACpB,SAAW,EAAE,kBAAkB,EAAM,EAAE;CACzC,8BACE,GAAK,OAAW,EACd,kBAAkB,CAAC,EAAM,iBAC3B,EAAE;CAEJ,uBAAuB,MACrB,SAAW,EAAE,mBAAmB,EAAM,EAAE;CAC1C,+BACE,GAAK,OAAW,EACd,mBAAmB,CAAC,EAAM,kBAC5B,EAAE;CAEJ,kBAAkB,MAAU,SAAW,EAAE,cAAc,EAAM,EAAE;CAC/D,sBAAsB,MACpB,SAAW,EAAE,kBAAkB,EAAM,EAAE;CACzC,iBAAiB,MAAU,SAAW,EAAE,aAAa,EAAM,EAAE;CAC7D,0BAA0B,MACxB,SAAW,EAAE,sBAAsB,EAAM,EAAE;CAC7C,uBAAuB,MACrB,GAAK,OAAW,EACd,yBAAyB,EAAM,wBAAwB,SACrD,CACF,IACI,EAAM,wBAAwB,QAC3B,MAAa,MAAa,CAC7B,IACA,CAAC,GAAG,EAAM,yBAAyB,CAAI,EAC7C,EAAE;CACJ,sBAAsB,MACpB,SAAW,EAAE,kBAAkB,CAAC,GAAG,CAAK,EAAE,EAAE;AAChD,IACA;CACE,MAAM;CACN,SAAS,QAAwB,YAAY;CAE7C,aAAa,OAA8C;EACzD,wBAAwB,EAAM;EAC9B,2BAA2B,EAAM;EACjC,wBAAwB,EAAM;EAC9B,iBAAiB,EAAM;EACvB,kBAAkB,EAAM;EACxB,mBAAmB,EAAM;EACzB,cAAc,EAAM;EACpB,kBAAkB,EAAM;EACxB,aAAa,EAAM;EACnB,sBAAsB,EAAM;EAC5B,yBAAyB,EAAM;EAC/B,kBAAkB,EAAM;CAC1B;AACF,CACF,CACF"}
|
|
1
|
+
{"version":3,"file":"conversation-panel-preferences-store.js","names":[],"sources":["../../src/stores/conversation-panel-preferences-store.ts"],"sourcesContent":["import { create } from \"zustand\";\nimport { persist, createJSONStorage } from \"zustand/middleware\";\nimport {\n DEFAULT_OLDER_CONVERSATION_CUTOFF,\n isOlderConversationCutoff,\n type AutomationFilterMode,\n type ConversationSortField,\n type OlderConversationCutoff,\n type OrganizeMode,\n type ThreadScope,\n} from \"#/components/features/conversation-panel/conversation-panel-list-helpers\";\n\n/**\n * User-toggleable display preferences for the sidebar conversation list\n * (the layouts menu and the advanced-options modal behind it). These are\n * intentionally persisted to localStorage (via the same `zustand/persist`\n * pattern used by `home-store` and `workspaces-store`) so the menu state\n * survives full reloads.\n *\n * Every persisted narrowing field must have a control that can see and undo\n * it, or a reload silently hides conversations with nothing on screen to say\n * why — see `ConversationActiveTagFilters`.\n *\n * To add a new preference exposed by those menus:\n * 1. Add a field here with a sensible default in `initialState`.\n * 2. Add matching `setX`/`toggleX` actions below.\n * 3. Read/write through the store in `conversation-panel.tsx`.\n * No additional plumbing (storage keys, sanitization, etc.) is required —\n * `persist` handles migration of unknown fields gracefully.\n */\ninterface ConversationPanelPreferencesState {\n showOlderConversations: boolean;\n /**\n * Age threshold used when `showOlderConversations` is false. Conversations\n * last updated before this interval are hidden.\n */\n olderConversationCutoff: OlderConversationCutoff;\n showArchivedConversations: boolean;\n showRepoBranchMetadata: boolean;\n showLlmProfiles: boolean;\n showTagsMetadata: boolean;\n showHoverMetadata: boolean;\n organizeMode: OrganizeMode;\n conversationSort: ConversationSortField;\n threadScope: ThreadScope;\n automationFilterMode: AutomationFilterMode;\n selectedAutomationNames: string[];\n selectedTagFacets: string[];\n groupFolderOrder: string[];\n}\n\n/** The complete preference bundle controlled by conversation layout presets. */\nexport type LayoutSettingsSlice = Pick<\n ConversationPanelPreferencesState,\n | \"organizeMode\"\n | \"conversationSort\"\n | \"threadScope\"\n | \"showOlderConversations\"\n | \"showRepoBranchMetadata\"\n | \"showLlmProfiles\"\n | \"showTagsMetadata\"\n | \"showHoverMetadata\"\n>;\n\nexport const DEFAULT_LAYOUT_SETTINGS: LayoutSettingsSlice = {\n organizeMode: \"chronological\",\n conversationSort: \"updated\",\n threadScope: \"all\",\n showOlderConversations: true,\n showRepoBranchMetadata: false,\n showLlmProfiles: false,\n showTagsMetadata: true,\n showHoverMetadata: true,\n};\n\ninterface ConversationPanelPreferencesActions {\n setShowOlderConversations: (value: boolean) => void;\n toggleShowOlderConversations: () => void;\n setOlderConversationCutoff: (value: OlderConversationCutoff) => void;\n setShowArchivedConversations: (value: boolean) => void;\n toggleShowArchivedConversations: () => void;\n setShowRepoBranchMetadata: (value: boolean) => void;\n toggleShowRepoBranchMetadata: () => void;\n setShowLlmProfiles: (value: boolean) => void;\n toggleShowLlmProfiles: () => void;\n setShowTagsMetadata: (value: boolean) => void;\n toggleShowTagsMetadata: () => void;\n setShowHoverMetadata: (value: boolean) => void;\n toggleShowHoverMetadata: () => void;\n setOrganizeMode: (value: OrganizeMode) => void;\n setConversationSort: (value: ConversationSortField) => void;\n setThreadScope: (value: ThreadScope) => void;\n setAutomationFilterMode: (value: AutomationFilterMode) => void;\n toggleAutomationName: (name: string) => void;\n /**\n * Clears both facet selections (tags and automation names) — the two\n * narrowings the active-filter strip renders as chips.\n *\n * Deliberately leaves `automationFilterMode` alone: the strip shows no chip\n * for the mode, and it must not silently switch a surface it doesn't show.\n * The mode keeps its own rows in the advanced-options modal.\n */\n clearFilterSelections: () => void;\n toggleTagFacet: (facet: string) => void;\n /** Applies a layout preset's partial bundle in one set(). */\n applyLayoutSettings: (settings: Partial<LayoutSettingsSlice>) => void;\n setGroupFolderOrder: (order: readonly string[]) => void;\n}\n\ntype ConversationPanelPreferencesStore = ConversationPanelPreferencesState &\n ConversationPanelPreferencesActions;\n\nconst initialState: ConversationPanelPreferencesState = {\n ...DEFAULT_LAYOUT_SETTINGS,\n olderConversationCutoff: DEFAULT_OLDER_CONVERSATION_CUTOFF,\n showArchivedConversations: false,\n automationFilterMode: \"all\",\n selectedAutomationNames: [],\n selectedTagFacets: [],\n groupFolderOrder: [],\n};\n\nexport const useConversationPanelPreferencesStore =\n create<ConversationPanelPreferencesStore>()(\n persist(\n (set) => ({\n ...initialState,\n\n setShowOlderConversations: (value) =>\n set(() => ({ showOlderConversations: value })),\n toggleShowOlderConversations: () =>\n set((state) => ({\n showOlderConversations: !state.showOlderConversations,\n })),\n setOlderConversationCutoff: (value) =>\n set(() => ({\n olderConversationCutoff: isOlderConversationCutoff(value)\n ? value\n : DEFAULT_OLDER_CONVERSATION_CUTOFF,\n })),\n\n setShowArchivedConversations: (value) =>\n set(() => ({ showArchivedConversations: value })),\n toggleShowArchivedConversations: () =>\n set((state) => ({\n showArchivedConversations: !state.showArchivedConversations,\n })),\n\n setShowRepoBranchMetadata: (value) =>\n set(() => ({ showRepoBranchMetadata: value })),\n toggleShowRepoBranchMetadata: () =>\n set((state) => ({\n showRepoBranchMetadata: !state.showRepoBranchMetadata,\n })),\n\n setShowLlmProfiles: (value) => set(() => ({ showLlmProfiles: value })),\n toggleShowLlmProfiles: () =>\n set((state) => ({\n showLlmProfiles: !state.showLlmProfiles,\n })),\n\n setShowTagsMetadata: (value) =>\n set(() => ({ showTagsMetadata: value })),\n toggleShowTagsMetadata: () =>\n set((state) => ({\n showTagsMetadata: !state.showTagsMetadata,\n })),\n\n setShowHoverMetadata: (value) =>\n set(() => ({ showHoverMetadata: value })),\n toggleShowHoverMetadata: () =>\n set((state) => ({\n showHoverMetadata: !state.showHoverMetadata,\n })),\n\n setOrganizeMode: (value) => set(() => ({ organizeMode: value })),\n setConversationSort: (value) =>\n set(() => ({ conversationSort: value })),\n setThreadScope: (value) => set(() => ({ threadScope: value })),\n setAutomationFilterMode: (value) =>\n set((state) => ({\n automationFilterMode: value,\n // Name selections only make sense in only-automations mode;\n // leaving the mode clears them (self-healing — a stale selection\n // must never silently narrow an unfiltered-looking list).\n selectedAutomationNames:\n value === \"only-automations\" ? state.selectedAutomationNames : [],\n })),\n toggleAutomationName: (name) =>\n set((state) => ({\n selectedAutomationNames: state.selectedAutomationNames.includes(\n name,\n )\n ? state.selectedAutomationNames.filter(\n (existing) => existing !== name,\n )\n : [...state.selectedAutomationNames, name],\n })),\n clearFilterSelections: () =>\n set(() => ({\n selectedTagFacets: [],\n selectedAutomationNames: [],\n })),\n toggleTagFacet: (facet) =>\n set((state) => ({\n selectedTagFacets: state.selectedTagFacets.includes(facet)\n ? state.selectedTagFacets.filter((existing) => existing !== facet)\n : [...state.selectedTagFacets, facet],\n })),\n setGroupFolderOrder: (order) =>\n set(() => ({ groupFolderOrder: [...order] })),\n\n applyLayoutSettings: (settings) => set(() => ({ ...settings })),\n }),\n {\n name: \"conversation-panel-preferences\",\n storage: createJSONStorage(() => localStorage),\n // Only persist the data fields — actions are recreated on each load.\n partialize: (state): ConversationPanelPreferencesState => ({\n showOlderConversations: state.showOlderConversations,\n olderConversationCutoff: isOlderConversationCutoff(\n state.olderConversationCutoff,\n )\n ? state.olderConversationCutoff\n : DEFAULT_OLDER_CONVERSATION_CUTOFF,\n showArchivedConversations: state.showArchivedConversations,\n showRepoBranchMetadata: state.showRepoBranchMetadata,\n showLlmProfiles: state.showLlmProfiles,\n showTagsMetadata: state.showTagsMetadata,\n showHoverMetadata: state.showHoverMetadata,\n organizeMode: state.organizeMode,\n conversationSort: state.conversationSort,\n threadScope: state.threadScope,\n automationFilterMode: state.automationFilterMode,\n selectedAutomationNames: state.selectedAutomationNames,\n selectedTagFacets: state.selectedTagFacets,\n groupFolderOrder: state.groupFolderOrder,\n }),\n },\n ),\n );\n"],"mappings":";;;;AAgEA,IAAa,IAA+C;CAC1D,cAAc;CACd,kBAAkB;CAClB,aAAa;CACb,wBAAwB;CACxB,wBAAwB;CACxB,iBAAiB;CACjB,kBAAkB;CAClB,mBAAmB;AACrB,GAuCM,IAAkD;CACtD,GAAG;CACH,yBAAA;CACA,2BAA2B;CAC3B,sBAAsB;CACtB,yBAAyB,CAAC;CAC1B,mBAAmB,CAAC;CACpB,kBAAkB,CAAC;AACrB,GAEa,IACX,EAA0C,EACxC,GACG,OAAS;CACR,GAAG;CAEH,4BAA4B,MAC1B,SAAW,EAAE,wBAAwB,EAAM,EAAE;CAC/C,oCACE,GAAK,OAAW,EACd,wBAAwB,CAAC,EAAM,uBACjC,EAAE;CACJ,6BAA6B,MAC3B,SAAW,EACT,yBAAyB,EAA0B,CAAK,IACpD,IAAA,KAEN,EAAE;CAEJ,+BAA+B,MAC7B,SAAW,EAAE,2BAA2B,EAAM,EAAE;CAClD,uCACE,GAAK,OAAW,EACd,2BAA2B,CAAC,EAAM,0BACpC,EAAE;CAEJ,4BAA4B,MAC1B,SAAW,EAAE,wBAAwB,EAAM,EAAE;CAC/C,oCACE,GAAK,OAAW,EACd,wBAAwB,CAAC,EAAM,uBACjC,EAAE;CAEJ,qBAAqB,MAAU,SAAW,EAAE,iBAAiB,EAAM,EAAE;CACrE,6BACE,GAAK,OAAW,EACd,iBAAiB,CAAC,EAAM,gBAC1B,EAAE;CAEJ,sBAAsB,MACpB,SAAW,EAAE,kBAAkB,EAAM,EAAE;CACzC,8BACE,GAAK,OAAW,EACd,kBAAkB,CAAC,EAAM,iBAC3B,EAAE;CAEJ,uBAAuB,MACrB,SAAW,EAAE,mBAAmB,EAAM,EAAE;CAC1C,+BACE,GAAK,OAAW,EACd,mBAAmB,CAAC,EAAM,kBAC5B,EAAE;CAEJ,kBAAkB,MAAU,SAAW,EAAE,cAAc,EAAM,EAAE;CAC/D,sBAAsB,MACpB,SAAW,EAAE,kBAAkB,EAAM,EAAE;CACzC,iBAAiB,MAAU,SAAW,EAAE,aAAa,EAAM,EAAE;CAC7D,0BAA0B,MACxB,GAAK,OAAW;EACd,sBAAsB;EAItB,yBACE,MAAU,qBAAqB,EAAM,0BAA0B,CAAC;CACpE,EAAE;CACJ,uBAAuB,MACrB,GAAK,OAAW,EACd,yBAAyB,EAAM,wBAAwB,SACrD,CACF,IACI,EAAM,wBAAwB,QAC3B,MAAa,MAAa,CAC7B,IACA,CAAC,GAAG,EAAM,yBAAyB,CAAI,EAC7C,EAAE;CACJ,6BACE,SAAW;EACT,mBAAmB,CAAC;EACpB,yBAAyB,CAAC;CAC5B,EAAE;CACJ,iBAAiB,MACf,GAAK,OAAW,EACd,mBAAmB,EAAM,kBAAkB,SAAS,CAAK,IACrD,EAAM,kBAAkB,QAAQ,MAAa,MAAa,CAAK,IAC/D,CAAC,GAAG,EAAM,mBAAmB,CAAK,EACxC,EAAE;CACJ,sBAAsB,MACpB,SAAW,EAAE,kBAAkB,CAAC,GAAG,CAAK,EAAE,EAAE;CAE9C,sBAAsB,MAAa,SAAW,EAAE,GAAG,EAAS,EAAE;AAChE,IACA;CACE,MAAM;CACN,SAAS,QAAwB,YAAY;CAE7C,aAAa,OAA8C;EACzD,wBAAwB,EAAM;EAC9B,yBAAyB,EACvB,EAAM,uBACR,IACI,EAAM,0BAAA;EAEV,2BAA2B,EAAM;EACjC,wBAAwB,EAAM;EAC9B,iBAAiB,EAAM;EACvB,kBAAkB,EAAM;EACxB,mBAAmB,EAAM;EACzB,cAAc,EAAM;EACpB,kBAAkB,EAAM;EACxB,aAAa,EAAM;EACnB,sBAAsB,EAAM;EAC5B,yBAAyB,EAAM;EAC/B,mBAAmB,EAAM;EACzB,kBAAkB,EAAM;CAC1B;AACF,CACF,CACF"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require("../_virtual/_rolldown/runtime.cjs");var e=require("../node_modules/zustand/esm/react.cjs").create(e=>({
|
|
1
|
+
require("../_virtual/_rolldown/runtime.cjs");var e=require("../node_modules/zustand/esm/react.cjs").create(e=>({executionStatusByConversation:{},setExecutionStatus:(t,n)=>e(e=>({executionStatusByConversation:{...e.executionStatusByConversation,[t]:n}})),reset:()=>e({executionStatusByConversation:{}})}));exports.useConversationStateStore=e;
|
|
2
2
|
//# sourceMappingURL=conversation-state-store.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-state-store.cjs","names":[],"sources":["../../src/stores/conversation-state-store.ts"],"sourcesContent":["import { create } from \"zustand\";\nimport { ExecutionStatus } from \"#/types/agent-server/core/base/common\";\n\ninterface ConversationStateStore {\n
|
|
1
|
+
{"version":3,"file":"conversation-state-store.cjs","names":[],"sources":["../../src/stores/conversation-state-store.ts"],"sourcesContent":["import { create } from \"zustand\";\nimport { ExecutionStatus } from \"#/types/agent-server/core/base/common\";\n\ninterface ConversationStateStore {\n /**\n * Latest execution status per conversation, fed by the main and planning\n * WebSocket handlers. Scoped by conversation id so the planning helper\n * conversation's own run/idle transitions can never overwrite the main\n * conversation's status (or vice versa) — see conversation-websocket-context.tsx.\n */\n executionStatusByConversation: Record<string, ExecutionStatus>;\n\n /**\n * Set the agent status for a specific conversation.\n */\n setExecutionStatus: (\n conversationId: string,\n execution_status: ExecutionStatus,\n ) => void;\n\n /**\n * Reset the store to initial state\n */\n reset: () => void;\n}\n\nexport const useConversationStateStore = create<ConversationStateStore>(\n (set) => ({\n executionStatusByConversation: {},\n\n setExecutionStatus: (conversationId, execution_status) =>\n set((state) => ({\n executionStatusByConversation: {\n ...state.executionStatusByConversation,\n [conversationId]: execution_status,\n },\n })),\n\n reset: () => set({ executionStatusByConversation: {} }),\n }),\n);\n"],"mappings":"6CA0BA,IAAa,iDAA4B,EAAA,OACtC,IAAS,CACR,8BAA+B,CAAC,EAEhC,oBAAqB,EAAgB,IACnC,EAAK,IAAW,CACd,8BAA+B,CAC7B,GAAG,EAAM,+BACR,GAAiB,CACpB,CACF,EAAE,EAEJ,UAAa,EAAI,CAAE,8BAA+B,CAAC,CAAE,CAAC,CACxD,EACF"}
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
import { ExecutionStatus } from "#/types/agent-server/core/base/common";
|
|
2
2
|
interface ConversationStateStore {
|
|
3
|
-
execution_status: ExecutionStatus | null;
|
|
4
3
|
/**
|
|
5
|
-
*
|
|
4
|
+
* Latest execution status per conversation, fed by the main and planning
|
|
5
|
+
* WebSocket handlers. Scoped by conversation id so the planning helper
|
|
6
|
+
* conversation's own run/idle transitions can never overwrite the main
|
|
7
|
+
* conversation's status (or vice versa) — see conversation-websocket-context.tsx.
|
|
6
8
|
*/
|
|
7
|
-
|
|
9
|
+
executionStatusByConversation: Record<string, ExecutionStatus>;
|
|
10
|
+
/**
|
|
11
|
+
* Set the agent status for a specific conversation.
|
|
12
|
+
*/
|
|
13
|
+
setExecutionStatus: (conversationId: string, execution_status: ExecutionStatus) => void;
|
|
8
14
|
/**
|
|
9
15
|
* Reset the store to initial state
|
|
10
16
|
*/
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { create as e } from "../node_modules/zustand/esm/react.js";
|
|
2
2
|
//#region src/stores/conversation-state-store.ts
|
|
3
3
|
var t = e((e) => ({
|
|
4
|
-
|
|
5
|
-
setExecutionStatus: (t) => e({
|
|
6
|
-
|
|
4
|
+
executionStatusByConversation: {},
|
|
5
|
+
setExecutionStatus: (t, n) => e((e) => ({ executionStatusByConversation: {
|
|
6
|
+
...e.executionStatusByConversation,
|
|
7
|
+
[t]: n
|
|
8
|
+
} })),
|
|
9
|
+
reset: () => e({ executionStatusByConversation: {} })
|
|
7
10
|
}));
|
|
8
11
|
//#endregion
|
|
9
12
|
export { t as useConversationStateStore };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-state-store.js","names":[],"sources":["../../src/stores/conversation-state-store.ts"],"sourcesContent":["import { create } from \"zustand\";\nimport { ExecutionStatus } from \"#/types/agent-server/core/base/common\";\n\ninterface ConversationStateStore {\n
|
|
1
|
+
{"version":3,"file":"conversation-state-store.js","names":[],"sources":["../../src/stores/conversation-state-store.ts"],"sourcesContent":["import { create } from \"zustand\";\nimport { ExecutionStatus } from \"#/types/agent-server/core/base/common\";\n\ninterface ConversationStateStore {\n /**\n * Latest execution status per conversation, fed by the main and planning\n * WebSocket handlers. Scoped by conversation id so the planning helper\n * conversation's own run/idle transitions can never overwrite the main\n * conversation's status (or vice versa) — see conversation-websocket-context.tsx.\n */\n executionStatusByConversation: Record<string, ExecutionStatus>;\n\n /**\n * Set the agent status for a specific conversation.\n */\n setExecutionStatus: (\n conversationId: string,\n execution_status: ExecutionStatus,\n ) => void;\n\n /**\n * Reset the store to initial state\n */\n reset: () => void;\n}\n\nexport const useConversationStateStore = create<ConversationStateStore>(\n (set) => ({\n executionStatusByConversation: {},\n\n setExecutionStatus: (conversationId, execution_status) =>\n set((state) => ({\n executionStatusByConversation: {\n ...state.executionStatusByConversation,\n [conversationId]: execution_status,\n },\n })),\n\n reset: () => set({ executionStatusByConversation: {} }),\n }),\n);\n"],"mappings":";;AA0BA,IAAa,IAA4B,GACtC,OAAS;CACR,+BAA+B,CAAC;CAEhC,qBAAqB,GAAgB,MACnC,GAAK,OAAW,EACd,+BAA+B;EAC7B,GAAG,EAAM;GACR,IAAiB;CACpB,EACF,EAAE;CAEJ,aAAa,EAAI,EAAE,+BAA+B,CAAC,EAAE,CAAC;AACxD,EACF"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require("../_virtual/_rolldown/runtime.cjs");const e=require("../node_modules/zustand/esm/react.cjs"),t=require("../node_modules/zustand/esm/middleware.cjs"),n=require("../utils/conversation-local-storage.cjs");var r=()=>{if(typeof window>`u`)return null;let e=window.location.pathname.match(/\/conversations\/([^/]+)/);return e?e[1]:null},i=()=>{if(typeof window>`u`)return`code`;let e=r();return e?n.getConversationState(e).conversationMode:`code`},a=e.create()(t.devtools(e=>({isRightPanelShown:!1,isOverviewPanelShown:!1,isOverviewPanelPeeked:!1,selectedTab:`files`,commitsAutoExpandSection:null,images:[],files:[],imagesMarkedUploadAsFile:[],pastedImageNames:[],loadingFiles:[],loadingImages:[],messageToSend:null,messageRestoreIfEmpty:null,shouldShownAgentLoading:!1,submittedMessage:null,shouldHideSuggestions:!1,hasRightPanelToggled:!1,planContent:null,conversationMode:i(),subConversationTaskId:null,setIsRightPanelShown:t=>e({isRightPanelShown:t},!1,`setIsRightPanelShown`),setIsOverviewPanelShown:t=>e({isOverviewPanelShown:t,isOverviewPanelPeeked:!1},!1,`setIsOverviewPanelShown`),setIsOverviewPanelPeeked:t=>e({isOverviewPanelPeeked:t},!1,`setIsOverviewPanelPeeked`),setSelectedTab:t=>e({selectedTab:t},!1,`setSelectedTab`),setCommitsAutoExpandSection:t=>e({commitsAutoExpandSection:t},!1,`setCommitsAutoExpandSection`),setShouldShownAgentLoading:t=>e({shouldShownAgentLoading:t},!1,`setShouldShownAgentLoading`),setShouldHideSuggestions:t=>e({shouldHideSuggestions:t},!1,`setShouldHideSuggestions`),addImages:t=>e(e=>({images:[...e.images,...t]}),!1,`addImages`),addFiles:t=>e(e=>({files:[...e.files,...t]}),!1,`addFiles`),toggleImageUploadAsFile:t=>e(e=>{let n=new Set(e.imagesMarkedUploadAsFile);return n.has(t)?n.delete(t):n.add(t),{imagesMarkedUploadAsFile:[...n]}},!1,`toggleImageUploadAsFile`),markImagesAsPasted:t=>e(e=>({pastedImageNames:[...new Set([...e.pastedImageNames,...t])]}),!1,`markImagesAsPasted`),removeImage:t=>e(e=>{let n=e.images[t],r=[...e.images];return r.splice(t,1),{images:r,imagesMarkedUploadAsFile:n?e.imagesMarkedUploadAsFile.filter(e=>e!==n.name):e.imagesMarkedUploadAsFile,pastedImageNames:n?e.pastedImageNames.filter(e=>e!==n.name):e.pastedImageNames}},!1,`removeImage`),removeFile:t=>e(e=>{let n=[...e.files];return n.splice(t,1),{files:n}},!1,`removeFile`),clearImages:()=>e({images:[]},!1,`clearImages`),clearFiles:()=>e({files:[]},!1,`clearFiles`),clearAllFiles:()=>e({images:[],files:[],imagesMarkedUploadAsFile:[],pastedImageNames:[],loadingFiles:[],loadingImages:[]},!1,`clearAllFiles`),addFileLoading:t=>e(e=>e.loadingFiles.includes(t)?e:{loadingFiles:[...e.loadingFiles,t]},!1,`addFileLoading`),removeFileLoading:t=>e(e=>({loadingFiles:e.loadingFiles.filter(e=>e!==t)}),!1,`removeFileLoading`),addImageLoading:t=>e(e=>e.loadingImages.includes(t)?e:{loadingImages:[...e.loadingImages,t]},!1,`addImageLoading`),removeImageLoading:t=>e(e=>({loadingImages:e.loadingImages.filter(e=>e!==t)}),!1,`removeImageLoading`),clearAllLoading:()=>e({loadingFiles:[],loadingImages:[]},!1,`clearAllLoading`),setMessageToSend:t=>e({messageToSend:{text:t,timestamp:Date.now()}},!1,`setMessageToSend`),clearMessageToSend:()=>e({messageToSend:null},!1,`clearMessageToSend`),restoreMessageToInputIfEmpty:t=>e({messageRestoreIfEmpty:{text:t,timestamp:Date.now()}},!1,`restoreMessageToInputIfEmpty`),clearMessageRestoreIfEmpty:()=>e({messageRestoreIfEmpty:null},!1,`clearMessageRestoreIfEmpty`),setSubmittedMessage:t=>e({submittedMessage:t},!1,`setSubmittedMessage`),resetConversationState:()=>e({shouldHideSuggestions:!1,conversationMode:i(),subConversationTaskId:null,planContent:null},!1,`resetConversationState`),setHasRightPanelToggled:t=>e({hasRightPanelToggled:t},!1,`setHasRightPanelToggled`),setConversationMode:t=>{let i=r();i&&n.setConversationState(i,{conversationMode:t}),e({conversationMode:t},!1,`setConversationMode`)},setSubConversationTaskId:t=>e({subConversationTaskId:t},!1,`setSubConversationTaskId`),setPlanContent:t=>e({planContent:t},!1,`setPlanContent`)}),{name:`conversation-store`}));exports.useConversationStore=a;
|
|
1
|
+
require("../_virtual/_rolldown/runtime.cjs");const e=require("../node_modules/zustand/esm/react.cjs"),t=require("../node_modules/zustand/esm/middleware.cjs"),n=require("../utils/conversation-local-storage.cjs");var r=()=>{if(typeof window>`u`)return null;let e=window.location.pathname.match(/\/conversations\/([^/]+)/);return e?e[1]:null},i=()=>{if(typeof window>`u`)return`code`;let e=r();return e?n.getConversationState(e).conversationMode:`code`},a=e.create()(t.devtools(e=>({isRightPanelShown:!1,isOverviewPanelShown:!1,isOverviewPanelPeeked:!1,selectedTab:`files`,commitsAutoExpandSection:null,images:[],files:[],imagesMarkedUploadAsFile:[],pastedImageNames:[],loadingFiles:[],loadingImages:[],messageToSend:null,messageRestoreIfEmpty:null,shouldShownAgentLoading:!1,submittedMessage:null,shouldHideSuggestions:!1,hasRightPanelToggled:!1,planContent:null,conversationMode:i(),subConversationTaskId:null,localPlanningConversationId:null,setIsRightPanelShown:t=>e({isRightPanelShown:t},!1,`setIsRightPanelShown`),setIsOverviewPanelShown:t=>e({isOverviewPanelShown:t,isOverviewPanelPeeked:!1},!1,`setIsOverviewPanelShown`),setIsOverviewPanelPeeked:t=>e({isOverviewPanelPeeked:t},!1,`setIsOverviewPanelPeeked`),setSelectedTab:t=>e({selectedTab:t},!1,`setSelectedTab`),setCommitsAutoExpandSection:t=>e({commitsAutoExpandSection:t},!1,`setCommitsAutoExpandSection`),setShouldShownAgentLoading:t=>e({shouldShownAgentLoading:t},!1,`setShouldShownAgentLoading`),setShouldHideSuggestions:t=>e({shouldHideSuggestions:t},!1,`setShouldHideSuggestions`),addImages:t=>e(e=>({images:[...e.images,...t]}),!1,`addImages`),addFiles:t=>e(e=>({files:[...e.files,...t]}),!1,`addFiles`),toggleImageUploadAsFile:t=>e(e=>{let n=new Set(e.imagesMarkedUploadAsFile);return n.has(t)?n.delete(t):n.add(t),{imagesMarkedUploadAsFile:[...n]}},!1,`toggleImageUploadAsFile`),markImagesAsPasted:t=>e(e=>({pastedImageNames:[...new Set([...e.pastedImageNames,...t])]}),!1,`markImagesAsPasted`),removeImage:t=>e(e=>{let n=e.images[t],r=[...e.images];return r.splice(t,1),{images:r,imagesMarkedUploadAsFile:n?e.imagesMarkedUploadAsFile.filter(e=>e!==n.name):e.imagesMarkedUploadAsFile,pastedImageNames:n?e.pastedImageNames.filter(e=>e!==n.name):e.pastedImageNames}},!1,`removeImage`),removeFile:t=>e(e=>{let n=[...e.files];return n.splice(t,1),{files:n}},!1,`removeFile`),clearImages:()=>e({images:[]},!1,`clearImages`),clearFiles:()=>e({files:[]},!1,`clearFiles`),clearAllFiles:()=>e({images:[],files:[],imagesMarkedUploadAsFile:[],pastedImageNames:[],loadingFiles:[],loadingImages:[]},!1,`clearAllFiles`),addFileLoading:t=>e(e=>e.loadingFiles.includes(t)?e:{loadingFiles:[...e.loadingFiles,t]},!1,`addFileLoading`),removeFileLoading:t=>e(e=>({loadingFiles:e.loadingFiles.filter(e=>e!==t)}),!1,`removeFileLoading`),addImageLoading:t=>e(e=>e.loadingImages.includes(t)?e:{loadingImages:[...e.loadingImages,t]},!1,`addImageLoading`),removeImageLoading:t=>e(e=>({loadingImages:e.loadingImages.filter(e=>e!==t)}),!1,`removeImageLoading`),clearAllLoading:()=>e({loadingFiles:[],loadingImages:[]},!1,`clearAllLoading`),setMessageToSend:t=>e({messageToSend:{text:t,timestamp:Date.now()}},!1,`setMessageToSend`),clearMessageToSend:()=>e({messageToSend:null},!1,`clearMessageToSend`),restoreMessageToInputIfEmpty:t=>e({messageRestoreIfEmpty:{text:t,timestamp:Date.now()}},!1,`restoreMessageToInputIfEmpty`),clearMessageRestoreIfEmpty:()=>e({messageRestoreIfEmpty:null},!1,`clearMessageRestoreIfEmpty`),setSubmittedMessage:t=>e({submittedMessage:t},!1,`setSubmittedMessage`),resetConversationState:()=>e({shouldHideSuggestions:!1,conversationMode:i(),subConversationTaskId:null,localPlanningConversationId:null,planContent:null},!1,`resetConversationState`),setHasRightPanelToggled:t=>e({hasRightPanelToggled:t},!1,`setHasRightPanelToggled`),setConversationMode:t=>{let i=r();i&&n.setConversationState(i,{conversationMode:t}),e({conversationMode:t},!1,`setConversationMode`)},setSubConversationTaskId:t=>e({subConversationTaskId:t},!1,`setSubConversationTaskId`),setLocalPlanningConversationId:t=>e({localPlanningConversationId:t},!1,`setLocalPlanningConversationId`),setPlanContent:t=>e({planContent:t},!1,`setPlanContent`)}),{name:`conversation-store`}));exports.useConversationStore=a;
|
|
2
2
|
//# sourceMappingURL=conversation-store.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-store.cjs","names":[],"sources":["../../src/stores/conversation-store.ts"],"sourcesContent":["import { create } from \"zustand\";\nimport { devtools } from \"zustand/middleware\";\nimport {\n getConversationState,\n setConversationState,\n} from \"#/utils/conversation-local-storage\";\n\nexport type ConversationTab =\n | \"files\"\n | \"commits\"\n | \"browser\"\n | \"terminal\"\n | \"planner\"\n | \"tasklist\"\n | \"usage\";\n\nexport type ConversationMode = \"code\" | \"plan\";\n\nexport type CommitsPaneSection = \"uncommitted\";\n\nexport interface IMessageToSend {\n text: string;\n timestamp: number;\n}\n\ninterface ConversationState {\n isRightPanelShown: boolean;\n isOverviewPanelShown: boolean;\n isOverviewPanelPeeked: boolean;\n selectedTab: ConversationTab | null;\n commitsAutoExpandSection: CommitsPaneSection | null;\n images: File[];\n files: File[];\n /** Image file names (e.g. pasted screenshots) to send via file upload instead of vision embed. */\n imagesMarkedUploadAsFile: string[];\n /** Image file names attached in chat (controls per-image upload-as-file UI). */\n pastedImageNames: string[];\n loadingFiles: string[]; // File names currently being processed\n loadingImages: string[]; // Image names currently being processed\n messageToSend: IMessageToSend | null;\n /** One-shot restore request consumed by the chat input when empty. */\n messageRestoreIfEmpty: IMessageToSend | null;\n shouldShownAgentLoading: boolean;\n submittedMessage: string | null;\n shouldHideSuggestions: boolean; // New state to hide suggestions when input expands\n hasRightPanelToggled: boolean;\n planContent: string | null;\n conversationMode: ConversationMode;\n subConversationTaskId: string | null; // Task ID for sub-conversation creation\n}\n\ninterface ConversationActions {\n setIsRightPanelShown: (isRightPanelShown: boolean) => void;\n setIsOverviewPanelShown: (isOverviewPanelShown: boolean) => void;\n setIsOverviewPanelPeeked: (isOverviewPanelPeeked: boolean) => void;\n setSelectedTab: (selectedTab: ConversationTab | null) => void;\n setCommitsAutoExpandSection: (\n commitsAutoExpandSection: CommitsPaneSection | null,\n ) => void;\n setShouldShownAgentLoading: (shouldShownAgentLoading: boolean) => void;\n setShouldHideSuggestions: (shouldHideSuggestions: boolean) => void;\n addImages: (images: File[]) => void;\n addFiles: (files: File[]) => void;\n toggleImageUploadAsFile: (fileName: string) => void;\n markImagesAsPasted: (fileNames: string[]) => void;\n removeImage: (index: number) => void;\n removeFile: (index: number) => void;\n clearImages: () => void;\n clearFiles: () => void;\n clearAllFiles: () => void;\n addFileLoading: (fileName: string) => void;\n removeFileLoading: (fileName: string) => void;\n addImageLoading: (imageName: string) => void;\n removeImageLoading: (imageName: string) => void;\n clearAllLoading: () => void;\n setMessageToSend: (text: string) => void;\n clearMessageToSend: () => void;\n restoreMessageToInputIfEmpty: (text: string) => void;\n clearMessageRestoreIfEmpty: () => void;\n setSubmittedMessage: (message: string | null) => void;\n resetConversationState: () => void;\n setHasRightPanelToggled: (hasRightPanelToggled: boolean) => void;\n setConversationMode: (conversationMode: ConversationMode) => void;\n setSubConversationTaskId: (taskId: string | null) => void;\n setPlanContent: (planContent: string | null) => void;\n}\n\ntype ConversationStore = ConversationState & ConversationActions;\n\nconst getConversationIdFromLocation = (): string | null => {\n if (typeof window === \"undefined\") {\n return null;\n }\n\n const match = window.location.pathname.match(/\\/conversations\\/([^/]+)/);\n return match ? match[1] : null;\n};\n\nconst getInitialConversationMode = (): ConversationMode => {\n if (typeof window === \"undefined\") {\n return \"code\";\n }\n\n const conversationId = getConversationIdFromLocation();\n if (!conversationId) {\n return \"code\";\n }\n\n const state = getConversationState(conversationId);\n return state.conversationMode;\n};\n\nexport const useConversationStore = create<ConversationStore>()(\n devtools(\n (set) => ({\n // Initial state.\n //\n // The right-side drawer (`isRightPanelShown` / `hasRightPanelToggled`)\n // is intentionally *session-only* state: it always starts closed on\n // app load (or on opening a fresh/existing conversation after a\n // restart), but it survives in-app navigation because the Zustand\n // store stays alive across React Router transitions. Persisting the\n // open/closed state in localStorage made the panel feel sticky in\n // a way users didn't expect — they want a clean, focused chat view\n // when they come back to the app and only want the panel back when\n // they themselves opened it during the current session.\n isRightPanelShown: false,\n isOverviewPanelShown: false,\n isOverviewPanelPeeked: false,\n selectedTab: \"files\" as ConversationTab,\n commitsAutoExpandSection: null,\n images: [],\n files: [],\n imagesMarkedUploadAsFile: [],\n pastedImageNames: [],\n loadingFiles: [],\n loadingImages: [],\n messageToSend: null,\n messageRestoreIfEmpty: null,\n shouldShownAgentLoading: false,\n submittedMessage: null,\n shouldHideSuggestions: false,\n hasRightPanelToggled: false,\n planContent: null,\n conversationMode: getInitialConversationMode(),\n subConversationTaskId: null,\n\n // Actions\n setIsRightPanelShown: (isRightPanelShown) =>\n set({ isRightPanelShown }, false, \"setIsRightPanelShown\"),\n\n setIsOverviewPanelShown: (isOverviewPanelShown) =>\n set(\n { isOverviewPanelShown, isOverviewPanelPeeked: false },\n false,\n \"setIsOverviewPanelShown\",\n ),\n\n setIsOverviewPanelPeeked: (isOverviewPanelPeeked) =>\n set({ isOverviewPanelPeeked }, false, \"setIsOverviewPanelPeeked\"),\n\n setSelectedTab: (selectedTab) =>\n set({ selectedTab }, false, \"setSelectedTab\"),\n\n setCommitsAutoExpandSection: (commitsAutoExpandSection) =>\n set({ commitsAutoExpandSection }, false, \"setCommitsAutoExpandSection\"),\n\n setShouldShownAgentLoading: (shouldShownAgentLoading) =>\n set({ shouldShownAgentLoading }, false, \"setShouldShownAgentLoading\"),\n\n setShouldHideSuggestions: (shouldHideSuggestions) =>\n set({ shouldHideSuggestions }, false, \"setShouldHideSuggestions\"),\n\n addImages: (images) =>\n set(\n (state) => ({ images: [...state.images, ...images] }),\n false,\n \"addImages\",\n ),\n\n addFiles: (files) =>\n set(\n (state) => ({ files: [...state.files, ...files] }),\n false,\n \"addFiles\",\n ),\n\n toggleImageUploadAsFile: (fileName) =>\n set(\n (state) => {\n const marked = new Set(state.imagesMarkedUploadAsFile);\n if (marked.has(fileName)) {\n marked.delete(fileName);\n } else {\n marked.add(fileName);\n }\n return { imagesMarkedUploadAsFile: [...marked] };\n },\n false,\n \"toggleImageUploadAsFile\",\n ),\n\n markImagesAsPasted: (fileNames) =>\n set(\n (state) => {\n const merged = new Set([...state.pastedImageNames, ...fileNames]);\n return { pastedImageNames: [...merged] };\n },\n false,\n \"markImagesAsPasted\",\n ),\n\n removeImage: (index) =>\n set(\n (state) => {\n const removed = state.images[index];\n const newImages = [...state.images];\n newImages.splice(index, 1);\n return {\n images: newImages,\n imagesMarkedUploadAsFile: removed\n ? state.imagesMarkedUploadAsFile.filter(\n (name) => name !== removed.name,\n )\n : state.imagesMarkedUploadAsFile,\n pastedImageNames: removed\n ? state.pastedImageNames.filter((name) => name !== removed.name)\n : state.pastedImageNames,\n };\n },\n false,\n \"removeImage\",\n ),\n\n removeFile: (index) =>\n set(\n (state) => {\n const newFiles = [...state.files];\n newFiles.splice(index, 1);\n return { files: newFiles };\n },\n false,\n \"removeFile\",\n ),\n\n clearImages: () => set({ images: [] }, false, \"clearImages\"),\n\n clearFiles: () => set({ files: [] }, false, \"clearFiles\"),\n\n clearAllFiles: () =>\n set(\n {\n images: [],\n files: [],\n imagesMarkedUploadAsFile: [],\n pastedImageNames: [],\n loadingFiles: [],\n loadingImages: [],\n },\n false,\n \"clearAllFiles\",\n ),\n\n addFileLoading: (fileName) =>\n set(\n (state) => {\n if (!state.loadingFiles.includes(fileName)) {\n return { loadingFiles: [...state.loadingFiles, fileName] };\n }\n return state;\n },\n false,\n \"addFileLoading\",\n ),\n\n removeFileLoading: (fileName) =>\n set(\n (state) => ({\n loadingFiles: state.loadingFiles.filter(\n (name) => name !== fileName,\n ),\n }),\n false,\n \"removeFileLoading\",\n ),\n\n addImageLoading: (imageName) =>\n set(\n (state) => {\n if (!state.loadingImages.includes(imageName)) {\n return { loadingImages: [...state.loadingImages, imageName] };\n }\n return state;\n },\n false,\n \"addImageLoading\",\n ),\n\n removeImageLoading: (imageName) =>\n set(\n (state) => ({\n loadingImages: state.loadingImages.filter(\n (name) => name !== imageName,\n ),\n }),\n false,\n \"removeImageLoading\",\n ),\n\n clearAllLoading: () =>\n set({ loadingFiles: [], loadingImages: [] }, false, \"clearAllLoading\"),\n\n setMessageToSend: (text) =>\n set(\n {\n messageToSend: {\n text,\n timestamp: Date.now(),\n },\n },\n false,\n \"setMessageToSend\",\n ),\n\n // One-shot consume: clear after the composer applies it, so a never-sent\n // value can't replay into another conversation's composer on remount.\n clearMessageToSend: () =>\n set({ messageToSend: null }, false, \"clearMessageToSend\"),\n\n restoreMessageToInputIfEmpty: (text) =>\n set(\n {\n messageRestoreIfEmpty: {\n text,\n timestamp: Date.now(),\n },\n },\n false,\n \"restoreMessageToInputIfEmpty\",\n ),\n\n clearMessageRestoreIfEmpty: () =>\n set(\n { messageRestoreIfEmpty: null },\n false,\n \"clearMessageRestoreIfEmpty\",\n ),\n\n setSubmittedMessage: (submittedMessage) =>\n set({ submittedMessage }, false, \"setSubmittedMessage\"),\n\n resetConversationState: () =>\n set(\n {\n shouldHideSuggestions: false,\n conversationMode: getInitialConversationMode(),\n subConversationTaskId: null,\n planContent: null,\n },\n false,\n \"resetConversationState\",\n ),\n\n setHasRightPanelToggled: (hasRightPanelToggled) =>\n set({ hasRightPanelToggled }, false, \"setHasRightPanelToggled\"),\n\n setConversationMode: (conversationMode) => {\n const conversationId = getConversationIdFromLocation();\n if (conversationId) {\n setConversationState(conversationId, { conversationMode });\n }\n set({ conversationMode }, false, \"setConversationMode\");\n },\n\n setSubConversationTaskId: (subConversationTaskId) =>\n set({ subConversationTaskId }, false, \"setSubConversationTaskId\"),\n\n setPlanContent: (planContent) =>\n set({ planContent }, false, \"setPlanContent\"),\n }),\n {\n name: \"conversation-store\",\n },\n ),\n);\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"conversation-store.cjs","names":[],"sources":["../../src/stores/conversation-store.ts"],"sourcesContent":["import { create } from \"zustand\";\nimport { devtools } from \"zustand/middleware\";\nimport {\n getConversationState,\n setConversationState,\n} from \"#/utils/conversation-local-storage\";\n\nexport type ConversationTab =\n | \"files\"\n | \"commits\"\n | \"browser\"\n | \"terminal\"\n | \"planner\"\n | \"tasklist\"\n | \"usage\";\n\nexport type ConversationMode = \"code\" | \"plan\";\n\nexport type CommitsPaneSection = \"uncommitted\";\n\nexport interface IMessageToSend {\n text: string;\n timestamp: number;\n}\n\ninterface ConversationState {\n isRightPanelShown: boolean;\n isOverviewPanelShown: boolean;\n isOverviewPanelPeeked: boolean;\n selectedTab: ConversationTab | null;\n commitsAutoExpandSection: CommitsPaneSection | null;\n images: File[];\n files: File[];\n /** Image file names (e.g. pasted screenshots) to send via file upload instead of vision embed. */\n imagesMarkedUploadAsFile: string[];\n /** Image file names attached in chat (controls per-image upload-as-file UI). */\n pastedImageNames: string[];\n loadingFiles: string[]; // File names currently being processed\n loadingImages: string[]; // Image names currently being processed\n messageToSend: IMessageToSend | null;\n /** One-shot restore request consumed by the chat input when empty. */\n messageRestoreIfEmpty: IMessageToSend | null;\n shouldShownAgentLoading: boolean;\n submittedMessage: string | null;\n shouldHideSuggestions: boolean; // New state to hide suggestions when input expands\n hasRightPanelToggled: boolean;\n planContent: string | null;\n conversationMode: ConversationMode;\n subConversationTaskId: string | null; // Task ID for cloud sub-conversation creation\n localPlanningConversationId: string | null;\n}\n\ninterface ConversationActions {\n setIsRightPanelShown: (isRightPanelShown: boolean) => void;\n setIsOverviewPanelShown: (isOverviewPanelShown: boolean) => void;\n setIsOverviewPanelPeeked: (isOverviewPanelPeeked: boolean) => void;\n setSelectedTab: (selectedTab: ConversationTab | null) => void;\n setCommitsAutoExpandSection: (\n commitsAutoExpandSection: CommitsPaneSection | null,\n ) => void;\n setShouldShownAgentLoading: (shouldShownAgentLoading: boolean) => void;\n setShouldHideSuggestions: (shouldHideSuggestions: boolean) => void;\n addImages: (images: File[]) => void;\n addFiles: (files: File[]) => void;\n toggleImageUploadAsFile: (fileName: string) => void;\n markImagesAsPasted: (fileNames: string[]) => void;\n removeImage: (index: number) => void;\n removeFile: (index: number) => void;\n clearImages: () => void;\n clearFiles: () => void;\n clearAllFiles: () => void;\n addFileLoading: (fileName: string) => void;\n removeFileLoading: (fileName: string) => void;\n addImageLoading: (imageName: string) => void;\n removeImageLoading: (imageName: string) => void;\n clearAllLoading: () => void;\n setMessageToSend: (text: string) => void;\n clearMessageToSend: () => void;\n restoreMessageToInputIfEmpty: (text: string) => void;\n clearMessageRestoreIfEmpty: () => void;\n setSubmittedMessage: (message: string | null) => void;\n resetConversationState: () => void;\n setHasRightPanelToggled: (hasRightPanelToggled: boolean) => void;\n setConversationMode: (conversationMode: ConversationMode) => void;\n setSubConversationTaskId: (taskId: string | null) => void;\n setLocalPlanningConversationId: (conversationId: string | null) => void;\n setPlanContent: (planContent: string | null) => void;\n}\n\ntype ConversationStore = ConversationState & ConversationActions;\n\nconst getConversationIdFromLocation = (): string | null => {\n if (typeof window === \"undefined\") {\n return null;\n }\n\n const match = window.location.pathname.match(/\\/conversations\\/([^/]+)/);\n return match ? match[1] : null;\n};\n\nconst getInitialConversationMode = (): ConversationMode => {\n if (typeof window === \"undefined\") {\n return \"code\";\n }\n\n const conversationId = getConversationIdFromLocation();\n if (!conversationId) {\n return \"code\";\n }\n\n const state = getConversationState(conversationId);\n return state.conversationMode;\n};\n\nexport const useConversationStore = create<ConversationStore>()(\n devtools(\n (set) => ({\n // Initial state.\n //\n // The right-side drawer (`isRightPanelShown` / `hasRightPanelToggled`)\n // is intentionally *session-only* state: it always starts closed on\n // app load (or on opening a fresh/existing conversation after a\n // restart), but it survives in-app navigation because the Zustand\n // store stays alive across React Router transitions. Persisting the\n // open/closed state in localStorage made the panel feel sticky in\n // a way users didn't expect — they want a clean, focused chat view\n // when they come back to the app and only want the panel back when\n // they themselves opened it during the current session.\n isRightPanelShown: false,\n isOverviewPanelShown: false,\n isOverviewPanelPeeked: false,\n selectedTab: \"files\" as ConversationTab,\n commitsAutoExpandSection: null,\n images: [],\n files: [],\n imagesMarkedUploadAsFile: [],\n pastedImageNames: [],\n loadingFiles: [],\n loadingImages: [],\n messageToSend: null,\n messageRestoreIfEmpty: null,\n shouldShownAgentLoading: false,\n submittedMessage: null,\n shouldHideSuggestions: false,\n hasRightPanelToggled: false,\n planContent: null,\n conversationMode: getInitialConversationMode(),\n subConversationTaskId: null,\n localPlanningConversationId: null,\n\n // Actions\n setIsRightPanelShown: (isRightPanelShown) =>\n set({ isRightPanelShown }, false, \"setIsRightPanelShown\"),\n\n setIsOverviewPanelShown: (isOverviewPanelShown) =>\n set(\n { isOverviewPanelShown, isOverviewPanelPeeked: false },\n false,\n \"setIsOverviewPanelShown\",\n ),\n\n setIsOverviewPanelPeeked: (isOverviewPanelPeeked) =>\n set({ isOverviewPanelPeeked }, false, \"setIsOverviewPanelPeeked\"),\n\n setSelectedTab: (selectedTab) =>\n set({ selectedTab }, false, \"setSelectedTab\"),\n\n setCommitsAutoExpandSection: (commitsAutoExpandSection) =>\n set({ commitsAutoExpandSection }, false, \"setCommitsAutoExpandSection\"),\n\n setShouldShownAgentLoading: (shouldShownAgentLoading) =>\n set({ shouldShownAgentLoading }, false, \"setShouldShownAgentLoading\"),\n\n setShouldHideSuggestions: (shouldHideSuggestions) =>\n set({ shouldHideSuggestions }, false, \"setShouldHideSuggestions\"),\n\n addImages: (images) =>\n set(\n (state) => ({ images: [...state.images, ...images] }),\n false,\n \"addImages\",\n ),\n\n addFiles: (files) =>\n set(\n (state) => ({ files: [...state.files, ...files] }),\n false,\n \"addFiles\",\n ),\n\n toggleImageUploadAsFile: (fileName) =>\n set(\n (state) => {\n const marked = new Set(state.imagesMarkedUploadAsFile);\n if (marked.has(fileName)) {\n marked.delete(fileName);\n } else {\n marked.add(fileName);\n }\n return { imagesMarkedUploadAsFile: [...marked] };\n },\n false,\n \"toggleImageUploadAsFile\",\n ),\n\n markImagesAsPasted: (fileNames) =>\n set(\n (state) => {\n const merged = new Set([...state.pastedImageNames, ...fileNames]);\n return { pastedImageNames: [...merged] };\n },\n false,\n \"markImagesAsPasted\",\n ),\n\n removeImage: (index) =>\n set(\n (state) => {\n const removed = state.images[index];\n const newImages = [...state.images];\n newImages.splice(index, 1);\n return {\n images: newImages,\n imagesMarkedUploadAsFile: removed\n ? state.imagesMarkedUploadAsFile.filter(\n (name) => name !== removed.name,\n )\n : state.imagesMarkedUploadAsFile,\n pastedImageNames: removed\n ? state.pastedImageNames.filter((name) => name !== removed.name)\n : state.pastedImageNames,\n };\n },\n false,\n \"removeImage\",\n ),\n\n removeFile: (index) =>\n set(\n (state) => {\n const newFiles = [...state.files];\n newFiles.splice(index, 1);\n return { files: newFiles };\n },\n false,\n \"removeFile\",\n ),\n\n clearImages: () => set({ images: [] }, false, \"clearImages\"),\n\n clearFiles: () => set({ files: [] }, false, \"clearFiles\"),\n\n clearAllFiles: () =>\n set(\n {\n images: [],\n files: [],\n imagesMarkedUploadAsFile: [],\n pastedImageNames: [],\n loadingFiles: [],\n loadingImages: [],\n },\n false,\n \"clearAllFiles\",\n ),\n\n addFileLoading: (fileName) =>\n set(\n (state) => {\n if (!state.loadingFiles.includes(fileName)) {\n return { loadingFiles: [...state.loadingFiles, fileName] };\n }\n return state;\n },\n false,\n \"addFileLoading\",\n ),\n\n removeFileLoading: (fileName) =>\n set(\n (state) => ({\n loadingFiles: state.loadingFiles.filter(\n (name) => name !== fileName,\n ),\n }),\n false,\n \"removeFileLoading\",\n ),\n\n addImageLoading: (imageName) =>\n set(\n (state) => {\n if (!state.loadingImages.includes(imageName)) {\n return { loadingImages: [...state.loadingImages, imageName] };\n }\n return state;\n },\n false,\n \"addImageLoading\",\n ),\n\n removeImageLoading: (imageName) =>\n set(\n (state) => ({\n loadingImages: state.loadingImages.filter(\n (name) => name !== imageName,\n ),\n }),\n false,\n \"removeImageLoading\",\n ),\n\n clearAllLoading: () =>\n set({ loadingFiles: [], loadingImages: [] }, false, \"clearAllLoading\"),\n\n setMessageToSend: (text) =>\n set(\n {\n messageToSend: {\n text,\n timestamp: Date.now(),\n },\n },\n false,\n \"setMessageToSend\",\n ),\n\n // One-shot consume: clear after the composer applies it, so a never-sent\n // value can't replay into another conversation's composer on remount.\n clearMessageToSend: () =>\n set({ messageToSend: null }, false, \"clearMessageToSend\"),\n\n restoreMessageToInputIfEmpty: (text) =>\n set(\n {\n messageRestoreIfEmpty: {\n text,\n timestamp: Date.now(),\n },\n },\n false,\n \"restoreMessageToInputIfEmpty\",\n ),\n\n clearMessageRestoreIfEmpty: () =>\n set(\n { messageRestoreIfEmpty: null },\n false,\n \"clearMessageRestoreIfEmpty\",\n ),\n\n setSubmittedMessage: (submittedMessage) =>\n set({ submittedMessage }, false, \"setSubmittedMessage\"),\n\n resetConversationState: () =>\n set(\n {\n shouldHideSuggestions: false,\n conversationMode: getInitialConversationMode(),\n subConversationTaskId: null,\n localPlanningConversationId: null,\n planContent: null,\n },\n false,\n \"resetConversationState\",\n ),\n\n setHasRightPanelToggled: (hasRightPanelToggled) =>\n set({ hasRightPanelToggled }, false, \"setHasRightPanelToggled\"),\n\n setConversationMode: (conversationMode) => {\n const conversationId = getConversationIdFromLocation();\n if (conversationId) {\n setConversationState(conversationId, { conversationMode });\n }\n set({ conversationMode }, false, \"setConversationMode\");\n },\n\n setSubConversationTaskId: (subConversationTaskId) =>\n set({ subConversationTaskId }, false, \"setSubConversationTaskId\"),\n\n setLocalPlanningConversationId: (localPlanningConversationId) =>\n set(\n { localPlanningConversationId },\n false,\n \"setLocalPlanningConversationId\",\n ),\n\n setPlanContent: (planContent) =>\n set({ planContent }, false, \"setPlanContent\"),\n }),\n {\n name: \"conversation-store\",\n },\n ),\n);\n"],"mappings":"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"}
|
|
@@ -29,6 +29,7 @@ interface ConversationState {
|
|
|
29
29
|
planContent: string | null;
|
|
30
30
|
conversationMode: ConversationMode;
|
|
31
31
|
subConversationTaskId: string | null;
|
|
32
|
+
localPlanningConversationId: string | null;
|
|
32
33
|
}
|
|
33
34
|
interface ConversationActions {
|
|
34
35
|
setIsRightPanelShown: (isRightPanelShown: boolean) => void;
|
|
@@ -61,6 +62,7 @@ interface ConversationActions {
|
|
|
61
62
|
setHasRightPanelToggled: (hasRightPanelToggled: boolean) => void;
|
|
62
63
|
setConversationMode: (conversationMode: ConversationMode) => void;
|
|
63
64
|
setSubConversationTaskId: (taskId: string | null) => void;
|
|
65
|
+
setLocalPlanningConversationId: (conversationId: string | null) => void;
|
|
64
66
|
setPlanContent: (planContent: string | null) => void;
|
|
65
67
|
}
|
|
66
68
|
type ConversationStore = ConversationState & ConversationActions;
|
|
@@ -31,6 +31,7 @@ var i = () => {
|
|
|
31
31
|
planContent: null,
|
|
32
32
|
conversationMode: a(),
|
|
33
33
|
subConversationTaskId: null,
|
|
34
|
+
localPlanningConversationId: null,
|
|
34
35
|
setIsRightPanelShown: (t) => e({ isRightPanelShown: t }, !1, "setIsRightPanelShown"),
|
|
35
36
|
setIsOverviewPanelShown: (t) => e({
|
|
36
37
|
isOverviewPanelShown: t,
|
|
@@ -93,6 +94,7 @@ var i = () => {
|
|
|
93
94
|
shouldHideSuggestions: !1,
|
|
94
95
|
conversationMode: a(),
|
|
95
96
|
subConversationTaskId: null,
|
|
97
|
+
localPlanningConversationId: null,
|
|
96
98
|
planContent: null
|
|
97
99
|
}, !1, "resetConversationState"),
|
|
98
100
|
setHasRightPanelToggled: (t) => e({ hasRightPanelToggled: t }, !1, "setHasRightPanelToggled"),
|
|
@@ -101,6 +103,7 @@ var i = () => {
|
|
|
101
103
|
n && r(n, { conversationMode: t }), e({ conversationMode: t }, !1, "setConversationMode");
|
|
102
104
|
},
|
|
103
105
|
setSubConversationTaskId: (t) => e({ subConversationTaskId: t }, !1, "setSubConversationTaskId"),
|
|
106
|
+
setLocalPlanningConversationId: (t) => e({ localPlanningConversationId: t }, !1, "setLocalPlanningConversationId"),
|
|
104
107
|
setPlanContent: (t) => e({ planContent: t }, !1, "setPlanContent")
|
|
105
108
|
}), { name: "conversation-store" }));
|
|
106
109
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-store.js","names":[],"sources":["../../src/stores/conversation-store.ts"],"sourcesContent":["import { create } from \"zustand\";\nimport { devtools } from \"zustand/middleware\";\nimport {\n getConversationState,\n setConversationState,\n} from \"#/utils/conversation-local-storage\";\n\nexport type ConversationTab =\n | \"files\"\n | \"commits\"\n | \"browser\"\n | \"terminal\"\n | \"planner\"\n | \"tasklist\"\n | \"usage\";\n\nexport type ConversationMode = \"code\" | \"plan\";\n\nexport type CommitsPaneSection = \"uncommitted\";\n\nexport interface IMessageToSend {\n text: string;\n timestamp: number;\n}\n\ninterface ConversationState {\n isRightPanelShown: boolean;\n isOverviewPanelShown: boolean;\n isOverviewPanelPeeked: boolean;\n selectedTab: ConversationTab | null;\n commitsAutoExpandSection: CommitsPaneSection | null;\n images: File[];\n files: File[];\n /** Image file names (e.g. pasted screenshots) to send via file upload instead of vision embed. */\n imagesMarkedUploadAsFile: string[];\n /** Image file names attached in chat (controls per-image upload-as-file UI). */\n pastedImageNames: string[];\n loadingFiles: string[]; // File names currently being processed\n loadingImages: string[]; // Image names currently being processed\n messageToSend: IMessageToSend | null;\n /** One-shot restore request consumed by the chat input when empty. */\n messageRestoreIfEmpty: IMessageToSend | null;\n shouldShownAgentLoading: boolean;\n submittedMessage: string | null;\n shouldHideSuggestions: boolean; // New state to hide suggestions when input expands\n hasRightPanelToggled: boolean;\n planContent: string | null;\n conversationMode: ConversationMode;\n subConversationTaskId: string | null; // Task ID for sub-conversation creation\n}\n\ninterface ConversationActions {\n setIsRightPanelShown: (isRightPanelShown: boolean) => void;\n setIsOverviewPanelShown: (isOverviewPanelShown: boolean) => void;\n setIsOverviewPanelPeeked: (isOverviewPanelPeeked: boolean) => void;\n setSelectedTab: (selectedTab: ConversationTab | null) => void;\n setCommitsAutoExpandSection: (\n commitsAutoExpandSection: CommitsPaneSection | null,\n ) => void;\n setShouldShownAgentLoading: (shouldShownAgentLoading: boolean) => void;\n setShouldHideSuggestions: (shouldHideSuggestions: boolean) => void;\n addImages: (images: File[]) => void;\n addFiles: (files: File[]) => void;\n toggleImageUploadAsFile: (fileName: string) => void;\n markImagesAsPasted: (fileNames: string[]) => void;\n removeImage: (index: number) => void;\n removeFile: (index: number) => void;\n clearImages: () => void;\n clearFiles: () => void;\n clearAllFiles: () => void;\n addFileLoading: (fileName: string) => void;\n removeFileLoading: (fileName: string) => void;\n addImageLoading: (imageName: string) => void;\n removeImageLoading: (imageName: string) => void;\n clearAllLoading: () => void;\n setMessageToSend: (text: string) => void;\n clearMessageToSend: () => void;\n restoreMessageToInputIfEmpty: (text: string) => void;\n clearMessageRestoreIfEmpty: () => void;\n setSubmittedMessage: (message: string | null) => void;\n resetConversationState: () => void;\n setHasRightPanelToggled: (hasRightPanelToggled: boolean) => void;\n setConversationMode: (conversationMode: ConversationMode) => void;\n setSubConversationTaskId: (taskId: string | null) => void;\n setPlanContent: (planContent: string | null) => void;\n}\n\ntype ConversationStore = ConversationState & ConversationActions;\n\nconst getConversationIdFromLocation = (): string | null => {\n if (typeof window === \"undefined\") {\n return null;\n }\n\n const match = window.location.pathname.match(/\\/conversations\\/([^/]+)/);\n return match ? match[1] : null;\n};\n\nconst getInitialConversationMode = (): ConversationMode => {\n if (typeof window === \"undefined\") {\n return \"code\";\n }\n\n const conversationId = getConversationIdFromLocation();\n if (!conversationId) {\n return \"code\";\n }\n\n const state = getConversationState(conversationId);\n return state.conversationMode;\n};\n\nexport const useConversationStore = create<ConversationStore>()(\n devtools(\n (set) => ({\n // Initial state.\n //\n // The right-side drawer (`isRightPanelShown` / `hasRightPanelToggled`)\n // is intentionally *session-only* state: it always starts closed on\n // app load (or on opening a fresh/existing conversation after a\n // restart), but it survives in-app navigation because the Zustand\n // store stays alive across React Router transitions. Persisting the\n // open/closed state in localStorage made the panel feel sticky in\n // a way users didn't expect — they want a clean, focused chat view\n // when they come back to the app and only want the panel back when\n // they themselves opened it during the current session.\n isRightPanelShown: false,\n isOverviewPanelShown: false,\n isOverviewPanelPeeked: false,\n selectedTab: \"files\" as ConversationTab,\n commitsAutoExpandSection: null,\n images: [],\n files: [],\n imagesMarkedUploadAsFile: [],\n pastedImageNames: [],\n loadingFiles: [],\n loadingImages: [],\n messageToSend: null,\n messageRestoreIfEmpty: null,\n shouldShownAgentLoading: false,\n submittedMessage: null,\n shouldHideSuggestions: false,\n hasRightPanelToggled: false,\n planContent: null,\n conversationMode: getInitialConversationMode(),\n subConversationTaskId: null,\n\n // Actions\n setIsRightPanelShown: (isRightPanelShown) =>\n set({ isRightPanelShown }, false, \"setIsRightPanelShown\"),\n\n setIsOverviewPanelShown: (isOverviewPanelShown) =>\n set(\n { isOverviewPanelShown, isOverviewPanelPeeked: false },\n false,\n \"setIsOverviewPanelShown\",\n ),\n\n setIsOverviewPanelPeeked: (isOverviewPanelPeeked) =>\n set({ isOverviewPanelPeeked }, false, \"setIsOverviewPanelPeeked\"),\n\n setSelectedTab: (selectedTab) =>\n set({ selectedTab }, false, \"setSelectedTab\"),\n\n setCommitsAutoExpandSection: (commitsAutoExpandSection) =>\n set({ commitsAutoExpandSection }, false, \"setCommitsAutoExpandSection\"),\n\n setShouldShownAgentLoading: (shouldShownAgentLoading) =>\n set({ shouldShownAgentLoading }, false, \"setShouldShownAgentLoading\"),\n\n setShouldHideSuggestions: (shouldHideSuggestions) =>\n set({ shouldHideSuggestions }, false, \"setShouldHideSuggestions\"),\n\n addImages: (images) =>\n set(\n (state) => ({ images: [...state.images, ...images] }),\n false,\n \"addImages\",\n ),\n\n addFiles: (files) =>\n set(\n (state) => ({ files: [...state.files, ...files] }),\n false,\n \"addFiles\",\n ),\n\n toggleImageUploadAsFile: (fileName) =>\n set(\n (state) => {\n const marked = new Set(state.imagesMarkedUploadAsFile);\n if (marked.has(fileName)) {\n marked.delete(fileName);\n } else {\n marked.add(fileName);\n }\n return { imagesMarkedUploadAsFile: [...marked] };\n },\n false,\n \"toggleImageUploadAsFile\",\n ),\n\n markImagesAsPasted: (fileNames) =>\n set(\n (state) => {\n const merged = new Set([...state.pastedImageNames, ...fileNames]);\n return { pastedImageNames: [...merged] };\n },\n false,\n \"markImagesAsPasted\",\n ),\n\n removeImage: (index) =>\n set(\n (state) => {\n const removed = state.images[index];\n const newImages = [...state.images];\n newImages.splice(index, 1);\n return {\n images: newImages,\n imagesMarkedUploadAsFile: removed\n ? state.imagesMarkedUploadAsFile.filter(\n (name) => name !== removed.name,\n )\n : state.imagesMarkedUploadAsFile,\n pastedImageNames: removed\n ? state.pastedImageNames.filter((name) => name !== removed.name)\n : state.pastedImageNames,\n };\n },\n false,\n \"removeImage\",\n ),\n\n removeFile: (index) =>\n set(\n (state) => {\n const newFiles = [...state.files];\n newFiles.splice(index, 1);\n return { files: newFiles };\n },\n false,\n \"removeFile\",\n ),\n\n clearImages: () => set({ images: [] }, false, \"clearImages\"),\n\n clearFiles: () => set({ files: [] }, false, \"clearFiles\"),\n\n clearAllFiles: () =>\n set(\n {\n images: [],\n files: [],\n imagesMarkedUploadAsFile: [],\n pastedImageNames: [],\n loadingFiles: [],\n loadingImages: [],\n },\n false,\n \"clearAllFiles\",\n ),\n\n addFileLoading: (fileName) =>\n set(\n (state) => {\n if (!state.loadingFiles.includes(fileName)) {\n return { loadingFiles: [...state.loadingFiles, fileName] };\n }\n return state;\n },\n false,\n \"addFileLoading\",\n ),\n\n removeFileLoading: (fileName) =>\n set(\n (state) => ({\n loadingFiles: state.loadingFiles.filter(\n (name) => name !== fileName,\n ),\n }),\n false,\n \"removeFileLoading\",\n ),\n\n addImageLoading: (imageName) =>\n set(\n (state) => {\n if (!state.loadingImages.includes(imageName)) {\n return { loadingImages: [...state.loadingImages, imageName] };\n }\n return state;\n },\n false,\n \"addImageLoading\",\n ),\n\n removeImageLoading: (imageName) =>\n set(\n (state) => ({\n loadingImages: state.loadingImages.filter(\n (name) => name !== imageName,\n ),\n }),\n false,\n \"removeImageLoading\",\n ),\n\n clearAllLoading: () =>\n set({ loadingFiles: [], loadingImages: [] }, false, \"clearAllLoading\"),\n\n setMessageToSend: (text) =>\n set(\n {\n messageToSend: {\n text,\n timestamp: Date.now(),\n },\n },\n false,\n \"setMessageToSend\",\n ),\n\n // One-shot consume: clear after the composer applies it, so a never-sent\n // value can't replay into another conversation's composer on remount.\n clearMessageToSend: () =>\n set({ messageToSend: null }, false, \"clearMessageToSend\"),\n\n restoreMessageToInputIfEmpty: (text) =>\n set(\n {\n messageRestoreIfEmpty: {\n text,\n timestamp: Date.now(),\n },\n },\n false,\n \"restoreMessageToInputIfEmpty\",\n ),\n\n clearMessageRestoreIfEmpty: () =>\n set(\n { messageRestoreIfEmpty: null },\n false,\n \"clearMessageRestoreIfEmpty\",\n ),\n\n setSubmittedMessage: (submittedMessage) =>\n set({ submittedMessage }, false, \"setSubmittedMessage\"),\n\n resetConversationState: () =>\n set(\n {\n shouldHideSuggestions: false,\n conversationMode: getInitialConversationMode(),\n subConversationTaskId: null,\n planContent: null,\n },\n false,\n \"resetConversationState\",\n ),\n\n setHasRightPanelToggled: (hasRightPanelToggled) =>\n set({ hasRightPanelToggled }, false, \"setHasRightPanelToggled\"),\n\n setConversationMode: (conversationMode) => {\n const conversationId = getConversationIdFromLocation();\n if (conversationId) {\n setConversationState(conversationId, { conversationMode });\n }\n set({ conversationMode }, false, \"setConversationMode\");\n },\n\n setSubConversationTaskId: (subConversationTaskId) =>\n set({ subConversationTaskId }, false, \"setSubConversationTaskId\"),\n\n setPlanContent: (planContent) =>\n set({ planContent }, false, \"setPlanContent\"),\n }),\n {\n name: \"conversation-store\",\n },\n ),\n);\n"],"mappings":";;;;AAyFA,IAAM,UAAqD;CACzD,IAAI,OAAO,SAAW,KACpB,OAAO;CAGT,IAAM,IAAQ,OAAO,SAAS,SAAS,MAAM,0BAA0B;CACvE,OAAO,IAAQ,EAAM,KAAK;AAC5B,GAEM,UAAqD;CACzD,IAAI,OAAO,SAAW,KACpB,OAAO;CAGT,IAAM,IAAiB,EAA8B;CAMrD,OALK,IAIS,EAAqB,CAC5B,EAAM,mBAJJ;AAKX,GAEa,IAAuB,EAA0B,EAC5D,GACG,OAAS;CAYR,mBAAmB;CACnB,sBAAsB;CACtB,uBAAuB;CACvB,aAAa;CACb,0BAA0B;CAC1B,QAAQ,CAAC;CACT,OAAO,CAAC;CACR,0BAA0B,CAAC;CAC3B,kBAAkB,CAAC;CACnB,cAAc,CAAC;CACf,eAAe,CAAC;CAChB,eAAe;CACf,uBAAuB;CACvB,yBAAyB;CACzB,kBAAkB;CAClB,uBAAuB;CACvB,sBAAsB;CACtB,aAAa;CACb,kBAAkB,EAA2B;CAC7C,uBAAuB;CAGvB,uBAAuB,MACrB,EAAI,EAAE,qBAAkB,GAAG,IAAO,sBAAsB;CAE1D,0BAA0B,MACxB,EACE;EAAE;EAAsB,uBAAuB;CAAM,GACrD,IACA,yBACF;CAEF,2BAA2B,MACzB,EAAI,EAAE,yBAAsB,GAAG,IAAO,0BAA0B;CAElE,iBAAiB,MACf,EAAI,EAAE,eAAY,GAAG,IAAO,gBAAgB;CAE9C,8BAA8B,MAC5B,EAAI,EAAE,4BAAyB,GAAG,IAAO,6BAA6B;CAExE,6BAA6B,MAC3B,EAAI,EAAE,2BAAwB,GAAG,IAAO,4BAA4B;CAEtE,2BAA2B,MACzB,EAAI,EAAE,yBAAsB,GAAG,IAAO,0BAA0B;CAElE,YAAY,MACV,GACG,OAAW,EAAE,QAAQ,CAAC,GAAG,EAAM,QAAQ,GAAG,CAAM,EAAE,IACnD,IACA,WACF;CAEF,WAAW,MACT,GACG,OAAW,EAAE,OAAO,CAAC,GAAG,EAAM,OAAO,GAAG,CAAK,EAAE,IAChD,IACA,UACF;CAEF,0BAA0B,MACxB,GACG,MAAU;EACT,IAAM,IAAS,IAAI,IAAI,EAAM,wBAAwB;EAMrD,OALI,EAAO,IAAI,CAAQ,IACrB,EAAO,OAAO,CAAQ,IAEtB,EAAO,IAAI,CAAQ,GAEd,EAAE,0BAA0B,CAAC,GAAG,CAAM,EAAE;CACjD,GACA,IACA,yBACF;CAEF,qBAAqB,MACnB,GACG,OAEQ,EAAE,kBAAkB,CAAC,GAAG,IADZ,IAAI,CAAC,GAAG,EAAM,kBAAkB,GAAG,CAAS,CAChC,CAAM,EAAE,IAEzC,IACA,oBACF;CAEF,cAAc,MACZ,GACG,MAAU;EACT,IAAM,IAAU,EAAM,OAAO,IACvB,IAAY,CAAC,GAAG,EAAM,MAAM;EAElC,OADA,EAAU,OAAO,GAAO,CAAC,GAClB;GACL,QAAQ;GACR,0BAA0B,IACtB,EAAM,yBAAyB,QAC5B,MAAS,MAAS,EAAQ,IAC7B,IACA,EAAM;GACV,kBAAkB,IACd,EAAM,iBAAiB,QAAQ,MAAS,MAAS,EAAQ,IAAI,IAC7D,EAAM;EACZ;CACF,GACA,IACA,aACF;CAEF,aAAa,MACX,GACG,MAAU;EACT,IAAM,IAAW,CAAC,GAAG,EAAM,KAAK;EAEhC,OADA,EAAS,OAAO,GAAO,CAAC,GACjB,EAAE,OAAO,EAAS;CAC3B,GACA,IACA,YACF;CAEF,mBAAmB,EAAI,EAAE,QAAQ,CAAC,EAAE,GAAG,IAAO,aAAa;CAE3D,kBAAkB,EAAI,EAAE,OAAO,CAAC,EAAE,GAAG,IAAO,YAAY;CAExD,qBACE,EACE;EACE,QAAQ,CAAC;EACT,OAAO,CAAC;EACR,0BAA0B,CAAC;EAC3B,kBAAkB,CAAC;EACnB,cAAc,CAAC;EACf,eAAe,CAAC;CAClB,GACA,IACA,eACF;CAEF,iBAAiB,MACf,GACG,MACM,EAAM,aAAa,SAAS,CAAQ,IAGlC,IAFE,EAAE,cAAc,CAAC,GAAG,EAAM,cAAc,CAAQ,EAAE,GAI7D,IACA,gBACF;CAEF,oBAAoB,MAClB,GACG,OAAW,EACV,cAAc,EAAM,aAAa,QAC9B,MAAS,MAAS,CACrB,EACF,IACA,IACA,mBACF;CAEF,kBAAkB,MAChB,GACG,MACM,EAAM,cAAc,SAAS,CAAS,IAGpC,IAFE,EAAE,eAAe,CAAC,GAAG,EAAM,eAAe,CAAS,EAAE,GAIhE,IACA,iBACF;CAEF,qBAAqB,MACnB,GACG,OAAW,EACV,eAAe,EAAM,cAAc,QAChC,MAAS,MAAS,CACrB,EACF,IACA,IACA,oBACF;CAEF,uBACE,EAAI;EAAE,cAAc,CAAC;EAAG,eAAe,CAAC;CAAE,GAAG,IAAO,iBAAiB;CAEvE,mBAAmB,MACjB,EACE,EACE,eAAe;EACb;EACA,WAAW,KAAK,IAAI;CACtB,EACF,GACA,IACA,kBACF;CAIF,0BACE,EAAI,EAAE,eAAe,KAAK,GAAG,IAAO,oBAAoB;CAE1D,+BAA+B,MAC7B,EACE,EACE,uBAAuB;EACrB;EACA,WAAW,KAAK,IAAI;CACtB,EACF,GACA,IACA,8BACF;CAEF,kCACE,EACE,EAAE,uBAAuB,KAAK,GAC9B,IACA,4BACF;CAEF,sBAAsB,MACpB,EAAI,EAAE,oBAAiB,GAAG,IAAO,qBAAqB;CAExD,8BACE,EACE;EACE,uBAAuB;EACvB,kBAAkB,EAA2B;EAC7C,uBAAuB;EACvB,aAAa;CACf,GACA,IACA,wBACF;CAEF,0BAA0B,MACxB,EAAI,EAAE,wBAAqB,GAAG,IAAO,yBAAyB;CAEhE,sBAAsB,MAAqB;EACzC,IAAM,IAAiB,EAA8B;EAIrD,AAHI,KACF,EAAqB,GAAgB,EAAE,oBAAiB,CAAC,GAE3D,EAAI,EAAE,oBAAiB,GAAG,IAAO,qBAAqB;CACxD;CAEA,2BAA2B,MACzB,EAAI,EAAE,yBAAsB,GAAG,IAAO,0BAA0B;CAElE,iBAAiB,MACf,EAAI,EAAE,eAAY,GAAG,IAAO,gBAAgB;AAChD,IACA,EACE,MAAM,qBACR,CACF,CACF"}
|
|
1
|
+
{"version":3,"file":"conversation-store.js","names":[],"sources":["../../src/stores/conversation-store.ts"],"sourcesContent":["import { create } from \"zustand\";\nimport { devtools } from \"zustand/middleware\";\nimport {\n getConversationState,\n setConversationState,\n} from \"#/utils/conversation-local-storage\";\n\nexport type ConversationTab =\n | \"files\"\n | \"commits\"\n | \"browser\"\n | \"terminal\"\n | \"planner\"\n | \"tasklist\"\n | \"usage\";\n\nexport type ConversationMode = \"code\" | \"plan\";\n\nexport type CommitsPaneSection = \"uncommitted\";\n\nexport interface IMessageToSend {\n text: string;\n timestamp: number;\n}\n\ninterface ConversationState {\n isRightPanelShown: boolean;\n isOverviewPanelShown: boolean;\n isOverviewPanelPeeked: boolean;\n selectedTab: ConversationTab | null;\n commitsAutoExpandSection: CommitsPaneSection | null;\n images: File[];\n files: File[];\n /** Image file names (e.g. pasted screenshots) to send via file upload instead of vision embed. */\n imagesMarkedUploadAsFile: string[];\n /** Image file names attached in chat (controls per-image upload-as-file UI). */\n pastedImageNames: string[];\n loadingFiles: string[]; // File names currently being processed\n loadingImages: string[]; // Image names currently being processed\n messageToSend: IMessageToSend | null;\n /** One-shot restore request consumed by the chat input when empty. */\n messageRestoreIfEmpty: IMessageToSend | null;\n shouldShownAgentLoading: boolean;\n submittedMessage: string | null;\n shouldHideSuggestions: boolean; // New state to hide suggestions when input expands\n hasRightPanelToggled: boolean;\n planContent: string | null;\n conversationMode: ConversationMode;\n subConversationTaskId: string | null; // Task ID for cloud sub-conversation creation\n localPlanningConversationId: string | null;\n}\n\ninterface ConversationActions {\n setIsRightPanelShown: (isRightPanelShown: boolean) => void;\n setIsOverviewPanelShown: (isOverviewPanelShown: boolean) => void;\n setIsOverviewPanelPeeked: (isOverviewPanelPeeked: boolean) => void;\n setSelectedTab: (selectedTab: ConversationTab | null) => void;\n setCommitsAutoExpandSection: (\n commitsAutoExpandSection: CommitsPaneSection | null,\n ) => void;\n setShouldShownAgentLoading: (shouldShownAgentLoading: boolean) => void;\n setShouldHideSuggestions: (shouldHideSuggestions: boolean) => void;\n addImages: (images: File[]) => void;\n addFiles: (files: File[]) => void;\n toggleImageUploadAsFile: (fileName: string) => void;\n markImagesAsPasted: (fileNames: string[]) => void;\n removeImage: (index: number) => void;\n removeFile: (index: number) => void;\n clearImages: () => void;\n clearFiles: () => void;\n clearAllFiles: () => void;\n addFileLoading: (fileName: string) => void;\n removeFileLoading: (fileName: string) => void;\n addImageLoading: (imageName: string) => void;\n removeImageLoading: (imageName: string) => void;\n clearAllLoading: () => void;\n setMessageToSend: (text: string) => void;\n clearMessageToSend: () => void;\n restoreMessageToInputIfEmpty: (text: string) => void;\n clearMessageRestoreIfEmpty: () => void;\n setSubmittedMessage: (message: string | null) => void;\n resetConversationState: () => void;\n setHasRightPanelToggled: (hasRightPanelToggled: boolean) => void;\n setConversationMode: (conversationMode: ConversationMode) => void;\n setSubConversationTaskId: (taskId: string | null) => void;\n setLocalPlanningConversationId: (conversationId: string | null) => void;\n setPlanContent: (planContent: string | null) => void;\n}\n\ntype ConversationStore = ConversationState & ConversationActions;\n\nconst getConversationIdFromLocation = (): string | null => {\n if (typeof window === \"undefined\") {\n return null;\n }\n\n const match = window.location.pathname.match(/\\/conversations\\/([^/]+)/);\n return match ? match[1] : null;\n};\n\nconst getInitialConversationMode = (): ConversationMode => {\n if (typeof window === \"undefined\") {\n return \"code\";\n }\n\n const conversationId = getConversationIdFromLocation();\n if (!conversationId) {\n return \"code\";\n }\n\n const state = getConversationState(conversationId);\n return state.conversationMode;\n};\n\nexport const useConversationStore = create<ConversationStore>()(\n devtools(\n (set) => ({\n // Initial state.\n //\n // The right-side drawer (`isRightPanelShown` / `hasRightPanelToggled`)\n // is intentionally *session-only* state: it always starts closed on\n // app load (or on opening a fresh/existing conversation after a\n // restart), but it survives in-app navigation because the Zustand\n // store stays alive across React Router transitions. Persisting the\n // open/closed state in localStorage made the panel feel sticky in\n // a way users didn't expect — they want a clean, focused chat view\n // when they come back to the app and only want the panel back when\n // they themselves opened it during the current session.\n isRightPanelShown: false,\n isOverviewPanelShown: false,\n isOverviewPanelPeeked: false,\n selectedTab: \"files\" as ConversationTab,\n commitsAutoExpandSection: null,\n images: [],\n files: [],\n imagesMarkedUploadAsFile: [],\n pastedImageNames: [],\n loadingFiles: [],\n loadingImages: [],\n messageToSend: null,\n messageRestoreIfEmpty: null,\n shouldShownAgentLoading: false,\n submittedMessage: null,\n shouldHideSuggestions: false,\n hasRightPanelToggled: false,\n planContent: null,\n conversationMode: getInitialConversationMode(),\n subConversationTaskId: null,\n localPlanningConversationId: null,\n\n // Actions\n setIsRightPanelShown: (isRightPanelShown) =>\n set({ isRightPanelShown }, false, \"setIsRightPanelShown\"),\n\n setIsOverviewPanelShown: (isOverviewPanelShown) =>\n set(\n { isOverviewPanelShown, isOverviewPanelPeeked: false },\n false,\n \"setIsOverviewPanelShown\",\n ),\n\n setIsOverviewPanelPeeked: (isOverviewPanelPeeked) =>\n set({ isOverviewPanelPeeked }, false, \"setIsOverviewPanelPeeked\"),\n\n setSelectedTab: (selectedTab) =>\n set({ selectedTab }, false, \"setSelectedTab\"),\n\n setCommitsAutoExpandSection: (commitsAutoExpandSection) =>\n set({ commitsAutoExpandSection }, false, \"setCommitsAutoExpandSection\"),\n\n setShouldShownAgentLoading: (shouldShownAgentLoading) =>\n set({ shouldShownAgentLoading }, false, \"setShouldShownAgentLoading\"),\n\n setShouldHideSuggestions: (shouldHideSuggestions) =>\n set({ shouldHideSuggestions }, false, \"setShouldHideSuggestions\"),\n\n addImages: (images) =>\n set(\n (state) => ({ images: [...state.images, ...images] }),\n false,\n \"addImages\",\n ),\n\n addFiles: (files) =>\n set(\n (state) => ({ files: [...state.files, ...files] }),\n false,\n \"addFiles\",\n ),\n\n toggleImageUploadAsFile: (fileName) =>\n set(\n (state) => {\n const marked = new Set(state.imagesMarkedUploadAsFile);\n if (marked.has(fileName)) {\n marked.delete(fileName);\n } else {\n marked.add(fileName);\n }\n return { imagesMarkedUploadAsFile: [...marked] };\n },\n false,\n \"toggleImageUploadAsFile\",\n ),\n\n markImagesAsPasted: (fileNames) =>\n set(\n (state) => {\n const merged = new Set([...state.pastedImageNames, ...fileNames]);\n return { pastedImageNames: [...merged] };\n },\n false,\n \"markImagesAsPasted\",\n ),\n\n removeImage: (index) =>\n set(\n (state) => {\n const removed = state.images[index];\n const newImages = [...state.images];\n newImages.splice(index, 1);\n return {\n images: newImages,\n imagesMarkedUploadAsFile: removed\n ? state.imagesMarkedUploadAsFile.filter(\n (name) => name !== removed.name,\n )\n : state.imagesMarkedUploadAsFile,\n pastedImageNames: removed\n ? state.pastedImageNames.filter((name) => name !== removed.name)\n : state.pastedImageNames,\n };\n },\n false,\n \"removeImage\",\n ),\n\n removeFile: (index) =>\n set(\n (state) => {\n const newFiles = [...state.files];\n newFiles.splice(index, 1);\n return { files: newFiles };\n },\n false,\n \"removeFile\",\n ),\n\n clearImages: () => set({ images: [] }, false, \"clearImages\"),\n\n clearFiles: () => set({ files: [] }, false, \"clearFiles\"),\n\n clearAllFiles: () =>\n set(\n {\n images: [],\n files: [],\n imagesMarkedUploadAsFile: [],\n pastedImageNames: [],\n loadingFiles: [],\n loadingImages: [],\n },\n false,\n \"clearAllFiles\",\n ),\n\n addFileLoading: (fileName) =>\n set(\n (state) => {\n if (!state.loadingFiles.includes(fileName)) {\n return { loadingFiles: [...state.loadingFiles, fileName] };\n }\n return state;\n },\n false,\n \"addFileLoading\",\n ),\n\n removeFileLoading: (fileName) =>\n set(\n (state) => ({\n loadingFiles: state.loadingFiles.filter(\n (name) => name !== fileName,\n ),\n }),\n false,\n \"removeFileLoading\",\n ),\n\n addImageLoading: (imageName) =>\n set(\n (state) => {\n if (!state.loadingImages.includes(imageName)) {\n return { loadingImages: [...state.loadingImages, imageName] };\n }\n return state;\n },\n false,\n \"addImageLoading\",\n ),\n\n removeImageLoading: (imageName) =>\n set(\n (state) => ({\n loadingImages: state.loadingImages.filter(\n (name) => name !== imageName,\n ),\n }),\n false,\n \"removeImageLoading\",\n ),\n\n clearAllLoading: () =>\n set({ loadingFiles: [], loadingImages: [] }, false, \"clearAllLoading\"),\n\n setMessageToSend: (text) =>\n set(\n {\n messageToSend: {\n text,\n timestamp: Date.now(),\n },\n },\n false,\n \"setMessageToSend\",\n ),\n\n // One-shot consume: clear after the composer applies it, so a never-sent\n // value can't replay into another conversation's composer on remount.\n clearMessageToSend: () =>\n set({ messageToSend: null }, false, \"clearMessageToSend\"),\n\n restoreMessageToInputIfEmpty: (text) =>\n set(\n {\n messageRestoreIfEmpty: {\n text,\n timestamp: Date.now(),\n },\n },\n false,\n \"restoreMessageToInputIfEmpty\",\n ),\n\n clearMessageRestoreIfEmpty: () =>\n set(\n { messageRestoreIfEmpty: null },\n false,\n \"clearMessageRestoreIfEmpty\",\n ),\n\n setSubmittedMessage: (submittedMessage) =>\n set({ submittedMessage }, false, \"setSubmittedMessage\"),\n\n resetConversationState: () =>\n set(\n {\n shouldHideSuggestions: false,\n conversationMode: getInitialConversationMode(),\n subConversationTaskId: null,\n localPlanningConversationId: null,\n planContent: null,\n },\n false,\n \"resetConversationState\",\n ),\n\n setHasRightPanelToggled: (hasRightPanelToggled) =>\n set({ hasRightPanelToggled }, false, \"setHasRightPanelToggled\"),\n\n setConversationMode: (conversationMode) => {\n const conversationId = getConversationIdFromLocation();\n if (conversationId) {\n setConversationState(conversationId, { conversationMode });\n }\n set({ conversationMode }, false, \"setConversationMode\");\n },\n\n setSubConversationTaskId: (subConversationTaskId) =>\n set({ subConversationTaskId }, false, \"setSubConversationTaskId\"),\n\n setLocalPlanningConversationId: (localPlanningConversationId) =>\n set(\n { localPlanningConversationId },\n false,\n \"setLocalPlanningConversationId\",\n ),\n\n setPlanContent: (planContent) =>\n set({ planContent }, false, \"setPlanContent\"),\n }),\n {\n name: \"conversation-store\",\n },\n ),\n);\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
require("../_virtual/_rolldown/runtime.cjs");const e=require("../node_modules/zustand/esm/react.cjs");var t=new Set,n=e.create()(e=>({freeModels:t,defaultModel:null,defaultModelReady:!1,setFlags:t=>e({freeModels:t.freeModels,defaultModel:t.defaultModel,defaultModelReady:!0}),markDefaultModelReady:()=>e({defaultModelReady:!0}),resetFlags:()=>e({freeModels:t,defaultModel:null,defaultModelReady:!1})}));exports.useFreeModelsStore=n;
|
|
2
|
+
//# sourceMappingURL=free-models-store.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"free-models-store.cjs","names":[],"sources":["../../src/stores/free-models-store.ts"],"sourcesContent":["import { create } from \"zustand\";\nimport type { FreeModelSet } from \"#/utils/format-model-name\";\n\ninterface FreeModelsState {\n /**\n * DB-driven set of free ``provider/model`` ids (the same channel that carries\n * `verified`). Empty on backends without free metadata (e.g. the local\n * agent-server), so consumers uniformly treat \"not in set\" as paid.\n */\n freeModels: FreeModelSet;\n /** DB-driven default OpenHands model id (``openhands/<model>``), or null. */\n defaultModel: string | null;\n /** True once the backend flags query has settled at least once. */\n defaultModelReady: boolean;\n}\n\ninterface FreeModelsActions {\n /**\n * Replaces the DB-driven flags. Called once by the app-level hydrator\n * ({@link useHydrateFreeModels}) after the backend model list is fetched, so\n * leaf components can read the flags synchronously via zustand selectors\n * without needing a QueryClientProvider in scope.\n */\n setFlags: (flags: {\n freeModels: FreeModelSet;\n defaultModel: string | null;\n }) => void;\n markDefaultModelReady: () => void;\n resetFlags: () => void;\n}\n\ntype FreeModelsStore = FreeModelsState & FreeModelsActions;\n\nconst EMPTY_FREE_MODELS: FreeModelSet = new Set<string>();\n\nexport const useFreeModelsStore = create<FreeModelsStore>()((set) => ({\n freeModels: EMPTY_FREE_MODELS,\n defaultModel: null,\n defaultModelReady: false,\n setFlags: (flags) =>\n set({\n freeModels: flags.freeModels,\n defaultModel: flags.defaultModel,\n defaultModelReady: true,\n }),\n markDefaultModelReady: () => set({ defaultModelReady: true }),\n resetFlags: () =>\n set({\n freeModels: EMPTY_FREE_MODELS,\n defaultModel: null,\n defaultModelReady: false,\n }),\n}));\n"],"mappings":"sGAiCA,IAAM,EAAkC,IAAI,IAE/B,EAAqB,EAAA,OAAwB,EAAG,IAAS,CACpE,WAAY,EACZ,aAAc,KACd,kBAAmB,GACnB,SAAW,GACT,EAAI,CACF,WAAY,EAAM,WAClB,aAAc,EAAM,aACpB,kBAAmB,EACrB,CAAC,EACH,0BAA6B,EAAI,CAAE,kBAAmB,EAAK,CAAC,EAC5D,eACE,EAAI,CACF,WAAY,EACZ,aAAc,KACd,kBAAmB,EACrB,CAAC,CACL,EAAE"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { FreeModelSet } from "#/utils/format-model-name";
|
|
2
|
+
interface FreeModelsState {
|
|
3
|
+
/**
|
|
4
|
+
* DB-driven set of free ``provider/model`` ids (the same channel that carries
|
|
5
|
+
* `verified`). Empty on backends without free metadata (e.g. the local
|
|
6
|
+
* agent-server), so consumers uniformly treat "not in set" as paid.
|
|
7
|
+
*/
|
|
8
|
+
freeModels: FreeModelSet;
|
|
9
|
+
/** DB-driven default OpenHands model id (``openhands/<model>``), or null. */
|
|
10
|
+
defaultModel: string | null;
|
|
11
|
+
/** True once the backend flags query has settled at least once. */
|
|
12
|
+
defaultModelReady: boolean;
|
|
13
|
+
}
|
|
14
|
+
interface FreeModelsActions {
|
|
15
|
+
/**
|
|
16
|
+
* Replaces the DB-driven flags. Called once by the app-level hydrator
|
|
17
|
+
* ({@link useHydrateFreeModels}) after the backend model list is fetched, so
|
|
18
|
+
* leaf components can read the flags synchronously via zustand selectors
|
|
19
|
+
* without needing a QueryClientProvider in scope.
|
|
20
|
+
*/
|
|
21
|
+
setFlags: (flags: {
|
|
22
|
+
freeModels: FreeModelSet;
|
|
23
|
+
defaultModel: string | null;
|
|
24
|
+
}) => void;
|
|
25
|
+
markDefaultModelReady: () => void;
|
|
26
|
+
resetFlags: () => void;
|
|
27
|
+
}
|
|
28
|
+
type FreeModelsStore = FreeModelsState & FreeModelsActions;
|
|
29
|
+
export declare const useFreeModelsStore: import("zustand").UseBoundStore<import("zustand").StoreApi<FreeModelsStore>>;
|
|
30
|
+
export {};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { create as e } from "../node_modules/zustand/esm/react.js";
|
|
2
|
+
//#region src/stores/free-models-store.ts
|
|
3
|
+
var t = /* @__PURE__ */ new Set(), n = e()((e) => ({
|
|
4
|
+
freeModels: t,
|
|
5
|
+
defaultModel: null,
|
|
6
|
+
defaultModelReady: !1,
|
|
7
|
+
setFlags: (t) => e({
|
|
8
|
+
freeModels: t.freeModels,
|
|
9
|
+
defaultModel: t.defaultModel,
|
|
10
|
+
defaultModelReady: !0
|
|
11
|
+
}),
|
|
12
|
+
markDefaultModelReady: () => e({ defaultModelReady: !0 }),
|
|
13
|
+
resetFlags: () => e({
|
|
14
|
+
freeModels: t,
|
|
15
|
+
defaultModel: null,
|
|
16
|
+
defaultModelReady: !1
|
|
17
|
+
})
|
|
18
|
+
}));
|
|
19
|
+
//#endregion
|
|
20
|
+
export { n as useFreeModelsStore };
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=free-models-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"free-models-store.js","names":[],"sources":["../../src/stores/free-models-store.ts"],"sourcesContent":["import { create } from \"zustand\";\nimport type { FreeModelSet } from \"#/utils/format-model-name\";\n\ninterface FreeModelsState {\n /**\n * DB-driven set of free ``provider/model`` ids (the same channel that carries\n * `verified`). Empty on backends without free metadata (e.g. the local\n * agent-server), so consumers uniformly treat \"not in set\" as paid.\n */\n freeModels: FreeModelSet;\n /** DB-driven default OpenHands model id (``openhands/<model>``), or null. */\n defaultModel: string | null;\n /** True once the backend flags query has settled at least once. */\n defaultModelReady: boolean;\n}\n\ninterface FreeModelsActions {\n /**\n * Replaces the DB-driven flags. Called once by the app-level hydrator\n * ({@link useHydrateFreeModels}) after the backend model list is fetched, so\n * leaf components can read the flags synchronously via zustand selectors\n * without needing a QueryClientProvider in scope.\n */\n setFlags: (flags: {\n freeModels: FreeModelSet;\n defaultModel: string | null;\n }) => void;\n markDefaultModelReady: () => void;\n resetFlags: () => void;\n}\n\ntype FreeModelsStore = FreeModelsState & FreeModelsActions;\n\nconst EMPTY_FREE_MODELS: FreeModelSet = new Set<string>();\n\nexport const useFreeModelsStore = create<FreeModelsStore>()((set) => ({\n freeModels: EMPTY_FREE_MODELS,\n defaultModel: null,\n defaultModelReady: false,\n setFlags: (flags) =>\n set({\n freeModels: flags.freeModels,\n defaultModel: flags.defaultModel,\n defaultModelReady: true,\n }),\n markDefaultModelReady: () => set({ defaultModelReady: true }),\n resetFlags: () =>\n set({\n freeModels: EMPTY_FREE_MODELS,\n defaultModel: null,\n defaultModelReady: false,\n }),\n}));\n"],"mappings":";;AAiCA,IAAM,oBAAkC,IAAI,IAAY,GAE3C,IAAqB,EAAwB,GAAG,OAAS;CACpE,YAAY;CACZ,cAAc;CACd,mBAAmB;CACnB,WAAW,MACT,EAAI;EACF,YAAY,EAAM;EAClB,cAAc,EAAM;EACpB,mBAAmB;CACrB,CAAC;CACH,6BAA6B,EAAI,EAAE,mBAAmB,GAAK,CAAC;CAC5D,kBACE,EAAI;EACF,YAAY;EACZ,cAAc;EACd,mBAAmB;CACrB,CAAC;AACL,EAAE"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require("../_virtual/_rolldown/runtime.cjs");const e=require("../node_modules/zustand/esm/react.cjs"),t=require("../node_modules/zustand/esm/middleware.cjs"),n=require("../node_modules/uuid/dist/v4.cjs");var r=(e,t,n)=>({entriesByConversation:{...e.entriesByConversation,[t]:[...e.entriesByConversation[t]??[],n]}}),i=e.create()(t.devtools(e=>({entriesByConversation:{},activeProfileByConversation:{},show:(t,i,a)=>e(e=>r(e,t,{id:n.default(),anchorEventId:i,profiles:a})),recordSwitch:(t,i,a)=>e(e=>({...r(e,t,{id:n.default(),anchorEventId:i,profiles:[],switchedTo:a}),activeProfileByConversation:{...e.activeProfileByConversation,[t]:a}})),seedSwitches:(t,n)=>e(e=>{let r=e.entriesByConversation[t]??[],i=new Set(r.map(e=>e.id)),a=n.filter(e=>!i.has(e.id)).map(e=>({id:e.id,anchorEventId:e.anchorEventId,profiles:[],switchedTo:e.profileName}));return a.length===0?e:{entriesByConversation:{...e.entriesByConversation,[t]:[...r,...a]}}}),clearActiveProfile:t=>e(e=>{if(!(t in e.activeProfileByConversation))return e;let n={...e.activeProfileByConversation};return delete n[t],{activeProfileByConversation:n}}),clear:t=>e(e=>{let n={...e.entriesByConversation};delete n[t];let r={...e.activeProfileByConversation};return delete r[t],{entriesByConversation:n,activeProfileByConversation:r}}),clearAll:()=>e({entriesByConversation:{},activeProfileByConversation:{}})}),{name:`ModelStore`}));exports.useModelStore=i;
|
|
1
|
+
require("../_virtual/_rolldown/runtime.cjs");const e=require("../node_modules/zustand/esm/react.cjs"),t=require("../node_modules/zustand/esm/middleware.cjs"),n=require("../node_modules/uuid/dist/v4.cjs");var r=(e,t,n)=>({entriesByConversation:{...e.entriesByConversation,[t]:[...e.entriesByConversation[t]??[],n]}}),i=e.create()(t.devtools(e=>({entriesByConversation:{},activeProfileByConversation:{},show:(t,i,a)=>e(e=>r(e,t,{id:n.default(),anchorEventId:i,profiles:a})),recordSwitch:(t,i,a)=>e(e=>({...r(e,t,{id:n.default(),anchorEventId:i,profiles:[],switchedTo:a}),activeProfileByConversation:{...e.activeProfileByConversation,[t]:a}})),seedSwitches:(t,n)=>e(e=>{let r=e.entriesByConversation[t]??[],i=new Set(r.map(e=>e.id)),a=n.filter(e=>!i.has(e.id)).map(e=>({id:e.id,anchorEventId:e.anchorEventId,profiles:[],switchedTo:e.profileName}));return a.length===0?e:{entriesByConversation:{...e.entriesByConversation,[t]:[...r,...a]}}}),setActiveProfile:(t,n)=>e(e=>({activeProfileByConversation:{...e.activeProfileByConversation,[t]:n}})),clearActiveProfile:t=>e(e=>{if(!(t in e.activeProfileByConversation))return e;let n={...e.activeProfileByConversation};return delete n[t],{activeProfileByConversation:n}}),clear:t=>e(e=>{let n={...e.entriesByConversation};delete n[t];let r={...e.activeProfileByConversation};return delete r[t],{entriesByConversation:n,activeProfileByConversation:r}}),clearAll:()=>e({entriesByConversation:{},activeProfileByConversation:{}})}),{name:`ModelStore`}));exports.useModelStore=i;
|
|
2
2
|
//# sourceMappingURL=model-store.cjs.map
|