@openhands/agent-canvas 1.5.1 → 1.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/README.windows.md +2 -2
- package/build/assets/{Trans-DqF_OEZB.js → Trans-52HCczKK.js} +1 -1
- package/build/assets/{acp-providers-DerAmTyY.js → acp-providers-xACMK9ZP.js} +1 -1
- package/build/assets/{active-backend-context-B8rMv0X9.js → active-backend-context-Cd1qcZsb.js} +1 -1
- package/build/assets/{add-backend-modal-CxC7BNEc.js → add-backend-modal-5chsfln3.js} +1 -1
- package/build/assets/{agent-profiles-settings-BJb8YXR1.js → agent-profiles-settings-BWK4H3kR.js} +1 -1
- package/build/assets/agent-server-compatibility-DMY0CihN.js +1 -0
- package/build/assets/agent-server-conversation-service.api-CI5-xmIX.js +41 -0
- package/build/assets/agent-settings-CMd8-O4f.js +2 -0
- package/build/assets/agent-settings-CdrhQJXX.js +1 -0
- package/build/assets/{alert-banner-Dh51WURQ.js → alert-banner-CLfWuIAX.js} +1 -1
- package/build/assets/api-key-entry-screen-Cc3aC7DZ.js +1 -0
- package/build/assets/app-settings-B-DQcBoB.js +1 -0
- package/build/assets/{automation-detail-CZsu2CoM.js → automation-detail-BgxBIpyK.js} +2 -2
- package/build/assets/automation-export-Dbur8OHa.js +2 -0
- package/build/assets/automations-list-BWfjizlp.js +1 -0
- package/build/assets/{back-nav-button-DVknCcSP.js → back-nav-button-CaKvsD1E.js} +1 -1
- package/build/assets/backend-form-modal-YcfpuBZo.js +1 -0
- package/build/assets/{backend-synced-settings-badge-BSfN0AZA.js → backend-synced-settings-badge-BellMmgC.js} +1 -1
- package/build/assets/{base-modal-CIF_785P.js → base-modal-Cw7enAHz.js} +1 -1
- package/build/assets/{brand-button-B1izLAdR.js → brand-button-BulEFHr3.js} +1 -1
- package/build/assets/{browser-DKaeq_sT.js → browser-DfVgUREb.js} +2 -2
- package/build/assets/browser-store-CBqI3tNR.js +1 -0
- package/build/assets/{browser-tab-qb_ftCxW.js → browser-tab-CmIKQB7S.js} +1 -1
- package/build/assets/chat-send-button-BchSSwuD.js +1 -0
- package/build/assets/circle-check-BXbQ5nEH.js +1 -0
- package/build/assets/{circle-plus-check-toggle-DoFIjVE0.js → circle-plus-check-toggle-BhpPjkh9.js} +1 -1
- package/build/assets/client-source-DAUgyJsi.js +1 -0
- package/build/assets/cloud-funnel-analytics-B5OeWh4y.js +1 -0
- package/build/assets/{color-themes-CHizm1xF.js → color-themes-QKMSVfDU.js} +1 -1
- package/build/assets/{combobox-caret-CxZpqoSR.js → combobox-caret-kNZtp53R.js} +1 -1
- package/build/assets/{command-menu-oTvKDU3Y.js → command-menu-tUsn23zy.js} +1 -1
- package/build/assets/{command-store-D8J5LMW1.js → command-store-B0hrIWMN.js} +1 -1
- package/build/assets/{condenser-settings-BGlWn93P.js → condenser-settings-BBizzfIH.js} +1 -1
- package/build/assets/{confirmation-modal-DGBWM2Ls.js → confirmation-modal-108xng7X.js} +1 -1
- package/build/assets/{context-menu-list-item-6psNyl7X.js → context-menu-list-item-BbKfFuN1.js} +1 -1
- package/build/assets/conversation-CTzSrLMq.js +1 -0
- package/build/assets/conversation-CgcXNb-Z.js +90 -0
- package/build/assets/conversation-panel-bscjGQda.js +1 -0
- package/build/assets/{conversation-service.api-_f9GlIEi.js → conversation-service.api-DbBvscJA.js} +1 -1
- package/build/assets/conversation-state-store-C5GagZHT.js +1 -0
- package/build/assets/{conversation-store-LptbOvKa.js → conversation-store-CyVqoa0d.js} +1 -1
- package/build/assets/{conversation-tab-empty-state-CNUmIms2.js → conversation-tab-empty-state-2KYlk5Bh.js} +1 -1
- package/build/assets/{copy-to-clipboard-button-CFzH_NOX.js → copy-to-clipboard-button-C54YRPMg.js} +1 -1
- package/build/assets/declaration-_yumYLEx.js +1 -0
- package/build/assets/{device-verify-WBSjJBLH.js → device-verify-D6FW_KZq.js} +1 -1
- package/build/assets/{dropdown-classes-D3wMJlXT.js → dropdown-classes-9uONlOg1.js} +1 -1
- package/build/assets/{ellipsis-button-CbNnHlIq.js → ellipsis-button-CoaUrKmQ.js} +1 -1
- package/build/assets/{entry.client-DNlPGxsu.js → entry.client-BJSVzw7V.js} +2 -2
- package/build/assets/{enum-filter-dropdown-JLYv1t8L.js → enum-filter-dropdown-qQzyjk_q.js} +1 -1
- package/build/assets/{environment-switch-overlay-B1PFO8P8.js → environment-switch-overlay-XRWCClLu.js} +1 -1
- package/build/assets/extensions-hub-DUp9sWQY.js +1 -0
- package/build/assets/extensions-navigation-DmkftjAx.js +1 -0
- package/build/assets/file-tUAzhmJ3.js +1 -0
- package/build/assets/files-tab-GV5hwiIM.js +1 -0
- package/build/assets/files-tab-store-DehyITNC.js +1 -0
- package/build/assets/{form-control-classes-CbdN5aO3.js → form-control-classes-BPUnoYyg.js} +1 -1
- package/build/assets/git-provider-icon-DDkru3b_.js +1 -0
- package/build/assets/highlighted-source-view-CYkPZUxr.js +1 -0
- package/build/assets/home-C53WekZ2.js +1 -0
- package/build/assets/home-EAwq8ah2.js +1 -0
- package/build/assets/index-home-kBdZGKtu.js +1 -0
- package/build/assets/install-server-modal-DYk4VP3-.js +1 -0
- package/build/assets/{launch-CAGavYl-.js → launch-CIecOy_y.js} +1 -1
- package/build/assets/lesson-plan-BSEUwflx.js +4 -0
- package/build/assets/llm-not-configured-banner-C8uv1PHT.js +27 -0
- package/build/assets/llm-settings-0Bb97NCk.js +1 -0
- package/build/assets/llm-settings-D4toJ90k.js +1 -0
- package/build/assets/{llm-subscription-service-Casyzgn1.js → llm-subscription-service-BPRw3u3H.js} +1 -1
- package/build/assets/{loading-spinner-BcdnT0mN.js → loading-spinner-BCInDEXB.js} +1 -1
- package/build/assets/manage-backends-modal-Bon32JYr.js +1 -0
- package/build/assets/manifest-ec000ae3.js +1 -0
- package/build/assets/markdown-renderer-BlaJOAI2.js +2 -0
- package/build/assets/mcp-CFIpOkn2.js +9 -0
- package/build/assets/messages-eRPeR4pW.js +40 -0
- package/build/assets/{modal-body-Cc2zp0xb.js → modal-body-Bg9UCeoV.js} +1 -1
- package/build/assets/{modal-classes-3qT9Ap7Q.js → modal-classes-H1KbJkeC.js} +1 -1
- package/build/assets/{modal-close-button-BcIBUdSq.js → modal-close-button-BMLYvo0C.js} +1 -1
- package/build/assets/{model-selector-DJrMrFAr.js → model-selector-BqX2RvEr.js} +1 -1
- package/build/assets/{navigation-link-D8hfwvxI.js → navigation-link-DoJzTCEz.js} +1 -1
- package/build/assets/onboarding-3KO4qE6R.js +1 -0
- package/build/assets/onboarding-modal-D4vqkJeT.js +1 -0
- package/build/assets/{organization-service.api-vrRNwOma.js → organization-service.api-CvfQugOt.js} +1 -1
- package/build/assets/{path-utils-PNfCKQDV.js → path-utils-DRgexxnX.js} +1 -1
- package/build/assets/{plan-components-BdZXPyZU.js → plan-components-qkMiGs_-.js} +1 -1
- package/build/assets/{planner-tab-ByOw1he8.js → planner-tab-ZrjiirRr.js} +1 -1
- package/build/assets/{plugins-management-service-B75jyC56.js → plugins-management-service-9qT-r_37.js} +1 -1
- package/build/assets/plus-CzE1b-wl.js +1 -0
- package/build/assets/{profiles-service.api-BQTklD5D.js → profiles-service.api-CRVlrQpT.js} +1 -1
- package/build/assets/{providers-DfTB2gPd.js → providers-C2DFGBrf.js} +1 -1
- package/build/assets/{proxy-B3tCGf0X.js → proxy-DnnDqkwn.js} +1 -1
- package/build/assets/puzzle-IHQnD54C.js +1 -0
- package/build/assets/recommended-automations-launcher-B97vgHuN.js +58 -0
- package/build/assets/refresh-cw-DxbAs3SK.js +1 -0
- package/build/assets/root-BbONavTg.css +1 -0
- package/build/assets/root-D01rpqZU.js +2 -0
- package/build/assets/root-layout-BiHbCIkS.js +2 -0
- package/build/assets/{runtime-waiting-state-CnyVhX4T.js → runtime-waiting-state-CbUV9txX.js} +1 -1
- package/build/assets/{schema-field-CUwk4wrQ.js → schema-field-B9-9Ta9u.js} +1 -1
- package/build/assets/sdk-section-page-DG1s25Pr.js +1 -0
- package/build/assets/{sdk-settings-schema-CLR01YIK.js → sdk-settings-schema-B42JFr5Y.js} +1 -1
- package/build/assets/{secrets-service-CvyPWJhg.js → secrets-service-DvyS6-mV.js} +1 -1
- package/build/assets/secrets-settings-CeSq6cQw.js +1 -0
- package/build/assets/{segmented-toggle-kzwZkLaj.js → segmented-toggle-DRVJBNy0.js} +1 -1
- package/build/assets/settings-Dzo0dJKM.js +1 -0
- package/build/assets/{settings-mQUckT0g.js → settings-HcwfqMjJ.js} +1 -1
- package/build/assets/{settings-dropdown-input-Dhx9ErGd.js → settings-dropdown-input-B6RL_mt0.js} +1 -1
- package/build/assets/settings-index-uAKHyijw.js +1 -0
- package/build/assets/{settings-input-BsgQWS5R.js → settings-input-ZoaAPNQh.js} +1 -1
- package/build/assets/{settings-list-classes-DSJJX99U.js → settings-list-classes-Dr8LgITi.js} +1 -1
- package/build/assets/settings-modal-BVX2G_IT.js +1 -0
- package/build/assets/{settings-service.api-DXk5TdeJ.js → settings-service.api-BY7ncxIz.js} +1 -1
- package/build/assets/{settings-switch-Bes8dIlV.js → settings-switch-DUlGnP0B.js} +1 -1
- package/build/assets/{settings-utils-DzCVfiR3.js → settings-utils-kWEEvcdv.js} +1 -1
- package/build/assets/shared-conversation-CV4Rtdz2.js +1 -0
- package/build/assets/{sidebar-layout-Bm7pa3Vk.js → sidebar-layout-BhGooCga.js} +1 -1
- package/build/assets/sidebar-mobile-menu-toggle-BntOJphE.js +1 -0
- package/build/assets/{sidebar-nav-link-CHqyFXwV.js → sidebar-nav-link-DkA1XWV8.js} +1 -1
- package/build/assets/{sidebar-store-uiUXBU1N.js → sidebar-store-CF3b12-m.js} +1 -1
- package/build/assets/{skill-card-pill-row-BPYKQ3IN.js → skill-card-pill-row-_gWe1Tws.js} +1 -1
- package/build/assets/skill-icon-badge-C-zbaXbD.js +1 -0
- package/build/assets/skills-plugins-BwoXKtrR.js +1 -0
- package/build/assets/skills-settings-Crq-fZSt.js +2 -0
- package/build/assets/{styled-tooltip-B14i_Uac.js → styled-tooltip-CdnCJ67u.js} +1 -1
- package/build/assets/syntax-highlighter-CZK2ab-O.js +1 -0
- package/build/assets/{task-list-tab-DyfgG4MC.js → task-list-tab-CONOO9iI.js} +1 -1
- package/build/assets/telemetry-CC32dJYW.js +2 -0
- package/build/assets/{terminal-DRXt2Lr4.js → terminal-CTkDpIU-.js} +1 -1
- package/build/assets/{toggle-switch-DX_k418f.js → toggle-switch-yVIzmJLM.js} +1 -1
- package/build/assets/{typography-CzfoD9DY.js → typography-BBVEW0un.js} +1 -1
- package/build/assets/{use-acp-credential-form-Bm8qXdlc.js → use-acp-credential-form-CIsp8hJe.js} +1 -1
- package/build/assets/use-activate-agent-profile-BfcTTJJG.js +1 -0
- package/build/assets/{use-active-agent-profile-hI-x-UBa.js → use-active-agent-profile-CCeFtmk9.js} +1 -1
- package/build/assets/{use-active-conversation-2qeez40F.js → use-active-conversation-Badxj8w4.js} +1 -1
- package/build/assets/{use-agent-profiles-0pr5bLS7.js → use-agent-profiles-BSWVN6hH.js} +1 -1
- package/build/assets/{use-agent-state-C6peDXUm.js → use-agent-state-BzRrhoPd.js} +1 -1
- package/build/assets/use-backends-health-BsZikyFW.js +1 -0
- package/build/assets/{use-can-manage-org-profiles-Ck_bsNbH.js → use-can-manage-org-profiles-Do6mYf6P.js} +1 -1
- package/build/assets/{use-cloud-current-user-id-DUCSxNjY.js → use-cloud-current-user-id-Cx3B_0-w.js} +1 -1
- package/build/assets/use-config-D9zUVw5b.js +1 -0
- package/build/assets/{use-create-conversation-r1JHfKO5.js → use-create-conversation-vvl0kvu7.js} +1 -1
- package/build/assets/{use-create-secret-Cf2N11d2.js → use-create-secret-CB7Dvd4s.js} +1 -1
- package/build/assets/use-event-store-BlpSUF7N.js +4 -0
- package/build/assets/{use-handle-plan-click-CsAW3FlH.js → use-handle-plan-click-DDZkew9p.js} +1 -1
- package/build/assets/use-is-creating-conversation-fxSzN778.js +1 -0
- package/build/assets/{use-launch-skill-in-chat-DJWEfVc5.js → use-launch-skill-in-chat-D6_n1fs3.js} +1 -1
- package/build/assets/use-llm-profiles-CNQm7HYS.js +1 -0
- package/build/assets/use-plugins-marketplace-CloojomS.js +1 -0
- package/build/assets/use-runtime-is-ready-Bx_4cfar.js +1 -0
- package/build/assets/{use-save-agent-profile-RqUGqTv6.js → use-save-agent-profile-Bj7N-1jS.js} +1 -1
- package/build/assets/{use-save-settings-Chvzeu2s.js → use-save-settings-BMsb2wk_.js} +1 -1
- package/build/assets/use-settings-B9XEmh7i.js +1 -0
- package/build/assets/use-settings-nav-items-BGfBS0yL.js +16 -0
- package/build/assets/{use-skills-xrVoKYrF.js → use-skills-CSRbvPle.js} +1 -1
- package/build/assets/{use-task-list-CfisapBW.js → use-task-list-CTIVLrQA.js} +1 -1
- package/build/assets/use-tracking-DjdCssvp.js +1 -0
- package/build/assets/{use-user-conversation-CnE4zhOA.js → use-user-conversation-BCpFn-Ei.js} +1 -1
- package/build/assets/{useTranslation-Cbf5AGg_.js → useTranslation-CHm_6BRr.js} +1 -1
- package/build/assets/{utils-DB9LsAzA.js → utils-CrRpzbM2.js} +1 -1
- package/build/assets/vendor-markdown-DzO4uO_0.js +37 -0
- package/build/assets/{vendor~browser-wXQ-WZEC.js → vendor~browser-Byfuq5J-.js} +1 -1
- package/build/assets/{vendor~browser-tab-CsMb-pta.js → vendor~browser-tab-BLk3qxhw.js} +1 -1
- package/build/assets/{vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~dhilvkxv-eGLBu60s.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~dhilvkxv-DTJ_cjR5.js} +2 -2
- package/build/assets/{vendor~files-tab-B-5fBohe.js → vendor~files-tab-XmnauIZI.js} +1 -1
- package/build/assets/{vendor~launch-_Km3J77E.js → vendor~launch-DeC8QhXQ.js} +1 -1
- package/build/assets/{vendor~root-layout~conversation-panel~conversation~shared-conversation-BrguKXCn.js → vendor~root-layout~conversation-panel~conversation~shared-conversation-DDmLzCzm.js} +1 -1
- package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation-YrfJYTQw.js +1 -0
- package/build/assets/{vendor~root-layout~index-home~home~conversation-panel~conversation~launch~skills-settings~a~j2jlu22h-mC0v44WR.js → vendor~root-layout~index-home~home~conversation-panel~conversation~launch~skills-settings~a~j2jlu22h-DoaS51iW.js} +123 -3
- package/build/assets/{vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation~aler~gfu7qdtz-BOKQkbc6.js → vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation~aler~gfu7qdtz-DEYwoy8u.js} +1 -1
- package/build/assets/vendor~root-layout~index-home~home~mcp~automations-list~onboarding-modal-DZHLw5Sr.js +1 -0
- package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~ftka0fnu-cFNmfAE6.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~ftka0fnu-UJ4BNDJP.js} +1 -1
- package/build/assets/{verification-settings-CfkrXoSa.js → verification-settings-uwOfc16F.js} +1 -1
- package/build/index.html +4 -4
- package/build/locales/ar/openhands.json +38 -4
- package/build/locales/ca/openhands.json +38 -4
- package/build/locales/de/openhands.json +38 -4
- package/build/locales/en/openhands.json +38 -4
- package/build/locales/es/openhands.json +38 -4
- package/build/locales/fr/openhands.json +38 -4
- package/build/locales/it/openhands.json +38 -4
- package/build/locales/ja/openhands.json +38 -4
- package/build/locales/ko-KR/openhands.json +38 -4
- package/build/locales/no/openhands.json +38 -4
- package/build/locales/pt/openhands.json +38 -4
- package/build/locales/tr/openhands.json +38 -4
- package/build/locales/uk/openhands.json +38 -4
- package/build/locales/zh-CN/openhands.json +38 -4
- package/build/locales/zh-TW/openhands.json +38 -4
- package/config/defaults.json +7 -3
- package/dist/api/agent-canvas-updates.cjs +2 -0
- package/dist/api/agent-canvas-updates.cjs.map +1 -0
- package/dist/api/agent-canvas-updates.d.ts +7 -0
- package/dist/api/agent-canvas-updates.js +19 -0
- package/dist/api/agent-canvas-updates.js.map +1 -0
- package/dist/api/agent-server-adapter.cjs +1 -1
- package/dist/api/agent-server-adapter.cjs.map +1 -1
- package/dist/api/agent-server-adapter.d.ts +3 -0
- package/dist/api/agent-server-adapter.js +1 -0
- package/dist/api/agent-server-adapter.js.map +1 -1
- package/dist/api/agent-server-compatibility.cjs +1 -1
- package/dist/api/agent-server-compatibility.cjs.map +1 -1
- package/dist/api/agent-server-compatibility.d.ts +5 -0
- package/dist/api/agent-server-compatibility.js +24 -15
- package/dist/api/agent-server-compatibility.js.map +1 -1
- package/dist/api/agent-server-config.cjs +1 -1
- package/dist/api/agent-server-config.cjs.map +1 -1
- package/dist/api/agent-server-config.js +11 -8
- package/dist/api/agent-server-config.js.map +1 -1
- package/dist/api/automation-service/automation-service.api.cjs +2 -0
- package/dist/api/automation-service/automation-service.api.cjs.map +1 -0
- package/dist/api/automation-service/automation-service.api.d.ts +3 -0
- package/dist/api/automation-service/automation-service.api.js +283 -0
- package/dist/api/automation-service/automation-service.api.js.map +1 -0
- package/dist/api/client-source.cjs +1 -1
- package/dist/api/client-source.cjs.map +1 -1
- package/dist/api/client-source.d.ts +3 -0
- package/dist/api/client-source.js +4 -4
- package/dist/api/client-source.js.map +1 -1
- package/dist/api/cloud/settings-service.api.cjs.map +1 -1
- package/dist/api/cloud/settings-service.api.js.map +1 -1
- package/dist/api/conversation-service/agent-server-conversation-service.api.cjs +1 -1
- package/dist/api/conversation-service/agent-server-conversation-service.api.cjs.map +1 -1
- package/dist/api/conversation-service/agent-server-conversation-service.api.js +111 -109
- package/dist/api/conversation-service/agent-server-conversation-service.api.js.map +1 -1
- package/dist/api/mcp-health/mcp-health-store.cjs +2 -0
- package/dist/api/mcp-health/mcp-health-store.cjs.map +1 -0
- package/dist/api/mcp-health/mcp-health-store.d.ts +22 -0
- package/dist/api/mcp-health/mcp-health-store.js +45 -0
- package/dist/api/mcp-health/mcp-health-store.js.map +1 -0
- package/dist/api/mcp-health/probe-mcp-server-health.cjs +2 -0
- package/dist/api/mcp-health/probe-mcp-server-health.cjs.map +1 -0
- package/dist/api/mcp-health/probe-mcp-server-health.d.ts +31 -0
- package/dist/api/mcp-health/probe-mcp-server-health.js +57 -0
- package/dist/api/mcp-health/probe-mcp-server-health.js.map +1 -0
- package/dist/api/mcp-service/mcp-service.api.cjs +1 -1
- package/dist/api/mcp-service/mcp-service.api.cjs.map +1 -1
- package/dist/api/mcp-service/mcp-service.api.js +66 -46
- package/dist/api/mcp-service/mcp-service.api.js.map +1 -1
- package/dist/api/plugins-management-service.cjs.map +1 -1
- package/dist/api/plugins-management-service.d.ts +6 -1
- package/dist/api/plugins-management-service.js.map +1 -1
- package/dist/api/plugins-service.d.ts +30 -2
- package/dist/api/secrets-service.cjs +1 -1
- package/dist/api/secrets-service.cjs.map +1 -1
- package/dist/api/secrets-service.d.ts +6 -6
- package/dist/api/secrets-service.js +8 -3
- package/dist/api/secrets-service.js.map +1 -1
- package/dist/api/settings-service/settings-service.api.cjs +1 -1
- package/dist/api/settings-service/settings-service.api.cjs.map +1 -1
- package/dist/api/settings-service/settings-service.api.d.ts +1 -1
- package/dist/api/settings-service/settings-service.api.js +1 -0
- package/dist/api/settings-service/settings-service.api.js.map +1 -1
- package/dist/components/conversation-events/chat/event-message-components/critic-result-display.cjs +1 -1
- package/dist/components/conversation-events/chat/event-message-components/critic-result-display.js +5 -5
- package/dist/components/features/backends/backend-form-modal.cjs +1 -1
- package/dist/components/features/backends/backend-form-modal.cjs.map +1 -1
- package/dist/components/features/backends/backend-form-modal.d.ts +4 -1
- package/dist/components/features/backends/backend-form-modal.js +15 -16
- package/dist/components/features/backends/backend-form-modal.js.map +1 -1
- package/dist/components/features/backends/backend-selector.cjs +1 -1
- package/dist/components/features/backends/backend-selector.cjs.map +1 -1
- package/dist/components/features/backends/backend-selector.js +103 -102
- package/dist/components/features/backends/backend-selector.js.map +1 -1
- package/dist/components/features/backends/manage-backends-modal.cjs +1 -1
- package/dist/components/features/backends/manage-backends-modal.cjs.map +1 -1
- package/dist/components/features/backends/manage-backends-modal.js +85 -73
- package/dist/components/features/backends/manage-backends-modal.js.map +1 -1
- package/dist/components/features/chat/chat-interface.cjs +2 -2
- package/dist/components/features/chat/chat-interface.cjs.map +1 -1
- package/dist/components/features/chat/chat-interface.js +131 -129
- package/dist/components/features/chat/chat-interface.js.map +1 -1
- package/dist/components/features/chat/confirmation-mode-enabled.cjs +1 -1
- package/dist/components/features/chat/confirmation-mode-enabled.js +4 -4
- package/dist/components/features/chat/skill-install-restart-banner.cjs +2 -0
- package/dist/components/features/chat/skill-install-restart-banner.cjs.map +1 -0
- package/dist/components/features/chat/skill-install-restart-banner.d.ts +11 -0
- package/dist/components/features/chat/skill-install-restart-banner.js +63 -0
- package/dist/components/features/chat/skill-install-restart-banner.js.map +1 -0
- package/dist/components/features/conversation/right-panel-toggle.cjs +1 -1
- package/dist/components/features/conversation/right-panel-toggle.cjs.map +1 -1
- package/dist/components/features/conversation/right-panel-toggle.js +1 -1
- package/dist/components/features/conversation/right-panel-toggle.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-panel.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-panel.js +10 -10
- package/dist/components/features/mcp-page/custom-server-editor.cjs +1 -1
- package/dist/components/features/mcp-page/custom-server-editor.cjs.map +1 -1
- package/dist/components/features/mcp-page/custom-server-editor.js +78 -77
- package/dist/components/features/mcp-page/custom-server-editor.js.map +1 -1
- package/dist/components/features/mcp-page/install-server-modal.cjs +1 -1
- package/dist/components/features/mcp-page/install-server-modal.cjs.map +1 -1
- package/dist/components/features/mcp-page/install-server-modal.d.ts +4 -1
- package/dist/components/features/mcp-page/install-server-modal.js +135 -136
- package/dist/components/features/mcp-page/install-server-modal.js.map +1 -1
- package/dist/components/features/mcp-page/installed-server-card.cjs +1 -1
- package/dist/components/features/mcp-page/installed-server-card.cjs.map +1 -1
- package/dist/components/features/mcp-page/installed-server-card.js +40 -34
- package/dist/components/features/mcp-page/installed-server-card.js.map +1 -1
- package/dist/components/features/mcp-page/mcp-server-health.cjs +2 -0
- package/dist/components/features/mcp-page/mcp-server-health.cjs.map +1 -0
- package/dist/components/features/mcp-page/mcp-server-health.d.ts +18 -0
- package/dist/components/features/mcp-page/mcp-server-health.js +117 -0
- package/dist/components/features/mcp-page/mcp-server-health.js.map +1 -0
- package/dist/components/features/plugins/build-plugins-view-model.d.ts +10 -1
- package/dist/components/features/plugins/plugin-files-section.d.ts +13 -0
- package/dist/components/features/settings/agent-canvas-update-card.cjs +2 -0
- package/dist/components/features/settings/agent-canvas-update-card.cjs.map +1 -0
- package/dist/components/features/settings/agent-canvas-update-card.d.ts +7 -0
- package/dist/components/features/settings/agent-canvas-update-card.js +170 -0
- package/dist/components/features/settings/agent-canvas-update-card.js.map +1 -0
- package/dist/components/features/settings/integrations-settings-link.cjs +2 -0
- package/dist/components/features/settings/integrations-settings-link.cjs.map +1 -0
- package/dist/components/features/settings/integrations-settings-link.d.ts +5 -0
- package/dist/components/features/settings/integrations-settings-link.js +41 -0
- package/dist/components/features/settings/integrations-settings-link.js.map +1 -0
- package/dist/components/features/settings/llm-profiles/llm-settings-local-view.cjs +1 -1
- package/dist/components/features/settings/llm-profiles/llm-settings-local-view.js +1 -1
- package/dist/components/features/settings/settings-desktop-sidebar.cjs +1 -1
- package/dist/components/features/settings/settings-desktop-sidebar.cjs.map +1 -1
- package/dist/components/features/settings/settings-desktop-sidebar.js +31 -21
- package/dist/components/features/settings/settings-desktop-sidebar.js.map +1 -1
- package/dist/components/features/settings/settings-mobile-drawer.cjs +1 -1
- package/dist/components/features/settings/settings-mobile-drawer.cjs.map +1 -1
- package/dist/components/features/settings/settings-mobile-drawer.js +40 -30
- package/dist/components/features/settings/settings-mobile-drawer.js.map +1 -1
- package/dist/components/features/skills/extensions-navigation.cjs +1 -1
- package/dist/components/features/skills/extensions-navigation.cjs.map +1 -1
- package/dist/components/features/skills/extensions-navigation.js +54 -33
- package/dist/components/features/skills/extensions-navigation.js.map +1 -1
- package/dist/config/defaults.cjs +1 -1
- package/dist/config/defaults.cjs.map +1 -1
- package/dist/config/defaults.js +7 -3
- package/dist/config/defaults.js.map +1 -1
- package/dist/constants/acp-providers.cjs.map +1 -1
- package/dist/constants/acp-providers.js.map +1 -1
- package/dist/contexts/conversation-websocket-context.cjs +2 -2
- package/dist/contexts/conversation-websocket-context.cjs.map +1 -1
- package/dist/contexts/conversation-websocket-context.js +169 -166
- package/dist/contexts/conversation-websocket-context.js.map +1 -1
- package/dist/hooks/mutation/use-delete-llm-profile.cjs +1 -1
- package/dist/hooks/mutation/use-delete-llm-profile.js +1 -0
- package/dist/hooks/mutation/use-delete-mcp-server.cjs +1 -1
- package/dist/hooks/mutation/use-delete-mcp-server.cjs.map +1 -1
- package/dist/hooks/mutation/use-delete-mcp-server.js +8 -6
- package/dist/hooks/mutation/use-delete-mcp-server.js.map +1 -1
- package/dist/hooks/mutation/use-rename-llm-profile.cjs +1 -1
- package/dist/hooks/mutation/use-rename-llm-profile.js +1 -0
- package/dist/hooks/mutation/use-save-settings.cjs +1 -1
- package/dist/hooks/mutation/use-save-settings.js +3 -3
- package/dist/hooks/mutation/use-update-mcp-server.cjs +1 -1
- package/dist/hooks/mutation/use-update-mcp-server.cjs.map +1 -1
- package/dist/hooks/mutation/use-update-mcp-server.js +11 -9
- package/dist/hooks/mutation/use-update-mcp-server.js.map +1 -1
- package/dist/hooks/query/query-keys.cjs +1 -1
- package/dist/hooks/query/query-keys.cjs.map +1 -1
- package/dist/hooks/query/query-keys.d.ts +4 -0
- package/dist/hooks/query/query-keys.js +2 -2
- package/dist/hooks/query/query-keys.js.map +1 -1
- package/dist/hooks/query/use-automation-sdk-version.cjs +2 -0
- package/dist/hooks/query/use-automation-sdk-version.cjs.map +1 -0
- package/dist/hooks/query/use-automation-sdk-version.d.ts +3 -0
- package/dist/hooks/query/use-automation-sdk-version.js +63 -0
- package/dist/hooks/query/use-automation-sdk-version.js.map +1 -0
- package/dist/hooks/query/use-latest-agent-canvas-version.cjs +2 -0
- package/dist/hooks/query/use-latest-agent-canvas-version.cjs.map +1 -0
- package/dist/hooks/query/use-latest-agent-canvas-version.d.ts +10 -0
- package/dist/hooks/query/use-latest-agent-canvas-version.js +19 -0
- package/dist/hooks/query/use-latest-agent-canvas-version.js.map +1 -0
- package/dist/hooks/query/use-plugin-file-content.d.ts +7 -0
- package/dist/hooks/query/use-resolved-workspaces.cjs +1 -1
- package/dist/hooks/query/use-resolved-workspaces.cjs.map +1 -1
- package/dist/hooks/query/use-resolved-workspaces.js +25 -26
- package/dist/hooks/query/use-resolved-workspaces.js.map +1 -1
- package/dist/hooks/query/use-search-subdirs.cjs +1 -1
- package/dist/hooks/query/use-search-subdirs.cjs.map +1 -1
- package/dist/hooks/query/use-search-subdirs.d.ts +5 -0
- package/dist/hooks/query/use-search-subdirs.js +16 -4
- package/dist/hooks/query/use-search-subdirs.js.map +1 -1
- package/dist/hooks/query/use-task-polling.cjs +1 -1
- package/dist/hooks/query/use-task-polling.cjs.map +1 -1
- package/dist/hooks/query/use-task-polling.d.ts +19 -3
- package/dist/hooks/query/use-task-polling.js +36 -35
- package/dist/hooks/query/use-task-polling.js.map +1 -1
- package/dist/hooks/use-device-flow.cjs +1 -1
- package/dist/hooks/use-device-flow.js +6 -6
- package/dist/hooks/use-llm-configured.cjs +1 -1
- package/dist/hooks/use-llm-configured.js +3 -3
- package/dist/hooks/use-mcp-server-health.cjs +2 -0
- package/dist/hooks/use-mcp-server-health.cjs.map +1 -0
- package/dist/hooks/use-mcp-server-health.d.ts +11 -0
- package/dist/hooks/use-mcp-server-health.js +18 -0
- package/dist/hooks/use-mcp-server-health.js.map +1 -0
- package/dist/hooks/use-skill-installs.cjs +2 -0
- package/dist/hooks/use-skill-installs.cjs.map +1 -0
- package/dist/hooks/use-skill-installs.d.ts +10 -0
- package/dist/hooks/use-skill-installs.js +21 -0
- package/dist/hooks/use-skill-installs.js.map +1 -0
- package/dist/hooks/use-tracking.cjs +1 -1
- package/dist/hooks/use-tracking.cjs.map +1 -1
- package/dist/hooks/use-tracking.d.ts +3 -3
- package/dist/hooks/use-tracking.js +67 -52
- package/dist/hooks/use-tracking.js.map +1 -1
- package/dist/i18n/declaration.cjs +1 -1
- package/dist/i18n/declaration.cjs.map +1 -1
- package/dist/i18n/declaration.d.ts +35 -1
- package/dist/i18n/declaration.js +1 -1
- package/dist/i18n/declaration.js.map +1 -1
- package/dist/i18n/translation.cjs +3 -3
- package/dist/i18n/translation.cjs.map +1 -1
- package/dist/i18n/translation.js +623 -45
- package/dist/i18n/translation.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -2
- package/dist/lib/index.cjs +1 -1
- package/dist/lib/index.d.ts +0 -1
- package/dist/lib/index.js +0 -1
- package/dist/locales/ar/openhands.json +38 -4
- package/dist/locales/ca/openhands.json +38 -4
- package/dist/locales/de/openhands.json +38 -4
- package/dist/locales/en/openhands.json +38 -4
- package/dist/locales/es/openhands.json +38 -4
- package/dist/locales/fr/openhands.json +38 -4
- package/dist/locales/it/openhands.json +38 -4
- package/dist/locales/ja/openhands.json +38 -4
- package/dist/locales/ko-KR/openhands.json +38 -4
- package/dist/locales/no/openhands.json +38 -4
- package/dist/locales/pt/openhands.json +38 -4
- package/dist/locales/tr/openhands.json +38 -4
- package/dist/locales/uk/openhands.json +38 -4
- package/dist/locales/zh-CN/openhands.json +38 -4
- package/dist/locales/zh-TW/openhands.json +38 -4
- package/dist/node_modules/@openhands/extensions/integrations/catalog/atlassian-rovo.cjs +2 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/atlassian-rovo.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/atlassian-rovo.js +44 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/atlassian-rovo.js.map +1 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/atlassian.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/atlassian.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/atlassian.js +13 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/atlassian.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/github.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/github.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/github.js +21 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/github.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/linear.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/linear.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/linear.js +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/linear.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-outlook.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-outlook.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-outlook.js +13 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-outlook.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-teams.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-teams.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-teams.js +13 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-teams.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/notion.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/notion.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/notion.js +13 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/notion.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/onedrive.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/onedrive.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/onedrive.js +13 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/onedrive.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/sharepoint.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/sharepoint.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/sharepoint.js +13 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/sharepoint.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/slack.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/slack.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/slack.js +16 -2
- package/dist/node_modules/@openhands/extensions/integrations/catalog/slack.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/vanta.cjs +2 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/vanta.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/vanta.js +46 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/vanta.js.map +1 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog-index.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog-index.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog-index.js +74 -70
- package/dist/node_modules/@openhands/extensions/integrations/catalog-index.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/skills/index.cjs +123 -3
- package/dist/node_modules/@openhands/extensions/skills/index.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/skills/index.js +7 -1
- package/dist/node_modules/@openhands/extensions/skills/index.js.map +1 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.js +9 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/info.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/info.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/info.js +21 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/info.js.map +1 -0
- package/dist/package.cjs +1 -1
- package/dist/package.cjs.map +1 -1
- package/dist/package.js +10 -3
- package/dist/package.js.map +1 -1
- package/dist/routes/app-settings.cjs +1 -1
- package/dist/routes/app-settings.cjs.map +1 -1
- package/dist/routes/app-settings.js +113 -67
- package/dist/routes/app-settings.js.map +1 -1
- package/dist/routes/conversation.cjs +1 -1
- package/dist/routes/conversation.cjs.map +1 -1
- package/dist/routes/conversation.js +1 -1
- package/dist/routes/conversation.js.map +1 -1
- package/dist/routes/mcp.cjs +1 -1
- package/dist/routes/mcp.cjs.map +1 -1
- package/dist/routes/mcp.js +1 -0
- package/dist/routes/mcp.js.map +1 -1
- package/dist/services/cloud-funnel-analytics.cjs +1 -1
- package/dist/services/cloud-funnel-analytics.cjs.map +1 -1
- package/dist/services/cloud-funnel-analytics.d.ts +2 -2
- package/dist/services/cloud-funnel-analytics.js +18 -16
- package/dist/services/cloud-funnel-analytics.js.map +1 -1
- package/dist/services/settings.cjs +1 -1
- package/dist/services/settings.cjs.map +1 -1
- package/dist/services/settings.js +1 -0
- package/dist/services/settings.js.map +1 -1
- package/dist/services/telemetry-context.cjs +2 -0
- package/dist/services/telemetry-context.cjs.map +1 -0
- package/dist/services/telemetry-context.d.ts +17 -0
- package/dist/services/telemetry-context.js +27 -0
- package/dist/services/telemetry-context.js.map +1 -0
- package/dist/services/telemetry.cjs +1 -1
- package/dist/services/telemetry.cjs.map +1 -1
- package/dist/services/telemetry.d.ts +7 -5
- package/dist/services/telemetry.js +132 -123
- package/dist/services/telemetry.js.map +1 -1
- package/dist/stores/skill-install-banner-store.cjs +2 -0
- package/dist/stores/skill-install-banner-store.cjs.map +1 -0
- package/dist/stores/skill-install-banner-store.d.ts +32 -0
- package/dist/stores/skill-install-banner-store.js +14 -0
- package/dist/stores/skill-install-banner-store.js.map +1 -0
- package/dist/stores/use-event-store.cjs +1 -1
- package/dist/stores/use-event-store.cjs.map +1 -1
- package/dist/stores/use-event-store.js +35 -35
- package/dist/stores/use-event-store.js.map +1 -1
- package/dist/types/mcp-health.cjs +2 -0
- package/dist/types/mcp-health.cjs.map +1 -0
- package/dist/types/mcp-health.d.ts +21 -0
- package/dist/types/mcp-health.js +6 -0
- package/dist/types/mcp-health.js.map +1 -0
- package/dist/types/settings.d.ts +1 -0
- package/dist/utils/handle-event-for-ui.cjs +1 -1
- package/dist/utils/handle-event-for-ui.cjs.map +1 -1
- package/dist/utils/handle-event-for-ui.d.ts +5 -0
- package/dist/utils/handle-event-for-ui.js +71 -57
- package/dist/utils/handle-event-for-ui.js.map +1 -1
- package/dist/utils/mcp-credential-validation.cjs +1 -1
- package/dist/utils/mcp-credential-validation.cjs.map +1 -1
- package/dist/utils/mcp-credential-validation.js +32 -16
- package/dist/utils/mcp-credential-validation.js.map +1 -1
- package/dist/utils/mcp-server-health-key.cjs +2 -0
- package/dist/utils/mcp-server-health-key.cjs.map +1 -0
- package/dist/utils/mcp-server-health-key.d.ts +16 -0
- package/dist/utils/mcp-server-health-key.js +23 -0
- package/dist/utils/mcp-server-health-key.js.map +1 -0
- package/dist/utils/mcp-test-error-message.cjs +2 -0
- package/dist/utils/mcp-test-error-message.cjs.map +1 -0
- package/dist/utils/mcp-test-error-message.d.ts +8 -0
- package/dist/utils/mcp-test-error-message.js +14 -0
- package/dist/utils/mcp-test-error-message.js.map +1 -0
- package/dist/utils/redact-mcp-secrets.cjs +2 -0
- package/dist/utils/redact-mcp-secrets.cjs.map +1 -0
- package/dist/utils/redact-mcp-secrets.d.ts +13 -0
- package/dist/utils/redact-mcp-secrets.js +57 -0
- package/dist/utils/redact-mcp-secrets.js.map +1 -0
- package/dist/utils/settings-utils.cjs.map +1 -1
- package/dist/utils/settings-utils.js.map +1 -1
- package/dist/utils/skill-install-events.cjs +3 -0
- package/dist/utils/skill-install-events.cjs.map +1 -0
- package/dist/utils/skill-install-events.d.ts +16 -0
- package/dist/utils/skill-install-events.js +26 -0
- package/dist/utils/skill-install-events.js.map +1 -0
- package/dist/utils/title-llm-profile.cjs +2 -0
- package/dist/utils/title-llm-profile.cjs.map +1 -0
- package/dist/utils/title-llm-profile.d.ts +2 -0
- package/dist/utils/title-llm-profile.js +11 -0
- package/dist/utils/title-llm-profile.js.map +1 -0
- package/package.json +10 -3
- package/scripts/check-sdk-version-sync.mjs +6 -6
- package/scripts/check-translation-completeness.cjs +2 -0
- package/scripts/dev-process-utils.mjs +62 -1
- package/scripts/dev-safe.mjs +2 -2
- package/scripts/dev-static.mjs +5 -3
- package/scripts/dev-with-automation.mjs +98 -14
- package/scripts/download-node.mjs +382 -0
- package/scripts/download-uv.mjs +204 -0
- package/scripts/logger.mjs +64 -35
- package/build/assets/agent-server-compatibility-BWN-EIQn.js +0 -1
- package/build/assets/agent-server-conversation-service.api-DSPIkMwJ.js +0 -41
- package/build/assets/agent-settings-CgCnqaAA.js +0 -2
- package/build/assets/agent-settings-DDkSavD7.js +0 -1
- package/build/assets/api-key-entry-screen-iZc7n8AI.js +0 -1
- package/build/assets/app-settings-B5zyipxJ.js +0 -1
- package/build/assets/automation-export-BwRX6H32.js +0 -2
- package/build/assets/automations-list-lHAVzMoA.js +0 -1
- package/build/assets/backend-form-modal-RGcu909r.js +0 -1
- package/build/assets/browser-store-BI6uklCG.js +0 -1
- package/build/assets/chat-send-button-BZHG2hAW.js +0 -1
- package/build/assets/client-source-BZK8vRs2.js +0 -1
- package/build/assets/cloud-funnel-analytics-Zcv57hfT.js +0 -1
- package/build/assets/conversation-BoCYx8n2.js +0 -89
- package/build/assets/conversation-DgHqMjnY.js +0 -1
- package/build/assets/conversation-panel-78Rxh_-I.js +0 -1
- package/build/assets/conversation-state-store-B2Bp32XI.js +0 -1
- package/build/assets/declaration-BGsHjPEW.js +0 -1
- package/build/assets/extensions-hub-CCbLA7IM.js +0 -1
- package/build/assets/extensions-navigation-CPNjMNvR.js +0 -1
- package/build/assets/files-tab-store-DJsPxYdg.js +0 -1
- package/build/assets/files-tab-y4K7EXBO.js +0 -1
- package/build/assets/git-provider-icon-ITvsH4Ko.js +0 -1
- package/build/assets/home-BwbeOWwU.js +0 -1
- package/build/assets/home-DKPGQ5P3.js +0 -1
- package/build/assets/index-home-Bko2Itv5.js +0 -1
- package/build/assets/install-server-modal-Qk1gwyI8.js +0 -1
- package/build/assets/lesson-plan-DMCPdtrf.js +0 -4
- package/build/assets/llm-not-configured-banner-C1ktyb3C.js +0 -27
- package/build/assets/llm-settings-BBsZFi9l.js +0 -1
- package/build/assets/llm-settings-DFkJQr_w.js +0 -1
- package/build/assets/manage-backends-modal-CKQ46rvw.js +0 -1
- package/build/assets/manifest-03478bbf.js +0 -1
- package/build/assets/markdown-renderer-B4V2OMFP.js +0 -2
- package/build/assets/mcp-BapoJsDc.js +0 -9
- package/build/assets/messages-CUBFMY5o.js +0 -40
- package/build/assets/objectWithoutPropertiesLoose-BgYIAs2y.js +0 -1
- package/build/assets/onboarding-6NMkdNxV.js +0 -1
- package/build/assets/onboarding-modal-Q4AnpIdg.js +0 -1
- package/build/assets/recommended-automations-launcher-Bj7PuHY1.js +0 -58
- package/build/assets/refresh-cw-B9B7-vsy.js +0 -1
- package/build/assets/root-CDnuTToz.js +0 -2
- package/build/assets/root-CYWeTrWE.css +0 -1
- package/build/assets/root-layout-DfYVlcRG.js +0 -2
- package/build/assets/sdk-section-page-DLLNrYjI.js +0 -1
- package/build/assets/secrets-settings-CHy72A5C.js +0 -1
- package/build/assets/settings-B9S8UVQr.js +0 -1
- package/build/assets/settings-index-BKDl2CQ-.js +0 -1
- package/build/assets/settings-modal-DeK11CyT.js +0 -1
- package/build/assets/shared-conversation-9atDzTR4.js +0 -1
- package/build/assets/sidebar-mobile-menu-toggle-giMMZctn.js +0 -1
- package/build/assets/skills-plugins-Tropusio.js +0 -1
- package/build/assets/skills-settings-BvzBBCWk.js +0 -2
- package/build/assets/telemetry-C5JMEfqB.js +0 -2
- package/build/assets/use-activate-agent-profile-DlykqEfN.js +0 -1
- package/build/assets/use-backends-health-CLHPitJM.js +0 -1
- package/build/assets/use-config-B5r8erYt.js +0 -1
- package/build/assets/use-event-store-Bbaz51GR.js +0 -4
- package/build/assets/use-llm-profiles-Dr5__SlZ.js +0 -1
- package/build/assets/use-plugins-marketplace-BplU65ae.js +0 -1
- package/build/assets/use-runtime-is-ready-vCFOcLFa.js +0 -1
- package/build/assets/use-settings-CyxSlyTQ.js +0 -1
- package/build/assets/use-settings-nav-items-zEkSO_Bf.js +0 -16
- package/build/assets/use-tracking-D2Qg5Lpd.js +0 -1
- package/build/assets/useMutationState-OnAsCLA_.js +0 -1
- package/build/assets/vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-BD7v71DM.js +0 -2
- package/build/assets/vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-BT05Osu4.js +0 -28
- package/build/assets/vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-COhHANvV.js +0 -2
- package/build/assets/vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-DgzWSMRc.js +0 -2
- package/build/assets/vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-DqZatR3B.js +0 -7
- package/build/assets/vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-FghQ3Z1a.js +0 -1
- package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation-BTvhGHHG.js +0 -1
- package/build/assets/vendor~root-layout~index-home~home~mcp~automations-list~onboarding-modal-C4-GDgiF.js +0 -1
- package/dist/components/features/analytics/telemetry-consent-banner.cjs +0 -2
- package/dist/components/features/analytics/telemetry-consent-banner.cjs.map +0 -1
- package/dist/components/features/analytics/telemetry-consent-banner.d.ts +0 -29
- package/dist/components/features/analytics/telemetry-consent-banner.js +0 -59
- package/dist/components/features/analytics/telemetry-consent-banner.js.map +0 -1
- /package/build/assets/{__vite-browser-external-BQUj0sYu.js → __vite-browser-external-CKHVBTNC.js} +0 -0
- /package/build/assets/{agent-server-ui-style-scope-qhnhZHBV.js → agent-server-ui-style-scope-BvSa9on7.js} +0 -0
- /package/build/assets/{automation-LZB0MjdV.js → automation-BGiPmxFR.js} +0 -0
- /package/build/assets/{canvas-ui-COgjltGz.js → canvas-ui-CC4EJo-H.js} +0 -0
- /package/build/assets/{checkmark-h7udgXMM.js → checkmark-ygQB1AtV.js} +0 -0
- /package/build/assets/{close-DLFb5kfv.js → close-BjSA0HWT.js} +0 -0
- /package/build/assets/{code-tag-DYlAhEQY.js → code-tag-D9aPPbOe.js} +0 -0
- /package/build/assets/{common-CxbUL3nR.js → common-CCuqQy_S.js} +0 -0
- /package/build/assets/{conversation-local-storage-F6zVMM--.js → conversation-local-storage-BDjWPg0Z.js} +0 -0
- /package/build/assets/{copy-BLmGeJcd.js → copy-Dce7sOvS.js} +0 -0
- /package/build/assets/{copy-D1YGjP-C.js → copy-iPJAncAj.js} +0 -0
- /package/build/assets/{dist-CodhvuAP.js → dist-D9PhjOaq.js} +0 -0
- /package/build/assets/{environment-switch-store-DkjlKWzN.js → environment-switch-store-DHfcz4M4.js} +0 -0
- /package/build/assets/{extension-module-card-classes-9V3J9J_b.js → extension-module-card-classes-BpebKiN6.js} +0 -0
- /package/build/assets/{external-link-lhdITPqq.js → external-link-CpPMXxrV.js} +0 -0
- /package/build/assets/{folder-Bk311brm.js → folder-BabbYnbF.js} +0 -0
- /package/build/assets/{format-time-delta-DhDbkD7V.js → format-time-delta-BkAmJEPT.js} +0 -0
- /package/build/assets/{get-language-from-path-DBqBsCWH.js → get-language-from-path-CPNnuVhI.js} +0 -0
- /package/build/assets/{git-status-mapper-DnL9OC8_.js → git-status-mapper-BIXK0AAG.js} +0 -0
- /package/build/assets/{iconBase-Dz51Zn5x.js → iconBase-Ch-fOe8B.js} +0 -0
- /package/build/assets/{link-external-CaBmUEs_.js → link-external-DfKQroKX.js} +0 -0
- /package/build/assets/{list-todo-CAtvkzcy.js → list-todo-6J6zc8oS.js} +0 -0
- /package/build/assets/{llm-subscription-DtsX5Lhg.js → llm-subscription-Bvu8BLXc.js} +0 -0
- /package/build/assets/{loader-circle-CsAsfLIs.js → loader-circle-DGsqG5qw.js} +0 -0
- /package/build/assets/{map-provider-BbIb12oh.js → map-provider-BSvXvVR0.js} +0 -0
- /package/build/assets/{middleware-DYHYNAnP.js → middleware-_izt7V6U.js} +0 -0
- /package/build/assets/{modal-backdrop-zVwfOJZr.js → modal-backdrop-B7H42xHG.js} +0 -0
- /package/build/assets/{navigation-context-DPs2G0X8.js → navigation-context-cvyvI1WA.js} +0 -0
- /package/build/assets/{openhands-logo-bcNw5bkY.js → openhands-logo-pEw0nKFP.js} +0 -0
- /package/build/assets/{pencil-CWhApFIT.js → pencil-DmSqWUA3.js} +0 -0
- /package/build/assets/{react-DPDgL6du.js → react-MKQOkha9.js} +0 -0
- /package/build/assets/{search-BgOCR7_c.js → search-B5D5EuSn.js} +0 -0
- /package/build/assets/{search-dIQ09UY2.js → search-vnYL5jwV.js} +0 -0
- /package/build/assets/{settings-gear-MXCyZW0x.js → settings-gear-BOwF59Bs.js} +0 -0
- /package/build/assets/{settings-section-header-context-COMOIaxV.js → settings-section-header-context-CGgHZXrf.js} +0 -0
- /package/build/assets/{skills-EqzxYBvT.js → skills-arUOHLcS.js} +0 -0
- /package/build/assets/{square-chevron-right-DE-JN-2Z.js → square-chevron-right-EizCGtgq.js} +0 -0
- /package/build/assets/{switch-skeleton-DqQwalyu.js → switch-skeleton-BjPRx1QD.js} +0 -0
- /package/build/assets/{terminal-Cgf___rK.js → terminal-a57bHgZs.js} +0 -0
- /package/build/assets/{trash-2-BU6BlW4i.js → trash-2-CF3hilrY.js} +0 -0
- /package/build/assets/{u-check-circle-BqoIxNz_.js → u-check-circle-WGqHdtfO.js} +0 -0
- /package/build/assets/{u-check-circle-half-MsShT8Ec.js → u-check-circle-half-LiwZkuFe.js} +0 -0
- /package/build/assets/{u-edit-DL5LgKon.js → u-edit-BwHepAPi.js} +0 -0
- /package/build/assets/{use-breakpoint-BP3lqLMx.js → use-breakpoint-B-O0lQ84.js} +0 -0
- /package/build/assets/{use-click-outside-element-D9BYdANT.js → use-click-outside-element-DLQIMQrz.js} +0 -0
- /package/build/assets/{use-is-authed-BezEyfeh.js → use-is-authed-BSeo4coy.js} +0 -0
- /package/build/assets/{use-onboarding-completion-C_Swglzp.js → use-onboarding-completion-C0hPNGpw.js} +0 -0
- /package/build/assets/{v4-DbCkTSoU.js → v4-q4yWTlMz.js} +0 -0
- /package/build/assets/{vendor~browser-By2MVv_N.js → vendor~browser-UwB1jbAZ.js} +0 -0
- /package/build/assets/{vendor~conversation-panel~conversation~alert-banner-CxfzCmkN.js → vendor~conversation-panel~conversation~alert-banner-DHDkknt5.js} +0 -0
- /package/build/assets/{vendor~index-home~home~conversation-panel~conversation-ChmYLVgz.js → vendor~index-home~home~conversation-panel~conversation-Bff9cq5J.js} +0 -0
- /package/build/assets/{vendor~module-D5a_AClf.js → vendor~module-D4DeFV4J.js} +0 -0
- /package/build/assets/{vendor~terminal-CnKZILnC.js → vendor~terminal-B7Eiak0-.js} +0 -0
- /package/build/assets/{x-ZE4iplpF.js → x-DQB_00VJ.js} +0 -0
- /package/build/assets/{x-mark-Batp6gXa.js → x-mark-B32XuEwS.js} +0 -0
|
@@ -0,0 +1,382 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Download the official Node.js distribution for the current platform into
|
|
4
|
+
* resources/node/, so electron-builder can bundle it as an extraResource.
|
|
5
|
+
*
|
|
6
|
+
* The packaged Electron desktop app uses this bundled Node to provide
|
|
7
|
+
* `node`, `npm`, and `npx` to spawned subprocesses — most importantly the
|
|
8
|
+
* stdio MCP servers in the marketplace (Slack, GitHub, Figma, etc.) whose
|
|
9
|
+
* commands start with `npx -y <package>`.
|
|
10
|
+
*
|
|
11
|
+
* Why bundle Node instead of using Electron-as-Node (ELECTRON_RUN_AS_NODE=1)?
|
|
12
|
+
*
|
|
13
|
+
* We tried that first. Electron-as-Node works fine for our backend
|
|
14
|
+
* helper scripts (static-server.mjs, ingress.mjs) which mostly do
|
|
15
|
+
* networking, but it is **not** reliable for stdio JSON-RPC servers.
|
|
16
|
+
* When npx-cli.js (running under Electron-as-Node) spawned the MCP
|
|
17
|
+
* server, the child's stdin pipe semantics differed from vanilla Node
|
|
18
|
+
* on macOS (the parent is a windowed Electron process, not a clean
|
|
19
|
+
* command-line Node binary) — the server appeared to start, then
|
|
20
|
+
* immediately exited with "McpError: Connection closed" before the
|
|
21
|
+
* first JSON-RPC handshake message could land. Bundling the real
|
|
22
|
+
* Node binary sidesteps all of that.
|
|
23
|
+
*
|
|
24
|
+
* The downloaded Node.js distribution already includes npm and npx at
|
|
25
|
+
* `bin/npm` / `bin/npx` (POSIX) or `npm.cmd` / `npx.cmd` (Windows), so we
|
|
26
|
+
* do **not** need a separate npm download (this script supersedes the
|
|
27
|
+
* earlier download-npm.mjs).
|
|
28
|
+
*
|
|
29
|
+
* Usage:
|
|
30
|
+
* node scripts/download-node.mjs # uses NODE_BUNDLE_VERSION below
|
|
31
|
+
* NODE_VERSION=22.10.0 node scripts/download-node.mjs
|
|
32
|
+
*
|
|
33
|
+
* Output (per platform):
|
|
34
|
+
* POSIX: resources/node/bin/{node,npm,npx} + resources/node/lib/node_modules/npm/...
|
|
35
|
+
* Windows: resources/node/{node.exe,npm.cmd,npx.cmd} + resources/node/node_modules/npm/...
|
|
36
|
+
*/
|
|
37
|
+
|
|
38
|
+
import {
|
|
39
|
+
chmodSync,
|
|
40
|
+
createWriteStream,
|
|
41
|
+
existsSync,
|
|
42
|
+
lstatSync,
|
|
43
|
+
mkdirSync,
|
|
44
|
+
readdirSync,
|
|
45
|
+
readlinkSync,
|
|
46
|
+
rmSync,
|
|
47
|
+
statSync,
|
|
48
|
+
unlinkSync,
|
|
49
|
+
} from "node:fs";
|
|
50
|
+
import { get } from "node:https";
|
|
51
|
+
import { tmpdir } from "node:os";
|
|
52
|
+
import { dirname, join } from "node:path";
|
|
53
|
+
import { fileURLToPath } from "node:url";
|
|
54
|
+
import { execFileSync } from "node:child_process";
|
|
55
|
+
|
|
56
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
57
|
+
const projectRoot = join(__dirname, "..");
|
|
58
|
+
const outDir = join(projectRoot, "resources", "node");
|
|
59
|
+
|
|
60
|
+
// Pinned Node version. Electron 42 ships Node 22, so we bundle a 22.x
|
|
61
|
+
// LTS release to match the embedded runtime's ABI/native-module surface.
|
|
62
|
+
// We intentionally use 22.12.0 — the repo's own support floor
|
|
63
|
+
// (package.json engines.node >=22.12.0, volta 22.12.0) — rather than
|
|
64
|
+
// Electron 42.3.2's exact embedded Node patch level: the bundled binary
|
|
65
|
+
// runs this repo's launcher scripts, and native modules only need ABI
|
|
66
|
+
// parity (NODE_MODULE_VERSION 127, shared by all 22.x builds).
|
|
67
|
+
// Override at build time with NODE_VERSION=… (e.g. to test against a
|
|
68
|
+
// newer release). Major version >=22 only; engines.node in npm 10.x
|
|
69
|
+
// requires ^18.17.0 || >=20.5.0.
|
|
70
|
+
const NODE_BUNDLE_VERSION = "22.12.0";
|
|
71
|
+
|
|
72
|
+
// ── Platform detection ───────────────────────────────────────────────────────
|
|
73
|
+
|
|
74
|
+
const PLATFORM = process.platform; // 'darwin' | 'linux' | 'win32'
|
|
75
|
+
const ARCH = process.arch; // 'x64' | 'arm64' | 'ia32'
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Map (platform, arch) → Node's published distribution name.
|
|
79
|
+
* Names come straight from https://nodejs.org/dist/<version>/.
|
|
80
|
+
*
|
|
81
|
+
* macOS arm64 → node-v<ver>-darwin-arm64.tar.gz
|
|
82
|
+
* macOS x64 → node-v<ver>-darwin-x64.tar.gz
|
|
83
|
+
* linux x64 → node-v<ver>-linux-x64.tar.gz
|
|
84
|
+
* linux arm64 → node-v<ver>-linux-arm64.tar.gz
|
|
85
|
+
* win32 x64 → node-v<ver>-win-x64.zip
|
|
86
|
+
* win32 arm64 → node-v<ver>-win-arm64.zip
|
|
87
|
+
*/
|
|
88
|
+
function getPlatformSpec(version) {
|
|
89
|
+
const base = `node-v${version}`;
|
|
90
|
+
if (PLATFORM === "darwin") {
|
|
91
|
+
const arch = ARCH === "arm64" ? "arm64" : "x64";
|
|
92
|
+
return { name: `${base}-darwin-${arch}`, ext: "tar.gz" };
|
|
93
|
+
}
|
|
94
|
+
if (PLATFORM === "linux") {
|
|
95
|
+
const arch = ARCH === "arm64" ? "arm64" : "x64";
|
|
96
|
+
return { name: `${base}-linux-${arch}`, ext: "tar.gz" };
|
|
97
|
+
}
|
|
98
|
+
if (PLATFORM === "win32") {
|
|
99
|
+
const arch = ARCH === "arm64" ? "arm64" : "x64";
|
|
100
|
+
return { name: `${base}-win-${arch}`, ext: "zip" };
|
|
101
|
+
}
|
|
102
|
+
throw new Error(`Unsupported platform for Node download: ${PLATFORM}/${ARCH}`);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// ── Version resolution ───────────────────────────────────────────────────────
|
|
106
|
+
|
|
107
|
+
function resolveVersion() {
|
|
108
|
+
const requested = process.env.NODE_VERSION?.replace(/^v/, "");
|
|
109
|
+
return requested || NODE_BUNDLE_VERSION;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// ── HTTP helpers ─────────────────────────────────────────────────────────────
|
|
113
|
+
|
|
114
|
+
function downloadFile(url, dest) {
|
|
115
|
+
return new Promise((resolve, reject) => {
|
|
116
|
+
const file = createWriteStream(dest);
|
|
117
|
+
function doGet(u) {
|
|
118
|
+
get(u, { headers: { "User-Agent": "agent-canvas-build" } }, (res) => {
|
|
119
|
+
if (res.statusCode === 301 || res.statusCode === 302) {
|
|
120
|
+
return doGet(res.headers.location);
|
|
121
|
+
}
|
|
122
|
+
if (res.statusCode !== 200) {
|
|
123
|
+
file.destroy();
|
|
124
|
+
return reject(new Error(`GET ${u} → HTTP ${res.statusCode}`));
|
|
125
|
+
}
|
|
126
|
+
res.pipe(file);
|
|
127
|
+
file.on("finish", () => file.close(resolve));
|
|
128
|
+
file.on("error", reject);
|
|
129
|
+
res.on("error", reject);
|
|
130
|
+
}).on("error", (err) => {
|
|
131
|
+
file.destroy();
|
|
132
|
+
reject(err);
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
doGet(url);
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// ── Extraction ───────────────────────────────────────────────────────────────
|
|
140
|
+
|
|
141
|
+
function extract(archivePath, targetDir, ext) {
|
|
142
|
+
// Both tar.gz and zip extract via system `tar`:
|
|
143
|
+
// GNU/BSD tar (macOS/Linux) handles .tar.gz natively.
|
|
144
|
+
// bsdtar (Windows 10+) handles both .tar.gz and .zip.
|
|
145
|
+
// --strip-components=1 drops the "node-vX.Y.Z-<platform>-<arch>/" top dir.
|
|
146
|
+
void ext; // archive content is identified by tar's own magic bytes
|
|
147
|
+
execFileSync(
|
|
148
|
+
"tar",
|
|
149
|
+
["-xf", archivePath, "-C", targetDir, "--strip-components=1"],
|
|
150
|
+
{ stdio: "inherit" },
|
|
151
|
+
);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
function ensureExecutable(p) {
|
|
155
|
+
if (process.platform === "win32") return;
|
|
156
|
+
try {
|
|
157
|
+
chmodSync(p, 0o755);
|
|
158
|
+
} catch {}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// ── Layout verification ──────────────────────────────────────────────────────
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Confirm the extracted tree has the binaries we depend on.
|
|
165
|
+
* On Unix Node puts them in bin/; on Windows they live at the root.
|
|
166
|
+
*/
|
|
167
|
+
function verifyLayout() {
|
|
168
|
+
const isWin = PLATFORM === "win32";
|
|
169
|
+
const required = isWin
|
|
170
|
+
? ["node.exe", "npm.cmd", "npx.cmd"]
|
|
171
|
+
: ["bin/node", "bin/npm", "bin/npx"];
|
|
172
|
+
for (const rel of required) {
|
|
173
|
+
const p = join(outDir, rel);
|
|
174
|
+
if (!existsSync(p)) {
|
|
175
|
+
throw new Error(
|
|
176
|
+
`Expected ${rel} in extracted Node distribution but it is missing ` +
|
|
177
|
+
`at ${p}. Did the tarball layout change?`,
|
|
178
|
+
);
|
|
179
|
+
}
|
|
180
|
+
ensureExecutable(p);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// npm/npx are wrapper scripts that invoke node against npm's JS entry
|
|
184
|
+
// points; verify the targets exist too so a packaged build doesn't ship
|
|
185
|
+
// a half-broken installation.
|
|
186
|
+
const npmCli = isWin
|
|
187
|
+
? join(outDir, "node_modules", "npm", "bin", "npm-cli.js")
|
|
188
|
+
: join(outDir, "lib", "node_modules", "npm", "bin", "npm-cli.js");
|
|
189
|
+
if (!existsSync(npmCli)) {
|
|
190
|
+
throw new Error(`Bundled Node is missing npm-cli.js at ${npmCli}`);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// ── Pruning ──────────────────────────────────────────────────────────────────
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Drop pieces of the Node distribution that are only useful when building
|
|
198
|
+
* native modules from source or for human-readable documentation. Stripping
|
|
199
|
+
* these shrinks the bundled Node from ~170 MB → ~115 MB on Linux x64 (the
|
|
200
|
+
* Node binary itself is the bulk of what remains and can't be reduced).
|
|
201
|
+
*
|
|
202
|
+
* Kept intentionally:
|
|
203
|
+
* bin/node, bin/npm, bin/npx — runtime binaries / wrappers
|
|
204
|
+
* lib/node_modules/{npm,corepack} — npm itself
|
|
205
|
+
* LICENSE — required by the BSD-style Node license
|
|
206
|
+
*/
|
|
207
|
+
function pruneUnusedFiles() {
|
|
208
|
+
// IMPORTANT: every entry that points into a directory we delete must also
|
|
209
|
+
// delete any symlink/shim that targets into it, otherwise electron-builder
|
|
210
|
+
// hits ENOENT trying to stat() the dangling symlink while copying the
|
|
211
|
+
// extraResource into the .app bundle.
|
|
212
|
+
//
|
|
213
|
+
// Example: Node's POSIX tarball ships `bin/corepack` as a symlink to
|
|
214
|
+
// `../lib/node_modules/corepack/dist/corepack.js`. If we drop the corepack
|
|
215
|
+
// module under lib/ but leave the symlink, `electron-builder` fails with
|
|
216
|
+
// ENOENT: ... Resources/node/bin/corepack
|
|
217
|
+
const candidates =
|
|
218
|
+
PLATFORM === "win32"
|
|
219
|
+
? [
|
|
220
|
+
// Windows Node zip lays out npm directly under node_modules/, not lib/.
|
|
221
|
+
// Strip docs, headers, and node_modules/corepack (the npm runtime
|
|
222
|
+
// doesn't need corepack to run, and we don't ship yarn/pnpm).
|
|
223
|
+
"CHANGELOG.md",
|
|
224
|
+
"README.md",
|
|
225
|
+
"node_modules/corepack",
|
|
226
|
+
// Windows ships corepack as both a Bash wrapper and a cmd.exe wrapper
|
|
227
|
+
// at the distribution root; both proxy into node_modules/corepack.
|
|
228
|
+
"corepack",
|
|
229
|
+
"corepack.cmd",
|
|
230
|
+
]
|
|
231
|
+
: [
|
|
232
|
+
// POSIX layout — keep bin/ and lib/node_modules/npm; drop the rest.
|
|
233
|
+
"include",
|
|
234
|
+
"share",
|
|
235
|
+
"CHANGELOG.md",
|
|
236
|
+
"README.md",
|
|
237
|
+
"lib/node_modules/corepack",
|
|
238
|
+
// Symlink in bin/ targets the corepack we just deleted.
|
|
239
|
+
"bin/corepack",
|
|
240
|
+
];
|
|
241
|
+
for (const rel of candidates) {
|
|
242
|
+
const p = join(outDir, rel);
|
|
243
|
+
// `rmSync(force: true)` resolves the path through symlinks, so once the
|
|
244
|
+
// corepack target directory is deleted the now-dangling `bin/corepack`
|
|
245
|
+
// link reads as "already gone" and silently survives — the exact ENOENT
|
|
246
|
+
// trap failOnDanglingSymlinks() exists to catch. Remove files/symlinks
|
|
247
|
+
// with `unlinkSync` (lstat semantics, works on dangling links) first and
|
|
248
|
+
// fall back to `rmSync` for directories.
|
|
249
|
+
try {
|
|
250
|
+
unlinkSync(p);
|
|
251
|
+
} catch {
|
|
252
|
+
try {
|
|
253
|
+
rmSync(p, { recursive: true, force: true });
|
|
254
|
+
} catch {
|
|
255
|
+
// best-effort
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
// ── Dangling-symlink check ───────────────────────────────────────────────────
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* Walk the pruned tree and refuse to finish if any symlink points at a path
|
|
265
|
+
* that no longer exists. electron-builder calls `stat()` (which follows
|
|
266
|
+
* symlinks) on every entry it copies into the .app bundle, so a single
|
|
267
|
+
* dangling symlink blows up the whole `build:desktop` step with a confusing
|
|
268
|
+
* ENOENT — fail at download time instead, with a message that says which
|
|
269
|
+
* pruned directory the symlink was reaching into.
|
|
270
|
+
*/
|
|
271
|
+
function failOnDanglingSymlinks() {
|
|
272
|
+
const broken = [];
|
|
273
|
+
const stack = [outDir];
|
|
274
|
+
while (stack.length) {
|
|
275
|
+
const next = stack.pop();
|
|
276
|
+
let entries;
|
|
277
|
+
try {
|
|
278
|
+
entries = readdirSync(next, { withFileTypes: true });
|
|
279
|
+
} catch {
|
|
280
|
+
continue;
|
|
281
|
+
}
|
|
282
|
+
for (const entry of entries) {
|
|
283
|
+
const p = join(next, entry.name);
|
|
284
|
+
if (entry.isSymbolicLink()) {
|
|
285
|
+
try {
|
|
286
|
+
// statSync follows the link; if the target is gone this throws.
|
|
287
|
+
statSync(p);
|
|
288
|
+
} catch {
|
|
289
|
+
let target = "<unreadable>";
|
|
290
|
+
try {
|
|
291
|
+
if (lstatSync(p).isSymbolicLink()) target = readlinkSync(p);
|
|
292
|
+
} catch {
|
|
293
|
+
// ignore — best-effort labelling
|
|
294
|
+
}
|
|
295
|
+
broken.push(`${p} → ${target}`);
|
|
296
|
+
}
|
|
297
|
+
} else if (entry.isDirectory()) {
|
|
298
|
+
stack.push(p);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
if (broken.length) {
|
|
303
|
+
console.error(
|
|
304
|
+
"[download-node] Dangling symlinks remain after pruning — these would " +
|
|
305
|
+
"crash electron-builder later with ENOENT. Add the dangling symlink " +
|
|
306
|
+
"(or its target) to pruneUnusedFiles() in this script:",
|
|
307
|
+
);
|
|
308
|
+
for (const entry of broken) console.error(" •", entry);
|
|
309
|
+
throw new Error(`${broken.length} dangling symlink(s) in resources/node/`);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
// ── Size report ──────────────────────────────────────────────────────────────
|
|
314
|
+
|
|
315
|
+
function dirSizeBytes(dir) {
|
|
316
|
+
let total = 0;
|
|
317
|
+
const stack = [dir];
|
|
318
|
+
while (stack.length) {
|
|
319
|
+
const next = stack.pop();
|
|
320
|
+
let entries;
|
|
321
|
+
try {
|
|
322
|
+
entries = readdirSync(next, { withFileTypes: true });
|
|
323
|
+
} catch {
|
|
324
|
+
continue;
|
|
325
|
+
}
|
|
326
|
+
for (const entry of entries) {
|
|
327
|
+
const p = join(next, entry.name);
|
|
328
|
+
if (entry.isDirectory()) {
|
|
329
|
+
stack.push(p);
|
|
330
|
+
} else {
|
|
331
|
+
try {
|
|
332
|
+
total += statSync(p).size;
|
|
333
|
+
} catch {}
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
return total;
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
// ── Main ─────────────────────────────────────────────────────────────────────
|
|
341
|
+
|
|
342
|
+
async function main() {
|
|
343
|
+
const version = resolveVersion();
|
|
344
|
+
const spec = getPlatformSpec(version);
|
|
345
|
+
const archiveName = `${spec.name}.${spec.ext}`;
|
|
346
|
+
const url = `https://nodejs.org/dist/v${version}/${archiveName}`;
|
|
347
|
+
const tmpFile = join(tmpdir(), `node-download-${Date.now()}.${spec.ext}`);
|
|
348
|
+
|
|
349
|
+
console.log(
|
|
350
|
+
`[download-node] Downloading Node v${version} for ${PLATFORM}/${ARCH}`,
|
|
351
|
+
);
|
|
352
|
+
console.log(`[download-node] URL: ${url}`);
|
|
353
|
+
|
|
354
|
+
try {
|
|
355
|
+
// Clear any previous output so stale files (different Node version, or
|
|
356
|
+
// a stale resources/npm/ from the previous wrapper approach) don't
|
|
357
|
+
// linger in the bundle.
|
|
358
|
+
if (existsSync(outDir)) rmSync(outDir, { recursive: true, force: true });
|
|
359
|
+
mkdirSync(outDir, { recursive: true });
|
|
360
|
+
|
|
361
|
+
console.log(`[download-node] Downloading to ${tmpFile}`);
|
|
362
|
+
await downloadFile(url, tmpFile);
|
|
363
|
+
console.log(`[download-node] Extracting to ${outDir}`);
|
|
364
|
+
extract(tmpFile, outDir, spec.ext);
|
|
365
|
+
|
|
366
|
+
verifyLayout();
|
|
367
|
+
pruneUnusedFiles();
|
|
368
|
+
failOnDanglingSymlinks();
|
|
369
|
+
|
|
370
|
+
const mb = Math.round(dirSizeBytes(outDir) / (1024 * 1024));
|
|
371
|
+
console.log(`[download-node] ✓ Node v${version} ready at ${outDir} (~${mb} MB)`);
|
|
372
|
+
} finally {
|
|
373
|
+
try {
|
|
374
|
+
rmSync(tmpFile, { force: true });
|
|
375
|
+
} catch {}
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
main().catch((err) => {
|
|
380
|
+
console.error("[download-node] Error:", err.message);
|
|
381
|
+
process.exit(1);
|
|
382
|
+
});
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Download the uv binary for the current platform into resources/bin/
|
|
4
|
+
* so that electron-builder can bundle it as an extraResource.
|
|
5
|
+
*
|
|
6
|
+
* uv provides uvx, which the Electron desktop app uses to run the
|
|
7
|
+
* agent-server and automation backend Python packages.
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* node scripts/download-uv.mjs # uses latest GitHub release
|
|
11
|
+
* UV_VERSION=0.7.0 node scripts/download-uv.mjs
|
|
12
|
+
*
|
|
13
|
+
* Output (per platform):
|
|
14
|
+
* resources/bin/uv + resources/bin/uvx (macOS / Linux)
|
|
15
|
+
* resources/bin/uv.exe + resources/bin/uvx.exe (Windows)
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import {
|
|
19
|
+
chmodSync,
|
|
20
|
+
copyFileSync,
|
|
21
|
+
createWriteStream,
|
|
22
|
+
existsSync,
|
|
23
|
+
mkdirSync,
|
|
24
|
+
rmSync,
|
|
25
|
+
} from "node:fs";
|
|
26
|
+
import { get } from "node:https";
|
|
27
|
+
import { tmpdir } from "node:os";
|
|
28
|
+
import { dirname, join } from "node:path";
|
|
29
|
+
import { fileURLToPath } from "node:url";
|
|
30
|
+
import { execFileSync } from "node:child_process";
|
|
31
|
+
|
|
32
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
33
|
+
const projectRoot = join(__dirname, "..");
|
|
34
|
+
const outDir = join(projectRoot, "resources", "bin");
|
|
35
|
+
|
|
36
|
+
// ── Platform detection ─────────────────────────────────────────────────────────
|
|
37
|
+
|
|
38
|
+
const PLATFORM = process.platform; // 'darwin' | 'linux' | 'win32'
|
|
39
|
+
const ARCH = process.arch; // 'x64' | 'arm64'
|
|
40
|
+
|
|
41
|
+
function getPlatformSpec() {
|
|
42
|
+
if (PLATFORM === "darwin") {
|
|
43
|
+
const uvArch = ARCH === "arm64" ? "aarch64" : "x86_64";
|
|
44
|
+
return {
|
|
45
|
+
target: `uv-${uvArch}-apple-darwin`,
|
|
46
|
+
ext: "tar.gz",
|
|
47
|
+
binaries: ["uv", "uvx"],
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
if (PLATFORM === "linux") {
|
|
51
|
+
// Only x64 is officially supported by uv for desktop builds
|
|
52
|
+
return {
|
|
53
|
+
target: "uv-x86_64-unknown-linux-gnu",
|
|
54
|
+
ext: "tar.gz",
|
|
55
|
+
binaries: ["uv", "uvx"],
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
if (PLATFORM === "win32") {
|
|
59
|
+
return {
|
|
60
|
+
target: "uv-x86_64-pc-windows-msvc",
|
|
61
|
+
ext: "zip",
|
|
62
|
+
binaries: ["uv.exe", "uvx.exe"],
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
throw new Error(`Unsupported platform for uv download: ${PLATFORM}`);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// ── Version resolution ────────────────────────────────────────────────────────
|
|
69
|
+
|
|
70
|
+
async function resolveVersion() {
|
|
71
|
+
if (process.env.UV_VERSION) {
|
|
72
|
+
return process.env.UV_VERSION.replace(/^v/, "");
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
console.log("[download-uv] Fetching latest uv version from GitHub API...");
|
|
76
|
+
const headers = { "User-Agent": "agent-canvas-build" };
|
|
77
|
+
// Unauthenticated api.github.com calls are rate-limited per IP (60/hour) —
|
|
78
|
+
// shared CI runner IPs exhaust that fast. CI passes GITHUB_TOKEN.
|
|
79
|
+
if (process.env.GITHUB_TOKEN) {
|
|
80
|
+
headers.Authorization = `Bearer ${process.env.GITHUB_TOKEN}`;
|
|
81
|
+
}
|
|
82
|
+
const data = await fetchJson(
|
|
83
|
+
"https://api.github.com/repos/astral-sh/uv/releases/latest",
|
|
84
|
+
headers
|
|
85
|
+
);
|
|
86
|
+
const version = data.tag_name?.replace(/^v/, "");
|
|
87
|
+
if (!version) throw new Error("Could not parse uv version from GitHub API");
|
|
88
|
+
return version;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// ── HTTP helpers ──────────────────────────────────────────────────────────────
|
|
92
|
+
|
|
93
|
+
function fetchJson(url, headers = {}) {
|
|
94
|
+
return new Promise((resolve, reject) => {
|
|
95
|
+
get(url, { headers }, (res) => {
|
|
96
|
+
if (res.statusCode === 301 || res.statusCode === 302) {
|
|
97
|
+
return resolve(fetchJson(res.headers.location, headers));
|
|
98
|
+
}
|
|
99
|
+
if (res.statusCode !== 200) {
|
|
100
|
+
return reject(new Error(`GET ${url} → HTTP ${res.statusCode}`));
|
|
101
|
+
}
|
|
102
|
+
let body = "";
|
|
103
|
+
res.on("data", (chunk) => (body += chunk));
|
|
104
|
+
res.on("end", () => resolve(JSON.parse(body)));
|
|
105
|
+
res.on("error", reject);
|
|
106
|
+
}).on("error", reject);
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
function downloadFile(url, dest) {
|
|
111
|
+
return new Promise((resolve, reject) => {
|
|
112
|
+
const file = createWriteStream(dest);
|
|
113
|
+
function doGet(u) {
|
|
114
|
+
get(u, { headers: { "User-Agent": "agent-canvas-build" } }, (res) => {
|
|
115
|
+
if (res.statusCode === 301 || res.statusCode === 302) {
|
|
116
|
+
return doGet(res.headers.location);
|
|
117
|
+
}
|
|
118
|
+
if (res.statusCode !== 200) {
|
|
119
|
+
file.destroy();
|
|
120
|
+
return reject(new Error(`GET ${u} → HTTP ${res.statusCode}`));
|
|
121
|
+
}
|
|
122
|
+
res.pipe(file);
|
|
123
|
+
file.on("finish", () => file.close(resolve));
|
|
124
|
+
file.on("error", reject);
|
|
125
|
+
res.on("error", reject);
|
|
126
|
+
}).on("error", (err) => {
|
|
127
|
+
file.destroy();
|
|
128
|
+
reject(err);
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
doGet(url);
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// ── Extraction ────────────────────────────────────────────────────────────────
|
|
136
|
+
|
|
137
|
+
function extract(archivePath, targetDir, ext) {
|
|
138
|
+
// Both tar.gz and zip are handled by the system 'tar' command:
|
|
139
|
+
// macOS/Linux: GNU/BSD tar natively supports .tar.gz
|
|
140
|
+
// Windows 10+: built-in bsdtar supports both .tar.gz and .zip
|
|
141
|
+
// The tar.gz archives wrap uv/uvx in a top-level `uv-<target>/` directory,
|
|
142
|
+
// which --strip-components=1 removes. uv's Windows .zip is flat (uv.exe /
|
|
143
|
+
// uvx.exe at the archive root) — stripping there would skip every entry
|
|
144
|
+
// and extract nothing.
|
|
145
|
+
const args = ["-xf", archivePath, "-C", targetDir];
|
|
146
|
+
if (ext === "tar.gz") {
|
|
147
|
+
args.push("--strip-components=1");
|
|
148
|
+
}
|
|
149
|
+
execFileSync("tar", args, { stdio: "inherit" });
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// ── Main ──────────────────────────────────────────────────────────────────────
|
|
153
|
+
|
|
154
|
+
async function main() {
|
|
155
|
+
const spec = getPlatformSpec();
|
|
156
|
+
const version = await resolveVersion();
|
|
157
|
+
|
|
158
|
+
console.log(`[download-uv] Downloading uv v${version} for ${PLATFORM}/${ARCH}`);
|
|
159
|
+
|
|
160
|
+
const filename = `${spec.target}.${spec.ext}`;
|
|
161
|
+
const url = `https://github.com/astral-sh/uv/releases/download/${version}/${filename}`;
|
|
162
|
+
const tmpFile = join(tmpdir(), `uv-download-${Date.now()}.${spec.ext}`);
|
|
163
|
+
const extractDir = join(tmpdir(), `uv-extract-${Date.now()}`);
|
|
164
|
+
|
|
165
|
+
try {
|
|
166
|
+
mkdirSync(outDir, { recursive: true });
|
|
167
|
+
mkdirSync(extractDir, { recursive: true });
|
|
168
|
+
|
|
169
|
+
console.log(`[download-uv] URL: ${url}`);
|
|
170
|
+
await downloadFile(url, tmpFile);
|
|
171
|
+
console.log(`[download-uv] Extracting to ${outDir}...`);
|
|
172
|
+
extract(tmpFile, extractDir, spec.ext);
|
|
173
|
+
|
|
174
|
+
// Copy the required binaries to outDir
|
|
175
|
+
for (const bin of spec.binaries) {
|
|
176
|
+
const src = join(extractDir, bin);
|
|
177
|
+
const dest = join(outDir, bin);
|
|
178
|
+
|
|
179
|
+
if (!existsSync(src)) {
|
|
180
|
+
throw new Error(`Expected binary not found after extraction: ${src}`);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// copyFileSync works across filesystems (unlike renameSync with EXDEV)
|
|
184
|
+
copyFileSync(src, dest);
|
|
185
|
+
|
|
186
|
+
if (process.platform !== "win32") {
|
|
187
|
+
chmodSync(dest, 0o755);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
console.log(`[download-uv] ✓ ${dest}`);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
console.log("[download-uv] Done. Binaries are ready for bundling.");
|
|
194
|
+
} finally {
|
|
195
|
+
// Clean up temp files (best-effort)
|
|
196
|
+
try { rmSync(tmpFile, { force: true }); } catch {}
|
|
197
|
+
try { rmSync(extractDir, { recursive: true, force: true }); } catch {}
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
main().catch((err) => {
|
|
202
|
+
console.error("[download-uv] Error:", err.message);
|
|
203
|
+
process.exit(1);
|
|
204
|
+
});
|