@openhands/agent-canvas 1.9.0 → 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/README.windows.md +2 -2
- package/build/assets/{acp-providers-C921BlYB.js → acp-providers-DLe_gVDY.js} +1 -1
- package/build/assets/active-backend-context-B0wI7OzM.js +2 -0
- package/build/assets/agent-context-settings-CaQtdNA-.js +1 -0
- package/build/assets/{agent-profiles-settings-BymJf3EP.js → agent-profiles-settings-CvuErjp6.js} +1 -1
- package/build/assets/agent-server-conversation-service.api-km_8sOVf.js +41 -0
- package/build/assets/{agent-settings-WzqXk6B4.js → agent-settings-UE-U4Xii.js} +2 -2
- package/build/assets/agent-settings-nmO-KSXr.js +1 -0
- package/build/assets/alert-banner-BMaOtTCG.js +1 -0
- package/build/assets/{api-key-entry-screen-DI0I04O3.js → api-key-entry-screen-Cy66vT4D.js} +1 -1
- package/build/assets/{app-settings-DGistSFV.js → app-settings-9ok42bV6.js} +1 -1
- package/build/assets/automation-detail-fuITm6i3.js +3 -0
- package/build/assets/automation-export-CRq40mux.js +2 -0
- package/build/assets/automation-setup-route-EXDazOHW.js +1 -0
- package/build/assets/automation-templates-BArZsaxP.js +1 -0
- package/build/assets/automations-list-CG4HKOTn.js +1 -0
- package/build/assets/{back-nav-button-D4ngzpSh.js → back-nav-button-BZB6H7xz.js} +1 -1
- package/build/assets/{backend-form-modal-B8D5hBzK.js → backend-form-modal-B_lXjOGa.js} +1 -1
- package/build/assets/{backend-synced-settings-badge-BnzI8Ysj.js → backend-synced-settings-badge-B_NXJ3u1.js} +1 -1
- package/build/assets/{badge-1Mf1iPcX.js → badge-C64c-7PO.js} +1 -1
- package/build/assets/{base-modal-BBuy0WQQ.js → base-modal-C0RQPug5.js} +1 -1
- package/build/assets/bot-DuN83i3p.js +1 -0
- package/build/assets/{brand-button-DGN6Y9o6.js → brand-button-DJmFCyMK.js} +1 -1
- package/build/assets/{browser-D_ekTlTS.js → browser-D3gd2n83.js} +2 -2
- package/build/assets/{browser-tab-D4a4Ou_w.js → browser-tab-BicAWuJ1.js} +1 -1
- package/build/assets/{chat-send-button-CgbcjD97.js → chat-send-button-CCrH1E8u.js} +1 -1
- package/build/assets/check-DLOKoFU9.js +1 -0
- package/build/assets/{checkmark-CxdXtM3b.js → checkmark-XZyokq_Y.js} +1 -1
- package/build/assets/chevron-down-CnIbtM6i.js +1 -0
- package/build/assets/circle-check-CxCYJrpZ.js +1 -0
- package/build/assets/{circle-plus-check-toggle-yTAS-nX3.js → circle-plus-check-toggle-CB_sNERY.js} +1 -1
- package/build/assets/{close-CDAVqnTn.js → close-ScPlnwyq.js} +1 -1
- package/build/assets/{cloud-funnel-analytics-CEOl5Gxr.js → cloud-funnel-analytics-XynamQGU.js} +1 -1
- package/build/assets/{combobox-caret-Bd2yySnF.js → combobox-caret-Bwiifgjs.js} +1 -1
- package/build/assets/command-menu-CA3IjGNc.js +1 -0
- package/build/assets/condenser-settings-cNGy75gq.js +1 -0
- package/build/assets/{confirmation-modal-NCUPr2-O.js → confirmation-modal-BATFmFyP.js} +1 -1
- package/build/assets/context-menu-list-item-DhJCcBA0.js +1 -0
- package/build/assets/conversation-B6t6EiVp.js +1 -0
- package/build/assets/{conversation-CUJ0Vo8g.js → conversation-Csdxh9Xt.js} +7 -7
- package/build/assets/conversation-panel-B6t6EiVp.js +1 -0
- package/build/assets/{conversation-state-store-F62HvuI1.js → conversation-state-store-C2QzhPaK.js} +1 -1
- package/build/assets/{conversation-store-C6hSXHw0.js → conversation-store-B8Eahyeg.js} +1 -1
- package/build/assets/{conversation-tab-empty-state-BCZ7rUMH.js → conversation-tab-empty-state-D3fb5xIA.js} +1 -1
- package/build/assets/{copy-DCmZtz6n.js → copy-DaHuDtG4.js} +1 -1
- package/build/assets/{copy-z7idLzWO.js → copy-Drmhc2jD.js} +1 -1
- package/build/assets/{copy-to-clipboard-button-D_Lp6-Fl.js → copy-to-clipboard-button-c4MQwKGj.js} +1 -1
- package/build/assets/{device-verify-DLmolX8Q.js → device-verify-oFpQoLgm.js} +1 -1
- package/build/assets/{dist-hOnv1nn2.js → dist-Bl64nBZL.js} +1 -1
- package/build/assets/{dropdown-classes-BB8rzqXL.js → dropdown-classes-f91ARMV1.js} +1 -1
- package/build/assets/entry.client-BCzY2Bf3.js +2 -0
- package/build/assets/enum-filter-dropdown-HG3q3rkV.js +1 -0
- package/build/assets/{environment-switch-overlay-BepBBX66.js → environment-switch-overlay-CquZXolz.js} +1 -1
- package/build/assets/{extensions-hub-R3KNv-5V.js → extensions-hub-BeweE0PW.js} +1 -1
- package/build/assets/{extensions-navigation-CfWFmI1I.js → extensions-navigation-Dd58NlUF.js} +1 -1
- package/build/assets/{external-link-BdBSg8rk.js → external-link-zWbg5KXS.js} +1 -1
- package/build/assets/file-text-RecuaId_.js +1 -0
- package/build/assets/files-tab-CLLG55-q.js +1 -0
- package/build/assets/{folder-C86qXV7M.js → folder-C1ou4_DT.js} +1 -1
- package/build/assets/{form-control-classes-DAfsCJTe.js → form-control-classes-pHtZUI6K.js} +1 -1
- package/build/assets/format-relative-time-6-3uvOXe.js +1 -0
- package/build/assets/format-time-delta-BIR5Os7T.js +1 -0
- package/build/assets/{git-provider-icon-BZqqUPlm.js → git-provider-icon-wg7ShB98.js} +1 -1
- package/build/assets/{git-repo-dropdown-DEpOwUez.js → git-repo-dropdown-CWnaUyxL.js} +1 -1
- package/build/assets/git-repo-dropdown-TzOuG5Ef.js +1 -0
- package/build/assets/{highlighted-source-view-CX9oIoVT.js → highlighted-source-view-DBtI3por.js} +1 -1
- package/build/assets/home-BpZQkDWM.js +1 -0
- package/build/assets/home-OEx0XtfP.js +1 -0
- package/build/assets/{home-store-Ch1ErdBc.js → home-store-DM4qw1lF.js} +1 -1
- package/build/assets/{iconBase-B2rQun3J.js → iconBase-C2sR-uAp.js} +1 -1
- package/build/assets/index-home-OEx0XtfP.js +1 -0
- package/build/assets/info-C9lpK5pw.js +1 -0
- package/build/assets/install-server-modal-DnjZrJUy.js +1 -0
- package/build/assets/kebab-menu-item-content-By16Tm_0.js +1 -0
- package/build/assets/{launch-B1POpHuP.js → launch-C9uijypN.js} +1 -1
- package/build/assets/{link-external-BDBCz-_z.js → link-external-BNZzCM1I.js} +1 -1
- package/build/assets/list-filter-C86CBRDE.js +1 -0
- package/build/assets/{list-todo-DtiL3lTp.js → list-todo-CheUtB7F.js} +1 -1
- package/build/assets/llm-not-configured-banner-DrBrhfN0.js +27 -0
- package/build/assets/{llm-settings-CXo8iPNW.js → llm-settings-CRsLqxgu.js} +1 -1
- package/build/assets/llm-settings-RBm_3kNm.js +1 -0
- package/build/assets/{llm-subscription-service-DBJbfd8Z.js → llm-subscription-service-DwjJ8-_X.js} +1 -1
- package/build/assets/loader-circle-C5AnEN8r.js +1 -0
- package/build/assets/{loading-spinner-DfZ_bhV7.js → loading-spinner-6Yj-YyoS.js} +1 -1
- package/build/assets/{manage-backends-modal-CwyWsiag.js → manage-backends-modal-DrwErS0N.js} +1 -1
- package/build/assets/manifest-c352d453.js +1 -0
- package/build/assets/manifest-subpage-layout-CtqVwIvJ.js +1 -0
- package/build/assets/{markdown-renderer-DgiLLhW6.js → markdown-renderer-lsvsp7jn.js} +4 -4
- package/build/assets/mcp-DD4hPTRE.js +9 -0
- package/build/assets/mcp-marketplace-utils-BMnYz0Gc.js +1 -0
- package/build/assets/messages-Dt77e0qi.js +40 -0
- package/build/assets/{modal-backdrop-X-vKo61e.js → modal-backdrop-BSzNhM4r.js} +1 -1
- package/build/assets/{modal-body-CMsDpalT.js → modal-body-BHGCSAtj.js} +1 -1
- package/build/assets/{modal-classes-B6PDrxXo.js → modal-classes-DSTLuxkA.js} +1 -1
- package/build/assets/{modal-close-button-DyxBZaAb.js → modal-close-button-dheWZ2ys.js} +1 -1
- package/build/assets/mouse-pointer-click-Px-dXWcS.js +1 -0
- package/build/assets/{navigation-context-BOGzIng3.js → navigation-context-CQZwH_tC.js} +1 -1
- package/build/assets/navigation-link-Bxo3-4vo.js +1 -0
- package/build/assets/onboarding-5CZvRBbh.js +1 -0
- package/build/assets/onboarding-modal-CD2ehuxt.js +1 -0
- package/build/assets/{openhands-logo-CmYvJXBa.js → openhands-logo-BS-Epajy.js} +1 -1
- package/build/assets/{organization-service.api-UDy63-oC.js → organization-service.api-Dsuoep0g.js} +1 -1
- package/build/assets/{pencil-BjgtZmWp.js → pencil-Bl3GWhgq.js} +1 -1
- package/build/assets/{planner-tab-BWk8885v.js → planner-tab-DeO7Thb0.js} +1 -1
- package/build/assets/{plugins-management-service-CjkgF2dd.js → plugins-management-service-C9f75R6X.js} +1 -1
- package/build/assets/plus-CtzlyAoF.js +1 -0
- package/build/assets/{profiles-service.api-CukSFLzz.js → profiles-service.api-Dl20_2IM.js} +1 -1
- package/build/assets/{providers-CqUWC85T.js → providers-CeuhK46N.js} +1 -1
- package/build/assets/{proxy-BBUG3sd2.js → proxy-CIGI9zQC.js} +1 -1
- package/build/assets/{puzzle-BoNc6zZ8.js → puzzle-B3v361yY.js} +1 -1
- package/build/assets/recommended-automations-launcher-6xmbf7lh.js +1 -0
- package/build/assets/{refresh-cw-BrM5ZAZD.js → refresh-cw-B9GhC3QC.js} +1 -1
- package/build/assets/root-BQPNqNvD.js +2 -0
- package/build/assets/root-BeuHFY2s.css +1 -0
- package/build/assets/root-layout-Dl_2CDoq.js +3 -0
- package/build/assets/{schema-field-nImDoY6-.js → schema-field-z2vSLuLo.js} +1 -1
- package/build/assets/{sdk-section-page-BxMrtUNV.js → sdk-section-page-BnCXAytf.js} +1 -1
- package/build/assets/{search-7DRiGm4Z.js → search-BatSpWed.js} +1 -1
- package/build/assets/search-CYaiKHRp.js +1 -0
- package/build/assets/{secrets-service-Dhjh3HhH.js → secrets-service-DGUNlwQd.js} +1 -1
- package/build/assets/{secrets-settings-CPdxceT_.js → secrets-settings-DUmML_dK.js} +1 -1
- package/build/assets/{segmented-toggle-Do6oyepX.js → segmented-toggle-eSofF7gn.js} +1 -1
- package/build/assets/settings-CWFxymAf.js +1 -0
- package/build/assets/{settings-BRbnfKEm.js → settings-Co-M5bK9.js} +1 -1
- package/build/assets/{settings-dropdown-input-DYCULKpp.js → settings-dropdown-input-Cx4g7Xfl.js} +1 -1
- package/build/assets/{settings-gear-TYXnELES.js → settings-gear-DaJj6Pde.js} +1 -1
- package/build/assets/{settings-index-C9o2NBO0.js → settings-index-BECdgecg.js} +1 -1
- package/build/assets/{settings-input-B-q2gkVy.js → settings-input-BQY115xH.js} +1 -1
- package/build/assets/settings-like-page-layout-classes-Cw4Yzv_P.js +1 -0
- package/build/assets/{settings-list-classes-WpQi0q1L.js → settings-list-classes-C9cLrrcc.js} +1 -1
- package/build/assets/{settings-modal-CEK0AIx6.js → settings-modal-ChBJNTdd.js} +1 -1
- package/build/assets/{settings-section-header-context-CnIIQAUn.js → settings-section-header-context-BOJ_Fbak.js} +1 -1
- package/build/assets/settings-service.api-Dz9cZyvx.js +1 -0
- package/build/assets/{settings-switch-LqKdGxHL.js → settings-switch-BIodMVz9.js} +1 -1
- package/build/assets/{shared-conversation-Bu-dQlgp.js → shared-conversation-CSF0aTuE.js} +1 -1
- package/build/assets/{sidebar-layout-oHBGQmLh.js → sidebar-layout-DEycoFd_.js} +1 -1
- package/build/assets/sidebar-mobile-menu-toggle-DeRvTupV.js +1 -0
- package/build/assets/{sidebar-nav-link-CrujNA09.js → sidebar-nav-link-BjpQ-NVc.js} +1 -1
- package/build/assets/{sidebar-store-Bui-WNEr.js → sidebar-store-B04sX8aP.js} +1 -1
- package/build/assets/{skill-card-pill-row-CZBI7OqH.js → skill-card-pill-row-BH6fPGba.js} +1 -1
- package/build/assets/{skill-icon-badge-BOov_phZ.js → skill-icon-badge-D4uznfjU.js} +1 -1
- package/build/assets/skill-scope-DH_AUUUP.js +1 -0
- package/build/assets/{skills-CYFLsN5U.js → skills-B0IliMxw.js} +1 -1
- package/build/assets/{skills-plugins-D0PiHWAD.js → skills-plugins-vfvOk34h.js} +1 -1
- package/build/assets/skills-settings-DnbIu2eO.js +2 -0
- package/build/assets/sparkles-g7y3r-Ut.js +1 -0
- package/build/assets/{styled-tooltip-C7grwnOX.js → styled-tooltip-CQ9JEFiO.js} +1 -1
- package/build/assets/{switch-skeleton-BQoOhQTB.js → switch-skeleton-DwOoCqaL.js} +1 -1
- package/build/assets/{syntax-highlighter-B92AFGMy.js → syntax-highlighter-BGDg_7w9.js} +1 -1
- package/build/assets/{task-list-tab-R3ac6m7O.js → task-list-tab-DeF_uXdw.js} +1 -1
- package/build/assets/{terminal-cMS3RgVE.js → terminal-BUpID2wS.js} +1 -1
- package/build/assets/{terminal-yqkNdEAx.js → terminal-DRc4rup7.js} +1 -1
- package/build/assets/{toggle-switch-BeSrbgCg.js → toggle-switch--8n8NeV_.js} +1 -1
- package/build/assets/{trash-2-wW5TWcdN.js → trash-2-CzDVN-Iw.js} +1 -1
- package/build/assets/{typography-iYhzLlHO.js → typography-BSbUhJPn.js} +1 -1
- package/build/assets/{u-check-circle-DBEvndTS.js → u-check-circle-BKn1spCL.js} +1 -1
- package/build/assets/{u-edit-809W9D9T.js → u-edit-DAkcF52u.js} +1 -1
- package/build/assets/{u-robot-CJtSzy5X.js → u-robot-BvAOA2ZD.js} +1 -1
- package/build/assets/{use-acp-credential-form-DUxbxmbq.js → use-acp-credential-form-BGKFi1VL.js} +1 -1
- package/build/assets/{use-activate-agent-profile-CDHA52tC.js → use-activate-agent-profile-2nvALjC-.js} +1 -1
- package/build/assets/{use-agent-profiles-TsOdIyw5.js → use-agent-profiles-BlQA67MW.js} +1 -1
- package/build/assets/{use-breakpoint-DA7JqsRN.js → use-breakpoint-DWtihr9g.js} +1 -1
- package/build/assets/{use-can-manage-org-profiles-Bt1M71u5.js → use-can-manage-org-profiles-Clw5Dh1s.js} +1 -1
- package/build/assets/{use-click-outside-element-DKqpqEEm.js → use-click-outside-element-W6Os4Nlb.js} +1 -1
- package/build/assets/{use-cloud-current-user-id-DWt7HCgf.js → use-cloud-current-user-id-B8AQSQFM.js} +1 -1
- package/build/assets/{use-config-CxlEdf_v.js → use-config-C3zGuUQI.js} +1 -1
- package/build/assets/{use-create-conversation-nOJ6Um5h.js → use-create-conversation-FaP0kUpg.js} +1 -1
- package/build/assets/{use-create-secret-Dj5ang9x.js → use-create-secret-CgQ3pXd6.js} +1 -1
- package/build/assets/use-is-authed-Bka89Xmm.js +1 -0
- package/build/assets/{use-is-creating-conversation-CAggrM75.js → use-is-creating-conversation-CVefC9Ns.js} +1 -1
- package/build/assets/{use-launch-skill-in-chat-DKzCTMt0.js → use-launch-skill-in-chat-BcKNjxxd.js} +1 -1
- package/build/assets/use-llm-profiles-C-tDO6UB.js +1 -0
- package/build/assets/use-manifest-capabilities-DLP5wCxp.js +1 -0
- package/build/assets/{use-onboarding-completion-gxQlcEy2.js → use-onboarding-completion-BiCdXvlU.js} +1 -1
- package/build/assets/{use-plugins-marketplace-CVO7sXYR.js → use-plugins-marketplace-DRFNLBlr.js} +1 -1
- package/build/assets/use-save-agent-profile-CaGVAudI.js +1 -0
- package/build/assets/{use-save-settings-L3aMaDeS.js → use-save-settings-C9B8Y-h3.js} +1 -1
- package/build/assets/{use-settings-8nt3DGxW.js → use-settings-3RcgdUuZ.js} +1 -1
- package/build/assets/{use-settings-nav-items-DHAAD-zk.js → use-settings-nav-items-y-Oyc93G.js} +2 -2
- package/build/assets/use-tracking-CTtkLAmx.js +3 -0
- package/build/assets/{use-user-conversation-BIIpGUgM.js → use-user-conversation-Bei82QsZ.js} +1 -1
- package/build/assets/{useInfiniteQuery-BLRVmVPU.js → useInfiniteQuery-DbCv0Jzd.js} +1 -1
- package/build/assets/{useMutation-CaSHLnX0.js → useMutation-ChpkYxI5.js} +1 -1
- package/build/assets/{useQueries--d_WWAzc.js → useQueries-Cjv3E8_1.js} +1 -1
- package/build/assets/useQuery-BCnzy4LX.js +1 -0
- package/build/assets/utils-BX9XJ0IE.js +1 -0
- package/build/assets/{vendor-markdown-BML7QbqS.js → vendor-markdown-j0kYzV48.js} +1 -1
- package/build/assets/{vendor-styling-Bcgpimp9.js → vendor-styling-Ck5D_A2Q.js} +6 -6
- package/build/assets/{vendor~browser-jaN4ilxM.js → vendor~browser-C6uXH-dw.js} +2 -2
- package/build/assets/vendor~browser-DJ1pl_wn.js +47 -0
- package/build/assets/{vendor~browser-tab-_-VCXq8n.js → vendor~browser-tab-C5uuAxZX.js} +1 -1
- package/build/assets/vendor~entry.client-CgNUwtQL.js +1 -0
- package/build/assets/{vendor~entry.client-BcYIVQvB.js → vendor~entry.client-zSIea5EO.js} +2 -2
- package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~cy4jtuc2-rfV8mQ9m.js +1 -0
- package/build/assets/{vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~b0bpqexo-CbTboogo.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~kv3pap4j-oGvLV0dO.js} +4 -4
- package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~lq5hicxx-cHFhpUBq.js +26 -0
- package/build/assets/{vendor~files-tab-C7RmQJwN.js → vendor~files-tab-C87pjSpi.js} +1 -1
- package/build/assets/{vendor~index-home~home~conversation-panel~conversation-Bqp1ZqJM.js → vendor~index-home~home~conversation-panel~conversation-DiXf0dkj.js} +1 -1
- package/build/assets/{vendor~conversation-panel~conversation~alert-banner-BNzz5FuZ.js → vendor~index-home~home~conversation-panel~conversation~alert-banner-B3qC_oj8.js} +1 -1
- package/build/assets/{vendor~launch-ChXCOGw8.js → vendor~launch-CHwEQG6e.js} +1 -1
- package/build/assets/vendor~module-DyG7x7JT.js +2 -0
- package/build/assets/{vendor~root-layout~conversation-panel~conversation-BCn8lzeG.js → vendor~root-layout~conversation-panel~conversation-DEzjR4K7.js} +1 -1
- package/build/assets/{vendor~root-layout~conversation-panel~conversation~shared-conversation-DRblkyXD.js → vendor~root-layout~conversation-panel~conversation~shared-conversation-DOuig0C0.js} +1 -1
- package/build/assets/vendor~root-layout~conversation-panel~conversation~skills-settings~automations-list~shared-~bovqqk8e-U-xdsAEx.js +1 -0
- package/build/assets/{vendor~root-layout~index-home~home~conversation-panel~conversation~automation-setup-route-B_L-gcOG.js → vendor~root-layout~index-home~home~conversation-panel~conversation~automation-setup-route-CjECvSl5.js} +1 -1
- package/build/assets/{vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation-sjx0x5ac.js → vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation-CQR5Sa0H.js} +1 -1
- package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~gy8zbn65-CGt6bWRT.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~gxu4j2ea-Cwhh3zLe.js} +1 -1
- package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~dfc8ddxy-tTyxnjXT.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~hjcjabwg-CuQhkiS7.js} +1 -1
- package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~9pstowjp-BOVIFA_g.js +73 -0
- package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~dufan6ng-Dtdw8H0q.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~ht43enc2-C0JXQb_q.js} +162 -54
- package/build/assets/{verification-settings-DBsnSXC3.js → verification-settings-nD61Ijph.js} +1 -1
- package/build/assets/wrench-DRitTfwe.js +1 -0
- package/build/assets/x-RYDBg-e2.js +1 -0
- package/build/assets/{x-mark-jcTkPiOB.js → x-mark-BopmFoBq.js} +1 -1
- package/build/assets/zap-tbKDzCe3.js +1 -0
- package/build/index.html +4 -4
- package/build/locales/ar/openhands.json +70 -4
- package/build/locales/ca/openhands.json +70 -4
- package/build/locales/de/openhands.json +70 -4
- package/build/locales/en/openhands.json +70 -4
- package/build/locales/es/openhands.json +70 -4
- package/build/locales/fr/openhands.json +70 -4
- package/build/locales/it/openhands.json +70 -4
- package/build/locales/ja/openhands.json +70 -4
- package/build/locales/ko-KR/openhands.json +70 -4
- package/build/locales/no/openhands.json +70 -4
- package/build/locales/pt/openhands.json +70 -4
- package/build/locales/tr/openhands.json +70 -4
- package/build/locales/uk/openhands.json +70 -4
- package/build/locales/zh-CN/openhands.json +70 -4
- package/build/locales/zh-TW/openhands.json +70 -4
- package/build/mockServiceWorker.js +21 -9
- package/config/defaults.json +3 -3
- package/dist/api/automation-service/automation-service.api.cjs +1 -1
- package/dist/api/automation-service/automation-service.api.cjs.map +1 -1
- package/dist/api/automation-service/automation-service.api.d.ts +5 -0
- package/dist/api/automation-service/automation-service.api.js +11 -0
- package/dist/api/automation-service/automation-service.api.js.map +1 -1
- package/dist/api/backend-registry/active-store.cjs +1 -1
- package/dist/api/backend-registry/active-store.cjs.map +1 -1
- package/dist/api/backend-registry/active-store.js +36 -31
- package/dist/api/backend-registry/active-store.js.map +1 -1
- package/dist/api/backend-registry/url-selection.cjs +2 -0
- package/dist/api/backend-registry/url-selection.cjs.map +1 -0
- package/dist/api/backend-registry/url-selection.d.ts +31 -0
- package/dist/api/backend-registry/url-selection.js +29 -0
- package/dist/api/backend-registry/url-selection.js.map +1 -0
- package/dist/api/mcp-service/mcp-redacted-credentials.cjs +1 -1
- package/dist/api/mcp-service/mcp-redacted-credentials.cjs.map +1 -1
- package/dist/api/mcp-service/mcp-redacted-credentials.d.ts +3 -2
- package/dist/api/mcp-service/mcp-redacted-credentials.js +32 -27
- package/dist/api/mcp-service/mcp-redacted-credentials.js.map +1 -1
- 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 +19 -19
- package/dist/api/mcp-service/mcp-service.api.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 +10 -0
- package/dist/api/settings-service/settings-service.api.js +90 -100
- package/dist/api/settings-service/settings-service.api.js.map +1 -1
- package/dist/api/skills-service.cjs +1 -1
- package/dist/api/skills-service.cjs.map +1 -1
- package/dist/api/skills-service.js +1 -0
- package/dist/api/skills-service.js.map +1 -1
- package/dist/assets/chevron-left.d.ts +1 -1
- package/dist/assets/chevron-right.d.ts +1 -1
- package/dist/components/conversation-events/chat/event-message-components/collapsible-thinking.d.ts +2 -1
- package/dist/components/conversation-events/chat/event-message-components/critic-result-display.d.ts +2 -1
- package/dist/components/conversation-events/chat/event-message-components/error-event-message.d.ts +2 -1
- package/dist/components/conversation-events/chat/event-message-components/event-group.d.ts +1 -1
- package/dist/components/conversation-events/chat/event-message-components/finish-event-message.d.ts +1 -1
- package/dist/components/conversation-events/chat/event-message-components/generic-event-message-wrapper.d.ts +1 -1
- package/dist/components/conversation-events/chat/event-message-components/observation-pair-event-message.d.ts +2 -1
- package/dist/components/conversation-events/chat/event-message-components/skill-item-expanded.d.ts +1 -1
- package/dist/components/conversation-events/chat/event-message-components/skill-ready-content-list.d.ts +2 -1
- package/dist/components/conversation-events/chat/event-message-components/thought-event-message.d.ts +1 -1
- package/dist/components/conversation-events/chat/event-message-components/user-assistant-event-message.d.ts +2 -1
- package/dist/components/conversation-events/chat/event-message.d.ts +2 -1
- package/dist/components/conversation-events/chat/task-tracking/task-item.d.ts +1 -1
- package/dist/components/conversation-events/chat/task-tracking/task-list-section.d.ts +1 -1
- package/dist/components/features/alerts/alert-banner.d.ts +1 -1
- package/dist/components/features/analytics/telemetry-consent-banner.d.ts +2 -1
- package/dist/components/features/automations/add-automation-modal.d.ts +1 -1
- package/dist/components/features/automations/automation-card-skeleton.d.ts +1 -1
- package/dist/components/features/automations/automation-card.d.ts +9 -1
- package/dist/components/features/automations/automation-group.d.ts +9 -1
- package/dist/components/features/automations/automation-health-badge.d.ts +8 -0
- package/dist/components/features/automations/automation-list-row.d.ts +3 -1
- package/dist/components/features/automations/automation-run-insights.d.ts +17 -0
- package/dist/components/features/automations/automation-view-toggle.d.ts +1 -1
- package/dist/components/features/automations/backend-not-configured.d.ts +1 -1
- package/dist/components/features/automations/create-instructions.d.ts +2 -2
- package/dist/components/features/automations/dashboard/automations-dashboard-controls.d.ts +18 -0
- package/dist/components/features/automations/dashboard/automations-filtered-empty-state.d.ts +9 -0
- package/dist/components/features/automations/dashboard/use-automation-sub-page-nav.d.ts +12 -0
- package/dist/components/features/automations/delete-confirmation-modal.d.ts +1 -1
- package/dist/components/features/automations/detail/active-status-badge.d.ts +1 -1
- package/dist/components/features/automations/detail/activity-log-item.d.ts +1 -1
- package/dist/components/features/automations/detail/activity-log-section.d.ts +3 -1
- package/dist/components/features/automations/detail/activity-section.d.ts +1 -1
- package/dist/components/features/automations/detail/back-link.d.ts +1 -1
- package/dist/components/features/automations/detail/branch-badge.d.ts +1 -1
- package/dist/components/features/automations/detail/config-field.d.ts +1 -1
- package/dist/components/features/automations/detail/configuration-section.d.ts +1 -1
- package/dist/components/features/automations/detail/debug-automation-button.d.ts +1 -1
- package/dist/components/features/automations/detail/detail-header.d.ts +1 -1
- package/dist/components/features/automations/detail/detail-skeleton.d.ts +1 -1
- package/dist/components/features/automations/detail/edit-automation-modal.d.ts +1 -1
- package/dist/components/features/automations/detail/not-found-state.d.ts +1 -1
- package/dist/components/features/automations/detail/plugin-chip.d.ts +1 -1
- package/dist/components/features/automations/detail/plugins-section.d.ts +1 -1
- package/dist/components/features/automations/detail/prompt-section.d.ts +2 -1
- package/dist/components/features/automations/detail/run-logs-modal.d.ts +1 -1
- package/dist/components/features/automations/detail/run-status-badge.d.ts +10 -1
- package/dist/components/features/automations/detail/section-card.d.ts +1 -1
- package/dist/components/features/automations/empty-state.d.ts +1 -1
- package/dist/components/features/automations/error-state.d.ts +1 -1
- package/dist/components/features/automations/import-automation-modal.d.ts +1 -1
- package/dist/components/features/automations/kebab-menu-item-content.d.ts +1 -1
- package/dist/components/features/automations/kebab-menu.d.ts +1 -1
- package/dist/components/features/automations/metadata-chip.d.ts +1 -1
- package/dist/components/features/automations/recommended-automations-launcher.d.ts +1 -1
- package/dist/components/features/automations/recommended-automations-section.d.ts +1 -1
- package/dist/components/features/automations/responder-deployment-modal.d.ts +1 -1
- package/dist/components/features/automations/search-input.d.ts +1 -1
- package/dist/components/features/automations/status-badge.d.ts +1 -1
- package/dist/components/features/automations/turn-off-confirmation-modal.d.ts +8 -0
- package/dist/components/features/automations/view-menu-item-content.d.ts +1 -1
- package/dist/components/features/backends/add-backend-modal.d.ts +1 -1
- package/dist/components/features/backends/api-key-entry-screen.d.ts +2 -1
- package/dist/components/features/backends/backend-form-modal.d.ts +3 -3
- package/dist/components/features/backends/backend-row.d.ts +1 -1
- package/dist/components/features/backends/backend-selector.d.ts +2 -1
- package/dist/components/features/backends/backend-status-dot.d.ts +2 -1
- package/dist/components/features/backends/backend-version.d.ts +1 -1
- package/dist/components/features/backends/device-flow-auth.d.ts +1 -1
- package/dist/components/features/backends/manage-backends-modal.d.ts +2 -1
- package/dist/components/features/browser/browser-chrome-bar.d.ts +1 -1
- package/dist/components/features/browser/browser-snapshot.d.ts +1 -1
- package/dist/components/features/browser/browser.d.ts +1 -1
- package/dist/components/features/browser/empty-browser-message.d.ts +1 -1
- package/dist/components/features/chat/btw-messages.d.ts +1 -1
- package/dist/components/features/chat/change-agent-button.d.ts +2 -1
- package/dist/components/features/chat/change-agent-context-menu.d.ts +1 -1
- package/dist/components/features/chat/chat-action-tooltip.d.ts +1 -1
- package/dist/components/features/chat/chat-add-file-button.d.ts +2 -1
- package/dist/components/features/chat/chat-interface.d.ts +2 -1
- package/dist/components/features/chat/chat-message.d.ts +1 -1
- package/dist/components/features/chat/chat-messages-skeleton.d.ts +2 -1
- package/dist/components/features/chat/chat-play-button.d.ts +1 -1
- package/dist/components/features/chat/chat-send-button.d.ts +1 -1
- package/dist/components/features/chat/chat-status-indicator.d.ts +1 -1
- package/dist/components/features/chat/chat-stop-button.d.ts +1 -1
- package/dist/components/features/chat/chat-suggestions.d.ts +1 -1
- package/dist/components/features/chat/components/chat-input-actions.d.ts +2 -1
- package/dist/components/features/chat/components/chat-input-container.d.ts +1 -1
- package/dist/components/features/chat/components/chat-input-field.d.ts +1 -1
- package/dist/components/features/chat/components/chat-input-grip.d.ts +1 -1
- package/dist/components/features/chat/components/chat-input-llm-profile-picker.d.ts +3 -2
- package/dist/components/features/chat/components/chat-input-model.d.ts +3 -2
- package/dist/components/features/chat/components/chat-input-profile-picker.d.ts +1 -1
- package/dist/components/features/chat/components/chat-input-row.d.ts +1 -1
- package/dist/components/features/chat/components/hidden-file-input.d.ts +1 -1
- package/dist/components/features/chat/components/slash-command-menu.d.ts +2 -1
- package/dist/components/features/chat/confirmation-mode-enabled.d.ts +1 -1
- package/dist/components/features/chat/custom-chat-input.d.ts +1 -1
- package/dist/components/features/chat/drag-over.d.ts +1 -1
- package/dist/components/features/chat/error-message-banner.d.ts +2 -1
- package/dist/components/features/chat/error-message.d.ts +2 -1
- package/dist/components/features/chat/generic-event-message.d.ts +1 -1
- package/dist/components/features/chat/git-control-bar-branch-button.d.ts +1 -1
- package/dist/components/features/chat/git-control-bar-pr-button.d.ts +1 -1
- package/dist/components/features/chat/git-control-bar-pull-button.d.ts +1 -1
- package/dist/components/features/chat/git-control-bar-push-button.d.ts +1 -1
- package/dist/components/features/chat/git-control-bar-repo-button.d.ts +1 -1
- package/dist/components/features/chat/git-control-bar-tooltip-wrapper.d.ts +1 -1
- package/dist/components/features/chat/git-control-bar.d.ts +1 -1
- package/dist/components/features/chat/git-external-link-icon.d.ts +1 -1
- package/dist/components/features/chat/goal-status-banner.d.ts +1 -1
- package/dist/components/features/chat/goal-status-content.d.ts +1 -1
- package/dist/components/features/chat/got-it-button.d.ts +1 -1
- package/dist/components/features/chat/interactive-chat-box.d.ts +1 -1
- package/dist/components/features/chat/model-messages.d.ts +2 -1
- package/dist/components/features/chat/mono-component.d.ts +1 -1
- package/dist/components/features/chat/open-repository-modal.d.ts +2 -1
- package/dist/components/features/chat/pasted-image-upload-as-file-button.d.ts +1 -1
- package/dist/components/features/chat/path-component.d.ts +1 -1
- package/dist/components/features/chat/pending-stop-icon.d.ts +1 -1
- package/dist/components/features/chat/pending-user-messages.d.ts +2 -1
- package/dist/components/features/chat/plan-preview.d.ts +1 -1
- package/dist/components/features/chat/remove-file-button.d.ts +1 -1
- package/dist/components/features/chat/skill-install-restart-banner.d.ts +1 -1
- package/dist/components/features/chat/success-indicator.d.ts +1 -1
- package/dist/components/features/chat/task-tracking/status-badge.d.ts +1 -1
- package/dist/components/features/chat/task-tracking/status-icon.d.ts +1 -1
- package/dist/components/features/chat/task-tracking/task-item.d.ts +1 -1
- package/dist/components/features/chat/task-tracking/task-list-section.d.ts +1 -1
- package/dist/components/features/chat/tool-visualizers/primitives/code-block.d.ts +2 -1
- package/dist/components/features/chat/tool-visualizers/primitives/diff-view.d.ts +2 -1
- package/dist/components/features/chat/tool-visualizers/primitives/file-path-chip.d.ts +2 -1
- package/dist/components/features/chat/tool-visualizers/primitives/key-value-grid.d.ts +1 -1
- package/dist/components/features/chat/tool-visualizers/primitives/output-pane.d.ts +2 -1
- package/dist/components/features/chat/typing-indicator.d.ts +1 -1
- package/dist/components/features/chat/uploaded-file.d.ts +1 -1
- package/dist/components/features/chat/uploaded-files.d.ts +1 -1
- package/dist/components/features/chat/uploaded-image.d.ts +2 -1
- package/dist/components/features/chat/user-message-body.d.ts +2 -2
- package/dist/components/features/chat/waiting-for-runtime-message.d.ts +1 -1
- package/dist/components/features/chat/workspace-mode-icon.d.ts +1 -1
- package/dist/components/features/chat/workspace-mode-selector.d.ts +1 -1
- package/dist/components/features/command-menu/command-menu-trigger.d.ts +2 -1
- package/dist/components/features/context-menu/archived-disabled-tooltip.d.ts +1 -1
- package/dist/components/features/context-menu/context-menu-icon-text-with-description.d.ts +1 -1
- package/dist/components/features/context-menu/context-menu-icon-text.d.ts +1 -1
- package/dist/components/features/context-menu/context-menu-list-item.cjs +1 -1
- package/dist/components/features/context-menu/context-menu-list-item.cjs.map +1 -1
- package/dist/components/features/context-menu/context-menu-list-item.d.ts +2 -1
- package/dist/components/features/context-menu/context-menu-list-item.js +2 -1
- package/dist/components/features/context-menu/context-menu-list-item.js.map +1 -1
- package/dist/components/features/controls/agent-loading.d.ts +1 -1
- package/dist/components/features/controls/agent-status.d.ts +1 -1
- package/dist/components/features/controls/git-tools-submenu.d.ts +1 -1
- package/dist/components/features/controls/macros-submenu.d.ts +1 -1
- package/dist/components/features/controls/server-status-context-menu-icon-text.d.ts +1 -1
- package/dist/components/features/controls/server-status-context-menu.d.ts +1 -1
- package/dist/components/features/controls/server-status.d.ts +1 -1
- package/dist/components/features/controls/tools-context-menu-icon-text.d.ts +1 -1
- package/dist/components/features/controls/tools-context-menu.d.ts +1 -1
- package/dist/components/features/controls/tools.d.ts +2 -1
- package/dist/components/features/conversation/conversation-loading.d.ts +1 -1
- package/dist/components/features/conversation/conversation-main/chat-interface-wrapper.d.ts +1 -1
- package/dist/components/features/conversation/conversation-main/conversation-main.d.ts +1 -1
- package/dist/components/features/conversation/conversation-main/conversation-mobile-panel-page.d.ts +2 -1
- package/dist/components/features/conversation/conversation-name-context-menu-icon-text.d.ts +1 -1
- package/dist/components/features/conversation/conversation-name-context-menu.d.ts +1 -1
- package/dist/components/features/conversation/conversation-name-with-status.d.ts +2 -1
- package/dist/components/features/conversation/conversation-name.d.ts +2 -1
- package/dist/components/features/conversation/conversation-tab-empty-state.d.ts +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/conversation-tab-content-crossfade.d.ts +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/conversation-tab-content.d.ts +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/suspense-pending-fallback.d.ts +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/tab-container.d.ts +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/tab-content-area.d.ts +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/tab-wrapper.d.ts +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tab-nav.d.ts +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.d.ts +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs.d.ts +1 -1
- package/dist/components/features/conversation/conversation-tabs/drawer-vscode-link.d.ts +1 -1
- package/dist/components/features/conversation/metrics-modal/context-window-section.d.ts +1 -1
- package/dist/components/features/conversation/metrics-modal/cost-section.d.ts +1 -1
- package/dist/components/features/conversation/metrics-modal/empty-state.d.ts +1 -1
- package/dist/components/features/conversation/metrics-modal/metric-row.d.ts +1 -1
- package/dist/components/features/conversation/metrics-modal/metrics-modal-header.d.ts +1 -1
- package/dist/components/features/conversation/metrics-modal/metrics-modal.d.ts +1 -1
- package/dist/components/features/conversation/metrics-modal/usage-section.d.ts +1 -1
- package/dist/components/features/conversation/right-panel-toggle.d.ts +1 -1
- package/dist/components/features/conversation/transcript-export-modal.d.ts +2 -1
- package/dist/components/features/conversation-panel/budget-display.d.ts +2 -1
- package/dist/components/features/conversation-panel/budget-progress-bar.d.ts +1 -1
- package/dist/components/features/conversation-panel/budget-usage-text.d.ts +2 -1
- package/dist/components/features/conversation-panel/cloud-new-conversation-menu.d.ts +1 -1
- package/dist/components/features/conversation-panel/compact-conversation-row.cjs +1 -1
- package/dist/components/features/conversation-panel/compact-conversation-row.cjs.map +1 -1
- package/dist/components/features/conversation-panel/compact-conversation-row.d.ts +2 -1
- package/dist/components/features/conversation-panel/compact-conversation-row.js +38 -37
- package/dist/components/features/conversation-panel/compact-conversation-row.js.map +1 -1
- package/dist/components/features/conversation-panel/confirm-delete-modal.d.ts +1 -1
- package/dist/components/features/conversation-panel/confirm-stop-modal.d.ts +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.d.ts +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.d.ts +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.d.ts +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-header.d.ts +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.d.ts +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-skeleton.d.ts +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-title.d.ts +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card.d.ts +2 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-repo-link.d.ts +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-status-badges.d.ts +1 -1
- package/dist/components/features/conversation-panel/conversation-card/no-repository.d.ts +1 -1
- package/dist/components/features/conversation-panel/conversation-group-folder-list.d.ts +1 -1
- package/dist/components/features/conversation-panel/conversation-group-folder-row.d.ts +1 -1
- package/dist/components/features/conversation-panel/conversation-panel-filter-menu.d.ts +1 -1
- package/dist/components/features/conversation-panel/conversation-panel-new-thread-picker.d.ts +1 -1
- package/dist/components/features/conversation-panel/conversation-panel-pinned-section.d.ts +1 -1
- package/dist/components/features/conversation-panel/conversation-panel.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-panel.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-panel.d.ts +2 -1
- package/dist/components/features/conversation-panel/conversation-panel.js +221 -220
- package/dist/components/features/conversation-panel/conversation-panel.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-status-dot.d.ts +1 -1
- package/dist/components/features/conversation-panel/exit-conversation-modal.d.ts +1 -1
- package/dist/components/features/conversation-panel/hook-event-item.d.ts +1 -1
- package/dist/components/features/conversation-panel/hook-matcher-content.d.ts +1 -1
- package/dist/components/features/conversation-panel/hooks-empty-state.d.ts +1 -1
- package/dist/components/features/conversation-panel/hooks-loading-state.d.ts +1 -1
- package/dist/components/features/conversation-panel/hooks-modal-header.d.ts +1 -1
- package/dist/components/features/conversation-panel/hooks-modal.d.ts +1 -1
- package/dist/components/features/conversation-panel/local-new-conversation-menu.d.ts +1 -1
- package/dist/components/features/conversation-panel/menu-heading.d.ts +1 -1
- package/dist/components/features/conversation-panel/menu-row.d.ts +1 -1
- package/dist/components/features/conversation-panel/menu-separator.d.ts +1 -1
- package/dist/components/features/conversation-panel/new-conversation-button.d.ts +2 -1
- package/dist/components/features/conversation-panel/plugins-modal.d.ts +1 -1
- package/dist/components/features/conversation-panel/runtime-waiting-state.d.ts +1 -1
- package/dist/components/features/conversation-panel/skill-content.d.ts +1 -1
- package/dist/components/features/conversation-panel/skill-item.d.ts +1 -1
- package/dist/components/features/conversation-panel/skill-triggers.d.ts +1 -1
- package/dist/components/features/conversation-panel/skills-empty-state.d.ts +1 -1
- package/dist/components/features/conversation-panel/skills-loading-state.d.ts +1 -1
- package/dist/components/features/conversation-panel/skills-modal-header.d.ts +1 -1
- package/dist/components/features/conversation-panel/skills-modal-section.d.ts +1 -1
- package/dist/components/features/conversation-panel/skills-modal.d.ts +1 -1
- package/dist/components/features/conversation-panel/start-task-card/start-task-card-footer.d.ts +1 -1
- package/dist/components/features/conversation-panel/start-task-card/start-task-card-header.d.ts +1 -1
- package/dist/components/features/conversation-panel/start-task-card/start-task-card.d.ts +1 -1
- package/dist/components/features/conversation-panel/start-task-card/start-task-status-badge.d.ts +1 -1
- package/dist/components/features/conversation-panel/start-task-card/start-task-status-indicator.d.ts +1 -1
- package/dist/components/features/conversation-panel/system-message-modal/empty-tools-state.d.ts +1 -1
- package/dist/components/features/conversation-panel/system-message-modal/system-message-content.d.ts +1 -1
- package/dist/components/features/conversation-panel/system-message-modal/system-message-header.d.ts +1 -1
- package/dist/components/features/conversation-panel/system-message-modal/tab-button.d.ts +1 -1
- package/dist/components/features/conversation-panel/system-message-modal/tab-content.d.ts +1 -1
- package/dist/components/features/conversation-panel/system-message-modal/tab-navigation.d.ts +1 -1
- package/dist/components/features/conversation-panel/system-message-modal/toggle-button.d.ts +1 -1
- package/dist/components/features/conversation-panel/system-message-modal/tool-item.d.ts +1 -1
- package/dist/components/features/conversation-panel/system-message-modal/tool-parameters.d.ts +1 -1
- package/dist/components/features/conversation-panel/system-message-modal/tools-list.d.ts +1 -1
- package/dist/components/features/conversation-panel/system-message-modal.d.ts +1 -1
- package/dist/components/features/diff-viewer/commit-list.d.ts +2 -1
- package/dist/components/features/diff-viewer/commit-row.d.ts +2 -1
- package/dist/components/features/diff-viewer/diff-drawer-icon.d.ts +1 -1
- package/dist/components/features/diff-viewer/editor-container.d.ts +1 -1
- package/dist/components/features/diff-viewer/empty-changes-message.d.ts +1 -1
- package/dist/components/features/diff-viewer/file-diff-viewer.d.ts +2 -1
- package/dist/components/features/diff-viewer/loading-spinner.d.ts +1 -1
- package/dist/components/features/files/file-item.d.ts +1 -1
- package/dist/components/features/files/file-list.d.ts +2 -1
- package/dist/components/features/files-tab/file-content-viewer.d.ts +1 -1
- package/dist/components/features/files-tab/file-quick-row.d.ts +1 -1
- package/dist/components/features/files-tab/file-tree-view.d.ts +1 -1
- package/dist/components/features/files-tab/highlighted-source-view.d.ts +1 -1
- package/dist/components/features/files-tab/no-file-selected-message.d.ts +1 -1
- package/dist/components/features/files-tab/segmented-toggle.d.ts +1 -1
- package/dist/components/features/files-tab/tree-node.d.ts +1 -1
- package/dist/components/features/home/featured-automations/automation-health-indicator.d.ts +11 -0
- package/dist/components/features/home/featured-automations/automation-run-activity-metrics.d.ts +18 -0
- package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.d.ts +14 -0
- package/dist/components/features/home/featured-automations/automation-run-health.d.ts +25 -0
- package/dist/components/features/home/featured-automations/build-home-automation-menu-items.d.ts +39 -0
- package/dist/components/features/home/featured-automations/build-pinned-automation-menu-items.d.ts +22 -0
- package/dist/components/features/home/featured-automations/home-automation-activity.d.ts +23 -0
- package/dist/components/features/home/featured-automations/home-automation-menu.d.ts +13 -0
- package/dist/components/features/home/featured-automations/home-automation-run-tooltip.d.ts +12 -0
- package/dist/components/features/home/featured-automations/pinned-automation-card.d.ts +21 -0
- package/dist/components/features/home/featured-automations/pinned-automations-dashboard.d.ts +6 -0
- package/dist/components/features/home/featured-automations/running-automations-list.d.ts +6 -0
- package/dist/components/features/home/git-branch-dropdown/branch-dropdown-menu.d.ts +1 -1
- package/dist/components/features/home/git-branch-dropdown/git-branch-dropdown.d.ts +2 -1
- package/dist/components/features/home/git-provider-dropdown/git-provider-dropdown.d.ts +2 -1
- package/dist/components/features/home/git-repo-dropdown/git-repo-dropdown.d.ts +2 -1
- package/dist/components/features/home/home-chat-launcher.d.ts +1 -1
- package/dist/components/features/home/home-git-control-bar-preview.d.ts +1 -1
- package/dist/components/features/home/home-header/guide-message.d.ts +1 -1
- package/dist/components/features/home/home-header/home-header-title.d.ts +1 -1
- package/dist/components/features/home/home-header/home-header.d.ts +1 -1
- package/dist/components/features/home/llm-not-configured-banner.d.ts +1 -1
- package/dist/components/features/home/new-conversation/create-conversation-button.d.ts +1 -1
- package/dist/components/features/home/new-conversation/new-conversation.d.ts +1 -1
- package/dist/components/features/home/new-conversation.d.ts +1 -1
- package/dist/components/features/home/open-launcher-button.d.ts +1 -1
- package/dist/components/features/home/open-repository-dialog.d.ts +1 -1
- package/dist/components/features/home/open-workspace-dialog.d.ts +1 -1
- package/dist/components/features/home/repo-selection-form.d.ts +2 -1
- package/dist/components/features/home/shared/clear-button.d.ts +2 -1
- package/dist/components/features/home/shared/dropdown-item.d.ts +1 -1
- package/dist/components/features/home/shared/empty-state.d.ts +2 -1
- package/dist/components/features/home/shared/error-message.d.ts +2 -1
- package/dist/components/features/home/shared/generic-dropdown-menu.d.ts +1 -1
- package/dist/components/features/home/shared/loading-spinner.d.ts +2 -1
- package/dist/components/features/home/shared/toggle-button.d.ts +1 -1
- package/dist/components/features/home/tasks/task-card.d.ts +1 -1
- package/dist/components/features/home/tasks/task-group.d.ts +1 -1
- package/dist/components/features/home/tasks/task-issue-number.d.ts +1 -1
- package/dist/components/features/home/tasks/task-item-title.d.ts +1 -1
- package/dist/components/features/home/tasks/task-suggestions-skeleton.d.ts +1 -1
- package/dist/components/features/home/tasks/task-suggestions.d.ts +1 -1
- package/dist/components/features/home/workspace-dropdown/folder-browser-modal.d.ts +2 -1
- package/dist/components/features/home/workspace-dropdown/manage-workspaces-modal.d.ts +2 -1
- package/dist/components/features/home/workspace-dropdown/workspace-dropdown.d.ts +2 -1
- package/dist/components/features/home/workspace-selection-form.d.ts +2 -1
- package/dist/components/features/images/image-carousel.d.ts +2 -1
- package/dist/components/features/images/image-preview.d.ts +1 -1
- package/dist/components/features/images/thumbnail.d.ts +1 -1
- package/dist/components/features/launch/plugin-launch-modal.d.ts +2 -1
- package/dist/components/features/launch/plugin-launch-parameter-input.d.ts +1 -1
- package/dist/components/features/launch/plugin-launch-plugin-section.d.ts +1 -1
- package/dist/components/features/manifest/manifest-form-field.d.ts +1 -1
- package/dist/components/features/manifest/manifest-icons.d.ts +13 -0
- package/dist/components/features/manifest/manifest-overview-tiles.d.ts +19 -0
- package/dist/components/features/manifest/manifest-prerequisites-step.d.ts +1 -1
- package/dist/components/features/manifest/manifest-review-step.d.ts +1 -1
- package/dist/components/features/manifest/manifest-setup-dialog.d.ts +1 -1
- package/dist/components/features/manifest/manifest-subpage-layout.d.ts +23 -0
- package/dist/components/features/markdown/anchor.d.ts +1 -1
- package/dist/components/features/markdown/blockquote.d.ts +1 -1
- package/dist/components/features/markdown/code.d.ts +1 -1
- package/dist/components/features/markdown/headings.d.ts +6 -6
- package/dist/components/features/markdown/horizontal-rule.d.ts +1 -1
- package/dist/components/features/markdown/list.d.ts +3 -3
- package/dist/components/features/markdown/markdown-renderer.d.ts +1 -1
- package/dist/components/features/markdown/markdown-table-scroll.d.ts +1 -1
- package/dist/components/features/markdown/paragraph.d.ts +1 -1
- package/dist/components/features/markdown/plan-components.d.ts +36 -36
- package/dist/components/features/markdown/table.d.ts +3 -3
- package/dist/components/features/mcp-logo-badge.d.ts +1 -1
- 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.d.ts +2 -1
- package/dist/components/features/mcp-page/custom-server-editor.js +5 -0
- 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 +2 -1
- package/dist/components/features/mcp-page/install-server-modal.js +117 -118
- package/dist/components/features/mcp-page/install-server-modal.js.map +1 -1
- package/dist/components/features/mcp-page/installed-server-card.d.ts +2 -1
- package/dist/components/features/mcp-page/installed-servers-section.d.ts +1 -1
- package/dist/components/features/mcp-page/marketplace-card.d.ts +1 -1
- package/dist/components/features/mcp-page/marketplace-section.d.ts +1 -1
- package/dist/components/features/mcp-page/mcp-logo-stack-badge.d.ts +1 -1
- package/dist/components/features/mcp-page/mcp-section-filter-dropdown.d.ts +1 -1
- package/dist/components/features/mcp-page/mcp-server-health.d.ts +2 -1
- package/dist/components/features/mcp-page/mcp-toolbar.d.ts +1 -1
- package/dist/components/features/mcp-page/save-as-secret-toggle.d.ts +1 -1
- package/dist/components/features/onboarding/onboarding-host.d.ts +1 -1
- package/dist/components/features/onboarding/onboarding-modal.d.ts +2 -1
- package/dist/components/features/onboarding/onboarding-progress-bar.d.ts +1 -1
- package/dist/components/features/onboarding/steps/check-backend-step.d.ts +2 -1
- package/dist/components/features/onboarding/steps/choose-agent-step.d.ts +3 -2
- package/dist/components/features/onboarding/steps/say-hello-step.d.ts +2 -1
- package/dist/components/features/onboarding/steps/setup-acp-secrets-step.d.ts +2 -1
- package/dist/components/features/onboarding/steps/setup-llm-step.d.ts +2 -1
- package/dist/components/features/plugins/add-plugin-modal.d.ts +2 -1
- package/dist/components/features/plugins/plugin-card.d.ts +2 -1
- package/dist/components/features/plugins/plugin-detail-modal.d.ts +1 -1
- package/dist/components/features/plugins/plugin-files-section.d.ts +2 -1
- package/dist/components/features/plugins/plugin-picker-card.d.ts +1 -1
- package/dist/components/features/plugins/plugin-picker-modal.d.ts +1 -1
- package/dist/components/features/plugins/plugin-picker-trigger.d.ts +1 -1
- package/dist/components/features/plugins/plugin-picker.d.ts +1 -1
- package/dist/components/features/plugins/plugins-toolbar.d.ts +1 -1
- package/dist/components/features/settings/acp-auth-status-banner.d.ts +1 -1
- package/dist/components/features/settings/acp-conflict-warnings.d.ts +2 -1
- package/dist/components/features/settings/acp-credentials-section.d.ts +1 -1
- package/dist/components/features/settings/acp-secret-field.d.ts +2 -1
- package/dist/components/features/settings/agent-canvas-update-card.d.ts +1 -1
- package/dist/components/features/settings/agent-profiles/agent-profile-actions-menu.d.ts +1 -1
- package/dist/components/features/settings/agent-profiles/agent-profile-row.d.ts +1 -1
- package/dist/components/features/settings/agent-profiles/agent-profiles-body.d.ts +1 -1
- package/dist/components/features/settings/agent-profiles/agent-profiles-local-view.d.ts +1 -1
- package/dist/components/features/settings/agent-profiles/agent-profiles-manager.d.ts +1 -1
- package/dist/components/features/settings/agent-profiles/delete-agent-profile-modal.d.ts +1 -1
- package/dist/components/features/settings/agent-server-onboarding.d.ts +2 -1
- package/dist/components/features/settings/api-key-modal-base.d.ts +1 -1
- package/dist/components/features/settings/app-settings/app-settings-inputs-skeleton.d.ts +1 -1
- package/dist/components/features/settings/app-settings/language-input.d.ts +1 -1
- package/dist/components/features/settings/app-settings/theme-input.d.ts +2 -1
- package/dist/components/features/settings/backend-synced-settings-badge.d.ts +1 -1
- package/dist/components/features/settings/banner-message.d.ts +1 -1
- package/dist/components/features/settings/cloud-settings-link.d.ts +1 -1
- package/dist/components/features/settings/input-skeleton.d.ts +1 -1
- package/dist/components/features/settings/integrations-settings-link.d.ts +1 -1
- package/dist/components/features/settings/key-status-icon.d.ts +1 -1
- package/dist/components/features/settings/llm-profiles/delete-profile-modal.d.ts +1 -1
- package/dist/components/features/settings/llm-profiles/llm-profiles-manager.d.ts +1 -1
- package/dist/components/features/settings/llm-profiles/llm-settings-local-view.d.ts +2 -1
- package/dist/components/features/settings/llm-profiles/profile-actions-menu-item.d.ts +1 -1
- package/dist/components/features/settings/llm-profiles/profile-actions-menu.d.ts +1 -1
- package/dist/components/features/settings/llm-profiles/profile-row.d.ts +1 -1
- package/dist/components/features/settings/llm-profiles/profiles-body.d.ts +1 -1
- package/dist/components/features/settings/llm-profiles/rename-profile-modal.d.ts +1 -1
- package/dist/components/features/settings/llm-settings/llm-settings-inputs-skeleton.d.ts +1 -1
- package/dist/components/features/settings/llm-settings/openai-subscription-auth-card.d.ts +2 -1
- package/dist/components/features/settings/mcp-settings/mcp-server-form.cjs +1 -1
- package/dist/components/features/settings/mcp-settings/mcp-server-form.cjs.map +1 -1
- package/dist/components/features/settings/mcp-settings/mcp-server-form.d.ts +2 -1
- package/dist/components/features/settings/mcp-settings/mcp-server-form.js +2 -1
- package/dist/components/features/settings/mcp-settings/mcp-server-form.js.map +1 -1
- package/dist/components/features/settings/mcp-settings/mcp-server-list-item.d.ts +1 -1
- package/dist/components/features/settings/mcp-settings/mcp-server-list.d.ts +1 -1
- package/dist/components/features/settings/mobile-header.d.ts +1 -1
- package/dist/components/features/settings/optional-tag.d.ts +1 -1
- package/dist/components/features/settings/sdk-settings/field-help.d.ts +1 -1
- package/dist/components/features/settings/sdk-settings/schema-field.d.ts +2 -1
- package/dist/components/features/settings/sdk-settings/sdk-section-page.d.ts +1 -1
- package/dist/components/features/settings/sdk-settings/view-toggle.d.ts +1 -1
- package/dist/components/features/settings/secrets-settings/secret-form.d.ts +2 -1
- package/dist/components/features/settings/secrets-settings/secret-list-item.d.ts +2 -2
- package/dist/components/features/settings/settings-desktop-sidebar.d.ts +1 -1
- package/dist/components/features/settings/settings-dropdown-input.d.ts +1 -1
- package/dist/components/features/settings/settings-layout.d.ts +1 -1
- package/dist/components/features/settings/settings-mobile-drawer.d.ts +1 -1
- package/dist/components/features/settings/settings-mobile-hub.d.ts +1 -1
- package/dist/components/features/settings/settings-nav-divider.d.ts +1 -1
- package/dist/components/features/settings/settings-nav-header.d.ts +1 -1
- package/dist/components/features/settings/settings-nav-link.d.ts +1 -1
- package/dist/components/features/settings/settings-navigation.d.ts +1 -1
- package/dist/components/features/settings/settings-switch.d.ts +1 -1
- package/dist/components/features/settings/subtext-skeleton.d.ts +1 -1
- package/dist/components/features/settings/switch-skeleton.d.ts +1 -1
- package/dist/components/features/settings/upgrade-banner.d.ts +1 -1
- package/dist/components/features/settings/upgrade-button.d.ts +1 -1
- package/dist/components/features/sidebar/avatar.d.ts +1 -1
- package/dist/components/features/sidebar/sidebar-collapsed-icon-slot.d.ts +1 -1
- package/dist/components/features/sidebar/sidebar-conversation-list.d.ts +1 -1
- package/dist/components/features/sidebar/sidebar-mobile-menu-bar.d.ts +1 -1
- package/dist/components/features/sidebar/sidebar-mobile-menu-toggle.d.ts +1 -1
- package/dist/components/features/sidebar/sidebar-mobile-nav-context.d.ts +1 -1
- package/dist/components/features/sidebar/sidebar-nav-link.d.ts +1 -1
- package/dist/components/features/sidebar/sidebar-rail-body.d.ts +1 -1
- package/dist/components/features/sidebar/sidebar.d.ts +2 -1
- package/dist/components/features/sidebar/user-avatar.d.ts +1 -1
- package/dist/components/features/skills/add-skill-modal.d.ts +2 -1
- package/dist/components/features/skills/extensions-mobile-hub.d.ts +1 -1
- package/dist/components/features/skills/extensions-navigation.d.ts +1 -1
- package/dist/components/features/skills/skill-card-pill-row.d.ts +1 -1
- package/dist/components/features/skills/skill-card.d.ts +2 -1
- package/dist/components/features/skills/skill-detail-modal.d.ts +2 -1
- package/dist/components/features/skills/skill-facet-rail.d.ts +8 -0
- package/dist/components/features/skills/skill-facet-row.d.ts +13 -0
- package/dist/components/features/skills/skill-filter.d.ts +34 -0
- package/dist/components/features/skills/skill-filters-modal.d.ts +10 -0
- package/dist/components/features/skills/skill-icon-badge.d.ts +1 -1
- package/dist/components/features/skills/skill-type-badge.d.ts +1 -1
- package/dist/components/features/skills/skills-toolbar.d.ts +3 -4
- package/dist/components/features/suggestions/suggestion-item.d.ts +1 -1
- package/dist/components/features/suggestions/suggestions.d.ts +1 -1
- package/dist/components/features/terminal/empty-terminal-message.d.ts +1 -1
- package/dist/components/features/terminal/terminal.d.ts +1 -1
- package/dist/components/features/tips/random-tip.d.ts +2 -1
- package/dist/components/providers/agent-server-ui-providers.d.ts +1 -1
- package/dist/components/providers/agent-server-ui-root.d.ts +1 -1
- package/dist/components/providers/telemetry-provider.d.ts +1 -1
- package/dist/components/shared/action-tooltip.d.ts +1 -1
- package/dist/components/shared/agent-brand-icon.d.ts +1 -1
- package/dist/components/shared/badge.d.ts +1 -1
- package/dist/components/shared/buttons/back-nav-button-content.d.ts +1 -1
- package/dist/components/shared/buttons/circle-plus-check-toggle.d.ts +3 -2
- package/dist/components/shared/buttons/conversation-confirmation-buttons.d.ts +1 -1
- package/dist/components/shared/buttons/copy-to-clipboard-button.d.ts +1 -1
- package/dist/components/shared/buttons/copyable-content-wrapper.d.ts +1 -1
- package/dist/components/shared/buttons/modal-button.d.ts +1 -1
- package/dist/components/shared/buttons/openhands-logo-button.d.ts +1 -1
- package/dist/components/shared/buttons/remove-button.d.ts +1 -1
- package/dist/components/shared/buttons/scroll-to-bottom-button.d.ts +1 -1
- package/dist/components/shared/buttons/styled-tooltip.d.ts +1 -1
- package/dist/components/shared/filters/enum-filter-dropdown.cjs +1 -1
- package/dist/components/shared/filters/enum-filter-dropdown.cjs.map +1 -1
- package/dist/components/shared/filters/enum-filter-dropdown.d.ts +6 -2
- package/dist/components/shared/filters/enum-filter-dropdown.js +13 -13
- package/dist/components/shared/filters/enum-filter-dropdown.js.map +1 -1
- package/dist/components/shared/git-provider-icon.d.ts +1 -1
- package/dist/components/shared/hook-execution-event-message.d.ts +2 -1
- package/dist/components/shared/loading-spinner.d.ts +1 -1
- package/dist/components/shared/modals/confirmation-modal.d.ts +1 -1
- package/dist/components/shared/modals/confirmation-modals/base-modal.d.ts +3 -3
- package/dist/components/shared/modals/confirmation-modals/danger-modal.d.ts +1 -1
- package/dist/components/shared/modals/modal-body.d.ts +1 -1
- package/dist/components/shared/modals/modal-close-button.d.ts +1 -1
- package/dist/components/shared/modals/settings/model-selector.d.ts +2 -1
- package/dist/components/shared/modals/settings/settings-form.d.ts +2 -1
- package/dist/components/shared/modals/settings/settings-modal.d.ts +1 -1
- package/dist/components/shared/navigation-link.cjs +1 -1
- package/dist/components/shared/navigation-link.cjs.map +1 -1
- package/dist/components/shared/navigation-link.js +11 -7
- package/dist/components/shared/navigation-link.js.map +1 -1
- package/dist/components/shared/risk-alert.d.ts +1 -1
- package/dist/components/shared/text-shimmer.d.ts +1 -1
- package/dist/components/ui/resize-handle.d.ts +1 -1
- package/dist/config/defaults.cjs +1 -1
- package/dist/config/defaults.cjs.map +1 -1
- package/dist/config/defaults.js +3 -3
- package/dist/config/defaults.js.map +1 -1
- package/dist/context/navigation-context.d.ts +1 -1
- package/dist/context/scroll-context.d.ts +1 -1
- package/dist/contexts/active-backend-context.d.ts +1 -1
- package/dist/contexts/conversation-websocket-context.d.ts +1 -1
- package/dist/contexts/settings-section-header-context.d.ts +1 -1
- package/dist/contexts/websocket-provider-wrapper.d.ts +1 -1
- package/dist/fixtures/home-automations-demo.d.ts +19 -0
- package/dist/hooks/mutation/use-add-mcp-server.cjs +1 -1
- package/dist/hooks/mutation/use-add-mcp-server.cjs.map +1 -1
- package/dist/hooks/mutation/use-add-mcp-server.js +10 -14
- package/dist/hooks/mutation/use-add-mcp-server.js.map +1 -1
- 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.d.ts +2 -7
- package/dist/hooks/mutation/use-delete-mcp-server.js +8 -34
- package/dist/hooks/mutation/use-delete-mcp-server.js.map +1 -1
- package/dist/hooks/mutation/use-save-settings.cjs +1 -1
- package/dist/hooks/mutation/use-save-settings.cjs.map +1 -1
- package/dist/hooks/mutation/use-save-settings.js +8 -4
- package/dist/hooks/mutation/use-save-settings.js.map +1 -1
- 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.d.ts +1 -1
- package/dist/hooks/mutation/use-update-mcp-server.js +31 -16
- package/dist/hooks/mutation/use-update-mcp-server.js.map +1 -1
- package/dist/hooks/query/use-active-conversation.d.ts +1 -1
- package/dist/hooks/query/use-agent-profiles.d.ts +1 -1
- package/dist/hooks/query/use-app-installations.d.ts +1 -1
- package/dist/hooks/query/use-automation-detail.d.ts +2 -2
- package/dist/hooks/query/use-automation-health.d.ts +2 -0
- package/dist/hooks/query/use-automations.d.ts +5 -1
- package/dist/hooks/query/use-bash-command-logs.d.ts +1 -1
- package/dist/hooks/query/use-cloud-sandbox.d.ts +1 -1
- package/dist/hooks/query/use-commit-changes.d.ts +1 -1
- package/dist/hooks/query/use-config.d.ts +1 -1
- package/dist/hooks/query/use-conversation-history.d.ts +1 -1
- package/dist/hooks/query/use-conversation-hooks.d.ts +1 -1
- package/dist/hooks/query/use-conversation-skills.d.ts +1 -1
- package/dist/hooks/query/use-get-secrets.d.ts +1 -1
- package/dist/hooks/query/use-home-automations.d.ts +20 -0
- package/dist/hooks/query/use-latest-automation-runs.d.ts +19 -0
- package/dist/hooks/query/use-llm-profiles.d.ts +1 -1
- package/dist/hooks/query/use-llm-subscription-models.d.ts +1 -1
- package/dist/hooks/query/use-llm-subscription-status.d.ts +1 -1
- package/dist/hooks/query/use-local-git-info.d.ts +1 -1
- package/dist/hooks/query/use-local-workspaces.d.ts +1 -1
- package/dist/hooks/query/use-manifest-capabilities.d.ts +2 -0
- package/dist/hooks/query/use-plugin-file-content.d.ts +1 -1
- package/dist/hooks/query/use-plugins-marketplace.d.ts +1 -1
- package/dist/hooks/query/use-provider-models.d.ts +1 -1
- package/dist/hooks/query/use-search-branches.d.ts +1 -1
- package/dist/hooks/query/use-search-providers.d.ts +1 -1
- package/dist/hooks/query/use-search-repositories.d.ts +1 -1
- package/dist/hooks/query/use-search-subdirs.d.ts +2 -2
- package/dist/hooks/query/use-settings.d.ts +2 -2
- package/dist/hooks/query/use-skills.d.ts +1 -1
- package/dist/hooks/query/use-start-tasks.d.ts +1 -1
- package/dist/hooks/query/use-sub-conversation-task-polling.d.ts +1 -1
- package/dist/hooks/query/use-sub-conversations.d.ts +1 -1
- package/dist/hooks/query/use-suggested-tasks.d.ts +1 -1
- package/dist/hooks/query/use-task-polling.d.ts +2 -2
- package/dist/hooks/query/use-unified-get-git-changes.d.ts +1 -1
- package/dist/hooks/query/use-unified-git-diff.d.ts +1 -1
- package/dist/hooks/query/use-user-conversation.d.ts +1 -1
- package/dist/hooks/query/use-workspace-file-content.d.ts +1 -1
- package/dist/hooks/use-backend-scoped-path.cjs +2 -0
- package/dist/hooks/use-backend-scoped-path.cjs.map +1 -0
- package/dist/hooks/use-backend-scoped-path.d.ts +10 -0
- package/dist/hooks/use-backend-scoped-path.js +13 -0
- package/dist/hooks/use-backend-scoped-path.js.map +1 -0
- package/dist/hooks/use-home-automation-actions.d.ts +23 -0
- package/dist/hooks/use-home-pinned-automations.d.ts +26 -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 +4 -0
- package/dist/hooks/use-tracking.js +6 -0
- 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 +68 -2
- package/dist/i18n/declaration.js +1 -1
- package/dist/i18n/declaration.js.map +1 -1
- package/dist/i18n/translation.cjs +2 -2
- package/dist/i18n/translation.cjs.map +1 -1
- package/dist/i18n/translation.js +1169 -47
- package/dist/i18n/translation.js.map +1 -1
- package/dist/icons/code-pill.d.ts +1 -1
- package/dist/locales/ar/openhands.json +70 -4
- package/dist/locales/ca/openhands.json +70 -4
- package/dist/locales/de/openhands.json +70 -4
- package/dist/locales/en/openhands.json +70 -4
- package/dist/locales/es/openhands.json +70 -4
- package/dist/locales/fr/openhands.json +70 -4
- package/dist/locales/it/openhands.json +70 -4
- package/dist/locales/ja/openhands.json +70 -4
- package/dist/locales/ko-KR/openhands.json +70 -4
- package/dist/locales/no/openhands.json +70 -4
- package/dist/locales/pt/openhands.json +70 -4
- package/dist/locales/tr/openhands.json +70 -4
- package/dist/locales/uk/openhands.json +70 -4
- package/dist/locales/zh-CN/openhands.json +70 -4
- package/dist/locales/zh-TW/openhands.json +70 -4
- package/dist/manifests/automation-insights.d.ts +64 -0
- package/dist/manifests/automation-interface.cjs +1 -1
- package/dist/manifests/automation-interface.cjs.map +1 -1
- package/dist/manifests/automation-interface.d.ts +33 -1
- package/dist/manifests/automation-interface.js +2 -1
- package/dist/manifests/automation-interface.js.map +1 -1
- package/dist/manifests/interface-validation.cjs +1 -1
- package/dist/manifests/interface-validation.cjs.map +1 -1
- package/dist/manifests/interface-validation.js +228 -50
- package/dist/manifests/interface-validation.js.map +1 -1
- package/dist/manifests/manifest-template.d.ts +2 -0
- package/dist/manifests/manifest-validation.cjs.map +1 -1
- package/dist/manifests/manifest-validation.js.map +1 -1
- package/dist/manifests/types.cjs +1 -1
- package/dist/manifests/types.cjs.map +1 -1
- package/dist/manifests/types.d.ts +128 -0
- package/dist/manifests/types.js +35 -2
- package/dist/manifests/types.js.map +1 -1
- package/dist/mockServiceWorker.js +21 -9
- package/dist/node_modules/@openhands/extensions/automations/catalog/upstream-fork-sync/manifest.cjs +9 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/upstream-fork-sync/manifest.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/upstream-fork-sync/manifest.js +74 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/upstream-fork-sync/manifest.js.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog-index.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog-index.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog-index.js +6 -4
- package/dist/node_modules/@openhands/extensions/automations/catalog-index.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/interface.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/automations/interface.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/interface.js +126 -5
- package/dist/node_modules/@openhands/extensions/automations/interface.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/skills/index.cjs +161 -53
- package/dist/node_modules/@openhands/extensions/skills/index.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/skills/index.js +112 -50
- package/dist/node_modules/@openhands/extensions/skills/index.js.map +1 -1
- package/dist/node_modules/@tanstack/query-core/build/modern/utils.cjs +1 -1
- package/dist/node_modules/@tanstack/query-core/build/modern/utils.cjs.map +1 -1
- package/dist/node_modules/@tanstack/query-core/build/modern/utils.js +12 -1
- package/dist/node_modules/@tanstack/query-core/build/modern/utils.js.map +1 -1
- package/dist/node_modules/@tanstack/react-query/build/modern/useBaseQuery.cjs +1 -1
- package/dist/node_modules/@tanstack/react-query/build/modern/useBaseQuery.cjs.map +1 -1
- package/dist/node_modules/@tanstack/react-query/build/modern/useBaseQuery.js +14 -12
- package/dist/node_modules/@tanstack/react-query/build/modern/useBaseQuery.js.map +1 -1
- package/dist/node_modules/html-parse-stringify/dist/esm/html-parse-stringify.cjs +2 -0
- package/dist/node_modules/html-parse-stringify/dist/esm/html-parse-stringify.cjs.map +1 -0
- package/dist/node_modules/html-parse-stringify/dist/esm/html-parse-stringify.js +177 -0
- package/dist/node_modules/html-parse-stringify/dist/esm/html-parse-stringify.js.map +1 -0
- package/dist/node_modules/i18next/dist/esm/i18next.cjs +1 -1
- package/dist/node_modules/i18next/dist/esm/i18next.cjs.map +1 -1
- package/dist/node_modules/i18next/dist/esm/i18next.js +31 -24
- package/dist/node_modules/i18next/dist/esm/i18next.js.map +1 -1
- package/dist/node_modules/posthog-js/dist/module.cjs +2 -2
- package/dist/node_modules/posthog-js/dist/module.cjs.map +1 -1
- package/dist/node_modules/posthog-js/dist/module.js +2055 -1929
- package/dist/node_modules/posthog-js/dist/module.js.map +1 -1
- package/dist/node_modules/react-i18next/dist/es/TransWithoutContext.cjs +1 -1
- package/dist/node_modules/react-i18next/dist/es/TransWithoutContext.cjs.map +1 -1
- package/dist/node_modules/react-i18next/dist/es/TransWithoutContext.js +43 -62
- package/dist/node_modules/react-i18next/dist/es/TransWithoutContext.js.map +1 -1
- package/dist/node_modules/react-i18next/dist/es/useTranslation.cjs +1 -1
- package/dist/node_modules/react-i18next/dist/es/useTranslation.cjs.map +1 -1
- package/dist/node_modules/react-i18next/dist/es/useTranslation.js +12 -6
- package/dist/node_modules/react-i18next/dist/es/useTranslation.js.map +1 -1
- package/dist/node_modules/tailwind-merge/dist/bundle-mjs.cjs +1 -1
- package/dist/node_modules/tailwind-merge/dist/bundle-mjs.cjs.map +1 -1
- package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js +352 -310
- package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js.map +1 -1
- package/dist/package.cjs +1 -1
- package/dist/package.cjs.map +1 -1
- package/dist/package.js +34 -33
- package/dist/package.js.map +1 -1
- package/dist/routes/agent-settings.d.ts +3 -2
- package/dist/routes/app-settings.d.ts +2 -1
- package/dist/routes/browser-tab.d.ts +1 -1
- package/dist/routes/changes-tab.d.ts +2 -1
- package/dist/routes/commits-tab.d.ts +1 -1
- package/dist/routes/conversation.d.ts +2 -1
- package/dist/routes/files-tab.d.ts +1 -1
- package/dist/routes/llm-settings.d.ts +3 -2
- package/dist/routes/mcp.cjs +1 -1
- package/dist/routes/mcp.cjs.map +1 -1
- package/dist/routes/mcp.d.ts +2 -1
- package/dist/routes/mcp.js +1 -1
- package/dist/routes/mcp.js.map +1 -1
- package/dist/routes/planner-tab.d.ts +2 -1
- package/dist/routes/secrets-settings.d.ts +2 -1
- package/dist/routes/task-list-tab.d.ts +1 -1
- package/dist/services/settings.cjs +1 -1
- package/dist/services/settings.cjs.map +1 -1
- package/dist/services/settings.js +3 -7
- package/dist/services/settings.js.map +1 -1
- package/dist/types/automation.d.ts +16 -1
- package/dist/types/mcp-auth.cjs.map +1 -1
- package/dist/types/mcp-auth.d.ts +5 -41
- package/dist/types/mcp-auth.js.map +1 -1
- package/dist/types/mcp-server.d.ts +17 -32
- package/dist/types/settings.d.ts +8 -28
- package/dist/ui/card-title.d.ts +1 -1
- package/dist/ui/card.d.ts +1 -1
- package/dist/ui/combobox-caret.d.ts +3 -3
- package/dist/ui/context-menu.cjs +1 -1
- package/dist/ui/context-menu.cjs.map +1 -1
- package/dist/ui/context-menu.d.ts +3 -2
- package/dist/ui/context-menu.js +10 -9
- package/dist/ui/context-menu.js.map +1 -1
- package/dist/ui/divider.d.ts +1 -1
- package/dist/ui/dropdown/clear-button.d.ts +1 -1
- package/dist/ui/dropdown/dropdown-input.d.ts +1 -1
- package/dist/ui/dropdown/dropdown-menu.d.ts +1 -1
- package/dist/ui/dropdown/dropdown.d.ts +1 -1
- package/dist/ui/dropdown/loading-spinner.d.ts +1 -1
- package/dist/ui/dropdown/toggle-button.d.ts +1 -1
- package/dist/ui/help-link.d.ts +1 -1
- package/dist/ui/pre.d.ts +1 -1
- package/dist/ui/toggle-switch.d.ts +2 -2
- package/dist/ui/typography.d.ts +7 -7
- package/dist/utils/automation-activity-log-export.d.ts +17 -0
- package/dist/utils/automation-timeout.d.ts +4 -6
- package/dist/utils/custom-toast-handlers.d.ts +2 -2
- package/dist/utils/format-relative-time.d.ts +3 -0
- package/dist/utils/mcp-config.cjs +1 -1
- package/dist/utils/mcp-config.cjs.map +1 -1
- package/dist/utils/mcp-config.d.ts +12 -29
- package/dist/utils/mcp-config.js +161 -143
- package/dist/utils/mcp-config.js.map +1 -1
- package/dist/utils/mcp-installed-servers.cjs +1 -1
- package/dist/utils/mcp-installed-servers.cjs.map +1 -1
- package/dist/utils/mcp-installed-servers.d.ts +2 -2
- package/dist/utils/mcp-installed-servers.js +21 -32
- package/dist/utils/mcp-installed-servers.js.map +1 -1
- package/dist/utils/mcp-server-health-key.cjs.map +1 -1
- package/dist/utils/mcp-server-health-key.d.ts +2 -4
- package/dist/utils/mcp-server-health-key.js.map +1 -1
- package/dist/utils/settings-like-page-layout-classes.cjs +1 -1
- package/dist/utils/settings-like-page-layout-classes.cjs.map +1 -1
- package/dist/utils/settings-like-page-layout-classes.d.ts +6 -2
- package/dist/utils/settings-like-page-layout-classes.js +1 -1
- package/dist/utils/settings-like-page-layout-classes.js.map +1 -1
- package/dist/utils/skill-category.d.ts +12 -0
- package/package.json +36 -33
- package/scripts/check-sdk-version-sync.mjs +6 -6
- package/scripts/dev-safe.mjs +2 -2
- package/scripts/dev-with-automation.mjs +3 -2
- package/build/assets/Trans-Bwpzk1wT.js +0 -1
- package/build/assets/active-backend-context-BiwzkzDy.js +0 -2
- package/build/assets/agent-context-settings-DXNT_dcw.js +0 -1
- package/build/assets/agent-server-conversation-service.api-CYSWw-2g.js +0 -41
- package/build/assets/agent-settings-BjgQQe-_.js +0 -1
- package/build/assets/alert-banner-DR8EVyZM.js +0 -1
- package/build/assets/api-error-message-e16L1kwH.js +0 -1
- package/build/assets/automation-detail-DY6x2FW1.js +0 -2
- package/build/assets/automation-export-C09f-Lua.js +0 -2
- package/build/assets/automation-setup-route-CqKp0717.js +0 -1
- package/build/assets/automations-list-CqWJ7qXW.js +0 -1
- package/build/assets/check-CPLXgluF.js +0 -1
- package/build/assets/chevron-down-CP4QHvyc.js +0 -1
- package/build/assets/circle-check-Dpy2_xSI.js +0 -1
- package/build/assets/command-menu-Bj6X4ckE.js +0 -1
- package/build/assets/condenser-settings-EAXQNR2E.js +0 -1
- package/build/assets/context-menu-list-item-CrCrYuPF.js +0 -1
- package/build/assets/conversation-BzyIcSwr.js +0 -1
- package/build/assets/conversation-panel-BzyIcSwr.js +0 -1
- package/build/assets/entry.client-BbIYOsIg.js +0 -2
- package/build/assets/enum-filter-dropdown-C08-srev.js +0 -1
- package/build/assets/files-tab-DEq8MbHu.js +0 -1
- package/build/assets/format-time-delta-CxfPJpzC.js +0 -1
- package/build/assets/git-repo-dropdown-9WKINV6J.js +0 -1
- package/build/assets/home-CY0JaxiY.js +0 -1
- package/build/assets/home-CaNWlVvB.js +0 -1
- package/build/assets/index-home-CaNWlVvB.js +0 -1
- package/build/assets/info-CmWQXtRQ.js +0 -1
- package/build/assets/install-server-modal-BWrudmZU.js +0 -1
- package/build/assets/llm-not-configured-banner-3tMsM4K6.js +0 -27
- package/build/assets/llm-settings-D0W8mJDk.js +0 -1
- package/build/assets/loader-circle-B4QDBARx.js +0 -1
- package/build/assets/manifest-39f4789d.js +0 -1
- package/build/assets/mcp-DXG9LWrI.js +0 -9
- package/build/assets/mcp-marketplace-utils-DFmhKc5s.js +0 -1
- package/build/assets/messages-kBjKaAeA.js +0 -40
- package/build/assets/navigation-link-Bxmn-pCs.js +0 -1
- package/build/assets/onboarding-47hh2IHA.js +0 -1
- package/build/assets/onboarding-modal-9BuvvROo.js +0 -1
- package/build/assets/plus-DrKuuvMe.js +0 -1
- package/build/assets/recommended-automations-launcher-ejxy1P27.js +0 -1
- package/build/assets/root-5S-M8SYa.js +0 -2
- package/build/assets/root-DZ39lS5f.css +0 -1
- package/build/assets/root-layout-BPqoa0gv.js +0 -3
- package/build/assets/search-Dc2qR4O2.js +0 -1
- package/build/assets/settings-Chfn5xTD.js +0 -1
- package/build/assets/settings-like-page-layout-classes-DyxyJ0k4.js +0 -1
- package/build/assets/settings-service.api-CZiPD8__.js +0 -1
- package/build/assets/sidebar-mobile-menu-toggle-ND-hgygu.js +0 -1
- package/build/assets/skills-settings-B43KArIz.js +0 -2
- package/build/assets/use-is-authed-BT7Iud4U.js +0 -1
- package/build/assets/use-llm-profiles-2Wc2db8u.js +0 -1
- package/build/assets/use-save-agent-profile-D0wC5ExW.js +0 -1
- package/build/assets/use-skills-CE6miQ3r.js +0 -1
- package/build/assets/use-tracking-BGboadaZ.js +0 -68
- package/build/assets/useQuery-DiPh8LRJ.js +0 -1
- package/build/assets/utils-BgGG1znF.js +0 -1
- package/build/assets/v4-DDdyfk2q.js +0 -1
- package/build/assets/vendor~browser-IVYgIgG1.js +0 -47
- package/build/assets/vendor~entry.client-CXM9oiAk.js +0 -1
- package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~d4by102p-C2f0ZhS-.js +0 -26
- package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~emdr2jt4-BrmgjeOw.js +0 -1
- package/build/assets/vendor~module-BZXjBMvd.js +0 -2
- package/build/assets/x-omAzpXkl.js +0 -1
- package/dist/components/features/skills/skill-type-filter.d.ts +0 -3
- package/dist/components/features/skills/skills-type-filter-dropdown.d.ts +0 -7
- package/dist/node_modules/html-parse-stringify/dist/html-parse-stringify.module.cjs +0 -2
- package/dist/node_modules/html-parse-stringify/dist/html-parse-stringify.module.cjs.map +0 -1
- package/dist/node_modules/html-parse-stringify/dist/html-parse-stringify.module.js +0 -81
- package/dist/node_modules/html-parse-stringify/dist/html-parse-stringify.module.js.map +0 -1
- package/dist/node_modules/void-elements/index.cjs +0 -2
- package/dist/node_modules/void-elements/index.cjs.map +0 -1
- package/dist/node_modules/void-elements/index.js +0 -25
- package/dist/node_modules/void-elements/index.js.map +0 -1
- /package/build/assets/{vendor~root-layout~index-home~home~mcp~automations-list~automation-setup-route~onboarding-modal-D7IDevqN.js → vendor~root-layout~index-home~home~mcp~automations-list~automation-templates~automation-set~bxsimjx0-D7IDevqN.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-config.js","names":[],"sources":["../../src/utils/mcp-config.ts"],"sourcesContent":["import {\n MCPConfig,\n MCPSSEServer,\n MCPSHTTPServer,\n MCPStdioServer,\n SettingsValue,\n} from \"#/types/settings\";\nimport type {\n MCPAuthCredential,\n MCPAuthenticationConfig,\n MCPJsonValue,\n MCPOAuthState,\n} from \"#/types/mcp-auth\";\nimport type { MCPServerConfig } from \"#/types/mcp-server\";\nimport { toMcpServerName } from \"#/utils/mcp-server-name\";\n\nconst EMPTY_MCP_CONFIG: MCPConfig = {\n sse_servers: [],\n stdio_servers: [],\n shttp_servers: [],\n};\n\nexport const REDACTED_MCP_SECRET_VALUE = \"**********\";\n\ntype SdkMcpServerConfig = Record<string, SettingsValue | MCPAuthCredential>;\ntype SdkMcpConfig = Record<string, SdkMcpServerConfig>;\n\n/**\n * The dict key for an SSE/SHTTP server doubles as its display name once a\n * user provides one. Keys that match the auto-generated fallback pattern\n * (``sse``, ``shttp``, ``shttp_1``, …) emitted by {@link toSdkMcpConfig}\n * carry no user intent, so we surface them as \"no name\" — re-serializing\n * regenerates the identical fallback key and existing configs are left\n * untouched.\n */\nfunction userGivenServerName(\n serverName: string,\n base: \"sse\" | \"shttp\",\n): string | undefined {\n const autoGenerated = new RegExp(`^${base}(_\\\\d+)?$`);\n return autoGenerated.test(serverName) ? undefined : serverName;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !Array.isArray(value);\n}\n\nexport function getSdkMcpServerMap(\n value: unknown,\n): Record<string, unknown> | null {\n if (!isRecord(value)) return null;\n\n const mcpServers = value.mcpServers;\n if (\n isRecord(mcpServers) &&\n !(\"url\" in mcpServers) &&\n !(\"command\" in mcpServers)\n ) {\n return mcpServers;\n }\n\n return value;\n}\n\nexport function stringRecord(\n value: unknown,\n): Record<string, string> | undefined {\n if (!isRecord(value)) return undefined;\n const entries = Object.entries(value).filter(\n (entry): entry is [string, string] => typeof entry[1] === \"string\",\n );\n return entries.length > 0 ? Object.fromEntries(entries) : undefined;\n}\n\nexport function hasRedactedMcpSecretLeaf(value: unknown): boolean {\n if (value === REDACTED_MCP_SECRET_VALUE) return true;\n if (Array.isArray(value)) return value.some(hasRedactedMcpSecretLeaf);\n if (isRecord(value))\n return Object.values(value).some(hasRedactedMcpSecretLeaf);\n return false;\n}\n\nfunction getOAuthState(value: unknown): MCPOAuthState | undefined {\n if (!isRecord(value)) return undefined;\n const state: MCPOAuthState = {};\n if (isRecord(value.tokens)) {\n state.tokens = value.tokens as NonNullable<MCPOAuthState[\"tokens\"]>;\n }\n if (isRecord(value.client_info)) {\n state.client_info = value.client_info as NonNullable<\n MCPOAuthState[\"client_info\"]\n >;\n }\n if (\n typeof value.token_expires_at === \"number\" ||\n value.token_expires_at === null\n ) {\n state.token_expires_at = value.token_expires_at;\n }\n return Object.keys(state).length > 0 ? state : undefined;\n}\n\nfunction normalizeTaggedAuthCredential(\n value: unknown,\n): MCPAuthCredential | undefined {\n if (!isRecord(value)) return undefined;\n switch (value.strategy) {\n case \"none\":\n return { strategy: \"none\" };\n case \"api_key\":\n if (typeof value.value !== \"string\") return undefined;\n return {\n strategy: \"api_key\",\n value: value.value,\n ...(typeof value.header_name === \"string\" && {\n header_name: value.header_name,\n }),\n };\n case \"bearer\":\n if (typeof value.value !== \"string\") return undefined;\n return { strategy: \"bearer\", value: value.value };\n case \"basic\":\n if (\n typeof value.username !== \"string\" ||\n typeof value.password !== \"string\"\n ) {\n return undefined;\n }\n return {\n strategy: \"basic\",\n username: value.username,\n password: value.password,\n };\n case \"header\": {\n const headers = stringRecord(value.headers);\n return headers ? { strategy: \"header\", headers } : undefined;\n }\n case \"oauth2\": {\n const authentication = getAuthenticationConfig(value.authentication);\n const state = getOAuthState(value.state);\n return {\n strategy: \"oauth2\",\n ...(authentication && { authentication }),\n ...(state && { state }),\n };\n }\n default:\n return undefined;\n }\n}\n\nfunction authCredentialFromServerConfig(\n serverConfig: Record<string, unknown>,\n): MCPAuthCredential | undefined {\n return normalizeTaggedAuthCredential(serverConfig.auth);\n}\n\nfunction getRemoteSecretFields(entry: {\n auth?: MCPAuthCredential;\n headers?: Record<string, string>;\n}): Partial<SdkMcpServerConfig> {\n const fields: Partial<SdkMcpServerConfig> = {};\n if (entry.auth && !hasRedactedMcpSecretLeaf(entry.auth)) {\n fields.auth = entry.auth;\n }\n if (entry.headers && Object.keys(entry.headers).length > 0) {\n fields.headers = entry.headers;\n }\n return fields;\n}\n\n/**\n * Only an explicit ``false`` is carried. Every mutation round-trips the whole\n * server map through these converters, so preserving the flag here is what\n * stops adding or deleting one server from silently re-enabling another.\n */\nfunction disabledField(server: { enabled?: boolean }) {\n return server.enabled === false ? { enabled: false as const } : {};\n}\n\nfunction getRemoteServerFields(server: MCPServerConfig) {\n return {\n ...(server.name && { name: server.name }),\n url: server.url!,\n ...(server.headers && { headers: server.headers }),\n ...(server.auth && { auth: server.auth }),\n ...disabledField(server),\n };\n}\n\nexport function toMcpSseServer(server: MCPServerConfig): MCPSSEServer {\n return getRemoteServerFields(server);\n}\n\nexport function toMcpShttpServer(server: MCPServerConfig): MCPSHTTPServer {\n return {\n ...getRemoteServerFields(server),\n ...(server.timeout !== undefined && { timeout: server.timeout }),\n };\n}\n\nexport function toMcpStdioServer(server: MCPServerConfig): MCPStdioServer {\n return {\n name: server.name!,\n command: server.command!,\n ...(server.args && { args: server.args }),\n ...(server.env && { env: server.env }),\n ...disabledField(server),\n };\n}\n\nfunction getAuthenticationConfig(\n value: unknown,\n): MCPAuthenticationConfig | undefined {\n if (!value || typeof value !== \"object\") return undefined;\n const record = value as Record<string, unknown>;\n if (record.type !== \"oauth\") return undefined;\n const authentication: MCPAuthenticationConfig = { type: \"oauth\" };\n if (\n record.client_auth_method === \"none\" ||\n record.client_auth_method === \"client_secret_post\" ||\n record.client_auth_method === \"client_secret_basic\" ||\n record.client_auth_method === \"private_key_jwt\"\n ) {\n authentication.client_auth_method = record.client_auth_method;\n }\n if (typeof record.scopes === \"string\") {\n authentication.scopes = record.scopes;\n } else if (\n Array.isArray(record.scopes) &&\n record.scopes.every((scope) => typeof scope === \"string\")\n ) {\n authentication.scopes = record.scopes;\n }\n if (typeof record.client_name === \"string\") {\n authentication.client_name = record.client_name;\n }\n if (typeof record.client_metadata_url === \"string\") {\n authentication.client_metadata_url = record.client_metadata_url;\n }\n if (typeof record.client_id === \"string\") {\n authentication.client_id = record.client_id;\n }\n if (typeof record.client_secret === \"string\") {\n authentication.client_secret = record.client_secret;\n }\n if (\n record.additional_client_metadata &&\n typeof record.additional_client_metadata === \"object\" &&\n !Array.isArray(record.additional_client_metadata)\n ) {\n authentication.additional_client_metadata =\n record.additional_client_metadata as Record<string, MCPJsonValue>;\n }\n return authentication;\n}\n\n/**\n * Parse the SDK-native ``agent_settings.mcp_config`` value and convert it\n * to the frontend MCPConfig format used by UI components.\n */\nexport function parseMcpConfig(value: unknown): MCPConfig {\n const mcpConfig = getSdkMcpServerMap(value);\n if (!mcpConfig) {\n return { ...EMPTY_MCP_CONFIG };\n }\n\n const sseServers: (string | MCPSSEServer)[] = [];\n const stdioServers: MCPStdioServer[] = [];\n const shttpServers: (string | MCPSHTTPServer)[] = [];\n\n for (const [serverName, serverConfig] of Object.entries(mcpConfig)) {\n if (!isRecord(serverConfig)) continue;\n\n const url = serverConfig.url as string | undefined;\n\n // The SDK omits ``enabled`` while it holds its default (true), so only an\n // explicit ``false`` marks a server as switched off.\n const disabled = serverConfig.enabled === false;\n\n if (url) {\n const transport = serverConfig.transport as string | undefined;\n const auth = authCredentialFromServerConfig(serverConfig);\n const headers = stringRecord(serverConfig.headers);\n\n if (transport === \"sse\") {\n const name = userGivenServerName(serverName, \"sse\");\n const server: MCPSSEServer = { url };\n if (name) server.name = name;\n if (auth) server.auth = auth;\n if (headers) server.headers = headers;\n if (disabled) server.enabled = false;\n sseServers.push(server);\n } else {\n const name = userGivenServerName(serverName, \"shttp\");\n const server: MCPSHTTPServer = { url };\n if (name) server.name = name;\n if (serverConfig.timeout != null) {\n server.timeout = serverConfig.timeout as number;\n }\n if (auth) server.auth = auth;\n if (headers) server.headers = headers;\n if (disabled) server.enabled = false;\n shttpServers.push(server);\n }\n } else {\n if (typeof serverConfig.command !== \"string\") continue;\n const stdioServer: MCPStdioServer = {\n name: serverName,\n command: serverConfig.command,\n };\n if (serverConfig.args) {\n stdioServer.args = serverConfig.args as string[];\n }\n if (serverConfig.env) {\n stdioServer.env = serverConfig.env as Record<string, string>;\n }\n if (disabled) stdioServer.enabled = false;\n stdioServers.push(stdioServer);\n }\n }\n\n return {\n sse_servers: sseServers,\n stdio_servers: stdioServers,\n shttp_servers: shttpServers,\n };\n}\n\n/**\n * Convert the frontend MCPConfig format back to the SDK-native server map\n * expected by agent_settings.mcp_config on the backend.\n *\n * Names are only suffixed (``_1``, ``_2``, …) when an earlier entry has\n * already claimed the bare base name. We intentionally do NOT use a single\n * monotonic counter across server types: that would, for example, rename a\n * stdio server \"myname\" to \"myname_1\" the moment any sse/shttp entry is\n * persisted ahead of it, and shift the suffix on every save as the count\n * of other server types changes. With per-base collision suffixing,\n * unrelated entries keep their human-meaningful names stable across edits.\n *\n * ``enabled`` is only emitted when a server is switched off — the SDK defaults\n * it to true. Omitting it is what *clears* a previously persisted\n * ``enabled: false``, and that only works because ``saveSettings`` pre-clears\n * ``mcp_config`` to null before every write (see\n * ``settings-service.api.ts``), turning the backend's RFC 7386 merge into a\n * full replace. If that pre-clear is ever removed, re-enabling a server\n * becomes a silent no-op.\n */\nexport function toSdkMcpConfig(config: MCPConfig): SdkMcpConfig | null {\n const mcpConfig: SdkMcpConfig = {};\n\n const reserve = (base: string): string => {\n const safeBase = toMcpServerName(base);\n if (!(safeBase in mcpConfig)) return safeBase;\n let i = 1;\n while (`${safeBase}_${i}` in mcpConfig) i += 1;\n return `${safeBase}_${i}`;\n };\n\n for (const entry of config.sse_servers) {\n const server: SdkMcpServerConfig = {};\n let name: string | undefined;\n if (typeof entry === \"string\") {\n server.url = entry;\n } else {\n name = entry.name;\n server.url = entry.url;\n Object.assign(server, getRemoteSecretFields(entry), disabledField(entry));\n }\n server.transport = \"sse\";\n mcpConfig[reserve(name || \"sse\")] = server;\n }\n\n for (const entry of config.shttp_servers) {\n const server: SdkMcpServerConfig = { transport: \"http\" };\n let name: string | undefined;\n if (typeof entry === \"string\") {\n server.url = entry;\n } else {\n name = entry.name;\n server.url = entry.url;\n Object.assign(server, getRemoteSecretFields(entry), disabledField(entry));\n if (entry.timeout != null) server.timeout = entry.timeout;\n }\n mcpConfig[reserve(name || \"shttp\")] = server;\n }\n\n for (const entry of config.stdio_servers) {\n const server: SdkMcpServerConfig = {\n command: entry.command,\n };\n if (entry.args) server.args = entry.args;\n if (entry.env) server.env = entry.env;\n Object.assign(server, disabledField(entry));\n mcpConfig[reserve(entry.name || \"stdio\")] = server;\n }\n\n return Object.keys(mcpConfig).length > 0 ? mcpConfig : null;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mcp-config.js","names":[],"sources":["../../src/utils/mcp-config.ts"],"sourcesContent":["import type {\n MCPAuthCredential,\n MCPConfig,\n MCPConfigPatch,\n MCPServer,\n MCPServerPatch,\n} from \"@openhands/typescript-client\";\nimport { isMcpAuthCredential } from \"#/types/mcp-auth\";\nimport type { MCPServerConfig } from \"#/types/mcp-server\";\nimport { toMcpServerName } from \"#/utils/mcp-server-name\";\n\nexport const REDACTED_MCP_SECRET_VALUE = \"**********\";\n\nconst isRecord = (value: unknown): value is Record<string, unknown> =>\n !!value && typeof value === \"object\" && !Array.isArray(value);\n\nexport function getSdkMcpServerMap(\n value: unknown,\n): Record<string, unknown> | null {\n if (!isRecord(value)) return null;\n\n const mcpServers = value.mcpServers;\n if (\n isRecord(mcpServers) &&\n !(\"url\" in mcpServers) &&\n !(\"command\" in mcpServers)\n ) {\n return mcpServers;\n }\n\n return value;\n}\n\nexport function stringRecord(\n value: unknown,\n): Record<string, string> | undefined {\n if (!isRecord(value)) return undefined;\n const entries = Object.entries(value).filter(\n (entry): entry is [string, string] => typeof entry[1] === \"string\",\n );\n return entries.length > 0 ? Object.fromEntries(entries) : undefined;\n}\n\nexport function hasRedactedMcpSecretLeaf(value: unknown): boolean {\n if (value === REDACTED_MCP_SECRET_VALUE) return true;\n if (Array.isArray(value)) return value.some(hasRedactedMcpSecretLeaf);\n if (isRecord(value)) {\n return Object.values(value).some(hasRedactedMcpSecretLeaf);\n }\n return false;\n}\n\n// Agent Server persists this optional field, but typescript-client 1.36.1\n// does not yet expose it in its generated MCP model types.\nexport const getMcpServerEnabled = (server: MCPServer): boolean | undefined =>\n (server as MCPServer & { enabled?: unknown }).enabled === false\n ? false\n : undefined;\n\nconst normalizeTransport = (\n value: unknown,\n): MCPServer[\"transport\"] | undefined => {\n if (value === \"stdio\" || value === \"sse\" || value === \"streamable-http\") {\n return value;\n }\n if (value === \"http\" || value === \"shttp\" || value === undefined) {\n return \"http\";\n }\n return undefined;\n};\n\n/**\n * Normalize the SDK and legacy cloud wrapper shapes into the client-owned,\n * name-keyed MCPConfig. The map key remains the server's persistence identity.\n */\n// @spec MCP-003 — Settings map keys are stable MCP identities\nexport function parseMcpConfig(value: unknown): MCPConfig {\n const serverMap = getSdkMcpServerMap(value);\n if (!serverMap) return {};\n\n const config: MCPConfig = {};\n for (const [settingsKey, candidate] of Object.entries(serverMap)) {\n if (!isRecord(candidate)) continue;\n\n if (typeof candidate.command === \"string\") {\n config[settingsKey] = {\n transport: \"stdio\",\n command: candidate.command,\n ...(Array.isArray(candidate.args) &&\n candidate.args.every((arg) => typeof arg === \"string\") && {\n args: candidate.args as string[],\n }),\n ...(stringRecord(candidate.env) && {\n env: stringRecord(candidate.env),\n }),\n ...(typeof candidate.cwd === \"string\" && { cwd: candidate.cwd }),\n ...(typeof candidate.description === \"string\" && {\n description: candidate.description,\n }),\n ...(typeof candidate.icon === \"string\" && { icon: candidate.icon }),\n ...(typeof candidate.timeout === \"number\" && {\n timeout: candidate.timeout,\n }),\n ...(candidate.enabled === false && { enabled: false }),\n };\n continue;\n }\n\n if (typeof candidate.url !== \"string\") continue;\n const transport = normalizeTransport(candidate.transport);\n if (!transport || transport === \"stdio\") continue;\n config[settingsKey] = {\n transport,\n url: candidate.url,\n ...(stringRecord(candidate.headers) && {\n headers: stringRecord(candidate.headers),\n }),\n ...(isMcpAuthCredential(candidate.auth) && {\n auth: candidate.auth,\n }),\n ...(typeof candidate.description === \"string\" && {\n description: candidate.description,\n }),\n ...(typeof candidate.icon === \"string\" && { icon: candidate.icon }),\n ...(typeof candidate.timeout === \"number\" && {\n timeout: candidate.timeout,\n }),\n ...(typeof candidate.sse_read_timeout === \"number\" && {\n sse_read_timeout: candidate.sse_read_timeout,\n }),\n ...(typeof candidate.keep_alive === \"boolean\" && {\n keep_alive: candidate.keep_alive,\n }),\n ...(candidate.enabled === false && { enabled: false }),\n };\n }\n return config;\n}\n\nexport function toCanonicalMcpServer(server: MCPServerConfig): MCPServer {\n if (server.type === \"stdio\") {\n return {\n transport: \"stdio\",\n command: server.command!,\n ...(server.args?.length ? { args: server.args } : {}),\n ...(server.env && Object.keys(server.env).length > 0\n ? { env: server.env }\n : {}),\n ...(server.enabled === false && { enabled: false }),\n };\n }\n\n return {\n transport: server.type === \"sse\" ? \"sse\" : \"http\",\n url: server.url!,\n ...(server.headers && Object.keys(server.headers).length > 0\n ? { headers: server.headers }\n : {}),\n ...(server.auth ? { auth: server.auth } : {}),\n ...(server.type === \"shttp\" && server.timeout !== undefined\n ? { timeout: server.timeout }\n : {}),\n ...(server.enabled === false && { enabled: false }),\n };\n}\n\nconst buildEnabledPatch = (\n previous: MCPServer,\n edited: MCPServerConfig,\n): MCPServerPatch => {\n if (edited.enabled === false) return { enabled: false } as MCPServerPatch;\n return getMcpServerEnabled(previous) === false\n ? ({ enabled: true } as MCPServerPatch)\n : {};\n};\n\nconst buildStringMapPatch = (\n previous: Record<string, string> | null | undefined,\n next: Record<string, string> | undefined,\n): Record<string, string | null> | null | undefined => {\n if (!next) return previous ? null : undefined;\n\n const patch: Record<string, string | null> = {};\n for (const [key, value] of Object.entries(next)) {\n if (value !== REDACTED_MCP_SECRET_VALUE) {\n patch[key] = value;\n }\n }\n for (const key of Object.keys(previous ?? {})) {\n if (!(key in next)) patch[key] = null;\n }\n return Object.keys(patch).length > 0 ? patch : undefined;\n};\n\ntype OAuthCredential = Extract<MCPAuthCredential, { strategy: \"oauth2\" }>;\ntype OAuthCredentialPatch = Extract<\n NonNullable<MCPServerPatch[\"auth\"]>,\n { strategy: \"oauth2\" }\n>;\nconst OAUTH_EDITABLE_AUTHENTICATION_FIELDS = [\n \"client_auth_method\",\n \"scopes\",\n \"client_id\",\n \"client_secret\",\n] as const;\n\nconst buildRedactionSafeNestedPatch = (\n previous: unknown,\n next: unknown,\n): unknown | undefined => {\n if (next === REDACTED_MCP_SECRET_VALUE || next === undefined) {\n return undefined;\n }\n if (next === null) return null;\n if (Array.isArray(next)) {\n if (hasRedactedMcpSecretLeaf(next)) return undefined;\n return JSON.stringify(previous) === JSON.stringify(next) ? undefined : next;\n }\n if (!isRecord(next)) {\n return Object.is(previous, next) ? undefined : next;\n }\n\n const previousRecord = isRecord(previous) ? previous : {};\n const patch: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(next)) {\n const nestedPatch = buildRedactionSafeNestedPatch(\n previousRecord[key],\n value,\n );\n if (nestedPatch !== undefined) patch[key] = nestedPatch;\n }\n return Object.keys(patch).length > 0 ? patch : undefined;\n};\n\nconst buildOAuthAuthenticationPatch = (\n previous: OAuthCredential[\"authentication\"],\n edited: OAuthCredential[\"authentication\"],\n): OAuthCredentialPatch[\"authentication\"] | undefined => {\n if (edited === undefined) return undefined;\n if (edited === null) return null;\n\n const nestedPatch = buildRedactionSafeNestedPatch(previous, edited);\n const patch = isRecord(nestedPatch) ? { ...nestedPatch } : {};\n const previousRecord = isRecord(previous) ? previous : {};\n for (const key of OAUTH_EDITABLE_AUTHENTICATION_FIELDS) {\n if (key in previousRecord && !(key in edited)) patch[key] = null;\n }\n if (Object.keys(patch).length === 0) return undefined;\n return { type: \"oauth\", ...patch } as NonNullable<\n OAuthCredentialPatch[\"authentication\"]\n >;\n};\n\nconst withAuthStrategyReplacementDeletes = <T extends MCPAuthCredential>(\n previous: MCPAuthCredential | null | undefined,\n patch: T,\n): T => {\n if (!previous || previous.strategy === patch.strategy) return patch;\n\n const replacement = { ...patch } as Record<string, unknown>;\n for (const key of Object.keys(previous)) {\n if (key !== \"strategy\" && !(key in replacement)) {\n replacement[key] = null;\n }\n }\n return replacement as T;\n};\n\ntype HeaderAuthCredential = Extract<MCPAuthCredential, { strategy: \"header\" }>;\n\nexport const MCP_HEADER_REMOVAL_ERROR =\n \"Removing an individual header from header authentication is not supported yet. Replace the credential or clear authentication, then re-enter the headers you want to keep.\";\n\nconst buildHeaderAuthCredentialPatch = (\n previous: MCPAuthCredential | null | undefined,\n edited: HeaderAuthCredential,\n): NonNullable<MCPServerPatch[\"auth\"]> | undefined => {\n const previousHeaders =\n previous?.strategy === \"header\" ? previous.headers : undefined;\n const headersPatch = buildStringMapPatch(previousHeaders, edited.headers);\n if (!headersPatch) return undefined;\n if (Object.values(headersPatch).some((value) => value === null)) {\n throw new Error(MCP_HEADER_REMOVAL_ERROR);\n }\n return {\n strategy: \"header\",\n headers: headersPatch as Record<string, string>,\n };\n};\n\nconst buildOAuthCredentialPatch = (\n previous: MCPAuthCredential | null | undefined,\n edited: OAuthCredential,\n): OAuthCredentialPatch | undefined => {\n const previousOAuth = previous?.strategy === \"oauth2\" ? previous : undefined;\n const authentication = buildOAuthAuthenticationPatch(\n previousOAuth?.authentication,\n edited.authentication,\n );\n const state = buildRedactionSafeNestedPatch(\n previousOAuth?.state,\n edited.state,\n );\n if (previousOAuth && authentication === undefined && state === undefined) {\n return undefined;\n }\n return withAuthStrategyReplacementDeletes(previous, {\n strategy: \"oauth2\",\n ...(authentication !== undefined && { authentication }),\n ...(state !== undefined && { state }),\n } as OAuthCredentialPatch);\n};\n\n/**\n * Build one sparse MCP server merge-patch from an editor result. Redacted\n * values are display-only and are never mutation inputs.\n */\n// @spec MCP-002 — Secret patches preserve user intent\nexport function buildMcpServerPatch(\n previous: MCPServer,\n edited: MCPServerConfig,\n): MCPServerPatch {\n const enabled = buildEnabledPatch(previous, edited);\n if (edited.type === \"stdio\") {\n const env = buildStringMapPatch(\n previous.transport === \"stdio\" ? previous.env : undefined,\n edited.env,\n );\n return {\n transport: \"stdio\",\n command: edited.command!,\n ...(edited.args?.length\n ? { args: edited.args }\n : previous.transport === \"stdio\" && previous.args\n ? { args: null }\n : {}),\n ...(env !== undefined ? { env } : {}),\n ...enabled,\n };\n }\n\n const previousRemote = previous.transport === \"stdio\" ? undefined : previous;\n const patch: MCPServerPatch = {\n transport: edited.type === \"sse\" ? \"sse\" : \"http\",\n url: edited.url!,\n ...enabled,\n };\n\n if (edited.type === \"shttp\") {\n if (edited.timeout !== undefined) patch.timeout = edited.timeout;\n else if (previousRemote?.timeout !== undefined) patch.timeout = null;\n }\n\n if (edited.auth) {\n if (edited.auth.strategy === \"oauth2\") {\n const auth = buildOAuthCredentialPatch(previousRemote?.auth, edited.auth);\n if (auth !== undefined) patch.auth = auth;\n } else if (\n edited.auth.strategy === \"header\" &&\n previousRemote?.auth?.strategy === \"header\"\n ) {\n const auth = buildHeaderAuthCredentialPatch(\n previousRemote.auth,\n edited.auth,\n );\n if (auth !== undefined) patch.auth = auth;\n } else if (!hasRedactedMcpSecretLeaf(edited.auth)) {\n patch.auth = withAuthStrategyReplacementDeletes(\n previousRemote?.auth,\n edited.auth,\n );\n }\n } else if (previousRemote?.auth) {\n patch.auth = null;\n }\n\n return patch;\n}\n\nconst applyMcpServerPatch = (\n previous: MCPServer,\n patch: MCPServerPatch,\n): MCPServer => {\n const apply = (base: unknown, next: unknown): Record<string, unknown> => {\n const merged = isRecord(base) ? { ...base } : {};\n if (!isRecord(next)) return merged;\n\n for (const [key, value] of Object.entries(next)) {\n if (value === null) {\n delete merged[key];\n } else if (isRecord(value)) {\n merged[key] = apply(merged[key], value);\n } else {\n merged[key] = value;\n }\n }\n return merged;\n };\n\n return apply(previous, patch) as MCPServer;\n};\n\nexport const MCP_RENAME_CREDENTIAL_ERROR =\n \"Replace or clear the stored credential before renaming this MCP server.\";\n\n// @spec MCP-003 — Settings map keys are stable MCP identities\nexport function buildRenameMcpConfigPatch(\n oldKey: string,\n newKey: string,\n previous: MCPServer,\n edited: MCPServerConfig,\n): MCPConfigPatch {\n const previousSecrets =\n previous.transport === \"stdio\"\n ? previous.env\n : { auth: previous.auth, headers: previous.headers };\n if (hasRedactedMcpSecretLeaf(previousSecrets)) {\n throw new Error(MCP_RENAME_CREDENTIAL_ERROR);\n }\n const renamedServer = applyMcpServerPatch(\n previous,\n buildMcpServerPatch(previous, edited),\n );\n return {\n [oldKey]: null,\n [newKey]: renamedServer,\n };\n}\n\nexport function allocateMcpSettingsKey(\n config: MCPConfig,\n preferredName: string | undefined,\n fallback: \"sse\" | \"shttp\" | \"stdio\",\n): string {\n const base = toMcpServerName(preferredName || fallback);\n if (!(base in config)) return base;\n let suffix = 1;\n while (`${base}_${suffix}` in config) suffix += 1;\n return `${base}_${suffix}`;\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require("../_virtual/_rolldown/runtime.cjs");
|
|
1
|
+
require("../_virtual/_rolldown/runtime.cjs");const e=require("./mcp-config.cjs");function t(t){return Object.entries(t).map(([t,n])=>n.transport===`stdio`?{id:t,type:`stdio`,name:t,command:n.command,args:n.args??void 0,env:n.env??void 0,enabled:e.getMcpServerEnabled(n)}:{id:t,type:n.transport===`sse`?`sse`:`shttp`,name:t,url:n.url,headers:n.headers??void 0,timeout:n.timeout??void 0,auth:n.auth??void 0,enabled:e.getMcpServerEnabled(n)})}exports.flattenMcpConfig=t;
|
|
2
2
|
//# sourceMappingURL=mcp-installed-servers.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-installed-servers.cjs","names":[],"sources":["../../src/utils/mcp-installed-servers.ts"],"sourcesContent":["import { MCPServerConfig } from \"#/types/mcp-server\";\nimport {
|
|
1
|
+
{"version":3,"file":"mcp-installed-servers.cjs","names":[],"sources":["../../src/utils/mcp-installed-servers.ts"],"sourcesContent":["import type { MCPConfig } from \"@openhands/typescript-client\";\nimport type { MCPServerConfig } from \"#/types/mcp-server\";\nimport { getMcpServerEnabled } from \"./mcp-config\";\n\nexport function flattenMcpConfig(config: MCPConfig): MCPServerConfig[] {\n return Object.entries(config).map(([settingsKey, server]) =>\n server.transport === \"stdio\"\n ? {\n id: settingsKey,\n type: \"stdio\",\n name: settingsKey,\n command: server.command,\n args: server.args ?? undefined,\n env: server.env ?? undefined,\n enabled: getMcpServerEnabled(server),\n }\n : {\n id: settingsKey,\n type: server.transport === \"sse\" ? \"sse\" : \"shttp\",\n name: settingsKey,\n url: server.url,\n headers: server.headers ?? undefined,\n timeout: server.timeout ?? undefined,\n auth: server.auth ?? undefined,\n enabled: getMcpServerEnabled(server),\n },\n );\n}\n"],"mappings":"iFAIA,SAAgB,EAAiB,EAAsC,CACrE,OAAO,OAAO,QAAQ,CAAM,EAAE,KAAK,CAAC,EAAa,KAC/C,EAAO,YAAc,QACjB,CACE,GAAI,EACJ,KAAM,QACN,KAAM,EACN,QAAS,EAAO,QAChB,KAAM,EAAO,MAAQ,IAAA,GACrB,IAAK,EAAO,KAAO,IAAA,GACnB,QAAS,EAAA,oBAAoB,CAAM,CACrC,EACA,CACE,GAAI,EACJ,KAAM,EAAO,YAAc,MAAQ,MAAQ,QAC3C,KAAM,EACN,IAAK,EAAO,IACZ,QAAS,EAAO,SAAW,IAAA,GAC3B,QAAS,EAAO,SAAW,IAAA,GAC3B,KAAM,EAAO,MAAQ,IAAA,GACrB,QAAS,EAAA,oBAAoB,CAAM,CACrC,CACN,CACF"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import type { MCPConfig } from "@openhands/typescript-client";
|
|
2
|
+
import type { MCPServerConfig } from "#/types/mcp-server";
|
|
3
3
|
export declare function flattenMcpConfig(config: MCPConfig): MCPServerConfig[];
|
|
@@ -1,37 +1,26 @@
|
|
|
1
|
+
import { getMcpServerEnabled as e } from "./mcp-config.js";
|
|
1
2
|
//#region src/utils/mcp-installed-servers.ts
|
|
2
|
-
function
|
|
3
|
-
return [
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
})),
|
|
22
|
-
...e.shttp_servers.map((e, t) => ({
|
|
23
|
-
id: `shttp-${t}`,
|
|
24
|
-
type: "shttp",
|
|
25
|
-
name: typeof e == "object" ? e.name : void 0,
|
|
26
|
-
url: typeof e == "string" ? e : e.url,
|
|
27
|
-
headers: typeof e == "object" ? e.headers : void 0,
|
|
28
|
-
timeout: typeof e == "object" ? e.timeout : void 0,
|
|
29
|
-
auth: typeof e == "object" ? e.auth : void 0,
|
|
30
|
-
enabled: typeof e == "object" ? e.enabled : void 0
|
|
31
|
-
}))
|
|
32
|
-
];
|
|
3
|
+
function t(t) {
|
|
4
|
+
return Object.entries(t).map(([t, n]) => n.transport === "stdio" ? {
|
|
5
|
+
id: t,
|
|
6
|
+
type: "stdio",
|
|
7
|
+
name: t,
|
|
8
|
+
command: n.command,
|
|
9
|
+
args: n.args ?? void 0,
|
|
10
|
+
env: n.env ?? void 0,
|
|
11
|
+
enabled: e(n)
|
|
12
|
+
} : {
|
|
13
|
+
id: t,
|
|
14
|
+
type: n.transport === "sse" ? "sse" : "shttp",
|
|
15
|
+
name: t,
|
|
16
|
+
url: n.url,
|
|
17
|
+
headers: n.headers ?? void 0,
|
|
18
|
+
timeout: n.timeout ?? void 0,
|
|
19
|
+
auth: n.auth ?? void 0,
|
|
20
|
+
enabled: e(n)
|
|
21
|
+
});
|
|
33
22
|
}
|
|
34
23
|
//#endregion
|
|
35
|
-
export {
|
|
24
|
+
export { t as flattenMcpConfig };
|
|
36
25
|
|
|
37
26
|
//# sourceMappingURL=mcp-installed-servers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-installed-servers.js","names":[],"sources":["../../src/utils/mcp-installed-servers.ts"],"sourcesContent":["import { MCPServerConfig } from \"#/types/mcp-server\";\nimport {
|
|
1
|
+
{"version":3,"file":"mcp-installed-servers.js","names":[],"sources":["../../src/utils/mcp-installed-servers.ts"],"sourcesContent":["import type { MCPConfig } from \"@openhands/typescript-client\";\nimport type { MCPServerConfig } from \"#/types/mcp-server\";\nimport { getMcpServerEnabled } from \"./mcp-config\";\n\nexport function flattenMcpConfig(config: MCPConfig): MCPServerConfig[] {\n return Object.entries(config).map(([settingsKey, server]) =>\n server.transport === \"stdio\"\n ? {\n id: settingsKey,\n type: \"stdio\",\n name: settingsKey,\n command: server.command,\n args: server.args ?? undefined,\n env: server.env ?? undefined,\n enabled: getMcpServerEnabled(server),\n }\n : {\n id: settingsKey,\n type: server.transport === \"sse\" ? \"sse\" : \"shttp\",\n name: settingsKey,\n url: server.url,\n headers: server.headers ?? undefined,\n timeout: server.timeout ?? undefined,\n auth: server.auth ?? undefined,\n enabled: getMcpServerEnabled(server),\n },\n );\n}\n"],"mappings":";;AAIA,SAAgB,EAAiB,GAAsC;CACrE,OAAO,OAAO,QAAQ,CAAM,EAAE,KAAK,CAAC,GAAa,OAC/C,EAAO,cAAc,UACjB;EACE,IAAI;EACJ,MAAM;EACN,MAAM;EACN,SAAS,EAAO;EAChB,MAAM,EAAO,QAAQ,KAAA;EACrB,KAAK,EAAO,OAAO,KAAA;EACnB,SAAS,EAAoB,CAAM;CACrC,IACA;EACE,IAAI;EACJ,MAAM,EAAO,cAAc,QAAQ,QAAQ;EAC3C,MAAM;EACN,KAAK,EAAO;EACZ,SAAS,EAAO,WAAW,KAAA;EAC3B,SAAS,EAAO,WAAW,KAAA;EAC3B,MAAM,EAAO,QAAQ,KAAA;EACrB,SAAS,EAAoB,CAAM;CACrC,CACN;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server-health-key.cjs","names":[],"sources":["../../src/utils/mcp-server-health-key.ts"],"sourcesContent":["import type { MCPServerConfig } from \"#/types/mcp-server\";\n\nconst sortedKeys = (record?: Record<string, string> | null): string[] =>\n Object.keys(record ?? {}).sort();\n\n/**\n * Stable identity for a server's health entry.\n *\n * Built from the server's structural, non-secret fields. Names are included\n * because persisted configs are keyed by name
|
|
1
|
+
{"version":3,"file":"mcp-server-health-key.cjs","names":[],"sources":["../../src/utils/mcp-server-health-key.ts"],"sourcesContent":["import type { MCPServerConfig } from \"#/types/mcp-server\";\n\nconst sortedKeys = (record?: Record<string, string> | null): string[] =>\n Object.keys(record ?? {}).sort();\n\n/**\n * Stable identity for a server's health entry.\n *\n * Built from the server's structural, non-secret fields. Names are included\n * because persisted configs are keyed by name, which makes the key unique per\n * stored server and stable across list reordering. Secret VALUES are excluded:\n * the same credential legitimately appears as plaintext at install time,\n * `**********` in redacted settings, and ciphertext in test requests, so any\n * of them would make the key flap. A structural edit (URL, command, header\n * names, auth strategy, ...) therefore produces a new key, orphaning the old\n * health entry instead of misattributing it.\n */\nexport function getMcpServerHealthKey(server: MCPServerConfig): string {\n if (server.type === \"stdio\") {\n return JSON.stringify({\n type: server.type,\n name: server.name ?? \"\",\n command: server.command ?? \"\",\n args: server.args ?? [],\n envKeys: sortedKeys(server.env),\n });\n }\n return JSON.stringify({\n type: server.type,\n name: server.name ?? \"\",\n url: server.url ?? \"\",\n headerKeys: sortedKeys(server.headers),\n authStrategy: server.auth?.strategy ?? \"\",\n authHeaderName:\n server.auth?.strategy === \"api_key\"\n ? (server.auth.header_name ?? \"\")\n : \"\",\n authHeaderKeys:\n server.auth?.strategy === \"header\" ? sortedKeys(server.auth.headers) : [],\n });\n}\n"],"mappings":"6CAEA,IAAM,EAAc,GAClB,OAAO,KAAK,GAAU,CAAC,CAAC,EAAE,KAAK,EAcjC,SAAgB,EAAsB,EAAiC,CAUrE,OATI,EAAO,OAAS,QACX,KAAK,UAAU,CACpB,KAAM,EAAO,KACb,KAAM,EAAO,MAAQ,GACrB,QAAS,EAAO,SAAW,GAC3B,KAAM,EAAO,MAAQ,CAAC,EACtB,QAAS,EAAW,EAAO,GAAG,CAChC,CAAC,EAEI,KAAK,UAAU,CACpB,KAAM,EAAO,KACb,KAAM,EAAO,MAAQ,GACrB,IAAK,EAAO,KAAO,GACnB,WAAY,EAAW,EAAO,OAAO,EACrC,aAAc,EAAO,MAAM,UAAY,GACvC,eACE,EAAO,MAAM,WAAa,UACrB,EAAO,KAAK,aAAe,GAC5B,GACN,eACE,EAAO,MAAM,WAAa,SAAW,EAAW,EAAO,KAAK,OAAO,EAAI,CAAC,CAC5E,CAAC,CACH"}
|
|
@@ -3,10 +3,8 @@ import type { MCPServerConfig } from "#/types/mcp-server";
|
|
|
3
3
|
* Stable identity for a server's health entry.
|
|
4
4
|
*
|
|
5
5
|
* Built from the server's structural, non-secret fields. Names are included
|
|
6
|
-
* because persisted configs are keyed by name
|
|
7
|
-
*
|
|
8
|
-
* server and stable across list reordering — unlike the positional
|
|
9
|
-
* `sse-0`/`stdio-1` ids from `flattenMcpConfig`. Secret VALUES are excluded:
|
|
6
|
+
* because persisted configs are keyed by name, which makes the key unique per
|
|
7
|
+
* stored server and stable across list reordering. Secret VALUES are excluded:
|
|
10
8
|
* the same credential legitimately appears as plaintext at install time,
|
|
11
9
|
* `**********` in redacted settings, and ciphertext in test requests, so any
|
|
12
10
|
* of them would make the key flap. A structural edit (URL, command, header
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server-health-key.js","names":[],"sources":["../../src/utils/mcp-server-health-key.ts"],"sourcesContent":["import type { MCPServerConfig } from \"#/types/mcp-server\";\n\nconst sortedKeys = (record?: Record<string, string> | null): string[] =>\n Object.keys(record ?? {}).sort();\n\n/**\n * Stable identity for a server's health entry.\n *\n * Built from the server's structural, non-secret fields. Names are included\n * because persisted configs are keyed by name
|
|
1
|
+
{"version":3,"file":"mcp-server-health-key.js","names":[],"sources":["../../src/utils/mcp-server-health-key.ts"],"sourcesContent":["import type { MCPServerConfig } from \"#/types/mcp-server\";\n\nconst sortedKeys = (record?: Record<string, string> | null): string[] =>\n Object.keys(record ?? {}).sort();\n\n/**\n * Stable identity for a server's health entry.\n *\n * Built from the server's structural, non-secret fields. Names are included\n * because persisted configs are keyed by name, which makes the key unique per\n * stored server and stable across list reordering. Secret VALUES are excluded:\n * the same credential legitimately appears as plaintext at install time,\n * `**********` in redacted settings, and ciphertext in test requests, so any\n * of them would make the key flap. A structural edit (URL, command, header\n * names, auth strategy, ...) therefore produces a new key, orphaning the old\n * health entry instead of misattributing it.\n */\nexport function getMcpServerHealthKey(server: MCPServerConfig): string {\n if (server.type === \"stdio\") {\n return JSON.stringify({\n type: server.type,\n name: server.name ?? \"\",\n command: server.command ?? \"\",\n args: server.args ?? [],\n envKeys: sortedKeys(server.env),\n });\n }\n return JSON.stringify({\n type: server.type,\n name: server.name ?? \"\",\n url: server.url ?? \"\",\n headerKeys: sortedKeys(server.headers),\n authStrategy: server.auth?.strategy ?? \"\",\n authHeaderName:\n server.auth?.strategy === \"api_key\"\n ? (server.auth.header_name ?? \"\")\n : \"\",\n authHeaderKeys:\n server.auth?.strategy === \"header\" ? sortedKeys(server.auth.headers) : [],\n });\n}\n"],"mappings":";AAEA,IAAM,KAAc,MAClB,OAAO,KAAK,KAAU,CAAC,CAAC,EAAE,KAAK;AAcjC,SAAgB,EAAsB,GAAiC;CAUrE,OATI,EAAO,SAAS,UACX,KAAK,UAAU;EACpB,MAAM,EAAO;EACb,MAAM,EAAO,QAAQ;EACrB,SAAS,EAAO,WAAW;EAC3B,MAAM,EAAO,QAAQ,CAAC;EACtB,SAAS,EAAW,EAAO,GAAG;CAChC,CAAC,IAEI,KAAK,UAAU;EACpB,MAAM,EAAO;EACb,MAAM,EAAO,QAAQ;EACrB,KAAK,EAAO,OAAO;EACnB,YAAY,EAAW,EAAO,OAAO;EACrC,cAAc,EAAO,MAAM,YAAY;EACvC,gBACE,EAAO,MAAM,aAAa,YACrB,EAAO,KAAK,eAAe,KAC5B;EACN,gBACE,EAAO,MAAM,aAAa,WAAW,EAAW,EAAO,KAAK,OAAO,IAAI,CAAC;CAC5E,CAAC;AACH"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require("../_virtual/_rolldown/runtime.cjs");var e=`flex min-h-0 min-w-0 flex-1 flex-col overflow-x-hidden overflow-y-auto custom-scrollbar-always px-4 pt-8 pb-12 md:px-0 md:pr-[14px]`,t=`flex min-h-0 min-w-0 flex-1 flex-col overflow-x-hidden overflow-y-auto custom-scrollbar-always px-4 pt-8 pb-12 md:px-0 md:pt-0 md:pr-[14px]`;exports.settingsLayoutMainScrollClassName=t,exports.settingsLikeMainScrollClassName=e;
|
|
1
|
+
require("../_virtual/_rolldown/runtime.cjs");var e=`flex min-h-0 min-w-0 flex-1 flex-col overflow-x-hidden overflow-y-auto [scrollbar-gutter:stable] custom-scrollbar-always px-4 pt-8 pb-12 md:px-0 md:pr-[14px]`,t=`flex min-h-0 min-w-0 flex-1 flex-col overflow-x-hidden overflow-y-auto [scrollbar-gutter:stable] custom-scrollbar-always px-4 pt-8 pb-12 md:px-0 md:pt-0 md:pr-[14px]`;exports.settingsLayoutMainScrollClassName=t,exports.settingsLikeMainScrollClassName=e;
|
|
2
2
|
//# sourceMappingURL=settings-like-page-layout-classes.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-like-page-layout-classes.cjs","names":[],"sources":["../../src/utils/settings-like-page-layout-classes.ts"],"sourcesContent":["/**\n * Shared layout tokens for /settings/* and extensions pages (/skills, /mcp,\n * /plugins) so mobile gets horizontal inset while desktop keeps the aside +\n * `gap-10` + right gutter pattern.\n */\nexport const settingsLikeMainScrollClassName =\n \"flex min-h-0 min-w-0 flex-1 flex-col overflow-x-hidden overflow-y-auto custom-scrollbar-always px-4 pt-8 pb-12 md:px-0 md:pr-[14px]\";\n\n/** Same scroll shell as {@link settingsLikeMainScrollClassName} but desktop top padding comes from the outer `md:pt-8` wrapper ({@link SettingsLayout}). */\nexport const settingsLayoutMainScrollClassName =\n \"flex min-h-0 min-w-0 flex-1 flex-col overflow-x-hidden overflow-y-auto custom-scrollbar-always px-4 pt-8 pb-12 md:px-0 md:pt-0 md:pr-[14px]\";\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"settings-like-page-layout-classes.cjs","names":[],"sources":["../../src/utils/settings-like-page-layout-classes.ts"],"sourcesContent":["/**\n * Shared layout tokens for /settings/* and extensions pages (/skills, /mcp,\n * /plugins) so mobile gets horizontal inset while desktop keeps the aside +\n * `gap-10` + right gutter pattern.\n *\n * `scrollbar-gutter: stable` keeps the gutter reserved when the page stops\n * overflowing. Without it, filtering a list short enough to fit drops the\n * scrollbar and the centered content jumps sideways into the freed space.\n */\nexport const settingsLikeMainScrollClassName =\n \"flex min-h-0 min-w-0 flex-1 flex-col overflow-x-hidden overflow-y-auto [scrollbar-gutter:stable] custom-scrollbar-always px-4 pt-8 pb-12 md:px-0 md:pr-[14px]\";\n\n/** Same scroll shell as {@link settingsLikeMainScrollClassName} but desktop top padding comes from the outer `md:pt-8` wrapper ({@link SettingsLayout}). */\nexport const settingsLayoutMainScrollClassName =\n \"flex min-h-0 min-w-0 flex-1 flex-col overflow-x-hidden overflow-y-auto [scrollbar-gutter:stable] custom-scrollbar-always px-4 pt-8 pb-12 md:px-0 md:pt-0 md:pr-[14px]\";\n"],"mappings":"6CASA,IAAa,EACX,gKAGW,EACX"}
|
|
@@ -2,7 +2,11 @@
|
|
|
2
2
|
* Shared layout tokens for /settings/* and extensions pages (/skills, /mcp,
|
|
3
3
|
* /plugins) so mobile gets horizontal inset while desktop keeps the aside +
|
|
4
4
|
* `gap-10` + right gutter pattern.
|
|
5
|
+
*
|
|
6
|
+
* `scrollbar-gutter: stable` keeps the gutter reserved when the page stops
|
|
7
|
+
* overflowing. Without it, filtering a list short enough to fit drops the
|
|
8
|
+
* scrollbar and the centered content jumps sideways into the freed space.
|
|
5
9
|
*/
|
|
6
|
-
export declare const settingsLikeMainScrollClassName = "flex min-h-0 min-w-0 flex-1 flex-col overflow-x-hidden overflow-y-auto custom-scrollbar-always px-4 pt-8 pb-12 md:px-0 md:pr-[14px]";
|
|
10
|
+
export declare const settingsLikeMainScrollClassName = "flex min-h-0 min-w-0 flex-1 flex-col overflow-x-hidden overflow-y-auto [scrollbar-gutter:stable] custom-scrollbar-always px-4 pt-8 pb-12 md:px-0 md:pr-[14px]";
|
|
7
11
|
/** Same scroll shell as {@link settingsLikeMainScrollClassName} but desktop top padding comes from the outer `md:pt-8` wrapper ({@link SettingsLayout}). */
|
|
8
|
-
export declare const settingsLayoutMainScrollClassName = "flex min-h-0 min-w-0 flex-1 flex-col overflow-x-hidden overflow-y-auto custom-scrollbar-always px-4 pt-8 pb-12 md:px-0 md:pt-0 md:pr-[14px]";
|
|
12
|
+
export declare const settingsLayoutMainScrollClassName = "flex min-h-0 min-w-0 flex-1 flex-col overflow-x-hidden overflow-y-auto [scrollbar-gutter:stable] custom-scrollbar-always px-4 pt-8 pb-12 md:px-0 md:pt-0 md:pr-[14px]";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
//#region src/utils/settings-like-page-layout-classes.ts
|
|
2
|
-
var e = "flex min-h-0 min-w-0 flex-1 flex-col overflow-x-hidden overflow-y-auto custom-scrollbar-always px-4 pt-8 pb-12 md:px-0 md:pr-[14px]", t = "flex min-h-0 min-w-0 flex-1 flex-col overflow-x-hidden overflow-y-auto custom-scrollbar-always px-4 pt-8 pb-12 md:px-0 md:pt-0 md:pr-[14px]";
|
|
2
|
+
var e = "flex min-h-0 min-w-0 flex-1 flex-col overflow-x-hidden overflow-y-auto [scrollbar-gutter:stable] custom-scrollbar-always px-4 pt-8 pb-12 md:px-0 md:pr-[14px]", t = "flex min-h-0 min-w-0 flex-1 flex-col overflow-x-hidden overflow-y-auto [scrollbar-gutter:stable] custom-scrollbar-always px-4 pt-8 pb-12 md:px-0 md:pt-0 md:pr-[14px]";
|
|
3
3
|
//#endregion
|
|
4
4
|
export { t as settingsLayoutMainScrollClassName, e as settingsLikeMainScrollClassName };
|
|
5
5
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-like-page-layout-classes.js","names":[],"sources":["../../src/utils/settings-like-page-layout-classes.ts"],"sourcesContent":["/**\n * Shared layout tokens for /settings/* and extensions pages (/skills, /mcp,\n * /plugins) so mobile gets horizontal inset while desktop keeps the aside +\n * `gap-10` + right gutter pattern.\n */\nexport const settingsLikeMainScrollClassName =\n \"flex min-h-0 min-w-0 flex-1 flex-col overflow-x-hidden overflow-y-auto custom-scrollbar-always px-4 pt-8 pb-12 md:px-0 md:pr-[14px]\";\n\n/** Same scroll shell as {@link settingsLikeMainScrollClassName} but desktop top padding comes from the outer `md:pt-8` wrapper ({@link SettingsLayout}). */\nexport const settingsLayoutMainScrollClassName =\n \"flex min-h-0 min-w-0 flex-1 flex-col overflow-x-hidden overflow-y-auto custom-scrollbar-always px-4 pt-8 pb-12 md:px-0 md:pt-0 md:pr-[14px]\";\n"],"mappings":";
|
|
1
|
+
{"version":3,"file":"settings-like-page-layout-classes.js","names":[],"sources":["../../src/utils/settings-like-page-layout-classes.ts"],"sourcesContent":["/**\n * Shared layout tokens for /settings/* and extensions pages (/skills, /mcp,\n * /plugins) so mobile gets horizontal inset while desktop keeps the aside +\n * `gap-10` + right gutter pattern.\n *\n * `scrollbar-gutter: stable` keeps the gutter reserved when the page stops\n * overflowing. Without it, filtering a list short enough to fit drops the\n * scrollbar and the centered content jumps sideways into the freed space.\n */\nexport const settingsLikeMainScrollClassName =\n \"flex min-h-0 min-w-0 flex-1 flex-col overflow-x-hidden overflow-y-auto [scrollbar-gutter:stable] custom-scrollbar-always px-4 pt-8 pb-12 md:px-0 md:pr-[14px]\";\n\n/** Same scroll shell as {@link settingsLikeMainScrollClassName} but desktop top padding comes from the outer `md:pt-8` wrapper ({@link SettingsLayout}). */\nexport const settingsLayoutMainScrollClassName =\n \"flex min-h-0 min-w-0 flex-1 flex-col overflow-x-hidden overflow-y-auto [scrollbar-gutter:stable] custom-scrollbar-always px-4 pt-8 pb-12 md:px-0 md:pt-0 md:pr-[14px]\";\n"],"mappings":";AASA,IAAa,IACX,iKAGW,IACX"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type LucideIcon } from "lucide-react";
|
|
2
|
+
import { type SkillCategoryId } from "@openhands/extensions/skills";
|
|
3
|
+
import { I18nKey } from "#/i18n/declaration";
|
|
4
|
+
import type { SkillInfo } from "#/types/settings";
|
|
5
|
+
/** Display order in the facet rail. `other` last. */
|
|
6
|
+
export declare const SKILL_CATEGORY_ORDER: readonly SkillCategoryId[];
|
|
7
|
+
export declare const SKILL_CATEGORY_LABEL_KEYS: Record<SkillCategoryId, I18nKey>;
|
|
8
|
+
export declare const SKILL_CATEGORY_ICONS: Record<SkillCategoryId, LucideIcon>;
|
|
9
|
+
/** The catalog uses `other` for a skill with no marketplace entry, so it means "uncategorized" there exactly as it does for a local skill. */
|
|
10
|
+
export declare const UNCATEGORIZED_SKILL_CATEGORY: SkillCategoryId;
|
|
11
|
+
/** Local skills carry no category and a stale bundled catalog could carry one this build does not know; both degrade to `other` rather than an unrenderable facet value. */
|
|
12
|
+
export declare function getSkillCategory(skill: SkillInfo): SkillCategoryId;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openhands/agent-canvas",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.10.0",
|
|
4
4
|
"description": "Agent Canvas UI for OpenHands - run AI coding agents with a visual interface",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"private": false,
|
|
@@ -23,12 +23,12 @@
|
|
|
23
23
|
"@heroui/react": "2.8.10",
|
|
24
24
|
"@microlink/react-json-view": "1.31.20",
|
|
25
25
|
"@monaco-editor/react": "4.7.0",
|
|
26
|
-
"@openhands/extensions": "0.
|
|
26
|
+
"@openhands/extensions": "0.16.0",
|
|
27
27
|
"@openhands/typescript-client": "1.36.1",
|
|
28
|
-
"@react-router/node": "7.
|
|
29
|
-
"@react-router/serve": "7.
|
|
30
|
-
"@tailwindcss/vite": "4.
|
|
31
|
-
"@tanstack/react-query": "5.
|
|
28
|
+
"@react-router/node": "7.18.2",
|
|
29
|
+
"@react-router/serve": "7.18.2",
|
|
30
|
+
"@tailwindcss/vite": "4.3.3",
|
|
31
|
+
"@tanstack/react-query": "5.101.4",
|
|
32
32
|
"@types/shell-quote": "1.7.5",
|
|
33
33
|
"@uidotdev/usehooks": "2.4.1",
|
|
34
34
|
"@xterm/addon-fit": "0.11.0",
|
|
@@ -39,20 +39,20 @@
|
|
|
39
39
|
"downshift": "9.3.2",
|
|
40
40
|
"framer-motion": "12.38.0",
|
|
41
41
|
"httpxy": "0.5.3",
|
|
42
|
-
"i18next": "26.
|
|
42
|
+
"i18next": "26.3.6",
|
|
43
43
|
"i18next-browser-languagedetector": "8.2.1",
|
|
44
44
|
"i18next-http-backend": "4.0.0",
|
|
45
45
|
"isbot": "5.1.39",
|
|
46
46
|
"lucide-react": "1.25.0",
|
|
47
|
-
"monaco-editor": "0.
|
|
48
|
-
"posthog-js": "1.
|
|
49
|
-
"react": "19.2.
|
|
50
|
-
"react-dom": "19.2.
|
|
47
|
+
"monaco-editor": "0.56.0",
|
|
48
|
+
"posthog-js": "1.380.0",
|
|
49
|
+
"react": "19.2.8",
|
|
50
|
+
"react-dom": "19.2.8",
|
|
51
51
|
"react-hot-toast": "2.6.0",
|
|
52
|
-
"react-i18next": "17.0.
|
|
52
|
+
"react-i18next": "17.0.11",
|
|
53
53
|
"react-icons": "5.6.0",
|
|
54
54
|
"react-markdown": "10.1.0",
|
|
55
|
-
"react-router": "7.
|
|
55
|
+
"react-router": "7.18.2",
|
|
56
56
|
"react-syntax-highlighter": "16.1.1",
|
|
57
57
|
"rehype-raw": "7.0.0",
|
|
58
58
|
"rehype-sanitize": "6.0.0",
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
"sirv": "3.0.2",
|
|
63
63
|
"sirv-cli": "3.0.1",
|
|
64
64
|
"socket.io-client": "4.8.3",
|
|
65
|
-
"tailwind-merge": "3.
|
|
65
|
+
"tailwind-merge": "3.6.0",
|
|
66
66
|
"tailwind-scrollbar": "4.0.2",
|
|
67
67
|
"unist-util-visit": "5.1.0",
|
|
68
68
|
"uuid": "14.0.0",
|
|
@@ -126,32 +126,32 @@
|
|
|
126
126
|
"@eslint/eslintrc": "3.3.1",
|
|
127
127
|
"@eslint/js": "9.39.4",
|
|
128
128
|
"@mswjs/socket.io-binding": "0.2.0",
|
|
129
|
-
"@playwright/test": "1.
|
|
130
|
-
"@react-router/dev": "7.
|
|
129
|
+
"@playwright/test": "1.62.0",
|
|
130
|
+
"@react-router/dev": "7.18.2",
|
|
131
131
|
"@stryker-mutator/core": "9.6.1",
|
|
132
132
|
"@stryker-mutator/vitest-runner": "9.6.1",
|
|
133
|
-
"@tailwindcss/typography": "0.5.
|
|
134
|
-
"@tanstack/eslint-plugin-query": "5.
|
|
133
|
+
"@tailwindcss/typography": "0.5.20",
|
|
134
|
+
"@tanstack/eslint-plugin-query": "5.101.4",
|
|
135
135
|
"@testing-library/dom": "10.4.1",
|
|
136
|
-
"@testing-library/jest-dom": "
|
|
136
|
+
"@testing-library/jest-dom": "7.0.0",
|
|
137
137
|
"@testing-library/react": "16.3.2",
|
|
138
138
|
"@testing-library/user-event": "14.6.1",
|
|
139
139
|
"@types/mdast": "4.0.4",
|
|
140
|
-
"@types/node": "
|
|
141
|
-
"@types/react": "19.2.
|
|
140
|
+
"@types/node": "26.1.2",
|
|
141
|
+
"@types/react": "19.2.17",
|
|
142
142
|
"@types/react-dom": "19.2.3",
|
|
143
143
|
"@types/react-syntax-highlighter": "15.5.13",
|
|
144
144
|
"@typescript-eslint/eslint-plugin": "8.59.2",
|
|
145
145
|
"@typescript-eslint/parser": "8.59.2",
|
|
146
146
|
"@vercel/react-router": "1.3.0",
|
|
147
|
-
"@vitest/coverage-v8": "4.1.
|
|
147
|
+
"@vitest/coverage-v8": "4.1.10",
|
|
148
148
|
"cross-env": "10.1.0",
|
|
149
149
|
"electron": "42.3.3",
|
|
150
|
-
"electron-builder": "26.
|
|
150
|
+
"electron-builder": "26.15.3",
|
|
151
151
|
"eslint": "9.39.4",
|
|
152
152
|
"eslint-config-prettier": "10.1.8",
|
|
153
|
-
"eslint-import-resolver-typescript": "4.4.
|
|
154
|
-
"eslint-plugin-i18next": "6.1.
|
|
153
|
+
"eslint-import-resolver-typescript": "4.4.5",
|
|
154
|
+
"eslint-plugin-i18next": "6.1.5",
|
|
155
155
|
"eslint-plugin-import-x": "4.16.2",
|
|
156
156
|
"eslint-plugin-jsx-a11y": "6.10.2",
|
|
157
157
|
"eslint-plugin-prettier": "5.5.5",
|
|
@@ -160,15 +160,15 @@
|
|
|
160
160
|
"eslint-plugin-unused-imports": "4.4.1",
|
|
161
161
|
"globals": "16.5.0",
|
|
162
162
|
"husky": "9.1.7",
|
|
163
|
-
"jsdom": "
|
|
163
|
+
"jsdom": "30.0.0",
|
|
164
164
|
"lint-staged": "16.4.0",
|
|
165
|
-
"msw": "2.
|
|
165
|
+
"msw": "2.15.0",
|
|
166
166
|
"postcss-prefix-selector": "2.1.1",
|
|
167
167
|
"prettier": "3.8.3",
|
|
168
|
-
"tailwindcss": "4.
|
|
168
|
+
"tailwindcss": "4.3.3",
|
|
169
169
|
"typescript": "6.0.3",
|
|
170
170
|
"vite-plugin-svgr": "5.2.0",
|
|
171
|
-
"vitest": "4.1.
|
|
171
|
+
"vitest": "4.1.10"
|
|
172
172
|
},
|
|
173
173
|
"packageManager": "npm@10.5.0",
|
|
174
174
|
"volta": {
|
|
@@ -183,7 +183,10 @@
|
|
|
183
183
|
"@vercel/static-config": {
|
|
184
184
|
"ajv": "8.20.0"
|
|
185
185
|
},
|
|
186
|
-
"dompurify": "3.4.
|
|
186
|
+
"dompurify": "3.4.12",
|
|
187
|
+
"typed-rest-client": {
|
|
188
|
+
"qs": "6.15.3"
|
|
189
|
+
}
|
|
187
190
|
},
|
|
188
191
|
"main": "./dist/index.cjs",
|
|
189
192
|
"module": "./dist/index.js",
|
|
@@ -240,8 +243,8 @@
|
|
|
240
243
|
"./package.json": "./package.json"
|
|
241
244
|
},
|
|
242
245
|
"peerDependencies": {
|
|
243
|
-
"react": "19.2.
|
|
244
|
-
"react-dom": "19.2.
|
|
245
|
-
"react-router": "7.
|
|
246
|
+
"react": "19.2.8",
|
|
247
|
+
"react-dom": "19.2.8",
|
|
248
|
+
"react-router": "7.18.2"
|
|
246
249
|
}
|
|
247
250
|
}
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
*
|
|
20
20
|
* Usage:
|
|
21
21
|
* node scripts/check-sdk-version-sync.mjs
|
|
22
|
-
* EXPECTED_SDK_VERSION=1.
|
|
22
|
+
* EXPECTED_SDK_VERSION=1.40.1 node scripts/check-sdk-version-sync.mjs
|
|
23
23
|
* node scripts/check-sdk-version-sync.mjs --check-pypi
|
|
24
24
|
*
|
|
25
25
|
* Environment variables:
|
|
@@ -78,7 +78,7 @@ Triggering from other repos:
|
|
|
78
78
|
-H "Authorization: token \$GITHUB_TOKEN" \\
|
|
79
79
|
-H "Accept: application/vnd.github.v3+json" \\
|
|
80
80
|
https://api.github.com/repos/OpenHands/OpenHands/dispatches \\
|
|
81
|
-
-d '{"event_type": "sdk-version-check", "client_payload": {"version": "1.
|
|
81
|
+
-d '{"event_type": "sdk-version-check", "client_payload": {"version": "1.40.1"}}'
|
|
82
82
|
`);
|
|
83
83
|
process.exit(0);
|
|
84
84
|
}
|
|
@@ -260,9 +260,9 @@ async function fetchPyPIDependencies(packageName, version) {
|
|
|
260
260
|
* Parse PyPI requires_dist array and extract SDK package versions
|
|
261
261
|
*
|
|
262
262
|
* PyPI returns dependencies in PEP 508 format like:
|
|
263
|
-
* "openhands-sdk>=1.
|
|
264
|
-
* "openhands-tools==1.
|
|
265
|
-
* "openhands-workspace (>=1.
|
|
263
|
+
* "openhands-sdk>=1.40.1,<2.0.0"
|
|
264
|
+
* "openhands-tools==1.40.1"
|
|
265
|
+
* "openhands-workspace (>=1.40.1)"
|
|
266
266
|
*/
|
|
267
267
|
function parseSdkVersionsFromRequiresDist(requiresDist) {
|
|
268
268
|
const versions = {};
|
|
@@ -276,7 +276,7 @@ function parseSdkVersionsFromRequiresDist(requiresDist) {
|
|
|
276
276
|
}
|
|
277
277
|
|
|
278
278
|
// Extract the version number - look for patterns like:
|
|
279
|
-
// ">=1.
|
|
279
|
+
// ">=1.40.1", "==1.40.1", "(>=1.40.1)", "~=1.40.1"
|
|
280
280
|
// After the package name and before any comma or closing paren
|
|
281
281
|
const versionPattern = /[><=~!]+\s*([0-9]+(?:\.[0-9]+)*)/;
|
|
282
282
|
const match = dep.match(versionPattern);
|
package/scripts/dev-safe.mjs
CHANGED
|
@@ -48,7 +48,7 @@ const LOCAL_AGENT_SERVER_SUBDIRS = [
|
|
|
48
48
|
"openhands-workspace",
|
|
49
49
|
];
|
|
50
50
|
const DEFAULT_AGENT_SERVER_VERSION = SHARED_DEFAULTS.versions.agentServer;
|
|
51
|
-
// Temporary transitive-dep pin: openhands-sdk 1.
|
|
51
|
+
// Temporary transitive-dep pin: openhands-sdk 1.40.1 leaves agent-client-protocol
|
|
52
52
|
// unbounded (>=0.10.1), but acp 0.11.0 reordered the ACP prompt() args and breaks
|
|
53
53
|
// the SDK's ACP client. Hold acp <0.11 until a fixed SDK ships. See config/defaults.json.
|
|
54
54
|
const AGENT_CLIENT_PROTOCOL_CONSTRAINT =
|
|
@@ -401,7 +401,7 @@ export function validateFrontendDependencies(
|
|
|
401
401
|
* edits are picked up without a manual reinstall. The agent-server itself
|
|
402
402
|
* is rebuilt from local source on each invocation (--reinstall).
|
|
403
403
|
* - OH_AGENT_SERVER_GIT_REF: Git commit SHA or branch name
|
|
404
|
-
* - OH_AGENT_SERVER_VERSION: Specific PyPI version (e.g., "1.
|
|
404
|
+
* - OH_AGENT_SERVER_VERSION: Specific PyPI version (e.g., "1.40.1")
|
|
405
405
|
*
|
|
406
406
|
* If none are set, defaults to the released version specified by
|
|
407
407
|
* DEFAULT_AGENT_SERVER_VERSION. Set OH_AGENT_SERVER_GIT_REF to use a
|
|
@@ -682,16 +682,17 @@ const AGENT_SERVER_ROUTE_PREFIXES = [
|
|
|
682
682
|
function getLocalServiceRoutes(config) {
|
|
683
683
|
const routes = [];
|
|
684
684
|
|
|
685
|
+
// These services bind to IPv4 loopback, but localhost can resolve to ::1.
|
|
685
686
|
if (config.launchAutomation) {
|
|
686
687
|
routes.push([
|
|
687
688
|
AUTOMATION_ROUTE_PREFIX,
|
|
688
|
-
`http://
|
|
689
|
+
`http://127.0.0.1:${config.autoBackendPort}`,
|
|
689
690
|
]);
|
|
690
691
|
}
|
|
691
692
|
|
|
692
693
|
if (config.launchAgentServer) {
|
|
693
694
|
for (const prefix of AGENT_SERVER_ROUTE_PREFIXES) {
|
|
694
|
-
routes.push([prefix, `http://
|
|
695
|
+
routes.push([prefix, `http://127.0.0.1:${config.agentServerPort}`]);
|
|
695
696
|
}
|
|
696
697
|
}
|
|
697
698
|
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as e,t}from"./rolldown-runtime-Cyuzqnbw.js";import{St as n}from"./vendor-styling-Bcgpimp9.js";import{a as r,i,o as a,t as o}from"./vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~d4by102p-C2f0ZhS-.js";import{a as s,i as c,n as l,r as u}from"./vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~gy8zbn65-CGt6bWRT.js";import{N as d}from"./vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~b0bpqexo-CbTboogo.js";var f=t(((e,t)=>{t.exports={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0}})),p=e(n()),m=e(f()),h=/\s([^'"/\s><]+?)[\s/>]|([^\s=]+)=\s?(".*?"|'.*?')/g;function g(e){var t={type:`tag`,name:``,voidElement:!1,attrs:{},children:[]},n=e.match(/<\/?([^\s]+?)[/\s>]/);if(n&&(t.name=n[1],(m.default[n[1]]||e.charAt(e.length-2)===`/`)&&(t.voidElement=!0),t.name.startsWith(`!--`))){var r=e.indexOf(`-->`);return{type:`comment`,comment:r===-1?``:e.slice(4,r)}}for(var i=new RegExp(h),a=null;(a=i.exec(e))!==null;)if(a[0].trim())if(a[1]){var o=a[1].trim(),s=[o,``];o.indexOf(`=`)>-1&&(s=o.split(`=`)),t.attrs[s[0]]=s[1],i.lastIndex--}else a[2]&&(t.attrs[a[2]]=a[3].trim().substring(1,a[3].length-1));return t}var _=/<[a-zA-Z0-9\-\!\/](?:"[^"]*"|'[^']*'|[^'">])*>/g,v=/^\s*$/,y=Object.create(null);function b(e,t){switch(t.type){case`text`:return e+t.content;case`tag`:return e+=`<`+t.name+(t.attrs?function(e){var t=[];for(var n in e)t.push(n+`="`+e[n]+`"`);return t.length?` `+t.join(` `):``}(t.attrs):``)+(t.voidElement?`/>`:`>`),t.voidElement?e:e+t.children.reduce(b,``)+`</`+t.name+`>`;case`comment`:return e+`<!--`+t.comment+`-->`}}var x={parse:function(e,t){t||={},t.components||=y;var n,r=[],i=[],a=-1,o=!1;if(e.indexOf(`<`)!==0){var s=e.indexOf(`<`);r.push({type:`text`,content:s===-1?e:e.substring(0,s)})}return e.replace(_,function(s,c){if(o){if(s!==`</`+n.name+`>`)return;o=!1}var l,u=s.charAt(1)!==`/`,d=s.startsWith(`<!--`),f=c+s.length,p=e.charAt(f);if(d){var m=g(s);return a<0?(r.push(m),r):((l=i[a]).children.push(m),r)}if(u&&(a++,(n=g(s)).type===`tag`&&t.components[n.name]&&(n.type=`component`,o=!0),n.voidElement||o||!p||p===`<`||n.children.push({type:`text`,content:e.slice(f,e.indexOf(`<`,f))}),a===0&&r.push(n),(l=i[a-1])&&l.children.push(n),i[a]=n),(!u||n.voidElement)&&(a>-1&&(n.voidElement||n.name===s.slice(2,-1))&&(a--,n=a===-1?r:i[a]),!o&&p!==`<`&&p)){l=a===-1?r:i[a].children;var h=e.indexOf(`<`,f),_=e.slice(f,h===-1?void 0:h);v.test(_)&&(_=` `),(h>-1&&a+l.length>=0||_!==` `)&&l.push({type:`text`,content:_})}}),r},stringify:function(e){return e.reduce(function(e,t){return e+b(``,t)},``)}},S=(e,t)=>{if(!e)return!1;let n=e.props?.children??e.children;return t?n.length>0:!!n},C=e=>{if(!e)return[];let t=e.props?.children??e.children;return e.props?.i18nIsDynamicList?T(t):t},w=e=>Array.isArray(e)&&e.every(p.isValidElement),T=e=>Array.isArray(e)?e:[e],E=(e,t)=>{let n={...t};return n.props={...t.props,...e.props},n},D=e=>{let t={};if(!e)return t;let n=e=>{T(e).forEach(e=>{u(e)||(S(e)?n(C(e)):l(e)&&!(0,p.isValidElement)(e)&&Object.assign(t,e))})};return n(e),t},O=(e,t,n,r)=>{if(!e)return``;let i=``,a=T(e),o=t?.transSupportBasicHtmlNodes?t.transKeepBasicHtmlNodesFor??[]:[];return a.forEach((e,a)=>{if(u(e)){i+=`${e}`;return}if((0,p.isValidElement)(e)){let{props:s,type:c}=e,l=Object.keys(s).length,d=o.indexOf(c)>-1,f=s.children;if(!f&&d&&!l){i+=`<${c}/>`;return}if(!f&&(!d||l)||s.i18nIsDynamicList){i+=`<${a}></${a}>`;return}if(d&&l<=1){let e=u(f)?f:O(f,t,n,r);i+=`<${c}>${e}</${c}>`;return}let p=O(f,t,n,r);i+=`<${a}>${p}</${a}>`;return}if(e===null){c(n,`TRANS_NULL_VALUE`,`Passed in a null value as child`,{i18nKey:r});return}if(l(e)){let{format:t,...a}=e,o=Object.keys(a);if(o.length===1){let e=t?`${o[0]}, ${t}`:o[0];i+=`{{${e}}}`;return}c(n,`TRANS_INVALID_OBJ`,`Invalid child - Object should only have keys {{ value, format }} (format is optional).`,{i18nKey:r,child:e});return}c(n,`TRANS_INVALID_VAR`,`Passed in a variable like {number} - pass variables for interpolation as full objects like {{number}}.`,{i18nKey:r,child:e})}),i},k=(e,t=[],n={})=>{if(!e)return e;let r=Object.keys(n),i=[...t,...r],a=``,o=0;for(;o<e.length;)if(e[o]===`<`){let t=!1,n=e.slice(o).match(/^<\/(\d+|[a-zA-Z][a-zA-Z0-9_-]*)>/);if(n){let e=n[1];(/^\d+$/.test(e)||i.includes(e))&&(t=!0,a+=n[0],o+=n[0].length)}if(!t){let n=e.slice(o).match(/^<(\d+|[a-zA-Z][a-zA-Z0-9_-]*)(\s+[\w-]+(?:=(?:"[^"]*"|'[^']*'|[^\s>]+))?)*\s*(\/)?>/);if(n){let e=n[1];(/^\d+$/.test(e)||i.includes(e))&&(t=!0,a+=n[0],o+=n[0].length)}}t||(a+=`<`,o+=1)}else a+=e[o],o+=1;return a},A=(e,t,n,i,o,s,c)=>{if(n===``)return[];let d=o.transKeepBasicHtmlNodesFor||[],f=n&&new RegExp(d.map(e=>`<${e}`).join(`|`)).test(n);if(!e&&!t&&!f&&!c)return[n];let m=t??{},h=e=>{T(e).forEach(e=>{u(e)||(S(e)?h(C(e)):l(e)&&!(0,p.isValidElement)(e)&&Object.assign(m,e))})};h(e);let g=k(n,d,m),_=x.parse(`<0>${g}</0>`),v={...m,...s},y=(e,t,n)=>{let r=C(e),i=D(r,t.children,n);return w(r)&&i.length===0||e.props?.i18nIsDynamicList?r:i},b=(e,t,n,r,i)=>{e.dummy?(e.children=t,n.push((0,p.cloneElement)(e,{key:r},i?void 0:t))):n.push(...p.Children.map([e],e=>{if(e.type===p.Fragment||e.props?.i18nIsDynamicList!==void 0){let n={key:r};return e&&e.props&&Object.keys(e.props).forEach(t=>{t===`children`||t===`i18nIsDynamicList`||(n[t]=e.props[t])}),(0,p.createElement)(e.type,n,i?null:t)}let n={key:r};return e&&e.props&&Object.keys(e.props).forEach(t=>{t===`ref`||t===`children`||(n[t]=e.props[t])}),(0,p.cloneElement)(e,n,i?null:t)}))},D=(e,n,s)=>{let m=T(e),h=T(n),g={};return h.reduce((e,n,h)=>{let _=n.children?.[0]?.content&&i.services.interpolator.interpolate(n.children[0].content,v,i.language);if(n.type===`tag`){let r=m[parseInt(n.name,10)];!r&&t&&(r=t[n.name]),s.length===1&&!r&&(r=s[0][n.name]),r||={};let x={...n.attrs};c&&Object.keys(x).forEach(e=>{let t=x[e];u(t)&&(x[e]=a(t))});let w=Object.keys(x).length===0?r:E({props:x},r),O=(0,p.isValidElement)(w),k=O&&S(n,!0)&&!n.voidElement,A=f&&l(w)&&w.dummy&&!O,j=l(t)&&Object.hasOwnProperty.call(t,n.name);if(u(w)){let t=i.services.interpolator.interpolate(w,v,i.language);e.push(t)}else if(S(w)||k)b(w,y(w,n,s),e,h);else if(A)b(w,D(m,n.children,s),e,h);else if(Number.isNaN(parseFloat(n.name)))if(j)b(w,y(w,n,s),e,h,n.voidElement);else if(o.transSupportBasicHtmlNodes&&d.indexOf(n.name)>-1)if(n.voidElement)e.push((0,p.createElement)(n.name,{key:`${n.name}-${h}`}));else{let t=g[n.name]||0;g[n.name]=t+1;let r,i=0;for(let e=0;e<m.length;e+=1){let a=m[e];if((0,p.isValidElement)(a)&&a.type===n.name){if(i===t){r=a;break}i+=1}}let a=D(r?T(C(r)):m,n.children,s);e.push((0,p.createElement)(n.name,{key:`${n.name}-${h}`},a))}else if(n.voidElement)e.push(`<${n.name} />`);else{let t=D(m,n.children,s);e.push(`<${n.name}>${t}</${n.name}>`)}else if(l(w)&&!O){let t=n.children[0]?_:null;t&&e.push(t)}else b(w,_,e,h,n.children.length!==1||!_)}else if(n.type===`text`){let t=o.transWrapTextNodes,a=typeof o.unescape==`function`?o.unescape:r().unescape,s=c?a(i.services.interpolator.interpolate(n.content,v,i.language)):i.services.interpolator.interpolate(n.content,v,i.language);t?e.push((0,p.createElement)(t,{key:`${n.name}-${h}`},s)):e.push(s)}return e},[])};return C(D([{dummy:!0,children:e||[]}],_,T(e||[]))[0])},j=(e,t,n)=>{let r=e.key||t,i=(0,p.cloneElement)(e,{key:r});if(!i.props||!i.props.children||n.indexOf(`${t}/>`)<0&&n.indexOf(`${t} />`)<0)return i;function a(){return(0,p.createElement)(p.Fragment,null,i)}return(0,p.createElement)(a,{key:r})},M=(e,t)=>e.map((e,n)=>j(e,n,t)),N=(e,t)=>{let n={};return Object.keys(e).forEach(r=>{Object.assign(n,{[r]:j(e[r],r,t)})}),n},P=(e,t,n,r)=>e?Array.isArray(e)?M(e,t):l(e)?N(e,t):(s(n,`TRANS_INVALID_COMPONENTS`,`<Trans /> "components" prop expects an object or array`,{i18nKey:r}),null):null,F=e=>!l(e)||Array.isArray(e)?!1:Object.keys(e).reduce((e,t)=>e&&Number.isNaN(Number.parseFloat(t)),!0);function I({children:e,count:t,parent:n,i18nKey:a,context:o,tOptions:c={},values:l,defaults:f,components:m,ns:h,i18n:g,t:_,shouldUnescape:v,...y}){let b=g||i();if(!b)return s(b,`NO_I18NEXT_INSTANCE`,`Trans: You need to pass in an i18next instance using i18nextReactModule`,{i18nKey:a}),e;let x=_||b.t.bind(b)||(e=>e),S={...r(),...b.options?.react},C=h||x.ns||b.options?.defaultNS;C=u(C)?[C]:C||[`translation`];let{transDefaultProps:w}=S,T=w?.tOptions?{...w.tOptions,...c}:c,E=v??w?.shouldUnescape,k=w?.values?{...w.values,...l}:l,j=w?.components?{...w.components,...m}:m,M=O(e,S,b,a),N=f||T?.defaultValue||M||S.transEmptyNodeValue||(typeof a==`function`?d(a):a),{hashTransKey:I}=S,L=a||(I?I(M||N):M||N);l=b.options?.interpolation?.defaultVariables?k&&Object.keys(k).length>0?{...k,...b.options.interpolation.defaultVariables}:{...b.options.interpolation.defaultVariables}:k;let R=D(e);R&&typeof R.count==`number`&&t===void 0&&(t=R.count);let z=l||t!==void 0&&!b.options?.interpolation?.alwaysFormat||!e?T.interpolation:{interpolation:{...T.interpolation,prefix:`#$?`,suffix:`?$#`}},B={...T,context:o||T.context,count:t,...l,...z,defaultValue:N,ns:C},V=L?x(L,B):N;V===L&&N&&(V=N);let H=P(j,V,b,a),U=H||e,W=null;F(H)&&(W=H,U=e);let G=A(U,W,V,b,S,B,E),K=n??S.defaultTransParent;return K?(0,p.createElement)(K,y,G):G}function L({children:e,count:t,parent:n,i18nKey:r,context:a,tOptions:s={},values:c,defaults:l,components:u,ns:d,i18n:f,t:m,shouldUnescape:h,...g}){let{i18n:_,defaultNS:v}=(0,p.useContext)(o)||{},y=f||_||i(),b=m||y?.t.bind(y);return I({children:e,count:t,parent:n,i18nKey:r,context:a,tOptions:s,values:c,defaults:l,components:u,ns:d||b?.ns||v||y?.options?.defaultNS,i18n:y,t:m,shouldUnescape:h,...g})}export{L as t};
|