@openhands/agent-canvas 1.16.0 → 1.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/README.windows.md +2 -2
- package/build/assets/{acp-providers-CX3Lh9gj.js → acp-providers-DcY_mKYa.js} +1 -1
- package/build/assets/active-backend-context-BnH4-L8h.js +2 -0
- package/build/assets/{agent-context-settings-DSZlXrLj.js → agent-context-settings-D3peZkjX.js} +1 -1
- package/build/assets/agent-profiles-service.api-DkeZaqIl.js +1 -0
- package/build/assets/agent-profiles-settings-7yMWYjGF.js +1 -0
- package/build/assets/agent-server-client-options-EHB23gyx.js +1 -0
- package/build/assets/agent-server-config-C_x8Otd9.js +1 -0
- package/build/assets/agent-server-conversation-service.api-jiCopc2E.js +88 -0
- package/build/assets/agent-settings-BF8hM6wb.js +2 -0
- package/build/assets/agent-settings-YPutBAeR.js +1 -0
- package/build/assets/alert-banner-eYyqvHL3.js +1 -0
- package/build/assets/{api-error-message-B-XdSk3b.js → api-error-message-BXo0lCI5.js} +1 -1
- package/build/assets/api-key-entry-screen-CCBvBD8u.js +1 -0
- package/build/assets/app-settings-BtYDs-Be.js +1 -0
- package/build/assets/automation-detail-BxXhb_m2.js +3 -0
- package/build/assets/{automation-export-D3a3of4G.js → automation-export-BJsfi7n2.js} +1 -1
- package/build/assets/automation-git-sync-B7o_Nbl-.js +1 -0
- package/build/assets/automation-setup-route-qaJ6lLCf.js +3 -0
- package/build/assets/{automation-templates-BRppNh99.js → automation-templates-Bb98r-kx.js} +1 -1
- package/build/assets/automations-list-DEPVNud3.js +1 -0
- package/build/assets/{back-nav-button-Cjl_hoxq.js → back-nav-button-B2yBiVMB.js} +1 -1
- package/build/assets/backend-form-modal-DxisQV_6.js +1 -0
- package/build/assets/backend-synced-settings-badge-DLEp6cq7.js +1 -0
- package/build/assets/badge-ehL-kgeO.js +1 -0
- package/build/assets/{base-modal-D_L0oEbG.js → base-modal-C1a0TsSx.js} +1 -1
- package/build/assets/bot-ByolqPEr.js +1 -0
- package/build/assets/{brand-button-BAfk4wGP.js → brand-button-CUMfjb99.js} +1 -1
- package/build/assets/browser-SE24Tk8g.js +46 -0
- package/build/assets/browser-tab-HjJxHA0V.js +1 -0
- package/build/assets/canvas-extension-page-BsUGBb1T.js +1 -0
- package/build/assets/canvas-extensions-C9Tm6s_E.js +1 -0
- package/build/assets/{canvas-extensions-runtime-2_x5Ezmi.js → canvas-extensions-runtime-B8kxM4rO.js} +1 -1
- package/build/assets/{chat-send-button-MUQqCZCS.js → chat-send-button-CGvc2wpE.js} +1 -1
- package/build/assets/check-Bo8s5Ylg.js +1 -0
- package/build/assets/chevron-down-Cr6Fn_wS.js +1 -0
- package/build/assets/chevron-right-CfdfRn-8.js +1 -0
- package/build/assets/circle-check-5pH3qCji.js +1 -0
- package/build/assets/circle-plus-check-toggle-BDX_ctNs.js +1 -0
- package/build/assets/{cloud-funnel-analytics-CztBCCPp.js → cloud-funnel-analytics-D5uJ_4JE.js} +1 -1
- package/build/assets/{cog-D-MPQW6G.js → cog-CAEugqtV.js} +1 -1
- package/build/assets/command-menu-CQxs4mtX.js +1 -0
- package/build/assets/commits-tab-D0xgjipP.js +1 -0
- package/build/assets/{condenser-settings-DmEOje-7.js → condenser-settings-D63NJRBT.js} +1 -1
- package/build/assets/confirmation-modal-78sd9Vny.js +1 -0
- package/build/assets/{context-menu-list-item-I86vKcmM.js → context-menu-list-item-Cm7-7Y-7.js} +1 -1
- package/build/assets/conversation-B_nweu5p.js +93 -0
- package/build/assets/conversation-edjzrv5w.js +1 -0
- package/build/assets/conversation-panel-edjzrv5w.js +1 -0
- package/build/assets/conversation-state-store-9D_3P7q4.js +1 -0
- package/build/assets/conversation-store-DC-JlJuq.js +6 -0
- package/build/assets/{conversation-tab-empty-state-FIbh_lc8.js → conversation-tab-empty-state-B3dpJXX0.js} +1 -1
- package/build/assets/copy-to-clipboard-button-B1ljgNxO.js +1 -0
- package/build/assets/device-verify-D5QRIS_x.js +1 -0
- package/build/assets/{dropdown-classes-Bc1djN0-.js → dropdown-classes-BGvOvW2_.js} +1 -1
- package/build/assets/edit-automation-modal-D_JWSmxT.js +1 -0
- package/build/assets/empty-state-FK_s1B60.js +1 -0
- package/build/assets/{entry.client-CqyPPjOq.js → entry.client-BMafTpjO.js} +2 -2
- package/build/assets/enum-filter-dropdown-UNaom12H.js +1 -0
- package/build/assets/environment-switch-overlay-COibRUA-.js +1 -0
- package/build/assets/error-state-Cf8LRuuY.js +1 -0
- package/build/assets/extensions-hub-C_6ahIua.js +1 -0
- package/build/assets/extensions-navigation-C5GfpzFe.js +1 -0
- package/build/assets/external-link-Bd7Tga-1.js +1 -0
- package/build/assets/files-tab-D5PPIWI1.js +1 -0
- package/build/assets/{form-control-classes-Bkh5FGrD.js → form-control-classes-Dbq-7YP_.js} +1 -1
- package/build/assets/format-model-name-Dfh9Udrx.js +1 -0
- package/build/assets/get-git-path-jU2zjqIB.js +1 -0
- package/build/assets/git-repo-dropdown-BoDDWXfX.js +1 -0
- package/build/assets/git-repo-dropdown-uxlFw2gn.js +1 -0
- package/build/assets/highlighted-source-view-C7pAXrT0.js +1 -0
- package/build/assets/home-BM5_Wz_R.js +1 -0
- package/build/assets/home-Ivfm7KC4.js +1 -0
- package/build/assets/home-automation-run-tooltip-B1N2uO9p.js +1 -0
- package/build/assets/home-store-DCbei3DX.js +1 -0
- package/build/assets/hooks-service-Dnmhqc0Z.js +1 -0
- package/build/assets/index-home-td9BN2T3.js +1 -0
- package/build/assets/info-BcajzHn1.js +1 -0
- package/build/assets/install-server-modal-B81I-5OE.js +1 -0
- package/build/assets/kebab-menu-item-content-SCJBwZnp.js +1 -0
- package/build/assets/{key-BmVyxs-2.js → key-O84CMFHb.js} +1 -1
- package/build/assets/launch-ZLxI4opd.js +1 -0
- package/build/assets/list-filter-B8PQk3RA.js +1 -0
- package/build/assets/{list-todo-apgLVjMw.js → list-todo-Caa8E1X_.js} +1 -1
- package/build/assets/llm-not-configured-banner-Dh_ajcM8.js +27 -0
- package/build/assets/llm-settings-CODhjQzy.js +1 -0
- package/build/assets/llm-settings-CZaXYgtw.js +1 -0
- package/build/assets/llm-subscription-service-CgIDc38n.js +1 -0
- package/build/assets/loader-circle-BxJgk73D.js +1 -0
- package/build/assets/{loading-spinner-BY9N3pOe.js → loading-spinner-BeLV0IXf.js} +1 -1
- package/build/assets/manage-backends-modal-cMXqCb-B.js +1 -0
- package/build/assets/manifest-bfeccb98.js +1 -0
- package/build/assets/manifest-subpage-layout-CVZgVKoY.js +1 -0
- package/build/assets/{map-provider-Cu3Zgumb.js → map-provider-iRs80q_6.js} +1 -1
- package/build/assets/markdown-renderer-DyFl9-mL.js +8 -0
- package/build/assets/mcp-CraxoXQv.js +1 -0
- package/build/assets/{mcp-marketplace-utils-AIBzzHTO.js → mcp-marketplace-utils-C7PYr293.js} +1 -1
- package/build/assets/mcp-page-CteH_K0N.js +9 -0
- package/build/assets/messages-Bk1xhbU2.js +41 -0
- package/build/assets/{modal-body-BxZjsju9.js → modal-body-C24WsdFb.js} +1 -1
- package/build/assets/{modal-classes-C8eycCwG.js → modal-classes-B0b9eiL8.js} +1 -1
- package/build/assets/modal-close-button-DfqfB2Nj.js +1 -0
- package/build/assets/{mouse-pointer-click-Co2uyaPA.js → mouse-pointer-click-BXlRN92t.js} +1 -1
- package/build/assets/onboarding-DXFBRqEy.js +1 -0
- package/build/assets/onboarding-modal-BT3Gx_sZ.js +1 -0
- package/build/assets/organization-service.api-B5CvmnYQ.js +1 -0
- package/build/assets/pencil-q-ihqDYv.js +1 -0
- package/build/assets/pin-BdroVQdN.js +1 -0
- package/build/assets/planner-tab-CstoOlAB.js +1 -0
- package/build/assets/plug-7ACOEbMs.js +1 -0
- package/build/assets/plugins-management-service-5rqVPEGN.js +1 -0
- package/build/assets/plus-C2e21TFC.js +1 -0
- package/build/assets/profiles-service.api-D1XKMgr0.js +1 -0
- package/build/assets/providers-XmZ9HM4Q.js +1 -0
- package/build/assets/proxy-XP6U1Dhv.js +1 -0
- package/build/assets/{puzzle-JM_QaRm0.js → puzzle-LJYnuxKe.js} +1 -1
- package/build/assets/react-BX7IV650.js +1 -0
- package/build/assets/recommended-automations-launcher-DEHRKIAg.js +1 -0
- package/build/assets/refresh-cw-BtdC3T8P.js +1 -0
- package/build/assets/root-CM6IZHlg.css +1 -0
- package/build/assets/root-DdFkodKW.js +2 -0
- package/build/assets/root-layout-DUquNZTU.js +2 -0
- package/build/assets/schema-field-Y3F8JvXd.js +1 -0
- package/build/assets/scroll-fade-state-Dt_fx2kf.js +1 -0
- package/build/assets/sdk-section-page-CNZTLwH9.js +1 -0
- package/build/assets/secret-form-9-BoGA40.js +1 -0
- package/build/assets/secrets-service-BOIsfD9j.js +1 -0
- package/build/assets/secrets-settings-CBJgFr42.js +1 -0
- package/build/assets/settings-D4hdToD4.js +1 -0
- package/build/assets/settings-dropdown-input-DBvsZ7-Q.js +1 -0
- package/build/assets/settings-index-DeQphyBK.js +1 -0
- package/build/assets/settings-input-dVuzapBA.js +1 -0
- package/build/assets/{settings-list-classes-BzeSZbF2.js → settings-list-classes-DhAPuXm6.js} +1 -1
- package/build/assets/settings-modal-tHiJ8iYV.js +1 -0
- package/build/assets/settings-nav-GAQjW1a-.js +16 -0
- package/build/assets/settings-service.api-C1vZH9Vh.js +1 -0
- package/build/assets/settings-switch-DDd1cQ8t.js +1 -0
- package/build/assets/{settings-utils-UYpEdPuD.js → settings-utils-BTaaRhLZ.js} +1 -1
- package/build/assets/shared-conversation-Cyg7m7ns.js +1 -0
- package/build/assets/shield-check-C3Rl0NF8.js +1 -0
- package/build/assets/{sidebar-layout-D6fS8-Gl.js → sidebar-layout-DH0E-5KW.js} +1 -1
- package/build/assets/sidebar-mobile-menu-toggle-CQ4iky__.js +1 -0
- package/build/assets/{sidebar-nav-link-DQQcMf1A.js → sidebar-nav-link-oLQiKUBu.js} +1 -1
- package/build/assets/{sidebar-onboarding-checklist-storage-BBkeI6Bp.js → sidebar-onboarding-checklist-storage-TfvNNnnr.js} +1 -1
- package/build/assets/sidebar-store-DAZVH-DR.js +1 -0
- package/build/assets/skill-card-pill-row-DfjIfj0K.js +1 -0
- package/build/assets/{skill-filter-w__3UCEE.js → skill-filter-DsNLmn76.js} +2 -2
- package/build/assets/{skill-icon-badge-RQkq8wvl.js → skill-icon-badge-0MK_68Nc.js} +1 -1
- package/build/assets/skill-scope-BE-H9TSZ.js +1 -0
- package/build/assets/skills-plugins-vzSdxSk_.js +1 -0
- package/build/assets/skills-settings-BiPOH9H9.js +1 -0
- package/build/assets/styled-tooltip-CejG0rqv.js +1 -0
- package/build/assets/task-list-tab-OkZSqnTp.js +1 -0
- package/build/assets/{terminal-CNElN42a.js → terminal-Dph60VFZ.js} +2 -2
- package/build/assets/toggle-switch-B2uXaAUS.js +1 -0
- package/build/assets/trash-2-Bb40zQzs.js +1 -0
- package/build/assets/trash-Ckh7yCaB.js +1 -0
- package/build/assets/triangle-alert-DEdu-b_L.js +1 -0
- package/build/assets/{typography-v1KN0tzi.js → typography-DgcLGdHk.js} +1 -1
- package/build/assets/usage-tab-MCmNRAnR.js +1 -0
- package/build/assets/use-acp-credential-form-ychoGqjC.js +1 -0
- package/build/assets/use-activate-agent-profile-8L8Xdghy.js +1 -0
- package/build/assets/use-agent-profiles-Bi8hSkze.js +1 -0
- package/build/assets/{use-automation-health-E6NZi9rb.js → use-automation-health-U99vvHxx.js} +1 -1
- package/build/assets/use-automation-permissions-Buus0R6h.js +1 -0
- package/build/assets/{use-automations-xijQKIl9.js → use-automations-Bq5hVuv0.js} +1 -1
- package/build/assets/{use-can-manage-org-profiles-CrJP5262.js → use-can-manage-org-profiles-MzIeEV8F.js} +1 -1
- package/build/assets/use-canvas-extensions-Ca9KoVEm.js +1 -0
- package/build/assets/{use-cloud-current-user-id-CDfAHpPX.js → use-cloud-current-user-id-B4ZLUZSa.js} +1 -1
- package/build/assets/use-config-l5tkDHyD.js +1 -0
- package/build/assets/use-create-conversation-i_PdFdIs.js +1 -0
- package/build/assets/use-create-secret-CjWq0J4O.js +1 -0
- package/build/assets/use-free-models-gCsJ5BV0.js +1 -0
- package/build/assets/{use-get-secrets-K3jmk-LH.js → use-get-secrets-CMTuWEp_.js} +1 -1
- package/build/assets/use-is-authed-A2Yinlt0.js +1 -0
- package/build/assets/{use-launch-skill-in-chat-BYjYihBP.js → use-launch-skill-in-chat-QbXDhiHr.js} +1 -1
- package/build/assets/use-llm-configured-Dl4zg8ht.js +1 -0
- package/build/assets/use-llm-profiles-SWsuFmFu.js +1 -0
- package/build/assets/use-manifest-capabilities-CdqYfUAC.js +1 -0
- package/build/assets/use-onboarding-completion-Xl63ZvzQ.js +1 -0
- package/build/assets/use-pinned-home-route-BXDIUaxQ.js +1 -0
- package/build/assets/use-plugins-marketplace-BIIaPiaB.js +1 -0
- package/build/assets/use-save-agent-profile-D-ZHHE94.js +1 -0
- package/build/assets/{use-save-settings-DYqkKv7T.js → use-save-settings-Dapkf4cC.js} +1 -1
- package/build/assets/use-settings-C2KKQKVC.js +1 -0
- package/build/assets/use-settings-nav-items-TOc0Rsfd.js +1 -0
- package/build/assets/use-tracking-j4uo9VEW.js +3 -0
- package/build/assets/{use-user-conversation-B9Gebw_g.js → use-user-conversation-5UFqMoO4.js} +1 -1
- package/build/assets/{useInfiniteQuery-C926xzY4.js → useInfiniteQuery-CtSRG7uW.js} +1 -1
- package/build/assets/{useMutation-B-qc391N.js → useMutation-Cszf8mKy.js} +1 -1
- package/build/assets/useQueries-pUohFMSP.js +1 -0
- package/build/assets/useQuery-DAAacS7O.js +1 -0
- package/build/assets/useTranslation-CCgUjPJF.js +1 -0
- package/build/assets/utils-BgLSZdyy.js +1 -0
- package/build/assets/{vendor~conversation-panel~conversation-C8Fn4XOf.js → vendor~conversation-panel~conversation-C22sJuWZ.js} +1 -1
- package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~b0x1wrp2-Z0lly3FE.js +2 -0
- package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~czjee3a3-BXXGJNDU.js +185 -0
- package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~ew9ih1s8-40UR63Gt.js +1 -0
- package/build/assets/{vendor~index-home~home~conversation-panel~conversation-hWywRBaR.js → vendor~index-home~home~conversation-panel~conversation-UTl7gUo9.js} +1 -1
- package/build/assets/vendor~root-layout-CcdIqs-C.js +1 -0
- package/build/assets/{vendor~root-layout~conversation-panel~conversation-BMbMgaGu.js → vendor~root-layout~conversation-panel~conversation-C3EBV3kp.js} +1 -1
- package/build/assets/vendor~root-layout~conversation-panel~conversation~skills-settings~automations-list~shared-~bovqqk8e-BCe0JJVy.js +1 -0
- package/build/assets/{vendor~root-layout~index-home~home~conversation-panel~conversation-j5MFqfSy.js → vendor~root-layout~index-home~home~conversation-panel~conversation-BGGbPcYh.js} +1 -1
- package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~mcp~automations-list~aut~ibfbmr9f-CxhwKuAd.js +1 -0
- package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~nj1hli3r-DP9wmsjo.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~inibp4qe-CnsDDzeE.js} +1 -1
- package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~eo2nf80n-CUmIwQCN.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~eo2nf80n-3eJ4ExtV.js} +12 -6
- package/build/assets/{verification-settings-gw_q6vkL.js → verification-settings-DdBpaVPz.js} +1 -1
- package/build/assets/{wrench-CUEI1krB.js → wrench-B8Wg_nbp.js} +1 -1
- package/build/assets/x-CX8lVGwm.js +1 -0
- package/build/index.html +4 -4
- package/build/locales/ar/openhands.json +79 -22
- package/build/locales/ca/openhands.json +79 -22
- package/build/locales/de/openhands.json +79 -22
- package/build/locales/en/openhands.json +79 -22
- package/build/locales/es/openhands.json +79 -22
- package/build/locales/fr/openhands.json +79 -22
- package/build/locales/it/openhands.json +79 -22
- package/build/locales/ja/openhands.json +79 -22
- package/build/locales/ko-KR/openhands.json +79 -22
- package/build/locales/no/openhands.json +79 -22
- package/build/locales/pt/openhands.json +79 -22
- package/build/locales/tr/openhands.json +79 -22
- package/build/locales/uk/openhands.json +79 -22
- package/build/locales/zh-CN/openhands.json +79 -22
- package/build/locales/zh-TW/openhands.json +79 -22
- package/config/defaults.json +3 -3
- package/dist/api/agent-server-adapter.cjs +3 -3
- package/dist/api/agent-server-adapter.cjs.map +1 -1
- package/dist/api/agent-server-adapter.d.ts +72 -12
- package/dist/api/agent-server-adapter.js +234 -132
- package/dist/api/agent-server-adapter.js.map +1 -1
- package/dist/api/agent-server-config.cjs +1 -1
- package/dist/api/agent-server-config.cjs.map +1 -1
- package/dist/api/agent-server-config.d.ts +6 -0
- package/dist/api/agent-server-config.js +6 -3
- package/dist/api/agent-server-config.js.map +1 -1
- package/dist/api/automation-service/automation-service.api.cjs +1 -1
- package/dist/api/automation-service/automation-service.api.cjs.map +1 -1
- package/dist/api/automation-service/automation-service.api.d.ts +2 -2
- package/dist/api/automation-service/automation-service.api.js +7 -7
- package/dist/api/automation-service/automation-service.api.js.map +1 -1
- package/dist/api/cloud/organization-service.api.cjs.map +1 -1
- package/dist/api/cloud/organization-service.api.d.ts +9 -1
- package/dist/api/cloud/organization-service.api.js.map +1 -1
- package/dist/api/cloud/provider-connections-service.api.cjs +2 -0
- package/dist/api/cloud/provider-connections-service.api.cjs.map +1 -0
- package/dist/api/cloud/provider-connections-service.api.d.ts +5 -0
- package/dist/api/cloud/provider-connections-service.api.js +50 -0
- package/dist/api/cloud/provider-connections-service.api.js.map +1 -0
- package/dist/api/cloud/skills-service.api.cjs +1 -1
- package/dist/api/cloud/skills-service.api.cjs.map +1 -1
- package/dist/api/cloud/skills-service.api.d.ts +10 -0
- package/dist/api/cloud/skills-service.api.js +11 -1
- package/dist/api/cloud/skills-service.api.js.map +1 -1
- package/dist/api/config-service/config-service.api.cjs +1 -1
- package/dist/api/config-service/config-service.api.cjs.map +1 -1
- package/dist/api/config-service/config-service.api.js +6 -2
- package/dist/api/config-service/config-service.api.js.map +1 -1
- package/dist/api/config-service/config-service.types.d.ts +13 -0
- package/dist/api/conversation-metadata-store.cjs +1 -1
- package/dist/api/conversation-metadata-store.cjs.map +1 -1
- package/dist/api/conversation-metadata-store.d.ts +24 -0
- package/dist/api/conversation-metadata-store.js +10 -2
- package/dist/api/conversation-metadata-store.js.map +1 -1
- package/dist/api/conversation-service/agent-server-conversation-service.api.cjs +1 -1
- package/dist/api/conversation-service/agent-server-conversation-service.api.cjs.map +1 -1
- package/dist/api/conversation-service/agent-server-conversation-service.api.d.ts +20 -0
- package/dist/api/conversation-service/agent-server-conversation-service.api.js +126 -77
- package/dist/api/conversation-service/agent-server-conversation-service.api.js.map +1 -1
- package/dist/api/hooks-service.cjs +2 -0
- package/dist/api/hooks-service.cjs.map +1 -0
- package/dist/api/hooks-service.d.ts +13 -0
- package/dist/api/hooks-service.js +20 -0
- package/dist/api/hooks-service.js.map +1 -0
- package/dist/api/provider-connections-service/provider-connections-service.api.cjs +1 -1
- package/dist/api/provider-connections-service/provider-connections-service.api.cjs.map +1 -1
- package/dist/api/provider-connections-service/provider-connections-service.api.js +25 -16
- package/dist/api/provider-connections-service/provider-connections-service.api.js.map +1 -1
- package/dist/api/settings-service/settings-service.api.cjs +1 -1
- package/dist/api/settings-service/settings-service.api.cjs.map +1 -1
- package/dist/api/settings-service/settings-service.api.d.ts +2 -0
- package/dist/api/settings-service/settings-service.api.js +18 -10
- package/dist/api/settings-service/settings-service.api.js.map +1 -1
- package/dist/api/skills-service.cjs +1 -1
- package/dist/api/skills-service.cjs.map +1 -1
- package/dist/api/skills-service.d.ts +7 -0
- package/dist/api/skills-service.js +11 -8
- package/dist/api/skills-service.js.map +1 -1
- package/dist/components/conversation-events/chat/event-message-components/critic-result-display.cjs +1 -1
- package/dist/components/conversation-events/chat/event-message-components/critic-result-display.js +5 -5
- package/dist/components/conversation-events/chat/event-message-components/finish-event-message.cjs +1 -1
- package/dist/components/conversation-events/chat/event-message-components/finish-event-message.cjs.map +1 -1
- package/dist/components/conversation-events/chat/event-message-components/finish-event-message.js +2 -1
- package/dist/components/conversation-events/chat/event-message-components/finish-event-message.js.map +1 -1
- package/dist/components/conversation-events/chat/event-message-components/generic-event-message-wrapper.cjs +1 -1
- package/dist/components/conversation-events/chat/event-message-components/generic-event-message-wrapper.cjs.map +1 -1
- package/dist/components/conversation-events/chat/event-message-components/generic-event-message-wrapper.d.ts +1 -1
- package/dist/components/conversation-events/chat/event-message-components/generic-event-message-wrapper.js +28 -28
- package/dist/components/conversation-events/chat/event-message-components/generic-event-message-wrapper.js.map +1 -1
- package/dist/components/conversation-events/chat/event-message-components/thought-event-message.cjs +1 -1
- package/dist/components/conversation-events/chat/event-message-components/thought-event-message.cjs.map +1 -1
- package/dist/components/conversation-events/chat/event-message-components/thought-event-message.js +2 -1
- package/dist/components/conversation-events/chat/event-message-components/thought-event-message.js.map +1 -1
- package/dist/components/conversation-events/chat/event-message-components/user-assistant-event-message.cjs +1 -1
- package/dist/components/conversation-events/chat/event-message-components/user-assistant-event-message.cjs.map +1 -1
- package/dist/components/conversation-events/chat/event-message-components/user-assistant-event-message.d.ts +1 -1
- package/dist/components/conversation-events/chat/event-message-components/user-assistant-event-message.js +37 -37
- package/dist/components/conversation-events/chat/event-message-components/user-assistant-event-message.js.map +1 -1
- package/dist/components/conversation-events/chat/event-message.cjs +2 -2
- package/dist/components/conversation-events/chat/event-message.cjs.map +1 -1
- package/dist/components/conversation-events/chat/event-message.js +79 -70
- package/dist/components/conversation-events/chat/event-message.js.map +1 -1
- package/dist/components/conversation-events/chat/messages.cjs +1 -1
- package/dist/components/conversation-events/chat/messages.cjs.map +1 -1
- package/dist/components/conversation-events/chat/messages.js +28 -27
- package/dist/components/conversation-events/chat/messages.js.map +1 -1
- package/dist/components/features/automations/automation-card.cjs +1 -1
- package/dist/components/features/automations/automation-card.cjs.map +1 -1
- package/dist/components/features/automations/automation-card.js +104 -97
- package/dist/components/features/automations/automation-card.js.map +1 -1
- package/dist/components/features/automations/automation-list-row.cjs +1 -1
- package/dist/components/features/automations/automation-list-row.cjs.map +1 -1
- package/dist/components/features/automations/automation-list-row.js +89 -77
- package/dist/components/features/automations/automation-list-row.js.map +1 -1
- package/dist/components/features/automations/build-automation-menu-items.cjs +1 -1
- package/dist/components/features/automations/build-automation-menu-items.cjs.map +1 -1
- package/dist/components/features/automations/build-automation-menu-items.d.ts +3 -1
- package/dist/components/features/automations/build-automation-menu-items.js +12 -11
- package/dist/components/features/automations/build-automation-menu-items.js.map +1 -1
- package/dist/components/features/automations/detail/configuration-section.d.ts +7 -1
- package/dist/components/features/automations/detail/detail-header.d.ts +10 -5
- package/dist/components/features/automations/detail/run-status-badge.cjs +1 -1
- package/dist/components/features/automations/detail/run-status-badge.cjs.map +1 -1
- package/dist/components/features/automations/detail/run-status-badge.d.ts +2 -2
- package/dist/components/features/automations/detail/run-status-badge.js +82 -53
- package/dist/components/features/automations/detail/run-status-badge.js.map +1 -1
- package/dist/components/features/automations/kebab-menu.cjs +1 -1
- package/dist/components/features/automations/kebab-menu.cjs.map +1 -1
- package/dist/components/features/automations/kebab-menu.js +9 -5
- package/dist/components/features/automations/kebab-menu.js.map +1 -1
- package/dist/components/features/automations/recommended-automations-launcher.cjs +1 -1
- package/dist/components/features/automations/recommended-automations-launcher.cjs.map +1 -1
- package/dist/components/features/automations/recommended-automations-launcher.js +12 -12
- package/dist/components/features/automations/recommended-automations-launcher.js.map +1 -1
- package/dist/components/features/automations/recommended-automations-section.cjs +1 -1
- package/dist/components/features/automations/recommended-automations-section.js +9 -9
- package/dist/components/features/backends/backend-selector.cjs +1 -1
- package/dist/components/features/backends/backend-selector.cjs.map +1 -1
- package/dist/components/features/backends/backend-selector.js +123 -112
- package/dist/components/features/backends/backend-selector.js.map +1 -1
- package/dist/components/features/backends/manage-backends-modal.cjs +1 -1
- package/dist/components/features/backends/manage-backends-modal.cjs.map +1 -1
- package/dist/components/features/backends/manage-backends-modal.js +29 -29
- package/dist/components/features/backends/manage-backends-modal.js.map +1 -1
- package/dist/components/features/chat/change-agent-button.cjs +1 -1
- package/dist/components/features/chat/change-agent-button.js +4 -4
- package/dist/components/features/chat/chat-interface.cjs +2 -2
- package/dist/components/features/chat/chat-interface.cjs.map +1 -1
- package/dist/components/features/chat/chat-interface.js +137 -137
- package/dist/components/features/chat/chat-interface.js.map +1 -1
- package/dist/components/features/chat/chat-message.cjs +1 -1
- package/dist/components/features/chat/chat-message.cjs.map +1 -1
- package/dist/components/features/chat/chat-message.d.ts +2 -1
- package/dist/components/features/chat/chat-message.js +88 -79
- package/dist/components/features/chat/chat-message.js.map +1 -1
- package/dist/components/features/chat/components/chat-input-llm-profile-picker.cjs +1 -1
- package/dist/components/features/chat/components/chat-input-llm-profile-picker.cjs.map +1 -1
- package/dist/components/features/chat/components/chat-input-llm-profile-picker.js +62 -61
- package/dist/components/features/chat/components/chat-input-llm-profile-picker.js.map +1 -1
- package/dist/components/features/chat/components/context-window-meter.cjs +1 -1
- package/dist/components/features/chat/components/context-window-meter.js +4 -4
- package/dist/components/features/chat/confirmation-mode-enabled.cjs +1 -1
- package/dist/components/features/chat/confirmation-mode-enabled.js +4 -4
- package/dist/components/features/chat/generic-event-message.cjs +1 -1
- package/dist/components/features/chat/generic-event-message.cjs.map +1 -1
- package/dist/components/features/chat/generic-event-message.d.ts +2 -1
- package/dist/components/features/chat/generic-event-message.js +41 -22
- package/dist/components/features/chat/generic-event-message.js.map +1 -1
- package/dist/components/features/chat/interactive-chat-box.cjs +1 -1
- package/dist/components/features/chat/interactive-chat-box.cjs.map +1 -1
- package/dist/components/features/chat/interactive-chat-box.js +20 -19
- package/dist/components/features/chat/interactive-chat-box.js.map +1 -1
- package/dist/components/features/chat/model-messages.cjs +1 -1
- package/dist/components/features/chat/model-messages.cjs.map +1 -1
- package/dist/components/features/chat/model-messages.js +27 -26
- package/dist/components/features/chat/model-messages.js.map +1 -1
- package/dist/components/features/conversation/conversation-overview-git-section.cjs +1 -1
- package/dist/components/features/conversation/conversation-overview-git-section.js +4 -4
- package/dist/components/features/conversation/conversation-overview-skills-panel.cjs +1 -1
- package/dist/components/features/conversation/conversation-overview-skills-panel.js +4 -4
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.cjs +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.cjs.map +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.js +77 -78
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.js.map +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs.cjs +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs.cjs.map +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs.js +88 -88
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs.js.map +1 -1
- package/dist/components/features/conversation-panel/advanced-conversation-options-modal.cjs +2 -0
- package/dist/components/features/conversation-panel/advanced-conversation-options-modal.cjs.map +1 -0
- package/dist/components/features/conversation-panel/advanced-conversation-options-modal.d.ts +21 -0
- package/dist/components/features/conversation-panel/advanced-conversation-options-modal.js +239 -0
- package/dist/components/features/conversation-panel/advanced-conversation-options-modal.js.map +1 -0
- package/dist/components/features/conversation-panel/budget-display.cjs +1 -1
- package/dist/components/features/conversation-panel/budget-display.cjs.map +1 -1
- package/dist/components/features/conversation-panel/budget-display.d.ts +1 -2
- package/dist/components/features/conversation-panel/budget-display.js +12 -19
- package/dist/components/features/conversation-panel/budget-display.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-active-tag-filters.cjs +2 -0
- package/dist/components/features/conversation-panel/conversation-active-tag-filters.cjs.map +1 -0
- package/dist/components/features/conversation-panel/conversation-active-tag-filters.d.ts +28 -0
- package/dist/components/features/conversation-panel/conversation-active-tag-filters.js +69 -0
- package/dist/components/features/conversation-panel/conversation-active-tag-filters.js.map +1 -0
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.d.ts +2 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.js +19 -18
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.d.ts +2 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.js +91 -80
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.js +45 -44
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.js +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card.d.ts +7 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card.js +87 -81
- package/dist/components/features/conversation-panel/conversation-card/conversation-card.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.d.ts +2 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.js +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.d.ts +2 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.js +2 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-layouts-menu.cjs +2 -0
- package/dist/components/features/conversation-panel/conversation-layouts-menu.cjs.map +1 -0
- package/dist/components/features/conversation-panel/conversation-layouts-menu.d.ts +29 -0
- package/dist/components/features/conversation-panel/conversation-layouts-menu.js +177 -0
- package/dist/components/features/conversation-panel/conversation-layouts-menu.js.map +1 -0
- package/dist/components/features/conversation-panel/conversation-panel-list-helpers.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-panel-list-helpers.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-panel-list-helpers.d.ts +37 -0
- package/dist/components/features/conversation-panel/conversation-panel-list-helpers.js +85 -45
- package/dist/components/features/conversation-panel/conversation-panel-list-helpers.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-panel.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-panel.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-panel.js +296 -290
- package/dist/components/features/conversation-panel/conversation-panel.js.map +1 -1
- package/dist/components/features/conversation-panel/edit-conversation-tags-modal.cjs +2 -0
- package/dist/components/features/conversation-panel/edit-conversation-tags-modal.cjs.map +1 -0
- package/dist/components/features/conversation-panel/edit-conversation-tags-modal.d.ts +22 -0
- package/dist/components/features/conversation-panel/edit-conversation-tags-modal.js +153 -0
- package/dist/components/features/conversation-panel/edit-conversation-tags-modal.js.map +1 -0
- package/dist/components/features/conversation-panel/hide-older-conversations-row.cjs +2 -0
- package/dist/components/features/conversation-panel/hide-older-conversations-row.cjs.map +1 -0
- package/dist/components/features/conversation-panel/hide-older-conversations-row.d.ts +6 -0
- package/dist/components/features/conversation-panel/hide-older-conversations-row.js +65 -0
- package/dist/components/features/conversation-panel/hide-older-conversations-row.js.map +1 -0
- package/dist/components/features/conversation-panel/menu-row.cjs +1 -1
- package/dist/components/features/conversation-panel/menu-row.cjs.map +1 -1
- package/dist/components/features/conversation-panel/menu-row.d.ts +11 -1
- package/dist/components/features/conversation-panel/menu-row.js +27 -16
- package/dist/components/features/conversation-panel/menu-row.js.map +1 -1
- package/dist/components/features/home/featured-automations/automation-health-indicator.cjs +1 -1
- package/dist/components/features/home/featured-automations/automation-health-indicator.cjs.map +1 -1
- package/dist/components/features/home/featured-automations/automation-health-indicator.js +1 -1
- package/dist/components/features/home/featured-automations/automation-health-indicator.js.map +1 -1
- package/dist/components/features/home/featured-automations/automation-run-activity-metrics.cjs +1 -1
- package/dist/components/features/home/featured-automations/automation-run-activity-metrics.cjs.map +1 -1
- package/dist/components/features/home/featured-automations/automation-run-activity-metrics.d.ts +4 -3
- package/dist/components/features/home/featured-automations/automation-run-activity-metrics.js +22 -25
- package/dist/components/features/home/featured-automations/automation-run-activity-metrics.js.map +1 -1
- package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.cjs +1 -1
- package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.cjs.map +1 -1
- package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.d.ts +1 -1
- package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.js +15 -15
- package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.js.map +1 -1
- package/dist/components/features/home/featured-automations/automation-run-health.cjs +1 -1
- package/dist/components/features/home/featured-automations/automation-run-health.cjs.map +1 -1
- package/dist/components/features/home/featured-automations/automation-run-health.d.ts +5 -3
- package/dist/components/features/home/featured-automations/automation-run-health.js +30 -23
- package/dist/components/features/home/featured-automations/automation-run-health.js.map +1 -1
- package/dist/components/features/home/featured-automations/build-home-automation-menu-items.d.ts +1 -2
- package/dist/components/features/home/featured-automations/build-pinned-automation-menu-items.d.ts +0 -1
- package/dist/components/features/home/featured-automations/home-automation-activity.d.ts +3 -2
- package/dist/components/features/home/featured-automations/home-automation-run-tooltip.cjs +1 -1
- package/dist/components/features/home/featured-automations/home-automation-run-tooltip.cjs.map +1 -1
- package/dist/components/features/home/featured-automations/home-automation-run-tooltip.d.ts +1 -1
- package/dist/components/features/home/featured-automations/home-automation-run-tooltip.js +42 -42
- package/dist/components/features/home/featured-automations/home-automation-run-tooltip.js.map +1 -1
- package/dist/components/features/images/image-lightbox.cjs +2 -0
- package/dist/components/features/images/image-lightbox.cjs.map +1 -0
- package/dist/components/features/images/image-lightbox.d.ts +11 -0
- package/dist/components/features/images/image-lightbox.js +37 -0
- package/dist/components/features/images/image-lightbox.js.map +1 -0
- package/dist/components/features/images/image-preview.cjs +1 -1
- package/dist/components/features/images/image-preview.cjs.map +1 -1
- package/dist/components/features/images/image-preview.d.ts +2 -1
- package/dist/components/features/images/image-preview.js +33 -13
- package/dist/components/features/images/image-preview.js.map +1 -1
- package/dist/components/features/manifest/manifest-form-field.d.ts +3 -1
- package/dist/components/features/manifest/manifest-review-step.d.ts +3 -1
- package/dist/components/features/onboarding/steps/setup-llm-step.d.ts +3 -4
- package/dist/components/features/settings/cloud-settings-link.cjs +1 -1
- package/dist/components/features/settings/cloud-settings-link.cjs.map +1 -1
- package/dist/components/features/settings/cloud-settings-link.d.ts +3 -1
- package/dist/components/features/settings/cloud-settings-link.js +22 -19
- package/dist/components/features/settings/cloud-settings-link.js.map +1 -1
- package/dist/components/features/settings/integrations-settings-link.cjs +1 -1
- package/dist/components/features/settings/integrations-settings-link.cjs.map +1 -1
- package/dist/components/features/settings/integrations-settings-link.d.ts +3 -1
- package/dist/components/features/settings/integrations-settings-link.js +20 -17
- package/dist/components/features/settings/integrations-settings-link.js.map +1 -1
- package/dist/components/features/settings/llm-profiles/llm-settings-local-view.cjs +1 -1
- package/dist/components/features/settings/llm-profiles/llm-settings-local-view.js +3 -2
- package/dist/components/features/settings/llm-profiles/profile-row.cjs +1 -1
- package/dist/components/features/settings/llm-profiles/profile-row.js +1 -1
- package/dist/components/features/settings/llm-profiles/profiles-body.d.ts +2 -2
- package/dist/components/features/settings/sdk-settings/sdk-section-page.cjs +1 -1
- package/dist/components/features/settings/sdk-settings/sdk-section-page.cjs.map +1 -1
- package/dist/components/features/settings/sdk-settings/sdk-section-page.d.ts +8 -7
- package/dist/components/features/settings/sdk-settings/sdk-section-page.js +172 -142
- package/dist/components/features/settings/sdk-settings/sdk-section-page.js.map +1 -1
- package/dist/components/features/settings/secrets-settings/secret-form.cjs +1 -1
- package/dist/components/features/settings/secrets-settings/secret-form.cjs.map +1 -1
- package/dist/components/features/settings/secrets-settings/secret-form.js +38 -25
- package/dist/components/features/settings/secrets-settings/secret-form.js.map +1 -1
- package/dist/components/features/settings/settings-dropdown-input.cjs +1 -1
- package/dist/components/features/settings/settings-dropdown-input.js +6 -6
- package/dist/components/features/sidebar/sidebar-rail-body.cjs +1 -1
- package/dist/components/features/sidebar/sidebar-rail-body.cjs.map +1 -1
- package/dist/components/features/sidebar/sidebar-rail-body.d.ts +4 -1
- package/dist/components/features/sidebar/sidebar-rail-body.js +157 -139
- package/dist/components/features/sidebar/sidebar-rail-body.js.map +1 -1
- package/dist/components/features/sidebar/sidebar.cjs +1 -1
- package/dist/components/features/sidebar/sidebar.cjs.map +1 -1
- package/dist/components/features/sidebar/sidebar.js +28 -26
- package/dist/components/features/sidebar/sidebar.js.map +1 -1
- package/dist/components/features/sidebar/use-sidebar-onboarding-checklist.cjs +1 -1
- package/dist/components/features/sidebar/use-sidebar-onboarding-checklist.js +3 -3
- package/dist/components/features/skills/extensions-navigation.cjs +1 -1
- package/dist/components/features/skills/extensions-navigation.cjs.map +1 -1
- package/dist/components/features/skills/extensions-navigation.js +3 -3
- package/dist/components/features/skills/extensions-navigation.js.map +1 -1
- package/dist/components/providers/agent-server-ui-providers.cjs +1 -1
- package/dist/components/providers/agent-server-ui-providers.cjs.map +1 -1
- package/dist/components/providers/agent-server-ui-providers.js +33 -29
- package/dist/components/providers/agent-server-ui-providers.js.map +1 -1
- package/dist/components/shared/buttons/remove-button.cjs +1 -1
- package/dist/components/shared/buttons/remove-button.cjs.map +1 -1
- package/dist/components/shared/buttons/remove-button.d.ts +2 -1
- package/dist/components/shared/buttons/remove-button.js +2 -1
- package/dist/components/shared/buttons/remove-button.js.map +1 -1
- package/dist/components/shared/buttons/styled-tooltip.cjs +1 -1
- package/dist/components/shared/buttons/styled-tooltip.cjs.map +1 -1
- package/dist/components/shared/buttons/styled-tooltip.d.ts +2 -1
- package/dist/components/shared/buttons/styled-tooltip.js +2 -1
- package/dist/components/shared/buttons/styled-tooltip.js.map +1 -1
- package/dist/components/shared/filters/enum-filter-dropdown.cjs +1 -1
- package/dist/components/shared/filters/enum-filter-dropdown.cjs.map +1 -1
- package/dist/components/shared/filters/enum-filter-dropdown.d.ts +5 -1
- package/dist/components/shared/filters/enum-filter-dropdown.js +14 -14
- package/dist/components/shared/filters/enum-filter-dropdown.js.map +1 -1
- package/dist/components/shared/free-models-note.cjs +2 -0
- package/dist/components/shared/free-models-note.cjs.map +1 -0
- package/dist/components/shared/free-models-note.d.ts +3 -0
- package/dist/components/shared/free-models-note.js +20 -0
- package/dist/components/shared/free-models-note.js.map +1 -0
- package/dist/components/shared/modals/confirmation-modal.cjs +1 -1
- package/dist/components/shared/modals/confirmation-modal.cjs.map +1 -1
- package/dist/components/shared/modals/confirmation-modal.d.ts +2 -1
- package/dist/components/shared/modals/confirmation-modal.js +8 -8
- package/dist/components/shared/modals/confirmation-modal.js.map +1 -1
- package/dist/components/shared/modals/settings/model-selector.cjs +1 -1
- package/dist/components/shared/modals/settings/model-selector.cjs.map +1 -1
- package/dist/components/shared/modals/settings/model-selector.js +102 -112
- package/dist/components/shared/modals/settings/model-selector.js.map +1 -1
- package/dist/config/defaults.cjs +1 -1
- package/dist/config/defaults.cjs.map +1 -1
- package/dist/config/defaults.js +3 -3
- package/dist/config/defaults.js.map +1 -1
- package/dist/constants/acp-providers.cjs.map +1 -1
- package/dist/constants/acp-providers.d.ts +12 -0
- package/dist/constants/acp-providers.js.map +1 -1
- package/dist/constants/settings-nav.d.ts +8 -0
- package/dist/contexts/conversation-websocket-context.cjs +3 -3
- package/dist/contexts/conversation-websocket-context.cjs.map +1 -1
- package/dist/contexts/conversation-websocket-context.d.ts +5 -0
- package/dist/contexts/conversation-websocket-context.js +194 -198
- package/dist/contexts/conversation-websocket-context.js.map +1 -1
- package/dist/contexts/websocket-provider-wrapper.cjs +1 -1
- package/dist/contexts/websocket-provider-wrapper.cjs.map +1 -1
- package/dist/contexts/websocket-provider-wrapper.js +31 -15
- package/dist/contexts/websocket-provider-wrapper.js.map +1 -1
- package/dist/hooks/chat/record-model-switch-message.cjs +1 -1
- package/dist/hooks/chat/record-model-switch-message.cjs.map +1 -1
- package/dist/hooks/chat/record-model-switch-message.d.ts +31 -0
- package/dist/hooks/chat/record-model-switch-message.js +25 -12
- package/dist/hooks/chat/record-model-switch-message.js.map +1 -1
- package/dist/hooks/chat/use-plan-mode-interceptor.cjs +2 -0
- package/dist/hooks/chat/use-plan-mode-interceptor.cjs.map +1 -0
- package/dist/hooks/chat/use-plan-mode-interceptor.d.ts +16 -0
- package/dist/hooks/chat/use-plan-mode-interceptor.js +43 -0
- package/dist/hooks/chat/use-plan-mode-interceptor.js.map +1 -0
- package/dist/hooks/chat/use-slash-command.cjs +1 -1
- package/dist/hooks/chat/use-slash-command.cjs.map +1 -1
- package/dist/hooks/chat/use-slash-command.js +63 -62
- package/dist/hooks/chat/use-slash-command.js.map +1 -1
- package/dist/hooks/mutation/use-create-conversation.cjs +1 -1
- package/dist/hooks/mutation/use-create-conversation.cjs.map +1 -1
- package/dist/hooks/mutation/use-create-conversation.js +5 -1
- package/dist/hooks/mutation/use-create-conversation.js.map +1 -1
- package/dist/hooks/mutation/use-read-conversation-file.cjs +1 -1
- package/dist/hooks/mutation/use-read-conversation-file.cjs.map +1 -1
- package/dist/hooks/mutation/use-read-conversation-file.js +11 -4
- package/dist/hooks/mutation/use-read-conversation-file.js.map +1 -1
- package/dist/hooks/mutation/use-save-settings.cjs +1 -1
- package/dist/hooks/mutation/use-save-settings.js +3 -3
- package/dist/hooks/mutation/use-switch-llm-profile.cjs +1 -1
- package/dist/hooks/mutation/use-switch-llm-profile.cjs.map +1 -1
- package/dist/hooks/mutation/use-switch-llm-profile.js +13 -25
- package/dist/hooks/mutation/use-switch-llm-profile.js.map +1 -1
- package/dist/hooks/mutation/use-update-conversation-tags.cjs +2 -0
- package/dist/hooks/mutation/use-update-conversation-tags.cjs.map +1 -0
- package/dist/hooks/mutation/use-update-conversation-tags.d.ts +8 -0
- package/dist/hooks/mutation/use-update-conversation-tags.js +45 -0
- package/dist/hooks/mutation/use-update-conversation-tags.js.map +1 -0
- package/dist/hooks/query/query-keys.cjs +1 -1
- package/dist/hooks/query/query-keys.cjs.map +1 -1
- package/dist/hooks/query/query-keys.d.ts +6 -0
- package/dist/hooks/query/query-keys.js +2 -2
- package/dist/hooks/query/query-keys.js.map +1 -1
- package/dist/hooks/query/use-automation-sdk-version.cjs +1 -1
- package/dist/hooks/query/use-automation-sdk-version.cjs.map +1 -1
- package/dist/hooks/query/use-automation-sdk-version.d.ts +0 -1
- package/dist/hooks/query/use-automation-sdk-version.js +30 -55
- package/dist/hooks/query/use-automation-sdk-version.js.map +1 -1
- package/dist/hooks/query/use-conversation-skills.cjs +1 -1
- package/dist/hooks/query/use-conversation-skills.cjs.map +1 -1
- package/dist/hooks/query/use-conversation-skills.d.ts +14 -5
- package/dist/hooks/query/use-conversation-skills.js +20 -4
- package/dist/hooks/query/use-conversation-skills.js.map +1 -1
- package/dist/hooks/query/use-free-models.cjs +2 -0
- package/dist/hooks/query/use-free-models.cjs.map +1 -0
- package/dist/hooks/query/use-free-models.d.ts +23 -0
- package/dist/hooks/query/use-free-models.js +67 -0
- package/dist/hooks/query/use-free-models.js.map +1 -0
- package/dist/hooks/query/use-local-git-info.cjs.map +1 -1
- package/dist/hooks/query/use-local-git-info.js.map +1 -1
- package/dist/hooks/query/use-provider-connections.cjs +1 -1
- package/dist/hooks/query/use-provider-connections.cjs.map +1 -1
- package/dist/hooks/query/use-provider-connections.d.ts +6 -3
- package/dist/hooks/query/use-provider-connections.js +7 -3
- package/dist/hooks/query/use-provider-connections.js.map +1 -1
- package/dist/hooks/query/use-provider-models.cjs +1 -1
- package/dist/hooks/query/use-provider-models.cjs.map +1 -1
- package/dist/hooks/query/use-provider-models.js +34 -25
- package/dist/hooks/query/use-provider-models.js.map +1 -1
- package/dist/hooks/query/use-search-providers.cjs +1 -1
- package/dist/hooks/query/use-search-providers.cjs.map +1 -1
- package/dist/hooks/query/use-search-providers.js +31 -19
- package/dist/hooks/query/use-search-providers.js.map +1 -1
- package/dist/hooks/query/use-sub-conversations.cjs +1 -1
- package/dist/hooks/query/use-sub-conversations.cjs.map +1 -1
- package/dist/hooks/query/use-sub-conversations.js +16 -16
- package/dist/hooks/query/use-sub-conversations.js.map +1 -1
- package/dist/hooks/use-acp-model-context.cjs +1 -1
- package/dist/hooks/use-acp-model-context.js +3 -3
- package/dist/hooks/use-agent-state.cjs +1 -1
- package/dist/hooks/use-agent-state.cjs.map +1 -1
- package/dist/hooks/use-agent-state.d.ts +17 -1
- package/dist/hooks/use-agent-state.js +19 -9
- package/dist/hooks/use-agent-state.js.map +1 -1
- package/dist/hooks/use-automation-permissions.cjs +2 -0
- package/dist/hooks/use-automation-permissions.cjs.map +1 -0
- package/dist/hooks/use-automation-permissions.d.ts +43 -0
- package/dist/hooks/use-automation-permissions.js +52 -0
- package/dist/hooks/use-automation-permissions.js.map +1 -0
- package/dist/hooks/use-chat-input-model-state.cjs +1 -1
- package/dist/hooks/use-chat-input-model-state.js +3 -3
- package/dist/hooks/use-handle-plan-click.cjs +1 -1
- package/dist/hooks/use-handle-plan-click.cjs.map +1 -1
- package/dist/hooks/use-handle-plan-click.d.ts +3 -1
- package/dist/hooks/use-handle-plan-click.js +85 -26
- package/dist/hooks/use-handle-plan-click.js.map +1 -1
- package/dist/hooks/use-home-automation-actions.cjs +1 -1
- package/dist/hooks/use-home-automation-actions.cjs.map +1 -1
- package/dist/hooks/use-home-automation-actions.d.ts +1 -2
- package/dist/hooks/use-home-automation-actions.js +1 -1
- package/dist/hooks/use-home-automation-actions.js.map +1 -1
- package/dist/hooks/use-llm-configured.cjs +1 -1
- package/dist/hooks/use-llm-configured.js +3 -3
- package/dist/hooks/use-manifest-preflight.d.ts +1 -1
- package/dist/hooks/use-unified-websocket-status.cjs +1 -1
- package/dist/hooks/use-unified-websocket-status.cjs.map +1 -1
- package/dist/hooks/use-unified-websocket-status.d.ts +7 -0
- package/dist/hooks/use-unified-websocket-status.js +5 -1
- package/dist/hooks/use-unified-websocket-status.js.map +1 -1
- package/dist/i18n/declaration.cjs +1 -1
- package/dist/i18n/declaration.cjs.map +1 -1
- package/dist/i18n/declaration.d.ts +71 -14
- package/dist/i18n/declaration.js +1 -1
- package/dist/i18n/declaration.js.map +1 -1
- package/dist/i18n/translation.cjs +2 -2
- package/dist/i18n/translation.cjs.map +1 -1
- package/dist/i18n/translation.js +1281 -312
- package/dist/i18n/translation.js.map +1 -1
- package/dist/locales/ar/openhands.json +79 -22
- package/dist/locales/ca/openhands.json +79 -22
- package/dist/locales/de/openhands.json +79 -22
- package/dist/locales/en/openhands.json +79 -22
- package/dist/locales/es/openhands.json +79 -22
- package/dist/locales/fr/openhands.json +79 -22
- package/dist/locales/it/openhands.json +79 -22
- package/dist/locales/ja/openhands.json +79 -22
- package/dist/locales/ko-KR/openhands.json +79 -22
- package/dist/locales/no/openhands.json +79 -22
- package/dist/locales/pt/openhands.json +79 -22
- package/dist/locales/tr/openhands.json +79 -22
- package/dist/locales/uk/openhands.json +79 -22
- package/dist/locales/zh-CN/openhands.json +79 -22
- package/dist/locales/zh-TW/openhands.json +79 -22
- package/dist/manifests/automation-insights.cjs.map +1 -1
- package/dist/manifests/automation-insights.d.ts +10 -2
- package/dist/manifests/automation-insights.js.map +1 -1
- package/dist/manifests/automation-setup.cjs +1 -1
- package/dist/manifests/automation-setup.cjs.map +1 -1
- package/dist/manifests/automation-setup.d.ts +9 -16
- package/dist/manifests/automation-setup.js +17 -7
- package/dist/manifests/automation-setup.js.map +1 -1
- package/dist/manifests/manifest-actions.d.ts +1 -1
- package/dist/manifests/manifest-capabilities.d.ts +3 -1
- package/dist/manifests/manifest-local-validation.cjs +2 -0
- package/dist/manifests/manifest-local-validation.cjs.map +1 -0
- package/dist/manifests/manifest-local-validation.d.ts +15 -11
- package/dist/manifests/manifest-local-validation.js +8 -0
- package/dist/manifests/manifest-local-validation.js.map +1 -0
- package/dist/manifests/manifest-template.cjs +2 -0
- package/dist/manifests/manifest-template.cjs.map +1 -0
- package/dist/manifests/manifest-template.d.ts +4 -4
- package/dist/manifests/manifest-template.js +12 -0
- package/dist/manifests/manifest-template.js.map +1 -0
- package/dist/manifests/manifest-validation.cjs +1 -1
- package/dist/manifests/manifest-validation.cjs.map +1 -1
- package/dist/manifests/manifest-validation.js +106 -28
- package/dist/manifests/manifest-validation.js.map +1 -1
- package/dist/manifests/types.cjs.map +1 -1
- package/dist/manifests/types.d.ts +39 -4
- package/dist/manifests/types.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/custom-automation/manifest.cjs +8 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/custom-automation/manifest.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/custom-automation/manifest.js +221 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/custom-automation/manifest.js.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.js +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.js +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/qa-changes/manifest.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/qa-changes/manifest.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/qa-changes/manifest.js +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/qa-changes/manifest.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog-index.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog-index.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog-index.js +22 -20
- package/dist/node_modules/@openhands/extensions/automations/catalog-index.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/interface.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/automations/interface.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/interface.js +2 -1
- package/dist/node_modules/@openhands/extensions/automations/interface.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/gitlab.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/gitlab.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/gitlab.js +24 -5
- package/dist/node_modules/@openhands/extensions/integrations/catalog/gitlab.js.map +1 -1
- package/dist/node_modules/@tanstack/react-query/build/modern/QueryClientProvider.cjs +1 -1
- package/dist/node_modules/@tanstack/react-query/build/modern/QueryClientProvider.js +1 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-question-mark.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-question-mark.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-question-mark.js +21 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-question-mark.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/shrink.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/shrink.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/shrink.js +23 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/shrink.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/sliders-horizontal.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/sliders-horizontal.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/sliders-horizontal.js +43 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/sliders-horizontal.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/tags.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/tags.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/tags.js +22 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/tags.js.map +1 -0
- package/dist/package.cjs +1 -1
- package/dist/package.cjs.map +1 -1
- package/dist/package.js +4 -4
- package/dist/package.js.map +1 -1
- package/dist/routes/agent-settings.d.ts +2 -0
- package/dist/routes/app-settings.cjs +1 -1
- package/dist/routes/app-settings.cjs.map +1 -1
- package/dist/routes/app-settings.js +53 -48
- package/dist/routes/app-settings.js.map +1 -1
- package/dist/routes/llm-settings.cjs +1 -1
- package/dist/routes/llm-settings.cjs.map +1 -1
- package/dist/routes/llm-settings.d.ts +3 -1
- package/dist/routes/llm-settings.js +120 -127
- package/dist/routes/llm-settings.js.map +1 -1
- package/dist/routes/planner-tab.cjs +1 -1
- package/dist/routes/planner-tab.cjs.map +1 -1
- package/dist/routes/planner-tab.js +44 -28
- package/dist/routes/planner-tab.js.map +1 -1
- package/dist/services/telemetry.cjs +1 -1
- package/dist/services/telemetry.cjs.map +1 -1
- package/dist/services/telemetry.d.ts +5 -0
- package/dist/services/telemetry.js +122 -115
- package/dist/services/telemetry.js.map +1 -1
- package/dist/stores/conversation-panel-preferences-store.cjs +1 -1
- package/dist/stores/conversation-panel-preferences-store.cjs.map +1 -1
- package/dist/stores/conversation-panel-preferences-store.d.ts +32 -5
- package/dist/stores/conversation-panel-preferences-store.js +29 -12
- package/dist/stores/conversation-panel-preferences-store.js.map +1 -1
- package/dist/stores/conversation-state-store.cjs +1 -1
- package/dist/stores/conversation-state-store.cjs.map +1 -1
- package/dist/stores/conversation-state-store.d.ts +9 -3
- package/dist/stores/conversation-state-store.js +6 -3
- package/dist/stores/conversation-state-store.js.map +1 -1
- package/dist/stores/conversation-store.cjs +1 -1
- package/dist/stores/conversation-store.cjs.map +1 -1
- package/dist/stores/conversation-store.d.ts +2 -0
- package/dist/stores/conversation-store.js +3 -0
- package/dist/stores/conversation-store.js.map +1 -1
- package/dist/stores/free-models-store.cjs +2 -0
- package/dist/stores/free-models-store.cjs.map +1 -0
- package/dist/stores/free-models-store.d.ts +30 -0
- package/dist/stores/free-models-store.js +22 -0
- package/dist/stores/free-models-store.js.map +1 -0
- package/dist/stores/model-store.cjs +1 -1
- package/dist/stores/model-store.cjs.map +1 -1
- package/dist/stores/model-store.d.ts +7 -0
- package/dist/stores/model-store.js +4 -0
- package/dist/stores/model-store.js.map +1 -1
- package/dist/types/automation.cjs.map +1 -1
- package/dist/types/automation.d.ts +46 -1
- package/dist/types/automation.js.map +1 -1
- package/dist/ui/context-menu.d.ts +1 -1
- package/dist/ui/toggle-switch.cjs +1 -1
- package/dist/ui/toggle-switch.cjs.map +1 -1
- package/dist/ui/toggle-switch.d.ts +4 -1
- package/dist/ui/toggle-switch.js +4 -3
- package/dist/ui/toggle-switch.js.map +1 -1
- package/dist/utils/automation-catalog.cjs +1 -1
- package/dist/utils/automation-catalog.cjs.map +1 -1
- package/dist/utils/automation-catalog.d.ts +12 -1
- package/dist/utils/automation-catalog.js +42 -12
- package/dist/utils/automation-catalog.js.map +1 -1
- package/dist/utils/automation-run-display.cjs +2 -0
- package/dist/utils/automation-run-display.cjs.map +1 -0
- package/dist/utils/automation-run-display.d.ts +20 -0
- package/dist/utils/automation-run-display.js +85 -0
- package/dist/utils/automation-run-display.js.map +1 -0
- package/dist/utils/automation-schedule.cjs +1 -1
- package/dist/utils/automation-schedule.cjs.map +1 -1
- package/dist/utils/automation-schedule.d.ts +16 -0
- package/dist/utils/automation-schedule.js +2 -0
- package/dist/utils/automation-schedule.js.map +1 -1
- package/dist/utils/constants.cjs +1 -1
- package/dist/utils/constants.cjs.map +1 -1
- package/dist/utils/constants.d.ts +4 -0
- package/dist/utils/constants.js +23 -3
- package/dist/utils/constants.js.map +1 -1
- package/dist/utils/format-event-timestamp.cjs +2 -0
- package/dist/utils/format-event-timestamp.cjs.map +1 -0
- package/dist/utils/format-event-timestamp.d.ts +1 -0
- package/dist/utils/format-event-timestamp.js +13 -0
- package/dist/utils/format-event-timestamp.js.map +1 -0
- package/dist/utils/format-model-name.cjs +1 -1
- package/dist/utils/format-model-name.cjs.map +1 -1
- package/dist/utils/format-model-name.d.ts +27 -6
- package/dist/utils/format-model-name.js +14 -6
- package/dist/utils/format-model-name.js.map +1 -1
- package/dist/utils/git-diff-stats.cjs +2 -2
- package/dist/utils/git-diff-stats.cjs.map +1 -1
- package/dist/utils/git-diff-stats.d.ts +4 -0
- package/dist/utils/git-diff-stats.js +12 -2
- package/dist/utils/git-diff-stats.js.map +1 -1
- package/dist/utils/plan-file.cjs +4 -0
- package/dist/utils/plan-file.cjs.map +1 -0
- package/dist/utils/plan-file.d.ts +18 -0
- package/dist/utils/plan-file.js +58 -0
- package/dist/utils/plan-file.js.map +1 -0
- package/dist/utils/recommended-automation-rail.cjs +1 -1
- package/dist/utils/recommended-automation-rail.cjs.map +1 -1
- package/dist/utils/recommended-automation-rail.js +1 -0
- package/dist/utils/recommended-automation-rail.js.map +1 -1
- package/dist/utils/scroll-fade-state.cjs +1 -1
- package/dist/utils/scroll-fade-state.cjs.map +1 -1
- package/dist/utils/scroll-fade-state.d.ts +6 -0
- package/dist/utils/scroll-fade-state.js +8 -1
- package/dist/utils/scroll-fade-state.js.map +1 -1
- package/dist/utils/sdk-settings-schema.cjs +1 -1
- package/dist/utils/sdk-settings-schema.cjs.map +1 -1
- package/dist/utils/sdk-settings-schema.d.ts +1 -0
- package/dist/utils/sdk-settings-schema.js +25 -22
- package/dist/utils/sdk-settings-schema.js.map +1 -1
- package/dist/utils/utils.cjs +1 -1
- package/dist/utils/utils.cjs.map +1 -1
- package/dist/utils/utils.js +11 -11
- package/dist/utils/utils.js.map +1 -1
- package/package.json +4 -4
- package/scripts/check-sdk-version-sync.mjs +6 -6
- package/scripts/dev-safe.mjs +1 -1
- package/scripts/dev-with-automation.mjs +1 -1
- package/scripts/static-server.mjs +33 -1
- package/build/assets/active-backend-context-CrHTlgvN.js +0 -2
- package/build/assets/agent-profiles-settings-Dzgb7G9z.js +0 -1
- package/build/assets/agent-server-conversation-service.api-tnqNjbpE.js +0 -86
- package/build/assets/agent-settings-DLtsqaOs.js +0 -2
- package/build/assets/agent-settings-fFvR-XC2.js +0 -1
- package/build/assets/alert-banner-HP6mX-Vr.js +0 -1
- package/build/assets/api-key-entry-screen-qTzrmJcr.js +0 -1
- package/build/assets/app-settings-dbnneVaV.js +0 -1
- package/build/assets/automation-detail-BmwlCUAB.js +0 -3
- package/build/assets/automation-git-sync-CprN5DcU.js +0 -1
- package/build/assets/automation-setup-route-C40kXjMY.js +0 -1
- package/build/assets/automations-list-DuNcRawl.js +0 -1
- package/build/assets/backend-form-modal-lhGwzXFI.js +0 -1
- package/build/assets/backend-synced-settings-badge-DPkz30BE.js +0 -1
- package/build/assets/badge-BU3S0VtE.js +0 -1
- package/build/assets/bot-dMYHVfYM.js +0 -1
- package/build/assets/browser-DSAo0tz1.js +0 -46
- package/build/assets/browser-tab-C9vy56R5.js +0 -1
- package/build/assets/canvas-extension-page-dx1gFrfW.js +0 -1
- package/build/assets/canvas-extensions-8A-XhpgP.js +0 -1
- package/build/assets/check-CS0vmpQQ.js +0 -1
- package/build/assets/chevron-down-e1QBpjVy.js +0 -1
- package/build/assets/chevron-right-ZG4R5G4Q.js +0 -1
- package/build/assets/circle-check-DzWLNsbE.js +0 -1
- package/build/assets/circle-plus-check-toggle-BO_kFZt3.js +0 -1
- package/build/assets/command-menu--UIlGL72.js +0 -1
- package/build/assets/commits-tab-AnZwLvh-.js +0 -1
- package/build/assets/confirmation-modal-Dv1ktp8K.js +0 -1
- package/build/assets/conversation-BbGrAO4Z.js +0 -93
- package/build/assets/conversation-mYT6NAoj.js +0 -1
- package/build/assets/conversation-panel-mYT6NAoj.js +0 -1
- package/build/assets/conversation-state-store-B0ImPLHO.js +0 -1
- package/build/assets/conversation-store-Ca3ghXap.js +0 -6
- package/build/assets/copy-to-clipboard-button-Ca8iSkkA.js +0 -1
- package/build/assets/device-verify-Bhn2e_Ye.js +0 -1
- package/build/assets/edit-automation-modal-DadGbJ2u.js +0 -1
- package/build/assets/empty-state-BoGVDecT.js +0 -1
- package/build/assets/enum-filter-dropdown-Bgca129f.js +0 -1
- package/build/assets/environment-switch-overlay-BmBRT7gv.js +0 -1
- package/build/assets/error-state-Body8Ngd.js +0 -1
- package/build/assets/extensions-hub-CcDqq_vR.js +0 -1
- package/build/assets/extensions-navigation-Cr4yzYk4.js +0 -1
- package/build/assets/external-link-DKUlnCQV.js +0 -1
- package/build/assets/files-tab-D4o2VyE_.js +0 -1
- package/build/assets/format-model-name-CasAP3nd.js +0 -1
- package/build/assets/get-git-path-ChKDVHZp.js +0 -1
- package/build/assets/git-repo-dropdown-4ROKl2cB.js +0 -1
- package/build/assets/git-repo-dropdown-BkqzkMmM.js +0 -1
- package/build/assets/highlighted-source-view-BFRxGT_Q.js +0 -1
- package/build/assets/home-ChpSuepX.js +0 -1
- package/build/assets/home-DIsB440S.js +0 -1
- package/build/assets/home-automation-run-tooltip-BVNDWjAH.js +0 -1
- package/build/assets/home-store-CY9Ej0ux.js +0 -1
- package/build/assets/index-home-BdlrFIif.js +0 -1
- package/build/assets/info-B6RQawoW.js +0 -1
- package/build/assets/install-server-modal-Dpy89p4g.js +0 -1
- package/build/assets/kebab-menu-item-content-D8hSNGmm.js +0 -1
- package/build/assets/launch-IrTDEFCs.js +0 -1
- package/build/assets/list-filter-DsEK7NFC.js +0 -1
- package/build/assets/llm-not-configured-banner-CIFABh3K.js +0 -27
- package/build/assets/llm-settings-B9juXhIa.js +0 -1
- package/build/assets/llm-settings-De1d5dfr.js +0 -1
- package/build/assets/llm-subscription-service-BpJ0ouQo.js +0 -1
- package/build/assets/loader-circle-CC1au6hc.js +0 -1
- package/build/assets/manage-backends-modal-BrPV3oB-.js +0 -1
- package/build/assets/manifest-80fb1c29.js +0 -1
- package/build/assets/manifest-subpage-layout-CAOYzrYp.js +0 -1
- package/build/assets/markdown-renderer-BzTlxI8x.js +0 -8
- package/build/assets/mcp-BTs_SXfZ.js +0 -1
- package/build/assets/mcp-page-BEBYqH_K.js +0 -9
- package/build/assets/messages-DKV9cRc2.js +0 -41
- package/build/assets/modal-close-button-DDzdRvCs.js +0 -1
- package/build/assets/onboarding-DV_OXoeP.js +0 -1
- package/build/assets/onboarding-modal-rkyBYkeQ.js +0 -1
- package/build/assets/organization-service.api-DrYNkEN_.js +0 -1
- package/build/assets/pencil-47jAZH_V.js +0 -1
- package/build/assets/pin-By41Vl5J.js +0 -1
- package/build/assets/planner-tab-C9uZmhme.js +0 -1
- package/build/assets/plug-CG5HFcNG.js +0 -1
- package/build/assets/plugins-management-service-BMJgC3Ga.js +0 -1
- package/build/assets/plus-C7Slq-0I.js +0 -1
- package/build/assets/profiles-service.api-ChoKrL0l.js +0 -1
- package/build/assets/providers-BhMcY5nv.js +0 -1
- package/build/assets/proxy-9Fe1v5na.js +0 -1
- package/build/assets/recommended-automations-launcher-6ABrI9Cy.js +0 -1
- package/build/assets/refresh-cw-3q3Frrii.js +0 -1
- package/build/assets/root-Dc8YmC9F.js +0 -2
- package/build/assets/root-VDaypvK4.css +0 -1
- package/build/assets/root-layout-CXkhSPYh.js +0 -2
- package/build/assets/schema-field-D-y9-LDb.js +0 -1
- package/build/assets/scroll-fade-state-Dw-i4SGq.js +0 -1
- package/build/assets/sdk-section-page-BlFiizlG.js +0 -1
- package/build/assets/secret-form-BB7the8W.js +0 -1
- package/build/assets/secrets-service-ByZVENbp.js +0 -1
- package/build/assets/secrets-settings-B_GpxKW2.js +0 -1
- package/build/assets/settings-C0EWuBtA.js +0 -1
- package/build/assets/settings-dropdown-input-BcwylHs2.js +0 -1
- package/build/assets/settings-index-5w5UW2K3.js +0 -1
- package/build/assets/settings-input-Db-1g8Ql.js +0 -1
- package/build/assets/settings-modal-DfJ3tcJQ.js +0 -1
- package/build/assets/settings-service.api-DJ1r62Zr.js +0 -1
- package/build/assets/settings-switch-CS-dJDmA.js +0 -1
- package/build/assets/shared-conversation-CA5ISEDy.js +0 -1
- package/build/assets/shield-check-D2aCRd16.js +0 -1
- package/build/assets/sidebar-mobile-menu-toggle-C_fb0Jki.js +0 -1
- package/build/assets/sidebar-store-DGqHkVLw.js +0 -1
- package/build/assets/skill-card-pill-row-B27-xyig.js +0 -1
- package/build/assets/skill-scope-B42H-XOc.js +0 -1
- package/build/assets/skills-plugins-tgF8EiXC.js +0 -1
- package/build/assets/skills-settings-BgJ9PaOe.js +0 -1
- package/build/assets/styled-tooltip-C4jf5Fv9.js +0 -1
- package/build/assets/task-list-tab-C5zcaktH.js +0 -1
- package/build/assets/toggle-switch-ChOLXv2n.js +0 -1
- package/build/assets/trash-2-D7K26eDO.js +0 -1
- package/build/assets/trash-D-HYiVYM.js +0 -1
- package/build/assets/triangle-alert-CtdXWHUI.js +0 -1
- package/build/assets/usage-tab-CVDffLPt.js +0 -1
- package/build/assets/use-acp-credential-form-XIQmpX6M.js +0 -1
- package/build/assets/use-activate-agent-profile-BLfmvDiG.js +0 -1
- package/build/assets/use-agent-profiles-Bd9Bvvp1.js +0 -1
- package/build/assets/use-canvas-extensions-Bi693ujJ.js +0 -1
- package/build/assets/use-config-A9QovgXO.js +0 -1
- package/build/assets/use-create-conversation-Dx3l7mFZ.js +0 -1
- package/build/assets/use-create-secret-B9cUFWRG.js +0 -1
- package/build/assets/use-has-permission-B3C8rQmR.js +0 -1
- package/build/assets/use-is-authed-nTBcM7dE.js +0 -1
- package/build/assets/use-llm-configured-BV9nZ1_j.js +0 -1
- package/build/assets/use-llm-profiles-BO-P4Oyo.js +0 -1
- package/build/assets/use-manifest-capabilities-Cw_flwEz.js +0 -1
- package/build/assets/use-onboarding-completion-D8U7k4Qb.js +0 -1
- package/build/assets/use-pinned-home-route-CckOZrmb.js +0 -1
- package/build/assets/use-plugins-marketplace-7i94Zu3Z.js +0 -1
- package/build/assets/use-save-agent-profile-BUjSsDXK.js +0 -1
- package/build/assets/use-settings-DSXLbvBl.js +0 -1
- package/build/assets/use-settings-nav-items-CwRw-CmX.js +0 -16
- package/build/assets/use-tracking-D53y3TH9.js +0 -3
- package/build/assets/useQueries-DlbhlH9I.js +0 -1
- package/build/assets/useQuery-BSTgq1rl.js +0 -1
- package/build/assets/utils-CN5ZfZy1.js +0 -1
- package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~czjee3a3-DqZDXfg2.js +0 -186
- package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~ew9ih1s8-rfV8mQ9m.js +0 -1
- package/build/assets/vendor~root-layout-C9Ju9DQg.js +0 -1
- package/build/assets/vendor~root-layout~conversation-panel~conversation~skills-settings~automations-list~shared-~bovqqk8e-BWir3rJs.js +0 -1
- package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~mcp~automations-list~aut~ibfbmr9f-cDuKr-WD.js +0 -1
- package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~iyia17eu-Chf7vmKB.js +0 -1
- package/build/assets/x-DJdhbdmt.js +0 -1
- package/dist/components/features/conversation-panel/conversation-panel-filter-menu.cjs +0 -2
- package/dist/components/features/conversation-panel/conversation-panel-filter-menu.cjs.map +0 -1
- package/dist/components/features/conversation-panel/conversation-panel-filter-menu.d.ts +0 -35
- package/dist/components/features/conversation-panel/conversation-panel-filter-menu.js +0 -247
- package/dist/components/features/conversation-panel/conversation-panel-filter-menu.js.map +0 -1
- package/dist/hooks/query/use-skills.cjs +0 -2
- package/dist/hooks/query/use-skills.cjs.map +0 -1
- package/dist/hooks/query/use-skills.d.ts +0 -7
- package/dist/hooks/query/use-skills.js +0 -13
- package/dist/hooks/query/use-skills.js.map +0 -1
- package/dist/hooks/use-has-permission.cjs +0 -2
- package/dist/hooks/use-has-permission.cjs.map +0 -1
- package/dist/hooks/use-has-permission.d.ts +0 -1
- package/dist/hooks/use-has-permission.js +0 -8
- package/dist/hooks/use-has-permission.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/eye.cjs +0 -2
- package/dist/node_modules/lucide-react/dist/esm/icons/eye.cjs.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/eye.js +0 -14
- package/dist/node_modules/lucide-react/dist/esm/icons/eye.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sidebar.cjs","names":[],"sources":["../../../../src/components/features/sidebar/sidebar.tsx"],"sourcesContent":["import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { SidebarRailBody } from \"./sidebar-rail-body\";\nimport { getErrorStatus, useSettings } from \"#/hooks/query/use-settings\";\nimport { useConfig } from \"#/hooks/query/use-config\";\nimport { displayErrorToast } from \"#/utils/custom-toast-handlers\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { useNavigation } from \"#/context/navigation-context\";\nimport { useActiveBackendContext } from \"#/contexts/active-backend-context\";\nimport { cn } from \"#/utils/utils\";\nimport { useSidebarMobileNav } from \"./sidebar-mobile-nav-context\";\nimport { useSidebarStore } from \"#/stores/sidebar-store\";\nimport { useClickOutsideElement } from \"#/hooks/use-click-outside-element\";\nimport { useBackendsHealth } from \"#/hooks/query/use-backends-health\";\n// The LLM settings modal is only mounted when the settings query 404s and\n// LLM settings aren't hidden — keep it out of the sidebar's eager graph.\nconst SettingsModal = React.lazy(() =>\n import(\"#/components/shared/modals/settings/settings-modal\").then((m) => ({\n default: m.SettingsModal,\n })),\n);\n\n// Add/Manage backend modals are lifted into the sidebar (instead of living\n// inside BackendSelector) so they survive the collapsed popover unmounting\n// when the user moves the cursor out of the popover toward the modal.\nconst AddBackendModal = React.lazy(() =>\n import(\"#/components/features/backends/add-backend-modal\").then((m) => ({\n default: m.AddBackendModal,\n })),\n);\nconst ManageBackendsModal = React.lazy(() =>\n import(\"#/components/features/backends/manage-backends-modal\").then((m) => ({\n default: m.ManageBackendsModal,\n })),\n);\n\nconst MOBILE_DRAWER_TRANSITION_MS = 250;\n\nexport function Sidebar() {\n const { t } = useTranslation(\"openhands\");\n const { currentPath } = useNavigation();\n const { data: config } = useConfig();\n const {\n data: settings,\n error: settingsError,\n isError: settingsIsError,\n isFetching: isFetchingSettings,\n } = useSettings();\n const { backends, active } = useActiveBackendContext();\n const healthByBackendId = useBackendsHealth(backends);\n const activeBackendHealth = healthByBackendId[active.backend.id];\n const collapsed = useSidebarStore((state) => state.collapsed);\n const setCollapsed = useSidebarStore((state) => state.setCollapsed);\n const [settingsModalIsOpen, setSettingsModalIsOpen] = React.useState(false);\n const [collapsedBackendPopoverOpen, setCollapsedBackendPopoverOpen] =\n React.useState(false);\n const collapsedBackendCloseTimer = React.useRef<ReturnType<\n typeof setTimeout\n > | null>(null);\n // Lifted out of BackendSelector so opening these modals from the\n // collapsed-sidebar popover doesn't lose state when the popover unmounts\n // (cursor moving toward the modal triggers onMouseLeave -> close).\n const [addBackendModalOpen, setAddBackendModalOpen] = React.useState(false);\n const [manageBackendsModalOpen, setManageBackendsModalOpen] =\n React.useState(false);\n const [collapsedRailHovered, setCollapsedRailHovered] = React.useState(false);\n const suppressCollapsedExpandRef = React.useRef(false);\n const [, refreshCollapsedExpandGate] = React.useReducer((n) => n + 1, 0);\n const { isOpen: isMobileNavOpen, close: closeMobileNav } =\n useSidebarMobileNav();\n const [mobileDrawerMounted, setMobileDrawerMounted] = React.useState(false);\n const [mobileDrawerVisible, setMobileDrawerVisible] = React.useState(false);\n const collapsedBackendPopoverRef = useClickOutsideElement<HTMLDivElement>(\n () => setCollapsedBackendPopoverOpen(false),\n );\n const settingsErrorStatus = getErrorStatus(settingsError);\n\n React.useEffect(() => {\n closeMobileNav();\n }, [currentPath, closeMobileNav]);\n\n React.useEffect(() => {\n if (isMobileNavOpen) {\n setMobileDrawerMounted(true);\n const frame = requestAnimationFrame(() => {\n setMobileDrawerVisible(true);\n });\n return () => cancelAnimationFrame(frame);\n }\n\n setMobileDrawerVisible(false);\n const timer = window.setTimeout(() => {\n setMobileDrawerMounted(false);\n }, MOBILE_DRAWER_TRANSITION_MS);\n return () => window.clearTimeout(timer);\n }, [isMobileNavOpen]);\n\n React.useEffect(() => {\n if (!isMobileNavOpen) {\n return undefined;\n }\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n closeMobileNav();\n }\n };\n\n window.addEventListener(\"keydown\", onKeyDown);\n return () => window.removeEventListener(\"keydown\", onKeyDown);\n }, [isMobileNavOpen, closeMobileNav]);\n\n React.useEffect(() => {\n if (currentPath === \"/settings\") {\n setSettingsModalIsOpen(false);\n } else if (\n !isFetchingSettings &&\n settingsIsError &&\n settingsErrorStatus !== 404\n ) {\n // We don't show toast errors for settings in the global error handler\n // because we have a special case for 404 errors\n displayErrorToast(t(I18nKey.SETTINGS$FETCH_ERROR));\n } else if (\n settingsErrorStatus === 404 &&\n !config?.feature_flags?.hide_llm_settings\n ) {\n setSettingsModalIsOpen(true);\n }\n }, [\n currentPath,\n isFetchingSettings,\n settingsIsError,\n settingsErrorStatus,\n config?.feature_flags?.hide_llm_settings,\n t,\n ]);\n\n const collapseToggleLabel = t(\n collapsed ? I18nKey.SIDEBAR$EXPAND : I18nKey.SIDEBAR$COLLAPSE,\n );\n const handleCollapsedRailClick = React.useCallback(\n (event: React.MouseEvent<HTMLElement>) => {\n if (!collapsed) {\n return;\n }\n\n const target = event.target;\n if (!(target instanceof HTMLElement)) {\n return;\n }\n\n // Keep existing behavior for explicit controls/links and only use\n // this as a convenience hit-area for empty collapsed-rail space.\n if (\n target.closest(\n \"a,button,input,textarea,select,[role='button'],[role='link']\",\n )\n ) {\n return;\n }\n\n setCollapsed(false);\n },\n [collapsed, setCollapsed],\n );\n const handleCollapse = React.useCallback(() => {\n setCollapsedRailHovered(false);\n suppressCollapsedExpandRef.current = true;\n refreshCollapsedExpandGate();\n setCollapsed(true);\n window.setTimeout(() => {\n suppressCollapsedExpandRef.current = false;\n refreshCollapsedExpandGate();\n }, 250);\n }, [setCollapsed]);\n const showCollapsedExpandButton =\n collapsed && collapsedRailHovered && !suppressCollapsedExpandRef.current;\n\n const isExtensionsActive =\n currentPath === \"/customize\" ||\n currentPath.startsWith(\"/skills\") ||\n currentPath === \"/plugins\" ||\n currentPath === \"/extensions\" ||\n currentPath === \"/mcp\";\n\n const railBodyProps = {\n collapseToggleLabel,\n onCollapse: handleCollapse,\n onExpand: () => setCollapsed(false),\n showCollapsedExpandButton,\n isExtensionsActive,\n currentPath,\n activeBackendHealth,\n collapsedBackendPopoverOpen,\n setCollapsedBackendPopoverOpen,\n collapsedBackendPopoverRef,\n collapsedBackendCloseTimer,\n onOpenAddBackend: () => setAddBackendModalOpen(true),\n onOpenManageBackends: () => setManageBackendsModalOpen(true),\n };\n\n return (\n <>\n {/* eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions -- the aside acts as a hit-area for the collapsed rail; nested controls handle their own keyboard interactions. */}\n <aside\n aria-label={t(I18nKey.SIDEBAR$NAVIGATION_LABEL)}\n data-collapsed={collapsed ? \"true\" : \"false\"}\n onClick={handleCollapsedRailClick}\n onMouseEnter={() => {\n if (collapsed) {\n setCollapsedRailHovered(true);\n }\n }}\n onMouseLeave={() => {\n setCollapsedRailHovered(false);\n }}\n className={cn(\n \"max-md:hidden flex bg-base flex-col min-h-0 transition-[width,min-width] duration-200\",\n \"md:border-r md:border-[var(--oh-border)] md:h-full\",\n collapsed\n ? \"md:w-[60px] md:min-w-[60px] md:px-2.5\"\n : \"md:w-[300px] md:min-w-[300px] pb-2 md:pl-2.5 md:pr-0\",\n currentPath === \"/\" && \"md:pb-3\",\n )}\n >\n <SidebarRailBody\n collapsed={collapsed}\n showCollapseToggle\n {...railBodyProps}\n />\n </aside>\n\n {mobileDrawerMounted ? (\n <>\n <div\n className={cn(\n \"fixed inset-0 z-40 bg-black/50 md:hidden\",\n \"transition-opacity ease-in-out motion-reduce:transition-none\",\n mobileDrawerVisible\n ? \"opacity-100\"\n : \"pointer-events-none opacity-0\",\n )}\n style={{ transitionDuration: `${MOBILE_DRAWER_TRANSITION_MS}ms` }}\n onClick={closeMobileNav}\n aria-hidden={!mobileDrawerVisible}\n />\n <aside\n aria-label={t(I18nKey.SIDEBAR$NAVIGATION_LABEL)}\n data-testid=\"sidebar-mobile-drawer\"\n aria-hidden={!mobileDrawerVisible}\n className={cn(\n \"fixed inset-y-0 left-0 z-50 flex min-h-0 w-[min(300px,85vw)] flex-col bg-base\",\n \"border-r border-[var(--oh-border)] pb-2 pl-2.5 pr-0 md:hidden\",\n \"transition-transform ease-in-out motion-reduce:transition-none\",\n mobileDrawerVisible ? \"translate-x-0\" : \"-translate-x-full\",\n )}\n style={{ transitionDuration: `${MOBILE_DRAWER_TRANSITION_MS}ms` }}\n >\n <SidebarRailBody\n collapsed={false}\n showCollapseToggle={false}\n showMobileCloseButton\n onCloseMobile={closeMobileNav}\n {...railBodyProps}\n />\n </aside>\n </>\n ) : null}\n\n {settingsModalIsOpen && (\n <React.Suspense fallback={null}>\n <SettingsModal\n settings={settings}\n onClose={() => setSettingsModalIsOpen(false)}\n />\n </React.Suspense>\n )}\n {addBackendModalOpen && (\n <React.Suspense fallback={null}>\n <AddBackendModal onClose={() => setAddBackendModalOpen(false)} />\n </React.Suspense>\n )}\n {manageBackendsModalOpen && (\n <React.Suspense fallback={null}>\n <ManageBackendsModal\n onClose={() => setManageBackendsModalOpen(false)}\n />\n </React.Suspense>\n )}\n </>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sidebar.cjs","names":[],"sources":["../../../../src/components/features/sidebar/sidebar.tsx"],"sourcesContent":["import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { SidebarRailBody } from \"./sidebar-rail-body\";\nimport { getErrorStatus, useSettings } from \"#/hooks/query/use-settings\";\nimport { useConfig } from \"#/hooks/query/use-config\";\nimport { displayErrorToast } from \"#/utils/custom-toast-handlers\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { useNavigation } from \"#/context/navigation-context\";\nimport { useActiveBackendContext } from \"#/contexts/active-backend-context\";\nimport { cn } from \"#/utils/utils\";\nimport { useSidebarMobileNav } from \"./sidebar-mobile-nav-context\";\nimport { useSidebarStore } from \"#/stores/sidebar-store\";\nimport { useClickOutsideElement } from \"#/hooks/use-click-outside-element\";\nimport { useBackendsHealth } from \"#/hooks/query/use-backends-health\";\n// The LLM settings modal is only mounted when the settings query 404s and\n// LLM settings aren't hidden — keep it out of the sidebar's eager graph.\nconst SettingsModal = React.lazy(() =>\n import(\"#/components/shared/modals/settings/settings-modal\").then((m) => ({\n default: m.SettingsModal,\n })),\n);\n\n// Add/Manage backend modals are lifted into the sidebar (instead of living\n// inside BackendSelector) so they survive the collapsed popover unmounting\n// when the user moves the cursor out of the popover toward the modal.\nconst AddBackendModal = React.lazy(() =>\n import(\"#/components/features/backends/add-backend-modal\").then((m) => ({\n default: m.AddBackendModal,\n })),\n);\nconst ManageBackendsModal = React.lazy(() =>\n import(\"#/components/features/backends/manage-backends-modal\").then((m) => ({\n default: m.ManageBackendsModal,\n })),\n);\n\nconst MOBILE_DRAWER_TRANSITION_MS = 250;\n\nexport function Sidebar() {\n const { t } = useTranslation(\"openhands\");\n const { currentPath } = useNavigation();\n const { data: config } = useConfig();\n const {\n data: settings,\n error: settingsError,\n isError: settingsIsError,\n isFetching: isFetchingSettings,\n } = useSettings();\n const { backends, active } = useActiveBackendContext();\n const healthByBackendId = useBackendsHealth(backends);\n const activeBackendHealth = healthByBackendId[active.backend.id];\n const collapsed = useSidebarStore((state) => state.collapsed);\n const setCollapsed = useSidebarStore((state) => state.setCollapsed);\n const [settingsModalIsOpen, setSettingsModalIsOpen] = React.useState(false);\n const [collapsedBackendPopoverOpen, setCollapsedBackendPopoverOpen] =\n React.useState(false);\n const collapsedBackendCloseTimer = React.useRef<ReturnType<\n typeof setTimeout\n > | null>(null);\n // Lifted out of BackendSelector so opening these modals from the\n // collapsed-sidebar popover doesn't lose state when the popover unmounts\n // (cursor moving toward the modal triggers onMouseLeave -> close).\n const [addBackendModalOpen, setAddBackendModalOpen] = React.useState(false);\n const [manageBackendsModalOpen, setManageBackendsModalOpen] =\n React.useState(false);\n const [collapsedRailHovered, setCollapsedRailHovered] = React.useState(false);\n const suppressCollapsedExpandRef = React.useRef(false);\n const [, refreshCollapsedExpandGate] = React.useReducer((n) => n + 1, 0);\n const { isOpen: isMobileNavOpen, close: closeMobileNav } =\n useSidebarMobileNav();\n const [mobileDrawerMounted, setMobileDrawerMounted] = React.useState(false);\n const [mobileDrawerVisible, setMobileDrawerVisible] = React.useState(false);\n const collapsedBackendPopoverRef = useClickOutsideElement<HTMLDivElement>(\n () => setCollapsedBackendPopoverOpen(false),\n );\n const settingsErrorStatus = getErrorStatus(settingsError);\n\n React.useEffect(() => {\n closeMobileNav();\n }, [currentPath, closeMobileNav]);\n\n React.useEffect(() => {\n if (isMobileNavOpen) {\n setMobileDrawerMounted(true);\n const frame = requestAnimationFrame(() => {\n setMobileDrawerVisible(true);\n });\n return () => cancelAnimationFrame(frame);\n }\n\n setMobileDrawerVisible(false);\n const timer = window.setTimeout(() => {\n setMobileDrawerMounted(false);\n }, MOBILE_DRAWER_TRANSITION_MS);\n return () => window.clearTimeout(timer);\n }, [isMobileNavOpen]);\n\n React.useEffect(() => {\n if (!isMobileNavOpen) {\n return undefined;\n }\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n closeMobileNav();\n }\n };\n\n window.addEventListener(\"keydown\", onKeyDown);\n return () => window.removeEventListener(\"keydown\", onKeyDown);\n }, [isMobileNavOpen, closeMobileNav]);\n\n React.useEffect(() => {\n if (currentPath === \"/settings\") {\n setSettingsModalIsOpen(false);\n } else if (\n !isFetchingSettings &&\n settingsIsError &&\n settingsErrorStatus !== 404\n ) {\n // We don't show toast errors for settings in the global error handler\n // because we have a special case for 404 errors\n displayErrorToast(t(I18nKey.SETTINGS$FETCH_ERROR));\n } else if (\n settingsErrorStatus === 404 &&\n !config?.feature_flags?.hide_llm_settings\n ) {\n setSettingsModalIsOpen(true);\n }\n }, [\n currentPath,\n isFetchingSettings,\n settingsIsError,\n settingsErrorStatus,\n config?.feature_flags?.hide_llm_settings,\n t,\n ]);\n\n const collapseToggleLabel = t(\n collapsed ? I18nKey.SIDEBAR$EXPAND : I18nKey.SIDEBAR$COLLAPSE,\n );\n const handleCollapsedRailClick = React.useCallback(\n (event: React.MouseEvent<HTMLElement>) => {\n if (!collapsed) {\n return;\n }\n\n const target = event.target;\n if (!(target instanceof HTMLElement)) {\n return;\n }\n\n // Keep existing behavior for explicit controls/links and only use\n // this as a convenience hit-area for empty collapsed-rail space.\n if (\n target.closest(\n \"a,button,input,textarea,select,[role='button'],[role='link']\",\n )\n ) {\n return;\n }\n\n setCollapsed(false);\n },\n [collapsed, setCollapsed],\n );\n const handleCollapse = React.useCallback(() => {\n setCollapsedRailHovered(false);\n suppressCollapsedExpandRef.current = true;\n refreshCollapsedExpandGate();\n setCollapsed(true);\n window.setTimeout(() => {\n suppressCollapsedExpandRef.current = false;\n refreshCollapsedExpandGate();\n }, 250);\n }, [setCollapsed]);\n const showCollapsedExpandButton =\n collapsed && collapsedRailHovered && !suppressCollapsedExpandRef.current;\n\n const isExtensionsActive =\n currentPath === \"/customize\" ||\n currentPath.startsWith(\"/skills\") ||\n currentPath === \"/plugins\" ||\n currentPath === \"/apps\" ||\n currentPath === \"/mcp\";\n\n const railBodyProps = {\n collapseToggleLabel,\n onCollapse: handleCollapse,\n onExpand: () => setCollapsed(false),\n showCollapsedExpandButton,\n isExtensionsActive,\n currentPath,\n activeBackend: active.backend,\n activeOrgId: active.orgId,\n activeBackendHealth,\n collapsedBackendPopoverOpen,\n setCollapsedBackendPopoverOpen,\n collapsedBackendPopoverRef,\n collapsedBackendCloseTimer,\n onOpenAddBackend: () => setAddBackendModalOpen(true),\n onOpenManageBackends: () => setManageBackendsModalOpen(true),\n };\n\n return (\n <>\n {/* eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions -- the aside acts as a hit-area for the collapsed rail; nested controls handle their own keyboard interactions. */}\n <aside\n aria-label={t(I18nKey.SIDEBAR$NAVIGATION_LABEL)}\n data-collapsed={collapsed ? \"true\" : \"false\"}\n onClick={handleCollapsedRailClick}\n onMouseEnter={() => {\n if (collapsed) {\n setCollapsedRailHovered(true);\n }\n }}\n onMouseLeave={() => {\n setCollapsedRailHovered(false);\n }}\n className={cn(\n \"max-md:hidden flex bg-base flex-col min-h-0 transition-[width,min-width] duration-200\",\n \"md:border-r md:border-[var(--oh-border)] md:h-full\",\n collapsed\n ? \"md:w-[60px] md:min-w-[60px] md:px-2.5\"\n : \"md:w-[300px] md:min-w-[300px] pb-2 md:pl-2.5 md:pr-0\",\n currentPath === \"/\" && \"md:pb-3\",\n )}\n >\n <SidebarRailBody\n collapsed={collapsed}\n showCollapseToggle\n {...railBodyProps}\n />\n </aside>\n\n {mobileDrawerMounted ? (\n <>\n <div\n className={cn(\n \"fixed inset-0 z-40 bg-black/50 md:hidden\",\n \"transition-opacity ease-in-out motion-reduce:transition-none\",\n mobileDrawerVisible\n ? \"opacity-100\"\n : \"pointer-events-none opacity-0\",\n )}\n style={{ transitionDuration: `${MOBILE_DRAWER_TRANSITION_MS}ms` }}\n onClick={closeMobileNav}\n aria-hidden={!mobileDrawerVisible}\n />\n <aside\n aria-label={t(I18nKey.SIDEBAR$NAVIGATION_LABEL)}\n data-testid=\"sidebar-mobile-drawer\"\n aria-hidden={!mobileDrawerVisible}\n className={cn(\n \"fixed inset-y-0 left-0 z-50 flex min-h-0 w-[min(300px,85vw)] flex-col bg-base\",\n \"border-r border-[var(--oh-border)] pb-2 pl-2.5 pr-0 md:hidden\",\n \"transition-transform ease-in-out motion-reduce:transition-none\",\n mobileDrawerVisible ? \"translate-x-0\" : \"-translate-x-full\",\n )}\n style={{ transitionDuration: `${MOBILE_DRAWER_TRANSITION_MS}ms` }}\n >\n <SidebarRailBody\n collapsed={false}\n showCollapseToggle={false}\n showMobileCloseButton\n onCloseMobile={closeMobileNav}\n {...railBodyProps}\n />\n </aside>\n </>\n ) : null}\n\n {settingsModalIsOpen && (\n <React.Suspense fallback={null}>\n <SettingsModal\n settings={settings}\n onClose={() => setSettingsModalIsOpen(false)}\n />\n </React.Suspense>\n )}\n {addBackendModalOpen && (\n <React.Suspense fallback={null}>\n <AddBackendModal onClose={() => setAddBackendModalOpen(false)} />\n </React.Suspense>\n )}\n {manageBackendsModalOpen && (\n <React.Suspense fallback={null}>\n <ManageBackendsModal\n onClose={() => setManageBackendsModalOpen(false)}\n />\n </React.Suspense>\n )}\n </>\n );\n}\n"],"mappings":"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"}
|
|
@@ -6,20 +6,20 @@ import { displayErrorToast as i } from "../../../utils/custom-toast-handlers.js"
|
|
|
6
6
|
import { useActiveBackendContext as a } from "../../../contexts/active-backend-context.js";
|
|
7
7
|
import { getErrorStatus as o, useSettings as s } from "../../../hooks/query/use-settings.js";
|
|
8
8
|
import { useClickOutsideElement as c } from "../../../hooks/use-click-outside-element.js";
|
|
9
|
-
import { useConfig as
|
|
10
|
-
import { useSidebarMobileNav as
|
|
9
|
+
import { useConfig as l } from "../../../hooks/query/use-config.js";
|
|
10
|
+
import { useSidebarMobileNav as ee } from "./sidebar-mobile-nav-context.js";
|
|
11
11
|
import { useBackendsHealth as u } from "../../../hooks/query/use-backends-health.js";
|
|
12
12
|
import { SidebarRailBody as d } from "./sidebar-rail-body.js";
|
|
13
13
|
import { useSidebarStore as f } from "../../../stores/sidebar-store.js";
|
|
14
14
|
import p from "react";
|
|
15
15
|
import { Fragment as m, jsx as h, jsxs as g } from "react/jsx-runtime";
|
|
16
16
|
//#region src/components/features/sidebar/sidebar.tsx
|
|
17
|
-
var
|
|
18
|
-
function
|
|
19
|
-
let { t:
|
|
17
|
+
var te = p.lazy(() => import("../../shared/modals/settings/settings-modal.js").then((e) => ({ default: e.SettingsModal }))), _ = p.lazy(() => import("../backends/add-backend-modal.js").then((e) => ({ default: e.AddBackendModal }))), v = p.lazy(() => import("../backends/manage-backends-modal.js").then((e) => ({ default: e.ManageBackendsModal }))), y = 250;
|
|
18
|
+
function b() {
|
|
19
|
+
let { t: b } = e("openhands"), { currentPath: x } = r(), { data: S } = l(), { data: C, error: w, isError: T, isFetching: E } = s(), { backends: D, active: O } = a(), k = u(D)[O.backend.id], A = f((e) => e.collapsed), j = f((e) => e.setCollapsed), [M, N] = p.useState(!1), [P, F] = p.useState(!1), I = p.useRef(null), [L, R] = p.useState(!1), [z, B] = p.useState(!1), [V, H] = p.useState(!1), U = p.useRef(!1), [, W] = p.useReducer((e) => e + 1, 0), { isOpen: G, close: K } = ee(), [q, J] = p.useState(!1), [Y, X] = p.useState(!1), Z = c(() => F(!1)), Q = o(w);
|
|
20
20
|
p.useEffect(() => {
|
|
21
21
|
K();
|
|
22
|
-
}, [
|
|
22
|
+
}, [x, K]), p.useEffect(() => {
|
|
23
23
|
if (G) {
|
|
24
24
|
J(!0);
|
|
25
25
|
let e = requestAnimationFrame(() => {
|
|
@@ -30,7 +30,7 @@ function x() {
|
|
|
30
30
|
X(!1);
|
|
31
31
|
let e = window.setTimeout(() => {
|
|
32
32
|
J(!1);
|
|
33
|
-
},
|
|
33
|
+
}, y);
|
|
34
34
|
return () => window.clearTimeout(e);
|
|
35
35
|
}, [G]), p.useEffect(() => {
|
|
36
36
|
if (!G) return;
|
|
@@ -39,16 +39,16 @@ function x() {
|
|
|
39
39
|
};
|
|
40
40
|
return window.addEventListener("keydown", e), () => window.removeEventListener("keydown", e);
|
|
41
41
|
}, [G, K]), p.useEffect(() => {
|
|
42
|
-
|
|
42
|
+
x === "/settings" ? N(!1) : !E && T && Q !== 404 ? i(b(t.SETTINGS$FETCH_ERROR)) : Q === 404 && !S?.feature_flags?.hide_llm_settings && N(!0);
|
|
43
43
|
}, [
|
|
44
|
-
|
|
45
|
-
D,
|
|
44
|
+
x,
|
|
46
45
|
E,
|
|
46
|
+
T,
|
|
47
47
|
Q,
|
|
48
|
-
|
|
49
|
-
|
|
48
|
+
S?.feature_flags?.hide_llm_settings,
|
|
49
|
+
b
|
|
50
50
|
]);
|
|
51
|
-
let ne =
|
|
51
|
+
let ne = b(A ? t.SIDEBAR$EXPAND : t.SIDEBAR$COLLAPSE), re = p.useCallback((e) => {
|
|
52
52
|
if (!A) return;
|
|
53
53
|
let t = e.target;
|
|
54
54
|
t instanceof HTMLElement && (t.closest("a,button,input,textarea,select,[role='button'],[role='link']") || j(!1));
|
|
@@ -61,9 +61,11 @@ function x() {
|
|
|
61
61
|
}, [j]),
|
|
62
62
|
onExpand: () => j(!1),
|
|
63
63
|
showCollapsedExpandButton: A && V && !U.current,
|
|
64
|
-
isExtensionsActive:
|
|
65
|
-
currentPath:
|
|
66
|
-
|
|
64
|
+
isExtensionsActive: x === "/customize" || x.startsWith("/skills") || x === "/plugins" || x === "/apps" || x === "/mcp",
|
|
65
|
+
currentPath: x,
|
|
66
|
+
activeBackend: O.backend,
|
|
67
|
+
activeOrgId: O.orgId,
|
|
68
|
+
activeBackendHealth: k,
|
|
67
69
|
collapsedBackendPopoverOpen: P,
|
|
68
70
|
setCollapsedBackendPopoverOpen: F,
|
|
69
71
|
collapsedBackendPopoverRef: Z,
|
|
@@ -73,7 +75,7 @@ function x() {
|
|
|
73
75
|
};
|
|
74
76
|
return /* @__PURE__ */ g(m, { children: [
|
|
75
77
|
/* @__PURE__ */ h("aside", {
|
|
76
|
-
"aria-label":
|
|
78
|
+
"aria-label": b(t.SIDEBAR$NAVIGATION_LABEL),
|
|
77
79
|
"data-collapsed": A ? "true" : "false",
|
|
78
80
|
onClick: re,
|
|
79
81
|
onMouseEnter: () => {
|
|
@@ -82,7 +84,7 @@ function x() {
|
|
|
82
84
|
onMouseLeave: () => {
|
|
83
85
|
H(!1);
|
|
84
86
|
},
|
|
85
|
-
className: n("max-md:hidden flex bg-base flex-col min-h-0 transition-[width,min-width] duration-200", "md:border-r md:border-[var(--oh-border)] md:h-full", A ? "md:w-[60px] md:min-w-[60px] md:px-2.5" : "md:w-[300px] md:min-w-[300px] pb-2 md:pl-2.5 md:pr-0",
|
|
87
|
+
className: n("max-md:hidden flex bg-base flex-col min-h-0 transition-[width,min-width] duration-200", "md:border-r md:border-[var(--oh-border)] md:h-full", A ? "md:w-[60px] md:min-w-[60px] md:px-2.5" : "md:w-[300px] md:min-w-[300px] pb-2 md:pl-2.5 md:pr-0", x === "/" && "md:pb-3"),
|
|
86
88
|
children: /* @__PURE__ */ h(d, {
|
|
87
89
|
collapsed: A,
|
|
88
90
|
showCollapseToggle: !0,
|
|
@@ -91,15 +93,15 @@ function x() {
|
|
|
91
93
|
}),
|
|
92
94
|
q ? /* @__PURE__ */ g(m, { children: [/* @__PURE__ */ h("div", {
|
|
93
95
|
className: n("fixed inset-0 z-40 bg-black/50 md:hidden", "transition-opacity ease-in-out motion-reduce:transition-none", Y ? "opacity-100" : "pointer-events-none opacity-0"),
|
|
94
|
-
style: { transitionDuration: `${
|
|
96
|
+
style: { transitionDuration: `${y}ms` },
|
|
95
97
|
onClick: K,
|
|
96
98
|
"aria-hidden": !Y
|
|
97
99
|
}), /* @__PURE__ */ h("aside", {
|
|
98
|
-
"aria-label":
|
|
100
|
+
"aria-label": b(t.SIDEBAR$NAVIGATION_LABEL),
|
|
99
101
|
"data-testid": "sidebar-mobile-drawer",
|
|
100
102
|
"aria-hidden": !Y,
|
|
101
103
|
className: n("fixed inset-y-0 left-0 z-50 flex min-h-0 w-[min(300px,85vw)] flex-col bg-base", "border-r border-[var(--oh-border)] pb-2 pl-2.5 pr-0 md:hidden", "transition-transform ease-in-out motion-reduce:transition-none", Y ? "translate-x-0" : "-translate-x-full"),
|
|
102
|
-
style: { transitionDuration: `${
|
|
104
|
+
style: { transitionDuration: `${y}ms` },
|
|
103
105
|
children: /* @__PURE__ */ h(d, {
|
|
104
106
|
collapsed: !1,
|
|
105
107
|
showCollapseToggle: !1,
|
|
@@ -110,22 +112,22 @@ function x() {
|
|
|
110
112
|
})] }) : null,
|
|
111
113
|
M && /* @__PURE__ */ h(p.Suspense, {
|
|
112
114
|
fallback: null,
|
|
113
|
-
children: /* @__PURE__ */ h(
|
|
114
|
-
settings:
|
|
115
|
+
children: /* @__PURE__ */ h(te, {
|
|
116
|
+
settings: C,
|
|
115
117
|
onClose: () => N(!1)
|
|
116
118
|
})
|
|
117
119
|
}),
|
|
118
120
|
L && /* @__PURE__ */ h(p.Suspense, {
|
|
119
121
|
fallback: null,
|
|
120
|
-
children: /* @__PURE__ */ h(
|
|
122
|
+
children: /* @__PURE__ */ h(_, { onClose: () => R(!1) })
|
|
121
123
|
}),
|
|
122
124
|
z && /* @__PURE__ */ h(p.Suspense, {
|
|
123
125
|
fallback: null,
|
|
124
|
-
children: /* @__PURE__ */ h(
|
|
126
|
+
children: /* @__PURE__ */ h(v, { onClose: () => B(!1) })
|
|
125
127
|
})
|
|
126
128
|
] });
|
|
127
129
|
}
|
|
128
130
|
//#endregion
|
|
129
|
-
export {
|
|
131
|
+
export { b as Sidebar };
|
|
130
132
|
|
|
131
133
|
//# sourceMappingURL=sidebar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sidebar.js","names":[],"sources":["../../../../src/components/features/sidebar/sidebar.tsx"],"sourcesContent":["import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { SidebarRailBody } from \"./sidebar-rail-body\";\nimport { getErrorStatus, useSettings } from \"#/hooks/query/use-settings\";\nimport { useConfig } from \"#/hooks/query/use-config\";\nimport { displayErrorToast } from \"#/utils/custom-toast-handlers\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { useNavigation } from \"#/context/navigation-context\";\nimport { useActiveBackendContext } from \"#/contexts/active-backend-context\";\nimport { cn } from \"#/utils/utils\";\nimport { useSidebarMobileNav } from \"./sidebar-mobile-nav-context\";\nimport { useSidebarStore } from \"#/stores/sidebar-store\";\nimport { useClickOutsideElement } from \"#/hooks/use-click-outside-element\";\nimport { useBackendsHealth } from \"#/hooks/query/use-backends-health\";\n// The LLM settings modal is only mounted when the settings query 404s and\n// LLM settings aren't hidden — keep it out of the sidebar's eager graph.\nconst SettingsModal = React.lazy(() =>\n import(\"#/components/shared/modals/settings/settings-modal\").then((m) => ({\n default: m.SettingsModal,\n })),\n);\n\n// Add/Manage backend modals are lifted into the sidebar (instead of living\n// inside BackendSelector) so they survive the collapsed popover unmounting\n// when the user moves the cursor out of the popover toward the modal.\nconst AddBackendModal = React.lazy(() =>\n import(\"#/components/features/backends/add-backend-modal\").then((m) => ({\n default: m.AddBackendModal,\n })),\n);\nconst ManageBackendsModal = React.lazy(() =>\n import(\"#/components/features/backends/manage-backends-modal\").then((m) => ({\n default: m.ManageBackendsModal,\n })),\n);\n\nconst MOBILE_DRAWER_TRANSITION_MS = 250;\n\nexport function Sidebar() {\n const { t } = useTranslation(\"openhands\");\n const { currentPath } = useNavigation();\n const { data: config } = useConfig();\n const {\n data: settings,\n error: settingsError,\n isError: settingsIsError,\n isFetching: isFetchingSettings,\n } = useSettings();\n const { backends, active } = useActiveBackendContext();\n const healthByBackendId = useBackendsHealth(backends);\n const activeBackendHealth = healthByBackendId[active.backend.id];\n const collapsed = useSidebarStore((state) => state.collapsed);\n const setCollapsed = useSidebarStore((state) => state.setCollapsed);\n const [settingsModalIsOpen, setSettingsModalIsOpen] = React.useState(false);\n const [collapsedBackendPopoverOpen, setCollapsedBackendPopoverOpen] =\n React.useState(false);\n const collapsedBackendCloseTimer = React.useRef<ReturnType<\n typeof setTimeout\n > | null>(null);\n // Lifted out of BackendSelector so opening these modals from the\n // collapsed-sidebar popover doesn't lose state when the popover unmounts\n // (cursor moving toward the modal triggers onMouseLeave -> close).\n const [addBackendModalOpen, setAddBackendModalOpen] = React.useState(false);\n const [manageBackendsModalOpen, setManageBackendsModalOpen] =\n React.useState(false);\n const [collapsedRailHovered, setCollapsedRailHovered] = React.useState(false);\n const suppressCollapsedExpandRef = React.useRef(false);\n const [, refreshCollapsedExpandGate] = React.useReducer((n) => n + 1, 0);\n const { isOpen: isMobileNavOpen, close: closeMobileNav } =\n useSidebarMobileNav();\n const [mobileDrawerMounted, setMobileDrawerMounted] = React.useState(false);\n const [mobileDrawerVisible, setMobileDrawerVisible] = React.useState(false);\n const collapsedBackendPopoverRef = useClickOutsideElement<HTMLDivElement>(\n () => setCollapsedBackendPopoverOpen(false),\n );\n const settingsErrorStatus = getErrorStatus(settingsError);\n\n React.useEffect(() => {\n closeMobileNav();\n }, [currentPath, closeMobileNav]);\n\n React.useEffect(() => {\n if (isMobileNavOpen) {\n setMobileDrawerMounted(true);\n const frame = requestAnimationFrame(() => {\n setMobileDrawerVisible(true);\n });\n return () => cancelAnimationFrame(frame);\n }\n\n setMobileDrawerVisible(false);\n const timer = window.setTimeout(() => {\n setMobileDrawerMounted(false);\n }, MOBILE_DRAWER_TRANSITION_MS);\n return () => window.clearTimeout(timer);\n }, [isMobileNavOpen]);\n\n React.useEffect(() => {\n if (!isMobileNavOpen) {\n return undefined;\n }\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n closeMobileNav();\n }\n };\n\n window.addEventListener(\"keydown\", onKeyDown);\n return () => window.removeEventListener(\"keydown\", onKeyDown);\n }, [isMobileNavOpen, closeMobileNav]);\n\n React.useEffect(() => {\n if (currentPath === \"/settings\") {\n setSettingsModalIsOpen(false);\n } else if (\n !isFetchingSettings &&\n settingsIsError &&\n settingsErrorStatus !== 404\n ) {\n // We don't show toast errors for settings in the global error handler\n // because we have a special case for 404 errors\n displayErrorToast(t(I18nKey.SETTINGS$FETCH_ERROR));\n } else if (\n settingsErrorStatus === 404 &&\n !config?.feature_flags?.hide_llm_settings\n ) {\n setSettingsModalIsOpen(true);\n }\n }, [\n currentPath,\n isFetchingSettings,\n settingsIsError,\n settingsErrorStatus,\n config?.feature_flags?.hide_llm_settings,\n t,\n ]);\n\n const collapseToggleLabel = t(\n collapsed ? I18nKey.SIDEBAR$EXPAND : I18nKey.SIDEBAR$COLLAPSE,\n );\n const handleCollapsedRailClick = React.useCallback(\n (event: React.MouseEvent<HTMLElement>) => {\n if (!collapsed) {\n return;\n }\n\n const target = event.target;\n if (!(target instanceof HTMLElement)) {\n return;\n }\n\n // Keep existing behavior for explicit controls/links and only use\n // this as a convenience hit-area for empty collapsed-rail space.\n if (\n target.closest(\n \"a,button,input,textarea,select,[role='button'],[role='link']\",\n )\n ) {\n return;\n }\n\n setCollapsed(false);\n },\n [collapsed, setCollapsed],\n );\n const handleCollapse = React.useCallback(() => {\n setCollapsedRailHovered(false);\n suppressCollapsedExpandRef.current = true;\n refreshCollapsedExpandGate();\n setCollapsed(true);\n window.setTimeout(() => {\n suppressCollapsedExpandRef.current = false;\n refreshCollapsedExpandGate();\n }, 250);\n }, [setCollapsed]);\n const showCollapsedExpandButton =\n collapsed && collapsedRailHovered && !suppressCollapsedExpandRef.current;\n\n const isExtensionsActive =\n currentPath === \"/customize\" ||\n currentPath.startsWith(\"/skills\") ||\n currentPath === \"/plugins\" ||\n currentPath === \"/extensions\" ||\n currentPath === \"/mcp\";\n\n const railBodyProps = {\n collapseToggleLabel,\n onCollapse: handleCollapse,\n onExpand: () => setCollapsed(false),\n showCollapsedExpandButton,\n isExtensionsActive,\n currentPath,\n activeBackendHealth,\n collapsedBackendPopoverOpen,\n setCollapsedBackendPopoverOpen,\n collapsedBackendPopoverRef,\n collapsedBackendCloseTimer,\n onOpenAddBackend: () => setAddBackendModalOpen(true),\n onOpenManageBackends: () => setManageBackendsModalOpen(true),\n };\n\n return (\n <>\n {/* eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions -- the aside acts as a hit-area for the collapsed rail; nested controls handle their own keyboard interactions. */}\n <aside\n aria-label={t(I18nKey.SIDEBAR$NAVIGATION_LABEL)}\n data-collapsed={collapsed ? \"true\" : \"false\"}\n onClick={handleCollapsedRailClick}\n onMouseEnter={() => {\n if (collapsed) {\n setCollapsedRailHovered(true);\n }\n }}\n onMouseLeave={() => {\n setCollapsedRailHovered(false);\n }}\n className={cn(\n \"max-md:hidden flex bg-base flex-col min-h-0 transition-[width,min-width] duration-200\",\n \"md:border-r md:border-[var(--oh-border)] md:h-full\",\n collapsed\n ? \"md:w-[60px] md:min-w-[60px] md:px-2.5\"\n : \"md:w-[300px] md:min-w-[300px] pb-2 md:pl-2.5 md:pr-0\",\n currentPath === \"/\" && \"md:pb-3\",\n )}\n >\n <SidebarRailBody\n collapsed={collapsed}\n showCollapseToggle\n {...railBodyProps}\n />\n </aside>\n\n {mobileDrawerMounted ? (\n <>\n <div\n className={cn(\n \"fixed inset-0 z-40 bg-black/50 md:hidden\",\n \"transition-opacity ease-in-out motion-reduce:transition-none\",\n mobileDrawerVisible\n ? \"opacity-100\"\n : \"pointer-events-none opacity-0\",\n )}\n style={{ transitionDuration: `${MOBILE_DRAWER_TRANSITION_MS}ms` }}\n onClick={closeMobileNav}\n aria-hidden={!mobileDrawerVisible}\n />\n <aside\n aria-label={t(I18nKey.SIDEBAR$NAVIGATION_LABEL)}\n data-testid=\"sidebar-mobile-drawer\"\n aria-hidden={!mobileDrawerVisible}\n className={cn(\n \"fixed inset-y-0 left-0 z-50 flex min-h-0 w-[min(300px,85vw)] flex-col bg-base\",\n \"border-r border-[var(--oh-border)] pb-2 pl-2.5 pr-0 md:hidden\",\n \"transition-transform ease-in-out motion-reduce:transition-none\",\n mobileDrawerVisible ? \"translate-x-0\" : \"-translate-x-full\",\n )}\n style={{ transitionDuration: `${MOBILE_DRAWER_TRANSITION_MS}ms` }}\n >\n <SidebarRailBody\n collapsed={false}\n showCollapseToggle={false}\n showMobileCloseButton\n onCloseMobile={closeMobileNav}\n {...railBodyProps}\n />\n </aside>\n </>\n ) : null}\n\n {settingsModalIsOpen && (\n <React.Suspense fallback={null}>\n <SettingsModal\n settings={settings}\n onClose={() => setSettingsModalIsOpen(false)}\n />\n </React.Suspense>\n )}\n {addBackendModalOpen && (\n <React.Suspense fallback={null}>\n <AddBackendModal onClose={() => setAddBackendModalOpen(false)} />\n </React.Suspense>\n )}\n {manageBackendsModalOpen && (\n <React.Suspense fallback={null}>\n <ManageBackendsModal\n onClose={() => setManageBackendsModalOpen(false)}\n />\n </React.Suspense>\n )}\n </>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sidebar.js","names":[],"sources":["../../../../src/components/features/sidebar/sidebar.tsx"],"sourcesContent":["import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { SidebarRailBody } from \"./sidebar-rail-body\";\nimport { getErrorStatus, useSettings } from \"#/hooks/query/use-settings\";\nimport { useConfig } from \"#/hooks/query/use-config\";\nimport { displayErrorToast } from \"#/utils/custom-toast-handlers\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { useNavigation } from \"#/context/navigation-context\";\nimport { useActiveBackendContext } from \"#/contexts/active-backend-context\";\nimport { cn } from \"#/utils/utils\";\nimport { useSidebarMobileNav } from \"./sidebar-mobile-nav-context\";\nimport { useSidebarStore } from \"#/stores/sidebar-store\";\nimport { useClickOutsideElement } from \"#/hooks/use-click-outside-element\";\nimport { useBackendsHealth } from \"#/hooks/query/use-backends-health\";\n// The LLM settings modal is only mounted when the settings query 404s and\n// LLM settings aren't hidden — keep it out of the sidebar's eager graph.\nconst SettingsModal = React.lazy(() =>\n import(\"#/components/shared/modals/settings/settings-modal\").then((m) => ({\n default: m.SettingsModal,\n })),\n);\n\n// Add/Manage backend modals are lifted into the sidebar (instead of living\n// inside BackendSelector) so they survive the collapsed popover unmounting\n// when the user moves the cursor out of the popover toward the modal.\nconst AddBackendModal = React.lazy(() =>\n import(\"#/components/features/backends/add-backend-modal\").then((m) => ({\n default: m.AddBackendModal,\n })),\n);\nconst ManageBackendsModal = React.lazy(() =>\n import(\"#/components/features/backends/manage-backends-modal\").then((m) => ({\n default: m.ManageBackendsModal,\n })),\n);\n\nconst MOBILE_DRAWER_TRANSITION_MS = 250;\n\nexport function Sidebar() {\n const { t } = useTranslation(\"openhands\");\n const { currentPath } = useNavigation();\n const { data: config } = useConfig();\n const {\n data: settings,\n error: settingsError,\n isError: settingsIsError,\n isFetching: isFetchingSettings,\n } = useSettings();\n const { backends, active } = useActiveBackendContext();\n const healthByBackendId = useBackendsHealth(backends);\n const activeBackendHealth = healthByBackendId[active.backend.id];\n const collapsed = useSidebarStore((state) => state.collapsed);\n const setCollapsed = useSidebarStore((state) => state.setCollapsed);\n const [settingsModalIsOpen, setSettingsModalIsOpen] = React.useState(false);\n const [collapsedBackendPopoverOpen, setCollapsedBackendPopoverOpen] =\n React.useState(false);\n const collapsedBackendCloseTimer = React.useRef<ReturnType<\n typeof setTimeout\n > | null>(null);\n // Lifted out of BackendSelector so opening these modals from the\n // collapsed-sidebar popover doesn't lose state when the popover unmounts\n // (cursor moving toward the modal triggers onMouseLeave -> close).\n const [addBackendModalOpen, setAddBackendModalOpen] = React.useState(false);\n const [manageBackendsModalOpen, setManageBackendsModalOpen] =\n React.useState(false);\n const [collapsedRailHovered, setCollapsedRailHovered] = React.useState(false);\n const suppressCollapsedExpandRef = React.useRef(false);\n const [, refreshCollapsedExpandGate] = React.useReducer((n) => n + 1, 0);\n const { isOpen: isMobileNavOpen, close: closeMobileNav } =\n useSidebarMobileNav();\n const [mobileDrawerMounted, setMobileDrawerMounted] = React.useState(false);\n const [mobileDrawerVisible, setMobileDrawerVisible] = React.useState(false);\n const collapsedBackendPopoverRef = useClickOutsideElement<HTMLDivElement>(\n () => setCollapsedBackendPopoverOpen(false),\n );\n const settingsErrorStatus = getErrorStatus(settingsError);\n\n React.useEffect(() => {\n closeMobileNav();\n }, [currentPath, closeMobileNav]);\n\n React.useEffect(() => {\n if (isMobileNavOpen) {\n setMobileDrawerMounted(true);\n const frame = requestAnimationFrame(() => {\n setMobileDrawerVisible(true);\n });\n return () => cancelAnimationFrame(frame);\n }\n\n setMobileDrawerVisible(false);\n const timer = window.setTimeout(() => {\n setMobileDrawerMounted(false);\n }, MOBILE_DRAWER_TRANSITION_MS);\n return () => window.clearTimeout(timer);\n }, [isMobileNavOpen]);\n\n React.useEffect(() => {\n if (!isMobileNavOpen) {\n return undefined;\n }\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n closeMobileNav();\n }\n };\n\n window.addEventListener(\"keydown\", onKeyDown);\n return () => window.removeEventListener(\"keydown\", onKeyDown);\n }, [isMobileNavOpen, closeMobileNav]);\n\n React.useEffect(() => {\n if (currentPath === \"/settings\") {\n setSettingsModalIsOpen(false);\n } else if (\n !isFetchingSettings &&\n settingsIsError &&\n settingsErrorStatus !== 404\n ) {\n // We don't show toast errors for settings in the global error handler\n // because we have a special case for 404 errors\n displayErrorToast(t(I18nKey.SETTINGS$FETCH_ERROR));\n } else if (\n settingsErrorStatus === 404 &&\n !config?.feature_flags?.hide_llm_settings\n ) {\n setSettingsModalIsOpen(true);\n }\n }, [\n currentPath,\n isFetchingSettings,\n settingsIsError,\n settingsErrorStatus,\n config?.feature_flags?.hide_llm_settings,\n t,\n ]);\n\n const collapseToggleLabel = t(\n collapsed ? I18nKey.SIDEBAR$EXPAND : I18nKey.SIDEBAR$COLLAPSE,\n );\n const handleCollapsedRailClick = React.useCallback(\n (event: React.MouseEvent<HTMLElement>) => {\n if (!collapsed) {\n return;\n }\n\n const target = event.target;\n if (!(target instanceof HTMLElement)) {\n return;\n }\n\n // Keep existing behavior for explicit controls/links and only use\n // this as a convenience hit-area for empty collapsed-rail space.\n if (\n target.closest(\n \"a,button,input,textarea,select,[role='button'],[role='link']\",\n )\n ) {\n return;\n }\n\n setCollapsed(false);\n },\n [collapsed, setCollapsed],\n );\n const handleCollapse = React.useCallback(() => {\n setCollapsedRailHovered(false);\n suppressCollapsedExpandRef.current = true;\n refreshCollapsedExpandGate();\n setCollapsed(true);\n window.setTimeout(() => {\n suppressCollapsedExpandRef.current = false;\n refreshCollapsedExpandGate();\n }, 250);\n }, [setCollapsed]);\n const showCollapsedExpandButton =\n collapsed && collapsedRailHovered && !suppressCollapsedExpandRef.current;\n\n const isExtensionsActive =\n currentPath === \"/customize\" ||\n currentPath.startsWith(\"/skills\") ||\n currentPath === \"/plugins\" ||\n currentPath === \"/apps\" ||\n currentPath === \"/mcp\";\n\n const railBodyProps = {\n collapseToggleLabel,\n onCollapse: handleCollapse,\n onExpand: () => setCollapsed(false),\n showCollapsedExpandButton,\n isExtensionsActive,\n currentPath,\n activeBackend: active.backend,\n activeOrgId: active.orgId,\n activeBackendHealth,\n collapsedBackendPopoverOpen,\n setCollapsedBackendPopoverOpen,\n collapsedBackendPopoverRef,\n collapsedBackendCloseTimer,\n onOpenAddBackend: () => setAddBackendModalOpen(true),\n onOpenManageBackends: () => setManageBackendsModalOpen(true),\n };\n\n return (\n <>\n {/* eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions -- the aside acts as a hit-area for the collapsed rail; nested controls handle their own keyboard interactions. */}\n <aside\n aria-label={t(I18nKey.SIDEBAR$NAVIGATION_LABEL)}\n data-collapsed={collapsed ? \"true\" : \"false\"}\n onClick={handleCollapsedRailClick}\n onMouseEnter={() => {\n if (collapsed) {\n setCollapsedRailHovered(true);\n }\n }}\n onMouseLeave={() => {\n setCollapsedRailHovered(false);\n }}\n className={cn(\n \"max-md:hidden flex bg-base flex-col min-h-0 transition-[width,min-width] duration-200\",\n \"md:border-r md:border-[var(--oh-border)] md:h-full\",\n collapsed\n ? \"md:w-[60px] md:min-w-[60px] md:px-2.5\"\n : \"md:w-[300px] md:min-w-[300px] pb-2 md:pl-2.5 md:pr-0\",\n currentPath === \"/\" && \"md:pb-3\",\n )}\n >\n <SidebarRailBody\n collapsed={collapsed}\n showCollapseToggle\n {...railBodyProps}\n />\n </aside>\n\n {mobileDrawerMounted ? (\n <>\n <div\n className={cn(\n \"fixed inset-0 z-40 bg-black/50 md:hidden\",\n \"transition-opacity ease-in-out motion-reduce:transition-none\",\n mobileDrawerVisible\n ? \"opacity-100\"\n : \"pointer-events-none opacity-0\",\n )}\n style={{ transitionDuration: `${MOBILE_DRAWER_TRANSITION_MS}ms` }}\n onClick={closeMobileNav}\n aria-hidden={!mobileDrawerVisible}\n />\n <aside\n aria-label={t(I18nKey.SIDEBAR$NAVIGATION_LABEL)}\n data-testid=\"sidebar-mobile-drawer\"\n aria-hidden={!mobileDrawerVisible}\n className={cn(\n \"fixed inset-y-0 left-0 z-50 flex min-h-0 w-[min(300px,85vw)] flex-col bg-base\",\n \"border-r border-[var(--oh-border)] pb-2 pl-2.5 pr-0 md:hidden\",\n \"transition-transform ease-in-out motion-reduce:transition-none\",\n mobileDrawerVisible ? \"translate-x-0\" : \"-translate-x-full\",\n )}\n style={{ transitionDuration: `${MOBILE_DRAWER_TRANSITION_MS}ms` }}\n >\n <SidebarRailBody\n collapsed={false}\n showCollapseToggle={false}\n showMobileCloseButton\n onCloseMobile={closeMobileNav}\n {...railBodyProps}\n />\n </aside>\n </>\n ) : null}\n\n {settingsModalIsOpen && (\n <React.Suspense fallback={null}>\n <SettingsModal\n settings={settings}\n onClose={() => setSettingsModalIsOpen(false)}\n />\n </React.Suspense>\n )}\n {addBackendModalOpen && (\n <React.Suspense fallback={null}>\n <AddBackendModal onClose={() => setAddBackendModalOpen(false)} />\n </React.Suspense>\n )}\n {manageBackendsModalOpen && (\n <React.Suspense fallback={null}>\n <ManageBackendsModal\n onClose={() => setManageBackendsModalOpen(false)}\n />\n </React.Suspense>\n )}\n </>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require("../../../_virtual/_rolldown/runtime.cjs");const e=require("../../../context/navigation-context.cjs"),t=require("../../../utils/mcp-config.cjs"),n=require("../../../hooks/query/use-
|
|
1
|
+
require("../../../_virtual/_rolldown/runtime.cjs");const e=require("../../../context/navigation-context.cjs"),t=require("../../../utils/mcp-config.cjs"),n=require("../../../hooks/query/use-settings.cjs"),r=require("../../../hooks/query/use-llm-profiles.cjs"),i=require("../../../hooks/use-llm-configured.cjs"),a=require("../../../hooks/query/use-automations.cjs"),o=require("../../../hooks/query/use-automation-health.cjs"),s=require("./sidebar-onboarding-checklist.constants.cjs"),c=require("./sidebar-onboarding-checklist-storage.cjs"),l=require("../../../hooks/query/use-paginated-conversations.cjs"),u=require("../onboarding/use-onboarding-completion.cjs"),d=require("./sidebar-onboarding-checklist-llm-complete.cjs");let f=require("react");function p(e){return Object.keys(t.parseMcpConfig(e)).length>0}function m(){let{isCompleted:t}=u.useOnboardingCompletion(),{currentPath:m}=e.useNavigation(),h=(0,f.useSyncExternalStore)(c.subscribeSidebarOnboardingChecklistDismissed,c.getSidebarOnboardingChecklistDismissedSnapshot,()=>!1),[g,_]=(0,f.useState)(c.readSidebarOnboardingChecklistMinimized),[v,y]=(0,f.useState)(c.readSidebarOnboardingChecklistCustomizeExplored),[b,x]=(0,f.useState)(c.readSidebarOnboardingChecklistSlackJoined),{data:S}=n.useSettings(),{isConfigured:C,isLoading:w}=i.useLlmConfigured(),{data:T,isLoading:E}=r.useLlmProfiles(),{data:D}=l.usePaginatedConversations(1),{data:O}=o.useAutomationHealth(),{data:k}=a.useAutomations({limit:1,offset:0,enabled:O?.status===`ok`});(0,f.useEffect)(()=>{s.isCustomizeChecklistPath(m)&&(v||(c.writeSidebarOnboardingChecklistCustomizeExplored(!0),y(!0)))},[m,v]);let A=(0,f.useMemo)(()=>{let e=(D?.pages[0]?.items.length??0)>0,t=(k?.total??0)>0;return{"configure-llm":d.isConfigureLlmChecklistItemComplete(S,C,w,T,E),"connect-mcp":p(S?.agent_settings?.mcp_config),"start-conversation":e,"schedule-task":t,"customize-agent":v,"join-slack":b}},[k?.total,D?.pages,v,b,C,w,E,T,S,S?.agent_settings?.mcp_config]),j=(0,f.useMemo)(()=>s.SIDEBAR_ONBOARDING_CHECKLIST_ITEM_IDS.map(e=>({id:e,isComplete:A[e]})),[A]),M=j.filter(e=>e.isComplete).length,N=M===j.length,P=t&&!h&&!N;return{items:j,completedCount:M,totalCount:j.length,isVisible:P,isMinimized:g,dismiss:()=>{c.writeSidebarOnboardingChecklistDismissed(!0)},toggleMinimized:()=>{_(e=>{let t=!e;return c.writeSidebarOnboardingChecklistMinimized(t),t})},markJoinSlackComplete:()=>{b||(c.writeSidebarOnboardingChecklistSlackJoined(!0),x(!0))}}}exports.useSidebarOnboardingChecklist=m;
|
|
2
2
|
//# sourceMappingURL=use-sidebar-onboarding-checklist.cjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useNavigation as e } from "../../../context/navigation-context.js";
|
|
2
2
|
import { parseMcpConfig as t } from "../../../utils/mcp-config.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { useSettings as n } from "../../../hooks/query/use-settings.js";
|
|
4
|
+
import { useLlmProfiles as r } from "../../../hooks/query/use-llm-profiles.js";
|
|
5
5
|
import { useLlmConfigured as i } from "../../../hooks/use-llm-configured.js";
|
|
6
6
|
import { useAutomations as a } from "../../../hooks/query/use-automations.js";
|
|
7
7
|
import { useAutomationHealth as o } from "../../../hooks/query/use-automation-health.js";
|
|
@@ -16,7 +16,7 @@ function T(e) {
|
|
|
16
16
|
return Object.keys(t(e)).length > 0;
|
|
17
17
|
}
|
|
18
18
|
function E() {
|
|
19
|
-
let { isCompleted: t } = y(), { currentPath: E } = e(), D = w(p, l, () => !1), [O, k] = C(d), [A, j] = C(u), [M, N] = C(f), { data: P } =
|
|
19
|
+
let { isCompleted: t } = y(), { currentPath: E } = e(), D = w(p, l, () => !1), [O, k] = C(d), [A, j] = C(u), [M, N] = C(f), { data: P } = n(), { isConfigured: F, isLoading: I } = i(), { data: L, isLoading: R } = r(), { data: z } = v(1), { data: B } = o(), { data: V } = a({
|
|
20
20
|
limit: 1,
|
|
21
21
|
offset: 0,
|
|
22
22
|
enabled: B?.status === "ok"
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require("../../../_virtual/_rolldown/runtime.cjs");const e=require("../../../node_modules/react-i18next/dist/es/useTranslation.cjs"),t=require("../../../i18n/declaration.cjs"),n=require("../../../node_modules/lucide-react/dist/esm/icons/blocks.cjs"),r=require("../../../node_modules/lucide-react/dist/esm/icons/external-link.cjs"),i=require("../../../utils/utils.cjs"),a=require("../../../api/backend-registry/active-store.cjs"),o=require("../../../contexts/active-backend-context.cjs"),s=require("../../shared/navigation-link.cjs"),c=require("../../../icons/skills.cjs"),l=require("../sidebar/sidebar-layout.cjs"),u=require("../settings/backend-synced-settings-badge.cjs"),d=require("../../../icons/server-process.cjs");let f=require("react/jsx-runtime");var p=`/skills`,m=new Set([`/plugins`,`/
|
|
1
|
+
require("../../../_virtual/_rolldown/runtime.cjs");const e=require("../../../node_modules/react-i18next/dist/es/useTranslation.cjs"),t=require("../../../i18n/declaration.cjs"),n=require("../../../node_modules/lucide-react/dist/esm/icons/blocks.cjs"),r=require("../../../node_modules/lucide-react/dist/esm/icons/external-link.cjs"),i=require("../../../utils/utils.cjs"),a=require("../../../api/backend-registry/active-store.cjs"),o=require("../../../contexts/active-backend-context.cjs"),s=require("../../shared/navigation-link.cjs"),c=require("../../../icons/skills.cjs"),l=require("../sidebar/sidebar-layout.cjs"),u=require("../settings/backend-synced-settings-badge.cjs"),d=require("../../../icons/server-process.cjs");let f=require("react/jsx-runtime");var p=`/skills`,m=new Set([`/plugins`,`/apps`]),h=[{to:`/mcp`,label:`MCP Servers`,icon:(0,f.jsx)(d.default,{width:16,height:16}),end:!0},{to:`/skills`,label:`Skills`,icon:(0,f.jsx)(c.default,{width:16,height:16,"aria-hidden":`true`}),end:!0},{to:`/plugins`,label:`Plugins`,icon:(0,f.jsxs)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,width:16,height:16,"aria-hidden":`true`,children:[(0,f.jsx)(`path`,{d:`M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z`}),(0,f.jsx)(`path`,{d:`m3.3 7 8.7 5 8.7-5`}),(0,f.jsx)(`path`,{d:`M12 22V12`})]}),end:!0},{to:`/apps`,label:`Apps`,icon:(0,f.jsx)(n.Blocks,{width:16,height:16,"aria-hidden":`true`}),end:!0}];function g(){let{t:n}=e.useTranslation(`openhands`),{active:c}=o.useActiveBackendContext(),{backend:d}=c,g=!a.isNoBackend(d)&&d.kind===`cloud`;return(0,f.jsxs)(`aside`,{"data-testid":`extensions-navbar-desktop`,className:`hidden md:flex md:w-[260px] md:shrink-0 md:flex-col md:gap-2 md:sticky md:top-8 md:self-start`,children:[(0,f.jsx)(`span`,{className:`px-2 text-sm font-normal text-white`,children:n(t.I18nKey.NAV$CUSTOMIZE)}),(0,f.jsx)(`div`,{className:`flex flex-col gap-0.5 pt-0.5`,children:h.filter(e=>!(m.has(e.to)&&g)).map(e=>{let a=e.to===p&&g,o=(0,f.jsx)(`span`,{className:`shrink-0 flex items-center justify-center`,children:e.icon}),c=(0,f.jsx)(`span`,{className:`truncate`,children:a?n(t.I18nKey.SIDEBAR$SKILLS_AND_PLUGINS_CLOUD_LINK):e.label}),u=e.comingSoon&&(0,f.jsx)(`span`,{className:`ml-auto shrink-0 rounded-full border border-white/20 bg-white/5 px-1.5 py-0.5 text-[10px] font-medium text-[var(--oh-text-dim)]`,children:n(t.I18nKey.NAV$COMING_SOON)});if(a){let t=`${d.host.replace(/\/+$/,``)}/settings/skills`;return(0,f.jsxs)(`a`,{"data-testid":`sidebar-extensions-${e.to}`,href:t,target:`_blank`,rel:`noopener noreferrer`,className:i.cn(l.sidebarNavRowClassName(),`truncate`,l.SIDEBAR_ROW_INTERACTIVE_CLASS.idle),children:[o,c,(0,f.jsx)(r.ExternalLink,{className:`ml-auto size-4 shrink-0 text-[var(--oh-muted)]`,"aria-hidden":!0})]},e.to)}return(0,f.jsxs)(s.NavigationLink,{to:e.to,end:e.end,"data-testid":`sidebar-extensions-${e.to}`,className:({isActive:e})=>i.cn(l.sidebarNavRowClassName(),`truncate`,e?l.SIDEBAR_ROW_INTERACTIVE_CLASS.active:l.SIDEBAR_ROW_INTERACTIVE_CLASS.idle),children:[o,c,u]},e.to)})}),(0,f.jsx)(`div`,{className:`px-2 pt-3`,children:(0,f.jsx)(u.BackendSyncedSettingsBadge,{})})]})}exports.ExtensionsNavigation=g;
|
|
2
2
|
//# sourceMappingURL=extensions-navigation.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extensions-navigation.cjs","names":[],"sources":["../../../../src/components/features/skills/extensions-navigation.tsx"],"sourcesContent":["import { useTranslation } from \"react-i18next\";\nimport { Blocks, ExternalLink } from \"lucide-react\";\nimport { NavigationLink } from \"#/components/shared/navigation-link\";\nimport { cn } from \"#/utils/utils\";\nimport SkillsIcon from \"#/icons/skills.svg?react\";\nimport ServerProcessIcon from \"#/icons/server-process.svg?react\";\nimport { BackendSyncedSettingsBadge } from \"#/components/features/settings/backend-synced-settings-badge\";\nimport {\n SIDEBAR_ROW_INTERACTIVE_CLASS,\n sidebarNavRowClassName,\n} from \"#/components/features/sidebar/sidebar-layout\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { useActiveBackendContext } from \"#/contexts/active-backend-context\";\nimport { isNoBackend } from \"#/api/backend-registry/active-store\";\n\n/** Only the Skills item points to a cloud-hosted page today. */\nconst CLOUD_LINKED_EXTENSION_PATH = \"/skills\";\n/** Backend-installed artifacts are not available on Cloud backends yet. */\nconst CLOUD_HIDDEN_EXTENSION_PATHS = new Set([\"/plugins\", \"/
|
|
1
|
+
{"version":3,"file":"extensions-navigation.cjs","names":[],"sources":["../../../../src/components/features/skills/extensions-navigation.tsx"],"sourcesContent":["import { useTranslation } from \"react-i18next\";\nimport { Blocks, ExternalLink } from \"lucide-react\";\nimport { NavigationLink } from \"#/components/shared/navigation-link\";\nimport { cn } from \"#/utils/utils\";\nimport SkillsIcon from \"#/icons/skills.svg?react\";\nimport ServerProcessIcon from \"#/icons/server-process.svg?react\";\nimport { BackendSyncedSettingsBadge } from \"#/components/features/settings/backend-synced-settings-badge\";\nimport {\n SIDEBAR_ROW_INTERACTIVE_CLASS,\n sidebarNavRowClassName,\n} from \"#/components/features/sidebar/sidebar-layout\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { useActiveBackendContext } from \"#/contexts/active-backend-context\";\nimport { isNoBackend } from \"#/api/backend-registry/active-store\";\n\n/** Only the Skills item points to a cloud-hosted page today. */\nconst CLOUD_LINKED_EXTENSION_PATH = \"/skills\";\n/** Backend-installed artifacts are not available on Cloud backends yet. */\nconst CLOUD_HIDDEN_EXTENSION_PATHS = new Set([\"/plugins\", \"/apps\"]);\n\ninterface ExtensionNavItem {\n to: string;\n label: string;\n icon: React.ReactElement;\n end?: boolean;\n comingSoon?: boolean;\n}\n\nexport const EXTENSIONS_NAV_ITEMS: ExtensionNavItem[] = [\n {\n to: \"/mcp\",\n label: \"MCP Servers\",\n icon: <ServerProcessIcon width={16} height={16} />,\n end: true,\n },\n {\n to: \"/skills\",\n label: \"Skills\",\n icon: <SkillsIcon width={16} height={16} aria-hidden=\"true\" />,\n end: true,\n },\n {\n to: \"/plugins\",\n label: \"Plugins\",\n icon: (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n width={16}\n height={16}\n aria-hidden=\"true\"\n >\n <path d=\"M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z\" />\n <path d=\"m3.3 7 8.7 5 8.7-5\" />\n <path d=\"M12 22V12\" />\n </svg>\n ),\n end: true,\n },\n {\n to: \"/apps\",\n label: \"Apps\",\n icon: <Blocks width={16} height={16} aria-hidden=\"true\" />,\n end: true,\n },\n];\n\nexport function ExtensionsNavigation() {\n const { t } = useTranslation(\"openhands\");\n const { active } = useActiveBackendContext();\n const { backend } = active;\n const isCloudBackend = !isNoBackend(backend) && backend.kind === \"cloud\";\n\n return (\n <aside\n data-testid=\"extensions-navbar-desktop\"\n className=\"hidden md:flex md:w-[260px] md:shrink-0 md:flex-col md:gap-2 md:sticky md:top-8 md:self-start\"\n >\n <span className=\"px-2 text-sm font-normal text-white\">\n {t(I18nKey.NAV$CUSTOMIZE)}\n </span>\n <div className=\"flex flex-col gap-0.5 pt-0.5\">\n {EXTENSIONS_NAV_ITEMS.filter(\n (item) =>\n !(CLOUD_HIDDEN_EXTENSION_PATHS.has(item.to) && isCloudBackend),\n ).map((item) => {\n const isCloudSkillsLink =\n item.to === CLOUD_LINKED_EXTENSION_PATH && isCloudBackend;\n const baseRow = (\n <span className=\"shrink-0 flex items-center justify-center\">\n {item.icon}\n </span>\n );\n const label = (\n <span className=\"truncate\">\n {isCloudSkillsLink\n ? t(I18nKey.SIDEBAR$SKILLS_AND_PLUGINS_CLOUD_LINK)\n : item.label}\n </span>\n );\n const comingSoonBadge = item.comingSoon && (\n <span className=\"ml-auto shrink-0 rounded-full border border-white/20 bg-white/5 px-1.5 py-0.5 text-[10px] font-medium text-[var(--oh-text-dim)]\">\n {t(I18nKey.NAV$COMING_SOON)}\n </span>\n );\n\n if (isCloudSkillsLink) {\n const cloudSkillsUrl = `${backend.host.replace(/\\/+$/, \"\")}/settings/skills`;\n return (\n <a\n key={item.to}\n data-testid={`sidebar-extensions-${item.to}`}\n href={cloudSkillsUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={cn(\n sidebarNavRowClassName(),\n \"truncate\",\n SIDEBAR_ROW_INTERACTIVE_CLASS.idle,\n )}\n >\n {baseRow}\n {label}\n <ExternalLink\n className=\"ml-auto size-4 shrink-0 text-[var(--oh-muted)]\"\n aria-hidden\n />\n </a>\n );\n }\n\n return (\n <NavigationLink\n key={item.to}\n to={item.to}\n end={item.end}\n data-testid={`sidebar-extensions-${item.to}`}\n className={({ isActive }) =>\n cn(\n sidebarNavRowClassName(),\n \"truncate\",\n isActive\n ? SIDEBAR_ROW_INTERACTIVE_CLASS.active\n : SIDEBAR_ROW_INTERACTIVE_CLASS.idle,\n )\n }\n >\n {baseRow}\n {label}\n {comingSoonBadge}\n </NavigationLink>\n );\n })}\n </div>\n <div className=\"px-2 pt-3\">\n <BackendSyncedSettingsBadge />\n </div>\n </aside>\n );\n}\n"],"mappings":"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"}
|
|
@@ -12,7 +12,7 @@ import { BackendSyncedSettingsBadge as d } from "../settings/backend-synced-sett
|
|
|
12
12
|
import f from "../../../icons/server-process.js";
|
|
13
13
|
import { jsx as p, jsxs as m } from "react/jsx-runtime";
|
|
14
14
|
//#region src/components/features/skills/extensions-navigation.tsx
|
|
15
|
-
var h = "/skills", g = new Set(["/plugins", "/
|
|
15
|
+
var h = "/skills", g = new Set(["/plugins", "/apps"]), _ = [
|
|
16
16
|
{
|
|
17
17
|
to: "/mcp",
|
|
18
18
|
label: "MCP Servers",
|
|
@@ -55,8 +55,8 @@ var h = "/skills", g = new Set(["/plugins", "/extensions"]), _ = [
|
|
|
55
55
|
end: !0
|
|
56
56
|
},
|
|
57
57
|
{
|
|
58
|
-
to: "/
|
|
59
|
-
label: "
|
|
58
|
+
to: "/apps",
|
|
59
|
+
label: "Apps",
|
|
60
60
|
icon: /* @__PURE__ */ p(n, {
|
|
61
61
|
width: 16,
|
|
62
62
|
height: 16,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extensions-navigation.js","names":[],"sources":["../../../../src/components/features/skills/extensions-navigation.tsx"],"sourcesContent":["import { useTranslation } from \"react-i18next\";\nimport { Blocks, ExternalLink } from \"lucide-react\";\nimport { NavigationLink } from \"#/components/shared/navigation-link\";\nimport { cn } from \"#/utils/utils\";\nimport SkillsIcon from \"#/icons/skills.svg?react\";\nimport ServerProcessIcon from \"#/icons/server-process.svg?react\";\nimport { BackendSyncedSettingsBadge } from \"#/components/features/settings/backend-synced-settings-badge\";\nimport {\n SIDEBAR_ROW_INTERACTIVE_CLASS,\n sidebarNavRowClassName,\n} from \"#/components/features/sidebar/sidebar-layout\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { useActiveBackendContext } from \"#/contexts/active-backend-context\";\nimport { isNoBackend } from \"#/api/backend-registry/active-store\";\n\n/** Only the Skills item points to a cloud-hosted page today. */\nconst CLOUD_LINKED_EXTENSION_PATH = \"/skills\";\n/** Backend-installed artifacts are not available on Cloud backends yet. */\nconst CLOUD_HIDDEN_EXTENSION_PATHS = new Set([\"/plugins\", \"/
|
|
1
|
+
{"version":3,"file":"extensions-navigation.js","names":[],"sources":["../../../../src/components/features/skills/extensions-navigation.tsx"],"sourcesContent":["import { useTranslation } from \"react-i18next\";\nimport { Blocks, ExternalLink } from \"lucide-react\";\nimport { NavigationLink } from \"#/components/shared/navigation-link\";\nimport { cn } from \"#/utils/utils\";\nimport SkillsIcon from \"#/icons/skills.svg?react\";\nimport ServerProcessIcon from \"#/icons/server-process.svg?react\";\nimport { BackendSyncedSettingsBadge } from \"#/components/features/settings/backend-synced-settings-badge\";\nimport {\n SIDEBAR_ROW_INTERACTIVE_CLASS,\n sidebarNavRowClassName,\n} from \"#/components/features/sidebar/sidebar-layout\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { useActiveBackendContext } from \"#/contexts/active-backend-context\";\nimport { isNoBackend } from \"#/api/backend-registry/active-store\";\n\n/** Only the Skills item points to a cloud-hosted page today. */\nconst CLOUD_LINKED_EXTENSION_PATH = \"/skills\";\n/** Backend-installed artifacts are not available on Cloud backends yet. */\nconst CLOUD_HIDDEN_EXTENSION_PATHS = new Set([\"/plugins\", \"/apps\"]);\n\ninterface ExtensionNavItem {\n to: string;\n label: string;\n icon: React.ReactElement;\n end?: boolean;\n comingSoon?: boolean;\n}\n\nexport const EXTENSIONS_NAV_ITEMS: ExtensionNavItem[] = [\n {\n to: \"/mcp\",\n label: \"MCP Servers\",\n icon: <ServerProcessIcon width={16} height={16} />,\n end: true,\n },\n {\n to: \"/skills\",\n label: \"Skills\",\n icon: <SkillsIcon width={16} height={16} aria-hidden=\"true\" />,\n end: true,\n },\n {\n to: \"/plugins\",\n label: \"Plugins\",\n icon: (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n width={16}\n height={16}\n aria-hidden=\"true\"\n >\n <path d=\"M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z\" />\n <path d=\"m3.3 7 8.7 5 8.7-5\" />\n <path d=\"M12 22V12\" />\n </svg>\n ),\n end: true,\n },\n {\n to: \"/apps\",\n label: \"Apps\",\n icon: <Blocks width={16} height={16} aria-hidden=\"true\" />,\n end: true,\n },\n];\n\nexport function ExtensionsNavigation() {\n const { t } = useTranslation(\"openhands\");\n const { active } = useActiveBackendContext();\n const { backend } = active;\n const isCloudBackend = !isNoBackend(backend) && backend.kind === \"cloud\";\n\n return (\n <aside\n data-testid=\"extensions-navbar-desktop\"\n className=\"hidden md:flex md:w-[260px] md:shrink-0 md:flex-col md:gap-2 md:sticky md:top-8 md:self-start\"\n >\n <span className=\"px-2 text-sm font-normal text-white\">\n {t(I18nKey.NAV$CUSTOMIZE)}\n </span>\n <div className=\"flex flex-col gap-0.5 pt-0.5\">\n {EXTENSIONS_NAV_ITEMS.filter(\n (item) =>\n !(CLOUD_HIDDEN_EXTENSION_PATHS.has(item.to) && isCloudBackend),\n ).map((item) => {\n const isCloudSkillsLink =\n item.to === CLOUD_LINKED_EXTENSION_PATH && isCloudBackend;\n const baseRow = (\n <span className=\"shrink-0 flex items-center justify-center\">\n {item.icon}\n </span>\n );\n const label = (\n <span className=\"truncate\">\n {isCloudSkillsLink\n ? t(I18nKey.SIDEBAR$SKILLS_AND_PLUGINS_CLOUD_LINK)\n : item.label}\n </span>\n );\n const comingSoonBadge = item.comingSoon && (\n <span className=\"ml-auto shrink-0 rounded-full border border-white/20 bg-white/5 px-1.5 py-0.5 text-[10px] font-medium text-[var(--oh-text-dim)]\">\n {t(I18nKey.NAV$COMING_SOON)}\n </span>\n );\n\n if (isCloudSkillsLink) {\n const cloudSkillsUrl = `${backend.host.replace(/\\/+$/, \"\")}/settings/skills`;\n return (\n <a\n key={item.to}\n data-testid={`sidebar-extensions-${item.to}`}\n href={cloudSkillsUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={cn(\n sidebarNavRowClassName(),\n \"truncate\",\n SIDEBAR_ROW_INTERACTIVE_CLASS.idle,\n )}\n >\n {baseRow}\n {label}\n <ExternalLink\n className=\"ml-auto size-4 shrink-0 text-[var(--oh-muted)]\"\n aria-hidden\n />\n </a>\n );\n }\n\n return (\n <NavigationLink\n key={item.to}\n to={item.to}\n end={item.end}\n data-testid={`sidebar-extensions-${item.to}`}\n className={({ isActive }) =>\n cn(\n sidebarNavRowClassName(),\n \"truncate\",\n isActive\n ? SIDEBAR_ROW_INTERACTIVE_CLASS.active\n : SIDEBAR_ROW_INTERACTIVE_CLASS.idle,\n )\n }\n >\n {baseRow}\n {label}\n {comingSoonBadge}\n </NavigationLink>\n );\n })}\n </div>\n <div className=\"px-2 pt-3\">\n <BackendSyncedSettingsBadge />\n </div>\n </aside>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;AAgBA,IAAM,IAA8B,WAE9B,IAA+B,IAAI,IAAI,CAAC,YAAY,OAAO,CAAC,GAUrD,IAA2C;CACtD;EACE,IAAI;EACJ,OAAO;EACP,MAAM,kBAAC,GAAD;GAAmB,OAAO;GAAI,QAAQ;EAAK,CAAA;EACjD,KAAK;CACP;CACA;EACE,IAAI;EACJ,OAAO;EACP,MAAM,kBAAC,GAAD;GAAY,OAAO;GAAI,QAAQ;GAAI,eAAY;EAAQ,CAAA;EAC7D,KAAK;CACP;CACA;EACE,IAAI;EACJ,OAAO;EACP,MACE,kBAAC,OAAD;GACE,OAAM;GACN,SAAQ;GACR,MAAK;GACL,QAAO;GACP,aAAY;GACZ,eAAc;GACd,gBAAe;GACf,OAAO;GACP,QAAQ;GACR,eAAY;aAVd;IAYE,kBAAC,QAAD,EAAM,GAAE,yHAA0H,CAAA;IAClI,kBAAC,QAAD,EAAM,GAAE,qBAAsB,CAAA;IAC9B,kBAAC,QAAD,EAAM,GAAE,YAAa,CAAA;GAClB;;EAEP,KAAK;CACP;CACA;EACE,IAAI;EACJ,OAAO;EACP,MAAM,kBAAC,GAAD;GAAQ,OAAO;GAAI,QAAQ;GAAI,eAAY;EAAQ,CAAA;EACzD,KAAK;CACP;AACF;AAEA,SAAgB,IAAuB;CACrC,IAAM,EAAE,SAAM,EAAe,WAAW,GAClC,EAAE,cAAW,EAAwB,GACrC,EAAE,eAAY,GACd,IAAiB,CAAC,EAAY,CAAO,KAAK,EAAQ,SAAS;CAEjE,OACE,kBAAC,SAAD;EACE,eAAY;EACZ,WAAU;YAFZ;GAIE,kBAAC,QAAD;IAAM,WAAU;cACb,EAAE,EAAQ,aAAa;GACpB,CAAA;GACN,kBAAC,OAAD;IAAK,WAAU;cACZ,EAAqB,QACnB,MACC,EAAE,EAA6B,IAAI,EAAK,EAAE,KAAK,EACnD,EAAE,KAAK,MAAS;KACd,IAAM,IACJ,EAAK,OAAO,KAA+B,GACvC,IACJ,kBAAC,QAAD;MAAM,WAAU;gBACb,EAAK;KACF,CAAA,GAEF,IACJ,kBAAC,QAAD;MAAM,WAAU;gBACb,IACG,EAAE,EAAQ,qCAAqC,IAC/C,EAAK;KACL,CAAA,GAEF,IAAkB,EAAK,cAC3B,kBAAC,QAAD;MAAM,WAAU;gBACb,EAAE,EAAQ,eAAe;KACtB,CAAA;KAGR,IAAI,GAAmB;MACrB,IAAM,IAAiB,GAAG,EAAQ,KAAK,QAAQ,QAAQ,EAAE,EAAE;MAC3D,OACE,kBAAC,KAAD;OAEE,eAAa,sBAAsB,EAAK;OACxC,MAAM;OACN,QAAO;OACP,KAAI;OACJ,WAAW,EACT,EAAuB,GACvB,YACA,EAA8B,IAChC;iBAVF;QAYG;QACA;QACD,kBAAC,GAAD;SACE,WAAU;SACV,eAAA;QACD,CAAA;OACA;SAjBI,EAAK,EAiBT;KAEP;KAEA,OACE,kBAAC,GAAD;MAEE,IAAI,EAAK;MACT,KAAK,EAAK;MACV,eAAa,sBAAsB,EAAK;MACxC,YAAY,EAAE,kBACZ,EACE,EAAuB,GACvB,YACA,IACI,EAA8B,SAC9B,EAA8B,IACpC;gBAZJ;OAeG;OACA;OACA;MACa;QAjBT,EAAK,EAiBI;IAEpB,CAAC;GACE,CAAA;GACL,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,GAAD,CAA6B,CAAA;GAC1B,CAAA;EACA;;AAEX"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require("../../_virtual/_rolldown/runtime.cjs"),t=require("../../node_modules/react-i18next/dist/es/I18nextProvider.cjs"),n=require("../../node_modules/@tanstack/react-query/build/modern/QueryClientProvider.cjs"),r=require("../../i18n/index.cjs"),i=require("../../query-client-config.cjs"),a=require("../../contexts/active-backend-context.cjs"),o=require("./telemetry-provider.cjs"),
|
|
1
|
+
const e=require("../../_virtual/_rolldown/runtime.cjs"),t=require("../../node_modules/react-i18next/dist/es/I18nextProvider.cjs"),n=require("../../node_modules/@tanstack/react-query/build/modern/QueryClientProvider.cjs"),r=require("../../i18n/index.cjs"),i=require("../../query-client-config.cjs"),a=require("../../contexts/active-backend-context.cjs"),o=require("../../hooks/query/use-free-models.cjs"),s=require("./telemetry-provider.cjs"),c=require("./agent-server-ui-root.cjs");let l=require("react");l=e.__toESM(l,1);let u=require("react/jsx-runtime");var d={provider:`posthog`};function f(){return o.useHydrateFreeModels(),null}function p({children:e,queryClient:o,analytics:d,i18n:p,className:m,contentClassName:h,style:g,styleOverrides:_,theme:v,withStyleRoot:y=!0}){let b=l.default.useMemo(()=>o??i.getDefaultQueryClient(),[o]),x=l.default.useMemo(()=>p??r.getDefaultI18n(),[p]),S=l.default.useRef(null);S.current||={queryClient:i.getQueryClient(),i18n:r.getI18n()},i.setQueryClient(b),r.setI18n(x),l.default.useEffect(()=>()=>{S.current&&(i.setQueryClient(S.current.queryClient),r.setI18n(S.current.i18n))},[]);let C=(0,u.jsxs)(s.TelemetryProvider,{config:d&&d.provider===`posthog`?{apiKey:d.apiKey,apiHost:d.apiHost,uiHost:d.uiHost}:!1,children:[(0,u.jsx)(f,{}),e]});return(0,u.jsx)(t.I18nextProvider,{i18n:x,defaultNS:r.OPENHANDS_I18N_NAMESPACE,children:(0,u.jsx)(n.QueryClientProvider,{client:b,children:(0,u.jsx)(a.ActiveBackendProvider,{children:y?(0,u.jsx)(c.AgentServerUIRoot,{className:m,contentClassName:h,style:g,styleOverrides:_,theme:v,children:C}):C})})})}exports.AgentServerUIProviders=p,exports.DEFAULT_AGENT_SERVER_ANALYTICS=d;
|
|
2
2
|
//# sourceMappingURL=agent-server-ui-providers.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-server-ui-providers.cjs","names":[],"sources":["../../../src/components/providers/agent-server-ui-providers.tsx"],"sourcesContent":["import React from \"react\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport { I18nextProvider } from \"react-i18next\";\nimport { type i18n as I18nInstance } from \"i18next\";\nimport {\n getDefaultQueryClient,\n getQueryClient,\n setQueryClient,\n} from \"#/query-client-config\";\nimport {\n OPENHANDS_I18N_NAMESPACE,\n getDefaultI18n,\n getI18n,\n setI18n,\n} from \"#/i18n\";\nimport { ActiveBackendProvider } from \"#/contexts/active-backend-context\";\nimport type { TelemetryConfig } from \"#/services/telemetry\";\nimport { TelemetryProvider } from \"./telemetry-provider\";\nimport {\n AgentServerUIRoot,\n type AgentServerUIRootProps,\n} from \"./agent-server-ui-root\";\n\nexport interface AgentServerUIPostHogAnalyticsConfig extends TelemetryConfig {\n provider: \"posthog\";\n}\n\nexport type AgentServerUIAnalyticsConfig =\n | AgentServerUIPostHogAnalyticsConfig\n | false\n | null;\n\nexport const DEFAULT_AGENT_SERVER_ANALYTICS: AgentServerUIAnalyticsConfig = {\n provider: \"posthog\",\n};\n\nexport interface AgentServerUIProvidersProps extends Pick<\n AgentServerUIRootProps,\n \"className\" | \"contentClassName\" | \"style\" | \"styleOverrides\" | \"theme\"\n> {\n children: React.ReactNode;\n queryClient?: QueryClient;\n analytics?: AgentServerUIAnalyticsConfig;\n i18n?: I18nInstance;\n withStyleRoot?: boolean;\n}\n\nexport function AgentServerUIProviders({\n children,\n queryClient,\n analytics,\n i18n,\n className,\n contentClassName,\n style,\n styleOverrides,\n theme,\n withStyleRoot = true,\n}: AgentServerUIProvidersProps) {\n const resolvedQueryClient = React.useMemo(\n () => queryClient ?? getDefaultQueryClient(),\n [queryClient],\n );\n const resolvedI18n = React.useMemo(() => i18n ?? getDefaultI18n(), [i18n]);\n const previousProvidersRef = React.useRef<{\n queryClient: QueryClient;\n i18n: I18nInstance;\n } | null>(null);\n\n if (!previousProvidersRef.current) {\n previousProvidersRef.current = {\n queryClient: getQueryClient(),\n i18n: getI18n(),\n };\n }\n\n setQueryClient(resolvedQueryClient);\n setI18n(resolvedI18n);\n\n React.useEffect(\n () => () => {\n if (previousProvidersRef.current) {\n setQueryClient(previousProvidersRef.current.queryClient);\n setI18n(previousProvidersRef.current.i18n);\n }\n },\n [],\n );\n\n const posthogConfig =\n analytics && analytics.provider === \"posthog\"\n ? {\n apiKey: analytics.apiKey,\n apiHost: analytics.apiHost,\n uiHost: analytics.uiHost,\n }\n : false;\n const content = (\n <TelemetryProvider config={posthogConfig}
|
|
1
|
+
{"version":3,"file":"agent-server-ui-providers.cjs","names":[],"sources":["../../../src/components/providers/agent-server-ui-providers.tsx"],"sourcesContent":["import React from \"react\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport { I18nextProvider } from \"react-i18next\";\nimport { type i18n as I18nInstance } from \"i18next\";\nimport {\n getDefaultQueryClient,\n getQueryClient,\n setQueryClient,\n} from \"#/query-client-config\";\nimport {\n OPENHANDS_I18N_NAMESPACE,\n getDefaultI18n,\n getI18n,\n setI18n,\n} from \"#/i18n\";\nimport { ActiveBackendProvider } from \"#/contexts/active-backend-context\";\nimport { useHydrateFreeModels } from \"#/hooks/query/use-free-models\";\nimport type { TelemetryConfig } from \"#/services/telemetry\";\nimport { TelemetryProvider } from \"./telemetry-provider\";\nimport {\n AgentServerUIRoot,\n type AgentServerUIRootProps,\n} from \"./agent-server-ui-root\";\n\nexport interface AgentServerUIPostHogAnalyticsConfig extends TelemetryConfig {\n provider: \"posthog\";\n}\n\nexport type AgentServerUIAnalyticsConfig =\n | AgentServerUIPostHogAnalyticsConfig\n | false\n | null;\n\nexport const DEFAULT_AGENT_SERVER_ANALYTICS: AgentServerUIAnalyticsConfig = {\n provider: \"posthog\",\n};\n\nexport interface AgentServerUIProvidersProps extends Pick<\n AgentServerUIRootProps,\n \"className\" | \"contentClassName\" | \"style\" | \"styleOverrides\" | \"theme\"\n> {\n children: React.ReactNode;\n queryClient?: QueryClient;\n analytics?: AgentServerUIAnalyticsConfig;\n i18n?: I18nInstance;\n withStyleRoot?: boolean;\n}\n\n/**\n * Fetches the DB-driven free / default model flags once and mirrors them into\n * the free-models store. Rendered inside the query provider so leaf components\n * can read the flags synchronously without a QueryClientProvider in scope.\n */\nfunction FreeModelsHydrator() {\n useHydrateFreeModels();\n return null;\n}\n\nexport function AgentServerUIProviders({\n children,\n queryClient,\n analytics,\n i18n,\n className,\n contentClassName,\n style,\n styleOverrides,\n theme,\n withStyleRoot = true,\n}: AgentServerUIProvidersProps) {\n const resolvedQueryClient = React.useMemo(\n () => queryClient ?? getDefaultQueryClient(),\n [queryClient],\n );\n const resolvedI18n = React.useMemo(() => i18n ?? getDefaultI18n(), [i18n]);\n const previousProvidersRef = React.useRef<{\n queryClient: QueryClient;\n i18n: I18nInstance;\n } | null>(null);\n\n if (!previousProvidersRef.current) {\n previousProvidersRef.current = {\n queryClient: getQueryClient(),\n i18n: getI18n(),\n };\n }\n\n setQueryClient(resolvedQueryClient);\n setI18n(resolvedI18n);\n\n React.useEffect(\n () => () => {\n if (previousProvidersRef.current) {\n setQueryClient(previousProvidersRef.current.queryClient);\n setI18n(previousProvidersRef.current.i18n);\n }\n },\n [],\n );\n\n const posthogConfig =\n analytics && analytics.provider === \"posthog\"\n ? {\n apiKey: analytics.apiKey,\n apiHost: analytics.apiHost,\n uiHost: analytics.uiHost,\n }\n : false;\n const content = (\n <TelemetryProvider config={posthogConfig}>\n <FreeModelsHydrator />\n {children}\n </TelemetryProvider>\n );\n\n const wrappedContent = withStyleRoot ? (\n <AgentServerUIRoot\n className={className}\n contentClassName={contentClassName}\n style={style}\n styleOverrides={styleOverrides}\n theme={theme}\n >\n {content}\n </AgentServerUIRoot>\n ) : (\n content\n );\n\n return (\n <I18nextProvider i18n={resolvedI18n} defaultNS={OPENHANDS_I18N_NAMESPACE}>\n <QueryClientProvider client={resolvedQueryClient}>\n <ActiveBackendProvider>{wrappedContent}</ActiveBackendProvider>\n </QueryClientProvider>\n </I18nextProvider>\n );\n}\n"],"mappings":"6iBAiCA,IAAa,EAA+D,CAC1E,SAAU,SACZ,EAkBA,SAAS,GAAqB,CAE5B,OADA,EAAA,qBAAqB,EACd,IACT,CAEA,SAAgB,EAAuB,CACrC,WACA,cACA,YACA,OACA,YACA,mBACA,QACA,iBACA,QACA,gBAAgB,IACc,CAC9B,IAAM,EAAsB,EAAA,QAAM,YAC1B,GAAe,EAAA,sBAAsB,EAC3C,CAAC,CAAW,CACd,EACM,EAAe,EAAA,QAAM,YAAc,GAAQ,EAAA,eAAe,EAAG,CAAC,CAAI,CAAC,EACnE,EAAuB,EAAA,QAAM,OAGzB,IAAI,EAEd,AACE,EAAqB,UAAU,CAC7B,YAAa,EAAA,eAAe,EAC5B,KAAM,EAAA,QAAQ,CAChB,EAGF,EAAA,eAAe,CAAmB,EAClC,EAAA,QAAQ,CAAY,EAEpB,EAAA,QAAM,kBACQ,CACN,EAAqB,UACvB,EAAA,eAAe,EAAqB,QAAQ,WAAW,EACvD,EAAA,QAAQ,EAAqB,QAAQ,IAAI,EAE7C,EACA,CAAC,CACH,EAUA,IAAM,GACJ,EAAA,EAAA,MAAC,EAAA,kBAAD,CAAmB,OARnB,GAAa,EAAU,WAAa,UAChC,CACE,OAAQ,EAAU,OAClB,QAAS,EAAU,QACnB,OAAQ,EAAU,MACpB,EACA,YAEJ,EACE,EAAA,EAAA,KAAC,EAAD,CAAqB,CAAA,EACpB,CACgB,IAiBrB,OACE,EAAA,EAAA,KAAC,EAAA,gBAAD,CAAiB,KAAM,EAAc,UAAW,EAAA,mCAC9C,EAAA,EAAA,KAAC,EAAA,oBAAD,CAAqB,OAAQ,YAC3B,EAAA,EAAA,KAAC,EAAA,sBAAD,CAAA,SAjBiB,GACrB,EAAA,EAAA,KAAC,EAAA,kBAAD,CACa,YACO,mBACX,QACS,iBACT,iBAEN,CACgB,CAAA,EAEnB,CAMkE,CAAA,CAC3C,CAAA,CACN,CAAA,CAErB"}
|
|
@@ -3,45 +3,49 @@ import { QueryClientProvider as t } from "../../node_modules/@tanstack/react-que
|
|
|
3
3
|
import { OPENHANDS_I18N_NAMESPACE as n, getDefaultI18n as r, getI18n as i, setI18n as a } from "../../i18n/index.js";
|
|
4
4
|
import { getDefaultQueryClient as o, getQueryClient as s, setQueryClient as c } from "../../query-client-config.js";
|
|
5
5
|
import { ActiveBackendProvider as l } from "../../contexts/active-backend-context.js";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import f from "
|
|
9
|
-
import
|
|
6
|
+
import { useHydrateFreeModels as u } from "../../hooks/query/use-free-models.js";
|
|
7
|
+
import { TelemetryProvider as d } from "./telemetry-provider.js";
|
|
8
|
+
import { AgentServerUIRoot as f } from "./agent-server-ui-root.js";
|
|
9
|
+
import p from "react";
|
|
10
|
+
import { jsx as m, jsxs as h } from "react/jsx-runtime";
|
|
10
11
|
//#region src/components/providers/agent-server-ui-providers.tsx
|
|
11
|
-
var
|
|
12
|
-
function
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
var g = { provider: "posthog" };
|
|
13
|
+
function _() {
|
|
14
|
+
return u(), null;
|
|
15
|
+
}
|
|
16
|
+
function v({ children: u, queryClient: g, analytics: v, i18n: y, className: b, contentClassName: x, style: S, styleOverrides: C, theme: w, withStyleRoot: T = !0 }) {
|
|
17
|
+
let E = p.useMemo(() => g ?? o(), [g]), D = p.useMemo(() => y ?? r(), [y]), O = p.useRef(null);
|
|
18
|
+
O.current ||= {
|
|
15
19
|
queryClient: s(),
|
|
16
20
|
i18n: i()
|
|
17
|
-
}, c(
|
|
18
|
-
|
|
21
|
+
}, c(E), a(D), p.useEffect(() => () => {
|
|
22
|
+
O.current && (c(O.current.queryClient), a(O.current.i18n));
|
|
19
23
|
}, []);
|
|
20
|
-
let
|
|
21
|
-
config:
|
|
22
|
-
apiKey:
|
|
23
|
-
apiHost:
|
|
24
|
-
uiHost:
|
|
24
|
+
let k = /* @__PURE__ */ h(d, {
|
|
25
|
+
config: v && v.provider === "posthog" ? {
|
|
26
|
+
apiKey: v.apiKey,
|
|
27
|
+
apiHost: v.apiHost,
|
|
28
|
+
uiHost: v.uiHost
|
|
25
29
|
} : !1,
|
|
26
|
-
children: m
|
|
30
|
+
children: [/* @__PURE__ */ m(_, {}), u]
|
|
27
31
|
});
|
|
28
|
-
return /* @__PURE__ */
|
|
29
|
-
i18n:
|
|
32
|
+
return /* @__PURE__ */ m(e, {
|
|
33
|
+
i18n: D,
|
|
30
34
|
defaultNS: n,
|
|
31
|
-
children: /* @__PURE__ */
|
|
32
|
-
client:
|
|
33
|
-
children: /* @__PURE__ */
|
|
34
|
-
className:
|
|
35
|
-
contentClassName:
|
|
36
|
-
style:
|
|
37
|
-
styleOverrides:
|
|
38
|
-
theme:
|
|
39
|
-
children:
|
|
40
|
-
}) :
|
|
35
|
+
children: /* @__PURE__ */ m(t, {
|
|
36
|
+
client: E,
|
|
37
|
+
children: /* @__PURE__ */ m(l, { children: T ? /* @__PURE__ */ m(f, {
|
|
38
|
+
className: b,
|
|
39
|
+
contentClassName: x,
|
|
40
|
+
style: S,
|
|
41
|
+
styleOverrides: C,
|
|
42
|
+
theme: w,
|
|
43
|
+
children: k
|
|
44
|
+
}) : k })
|
|
41
45
|
})
|
|
42
46
|
});
|
|
43
47
|
}
|
|
44
48
|
//#endregion
|
|
45
|
-
export {
|
|
49
|
+
export { v as AgentServerUIProviders, g as DEFAULT_AGENT_SERVER_ANALYTICS };
|
|
46
50
|
|
|
47
51
|
//# sourceMappingURL=agent-server-ui-providers.js.map
|