@openhands/agent-canvas 1.5.2 → 1.6.1
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/{Trans-DqF_OEZB.js → Trans-52HCczKK.js} +1 -1
- package/build/assets/{acp-providers-DerAmTyY.js → acp-providers-xACMK9ZP.js} +1 -1
- package/build/assets/{active-backend-context-DHhm10VS.js → active-backend-context-Cd1qcZsb.js} +1 -1
- package/build/assets/{add-backend-modal-BoMkMyLB.js → add-backend-modal-5chsfln3.js} +1 -1
- package/build/assets/{agent-profiles-settings-CYPloKYK.js → agent-profiles-settings-BWK4H3kR.js} +1 -1
- package/build/assets/agent-server-compatibility-DMY0CihN.js +1 -0
- package/build/assets/agent-server-conversation-service.api-CI5-xmIX.js +41 -0
- package/build/assets/agent-settings-CMd8-O4f.js +2 -0
- package/build/assets/agent-settings-CdrhQJXX.js +1 -0
- package/build/assets/{alert-banner-Dh51WURQ.js → alert-banner-CLfWuIAX.js} +1 -1
- package/build/assets/api-key-entry-screen-Cc3aC7DZ.js +1 -0
- package/build/assets/app-settings-B-DQcBoB.js +1 -0
- package/build/assets/{automation-detail-Bn8q0AG3.js → automation-detail-BgxBIpyK.js} +2 -2
- package/build/assets/automation-export-Dbur8OHa.js +2 -0
- package/build/assets/automations-list-BWfjizlp.js +1 -0
- package/build/assets/{back-nav-button-DVknCcSP.js → back-nav-button-CaKvsD1E.js} +1 -1
- package/build/assets/backend-form-modal-YcfpuBZo.js +1 -0
- package/build/assets/{backend-synced-settings-badge-yVh6Kf4E.js → backend-synced-settings-badge-BellMmgC.js} +1 -1
- package/build/assets/{base-modal-CIF_785P.js → base-modal-Cw7enAHz.js} +1 -1
- package/build/assets/{brand-button-B1izLAdR.js → brand-button-BulEFHr3.js} +1 -1
- package/build/assets/{browser-DKaeq_sT.js → browser-DfVgUREb.js} +2 -2
- package/build/assets/browser-store-CBqI3tNR.js +1 -0
- package/build/assets/{browser-tab-qb_ftCxW.js → browser-tab-CmIKQB7S.js} +1 -1
- package/build/assets/chat-send-button-BchSSwuD.js +1 -0
- package/build/assets/circle-check-BXbQ5nEH.js +1 -0
- package/build/assets/{circle-plus-check-toggle-DoFIjVE0.js → circle-plus-check-toggle-BhpPjkh9.js} +1 -1
- package/build/assets/client-source-DAUgyJsi.js +1 -0
- package/build/assets/cloud-funnel-analytics-B5OeWh4y.js +1 -0
- package/build/assets/{color-themes-CHizm1xF.js → color-themes-QKMSVfDU.js} +1 -1
- package/build/assets/{combobox-caret-CxZpqoSR.js → combobox-caret-kNZtp53R.js} +1 -1
- package/build/assets/{command-menu-oTvKDU3Y.js → command-menu-tUsn23zy.js} +1 -1
- package/build/assets/{command-store-D8J5LMW1.js → command-store-B0hrIWMN.js} +1 -1
- package/build/assets/{condenser-settings-Q1rHh4Qe.js → condenser-settings-BBizzfIH.js} +1 -1
- package/build/assets/{confirmation-modal-DGBWM2Ls.js → confirmation-modal-108xng7X.js} +1 -1
- package/build/assets/{context-menu-list-item-6psNyl7X.js → context-menu-list-item-BbKfFuN1.js} +1 -1
- package/build/assets/conversation-CTzSrLMq.js +1 -0
- package/build/assets/conversation-CgcXNb-Z.js +90 -0
- package/build/assets/conversation-panel-bscjGQda.js +1 -0
- package/build/assets/{conversation-service.api-D8QU-BiL.js → conversation-service.api-DbBvscJA.js} +1 -1
- package/build/assets/conversation-state-store-C5GagZHT.js +1 -0
- package/build/assets/{conversation-store-LptbOvKa.js → conversation-store-CyVqoa0d.js} +1 -1
- package/build/assets/{conversation-tab-empty-state-CNUmIms2.js → conversation-tab-empty-state-2KYlk5Bh.js} +1 -1
- package/build/assets/{copy-to-clipboard-button-CFzH_NOX.js → copy-to-clipboard-button-C54YRPMg.js} +1 -1
- package/build/assets/declaration-_yumYLEx.js +1 -0
- package/build/assets/{device-verify-WBSjJBLH.js → device-verify-D6FW_KZq.js} +1 -1
- package/build/assets/{dropdown-classes-D3wMJlXT.js → dropdown-classes-9uONlOg1.js} +1 -1
- package/build/assets/{ellipsis-button-CbNnHlIq.js → ellipsis-button-CoaUrKmQ.js} +1 -1
- package/build/assets/{entry.client-Dnnak-Hq.js → entry.client-BJSVzw7V.js} +2 -2
- package/build/assets/{enum-filter-dropdown-JLYv1t8L.js → enum-filter-dropdown-qQzyjk_q.js} +1 -1
- package/build/assets/{environment-switch-overlay-B1PFO8P8.js → environment-switch-overlay-XRWCClLu.js} +1 -1
- package/build/assets/extensions-hub-DUp9sWQY.js +1 -0
- package/build/assets/extensions-navigation-DmkftjAx.js +1 -0
- package/build/assets/file-tUAzhmJ3.js +1 -0
- package/build/assets/files-tab-GV5hwiIM.js +1 -0
- package/build/assets/files-tab-store-DehyITNC.js +1 -0
- package/build/assets/{form-control-classes-CbdN5aO3.js → form-control-classes-BPUnoYyg.js} +1 -1
- package/build/assets/git-provider-icon-DDkru3b_.js +1 -0
- package/build/assets/highlighted-source-view-CYkPZUxr.js +1 -0
- package/build/assets/home-C53WekZ2.js +1 -0
- package/build/assets/home-EAwq8ah2.js +1 -0
- package/build/assets/index-home-kBdZGKtu.js +1 -0
- package/build/assets/install-server-modal-DYk4VP3-.js +1 -0
- package/build/assets/{launch-DlXspDku.js → launch-CIecOy_y.js} +1 -1
- package/build/assets/lesson-plan-BSEUwflx.js +4 -0
- package/build/assets/llm-not-configured-banner-C8uv1PHT.js +27 -0
- package/build/assets/llm-settings-0Bb97NCk.js +1 -0
- package/build/assets/llm-settings-D4toJ90k.js +1 -0
- package/build/assets/{llm-subscription-service-C0zN0-rH.js → llm-subscription-service-BPRw3u3H.js} +1 -1
- package/build/assets/{loading-spinner-BcdnT0mN.js → loading-spinner-BCInDEXB.js} +1 -1
- package/build/assets/manage-backends-modal-Bon32JYr.js +1 -0
- package/build/assets/manifest-ec000ae3.js +1 -0
- package/build/assets/markdown-renderer-BlaJOAI2.js +2 -0
- package/build/assets/mcp-CFIpOkn2.js +9 -0
- package/build/assets/messages-eRPeR4pW.js +40 -0
- package/build/assets/{modal-body-Cc2zp0xb.js → modal-body-Bg9UCeoV.js} +1 -1
- package/build/assets/{modal-classes-3qT9Ap7Q.js → modal-classes-H1KbJkeC.js} +1 -1
- package/build/assets/{modal-close-button-BcIBUdSq.js → modal-close-button-BMLYvo0C.js} +1 -1
- package/build/assets/{model-selector-D51W2Q9b.js → model-selector-BqX2RvEr.js} +1 -1
- package/build/assets/{navigation-link-D8hfwvxI.js → navigation-link-DoJzTCEz.js} +1 -1
- package/build/assets/onboarding-3KO4qE6R.js +1 -0
- package/build/assets/onboarding-modal-D4vqkJeT.js +1 -0
- package/build/assets/{organization-service.api-Da2jiuBS.js → organization-service.api-CvfQugOt.js} +1 -1
- package/build/assets/{path-utils-D53ZHUQU.js → path-utils-DRgexxnX.js} +1 -1
- package/build/assets/{plan-components-BdZXPyZU.js → plan-components-qkMiGs_-.js} +1 -1
- package/build/assets/{planner-tab-BM-pKx0z.js → planner-tab-ZrjiirRr.js} +1 -1
- package/build/assets/{plugins-management-service-DISfOL13.js → plugins-management-service-9qT-r_37.js} +1 -1
- package/build/assets/plus-CzE1b-wl.js +1 -0
- package/build/assets/{profiles-service.api-DWetW2TL.js → profiles-service.api-CRVlrQpT.js} +1 -1
- package/build/assets/{providers-C7lMslCi.js → providers-C2DFGBrf.js} +1 -1
- package/build/assets/{proxy-G4ce0fnQ.js → proxy-DnnDqkwn.js} +1 -1
- package/build/assets/puzzle-IHQnD54C.js +1 -0
- package/build/assets/recommended-automations-launcher-B97vgHuN.js +58 -0
- package/build/assets/refresh-cw-DxbAs3SK.js +1 -0
- package/build/assets/root-BbONavTg.css +1 -0
- package/build/assets/root-D01rpqZU.js +2 -0
- package/build/assets/root-layout-BiHbCIkS.js +2 -0
- package/build/assets/{runtime-waiting-state-CnyVhX4T.js → runtime-waiting-state-CbUV9txX.js} +1 -1
- package/build/assets/{schema-field-CwdqUOnE.js → schema-field-B9-9Ta9u.js} +1 -1
- package/build/assets/sdk-section-page-DG1s25Pr.js +1 -0
- package/build/assets/{sdk-settings-schema-CLR01YIK.js → sdk-settings-schema-B42JFr5Y.js} +1 -1
- package/build/assets/{secrets-service-Ch7RH8eH.js → secrets-service-DvyS6-mV.js} +1 -1
- package/build/assets/secrets-settings-CeSq6cQw.js +1 -0
- package/build/assets/{segmented-toggle-kzwZkLaj.js → segmented-toggle-DRVJBNy0.js} +1 -1
- package/build/assets/settings-Dzo0dJKM.js +1 -0
- package/build/assets/{settings-mQUckT0g.js → settings-HcwfqMjJ.js} +1 -1
- package/build/assets/{settings-dropdown-input-Dhx9ErGd.js → settings-dropdown-input-B6RL_mt0.js} +1 -1
- package/build/assets/settings-index-uAKHyijw.js +1 -0
- package/build/assets/{settings-input-BsgQWS5R.js → settings-input-ZoaAPNQh.js} +1 -1
- package/build/assets/{settings-list-classes-DSJJX99U.js → settings-list-classes-Dr8LgITi.js} +1 -1
- package/build/assets/settings-modal-BVX2G_IT.js +1 -0
- package/build/assets/{settings-service.api-DPTFyRXL.js → settings-service.api-BY7ncxIz.js} +1 -1
- package/build/assets/{settings-switch-Bes8dIlV.js → settings-switch-DUlGnP0B.js} +1 -1
- package/build/assets/{settings-utils-DzCVfiR3.js → settings-utils-kWEEvcdv.js} +1 -1
- package/build/assets/shared-conversation-CV4Rtdz2.js +1 -0
- package/build/assets/{sidebar-layout-Bm7pa3Vk.js → sidebar-layout-BhGooCga.js} +1 -1
- package/build/assets/sidebar-mobile-menu-toggle-BntOJphE.js +1 -0
- package/build/assets/{sidebar-nav-link-CHqyFXwV.js → sidebar-nav-link-DkA1XWV8.js} +1 -1
- package/build/assets/{sidebar-store-uiUXBU1N.js → sidebar-store-CF3b12-m.js} +1 -1
- package/build/assets/{skill-card-pill-row-BPYKQ3IN.js → skill-card-pill-row-_gWe1Tws.js} +1 -1
- package/build/assets/skill-icon-badge-C-zbaXbD.js +1 -0
- package/build/assets/skills-plugins-BwoXKtrR.js +1 -0
- package/build/assets/skills-settings-Crq-fZSt.js +2 -0
- package/build/assets/{styled-tooltip-B14i_Uac.js → styled-tooltip-CdnCJ67u.js} +1 -1
- package/build/assets/syntax-highlighter-CZK2ab-O.js +1 -0
- package/build/assets/{task-list-tab-DyfgG4MC.js → task-list-tab-CONOO9iI.js} +1 -1
- package/build/assets/telemetry-CC32dJYW.js +2 -0
- package/build/assets/{terminal-BDTa1HEr.js → terminal-CTkDpIU-.js} +1 -1
- package/build/assets/{toggle-switch-DX_k418f.js → toggle-switch-yVIzmJLM.js} +1 -1
- package/build/assets/{typography-CzfoD9DY.js → typography-BBVEW0un.js} +1 -1
- package/build/assets/{use-acp-credential-form-DHd_Id-q.js → use-acp-credential-form-CIsp8hJe.js} +1 -1
- package/build/assets/use-activate-agent-profile-BfcTTJJG.js +1 -0
- package/build/assets/{use-active-agent-profile-BMDTXsay.js → use-active-agent-profile-CCeFtmk9.js} +1 -1
- package/build/assets/{use-active-conversation-BbeVgedA.js → use-active-conversation-Badxj8w4.js} +1 -1
- package/build/assets/{use-agent-profiles-Dn_S_Tkz.js → use-agent-profiles-BSWVN6hH.js} +1 -1
- package/build/assets/{use-agent-state-5qM3X30V.js → use-agent-state-BzRrhoPd.js} +1 -1
- package/build/assets/use-backends-health-BsZikyFW.js +1 -0
- package/build/assets/{use-can-manage-org-profiles-CyYqfzeo.js → use-can-manage-org-profiles-Do6mYf6P.js} +1 -1
- package/build/assets/{use-cloud-current-user-id-BwMX7jHW.js → use-cloud-current-user-id-Cx3B_0-w.js} +1 -1
- package/build/assets/use-config-D9zUVw5b.js +1 -0
- package/build/assets/{use-create-conversation-CkKUQVbP.js → use-create-conversation-vvl0kvu7.js} +1 -1
- package/build/assets/{use-create-secret-DEgM0MXZ.js → use-create-secret-CB7Dvd4s.js} +1 -1
- package/build/assets/use-event-store-BlpSUF7N.js +4 -0
- package/build/assets/{use-handle-plan-click-BFcE0Xms.js → use-handle-plan-click-DDZkew9p.js} +1 -1
- package/build/assets/use-is-creating-conversation-fxSzN778.js +1 -0
- package/build/assets/{use-launch-skill-in-chat-DJWEfVc5.js → use-launch-skill-in-chat-D6_n1fs3.js} +1 -1
- package/build/assets/use-llm-profiles-CNQm7HYS.js +1 -0
- package/build/assets/use-plugins-marketplace-CloojomS.js +1 -0
- package/build/assets/use-runtime-is-ready-Bx_4cfar.js +1 -0
- package/build/assets/{use-save-agent-profile-i4FcEP98.js → use-save-agent-profile-Bj7N-1jS.js} +1 -1
- package/build/assets/{use-save-settings-DiDEbIJw.js → use-save-settings-BMsb2wk_.js} +1 -1
- package/build/assets/use-settings-B9XEmh7i.js +1 -0
- package/build/assets/use-settings-nav-items-BGfBS0yL.js +16 -0
- package/build/assets/{use-skills-Blpg2BqE.js → use-skills-CSRbvPle.js} +1 -1
- package/build/assets/{use-task-list-CfisapBW.js → use-task-list-CTIVLrQA.js} +1 -1
- package/build/assets/use-tracking-DjdCssvp.js +1 -0
- package/build/assets/{use-user-conversation-BrN2xeQU.js → use-user-conversation-BCpFn-Ei.js} +1 -1
- package/build/assets/{useTranslation-Cbf5AGg_.js → useTranslation-CHm_6BRr.js} +1 -1
- package/build/assets/{utils-DB9LsAzA.js → utils-CrRpzbM2.js} +1 -1
- package/build/assets/vendor-markdown-DzO4uO_0.js +37 -0
- package/build/assets/{vendor~browser-wXQ-WZEC.js → vendor~browser-Byfuq5J-.js} +1 -1
- package/build/assets/{vendor~browser-tab-CsMb-pta.js → vendor~browser-tab-BLk3qxhw.js} +1 -1
- package/build/assets/{vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~dhilvkxv-eGLBu60s.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~dhilvkxv-DTJ_cjR5.js} +2 -2
- package/build/assets/{vendor~files-tab-B-5fBohe.js → vendor~files-tab-XmnauIZI.js} +1 -1
- package/build/assets/{vendor~launch-_Km3J77E.js → vendor~launch-DeC8QhXQ.js} +1 -1
- package/build/assets/{vendor~root-layout~conversation-panel~conversation~shared-conversation-BrguKXCn.js → vendor~root-layout~conversation-panel~conversation~shared-conversation-DDmLzCzm.js} +1 -1
- package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation-YrfJYTQw.js +1 -0
- package/build/assets/{vendor~root-layout~index-home~home~conversation-panel~conversation~launch~skills-settings~a~j2jlu22h-mC0v44WR.js → vendor~root-layout~index-home~home~conversation-panel~conversation~launch~skills-settings~a~j2jlu22h-DoaS51iW.js} +123 -3
- package/build/assets/{vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation~aler~gfu7qdtz-BOKQkbc6.js → vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation~aler~gfu7qdtz-DEYwoy8u.js} +1 -1
- package/build/assets/vendor~root-layout~index-home~home~mcp~automations-list~onboarding-modal-DZHLw5Sr.js +1 -0
- package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~ftka0fnu-cFNmfAE6.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~ftka0fnu-UJ4BNDJP.js} +1 -1
- package/build/assets/{verification-settings-C8KzAdAX.js → verification-settings-uwOfc16F.js} +1 -1
- package/build/index.html +4 -4
- package/build/locales/ar/openhands.json +38 -4
- package/build/locales/ca/openhands.json +38 -4
- package/build/locales/de/openhands.json +38 -4
- package/build/locales/en/openhands.json +38 -4
- package/build/locales/es/openhands.json +38 -4
- package/build/locales/fr/openhands.json +38 -4
- package/build/locales/it/openhands.json +38 -4
- package/build/locales/ja/openhands.json +38 -4
- package/build/locales/ko-KR/openhands.json +38 -4
- package/build/locales/no/openhands.json +38 -4
- package/build/locales/pt/openhands.json +38 -4
- package/build/locales/tr/openhands.json +38 -4
- package/build/locales/uk/openhands.json +38 -4
- package/build/locales/zh-CN/openhands.json +38 -4
- package/build/locales/zh-TW/openhands.json +38 -4
- package/config/defaults.json +7 -3
- package/dist/api/agent-canvas-updates.cjs +2 -0
- package/dist/api/agent-canvas-updates.cjs.map +1 -0
- package/dist/api/agent-canvas-updates.d.ts +7 -0
- package/dist/api/agent-canvas-updates.js +19 -0
- package/dist/api/agent-canvas-updates.js.map +1 -0
- package/dist/api/agent-server-adapter.cjs +1 -1
- package/dist/api/agent-server-adapter.cjs.map +1 -1
- package/dist/api/agent-server-adapter.d.ts +3 -0
- package/dist/api/agent-server-adapter.js +1 -0
- package/dist/api/agent-server-adapter.js.map +1 -1
- package/dist/api/agent-server-compatibility.cjs +1 -1
- package/dist/api/agent-server-compatibility.cjs.map +1 -1
- package/dist/api/agent-server-compatibility.d.ts +5 -0
- package/dist/api/agent-server-compatibility.js +24 -15
- package/dist/api/agent-server-compatibility.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.js +11 -8
- package/dist/api/agent-server-config.js.map +1 -1
- package/dist/api/automation-service/automation-service.api.cjs +2 -0
- package/dist/api/automation-service/automation-service.api.cjs.map +1 -0
- package/dist/api/automation-service/automation-service.api.d.ts +3 -0
- package/dist/api/automation-service/automation-service.api.js +283 -0
- package/dist/api/automation-service/automation-service.api.js.map +1 -0
- package/dist/api/client-source.cjs +1 -1
- package/dist/api/client-source.cjs.map +1 -1
- package/dist/api/client-source.d.ts +3 -0
- package/dist/api/client-source.js +4 -4
- package/dist/api/client-source.js.map +1 -1
- package/dist/api/cloud/settings-service.api.cjs.map +1 -1
- package/dist/api/cloud/settings-service.api.js.map +1 -1
- package/dist/api/conversation-service/agent-server-conversation-service.api.cjs +1 -1
- package/dist/api/conversation-service/agent-server-conversation-service.api.cjs.map +1 -1
- package/dist/api/conversation-service/agent-server-conversation-service.api.js +111 -109
- package/dist/api/conversation-service/agent-server-conversation-service.api.js.map +1 -1
- package/dist/api/mcp-health/mcp-health-store.cjs +2 -0
- package/dist/api/mcp-health/mcp-health-store.cjs.map +1 -0
- package/dist/api/mcp-health/mcp-health-store.d.ts +22 -0
- package/dist/api/mcp-health/mcp-health-store.js +45 -0
- package/dist/api/mcp-health/mcp-health-store.js.map +1 -0
- package/dist/api/mcp-health/probe-mcp-server-health.cjs +2 -0
- package/dist/api/mcp-health/probe-mcp-server-health.cjs.map +1 -0
- package/dist/api/mcp-health/probe-mcp-server-health.d.ts +31 -0
- package/dist/api/mcp-health/probe-mcp-server-health.js +57 -0
- package/dist/api/mcp-health/probe-mcp-server-health.js.map +1 -0
- package/dist/api/mcp-service/mcp-service.api.cjs +1 -1
- package/dist/api/mcp-service/mcp-service.api.cjs.map +1 -1
- package/dist/api/mcp-service/mcp-service.api.js +66 -46
- package/dist/api/mcp-service/mcp-service.api.js.map +1 -1
- package/dist/api/plugins-management-service.cjs.map +1 -1
- package/dist/api/plugins-management-service.d.ts +6 -1
- package/dist/api/plugins-management-service.js.map +1 -1
- package/dist/api/plugins-service.d.ts +30 -2
- package/dist/api/secrets-service.cjs +1 -1
- package/dist/api/secrets-service.cjs.map +1 -1
- package/dist/api/secrets-service.d.ts +6 -6
- package/dist/api/secrets-service.js +8 -3
- package/dist/api/secrets-service.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 +1 -1
- package/dist/api/settings-service/settings-service.api.js +1 -0
- package/dist/api/settings-service/settings-service.api.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/features/backends/backend-form-modal.cjs +1 -1
- package/dist/components/features/backends/backend-form-modal.cjs.map +1 -1
- package/dist/components/features/backends/backend-form-modal.d.ts +4 -1
- package/dist/components/features/backends/backend-form-modal.js +15 -16
- package/dist/components/features/backends/backend-form-modal.js.map +1 -1
- 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 +103 -102
- 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 +85 -73
- package/dist/components/features/backends/manage-backends-modal.js.map +1 -1
- package/dist/components/features/chat/chat-interface.cjs +2 -2
- package/dist/components/features/chat/chat-interface.cjs.map +1 -1
- package/dist/components/features/chat/chat-interface.js +131 -129
- package/dist/components/features/chat/chat-interface.js.map +1 -1
- 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/skill-install-restart-banner.cjs +2 -0
- package/dist/components/features/chat/skill-install-restart-banner.cjs.map +1 -0
- package/dist/components/features/chat/skill-install-restart-banner.d.ts +11 -0
- package/dist/components/features/chat/skill-install-restart-banner.js +63 -0
- package/dist/components/features/chat/skill-install-restart-banner.js.map +1 -0
- package/dist/components/features/conversation/right-panel-toggle.cjs +1 -1
- package/dist/components/features/conversation/right-panel-toggle.cjs.map +1 -1
- package/dist/components/features/conversation/right-panel-toggle.js +1 -1
- package/dist/components/features/conversation/right-panel-toggle.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-panel.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-panel.js +10 -10
- package/dist/components/features/mcp-page/custom-server-editor.cjs +1 -1
- package/dist/components/features/mcp-page/custom-server-editor.cjs.map +1 -1
- package/dist/components/features/mcp-page/custom-server-editor.js +78 -77
- package/dist/components/features/mcp-page/custom-server-editor.js.map +1 -1
- package/dist/components/features/mcp-page/install-server-modal.cjs +1 -1
- package/dist/components/features/mcp-page/install-server-modal.cjs.map +1 -1
- package/dist/components/features/mcp-page/install-server-modal.d.ts +4 -1
- package/dist/components/features/mcp-page/install-server-modal.js +135 -136
- package/dist/components/features/mcp-page/install-server-modal.js.map +1 -1
- package/dist/components/features/mcp-page/installed-server-card.cjs +1 -1
- package/dist/components/features/mcp-page/installed-server-card.cjs.map +1 -1
- package/dist/components/features/mcp-page/installed-server-card.js +40 -34
- package/dist/components/features/mcp-page/installed-server-card.js.map +1 -1
- package/dist/components/features/mcp-page/mcp-server-health.cjs +2 -0
- package/dist/components/features/mcp-page/mcp-server-health.cjs.map +1 -0
- package/dist/components/features/mcp-page/mcp-server-health.d.ts +18 -0
- package/dist/components/features/mcp-page/mcp-server-health.js +117 -0
- package/dist/components/features/mcp-page/mcp-server-health.js.map +1 -0
- package/dist/components/features/plugins/build-plugins-view-model.d.ts +10 -1
- package/dist/components/features/plugins/plugin-files-section.d.ts +13 -0
- package/dist/components/features/settings/agent-canvas-update-card.cjs +2 -0
- package/dist/components/features/settings/agent-canvas-update-card.cjs.map +1 -0
- package/dist/components/features/settings/agent-canvas-update-card.d.ts +7 -0
- package/dist/components/features/settings/agent-canvas-update-card.js +170 -0
- package/dist/components/features/settings/agent-canvas-update-card.js.map +1 -0
- package/dist/components/features/settings/integrations-settings-link.cjs +2 -0
- package/dist/components/features/settings/integrations-settings-link.cjs.map +1 -0
- package/dist/components/features/settings/integrations-settings-link.d.ts +5 -0
- package/dist/components/features/settings/integrations-settings-link.js +41 -0
- package/dist/components/features/settings/integrations-settings-link.js.map +1 -0
- 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 +1 -1
- package/dist/components/features/settings/settings-desktop-sidebar.cjs +1 -1
- package/dist/components/features/settings/settings-desktop-sidebar.cjs.map +1 -1
- package/dist/components/features/settings/settings-desktop-sidebar.js +31 -21
- package/dist/components/features/settings/settings-desktop-sidebar.js.map +1 -1
- package/dist/components/features/settings/settings-mobile-drawer.cjs +1 -1
- package/dist/components/features/settings/settings-mobile-drawer.cjs.map +1 -1
- package/dist/components/features/settings/settings-mobile-drawer.js +40 -30
- package/dist/components/features/settings/settings-mobile-drawer.js.map +1 -1
- 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 +54 -33
- package/dist/components/features/skills/extensions-navigation.js.map +1 -1
- package/dist/config/defaults.cjs +1 -1
- package/dist/config/defaults.cjs.map +1 -1
- package/dist/config/defaults.js +7 -3
- package/dist/config/defaults.js.map +1 -1
- package/dist/constants/acp-providers.cjs.map +1 -1
- package/dist/constants/acp-providers.js.map +1 -1
- package/dist/contexts/conversation-websocket-context.cjs +2 -2
- package/dist/contexts/conversation-websocket-context.cjs.map +1 -1
- package/dist/contexts/conversation-websocket-context.js +169 -166
- package/dist/contexts/conversation-websocket-context.js.map +1 -1
- package/dist/hooks/mutation/use-delete-llm-profile.cjs +1 -1
- package/dist/hooks/mutation/use-delete-llm-profile.js +1 -0
- package/dist/hooks/mutation/use-delete-mcp-server.cjs +1 -1
- package/dist/hooks/mutation/use-delete-mcp-server.cjs.map +1 -1
- package/dist/hooks/mutation/use-delete-mcp-server.js +8 -6
- package/dist/hooks/mutation/use-delete-mcp-server.js.map +1 -1
- package/dist/hooks/mutation/use-rename-llm-profile.cjs +1 -1
- package/dist/hooks/mutation/use-rename-llm-profile.js +1 -0
- 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-update-mcp-server.cjs +1 -1
- package/dist/hooks/mutation/use-update-mcp-server.cjs.map +1 -1
- package/dist/hooks/mutation/use-update-mcp-server.js +11 -9
- package/dist/hooks/mutation/use-update-mcp-server.js.map +1 -1
- 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 +4 -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 +2 -0
- package/dist/hooks/query/use-automation-sdk-version.cjs.map +1 -0
- package/dist/hooks/query/use-automation-sdk-version.d.ts +3 -0
- package/dist/hooks/query/use-automation-sdk-version.js +63 -0
- package/dist/hooks/query/use-automation-sdk-version.js.map +1 -0
- package/dist/hooks/query/use-latest-agent-canvas-version.cjs +2 -0
- package/dist/hooks/query/use-latest-agent-canvas-version.cjs.map +1 -0
- package/dist/hooks/query/use-latest-agent-canvas-version.d.ts +10 -0
- package/dist/hooks/query/use-latest-agent-canvas-version.js +19 -0
- package/dist/hooks/query/use-latest-agent-canvas-version.js.map +1 -0
- package/dist/hooks/query/use-plugin-file-content.d.ts +7 -0
- package/dist/hooks/query/use-resolved-workspaces.cjs +1 -1
- package/dist/hooks/query/use-resolved-workspaces.cjs.map +1 -1
- package/dist/hooks/query/use-resolved-workspaces.js +25 -26
- package/dist/hooks/query/use-resolved-workspaces.js.map +1 -1
- package/dist/hooks/query/use-search-subdirs.cjs +1 -1
- package/dist/hooks/query/use-search-subdirs.cjs.map +1 -1
- package/dist/hooks/query/use-search-subdirs.d.ts +5 -0
- package/dist/hooks/query/use-search-subdirs.js +16 -4
- package/dist/hooks/query/use-search-subdirs.js.map +1 -1
- package/dist/hooks/use-device-flow.cjs +1 -1
- package/dist/hooks/use-device-flow.js +6 -6
- package/dist/hooks/use-llm-configured.cjs +1 -1
- package/dist/hooks/use-llm-configured.js +3 -3
- package/dist/hooks/use-mcp-server-health.cjs +2 -0
- package/dist/hooks/use-mcp-server-health.cjs.map +1 -0
- package/dist/hooks/use-mcp-server-health.d.ts +11 -0
- package/dist/hooks/use-mcp-server-health.js +18 -0
- package/dist/hooks/use-mcp-server-health.js.map +1 -0
- package/dist/hooks/use-skill-installs.cjs +2 -0
- package/dist/hooks/use-skill-installs.cjs.map +1 -0
- package/dist/hooks/use-skill-installs.d.ts +10 -0
- package/dist/hooks/use-skill-installs.js +21 -0
- package/dist/hooks/use-skill-installs.js.map +1 -0
- package/dist/hooks/use-tracking.cjs +1 -1
- package/dist/hooks/use-tracking.cjs.map +1 -1
- package/dist/hooks/use-tracking.d.ts +3 -3
- package/dist/hooks/use-tracking.js +67 -52
- package/dist/hooks/use-tracking.js.map +1 -1
- package/dist/i18n/declaration.cjs +1 -1
- package/dist/i18n/declaration.cjs.map +1 -1
- package/dist/i18n/declaration.d.ts +35 -1
- package/dist/i18n/declaration.js +1 -1
- package/dist/i18n/declaration.js.map +1 -1
- package/dist/i18n/translation.cjs +3 -3
- package/dist/i18n/translation.cjs.map +1 -1
- package/dist/i18n/translation.js +623 -45
- package/dist/i18n/translation.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -2
- package/dist/lib/index.cjs +1 -1
- package/dist/lib/index.d.ts +0 -1
- package/dist/lib/index.js +0 -1
- package/dist/locales/ar/openhands.json +38 -4
- package/dist/locales/ca/openhands.json +38 -4
- package/dist/locales/de/openhands.json +38 -4
- package/dist/locales/en/openhands.json +38 -4
- package/dist/locales/es/openhands.json +38 -4
- package/dist/locales/fr/openhands.json +38 -4
- package/dist/locales/it/openhands.json +38 -4
- package/dist/locales/ja/openhands.json +38 -4
- package/dist/locales/ko-KR/openhands.json +38 -4
- package/dist/locales/no/openhands.json +38 -4
- package/dist/locales/pt/openhands.json +38 -4
- package/dist/locales/tr/openhands.json +38 -4
- package/dist/locales/uk/openhands.json +38 -4
- package/dist/locales/zh-CN/openhands.json +38 -4
- package/dist/locales/zh-TW/openhands.json +38 -4
- package/dist/node_modules/@openhands/extensions/integrations/catalog/atlassian-rovo.cjs +2 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/atlassian-rovo.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/atlassian-rovo.js +44 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/atlassian-rovo.js.map +1 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/atlassian.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/atlassian.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/atlassian.js +13 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/atlassian.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/github.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/github.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/github.js +21 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/github.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/linear.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/linear.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/linear.js +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/linear.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-outlook.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-outlook.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-outlook.js +13 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-outlook.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-teams.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-teams.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-teams.js +13 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-teams.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/notion.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/notion.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/notion.js +13 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/notion.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/onedrive.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/onedrive.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/onedrive.js +13 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/onedrive.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/sharepoint.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/sharepoint.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/sharepoint.js +13 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/sharepoint.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/slack.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/slack.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/slack.js +16 -2
- package/dist/node_modules/@openhands/extensions/integrations/catalog/slack.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/vanta.cjs +2 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/vanta.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/vanta.js +46 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/vanta.js.map +1 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog-index.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog-index.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog-index.js +74 -70
- package/dist/node_modules/@openhands/extensions/integrations/catalog-index.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/skills/index.cjs +123 -3
- package/dist/node_modules/@openhands/extensions/skills/index.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/skills/index.js +7 -1
- package/dist/node_modules/@openhands/extensions/skills/index.js.map +1 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.js +9 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/info.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/info.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/info.js +21 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/info.js.map +1 -0
- package/dist/package.cjs +1 -1
- package/dist/package.cjs.map +1 -1
- package/dist/package.js +10 -3
- package/dist/package.js.map +1 -1
- package/dist/routes/app-settings.cjs +1 -1
- package/dist/routes/app-settings.cjs.map +1 -1
- package/dist/routes/app-settings.js +113 -67
- package/dist/routes/app-settings.js.map +1 -1
- package/dist/routes/mcp.cjs +1 -1
- package/dist/routes/mcp.cjs.map +1 -1
- package/dist/routes/mcp.js +1 -0
- package/dist/routes/mcp.js.map +1 -1
- package/dist/services/cloud-funnel-analytics.cjs +1 -1
- package/dist/services/cloud-funnel-analytics.cjs.map +1 -1
- package/dist/services/cloud-funnel-analytics.d.ts +2 -2
- package/dist/services/cloud-funnel-analytics.js +18 -16
- package/dist/services/cloud-funnel-analytics.js.map +1 -1
- package/dist/services/settings.cjs +1 -1
- package/dist/services/settings.cjs.map +1 -1
- package/dist/services/settings.js +1 -0
- package/dist/services/settings.js.map +1 -1
- package/dist/services/telemetry-context.cjs +2 -0
- package/dist/services/telemetry-context.cjs.map +1 -0
- package/dist/services/telemetry-context.d.ts +17 -0
- package/dist/services/telemetry-context.js +27 -0
- package/dist/services/telemetry-context.js.map +1 -0
- package/dist/services/telemetry.cjs +1 -1
- package/dist/services/telemetry.cjs.map +1 -1
- package/dist/services/telemetry.d.ts +7 -5
- package/dist/services/telemetry.js +132 -123
- package/dist/services/telemetry.js.map +1 -1
- package/dist/stores/skill-install-banner-store.cjs +2 -0
- package/dist/stores/skill-install-banner-store.cjs.map +1 -0
- package/dist/stores/skill-install-banner-store.d.ts +32 -0
- package/dist/stores/skill-install-banner-store.js +14 -0
- package/dist/stores/skill-install-banner-store.js.map +1 -0
- package/dist/stores/use-event-store.cjs +1 -1
- package/dist/stores/use-event-store.cjs.map +1 -1
- package/dist/stores/use-event-store.js +35 -35
- package/dist/stores/use-event-store.js.map +1 -1
- package/dist/types/mcp-health.cjs +2 -0
- package/dist/types/mcp-health.cjs.map +1 -0
- package/dist/types/mcp-health.d.ts +21 -0
- package/dist/types/mcp-health.js +6 -0
- package/dist/types/mcp-health.js.map +1 -0
- package/dist/types/settings.d.ts +1 -0
- package/dist/utils/handle-event-for-ui.cjs +1 -1
- package/dist/utils/handle-event-for-ui.cjs.map +1 -1
- package/dist/utils/handle-event-for-ui.d.ts +5 -0
- package/dist/utils/handle-event-for-ui.js +71 -57
- package/dist/utils/handle-event-for-ui.js.map +1 -1
- package/dist/utils/mcp-credential-validation.cjs +1 -1
- package/dist/utils/mcp-credential-validation.cjs.map +1 -1
- package/dist/utils/mcp-credential-validation.js +32 -16
- package/dist/utils/mcp-credential-validation.js.map +1 -1
- package/dist/utils/mcp-server-health-key.cjs +2 -0
- package/dist/utils/mcp-server-health-key.cjs.map +1 -0
- package/dist/utils/mcp-server-health-key.d.ts +16 -0
- package/dist/utils/mcp-server-health-key.js +23 -0
- package/dist/utils/mcp-server-health-key.js.map +1 -0
- package/dist/utils/mcp-test-error-message.cjs +2 -0
- package/dist/utils/mcp-test-error-message.cjs.map +1 -0
- package/dist/utils/mcp-test-error-message.d.ts +8 -0
- package/dist/utils/mcp-test-error-message.js +14 -0
- package/dist/utils/mcp-test-error-message.js.map +1 -0
- package/dist/utils/redact-mcp-secrets.cjs +2 -0
- package/dist/utils/redact-mcp-secrets.cjs.map +1 -0
- package/dist/utils/redact-mcp-secrets.d.ts +13 -0
- package/dist/utils/redact-mcp-secrets.js +57 -0
- package/dist/utils/redact-mcp-secrets.js.map +1 -0
- package/dist/utils/settings-utils.cjs.map +1 -1
- package/dist/utils/settings-utils.js.map +1 -1
- package/dist/utils/skill-install-events.cjs +3 -0
- package/dist/utils/skill-install-events.cjs.map +1 -0
- package/dist/utils/skill-install-events.d.ts +16 -0
- package/dist/utils/skill-install-events.js +26 -0
- package/dist/utils/skill-install-events.js.map +1 -0
- package/dist/utils/title-llm-profile.cjs +2 -0
- package/dist/utils/title-llm-profile.cjs.map +1 -0
- package/dist/utils/title-llm-profile.d.ts +2 -0
- package/dist/utils/title-llm-profile.js +11 -0
- package/dist/utils/title-llm-profile.js.map +1 -0
- package/package.json +10 -3
- package/scripts/check-sdk-version-sync.mjs +6 -6
- package/scripts/check-translation-completeness.cjs +2 -0
- package/scripts/dev-process-utils.mjs +62 -1
- package/scripts/dev-safe.mjs +2 -2
- package/scripts/dev-static.mjs +5 -3
- package/scripts/dev-with-automation.mjs +98 -14
- package/scripts/download-node.mjs +382 -0
- package/scripts/download-uv.mjs +204 -0
- package/scripts/logger.mjs +64 -35
- package/build/assets/agent-server-compatibility-C0MtTTwb.js +0 -1
- package/build/assets/agent-server-conversation-service.api-lzc8dabY.js +0 -41
- package/build/assets/agent-settings-GwiXe_6k.js +0 -2
- package/build/assets/agent-settings-OdsyI2gX.js +0 -1
- package/build/assets/api-key-entry-screen-2gsoZAOK.js +0 -1
- package/build/assets/app-settings-CD9euh81.js +0 -1
- package/build/assets/automation-export-Djc8Tf0M.js +0 -2
- package/build/assets/automations-list-Dtiolk1h.js +0 -1
- package/build/assets/backend-form-modal-B8GtBA-J.js +0 -1
- package/build/assets/browser-store-BI6uklCG.js +0 -1
- package/build/assets/chat-send-button-BZHG2hAW.js +0 -1
- package/build/assets/client-source-CtQjJEy6.js +0 -1
- package/build/assets/cloud-funnel-analytics-uzzLlLuj.js +0 -1
- package/build/assets/conversation-B8d8_Upd.js +0 -1
- package/build/assets/conversation-Lmqm6VJC.js +0 -89
- package/build/assets/conversation-panel-B8n40Swu.js +0 -1
- package/build/assets/conversation-state-store-B2Bp32XI.js +0 -1
- package/build/assets/declaration-BGsHjPEW.js +0 -1
- package/build/assets/extensions-hub-DqvwvpCi.js +0 -1
- package/build/assets/extensions-navigation-BMc9Nluv.js +0 -1
- package/build/assets/files-tab-BAkaV4aO.js +0 -1
- package/build/assets/files-tab-store-DJsPxYdg.js +0 -1
- package/build/assets/git-provider-icon-xvbukHaT.js +0 -1
- package/build/assets/home-D01kSnmo.js +0 -1
- package/build/assets/home-NZO2bF4N.js +0 -1
- package/build/assets/index-home-BsI6i0TC.js +0 -1
- package/build/assets/install-server-modal-BYjqoRyX.js +0 -1
- package/build/assets/lesson-plan-cNUjpdFx.js +0 -4
- package/build/assets/llm-not-configured-banner-DUPyoFIZ.js +0 -27
- package/build/assets/llm-settings-Cs_iieFY.js +0 -1
- package/build/assets/llm-settings-J2ke2foG.js +0 -1
- package/build/assets/manage-backends-modal-nMoCZ2a0.js +0 -1
- package/build/assets/manifest-f1b46f62.js +0 -1
- package/build/assets/markdown-renderer-B4V2OMFP.js +0 -2
- package/build/assets/mcp-kZM-cAZw.js +0 -9
- package/build/assets/messages-CJAv5n4j.js +0 -40
- package/build/assets/objectWithoutPropertiesLoose-BgYIAs2y.js +0 -1
- package/build/assets/onboarding-Dx8n8HFr.js +0 -1
- package/build/assets/onboarding-modal-Bxuxpfdz.js +0 -1
- package/build/assets/recommended-automations-launcher-BWRRvMPE.js +0 -58
- package/build/assets/refresh-cw-B9B7-vsy.js +0 -1
- package/build/assets/root-CYWeTrWE.css +0 -1
- package/build/assets/root-layout-ClEl-JlJ.js +0 -2
- package/build/assets/root-oT83qVlk.js +0 -2
- package/build/assets/sdk-section-page-Cwj0T4gF.js +0 -1
- package/build/assets/secrets-settings-Bc_pBX6F.js +0 -1
- package/build/assets/settings-index-BzSIM1-N.js +0 -1
- package/build/assets/settings-modal-BnZ7mMu7.js +0 -1
- package/build/assets/settings-n9a395O0.js +0 -1
- package/build/assets/shared-conversation-CIDDti9I.js +0 -1
- package/build/assets/sidebar-mobile-menu-toggle-CTX7J4wM.js +0 -1
- package/build/assets/skills-plugins-HZEbNDmX.js +0 -1
- package/build/assets/skills-settings-BdqijFlC.js +0 -2
- package/build/assets/telemetry-SHxpVxk8.js +0 -2
- package/build/assets/use-activate-agent-profile-BRDdSwQ0.js +0 -1
- package/build/assets/use-backends-health-BagmAE_W.js +0 -1
- package/build/assets/use-config-B39iHYFi.js +0 -1
- package/build/assets/use-event-store-Bbaz51GR.js +0 -4
- package/build/assets/use-llm-profiles-CgRtnj74.js +0 -1
- package/build/assets/use-plugins-marketplace-DOJp9rlE.js +0 -1
- package/build/assets/use-runtime-is-ready-ziHQvXZQ.js +0 -1
- package/build/assets/use-settings-BeJap6YL.js +0 -1
- package/build/assets/use-settings-nav-items-D5JJjFHJ.js +0 -16
- package/build/assets/use-tracking-DFoPQUSU.js +0 -1
- package/build/assets/useMutationState-OnAsCLA_.js +0 -1
- package/build/assets/vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-BD7v71DM.js +0 -2
- package/build/assets/vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-BT05Osu4.js +0 -28
- package/build/assets/vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-COhHANvV.js +0 -2
- package/build/assets/vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-DgzWSMRc.js +0 -2
- package/build/assets/vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-DqZatR3B.js +0 -7
- package/build/assets/vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-FghQ3Z1a.js +0 -1
- package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation-BTvhGHHG.js +0 -1
- package/build/assets/vendor~root-layout~index-home~home~mcp~automations-list~onboarding-modal-C4-GDgiF.js +0 -1
- package/dist/components/features/analytics/telemetry-consent-banner.cjs +0 -2
- package/dist/components/features/analytics/telemetry-consent-banner.cjs.map +0 -1
- package/dist/components/features/analytics/telemetry-consent-banner.d.ts +0 -29
- package/dist/components/features/analytics/telemetry-consent-banner.js +0 -59
- package/dist/components/features/analytics/telemetry-consent-banner.js.map +0 -1
- /package/build/assets/{__vite-browser-external-BQUj0sYu.js → __vite-browser-external-CKHVBTNC.js} +0 -0
- /package/build/assets/{agent-server-ui-style-scope-qhnhZHBV.js → agent-server-ui-style-scope-BvSa9on7.js} +0 -0
- /package/build/assets/{automation-LZB0MjdV.js → automation-BGiPmxFR.js} +0 -0
- /package/build/assets/{canvas-ui-COgjltGz.js → canvas-ui-CC4EJo-H.js} +0 -0
- /package/build/assets/{checkmark-h7udgXMM.js → checkmark-ygQB1AtV.js} +0 -0
- /package/build/assets/{close-DLFb5kfv.js → close-BjSA0HWT.js} +0 -0
- /package/build/assets/{code-tag-DYlAhEQY.js → code-tag-D9aPPbOe.js} +0 -0
- /package/build/assets/{common-CxbUL3nR.js → common-CCuqQy_S.js} +0 -0
- /package/build/assets/{conversation-local-storage-F6zVMM--.js → conversation-local-storage-BDjWPg0Z.js} +0 -0
- /package/build/assets/{copy-BLmGeJcd.js → copy-Dce7sOvS.js} +0 -0
- /package/build/assets/{copy-D1YGjP-C.js → copy-iPJAncAj.js} +0 -0
- /package/build/assets/{dist-CodhvuAP.js → dist-D9PhjOaq.js} +0 -0
- /package/build/assets/{environment-switch-store-DkjlKWzN.js → environment-switch-store-DHfcz4M4.js} +0 -0
- /package/build/assets/{extension-module-card-classes-9V3J9J_b.js → extension-module-card-classes-BpebKiN6.js} +0 -0
- /package/build/assets/{external-link-lhdITPqq.js → external-link-CpPMXxrV.js} +0 -0
- /package/build/assets/{folder-Bk311brm.js → folder-BabbYnbF.js} +0 -0
- /package/build/assets/{format-time-delta-DhDbkD7V.js → format-time-delta-BkAmJEPT.js} +0 -0
- /package/build/assets/{get-language-from-path-DBqBsCWH.js → get-language-from-path-CPNnuVhI.js} +0 -0
- /package/build/assets/{git-status-mapper-DnL9OC8_.js → git-status-mapper-BIXK0AAG.js} +0 -0
- /package/build/assets/{iconBase-Dz51Zn5x.js → iconBase-Ch-fOe8B.js} +0 -0
- /package/build/assets/{link-external-CaBmUEs_.js → link-external-DfKQroKX.js} +0 -0
- /package/build/assets/{list-todo-CAtvkzcy.js → list-todo-6J6zc8oS.js} +0 -0
- /package/build/assets/{llm-subscription-DtsX5Lhg.js → llm-subscription-Bvu8BLXc.js} +0 -0
- /package/build/assets/{loader-circle-CsAsfLIs.js → loader-circle-DGsqG5qw.js} +0 -0
- /package/build/assets/{map-provider-BbIb12oh.js → map-provider-BSvXvVR0.js} +0 -0
- /package/build/assets/{middleware-DYHYNAnP.js → middleware-_izt7V6U.js} +0 -0
- /package/build/assets/{modal-backdrop-zVwfOJZr.js → modal-backdrop-B7H42xHG.js} +0 -0
- /package/build/assets/{navigation-context-DPs2G0X8.js → navigation-context-cvyvI1WA.js} +0 -0
- /package/build/assets/{openhands-logo-bcNw5bkY.js → openhands-logo-pEw0nKFP.js} +0 -0
- /package/build/assets/{pencil-CWhApFIT.js → pencil-DmSqWUA3.js} +0 -0
- /package/build/assets/{react-DPDgL6du.js → react-MKQOkha9.js} +0 -0
- /package/build/assets/{search-BgOCR7_c.js → search-B5D5EuSn.js} +0 -0
- /package/build/assets/{search-dIQ09UY2.js → search-vnYL5jwV.js} +0 -0
- /package/build/assets/{settings-gear-MXCyZW0x.js → settings-gear-BOwF59Bs.js} +0 -0
- /package/build/assets/{settings-section-header-context-COMOIaxV.js → settings-section-header-context-CGgHZXrf.js} +0 -0
- /package/build/assets/{skills-EqzxYBvT.js → skills-arUOHLcS.js} +0 -0
- /package/build/assets/{square-chevron-right-DE-JN-2Z.js → square-chevron-right-EizCGtgq.js} +0 -0
- /package/build/assets/{switch-skeleton-DqQwalyu.js → switch-skeleton-BjPRx1QD.js} +0 -0
- /package/build/assets/{terminal-Cgf___rK.js → terminal-a57bHgZs.js} +0 -0
- /package/build/assets/{trash-2-BU6BlW4i.js → trash-2-CF3hilrY.js} +0 -0
- /package/build/assets/{u-check-circle-BqoIxNz_.js → u-check-circle-WGqHdtfO.js} +0 -0
- /package/build/assets/{u-check-circle-half-MsShT8Ec.js → u-check-circle-half-LiwZkuFe.js} +0 -0
- /package/build/assets/{u-edit-DL5LgKon.js → u-edit-BwHepAPi.js} +0 -0
- /package/build/assets/{use-breakpoint-BP3lqLMx.js → use-breakpoint-B-O0lQ84.js} +0 -0
- /package/build/assets/{use-click-outside-element-D9BYdANT.js → use-click-outside-element-DLQIMQrz.js} +0 -0
- /package/build/assets/{use-is-authed-BezEyfeh.js → use-is-authed-BSeo4coy.js} +0 -0
- /package/build/assets/{use-onboarding-completion-C_Swglzp.js → use-onboarding-completion-C0hPNGpw.js} +0 -0
- /package/build/assets/{v4-DbCkTSoU.js → v4-q4yWTlMz.js} +0 -0
- /package/build/assets/{vendor~browser-By2MVv_N.js → vendor~browser-UwB1jbAZ.js} +0 -0
- /package/build/assets/{vendor~conversation-panel~conversation~alert-banner-CxfzCmkN.js → vendor~conversation-panel~conversation~alert-banner-DHDkknt5.js} +0 -0
- /package/build/assets/{vendor~index-home~home~conversation-panel~conversation-ChmYLVgz.js → vendor~index-home~home~conversation-panel~conversation-Bff9cq5J.js} +0 -0
- /package/build/assets/{vendor~module-D5a_AClf.js → vendor~module-D4DeFV4J.js} +0 -0
- /package/build/assets/{vendor~terminal-CnKZILnC.js → vendor~terminal-B7Eiak0-.js} +0 -0
- /package/build/assets/{x-ZE4iplpF.js → x-DQB_00VJ.js} +0 -0
- /package/build/assets/{x-mark-Batp6gXa.js → x-mark-B32XuEwS.js} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { MarketplacePlugin, LocalPlugin } from "#/api/plugins-service";
|
|
1
|
+
import type { MarketplacePlugin, LocalPlugin, PluginBundledSkill } from "#/api/plugins-service";
|
|
2
2
|
import type { InstalledPluginInfo } from "#/api/plugins-management-service";
|
|
3
3
|
export type PluginStatusFilter = "all" | "installed" | "available" | "local";
|
|
4
4
|
/**
|
|
@@ -24,6 +24,15 @@ export interface PluginViewModel {
|
|
|
24
24
|
* Read-only: it auto-loads into conversations and is not installed/managed.
|
|
25
25
|
*/
|
|
26
26
|
isLocal: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Plugin contents (`skills` bundled in the plugin, `files` relative to
|
|
29
|
+
* `path`). The three fields travel as a unit from one server response so the
|
|
30
|
+
* file viewer never joins a base path with another copy's file list; null
|
|
31
|
+
* when the server has no local copy or predates the contents fields.
|
|
32
|
+
*/
|
|
33
|
+
path: string | null;
|
|
34
|
+
skills: PluginBundledSkill[] | null;
|
|
35
|
+
files: string[] | null;
|
|
27
36
|
}
|
|
28
37
|
/**
|
|
29
38
|
* Merge the marketplace catalog with the installed plugins into one
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
interface PluginFilesSectionProps {
|
|
2
|
+
/** Plugin directory on the agent-server (`path`/`install_path`). */
|
|
3
|
+
basePath: string;
|
|
4
|
+
/** File paths relative to `basePath`, as reported by the agent-server. */
|
|
5
|
+
files: string[];
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* "Files" section of the plugin detail modal: the plugin's file tree with an
|
|
9
|
+
* inline viewer for the selected file. Clicking the selected file again
|
|
10
|
+
* deselects it and closes the viewer.
|
|
11
|
+
*/
|
|
12
|
+
export declare function PluginFilesSection({ basePath, files, }: PluginFilesSectionProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
export {};
|
|
@@ -0,0 +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/chevron-down.cjs`),r=require(`../../../node_modules/lucide-react/dist/esm/icons/chevron-up.cjs`),i=require(`../../../node_modules/lucide-react/dist/esm/icons/circle-check.cjs`),a=require(`../../../node_modules/lucide-react/dist/esm/icons/external-link.cjs`),o=require(`../../../node_modules/lucide-react/dist/esm/icons/info.cjs`),s=require(`../../../node_modules/lucide-react/dist/esm/icons/refresh-cw.cjs`),c=require(`../../../utils/utils.cjs`),l=require(`../../../api/agent-server-config.cjs`),u=require(`../../../api/agent-server-compatibility.cjs`),d=require(`../../../api/client-source.cjs`),f=require(`../../shared/buttons/copy-to-clipboard-button.cjs`),p=require(`./brand-button.cjs`),m=require(`../../../api/agent-canvas-updates.cjs`),h=require(`../../../hooks/query/use-latest-agent-canvas-version.cjs`);let g=require(`react`),_=require(`react/jsx-runtime`);function v({command:e,testId:t}){let[n,r]=(0,g.useState)(!1);return(0,_.jsxs)(`div`,{className:`flex items-center gap-2 rounded-lg bg-[var(--oh-surface-deep)] px-2 py-1.5`,children:[(0,_.jsx)(`code`,{"data-testid":t,className:`min-w-0 flex-1 select-all break-all font-mono text-[11px] leading-4 text-white`,children:e}),(0,_.jsx)(f.CopyToClipboardButton,{isHidden:!1,isDisabled:!1,onClick:()=>{navigator.clipboard.writeText(e),r(!0),setTimeout(()=>r(!1),2e3)},mode:n?`copied`:`copy`})]})}function y(){let{t:f}=e.useTranslation(`openhands`),[y,b]=(0,g.useState)(!1),x=(0,g.useId)(),S=l.getLockedCloudHost()!==null,C=h.useLatestAgentCanvasVersion({enabled:!S});if(S)return null;let w=C.data,T=w===void 0?null:u.compareAgentServerVersions(w,d.AGENT_CANVAS_CLIENT_VERSION),E=T===1,D=T!==null&&T<=0,O=y?r.ChevronUp:n.ChevronDown;return(0,_.jsxs)(`section`,{"data-testid":`agent-canvas-update-card`,className:`flex flex-col gap-2 rounded-xl border border-[var(--oh-border)] bg-[var(--oh-surface-raised)] p-3`,children:[(0,_.jsxs)(`button`,{type:`button`,onClick:()=>b(e=>!e),"aria-expanded":y,"aria-controls":x,"data-testid":`agent-canvas-update-toggle`,className:`flex w-full cursor-pointer items-center gap-2 text-left`,children:[(0,_.jsx)(`span`,{className:`flex-1 truncate text-xs font-medium text-white`,children:f(t.I18nKey.SETTINGS$APP_UPDATE_CARD_TITLE)}),T!==null&&(0,_.jsx)(`span`,{"data-testid":`agent-canvas-update-badge`,className:c.cn(`inline-flex shrink-0 items-center rounded-full border border-[var(--oh-border)] bg-[var(--oh-surface)] px-1.5 py-0.5 text-[10px] font-medium leading-none`,E?`text-warning`:`text-success`),children:f(E?t.I18nKey.SETTINGS$APP_UPDATE_BADGE_UPDATE_AVAILABLE:t.I18nKey.SETTINGS$APP_UPDATE_BADGE_UP_TO_DATE)}),(0,_.jsx)(O,{className:`size-4 shrink-0 text-[var(--oh-muted)]`,"aria-hidden":!0})]}),(0,_.jsxs)(`div`,{className:`flex items-center justify-between text-xs`,children:[(0,_.jsx)(`span`,{className:`text-[var(--oh-text-dim)]`,children:f(t.I18nKey.SETTINGS$APP_UPDATE_VERSION_LABEL)}),(0,_.jsx)(`span`,{className:`font-mono text-white`,children:d.AGENT_CANVAS_CLIENT_VERSION})]}),y&&(0,_.jsxs)(`div`,{id:x,className:`flex flex-col gap-3 pt-1`,children:[(0,_.jsx)(`div`,{"data-testid":`agent-canvas-update-status`,className:`flex items-start gap-2 text-xs`,children:C.isPending?(0,_.jsx)(`span`,{className:`text-[var(--oh-muted)]`,children:f(t.I18nKey.SETTINGS$APP_UPDATE_CHECKING)}):E?(0,_.jsxs)(_.Fragment,{children:[(0,_.jsx)(o.Info,{className:`size-4 shrink-0 text-warning`,"aria-hidden":!0}),(0,_.jsx)(`span`,{className:`text-warning`,children:f(t.I18nKey.SETTINGS$APP_UPDATE_AVAILABLE_MESSAGE,{version:w})})]}):D?(0,_.jsxs)(_.Fragment,{children:[(0,_.jsx)(i.CircleCheck,{className:`size-4 shrink-0 text-success`,"aria-hidden":!0}),(0,_.jsx)(`span`,{className:`text-success`,children:f(t.I18nKey.SETTINGS$APP_UPDATE_LATEST_MESSAGE)})]}):(0,_.jsx)(`span`,{className:`text-[var(--oh-muted)]`,children:f(t.I18nKey.SETTINGS$APP_UPDATE_CHECK_FAILED)})}),(0,_.jsx)(p.BrandButton,{testId:`agent-canvas-update-check-button`,type:`button`,variant:`secondary`,className:`w-full`,isDisabled:C.isFetching,"aria-busy":C.isFetching,onClick:()=>C.refetch(),startContent:(0,_.jsx)(s.RefreshCw,{className:c.cn(`size-4`,C.isFetching&&`animate-spin`),"aria-hidden":!0}),children:f(t.I18nKey.SETTINGS$APP_UPDATE_CHECK_BUTTON)}),(0,_.jsxs)(`div`,{className:`flex flex-col gap-2 rounded-lg border border-[var(--oh-border-subtle)] p-3 text-xs`,children:[(0,_.jsxs)(`div`,{className:`flex items-center gap-1.5 text-white`,children:[(0,_.jsx)(o.Info,{className:`size-4 shrink-0`,"aria-hidden":!0}),(0,_.jsx)(`span`,{className:`font-medium`,children:f(t.I18nKey.SETTINGS$APP_UPDATE_HOW_TO_UPDATE)})]}),(0,_.jsx)(`span`,{className:`text-[var(--oh-text-dim)]`,children:f(t.I18nKey.SETTINGS$APP_UPDATE_RUN_COMMANDS)}),(0,_.jsx)(v,{command:m.AGENT_CANVAS_UPDATE_COMMANDS.npm,testId:`agent-canvas-update-command-npm`}),(0,_.jsx)(`span`,{className:`text-center text-[var(--oh-text-dim)]`,children:f(t.I18nKey.SETTINGS$APP_UPDATE_OR)}),(0,_.jsx)(v,{command:m.AGENT_CANVAS_UPDATE_COMMANDS.docker,testId:`agent-canvas-update-command-docker`})]}),(0,_.jsxs)(`a`,{"data-testid":`agent-canvas-update-release-notes`,href:`https://github.com/OpenHands/agent-canvas/releases`,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex items-center gap-1 self-start text-xs text-[var(--oh-accent)] underline`,children:[f(t.I18nKey.SETTINGS$APP_UPDATE_RELEASE_NOTES),(0,_.jsx)(a.ExternalLink,{size:12,"aria-hidden":!0})]})]})]})}exports.AgentCanvasUpdateCard=y;
|
|
2
|
+
//# sourceMappingURL=agent-canvas-update-card.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-canvas-update-card.cjs","names":[],"sources":["../../../../src/components/features/settings/agent-canvas-update-card.tsx"],"sourcesContent":["import { useId, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n ChevronDown,\n ChevronUp,\n CircleCheck,\n ExternalLink,\n Info,\n RefreshCw,\n} from \"lucide-react\";\nimport {\n AGENT_CANVAS_RELEASE_NOTES_URL,\n AGENT_CANVAS_UPDATE_COMMANDS,\n} from \"#/api/agent-canvas-updates\";\nimport { compareAgentServerVersions } from \"#/api/agent-server-compatibility\";\nimport { getLockedCloudHost } from \"#/api/agent-server-config\";\nimport { AGENT_CANVAS_CLIENT_VERSION } from \"#/api/client-source\";\nimport { BrandButton } from \"#/components/features/settings/brand-button\";\nimport { CopyToClipboardButton } from \"#/components/shared/buttons/copy-to-clipboard-button\";\nimport { useLatestAgentCanvasVersion } from \"#/hooks/query/use-latest-agent-canvas-version\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { cn } from \"#/utils/utils\";\n\nfunction UpdateCommandRow({\n command,\n testId,\n}: {\n command: string;\n testId: string;\n}) {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = () => {\n navigator.clipboard.writeText(command);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n };\n\n return (\n <div className=\"flex items-center gap-2 rounded-lg bg-[var(--oh-surface-deep)] px-2 py-1.5\">\n <code\n data-testid={testId}\n className=\"min-w-0 flex-1 select-all break-all font-mono text-[11px] leading-4 text-white\"\n >\n {command}\n </code>\n <CopyToClipboardButton\n isHidden={false}\n isDisabled={false}\n onClick={handleCopy}\n mode={copied ? \"copied\" : \"copy\"}\n />\n </div>\n );\n}\n\n/**\n * Information-only version/update card for the settings navigation surfaces.\n * Never blocks or toasts; check failures degrade to a quiet inline message.\n * Hidden in locked-to-Cloud deployments — the hosted canvas has no npm/docker\n * install to update.\n */\nexport function AgentCanvasUpdateCard() {\n const { t } = useTranslation(\"openhands\");\n const [expanded, setExpanded] = useState(false);\n // The card is mounted on multiple settings surfaces at once; ids must not\n // collide across instances.\n const detailsId = useId();\n const isLockedToCloud = getLockedCloudHost() !== null;\n const latestVersionQuery = useLatestAgentCanvasVersion({\n enabled: !isLockedToCloud,\n });\n\n if (isLockedToCloud) return null;\n\n const latestVersion = latestVersionQuery.data;\n const comparison =\n latestVersion !== undefined\n ? compareAgentServerVersions(latestVersion, AGENT_CANVAS_CLIENT_VERSION)\n : null;\n const updateAvailable = comparison === 1;\n // 0 or -1: running the npm latest or newer (local dev build).\n const upToDate = comparison !== null && comparison <= 0;\n const ChevronIcon = expanded ? ChevronUp : ChevronDown;\n\n return (\n <section\n data-testid=\"agent-canvas-update-card\"\n className=\"flex flex-col gap-2 rounded-xl border border-[var(--oh-border)] bg-[var(--oh-surface-raised)] p-3\"\n >\n <button\n type=\"button\"\n onClick={() => setExpanded((prev) => !prev)}\n aria-expanded={expanded}\n aria-controls={detailsId}\n data-testid=\"agent-canvas-update-toggle\"\n className=\"flex w-full cursor-pointer items-center gap-2 text-left\"\n >\n <span className=\"flex-1 truncate text-xs font-medium text-white\">\n {t(I18nKey.SETTINGS$APP_UPDATE_CARD_TITLE)}\n </span>\n {comparison !== null && (\n <span\n data-testid=\"agent-canvas-update-badge\"\n className={cn(\n \"inline-flex shrink-0 items-center rounded-full border border-[var(--oh-border)] bg-[var(--oh-surface)] px-1.5 py-0.5 text-[10px] font-medium leading-none\",\n updateAvailable ? \"text-warning\" : \"text-success\",\n )}\n >\n {t(\n updateAvailable\n ? I18nKey.SETTINGS$APP_UPDATE_BADGE_UPDATE_AVAILABLE\n : I18nKey.SETTINGS$APP_UPDATE_BADGE_UP_TO_DATE,\n )}\n </span>\n )}\n <ChevronIcon\n className=\"size-4 shrink-0 text-[var(--oh-muted)]\"\n aria-hidden\n />\n </button>\n\n <div className=\"flex items-center justify-between text-xs\">\n <span className=\"text-[var(--oh-text-dim)]\">\n {t(I18nKey.SETTINGS$APP_UPDATE_VERSION_LABEL)}\n </span>\n <span className=\"font-mono text-white\">\n {AGENT_CANVAS_CLIENT_VERSION}\n </span>\n </div>\n\n {expanded && (\n <div id={detailsId} className=\"flex flex-col gap-3 pt-1\">\n <div\n data-testid=\"agent-canvas-update-status\"\n className=\"flex items-start gap-2 text-xs\"\n >\n {latestVersionQuery.isPending ? (\n <span className=\"text-[var(--oh-muted)]\">\n {t(I18nKey.SETTINGS$APP_UPDATE_CHECKING)}\n </span>\n ) : updateAvailable ? (\n <>\n <Info className=\"size-4 shrink-0 text-warning\" aria-hidden />\n <span className=\"text-warning\">\n {t(I18nKey.SETTINGS$APP_UPDATE_AVAILABLE_MESSAGE, {\n version: latestVersion,\n })}\n </span>\n </>\n ) : upToDate ? (\n <>\n <CircleCheck\n className=\"size-4 shrink-0 text-success\"\n aria-hidden\n />\n <span className=\"text-success\">\n {t(I18nKey.SETTINGS$APP_UPDATE_LATEST_MESSAGE)}\n </span>\n </>\n ) : (\n <span className=\"text-[var(--oh-muted)]\">\n {t(I18nKey.SETTINGS$APP_UPDATE_CHECK_FAILED)}\n </span>\n )}\n </div>\n\n <BrandButton\n testId=\"agent-canvas-update-check-button\"\n type=\"button\"\n variant=\"secondary\"\n className=\"w-full\"\n isDisabled={latestVersionQuery.isFetching}\n aria-busy={latestVersionQuery.isFetching}\n onClick={() => latestVersionQuery.refetch()}\n startContent={\n <RefreshCw\n className={cn(\n \"size-4\",\n latestVersionQuery.isFetching && \"animate-spin\",\n )}\n aria-hidden\n />\n }\n >\n {t(I18nKey.SETTINGS$APP_UPDATE_CHECK_BUTTON)}\n </BrandButton>\n\n <div className=\"flex flex-col gap-2 rounded-lg border border-[var(--oh-border-subtle)] p-3 text-xs\">\n <div className=\"flex items-center gap-1.5 text-white\">\n <Info className=\"size-4 shrink-0\" aria-hidden />\n <span className=\"font-medium\">\n {t(I18nKey.SETTINGS$APP_UPDATE_HOW_TO_UPDATE)}\n </span>\n </div>\n <span className=\"text-[var(--oh-text-dim)]\">\n {t(I18nKey.SETTINGS$APP_UPDATE_RUN_COMMANDS)}\n </span>\n <UpdateCommandRow\n command={AGENT_CANVAS_UPDATE_COMMANDS.npm}\n testId=\"agent-canvas-update-command-npm\"\n />\n <span className=\"text-center text-[var(--oh-text-dim)]\">\n {t(I18nKey.SETTINGS$APP_UPDATE_OR)}\n </span>\n <UpdateCommandRow\n command={AGENT_CANVAS_UPDATE_COMMANDS.docker}\n testId=\"agent-canvas-update-command-docker\"\n />\n </div>\n\n <a\n data-testid=\"agent-canvas-update-release-notes\"\n href={AGENT_CANVAS_RELEASE_NOTES_URL}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex items-center gap-1 self-start text-xs text-[var(--oh-accent)] underline\"\n >\n {t(I18nKey.SETTINGS$APP_UPDATE_RELEASE_NOTES)}\n <ExternalLink size={12} aria-hidden />\n </a>\n </div>\n )}\n </section>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Information-only version/update card for the settings navigation surfaces.
|
|
3
|
+
* Never blocks or toasts; check failures degrade to a quiet inline message.
|
|
4
|
+
* Hidden in locked-to-Cloud deployments — the hosted canvas has no npm/docker
|
|
5
|
+
* install to update.
|
|
6
|
+
*/
|
|
7
|
+
export declare function AgentCanvasUpdateCard(): import("react/jsx-runtime").JSX.Element | null;
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { useTranslation as e } from "../../../node_modules/react-i18next/dist/es/useTranslation.js";
|
|
2
|
+
import { I18nKey as t } from "../../../i18n/declaration.js";
|
|
3
|
+
import { ChevronDown as n } from "../../../node_modules/lucide-react/dist/esm/icons/chevron-down.js";
|
|
4
|
+
import { ChevronUp as r } from "../../../node_modules/lucide-react/dist/esm/icons/chevron-up.js";
|
|
5
|
+
import { CircleCheck as i } from "../../../node_modules/lucide-react/dist/esm/icons/circle-check.js";
|
|
6
|
+
import { ExternalLink as a } from "../../../node_modules/lucide-react/dist/esm/icons/external-link.js";
|
|
7
|
+
import { Info as o } from "../../../node_modules/lucide-react/dist/esm/icons/info.js";
|
|
8
|
+
import { RefreshCw as s } from "../../../node_modules/lucide-react/dist/esm/icons/refresh-cw.js";
|
|
9
|
+
import { cn as c } from "../../../utils/utils.js";
|
|
10
|
+
import { getLockedCloudHost as l } from "../../../api/agent-server-config.js";
|
|
11
|
+
import { compareAgentServerVersions as u } from "../../../api/agent-server-compatibility.js";
|
|
12
|
+
import { AGENT_CANVAS_CLIENT_VERSION as d } from "../../../api/client-source.js";
|
|
13
|
+
import { CopyToClipboardButton as f } from "../../shared/buttons/copy-to-clipboard-button.js";
|
|
14
|
+
import { BrandButton as p } from "./brand-button.js";
|
|
15
|
+
import { AGENT_CANVAS_UPDATE_COMMANDS as m } from "../../../api/agent-canvas-updates.js";
|
|
16
|
+
import { useLatestAgentCanvasVersion as h } from "../../../hooks/query/use-latest-agent-canvas-version.js";
|
|
17
|
+
import { useId as g, useState as _ } from "react";
|
|
18
|
+
import { Fragment as v, jsx as y, jsxs as b } from "react/jsx-runtime";
|
|
19
|
+
//#region src/components/features/settings/agent-canvas-update-card.tsx
|
|
20
|
+
function x({ command: e, testId: t }) {
|
|
21
|
+
let [n, r] = _(!1);
|
|
22
|
+
return /* @__PURE__ */ b("div", {
|
|
23
|
+
className: "flex items-center gap-2 rounded-lg bg-[var(--oh-surface-deep)] px-2 py-1.5",
|
|
24
|
+
children: [/* @__PURE__ */ y("code", {
|
|
25
|
+
"data-testid": t,
|
|
26
|
+
className: "min-w-0 flex-1 select-all break-all font-mono text-[11px] leading-4 text-white",
|
|
27
|
+
children: e
|
|
28
|
+
}), /* @__PURE__ */ y(f, {
|
|
29
|
+
isHidden: !1,
|
|
30
|
+
isDisabled: !1,
|
|
31
|
+
onClick: () => {
|
|
32
|
+
navigator.clipboard.writeText(e), r(!0), setTimeout(() => r(!1), 2e3);
|
|
33
|
+
},
|
|
34
|
+
mode: n ? "copied" : "copy"
|
|
35
|
+
})]
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
function S() {
|
|
39
|
+
let { t: f } = e("openhands"), [S, C] = _(!1), w = g(), T = l() !== null, E = h({ enabled: !T });
|
|
40
|
+
if (T) return null;
|
|
41
|
+
let D = E.data, O = D === void 0 ? null : u(D, d), k = O === 1, A = O !== null && O <= 0, j = S ? r : n;
|
|
42
|
+
return /* @__PURE__ */ b("section", {
|
|
43
|
+
"data-testid": "agent-canvas-update-card",
|
|
44
|
+
className: "flex flex-col gap-2 rounded-xl border border-[var(--oh-border)] bg-[var(--oh-surface-raised)] p-3",
|
|
45
|
+
children: [
|
|
46
|
+
/* @__PURE__ */ b("button", {
|
|
47
|
+
type: "button",
|
|
48
|
+
onClick: () => C((e) => !e),
|
|
49
|
+
"aria-expanded": S,
|
|
50
|
+
"aria-controls": w,
|
|
51
|
+
"data-testid": "agent-canvas-update-toggle",
|
|
52
|
+
className: "flex w-full cursor-pointer items-center gap-2 text-left",
|
|
53
|
+
children: [
|
|
54
|
+
/* @__PURE__ */ y("span", {
|
|
55
|
+
className: "flex-1 truncate text-xs font-medium text-white",
|
|
56
|
+
children: f(t.SETTINGS$APP_UPDATE_CARD_TITLE)
|
|
57
|
+
}),
|
|
58
|
+
O !== null && /* @__PURE__ */ y("span", {
|
|
59
|
+
"data-testid": "agent-canvas-update-badge",
|
|
60
|
+
className: c("inline-flex shrink-0 items-center rounded-full border border-[var(--oh-border)] bg-[var(--oh-surface)] px-1.5 py-0.5 text-[10px] font-medium leading-none", k ? "text-warning" : "text-success"),
|
|
61
|
+
children: f(k ? t.SETTINGS$APP_UPDATE_BADGE_UPDATE_AVAILABLE : t.SETTINGS$APP_UPDATE_BADGE_UP_TO_DATE)
|
|
62
|
+
}),
|
|
63
|
+
/* @__PURE__ */ y(j, {
|
|
64
|
+
className: "size-4 shrink-0 text-[var(--oh-muted)]",
|
|
65
|
+
"aria-hidden": !0
|
|
66
|
+
})
|
|
67
|
+
]
|
|
68
|
+
}),
|
|
69
|
+
/* @__PURE__ */ b("div", {
|
|
70
|
+
className: "flex items-center justify-between text-xs",
|
|
71
|
+
children: [/* @__PURE__ */ y("span", {
|
|
72
|
+
className: "text-[var(--oh-text-dim)]",
|
|
73
|
+
children: f(t.SETTINGS$APP_UPDATE_VERSION_LABEL)
|
|
74
|
+
}), /* @__PURE__ */ y("span", {
|
|
75
|
+
className: "font-mono text-white",
|
|
76
|
+
children: d
|
|
77
|
+
})]
|
|
78
|
+
}),
|
|
79
|
+
S && /* @__PURE__ */ b("div", {
|
|
80
|
+
id: w,
|
|
81
|
+
className: "flex flex-col gap-3 pt-1",
|
|
82
|
+
children: [
|
|
83
|
+
/* @__PURE__ */ y("div", {
|
|
84
|
+
"data-testid": "agent-canvas-update-status",
|
|
85
|
+
className: "flex items-start gap-2 text-xs",
|
|
86
|
+
children: E.isPending ? /* @__PURE__ */ y("span", {
|
|
87
|
+
className: "text-[var(--oh-muted)]",
|
|
88
|
+
children: f(t.SETTINGS$APP_UPDATE_CHECKING)
|
|
89
|
+
}) : k ? /* @__PURE__ */ b(v, { children: [/* @__PURE__ */ y(o, {
|
|
90
|
+
className: "size-4 shrink-0 text-warning",
|
|
91
|
+
"aria-hidden": !0
|
|
92
|
+
}), /* @__PURE__ */ y("span", {
|
|
93
|
+
className: "text-warning",
|
|
94
|
+
children: f(t.SETTINGS$APP_UPDATE_AVAILABLE_MESSAGE, { version: D })
|
|
95
|
+
})] }) : A ? /* @__PURE__ */ b(v, { children: [/* @__PURE__ */ y(i, {
|
|
96
|
+
className: "size-4 shrink-0 text-success",
|
|
97
|
+
"aria-hidden": !0
|
|
98
|
+
}), /* @__PURE__ */ y("span", {
|
|
99
|
+
className: "text-success",
|
|
100
|
+
children: f(t.SETTINGS$APP_UPDATE_LATEST_MESSAGE)
|
|
101
|
+
})] }) : /* @__PURE__ */ y("span", {
|
|
102
|
+
className: "text-[var(--oh-muted)]",
|
|
103
|
+
children: f(t.SETTINGS$APP_UPDATE_CHECK_FAILED)
|
|
104
|
+
})
|
|
105
|
+
}),
|
|
106
|
+
/* @__PURE__ */ y(p, {
|
|
107
|
+
testId: "agent-canvas-update-check-button",
|
|
108
|
+
type: "button",
|
|
109
|
+
variant: "secondary",
|
|
110
|
+
className: "w-full",
|
|
111
|
+
isDisabled: E.isFetching,
|
|
112
|
+
"aria-busy": E.isFetching,
|
|
113
|
+
onClick: () => E.refetch(),
|
|
114
|
+
startContent: /* @__PURE__ */ y(s, {
|
|
115
|
+
className: c("size-4", E.isFetching && "animate-spin"),
|
|
116
|
+
"aria-hidden": !0
|
|
117
|
+
}),
|
|
118
|
+
children: f(t.SETTINGS$APP_UPDATE_CHECK_BUTTON)
|
|
119
|
+
}),
|
|
120
|
+
/* @__PURE__ */ b("div", {
|
|
121
|
+
className: "flex flex-col gap-2 rounded-lg border border-[var(--oh-border-subtle)] p-3 text-xs",
|
|
122
|
+
children: [
|
|
123
|
+
/* @__PURE__ */ b("div", {
|
|
124
|
+
className: "flex items-center gap-1.5 text-white",
|
|
125
|
+
children: [/* @__PURE__ */ y(o, {
|
|
126
|
+
className: "size-4 shrink-0",
|
|
127
|
+
"aria-hidden": !0
|
|
128
|
+
}), /* @__PURE__ */ y("span", {
|
|
129
|
+
className: "font-medium",
|
|
130
|
+
children: f(t.SETTINGS$APP_UPDATE_HOW_TO_UPDATE)
|
|
131
|
+
})]
|
|
132
|
+
}),
|
|
133
|
+
/* @__PURE__ */ y("span", {
|
|
134
|
+
className: "text-[var(--oh-text-dim)]",
|
|
135
|
+
children: f(t.SETTINGS$APP_UPDATE_RUN_COMMANDS)
|
|
136
|
+
}),
|
|
137
|
+
/* @__PURE__ */ y(x, {
|
|
138
|
+
command: m.npm,
|
|
139
|
+
testId: "agent-canvas-update-command-npm"
|
|
140
|
+
}),
|
|
141
|
+
/* @__PURE__ */ y("span", {
|
|
142
|
+
className: "text-center text-[var(--oh-text-dim)]",
|
|
143
|
+
children: f(t.SETTINGS$APP_UPDATE_OR)
|
|
144
|
+
}),
|
|
145
|
+
/* @__PURE__ */ y(x, {
|
|
146
|
+
command: m.docker,
|
|
147
|
+
testId: "agent-canvas-update-command-docker"
|
|
148
|
+
})
|
|
149
|
+
]
|
|
150
|
+
}),
|
|
151
|
+
/* @__PURE__ */ b("a", {
|
|
152
|
+
"data-testid": "agent-canvas-update-release-notes",
|
|
153
|
+
href: "https://github.com/OpenHands/agent-canvas/releases",
|
|
154
|
+
target: "_blank",
|
|
155
|
+
rel: "noopener noreferrer",
|
|
156
|
+
className: "inline-flex items-center gap-1 self-start text-xs text-[var(--oh-accent)] underline",
|
|
157
|
+
children: [f(t.SETTINGS$APP_UPDATE_RELEASE_NOTES), /* @__PURE__ */ y(a, {
|
|
158
|
+
size: 12,
|
|
159
|
+
"aria-hidden": !0
|
|
160
|
+
})]
|
|
161
|
+
})
|
|
162
|
+
]
|
|
163
|
+
})
|
|
164
|
+
]
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
//#endregion
|
|
168
|
+
export { S as AgentCanvasUpdateCard };
|
|
169
|
+
|
|
170
|
+
//# sourceMappingURL=agent-canvas-update-card.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-canvas-update-card.js","names":[],"sources":["../../../../src/components/features/settings/agent-canvas-update-card.tsx"],"sourcesContent":["import { useId, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n ChevronDown,\n ChevronUp,\n CircleCheck,\n ExternalLink,\n Info,\n RefreshCw,\n} from \"lucide-react\";\nimport {\n AGENT_CANVAS_RELEASE_NOTES_URL,\n AGENT_CANVAS_UPDATE_COMMANDS,\n} from \"#/api/agent-canvas-updates\";\nimport { compareAgentServerVersions } from \"#/api/agent-server-compatibility\";\nimport { getLockedCloudHost } from \"#/api/agent-server-config\";\nimport { AGENT_CANVAS_CLIENT_VERSION } from \"#/api/client-source\";\nimport { BrandButton } from \"#/components/features/settings/brand-button\";\nimport { CopyToClipboardButton } from \"#/components/shared/buttons/copy-to-clipboard-button\";\nimport { useLatestAgentCanvasVersion } from \"#/hooks/query/use-latest-agent-canvas-version\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { cn } from \"#/utils/utils\";\n\nfunction UpdateCommandRow({\n command,\n testId,\n}: {\n command: string;\n testId: string;\n}) {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = () => {\n navigator.clipboard.writeText(command);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n };\n\n return (\n <div className=\"flex items-center gap-2 rounded-lg bg-[var(--oh-surface-deep)] px-2 py-1.5\">\n <code\n data-testid={testId}\n className=\"min-w-0 flex-1 select-all break-all font-mono text-[11px] leading-4 text-white\"\n >\n {command}\n </code>\n <CopyToClipboardButton\n isHidden={false}\n isDisabled={false}\n onClick={handleCopy}\n mode={copied ? \"copied\" : \"copy\"}\n />\n </div>\n );\n}\n\n/**\n * Information-only version/update card for the settings navigation surfaces.\n * Never blocks or toasts; check failures degrade to a quiet inline message.\n * Hidden in locked-to-Cloud deployments — the hosted canvas has no npm/docker\n * install to update.\n */\nexport function AgentCanvasUpdateCard() {\n const { t } = useTranslation(\"openhands\");\n const [expanded, setExpanded] = useState(false);\n // The card is mounted on multiple settings surfaces at once; ids must not\n // collide across instances.\n const detailsId = useId();\n const isLockedToCloud = getLockedCloudHost() !== null;\n const latestVersionQuery = useLatestAgentCanvasVersion({\n enabled: !isLockedToCloud,\n });\n\n if (isLockedToCloud) return null;\n\n const latestVersion = latestVersionQuery.data;\n const comparison =\n latestVersion !== undefined\n ? compareAgentServerVersions(latestVersion, AGENT_CANVAS_CLIENT_VERSION)\n : null;\n const updateAvailable = comparison === 1;\n // 0 or -1: running the npm latest or newer (local dev build).\n const upToDate = comparison !== null && comparison <= 0;\n const ChevronIcon = expanded ? ChevronUp : ChevronDown;\n\n return (\n <section\n data-testid=\"agent-canvas-update-card\"\n className=\"flex flex-col gap-2 rounded-xl border border-[var(--oh-border)] bg-[var(--oh-surface-raised)] p-3\"\n >\n <button\n type=\"button\"\n onClick={() => setExpanded((prev) => !prev)}\n aria-expanded={expanded}\n aria-controls={detailsId}\n data-testid=\"agent-canvas-update-toggle\"\n className=\"flex w-full cursor-pointer items-center gap-2 text-left\"\n >\n <span className=\"flex-1 truncate text-xs font-medium text-white\">\n {t(I18nKey.SETTINGS$APP_UPDATE_CARD_TITLE)}\n </span>\n {comparison !== null && (\n <span\n data-testid=\"agent-canvas-update-badge\"\n className={cn(\n \"inline-flex shrink-0 items-center rounded-full border border-[var(--oh-border)] bg-[var(--oh-surface)] px-1.5 py-0.5 text-[10px] font-medium leading-none\",\n updateAvailable ? \"text-warning\" : \"text-success\",\n )}\n >\n {t(\n updateAvailable\n ? I18nKey.SETTINGS$APP_UPDATE_BADGE_UPDATE_AVAILABLE\n : I18nKey.SETTINGS$APP_UPDATE_BADGE_UP_TO_DATE,\n )}\n </span>\n )}\n <ChevronIcon\n className=\"size-4 shrink-0 text-[var(--oh-muted)]\"\n aria-hidden\n />\n </button>\n\n <div className=\"flex items-center justify-between text-xs\">\n <span className=\"text-[var(--oh-text-dim)]\">\n {t(I18nKey.SETTINGS$APP_UPDATE_VERSION_LABEL)}\n </span>\n <span className=\"font-mono text-white\">\n {AGENT_CANVAS_CLIENT_VERSION}\n </span>\n </div>\n\n {expanded && (\n <div id={detailsId} className=\"flex flex-col gap-3 pt-1\">\n <div\n data-testid=\"agent-canvas-update-status\"\n className=\"flex items-start gap-2 text-xs\"\n >\n {latestVersionQuery.isPending ? (\n <span className=\"text-[var(--oh-muted)]\">\n {t(I18nKey.SETTINGS$APP_UPDATE_CHECKING)}\n </span>\n ) : updateAvailable ? (\n <>\n <Info className=\"size-4 shrink-0 text-warning\" aria-hidden />\n <span className=\"text-warning\">\n {t(I18nKey.SETTINGS$APP_UPDATE_AVAILABLE_MESSAGE, {\n version: latestVersion,\n })}\n </span>\n </>\n ) : upToDate ? (\n <>\n <CircleCheck\n className=\"size-4 shrink-0 text-success\"\n aria-hidden\n />\n <span className=\"text-success\">\n {t(I18nKey.SETTINGS$APP_UPDATE_LATEST_MESSAGE)}\n </span>\n </>\n ) : (\n <span className=\"text-[var(--oh-muted)]\">\n {t(I18nKey.SETTINGS$APP_UPDATE_CHECK_FAILED)}\n </span>\n )}\n </div>\n\n <BrandButton\n testId=\"agent-canvas-update-check-button\"\n type=\"button\"\n variant=\"secondary\"\n className=\"w-full\"\n isDisabled={latestVersionQuery.isFetching}\n aria-busy={latestVersionQuery.isFetching}\n onClick={() => latestVersionQuery.refetch()}\n startContent={\n <RefreshCw\n className={cn(\n \"size-4\",\n latestVersionQuery.isFetching && \"animate-spin\",\n )}\n aria-hidden\n />\n }\n >\n {t(I18nKey.SETTINGS$APP_UPDATE_CHECK_BUTTON)}\n </BrandButton>\n\n <div className=\"flex flex-col gap-2 rounded-lg border border-[var(--oh-border-subtle)] p-3 text-xs\">\n <div className=\"flex items-center gap-1.5 text-white\">\n <Info className=\"size-4 shrink-0\" aria-hidden />\n <span className=\"font-medium\">\n {t(I18nKey.SETTINGS$APP_UPDATE_HOW_TO_UPDATE)}\n </span>\n </div>\n <span className=\"text-[var(--oh-text-dim)]\">\n {t(I18nKey.SETTINGS$APP_UPDATE_RUN_COMMANDS)}\n </span>\n <UpdateCommandRow\n command={AGENT_CANVAS_UPDATE_COMMANDS.npm}\n testId=\"agent-canvas-update-command-npm\"\n />\n <span className=\"text-center text-[var(--oh-text-dim)]\">\n {t(I18nKey.SETTINGS$APP_UPDATE_OR)}\n </span>\n <UpdateCommandRow\n command={AGENT_CANVAS_UPDATE_COMMANDS.docker}\n testId=\"agent-canvas-update-command-docker\"\n />\n </div>\n\n <a\n data-testid=\"agent-canvas-update-release-notes\"\n href={AGENT_CANVAS_RELEASE_NOTES_URL}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex items-center gap-1 self-start text-xs text-[var(--oh-accent)] underline\"\n >\n {t(I18nKey.SETTINGS$APP_UPDATE_RELEASE_NOTES)}\n <ExternalLink size={12} aria-hidden />\n </a>\n </div>\n )}\n </section>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +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/external-link.cjs`),r=require(`../../../node_modules/lucide-react/dist/esm/icons/puzzle.cjs`),i=require(`../../../utils/utils.cjs`),a=require(`../../../api/backend-registry/active-store.cjs`),o=require(`../../../contexts/active-backend-context.cjs`),s=require(`../sidebar/sidebar-layout.cjs`);let c=require(`react/jsx-runtime`);function l(){let{t:l}=e.useTranslation(`openhands`),{active:u}=o.useActiveBackendContext(),{backend:d}=u;return a.isNoBackend(d)||d.kind!==`cloud`?null:(0,c.jsxs)(`a`,{"data-testid":`settings-integrations-link`,href:`${d.host.replace(/\/+$/,``)}/settings/integrations`,target:`_blank`,rel:`noopener noreferrer`,className:i.cn(s.sidebarNavRowClassName({collapsed:!1}),s.SIDEBAR_ROW_INTERACTIVE_CLASS.idle),children:[(0,c.jsx)(`span`,{className:s.SIDEBAR_ICON_SLOT_CLASS,children:(0,c.jsx)(r.Puzzle,{className:`size-4 shrink-0`,"aria-hidden":!0})}),(0,c.jsx)(`span`,{className:i.cn(s.sidebarNavLabelClassName(!1),`flex-1`),children:l(t.I18nKey.SETTINGS$INTEGRATIONS_SETTINGS_LINK)}),(0,c.jsx)(n.ExternalLink,{className:`size-4 shrink-0 text-[var(--oh-muted)]`,"aria-hidden":!0})]})}exports.IntegrationsSettingsLink=l;
|
|
2
|
+
//# sourceMappingURL=integrations-settings-link.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integrations-settings-link.cjs","names":[],"sources":["../../../../src/components/features/settings/integrations-settings-link.tsx"],"sourcesContent":["import { useTranslation } from \"react-i18next\";\nimport { ExternalLink, Puzzle } from \"lucide-react\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { useActiveBackendContext } from \"#/contexts/active-backend-context\";\nimport { isNoBackend } from \"#/api/backend-registry/active-store\";\nimport { cn } from \"#/utils/utils\";\nimport {\n SIDEBAR_ICON_SLOT_CLASS,\n SIDEBAR_ROW_INTERACTIVE_CLASS,\n sidebarNavLabelClassName,\n sidebarNavRowClassName,\n} from \"#/components/features/sidebar/sidebar-layout\";\n\n/**\n * Renders only for cloud backends — local backends have no equivalent\n * hosted integrations settings page.\n */\nexport function IntegrationsSettingsLink() {\n const { t } = useTranslation(\"openhands\");\n const { active } = useActiveBackendContext();\n const { backend } = active;\n\n if (isNoBackend(backend) || backend.kind !== \"cloud\") return null;\n\n const integrationsUrl = `${backend.host.replace(/\\/+$/, \"\")}/settings/integrations`;\n\n return (\n <a\n data-testid=\"settings-integrations-link\"\n href={integrationsUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={cn(\n sidebarNavRowClassName({ collapsed: false }),\n SIDEBAR_ROW_INTERACTIVE_CLASS.idle,\n )}\n >\n <span className={SIDEBAR_ICON_SLOT_CLASS}>\n <Puzzle className=\"size-4 shrink-0\" aria-hidden />\n </span>\n <span className={cn(sidebarNavLabelClassName(false), \"flex-1\")}>\n {t(I18nKey.SETTINGS$INTEGRATIONS_SETTINGS_LINK)}\n </span>\n <ExternalLink\n className=\"size-4 shrink-0 text-[var(--oh-muted)]\"\n aria-hidden\n />\n </a>\n );\n}\n"],"mappings":"qjBAiBA,SAAgB,GAA2B,CACzC,GAAM,CAAE,KAAM,EAAA,eAAe,YAAY,CACnC,CAAE,UAAW,EAAA,yBAAyB,CACtC,CAAE,WAAY,EAMpB,OAJI,EAAA,YAAY,EAAQ,EAAI,EAAQ,OAAS,QAAgB,MAK3D,EAAA,EAAA,MAAC,IAAD,CACE,cAAY,6BACZ,KAAM,GALiB,EAAQ,KAAK,QAAQ,OAAQ,GAAG,CAAC,wBAMxD,OAAO,SACP,IAAI,sBACJ,UAAW,EAAA,GACT,EAAA,uBAAuB,CAAE,UAAW,GAAO,CAAC,CAC5C,EAAA,8BAA8B,KAC/B,UARH,EAUE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAW,EAAA,kCACf,EAAA,EAAA,KAAC,EAAA,OAAD,CAAQ,UAAU,kBAAkB,cAAA,GAAc,CAAA,CAC7C,CAAA,EACP,EAAA,EAAA,KAAC,OAAD,CAAM,UAAW,EAAA,GAAG,EAAA,yBAAyB,GAAM,CAAE,SAAS,UAC3D,EAAE,EAAA,QAAQ,oCAAoC,CAC1C,CAAA,EACP,EAAA,EAAA,KAAC,EAAA,aAAD,CACE,UAAU,yCACV,cAAA,GACA,CAAA,CACA"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { useTranslation as e } from "../../../node_modules/react-i18next/dist/es/useTranslation.js";
|
|
2
|
+
import { I18nKey as t } from "../../../i18n/declaration.js";
|
|
3
|
+
import { ExternalLink as n } from "../../../node_modules/lucide-react/dist/esm/icons/external-link.js";
|
|
4
|
+
import { Puzzle as r } from "../../../node_modules/lucide-react/dist/esm/icons/puzzle.js";
|
|
5
|
+
import { cn as i } from "../../../utils/utils.js";
|
|
6
|
+
import { isNoBackend as a } from "../../../api/backend-registry/active-store.js";
|
|
7
|
+
import { useActiveBackendContext as o } from "../../../contexts/active-backend-context.js";
|
|
8
|
+
import { SIDEBAR_ICON_SLOT_CLASS as s, SIDEBAR_ROW_INTERACTIVE_CLASS as c, sidebarNavLabelClassName as l, sidebarNavRowClassName as u } from "../sidebar/sidebar-layout.js";
|
|
9
|
+
import { jsx as d, jsxs as f } from "react/jsx-runtime";
|
|
10
|
+
//#region src/components/features/settings/integrations-settings-link.tsx
|
|
11
|
+
function p() {
|
|
12
|
+
let { t: p } = e("openhands"), { active: m } = o(), { backend: h } = m;
|
|
13
|
+
return a(h) || h.kind !== "cloud" ? null : /* @__PURE__ */ f("a", {
|
|
14
|
+
"data-testid": "settings-integrations-link",
|
|
15
|
+
href: `${h.host.replace(/\/+$/, "")}/settings/integrations`,
|
|
16
|
+
target: "_blank",
|
|
17
|
+
rel: "noopener noreferrer",
|
|
18
|
+
className: i(u({ collapsed: !1 }), c.idle),
|
|
19
|
+
children: [
|
|
20
|
+
/* @__PURE__ */ d("span", {
|
|
21
|
+
className: s,
|
|
22
|
+
children: /* @__PURE__ */ d(r, {
|
|
23
|
+
className: "size-4 shrink-0",
|
|
24
|
+
"aria-hidden": !0
|
|
25
|
+
})
|
|
26
|
+
}),
|
|
27
|
+
/* @__PURE__ */ d("span", {
|
|
28
|
+
className: i(l(!1), "flex-1"),
|
|
29
|
+
children: p(t.SETTINGS$INTEGRATIONS_SETTINGS_LINK)
|
|
30
|
+
}),
|
|
31
|
+
/* @__PURE__ */ d(n, {
|
|
32
|
+
className: "size-4 shrink-0 text-[var(--oh-muted)]",
|
|
33
|
+
"aria-hidden": !0
|
|
34
|
+
})
|
|
35
|
+
]
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
//#endregion
|
|
39
|
+
export { p as IntegrationsSettingsLink };
|
|
40
|
+
|
|
41
|
+
//# sourceMappingURL=integrations-settings-link.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integrations-settings-link.js","names":[],"sources":["../../../../src/components/features/settings/integrations-settings-link.tsx"],"sourcesContent":["import { useTranslation } from \"react-i18next\";\nimport { ExternalLink, Puzzle } from \"lucide-react\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { useActiveBackendContext } from \"#/contexts/active-backend-context\";\nimport { isNoBackend } from \"#/api/backend-registry/active-store\";\nimport { cn } from \"#/utils/utils\";\nimport {\n SIDEBAR_ICON_SLOT_CLASS,\n SIDEBAR_ROW_INTERACTIVE_CLASS,\n sidebarNavLabelClassName,\n sidebarNavRowClassName,\n} from \"#/components/features/sidebar/sidebar-layout\";\n\n/**\n * Renders only for cloud backends — local backends have no equivalent\n * hosted integrations settings page.\n */\nexport function IntegrationsSettingsLink() {\n const { t } = useTranslation(\"openhands\");\n const { active } = useActiveBackendContext();\n const { backend } = active;\n\n if (isNoBackend(backend) || backend.kind !== \"cloud\") return null;\n\n const integrationsUrl = `${backend.host.replace(/\\/+$/, \"\")}/settings/integrations`;\n\n return (\n <a\n data-testid=\"settings-integrations-link\"\n href={integrationsUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={cn(\n sidebarNavRowClassName({ collapsed: false }),\n SIDEBAR_ROW_INTERACTIVE_CLASS.idle,\n )}\n >\n <span className={SIDEBAR_ICON_SLOT_CLASS}>\n <Puzzle className=\"size-4 shrink-0\" aria-hidden />\n </span>\n <span className={cn(sidebarNavLabelClassName(false), \"flex-1\")}>\n {t(I18nKey.SETTINGS$INTEGRATIONS_SETTINGS_LINK)}\n </span>\n <ExternalLink\n className=\"size-4 shrink-0 text-[var(--oh-muted)]\"\n aria-hidden\n />\n </a>\n );\n}\n"],"mappings":";;;;;;;;;;AAiBA,SAAgB,IAA2B;CACzC,IAAM,EAAE,SAAM,EAAe,YAAY,EACnC,EAAE,cAAW,GAAyB,EACtC,EAAE,eAAY;AAMpB,QAJI,EAAY,EAAQ,IAAI,EAAQ,SAAS,UAAgB,OAK3D,kBAAC,KAAD;EACE,eAAY;EACZ,MAAM,GALiB,EAAQ,KAAK,QAAQ,QAAQ,GAAG,CAAC;EAMxD,QAAO;EACP,KAAI;EACJ,WAAW,EACT,EAAuB,EAAE,WAAW,IAAO,CAAC,EAC5C,EAA8B,KAC/B;YARH;GAUE,kBAAC,QAAD;IAAM,WAAW;cACf,kBAAC,GAAD;KAAQ,WAAU;KAAkB,eAAA;KAAc,CAAA;IAC7C,CAAA;GACP,kBAAC,QAAD;IAAM,WAAW,EAAG,EAAyB,GAAM,EAAE,SAAS;cAC3D,EAAE,EAAQ,oCAAoC;IAC1C,CAAA;GACP,kBAAC,GAAD;IACE,WAAU;IACV,eAAA;IACA,CAAA;GACA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const e=require(`../../../../_virtual/_rolldown/runtime.cjs`);require(`../../../../utils/custom-toast-handlers.cjs`),require(`../../../../api/profiles-service/profiles-service.api.cjs`),require(`../../../../hooks/query/use-
|
|
1
|
+
const e=require(`../../../../_virtual/_rolldown/runtime.cjs`);require(`../../../../utils/custom-toast-handlers.cjs`),require(`../../../../api/profiles-service/profiles-service.api.cjs`),require(`../../../../hooks/query/use-llm-profiles.cjs`),require(`../../../../hooks/query/use-settings.cjs`),require(`../../../../ui/typography.cjs`),require(`../brand-button.cjs`),require(`../../../../hooks/query/use-agent-settings-schema.cjs`),require(`./profile-name-input.cjs`),require(`../../../../hooks/mutation/use-activate-llm-profile.cjs`),require(`../../../../hooks/mutation/use-save-llm-profile.cjs`),require(`./llm-profiles-manager.cjs`),require(`../../../shared/buttons/back-nav-button.cjs`),require(`../../../../contexts/settings-section-header-context.cjs`),require(`../../../../routes/llm-settings.cjs`);let t=require(`react`);t=e.__toESM(t,1),require(`react/jsx-runtime`);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import "../../../../utils/custom-toast-handlers.js";
|
|
2
2
|
import "../../../../api/profiles-service/profiles-service.api.js";
|
|
3
|
-
import "../../../../hooks/query/use-settings.js";
|
|
4
3
|
import "../../../../hooks/query/use-llm-profiles.js";
|
|
4
|
+
import "../../../../hooks/query/use-settings.js";
|
|
5
5
|
import "../../../../ui/typography.js";
|
|
6
6
|
import "../brand-button.js";
|
|
7
7
|
import "../../../../hooks/query/use-agent-settings-schema.js";
|
|
@@ -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(`../../../utils/utils.cjs`),r=require(`../../../ui/typography.cjs`),i=require(`../sidebar/sidebar-nav-link.cjs`),a=require(`./backend-synced-settings-badge.cjs`),
|
|
1
|
+
require(`../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../../node_modules/react-i18next/dist/es/useTranslation.cjs`),t=require(`../../../i18n/declaration.cjs`),n=require(`../../../utils/utils.cjs`),r=require(`../../../ui/typography.cjs`),i=require(`../sidebar/sidebar-nav-link.cjs`),a=require(`./agent-canvas-update-card.cjs`),o=require(`./backend-synced-settings-badge.cjs`),s=require(`./cloud-settings-link.cjs`),c=require(`./integrations-settings-link.cjs`);let l=require(`react/jsx-runtime`);function u({navigationItems:u}){let{t:d}=e.useTranslation(`openhands`),f=u.filter(e=>e.type===`item`);return(0,l.jsxs)(`aside`,{"data-testid":`settings-navbar-desktop`,className:n.cn(`hidden md:flex md:w-[260px] md:shrink-0 md:flex-col md:gap-2`,`md:sticky md:top-8 md:self-start md:pl-8`),children:[(0,l.jsx)(r.Typography.Text,{className:`px-2 text-sm font-normal text-white`,children:d(t.I18nKey.SETTINGS$TITLE)}),(0,l.jsxs)(`div`,{className:`flex flex-col gap-0.5 pt-0.5`,children:[f.map(e=>(0,l.jsx)(i.SidebarNavLink,{to:e.item.to,label:d(e.item.text),end:!0,testId:`sidebar-settings-${e.item.to}`,icon:e.item.icon,disabled:e.disabled,disabledReason:e.disabled&&e.disabledAgentName?d(t.I18nKey.SETTINGS$AGENT_DISABLED_TOOLTIP,{agentName:e.disabledAgentName}):void 0},e.item.to)),(0,l.jsx)(c.IntegrationsSettingsLink,{}),(0,l.jsx)(s.CloudSettingsLink,{})]}),(0,l.jsx)(`div`,{className:`px-2 pt-3`,children:(0,l.jsx)(a.AgentCanvasUpdateCard,{})}),(0,l.jsx)(`div`,{className:`px-2 pt-3`,children:(0,l.jsx)(o.BackendSyncedSettingsBadge,{})})]})}exports.SettingsDesktopSidebar=u;
|
|
2
2
|
//# sourceMappingURL=settings-desktop-sidebar.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-desktop-sidebar.cjs","names":[],"sources":["../../../../src/components/features/settings/settings-desktop-sidebar.tsx"],"sourcesContent":["import { useTranslation } from \"react-i18next\";\nimport { cn } from \"#/utils/utils\";\nimport { Typography } from \"#/ui/typography\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { SettingsNavRenderedItem } from \"#/hooks/use-settings-nav-items\";\nimport { SidebarNavLink } from \"#/components/features/sidebar/sidebar-nav-link\";\nimport { BackendSyncedSettingsBadge } from \"#/components/features/settings/backend-synced-settings-badge\";\nimport { CloudSettingsLink } from \"#/components/features/settings/cloud-settings-link\";\n\ninterface SettingsDesktopSidebarProps {\n navigationItems: SettingsNavRenderedItem[];\n}\n\n/**\n * Desktop sidebar — sibling of the scrolling main column (same pattern as\n * {@link ExtensionsNavigation}). Mobile drawer stays `position: fixed` outside\n * this row in the layout.\n */\nexport function SettingsDesktopSidebar({\n navigationItems,\n}: SettingsDesktopSidebarProps) {\n const { t } = useTranslation(\"openhands\");\n const desktopNavItems = navigationItems.filter(\n (item): item is Extract<SettingsNavRenderedItem, { type: \"item\" }> =>\n item.type === \"item\",\n );\n\n return (\n <aside\n data-testid=\"settings-navbar-desktop\"\n className={cn(\n \"hidden md:flex md:w-[260px] md:shrink-0 md:flex-col md:gap-2\",\n \"md:sticky md:top-8 md:self-start md:pl-8\",\n )}\n >\n <Typography.Text className=\"px-2 text-sm font-normal text-white\">\n {t(I18nKey.SETTINGS$TITLE)}\n </Typography.Text>\n <div className=\"flex flex-col gap-0.5 pt-0.5\">\n {desktopNavItems.map((renderedItem) => (\n <SidebarNavLink\n key={renderedItem.item.to}\n to={renderedItem.item.to}\n label={t(renderedItem.item.text as I18nKey)}\n end\n testId={`sidebar-settings-${renderedItem.item.to}`}\n icon={renderedItem.item.icon}\n // Items marked ``disabledByAcp`` (LLM, Condenser, …) are greyed\n // out and un-clickable while an ACP agent is active — those\n // pages have nothing to configure while a separate sub-agent\n // owns the LLM/condenser/MCP layers. The mobile drawer below\n // already does this via ``SettingsNavLink``; do the same on\n // desktop. The clientLoader-side redirect in ``routes/\n // settings.tsx`` handles direct URL navigation.\n disabled={renderedItem.disabled}\n disabledReason={\n renderedItem.disabled && renderedItem.disabledAgentName\n ? t(I18nKey.SETTINGS$AGENT_DISABLED_TOOLTIP, {\n agentName: renderedItem.disabledAgentName,\n })\n : undefined\n }\n />\n ))}\n <CloudSettingsLink />\n </div>\n <div className=\"px-2 pt-3\">\n <BackendSyncedSettingsBadge />\n </div>\n </aside>\n );\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"settings-desktop-sidebar.cjs","names":[],"sources":["../../../../src/components/features/settings/settings-desktop-sidebar.tsx"],"sourcesContent":["import { useTranslation } from \"react-i18next\";\nimport { cn } from \"#/utils/utils\";\nimport { Typography } from \"#/ui/typography\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { SettingsNavRenderedItem } from \"#/hooks/use-settings-nav-items\";\nimport { SidebarNavLink } from \"#/components/features/sidebar/sidebar-nav-link\";\nimport { AgentCanvasUpdateCard } from \"#/components/features/settings/agent-canvas-update-card\";\nimport { BackendSyncedSettingsBadge } from \"#/components/features/settings/backend-synced-settings-badge\";\nimport { CloudSettingsLink } from \"#/components/features/settings/cloud-settings-link\";\nimport { IntegrationsSettingsLink } from \"#/components/features/settings/integrations-settings-link\";\n\ninterface SettingsDesktopSidebarProps {\n navigationItems: SettingsNavRenderedItem[];\n}\n\n/**\n * Desktop sidebar — sibling of the scrolling main column (same pattern as\n * {@link ExtensionsNavigation}). Mobile drawer stays `position: fixed` outside\n * this row in the layout.\n */\nexport function SettingsDesktopSidebar({\n navigationItems,\n}: SettingsDesktopSidebarProps) {\n const { t } = useTranslation(\"openhands\");\n const desktopNavItems = navigationItems.filter(\n (item): item is Extract<SettingsNavRenderedItem, { type: \"item\" }> =>\n item.type === \"item\",\n );\n\n return (\n <aside\n data-testid=\"settings-navbar-desktop\"\n className={cn(\n \"hidden md:flex md:w-[260px] md:shrink-0 md:flex-col md:gap-2\",\n \"md:sticky md:top-8 md:self-start md:pl-8\",\n )}\n >\n <Typography.Text className=\"px-2 text-sm font-normal text-white\">\n {t(I18nKey.SETTINGS$TITLE)}\n </Typography.Text>\n <div className=\"flex flex-col gap-0.5 pt-0.5\">\n {desktopNavItems.map((renderedItem) => (\n <SidebarNavLink\n key={renderedItem.item.to}\n to={renderedItem.item.to}\n label={t(renderedItem.item.text as I18nKey)}\n end\n testId={`sidebar-settings-${renderedItem.item.to}`}\n icon={renderedItem.item.icon}\n // Items marked ``disabledByAcp`` (LLM, Condenser, …) are greyed\n // out and un-clickable while an ACP agent is active — those\n // pages have nothing to configure while a separate sub-agent\n // owns the LLM/condenser/MCP layers. The mobile drawer below\n // already does this via ``SettingsNavLink``; do the same on\n // desktop. The clientLoader-side redirect in ``routes/\n // settings.tsx`` handles direct URL navigation.\n disabled={renderedItem.disabled}\n disabledReason={\n renderedItem.disabled && renderedItem.disabledAgentName\n ? t(I18nKey.SETTINGS$AGENT_DISABLED_TOOLTIP, {\n agentName: renderedItem.disabledAgentName,\n })\n : undefined\n }\n />\n ))}\n <IntegrationsSettingsLink />\n <CloudSettingsLink />\n </div>\n <div className=\"px-2 pt-3\">\n <AgentCanvasUpdateCard />\n </div>\n <div className=\"px-2 pt-3\">\n <BackendSyncedSettingsBadge />\n </div>\n </aside>\n );\n}\n"],"mappings":"ggBAoBA,SAAgB,EAAuB,CACrC,mBAC8B,CAC9B,GAAM,CAAE,KAAM,EAAA,eAAe,YAAY,CACnC,EAAkB,EAAgB,OACrC,GACC,EAAK,OAAS,OACjB,CAED,OACE,EAAA,EAAA,MAAC,QAAD,CACE,cAAY,0BACZ,UAAW,EAAA,GACT,+DACA,2CACD,UALH,EAOE,EAAA,EAAA,KAAC,EAAA,WAAW,KAAZ,CAAiB,UAAU,+CACxB,EAAE,EAAA,QAAQ,eAAe,CACV,CAAA,EAClB,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,wCAAf,CACG,EAAgB,IAAK,IACpB,EAAA,EAAA,KAAC,EAAA,eAAD,CAEE,GAAI,EAAa,KAAK,GACtB,MAAO,EAAE,EAAa,KAAK,KAAgB,CAC3C,IAAA,GACA,OAAQ,oBAAoB,EAAa,KAAK,KAC9C,KAAM,EAAa,KAAK,KAQxB,SAAU,EAAa,SACvB,eACE,EAAa,UAAY,EAAa,kBAClC,EAAE,EAAA,QAAQ,gCAAiC,CACzC,UAAW,EAAa,kBACzB,CAAC,CACF,IAAA,GAEN,CArBK,EAAa,KAAK,GAqBvB,CACF,EACF,EAAA,EAAA,KAAC,EAAA,yBAAD,EAA4B,CAAA,EAC5B,EAAA,EAAA,KAAC,EAAA,kBAAD,EAAqB,CAAA,CACjB,IACN,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,sBACb,EAAA,EAAA,KAAC,EAAA,sBAAD,EAAyB,CAAA,CACrB,CAAA,EACN,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,sBACb,EAAA,EAAA,KAAC,EAAA,2BAAD,EAA8B,CAAA,CAC1B,CAAA,CACA"}
|
|
@@ -3,40 +3,50 @@ import { I18nKey as t } from "../../../i18n/declaration.js";
|
|
|
3
3
|
import { cn as n } from "../../../utils/utils.js";
|
|
4
4
|
import { Typography as r } from "../../../ui/typography.js";
|
|
5
5
|
import { SidebarNavLink as i } from "../sidebar/sidebar-nav-link.js";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
6
|
+
import { AgentCanvasUpdateCard as a } from "./agent-canvas-update-card.js";
|
|
7
|
+
import { BackendSyncedSettingsBadge as o } from "./backend-synced-settings-badge.js";
|
|
8
|
+
import { CloudSettingsLink as s } from "./cloud-settings-link.js";
|
|
9
|
+
import { IntegrationsSettingsLink as c } from "./integrations-settings-link.js";
|
|
10
|
+
import { jsx as l, jsxs as u } from "react/jsx-runtime";
|
|
9
11
|
//#region src/components/features/settings/settings-desktop-sidebar.tsx
|
|
10
|
-
function
|
|
11
|
-
let { t:
|
|
12
|
-
return /* @__PURE__ */
|
|
12
|
+
function d({ navigationItems: d }) {
|
|
13
|
+
let { t: f } = e("openhands"), p = d.filter((e) => e.type === "item");
|
|
14
|
+
return /* @__PURE__ */ u("aside", {
|
|
13
15
|
"data-testid": "settings-navbar-desktop",
|
|
14
16
|
className: n("hidden md:flex md:w-[260px] md:shrink-0 md:flex-col md:gap-2", "md:sticky md:top-8 md:self-start md:pl-8"),
|
|
15
17
|
children: [
|
|
16
|
-
/* @__PURE__ */
|
|
18
|
+
/* @__PURE__ */ l(r.Text, {
|
|
17
19
|
className: "px-2 text-sm font-normal text-white",
|
|
18
|
-
children:
|
|
20
|
+
children: f(t.SETTINGS$TITLE)
|
|
19
21
|
}),
|
|
20
|
-
/* @__PURE__ */
|
|
22
|
+
/* @__PURE__ */ u("div", {
|
|
21
23
|
className: "flex flex-col gap-0.5 pt-0.5",
|
|
22
|
-
children: [
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
24
|
+
children: [
|
|
25
|
+
p.map((e) => /* @__PURE__ */ l(i, {
|
|
26
|
+
to: e.item.to,
|
|
27
|
+
label: f(e.item.text),
|
|
28
|
+
end: !0,
|
|
29
|
+
testId: `sidebar-settings-${e.item.to}`,
|
|
30
|
+
icon: e.item.icon,
|
|
31
|
+
disabled: e.disabled,
|
|
32
|
+
disabledReason: e.disabled && e.disabledAgentName ? f(t.SETTINGS$AGENT_DISABLED_TOOLTIP, { agentName: e.disabledAgentName }) : void 0
|
|
33
|
+
}, e.item.to)),
|
|
34
|
+
/* @__PURE__ */ l(c, {}),
|
|
35
|
+
/* @__PURE__ */ l(s, {})
|
|
36
|
+
]
|
|
31
37
|
}),
|
|
32
|
-
/* @__PURE__ */
|
|
38
|
+
/* @__PURE__ */ l("div", {
|
|
33
39
|
className: "px-2 pt-3",
|
|
34
|
-
children: /* @__PURE__ */
|
|
40
|
+
children: /* @__PURE__ */ l(a, {})
|
|
41
|
+
}),
|
|
42
|
+
/* @__PURE__ */ l("div", {
|
|
43
|
+
className: "px-2 pt-3",
|
|
44
|
+
children: /* @__PURE__ */ l(o, {})
|
|
35
45
|
})
|
|
36
46
|
]
|
|
37
47
|
});
|
|
38
48
|
}
|
|
39
49
|
//#endregion
|
|
40
|
-
export {
|
|
50
|
+
export { d as SettingsDesktopSidebar };
|
|
41
51
|
|
|
42
52
|
//# sourceMappingURL=settings-desktop-sidebar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-desktop-sidebar.js","names":[],"sources":["../../../../src/components/features/settings/settings-desktop-sidebar.tsx"],"sourcesContent":["import { useTranslation } from \"react-i18next\";\nimport { cn } from \"#/utils/utils\";\nimport { Typography } from \"#/ui/typography\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { SettingsNavRenderedItem } from \"#/hooks/use-settings-nav-items\";\nimport { SidebarNavLink } from \"#/components/features/sidebar/sidebar-nav-link\";\nimport { BackendSyncedSettingsBadge } from \"#/components/features/settings/backend-synced-settings-badge\";\nimport { CloudSettingsLink } from \"#/components/features/settings/cloud-settings-link\";\n\ninterface SettingsDesktopSidebarProps {\n navigationItems: SettingsNavRenderedItem[];\n}\n\n/**\n * Desktop sidebar — sibling of the scrolling main column (same pattern as\n * {@link ExtensionsNavigation}). Mobile drawer stays `position: fixed` outside\n * this row in the layout.\n */\nexport function SettingsDesktopSidebar({\n navigationItems,\n}: SettingsDesktopSidebarProps) {\n const { t } = useTranslation(\"openhands\");\n const desktopNavItems = navigationItems.filter(\n (item): item is Extract<SettingsNavRenderedItem, { type: \"item\" }> =>\n item.type === \"item\",\n );\n\n return (\n <aside\n data-testid=\"settings-navbar-desktop\"\n className={cn(\n \"hidden md:flex md:w-[260px] md:shrink-0 md:flex-col md:gap-2\",\n \"md:sticky md:top-8 md:self-start md:pl-8\",\n )}\n >\n <Typography.Text className=\"px-2 text-sm font-normal text-white\">\n {t(I18nKey.SETTINGS$TITLE)}\n </Typography.Text>\n <div className=\"flex flex-col gap-0.5 pt-0.5\">\n {desktopNavItems.map((renderedItem) => (\n <SidebarNavLink\n key={renderedItem.item.to}\n to={renderedItem.item.to}\n label={t(renderedItem.item.text as I18nKey)}\n end\n testId={`sidebar-settings-${renderedItem.item.to}`}\n icon={renderedItem.item.icon}\n // Items marked ``disabledByAcp`` (LLM, Condenser, …) are greyed\n // out and un-clickable while an ACP agent is active — those\n // pages have nothing to configure while a separate sub-agent\n // owns the LLM/condenser/MCP layers. The mobile drawer below\n // already does this via ``SettingsNavLink``; do the same on\n // desktop. The clientLoader-side redirect in ``routes/\n // settings.tsx`` handles direct URL navigation.\n disabled={renderedItem.disabled}\n disabledReason={\n renderedItem.disabled && renderedItem.disabledAgentName\n ? t(I18nKey.SETTINGS$AGENT_DISABLED_TOOLTIP, {\n agentName: renderedItem.disabledAgentName,\n })\n : undefined\n }\n />\n ))}\n <CloudSettingsLink />\n </div>\n <div className=\"px-2 pt-3\">\n <BackendSyncedSettingsBadge />\n </div>\n </aside>\n );\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"settings-desktop-sidebar.js","names":[],"sources":["../../../../src/components/features/settings/settings-desktop-sidebar.tsx"],"sourcesContent":["import { useTranslation } from \"react-i18next\";\nimport { cn } from \"#/utils/utils\";\nimport { Typography } from \"#/ui/typography\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { SettingsNavRenderedItem } from \"#/hooks/use-settings-nav-items\";\nimport { SidebarNavLink } from \"#/components/features/sidebar/sidebar-nav-link\";\nimport { AgentCanvasUpdateCard } from \"#/components/features/settings/agent-canvas-update-card\";\nimport { BackendSyncedSettingsBadge } from \"#/components/features/settings/backend-synced-settings-badge\";\nimport { CloudSettingsLink } from \"#/components/features/settings/cloud-settings-link\";\nimport { IntegrationsSettingsLink } from \"#/components/features/settings/integrations-settings-link\";\n\ninterface SettingsDesktopSidebarProps {\n navigationItems: SettingsNavRenderedItem[];\n}\n\n/**\n * Desktop sidebar — sibling of the scrolling main column (same pattern as\n * {@link ExtensionsNavigation}). Mobile drawer stays `position: fixed` outside\n * this row in the layout.\n */\nexport function SettingsDesktopSidebar({\n navigationItems,\n}: SettingsDesktopSidebarProps) {\n const { t } = useTranslation(\"openhands\");\n const desktopNavItems = navigationItems.filter(\n (item): item is Extract<SettingsNavRenderedItem, { type: \"item\" }> =>\n item.type === \"item\",\n );\n\n return (\n <aside\n data-testid=\"settings-navbar-desktop\"\n className={cn(\n \"hidden md:flex md:w-[260px] md:shrink-0 md:flex-col md:gap-2\",\n \"md:sticky md:top-8 md:self-start md:pl-8\",\n )}\n >\n <Typography.Text className=\"px-2 text-sm font-normal text-white\">\n {t(I18nKey.SETTINGS$TITLE)}\n </Typography.Text>\n <div className=\"flex flex-col gap-0.5 pt-0.5\">\n {desktopNavItems.map((renderedItem) => (\n <SidebarNavLink\n key={renderedItem.item.to}\n to={renderedItem.item.to}\n label={t(renderedItem.item.text as I18nKey)}\n end\n testId={`sidebar-settings-${renderedItem.item.to}`}\n icon={renderedItem.item.icon}\n // Items marked ``disabledByAcp`` (LLM, Condenser, …) are greyed\n // out and un-clickable while an ACP agent is active — those\n // pages have nothing to configure while a separate sub-agent\n // owns the LLM/condenser/MCP layers. The mobile drawer below\n // already does this via ``SettingsNavLink``; do the same on\n // desktop. The clientLoader-side redirect in ``routes/\n // settings.tsx`` handles direct URL navigation.\n disabled={renderedItem.disabled}\n disabledReason={\n renderedItem.disabled && renderedItem.disabledAgentName\n ? t(I18nKey.SETTINGS$AGENT_DISABLED_TOOLTIP, {\n agentName: renderedItem.disabledAgentName,\n })\n : undefined\n }\n />\n ))}\n <IntegrationsSettingsLink />\n <CloudSettingsLink />\n </div>\n <div className=\"px-2 pt-3\">\n <AgentCanvasUpdateCard />\n </div>\n <div className=\"px-2 pt-3\">\n <BackendSyncedSettingsBadge />\n </div>\n </aside>\n );\n}\n"],"mappings":";;;;;;;;;;;AAoBA,SAAgB,EAAuB,EACrC,sBAC8B;CAC9B,IAAM,EAAE,SAAM,EAAe,YAAY,EACnC,IAAkB,EAAgB,QACrC,MACC,EAAK,SAAS,OACjB;AAED,QACE,kBAAC,SAAD;EACE,eAAY;EACZ,WAAW,EACT,gEACA,2CACD;YALH;GAOE,kBAAC,EAAW,MAAZ;IAAiB,WAAU;cACxB,EAAE,EAAQ,eAAe;IACV,CAAA;GAClB,kBAAC,OAAD;IAAK,WAAU;cAAf;KACG,EAAgB,KAAK,MACpB,kBAAC,GAAD;MAEE,IAAI,EAAa,KAAK;MACtB,OAAO,EAAE,EAAa,KAAK,KAAgB;MAC3C,KAAA;MACA,QAAQ,oBAAoB,EAAa,KAAK;MAC9C,MAAM,EAAa,KAAK;MAQxB,UAAU,EAAa;MACvB,gBACE,EAAa,YAAY,EAAa,oBAClC,EAAE,EAAQ,iCAAiC,EACzC,WAAW,EAAa,mBACzB,CAAC,GACF,KAAA;MAEN,EArBK,EAAa,KAAK,GAqBvB,CACF;KACF,kBAAC,GAAD,EAA4B,CAAA;KAC5B,kBAAC,GAAD,EAAqB,CAAA;KACjB;;GACN,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,GAAD,EAAyB,CAAA;IACrB,CAAA;GACN,kBAAC,OAAD;IAAK,WAAU;cACb,kBAAC,GAAD,EAA8B,CAAA;IAC1B,CAAA;GACA"}
|
|
@@ -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(`../../../utils/utils.cjs`),r=require(`../../../ui/typography.cjs`),i=require(`../../../icons/settings-gear.cjs`),a=require(`../../../icons/close.cjs`),o=require(`../sidebar/sidebar-layout.cjs`),s=require(`./backend-synced-settings-badge.cjs`),
|
|
1
|
+
require(`../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../../node_modules/react-i18next/dist/es/useTranslation.cjs`),t=require(`../../../i18n/declaration.cjs`),n=require(`../../../utils/utils.cjs`),r=require(`../../../ui/typography.cjs`),i=require(`../../../icons/settings-gear.cjs`),a=require(`../../../icons/close.cjs`),o=require(`../sidebar/sidebar-layout.cjs`),s=require(`./agent-canvas-update-card.cjs`),c=require(`./backend-synced-settings-badge.cjs`),l=require(`./cloud-settings-link.cjs`),u=require(`./integrations-settings-link.cjs`),d=require(`./settings-nav-header.cjs`),f=require(`./settings-nav-divider.cjs`),p=require(`./settings-nav-link.cjs`);let m=require(`react/jsx-runtime`);function h({isMobileMenuOpen:h,onCloseMobileMenu:g,navigationItems:_}){let{t:v}=e.useTranslation(`openhands`);return(0,m.jsxs)(m.Fragment,{children:[h&&(0,m.jsx)(`div`,{className:`fixed inset-0 z-40 bg-black bg-opacity-50 md:hidden`,onClick:g}),(0,m.jsxs)(`nav`,{"data-testid":`settings-navbar`,className:n.cn(`flex flex-col gap-6 transition-transform duration-300 ease-in-out`,`fixed inset-0 z-50 w-full bg-[var(--oh-surface-deep)] p-4 transform md:hidden`,h?`translate-x-0`:`-translate-x-full`),children:[(0,m.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,m.jsxs)(`div`,{className:`ml-1 flex items-center gap-2 sm:ml-4.5`,children:[(0,m.jsx)(i.default,{width:16,height:16}),(0,m.jsx)(r.Typography.H2,{children:v(t.I18nKey.SETTINGS$TITLE)})]}),(0,m.jsx)(`button`,{type:`button`,onClick:g,className:n.cn(`cursor-pointer rounded-md p-0.5 hover:bg-tertiary md:hidden`,o.navInteractiveTransitionClassName),"aria-label":v(t.I18nKey.SIDEBAR$CLOSE_MENU),children:(0,m.jsx)(a.default,{width:32,height:32})})]}),(0,m.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[_.map((e,t)=>e.type===`header`?(0,m.jsx)(d.SettingsNavHeader,{text:e.text},`header-${e.text}`):e.type===`divider`?(0,m.jsx)(f.SettingsNavDivider,{},`divider-${t}`):(0,m.jsx)(p.SettingsNavLink,{item:e.item,onClick:g,disabled:e.disabled,disabledAgentName:e.disabledAgentName},e.item.to)),(0,m.jsx)(u.IntegrationsSettingsLink,{}),(0,m.jsx)(l.CloudSettingsLink,{})]}),(0,m.jsx)(`div`,{className:`px-2 pt-3`,children:(0,m.jsx)(s.AgentCanvasUpdateCard,{})}),(0,m.jsx)(`div`,{className:`px-2 pt-3`,children:(0,m.jsx)(c.BackendSyncedSettingsBadge,{})})]})]})}exports.SettingsMobileDrawer=h;
|
|
2
2
|
//# sourceMappingURL=settings-mobile-drawer.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-mobile-drawer.cjs","names":[],"sources":["../../../../src/components/features/settings/settings-mobile-drawer.tsx"],"sourcesContent":["import { useTranslation } from \"react-i18next\";\nimport { cn } from \"#/utils/utils\";\nimport { Typography } from \"#/ui/typography\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport SettingsIcon from \"#/icons/settings-gear.svg?react\";\nimport CloseIcon from \"#/icons/close.svg?react\";\nimport { SettingsNavRenderedItem } from \"#/hooks/use-settings-nav-items\";\nimport { SettingsNavHeader } from \"./settings-nav-header\";\nimport { SettingsNavDivider } from \"./settings-nav-divider\";\nimport { SettingsNavLink } from \"./settings-nav-link\";\nimport { navInteractiveTransitionClassName } from \"#/components/features/sidebar/sidebar-layout\";\nimport { BackendSyncedSettingsBadge } from \"#/components/features/settings/backend-synced-settings-badge\";\nimport { CloudSettingsLink } from \"#/components/features/settings/cloud-settings-link\";\n\ninterface SettingsMobileDrawerProps {\n isMobileMenuOpen: boolean;\n onCloseMobileMenu: () => void;\n navigationItems: SettingsNavRenderedItem[];\n}\n\n/**\n * Mobile overlay + drawer. Rendered outside the scrolling flex row so `position:\n * fixed` does not interact with flex item sizing on desktop.\n */\nexport function SettingsMobileDrawer({\n isMobileMenuOpen,\n onCloseMobileMenu,\n navigationItems,\n}: SettingsMobileDrawerProps) {\n const { t } = useTranslation(\"openhands\");\n\n return (\n <>\n {isMobileMenuOpen && (\n <div\n className=\"fixed inset-0 z-40 bg-black bg-opacity-50 md:hidden\"\n onClick={onCloseMobileMenu}\n />\n )}\n <nav\n data-testid=\"settings-navbar\"\n className={cn(\n \"flex flex-col gap-6 transition-transform duration-300 ease-in-out\",\n \"fixed inset-0 z-50 w-full bg-[var(--oh-surface-deep)] p-4 transform md:hidden\",\n isMobileMenuOpen ? \"translate-x-0\" : \"-translate-x-full\",\n )}\n >\n <div className=\"flex items-center justify-between\">\n <div className=\"ml-1 flex items-center gap-2 sm:ml-4.5\">\n <SettingsIcon width={16} height={16} />\n <Typography.H2>{t(I18nKey.SETTINGS$TITLE)}</Typography.H2>\n </div>\n <button\n type=\"button\"\n onClick={onCloseMobileMenu}\n className={cn(\n \"cursor-pointer rounded-md p-0.5 hover:bg-tertiary md:hidden\",\n navInteractiveTransitionClassName,\n )}\n aria-label={t(I18nKey.SIDEBAR$CLOSE_MENU)}\n >\n <CloseIcon width={32} height={32} />\n </button>\n </div>\n\n <div className=\"flex flex-col gap-2\">\n {navigationItems.map((renderedItem, index) => {\n if (renderedItem.type === \"header\") {\n return (\n <SettingsNavHeader\n key={`header-${renderedItem.text}`}\n text={renderedItem.text}\n />\n );\n }\n\n if (renderedItem.type === \"divider\") {\n return <SettingsNavDivider key={`divider-${index}`} />;\n }\n\n return (\n <SettingsNavLink\n key={renderedItem.item.to}\n item={renderedItem.item}\n onClick={onCloseMobileMenu}\n disabled={renderedItem.disabled}\n disabledAgentName={renderedItem.disabledAgentName}\n />\n );\n })}\n <CloudSettingsLink />\n </div>\n\n <div className=\"px-2 pt-3\">\n <BackendSyncedSettingsBadge />\n </div>\n </nav>\n </>\n );\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"settings-mobile-drawer.cjs","names":[],"sources":["../../../../src/components/features/settings/settings-mobile-drawer.tsx"],"sourcesContent":["import { useTranslation } from \"react-i18next\";\nimport { cn } from \"#/utils/utils\";\nimport { Typography } from \"#/ui/typography\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport SettingsIcon from \"#/icons/settings-gear.svg?react\";\nimport CloseIcon from \"#/icons/close.svg?react\";\nimport { SettingsNavRenderedItem } from \"#/hooks/use-settings-nav-items\";\nimport { SettingsNavHeader } from \"./settings-nav-header\";\nimport { SettingsNavDivider } from \"./settings-nav-divider\";\nimport { SettingsNavLink } from \"./settings-nav-link\";\nimport { navInteractiveTransitionClassName } from \"#/components/features/sidebar/sidebar-layout\";\nimport { AgentCanvasUpdateCard } from \"#/components/features/settings/agent-canvas-update-card\";\nimport { BackendSyncedSettingsBadge } from \"#/components/features/settings/backend-synced-settings-badge\";\nimport { CloudSettingsLink } from \"#/components/features/settings/cloud-settings-link\";\nimport { IntegrationsSettingsLink } from \"#/components/features/settings/integrations-settings-link\";\n\ninterface SettingsMobileDrawerProps {\n isMobileMenuOpen: boolean;\n onCloseMobileMenu: () => void;\n navigationItems: SettingsNavRenderedItem[];\n}\n\n/**\n * Mobile overlay + drawer. Rendered outside the scrolling flex row so `position:\n * fixed` does not interact with flex item sizing on desktop.\n */\nexport function SettingsMobileDrawer({\n isMobileMenuOpen,\n onCloseMobileMenu,\n navigationItems,\n}: SettingsMobileDrawerProps) {\n const { t } = useTranslation(\"openhands\");\n\n return (\n <>\n {isMobileMenuOpen && (\n <div\n className=\"fixed inset-0 z-40 bg-black bg-opacity-50 md:hidden\"\n onClick={onCloseMobileMenu}\n />\n )}\n <nav\n data-testid=\"settings-navbar\"\n className={cn(\n \"flex flex-col gap-6 transition-transform duration-300 ease-in-out\",\n \"fixed inset-0 z-50 w-full bg-[var(--oh-surface-deep)] p-4 transform md:hidden\",\n isMobileMenuOpen ? \"translate-x-0\" : \"-translate-x-full\",\n )}\n >\n <div className=\"flex items-center justify-between\">\n <div className=\"ml-1 flex items-center gap-2 sm:ml-4.5\">\n <SettingsIcon width={16} height={16} />\n <Typography.H2>{t(I18nKey.SETTINGS$TITLE)}</Typography.H2>\n </div>\n <button\n type=\"button\"\n onClick={onCloseMobileMenu}\n className={cn(\n \"cursor-pointer rounded-md p-0.5 hover:bg-tertiary md:hidden\",\n navInteractiveTransitionClassName,\n )}\n aria-label={t(I18nKey.SIDEBAR$CLOSE_MENU)}\n >\n <CloseIcon width={32} height={32} />\n </button>\n </div>\n\n <div className=\"flex flex-col gap-2\">\n {navigationItems.map((renderedItem, index) => {\n if (renderedItem.type === \"header\") {\n return (\n <SettingsNavHeader\n key={`header-${renderedItem.text}`}\n text={renderedItem.text}\n />\n );\n }\n\n if (renderedItem.type === \"divider\") {\n return <SettingsNavDivider key={`divider-${index}`} />;\n }\n\n return (\n <SettingsNavLink\n key={renderedItem.item.to}\n item={renderedItem.item}\n onClick={onCloseMobileMenu}\n disabled={renderedItem.disabled}\n disabledAgentName={renderedItem.disabledAgentName}\n />\n );\n })}\n <IntegrationsSettingsLink />\n <CloudSettingsLink />\n </div>\n\n <div className=\"px-2 pt-3\">\n <AgentCanvasUpdateCard />\n </div>\n\n <div className=\"px-2 pt-3\">\n <BackendSyncedSettingsBadge />\n </div>\n </nav>\n </>\n );\n}\n"],"mappings":"ssBA0BA,SAAgB,EAAqB,CACnC,mBACA,oBACA,mBAC4B,CAC5B,GAAM,CAAE,KAAM,EAAA,eAAe,YAAY,CAEzC,OACE,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,CACG,IACC,EAAA,EAAA,KAAC,MAAD,CACE,UAAU,sDACV,QAAS,EACT,CAAA,EAEJ,EAAA,EAAA,MAAC,MAAD,CACE,cAAY,kBACZ,UAAW,EAAA,GACT,oEACA,gFACA,EAAmB,gBAAkB,oBACtC,UANH,EAQE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,6CAAf,EACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,kDAAf,EACE,EAAA,EAAA,KAAC,EAAA,QAAD,CAAc,MAAO,GAAI,OAAQ,GAAM,CAAA,EACvC,EAAA,EAAA,KAAC,EAAA,WAAW,GAAZ,CAAA,SAAgB,EAAE,EAAA,QAAQ,eAAe,CAAiB,CAAA,CACtD,IACN,EAAA,EAAA,KAAC,SAAD,CACE,KAAK,SACL,QAAS,EACT,UAAW,EAAA,GACT,8DACA,EAAA,kCACD,CACD,aAAY,EAAE,EAAA,QAAQ,mBAAmB,WAEzC,EAAA,EAAA,KAAC,EAAA,QAAD,CAAW,MAAO,GAAI,OAAQ,GAAM,CAAA,CAC7B,CAAA,CACL,IAEN,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,+BAAf,CACG,EAAgB,KAAK,EAAc,IAC9B,EAAa,OAAS,UAEtB,EAAA,EAAA,KAAC,EAAA,kBAAD,CAEE,KAAM,EAAa,KACnB,CAFK,UAAU,EAAa,OAE5B,CAIF,EAAa,OAAS,WACjB,EAAA,EAAA,KAAC,EAAA,mBAAD,EAA+C,CAAtB,WAAW,IAAW,EAItD,EAAA,EAAA,KAAC,EAAA,gBAAD,CAEE,KAAM,EAAa,KACnB,QAAS,EACT,SAAU,EAAa,SACvB,kBAAmB,EAAa,kBAChC,CALK,EAAa,KAAK,GAKvB,CAEJ,EACF,EAAA,EAAA,KAAC,EAAA,yBAAD,EAA4B,CAAA,EAC5B,EAAA,EAAA,KAAC,EAAA,kBAAD,EAAqB,CAAA,CACjB,IAEN,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,sBACb,EAAA,EAAA,KAAC,EAAA,sBAAD,EAAyB,CAAA,CACrB,CAAA,EAEN,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,sBACb,EAAA,EAAA,KAAC,EAAA,2BAAD,EAA8B,CAAA,CAC1B,CAAA,CACF,GACL,CAAA,CAAA"}
|