@openhands/agent-canvas 1.0.0-rc.7 → 1.0.0-rc.8
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 -3
- package/README.windows.md +2 -2
- package/build/assets/{QueryClientProvider-2bFjjuvv.js → QueryClientProvider-XcSjsfpb.js} +1 -1
- package/build/assets/{Trans-D1xHkKyr.js → Trans-sy4l4TyQ.js} +1 -1
- package/build/assets/{acp-providers-Djbp2WMV.js → acp-providers-BqUvf67Q.js} +1 -1
- package/build/assets/{active-backend-context-BiVlte2V.js → active-backend-context-CNF2lPkA.js} +1 -1
- package/build/assets/add-backend-modal-BywVr6uq.js +1 -0
- package/build/assets/{agent-server-adapter-BD6kvwWb.js → agent-server-adapter-k8veH-1O.js} +1 -1
- package/build/assets/{agent-server-conversation-service.api-8AC86rC5.js → agent-server-conversation-service.api-CGbkhsLj.js} +1 -1
- package/build/assets/{agent-settings-DycVwGfd.js → agent-settings-DoHXHcoA.js} +1 -1
- package/build/assets/{alert-banner-BUqPui_3.js → alert-banner-Bsvys-hT.js} +1 -1
- package/build/assets/{analytics-consent-form-modal-D0KeG5vZ.js → analytics-consent-form-modal-CVhsAREx.js} +1 -1
- package/build/assets/{api-key-entry-screen-BnvQM0v5.js → api-key-entry-screen-Dnr5TcV0.js} +1 -1
- package/build/assets/{app-settings-FRYUtG-Z.js → app-settings-Bgm2-yOM.js} +1 -1
- package/build/assets/{automation-detail-DiIq3Vsh.js → automation-detail-86M_yMqz.js} +1 -1
- package/build/assets/{automations-list-DQn7k1Ix.js → automations-list-BWUILrqY.js} +1 -1
- package/build/assets/{back-nav-button-B8eULM4t.js → back-nav-button-D20Avel_.js} +1 -1
- package/build/assets/{backend-form-modal-DY3My0us.js → backend-form-modal-Dl29wkF5.js} +1 -1
- package/build/assets/{backend-synced-settings-badge-BW2WPX-c.js → backend-synced-settings-badge-Dcd4712m.js} +1 -1
- package/build/assets/{base-modal-B_MCb3rx.js → base-modal-DvuGYyu1.js} +1 -1
- package/build/assets/{brand-button-B6g_UvEG.js → brand-button-9SOzmqPP.js} +1 -1
- package/build/assets/{browser-tab-DVHx54yn.js → browser-tab-bveyJhG9.js} +1 -1
- package/build/assets/{chat-send-button-Ce9rK8Vd.js → chat-send-button-BhoO7T0s.js} +1 -1
- package/build/assets/{checkmark-BQIxLn5W.js → checkmark--JWAesua.js} +1 -1
- package/build/assets/{circle-plus-check-toggle-DRwQ4Z7K.js → circle-plus-check-toggle-AO9DWyDX.js} +1 -1
- package/build/assets/{close-HybccyBS.js → close--W-tHn1h.js} +1 -1
- package/build/assets/{code-tag-DZCEX2zo.js → code-tag-chmctf4w.js} +1 -1
- package/build/assets/{combobox-caret-kEa3kTvf.js → combobox-caret-C9BNHfSu.js} +1 -1
- package/build/assets/{condenser-settings-BlbT8YRd.js → condenser-settings-DgQ0rsAf.js} +1 -1
- package/build/assets/{confirmation-modal-CG_Fgrny.js → confirmation-modal-Cq3eqvqH.js} +1 -1
- package/build/assets/{context-menu-list-item-CvJv3-kq.js → context-menu-list-item-BQU0jZPq.js} +1 -1
- package/build/assets/conversation-CayU5Lrr.js +19 -0
- package/build/assets/conversation-erinyBqT.js +1 -0
- package/build/assets/conversation-panel-DiI4q-8-.js +1 -0
- package/build/assets/{conversation-service.api-CngSQhPh.js → conversation-service.api-shHWtFwu.js} +1 -1
- package/build/assets/{conversation-tab-empty-state-B5eOSEGv.js → conversation-tab-empty-state-C8tztloo.js} +1 -1
- package/build/assets/{copy-D6CyDz2n.js → copy-CdKN5rtJ.js} +1 -1
- package/build/assets/{declaration-BDfM67Kl.js → declaration-D9ucT0fq.js} +1 -1
- package/build/assets/{device-verify-CAevP6_3.js → device-verify-YuGXnpRk.js} +1 -1
- package/build/assets/{dropdown-classes-CL8egwz_.js → dropdown-classes-CVp0kVdt.js} +1 -1
- package/build/assets/{edit-automation-modal-CwLfhSMN.js → edit-automation-modal-8y9Uctxo.js} +1 -1
- package/build/assets/{ellipsis-button-Db-AwbLv.js → ellipsis-button-k7HLwYth.js} +1 -1
- package/build/assets/{entry.client-BKDpKmdB.js → entry.client-D_wtryHT.js} +2 -2
- package/build/assets/{enum-filter-dropdown-DnYXhc1E.js → enum-filter-dropdown-COqUq3mB.js} +1 -1
- package/build/assets/{environment-switch-overlay-BgYKFdf6.js → environment-switch-overlay-wB5LxfYZ.js} +1 -1
- package/build/assets/{extensions-hub-CgisT2wb.js → extensions-hub-CoWO3SzQ.js} +1 -1
- package/build/assets/{extensions-navigation-nurGkQe5.js → extensions-navigation-D5w2sFQe.js} +1 -1
- package/build/assets/{files-tab-DIyAYvp0.js → files-tab-CxdtgkIe.js} +1 -1
- package/build/assets/{files-tab-store-RScGdwu8.js → files-tab-store-DSKUhziI.js} +1 -1
- package/build/assets/{folder-IChmji2Y.js → folder-DPTBlxWb.js} +1 -1
- package/build/assets/home-3joHMYSR.js +1 -0
- package/build/assets/{install-server-modal-C8fylTet.js → install-server-modal-_7l1gcjd.js} +1 -1
- package/build/assets/{launch-BNiqgTvz.js → launch-fU77utLO.js} +1 -1
- package/build/assets/{lesson-plan-BdmMvboE.js → lesson-plan-CHGc-B8Y.js} +1 -1
- package/build/assets/{lightbulb-DzViGAuw.js → lightbulb-S616sGEL.js} +1 -1
- package/build/assets/{link-external-Dwv3oQAx.js → link-external-ooNztGLp.js} +1 -1
- package/build/assets/llm-not-configured-banner-BMGzpBPV.js +27 -0
- package/build/assets/llm-settings-BRotm_g6.js +1 -0
- package/build/assets/{llm-settings-B92l1Z2N.js → llm-settings-yDgbXP6Q.js} +1 -1
- package/build/assets/{loading-spinner-Dtm7y-w5.js → loading-spinner-D7bOU6I7.js} +1 -1
- package/build/assets/{manage-backends-modal-qpq2M_oN.js → manage-backends-modal-tfdzTXWU.js} +1 -1
- package/build/assets/{manifest-d230d4a5.js → manifest-bbc1374e.js} +1 -1
- package/build/assets/{markdown-renderer-Dt0RXhUJ.js → markdown-renderer-z446oW0Z.js} +1 -1
- package/build/assets/{mcp-BKdD21xY.js → mcp-Dopstf0t.js} +1 -1
- package/build/assets/{messages-Ch8Rd1cx.js → messages-CsFUrAen.js} +1 -1
- package/build/assets/{modal-backdrop-DmDLoot0.js → modal-backdrop-_VbcKk5K.js} +1 -1
- package/build/assets/{modal-body-BWjhfiSa.js → modal-body-Cd-PtMHr.js} +1 -1
- package/build/assets/{modal-classes-DbJbhQCW.js → modal-classes-CNm4ovfm.js} +1 -1
- package/build/assets/{modal-close-button-DXN6uYvt.js → modal-close-button-Dbo0NAMt.js} +1 -1
- package/build/assets/{model-selector-BMn4D5v6.js → model-selector-sioC8xP4.js} +1 -1
- package/build/assets/{navigation-context-BrRCrWhm.js → navigation-context-BpAOh_t5.js} +1 -1
- package/build/assets/{navigation-link-qUrH_I5_.js → navigation-link-Dci7Nuyf.js} +1 -1
- package/build/assets/{onboarding-B50IeNyy.js → onboarding-CQh50i2z.js} +1 -1
- package/build/assets/{openhands-logo-DnfHAq7Y.js → openhands-logo-Dzm-d_V_.js} +1 -1
- package/build/assets/{option-service.api-lzN_3s9w.js → option-service.api-DjPvPAtd.js} +1 -1
- package/build/assets/{organization-service.api-CNmSPGj4.js → organization-service.api-BNc9Kn6n.js} +1 -1
- package/build/assets/{path-utils-CKgIQZAY.js → path-utils-YlkpoImJ.js} +1 -1
- package/build/assets/{plan-components-D9fU4FFh.js → plan-components-CutRBi0G.js} +1 -1
- package/build/assets/{planner-tab-B7kpsTT8.js → planner-tab-DjIFIQDk.js} +1 -1
- package/build/assets/{providers-189W9TJO.js → providers-BiWSYwRT.js} +1 -1
- package/build/assets/{query-client-config-B9ZI-1_w.js → query-client-config-Ca3tW1AH.js} +1 -1
- package/build/assets/{recommended-automations-launcher-C_RcP2yb.js → recommended-automations-launcher-DCi0RXIj.js} +1 -1
- package/build/assets/{root-Bz22PITD.js → root-DrHpnAqU.js} +2 -2
- package/build/assets/{root-layout-B8swq9fS.js → root-layout-Cf7FC9DC.js} +2 -2
- package/build/assets/{runtime-waiting-state-DPjfE32a.js → runtime-waiting-state-8i0Z3A_i.js} +1 -1
- package/build/assets/{sdk-section-page-ozvrzW4r.js → sdk-section-page-COlGKv4E.js} +1 -1
- package/build/assets/{sdk-settings-schema-Ck6f2ON9.js → sdk-settings-schema-Big50zDH.js} +1 -1
- package/build/assets/{search-aDWSdSb7.js → search-C_l_XW4e.js} +1 -1
- package/build/assets/{secrets-settings-Bga0bwB1.js → secrets-settings-DYfTc5c8.js} +1 -1
- package/build/assets/{settings-DHAhcPm2.js → settings-DRmVFdOc.js} +1 -1
- package/build/assets/{settings-dropdown-input-N0FtDFkk.js → settings-dropdown-input-BP-arqjU.js} +1 -1
- package/build/assets/{settings-gear-D8ao16bi.js → settings-gear-f-zWpxfI.js} +1 -1
- package/build/assets/{settings-index-CJvQH5ls.js → settings-index-B035V2pu.js} +1 -1
- package/build/assets/{settings-input-CyWJBrqC.js → settings-input-BM8ANxDb.js} +1 -1
- package/build/assets/{settings-list-classes-CYRnRf8r.js → settings-list-classes-B9uo5WES.js} +1 -1
- package/build/assets/{settings-modal-BeAlR7Be.js → settings-modal-CeRvS5Bc.js} +1 -1
- package/build/assets/{settings-section-header-context-1fN7Xkb3.js → settings-section-header-context-Cid25HM2.js} +1 -1
- package/build/assets/{settings-switch-D3aEIphL.js → settings-switch-xa6q4M6j.js} +1 -1
- package/build/assets/{shared-conversation-CtRf6CQN.js → shared-conversation-CBbpyPaD.js} +1 -1
- package/build/assets/{sidebar-mobile-menu-toggle-DkYaKR6Q.js → sidebar-mobile-menu-toggle-SKcwsEtD.js} +1 -1
- package/build/assets/{sidebar-nav-link-CzeuB4So.js → sidebar-nav-link-CPWuQ_c6.js} +1 -1
- package/build/assets/{skill-card-pill-row-CvLCLqqD.js → skill-card-pill-row-DeodrwPG.js} +1 -1
- package/build/assets/{skills-jKeJCunm.js → skills-BE5HJuGM.js} +1 -1
- package/build/assets/{skills-plugins-juwPhlEE.js → skills-plugins-Dc4ec3CW.js} +1 -1
- package/build/assets/{skills-settings-BW09n_Px.js → skills-settings-B6HwvA0S.js} +1 -1
- package/build/assets/{styled-tooltip-B3wz8m5E.js → styled-tooltip-X61SEwqk.js} +1 -1
- package/build/assets/{suspense-BpkWt-39.js → suspense-Bqb0V0q1.js} +1 -1
- package/build/assets/{switch-skeleton-Cl_Nh2kt.js → switch-skeleton-BbIWemkK.js} +1 -1
- package/build/assets/{task-list-tab-DKnHShLG.js → task-list-tab-BFnyHGsn.js} +1 -1
- package/build/assets/{telemetry-DR_3fMN0.js → telemetry-DCFAqpIA.js} +1 -1
- package/build/assets/{terminal-BFi5FOMc.js → terminal-B92mACR5.js} +1 -1
- package/build/assets/{terminal-CZH2h1J3.js → terminal-CltMeLv4.js} +1 -1
- package/build/assets/{toggle-switch-BzaEofjj.js → toggle-switch-CL_wRiGs.js} +1 -1
- package/build/assets/{typography-BFj4IzMj.js → typography-BLSEGjph.js} +1 -1
- package/build/assets/{u-check-circle-Cs2GOrZ7.js → u-check-circle-dG_VJqx5.js} +1 -1
- package/build/assets/{u-check-circle-half-DGgLKVV1.js → u-check-circle-half-D-5ZPRnd.js} +1 -1
- package/build/assets/{u-circuit-DniZPNAV.js → u-circuit-BXoisXOA.js} +1 -1
- package/build/assets/{u-edit-BvTiDr33.js → u-edit-DIgADxLH.js} +1 -1
- package/build/assets/{use-acp-credential-form-8yHKY_py.js → use-acp-credential-form-LjCIhMSK.js} +1 -1
- package/build/assets/{use-active-conversation-CLzls6XV.js → use-active-conversation-B0_rXnqa.js} +1 -1
- package/build/assets/{use-agent-settings-schema-BCXxH2N-.js → use-agent-settings-schema-D8x5LJVS.js} +1 -1
- package/build/assets/{use-agent-state-BocVPR5S.js → use-agent-state-BuOzLeFN.js} +1 -1
- package/build/assets/{use-cloud-current-user-id-BjDwnldw.js → use-cloud-current-user-id-DVZXa_WH.js} +1 -1
- package/build/assets/use-config-5zEjywCL.js +1 -0
- package/build/assets/{use-create-conversation-CIkPp9u9.js → use-create-conversation-pV2eA-e9.js} +1 -1
- package/build/assets/{use-create-secret-Bwy6457V.js → use-create-secret-ClPpLBgD.js} +1 -1
- package/build/assets/{use-handle-plan-click-CjNwpDeO.js → use-handle-plan-click-CwN_nNib.js} +1 -1
- package/build/assets/use-is-authed-B8eLO-Xq.js +1 -0
- package/build/assets/{use-launch-skill-in-chat-QmcJQxUY.js → use-launch-skill-in-chat-BTgXIu3N.js} +1 -1
- package/build/assets/{use-llm-profiles-CZD1ALup.js → use-llm-profiles-CWLfWjav.js} +1 -1
- package/build/assets/use-runtime-is-ready-Bbory9-s.js +1 -0
- package/build/assets/{use-save-settings-BjYPOrtF.js → use-save-settings-Xp8DD-jf.js} +1 -1
- package/build/assets/{use-settings-YTDcMvj1.js → use-settings-0SeqaDeW.js} +1 -1
- package/build/assets/{use-settings-nav-items-DMit9adK.js → use-settings-nav-items-DVrMNk0I.js} +1 -1
- package/build/assets/{use-skills-fh_U4ZGe.js → use-skills-Bv8LXrys.js} +1 -1
- package/build/assets/{use-tracking-DJ3Z7ha1.js → use-tracking-BhyV5A9i.js} +1 -1
- package/build/assets/{use-user-conversation-Ct93yaXj.js → use-user-conversation-6yFVEXiG.js} +1 -1
- package/build/assets/{useMutation-B1gQr_yr.js → useMutation-Dm84WAKR.js} +1 -1
- package/build/assets/{useQuery-CbqdITLM.js → useQuery-DGRSm7IT.js} +1 -1
- package/build/assets/{useTranslation-C-T8J2U-.js → useTranslation-CL6FTf1b.js} +1 -1
- package/build/assets/{utils-CXRkUr73.js → utils-eXk6yerZ.js} +1 -1
- package/build/assets/{vendor~conversation-panel~conversation-CkFCLbQW.js → vendor~conversation-panel~conversation-D98u43rl.js} +1 -1
- package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-C1BmvJX4.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-Dqpi2xyZ.js} +1 -1
- package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~mcp~~bok0tgtf-RuHTcYaf.js → vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~mcp~~bok0tgtf-7eqKdLSQ.js} +1 -1
- package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~mcp~~bok0tgtf-B04AZhMW.js → vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~mcp~~bok0tgtf-BP3MGAAY.js} +1 -1
- package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~mcp~~ceijy54y-D7ZsdcLa.js → vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~mcp~~ceijy54y-Dkd2wxJA.js} +1 -1
- package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~launch~skills-settings~mcp~automati~dou5smdo-DH07jaIY.js → vendor~root-layout~home~conversation-panel~conversation~launch~skills-settings~mcp~automati~dou5smdo-DavKsAvB.js} +186 -40
- package/build/assets/{vendor~root-layout~home~mcp~automations-list-COlx7Is6.js → vendor~root-layout~home~mcp~automations-list-D40jgugf.js} +1 -1
- package/build/assets/{vendor~root-layout~home~mcp~llm-settings~agent-settings~condenser-settings~verification-set~o7tv66sg-DuiHR4ce.js → vendor~root-layout~home~mcp~llm-settings~agent-settings~condenser-settings~verification-set~o7tv66sg-BIm99UaF.js} +1 -1
- package/build/assets/{vendor~root-layout~home~mcp~llm-settings~agent-settings~condenser-settings~verification-set~o7tv66sg-4yr76Evz.js → vendor~root-layout~home~mcp~llm-settings~agent-settings~condenser-settings~verification-set~o7tv66sg-xCM3k6Rd.js} +1 -1
- package/build/assets/{verification-settings-CeIuPtF2.js → verification-settings-Be6NxjuT.js} +1 -1
- package/build/assets/{x-mark-BMhi11Sg.js → x-mark-C42svtnu.js} +1 -1
- package/build/index.html +4 -4
- package/build/locales/ar/openhands.json +45 -40
- package/build/locales/ca/openhands.json +41 -36
- package/build/locales/de/openhands.json +42 -37
- package/build/locales/en/openhands.json +6 -1
- package/build/locales/es/openhands.json +44 -39
- package/build/locales/fr/openhands.json +44 -39
- package/build/locales/it/openhands.json +44 -39
- package/build/locales/ja/openhands.json +44 -39
- package/build/locales/ko-KR/openhands.json +44 -39
- package/build/locales/no/openhands.json +44 -39
- package/build/locales/pt/openhands.json +44 -39
- package/build/locales/tr/openhands.json +43 -38
- package/build/locales/uk/openhands.json +44 -39
- package/build/locales/zh-CN/openhands.json +44 -39
- package/build/locales/zh-TW/openhands.json +44 -39
- package/config/defaults.json +9 -4
- 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.js +1 -1
- package/dist/components/features/backends/backend-form-modal.js.map +1 -1
- package/dist/components/features/chat/chat-interface.cjs +1 -1
- package/dist/components/features/chat/chat-interface.cjs.map +1 -1
- package/dist/components/features/chat/chat-interface.js +1 -1
- package/dist/components/features/chat/chat-interface.js.map +1 -1
- package/dist/components/features/chat/git-control-bar.cjs +1 -1
- package/dist/components/features/chat/git-control-bar.cjs.map +1 -1
- package/dist/components/features/chat/git-control-bar.js +1 -1
- package/dist/components/features/chat/git-control-bar.js.map +1 -1
- package/dist/components/features/chat/open-repository-modal.cjs +1 -1
- package/dist/components/features/chat/open-repository-modal.cjs.map +1 -1
- package/dist/components/features/chat/open-repository-modal.js +0 -3
- package/dist/components/features/chat/open-repository-modal.js.map +1 -1
- package/dist/components/features/chat/pending-user-messages.cjs +1 -1
- package/dist/components/features/chat/pending-user-messages.cjs.map +1 -1
- package/dist/components/features/chat/pending-user-messages.js +31 -28
- package/dist/components/features/chat/pending-user-messages.js.map +1 -1
- package/dist/components/features/home/git-branch-dropdown/git-branch-dropdown.cjs +1 -1
- package/dist/components/features/home/git-branch-dropdown/git-branch-dropdown.cjs.map +1 -1
- package/dist/components/features/home/git-branch-dropdown/git-branch-dropdown.js +79 -77
- package/dist/components/features/home/git-branch-dropdown/git-branch-dropdown.js.map +1 -1
- package/dist/components/features/home/git-provider-dropdown/git-provider-dropdown.cjs +1 -1
- package/dist/components/features/home/git-provider-dropdown/git-provider-dropdown.cjs.map +1 -1
- package/dist/components/features/home/git-provider-dropdown/git-provider-dropdown.js +67 -65
- package/dist/components/features/home/git-provider-dropdown/git-provider-dropdown.js.map +1 -1
- package/dist/components/features/home/git-repo-dropdown/git-repo-dropdown.cjs +1 -1
- package/dist/components/features/home/git-repo-dropdown/git-repo-dropdown.cjs.map +1 -1
- package/dist/components/features/home/git-repo-dropdown/git-repo-dropdown.js +2 -2
- package/dist/components/features/home/git-repo-dropdown/git-repo-dropdown.js.map +1 -1
- package/dist/components/features/settings/settings-navigation.cjs +1 -1
- package/dist/components/features/settings/settings-navigation.cjs.map +1 -1
- package/dist/components/features/settings/settings-navigation.js +1 -1
- package/dist/components/features/settings/settings-navigation.js.map +1 -1
- package/dist/components/features/sidebar/sidebar.cjs +1 -1
- package/dist/components/features/sidebar/sidebar.cjs.map +1 -1
- package/dist/components/features/sidebar/sidebar.js +3 -2
- package/dist/components/features/sidebar/sidebar.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 +6 -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 +612 -527
- package/dist/i18n/translation.js.map +1 -1
- package/dist/locales/ar/openhands.json +45 -40
- package/dist/locales/ca/openhands.json +41 -36
- package/dist/locales/de/openhands.json +42 -37
- package/dist/locales/en/openhands.json +6 -1
- package/dist/locales/es/openhands.json +44 -39
- package/dist/locales/fr/openhands.json +44 -39
- package/dist/locales/it/openhands.json +44 -39
- package/dist/locales/ja/openhands.json +44 -39
- package/dist/locales/ko-KR/openhands.json +44 -39
- package/dist/locales/no/openhands.json +44 -39
- package/dist/locales/pt/openhands.json +44 -39
- package/dist/locales/tr/openhands.json +43 -38
- package/dist/locales/uk/openhands.json +44 -39
- package/dist/locales/zh-CN/openhands.json +44 -39
- package/dist/locales/zh-TW/openhands.json +44 -39
- package/dist/node_modules/@openhands/extensions/skills/index.cjs +186 -40
- package/dist/node_modules/@openhands/extensions/skills/index.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/skills/index.js +2 -2
- package/dist/node_modules/@openhands/extensions/skills/index.js.map +1 -1
- package/dist/package.cjs +1 -1
- package/dist/package.cjs.map +1 -1
- package/dist/package.js +2 -2
- package/dist/package.js.map +1 -1
- package/package.json +2 -2
- package/scripts/check-sdk-version-sync.mjs +6 -6
- package/scripts/check-translation-completeness.cjs +149 -59
- package/scripts/dev-safe.mjs +1 -1
- package/build/assets/add-backend-modal-CSfOPrnr.js +0 -1
- package/build/assets/conversation-B7ztPdyS.js +0 -1
- package/build/assets/conversation-DZYd8QiZ.js +0 -19
- package/build/assets/conversation-panel-CklMXcs6.js +0 -1
- package/build/assets/home-iVOrSOWL.js +0 -1
- package/build/assets/llm-not-configured-banner-BQgVTo0O.js +0 -27
- package/build/assets/llm-settings-ICWFhhjM.js +0 -1
- package/build/assets/use-config-C4DX1-nF.js +0 -1
- package/build/assets/use-is-authed-7P3xSsit.js +0 -1
- package/build/assets/use-runtime-is-ready-B7sbw-q5.js +0 -1
|
@@ -12,9 +12,9 @@
|
|
|
12
12
|
"TASK$RESULT": "结果",
|
|
13
13
|
"TASK$QUERY": "查询",
|
|
14
14
|
"OBSERVATION_MESSAGE$CANVAS_UI": "已更新工作区视图",
|
|
15
|
-
"ONBOARDING$ACP_SECRETS_SUBSCRIPTION_NOTE": "
|
|
16
|
-
"ONBOARDING$ACP_AUTH_DETECTED": "
|
|
17
|
-
"ONBOARDING$ACP_AUTH_CHECKING": "
|
|
15
|
+
"ONBOARDING$ACP_SECRETS_SUBSCRIPTION_NOTE": "已通过订阅或登录账号登录?请将这些字段留空 — 无需 API 密钥。",
|
|
16
|
+
"ONBOARDING$ACP_AUTH_DETECTED": "您已登录 {{provider}} — 下面的字段可以留空。",
|
|
17
|
+
"ONBOARDING$ACP_AUTH_CHECKING": "正在检查现有的 {{provider}} 登录…",
|
|
18
18
|
"MAINTENANCE$SCHEDULED_MESSAGE": "计划维护将于{{time}}开始",
|
|
19
19
|
"ALERT$FAULTY_MODELS_MESSAGE": "以下模型当前报告错误:",
|
|
20
20
|
"AZURE_DEVOPS$CONNECT_ACCOUNT": "连接 Azure DevOps 账户",
|
|
@@ -144,7 +144,7 @@
|
|
|
144
144
|
"ANALYTICS$CONFIRM_PREFERENCES": "确认偏好",
|
|
145
145
|
"SETTINGS$SAVING": "保存中...",
|
|
146
146
|
"SETTINGS$SAVE_CHANGES": "保存更改",
|
|
147
|
-
"SETTINGS$SAVE_AND_RECONNECT": "
|
|
147
|
+
"SETTINGS$SAVE_AND_RECONNECT": "保存并重新连接",
|
|
148
148
|
"SETTINGS$SDK_SCHEMA_UNAVAILABLE": "SDK 设置架构不可用。",
|
|
149
149
|
"SCHEMA$AGENT$DESCRIPTION": "要使用的代理类。",
|
|
150
150
|
"SCHEMA$AGENT$LABEL": "代理",
|
|
@@ -320,22 +320,22 @@
|
|
|
320
320
|
"SETTINGS$GITLAB": "GitLab",
|
|
321
321
|
"SETTINGS$NAV_CONDENSER": "压缩器",
|
|
322
322
|
"SETTINGS$NAV_LLM": "LLM",
|
|
323
|
-
"SETTINGS$AGENT_PAGE_DESCRIPTION": "
|
|
323
|
+
"SETTINGS$AGENT_PAGE_DESCRIPTION": "在内置的 OpenHands 代理和外部 ACP(Agent Client Protocol)子进程(如 Claude Code、Codex 或 Gemini CLI)之间进行选择。",
|
|
324
324
|
"SETTINGS$AGENT_TYPE_OPENHANDS": "OpenHands",
|
|
325
|
-
"SETTINGS$AGENT_TYPE_ACP": "ACP
|
|
326
|
-
"SETTINGS$AGENT_PRESET": "
|
|
327
|
-
"SETTINGS$AGENT_PRESET_CUSTOM": "
|
|
328
|
-
"SETTINGS$AGENT_COMMAND": "
|
|
329
|
-
"SETTINGS$AGENT_COMMAND_HINT": "
|
|
330
|
-
"SETTINGS$AGENT_MODEL": "
|
|
325
|
+
"SETTINGS$AGENT_TYPE_ACP": "ACP(外部子进程)",
|
|
326
|
+
"SETTINGS$AGENT_PRESET": "预设",
|
|
327
|
+
"SETTINGS$AGENT_PRESET_CUSTOM": "自定义",
|
|
328
|
+
"SETTINGS$AGENT_COMMAND": "命令",
|
|
329
|
+
"SETTINGS$AGENT_COMMAND_HINT": "用于启动 ACP 子进程的命令行。API 密钥通过机密面板进行配置。",
|
|
330
|
+
"SETTINGS$AGENT_MODEL": "模型",
|
|
331
331
|
"SETTINGS$AGENT_CUSTOM_MODEL": "自定义模型",
|
|
332
332
|
"SETTINGS$AGENT_MODEL_HINT": "选择一个建议的 ACP 模型,或输入自定义模型覆盖。内置提供商会保存一个具体的模型,而不是将模型留空。",
|
|
333
333
|
"SETTINGS$ACP_CREDENTIAL_CONFLICT_WARNING": "在设置 {{credential}} 的同时设置 {{conflicting}} 会破坏其身份验证——请将其中一项留空。",
|
|
334
334
|
"SETTINGS$ACP_CREDENTIALS_TITLE": "凭据",
|
|
335
335
|
"SETTINGS$ACP_CREDENTIALS_DESCRIPTION": "保存为密钥并在运行时注入到代理中。将字段留空以保留现有值。",
|
|
336
|
-
"SETTINGS$AGENT_DISABLED_TOOLTIP": "
|
|
336
|
+
"SETTINGS$AGENT_DISABLED_TOOLTIP": "当 {{agentName}} 为活动代理时禁用",
|
|
337
337
|
"SETTINGS$NAV_VERIFICATION": "验证",
|
|
338
|
-
"SETTINGS$PAGE_AGENT_SUBLINE": "
|
|
338
|
+
"SETTINGS$PAGE_AGENT_SUBLINE": "在内置的 OpenHands 代理和外部 ACP 子进程之间进行选择。",
|
|
339
339
|
"SETTINGS$PAGE_LLM_SUBLINE": "代理的模型、API 密钥和选项。",
|
|
340
340
|
"SETTINGS$PAGE_LLM_PROFILES_SUBLINE": "为代理创建、编辑和激活已保存的 LLM 配置文件。",
|
|
341
341
|
"SETTINGS$PAGE_CONDENSER_SUBLINE": "对长对话进行摘要,以保持在上下文限制内。",
|
|
@@ -380,23 +380,23 @@
|
|
|
380
380
|
"SETTINGS$LLM_PROFILES": "LLM配置文件",
|
|
381
381
|
"SETTINGS$GIT_SETTINGS": "Git设置",
|
|
382
382
|
"SETTINGS$GIT_SETTINGS_DESCRIPTION": "配置OpenHands用于提交更改的用户名和电子邮件。",
|
|
383
|
-
"SETTINGS$AGENT_SERVER_URL": "
|
|
383
|
+
"SETTINGS$AGENT_SERVER_URL": "代理服务器 URL",
|
|
384
384
|
"SETTINGS$AGENT_SERVER_URL_PLACEHOLDER": "https://agent.example.com",
|
|
385
|
-
"SETTINGS$AGENT_SERVER_API_KEY": "
|
|
386
|
-
"SETTINGS$AGENT_SERVER_API_KEY_PLACEHOLDER": "
|
|
387
|
-
"SETTINGS$AGENT_SERVER_BROWSER_ONLY_NOTE": "
|
|
388
|
-
"SETTINGS$AGENT_SERVER_CONNECTION_DETAILS_TITLE": "
|
|
389
|
-
"SETTINGS$AGENT_SERVER_CONNECTION_DETAILS_DESCRIPTION": "
|
|
390
|
-
"SETTINGS$AGENT_SERVER_RETRY_CONNECTION": "
|
|
391
|
-
"SETTINGS$AGENT_SERVER_ONBOARDING_EYEBROW": "
|
|
392
|
-
"SETTINGS$AGENT_SERVER_ONBOARDING_TITLE": "
|
|
393
|
-
"SETTINGS$AGENT_SERVER_ONBOARDING_DESCRIPTION": "Agent Canvas
|
|
394
|
-
"SETTINGS$AGENT_SERVER_UNAVAILABLE_STATUS_TITLE": "
|
|
395
|
-
"SETTINGS$AGENT_SERVER_UNAVAILABLE_STATUS_MESSAGE": "
|
|
396
|
-
"SETTINGS$AGENT_SERVER_OPEN_SETTINGS_PAGE": "
|
|
397
|
-
"SETTINGS$AGENT_SERVER_SETUP_GUIDE_HINT": "
|
|
398
|
-
"SETTINGS$AGENT_SERVER_SETUP_GUIDE_LINK": "
|
|
399
|
-
"SETTINGS$AGENT_SERVER_DETAILS_LABEL": "
|
|
385
|
+
"SETTINGS$AGENT_SERVER_API_KEY": "会话 API 密钥",
|
|
386
|
+
"SETTINGS$AGENT_SERVER_API_KEY_PLACEHOLDER": "输入 X-Session-API-Key 的值",
|
|
387
|
+
"SETTINGS$AGENT_SERVER_BROWSER_ONLY_NOTE": "仅保存在此浏览器中。在您于此处覆盖之前,部署默认值仍然可用。",
|
|
388
|
+
"SETTINGS$AGENT_SERVER_CONNECTION_DETAILS_TITLE": "连接详情",
|
|
389
|
+
"SETTINGS$AGENT_SERVER_CONNECTION_DETAILS_DESCRIPTION": "粘贴 Agent Canvas 应使用的代理服务器 URL 和可选的会话 API 密钥。",
|
|
390
|
+
"SETTINGS$AGENT_SERVER_RETRY_CONNECTION": "重试连接",
|
|
391
|
+
"SETTINGS$AGENT_SERVER_ONBOARDING_EYEBROW": "开始使用",
|
|
392
|
+
"SETTINGS$AGENT_SERVER_ONBOARDING_TITLE": "连接到您的代理服务器",
|
|
393
|
+
"SETTINGS$AGENT_SERVER_ONBOARDING_DESCRIPTION": "Agent Canvas 需要代理服务器才能加载对话、工具和设置。启动或选择兼容的服务器,然后在此处连接。",
|
|
394
|
+
"SETTINGS$AGENT_SERVER_UNAVAILABLE_STATUS_TITLE": "无法连接到已配置的服务器",
|
|
395
|
+
"SETTINGS$AGENT_SERVER_UNAVAILABLE_STATUS_MESSAGE": "请检查 URL,确认服务器正在运行,然后重试。您也可以将 Agent Canvas 指向其他部署。",
|
|
396
|
+
"SETTINGS$AGENT_SERVER_OPEN_SETTINGS_PAGE": "打开完整设置页面",
|
|
397
|
+
"SETTINGS$AGENT_SERVER_SETUP_GUIDE_HINT": "如果您在启动或升级服务器时需要帮助,请参阅",
|
|
398
|
+
"SETTINGS$AGENT_SERVER_SETUP_GUIDE_LINK": "设置说明",
|
|
399
|
+
"SETTINGS$AGENT_SERVER_DETAILS_LABEL": "详情: {{details}}",
|
|
400
400
|
"SETTINGS$SOUND_NOTIFICATIONS": "声音通知",
|
|
401
401
|
"SETTINGS$MAX_BUDGET_PER_TASK": "每个任务的最大预算",
|
|
402
402
|
"SETTINGS$MAX_BUDGET_PER_CONVERSATION": "每次对话的最大预算",
|
|
@@ -704,7 +704,7 @@
|
|
|
704
704
|
"SIDEBAR$EXPAND": "展开侧边栏",
|
|
705
705
|
"FEEDBACK$PUBLIC_LABEL": "公开",
|
|
706
706
|
"FEEDBACK$PRIVATE_LABEL": "私有",
|
|
707
|
-
"SIDEBAR$AUTOMATIONS": "
|
|
707
|
+
"SIDEBAR$AUTOMATIONS": "自动化",
|
|
708
708
|
"AUTOMATIONS$TITLE": "自动化",
|
|
709
709
|
"AUTOMATIONS$SUBTITLE": "查看活动和非活动的自动化,按元数据搜索,并检查只读详情。",
|
|
710
710
|
"AUTOMATIONS$ADD_AUTOMATION": "添加自动化",
|
|
@@ -1158,7 +1158,7 @@
|
|
|
1158
1158
|
"HOME$REMOVE_WORKSPACE": "移除",
|
|
1159
1159
|
"HOME$DONE": "完成",
|
|
1160
1160
|
"HOME$NO_WORKSPACES": "暂无工作区",
|
|
1161
|
-
"HOME$HOST_HOME_NOT_MOUNTED_HINT": "
|
|
1161
|
+
"HOME$HOST_HOME_NOT_MOUNTED_HINT": "代理服务器无法访问此目录。请检查路径是否存在且可读。",
|
|
1162
1162
|
"HOME$NO_WORKSPACE_OPTION": "无工作区",
|
|
1163
1163
|
"HOME$WORKSPACE_PLACEHOLDER": "选择工作区",
|
|
1164
1164
|
"HOME$ADD_WORKSPACES_TITLE": "添加工作区",
|
|
@@ -1256,8 +1256,8 @@
|
|
|
1256
1256
|
"SETTINGS$MCP_ERROR_NAME_DUPLICATE": "已存在同名的STDIO服务器",
|
|
1257
1257
|
"SETTINGS$MCP_ERROR_COMMAND_REQUIRED": "命令是必需的",
|
|
1258
1258
|
"SETTINGS$MCP_ERROR_COMMAND_NO_SPACES": "命令不能包含空格",
|
|
1259
|
-
"SETTINGS$MCP_ERROR_URL_DUPLICATE": "
|
|
1260
|
-
"SETTINGS$MCP_ERROR_ENV_INVALID_FORMAT": "
|
|
1259
|
+
"SETTINGS$MCP_ERROR_URL_DUPLICATE": "所选类型已存在使用此 URL 的服务器",
|
|
1260
|
+
"SETTINGS$MCP_ERROR_ENV_INVALID_FORMAT": "环境变量必须遵循 KEY=value 格式",
|
|
1261
1261
|
"SETTINGS$MCP_ERROR_TIMEOUT_INVALID_NUMBER": "超时必须是有效数字",
|
|
1262
1262
|
"SETTINGS$MCP_ERROR_TIMEOUT_POSITIVE": "超时必须为正数",
|
|
1263
1263
|
"SETTINGS$MCP_ERROR_TIMEOUT_MAX_EXCEEDED": "超时不能超过3600秒(1小时)",
|
|
@@ -1632,8 +1632,8 @@
|
|
|
1632
1632
|
"HOME$REMOVE_WORKSPACE_CONFIRMATION": "从您保存的工作区中删除“{{name}}”吗?",
|
|
1633
1633
|
"HOME$REMOVE_WORKSPACE_PARENT_CONFIRMATION": "删除“{{name}}”及其 {{count}} 个子工作区吗?",
|
|
1634
1634
|
"HOME$WORKSPACE_SCAN_ERROR": "部分工作区文件夹无法加载。",
|
|
1635
|
-
"HOME$WORKSPACES_UNSUPPORTED_AGENT_SERVER": "
|
|
1636
|
-
"HOME$WORKSPACES_UNSUPPORTED_PLACEHOLDER": "
|
|
1635
|
+
"HOME$WORKSPACES_UNSUPPORTED_AGENT_SERVER": "工作区仅支持 agent-server {{requiredVersion}} 或更高版本。此后端正在运行 {{actualVersion}}。请将您的 agent-server 后端升级到最新版本。",
|
|
1636
|
+
"HOME$WORKSPACES_UNSUPPORTED_PLACEHOLDER": "升级 agent-server 以使用工作区",
|
|
1637
1637
|
"EVENT_GROUP$ACTIONS_COMPLETED": "已完成 {{count}} 个操作",
|
|
1638
1638
|
"EVENT_GROUP$ACTIONS_PROGRESS": "已完成 {{completed}}/{{total}} 个操作",
|
|
1639
1639
|
"EVENT_GROUP$EXPAND": "展开操作",
|
|
@@ -1648,7 +1648,7 @@
|
|
|
1648
1648
|
"ONBOARDING$AGENT_OPENHANDS_DESCRIPTION": "默认的 OpenHands 智能体。最适合通用的编码和探索。",
|
|
1649
1649
|
"ONBOARDING$AGENT_CLAUDE_CODE_DESCRIPTION": "Anthropic 的 Claude Code 智能体。",
|
|
1650
1650
|
"ONBOARDING$AGENT_CODEX_DESCRIPTION": "OpenAI 的 Codex 智能体。",
|
|
1651
|
-
"ONBOARDING$AGENT_GEMINI_CLI_DESCRIPTION": "Google
|
|
1651
|
+
"ONBOARDING$AGENT_GEMINI_CLI_DESCRIPTION": "Google 的 Gemini CLI 代理。",
|
|
1652
1652
|
"ONBOARDING$BACKEND_TITLE": "检查后端",
|
|
1653
1653
|
"ONBOARDING$BACKEND_SUBTITLE": "OpenHands 通过智能体服务器进行通信。请确认默认后端可访问。",
|
|
1654
1654
|
"ONBOARDING$BACKEND_CONNECTED_TITLE": "已连接!🎉",
|
|
@@ -1763,7 +1763,7 @@
|
|
|
1763
1763
|
"BACKEND$NAME_REQUIRED": "名称为必填项",
|
|
1764
1764
|
"BACKEND$HOST_REQUIRED": "主机为必填项",
|
|
1765
1765
|
"BACKEND$HOST_INVALID": "请输入有效的 URL(例如 http://localhost:8080)",
|
|
1766
|
-
"BACKEND$NO_BACKEND_AVAILABLE": "
|
|
1766
|
+
"BACKEND$NO_BACKEND_AVAILABLE": "没有可用的后端",
|
|
1767
1767
|
"ONBOARDING$ACP_SECRET_FILE_BLOB_HINT": "粘贴 {{file}} 的完整内容。运行 `cat {{file}}` 获取。它会作为密钥保存,并在运行时写入磁盘供智能体使用。",
|
|
1768
1768
|
"ONBOARDING$ACP_SECRET_OAUTH_TOKEN_HINT": "Claude Pro/Max 的订阅 OAuth 令牌。在终端运行 `claude setup-token` 获取。",
|
|
1769
1769
|
"ONBOARDING$ACP_SECRET_GCP_PROJECT_HINT": "用于 Vertex AI 的 Google Cloud 项目 ID(例如 `gcloud config get-value project` 的输出)。",
|
|
@@ -1772,7 +1772,7 @@
|
|
|
1772
1772
|
"ONBOARDING$ACP_SECRETS_REQUIRED_NOTE": "此后端没有主机登录,因此运行 {{provider}} 需要提供凭据。",
|
|
1773
1773
|
"ONBOARDING$ACP_SECRETS_REQUIRED_BLOCKED": "请填写上述凭据以继续,或在后端登录。",
|
|
1774
1774
|
"ONBOARDING$ACP_SECRETS_ORPHANED_WARNING": "已保存,但此后端尚无法使用这些凭据——一旦支持 ACP 文件凭据即会生效。",
|
|
1775
|
-
"SETTINGS$UPGRADE_BUTTON": "
|
|
1775
|
+
"SETTINGS$UPGRADE_BUTTON": "升级",
|
|
1776
1776
|
"SETTINGS$AGENT": "代理",
|
|
1777
1777
|
"CONVERSATION$CONFIRM_DELETE_OLDER_TITLE": "删除较早的会话",
|
|
1778
1778
|
"CONVERSATION$CONFIRM_DELETE_OLDER_DESC": "确定要删除 {{count}} 条较早的会话吗?此操作无法撤销。",
|
|
@@ -1783,5 +1783,10 @@
|
|
|
1783
1783
|
"CRITIC$POTENTIAL_ISSUES": "潜在问题:",
|
|
1784
1784
|
"CRITIC$INFRASTRUCTURE": "基础设施:",
|
|
1785
1785
|
"CRITIC$LIKELY_FOLLOWUP": "可能的后续操作:",
|
|
1786
|
-
"CRITIC$OTHER": "其他:"
|
|
1786
|
+
"CRITIC$OTHER": "其他:",
|
|
1787
|
+
"COMMON$SELECT_PROVIDER_PLACEHOLDER": "选择提供商",
|
|
1788
|
+
"COMMON$SEARCH_REPOSITORIES_PLACEHOLDER": "搜索仓库...",
|
|
1789
|
+
"COMMON$SELECT_BRANCH_PLACEHOLDER": "选择分支...",
|
|
1790
|
+
"CHAT_INTERFACE$FAILED_TO_SEND_MESSAGE": "消息发送失败",
|
|
1791
|
+
"SETTINGS$FETCH_ERROR": "获取设置时出现问题。请重新加载页面。"
|
|
1787
1792
|
}
|
|
@@ -12,9 +12,9 @@
|
|
|
12
12
|
"TASK$RESULT": "結果",
|
|
13
13
|
"TASK$QUERY": "查詢",
|
|
14
14
|
"OBSERVATION_MESSAGE$CANVAS_UI": "已更新工作區檢視",
|
|
15
|
-
"ONBOARDING$ACP_SECRETS_SUBSCRIPTION_NOTE": "
|
|
16
|
-
"ONBOARDING$ACP_AUTH_DETECTED": "
|
|
17
|
-
"ONBOARDING$ACP_AUTH_CHECKING": "
|
|
15
|
+
"ONBOARDING$ACP_SECRETS_SUBSCRIPTION_NOTE": "已透過訂閱或登入帳號登入?請將這些欄位留空 — 不需要 API 金鑰。",
|
|
16
|
+
"ONBOARDING$ACP_AUTH_DETECTED": "您已登入 {{provider}} — 下方欄位可以留空。",
|
|
17
|
+
"ONBOARDING$ACP_AUTH_CHECKING": "正在檢查現有的 {{provider}} 登入…",
|
|
18
18
|
"MAINTENANCE$SCHEDULED_MESSAGE": "計劃維護將於{{time}}開始",
|
|
19
19
|
"ALERT$FAULTY_MODELS_MESSAGE": "以下模型目前報告錯誤:",
|
|
20
20
|
"AZURE_DEVOPS$CONNECT_ACCOUNT": "連接 Azure DevOps 帳戶",
|
|
@@ -144,7 +144,7 @@
|
|
|
144
144
|
"ANALYTICS$CONFIRM_PREFERENCES": "確認偏好",
|
|
145
145
|
"SETTINGS$SAVING": "儲存中...",
|
|
146
146
|
"SETTINGS$SAVE_CHANGES": "儲存變更",
|
|
147
|
-
"SETTINGS$SAVE_AND_RECONNECT": "
|
|
147
|
+
"SETTINGS$SAVE_AND_RECONNECT": "儲存並重新連線",
|
|
148
148
|
"SETTINGS$SDK_SCHEMA_UNAVAILABLE": "無法使用 SDK 設定結構描述。",
|
|
149
149
|
"SCHEMA$AGENT$DESCRIPTION": "要使用的代理類別。",
|
|
150
150
|
"SCHEMA$AGENT$LABEL": "代理",
|
|
@@ -320,22 +320,22 @@
|
|
|
320
320
|
"SETTINGS$GITLAB": "GitLab",
|
|
321
321
|
"SETTINGS$NAV_CONDENSER": "壓縮器",
|
|
322
322
|
"SETTINGS$NAV_LLM": "LLM",
|
|
323
|
-
"SETTINGS$AGENT_PAGE_DESCRIPTION": "
|
|
323
|
+
"SETTINGS$AGENT_PAGE_DESCRIPTION": "在內建的 OpenHands 代理和外部 ACP(Agent Client Protocol)子處理程序(如 Claude Code、Codex 或 Gemini CLI)之間進行選擇。",
|
|
324
324
|
"SETTINGS$AGENT_TYPE_OPENHANDS": "OpenHands",
|
|
325
|
-
"SETTINGS$AGENT_TYPE_ACP": "ACP
|
|
326
|
-
"SETTINGS$AGENT_PRESET": "
|
|
327
|
-
"SETTINGS$AGENT_PRESET_CUSTOM": "
|
|
328
|
-
"SETTINGS$AGENT_COMMAND": "
|
|
329
|
-
"SETTINGS$AGENT_COMMAND_HINT": "
|
|
330
|
-
"SETTINGS$AGENT_MODEL": "
|
|
325
|
+
"SETTINGS$AGENT_TYPE_ACP": "ACP(外部子處理程序)",
|
|
326
|
+
"SETTINGS$AGENT_PRESET": "預設集",
|
|
327
|
+
"SETTINGS$AGENT_PRESET_CUSTOM": "自訂",
|
|
328
|
+
"SETTINGS$AGENT_COMMAND": "命令",
|
|
329
|
+
"SETTINGS$AGENT_COMMAND_HINT": "用於啟動 ACP 子處理程序的命令列。API 金鑰透過機密面板進行設定。",
|
|
330
|
+
"SETTINGS$AGENT_MODEL": "模型",
|
|
331
331
|
"SETTINGS$AGENT_CUSTOM_MODEL": "自訂模型",
|
|
332
332
|
"SETTINGS$AGENT_MODEL_HINT": "選擇一個建議的 ACP 模型,或輸入自訂模型覆寫。內建供應商會儲存具體的模型,而不是將模型留空。",
|
|
333
333
|
"SETTINGS$ACP_CREDENTIAL_CONFLICT_WARNING": "在設定 {{credential}} 的同時設定 {{conflicting}} 會破壞其身分驗證——請將其中一項留空。",
|
|
334
334
|
"SETTINGS$ACP_CREDENTIALS_TITLE": "憑證",
|
|
335
335
|
"SETTINGS$ACP_CREDENTIALS_DESCRIPTION": "儲存為密鑰並在執行時注入代理。將欄位留空以保留現有值。",
|
|
336
|
-
"SETTINGS$AGENT_DISABLED_TOOLTIP": "
|
|
336
|
+
"SETTINGS$AGENT_DISABLED_TOOLTIP": "當 {{agentName}} 為使用中代理時停用",
|
|
337
337
|
"SETTINGS$NAV_VERIFICATION": "驗證",
|
|
338
|
-
"SETTINGS$PAGE_AGENT_SUBLINE": "
|
|
338
|
+
"SETTINGS$PAGE_AGENT_SUBLINE": "在內建的 OpenHands 代理和外部 ACP 子處理程序之間進行選擇。",
|
|
339
339
|
"SETTINGS$PAGE_LLM_SUBLINE": "代理的模型、API 金鑰和選項。",
|
|
340
340
|
"SETTINGS$PAGE_LLM_PROFILES_SUBLINE": "為代理建立、編輯和啟用已儲存的 LLM 設定檔。",
|
|
341
341
|
"SETTINGS$PAGE_CONDENSER_SUBLINE": "對長對話進行摘要,以保持在上下文限制內。",
|
|
@@ -380,23 +380,23 @@
|
|
|
380
380
|
"SETTINGS$LLM_PROFILES": "LLM設定檔",
|
|
381
381
|
"SETTINGS$GIT_SETTINGS": "Git設定",
|
|
382
382
|
"SETTINGS$GIT_SETTINGS_DESCRIPTION": "配置OpenHands用於提交更改的用戶名和電子郵件。",
|
|
383
|
-
"SETTINGS$AGENT_SERVER_URL": "
|
|
383
|
+
"SETTINGS$AGENT_SERVER_URL": "代理伺服器 URL",
|
|
384
384
|
"SETTINGS$AGENT_SERVER_URL_PLACEHOLDER": "https://agent.example.com",
|
|
385
|
-
"SETTINGS$AGENT_SERVER_API_KEY": "
|
|
386
|
-
"SETTINGS$AGENT_SERVER_API_KEY_PLACEHOLDER": "
|
|
387
|
-
"SETTINGS$AGENT_SERVER_BROWSER_ONLY_NOTE": "
|
|
388
|
-
"SETTINGS$AGENT_SERVER_CONNECTION_DETAILS_TITLE": "
|
|
389
|
-
"SETTINGS$AGENT_SERVER_CONNECTION_DETAILS_DESCRIPTION": "
|
|
390
|
-
"SETTINGS$AGENT_SERVER_RETRY_CONNECTION": "
|
|
391
|
-
"SETTINGS$AGENT_SERVER_ONBOARDING_EYEBROW": "
|
|
392
|
-
"SETTINGS$AGENT_SERVER_ONBOARDING_TITLE": "
|
|
393
|
-
"SETTINGS$AGENT_SERVER_ONBOARDING_DESCRIPTION": "Agent Canvas
|
|
394
|
-
"SETTINGS$AGENT_SERVER_UNAVAILABLE_STATUS_TITLE": "
|
|
395
|
-
"SETTINGS$AGENT_SERVER_UNAVAILABLE_STATUS_MESSAGE": "
|
|
396
|
-
"SETTINGS$AGENT_SERVER_OPEN_SETTINGS_PAGE": "
|
|
397
|
-
"SETTINGS$AGENT_SERVER_SETUP_GUIDE_HINT": "
|
|
398
|
-
"SETTINGS$AGENT_SERVER_SETUP_GUIDE_LINK": "
|
|
399
|
-
"SETTINGS$AGENT_SERVER_DETAILS_LABEL": "
|
|
385
|
+
"SETTINGS$AGENT_SERVER_API_KEY": "工作階段 API 金鑰",
|
|
386
|
+
"SETTINGS$AGENT_SERVER_API_KEY_PLACEHOLDER": "輸入 X-Session-API-Key 的值",
|
|
387
|
+
"SETTINGS$AGENT_SERVER_BROWSER_ONLY_NOTE": "僅儲存在此瀏覽器中。在您於此處覆寫之前,部署預設值仍然可用。",
|
|
388
|
+
"SETTINGS$AGENT_SERVER_CONNECTION_DETAILS_TITLE": "連線詳細資訊",
|
|
389
|
+
"SETTINGS$AGENT_SERVER_CONNECTION_DETAILS_DESCRIPTION": "貼上 Agent Canvas 應使用的代理伺服器 URL 和選用的工作階段 API 金鑰。",
|
|
390
|
+
"SETTINGS$AGENT_SERVER_RETRY_CONNECTION": "重試連線",
|
|
391
|
+
"SETTINGS$AGENT_SERVER_ONBOARDING_EYEBROW": "開始使用",
|
|
392
|
+
"SETTINGS$AGENT_SERVER_ONBOARDING_TITLE": "連線到您的代理伺服器",
|
|
393
|
+
"SETTINGS$AGENT_SERVER_ONBOARDING_DESCRIPTION": "Agent Canvas 需要代理伺服器才能載入對話、工具和設定。啟動或選擇相容的伺服器,然後在此處連線。",
|
|
394
|
+
"SETTINGS$AGENT_SERVER_UNAVAILABLE_STATUS_TITLE": "無法連線到已設定的伺服器",
|
|
395
|
+
"SETTINGS$AGENT_SERVER_UNAVAILABLE_STATUS_MESSAGE": "請檢查 URL,確認伺服器正在執行,然後重試。您也可以將 Agent Canvas 指向其他部署。",
|
|
396
|
+
"SETTINGS$AGENT_SERVER_OPEN_SETTINGS_PAGE": "開啟完整設定頁面",
|
|
397
|
+
"SETTINGS$AGENT_SERVER_SETUP_GUIDE_HINT": "如果您在啟動或升級伺服器時需要協助,請參閱",
|
|
398
|
+
"SETTINGS$AGENT_SERVER_SETUP_GUIDE_LINK": "設定說明",
|
|
399
|
+
"SETTINGS$AGENT_SERVER_DETAILS_LABEL": "詳細資訊: {{details}}",
|
|
400
400
|
"SETTINGS$SOUND_NOTIFICATIONS": "聲音通知",
|
|
401
401
|
"SETTINGS$MAX_BUDGET_PER_TASK": "每個任務的最大預算",
|
|
402
402
|
"SETTINGS$MAX_BUDGET_PER_CONVERSATION": "每次對話的最大預算",
|
|
@@ -704,7 +704,7 @@
|
|
|
704
704
|
"SIDEBAR$EXPAND": "展開側邊欄",
|
|
705
705
|
"FEEDBACK$PUBLIC_LABEL": "公開",
|
|
706
706
|
"FEEDBACK$PRIVATE_LABEL": "私有",
|
|
707
|
-
"SIDEBAR$AUTOMATIONS": "
|
|
707
|
+
"SIDEBAR$AUTOMATIONS": "自動化",
|
|
708
708
|
"AUTOMATIONS$TITLE": "自動化",
|
|
709
709
|
"AUTOMATIONS$SUBTITLE": "檢視作用中與非作用中的自動化,依中繼資料搜尋,並檢查唯讀詳情。",
|
|
710
710
|
"AUTOMATIONS$ADD_AUTOMATION": "新增自動化",
|
|
@@ -1158,7 +1158,7 @@
|
|
|
1158
1158
|
"HOME$REMOVE_WORKSPACE": "移除",
|
|
1159
1159
|
"HOME$DONE": "完成",
|
|
1160
1160
|
"HOME$NO_WORKSPACES": "尚無工作區",
|
|
1161
|
-
"HOME$HOST_HOME_NOT_MOUNTED_HINT": "
|
|
1161
|
+
"HOME$HOST_HOME_NOT_MOUNTED_HINT": "代理伺服器無法存取此目錄。請檢查路徑是否存在且可讀取。",
|
|
1162
1162
|
"HOME$NO_WORKSPACE_OPTION": "無工作區",
|
|
1163
1163
|
"HOME$WORKSPACE_PLACEHOLDER": "選擇工作區",
|
|
1164
1164
|
"HOME$ADD_WORKSPACES_TITLE": "新增工作區",
|
|
@@ -1256,8 +1256,8 @@
|
|
|
1256
1256
|
"SETTINGS$MCP_ERROR_NAME_DUPLICATE": "已存在同名的STDIO伺服器",
|
|
1257
1257
|
"SETTINGS$MCP_ERROR_COMMAND_REQUIRED": "指令是必需的",
|
|
1258
1258
|
"SETTINGS$MCP_ERROR_COMMAND_NO_SPACES": "指令不能包含空格",
|
|
1259
|
-
"SETTINGS$MCP_ERROR_URL_DUPLICATE": "
|
|
1260
|
-
"SETTINGS$MCP_ERROR_ENV_INVALID_FORMAT": "
|
|
1259
|
+
"SETTINGS$MCP_ERROR_URL_DUPLICATE": "所選類型已存在使用此 URL 的伺服器",
|
|
1260
|
+
"SETTINGS$MCP_ERROR_ENV_INVALID_FORMAT": "環境變數必須遵循 KEY=value 格式",
|
|
1261
1261
|
"SETTINGS$MCP_ERROR_TIMEOUT_INVALID_NUMBER": "超時必須是有效數字",
|
|
1262
1262
|
"SETTINGS$MCP_ERROR_TIMEOUT_POSITIVE": "超時必須為正數",
|
|
1263
1263
|
"SETTINGS$MCP_ERROR_TIMEOUT_MAX_EXCEEDED": "超時不能超過3600秒(1小時)",
|
|
@@ -1632,8 +1632,8 @@
|
|
|
1632
1632
|
"HOME$REMOVE_WORKSPACE_CONFIRMATION": "從您儲存的工作區中移除「{{name}}」嗎?",
|
|
1633
1633
|
"HOME$REMOVE_WORKSPACE_PARENT_CONFIRMATION": "移除「{{name}}」及其 {{count}} 個子工作區嗎?",
|
|
1634
1634
|
"HOME$WORKSPACE_SCAN_ERROR": "部分工作區資料夾無法載入。",
|
|
1635
|
-
"HOME$WORKSPACES_UNSUPPORTED_AGENT_SERVER": "
|
|
1636
|
-
"HOME$WORKSPACES_UNSUPPORTED_PLACEHOLDER": "
|
|
1635
|
+
"HOME$WORKSPACES_UNSUPPORTED_AGENT_SERVER": "工作區僅支援 agent-server {{requiredVersion}} 或更高版本。此後端正在執行 {{actualVersion}}。請將您的 agent-server 後端升級到最新版本。",
|
|
1636
|
+
"HOME$WORKSPACES_UNSUPPORTED_PLACEHOLDER": "升級 agent-server 以使用工作區",
|
|
1637
1637
|
"EVENT_GROUP$ACTIONS_COMPLETED": "已完成 {{count}} 個動作",
|
|
1638
1638
|
"EVENT_GROUP$ACTIONS_PROGRESS": "已完成 {{completed}}/{{total}} 個動作",
|
|
1639
1639
|
"EVENT_GROUP$EXPAND": "展開動作",
|
|
@@ -1648,7 +1648,7 @@
|
|
|
1648
1648
|
"ONBOARDING$AGENT_OPENHANDS_DESCRIPTION": "預設的 OpenHands 代理。最適合通用程式設計與探索。",
|
|
1649
1649
|
"ONBOARDING$AGENT_CLAUDE_CODE_DESCRIPTION": "Anthropic 的 Claude Code 代理。",
|
|
1650
1650
|
"ONBOARDING$AGENT_CODEX_DESCRIPTION": "OpenAI 的 Codex 代理。",
|
|
1651
|
-
"ONBOARDING$AGENT_GEMINI_CLI_DESCRIPTION": "Google
|
|
1651
|
+
"ONBOARDING$AGENT_GEMINI_CLI_DESCRIPTION": "Google 的 Gemini CLI 代理。",
|
|
1652
1652
|
"ONBOARDING$BACKEND_TITLE": "檢查後端",
|
|
1653
1653
|
"ONBOARDING$BACKEND_SUBTITLE": "OpenHands 透過代理伺服器溝通。請確認預設後端可連線。",
|
|
1654
1654
|
"ONBOARDING$BACKEND_CONNECTED_TITLE": "已連線!🎉",
|
|
@@ -1763,7 +1763,7 @@
|
|
|
1763
1763
|
"BACKEND$NAME_REQUIRED": "名稱為必填項目",
|
|
1764
1764
|
"BACKEND$HOST_REQUIRED": "主機為必填項目",
|
|
1765
1765
|
"BACKEND$HOST_INVALID": "請輸入有效的 URL(例如 http://localhost:8080)",
|
|
1766
|
-
"BACKEND$NO_BACKEND_AVAILABLE": "
|
|
1766
|
+
"BACKEND$NO_BACKEND_AVAILABLE": "沒有可用的後端",
|
|
1767
1767
|
"ONBOARDING$ACP_SECRET_FILE_BLOB_HINT": "貼上 {{file}} 的完整內容。執行 `cat {{file}}` 取得。將以密鑰形式儲存,並在執行時寫入磁碟供代理使用。",
|
|
1768
1768
|
"ONBOARDING$ACP_SECRET_OAUTH_TOKEN_HINT": "Claude Pro/Max 的訂閱 OAuth 權杖。在終端機執行 `claude setup-token` 取得。",
|
|
1769
1769
|
"ONBOARDING$ACP_SECRET_GCP_PROJECT_HINT": "用於 Vertex AI 的 Google Cloud 專案 ID(例如 `gcloud config get-value project` 的輸出)。",
|
|
@@ -1772,7 +1772,7 @@
|
|
|
1772
1772
|
"ONBOARDING$ACP_SECRETS_REQUIRED_NOTE": "此後端沒有主機登入,因此執行 {{provider}} 需要提供憑證。",
|
|
1773
1773
|
"ONBOARDING$ACP_SECRETS_REQUIRED_BLOCKED": "請填寫上述憑證以繼續,或在後端登入。",
|
|
1774
1774
|
"ONBOARDING$ACP_SECRETS_ORPHANED_WARNING": "已儲存,但此後端尚無法使用這些憑證——一旦支援 ACP 檔案憑證即會生效。",
|
|
1775
|
-
"SETTINGS$UPGRADE_BUTTON": "
|
|
1775
|
+
"SETTINGS$UPGRADE_BUTTON": "升級",
|
|
1776
1776
|
"SETTINGS$AGENT": "代理",
|
|
1777
1777
|
"CONVERSATION$CONFIRM_DELETE_OLDER_TITLE": "刪除較舊的對話",
|
|
1778
1778
|
"CONVERSATION$CONFIRM_DELETE_OLDER_DESC": "確定要刪除 {{count}} 則較舊的對話嗎?此動作無法復原。",
|
|
@@ -1783,5 +1783,10 @@
|
|
|
1783
1783
|
"CRITIC$POTENTIAL_ISSUES": "潛在問題:",
|
|
1784
1784
|
"CRITIC$INFRASTRUCTURE": "基礎設施:",
|
|
1785
1785
|
"CRITIC$LIKELY_FOLLOWUP": "可能的後續操作:",
|
|
1786
|
-
"CRITIC$OTHER": "其他:"
|
|
1786
|
+
"CRITIC$OTHER": "其他:",
|
|
1787
|
+
"COMMON$SELECT_PROVIDER_PLACEHOLDER": "選擇供應商",
|
|
1788
|
+
"COMMON$SEARCH_REPOSITORIES_PLACEHOLDER": "搜尋存儲庫...",
|
|
1789
|
+
"COMMON$SELECT_BRANCH_PLACEHOLDER": "選擇分支...",
|
|
1790
|
+
"CHAT_INTERFACE$FAILED_TO_SEND_MESSAGE": "訊息傳送失敗",
|
|
1791
|
+
"SETTINGS$FETCH_ERROR": "取得設定時發生問題。請重新載入頁面。"
|
|
1787
1792
|
}
|
package/config/defaults.json
CHANGED
|
@@ -1,27 +1,32 @@
|
|
|
1
1
|
{
|
|
2
2
|
"_comment": "Single source of truth for version pins, ports, paths, and defaults shared across the npm and Docker install paths. Read by scripts/dev-safe.mjs, scripts/dev-with-automation.mjs, docker/entrypoint.sh (via generated defaults.env), and .github/workflows/docker.yml.",
|
|
3
|
+
|
|
3
4
|
"versions": {
|
|
4
|
-
"agentServer": "1.
|
|
5
|
-
"agentCanvas": "1.0.0-rc.
|
|
6
|
-
"automation": "1.0.
|
|
7
|
-
"automationSdk": "1.
|
|
5
|
+
"agentServer": "1.28.1",
|
|
6
|
+
"agentCanvas": "1.0.0-rc.8",
|
|
7
|
+
"automation": "1.0.0a9",
|
|
8
|
+
"automationSdk": "1.28.1",
|
|
8
9
|
"githubMcpServer": "1.2.0"
|
|
9
10
|
},
|
|
11
|
+
|
|
10
12
|
"images": {
|
|
11
13
|
"agentServer": "ghcr.io/openhands/agent-server",
|
|
12
14
|
"agentCanvas": "ghcr.io/openhands/agent-canvas"
|
|
13
15
|
},
|
|
16
|
+
|
|
14
17
|
"ports": {
|
|
15
18
|
"agentServer": 18000,
|
|
16
19
|
"automation": 18001,
|
|
17
20
|
"proxy": 8000
|
|
18
21
|
},
|
|
22
|
+
|
|
19
23
|
"paths": {
|
|
20
24
|
"stateSubdir": "agent-canvas",
|
|
21
25
|
"conversations": "agent-canvas/conversations",
|
|
22
26
|
"bashEvents": "agent-canvas/bash_events",
|
|
23
27
|
"automationDb": "automation/automations.db"
|
|
24
28
|
},
|
|
29
|
+
|
|
25
30
|
"packages": {
|
|
26
31
|
"agentServer": "openhands-agent-server",
|
|
27
32
|
"automation": "openhands-automation",
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require(`../../../_virtual/_rolldown/runtime.cjs`),t=require(`../../../node_modules/react-i18next/dist/es/useTranslation.cjs`),n=require(`../../../i18n/declaration.cjs`),r=require(`../../../utils/utils.cjs`),i=require(`../../../context/navigation-context.cjs`),a=require(`../../../node_modules/@openhands/typescript-client/dist/client/server-client.cjs`),o=require(`../../../api/agent-server-client-options.cjs`),s=require(`../../../node_modules/@tanstack/react-query/build/modern/useQuery.cjs`),c=require(`../../../contexts/active-backend-context.cjs`),l=require(`../../shared/modals/modal-backdrop.cjs`),u=require(`../../shared/modals/modal-body.cjs`),d=require(`../../../utils/modal-classes.cjs`),f=require(`../../shared/modals/modal-close-button.cjs`),p=require(`../settings/brand-button.cjs`),m=require(`../settings/settings-input.cjs`),h=require(`../../../hooks/query/use-backends-health.cjs`),g=require(`../../../assets/branding/openhands-logo-white.cjs`),_=require(`../../../icons/chevron-down-small.cjs`),v=require(`./backend-status-dot.cjs`),y=require(`./device-flow-auth.cjs`);let b=require(`react`);b=e.__toESM(b,1);let x=require(`react/jsx-runtime`);function S(e){let t=e.trim().toLowerCase();return t.includes(`all-hands.dev`)||t.includes(`openhands.dev`)?`cloud`:`local`}function C(e){let t=e.toLowerCase().replace(/^\[|\]$/g,``);return!!(t===`localhost`||t===`::1`||t===`::`||t===`0.0.0.0`||/^127\./.test(t)||/^::ffff:127\./i.test(t)||/^10\./.test(t)||/^192\.168\./.test(t)||/^172\.(1[6-9]|2\d|3[01])\./.test(t)||/^fe[89ab][0-9a-f]:/i.test(t)||/^f[cd][0-9a-f]{2}:/i.test(t)||t.endsWith(`.local`)||!t.includes(`.`)&&!t.includes(`:`))}function w(e){let t=e.trim().replace(/\/+$/,``);if(!t)return``;if(/^https?:\/\//i.test(t))return t;let n=t.match(/^\[([^\]]+)\]/);return`${C(n?n[1]:(t.match(/:/g)??[]).length>1?t:t.split(`:`)[0])?`http`:`https`}://${t}`}function T(e){let t=e.trim();if(!t||/\s/.test(t))return!1;let n=w(t);if(!n)return!1;try{let e=new URL(n);return(e.protocol===`http:`||e.protocol===`https:`)&&e.hostname.length>0}catch{return!1}}var E=`https://app.all-hands.dev`;function D(e,t){return e(n.I18nKey.BACKEND$CONNECTION_TEST_FAILED,{host:t,interpolation:{escapeValue:!1}})}function O(e){return e instanceof Error?e.message:typeof e==`string`?e:null}function k(e,t){let n=O(t);return n?`${e}\n${n}`:e}async function A(e){e.kind===`local`&&await new a.ServerClient(o.getAgentServerClientOptions({host:e.host,sessionApiKey:e.apiKey||null,timeout:5e3})).getServerInfo()}function j({backend:e,testIdRoot:r}){let{t:i}=t.useTranslation(`openhands`),c=h.useBackendsHealth([e])[e.id],l=c?.isConnected??null,u=c?.disabled===!0,d=c?.consecutiveFailures??0,f=c?.lastError??null,{data:p}=s.useQuery({queryKey:[`backend-version`,e.host,e.apiKey],queryFn:async()=>(await new a.ServerClient(o.getAgentServerClientOptions({host:e.host,sessionApiKey:e.apiKey||null,timeout:5e3})).getServerInfo()).version??null,retry:!1,staleTime:6e4,enabled:e.kind===`local`&&!u}),m;m=i(l===!0?n.I18nKey.ONBOARDING$BACKEND_STATUS_CONNECTED:l===!1?n.I18nKey.ONBOARDING$BACKEND_STATUS_DISCONNECTED:n.I18nKey.ONBOARDING$BACKEND_STATUS_CHECKING);let g=e.kind===`cloud`?i(n.I18nKey.BACKEND$KIND_CLOUD):i(n.I18nKey.BACKEND$KIND_LOCAL);return(0,x.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,x.jsxs)(`div`,{"data-testid":`${r}-status`,className:`flex items-center gap-3 text-sm`,children:[(0,x.jsx)(v.BackendStatusDot,{isConnected:l}),(0,x.jsx)(`span`,{className:`text-white`,"data-testid":`${r}-status-label`,children:m}),(0,x.jsx)(`span`,{className:`text-tertiary-alt`,children:`·`}),(0,x.jsx)(`span`,{className:`text-[var(--oh-text-tertiary)]`,children:g}),p?(0,x.jsx)(`span`,{className:`text-xs text-[var(--oh-muted)]`,"data-testid":`${r}-version`,children:i(n.I18nKey.BACKEND$VERSION_LABEL,{version:p})}):null]}),u?(0,x.jsxs)(`div`,{"data-testid":`${r}-status-error`,className:`flex flex-col gap-1 rounded-md border border-red-500/40 bg-red-500/10 p-3 text-sm`,children:[(0,x.jsx)(`span`,{className:`font-semibold text-red-300`,children:i(n.I18nKey.BACKEND$HEALTH_FAILED_TITLE)}),(0,x.jsx)(`span`,{className:`text-xs text-[var(--oh-text-tertiary)]`,children:i(n.I18nKey.BACKEND$HEALTH_FAILED_DETAIL,{count:d})}),f?(0,x.jsx)(`span`,{"data-testid":`${r}-status-error-message`,className:`text-xs text-red-300 whitespace-pre-wrap break-words`,children:f}):null]}):null]})}function M({mode:e,backend:i,onSubmitted:a,renderActions:o,testIdRoot:s,hostReadOnly:l,requireApiKey:u,hideConfigurationFields:d=!1,onSubmitOverride:f}){let{t:h}=t.useTranslation(`openhands`),{addBackend:g,updateBackend:_}=c.useActiveBackendContext(),[v,y]=b.default.useState(i?.name??``),[C,O]=b.default.useState(i?.host??``),[M,N]=b.default.useState(i?.apiKey??``),[P,F]=b.default.useState(null),[I,L]=b.default.useState(!1),[R,z]=b.default.useState(!1),[B,V]=b.default.useState(!1),H=S(C),U=s??(e===`edit`?`edit-backend`:`add-backend`),W=u||H!==`local`,G=v.trim().length>0&&T(C)&&(!W||M.trim().length>0),K=R&&!v.trim()?h(n.I18nKey.BACKEND$NAME_REQUIRED):void 0,q=B?C.trim()?T(C)?void 0:h(n.I18nKey.BACKEND$HOST_INVALID):h(n.I18nKey.BACKEND$HOST_REQUIRED):void 0;return(0,x.jsxs)(`form`,{"data-testid":`${U}-form`,onSubmit:async t=>{if(t.preventDefault(),I)return;if(!G){z(!0),V(!0);return}let n={name:v.trim(),host:w(C),apiKey:M.trim(),kind:H};F(null),L(!0);try{if(f){await f(n);return}await A(n),e===`edit`&&i?_(i.id,n):g(n),a()}catch(e){F(k(D(h,n.host),e))}finally{L(!1)}},className:`flex flex-col gap-4`,children:[(0,x.jsxs)(`div`,{"data-testid":`${U}-configuration-fields`,className:r.cn(`flex flex-col gap-4`,d&&`hidden`),children:[(0,x.jsx)(m.SettingsInput,{testId:`${U}-name`,name:`${U}-name`,type:`text`,label:h(n.I18nKey.BACKEND$NAME_LABEL),value:v,onChange:e=>{y(e),F(null)},onBlur:()=>z(!0),placeholder:`Production`,className:`w-full`,showRequiredTag:!0,error:K}),(0,x.jsx)(m.SettingsInput,{testId:`${U}-host`,name:`${U}-host`,type:`text`,label:h(n.I18nKey.BACKEND$HOST_LABEL),value:C,onChange:l?void 0:e=>{O(e),F(null)},onBlur:()=>V(!0),placeholder:E,className:`w-full`,showRequiredTag:!0,error:q,isDisabled:l}),(0,x.jsx)(m.SettingsInput,{testId:`${U}-api-key`,name:`${U}-api-key`,type:`password`,label:h(n.I18nKey.BACKEND$KEY_LABEL),value:M,onChange:e=>{N(e),F(null)},placeholder:``,className:`w-full`}),P?(0,x.jsx)(`div`,{role:`alert`,"data-testid":`${U}-error`,className:`rounded-md border border-red-500/40 bg-red-500/10 p-3 text-sm text-red-300 whitespace-pre-wrap break-words`,children:P}):null,e===`edit`&&i&&(0,x.jsx)(j,{backend:i,testIdRoot:U})]}),o?o({canSubmit:G&&!I,isSubmitting:I,testIdRoot:U}):(0,x.jsxs)(`div`,{className:`flex justify-end gap-2 mt-2 w-full`,children:[(0,x.jsx)(p.BrandButton,{type:`button`,variant:`secondary`,onClick:a,testId:`${U}-cancel`,children:h(n.I18nKey.BUTTON$CANCEL)}),(0,x.jsx)(p.BrandButton,{type:`submit`,variant:`primary`,isDisabled:!G||I,testId:`${U}-submit`,children:h(n.I18nKey.BACKEND$SAVE)})]})]})}function N(){let{currentPath:e,navigate:t}=i.useNavigation();return b.default.useCallback(()=>{/^\/automations\/[^/]+/.test(e)?t(`/automations`):/^\/conversations\/[^/]+/.test(e)&&t(`/conversations`)},[e,t])}function P({onClose:e}){let{t:r}=t.useTranslation(`openhands`),{addBackend:i}=c.useActiveBackendContext(),a=N(),[o,s]=b.default.useState(``),[l,u]=b.default.useState(``),[d,f]=b.default.useState(``),[h,g]=b.default.useState(null),[_,v]=b.default.useState(!1),y=S(l),C=o.trim().length>0&&T(l)&&(y===`local`||d.trim().length>0);return(0,x.jsxs)(`form`,{"data-testid":`add-backend-form`,onSubmit:async t=>{if(t.preventDefault(),!C||_)return;let n={name:o.trim(),host:w(l),apiKey:d.trim(),kind:y};g(null),v(!0);try{await A(n),i(n),a(),e()}catch(e){g(k(D(r,n.host),e))}finally{v(!1)}},className:`flex flex-col gap-4 flex-1 min-w-0`,children:[(0,x.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,x.jsx)(m.SettingsInput,{testId:`add-backend-name`,name:`add-backend-name`,type:`text`,label:r(n.I18nKey.BACKEND$NAME_LABEL),value:o,onChange:e=>{s(e),g(null)},placeholder:`e.g. My Server`,className:`w-full`}),(0,x.jsx)(`p`,{className:`text-xs text-[var(--oh-muted)]`,children:r(n.I18nKey.BACKEND$NAME_HELPER)})]}),(0,x.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,x.jsx)(m.SettingsInput,{testId:`add-backend-host`,name:`add-backend-host`,type:`text`,label:r(n.I18nKey.BACKEND$HOST_LABEL),value:l,onChange:e=>{u(e),g(null)},placeholder:`http://localhost:8000`,className:`w-full`}),(0,x.jsx)(`p`,{className:`text-xs text-[var(--oh-muted)]`,"data-testid":`add-backend-host-helper`,children:r(n.I18nKey.BACKEND$HOST_HELPER)})]}),(0,x.jsx)(m.SettingsInput,{testId:`add-backend-api-key`,name:`add-backend-api-key`,type:`password`,label:r(n.I18nKey.BACKEND$KEY_LABEL),value:d,onChange:e=>{f(e),g(null)},placeholder:`sk-••••••••••`,className:`w-full`}),h?(0,x.jsx)(`div`,{role:`alert`,"data-testid":`add-backend-error`,className:`rounded-md border border-red-500/40 bg-red-500/10 p-3 text-sm text-red-300 whitespace-pre-wrap break-words`,children:h}):null,(0,x.jsx)(p.BrandButton,{type:`submit`,variant:`secondary`,isDisabled:!C||_,testId:`add-backend-submit`,className:`w-full text-center`,children:r(_?n.I18nKey.ONBOARDING$BACKEND_STATUS_CHECKING:n.I18nKey.BACKEND$CONNECT)})]})}function F({onClose:e}){let{t:i}=t.useTranslation(`openhands`),{addBackend:a}=c.useActiveBackendContext(),o=N(),[s,l]=b.default.useState(!1),[u,f]=b.default.useState(``),p=u.trim()||E;return(0,x.jsxs)(`div`,{className:`flex flex-1 min-w-0 flex-col items-center gap-3`,children:[(0,x.jsxs)(`div`,{className:`flex flex-col items-center gap-1`,children:[(0,x.jsx)(g.default,{width:56,height:56,"aria-hidden":!0}),(0,x.jsx)(`h4`,{className:d.modalTitleLgMediumClassName,"data-testid":`add-backend-cloud-title`,children:i(n.I18nKey.BACKEND$CLOUD_TITLE)})]}),(0,x.jsx)(`p`,{className:`text-center text-sm leading-relaxed text-[var(--oh-muted)]`,children:i(n.I18nKey.BACKEND$CLOUD_DESCRIPTION)}),(0,x.jsx)(y.DeviceFlowAuth,{host:p,onSuccess:t=>{a({name:`OpenHands Cloud`,host:w(p),apiKey:t,kind:`cloud`}),o(),e()},testIdRoot:`add-backend`}),(0,x.jsxs)(`div`,{className:`w-full`,children:[(0,x.jsxs)(`button`,{type:`button`,onClick:()=>l(e=>!e),"aria-expanded":s,"data-testid":`add-backend-advanced-toggle`,className:`flex w-full cursor-pointer items-center justify-center gap-1 text-center text-xs text-[var(--oh-muted)] transition-colors hover:text-content-2`,children:[(0,x.jsx)(`span`,{children:i(n.I18nKey.BACKEND$ADVANCED)}),(0,x.jsx)(_.default,{className:r.cn(`h-4 w-4 shrink-0 text-muted transition-transform`,s&&`rotate-180`),"aria-hidden":!0})]}),(0,x.jsxs)(`div`,{className:r.cn(`pt-2`,!s&&`pointer-events-none invisible`),"aria-hidden":!s,children:[(0,x.jsx)(m.SettingsInput,{testId:`add-backend-cloud-host`,name:`add-backend-cloud-host`,type:`text`,label:i(n.I18nKey.BACKEND$HOST_LABEL),value:u,onChange:f,placeholder:E,className:`w-full`}),(0,x.jsx)(`p`,{className:`mt-1 text-xs text-[var(--oh-muted)]`,children:i(n.I18nKey.BACKEND$LOGIN_CLOUD_HINT)})]})]})]})}function I({mode:e,backend:i,onClose:a}){let{t:o}=t.useTranslation(`openhands`);if(e===`add`)return(0,x.jsx)(l.ModalBackdrop,{onClose:a,closeOnEscape:!1,"aria-label":o(n.I18nKey.BACKEND$ADD_TITLE),children:(0,x.jsxs)(`div`,{"data-testid":`add-backend-modal`,className:r.cn(`relative rounded-xl border border-[var(--oh-border)] bg-base-secondary`,u.modalWidthClassName(`xl`),u.MODAL_MAX_WIDTH_VIEWPORT),children:[(0,x.jsx)(f.ModalCloseButton,{onClose:a,testId:`add-backend-close`}),(0,x.jsx)(`div`,{className:`px-6 pt-6 pb-2 pr-12`,children:(0,x.jsx)(`h2`,{className:d.modalTitleLgClassName,children:o(n.I18nKey.BACKEND$ADD_TITLE)})}),(0,x.jsxs)(`div`,{className:`flex gap-6 px-6 pb-6 pt-2`,children:[(0,x.jsx)(`div`,{className:`flex-1 min-w-0`,children:(0,x.jsx)(P,{onClose:a})}),(0,x.jsxs)(`div`,{className:`flex shrink-0 flex-col items-center`,children:[(0,x.jsx)(`div`,{className:`flex-1 w-px bg-[var(--oh-border)]`}),(0,x.jsx)(`span`,{className:`py-3 text-xs uppercase text-[var(--oh-muted)]`,children:o(n.I18nKey.BACKEND$LOGIN_OR)}),(0,x.jsx)(`div`,{className:`flex-1 w-px bg-[var(--oh-border)]`})]}),(0,x.jsx)(`div`,{className:`flex-1 min-w-0`,children:(0,x.jsx)(F,{onClose:a})})]})]})});let s=`edit-backend`;return(0,x.jsx)(l.ModalBackdrop,{onClose:a,closeOnEscape:!1,"aria-label":o(n.I18nKey.BACKEND$EDIT_TITLE),children:(0,x.jsxs)(`div`,{"data-testid":`${s}-modal`,className:r.cn(`relative bg-base-secondary p-6 rounded-xl flex flex-col gap-4 border border-[var(--oh-border)]`,u.modalWidthClassName(`md`)),children:[(0,x.jsx)(f.ModalCloseButton,{onClose:a,testId:`${s}-close`}),(0,x.jsx)(`h2`,{className:r.cn(`pr-6`,d.modalTitleLgClassName),children:o(n.I18nKey.BACKEND$EDIT_TITLE)}),(0,x.jsx)(M,{mode:`edit`,backend:i,onSubmitted:a,testIdRoot:s})]})})}exports.BackendFormModal=I;
|
|
1
|
+
const e=require(`../../../_virtual/_rolldown/runtime.cjs`),t=require(`../../../node_modules/react-i18next/dist/es/useTranslation.cjs`),n=require(`../../../i18n/declaration.cjs`),r=require(`../../../utils/utils.cjs`),i=require(`../../../context/navigation-context.cjs`),a=require(`../../../node_modules/@openhands/typescript-client/dist/client/server-client.cjs`),o=require(`../../../api/agent-server-client-options.cjs`),s=require(`../../../node_modules/@tanstack/react-query/build/modern/useQuery.cjs`),c=require(`../../../contexts/active-backend-context.cjs`),l=require(`../../shared/modals/modal-backdrop.cjs`),u=require(`../../shared/modals/modal-body.cjs`),d=require(`../../../utils/modal-classes.cjs`),f=require(`../../shared/modals/modal-close-button.cjs`),p=require(`../settings/brand-button.cjs`),m=require(`../settings/settings-input.cjs`),h=require(`../../../hooks/query/use-backends-health.cjs`),g=require(`../../../assets/branding/openhands-logo-white.cjs`),_=require(`../../../icons/chevron-down-small.cjs`),v=require(`./backend-status-dot.cjs`),y=require(`./device-flow-auth.cjs`);let b=require(`react`);b=e.__toESM(b,1);let x=require(`react/jsx-runtime`);function S(e){let t=e.trim().toLowerCase();return t.includes(`all-hands.dev`)||t.includes(`openhands.dev`)?`cloud`:`local`}function C(e){let t=e.toLowerCase().replace(/^\[|\]$/g,``);return!!(t===`localhost`||t===`::1`||t===`::`||t===`0.0.0.0`||/^127\./.test(t)||/^::ffff:127\./i.test(t)||/^10\./.test(t)||/^192\.168\./.test(t)||/^172\.(1[6-9]|2\d|3[01])\./.test(t)||/^fe[89ab][0-9a-f]:/i.test(t)||/^f[cd][0-9a-f]{2}:/i.test(t)||t.endsWith(`.local`)||!t.includes(`.`)&&!t.includes(`:`))}function w(e){let t=e.trim().replace(/\/+$/,``);if(!t)return``;if(/^https?:\/\//i.test(t))return t;let n=t.match(/^\[([^\]]+)\]/);return`${C(n?n[1]:(t.match(/:/g)??[]).length>1?t:t.split(`:`)[0])?`http`:`https`}://${t}`}function T(e){let t=e.trim();if(!t||/\s/.test(t))return!1;let n=w(t);if(!n)return!1;try{let e=new URL(n);return(e.protocol===`http:`||e.protocol===`https:`)&&e.hostname.length>0}catch{return!1}}var E=`https://app.all-hands.dev`;function D(e,t){return e(n.I18nKey.BACKEND$CONNECTION_TEST_FAILED,{host:t,interpolation:{escapeValue:!1}})}function O(e){return e instanceof Error?e.message:typeof e==`string`?e:null}function k(e,t){let n=O(t);return n?`${e}\n${n}`:e}async function A(e){e.kind===`local`&&await new a.ServerClient(o.getAgentServerClientOptions({host:e.host,sessionApiKey:e.apiKey||null,timeout:5e3})).getServerInfo()}function j({backend:e,testIdRoot:r}){let{t:i}=t.useTranslation(`openhands`),c=h.useBackendsHealth([e])[e.id],l=c?.isConnected??null,u=c?.disabled===!0,d=c?.consecutiveFailures??0,f=c?.lastError??null,{data:p}=s.useQuery({queryKey:[`backend-version`,e.host,e.apiKey],queryFn:async()=>(await new a.ServerClient(o.getAgentServerClientOptions({host:e.host,sessionApiKey:e.apiKey||null,timeout:5e3})).getServerInfo()).version??null,retry:!1,staleTime:6e4,enabled:e.kind===`local`&&!u}),m;m=i(l===!0?n.I18nKey.ONBOARDING$BACKEND_STATUS_CONNECTED:l===!1?n.I18nKey.ONBOARDING$BACKEND_STATUS_DISCONNECTED:n.I18nKey.ONBOARDING$BACKEND_STATUS_CHECKING);let g=e.kind===`cloud`?i(n.I18nKey.BACKEND$KIND_CLOUD):i(n.I18nKey.BACKEND$KIND_LOCAL);return(0,x.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,x.jsxs)(`div`,{"data-testid":`${r}-status`,className:`flex items-center gap-3 text-sm`,children:[(0,x.jsx)(v.BackendStatusDot,{isConnected:l}),(0,x.jsx)(`span`,{className:`text-white`,"data-testid":`${r}-status-label`,children:m}),(0,x.jsx)(`span`,{className:`text-tertiary-alt`,children:`·`}),(0,x.jsx)(`span`,{className:`text-[var(--oh-text-tertiary)]`,children:g}),p?(0,x.jsx)(`span`,{className:`text-xs text-[var(--oh-muted)]`,"data-testid":`${r}-version`,children:i(n.I18nKey.BACKEND$VERSION_LABEL,{version:p})}):null]}),u?(0,x.jsxs)(`div`,{"data-testid":`${r}-status-error`,className:`flex flex-col gap-1 rounded-md border border-red-500/40 bg-red-500/10 p-3 text-sm`,children:[(0,x.jsx)(`span`,{className:`font-semibold text-red-300`,children:i(n.I18nKey.BACKEND$HEALTH_FAILED_TITLE)}),(0,x.jsx)(`span`,{className:`text-xs text-[var(--oh-text-tertiary)]`,children:i(n.I18nKey.BACKEND$HEALTH_FAILED_DETAIL,{count:d})}),f?(0,x.jsx)(`span`,{"data-testid":`${r}-status-error-message`,className:`text-xs text-red-300 whitespace-pre-wrap break-words`,children:f}):null]}):null]})}function M({mode:e,backend:i,onSubmitted:a,renderActions:o,testIdRoot:s,hostReadOnly:l,requireApiKey:u,hideConfigurationFields:d=!1,onSubmitOverride:f}){let{t:h}=t.useTranslation(`openhands`),{addBackend:g,updateBackend:_}=c.useActiveBackendContext(),[v,y]=b.default.useState(i?.name??``),[C,O]=b.default.useState(i?.host??``),[M,N]=b.default.useState(i?.apiKey??``),[P,F]=b.default.useState(null),[I,L]=b.default.useState(!1),[R,z]=b.default.useState(!1),[B,V]=b.default.useState(!1),H=e===`edit`&&i?i.kind:S(C),U=s??(e===`edit`?`edit-backend`:`add-backend`),W=u||H!==`local`,G=v.trim().length>0&&T(C)&&(!W||M.trim().length>0),K=R&&!v.trim()?h(n.I18nKey.BACKEND$NAME_REQUIRED):void 0,q=B?C.trim()?T(C)?void 0:h(n.I18nKey.BACKEND$HOST_INVALID):h(n.I18nKey.BACKEND$HOST_REQUIRED):void 0;return(0,x.jsxs)(`form`,{"data-testid":`${U}-form`,onSubmit:async t=>{if(t.preventDefault(),I)return;if(!G){z(!0),V(!0);return}let n={name:v.trim(),host:w(C),apiKey:M.trim(),kind:H};F(null),L(!0);try{if(f){await f(n);return}await A(n),e===`edit`&&i?_(i.id,n):g(n),a()}catch(e){F(k(D(h,n.host),e))}finally{L(!1)}},className:`flex flex-col gap-4`,children:[(0,x.jsxs)(`div`,{"data-testid":`${U}-configuration-fields`,className:r.cn(`flex flex-col gap-4`,d&&`hidden`),children:[(0,x.jsx)(m.SettingsInput,{testId:`${U}-name`,name:`${U}-name`,type:`text`,label:h(n.I18nKey.BACKEND$NAME_LABEL),value:v,onChange:e=>{y(e),F(null)},onBlur:()=>z(!0),placeholder:`Production`,className:`w-full`,showRequiredTag:!0,error:K}),(0,x.jsx)(m.SettingsInput,{testId:`${U}-host`,name:`${U}-host`,type:`text`,label:h(n.I18nKey.BACKEND$HOST_LABEL),value:C,onChange:l?void 0:e=>{O(e),F(null)},onBlur:()=>V(!0),placeholder:E,className:`w-full`,showRequiredTag:!0,error:q,isDisabled:l}),(0,x.jsx)(m.SettingsInput,{testId:`${U}-api-key`,name:`${U}-api-key`,type:`password`,label:h(n.I18nKey.BACKEND$KEY_LABEL),value:M,onChange:e=>{N(e),F(null)},placeholder:``,className:`w-full`}),P?(0,x.jsx)(`div`,{role:`alert`,"data-testid":`${U}-error`,className:`rounded-md border border-red-500/40 bg-red-500/10 p-3 text-sm text-red-300 whitespace-pre-wrap break-words`,children:P}):null,e===`edit`&&i&&(0,x.jsx)(j,{backend:i,testIdRoot:U})]}),o?o({canSubmit:G&&!I,isSubmitting:I,testIdRoot:U}):(0,x.jsxs)(`div`,{className:`flex justify-end gap-2 mt-2 w-full`,children:[(0,x.jsx)(p.BrandButton,{type:`button`,variant:`secondary`,onClick:a,testId:`${U}-cancel`,children:h(n.I18nKey.BUTTON$CANCEL)}),(0,x.jsx)(p.BrandButton,{type:`submit`,variant:`primary`,isDisabled:!G||I,testId:`${U}-submit`,children:h(n.I18nKey.BACKEND$SAVE)})]})]})}function N(){let{currentPath:e,navigate:t}=i.useNavigation();return b.default.useCallback(()=>{/^\/automations\/[^/]+/.test(e)?t(`/automations`):/^\/conversations\/[^/]+/.test(e)&&t(`/conversations`)},[e,t])}function P({onClose:e}){let{t:r}=t.useTranslation(`openhands`),{addBackend:i}=c.useActiveBackendContext(),a=N(),[o,s]=b.default.useState(``),[l,u]=b.default.useState(``),[d,f]=b.default.useState(``),[h,g]=b.default.useState(null),[_,v]=b.default.useState(!1),y=S(l),C=o.trim().length>0&&T(l)&&(y===`local`||d.trim().length>0);return(0,x.jsxs)(`form`,{"data-testid":`add-backend-form`,onSubmit:async t=>{if(t.preventDefault(),!C||_)return;let n={name:o.trim(),host:w(l),apiKey:d.trim(),kind:y};g(null),v(!0);try{await A(n),i(n),a(),e()}catch(e){g(k(D(r,n.host),e))}finally{v(!1)}},className:`flex flex-col gap-4 flex-1 min-w-0`,children:[(0,x.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,x.jsx)(m.SettingsInput,{testId:`add-backend-name`,name:`add-backend-name`,type:`text`,label:r(n.I18nKey.BACKEND$NAME_LABEL),value:o,onChange:e=>{s(e),g(null)},placeholder:`e.g. My Server`,className:`w-full`}),(0,x.jsx)(`p`,{className:`text-xs text-[var(--oh-muted)]`,children:r(n.I18nKey.BACKEND$NAME_HELPER)})]}),(0,x.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,x.jsx)(m.SettingsInput,{testId:`add-backend-host`,name:`add-backend-host`,type:`text`,label:r(n.I18nKey.BACKEND$HOST_LABEL),value:l,onChange:e=>{u(e),g(null)},placeholder:`http://localhost:8000`,className:`w-full`}),(0,x.jsx)(`p`,{className:`text-xs text-[var(--oh-muted)]`,"data-testid":`add-backend-host-helper`,children:r(n.I18nKey.BACKEND$HOST_HELPER)})]}),(0,x.jsx)(m.SettingsInput,{testId:`add-backend-api-key`,name:`add-backend-api-key`,type:`password`,label:r(n.I18nKey.BACKEND$KEY_LABEL),value:d,onChange:e=>{f(e),g(null)},placeholder:`sk-••••••••••`,className:`w-full`}),h?(0,x.jsx)(`div`,{role:`alert`,"data-testid":`add-backend-error`,className:`rounded-md border border-red-500/40 bg-red-500/10 p-3 text-sm text-red-300 whitespace-pre-wrap break-words`,children:h}):null,(0,x.jsx)(p.BrandButton,{type:`submit`,variant:`secondary`,isDisabled:!C||_,testId:`add-backend-submit`,className:`w-full text-center`,children:r(_?n.I18nKey.ONBOARDING$BACKEND_STATUS_CHECKING:n.I18nKey.BACKEND$CONNECT)})]})}function F({onClose:e}){let{t:i}=t.useTranslation(`openhands`),{addBackend:a}=c.useActiveBackendContext(),o=N(),[s,l]=b.default.useState(!1),[u,f]=b.default.useState(``),p=u.trim()||E;return(0,x.jsxs)(`div`,{className:`flex flex-1 min-w-0 flex-col items-center gap-3`,children:[(0,x.jsxs)(`div`,{className:`flex flex-col items-center gap-1`,children:[(0,x.jsx)(g.default,{width:56,height:56,"aria-hidden":!0}),(0,x.jsx)(`h4`,{className:d.modalTitleLgMediumClassName,"data-testid":`add-backend-cloud-title`,children:i(n.I18nKey.BACKEND$CLOUD_TITLE)})]}),(0,x.jsx)(`p`,{className:`text-center text-sm leading-relaxed text-[var(--oh-muted)]`,children:i(n.I18nKey.BACKEND$CLOUD_DESCRIPTION)}),(0,x.jsx)(y.DeviceFlowAuth,{host:p,onSuccess:t=>{a({name:`OpenHands Cloud`,host:w(p),apiKey:t,kind:`cloud`}),o(),e()},testIdRoot:`add-backend`}),(0,x.jsxs)(`div`,{className:`w-full`,children:[(0,x.jsxs)(`button`,{type:`button`,onClick:()=>l(e=>!e),"aria-expanded":s,"data-testid":`add-backend-advanced-toggle`,className:`flex w-full cursor-pointer items-center justify-center gap-1 text-center text-xs text-[var(--oh-muted)] transition-colors hover:text-content-2`,children:[(0,x.jsx)(`span`,{children:i(n.I18nKey.BACKEND$ADVANCED)}),(0,x.jsx)(_.default,{className:r.cn(`h-4 w-4 shrink-0 text-muted transition-transform`,s&&`rotate-180`),"aria-hidden":!0})]}),(0,x.jsxs)(`div`,{className:r.cn(`pt-2`,!s&&`pointer-events-none invisible`),"aria-hidden":!s,children:[(0,x.jsx)(m.SettingsInput,{testId:`add-backend-cloud-host`,name:`add-backend-cloud-host`,type:`text`,label:i(n.I18nKey.BACKEND$HOST_LABEL),value:u,onChange:f,placeholder:E,className:`w-full`}),(0,x.jsx)(`p`,{className:`mt-1 text-xs text-[var(--oh-muted)]`,children:i(n.I18nKey.BACKEND$LOGIN_CLOUD_HINT)})]})]})]})}function I({mode:e,backend:i,onClose:a}){let{t:o}=t.useTranslation(`openhands`);if(e===`add`)return(0,x.jsx)(l.ModalBackdrop,{onClose:a,closeOnEscape:!1,"aria-label":o(n.I18nKey.BACKEND$ADD_TITLE),children:(0,x.jsxs)(`div`,{"data-testid":`add-backend-modal`,className:r.cn(`relative rounded-xl border border-[var(--oh-border)] bg-base-secondary`,u.modalWidthClassName(`xl`),u.MODAL_MAX_WIDTH_VIEWPORT),children:[(0,x.jsx)(f.ModalCloseButton,{onClose:a,testId:`add-backend-close`}),(0,x.jsx)(`div`,{className:`px-6 pt-6 pb-2 pr-12`,children:(0,x.jsx)(`h2`,{className:d.modalTitleLgClassName,children:o(n.I18nKey.BACKEND$ADD_TITLE)})}),(0,x.jsxs)(`div`,{className:`flex gap-6 px-6 pb-6 pt-2`,children:[(0,x.jsx)(`div`,{className:`flex-1 min-w-0`,children:(0,x.jsx)(P,{onClose:a})}),(0,x.jsxs)(`div`,{className:`flex shrink-0 flex-col items-center`,children:[(0,x.jsx)(`div`,{className:`flex-1 w-px bg-[var(--oh-border)]`}),(0,x.jsx)(`span`,{className:`py-3 text-xs uppercase text-[var(--oh-muted)]`,children:o(n.I18nKey.BACKEND$LOGIN_OR)}),(0,x.jsx)(`div`,{className:`flex-1 w-px bg-[var(--oh-border)]`})]}),(0,x.jsx)(`div`,{className:`flex-1 min-w-0`,children:(0,x.jsx)(F,{onClose:a})})]})]})});let s=`edit-backend`;return(0,x.jsx)(l.ModalBackdrop,{onClose:a,closeOnEscape:!1,"aria-label":o(n.I18nKey.BACKEND$EDIT_TITLE),children:(0,x.jsxs)(`div`,{"data-testid":`${s}-modal`,className:r.cn(`relative bg-base-secondary p-6 rounded-xl flex flex-col gap-4 border border-[var(--oh-border)]`,u.modalWidthClassName(`md`)),children:[(0,x.jsx)(f.ModalCloseButton,{onClose:a,testId:`${s}-close`}),(0,x.jsx)(`h2`,{className:r.cn(`pr-6`,d.modalTitleLgClassName),children:o(n.I18nKey.BACKEND$EDIT_TITLE)}),(0,x.jsx)(M,{mode:`edit`,backend:i,onSubmitted:a,testIdRoot:s})]})})}exports.BackendFormModal=I;
|
|
2
2
|
//# sourceMappingURL=backend-form-modal.cjs.map
|