@openhands/agent-canvas 1.5.2 → 1.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/README.windows.md +2 -2
- package/build/assets/{Trans-DqF_OEZB.js → Trans-52HCczKK.js} +1 -1
- package/build/assets/{acp-providers-DerAmTyY.js → acp-providers-xACMK9ZP.js} +1 -1
- package/build/assets/{active-backend-context-DHhm10VS.js → active-backend-context-Cd1qcZsb.js} +1 -1
- package/build/assets/{add-backend-modal-BoMkMyLB.js → add-backend-modal-5chsfln3.js} +1 -1
- package/build/assets/{agent-profiles-settings-CYPloKYK.js → agent-profiles-settings-BWK4H3kR.js} +1 -1
- package/build/assets/agent-server-compatibility-DMY0CihN.js +1 -0
- package/build/assets/agent-server-conversation-service.api-CI5-xmIX.js +41 -0
- package/build/assets/agent-settings-CMd8-O4f.js +2 -0
- package/build/assets/agent-settings-CdrhQJXX.js +1 -0
- package/build/assets/{alert-banner-Dh51WURQ.js → alert-banner-CLfWuIAX.js} +1 -1
- package/build/assets/api-key-entry-screen-Cc3aC7DZ.js +1 -0
- package/build/assets/app-settings-B-DQcBoB.js +1 -0
- package/build/assets/{automation-detail-Bn8q0AG3.js → automation-detail-BgxBIpyK.js} +2 -2
- package/build/assets/automation-export-Dbur8OHa.js +2 -0
- package/build/assets/automations-list-BWfjizlp.js +1 -0
- package/build/assets/{back-nav-button-DVknCcSP.js → back-nav-button-CaKvsD1E.js} +1 -1
- package/build/assets/backend-form-modal-YcfpuBZo.js +1 -0
- package/build/assets/{backend-synced-settings-badge-yVh6Kf4E.js → backend-synced-settings-badge-BellMmgC.js} +1 -1
- package/build/assets/{base-modal-CIF_785P.js → base-modal-Cw7enAHz.js} +1 -1
- package/build/assets/{brand-button-B1izLAdR.js → brand-button-BulEFHr3.js} +1 -1
- package/build/assets/{browser-DKaeq_sT.js → browser-DfVgUREb.js} +2 -2
- package/build/assets/browser-store-CBqI3tNR.js +1 -0
- package/build/assets/{browser-tab-qb_ftCxW.js → browser-tab-CmIKQB7S.js} +1 -1
- package/build/assets/chat-send-button-BchSSwuD.js +1 -0
- package/build/assets/circle-check-BXbQ5nEH.js +1 -0
- package/build/assets/{circle-plus-check-toggle-DoFIjVE0.js → circle-plus-check-toggle-BhpPjkh9.js} +1 -1
- package/build/assets/client-source-DAUgyJsi.js +1 -0
- package/build/assets/cloud-funnel-analytics-B5OeWh4y.js +1 -0
- package/build/assets/{color-themes-CHizm1xF.js → color-themes-QKMSVfDU.js} +1 -1
- package/build/assets/{combobox-caret-CxZpqoSR.js → combobox-caret-kNZtp53R.js} +1 -1
- package/build/assets/{command-menu-oTvKDU3Y.js → command-menu-tUsn23zy.js} +1 -1
- package/build/assets/{command-store-D8J5LMW1.js → command-store-B0hrIWMN.js} +1 -1
- package/build/assets/{condenser-settings-Q1rHh4Qe.js → condenser-settings-BBizzfIH.js} +1 -1
- package/build/assets/{confirmation-modal-DGBWM2Ls.js → confirmation-modal-108xng7X.js} +1 -1
- package/build/assets/{context-menu-list-item-6psNyl7X.js → context-menu-list-item-BbKfFuN1.js} +1 -1
- package/build/assets/conversation-CTzSrLMq.js +1 -0
- package/build/assets/conversation-CgcXNb-Z.js +90 -0
- package/build/assets/conversation-panel-bscjGQda.js +1 -0
- package/build/assets/{conversation-service.api-D8QU-BiL.js → conversation-service.api-DbBvscJA.js} +1 -1
- package/build/assets/conversation-state-store-C5GagZHT.js +1 -0
- package/build/assets/{conversation-store-LptbOvKa.js → conversation-store-CyVqoa0d.js} +1 -1
- package/build/assets/{conversation-tab-empty-state-CNUmIms2.js → conversation-tab-empty-state-2KYlk5Bh.js} +1 -1
- package/build/assets/{copy-to-clipboard-button-CFzH_NOX.js → copy-to-clipboard-button-C54YRPMg.js} +1 -1
- package/build/assets/declaration-_yumYLEx.js +1 -0
- package/build/assets/{device-verify-WBSjJBLH.js → device-verify-D6FW_KZq.js} +1 -1
- package/build/assets/{dropdown-classes-D3wMJlXT.js → dropdown-classes-9uONlOg1.js} +1 -1
- package/build/assets/{ellipsis-button-CbNnHlIq.js → ellipsis-button-CoaUrKmQ.js} +1 -1
- package/build/assets/{entry.client-Dnnak-Hq.js → entry.client-BJSVzw7V.js} +2 -2
- package/build/assets/{enum-filter-dropdown-JLYv1t8L.js → enum-filter-dropdown-qQzyjk_q.js} +1 -1
- package/build/assets/{environment-switch-overlay-B1PFO8P8.js → environment-switch-overlay-XRWCClLu.js} +1 -1
- package/build/assets/extensions-hub-DUp9sWQY.js +1 -0
- package/build/assets/extensions-navigation-DmkftjAx.js +1 -0
- package/build/assets/file-tUAzhmJ3.js +1 -0
- package/build/assets/files-tab-GV5hwiIM.js +1 -0
- package/build/assets/files-tab-store-DehyITNC.js +1 -0
- package/build/assets/{form-control-classes-CbdN5aO3.js → form-control-classes-BPUnoYyg.js} +1 -1
- package/build/assets/git-provider-icon-DDkru3b_.js +1 -0
- package/build/assets/highlighted-source-view-CYkPZUxr.js +1 -0
- package/build/assets/home-C53WekZ2.js +1 -0
- package/build/assets/home-EAwq8ah2.js +1 -0
- package/build/assets/index-home-kBdZGKtu.js +1 -0
- package/build/assets/install-server-modal-DYk4VP3-.js +1 -0
- package/build/assets/{launch-DlXspDku.js → launch-CIecOy_y.js} +1 -1
- package/build/assets/lesson-plan-BSEUwflx.js +4 -0
- package/build/assets/llm-not-configured-banner-C8uv1PHT.js +27 -0
- package/build/assets/llm-settings-0Bb97NCk.js +1 -0
- package/build/assets/llm-settings-D4toJ90k.js +1 -0
- package/build/assets/{llm-subscription-service-C0zN0-rH.js → llm-subscription-service-BPRw3u3H.js} +1 -1
- package/build/assets/{loading-spinner-BcdnT0mN.js → loading-spinner-BCInDEXB.js} +1 -1
- package/build/assets/manage-backends-modal-Bon32JYr.js +1 -0
- package/build/assets/manifest-ec000ae3.js +1 -0
- package/build/assets/markdown-renderer-BlaJOAI2.js +2 -0
- package/build/assets/mcp-CFIpOkn2.js +9 -0
- package/build/assets/messages-eRPeR4pW.js +40 -0
- package/build/assets/{modal-body-Cc2zp0xb.js → modal-body-Bg9UCeoV.js} +1 -1
- package/build/assets/{modal-classes-3qT9Ap7Q.js → modal-classes-H1KbJkeC.js} +1 -1
- package/build/assets/{modal-close-button-BcIBUdSq.js → modal-close-button-BMLYvo0C.js} +1 -1
- package/build/assets/{model-selector-D51W2Q9b.js → model-selector-BqX2RvEr.js} +1 -1
- package/build/assets/{navigation-link-D8hfwvxI.js → navigation-link-DoJzTCEz.js} +1 -1
- package/build/assets/onboarding-3KO4qE6R.js +1 -0
- package/build/assets/onboarding-modal-D4vqkJeT.js +1 -0
- package/build/assets/{organization-service.api-Da2jiuBS.js → organization-service.api-CvfQugOt.js} +1 -1
- package/build/assets/{path-utils-D53ZHUQU.js → path-utils-DRgexxnX.js} +1 -1
- package/build/assets/{plan-components-BdZXPyZU.js → plan-components-qkMiGs_-.js} +1 -1
- package/build/assets/{planner-tab-BM-pKx0z.js → planner-tab-ZrjiirRr.js} +1 -1
- package/build/assets/{plugins-management-service-DISfOL13.js → plugins-management-service-9qT-r_37.js} +1 -1
- package/build/assets/plus-CzE1b-wl.js +1 -0
- package/build/assets/{profiles-service.api-DWetW2TL.js → profiles-service.api-CRVlrQpT.js} +1 -1
- package/build/assets/{providers-C7lMslCi.js → providers-C2DFGBrf.js} +1 -1
- package/build/assets/{proxy-G4ce0fnQ.js → proxy-DnnDqkwn.js} +1 -1
- package/build/assets/puzzle-IHQnD54C.js +1 -0
- package/build/assets/recommended-automations-launcher-B97vgHuN.js +58 -0
- package/build/assets/refresh-cw-DxbAs3SK.js +1 -0
- package/build/assets/root-BbONavTg.css +1 -0
- package/build/assets/root-D01rpqZU.js +2 -0
- package/build/assets/root-layout-BiHbCIkS.js +2 -0
- package/build/assets/{runtime-waiting-state-CnyVhX4T.js → runtime-waiting-state-CbUV9txX.js} +1 -1
- package/build/assets/{schema-field-CwdqUOnE.js → schema-field-B9-9Ta9u.js} +1 -1
- package/build/assets/sdk-section-page-DG1s25Pr.js +1 -0
- package/build/assets/{sdk-settings-schema-CLR01YIK.js → sdk-settings-schema-B42JFr5Y.js} +1 -1
- package/build/assets/{secrets-service-Ch7RH8eH.js → secrets-service-DvyS6-mV.js} +1 -1
- package/build/assets/secrets-settings-CeSq6cQw.js +1 -0
- package/build/assets/{segmented-toggle-kzwZkLaj.js → segmented-toggle-DRVJBNy0.js} +1 -1
- package/build/assets/settings-Dzo0dJKM.js +1 -0
- package/build/assets/{settings-mQUckT0g.js → settings-HcwfqMjJ.js} +1 -1
- package/build/assets/{settings-dropdown-input-Dhx9ErGd.js → settings-dropdown-input-B6RL_mt0.js} +1 -1
- package/build/assets/settings-index-uAKHyijw.js +1 -0
- package/build/assets/{settings-input-BsgQWS5R.js → settings-input-ZoaAPNQh.js} +1 -1
- package/build/assets/{settings-list-classes-DSJJX99U.js → settings-list-classes-Dr8LgITi.js} +1 -1
- package/build/assets/settings-modal-BVX2G_IT.js +1 -0
- package/build/assets/{settings-service.api-DPTFyRXL.js → settings-service.api-BY7ncxIz.js} +1 -1
- package/build/assets/{settings-switch-Bes8dIlV.js → settings-switch-DUlGnP0B.js} +1 -1
- package/build/assets/{settings-utils-DzCVfiR3.js → settings-utils-kWEEvcdv.js} +1 -1
- package/build/assets/shared-conversation-CV4Rtdz2.js +1 -0
- package/build/assets/{sidebar-layout-Bm7pa3Vk.js → sidebar-layout-BhGooCga.js} +1 -1
- package/build/assets/sidebar-mobile-menu-toggle-BntOJphE.js +1 -0
- package/build/assets/{sidebar-nav-link-CHqyFXwV.js → sidebar-nav-link-DkA1XWV8.js} +1 -1
- package/build/assets/{sidebar-store-uiUXBU1N.js → sidebar-store-CF3b12-m.js} +1 -1
- package/build/assets/{skill-card-pill-row-BPYKQ3IN.js → skill-card-pill-row-_gWe1Tws.js} +1 -1
- package/build/assets/skill-icon-badge-C-zbaXbD.js +1 -0
- package/build/assets/skills-plugins-BwoXKtrR.js +1 -0
- package/build/assets/skills-settings-Crq-fZSt.js +2 -0
- package/build/assets/{styled-tooltip-B14i_Uac.js → styled-tooltip-CdnCJ67u.js} +1 -1
- package/build/assets/syntax-highlighter-CZK2ab-O.js +1 -0
- package/build/assets/{task-list-tab-DyfgG4MC.js → task-list-tab-CONOO9iI.js} +1 -1
- package/build/assets/telemetry-CC32dJYW.js +2 -0
- package/build/assets/{terminal-BDTa1HEr.js → terminal-CTkDpIU-.js} +1 -1
- package/build/assets/{toggle-switch-DX_k418f.js → toggle-switch-yVIzmJLM.js} +1 -1
- package/build/assets/{typography-CzfoD9DY.js → typography-BBVEW0un.js} +1 -1
- package/build/assets/{use-acp-credential-form-DHd_Id-q.js → use-acp-credential-form-CIsp8hJe.js} +1 -1
- package/build/assets/use-activate-agent-profile-BfcTTJJG.js +1 -0
- package/build/assets/{use-active-agent-profile-BMDTXsay.js → use-active-agent-profile-CCeFtmk9.js} +1 -1
- package/build/assets/{use-active-conversation-BbeVgedA.js → use-active-conversation-Badxj8w4.js} +1 -1
- package/build/assets/{use-agent-profiles-Dn_S_Tkz.js → use-agent-profiles-BSWVN6hH.js} +1 -1
- package/build/assets/{use-agent-state-5qM3X30V.js → use-agent-state-BzRrhoPd.js} +1 -1
- package/build/assets/use-backends-health-BsZikyFW.js +1 -0
- package/build/assets/{use-can-manage-org-profiles-CyYqfzeo.js → use-can-manage-org-profiles-Do6mYf6P.js} +1 -1
- package/build/assets/{use-cloud-current-user-id-BwMX7jHW.js → use-cloud-current-user-id-Cx3B_0-w.js} +1 -1
- package/build/assets/use-config-D9zUVw5b.js +1 -0
- package/build/assets/{use-create-conversation-CkKUQVbP.js → use-create-conversation-vvl0kvu7.js} +1 -1
- package/build/assets/{use-create-secret-DEgM0MXZ.js → use-create-secret-CB7Dvd4s.js} +1 -1
- package/build/assets/use-event-store-BlpSUF7N.js +4 -0
- package/build/assets/{use-handle-plan-click-BFcE0Xms.js → use-handle-plan-click-DDZkew9p.js} +1 -1
- package/build/assets/use-is-creating-conversation-fxSzN778.js +1 -0
- package/build/assets/{use-launch-skill-in-chat-DJWEfVc5.js → use-launch-skill-in-chat-D6_n1fs3.js} +1 -1
- package/build/assets/use-llm-profiles-CNQm7HYS.js +1 -0
- package/build/assets/use-plugins-marketplace-CloojomS.js +1 -0
- package/build/assets/use-runtime-is-ready-Bx_4cfar.js +1 -0
- package/build/assets/{use-save-agent-profile-i4FcEP98.js → use-save-agent-profile-Bj7N-1jS.js} +1 -1
- package/build/assets/{use-save-settings-DiDEbIJw.js → use-save-settings-BMsb2wk_.js} +1 -1
- package/build/assets/use-settings-B9XEmh7i.js +1 -0
- package/build/assets/use-settings-nav-items-BGfBS0yL.js +16 -0
- package/build/assets/{use-skills-Blpg2BqE.js → use-skills-CSRbvPle.js} +1 -1
- package/build/assets/{use-task-list-CfisapBW.js → use-task-list-CTIVLrQA.js} +1 -1
- package/build/assets/use-tracking-DjdCssvp.js +1 -0
- package/build/assets/{use-user-conversation-BrN2xeQU.js → use-user-conversation-BCpFn-Ei.js} +1 -1
- package/build/assets/{useTranslation-Cbf5AGg_.js → useTranslation-CHm_6BRr.js} +1 -1
- package/build/assets/{utils-DB9LsAzA.js → utils-CrRpzbM2.js} +1 -1
- package/build/assets/vendor-markdown-DzO4uO_0.js +37 -0
- package/build/assets/{vendor~browser-wXQ-WZEC.js → vendor~browser-Byfuq5J-.js} +1 -1
- package/build/assets/{vendor~browser-tab-CsMb-pta.js → vendor~browser-tab-BLk3qxhw.js} +1 -1
- package/build/assets/{vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~dhilvkxv-eGLBu60s.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~dhilvkxv-DTJ_cjR5.js} +2 -2
- package/build/assets/{vendor~files-tab-B-5fBohe.js → vendor~files-tab-XmnauIZI.js} +1 -1
- package/build/assets/{vendor~launch-_Km3J77E.js → vendor~launch-DeC8QhXQ.js} +1 -1
- package/build/assets/{vendor~root-layout~conversation-panel~conversation~shared-conversation-BrguKXCn.js → vendor~root-layout~conversation-panel~conversation~shared-conversation-DDmLzCzm.js} +1 -1
- package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation-YrfJYTQw.js +1 -0
- package/build/assets/{vendor~root-layout~index-home~home~conversation-panel~conversation~launch~skills-settings~a~j2jlu22h-mC0v44WR.js → vendor~root-layout~index-home~home~conversation-panel~conversation~launch~skills-settings~a~j2jlu22h-DoaS51iW.js} +123 -3
- package/build/assets/{vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation~aler~gfu7qdtz-BOKQkbc6.js → vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation~aler~gfu7qdtz-DEYwoy8u.js} +1 -1
- package/build/assets/vendor~root-layout~index-home~home~mcp~automations-list~onboarding-modal-DZHLw5Sr.js +1 -0
- package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~ftka0fnu-cFNmfAE6.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~ftka0fnu-UJ4BNDJP.js} +1 -1
- package/build/assets/{verification-settings-C8KzAdAX.js → verification-settings-uwOfc16F.js} +1 -1
- package/build/index.html +4 -4
- package/build/locales/ar/openhands.json +38 -4
- package/build/locales/ca/openhands.json +38 -4
- package/build/locales/de/openhands.json +38 -4
- package/build/locales/en/openhands.json +38 -4
- package/build/locales/es/openhands.json +38 -4
- package/build/locales/fr/openhands.json +38 -4
- package/build/locales/it/openhands.json +38 -4
- package/build/locales/ja/openhands.json +38 -4
- package/build/locales/ko-KR/openhands.json +38 -4
- package/build/locales/no/openhands.json +38 -4
- package/build/locales/pt/openhands.json +38 -4
- package/build/locales/tr/openhands.json +38 -4
- package/build/locales/uk/openhands.json +38 -4
- package/build/locales/zh-CN/openhands.json +38 -4
- package/build/locales/zh-TW/openhands.json +38 -4
- package/config/defaults.json +7 -3
- package/dist/api/agent-canvas-updates.cjs +2 -0
- package/dist/api/agent-canvas-updates.cjs.map +1 -0
- package/dist/api/agent-canvas-updates.d.ts +7 -0
- package/dist/api/agent-canvas-updates.js +19 -0
- package/dist/api/agent-canvas-updates.js.map +1 -0
- package/dist/api/agent-server-adapter.cjs +1 -1
- package/dist/api/agent-server-adapter.cjs.map +1 -1
- package/dist/api/agent-server-adapter.d.ts +3 -0
- package/dist/api/agent-server-adapter.js +1 -0
- package/dist/api/agent-server-adapter.js.map +1 -1
- package/dist/api/agent-server-compatibility.cjs +1 -1
- package/dist/api/agent-server-compatibility.cjs.map +1 -1
- package/dist/api/agent-server-compatibility.d.ts +5 -0
- package/dist/api/agent-server-compatibility.js +24 -15
- package/dist/api/agent-server-compatibility.js.map +1 -1
- package/dist/api/agent-server-config.cjs +1 -1
- package/dist/api/agent-server-config.cjs.map +1 -1
- package/dist/api/agent-server-config.js +11 -8
- package/dist/api/agent-server-config.js.map +1 -1
- package/dist/api/automation-service/automation-service.api.cjs +2 -0
- package/dist/api/automation-service/automation-service.api.cjs.map +1 -0
- package/dist/api/automation-service/automation-service.api.d.ts +3 -0
- package/dist/api/automation-service/automation-service.api.js +283 -0
- package/dist/api/automation-service/automation-service.api.js.map +1 -0
- package/dist/api/client-source.cjs +1 -1
- package/dist/api/client-source.cjs.map +1 -1
- package/dist/api/client-source.d.ts +3 -0
- package/dist/api/client-source.js +4 -4
- package/dist/api/client-source.js.map +1 -1
- package/dist/api/cloud/settings-service.api.cjs.map +1 -1
- package/dist/api/cloud/settings-service.api.js.map +1 -1
- package/dist/api/conversation-service/agent-server-conversation-service.api.cjs +1 -1
- package/dist/api/conversation-service/agent-server-conversation-service.api.cjs.map +1 -1
- package/dist/api/conversation-service/agent-server-conversation-service.api.js +111 -109
- package/dist/api/conversation-service/agent-server-conversation-service.api.js.map +1 -1
- package/dist/api/mcp-health/mcp-health-store.cjs +2 -0
- package/dist/api/mcp-health/mcp-health-store.cjs.map +1 -0
- package/dist/api/mcp-health/mcp-health-store.d.ts +22 -0
- package/dist/api/mcp-health/mcp-health-store.js +45 -0
- package/dist/api/mcp-health/mcp-health-store.js.map +1 -0
- package/dist/api/mcp-health/probe-mcp-server-health.cjs +2 -0
- package/dist/api/mcp-health/probe-mcp-server-health.cjs.map +1 -0
- package/dist/api/mcp-health/probe-mcp-server-health.d.ts +31 -0
- package/dist/api/mcp-health/probe-mcp-server-health.js +57 -0
- package/dist/api/mcp-health/probe-mcp-server-health.js.map +1 -0
- package/dist/api/mcp-service/mcp-service.api.cjs +1 -1
- package/dist/api/mcp-service/mcp-service.api.cjs.map +1 -1
- package/dist/api/mcp-service/mcp-service.api.js +66 -46
- package/dist/api/mcp-service/mcp-service.api.js.map +1 -1
- package/dist/api/plugins-management-service.cjs.map +1 -1
- package/dist/api/plugins-management-service.d.ts +6 -1
- package/dist/api/plugins-management-service.js.map +1 -1
- package/dist/api/plugins-service.d.ts +30 -2
- package/dist/api/secrets-service.cjs +1 -1
- package/dist/api/secrets-service.cjs.map +1 -1
- package/dist/api/secrets-service.d.ts +6 -6
- package/dist/api/secrets-service.js +8 -3
- package/dist/api/secrets-service.js.map +1 -1
- package/dist/api/settings-service/settings-service.api.cjs +1 -1
- package/dist/api/settings-service/settings-service.api.cjs.map +1 -1
- package/dist/api/settings-service/settings-service.api.d.ts +1 -1
- package/dist/api/settings-service/settings-service.api.js +1 -0
- package/dist/api/settings-service/settings-service.api.js.map +1 -1
- package/dist/components/conversation-events/chat/event-message-components/critic-result-display.cjs +1 -1
- package/dist/components/conversation-events/chat/event-message-components/critic-result-display.js +5 -5
- package/dist/components/features/backends/backend-form-modal.cjs +1 -1
- package/dist/components/features/backends/backend-form-modal.cjs.map +1 -1
- package/dist/components/features/backends/backend-form-modal.d.ts +4 -1
- package/dist/components/features/backends/backend-form-modal.js +15 -16
- package/dist/components/features/backends/backend-form-modal.js.map +1 -1
- package/dist/components/features/backends/backend-selector.cjs +1 -1
- package/dist/components/features/backends/backend-selector.cjs.map +1 -1
- package/dist/components/features/backends/backend-selector.js +103 -102
- package/dist/components/features/backends/backend-selector.js.map +1 -1
- package/dist/components/features/backends/manage-backends-modal.cjs +1 -1
- package/dist/components/features/backends/manage-backends-modal.cjs.map +1 -1
- package/dist/components/features/backends/manage-backends-modal.js +85 -73
- package/dist/components/features/backends/manage-backends-modal.js.map +1 -1
- package/dist/components/features/chat/chat-interface.cjs +2 -2
- package/dist/components/features/chat/chat-interface.cjs.map +1 -1
- package/dist/components/features/chat/chat-interface.js +131 -129
- package/dist/components/features/chat/chat-interface.js.map +1 -1
- package/dist/components/features/chat/confirmation-mode-enabled.cjs +1 -1
- package/dist/components/features/chat/confirmation-mode-enabled.js +4 -4
- package/dist/components/features/chat/skill-install-restart-banner.cjs +2 -0
- package/dist/components/features/chat/skill-install-restart-banner.cjs.map +1 -0
- package/dist/components/features/chat/skill-install-restart-banner.d.ts +11 -0
- package/dist/components/features/chat/skill-install-restart-banner.js +63 -0
- package/dist/components/features/chat/skill-install-restart-banner.js.map +1 -0
- package/dist/components/features/conversation/right-panel-toggle.cjs +1 -1
- package/dist/components/features/conversation/right-panel-toggle.cjs.map +1 -1
- package/dist/components/features/conversation/right-panel-toggle.js +1 -1
- package/dist/components/features/conversation/right-panel-toggle.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-panel.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-panel.js +10 -10
- package/dist/components/features/mcp-page/custom-server-editor.cjs +1 -1
- package/dist/components/features/mcp-page/custom-server-editor.cjs.map +1 -1
- package/dist/components/features/mcp-page/custom-server-editor.js +78 -77
- package/dist/components/features/mcp-page/custom-server-editor.js.map +1 -1
- package/dist/components/features/mcp-page/install-server-modal.cjs +1 -1
- package/dist/components/features/mcp-page/install-server-modal.cjs.map +1 -1
- package/dist/components/features/mcp-page/install-server-modal.d.ts +4 -1
- package/dist/components/features/mcp-page/install-server-modal.js +135 -136
- package/dist/components/features/mcp-page/install-server-modal.js.map +1 -1
- package/dist/components/features/mcp-page/installed-server-card.cjs +1 -1
- package/dist/components/features/mcp-page/installed-server-card.cjs.map +1 -1
- package/dist/components/features/mcp-page/installed-server-card.js +40 -34
- package/dist/components/features/mcp-page/installed-server-card.js.map +1 -1
- package/dist/components/features/mcp-page/mcp-server-health.cjs +2 -0
- package/dist/components/features/mcp-page/mcp-server-health.cjs.map +1 -0
- package/dist/components/features/mcp-page/mcp-server-health.d.ts +18 -0
- package/dist/components/features/mcp-page/mcp-server-health.js +117 -0
- package/dist/components/features/mcp-page/mcp-server-health.js.map +1 -0
- package/dist/components/features/plugins/build-plugins-view-model.d.ts +10 -1
- package/dist/components/features/plugins/plugin-files-section.d.ts +13 -0
- package/dist/components/features/settings/agent-canvas-update-card.cjs +2 -0
- package/dist/components/features/settings/agent-canvas-update-card.cjs.map +1 -0
- package/dist/components/features/settings/agent-canvas-update-card.d.ts +7 -0
- package/dist/components/features/settings/agent-canvas-update-card.js +170 -0
- package/dist/components/features/settings/agent-canvas-update-card.js.map +1 -0
- package/dist/components/features/settings/integrations-settings-link.cjs +2 -0
- package/dist/components/features/settings/integrations-settings-link.cjs.map +1 -0
- package/dist/components/features/settings/integrations-settings-link.d.ts +5 -0
- package/dist/components/features/settings/integrations-settings-link.js +41 -0
- package/dist/components/features/settings/integrations-settings-link.js.map +1 -0
- package/dist/components/features/settings/llm-profiles/llm-settings-local-view.cjs +1 -1
- package/dist/components/features/settings/llm-profiles/llm-settings-local-view.js +1 -1
- package/dist/components/features/settings/settings-desktop-sidebar.cjs +1 -1
- package/dist/components/features/settings/settings-desktop-sidebar.cjs.map +1 -1
- package/dist/components/features/settings/settings-desktop-sidebar.js +31 -21
- package/dist/components/features/settings/settings-desktop-sidebar.js.map +1 -1
- package/dist/components/features/settings/settings-mobile-drawer.cjs +1 -1
- package/dist/components/features/settings/settings-mobile-drawer.cjs.map +1 -1
- package/dist/components/features/settings/settings-mobile-drawer.js +40 -30
- package/dist/components/features/settings/settings-mobile-drawer.js.map +1 -1
- package/dist/components/features/skills/extensions-navigation.cjs +1 -1
- package/dist/components/features/skills/extensions-navigation.cjs.map +1 -1
- package/dist/components/features/skills/extensions-navigation.js +54 -33
- package/dist/components/features/skills/extensions-navigation.js.map +1 -1
- package/dist/config/defaults.cjs +1 -1
- package/dist/config/defaults.cjs.map +1 -1
- package/dist/config/defaults.js +7 -3
- package/dist/config/defaults.js.map +1 -1
- package/dist/constants/acp-providers.cjs.map +1 -1
- package/dist/constants/acp-providers.js.map +1 -1
- package/dist/contexts/conversation-websocket-context.cjs +2 -2
- package/dist/contexts/conversation-websocket-context.cjs.map +1 -1
- package/dist/contexts/conversation-websocket-context.js +169 -166
- package/dist/contexts/conversation-websocket-context.js.map +1 -1
- package/dist/hooks/mutation/use-delete-llm-profile.cjs +1 -1
- package/dist/hooks/mutation/use-delete-llm-profile.js +1 -0
- package/dist/hooks/mutation/use-delete-mcp-server.cjs +1 -1
- package/dist/hooks/mutation/use-delete-mcp-server.cjs.map +1 -1
- package/dist/hooks/mutation/use-delete-mcp-server.js +8 -6
- package/dist/hooks/mutation/use-delete-mcp-server.js.map +1 -1
- package/dist/hooks/mutation/use-rename-llm-profile.cjs +1 -1
- package/dist/hooks/mutation/use-rename-llm-profile.js +1 -0
- package/dist/hooks/mutation/use-save-settings.cjs +1 -1
- package/dist/hooks/mutation/use-save-settings.js +3 -3
- package/dist/hooks/mutation/use-update-mcp-server.cjs +1 -1
- package/dist/hooks/mutation/use-update-mcp-server.cjs.map +1 -1
- package/dist/hooks/mutation/use-update-mcp-server.js +11 -9
- package/dist/hooks/mutation/use-update-mcp-server.js.map +1 -1
- package/dist/hooks/query/query-keys.cjs +1 -1
- package/dist/hooks/query/query-keys.cjs.map +1 -1
- package/dist/hooks/query/query-keys.d.ts +4 -0
- package/dist/hooks/query/query-keys.js +2 -2
- package/dist/hooks/query/query-keys.js.map +1 -1
- package/dist/hooks/query/use-automation-sdk-version.cjs +2 -0
- package/dist/hooks/query/use-automation-sdk-version.cjs.map +1 -0
- package/dist/hooks/query/use-automation-sdk-version.d.ts +3 -0
- package/dist/hooks/query/use-automation-sdk-version.js +63 -0
- package/dist/hooks/query/use-automation-sdk-version.js.map +1 -0
- package/dist/hooks/query/use-latest-agent-canvas-version.cjs +2 -0
- package/dist/hooks/query/use-latest-agent-canvas-version.cjs.map +1 -0
- package/dist/hooks/query/use-latest-agent-canvas-version.d.ts +10 -0
- package/dist/hooks/query/use-latest-agent-canvas-version.js +19 -0
- package/dist/hooks/query/use-latest-agent-canvas-version.js.map +1 -0
- package/dist/hooks/query/use-plugin-file-content.d.ts +7 -0
- package/dist/hooks/query/use-resolved-workspaces.cjs +1 -1
- package/dist/hooks/query/use-resolved-workspaces.cjs.map +1 -1
- package/dist/hooks/query/use-resolved-workspaces.js +25 -26
- package/dist/hooks/query/use-resolved-workspaces.js.map +1 -1
- package/dist/hooks/query/use-search-subdirs.cjs +1 -1
- package/dist/hooks/query/use-search-subdirs.cjs.map +1 -1
- package/dist/hooks/query/use-search-subdirs.d.ts +5 -0
- package/dist/hooks/query/use-search-subdirs.js +16 -4
- package/dist/hooks/query/use-search-subdirs.js.map +1 -1
- package/dist/hooks/use-device-flow.cjs +1 -1
- package/dist/hooks/use-device-flow.js +6 -6
- package/dist/hooks/use-llm-configured.cjs +1 -1
- package/dist/hooks/use-llm-configured.js +3 -3
- package/dist/hooks/use-mcp-server-health.cjs +2 -0
- package/dist/hooks/use-mcp-server-health.cjs.map +1 -0
- package/dist/hooks/use-mcp-server-health.d.ts +11 -0
- package/dist/hooks/use-mcp-server-health.js +18 -0
- package/dist/hooks/use-mcp-server-health.js.map +1 -0
- package/dist/hooks/use-skill-installs.cjs +2 -0
- package/dist/hooks/use-skill-installs.cjs.map +1 -0
- package/dist/hooks/use-skill-installs.d.ts +10 -0
- package/dist/hooks/use-skill-installs.js +21 -0
- package/dist/hooks/use-skill-installs.js.map +1 -0
- package/dist/hooks/use-tracking.cjs +1 -1
- package/dist/hooks/use-tracking.cjs.map +1 -1
- package/dist/hooks/use-tracking.d.ts +3 -3
- package/dist/hooks/use-tracking.js +67 -52
- package/dist/hooks/use-tracking.js.map +1 -1
- package/dist/i18n/declaration.cjs +1 -1
- package/dist/i18n/declaration.cjs.map +1 -1
- package/dist/i18n/declaration.d.ts +35 -1
- package/dist/i18n/declaration.js +1 -1
- package/dist/i18n/declaration.js.map +1 -1
- package/dist/i18n/translation.cjs +3 -3
- package/dist/i18n/translation.cjs.map +1 -1
- package/dist/i18n/translation.js +623 -45
- package/dist/i18n/translation.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -2
- package/dist/lib/index.cjs +1 -1
- package/dist/lib/index.d.ts +0 -1
- package/dist/lib/index.js +0 -1
- package/dist/locales/ar/openhands.json +38 -4
- package/dist/locales/ca/openhands.json +38 -4
- package/dist/locales/de/openhands.json +38 -4
- package/dist/locales/en/openhands.json +38 -4
- package/dist/locales/es/openhands.json +38 -4
- package/dist/locales/fr/openhands.json +38 -4
- package/dist/locales/it/openhands.json +38 -4
- package/dist/locales/ja/openhands.json +38 -4
- package/dist/locales/ko-KR/openhands.json +38 -4
- package/dist/locales/no/openhands.json +38 -4
- package/dist/locales/pt/openhands.json +38 -4
- package/dist/locales/tr/openhands.json +38 -4
- package/dist/locales/uk/openhands.json +38 -4
- package/dist/locales/zh-CN/openhands.json +38 -4
- package/dist/locales/zh-TW/openhands.json +38 -4
- package/dist/node_modules/@openhands/extensions/integrations/catalog/atlassian-rovo.cjs +2 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/atlassian-rovo.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/atlassian-rovo.js +44 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/atlassian-rovo.js.map +1 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/atlassian.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/atlassian.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/atlassian.js +13 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/atlassian.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/github.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/github.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/github.js +21 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/github.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/linear.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/linear.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/linear.js +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/linear.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-outlook.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-outlook.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-outlook.js +13 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-outlook.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-teams.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-teams.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-teams.js +13 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-teams.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/notion.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/notion.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/notion.js +13 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/notion.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/onedrive.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/onedrive.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/onedrive.js +13 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/onedrive.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/sharepoint.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/sharepoint.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/sharepoint.js +13 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/sharepoint.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/slack.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/slack.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/slack.js +16 -2
- package/dist/node_modules/@openhands/extensions/integrations/catalog/slack.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/vanta.cjs +2 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/vanta.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/vanta.js +46 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/vanta.js.map +1 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog-index.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog-index.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog-index.js +74 -70
- package/dist/node_modules/@openhands/extensions/integrations/catalog-index.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/skills/index.cjs +123 -3
- package/dist/node_modules/@openhands/extensions/skills/index.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/skills/index.js +7 -1
- package/dist/node_modules/@openhands/extensions/skills/index.js.map +1 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.js +9 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/info.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/info.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/info.js +21 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/info.js.map +1 -0
- package/dist/package.cjs +1 -1
- package/dist/package.cjs.map +1 -1
- package/dist/package.js +10 -3
- package/dist/package.js.map +1 -1
- package/dist/routes/app-settings.cjs +1 -1
- package/dist/routes/app-settings.cjs.map +1 -1
- package/dist/routes/app-settings.js +113 -67
- package/dist/routes/app-settings.js.map +1 -1
- package/dist/routes/mcp.cjs +1 -1
- package/dist/routes/mcp.cjs.map +1 -1
- package/dist/routes/mcp.js +1 -0
- package/dist/routes/mcp.js.map +1 -1
- package/dist/services/cloud-funnel-analytics.cjs +1 -1
- package/dist/services/cloud-funnel-analytics.cjs.map +1 -1
- package/dist/services/cloud-funnel-analytics.d.ts +2 -2
- package/dist/services/cloud-funnel-analytics.js +18 -16
- package/dist/services/cloud-funnel-analytics.js.map +1 -1
- package/dist/services/settings.cjs +1 -1
- package/dist/services/settings.cjs.map +1 -1
- package/dist/services/settings.js +1 -0
- package/dist/services/settings.js.map +1 -1
- package/dist/services/telemetry-context.cjs +2 -0
- package/dist/services/telemetry-context.cjs.map +1 -0
- package/dist/services/telemetry-context.d.ts +17 -0
- package/dist/services/telemetry-context.js +27 -0
- package/dist/services/telemetry-context.js.map +1 -0
- package/dist/services/telemetry.cjs +1 -1
- package/dist/services/telemetry.cjs.map +1 -1
- package/dist/services/telemetry.d.ts +7 -5
- package/dist/services/telemetry.js +132 -123
- package/dist/services/telemetry.js.map +1 -1
- package/dist/stores/skill-install-banner-store.cjs +2 -0
- package/dist/stores/skill-install-banner-store.cjs.map +1 -0
- package/dist/stores/skill-install-banner-store.d.ts +32 -0
- package/dist/stores/skill-install-banner-store.js +14 -0
- package/dist/stores/skill-install-banner-store.js.map +1 -0
- package/dist/stores/use-event-store.cjs +1 -1
- package/dist/stores/use-event-store.cjs.map +1 -1
- package/dist/stores/use-event-store.js +35 -35
- package/dist/stores/use-event-store.js.map +1 -1
- package/dist/types/mcp-health.cjs +2 -0
- package/dist/types/mcp-health.cjs.map +1 -0
- package/dist/types/mcp-health.d.ts +21 -0
- package/dist/types/mcp-health.js +6 -0
- package/dist/types/mcp-health.js.map +1 -0
- package/dist/types/settings.d.ts +1 -0
- package/dist/utils/handle-event-for-ui.cjs +1 -1
- package/dist/utils/handle-event-for-ui.cjs.map +1 -1
- package/dist/utils/handle-event-for-ui.d.ts +5 -0
- package/dist/utils/handle-event-for-ui.js +71 -57
- package/dist/utils/handle-event-for-ui.js.map +1 -1
- package/dist/utils/mcp-credential-validation.cjs +1 -1
- package/dist/utils/mcp-credential-validation.cjs.map +1 -1
- package/dist/utils/mcp-credential-validation.js +32 -16
- package/dist/utils/mcp-credential-validation.js.map +1 -1
- package/dist/utils/mcp-server-health-key.cjs +2 -0
- package/dist/utils/mcp-server-health-key.cjs.map +1 -0
- package/dist/utils/mcp-server-health-key.d.ts +16 -0
- package/dist/utils/mcp-server-health-key.js +23 -0
- package/dist/utils/mcp-server-health-key.js.map +1 -0
- package/dist/utils/mcp-test-error-message.cjs +2 -0
- package/dist/utils/mcp-test-error-message.cjs.map +1 -0
- package/dist/utils/mcp-test-error-message.d.ts +8 -0
- package/dist/utils/mcp-test-error-message.js +14 -0
- package/dist/utils/mcp-test-error-message.js.map +1 -0
- package/dist/utils/redact-mcp-secrets.cjs +2 -0
- package/dist/utils/redact-mcp-secrets.cjs.map +1 -0
- package/dist/utils/redact-mcp-secrets.d.ts +13 -0
- package/dist/utils/redact-mcp-secrets.js +57 -0
- package/dist/utils/redact-mcp-secrets.js.map +1 -0
- package/dist/utils/settings-utils.cjs.map +1 -1
- package/dist/utils/settings-utils.js.map +1 -1
- package/dist/utils/skill-install-events.cjs +3 -0
- package/dist/utils/skill-install-events.cjs.map +1 -0
- package/dist/utils/skill-install-events.d.ts +16 -0
- package/dist/utils/skill-install-events.js +26 -0
- package/dist/utils/skill-install-events.js.map +1 -0
- package/dist/utils/title-llm-profile.cjs +2 -0
- package/dist/utils/title-llm-profile.cjs.map +1 -0
- package/dist/utils/title-llm-profile.d.ts +2 -0
- package/dist/utils/title-llm-profile.js +11 -0
- package/dist/utils/title-llm-profile.js.map +1 -0
- package/package.json +10 -3
- package/scripts/check-sdk-version-sync.mjs +6 -6
- package/scripts/check-translation-completeness.cjs +2 -0
- package/scripts/dev-process-utils.mjs +62 -1
- package/scripts/dev-safe.mjs +2 -2
- package/scripts/dev-static.mjs +5 -3
- package/scripts/dev-with-automation.mjs +98 -14
- package/scripts/download-node.mjs +382 -0
- package/scripts/download-uv.mjs +204 -0
- package/scripts/logger.mjs +64 -35
- package/build/assets/agent-server-compatibility-C0MtTTwb.js +0 -1
- package/build/assets/agent-server-conversation-service.api-lzc8dabY.js +0 -41
- package/build/assets/agent-settings-GwiXe_6k.js +0 -2
- package/build/assets/agent-settings-OdsyI2gX.js +0 -1
- package/build/assets/api-key-entry-screen-2gsoZAOK.js +0 -1
- package/build/assets/app-settings-CD9euh81.js +0 -1
- package/build/assets/automation-export-Djc8Tf0M.js +0 -2
- package/build/assets/automations-list-Dtiolk1h.js +0 -1
- package/build/assets/backend-form-modal-B8GtBA-J.js +0 -1
- package/build/assets/browser-store-BI6uklCG.js +0 -1
- package/build/assets/chat-send-button-BZHG2hAW.js +0 -1
- package/build/assets/client-source-CtQjJEy6.js +0 -1
- package/build/assets/cloud-funnel-analytics-uzzLlLuj.js +0 -1
- package/build/assets/conversation-B8d8_Upd.js +0 -1
- package/build/assets/conversation-Lmqm6VJC.js +0 -89
- package/build/assets/conversation-panel-B8n40Swu.js +0 -1
- package/build/assets/conversation-state-store-B2Bp32XI.js +0 -1
- package/build/assets/declaration-BGsHjPEW.js +0 -1
- package/build/assets/extensions-hub-DqvwvpCi.js +0 -1
- package/build/assets/extensions-navigation-BMc9Nluv.js +0 -1
- package/build/assets/files-tab-BAkaV4aO.js +0 -1
- package/build/assets/files-tab-store-DJsPxYdg.js +0 -1
- package/build/assets/git-provider-icon-xvbukHaT.js +0 -1
- package/build/assets/home-D01kSnmo.js +0 -1
- package/build/assets/home-NZO2bF4N.js +0 -1
- package/build/assets/index-home-BsI6i0TC.js +0 -1
- package/build/assets/install-server-modal-BYjqoRyX.js +0 -1
- package/build/assets/lesson-plan-cNUjpdFx.js +0 -4
- package/build/assets/llm-not-configured-banner-DUPyoFIZ.js +0 -27
- package/build/assets/llm-settings-Cs_iieFY.js +0 -1
- package/build/assets/llm-settings-J2ke2foG.js +0 -1
- package/build/assets/manage-backends-modal-nMoCZ2a0.js +0 -1
- package/build/assets/manifest-f1b46f62.js +0 -1
- package/build/assets/markdown-renderer-B4V2OMFP.js +0 -2
- package/build/assets/mcp-kZM-cAZw.js +0 -9
- package/build/assets/messages-CJAv5n4j.js +0 -40
- package/build/assets/objectWithoutPropertiesLoose-BgYIAs2y.js +0 -1
- package/build/assets/onboarding-Dx8n8HFr.js +0 -1
- package/build/assets/onboarding-modal-Bxuxpfdz.js +0 -1
- package/build/assets/recommended-automations-launcher-BWRRvMPE.js +0 -58
- package/build/assets/refresh-cw-B9B7-vsy.js +0 -1
- package/build/assets/root-CYWeTrWE.css +0 -1
- package/build/assets/root-layout-ClEl-JlJ.js +0 -2
- package/build/assets/root-oT83qVlk.js +0 -2
- package/build/assets/sdk-section-page-Cwj0T4gF.js +0 -1
- package/build/assets/secrets-settings-Bc_pBX6F.js +0 -1
- package/build/assets/settings-index-BzSIM1-N.js +0 -1
- package/build/assets/settings-modal-BnZ7mMu7.js +0 -1
- package/build/assets/settings-n9a395O0.js +0 -1
- package/build/assets/shared-conversation-CIDDti9I.js +0 -1
- package/build/assets/sidebar-mobile-menu-toggle-CTX7J4wM.js +0 -1
- package/build/assets/skills-plugins-HZEbNDmX.js +0 -1
- package/build/assets/skills-settings-BdqijFlC.js +0 -2
- package/build/assets/telemetry-SHxpVxk8.js +0 -2
- package/build/assets/use-activate-agent-profile-BRDdSwQ0.js +0 -1
- package/build/assets/use-backends-health-BagmAE_W.js +0 -1
- package/build/assets/use-config-B39iHYFi.js +0 -1
- package/build/assets/use-event-store-Bbaz51GR.js +0 -4
- package/build/assets/use-llm-profiles-CgRtnj74.js +0 -1
- package/build/assets/use-plugins-marketplace-DOJp9rlE.js +0 -1
- package/build/assets/use-runtime-is-ready-ziHQvXZQ.js +0 -1
- package/build/assets/use-settings-BeJap6YL.js +0 -1
- package/build/assets/use-settings-nav-items-D5JJjFHJ.js +0 -16
- package/build/assets/use-tracking-DFoPQUSU.js +0 -1
- package/build/assets/useMutationState-OnAsCLA_.js +0 -1
- package/build/assets/vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-BD7v71DM.js +0 -2
- package/build/assets/vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-BT05Osu4.js +0 -28
- package/build/assets/vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-COhHANvV.js +0 -2
- package/build/assets/vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-DgzWSMRc.js +0 -2
- package/build/assets/vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-DqZatR3B.js +0 -7
- package/build/assets/vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-FghQ3Z1a.js +0 -1
- package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation-BTvhGHHG.js +0 -1
- package/build/assets/vendor~root-layout~index-home~home~mcp~automations-list~onboarding-modal-C4-GDgiF.js +0 -1
- package/dist/components/features/analytics/telemetry-consent-banner.cjs +0 -2
- package/dist/components/features/analytics/telemetry-consent-banner.cjs.map +0 -1
- package/dist/components/features/analytics/telemetry-consent-banner.d.ts +0 -29
- package/dist/components/features/analytics/telemetry-consent-banner.js +0 -59
- package/dist/components/features/analytics/telemetry-consent-banner.js.map +0 -1
- /package/build/assets/{__vite-browser-external-BQUj0sYu.js → __vite-browser-external-CKHVBTNC.js} +0 -0
- /package/build/assets/{agent-server-ui-style-scope-qhnhZHBV.js → agent-server-ui-style-scope-BvSa9on7.js} +0 -0
- /package/build/assets/{automation-LZB0MjdV.js → automation-BGiPmxFR.js} +0 -0
- /package/build/assets/{canvas-ui-COgjltGz.js → canvas-ui-CC4EJo-H.js} +0 -0
- /package/build/assets/{checkmark-h7udgXMM.js → checkmark-ygQB1AtV.js} +0 -0
- /package/build/assets/{close-DLFb5kfv.js → close-BjSA0HWT.js} +0 -0
- /package/build/assets/{code-tag-DYlAhEQY.js → code-tag-D9aPPbOe.js} +0 -0
- /package/build/assets/{common-CxbUL3nR.js → common-CCuqQy_S.js} +0 -0
- /package/build/assets/{conversation-local-storage-F6zVMM--.js → conversation-local-storage-BDjWPg0Z.js} +0 -0
- /package/build/assets/{copy-BLmGeJcd.js → copy-Dce7sOvS.js} +0 -0
- /package/build/assets/{copy-D1YGjP-C.js → copy-iPJAncAj.js} +0 -0
- /package/build/assets/{dist-CodhvuAP.js → dist-D9PhjOaq.js} +0 -0
- /package/build/assets/{environment-switch-store-DkjlKWzN.js → environment-switch-store-DHfcz4M4.js} +0 -0
- /package/build/assets/{extension-module-card-classes-9V3J9J_b.js → extension-module-card-classes-BpebKiN6.js} +0 -0
- /package/build/assets/{external-link-lhdITPqq.js → external-link-CpPMXxrV.js} +0 -0
- /package/build/assets/{folder-Bk311brm.js → folder-BabbYnbF.js} +0 -0
- /package/build/assets/{format-time-delta-DhDbkD7V.js → format-time-delta-BkAmJEPT.js} +0 -0
- /package/build/assets/{get-language-from-path-DBqBsCWH.js → get-language-from-path-CPNnuVhI.js} +0 -0
- /package/build/assets/{git-status-mapper-DnL9OC8_.js → git-status-mapper-BIXK0AAG.js} +0 -0
- /package/build/assets/{iconBase-Dz51Zn5x.js → iconBase-Ch-fOe8B.js} +0 -0
- /package/build/assets/{link-external-CaBmUEs_.js → link-external-DfKQroKX.js} +0 -0
- /package/build/assets/{list-todo-CAtvkzcy.js → list-todo-6J6zc8oS.js} +0 -0
- /package/build/assets/{llm-subscription-DtsX5Lhg.js → llm-subscription-Bvu8BLXc.js} +0 -0
- /package/build/assets/{loader-circle-CsAsfLIs.js → loader-circle-DGsqG5qw.js} +0 -0
- /package/build/assets/{map-provider-BbIb12oh.js → map-provider-BSvXvVR0.js} +0 -0
- /package/build/assets/{middleware-DYHYNAnP.js → middleware-_izt7V6U.js} +0 -0
- /package/build/assets/{modal-backdrop-zVwfOJZr.js → modal-backdrop-B7H42xHG.js} +0 -0
- /package/build/assets/{navigation-context-DPs2G0X8.js → navigation-context-cvyvI1WA.js} +0 -0
- /package/build/assets/{openhands-logo-bcNw5bkY.js → openhands-logo-pEw0nKFP.js} +0 -0
- /package/build/assets/{pencil-CWhApFIT.js → pencil-DmSqWUA3.js} +0 -0
- /package/build/assets/{react-DPDgL6du.js → react-MKQOkha9.js} +0 -0
- /package/build/assets/{search-BgOCR7_c.js → search-B5D5EuSn.js} +0 -0
- /package/build/assets/{search-dIQ09UY2.js → search-vnYL5jwV.js} +0 -0
- /package/build/assets/{settings-gear-MXCyZW0x.js → settings-gear-BOwF59Bs.js} +0 -0
- /package/build/assets/{settings-section-header-context-COMOIaxV.js → settings-section-header-context-CGgHZXrf.js} +0 -0
- /package/build/assets/{skills-EqzxYBvT.js → skills-arUOHLcS.js} +0 -0
- /package/build/assets/{square-chevron-right-DE-JN-2Z.js → square-chevron-right-EizCGtgq.js} +0 -0
- /package/build/assets/{switch-skeleton-DqQwalyu.js → switch-skeleton-BjPRx1QD.js} +0 -0
- /package/build/assets/{terminal-Cgf___rK.js → terminal-a57bHgZs.js} +0 -0
- /package/build/assets/{trash-2-BU6BlW4i.js → trash-2-CF3hilrY.js} +0 -0
- /package/build/assets/{u-check-circle-BqoIxNz_.js → u-check-circle-WGqHdtfO.js} +0 -0
- /package/build/assets/{u-check-circle-half-MsShT8Ec.js → u-check-circle-half-LiwZkuFe.js} +0 -0
- /package/build/assets/{u-edit-DL5LgKon.js → u-edit-BwHepAPi.js} +0 -0
- /package/build/assets/{use-breakpoint-BP3lqLMx.js → use-breakpoint-B-O0lQ84.js} +0 -0
- /package/build/assets/{use-click-outside-element-D9BYdANT.js → use-click-outside-element-DLQIMQrz.js} +0 -0
- /package/build/assets/{use-is-authed-BezEyfeh.js → use-is-authed-BSeo4coy.js} +0 -0
- /package/build/assets/{use-onboarding-completion-C_Swglzp.js → use-onboarding-completion-C0hPNGpw.js} +0 -0
- /package/build/assets/{v4-DbCkTSoU.js → v4-q4yWTlMz.js} +0 -0
- /package/build/assets/{vendor~browser-By2MVv_N.js → vendor~browser-UwB1jbAZ.js} +0 -0
- /package/build/assets/{vendor~conversation-panel~conversation~alert-banner-CxfzCmkN.js → vendor~conversation-panel~conversation~alert-banner-DHDkknt5.js} +0 -0
- /package/build/assets/{vendor~index-home~home~conversation-panel~conversation-ChmYLVgz.js → vendor~index-home~home~conversation-panel~conversation-Bff9cq5J.js} +0 -0
- /package/build/assets/{vendor~module-D5a_AClf.js → vendor~module-D4DeFV4J.js} +0 -0
- /package/build/assets/{vendor~terminal-CnKZILnC.js → vendor~terminal-B7Eiak0-.js} +0 -0
- /package/build/assets/{x-ZE4iplpF.js → x-DQB_00VJ.js} +0 -0
- /package/build/assets/{x-mark-Batp6gXa.js → x-mark-B32XuEwS.js} +0 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require(`../../_virtual/_rolldown/runtime.cjs`),t=require(`../../api/backend-registry/active-store.cjs`),n=require(`../../contexts/active-backend-context.cjs`),r=require(`../../api/automation-service/automation-service.api.cjs`);let i=require(`react`);i=e.__toESM(i,1);var a=`automation-sdk-version`,o=3600*1e3,s=`\0`,c=new Map,l=new Map;function u(e){let t=c.get(e);if(t){if(t.expiresAt<=Date.now()){c.delete(e);return}return t.version}}function d(e,t){c.set(e,{expiresAt:Date.now()+o,version:t})}function f(e){let t=u(e);if(t!==void 0)return Promise.resolve(t);let n=l.get(e);if(n)return n;if(typeof r.default.getSdkVersion!=`function`)return d(e,null),Promise.resolve(null);let i=r.default.getSdkVersion().then(t=>(d(e,t),t)).catch(()=>(d(e,null),null)).finally(()=>{l.delete(e)});return l.set(e,i),i}function p(){let e=n.useActiveBackend(),{backend:r}=e,o=[a,r.id,r.kind,r.host,e.orgId??``].join(s),[c,l]=i.default.useState(()=>u(o)??null);return i.default.useEffect(()=>{if(t.isNoBackend(r)){l(null);return}let e=u(o);if(e!==void 0){l(e);return}let n=!0;return l(null),f(o).then(e=>{n&&l(e)}),()=>{n=!1}},[r,o]),c}exports.useAutomationSdkVersion=p;
|
|
2
|
+
//# sourceMappingURL=use-automation-sdk-version.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-automation-sdk-version.cjs","names":[],"sources":["../../../src/hooks/query/use-automation-sdk-version.ts"],"sourcesContent":["import React from \"react\";\nimport AutomationService from \"#/api/automation-service/automation-service.api\";\nimport { isNoBackend } from \"#/api/backend-registry/active-store\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\n\nexport const AUTOMATION_SDK_VERSION_CACHE_NAMESPACE = \"automation-sdk-version\";\n\nconst AUTOMATION_SDK_VERSION_CACHE_TIME_MS = 60 * 60 * 1000;\nconst CACHE_KEY_SEPARATOR = \"\\u0000\";\n\ninterface AutomationSdkVersionCacheEntry {\n expiresAt: number;\n version: string | null;\n}\n\nconst sdkVersionCache = new Map<string, AutomationSdkVersionCacheEntry>();\nconst sdkVersionRequests = new Map<string, Promise<string | null>>();\n\nexport function __resetAutomationSdkVersionCacheForTests() {\n sdkVersionCache.clear();\n sdkVersionRequests.clear();\n}\n\nfunction readCachedSdkVersion(cacheKey: string): string | null | undefined {\n const cached = sdkVersionCache.get(cacheKey);\n if (!cached) return undefined;\n\n if (cached.expiresAt <= Date.now()) {\n sdkVersionCache.delete(cacheKey);\n return undefined;\n }\n\n return cached.version;\n}\n\nfunction writeCachedSdkVersion(cacheKey: string, version: string | null) {\n sdkVersionCache.set(cacheKey, {\n expiresAt: Date.now() + AUTOMATION_SDK_VERSION_CACHE_TIME_MS,\n version,\n });\n}\n\nfunction getCachedOrFetchSdkVersion(cacheKey: string) {\n const cached = readCachedSdkVersion(cacheKey);\n if (cached !== undefined) return Promise.resolve(cached);\n\n const existingRequest = sdkVersionRequests.get(cacheKey);\n if (existingRequest) return existingRequest;\n\n if (typeof AutomationService.getSdkVersion !== \"function\") {\n writeCachedSdkVersion(cacheKey, null);\n return Promise.resolve(null);\n }\n\n const request = AutomationService.getSdkVersion()\n .then((version) => {\n writeCachedSdkVersion(cacheKey, version);\n return version;\n })\n .catch(() => {\n writeCachedSdkVersion(cacheKey, null);\n return null;\n })\n .finally(() => {\n sdkVersionRequests.delete(cacheKey);\n });\n sdkVersionRequests.set(cacheKey, request);\n return request;\n}\n\nexport function useAutomationSdkVersion() {\n const active = useActiveBackend();\n const { backend } = active;\n const cacheKey = [\n AUTOMATION_SDK_VERSION_CACHE_NAMESPACE,\n backend.id,\n backend.kind,\n backend.host,\n active.orgId ?? \"\",\n ].join(CACHE_KEY_SEPARATOR);\n\n const [automationSdkVersion, setAutomationSdkVersion] = React.useState<\n string | null\n >(() => readCachedSdkVersion(cacheKey) ?? null);\n\n React.useEffect(() => {\n if (isNoBackend(backend)) {\n setAutomationSdkVersion(null);\n return undefined;\n }\n\n const cached = readCachedSdkVersion(cacheKey);\n if (cached !== undefined) {\n setAutomationSdkVersion(cached);\n return undefined;\n }\n\n let isMounted = true;\n setAutomationSdkVersion(null);\n void getCachedOrFetchSdkVersion(cacheKey).then((version) => {\n if (isMounted) {\n setAutomationSdkVersion(version);\n }\n });\n\n return () => {\n isMounted = false;\n };\n }, [backend, cacheKey]);\n\n return automationSdkVersion;\n}\n"],"mappings":"qRAKA,IAAa,EAAyC,yBAEhD,EAAuC,KAAU,IACjD,EAAsB,KAOtB,EAAkB,IAAI,IACtB,EAAqB,IAAI,IAO/B,SAAS,EAAqB,EAA6C,CACzE,IAAM,EAAS,EAAgB,IAAI,EAAS,CACvC,KAEL,IAAI,EAAO,WAAa,KAAK,KAAK,CAAE,CAClC,EAAgB,OAAO,EAAS,CAChC,OAGF,OAAO,EAAO,SAGhB,SAAS,EAAsB,EAAkB,EAAwB,CACvE,EAAgB,IAAI,EAAU,CAC5B,UAAW,KAAK,KAAK,CAAG,EACxB,UACD,CAAC,CAGJ,SAAS,EAA2B,EAAkB,CACpD,IAAM,EAAS,EAAqB,EAAS,CAC7C,GAAI,IAAW,IAAA,GAAW,OAAO,QAAQ,QAAQ,EAAO,CAExD,IAAM,EAAkB,EAAmB,IAAI,EAAS,CACxD,GAAI,EAAiB,OAAO,EAE5B,GAAI,OAAO,EAAA,QAAkB,eAAkB,WAE7C,OADA,EAAsB,EAAU,KAAK,CAC9B,QAAQ,QAAQ,KAAK,CAG9B,IAAM,EAAU,EAAA,QAAkB,eAAe,CAC9C,KAAM,IACL,EAAsB,EAAU,EAAQ,CACjC,GACP,CACD,WACC,EAAsB,EAAU,KAAK,CAC9B,MACP,CACD,YAAc,CACb,EAAmB,OAAO,EAAS,EACnC,CAEJ,OADA,EAAmB,IAAI,EAAU,EAAQ,CAClC,EAGT,SAAgB,GAA0B,CACxC,IAAM,EAAS,EAAA,kBAAkB,CAC3B,CAAE,WAAY,EACd,EAAW,CACf,EACA,EAAQ,GACR,EAAQ,KACR,EAAQ,KACR,EAAO,OAAS,GACjB,CAAC,KAAK,EAAoB,CAErB,CAAC,EAAsB,GAA2B,EAAA,QAAM,aAEtD,EAAqB,EAAS,EAAI,KAAK,CA2B/C,OAzBA,EAAA,QAAM,cAAgB,CACpB,GAAI,EAAA,YAAY,EAAQ,CAAE,CACxB,EAAwB,KAAK,CAC7B,OAGF,IAAM,EAAS,EAAqB,EAAS,CAC7C,GAAI,IAAW,IAAA,GAAW,CACxB,EAAwB,EAAO,CAC/B,OAGF,IAAI,EAAY,GAQhB,OAPA,EAAwB,KAAK,CACxB,EAA2B,EAAS,CAAC,KAAM,GAAY,CACtD,GACF,EAAwB,EAAQ,EAElC,KAEW,CACX,EAAY,KAEb,CAAC,EAAS,EAAS,CAAC,CAEhB"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { isNoBackend as e } from "../../api/backend-registry/active-store.js";
|
|
2
|
+
import { useActiveBackend as t } from "../../contexts/active-backend-context.js";
|
|
3
|
+
import n from "../../api/automation-service/automation-service.api.js";
|
|
4
|
+
import r from "react";
|
|
5
|
+
//#region src/hooks/query/use-automation-sdk-version.ts
|
|
6
|
+
var i = "automation-sdk-version", a = 3600 * 1e3, o = "\0", s = /* @__PURE__ */ new Map(), c = /* @__PURE__ */ new Map();
|
|
7
|
+
function l(e) {
|
|
8
|
+
let t = s.get(e);
|
|
9
|
+
if (t) {
|
|
10
|
+
if (t.expiresAt <= Date.now()) {
|
|
11
|
+
s.delete(e);
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
return t.version;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
function u(e, t) {
|
|
18
|
+
s.set(e, {
|
|
19
|
+
expiresAt: Date.now() + a,
|
|
20
|
+
version: t
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
function d(e) {
|
|
24
|
+
let t = l(e);
|
|
25
|
+
if (t !== void 0) return Promise.resolve(t);
|
|
26
|
+
let r = c.get(e);
|
|
27
|
+
if (r) return r;
|
|
28
|
+
if (typeof n.getSdkVersion != "function") return u(e, null), Promise.resolve(null);
|
|
29
|
+
let i = n.getSdkVersion().then((t) => (u(e, t), t)).catch(() => (u(e, null), null)).finally(() => {
|
|
30
|
+
c.delete(e);
|
|
31
|
+
});
|
|
32
|
+
return c.set(e, i), i;
|
|
33
|
+
}
|
|
34
|
+
function f() {
|
|
35
|
+
let n = t(), { backend: a } = n, s = [
|
|
36
|
+
i,
|
|
37
|
+
a.id,
|
|
38
|
+
a.kind,
|
|
39
|
+
a.host,
|
|
40
|
+
n.orgId ?? ""
|
|
41
|
+
].join(o), [c, u] = r.useState(() => l(s) ?? null);
|
|
42
|
+
return r.useEffect(() => {
|
|
43
|
+
if (e(a)) {
|
|
44
|
+
u(null);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
let t = l(s);
|
|
48
|
+
if (t !== void 0) {
|
|
49
|
+
u(t);
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
let n = !0;
|
|
53
|
+
return u(null), d(s).then((e) => {
|
|
54
|
+
n && u(e);
|
|
55
|
+
}), () => {
|
|
56
|
+
n = !1;
|
|
57
|
+
};
|
|
58
|
+
}, [a, s]), c;
|
|
59
|
+
}
|
|
60
|
+
//#endregion
|
|
61
|
+
export { f as useAutomationSdkVersion };
|
|
62
|
+
|
|
63
|
+
//# sourceMappingURL=use-automation-sdk-version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-automation-sdk-version.js","names":[],"sources":["../../../src/hooks/query/use-automation-sdk-version.ts"],"sourcesContent":["import React from \"react\";\nimport AutomationService from \"#/api/automation-service/automation-service.api\";\nimport { isNoBackend } from \"#/api/backend-registry/active-store\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\n\nexport const AUTOMATION_SDK_VERSION_CACHE_NAMESPACE = \"automation-sdk-version\";\n\nconst AUTOMATION_SDK_VERSION_CACHE_TIME_MS = 60 * 60 * 1000;\nconst CACHE_KEY_SEPARATOR = \"\\u0000\";\n\ninterface AutomationSdkVersionCacheEntry {\n expiresAt: number;\n version: string | null;\n}\n\nconst sdkVersionCache = new Map<string, AutomationSdkVersionCacheEntry>();\nconst sdkVersionRequests = new Map<string, Promise<string | null>>();\n\nexport function __resetAutomationSdkVersionCacheForTests() {\n sdkVersionCache.clear();\n sdkVersionRequests.clear();\n}\n\nfunction readCachedSdkVersion(cacheKey: string): string | null | undefined {\n const cached = sdkVersionCache.get(cacheKey);\n if (!cached) return undefined;\n\n if (cached.expiresAt <= Date.now()) {\n sdkVersionCache.delete(cacheKey);\n return undefined;\n }\n\n return cached.version;\n}\n\nfunction writeCachedSdkVersion(cacheKey: string, version: string | null) {\n sdkVersionCache.set(cacheKey, {\n expiresAt: Date.now() + AUTOMATION_SDK_VERSION_CACHE_TIME_MS,\n version,\n });\n}\n\nfunction getCachedOrFetchSdkVersion(cacheKey: string) {\n const cached = readCachedSdkVersion(cacheKey);\n if (cached !== undefined) return Promise.resolve(cached);\n\n const existingRequest = sdkVersionRequests.get(cacheKey);\n if (existingRequest) return existingRequest;\n\n if (typeof AutomationService.getSdkVersion !== \"function\") {\n writeCachedSdkVersion(cacheKey, null);\n return Promise.resolve(null);\n }\n\n const request = AutomationService.getSdkVersion()\n .then((version) => {\n writeCachedSdkVersion(cacheKey, version);\n return version;\n })\n .catch(() => {\n writeCachedSdkVersion(cacheKey, null);\n return null;\n })\n .finally(() => {\n sdkVersionRequests.delete(cacheKey);\n });\n sdkVersionRequests.set(cacheKey, request);\n return request;\n}\n\nexport function useAutomationSdkVersion() {\n const active = useActiveBackend();\n const { backend } = active;\n const cacheKey = [\n AUTOMATION_SDK_VERSION_CACHE_NAMESPACE,\n backend.id,\n backend.kind,\n backend.host,\n active.orgId ?? \"\",\n ].join(CACHE_KEY_SEPARATOR);\n\n const [automationSdkVersion, setAutomationSdkVersion] = React.useState<\n string | null\n >(() => readCachedSdkVersion(cacheKey) ?? null);\n\n React.useEffect(() => {\n if (isNoBackend(backend)) {\n setAutomationSdkVersion(null);\n return undefined;\n }\n\n const cached = readCachedSdkVersion(cacheKey);\n if (cached !== undefined) {\n setAutomationSdkVersion(cached);\n return undefined;\n }\n\n let isMounted = true;\n setAutomationSdkVersion(null);\n void getCachedOrFetchSdkVersion(cacheKey).then((version) => {\n if (isMounted) {\n setAutomationSdkVersion(version);\n }\n });\n\n return () => {\n isMounted = false;\n };\n }, [backend, cacheKey]);\n\n return automationSdkVersion;\n}\n"],"mappings":";;;;;AAKA,IAAa,IAAyC,0BAEhD,IAAuC,OAAU,KACjD,IAAsB,MAOtB,oBAAkB,IAAI,KAA6C,EACnE,oBAAqB,IAAI,KAAqC;AAOpE,SAAS,EAAqB,GAA6C;CACzE,IAAM,IAAS,EAAgB,IAAI,EAAS;AACvC,QAEL;MAAI,EAAO,aAAa,KAAK,KAAK,EAAE;AAClC,KAAgB,OAAO,EAAS;AAChC;;AAGF,SAAO,EAAO;;;AAGhB,SAAS,EAAsB,GAAkB,GAAwB;AACvE,GAAgB,IAAI,GAAU;EAC5B,WAAW,KAAK,KAAK,GAAG;EACxB;EACD,CAAC;;AAGJ,SAAS,EAA2B,GAAkB;CACpD,IAAM,IAAS,EAAqB,EAAS;AAC7C,KAAI,MAAW,KAAA,EAAW,QAAO,QAAQ,QAAQ,EAAO;CAExD,IAAM,IAAkB,EAAmB,IAAI,EAAS;AACxD,KAAI,EAAiB,QAAO;AAE5B,KAAI,OAAO,EAAkB,iBAAkB,WAE7C,QADA,EAAsB,GAAU,KAAK,EAC9B,QAAQ,QAAQ,KAAK;CAG9B,IAAM,IAAU,EAAkB,eAAe,CAC9C,MAAM,OACL,EAAsB,GAAU,EAAQ,EACjC,GACP,CACD,aACC,EAAsB,GAAU,KAAK,EAC9B,MACP,CACD,cAAc;AACb,IAAmB,OAAO,EAAS;GACnC;AAEJ,QADA,EAAmB,IAAI,GAAU,EAAQ,EAClC;;AAGT,SAAgB,IAA0B;CACxC,IAAM,IAAS,GAAkB,EAC3B,EAAE,eAAY,GACd,IAAW;EACf;EACA,EAAQ;EACR,EAAQ;EACR,EAAQ;EACR,EAAO,SAAS;EACjB,CAAC,KAAK,EAAoB,EAErB,CAAC,GAAsB,KAA2B,EAAM,eAEtD,EAAqB,EAAS,IAAI,KAAK;AA2B/C,QAzBA,EAAM,gBAAgB;AACpB,MAAI,EAAY,EAAQ,EAAE;AACxB,KAAwB,KAAK;AAC7B;;EAGF,IAAM,IAAS,EAAqB,EAAS;AAC7C,MAAI,MAAW,KAAA,GAAW;AACxB,KAAwB,EAAO;AAC/B;;EAGF,IAAI,IAAY;AAQhB,SAPA,EAAwB,KAAK,EACxB,EAA2B,EAAS,CAAC,MAAM,MAAY;AAC1D,GAAI,KACF,EAAwB,EAAQ;IAElC,QAEW;AACX,OAAY;;IAEb,CAAC,GAAS,EAAS,CAAC,EAEhB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`./query-keys.cjs`),t=require(`../../node_modules/@tanstack/react-query/build/modern/useQuery.cjs`),n=require(`../../api/agent-canvas-updates.cjs`);function r({enabled:r=!0}={}){return t.useQuery({queryKey:e.APP_UPDATE_QUERY_KEYS.latestVersion,queryFn:({signal:e})=>n.fetchLatestAgentCanvasVersion(e),enabled:r,retry:!1,refetchOnWindowFocus:!1,staleTime:1e3*60*60,meta:{disableToast:!0}})}exports.useLatestAgentCanvasVersion=r;
|
|
2
|
+
//# sourceMappingURL=use-latest-agent-canvas-version.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-latest-agent-canvas-version.cjs","names":[],"sources":["../../../src/hooks/query/use-latest-agent-canvas-version.ts"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport { fetchLatestAgentCanvasVersion } from \"#/api/agent-canvas-updates\";\nimport { APP_UPDATE_QUERY_KEYS } from \"./query-keys\";\n\n/**\n * Latest published Agent Canvas version (npm `latest` dist-tag).\n *\n * Information-only: failures must stay quiet (`meta.disableToast`) — the\n * settings update card renders them inline. The card's \"Check for updates\"\n * button is `refetch()`, which bypasses `staleTime`.\n */\nexport function useLatestAgentCanvasVersion({\n enabled = true,\n}: { enabled?: boolean } = {}) {\n return useQuery({\n queryKey: APP_UPDATE_QUERY_KEYS.latestVersion,\n queryFn: ({ signal }) => fetchLatestAgentCanvasVersion(signal),\n enabled,\n // Offline/air-gapped must settle into the quiet inline state immediately\n // rather than sitting through exponential backoff.\n retry: false,\n refetchOnWindowFocus: false,\n staleTime: 1000 * 60 * 60, // the settings sidebar remounts per navigation; don't hammer npm\n meta: { disableToast: true },\n });\n}\n"],"mappings":"oNAWA,SAAgB,EAA4B,CAC1C,UAAU,IACe,EAAE,CAAE,CAC7B,OAAO,EAAA,SAAS,CACd,SAAU,EAAA,sBAAsB,cAChC,SAAU,CAAE,YAAa,EAAA,8BAA8B,EAAO,CAC9D,UAGA,MAAO,GACP,qBAAsB,GACtB,UAAW,IAAO,GAAK,GACvB,KAAM,CAAE,aAAc,GAAM,CAC7B,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Latest published Agent Canvas version (npm `latest` dist-tag).
|
|
3
|
+
*
|
|
4
|
+
* Information-only: failures must stay quiet (`meta.disableToast`) — the
|
|
5
|
+
* settings update card renders them inline. The card's "Check for updates"
|
|
6
|
+
* button is `refetch()`, which bypasses `staleTime`.
|
|
7
|
+
*/
|
|
8
|
+
export declare function useLatestAgentCanvasVersion({ enabled, }?: {
|
|
9
|
+
enabled?: boolean;
|
|
10
|
+
}): import("@tanstack/react-query").UseQueryResult<string, import("axios").AxiosError<unknown, any>>;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { APP_UPDATE_QUERY_KEYS as e } from "./query-keys.js";
|
|
2
|
+
import { useQuery as t } from "../../node_modules/@tanstack/react-query/build/modern/useQuery.js";
|
|
3
|
+
import { fetchLatestAgentCanvasVersion as n } from "../../api/agent-canvas-updates.js";
|
|
4
|
+
//#region src/hooks/query/use-latest-agent-canvas-version.ts
|
|
5
|
+
function r({ enabled: r = !0 } = {}) {
|
|
6
|
+
return t({
|
|
7
|
+
queryKey: e.latestVersion,
|
|
8
|
+
queryFn: ({ signal: e }) => n(e),
|
|
9
|
+
enabled: r,
|
|
10
|
+
retry: !1,
|
|
11
|
+
refetchOnWindowFocus: !1,
|
|
12
|
+
staleTime: 1e3 * 60 * 60,
|
|
13
|
+
meta: { disableToast: !0 }
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
//#endregion
|
|
17
|
+
export { r as useLatestAgentCanvasVersion };
|
|
18
|
+
|
|
19
|
+
//# sourceMappingURL=use-latest-agent-canvas-version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-latest-agent-canvas-version.js","names":[],"sources":["../../../src/hooks/query/use-latest-agent-canvas-version.ts"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport { fetchLatestAgentCanvasVersion } from \"#/api/agent-canvas-updates\";\nimport { APP_UPDATE_QUERY_KEYS } from \"./query-keys\";\n\n/**\n * Latest published Agent Canvas version (npm `latest` dist-tag).\n *\n * Information-only: failures must stay quiet (`meta.disableToast`) — the\n * settings update card renders them inline. The card's \"Check for updates\"\n * button is `refetch()`, which bypasses `staleTime`.\n */\nexport function useLatestAgentCanvasVersion({\n enabled = true,\n}: { enabled?: boolean } = {}) {\n return useQuery({\n queryKey: APP_UPDATE_QUERY_KEYS.latestVersion,\n queryFn: ({ signal }) => fetchLatestAgentCanvasVersion(signal),\n enabled,\n // Offline/air-gapped must settle into the quiet inline state immediately\n // rather than sitting through exponential backoff.\n retry: false,\n refetchOnWindowFocus: false,\n staleTime: 1000 * 60 * 60, // the settings sidebar remounts per navigation; don't hammer npm\n meta: { disableToast: true },\n });\n}\n"],"mappings":";;;;AAWA,SAAgB,EAA4B,EAC1C,aAAU,OACe,EAAE,EAAE;AAC7B,QAAO,EAAS;EACd,UAAU,EAAsB;EAChC,UAAU,EAAE,gBAAa,EAA8B,EAAO;EAC9D;EAGA,OAAO;EACP,sBAAsB;EACtB,WAAW,MAAO,KAAK;EACvB,MAAM,EAAE,cAAc,IAAM;EAC7B,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type PluginFileContent } from "#/api/plugins-service";
|
|
2
|
+
/**
|
|
3
|
+
* Query hook for one plugin file's content, shown in the plugin detail
|
|
4
|
+
* modal's file viewer. Disabled until a file is selected. Local backend only
|
|
5
|
+
* (on cloud the plugins page carries no contents, so this never fires).
|
|
6
|
+
*/
|
|
7
|
+
export declare const usePluginFileContent: (basePath: string | null, relativePath: string | null) => import("@tanstack/react-query").UseQueryResult<PluginFileContent, import("axios").AxiosError<unknown, any>>;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../node_modules/@openhands/typescript-client/dist/client/
|
|
1
|
+
require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../node_modules/@openhands/typescript-client/dist/client/agent-server-compatibility.cjs`);require(`../../node_modules/@openhands/typescript-client/dist/clients.cjs`);const t=require(`../../node_modules/@tanstack/react-query/build/modern/useQueries.cjs`),n=require(`./use-local-workspaces.cjs`),r=require(`./use-search-subdirs.cjs`);let i=require(`react`);function a(){let{data:a,isLoading:o,isError:s,error:c}=n.useLocalWorkspaces(),l=e.isAgentServerVersionError(c),u=a?.workspaces??[],d=a?.workspaceParents??[],f=(0,i.useMemo)(()=>{let e=new Set(d.map(e=>e.path)),t=[].filter(t=>!e.has(t.path));return t.length===0?d:[...d,...t]},[d,l]),p=t.useQueries({queries:l?[]:f.map(e=>({queryKey:[`file`,`search_subdirs`,e.path],queryFn:()=>r.searchAllSubdirectories(e.path),retry:!1,meta:{disableToast:!0}}))}),m=o||p.some(e=>e.isLoading),h=s||p.some(e=>e.isError);return{workspaces:(0,i.useMemo)(()=>{let e=new Map,t=new Map(f.map((e,t)=>[e.path,p[t]]));return f.forEach(n=>{(t.get(n.path)?.data?.items??[]).forEach(t=>{e.has(t.path)||e.set(t.path,{id:t.path,name:t.name,path:t.path,parentPath:n.path})})}),u.forEach(t=>{e.set(t.path,t)}),Array.from(e.values())},[u,f,p.map(e=>`${e.dataUpdatedAt??0}:${e.status}`).join(`|`)]),parents:f,isLoading:m,isError:h,error:c}}exports.useResolvedWorkspaces=a;
|
|
2
2
|
//# sourceMappingURL=use-resolved-workspaces.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-resolved-workspaces.cjs","names":[],"sources":["../../../src/hooks/query/use-resolved-workspaces.ts"],"sourcesContent":["import { useMemo } from \"react\";\nimport { useQueries } from \"@tanstack/react-query\";\nimport {
|
|
1
|
+
{"version":3,"file":"use-resolved-workspaces.cjs","names":[],"sources":["../../../src/hooks/query/use-resolved-workspaces.ts"],"sourcesContent":["import { useMemo } from \"react\";\nimport { useQueries } from \"@tanstack/react-query\";\nimport { isAgentServerVersionError } from \"@openhands/typescript-client/clients\";\n\nimport { useLocalWorkspaces } from \"#/hooks/query/use-local-workspaces\";\nimport { searchAllSubdirectories } from \"#/hooks/query/use-search-subdirs\";\nimport { LocalWorkspace, LocalWorkspaceParent } from \"#/types/workspace\";\n\ninterface UseResolvedWorkspacesResult {\n workspaces: LocalWorkspace[];\n /**\n * The merged workspace parents that produced the dynamic children above:\n * the user's stored parents plus any implicit built-in parents (currently\n * `/projects` in dev). Consumers use this to label a child's group by its\n * parent's `name` — `parentPath` alone only yields a path. Includes the\n * implicit parents that `useLocalWorkspaces` does not expose on its own.\n */\n parents: LocalWorkspaceParent[];\n isLoading: boolean;\n isError: boolean;\n error: unknown;\n}\n\n/**\n * Implicit workspace parents that are always considered when resolving\n * workspaces. `/projects` is a well-known directory that some agent-server\n * setups use as the projects root. We surface its immediate subdirectories\n * as workspaces automatically in dev mode.\n *\n * This is a development convenience only. Production previews may point at\n * arbitrary remote agent servers that do not expose the file-browser endpoint;\n * probing `/projects` there creates noisy 404s before the user has added any\n * workspace parent explicitly.\n */\nconst INCLUDE_IMPLICIT_WORKSPACE_PARENTS = import.meta.env.DEV;\n\nconst IMPLICIT_WORKSPACE_PARENTS: LocalWorkspaceParent[] = [\n { id: \"implicit:/projects\", name: \"/projects\", path: \"/projects\" },\n];\n\n/**\n * Returns the merged list of workspaces to display:\n * - workspaces explicitly added by the user (from the persisted store),\n * - the immediate subdirectories of every saved \"workspace parent\",\n * fetched dynamically, and\n * - the immediate subdirectories of any implicit, built-in parents\n * (currently just `/projects`).\n *\n * Static workspaces always take precedence over a dynamic child with the\n * same path so that user-selected names/ids are preserved.\n */\nexport function useResolvedWorkspaces(): UseResolvedWorkspacesResult {\n const {\n data,\n isLoading: isLoadingList,\n isError: isErrorList,\n error: listError,\n } = useLocalWorkspaces();\n const workspacesUnsupported = isAgentServerVersionError(listError);\n const workspaces = data?.workspaces ?? [];\n const storedParents = data?.workspaceParents ?? [];\n\n // Merge stored parents with the implicit ones, deduping on path so a\n // user-added `/projects` doesn't trigger a second query.\n const workspaceParents = useMemo(() => {\n const seen = new Set(storedParents.map((p) => p.path));\n // Filter out implicit parents that conflict with user-added ones (by path)\n // so custom names/ids are preserved.\n const implicitParents =\n INCLUDE_IMPLICIT_WORKSPACE_PARENTS && !workspacesUnsupported\n ? IMPLICIT_WORKSPACE_PARENTS\n : [];\n const extras = implicitParents.filter((p) => !seen.has(p.path));\n return extras.length === 0 ? storedParents : [...storedParents, ...extras];\n }, [storedParents, workspacesUnsupported]);\n\n const parentQueries = useQueries({\n queries: workspacesUnsupported\n ? []\n : workspaceParents.map((parent) => ({\n queryKey: [\"file\", \"search_subdirs\", parent.path],\n queryFn: () => searchAllSubdirectories(parent.path),\n retry: false,\n meta: { disableToast: true },\n })),\n });\n\n const isLoading = isLoadingList || parentQueries.some((q) => q.isLoading);\n const isError = isErrorList || parentQueries.some((q) => q.isError);\n\n // Stable string fingerprint that changes whenever any parent's subdir\n // results change. Avoids spreading timestamps into the `useMemo` deps,\n // which would change the array length as parents are added/removed.\n const queriesFingerprint = parentQueries\n .map((q) => `${q.dataUpdatedAt ?? 0}:${q.status}`)\n .join(\"|\");\n\n const merged = useMemo(() => {\n const byPath = new Map<string, LocalWorkspace>();\n const resultsByParent = new Map(\n workspaceParents.map((parent, index) => [\n parent.path,\n parentQueries[index],\n ]),\n );\n\n workspaceParents.forEach((parent) => {\n const result = resultsByParent.get(parent.path);\n const items = result?.data?.items ?? [];\n items.forEach((entry) => {\n if (byPath.has(entry.path)) return;\n byPath.set(entry.path, {\n id: entry.path,\n name: entry.name,\n path: entry.path,\n parentPath: parent.path,\n });\n });\n });\n\n // Static workspaces win on duplicate paths.\n workspaces.forEach((w) => {\n byPath.set(w.path, w);\n });\n\n return Array.from(byPath.values());\n }, [workspaces, workspaceParents, queriesFingerprint]);\n\n return {\n workspaces: merged,\n parents: workspaceParents,\n isLoading,\n isError,\n error: listError,\n };\n}\n"],"mappings":"uaAmDA,SAAgB,GAAqD,CACnE,GAAM,CACJ,OACA,UAAW,EACX,QAAS,EACT,MAAO,GACL,EAAA,oBAAoB,CAClB,EAAwB,EAAA,0BAA0B,EAAU,CAC5D,EAAa,GAAM,YAAc,EAAE,CACnC,EAAgB,GAAM,kBAAoB,EAAE,CAI5C,GAAA,EAAA,EAAA,aAAiC,CACrC,IAAM,EAAO,IAAI,IAAI,EAAc,IAAK,GAAM,EAAE,KAAK,CAAC,CAOhD,EAAS,EAAA,CAAgB,OAAQ,GAAM,CAAC,EAAK,IAAI,EAAE,KAAK,CAAC,CAC/D,OAAO,EAAO,SAAW,EAAI,EAAgB,CAAC,GAAG,EAAe,GAAG,EAAO,EACzE,CAAC,EAAe,EAAsB,CAAC,CAEpC,EAAgB,EAAA,WAAW,CAC/B,QAAS,EACL,EAAE,CACF,EAAiB,IAAK,IAAY,CAChC,SAAU,CAAC,OAAQ,iBAAkB,EAAO,KAAK,CACjD,YAAe,EAAA,wBAAwB,EAAO,KAAK,CACnD,MAAO,GACP,KAAM,CAAE,aAAc,GAAM,CAC7B,EAAE,CACR,CAAC,CAEI,EAAY,GAAiB,EAAc,KAAM,GAAM,EAAE,UAAU,CACnE,EAAU,GAAe,EAAc,KAAM,GAAM,EAAE,QAAQ,CAwCnE,MAAO,CACL,YAAA,EAAA,EAAA,aAhC2B,CAC3B,IAAM,EAAS,IAAI,IACb,EAAkB,IAAI,IAC1B,EAAiB,KAAK,EAAQ,IAAU,CACtC,EAAO,KACP,EAAc,GACf,CAAC,CACH,CAqBD,OAnBA,EAAiB,QAAS,GAAW,EACpB,EAAgB,IAAI,EAAO,KAC5B,EAAQ,MAAM,OAAS,EAAE,EACjC,QAAS,GAAU,CACnB,EAAO,IAAI,EAAM,KAAK,EAC1B,EAAO,IAAI,EAAM,KAAM,CACrB,GAAI,EAAM,KACV,KAAM,EAAM,KACZ,KAAM,EAAM,KACZ,WAAY,EAAO,KACpB,CAAC,EACF,EACF,CAGF,EAAW,QAAS,GAAM,CACxB,EAAO,IAAI,EAAE,KAAM,EAAE,EACrB,CAEK,MAAM,KAAK,EAAO,QAAQ,CAAC,EACjC,CAAC,EAAY,EAjCW,EACxB,IAAK,GAAM,GAAG,EAAE,eAAiB,EAAE,GAAG,EAAE,SAAS,CACjD,KAAK,IA+B0B,CAAmB,CAGvC,CACZ,QAAS,EACT,YACA,UACA,MAAO,EACR"}
|
|
@@ -1,29 +1,28 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { isAgentServerVersionError as t } from "../../node_modules/@openhands/typescript-client/dist/client/agent-server-compatibility.js";
|
|
1
|
+
import { isAgentServerVersionError as e } from "../../node_modules/@openhands/typescript-client/dist/client/agent-server-compatibility.js";
|
|
3
2
|
import "../../node_modules/@openhands/typescript-client/dist/clients.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { useMemo as
|
|
3
|
+
import { useQueries as t } from "../../node_modules/@tanstack/react-query/build/modern/useQueries.js";
|
|
4
|
+
import { useLocalWorkspaces as n } from "./use-local-workspaces.js";
|
|
5
|
+
import { searchAllSubdirectories as r } from "./use-search-subdirs.js";
|
|
6
|
+
import { useMemo as i } from "react";
|
|
8
7
|
//#region src/hooks/query/use-resolved-workspaces.ts
|
|
9
|
-
function
|
|
10
|
-
let { data:
|
|
11
|
-
let e = new Set(
|
|
12
|
-
return t.length === 0 ?
|
|
13
|
-
}, [
|
|
8
|
+
function a() {
|
|
9
|
+
let { data: a, isLoading: o, isError: s, error: c } = n(), l = e(c), u = a?.workspaces ?? [], d = a?.workspaceParents ?? [], f = i(() => {
|
|
10
|
+
let e = new Set(d.map((e) => e.path)), t = [].filter((t) => !e.has(t.path));
|
|
11
|
+
return t.length === 0 ? d : [...d, ...t];
|
|
12
|
+
}, [d, l]), p = t({ queries: l ? [] : f.map((e) => ({
|
|
14
13
|
queryKey: [
|
|
15
14
|
"file",
|
|
16
15
|
"search_subdirs",
|
|
17
|
-
|
|
16
|
+
e.path
|
|
18
17
|
],
|
|
19
|
-
queryFn: () =>
|
|
18
|
+
queryFn: () => r(e.path),
|
|
20
19
|
retry: !1,
|
|
21
20
|
meta: { disableToast: !0 }
|
|
22
|
-
})) }),
|
|
21
|
+
})) }), m = o || p.some((e) => e.isLoading), h = s || p.some((e) => e.isError);
|
|
23
22
|
return {
|
|
24
|
-
workspaces:
|
|
25
|
-
let e = /* @__PURE__ */ new Map(), t = new Map(
|
|
26
|
-
return
|
|
23
|
+
workspaces: i(() => {
|
|
24
|
+
let e = /* @__PURE__ */ new Map(), t = new Map(f.map((e, t) => [e.path, p[t]]));
|
|
25
|
+
return f.forEach((n) => {
|
|
27
26
|
(t.get(n.path)?.data?.items ?? []).forEach((t) => {
|
|
28
27
|
e.has(t.path) || e.set(t.path, {
|
|
29
28
|
id: t.path,
|
|
@@ -32,21 +31,21 @@ function o() {
|
|
|
32
31
|
parentPath: n.path
|
|
33
32
|
});
|
|
34
33
|
});
|
|
35
|
-
}),
|
|
34
|
+
}), u.forEach((t) => {
|
|
36
35
|
e.set(t.path, t);
|
|
37
36
|
}), Array.from(e.values());
|
|
38
37
|
}, [
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
38
|
+
u,
|
|
39
|
+
f,
|
|
40
|
+
p.map((e) => `${e.dataUpdatedAt ?? 0}:${e.status}`).join("|")
|
|
42
41
|
]),
|
|
43
|
-
parents:
|
|
44
|
-
isLoading:
|
|
45
|
-
isError:
|
|
46
|
-
error:
|
|
42
|
+
parents: f,
|
|
43
|
+
isLoading: m,
|
|
44
|
+
isError: h,
|
|
45
|
+
error: c
|
|
47
46
|
};
|
|
48
47
|
}
|
|
49
48
|
//#endregion
|
|
50
|
-
export {
|
|
49
|
+
export { a as useResolvedWorkspaces };
|
|
51
50
|
|
|
52
51
|
//# sourceMappingURL=use-resolved-workspaces.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-resolved-workspaces.js","names":[],"sources":["../../../src/hooks/query/use-resolved-workspaces.ts"],"sourcesContent":["import { useMemo } from \"react\";\nimport { useQueries } from \"@tanstack/react-query\";\nimport {
|
|
1
|
+
{"version":3,"file":"use-resolved-workspaces.js","names":[],"sources":["../../../src/hooks/query/use-resolved-workspaces.ts"],"sourcesContent":["import { useMemo } from \"react\";\nimport { useQueries } from \"@tanstack/react-query\";\nimport { isAgentServerVersionError } from \"@openhands/typescript-client/clients\";\n\nimport { useLocalWorkspaces } from \"#/hooks/query/use-local-workspaces\";\nimport { searchAllSubdirectories } from \"#/hooks/query/use-search-subdirs\";\nimport { LocalWorkspace, LocalWorkspaceParent } from \"#/types/workspace\";\n\ninterface UseResolvedWorkspacesResult {\n workspaces: LocalWorkspace[];\n /**\n * The merged workspace parents that produced the dynamic children above:\n * the user's stored parents plus any implicit built-in parents (currently\n * `/projects` in dev). Consumers use this to label a child's group by its\n * parent's `name` — `parentPath` alone only yields a path. Includes the\n * implicit parents that `useLocalWorkspaces` does not expose on its own.\n */\n parents: LocalWorkspaceParent[];\n isLoading: boolean;\n isError: boolean;\n error: unknown;\n}\n\n/**\n * Implicit workspace parents that are always considered when resolving\n * workspaces. `/projects` is a well-known directory that some agent-server\n * setups use as the projects root. We surface its immediate subdirectories\n * as workspaces automatically in dev mode.\n *\n * This is a development convenience only. Production previews may point at\n * arbitrary remote agent servers that do not expose the file-browser endpoint;\n * probing `/projects` there creates noisy 404s before the user has added any\n * workspace parent explicitly.\n */\nconst INCLUDE_IMPLICIT_WORKSPACE_PARENTS = import.meta.env.DEV;\n\nconst IMPLICIT_WORKSPACE_PARENTS: LocalWorkspaceParent[] = [\n { id: \"implicit:/projects\", name: \"/projects\", path: \"/projects\" },\n];\n\n/**\n * Returns the merged list of workspaces to display:\n * - workspaces explicitly added by the user (from the persisted store),\n * - the immediate subdirectories of every saved \"workspace parent\",\n * fetched dynamically, and\n * - the immediate subdirectories of any implicit, built-in parents\n * (currently just `/projects`).\n *\n * Static workspaces always take precedence over a dynamic child with the\n * same path so that user-selected names/ids are preserved.\n */\nexport function useResolvedWorkspaces(): UseResolvedWorkspacesResult {\n const {\n data,\n isLoading: isLoadingList,\n isError: isErrorList,\n error: listError,\n } = useLocalWorkspaces();\n const workspacesUnsupported = isAgentServerVersionError(listError);\n const workspaces = data?.workspaces ?? [];\n const storedParents = data?.workspaceParents ?? [];\n\n // Merge stored parents with the implicit ones, deduping on path so a\n // user-added `/projects` doesn't trigger a second query.\n const workspaceParents = useMemo(() => {\n const seen = new Set(storedParents.map((p) => p.path));\n // Filter out implicit parents that conflict with user-added ones (by path)\n // so custom names/ids are preserved.\n const implicitParents =\n INCLUDE_IMPLICIT_WORKSPACE_PARENTS && !workspacesUnsupported\n ? IMPLICIT_WORKSPACE_PARENTS\n : [];\n const extras = implicitParents.filter((p) => !seen.has(p.path));\n return extras.length === 0 ? storedParents : [...storedParents, ...extras];\n }, [storedParents, workspacesUnsupported]);\n\n const parentQueries = useQueries({\n queries: workspacesUnsupported\n ? []\n : workspaceParents.map((parent) => ({\n queryKey: [\"file\", \"search_subdirs\", parent.path],\n queryFn: () => searchAllSubdirectories(parent.path),\n retry: false,\n meta: { disableToast: true },\n })),\n });\n\n const isLoading = isLoadingList || parentQueries.some((q) => q.isLoading);\n const isError = isErrorList || parentQueries.some((q) => q.isError);\n\n // Stable string fingerprint that changes whenever any parent's subdir\n // results change. Avoids spreading timestamps into the `useMemo` deps,\n // which would change the array length as parents are added/removed.\n const queriesFingerprint = parentQueries\n .map((q) => `${q.dataUpdatedAt ?? 0}:${q.status}`)\n .join(\"|\");\n\n const merged = useMemo(() => {\n const byPath = new Map<string, LocalWorkspace>();\n const resultsByParent = new Map(\n workspaceParents.map((parent, index) => [\n parent.path,\n parentQueries[index],\n ]),\n );\n\n workspaceParents.forEach((parent) => {\n const result = resultsByParent.get(parent.path);\n const items = result?.data?.items ?? [];\n items.forEach((entry) => {\n if (byPath.has(entry.path)) return;\n byPath.set(entry.path, {\n id: entry.path,\n name: entry.name,\n path: entry.path,\n parentPath: parent.path,\n });\n });\n });\n\n // Static workspaces win on duplicate paths.\n workspaces.forEach((w) => {\n byPath.set(w.path, w);\n });\n\n return Array.from(byPath.values());\n }, [workspaces, workspaceParents, queriesFingerprint]);\n\n return {\n workspaces: merged,\n parents: workspaceParents,\n isLoading,\n isError,\n error: listError,\n };\n}\n"],"mappings":";;;;;;;AAmDA,SAAgB,IAAqD;CACnE,IAAM,EACJ,SACA,WAAW,GACX,SAAS,GACT,OAAO,MACL,GAAoB,EAClB,IAAwB,EAA0B,EAAU,EAC5D,IAAa,GAAM,cAAc,EAAE,EACnC,IAAgB,GAAM,oBAAoB,EAAE,EAI5C,IAAmB,QAAc;EACrC,IAAM,IAAO,IAAI,IAAI,EAAc,KAAK,MAAM,EAAE,KAAK,CAAC,EAOhD,IAAS,EAAA,CAAgB,QAAQ,MAAM,CAAC,EAAK,IAAI,EAAE,KAAK,CAAC;AAC/D,SAAO,EAAO,WAAW,IAAI,IAAgB,CAAC,GAAG,GAAe,GAAG,EAAO;IACzE,CAAC,GAAe,EAAsB,CAAC,EAEpC,IAAgB,EAAW,EAC/B,SAAS,IACL,EAAE,GACF,EAAiB,KAAK,OAAY;EAChC,UAAU;GAAC;GAAQ;GAAkB,EAAO;GAAK;EACjD,eAAe,EAAwB,EAAO,KAAK;EACnD,OAAO;EACP,MAAM,EAAE,cAAc,IAAM;EAC7B,EAAE,EACR,CAAC,EAEI,IAAY,KAAiB,EAAc,MAAM,MAAM,EAAE,UAAU,EACnE,IAAU,KAAe,EAAc,MAAM,MAAM,EAAE,QAAQ;AAwCnE,QAAO;EACL,YAhCa,QAAc;GAC3B,IAAM,oBAAS,IAAI,KAA6B,EAC1C,IAAkB,IAAI,IAC1B,EAAiB,KAAK,GAAQ,MAAU,CACtC,EAAO,MACP,EAAc,GACf,CAAC,CACH;AAqBD,UAnBA,EAAiB,SAAS,MAAW;AAGnC,KAFe,EAAgB,IAAI,EAAO,KAC5B,EAAQ,MAAM,SAAS,EAAE,EACjC,SAAS,MAAU;AACnB,OAAO,IAAI,EAAM,KAAK,IAC1B,EAAO,IAAI,EAAM,MAAM;MACrB,IAAI,EAAM;MACV,MAAM,EAAM;MACZ,MAAM,EAAM;MACZ,YAAY,EAAO;MACpB,CAAC;MACF;KACF,EAGF,EAAW,SAAS,MAAM;AACxB,MAAO,IAAI,EAAE,MAAM,EAAE;KACrB,EAEK,MAAM,KAAK,EAAO,QAAQ,CAAC;KACjC;GAAC;GAAY;GAjCW,EACxB,KAAK,MAAM,GAAG,EAAE,iBAAiB,EAAE,GAAG,EAAE,SAAS,CACjD,KAAK,IA+B0B;GAAmB,CAGvC;EACZ,SAAS;EACT;EACA;EACA,OAAO;EACR"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../node_modules/@openhands/typescript-client/dist/client/file-client.cjs`);require(`../../node_modules/@openhands/typescript-client/dist/clients.cjs`);const t=require(`../../api/agent-server-client-options.cjs`),n=require(`../../node_modules/@tanstack/react-query/build/modern/useQuery.cjs`),r=require(`../../contexts/active-backend-context.cjs`);function i(){return new e.FileClient(t.getAgentServerClientOptions())}
|
|
1
|
+
require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../node_modules/@openhands/typescript-client/dist/client/file-client.cjs`);require(`../../node_modules/@openhands/typescript-client/dist/clients.cjs`);const t=require(`../../api/agent-server-client-options.cjs`),n=require(`../../node_modules/@tanstack/react-query/build/modern/useQuery.cjs`),r=require(`../../contexts/active-backend-context.cjs`);function i(){return new e.FileClient(t.getAgentServerClientOptions())}async function a(e,t=i()){let n=[],r=new Set,a;for(;;){let i=await t.searchSubdirectories(e,a?{pageId:a}:void 0);if(n.push(...i.items),a=i.next_page_id,!a)return{items:n,next_page_id:null};if(r.has(a))throw Error(`File search returned a repeated page id`);r.add(a)}}var o=e=>{let t=r.useActiveBackend();return n.useQuery({queryKey:[`file`,`search_subdirs`,e,t.backend.id,t.orgId],queryFn:()=>a(e),enabled:!!e,retry:!1,meta:{disableToast:!0}})},s=()=>{let e=r.useActiveBackend();return n.useQuery({queryKey:[`file`,`home`,e.backend.id,e.orgId],queryFn:async()=>i().getHome(),retry:!1,meta:{disableToast:!0},staleTime:1/0})};exports.searchAllSubdirectories=a,exports.useHomeDirectory=s,exports.useSearchSubdirs=o;
|
|
2
2
|
//# sourceMappingURL=use-search-subdirs.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-search-subdirs.cjs","names":[],"sources":["../../../src/hooks/query/use-search-subdirs.ts"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport { FileClient } from \"@openhands/typescript-client/clients\";\nimport { getAgentServerClientOptions } from \"#/api/agent-server-client-options\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\n\nexport interface FileBrowserEntry {\n label: string;\n path: string;\n}\n\nexport interface HomeDirectoryResponse {\n home: string;\n favorites?: FileBrowserEntry[];\n locations?: FileBrowserEntry[];\n}\n\nfunction getFileClient() {\n return new FileClient(getAgentServerClientOptions());\n}\n\nexport const useSearchSubdirs = (path: string | null) => {\n const active = useActiveBackend();\n return useQuery({\n queryKey: [\"file\", \"search_subdirs\", path, active.backend.id, active.orgId],\n queryFn: () =>
|
|
1
|
+
{"version":3,"file":"use-search-subdirs.cjs","names":[],"sources":["../../../src/hooks/query/use-search-subdirs.ts"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport { FileClient } from \"@openhands/typescript-client/clients\";\nimport { getAgentServerClientOptions } from \"#/api/agent-server-client-options\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\n\ntype FileSubdirectoryPage = Awaited<\n ReturnType<FileClient[\"searchSubdirectories\"]>\n>;\ntype FileClientLike = Pick<FileClient, \"searchSubdirectories\">;\n\nexport interface FileBrowserEntry {\n label: string;\n path: string;\n}\n\nexport interface HomeDirectoryResponse {\n home: string;\n favorites?: FileBrowserEntry[];\n locations?: FileBrowserEntry[];\n}\n\nfunction getFileClient() {\n return new FileClient(getAgentServerClientOptions());\n}\n\nexport async function searchAllSubdirectories(\n path: string,\n fileClient: FileClientLike = getFileClient(),\n): Promise<FileSubdirectoryPage> {\n const items: FileSubdirectoryPage[\"items\"] = [];\n const seenPageIds = new Set<string>();\n let pageId: string | null | undefined;\n\n while (true) {\n const page = await fileClient.searchSubdirectories(\n path,\n pageId ? { pageId } : undefined,\n );\n items.push(...page.items);\n pageId = page.next_page_id;\n\n if (!pageId) {\n return { items, next_page_id: null };\n }\n\n if (seenPageIds.has(pageId)) {\n throw new Error(\"File search returned a repeated page id\");\n }\n seenPageIds.add(pageId);\n }\n}\n\nexport const useSearchSubdirs = (path: string | null) => {\n const active = useActiveBackend();\n return useQuery({\n queryKey: [\"file\", \"search_subdirs\", path, active.backend.id, active.orgId],\n queryFn: () => searchAllSubdirectories(path as string),\n enabled: !!path,\n retry: false,\n meta: { disableToast: true },\n });\n};\n\nexport const useHomeDirectory = () => {\n const active = useActiveBackend();\n return useQuery({\n queryKey: [\"file\", \"home\", active.backend.id, active.orgId],\n queryFn: async (): Promise<HomeDirectoryResponse> =>\n getFileClient().getHome(),\n retry: false,\n meta: { disableToast: true },\n staleTime: Infinity,\n });\n};\n"],"mappings":"+ZAqBA,SAAS,GAAgB,CACvB,OAAO,IAAI,EAAA,WAAW,EAAA,6BAA6B,CAAC,CAGtD,eAAsB,EACpB,EACA,EAA6B,GAAe,CACb,CAC/B,IAAM,EAAuC,EAAE,CACzC,EAAc,IAAI,IACpB,EAEJ,OAAa,CACX,IAAM,EAAO,MAAM,EAAW,qBAC5B,EACA,EAAS,CAAE,SAAQ,CAAG,IAAA,GACvB,CAID,GAHA,EAAM,KAAK,GAAG,EAAK,MAAM,CACzB,EAAS,EAAK,aAEV,CAAC,EACH,MAAO,CAAE,QAAO,aAAc,KAAM,CAGtC,GAAI,EAAY,IAAI,EAAO,CACzB,MAAU,MAAM,0CAA0C,CAE5D,EAAY,IAAI,EAAO,EAI3B,IAAa,EAAoB,GAAwB,CACvD,IAAM,EAAS,EAAA,kBAAkB,CACjC,OAAO,EAAA,SAAS,CACd,SAAU,CAAC,OAAQ,iBAAkB,EAAM,EAAO,QAAQ,GAAI,EAAO,MAAM,CAC3E,YAAe,EAAwB,EAAe,CACtD,QAAS,CAAC,CAAC,EACX,MAAO,GACP,KAAM,CAAE,aAAc,GAAM,CAC7B,CAAC,EAGS,MAAyB,CACpC,IAAM,EAAS,EAAA,kBAAkB,CACjC,OAAO,EAAA,SAAS,CACd,SAAU,CAAC,OAAQ,OAAQ,EAAO,QAAQ,GAAI,EAAO,MAAM,CAC3D,QAAS,SACP,GAAe,CAAC,SAAS,CAC3B,MAAO,GACP,KAAM,CAAE,aAAc,GAAM,CAC5B,UAAW,IACZ,CAAC"}
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { FileClient } from "@openhands/typescript-client/clients";
|
|
2
|
+
type FileSubdirectoryPage = Awaited<ReturnType<FileClient["searchSubdirectories"]>>;
|
|
3
|
+
type FileClientLike = Pick<FileClient, "searchSubdirectories">;
|
|
1
4
|
export interface FileBrowserEntry {
|
|
2
5
|
label: string;
|
|
3
6
|
path: string;
|
|
@@ -7,5 +10,7 @@ export interface HomeDirectoryResponse {
|
|
|
7
10
|
favorites?: FileBrowserEntry[];
|
|
8
11
|
locations?: FileBrowserEntry[];
|
|
9
12
|
}
|
|
13
|
+
export declare function searchAllSubdirectories(path: string, fileClient?: FileClientLike): Promise<FileSubdirectoryPage>;
|
|
10
14
|
export declare const useSearchSubdirs: (path: string | null) => import("@tanstack/react-query").UseQueryResult<import("@openhands/typescript-client").FileSubdirectoryPage, import("axios").AxiosError<unknown, any>>;
|
|
11
15
|
export declare const useHomeDirectory: () => import("@tanstack/react-query").UseQueryResult<HomeDirectoryResponse, import("axios").AxiosError<unknown, any>>;
|
|
16
|
+
export {};
|
|
@@ -7,7 +7,19 @@ import { useActiveBackend as r } from "../../contexts/active-backend-context.js"
|
|
|
7
7
|
function i() {
|
|
8
8
|
return new e(t());
|
|
9
9
|
}
|
|
10
|
-
|
|
10
|
+
async function a(e, t = i()) {
|
|
11
|
+
let n = [], r = /* @__PURE__ */ new Set(), a;
|
|
12
|
+
for (;;) {
|
|
13
|
+
let i = await t.searchSubdirectories(e, a ? { pageId: a } : void 0);
|
|
14
|
+
if (n.push(...i.items), a = i.next_page_id, !a) return {
|
|
15
|
+
items: n,
|
|
16
|
+
next_page_id: null
|
|
17
|
+
};
|
|
18
|
+
if (r.has(a)) throw Error("File search returned a repeated page id");
|
|
19
|
+
r.add(a);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
var o = (e) => {
|
|
11
23
|
let t = r();
|
|
12
24
|
return n({
|
|
13
25
|
queryKey: [
|
|
@@ -17,12 +29,12 @@ var a = (e) => {
|
|
|
17
29
|
t.backend.id,
|
|
18
30
|
t.orgId
|
|
19
31
|
],
|
|
20
|
-
queryFn: () =>
|
|
32
|
+
queryFn: () => a(e),
|
|
21
33
|
enabled: !!e,
|
|
22
34
|
retry: !1,
|
|
23
35
|
meta: { disableToast: !0 }
|
|
24
36
|
});
|
|
25
|
-
},
|
|
37
|
+
}, s = () => {
|
|
26
38
|
let e = r();
|
|
27
39
|
return n({
|
|
28
40
|
queryKey: [
|
|
@@ -38,6 +50,6 @@ var a = (e) => {
|
|
|
38
50
|
});
|
|
39
51
|
};
|
|
40
52
|
//#endregion
|
|
41
|
-
export {
|
|
53
|
+
export { a as searchAllSubdirectories, s as useHomeDirectory, o as useSearchSubdirs };
|
|
42
54
|
|
|
43
55
|
//# sourceMappingURL=use-search-subdirs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-search-subdirs.js","names":[],"sources":["../../../src/hooks/query/use-search-subdirs.ts"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport { FileClient } from \"@openhands/typescript-client/clients\";\nimport { getAgentServerClientOptions } from \"#/api/agent-server-client-options\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\n\nexport interface FileBrowserEntry {\n label: string;\n path: string;\n}\n\nexport interface HomeDirectoryResponse {\n home: string;\n favorites?: FileBrowserEntry[];\n locations?: FileBrowserEntry[];\n}\n\nfunction getFileClient() {\n return new FileClient(getAgentServerClientOptions());\n}\n\nexport const useSearchSubdirs = (path: string | null) => {\n const active = useActiveBackend();\n return useQuery({\n queryKey: [\"file\", \"search_subdirs\", path, active.backend.id, active.orgId],\n queryFn: () =>
|
|
1
|
+
{"version":3,"file":"use-search-subdirs.js","names":[],"sources":["../../../src/hooks/query/use-search-subdirs.ts"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport { FileClient } from \"@openhands/typescript-client/clients\";\nimport { getAgentServerClientOptions } from \"#/api/agent-server-client-options\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\n\ntype FileSubdirectoryPage = Awaited<\n ReturnType<FileClient[\"searchSubdirectories\"]>\n>;\ntype FileClientLike = Pick<FileClient, \"searchSubdirectories\">;\n\nexport interface FileBrowserEntry {\n label: string;\n path: string;\n}\n\nexport interface HomeDirectoryResponse {\n home: string;\n favorites?: FileBrowserEntry[];\n locations?: FileBrowserEntry[];\n}\n\nfunction getFileClient() {\n return new FileClient(getAgentServerClientOptions());\n}\n\nexport async function searchAllSubdirectories(\n path: string,\n fileClient: FileClientLike = getFileClient(),\n): Promise<FileSubdirectoryPage> {\n const items: FileSubdirectoryPage[\"items\"] = [];\n const seenPageIds = new Set<string>();\n let pageId: string | null | undefined;\n\n while (true) {\n const page = await fileClient.searchSubdirectories(\n path,\n pageId ? { pageId } : undefined,\n );\n items.push(...page.items);\n pageId = page.next_page_id;\n\n if (!pageId) {\n return { items, next_page_id: null };\n }\n\n if (seenPageIds.has(pageId)) {\n throw new Error(\"File search returned a repeated page id\");\n }\n seenPageIds.add(pageId);\n }\n}\n\nexport const useSearchSubdirs = (path: string | null) => {\n const active = useActiveBackend();\n return useQuery({\n queryKey: [\"file\", \"search_subdirs\", path, active.backend.id, active.orgId],\n queryFn: () => searchAllSubdirectories(path as string),\n enabled: !!path,\n retry: false,\n meta: { disableToast: true },\n });\n};\n\nexport const useHomeDirectory = () => {\n const active = useActiveBackend();\n return useQuery({\n queryKey: [\"file\", \"home\", active.backend.id, active.orgId],\n queryFn: async (): Promise<HomeDirectoryResponse> =>\n getFileClient().getHome(),\n retry: false,\n meta: { disableToast: true },\n staleTime: Infinity,\n });\n};\n"],"mappings":";;;;;;AAqBA,SAAS,IAAgB;AACvB,QAAO,IAAI,EAAW,GAA6B,CAAC;;AAGtD,eAAsB,EACpB,GACA,IAA6B,GAAe,EACb;CAC/B,IAAM,IAAuC,EAAE,EACzC,oBAAc,IAAI,KAAa,EACjC;AAEJ,UAAa;EACX,IAAM,IAAO,MAAM,EAAW,qBAC5B,GACA,IAAS,EAAE,WAAQ,GAAG,KAAA,EACvB;AAID,MAHA,EAAM,KAAK,GAAG,EAAK,MAAM,EACzB,IAAS,EAAK,cAEV,CAAC,EACH,QAAO;GAAE;GAAO,cAAc;GAAM;AAGtC,MAAI,EAAY,IAAI,EAAO,CACzB,OAAU,MAAM,0CAA0C;AAE5D,IAAY,IAAI,EAAO;;;AAI3B,IAAa,KAAoB,MAAwB;CACvD,IAAM,IAAS,GAAkB;AACjC,QAAO,EAAS;EACd,UAAU;GAAC;GAAQ;GAAkB;GAAM,EAAO,QAAQ;GAAI,EAAO;GAAM;EAC3E,eAAe,EAAwB,EAAe;EACtD,SAAS,CAAC,CAAC;EACX,OAAO;EACP,MAAM,EAAE,cAAc,IAAM;EAC7B,CAAC;GAGS,UAAyB;CACpC,IAAM,IAAS,GAAkB;AACjC,QAAO,EAAS;EACd,UAAU;GAAC;GAAQ;GAAQ,EAAO,QAAQ;GAAI,EAAO;GAAM;EAC3D,SAAS,YACP,GAAe,CAAC,SAAS;EAC3B,OAAO;EACP,MAAM,EAAE,cAAc,IAAM;EAC5B,WAAW;EACZ,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require(`../_virtual/_rolldown/runtime.cjs`),t=require(`../node_modules/@openhands/typescript-client/dist/client/device-flow-client.cjs`),n=require(`../
|
|
1
|
+
const e=require(`../_virtual/_rolldown/runtime.cjs`),t=require(`../node_modules/@openhands/typescript-client/dist/client/device-flow-client.cjs`),n=require(`../services/cloud-funnel-analytics.cjs`),r=require(`../api/device-flow-client.cjs`);let i=require(`react`);i=e.__toESM(i,1);var a={status:`idle`,verificationUrl:null,userCode:null,apiKey:null,error:null,errorCode:null};function o(){let[e,o]=i.default.useState(a),s=i.default.useRef(null),c=i.default.useCallback((e,i)=>{s.current?.abort();let c=new AbortController;s.current=c,o({...a,status:`starting`}),(async()=>{let s;try{s=await r.startDeviceFlow(e)}catch(e){if(c.signal.aborted)return;let n=e instanceof Error?e.message:`Failed to start device flow`,r=e instanceof t.DeviceFlowError?e.code:void 0;o({...a,status:`error`,error:n,errorCode:r??null});return}if(!c.signal.aborted){n.trackCloudDeviceAuthorizationStarted(e,i),o({...a,status:`awaiting_authorization`,verificationUrl:s.verification_uri_complete,userCode:s.user_code});try{let t=await r.pollForToken(e,s.device_code,{interval:s.interval,signal:c.signal});if(c.signal.aborted)return;n.trackCloudDeviceAuthorizationSucceeded(e,i),o({...a,status:`success`,apiKey:t.access_token})}catch(e){if(c.signal.aborted)return;if(e instanceof t.DeviceFlowError&&e.code===`cancelled`){o(a);return}let n=e instanceof Error?e.message:`Authorization failed`,r=e instanceof t.DeviceFlowError?e.code:void 0;o({...a,status:`error`,error:n,errorCode:r??null})}}})()},[]),l=i.default.useCallback(()=>{s.current?.abort(),s.current=null,o(a)},[]),u=i.default.useCallback(()=>{s.current?.abort(),s.current=null,o(a)},[]);return i.default.useEffect(()=>()=>{s.current?.abort()},[]),{...e,start:c,cancel:l,reset:u}}exports.useDeviceFlow=o;
|
|
2
2
|
//# sourceMappingURL=use-device-flow.cjs.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DeviceFlowError as e } from "../node_modules/@openhands/typescript-client/dist/client/device-flow-client.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { trackCloudDeviceAuthorizationStarted as t, trackCloudDeviceAuthorizationSucceeded as n } from "../services/cloud-funnel-analytics.js";
|
|
3
|
+
import { pollForToken as r, startDeviceFlow as i } from "../api/device-flow-client.js";
|
|
4
4
|
import a from "react";
|
|
5
5
|
//#region src/hooks/use-device-flow.ts
|
|
6
6
|
var o = {
|
|
@@ -21,7 +21,7 @@ function s() {
|
|
|
21
21
|
}), (async () => {
|
|
22
22
|
let l;
|
|
23
23
|
try {
|
|
24
|
-
l = await
|
|
24
|
+
l = await i(a);
|
|
25
25
|
} catch (t) {
|
|
26
26
|
if (u.signal.aborted) return;
|
|
27
27
|
let n = t instanceof Error ? t.message : "Failed to start device flow", r = t instanceof e ? t.code : void 0;
|
|
@@ -34,19 +34,19 @@ function s() {
|
|
|
34
34
|
return;
|
|
35
35
|
}
|
|
36
36
|
if (!u.signal.aborted) {
|
|
37
|
-
|
|
37
|
+
t(a, s), c({
|
|
38
38
|
...o,
|
|
39
39
|
status: "awaiting_authorization",
|
|
40
40
|
verificationUrl: l.verification_uri_complete,
|
|
41
41
|
userCode: l.user_code
|
|
42
42
|
});
|
|
43
43
|
try {
|
|
44
|
-
let e = await
|
|
44
|
+
let e = await r(a, l.device_code, {
|
|
45
45
|
interval: l.interval,
|
|
46
46
|
signal: u.signal
|
|
47
47
|
});
|
|
48
48
|
if (u.signal.aborted) return;
|
|
49
|
-
|
|
49
|
+
n(a, s), c({
|
|
50
50
|
...o,
|
|
51
51
|
status: "success",
|
|
52
52
|
apiKey: e.access_token
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`./query/query-keys.cjs`),t=require(`../node_modules/@tanstack/react-query/build/modern/useQuery.cjs`),n=require(`../contexts/active-backend-context.cjs`),r=require(`../api/profiles-service/profiles-service.api.cjs`),i=require(`../constants/llm-subscription.cjs`),a=require(`./query/use-
|
|
1
|
+
require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`./query/query-keys.cjs`),t=require(`../node_modules/@tanstack/react-query/build/modern/useQuery.cjs`),n=require(`../contexts/active-backend-context.cjs`),r=require(`../api/profiles-service/profiles-service.api.cjs`),i=require(`../constants/llm-subscription.cjs`),a=require(`./query/use-llm-profiles.cjs`),o=require(`./query/use-settings.cjs`),s=require(`./use-active-agent-profile.cjs`),c=require(`./query/use-config.cjs`),l=require(`../utils/settings-utils.cjs`);function u(){let{data:u,isLoading:d,isError:f}=o.useSettings(),{data:p,isLoading:m,isError:h}=c.useConfig(),{data:g,isLoading:_,isError:v}=a.useLlmProfiles(),{backend:y,orgId:b}=n.useActiveBackend(),x=y.kind===`local`,{activeProfile:S,isLoading:C}=s.useActiveAgentProfile(),w=(S?.agent_kind??u?.agent_settings?.agent_kind)===`acp`,T=u?.llm_api_key_set===!0,E=S?.agent_kind===`openhands`?S.llm_profile_ref:void 0,D=(E?g?.profiles.find(e=>e.name===E):void 0)??g?.profiles.find(e=>e.name===g?.active_profile),O=D?.api_key_set===!0,k=x&&!!D&&!O,{data:A,isLoading:j,isError:M}=t.useQuery({queryKey:[...e.LLM_PROFILES_QUERY_KEYS.all,y.id,b,`detail`,D?.name],queryFn:()=>r.default.getProfile(D.name),...e.CONFIG_CACHE_OPTIONS,enabled:k,meta:{disableToast:!0}}),N=k&&i.isSubscriptionLlmConfig(A?.config),P=l.isSettingsPageHidden(`/settings/llm`,p?.feature_flags);return{isConfigured:w||P||(x?O||N:T),isLoading:d||f&&!u||m||h&&!p||_||v&&!g||C||k&&(j||M&&!A)}}exports.useLlmConfigured=u;
|
|
2
2
|
//# sourceMappingURL=use-llm-configured.cjs.map
|
|
@@ -3,14 +3,14 @@ import { useQuery as n } from "../node_modules/@tanstack/react-query/build/moder
|
|
|
3
3
|
import { useActiveBackend as r } from "../contexts/active-backend-context.js";
|
|
4
4
|
import i from "../api/profiles-service/profiles-service.api.js";
|
|
5
5
|
import { isSubscriptionLlmConfig as a } from "../constants/llm-subscription.js";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
6
|
+
import { useLlmProfiles as o } from "./query/use-llm-profiles.js";
|
|
7
|
+
import { useSettings as s } from "./query/use-settings.js";
|
|
8
8
|
import { useActiveAgentProfile as c } from "./use-active-agent-profile.js";
|
|
9
9
|
import { useConfig as l } from "./query/use-config.js";
|
|
10
10
|
import { isSettingsPageHidden as u } from "../utils/settings-utils.js";
|
|
11
11
|
//#region src/hooks/use-llm-configured.ts
|
|
12
12
|
function d() {
|
|
13
|
-
let { data: d, isLoading: f, isError: p } =
|
|
13
|
+
let { data: d, isLoading: f, isError: p } = s(), { data: m, isLoading: h, isError: g } = l(), { data: _, isLoading: v, isError: y } = o(), { backend: b, orgId: x } = r(), S = b.kind === "local", { activeProfile: C, isLoading: w } = c(), T = (C?.agent_kind ?? d?.agent_settings?.agent_kind) === "acp", E = d?.llm_api_key_set === !0, D = C?.agent_kind === "openhands" ? C.llm_profile_ref : void 0, O = (D ? _?.profiles.find((e) => e.name === D) : void 0) ?? _?.profiles.find((e) => e.name === _?.active_profile), k = O?.api_key_set === !0, A = S && !!O && !k, { data: j, isLoading: M, isError: N } = n({
|
|
14
14
|
queryKey: [
|
|
15
15
|
...t.all,
|
|
16
16
|
b.id,
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require(`../_virtual/_rolldown/runtime.cjs`),t=require(`../api/mcp-health/mcp-health-store.cjs`),n=require(`../utils/mcp-server-health-key.cjs`),r=require(`../api/mcp-health/probe-mcp-server-health.cjs`),i=require(`../types/mcp-health.cjs`);let a=require(`react`);a=e.__toESM(a,1);function o(e){let o=n.getMcpServerHealthKey(e),s=a.default.useSyncExternalStore(t.subscribeMcpHealth,()=>t.getMcpHealthSnapshot()[o]??i.UNCHECKED_MCP_HEALTH),c=a.default.useRef(e);return c.current=e,{health:s,probe:a.default.useCallback(()=>r.probeMcpServerHealth(c.current),[]),reauthorize:a.default.useCallback(()=>r.reauthorizeMcpServerHealth(c.current),[])}}exports.useMcpServerHealth=o;
|
|
2
|
+
//# sourceMappingURL=use-mcp-server-health.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-mcp-server-health.cjs","names":[],"sources":["../../src/hooks/use-mcp-server-health.ts"],"sourcesContent":["import React from \"react\";\nimport {\n getMcpHealthSnapshot,\n subscribeMcpHealth,\n} from \"#/api/mcp-health/mcp-health-store\";\nimport {\n probeMcpServerHealth,\n reauthorizeMcpServerHealth,\n} from \"#/api/mcp-health/probe-mcp-server-health\";\nimport { UNCHECKED_MCP_HEALTH, type McpServerHealth } from \"#/types/mcp-health\";\nimport type { MCPServerConfig } from \"#/types/mcp-server\";\nimport { getMcpServerHealthKey } from \"#/utils/mcp-server-health-key\";\n\n/**\n * Subscribe to an installed server's connection health and expose the\n * probe actions bound to its current config.\n */\nexport function useMcpServerHealth(server: MCPServerConfig) {\n const key = getMcpServerHealthKey(server);\n const health: McpServerHealth = React.useSyncExternalStore(\n subscribeMcpHealth,\n () => getMcpHealthSnapshot()[key] ?? UNCHECKED_MCP_HEALTH,\n );\n\n // Keep the latest config without re-creating the callbacks every render\n // (settings refetches rebuild the server objects each time).\n const serverRef = React.useRef(server);\n serverRef.current = server;\n\n const probe = React.useCallback(\n () => probeMcpServerHealth(serverRef.current),\n [],\n );\n const reauthorize = React.useCallback(\n () => reauthorizeMcpServerHealth(serverRef.current),\n [],\n );\n\n return { health, probe, reauthorize };\n}\n"],"mappings":"iSAiBA,SAAgB,EAAmB,EAAyB,CAC1D,IAAM,EAAM,EAAA,sBAAsB,EAAO,CACnC,EAA0B,EAAA,QAAM,qBACpC,EAAA,uBACM,EAAA,sBAAsB,CAAC,IAAQ,EAAA,qBACtC,CAIK,EAAY,EAAA,QAAM,OAAO,EAAO,CAYtC,MAXA,GAAU,QAAU,EAWb,CAAE,SAAQ,MATH,EAAA,QAAM,gBACZ,EAAA,qBAAqB,EAAU,QAAQ,CAC7C,EAAE,CAOa,CAAO,YALJ,EAAA,QAAM,gBAClB,EAAA,2BAA2B,EAAU,QAAQ,CACnD,EAAE,CAGoB,CAAa"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type McpServerHealth } from "#/types/mcp-health";
|
|
2
|
+
import type { MCPServerConfig } from "#/types/mcp-server";
|
|
3
|
+
/**
|
|
4
|
+
* Subscribe to an installed server's connection health and expose the
|
|
5
|
+
* probe actions bound to its current config.
|
|
6
|
+
*/
|
|
7
|
+
export declare function useMcpServerHealth(server: MCPServerConfig): {
|
|
8
|
+
health: McpServerHealth;
|
|
9
|
+
probe: () => Promise<void>;
|
|
10
|
+
reauthorize: () => Promise<import("#/types/mcp-server").ExtendedMCPTestResponse | null>;
|
|
11
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { getMcpHealthSnapshot as e, subscribeMcpHealth as t } from "../api/mcp-health/mcp-health-store.js";
|
|
2
|
+
import { getMcpServerHealthKey as n } from "../utils/mcp-server-health-key.js";
|
|
3
|
+
import { probeMcpServerHealth as r, reauthorizeMcpServerHealth as i } from "../api/mcp-health/probe-mcp-server-health.js";
|
|
4
|
+
import { UNCHECKED_MCP_HEALTH as a } from "../types/mcp-health.js";
|
|
5
|
+
import o from "react";
|
|
6
|
+
//#region src/hooks/use-mcp-server-health.ts
|
|
7
|
+
function s(s) {
|
|
8
|
+
let c = n(s), l = o.useSyncExternalStore(t, () => e()[c] ?? a), u = o.useRef(s);
|
|
9
|
+
return u.current = s, {
|
|
10
|
+
health: l,
|
|
11
|
+
probe: o.useCallback(() => r(u.current), []),
|
|
12
|
+
reauthorize: o.useCallback(() => i(u.current), [])
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
//#endregion
|
|
16
|
+
export { s as useMcpServerHealth };
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=use-mcp-server-health.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-mcp-server-health.js","names":[],"sources":["../../src/hooks/use-mcp-server-health.ts"],"sourcesContent":["import React from \"react\";\nimport {\n getMcpHealthSnapshot,\n subscribeMcpHealth,\n} from \"#/api/mcp-health/mcp-health-store\";\nimport {\n probeMcpServerHealth,\n reauthorizeMcpServerHealth,\n} from \"#/api/mcp-health/probe-mcp-server-health\";\nimport { UNCHECKED_MCP_HEALTH, type McpServerHealth } from \"#/types/mcp-health\";\nimport type { MCPServerConfig } from \"#/types/mcp-server\";\nimport { getMcpServerHealthKey } from \"#/utils/mcp-server-health-key\";\n\n/**\n * Subscribe to an installed server's connection health and expose the\n * probe actions bound to its current config.\n */\nexport function useMcpServerHealth(server: MCPServerConfig) {\n const key = getMcpServerHealthKey(server);\n const health: McpServerHealth = React.useSyncExternalStore(\n subscribeMcpHealth,\n () => getMcpHealthSnapshot()[key] ?? UNCHECKED_MCP_HEALTH,\n );\n\n // Keep the latest config without re-creating the callbacks every render\n // (settings refetches rebuild the server objects each time).\n const serverRef = React.useRef(server);\n serverRef.current = server;\n\n const probe = React.useCallback(\n () => probeMcpServerHealth(serverRef.current),\n [],\n );\n const reauthorize = React.useCallback(\n () => reauthorizeMcpServerHealth(serverRef.current),\n [],\n );\n\n return { health, probe, reauthorize };\n}\n"],"mappings":";;;;;;AAiBA,SAAgB,EAAmB,GAAyB;CAC1D,IAAM,IAAM,EAAsB,EAAO,EACnC,IAA0B,EAAM,qBACpC,SACM,GAAsB,CAAC,MAAQ,EACtC,EAIK,IAAY,EAAM,OAAO,EAAO;AAYtC,QAXA,EAAU,UAAU,GAWb;EAAE;EAAQ,OATH,EAAM,kBACZ,EAAqB,EAAU,QAAQ,EAC7C,EAAE,CAOa;EAAO,aALJ,EAAM,kBAClB,EAA2B,EAAU,QAAQ,EACnD,EAAE,CAGoB;EAAa"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`../stores/use-event-store.cjs`),t=require(`../stores/skill-install-banner-store.cjs`),n=require(`../utils/skill-install-events.cjs`);let r=require(`react`);var i=i=>{let a=e.useEventStore(e=>e.events),o=e.useEventStore(e=>e.loadedConversationId),s=t.useSkillInstallBannerStore(e=>e.dismissedEventIds),c=t.useSkillInstallBannerStore(e=>e.dismiss),l=(0,r.useMemo)(()=>!i||i!==o?[]:n.detectSkillInstalls(a).filter(e=>!s[e.eventId]),[i,o,a,s]);return{installs:l,dismissAll:(0,r.useCallback)(()=>c(l.map(e=>e.eventId)),[c,l])}};exports.useSkillInstalls=i;
|
|
2
|
+
//# sourceMappingURL=use-skill-installs.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-skill-installs.cjs","names":[],"sources":["../../src/hooks/use-skill-installs.ts"],"sourcesContent":["import { useCallback, useMemo } from \"react\";\nimport { useEventStore } from \"#/stores/use-event-store\";\nimport { useSkillInstallBannerStore } from \"#/stores/skill-install-banner-store\";\nimport { detectSkillInstalls } from \"#/utils/skill-install-events\";\n\n/**\n * Skill installs performed by the agent in this conversation (via the\n * bundled add-skill flow), minus the ones the user dismissed. The event\n * store is global, so results are scoped to the conversation it currently\n * holds — a mismatched id (remount race) yields no installs.\n */\nexport const useSkillInstalls = (conversationId: string | null | undefined) => {\n const events = useEventStore((s) => s.events);\n const loadedConversationId = useEventStore((s) => s.loadedConversationId);\n const dismissedEventIds = useSkillInstallBannerStore(\n (s) => s.dismissedEventIds,\n );\n const dismiss = useSkillInstallBannerStore((s) => s.dismiss);\n\n const installs = useMemo(() => {\n if (!conversationId || conversationId !== loadedConversationId) return [];\n return detectSkillInstalls(events).filter(\n (install) => !dismissedEventIds[install.eventId],\n );\n }, [conversationId, loadedConversationId, events, dismissedEventIds]);\n\n const dismissAll = useCallback(\n () => dismiss(installs.map((install) => install.eventId)),\n [dismiss, installs],\n );\n\n return { installs, dismissAll };\n};\n"],"mappings":"0NAWA,IAAa,EAAoB,GAA8C,CAC7E,IAAM,EAAS,EAAA,cAAe,GAAM,EAAE,OAAO,CACvC,EAAuB,EAAA,cAAe,GAAM,EAAE,qBAAqB,CACnE,EAAoB,EAAA,2BACvB,GAAM,EAAE,kBACV,CACK,EAAU,EAAA,2BAA4B,GAAM,EAAE,QAAQ,CAEtD,GAAA,EAAA,EAAA,aACA,CAAC,GAAkB,IAAmB,EAA6B,EAAE,CAClE,EAAA,oBAAoB,EAAO,CAAC,OAChC,GAAY,CAAC,EAAkB,EAAQ,SACzC,CACA,CAAC,EAAgB,EAAsB,EAAQ,EAAkB,CAAC,CAOrE,MAAO,CAAE,WAAU,YAAA,EAAA,EAAA,iBAJX,EAAQ,EAAS,IAAK,GAAY,EAAQ,QAAQ,CAAC,CACzD,CAAC,EAAS,EAAS,CAGF,CAAY"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill installs performed by the agent in this conversation (via the
|
|
3
|
+
* bundled add-skill flow), minus the ones the user dismissed. The event
|
|
4
|
+
* store is global, so results are scoped to the conversation it currently
|
|
5
|
+
* holds — a mismatched id (remount race) yields no installs.
|
|
6
|
+
*/
|
|
7
|
+
export declare const useSkillInstalls: (conversationId: string | null | undefined) => {
|
|
8
|
+
installs: import("#/utils/skill-install-events").DetectedSkillInstall[];
|
|
9
|
+
dismissAll: () => void;
|
|
10
|
+
};
|