@openhands/agent-canvas 1.12.0 → 1.14.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-BkL3HWa3.js → acp-providers-CYy8qA2z.js} +1 -1
- package/build/assets/active-backend-context-BZDG15C0.js +2 -0
- package/build/assets/{agent-context-settings-CzWS1DgR.js → agent-context-settings-DGWBBbcp.js} +1 -1
- package/build/assets/agent-profiles-settings-DrkGdf4_.js +1 -0
- package/build/assets/agent-server-conversation-service.api-DK56YPTs.js +86 -0
- package/build/assets/{agent-settings-D2J1dKVd.js → agent-settings-DfcSgkLD.js} +2 -2
- package/build/assets/agent-settings-Lrc5-twS.js +1 -0
- package/build/assets/{alert-banner-lrK-2_0Y.js → alert-banner-BgDHhL7b.js} +1 -1
- package/build/assets/api-error-message-BEIE_yD1.js +1 -0
- package/build/assets/{api-key-entry-screen-D70oJj2c.js → api-key-entry-screen-DaZnOlVo.js} +1 -1
- package/build/assets/{app-settings-D0OKHB3M.js → app-settings-BG5NAUbC.js} +1 -1
- package/build/assets/automation-detail-D4Hs831Z.js +3 -0
- package/build/assets/automation-export-n0X6FB0C.js +2 -0
- package/build/assets/automation-git-sync-CDrm8WV7.js +1 -0
- package/build/assets/automation-setup-route-CZCl4ONs.js +1 -0
- package/build/assets/{automation-templates-D9gs6ihu.js → automation-templates-DFF96AdL.js} +1 -1
- package/build/assets/automations-list-Bl-oGOrV.js +1 -0
- package/build/assets/{back-nav-button-B3pYwmUJ.js → back-nav-button-H_ThtDA0.js} +1 -1
- package/build/assets/{backend-form-modal-HwclKrUS.js → backend-form-modal-CbCemvHt.js} +1 -1
- package/build/assets/backend-not-configured-DP8KLNq_.js +1 -0
- package/build/assets/{backend-synced-settings-badge-YI3k09Wr.js → backend-synced-settings-badge-BBASWqsb.js} +1 -1
- package/build/assets/{badge-Dpn3-LTV.js → badge-B-51h-SW.js} +1 -1
- package/build/assets/{base-modal-3NmIOKDm.js → base-modal-BbjycA8X.js} +1 -1
- package/build/assets/bot-CGPCg03p.js +1 -0
- package/build/assets/{brand-button-CJcwjnfb.js → brand-button-Blxv5nww.js} +1 -1
- package/build/assets/browser-CuW0nWvh.js +7 -0
- package/build/assets/{browser-tab-4CPdj3J3.js → browser-tab-D5G0ORwt.js} +1 -1
- package/build/assets/{chat-send-button-B8n6-DQA.js → chat-send-button-BD2tii1r.js} +1 -1
- package/build/assets/check-DSuS-lyr.js +1 -0
- package/build/assets/chevron-down-CgGcmtE2.js +1 -0
- package/build/assets/circle-check-CG5-NPw7.js +1 -0
- package/build/assets/{circle-plus-check-toggle-BVzv5EkZ.js → circle-plus-check-toggle-ASbpB8vN.js} +1 -1
- package/build/assets/cloud-funnel-analytics-GlCUG0gk.js +1 -0
- package/build/assets/cog-CZiR80uT.js +1 -0
- package/build/assets/{combobox-caret-BlmRwiM8.js → combobox-caret-DvpEsh2O.js} +1 -1
- package/build/assets/{command-menu-BKOLj-TC.js → command-menu-DwUQzjYP.js} +1 -1
- package/build/assets/{condenser-settings-DLQogFnB.js → condenser-settings-BptcoiLA.js} +1 -1
- package/build/assets/{confirmation-modal-DAH0XtOp.js → confirmation-modal-CiEwxZAA.js} +1 -1
- package/build/assets/{context-menu-list-item-BQhmFVEK.js → context-menu-list-item-CdcamfM1.js} +1 -1
- package/build/assets/conversation-DREHj4nT.js +1 -0
- package/build/assets/conversation-DotRfiDz.js +90 -0
- package/build/assets/conversation-panel-DREHj4nT.js +1 -0
- package/build/assets/conversation-state-store-DMLtlHbE.js +1 -0
- package/build/assets/conversation-store-Blc5xysY.js +6 -0
- package/build/assets/{conversation-tab-empty-state-C9sfDOlt.js → conversation-tab-empty-state-D-puECpY.js} +1 -1
- package/build/assets/{copy-to-clipboard-button-DatoElj8.js → copy-to-clipboard-button-BGxcUbgy.js} +1 -1
- package/build/assets/{device-verify-BIjXeW9N.js → device-verify-CZJfWaJf.js} +1 -1
- package/build/assets/{dropdown-classes-zFW7qPSK.js → dropdown-classes-tLhpwtxS.js} +1 -1
- package/build/assets/{entry.client-EBn3ZtNP.js → entry.client-D8GnI6GZ.js} +2 -2
- package/build/assets/{enum-filter-dropdown-CctILg5t.js → enum-filter-dropdown-Fk8k60nk.js} +1 -1
- package/build/assets/{environment-switch-overlay-Cvmo6clk.js → environment-switch-overlay-DeztVYuL.js} +1 -1
- package/build/assets/{extensions-hub-BZ3HYztk.js → extensions-hub-Cd6GCYzq.js} +1 -1
- package/build/assets/{extensions-navigation-Bnx32WAb.js → extensions-navigation-C4sgZg-y.js} +1 -1
- package/build/assets/external-link-C0UpBgsE.js +1 -0
- package/build/assets/{file-text-RecuaId_.js → file-text-C6WYtNdV.js} +1 -1
- package/build/assets/files-tab-BW_qzyAm.js +1 -0
- package/build/assets/{form-control-classes-DLN3Qgub.js → form-control-classes-CGXBLcn1.js} +1 -1
- package/build/assets/format-model-name-BNPKVsIq.js +1 -0
- package/build/assets/format-relative-time-ZhQD4rsl.js +1 -0
- package/build/assets/git-provider-icon-CaQ1yLPi.js +1 -0
- package/build/assets/{git-repo-dropdown-B5VnMftu.js → git-repo-dropdown-CgXR6M_E.js} +1 -1
- package/build/assets/git-repo-dropdown-D2Uei3CO.js +1 -0
- package/build/assets/{highlighted-source-view-CgJfD5VT.js → highlighted-source-view-C_YOp8Fo.js} +1 -1
- package/build/assets/home-DNzzJcMP.js +1 -0
- package/build/assets/home-aCos-5vc.js +1 -0
- package/build/assets/{home-store-Cubdq0uP.js → home-store-DgzViC3f.js} +1 -1
- package/build/assets/index-home-DNzzJcMP.js +1 -0
- package/build/assets/info-CLoC1LRo.js +1 -0
- package/build/assets/install-server-modal-D7zIqNKz.js +1 -0
- package/build/assets/kebab-menu-item-content-DERMdnDv.js +1 -0
- package/build/assets/{launch-c4GEP8oo.js → launch-5PjKeLak.js} +1 -1
- package/build/assets/{list-todo-CheUtB7F.js → list-todo-BF049YaY.js} +1 -1
- package/build/assets/llm-not-configured-banner-BK9z5eS0.js +27 -0
- package/build/assets/llm-settings-BLAMK2tR.js +1 -0
- package/build/assets/llm-settings-BWsbarGM.js +1 -0
- package/build/assets/llm-subscription-service-SfnEV9Uc.js +1 -0
- package/build/assets/loader-circle-D7IagAyF.js +1 -0
- package/build/assets/{loading-spinner-CN3riY7k.js → loading-spinner-DBgXgra0.js} +1 -1
- package/build/assets/{manage-backends-modal-DTCME_Pu.js → manage-backends-modal-BTqNPhzc.js} +1 -1
- package/build/assets/manifest-abebca3c.js +1 -0
- package/build/assets/manifest-subpage-layout-Rn-glaxV.js +1 -0
- package/build/assets/{map-provider-7Bp2aih5.js → map-provider-BK4HnqYz.js} +1 -1
- package/build/assets/markdown-renderer-Cp6DlHQN.js +8 -0
- package/build/assets/{mcp-Da7wFU7A.js → mcp-BC-Ixn4T.js} +2 -2
- package/build/assets/mcp-marketplace-utils-BJWJgbB6.js +1 -0
- package/build/assets/messages-CzFKrzPG.js +40 -0
- package/build/assets/{modal-body-duRaxj_K.js → modal-body-BdKfD3Hl.js} +1 -1
- package/build/assets/{modal-classes-CLEXO6dj.js → modal-classes-D5_b5vMi.js} +1 -1
- package/build/assets/{modal-close-button-D0aT02hs.js → modal-close-button-objukxk_.js} +1 -1
- package/build/assets/{mouse-pointer-click-Px-dXWcS.js → mouse-pointer-click-C_gXyLyD.js} +1 -1
- package/build/assets/{npm-Cswluf6-.js → npm-CHVHV1MC.js} +1 -1
- package/build/assets/{onboarding-BKbTYlW1.js → onboarding-Diw0V51A.js} +1 -1
- package/build/assets/onboarding-modal-Da4yHzsA.js +1 -0
- package/build/assets/{organization-service.api-DK8csGvK.js → organization-service.api-BztSy69u.js} +1 -1
- package/build/assets/parse-git-remote-url-BkXN9jzl.js +1 -0
- package/build/assets/pencil-49avMHlD.js +1 -0
- package/build/assets/{planner-tab-D-mZ1I7n.js → planner-tab-CJiSpNax.js} +1 -1
- package/build/assets/{plugins-management-service-CywqyfLK.js → plugins-management-service-lHdNKWNU.js} +1 -1
- package/build/assets/plus-C0BagBpV.js +1 -0
- package/build/assets/profiles-service.api-BLr7FXec.js +1 -0
- package/build/assets/providers-CWXnb7S3.js +1 -0
- package/build/assets/{proxy-b4aqL4SX.js → proxy-DYDXxtje.js} +1 -1
- package/build/assets/{puzzle-B3v361yY.js → puzzle-Bt2B1rzf.js} +1 -1
- package/build/assets/recommended-automations-launcher-CcFMfJRR.js +1 -0
- package/build/assets/refresh-cw-nmcesifB.js +1 -0
- package/build/assets/root-CT4t7apy.css +1 -0
- package/build/assets/root-DnRgLKpU.js +2 -0
- package/build/assets/root-layout-2L9tr-BN.js +2 -0
- package/build/assets/{schema-field-Z-rMg9ti.js → schema-field-C59lVZTA.js} +1 -1
- package/build/assets/{sdk-section-page-m_cjygxR.js → sdk-section-page-BbBEQQjq.js} +1 -1
- package/build/assets/search-CYSDBczG.js +1 -0
- package/build/assets/secrets-service-BtsgYSlj.js +1 -0
- package/build/assets/secrets-settings-DJ0OKa4_.js +1 -0
- package/build/assets/{segmented-toggle-SmvsR3jW.js → segmented-toggle-DiVfTZuN.js} +1 -1
- package/build/assets/{settings-CZPGNens.js → settings-CDqL_Uqh.js} +1 -1
- package/build/assets/{settings-CWFxymAf.js → settings-DcNPxz0v.js} +1 -1
- package/build/assets/{settings-dropdown-input-TWIeiG02.js → settings-dropdown-input-Ba1UN5Du.js} +1 -1
- package/build/assets/{settings-index-Dtlegd6s.js → settings-index-Cz2cKt2K.js} +1 -1
- package/build/assets/{settings-input-D61Vzp9e.js → settings-input-CWUEHHvS.js} +1 -1
- package/build/assets/{settings-list-classes-sE0ASr1s.js → settings-list-classes-DdcLXDGn.js} +1 -1
- package/build/assets/{settings-modal-CalzJP2l.js → settings-modal-nEEK1Kh1.js} +1 -1
- package/build/assets/{settings-service.api-DfPYaxZJ.js → settings-service.api-3yAUFcaP.js} +1 -1
- package/build/assets/{settings-switch-Drt-rF5s.js → settings-switch-Dk9hChx1.js} +1 -1
- package/build/assets/{settings-utils-gw2ppAvw.js → settings-utils-CxjtCSB3.js} +1 -1
- package/build/assets/shared-conversation-DbAcrx3s.js +1 -0
- package/build/assets/shield-check-CiOTXxV2.js +1 -0
- package/build/assets/{sidebar-layout-Dxg6zc2K.js → sidebar-layout-lrfPooIB.js} +1 -1
- package/build/assets/{sidebar-mobile-menu-toggle-C6HpQ55l.js → sidebar-mobile-menu-toggle-KERXfNu1.js} +1 -1
- package/build/assets/{sidebar-nav-link-CxLoG-dG.js → sidebar-nav-link-B8lFD6Cb.js} +1 -1
- package/build/assets/{sidebar-store-BJeYY-E9.js → sidebar-store-u6pUpxJ7.js} +1 -1
- package/build/assets/{skill-card-pill-row-B_BYBONu.js → skill-card-pill-row-dGIUzr_b.js} +1 -1
- package/build/assets/{skill-icon-badge-CN41Hy9l.js → skill-icon-badge-kkOWZ89w.js} +1 -1
- package/build/assets/{skill-scope-Dt1V5X2p.js → skill-scope-DWN1PBPH.js} +1 -1
- package/build/assets/{skills-plugins-B-H0cCOP.js → skills-plugins-DFjH2Nq6.js} +1 -1
- package/build/assets/{skills-settings-DthdIDUb.js → skills-settings-DIHpl3ol.js} +2 -2
- package/build/assets/{sparkles-g7y3r-Ut.js → sparkles-ntyMLnbj.js} +1 -1
- package/build/assets/{styled-tooltip-C5C07RQC.js → styled-tooltip-B6JXcsmL.js} +1 -1
- package/build/assets/{task-list-tab-BTde81Iu.js → task-list-tab-aEJzEcHD.js} +1 -1
- package/build/assets/{terminal-DRrJo-cR.js → terminal-Dch7Ty5K.js} +1 -1
- package/build/assets/{toggle-switch-CIioisto.js → toggle-switch-B2MLKsgt.js} +1 -1
- package/build/assets/trash-2-yZnDM4Ji.js +1 -0
- package/build/assets/{typography-D9tiHct7.js → typography-DB5HoCk0.js} +1 -1
- package/build/assets/usage-tab-DrEtBmBT.js +1 -0
- package/build/assets/use-acp-credential-form-c8KXAa8A.js +1 -0
- package/build/assets/{use-activate-agent-profile-DrPzIKJF.js → use-activate-agent-profile-B0p34N3q.js} +1 -1
- package/build/assets/use-agent-profiles-CPIc6wLH.js +1 -0
- package/build/assets/{use-can-manage-org-profiles-BzE28H3x.js → use-can-manage-org-profiles-Dz_8Eqkv.js} +1 -1
- package/build/assets/{use-cloud-current-user-id-U6HPjy50.js → use-cloud-current-user-id-DvUVqCle.js} +1 -1
- package/build/assets/use-config-C3PO4TBw.js +1 -0
- package/build/assets/use-create-conversation-DVrA_uLD.js +1 -0
- package/build/assets/use-create-secret-DbBIpaCR.js +1 -0
- package/build/assets/use-get-secrets-6PBitf54.js +1 -0
- package/build/assets/use-has-permission-CQ31Cl8j.js +1 -0
- package/build/assets/use-is-authed-2UrDIziV.js +1 -0
- package/build/assets/use-is-creating-conversation-BvYpmb3v.js +1 -0
- package/build/assets/{use-launch-skill-in-chat-BcKNjxxd.js → use-launch-skill-in-chat-COnDpxCQ.js} +1 -1
- package/build/assets/use-llm-profiles-diZS4FiN.js +1 -0
- package/build/assets/use-manifest-capabilities-HIWCtIUm.js +1 -0
- package/build/assets/{use-onboarding-completion-6kWOW3ul.js → use-onboarding-completion-Bs8PcXik.js} +1 -1
- package/build/assets/{use-plugins-marketplace-CqkR8kLE.js → use-plugins-marketplace-BCuNLFsr.js} +1 -1
- package/build/assets/use-save-agent-profile-BaMNSpBV.js +1 -0
- package/build/assets/{use-save-settings-DIEurJ3D.js → use-save-settings-BahvC2Gw.js} +1 -1
- package/build/assets/{use-settings-BmLzQjnC.js → use-settings-C6ZxpBDX.js} +1 -1
- package/build/assets/{use-settings-nav-items-DV9qgeu7.js → use-settings-nav-items-Bqn69Ggw.js} +2 -2
- package/build/assets/use-tracking-Bhu7gk2y.js +3 -0
- package/build/assets/{use-user-conversation-Dt-W6uNw.js → use-user-conversation-BkNXpXrd.js} +1 -1
- package/build/assets/{useInfiniteQuery-DbCv0Jzd.js → useInfiniteQuery-c_OmS3lK.js} +1 -1
- package/build/assets/{useMutation-ChpkYxI5.js → useMutation-6ZsQCqAn.js} +1 -1
- package/build/assets/{useQueries-Cjv3E8_1.js → useQueries-xDrGlTO_.js} +1 -1
- package/build/assets/{useQuery-BCnzy4LX.js → useQuery-Bs5NFz2s.js} +1 -1
- package/build/assets/utils-DUD5ScdA.js +1 -0
- package/build/assets/{vendor~browser-DJ1pl_wn.js → vendor~browser-B-fae1JU.js} +14 -14
- package/build/assets/{vendor~entry.client-CgNUwtQL.js → vendor~entry.client-BFE7Llz9.js} +1 -1
- package/build/assets/{vendor~entry.client-zSIea5EO.js → vendor~entry.client-BaKt_PIp.js} +1 -1
- package/build/assets/{vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~kv3pap4j-oGvLV0dO.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~kepq2zme-D87mAf6K.js} +3 -3
- package/build/assets/{vendor~files-tab-C87pjSpi.js → vendor~files-tab-B6POTS66.js} +1 -1
- package/build/assets/vendor~index-home~home~conversation-panel~conversation-53Q_U6uP.js +13 -0
- package/build/assets/vendor~root-layout-DeQACFVA.js +1 -0
- package/build/assets/{vendor~root-layout~conversation-panel~conversation-DEzjR4K7.js → vendor~root-layout~conversation-panel~conversation-bv7ooVgH.js} +1 -1
- package/build/assets/{vendor~root-layout~conversation-panel~conversation~skills-settings~automations-list~shared-~bovqqk8e-U-xdsAEx.js → vendor~root-layout~conversation-panel~conversation~skills-settings~automations-list~shared-~bovqqk8e-e8pX05xf.js} +1 -1
- package/build/assets/{vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation-CQR5Sa0H.js → vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation-BvS6PCK2.js} +1 -1
- package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~hjcjabwg-CuQhkiS7.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~hjcjabwg-DOPLJMH9.js} +2 -2
- package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~gxu4j2ea-Cwhh3zLe.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~iw7io29p-Dz8NQve5.js} +1 -1
- package/build/assets/{verification-settings-oi54wEc1.js → verification-settings-COueVXmM.js} +1 -1
- package/build/assets/{wrench-B1_H-tL1.js → wrench-C95ujnYo.js} +1 -1
- package/build/assets/x-86ZCfxKY.js +1 -0
- package/build/assets/zap-DRa-r-Tf.js +1 -0
- package/build/index.html +4 -4
- package/build/locales/ar/openhands.json +88 -3
- package/build/locales/ca/openhands.json +88 -3
- package/build/locales/de/openhands.json +88 -3
- package/build/locales/en/openhands.json +88 -3
- package/build/locales/es/openhands.json +88 -3
- package/build/locales/fr/openhands.json +88 -3
- package/build/locales/it/openhands.json +88 -3
- package/build/locales/ja/openhands.json +88 -3
- package/build/locales/ko-KR/openhands.json +88 -3
- package/build/locales/no/openhands.json +88 -3
- package/build/locales/pt/openhands.json +88 -3
- package/build/locales/tr/openhands.json +88 -3
- package/build/locales/uk/openhands.json +88 -3
- package/build/locales/zh-CN/openhands.json +88 -3
- package/build/locales/zh-TW/openhands.json +88 -3
- package/config/defaults.json +3 -3
- package/dist/api/agent-server-compatibility.cjs +1 -1
- package/dist/api/agent-server-compatibility.cjs.map +1 -1
- package/dist/api/agent-server-compatibility.js +1 -1
- package/dist/api/agent-server-compatibility.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 +10 -0
- package/dist/api/automation-service/automation-service.api.js +42 -0
- package/dist/api/automation-service/automation-service.api.js.map +1 -1
- package/dist/api/cloud/conversation-service.api.cjs +1 -1
- package/dist/api/cloud/conversation-service.api.cjs.map +1 -1
- package/dist/api/cloud/conversation-service.api.d.ts +9 -0
- package/dist/api/cloud/conversation-service.api.js +11 -1
- package/dist/api/cloud/conversation-service.api.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 +24 -1
- package/dist/api/conversation-service/agent-server-conversation-service.api.js +116 -97
- package/dist/api/conversation-service/agent-server-conversation-service.api.js.map +1 -1
- package/dist/api/llm-balance-service.cjs +2 -0
- package/dist/api/llm-balance-service.cjs.map +1 -0
- package/dist/api/llm-balance-service.d.ts +33 -0
- package/dist/api/llm-balance-service.js +53 -0
- package/dist/api/llm-balance-service.js.map +1 -0
- package/dist/api/llm-subscription-service.cjs +1 -1
- package/dist/api/llm-subscription-service.cjs.map +1 -1
- package/dist/api/llm-subscription-service.js +42 -34
- package/dist/api/llm-subscription-service.js.map +1 -1
- package/dist/api/profiles-service/profiles-service.api.cjs +1 -1
- package/dist/api/profiles-service/profiles-service.api.cjs.map +1 -1
- package/dist/api/profiles-service/profiles-service.api.d.ts +15 -2
- package/dist/api/profiles-service/profiles-service.api.js +25 -2
- package/dist/api/profiles-service/profiles-service.api.js.map +1 -1
- package/dist/api/secrets-service.cjs +1 -1
- package/dist/api/secrets-service.cjs.map +1 -1
- package/dist/api/secrets-service.d.ts +5 -0
- package/dist/api/secrets-service.js +12 -6
- package/dist/api/secrets-service.js.map +1 -1
- package/dist/components/conversation/index.cjs +1 -1
- package/dist/components/conversation/index.d.ts +0 -1
- package/dist/components/conversation/index.js +0 -1
- package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.cjs +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.cjs.map +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.js +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.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.js +24 -23
- 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/index.d.ts +0 -1
- package/dist/components/conversation-events/chat/group-events.cjs +1 -1
- package/dist/components/conversation-events/chat/group-events.cjs.map +1 -1
- package/dist/components/conversation-events/chat/group-events.d.ts +3 -3
- package/dist/components/conversation-events/chat/group-events.js +27 -26
- package/dist/components/conversation-events/chat/group-events.js.map +1 -1
- package/dist/components/features/automations/git-sync/git-sync-activity-row.d.ts +15 -0
- package/dist/components/features/automations/git-sync/git-sync-config-form.d.ts +13 -0
- package/dist/components/features/automations/git-sync/git-sync-error-banner.d.ts +6 -0
- package/dist/components/features/automations/git-sync/git-sync-not-local-state.d.ts +1 -0
- package/dist/components/features/automations/git-sync/git-sync-overview-section.d.ts +12 -0
- package/dist/components/features/automations/git-sync/git-sync-skeleton.d.ts +1 -0
- package/dist/components/features/automations/git-sync/git-sync-status-pill.d.ts +7 -0
- package/dist/components/features/automations/git-sync/git-sync-unsupported-state.d.ts +7 -0
- package/dist/components/features/automations/recommended-automations-section.d.ts +7 -0
- package/dist/components/features/automations/responder-deployment-modal.d.ts +2 -1
- 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 +177 -176
- package/dist/components/features/chat/chat-interface.js.map +1 -1
- package/dist/components/features/chat/components/chat-input-actions.cjs +1 -1
- package/dist/components/features/chat/components/chat-input-actions.cjs.map +1 -1
- package/dist/components/features/chat/components/chat-input-actions.js +123 -118
- package/dist/components/features/chat/components/chat-input-actions.js.map +1 -1
- package/dist/components/features/chat/components/chat-input-grip.cjs +1 -1
- package/dist/components/features/chat/components/chat-input-grip.cjs.map +1 -1
- package/dist/components/features/chat/components/chat-input-grip.d.ts +2 -1
- package/dist/components/features/chat/components/chat-input-grip.js +7 -7
- package/dist/components/features/chat/components/chat-input-grip.js.map +1 -1
- package/dist/components/features/chat/components/context-window-meter.cjs +2 -0
- package/dist/components/features/chat/components/context-window-meter.cjs.map +1 -0
- package/dist/components/features/chat/components/context-window-meter.d.ts +2 -0
- package/dist/components/features/chat/components/context-window-meter.js +131 -0
- package/dist/components/features/chat/components/context-window-meter.js.map +1 -0
- package/dist/components/features/chat/components/context-window-ring.cjs +2 -0
- package/dist/components/features/chat/components/context-window-ring.cjs.map +1 -0
- package/dist/components/features/chat/components/context-window-ring.d.ts +26 -0
- package/dist/components/features/chat/components/context-window-ring.js +45 -0
- package/dist/components/features/chat/components/context-window-ring.js.map +1 -0
- package/dist/components/features/chat/custom-chat-input.cjs +1 -1
- package/dist/components/features/chat/custom-chat-input.cjs.map +1 -1
- package/dist/components/features/chat/custom-chat-input.js +68 -67
- package/dist/components/features/chat/custom-chat-input.js.map +1 -1
- package/dist/components/features/chat/error-message-banner.cjs +1 -1
- package/dist/components/features/chat/error-message-banner.cjs.map +1 -1
- package/dist/components/features/chat/error-message-banner.d.ts +3 -1
- package/dist/components/features/chat/error-message-banner.js +64 -58
- package/dist/components/features/chat/error-message-banner.js.map +1 -1
- package/dist/components/features/chat/path-component.cjs +1 -1
- package/dist/components/features/chat/path-component.cjs.map +1 -1
- package/dist/components/features/chat/path-component.js +9 -6
- package/dist/components/features/chat/path-component.js.map +1 -1
- package/dist/components/features/chat/plan-preview.cjs +1 -1
- package/dist/components/features/chat/plan-preview.js +4 -4
- package/dist/components/features/chat/tool-visualizers/file-editor/file-editor.cjs +1 -1
- package/dist/components/features/chat/tool-visualizers/file-editor/file-editor.cjs.map +1 -1
- package/dist/components/features/chat/tool-visualizers/file-editor/file-editor.d.ts +0 -8
- package/dist/components/features/chat/tool-visualizers/file-editor/file-editor.js +92 -50
- package/dist/components/features/chat/tool-visualizers/file-editor/file-editor.js.map +1 -1
- package/dist/components/features/chat/tool-visualizers/primitives/file-path-chip.cjs +1 -1
- package/dist/components/features/chat/tool-visualizers/primitives/file-path-chip.cjs.map +1 -1
- package/dist/components/features/chat/tool-visualizers/primitives/file-path-chip.d.ts +7 -2
- package/dist/components/features/chat/tool-visualizers/primitives/file-path-chip.js +15 -9
- package/dist/components/features/chat/tool-visualizers/primitives/file-path-chip.js.map +1 -1
- package/dist/components/features/chat/tool-visualizers/primitives/markdown-file-preview.cjs +2 -0
- package/dist/components/features/chat/tool-visualizers/primitives/markdown-file-preview.cjs.map +1 -0
- package/dist/components/features/chat/tool-visualizers/primitives/markdown-file-preview.d.ts +20 -0
- package/dist/components/features/chat/tool-visualizers/primitives/markdown-file-preview.js +76 -0
- package/dist/components/features/chat/tool-visualizers/primitives/markdown-file-preview.js.map +1 -0
- package/dist/components/features/controls/server-status-context-menu.cjs +1 -1
- package/dist/components/features/controls/server-status-context-menu.cjs.map +1 -1
- package/dist/components/features/controls/server-status-context-menu.d.ts +5 -3
- package/dist/components/features/controls/server-status-context-menu.js +8 -8
- package/dist/components/features/controls/server-status-context-menu.js.map +1 -1
- package/dist/components/features/conversation/conversation-name-context-menu.cjs +1 -1
- package/dist/components/features/conversation/conversation-name-context-menu.cjs.map +1 -1
- package/dist/components/features/conversation/conversation-name-context-menu.js +58 -61
- package/dist/components/features/conversation/conversation-name-context-menu.js.map +1 -1
- package/dist/components/features/conversation/conversation-name-with-status.cjs +1 -1
- package/dist/components/features/conversation/conversation-name-with-status.cjs.map +1 -1
- package/dist/components/features/conversation/conversation-name-with-status.js +74 -46
- package/dist/components/features/conversation/conversation-name-with-status.js.map +1 -1
- package/dist/components/features/conversation/conversation-name.cjs +1 -1
- package/dist/components/features/conversation/conversation-name.cjs.map +1 -1
- package/dist/components/features/conversation/conversation-name.js +69 -71
- package/dist/components/features/conversation/conversation-name.js.map +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/conversation-tab-content.cjs +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/conversation-tab-content.cjs.map +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/conversation-tab-content.js +7 -6
- package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/conversation-tab-content.js.map +1 -1
- 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 +92 -86
- 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 +81 -71
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs.js.map +1 -1
- package/dist/components/features/conversation/metrics-modal/cost-section.cjs +1 -1
- package/dist/components/features/conversation/metrics-modal/cost-section.cjs.map +1 -1
- package/dist/components/features/conversation/metrics-modal/cost-section.js +6 -6
- package/dist/components/features/conversation/metrics-modal/cost-section.js.map +1 -1
- package/dist/components/features/conversation/metrics-modal/metric-row.cjs +1 -1
- package/dist/components/features/conversation/metrics-modal/metric-row.cjs.map +1 -1
- package/dist/components/features/conversation/metrics-modal/metric-row.d.ts +2 -1
- package/dist/components/features/conversation/metrics-modal/metric-row.js +10 -9
- package/dist/components/features/conversation/metrics-modal/metric-row.js.map +1 -1
- package/dist/components/features/conversation/metrics-modal/usage-section.cjs +1 -1
- package/dist/components/features/conversation/metrics-modal/usage-section.cjs.map +1 -1
- package/dist/components/features/conversation/metrics-modal/usage-section.js +2 -1
- package/dist/components/features/conversation/metrics-modal/usage-section.js.map +1 -1
- package/dist/components/features/conversation/usage-panel/compact-context-button.cjs +2 -0
- package/dist/components/features/conversation/usage-panel/compact-context-button.cjs.map +1 -0
- package/dist/components/features/conversation/usage-panel/compact-context-button.d.ts +16 -0
- package/dist/components/features/conversation/usage-panel/compact-context-button.js +59 -0
- package/dist/components/features/conversation/usage-panel/compact-context-button.js.map +1 -0
- package/dist/components/features/conversation/usage-panel/context-meter.cjs +2 -0
- package/dist/components/features/conversation/usage-panel/context-meter.cjs.map +1 -0
- package/dist/components/features/conversation/usage-panel/context-meter.d.ts +19 -0
- package/dist/components/features/conversation/usage-panel/context-meter.js +46 -0
- package/dist/components/features/conversation/usage-panel/context-meter.js.map +1 -0
- package/dist/components/features/conversation/usage-panel/provider-balance-card.cjs +2 -0
- package/dist/components/features/conversation/usage-panel/provider-balance-card.cjs.map +1 -0
- package/dist/components/features/conversation/usage-panel/provider-balance-card.d.ts +7 -0
- package/dist/components/features/conversation/usage-panel/provider-balance-card.js +57 -0
- package/dist/components/features/conversation/usage-panel/provider-balance-card.js.map +1 -0
- package/dist/components/features/conversation/usage-panel/usage-panel.cjs +2 -0
- package/dist/components/features/conversation/usage-panel/usage-panel.cjs.map +1 -0
- package/dist/components/features/conversation/usage-panel/usage-panel.d.ts +9 -0
- package/dist/components/features/conversation/usage-panel/usage-panel.js +68 -0
- package/dist/components/features/conversation/usage-panel/usage-panel.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.js +10 -13
- package/dist/components/features/conversation-panel/budget-display.js.map +1 -1
- package/dist/components/features/conversation-panel/budget-progress-bar.cjs +1 -1
- package/dist/components/features/conversation-panel/budget-progress-bar.cjs.map +1 -1
- package/dist/components/features/conversation-panel/budget-progress-bar.js +2 -2
- package/dist/components/features/conversation-panel/budget-progress-bar.js.map +1 -1
- package/dist/components/features/conversation-panel/compact-conversation-row.cjs +1 -1
- package/dist/components/features/conversation-panel/compact-conversation-row.js +6 -6
- package/dist/components/features/conversation-panel/confirm-archive-modal.cjs +2 -0
- package/dist/components/features/conversation-panel/confirm-archive-modal.cjs.map +1 -0
- package/dist/components/features/conversation-panel/confirm-archive-modal.d.ts +8 -0
- package/dist/components/features/conversation-panel/confirm-archive-modal.js +48 -0
- package/dist/components/features/conversation-panel/confirm-archive-modal.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 +3 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.js +39 -34
- 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 +3 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.js +104 -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.d.ts +7 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.js +25 -17
- 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.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 +9 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card.js +94 -84
- package/dist/components/features/conversation-panel/conversation-card/conversation-card.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-group-folder-list.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-group-folder-list.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-group-folder-list.d.ts +2 -1
- package/dist/components/features/conversation-panel/conversation-group-folder-list.js +32 -31
- package/dist/components/features/conversation-panel/conversation-group-folder-list.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-group-folder-row.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-group-folder-row.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-group-folder-row.d.ts +2 -1
- package/dist/components/features/conversation-panel/conversation-group-folder-row.js +27 -26
- package/dist/components/features/conversation-panel/conversation-group-folder-row.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-panel-filter-menu.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-panel-filter-menu.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-panel-filter-menu.d.ts +3 -1
- package/dist/components/features/conversation-panel/conversation-panel-filter-menu.js +116 -106
- package/dist/components/features/conversation-panel/conversation-panel-filter-menu.js.map +1 -1
- 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 +27 -0
- package/dist/components/features/conversation-panel/conversation-panel-list-helpers.js +69 -46
- 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 +240 -175
- package/dist/components/features/conversation-panel/conversation-panel.js.map +1 -1
- package/dist/components/features/files-tab/file-content-viewer.cjs +1 -1
- package/dist/components/features/files-tab/file-content-viewer.cjs.map +1 -1
- package/dist/components/features/files-tab/file-content-viewer.js +22 -25
- package/dist/components/features/files-tab/file-content-viewer.js.map +1 -1
- package/dist/components/features/markdown/markdown-table-scroll.cjs +1 -1
- package/dist/components/features/markdown/markdown-table-scroll.cjs.map +1 -1
- package/dist/components/features/markdown/markdown-table-scroll.js +2 -2
- package/dist/components/features/markdown/markdown-table-scroll.js.map +1 -1
- package/dist/components/features/onboarding/steps/setup-llm-step.d.ts +10 -7
- package/dist/components/shared/buttons/conversation-confirmation-buttons.cjs +1 -1
- package/dist/components/shared/buttons/conversation-confirmation-buttons.cjs.map +1 -1
- package/dist/components/shared/buttons/conversation-confirmation-buttons.js +2 -2
- package/dist/components/shared/buttons/conversation-confirmation-buttons.js.map +1 -1
- package/dist/components/shared/modals/confirmation-modals/base-modal.cjs +1 -1
- package/dist/components/shared/modals/confirmation-modals/base-modal.cjs.map +1 -1
- package/dist/components/shared/modals/confirmation-modals/base-modal.js +1 -1
- package/dist/components/shared/modals/confirmation-modals/base-modal.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/llm-balance.cjs +2 -0
- package/dist/constants/llm-balance.cjs.map +1 -0
- package/dist/constants/llm-balance.d.ts +13 -0
- package/dist/constants/llm-balance.js +6 -0
- package/dist/constants/llm-balance.js.map +1 -0
- package/dist/contexts/conversation-websocket-context.cjs +2 -2
- package/dist/contexts/conversation-websocket-context.cjs.map +1 -1
- package/dist/contexts/conversation-websocket-context.js +227 -219
- package/dist/contexts/conversation-websocket-context.js.map +1 -1
- package/dist/hooks/chat/use-grip-resize.cjs +1 -1
- package/dist/hooks/chat/use-grip-resize.cjs.map +1 -1
- package/dist/hooks/chat/use-grip-resize.d.ts +1 -0
- package/dist/hooks/chat/use-grip-resize.js +39 -30
- package/dist/hooks/chat/use-grip-resize.js.map +1 -1
- package/dist/hooks/mutation/use-condense-conversation.cjs +2 -0
- package/dist/hooks/mutation/use-condense-conversation.cjs.map +1 -0
- package/dist/hooks/mutation/use-condense-conversation.d.ts +12 -0
- package/dist/hooks/mutation/use-condense-conversation.js +17 -0
- package/dist/hooks/mutation/use-condense-conversation.js.map +1 -0
- 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 +30 -21
- package/dist/hooks/mutation/use-create-conversation.js.map +1 -1
- package/dist/hooks/mutation/use-new-conversation-command.cjs +1 -1
- package/dist/hooks/mutation/use-new-conversation-command.cjs.map +1 -1
- package/dist/hooks/mutation/use-new-conversation-command.js +1 -1
- package/dist/hooks/mutation/use-new-conversation-command.js.map +1 -1
- package/dist/hooks/query/use-commit-changes.cjs +1 -1
- package/dist/hooks/query/use-commit-changes.js +4 -4
- package/dist/hooks/query/use-conversation-metrics.cjs +1 -1
- package/dist/hooks/query/use-conversation-metrics.cjs.map +1 -1
- package/dist/hooks/query/use-conversation-metrics.js +1 -1
- package/dist/hooks/query/use-conversation-metrics.js.map +1 -1
- package/dist/hooks/query/use-git-sync.d.ts +19 -0
- package/dist/hooks/query/use-llm-balance.cjs +2 -0
- package/dist/hooks/query/use-llm-balance.cjs.map +1 -0
- package/dist/hooks/query/use-llm-balance.d.ts +10 -0
- package/dist/hooks/query/use-llm-balance.js +24 -0
- package/dist/hooks/query/use-llm-balance.js.map +1 -0
- 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 +1 -1
- package/dist/hooks/query/use-search-providers.js.map +1 -1
- package/dist/hooks/query/use-task-polling.cjs +1 -1
- package/dist/hooks/query/use-task-polling.cjs.map +1 -1
- package/dist/hooks/query/use-task-polling.js +12 -10
- package/dist/hooks/query/use-task-polling.js.map +1 -1
- package/dist/hooks/query/use-unified-get-git-changes.cjs +1 -1
- package/dist/hooks/query/use-unified-get-git-changes.js +4 -4
- package/dist/hooks/query/use-unified-git-commits.cjs +1 -1
- package/dist/hooks/query/use-unified-git-commits.js +4 -4
- package/dist/hooks/query/use-unified-git-diff.cjs +1 -1
- package/dist/hooks/query/use-unified-git-diff.js +4 -4
- package/dist/hooks/query/use-workspace-files.cjs +1 -1
- package/dist/hooks/query/use-workspace-files.cjs.map +1 -1
- package/dist/hooks/query/use-workspace-files.d.ts +14 -4
- package/dist/hooks/query/use-workspace-files.js +45 -32
- package/dist/hooks/query/use-workspace-files.js.map +1 -1
- package/dist/hooks/use-await-context-compaction.cjs +2 -0
- package/dist/hooks/use-await-context-compaction.cjs.map +1 -0
- package/dist/hooks/use-await-context-compaction.d.ts +38 -0
- package/dist/hooks/use-await-context-compaction.js +61 -0
- package/dist/hooks/use-await-context-compaction.js.map +1 -0
- package/dist/hooks/use-compact-context-action.cjs +2 -0
- package/dist/hooks/use-compact-context-action.cjs.map +1 -0
- package/dist/hooks/use-compact-context-action.d.ts +10 -0
- package/dist/hooks/use-compact-context-action.js +61 -0
- package/dist/hooks/use-compact-context-action.js.map +1 -0
- package/dist/hooks/use-context-window-usage.cjs +2 -0
- package/dist/hooks/use-context-window-usage.cjs.map +1 -0
- package/dist/hooks/use-context-window-usage.d.ts +5 -0
- package/dist/hooks/use-context-window-usage.js +20 -0
- package/dist/hooks/use-context-window-usage.js.map +1 -0
- package/dist/hooks/use-conversation-name-context-menu.cjs +1 -1
- package/dist/hooks/use-conversation-name-context-menu.cjs.map +1 -1
- package/dist/hooks/use-conversation-name-context-menu.d.ts +0 -3
- package/dist/hooks/use-conversation-name-context-menu.js +54 -57
- package/dist/hooks/use-conversation-name-context-menu.js.map +1 -1
- package/dist/hooks/use-drag-resize.cjs +1 -1
- package/dist/hooks/use-drag-resize.cjs.map +1 -1
- package/dist/hooks/use-drag-resize.d.ts +8 -0
- package/dist/hooks/use-drag-resize.js +21 -18
- package/dist/hooks/use-drag-resize.js.map +1 -1
- package/dist/hooks/use-live-conversation-metrics.cjs +2 -0
- package/dist/hooks/use-live-conversation-metrics.cjs.map +1 -0
- package/dist/hooks/use-live-conversation-metrics.d.ts +18 -0
- package/dist/hooks/use-live-conversation-metrics.js +37 -0
- package/dist/hooks/use-live-conversation-metrics.js.map +1 -0
- package/dist/hooks/use-responder-url-secret.d.ts +5 -0
- package/dist/hooks/use-select-conversation-tab.cjs +1 -1
- package/dist/hooks/use-select-conversation-tab.cjs.map +1 -1
- package/dist/hooks/use-select-conversation-tab.js +2 -2
- package/dist/hooks/use-select-conversation-tab.js.map +1 -1
- package/dist/hooks/use-tracking.cjs +1 -1
- package/dist/hooks/use-tracking.cjs.map +1 -1
- package/dist/hooks/use-tracking.d.ts +6 -0
- package/dist/hooks/use-tracking.js +6 -0
- package/dist/hooks/use-tracking.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 +86 -1
- 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 +1475 -30
- package/dist/i18n/translation.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +28 -29
- package/dist/lib/index.cjs +1 -1
- package/dist/lib/index.js +0 -1
- package/dist/locales/ar/openhands.json +88 -3
- package/dist/locales/ca/openhands.json +88 -3
- package/dist/locales/de/openhands.json +88 -3
- package/dist/locales/en/openhands.json +88 -3
- package/dist/locales/es/openhands.json +88 -3
- package/dist/locales/fr/openhands.json +88 -3
- package/dist/locales/it/openhands.json +88 -3
- package/dist/locales/ja/openhands.json +88 -3
- package/dist/locales/ko-KR/openhands.json +88 -3
- package/dist/locales/no/openhands.json +88 -3
- package/dist/locales/pt/openhands.json +88 -3
- package/dist/locales/tr/openhands.json +88 -3
- package/dist/locales/uk/openhands.json +88 -3
- package/dist/locales/zh-CN/openhands.json +88 -3
- package/dist/locales/zh-TW/openhands.json +88 -3
- package/dist/node_modules/@microlink/react-json-view/dist/main.cjs +5 -5
- package/dist/node_modules/@microlink/react-json-view/dist/main.cjs.map +1 -1
- package/dist/node_modules/@microlink/react-json-view/dist/main.js +5194 -5187
- package/dist/node_modules/@microlink/react-json-view/dist/main.js.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/desktop-client.cjs +2 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/desktop-client.cjs.map +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/desktop-client.js +21 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/desktop-client.js.map +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/hooks-client.cjs +2 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/hooks-client.cjs.map +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/hooks-client.js +22 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/hooks-client.js.map +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/meta-profiles-client.cjs +2 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/meta-profiles-client.cjs.map +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/meta-profiles-client.js +33 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/meta-profiles-client.js.map +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/openhands-client.cjs +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/openhands-client.cjs.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/openhands-client.js +56 -22
- package/dist/node_modules/@openhands/typescript-client/dist/client/openhands-client.js.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/profiles-client.cjs +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/profiles-client.cjs.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/profiles-client.js +3 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/profiles-client.js.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/shared-client.cjs +2 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/shared-client.cjs.map +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/shared-client.js +31 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/shared-client.js.map +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/sub-agents-client.cjs +2 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/sub-agents-client.cjs.map +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/sub-agents-client.js +21 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/sub-agents-client.js.map +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/tool-client.cjs +2 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/tool-client.cjs.map +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/tool-client.js +21 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/tool-client.js.map +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/conversation/local-conversation.cjs.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/conversation/local-conversation.js.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/models/acp-providers.cjs +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/models/acp-providers.cjs.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/models/acp-providers.js +9 -5
- package/dist/node_modules/@openhands/typescript-client/dist/models/acp-providers.js.map +1 -1
- package/dist/node_modules/i18next-http-backend/esm/index.cjs +1 -1
- package/dist/node_modules/i18next-http-backend/esm/index.cjs.map +1 -1
- package/dist/node_modules/i18next-http-backend/esm/index.js +2 -2
- package/dist/node_modules/i18next-http-backend/esm/index.js.map +1 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/archive-restore.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/archive-restore.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/archive-restore.js +31 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/archive-restore.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/archive.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/archive.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/archive.js +23 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/archive.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-alert.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-alert.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-alert.js +27 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-alert.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/gauge.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/gauge.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/gauge.js +12 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/gauge.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/minimize.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/minimize.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/minimize.js +23 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/minimize.js.map +1 -0
- package/dist/node_modules/zustand/esm/middleware.cjs +3 -3
- package/dist/node_modules/zustand/esm/middleware.cjs.map +1 -1
- package/dist/node_modules/zustand/esm/middleware.js +33 -31
- package/dist/node_modules/zustand/esm/middleware.js.map +1 -1
- package/dist/package.cjs +1 -1
- package/dist/package.cjs.map +1 -1
- package/dist/package.js +17 -16
- package/dist/package.js.map +1 -1
- package/dist/routes/files-tab.cjs +1 -1
- package/dist/routes/files-tab.js +11 -11
- package/dist/routes/files-tab.js.map +1 -1
- package/dist/routes/usage-tab.cjs +2 -0
- package/dist/routes/usage-tab.cjs.map +1 -0
- package/dist/routes/usage-tab.d.ts +2 -0
- package/dist/routes/usage-tab.js +10 -0
- package/dist/routes/usage-tab.js.map +1 -0
- package/dist/services/child-conversation-launch.cjs +1 -1
- package/dist/services/child-conversation-launch.cjs.map +1 -1
- package/dist/services/child-conversation-launch.js +11 -5
- package/dist/services/child-conversation-launch.js.map +1 -1
- package/dist/services/settings.cjs +1 -1
- package/dist/services/settings.cjs.map +1 -1
- package/dist/services/settings.js +2 -2
- package/dist/services/settings.js.map +1 -1
- package/dist/services/telemetry.cjs +1 -1
- package/dist/services/telemetry.cjs.map +1 -1
- package/dist/services/telemetry.js +47 -51
- package/dist/services/telemetry.js.map +1 -1
- package/dist/stores/archived-conversations-store.cjs +2 -0
- package/dist/stores/archived-conversations-store.cjs.map +1 -0
- package/dist/stores/archived-conversations-store.d.ts +24 -0
- package/dist/stores/archived-conversations-store.js +33 -0
- package/dist/stores/archived-conversations-store.js.map +1 -0
- 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 +3 -0
- package/dist/stores/conversation-panel-preferences-store.js +4 -0
- package/dist/stores/conversation-panel-preferences-store.js.map +1 -1
- package/dist/stores/conversation-store.cjs.map +1 -1
- package/dist/stores/conversation-store.d.ts +1 -1
- package/dist/stores/conversation-store.js.map +1 -1
- package/dist/stores/error-message-store.cjs +1 -1
- package/dist/stores/error-message-store.cjs.map +1 -1
- package/dist/stores/error-message-store.d.ts +3 -1
- package/dist/stores/error-message-store.js +5 -3
- package/dist/stores/error-message-store.js.map +1 -1
- package/dist/stores/metrics-store.cjs +1 -1
- package/dist/stores/metrics-store.cjs.map +1 -1
- package/dist/stores/metrics-store.d.ts +1 -0
- package/dist/stores/metrics-store.js +7 -4
- package/dist/stores/metrics-store.js.map +1 -1
- package/dist/types/agent-server/core/events/condensation-event.d.ts +3 -0
- package/dist/types/agent-server/core/events/conversation-state-event.d.ts +4 -6
- package/dist/types/agent-server/type-guards.cjs +1 -1
- package/dist/types/agent-server/type-guards.cjs.map +1 -1
- package/dist/types/agent-server/type-guards.d.ts +5 -0
- package/dist/types/agent-server/type-guards.js +3 -3
- package/dist/types/agent-server/type-guards.js.map +1 -1
- package/dist/types/git-sync.d.ts +51 -0
- package/dist/utils/conversation-local-storage.cjs +1 -1
- package/dist/utils/conversation-local-storage.cjs.map +1 -1
- package/dist/utils/conversation-local-storage.js +2 -1
- package/dist/utils/conversation-local-storage.js.map +1 -1
- package/dist/utils/error-handler.cjs +1 -1
- package/dist/utils/error-handler.cjs.map +1 -1
- package/dist/utils/error-handler.d.ts +3 -2
- package/dist/utils/error-handler.js +18 -5
- package/dist/utils/error-handler.js.map +1 -1
- 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 +1 -0
- package/dist/utils/format-model-name.js +1 -0
- package/dist/utils/format-model-name.js.map +1 -1
- package/dist/utils/format-token-count.cjs +2 -0
- package/dist/utils/format-token-count.cjs.map +1 -0
- package/dist/utils/format-token-count.d.ts +3 -0
- package/dist/utils/format-token-count.js +19 -0
- package/dist/utils/format-token-count.js.map +1 -0
- package/dist/utils/hover-reveal-classes.cjs +2 -0
- package/dist/utils/hover-reveal-classes.cjs.map +1 -0
- package/dist/utils/hover-reveal-classes.d.ts +34 -0
- package/dist/utils/hover-reveal-classes.js +41 -0
- package/dist/utils/hover-reveal-classes.js.map +1 -0
- package/dist/utils/is-markdown-file-path.cjs +2 -0
- package/dist/utils/is-markdown-file-path.cjs.map +1 -0
- package/dist/utils/is-markdown-file-path.d.ts +4 -0
- package/dist/utils/is-markdown-file-path.js +14 -0
- package/dist/utils/is-markdown-file-path.js.map +1 -0
- package/dist/utils/mcp-marketplace-utils.cjs +1 -1
- package/dist/utils/mcp-marketplace-utils.cjs.map +1 -1
- package/dist/utils/mcp-marketplace-utils.d.ts +7 -0
- package/dist/utils/mcp-marketplace-utils.js +19 -16
- package/dist/utils/mcp-marketplace-utils.js.map +1 -1
- package/dist/utils/transcript-export/index.cjs +3 -3
- package/dist/utils/transcript-export/index.cjs.map +1 -1
- package/dist/utils/transcript-export/index.js +12 -12
- package/dist/utils/transcript-export/index.js.map +1 -1
- package/dist/utils/transcript-export/load-complete-events.cjs +1 -1
- package/dist/utils/transcript-export/load-complete-events.cjs.map +1 -1
- package/dist/utils/transcript-export/load-complete-events.js +25 -17
- package/dist/utils/transcript-export/load-complete-events.js.map +1 -1
- package/dist/utils/workspace-relative-path.cjs +2 -0
- package/dist/utils/workspace-relative-path.cjs.map +1 -0
- package/dist/utils/workspace-relative-path.d.ts +10 -0
- package/dist/utils/workspace-relative-path.js +22 -0
- package/dist/utils/workspace-relative-path.js.map +1 -0
- package/package.json +17 -16
- package/scripts/check-sdk-version-sync.mjs +6 -6
- package/scripts/check-translation-completeness.cjs +3 -0
- package/scripts/dev-process-utils.mjs +6 -1
- package/scripts/dev-safe.mjs +57 -2
- package/scripts/dev-with-automation.mjs +98 -9
- package/build/assets/active-backend-context-B_bg5h9O.js +0 -2
- package/build/assets/agent-profiles-settings-hd2cAIZM.js +0 -1
- package/build/assets/agent-server-conversation-service.api-BheU4HX3.js +0 -86
- package/build/assets/agent-settings-D_SVrWhI.js +0 -1
- package/build/assets/automation-detail-C0SxWTnQ.js +0 -3
- package/build/assets/automation-export-BjQa_fT6.js +0 -2
- package/build/assets/automation-setup-route-BzCNpljP.js +0 -1
- package/build/assets/automations-list-dZg8zOCl.js +0 -1
- package/build/assets/bot-DuN83i3p.js +0 -1
- package/build/assets/browser--eoQOo4M.js +0 -6
- package/build/assets/check-DLOKoFU9.js +0 -1
- package/build/assets/chevron-down-CnIbtM6i.js +0 -1
- package/build/assets/circle-check-CxCYJrpZ.js +0 -1
- package/build/assets/cloud-funnel-analytics-CcSez21r.js +0 -1
- package/build/assets/conversation-Cmyw9bFh.js +0 -90
- package/build/assets/conversation-CvoGZ5vC.js +0 -1
- package/build/assets/conversation-panel-CvoGZ5vC.js +0 -1
- package/build/assets/conversation-state-store-CtgILxWF.js +0 -1
- package/build/assets/conversation-store-B8Eahyeg.js +0 -6
- package/build/assets/external-link-zWbg5KXS.js +0 -1
- package/build/assets/files-tab-D5zuU5TY.js +0 -1
- package/build/assets/format-model-name-BN_rx1Y3.js +0 -1
- package/build/assets/format-relative-time-BerVamGl.js +0 -1
- package/build/assets/git-provider-icon-zuKz2cwo.js +0 -1
- package/build/assets/git-repo-dropdown-Bo7ciSNX.js +0 -1
- package/build/assets/home-DqyeeFA_.js +0 -1
- package/build/assets/home-Y0aDou-a.js +0 -1
- package/build/assets/index-home-DqyeeFA_.js +0 -1
- package/build/assets/info-C9lpK5pw.js +0 -1
- package/build/assets/install-server-modal-DW6dSyGr.js +0 -1
- package/build/assets/kebab-menu-item-content-CKydZrbH.js +0 -1
- package/build/assets/llm-not-configured-banner-DCE_0B4I.js +0 -27
- package/build/assets/llm-settings-8eWBF3Ij.js +0 -1
- package/build/assets/llm-settings-D9ko42Pi.js +0 -1
- package/build/assets/llm-subscription-service-B3K-97lP.js +0 -1
- package/build/assets/loader-circle-C5AnEN8r.js +0 -1
- package/build/assets/manifest-e1c3bc3b.js +0 -1
- package/build/assets/manifest-subpage-layout-Ds7G5GZ8.js +0 -1
- package/build/assets/markdown-renderer-DzvgdZey.js +0 -8
- package/build/assets/mcp-marketplace-utils-DSLou4n7.js +0 -1
- package/build/assets/messages-B2l0qLVk.js +0 -40
- package/build/assets/onboarding-modal-DrrGlEQq.js +0 -1
- package/build/assets/pencil-Bl3GWhgq.js +0 -1
- package/build/assets/plus-CtzlyAoF.js +0 -1
- package/build/assets/profiles-service.api-vcE_jJCe.js +0 -1
- package/build/assets/providers-CdrPPm0z.js +0 -1
- package/build/assets/recommended-automations-launcher-DIYgUdMm.js +0 -1
- package/build/assets/refresh-cw-B9GhC3QC.js +0 -1
- package/build/assets/root-CBBi6IAe.js +0 -2
- package/build/assets/root-CRK9fOFd.css +0 -1
- package/build/assets/root-layout-BFN2rCOy.js +0 -2
- package/build/assets/search-CYaiKHRp.js +0 -1
- package/build/assets/secrets-service-BHF4fxML.js +0 -1
- package/build/assets/secrets-settings-aBGXtQhX.js +0 -1
- package/build/assets/shared-conversation-BIAcuORk.js +0 -1
- package/build/assets/shield-check-D2cpEpv3.js +0 -1
- package/build/assets/trash-2-CzDVN-Iw.js +0 -1
- package/build/assets/use-acp-credential-form-DGyo0QvL.js +0 -1
- package/build/assets/use-agent-profiles-B37XWDLq.js +0 -1
- package/build/assets/use-config-DapX3pjC.js +0 -1
- package/build/assets/use-create-conversation-CRf1dCm5.js +0 -1
- package/build/assets/use-create-secret-DcpT3RPw.js +0 -1
- package/build/assets/use-is-authed-Bka89Xmm.js +0 -1
- package/build/assets/use-is-creating-conversation-CVefC9Ns.js +0 -1
- package/build/assets/use-llm-profiles-CHxqoHiN.js +0 -1
- package/build/assets/use-manifest-capabilities-zihHDbMW.js +0 -1
- package/build/assets/use-save-agent-profile-CH9_EXQG.js +0 -1
- package/build/assets/use-tracking-salbPJxT.js +0 -3
- package/build/assets/utils-DPQfkd-7.js +0 -1
- package/build/assets/vendor~index-home~home~conversation-panel~conversation-DiXf0dkj.js +0 -13
- package/build/assets/x-RYDBg-e2.js +0 -1
- package/build/assets/zap-tbKDzCe3.js +0 -1
- package/dist/api/cloud/suggestions-service.api.d.ts +0 -8
- package/dist/api/suggestions-service/suggestions-service.api.d.ts +0 -11
- package/dist/components/conversation-events/chat/event-message-components/observation-pair-event-message.d.ts +0 -7
- package/dist/components/conversation-events/index.d.ts +0 -1
- package/dist/components/features/automations/metadata-chip.d.ts +0 -6
- package/dist/components/features/chat/task-tracking/status-badge.d.ts +0 -5
- package/dist/components/features/chat/task-tracking/status-icon.d.ts +0 -5
- package/dist/components/features/chat/task-tracking/task-list-section.d.ts +0 -10
- package/dist/components/features/controls/tools.d.ts +0 -2
- package/dist/components/features/conversation/metrics-modal/context-window-section.cjs +0 -2
- package/dist/components/features/conversation/metrics-modal/context-window-section.cjs.map +0 -1
- package/dist/components/features/conversation/metrics-modal/context-window-section.d.ts +0 -6
- package/dist/components/features/conversation/metrics-modal/context-window-section.js +0 -46
- package/dist/components/features/conversation/metrics-modal/context-window-section.js.map +0 -1
- package/dist/components/features/conversation/metrics-modal/empty-state.cjs +0 -2
- package/dist/components/features/conversation/metrics-modal/empty-state.cjs.map +0 -1
- package/dist/components/features/conversation/metrics-modal/empty-state.d.ts +0 -1
- package/dist/components/features/conversation/metrics-modal/empty-state.js +0 -18
- package/dist/components/features/conversation/metrics-modal/empty-state.js.map +0 -1
- package/dist/components/features/conversation/metrics-modal/metrics-modal-header.cjs +0 -2
- package/dist/components/features/conversation/metrics-modal/metrics-modal-header.cjs.map +0 -1
- package/dist/components/features/conversation/metrics-modal/metrics-modal-header.d.ts +0 -5
- package/dist/components/features/conversation/metrics-modal/metrics-modal-header.js +0 -20
- package/dist/components/features/conversation/metrics-modal/metrics-modal-header.js.map +0 -1
- package/dist/components/features/conversation/metrics-modal/metrics-modal.cjs +0 -2
- package/dist/components/features/conversation/metrics-modal/metrics-modal.cjs.map +0 -1
- package/dist/components/features/conversation/metrics-modal/metrics-modal.d.ts +0 -6
- package/dist/components/features/conversation/metrics-modal/metrics-modal.js +0 -57
- package/dist/components/features/conversation/metrics-modal/metrics-modal.js.map +0 -1
- package/dist/components/features/conversation-panel/new-conversation-button.d.ts +0 -23
- package/dist/components/features/home/home-header/guide-message.d.ts +0 -1
- package/dist/components/features/home/home-header/home-header.d.ts +0 -1
- package/dist/components/features/home/new-conversation/create-conversation-button.d.ts +0 -1
- package/dist/components/features/home/new-conversation/new-conversation.d.ts +0 -1
- package/dist/components/features/home/new-conversation.d.ts +0 -1
- package/dist/components/features/home/tasks/task-card.d.ts +0 -6
- package/dist/components/features/home/tasks/task-group.d.ts +0 -7
- package/dist/components/features/home/tasks/task-issue-number.d.ts +0 -6
- package/dist/components/features/home/tasks/task-item-title.d.ts +0 -1
- package/dist/components/features/home/tasks/task-suggestions-skeleton.d.ts +0 -1
- package/dist/components/features/home/tasks/task-suggestions.d.ts +0 -6
- package/dist/components/features/settings/agent-server-onboarding.d.ts +0 -10
- package/dist/components/features/settings/mcp-settings/mcp-server-list-item.d.ts +0 -6
- package/dist/components/features/settings/mcp-settings/mcp-server-list.d.ts +0 -8
- package/dist/hooks/query/use-suggested-tasks.d.ts +0 -1
- package/dist/hooks/use-should-show-user-features.d.ts +0 -1
- package/dist/icons/u-credit-card.cjs +0 -2
- package/dist/icons/u-credit-card.cjs.map +0 -1
- package/dist/icons/u-credit-card.js +0 -21
- package/dist/icons/u-credit-card.js.map +0 -1
- package/dist/ui/card-title.d.ts +0 -16
- package/dist/ui/card.d.ts +0 -14
- package/dist/utils/group-suggested-tasks.d.ts +0 -7
- /package/build/assets/{vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~cy4jtuc2-rfV8mQ9m.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~dcc51rps-rfV8mQ9m.js} +0 -0
- /package/build/assets/{vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~lq5hicxx-cHFhpUBq.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~ox0jfsa0-cHFhpUBq.js} +0 -0
- /package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~9pstowjp-BOVIFA_g.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~eo2nf80n-BOVIFA_g.js} +0 -0
- /package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~ht43enc2-C0JXQb_q.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~jz4f6vo2-C0JXQb_q.js} +0 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { create as e } from "../node_modules/zustand/esm/react.js";
|
|
2
|
+
import { createJSONStorage as t, persist as n } from "../node_modules/zustand/esm/middleware.js";
|
|
3
|
+
//#region src/stores/archived-conversations-store.ts
|
|
4
|
+
var r = "archived-conversations", i = { archivesByBackendId: {} };
|
|
5
|
+
function a(e, t) {
|
|
6
|
+
return e[t] ?? [];
|
|
7
|
+
}
|
|
8
|
+
var o = e()(n((e, t) => ({
|
|
9
|
+
...i,
|
|
10
|
+
archiveConversation: (n, r) => {
|
|
11
|
+
let i = a(t().archivesByBackendId, n);
|
|
12
|
+
i.includes(r) || e((e) => ({ archivesByBackendId: {
|
|
13
|
+
...e.archivesByBackendId,
|
|
14
|
+
[n]: [r, ...i]
|
|
15
|
+
} }));
|
|
16
|
+
},
|
|
17
|
+
removeArchivedConversation: (n, r) => {
|
|
18
|
+
let i = a(t().archivesByBackendId, n);
|
|
19
|
+
i.includes(r) && e((e) => ({ archivesByBackendId: {
|
|
20
|
+
...e.archivesByBackendId,
|
|
21
|
+
[n]: i.filter((e) => e !== r)
|
|
22
|
+
} }));
|
|
23
|
+
},
|
|
24
|
+
isArchived: (e, n) => a(t().archivesByBackendId, e).includes(n)
|
|
25
|
+
}), {
|
|
26
|
+
name: r,
|
|
27
|
+
storage: t(() => localStorage),
|
|
28
|
+
partialize: (e) => ({ archivesByBackendId: e.archivesByBackendId })
|
|
29
|
+
}));
|
|
30
|
+
//#endregion
|
|
31
|
+
export { o as useArchivedConversationsStore };
|
|
32
|
+
|
|
33
|
+
//# sourceMappingURL=archived-conversations-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archived-conversations-store.js","names":[],"sources":["../../src/stores/archived-conversations-store.ts"],"sourcesContent":["import { create } from \"zustand\";\nimport { persist, createJSONStorage } from \"zustand/middleware\";\n\nexport const ARCHIVED_CONVERSATIONS_STORAGE_KEY = \"archived-conversations\";\n\ninterface ArchivedConversationsState {\n archivesByBackendId: Record<string, string[]>;\n}\n\ninterface ArchivedConversationsActions {\n archiveConversation: (backendId: string, conversationId: string) => void;\n removeArchivedConversation: (\n backendId: string,\n conversationId: string,\n ) => void;\n isArchived: (backendId: string, conversationId: string) => boolean;\n}\n\ntype ArchivedConversationsStore = ArchivedConversationsState &\n ArchivedConversationsActions;\n\nconst initialState: ArchivedConversationsState = {\n archivesByBackendId: {},\n};\n\nfunction getArchivesForBackend(\n archivesByBackendId: Record<string, string[]>,\n backendId: string,\n): string[] {\n return archivesByBackendId[backendId] ?? [];\n}\n\nexport const useArchivedConversationsStore =\n create<ArchivedConversationsStore>()(\n persist(\n (set, get) => ({\n ...initialState,\n\n archiveConversation: (backendId, conversationId) => {\n const current = getArchivesForBackend(\n get().archivesByBackendId,\n backendId,\n );\n if (current.includes(conversationId)) {\n return;\n }\n set((state) => ({\n archivesByBackendId: {\n ...state.archivesByBackendId,\n [backendId]: [conversationId, ...current],\n },\n }));\n },\n\n removeArchivedConversation: (backendId, conversationId) => {\n const current = getArchivesForBackend(\n get().archivesByBackendId,\n backendId,\n );\n if (!current.includes(conversationId)) {\n return;\n }\n set((state) => ({\n archivesByBackendId: {\n ...state.archivesByBackendId,\n [backendId]: current.filter((id) => id !== conversationId),\n },\n }));\n },\n\n isArchived: (backendId, conversationId) =>\n getArchivesForBackend(get().archivesByBackendId, backendId).includes(\n conversationId,\n ),\n }),\n {\n name: ARCHIVED_CONVERSATIONS_STORAGE_KEY,\n storage: createJSONStorage(() => localStorage),\n partialize: (state): ArchivedConversationsState => ({\n archivesByBackendId: state.archivesByBackendId,\n }),\n },\n ),\n );\n"],"mappings":";;;AAGA,IAAa,IAAqC,0BAkB5C,IAA2C,EAC/C,qBAAqB,CAAC,EACxB;AAEA,SAAS,EACP,GACA,GACU;CACV,OAAO,EAAoB,MAAc,CAAC;AAC5C;AAEA,IAAa,IACX,EAAmC,EACjC,GACG,GAAK,OAAS;CACb,GAAG;CAEH,sBAAsB,GAAW,MAAmB;EAClD,IAAM,IAAU,EACd,EAAI,EAAE,qBACN,CACF;EACI,EAAQ,SAAS,CAAc,KAGnC,GAAK,OAAW,EACd,qBAAqB;GACnB,GAAG,EAAM;IACR,IAAY,CAAC,GAAgB,GAAG,CAAO;EAC1C,EACF,EAAE;CACJ;CAEA,6BAA6B,GAAW,MAAmB;EACzD,IAAM,IAAU,EACd,EAAI,EAAE,qBACN,CACF;EACK,EAAQ,SAAS,CAAc,KAGpC,GAAK,OAAW,EACd,qBAAqB;GACnB,GAAG,EAAM;IACR,IAAY,EAAQ,QAAQ,MAAO,MAAO,CAAc;EAC3D,EACF,EAAE;CACJ;CAEA,aAAa,GAAW,MACtB,EAAsB,EAAI,EAAE,qBAAqB,CAAS,EAAE,SAC1D,CACF;AACJ,IACA;CACE,MAAM;CACN,SAAS,QAAwB,YAAY;CAC7C,aAAa,OAAuC,EAClD,qBAAqB,EAAM,oBAC7B;AACF,CACF,CACF"}
|
|
@@ -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");var n={showOlderConversations:!0,showRepoBranchMetadata:!1,showLlmProfiles:!1,showTagsMetadata:!1,showHoverMetadata:!0,organizeMode:`chronological`,conversationSort:`updated`,threadScope:`all`,automationFilterMode:`all`,selectedAutomationNames:[],groupFolderOrder:[]},r=e.create()(t.persist(e=>({...n,setShowOlderConversations:t=>e(()=>({showOlderConversations:t})),toggleShowOlderConversations:()=>e(e=>({showOlderConversations:!e.showOlderConversations})),setShowRepoBranchMetadata:t=>e(()=>({showRepoBranchMetadata:t})),toggleShowRepoBranchMetadata:()=>e(e=>({showRepoBranchMetadata:!e.showRepoBranchMetadata})),setShowLlmProfiles:t=>e(()=>({showLlmProfiles:t})),toggleShowLlmProfiles:()=>e(e=>({showLlmProfiles:!e.showLlmProfiles})),setShowTagsMetadata:t=>e(()=>({showTagsMetadata:t})),toggleShowTagsMetadata:()=>e(e=>({showTagsMetadata:!e.showTagsMetadata})),setShowHoverMetadata:t=>e(()=>({showHoverMetadata:t})),toggleShowHoverMetadata:()=>e(e=>({showHoverMetadata:!e.showHoverMetadata})),setOrganizeMode:t=>e(()=>({organizeMode:t})),setConversationSort:t=>e(()=>({conversationSort:t})),setThreadScope:t=>e(()=>({threadScope:t})),setAutomationFilterMode:t=>e(()=>({automationFilterMode:t})),toggleAutomationName:t=>e(e=>({selectedAutomationNames:e.selectedAutomationNames.includes(t)?e.selectedAutomationNames.filter(e=>e!==t):[...e.selectedAutomationNames,t]})),setGroupFolderOrder:t=>e(()=>({groupFolderOrder:[...t]}))}),{name:`conversation-panel-preferences`,storage:t.createJSONStorage(()=>localStorage),partialize:e=>({showOlderConversations:e.showOlderConversations,showRepoBranchMetadata:e.showRepoBranchMetadata,showLlmProfiles:e.showLlmProfiles,showTagsMetadata:e.showTagsMetadata,showHoverMetadata:e.showHoverMetadata,organizeMode:e.organizeMode,conversationSort:e.conversationSort,threadScope:e.threadScope,automationFilterMode:e.automationFilterMode,selectedAutomationNames:e.selectedAutomationNames,groupFolderOrder:e.groupFolderOrder})}));exports.useConversationPanelPreferencesStore=r;
|
|
1
|
+
require("../_virtual/_rolldown/runtime.cjs");const e=require("../node_modules/zustand/esm/react.cjs"),t=require("../node_modules/zustand/esm/middleware.cjs");var n={showOlderConversations:!0,showArchivedConversations:!1,showRepoBranchMetadata:!1,showLlmProfiles:!1,showTagsMetadata:!1,showHoverMetadata:!0,organizeMode:`chronological`,conversationSort:`updated`,threadScope:`all`,automationFilterMode:`all`,selectedAutomationNames:[],groupFolderOrder:[]},r=e.create()(t.persist(e=>({...n,setShowOlderConversations:t=>e(()=>({showOlderConversations:t})),toggleShowOlderConversations:()=>e(e=>({showOlderConversations:!e.showOlderConversations})),setShowArchivedConversations:t=>e(()=>({showArchivedConversations:t})),toggleShowArchivedConversations:()=>e(e=>({showArchivedConversations:!e.showArchivedConversations})),setShowRepoBranchMetadata:t=>e(()=>({showRepoBranchMetadata:t})),toggleShowRepoBranchMetadata:()=>e(e=>({showRepoBranchMetadata:!e.showRepoBranchMetadata})),setShowLlmProfiles:t=>e(()=>({showLlmProfiles:t})),toggleShowLlmProfiles:()=>e(e=>({showLlmProfiles:!e.showLlmProfiles})),setShowTagsMetadata:t=>e(()=>({showTagsMetadata:t})),toggleShowTagsMetadata:()=>e(e=>({showTagsMetadata:!e.showTagsMetadata})),setShowHoverMetadata:t=>e(()=>({showHoverMetadata:t})),toggleShowHoverMetadata:()=>e(e=>({showHoverMetadata:!e.showHoverMetadata})),setOrganizeMode:t=>e(()=>({organizeMode:t})),setConversationSort:t=>e(()=>({conversationSort:t})),setThreadScope:t=>e(()=>({threadScope:t})),setAutomationFilterMode:t=>e(()=>({automationFilterMode:t})),toggleAutomationName:t=>e(e=>({selectedAutomationNames:e.selectedAutomationNames.includes(t)?e.selectedAutomationNames.filter(e=>e!==t):[...e.selectedAutomationNames,t]})),setGroupFolderOrder:t=>e(()=>({groupFolderOrder:[...t]}))}),{name:`conversation-panel-preferences`,storage:t.createJSONStorage(()=>localStorage),partialize:e=>({showOlderConversations:e.showOlderConversations,showArchivedConversations:e.showArchivedConversations,showRepoBranchMetadata:e.showRepoBranchMetadata,showLlmProfiles:e.showLlmProfiles,showTagsMetadata:e.showTagsMetadata,showHoverMetadata:e.showHoverMetadata,organizeMode:e.organizeMode,conversationSort:e.conversationSort,threadScope:e.threadScope,automationFilterMode:e.automationFilterMode,selectedAutomationNames:e.selectedAutomationNames,groupFolderOrder:e.groupFolderOrder})}));exports.useConversationPanelPreferencesStore=r;
|
|
2
2
|
//# sourceMappingURL=conversation-panel-preferences-store.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-panel-preferences-store.cjs","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 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 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 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 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 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":"
|
|
1
|
+
{"version":3,"file":"conversation-panel-preferences-store.cjs","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":"8JA6DA,IAAM,EAAkD,CACtD,uBAAwB,GACxB,0BAA2B,GAC3B,uBAAwB,GACxB,gBAAiB,GACjB,iBAAkB,GAClB,kBAAmB,GACnB,aAAc,gBACd,iBAAkB,UAClB,YAAa,MACb,qBAAsB,MACtB,wBAAyB,CAAC,EAC1B,iBAAkB,CAAC,CACrB,EAEa,EACX,EAAA,OAA0C,EACxC,EAAA,QACG,IAAS,CACR,GAAG,EAEH,0BAA4B,GAC1B,OAAW,CAAE,uBAAwB,CAAM,EAAE,EAC/C,iCACE,EAAK,IAAW,CACd,uBAAwB,CAAC,EAAM,sBACjC,EAAE,EAEJ,6BAA+B,GAC7B,OAAW,CAAE,0BAA2B,CAAM,EAAE,EAClD,oCACE,EAAK,IAAW,CACd,0BAA2B,CAAC,EAAM,yBACpC,EAAE,EAEJ,0BAA4B,GAC1B,OAAW,CAAE,uBAAwB,CAAM,EAAE,EAC/C,iCACE,EAAK,IAAW,CACd,uBAAwB,CAAC,EAAM,sBACjC,EAAE,EAEJ,mBAAqB,GAAU,OAAW,CAAE,gBAAiB,CAAM,EAAE,EACrE,0BACE,EAAK,IAAW,CACd,gBAAiB,CAAC,EAAM,eAC1B,EAAE,EAEJ,oBAAsB,GACpB,OAAW,CAAE,iBAAkB,CAAM,EAAE,EACzC,2BACE,EAAK,IAAW,CACd,iBAAkB,CAAC,EAAM,gBAC3B,EAAE,EAEJ,qBAAuB,GACrB,OAAW,CAAE,kBAAmB,CAAM,EAAE,EAC1C,4BACE,EAAK,IAAW,CACd,kBAAmB,CAAC,EAAM,iBAC5B,EAAE,EAEJ,gBAAkB,GAAU,OAAW,CAAE,aAAc,CAAM,EAAE,EAC/D,oBAAsB,GACpB,OAAW,CAAE,iBAAkB,CAAM,EAAE,EACzC,eAAiB,GAAU,OAAW,CAAE,YAAa,CAAM,EAAE,EAC7D,wBAA0B,GACxB,OAAW,CAAE,qBAAsB,CAAM,EAAE,EAC7C,qBAAuB,GACrB,EAAK,IAAW,CACd,wBAAyB,EAAM,wBAAwB,SACrD,CACF,EACI,EAAM,wBAAwB,OAC3B,GAAa,IAAa,CAC7B,EACA,CAAC,GAAG,EAAM,wBAAyB,CAAI,CAC7C,EAAE,EACJ,oBAAsB,GACpB,OAAW,CAAE,iBAAkB,CAAC,GAAG,CAAK,CAAE,EAAE,CAChD,GACA,CACE,KAAM,iCACN,QAAS,EAAA,sBAAwB,YAAY,EAE7C,WAAa,IAA8C,CACzD,uBAAwB,EAAM,uBAC9B,0BAA2B,EAAM,0BACjC,uBAAwB,EAAM,uBAC9B,gBAAiB,EAAM,gBACvB,iBAAkB,EAAM,iBACxB,kBAAmB,EAAM,kBACzB,aAAc,EAAM,aACpB,iBAAkB,EAAM,iBACxB,YAAa,EAAM,YACnB,qBAAsB,EAAM,qBAC5B,wBAAyB,EAAM,wBAC/B,iBAAkB,EAAM,gBAC1B,EACF,CACF,CACF"}
|
|
@@ -14,6 +14,7 @@ import { type AutomationFilterMode, type ConversationSortField, type OrganizeMod
|
|
|
14
14
|
*/
|
|
15
15
|
interface ConversationPanelPreferencesState {
|
|
16
16
|
showOlderConversations: boolean;
|
|
17
|
+
showArchivedConversations: boolean;
|
|
17
18
|
showRepoBranchMetadata: boolean;
|
|
18
19
|
showLlmProfiles: boolean;
|
|
19
20
|
showTagsMetadata: boolean;
|
|
@@ -28,6 +29,8 @@ interface ConversationPanelPreferencesState {
|
|
|
28
29
|
interface ConversationPanelPreferencesActions {
|
|
29
30
|
setShowOlderConversations: (value: boolean) => void;
|
|
30
31
|
toggleShowOlderConversations: () => void;
|
|
32
|
+
setShowArchivedConversations: (value: boolean) => void;
|
|
33
|
+
toggleShowArchivedConversations: () => void;
|
|
31
34
|
setShowRepoBranchMetadata: (value: boolean) => void;
|
|
32
35
|
toggleShowRepoBranchMetadata: () => void;
|
|
33
36
|
setShowLlmProfiles: (value: boolean) => void;
|
|
@@ -3,6 +3,7 @@ import { createJSONStorage as t, persist as n } from "../node_modules/zustand/es
|
|
|
3
3
|
//#region src/stores/conversation-panel-preferences-store.ts
|
|
4
4
|
var r = {
|
|
5
5
|
showOlderConversations: !0,
|
|
6
|
+
showArchivedConversations: !1,
|
|
6
7
|
showRepoBranchMetadata: !1,
|
|
7
8
|
showLlmProfiles: !1,
|
|
8
9
|
showTagsMetadata: !1,
|
|
@@ -17,6 +18,8 @@ var r = {
|
|
|
17
18
|
...r,
|
|
18
19
|
setShowOlderConversations: (t) => e(() => ({ showOlderConversations: t })),
|
|
19
20
|
toggleShowOlderConversations: () => e((e) => ({ showOlderConversations: !e.showOlderConversations })),
|
|
21
|
+
setShowArchivedConversations: (t) => e(() => ({ showArchivedConversations: t })),
|
|
22
|
+
toggleShowArchivedConversations: () => e((e) => ({ showArchivedConversations: !e.showArchivedConversations })),
|
|
20
23
|
setShowRepoBranchMetadata: (t) => e(() => ({ showRepoBranchMetadata: t })),
|
|
21
24
|
toggleShowRepoBranchMetadata: () => e((e) => ({ showRepoBranchMetadata: !e.showRepoBranchMetadata })),
|
|
22
25
|
setShowLlmProfiles: (t) => e(() => ({ showLlmProfiles: t })),
|
|
@@ -36,6 +39,7 @@ var r = {
|
|
|
36
39
|
storage: t(() => localStorage),
|
|
37
40
|
partialize: (e) => ({
|
|
38
41
|
showOlderConversations: e.showOlderConversations,
|
|
42
|
+
showArchivedConversations: e.showArchivedConversations,
|
|
39
43
|
showRepoBranchMetadata: e.showRepoBranchMetadata,
|
|
40
44
|
showLlmProfiles: e.showLlmProfiles,
|
|
41
45
|
showTagsMetadata: e.showTagsMetadata,
|
|
@@ -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 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 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 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 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 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":";;;
|
|
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 +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 | \"browser\"\n | \"terminal\"\n | \"planner\"\n | \"tasklist\";\n\nexport type ConversationMode = \"code\" | \"plan\";\n\nexport interface IMessageToSend {\n text: string;\n timestamp: number;\n}\n\ninterface ConversationState {\n isRightPanelShown: boolean;\n selectedTab: ConversationTab | 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 setSelectedTab: (selectedTab: ConversationTab | null) => 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 selectedTab: \"files\" as ConversationTab,\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 setSelectedTab: (selectedTab) =>\n set({ selectedTab }, false, \"setSelectedTab\"),\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 | \"browser\"\n | \"terminal\"\n | \"planner\"\n | \"tasklist\"\n | \"usage\";\n\nexport type ConversationMode = \"code\" | \"plan\";\n\nexport interface IMessageToSend {\n text: string;\n timestamp: number;\n}\n\ninterface ConversationState {\n isRightPanelShown: boolean;\n selectedTab: ConversationTab | 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 setSelectedTab: (selectedTab: ConversationTab | null) => 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 selectedTab: \"files\" as ConversationTab,\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 setSelectedTab: (selectedTab) =>\n set({ selectedTab }, false, \"setSelectedTab\"),\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":"mNA8EA,IAAM,MAAqD,CACzD,GAAI,OAAO,OAAW,IACpB,OAAO,KAGT,IAAM,EAAQ,OAAO,SAAS,SAAS,MAAM,0BAA0B,EACvE,OAAO,EAAQ,EAAM,GAAK,IAC5B,EAEM,MAAqD,CACzD,GAAI,OAAO,OAAW,IACpB,MAAO,OAGT,IAAM,EAAiB,EAA8B,EAMrD,OALK,EAIS,EAAA,qBAAqB,CAC5B,EAAM,iBAJJ,MAKX,EAEa,EAAuB,EAAA,OAA0B,EAC5D,EAAA,SACG,IAAS,CAYR,kBAAmB,GACnB,YAAa,QACb,OAAQ,CAAC,EACT,MAAO,CAAC,EACR,yBAA0B,CAAC,EAC3B,iBAAkB,CAAC,EACnB,aAAc,CAAC,EACf,cAAe,CAAC,EAChB,cAAe,KACf,sBAAuB,KACvB,wBAAyB,GACzB,iBAAkB,KAClB,sBAAuB,GACvB,qBAAsB,GACtB,YAAa,KACb,iBAAkB,EAA2B,EAC7C,sBAAuB,KAGvB,qBAAuB,GACrB,EAAI,CAAE,mBAAkB,EAAG,GAAO,sBAAsB,EAE1D,eAAiB,GACf,EAAI,CAAE,aAAY,EAAG,GAAO,gBAAgB,EAE9C,2BAA6B,GAC3B,EAAI,CAAE,yBAAwB,EAAG,GAAO,4BAA4B,EAEtE,yBAA2B,GACzB,EAAI,CAAE,uBAAsB,EAAG,GAAO,0BAA0B,EAElE,UAAY,GACV,EACG,IAAW,CAAE,OAAQ,CAAC,GAAG,EAAM,OAAQ,GAAG,CAAM,CAAE,GACnD,GACA,WACF,EAEF,SAAW,GACT,EACG,IAAW,CAAE,MAAO,CAAC,GAAG,EAAM,MAAO,GAAG,CAAK,CAAE,GAChD,GACA,UACF,EAEF,wBAA0B,GACxB,EACG,GAAU,CACT,IAAM,EAAS,IAAI,IAAI,EAAM,wBAAwB,EAMrD,OALI,EAAO,IAAI,CAAQ,EACrB,EAAO,OAAO,CAAQ,EAEtB,EAAO,IAAI,CAAQ,EAEd,CAAE,yBAA0B,CAAC,GAAG,CAAM,CAAE,CACjD,EACA,GACA,yBACF,EAEF,mBAAqB,GACnB,EACG,IAEQ,CAAE,iBAAkB,CAAC,GAAG,IADZ,IAAI,CAAC,GAAG,EAAM,iBAAkB,GAAG,CAAS,CAChC,CAAM,CAAE,GAEzC,GACA,oBACF,EAEF,YAAc,GACZ,EACG,GAAU,CACT,IAAM,EAAU,EAAM,OAAO,GACvB,EAAY,CAAC,GAAG,EAAM,MAAM,EAElC,OADA,EAAU,OAAO,EAAO,CAAC,EAClB,CACL,OAAQ,EACR,yBAA0B,EACtB,EAAM,yBAAyB,OAC5B,GAAS,IAAS,EAAQ,IAC7B,EACA,EAAM,yBACV,iBAAkB,EACd,EAAM,iBAAiB,OAAQ,GAAS,IAAS,EAAQ,IAAI,EAC7D,EAAM,gBACZ,CACF,EACA,GACA,aACF,EAEF,WAAa,GACX,EACG,GAAU,CACT,IAAM,EAAW,CAAC,GAAG,EAAM,KAAK,EAEhC,OADA,EAAS,OAAO,EAAO,CAAC,EACjB,CAAE,MAAO,CAAS,CAC3B,EACA,GACA,YACF,EAEF,gBAAmB,EAAI,CAAE,OAAQ,CAAC,CAAE,EAAG,GAAO,aAAa,EAE3D,eAAkB,EAAI,CAAE,MAAO,CAAC,CAAE,EAAG,GAAO,YAAY,EAExD,kBACE,EACE,CACE,OAAQ,CAAC,EACT,MAAO,CAAC,EACR,yBAA0B,CAAC,EAC3B,iBAAkB,CAAC,EACnB,aAAc,CAAC,EACf,cAAe,CAAC,CAClB,EACA,GACA,eACF,EAEF,eAAiB,GACf,EACG,GACM,EAAM,aAAa,SAAS,CAAQ,EAGlC,EAFE,CAAE,aAAc,CAAC,GAAG,EAAM,aAAc,CAAQ,CAAE,EAI7D,GACA,gBACF,EAEF,kBAAoB,GAClB,EACG,IAAW,CACV,aAAc,EAAM,aAAa,OAC9B,GAAS,IAAS,CACrB,CACF,GACA,GACA,mBACF,EAEF,gBAAkB,GAChB,EACG,GACM,EAAM,cAAc,SAAS,CAAS,EAGpC,EAFE,CAAE,cAAe,CAAC,GAAG,EAAM,cAAe,CAAS,CAAE,EAIhE,GACA,iBACF,EAEF,mBAAqB,GACnB,EACG,IAAW,CACV,cAAe,EAAM,cAAc,OAChC,GAAS,IAAS,CACrB,CACF,GACA,GACA,oBACF,EAEF,oBACE,EAAI,CAAE,aAAc,CAAC,EAAG,cAAe,CAAC,CAAE,EAAG,GAAO,iBAAiB,EAEvE,iBAAmB,GACjB,EACE,CACE,cAAe,CACb,OACA,UAAW,KAAK,IAAI,CACtB,CACF,EACA,GACA,kBACF,EAIF,uBACE,EAAI,CAAE,cAAe,IAAK,EAAG,GAAO,oBAAoB,EAE1D,6BAA+B,GAC7B,EACE,CACE,sBAAuB,CACrB,OACA,UAAW,KAAK,IAAI,CACtB,CACF,EACA,GACA,8BACF,EAEF,+BACE,EACE,CAAE,sBAAuB,IAAK,EAC9B,GACA,4BACF,EAEF,oBAAsB,GACpB,EAAI,CAAE,kBAAiB,EAAG,GAAO,qBAAqB,EAExD,2BACE,EACE,CACE,sBAAuB,GACvB,iBAAkB,EAA2B,EAC7C,sBAAuB,KACvB,YAAa,IACf,EACA,GACA,wBACF,EAEF,wBAA0B,GACxB,EAAI,CAAE,sBAAqB,EAAG,GAAO,yBAAyB,EAEhE,oBAAsB,GAAqB,CACzC,IAAM,EAAiB,EAA8B,EACjD,GACF,EAAA,qBAAqB,EAAgB,CAAE,kBAAiB,CAAC,EAE3D,EAAI,CAAE,kBAAiB,EAAG,GAAO,qBAAqB,CACxD,EAEA,yBAA2B,GACzB,EAAI,CAAE,uBAAsB,EAAG,GAAO,0BAA0B,EAElE,eAAiB,GACf,EAAI,CAAE,aAAY,EAAG,GAAO,gBAAgB,CAChD,GACA,CACE,KAAM,oBACR,CACF,CACF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type ConversationTab = "files" | "browser" | "terminal" | "planner" | "tasklist";
|
|
1
|
+
export type ConversationTab = "files" | "browser" | "terminal" | "planner" | "tasklist" | "usage";
|
|
2
2
|
export type ConversationMode = "code" | "plan";
|
|
3
3
|
export interface IMessageToSend {
|
|
4
4
|
text: string;
|
|
@@ -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 | \"browser\"\n | \"terminal\"\n | \"planner\"\n | \"tasklist\";\n\nexport type ConversationMode = \"code\" | \"plan\";\n\nexport interface IMessageToSend {\n text: string;\n timestamp: number;\n}\n\ninterface ConversationState {\n isRightPanelShown: boolean;\n selectedTab: ConversationTab | 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 setSelectedTab: (selectedTab: ConversationTab | null) => 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 selectedTab: \"files\" as ConversationTab,\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 setSelectedTab: (selectedTab) =>\n set({ selectedTab }, false, \"setSelectedTab\"),\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.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 | \"browser\"\n | \"terminal\"\n | \"planner\"\n | \"tasklist\"\n | \"usage\";\n\nexport type ConversationMode = \"code\" | \"plan\";\n\nexport interface IMessageToSend {\n text: string;\n timestamp: number;\n}\n\ninterface ConversationState {\n isRightPanelShown: boolean;\n selectedTab: ConversationTab | 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 setSelectedTab: (selectedTab: ConversationTab | null) => 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 selectedTab: \"files\" as ConversationTab,\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 setSelectedTab: (selectedTab) =>\n set({ selectedTab }, false, \"setSelectedTab\"),\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":";;;;AA8EA,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,aAAa;CACb,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,iBAAiB,MACf,EAAI,EAAE,eAAY,GAAG,IAAO,gBAAgB;CAE9C,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,2 +1,2 @@
|
|
|
1
|
-
require("../_virtual/_rolldown/runtime.cjs");const e=require("../node_modules/zustand/esm/react.cjs");var t={errorMessage:null,errorType:null,errorCode:null},n=e.create(e=>({...t,setErrorMessage:(t,n=`conversation`,r=null)=>e(()=>({errorMessage:t,errorType:n,errorCode:r})),removeErrorMessage:()=>e(()=>({...t})),clearConnectionError:()=>e(e=>e.errorType===`connection`?{...t}:e)}));exports.useErrorMessageStore=n;
|
|
1
|
+
require("../_virtual/_rolldown/runtime.cjs");const e=require("../node_modules/zustand/esm/react.cjs");var t={errorMessage:null,errorType:null,errorCode:null,errorClassification:null},n=e.create(e=>({...t,setErrorMessage:(t,n=`conversation`,r=null,i=null)=>e(()=>({errorMessage:t,errorType:n,errorCode:r,errorClassification:i})),removeErrorMessage:()=>e(()=>({...t})),clearConnectionError:()=>e(e=>e.errorType===`connection`?{...t}:e)}));exports.useErrorMessageStore=n;
|
|
2
2
|
//# sourceMappingURL=error-message-store.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-message-store.cjs","names":[],"sources":["../../src/stores/error-message-store.ts"],"sourcesContent":["import { create } from \"zustand\";\n\n/**\n * \"connection\" errors auto-clear once connectivity recovers; \"conversation\"\n * errors (e.g. a wrong API key) are sticky and clear only on an explicit user\n * action (dismiss, retry, new message).\n */\nexport type ErrorMessageType = \"connection\" | \"conversation\";\n\ninterface ErrorMessageState {\n errorMessage: string | null;\n errorType: ErrorMessageType | null;\n /**\n * Structured error code from a ConversationErrorEvent/ServerErrorEvent (e.g.\n * \"ACPAuthRequired\"), used to render a code-specific header + recovery action.\n * null for errors that carry no code (connection errors, plain strings).\n */\n errorCode: string | null;\n}\n\ninterface ErrorMessageActions {\n setErrorMessage: (\n message: string,\n type?: ErrorMessageType,\n code?: string | null,\n ) => void;\n removeErrorMessage: () => void;\n /** Clears the error only when it is a transient connection error. */\n clearConnectionError: () => void;\n}\n\ntype ErrorMessageStore = ErrorMessageState & ErrorMessageActions;\n\nconst initialState: ErrorMessageState = {\n errorMessage: null,\n errorType: null,\n errorCode: null,\n};\n\nexport const useErrorMessageStore = create<ErrorMessageStore>((set) => ({\n ...initialState,\n\n setErrorMessage: (\n message: string,\n type: ErrorMessageType = \"conversation\",\n code: string | null = null,\n ) =>\n set(() => ({\n errorMessage: message,\n errorType: type,\n errorCode: code,\n })),\n\n removeErrorMessage: () => set(() => ({ ...initialState })),\n\n clearConnectionError: () =>\n set((state) =>\n state.errorType === \"connection\" ? { ...initialState } : state,\n ),\n}));\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"error-message-store.cjs","names":[],"sources":["../../src/stores/error-message-store.ts"],"sourcesContent":["import { create } from \"zustand\";\nimport type { ErrorClassification } from \"@openhands/typescript-client\";\n\n/**\n * \"connection\" errors auto-clear once connectivity recovers; \"conversation\"\n * errors (e.g. a wrong API key) are sticky and clear only on an explicit user\n * action (dismiss, retry, new message).\n */\nexport type ErrorMessageType = \"connection\" | \"conversation\";\n\ninterface ErrorMessageState {\n errorMessage: string | null;\n errorType: ErrorMessageType | null;\n /**\n * Structured error code from a ConversationErrorEvent/ServerErrorEvent (e.g.\n * \"ACPAuthRequired\"), used to render a code-specific header + recovery action.\n * null for errors that carry no code (connection errors, plain strings).\n */\n errorCode: string | null;\n errorClassification: ErrorClassification | null;\n}\n\ninterface ErrorMessageActions {\n setErrorMessage: (\n message: string,\n type?: ErrorMessageType,\n code?: string | null,\n classification?: ErrorClassification | null,\n ) => void;\n removeErrorMessage: () => void;\n /** Clears the error only when it is a transient connection error. */\n clearConnectionError: () => void;\n}\n\ntype ErrorMessageStore = ErrorMessageState & ErrorMessageActions;\n\nconst initialState: ErrorMessageState = {\n errorMessage: null,\n errorType: null,\n errorCode: null,\n errorClassification: null,\n};\n\nexport const useErrorMessageStore = create<ErrorMessageStore>((set) => ({\n ...initialState,\n\n setErrorMessage: (\n message: string,\n type: ErrorMessageType = \"conversation\",\n code: string | null = null,\n classification: ErrorClassification | null = null,\n ) =>\n set(() => ({\n errorMessage: message,\n errorType: type,\n errorCode: code,\n errorClassification: classification,\n })),\n\n removeErrorMessage: () => set(() => ({ ...initialState })),\n\n clearConnectionError: () =>\n set((state) =>\n state.errorType === \"connection\" ? { ...initialState } : state,\n ),\n}));\n"],"mappings":"sGAoCA,IAAM,EAAkC,CACtC,aAAc,KACd,UAAW,KACX,UAAW,KACX,oBAAqB,IACvB,EAEa,EAAuB,EAAA,OAA2B,IAAS,CACtE,GAAG,EAEH,iBACE,EACA,EAAyB,eACzB,EAAsB,KACtB,EAA6C,OAE7C,OAAW,CACT,aAAc,EACd,UAAW,EACX,UAAW,EACX,oBAAqB,CACvB,EAAE,EAEJ,uBAA0B,OAAW,CAAE,GAAG,CAAa,EAAE,EAEzD,yBACE,EAAK,GACH,EAAM,YAAc,aAAe,CAAE,GAAG,CAAa,EAAI,CAC3D,CACJ,EAAE"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ErrorClassification } from "@openhands/typescript-client";
|
|
1
2
|
/**
|
|
2
3
|
* "connection" errors auto-clear once connectivity recovers; "conversation"
|
|
3
4
|
* errors (e.g. a wrong API key) are sticky and clear only on an explicit user
|
|
@@ -13,9 +14,10 @@ interface ErrorMessageState {
|
|
|
13
14
|
* null for errors that carry no code (connection errors, plain strings).
|
|
14
15
|
*/
|
|
15
16
|
errorCode: string | null;
|
|
17
|
+
errorClassification: ErrorClassification | null;
|
|
16
18
|
}
|
|
17
19
|
interface ErrorMessageActions {
|
|
18
|
-
setErrorMessage: (message: string, type?: ErrorMessageType, code?: string | null) => void;
|
|
20
|
+
setErrorMessage: (message: string, type?: ErrorMessageType, code?: string | null, classification?: ErrorClassification | null) => void;
|
|
19
21
|
removeErrorMessage: () => void;
|
|
20
22
|
/** Clears the error only when it is a transient connection error. */
|
|
21
23
|
clearConnectionError: () => void;
|
|
@@ -3,13 +3,15 @@ import { create as e } from "../node_modules/zustand/esm/react.js";
|
|
|
3
3
|
var t = {
|
|
4
4
|
errorMessage: null,
|
|
5
5
|
errorType: null,
|
|
6
|
-
errorCode: null
|
|
6
|
+
errorCode: null,
|
|
7
|
+
errorClassification: null
|
|
7
8
|
}, n = e((e) => ({
|
|
8
9
|
...t,
|
|
9
|
-
setErrorMessage: (t, n = "conversation", r = null) => e(() => ({
|
|
10
|
+
setErrorMessage: (t, n = "conversation", r = null, i = null) => e(() => ({
|
|
10
11
|
errorMessage: t,
|
|
11
12
|
errorType: n,
|
|
12
|
-
errorCode: r
|
|
13
|
+
errorCode: r,
|
|
14
|
+
errorClassification: i
|
|
13
15
|
})),
|
|
14
16
|
removeErrorMessage: () => e(() => ({ ...t })),
|
|
15
17
|
clearConnectionError: () => e((e) => e.errorType === "connection" ? { ...t } : e)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-message-store.js","names":[],"sources":["../../src/stores/error-message-store.ts"],"sourcesContent":["import { create } from \"zustand\";\n\n/**\n * \"connection\" errors auto-clear once connectivity recovers; \"conversation\"\n * errors (e.g. a wrong API key) are sticky and clear only on an explicit user\n * action (dismiss, retry, new message).\n */\nexport type ErrorMessageType = \"connection\" | \"conversation\";\n\ninterface ErrorMessageState {\n errorMessage: string | null;\n errorType: ErrorMessageType | null;\n /**\n * Structured error code from a ConversationErrorEvent/ServerErrorEvent (e.g.\n * \"ACPAuthRequired\"), used to render a code-specific header + recovery action.\n * null for errors that carry no code (connection errors, plain strings).\n */\n errorCode: string | null;\n}\n\ninterface ErrorMessageActions {\n setErrorMessage: (\n message: string,\n type?: ErrorMessageType,\n code?: string | null,\n ) => void;\n removeErrorMessage: () => void;\n /** Clears the error only when it is a transient connection error. */\n clearConnectionError: () => void;\n}\n\ntype ErrorMessageStore = ErrorMessageState & ErrorMessageActions;\n\nconst initialState: ErrorMessageState = {\n errorMessage: null,\n errorType: null,\n errorCode: null,\n};\n\nexport const useErrorMessageStore = create<ErrorMessageStore>((set) => ({\n ...initialState,\n\n setErrorMessage: (\n message: string,\n type: ErrorMessageType = \"conversation\",\n code: string | null = null,\n ) =>\n set(() => ({\n errorMessage: message,\n errorType: type,\n errorCode: code,\n })),\n\n removeErrorMessage: () => set(() => ({ ...initialState })),\n\n clearConnectionError: () =>\n set((state) =>\n state.errorType === \"connection\" ? { ...initialState } : state,\n ),\n}));\n"],"mappings":";;
|
|
1
|
+
{"version":3,"file":"error-message-store.js","names":[],"sources":["../../src/stores/error-message-store.ts"],"sourcesContent":["import { create } from \"zustand\";\nimport type { ErrorClassification } from \"@openhands/typescript-client\";\n\n/**\n * \"connection\" errors auto-clear once connectivity recovers; \"conversation\"\n * errors (e.g. a wrong API key) are sticky and clear only on an explicit user\n * action (dismiss, retry, new message).\n */\nexport type ErrorMessageType = \"connection\" | \"conversation\";\n\ninterface ErrorMessageState {\n errorMessage: string | null;\n errorType: ErrorMessageType | null;\n /**\n * Structured error code from a ConversationErrorEvent/ServerErrorEvent (e.g.\n * \"ACPAuthRequired\"), used to render a code-specific header + recovery action.\n * null for errors that carry no code (connection errors, plain strings).\n */\n errorCode: string | null;\n errorClassification: ErrorClassification | null;\n}\n\ninterface ErrorMessageActions {\n setErrorMessage: (\n message: string,\n type?: ErrorMessageType,\n code?: string | null,\n classification?: ErrorClassification | null,\n ) => void;\n removeErrorMessage: () => void;\n /** Clears the error only when it is a transient connection error. */\n clearConnectionError: () => void;\n}\n\ntype ErrorMessageStore = ErrorMessageState & ErrorMessageActions;\n\nconst initialState: ErrorMessageState = {\n errorMessage: null,\n errorType: null,\n errorCode: null,\n errorClassification: null,\n};\n\nexport const useErrorMessageStore = create<ErrorMessageStore>((set) => ({\n ...initialState,\n\n setErrorMessage: (\n message: string,\n type: ErrorMessageType = \"conversation\",\n code: string | null = null,\n classification: ErrorClassification | null = null,\n ) =>\n set(() => ({\n errorMessage: message,\n errorType: type,\n errorCode: code,\n errorClassification: classification,\n })),\n\n removeErrorMessage: () => set(() => ({ ...initialState })),\n\n clearConnectionError: () =>\n set((state) =>\n state.errorType === \"connection\" ? { ...initialState } : state,\n ),\n}));\n"],"mappings":";;AAoCA,IAAM,IAAkC;CACtC,cAAc;CACd,WAAW;CACX,WAAW;CACX,qBAAqB;AACvB,GAEa,IAAuB,GAA2B,OAAS;CACtE,GAAG;CAEH,kBACE,GACA,IAAyB,gBACzB,IAAsB,MACtB,IAA6C,SAE7C,SAAW;EACT,cAAc;EACd,WAAW;EACX,WAAW;EACX,qBAAqB;CACvB,EAAE;CAEJ,0BAA0B,SAAW,EAAE,GAAG,EAAa,EAAE;CAEzD,4BACE,GAAK,MACH,EAAM,cAAc,eAAe,EAAE,GAAG,EAAa,IAAI,CAC3D;AACJ,EAAE"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require("../_virtual/_rolldown/runtime.cjs");
|
|
1
|
+
require("../_virtual/_rolldown/runtime.cjs");const e=require("../node_modules/zustand/esm/react.cjs");var t={cost:null,max_budget_per_task:null,usage:null},n=e.create(e=>({...t,setMetrics:t=>e(t),resetMetrics:()=>e(t)}));exports.default=n;
|
|
2
2
|
//# sourceMappingURL=metrics-store.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics-store.cjs","names":[],"sources":["../../src/stores/metrics-store.ts"],"sourcesContent":["import { create } from \"zustand\";\n\nexport interface MetricsState {\n cost: number | null;\n max_budget_per_task: number | null;\n usage: {\n prompt_tokens: number;\n completion_tokens: number;\n cache_read_tokens: number;\n cache_write_tokens: number;\n context_window: number;\n per_turn_token: number;\n } | null;\n}\n\nexport interface MetricsStore extends MetricsState {\n setMetrics: (metrics: MetricsState) => void;\n}\n\nconst
|
|
1
|
+
{"version":3,"file":"metrics-store.cjs","names":[],"sources":["../../src/stores/metrics-store.ts"],"sourcesContent":["import { create } from \"zustand\";\n\nexport interface MetricsState {\n cost: number | null;\n max_budget_per_task: number | null;\n usage: {\n prompt_tokens: number;\n completion_tokens: number;\n cache_read_tokens: number;\n cache_write_tokens: number;\n context_window: number;\n per_turn_token: number;\n } | null;\n}\n\nexport interface MetricsStore extends MetricsState {\n setMetrics: (metrics: MetricsState) => void;\n resetMetrics: () => void;\n}\n\nconst EMPTY_METRICS: MetricsState = {\n cost: null,\n max_budget_per_task: null,\n usage: null,\n};\n\nconst useMetricsStore = create<MetricsStore>((set) => ({\n ...EMPTY_METRICS,\n setMetrics: (metrics) => set(metrics),\n resetMetrics: () => set(EMPTY_METRICS),\n}));\n\n// Dev-only console handle for inspecting the live WS metrics while\n// debugging the usage meter (window.__OH_METRICS_STORE__.getState()).\n// Gated on import.meta.env.DEV so it never reaches production builds.\nif (typeof window !== \"undefined\" && import.meta.env.DEV) {\n (\n window as unknown as { __OH_METRICS_STORE__?: typeof useMetricsStore }\n ).__OH_METRICS_STORE__ = useMetricsStore;\n}\n\nexport default useMetricsStore;\n"],"mappings":"sGAoBA,IAAM,EAA8B,CAClC,KAAM,KACN,oBAAqB,KACrB,MAAO,IACT,EAEM,EAAkB,EAAA,OAAsB,IAAS,CACrD,GAAG,EACH,WAAa,GAAY,EAAI,CAAO,EACpC,iBAAoB,EAAI,CAAa,CACvC,EAAE"}
|
|
@@ -12,6 +12,7 @@ export interface MetricsState {
|
|
|
12
12
|
}
|
|
13
13
|
export interface MetricsStore extends MetricsState {
|
|
14
14
|
setMetrics: (metrics: MetricsState) => void;
|
|
15
|
+
resetMetrics: () => void;
|
|
15
16
|
}
|
|
16
17
|
declare const useMetricsStore: import("zustand").UseBoundStore<import("zustand").StoreApi<MetricsStore>>;
|
|
17
18
|
export default useMetricsStore;
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import { create as e } from "../node_modules/zustand/esm/react.js";
|
|
2
2
|
//#region src/stores/metrics-store.ts
|
|
3
|
-
var t =
|
|
3
|
+
var t = {
|
|
4
4
|
cost: null,
|
|
5
5
|
max_budget_per_task: null,
|
|
6
|
-
usage: null
|
|
7
|
-
|
|
6
|
+
usage: null
|
|
7
|
+
}, n = e((e) => ({
|
|
8
|
+
...t,
|
|
9
|
+
setMetrics: (t) => e(t),
|
|
10
|
+
resetMetrics: () => e(t)
|
|
8
11
|
}));
|
|
9
12
|
//#endregion
|
|
10
|
-
export {
|
|
13
|
+
export { n as default };
|
|
11
14
|
|
|
12
15
|
//# sourceMappingURL=metrics-store.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics-store.js","names":[],"sources":["../../src/stores/metrics-store.ts"],"sourcesContent":["import { create } from \"zustand\";\n\nexport interface MetricsState {\n cost: number | null;\n max_budget_per_task: number | null;\n usage: {\n prompt_tokens: number;\n completion_tokens: number;\n cache_read_tokens: number;\n cache_write_tokens: number;\n context_window: number;\n per_turn_token: number;\n } | null;\n}\n\nexport interface MetricsStore extends MetricsState {\n setMetrics: (metrics: MetricsState) => void;\n}\n\nconst
|
|
1
|
+
{"version":3,"file":"metrics-store.js","names":[],"sources":["../../src/stores/metrics-store.ts"],"sourcesContent":["import { create } from \"zustand\";\n\nexport interface MetricsState {\n cost: number | null;\n max_budget_per_task: number | null;\n usage: {\n prompt_tokens: number;\n completion_tokens: number;\n cache_read_tokens: number;\n cache_write_tokens: number;\n context_window: number;\n per_turn_token: number;\n } | null;\n}\n\nexport interface MetricsStore extends MetricsState {\n setMetrics: (metrics: MetricsState) => void;\n resetMetrics: () => void;\n}\n\nconst EMPTY_METRICS: MetricsState = {\n cost: null,\n max_budget_per_task: null,\n usage: null,\n};\n\nconst useMetricsStore = create<MetricsStore>((set) => ({\n ...EMPTY_METRICS,\n setMetrics: (metrics) => set(metrics),\n resetMetrics: () => set(EMPTY_METRICS),\n}));\n\n// Dev-only console handle for inspecting the live WS metrics while\n// debugging the usage meter (window.__OH_METRICS_STORE__.getState()).\n// Gated on import.meta.env.DEV so it never reaches production builds.\nif (typeof window !== \"undefined\" && import.meta.env.DEV) {\n (\n window as unknown as { __OH_METRICS_STORE__?: typeof useMetricsStore }\n ).__OH_METRICS_STORE__ = useMetricsStore;\n}\n\nexport default useMetricsStore;\n"],"mappings":";;AAoBA,IAAM,IAA8B;CAClC,MAAM;CACN,qBAAqB;CACrB,OAAO;AACT,GAEM,IAAkB,GAAsB,OAAS;CACrD,GAAG;CACH,aAAa,MAAY,EAAI,CAAO;CACpC,oBAAoB,EAAI,CAAa;AACvC,EAAE"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { EventID } from "../base/common";
|
|
2
2
|
import { BaseEvent } from "../base/event";
|
|
3
3
|
export interface CondensationEvent extends BaseEvent {
|
|
4
|
+
kind: "Condensation";
|
|
4
5
|
/**
|
|
5
6
|
* The source is always "environment" for condensation events
|
|
6
7
|
*/
|
|
@@ -19,12 +20,14 @@ export interface CondensationEvent extends BaseEvent {
|
|
|
19
20
|
summary_offset?: number;
|
|
20
21
|
}
|
|
21
22
|
export interface CondensationRequestEvent extends BaseEvent {
|
|
23
|
+
kind: "CondensationRequest";
|
|
22
24
|
/**
|
|
23
25
|
* The source is always "environment" for condensation request events
|
|
24
26
|
*/
|
|
25
27
|
source: "environment";
|
|
26
28
|
}
|
|
27
29
|
export interface CondensationSummaryEvent extends BaseEvent {
|
|
30
|
+
kind: "CondensationSummaryEvent";
|
|
28
31
|
/**
|
|
29
32
|
* The source is always "environment" for condensation summary events
|
|
30
33
|
*/
|
|
@@ -23,7 +23,7 @@ export interface LLMMetrics {
|
|
|
23
23
|
model_name: string;
|
|
24
24
|
accumulated_cost: number;
|
|
25
25
|
max_budget_per_task: number | null;
|
|
26
|
-
accumulated_token_usage: TokenUsage;
|
|
26
|
+
accumulated_token_usage: TokenUsage | null;
|
|
27
27
|
costs: Array<{
|
|
28
28
|
model: string;
|
|
29
29
|
cost: number;
|
|
@@ -37,12 +37,10 @@ export interface LLMMetrics {
|
|
|
37
37
|
token_usages: TokenUsage[];
|
|
38
38
|
}
|
|
39
39
|
/**
|
|
40
|
-
* Usage metrics
|
|
40
|
+
* Usage metrics keyed by LLM usage id. The server uses arbitrary ids
|
|
41
|
+
* ("default", "condenser", "profile:<name>:<uuid>", …), not a fixed set.
|
|
41
42
|
*/
|
|
42
|
-
export
|
|
43
|
-
agent: LLMMetrics;
|
|
44
|
-
condenser: LLMMetrics;
|
|
45
|
-
}
|
|
43
|
+
export type UsageToMetrics = Record<string, LLMMetrics>;
|
|
46
44
|
/**
|
|
47
45
|
* Stats containing usage metrics
|
|
48
46
|
*/
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require("../../_virtual/_rolldown/runtime.cjs"),require("../../constants/canvas-ui.cjs"),require("../../constants/child-conversation.cjs");function e(e){return typeof e==`object`&&!!e&&`id`in e&&`timestamp`in e&&`source`in e&&typeof e.id==`string`&&e.id.length>0&&typeof e.timestamp==`string`&&e.timestamp.length>0&&typeof e.source==`string`&&(e.source===`agent`||e.source===`user`||e.source===`environment`||e.source===`hook`)}var t=e=>e.source===`environment`&&`action_id`in e&&`observation`in e&&e.observation!==null&&typeof e.observation==`object`&&`kind`in e.observation,n=e=>e.source===`agent`&&`tool_name`in e&&`tool_call_id`in e&&`error`in e&&typeof e.tool_name==`string`&&typeof e.tool_call_id==`string`&&typeof e.error==`string`,r=e=>`llm_message`in e&&typeof e.llm_message==`object`&&e.llm_message!==null&&`role`in e.llm_message&&`content`in e.llm_message,i=e=>r(e)&&e.llm_message.role===`user`,a=e=>e.source===`agent`&&`action`in e&&e.action!==null&&typeof e.action==`object`&&`kind`in e.action&&`tool_name`in e&&`tool_call_id`in e&&typeof e.tool_name==`string`&&typeof e.tool_call_id==`string`,o=e=>a(e)&&(e.action.kind===`ExecuteBashAction`||e.action.kind===`TerminalAction`),s=e=>t(e)&&(e.observation.kind===`ExecuteBashObservation`||e.observation.kind===`TerminalObservation`),c=e=>t(e)&&e.observation.kind===`PlanningFileEditorObservation`,l=e=>t(e)&&e.observation.kind===`BrowserObservation`,u=e=>t(e)&&e.observation.kind===`SwitchLLMObservation`,d=e=>a(e)&&e.action.kind===`BrowserNavigateAction`,f=e=>a(e)&&(e.tool_name===`canvas_ui`||e.tool_name===`canvas_ui_control`),p=e=>a(e)&&e.tool_name===`launch_child_conversation`,m=e=>e.source===`agent`&&`system_prompt`in e&&`tools`in e&&typeof e.system_prompt==`object`&&Array.isArray(e.tools),h=e=>`kind`in e&&e.kind===`ConversationStateUpdateEvent`,g=e=>e.key===`full_state`,_=e=>e.key===`execution_status`,v=e=>e.key===`stats`,y=e=>e.key===`goal`,b=e=>`kind`in e&&e.kind===`ConversationErrorEvent`,x=e=>`kind`in e&&e.kind===`ServerErrorEvent`,S=e=>b(e)||x(e),C=e=>`kind`in e&&e.kind===`HookExecutionEvent`,w=e=>`kind`in e&&e.kind===`ACPToolCallEvent`,T=e=>`kind`in e&&e.kind===`StreamingDeltaEvent`;function
|
|
1
|
+
require("../../_virtual/_rolldown/runtime.cjs"),require("../../constants/canvas-ui.cjs"),require("../../constants/child-conversation.cjs");function e(e){return typeof e==`object`&&!!e&&`id`in e&&`timestamp`in e&&`source`in e&&typeof e.id==`string`&&e.id.length>0&&typeof e.timestamp==`string`&&e.timestamp.length>0&&typeof e.source==`string`&&(e.source===`agent`||e.source===`user`||e.source===`environment`||e.source===`hook`)}var t=e=>e.source===`environment`&&`action_id`in e&&`observation`in e&&e.observation!==null&&typeof e.observation==`object`&&`kind`in e.observation,n=e=>e.source===`agent`&&`tool_name`in e&&`tool_call_id`in e&&`error`in e&&typeof e.tool_name==`string`&&typeof e.tool_call_id==`string`&&typeof e.error==`string`,r=e=>`llm_message`in e&&typeof e.llm_message==`object`&&e.llm_message!==null&&`role`in e.llm_message&&`content`in e.llm_message,i=e=>r(e)&&e.llm_message.role===`user`,a=e=>e.source===`agent`&&`action`in e&&e.action!==null&&typeof e.action==`object`&&`kind`in e.action&&`tool_name`in e&&`tool_call_id`in e&&typeof e.tool_name==`string`&&typeof e.tool_call_id==`string`,o=e=>a(e)&&(e.action.kind===`ExecuteBashAction`||e.action.kind===`TerminalAction`),s=e=>t(e)&&(e.observation.kind===`ExecuteBashObservation`||e.observation.kind===`TerminalObservation`),c=e=>t(e)&&e.observation.kind===`PlanningFileEditorObservation`,l=e=>t(e)&&e.observation.kind===`BrowserObservation`,u=e=>t(e)&&e.observation.kind===`SwitchLLMObservation`,d=e=>a(e)&&e.action.kind===`BrowserNavigateAction`,f=e=>a(e)&&(e.tool_name===`canvas_ui`||e.tool_name===`canvas_ui_control`),p=e=>a(e)&&e.tool_name===`launch_child_conversation`,m=e=>e.source===`agent`&&`system_prompt`in e&&`tools`in e&&typeof e.system_prompt==`object`&&Array.isArray(e.tools),h=e=>`kind`in e&&e.kind===`ConversationStateUpdateEvent`,g=e=>e.key===`full_state`,_=e=>e.key===`execution_status`,v=e=>e.key===`stats`,y=e=>e.key===`goal`,b=e=>`kind`in e&&e.kind===`ConversationErrorEvent`,x=e=>`kind`in e&&e.kind===`ServerErrorEvent`,S=e=>b(e)||x(e),C=e=>`kind`in e&&e.kind===`HookExecutionEvent`,w=e=>`kind`in e&&e.kind===`ACPToolCallEvent`,T=e=>`kind`in e&&e.kind===`StreamingDeltaEvent`,E=e=>`kind`in e&&e.kind===`Condensation`;function D(t){return e(t)}exports.isACPToolCallEvent=w,exports.isActionEvent=a,exports.isAgentErrorEvent=n,exports.isAgentServerEvent=D,exports.isAgentStatusConversationStateUpdateEvent=_,exports.isBrowserNavigateActionEvent=d,exports.isBrowserObservationEvent=l,exports.isCanvasUIActionEvent=f,exports.isCondensationEvent=E,exports.isConversationStateUpdateEvent=h,exports.isDisplayableErrorEvent=S,exports.isExecuteBashActionEvent=o,exports.isExecuteBashObservationEvent=s,exports.isFullStateConversationStateUpdateEvent=g,exports.isGoalConversationStateUpdateEvent=y,exports.isHookExecutionEvent=C,exports.isLaunchChildConversationActionEvent=p,exports.isMessageEvent=r,exports.isObservationEvent=t,exports.isPlanningFileEditorObservationEvent=c,exports.isStatsConversationStateUpdateEvent=v,exports.isStreamingDeltaEvent=T,exports.isSwitchLLMObservationEvent=u,exports.isSystemPromptEvent=m,exports.isUserMessageEvent=i;
|
|
2
2
|
//# sourceMappingURL=type-guards.cjs.map
|