@openhands/agent-canvas 1.0.0-rc.7 → 1.0.0-rc.9
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-Dzb4nxxB.js} +1 -1
- package/build/assets/{active-backend-context-BiVlte2V.js → active-backend-context-B2OSC-qe.js} +1 -1
- package/build/assets/add-backend-modal-lG8XDYjr.js +1 -0
- package/build/assets/{agent-server-adapter-BD6kvwWb.js → agent-server-adapter-BPpZcLOE.js} +3 -3
- package/build/assets/agent-server-client-options-wXLeJYeM.js +1 -0
- package/build/assets/{agent-server-conversation-service.api-8AC86rC5.js → agent-server-conversation-service.api-C4Fc9Jnp.js} +1 -1
- package/build/assets/{agent-settings-DycVwGfd.js → agent-settings-Blipgztd.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-Cujm1lCj.js} +1 -1
- package/build/assets/{api-key-entry-screen-BnvQM0v5.js → api-key-entry-screen-BarZU9nr.js} +1 -1
- package/build/assets/{app-settings-FRYUtG-Z.js → app-settings-CofRfixq.js} +1 -1
- package/build/assets/{automation-detail-DiIq3Vsh.js → automation-detail-BV4Cn0O8.js} +1 -1
- package/build/assets/{automations-list-DQn7k1Ix.js → automations-list-BaJ61q7P.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-B3BCZDPq.js} +1 -1
- package/build/assets/{backend-synced-settings-badge-BW2WPX-c.js → backend-synced-settings-badge-Da0G6Lwv.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-DzRpAQr4.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-Bo07FAEi.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-DDdRyW4z.js +19 -0
- package/build/assets/conversation-panel-Dww2uJOd.js +1 -0
- package/build/assets/conversation-rGQV1Eym.js +1 -0
- package/build/assets/{conversation-service.api-CngSQhPh.js → conversation-service.api-ByRiRU1e.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-CpA_JKLY.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-DUpefbBp.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-BYCLWP3d.js} +1 -1
- package/build/assets/{extensions-navigation-nurGkQe5.js → extensions-navigation-3FLKfb6g.js} +1 -1
- package/build/assets/{files-tab-DIyAYvp0.js → files-tab-CBUPwSV1.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-BDCL0Psk.js +1 -0
- package/build/assets/{install-server-modal-C8fylTet.js → install-server-modal-CWZhBKwH.js} +1 -1
- package/build/assets/{launch-BNiqgTvz.js → launch-CMZknx1e.js} +1 -1
- package/build/assets/{lesson-plan-BdmMvboE.js → lesson-plan-y520IDs6.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-client-P9f2gKeW.js → llm-client-D6EtdLBs.js} +1 -1
- package/build/assets/llm-not-configured-banner-CJyURBCm.js +27 -0
- package/build/assets/llm-settings-BW6yW2Go.js +1 -0
- package/build/assets/{llm-settings-B92l1Z2N.js → llm-settings-CiY22Wzi.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-v5POMal5.js} +1 -1
- package/build/assets/manifest-eccb7f46.js +1 -0
- package/build/assets/{markdown-renderer-Dt0RXhUJ.js → markdown-renderer-z446oW0Z.js} +1 -1
- package/build/assets/{mcp-BKdD21xY.js → mcp-DgPFZ_Dv.js} +1 -1
- package/build/assets/{messages-Ch8Rd1cx.js → messages-Dq6AQ8mp.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-CdZs21EZ.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-Cdwu8QIy.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-CdYnKVsu.js} +1 -1
- package/build/assets/{organization-service.api-CNmSPGj4.js → organization-service.api-CzMvXIQT.js} +1 -1
- package/build/assets/{path-utils-CKgIQZAY.js → path-utils-DKu3CNkH.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-YkOp7QXt.js} +1 -1
- package/build/assets/{profiles-client-BNvHck-I.js → profiles-client-BjUo3q05.js} +1 -1
- package/build/assets/{providers-189W9TJO.js → providers-CbpQft-X.js} +1 -1
- package/build/assets/{proxy--Uy1iGsW.js → proxy-Bx3NeKeo.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-WxaZcjRD.js} +1 -1
- package/build/assets/{root-Bz22PITD.js → root-CiNoOVrb.js} +2 -2
- package/build/assets/{root-layout-B8swq9fS.js → root-layout-DUw-s9LS.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-DPBwwLle.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-service-D6Gcymcs.js → secrets-service-Skzza9sx.js} +1 -1
- package/build/assets/{secrets-settings-Bga0bwB1.js → secrets-settings-DmpsTC9V.js} +1 -1
- package/build/assets/{settings-DHAhcPm2.js → settings-ChsRtIJQ.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-BLfmrKRl.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-Cth7Zb-I.js} +1 -1
- package/build/assets/{settings-section-header-context-1fN7Xkb3.js → settings-section-header-context-Cid25HM2.js} +1 -1
- package/build/assets/{settings-service.api-CFt5HmXD.js → settings-service.api-CcpckquT.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-Y0C8zqdr.js} +1 -1
- package/build/assets/{sidebar-mobile-menu-toggle-DkYaKR6Q.js → sidebar-mobile-menu-toggle-BvcBXvLY.js} +1 -1
- package/build/assets/{sidebar-nav-link-CzeuB4So.js → sidebar-nav-link-BekRAssb.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-client-Ui_9FvXp.js → skills-client-CgraS-wA.js} +1 -1
- package/build/assets/{skills-plugins-juwPhlEE.js → skills-plugins-rIza_fUf.js} +1 -1
- package/build/assets/{skills-settings-BW09n_Px.js → skills-settings-Dvl7gpEx.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-CAWBJ_rB.js} +1 -1
- package/build/assets/{terminal-BFi5FOMc.js → terminal-B92mACR5.js} +1 -1
- package/build/assets/{terminal-CZH2h1J3.js → terminal-BFypysgZ.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-Dj7Jkhgp.js} +1 -1
- package/build/assets/{use-active-conversation-CLzls6XV.js → use-active-conversation-BkohEtaN.js} +1 -1
- package/build/assets/{use-agent-settings-schema-BCXxH2N-.js → use-agent-settings-schema-Lf_lBAky.js} +1 -1
- package/build/assets/{use-agent-state-BocVPR5S.js → use-agent-state-DITv5qV7.js} +1 -1
- package/build/assets/{use-cloud-current-user-id-BjDwnldw.js → use-cloud-current-user-id-CSm3kgqy.js} +1 -1
- package/build/assets/use-config-DVU9HaPf.js +1 -0
- package/build/assets/{use-create-conversation-CIkPp9u9.js → use-create-conversation-CJUAOf1q.js} +1 -1
- package/build/assets/{use-create-secret-Bwy6457V.js → use-create-secret-LObNBU3M.js} +1 -1
- package/build/assets/{use-handle-plan-click-CjNwpDeO.js → use-handle-plan-click-BdcdMWbv.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-BBTR-OsK.js} +1 -1
- package/build/assets/use-runtime-is-ready-BOQpqCvp.js +1 -0
- package/build/assets/{use-save-settings-BjYPOrtF.js → use-save-settings-7_MLft-Y.js} +1 -1
- package/build/assets/{use-settings-YTDcMvj1.js → use-settings-CNsxccvQ.js} +1 -1
- package/build/assets/{use-settings-nav-items-DMit9adK.js → use-settings-nav-items-ykMjd_NG.js} +1 -1
- package/build/assets/{use-skills-fh_U4ZGe.js → use-skills-_unimM2d.js} +1 -1
- package/build/assets/{use-tracking-DJ3Z7ha1.js → use-tracking-C9P88zSo.js} +1 -1
- package/build/assets/{use-user-conversation-Ct93yaXj.js → use-user-conversation-2jZZ-MLA.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~mcp~settings~settings-index~~m3acswdn-CGm-Jxp5.js → vendor~root-layout~home~conversation-panel~conversation~launch~mcp~settings~settings-index~~m3acswdn-DQE89epK.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-EUkt_CkZ.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 +4 -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/dist/utils/websocket-url.cjs +1 -1
- package/dist/utils/websocket-url.cjs.map +1 -1
- package/dist/utils/websocket-url.js +2 -2
- package/dist/utils/websocket-url.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/agent-server-client-options-B-C8JaTb.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/manifest-d230d4a5.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
package/dist/package.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require(`./_virtual/_rolldown/runtime.cjs`);var e={name:`@openhands/agent-canvas`,version:`1.0.0-rc.
|
|
1
|
+
require(`./_virtual/_rolldown/runtime.cjs`);var e={name:`@openhands/agent-canvas`,version:`1.0.0-rc.9`,description:`Agent Canvas UI for OpenHands - run AI coding agents with a visual interface`,license:`MIT`,private:!1,type:`module`,repository:{type:`git`,url:`https://github.com/OpenHands/agent-canvas`},homepage:`https://github.com/OpenHands/agent-canvas#readme`,bugs:{url:`https://github.com/OpenHands/agent-canvas/issues`},bin:{"agent-canvas":`bin/agent-canvas.mjs`},engines:{node:`>=22.12.0`},dependencies:{"@heroui/react":`2.8.10`,"@microlink/react-json-view":`1.31.20`,"@monaco-editor/react":`4.7.0`,"@openhands/extensions":`0.4.1`,"@openhands/typescript-client":`1.24.3`,"@react-router/node":`7.17.0`,"@react-router/serve":`7.17.0`,"@tailwindcss/vite":`4.2.4`,"@tanstack/react-query":`5.100.9`,"@types/shell-quote":`^1.7.5`,"@uidotdev/usehooks":`2.4.1`,"@xterm/addon-fit":`0.11.0`,"@xterm/xterm":`6.0.0`,axios:`1.16.0`,"class-variance-authority":`0.7.1`,clsx:`2.1.1`,downshift:`9.3.2`,"framer-motion":`12.38.0`,i18next:`26.0.8`,"i18next-browser-languagedetector":`8.2.1`,"i18next-http-backend":`4.0.0`,isbot:`5.1.39`,"lucide-react":`1.14.0`,"monaco-editor":`0.55.1`,"posthog-js":`1.372.6`,react:`19.2.5`,"react-dom":`19.2.5`,"react-hot-toast":`2.6.0`,"react-i18next":`17.0.6`,"react-icons":`5.6.0`,"react-markdown":`10.1.0`,"react-router":`7.17.0`,"react-syntax-highlighter":`16.1.1`,"rehype-raw":`7.0.0`,"rehype-sanitize":`6.0.0`,"remark-breaks":`4.0.0`,"remark-gfm":`4.0.1`,"shell-quote":`^1.8.3`,"sirv-cli":`3.0.1`,"socket.io-client":`4.8.3`,"tailwind-merge":`3.5.0`,"tailwind-scrollbar":`4.0.2`,"unist-util-visit":`5.1.0`,uuid:`14.0.0`,vite:`8.0.10`,winston:`^3.19.0`,"winston-daily-rotate-file":`^5.0.0`,zustand:`5.0.12`},scripts:{dev:`node --env-file-if-exists=.env scripts/dev-with-automation.mjs`,"dev:static":`node --env-file-if-exists=.env scripts/dev-static.mjs`,"dev:extra-backend":`node --env-file-if-exists=.env scripts/dev-extra-backend.mjs`,"dev:minimal":`node --env-file-if-exists=.env scripts/dev-safe.mjs`,"dev:frontend":`npm run make-i18n && cross-env VITE_MOCK_API=false react-router dev`,"dev:mock":`npm run make-i18n && cross-env VITE_MOCK_API=true react-router dev`,build:`npm run build:app`,"build:mock":`npm run make-i18n && cross-env VITE_MOCK_API=true react-router build`,start:`npx sirv-cli build/ --single`,test:`npm run make-i18n && vitest run`,"test:e2e":`playwright test --pass-with-no-tests`,"test:e2e:live":`node --env-file-if-exists=.env tests/e2e/live/scripts/run-live-e2e.mjs`,"test:e2e:mock-llm":`playwright test --config=playwright.mock-llm.config.ts`,"test:e2e:mock-llm:docker":`playwright test --config=playwright.mock-llm-docker.config.ts`,"test:e2e:snapshots":`playwright test tests/e2e/snapshots --project=chromium --retries=0`,"test:e2e:snapshots:update":`playwright test tests/e2e/snapshots --project=chromium --update-snapshots`,"test:coverage":`npm run make-i18n && vitest run --coverage`,dev_wsl:`VITE_WATCH_USE_POLLING=true vite`,preview:`vite preview`,"make-i18n":`node scripts/make-i18n-translations.cjs`,prelint:`npm run make-i18n`,lint:`npm run typecheck && eslint src && prettier --check src/**/*.{ts,tsx}`,"lint:fix":`eslint src --fix && prettier --write src/**/*.{ts,tsx}`,prepare:`husky`,typecheck:`react-router typegen && tsc`,"typecheck:staged":`react-router typegen && npx tsc --noEmit --skipLibCheck`,"check-translation-completeness":`node scripts/check-translation-completeness.cjs`,"build:app":`npm run make-i18n && react-router build`,"build:lib":`npm run make-i18n && react-router typegen && cross-env BUILD_LIB=true VITE_APP_ENV=production vite build && tsc -p tsconfig.lib.json`,"build:docker":`node scripts/docker-build.mjs`},"lint-staged":{"src/**/*.{ts,tsx,js}":[`eslint --fix`,`prettier --write`],"src/**/*.{ts,tsx}":[`bash -c 'npm run typecheck:staged'`],"src/**/*":[`npm run check-translation-completeness`]},devDependencies:{"@eslint/eslintrc":`3.3.1`,"@eslint/js":`9.39.4`,"@mswjs/socket.io-binding":`0.2.0`,"@playwright/test":`1.59.1`,"@react-router/dev":`7.17.0`,"@tailwindcss/typography":`0.5.19`,"@tanstack/eslint-plugin-query":`5.100.9`,"@testing-library/dom":`10.4.1`,"@testing-library/jest-dom":`6.9.1`,"@testing-library/react":`16.3.2`,"@testing-library/user-event":`14.6.1`,"@types/mdast":`4.0.4`,"@types/node":`25.6.0`,"@types/react":`19.2.14`,"@types/react-dom":`19.2.3`,"@types/react-syntax-highlighter":`15.5.13`,"@typescript-eslint/eslint-plugin":`8.59.2`,"@typescript-eslint/parser":`8.59.2`,"@vercel/react-router":`1.3.0`,"@vitest/coverage-v8":`4.1.5`,"cross-env":`10.1.0`,eslint:`9.39.4`,"eslint-config-prettier":`10.1.8`,"eslint-import-resolver-typescript":`4.4.4`,"eslint-plugin-i18next":`6.1.4`,"eslint-plugin-import-x":`4.16.2`,"eslint-plugin-jsx-a11y":`6.10.2`,"eslint-plugin-prettier":`5.5.5`,"eslint-plugin-react":`7.37.5`,"eslint-plugin-react-hooks":`7.1.1`,"eslint-plugin-unused-imports":`4.4.1`,globals:`16.5.0`,husky:`9.1.7`,jsdom:`29.1.1`,"lint-staged":`16.4.0`,msw:`2.14.2`,"postcss-prefix-selector":`2.1.1`,prettier:`3.8.3`,tailwindcss:`4.2.4`,typescript:`6.0.3`,"vite-plugin-svgr":`5.2.0`,vitest:`4.1.5`},packageManager:`npm@10.5.0`,volta:{node:`22.12.0`},msw:{workerDirectory:[`public`]},overrides:{"@vercel/static-config":{ajv:`8.20.0`},dompurify:`3.4.7`},main:`./dist/index.cjs`,module:`./dist/index.js`,types:`./dist/index.d.ts`,files:[`dist`,`bin`,`build`,`config`,`scripts`,`tools`],exports:{".":{types:`./dist/index.d.ts`,import:`./dist/index.js`,require:`./dist/index.cjs`},"./browser":{types:`./dist/components/browser/index.d.ts`,import:`./dist/components/browser/index.js`,require:`./dist/components/browser/index.cjs`},"./conversation":{types:`./dist/components/conversation/index.d.ts`,import:`./dist/components/conversation/index.js`,require:`./dist/components/conversation/index.cjs`},"./files":{types:`./dist/components/files/index.d.ts`,import:`./dist/components/files/index.js`,require:`./dist/components/files/index.cjs`},"./settings":{types:`./dist/components/settings/index.d.ts`,import:`./dist/components/settings/index.js`,require:`./dist/components/settings/index.cjs`},"./sidebar":{types:`./dist/components/sidebar/index.d.ts`,import:`./dist/components/sidebar/index.js`,require:`./dist/components/sidebar/index.cjs`},"./terminal":{types:`./dist/components/terminal/index.d.ts`,import:`./dist/components/terminal/index.js`,require:`./dist/components/terminal/index.cjs`},"./i18n":{types:`./dist/i18n/index.d.ts`,import:`./dist/i18n/index.js`,require:`./dist/i18n/index.cjs`},"./package.json":`./package.json`},peerDependencies:{react:`19.2.5`,"react-dom":`19.2.5`,"react-router":`7.17.0`}};exports.default=e;
|
|
2
2
|
//# sourceMappingURL=package.cjs.map
|
package/dist/package.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package.cjs","names":[],"sources":["../package.json"],"sourcesContent":["{\n \"name\": \"@openhands/agent-canvas\",\n \"version\": \"1.0.0-rc.
|
|
1
|
+
{"version":3,"file":"package.cjs","names":[],"sources":["../package.json"],"sourcesContent":["{\n \"name\": \"@openhands/agent-canvas\",\n \"version\": \"1.0.0-rc.9\",\n \"description\": \"Agent Canvas UI for OpenHands - run AI coding agents with a visual interface\",\n \"license\": \"MIT\",\n \"private\": false,\n \"type\": \"module\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/OpenHands/agent-canvas\"\n },\n \"homepage\": \"https://github.com/OpenHands/agent-canvas#readme\",\n \"bugs\": {\n \"url\": \"https://github.com/OpenHands/agent-canvas/issues\"\n },\n \"bin\": {\n \"agent-canvas\": \"bin/agent-canvas.mjs\"\n },\n \"engines\": {\n \"node\": \">=22.12.0\"\n },\n \"dependencies\": {\n \"@heroui/react\": \"2.8.10\",\n \"@microlink/react-json-view\": \"1.31.20\",\n \"@monaco-editor/react\": \"4.7.0\",\n \"@openhands/extensions\": \"0.4.1\",\n \"@openhands/typescript-client\": \"1.24.3\",\n \"@react-router/node\": \"7.17.0\",\n \"@react-router/serve\": \"7.17.0\",\n \"@tailwindcss/vite\": \"4.2.4\",\n \"@tanstack/react-query\": \"5.100.9\",\n \"@types/shell-quote\": \"^1.7.5\",\n \"@uidotdev/usehooks\": \"2.4.1\",\n \"@xterm/addon-fit\": \"0.11.0\",\n \"@xterm/xterm\": \"6.0.0\",\n \"axios\": \"1.16.0\",\n \"class-variance-authority\": \"0.7.1\",\n \"clsx\": \"2.1.1\",\n \"downshift\": \"9.3.2\",\n \"framer-motion\": \"12.38.0\",\n \"i18next\": \"26.0.8\",\n \"i18next-browser-languagedetector\": \"8.2.1\",\n \"i18next-http-backend\": \"4.0.0\",\n \"isbot\": \"5.1.39\",\n \"lucide-react\": \"1.14.0\",\n \"monaco-editor\": \"0.55.1\",\n \"posthog-js\": \"1.372.6\",\n \"react\": \"19.2.5\",\n \"react-dom\": \"19.2.5\",\n \"react-hot-toast\": \"2.6.0\",\n \"react-i18next\": \"17.0.6\",\n \"react-icons\": \"5.6.0\",\n \"react-markdown\": \"10.1.0\",\n \"react-router\": \"7.17.0\",\n \"react-syntax-highlighter\": \"16.1.1\",\n \"rehype-raw\": \"7.0.0\",\n \"rehype-sanitize\": \"6.0.0\",\n \"remark-breaks\": \"4.0.0\",\n \"remark-gfm\": \"4.0.1\",\n \"shell-quote\": \"^1.8.3\",\n \"sirv-cli\": \"3.0.1\",\n \"socket.io-client\": \"4.8.3\",\n \"tailwind-merge\": \"3.5.0\",\n \"tailwind-scrollbar\": \"4.0.2\",\n \"unist-util-visit\": \"5.1.0\",\n \"uuid\": \"14.0.0\",\n \"vite\": \"8.0.10\",\n \"winston\": \"^3.19.0\",\n \"winston-daily-rotate-file\": \"^5.0.0\",\n \"zustand\": \"5.0.12\"\n },\n \"scripts\": {\n \"dev\": \"node --env-file-if-exists=.env scripts/dev-with-automation.mjs\",\n \"dev:static\": \"node --env-file-if-exists=.env scripts/dev-static.mjs\",\n \"dev:extra-backend\": \"node --env-file-if-exists=.env scripts/dev-extra-backend.mjs\",\n \"dev:minimal\": \"node --env-file-if-exists=.env scripts/dev-safe.mjs\",\n \"dev:frontend\": \"npm run make-i18n && cross-env VITE_MOCK_API=false react-router dev\",\n \"dev:mock\": \"npm run make-i18n && cross-env VITE_MOCK_API=true react-router dev\",\n \"build\": \"npm run build:app\",\n \"build:mock\": \"npm run make-i18n && cross-env VITE_MOCK_API=true react-router build\",\n \"start\": \"npx sirv-cli build/ --single\",\n \"test\": \"npm run make-i18n && vitest run\",\n \"test:e2e\": \"playwright test --pass-with-no-tests\",\n \"test:e2e:live\": \"node --env-file-if-exists=.env tests/e2e/live/scripts/run-live-e2e.mjs\",\n \"test:e2e:mock-llm\": \"playwright test --config=playwright.mock-llm.config.ts\",\n \"test:e2e:mock-llm:docker\": \"playwright test --config=playwright.mock-llm-docker.config.ts\",\n \"test:e2e:snapshots\": \"playwright test tests/e2e/snapshots --project=chromium --retries=0\",\n \"test:e2e:snapshots:update\": \"playwright test tests/e2e/snapshots --project=chromium --update-snapshots\",\n \"test:coverage\": \"npm run make-i18n && vitest run --coverage\",\n \"dev_wsl\": \"VITE_WATCH_USE_POLLING=true vite\",\n \"preview\": \"vite preview\",\n \"make-i18n\": \"node scripts/make-i18n-translations.cjs\",\n \"prelint\": \"npm run make-i18n\",\n \"lint\": \"npm run typecheck && eslint src && prettier --check src/**/*.{ts,tsx}\",\n \"lint:fix\": \"eslint src --fix && prettier --write src/**/*.{ts,tsx}\",\n \"prepare\": \"husky\",\n \"typecheck\": \"react-router typegen && tsc\",\n \"typecheck:staged\": \"react-router typegen && npx tsc --noEmit --skipLibCheck\",\n \"check-translation-completeness\": \"node scripts/check-translation-completeness.cjs\",\n \"build:app\": \"npm run make-i18n && react-router build\",\n \"build:lib\": \"npm run make-i18n && react-router typegen && cross-env BUILD_LIB=true VITE_APP_ENV=production vite build && tsc -p tsconfig.lib.json\",\n \"build:docker\": \"node scripts/docker-build.mjs\"\n },\n \"lint-staged\": {\n \"src/**/*.{ts,tsx,js}\": [\n \"eslint --fix\",\n \"prettier --write\"\n ],\n \"src/**/*.{ts,tsx}\": [\n \"bash -c 'npm run typecheck:staged'\"\n ],\n \"src/**/*\": [\n \"npm run check-translation-completeness\"\n ]\n },\n \"devDependencies\": {\n \"@eslint/eslintrc\": \"3.3.1\",\n \"@eslint/js\": \"9.39.4\",\n \"@mswjs/socket.io-binding\": \"0.2.0\",\n \"@playwright/test\": \"1.59.1\",\n \"@react-router/dev\": \"7.17.0\",\n \"@tailwindcss/typography\": \"0.5.19\",\n \"@tanstack/eslint-plugin-query\": \"5.100.9\",\n \"@testing-library/dom\": \"10.4.1\",\n \"@testing-library/jest-dom\": \"6.9.1\",\n \"@testing-library/react\": \"16.3.2\",\n \"@testing-library/user-event\": \"14.6.1\",\n \"@types/mdast\": \"4.0.4\",\n \"@types/node\": \"25.6.0\",\n \"@types/react\": \"19.2.14\",\n \"@types/react-dom\": \"19.2.3\",\n \"@types/react-syntax-highlighter\": \"15.5.13\",\n \"@typescript-eslint/eslint-plugin\": \"8.59.2\",\n \"@typescript-eslint/parser\": \"8.59.2\",\n \"@vercel/react-router\": \"1.3.0\",\n \"@vitest/coverage-v8\": \"4.1.5\",\n \"cross-env\": \"10.1.0\",\n \"eslint\": \"9.39.4\",\n \"eslint-config-prettier\": \"10.1.8\",\n \"eslint-import-resolver-typescript\": \"4.4.4\",\n \"eslint-plugin-i18next\": \"6.1.4\",\n \"eslint-plugin-import-x\": \"4.16.2\",\n \"eslint-plugin-jsx-a11y\": \"6.10.2\",\n \"eslint-plugin-prettier\": \"5.5.5\",\n \"eslint-plugin-react\": \"7.37.5\",\n \"eslint-plugin-react-hooks\": \"7.1.1\",\n \"eslint-plugin-unused-imports\": \"4.4.1\",\n \"globals\": \"16.5.0\",\n \"husky\": \"9.1.7\",\n \"jsdom\": \"29.1.1\",\n \"lint-staged\": \"16.4.0\",\n \"msw\": \"2.14.2\",\n \"postcss-prefix-selector\": \"2.1.1\",\n \"prettier\": \"3.8.3\",\n \"tailwindcss\": \"4.2.4\",\n \"typescript\": \"6.0.3\",\n \"vite-plugin-svgr\": \"5.2.0\",\n \"vitest\": \"4.1.5\"\n },\n \"packageManager\": \"npm@10.5.0\",\n \"volta\": {\n \"node\": \"22.12.0\"\n },\n \"msw\": {\n \"workerDirectory\": [\n \"public\"\n ]\n },\n \"overrides\": {\n \"@vercel/static-config\": {\n \"ajv\": \"8.20.0\"\n },\n \"dompurify\": \"3.4.7\"\n },\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"files\": [\n \"dist\",\n \"bin\",\n \"build\",\n \"config\",\n \"scripts\",\n \"tools\"\n ],\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\"\n },\n \"./browser\": {\n \"types\": \"./dist/components/browser/index.d.ts\",\n \"import\": \"./dist/components/browser/index.js\",\n \"require\": \"./dist/components/browser/index.cjs\"\n },\n \"./conversation\": {\n \"types\": \"./dist/components/conversation/index.d.ts\",\n \"import\": \"./dist/components/conversation/index.js\",\n \"require\": \"./dist/components/conversation/index.cjs\"\n },\n \"./files\": {\n \"types\": \"./dist/components/files/index.d.ts\",\n \"import\": \"./dist/components/files/index.js\",\n \"require\": \"./dist/components/files/index.cjs\"\n },\n \"./settings\": {\n \"types\": \"./dist/components/settings/index.d.ts\",\n \"import\": \"./dist/components/settings/index.js\",\n \"require\": \"./dist/components/settings/index.cjs\"\n },\n \"./sidebar\": {\n \"types\": \"./dist/components/sidebar/index.d.ts\",\n \"import\": \"./dist/components/sidebar/index.js\",\n \"require\": \"./dist/components/sidebar/index.cjs\"\n },\n \"./terminal\": {\n \"types\": \"./dist/components/terminal/index.d.ts\",\n \"import\": \"./dist/components/terminal/index.js\",\n \"require\": \"./dist/components/terminal/index.cjs\"\n },\n \"./i18n\": {\n \"types\": \"./dist/i18n/index.d.ts\",\n \"import\": \"./dist/i18n/index.js\",\n \"require\": \"./dist/i18n/index.cjs\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"peerDependencies\": {\n \"react\": \"19.2.5\",\n \"react-dom\": \"19.2.5\",\n \"react-router\": \"7.17.0\"\n }\n}\n"],"mappings":""}
|
package/dist/package.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
var e = {
|
|
2
2
|
name: "@openhands/agent-canvas",
|
|
3
|
-
version: "1.0.0-rc.
|
|
3
|
+
version: "1.0.0-rc.9",
|
|
4
4
|
description: "Agent Canvas UI for OpenHands - run AI coding agents with a visual interface",
|
|
5
5
|
license: "MIT",
|
|
6
6
|
private: !1,
|
|
@@ -17,7 +17,7 @@ var e = {
|
|
|
17
17
|
"@heroui/react": "2.8.10",
|
|
18
18
|
"@microlink/react-json-view": "1.31.20",
|
|
19
19
|
"@monaco-editor/react": "4.7.0",
|
|
20
|
-
"@openhands/extensions": "0.4.
|
|
20
|
+
"@openhands/extensions": "0.4.1",
|
|
21
21
|
"@openhands/typescript-client": "1.24.3",
|
|
22
22
|
"@react-router/node": "7.17.0",
|
|
23
23
|
"@react-router/serve": "7.17.0",
|
package/dist/package.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package.js","names":[],"sources":["../package.json"],"sourcesContent":["{\n \"name\": \"@openhands/agent-canvas\",\n \"version\": \"1.0.0-rc.
|
|
1
|
+
{"version":3,"file":"package.js","names":[],"sources":["../package.json"],"sourcesContent":["{\n \"name\": \"@openhands/agent-canvas\",\n \"version\": \"1.0.0-rc.9\",\n \"description\": \"Agent Canvas UI for OpenHands - run AI coding agents with a visual interface\",\n \"license\": \"MIT\",\n \"private\": false,\n \"type\": \"module\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/OpenHands/agent-canvas\"\n },\n \"homepage\": \"https://github.com/OpenHands/agent-canvas#readme\",\n \"bugs\": {\n \"url\": \"https://github.com/OpenHands/agent-canvas/issues\"\n },\n \"bin\": {\n \"agent-canvas\": \"bin/agent-canvas.mjs\"\n },\n \"engines\": {\n \"node\": \">=22.12.0\"\n },\n \"dependencies\": {\n \"@heroui/react\": \"2.8.10\",\n \"@microlink/react-json-view\": \"1.31.20\",\n \"@monaco-editor/react\": \"4.7.0\",\n \"@openhands/extensions\": \"0.4.1\",\n \"@openhands/typescript-client\": \"1.24.3\",\n \"@react-router/node\": \"7.17.0\",\n \"@react-router/serve\": \"7.17.0\",\n \"@tailwindcss/vite\": \"4.2.4\",\n \"@tanstack/react-query\": \"5.100.9\",\n \"@types/shell-quote\": \"^1.7.5\",\n \"@uidotdev/usehooks\": \"2.4.1\",\n \"@xterm/addon-fit\": \"0.11.0\",\n \"@xterm/xterm\": \"6.0.0\",\n \"axios\": \"1.16.0\",\n \"class-variance-authority\": \"0.7.1\",\n \"clsx\": \"2.1.1\",\n \"downshift\": \"9.3.2\",\n \"framer-motion\": \"12.38.0\",\n \"i18next\": \"26.0.8\",\n \"i18next-browser-languagedetector\": \"8.2.1\",\n \"i18next-http-backend\": \"4.0.0\",\n \"isbot\": \"5.1.39\",\n \"lucide-react\": \"1.14.0\",\n \"monaco-editor\": \"0.55.1\",\n \"posthog-js\": \"1.372.6\",\n \"react\": \"19.2.5\",\n \"react-dom\": \"19.2.5\",\n \"react-hot-toast\": \"2.6.0\",\n \"react-i18next\": \"17.0.6\",\n \"react-icons\": \"5.6.0\",\n \"react-markdown\": \"10.1.0\",\n \"react-router\": \"7.17.0\",\n \"react-syntax-highlighter\": \"16.1.1\",\n \"rehype-raw\": \"7.0.0\",\n \"rehype-sanitize\": \"6.0.0\",\n \"remark-breaks\": \"4.0.0\",\n \"remark-gfm\": \"4.0.1\",\n \"shell-quote\": \"^1.8.3\",\n \"sirv-cli\": \"3.0.1\",\n \"socket.io-client\": \"4.8.3\",\n \"tailwind-merge\": \"3.5.0\",\n \"tailwind-scrollbar\": \"4.0.2\",\n \"unist-util-visit\": \"5.1.0\",\n \"uuid\": \"14.0.0\",\n \"vite\": \"8.0.10\",\n \"winston\": \"^3.19.0\",\n \"winston-daily-rotate-file\": \"^5.0.0\",\n \"zustand\": \"5.0.12\"\n },\n \"scripts\": {\n \"dev\": \"node --env-file-if-exists=.env scripts/dev-with-automation.mjs\",\n \"dev:static\": \"node --env-file-if-exists=.env scripts/dev-static.mjs\",\n \"dev:extra-backend\": \"node --env-file-if-exists=.env scripts/dev-extra-backend.mjs\",\n \"dev:minimal\": \"node --env-file-if-exists=.env scripts/dev-safe.mjs\",\n \"dev:frontend\": \"npm run make-i18n && cross-env VITE_MOCK_API=false react-router dev\",\n \"dev:mock\": \"npm run make-i18n && cross-env VITE_MOCK_API=true react-router dev\",\n \"build\": \"npm run build:app\",\n \"build:mock\": \"npm run make-i18n && cross-env VITE_MOCK_API=true react-router build\",\n \"start\": \"npx sirv-cli build/ --single\",\n \"test\": \"npm run make-i18n && vitest run\",\n \"test:e2e\": \"playwright test --pass-with-no-tests\",\n \"test:e2e:live\": \"node --env-file-if-exists=.env tests/e2e/live/scripts/run-live-e2e.mjs\",\n \"test:e2e:mock-llm\": \"playwright test --config=playwright.mock-llm.config.ts\",\n \"test:e2e:mock-llm:docker\": \"playwright test --config=playwright.mock-llm-docker.config.ts\",\n \"test:e2e:snapshots\": \"playwright test tests/e2e/snapshots --project=chromium --retries=0\",\n \"test:e2e:snapshots:update\": \"playwright test tests/e2e/snapshots --project=chromium --update-snapshots\",\n \"test:coverage\": \"npm run make-i18n && vitest run --coverage\",\n \"dev_wsl\": \"VITE_WATCH_USE_POLLING=true vite\",\n \"preview\": \"vite preview\",\n \"make-i18n\": \"node scripts/make-i18n-translations.cjs\",\n \"prelint\": \"npm run make-i18n\",\n \"lint\": \"npm run typecheck && eslint src && prettier --check src/**/*.{ts,tsx}\",\n \"lint:fix\": \"eslint src --fix && prettier --write src/**/*.{ts,tsx}\",\n \"prepare\": \"husky\",\n \"typecheck\": \"react-router typegen && tsc\",\n \"typecheck:staged\": \"react-router typegen && npx tsc --noEmit --skipLibCheck\",\n \"check-translation-completeness\": \"node scripts/check-translation-completeness.cjs\",\n \"build:app\": \"npm run make-i18n && react-router build\",\n \"build:lib\": \"npm run make-i18n && react-router typegen && cross-env BUILD_LIB=true VITE_APP_ENV=production vite build && tsc -p tsconfig.lib.json\",\n \"build:docker\": \"node scripts/docker-build.mjs\"\n },\n \"lint-staged\": {\n \"src/**/*.{ts,tsx,js}\": [\n \"eslint --fix\",\n \"prettier --write\"\n ],\n \"src/**/*.{ts,tsx}\": [\n \"bash -c 'npm run typecheck:staged'\"\n ],\n \"src/**/*\": [\n \"npm run check-translation-completeness\"\n ]\n },\n \"devDependencies\": {\n \"@eslint/eslintrc\": \"3.3.1\",\n \"@eslint/js\": \"9.39.4\",\n \"@mswjs/socket.io-binding\": \"0.2.0\",\n \"@playwright/test\": \"1.59.1\",\n \"@react-router/dev\": \"7.17.0\",\n \"@tailwindcss/typography\": \"0.5.19\",\n \"@tanstack/eslint-plugin-query\": \"5.100.9\",\n \"@testing-library/dom\": \"10.4.1\",\n \"@testing-library/jest-dom\": \"6.9.1\",\n \"@testing-library/react\": \"16.3.2\",\n \"@testing-library/user-event\": \"14.6.1\",\n \"@types/mdast\": \"4.0.4\",\n \"@types/node\": \"25.6.0\",\n \"@types/react\": \"19.2.14\",\n \"@types/react-dom\": \"19.2.3\",\n \"@types/react-syntax-highlighter\": \"15.5.13\",\n \"@typescript-eslint/eslint-plugin\": \"8.59.2\",\n \"@typescript-eslint/parser\": \"8.59.2\",\n \"@vercel/react-router\": \"1.3.0\",\n \"@vitest/coverage-v8\": \"4.1.5\",\n \"cross-env\": \"10.1.0\",\n \"eslint\": \"9.39.4\",\n \"eslint-config-prettier\": \"10.1.8\",\n \"eslint-import-resolver-typescript\": \"4.4.4\",\n \"eslint-plugin-i18next\": \"6.1.4\",\n \"eslint-plugin-import-x\": \"4.16.2\",\n \"eslint-plugin-jsx-a11y\": \"6.10.2\",\n \"eslint-plugin-prettier\": \"5.5.5\",\n \"eslint-plugin-react\": \"7.37.5\",\n \"eslint-plugin-react-hooks\": \"7.1.1\",\n \"eslint-plugin-unused-imports\": \"4.4.1\",\n \"globals\": \"16.5.0\",\n \"husky\": \"9.1.7\",\n \"jsdom\": \"29.1.1\",\n \"lint-staged\": \"16.4.0\",\n \"msw\": \"2.14.2\",\n \"postcss-prefix-selector\": \"2.1.1\",\n \"prettier\": \"3.8.3\",\n \"tailwindcss\": \"4.2.4\",\n \"typescript\": \"6.0.3\",\n \"vite-plugin-svgr\": \"5.2.0\",\n \"vitest\": \"4.1.5\"\n },\n \"packageManager\": \"npm@10.5.0\",\n \"volta\": {\n \"node\": \"22.12.0\"\n },\n \"msw\": {\n \"workerDirectory\": [\n \"public\"\n ]\n },\n \"overrides\": {\n \"@vercel/static-config\": {\n \"ajv\": \"8.20.0\"\n },\n \"dompurify\": \"3.4.7\"\n },\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"files\": [\n \"dist\",\n \"bin\",\n \"build\",\n \"config\",\n \"scripts\",\n \"tools\"\n ],\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\"\n },\n \"./browser\": {\n \"types\": \"./dist/components/browser/index.d.ts\",\n \"import\": \"./dist/components/browser/index.js\",\n \"require\": \"./dist/components/browser/index.cjs\"\n },\n \"./conversation\": {\n \"types\": \"./dist/components/conversation/index.d.ts\",\n \"import\": \"./dist/components/conversation/index.js\",\n \"require\": \"./dist/components/conversation/index.cjs\"\n },\n \"./files\": {\n \"types\": \"./dist/components/files/index.d.ts\",\n \"import\": \"./dist/components/files/index.js\",\n \"require\": \"./dist/components/files/index.cjs\"\n },\n \"./settings\": {\n \"types\": \"./dist/components/settings/index.d.ts\",\n \"import\": \"./dist/components/settings/index.js\",\n \"require\": \"./dist/components/settings/index.cjs\"\n },\n \"./sidebar\": {\n \"types\": \"./dist/components/sidebar/index.d.ts\",\n \"import\": \"./dist/components/sidebar/index.js\",\n \"require\": \"./dist/components/sidebar/index.cjs\"\n },\n \"./terminal\": {\n \"types\": \"./dist/components/terminal/index.d.ts\",\n \"import\": \"./dist/components/terminal/index.js\",\n \"require\": \"./dist/components/terminal/index.cjs\"\n },\n \"./i18n\": {\n \"types\": \"./dist/i18n/index.d.ts\",\n \"import\": \"./dist/i18n/index.js\",\n \"require\": \"./dist/i18n/index.cjs\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"peerDependencies\": {\n \"react\": \"19.2.5\",\n \"react-dom\": \"19.2.5\",\n \"react-router\": \"7.17.0\"\n }\n}\n"],"mappings":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require(`../_virtual/_rolldown/runtime.cjs`);function e(e){if(e&&!e.startsWith(`/`))try{let t=new URL(e),n=t.hostname,r=window.location.hostname??window.location.host?.split(`:`)[0];return r&&(n===`localhost`||n===`127.0.0.1`)&&r!==`localhost`&&r!==`127.0.0.1`?`${r}:${t.port}`:t.host}catch{return window.location.host}return window.location.host}function t(e){if(e&&!e.startsWith(`/`))try{return(new URL(e).pathname.split(`/api/conversations`)[0]||``).replace(/\/$/,``)}catch{return``}return``}function n(n){let
|
|
1
|
+
require(`../_virtual/_rolldown/runtime.cjs`);function e(e){if(e&&!e.startsWith(`/`))try{let t=new URL(e),n=t.hostname,r=window.location.hostname??window.location.host?.split(`:`)[0];return r&&(n===`localhost`||n===`127.0.0.1`)&&r!==`localhost`&&r!==`127.0.0.1`?`${r}:${t.port}`:t.host}catch{return window.location.host}return window.location.host}function t(e){if(e&&!e.startsWith(`/`))try{return(new URL(e).pathname.split(`/api/conversations`)[0]||``).replace(/\/$/,``)}catch{return``}return``}function n(n){let i=e(n),a=t(n),o=window.location.protocol===`https:`,s=r(n)===`https:`;return`${o||s?`https:`:`http:`}//${i}${a}`}function r(e){if(!e||e.startsWith(`/`))return null;try{return new URL(e).protocol}catch{return null}}function i(n,i){let a=e(n),o=t(n),s=window.location.protocol===`https:`,c=r(n)===`https:`,l=`${s||c?`wss:`:`ws:`}//${a}${o}/sockets/bash-events`;return i?`${l}?session_api_key=${encodeURIComponent(i)}`:l}function a(n,i){if(!n)return null;let a=e(i),o=t(i),s=window.location.protocol===`https:`,c=r(i)===`https:`;return`${s||c?`wss:`:`ws:`}//${a}${o}/sockets/events/${n}`}exports.buildBashWebSocketUrl=i,exports.buildHttpBaseUrl=n,exports.buildWebSocketUrl=a;
|
|
2
2
|
//# sourceMappingURL=websocket-url.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-url.cjs","names":[],"sources":["../../src/utils/websocket-url.ts"],"sourcesContent":["/**\n * Extracts the base host from conversation URL\n * @param conversationUrl The conversation URL containing host/port (e.g., \"http://localhost:3000/api/conversations/123\")\n * @returns Base host (e.g., \"localhost:3000\") or window.location.host as fallback\n */\nfunction extractBaseHost(conversationUrl: string | null | undefined): string {\n if (conversationUrl && !conversationUrl.startsWith(\"/\")) {\n try {\n const url = new URL(conversationUrl);\n // If the conversation URL points to localhost but we're accessing from external,\n // use the browser's hostname with the conversation URL's port\n const urlHostname = url.hostname;\n const browserHostname =\n window.location.hostname ?? window.location.host?.split(\":\")[0];\n if (\n browserHostname &&\n (urlHostname === \"localhost\" || urlHostname === \"127.0.0.1\") &&\n browserHostname !== \"localhost\" &&\n browserHostname !== \"127.0.0.1\"\n ) {\n return `${browserHostname}:${url.port}`;\n }\n return url.host; // e.g., \"localhost:3000\"\n } catch {\n return window.location.host;\n }\n }\n return window.location.host;\n}\n\n/**\n * Extracts the path prefix from conversation URL (everything before /api/conversations)\n * This is needed for proxy deployments where agent-servers are accessed via paths like /runtime/{port}/\n * @param conversationUrl The conversation URL (e.g., \"http://localhost:3000/runtime/55313/api/conversations/123\")\n * @returns Path prefix without trailing slash (e.g., \"/runtime/55313\") or empty string\n */\nfunction extractPathPrefix(conversationUrl: string | null | undefined): string {\n if (conversationUrl && !conversationUrl.startsWith(\"/\")) {\n try {\n const url = new URL(conversationUrl);\n const pathBeforeApi = url.pathname.split(\"/api/conversations\")[0] || \"\";\n return pathBeforeApi.replace(/\\/$/, \"\"); // Remove trailing slash\n } catch {\n return \"\";\n }\n }\n return \"\";\n}\n\n/**\n * Builds the HTTP base URL for V1 API calls\n * @param conversationUrl The conversation URL containing host/port\n * @returns HTTP base URL (e.g., \"http://localhost:3000\" or \"http://localhost:3000/runtime/55313\")\n */\nexport function buildHttpBaseUrl(\n conversationUrl: string | null | undefined,\n): string {\n const baseHost = extractBaseHost(conversationUrl);\n const pathPrefix = extractPathPrefix(conversationUrl);\n const
|
|
1
|
+
{"version":3,"file":"websocket-url.cjs","names":[],"sources":["../../src/utils/websocket-url.ts"],"sourcesContent":["/**\n * Extracts the base host from conversation URL\n * @param conversationUrl The conversation URL containing host/port (e.g., \"http://localhost:3000/api/conversations/123\")\n * @returns Base host (e.g., \"localhost:3000\") or window.location.host as fallback\n */\nfunction extractBaseHost(conversationUrl: string | null | undefined): string {\n if (conversationUrl && !conversationUrl.startsWith(\"/\")) {\n try {\n const url = new URL(conversationUrl);\n // If the conversation URL points to localhost but we're accessing from external,\n // use the browser's hostname with the conversation URL's port\n const urlHostname = url.hostname;\n const browserHostname =\n window.location.hostname ?? window.location.host?.split(\":\")[0];\n if (\n browserHostname &&\n (urlHostname === \"localhost\" || urlHostname === \"127.0.0.1\") &&\n browserHostname !== \"localhost\" &&\n browserHostname !== \"127.0.0.1\"\n ) {\n return `${browserHostname}:${url.port}`;\n }\n return url.host; // e.g., \"localhost:3000\"\n } catch {\n return window.location.host;\n }\n }\n return window.location.host;\n}\n\n/**\n * Extracts the path prefix from conversation URL (everything before /api/conversations)\n * This is needed for proxy deployments where agent-servers are accessed via paths like /runtime/{port}/\n * @param conversationUrl The conversation URL (e.g., \"http://localhost:3000/runtime/55313/api/conversations/123\")\n * @returns Path prefix without trailing slash (e.g., \"/runtime/55313\") or empty string\n */\nfunction extractPathPrefix(conversationUrl: string | null | undefined): string {\n if (conversationUrl && !conversationUrl.startsWith(\"/\")) {\n try {\n const url = new URL(conversationUrl);\n const pathBeforeApi = url.pathname.split(\"/api/conversations\")[0] || \"\";\n return pathBeforeApi.replace(/\\/$/, \"\"); // Remove trailing slash\n } catch {\n return \"\";\n }\n }\n return \"\";\n}\n\n/**\n * Builds the HTTP base URL for V1 API calls\n * @param conversationUrl The conversation URL containing host/port\n * @returns HTTP base URL (e.g., \"http://localhost:3000\" or \"http://localhost:3000/runtime/55313\")\n */\nexport function buildHttpBaseUrl(\n conversationUrl: string | null | undefined,\n): string {\n const baseHost = extractBaseHost(conversationUrl);\n const pathPrefix = extractPathPrefix(conversationUrl);\n const pageIsSecure = window.location.protocol === \"https:\";\n const targetIsSecure =\n getConversationUrlProtocol(conversationUrl) === \"https:\";\n const protocol = pageIsSecure || targetIsSecure ? \"https:\" : \"http:\";\n return `${protocol}//${baseHost}${pathPrefix}`;\n}\n\nfunction getConversationUrlProtocol(\n conversationUrl: string | null | undefined,\n): string | null {\n if (!conversationUrl || conversationUrl.startsWith(\"/\")) {\n return null;\n }\n\n try {\n return new URL(conversationUrl).protocol;\n } catch {\n return null;\n }\n}\n\n/**\n * Builds the WebSocket URL for the agent-server's bash-events endpoint.\n * The URL is derived from the same host and path prefix as the conversation\n * events socket so it works in both direct-connect and reverse-proxy deployments.\n *\n * @param conversationUrl The conversation URL containing host/port\n * @param sessionApiKey Optional session API key (appended as query param)\n * @returns WebSocket URL for the bash-events endpoint\n */\nexport function buildBashWebSocketUrl(\n conversationUrl: string | null | undefined,\n sessionApiKey?: string | null,\n): string {\n const baseHost = extractBaseHost(conversationUrl);\n const pathPrefix = extractPathPrefix(conversationUrl);\n\n const pageIsSecure = window.location.protocol === \"https:\";\n const targetIsSecure =\n getConversationUrlProtocol(conversationUrl) === \"https:\";\n const protocol = pageIsSecure || targetIsSecure ? \"wss:\" : \"ws:\";\n\n const base = `${protocol}//${baseHost}${pathPrefix}/sockets/bash-events`;\n if (sessionApiKey) {\n return `${base}?session_api_key=${encodeURIComponent(sessionApiKey)}`;\n }\n return base;\n}\n\n/**\n * Builds the WebSocket URL for V1 conversations (without query params)\n * @param conversationId The conversation ID\n * @param conversationUrl The conversation URL containing host/port (e.g., \"http://localhost:3000/api/conversations/123\")\n * @returns WebSocket URL or null if inputs are invalid\n */\nexport function buildWebSocketUrl(\n conversationId: string | undefined,\n conversationUrl: string | null | undefined,\n): string | null {\n if (!conversationId) {\n return null;\n }\n\n const baseHost = extractBaseHost(conversationUrl);\n const pathPrefix = extractPathPrefix(conversationUrl);\n\n // Build WebSocket URL: ws://host:port[/path-prefix]/sockets/events/{conversationId}\n // The path prefix (e.g., /runtime/55313) is needed for proxy deployments\n // Note: Query params should be passed via the useWebSocket hook options\n //\n // Protocol selection follows the actual HTTP access path. A page served\n // over HTTPS must use WSS, but an HTTP page that reaches a remote dev ingress\n // over plain HTTP (for example a Tailscale hostname) must use WS; forcing WSS\n // sends a TLS handshake to the HTTP-only ingress and Node reports it as a\n // malformed HTTP method.\n const pageIsSecure = window.location.protocol === \"https:\";\n const targetIsSecure =\n getConversationUrlProtocol(conversationUrl) === \"https:\";\n const protocol = pageIsSecure || targetIsSecure ? \"wss:\" : \"ws:\";\n\n return `${protocol}//${baseHost}${pathPrefix}/sockets/events/${conversationId}`;\n}\n"],"mappings":"6CAKA,SAAS,EAAgB,EAAoD,CAC3E,GAAI,GAAmB,CAAC,EAAgB,WAAW,IAAI,CACrD,GAAI,CACF,IAAM,EAAM,IAAI,IAAI,EAAgB,CAG9B,EAAc,EAAI,SAClB,EACJ,OAAO,SAAS,UAAY,OAAO,SAAS,MAAM,MAAM,IAAI,CAAC,GAS/D,OAPE,IACC,IAAgB,aAAe,IAAgB,cAChD,IAAoB,aACpB,IAAoB,YAEb,GAAG,EAAgB,GAAG,EAAI,OAE5B,EAAI,UACL,CACN,OAAO,OAAO,SAAS,KAG3B,OAAO,OAAO,SAAS,KASzB,SAAS,EAAkB,EAAoD,CAC7E,GAAI,GAAmB,CAAC,EAAgB,WAAW,IAAI,CACrD,GAAI,CAGF,OADsB,IADN,IAAI,EACE,CAAI,SAAS,MAAM,qBAAqB,CAAC,IAAM,IAChD,QAAQ,MAAO,GAAG,MACjC,CACN,MAAO,GAGX,MAAO,GAQT,SAAgB,EACd,EACQ,CACR,IAAM,EAAW,EAAgB,EAAgB,CAC3C,EAAa,EAAkB,EAAgB,CAC/C,EAAe,OAAO,SAAS,WAAa,SAC5C,EACJ,EAA2B,EAAgB,GAAK,SAElD,MAAO,GADU,GAAgB,EAAiB,SAAW,QAC1C,IAAI,IAAW,IAGpC,SAAS,EACP,EACe,CACf,GAAI,CAAC,GAAmB,EAAgB,WAAW,IAAI,CACrD,OAAO,KAGT,GAAI,CACF,OAAO,IAAI,IAAI,EAAgB,CAAC,cAC1B,CACN,OAAO,MAaX,SAAgB,EACd,EACA,EACQ,CACR,IAAM,EAAW,EAAgB,EAAgB,CAC3C,EAAa,EAAkB,EAAgB,CAE/C,EAAe,OAAO,SAAS,WAAa,SAC5C,EACJ,EAA2B,EAAgB,GAAK,SAG5C,EAAO,GAFI,GAAgB,EAAiB,OAAS,MAElC,IAAI,IAAW,EAAW,sBAInD,OAHI,EACK,GAAG,EAAK,mBAAmB,mBAAmB,EAAc,GAE9D,EAST,SAAgB,EACd,EACA,EACe,CACf,GAAI,CAAC,EACH,OAAO,KAGT,IAAM,EAAW,EAAgB,EAAgB,CAC3C,EAAa,EAAkB,EAAgB,CAW/C,EAAe,OAAO,SAAS,WAAa,SAC5C,EACJ,EAA2B,EAAgB,GAAK,SAGlD,MAAO,GAFU,GAAgB,EAAiB,OAAS,MAExC,IAAI,IAAW,EAAW,kBAAkB"}
|
|
@@ -17,8 +17,8 @@ function t(e) {
|
|
|
17
17
|
return "";
|
|
18
18
|
}
|
|
19
19
|
function n(n) {
|
|
20
|
-
let
|
|
21
|
-
return `${
|
|
20
|
+
let i = e(n), a = t(n), o = window.location.protocol === "https:", s = r(n) === "https:";
|
|
21
|
+
return `${o || s ? "https:" : "http:"}//${i}${a}`;
|
|
22
22
|
}
|
|
23
23
|
function r(e) {
|
|
24
24
|
if (!e || e.startsWith("/")) return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket-url.js","names":[],"sources":["../../src/utils/websocket-url.ts"],"sourcesContent":["/**\n * Extracts the base host from conversation URL\n * @param conversationUrl The conversation URL containing host/port (e.g., \"http://localhost:3000/api/conversations/123\")\n * @returns Base host (e.g., \"localhost:3000\") or window.location.host as fallback\n */\nfunction extractBaseHost(conversationUrl: string | null | undefined): string {\n if (conversationUrl && !conversationUrl.startsWith(\"/\")) {\n try {\n const url = new URL(conversationUrl);\n // If the conversation URL points to localhost but we're accessing from external,\n // use the browser's hostname with the conversation URL's port\n const urlHostname = url.hostname;\n const browserHostname =\n window.location.hostname ?? window.location.host?.split(\":\")[0];\n if (\n browserHostname &&\n (urlHostname === \"localhost\" || urlHostname === \"127.0.0.1\") &&\n browserHostname !== \"localhost\" &&\n browserHostname !== \"127.0.0.1\"\n ) {\n return `${browserHostname}:${url.port}`;\n }\n return url.host; // e.g., \"localhost:3000\"\n } catch {\n return window.location.host;\n }\n }\n return window.location.host;\n}\n\n/**\n * Extracts the path prefix from conversation URL (everything before /api/conversations)\n * This is needed for proxy deployments where agent-servers are accessed via paths like /runtime/{port}/\n * @param conversationUrl The conversation URL (e.g., \"http://localhost:3000/runtime/55313/api/conversations/123\")\n * @returns Path prefix without trailing slash (e.g., \"/runtime/55313\") or empty string\n */\nfunction extractPathPrefix(conversationUrl: string | null | undefined): string {\n if (conversationUrl && !conversationUrl.startsWith(\"/\")) {\n try {\n const url = new URL(conversationUrl);\n const pathBeforeApi = url.pathname.split(\"/api/conversations\")[0] || \"\";\n return pathBeforeApi.replace(/\\/$/, \"\"); // Remove trailing slash\n } catch {\n return \"\";\n }\n }\n return \"\";\n}\n\n/**\n * Builds the HTTP base URL for V1 API calls\n * @param conversationUrl The conversation URL containing host/port\n * @returns HTTP base URL (e.g., \"http://localhost:3000\" or \"http://localhost:3000/runtime/55313\")\n */\nexport function buildHttpBaseUrl(\n conversationUrl: string | null | undefined,\n): string {\n const baseHost = extractBaseHost(conversationUrl);\n const pathPrefix = extractPathPrefix(conversationUrl);\n const
|
|
1
|
+
{"version":3,"file":"websocket-url.js","names":[],"sources":["../../src/utils/websocket-url.ts"],"sourcesContent":["/**\n * Extracts the base host from conversation URL\n * @param conversationUrl The conversation URL containing host/port (e.g., \"http://localhost:3000/api/conversations/123\")\n * @returns Base host (e.g., \"localhost:3000\") or window.location.host as fallback\n */\nfunction extractBaseHost(conversationUrl: string | null | undefined): string {\n if (conversationUrl && !conversationUrl.startsWith(\"/\")) {\n try {\n const url = new URL(conversationUrl);\n // If the conversation URL points to localhost but we're accessing from external,\n // use the browser's hostname with the conversation URL's port\n const urlHostname = url.hostname;\n const browserHostname =\n window.location.hostname ?? window.location.host?.split(\":\")[0];\n if (\n browserHostname &&\n (urlHostname === \"localhost\" || urlHostname === \"127.0.0.1\") &&\n browserHostname !== \"localhost\" &&\n browserHostname !== \"127.0.0.1\"\n ) {\n return `${browserHostname}:${url.port}`;\n }\n return url.host; // e.g., \"localhost:3000\"\n } catch {\n return window.location.host;\n }\n }\n return window.location.host;\n}\n\n/**\n * Extracts the path prefix from conversation URL (everything before /api/conversations)\n * This is needed for proxy deployments where agent-servers are accessed via paths like /runtime/{port}/\n * @param conversationUrl The conversation URL (e.g., \"http://localhost:3000/runtime/55313/api/conversations/123\")\n * @returns Path prefix without trailing slash (e.g., \"/runtime/55313\") or empty string\n */\nfunction extractPathPrefix(conversationUrl: string | null | undefined): string {\n if (conversationUrl && !conversationUrl.startsWith(\"/\")) {\n try {\n const url = new URL(conversationUrl);\n const pathBeforeApi = url.pathname.split(\"/api/conversations\")[0] || \"\";\n return pathBeforeApi.replace(/\\/$/, \"\"); // Remove trailing slash\n } catch {\n return \"\";\n }\n }\n return \"\";\n}\n\n/**\n * Builds the HTTP base URL for V1 API calls\n * @param conversationUrl The conversation URL containing host/port\n * @returns HTTP base URL (e.g., \"http://localhost:3000\" or \"http://localhost:3000/runtime/55313\")\n */\nexport function buildHttpBaseUrl(\n conversationUrl: string | null | undefined,\n): string {\n const baseHost = extractBaseHost(conversationUrl);\n const pathPrefix = extractPathPrefix(conversationUrl);\n const pageIsSecure = window.location.protocol === \"https:\";\n const targetIsSecure =\n getConversationUrlProtocol(conversationUrl) === \"https:\";\n const protocol = pageIsSecure || targetIsSecure ? \"https:\" : \"http:\";\n return `${protocol}//${baseHost}${pathPrefix}`;\n}\n\nfunction getConversationUrlProtocol(\n conversationUrl: string | null | undefined,\n): string | null {\n if (!conversationUrl || conversationUrl.startsWith(\"/\")) {\n return null;\n }\n\n try {\n return new URL(conversationUrl).protocol;\n } catch {\n return null;\n }\n}\n\n/**\n * Builds the WebSocket URL for the agent-server's bash-events endpoint.\n * The URL is derived from the same host and path prefix as the conversation\n * events socket so it works in both direct-connect and reverse-proxy deployments.\n *\n * @param conversationUrl The conversation URL containing host/port\n * @param sessionApiKey Optional session API key (appended as query param)\n * @returns WebSocket URL for the bash-events endpoint\n */\nexport function buildBashWebSocketUrl(\n conversationUrl: string | null | undefined,\n sessionApiKey?: string | null,\n): string {\n const baseHost = extractBaseHost(conversationUrl);\n const pathPrefix = extractPathPrefix(conversationUrl);\n\n const pageIsSecure = window.location.protocol === \"https:\";\n const targetIsSecure =\n getConversationUrlProtocol(conversationUrl) === \"https:\";\n const protocol = pageIsSecure || targetIsSecure ? \"wss:\" : \"ws:\";\n\n const base = `${protocol}//${baseHost}${pathPrefix}/sockets/bash-events`;\n if (sessionApiKey) {\n return `${base}?session_api_key=${encodeURIComponent(sessionApiKey)}`;\n }\n return base;\n}\n\n/**\n * Builds the WebSocket URL for V1 conversations (without query params)\n * @param conversationId The conversation ID\n * @param conversationUrl The conversation URL containing host/port (e.g., \"http://localhost:3000/api/conversations/123\")\n * @returns WebSocket URL or null if inputs are invalid\n */\nexport function buildWebSocketUrl(\n conversationId: string | undefined,\n conversationUrl: string | null | undefined,\n): string | null {\n if (!conversationId) {\n return null;\n }\n\n const baseHost = extractBaseHost(conversationUrl);\n const pathPrefix = extractPathPrefix(conversationUrl);\n\n // Build WebSocket URL: ws://host:port[/path-prefix]/sockets/events/{conversationId}\n // The path prefix (e.g., /runtime/55313) is needed for proxy deployments\n // Note: Query params should be passed via the useWebSocket hook options\n //\n // Protocol selection follows the actual HTTP access path. A page served\n // over HTTPS must use WSS, but an HTTP page that reaches a remote dev ingress\n // over plain HTTP (for example a Tailscale hostname) must use WS; forcing WSS\n // sends a TLS handshake to the HTTP-only ingress and Node reports it as a\n // malformed HTTP method.\n const pageIsSecure = window.location.protocol === \"https:\";\n const targetIsSecure =\n getConversationUrlProtocol(conversationUrl) === \"https:\";\n const protocol = pageIsSecure || targetIsSecure ? \"wss:\" : \"ws:\";\n\n return `${protocol}//${baseHost}${pathPrefix}/sockets/events/${conversationId}`;\n}\n"],"mappings":";AAKA,SAAS,EAAgB,GAAoD;AAC3E,KAAI,KAAmB,CAAC,EAAgB,WAAW,IAAI,CACrD,KAAI;EACF,IAAM,IAAM,IAAI,IAAI,EAAgB,EAG9B,IAAc,EAAI,UAClB,IACJ,OAAO,SAAS,YAAY,OAAO,SAAS,MAAM,MAAM,IAAI,CAAC;AAS/D,SAPE,MACC,MAAgB,eAAe,MAAgB,gBAChD,MAAoB,eACpB,MAAoB,cAEb,GAAG,EAAgB,GAAG,EAAI,SAE5B,EAAI;SACL;AACN,SAAO,OAAO,SAAS;;AAG3B,QAAO,OAAO,SAAS;;AASzB,SAAS,EAAkB,GAAoD;AAC7E,KAAI,KAAmB,CAAC,EAAgB,WAAW,IAAI,CACrD,KAAI;AAGF,UADsB,IADN,IAAI,EACE,CAAI,SAAS,MAAM,qBAAqB,CAAC,MAAM,IAChD,QAAQ,OAAO,GAAG;SACjC;AACN,SAAO;;AAGX,QAAO;;AAQT,SAAgB,EACd,GACQ;CACR,IAAM,IAAW,EAAgB,EAAgB,EAC3C,IAAa,EAAkB,EAAgB,EAC/C,IAAe,OAAO,SAAS,aAAa,UAC5C,IACJ,EAA2B,EAAgB,KAAK;AAElD,QAAO,GADU,KAAgB,IAAiB,WAAW,QAC1C,IAAI,IAAW;;AAGpC,SAAS,EACP,GACe;AACf,KAAI,CAAC,KAAmB,EAAgB,WAAW,IAAI,CACrD,QAAO;AAGT,KAAI;AACF,SAAO,IAAI,IAAI,EAAgB,CAAC;SAC1B;AACN,SAAO;;;AAaX,SAAgB,EACd,GACA,GACQ;CACR,IAAM,IAAW,EAAgB,EAAgB,EAC3C,IAAa,EAAkB,EAAgB,EAE/C,IAAe,OAAO,SAAS,aAAa,UAC5C,IACJ,EAA2B,EAAgB,KAAK,UAG5C,IAAO,GAFI,KAAgB,IAAiB,SAAS,MAElC,IAAI,IAAW,EAAW;AAInD,QAHI,IACK,GAAG,EAAK,mBAAmB,mBAAmB,EAAc,KAE9D;;AAST,SAAgB,EACd,GACA,GACe;AACf,KAAI,CAAC,EACH,QAAO;CAGT,IAAM,IAAW,EAAgB,EAAgB,EAC3C,IAAa,EAAkB,EAAgB,EAW/C,IAAe,OAAO,SAAS,aAAa,UAC5C,IACJ,EAA2B,EAAgB,KAAK;AAGlD,QAAO,GAFU,KAAgB,IAAiB,SAAS,MAExC,IAAI,IAAW,EAAW,kBAAkB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openhands/agent-canvas",
|
|
3
|
-
"version": "1.0.0-rc.
|
|
3
|
+
"version": "1.0.0-rc.9",
|
|
4
4
|
"description": "Agent Canvas UI for OpenHands - run AI coding agents with a visual interface",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"private": false,
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"@heroui/react": "2.8.10",
|
|
24
24
|
"@microlink/react-json-view": "1.31.20",
|
|
25
25
|
"@monaco-editor/react": "4.7.0",
|
|
26
|
-
"@openhands/extensions": "0.4.
|
|
26
|
+
"@openhands/extensions": "0.4.1",
|
|
27
27
|
"@openhands/typescript-client": "1.24.3",
|
|
28
28
|
"@react-router/node": "7.17.0",
|
|
29
29
|
"@react-router/serve": "7.17.0",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
*
|
|
20
20
|
* Usage:
|
|
21
21
|
* node scripts/check-sdk-version-sync.mjs
|
|
22
|
-
* EXPECTED_SDK_VERSION=1.
|
|
22
|
+
* EXPECTED_SDK_VERSION=1.28.1 node scripts/check-sdk-version-sync.mjs
|
|
23
23
|
* node scripts/check-sdk-version-sync.mjs --check-pypi
|
|
24
24
|
*
|
|
25
25
|
* Environment variables:
|
|
@@ -79,7 +79,7 @@ Triggering from other repos:
|
|
|
79
79
|
-H "Authorization: token \$GITHUB_TOKEN" \\
|
|
80
80
|
-H "Accept: application/vnd.github.v3+json" \\
|
|
81
81
|
https://api.github.com/repos/OpenHands/agent-canvas/dispatches \\
|
|
82
|
-
-d '{"event_type": "sdk-version-check", "client_payload": {"version": "1.
|
|
82
|
+
-d '{"event_type": "sdk-version-check", "client_payload": {"version": "1.28.1"}}'
|
|
83
83
|
`);
|
|
84
84
|
process.exit(0);
|
|
85
85
|
}
|
|
@@ -268,9 +268,9 @@ async function fetchPyPIDependencies(packageName, version) {
|
|
|
268
268
|
* Parse PyPI requires_dist array and extract SDK package versions
|
|
269
269
|
*
|
|
270
270
|
* PyPI returns dependencies in PEP 508 format like:
|
|
271
|
-
* "openhands-sdk>=1.
|
|
272
|
-
* "openhands-tools==1.
|
|
273
|
-
* "openhands-workspace (>=1.
|
|
271
|
+
* "openhands-sdk>=1.28.1,<2.0.0"
|
|
272
|
+
* "openhands-tools==1.28.1"
|
|
273
|
+
* "openhands-workspace (>=1.28.1)"
|
|
274
274
|
*/
|
|
275
275
|
function parseSdkVersionsFromRequiresDist(requiresDist) {
|
|
276
276
|
const versions = {};
|
|
@@ -284,7 +284,7 @@ function parseSdkVersionsFromRequiresDist(requiresDist) {
|
|
|
284
284
|
}
|
|
285
285
|
|
|
286
286
|
// Extract the version number - look for patterns like:
|
|
287
|
-
// ">=1.
|
|
287
|
+
// ">=1.28.1", "==1.28.1", "(>=1.28.1)", "~=1.28.1"
|
|
288
288
|
// After the package name and before any comma or closing paren
|
|
289
289
|
const versionPattern = /[><=~!]+\s*([0-9]+(?:\.[0-9]+)*)/;
|
|
290
290
|
const match = dep.match(versionPattern);
|
|
@@ -3,86 +3,176 @@
|
|
|
3
3
|
/**
|
|
4
4
|
* Pre-commit hook script to check for translation completeness
|
|
5
5
|
* This script ensures that all translation keys have entries for all supported languages
|
|
6
|
+
* and that values are actually translated rather than English copied to every language.
|
|
6
7
|
*/
|
|
7
8
|
|
|
8
9
|
const fs = require('fs');
|
|
9
10
|
const path = require('path');
|
|
10
11
|
|
|
11
|
-
//
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
// Keys whose value is intentionally identical in every language (brand names,
|
|
13
|
+
// protocol/technical terms, placeholder-only format strings). Add a key here
|
|
14
|
+
// only when the English value is genuinely correct for all languages.
|
|
15
|
+
const IDENTICAL_VALUE_ALLOWLIST = new Set([
|
|
16
|
+
'ACTION_MESSAGE$ACP_TOOL',
|
|
17
|
+
'API$TAVILY_KEY_EXAMPLE',
|
|
18
|
+
'API$TVLY_KEY_EXAMPLE',
|
|
19
|
+
'AUTOMATIONS$DOWNLOAD_TARBALL',
|
|
20
|
+
'BACKEND$CLOUD_TITLE',
|
|
21
|
+
'BACKEND$VERSION_LABEL',
|
|
22
|
+
'BRANDING$OPENHANDS',
|
|
23
|
+
'CONVERSATION$ACP_AGENT_GENERIC',
|
|
24
|
+
'CONVERSATION$BUDGET_USAGE_FORMAT',
|
|
25
|
+
'FILES$VSCODE',
|
|
26
|
+
'GITHUB$AUTH_SCOPE',
|
|
27
|
+
'LAUNCH$PLUGIN_PATH',
|
|
28
|
+
'LAUNCH$PLUGIN_REF',
|
|
29
|
+
'SCHEMA$LLM$SECTION_LABEL',
|
|
30
|
+
'SCHEMA$LLM$TOP_K$LABEL',
|
|
31
|
+
'SCHEMA$LLM$TOP_P$LABEL',
|
|
32
|
+
'SCHEMA$SECURITY_ANALYZER$CHOICE$LLM',
|
|
33
|
+
'SCHEMA$VERIFICATION$SECURITY_ANALYZER$CHOICE$LLM',
|
|
34
|
+
'SETTINGS$AGENT_SERVER_URL_PLACEHOLDER',
|
|
35
|
+
'SETTINGS$AGENT_TYPE_OPENHANDS',
|
|
36
|
+
'SETTINGS$AZURE_DEVOPS',
|
|
37
|
+
'SETTINGS$GITHUB',
|
|
38
|
+
'SETTINGS$GITLAB',
|
|
39
|
+
'SETTINGS$MCP_DEFAULT_CONFIG',
|
|
40
|
+
'SETTINGS$MCP_SERVER_TYPE_SHTTP',
|
|
41
|
+
'SETTINGS$MCP_SERVER_TYPE_SSE',
|
|
42
|
+
'SETTINGS$MCP_SERVER_TYPE_STDIO',
|
|
43
|
+
'SETTINGS$NAV_LLM',
|
|
44
|
+
'SETTINGS$SKILLS_PILLS_MORE',
|
|
45
|
+
'SETTINGS$SKILLS_VERSION',
|
|
46
|
+
'SETTINGS$SLACK',
|
|
47
|
+
'VSCODE$TITLE',
|
|
48
|
+
'WORKSPACE$JUPYTER_TAB_LABEL',
|
|
49
|
+
]);
|
|
50
|
+
|
|
51
|
+
// Extract the language codes from the AvailableLanguages array in the i18n index file
|
|
52
|
+
function getSupportedLanguageCodes() {
|
|
53
|
+
const i18nIndexPath = path.join(__dirname, '../src/i18n/index.ts');
|
|
54
|
+
const i18nIndexContent = fs.readFileSync(i18nIndexPath, 'utf8');
|
|
55
|
+
|
|
56
|
+
const languageCodesRegex = /\{ label: "[^"]+", value: "([^"]+)" \}/g;
|
|
57
|
+
const supportedLanguageCodes = [];
|
|
58
|
+
let match;
|
|
59
|
+
|
|
60
|
+
while ((match = languageCodesRegex.exec(i18nIndexContent)) !== null) {
|
|
61
|
+
supportedLanguageCodes.push(match[1]);
|
|
62
|
+
}
|
|
14
63
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
const i18nIndexContent = fs.readFileSync(i18nIndexPath, 'utf8');
|
|
64
|
+
return supportedLanguageCodes;
|
|
65
|
+
}
|
|
18
66
|
|
|
19
|
-
//
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
67
|
+
// Check each translation key for missing languages, extra languages, and
|
|
68
|
+
// untranslated (English-copied) values
|
|
69
|
+
function checkTranslations(translationJson, supportedLanguageCodes) {
|
|
70
|
+
const missingTranslations = {};
|
|
71
|
+
const extraLanguages = {};
|
|
72
|
+
const untranslatedKeys = {};
|
|
23
73
|
|
|
24
|
-
|
|
25
|
-
|
|
74
|
+
const nonEnglishLanguageCodes = supportedLanguageCodes.filter(
|
|
75
|
+
(langCode) => langCode !== 'en'
|
|
76
|
+
);
|
|
77
|
+
|
|
78
|
+
Object.entries(translationJson).forEach(([key, translations]) => {
|
|
79
|
+
// Get the languages available for this key
|
|
80
|
+
const availableLanguages = Object.keys(translations);
|
|
81
|
+
|
|
82
|
+
// Find missing languages for this key
|
|
83
|
+
const missing = supportedLanguageCodes.filter(
|
|
84
|
+
(langCode) => !availableLanguages.includes(langCode)
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
if (missing.length > 0) {
|
|
88
|
+
missingTranslations[key] = missing;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// Find extra languages for this key
|
|
92
|
+
const extra = availableLanguages.filter(
|
|
93
|
+
(langCode) => !supportedLanguageCodes.includes(langCode)
|
|
94
|
+
);
|
|
95
|
+
|
|
96
|
+
if (extra.length > 0) {
|
|
97
|
+
extraLanguages[key] = extra;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// Flag keys where every non-English value is the English value copied
|
|
101
|
+
// verbatim — a strong signal the key was never translated. Keys whose value
|
|
102
|
+
// is legitimately identical everywhere belong in IDENTICAL_VALUE_ALLOWLIST.
|
|
103
|
+
if (
|
|
104
|
+
!IDENTICAL_VALUE_ALLOWLIST.has(key) &&
|
|
105
|
+
translations.en !== undefined &&
|
|
106
|
+
nonEnglishLanguageCodes.every(
|
|
107
|
+
(langCode) => translations[langCode] === translations.en
|
|
108
|
+
)
|
|
109
|
+
) {
|
|
110
|
+
untranslatedKeys[key] = translations.en;
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
return { missingTranslations, extraLanguages, untranslatedKeys };
|
|
26
115
|
}
|
|
27
116
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
117
|
+
module.exports = {
|
|
118
|
+
IDENTICAL_VALUE_ALLOWLIST,
|
|
119
|
+
getSupportedLanguageCodes,
|
|
120
|
+
checkTranslations,
|
|
121
|
+
};
|
|
32
122
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
const
|
|
123
|
+
if (require.main === module) {
|
|
124
|
+
// Load the translation file
|
|
125
|
+
const translationJsonPath = path.join(__dirname, '../src/i18n/translation.json');
|
|
126
|
+
const translationJson = require(translationJsonPath);
|
|
37
127
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
(langCode) => !availableLanguages.includes(langCode)
|
|
41
|
-
);
|
|
128
|
+
const { missingTranslations, extraLanguages, untranslatedKeys } =
|
|
129
|
+
checkTranslations(translationJson, getSupportedLanguageCodes());
|
|
42
130
|
|
|
43
|
-
|
|
44
|
-
missingTranslations
|
|
45
|
-
|
|
46
|
-
|
|
131
|
+
const hasErrors =
|
|
132
|
+
Object.keys(missingTranslations).length > 0 ||
|
|
133
|
+
Object.keys(extraLanguages).length > 0 ||
|
|
134
|
+
Object.keys(untranslatedKeys).length > 0;
|
|
47
135
|
|
|
48
|
-
//
|
|
49
|
-
|
|
50
|
-
(
|
|
51
|
-
|
|
136
|
+
// Generate detailed error message if there are missing translations
|
|
137
|
+
if (Object.keys(missingTranslations).length > 0) {
|
|
138
|
+
console.error('\x1b[31m%s\x1b[0m', 'ERROR: Missing translations detected');
|
|
139
|
+
console.error(`Found ${Object.keys(missingTranslations).length} translation keys with missing languages:`);
|
|
52
140
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
141
|
+
Object.entries(missingTranslations).forEach(([key, langs]) => {
|
|
142
|
+
console.error(`- Key "${key}" is missing translations for: ${langs.join(', ')}`);
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
console.error('\nPlease add the missing translations before committing.');
|
|
56
146
|
}
|
|
57
|
-
});
|
|
58
147
|
|
|
59
|
-
// Generate detailed error message if there are
|
|
60
|
-
if (Object.keys(
|
|
61
|
-
|
|
62
|
-
|
|
148
|
+
// Generate detailed error message if there are extra languages
|
|
149
|
+
if (Object.keys(extraLanguages).length > 0) {
|
|
150
|
+
console.error('\x1b[31m%s\x1b[0m', 'ERROR: Extra languages detected');
|
|
151
|
+
console.error(`Found ${Object.keys(extraLanguages).length} translation keys with extra languages not in AvailableLanguages:`);
|
|
63
152
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
153
|
+
Object.entries(extraLanguages).forEach(([key, langs]) => {
|
|
154
|
+
console.error(`- Key "${key}" has translations for unsupported languages: ${langs.join(', ')}`);
|
|
155
|
+
});
|
|
67
156
|
|
|
68
|
-
|
|
69
|
-
}
|
|
157
|
+
console.error('\nPlease remove the extra languages before committing.');
|
|
158
|
+
}
|
|
70
159
|
|
|
71
|
-
// Generate detailed error message if there are
|
|
72
|
-
if (Object.keys(
|
|
73
|
-
|
|
74
|
-
|
|
160
|
+
// Generate detailed error message if there are untranslated keys
|
|
161
|
+
if (Object.keys(untranslatedKeys).length > 0) {
|
|
162
|
+
console.error('\x1b[31m%s\x1b[0m', 'ERROR: Untranslated keys detected');
|
|
163
|
+
console.error(`Found ${Object.keys(untranslatedKeys).length} translation keys where the English value is copied to every language:`);
|
|
75
164
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
165
|
+
Object.entries(untranslatedKeys).forEach(([key, value]) => {
|
|
166
|
+
console.error(`- Key "${key}" has the same value ("${value}") for all languages`);
|
|
167
|
+
});
|
|
79
168
|
|
|
80
|
-
|
|
81
|
-
}
|
|
169
|
+
console.error('\nPlease translate the values before committing. If a value is intentionally identical in every language (brand name, technical term, format string), add the key to IDENTICAL_VALUE_ALLOWLIST in scripts/check-translation-completeness.cjs.');
|
|
170
|
+
}
|
|
82
171
|
|
|
83
|
-
// Exit with error code if there are issues
|
|
84
|
-
if (hasErrors) {
|
|
85
|
-
|
|
86
|
-
} else {
|
|
87
|
-
|
|
172
|
+
// Exit with error code if there are issues
|
|
173
|
+
if (hasErrors) {
|
|
174
|
+
process.exit(1);
|
|
175
|
+
} else {
|
|
176
|
+
console.log('\x1b[32m%s\x1b[0m', 'All translation keys have complete language coverage!');
|
|
177
|
+
}
|
|
88
178
|
}
|
package/scripts/dev-safe.mjs
CHANGED
|
@@ -394,7 +394,7 @@ export function validateFrontendDependencies(
|
|
|
394
394
|
* edits are picked up without a manual reinstall. The agent-server itself
|
|
395
395
|
* is rebuilt from local source on each invocation (--reinstall).
|
|
396
396
|
* - OH_AGENT_SERVER_GIT_REF: Git commit SHA or branch name
|
|
397
|
-
* - OH_AGENT_SERVER_VERSION: Specific PyPI version (e.g., "1.
|
|
397
|
+
* - OH_AGENT_SERVER_VERSION: Specific PyPI version (e.g., "1.28.1")
|
|
398
398
|
*
|
|
399
399
|
* If none are set, defaults to the released version specified by
|
|
400
400
|
* DEFAULT_AGENT_SERVER_VERSION. Set OH_AGENT_SERVER_GIT_REF to use a
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-BFRubm34.js";import{o as t}from"./declaration-BDfM67Kl.js";import{n}from"./backend-form-modal-DY3My0us.js";var r=e({AddBackendModal:()=>a}),i=t();function a({onClose:e}){return(0,i.jsx)(n,{mode:`add`,onClose:e})}export{r as n,a as t};
|