@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
|
@@ -1,61 +1,66 @@
|
|
|
1
1
|
import { AUTOMATION_TAG_KEYS as e } from "../../../api/agent-server-adapter.js";
|
|
2
|
-
function t(e, t) {
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
function t(e, t, n) {
|
|
3
|
+
if (!t) return [...e];
|
|
4
|
+
let r = e.filter((e) => t.has(e.id));
|
|
5
|
+
if (n != null && !r.some((e) => e.id === n)) {
|
|
6
|
+
let t = e.find((e) => e.id === n);
|
|
7
|
+
t && r.push(t);
|
|
8
|
+
}
|
|
9
|
+
return r;
|
|
10
|
+
}
|
|
11
|
+
function n(e, n) {
|
|
12
|
+
let r = n.limit ?? 5, i = t(e, n.discoveryConversationIds, n.activeConversationId), a;
|
|
13
|
+
if (i.length <= r) a = i;
|
|
14
|
+
else {
|
|
15
|
+
let e = n.activeConversationId == null ? -1 : i.findIndex((e) => e.id === n.activeConversationId);
|
|
16
|
+
a = e >= r ? [...i.slice(0, r - 1), i[e]] : i.slice(0, r);
|
|
17
|
+
}
|
|
18
|
+
let o = a.length < e.length;
|
|
19
|
+
return n.expanded ? {
|
|
5
20
|
visibleConversations: [...e],
|
|
6
|
-
isPreviewTruncated:
|
|
21
|
+
isPreviewTruncated: o,
|
|
7
22
|
isShowingAll: !0
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
return {
|
|
13
|
-
visibleConversations: [...e.slice(0, n - 1), t],
|
|
14
|
-
isPreviewTruncated: !0,
|
|
15
|
-
isShowingAll: !1
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
return {
|
|
19
|
-
visibleConversations: e.slice(0, n),
|
|
20
|
-
isPreviewTruncated: e.length > n,
|
|
21
|
-
isShowingAll: !1
|
|
23
|
+
} : {
|
|
24
|
+
visibleConversations: a,
|
|
25
|
+
isPreviewTruncated: o,
|
|
26
|
+
isShowingAll: !o
|
|
22
27
|
};
|
|
23
28
|
}
|
|
24
|
-
function
|
|
29
|
+
function r(e, t) {
|
|
25
30
|
let n = new Map(t.map((e) => [e.id, e]));
|
|
26
31
|
return e.map((e) => n.get(e)).filter((e) => e != null);
|
|
27
32
|
}
|
|
28
|
-
function
|
|
33
|
+
function i(e, t) {
|
|
29
34
|
if (t.length === 0) return [...e];
|
|
30
35
|
let n = new Set(t);
|
|
31
36
|
return e.filter((e) => !n.has(e.id));
|
|
32
37
|
}
|
|
33
|
-
var
|
|
34
|
-
function
|
|
38
|
+
var a = "__unnamed__";
|
|
39
|
+
function o(t) {
|
|
35
40
|
if (t.trigger === "automation") return !0;
|
|
36
41
|
let n = t.tags;
|
|
37
42
|
return n ? e.some((e) => !!n[e]) : !1;
|
|
38
43
|
}
|
|
39
|
-
function
|
|
44
|
+
function s(e) {
|
|
40
45
|
return e.tags?.automationname?.trim() || "__unnamed__";
|
|
41
46
|
}
|
|
42
|
-
function
|
|
47
|
+
function c(e) {
|
|
43
48
|
let t = /* @__PURE__ */ new Set(), n = !1;
|
|
44
49
|
for (let r of e) {
|
|
45
|
-
if (!
|
|
46
|
-
let e =
|
|
50
|
+
if (!o(r)) continue;
|
|
51
|
+
let e = s(r);
|
|
47
52
|
e === "__unnamed__" ? n = !0 : t.add(e);
|
|
48
53
|
}
|
|
49
54
|
let r = [...t].sort((e, t) => e.localeCompare(t));
|
|
50
|
-
return n && r.push(
|
|
55
|
+
return n && r.push(a), r;
|
|
51
56
|
}
|
|
52
|
-
function
|
|
57
|
+
function l(e, t, n, r) {
|
|
53
58
|
if (t === "all") return [...e];
|
|
54
|
-
if (t === "hide-automations") return e.filter((e) => !
|
|
55
|
-
let i = new Set(r),
|
|
56
|
-
return e.filter((e) =>
|
|
59
|
+
if (t === "hide-automations") return e.filter((e) => !o(e));
|
|
60
|
+
let i = new Set(r), a = n.filter((e) => i.has(e)), c = a.length > 0 ? new Set(a) : null;
|
|
61
|
+
return e.filter((e) => o(e) ? c === null || c.has(s(e)) : !1);
|
|
57
62
|
}
|
|
58
|
-
function
|
|
63
|
+
function u(e, t, n) {
|
|
59
64
|
if (t === "local") return e === "__none_workspace" ? {} : e.startsWith("ws:") ? { workingDir: e.slice(3) } : {};
|
|
60
65
|
if (e === "__none_repo") return {};
|
|
61
66
|
if (e.startsWith("repo:")) {
|
|
@@ -68,16 +73,16 @@ function l(e, t, n) {
|
|
|
68
73
|
}
|
|
69
74
|
return {};
|
|
70
75
|
}
|
|
71
|
-
function
|
|
76
|
+
function d(e) {
|
|
72
77
|
if (!e) return 0;
|
|
73
78
|
let t = Date.parse(e);
|
|
74
79
|
return Number.isFinite(t) ? t : 0;
|
|
75
80
|
}
|
|
76
|
-
function
|
|
81
|
+
function f(e, t) {
|
|
77
82
|
let n = t === "created" ? "created_at" : "updated_at";
|
|
78
|
-
return [...e].sort((e, t) =>
|
|
83
|
+
return [...e].sort((e, t) => d(t[n]) - d(e[n]));
|
|
79
84
|
}
|
|
80
|
-
function
|
|
85
|
+
function p(e) {
|
|
81
86
|
let t = e.selected_workspace?.trim().replace(/\/+$/, "");
|
|
82
87
|
if (!t) return {
|
|
83
88
|
id: "__none_workspace",
|
|
@@ -89,7 +94,7 @@ function f(e) {
|
|
|
89
94
|
label: n
|
|
90
95
|
};
|
|
91
96
|
}
|
|
92
|
-
function
|
|
97
|
+
function m(e) {
|
|
93
98
|
let t = e.selected_repository?.trim().replace(/\/+$/, "");
|
|
94
99
|
if (!t) return {
|
|
95
100
|
id: "__none_repo",
|
|
@@ -101,27 +106,45 @@ function p(e) {
|
|
|
101
106
|
label: r
|
|
102
107
|
};
|
|
103
108
|
}
|
|
104
|
-
function
|
|
109
|
+
function h(e, t) {
|
|
110
|
+
return t === "local" ? p(e) : m(e);
|
|
111
|
+
}
|
|
112
|
+
function g(e, t, n, r) {
|
|
113
|
+
let i = e.map((e) => ({
|
|
114
|
+
conversationId: e.id,
|
|
115
|
+
groupId: h(e, n).id,
|
|
116
|
+
page: t.get(e.id) ?? 0
|
|
117
|
+
})), a = /* @__PURE__ */ new Map();
|
|
118
|
+
for (let { groupId: e, page: t } of i) {
|
|
119
|
+
let n = a.get(e);
|
|
120
|
+
(n === void 0 || t < n) && a.set(e, t);
|
|
121
|
+
}
|
|
122
|
+
let o = /* @__PURE__ */ new Set();
|
|
123
|
+
for (let { conversationId: e, groupId: t, page: n } of i) n === a.get(t) && o.add(e);
|
|
124
|
+
let s = r?.forceIncludeConversationId;
|
|
125
|
+
return s != null && e.some((e) => e.id === s) && o.add(s), o;
|
|
126
|
+
}
|
|
127
|
+
function _(e, t, n, r) {
|
|
105
128
|
let i = /* @__PURE__ */ new Map();
|
|
106
129
|
for (let n of e) {
|
|
107
|
-
let { id: e, label: a } =
|
|
130
|
+
let { id: e, label: a } = h(n, t), o = e === "__none_workspace" ? r.emptyWorkspace : e === "__none_repo" ? r.emptyRepository : a, s = i.get(e);
|
|
108
131
|
s ? s.conversations.push(n) : i.set(e, {
|
|
109
132
|
label: o,
|
|
110
133
|
conversations: [n]
|
|
111
134
|
});
|
|
112
135
|
}
|
|
113
136
|
let a = [...i.entries()].map(([e, r]) => {
|
|
114
|
-
let i =
|
|
137
|
+
let i = f(r.conversations, n);
|
|
115
138
|
return {
|
|
116
139
|
id: e,
|
|
117
140
|
label: r.label,
|
|
118
141
|
conversations: i,
|
|
119
|
-
launch:
|
|
142
|
+
launch: u(e, t, i)
|
|
120
143
|
};
|
|
121
|
-
}), o = (e) => e.conversations.reduce((e, t) => Math.max(e,
|
|
144
|
+
}), o = (e) => e.conversations.reduce((e, t) => Math.max(e, d(n === "created" ? t.created_at : t.updated_at)), 0);
|
|
122
145
|
return a.sort((e, t) => o(t) - o(e)), a;
|
|
123
146
|
}
|
|
124
|
-
function
|
|
147
|
+
function v(e, t) {
|
|
125
148
|
if (t.length === 0) return [...e];
|
|
126
149
|
let n = new Map(e.map((e) => [e.id, e])), r = [], i = /* @__PURE__ */ new Set();
|
|
127
150
|
for (let e of t) {
|
|
@@ -131,9 +154,9 @@ function h(e, t) {
|
|
|
131
154
|
for (let t of e) i.has(t.id) || r.push(t);
|
|
132
155
|
return r;
|
|
133
156
|
}
|
|
134
|
-
function
|
|
157
|
+
function y(e, t, n, r, i = "after") {
|
|
135
158
|
if (n === r) return [...e];
|
|
136
|
-
let a =
|
|
159
|
+
let a = v(t.map((e) => ({ id: e })), e).map((e) => e.id), o = a.indexOf(n), s = a.indexOf(r);
|
|
137
160
|
if (o < 0 || s < 0) return [...e];
|
|
138
161
|
let c = [...a];
|
|
139
162
|
c.splice(o, 1);
|
|
@@ -141,6 +164,6 @@ function g(e, t, n, r, i = "after") {
|
|
|
141
164
|
return c.splice(u, 0, n), c;
|
|
142
165
|
}
|
|
143
166
|
//#endregion
|
|
144
|
-
export {
|
|
167
|
+
export { a as UNNAMED_AUTOMATION_FACET, l as applyAutomationConversationFilter, v as applyGroupFolderOrder, c as collectAutomationNameFacets, i as filterOutPinnedConversations, n as getGroupConversationPreview, g as getGroupDiscoveryConversationIds, _ as groupConversations, y as moveGroupFolderOrder, r as resolvePinnedConversations, f as sortConversationsByField };
|
|
145
168
|
|
|
146
169
|
//# sourceMappingURL=conversation-panel-list-helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-panel-list-helpers.js","names":[],"sources":["../../../../src/components/features/conversation-panel/conversation-panel-list-helpers.ts"],"sourcesContent":["import type { AppConversation } from \"#/api/conversation-service/agent-server-conversation-service.types\";\nimport type { BackendKind } from \"#/api/backend-registry/types\";\nimport type { Provider } from \"#/types/settings\";\nimport {\n AUTOMATION_NAME_TAG_KEY,\n AUTOMATION_TAG_KEYS,\n} from \"#/api/agent-server-adapter\";\n\nexport type ConversationSortField = \"created\" | \"updated\";\nexport type ThreadScope = \"all\" | \"relevant\";\nexport type OrganizeMode = \"grouped\" | \"chronological\";\nexport type AutomationFilterMode =\n | \"all\"\n | \"hide-automations\"\n | \"only-automations\";\n\n/** Max conversations shown under a workspace/repo folder before \"View more\". */\nexport const GROUP_CONVERSATIONS_PREVIEW_LIMIT = 5;\n\ninterface GroupConversationPreviewOptions {\n limit?: number;\n expanded: boolean;\n activeConversationId?: string | null;\n}\n\nexport function getGroupConversationPreview(\n conversations: readonly AppConversation[],\n options: GroupConversationPreviewOptions,\n): {\n visibleConversations: AppConversation[];\n isPreviewTruncated: boolean;\n isShowingAll: boolean;\n} {\n const limit = options.limit ?? GROUP_CONVERSATIONS_PREVIEW_LIMIT;\n\n if (options.expanded || conversations.length <= limit) {\n return {\n visibleConversations: [...conversations],\n isPreviewTruncated: conversations.length > limit,\n isShowingAll: true,\n };\n }\n\n const activeIndex =\n options.activeConversationId != null\n ? conversations.findIndex((c) => c.id === options.activeConversationId)\n : -1;\n\n if (activeIndex >= limit) {\n const activeConversation = conversations[activeIndex];\n return {\n visibleConversations: [\n ...conversations.slice(0, limit - 1),\n activeConversation,\n ],\n isPreviewTruncated: true,\n isShowingAll: false,\n };\n }\n\n return {\n visibleConversations: conversations.slice(0, limit),\n isPreviewTruncated: conversations.length > limit,\n isShowingAll: false,\n };\n}\n\nexport function resolvePinnedConversations(\n pinnedIds: readonly string[],\n conversations: readonly AppConversation[],\n): AppConversation[] {\n const byId = new Map(\n conversations.map((conversation) => [conversation.id, conversation]),\n );\n return pinnedIds\n .map((id) => byId.get(id))\n .filter(\n (conversation): conversation is AppConversation => conversation != null,\n );\n}\n\nexport function filterOutPinnedConversations(\n conversations: readonly AppConversation[],\n pinnedIds: readonly string[],\n): AppConversation[] {\n if (pinnedIds.length === 0) {\n return [...conversations];\n }\n\n const pinnedSet = new Set(pinnedIds);\n return conversations.filter(\n (conversation) => !pinnedSet.has(conversation.id),\n );\n}\n\n/**\n * Facet bucket for automation-born conversations that carry no\n * `automationname` tag (double-underscore prefix mirrors the\n * `__none_workspace` group-id idiom).\n */\nexport const UNNAMED_AUTOMATION_FACET = \"__unnamed__\";\n\n/**\n * Whether a conversation was created by an automation run: the cloud backend\n * stamps `trigger: \"automation\"`, while local agent-server conversations are\n * recognized by the automation tags the SDK workspace attaches at creation.\n */\nexport function isAutomationConversation(\n conversation: AppConversation,\n): boolean {\n if (conversation.trigger === \"automation\") {\n return true;\n }\n const tags = conversation.tags;\n if (!tags) {\n return false;\n }\n return AUTOMATION_TAG_KEYS.some((key) => Boolean(tags[key]));\n}\n\nexport function getAutomationNameFacet(conversation: AppConversation): string {\n const name = conversation.tags?.[AUTOMATION_NAME_TAG_KEY]?.trim();\n return name || UNNAMED_AUTOMATION_FACET;\n}\n\n/**\n * Unique automation names among the given conversations, sorted for stable\n * menu order; the unnamed bucket (if present) is appended last.\n */\nexport function collectAutomationNameFacets(\n conversations: readonly AppConversation[],\n): string[] {\n const names = new Set<string>();\n let hasUnnamed = false;\n for (const conversation of conversations) {\n if (!isAutomationConversation(conversation)) {\n continue;\n }\n const facet = getAutomationNameFacet(conversation);\n if (facet === UNNAMED_AUTOMATION_FACET) {\n hasUnnamed = true;\n } else {\n names.add(facet);\n }\n }\n const sorted = [...names].sort((a, b) => a.localeCompare(b));\n if (hasUnnamed) {\n sorted.push(UNNAMED_AUTOMATION_FACET);\n }\n return sorted;\n}\n\nexport function applyAutomationConversationFilter(\n conversations: readonly AppConversation[],\n mode: AutomationFilterMode,\n selectedNames: readonly string[],\n availableFacets: readonly string[],\n): AppConversation[] {\n if (mode === \"all\") {\n return [...conversations];\n }\n if (mode === \"hide-automations\") {\n return conversations.filter(\n (conversation) => !isAutomationConversation(conversation),\n );\n }\n // \"only-automations\": an empty selection means every automation run, and a\n // selection that no longer intersects the available facets (stale names\n // persisted from another backend, renamed automations) degrades the same\n // way instead of yielding an unfillable empty list.\n const facetSet = new Set(availableFacets);\n const effectiveNames = selectedNames.filter((name) => facetSet.has(name));\n const narrowing = effectiveNames.length > 0 ? new Set(effectiveNames) : null;\n return conversations.filter((conversation) => {\n if (!isAutomationConversation(conversation)) {\n return false;\n }\n return (\n narrowing === null || narrowing.has(getAutomationNameFacet(conversation))\n );\n });\n}\n\n/** Subset of `useCreateConversation` variables for launching from a group row */\nexport type ConversationGroupLaunch = {\n workingDir?: string;\n repository?: {\n name: string;\n gitProvider: Provider;\n branch?: string;\n };\n};\n\nfunction buildGroupLaunch(\n id: string,\n backendKind: BackendKind,\n conversations: AppConversation[],\n): ConversationGroupLaunch {\n if (backendKind === \"local\") {\n if (id === \"__none_workspace\") {\n return {};\n }\n if (id.startsWith(\"ws:\")) {\n return { workingDir: id.slice(3) };\n }\n return {};\n }\n\n if (id === \"__none_repo\") {\n return {};\n }\n if (id.startsWith(\"repo:\")) {\n const name = id.slice(5);\n const sample = conversations[0];\n const gitProvider = (sample?.git_provider ?? \"github\") as Provider;\n const branch = sample?.selected_branch ?? \"main\";\n return {\n repository: {\n name,\n gitProvider,\n branch,\n },\n };\n }\n\n return {};\n}\n\nexport function parseConversationTimeMs(iso: string | undefined): number {\n if (!iso) return 0;\n const t = Date.parse(iso);\n return Number.isFinite(t) ? t : 0;\n}\n\nexport function sortConversationsByField(\n items: readonly AppConversation[],\n field: ConversationSortField,\n): AppConversation[] {\n const key = field === \"created\" ? \"created_at\" : \"updated_at\";\n return [...items].sort(\n (a, b) => parseConversationTimeMs(b[key]) - parseConversationTimeMs(a[key]),\n );\n}\n\nfunction workspaceGroup(conversation: AppConversation): {\n id: string;\n label: string;\n} {\n // Group by the user-selected workspace (a stable identifier shared by\n // every conversation launched from the same picker selection), not\n // `workspace.working_dir` — that field holds the per-conversation\n // worktree path the agent-server creates, which is unique per\n // conversation and would fragment the grouping.\n //\n // Normalize first, then check emptiness: inputs like \"/\", \"///\", or\n // \" ///\" trim+strip to \"\" and must fall back to the \"no workspace\"\n // bucket rather than producing a stray `ws:` group with no label.\n const normalized = conversation.selected_workspace\n ?.trim()\n .replace(/\\/+$/, \"\");\n if (!normalized) {\n return { id: \"__none_workspace\", label: \"\" };\n }\n const label = normalized.split(\"/\").filter(Boolean).pop() ?? normalized;\n return { id: `ws:${normalized}`, label };\n}\n\nfunction repositoryGroup(conversation: AppConversation): {\n id: string;\n label: string;\n} {\n // Mirror `workspaceGroup`'s normalize-then-check order so \"/\", \"///\",\n // and trailing-slash variants of the same repo all collapse to one\n // group instead of producing a stray `repo:/` bucket.\n const normalized = conversation.selected_repository\n ?.trim()\n .replace(/\\/+$/, \"\");\n if (!normalized) {\n return { id: \"__none_repo\", label: \"\" };\n }\n const parts = normalized.split(\"/\").filter(Boolean);\n const label = parts.length\n ? (parts[parts.length - 1] ?? normalized).replace(/\\.git$/, \"\")\n : normalized.replace(/\\.git$/, \"\");\n return { id: `repo:${normalized}`, label };\n}\n\nexport function groupConversations(\n items: readonly AppConversation[],\n backendKind: BackendKind,\n sortField: ConversationSortField,\n labels: { emptyWorkspace: string; emptyRepository: string },\n): {\n id: string;\n label: string;\n conversations: AppConversation[];\n launch: ConversationGroupLaunch;\n}[] {\n const byId = new Map<\n string,\n { label: string; conversations: AppConversation[] }\n >();\n\n for (const c of items) {\n const { id, label: rawLabel } =\n backendKind === \"local\" ? workspaceGroup(c) : repositoryGroup(c);\n const label =\n id === \"__none_workspace\"\n ? labels.emptyWorkspace\n : id === \"__none_repo\"\n ? labels.emptyRepository\n : rawLabel;\n const bucket = byId.get(id);\n if (bucket) {\n bucket.conversations.push(c);\n } else {\n byId.set(id, { label, conversations: [c] });\n }\n }\n\n const groups = [...byId.entries()].map(([id, g]) => {\n const conversations = sortConversationsByField(g.conversations, sortField);\n return {\n id,\n label: g.label,\n conversations,\n launch: buildGroupLaunch(id, backendKind, conversations),\n };\n });\n\n // Use reduce instead of `Math.max(...arr)` — the spread form would push\n // every conversation onto the call stack as a separate argument, which\n // hits JS engines' ~100k-arg limit on very large buckets.\n const groupOrderKey = (g: (typeof groups)[number]) =>\n g.conversations.reduce(\n (max, c) =>\n Math.max(\n max,\n parseConversationTimeMs(\n sortField === \"created\" ? c.created_at : c.updated_at,\n ),\n ),\n 0,\n );\n\n groups.sort((a, b) => groupOrderKey(b) - groupOrderKey(a));\n return groups;\n}\n\nexport function applyGroupFolderOrder<T extends { id: string }>(\n groups: readonly T[],\n order: readonly string[],\n): T[] {\n if (order.length === 0) {\n return [...groups];\n }\n\n const byId = new Map(groups.map((group) => [group.id, group]));\n const ordered: T[] = [];\n const seen = new Set<string>();\n\n for (const id of order) {\n const group = byId.get(id);\n if (group) {\n ordered.push(group);\n seen.add(id);\n }\n }\n\n for (const group of groups) {\n if (!seen.has(group.id)) {\n ordered.push(group);\n }\n }\n\n return ordered;\n}\n\nexport type GroupFolderDropPosition = \"before\" | \"after\";\n\nexport function moveGroupFolderOrder(\n order: readonly string[],\n groupIds: readonly string[],\n activeGroupId: string,\n targetGroupId: string,\n position: GroupFolderDropPosition = \"after\",\n): string[] {\n if (activeGroupId === targetGroupId) {\n return [...order];\n }\n\n const effectiveOrder = applyGroupFolderOrder(\n groupIds.map((id) => ({ id })),\n order,\n ).map((group) => group.id);\n const fromIndex = effectiveOrder.indexOf(activeGroupId);\n const toIndex = effectiveOrder.indexOf(targetGroupId);\n if (fromIndex < 0 || toIndex < 0) {\n return [...order];\n }\n\n const nextOrder = [...effectiveOrder];\n nextOrder.splice(fromIndex, 1);\n const adjustedTargetIndex = nextOrder.indexOf(targetGroupId);\n const insertIndex =\n position === \"before\" ? adjustedTargetIndex : adjustedTargetIndex + 1;\n nextOrder.splice(insertIndex, 0, activeGroupId);\n return nextOrder;\n}\n"],"mappings":";AAyBA,SAAgB,EACd,GACA,GAKA;CACA,IAAM,IAAQ,EAAQ,SAAA;CAEtB,IAAI,EAAQ,YAAY,EAAc,UAAU,GAC9C,OAAO;EACL,sBAAsB,CAAC,GAAG,CAAa;EACvC,oBAAoB,EAAc,SAAS;EAC3C,cAAc;CAChB;CAGF,IAAM,IACJ,EAAQ,wBAAwB,OAE5B,KADA,EAAc,WAAW,MAAM,EAAE,OAAO,EAAQ,oBAAoB;CAG1E,IAAI,KAAe,GAAO;EACxB,IAAM,IAAqB,EAAc;EACzC,OAAO;GACL,sBAAsB,CACpB,GAAG,EAAc,MAAM,GAAG,IAAQ,CAAC,GACnC,CACF;GACA,oBAAoB;GACpB,cAAc;EAChB;CACF;CAEA,OAAO;EACL,sBAAsB,EAAc,MAAM,GAAG,CAAK;EAClD,oBAAoB,EAAc,SAAS;EAC3C,cAAc;CAChB;AACF;AAEA,SAAgB,EACd,GACA,GACmB;CACnB,IAAM,IAAO,IAAI,IACf,EAAc,KAAK,MAAiB,CAAC,EAAa,IAAI,CAAY,CAAC,CACrE;CACA,OAAO,EACJ,KAAK,MAAO,EAAK,IAAI,CAAE,CAAC,EACxB,QACE,MAAkD,KAAgB,IACrE;AACJ;AAEA,SAAgB,EACd,GACA,GACmB;CACnB,IAAI,EAAU,WAAW,GACvB,OAAO,CAAC,GAAG,CAAa;CAG1B,IAAM,IAAY,IAAI,IAAI,CAAS;CACnC,OAAO,EAAc,QAClB,MAAiB,CAAC,EAAU,IAAI,EAAa,EAAE,CAClD;AACF;AAOA,IAAa,IAA2B;AAOxC,SAAgB,EACd,GACS;CACT,IAAI,EAAa,YAAY,cAC3B,OAAO;CAET,IAAM,IAAO,EAAa;CAI1B,OAHK,IAGE,EAAoB,MAAM,MAAQ,EAAQ,EAAK,EAAK,IAFlD;AAGX;AAEA,SAAgB,EAAuB,GAAuC;CAE5E,OADa,EAAa,MAAA,gBAAiC,KAAK,KAAA;AAElE;AAMA,SAAgB,EACd,GACU;CACV,IAAM,oBAAQ,IAAI,IAAY,GAC1B,IAAa;CACjB,KAAK,IAAM,KAAgB,GAAe;EACxC,IAAI,CAAC,EAAyB,CAAY,GACxC;EAEF,IAAM,IAAQ,EAAuB,CAAY;EACjD,AAAI,MAAA,gBACF,IAAa,KAEb,EAAM,IAAI,CAAK;CAEnB;CACA,IAAM,IAAS,CAAC,GAAG,CAAK,EAAE,MAAM,GAAG,MAAM,EAAE,cAAc,CAAC,CAAC;CAI3D,OAHI,KACF,EAAO,KAAK,CAAwB,GAE/B;AACT;AAEA,SAAgB,EACd,GACA,GACA,GACA,GACmB;CACnB,IAAI,MAAS,OACX,OAAO,CAAC,GAAG,CAAa;CAE1B,IAAI,MAAS,oBACX,OAAO,EAAc,QAClB,MAAiB,CAAC,EAAyB,CAAY,CAC1D;CAMF,IAAM,IAAW,IAAI,IAAI,CAAe,GAClC,IAAiB,EAAc,QAAQ,MAAS,EAAS,IAAI,CAAI,CAAC,GAClE,IAAY,EAAe,SAAS,IAAI,IAAI,IAAI,CAAc,IAAI;CACxE,OAAO,EAAc,QAAQ,MACtB,EAAyB,CAAY,IAIxC,MAAc,QAAQ,EAAU,IAAI,EAAuB,CAAY,CAAC,IAHjE,EAKV;AACH;AAYA,SAAS,EACP,GACA,GACA,GACyB;CACzB,IAAI,MAAgB,SAOlB,OANI,MAAO,qBACF,CAAC,IAEN,EAAG,WAAW,KAAK,IACd,EAAE,YAAY,EAAG,MAAM,CAAC,EAAE,IAE5B,CAAC;CAGV,IAAI,MAAO,eACT,OAAO,CAAC;CAEV,IAAI,EAAG,WAAW,OAAO,GAAG;EAC1B,IAAM,IAAO,EAAG,MAAM,CAAC,GACjB,IAAS,EAAc;EAG7B,OAAO,EACL,YAAY;GACV;GACA,aALiB,GAAQ,gBAAgB;GAMzC,QALW,GAAQ,mBAAmB;EAMxC,EACF;CACF;CAEA,OAAO,CAAC;AACV;AAEA,SAAgB,EAAwB,GAAiC;CACvE,IAAI,CAAC,GAAK,OAAO;CACjB,IAAM,IAAI,KAAK,MAAM,CAAG;CACxB,OAAO,OAAO,SAAS,CAAC,IAAI,IAAI;AAClC;AAEA,SAAgB,EACd,GACA,GACmB;CACnB,IAAM,IAAM,MAAU,YAAY,eAAe;CACjD,OAAO,CAAC,GAAG,CAAK,EAAE,MACf,GAAG,MAAM,EAAwB,EAAE,EAAI,IAAI,EAAwB,EAAE,EAAI,CAC5E;AACF;AAEA,SAAS,EAAe,GAGtB;CAUA,IAAM,IAAa,EAAa,oBAC5B,KAAK,EACN,QAAQ,QAAQ,EAAE;CACrB,IAAI,CAAC,GACH,OAAO;EAAE,IAAI;EAAoB,OAAO;CAAG;CAE7C,IAAM,IAAQ,EAAW,MAAM,GAAG,EAAE,OAAO,OAAO,EAAE,IAAI,KAAK;CAC7D,OAAO;EAAE,IAAI,MAAM;EAAc;CAAM;AACzC;AAEA,SAAS,EAAgB,GAGvB;CAIA,IAAM,IAAa,EAAa,qBAC5B,KAAK,EACN,QAAQ,QAAQ,EAAE;CACrB,IAAI,CAAC,GACH,OAAO;EAAE,IAAI;EAAe,OAAO;CAAG;CAExC,IAAM,IAAQ,EAAW,MAAM,GAAG,EAAE,OAAO,OAAO,GAC5C,IAAQ,EAAM,UACf,EAAM,EAAM,SAAS,MAAM,GAAY,QAAQ,UAAU,EAAE,IAC5D,EAAW,QAAQ,UAAU,EAAE;CACnC,OAAO;EAAE,IAAI,QAAQ;EAAc;CAAM;AAC3C;AAEA,SAAgB,EACd,GACA,GACA,GACA,GAME;CACF,IAAM,oBAAO,IAAI,IAGf;CAEF,KAAK,IAAM,KAAK,GAAO;EACrB,IAAM,EAAE,OAAI,OAAO,MACjB,MAAgB,UAAU,EAAe,CAAC,IAAI,EAAgB,CAAC,GAC3D,IACJ,MAAO,qBACH,EAAO,iBACP,MAAO,gBACL,EAAO,kBACP,GACF,IAAS,EAAK,IAAI,CAAE;EAC1B,AAAI,IACF,EAAO,cAAc,KAAK,CAAC,IAE3B,EAAK,IAAI,GAAI;GAAE;GAAO,eAAe,CAAC,CAAC;EAAE,CAAC;CAE9C;CAEA,IAAM,IAAS,CAAC,GAAG,EAAK,QAAQ,CAAC,EAAE,KAAK,CAAC,GAAI,OAAO;EAClD,IAAM,IAAgB,EAAyB,EAAE,eAAe,CAAS;EACzE,OAAO;GACL;GACA,OAAO,EAAE;GACT;GACA,QAAQ,EAAiB,GAAI,GAAa,CAAa;EACzD;CACF,CAAC,GAKK,KAAiB,MACrB,EAAE,cAAc,QACb,GAAK,MACJ,KAAK,IACH,GACA,EACE,MAAc,YAAY,EAAE,aAAa,EAAE,UAC7C,CACF,GACF,CACF;CAGF,OADA,EAAO,MAAM,GAAG,MAAM,EAAc,CAAC,IAAI,EAAc,CAAC,CAAC,GAClD;AACT;AAEA,SAAgB,EACd,GACA,GACK;CACL,IAAI,EAAM,WAAW,GACnB,OAAO,CAAC,GAAG,CAAM;CAGnB,IAAM,IAAO,IAAI,IAAI,EAAO,KAAK,MAAU,CAAC,EAAM,IAAI,CAAK,CAAC,CAAC,GACvD,IAAe,CAAC,GAChB,oBAAO,IAAI,IAAY;CAE7B,KAAK,IAAM,KAAM,GAAO;EACtB,IAAM,IAAQ,EAAK,IAAI,CAAE;EACzB,AAAI,MACF,EAAQ,KAAK,CAAK,GAClB,EAAK,IAAI,CAAE;CAEf;CAEA,KAAK,IAAM,KAAS,GAClB,AAAK,EAAK,IAAI,EAAM,EAAE,KACpB,EAAQ,KAAK,CAAK;CAItB,OAAO;AACT;AAIA,SAAgB,EACd,GACA,GACA,GACA,GACA,IAAoC,SAC1B;CACV,IAAI,MAAkB,GACpB,OAAO,CAAC,GAAG,CAAK;CAGlB,IAAM,IAAiB,EACrB,EAAS,KAAK,OAAQ,EAAE,MAAG,EAAE,GAC7B,CACF,EAAE,KAAK,MAAU,EAAM,EAAE,GACnB,IAAY,EAAe,QAAQ,CAAa,GAChD,IAAU,EAAe,QAAQ,CAAa;CACpD,IAAI,IAAY,KAAK,IAAU,GAC7B,OAAO,CAAC,GAAG,CAAK;CAGlB,IAAM,IAAY,CAAC,GAAG,CAAc;CACpC,EAAU,OAAO,GAAW,CAAC;CAC7B,IAAM,IAAsB,EAAU,QAAQ,CAAa,GACrD,IACJ,MAAa,WAAW,IAAsB,IAAsB;CAEtE,OADA,EAAU,OAAO,GAAa,GAAG,CAAa,GACvC;AACT"}
|
|
1
|
+
{"version":3,"file":"conversation-panel-list-helpers.js","names":[],"sources":["../../../../src/components/features/conversation-panel/conversation-panel-list-helpers.ts"],"sourcesContent":["import type { AppConversation } from \"#/api/conversation-service/agent-server-conversation-service.types\";\nimport type { BackendKind } from \"#/api/backend-registry/types\";\nimport type { Provider } from \"#/types/settings\";\nimport {\n AUTOMATION_NAME_TAG_KEY,\n AUTOMATION_TAG_KEYS,\n} from \"#/api/agent-server-adapter\";\n\nexport type ConversationSortField = \"created\" | \"updated\";\nexport type ThreadScope = \"all\" | \"relevant\";\nexport type OrganizeMode = \"grouped\" | \"chronological\";\nexport type AutomationFilterMode =\n | \"all\"\n | \"hide-automations\"\n | \"only-automations\";\n\n/** Max conversations shown under a workspace/repo folder before \"View more\". */\nexport const GROUP_CONVERSATIONS_PREVIEW_LIMIT = 5;\n\ninterface GroupConversationPreviewOptions {\n limit?: number;\n expanded: boolean;\n activeConversationId?: string | null;\n /**\n * When set, the collapsed preview is drawn only from these conversation IDs\n * (plus the active conversation when it belongs to the group). Expanding\n * still reveals every loaded conversation in `conversations`.\n */\n discoveryConversationIds?: ReadonlySet<string>;\n}\n\n/**\n * Builds the frozen collapsed-preview pool for a folder.\n *\n * Global \"Load more\" may fetch later pages that add conversations to an\n * already-visible folder; those rows stay out of the collapsed preview so the\n * folder's first impression stays stable until the user expands it.\n */\nfunction resolveCollapsedPreviewPool(\n conversations: readonly AppConversation[],\n discoveryConversationIds: ReadonlySet<string> | undefined,\n activeConversationId: string | null | undefined,\n): AppConversation[] {\n if (!discoveryConversationIds) {\n return [...conversations];\n }\n\n const pool = conversations.filter((conversation) =>\n discoveryConversationIds.has(conversation.id),\n );\n\n // The load-bearing active-conversation guarantee lives in\n // `getGroupDiscoveryConversationIds` (`forceIncludeConversationId`); this\n // fallback only covers callers that pass a discovery set built without it.\n if (\n activeConversationId != null &&\n !pool.some((conversation) => conversation.id === activeConversationId)\n ) {\n const activeConversation = conversations.find(\n (conversation) => conversation.id === activeConversationId,\n );\n if (activeConversation) {\n pool.push(activeConversation);\n }\n }\n\n return pool;\n}\n\nexport function getGroupConversationPreview(\n conversations: readonly AppConversation[],\n options: GroupConversationPreviewOptions,\n): {\n visibleConversations: AppConversation[];\n isPreviewTruncated: boolean;\n isShowingAll: boolean;\n} {\n const limit = options.limit ?? GROUP_CONVERSATIONS_PREVIEW_LIMIT;\n const pool = resolveCollapsedPreviewPool(\n conversations,\n options.discoveryConversationIds,\n options.activeConversationId,\n );\n\n let collapsedVisible: AppConversation[];\n if (pool.length <= limit) {\n collapsedVisible = pool;\n } else {\n const activeIndex =\n options.activeConversationId != null\n ? pool.findIndex(\n (conversation) => conversation.id === options.activeConversationId,\n )\n : -1;\n\n if (activeIndex >= limit) {\n collapsedVisible = [...pool.slice(0, limit - 1), pool[activeIndex]];\n } else {\n collapsedVisible = pool.slice(0, limit);\n }\n }\n\n const collapsedHidesSomething =\n collapsedVisible.length < conversations.length;\n\n if (options.expanded) {\n return {\n visibleConversations: [...conversations],\n isPreviewTruncated: collapsedHidesSomething,\n isShowingAll: true,\n };\n }\n\n return {\n visibleConversations: collapsedVisible,\n isPreviewTruncated: collapsedHidesSomething,\n isShowingAll: !collapsedHidesSomething,\n };\n}\n\nexport function resolvePinnedConversations(\n pinnedIds: readonly string[],\n conversations: readonly AppConversation[],\n): AppConversation[] {\n const byId = new Map(\n conversations.map((conversation) => [conversation.id, conversation]),\n );\n return pinnedIds\n .map((id) => byId.get(id))\n .filter(\n (conversation): conversation is AppConversation => conversation != null,\n );\n}\n\nexport function filterOutPinnedConversations(\n conversations: readonly AppConversation[],\n pinnedIds: readonly string[],\n): AppConversation[] {\n if (pinnedIds.length === 0) {\n return [...conversations];\n }\n\n const pinnedSet = new Set(pinnedIds);\n return conversations.filter(\n (conversation) => !pinnedSet.has(conversation.id),\n );\n}\n\n/**\n * Facet bucket for automation-born conversations that carry no\n * `automationname` tag (double-underscore prefix mirrors the\n * `__none_workspace` group-id idiom).\n */\nexport const UNNAMED_AUTOMATION_FACET = \"__unnamed__\";\n\n/**\n * Whether a conversation was created by an automation run: the cloud backend\n * stamps `trigger: \"automation\"`, while local agent-server conversations are\n * recognized by the automation tags the SDK workspace attaches at creation.\n */\nexport function isAutomationConversation(\n conversation: AppConversation,\n): boolean {\n if (conversation.trigger === \"automation\") {\n return true;\n }\n const tags = conversation.tags;\n if (!tags) {\n return false;\n }\n return AUTOMATION_TAG_KEYS.some((key) => Boolean(tags[key]));\n}\n\nexport function getAutomationNameFacet(conversation: AppConversation): string {\n const name = conversation.tags?.[AUTOMATION_NAME_TAG_KEY]?.trim();\n return name || UNNAMED_AUTOMATION_FACET;\n}\n\n/**\n * Unique automation names among the given conversations, sorted for stable\n * menu order; the unnamed bucket (if present) is appended last.\n */\nexport function collectAutomationNameFacets(\n conversations: readonly AppConversation[],\n): string[] {\n const names = new Set<string>();\n let hasUnnamed = false;\n for (const conversation of conversations) {\n if (!isAutomationConversation(conversation)) {\n continue;\n }\n const facet = getAutomationNameFacet(conversation);\n if (facet === UNNAMED_AUTOMATION_FACET) {\n hasUnnamed = true;\n } else {\n names.add(facet);\n }\n }\n const sorted = [...names].sort((a, b) => a.localeCompare(b));\n if (hasUnnamed) {\n sorted.push(UNNAMED_AUTOMATION_FACET);\n }\n return sorted;\n}\n\nexport function applyAutomationConversationFilter(\n conversations: readonly AppConversation[],\n mode: AutomationFilterMode,\n selectedNames: readonly string[],\n availableFacets: readonly string[],\n): AppConversation[] {\n if (mode === \"all\") {\n return [...conversations];\n }\n if (mode === \"hide-automations\") {\n return conversations.filter(\n (conversation) => !isAutomationConversation(conversation),\n );\n }\n // \"only-automations\": an empty selection means every automation run, and a\n // selection that no longer intersects the available facets (stale names\n // persisted from another backend, renamed automations) degrades the same\n // way instead of yielding an unfillable empty list.\n const facetSet = new Set(availableFacets);\n const effectiveNames = selectedNames.filter((name) => facetSet.has(name));\n const narrowing = effectiveNames.length > 0 ? new Set(effectiveNames) : null;\n return conversations.filter((conversation) => {\n if (!isAutomationConversation(conversation)) {\n return false;\n }\n return (\n narrowing === null || narrowing.has(getAutomationNameFacet(conversation))\n );\n });\n}\n\n/** Subset of `useCreateConversation` variables for launching from a group row */\nexport type ConversationGroupLaunch = {\n workingDir?: string;\n repository?: {\n name: string;\n gitProvider: Provider;\n branch?: string;\n };\n};\n\nfunction buildGroupLaunch(\n id: string,\n backendKind: BackendKind,\n conversations: AppConversation[],\n): ConversationGroupLaunch {\n if (backendKind === \"local\") {\n if (id === \"__none_workspace\") {\n return {};\n }\n if (id.startsWith(\"ws:\")) {\n return { workingDir: id.slice(3) };\n }\n return {};\n }\n\n if (id === \"__none_repo\") {\n return {};\n }\n if (id.startsWith(\"repo:\")) {\n const name = id.slice(5);\n const sample = conversations[0];\n const gitProvider = (sample?.git_provider ?? \"github\") as Provider;\n const branch = sample?.selected_branch ?? \"main\";\n return {\n repository: {\n name,\n gitProvider,\n branch,\n },\n };\n }\n\n return {};\n}\n\nexport function parseConversationTimeMs(iso: string | undefined): number {\n if (!iso) return 0;\n const t = Date.parse(iso);\n return Number.isFinite(t) ? t : 0;\n}\n\nexport function sortConversationsByField(\n items: readonly AppConversation[],\n field: ConversationSortField,\n): AppConversation[] {\n const key = field === \"created\" ? \"created_at\" : \"updated_at\";\n return [...items].sort(\n (a, b) => parseConversationTimeMs(b[key]) - parseConversationTimeMs(a[key]),\n );\n}\n\nfunction workspaceGroup(conversation: AppConversation): {\n id: string;\n label: string;\n} {\n // Group by the user-selected workspace (a stable identifier shared by\n // every conversation launched from the same picker selection), not\n // `workspace.working_dir` — that field holds the per-conversation\n // worktree path the agent-server creates, which is unique per\n // conversation and would fragment the grouping.\n //\n // Normalize first, then check emptiness: inputs like \"/\", \"///\", or\n // \" ///\" trim+strip to \"\" and must fall back to the \"no workspace\"\n // bucket rather than producing a stray `ws:` group with no label.\n const normalized = conversation.selected_workspace\n ?.trim()\n .replace(/\\/+$/, \"\");\n if (!normalized) {\n return { id: \"__none_workspace\", label: \"\" };\n }\n const label = normalized.split(\"/\").filter(Boolean).pop() ?? normalized;\n return { id: `ws:${normalized}`, label };\n}\n\nfunction repositoryGroup(conversation: AppConversation): {\n id: string;\n label: string;\n} {\n // Mirror `workspaceGroup`'s normalize-then-check order so \"/\", \"///\",\n // and trailing-slash variants of the same repo all collapse to one\n // group instead of producing a stray `repo:/` bucket.\n const normalized = conversation.selected_repository\n ?.trim()\n .replace(/\\/+$/, \"\");\n if (!normalized) {\n return { id: \"__none_repo\", label: \"\" };\n }\n const parts = normalized.split(\"/\").filter(Boolean);\n const label = parts.length\n ? (parts[parts.length - 1] ?? normalized).replace(/\\.git$/, \"\")\n : normalized.replace(/\\.git$/, \"\");\n return { id: `repo:${normalized}`, label };\n}\n\n/**\n * Resolves the stable folder identity used by grouped conversation views.\n *\n * Keeping this shared with `groupConversations` lets pagination reason about\n * folder discovery without duplicating workspace/repository normalization.\n */\nfunction getConversationGroupIdentity(\n conversation: AppConversation,\n backendKind: BackendKind,\n): { id: string; label: string } {\n return backendKind === \"local\"\n ? workspaceGroup(conversation)\n : repositoryGroup(conversation);\n}\n\n/**\n * Max backend pages fetched for a single grouped \"Load more\" click. The\n * driver walks past pages that only deepen already-visible folders looking\n * for a new folder, and this cap prevents one click from walking the entire\n * remaining cursor when no undiscovered folder exists. Chronological mode is\n * not capped — it keeps its pre-existing fetch-until-visible behavior.\n */\nexport const MAX_PAGES_PER_LOAD_MORE_CLICK = 3;\n\n/**\n * Conversation IDs that belong on each folder's discovery page — the first\n * backend page where that folder appeared.\n *\n * Global \"Load more\" still discovers folders from later pages, but the\n * collapsed preview for an already-visible folder stays frozen to this set.\n * Expanding the folder reads the full grouped `conversations` array instead.\n * `forceIncludeConversationId` keeps the active thread in the preview even\n * when it landed on a non-discovery page.\n */\nexport function getGroupDiscoveryConversationIds(\n items: readonly AppConversation[],\n pageByConversationId: ReadonlyMap<string, number>,\n backendKind: BackendKind,\n options?: { forceIncludeConversationId?: string | null },\n): Set<string> {\n // Resolve each conversation's folder identity exactly once; both passes\n // below (finding each folder's discovery page, then collecting the ids on\n // that page) read from this record instead of re-running the\n // workspace/repository normalization.\n const resolved = items.map((conversation) => ({\n conversationId: conversation.id,\n groupId: getConversationGroupIdentity(conversation, backendKind).id,\n page: pageByConversationId.get(conversation.id) ?? 0,\n }));\n\n const discoveryPageByGroupId = new Map<string, number>();\n for (const { groupId, page } of resolved) {\n const currentDiscoveryPage = discoveryPageByGroupId.get(groupId);\n if (currentDiscoveryPage === undefined || page < currentDiscoveryPage) {\n discoveryPageByGroupId.set(groupId, page);\n }\n }\n\n const discoveryIds = new Set<string>();\n for (const { conversationId, groupId, page } of resolved) {\n if (page === discoveryPageByGroupId.get(groupId)) {\n discoveryIds.add(conversationId);\n }\n }\n\n const forceIncludeId = options?.forceIncludeConversationId;\n if (\n forceIncludeId != null &&\n items.some((conversation) => conversation.id === forceIncludeId)\n ) {\n discoveryIds.add(forceIncludeId);\n }\n\n return discoveryIds;\n}\n\nexport function groupConversations(\n items: readonly AppConversation[],\n backendKind: BackendKind,\n sortField: ConversationSortField,\n labels: { emptyWorkspace: string; emptyRepository: string },\n): {\n id: string;\n label: string;\n conversations: AppConversation[];\n launch: ConversationGroupLaunch;\n}[] {\n const byId = new Map<\n string,\n { label: string; conversations: AppConversation[] }\n >();\n\n for (const c of items) {\n const { id, label: rawLabel } = getConversationGroupIdentity(\n c,\n backendKind,\n );\n const label =\n id === \"__none_workspace\"\n ? labels.emptyWorkspace\n : id === \"__none_repo\"\n ? labels.emptyRepository\n : rawLabel;\n const bucket = byId.get(id);\n if (bucket) {\n bucket.conversations.push(c);\n } else {\n byId.set(id, { label, conversations: [c] });\n }\n }\n\n const groups = [...byId.entries()].map(([id, g]) => {\n const conversations = sortConversationsByField(g.conversations, sortField);\n return {\n id,\n label: g.label,\n conversations,\n launch: buildGroupLaunch(id, backendKind, conversations),\n };\n });\n\n // Use reduce instead of `Math.max(...arr)` — the spread form would push\n // every conversation onto the call stack as a separate argument, which\n // hits JS engines' ~100k-arg limit on very large buckets.\n const groupOrderKey = (g: (typeof groups)[number]) =>\n g.conversations.reduce(\n (max, c) =>\n Math.max(\n max,\n parseConversationTimeMs(\n sortField === \"created\" ? c.created_at : c.updated_at,\n ),\n ),\n 0,\n );\n\n groups.sort((a, b) => groupOrderKey(b) - groupOrderKey(a));\n return groups;\n}\n\nexport function applyGroupFolderOrder<T extends { id: string }>(\n groups: readonly T[],\n order: readonly string[],\n): T[] {\n if (order.length === 0) {\n return [...groups];\n }\n\n const byId = new Map(groups.map((group) => [group.id, group]));\n const ordered: T[] = [];\n const seen = new Set<string>();\n\n for (const id of order) {\n const group = byId.get(id);\n if (group) {\n ordered.push(group);\n seen.add(id);\n }\n }\n\n for (const group of groups) {\n if (!seen.has(group.id)) {\n ordered.push(group);\n }\n }\n\n return ordered;\n}\n\nexport type GroupFolderDropPosition = \"before\" | \"after\";\n\nexport function moveGroupFolderOrder(\n order: readonly string[],\n groupIds: readonly string[],\n activeGroupId: string,\n targetGroupId: string,\n position: GroupFolderDropPosition = \"after\",\n): string[] {\n if (activeGroupId === targetGroupId) {\n return [...order];\n }\n\n const effectiveOrder = applyGroupFolderOrder(\n groupIds.map((id) => ({ id })),\n order,\n ).map((group) => group.id);\n const fromIndex = effectiveOrder.indexOf(activeGroupId);\n const toIndex = effectiveOrder.indexOf(targetGroupId);\n if (fromIndex < 0 || toIndex < 0) {\n return [...order];\n }\n\n const nextOrder = [...effectiveOrder];\n nextOrder.splice(fromIndex, 1);\n const adjustedTargetIndex = nextOrder.indexOf(targetGroupId);\n const insertIndex =\n position === \"before\" ? adjustedTargetIndex : adjustedTargetIndex + 1;\n nextOrder.splice(insertIndex, 0, activeGroupId);\n return nextOrder;\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require("../../../_virtual/_rolldown/runtime.cjs"),t=require("../../../node_modules/react-i18next/dist/es/useTranslation.cjs"),n=require("../../../i18n/declaration.cjs"),r=require("../../../utils/status.cjs"),i=require("../../../utils/utils.cjs"),ee=require("../../../context/navigation-context.cjs"),a=require("../../../utils/custom-toast-handlers.cjs"),te=require("../../../contexts/active-backend-context.cjs"),ne=require("../../../node_modules/@heroui/tooltip/dist/chunk-AUA5GDXN.cjs"),re=require("../../../hooks/use-click-outside-element.cjs"),ie=require("../../../hooks/mutation/use-create-conversation.cjs"),ae=require("../../shared/navigation-link.cjs"),oe=require("../../../hooks/mutation/use-delete-conversation.cjs"),se=require("../../../hooks/mutation/use-unified-stop-conversation.cjs"),ce=require("../../../hooks/use-is-creating-conversation.cjs"),le=require("../../../hooks/mutation/use-update-conversation.cjs"),ue=require("./confirm-delete-modal.cjs"),de=require("./confirm-stop-modal.cjs"),fe=require("../../../hooks/use-backend-scoped-path.cjs"),pe=require("../../../hooks/query/use-paginated-conversations.cjs"),me=require("../../../hooks/query/use-start-tasks.cjs"),he=require("./exit-conversation-modal.cjs"),ge=require("./conversation-card/conversation-card.cjs"),_e=require("./conversation-card/conversation-card-preview.cjs"),ve=require("./start-task-card/start-task-card.cjs"),o=require("./conversation-card/conversation-card-skeleton.cjs"),ye=require("./compact-conversation-row.cjs"),s=require("../../../stores/conversation-panel-preferences-store.cjs"),c=require("./conversation-panel-list-helpers.cjs"),be=require("./conversation-panel-filter-menu.cjs"),xe=require("./conversation-panel-new-thread-picker.cjs"),Se=require("./conversation-group-folder-list.cjs"),Ce=require("./conversation-panel-pinned-section.cjs"),l=require("../../../stores/pinned-conversations-store.cjs");let u=require("react");u=e.__toESM(u,1);let d=require("react/jsx-runtime");var we=()=>{},Te=[],f=3600*1e3,Ee=e=>{let t=Date.now()-f,n=[],r=[];for(let i of e){let e=i.updated_at?Date.parse(i.updated_at):NaN;Number.isFinite(e)&&e<t?r.push(i):n.push(i)}return{recent:n,older:r}};function p({onClose:e,compact:f=!1}){let{t:p}=t.useTranslation(`openhands`),{conversationId:m,navigate:h}=ee.useNavigation(),{backend:g}=te.useActiveBackend(),De=fe.useBackendScopedPath(),Oe=re.useClickOutsideElement(e??we),[ke,_]=u.default.useState(!1),[Ae,v]=u.default.useState(!1),[je,Me]=u.default.useState(!1),[Ne,y]=u.default.useState(!1),b=s.useConversationPanelPreferencesStore(e=>e.showOlderConversations),Pe=s.useConversationPanelPreferencesStore(e=>e.toggleShowOlderConversations),x=s.useConversationPanelPreferencesStore(e=>e.showRepoBranchMetadata),Fe=s.useConversationPanelPreferencesStore(e=>e.toggleShowRepoBranchMetadata),S=s.useConversationPanelPreferencesStore(e=>e.showLlmProfiles),Ie=s.useConversationPanelPreferencesStore(e=>e.toggleShowLlmProfiles),C=s.useConversationPanelPreferencesStore(e=>e.showTagsMetadata),Le=s.useConversationPanelPreferencesStore(e=>e.toggleShowTagsMetadata),w=s.useConversationPanelPreferencesStore(e=>e.showHoverMetadata),Re=s.useConversationPanelPreferencesStore(e=>e.toggleShowHoverMetadata),T=s.useConversationPanelPreferencesStore(e=>e.organizeMode),ze=s.useConversationPanelPreferencesStore(e=>e.setOrganizeMode),E=s.useConversationPanelPreferencesStore(e=>e.conversationSort),Be=s.useConversationPanelPreferencesStore(e=>e.setConversationSort),D=s.useConversationPanelPreferencesStore(e=>e.threadScope),Ve=s.useConversationPanelPreferencesStore(e=>e.setThreadScope),O=s.useConversationPanelPreferencesStore(e=>e.automationFilterMode),He=s.useConversationPanelPreferencesStore(e=>e.setAutomationFilterMode),k=s.useConversationPanelPreferencesStore(e=>e.selectedAutomationNames),Ue=s.useConversationPanelPreferencesStore(e=>e.toggleAutomationName),A=s.useConversationPanelPreferencesStore(e=>e.groupFolderOrder),We=s.useConversationPanelPreferencesStore(e=>e.setGroupFolderOrder),[Ge,Ke]=u.default.useState(!1),[qe,Je]=u.default.useState(!1),Ye=re.useClickOutsideElement(()=>{Ke(!1)}),[Xe,Ze]=u.default.useState(()=>new Set),[Qe,$e]=u.default.useState(()=>new Set),[et,j]=u.default.useState(!1),M=l.usePinnedConversationsStore(e=>e.pinsByBackendId[g.id]??Te),tt=l.usePinnedConversationsStore(e=>e.togglePin),nt=l.usePinnedConversationsStore(e=>e.pruneMissingConversations),rt=u.default.useCallback(e=>{Ze(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]),it=u.default.useCallback(e=>{$e(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]);u.default.useEffect(()=>{T!==`grouped`&&(Ze(new Set),$e(new Set))},[T]);let at=u.default.useRef(null),[N,ot]=u.default.useState(null),[st,P]=u.default.useState(null),[F,ct]=u.default.useState(null),{data:lt,isLoading:ut,isFetched:I,hasNextPage:L,isFetching:dt,isFetchingNextPage:R,fetchNextPage:ft}=pe.usePaginatedConversations(),{data:pt}=me.useStartTasks(),z=u.default.useMemo(()=>{let e=lt?.pages.flatMap(e=>e.items)??[],t=new Set;return e.filter(e=>t.has(e.id)?!1:(t.add(e.id),!0))},[lt]),B=u.default.useMemo(()=>c.collectAutomationNameFacets(z),[z]),V=u.default.useMemo(()=>c.applyAutomationConversationFilter(z,O,k,B),[O,B,z,k]),mt=u.default.useMemo(()=>c.resolvePinnedConversations(M,z),[z,M]);u.default.useEffect(()=>{I&&nt(g.id,z.map(e=>e.id))},[g.id,z,I,nt]),u.default.useEffect(()=>{M.length===0&&j(!1)},[M.length]);let ht=u.default.useMemo(()=>{let e=D===`relevant`?V.filter(e=>r.isExecutionActive(e.execution_status)):V;return f?e:c.filterOutPinnedConversations(e,M)},[V,f,M,D]),{recent:H,older:U}=u.default.useMemo(()=>Ee(ht),[ht]),gt=u.default.useMemo(()=>c.sortConversationsByField(b?[...H,...U]:H,E),[H,U,b,E]),_t=u.default.useMemo(()=>({emptyWorkspace:p(n.I18nKey.CONVERSATION_PANEL$NO_WORKSPACE),emptyRepository:p(n.I18nKey.CONVERSATION_PANEL$NO_REPOSITORY)}),[p]),W=u.default.useMemo(()=>f||T!==`grouped`?null:c.groupConversations([...H,...b?U:[]],g.kind,E,_t),[g.kind,f,E,_t,U,T,H,b]),G=u.default.useMemo(()=>W?c.applyGroupFolderOrder(W,A):null,[W,A]),vt=u.default.useMemo(()=>W?.map(e=>e.id)??[],[W]),yt=u.default.useMemo(()=>c.sortConversationsByField(H.filter(e=>r.isExecutionActive(e.execution_status)),E),[E,H]),bt=gt.length,xt=u.default.useMemo(()=>G?G.reduce((e,t)=>e+t.conversations.length,0):0,[G]),K=T===`grouped`&&!f?xt===0:bt===0,St=K&&O!==`all`&&z.length>0&&V.length===0,q=T===`grouped`&&!f?xt:bt,[J,Y]=u.default.useState(null),Ct=u.default.useRef(q);Ct.current=q;let wt=u.default.useCallback(()=>{L&&Y(Ct.current)},[L]);u.default.useEffect(()=>{if(J!==null){if(q>J){Y(null);return}if(!L){Y(null);return}dt||R||ft()}},[J,q,L,dt,R,ft]);let Tt=J!==null||R,{mutate:Et,mutateAsync:Dt}=oe.useDeleteConversation(),{mutate:Ot}=se.useUnifiedPauseConversation(),{mutate:kt}=le.useUpdateConversation(),At=U.length>0&&!b,jt=!!L&&!At&&!f&&(!K||St),{mutate:Mt}=ie.useCreateConversation(),X=ce.useIsCreatingConversation(),Nt=u.default.useCallback(e=>{X||Mt({workingDir:e.workingDir,repository:e.repository,entryPoint:`sidebar_relaunch_project`},{onSuccess:e=>{h(`/conversations/${e.conversation_id}`)}})},[Mt,X,h]),Pt=u.default.useCallback((e,t)=>{_(!0),ot(e),P(t)},[]),Ft=u.default.useCallback(e=>{v(!0),ot(e)},[]),It=u.default.useCallback((e,t)=>{kt({conversationId:e,newTitle:t},{onSuccess:()=>{a.displaySuccessToast(p(n.I18nKey.CONVERSATION$TITLE_UPDATED))}})},[p,kt]),Lt=()=>{N&&Et({conversationId:N},{onSuccess:()=>{N===m&&h(`/conversations`)}})},Rt=()=>{N&&Ot({conversationId:N})},zt=async()=>{let e=z.map(e=>e.id),t=await Promise.allSettled(e.map(e=>Dt({conversationId:e}))),n=t.flatMap((t,n)=>t.status===`fulfilled`?[e[n]]:[]),r=t.length-n.length;m!==null&&n.includes(m)&&h(`/conversations`),r>0&&a.displayErrorToast(`${r} conversation${r===1?``:`s`} could not be deleted.`)},Z=u.default.useCallback((t,n)=>{let r=M.includes(t.id);return f?(0,d.jsx)(ye.CompactConversationRow,{conversationId:t.id,title:t.title??``,selectedRepository:{selected_repository:t.selected_repository,selected_branch:t.selected_branch,git_provider:t.git_provider},executionStatus:t.execution_status,sandboxStatus:t.sandbox_status,lastUpdatedAt:t.updated_at,createdAt:t.created_at,workspaceWorkingDir:t.selected_workspace??t.workspace?.working_dir,isActive:t.id===m,onClose:e,showRepositoryMetadata:x,llmModel:t.llm_model,showLlmProfiles:S,agentKind:t.agent_kind,acpServer:t.acp_server,tags:t.tags,showTags:C},t.id):(0,d.jsx)(ne.tooltip_default,{placement:`right-start`,delay:1e3,closeDelay:100,isDisabled:!w||F===t.id,disableAnimation:!1,className:`max-w-none overflow-visible rounded-xl border border-[var(--oh-border)] bg-base-secondary p-0 text-white shadow-xl`,content:(0,d.jsx)(_e.ConversationCardPreview,{title:t.title??``,executionStatus:t.execution_status,sandboxStatus:t.sandbox_status,selectedRepository:{selected_repository:t.selected_repository,selected_branch:t.selected_branch,git_provider:t.git_provider},workspaceWorkingDir:t.selected_workspace??t.workspace?.working_dir,llmModel:t.llm_model,agentKind:t.agent_kind,acpServer:t.acp_server,createdAt:t.created_at,tags:t.tags}),children:(0,d.jsx)(ae.NavigationLink,{to:De(`/conversations/${t.id}`),onClick:e,className:i.cn(`block rounded-md transition-colors`,F!==t.id&&`hover:bg-[var(--oh-surface)]`,(t.id===m||F===t.id)&&`bg-[var(--oh-surface)]`),children:(0,d.jsx)(ge.ConversationCard,{onDelete:()=>Pt(t.id,t.title??``),onStop:()=>Ft(t.id),onChangeTitle:e=>It(t.id,e),title:t.title??``,selectedRepository:{selected_repository:t.selected_repository,selected_branch:t.selected_branch,git_provider:t.git_provider},lastUpdatedAt:t.updated_at,createdAt:t.created_at,executionStatus:t.execution_status,sandboxStatus:t.sandbox_status,conversationId:t.id,contextMenuOpen:F===t.id,onContextMenuToggle:e=>ct(e?t.id:null),isActive:t.id===m,workspaceWorkingDir:t.selected_workspace??t.workspace?.working_dir,showRepositoryMetadata:x,llmModel:t.llm_model,showLlmProfiles:S,agentKind:t.agent_kind,acpServer:t.acp_server,tags:t.tags,showTags:C,isPinned:r,onTogglePin:()=>tt(g.id,t.id),alwaysShowPinIcon:r&&!n?.inPinnedSection})})},t.id)},[g.id,f,m,It,Pt,Ft,e,F,M,x,S,C,w,tt]),Q=ut||!I,$=!f&&!Q&&mt.length>0,Bt=I&&!ut&&!f&&K&&!$&&!pt?.length;return(0,d.jsxs)(`div`,{ref:Oe,"data-testid":`conversation-panel`,className:`flex h-full min-h-0 w-full flex-col`,children:[!f&&(0,d.jsx)(`div`,{className:i.cn(`-ml-2.5 w-[calc(100%+0.625rem)] max-w-none box-border border-b`,qe?`border-[var(--oh-border)]`:`border-transparent`),children:(0,d.jsxs)(`div`,{"data-testid":`older-conversations-summary`,className:`flex min-w-0 flex-nowrap items-center gap-x-2 py-2 pl-4 pr-2.5 text-[var(--oh-muted)]`,children:[(0,d.jsx)(`span`,{className:`min-w-0 truncate text-sm font-medium text-[var(--oh-muted)]`,children:p(n.I18nKey.SIDEBAR$CONVERSATIONS)}),(0,d.jsxs)(`div`,{className:`ml-auto flex shrink-0 items-center gap-0.5`,children:[(0,d.jsx)(xe.ConversationPanelNewThreadPicker,{backendKind:g.kind}),(0,d.jsx)(be.ConversationPanelFilterMenu,{filterMenuOpen:Ge,setFilterMenuOpen:Ke,menuRef:Ye,backendKind:g.kind,organizeMode:T,setOrganizeMode:ze,conversationSort:E,setConversationSort:Be,threadScope:D,setThreadScope:Ve,automationFilterMode:O,setAutomationFilterMode:He,selectedAutomationNames:k,onToggleAutomationName:Ue,automationNameFacets:B,showOlderConversations:b,toggleShowOlderConversations:Pe,showRepoBranchMetadata:x,toggleShowRepoBranchMetadata:Fe,showLlmProfiles:S,toggleShowLlmProfiles:Ie,showTagsMetadata:C,toggleShowTagsMetadata:Le,showHoverMetadata:w,toggleShowHoverMetadata:Re,totalConversationsCount:z.length,onRequestDeleteAll:()=>y(!0)})]})]})}),(0,d.jsxs)(`div`,{ref:at,"data-testid":`conversation-panel-list-scroll`,onScroll:e=>{Je(e.currentTarget.scrollTop>0)},className:i.cn(`flex min-h-0 flex-1 flex-col overflow-y-auto overflow-x-hidden overscroll-contain custom-scrollbar-always`,!f&&`conversation-panel-list-scroll`),children:[Q&&(0,d.jsx)(o.ConversationCardSkeleton,{compact:f}),!f&&Bt&&(0,d.jsx)(`div`,{"data-testid":`conversation-panel-empty-state`,className:`flex min-h-0 flex-1 flex-col items-center justify-center px-4 py-8`,children:(0,d.jsx)(`p`,{className:`text-xs text-[var(--oh-muted)]`,children:p(St?n.I18nKey.CONVERSATION_PANEL$NO_AUTOMATION_MATCHES:n.I18nKey.CONVERSATION$NO_CONVERSATIONS)})}),$?(0,d.jsx)(Ce.ConversationPanelPinnedSection,{pinnedConversations:mt,isPreviewExpanded:et,onTogglePreviewExpanded:()=>j(e=>!e),activeConversationId:m,showDivider:!f&&T===`chronological`,renderConversationCard:e=>Z(e,{inPinnedSection:!0})}):null,!f&&pt?.map(t=>(0,d.jsx)(ae.NavigationLink,{to:De(`/conversations/task-${t.id}`),onClick:e,className:`block`,children:(0,d.jsx)(ve.StartTaskCard,{task:t})},t.id)),!Q&&f?yt.map(e=>Z(e)):null,!Q&&!f&&T===`grouped`&&G&&G.length>0?(0,d.jsx)(Se.ConversationGroupFolderList,{groups:G,groupIds:vt,groupFolderOrder:A,setGroupFolderOrder:We,collapsedGroupIds:Xe,expandedGroupPreviewIds:Qe,onToggleGroupCollapsed:rt,onToggleGroupPreviewExpanded:it,isCreatingConversationFlow:X,activeConversationId:m,onLaunchFromGroup:Nt,renderConversationCard:e=>Z(e)}):null,!Q&&!f&&T===`chronological`?(0,d.jsx)(`div`,{className:`space-y-0.5`,children:gt.map(e=>Z(e))}):null,jt&&(Tt?(0,d.jsx)(`div`,{className:`py-1`,children:(0,d.jsx)(o.ConversationCardSkeleton,{compact:f})}):(0,d.jsx)(`div`,{className:`flex justify-center py-4`,children:(0,d.jsx)(`button`,{type:`button`,"data-testid":`load-more-conversations`,onClick:wt,className:`text-xs text-[var(--oh-muted)] hover:text-white`,children:p(n.I18nKey.CONVERSATION$LOAD_MORE)})}))]}),ke&&(0,d.jsx)(ue.ConfirmDeleteModal,{onConfirm:()=>{Lt(),_(!1),P(null)},onCancel:()=>{_(!1),P(null)},conversationTitle:st??void 0}),Ne&&(0,d.jsx)(ue.ConfirmDeleteModal,{title:p(n.I18nKey.CONVERSATION$CONFIRM_DELETE_ALL_TITLE),description:p(n.I18nKey.CONVERSATION$CONFIRM_DELETE_ALL_DESC,{count:z.length}),onConfirm:async()=>{await zt(),y(!1)},onCancel:()=>y(!1)}),Ae&&(0,d.jsx)(de.ConfirmStopModal,{onConfirm:()=>{Rt(),v(!1)},onCancel:()=>v(!1)}),je&&(0,d.jsx)(he.ExitConversationModal,{onConfirm:()=>{e?.()},onClose:()=>Me(!1),onCancel:()=>Me(!1)})]})}exports.ConversationPanel=p;
|
|
1
|
+
const e=require("../../../_virtual/_rolldown/runtime.cjs"),t=require("../../../node_modules/react-i18next/dist/es/useTranslation.cjs"),n=require("../../../i18n/declaration.cjs"),r=require("../../../utils/status.cjs"),i=require("../../../utils/utils.cjs"),a=require("../../../context/navigation-context.cjs"),ee=require("../../../utils/custom-toast-handlers.cjs"),te=require("../../../contexts/active-backend-context.cjs"),ne=require("../../../hooks/use-backend-scoped-path.cjs"),re=require("../../../node_modules/@heroui/tooltip/dist/chunk-AUA5GDXN.cjs"),ie=require("../../../hooks/use-click-outside-element.cjs"),ae=require("../../../hooks/mutation/use-create-conversation.cjs"),oe=require("../../shared/navigation-link.cjs"),se=require("../../../hooks/mutation/use-delete-conversation.cjs"),ce=require("../../../hooks/mutation/use-unified-stop-conversation.cjs"),le=require("../../../hooks/use-is-creating-conversation.cjs"),ue=require("../../../hooks/mutation/use-update-conversation.cjs"),de=require("./confirm-delete-modal.cjs"),fe=require("./confirm-stop-modal.cjs"),pe=require("../../../hooks/query/use-paginated-conversations.cjs"),me=require("../../../hooks/query/use-start-tasks.cjs"),he=require("./confirm-archive-modal.cjs"),ge=require("./exit-conversation-modal.cjs"),_e=require("./conversation-card/conversation-card.cjs"),ve=require("./conversation-card/conversation-card-preview.cjs"),ye=require("./start-task-card/start-task-card.cjs"),be=require("./conversation-card/conversation-card-skeleton.cjs"),xe=require("./compact-conversation-row.cjs"),o=require("../../../stores/conversation-panel-preferences-store.cjs"),s=require("./conversation-panel-list-helpers.cjs"),Se=require("./conversation-panel-filter-menu.cjs"),Ce=require("./conversation-panel-new-thread-picker.cjs"),we=require("./conversation-group-folder-list.cjs"),Te=require("./conversation-panel-pinned-section.cjs"),c=require("../../../stores/archived-conversations-store.cjs"),l=require("../../../stores/pinned-conversations-store.cjs");let u=require("react");u=e.__toESM(u,1);let d=require("react/jsx-runtime");var Ee=()=>{},De=[],f=3600*1e3,Oe=e=>{let t=Date.now()-f,n=[],r=[];for(let i of e){let e=i.updated_at?Date.parse(i.updated_at):NaN;Number.isFinite(e)&&e<t?r.push(i):n.push(i)}return{recent:n,older:r}};function p({onClose:e,compact:f=!1}){let{t:p}=t.useTranslation(`openhands`),{conversationId:m,navigate:h}=a.useNavigation(),{backend:g}=te.useActiveBackend(),ke=ne.useBackendScopedPath(),Ae=ie.useClickOutsideElement(e??Ee),[je,_]=u.default.useState(!1),[Me,Ne]=u.default.useState(!1),[Pe,Fe]=u.default.useState(!1),[Ie,Le]=u.default.useState(!1),[Re,ze]=u.default.useState(!1),v=o.useConversationPanelPreferencesStore(e=>e.showOlderConversations),Be=o.useConversationPanelPreferencesStore(e=>e.showArchivedConversations),Ve=o.useConversationPanelPreferencesStore(e=>e.toggleShowArchivedConversations),He=o.useConversationPanelPreferencesStore(e=>e.toggleShowOlderConversations),y=o.useConversationPanelPreferencesStore(e=>e.showRepoBranchMetadata),Ue=o.useConversationPanelPreferencesStore(e=>e.toggleShowRepoBranchMetadata),b=o.useConversationPanelPreferencesStore(e=>e.showLlmProfiles),We=o.useConversationPanelPreferencesStore(e=>e.toggleShowLlmProfiles),x=o.useConversationPanelPreferencesStore(e=>e.showTagsMetadata),Ge=o.useConversationPanelPreferencesStore(e=>e.toggleShowTagsMetadata),S=o.useConversationPanelPreferencesStore(e=>e.showHoverMetadata),Ke=o.useConversationPanelPreferencesStore(e=>e.toggleShowHoverMetadata),C=o.useConversationPanelPreferencesStore(e=>e.organizeMode),qe=o.useConversationPanelPreferencesStore(e=>e.setOrganizeMode),w=o.useConversationPanelPreferencesStore(e=>e.conversationSort),Je=o.useConversationPanelPreferencesStore(e=>e.setConversationSort),T=o.useConversationPanelPreferencesStore(e=>e.threadScope),Ye=o.useConversationPanelPreferencesStore(e=>e.setThreadScope),E=o.useConversationPanelPreferencesStore(e=>e.automationFilterMode),Xe=o.useConversationPanelPreferencesStore(e=>e.setAutomationFilterMode),D=o.useConversationPanelPreferencesStore(e=>e.selectedAutomationNames),Ze=o.useConversationPanelPreferencesStore(e=>e.toggleAutomationName),O=o.useConversationPanelPreferencesStore(e=>e.groupFolderOrder),Qe=o.useConversationPanelPreferencesStore(e=>e.setGroupFolderOrder),[$e,et]=u.default.useState(!1),[tt,nt]=u.default.useState(!1),rt=ie.useClickOutsideElement(()=>{et(!1)}),[it,at]=u.default.useState(()=>new Set),[ot,st]=u.default.useState(()=>new Set),[ct,lt]=u.default.useState(!1),k=l.usePinnedConversationsStore(e=>e.pinsByBackendId[g.id]??De),ut=l.usePinnedConversationsStore(e=>e.togglePin),dt=l.usePinnedConversationsStore(e=>e.unpinConversation),ft=l.usePinnedConversationsStore(e=>e.pruneMissingConversations),pt=c.useArchivedConversationsStore(e=>e.archivesByBackendId[g.id]??De),mt=c.useArchivedConversationsStore(e=>e.archiveConversation),A=u.default.useMemo(()=>new Set(pt),[pt]),j=c.useArchivedConversationsStore(e=>e.removeArchivedConversation),ht=u.default.useCallback(e=>{at(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]),gt=u.default.useCallback(e=>{st(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]);u.default.useEffect(()=>{C!==`grouped`&&(at(new Set),st(new Set))},[C]);let _t=u.default.useRef(null),[M,N]=u.default.useState(null),[vt,P]=u.default.useState(null),[F,yt]=u.default.useState(null),{data:I,isLoading:bt,isFetched:L,hasNextPage:R,isFetching:xt,isFetchingNextPage:z,fetchNextPage:St}=pe.usePaginatedConversations(),{data:Ct}=me.useStartTasks(),B=u.default.useMemo(()=>{let e=I?.pages.flatMap(e=>e.items)??[],t=new Set;return e.filter(e=>t.has(e.id)?!1:(t.add(e.id),!0))},[I]),wt=u.default.useMemo(()=>{let e=new Map;return I?.pages.forEach((t,n)=>{t.items.forEach(t=>{e.has(t.id)||e.set(t.id,n)})}),e},[I]),V=u.default.useMemo(()=>Be?B:B.filter(e=>!A.has(e.id)),[B,A,Be]),Tt=u.default.useMemo(()=>s.collectAutomationNameFacets(V),[V]),H=u.default.useMemo(()=>s.applyAutomationConversationFilter(V,E,D,Tt),[E,Tt,V,D]),Et=u.default.useMemo(()=>s.resolvePinnedConversations(k,V),[V,k]);u.default.useEffect(()=>{if(!L)return;let e=I?.pages.flatMap(e=>e.items.map(e=>e.id))??[];ft(g.id,e)},[g.id,I,L,ft]),u.default.useEffect(()=>{k.length===0&<(!1)},[k.length]);let Dt=u.default.useMemo(()=>{let e=T===`relevant`?H.filter(e=>r.isExecutionActive(e.execution_status)):H;return f?e:s.filterOutPinnedConversations(e,k)},[H,f,k,T]),{recent:U,older:W}=u.default.useMemo(()=>Oe(Dt),[Dt]),Ot=u.default.useMemo(()=>s.sortConversationsByField(v?[...U,...W]:U,w),[U,W,v,w]),kt=u.default.useMemo(()=>({emptyWorkspace:p(n.I18nKey.CONVERSATION_PANEL$NO_WORKSPACE),emptyRepository:p(n.I18nKey.CONVERSATION_PANEL$NO_REPOSITORY)}),[p]),G=u.default.useMemo(()=>f||C!==`grouped`?null:[...U,...v?W:[]],[f,W,C,U,v]),K=u.default.useMemo(()=>G?s.groupConversations(G,g.kind,w,kt):null,[g.kind,w,kt,G]),At=u.default.useMemo(()=>G?s.getGroupDiscoveryConversationIds(G,wt,g.kind,{forceIncludeConversationId:m}):null,[g.kind,wt,m,G]),q=u.default.useMemo(()=>K?s.applyGroupFolderOrder(K,O):null,[K,O]),jt=u.default.useMemo(()=>K?.map(e=>e.id)??[],[K]),Mt=u.default.useMemo(()=>s.sortConversationsByField(U.filter(e=>r.isExecutionActive(e.execution_status)),w),[w,U]),Nt=Ot.length,Pt=q?.length??0,Ft=C===`grouped`&&!f?Pt===0:Nt===0,It=Ft&&E!==`all`&&V.length>0&&H.length===0,J=C===`grouped`&&!f?Pt:Nt,Y=I?.pages.length??0,[X,Lt]=u.default.useState(null),[Rt,zt]=u.default.useState(null),Bt=u.default.useRef(J);Bt.current=J;let Vt=u.default.useRef(Y);Vt.current=Y;let Z=u.default.useCallback(()=>{Lt(null),zt(null)},[]),Ht=u.default.useCallback(()=>{R&&(Lt(Bt.current),zt(Vt.current))},[R]);u.default.useEffect(()=>{if(X!==null){if(J>X){Z();return}if(C===`grouped`&&!f&&Rt!=null&&Y>=Rt+3){Z();return}if(!(xt||z)){if(!R){Z();return}St()}}},[Z,f,X,Rt,J,Y,C,R,xt,z,St]);let Ut=X!==null||z,{mutate:Wt,mutateAsync:Gt}=se.useDeleteConversation(),{mutate:Kt}=ce.useUnifiedPauseConversation(),{mutate:qt}=ue.useUpdateConversation(),Jt=W.length>0&&!v,Yt=!!R&&!Jt&&!f,{mutate:Xt}=ae.useCreateConversation(),Zt=le.useIsCreatingConversation(),Qt=u.default.useCallback(e=>{Zt||Xt({workingDir:e.workingDir,repository:e.repository,entryPoint:`sidebar_relaunch_project`},{onSuccess:e=>{h(`/conversations/${e.conversation_id}`)}})},[Xt,Zt,h]),$t=u.default.useCallback((e,t)=>{_(!0),N(e),P(t)},[]),en=u.default.useCallback((e,t)=>{Ne(!0),N(e),P(t)},[]),tn=u.default.useCallback(e=>{j(g.id,e)},[g.id,j]),nn=u.default.useCallback(e=>{Fe(!0),N(e)},[]),rn=u.default.useCallback((e,t)=>{qt({conversationId:e,newTitle:t},{onSuccess:()=>{ee.displaySuccessToast(p(n.I18nKey.CONVERSATION$TITLE_UPDATED))}})},[p,qt]),an=()=>{if(M){let e=M;Wt({conversationId:e},{onSuccess:()=>{j(g.id,e),e===m&&h(`/conversations`)}})}},on=()=>{M&&(mt(g.id,M),dt(g.id,M),M===m&&h(`/conversations`))},sn=()=>{M&&Kt({conversationId:M})},cn=async()=>{let e=B.map(e=>e.id),t=await Promise.allSettled(e.map(e=>Gt({conversationId:e}))),n=t.flatMap((t,n)=>t.status===`fulfilled`?[e[n]]:[]),r=t.length-n.length;for(let e of n)j(g.id,e);m!==null&&n.includes(m)&&h(`/conversations`),r>0&&ee.displayErrorToast(`${r} conversation${r===1?``:`s`} could not be deleted.`)},Q=u.default.useCallback((t,n)=>{let r=k.includes(t.id),a=A.has(t.id);return f?(0,d.jsx)(xe.CompactConversationRow,{conversationId:t.id,title:t.title??``,selectedRepository:{selected_repository:t.selected_repository,selected_branch:t.selected_branch,git_provider:t.git_provider},executionStatus:t.execution_status,sandboxStatus:t.sandbox_status,lastUpdatedAt:t.updated_at,createdAt:t.created_at,workspaceWorkingDir:t.selected_workspace??t.workspace?.working_dir,isActive:t.id===m,onClose:e,showRepositoryMetadata:y,llmModel:t.llm_model,showLlmProfiles:b,agentKind:t.agent_kind,acpServer:t.acp_server,tags:t.tags,showTags:x},t.id):(0,d.jsx)(re.tooltip_default,{placement:`right-start`,delay:1e3,closeDelay:100,isDisabled:!S||F===t.id,disableAnimation:!1,className:`max-w-none overflow-visible rounded-xl border border-[var(--oh-border)] bg-base-secondary p-0 text-white shadow-xl`,content:(0,d.jsx)(ve.ConversationCardPreview,{title:t.title??``,executionStatus:t.execution_status,sandboxStatus:t.sandbox_status,selectedRepository:{selected_repository:t.selected_repository,selected_branch:t.selected_branch,git_provider:t.git_provider},workspaceWorkingDir:t.selected_workspace??t.workspace?.working_dir,llmModel:t.llm_model,agentKind:t.agent_kind,acpServer:t.acp_server,createdAt:t.created_at,tags:t.tags}),children:(0,d.jsx)(oe.NavigationLink,{to:ke(`/conversations/${t.id}`),onClick:e,className:i.cn(`block rounded-md transition-colors`,F!==t.id&&`hover:bg-[var(--oh-surface)]`,(t.id===m||F===t.id)&&`bg-[var(--oh-surface)]`),children:(0,d.jsx)(_e.ConversationCard,{onDelete:()=>$t(t.id,t.title??``),onArchive:a?void 0:()=>en(t.id,t.title??``),onUnarchive:a?()=>tn(t.id):void 0,onStop:()=>nn(t.id),onChangeTitle:e=>rn(t.id,e),title:t.title??``,selectedRepository:{selected_repository:t.selected_repository,selected_branch:t.selected_branch,git_provider:t.git_provider},lastUpdatedAt:t.updated_at,createdAt:t.created_at,executionStatus:t.execution_status,sandboxStatus:t.sandbox_status,conversationId:t.id,contextMenuOpen:F===t.id,onContextMenuToggle:e=>yt(e?t.id:null),isActive:t.id===m,workspaceWorkingDir:t.selected_workspace??t.workspace?.working_dir,showRepositoryMetadata:y,llmModel:t.llm_model,showLlmProfiles:b,agentKind:t.agent_kind,acpServer:t.acp_server,tags:t.tags,showTags:x,isArchived:a,isPinned:r,onTogglePin:()=>ut(g.id,t.id),alwaysShowPinIcon:r&&!n?.inPinnedSection})})},t.id)},[g.id,A,f,m,en,rn,$t,nn,tn,e,F,k,y,b,x,S,ut]),$=bt||!L,ln=!f&&!$&&Et.length>0,un=L&&!bt&&!f&&Ft&&!ln&&!Ct?.length;return(0,d.jsxs)(`div`,{ref:Ae,"data-testid":`conversation-panel`,className:`flex h-full min-h-0 w-full flex-col`,children:[!f&&(0,d.jsx)(`div`,{className:i.cn(`-ml-2.5 w-[calc(100%+0.625rem)] max-w-none box-border border-b`,tt?`border-[var(--oh-border)]`:`border-transparent`),children:(0,d.jsxs)(`div`,{"data-testid":`older-conversations-summary`,className:`flex min-w-0 flex-nowrap items-center gap-x-2 py-2 pl-4 pr-2.5 text-[var(--oh-muted)]`,children:[(0,d.jsx)(`span`,{className:`min-w-0 truncate text-sm font-medium text-[var(--oh-muted)]`,children:p(n.I18nKey.SIDEBAR$CONVERSATIONS)}),(0,d.jsxs)(`div`,{className:`ml-auto flex shrink-0 items-center gap-0.5`,children:[(0,d.jsx)(Ce.ConversationPanelNewThreadPicker,{backendKind:g.kind}),(0,d.jsx)(Se.ConversationPanelFilterMenu,{filterMenuOpen:$e,setFilterMenuOpen:et,menuRef:rt,backendKind:g.kind,organizeMode:C,setOrganizeMode:qe,conversationSort:w,setConversationSort:Je,threadScope:T,setThreadScope:Ye,automationFilterMode:E,setAutomationFilterMode:Xe,selectedAutomationNames:D,onToggleAutomationName:Ze,automationNameFacets:Tt,showOlderConversations:v,showArchivedConversations:Be,toggleShowArchivedConversations:Ve,toggleShowOlderConversations:He,showRepoBranchMetadata:y,toggleShowRepoBranchMetadata:Ue,showLlmProfiles:b,toggleShowLlmProfiles:We,showTagsMetadata:x,toggleShowTagsMetadata:Ge,showHoverMetadata:S,toggleShowHoverMetadata:Ke,totalConversationsCount:B.length,onRequestDeleteAll:()=>ze(!0)})]})]})}),(0,d.jsxs)(`div`,{ref:_t,"data-testid":`conversation-panel-list-scroll`,onScroll:e=>{nt(e.currentTarget.scrollTop>0)},className:i.cn(`flex min-h-0 flex-1 flex-col overflow-y-auto overflow-x-hidden overscroll-contain custom-scrollbar-always`,!f&&`conversation-panel-list-scroll`),children:[$&&(0,d.jsx)(be.ConversationCardSkeleton,{compact:f}),!f&&un&&(0,d.jsx)(`div`,{"data-testid":`conversation-panel-empty-state`,className:`flex min-h-0 flex-1 flex-col items-center justify-center px-4 py-8`,children:(0,d.jsx)(`p`,{className:`text-xs text-[var(--oh-muted)]`,children:p(It?n.I18nKey.CONVERSATION_PANEL$NO_AUTOMATION_MATCHES:n.I18nKey.CONVERSATION$NO_CONVERSATIONS)})}),ln?(0,d.jsx)(Te.ConversationPanelPinnedSection,{pinnedConversations:Et,isPreviewExpanded:ct,onTogglePreviewExpanded:()=>lt(e=>!e),activeConversationId:m,showDivider:!f&&C===`chronological`,renderConversationCard:e=>Q(e,{inPinnedSection:!0})}):null,!f&&Ct?.map(t=>(0,d.jsx)(oe.NavigationLink,{to:ke(`/conversations/task-${t.id}`),onClick:e,className:`block`,children:(0,d.jsx)(ye.StartTaskCard,{task:t})},t.id)),!$&&f?Mt.map(e=>Q(e)):null,!$&&!f&&C===`grouped`&&q&&q.length>0?(0,d.jsx)(we.ConversationGroupFolderList,{groups:q,groupIds:jt,groupFolderOrder:O,setGroupFolderOrder:Qe,collapsedGroupIds:it,expandedGroupPreviewIds:ot,discoveryConversationIds:At,onToggleGroupCollapsed:ht,onToggleGroupPreviewExpanded:gt,isCreatingConversationFlow:Zt,activeConversationId:m,onLaunchFromGroup:Qt,renderConversationCard:e=>Q(e)}):null,!$&&!f&&C===`chronological`?(0,d.jsx)(`div`,{className:`space-y-0.5`,children:Ot.map(e=>Q(e))}):null,Yt&&(Ut?(0,d.jsx)(`div`,{className:`py-1`,children:(0,d.jsx)(be.ConversationCardSkeleton,{compact:f})}):(0,d.jsx)(`div`,{className:`flex justify-center py-4`,children:(0,d.jsx)(`button`,{type:`button`,"data-testid":`load-more-conversations`,onClick:Ht,className:`text-xs text-[var(--oh-muted)] hover:text-white`,children:p(n.I18nKey.CONVERSATION$LOAD_MORE)})}))]}),je&&(0,d.jsx)(de.ConfirmDeleteModal,{onConfirm:()=>{an(),_(!1),P(null)},onCancel:()=>{_(!1),P(null)},conversationTitle:vt??void 0}),Me&&(0,d.jsx)(he.ConfirmArchiveModal,{onConfirm:()=>{on(),Ne(!1),P(null)},onCancel:()=>{Ne(!1),P(null)},conversationTitle:vt??void 0}),Re&&(0,d.jsx)(de.ConfirmDeleteModal,{title:p(n.I18nKey.CONVERSATION$CONFIRM_DELETE_ALL_TITLE),description:p(n.I18nKey.CONVERSATION$CONFIRM_DELETE_ALL_DESC,{count:B.length}),onConfirm:async()=>{await cn(),ze(!1)},onCancel:()=>ze(!1)}),Pe&&(0,d.jsx)(fe.ConfirmStopModal,{onConfirm:()=>{sn(),Fe(!1)},onCancel:()=>Fe(!1)}),Ie&&(0,d.jsx)(ge.ExitConversationModal,{onConfirm:()=>{e?.()},onClose:()=>Le(!1),onCancel:()=>Le(!1)})]})}exports.ConversationPanel=p;
|
|
2
2
|
//# sourceMappingURL=conversation-panel.cjs.map
|