@openhands/agent-canvas 1.1.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/README.windows.md +2 -2
- package/build/assets/Trans-De9RwQhA.js +1 -0
- package/build/assets/__vite-browser-external-4xJsU2-u.js +1 -0
- package/build/assets/{acp-providers-B_ZxlEbx.js → acp-providers-D_D8VUpP.js} +1 -1
- package/build/assets/active-backend-context-u2tdYRgH.js +1 -0
- package/build/assets/add-backend-modal-DIEyAkA4.js +1 -0
- package/build/assets/agent-profiles-settings-BovdV4N8.js +1 -0
- package/build/assets/{agent-server-client-options-CxnCYyIW.js → agent-server-client-options-DVLRd9sw.js} +1 -1
- package/build/assets/agent-server-conversation-service.api-BP73yONA.js +5 -0
- package/build/assets/agent-settings-FGL3Yvkp.js +1 -0
- package/build/assets/agent-settings-Ofbh6UTD.js +2 -0
- package/build/assets/alert-banner-BW0wRYw6.js +1 -0
- package/build/assets/api-key-entry-screen-CZIdRmUJ.js +1 -0
- package/build/assets/app-settings-BHJ9nKti.js +1 -0
- package/build/assets/automation-detail-DwYGzLkp.js +2 -0
- package/build/assets/automations-list-CuAfJmMW.js +1 -0
- package/build/assets/back-nav-button-BYmxFxGt.js +1 -0
- package/build/assets/backend-form-modal-BiaOB2C4.js +1 -0
- package/build/assets/backend-synced-settings-badge-Bs3FSXsS.js +1 -0
- package/build/assets/base-modal-CC5Pp8CF.js +1 -0
- package/build/assets/bot-D7eUAuSB.js +1 -0
- package/build/assets/brand-button-DKPMEKcW.js +1 -0
- package/build/assets/{browser-CCwPzPsD.js → browser-B39N74jU.js} +2 -2
- package/build/assets/browser-store-BI6uklCG.js +1 -0
- package/build/assets/browser-tab-aiDg7aEn.js +1 -0
- package/build/assets/chat-send-button-DxuZIoW8.js +1 -0
- package/build/assets/check-Bvi71siz.js +1 -0
- package/build/assets/checkmark-h7udgXMM.js +1 -0
- package/build/assets/{chevron-down-BxZEAIv4.js → chevron-down-CI8A6tet.js} +1 -1
- package/build/assets/circle-plus-check-toggle-T3eAIuPQ.js +1 -0
- package/build/assets/close-p3Op5lxI.js +1 -0
- package/build/assets/code-tag-DYlAhEQY.js +1 -0
- package/build/assets/{color-themes-CTNRQd1a.js → color-themes-DPBzNtVg.js} +4 -4
- package/build/assets/combobox-caret-CLGvOs32.js +1 -0
- package/build/assets/command-menu-DKrLCRla.js +1 -0
- package/build/assets/{command-store-C-57Heey.js → command-store-D8J5LMW1.js} +1 -1
- package/build/assets/condenser-settings-D_5vY4m3.js +1 -0
- package/build/assets/confirmation-modal-BK1F0A68.js +1 -0
- package/build/assets/context-menu-list-item-DBFzplWW.js +1 -0
- package/build/assets/conversation-DnVC6vRV.js +1 -0
- package/build/assets/conversation-local-storage-F6zVMM--.js +1 -0
- package/build/assets/conversation-panel-ZEz-z3az.js +1 -0
- package/build/assets/conversation-service.api-CqZcHr1c.js +1 -0
- package/build/assets/conversation-state-store-B2Bp32XI.js +1 -0
- package/build/assets/conversation-store-LptbOvKa.js +1 -0
- package/build/assets/conversation-tab-empty-state-m8IUkfMj.js +1 -0
- package/build/assets/conversation-xkBS3AHC.js +19 -0
- package/build/assets/copy-3JCw_XFB.js +1 -0
- package/build/assets/copy-BLmGeJcd.js +1 -0
- package/build/assets/copy-to-clipboard-button-Aj9wFmt2.js +1 -0
- package/build/assets/createLucideIcon-CVAsW2Yo.js +1 -0
- package/build/assets/declaration-B9kpCaYl.js +1 -0
- package/build/assets/device-verify-B5YCrvSu.js +1 -0
- package/build/assets/dist-CodhvuAP.js +1 -0
- package/build/assets/dropdown-classes-CgQ45JmQ.js +1 -0
- package/build/assets/edit-automation-modal-B6U96gVV.js +1 -0
- package/build/assets/ellipsis-button-1BV9Sga8.js +1 -0
- package/build/assets/entry.client-Dy--3GeA.js +2 -0
- package/build/assets/enum-filter-dropdown-DCITiYVi.js +1 -0
- package/build/assets/environment-switch-overlay-DUnKILNH.js +1 -0
- package/build/assets/extensions-hub-CksKNpP9.js +1 -0
- package/build/assets/{extensions-navigation-DfLHdTUC.js → extensions-navigation-Di9rJ-b5.js} +1 -1
- package/build/assets/{external-link-D8njjDTk.js → external-link-D2zJjE9G.js} +1 -1
- package/build/assets/files-tab-61Vaihc6.js +1 -0
- package/build/assets/files-tab-store-DJsPxYdg.js +1 -0
- package/build/assets/folder-mMWFvaw0.js +1 -0
- package/build/assets/form-control-classes-9rkU4usZ.js +1 -0
- package/build/assets/get-language-from-path-CPNnuVhI.js +1 -0
- package/build/assets/git-provider-icon-aQRcUVI-.js +1 -0
- package/build/assets/home-5gOtUe-n.js +1 -0
- package/build/assets/iconBase-DaTRRUjy.js +1 -0
- package/build/assets/index-redirect-CUUJiNki.js +1 -0
- package/build/assets/install-server-modal-BRab9inF.js +1 -0
- package/build/assets/launch-1TJRKkkX.js +1 -0
- package/build/assets/lesson-plan-BtrZUCuj.js +4 -0
- package/build/assets/link-external-DfKQroKX.js +1 -0
- package/build/assets/{list-todo-B_Ts2JmZ.js → list-todo-BfH6yYUK.js} +1 -1
- package/build/assets/llm-not-configured-banner-BrU5uHto.js +27 -0
- package/build/assets/llm-settings-BpdU51Jo.js +1 -0
- package/build/assets/llm-settings-DsInf6yD.js +1 -0
- package/build/assets/{llm-subscription-service-BX_AtNlO.js → llm-subscription-service-CKyaV24y.js} +1 -1
- package/build/assets/loader-circle-BEykUKYG.js +1 -0
- package/build/assets/loading-spinner-DHAIPZkP.js +1 -0
- package/build/assets/manage-backends-modal-BREySP-J.js +1 -0
- package/build/assets/manifest-a5bb7568.js +1 -0
- package/build/assets/{markdown-renderer-DWy7Np7u.js → markdown-renderer-D8mayGjI.js} +1 -1
- package/build/assets/mcp-XXf8k6mb.js +9 -0
- package/build/assets/messages-D2oZb47Z.js +40 -0
- package/build/assets/middleware-DYHYNAnP.js +6 -0
- package/build/assets/modal-backdrop-zVwfOJZr.js +1 -0
- package/build/assets/modal-body-Dcu5McCa.js +1 -0
- package/build/assets/{modal-classes-C4kS6ib_.js → modal-classes-DPqxSyuP.js} +1 -1
- package/build/assets/modal-close-button-CTCX4nCH.js +1 -0
- package/build/assets/model-selector-VDHBytb6.js +1 -0
- package/build/assets/{mouse-pointer-click-CXAx4FyM.js → mouse-pointer-click-PdEQPL6v.js} +1 -1
- package/build/assets/navigation-context-DPs2G0X8.js +1 -0
- package/build/assets/navigation-link-D8hfwvxI.js +1 -0
- package/build/assets/onboarding-D32kiGME.js +1 -0
- package/build/assets/onboarding-modal-C084vkv7.js +1 -0
- package/build/assets/openhands-logo-bcNw5bkY.js +1 -0
- package/build/assets/option-service.api-Cl5VLGyw.js +1 -0
- package/build/assets/organization-service.api-CnynNoT-.js +1 -0
- package/build/assets/path-utils-BeOmjIcE.js +1 -0
- package/build/assets/{pencil-CsL0ns9y.js → pencil-Dj2XjKmI.js} +1 -1
- package/build/assets/plan-components-j9X4AxYM.js +1 -0
- package/build/assets/planner-tab-AZMjJx31.js +1 -0
- package/build/assets/plugins-management-service-BAp70KN7.js +1 -0
- package/build/assets/profiles-service.api-CeYEmSM3.js +1 -0
- package/build/assets/providers-vX9jk9Vy.js +1 -0
- package/build/assets/{proxy-TeteRRW5.js → proxy-CHmFkV16.js} +1 -1
- package/build/assets/react-DPDgL6du.js +1 -0
- package/build/assets/recommended-automations-launcher-Bk8tQ-Cn.js +58 -0
- package/build/assets/{refresh-cw-GkGYXsU-.js → refresh-cw-DM82EIyx.js} +1 -1
- package/build/assets/root-CxWZUXTQ.css +1 -0
- package/build/assets/root-layout-CoWw4kpz.js +2 -0
- package/build/assets/root-tuEPDx-i.js +2 -0
- package/build/assets/runtime-waiting-state-DkzLgvMn.js +1 -0
- package/build/assets/schema-field-nvq_Juo2.js +1 -0
- package/build/assets/sdk-section-page-CgT70FaZ.js +1 -0
- package/build/assets/sdk-settings-schema-BjBkMHzZ.js +1 -0
- package/build/assets/search-4DHskuhE.js +1 -0
- package/build/assets/search-BsjCEFNf.js +1 -0
- package/build/assets/secrets-service-CZYjNxFw.js +1 -0
- package/build/assets/secrets-settings-BCxk9p9s.js +1 -0
- package/build/assets/segmented-toggle-Cen5AMUc.js +1 -0
- package/build/assets/settings-CedTdtb5.js +1 -0
- package/build/assets/settings-dropdown-input-xzoZwgUe.js +1 -0
- package/build/assets/settings-gear-MXCyZW0x.js +1 -0
- package/build/assets/settings-index-Cct3PJSP.js +1 -0
- package/build/assets/settings-input-DYs7t3oK.js +1 -0
- package/build/assets/settings-list-classes-DvQr5jVS.js +1 -0
- package/build/assets/{settings-CN_HaPjH.js → settings-mQUckT0g.js} +1 -1
- package/build/assets/settings-modal-DwLybV_O.js +1 -0
- package/build/assets/settings-section-header-context-COMOIaxV.js +1 -0
- package/build/assets/settings-service.api-DldkFI1x.js +1 -0
- package/build/assets/settings-switch-C2N2xqEb.js +1 -0
- package/build/assets/{settings-utils-9-_6iVIn.js → settings-utils-BMdG65By.js} +1 -1
- package/build/assets/shared-conversation-DnDwfLgg.js +1 -0
- package/build/assets/sidebar-layout-BtpUSN3j.js +1 -0
- package/build/assets/sidebar-mobile-menu-toggle-B8k3qu84.js +1 -0
- package/build/assets/sidebar-nav-link-CIB3NBRW.js +1 -0
- package/build/assets/sidebar-store-CZuE8AH5.js +1 -0
- package/build/assets/skill-card-pill-row-D2bUe2kB.js +1 -0
- package/build/assets/skills-9cDZONKh.js +1 -0
- package/build/assets/skills-plugins-B68ay6Pu.js +1 -0
- package/build/assets/skills-settings-A6sUy0T7.js +2 -0
- package/build/assets/{square-chevron-right-Cfi-SUY0.js → square-chevron-right-Czw3FFWc.js} +1 -1
- package/build/assets/styled-tooltip-DsKsFjuq.js +1 -0
- package/build/assets/suspense-X5dBsJzn.js +1 -0
- package/build/assets/switch-skeleton-DqQwalyu.js +1 -0
- package/build/assets/task-list-tab-BAThr9Ex.js +1 -0
- package/build/assets/{terminal-HakoMrQX.js → terminal-BmT0_gIH.js} +2 -2
- package/build/assets/terminal-BuLtIrb9.js +1 -0
- package/build/assets/toggle-switch-DBlOOzBr.js +1 -0
- package/build/assets/{trash-2-Bq4hqiRH.js → trash-2-Be_7y3Mn.js} +1 -1
- package/build/assets/typography-YGPBGzOG.js +1 -0
- package/build/assets/u-check-circle-BqoIxNz_.js +1 -0
- package/build/assets/u-check-circle-half-LiwZkuFe.js +1 -0
- package/build/assets/u-edit-DJ90xc8Z.js +1 -0
- package/build/assets/use-acp-credential-form-Bs6s0DTU.js +1 -0
- package/build/assets/use-activate-agent-profile-CKtTToSx.js +1 -0
- package/build/assets/use-active-agent-profile-CWLPpOtK.js +1 -0
- package/build/assets/use-active-conversation-DI5S5M1w.js +1 -0
- package/build/assets/use-agent-profiles-DPcaYLpm.js +1 -0
- package/build/assets/use-agent-state-Buh3bQDh.js +1 -0
- package/build/assets/use-backends-health-CxkvJy2N.js +1 -0
- package/build/assets/use-breakpoint-B-O0lQ84.js +1 -0
- package/build/assets/use-can-manage-org-profiles-DeX2Mfje.js +1 -0
- package/build/assets/use-click-outside-element-Bf4Omzot.js +1 -0
- package/build/assets/use-cloud-current-user-id-D_PQGfmT.js +1 -0
- package/build/assets/use-config-ur0RbjCP.js +1 -0
- package/build/assets/use-create-conversation-D9OWYcte.js +1 -0
- package/build/assets/use-create-secret-CVFSlhlR.js +1 -0
- package/build/assets/use-event-store-YSOxy9FC.js +4 -0
- package/build/assets/use-handle-plan-click-Dug8egQl.js +1 -0
- package/build/assets/use-is-authed-_dhQ2Xuj.js +1 -0
- package/build/assets/use-launch-skill-in-chat-BnoDgvAy.js +1 -0
- package/build/assets/use-llm-profiles-DjackuP1.js +1 -0
- package/build/assets/use-onboarding-completion-C_Swglzp.js +1 -0
- package/build/assets/use-plugins-marketplace-BGb-KgfD.js +1 -0
- package/build/assets/use-runtime-is-ready-Diiq65Q-.js +1 -0
- package/build/assets/use-save-agent-profile-aKKLqDJM.js +1 -0
- package/build/assets/{use-save-settings-DErJDIDL.js → use-save-settings-CChDyjOB.js} +1 -1
- package/build/assets/use-settings-dX4fKUPF.js +1 -0
- package/build/assets/use-settings-nav-items-D6pHnvxg.js +16 -0
- package/build/assets/use-skills-Dqo-pDDx.js +1 -0
- package/build/assets/use-task-list-CmWGElgb.js +1 -0
- package/build/assets/use-tracking-GtXCHmTv.js +1 -0
- package/build/assets/use-user-conversation-6uOXFP95.js +1 -0
- package/build/assets/useMutation-DCE9RcgK.js +1 -0
- package/build/assets/useMutationState-BUab8Kxr.js +1 -0
- package/build/assets/useQueries-CRzaAqzH.js +1 -0
- package/build/assets/useQuery-CpjHYtZc.js +1 -0
- package/build/assets/useTranslation-Cgy4JA_g.js +1 -0
- package/build/assets/utils-CE0lDWtb.js +1 -0
- package/build/assets/vendor-styling-CI0PQ3ab.js +22 -0
- package/build/assets/{vendor~browser-BQU4C3CQ.js → vendor~browser-Cvg7jXCP.js} +1 -1
- package/build/assets/{vendor~browser-tab-Cim6xN2k.js → vendor~browser-tab-Di0kh5Zw.js} +1 -1
- package/build/assets/vendor~conversation-panel~conversation~alert-banner-DHDkknt5.js +1 -0
- package/build/assets/vendor~entry.client-9tWQ_Ugw.js +1 -0
- package/build/assets/{vendor~entry.client-lAMyAlBD.js → vendor~entry.client-D6BtSOtn.js} +1 -1
- package/build/assets/vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~d1e18dtv-5Q6lQJdE.js +177 -0
- package/build/assets/vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~i3v2mlbw-BrJQ3XZH.js +1 -0
- package/build/assets/vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~ncdxw0bh-ClHnt5lR.js +10 -0
- package/build/assets/{vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~skills-set~t35o0b0f-Bss49YXv.js → vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~skills-set~k6tszsdc-Bb-xMtbv.js} +1 -1
- package/build/assets/vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~skills-set~nn5zty47-Zl0G1QCy.js +1 -0
- package/build/assets/{vendor~entry.client~root~root-layout~index-redirect~home~conversation-panel~conversation~la~fpbtwbmk-DDSPtjxR.js → vendor~entry.client~root~root-layout~index-redirect~home~conversation-panel~conversation~la~byh8a1g4-XNPdpuO8.js} +1 -1
- package/build/assets/{vendor~files-tab-BvQLon-P.js → vendor~files-tab-B02k3xvx.js} +1 -1
- package/build/assets/{vendor~home~conversation-panel~conversation-DBPRU26Z.js → vendor~home~conversation-panel~conversation-CYMF9JYB.js} +1 -1
- package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-DnEBAp2W.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-9UMeuPV6.js} +1 -1
- package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-CzI-A-Gz.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-BD0GaRGa.js} +1 -1
- package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-ByET2Quf.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-CqXiHwjU.js} +1 -1
- package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-DCYBrned.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-D7EUmQ8Y.js} +1 -1
- package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-DnctfFZL.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-DTzw2x50.js} +1 -1
- package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-pSG7lnvH.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-d8aETPbZ.js} +1 -1
- package/build/assets/{vendor~launch-DqoOsAhA.js → vendor~launch-CHXA9cJu.js} +1 -1
- package/build/assets/vendor~root-layout~conversation-panel~conversation-CpiTHpHl.js +1 -0
- package/build/assets/{vendor~root-layout~conversation-panel~conversation~shared-conversation-BJl81v7J.js → vendor~root-layout~conversation-panel~conversation~shared-conversation-_TdZcNMD.js} +1 -1
- package/build/assets/vendor~root-layout~home~conversation-panel~conversation-Cn2jwSga.js +1 -0
- package/build/assets/vendor~root-layout~home~conversation-panel~conversation~launch~settings~settings-index~agen~enjl5xdm-mMKDm94D.js +48 -0
- package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~launch~skills-settings~automations-~ki5qnp0d-DRld6s9c.js → vendor~root-layout~home~conversation-panel~conversation~launch~skills-settings~automations-~ki5qnp0d-rV6d1Iv_.js} +502 -43
- package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~shared-conversation~alert-banner~pl~rqjteh0a-9d2kA26V.js → vendor~root-layout~home~conversation-panel~conversation~shared-conversation~alert-banner~pl~rqjteh0a-CZM4hwUT.js} +1 -1
- package/build/assets/vendor~root-layout~home~mcp~automations-list~onboarding-modal-CXyYYvYh.js +1 -0
- package/build/assets/verification-settings-D_zsNB_c.js +1 -0
- package/build/assets/x-Cb0WAtak.js +1 -0
- package/build/assets/x-mark-Batp6gXa.js +1 -0
- package/build/index.html +4 -4
- package/build/locales/ar/openhands.json +138 -1
- package/build/locales/ca/openhands.json +138 -1
- package/build/locales/de/openhands.json +138 -1
- package/build/locales/en/openhands.json +138 -1
- package/build/locales/es/openhands.json +138 -1
- package/build/locales/fr/openhands.json +138 -1
- package/build/locales/it/openhands.json +138 -1
- package/build/locales/ja/openhands.json +138 -1
- package/build/locales/ko-KR/openhands.json +138 -1
- package/build/locales/no/openhands.json +138 -1
- package/build/locales/pt/openhands.json +138 -1
- package/build/locales/tr/openhands.json +138 -1
- package/build/locales/uk/openhands.json +138 -1
- package/build/locales/zh-CN/openhands.json +138 -1
- package/build/locales/zh-TW/openhands.json +138 -1
- package/config/defaults.json +7 -9
- package/dist/_virtual/__vite-browser-external.cjs +2 -0
- package/dist/_virtual/__vite-browser-external.cjs.map +1 -0
- package/dist/_virtual/__vite-browser-external.js +9 -0
- package/dist/_virtual/__vite-browser-external.js.map +1 -0
- package/dist/api/agent-profiles-service/agent-profiles-service.api.cjs +2 -0
- package/dist/api/agent-profiles-service/agent-profiles-service.api.cjs.map +1 -0
- package/dist/api/agent-profiles-service/agent-profiles-service.api.d.ts +22 -0
- package/dist/api/agent-profiles-service/agent-profiles-service.api.js +35 -0
- package/dist/api/agent-profiles-service/agent-profiles-service.api.js.map +1 -0
- package/dist/api/agent-server-adapter.cjs +2 -2
- package/dist/api/agent-server-adapter.cjs.map +1 -1
- package/dist/api/agent-server-adapter.d.ts +11 -1
- package/dist/api/agent-server-adapter.js +60 -60
- package/dist/api/agent-server-adapter.js.map +1 -1
- package/dist/api/agent-server-compatibility.cjs +1 -1
- package/dist/api/agent-server-compatibility.cjs.map +1 -1
- package/dist/api/agent-server-compatibility.js +1 -0
- package/dist/api/agent-server-compatibility.js.map +1 -1
- package/dist/api/agent-server-home.cjs +1 -1
- package/dist/api/agent-server-home.cjs.map +1 -1
- package/dist/api/agent-server-home.js +1 -0
- package/dist/api/agent-server-home.js.map +1 -1
- package/dist/api/cloud/agent-profiles-service.api.cjs +2 -0
- package/dist/api/cloud/agent-profiles-service.api.cjs.map +1 -0
- package/dist/api/cloud/agent-profiles-service.api.d.ts +7 -0
- package/dist/api/cloud/agent-profiles-service.api.js +58 -0
- package/dist/api/cloud/agent-profiles-service.api.js.map +1 -0
- package/dist/api/cloud/organization-service.api.cjs +1 -1
- package/dist/api/cloud/organization-service.api.cjs.map +1 -1
- package/dist/api/cloud/organization-service.api.d.ts +8 -0
- package/dist/api/cloud/organization-service.api.js +3 -1
- package/dist/api/cloud/organization-service.api.js.map +1 -1
- package/dist/api/cloud/profiles-service.api.cjs +2 -0
- package/dist/api/cloud/profiles-service.api.cjs.map +1 -0
- package/dist/api/cloud/profiles-service.api.d.ts +7 -0
- package/dist/api/cloud/profiles-service.api.js +75 -0
- package/dist/api/cloud/profiles-service.api.js.map +1 -0
- package/dist/api/cloud/settings-service.api.cjs +1 -1
- package/dist/api/cloud/settings-service.api.cjs.map +1 -1
- package/dist/api/cloud/settings-service.api.js +1 -1
- package/dist/api/cloud/settings-service.api.js.map +1 -1
- package/dist/api/config-service/config-service.api.cjs +1 -1
- package/dist/api/config-service/config-service.api.cjs.map +1 -1
- package/dist/api/config-service/config-service.api.js +1 -0
- package/dist/api/config-service/config-service.api.js.map +1 -1
- package/dist/api/conversation-metadata-store.cjs.map +1 -1
- package/dist/api/conversation-metadata-store.d.ts +11 -0
- package/dist/api/conversation-metadata-store.js.map +1 -1
- package/dist/api/conversation-service/agent-server-conversation-service.api.cjs +1 -1
- package/dist/api/conversation-service/agent-server-conversation-service.api.cjs.map +1 -1
- package/dist/api/conversation-service/agent-server-conversation-service.api.d.ts +20 -1
- package/dist/api/conversation-service/agent-server-conversation-service.api.js +134 -105
- package/dist/api/conversation-service/agent-server-conversation-service.api.js.map +1 -1
- package/dist/api/conversation-service/agent-server-conversation-service.types.d.ts +2 -0
- package/dist/api/conversation-service/conversation-service.api.cjs +1 -1
- package/dist/api/conversation-service/conversation-service.api.cjs.map +1 -1
- package/dist/api/conversation-service/conversation-service.api.d.ts +1 -0
- package/dist/api/conversation-service/conversation-service.api.js +4 -0
- package/dist/api/conversation-service/conversation-service.api.js.map +1 -1
- package/dist/api/device-flow-client.cjs +1 -1
- package/dist/api/device-flow-client.cjs.map +1 -1
- package/dist/api/device-flow-client.js +33 -25
- package/dist/api/device-flow-client.js.map +1 -1
- package/dist/api/event-service/event-service.api.cjs +1 -1
- package/dist/api/event-service/event-service.api.cjs.map +1 -1
- package/dist/api/event-service/event-service.api.js +1 -0
- package/dist/api/event-service/event-service.api.js.map +1 -1
- 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 -3
- package/dist/api/mcp-service/mcp-redacted-credentials.js +29 -30
- 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.d.ts +8 -1
- package/dist/api/mcp-service/mcp-service.api.js +129 -23
- package/dist/api/mcp-service/mcp-service.api.js.map +1 -1
- package/dist/api/option-service/option-service.api.cjs +1 -1
- package/dist/api/option-service/option-service.api.cjs.map +1 -1
- package/dist/api/option-service/option-service.api.js +1 -0
- package/dist/api/option-service/option-service.api.js.map +1 -1
- package/dist/api/plugins-management-service.cjs +2 -0
- package/dist/api/plugins-management-service.cjs.map +1 -0
- package/dist/api/plugins-management-service.d.ts +50 -0
- package/dist/api/plugins-management-service.js +41 -0
- package/dist/api/plugins-management-service.js.map +1 -0
- package/dist/api/plugins-service.d.ts +49 -0
- package/dist/api/profiles-service/profiles-service.api.cjs +1 -1
- package/dist/api/profiles-service/profiles-service.api.cjs.map +1 -1
- package/dist/api/profiles-service/profiles-service.api.js +21 -14
- package/dist/api/profiles-service/profiles-service.api.js.map +1 -1
- package/dist/api/runtime-service/agent-server-runtime-service.cjs +1 -1
- package/dist/api/runtime-service/agent-server-runtime-service.cjs.map +1 -1
- package/dist/api/runtime-service/agent-server-runtime-service.js +1 -0
- package/dist/api/runtime-service/agent-server-runtime-service.js.map +1 -1
- package/dist/api/secrets-service.cjs +1 -1
- package/dist/api/secrets-service.cjs.map +1 -1
- package/dist/api/secrets-service.js +1 -0
- package/dist/api/secrets-service.js.map +1 -1
- package/dist/api/settings-service/settings-service.api.cjs +1 -1
- package/dist/api/settings-service/settings-service.api.cjs.map +1 -1
- package/dist/api/settings-service/settings-service.api.js +92 -50
- 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/api/workspaces-service/workspaces-service.api.cjs +1 -1
- package/dist/api/workspaces-service/workspaces-service.api.cjs.map +1 -1
- package/dist/api/workspaces-service/workspaces-service.api.js +1 -0
- package/dist/api/workspaces-service/workspaces-service.api.js.map +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.cjs +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.cjs.map +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.js +57 -38
- package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.js.map +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.cjs +2 -1
- package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.cjs.map +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.js +13 -9
- package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.js.map +1 -1
- package/dist/components/conversation-events/chat/event-message-components/user-assistant-event-message.cjs +1 -1
- package/dist/components/conversation-events/chat/event-message-components/user-assistant-event-message.cjs.map +1 -1
- package/dist/components/conversation-events/chat/event-message-components/user-assistant-event-message.js +65 -26
- package/dist/components/conversation-events/chat/event-message-components/user-assistant-event-message.js.map +1 -1
- package/dist/components/conversation-events/chat/event-message.cjs +2 -2
- package/dist/components/conversation-events/chat/event-message.cjs.map +1 -1
- package/dist/components/conversation-events/chat/event-message.js +78 -76
- package/dist/components/conversation-events/chat/event-message.js.map +1 -1
- package/dist/components/features/analytics/telemetry-consent-banner.cjs +1 -1
- package/dist/components/features/analytics/telemetry-consent-banner.cjs.map +1 -1
- package/dist/components/features/analytics/telemetry-consent-banner.js +1 -0
- package/dist/components/features/analytics/telemetry-consent-banner.js.map +1 -1
- package/dist/components/features/automations/detail/activity-log-item.d.ts +3 -2
- package/dist/components/features/automations/detail/activity-log-section.d.ts +3 -2
- package/dist/components/features/automations/detail/debug-automation-button.d.ts +17 -0
- package/dist/components/features/automations/detail/run-logs-modal.d.ts +6 -1
- package/dist/components/features/backends/backend-form-modal.cjs +1 -1
- package/dist/components/features/backends/backend-form-modal.cjs.map +1 -1
- package/dist/components/features/backends/backend-form-modal.d.ts +6 -2
- package/dist/components/features/backends/backend-form-modal.js +198 -161
- package/dist/components/features/backends/backend-form-modal.js.map +1 -1
- package/dist/components/features/backends/backend-row.cjs +1 -1
- package/dist/components/features/backends/backend-row.cjs.map +1 -1
- package/dist/components/features/backends/backend-row.d.ts +2 -1
- package/dist/components/features/backends/backend-row.js +60 -54
- package/dist/components/features/backends/backend-row.js.map +1 -1
- package/dist/components/features/backends/backend-selector.cjs +1 -1
- package/dist/components/features/backends/backend-selector.cjs.map +1 -1
- package/dist/components/features/backends/backend-selector.js +4 -4
- package/dist/components/features/backends/backend-version.cjs +1 -1
- package/dist/components/features/backends/backend-version.cjs.map +1 -1
- package/dist/components/features/backends/backend-version.js +1 -0
- package/dist/components/features/backends/backend-version.js.map +1 -1
- package/dist/components/features/backends/manage-backends-modal.cjs +1 -1
- package/dist/components/features/backends/manage-backends-modal.cjs.map +1 -1
- package/dist/components/features/backends/manage-backends-modal.js +72 -61
- package/dist/components/features/backends/manage-backends-modal.js.map +1 -1
- package/dist/components/features/chat/change-agent-button.cjs +1 -1
- package/dist/components/features/chat/change-agent-button.js +9 -9
- package/dist/components/features/chat/chat-add-file-button.cjs +1 -1
- package/dist/components/features/chat/chat-add-file-button.cjs.map +1 -1
- package/dist/components/features/chat/chat-add-file-button.js +38 -34
- package/dist/components/features/chat/chat-add-file-button.js.map +1 -1
- package/dist/components/features/chat/chat-interface.cjs +2 -2
- package/dist/components/features/chat/chat-interface.cjs.map +1 -1
- package/dist/components/features/chat/chat-interface.js +136 -129
- package/dist/components/features/chat/chat-interface.js.map +1 -1
- package/dist/components/features/chat/components/chat-input-actions.cjs +1 -1
- package/dist/components/features/chat/components/chat-input-actions.cjs.map +1 -1
- package/dist/components/features/chat/components/chat-input-actions.js +100 -87
- package/dist/components/features/chat/components/chat-input-actions.js.map +1 -1
- package/dist/components/features/chat/components/chat-input-llm-profile-picker.cjs +2 -0
- package/dist/components/features/chat/components/chat-input-llm-profile-picker.cjs.map +1 -0
- package/dist/components/features/chat/components/chat-input-llm-profile-picker.d.ts +15 -0
- package/dist/components/features/chat/components/chat-input-llm-profile-picker.js +118 -0
- package/dist/components/features/chat/components/chat-input-llm-profile-picker.js.map +1 -0
- package/dist/components/features/chat/components/chat-input-model.cjs +1 -1
- package/dist/components/features/chat/components/chat-input-model.js +17 -17
- package/dist/components/features/chat/components/chat-input-profile-picker.cjs +2 -0
- package/dist/components/features/chat/components/chat-input-profile-picker.cjs.map +1 -0
- package/dist/components/features/chat/components/chat-input-profile-picker.d.ts +9 -0
- package/dist/components/features/chat/components/chat-input-profile-picker.js +112 -0
- package/dist/components/features/chat/components/chat-input-profile-picker.js.map +1 -0
- package/dist/components/features/chat/components/resolve-picker-kind.cjs +2 -0
- package/dist/components/features/chat/components/resolve-picker-kind.cjs.map +1 -0
- package/dist/components/features/chat/components/resolve-picker-kind.d.ts +29 -0
- package/dist/components/features/chat/components/resolve-picker-kind.js +8 -0
- package/dist/components/features/chat/components/resolve-picker-kind.js.map +1 -0
- package/dist/components/features/chat/goal-status-banner.cjs +2 -0
- package/dist/components/features/chat/goal-status-banner.cjs.map +1 -0
- package/dist/components/features/chat/goal-status-banner.d.ts +11 -0
- package/dist/components/features/chat/goal-status-banner.js +12 -0
- package/dist/components/features/chat/goal-status-banner.js.map +1 -0
- package/dist/components/features/chat/goal-status-content.cjs +2 -0
- package/dist/components/features/chat/goal-status-content.cjs.map +1 -0
- package/dist/components/features/chat/goal-status-content.d.ts +21 -0
- package/dist/components/features/chat/goal-status-content.js +98 -0
- package/dist/components/features/chat/goal-status-content.js.map +1 -0
- package/dist/components/features/chat/interactive-chat-box.cjs +1 -1
- package/dist/components/features/chat/interactive-chat-box.cjs.map +1 -1
- package/dist/components/features/chat/interactive-chat-box.js +20 -19
- package/dist/components/features/chat/interactive-chat-box.js.map +1 -1
- package/dist/components/features/chat/tool-visualizers/primitives/code-block.cjs +1 -1
- package/dist/components/features/chat/tool-visualizers/primitives/code-block.cjs.map +1 -1
- package/dist/components/features/chat/tool-visualizers/primitives/code-block.d.ts +10 -3
- package/dist/components/features/chat/tool-visualizers/primitives/code-block.js +29 -16
- package/dist/components/features/chat/tool-visualizers/primitives/code-block.js.map +1 -1
- package/dist/components/features/chat/tool-visualizers/primitives/output-pane.cjs +1 -1
- package/dist/components/features/chat/tool-visualizers/primitives/output-pane.cjs.map +1 -1
- package/dist/components/features/chat/tool-visualizers/primitives/output-pane.d.ts +2 -2
- package/dist/components/features/chat/tool-visualizers/primitives/output-pane.js +16 -16
- package/dist/components/features/chat/tool-visualizers/primitives/output-pane.js.map +1 -1
- package/dist/components/features/chat/user-message-body.cjs +1 -1
- package/dist/components/features/chat/user-message-body.cjs.map +1 -1
- package/dist/components/features/chat/user-message-body.js +20 -20
- package/dist/components/features/chat/user-message-body.js.map +1 -1
- package/dist/components/features/command-menu/command-menu-items.d.ts +32 -0
- package/dist/components/features/command-menu/command-menu-trigger.cjs +2 -0
- package/dist/components/features/command-menu/command-menu-trigger.cjs.map +1 -0
- package/dist/components/features/command-menu/command-menu-trigger.d.ts +5 -0
- package/dist/components/features/command-menu/command-menu-trigger.js +53 -0
- package/dist/components/features/command-menu/command-menu-trigger.js.map +1 -0
- package/dist/components/features/command-menu/command-menu.d.ts +2 -0
- package/dist/components/features/command-menu/index.d.ts +2 -0
- package/dist/components/features/controls/tools-context-menu.cjs +1 -1
- package/dist/components/features/controls/tools-context-menu.cjs.map +1 -1
- package/dist/components/features/controls/tools-context-menu.d.ts +3 -1
- package/dist/components/features/controls/tools-context-menu.js +94 -77
- package/dist/components/features/controls/tools-context-menu.js.map +1 -1
- package/dist/components/features/conversation-panel/cloud-new-conversation-menu.cjs +1 -1
- package/dist/components/features/conversation-panel/cloud-new-conversation-menu.cjs.map +1 -1
- package/dist/components/features/conversation-panel/cloud-new-conversation-menu.js +8 -5
- package/dist/components/features/conversation-panel/cloud-new-conversation-menu.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.cjs.map +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-footer.js.map +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.js +2 -1
- package/dist/components/features/conversation-panel/conversation-panel.js.map +1 -1
- package/dist/components/features/conversation-panel/local-new-conversation-menu.cjs +1 -1
- package/dist/components/features/conversation-panel/local-new-conversation-menu.cjs.map +1 -1
- package/dist/components/features/conversation-panel/local-new-conversation-menu.js +4 -1
- package/dist/components/features/conversation-panel/local-new-conversation-menu.js.map +1 -1
- package/dist/components/features/conversation-panel/plugins-modal.cjs +2 -0
- package/dist/components/features/conversation-panel/plugins-modal.cjs.map +1 -0
- package/dist/components/features/conversation-panel/plugins-modal.d.ts +12 -0
- package/dist/components/features/conversation-panel/plugins-modal.js +62 -0
- package/dist/components/features/conversation-panel/plugins-modal.js.map +1 -0
- package/dist/components/features/home/git-repo-dropdown/git-repo-dropdown.cjs +1 -1
- package/dist/components/features/home/git-repo-dropdown/git-repo-dropdown.cjs.map +1 -1
- package/dist/components/features/home/git-repo-dropdown/git-repo-dropdown.js +4 -4
- package/dist/components/features/mcp-logo-badge.cjs +1 -1
- package/dist/components/features/mcp-logo-badge.cjs.map +1 -1
- package/dist/components/features/mcp-logo-badge.js +17 -15
- package/dist/components/features/mcp-logo-badge.js.map +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.js +102 -59
- 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.js +284 -169
- package/dist/components/features/mcp-page/install-server-modal.js.map +1 -1
- package/dist/components/features/mcp-page/installed-server-card.cjs +1 -1
- package/dist/components/features/mcp-page/installed-server-card.cjs.map +1 -1
- package/dist/components/features/mcp-page/installed-server-card.js +16 -18
- package/dist/components/features/mcp-page/installed-server-card.js.map +1 -1
- package/dist/components/features/onboarding/onboarding-host.d.ts +3 -13
- package/dist/components/features/plugins/add-plugin-modal.d.ts +6 -0
- package/dist/components/features/plugins/build-plugins-view-model.d.ts +39 -0
- package/dist/components/features/plugins/plugin-card.d.ts +13 -0
- package/dist/components/features/plugins/plugin-detail-modal.d.ts +13 -0
- package/dist/components/features/plugins/plugin-picker-card.d.ts +10 -0
- package/dist/components/features/plugins/plugin-picker-modal.d.ts +9 -0
- package/dist/components/features/plugins/plugin-picker-trigger.d.ts +9 -0
- package/dist/components/features/plugins/plugin-picker.d.ts +18 -0
- package/dist/components/features/plugins/plugin-spec-identity.d.ts +28 -0
- package/dist/components/features/plugins/plugins-toolbar.d.ts +9 -0
- package/dist/components/features/settings/agent-profiles/agent-profile-actions-menu.d.ts +16 -0
- package/dist/components/features/settings/agent-profiles/agent-profile-row.d.ts +13 -0
- package/dist/components/features/settings/agent-profiles/agent-profiles-body.d.ts +15 -0
- package/dist/components/features/settings/agent-profiles/agent-profiles-local-view.d.ts +7 -0
- package/dist/components/features/settings/agent-profiles/agent-profiles-manager.d.ts +7 -0
- package/dist/components/features/settings/agent-profiles/delete-agent-profile-modal.d.ts +7 -0
- package/dist/components/features/settings/agent-profiles/index.d.ts +6 -0
- package/dist/components/features/settings/agent-profiles/merge-agent-profile-save-input.d.ts +18 -0
- package/dist/components/features/settings/llm-profiles/llm-profiles-manager.cjs +1 -1
- package/dist/components/features/settings/llm-profiles/llm-profiles-manager.js +1 -0
- package/dist/components/features/settings/llm-profiles/llm-settings-local-view.cjs +1 -1
- package/dist/components/features/settings/llm-profiles/llm-settings-local-view.js +1 -1
- package/dist/components/features/settings/llm-profiles/profile-row.d.ts +3 -1
- package/dist/components/features/settings/llm-profiles/profiles-body.d.ts +3 -1
- package/dist/components/features/settings/llm-settings/openai-subscription-auth-card.cjs +1 -1
- package/dist/components/features/settings/llm-settings/openai-subscription-auth-card.cjs.map +1 -1
- package/dist/components/features/settings/llm-settings/openai-subscription-auth-card.js +3 -2
- package/dist/components/features/settings/llm-settings/openai-subscription-auth-card.js.map +1 -1
- package/dist/components/features/settings/mcp-settings/mcp-server-form.cjs +7 -7
- package/dist/components/features/settings/mcp-settings/mcp-server-form.cjs.map +1 -1
- package/dist/components/features/settings/mcp-settings/mcp-server-form.js +279 -130
- 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 -12
- package/dist/components/features/settings/mcp-settings/mcp-server-list.d.ts +1 -11
- package/dist/components/features/settings/settings-dropdown-input.cjs +1 -1
- package/dist/components/features/settings/settings-dropdown-input.js +6 -6
- package/dist/components/features/sidebar/sidebar-rail-body.cjs +1 -1
- package/dist/components/features/sidebar/sidebar-rail-body.cjs.map +1 -1
- package/dist/components/features/sidebar/sidebar-rail-body.d.ts +1 -2
- package/dist/components/features/sidebar/sidebar-rail-body.js +81 -82
- package/dist/components/features/sidebar/sidebar-rail-body.js.map +1 -1
- package/dist/components/features/sidebar/sidebar.cjs +1 -1
- package/dist/components/features/sidebar/sidebar.cjs.map +1 -1
- package/dist/components/features/sidebar/sidebar.js +45 -46
- package/dist/components/features/sidebar/sidebar.js.map +1 -1
- package/dist/components/features/skills/extensions-navigation.cjs +1 -1
- package/dist/components/features/skills/extensions-navigation.cjs.map +1 -1
- package/dist/components/features/skills/extensions-navigation.js +1 -2
- package/dist/components/features/skills/extensions-navigation.js.map +1 -1
- package/dist/components/shared/modals/modal-backdrop.cjs +1 -1
- package/dist/components/shared/modals/modal-backdrop.cjs.map +1 -1
- package/dist/components/shared/modals/modal-backdrop.d.ts +5 -1
- package/dist/components/shared/modals/modal-backdrop.js +3 -3
- package/dist/components/shared/modals/modal-backdrop.js.map +1 -1
- package/dist/components/shared/modals/settings/model-selector.cjs +1 -1
- package/dist/components/shared/modals/settings/model-selector.js +16 -16
- package/dist/config/defaults.cjs +1 -1
- package/dist/config/defaults.cjs.map +1 -1
- package/dist/config/defaults.js +7 -3
- package/dist/config/defaults.js.map +1 -1
- package/dist/contexts/conversation-websocket-context.cjs +3 -3
- package/dist/contexts/conversation-websocket-context.cjs.map +1 -1
- package/dist/contexts/conversation-websocket-context.js +200 -197
- package/dist/contexts/conversation-websocket-context.js.map +1 -1
- package/dist/hooks/chat/use-goal-interceptor.cjs +2 -0
- package/dist/hooks/chat/use-goal-interceptor.cjs.map +1 -0
- package/dist/hooks/chat/use-goal-interceptor.d.ts +8 -0
- package/dist/hooks/chat/use-goal-interceptor.js +37 -0
- package/dist/hooks/chat/use-goal-interceptor.js.map +1 -0
- package/dist/hooks/chat/use-grip-resize.cjs +1 -1
- package/dist/hooks/chat/use-grip-resize.cjs.map +1 -1
- package/dist/hooks/chat/use-grip-resize.js +17 -16
- package/dist/hooks/chat/use-grip-resize.js.map +1 -1
- package/dist/hooks/chat/use-model-interceptor.cjs +1 -1
- package/dist/hooks/chat/use-model-interceptor.cjs.map +1 -1
- package/dist/hooks/chat/use-model-interceptor.d.ts +3 -3
- package/dist/hooks/chat/use-model-interceptor.js +8 -9
- package/dist/hooks/chat/use-model-interceptor.js.map +1 -1
- package/dist/hooks/chat/use-slash-command.cjs +1 -1
- package/dist/hooks/chat/use-slash-command.cjs.map +1 -1
- package/dist/hooks/chat/use-slash-command.js +4 -4
- package/dist/hooks/chat/use-slash-command.js.map +1 -1
- package/dist/hooks/mutation/conversation-mutation-utils.cjs +1 -1
- package/dist/hooks/mutation/conversation-mutation-utils.cjs.map +1 -1
- package/dist/hooks/mutation/conversation-mutation-utils.d.ts +17 -0
- package/dist/hooks/mutation/conversation-mutation-utils.js +23 -4
- package/dist/hooks/mutation/conversation-mutation-utils.js.map +1 -1
- package/dist/hooks/mutation/use-activate-agent-profile.cjs +2 -0
- package/dist/hooks/mutation/use-activate-agent-profile.cjs.map +1 -0
- package/dist/hooks/mutation/use-activate-agent-profile.d.ts +23 -0
- package/dist/hooks/mutation/use-activate-agent-profile.js +34 -0
- package/dist/hooks/mutation/use-activate-agent-profile.js.map +1 -0
- package/dist/hooks/mutation/use-activate-llm-profile.cjs +1 -1
- package/dist/hooks/mutation/use-activate-llm-profile.js +1 -1
- 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.d.ts +1 -12
- package/dist/hooks/mutation/use-add-mcp-server.js +10 -34
- package/dist/hooks/mutation/use-add-mcp-server.js.map +1 -1
- package/dist/hooks/mutation/use-apply-onboarding-agent-profile.d.ts +20 -0
- package/dist/hooks/mutation/use-create-conversation.cjs +1 -1
- package/dist/hooks/mutation/use-create-conversation.cjs.map +1 -1
- package/dist/hooks/mutation/use-create-conversation.d.ts +2 -0
- package/dist/hooks/mutation/use-create-conversation.js +94 -25
- package/dist/hooks/mutation/use-create-conversation.js.map +1 -1
- package/dist/hooks/mutation/use-delete-agent-profile.d.ts +1 -0
- package/dist/hooks/mutation/use-delete-llm-profile.cjs +1 -1
- package/dist/hooks/mutation/use-delete-llm-profile.js +1 -1
- package/dist/hooks/mutation/use-delete-mcp-server.cjs +1 -1
- package/dist/hooks/mutation/use-delete-mcp-server.js +4 -4
- package/dist/hooks/mutation/use-fork-conversation.cjs +2 -0
- package/dist/hooks/mutation/use-fork-conversation.cjs.map +1 -0
- package/dist/hooks/mutation/use-fork-conversation.d.ts +24 -0
- package/dist/hooks/mutation/use-fork-conversation.js +29 -0
- package/dist/hooks/mutation/use-fork-conversation.js.map +1 -0
- package/dist/hooks/mutation/use-install-plugin.d.ts +7 -0
- package/dist/hooks/mutation/use-new-conversation-command.cjs +1 -1
- package/dist/hooks/mutation/use-new-conversation-command.cjs.map +1 -1
- package/dist/hooks/mutation/use-new-conversation-command.d.ts +1 -0
- package/dist/hooks/mutation/use-new-conversation-command.js +20 -10
- package/dist/hooks/mutation/use-new-conversation-command.js.map +1 -1
- package/dist/hooks/mutation/use-rename-agent-profile.d.ts +6 -0
- package/dist/hooks/mutation/use-rename-llm-profile.cjs +1 -1
- package/dist/hooks/mutation/use-rename-llm-profile.js +1 -1
- package/dist/hooks/mutation/use-save-agent-profile.d.ts +5 -0
- package/dist/hooks/mutation/use-save-llm-profile.cjs +1 -1
- package/dist/hooks/mutation/use-save-llm-profile.js +1 -1
- package/dist/hooks/mutation/use-switch-acp-model.cjs.map +1 -1
- package/dist/hooks/mutation/use-switch-acp-model.js.map +1 -1
- package/dist/hooks/mutation/use-switch-llm-profile-and-log.cjs +1 -1
- package/dist/hooks/mutation/use-switch-llm-profile-and-log.cjs.map +1 -1
- package/dist/hooks/mutation/use-switch-llm-profile-and-log.d.ts +3 -4
- package/dist/hooks/mutation/use-switch-llm-profile-and-log.js +10 -35
- package/dist/hooks/mutation/use-switch-llm-profile-and-log.js.map +1 -1
- package/dist/hooks/mutation/use-switch-llm-profile.cjs +1 -1
- package/dist/hooks/mutation/use-switch-llm-profile.cjs.map +1 -1
- package/dist/hooks/mutation/use-switch-llm-profile.d.ts +20 -5
- package/dist/hooks/mutation/use-switch-llm-profile.js +38 -14
- package/dist/hooks/mutation/use-switch-llm-profile.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.js +11 -37
- package/dist/hooks/mutation/use-update-mcp-server.js.map +1 -1
- package/dist/hooks/query/query-keys.cjs +1 -1
- package/dist/hooks/query/query-keys.cjs.map +1 -1
- package/dist/hooks/query/query-keys.d.ts +21 -0
- package/dist/hooks/query/query-keys.js +7 -3
- package/dist/hooks/query/query-keys.js.map +1 -1
- package/dist/hooks/query/use-active-conversation.cjs +1 -1
- package/dist/hooks/query/use-active-conversation.cjs.map +1 -1
- package/dist/hooks/query/use-active-conversation.js +17 -16
- package/dist/hooks/query/use-active-conversation.js.map +1 -1
- package/dist/hooks/query/use-agent-profiles.cjs +2 -0
- package/dist/hooks/query/use-agent-profiles.cjs.map +1 -0
- package/dist/hooks/query/use-agent-profiles.d.ts +13 -0
- package/dist/hooks/query/use-agent-profiles.js +24 -0
- package/dist/hooks/query/use-agent-profiles.js.map +1 -0
- package/dist/hooks/query/use-backends-health.cjs +1 -1
- package/dist/hooks/query/use-backends-health.cjs.map +1 -1
- package/dist/hooks/query/use-backends-health.js +18 -3
- package/dist/hooks/query/use-backends-health.js.map +1 -1
- package/dist/hooks/query/use-conversation-history.cjs +1 -1
- package/dist/hooks/query/use-conversation-history.cjs.map +1 -1
- package/dist/hooks/query/use-conversation-history.js +4 -2
- package/dist/hooks/query/use-conversation-history.js.map +1 -1
- package/dist/hooks/query/use-local-workspaces.cjs +1 -1
- package/dist/hooks/query/use-local-workspaces.cjs.map +1 -1
- package/dist/hooks/query/use-local-workspaces.js +1 -0
- package/dist/hooks/query/use-local-workspaces.js.map +1 -1
- package/dist/hooks/query/use-plugins-marketplace.d.ts +7 -0
- package/dist/hooks/query/use-resolved-workspaces.cjs +1 -1
- package/dist/hooks/query/use-resolved-workspaces.cjs.map +1 -1
- package/dist/hooks/query/use-resolved-workspaces.js +7 -6
- package/dist/hooks/query/use-resolved-workspaces.js.map +1 -1
- package/dist/hooks/query/use-search-subdirs.cjs +1 -1
- package/dist/hooks/query/use-search-subdirs.cjs.map +1 -1
- package/dist/hooks/query/use-search-subdirs.js +1 -0
- package/dist/hooks/query/use-search-subdirs.js.map +1 -1
- package/dist/hooks/query/use-settings.cjs +1 -1
- package/dist/hooks/query/use-settings.cjs.map +1 -1
- package/dist/hooks/query/use-settings.js +11 -11
- package/dist/hooks/query/use-settings.js.map +1 -1
- package/dist/hooks/query/use-verified-models.cjs +1 -1
- package/dist/hooks/query/use-verified-models.cjs.map +1 -1
- package/dist/hooks/query/use-verified-models.js +1 -0
- package/dist/hooks/query/use-verified-models.js.map +1 -1
- package/dist/hooks/use-acp-model-context.cjs +1 -1
- package/dist/hooks/use-acp-model-context.cjs.map +1 -1
- package/dist/hooks/use-acp-model-context.d.ts +1 -1
- package/dist/hooks/use-acp-model-context.js +9 -8
- package/dist/hooks/use-acp-model-context.js.map +1 -1
- package/dist/hooks/use-active-agent-profile.cjs +2 -0
- package/dist/hooks/use-active-agent-profile.cjs.map +1 -0
- package/dist/hooks/use-active-agent-profile.d.ts +20 -0
- package/dist/hooks/use-active-agent-profile.js +17 -0
- package/dist/hooks/use-active-agent-profile.js.map +1 -0
- package/dist/hooks/use-auto-resize.cjs +1 -1
- package/dist/hooks/use-auto-resize.cjs.map +1 -1
- package/dist/hooks/use-auto-resize.d.ts +2 -0
- package/dist/hooks/use-auto-resize.js +49 -45
- package/dist/hooks/use-auto-resize.js.map +1 -1
- package/dist/hooks/use-can-manage-org-profiles.cjs +1 -0
- package/dist/hooks/use-can-manage-org-profiles.d.ts +18 -0
- package/dist/hooks/use-can-manage-org-profiles.js +2 -0
- package/dist/hooks/use-chat-input-llm-profile-state.cjs +2 -0
- package/dist/hooks/use-chat-input-llm-profile-state.cjs.map +1 -0
- package/dist/hooks/use-chat-input-llm-profile-state.d.ts +23 -0
- package/dist/hooks/use-chat-input-llm-profile-state.js +30 -0
- package/dist/hooks/use-chat-input-llm-profile-state.js.map +1 -0
- package/dist/hooks/use-chat-input-model-state.cjs.map +1 -1
- package/dist/hooks/use-chat-input-model-state.d.ts +1 -1
- package/dist/hooks/use-chat-input-model-state.js.map +1 -1
- package/dist/hooks/use-chat-input-profile-state.cjs +2 -0
- package/dist/hooks/use-chat-input-profile-state.cjs.map +1 -0
- package/dist/hooks/use-chat-input-profile-state.d.ts +20 -0
- package/dist/hooks/use-chat-input-profile-state.js +22 -0
- package/dist/hooks/use-chat-input-profile-state.js.map +1 -0
- package/dist/hooks/use-conversation-name-context-menu.cjs +1 -1
- package/dist/hooks/use-conversation-name-context-menu.cjs.map +1 -1
- package/dist/hooks/use-conversation-name-context-menu.d.ts +4 -0
- package/dist/hooks/use-conversation-name-context-menu.js +44 -37
- package/dist/hooks/use-conversation-name-context-menu.js.map +1 -1
- package/dist/hooks/use-conversation-plugins.cjs +2 -0
- package/dist/hooks/use-conversation-plugins.cjs.map +1 -0
- package/dist/hooks/use-conversation-plugins.d.ts +9 -0
- package/dist/hooks/use-conversation-plugins.js +12 -0
- package/dist/hooks/use-conversation-plugins.js.map +1 -0
- package/dist/hooks/use-handle-plan-click.cjs +1 -1
- package/dist/hooks/use-handle-plan-click.cjs.map +1 -1
- package/dist/hooks/use-handle-plan-click.js +2 -1
- package/dist/hooks/use-handle-plan-click.js.map +1 -1
- package/dist/hooks/use-llm-configured.cjs +1 -1
- package/dist/hooks/use-llm-configured.cjs.map +1 -1
- package/dist/hooks/use-llm-configured.js +17 -16
- package/dist/hooks/use-llm-configured.js.map +1 -1
- package/dist/hooks/use-tracking.cjs +1 -1
- package/dist/hooks/use-tracking.cjs.map +1 -1
- package/dist/hooks/use-tracking.d.ts +51 -1
- package/dist/hooks/use-tracking.js +61 -2
- 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 +138 -1
- package/dist/i18n/declaration.js +1 -1
- package/dist/i18n/declaration.js.map +1 -1
- package/dist/i18n/translation.cjs +18 -3
- package/dist/i18n/translation.cjs.map +1 -1
- package/dist/i18n/translation.js +2329 -0
- package/dist/i18n/translation.js.map +1 -1
- package/dist/icons/slack.cjs +2 -0
- package/dist/icons/slack.cjs.map +1 -0
- package/dist/icons/slack.js +19 -0
- package/dist/icons/slack.js.map +1 -0
- package/dist/icons/u-puzzle-piece.cjs +2 -0
- package/dist/icons/u-puzzle-piece.cjs.map +1 -0
- package/dist/icons/u-puzzle-piece.js +19 -0
- package/dist/icons/u-puzzle-piece.js.map +1 -0
- package/dist/icons/x-circle-solid.cjs +2 -0
- package/dist/icons/x-circle-solid.cjs.map +1 -0
- package/dist/icons/x-circle-solid.js +13 -0
- package/dist/icons/x-circle-solid.js.map +1 -0
- package/dist/locales/ar/openhands.json +138 -1
- package/dist/locales/ca/openhands.json +138 -1
- package/dist/locales/de/openhands.json +138 -1
- package/dist/locales/en/openhands.json +138 -1
- package/dist/locales/es/openhands.json +138 -1
- package/dist/locales/fr/openhands.json +138 -1
- package/dist/locales/it/openhands.json +138 -1
- package/dist/locales/ja/openhands.json +138 -1
- package/dist/locales/ko-KR/openhands.json +138 -1
- package/dist/locales/no/openhands.json +138 -1
- package/dist/locales/pt/openhands.json +138 -1
- package/dist/locales/tr/openhands.json +138 -1
- package/dist/locales/uk/openhands.json +138 -1
- package/dist/locales/zh-CN/openhands.json +138 -1
- package/dist/locales/zh-TW/openhands.json +138 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/airtable.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/airtable.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/airtable.js +0 -20
- package/dist/node_modules/@openhands/extensions/integrations/catalog/airtable.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/asana.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/asana.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/asana.js +1 -6
- package/dist/node_modules/@openhands/extensions/integrations/catalog/asana.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/atlassian.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/atlassian.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/atlassian.js +70 -3
- package/dist/node_modules/@openhands/extensions/integrations/catalog/atlassian.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/bitbucket.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/bitbucket.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/bitbucket.js +1 -6
- package/dist/node_modules/@openhands/extensions/integrations/catalog/bitbucket.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/box.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/box.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/box.js +1 -6
- package/dist/node_modules/@openhands/extensions/integrations/catalog/box.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/canva.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/canva.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/canva.js +3 -7
- package/dist/node_modules/@openhands/extensions/integrations/catalog/canva.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/confluence.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/confluence.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/confluence.js +1 -6
- package/dist/node_modules/@openhands/extensions/integrations/catalog/confluence.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/datadog.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/datadog.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/datadog.js +27 -2
- package/dist/node_modules/@openhands/extensions/integrations/catalog/datadog.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/discord.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/discord.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/discord.js +1 -6
- package/dist/node_modules/@openhands/extensions/integrations/catalog/discord.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/figma.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/figma.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/figma.js +20 -26
- package/dist/node_modules/@openhands/extensions/integrations/catalog/figma.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/github.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/github.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/github.js +0 -9
- package/dist/node_modules/@openhands/extensions/integrations/catalog/github.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/gmail.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/gmail.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/gmail.js +1 -6
- package/dist/node_modules/@openhands/extensions/integrations/catalog/gmail.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/google-calendar.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/google-calendar.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/google-calendar.js +1 -6
- package/dist/node_modules/@openhands/extensions/integrations/catalog/google-calendar.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/google-docs.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/google-docs.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/google-docs.js +1 -6
- package/dist/node_modules/@openhands/extensions/integrations/catalog/google-docs.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/google-drive.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/google-drive.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/google-drive.js +1 -6
- package/dist/node_modules/@openhands/extensions/integrations/catalog/google-drive.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/google-sheets.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/google-sheets.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/google-sheets.js +1 -6
- package/dist/node_modules/@openhands/extensions/integrations/catalog/google-sheets.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/intercom.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/intercom.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/intercom.js +1 -6
- package/dist/node_modules/@openhands/extensions/integrations/catalog/intercom.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/jira.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/jira.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/jira.js +1 -6
- package/dist/node_modules/@openhands/extensions/integrations/catalog/jira.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/linear.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/linear.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/linear.js +13 -13
- package/dist/node_modules/@openhands/extensions/integrations/catalog/linear.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-outlook.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-outlook.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-outlook.js +1 -6
- package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-outlook.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-teams.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-teams.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-teams.js +1 -6
- package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-teams.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/miro.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/miro.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/miro.js +14 -10
- package/dist/node_modules/@openhands/extensions/integrations/catalog/miro.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/monday.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/monday.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/monday.js +13 -10
- package/dist/node_modules/@openhands/extensions/integrations/catalog/monday.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/netlify.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/netlify.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/netlify.js +1 -6
- package/dist/node_modules/@openhands/extensions/integrations/catalog/netlify.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/notion.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/notion.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/notion.js +1 -8
- package/dist/node_modules/@openhands/extensions/integrations/catalog/notion.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/okta.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/okta.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/okta.js +1 -6
- package/dist/node_modules/@openhands/extensions/integrations/catalog/okta.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/onedrive.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/onedrive.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/onedrive.js +1 -6
- package/dist/node_modules/@openhands/extensions/integrations/catalog/onedrive.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/posthog.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/posthog.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/posthog.js +20 -18
- package/dist/node_modules/@openhands/extensions/integrations/catalog/posthog.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/quickbooks.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/quickbooks.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/quickbooks.js +66 -21
- package/dist/node_modules/@openhands/extensions/integrations/catalog/quickbooks.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/salesforce.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/salesforce.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/salesforce.js +17 -11
- package/dist/node_modules/@openhands/extensions/integrations/catalog/salesforce.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/sentry.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/sentry.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/sentry.js +12 -17
- package/dist/node_modules/@openhands/extensions/integrations/catalog/sentry.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/sharepoint.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/sharepoint.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/sharepoint.js +1 -6
- package/dist/node_modules/@openhands/extensions/integrations/catalog/sharepoint.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/slack.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/slack.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/slack.js +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/slack.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/stripe.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/stripe.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/stripe.js +14 -19
- package/dist/node_modules/@openhands/extensions/integrations/catalog/stripe.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/supabase.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/supabase.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/supabase.js +15 -20
- package/dist/node_modules/@openhands/extensions/integrations/catalog/supabase.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/superhuman-mail.cjs +2 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/superhuman-mail.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/superhuman-mail.js +33 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/superhuman-mail.js.map +1 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/trello.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/trello.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/trello.js +10 -8
- package/dist/node_modules/@openhands/extensions/integrations/catalog/trello.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/vercel.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/vercel.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/vercel.js +1 -6
- package/dist/node_modules/@openhands/extensions/integrations/catalog/vercel.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/xero.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/xero.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/xero.js +1 -6
- package/dist/node_modules/@openhands/extensions/integrations/catalog/xero.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/zoom.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/zoom.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/zoom.js +1 -6
- package/dist/node_modules/@openhands/extensions/integrations/catalog/zoom.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog-index.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog-index.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog-index.js +71 -89
- package/dist/node_modules/@openhands/extensions/integrations/catalog-index.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/index.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/index.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/index.js +4 -4
- package/dist/node_modules/@openhands/extensions/integrations/index.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/skills/index.cjs +502 -43
- package/dist/node_modules/@openhands/extensions/skills/index.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/skills/index.js +58 -33
- package/dist/node_modules/@openhands/extensions/skills/index.js.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/agent-profiles-client.cjs +2 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/agent-profiles-client.cjs.map +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/agent-profiles-client.js +40 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/agent-profiles-client.js.map +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/agent-server-compatibility.cjs +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/agent-server-compatibility.cjs.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/agent-server-compatibility.js +4 -4
- package/dist/node_modules/@openhands/typescript-client/dist/client/agent-server-compatibility.js.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/bash-client.cjs +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/bash-client.cjs.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/bash-client.js +3 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/bash-client.js.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/conversation-client.cjs +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/conversation-client.cjs.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/conversation-client.js +3 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/conversation-client.js.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/desktop-client.cjs +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/desktop-client.js +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/hooks-client.cjs +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/hooks-client.js +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/http-client.cjs +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/http-client.cjs.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/http-client.js +84 -27
- package/dist/node_modules/@openhands/typescript-client/dist/client/http-client.js.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/mcp-client.cjs +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/mcp-client.cjs.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/mcp-client.js +9 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/mcp-client.js.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/meta-profiles-client.cjs +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/meta-profiles-client.js +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/plugins-client.cjs +2 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/plugins-client.cjs.map +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/plugins-client.js +42 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/plugins-client.js.map +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/shared-client.cjs +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/shared-client.js +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/skills-client.cjs +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/skills-client.cjs.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/skills-client.js +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/skills-client.js.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/sub-agents-client.cjs +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/sub-agents-client.js +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/tool-client.cjs +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/tool-client.js +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/clients.cjs +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/clients.js +20 -0
- package/dist/node_modules/@openhands/typescript-client/dist/conversation/conversation-manager.cjs +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/conversation/conversation-manager.js +18 -0
- package/dist/node_modules/@openhands/typescript-client/dist/conversation/conversation.cjs +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/conversation/conversation.js +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/conversation/remote-conversation.cjs +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/conversation/remote-conversation.js +2 -0
- package/dist/node_modules/@openhands/typescript-client/dist/conversation/remote-state.cjs +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/conversation/remote-state.cjs.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/conversation/remote-state.js +15 -17
- package/dist/node_modules/@openhands/typescript-client/dist/conversation/remote-state.js.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/index.cjs +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/index.js +3 -0
- package/dist/node_modules/@openhands/typescript-client/dist/workspace/workspace.cjs +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/workspace/workspace.js +1 -0
- package/dist/package.cjs +1 -1
- package/dist/package.cjs.map +1 -1
- package/dist/package.js +7 -4
- package/dist/package.js.map +1 -1
- package/dist/routes/agent-settings.d.ts +106 -0
- package/dist/routes/files-tab.cjs +1 -1
- package/dist/routes/files-tab.js +23 -23
- package/dist/routes/llm-settings.cjs +1 -1
- package/dist/routes/llm-settings.cjs.map +1 -1
- package/dist/routes/llm-settings.d.ts +6 -4
- package/dist/routes/llm-settings.js +0 -1
- package/dist/routes/llm-settings.js.map +1 -1
- package/dist/routes/mcp.cjs.map +1 -1
- package/dist/routes/mcp.js.map +1 -1
- package/dist/services/settings.cjs +1 -1
- package/dist/services/settings.cjs.map +1 -1
- package/dist/services/settings.js +2 -6
- package/dist/services/settings.js.map +1 -1
- package/dist/stores/command-menu-store.cjs +2 -0
- package/dist/stores/command-menu-store.cjs.map +1 -0
- package/dist/stores/command-menu-store.d.ts +8 -0
- package/dist/stores/command-menu-store.js +12 -0
- package/dist/stores/command-menu-store.js.map +1 -0
- package/dist/stores/conversation-panel-preferences-store.cjs +1 -1
- package/dist/stores/conversation-panel-preferences-store.cjs.map +1 -1
- package/dist/stores/conversation-panel-preferences-store.js +1 -1
- package/dist/stores/conversation-panel-preferences-store.js.map +1 -1
- package/dist/stores/conversation-store.cjs +1 -1
- package/dist/stores/conversation-store.cjs.map +1 -1
- package/dist/stores/conversation-store.d.ts +1 -0
- package/dist/stores/conversation-store.js +1 -0
- package/dist/stores/conversation-store.js.map +1 -1
- package/dist/stores/goal-store.cjs +2 -0
- package/dist/stores/goal-store.cjs.map +1 -0
- package/dist/stores/goal-store.d.ts +28 -0
- package/dist/stores/goal-store.js +14 -0
- package/dist/stores/goal-store.js.map +1 -0
- package/dist/themes/color-themes.cjs +3 -3
- package/dist/themes/color-themes.cjs.map +1 -1
- package/dist/themes/color-themes.d.ts +13 -2
- package/dist/themes/color-themes.js +2 -2
- package/dist/themes/color-themes.js.map +1 -1
- package/dist/types/agent-server/core/events/conversation-state-event.d.ts +39 -3
- package/dist/types/agent-server/type-guards.cjs +1 -1
- package/dist/types/agent-server/type-guards.cjs.map +1 -1
- package/dist/types/agent-server/type-guards.d.ts +2 -1
- package/dist/types/agent-server/type-guards.js +3 -3
- package/dist/types/agent-server/type-guards.js.map +1 -1
- package/dist/types/mcp-auth.cjs +2 -0
- package/dist/types/mcp-auth.cjs.map +1 -0
- package/dist/types/mcp-auth.d.ts +43 -0
- package/dist/types/mcp-auth.js +13 -0
- package/dist/types/mcp-auth.js.map +1 -0
- package/dist/types/mcp-server.d.ts +22 -1
- package/dist/types/settings.d.ts +6 -4
- package/dist/ui/context-menu.d.ts +1 -1
- package/dist/utils/acp-command.d.ts +64 -0
- package/dist/utils/automation-debug-prompt.d.ts +18 -0
- package/dist/utils/constants.cjs +1 -1
- package/dist/utils/constants.cjs.map +1 -1
- package/dist/utils/constants.d.ts +2 -0
- package/dist/utils/constants.js +12 -3
- package/dist/utils/constants.js.map +1 -1
- package/dist/utils/dropdown-classes.cjs +1 -1
- package/dist/utils/dropdown-classes.cjs.map +1 -1
- package/dist/utils/dropdown-classes.js +4 -2
- package/dist/utils/dropdown-classes.js.map +1 -1
- package/dist/utils/form-control-classes.cjs +1 -1
- package/dist/utils/form-control-classes.js +1 -1
- package/dist/utils/handle-event-for-ui.cjs +1 -1
- package/dist/utils/handle-event-for-ui.cjs.map +1 -1
- package/dist/utils/handle-event-for-ui.js +72 -37
- package/dist/utils/handle-event-for-ui.js.map +1 -1
- package/dist/utils/mcp-config.cjs +1 -1
- package/dist/utils/mcp-config.cjs.map +1 -1
- package/dist/utils/mcp-config.d.ts +15 -9
- package/dist/utils/mcp-config.js +124 -53
- package/dist/utils/mcp-config.js.map +1 -1
- package/dist/utils/mcp-installed-server-display.cjs +2 -0
- package/dist/utils/mcp-installed-server-display.cjs.map +1 -0
- package/dist/utils/mcp-installed-server-display.d.ts +8 -0
- package/dist/utils/mcp-installed-server-display.js +12 -0
- package/dist/utils/mcp-installed-server-display.js.map +1 -0
- 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.js +4 -4
- package/dist/utils/mcp-installed-servers.js.map +1 -1
- package/dist/utils/mcp-marketplace-utils.cjs +1 -1
- package/dist/utils/mcp-marketplace-utils.cjs.map +1 -1
- package/dist/utils/mcp-marketplace-utils.d.ts +2 -0
- package/dist/utils/mcp-marketplace-utils.js +31 -16
- package/dist/utils/mcp-marketplace-utils.js.map +1 -1
- package/dist/utils/mcp-server-name.cjs +2 -0
- package/dist/utils/mcp-server-name.cjs.map +1 -0
- package/dist/utils/mcp-server-name.d.ts +3 -0
- package/dist/utils/mcp-server-name.js +12 -0
- package/dist/utils/mcp-server-name.js.map +1 -0
- package/dist/utils/plugin-display.cjs +2 -0
- package/dist/utils/plugin-display.cjs.map +1 -0
- package/dist/utils/plugin-display.d.ts +20 -0
- package/dist/utils/plugin-display.js +29 -0
- package/dist/utils/plugin-display.js.map +1 -0
- package/dist/utils/settings-utils.cjs.map +1 -1
- package/dist/utils/settings-utils.js.map +1 -1
- package/dist/utils/workspaces-compatibility.cjs +1 -1
- package/dist/utils/workspaces-compatibility.cjs.map +1 -1
- package/dist/utils/workspaces-compatibility.js +1 -0
- package/dist/utils/workspaces-compatibility.js.map +1 -1
- package/package.json +7 -4
- package/scripts/check-sdk-version-sync.mjs +6 -6
- package/scripts/check-translation-completeness.cjs +6 -0
- package/scripts/dev-safe.mjs +14 -3
- package/scripts/dev-with-automation.mjs +4 -0
- package/scripts/gen-acp-docker-env.mjs +107 -0
- package/scripts/ingress.mjs +66 -226
- package/scripts/proxy-utils.mjs +171 -0
- package/scripts/static-server.mjs +127 -283
- package/build/assets/Trans-CiZR6eVI.js +0 -1
- package/build/assets/active-backend-context-CEuva6ZJ.js +0 -1
- package/build/assets/add-backend-modal-b_eiVk3A.js +0 -1
- package/build/assets/agent-server-conversation-service.api-D_uJ7BKc.js +0 -5
- package/build/assets/agent-settings-DyfziYyM.js +0 -2
- package/build/assets/alert-banner-BFayS5vM.js +0 -1
- package/build/assets/analytics-consent-form-modal-CQ22qlFF.js +0 -1
- package/build/assets/api-key-entry-screen-KnIwP0vN.js +0 -1
- package/build/assets/app-settings-CBaHJ5vJ.js +0 -1
- package/build/assets/automation-detail-DgQswnXg.js +0 -1
- package/build/assets/automations-list-D99p6CoQ.js +0 -1
- package/build/assets/back-nav-button-Cp9z-wsG.js +0 -1
- package/build/assets/backend-form-modal-BABAz-zH.js +0 -1
- package/build/assets/backend-synced-settings-badge-DzwWQC4T.js +0 -1
- package/build/assets/base-modal-1bHiB5Wf.js +0 -1
- package/build/assets/brand-button-FHWgEb4Q.js +0 -1
- package/build/assets/browser-store-B9h0eW79.js +0 -1
- package/build/assets/browser-tab-JiCXo0Nc.js +0 -1
- package/build/assets/chat-send-button-QtyofqFt.js +0 -1
- package/build/assets/check-6ieIiPhW.js +0 -1
- package/build/assets/checkmark-BfgRVMHK.js +0 -1
- package/build/assets/circle-plus-check-toggle-CmINKfZj.js +0 -1
- package/build/assets/close-DhH0uMa7.js +0 -1
- package/build/assets/code-tag-CnORXDJj.js +0 -1
- package/build/assets/combobox-caret-BB15S7zY.js +0 -1
- package/build/assets/condenser-settings-BOKNShD9.js +0 -1
- package/build/assets/confirmation-modal-CofmThy4.js +0 -1
- package/build/assets/context-menu-list-item-DO12IEaK.js +0 -1
- package/build/assets/conversation-DIzv-jq8.js +0 -1
- package/build/assets/conversation-DV3odvMe.js +0 -19
- package/build/assets/conversation-local-storage-DK7yJr5N.js +0 -1
- package/build/assets/conversation-panel-CgCarTAn.js +0 -1
- package/build/assets/conversation-service.api-RV_bOKNz.js +0 -1
- package/build/assets/conversation-state-store-4obo4ZMf.js +0 -1
- package/build/assets/conversation-store-CXrL0v-X.js +0 -6
- package/build/assets/conversation-tab-empty-state-CqT5ur_H.js +0 -1
- package/build/assets/copy-C5tBqfWu.js +0 -1
- package/build/assets/copy-to-clipboard-button-BVFYcsg_.js +0 -1
- package/build/assets/createLucideIcon-D3nkdIAN.js +0 -1
- package/build/assets/declaration-B0yY_dkQ.js +0 -1
- package/build/assets/device-verify-DRupI_hz.js +0 -1
- package/build/assets/dist-D5d5zm8o.js +0 -1
- package/build/assets/dist-fV7trlfb.js +0 -1
- package/build/assets/dropdown-classes-5IsMjYYw.js +0 -1
- package/build/assets/edit-automation-modal-BG-gd82b.js +0 -1
- package/build/assets/ellipsis-button-DWvVZO_r.js +0 -1
- package/build/assets/entry.client-uhbVfCtd.js +0 -2
- package/build/assets/enum-filter-dropdown-CB2fqz_e.js +0 -1
- package/build/assets/environment-switch-overlay-Oeal5TVq.js +0 -1
- package/build/assets/extensions-hub-DxiE0AZR.js +0 -1
- package/build/assets/files-tab-1F2OlNeH.js +0 -1
- package/build/assets/files-tab-store-C1q5Rbx3.js +0 -1
- package/build/assets/folder-C5tr7xyN.js +0 -1
- package/build/assets/get-language-from-path-E1JKsbeE.js +0 -1
- package/build/assets/git-provider-icon-CKs-22Ts.js +0 -1
- package/build/assets/home-B3E0le0g.js +0 -1
- package/build/assets/iconBase-DMoh3FEg.js +0 -1
- package/build/assets/index-redirect-DhuK5mhS.js +0 -1
- package/build/assets/install-server-modal-DjintV14.js +0 -1
- package/build/assets/is-backend-llm-ready-Bj44pekN.js +0 -1
- package/build/assets/launch-DCU3S84p.js +0 -1
- package/build/assets/lesson-plan-BUUPKVsa.js +0 -3
- package/build/assets/link-external-CF4KHxx-.js +0 -1
- package/build/assets/llm-client-BakM_czF.js +0 -1
- package/build/assets/llm-not-configured-banner-BV-NIjfR.js +0 -27
- package/build/assets/llm-settings-B5d7PHzz.js +0 -1
- package/build/assets/llm-settings-C5whb-0p.js +0 -1
- package/build/assets/loader-circle-DyX8DmLg.js +0 -1
- package/build/assets/loading-spinner-BvOAco8a.js +0 -1
- package/build/assets/manage-backends-modal-D9ClxVpM.js +0 -1
- package/build/assets/manifest-38a873aa.js +0 -1
- package/build/assets/mcp-7rk44GRS.js +0 -9
- package/build/assets/mcp-client-DxHXYNOw.js +0 -1
- package/build/assets/messages-DgBEaXil.js +0 -43
- package/build/assets/modal-backdrop-DjAC2zOZ.js +0 -1
- package/build/assets/modal-body-OJdIUJ68.js +0 -1
- package/build/assets/modal-close-button-BNjGesHc.js +0 -1
- package/build/assets/model-selector-w2uGPM5y.js +0 -1
- package/build/assets/navigation-context-CUJ60pLI.js +0 -1
- package/build/assets/navigation-link-BiPKTOHF.js +0 -1
- package/build/assets/onboarding-Cit87z8g.js +0 -1
- package/build/assets/onboarding-modal-JPrzvr8W.js +0 -1
- package/build/assets/openhands-logo-uNs9g6LY.js +0 -1
- package/build/assets/option-service.api-BLYUhnCF.js +0 -1
- package/build/assets/organization-service.api-DpSSwlZu.js +0 -1
- package/build/assets/path-utils-B4WAVqvK.js +0 -1
- package/build/assets/plan-components-DSOTFW2D.js +0 -1
- package/build/assets/planner-tab-LmoxgKKe.js +0 -1
- package/build/assets/preload-helper-D_sPnjeL.js +0 -1
- package/build/assets/profiles-client-B4SJ4ZAf.js +0 -1
- package/build/assets/providers-BGUAB8kf.js +0 -1
- package/build/assets/react-Dn-iWFF5.js +0 -1
- package/build/assets/react-dom-BBXlXOZX.js +0 -1
- package/build/assets/react-uQK8du1l.js +0 -1
- package/build/assets/recommended-automations-launcher-Df9MXUpX.js +0 -50
- package/build/assets/root-BShAdYGY.css +0 -1
- package/build/assets/root-C99reK-P.js +0 -2
- package/build/assets/root-layout-BtH64XeC.js +0 -2
- package/build/assets/runtime-waiting-state-C7MjXDeW.js +0 -1
- package/build/assets/schema-field-BCDuEMrl.js +0 -1
- package/build/assets/sdk-section-page-XJN9mGju.js +0 -1
- package/build/assets/sdk-settings-schema-B15AE1GH.js +0 -1
- package/build/assets/search-rob4u9f8.js +0 -1
- package/build/assets/secrets-service-CrPyCR8u.js +0 -1
- package/build/assets/secrets-settings-UJn15N7E.js +0 -1
- package/build/assets/settings-C5aUD_sQ.js +0 -1
- package/build/assets/settings-dropdown-input-DQRt2_RA.js +0 -1
- package/build/assets/settings-gear-B7bZDo_8.js +0 -1
- package/build/assets/settings-index-zP_rYIW1.js +0 -1
- package/build/assets/settings-input-n8FzVso3.js +0 -1
- package/build/assets/settings-list-classes-DquY3fwm.js +0 -1
- package/build/assets/settings-modal-szlQ6LpE.js +0 -1
- package/build/assets/settings-section-header-context-DrXgyNC-.js +0 -1
- package/build/assets/settings-service.api-B4G8NzCM.js +0 -1
- package/build/assets/settings-switch-DsbEm3ie.js +0 -1
- package/build/assets/shared-conversation-BrAvqeaI.js +0 -1
- package/build/assets/sidebar-mobile-menu-toggle-BRZGCe-l.js +0 -1
- package/build/assets/sidebar-nav-link-B_EygIce.js +0 -1
- package/build/assets/skill-card-pill-row-Bq9Imkdh.js +0 -1
- package/build/assets/skills-Wg6i0kbu.js +0 -1
- package/build/assets/skills-client-DNd444Bm.js +0 -1
- package/build/assets/skills-plugins-DaGkVI7-.js +0 -1
- package/build/assets/skills-settings-Dlp0WFaT.js +0 -2
- package/build/assets/styled-tooltip-ulgpZDga.js +0 -1
- package/build/assets/suspense-BqBQEuKs.js +0 -1
- package/build/assets/switch-skeleton-C49gVWOQ.js +0 -1
- package/build/assets/task-list-tab-Bz-UlCm2.js +0 -1
- package/build/assets/telemetry-DD3HKMgf.js +0 -2
- package/build/assets/terminal-BwLvVzyJ.js +0 -1
- package/build/assets/toggle-switch-CxW8-lBI.js +0 -1
- package/build/assets/typography-BLf_mRKH.js +0 -1
- package/build/assets/u-check-circle-CxTAJuY9.js +0 -1
- package/build/assets/u-check-circle-half-Bj73jfUG.js +0 -1
- package/build/assets/u-circuit-C-6V9H9C.js +0 -1
- package/build/assets/u-edit-C7OnK2sa.js +0 -1
- package/build/assets/use-acp-credential-form-oehc057O.js +0 -1
- package/build/assets/use-active-conversation-CFXVX2on.js +0 -1
- package/build/assets/use-agent-state-D6xfZA4-.js +0 -1
- package/build/assets/use-backends-health-93yRIOWs.js +0 -1
- package/build/assets/use-breakpoint-Xdy_aZHE.js +0 -1
- package/build/assets/use-click-outside-element-CADb_gCP.js +0 -1
- package/build/assets/use-cloud-current-user-id-CzOXsy04.js +0 -1
- package/build/assets/use-config-oXjEWyb6.js +0 -1
- package/build/assets/use-create-conversation-D-YkgrxS.js +0 -1
- package/build/assets/use-create-secret-CX7Ij7W4.js +0 -1
- package/build/assets/use-event-store-DMRAQQi8.js +0 -1
- package/build/assets/use-handle-plan-click-CwW2Ijc2.js +0 -1
- package/build/assets/use-is-authed-CNbX1KMm.js +0 -1
- package/build/assets/use-launch-skill-in-chat-xI9byRUw.js +0 -1
- package/build/assets/use-llm-profiles-BXRZ2rBh.js +0 -1
- package/build/assets/use-runtime-is-ready-Dwzs9_vp.js +0 -1
- package/build/assets/use-settings-_usWr_qn.js +0 -1
- package/build/assets/use-settings-nav-items-DoB5iH-7.js +0 -16
- package/build/assets/use-skills-BtorhoCN.js +0 -1
- package/build/assets/use-task-list-u46BhYBC.js +0 -1
- package/build/assets/use-tracking-Ca7p71hH.js +0 -1
- package/build/assets/use-user-conversation-U-16WF6G.js +0 -1
- package/build/assets/useMutation-CseCrRRO.js +0 -1
- package/build/assets/useQuery-bowvACed.js +0 -1
- package/build/assets/useTranslation-KhTtKmnv.js +0 -1
- package/build/assets/utils-cRyMoFbz.js +0 -1
- package/build/assets/vendor~conversation-panel~conversation~alert-banner-CjfR7T3x.js +0 -1
- package/build/assets/vendor~entry.client-_zl82x5T.js +0 -1
- package/build/assets/vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~dj9x5fm9-CgCGB-3J.js +0 -177
- package/build/assets/vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~jfvr34cq-BJdsUTJG.js +0 -1
- package/build/assets/vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~m3df9r20-BynFAJ_S.js +0 -1
- package/build/assets/vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~nk00xiud-MfCRtPrK.js +0 -9
- package/build/assets/vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~skills-set~ghtfhmuy-BHDILMe2.js +0 -1
- package/build/assets/vendor~root-layout~conversation-panel~conversation-BFZmbXpq.js +0 -1
- package/build/assets/vendor~root-layout~conversation-panel~conversation~index-BPY-kNjK.js +0 -1
- package/build/assets/vendor~root-layout~home~conversation-panel~conversation-BhWqQNmF.js +0 -1
- package/build/assets/vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~mcp~~cfyi58ut-CnnEa0dP.js +0 -1
- package/build/assets/vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~mcp~~clac83qc-DMX6XUwI.js +0 -2
- package/build/assets/vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~mcp~~ldu51w4e-Cqp6k3RG.js +0 -1
- package/build/assets/vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~mcp~~ldu51w4e-DS4GWhCz.js +0 -9
- package/build/assets/vendor~root-layout~home~conversation-panel~conversation~launch~settings~settings-index~agen~ji28rqgb-DVffa9Ks.js +0 -48
- package/build/assets/vendor~root-layout~home~mcp~automations-list~onboarding-modal-BzR6ypP3.js +0 -1
- package/build/assets/vendor~root-layout~home~mcp~llm-settings~agent-settings~condenser-settings~verification-set~hzfcl1q6-BcvHZmEZ.js +0 -2
- package/build/assets/vendor~root-layout~home~mcp~llm-settings~agent-settings~condenser-settings~verification-set~hzfcl1q6-Cuvp6wqR.js +0 -14
- package/build/assets/verification-settings-DKZnUHD6.js +0 -1
- package/build/assets/x-DpnGZyVW.js +0 -1
- package/build/assets/x-mark-x3tvCZzc.js +0 -1
- package/dist/components/features/analytics/analytics-consent-form-modal.d.ts +0 -5
- package/dist/components/features/chat/switch-profile-button.cjs +0 -2
- package/dist/components/features/chat/switch-profile-button.cjs.map +0 -1
- package/dist/components/features/chat/switch-profile-button.d.ts +0 -1
- package/dist/components/features/chat/switch-profile-button.js +0 -48
- package/dist/components/features/chat/switch-profile-button.js.map +0 -1
- package/dist/components/features/chat/switch-profile-context-menu.cjs +0 -2
- package/dist/components/features/chat/switch-profile-context-menu.cjs.map +0 -1
- package/dist/components/features/chat/switch-profile-context-menu.d.ts +0 -9
- package/dist/components/features/chat/switch-profile-context-menu.js +0 -106
- package/dist/components/features/chat/switch-profile-context-menu.js.map +0 -1
- package/dist/components/features/onboarding/is-backend-llm-ready.d.ts +0 -30
- package/dist/icons/u-circuit.cjs +0 -2
- package/dist/icons/u-circuit.cjs.map +0 -1
- package/dist/icons/u-circuit.js +0 -19
- package/dist/icons/u-circuit.js.map +0 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/clickup.cjs +0 -2
- package/dist/node_modules/@openhands/extensions/integrations/catalog/clickup.cjs.map +0 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/clickup.js +0 -35
- package/dist/node_modules/@openhands/extensions/integrations/catalog/clickup.js.map +0 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/dropbox.cjs +0 -2
- package/dist/node_modules/@openhands/extensions/integrations/catalog/dropbox.cjs.map +0 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/dropbox.js +0 -35
- package/dist/node_modules/@openhands/extensions/integrations/catalog/dropbox.js.map +0 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/freshdesk.cjs +0 -2
- package/dist/node_modules/@openhands/extensions/integrations/catalog/freshdesk.cjs.map +0 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/freshdesk.js +0 -35
- package/dist/node_modules/@openhands/extensions/integrations/catalog/freshdesk.js.map +0 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/gitlab.cjs +0 -2
- package/dist/node_modules/@openhands/extensions/integrations/catalog/gitlab.cjs.map +0 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/gitlab.js +0 -35
- package/dist/node_modules/@openhands/extensions/integrations/catalog/gitlab.js.map +0 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/mailchimp.cjs +0 -2
- package/dist/node_modules/@openhands/extensions/integrations/catalog/mailchimp.cjs.map +0 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/mailchimp.js +0 -35
- package/dist/node_modules/@openhands/extensions/integrations/catalog/mailchimp.js.map +0 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/pipedrive.cjs +0 -2
- package/dist/node_modules/@openhands/extensions/integrations/catalog/pipedrive.cjs.map +0 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/pipedrive.js +0 -35
- package/dist/node_modules/@openhands/extensions/integrations/catalog/pipedrive.js.map +0 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/plaid.cjs +0 -2
- package/dist/node_modules/@openhands/extensions/integrations/catalog/plaid.cjs.map +0 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/plaid.js +0 -28
- package/dist/node_modules/@openhands/extensions/integrations/catalog/plaid.js.map +0 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/servicenow.cjs +0 -2
- package/dist/node_modules/@openhands/extensions/integrations/catalog/servicenow.cjs.map +0 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/servicenow.js +0 -35
- package/dist/node_modules/@openhands/extensions/integrations/catalog/servicenow.js.map +0 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/shopify.cjs +0 -2
- package/dist/node_modules/@openhands/extensions/integrations/catalog/shopify.cjs.map +0 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/shopify.js +0 -35
- package/dist/node_modules/@openhands/extensions/integrations/catalog/shopify.js.map +0 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/zendesk.cjs +0 -2
- package/dist/node_modules/@openhands/extensions/integrations/catalog/zendesk.cjs.map +0 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/zendesk.js +0 -35
- package/dist/node_modules/@openhands/extensions/integrations/catalog/zendesk.js.map +0 -1
- /package/build/assets/{agent-server-ui-style-scope-CIDFDeQb.js → agent-server-ui-style-scope-COnDHTm5.js} +0 -0
- /package/build/assets/{automation-DNgDxqtq.js → automation-BU8zu-FP.js} +0 -0
- /package/build/assets/{common-KeiA2Rod.js → common-Dh7OqABE.js} +0 -0
- /package/build/assets/{environment-switch-store-BpKxp6Xq.js → environment-switch-store-DkjlKWzN.js} +0 -0
- /package/build/assets/{extension-module-card-classes-DvvyImGv.js → extension-module-card-classes-9V3J9J_b.js} +0 -0
- /package/build/assets/{git-status-mapper-B3_HbzUT.js → git-status-mapper-BI8FyUVp.js} +0 -0
- /package/build/assets/{handle-capture-consent-BChvj6mt.js → handle-capture-consent-CPMXU29K.js} +0 -0
- /package/build/assets/{llm-subscription-C1xDoa3K.js → llm-subscription-DtsX5Lhg.js} +0 -0
- /package/build/assets/{map-provider-MonJL5SS.js → map-provider-BM2SJarp.js} +0 -0
- /package/build/assets/{objectWithoutPropertiesLoose-BRYudkUn.js → objectWithoutPropertiesLoose-BgYIAs2y.js} +0 -0
- /package/build/assets/{rolldown-runtime-wFmyQBCi.js → rolldown-runtime-BFRubm34.js} +0 -0
- /package/build/assets/{settings-like-page-layout-classes-DNg2vKSM.js → settings-like-page-layout-classes-DENKlZpD.js} +0 -0
- /package/build/assets/{v4-BMWDcIWQ.js → v4-DbCkTSoU.js} +0 -0
- /package/build/assets/{vendor~browser-yZEspfT9.js → vendor~browser-Dqd33JyP.js} +0 -0
- /package/build/assets/{vendor~terminal-CcUoOdAH.js → vendor~terminal-aeP3PnKf.js} +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require(`../../../_virtual/_rolldown/runtime.cjs`),t=require(`../../../node_modules/react-i18next/dist/es/useTranslation.cjs`),n=require(`../../../i18n/declaration.cjs`),r=require(`../../../utils/utils.cjs`),i=require(`../../../context/navigation-context.cjs`),a=require(`../../shared/buttons/styled-tooltip.cjs`),o=require(`../../../utils/dropdown-classes.cjs`),ee=require(`../../../hooks/mutation/use-create-conversation.cjs`),s=require(`../../../ui/divider.cjs`),c=require(`../../../icons/repo.cjs`),l=require(`../../../hooks/use-is-creating-conversation.cjs`),u=require(`../../../hooks/mutation/use-local-workspaces-mutations.cjs`),d=require(`../../../hooks/query/use-local-workspaces.cjs`),f=require(`../../../hooks/query/use-resolved-workspaces.cjs`),p=require(`../../../utils/workspaces-compatibility.cjs`),te=require(`../home/workspace-dropdown/folder-browser-modal.cjs`),m=require(`../home/workspace-dropdown/manage-workspaces-modal.cjs`),h=require(`./new-conversation-dropdown-styles.cjs`),g=require(`../../../hooks/use-popover-fixed-placement.cjs`);let _=require(`react`);_=e.__toESM(_,1);let v=require(`react/jsx-runtime`);function y({trigger:e,className:y,popoverClassName:b,popoverTestId:x=`new-conversation-popover`,useFixedPlacement:S=!1}){let{t:C}=t.useTranslation(`openhands`),{navigate:w}=i.useNavigation(),[T,E]=_.default.useState(!1),D=_.default.useRef(null),O=_.default.useRef(null),k=g.usePopoverFixedPlacement(O,{open:T,enabled:S}),{data:A,error:j}=d.useLocalWorkspaces(),M=A?.workspaceParents??[],{mutate:N}=u.useAddWorkspaces(),{mutate:P}=u.useRemoveWorkspace(),{mutate:F}=u.useAddWorkspaceParents(),{mutate:I}=u.useRemoveWorkspaceParent(),{workspaces:L}=f.useResolvedWorkspaces(),R=p.getWorkspacesUnsupportedMessage(j,C),[z,B]=_.default.useState(!1),[V,H]=_.default.useState(!1),{mutate:U,isPending:W}=ee.useCreateConversation(),G=l.useIsCreatingConversation(),K=W||G;_.default.useEffect(()=>{if(!T||z||V)return;let e=e=>{D.current&&!D.current.contains(e.target)&&E(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[T,z,V]),_.default.useEffect(()=>{if(!T||z||V)return;let e=e=>{e.key===`Escape`&&E(!1)};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[T,z,V]);let q=e=>{K||U({workingDir:e},{onSuccess:e=>{E(!1),w(`/conversations/${e.conversation_id}`)}})},J=o.dropdownMenuRowClassName,Y=_.default.useCallback(e=>{e.preventDefault(),e.stopPropagation()},[]),X=_.default.useCallback(()=>{E(e=>!e)},[]),Z=T&&(!S||k!==null),Q=!!R,ne=S&&k?{position:`fixed`,top:k.top,left:k.left,width:k.width}:void 0,$=(0,v.jsx)(`button`,{type:`button`,"data-testid":`add-workspaces-button`,disabled:Q,onMouseDown:Y,onClick:e=>{e.preventDefault(),e.stopPropagation(),!Q&&B(!0)},className:J,children:C(n.I18nKey.HOME$ADD_WORKSPACES)}),re=R?(0,v.jsx)(a.StyledTooltip,{content:R,placement:`top`,children:(0,v.jsx)(`span`,{className:`block`,children:$})}):$;return(0,v.jsxs)(`div`,{className:r.cn(!S&&`relative`,y),ref:D,children:[(0,v.jsx)(`span`,{ref:O,className:`inline-flex`,children:e({onClick:X,"aria-expanded":T,"aria-haspopup":`menu`,disabled:K})}),Z&&(0,v.jsxs)(`div`,{"data-testid":x,className:r.cn(h.NEW_CONVERSATION_DROPDOWN_SURFACE,!S&&r.cn(`absolute top-full mt-0`,b)),style:ne,children:[(0,v.jsxs)(`ul`,{className:r.cn(`max-h-[40vh] overflow-y-auto sm:max-h-[280px]`,o.dropdownMenuListClassName),children:[(0,v.jsx)(`li`,{children:(0,v.jsx)(`button`,{type:`button`,disabled:K,"data-testid":`launch-no-workspace`,onClick:()=>q(),className:J,children:(0,v.jsx)(`span`,{className:`text-[var(--oh-muted)]`,children:C(n.I18nKey.HOME$NO_WORKSPACE_OPTION)})})}),L.map(e=>(0,v.jsx)(`li`,{children:(0,v.jsxs)(`button`,{type:`button`,disabled:K,"data-testid":`launch-workspace`,"data-workspace-path":e.path,onClick:()=>q(e.path),className:J,children:[(0,v.jsx)(`span`,{className:o.dropdownMenuRowIconWrapperClassName,"aria-hidden":!0,children:(0,v.jsx)(c.default,{width:14,height:14})}),(0,v.jsx)(`span`,{className:`truncate`,children:e.name})]})},e.id))]}),(0,v.jsxs)(`div`,{className:r.cn(`flex flex-col`,o.dropdownMenuListClassName),"data-testid":`new-conversation-menu-footer`,children:[(0,v.jsx)(s.Divider,{inset:`menu`,testId:`new-conversation-menu-footer-divider`}),re,(L.length>0||M.length>0)&&(0,v.jsx)(`button`,{type:`button`,"data-testid":`manage-workspaces-button`,onMouseDown:Y,onClick:e=>{e.preventDefault(),e.stopPropagation(),H(!0)},className:J,children:C(n.I18nKey.HOME$MANAGE_WORKSPACES)})]})]}),(0,v.jsx)(te.FolderBrowserModal,{isOpen:z,onClose:()=>B(!1),onAdd:e=>N(e),onAddParent:e=>F(e)}),(0,v.jsx)(m.ManageWorkspacesModal,{isOpen:V,workspaces:L,workspaceParents:M,onClose:()=>H(!1),onRemove:e=>P(e),onRemoveParent:e=>I(e)})]})}exports.LocalNewConversationMenu=y;
|
|
1
|
+
const e=require(`../../../_virtual/_rolldown/runtime.cjs`),t=require(`../../../node_modules/react-i18next/dist/es/useTranslation.cjs`),n=require(`../../../i18n/declaration.cjs`),r=require(`../../../utils/utils.cjs`),i=require(`../../../context/navigation-context.cjs`),a=require(`../../shared/buttons/styled-tooltip.cjs`),o=require(`../../../utils/dropdown-classes.cjs`),ee=require(`../../../hooks/mutation/use-create-conversation.cjs`),s=require(`../../../ui/divider.cjs`),c=require(`../../../icons/repo.cjs`),l=require(`../../../hooks/use-is-creating-conversation.cjs`),u=require(`../../../hooks/mutation/use-local-workspaces-mutations.cjs`),d=require(`../../../hooks/query/use-local-workspaces.cjs`),f=require(`../../../hooks/query/use-resolved-workspaces.cjs`),p=require(`../../../utils/workspaces-compatibility.cjs`),te=require(`../home/workspace-dropdown/folder-browser-modal.cjs`),m=require(`../home/workspace-dropdown/manage-workspaces-modal.cjs`),h=require(`./new-conversation-dropdown-styles.cjs`),g=require(`../../../hooks/use-popover-fixed-placement.cjs`);let _=require(`react`);_=e.__toESM(_,1);let v=require(`react/jsx-runtime`);function y({trigger:e,className:y,popoverClassName:b,popoverTestId:x=`new-conversation-popover`,useFixedPlacement:S=!1}){let{t:C}=t.useTranslation(`openhands`),{navigate:w}=i.useNavigation(),[T,E]=_.default.useState(!1),D=_.default.useRef(null),O=_.default.useRef(null),k=g.usePopoverFixedPlacement(O,{open:T,enabled:S}),{data:A,error:j}=d.useLocalWorkspaces(),M=A?.workspaceParents??[],{mutate:N}=u.useAddWorkspaces(),{mutate:P}=u.useRemoveWorkspace(),{mutate:F}=u.useAddWorkspaceParents(),{mutate:I}=u.useRemoveWorkspaceParent(),{workspaces:L}=f.useResolvedWorkspaces(),R=p.getWorkspacesUnsupportedMessage(j,C),[z,B]=_.default.useState(!1),[V,H]=_.default.useState(!1),{mutate:U,isPending:W}=ee.useCreateConversation(),G=l.useIsCreatingConversation(),K=W||G;_.default.useEffect(()=>{if(!T||z||V)return;let e=e=>{D.current&&!D.current.contains(e.target)&&E(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[T,z,V]),_.default.useEffect(()=>{if(!T||z||V)return;let e=e=>{e.key===`Escape`&&E(!1)};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[T,z,V]);let q=e=>{K||U({workingDir:e,entryPoint:`sidebar_local_menu`},{onSuccess:e=>{E(!1),w(`/conversations/${e.conversation_id}`)}})},J=o.dropdownMenuRowClassName,Y=_.default.useCallback(e=>{e.preventDefault(),e.stopPropagation()},[]),X=_.default.useCallback(()=>{E(e=>!e)},[]),Z=T&&(!S||k!==null),Q=!!R,ne=S&&k?{position:`fixed`,top:k.top,left:k.left,width:k.width}:void 0,$=(0,v.jsx)(`button`,{type:`button`,"data-testid":`add-workspaces-button`,disabled:Q,onMouseDown:Y,onClick:e=>{e.preventDefault(),e.stopPropagation(),!Q&&B(!0)},className:J,children:C(n.I18nKey.HOME$ADD_WORKSPACES)}),re=R?(0,v.jsx)(a.StyledTooltip,{content:R,placement:`top`,children:(0,v.jsx)(`span`,{className:`block`,children:$})}):$;return(0,v.jsxs)(`div`,{className:r.cn(!S&&`relative`,y),ref:D,children:[(0,v.jsx)(`span`,{ref:O,className:`inline-flex`,children:e({onClick:X,"aria-expanded":T,"aria-haspopup":`menu`,disabled:K})}),Z&&(0,v.jsxs)(`div`,{"data-testid":x,className:r.cn(h.NEW_CONVERSATION_DROPDOWN_SURFACE,!S&&r.cn(`absolute top-full mt-0`,b)),style:ne,children:[(0,v.jsxs)(`ul`,{className:r.cn(`max-h-[40vh] overflow-y-auto sm:max-h-[280px]`,o.dropdownMenuListClassName),children:[(0,v.jsx)(`li`,{children:(0,v.jsx)(`button`,{type:`button`,disabled:K,"data-testid":`launch-no-workspace`,onClick:()=>q(),className:J,children:(0,v.jsx)(`span`,{className:`text-[var(--oh-muted)]`,children:C(n.I18nKey.HOME$NO_WORKSPACE_OPTION)})})}),L.map(e=>(0,v.jsx)(`li`,{children:(0,v.jsxs)(`button`,{type:`button`,disabled:K,"data-testid":`launch-workspace`,"data-workspace-path":e.path,onClick:()=>q(e.path),className:J,children:[(0,v.jsx)(`span`,{className:o.dropdownMenuRowIconWrapperClassName,"aria-hidden":!0,children:(0,v.jsx)(c.default,{width:14,height:14})}),(0,v.jsx)(`span`,{className:`truncate`,children:e.name})]})},e.id))]}),(0,v.jsxs)(`div`,{className:r.cn(`flex flex-col`,o.dropdownMenuListClassName),"data-testid":`new-conversation-menu-footer`,children:[(0,v.jsx)(s.Divider,{inset:`menu`,testId:`new-conversation-menu-footer-divider`}),re,(L.length>0||M.length>0)&&(0,v.jsx)(`button`,{type:`button`,"data-testid":`manage-workspaces-button`,onMouseDown:Y,onClick:e=>{e.preventDefault(),e.stopPropagation(),H(!0)},className:J,children:C(n.I18nKey.HOME$MANAGE_WORKSPACES)})]})]}),(0,v.jsx)(te.FolderBrowserModal,{isOpen:z,onClose:()=>B(!1),onAdd:e=>N(e),onAddParent:e=>F(e)}),(0,v.jsx)(m.ManageWorkspacesModal,{isOpen:V,workspaces:L,workspaceParents:M,onClose:()=>H(!1),onRemove:e=>P(e),onRemoveParent:e=>I(e)})]})}exports.LocalNewConversationMenu=y;
|
|
2
2
|
//# sourceMappingURL=local-new-conversation-menu.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-new-conversation-menu.cjs","names":[],"sources":["../../../../src/components/features/conversation-panel/local-new-conversation-menu.tsx"],"sourcesContent":["import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { useCreateConversation } from \"#/hooks/mutation/use-create-conversation\";\nimport { useNavigation } from \"#/context/navigation-context\";\nimport { useIsCreatingConversation } from \"#/hooks/use-is-creating-conversation\";\nimport {\n useAddWorkspaces,\n useAddWorkspaceParents,\n useRemoveWorkspace,\n useRemoveWorkspaceParent,\n} from \"#/hooks/mutation/use-local-workspaces-mutations\";\nimport { useLocalWorkspaces } from \"#/hooks/query/use-local-workspaces\";\nimport { useResolvedWorkspaces } from \"#/hooks/query/use-resolved-workspaces\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { cn } from \"#/utils/utils\";\nimport {\n dropdownMenuRowClassName,\n dropdownMenuListClassName,\n dropdownMenuRowIconWrapperClassName,\n} from \"#/utils/dropdown-classes\";\nimport { getWorkspacesUnsupportedMessage } from \"#/utils/workspaces-compatibility\";\nimport RepoIcon from \"#/icons/repo.svg?react\";\n\nimport { FolderBrowserModal } from \"#/components/features/home/workspace-dropdown/folder-browser-modal\";\nimport { ManageWorkspacesModal } from \"#/components/features/home/workspace-dropdown/manage-workspaces-modal\";\n\nimport { StyledTooltip } from \"#/components/shared/buttons/styled-tooltip\";\nimport { Divider } from \"#/ui/divider\";\nimport { NEW_CONVERSATION_DROPDOWN_SURFACE } from \"./new-conversation-dropdown-styles\";\nimport { usePopoverFixedPlacement } from \"#/hooks/use-popover-fixed-placement\";\n\nexport type LocalNewConversationMenuTriggerProps = {\n onClick: () => void;\n \"aria-expanded\": boolean;\n \"aria-haspopup\": \"menu\";\n disabled?: boolean;\n};\n\nexport interface LocalNewConversationMenuProps {\n trigger: (props: LocalNewConversationMenuTriggerProps) => React.ReactNode;\n /** Root wrapper class (e.g. `relative` + alignment in header row) */\n className?: string;\n /** Panel positioning / dimensions when using absolute placement (sidebar) */\n popoverClassName: string;\n /** Optional test id for the popover surface */\n popoverTestId?: string;\n /**\n * Use `position: fixed` from the trigger rect so the menu is not clipped by\n * sidebar overflow (conversation panel header).\n */\n useFixedPlacement?: boolean;\n}\n\n/**\n * Workspace/repo picker + launch flow for local agent-server backends.\n * Shared by the sidebar \"+ New conversation\" control and the conversation\n * panel \"new thread folder\" control.\n */\nexport function LocalNewConversationMenu({\n trigger,\n className,\n popoverClassName,\n popoverTestId = \"new-conversation-popover\",\n useFixedPlacement = false,\n}: LocalNewConversationMenuProps) {\n const { t } = useTranslation(\"openhands\");\n const { navigate } = useNavigation();\n\n const [open, setOpen] = React.useState(false);\n const popoverRef = React.useRef<HTMLDivElement>(null);\n const triggerWrapRef = React.useRef<HTMLSpanElement>(null);\n const fixedBox = usePopoverFixedPlacement(triggerWrapRef, {\n open,\n enabled: useFixedPlacement,\n });\n\n const { data: workspacesData, error: workspacesError } = useLocalWorkspaces();\n const workspaceParents = workspacesData?.workspaceParents ?? [];\n const { mutate: addWorkspaces } = useAddWorkspaces();\n const { mutate: removeWorkspace } = useRemoveWorkspace();\n const { mutate: addWorkspaceParents } = useAddWorkspaceParents();\n const { mutate: removeWorkspaceParent } = useRemoveWorkspaceParent();\n const { workspaces } = useResolvedWorkspaces();\n const workspacesUnsupportedMessage = getWorkspacesUnsupportedMessage(\n workspacesError,\n t,\n );\n const [browserOpen, setBrowserOpen] = React.useState(false);\n const [manageOpen, setManageOpen] = React.useState(false);\n\n const { mutate: createConversation, isPending } = useCreateConversation();\n const isCreatingElsewhere = useIsCreatingConversation();\n const isCreating = isPending || isCreatingElsewhere;\n\n React.useEffect(() => {\n if (!open || browserOpen || manageOpen) return undefined;\n const onDown = (e: MouseEvent) => {\n if (\n popoverRef.current &&\n !popoverRef.current.contains(e.target as Node)\n ) {\n setOpen(false);\n }\n };\n document.addEventListener(\"mousedown\", onDown);\n return () => document.removeEventListener(\"mousedown\", onDown);\n }, [open, browserOpen, manageOpen]);\n\n React.useEffect(() => {\n if (!open || browserOpen || manageOpen) return undefined;\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n setOpen(false);\n }\n };\n window.addEventListener(\"keydown\", onKeyDown);\n return () => window.removeEventListener(\"keydown\", onKeyDown);\n }, [open, browserOpen, manageOpen]);\n\n const launch = (workingDir?: string) => {\n if (isCreating) return;\n createConversation(\n { workingDir },\n {\n onSuccess: (data) => {\n setOpen(false);\n navigate(`/conversations/${data.conversation_id}`);\n },\n },\n );\n };\n\n const itemClass = dropdownMenuRowClassName;\n\n const keepPopoverOpenOnMouseDown = React.useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n event.stopPropagation();\n },\n [],\n );\n\n const toggleOpen = React.useCallback(() => {\n setOpen((o) => !o);\n }, []);\n\n const showPopover = open && (!useFixedPlacement || fixedBox !== null);\n const workspaceActionsDisabled = Boolean(workspacesUnsupportedMessage);\n\n const fixedStyle: React.CSSProperties | undefined =\n useFixedPlacement && fixedBox\n ? {\n position: \"fixed\",\n top: fixedBox.top,\n left: fixedBox.left,\n width: fixedBox.width,\n }\n : undefined;\n\n const addWorkspacesButton = (\n <button\n type=\"button\"\n data-testid=\"add-workspaces-button\"\n disabled={workspaceActionsDisabled}\n onMouseDown={keepPopoverOpenOnMouseDown}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n if (workspaceActionsDisabled) return;\n setBrowserOpen(true);\n }}\n className={itemClass}\n >\n {t(I18nKey.HOME$ADD_WORKSPACES)}\n </button>\n );\n\n const addWorkspacesControl = workspacesUnsupportedMessage ? (\n <StyledTooltip content={workspacesUnsupportedMessage} placement=\"top\">\n <span className=\"block\">{addWorkspacesButton}</span>\n </StyledTooltip>\n ) : (\n addWorkspacesButton\n );\n\n return (\n <div\n className={cn(!useFixedPlacement && \"relative\", className)}\n ref={popoverRef}\n >\n <span ref={triggerWrapRef} className=\"inline-flex\">\n {trigger({\n onClick: toggleOpen,\n \"aria-expanded\": open,\n \"aria-haspopup\": \"menu\",\n disabled: isCreating,\n })}\n </span>\n\n {showPopover && (\n <div\n data-testid={popoverTestId}\n className={cn(\n NEW_CONVERSATION_DROPDOWN_SURFACE,\n !useFixedPlacement &&\n cn(\"absolute top-full mt-0\", popoverClassName),\n )}\n style={fixedStyle}\n >\n <ul\n className={cn(\n \"max-h-[40vh] overflow-y-auto sm:max-h-[280px]\",\n dropdownMenuListClassName,\n )}\n >\n <li>\n <button\n type=\"button\"\n disabled={isCreating}\n data-testid=\"launch-no-workspace\"\n onClick={() => launch()}\n className={itemClass}\n >\n <span className=\"text-[var(--oh-muted)]\">\n {t(I18nKey.HOME$NO_WORKSPACE_OPTION)}\n </span>\n </button>\n </li>\n {workspaces.map((w) => (\n <li key={w.id}>\n <button\n type=\"button\"\n disabled={isCreating}\n data-testid=\"launch-workspace\"\n data-workspace-path={w.path}\n onClick={() => launch(w.path)}\n className={itemClass}\n >\n <span\n className={dropdownMenuRowIconWrapperClassName}\n aria-hidden\n >\n <RepoIcon width={14} height={14} />\n </span>\n <span className=\"truncate\">{w.name}</span>\n </button>\n </li>\n ))}\n </ul>\n\n <div\n className={cn(\"flex flex-col\", dropdownMenuListClassName)}\n data-testid=\"new-conversation-menu-footer\"\n >\n <Divider\n inset=\"menu\"\n testId=\"new-conversation-menu-footer-divider\"\n />\n {addWorkspacesControl}\n {(workspaces.length > 0 || workspaceParents.length > 0) && (\n <button\n type=\"button\"\n data-testid=\"manage-workspaces-button\"\n onMouseDown={keepPopoverOpenOnMouseDown}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n setManageOpen(true);\n }}\n className={itemClass}\n >\n {t(I18nKey.HOME$MANAGE_WORKSPACES)}\n </button>\n )}\n </div>\n </div>\n )}\n\n <FolderBrowserModal\n isOpen={browserOpen}\n onClose={() => setBrowserOpen(false)}\n onAdd={(items) => addWorkspaces(items)}\n onAddParent={(items) => addWorkspaceParents(items)}\n />\n\n <ManageWorkspacesModal\n isOpen={manageOpen}\n workspaces={workspaces}\n workspaceParents={workspaceParents}\n onClose={() => setManageOpen(false)}\n onRemove={(path) => removeWorkspace(path)}\n onRemoveParent={(path) => removeWorkspaceParent(path)}\n />\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"local-new-conversation-menu.cjs","names":[],"sources":["../../../../src/components/features/conversation-panel/local-new-conversation-menu.tsx"],"sourcesContent":["import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { useCreateConversation } from \"#/hooks/mutation/use-create-conversation\";\nimport { useNavigation } from \"#/context/navigation-context\";\nimport { useIsCreatingConversation } from \"#/hooks/use-is-creating-conversation\";\nimport {\n useAddWorkspaces,\n useAddWorkspaceParents,\n useRemoveWorkspace,\n useRemoveWorkspaceParent,\n} from \"#/hooks/mutation/use-local-workspaces-mutations\";\nimport { useLocalWorkspaces } from \"#/hooks/query/use-local-workspaces\";\nimport { useResolvedWorkspaces } from \"#/hooks/query/use-resolved-workspaces\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { cn } from \"#/utils/utils\";\nimport {\n dropdownMenuRowClassName,\n dropdownMenuListClassName,\n dropdownMenuRowIconWrapperClassName,\n} from \"#/utils/dropdown-classes\";\nimport { getWorkspacesUnsupportedMessage } from \"#/utils/workspaces-compatibility\";\nimport RepoIcon from \"#/icons/repo.svg?react\";\n\nimport { FolderBrowserModal } from \"#/components/features/home/workspace-dropdown/folder-browser-modal\";\nimport { ManageWorkspacesModal } from \"#/components/features/home/workspace-dropdown/manage-workspaces-modal\";\n\nimport { StyledTooltip } from \"#/components/shared/buttons/styled-tooltip\";\nimport { Divider } from \"#/ui/divider\";\nimport { NEW_CONVERSATION_DROPDOWN_SURFACE } from \"./new-conversation-dropdown-styles\";\nimport { usePopoverFixedPlacement } from \"#/hooks/use-popover-fixed-placement\";\n\nexport type LocalNewConversationMenuTriggerProps = {\n onClick: () => void;\n \"aria-expanded\": boolean;\n \"aria-haspopup\": \"menu\";\n disabled?: boolean;\n};\n\nexport interface LocalNewConversationMenuProps {\n trigger: (props: LocalNewConversationMenuTriggerProps) => React.ReactNode;\n /** Root wrapper class (e.g. `relative` + alignment in header row) */\n className?: string;\n /** Panel positioning / dimensions when using absolute placement (sidebar) */\n popoverClassName: string;\n /** Optional test id for the popover surface */\n popoverTestId?: string;\n /**\n * Use `position: fixed` from the trigger rect so the menu is not clipped by\n * sidebar overflow (conversation panel header).\n */\n useFixedPlacement?: boolean;\n}\n\n/**\n * Workspace/repo picker + launch flow for local agent-server backends.\n * Shared by the sidebar \"+ New conversation\" control and the conversation\n * panel \"new thread folder\" control.\n */\nexport function LocalNewConversationMenu({\n trigger,\n className,\n popoverClassName,\n popoverTestId = \"new-conversation-popover\",\n useFixedPlacement = false,\n}: LocalNewConversationMenuProps) {\n const { t } = useTranslation(\"openhands\");\n const { navigate } = useNavigation();\n\n const [open, setOpen] = React.useState(false);\n const popoverRef = React.useRef<HTMLDivElement>(null);\n const triggerWrapRef = React.useRef<HTMLSpanElement>(null);\n const fixedBox = usePopoverFixedPlacement(triggerWrapRef, {\n open,\n enabled: useFixedPlacement,\n });\n\n const { data: workspacesData, error: workspacesError } = useLocalWorkspaces();\n const workspaceParents = workspacesData?.workspaceParents ?? [];\n const { mutate: addWorkspaces } = useAddWorkspaces();\n const { mutate: removeWorkspace } = useRemoveWorkspace();\n const { mutate: addWorkspaceParents } = useAddWorkspaceParents();\n const { mutate: removeWorkspaceParent } = useRemoveWorkspaceParent();\n const { workspaces } = useResolvedWorkspaces();\n const workspacesUnsupportedMessage = getWorkspacesUnsupportedMessage(\n workspacesError,\n t,\n );\n const [browserOpen, setBrowserOpen] = React.useState(false);\n const [manageOpen, setManageOpen] = React.useState(false);\n\n const { mutate: createConversation, isPending } = useCreateConversation();\n const isCreatingElsewhere = useIsCreatingConversation();\n const isCreating = isPending || isCreatingElsewhere;\n\n React.useEffect(() => {\n if (!open || browserOpen || manageOpen) return undefined;\n const onDown = (e: MouseEvent) => {\n if (\n popoverRef.current &&\n !popoverRef.current.contains(e.target as Node)\n ) {\n setOpen(false);\n }\n };\n document.addEventListener(\"mousedown\", onDown);\n return () => document.removeEventListener(\"mousedown\", onDown);\n }, [open, browserOpen, manageOpen]);\n\n React.useEffect(() => {\n if (!open || browserOpen || manageOpen) return undefined;\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n setOpen(false);\n }\n };\n window.addEventListener(\"keydown\", onKeyDown);\n return () => window.removeEventListener(\"keydown\", onKeyDown);\n }, [open, browserOpen, manageOpen]);\n\n const launch = (workingDir?: string) => {\n if (isCreating) return;\n createConversation(\n { workingDir, entryPoint: \"sidebar_local_menu\" },\n {\n onSuccess: (data) => {\n setOpen(false);\n navigate(`/conversations/${data.conversation_id}`);\n },\n },\n );\n };\n\n const itemClass = dropdownMenuRowClassName;\n\n const keepPopoverOpenOnMouseDown = React.useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n event.stopPropagation();\n },\n [],\n );\n\n const toggleOpen = React.useCallback(() => {\n setOpen((o) => !o);\n }, []);\n\n const showPopover = open && (!useFixedPlacement || fixedBox !== null);\n const workspaceActionsDisabled = Boolean(workspacesUnsupportedMessage);\n\n const fixedStyle: React.CSSProperties | undefined =\n useFixedPlacement && fixedBox\n ? {\n position: \"fixed\",\n top: fixedBox.top,\n left: fixedBox.left,\n width: fixedBox.width,\n }\n : undefined;\n\n const addWorkspacesButton = (\n <button\n type=\"button\"\n data-testid=\"add-workspaces-button\"\n disabled={workspaceActionsDisabled}\n onMouseDown={keepPopoverOpenOnMouseDown}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n if (workspaceActionsDisabled) return;\n setBrowserOpen(true);\n }}\n className={itemClass}\n >\n {t(I18nKey.HOME$ADD_WORKSPACES)}\n </button>\n );\n\n const addWorkspacesControl = workspacesUnsupportedMessage ? (\n <StyledTooltip content={workspacesUnsupportedMessage} placement=\"top\">\n <span className=\"block\">{addWorkspacesButton}</span>\n </StyledTooltip>\n ) : (\n addWorkspacesButton\n );\n\n return (\n <div\n className={cn(!useFixedPlacement && \"relative\", className)}\n ref={popoverRef}\n >\n <span ref={triggerWrapRef} className=\"inline-flex\">\n {trigger({\n onClick: toggleOpen,\n \"aria-expanded\": open,\n \"aria-haspopup\": \"menu\",\n disabled: isCreating,\n })}\n </span>\n\n {showPopover && (\n <div\n data-testid={popoverTestId}\n className={cn(\n NEW_CONVERSATION_DROPDOWN_SURFACE,\n !useFixedPlacement &&\n cn(\"absolute top-full mt-0\", popoverClassName),\n )}\n style={fixedStyle}\n >\n <ul\n className={cn(\n \"max-h-[40vh] overflow-y-auto sm:max-h-[280px]\",\n dropdownMenuListClassName,\n )}\n >\n <li>\n <button\n type=\"button\"\n disabled={isCreating}\n data-testid=\"launch-no-workspace\"\n onClick={() => launch()}\n className={itemClass}\n >\n <span className=\"text-[var(--oh-muted)]\">\n {t(I18nKey.HOME$NO_WORKSPACE_OPTION)}\n </span>\n </button>\n </li>\n {workspaces.map((w) => (\n <li key={w.id}>\n <button\n type=\"button\"\n disabled={isCreating}\n data-testid=\"launch-workspace\"\n data-workspace-path={w.path}\n onClick={() => launch(w.path)}\n className={itemClass}\n >\n <span\n className={dropdownMenuRowIconWrapperClassName}\n aria-hidden\n >\n <RepoIcon width={14} height={14} />\n </span>\n <span className=\"truncate\">{w.name}</span>\n </button>\n </li>\n ))}\n </ul>\n\n <div\n className={cn(\"flex flex-col\", dropdownMenuListClassName)}\n data-testid=\"new-conversation-menu-footer\"\n >\n <Divider\n inset=\"menu\"\n testId=\"new-conversation-menu-footer-divider\"\n />\n {addWorkspacesControl}\n {(workspaces.length > 0 || workspaceParents.length > 0) && (\n <button\n type=\"button\"\n data-testid=\"manage-workspaces-button\"\n onMouseDown={keepPopoverOpenOnMouseDown}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n setManageOpen(true);\n }}\n className={itemClass}\n >\n {t(I18nKey.HOME$MANAGE_WORKSPACES)}\n </button>\n )}\n </div>\n </div>\n )}\n\n <FolderBrowserModal\n isOpen={browserOpen}\n onClose={() => setBrowserOpen(false)}\n onAdd={(items) => addWorkspaces(items)}\n onAddParent={(items) => addWorkspaceParents(items)}\n />\n\n <ManageWorkspacesModal\n isOpen={manageOpen}\n workspaces={workspaces}\n workspaceParents={workspaceParents}\n onClose={() => setManageOpen(false)}\n onRemove={(path) => removeWorkspace(path)}\n onRemoveParent={(path) => removeWorkspaceParent(path)}\n />\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -46,7 +46,10 @@ function S({ trigger: S, className: ie, popoverClassName: ae, popoverTestId: C =
|
|
|
46
46
|
U
|
|
47
47
|
]);
|
|
48
48
|
let Y = (e) => {
|
|
49
|
-
J || G({
|
|
49
|
+
J || G({
|
|
50
|
+
workingDir: e,
|
|
51
|
+
entryPoint: "sidebar_local_menu"
|
|
52
|
+
}, { onSuccess: (e) => {
|
|
50
53
|
O(!1), E(`/conversations/${e.conversation_id}`);
|
|
51
54
|
} });
|
|
52
55
|
}, X = te, Z = y.useCallback((e) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-new-conversation-menu.js","names":[],"sources":["../../../../src/components/features/conversation-panel/local-new-conversation-menu.tsx"],"sourcesContent":["import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { useCreateConversation } from \"#/hooks/mutation/use-create-conversation\";\nimport { useNavigation } from \"#/context/navigation-context\";\nimport { useIsCreatingConversation } from \"#/hooks/use-is-creating-conversation\";\nimport {\n useAddWorkspaces,\n useAddWorkspaceParents,\n useRemoveWorkspace,\n useRemoveWorkspaceParent,\n} from \"#/hooks/mutation/use-local-workspaces-mutations\";\nimport { useLocalWorkspaces } from \"#/hooks/query/use-local-workspaces\";\nimport { useResolvedWorkspaces } from \"#/hooks/query/use-resolved-workspaces\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { cn } from \"#/utils/utils\";\nimport {\n dropdownMenuRowClassName,\n dropdownMenuListClassName,\n dropdownMenuRowIconWrapperClassName,\n} from \"#/utils/dropdown-classes\";\nimport { getWorkspacesUnsupportedMessage } from \"#/utils/workspaces-compatibility\";\nimport RepoIcon from \"#/icons/repo.svg?react\";\n\nimport { FolderBrowserModal } from \"#/components/features/home/workspace-dropdown/folder-browser-modal\";\nimport { ManageWorkspacesModal } from \"#/components/features/home/workspace-dropdown/manage-workspaces-modal\";\n\nimport { StyledTooltip } from \"#/components/shared/buttons/styled-tooltip\";\nimport { Divider } from \"#/ui/divider\";\nimport { NEW_CONVERSATION_DROPDOWN_SURFACE } from \"./new-conversation-dropdown-styles\";\nimport { usePopoverFixedPlacement } from \"#/hooks/use-popover-fixed-placement\";\n\nexport type LocalNewConversationMenuTriggerProps = {\n onClick: () => void;\n \"aria-expanded\": boolean;\n \"aria-haspopup\": \"menu\";\n disabled?: boolean;\n};\n\nexport interface LocalNewConversationMenuProps {\n trigger: (props: LocalNewConversationMenuTriggerProps) => React.ReactNode;\n /** Root wrapper class (e.g. `relative` + alignment in header row) */\n className?: string;\n /** Panel positioning / dimensions when using absolute placement (sidebar) */\n popoverClassName: string;\n /** Optional test id for the popover surface */\n popoverTestId?: string;\n /**\n * Use `position: fixed` from the trigger rect so the menu is not clipped by\n * sidebar overflow (conversation panel header).\n */\n useFixedPlacement?: boolean;\n}\n\n/**\n * Workspace/repo picker + launch flow for local agent-server backends.\n * Shared by the sidebar \"+ New conversation\" control and the conversation\n * panel \"new thread folder\" control.\n */\nexport function LocalNewConversationMenu({\n trigger,\n className,\n popoverClassName,\n popoverTestId = \"new-conversation-popover\",\n useFixedPlacement = false,\n}: LocalNewConversationMenuProps) {\n const { t } = useTranslation(\"openhands\");\n const { navigate } = useNavigation();\n\n const [open, setOpen] = React.useState(false);\n const popoverRef = React.useRef<HTMLDivElement>(null);\n const triggerWrapRef = React.useRef<HTMLSpanElement>(null);\n const fixedBox = usePopoverFixedPlacement(triggerWrapRef, {\n open,\n enabled: useFixedPlacement,\n });\n\n const { data: workspacesData, error: workspacesError } = useLocalWorkspaces();\n const workspaceParents = workspacesData?.workspaceParents ?? [];\n const { mutate: addWorkspaces } = useAddWorkspaces();\n const { mutate: removeWorkspace } = useRemoveWorkspace();\n const { mutate: addWorkspaceParents } = useAddWorkspaceParents();\n const { mutate: removeWorkspaceParent } = useRemoveWorkspaceParent();\n const { workspaces } = useResolvedWorkspaces();\n const workspacesUnsupportedMessage = getWorkspacesUnsupportedMessage(\n workspacesError,\n t,\n );\n const [browserOpen, setBrowserOpen] = React.useState(false);\n const [manageOpen, setManageOpen] = React.useState(false);\n\n const { mutate: createConversation, isPending } = useCreateConversation();\n const isCreatingElsewhere = useIsCreatingConversation();\n const isCreating = isPending || isCreatingElsewhere;\n\n React.useEffect(() => {\n if (!open || browserOpen || manageOpen) return undefined;\n const onDown = (e: MouseEvent) => {\n if (\n popoverRef.current &&\n !popoverRef.current.contains(e.target as Node)\n ) {\n setOpen(false);\n }\n };\n document.addEventListener(\"mousedown\", onDown);\n return () => document.removeEventListener(\"mousedown\", onDown);\n }, [open, browserOpen, manageOpen]);\n\n React.useEffect(() => {\n if (!open || browserOpen || manageOpen) return undefined;\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n setOpen(false);\n }\n };\n window.addEventListener(\"keydown\", onKeyDown);\n return () => window.removeEventListener(\"keydown\", onKeyDown);\n }, [open, browserOpen, manageOpen]);\n\n const launch = (workingDir?: string) => {\n if (isCreating) return;\n createConversation(\n { workingDir },\n {\n onSuccess: (data) => {\n setOpen(false);\n navigate(`/conversations/${data.conversation_id}`);\n },\n },\n );\n };\n\n const itemClass = dropdownMenuRowClassName;\n\n const keepPopoverOpenOnMouseDown = React.useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n event.stopPropagation();\n },\n [],\n );\n\n const toggleOpen = React.useCallback(() => {\n setOpen((o) => !o);\n }, []);\n\n const showPopover = open && (!useFixedPlacement || fixedBox !== null);\n const workspaceActionsDisabled = Boolean(workspacesUnsupportedMessage);\n\n const fixedStyle: React.CSSProperties | undefined =\n useFixedPlacement && fixedBox\n ? {\n position: \"fixed\",\n top: fixedBox.top,\n left: fixedBox.left,\n width: fixedBox.width,\n }\n : undefined;\n\n const addWorkspacesButton = (\n <button\n type=\"button\"\n data-testid=\"add-workspaces-button\"\n disabled={workspaceActionsDisabled}\n onMouseDown={keepPopoverOpenOnMouseDown}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n if (workspaceActionsDisabled) return;\n setBrowserOpen(true);\n }}\n className={itemClass}\n >\n {t(I18nKey.HOME$ADD_WORKSPACES)}\n </button>\n );\n\n const addWorkspacesControl = workspacesUnsupportedMessage ? (\n <StyledTooltip content={workspacesUnsupportedMessage} placement=\"top\">\n <span className=\"block\">{addWorkspacesButton}</span>\n </StyledTooltip>\n ) : (\n addWorkspacesButton\n );\n\n return (\n <div\n className={cn(!useFixedPlacement && \"relative\", className)}\n ref={popoverRef}\n >\n <span ref={triggerWrapRef} className=\"inline-flex\">\n {trigger({\n onClick: toggleOpen,\n \"aria-expanded\": open,\n \"aria-haspopup\": \"menu\",\n disabled: isCreating,\n })}\n </span>\n\n {showPopover && (\n <div\n data-testid={popoverTestId}\n className={cn(\n NEW_CONVERSATION_DROPDOWN_SURFACE,\n !useFixedPlacement &&\n cn(\"absolute top-full mt-0\", popoverClassName),\n )}\n style={fixedStyle}\n >\n <ul\n className={cn(\n \"max-h-[40vh] overflow-y-auto sm:max-h-[280px]\",\n dropdownMenuListClassName,\n )}\n >\n <li>\n <button\n type=\"button\"\n disabled={isCreating}\n data-testid=\"launch-no-workspace\"\n onClick={() => launch()}\n className={itemClass}\n >\n <span className=\"text-[var(--oh-muted)]\">\n {t(I18nKey.HOME$NO_WORKSPACE_OPTION)}\n </span>\n </button>\n </li>\n {workspaces.map((w) => (\n <li key={w.id}>\n <button\n type=\"button\"\n disabled={isCreating}\n data-testid=\"launch-workspace\"\n data-workspace-path={w.path}\n onClick={() => launch(w.path)}\n className={itemClass}\n >\n <span\n className={dropdownMenuRowIconWrapperClassName}\n aria-hidden\n >\n <RepoIcon width={14} height={14} />\n </span>\n <span className=\"truncate\">{w.name}</span>\n </button>\n </li>\n ))}\n </ul>\n\n <div\n className={cn(\"flex flex-col\", dropdownMenuListClassName)}\n data-testid=\"new-conversation-menu-footer\"\n >\n <Divider\n inset=\"menu\"\n testId=\"new-conversation-menu-footer-divider\"\n />\n {addWorkspacesControl}\n {(workspaces.length > 0 || workspaceParents.length > 0) && (\n <button\n type=\"button\"\n data-testid=\"manage-workspaces-button\"\n onMouseDown={keepPopoverOpenOnMouseDown}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n setManageOpen(true);\n }}\n className={itemClass}\n >\n {t(I18nKey.HOME$MANAGE_WORKSPACES)}\n </button>\n )}\n </div>\n </div>\n )}\n\n <FolderBrowserModal\n isOpen={browserOpen}\n onClose={() => setBrowserOpen(false)}\n onAdd={(items) => addWorkspaces(items)}\n onAddParent={(items) => addWorkspaceParents(items)}\n />\n\n <ManageWorkspacesModal\n isOpen={manageOpen}\n workspaces={workspaces}\n workspaceParents={workspaceParents}\n onClose={() => setManageOpen(false)}\n onRemove={(path) => removeWorkspace(path)}\n onRemoveParent={(path) => removeWorkspaceParent(path)}\n />\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"local-new-conversation-menu.js","names":[],"sources":["../../../../src/components/features/conversation-panel/local-new-conversation-menu.tsx"],"sourcesContent":["import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { useCreateConversation } from \"#/hooks/mutation/use-create-conversation\";\nimport { useNavigation } from \"#/context/navigation-context\";\nimport { useIsCreatingConversation } from \"#/hooks/use-is-creating-conversation\";\nimport {\n useAddWorkspaces,\n useAddWorkspaceParents,\n useRemoveWorkspace,\n useRemoveWorkspaceParent,\n} from \"#/hooks/mutation/use-local-workspaces-mutations\";\nimport { useLocalWorkspaces } from \"#/hooks/query/use-local-workspaces\";\nimport { useResolvedWorkspaces } from \"#/hooks/query/use-resolved-workspaces\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { cn } from \"#/utils/utils\";\nimport {\n dropdownMenuRowClassName,\n dropdownMenuListClassName,\n dropdownMenuRowIconWrapperClassName,\n} from \"#/utils/dropdown-classes\";\nimport { getWorkspacesUnsupportedMessage } from \"#/utils/workspaces-compatibility\";\nimport RepoIcon from \"#/icons/repo.svg?react\";\n\nimport { FolderBrowserModal } from \"#/components/features/home/workspace-dropdown/folder-browser-modal\";\nimport { ManageWorkspacesModal } from \"#/components/features/home/workspace-dropdown/manage-workspaces-modal\";\n\nimport { StyledTooltip } from \"#/components/shared/buttons/styled-tooltip\";\nimport { Divider } from \"#/ui/divider\";\nimport { NEW_CONVERSATION_DROPDOWN_SURFACE } from \"./new-conversation-dropdown-styles\";\nimport { usePopoverFixedPlacement } from \"#/hooks/use-popover-fixed-placement\";\n\nexport type LocalNewConversationMenuTriggerProps = {\n onClick: () => void;\n \"aria-expanded\": boolean;\n \"aria-haspopup\": \"menu\";\n disabled?: boolean;\n};\n\nexport interface LocalNewConversationMenuProps {\n trigger: (props: LocalNewConversationMenuTriggerProps) => React.ReactNode;\n /** Root wrapper class (e.g. `relative` + alignment in header row) */\n className?: string;\n /** Panel positioning / dimensions when using absolute placement (sidebar) */\n popoverClassName: string;\n /** Optional test id for the popover surface */\n popoverTestId?: string;\n /**\n * Use `position: fixed` from the trigger rect so the menu is not clipped by\n * sidebar overflow (conversation panel header).\n */\n useFixedPlacement?: boolean;\n}\n\n/**\n * Workspace/repo picker + launch flow for local agent-server backends.\n * Shared by the sidebar \"+ New conversation\" control and the conversation\n * panel \"new thread folder\" control.\n */\nexport function LocalNewConversationMenu({\n trigger,\n className,\n popoverClassName,\n popoverTestId = \"new-conversation-popover\",\n useFixedPlacement = false,\n}: LocalNewConversationMenuProps) {\n const { t } = useTranslation(\"openhands\");\n const { navigate } = useNavigation();\n\n const [open, setOpen] = React.useState(false);\n const popoverRef = React.useRef<HTMLDivElement>(null);\n const triggerWrapRef = React.useRef<HTMLSpanElement>(null);\n const fixedBox = usePopoverFixedPlacement(triggerWrapRef, {\n open,\n enabled: useFixedPlacement,\n });\n\n const { data: workspacesData, error: workspacesError } = useLocalWorkspaces();\n const workspaceParents = workspacesData?.workspaceParents ?? [];\n const { mutate: addWorkspaces } = useAddWorkspaces();\n const { mutate: removeWorkspace } = useRemoveWorkspace();\n const { mutate: addWorkspaceParents } = useAddWorkspaceParents();\n const { mutate: removeWorkspaceParent } = useRemoveWorkspaceParent();\n const { workspaces } = useResolvedWorkspaces();\n const workspacesUnsupportedMessage = getWorkspacesUnsupportedMessage(\n workspacesError,\n t,\n );\n const [browserOpen, setBrowserOpen] = React.useState(false);\n const [manageOpen, setManageOpen] = React.useState(false);\n\n const { mutate: createConversation, isPending } = useCreateConversation();\n const isCreatingElsewhere = useIsCreatingConversation();\n const isCreating = isPending || isCreatingElsewhere;\n\n React.useEffect(() => {\n if (!open || browserOpen || manageOpen) return undefined;\n const onDown = (e: MouseEvent) => {\n if (\n popoverRef.current &&\n !popoverRef.current.contains(e.target as Node)\n ) {\n setOpen(false);\n }\n };\n document.addEventListener(\"mousedown\", onDown);\n return () => document.removeEventListener(\"mousedown\", onDown);\n }, [open, browserOpen, manageOpen]);\n\n React.useEffect(() => {\n if (!open || browserOpen || manageOpen) return undefined;\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n setOpen(false);\n }\n };\n window.addEventListener(\"keydown\", onKeyDown);\n return () => window.removeEventListener(\"keydown\", onKeyDown);\n }, [open, browserOpen, manageOpen]);\n\n const launch = (workingDir?: string) => {\n if (isCreating) return;\n createConversation(\n { workingDir, entryPoint: \"sidebar_local_menu\" },\n {\n onSuccess: (data) => {\n setOpen(false);\n navigate(`/conversations/${data.conversation_id}`);\n },\n },\n );\n };\n\n const itemClass = dropdownMenuRowClassName;\n\n const keepPopoverOpenOnMouseDown = React.useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n event.stopPropagation();\n },\n [],\n );\n\n const toggleOpen = React.useCallback(() => {\n setOpen((o) => !o);\n }, []);\n\n const showPopover = open && (!useFixedPlacement || fixedBox !== null);\n const workspaceActionsDisabled = Boolean(workspacesUnsupportedMessage);\n\n const fixedStyle: React.CSSProperties | undefined =\n useFixedPlacement && fixedBox\n ? {\n position: \"fixed\",\n top: fixedBox.top,\n left: fixedBox.left,\n width: fixedBox.width,\n }\n : undefined;\n\n const addWorkspacesButton = (\n <button\n type=\"button\"\n data-testid=\"add-workspaces-button\"\n disabled={workspaceActionsDisabled}\n onMouseDown={keepPopoverOpenOnMouseDown}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n if (workspaceActionsDisabled) return;\n setBrowserOpen(true);\n }}\n className={itemClass}\n >\n {t(I18nKey.HOME$ADD_WORKSPACES)}\n </button>\n );\n\n const addWorkspacesControl = workspacesUnsupportedMessage ? (\n <StyledTooltip content={workspacesUnsupportedMessage} placement=\"top\">\n <span className=\"block\">{addWorkspacesButton}</span>\n </StyledTooltip>\n ) : (\n addWorkspacesButton\n );\n\n return (\n <div\n className={cn(!useFixedPlacement && \"relative\", className)}\n ref={popoverRef}\n >\n <span ref={triggerWrapRef} className=\"inline-flex\">\n {trigger({\n onClick: toggleOpen,\n \"aria-expanded\": open,\n \"aria-haspopup\": \"menu\",\n disabled: isCreating,\n })}\n </span>\n\n {showPopover && (\n <div\n data-testid={popoverTestId}\n className={cn(\n NEW_CONVERSATION_DROPDOWN_SURFACE,\n !useFixedPlacement &&\n cn(\"absolute top-full mt-0\", popoverClassName),\n )}\n style={fixedStyle}\n >\n <ul\n className={cn(\n \"max-h-[40vh] overflow-y-auto sm:max-h-[280px]\",\n dropdownMenuListClassName,\n )}\n >\n <li>\n <button\n type=\"button\"\n disabled={isCreating}\n data-testid=\"launch-no-workspace\"\n onClick={() => launch()}\n className={itemClass}\n >\n <span className=\"text-[var(--oh-muted)]\">\n {t(I18nKey.HOME$NO_WORKSPACE_OPTION)}\n </span>\n </button>\n </li>\n {workspaces.map((w) => (\n <li key={w.id}>\n <button\n type=\"button\"\n disabled={isCreating}\n data-testid=\"launch-workspace\"\n data-workspace-path={w.path}\n onClick={() => launch(w.path)}\n className={itemClass}\n >\n <span\n className={dropdownMenuRowIconWrapperClassName}\n aria-hidden\n >\n <RepoIcon width={14} height={14} />\n </span>\n <span className=\"truncate\">{w.name}</span>\n </button>\n </li>\n ))}\n </ul>\n\n <div\n className={cn(\"flex flex-col\", dropdownMenuListClassName)}\n data-testid=\"new-conversation-menu-footer\"\n >\n <Divider\n inset=\"menu\"\n testId=\"new-conversation-menu-footer-divider\"\n />\n {addWorkspacesControl}\n {(workspaces.length > 0 || workspaceParents.length > 0) && (\n <button\n type=\"button\"\n data-testid=\"manage-workspaces-button\"\n onMouseDown={keepPopoverOpenOnMouseDown}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n setManageOpen(true);\n }}\n className={itemClass}\n >\n {t(I18nKey.HOME$MANAGE_WORKSPACES)}\n </button>\n )}\n </div>\n </div>\n )}\n\n <FolderBrowserModal\n isOpen={browserOpen}\n onClose={() => setBrowserOpen(false)}\n onAdd={(items) => addWorkspaces(items)}\n onAddParent={(items) => addWorkspaceParents(items)}\n />\n\n <ManageWorkspacesModal\n isOpen={manageOpen}\n workspaces={workspaces}\n workspaceParents={workspaceParents}\n onClose={() => setManageOpen(false)}\n onRemove={(path) => removeWorkspace(path)}\n onRemoveParent={(path) => removeWorkspaceParent(path)}\n />\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AA2DA,SAAgB,EAAyB,EACvC,YACA,eACA,sBACA,mBAAgB,4BAChB,uBAAoB,MACY;CAChC,IAAM,EAAE,SAAM,EAAe,YAAY,EACnC,EAAE,gBAAa,IAAe,EAE9B,CAAC,GAAM,KAAW,EAAM,SAAS,GAAM,EACvC,IAAa,EAAM,OAAuB,KAAK,EAC/C,IAAiB,EAAM,OAAwB,KAAK,EACpD,IAAW,EAAyB,GAAgB;EACxD;EACA,SAAS;EACV,CAAC,EAEI,EAAE,MAAM,GAAgB,OAAO,MAAoB,GAAoB,EACvE,IAAmB,GAAgB,oBAAoB,EAAE,EACzD,EAAE,QAAQ,MAAkB,GAAkB,EAC9C,EAAE,QAAQ,MAAoB,GAAoB,EAClD,EAAE,QAAQ,MAAwB,GAAwB,EAC1D,EAAE,QAAQ,MAA0B,GAA0B,EAC9D,EAAE,kBAAe,IAAuB,EACxC,IAA+B,EACnC,GACA,EACD,EACK,CAAC,GAAa,KAAkB,EAAM,SAAS,GAAM,EACrD,CAAC,GAAY,KAAiB,EAAM,SAAS,GAAM,EAEnD,EAAE,QAAQ,GAAoB,iBAAc,GAAuB,EACnE,IAAsB,GAA2B,EACjD,IAAa,KAAa;AAgBhC,CAdA,EAAM,gBAAgB;AACpB,MAAI,CAAC,KAAQ,KAAe,EAAY;EACxC,IAAM,KAAU,MAAkB;AAChC,GACE,EAAW,WACX,CAAC,EAAW,QAAQ,SAAS,EAAE,OAAe,IAE9C,EAAQ,GAAM;;AAIlB,SADA,SAAS,iBAAiB,aAAa,EAAO,QACjC,SAAS,oBAAoB,aAAa,EAAO;IAC7D;EAAC;EAAM;EAAa;EAAW,CAAC,EAEnC,EAAM,gBAAgB;AACpB,MAAI,CAAC,KAAQ,KAAe,EAAY;EACxC,IAAM,KAAa,MAAyB;AAC1C,GAAI,EAAM,QAAQ,YAChB,EAAQ,GAAM;;AAIlB,SADA,OAAO,iBAAiB,WAAW,EAAU,QAChC,OAAO,oBAAoB,WAAW,EAAU;IAC5D;EAAC;EAAM;EAAa;EAAW,CAAC;CAEnC,IAAM,KAAU,MAAwB;AAClC,OACJ,EACE;GAAE;GAAY,YAAY;GAAsB,EAChD,EACE,YAAY,MAAS;AAEnB,GADA,EAAQ,GAAM,EACd,EAAS,kBAAkB,EAAK,kBAAkB;KAErD,CACF;IAGG,IAAY,IAEZ,IAA6B,EAAM,aACtC,MAA+C;AAE9C,EADA,EAAM,gBAAgB,EACtB,EAAM,iBAAiB;IAEzB,EAAE,CACH,EAEK,KAAa,EAAM,kBAAkB;AACzC,KAAS,MAAM,CAAC,EAAE;IACjB,EAAE,CAAC,EAEA,KAAc,MAAS,CAAC,KAAqB,MAAa,OAC1D,IAA2B,EAAQ,GAEnC,KACJ,KAAqB,IACjB;EACE,UAAU;EACV,KAAK,EAAS;EACd,MAAM,EAAS;EACf,OAAO,EAAS;EACjB,GACD,KAAA,GAEA,IACJ,kBAAC,UAAD;EACE,MAAK;EACL,eAAY;EACZ,UAAU;EACV,aAAa;EACb,UAAU,MAAU;AAClB,KAAM,gBAAgB,EACtB,EAAM,iBAAiB,EACnB,MACJ,EAAe,GAAK;;EAEtB,WAAW;YAEV,EAAE,EAAQ,oBAAoB;EACxB,CAAA,EAGL,KAAuB,IAC3B,kBAAC,GAAD;EAAe,SAAS;EAA8B,WAAU;YAC9D,kBAAC,QAAD;GAAM,WAAU;aAAS;GAA2B,CAAA;EACtC,CAAA,GAEhB;AAGF,QACE,kBAAC,OAAD;EACE,WAAW,EAAG,CAAC,KAAqB,YAAY,GAAU;EAC1D,KAAK;YAFP;GAIE,kBAAC,QAAD;IAAM,KAAK;IAAgB,WAAU;cAClC,EAAQ;KACP,SAAS;KACT,iBAAiB;KACjB,iBAAiB;KACjB,UAAU;KACX,CAAC;IACG,CAAA;GAEN,MACC,kBAAC,OAAD;IACE,eAAa;IACb,WAAW,EACT,GACA,CAAC,KACC,EAAG,0BAA0B,GAAiB,CACjD;IACD,OAAO;cAPT,CASE,kBAAC,MAAD;KACE,WAAW,EACT,iDACA,EACD;eAJH,CAME,kBAAC,MAAD,EAAA,UACE,kBAAC,UAAD;MACE,MAAK;MACL,UAAU;MACV,eAAY;MACZ,eAAe,GAAQ;MACvB,WAAW;gBAEX,kBAAC,QAAD;OAAM,WAAU;iBACb,EAAE,EAAQ,yBAAyB;OAC/B,CAAA;MACA,CAAA,EACN,CAAA,EACJ,EAAW,KAAK,MACf,kBAAC,MAAD,EAAA,UACE,kBAAC,UAAD;MACE,MAAK;MACL,UAAU;MACV,eAAY;MACZ,uBAAqB,EAAE;MACvB,eAAe,EAAO,EAAE,KAAK;MAC7B,WAAW;gBANb,CAQE,kBAAC,QAAD;OACE,WAAW;OACX,eAAA;iBAEA,kBAAC,GAAD;QAAU,OAAO;QAAI,QAAQ;QAAM,CAAA;OAC9B,CAAA,EACP,kBAAC,QAAD;OAAM,WAAU;iBAAY,EAAE;OAAY,CAAA,CACnC;SACN,EAjBI,EAAE,GAiBN,CACL,CACC;QAEL,kBAAC,OAAD;KACE,WAAW,EAAG,iBAAiB,EAA0B;KACzD,eAAY;eAFd;MAIE,kBAAC,GAAD;OACE,OAAM;OACN,QAAO;OACP,CAAA;MACD;OACC,EAAW,SAAS,KAAK,EAAiB,SAAS,MACnD,kBAAC,UAAD;OACE,MAAK;OACL,eAAY;OACZ,aAAa;OACb,UAAU,MAAU;AAGlB,QAFA,EAAM,gBAAgB,EACtB,EAAM,iBAAiB,EACvB,EAAc,GAAK;;OAErB,WAAW;iBAEV,EAAE,EAAQ,uBAAuB;OAC3B,CAAA;MAEP;OACF;;GAGR,kBAAC,GAAD;IACE,QAAQ;IACR,eAAe,EAAe,GAAM;IACpC,QAAQ,MAAU,EAAc,EAAM;IACtC,cAAc,MAAU,EAAoB,EAAM;IAClD,CAAA;GAEF,kBAAC,GAAD;IACE,QAAQ;IACI;IACM;IAClB,eAAe,EAAc,GAAM;IACnC,WAAW,MAAS,EAAgB,EAAK;IACzC,iBAAiB,MAAS,EAAsB,EAAK;IACrD,CAAA;GACE"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
require(`../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../../node_modules/react-i18next/dist/es/useTranslation.cjs`),t=require(`../../../i18n/declaration.cjs`),n=require(`../../../ui/typography.cjs`),r=require(`../../../utils/plugin-display.cjs`),i=require(`../../shared/modals/modal-backdrop.cjs`),a=require(`../../shared/modals/modal-body.cjs`),o=require(`../../shared/modals/confirmation-modals/base-modal.cjs`),s=require(`../../shared/modals/modal-close-button.cjs`),c=require(`../../../hooks/use-conversation-plugins.cjs`);let l=require(`react/jsx-runtime`);function u({onClose:u}){let{t:d}=e.useTranslation(`openhands`),f=c.useConversationPlugins();return(0,l.jsx)(i.ModalBackdrop,{onClose:u,children:(0,l.jsxs)(a.ModalBody,{width:`lg`,className:`relative flex max-h-[80vh] flex-col items-start border border-[var(--oh-border)]`,testID:`plugins-modal`,children:[(0,l.jsx)(s.ModalCloseButton,{onClose:u,testId:`close-plugins-modal`}),(0,l.jsxs)(`div`,{className:`flex w-full flex-col gap-2 pr-10`,children:[(0,l.jsx)(o.BaseModalTitle,{title:d(t.I18nKey.PLUGINS_MODAL$TITLE)}),(0,l.jsx)(n.Typography.Text,{className:`text-sm text-[var(--oh-muted)]`,children:d(t.I18nKey.PLUGINS_MODAL$DESCRIPTION)})]}),(0,l.jsx)(`div`,{className:`w-full overflow-auto rounded-md border border-[var(--oh-border)] bg-surface-raised custom-scrollbar-always`,children:f.length===0?(0,l.jsx)(`div`,{className:`flex items-center justify-center p-6`,children:(0,l.jsx)(n.Typography.Text,{className:`text-[var(--oh-muted)]`,children:d(t.I18nKey.PLUGINS_MODAL$EMPTY)})}):(0,l.jsx)(`ul`,{className:`divide-y divide-[var(--oh-border)]`,children:f.map(e=>(0,l.jsxs)(`li`,{"data-testid":`active-plugin-${r.getPluginDisplayName(e)}`,className:`flex flex-col gap-1 p-4`,children:[(0,l.jsx)(n.Typography.Text,{className:`font-semibold text-white`,children:r.getPluginDisplayName(e)}),(0,l.jsx)(n.Typography.Text,{className:`text-xs text-tertiary-alt`,children:r.isLocalPluginSource(e)?d(t.I18nKey.PLUGINS_MODAL$SOURCE_LOCAL):r.getPluginSourceLabel(e)})]},r.pluginReferenceKey(e)))})})]})})}exports.PluginsModal=u;
|
|
2
|
+
//# sourceMappingURL=plugins-modal.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugins-modal.cjs","names":[],"sources":["../../../../src/components/features/conversation-panel/plugins-modal.tsx"],"sourcesContent":["import { useTranslation } from \"react-i18next\";\nimport { ModalBackdrop } from \"#/components/shared/modals/modal-backdrop\";\nimport { ModalBody } from \"#/components/shared/modals/modal-body\";\nimport { ModalCloseButton } from \"#/components/shared/modals/modal-close-button\";\nimport { BaseModalTitle } from \"#/components/shared/modals/confirmation-modals/base-modal\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { Typography } from \"#/ui/typography\";\nimport { useConversationPlugins } from \"#/hooks/use-conversation-plugins\";\nimport {\n getPluginDisplayName,\n getPluginSourceLabel,\n isLocalPluginSource,\n pluginReferenceKey,\n} from \"#/utils/plugin-display\";\n\ninterface PluginsModalProps {\n onClose: () => void;\n}\n\n/**\n * Display-only view of the plugins loaded into the current conversation,\n * captured in client-side metadata at creation (explicitly attached plugins\n * plus the enabled installed plugins the SDK auto-loads). Mirrors\n * {@link SkillsModal}. The agent-server doesn't expose a live conversation's\n * loaded plugins, so this reads that client-side snapshot.\n */\nexport function PluginsModal({ onClose }: PluginsModalProps) {\n const { t } = useTranslation(\"openhands\");\n const plugins = useConversationPlugins();\n\n return (\n <ModalBackdrop onClose={onClose}>\n <ModalBody\n width=\"lg\"\n className=\"relative flex max-h-[80vh] flex-col items-start border border-[var(--oh-border)]\"\n testID=\"plugins-modal\"\n >\n <ModalCloseButton onClose={onClose} testId=\"close-plugins-modal\" />\n <div className=\"flex w-full flex-col gap-2 pr-10\">\n <BaseModalTitle title={t(I18nKey.PLUGINS_MODAL$TITLE)} />\n <Typography.Text className=\"text-sm text-[var(--oh-muted)]\">\n {t(I18nKey.PLUGINS_MODAL$DESCRIPTION)}\n </Typography.Text>\n </div>\n\n <div className=\"w-full overflow-auto rounded-md border border-[var(--oh-border)] bg-surface-raised custom-scrollbar-always\">\n {plugins.length === 0 ? (\n <div className=\"flex items-center justify-center p-6\">\n <Typography.Text className=\"text-[var(--oh-muted)]\">\n {t(I18nKey.PLUGINS_MODAL$EMPTY)}\n </Typography.Text>\n </div>\n ) : (\n <ul className=\"divide-y divide-[var(--oh-border)]\">\n {plugins.map((plugin) => (\n <li\n key={pluginReferenceKey(plugin)}\n data-testid={`active-plugin-${getPluginDisplayName(plugin)}`}\n className=\"flex flex-col gap-1 p-4\"\n >\n <Typography.Text className=\"font-semibold text-white\">\n {getPluginDisplayName(plugin)}\n </Typography.Text>\n <Typography.Text className=\"text-xs text-tertiary-alt\">\n {isLocalPluginSource(plugin)\n ? t(I18nKey.PLUGINS_MODAL$SOURCE_LOCAL)\n : getPluginSourceLabel(plugin)}\n </Typography.Text>\n </li>\n ))}\n </ul>\n )}\n </div>\n </ModalBody>\n </ModalBackdrop>\n );\n}\n"],"mappings":"mkBA0BA,SAAgB,EAAa,CAAE,WAA8B,CAC3D,GAAM,CAAE,KAAM,EAAA,eAAe,YAAY,CACnC,EAAU,EAAA,wBAAwB,CAExC,OACE,EAAA,EAAA,KAAC,EAAA,cAAD,CAAwB,oBACtB,EAAA,EAAA,MAAC,EAAA,UAAD,CACE,MAAM,KACN,UAAU,mFACV,OAAO,yBAHT,EAKE,EAAA,EAAA,KAAC,EAAA,iBAAD,CAA2B,UAAS,OAAO,sBAAwB,CAAA,EACnE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,4CAAf,EACE,EAAA,EAAA,KAAC,EAAA,eAAD,CAAgB,MAAO,EAAE,EAAA,QAAQ,oBAAoB,CAAI,CAAA,EACzD,EAAA,EAAA,KAAC,EAAA,WAAW,KAAZ,CAAiB,UAAU,0CACxB,EAAE,EAAA,QAAQ,0BAA0B,CACrB,CAAA,CACd,IAEN,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,sHACZ,EAAQ,SAAW,GAClB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,iDACb,EAAA,EAAA,KAAC,EAAA,WAAW,KAAZ,CAAiB,UAAU,kCACxB,EAAE,EAAA,QAAQ,oBAAoB,CACf,CAAA,CACd,CAAA,EAEN,EAAA,EAAA,KAAC,KAAD,CAAI,UAAU,8CACX,EAAQ,IAAK,IACZ,EAAA,EAAA,MAAC,KAAD,CAEE,cAAa,iBAAiB,EAAA,qBAAqB,EAAO,GAC1D,UAAU,mCAHZ,EAKE,EAAA,EAAA,KAAC,EAAA,WAAW,KAAZ,CAAiB,UAAU,oCACxB,EAAA,qBAAqB,EAAO,CACb,CAAA,EAClB,EAAA,EAAA,KAAC,EAAA,WAAW,KAAZ,CAAiB,UAAU,qCACxB,EAAA,oBAAoB,EAAO,CACxB,EAAE,EAAA,QAAQ,2BAA2B,CACrC,EAAA,qBAAqB,EAAO,CAChB,CAAA,CACf,EAZE,EAAA,mBAAmB,EAAO,CAY5B,CACL,CACC,CAAA,CAEH,CAAA,CACI,GACE,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
interface PluginsModalProps {
|
|
2
|
+
onClose: () => void;
|
|
3
|
+
}
|
|
4
|
+
/**
|
|
5
|
+
* Display-only view of the plugins loaded into the current conversation,
|
|
6
|
+
* captured in client-side metadata at creation (explicitly attached plugins
|
|
7
|
+
* plus the enabled installed plugins the SDK auto-loads). Mirrors
|
|
8
|
+
* {@link SkillsModal}. The agent-server doesn't expose a live conversation's
|
|
9
|
+
* loaded plugins, so this reads that client-side snapshot.
|
|
10
|
+
*/
|
|
11
|
+
export declare function PluginsModal({ onClose }: PluginsModalProps): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { useTranslation as e } from "../../../node_modules/react-i18next/dist/es/useTranslation.js";
|
|
2
|
+
import { I18nKey as t } from "../../../i18n/declaration.js";
|
|
3
|
+
import { Typography as n } from "../../../ui/typography.js";
|
|
4
|
+
import { getPluginDisplayName as r, getPluginSourceLabel as i, isLocalPluginSource as a, pluginReferenceKey as o } from "../../../utils/plugin-display.js";
|
|
5
|
+
import { ModalBackdrop as s } from "../../shared/modals/modal-backdrop.js";
|
|
6
|
+
import { ModalBody as c } from "../../shared/modals/modal-body.js";
|
|
7
|
+
import { BaseModalTitle as l } from "../../shared/modals/confirmation-modals/base-modal.js";
|
|
8
|
+
import { ModalCloseButton as u } from "../../shared/modals/modal-close-button.js";
|
|
9
|
+
import { useConversationPlugins as d } from "../../../hooks/use-conversation-plugins.js";
|
|
10
|
+
import { jsx as f, jsxs as p } from "react/jsx-runtime";
|
|
11
|
+
//#region src/components/features/conversation-panel/plugins-modal.tsx
|
|
12
|
+
function m({ onClose: m }) {
|
|
13
|
+
let { t: h } = e("openhands"), g = d();
|
|
14
|
+
return /* @__PURE__ */ f(s, {
|
|
15
|
+
onClose: m,
|
|
16
|
+
children: /* @__PURE__ */ p(c, {
|
|
17
|
+
width: "lg",
|
|
18
|
+
className: "relative flex max-h-[80vh] flex-col items-start border border-[var(--oh-border)]",
|
|
19
|
+
testID: "plugins-modal",
|
|
20
|
+
children: [
|
|
21
|
+
/* @__PURE__ */ f(u, {
|
|
22
|
+
onClose: m,
|
|
23
|
+
testId: "close-plugins-modal"
|
|
24
|
+
}),
|
|
25
|
+
/* @__PURE__ */ p("div", {
|
|
26
|
+
className: "flex w-full flex-col gap-2 pr-10",
|
|
27
|
+
children: [/* @__PURE__ */ f(l, { title: h(t.PLUGINS_MODAL$TITLE) }), /* @__PURE__ */ f(n.Text, {
|
|
28
|
+
className: "text-sm text-[var(--oh-muted)]",
|
|
29
|
+
children: h(t.PLUGINS_MODAL$DESCRIPTION)
|
|
30
|
+
})]
|
|
31
|
+
}),
|
|
32
|
+
/* @__PURE__ */ f("div", {
|
|
33
|
+
className: "w-full overflow-auto rounded-md border border-[var(--oh-border)] bg-surface-raised custom-scrollbar-always",
|
|
34
|
+
children: g.length === 0 ? /* @__PURE__ */ f("div", {
|
|
35
|
+
className: "flex items-center justify-center p-6",
|
|
36
|
+
children: /* @__PURE__ */ f(n.Text, {
|
|
37
|
+
className: "text-[var(--oh-muted)]",
|
|
38
|
+
children: h(t.PLUGINS_MODAL$EMPTY)
|
|
39
|
+
})
|
|
40
|
+
}) : /* @__PURE__ */ f("ul", {
|
|
41
|
+
className: "divide-y divide-[var(--oh-border)]",
|
|
42
|
+
children: g.map((e) => /* @__PURE__ */ p("li", {
|
|
43
|
+
"data-testid": `active-plugin-${r(e)}`,
|
|
44
|
+
className: "flex flex-col gap-1 p-4",
|
|
45
|
+
children: [/* @__PURE__ */ f(n.Text, {
|
|
46
|
+
className: "font-semibold text-white",
|
|
47
|
+
children: r(e)
|
|
48
|
+
}), /* @__PURE__ */ f(n.Text, {
|
|
49
|
+
className: "text-xs text-tertiary-alt",
|
|
50
|
+
children: a(e) ? h(t.PLUGINS_MODAL$SOURCE_LOCAL) : i(e)
|
|
51
|
+
})]
|
|
52
|
+
}, o(e)))
|
|
53
|
+
})
|
|
54
|
+
})
|
|
55
|
+
]
|
|
56
|
+
})
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
//#endregion
|
|
60
|
+
export { m as PluginsModal };
|
|
61
|
+
|
|
62
|
+
//# sourceMappingURL=plugins-modal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugins-modal.js","names":[],"sources":["../../../../src/components/features/conversation-panel/plugins-modal.tsx"],"sourcesContent":["import { useTranslation } from \"react-i18next\";\nimport { ModalBackdrop } from \"#/components/shared/modals/modal-backdrop\";\nimport { ModalBody } from \"#/components/shared/modals/modal-body\";\nimport { ModalCloseButton } from \"#/components/shared/modals/modal-close-button\";\nimport { BaseModalTitle } from \"#/components/shared/modals/confirmation-modals/base-modal\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { Typography } from \"#/ui/typography\";\nimport { useConversationPlugins } from \"#/hooks/use-conversation-plugins\";\nimport {\n getPluginDisplayName,\n getPluginSourceLabel,\n isLocalPluginSource,\n pluginReferenceKey,\n} from \"#/utils/plugin-display\";\n\ninterface PluginsModalProps {\n onClose: () => void;\n}\n\n/**\n * Display-only view of the plugins loaded into the current conversation,\n * captured in client-side metadata at creation (explicitly attached plugins\n * plus the enabled installed plugins the SDK auto-loads). Mirrors\n * {@link SkillsModal}. The agent-server doesn't expose a live conversation's\n * loaded plugins, so this reads that client-side snapshot.\n */\nexport function PluginsModal({ onClose }: PluginsModalProps) {\n const { t } = useTranslation(\"openhands\");\n const plugins = useConversationPlugins();\n\n return (\n <ModalBackdrop onClose={onClose}>\n <ModalBody\n width=\"lg\"\n className=\"relative flex max-h-[80vh] flex-col items-start border border-[var(--oh-border)]\"\n testID=\"plugins-modal\"\n >\n <ModalCloseButton onClose={onClose} testId=\"close-plugins-modal\" />\n <div className=\"flex w-full flex-col gap-2 pr-10\">\n <BaseModalTitle title={t(I18nKey.PLUGINS_MODAL$TITLE)} />\n <Typography.Text className=\"text-sm text-[var(--oh-muted)]\">\n {t(I18nKey.PLUGINS_MODAL$DESCRIPTION)}\n </Typography.Text>\n </div>\n\n <div className=\"w-full overflow-auto rounded-md border border-[var(--oh-border)] bg-surface-raised custom-scrollbar-always\">\n {plugins.length === 0 ? (\n <div className=\"flex items-center justify-center p-6\">\n <Typography.Text className=\"text-[var(--oh-muted)]\">\n {t(I18nKey.PLUGINS_MODAL$EMPTY)}\n </Typography.Text>\n </div>\n ) : (\n <ul className=\"divide-y divide-[var(--oh-border)]\">\n {plugins.map((plugin) => (\n <li\n key={pluginReferenceKey(plugin)}\n data-testid={`active-plugin-${getPluginDisplayName(plugin)}`}\n className=\"flex flex-col gap-1 p-4\"\n >\n <Typography.Text className=\"font-semibold text-white\">\n {getPluginDisplayName(plugin)}\n </Typography.Text>\n <Typography.Text className=\"text-xs text-tertiary-alt\">\n {isLocalPluginSource(plugin)\n ? t(I18nKey.PLUGINS_MODAL$SOURCE_LOCAL)\n : getPluginSourceLabel(plugin)}\n </Typography.Text>\n </li>\n ))}\n </ul>\n )}\n </div>\n </ModalBody>\n </ModalBackdrop>\n );\n}\n"],"mappings":";;;;;;;;;;;AA0BA,SAAgB,EAAa,EAAE,cAA8B;CAC3D,IAAM,EAAE,SAAM,EAAe,YAAY,EACnC,IAAU,GAAwB;AAExC,QACE,kBAAC,GAAD;EAAwB;YACtB,kBAAC,GAAD;GACE,OAAM;GACN,WAAU;GACV,QAAO;aAHT;IAKE,kBAAC,GAAD;KAA2B;KAAS,QAAO;KAAwB,CAAA;IACnE,kBAAC,OAAD;KAAK,WAAU;eAAf,CACE,kBAAC,GAAD,EAAgB,OAAO,EAAE,EAAQ,oBAAoB,EAAI,CAAA,EACzD,kBAAC,EAAW,MAAZ;MAAiB,WAAU;gBACxB,EAAE,EAAQ,0BAA0B;MACrB,CAAA,CACd;;IAEN,kBAAC,OAAD;KAAK,WAAU;eACZ,EAAQ,WAAW,IAClB,kBAAC,OAAD;MAAK,WAAU;gBACb,kBAAC,EAAW,MAAZ;OAAiB,WAAU;iBACxB,EAAE,EAAQ,oBAAoB;OACf,CAAA;MACd,CAAA,GAEN,kBAAC,MAAD;MAAI,WAAU;gBACX,EAAQ,KAAK,MACZ,kBAAC,MAAD;OAEE,eAAa,iBAAiB,EAAqB,EAAO;OAC1D,WAAU;iBAHZ,CAKE,kBAAC,EAAW,MAAZ;QAAiB,WAAU;kBACxB,EAAqB,EAAO;QACb,CAAA,EAClB,kBAAC,EAAW,MAAZ;QAAiB,WAAU;kBACxB,EAAoB,EAAO,GACxB,EAAE,EAAQ,2BAA2B,GACrC,EAAqB,EAAO;QAChB,CAAA,CACf;SAZE,EAAmB,EAAO,CAY5B,CACL;MACC,CAAA;KAEH,CAAA;IACI;;EACE,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require(`../../../../_virtual/_rolldown/runtime.cjs`),t=require(`../../../../node_modules/react-i18next/dist/es/useTranslation.cjs`),n=require(`../../../../i18n/declaration.cjs`),r=require(`../../../../utils/utils.cjs`),i=require(`../../../../
|
|
1
|
+
const e=require(`../../../../_virtual/_rolldown/runtime.cjs`),t=require(`../../../../node_modules/react-i18next/dist/es/useTranslation.cjs`),n=require(`../../../../i18n/declaration.cjs`),r=require(`../../../../utils/utils.cjs`),i=require(`../../../../utils/form-control-classes.cjs`),ee=require(`../../../../ui/typography.cjs`),a=require(`../../../../node_modules/downshift/dist/downshift.esm.cjs`),o=require(`../../../../hooks/use-debounce.cjs`),s=require(`../shared/clear-button.cjs`),c=require(`../shared/toggle-button.cjs`),l=require(`../shared/error-message.cjs`),u=require(`../shared/dropdown-item.cjs`),d=require(`../shared/empty-state.cjs`),f=require(`./use-url-search.cjs`),p=require(`./use-repository-data.cjs`),m=require(`../shared/generic-dropdown-menu.cjs`),h=require(`../../../../icons/repo.cjs`),g=require(`../../../../stores/home-store.cjs`);let _=require(`react`);_=e.__toESM(_,1);let v=require(`react/jsx-runtime`);function y({provider:e,value:y,repositoryName:b,placeholder:x,className:S,disabled:C=!1,onChange:w}){let{t:T}=t.useTranslation(`openhands`),{recentRepositories:E}=g.useHomeStore(),[D,O]=(0,_.useState)(``),[k,A]=(0,_.useState)(null),j=o.useDebounce(D,300),M=(0,_.useRef)(null),N=(0,_.useMemo)(()=>{if(j.startsWith(`https://`)){let e=j.match(/https:\/\/[^/]+\/([^/]+\/[^/]+)/);return e?e[1]:j}return j},[j]),{urlSearchResults:P,isUrlSearchLoading:F}=f.useUrlSearch(D,e),{repositories:I,selectedRepository:L,fetchNextPage:R,hasNextPage:z,isLoading:B,isFetchingNextPage:V,isError:H,isSearchLoading:U}=p.useRepositoryData(e,C,N,P,D,y,b),W=L??k,G=(0,_.useMemo)(()=>{let t=E.filter(t=>t.git_provider===e);if(!D?.trim())return t;let n=D.startsWith(`https://`)?N:D;return t.filter(e=>e.full_name.toLowerCase().includes(n.toLowerCase()))},[E,e,D,N]),K=(0,_.useCallback)(e=>{let t=new Set(G.map(e=>e.id)),n=e.filter(e=>!t.has(e.id));return[...G,...n]},[G]),q=(0,_.useMemo)(()=>{let e;if(P.length>0)e=I;else if(D===L?.full_name)e=I;else if(!D?.trim())e=I;else{let t=D.startsWith(`https://`)?N:D;e=I.filter(e=>e.full_name.toLowerCase().includes(t.toLowerCase()))}return K(e)},[I,D,L,P,N,K]),J=(0,_.useCallback)(e=>{A(e),w?.(e||void 0),e&&O(e.full_name)},[w]),Y=(0,_.useCallback)(()=>{A(null),J(null),O(``)},[J]),X=(0,_.useCallback)(e=>{let{scrollTop:t,scrollHeight:n,clientHeight:r}=e.currentTarget;t+r>=n-10&&z&&!V&&R()},[z,V,R]),{isOpen:Z,getToggleButtonProps:Q,getMenuProps:te,getInputProps:ne,highlightedIndex:re,getItemProps:$,selectedItem:ie}=a.useCombobox({items:q,itemToString:e=>e?.full_name||``,selectedItem:k,onSelectedItemChange:({selectedItem:e})=>{J(e)},inputValue:D,stateReducer:(e,t)=>t.type===a.useCombobox.stateChangeTypes.InputClick&&e.isOpen?{...t.changes,isOpen:!0}:t.changes});(0,_.useEffect)(()=>{L?A(L):y===null&&A(null)},[L,y]),(0,_.useEffect)(()=>{Z||O(W?.full_name??``)},[W,Z]);let ae=B||U||V||F,oe=(e,t,n,r,i)=>(0,v.jsx)(u.DropdownItem,{item:e,index:t,isSelected:r?.id===e.id,getItemProps:i,getDisplayText:e=>e.full_name,getItemKey:e=>e.id},e.id),se=e=>(0,v.jsx)(d.EmptyState,{inputValue:e,searchMessage:T(n.I18nKey.HOME$NO_REPOSITORY_FOUND),emptyMessage:T(n.I18nKey.COMMON$NO_REPOSITORY),testId:`git-repo-dropdown-empty`}),ce=(0,_.useMemo)(()=>G.length===0?null:(0,v.jsx)(`div`,{children:(0,v.jsx)(ee.Typography.Text,{className:`text-xs text-content-2 font-semibold leading-4 pl-2`,children:T(n.I18nKey.COMMON$MOST_RECENT)})}),[G,k,$,T]);return(0,v.jsxs)(`div`,{className:r.cn(`relative`,S),children:[(0,v.jsxs)(`div`,{className:`group relative text-[var(--oh-muted)] hover:text-white`,children:[(0,v.jsx)(`div`,{className:`absolute left-2 top-1/2 transform -translate-y-1/2 z-10`,children:ae?(0,v.jsx)(`div`,{className:`animate-spin h-4 w-4 border-2 border-transparent border-t-white rounded-full`}):(0,v.jsx)(h.default,{width:16,height:16})}),(0,v.jsx)(`input`,{...ne({disabled:C,placeholder:x??T(n.I18nKey.COMMON$SEARCH_REPOSITORIES_PLACEHOLDER),className:r.cn(i.formControlFieldClassName,`text-inherit shadow-none pl-7 pr-16 text-sm font-normal leading-5`,`placeholder:text-[var(--oh-muted)]`,`disabled:cursor-not-allowed disabled:opacity-60`),onChange:e=>{O(e.target.value)}}),"data-testid":`git-repo-dropdown`}),(0,v.jsxs)(`div`,{className:`absolute right-1 top-1/2 transform -translate-y-1/2 flex items-center`,children:[W&&(0,v.jsx)(s.ClearButton,{disabled:C,onClear:Y}),(0,v.jsx)(c.ToggleButton,{isOpen:Z,disabled:C,getToggleButtonProps:Q})]})]}),(0,v.jsx)(m.GenericDropdownMenu,{isOpen:Z,filteredItems:q,inputValue:D,highlightedIndex:re,selectedItem:ie,getMenuProps:te,getItemProps:$,onScroll:X,menuRef:M,renderItem:oe,renderEmptyState:se,stickyTopItem:ce,testId:`git-repo-dropdown-menu`,numberOfRecentItems:G.length,itemKey:e=>e.id}),(0,v.jsx)(l.ErrorMessage,{isError:H})]})}exports.GitRepoDropdown=y;
|
|
2
2
|
//# sourceMappingURL=git-repo-dropdown.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-repo-dropdown.cjs","names":[],"sources":["../../../../../src/components/features/home/git-repo-dropdown/git-repo-dropdown.tsx"],"sourcesContent":["import React, {\n useState,\n useMemo,\n useCallback,\n useRef,\n useEffect,\n} from \"react\";\nimport { useCombobox } from \"downshift\";\nimport { useTranslation } from \"react-i18next\";\nimport { Provider } from \"#/types/settings\";\nimport { GitRepository } from \"#/types/git\";\nimport { useDebounce } from \"#/hooks/use-debounce\";\nimport { cn } from \"#/utils/utils\";\nimport { formControlFieldClassName } from \"#/utils/form-control-classes\";\n\nimport { ClearButton } from \"../shared/clear-button\";\nimport { ToggleButton } from \"../shared/toggle-button\";\nimport { ErrorMessage } from \"../shared/error-message\";\nimport { DropdownItem } from \"../shared/dropdown-item\";\nimport { EmptyState } from \"../shared/empty-state\";\nimport { useUrlSearch } from \"./use-url-search\";\nimport { useRepositoryData } from \"./use-repository-data\";\nimport { GenericDropdownMenu } from \"../shared/generic-dropdown-menu\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport RepoIcon from \"#/icons/repo.svg?react\";\nimport { useHomeStore } from \"#/stores/home-store\";\nimport { Typography } from \"#/ui/typography\";\n\nexport interface GitRepoDropdownProps {\n provider: Provider;\n value?: string | null;\n repositoryName?: string | null;\n placeholder?: string;\n className?: string;\n disabled?: boolean;\n onChange?: (repository?: GitRepository) => void;\n}\n\nexport function GitRepoDropdown({\n provider,\n value,\n repositoryName,\n placeholder,\n className,\n disabled = false,\n onChange,\n}: GitRepoDropdownProps) {\n const { t } = useTranslation(\"openhands\");\n const { recentRepositories: storedRecentRepositories } = useHomeStore();\n const [inputValue, setInputValue] = useState(\"\");\n const [localSelectedItem, setLocalSelectedItem] =\n useState<GitRepository | null>(null);\n const debouncedInputValue = useDebounce(inputValue, 300);\n const menuRef = useRef<HTMLUListElement>(null);\n\n // Process search input to handle URLs\n const processedSearchInput = useMemo(() => {\n if (debouncedInputValue.startsWith(\"https://\")) {\n const match = debouncedInputValue.match(\n /https:\\/\\/[^/]+\\/([^/]+\\/[^/]+)/,\n );\n return match ? match[1] : debouncedInputValue;\n }\n return debouncedInputValue;\n }, [debouncedInputValue]);\n\n // URL search functionality\n const { urlSearchResults, isUrlSearchLoading } = useUrlSearch(\n inputValue,\n provider,\n );\n\n // Repository data management\n const {\n repositories,\n selectedRepository,\n fetchNextPage,\n hasNextPage,\n isLoading,\n isFetchingNextPage,\n isError,\n isSearchLoading,\n } = useRepositoryData(\n provider,\n disabled,\n processedSearchInput,\n urlSearchResults,\n inputValue,\n value,\n repositoryName,\n );\n\n /**\n * `selectedRepository` is derived from fetched/search results. A repo selected\n * from \"Most Recent\" may not be present in those results yet, so use the\n * locally selected item as a fallback to keep the UI stable.\n */\n const effectiveSelectedRepository = selectedRepository ?? localSelectedItem;\n\n // Get recent repositories filtered by provider and input keyword\n const recentRepositories = useMemo(() => {\n const allRecentRepos = storedRecentRepositories;\n const providerFilteredRepos = allRecentRepos.filter(\n (repo) => repo.git_provider === provider,\n );\n\n // If no input value, return all recent repos for this provider\n if (!inputValue?.trim()) {\n return providerFilteredRepos;\n }\n\n // Filter by input keyword\n const filterText = inputValue.startsWith(\"https://\")\n ? processedSearchInput\n : inputValue;\n\n return providerFilteredRepos.filter((repo) =>\n repo.full_name.toLowerCase().includes(filterText.toLowerCase()),\n );\n }, [storedRecentRepositories, provider, inputValue, processedSearchInput]);\n\n // Helper function to prioritize recent repositories at the top\n const prioritizeRecentRepositories = useCallback(\n (repoList: GitRepository[]) => {\n const recentRepoIds = new Set(recentRepositories.map((repo) => repo.id));\n const otherRepos = repoList.filter((repo) => !recentRepoIds.has(repo.id));\n return [...recentRepositories, ...otherRepos];\n },\n [recentRepositories],\n );\n\n // Filter repositories based on input value\n const filteredRepositories = useMemo(() => {\n let baseRepositories: GitRepository[];\n\n // If we have URL search results, show them directly (no filtering needed)\n if (urlSearchResults.length > 0) {\n baseRepositories = repositories;\n }\n // If we have a selected repository and the input matches it exactly, show all repositories\n else if (inputValue === selectedRepository?.full_name) {\n baseRepositories = repositories;\n }\n // If no input value, show all repositories\n else if (!inputValue?.trim()) {\n baseRepositories = repositories;\n }\n // For URL inputs, use the processed search input for filtering\n else {\n const filterText = inputValue.startsWith(\"https://\")\n ? processedSearchInput\n : inputValue;\n\n baseRepositories = repositories.filter((repo) =>\n repo.full_name.toLowerCase().includes(filterText.toLowerCase()),\n );\n }\n\n // Prioritize recent repositories at the top\n return prioritizeRecentRepositories(baseRepositories);\n }, [\n repositories,\n inputValue,\n selectedRepository,\n urlSearchResults,\n processedSearchInput,\n prioritizeRecentRepositories,\n ]);\n\n // Handle selection\n const handleSelectionChange = useCallback(\n (selectedItem: GitRepository | null) => {\n setLocalSelectedItem(selectedItem);\n onChange?.(selectedItem || undefined);\n // Update input value to show selected item\n if (selectedItem) {\n setInputValue(selectedItem.full_name);\n }\n },\n [onChange],\n );\n\n // Handle clear selection\n const handleClear = useCallback(() => {\n setLocalSelectedItem(null);\n handleSelectionChange(null);\n setInputValue(\"\");\n }, [handleSelectionChange]);\n\n // Handle scroll to bottom for pagination\n const handleMenuScroll = useCallback(\n (event: React.UIEvent<HTMLUListElement>) => {\n const { scrollTop, scrollHeight, clientHeight } = event.currentTarget;\n const isNearBottom = scrollTop + clientHeight >= scrollHeight - 10;\n\n if (isNearBottom && hasNextPage && !isFetchingNextPage) {\n fetchNextPage();\n }\n },\n [hasNextPage, isFetchingNextPage, fetchNextPage],\n );\n\n const {\n isOpen,\n getToggleButtonProps,\n getMenuProps,\n getInputProps,\n highlightedIndex,\n getItemProps,\n selectedItem,\n } = useCombobox({\n items: filteredRepositories,\n itemToString: (item) => item?.full_name || \"\",\n selectedItem: localSelectedItem,\n onSelectedItemChange: ({ selectedItem: newSelectedItem }) => {\n handleSelectionChange(newSelectedItem);\n },\n inputValue,\n // Override Downshift's default input-click behavior to avoid closing/reopening\n // the menu, which would reset scroll position and break search continuity.\n stateReducer: (state, actionAndChanges) =>\n actionAndChanges.type === useCombobox.stateChangeTypes.InputClick &&\n state.isOpen\n ? { ...actionAndChanges.changes, isOpen: true }\n : actionAndChanges.changes,\n });\n\n // Sync localSelectedItem with external value prop\n useEffect(() => {\n if (selectedRepository) {\n setLocalSelectedItem(selectedRepository);\n } else if (value === null) {\n setLocalSelectedItem(null);\n }\n }, [selectedRepository, value]);\n\n // Initialize input value when selectedRepository changes (but not when user is typing)\n useEffect(() => {\n if (isOpen) return;\n setInputValue(effectiveSelectedRepository?.full_name ?? \"\");\n }, [effectiveSelectedRepository, isOpen]);\n\n const isLoadingState =\n isLoading || isSearchLoading || isFetchingNextPage || isUrlSearchLoading;\n\n const renderItem = (\n item: GitRepository,\n index: number,\n itemHighlightedIndex: number,\n itemSelectedItem: GitRepository | null,\n itemGetItemProps: any, // eslint-disable-line @typescript-eslint/no-explicit-any\n ) => (\n <DropdownItem\n key={item.id}\n item={item}\n index={index}\n isSelected={itemSelectedItem?.id === item.id}\n getItemProps={itemGetItemProps}\n getDisplayText={(repo) => repo.full_name}\n getItemKey={(repo) => repo.id}\n />\n );\n\n const renderEmptyState = (emptyInputValue: string) => (\n <EmptyState\n inputValue={emptyInputValue}\n searchMessage={t(I18nKey.HOME$NO_REPOSITORY_FOUND)}\n emptyMessage={t(I18nKey.COMMON$NO_REPOSITORY)}\n testId=\"git-repo-dropdown-empty\"\n />\n );\n\n // Create sticky top item for recent repositories\n const stickyTopItem = useMemo(() => {\n if (recentRepositories.length === 0) {\n return null;\n }\n\n return (\n <div>\n <Typography.Text className=\"text-xs text-content-2 font-semibold leading-4 pl-2\">\n {t(I18nKey.COMMON$MOST_RECENT)}\n </Typography.Text>\n </div>\n );\n }, [recentRepositories, localSelectedItem, getItemProps, t]);\n\n return (\n <div className={cn(\"relative\", className)}>\n <div className=\"group relative text-[var(--oh-muted)] hover:text-white\">\n <div className=\"absolute left-2 top-1/2 transform -translate-y-1/2 z-10\">\n {isLoadingState ? (\n <div className=\"animate-spin h-4 w-4 border-2 border-transparent border-t-white rounded-full\" />\n ) : (\n <RepoIcon width={16} height={16} />\n )}\n </div>\n <input\n {...getInputProps({\n disabled,\n placeholder:\n placeholder ?? t(I18nKey.COMMON$SEARCH_REPOSITORIES_PLACEHOLDER),\n className: cn(\n formControlFieldClassName,\n \"text-inherit shadow-none pl-7 pr-16 text-sm font-normal leading-5\",\n \"placeholder:text-[var(--oh-muted)]\",\n \"disabled:cursor-not-allowed disabled:opacity-60\",\n ),\n // Direct onChange for cursor position preservation\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => {\n setInputValue(e.target.value);\n },\n })}\n data-testid=\"git-repo-dropdown\"\n />\n\n <div className=\"absolute right-1 top-1/2 transform -translate-y-1/2 flex items-center\">\n {effectiveSelectedRepository && (\n <ClearButton disabled={disabled} onClear={handleClear} />\n )}\n\n <ToggleButton\n isOpen={isOpen}\n disabled={disabled}\n getToggleButtonProps={getToggleButtonProps}\n />\n </div>\n </div>\n\n <GenericDropdownMenu\n isOpen={isOpen}\n filteredItems={filteredRepositories}\n inputValue={inputValue}\n highlightedIndex={highlightedIndex}\n selectedItem={selectedItem}\n getMenuProps={getMenuProps}\n getItemProps={getItemProps}\n onScroll={handleMenuScroll}\n menuRef={menuRef}\n renderItem={renderItem}\n renderEmptyState={renderEmptyState}\n stickyTopItem={stickyTopItem}\n testId=\"git-repo-dropdown-menu\"\n numberOfRecentItems={recentRepositories.length}\n itemKey={(repo) => repo.id}\n />\n\n <ErrorMessage isError={isError} />\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"git-repo-dropdown.cjs","names":[],"sources":["../../../../../src/components/features/home/git-repo-dropdown/git-repo-dropdown.tsx"],"sourcesContent":["import React, {\n useState,\n useMemo,\n useCallback,\n useRef,\n useEffect,\n} from \"react\";\nimport { useCombobox } from \"downshift\";\nimport { useTranslation } from \"react-i18next\";\nimport { Provider } from \"#/types/settings\";\nimport { GitRepository } from \"#/types/git\";\nimport { useDebounce } from \"#/hooks/use-debounce\";\nimport { cn } from \"#/utils/utils\";\nimport { formControlFieldClassName } from \"#/utils/form-control-classes\";\n\nimport { ClearButton } from \"../shared/clear-button\";\nimport { ToggleButton } from \"../shared/toggle-button\";\nimport { ErrorMessage } from \"../shared/error-message\";\nimport { DropdownItem } from \"../shared/dropdown-item\";\nimport { EmptyState } from \"../shared/empty-state\";\nimport { useUrlSearch } from \"./use-url-search\";\nimport { useRepositoryData } from \"./use-repository-data\";\nimport { GenericDropdownMenu } from \"../shared/generic-dropdown-menu\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport RepoIcon from \"#/icons/repo.svg?react\";\nimport { useHomeStore } from \"#/stores/home-store\";\nimport { Typography } from \"#/ui/typography\";\n\nexport interface GitRepoDropdownProps {\n provider: Provider;\n value?: string | null;\n repositoryName?: string | null;\n placeholder?: string;\n className?: string;\n disabled?: boolean;\n onChange?: (repository?: GitRepository) => void;\n}\n\nexport function GitRepoDropdown({\n provider,\n value,\n repositoryName,\n placeholder,\n className,\n disabled = false,\n onChange,\n}: GitRepoDropdownProps) {\n const { t } = useTranslation(\"openhands\");\n const { recentRepositories: storedRecentRepositories } = useHomeStore();\n const [inputValue, setInputValue] = useState(\"\");\n const [localSelectedItem, setLocalSelectedItem] =\n useState<GitRepository | null>(null);\n const debouncedInputValue = useDebounce(inputValue, 300);\n const menuRef = useRef<HTMLUListElement>(null);\n\n // Process search input to handle URLs\n const processedSearchInput = useMemo(() => {\n if (debouncedInputValue.startsWith(\"https://\")) {\n const match = debouncedInputValue.match(\n /https:\\/\\/[^/]+\\/([^/]+\\/[^/]+)/,\n );\n return match ? match[1] : debouncedInputValue;\n }\n return debouncedInputValue;\n }, [debouncedInputValue]);\n\n // URL search functionality\n const { urlSearchResults, isUrlSearchLoading } = useUrlSearch(\n inputValue,\n provider,\n );\n\n // Repository data management\n const {\n repositories,\n selectedRepository,\n fetchNextPage,\n hasNextPage,\n isLoading,\n isFetchingNextPage,\n isError,\n isSearchLoading,\n } = useRepositoryData(\n provider,\n disabled,\n processedSearchInput,\n urlSearchResults,\n inputValue,\n value,\n repositoryName,\n );\n\n /**\n * `selectedRepository` is derived from fetched/search results. A repo selected\n * from \"Most Recent\" may not be present in those results yet, so use the\n * locally selected item as a fallback to keep the UI stable.\n */\n const effectiveSelectedRepository = selectedRepository ?? localSelectedItem;\n\n // Get recent repositories filtered by provider and input keyword\n const recentRepositories = useMemo(() => {\n const allRecentRepos = storedRecentRepositories;\n const providerFilteredRepos = allRecentRepos.filter(\n (repo) => repo.git_provider === provider,\n );\n\n // If no input value, return all recent repos for this provider\n if (!inputValue?.trim()) {\n return providerFilteredRepos;\n }\n\n // Filter by input keyword\n const filterText = inputValue.startsWith(\"https://\")\n ? processedSearchInput\n : inputValue;\n\n return providerFilteredRepos.filter((repo) =>\n repo.full_name.toLowerCase().includes(filterText.toLowerCase()),\n );\n }, [storedRecentRepositories, provider, inputValue, processedSearchInput]);\n\n // Helper function to prioritize recent repositories at the top\n const prioritizeRecentRepositories = useCallback(\n (repoList: GitRepository[]) => {\n const recentRepoIds = new Set(recentRepositories.map((repo) => repo.id));\n const otherRepos = repoList.filter((repo) => !recentRepoIds.has(repo.id));\n return [...recentRepositories, ...otherRepos];\n },\n [recentRepositories],\n );\n\n // Filter repositories based on input value\n const filteredRepositories = useMemo(() => {\n let baseRepositories: GitRepository[];\n\n // If we have URL search results, show them directly (no filtering needed)\n if (urlSearchResults.length > 0) {\n baseRepositories = repositories;\n }\n // If we have a selected repository and the input matches it exactly, show all repositories\n else if (inputValue === selectedRepository?.full_name) {\n baseRepositories = repositories;\n }\n // If no input value, show all repositories\n else if (!inputValue?.trim()) {\n baseRepositories = repositories;\n }\n // For URL inputs, use the processed search input for filtering\n else {\n const filterText = inputValue.startsWith(\"https://\")\n ? processedSearchInput\n : inputValue;\n\n baseRepositories = repositories.filter((repo) =>\n repo.full_name.toLowerCase().includes(filterText.toLowerCase()),\n );\n }\n\n // Prioritize recent repositories at the top\n return prioritizeRecentRepositories(baseRepositories);\n }, [\n repositories,\n inputValue,\n selectedRepository,\n urlSearchResults,\n processedSearchInput,\n prioritizeRecentRepositories,\n ]);\n\n // Handle selection\n const handleSelectionChange = useCallback(\n (selectedItem: GitRepository | null) => {\n setLocalSelectedItem(selectedItem);\n onChange?.(selectedItem || undefined);\n // Update input value to show selected item\n if (selectedItem) {\n setInputValue(selectedItem.full_name);\n }\n },\n [onChange],\n );\n\n // Handle clear selection\n const handleClear = useCallback(() => {\n setLocalSelectedItem(null);\n handleSelectionChange(null);\n setInputValue(\"\");\n }, [handleSelectionChange]);\n\n // Handle scroll to bottom for pagination\n const handleMenuScroll = useCallback(\n (event: React.UIEvent<HTMLUListElement>) => {\n const { scrollTop, scrollHeight, clientHeight } = event.currentTarget;\n const isNearBottom = scrollTop + clientHeight >= scrollHeight - 10;\n\n if (isNearBottom && hasNextPage && !isFetchingNextPage) {\n fetchNextPage();\n }\n },\n [hasNextPage, isFetchingNextPage, fetchNextPage],\n );\n\n const {\n isOpen,\n getToggleButtonProps,\n getMenuProps,\n getInputProps,\n highlightedIndex,\n getItemProps,\n selectedItem,\n } = useCombobox({\n items: filteredRepositories,\n itemToString: (item) => item?.full_name || \"\",\n selectedItem: localSelectedItem,\n onSelectedItemChange: ({ selectedItem: newSelectedItem }) => {\n handleSelectionChange(newSelectedItem);\n },\n inputValue,\n // Override Downshift's default input-click behavior to avoid closing/reopening\n // the menu, which would reset scroll position and break search continuity.\n stateReducer: (state, actionAndChanges) =>\n actionAndChanges.type === useCombobox.stateChangeTypes.InputClick &&\n state.isOpen\n ? { ...actionAndChanges.changes, isOpen: true }\n : actionAndChanges.changes,\n });\n\n // Sync localSelectedItem with external value prop\n useEffect(() => {\n if (selectedRepository) {\n setLocalSelectedItem(selectedRepository);\n } else if (value === null) {\n setLocalSelectedItem(null);\n }\n }, [selectedRepository, value]);\n\n // Initialize input value when selectedRepository changes (but not when user is typing)\n useEffect(() => {\n if (isOpen) return;\n setInputValue(effectiveSelectedRepository?.full_name ?? \"\");\n }, [effectiveSelectedRepository, isOpen]);\n\n const isLoadingState =\n isLoading || isSearchLoading || isFetchingNextPage || isUrlSearchLoading;\n\n const renderItem = (\n item: GitRepository,\n index: number,\n itemHighlightedIndex: number,\n itemSelectedItem: GitRepository | null,\n itemGetItemProps: any, // eslint-disable-line @typescript-eslint/no-explicit-any\n ) => (\n <DropdownItem\n key={item.id}\n item={item}\n index={index}\n isSelected={itemSelectedItem?.id === item.id}\n getItemProps={itemGetItemProps}\n getDisplayText={(repo) => repo.full_name}\n getItemKey={(repo) => repo.id}\n />\n );\n\n const renderEmptyState = (emptyInputValue: string) => (\n <EmptyState\n inputValue={emptyInputValue}\n searchMessage={t(I18nKey.HOME$NO_REPOSITORY_FOUND)}\n emptyMessage={t(I18nKey.COMMON$NO_REPOSITORY)}\n testId=\"git-repo-dropdown-empty\"\n />\n );\n\n // Create sticky top item for recent repositories\n const stickyTopItem = useMemo(() => {\n if (recentRepositories.length === 0) {\n return null;\n }\n\n return (\n <div>\n <Typography.Text className=\"text-xs text-content-2 font-semibold leading-4 pl-2\">\n {t(I18nKey.COMMON$MOST_RECENT)}\n </Typography.Text>\n </div>\n );\n }, [recentRepositories, localSelectedItem, getItemProps, t]);\n\n return (\n <div className={cn(\"relative\", className)}>\n <div className=\"group relative text-[var(--oh-muted)] hover:text-white\">\n <div className=\"absolute left-2 top-1/2 transform -translate-y-1/2 z-10\">\n {isLoadingState ? (\n <div className=\"animate-spin h-4 w-4 border-2 border-transparent border-t-white rounded-full\" />\n ) : (\n <RepoIcon width={16} height={16} />\n )}\n </div>\n <input\n {...getInputProps({\n disabled,\n placeholder:\n placeholder ?? t(I18nKey.COMMON$SEARCH_REPOSITORIES_PLACEHOLDER),\n className: cn(\n formControlFieldClassName,\n \"text-inherit shadow-none pl-7 pr-16 text-sm font-normal leading-5\",\n \"placeholder:text-[var(--oh-muted)]\",\n \"disabled:cursor-not-allowed disabled:opacity-60\",\n ),\n // Direct onChange for cursor position preservation\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => {\n setInputValue(e.target.value);\n },\n })}\n data-testid=\"git-repo-dropdown\"\n />\n\n <div className=\"absolute right-1 top-1/2 transform -translate-y-1/2 flex items-center\">\n {effectiveSelectedRepository && (\n <ClearButton disabled={disabled} onClear={handleClear} />\n )}\n\n <ToggleButton\n isOpen={isOpen}\n disabled={disabled}\n getToggleButtonProps={getToggleButtonProps}\n />\n </div>\n </div>\n\n <GenericDropdownMenu\n isOpen={isOpen}\n filteredItems={filteredRepositories}\n inputValue={inputValue}\n highlightedIndex={highlightedIndex}\n selectedItem={selectedItem}\n getMenuProps={getMenuProps}\n getItemProps={getItemProps}\n onScroll={handleMenuScroll}\n menuRef={menuRef}\n renderItem={renderItem}\n renderEmptyState={renderEmptyState}\n stickyTopItem={stickyTopItem}\n testId=\"git-repo-dropdown-menu\"\n numberOfRecentItems={recentRepositories.length}\n itemKey={(repo) => repo.id}\n />\n\n <ErrorMessage isError={isError} />\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { useTranslation as e } from "../../../../node_modules/react-i18next/dist/es/useTranslation.js";
|
|
2
2
|
import { I18nKey as t } from "../../../../i18n/declaration.js";
|
|
3
3
|
import { cn as n } from "../../../../utils/utils.js";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { formControlFieldClassName as r } from "../../../../utils/form-control-classes.js";
|
|
5
|
+
import { Typography as i } from "../../../../ui/typography.js";
|
|
6
6
|
import { useCombobox as a } from "../../../../node_modules/downshift/dist/downshift.esm.js";
|
|
7
7
|
import { useDebounce as o } from "../../../../hooks/use-debounce.js";
|
|
8
8
|
import { ClearButton as s } from "../shared/clear-button.js";
|
|
@@ -96,7 +96,7 @@ function C({ provider: C, value: w, repositoryName: te, placeholder: T, classNam
|
|
|
96
96
|
searchMessage: k(t.HOME$NO_REPOSITORY_FOUND),
|
|
97
97
|
emptyMessage: k(t.COMMON$NO_REPOSITORY),
|
|
98
98
|
testId: "git-repo-dropdown-empty"
|
|
99
|
-
}), pe = v(() => J.length === 0 ? null : /* @__PURE__ */ x("div", { children: /* @__PURE__ */ x(
|
|
99
|
+
}), pe = v(() => J.length === 0 ? null : /* @__PURE__ */ x("div", { children: /* @__PURE__ */ x(i.Text, {
|
|
100
100
|
className: "text-xs text-content-2 font-semibold leading-4 pl-2",
|
|
101
101
|
children: k(t.COMMON$MOST_RECENT)
|
|
102
102
|
}) }), [
|
|
@@ -122,7 +122,7 @@ function C({ provider: C, value: w, repositoryName: te, placeholder: T, classNam
|
|
|
122
122
|
...se({
|
|
123
123
|
disabled: D,
|
|
124
124
|
placeholder: T ?? k(t.COMMON$SEARCH_REPOSITORIES_PLACEHOLDER),
|
|
125
|
-
className: n(
|
|
125
|
+
className: n(r, "text-inherit shadow-none pl-7 pr-16 text-sm font-normal leading-5", "placeholder:text-[var(--oh-muted)]", "disabled:cursor-not-allowed disabled:opacity-60"),
|
|
126
126
|
onChange: (e) => {
|
|
127
127
|
M(e.target.value);
|
|
128
128
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../node_modules/lucide-react/dist/esm/icons/bot.cjs`),t=require(`../../utils/utils.cjs`);let
|
|
1
|
+
require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../node_modules/lucide-react/dist/esm/icons/bot.cjs`),t=require(`../../utils/utils.cjs`),n=require(`../../icons/slack.cjs`);let r=require(`react/jsx-runtime`);var i={xs:`h-4 w-4 rounded [&>svg]:h-2.5 [&>svg]:w-2.5`,sm:`h-5 w-5 rounded-md [&>svg]:h-3 [&>svg]:w-3`,md:`h-10 w-10 rounded-lg [&>svg]:h-5 [&>svg]:w-5`},a={slack:n.default};function o({entry:n,size:o=`md`,className:s,fallback:c,testId:l}){let u=n?a[n.id]:void 0;return(0,r.jsx)(`span`,{"aria-hidden":`true`,title:n?.name,"data-testid":l,className:t.cn(`inline-flex shrink-0 items-center justify-center overflow-hidden`,`border border-white/10 shadow-[inset_0_1px_0_rgba(255,255,255,0.18)]`,i[o],s),style:{backgroundColor:n?.iconBg??`var(--oh-color-tertiary)`,color:n?.iconColor??`#FFFFFF`},children:u?(0,r.jsx)(u,{}):n?.logoUrl?(0,r.jsx)(`img`,{src:n.logoUrl,alt:`${n.name} logo`,className:`h-full w-full object-contain p-[22%]`,onError:e=>{let t=e.currentTarget;t.style.display=`none`}}):c??(0,r.jsx)(e.Bot,{className:`h-5 w-5`,strokeWidth:2.25})})}exports.McpLogoBadge=o;
|
|
2
2
|
//# sourceMappingURL=mcp-logo-badge.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-logo-badge.cjs","names":[],"sources":["../../../src/components/features/mcp-logo-badge.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { Bot } from \"lucide-react\";\nimport type { IntegrationCatalogEntry } from \"@openhands/extensions/integrations\";\nimport { cn } from \"#/utils/utils\";\n\ntype McpLogoEntry = Pick<\n IntegrationCatalogEntry,\n \"id\" | \"name\" | \"iconBg\" | \"iconColor\" | \"logoUrl\"\n>;\n\nexport type { McpLogoEntry };\n\ninterface McpLogoBadgeProps {\n entry?: McpLogoEntry | null;\n size?: \"xs\" | \"sm\" | \"md\";\n className?: string;\n fallback?: ReactNode;\n testId?: string;\n}\n\nconst sizeClassNames = {\n xs: \"h-4 w-4 rounded [&>svg]:h-2.5 [&>svg]:w-2.5\",\n sm: \"h-5 w-5 rounded-md [&>svg]:h-3 [&>svg]:w-3\",\n md: \"h-10 w-10 rounded-lg [&>svg]:h-5 [&>svg]:w-5\",\n};\n\nexport function McpLogoBadge({\n entry,\n size = \"md\",\n className,\n fallback,\n testId,\n}: McpLogoBadgeProps) {\n return (\n <span\n aria-hidden=\"true\"\n title={entry?.name}\n data-testid={testId}\n className={cn(\n \"inline-flex shrink-0 items-center justify-center overflow-hidden\",\n \"border border-white/10 shadow-[inset_0_1px_0_rgba(255,255,255,0.18)]\",\n sizeClassNames[size],\n className,\n )}\n style={{\n backgroundColor: entry?.iconBg ?? \"var(--oh-color-tertiary)\",\n color: entry?.iconColor ?? \"#FFFFFF\",\n }}\n >\n {entry?.logoUrl ? (\n <img\n src={entry.logoUrl}\n alt={`${entry.name} logo`}\n className=\"h-full w-full object-contain p-[22%]\"\n onError={(e) => {\n const image = e.currentTarget;\n image.style.display = \"none\";\n }}\n />\n ) : (\n (fallback ?? <Bot className=\"h-5 w-5\" strokeWidth={2.25} />)\n )}\n </span>\n );\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"mcp-logo-badge.cjs","names":[],"sources":["../../../src/components/features/mcp-logo-badge.tsx"],"sourcesContent":["import type { ComponentType, ReactNode, SVGProps } from \"react\";\nimport { Bot } from \"lucide-react\";\nimport type { IntegrationCatalogEntry } from \"@openhands/extensions/integrations\";\nimport SlackIcon from \"#/icons/slack.svg?react\";\nimport { cn } from \"#/utils/utils\";\n\ntype McpLogoEntry = Pick<\n IntegrationCatalogEntry,\n \"id\" | \"name\" | \"iconBg\" | \"iconColor\" | \"logoUrl\"\n>;\n\nexport type { McpLogoEntry };\n\ninterface McpLogoBadgeProps {\n entry?: McpLogoEntry | null;\n size?: \"xs\" | \"sm\" | \"md\";\n className?: string;\n fallback?: ReactNode;\n testId?: string;\n}\n\nconst sizeClassNames = {\n xs: \"h-4 w-4 rounded [&>svg]:h-2.5 [&>svg]:w-2.5\",\n sm: \"h-5 w-5 rounded-md [&>svg]:h-3 [&>svg]:w-3\",\n md: \"h-10 w-10 rounded-lg [&>svg]:h-5 [&>svg]:w-5\",\n};\n\n// Catalog entries whose remote logoUrl is unreliable (e.g. Slack's was removed\n// from cdn.simpleicons.org and now 404s) render a bundled mark instead, keyed\n// by IntegrationCatalogEntry.id.\nconst LOCAL_LOGO_ICONS: Record<\n string,\n ComponentType<SVGProps<SVGSVGElement>>\n> = {\n slack: SlackIcon,\n};\n\nexport function McpLogoBadge({\n entry,\n size = \"md\",\n className,\n fallback,\n testId,\n}: McpLogoBadgeProps) {\n const LocalLogoIcon = entry ? LOCAL_LOGO_ICONS[entry.id] : undefined;\n return (\n <span\n aria-hidden=\"true\"\n title={entry?.name}\n data-testid={testId}\n className={cn(\n \"inline-flex shrink-0 items-center justify-center overflow-hidden\",\n \"border border-white/10 shadow-[inset_0_1px_0_rgba(255,255,255,0.18)]\",\n sizeClassNames[size],\n className,\n )}\n style={{\n backgroundColor: entry?.iconBg ?? \"var(--oh-color-tertiary)\",\n color: entry?.iconColor ?? \"#FFFFFF\",\n }}\n >\n {LocalLogoIcon ? (\n <LocalLogoIcon />\n ) : entry?.logoUrl ? (\n <img\n src={entry.logoUrl}\n alt={`${entry.name} logo`}\n className=\"h-full w-full object-contain p-[22%]\"\n onError={(e) => {\n const image = e.currentTarget;\n image.style.display = \"none\";\n }}\n />\n ) : (\n (fallback ?? <Bot className=\"h-5 w-5\" strokeWidth={2.25} />)\n )}\n </span>\n );\n}\n"],"mappings":"mOAqBA,IAAM,EAAiB,CACrB,GAAI,8CACJ,GAAI,6CACJ,GAAI,+CACL,CAKK,EAGF,CACF,MAAO,EAAA,QACR,CAED,SAAgB,EAAa,CAC3B,QACA,OAAO,KACP,YACA,WACA,UACoB,CACpB,IAAM,EAAgB,EAAQ,EAAiB,EAAM,IAAM,IAAA,GAC3D,OACE,EAAA,EAAA,KAAC,OAAD,CACE,cAAY,OACZ,MAAO,GAAO,KACd,cAAa,EACb,UAAW,EAAA,GACT,mEACA,uEACA,EAAe,GACf,EACD,CACD,MAAO,CACL,gBAAiB,GAAO,QAAU,2BAClC,MAAO,GAAO,WAAa,UAC5B,UAEA,GACC,EAAA,EAAA,KAAC,EAAD,EAAiB,CAAA,CACf,GAAO,SACT,EAAA,EAAA,KAAC,MAAD,CACE,IAAK,EAAM,QACX,IAAK,GAAG,EAAM,KAAK,OACnB,UAAU,uCACV,QAAU,GAAM,CACd,IAAM,EAAQ,EAAE,cAChB,EAAM,MAAM,QAAU,QAExB,CAAA,CAED,IAAY,EAAA,EAAA,KAAC,EAAA,IAAD,CAAK,UAAU,UAAU,YAAa,KAAQ,CAAA,CAExD,CAAA"}
|
|
@@ -1,37 +1,39 @@
|
|
|
1
1
|
import { Bot as e } from "../../node_modules/lucide-react/dist/esm/icons/bot.js";
|
|
2
2
|
import { cn as t } from "../../utils/utils.js";
|
|
3
|
-
import
|
|
3
|
+
import n from "../../icons/slack.js";
|
|
4
|
+
import { jsx as r } from "react/jsx-runtime";
|
|
4
5
|
//#region src/components/features/mcp-logo-badge.tsx
|
|
5
|
-
var
|
|
6
|
+
var i = {
|
|
6
7
|
xs: "h-4 w-4 rounded [&>svg]:h-2.5 [&>svg]:w-2.5",
|
|
7
8
|
sm: "h-5 w-5 rounded-md [&>svg]:h-3 [&>svg]:w-3",
|
|
8
9
|
md: "h-10 w-10 rounded-lg [&>svg]:h-5 [&>svg]:w-5"
|
|
9
|
-
};
|
|
10
|
-
function
|
|
11
|
-
|
|
10
|
+
}, a = { slack: n };
|
|
11
|
+
function o({ entry: n, size: o = "md", className: s, fallback: c, testId: l }) {
|
|
12
|
+
let u = n ? a[n.id] : void 0;
|
|
13
|
+
return /* @__PURE__ */ r("span", {
|
|
12
14
|
"aria-hidden": "true",
|
|
13
|
-
title:
|
|
14
|
-
"data-testid":
|
|
15
|
-
className: t("inline-flex shrink-0 items-center justify-center overflow-hidden", "border border-white/10 shadow-[inset_0_1px_0_rgba(255,255,255,0.18)]",
|
|
15
|
+
title: n?.name,
|
|
16
|
+
"data-testid": l,
|
|
17
|
+
className: t("inline-flex shrink-0 items-center justify-center overflow-hidden", "border border-white/10 shadow-[inset_0_1px_0_rgba(255,255,255,0.18)]", i[o], s),
|
|
16
18
|
style: {
|
|
17
|
-
backgroundColor:
|
|
18
|
-
color:
|
|
19
|
+
backgroundColor: n?.iconBg ?? "var(--oh-color-tertiary)",
|
|
20
|
+
color: n?.iconColor ?? "#FFFFFF"
|
|
19
21
|
},
|
|
20
|
-
children:
|
|
21
|
-
src:
|
|
22
|
-
alt: `${
|
|
22
|
+
children: u ? /* @__PURE__ */ r(u, {}) : n?.logoUrl ? /* @__PURE__ */ r("img", {
|
|
23
|
+
src: n.logoUrl,
|
|
24
|
+
alt: `${n.name} logo`,
|
|
23
25
|
className: "h-full w-full object-contain p-[22%]",
|
|
24
26
|
onError: (e) => {
|
|
25
27
|
let t = e.currentTarget;
|
|
26
28
|
t.style.display = "none";
|
|
27
29
|
}
|
|
28
|
-
}) :
|
|
30
|
+
}) : c ?? /* @__PURE__ */ r(e, {
|
|
29
31
|
className: "h-5 w-5",
|
|
30
32
|
strokeWidth: 2.25
|
|
31
33
|
})
|
|
32
34
|
});
|
|
33
35
|
}
|
|
34
36
|
//#endregion
|
|
35
|
-
export {
|
|
37
|
+
export { o as McpLogoBadge };
|
|
36
38
|
|
|
37
39
|
//# sourceMappingURL=mcp-logo-badge.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-logo-badge.js","names":[],"sources":["../../../src/components/features/mcp-logo-badge.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport { Bot } from \"lucide-react\";\nimport type { IntegrationCatalogEntry } from \"@openhands/extensions/integrations\";\nimport { cn } from \"#/utils/utils\";\n\ntype McpLogoEntry = Pick<\n IntegrationCatalogEntry,\n \"id\" | \"name\" | \"iconBg\" | \"iconColor\" | \"logoUrl\"\n>;\n\nexport type { McpLogoEntry };\n\ninterface McpLogoBadgeProps {\n entry?: McpLogoEntry | null;\n size?: \"xs\" | \"sm\" | \"md\";\n className?: string;\n fallback?: ReactNode;\n testId?: string;\n}\n\nconst sizeClassNames = {\n xs: \"h-4 w-4 rounded [&>svg]:h-2.5 [&>svg]:w-2.5\",\n sm: \"h-5 w-5 rounded-md [&>svg]:h-3 [&>svg]:w-3\",\n md: \"h-10 w-10 rounded-lg [&>svg]:h-5 [&>svg]:w-5\",\n};\n\nexport function McpLogoBadge({\n entry,\n size = \"md\",\n className,\n fallback,\n testId,\n}: McpLogoBadgeProps) {\n return (\n <span\n aria-hidden=\"true\"\n title={entry?.name}\n data-testid={testId}\n className={cn(\n \"inline-flex shrink-0 items-center justify-center overflow-hidden\",\n \"border border-white/10 shadow-[inset_0_1px_0_rgba(255,255,255,0.18)]\",\n sizeClassNames[size],\n className,\n )}\n style={{\n backgroundColor: entry?.iconBg ?? \"var(--oh-color-tertiary)\",\n color: entry?.iconColor ?? \"#FFFFFF\",\n }}\n >\n {entry?.logoUrl ? (\n <img\n src={entry.logoUrl}\n alt={`${entry.name} logo`}\n className=\"h-full w-full object-contain p-[22%]\"\n onError={(e) => {\n const image = e.currentTarget;\n image.style.display = \"none\";\n }}\n />\n ) : (\n (fallback ?? <Bot className=\"h-5 w-5\" strokeWidth={2.25} />)\n )}\n </span>\n );\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"mcp-logo-badge.js","names":[],"sources":["../../../src/components/features/mcp-logo-badge.tsx"],"sourcesContent":["import type { ComponentType, ReactNode, SVGProps } from \"react\";\nimport { Bot } from \"lucide-react\";\nimport type { IntegrationCatalogEntry } from \"@openhands/extensions/integrations\";\nimport SlackIcon from \"#/icons/slack.svg?react\";\nimport { cn } from \"#/utils/utils\";\n\ntype McpLogoEntry = Pick<\n IntegrationCatalogEntry,\n \"id\" | \"name\" | \"iconBg\" | \"iconColor\" | \"logoUrl\"\n>;\n\nexport type { McpLogoEntry };\n\ninterface McpLogoBadgeProps {\n entry?: McpLogoEntry | null;\n size?: \"xs\" | \"sm\" | \"md\";\n className?: string;\n fallback?: ReactNode;\n testId?: string;\n}\n\nconst sizeClassNames = {\n xs: \"h-4 w-4 rounded [&>svg]:h-2.5 [&>svg]:w-2.5\",\n sm: \"h-5 w-5 rounded-md [&>svg]:h-3 [&>svg]:w-3\",\n md: \"h-10 w-10 rounded-lg [&>svg]:h-5 [&>svg]:w-5\",\n};\n\n// Catalog entries whose remote logoUrl is unreliable (e.g. Slack's was removed\n// from cdn.simpleicons.org and now 404s) render a bundled mark instead, keyed\n// by IntegrationCatalogEntry.id.\nconst LOCAL_LOGO_ICONS: Record<\n string,\n ComponentType<SVGProps<SVGSVGElement>>\n> = {\n slack: SlackIcon,\n};\n\nexport function McpLogoBadge({\n entry,\n size = \"md\",\n className,\n fallback,\n testId,\n}: McpLogoBadgeProps) {\n const LocalLogoIcon = entry ? LOCAL_LOGO_ICONS[entry.id] : undefined;\n return (\n <span\n aria-hidden=\"true\"\n title={entry?.name}\n data-testid={testId}\n className={cn(\n \"inline-flex shrink-0 items-center justify-center overflow-hidden\",\n \"border border-white/10 shadow-[inset_0_1px_0_rgba(255,255,255,0.18)]\",\n sizeClassNames[size],\n className,\n )}\n style={{\n backgroundColor: entry?.iconBg ?? \"var(--oh-color-tertiary)\",\n color: entry?.iconColor ?? \"#FFFFFF\",\n }}\n >\n {LocalLogoIcon ? (\n <LocalLogoIcon />\n ) : entry?.logoUrl ? (\n <img\n src={entry.logoUrl}\n alt={`${entry.name} logo`}\n className=\"h-full w-full object-contain p-[22%]\"\n onError={(e) => {\n const image = e.currentTarget;\n image.style.display = \"none\";\n }}\n />\n ) : (\n (fallback ?? <Bot className=\"h-5 w-5\" strokeWidth={2.25} />)\n )}\n </span>\n );\n}\n"],"mappings":";;;;;AAqBA,IAAM,IAAiB;CACrB,IAAI;CACJ,IAAI;CACJ,IAAI;CACL,EAKK,IAGF,EACF,OAAO,GACR;AAED,SAAgB,EAAa,EAC3B,UACA,UAAO,MACP,cACA,aACA,aACoB;CACpB,IAAM,IAAgB,IAAQ,EAAiB,EAAM,MAAM,KAAA;AAC3D,QACE,kBAAC,QAAD;EACE,eAAY;EACZ,OAAO,GAAO;EACd,eAAa;EACb,WAAW,EACT,oEACA,wEACA,EAAe,IACf,EACD;EACD,OAAO;GACL,iBAAiB,GAAO,UAAU;GAClC,OAAO,GAAO,aAAa;GAC5B;YAEA,IACC,kBAAC,GAAD,EAAiB,CAAA,GACf,GAAO,UACT,kBAAC,OAAD;GACE,KAAK,EAAM;GACX,KAAK,GAAG,EAAM,KAAK;GACnB,WAAU;GACV,UAAU,MAAM;IACd,IAAM,IAAQ,EAAE;AAChB,MAAM,MAAM,UAAU;;GAExB,CAAA,GAED,KAAY,kBAAC,GAAD;GAAK,WAAU;GAAU,aAAa;GAAQ,CAAA;EAExD,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require(`../../../_virtual/_rolldown/runtime.cjs`),t=require(`../../../node_modules/react-i18next/dist/es/useTranslation.cjs`),n=require(`../../../i18n/declaration.cjs`),r=require(`../../../utils/utils.cjs`),i=require(`../../../utils/retrieve-axios-error-message.cjs`),a=require(`../../../utils/custom-toast-handlers.cjs`),o=require(`../../../contexts/active-backend-context.cjs`),s=require(`../../shared/modals/modal-backdrop.cjs`),c=require(`../../../utils/modal-classes.cjs`),l=require(`../../shared/modals/modal-close-button.cjs`),u=require(`../../shared/modals/confirmation-modal.cjs`),d=require(`../../../hooks/mutation/use-delete-mcp-server.cjs`),f=require(`../../../hooks/mutation/use-add-mcp-server.cjs`),p=require(`../../../hooks/mutation/use-test-mcp-server.cjs`),
|
|
1
|
+
const e=require(`../../../_virtual/_rolldown/runtime.cjs`),t=require(`../../../node_modules/react-i18next/dist/es/useTranslation.cjs`),n=require(`../../../i18n/declaration.cjs`),r=require(`../../../utils/utils.cjs`),i=require(`../../../utils/retrieve-axios-error-message.cjs`),a=require(`../../../utils/custom-toast-handlers.cjs`),o=require(`../../../contexts/active-backend-context.cjs`),s=require(`../../shared/modals/modal-backdrop.cjs`),c=require(`../../../utils/modal-classes.cjs`),l=require(`../../shared/modals/modal-close-button.cjs`),u=require(`../../shared/modals/confirmation-modal.cjs`),d=require(`../../../hooks/mutation/use-delete-mcp-server.cjs`),f=require(`../../../hooks/mutation/use-add-mcp-server.cjs`),p=require(`../../../api/mcp-service/mcp-service.api.cjs`),m=require(`../../../hooks/mutation/use-test-mcp-server.cjs`),h=require(`../settings/mcp-settings/mcp-server-form.cjs`),g=require(`../../../hooks/mutation/use-update-mcp-server.cjs`);let _=require(`react`);_=e.__toESM(_,1);let v=require(`react/jsx-runtime`);function y({server:e,existingServers:y,onClose:b}){let{t:x}=t.useTranslation(`openhands`),{mutate:S,isPending:C}=f.useAddMcpServer(),{mutate:w,isPending:T}=g.useUpdateMcpServer(),{mutate:E,isPending:D}=d.useDeleteMcpServer(),{mutate:O,isPending:k,data:A,reset:j}=m.useTestMcpServer(),[M,N]=_.default.useState(!1),[P,F]=_.default.useState(null),[I,L]=_.default.useState(!1),{backend:R}=o.useActiveBackend(),z=R.kind===`cloud`,B=!!e.id,V=C||T||D,H=V||k||I||M,U=e=>{switch(e.error_kind){case`timeout`:return x(n.I18nKey.MCP$TEST_ERROR_TIMEOUT);case`connection`:return x(n.I18nKey.MCP$TEST_ERROR_CONNECTION);case`credentials`:return x(n.I18nKey.MCP$TEST_ERROR_CREDENTIALS,{error:e.error});default:return x(n.I18nKey.MCP$TEST_ERROR_UNKNOWN,{error:e.error})}},W=_.default.useMemo(()=>{let e=P??A;return e?e.ok?{ok:!0,text:x(n.I18nKey.MCP$TEST_SUCCESS,{count:e.tools.length})}:{ok:!1,text:U(e)}:null},[P,A,x]),G=e=>{a.displayErrorToast(i.retrieveAxiosErrorMessage(e)||x(n.I18nKey.ERROR$GENERIC))};return(0,v.jsxs)(v.Fragment,{children:[(0,v.jsx)(s.ModalBackdrop,{onClose:H?void 0:b,closeOnEscape:!H,"aria-label":x(B?n.I18nKey.MCP$EDIT_CUSTOM_TITLE:n.I18nKey.MCP$ADD_CUSTOM_TITLE),children:(0,v.jsxs)(`div`,{"data-testid":`mcp-custom-editor`,className:`relative bg-base-secondary p-6 rounded-xl border border-[var(--oh-border)] w-[520px] max-w-[90vw] max-h-[90vh] overflow-y-auto custom-scrollbar`,children:[(0,v.jsx)(l.ModalCloseButton,{onClose:b,testId:`mcp-custom-editor-close`,disabled:H}),(0,v.jsx)(`h2`,{className:r.cn(`mb-4 pr-6`,c.modalTitleLgClassName),children:x(B?n.I18nKey.MCP$EDIT_CUSTOM_TITLE:n.I18nKey.MCP$ADD_CUSTOM_TITLE)}),(0,v.jsx)(h.MCPServerForm,{mode:B?`edit`:`add`,server:B?e:void 0,existingServers:y,onSubmit:t=>{if(j(),F(null),t.auth?.strategy===`oauth2`){L(!0),p.default.authorizeOAuth(t).then(n=>{if(F(n),!n.ok)return;let r=n.oauth_state?{...t,auth:{...t.auth,state:n.oauth_state}}:t;B?w({serverId:e.id,server:r},{onSuccess:b,onError:G}):S(r,{onSuccess:b,onError:G})}).catch(G).finally(()=>L(!1));return}O(t,{onSuccess:n=>{if(!n.ok)return;let r=n.oauth_state&&t.auth?.strategy===`oauth2`?{...t,auth:{...t.auth,state:n.oauth_state}}:t;B?w({serverId:e.id,server:r},{onSuccess:b,onError:G}):S(r,{onSuccess:b,onError:G})},onError:G})},onCancel:b,onDelete:B?()=>N(!0):void 0,isActionDisabled:V,onTest:z?void 0:e=>{if(F(null),e.auth?.strategy===`oauth2`&&!z){L(!0),p.default.authorizeOAuth(e).then(F).catch(G).finally(()=>L(!1));return}O(e)},isTestPending:k||I,testMessage:z?null:W})]})}),M?(0,v.jsx)(u.ConfirmationModal,{text:x(n.I18nKey.SETTINGS$MCP_CONFIRM_DELETE),onCancel:()=>N(!1),onConfirm:()=>{E(e,{onSuccess:()=>{a.displaySuccessToast(x(n.I18nKey.MCP$REMOVE_SUCCESS)),N(!1),b()},onError:e=>{G(e),N(!1)}})},isConfirming:D}):null]})}exports.CustomServerEditor=y;
|
|
2
2
|
//# sourceMappingURL=custom-server-editor.cjs.map
|