@openhands/agent-canvas 1.10.0 → 1.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/README.windows.md +2 -2
- package/build/assets/{acp-providers-DLe_gVDY.js → acp-providers-BkL3HWa3.js} +1 -1
- package/build/assets/{active-backend-context-B0wI7OzM.js → active-backend-context-BBvP-bI2.js} +1 -1
- package/build/assets/{agent-context-settings-CaQtdNA-.js → agent-context-settings-Bno1nwPL.js} +1 -1
- package/build/assets/{agent-profiles-settings-CvuErjp6.js → agent-profiles-settings-DqoS7RL3.js} +1 -1
- package/build/assets/agent-server-conversation-service.api-0RztSdJJ.js +86 -0
- package/build/assets/agent-settings-BJHryp65.js +1 -0
- package/build/assets/{agent-settings-UE-U4Xii.js → agent-settings-h8hQz-IU.js} +1 -1
- package/build/assets/{alert-banner-BMaOtTCG.js → alert-banner-lrK-2_0Y.js} +1 -1
- package/build/assets/{api-key-entry-screen-Cy66vT4D.js → api-key-entry-screen-Qsb83VX1.js} +1 -1
- package/build/assets/{app-settings-9ok42bV6.js → app-settings-r1RUbgGi.js} +1 -1
- package/build/assets/{automation-detail-fuITm6i3.js → automation-detail-7LkL91j9.js} +3 -3
- package/build/assets/{automation-export-CRq40mux.js → automation-export-U2QNyNy6.js} +1 -1
- package/build/assets/{automation-setup-route-EXDazOHW.js → automation-setup-route-Bel9_Lue.js} +1 -1
- package/build/assets/{automation-templates-BArZsaxP.js → automation-templates-CRLDssaI.js} +1 -1
- package/build/assets/{automations-list-CG4HKOTn.js → automations-list-B2iV3ZKW.js} +1 -1
- package/build/assets/{back-nav-button-BZB6H7xz.js → back-nav-button-B3pYwmUJ.js} +1 -1
- package/build/assets/backend-form-modal-OroTqnAv.js +1 -0
- package/build/assets/{backend-synced-settings-badge-B_NXJ3u1.js → backend-synced-settings-badge-DB4717Iu.js} +1 -1
- package/build/assets/{badge-C64c-7PO.js → badge-yR53enbU.js} +1 -1
- package/build/assets/{base-modal-C0RQPug5.js → base-modal-3NmIOKDm.js} +1 -1
- package/build/assets/{brand-button-DJmFCyMK.js → brand-button-CJcwjnfb.js} +1 -1
- package/build/assets/{browser-D3gd2n83.js → browser--eoQOo4M.js} +1 -1
- package/build/assets/{browser-tab-BicAWuJ1.js → browser-tab-A94o33Vn.js} +1 -1
- package/build/assets/{chat-send-button-CCrH1E8u.js → chat-send-button-B8n6-DQA.js} +1 -1
- package/build/assets/{circle-plus-check-toggle-CB_sNERY.js → circle-plus-check-toggle-BVzv5EkZ.js} +1 -1
- package/build/assets/{cloud-funnel-analytics-XynamQGU.js → cloud-funnel-analytics-CBQdPZl_.js} +1 -1
- package/build/assets/{combobox-caret-Bwiifgjs.js → combobox-caret-BlmRwiM8.js} +1 -1
- package/build/assets/command-menu-PsRXVBz2.js +1 -0
- package/build/assets/{condenser-settings-cNGy75gq.js → condenser-settings-w7L3EFvm.js} +1 -1
- package/build/assets/{confirmation-modal-BATFmFyP.js → confirmation-modal-DAH0XtOp.js} +1 -1
- package/build/assets/{context-menu-list-item-DhJCcBA0.js → context-menu-list-item-BQhmFVEK.js} +1 -1
- package/build/assets/{conversation-Csdxh9Xt.js → conversation-BUzBZAc-.js} +4 -4
- package/build/assets/conversation-panel-pzAKsSDb.js +1 -0
- package/build/assets/conversation-pzAKsSDb.js +1 -0
- package/build/assets/{conversation-state-store-C2QzhPaK.js → conversation-state-store-Bs8gA263.js} +1 -1
- package/build/assets/{conversation-tab-empty-state-D3fb5xIA.js → conversation-tab-empty-state-C9sfDOlt.js} +1 -1
- package/build/assets/{copy-to-clipboard-button-c4MQwKGj.js → copy-to-clipboard-button-DatoElj8.js} +1 -1
- package/build/assets/{device-verify-oFpQoLgm.js → device-verify-BIjXeW9N.js} +1 -1
- package/build/assets/{dropdown-classes-f91ARMV1.js → dropdown-classes-zFW7qPSK.js} +1 -1
- package/build/assets/{entry.client-BCzY2Bf3.js → entry.client-DzbDyLkV.js} +2 -2
- package/build/assets/{enum-filter-dropdown-HG3q3rkV.js → enum-filter-dropdown-CctILg5t.js} +1 -1
- package/build/assets/{environment-switch-overlay-CquZXolz.js → environment-switch-overlay-Cvmo6clk.js} +1 -1
- package/build/assets/{extensions-hub-BeweE0PW.js → extensions-hub-DOmHPGTA.js} +1 -1
- package/build/assets/{extensions-navigation-Dd58NlUF.js → extensions-navigation-6zU5M1pa.js} +1 -1
- package/build/assets/{files-tab-CLLG55-q.js → files-tab-BzofBmF4.js} +1 -1
- package/build/assets/{form-control-classes-pHtZUI6K.js → form-control-classes-DLN3Qgub.js} +1 -1
- package/build/assets/{format-relative-time-6-3uvOXe.js → format-relative-time-DGPQlPx0.js} +1 -1
- package/build/assets/{git-provider-icon-wg7ShB98.js → git-provider-icon-BLMlwy02.js} +1 -1
- package/build/assets/{git-repo-dropdown-CWnaUyxL.js → git-repo-dropdown-B7RvO70z.js} +1 -1
- package/build/assets/git-repo-dropdown-B_PTq4ol.js +1 -0
- package/build/assets/{highlighted-source-view-DBtI3por.js → highlighted-source-view-CgJfD5VT.js} +1 -1
- package/build/assets/{home-BpZQkDWM.js → home-DEZaZqYv.js} +1 -1
- package/build/assets/home-r89Vj2td.js +1 -0
- package/build/assets/{home-store-DM4qw1lF.js → home-store-D7CjMN_-.js} +1 -1
- package/build/assets/index-home-r89Vj2td.js +1 -0
- package/build/assets/install-server-modal-BTwK5lbi.js +1 -0
- package/build/assets/{kebab-menu-item-content-By16Tm_0.js → kebab-menu-item-content-C4CkeiJO.js} +1 -1
- package/build/assets/{launch-C9uijypN.js → launch-DVlx4v9o.js} +1 -1
- package/build/assets/{llm-not-configured-banner-DrBrhfN0.js → llm-not-configured-banner-CwKu8C6g.js} +2 -2
- package/build/assets/llm-settings-BJotLQND.js +1 -0
- package/build/assets/llm-settings-CDM-5H2A.js +1 -0
- package/build/assets/{llm-subscription-service-DwjJ8-_X.js → llm-subscription-service-7eVfDIE1.js} +1 -1
- package/build/assets/{loading-spinner-6Yj-YyoS.js → loading-spinner-CN3riY7k.js} +1 -1
- package/build/assets/{manage-backends-modal-DrwErS0N.js → manage-backends-modal-HNWKLYhq.js} +1 -1
- package/build/assets/manifest-2a36a8f8.js +1 -0
- package/build/assets/{manifest-subpage-layout-CtqVwIvJ.js → manifest-subpage-layout-D-m-h8_t.js} +1 -1
- package/build/assets/map-provider-7Bp2aih5.js +1 -0
- package/build/assets/markdown-renderer-BiiiIznl.js +8 -0
- package/build/assets/mcp-gLgPP7AS.js +9 -0
- package/build/assets/{mcp-marketplace-utils-BMnYz0Gc.js → mcp-marketplace-utils-Dr_HG_ol.js} +1 -1
- package/build/assets/messages-D1cbVhRK.js +40 -0
- package/build/assets/{modal-body-BHGCSAtj.js → modal-body-duRaxj_K.js} +1 -1
- package/build/assets/{modal-classes-DSTLuxkA.js → modal-classes-CLEXO6dj.js} +1 -1
- package/build/assets/{modal-close-button-dheWZ2ys.js → modal-close-button-D0aT02hs.js} +1 -1
- package/build/assets/npm-DRzJF5Zn.js +1 -0
- package/build/assets/{onboarding-5CZvRBbh.js → onboarding-DSr8hOpk.js} +1 -1
- package/build/assets/{onboarding-modal-CD2ehuxt.js → onboarding-modal-C6Euf7N4.js} +1 -1
- package/build/assets/{organization-service.api-Dsuoep0g.js → organization-service.api-C4GYWwj9.js} +1 -1
- package/build/assets/{planner-tab-DeO7Thb0.js → planner-tab-CZcguxTK.js} +1 -1
- package/build/assets/{plugins-management-service-C9f75R6X.js → plugins-management-service-BmDzOQsd.js} +1 -1
- package/build/assets/{profiles-service.api-Dl20_2IM.js → profiles-service.api-CoLTwjc1.js} +1 -1
- package/build/assets/{providers-CeuhK46N.js → providers-tBzTpz1w.js} +1 -1
- package/build/assets/{proxy-CIGI9zQC.js → proxy-DCI9S-LA.js} +1 -1
- package/build/assets/recommended-automations-launcher-BbJAJVED.js +1 -0
- package/build/assets/root-BfM_kC_d.css +1 -0
- package/build/assets/root-gstBEjty.js +2 -0
- package/build/assets/root-layout-BIAFLP9p.js +2 -0
- package/build/assets/{schema-field-z2vSLuLo.js → schema-field-zhsVDllR.js} +1 -1
- package/build/assets/{sdk-section-page-BnCXAytf.js → sdk-section-page-CS4GWn0y.js} +1 -1
- package/build/assets/{secrets-service-DGUNlwQd.js → secrets-service-DjgGduXk.js} +1 -1
- package/build/assets/{secrets-settings-DUmML_dK.js → secrets-settings-f-qahfbi.js} +1 -1
- package/build/assets/{segmented-toggle-eSofF7gn.js → segmented-toggle-SmvsR3jW.js} +1 -1
- package/build/assets/settings-DQd0xLEw.js +1 -0
- package/build/assets/{settings-dropdown-input-Cx4g7Xfl.js → settings-dropdown-input-TWIeiG02.js} +1 -1
- package/build/assets/{settings-index-BECdgecg.js → settings-index-BVwy9JEp.js} +1 -1
- package/build/assets/{settings-input-BQY115xH.js → settings-input-D61Vzp9e.js} +1 -1
- package/build/assets/{settings-list-classes-C9cLrrcc.js → settings-list-classes-sE0ASr1s.js} +1 -1
- package/build/assets/{settings-modal-ChBJNTdd.js → settings-modal-D6D5ngET.js} +1 -1
- package/build/assets/{settings-service.api-Dz9cZyvx.js → settings-service.api-DZp7E7A9.js} +1 -1
- package/build/assets/{settings-switch-BIodMVz9.js → settings-switch-Drt-rF5s.js} +1 -1
- package/build/assets/{settings-utils-BL_Z9uIe.js → settings-utils-gw2ppAvw.js} +1 -1
- package/build/assets/{shared-conversation-CSF0aTuE.js → shared-conversation-DIxZjElr.js} +1 -1
- package/build/assets/{wrench-DRitTfwe.js → shield-check-D2cpEpv3.js} +1 -1
- package/build/assets/{sidebar-layout-DEycoFd_.js → sidebar-layout-Dxg6zc2K.js} +1 -1
- package/build/assets/{sidebar-mobile-menu-toggle-DeRvTupV.js → sidebar-mobile-menu-toggle-OoZBHxaT.js} +1 -1
- package/build/assets/{sidebar-nav-link-BjpQ-NVc.js → sidebar-nav-link-CxLoG-dG.js} +1 -1
- package/build/assets/sidebar-store-BJeYY-E9.js +1 -0
- package/build/assets/{skill-card-pill-row-BH6fPGba.js → skill-card-pill-row-B_BYBONu.js} +1 -1
- package/build/assets/{skill-icon-badge-D4uznfjU.js → skill-icon-badge-CN41Hy9l.js} +1 -1
- package/build/assets/{skill-scope-DH_AUUUP.js → skill-scope-B1Per5XI.js} +1 -1
- package/build/assets/{skills-plugins-vfvOk34h.js → skills-plugins-B3AO6sMz.js} +1 -1
- package/build/assets/skills-settings-DmmgJ6CT.js +2 -0
- package/build/assets/{styled-tooltip-CQ9JEFiO.js → styled-tooltip-C5C07RQC.js} +1 -1
- package/build/assets/{task-list-tab-DeF_uXdw.js → task-list-tab-C19Q_JNf.js} +1 -1
- package/build/assets/{terminal-DRc4rup7.js → terminal-CbuMRYal.js} +1 -1
- package/build/assets/{toggle-switch--8n8NeV_.js → toggle-switch-CIioisto.js} +1 -1
- package/build/assets/{typography-BSbUhJPn.js → typography-D9tiHct7.js} +1 -1
- package/build/assets/{use-acp-credential-form-BGKFi1VL.js → use-acp-credential-form-DJmmJKMo.js} +1 -1
- package/build/assets/{use-activate-agent-profile-2nvALjC-.js → use-activate-agent-profile-CeFfYwu_.js} +1 -1
- package/build/assets/{use-agent-profiles-BlQA67MW.js → use-agent-profiles-BHLkLbRR.js} +1 -1
- package/build/assets/{use-can-manage-org-profiles-Clw5Dh1s.js → use-can-manage-org-profiles-Bu4y8gSx.js} +1 -1
- package/build/assets/{use-cloud-current-user-id-B8AQSQFM.js → use-cloud-current-user-id-QD9x3ySO.js} +1 -1
- package/build/assets/{use-config-C3zGuUQI.js → use-config-CPwqciXN.js} +1 -1
- package/build/assets/{use-create-conversation-FaP0kUpg.js → use-create-conversation-DWaSVUOB.js} +1 -1
- package/build/assets/{use-create-secret-CgQ3pXd6.js → use-create-secret-BsOfOLvg.js} +1 -1
- package/build/assets/{use-llm-profiles-C-tDO6UB.js → use-llm-profiles-CU8ah1pz.js} +1 -1
- package/build/assets/{use-manifest-capabilities-DLP5wCxp.js → use-manifest-capabilities-DBYPjyV6.js} +1 -1
- package/build/assets/{use-onboarding-completion-BiCdXvlU.js → use-onboarding-completion-CtNJxkXG.js} +1 -1
- package/build/assets/{use-plugins-marketplace-DRFNLBlr.js → use-plugins-marketplace-ZEA-gyM9.js} +1 -1
- package/build/assets/{use-save-agent-profile-CaGVAudI.js → use-save-agent-profile-DgI_Uz9a.js} +1 -1
- package/build/assets/{use-save-settings-C9B8Y-h3.js → use-save-settings-pSjRhD_m.js} +1 -1
- package/build/assets/{use-settings-3RcgdUuZ.js → use-settings-BHWsOcIG.js} +1 -1
- package/build/assets/use-settings-nav-items-CQgkxUbV.js +16 -0
- package/build/assets/{use-tracking-CTtkLAmx.js → use-tracking-CGCsBWhg.js} +1 -1
- package/build/assets/{use-user-conversation-Bei82QsZ.js → use-user-conversation-DRfEU8x0.js} +1 -1
- package/build/assets/utils-DPQfkd-7.js +1 -0
- package/build/assets/{verification-settings-nD61Ijph.js → verification-settings-BItwt998.js} +1 -1
- package/build/assets/wrench-B1_H-tL1.js +1 -0
- package/build/index.html +4 -4
- package/build/locales/ar/openhands.json +39 -2
- package/build/locales/ca/openhands.json +39 -2
- package/build/locales/de/openhands.json +39 -2
- package/build/locales/en/openhands.json +39 -2
- package/build/locales/es/openhands.json +39 -2
- package/build/locales/fr/openhands.json +39 -2
- package/build/locales/it/openhands.json +39 -2
- package/build/locales/ja/openhands.json +39 -2
- package/build/locales/ko-KR/openhands.json +39 -2
- package/build/locales/no/openhands.json +39 -2
- package/build/locales/pt/openhands.json +39 -2
- package/build/locales/tr/openhands.json +39 -2
- package/build/locales/uk/openhands.json +39 -2
- package/build/locales/zh-CN/openhands.json +39 -2
- package/build/locales/zh-TW/openhands.json +39 -2
- package/config/defaults.json +1 -1
- package/dist/api/agent-server-adapter.cjs +3 -3
- package/dist/api/agent-server-adapter.cjs.map +1 -1
- package/dist/api/agent-server-adapter.d.ts +32 -5
- package/dist/api/agent-server-adapter.js +120 -91
- package/dist/api/agent-server-adapter.js.map +1 -1
- package/dist/api/cloud/conversation-service.api.cjs +1 -1
- package/dist/api/cloud/conversation-service.api.cjs.map +1 -1
- package/dist/api/cloud/conversation-service.api.d.ts +19 -2
- package/dist/api/cloud/conversation-service.api.js +51 -47
- package/dist/api/cloud/conversation-service.api.js.map +1 -1
- package/dist/api/conversation-file-upload.api.cjs +1 -1
- package/dist/api/conversation-file-upload.api.js +10 -10
- 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 +55 -61
- package/dist/api/conversation-service/agent-server-conversation-service.api.js.map +1 -1
- package/dist/api/event-service/event-service.api.cjs +1 -1
- package/dist/api/event-service/event-service.api.js +12 -12
- package/dist/api/launch-child-conversation-client-tool.cjs +47 -0
- package/dist/api/launch-child-conversation-client-tool.cjs.map +1 -0
- package/dist/api/launch-child-conversation-client-tool.d.ts +3 -0
- package/dist/api/launch-child-conversation-client-tool.js +93 -0
- package/dist/api/launch-child-conversation-client-tool.js.map +1 -0
- package/dist/api/open-hands.types.d.ts +1 -1
- package/dist/api/workspace-upload-path.cjs +1 -1
- package/dist/api/workspace-upload-path.js +8 -8
- package/dist/components/conversation-events/chat/event-content-helpers/get-action-event-title.cjs +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/get-action-event-title.cjs.map +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/get-action-event-title.js +24 -18
- package/dist/components/conversation-events/chat/event-content-helpers/get-action-event-title.js.map +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.cjs +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.cjs.map +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.js +5 -0
- package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.js.map +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.cjs +2 -2
- package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.cjs.map +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.js +11 -7
- package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.cjs +1 -2
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.d.ts +2 -8
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.js +48 -51
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-meta-chip.cjs +2 -0
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-meta-chip.cjs.map +1 -0
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-meta-chip.d.ts +12 -0
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-meta-chip.js +6 -0
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-meta-chip.js.map +1 -0
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.d.ts +16 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.js +95 -78
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-repo-link.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-repo-link.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-repo-link.js +40 -38
- package/dist/components/features/conversation-panel/conversation-card/conversation-repo-link.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.cjs +2 -0
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.cjs.map +1 -0
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.d.ts +14 -0
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.js +167 -0
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.js.map +1 -0
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.cjs +2 -0
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.cjs.map +1 -0
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.d.ts +63 -0
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.js +66 -0
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.js.map +1 -0
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-icons.cjs +2 -0
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-icons.cjs.map +1 -0
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-icons.d.ts +15 -0
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-icons.js +117 -0
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-icons.js.map +1 -0
- package/dist/components/features/conversation-panel/conversation-card/no-repository.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-card/no-repository.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/no-repository.js +30 -19
- package/dist/components/features/conversation-panel/conversation-card/no-repository.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-panel-filter-menu.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-panel-filter-menu.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-panel-filter-menu.d.ts +7 -2
- package/dist/components/features/conversation-panel/conversation-panel-filter-menu.js +146 -104
- package/dist/components/features/conversation-panel/conversation-panel-filter-menu.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-panel-list-helpers.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-panel-list-helpers.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-panel-list-helpers.d.ts +20 -0
- package/dist/components/features/conversation-panel/conversation-panel-list-helpers.js +53 -27
- package/dist/components/features/conversation-panel/conversation-panel-list-helpers.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-panel.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-panel.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-panel.js +226 -213
- package/dist/components/features/conversation-panel/conversation-panel.js.map +1 -1
- package/dist/components/features/settings/agent-canvas-update-card.cjs +1 -1
- package/dist/components/features/settings/agent-canvas-update-card.cjs.map +1 -1
- package/dist/components/features/settings/agent-canvas-update-card.d.ts +10 -5
- package/dist/components/features/settings/agent-canvas-update-card.js +223 -149
- package/dist/components/features/settings/agent-canvas-update-card.js.map +1 -1
- package/dist/components/features/settings/agent-canvas-version-modal.cjs +2 -0
- package/dist/components/features/settings/agent-canvas-version-modal.cjs.map +1 -0
- package/dist/components/features/settings/agent-canvas-version-modal.d.ts +11 -0
- package/dist/components/features/settings/agent-canvas-version-modal.js +166 -0
- package/dist/components/features/settings/agent-canvas-version-modal.js.map +1 -0
- package/dist/components/features/settings/agent-canvas-version-tile.cjs +2 -0
- package/dist/components/features/settings/agent-canvas-version-tile.cjs.map +1 -0
- package/dist/components/features/settings/agent-canvas-version-tile.d.ts +13 -0
- package/dist/components/features/settings/agent-canvas-version-tile.js +60 -0
- package/dist/components/features/settings/agent-canvas-version-tile.js.map +1 -0
- 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 +1 -1
- 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 +1 -1
- package/dist/components/features/settings/settings-mobile-drawer.js.map +1 -1
- package/dist/components/features/sidebar/sidebar-rail-body.cjs +1 -1
- package/dist/components/features/sidebar/sidebar-rail-body.cjs.map +1 -1
- package/dist/components/features/sidebar/sidebar-rail-body.js +109 -108
- package/dist/components/features/sidebar/sidebar-rail-body.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 +9 -9
- 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 +1 -1
- package/dist/config/defaults.js.map +1 -1
- package/dist/constants/child-conversation.cjs +2 -0
- package/dist/constants/child-conversation.cjs.map +1 -0
- package/dist/constants/child-conversation.d.ts +29 -0
- package/dist/constants/child-conversation.js +6 -0
- package/dist/constants/child-conversation.js.map +1 -0
- package/dist/contexts/conversation-websocket-context.cjs +3 -3
- package/dist/contexts/conversation-websocket-context.cjs.map +1 -1
- package/dist/contexts/conversation-websocket-context.js +189 -188
- package/dist/contexts/conversation-websocket-context.js.map +1 -1
- package/dist/hooks/chat/use-model-interceptor.cjs +1 -1
- package/dist/hooks/chat/use-model-interceptor.js +6 -6
- package/dist/hooks/mutation/use-create-conversation.cjs +1 -1
- package/dist/hooks/mutation/use-create-conversation.js +6 -6
- package/dist/i18n/declaration.cjs +1 -1
- package/dist/i18n/declaration.cjs.map +1 -1
- package/dist/i18n/declaration.d.ts +38 -1
- package/dist/i18n/declaration.js +1 -1
- package/dist/i18n/declaration.js.map +1 -1
- package/dist/i18n/translation.cjs +2 -2
- package/dist/i18n/translation.cjs.map +1 -1
- package/dist/i18n/translation.js +644 -15
- package/dist/i18n/translation.js.map +1 -1
- package/dist/icons/docker.cjs +2 -0
- package/dist/icons/docker.cjs.map +1 -0
- package/dist/icons/docker.js +19 -0
- package/dist/icons/docker.js.map +1 -0
- package/dist/icons/npm.cjs +2 -0
- package/dist/icons/npm.cjs.map +1 -0
- package/dist/icons/npm.js +19 -0
- package/dist/icons/npm.js.map +1 -0
- package/dist/locales/ar/openhands.json +39 -2
- package/dist/locales/ca/openhands.json +39 -2
- package/dist/locales/de/openhands.json +39 -2
- package/dist/locales/en/openhands.json +39 -2
- package/dist/locales/es/openhands.json +39 -2
- package/dist/locales/fr/openhands.json +39 -2
- package/dist/locales/it/openhands.json +39 -2
- package/dist/locales/ja/openhands.json +39 -2
- package/dist/locales/ko-KR/openhands.json +39 -2
- package/dist/locales/no/openhands.json +39 -2
- package/dist/locales/pt/openhands.json +39 -2
- package/dist/locales/tr/openhands.json +39 -2
- package/dist/locales/uk/openhands.json +39 -2
- package/dist/locales/zh-CN/openhands.json +39 -2
- package/dist/locales/zh-TW/openhands.json +39 -2
- package/dist/node_modules/@openhands/typescript-client/dist/index.cjs +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/index.js +1 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/briefcase.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/briefcase.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/briefcase.js +16 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/briefcase.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/building-2.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/building-2.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/building-2.js +27 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/building-2.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-arrow-up.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-arrow-up.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-arrow-up.js +21 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-arrow-up.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-user-round.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-user-round.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-user-round.js +23 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-user-round.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/cloud-cog.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/cloud-cog.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/cloud-cog.js +43 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/cloud-cog.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/earth.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/earth.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/earth.js +25 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/earth.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/flag.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/flag.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/flag.js +9 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/flag.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/folder-git-2.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/folder-git-2.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/folder-git-2.js +27 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/folder-git-2.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/folder-key.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/folder-key.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/folder-key.js +25 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/folder-key.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/git-pull-request.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/git-pull-request.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/git-pull-request.js +30 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/git-pull-request.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/hash.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/hash.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/hash.js +35 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/hash.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/house.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/house.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/house.js +12 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/house.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/id-card.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/id-card.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/id-card.js +33 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/id-card.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/key-round.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/key-round.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/key-round.js +15 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/key-round.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/layers.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/layers.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/layers.js +19 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/layers.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/link-2.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/link-2.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/link-2.js +22 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/link-2.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/mails.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/mails.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/mails.js +23 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/mails.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/messages-square.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/messages-square.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/messages-square.js +12 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/messages-square.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/plug.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/plug.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/plug.js +23 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/plug.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/square-kanban.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/square-kanban.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/square-kanban.js +27 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/square-kanban.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/ticket.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/ticket.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/ticket.js +23 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/ticket.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/users-round.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/users-round.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/users-round.js +21 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/users-round.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/waypoints.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/waypoints.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/waypoints.js +43 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/waypoints.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/webhook.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/webhook.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/webhook.js +19 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/webhook.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/workflow.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/workflow.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/workflow.js +27 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/workflow.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/wrench.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/wrench.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/wrench.js +9 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/wrench.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/zap.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/zap.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/zap.js +9 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/zap.js.map +1 -0
- package/dist/package.cjs +1 -1
- package/dist/package.cjs.map +1 -1
- package/dist/package.js +6 -3
- package/dist/package.js.map +1 -1
- package/dist/services/child-conversation-launch.cjs +2 -0
- package/dist/services/child-conversation-launch.cjs.map +1 -0
- package/dist/services/child-conversation-launch.d.ts +41 -0
- package/dist/services/child-conversation-launch.js +182 -0
- package/dist/services/child-conversation-launch.js.map +1 -0
- package/dist/stores/conversation-panel-preferences-store.cjs +1 -1
- package/dist/stores/conversation-panel-preferences-store.cjs.map +1 -1
- package/dist/stores/conversation-panel-preferences-store.d.ts +5 -1
- package/dist/stores/conversation-panel-preferences-store.js +8 -2
- package/dist/stores/conversation-panel-preferences-store.js.map +1 -1
- package/dist/types/agent-server/core/base/action.d.ts +17 -1
- package/dist/types/agent-server/core/base/base.d.ts +2 -1
- package/dist/types/agent-server/type-guards.cjs +1 -1
- package/dist/types/agent-server/type-guards.cjs.map +1 -1
- package/dist/types/agent-server/type-guards.d.ts +8 -1
- package/dist/types/agent-server/type-guards.js +4 -3
- package/dist/types/agent-server/type-guards.js.map +1 -1
- package/dist/types/automation.d.ts +14 -0
- package/dist/utils/custom-toast-handlers.cjs +1 -1
- package/dist/utils/custom-toast-handlers.cjs.map +1 -1
- package/dist/utils/custom-toast-handlers.js +18 -1
- package/dist/utils/custom-toast-handlers.js.map +1 -1
- package/package.json +6 -3
- package/scripts/brand-dev-electron.mjs +244 -0
- package/scripts/check-translation-completeness.cjs +4 -0
- package/scripts/generate-icons.mjs +109 -0
- package/build/assets/agent-server-conversation-service.api-km_8sOVf.js +0 -41
- package/build/assets/agent-settings-nmO-KSXr.js +0 -1
- package/build/assets/backend-form-modal-B_lXjOGa.js +0 -1
- package/build/assets/command-menu-CA3IjGNc.js +0 -1
- package/build/assets/conversation-B6t6EiVp.js +0 -1
- package/build/assets/conversation-panel-B6t6EiVp.js +0 -1
- package/build/assets/copy-DaHuDtG4.js +0 -1
- package/build/assets/git-repo-dropdown-TzOuG5Ef.js +0 -1
- package/build/assets/home-OEx0XtfP.js +0 -1
- package/build/assets/index-home-OEx0XtfP.js +0 -1
- package/build/assets/info-C9lpK5pw.js +0 -1
- package/build/assets/install-server-modal-DnjZrJUy.js +0 -1
- package/build/assets/list-filter-C86CBRDE.js +0 -1
- package/build/assets/llm-settings-CRsLqxgu.js +0 -1
- package/build/assets/llm-settings-RBm_3kNm.js +0 -1
- package/build/assets/manifest-c352d453.js +0 -1
- package/build/assets/map-provider-CXU6issd.js +0 -1
- package/build/assets/markdown-renderer-lsvsp7jn.js +0 -8
- package/build/assets/mcp-DD4hPTRE.js +0 -9
- package/build/assets/messages-Dt77e0qi.js +0 -40
- package/build/assets/recommended-automations-launcher-6xmbf7lh.js +0 -1
- package/build/assets/root-BQPNqNvD.js +0 -2
- package/build/assets/root-BeuHFY2s.css +0 -1
- package/build/assets/root-layout-Dl_2CDoq.js +0 -3
- package/build/assets/settings-Co-M5bK9.js +0 -1
- package/build/assets/sidebar-store-B04sX8aP.js +0 -1
- package/build/assets/skills-settings-DnbIu2eO.js +0 -2
- package/build/assets/use-settings-nav-items-y-Oyc93G.js +0 -16
- package/build/assets/utils-BX9XJ0IE.js +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.cjs +0 -2
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.cjs.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.js +0 -9
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.js.map +0 -1
|
@@ -1,170 +1,244 @@
|
|
|
1
1
|
import { useTranslation as e } from "../../../node_modules/react-i18next/dist/es/useTranslation.js";
|
|
2
2
|
import { I18nKey as t } from "../../../i18n/declaration.js";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { Check as n } from "../../../node_modules/lucide-react/dist/esm/icons/check.js";
|
|
4
|
+
import { CircleArrowUp as r } from "../../../node_modules/lucide-react/dist/esm/icons/circle-arrow-up.js";
|
|
5
5
|
import { CircleCheck as i } from "../../../node_modules/lucide-react/dist/esm/icons/circle-check.js";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
6
|
+
import { Copy as a } from "../../../node_modules/lucide-react/dist/esm/icons/copy.js";
|
|
7
|
+
import { ExternalLink as o } from "../../../node_modules/lucide-react/dist/esm/icons/external-link.js";
|
|
8
8
|
import { RefreshCw as s } from "../../../node_modules/lucide-react/dist/esm/icons/refresh-cw.js";
|
|
9
9
|
import { cn as c } from "../../../utils/utils.js";
|
|
10
10
|
import { getLockedCloudHost as l } from "../../../api/agent-server-config.js";
|
|
11
11
|
import { compareAgentServerVersions as u } from "../../../api/agent-server-compatibility.js";
|
|
12
12
|
import { AGENT_CANVAS_CLIENT_VERSION as d } from "../../../api/client-source.js";
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
15
|
-
import {
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import {
|
|
13
|
+
import { ModalBackdrop as f } from "../../shared/modals/modal-backdrop.js";
|
|
14
|
+
import { ModalBody as p } from "../../shared/modals/modal-body.js";
|
|
15
|
+
import { BaseModalTitle as m } from "../../shared/modals/confirmation-modals/base-modal.js";
|
|
16
|
+
import { ModalCloseButton as h } from "../../shared/modals/modal-close-button.js";
|
|
17
|
+
import { BrandButton as g } from "./brand-button.js";
|
|
18
|
+
import { AGENT_CANVAS_RELEASE_NOTES_URL as _, AGENT_CANVAS_UPDATE_COMMANDS as v } from "../../../api/agent-canvas-updates.js";
|
|
19
|
+
import { useLatestAgentCanvasVersion as y } from "../../../hooks/query/use-latest-agent-canvas-version.js";
|
|
20
|
+
import b from "../../../icons/docker.js";
|
|
21
|
+
import x from "../../../icons/npm.js";
|
|
22
|
+
import { useCallback as S, useEffect as C, useRef as w, useState as T } from "react";
|
|
23
|
+
import { Fragment as E, jsx as D, jsxs as O } from "react/jsx-runtime";
|
|
19
24
|
//#region src/components/features/settings/agent-canvas-update-card.tsx
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
return
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
onClick: () => {
|
|
32
|
-
navigator.clipboard.writeText(e), r(!0), setTimeout(() => r(!1), 2e3);
|
|
33
|
-
},
|
|
34
|
-
mode: n ? "copied" : "copy"
|
|
35
|
-
})]
|
|
25
|
+
var k = 2e3, A = ["npm", "docker"];
|
|
26
|
+
function j(e) {
|
|
27
|
+
return e === "npm" ? t.SETTINGS$VERSION_NPM_RECOMMENDED : t.SETTINGS$VERSION_DOCKER;
|
|
28
|
+
}
|
|
29
|
+
function M({ tab: e }) {
|
|
30
|
+
return e === "npm" ? /* @__PURE__ */ D(x, {
|
|
31
|
+
className: "size-4 shrink-0",
|
|
32
|
+
"aria-hidden": !0
|
|
33
|
+
}) : /* @__PURE__ */ D(b, {
|
|
34
|
+
className: "size-5 shrink-0",
|
|
35
|
+
"aria-hidden": !0
|
|
36
36
|
});
|
|
37
37
|
}
|
|
38
|
-
function
|
|
39
|
-
let { t:
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
38
|
+
function N() {
|
|
39
|
+
let { t: r } = e("openhands"), [i, o] = T("npm"), [s, l] = T(!1), u = w(null), d = i === "npm" ? v.npm : v.docker;
|
|
40
|
+
C(() => () => {
|
|
41
|
+
u.current !== null && window.clearTimeout(u.current);
|
|
42
|
+
}, []), C(() => {
|
|
43
|
+
l(!1), u.current !== null && (window.clearTimeout(u.current), u.current = null);
|
|
44
|
+
}, [i]);
|
|
45
|
+
let f = S(() => {
|
|
46
|
+
navigator.clipboard?.writeText(d), l(!0), u.current !== null && window.clearTimeout(u.current), u.current = window.setTimeout(() => {
|
|
47
|
+
l(!1), u.current = null;
|
|
48
|
+
}, k);
|
|
49
|
+
}, [d]);
|
|
50
|
+
return /* @__PURE__ */ O("div", {
|
|
51
|
+
className: "w-full",
|
|
52
|
+
children: [/* @__PURE__ */ D("div", {
|
|
53
|
+
className: "flex justify-center",
|
|
54
|
+
children: A.map((e) => /* @__PURE__ */ O("button", {
|
|
47
55
|
type: "button",
|
|
48
|
-
onClick: () =>
|
|
49
|
-
"
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
"
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
56
|
+
onClick: () => o(e),
|
|
57
|
+
className: c("inline-flex items-center gap-1.5 px-3 pb-2 text-sm font-medium", i === e ? "border-b border-white text-white" : "text-[var(--oh-muted)] hover:text-white"),
|
|
58
|
+
children: [/* @__PURE__ */ D(M, { tab: e }), r(j(e))]
|
|
59
|
+
}, e))
|
|
60
|
+
}), /* @__PURE__ */ O("div", {
|
|
61
|
+
className: "flex items-center gap-3 rounded-lg border border-[var(--oh-border)] bg-[var(--oh-surface-deep)] px-4 py-3",
|
|
62
|
+
children: [/* @__PURE__ */ D("code", {
|
|
63
|
+
"data-testid": i === "npm" ? "agent-canvas-update-command-npm" : "agent-canvas-update-command-docker",
|
|
64
|
+
className: "min-w-0 flex-1 overflow-visible whitespace-nowrap font-mono text-sm text-white",
|
|
65
|
+
children: d
|
|
66
|
+
}), /* @__PURE__ */ D("button", {
|
|
67
|
+
type: "button",
|
|
68
|
+
"data-testid": "copy-to-clipboard",
|
|
69
|
+
onClick: f,
|
|
70
|
+
"aria-label": r(s ? t.BUTTON$COPIED : t.SETTINGS$VERSION_COPY_COMMAND),
|
|
71
|
+
disabled: s,
|
|
72
|
+
className: "shrink-0 text-[var(--oh-muted)] hover:text-white disabled:hover:text-[var(--oh-muted)]",
|
|
73
|
+
children: s ? /* @__PURE__ */ D(n, {
|
|
74
|
+
className: "size-4 text-[var(--oh-status-success)]",
|
|
75
|
+
"aria-hidden": !0
|
|
76
|
+
}) : /* @__PURE__ */ D(a, {
|
|
77
|
+
className: "size-4",
|
|
78
|
+
"aria-hidden": !0
|
|
79
|
+
})
|
|
80
|
+
})]
|
|
81
|
+
})]
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
function P({ onClose: n, latestVersion: a, isPending: l, isFetching: u, updateAvailable: v, upToDate: y, onCheckForUpdates: b }) {
|
|
85
|
+
let { t: x } = e("openhands");
|
|
86
|
+
return /* @__PURE__ */ D(f, {
|
|
87
|
+
onClose: n,
|
|
88
|
+
children: /* @__PURE__ */ O(p, {
|
|
89
|
+
width: "md",
|
|
90
|
+
className: "relative flex max-h-[80vh] flex-col items-start overflow-auto border border-[var(--oh-border)]",
|
|
91
|
+
testID: "agent-canvas-update-modal",
|
|
92
|
+
children: [
|
|
93
|
+
/* @__PURE__ */ D(h, {
|
|
94
|
+
onClose: n,
|
|
95
|
+
testId: "close-agent-canvas-update-modal"
|
|
96
|
+
}),
|
|
97
|
+
/* @__PURE__ */ O("div", {
|
|
98
|
+
className: "flex w-full flex-col gap-2 pr-10",
|
|
99
|
+
children: [/* @__PURE__ */ D(m, { title: x(t.SETTINGS$APP_UPDATE_CARD_TITLE) }), /* @__PURE__ */ O("div", {
|
|
100
|
+
className: "flex items-center gap-1.5 text-xs",
|
|
101
|
+
children: [/* @__PURE__ */ D("span", {
|
|
102
|
+
className: "text-[var(--oh-text-dim)]",
|
|
103
|
+
children: x(t.SETTINGS$APP_UPDATE_VERSION_LABEL)
|
|
104
|
+
}), /* @__PURE__ */ D("span", {
|
|
105
|
+
className: "text-white",
|
|
106
|
+
children: d
|
|
107
|
+
})]
|
|
108
|
+
})]
|
|
109
|
+
}),
|
|
110
|
+
/* @__PURE__ */ O("div", {
|
|
111
|
+
className: "flex w-full flex-col gap-3",
|
|
112
|
+
children: [
|
|
113
|
+
/* @__PURE__ */ D(g, {
|
|
114
|
+
testId: "agent-canvas-update-check-button",
|
|
115
|
+
type: "button",
|
|
116
|
+
variant: "secondary",
|
|
117
|
+
className: "w-full",
|
|
118
|
+
isDisabled: u,
|
|
119
|
+
"aria-busy": u,
|
|
120
|
+
onClick: b,
|
|
121
|
+
startContent: /* @__PURE__ */ D(s, {
|
|
122
|
+
className: c("size-4", u && "animate-spin"),
|
|
123
|
+
"aria-hidden": !0
|
|
124
|
+
}),
|
|
125
|
+
children: x(t.SETTINGS$APP_UPDATE_CHECK_BUTTON)
|
|
117
126
|
}),
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
127
|
+
/* @__PURE__ */ D("div", {
|
|
128
|
+
"data-testid": "agent-canvas-update-status",
|
|
129
|
+
className: "w-full",
|
|
130
|
+
children: l || u ? /* @__PURE__ */ D("span", {
|
|
131
|
+
className: "text-xs text-[var(--oh-muted)]",
|
|
132
|
+
children: x(t.SETTINGS$APP_UPDATE_CHECKING)
|
|
133
|
+
}) : v ? /* @__PURE__ */ O("div", {
|
|
134
|
+
className: "flex items-start gap-2 rounded-lg border border-[#3B82F6]/30 bg-[#1E3A5F] px-3 py-2 text-xs text-[#3B82F6]",
|
|
135
|
+
children: [/* @__PURE__ */ D(r, {
|
|
126
136
|
className: "size-4 shrink-0",
|
|
127
137
|
"aria-hidden": !0
|
|
128
|
-
}), /* @__PURE__ */
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
138
|
+
}), /* @__PURE__ */ O("span", { children: [
|
|
139
|
+
x(t.SETTINGS$APP_UPDATE_AVAILABLE_MESSAGE, { version: a }),
|
|
140
|
+
" ",
|
|
141
|
+
/* @__PURE__ */ O("a", {
|
|
142
|
+
"data-testid": "agent-canvas-update-release-notes",
|
|
143
|
+
href: _,
|
|
144
|
+
target: "_blank",
|
|
145
|
+
rel: "noopener noreferrer",
|
|
146
|
+
className: "inline-flex items-center gap-1.5 whitespace-nowrap font-medium text-white hover:text-[var(--oh-text)]",
|
|
147
|
+
children: [x(t.SETTINGS$VERSION_RELEASE_NOTES), /* @__PURE__ */ D(o, {
|
|
148
|
+
className: "size-3.5 shrink-0",
|
|
149
|
+
"aria-hidden": !0
|
|
150
|
+
})]
|
|
151
|
+
})
|
|
152
|
+
] })]
|
|
153
|
+
}) : y ? /* @__PURE__ */ O("div", {
|
|
154
|
+
className: "flex items-start gap-2 rounded-lg border border-[var(--oh-status-success)]/30 bg-[var(--oh-status-success)]/10 px-3 py-2 text-xs text-[var(--oh-status-success)]",
|
|
155
|
+
children: [/* @__PURE__ */ D(i, {
|
|
156
|
+
className: "size-4 shrink-0",
|
|
157
|
+
"aria-hidden": !0
|
|
158
|
+
}), /* @__PURE__ */ O("span", { children: [
|
|
159
|
+
x(t.SETTINGS$APP_UPDATE_LATEST_MESSAGE),
|
|
160
|
+
" ",
|
|
161
|
+
/* @__PURE__ */ O("a", {
|
|
162
|
+
"data-testid": "agent-canvas-update-release-notes",
|
|
163
|
+
href: _,
|
|
164
|
+
target: "_blank",
|
|
165
|
+
rel: "noopener noreferrer",
|
|
166
|
+
className: "inline-flex items-center gap-1.5 whitespace-nowrap font-medium text-white hover:text-[var(--oh-text)]",
|
|
167
|
+
children: [x(t.SETTINGS$VERSION_RELEASE_NOTES), /* @__PURE__ */ D(o, {
|
|
168
|
+
className: "size-3.5 shrink-0",
|
|
169
|
+
"aria-hidden": !0
|
|
170
|
+
})]
|
|
171
|
+
})
|
|
172
|
+
] })]
|
|
173
|
+
}) : /* @__PURE__ */ D("span", {
|
|
174
|
+
className: "text-xs text-[var(--oh-muted)]",
|
|
175
|
+
children: x(t.SETTINGS$APP_UPDATE_CHECK_FAILED)
|
|
148
176
|
})
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
177
|
+
}),
|
|
178
|
+
v ? /* @__PURE__ */ O("div", {
|
|
179
|
+
className: "flex w-full flex-col border-t border-[var(--oh-border)] pt-3",
|
|
180
|
+
children: [
|
|
181
|
+
/* @__PURE__ */ D("span", {
|
|
182
|
+
className: "text-sm font-medium text-white",
|
|
183
|
+
children: x(t.SETTINGS$APP_UPDATE_HOW_TO_UPDATE)
|
|
184
|
+
}),
|
|
185
|
+
/* @__PURE__ */ D("span", {
|
|
186
|
+
className: "mt-1 mb-4 text-sm text-[var(--oh-text-dim)]",
|
|
187
|
+
children: x(t.SETTINGS$APP_UPDATE_RUN_COMMANDS)
|
|
188
|
+
}),
|
|
189
|
+
/* @__PURE__ */ D(N, {})
|
|
190
|
+
]
|
|
191
|
+
}) : null
|
|
192
|
+
]
|
|
193
|
+
})
|
|
194
|
+
]
|
|
195
|
+
})
|
|
165
196
|
});
|
|
166
197
|
}
|
|
198
|
+
function F({ hideWhenUpToDate: n = !1 }) {
|
|
199
|
+
let { t: a } = e("openhands"), [o, s] = T(!1), f = l() !== null, p = y({ enabled: !f });
|
|
200
|
+
if (f) return null;
|
|
201
|
+
let m = p.data, h = m === void 0 ? null : u(m, d), g = h === 1, _ = h !== null && h <= 0;
|
|
202
|
+
return n && !g ? null : /* @__PURE__ */ O(E, { children: [/* @__PURE__ */ D("section", {
|
|
203
|
+
"data-testid": "agent-canvas-update-card",
|
|
204
|
+
children: /* @__PURE__ */ O("button", {
|
|
205
|
+
type: "button",
|
|
206
|
+
onClick: () => s(!0),
|
|
207
|
+
"aria-haspopup": "dialog",
|
|
208
|
+
"data-testid": "agent-canvas-update-toggle",
|
|
209
|
+
className: "flex w-full cursor-pointer flex-col gap-1 rounded-md border border-[var(--oh-border)] bg-base-secondary px-3 py-2 text-left hover:bg-[var(--oh-surface-raised)]",
|
|
210
|
+
children: [/* @__PURE__ */ O("span", {
|
|
211
|
+
className: "flex w-full items-center gap-2",
|
|
212
|
+
children: [/* @__PURE__ */ D("span", {
|
|
213
|
+
className: "flex-1 truncate text-sm font-semibold leading-5 text-white",
|
|
214
|
+
children: a(t.SETTINGS$APP_UPDATE_CARD_TITLE)
|
|
215
|
+
}), h !== null && /* @__PURE__ */ O("span", {
|
|
216
|
+
"data-testid": "agent-canvas-update-badge",
|
|
217
|
+
className: c("inline-flex shrink-0 items-center gap-1 text-[10px] font-medium leading-none", g ? "rounded-full border border-transparent bg-[#1E3A5F] px-1.5 py-0.5 text-[#3B82F6]" : "text-success"),
|
|
218
|
+
children: [D(g ? r : i, {
|
|
219
|
+
className: "size-3 shrink-0",
|
|
220
|
+
"aria-hidden": !0
|
|
221
|
+
}), a(g ? t.SETTINGS$APP_UPDATE_BADGE_UPDATE_AVAILABLE : t.SETTINGS$APP_UPDATE_BADGE_UP_TO_DATE)]
|
|
222
|
+
})]
|
|
223
|
+
}), /* @__PURE__ */ O("span", {
|
|
224
|
+
className: "flex items-center gap-1.5 text-xs leading-5 text-[var(--oh-muted)]",
|
|
225
|
+
children: [/* @__PURE__ */ D("span", { children: a(t.SETTINGS$APP_UPDATE_VERSION_LABEL) }), /* @__PURE__ */ D("span", {
|
|
226
|
+
className: "text-white",
|
|
227
|
+
children: d
|
|
228
|
+
})]
|
|
229
|
+
})]
|
|
230
|
+
})
|
|
231
|
+
}), o && /* @__PURE__ */ D(P, {
|
|
232
|
+
onClose: () => s(!1),
|
|
233
|
+
latestVersion: m,
|
|
234
|
+
isPending: p.isPending,
|
|
235
|
+
isFetching: p.isFetching,
|
|
236
|
+
updateAvailable: g,
|
|
237
|
+
upToDate: _,
|
|
238
|
+
onCheckForUpdates: () => p.refetch()
|
|
239
|
+
})] });
|
|
240
|
+
}
|
|
167
241
|
//#endregion
|
|
168
|
-
export {
|
|
242
|
+
export { F as AgentCanvasUpdateCard };
|
|
169
243
|
|
|
170
244
|
//# sourceMappingURL=agent-canvas-update-card.js.map
|
|
@@ -1 +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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"}
|
|
1
|
+
{"version":3,"file":"agent-canvas-update-card.js","names":[],"sources":["../../../../src/components/features/settings/agent-canvas-update-card.tsx"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n ArrowUpCircle,\n Check,\n CircleCheck,\n Copy,\n ExternalLink,\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 { BaseModalTitle } from \"#/components/shared/modals/confirmation-modals/base-modal\";\nimport { ModalBackdrop } from \"#/components/shared/modals/modal-backdrop\";\nimport { ModalBody } from \"#/components/shared/modals/modal-body\";\nimport { ModalCloseButton } from \"#/components/shared/modals/modal-close-button\";\nimport { useLatestAgentCanvasVersion } from \"#/hooks/query/use-latest-agent-canvas-version\";\nimport DockerIcon from \"#/icons/docker.svg?react\";\nimport NpmIcon from \"#/icons/npm.svg?react\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { cn } from \"#/utils/utils\";\n\nconst COPY_FEEDBACK_MS = 2000;\n\ntype UpdateCommandTab = \"npm\" | \"docker\";\n\nconst UPDATE_COMMAND_TABS: UpdateCommandTab[] = [\"npm\", \"docker\"];\n\nfunction getUpdateCommandTabLabelKey(tab: UpdateCommandTab): I18nKey {\n return tab === \"npm\"\n ? I18nKey.SETTINGS$VERSION_NPM_RECOMMENDED\n : I18nKey.SETTINGS$VERSION_DOCKER;\n}\n\nfunction UpdateCommandTabIcon({ tab }: { tab: UpdateCommandTab }) {\n if (tab === \"npm\") {\n return <NpmIcon className=\"size-4 shrink-0\" aria-hidden />;\n }\n return <DockerIcon className=\"size-5 shrink-0\" aria-hidden />;\n}\n\nfunction UpdateCommandTabs() {\n const { t } = useTranslation(\"openhands\");\n const [selectedTab, setSelectedTab] = useState<UpdateCommandTab>(\"npm\");\n const [copied, setCopied] = useState(false);\n const copiedTimeoutRef = useRef<number | null>(null);\n const command =\n selectedTab === \"npm\"\n ? AGENT_CANVAS_UPDATE_COMMANDS.npm\n : AGENT_CANVAS_UPDATE_COMMANDS.docker;\n\n useEffect(\n () => () => {\n if (copiedTimeoutRef.current !== null) {\n window.clearTimeout(copiedTimeoutRef.current);\n }\n },\n [],\n );\n\n useEffect(() => {\n setCopied(false);\n if (copiedTimeoutRef.current !== null) {\n window.clearTimeout(copiedTimeoutRef.current);\n copiedTimeoutRef.current = null;\n }\n }, [selectedTab]);\n\n const copyCommand = useCallback(() => {\n void navigator.clipboard?.writeText(command);\n setCopied(true);\n if (copiedTimeoutRef.current !== null) {\n window.clearTimeout(copiedTimeoutRef.current);\n }\n copiedTimeoutRef.current = window.setTimeout(() => {\n setCopied(false);\n copiedTimeoutRef.current = null;\n }, COPY_FEEDBACK_MS);\n }, [command]);\n\n return (\n <div className=\"w-full\">\n <div className=\"flex justify-center\">\n {UPDATE_COMMAND_TABS.map((tab) => (\n <button\n key={tab}\n type=\"button\"\n onClick={() => setSelectedTab(tab)}\n className={cn(\n \"inline-flex items-center gap-1.5 px-3 pb-2 text-sm font-medium\",\n selectedTab === tab\n ? \"border-b border-white text-white\"\n : \"text-[var(--oh-muted)] hover:text-white\",\n )}\n >\n <UpdateCommandTabIcon tab={tab} />\n {t(getUpdateCommandTabLabelKey(tab))}\n </button>\n ))}\n </div>\n <div className=\"flex items-center gap-3 rounded-lg border border-[var(--oh-border)] bg-[var(--oh-surface-deep)] px-4 py-3\">\n <code\n data-testid={\n selectedTab === \"npm\"\n ? \"agent-canvas-update-command-npm\"\n : \"agent-canvas-update-command-docker\"\n }\n className=\"min-w-0 flex-1 overflow-visible whitespace-nowrap font-mono text-sm text-white\"\n >\n {command}\n </code>\n <button\n type=\"button\"\n data-testid=\"copy-to-clipboard\"\n onClick={copyCommand}\n aria-label={t(\n copied\n ? I18nKey.BUTTON$COPIED\n : I18nKey.SETTINGS$VERSION_COPY_COMMAND,\n )}\n disabled={copied}\n className=\"shrink-0 text-[var(--oh-muted)] hover:text-white disabled:hover:text-[var(--oh-muted)]\"\n >\n {copied ? (\n <Check\n className=\"size-4 text-[var(--oh-status-success)]\"\n aria-hidden\n />\n ) : (\n <Copy className=\"size-4\" aria-hidden />\n )}\n </button>\n </div>\n </div>\n );\n}\n\ninterface AgentCanvasUpdateModalProps {\n onClose: () => void;\n latestVersion: string | undefined;\n isPending: boolean;\n isFetching: boolean;\n updateAvailable: boolean;\n upToDate: boolean;\n onCheckForUpdates: () => void;\n}\n\nfunction AgentCanvasUpdateModal({\n onClose,\n latestVersion,\n isPending,\n isFetching,\n updateAvailable,\n upToDate,\n onCheckForUpdates,\n}: AgentCanvasUpdateModalProps) {\n const { t } = useTranslation(\"openhands\");\n\n return (\n <ModalBackdrop onClose={onClose}>\n <ModalBody\n width=\"md\"\n className=\"relative flex max-h-[80vh] flex-col items-start overflow-auto border border-[var(--oh-border)]\"\n testID=\"agent-canvas-update-modal\"\n >\n <ModalCloseButton\n onClose={onClose}\n testId=\"close-agent-canvas-update-modal\"\n />\n <div className=\"flex w-full flex-col gap-2 pr-10\">\n <BaseModalTitle title={t(I18nKey.SETTINGS$APP_UPDATE_CARD_TITLE)} />\n <div className=\"flex items-center gap-1.5 text-xs\">\n <span className=\"text-[var(--oh-text-dim)]\">\n {t(I18nKey.SETTINGS$APP_UPDATE_VERSION_LABEL)}\n </span>\n <span className=\"text-white\">{AGENT_CANVAS_CLIENT_VERSION}</span>\n </div>\n </div>\n\n <div className=\"flex w-full flex-col gap-3\">\n <BrandButton\n testId=\"agent-canvas-update-check-button\"\n type=\"button\"\n variant=\"secondary\"\n className=\"w-full\"\n isDisabled={isFetching}\n aria-busy={isFetching}\n onClick={onCheckForUpdates}\n startContent={\n <RefreshCw\n className={cn(\"size-4\", isFetching && \"animate-spin\")}\n aria-hidden\n />\n }\n >\n {t(I18nKey.SETTINGS$APP_UPDATE_CHECK_BUTTON)}\n </BrandButton>\n\n <div data-testid=\"agent-canvas-update-status\" className=\"w-full\">\n {isPending || isFetching ? (\n <span className=\"text-xs text-[var(--oh-muted)]\">\n {t(I18nKey.SETTINGS$APP_UPDATE_CHECKING)}\n </span>\n ) : updateAvailable ? (\n <div className=\"flex items-start gap-2 rounded-lg border border-[#3B82F6]/30 bg-[#1E3A5F] px-3 py-2 text-xs text-[#3B82F6]\">\n <ArrowUpCircle className=\"size-4 shrink-0\" aria-hidden />\n <span>\n {t(I18nKey.SETTINGS$APP_UPDATE_AVAILABLE_MESSAGE, {\n version: latestVersion,\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.5 whitespace-nowrap font-medium text-white hover:text-[var(--oh-text)]\"\n >\n {t(I18nKey.SETTINGS$VERSION_RELEASE_NOTES)}\n <ExternalLink className=\"size-3.5 shrink-0\" aria-hidden />\n </a>\n </span>\n </div>\n ) : upToDate ? (\n <div className=\"flex items-start gap-2 rounded-lg border border-[var(--oh-status-success)]/30 bg-[var(--oh-status-success)]/10 px-3 py-2 text-xs text-[var(--oh-status-success)]\">\n <CircleCheck className=\"size-4 shrink-0\" aria-hidden />\n <span>\n {t(I18nKey.SETTINGS$APP_UPDATE_LATEST_MESSAGE)}{\" \"}\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.5 whitespace-nowrap font-medium text-white hover:text-[var(--oh-text)]\"\n >\n {t(I18nKey.SETTINGS$VERSION_RELEASE_NOTES)}\n <ExternalLink className=\"size-3.5 shrink-0\" aria-hidden />\n </a>\n </span>\n </div>\n ) : (\n <span className=\"text-xs text-[var(--oh-muted)]\">\n {t(I18nKey.SETTINGS$APP_UPDATE_CHECK_FAILED)}\n </span>\n )}\n </div>\n\n {updateAvailable ? (\n <div className=\"flex w-full flex-col border-t border-[var(--oh-border)] pt-3\">\n <span className=\"text-sm font-medium text-white\">\n {t(I18nKey.SETTINGS$APP_UPDATE_HOW_TO_UPDATE)}\n </span>\n <span className=\"mt-1 mb-4 text-sm text-[var(--oh-text-dim)]\">\n {t(I18nKey.SETTINGS$APP_UPDATE_RUN_COMMANDS)}\n </span>\n <UpdateCommandTabs />\n </div>\n ) : null}\n </div>\n </ModalBody>\n </ModalBackdrop>\n );\n}\n\ninterface AgentCanvasUpdateCardProps {\n /** When true, omit the card unless an update is available (main sidebar). */\n hideWhenUpToDate?: boolean;\n}\n\n/**\n * Information-only version/update card for settings and the main sidebar.\n * Opens update details in a modal. Never blocks or toasts; check failures\n * degrade to a quiet inline message. Hidden in locked-to-Cloud deployments —\n * the hosted canvas has no npm/docker install to update.\n */\nexport function AgentCanvasUpdateCard({\n hideWhenUpToDate = false,\n}: AgentCanvasUpdateCardProps) {\n const { t } = useTranslation(\"openhands\");\n const [isModalOpen, setIsModalOpen] = useState(false);\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\n if (hideWhenUpToDate && !updateAvailable) return null;\n\n return (\n <>\n <section data-testid=\"agent-canvas-update-card\">\n <button\n type=\"button\"\n onClick={() => setIsModalOpen(true)}\n aria-haspopup=\"dialog\"\n data-testid=\"agent-canvas-update-toggle\"\n className=\"flex w-full cursor-pointer flex-col gap-1 rounded-md border border-[var(--oh-border)] bg-base-secondary px-3 py-2 text-left hover:bg-[var(--oh-surface-raised)]\"\n >\n <span className=\"flex w-full items-center gap-2\">\n <span className=\"flex-1 truncate text-sm font-semibold leading-5 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 gap-1 text-[10px] font-medium leading-none\",\n updateAvailable\n ? \"rounded-full border border-transparent bg-[#1E3A5F] px-1.5 py-0.5 text-[#3B82F6]\"\n : \"text-success\",\n )}\n >\n {updateAvailable ? (\n <ArrowUpCircle className=\"size-3 shrink-0\" aria-hidden />\n ) : (\n <CircleCheck className=\"size-3 shrink-0\" aria-hidden />\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 </span>\n\n <span className=\"flex items-center gap-1.5 text-xs leading-5 text-[var(--oh-muted)]\">\n <span>{t(I18nKey.SETTINGS$APP_UPDATE_VERSION_LABEL)}</span>\n <span className=\"text-white\">{AGENT_CANVAS_CLIENT_VERSION}</span>\n </span>\n </button>\n </section>\n\n {isModalOpen && (\n <AgentCanvasUpdateModal\n onClose={() => setIsModalOpen(false)}\n latestVersion={latestVersion}\n isPending={latestVersionQuery.isPending}\n isFetching={latestVersionQuery.isFetching}\n updateAvailable={updateAvailable}\n upToDate={upToDate}\n onCheckForUpdates={() => latestVersionQuery.refetch()}\n />\n )}\n </>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require("../../../_virtual/_rolldown/runtime.cjs"),t=require("../../../node_modules/react-i18next/dist/es/useTranslation.cjs"),n=require("../../../i18n/declaration.cjs"),r=require("../../../node_modules/lucide-react/dist/esm/icons/check.cjs"),i=require("../../../node_modules/lucide-react/dist/esm/icons/circle-arrow-up.cjs"),a=require("../../../node_modules/lucide-react/dist/esm/icons/circle-check.cjs"),o=require("../../../node_modules/lucide-react/dist/esm/icons/copy.cjs"),s=require("../../../node_modules/lucide-react/dist/esm/icons/external-link.cjs"),c=require("../../../node_modules/lucide-react/dist/esm/icons/refresh-cw.cjs"),l=require("../../../utils/utils.cjs"),u=require("../../shared/modals/modal-backdrop.cjs"),d=require("../../shared/modals/modal-close-button.cjs"),f=require("../../../api/agent-canvas-updates.cjs"),p=require("../../../icons/docker.cjs"),m=require("../../../icons/npm.cjs");let h=require("react");h=e.__toESM(h,1);let g=require("react/jsx-runtime");var _=2e3,v=[`npm`,`docker`];function y(e){return e===`npm`?n.I18nKey.SETTINGS$VERSION_NPM_RECOMMENDED:n.I18nKey.SETTINGS$VERSION_DOCKER}function b({tab:e}){return e===`npm`?(0,g.jsx)(m.default,{className:`size-4 shrink-0`,"aria-hidden":!0}):(0,g.jsx)(p.default,{className:`size-5 shrink-0`,"aria-hidden":!0})}function x({installedVersion:e,latestVersion:p,updateAvailable:m,isChecking:x,onCheckForUpdates:S,onClose:C}){let{t:w}=t.useTranslation(`openhands`),[T,E]=h.default.useState(`npm`),[D,O]=h.default.useState(!1),k=h.default.useRef(null),A=T===`npm`?f.AGENT_CANVAS_UPDATE_COMMANDS.npm:f.AGENT_CANVAS_UPDATE_COMMANDS.docker;h.default.useEffect(()=>()=>{k.current!==null&&window.clearTimeout(k.current)},[]),h.default.useEffect(()=>{O(!1),k.current!==null&&(window.clearTimeout(k.current),k.current=null)},[T]);let j=h.default.useCallback(()=>{navigator.clipboard?.writeText(A),O(!0),k.current!==null&&window.clearTimeout(k.current),k.current=window.setTimeout(()=>{O(!1),k.current=null},_)},[A]);return(0,g.jsx)(u.ModalBackdrop,{onClose:C,"aria-label":w(n.I18nKey.SETTINGS$VERSION_MODAL_ARIA_LABEL),children:(0,g.jsxs)(`section`,{className:`relative flex w-[520px] max-w-[90vw] flex-col gap-5 rounded-xl border border-[var(--oh-border)] bg-base-secondary p-6 shadow-xl`,children:[(0,g.jsx)(d.ModalCloseButton,{onClose:C,testId:`agent-canvas-version-modal-close`}),(0,g.jsxs)(`header`,{className:`flex items-center gap-3 pr-8`,children:[m?(0,g.jsx)(i.CircleArrowUp,{className:`size-7 shrink-0 text-[#3B82F6]`,"aria-hidden":!0}):(0,g.jsx)(a.CircleCheck,{className:`size-7 shrink-0 text-[var(--oh-status-success)]`,"aria-hidden":!0}),(0,g.jsx)(`h2`,{className:`text-base font-semibold leading-6 text-white`,children:w(m?n.I18nKey.SETTINGS$VERSION_UPDATE_AVAILABLE:n.I18nKey.SETTINGS$VERSION_UP_TO_DATE_TITLE)}),m&&p?(0,g.jsx)(`span`,{className:`rounded-full bg-[#1E3A5F] px-2 py-0.5 text-xs font-semibold text-[#3B82F6]`,children:p}):null]}),(0,g.jsx)(`div`,{className:`flex flex-col gap-1`,children:m&&p?(0,g.jsxs)(`p`,{className:`text-sm text-[var(--oh-text)]`,children:[w(n.I18nKey.SETTINGS$VERSION_UPDATE_MESSAGE,{installed:e,latest:p}),` `,(0,g.jsxs)(`a`,{href:f.AGENT_CANVAS_RELEASE_NOTES_URL,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex items-center gap-1.5 whitespace-nowrap font-medium text-white hover:text-[var(--oh-text)]`,children:[w(n.I18nKey.SETTINGS$VERSION_RELEASE_NOTES),(0,g.jsx)(s.ExternalLink,{className:`size-4 shrink-0`,"aria-hidden":!0})]})]}):(0,g.jsxs)(g.Fragment,{children:[(0,g.jsx)(`p`,{className:`text-sm text-[var(--oh-text)]`,children:w(n.I18nKey.SETTINGS$VERSION_INSTALLED,{version:e})}),p?(0,g.jsxs)(`p`,{className:`whitespace-nowrap text-sm text-[var(--oh-status-success)]`,children:[w(n.I18nKey.SETTINGS$VERSION_LATEST_MESSAGE),` `,(0,g.jsxs)(`a`,{href:f.AGENT_CANVAS_RELEASE_NOTES_URL,target:`_blank`,rel:`noopener noreferrer`,className:`inline-flex items-center gap-1.5 font-medium text-white hover:text-[var(--oh-text)]`,children:[w(n.I18nKey.SETTINGS$VERSION_RELEASE_NOTES),(0,g.jsx)(s.ExternalLink,{className:`size-4 shrink-0`,"aria-hidden":!0})]})]}):(0,g.jsx)(`p`,{className:`text-sm text-[var(--oh-muted)]`,children:w(n.I18nKey.SETTINGS$VERSION_CHECK_UNAVAILABLE)})]})}),m?(0,g.jsxs)(`div`,{children:[(0,g.jsx)(`div`,{className:`flex justify-center`,children:v.map(e=>(0,g.jsxs)(`button`,{type:`button`,onClick:()=>E(e),className:l.cn(`inline-flex items-center gap-1.5 px-3 pb-2 text-sm font-medium`,T===e?`border-b border-white text-white`:`text-[var(--oh-muted)] hover:text-white`),children:[(0,g.jsx)(b,{tab:e}),w(y(e))]},e))}),(0,g.jsxs)(`div`,{className:`flex items-center gap-3 rounded-lg border border-[var(--oh-border)] bg-[var(--oh-surface-deep)] px-4 py-3`,children:[(0,g.jsx)(`code`,{className:`min-w-0 flex-1 overflow-visible whitespace-nowrap font-mono text-sm text-white`,children:A}),(0,g.jsx)(`button`,{type:`button`,onClick:j,"aria-label":w(D?n.I18nKey.BUTTON$COPIED:n.I18nKey.SETTINGS$VERSION_COPY_COMMAND),disabled:D,className:`shrink-0 text-[var(--oh-muted)] hover:text-white disabled:hover:text-[var(--oh-muted)]`,children:D?(0,g.jsx)(r.Check,{className:`size-4 text-[var(--oh-status-success)]`,"aria-hidden":!0}):(0,g.jsx)(o.Copy,{className:`size-4`,"aria-hidden":!0})})]})]}):null,m?null:(0,g.jsx)(`div`,{className:`flex flex-wrap gap-x-8 gap-y-3`,children:(0,g.jsxs)(`button`,{type:`button`,onClick:S,className:`inline-flex items-center gap-2 text-sm font-medium text-white hover:text-[var(--oh-text)] disabled:cursor-wait disabled:text-[var(--oh-muted)]`,disabled:x,children:[w(n.I18nKey.SETTINGS$VERSION_CHECK_FOR_UPDATES),(0,g.jsx)(c.RefreshCw,{className:l.cn(`size-4 shrink-0`,x&&`animate-spin`),"aria-hidden":!0})]})})]})})}exports.AgentCanvasVersionModal=x;
|
|
2
|
+
//# sourceMappingURL=agent-canvas-version-modal.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-canvas-version-modal.cjs","names":[],"sources":["../../../../src/components/features/settings/agent-canvas-version-modal.tsx"],"sourcesContent":["import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n ArrowUpCircle,\n Check,\n CheckCircle2,\n Copy,\n ExternalLink,\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 { ModalBackdrop } from \"#/components/shared/modals/modal-backdrop\";\nimport { ModalCloseButton } from \"#/components/shared/modals/modal-close-button\";\nimport DockerIcon from \"#/icons/docker.svg?react\";\nimport NpmIcon from \"#/icons/npm.svg?react\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { cn } from \"#/utils/utils\";\n\nconst COPY_FEEDBACK_MS = 2000;\n\ntype UpdateCommandTab = \"npm\" | \"docker\";\n\nconst UPDATE_COMMAND_TABS: UpdateCommandTab[] = [\"npm\", \"docker\"];\n\ninterface AgentCanvasVersionModalProps {\n installedVersion: string;\n latestVersion: string | null;\n updateAvailable: boolean;\n isChecking: boolean;\n onCheckForUpdates: () => void;\n onClose: () => void;\n}\n\nfunction getUpdateCommandTabLabelKey(tab: UpdateCommandTab): I18nKey {\n return tab === \"npm\"\n ? I18nKey.SETTINGS$VERSION_NPM_RECOMMENDED\n : I18nKey.SETTINGS$VERSION_DOCKER;\n}\n\nfunction UpdateCommandTabIcon({ tab }: { tab: UpdateCommandTab }) {\n if (tab === \"npm\") {\n return <NpmIcon className=\"size-4 shrink-0\" aria-hidden />;\n }\n return <DockerIcon className=\"size-5 shrink-0\" aria-hidden />;\n}\n\nexport function AgentCanvasVersionModal({\n installedVersion,\n latestVersion,\n updateAvailable,\n isChecking,\n onCheckForUpdates,\n onClose,\n}: AgentCanvasVersionModalProps) {\n const { t } = useTranslation(\"openhands\");\n const [selectedTab, setSelectedTab] = React.useState<UpdateCommandTab>(\"npm\");\n const [copied, setCopied] = React.useState(false);\n const copiedTimeoutRef = React.useRef<number | null>(null);\n const command =\n selectedTab === \"npm\"\n ? AGENT_CANVAS_UPDATE_COMMANDS.npm\n : AGENT_CANVAS_UPDATE_COMMANDS.docker;\n\n React.useEffect(\n () => () => {\n if (copiedTimeoutRef.current !== null) {\n window.clearTimeout(copiedTimeoutRef.current);\n }\n },\n [],\n );\n\n React.useEffect(() => {\n setCopied(false);\n if (copiedTimeoutRef.current !== null) {\n window.clearTimeout(copiedTimeoutRef.current);\n copiedTimeoutRef.current = null;\n }\n }, [selectedTab]);\n\n const copyCommand = React.useCallback(() => {\n void navigator.clipboard?.writeText(command);\n setCopied(true);\n if (copiedTimeoutRef.current !== null) {\n window.clearTimeout(copiedTimeoutRef.current);\n }\n copiedTimeoutRef.current = window.setTimeout(() => {\n setCopied(false);\n copiedTimeoutRef.current = null;\n }, COPY_FEEDBACK_MS);\n }, [command]);\n\n return (\n <ModalBackdrop\n onClose={onClose}\n aria-label={t(I18nKey.SETTINGS$VERSION_MODAL_ARIA_LABEL)}\n >\n <section className=\"relative flex w-[520px] max-w-[90vw] flex-col gap-5 rounded-xl border border-[var(--oh-border)] bg-base-secondary p-6 shadow-xl\">\n <ModalCloseButton\n onClose={onClose}\n testId=\"agent-canvas-version-modal-close\"\n />\n\n <header className=\"flex items-center gap-3 pr-8\">\n {updateAvailable ? (\n <ArrowUpCircle\n className=\"size-7 shrink-0 text-[#3B82F6]\"\n aria-hidden\n />\n ) : (\n <CheckCircle2\n className=\"size-7 shrink-0 text-[var(--oh-status-success)]\"\n aria-hidden\n />\n )}\n <h2 className=\"text-base font-semibold leading-6 text-white\">\n {t(\n updateAvailable\n ? I18nKey.SETTINGS$VERSION_UPDATE_AVAILABLE\n : I18nKey.SETTINGS$VERSION_UP_TO_DATE_TITLE,\n )}\n </h2>\n {updateAvailable && latestVersion ? (\n <span className=\"rounded-full bg-[#1E3A5F] px-2 py-0.5 text-xs font-semibold text-[#3B82F6]\">\n {latestVersion}\n </span>\n ) : null}\n </header>\n\n <div className=\"flex flex-col gap-1\">\n {updateAvailable && latestVersion ? (\n <p className=\"text-sm text-[var(--oh-text)]\">\n {t(I18nKey.SETTINGS$VERSION_UPDATE_MESSAGE, {\n installed: installedVersion,\n latest: latestVersion,\n })}{\" \"}\n <a\n href={AGENT_CANVAS_RELEASE_NOTES_URL}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex items-center gap-1.5 whitespace-nowrap font-medium text-white hover:text-[var(--oh-text)]\"\n >\n {t(I18nKey.SETTINGS$VERSION_RELEASE_NOTES)}\n <ExternalLink className=\"size-4 shrink-0\" aria-hidden />\n </a>\n </p>\n ) : (\n <>\n <p className=\"text-sm text-[var(--oh-text)]\">\n {t(I18nKey.SETTINGS$VERSION_INSTALLED, {\n version: installedVersion,\n })}\n </p>\n {latestVersion ? (\n <p className=\"whitespace-nowrap text-sm text-[var(--oh-status-success)]\">\n {t(I18nKey.SETTINGS$VERSION_LATEST_MESSAGE)}{\" \"}\n <a\n href={AGENT_CANVAS_RELEASE_NOTES_URL}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"inline-flex items-center gap-1.5 font-medium text-white hover:text-[var(--oh-text)]\"\n >\n {t(I18nKey.SETTINGS$VERSION_RELEASE_NOTES)}\n <ExternalLink className=\"size-4 shrink-0\" aria-hidden />\n </a>\n </p>\n ) : (\n <p className=\"text-sm text-[var(--oh-muted)]\">\n {t(I18nKey.SETTINGS$VERSION_CHECK_UNAVAILABLE)}\n </p>\n )}\n </>\n )}\n </div>\n\n {updateAvailable ? (\n <div>\n <div className=\"flex justify-center\">\n {UPDATE_COMMAND_TABS.map((tab) => (\n <button\n key={tab}\n type=\"button\"\n onClick={() => setSelectedTab(tab)}\n className={cn(\n \"inline-flex items-center gap-1.5 px-3 pb-2 text-sm font-medium\",\n selectedTab === tab\n ? \"border-b border-white text-white\"\n : \"text-[var(--oh-muted)] hover:text-white\",\n )}\n >\n <UpdateCommandTabIcon tab={tab} />\n {t(getUpdateCommandTabLabelKey(tab))}\n </button>\n ))}\n </div>\n <div className=\"flex items-center gap-3 rounded-lg border border-[var(--oh-border)] bg-[var(--oh-surface-deep)] px-4 py-3\">\n <code className=\"min-w-0 flex-1 overflow-visible whitespace-nowrap font-mono text-sm text-white\">\n {command}\n </code>\n <button\n type=\"button\"\n onClick={copyCommand}\n aria-label={t(\n copied\n ? I18nKey.BUTTON$COPIED\n : I18nKey.SETTINGS$VERSION_COPY_COMMAND,\n )}\n disabled={copied}\n className=\"shrink-0 text-[var(--oh-muted)] hover:text-white disabled:hover:text-[var(--oh-muted)]\"\n >\n {copied ? (\n <Check\n className=\"size-4 text-[var(--oh-status-success)]\"\n aria-hidden\n />\n ) : (\n <Copy className=\"size-4\" aria-hidden />\n )}\n </button>\n </div>\n </div>\n ) : null}\n\n {!updateAvailable ? (\n <div className=\"flex flex-wrap gap-x-8 gap-y-3\">\n <button\n type=\"button\"\n onClick={onCheckForUpdates}\n className=\"inline-flex items-center gap-2 text-sm font-medium text-white hover:text-[var(--oh-text)] disabled:cursor-wait disabled:text-[var(--oh-muted)]\"\n disabled={isChecking}\n >\n {t(I18nKey.SETTINGS$VERSION_CHECK_FOR_UPDATES)}\n <RefreshCw\n className={cn(\"size-4 shrink-0\", isChecking && \"animate-spin\")}\n aria-hidden\n />\n </button>\n </div>\n ) : null}\n </section>\n </ModalBackdrop>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
interface AgentCanvasVersionModalProps {
|
|
3
|
+
installedVersion: string;
|
|
4
|
+
latestVersion: string | null;
|
|
5
|
+
updateAvailable: boolean;
|
|
6
|
+
isChecking: boolean;
|
|
7
|
+
onCheckForUpdates: () => void;
|
|
8
|
+
onClose: () => void;
|
|
9
|
+
}
|
|
10
|
+
export declare function AgentCanvasVersionModal({ installedVersion, latestVersion, updateAvailable, isChecking, onCheckForUpdates, onClose, }: AgentCanvasVersionModalProps): React.JSX.Element;
|
|
11
|
+
export {};
|