@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-profiles-service.api.js","names":[],"sources":["../../../src/api/cloud/agent-profiles-service.api.ts"],"sourcesContent":["import type {\n AgentProfileSaveInput,\n AgentProfileListResponse,\n AgentProfileDetailResponse,\n AgentProfileMutationResponse,\n ActivateAgentProfileResponse,\n} from \"@openhands/typescript-client\";\nimport { getActiveBackend } from \"../backend-registry/active-store\";\nimport type { Backend } from \"../backend-registry/types\";\nimport { callCloudProxy } from \"./proxy\";\n\n/**\n * Cloud transport for the Agent Profiles surface. The cloud enterprise\n * app-server exposes the SAME `/api/agent-profiles` contract as the local\n * agent-server (paths + response shapes mirror `agent_profiles_router.py`),\n * but cloud calls authenticate with the backend's bearer token + `X-Org-Id`\n * and must go through {@link callCloudProxy} — not the direct\n * `AgentProfilesClient` (which speaks `X-Session-API-Key` to a local host).\n *\n * The org is resolved server-side from the auth session (`EFFECTIVE_ORG_ID`),\n * so — unlike org LLM profiles — no `{org_id}` path segment is needed here.\n *\n * Mirrors the pattern in `cloud/settings-service.api.ts`. Consumed by\n * `AgentProfilesService` on the cloud path.\n */\n\nconst BASE = \"/api/agent-profiles\";\n\nfunction activeCloudBackend(): Backend {\n const active = getActiveBackend().backend;\n if (active.kind !== \"cloud\") {\n throw new Error(\"Cloud agent-profile call requires a cloud backend.\");\n }\n return active;\n}\n\nexport async function listCloudAgentProfiles(): Promise<AgentProfileListResponse> {\n return callCloudProxy<AgentProfileListResponse>({\n backend: activeCloudBackend(),\n method: \"GET\",\n path: BASE,\n });\n}\n\nexport async function getCloudAgentProfile(\n name: string,\n): Promise<AgentProfileDetailResponse> {\n return callCloudProxy<AgentProfileDetailResponse>({\n backend: activeCloudBackend(),\n method: \"GET\",\n path: `${BASE}/${encodeURIComponent(name)}`,\n });\n}\n\nexport async function saveCloudAgentProfile(\n name: string,\n profile: AgentProfileSaveInput,\n): Promise<AgentProfileMutationResponse> {\n return callCloudProxy<AgentProfileMutationResponse>({\n backend: activeCloudBackend(),\n method: \"POST\",\n path: `${BASE}/${encodeURIComponent(name)}`,\n body: profile,\n });\n}\n\nexport async function deleteCloudAgentProfile(\n name: string,\n): Promise<AgentProfileMutationResponse> {\n return callCloudProxy<AgentProfileMutationResponse>({\n backend: activeCloudBackend(),\n method: \"DELETE\",\n path: `${BASE}/${encodeURIComponent(name)}`,\n });\n}\n\nexport async function renameCloudAgentProfile(\n name: string,\n newName: string,\n): Promise<AgentProfileMutationResponse> {\n return callCloudProxy<AgentProfileMutationResponse>({\n backend: activeCloudBackend(),\n method: \"POST\",\n path: `${BASE}/${encodeURIComponent(name)}/rename`,\n body: { new_name: newName },\n });\n}\n\nexport async function activateCloudAgentProfile(\n profileId: string,\n): Promise<ActivateAgentProfileResponse> {\n return callCloudProxy<ActivateAgentProfileResponse>({\n backend: activeCloudBackend(),\n method: \"POST\",\n path: `${BASE}/${encodeURIComponent(profileId)}/activate`,\n body: {},\n });\n}\n"],"mappings":";;;AA0BA,IAAM,IAAO;AAEb,SAAS,IAA8B;CACrC,IAAM,IAAS,GAAkB,CAAC;AAClC,KAAI,EAAO,SAAS,QAClB,OAAU,MAAM,qDAAqD;AAEvE,QAAO;;AAGT,eAAsB,IAA4D;AAChF,QAAO,EAAyC;EAC9C,SAAS,GAAoB;EAC7B,QAAQ;EACR,MAAM;EACP,CAAC;;AAGJ,eAAsB,EACpB,GACqC;AACrC,QAAO,EAA2C;EAChD,SAAS,GAAoB;EAC7B,QAAQ;EACR,MAAM,GAAG,EAAK,GAAG,mBAAmB,EAAK;EAC1C,CAAC;;AAGJ,eAAsB,EACpB,GACA,GACuC;AACvC,QAAO,EAA6C;EAClD,SAAS,GAAoB;EAC7B,QAAQ;EACR,MAAM,GAAG,EAAK,GAAG,mBAAmB,EAAK;EACzC,MAAM;EACP,CAAC;;AAGJ,eAAsB,EACpB,GACuC;AACvC,QAAO,EAA6C;EAClD,SAAS,GAAoB;EAC7B,QAAQ;EACR,MAAM,GAAG,EAAK,GAAG,mBAAmB,EAAK;EAC1C,CAAC;;AAGJ,eAAsB,EACpB,GACA,GACuC;AACvC,QAAO,EAA6C;EAClD,SAAS,GAAoB;EAC7B,QAAQ;EACR,MAAM,GAAG,EAAK,GAAG,mBAAmB,EAAK,CAAC;EAC1C,MAAM,EAAE,UAAU,GAAS;EAC5B,CAAC;;AAGJ,eAAsB,EACpB,GACuC;AACvC,QAAO,EAA6C;EAClD,SAAS,GAAoB;EAC7B,QAAQ;EACR,MAAM,GAAG,EAAK,GAAG,mBAAmB,EAAU,CAAC;EAC/C,MAAM,EAAE;EACT,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../backend-registry/active-store.cjs`),t=require(`../../node_modules/axios/lib/axios.cjs`),n=require(`./proxy.cjs`);function r(e){return{items:e?.items??[],currentOrgId:e?.current_org_id??null}}function i(t){if(t)return t;let n=e.getActiveBackend().backend;if(n.kind!==`cloud`)throw Error(`Cloud organization calls require a cloud backend. Active backend is local.`);return n}async function a(e){return r(await n.callCloudProxy({backend:i(e),method:`GET`,path:`/api/organizations`}))}async function o(e){let r=i(e);try{return{orgId:(await n.callCloudProxy({backend:r,method:`GET`,path:`/api/keys/current`}))?.org_id??null,isLegacyKey:!1}}catch(e){if(t.default.isAxiosError(e)&&e.response?.status===400)return{orgId:null,isLegacyKey:!0};throw e}}async function s(e,t){let r=await n.callCloudProxy({backend:i(t),method:`GET`,path:`/api/organizations/${encodeURIComponent(e)}/me`});return{orgId:r?.org_id??e,userId:r?.user_id
|
|
1
|
+
require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../backend-registry/active-store.cjs`),t=require(`../../node_modules/axios/lib/axios.cjs`),n=require(`./proxy.cjs`);function r(e){return{items:e?.items??[],currentOrgId:e?.current_org_id??null}}function i(t){if(t)return t;let n=e.getActiveBackend().backend;if(n.kind!==`cloud`)throw Error(`Cloud organization calls require a cloud backend. Active backend is local.`);return n}async function a(e){return r(await n.callCloudProxy({backend:i(e),method:`GET`,path:`/api/organizations`}))}async function o(e){let r=i(e);try{return{orgId:(await n.callCloudProxy({backend:r,method:`GET`,path:`/api/keys/current`}))?.org_id??null,isLegacyKey:!1}}catch(e){if(t.default.isAxiosError(e)&&e.response?.status===400)return{orgId:null,isLegacyKey:!0};throw e}}async function s(e,t){let r=await n.callCloudProxy({backend:i(t),method:`GET`,path:`/api/organizations/${encodeURIComponent(e)}/me`});return{orgId:r?.org_id??e,userId:r?.user_id??``,role:r?.role??null,permissions:Array.isArray(r?.permissions)?r.permissions:null}}exports.getCloudOrganizationMe=s,exports.getCloudOrganizations=a,exports.getCurrentCloudApiKey=o;
|
|
2
2
|
//# sourceMappingURL=organization-service.api.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"organization-service.api.cjs","names":[],"sources":["../../../src/api/cloud/organization-service.api.ts"],"sourcesContent":["import axios from \"axios\";\nimport { getActiveBackend } from \"../backend-registry/active-store\";\nimport type { Backend } from \"../backend-registry/types\";\nimport { callCloudProxy } from \"./proxy\";\nimport type {\n CloudApiKeyMetadata,\n CloudOrganization,\n CloudOrganizationsResponse,\n} from \"./types\";\n\ninterface OrganizationsResult {\n items: CloudOrganization[];\n currentOrgId: string | null;\n}\n\nfunction normalizeResult(\n data: CloudOrganizationsResponse | undefined | null,\n): OrganizationsResult {\n return {\n items: data?.items ?? [],\n currentOrgId: data?.current_org_id ?? null,\n };\n}\n\nfunction resolveBackend(backend?: Backend): Backend {\n if (backend) return backend;\n const active = getActiveBackend().backend;\n if (active.kind !== \"cloud\") {\n throw new Error(\n \"Cloud organization calls require a cloud backend. Active backend is local.\",\n );\n }\n return active;\n}\n\n/**\n * Fetch the org list for a cloud backend. With no argument, uses the active\n * cloud backend; pass `backend` explicitly to fetch for an inactive cloud\n * (used by the selector to flatten all cloud rows).\n *\n * Calls the cloud API directly with the backend's bearer token.\n */\nexport async function getCloudOrganizations(\n backend?: Backend,\n): Promise<OrganizationsResult> {\n const target = resolveBackend(backend);\n const data = await callCloudProxy<CloudOrganizationsResponse>({\n backend: target,\n method: \"GET\",\n path: \"/api/organizations\",\n });\n return normalizeResult(data);\n}\n\n/**\n * Fetch metadata for the API key used to authenticate this cloud backend.\n * The returned `orgId` is the single org the key is authorized to act on\n * (the cloud contract: one key → one org).\n *\n * Legacy keys minted before per-key org binding existed cause the upstream\n * to return HTTP 400 — we surface that as `isLegacyKey: true` with a null\n * `orgId` so the caller can fall back to the unfiltered behavior. Other\n * statuses (401 revoked, 5xx outage) propagate so React Query can mark\n * the query as failed and the selector can render the no-org-known row.\n */\nexport async function getCurrentCloudApiKey(\n backend?: Backend,\n): Promise<{ orgId: string | null; isLegacyKey: boolean }> {\n const target = resolveBackend(backend);\n try {\n const data = await callCloudProxy<CloudApiKeyMetadata>({\n backend: target,\n method: \"GET\",\n path: \"/api/keys/current\",\n });\n return { orgId: data?.org_id ?? null, isLegacyKey: false };\n } catch (e) {\n if (axios.isAxiosError(e) && e.response?.status === 400) {\n return { orgId: null, isLegacyKey: true };\n }\n throw e;\n }\n}\n\n/**\n * Fetch `GET /api/organizations/{orgId}/me`. Identifies the calling user as\n * a member of `orgId`. The GUI uses `me.org_id === me.user_id` to decide\n * whether `orgId` is the user's personal workspace — that's the cloud\n * contract (the auto-generated personal-workspace org has the same id as\n * the user).\n */\nexport async function getCloudOrganizationMe(\n orgId: string,\n backend?: Backend,\n): Promise<{
|
|
1
|
+
{"version":3,"file":"organization-service.api.cjs","names":[],"sources":["../../../src/api/cloud/organization-service.api.ts"],"sourcesContent":["import axios from \"axios\";\nimport { getActiveBackend } from \"../backend-registry/active-store\";\nimport type { Backend } from \"../backend-registry/types\";\nimport { callCloudProxy } from \"./proxy\";\nimport type {\n CloudApiKeyMetadata,\n CloudOrganization,\n CloudOrganizationsResponse,\n} from \"./types\";\n\ninterface OrganizationsResult {\n items: CloudOrganization[];\n currentOrgId: string | null;\n}\n\nfunction normalizeResult(\n data: CloudOrganizationsResponse | undefined | null,\n): OrganizationsResult {\n return {\n items: data?.items ?? [],\n currentOrgId: data?.current_org_id ?? null,\n };\n}\n\nfunction resolveBackend(backend?: Backend): Backend {\n if (backend) return backend;\n const active = getActiveBackend().backend;\n if (active.kind !== \"cloud\") {\n throw new Error(\n \"Cloud organization calls require a cloud backend. Active backend is local.\",\n );\n }\n return active;\n}\n\n/**\n * Fetch the org list for a cloud backend. With no argument, uses the active\n * cloud backend; pass `backend` explicitly to fetch for an inactive cloud\n * (used by the selector to flatten all cloud rows).\n *\n * Calls the cloud API directly with the backend's bearer token.\n */\nexport async function getCloudOrganizations(\n backend?: Backend,\n): Promise<OrganizationsResult> {\n const target = resolveBackend(backend);\n const data = await callCloudProxy<CloudOrganizationsResponse>({\n backend: target,\n method: \"GET\",\n path: \"/api/organizations\",\n });\n return normalizeResult(data);\n}\n\n/**\n * Fetch metadata for the API key used to authenticate this cloud backend.\n * The returned `orgId` is the single org the key is authorized to act on\n * (the cloud contract: one key → one org).\n *\n * Legacy keys minted before per-key org binding existed cause the upstream\n * to return HTTP 400 — we surface that as `isLegacyKey: true` with a null\n * `orgId` so the caller can fall back to the unfiltered behavior. Other\n * statuses (401 revoked, 5xx outage) propagate so React Query can mark\n * the query as failed and the selector can render the no-org-known row.\n */\nexport async function getCurrentCloudApiKey(\n backend?: Backend,\n): Promise<{ orgId: string | null; isLegacyKey: boolean }> {\n const target = resolveBackend(backend);\n try {\n const data = await callCloudProxy<CloudApiKeyMetadata>({\n backend: target,\n method: \"GET\",\n path: \"/api/keys/current\",\n });\n return { orgId: data?.org_id ?? null, isLegacyKey: false };\n } catch (e) {\n if (axios.isAxiosError(e) && e.response?.status === 400) {\n return { orgId: null, isLegacyKey: true };\n }\n throw e;\n }\n}\n\n/**\n * Fetch `GET /api/organizations/{orgId}/me`. Identifies the calling user as\n * a member of `orgId`. The GUI uses `me.org_id === me.user_id` to decide\n * whether `orgId` is the user's personal workspace — that's the cloud\n * contract (the auto-generated personal-workspace org has the same id as\n * the user).\n *\n * `role` is the caller's role in the org (`owner` | `admin` | `member`, or\n * `null` if the upstream omits it). `permissions` is the server-defined\n * permission set for that role (e.g. `edit_org_settings`); it is `null` on\n * older app-servers that don't return it, so callers fall back to the role.\n * See `useCanManageOrgProfiles`.\n */\nexport async function getCloudOrganizationMe(\n orgId: string,\n backend?: Backend,\n): Promise<{\n orgId: string;\n userId: string;\n role: string | null;\n permissions?: string[] | null;\n}> {\n const target = resolveBackend(backend);\n const data = await callCloudProxy<{\n org_id: string;\n user_id: string;\n role?: string;\n permissions?: string[];\n }>({\n backend: target,\n method: \"GET\",\n path: `/api/organizations/${encodeURIComponent(orgId)}/me`,\n });\n return {\n orgId: data?.org_id ?? orgId,\n userId: data?.user_id ?? \"\",\n role: data?.role ?? null,\n // `null` when the field is absent (older app-server) so callers can fall\n // back to a role check; a present array is the server's source of truth.\n permissions: Array.isArray(data?.permissions) ? data.permissions : null,\n };\n}\n"],"mappings":"qLAeA,SAAS,EACP,EACqB,CACrB,MAAO,CACL,MAAO,GAAM,OAAS,EAAE,CACxB,aAAc,GAAM,gBAAkB,KACvC,CAGH,SAAS,EAAe,EAA4B,CAClD,GAAI,EAAS,OAAO,EACpB,IAAM,EAAS,EAAA,kBAAkB,CAAC,QAClC,GAAI,EAAO,OAAS,QAClB,MAAU,MACR,6EACD,CAEH,OAAO,EAUT,eAAsB,EACpB,EAC8B,CAO9B,OAAO,EAAgB,MALJ,EAAA,eAA2C,CAC5D,QAFa,EAAe,EAEnB,CACT,OAAQ,MACR,KAAM,qBACP,CAAC,CAC0B,CAc9B,eAAsB,EACpB,EACyD,CACzD,IAAM,EAAS,EAAe,EAAQ,CACtC,GAAI,CAMF,MAAO,CAAE,OAAO,MALG,EAAA,eAAoC,CACrD,QAAS,EACT,OAAQ,MACR,KAAM,oBACP,CAAC,GACoB,QAAU,KAAM,YAAa,GAAO,OACnD,EAAG,CACV,GAAI,EAAA,QAAM,aAAa,EAAE,EAAI,EAAE,UAAU,SAAW,IAClD,MAAO,CAAE,MAAO,KAAM,YAAa,GAAM,CAE3C,MAAM,GAiBV,eAAsB,EACpB,EACA,EAMC,CAED,IAAM,EAAO,MAAM,EAAA,eAKhB,CACD,QAPa,EAAe,EAOnB,CACT,OAAQ,MACR,KAAM,sBAAsB,mBAAmB,EAAM,CAAC,KACvD,CAAC,CACF,MAAO,CACL,MAAO,GAAM,QAAU,EACvB,OAAQ,GAAM,SAAW,GACzB,KAAM,GAAM,MAAQ,KAGpB,YAAa,MAAM,QAAQ,GAAM,YAAY,CAAG,EAAK,YAAc,KACpE"}
|
|
@@ -33,9 +33,17 @@ export declare function getCurrentCloudApiKey(backend?: Backend): Promise<{
|
|
|
33
33
|
* whether `orgId` is the user's personal workspace — that's the cloud
|
|
34
34
|
* contract (the auto-generated personal-workspace org has the same id as
|
|
35
35
|
* the user).
|
|
36
|
+
*
|
|
37
|
+
* `role` is the caller's role in the org (`owner` | `admin` | `member`, or
|
|
38
|
+
* `null` if the upstream omits it). `permissions` is the server-defined
|
|
39
|
+
* permission set for that role (e.g. `edit_org_settings`); it is `null` on
|
|
40
|
+
* older app-servers that don't return it, so callers fall back to the role.
|
|
41
|
+
* See `useCanManageOrgProfiles`.
|
|
36
42
|
*/
|
|
37
43
|
export declare function getCloudOrganizationMe(orgId: string, backend?: Backend): Promise<{
|
|
38
44
|
orgId: string;
|
|
39
45
|
userId: string;
|
|
46
|
+
role: string | null;
|
|
47
|
+
permissions?: string[] | null;
|
|
40
48
|
}>;
|
|
41
49
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"organization-service.api.js","names":[],"sources":["../../../src/api/cloud/organization-service.api.ts"],"sourcesContent":["import axios from \"axios\";\nimport { getActiveBackend } from \"../backend-registry/active-store\";\nimport type { Backend } from \"../backend-registry/types\";\nimport { callCloudProxy } from \"./proxy\";\nimport type {\n CloudApiKeyMetadata,\n CloudOrganization,\n CloudOrganizationsResponse,\n} from \"./types\";\n\ninterface OrganizationsResult {\n items: CloudOrganization[];\n currentOrgId: string | null;\n}\n\nfunction normalizeResult(\n data: CloudOrganizationsResponse | undefined | null,\n): OrganizationsResult {\n return {\n items: data?.items ?? [],\n currentOrgId: data?.current_org_id ?? null,\n };\n}\n\nfunction resolveBackend(backend?: Backend): Backend {\n if (backend) return backend;\n const active = getActiveBackend().backend;\n if (active.kind !== \"cloud\") {\n throw new Error(\n \"Cloud organization calls require a cloud backend. Active backend is local.\",\n );\n }\n return active;\n}\n\n/**\n * Fetch the org list for a cloud backend. With no argument, uses the active\n * cloud backend; pass `backend` explicitly to fetch for an inactive cloud\n * (used by the selector to flatten all cloud rows).\n *\n * Calls the cloud API directly with the backend's bearer token.\n */\nexport async function getCloudOrganizations(\n backend?: Backend,\n): Promise<OrganizationsResult> {\n const target = resolveBackend(backend);\n const data = await callCloudProxy<CloudOrganizationsResponse>({\n backend: target,\n method: \"GET\",\n path: \"/api/organizations\",\n });\n return normalizeResult(data);\n}\n\n/**\n * Fetch metadata for the API key used to authenticate this cloud backend.\n * The returned `orgId` is the single org the key is authorized to act on\n * (the cloud contract: one key → one org).\n *\n * Legacy keys minted before per-key org binding existed cause the upstream\n * to return HTTP 400 — we surface that as `isLegacyKey: true` with a null\n * `orgId` so the caller can fall back to the unfiltered behavior. Other\n * statuses (401 revoked, 5xx outage) propagate so React Query can mark\n * the query as failed and the selector can render the no-org-known row.\n */\nexport async function getCurrentCloudApiKey(\n backend?: Backend,\n): Promise<{ orgId: string | null; isLegacyKey: boolean }> {\n const target = resolveBackend(backend);\n try {\n const data = await callCloudProxy<CloudApiKeyMetadata>({\n backend: target,\n method: \"GET\",\n path: \"/api/keys/current\",\n });\n return { orgId: data?.org_id ?? null, isLegacyKey: false };\n } catch (e) {\n if (axios.isAxiosError(e) && e.response?.status === 400) {\n return { orgId: null, isLegacyKey: true };\n }\n throw e;\n }\n}\n\n/**\n * Fetch `GET /api/organizations/{orgId}/me`. Identifies the calling user as\n * a member of `orgId`. The GUI uses `me.org_id === me.user_id` to decide\n * whether `orgId` is the user's personal workspace — that's the cloud\n * contract (the auto-generated personal-workspace org has the same id as\n * the user).\n */\nexport async function getCloudOrganizationMe(\n orgId: string,\n backend?: Backend,\n): Promise<{
|
|
1
|
+
{"version":3,"file":"organization-service.api.js","names":[],"sources":["../../../src/api/cloud/organization-service.api.ts"],"sourcesContent":["import axios from \"axios\";\nimport { getActiveBackend } from \"../backend-registry/active-store\";\nimport type { Backend } from \"../backend-registry/types\";\nimport { callCloudProxy } from \"./proxy\";\nimport type {\n CloudApiKeyMetadata,\n CloudOrganization,\n CloudOrganizationsResponse,\n} from \"./types\";\n\ninterface OrganizationsResult {\n items: CloudOrganization[];\n currentOrgId: string | null;\n}\n\nfunction normalizeResult(\n data: CloudOrganizationsResponse | undefined | null,\n): OrganizationsResult {\n return {\n items: data?.items ?? [],\n currentOrgId: data?.current_org_id ?? null,\n };\n}\n\nfunction resolveBackend(backend?: Backend): Backend {\n if (backend) return backend;\n const active = getActiveBackend().backend;\n if (active.kind !== \"cloud\") {\n throw new Error(\n \"Cloud organization calls require a cloud backend. Active backend is local.\",\n );\n }\n return active;\n}\n\n/**\n * Fetch the org list for a cloud backend. With no argument, uses the active\n * cloud backend; pass `backend` explicitly to fetch for an inactive cloud\n * (used by the selector to flatten all cloud rows).\n *\n * Calls the cloud API directly with the backend's bearer token.\n */\nexport async function getCloudOrganizations(\n backend?: Backend,\n): Promise<OrganizationsResult> {\n const target = resolveBackend(backend);\n const data = await callCloudProxy<CloudOrganizationsResponse>({\n backend: target,\n method: \"GET\",\n path: \"/api/organizations\",\n });\n return normalizeResult(data);\n}\n\n/**\n * Fetch metadata for the API key used to authenticate this cloud backend.\n * The returned `orgId` is the single org the key is authorized to act on\n * (the cloud contract: one key → one org).\n *\n * Legacy keys minted before per-key org binding existed cause the upstream\n * to return HTTP 400 — we surface that as `isLegacyKey: true` with a null\n * `orgId` so the caller can fall back to the unfiltered behavior. Other\n * statuses (401 revoked, 5xx outage) propagate so React Query can mark\n * the query as failed and the selector can render the no-org-known row.\n */\nexport async function getCurrentCloudApiKey(\n backend?: Backend,\n): Promise<{ orgId: string | null; isLegacyKey: boolean }> {\n const target = resolveBackend(backend);\n try {\n const data = await callCloudProxy<CloudApiKeyMetadata>({\n backend: target,\n method: \"GET\",\n path: \"/api/keys/current\",\n });\n return { orgId: data?.org_id ?? null, isLegacyKey: false };\n } catch (e) {\n if (axios.isAxiosError(e) && e.response?.status === 400) {\n return { orgId: null, isLegacyKey: true };\n }\n throw e;\n }\n}\n\n/**\n * Fetch `GET /api/organizations/{orgId}/me`. Identifies the calling user as\n * a member of `orgId`. The GUI uses `me.org_id === me.user_id` to decide\n * whether `orgId` is the user's personal workspace — that's the cloud\n * contract (the auto-generated personal-workspace org has the same id as\n * the user).\n *\n * `role` is the caller's role in the org (`owner` | `admin` | `member`, or\n * `null` if the upstream omits it). `permissions` is the server-defined\n * permission set for that role (e.g. `edit_org_settings`); it is `null` on\n * older app-servers that don't return it, so callers fall back to the role.\n * See `useCanManageOrgProfiles`.\n */\nexport async function getCloudOrganizationMe(\n orgId: string,\n backend?: Backend,\n): Promise<{\n orgId: string;\n userId: string;\n role: string | null;\n permissions?: string[] | null;\n}> {\n const target = resolveBackend(backend);\n const data = await callCloudProxy<{\n org_id: string;\n user_id: string;\n role?: string;\n permissions?: string[];\n }>({\n backend: target,\n method: \"GET\",\n path: `/api/organizations/${encodeURIComponent(orgId)}/me`,\n });\n return {\n orgId: data?.org_id ?? orgId,\n userId: data?.user_id ?? \"\",\n role: data?.role ?? null,\n // `null` when the field is absent (older app-server) so callers can fall\n // back to a role check; a present array is the server's source of truth.\n permissions: Array.isArray(data?.permissions) ? data.permissions : null,\n };\n}\n"],"mappings":";;;;AAeA,SAAS,EACP,GACqB;AACrB,QAAO;EACL,OAAO,GAAM,SAAS,EAAE;EACxB,cAAc,GAAM,kBAAkB;EACvC;;AAGH,SAAS,EAAe,GAA4B;AAClD,KAAI,EAAS,QAAO;CACpB,IAAM,IAAS,GAAkB,CAAC;AAClC,KAAI,EAAO,SAAS,QAClB,OAAU,MACR,6EACD;AAEH,QAAO;;AAUT,eAAsB,EACpB,GAC8B;AAO9B,QAAO,EAAgB,MALJ,EAA2C;EAC5D,SAFa,EAAe,EAEnB;EACT,QAAQ;EACR,MAAM;EACP,CAAC,CAC0B;;AAc9B,eAAsB,EACpB,GACyD;CACzD,IAAM,IAAS,EAAe,EAAQ;AACtC,KAAI;AAMF,SAAO;GAAE,QAAO,MALG,EAAoC;IACrD,SAAS;IACT,QAAQ;IACR,MAAM;IACP,CAAC,GACoB,UAAU;GAAM,aAAa;GAAO;UACnD,GAAG;AACV,MAAI,EAAM,aAAa,EAAE,IAAI,EAAE,UAAU,WAAW,IAClD,QAAO;GAAE,OAAO;GAAM,aAAa;GAAM;AAE3C,QAAM;;;AAiBV,eAAsB,EACpB,GACA,GAMC;CAED,IAAM,IAAO,MAAM,EAKhB;EACD,SAPa,EAAe,EAOnB;EACT,QAAQ;EACR,MAAM,sBAAsB,mBAAmB,EAAM,CAAC;EACvD,CAAC;AACF,QAAO;EACL,OAAO,GAAM,UAAU;EACvB,QAAQ,GAAM,WAAW;EACzB,MAAM,GAAM,QAAQ;EAGpB,aAAa,MAAM,QAAQ,GAAM,YAAY,GAAG,EAAK,cAAc;EACpE"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../backend-registry/active-store.cjs`),t=require(`./proxy.cjs`);var n=`/api/v1/settings/profiles`;function r(){let{backend:t,orgId:r}=e.getActiveBackend();if(t.kind!==`cloud`)throw Error(`Cloud profiles call requires a cloud backend.`);return{backend:t,base:r?`/api/organizations/${encodeURIComponent(r)}/profiles`:n}}async function i(){let{backend:e,base:n}=r();return t.callCloudProxy({backend:e,method:`GET`,path:n})}async function a(e){let{backend:n,base:i}=r(),a=await t.callCloudProxy({backend:n,method:`GET`,path:`${i}/${encodeURIComponent(e)}`});return{name:a.name,config:a.config??a.llm??{},api_key_set:a.api_key_set??!1}}async function o(e,n){let{backend:i,base:a}=r();return t.callCloudProxy({backend:i,method:`POST`,path:`${a}/${encodeURIComponent(e)}`,body:n})}async function s(e){let{backend:n,base:i}=r();return t.callCloudProxy({backend:n,method:`DELETE`,path:`${i}/${encodeURIComponent(e)}`})}async function c(e,n){let{backend:i,base:a}=r();return t.callCloudProxy({backend:i,method:`POST`,path:`${a}/${encodeURIComponent(e)}/rename`,body:{new_name:n}})}async function l(e){let{backend:n,base:i}=r(),a=await t.callCloudProxy({backend:n,method:`POST`,path:`${i}/${encodeURIComponent(e)}/activate`,body:{}});return{name:a.name,message:a.message,llm_applied:a.model!=null||a.llm!=null}}exports.activateCloudProfile=l,exports.deleteCloudProfile=s,exports.fetchCloudProfile=a,exports.fetchCloudProfiles=i,exports.renameCloudProfile=c,exports.saveCloudProfile=o;
|
|
2
|
+
//# sourceMappingURL=profiles-service.api.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profiles-service.api.cjs","names":[],"sources":["../../../src/api/cloud/profiles-service.api.ts"],"sourcesContent":["import type {\n ActivateProfileResponse,\n ProfileDetailResponse,\n ProfileListResponse,\n ProfileMutationResponse,\n SaveProfileRequest,\n} from \"@openhands/typescript-client\";\nimport { getActiveBackend } from \"../backend-registry/active-store\";\nimport type { Backend } from \"../backend-registry/types\";\nimport { callCloudProxy } from \"./proxy\";\n\n/**\n * Cloud LLM-profile service.\n *\n * Profile CRUD is routed to the org-scoped endpoints\n * `/api/organizations/{orgId}/profiles`, which enforce `EDIT_ORG_SETTINGS`\n * server-side — so a member's mutation is rejected with 403 even on a direct\n * API call, not just hidden in the UI. When the active cloud backend has no org\n * bound (legacy API keys), we fall back to the ungated per-user settings route\n * `/api/v1/settings/profiles`, where there is no org role to enforce against.\n *\n * The two routes share shapes except `get` (org returns `llm`, settings returns\n * `config`) and `activate` (org returns `llm`, settings returns `model`); both\n * are normalized to the SDK profile types below. Neither route exposes secrets.\n */\n\nconst SETTINGS_PROFILES_PATH = \"/api/v1/settings/profiles\";\n\n/**\n * Resolve the backend + base path for the active cloud backend's profiles:\n * the org-gated route when an org is bound, else the per-user settings route.\n */\nfunction cloudProfilesTarget(): { backend: Backend; base: string } {\n const { backend, orgId } = getActiveBackend();\n if (backend.kind !== \"cloud\") {\n throw new Error(\"Cloud profiles call requires a cloud backend.\");\n }\n return {\n backend,\n base: orgId\n ? `/api/organizations/${encodeURIComponent(orgId)}/profiles`\n : SETTINGS_PROFILES_PATH,\n };\n}\n\nexport async function fetchCloudProfiles(): Promise<ProfileListResponse> {\n const { backend, base } = cloudProfilesTarget();\n return callCloudProxy<ProfileListResponse>({\n backend,\n method: \"GET\",\n path: base,\n });\n}\n\nexport async function fetchCloudProfile(\n name: string,\n): Promise<ProfileDetailResponse> {\n const { backend, base } = cloudProfilesTarget();\n // Org returns `{ name, llm }`; settings returns `{ name, config, api_key_set }`.\n // Normalize to the SDK detail shape. Neither route exposes the key, and the\n // GUI never reads the detail's `api_key_set` (only list-item `api_key_set`).\n const result = await callCloudProxy<{\n name: string;\n config?: Record<string, unknown>;\n llm?: Record<string, unknown>;\n api_key_set?: boolean;\n }>({\n backend,\n method: \"GET\",\n path: `${base}/${encodeURIComponent(name)}`,\n });\n return {\n name: result.name,\n config: result.config ?? result.llm ?? {},\n api_key_set: result.api_key_set ?? false,\n };\n}\n\nexport async function saveCloudProfile(\n name: string,\n request: SaveProfileRequest,\n): Promise<ProfileMutationResponse> {\n const { backend, base } = cloudProfilesTarget();\n return callCloudProxy<ProfileMutationResponse>({\n backend,\n method: \"POST\",\n path: `${base}/${encodeURIComponent(name)}`,\n body: request,\n });\n}\n\nexport async function deleteCloudProfile(\n name: string,\n): Promise<ProfileMutationResponse> {\n const { backend, base } = cloudProfilesTarget();\n return callCloudProxy<ProfileMutationResponse>({\n backend,\n method: \"DELETE\",\n path: `${base}/${encodeURIComponent(name)}`,\n });\n}\n\nexport async function renameCloudProfile(\n name: string,\n newName: string,\n): Promise<ProfileMutationResponse> {\n const { backend, base } = cloudProfilesTarget();\n return callCloudProxy<ProfileMutationResponse>({\n backend,\n method: \"POST\",\n path: `${base}/${encodeURIComponent(name)}/rename`,\n body: { new_name: newName },\n });\n}\n\nexport async function activateCloudProfile(\n name: string,\n): Promise<ActivateProfileResponse> {\n const { backend, base } = cloudProfilesTarget();\n // Org returns `{ name, message, llm }`; settings returns `{ name, message,\n // model }`. The SDK type carries `llm_applied`; derive it from whichever the\n // route provided (consumers only read name/message — the hook just\n // invalidates caches).\n const result = await callCloudProxy<{\n name: string;\n message: string;\n model?: string | null;\n llm?: Record<string, unknown> | null;\n }>({\n backend,\n method: \"POST\",\n path: `${base}/${encodeURIComponent(name)}/activate`,\n body: {},\n });\n return {\n name: result.name,\n message: result.message,\n llm_applied: result.model != null || result.llm != null,\n };\n}\n"],"mappings":"iIA0BA,IAAM,EAAyB,4BAM/B,SAAS,GAA0D,CACjE,GAAM,CAAE,UAAS,SAAU,EAAA,kBAAkB,CAC7C,GAAI,EAAQ,OAAS,QACnB,MAAU,MAAM,gDAAgD,CAElE,MAAO,CACL,UACA,KAAM,EACF,sBAAsB,mBAAmB,EAAM,CAAC,WAChD,EACL,CAGH,eAAsB,GAAmD,CACvE,GAAM,CAAE,UAAS,QAAS,GAAqB,CAC/C,OAAO,EAAA,eAAoC,CACzC,UACA,OAAQ,MACR,KAAM,EACP,CAAC,CAGJ,eAAsB,EACpB,EACgC,CAChC,GAAM,CAAE,UAAS,QAAS,GAAqB,CAIzC,EAAS,MAAM,EAAA,eAKlB,CACD,UACA,OAAQ,MACR,KAAM,GAAG,EAAK,GAAG,mBAAmB,EAAK,GAC1C,CAAC,CACF,MAAO,CACL,KAAM,EAAO,KACb,OAAQ,EAAO,QAAU,EAAO,KAAO,EAAE,CACzC,YAAa,EAAO,aAAe,GACpC,CAGH,eAAsB,EACpB,EACA,EACkC,CAClC,GAAM,CAAE,UAAS,QAAS,GAAqB,CAC/C,OAAO,EAAA,eAAwC,CAC7C,UACA,OAAQ,OACR,KAAM,GAAG,EAAK,GAAG,mBAAmB,EAAK,GACzC,KAAM,EACP,CAAC,CAGJ,eAAsB,EACpB,EACkC,CAClC,GAAM,CAAE,UAAS,QAAS,GAAqB,CAC/C,OAAO,EAAA,eAAwC,CAC7C,UACA,OAAQ,SACR,KAAM,GAAG,EAAK,GAAG,mBAAmB,EAAK,GAC1C,CAAC,CAGJ,eAAsB,EACpB,EACA,EACkC,CAClC,GAAM,CAAE,UAAS,QAAS,GAAqB,CAC/C,OAAO,EAAA,eAAwC,CAC7C,UACA,OAAQ,OACR,KAAM,GAAG,EAAK,GAAG,mBAAmB,EAAK,CAAC,SAC1C,KAAM,CAAE,SAAU,EAAS,CAC5B,CAAC,CAGJ,eAAsB,EACpB,EACkC,CAClC,GAAM,CAAE,UAAS,QAAS,GAAqB,CAKzC,EAAS,MAAM,EAAA,eAKlB,CACD,UACA,OAAQ,OACR,KAAM,GAAG,EAAK,GAAG,mBAAmB,EAAK,CAAC,WAC1C,KAAM,EAAE,CACT,CAAC,CACF,MAAO,CACL,KAAM,EAAO,KACb,QAAS,EAAO,QAChB,YAAa,EAAO,OAAS,MAAQ,EAAO,KAAO,KACpD"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ActivateProfileResponse, ProfileDetailResponse, ProfileListResponse, ProfileMutationResponse, SaveProfileRequest } from "@openhands/typescript-client";
|
|
2
|
+
export declare function fetchCloudProfiles(): Promise<ProfileListResponse>;
|
|
3
|
+
export declare function fetchCloudProfile(name: string): Promise<ProfileDetailResponse>;
|
|
4
|
+
export declare function saveCloudProfile(name: string, request: SaveProfileRequest): Promise<ProfileMutationResponse>;
|
|
5
|
+
export declare function deleteCloudProfile(name: string): Promise<ProfileMutationResponse>;
|
|
6
|
+
export declare function renameCloudProfile(name: string, newName: string): Promise<ProfileMutationResponse>;
|
|
7
|
+
export declare function activateCloudProfile(name: string): Promise<ActivateProfileResponse>;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { getActiveBackend as e } from "../backend-registry/active-store.js";
|
|
2
|
+
import { callCloudProxy as t } from "./proxy.js";
|
|
3
|
+
//#region src/api/cloud/profiles-service.api.ts
|
|
4
|
+
var n = "/api/v1/settings/profiles";
|
|
5
|
+
function r() {
|
|
6
|
+
let { backend: t, orgId: r } = e();
|
|
7
|
+
if (t.kind !== "cloud") throw Error("Cloud profiles call requires a cloud backend.");
|
|
8
|
+
return {
|
|
9
|
+
backend: t,
|
|
10
|
+
base: r ? `/api/organizations/${encodeURIComponent(r)}/profiles` : n
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
async function i() {
|
|
14
|
+
let { backend: e, base: n } = r();
|
|
15
|
+
return t({
|
|
16
|
+
backend: e,
|
|
17
|
+
method: "GET",
|
|
18
|
+
path: n
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
async function a(e) {
|
|
22
|
+
let { backend: n, base: i } = r(), a = await t({
|
|
23
|
+
backend: n,
|
|
24
|
+
method: "GET",
|
|
25
|
+
path: `${i}/${encodeURIComponent(e)}`
|
|
26
|
+
});
|
|
27
|
+
return {
|
|
28
|
+
name: a.name,
|
|
29
|
+
config: a.config ?? a.llm ?? {},
|
|
30
|
+
api_key_set: a.api_key_set ?? !1
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
async function o(e, n) {
|
|
34
|
+
let { backend: i, base: a } = r();
|
|
35
|
+
return t({
|
|
36
|
+
backend: i,
|
|
37
|
+
method: "POST",
|
|
38
|
+
path: `${a}/${encodeURIComponent(e)}`,
|
|
39
|
+
body: n
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
async function s(e) {
|
|
43
|
+
let { backend: n, base: i } = r();
|
|
44
|
+
return t({
|
|
45
|
+
backend: n,
|
|
46
|
+
method: "DELETE",
|
|
47
|
+
path: `${i}/${encodeURIComponent(e)}`
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
async function c(e, n) {
|
|
51
|
+
let { backend: i, base: a } = r();
|
|
52
|
+
return t({
|
|
53
|
+
backend: i,
|
|
54
|
+
method: "POST",
|
|
55
|
+
path: `${a}/${encodeURIComponent(e)}/rename`,
|
|
56
|
+
body: { new_name: n }
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
async function l(e) {
|
|
60
|
+
let { backend: n, base: i } = r(), a = await t({
|
|
61
|
+
backend: n,
|
|
62
|
+
method: "POST",
|
|
63
|
+
path: `${i}/${encodeURIComponent(e)}/activate`,
|
|
64
|
+
body: {}
|
|
65
|
+
});
|
|
66
|
+
return {
|
|
67
|
+
name: a.name,
|
|
68
|
+
message: a.message,
|
|
69
|
+
llm_applied: a.model != null || a.llm != null
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
//#endregion
|
|
73
|
+
export { l as activateCloudProfile, s as deleteCloudProfile, a as fetchCloudProfile, i as fetchCloudProfiles, c as renameCloudProfile, o as saveCloudProfile };
|
|
74
|
+
|
|
75
|
+
//# sourceMappingURL=profiles-service.api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profiles-service.api.js","names":[],"sources":["../../../src/api/cloud/profiles-service.api.ts"],"sourcesContent":["import type {\n ActivateProfileResponse,\n ProfileDetailResponse,\n ProfileListResponse,\n ProfileMutationResponse,\n SaveProfileRequest,\n} from \"@openhands/typescript-client\";\nimport { getActiveBackend } from \"../backend-registry/active-store\";\nimport type { Backend } from \"../backend-registry/types\";\nimport { callCloudProxy } from \"./proxy\";\n\n/**\n * Cloud LLM-profile service.\n *\n * Profile CRUD is routed to the org-scoped endpoints\n * `/api/organizations/{orgId}/profiles`, which enforce `EDIT_ORG_SETTINGS`\n * server-side — so a member's mutation is rejected with 403 even on a direct\n * API call, not just hidden in the UI. When the active cloud backend has no org\n * bound (legacy API keys), we fall back to the ungated per-user settings route\n * `/api/v1/settings/profiles`, where there is no org role to enforce against.\n *\n * The two routes share shapes except `get` (org returns `llm`, settings returns\n * `config`) and `activate` (org returns `llm`, settings returns `model`); both\n * are normalized to the SDK profile types below. Neither route exposes secrets.\n */\n\nconst SETTINGS_PROFILES_PATH = \"/api/v1/settings/profiles\";\n\n/**\n * Resolve the backend + base path for the active cloud backend's profiles:\n * the org-gated route when an org is bound, else the per-user settings route.\n */\nfunction cloudProfilesTarget(): { backend: Backend; base: string } {\n const { backend, orgId } = getActiveBackend();\n if (backend.kind !== \"cloud\") {\n throw new Error(\"Cloud profiles call requires a cloud backend.\");\n }\n return {\n backend,\n base: orgId\n ? `/api/organizations/${encodeURIComponent(orgId)}/profiles`\n : SETTINGS_PROFILES_PATH,\n };\n}\n\nexport async function fetchCloudProfiles(): Promise<ProfileListResponse> {\n const { backend, base } = cloudProfilesTarget();\n return callCloudProxy<ProfileListResponse>({\n backend,\n method: \"GET\",\n path: base,\n });\n}\n\nexport async function fetchCloudProfile(\n name: string,\n): Promise<ProfileDetailResponse> {\n const { backend, base } = cloudProfilesTarget();\n // Org returns `{ name, llm }`; settings returns `{ name, config, api_key_set }`.\n // Normalize to the SDK detail shape. Neither route exposes the key, and the\n // GUI never reads the detail's `api_key_set` (only list-item `api_key_set`).\n const result = await callCloudProxy<{\n name: string;\n config?: Record<string, unknown>;\n llm?: Record<string, unknown>;\n api_key_set?: boolean;\n }>({\n backend,\n method: \"GET\",\n path: `${base}/${encodeURIComponent(name)}`,\n });\n return {\n name: result.name,\n config: result.config ?? result.llm ?? {},\n api_key_set: result.api_key_set ?? false,\n };\n}\n\nexport async function saveCloudProfile(\n name: string,\n request: SaveProfileRequest,\n): Promise<ProfileMutationResponse> {\n const { backend, base } = cloudProfilesTarget();\n return callCloudProxy<ProfileMutationResponse>({\n backend,\n method: \"POST\",\n path: `${base}/${encodeURIComponent(name)}`,\n body: request,\n });\n}\n\nexport async function deleteCloudProfile(\n name: string,\n): Promise<ProfileMutationResponse> {\n const { backend, base } = cloudProfilesTarget();\n return callCloudProxy<ProfileMutationResponse>({\n backend,\n method: \"DELETE\",\n path: `${base}/${encodeURIComponent(name)}`,\n });\n}\n\nexport async function renameCloudProfile(\n name: string,\n newName: string,\n): Promise<ProfileMutationResponse> {\n const { backend, base } = cloudProfilesTarget();\n return callCloudProxy<ProfileMutationResponse>({\n backend,\n method: \"POST\",\n path: `${base}/${encodeURIComponent(name)}/rename`,\n body: { new_name: newName },\n });\n}\n\nexport async function activateCloudProfile(\n name: string,\n): Promise<ActivateProfileResponse> {\n const { backend, base } = cloudProfilesTarget();\n // Org returns `{ name, message, llm }`; settings returns `{ name, message,\n // model }`. The SDK type carries `llm_applied`; derive it from whichever the\n // route provided (consumers only read name/message — the hook just\n // invalidates caches).\n const result = await callCloudProxy<{\n name: string;\n message: string;\n model?: string | null;\n llm?: Record<string, unknown> | null;\n }>({\n backend,\n method: \"POST\",\n path: `${base}/${encodeURIComponent(name)}/activate`,\n body: {},\n });\n return {\n name: result.name,\n message: result.message,\n llm_applied: result.model != null || result.llm != null,\n };\n}\n"],"mappings":";;;AA0BA,IAAM,IAAyB;AAM/B,SAAS,IAA0D;CACjE,IAAM,EAAE,YAAS,aAAU,GAAkB;AAC7C,KAAI,EAAQ,SAAS,QACnB,OAAU,MAAM,gDAAgD;AAElE,QAAO;EACL;EACA,MAAM,IACF,sBAAsB,mBAAmB,EAAM,CAAC,aAChD;EACL;;AAGH,eAAsB,IAAmD;CACvE,IAAM,EAAE,YAAS,YAAS,GAAqB;AAC/C,QAAO,EAAoC;EACzC;EACA,QAAQ;EACR,MAAM;EACP,CAAC;;AAGJ,eAAsB,EACpB,GACgC;CAChC,IAAM,EAAE,YAAS,YAAS,GAAqB,EAIzC,IAAS,MAAM,EAKlB;EACD;EACA,QAAQ;EACR,MAAM,GAAG,EAAK,GAAG,mBAAmB,EAAK;EAC1C,CAAC;AACF,QAAO;EACL,MAAM,EAAO;EACb,QAAQ,EAAO,UAAU,EAAO,OAAO,EAAE;EACzC,aAAa,EAAO,eAAe;EACpC;;AAGH,eAAsB,EACpB,GACA,GACkC;CAClC,IAAM,EAAE,YAAS,YAAS,GAAqB;AAC/C,QAAO,EAAwC;EAC7C;EACA,QAAQ;EACR,MAAM,GAAG,EAAK,GAAG,mBAAmB,EAAK;EACzC,MAAM;EACP,CAAC;;AAGJ,eAAsB,EACpB,GACkC;CAClC,IAAM,EAAE,YAAS,YAAS,GAAqB;AAC/C,QAAO,EAAwC;EAC7C;EACA,QAAQ;EACR,MAAM,GAAG,EAAK,GAAG,mBAAmB,EAAK;EAC1C,CAAC;;AAGJ,eAAsB,EACpB,GACA,GACkC;CAClC,IAAM,EAAE,YAAS,YAAS,GAAqB;AAC/C,QAAO,EAAwC;EAC7C;EACA,QAAQ;EACR,MAAM,GAAG,EAAK,GAAG,mBAAmB,EAAK,CAAC;EAC1C,MAAM,EAAE,UAAU,GAAS;EAC5B,CAAC;;AAGJ,eAAsB,EACpB,GACkC;CAClC,IAAM,EAAE,YAAS,YAAS,GAAqB,EAKzC,IAAS,MAAM,EAKlB;EACD;EACA,QAAQ;EACR,MAAM,GAAG,EAAK,GAAG,mBAAmB,EAAK,CAAC;EAC1C,MAAM,EAAE;EACT,CAAC;AACF,QAAO;EACL,MAAM,EAAO;EACb,SAAS,EAAO;EAChB,aAAa,EAAO,SAAS,QAAQ,EAAO,OAAO;EACpD"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../backend-registry/active-store.cjs`),t=require(`./proxy.cjs`);function n(){let t=e.getActiveBackend().backend;if(t.kind!==`cloud`)throw Error(`Cloud settings call requires a cloud backend.`);return t}function r(e){if(e.agent_settings&&Object.keys(e.agent_settings).length>0)return e.agent_settings;let t={},n={};typeof e.llm_model==`string`&&(n.model=e.llm_model),typeof e.llm_base_url==`string`&&(n.base_url=e.llm_base_url),typeof e.llm_api_key==`string`&&(n.api_key=e.llm_api_key),Object.keys(n).length>0&&(t.llm=n);let r={};return typeof e.enable_default_condenser==`boolean`&&(r.enabled=e.enable_default_condenser),typeof e.condenser_max_size==`number`&&(r.max_size=e.condenser_max_size),Object.keys(r).length>0&&(t.condenser=r),typeof e.agent==`string`&&(t.agent=e.agent),t}function i(e){if(e.conversation_settings&&Object.keys(e.conversation_settings).length>0)return e.conversation_settings;let t={};return typeof e.confirmation_mode==`boolean`&&(t.confirmation_mode=e.confirmation_mode),(typeof e.security_analyzer==`string`||e.security_analyzer===null)&&(t.security_analyzer=e.security_analyzer),typeof e.max_iterations==`number`&&(t.max_iterations=e.max_iterations),t}async function a(){let e=await t.callCloudProxy({backend:n(),method:`GET`,path:`/api/v1/settings`});return{...e,agent_settings:r(e),conversation_settings:i(e),llm_api_key_set:!!e.llm_api_key_set,search_api_key_set:!!e.search_api_key_set,provider_tokens_set:e.provider_tokens_set}}async function o(e){let r=n(),i={};if(e.agent_settings_diff){let t={...e.agent_settings_diff};t.agent_context===null&&delete t.agent_context,Object.keys(t).length>0&&(i.agent_settings_diff=t)}if(e.conversation_settings_diff&&Object.keys(e.conversation_settings_diff).length>0&&(i.conversation_settings_diff=e.conversation_settings_diff),e.app_preferences)for(let[t,n]of Object.entries(e.app_preferences))n!==void 0&&(i[t]=n);await t.callCloudProxy({backend:r,method:`POST`,path:`/api/v1/settings`,body:i})}async function s(){return t.callCloudProxy({backend:n(),method:`GET`,path:`/api/v1/settings/agent-schema`})}async function c(){return t.callCloudProxy({backend:n(),method:`GET`,path:`/api/v1/settings/conversation-schema`})}exports.fetchCloudConversationSettingsSchema=c,exports.fetchCloudSettings=a,exports.fetchCloudSettingsSchema=s,exports.saveCloudSettings=o;
|
|
1
|
+
require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../backend-registry/active-store.cjs`),t=require(`./proxy.cjs`);function n(){let t=e.getActiveBackend().backend;if(t.kind!==`cloud`)throw Error(`Cloud settings call requires a cloud backend.`);return t}function r(e){if(e.agent_settings&&Object.keys(e.agent_settings).length>0)return e.agent_settings;let t={},n={};typeof e.llm_model==`string`&&(n.model=e.llm_model),typeof e.llm_base_url==`string`&&(n.base_url=e.llm_base_url),typeof e.llm_api_key==`string`&&(n.api_key=e.llm_api_key),Object.keys(n).length>0&&(t.llm=n);let r={};return typeof e.enable_default_condenser==`boolean`&&(r.enabled=e.enable_default_condenser),typeof e.condenser_max_size==`number`&&(r.max_size=e.condenser_max_size),Object.keys(r).length>0&&(t.condenser=r),typeof e.agent==`string`&&(t.agent=e.agent),e.mcp_config&&Object.keys(e.mcp_config).length>0&&(t.mcp_config=e.mcp_config),t}function i(e){if(e.conversation_settings&&Object.keys(e.conversation_settings).length>0)return e.conversation_settings;let t={};return typeof e.confirmation_mode==`boolean`&&(t.confirmation_mode=e.confirmation_mode),(typeof e.security_analyzer==`string`||e.security_analyzer===null)&&(t.security_analyzer=e.security_analyzer),typeof e.max_iterations==`number`&&(t.max_iterations=e.max_iterations),t}async function a(){let e=await t.callCloudProxy({backend:n(),method:`GET`,path:`/api/v1/settings`});return{...e,agent_settings:r(e),conversation_settings:i(e),llm_api_key_set:!!e.llm_api_key_set,search_api_key_set:!!e.search_api_key_set,provider_tokens_set:e.provider_tokens_set}}async function o(e){let r=n(),i={};if(e.agent_settings_diff){let t={...e.agent_settings_diff};t.agent_context===null&&delete t.agent_context,Object.keys(t).length>0&&(i.agent_settings_diff=t)}if(e.conversation_settings_diff&&Object.keys(e.conversation_settings_diff).length>0&&(i.conversation_settings_diff=e.conversation_settings_diff),e.app_preferences)for(let[t,n]of Object.entries(e.app_preferences))n!==void 0&&(i[t]=n);await t.callCloudProxy({backend:r,method:`POST`,path:`/api/v1/settings`,body:i})}async function s(){return t.callCloudProxy({backend:n(),method:`GET`,path:`/api/v1/settings/agent-schema`})}async function c(){return t.callCloudProxy({backend:n(),method:`GET`,path:`/api/v1/settings/conversation-schema`})}exports.fetchCloudConversationSettingsSchema=c,exports.fetchCloudSettings=a,exports.fetchCloudSettingsSchema=s,exports.saveCloudSettings=o;
|
|
2
2
|
//# sourceMappingURL=settings-service.api.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-service.api.cjs","names":[],"sources":["../../../src/api/cloud/settings-service.api.ts"],"sourcesContent":["import {\n type MCPConfig,\n type Provider,\n type Settings,\n type SettingsValue,\n} from \"#/types/settings\";\nimport { type AppPreferences } from \"../settings-service/settings-service.api\";\nimport { getActiveBackend } from \"../backend-registry/active-store\";\nimport type { Backend } from \"../backend-registry/types\";\nimport { callCloudProxy } from \"./proxy\";\n\n/**\n * The cloud Settings response is mostly flat — top-level fields like\n * `llm_model`, `provider_tokens_set`, etc., rather than the nested\n * `{ agent_settings, conversation_settings }` shape the local agent-server\n * uses. We deliberately do NOT remap cloud fields into the local shape:\n * the GUI's `Settings` type already supports both layouts (it has flat\n * fields AND nested `agent_settings`/`conversation_settings`), and\n * cloud-aware hooks like `useUserProviders` read directly from the flat\n * `provider_tokens_set` field. So the cloud response is passed through as\n * a `Partial<Settings>`, with a small derivation step to also populate\n * the nested fields the local-mode settings UI consumes.\n */\ntype CloudSettingsResponse = {\n llm_model?: string;\n llm_base_url?: string;\n llm_api_key?: string | null;\n llm_api_key_set?: boolean;\n search_api_key_set?: boolean;\n agent?: string;\n confirmation_mode?: boolean;\n security_analyzer?: string | null;\n max_iterations?: number | null;\n enable_default_condenser?: boolean;\n condenser_max_size?: number | null;\n enable_proactive_conversation_starters?: boolean;\n enable_solvability_analysis?: boolean;\n enable_sound_notifications?: boolean;\n language?: string;\n email?: string;\n email_verified?: boolean;\n git_user_name?: string;\n git_user_email?: string;\n user_consents_to_analytics?: boolean | null;\n is_new_user?: boolean;\n remote_runtime_resource_factor?: number | null;\n max_budget_per_task?: number | null;\n provider_tokens_set?: Partial<Record<Provider, string | null>>;\n mcp_config?: MCPConfig;\n disabled_skills?: string[];\n agent_settings?: Record<string, SettingsValue> | null;\n conversation_settings?: Record<string, SettingsValue> | null;\n agent_settings_schema?: unknown;\n conversation_settings_schema?: unknown;\n [key: string]: unknown;\n};\n\nfunction getActiveCloudBackend(): Backend {\n const active = getActiveBackend().backend;\n if (active.kind !== \"cloud\") {\n throw new Error(\"Cloud settings call requires a cloud backend.\");\n }\n return active;\n}\n\n/**\n * Build the nested `agent_settings` block from the cloud's flat fields.\n * Used so the local-mode settings page (which renders against the nested\n * shape) shows the right values when the active backend is cloud.\n */\nfunction deriveAgentSettings(\n flat: CloudSettingsResponse,\n): Record<string, SettingsValue> {\n if (flat.agent_settings && Object.keys(flat.agent_settings).length > 0) {\n return flat.agent_settings;\n }\n const agent: Record<string, SettingsValue> = {};\n const llm: Record<string, SettingsValue> = {};\n if (typeof flat.llm_model === \"string\") llm.model = flat.llm_model;\n if (typeof flat.llm_base_url === \"string\") llm.base_url = flat.llm_base_url;\n if (typeof flat.llm_api_key === \"string\") llm.api_key = flat.llm_api_key;\n if (Object.keys(llm).length > 0) agent.llm = llm;\n\n const condenser: Record<string, SettingsValue> = {};\n if (typeof flat.enable_default_condenser === \"boolean\") {\n condenser.enabled = flat.enable_default_condenser;\n }\n if (typeof flat.condenser_max_size === \"number\") {\n condenser.max_size = flat.condenser_max_size;\n }\n if (Object.keys(condenser).length > 0) agent.condenser = condenser;\n\n if (typeof flat.agent === \"string\") agent.agent = flat.agent;\n return agent;\n}\n\nfunction deriveConversationSettings(\n flat: CloudSettingsResponse,\n): Record<string, SettingsValue> {\n if (\n flat.conversation_settings &&\n Object.keys(flat.conversation_settings).length > 0\n ) {\n return flat.conversation_settings;\n }\n const out: Record<string, SettingsValue> = {};\n if (typeof flat.confirmation_mode === \"boolean\") {\n out.confirmation_mode = flat.confirmation_mode;\n }\n if (\n typeof flat.security_analyzer === \"string\" ||\n flat.security_analyzer === null\n ) {\n out.security_analyzer = flat.security_analyzer;\n }\n if (typeof flat.max_iterations === \"number\") {\n out.max_iterations = flat.max_iterations;\n }\n return out;\n}\n\n/**\n * Fetch the cloud settings and return them as a `Partial<Settings>`.\n *\n * Top-level fields like `provider_tokens_set` are preserved unchanged so\n * the existing `useUserProviders` → `useAppInstallations` →\n * `useGitRepositories` chain (which reads `settings.provider_tokens_set`)\n * fires correctly in cloud mode. Nested `agent_settings` /\n * `conversation_settings` are derived for the settings page.\n */\nexport async function fetchCloudSettings(): Promise<Partial<Settings>> {\n const backend = getActiveCloudBackend();\n const flat = await callCloudProxy<CloudSettingsResponse>({\n backend,\n method: \"GET\",\n path: \"/api/v1/settings\",\n });\n\n return {\n ...flat,\n agent_settings: deriveAgentSettings(flat),\n conversation_settings: deriveConversationSettings(flat),\n llm_api_key_set: !!flat.llm_api_key_set,\n search_api_key_set: !!flat.search_api_key_set,\n provider_tokens_set: flat.provider_tokens_set,\n } as Partial<Settings>;\n}\n\nexport async function saveCloudSettings(diff: {\n agent_settings_diff?: Record<string, SettingsValue>;\n conversation_settings_diff?: Record<string, SettingsValue>;\n /**\n * App-level user preferences (language, sound notifications, disabled\n * skills, …). The cloud `POST /api/v1/settings` consumes these as flat\n * top-level fields, so this helper iterates the object and assigns each\n * key onto the request body.\n *\n * Note: `app_preferences.disabled_skills` is the canonical source for the\n * skill list since `AppPreferences` was unified in agent-server 1.27.\n * Callers that still pass `disabled_skills` separately should migrate to\n * setting it under `app_preferences` instead.\n */\n app_preferences?: AppPreferences;\n}): Promise<void> {\n const backend = getActiveCloudBackend();\n const body: Record<string, unknown> = {};\n if (diff.agent_settings_diff) {\n const agentDiff: Record<string, SettingsValue> = {\n ...diff.agent_settings_diff,\n };\n // The cloud validates agent settings against the SDK's\n // OpenHandsAgentSettings, whose `agent_context` is a required\n // AgentContext (not Optional). A literal `agent_context: null` fails\n // backend validation, so drop it and let the backend keep/default it.\n // See OpenHands/agent-canvas#981.\n if (agentDiff.agent_context === null) {\n delete agentDiff.agent_context;\n }\n if (Object.keys(agentDiff).length > 0) {\n body.agent_settings_diff = agentDiff;\n }\n }\n if (\n diff.conversation_settings_diff &&\n Object.keys(diff.conversation_settings_diff).length > 0\n ) {\n body.conversation_settings_diff = diff.conversation_settings_diff;\n }\n // Flat top-level app-preference fields (language, git_user_name,\n // disabled_skills, …). The cloud POST /api/v1/settings stores these\n // directly; see `CloudSettingsResponse` and the MSW handler in\n // `src/mocks/settings-handlers.ts` for the accepted shape. `undefined`\n // values are skipped so the cloud server keeps the prior value; `null`\n // and empty arrays (e.g. re-enabling every skill) round-trip as\n // explicit clears.\n if (diff.app_preferences) {\n for (const [key, value] of Object.entries(diff.app_preferences)) {\n if (value !== undefined) {\n body[key] = value;\n }\n }\n }\n await callCloudProxy<unknown>({\n backend,\n method: \"POST\",\n path: \"/api/v1/settings\",\n body,\n });\n}\n\nexport async function fetchCloudSettingsSchema(): Promise<unknown> {\n const backend = getActiveCloudBackend();\n return callCloudProxy<unknown>({\n backend,\n method: \"GET\",\n path: \"/api/v1/settings/agent-schema\",\n });\n}\n\nexport async function fetchCloudConversationSettingsSchema(): Promise<unknown> {\n const backend = getActiveCloudBackend();\n return callCloudProxy<unknown>({\n backend,\n method: \"GET\",\n path: \"/api/v1/settings/conversation-schema\",\n });\n}\n"],"mappings":"iIAyDA,SAAS,GAAiC,CACxC,IAAM,EAAS,EAAA,kBAAkB,CAAC,QAClC,GAAI,EAAO,OAAS,QAClB,MAAU,MAAM,gDAAgD,CAElE,OAAO,EAQT,SAAS,EACP,EAC+B,CAC/B,GAAI,EAAK,gBAAkB,OAAO,KAAK,EAAK,eAAe,CAAC,OAAS,EACnE,OAAO,EAAK,eAEd,IAAM,EAAuC,EAAE,CACzC,EAAqC,EAAE,CACzC,OAAO,EAAK,WAAc,WAAU,EAAI,MAAQ,EAAK,WACrD,OAAO,EAAK,cAAiB,WAAU,EAAI,SAAW,EAAK,cAC3D,OAAO,EAAK,aAAgB,WAAU,EAAI,QAAU,EAAK,aACzD,OAAO,KAAK,EAAI,CAAC,OAAS,IAAG,EAAM,IAAM,GAE7C,IAAM,EAA2C,EAAE,CAUnD,OATI,OAAO,EAAK,0BAA6B,YAC3C,EAAU,QAAU,EAAK,0BAEvB,OAAO,EAAK,oBAAuB,WACrC,EAAU,SAAW,EAAK,oBAExB,OAAO,KAAK,EAAU,CAAC,OAAS,IAAG,EAAM,UAAY,GAErD,OAAO,EAAK,OAAU,WAAU,EAAM,MAAQ,EAAK,OAChD,EAGT,SAAS,EACP,EAC+B,CAC/B,GACE,EAAK,uBACL,OAAO,KAAK,EAAK,sBAAsB,CAAC,OAAS,EAEjD,OAAO,EAAK,sBAEd,IAAM,EAAqC,EAAE,CAa7C,OAZI,OAAO,EAAK,mBAAsB,YACpC,EAAI,kBAAoB,EAAK,oBAG7B,OAAO,EAAK,mBAAsB,UAClC,EAAK,oBAAsB,QAE3B,EAAI,kBAAoB,EAAK,mBAE3B,OAAO,EAAK,gBAAmB,WACjC,EAAI,eAAiB,EAAK,gBAErB,EAYT,eAAsB,GAAiD,CAErE,IAAM,EAAO,MAAM,EAAA,eAAsC,CACvD,QAFc,GAEd,CACA,OAAQ,MACR,KAAM,mBACP,CAAC,CAEF,MAAO,CACL,GAAG,EACH,eAAgB,EAAoB,EAAK,CACzC,sBAAuB,EAA2B,EAAK,CACvD,gBAAiB,CAAC,CAAC,EAAK,gBACxB,mBAAoB,CAAC,CAAC,EAAK,mBAC3B,oBAAqB,EAAK,oBAC3B,CAGH,eAAsB,EAAkB,EAetB,CAChB,IAAM,EAAU,GAAuB,CACjC,EAAgC,EAAE,CACxC,GAAI,EAAK,oBAAqB,CAC5B,IAAM,EAA2C,CAC/C,GAAG,EAAK,oBACT,CAMG,EAAU,gBAAkB,MAC9B,OAAO,EAAU,cAEf,OAAO,KAAK,EAAU,CAAC,OAAS,IAClC,EAAK,oBAAsB,GAgB/B,GAZE,EAAK,4BACL,OAAO,KAAK,EAAK,2BAA2B,CAAC,OAAS,IAEtD,EAAK,2BAA6B,EAAK,4BASrC,EAAK,oBACF,GAAM,CAAC,EAAK,KAAU,OAAO,QAAQ,EAAK,gBAAgB,CACzD,IAAU,IAAA,KACZ,EAAK,GAAO,GAIlB,MAAM,EAAA,eAAwB,CAC5B,UACA,OAAQ,OACR,KAAM,mBACN,OACD,CAAC,CAGJ,eAAsB,GAA6C,CAEjE,OAAO,EAAA,eAAwB,CAC7B,QAFc,GAEd,CACA,OAAQ,MACR,KAAM,gCACP,CAAC,CAGJ,eAAsB,GAAyD,CAE7E,OAAO,EAAA,eAAwB,CAC7B,QAFc,GAEd,CACA,OAAQ,MACR,KAAM,uCACP,CAAC"}
|
|
1
|
+
{"version":3,"file":"settings-service.api.cjs","names":[],"sources":["../../../src/api/cloud/settings-service.api.ts"],"sourcesContent":["import {\n type Provider,\n type Settings,\n type SettingsValue,\n} from \"#/types/settings\";\nimport { type AppPreferences } from \"../settings-service/settings-service.api\";\nimport { getActiveBackend } from \"../backend-registry/active-store\";\nimport type { Backend } from \"../backend-registry/types\";\nimport { callCloudProxy } from \"./proxy\";\n\n/**\n * The cloud Settings response is mostly flat — top-level fields like\n * `llm_model`, `provider_tokens_set`, etc., rather than the nested\n * `{ agent_settings, conversation_settings }` shape the local agent-server\n * uses. We deliberately do NOT remap cloud fields into the local shape:\n * the GUI's `Settings` type already supports both layouts (it has flat\n * fields AND nested `agent_settings`/`conversation_settings`), and\n * cloud-aware hooks like `useUserProviders` read directly from the flat\n * `provider_tokens_set` field. So the cloud response is passed through as\n * a `Partial<Settings>`, with a small derivation step to also populate\n * the nested fields the local-mode settings UI consumes.\n */\ntype CloudSettingsResponse = {\n llm_model?: string;\n llm_base_url?: string;\n llm_api_key?: string | null;\n llm_api_key_set?: boolean;\n search_api_key_set?: boolean;\n agent?: string;\n confirmation_mode?: boolean;\n security_analyzer?: string | null;\n max_iterations?: number | null;\n enable_default_condenser?: boolean;\n condenser_max_size?: number | null;\n enable_proactive_conversation_starters?: boolean;\n enable_solvability_analysis?: boolean;\n enable_sound_notifications?: boolean;\n language?: string;\n email?: string;\n email_verified?: boolean;\n git_user_name?: string;\n git_user_email?: string;\n user_consents_to_analytics?: boolean | null;\n is_new_user?: boolean;\n remote_runtime_resource_factor?: number | null;\n max_budget_per_task?: number | null;\n provider_tokens_set?: Partial<Record<Provider, string | null>>;\n mcp_config?: Record<string, SettingsValue>;\n disabled_skills?: string[];\n agent_settings?: Record<string, SettingsValue> | null;\n conversation_settings?: Record<string, SettingsValue> | null;\n agent_settings_schema?: unknown;\n conversation_settings_schema?: unknown;\n [key: string]: unknown;\n};\n\nfunction getActiveCloudBackend(): Backend {\n const active = getActiveBackend().backend;\n if (active.kind !== \"cloud\") {\n throw new Error(\"Cloud settings call requires a cloud backend.\");\n }\n return active;\n}\n\n/**\n * Build the nested `agent_settings` block from the cloud's flat fields.\n * Used so the local-mode settings page (which renders against the nested\n * shape) shows the right values when the active backend is cloud.\n */\nfunction deriveAgentSettings(\n flat: CloudSettingsResponse,\n): Record<string, SettingsValue> {\n if (flat.agent_settings && Object.keys(flat.agent_settings).length > 0) {\n return flat.agent_settings;\n }\n const agent: Record<string, SettingsValue> = {};\n const llm: Record<string, SettingsValue> = {};\n if (typeof flat.llm_model === \"string\") llm.model = flat.llm_model;\n if (typeof flat.llm_base_url === \"string\") llm.base_url = flat.llm_base_url;\n if (typeof flat.llm_api_key === \"string\") llm.api_key = flat.llm_api_key;\n if (Object.keys(llm).length > 0) agent.llm = llm;\n\n const condenser: Record<string, SettingsValue> = {};\n if (typeof flat.enable_default_condenser === \"boolean\") {\n condenser.enabled = flat.enable_default_condenser;\n }\n if (typeof flat.condenser_max_size === \"number\") {\n condenser.max_size = flat.condenser_max_size;\n }\n if (Object.keys(condenser).length > 0) agent.condenser = condenser;\n\n if (typeof flat.agent === \"string\") agent.agent = flat.agent;\n if (flat.mcp_config && Object.keys(flat.mcp_config).length > 0) {\n agent.mcp_config = flat.mcp_config;\n }\n return agent;\n}\n\nfunction deriveConversationSettings(\n flat: CloudSettingsResponse,\n): Record<string, SettingsValue> {\n if (\n flat.conversation_settings &&\n Object.keys(flat.conversation_settings).length > 0\n ) {\n return flat.conversation_settings;\n }\n const out: Record<string, SettingsValue> = {};\n if (typeof flat.confirmation_mode === \"boolean\") {\n out.confirmation_mode = flat.confirmation_mode;\n }\n if (\n typeof flat.security_analyzer === \"string\" ||\n flat.security_analyzer === null\n ) {\n out.security_analyzer = flat.security_analyzer;\n }\n if (typeof flat.max_iterations === \"number\") {\n out.max_iterations = flat.max_iterations;\n }\n return out;\n}\n\n/**\n * Fetch the cloud settings and return them as a `Partial<Settings>`.\n *\n * Top-level fields like `provider_tokens_set` are preserved unchanged so\n * the existing `useUserProviders` → `useAppInstallations` →\n * `useGitRepositories` chain (which reads `settings.provider_tokens_set`)\n * fires correctly in cloud mode. Nested `agent_settings` /\n * `conversation_settings` are derived for the settings page.\n */\nexport async function fetchCloudSettings(): Promise<Partial<Settings>> {\n const backend = getActiveCloudBackend();\n const flat = await callCloudProxy<CloudSettingsResponse>({\n backend,\n method: \"GET\",\n path: \"/api/v1/settings\",\n });\n\n return {\n ...flat,\n agent_settings: deriveAgentSettings(flat),\n conversation_settings: deriveConversationSettings(flat),\n llm_api_key_set: !!flat.llm_api_key_set,\n search_api_key_set: !!flat.search_api_key_set,\n provider_tokens_set: flat.provider_tokens_set,\n } as Partial<Settings>;\n}\n\nexport async function saveCloudSettings(diff: {\n agent_settings_diff?: Record<string, SettingsValue>;\n conversation_settings_diff?: Record<string, SettingsValue>;\n /**\n * App-level user preferences (language, sound notifications, disabled\n * skills, …). The cloud `POST /api/v1/settings` consumes these as flat\n * top-level fields, so this helper iterates the object and assigns each\n * key onto the request body.\n *\n * Note: `app_preferences.disabled_skills` is the canonical source for the\n * skill list since `AppPreferences` was unified in agent-server 1.27.\n * Callers that still pass `disabled_skills` separately should migrate to\n * setting it under `app_preferences` instead.\n */\n app_preferences?: AppPreferences;\n}): Promise<void> {\n const backend = getActiveCloudBackend();\n const body: Record<string, unknown> = {};\n if (diff.agent_settings_diff) {\n const agentDiff: Record<string, SettingsValue> = {\n ...diff.agent_settings_diff,\n };\n // The cloud validates agent settings against the SDK's\n // OpenHandsAgentSettings, whose `agent_context` is a required\n // AgentContext (not Optional). A literal `agent_context: null` fails\n // backend validation, so drop it and let the backend keep/default it.\n // See OpenHands/agent-canvas#981.\n if (agentDiff.agent_context === null) {\n delete agentDiff.agent_context;\n }\n if (Object.keys(agentDiff).length > 0) {\n body.agent_settings_diff = agentDiff;\n }\n }\n if (\n diff.conversation_settings_diff &&\n Object.keys(diff.conversation_settings_diff).length > 0\n ) {\n body.conversation_settings_diff = diff.conversation_settings_diff;\n }\n // Flat top-level app-preference fields (language, git_user_name,\n // disabled_skills, …). The cloud POST /api/v1/settings stores these\n // directly; see `CloudSettingsResponse` and the MSW handler in\n // `src/mocks/settings-handlers.ts` for the accepted shape. `undefined`\n // values are skipped so the cloud server keeps the prior value; `null`\n // and empty arrays (e.g. re-enabling every skill) round-trip as\n // explicit clears.\n if (diff.app_preferences) {\n for (const [key, value] of Object.entries(diff.app_preferences)) {\n if (value !== undefined) {\n body[key] = value;\n }\n }\n }\n await callCloudProxy<unknown>({\n backend,\n method: \"POST\",\n path: \"/api/v1/settings\",\n body,\n });\n}\n\nexport async function fetchCloudSettingsSchema(): Promise<unknown> {\n const backend = getActiveCloudBackend();\n return callCloudProxy<unknown>({\n backend,\n method: \"GET\",\n path: \"/api/v1/settings/agent-schema\",\n });\n}\n\nexport async function fetchCloudConversationSettingsSchema(): Promise<unknown> {\n const backend = getActiveCloudBackend();\n return callCloudProxy<unknown>({\n backend,\n method: \"GET\",\n path: \"/api/v1/settings/conversation-schema\",\n });\n}\n"],"mappings":"iIAwDA,SAAS,GAAiC,CACxC,IAAM,EAAS,EAAA,kBAAkB,CAAC,QAClC,GAAI,EAAO,OAAS,QAClB,MAAU,MAAM,gDAAgD,CAElE,OAAO,EAQT,SAAS,EACP,EAC+B,CAC/B,GAAI,EAAK,gBAAkB,OAAO,KAAK,EAAK,eAAe,CAAC,OAAS,EACnE,OAAO,EAAK,eAEd,IAAM,EAAuC,EAAE,CACzC,EAAqC,EAAE,CACzC,OAAO,EAAK,WAAc,WAAU,EAAI,MAAQ,EAAK,WACrD,OAAO,EAAK,cAAiB,WAAU,EAAI,SAAW,EAAK,cAC3D,OAAO,EAAK,aAAgB,WAAU,EAAI,QAAU,EAAK,aACzD,OAAO,KAAK,EAAI,CAAC,OAAS,IAAG,EAAM,IAAM,GAE7C,IAAM,EAA2C,EAAE,CAanD,OAZI,OAAO,EAAK,0BAA6B,YAC3C,EAAU,QAAU,EAAK,0BAEvB,OAAO,EAAK,oBAAuB,WACrC,EAAU,SAAW,EAAK,oBAExB,OAAO,KAAK,EAAU,CAAC,OAAS,IAAG,EAAM,UAAY,GAErD,OAAO,EAAK,OAAU,WAAU,EAAM,MAAQ,EAAK,OACnD,EAAK,YAAc,OAAO,KAAK,EAAK,WAAW,CAAC,OAAS,IAC3D,EAAM,WAAa,EAAK,YAEnB,EAGT,SAAS,EACP,EAC+B,CAC/B,GACE,EAAK,uBACL,OAAO,KAAK,EAAK,sBAAsB,CAAC,OAAS,EAEjD,OAAO,EAAK,sBAEd,IAAM,EAAqC,EAAE,CAa7C,OAZI,OAAO,EAAK,mBAAsB,YACpC,EAAI,kBAAoB,EAAK,oBAG7B,OAAO,EAAK,mBAAsB,UAClC,EAAK,oBAAsB,QAE3B,EAAI,kBAAoB,EAAK,mBAE3B,OAAO,EAAK,gBAAmB,WACjC,EAAI,eAAiB,EAAK,gBAErB,EAYT,eAAsB,GAAiD,CAErE,IAAM,EAAO,MAAM,EAAA,eAAsC,CACvD,QAFc,GAEd,CACA,OAAQ,MACR,KAAM,mBACP,CAAC,CAEF,MAAO,CACL,GAAG,EACH,eAAgB,EAAoB,EAAK,CACzC,sBAAuB,EAA2B,EAAK,CACvD,gBAAiB,CAAC,CAAC,EAAK,gBACxB,mBAAoB,CAAC,CAAC,EAAK,mBAC3B,oBAAqB,EAAK,oBAC3B,CAGH,eAAsB,EAAkB,EAetB,CAChB,IAAM,EAAU,GAAuB,CACjC,EAAgC,EAAE,CACxC,GAAI,EAAK,oBAAqB,CAC5B,IAAM,EAA2C,CAC/C,GAAG,EAAK,oBACT,CAMG,EAAU,gBAAkB,MAC9B,OAAO,EAAU,cAEf,OAAO,KAAK,EAAU,CAAC,OAAS,IAClC,EAAK,oBAAsB,GAgB/B,GAZE,EAAK,4BACL,OAAO,KAAK,EAAK,2BAA2B,CAAC,OAAS,IAEtD,EAAK,2BAA6B,EAAK,4BASrC,EAAK,oBACF,GAAM,CAAC,EAAK,KAAU,OAAO,QAAQ,EAAK,gBAAgB,CACzD,IAAU,IAAA,KACZ,EAAK,GAAO,GAIlB,MAAM,EAAA,eAAwB,CAC5B,UACA,OAAQ,OACR,KAAM,mBACN,OACD,CAAC,CAGJ,eAAsB,GAA6C,CAEjE,OAAO,EAAA,eAAwB,CAC7B,QAFc,GAEd,CACA,OAAQ,MACR,KAAM,gCACP,CAAC,CAGJ,eAAsB,GAAyD,CAE7E,OAAO,EAAA,eAAwB,CAC7B,QAFc,GAEd,CACA,OAAQ,MACR,KAAM,uCACP,CAAC"}
|
|
@@ -11,7 +11,7 @@ function r(e) {
|
|
|
11
11
|
let t = {}, n = {};
|
|
12
12
|
typeof e.llm_model == "string" && (n.model = e.llm_model), typeof e.llm_base_url == "string" && (n.base_url = e.llm_base_url), typeof e.llm_api_key == "string" && (n.api_key = e.llm_api_key), Object.keys(n).length > 0 && (t.llm = n);
|
|
13
13
|
let r = {};
|
|
14
|
-
return typeof e.enable_default_condenser == "boolean" && (r.enabled = e.enable_default_condenser), typeof e.condenser_max_size == "number" && (r.max_size = e.condenser_max_size), Object.keys(r).length > 0 && (t.condenser = r), typeof e.agent == "string" && (t.agent = e.agent), t;
|
|
14
|
+
return typeof e.enable_default_condenser == "boolean" && (r.enabled = e.enable_default_condenser), typeof e.condenser_max_size == "number" && (r.max_size = e.condenser_max_size), Object.keys(r).length > 0 && (t.condenser = r), typeof e.agent == "string" && (t.agent = e.agent), e.mcp_config && Object.keys(e.mcp_config).length > 0 && (t.mcp_config = e.mcp_config), t;
|
|
15
15
|
}
|
|
16
16
|
function i(e) {
|
|
17
17
|
if (e.conversation_settings && Object.keys(e.conversation_settings).length > 0) return e.conversation_settings;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-service.api.js","names":[],"sources":["../../../src/api/cloud/settings-service.api.ts"],"sourcesContent":["import {\n type MCPConfig,\n type Provider,\n type Settings,\n type SettingsValue,\n} from \"#/types/settings\";\nimport { type AppPreferences } from \"../settings-service/settings-service.api\";\nimport { getActiveBackend } from \"../backend-registry/active-store\";\nimport type { Backend } from \"../backend-registry/types\";\nimport { callCloudProxy } from \"./proxy\";\n\n/**\n * The cloud Settings response is mostly flat — top-level fields like\n * `llm_model`, `provider_tokens_set`, etc., rather than the nested\n * `{ agent_settings, conversation_settings }` shape the local agent-server\n * uses. We deliberately do NOT remap cloud fields into the local shape:\n * the GUI's `Settings` type already supports both layouts (it has flat\n * fields AND nested `agent_settings`/`conversation_settings`), and\n * cloud-aware hooks like `useUserProviders` read directly from the flat\n * `provider_tokens_set` field. So the cloud response is passed through as\n * a `Partial<Settings>`, with a small derivation step to also populate\n * the nested fields the local-mode settings UI consumes.\n */\ntype CloudSettingsResponse = {\n llm_model?: string;\n llm_base_url?: string;\n llm_api_key?: string | null;\n llm_api_key_set?: boolean;\n search_api_key_set?: boolean;\n agent?: string;\n confirmation_mode?: boolean;\n security_analyzer?: string | null;\n max_iterations?: number | null;\n enable_default_condenser?: boolean;\n condenser_max_size?: number | null;\n enable_proactive_conversation_starters?: boolean;\n enable_solvability_analysis?: boolean;\n enable_sound_notifications?: boolean;\n language?: string;\n email?: string;\n email_verified?: boolean;\n git_user_name?: string;\n git_user_email?: string;\n user_consents_to_analytics?: boolean | null;\n is_new_user?: boolean;\n remote_runtime_resource_factor?: number | null;\n max_budget_per_task?: number | null;\n provider_tokens_set?: Partial<Record<Provider, string | null>>;\n mcp_config?: MCPConfig;\n disabled_skills?: string[];\n agent_settings?: Record<string, SettingsValue> | null;\n conversation_settings?: Record<string, SettingsValue> | null;\n agent_settings_schema?: unknown;\n conversation_settings_schema?: unknown;\n [key: string]: unknown;\n};\n\nfunction getActiveCloudBackend(): Backend {\n const active = getActiveBackend().backend;\n if (active.kind !== \"cloud\") {\n throw new Error(\"Cloud settings call requires a cloud backend.\");\n }\n return active;\n}\n\n/**\n * Build the nested `agent_settings` block from the cloud's flat fields.\n * Used so the local-mode settings page (which renders against the nested\n * shape) shows the right values when the active backend is cloud.\n */\nfunction deriveAgentSettings(\n flat: CloudSettingsResponse,\n): Record<string, SettingsValue> {\n if (flat.agent_settings && Object.keys(flat.agent_settings).length > 0) {\n return flat.agent_settings;\n }\n const agent: Record<string, SettingsValue> = {};\n const llm: Record<string, SettingsValue> = {};\n if (typeof flat.llm_model === \"string\") llm.model = flat.llm_model;\n if (typeof flat.llm_base_url === \"string\") llm.base_url = flat.llm_base_url;\n if (typeof flat.llm_api_key === \"string\") llm.api_key = flat.llm_api_key;\n if (Object.keys(llm).length > 0) agent.llm = llm;\n\n const condenser: Record<string, SettingsValue> = {};\n if (typeof flat.enable_default_condenser === \"boolean\") {\n condenser.enabled = flat.enable_default_condenser;\n }\n if (typeof flat.condenser_max_size === \"number\") {\n condenser.max_size = flat.condenser_max_size;\n }\n if (Object.keys(condenser).length > 0) agent.condenser = condenser;\n\n if (typeof flat.agent === \"string\") agent.agent = flat.agent;\n return agent;\n}\n\nfunction deriveConversationSettings(\n flat: CloudSettingsResponse,\n): Record<string, SettingsValue> {\n if (\n flat.conversation_settings &&\n Object.keys(flat.conversation_settings).length > 0\n ) {\n return flat.conversation_settings;\n }\n const out: Record<string, SettingsValue> = {};\n if (typeof flat.confirmation_mode === \"boolean\") {\n out.confirmation_mode = flat.confirmation_mode;\n }\n if (\n typeof flat.security_analyzer === \"string\" ||\n flat.security_analyzer === null\n ) {\n out.security_analyzer = flat.security_analyzer;\n }\n if (typeof flat.max_iterations === \"number\") {\n out.max_iterations = flat.max_iterations;\n }\n return out;\n}\n\n/**\n * Fetch the cloud settings and return them as a `Partial<Settings>`.\n *\n * Top-level fields like `provider_tokens_set` are preserved unchanged so\n * the existing `useUserProviders` → `useAppInstallations` →\n * `useGitRepositories` chain (which reads `settings.provider_tokens_set`)\n * fires correctly in cloud mode. Nested `agent_settings` /\n * `conversation_settings` are derived for the settings page.\n */\nexport async function fetchCloudSettings(): Promise<Partial<Settings>> {\n const backend = getActiveCloudBackend();\n const flat = await callCloudProxy<CloudSettingsResponse>({\n backend,\n method: \"GET\",\n path: \"/api/v1/settings\",\n });\n\n return {\n ...flat,\n agent_settings: deriveAgentSettings(flat),\n conversation_settings: deriveConversationSettings(flat),\n llm_api_key_set: !!flat.llm_api_key_set,\n search_api_key_set: !!flat.search_api_key_set,\n provider_tokens_set: flat.provider_tokens_set,\n } as Partial<Settings>;\n}\n\nexport async function saveCloudSettings(diff: {\n agent_settings_diff?: Record<string, SettingsValue>;\n conversation_settings_diff?: Record<string, SettingsValue>;\n /**\n * App-level user preferences (language, sound notifications, disabled\n * skills, …). The cloud `POST /api/v1/settings` consumes these as flat\n * top-level fields, so this helper iterates the object and assigns each\n * key onto the request body.\n *\n * Note: `app_preferences.disabled_skills` is the canonical source for the\n * skill list since `AppPreferences` was unified in agent-server 1.27.\n * Callers that still pass `disabled_skills` separately should migrate to\n * setting it under `app_preferences` instead.\n */\n app_preferences?: AppPreferences;\n}): Promise<void> {\n const backend = getActiveCloudBackend();\n const body: Record<string, unknown> = {};\n if (diff.agent_settings_diff) {\n const agentDiff: Record<string, SettingsValue> = {\n ...diff.agent_settings_diff,\n };\n // The cloud validates agent settings against the SDK's\n // OpenHandsAgentSettings, whose `agent_context` is a required\n // AgentContext (not Optional). A literal `agent_context: null` fails\n // backend validation, so drop it and let the backend keep/default it.\n // See OpenHands/agent-canvas#981.\n if (agentDiff.agent_context === null) {\n delete agentDiff.agent_context;\n }\n if (Object.keys(agentDiff).length > 0) {\n body.agent_settings_diff = agentDiff;\n }\n }\n if (\n diff.conversation_settings_diff &&\n Object.keys(diff.conversation_settings_diff).length > 0\n ) {\n body.conversation_settings_diff = diff.conversation_settings_diff;\n }\n // Flat top-level app-preference fields (language, git_user_name,\n // disabled_skills, …). The cloud POST /api/v1/settings stores these\n // directly; see `CloudSettingsResponse` and the MSW handler in\n // `src/mocks/settings-handlers.ts` for the accepted shape. `undefined`\n // values are skipped so the cloud server keeps the prior value; `null`\n // and empty arrays (e.g. re-enabling every skill) round-trip as\n // explicit clears.\n if (diff.app_preferences) {\n for (const [key, value] of Object.entries(diff.app_preferences)) {\n if (value !== undefined) {\n body[key] = value;\n }\n }\n }\n await callCloudProxy<unknown>({\n backend,\n method: \"POST\",\n path: \"/api/v1/settings\",\n body,\n });\n}\n\nexport async function fetchCloudSettingsSchema(): Promise<unknown> {\n const backend = getActiveCloudBackend();\n return callCloudProxy<unknown>({\n backend,\n method: \"GET\",\n path: \"/api/v1/settings/agent-schema\",\n });\n}\n\nexport async function fetchCloudConversationSettingsSchema(): Promise<unknown> {\n const backend = getActiveCloudBackend();\n return callCloudProxy<unknown>({\n backend,\n method: \"GET\",\n path: \"/api/v1/settings/conversation-schema\",\n });\n}\n"],"mappings":";;;AAyDA,SAAS,IAAiC;CACxC,IAAM,IAAS,GAAkB,CAAC;AAClC,KAAI,EAAO,SAAS,QAClB,OAAU,MAAM,gDAAgD;AAElE,QAAO;;AAQT,SAAS,EACP,GAC+B;AAC/B,KAAI,EAAK,kBAAkB,OAAO,KAAK,EAAK,eAAe,CAAC,SAAS,EACnE,QAAO,EAAK;CAEd,IAAM,IAAuC,EAAE,EACzC,IAAqC,EAAE;AAI7C,CAHI,OAAO,EAAK,aAAc,aAAU,EAAI,QAAQ,EAAK,YACrD,OAAO,EAAK,gBAAiB,aAAU,EAAI,WAAW,EAAK,eAC3D,OAAO,EAAK,eAAgB,aAAU,EAAI,UAAU,EAAK,cACzD,OAAO,KAAK,EAAI,CAAC,SAAS,MAAG,EAAM,MAAM;CAE7C,IAAM,IAA2C,EAAE;AAUnD,QATI,OAAO,EAAK,4BAA6B,cAC3C,EAAU,UAAU,EAAK,2BAEvB,OAAO,EAAK,sBAAuB,aACrC,EAAU,WAAW,EAAK,qBAExB,OAAO,KAAK,EAAU,CAAC,SAAS,MAAG,EAAM,YAAY,IAErD,OAAO,EAAK,SAAU,aAAU,EAAM,QAAQ,EAAK,QAChD;;AAGT,SAAS,EACP,GAC+B;AAC/B,KACE,EAAK,yBACL,OAAO,KAAK,EAAK,sBAAsB,CAAC,SAAS,EAEjD,QAAO,EAAK;CAEd,IAAM,IAAqC,EAAE;AAa7C,QAZI,OAAO,EAAK,qBAAsB,cACpC,EAAI,oBAAoB,EAAK,qBAG7B,OAAO,EAAK,qBAAsB,YAClC,EAAK,sBAAsB,UAE3B,EAAI,oBAAoB,EAAK,oBAE3B,OAAO,EAAK,kBAAmB,aACjC,EAAI,iBAAiB,EAAK,iBAErB;;AAYT,eAAsB,IAAiD;CAErE,IAAM,IAAO,MAAM,EAAsC;EACvD,SAFc,GAEd;EACA,QAAQ;EACR,MAAM;EACP,CAAC;AAEF,QAAO;EACL,GAAG;EACH,gBAAgB,EAAoB,EAAK;EACzC,uBAAuB,EAA2B,EAAK;EACvD,iBAAiB,CAAC,CAAC,EAAK;EACxB,oBAAoB,CAAC,CAAC,EAAK;EAC3B,qBAAqB,EAAK;EAC3B;;AAGH,eAAsB,EAAkB,GAetB;CAChB,IAAM,IAAU,GAAuB,EACjC,IAAgC,EAAE;AACxC,KAAI,EAAK,qBAAqB;EAC5B,IAAM,IAA2C,EAC/C,GAAG,EAAK,qBACT;AASD,EAHI,EAAU,kBAAkB,QAC9B,OAAO,EAAU,eAEf,OAAO,KAAK,EAAU,CAAC,SAAS,MAClC,EAAK,sBAAsB;;AAgB/B,KAZE,EAAK,8BACL,OAAO,KAAK,EAAK,2BAA2B,CAAC,SAAS,MAEtD,EAAK,6BAA6B,EAAK,6BASrC,EAAK,sBACF,IAAM,CAAC,GAAK,MAAU,OAAO,QAAQ,EAAK,gBAAgB,CAC7D,CAAI,MAAU,KAAA,MACZ,EAAK,KAAO;AAIlB,OAAM,EAAwB;EAC5B;EACA,QAAQ;EACR,MAAM;EACN;EACD,CAAC;;AAGJ,eAAsB,IAA6C;AAEjE,QAAO,EAAwB;EAC7B,SAFc,GAEd;EACA,QAAQ;EACR,MAAM;EACP,CAAC;;AAGJ,eAAsB,IAAyD;AAE7E,QAAO,EAAwB;EAC7B,SAFc,GAEd;EACA,QAAQ;EACR,MAAM;EACP,CAAC"}
|
|
1
|
+
{"version":3,"file":"settings-service.api.js","names":[],"sources":["../../../src/api/cloud/settings-service.api.ts"],"sourcesContent":["import {\n type Provider,\n type Settings,\n type SettingsValue,\n} from \"#/types/settings\";\nimport { type AppPreferences } from \"../settings-service/settings-service.api\";\nimport { getActiveBackend } from \"../backend-registry/active-store\";\nimport type { Backend } from \"../backend-registry/types\";\nimport { callCloudProxy } from \"./proxy\";\n\n/**\n * The cloud Settings response is mostly flat — top-level fields like\n * `llm_model`, `provider_tokens_set`, etc., rather than the nested\n * `{ agent_settings, conversation_settings }` shape the local agent-server\n * uses. We deliberately do NOT remap cloud fields into the local shape:\n * the GUI's `Settings` type already supports both layouts (it has flat\n * fields AND nested `agent_settings`/`conversation_settings`), and\n * cloud-aware hooks like `useUserProviders` read directly from the flat\n * `provider_tokens_set` field. So the cloud response is passed through as\n * a `Partial<Settings>`, with a small derivation step to also populate\n * the nested fields the local-mode settings UI consumes.\n */\ntype CloudSettingsResponse = {\n llm_model?: string;\n llm_base_url?: string;\n llm_api_key?: string | null;\n llm_api_key_set?: boolean;\n search_api_key_set?: boolean;\n agent?: string;\n confirmation_mode?: boolean;\n security_analyzer?: string | null;\n max_iterations?: number | null;\n enable_default_condenser?: boolean;\n condenser_max_size?: number | null;\n enable_proactive_conversation_starters?: boolean;\n enable_solvability_analysis?: boolean;\n enable_sound_notifications?: boolean;\n language?: string;\n email?: string;\n email_verified?: boolean;\n git_user_name?: string;\n git_user_email?: string;\n user_consents_to_analytics?: boolean | null;\n is_new_user?: boolean;\n remote_runtime_resource_factor?: number | null;\n max_budget_per_task?: number | null;\n provider_tokens_set?: Partial<Record<Provider, string | null>>;\n mcp_config?: Record<string, SettingsValue>;\n disabled_skills?: string[];\n agent_settings?: Record<string, SettingsValue> | null;\n conversation_settings?: Record<string, SettingsValue> | null;\n agent_settings_schema?: unknown;\n conversation_settings_schema?: unknown;\n [key: string]: unknown;\n};\n\nfunction getActiveCloudBackend(): Backend {\n const active = getActiveBackend().backend;\n if (active.kind !== \"cloud\") {\n throw new Error(\"Cloud settings call requires a cloud backend.\");\n }\n return active;\n}\n\n/**\n * Build the nested `agent_settings` block from the cloud's flat fields.\n * Used so the local-mode settings page (which renders against the nested\n * shape) shows the right values when the active backend is cloud.\n */\nfunction deriveAgentSettings(\n flat: CloudSettingsResponse,\n): Record<string, SettingsValue> {\n if (flat.agent_settings && Object.keys(flat.agent_settings).length > 0) {\n return flat.agent_settings;\n }\n const agent: Record<string, SettingsValue> = {};\n const llm: Record<string, SettingsValue> = {};\n if (typeof flat.llm_model === \"string\") llm.model = flat.llm_model;\n if (typeof flat.llm_base_url === \"string\") llm.base_url = flat.llm_base_url;\n if (typeof flat.llm_api_key === \"string\") llm.api_key = flat.llm_api_key;\n if (Object.keys(llm).length > 0) agent.llm = llm;\n\n const condenser: Record<string, SettingsValue> = {};\n if (typeof flat.enable_default_condenser === \"boolean\") {\n condenser.enabled = flat.enable_default_condenser;\n }\n if (typeof flat.condenser_max_size === \"number\") {\n condenser.max_size = flat.condenser_max_size;\n }\n if (Object.keys(condenser).length > 0) agent.condenser = condenser;\n\n if (typeof flat.agent === \"string\") agent.agent = flat.agent;\n if (flat.mcp_config && Object.keys(flat.mcp_config).length > 0) {\n agent.mcp_config = flat.mcp_config;\n }\n return agent;\n}\n\nfunction deriveConversationSettings(\n flat: CloudSettingsResponse,\n): Record<string, SettingsValue> {\n if (\n flat.conversation_settings &&\n Object.keys(flat.conversation_settings).length > 0\n ) {\n return flat.conversation_settings;\n }\n const out: Record<string, SettingsValue> = {};\n if (typeof flat.confirmation_mode === \"boolean\") {\n out.confirmation_mode = flat.confirmation_mode;\n }\n if (\n typeof flat.security_analyzer === \"string\" ||\n flat.security_analyzer === null\n ) {\n out.security_analyzer = flat.security_analyzer;\n }\n if (typeof flat.max_iterations === \"number\") {\n out.max_iterations = flat.max_iterations;\n }\n return out;\n}\n\n/**\n * Fetch the cloud settings and return them as a `Partial<Settings>`.\n *\n * Top-level fields like `provider_tokens_set` are preserved unchanged so\n * the existing `useUserProviders` → `useAppInstallations` →\n * `useGitRepositories` chain (which reads `settings.provider_tokens_set`)\n * fires correctly in cloud mode. Nested `agent_settings` /\n * `conversation_settings` are derived for the settings page.\n */\nexport async function fetchCloudSettings(): Promise<Partial<Settings>> {\n const backend = getActiveCloudBackend();\n const flat = await callCloudProxy<CloudSettingsResponse>({\n backend,\n method: \"GET\",\n path: \"/api/v1/settings\",\n });\n\n return {\n ...flat,\n agent_settings: deriveAgentSettings(flat),\n conversation_settings: deriveConversationSettings(flat),\n llm_api_key_set: !!flat.llm_api_key_set,\n search_api_key_set: !!flat.search_api_key_set,\n provider_tokens_set: flat.provider_tokens_set,\n } as Partial<Settings>;\n}\n\nexport async function saveCloudSettings(diff: {\n agent_settings_diff?: Record<string, SettingsValue>;\n conversation_settings_diff?: Record<string, SettingsValue>;\n /**\n * App-level user preferences (language, sound notifications, disabled\n * skills, …). The cloud `POST /api/v1/settings` consumes these as flat\n * top-level fields, so this helper iterates the object and assigns each\n * key onto the request body.\n *\n * Note: `app_preferences.disabled_skills` is the canonical source for the\n * skill list since `AppPreferences` was unified in agent-server 1.27.\n * Callers that still pass `disabled_skills` separately should migrate to\n * setting it under `app_preferences` instead.\n */\n app_preferences?: AppPreferences;\n}): Promise<void> {\n const backend = getActiveCloudBackend();\n const body: Record<string, unknown> = {};\n if (diff.agent_settings_diff) {\n const agentDiff: Record<string, SettingsValue> = {\n ...diff.agent_settings_diff,\n };\n // The cloud validates agent settings against the SDK's\n // OpenHandsAgentSettings, whose `agent_context` is a required\n // AgentContext (not Optional). A literal `agent_context: null` fails\n // backend validation, so drop it and let the backend keep/default it.\n // See OpenHands/agent-canvas#981.\n if (agentDiff.agent_context === null) {\n delete agentDiff.agent_context;\n }\n if (Object.keys(agentDiff).length > 0) {\n body.agent_settings_diff = agentDiff;\n }\n }\n if (\n diff.conversation_settings_diff &&\n Object.keys(diff.conversation_settings_diff).length > 0\n ) {\n body.conversation_settings_diff = diff.conversation_settings_diff;\n }\n // Flat top-level app-preference fields (language, git_user_name,\n // disabled_skills, …). The cloud POST /api/v1/settings stores these\n // directly; see `CloudSettingsResponse` and the MSW handler in\n // `src/mocks/settings-handlers.ts` for the accepted shape. `undefined`\n // values are skipped so the cloud server keeps the prior value; `null`\n // and empty arrays (e.g. re-enabling every skill) round-trip as\n // explicit clears.\n if (diff.app_preferences) {\n for (const [key, value] of Object.entries(diff.app_preferences)) {\n if (value !== undefined) {\n body[key] = value;\n }\n }\n }\n await callCloudProxy<unknown>({\n backend,\n method: \"POST\",\n path: \"/api/v1/settings\",\n body,\n });\n}\n\nexport async function fetchCloudSettingsSchema(): Promise<unknown> {\n const backend = getActiveCloudBackend();\n return callCloudProxy<unknown>({\n backend,\n method: \"GET\",\n path: \"/api/v1/settings/agent-schema\",\n });\n}\n\nexport async function fetchCloudConversationSettingsSchema(): Promise<unknown> {\n const backend = getActiveCloudBackend();\n return callCloudProxy<unknown>({\n backend,\n method: \"GET\",\n path: \"/api/v1/settings/conversation-schema\",\n });\n}\n"],"mappings":";;;AAwDA,SAAS,IAAiC;CACxC,IAAM,IAAS,GAAkB,CAAC;AAClC,KAAI,EAAO,SAAS,QAClB,OAAU,MAAM,gDAAgD;AAElE,QAAO;;AAQT,SAAS,EACP,GAC+B;AAC/B,KAAI,EAAK,kBAAkB,OAAO,KAAK,EAAK,eAAe,CAAC,SAAS,EACnE,QAAO,EAAK;CAEd,IAAM,IAAuC,EAAE,EACzC,IAAqC,EAAE;AAI7C,CAHI,OAAO,EAAK,aAAc,aAAU,EAAI,QAAQ,EAAK,YACrD,OAAO,EAAK,gBAAiB,aAAU,EAAI,WAAW,EAAK,eAC3D,OAAO,EAAK,eAAgB,aAAU,EAAI,UAAU,EAAK,cACzD,OAAO,KAAK,EAAI,CAAC,SAAS,MAAG,EAAM,MAAM;CAE7C,IAAM,IAA2C,EAAE;AAanD,QAZI,OAAO,EAAK,4BAA6B,cAC3C,EAAU,UAAU,EAAK,2BAEvB,OAAO,EAAK,sBAAuB,aACrC,EAAU,WAAW,EAAK,qBAExB,OAAO,KAAK,EAAU,CAAC,SAAS,MAAG,EAAM,YAAY,IAErD,OAAO,EAAK,SAAU,aAAU,EAAM,QAAQ,EAAK,QACnD,EAAK,cAAc,OAAO,KAAK,EAAK,WAAW,CAAC,SAAS,MAC3D,EAAM,aAAa,EAAK,aAEnB;;AAGT,SAAS,EACP,GAC+B;AAC/B,KACE,EAAK,yBACL,OAAO,KAAK,EAAK,sBAAsB,CAAC,SAAS,EAEjD,QAAO,EAAK;CAEd,IAAM,IAAqC,EAAE;AAa7C,QAZI,OAAO,EAAK,qBAAsB,cACpC,EAAI,oBAAoB,EAAK,qBAG7B,OAAO,EAAK,qBAAsB,YAClC,EAAK,sBAAsB,UAE3B,EAAI,oBAAoB,EAAK,oBAE3B,OAAO,EAAK,kBAAmB,aACjC,EAAI,iBAAiB,EAAK,iBAErB;;AAYT,eAAsB,IAAiD;CAErE,IAAM,IAAO,MAAM,EAAsC;EACvD,SAFc,GAEd;EACA,QAAQ;EACR,MAAM;EACP,CAAC;AAEF,QAAO;EACL,GAAG;EACH,gBAAgB,EAAoB,EAAK;EACzC,uBAAuB,EAA2B,EAAK;EACvD,iBAAiB,CAAC,CAAC,EAAK;EACxB,oBAAoB,CAAC,CAAC,EAAK;EAC3B,qBAAqB,EAAK;EAC3B;;AAGH,eAAsB,EAAkB,GAetB;CAChB,IAAM,IAAU,GAAuB,EACjC,IAAgC,EAAE;AACxC,KAAI,EAAK,qBAAqB;EAC5B,IAAM,IAA2C,EAC/C,GAAG,EAAK,qBACT;AASD,EAHI,EAAU,kBAAkB,QAC9B,OAAO,EAAU,eAEf,OAAO,KAAK,EAAU,CAAC,SAAS,MAClC,EAAK,sBAAsB;;AAgB/B,KAZE,EAAK,8BACL,OAAO,KAAK,EAAK,2BAA2B,CAAC,SAAS,MAEtD,EAAK,6BAA6B,EAAK,6BASrC,EAAK,sBACF,IAAM,CAAC,GAAK,MAAU,OAAO,QAAQ,EAAK,gBAAgB,CAC7D,CAAI,MAAU,KAAA,MACZ,EAAK,KAAO;AAIlB,OAAM,EAAwB;EAC5B;EACA,QAAQ;EACR,MAAM;EACN;EACD,CAAC;;AAGJ,eAAsB,IAA6C;AAEjE,QAAO,EAAwB;EAC7B,SAFc,GAEd;EACA,QAAQ;EACR,MAAM;EACP,CAAC;;AAGJ,eAAsB,IAAyD;AAE7E,QAAO,EAAwB;EAC7B,SAFc,GAEd;EACA,QAAQ;EACR,MAAM;EACP,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../node_modules/@openhands/typescript-client/dist/client/llm-client.cjs`)
|
|
1
|
+
require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../node_modules/@openhands/typescript-client/dist/client/llm-client.cjs`);require(`../../node_modules/@openhands/typescript-client/dist/clients.cjs`);const t=require(`../backend-registry/active-store.cjs`),n=require(`../agent-server-client-options.cjs`),r=require(`../cloud/proxy.cjs`);function i(e,t){if(!t)return e;let n=t.toLowerCase();return e.filter(e=>e.name.toLowerCase().includes(n))}function a(e,t){return t===void 0?e:e.filter(e=>e.verified===t)}function o(e,t){return!t||t<=0?e:e.slice(0,t)}function s(e){let t=new URLSearchParams;for(let[n,r]of Object.entries(e))r!==void 0&&t.set(n,String(r));let n=t.toString();return n?`?${n}`:``}var c=class{static async searchModels(c={},l){let u=t.getActiveBackend();if(u.backend.kind===`cloud`){let e=s({page_id:c.page_id,limit:c.limit,query:c.query,verified__eq:c.verified__eq,provider__eq:c.provider__eq});return r.callCloudProxy({backend:u.backend,method:`GET`,path:`/api/v1/config/models/search${e}`})}let d=new e.LLMMetadataClient(n.getAgentServerClientOptions()),f=l===void 0?d.getVerifiedModels():Promise.resolve(l),[p,m]=await Promise.all([d.getModels(),f]),h=c.provider__eq??null,g=new Set(h?m?.[h]??[]:[]),_=[...g].map(e=>({provider:h,name:e,verified:!0})),v=h?(p??[]).filter(e=>e.startsWith(`${h}/`)).map(e=>e.slice(h.length+1)).filter(e=>e.length>0&&!g.has(e)).map(e=>({provider:h,name:e,verified:!1})):[];return{items:o(a(i([..._,...v],c.query),c.verified__eq),c.limit),next_page_id:null}}static async searchProviders(c={},l){let u=t.getActiveBackend();if(u.backend.kind===`cloud`){let e=s({page_id:c.page_id,limit:c.limit,query:c.query,verified__eq:c.verified__eq});return r.callCloudProxy({backend:u.backend,method:`GET`,path:`/api/v1/config/providers/search${e}`})}let d=new e.LLMMetadataClient(n.getAgentServerClientOptions()),f=l===void 0?d.getVerifiedModels():Promise.resolve(l),[p,m]=await Promise.all([d.getProviders(),f]),h=new Set(Object.keys(m??{}));return{items:o(a(i([...new Set([...h,...p??[]])].map(e=>({name:e,verified:h.has(e)})),c.query),c.verified__eq),c.limit),next_page_id:null}}};exports.default=c;
|
|
2
2
|
//# sourceMappingURL=config-service.api.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-service.api.cjs","names":[],"sources":["../../../src/api/config-service/config-service.api.ts"],"sourcesContent":["import { LLMMetadataClient } from \"@openhands/typescript-client/clients\";\nimport { getAgentServerClientOptions } from \"../agent-server-client-options\";\nimport { getActiveBackend } from \"../backend-registry/active-store\";\nimport { callCloudProxy } from \"../cloud/proxy\";\nimport type {\n LLMModel,\n LLMModelPage,\n LLMProvider,\n ProviderPage,\n SearchModelsParams,\n SearchProvidersParams,\n} from \"./config-service.types\";\n\nfunction filterByQuery<T extends { name: string }>(\n items: T[],\n query?: string,\n): T[] {\n if (!query) {\n return items;\n }\n\n const normalizedQuery = query.toLowerCase();\n return items.filter((item) =>\n item.name.toLowerCase().includes(normalizedQuery),\n );\n}\n\nfunction filterByVerified<T extends { verified: boolean }>(\n items: T[],\n verified?: boolean,\n): T[] {\n if (verified === undefined) {\n return items;\n }\n\n return items.filter((item) => item.verified === verified);\n}\n\nfunction limitItems<T>(items: T[], limit?: number): T[] {\n if (!limit || limit <= 0) {\n return items;\n }\n\n return items.slice(0, limit);\n}\n\nfunction buildCloudQueryString(\n params: Record<string, string | number | boolean | undefined>,\n): string {\n const qs = new URLSearchParams();\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined) qs.set(key, String(value));\n }\n const str = qs.toString();\n return str ? `?${str}` : \"\";\n}\n\nclass ConfigService {\n /**\n * @param verifiedByProvider - Pre-fetched verified-models map used by the\n * local reconstruction path. Ignored for cloud backends, which call\n * `/api/v1/config/models/search` directly (verified status is embedded in\n * each returned item).\n */\n static async searchModels(\n params: SearchModelsParams = {},\n verifiedByProvider?: Record<string, string[]>,\n ): Promise<LLMModelPage> {\n const active = getActiveBackend();\n\n if (active.backend.kind === \"cloud\") {\n // Cloud exposes /api/v1/config/models/search which returns LLMModelPage directly.\n // verifiedByProvider is not needed — the cloud API embeds verified status natively.\n const qs = buildCloudQueryString({\n page_id: params.page_id,\n limit: params.limit,\n query: params.query,\n verified__eq: params.verified__eq,\n provider__eq: params.provider__eq,\n });\n return callCloudProxy<LLMModelPage>({\n backend: active.backend,\n method: \"GET\",\n path: `/api/v1/config/models/search${qs}`,\n });\n }\n\n const llmClient = new LLMMetadataClient(getAgentServerClientOptions());\n const verifiedFetch =\n verifiedByProvider !== undefined\n ? Promise.resolve(verifiedByProvider)\n : llmClient.getVerifiedModels();\n const [models, verifiedMap] = await Promise.all([\n llmClient.getModels(),\n verifiedFetch,\n ]);\n\n const provider = params.provider__eq ?? null;\n const verifiedNames = new Set(\n provider ? (verifiedMap?.[provider] ?? []) : [],\n );\n const verifiedItems: LLMModel[] = [...verifiedNames].map((name) => ({\n provider,\n name,\n verified: true,\n }));\n\n const prefixedItems: LLMModel[] = provider\n ? (models ?? [])\n .filter((model) => model.startsWith(`${provider}/`))\n .map((model) => model.slice(provider.length + 1))\n .filter((name) => name.length > 0 && !verifiedNames.has(name))\n .map((name) => ({\n provider,\n name,\n verified: false,\n }))\n : [];\n\n const items = limitItems(\n filterByVerified(\n filterByQuery([...verifiedItems, ...prefixedItems], params.query),\n params.verified__eq,\n ),\n params.limit,\n );\n\n return { items, next_page_id: null };\n }\n\n /**\n * @param verifiedByProvider - Pre-fetched verified-models map used by the\n * local reconstruction path. Ignored for cloud backends, which call\n * `/api/v1/config/providers/search` directly (verified status is embedded in\n * each returned item).\n */\n static async searchProviders(\n params: SearchProvidersParams = {},\n verifiedByProvider?: Record<string, string[]>,\n ): Promise<ProviderPage> {\n const active = getActiveBackend();\n\n if (active.backend.kind === \"cloud\") {\n // Cloud exposes /api/v1/config/providers/search which returns ProviderPage directly.\n // verifiedByProvider is not needed — the cloud API embeds verified status natively.\n const qs = buildCloudQueryString({\n page_id: params.page_id,\n limit: params.limit,\n query: params.query,\n verified__eq: params.verified__eq,\n });\n return callCloudProxy<ProviderPage>({\n backend: active.backend,\n method: \"GET\",\n path: `/api/v1/config/providers/search${qs}`,\n });\n }\n\n const llmClient = new LLMMetadataClient(getAgentServerClientOptions());\n const verifiedFetch =\n verifiedByProvider !== undefined\n ? Promise.resolve(verifiedByProvider)\n : llmClient.getVerifiedModels();\n const [providers, verifiedMap] = await Promise.all([\n llmClient.getProviders(),\n verifiedFetch,\n ]);\n\n const verifiedProviders = new Set(Object.keys(verifiedMap ?? {}));\n const names = new Set<string>([...verifiedProviders, ...(providers ?? [])]);\n const providerItems: LLMProvider[] = [...names].map((name) => ({\n name,\n verified: verifiedProviders.has(name),\n }));\n\n const items = limitItems(\n filterByVerified(\n filterByQuery(providerItems, params.query),\n params.verified__eq,\n ),\n params.limit,\n );\n\n return { items, next_page_id: null };\n }\n}\n\nexport default ConfigService;\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"config-service.api.cjs","names":[],"sources":["../../../src/api/config-service/config-service.api.ts"],"sourcesContent":["import { LLMMetadataClient } from \"@openhands/typescript-client/clients\";\nimport { getAgentServerClientOptions } from \"../agent-server-client-options\";\nimport { getActiveBackend } from \"../backend-registry/active-store\";\nimport { callCloudProxy } from \"../cloud/proxy\";\nimport type {\n LLMModel,\n LLMModelPage,\n LLMProvider,\n ProviderPage,\n SearchModelsParams,\n SearchProvidersParams,\n} from \"./config-service.types\";\n\nfunction filterByQuery<T extends { name: string }>(\n items: T[],\n query?: string,\n): T[] {\n if (!query) {\n return items;\n }\n\n const normalizedQuery = query.toLowerCase();\n return items.filter((item) =>\n item.name.toLowerCase().includes(normalizedQuery),\n );\n}\n\nfunction filterByVerified<T extends { verified: boolean }>(\n items: T[],\n verified?: boolean,\n): T[] {\n if (verified === undefined) {\n return items;\n }\n\n return items.filter((item) => item.verified === verified);\n}\n\nfunction limitItems<T>(items: T[], limit?: number): T[] {\n if (!limit || limit <= 0) {\n return items;\n }\n\n return items.slice(0, limit);\n}\n\nfunction buildCloudQueryString(\n params: Record<string, string | number | boolean | undefined>,\n): string {\n const qs = new URLSearchParams();\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined) qs.set(key, String(value));\n }\n const str = qs.toString();\n return str ? `?${str}` : \"\";\n}\n\nclass ConfigService {\n /**\n * @param verifiedByProvider - Pre-fetched verified-models map used by the\n * local reconstruction path. Ignored for cloud backends, which call\n * `/api/v1/config/models/search` directly (verified status is embedded in\n * each returned item).\n */\n static async searchModels(\n params: SearchModelsParams = {},\n verifiedByProvider?: Record<string, string[]>,\n ): Promise<LLMModelPage> {\n const active = getActiveBackend();\n\n if (active.backend.kind === \"cloud\") {\n // Cloud exposes /api/v1/config/models/search which returns LLMModelPage directly.\n // verifiedByProvider is not needed — the cloud API embeds verified status natively.\n const qs = buildCloudQueryString({\n page_id: params.page_id,\n limit: params.limit,\n query: params.query,\n verified__eq: params.verified__eq,\n provider__eq: params.provider__eq,\n });\n return callCloudProxy<LLMModelPage>({\n backend: active.backend,\n method: \"GET\",\n path: `/api/v1/config/models/search${qs}`,\n });\n }\n\n const llmClient = new LLMMetadataClient(getAgentServerClientOptions());\n const verifiedFetch =\n verifiedByProvider !== undefined\n ? Promise.resolve(verifiedByProvider)\n : llmClient.getVerifiedModels();\n const [models, verifiedMap] = await Promise.all([\n llmClient.getModels(),\n verifiedFetch,\n ]);\n\n const provider = params.provider__eq ?? null;\n const verifiedNames = new Set(\n provider ? (verifiedMap?.[provider] ?? []) : [],\n );\n const verifiedItems: LLMModel[] = [...verifiedNames].map((name) => ({\n provider,\n name,\n verified: true,\n }));\n\n const prefixedItems: LLMModel[] = provider\n ? (models ?? [])\n .filter((model) => model.startsWith(`${provider}/`))\n .map((model) => model.slice(provider.length + 1))\n .filter((name) => name.length > 0 && !verifiedNames.has(name))\n .map((name) => ({\n provider,\n name,\n verified: false,\n }))\n : [];\n\n const items = limitItems(\n filterByVerified(\n filterByQuery([...verifiedItems, ...prefixedItems], params.query),\n params.verified__eq,\n ),\n params.limit,\n );\n\n return { items, next_page_id: null };\n }\n\n /**\n * @param verifiedByProvider - Pre-fetched verified-models map used by the\n * local reconstruction path. Ignored for cloud backends, which call\n * `/api/v1/config/providers/search` directly (verified status is embedded in\n * each returned item).\n */\n static async searchProviders(\n params: SearchProvidersParams = {},\n verifiedByProvider?: Record<string, string[]>,\n ): Promise<ProviderPage> {\n const active = getActiveBackend();\n\n if (active.backend.kind === \"cloud\") {\n // Cloud exposes /api/v1/config/providers/search which returns ProviderPage directly.\n // verifiedByProvider is not needed — the cloud API embeds verified status natively.\n const qs = buildCloudQueryString({\n page_id: params.page_id,\n limit: params.limit,\n query: params.query,\n verified__eq: params.verified__eq,\n });\n return callCloudProxy<ProviderPage>({\n backend: active.backend,\n method: \"GET\",\n path: `/api/v1/config/providers/search${qs}`,\n });\n }\n\n const llmClient = new LLMMetadataClient(getAgentServerClientOptions());\n const verifiedFetch =\n verifiedByProvider !== undefined\n ? Promise.resolve(verifiedByProvider)\n : llmClient.getVerifiedModels();\n const [providers, verifiedMap] = await Promise.all([\n llmClient.getProviders(),\n verifiedFetch,\n ]);\n\n const verifiedProviders = new Set(Object.keys(verifiedMap ?? {}));\n const names = new Set<string>([...verifiedProviders, ...(providers ?? [])]);\n const providerItems: LLMProvider[] = [...names].map((name) => ({\n name,\n verified: verifiedProviders.has(name),\n }));\n\n const items = limitItems(\n filterByVerified(\n filterByQuery(providerItems, params.query),\n params.verified__eq,\n ),\n params.limit,\n );\n\n return { items, next_page_id: null };\n }\n}\n\nexport default ConfigService;\n"],"mappings":"kWAaA,SAAS,EACP,EACA,EACK,CACL,GAAI,CAAC,EACH,OAAO,EAGT,IAAM,EAAkB,EAAM,aAAa,CAC3C,OAAO,EAAM,OAAQ,GACnB,EAAK,KAAK,aAAa,CAAC,SAAS,EAAgB,CAClD,CAGH,SAAS,EACP,EACA,EACK,CAKL,OAJI,IAAa,IAAA,GACR,EAGF,EAAM,OAAQ,GAAS,EAAK,WAAa,EAAS,CAG3D,SAAS,EAAc,EAAY,EAAqB,CAKtD,MAJI,CAAC,GAAS,GAAS,EACd,EAGF,EAAM,MAAM,EAAG,EAAM,CAG9B,SAAS,EACP,EACQ,CACR,IAAM,EAAK,IAAI,gBACf,IAAK,GAAM,CAAC,EAAK,KAAU,OAAO,QAAQ,EAAO,CAC3C,IAAU,IAAA,IAAW,EAAG,IAAI,EAAK,OAAO,EAAM,CAAC,CAErD,IAAM,EAAM,EAAG,UAAU,CACzB,OAAO,EAAM,IAAI,IAAQ,GAG3B,IAAM,EAAN,KAAoB,CAOlB,aAAa,aACX,EAA6B,EAAE,CAC/B,EACuB,CACvB,IAAM,EAAS,EAAA,kBAAkB,CAEjC,GAAI,EAAO,QAAQ,OAAS,QAAS,CAGnC,IAAM,EAAK,EAAsB,CAC/B,QAAS,EAAO,QAChB,MAAO,EAAO,MACd,MAAO,EAAO,MACd,aAAc,EAAO,aACrB,aAAc,EAAO,aACtB,CAAC,CACF,OAAO,EAAA,eAA6B,CAClC,QAAS,EAAO,QAChB,OAAQ,MACR,KAAM,+BAA+B,IACtC,CAAC,CAGJ,IAAM,EAAY,IAAI,EAAA,kBAAkB,EAAA,6BAA6B,CAAC,CAChE,EACJ,IAAuB,IAAA,GAEnB,EAAU,mBAAmB,CAD7B,QAAQ,QAAQ,EAAmB,CAEnC,CAAC,EAAQ,GAAe,MAAM,QAAQ,IAAI,CAC9C,EAAU,WAAW,CACrB,EACD,CAAC,CAEI,EAAW,EAAO,cAAgB,KAClC,EAAgB,IAAI,IACxB,EAAY,IAAc,IAAa,EAAE,CAAI,EAAE,CAChD,CACK,EAA4B,CAAC,GAAG,EAAc,CAAC,IAAK,IAAU,CAClE,WACA,OACA,SAAU,GACX,EAAE,CAEG,EAA4B,GAC7B,GAAU,EAAE,EACV,OAAQ,GAAU,EAAM,WAAW,GAAG,EAAS,GAAG,CAAC,CACnD,IAAK,GAAU,EAAM,MAAM,EAAS,OAAS,EAAE,CAAC,CAChD,OAAQ,GAAS,EAAK,OAAS,GAAK,CAAC,EAAc,IAAI,EAAK,CAAC,CAC7D,IAAK,IAAU,CACd,WACA,OACA,SAAU,GACX,EAAE,CACL,EAAE,CAUN,MAAO,CAAE,MARK,EACZ,EACE,EAAc,CAAC,GAAG,EAAe,GAAG,EAAc,CAAE,EAAO,MAAM,CACjE,EAAO,aACR,CACD,EAAO,MAGA,CAAO,aAAc,KAAM,CAStC,aAAa,gBACX,EAAgC,EAAE,CAClC,EACuB,CACvB,IAAM,EAAS,EAAA,kBAAkB,CAEjC,GAAI,EAAO,QAAQ,OAAS,QAAS,CAGnC,IAAM,EAAK,EAAsB,CAC/B,QAAS,EAAO,QAChB,MAAO,EAAO,MACd,MAAO,EAAO,MACd,aAAc,EAAO,aACtB,CAAC,CACF,OAAO,EAAA,eAA6B,CAClC,QAAS,EAAO,QAChB,OAAQ,MACR,KAAM,kCAAkC,IACzC,CAAC,CAGJ,IAAM,EAAY,IAAI,EAAA,kBAAkB,EAAA,6BAA6B,CAAC,CAChE,EACJ,IAAuB,IAAA,GAEnB,EAAU,mBAAmB,CAD7B,QAAQ,QAAQ,EAAmB,CAEnC,CAAC,EAAW,GAAe,MAAM,QAAQ,IAAI,CACjD,EAAU,cAAc,CACxB,EACD,CAAC,CAEI,EAAoB,IAAI,IAAI,OAAO,KAAK,GAAe,EAAE,CAAC,CAAC,CAejE,MAAO,CAAE,MARK,EACZ,EACE,EAPiC,CAAC,GAAG,IADvB,IAAY,CAAC,GAAG,EAAmB,GAAI,GAAa,EAAE,CAAE,CACjC,CAAM,CAAC,IAAK,IAAU,CAC7D,OACA,SAAU,EAAkB,IAAI,EAAK,CACtC,EAIiB,CAAe,EAAO,MAAM,CAC1C,EAAO,aACR,CACD,EAAO,MAGA,CAAO,aAAc,KAAM"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { LLMMetadataClient as e } from "../../node_modules/@openhands/typescript-client/dist/client/llm-client.js";
|
|
2
|
+
import "../../node_modules/@openhands/typescript-client/dist/clients.js";
|
|
2
3
|
import { getActiveBackend as t } from "../backend-registry/active-store.js";
|
|
3
4
|
import { getAgentServerClientOptions as n } from "../agent-server-client-options.js";
|
|
4
5
|
import { callCloudProxy as r } from "../cloud/proxy.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-service.api.js","names":[],"sources":["../../../src/api/config-service/config-service.api.ts"],"sourcesContent":["import { LLMMetadataClient } from \"@openhands/typescript-client/clients\";\nimport { getAgentServerClientOptions } from \"../agent-server-client-options\";\nimport { getActiveBackend } from \"../backend-registry/active-store\";\nimport { callCloudProxy } from \"../cloud/proxy\";\nimport type {\n LLMModel,\n LLMModelPage,\n LLMProvider,\n ProviderPage,\n SearchModelsParams,\n SearchProvidersParams,\n} from \"./config-service.types\";\n\nfunction filterByQuery<T extends { name: string }>(\n items: T[],\n query?: string,\n): T[] {\n if (!query) {\n return items;\n }\n\n const normalizedQuery = query.toLowerCase();\n return items.filter((item) =>\n item.name.toLowerCase().includes(normalizedQuery),\n );\n}\n\nfunction filterByVerified<T extends { verified: boolean }>(\n items: T[],\n verified?: boolean,\n): T[] {\n if (verified === undefined) {\n return items;\n }\n\n return items.filter((item) => item.verified === verified);\n}\n\nfunction limitItems<T>(items: T[], limit?: number): T[] {\n if (!limit || limit <= 0) {\n return items;\n }\n\n return items.slice(0, limit);\n}\n\nfunction buildCloudQueryString(\n params: Record<string, string | number | boolean | undefined>,\n): string {\n const qs = new URLSearchParams();\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined) qs.set(key, String(value));\n }\n const str = qs.toString();\n return str ? `?${str}` : \"\";\n}\n\nclass ConfigService {\n /**\n * @param verifiedByProvider - Pre-fetched verified-models map used by the\n * local reconstruction path. Ignored for cloud backends, which call\n * `/api/v1/config/models/search` directly (verified status is embedded in\n * each returned item).\n */\n static async searchModels(\n params: SearchModelsParams = {},\n verifiedByProvider?: Record<string, string[]>,\n ): Promise<LLMModelPage> {\n const active = getActiveBackend();\n\n if (active.backend.kind === \"cloud\") {\n // Cloud exposes /api/v1/config/models/search which returns LLMModelPage directly.\n // verifiedByProvider is not needed — the cloud API embeds verified status natively.\n const qs = buildCloudQueryString({\n page_id: params.page_id,\n limit: params.limit,\n query: params.query,\n verified__eq: params.verified__eq,\n provider__eq: params.provider__eq,\n });\n return callCloudProxy<LLMModelPage>({\n backend: active.backend,\n method: \"GET\",\n path: `/api/v1/config/models/search${qs}`,\n });\n }\n\n const llmClient = new LLMMetadataClient(getAgentServerClientOptions());\n const verifiedFetch =\n verifiedByProvider !== undefined\n ? Promise.resolve(verifiedByProvider)\n : llmClient.getVerifiedModels();\n const [models, verifiedMap] = await Promise.all([\n llmClient.getModels(),\n verifiedFetch,\n ]);\n\n const provider = params.provider__eq ?? null;\n const verifiedNames = new Set(\n provider ? (verifiedMap?.[provider] ?? []) : [],\n );\n const verifiedItems: LLMModel[] = [...verifiedNames].map((name) => ({\n provider,\n name,\n verified: true,\n }));\n\n const prefixedItems: LLMModel[] = provider\n ? (models ?? [])\n .filter((model) => model.startsWith(`${provider}/`))\n .map((model) => model.slice(provider.length + 1))\n .filter((name) => name.length > 0 && !verifiedNames.has(name))\n .map((name) => ({\n provider,\n name,\n verified: false,\n }))\n : [];\n\n const items = limitItems(\n filterByVerified(\n filterByQuery([...verifiedItems, ...prefixedItems], params.query),\n params.verified__eq,\n ),\n params.limit,\n );\n\n return { items, next_page_id: null };\n }\n\n /**\n * @param verifiedByProvider - Pre-fetched verified-models map used by the\n * local reconstruction path. Ignored for cloud backends, which call\n * `/api/v1/config/providers/search` directly (verified status is embedded in\n * each returned item).\n */\n static async searchProviders(\n params: SearchProvidersParams = {},\n verifiedByProvider?: Record<string, string[]>,\n ): Promise<ProviderPage> {\n const active = getActiveBackend();\n\n if (active.backend.kind === \"cloud\") {\n // Cloud exposes /api/v1/config/providers/search which returns ProviderPage directly.\n // verifiedByProvider is not needed — the cloud API embeds verified status natively.\n const qs = buildCloudQueryString({\n page_id: params.page_id,\n limit: params.limit,\n query: params.query,\n verified__eq: params.verified__eq,\n });\n return callCloudProxy<ProviderPage>({\n backend: active.backend,\n method: \"GET\",\n path: `/api/v1/config/providers/search${qs}`,\n });\n }\n\n const llmClient = new LLMMetadataClient(getAgentServerClientOptions());\n const verifiedFetch =\n verifiedByProvider !== undefined\n ? Promise.resolve(verifiedByProvider)\n : llmClient.getVerifiedModels();\n const [providers, verifiedMap] = await Promise.all([\n llmClient.getProviders(),\n verifiedFetch,\n ]);\n\n const verifiedProviders = new Set(Object.keys(verifiedMap ?? {}));\n const names = new Set<string>([...verifiedProviders, ...(providers ?? [])]);\n const providerItems: LLMProvider[] = [...names].map((name) => ({\n name,\n verified: verifiedProviders.has(name),\n }));\n\n const items = limitItems(\n filterByVerified(\n filterByQuery(providerItems, params.query),\n params.verified__eq,\n ),\n params.limit,\n );\n\n return { items, next_page_id: null };\n }\n}\n\nexport default ConfigService;\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"config-service.api.js","names":[],"sources":["../../../src/api/config-service/config-service.api.ts"],"sourcesContent":["import { LLMMetadataClient } from \"@openhands/typescript-client/clients\";\nimport { getAgentServerClientOptions } from \"../agent-server-client-options\";\nimport { getActiveBackend } from \"../backend-registry/active-store\";\nimport { callCloudProxy } from \"../cloud/proxy\";\nimport type {\n LLMModel,\n LLMModelPage,\n LLMProvider,\n ProviderPage,\n SearchModelsParams,\n SearchProvidersParams,\n} from \"./config-service.types\";\n\nfunction filterByQuery<T extends { name: string }>(\n items: T[],\n query?: string,\n): T[] {\n if (!query) {\n return items;\n }\n\n const normalizedQuery = query.toLowerCase();\n return items.filter((item) =>\n item.name.toLowerCase().includes(normalizedQuery),\n );\n}\n\nfunction filterByVerified<T extends { verified: boolean }>(\n items: T[],\n verified?: boolean,\n): T[] {\n if (verified === undefined) {\n return items;\n }\n\n return items.filter((item) => item.verified === verified);\n}\n\nfunction limitItems<T>(items: T[], limit?: number): T[] {\n if (!limit || limit <= 0) {\n return items;\n }\n\n return items.slice(0, limit);\n}\n\nfunction buildCloudQueryString(\n params: Record<string, string | number | boolean | undefined>,\n): string {\n const qs = new URLSearchParams();\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined) qs.set(key, String(value));\n }\n const str = qs.toString();\n return str ? `?${str}` : \"\";\n}\n\nclass ConfigService {\n /**\n * @param verifiedByProvider - Pre-fetched verified-models map used by the\n * local reconstruction path. Ignored for cloud backends, which call\n * `/api/v1/config/models/search` directly (verified status is embedded in\n * each returned item).\n */\n static async searchModels(\n params: SearchModelsParams = {},\n verifiedByProvider?: Record<string, string[]>,\n ): Promise<LLMModelPage> {\n const active = getActiveBackend();\n\n if (active.backend.kind === \"cloud\") {\n // Cloud exposes /api/v1/config/models/search which returns LLMModelPage directly.\n // verifiedByProvider is not needed — the cloud API embeds verified status natively.\n const qs = buildCloudQueryString({\n page_id: params.page_id,\n limit: params.limit,\n query: params.query,\n verified__eq: params.verified__eq,\n provider__eq: params.provider__eq,\n });\n return callCloudProxy<LLMModelPage>({\n backend: active.backend,\n method: \"GET\",\n path: `/api/v1/config/models/search${qs}`,\n });\n }\n\n const llmClient = new LLMMetadataClient(getAgentServerClientOptions());\n const verifiedFetch =\n verifiedByProvider !== undefined\n ? Promise.resolve(verifiedByProvider)\n : llmClient.getVerifiedModels();\n const [models, verifiedMap] = await Promise.all([\n llmClient.getModels(),\n verifiedFetch,\n ]);\n\n const provider = params.provider__eq ?? null;\n const verifiedNames = new Set(\n provider ? (verifiedMap?.[provider] ?? []) : [],\n );\n const verifiedItems: LLMModel[] = [...verifiedNames].map((name) => ({\n provider,\n name,\n verified: true,\n }));\n\n const prefixedItems: LLMModel[] = provider\n ? (models ?? [])\n .filter((model) => model.startsWith(`${provider}/`))\n .map((model) => model.slice(provider.length + 1))\n .filter((name) => name.length > 0 && !verifiedNames.has(name))\n .map((name) => ({\n provider,\n name,\n verified: false,\n }))\n : [];\n\n const items = limitItems(\n filterByVerified(\n filterByQuery([...verifiedItems, ...prefixedItems], params.query),\n params.verified__eq,\n ),\n params.limit,\n );\n\n return { items, next_page_id: null };\n }\n\n /**\n * @param verifiedByProvider - Pre-fetched verified-models map used by the\n * local reconstruction path. Ignored for cloud backends, which call\n * `/api/v1/config/providers/search` directly (verified status is embedded in\n * each returned item).\n */\n static async searchProviders(\n params: SearchProvidersParams = {},\n verifiedByProvider?: Record<string, string[]>,\n ): Promise<ProviderPage> {\n const active = getActiveBackend();\n\n if (active.backend.kind === \"cloud\") {\n // Cloud exposes /api/v1/config/providers/search which returns ProviderPage directly.\n // verifiedByProvider is not needed — the cloud API embeds verified status natively.\n const qs = buildCloudQueryString({\n page_id: params.page_id,\n limit: params.limit,\n query: params.query,\n verified__eq: params.verified__eq,\n });\n return callCloudProxy<ProviderPage>({\n backend: active.backend,\n method: \"GET\",\n path: `/api/v1/config/providers/search${qs}`,\n });\n }\n\n const llmClient = new LLMMetadataClient(getAgentServerClientOptions());\n const verifiedFetch =\n verifiedByProvider !== undefined\n ? Promise.resolve(verifiedByProvider)\n : llmClient.getVerifiedModels();\n const [providers, verifiedMap] = await Promise.all([\n llmClient.getProviders(),\n verifiedFetch,\n ]);\n\n const verifiedProviders = new Set(Object.keys(verifiedMap ?? {}));\n const names = new Set<string>([...verifiedProviders, ...(providers ?? [])]);\n const providerItems: LLMProvider[] = [...names].map((name) => ({\n name,\n verified: verifiedProviders.has(name),\n }));\n\n const items = limitItems(\n filterByVerified(\n filterByQuery(providerItems, params.query),\n params.verified__eq,\n ),\n params.limit,\n );\n\n return { items, next_page_id: null };\n }\n}\n\nexport default ConfigService;\n"],"mappings":";;;;;;AAaA,SAAS,EACP,GACA,GACK;AACL,KAAI,CAAC,EACH,QAAO;CAGT,IAAM,IAAkB,EAAM,aAAa;AAC3C,QAAO,EAAM,QAAQ,MACnB,EAAK,KAAK,aAAa,CAAC,SAAS,EAAgB,CAClD;;AAGH,SAAS,EACP,GACA,GACK;AAKL,QAJI,MAAa,KAAA,IACR,IAGF,EAAM,QAAQ,MAAS,EAAK,aAAa,EAAS;;AAG3D,SAAS,EAAc,GAAY,GAAqB;AAKtD,QAJI,CAAC,KAAS,KAAS,IACd,IAGF,EAAM,MAAM,GAAG,EAAM;;AAG9B,SAAS,EACP,GACQ;CACR,IAAM,IAAK,IAAI,iBAAiB;AAChC,MAAK,IAAM,CAAC,GAAK,MAAU,OAAO,QAAQ,EAAO,CAC/C,CAAI,MAAU,KAAA,KAAW,EAAG,IAAI,GAAK,OAAO,EAAM,CAAC;CAErD,IAAM,IAAM,EAAG,UAAU;AACzB,QAAO,IAAM,IAAI,MAAQ;;AAG3B,IAAM,IAAN,MAAoB;CAOlB,aAAa,aACX,IAA6B,EAAE,EAC/B,GACuB;EACvB,IAAM,IAAS,GAAkB;AAEjC,MAAI,EAAO,QAAQ,SAAS,SAAS;GAGnC,IAAM,IAAK,EAAsB;IAC/B,SAAS,EAAO;IAChB,OAAO,EAAO;IACd,OAAO,EAAO;IACd,cAAc,EAAO;IACrB,cAAc,EAAO;IACtB,CAAC;AACF,UAAO,EAA6B;IAClC,SAAS,EAAO;IAChB,QAAQ;IACR,MAAM,+BAA+B;IACtC,CAAC;;EAGJ,IAAM,IAAY,IAAI,EAAkB,GAA6B,CAAC,EAChE,IACJ,MAAuB,KAAA,IAEnB,EAAU,mBAAmB,GAD7B,QAAQ,QAAQ,EAAmB,EAEnC,CAAC,GAAQ,KAAe,MAAM,QAAQ,IAAI,CAC9C,EAAU,WAAW,EACrB,EACD,CAAC,EAEI,IAAW,EAAO,gBAAgB,MAClC,IAAgB,IAAI,IACxB,IAAY,IAAc,MAAa,EAAE,GAAI,EAAE,CAChD,EACK,IAA4B,CAAC,GAAG,EAAc,CAAC,KAAK,OAAU;GAClE;GACA;GACA,UAAU;GACX,EAAE,EAEG,IAA4B,KAC7B,KAAU,EAAE,EACV,QAAQ,MAAU,EAAM,WAAW,GAAG,EAAS,GAAG,CAAC,CACnD,KAAK,MAAU,EAAM,MAAM,EAAS,SAAS,EAAE,CAAC,CAChD,QAAQ,MAAS,EAAK,SAAS,KAAK,CAAC,EAAc,IAAI,EAAK,CAAC,CAC7D,KAAK,OAAU;GACd;GACA;GACA,UAAU;GACX,EAAE,GACL,EAAE;AAUN,SAAO;GAAE,OARK,EACZ,EACE,EAAc,CAAC,GAAG,GAAe,GAAG,EAAc,EAAE,EAAO,MAAM,EACjE,EAAO,aACR,EACD,EAAO,MAGA;GAAO,cAAc;GAAM;;CAStC,aAAa,gBACX,IAAgC,EAAE,EAClC,GACuB;EACvB,IAAM,IAAS,GAAkB;AAEjC,MAAI,EAAO,QAAQ,SAAS,SAAS;GAGnC,IAAM,IAAK,EAAsB;IAC/B,SAAS,EAAO;IAChB,OAAO,EAAO;IACd,OAAO,EAAO;IACd,cAAc,EAAO;IACtB,CAAC;AACF,UAAO,EAA6B;IAClC,SAAS,EAAO;IAChB,QAAQ;IACR,MAAM,kCAAkC;IACzC,CAAC;;EAGJ,IAAM,IAAY,IAAI,EAAkB,GAA6B,CAAC,EAChE,IACJ,MAAuB,KAAA,IAEnB,EAAU,mBAAmB,GAD7B,QAAQ,QAAQ,EAAmB,EAEnC,CAAC,GAAW,KAAe,MAAM,QAAQ,IAAI,CACjD,EAAU,cAAc,EACxB,EACD,CAAC,EAEI,IAAoB,IAAI,IAAI,OAAO,KAAK,KAAe,EAAE,CAAC,CAAC;AAejE,SAAO;GAAE,OARK,EACZ,EACE,EAPiC,CAAC,GAAG,IADvB,IAAY,CAAC,GAAG,GAAmB,GAAI,KAAa,EAAE,CAAE,CACjC,CAAM,CAAC,KAAK,OAAU;IAC7D;IACA,UAAU,EAAkB,IAAI,EAAK;IACtC,EAIiB,EAAe,EAAO,MAAM,EAC1C,EAAO,aACR,EACD,EAAO,MAGA;GAAO,cAAc;GAAM"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-metadata-store.cjs","names":[],"sources":["../../src/api/conversation-metadata-store.ts"],"sourcesContent":["import { Provider } from \"#/types/settings\";\n\nconst STORAGE_KEY = \"openhands-agent-server-conversation-metadata\";\n\nexport type WorkspaceMode = \"local_repo\" | \"new_worktree\";\n\nexport interface ConversationMetadata {\n selected_repository: string | null;\n selected_branch: string | null;\n git_provider: Provider | null;\n /**\n * The local workspace path the user explicitly attached at conversation\n * creation time. Distinct from `selected_repository` (which is set by\n * the repo picker on the home page). Used by the Files tab to decide\n * whether to default to diff view: if the user attached *anything*\n * (repo or local workspace), we lean diff-first because there's a real\n * git baseline to compare against.\n */\n selected_workspace?: string | null;\n /**\n * How the conversation should use `selected_workspace`.\n *\n * `local_repo` means the runtime should operate directly in the selected\n * folder, even when it is not a git checkout. `new_worktree` preserves the\n * historical agent-server behavior for conversations that should start in a\n * generated per-conversation worktree.\n */\n workspace_mode?: WorkspaceMode | null;\n /**\n * The LLM profile the conversation was created with (or last switched to).\n * Client-side only. Lets the chat-header switcher show the exact profile\n * name even when several profiles share the same underlying model — the\n * agent-server only round-trips the model string, so matching on it alone\n * is ambiguous (issue #1082).\n */\n active_profile?: string | null;\n}\n\ntype StoredMetadata = Record<string, ConversationMetadata>;\n\nconst readAll = (): StoredMetadata => {\n if (typeof window === \"undefined\") return {};\n try {\n const raw = window.localStorage.getItem(STORAGE_KEY);\n if (!raw) return {};\n const parsed = JSON.parse(raw) as unknown;\n if (!parsed || typeof parsed !== \"object\") return {};\n return parsed as StoredMetadata;\n } catch {\n return {};\n }\n};\n\nconst writeAll = (next: StoredMetadata): void => {\n if (typeof window === \"undefined\") return;\n if (Object.keys(next).length === 0) {\n window.localStorage.removeItem(STORAGE_KEY);\n return;\n }\n window.localStorage.setItem(STORAGE_KEY, JSON.stringify(next));\n};\n\nexport const getStoredConversationMetadata = (\n conversationId: string,\n): ConversationMetadata | null => readAll()[conversationId] ?? null;\n\nexport const setStoredConversationMetadata = (\n conversationId: string,\n metadata: ConversationMetadata,\n): void => {\n const all = readAll();\n all[conversationId] = metadata;\n writeAll(all);\n};\n\nexport const removeStoredConversationMetadata = (\n conversationId: string,\n): void => {\n const all = readAll();\n if (!(conversationId in all)) return;\n delete all[conversationId];\n writeAll(all);\n};\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"conversation-metadata-store.cjs","names":[],"sources":["../../src/api/conversation-metadata-store.ts"],"sourcesContent":["import { Provider } from \"#/types/settings\";\nimport type { PluginSpec } from \"#/api/conversation-service/agent-server-conversation-service.types\";\n\nconst STORAGE_KEY = \"openhands-agent-server-conversation-metadata\";\n\nexport type WorkspaceMode = \"local_repo\" | \"new_worktree\";\n\nexport interface ConversationMetadata {\n selected_repository: string | null;\n selected_branch: string | null;\n git_provider: Provider | null;\n /**\n * The local workspace path the user explicitly attached at conversation\n * creation time. Distinct from `selected_repository` (which is set by\n * the repo picker on the home page). Used by the Files tab to decide\n * whether to default to diff view: if the user attached *anything*\n * (repo or local workspace), we lean diff-first because there's a real\n * git baseline to compare against.\n */\n selected_workspace?: string | null;\n /**\n * How the conversation should use `selected_workspace`.\n *\n * `local_repo` means the runtime should operate directly in the selected\n * folder, even when it is not a git checkout. `new_worktree` preserves the\n * historical agent-server behavior for conversations that should start in a\n * generated per-conversation worktree.\n */\n workspace_mode?: WorkspaceMode | null;\n /**\n * The LLM profile the conversation was created with (or last switched to).\n * Client-side only. Lets the chat-header switcher show the exact profile\n * name even when several profiles share the same underlying model — the\n * agent-server only round-trips the model string, so matching on it alone\n * is ambiguous (issue #1082).\n */\n active_profile?: string | null;\n /**\n * Snapshot of the plugins loaded into the conversation, captured at creation\n * (coordinates only — `parameters` are stripped): plugins explicitly attached\n * at creation plus the enabled installed plugins the SDK auto-loads into new\n * local conversations. The agent-server doesn't expose a live conversation's\n * loaded plugins, so this is the client-side source for the in-conversation\n * plugins view. Local + forward-only: only set for conversations created\n * after this shipped, and only when `app_conversation_id` is known.\n */\n plugins?: PluginSpec[] | null;\n}\n\ntype StoredMetadata = Record<string, ConversationMetadata>;\n\nconst readAll = (): StoredMetadata => {\n if (typeof window === \"undefined\") return {};\n try {\n const raw = window.localStorage.getItem(STORAGE_KEY);\n if (!raw) return {};\n const parsed = JSON.parse(raw) as unknown;\n if (!parsed || typeof parsed !== \"object\") return {};\n return parsed as StoredMetadata;\n } catch {\n return {};\n }\n};\n\nconst writeAll = (next: StoredMetadata): void => {\n if (typeof window === \"undefined\") return;\n if (Object.keys(next).length === 0) {\n window.localStorage.removeItem(STORAGE_KEY);\n return;\n }\n window.localStorage.setItem(STORAGE_KEY, JSON.stringify(next));\n};\n\nexport const getStoredConversationMetadata = (\n conversationId: string,\n): ConversationMetadata | null => readAll()[conversationId] ?? null;\n\nexport const setStoredConversationMetadata = (\n conversationId: string,\n metadata: ConversationMetadata,\n): void => {\n const all = readAll();\n all[conversationId] = metadata;\n writeAll(all);\n};\n\nexport const removeStoredConversationMetadata = (\n conversationId: string,\n): void => {\n const all = readAll();\n if (!(conversationId in all)) return;\n delete all[conversationId];\n writeAll(all);\n};\n"],"mappings":"6CAGA,IAAM,EAAc,+CAgDd,MAAgC,CACpC,GAAI,OAAO,OAAW,IAAa,MAAO,EAAE,CAC5C,GAAI,CACF,IAAM,EAAM,OAAO,aAAa,QAAQ,EAAY,CACpD,GAAI,CAAC,EAAK,MAAO,EAAE,CACnB,IAAM,EAAS,KAAK,MAAM,EAAI,CAE9B,MADI,CAAC,GAAU,OAAO,GAAW,SAAiB,EAAE,CAC7C,OACD,CACN,MAAO,EAAE,GAIP,EAAY,GAA+B,CAC3C,YAAO,OAAW,KACtB,IAAI,OAAO,KAAK,EAAK,CAAC,SAAW,EAAG,CAClC,OAAO,aAAa,WAAW,EAAY,CAC3C,OAEF,OAAO,aAAa,QAAQ,EAAa,KAAK,UAAU,EAAK,CAAC,GAGnD,EACX,GACgC,GAAS,CAAC,IAAmB,KAElD,GACX,EACA,IACS,CACT,IAAM,EAAM,GAAS,CACrB,EAAI,GAAkB,EACtB,EAAS,EAAI,EAGF,EACX,GACS,CACT,IAAM,EAAM,GAAS,CACf,KAAkB,IACxB,OAAO,EAAI,GACX,EAAS,EAAI"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Provider } from "#/types/settings";
|
|
2
|
+
import type { PluginSpec } from "#/api/conversation-service/agent-server-conversation-service.types";
|
|
2
3
|
export type WorkspaceMode = "local_repo" | "new_worktree";
|
|
3
4
|
export interface ConversationMetadata {
|
|
4
5
|
selected_repository: string | null;
|
|
@@ -30,6 +31,16 @@ export interface ConversationMetadata {
|
|
|
30
31
|
* is ambiguous (issue #1082).
|
|
31
32
|
*/
|
|
32
33
|
active_profile?: string | null;
|
|
34
|
+
/**
|
|
35
|
+
* Snapshot of the plugins loaded into the conversation, captured at creation
|
|
36
|
+
* (coordinates only — `parameters` are stripped): plugins explicitly attached
|
|
37
|
+
* at creation plus the enabled installed plugins the SDK auto-loads into new
|
|
38
|
+
* local conversations. The agent-server doesn't expose a live conversation's
|
|
39
|
+
* loaded plugins, so this is the client-side source for the in-conversation
|
|
40
|
+
* plugins view. Local + forward-only: only set for conversations created
|
|
41
|
+
* after this shipped, and only when `app_conversation_id` is known.
|
|
42
|
+
*/
|
|
43
|
+
plugins?: PluginSpec[] | null;
|
|
33
44
|
}
|
|
34
45
|
export declare const getStoredConversationMetadata: (conversationId: string) => ConversationMetadata | null;
|
|
35
46
|
export declare const setStoredConversationMetadata: (conversationId: string, metadata: ConversationMetadata) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-metadata-store.js","names":[],"sources":["../../src/api/conversation-metadata-store.ts"],"sourcesContent":["import { Provider } from \"#/types/settings\";\n\nconst STORAGE_KEY = \"openhands-agent-server-conversation-metadata\";\n\nexport type WorkspaceMode = \"local_repo\" | \"new_worktree\";\n\nexport interface ConversationMetadata {\n selected_repository: string | null;\n selected_branch: string | null;\n git_provider: Provider | null;\n /**\n * The local workspace path the user explicitly attached at conversation\n * creation time. Distinct from `selected_repository` (which is set by\n * the repo picker on the home page). Used by the Files tab to decide\n * whether to default to diff view: if the user attached *anything*\n * (repo or local workspace), we lean diff-first because there's a real\n * git baseline to compare against.\n */\n selected_workspace?: string | null;\n /**\n * How the conversation should use `selected_workspace`.\n *\n * `local_repo` means the runtime should operate directly in the selected\n * folder, even when it is not a git checkout. `new_worktree` preserves the\n * historical agent-server behavior for conversations that should start in a\n * generated per-conversation worktree.\n */\n workspace_mode?: WorkspaceMode | null;\n /**\n * The LLM profile the conversation was created with (or last switched to).\n * Client-side only. Lets the chat-header switcher show the exact profile\n * name even when several profiles share the same underlying model — the\n * agent-server only round-trips the model string, so matching on it alone\n * is ambiguous (issue #1082).\n */\n active_profile?: string | null;\n}\n\ntype StoredMetadata = Record<string, ConversationMetadata>;\n\nconst readAll = (): StoredMetadata => {\n if (typeof window === \"undefined\") return {};\n try {\n const raw = window.localStorage.getItem(STORAGE_KEY);\n if (!raw) return {};\n const parsed = JSON.parse(raw) as unknown;\n if (!parsed || typeof parsed !== \"object\") return {};\n return parsed as StoredMetadata;\n } catch {\n return {};\n }\n};\n\nconst writeAll = (next: StoredMetadata): void => {\n if (typeof window === \"undefined\") return;\n if (Object.keys(next).length === 0) {\n window.localStorage.removeItem(STORAGE_KEY);\n return;\n }\n window.localStorage.setItem(STORAGE_KEY, JSON.stringify(next));\n};\n\nexport const getStoredConversationMetadata = (\n conversationId: string,\n): ConversationMetadata | null => readAll()[conversationId] ?? null;\n\nexport const setStoredConversationMetadata = (\n conversationId: string,\n metadata: ConversationMetadata,\n): void => {\n const all = readAll();\n all[conversationId] = metadata;\n writeAll(all);\n};\n\nexport const removeStoredConversationMetadata = (\n conversationId: string,\n): void => {\n const all = readAll();\n if (!(conversationId in all)) return;\n delete all[conversationId];\n writeAll(all);\n};\n"],"mappings":";
|
|
1
|
+
{"version":3,"file":"conversation-metadata-store.js","names":[],"sources":["../../src/api/conversation-metadata-store.ts"],"sourcesContent":["import { Provider } from \"#/types/settings\";\nimport type { PluginSpec } from \"#/api/conversation-service/agent-server-conversation-service.types\";\n\nconst STORAGE_KEY = \"openhands-agent-server-conversation-metadata\";\n\nexport type WorkspaceMode = \"local_repo\" | \"new_worktree\";\n\nexport interface ConversationMetadata {\n selected_repository: string | null;\n selected_branch: string | null;\n git_provider: Provider | null;\n /**\n * The local workspace path the user explicitly attached at conversation\n * creation time. Distinct from `selected_repository` (which is set by\n * the repo picker on the home page). Used by the Files tab to decide\n * whether to default to diff view: if the user attached *anything*\n * (repo or local workspace), we lean diff-first because there's a real\n * git baseline to compare against.\n */\n selected_workspace?: string | null;\n /**\n * How the conversation should use `selected_workspace`.\n *\n * `local_repo` means the runtime should operate directly in the selected\n * folder, even when it is not a git checkout. `new_worktree` preserves the\n * historical agent-server behavior for conversations that should start in a\n * generated per-conversation worktree.\n */\n workspace_mode?: WorkspaceMode | null;\n /**\n * The LLM profile the conversation was created with (or last switched to).\n * Client-side only. Lets the chat-header switcher show the exact profile\n * name even when several profiles share the same underlying model — the\n * agent-server only round-trips the model string, so matching on it alone\n * is ambiguous (issue #1082).\n */\n active_profile?: string | null;\n /**\n * Snapshot of the plugins loaded into the conversation, captured at creation\n * (coordinates only — `parameters` are stripped): plugins explicitly attached\n * at creation plus the enabled installed plugins the SDK auto-loads into new\n * local conversations. The agent-server doesn't expose a live conversation's\n * loaded plugins, so this is the client-side source for the in-conversation\n * plugins view. Local + forward-only: only set for conversations created\n * after this shipped, and only when `app_conversation_id` is known.\n */\n plugins?: PluginSpec[] | null;\n}\n\ntype StoredMetadata = Record<string, ConversationMetadata>;\n\nconst readAll = (): StoredMetadata => {\n if (typeof window === \"undefined\") return {};\n try {\n const raw = window.localStorage.getItem(STORAGE_KEY);\n if (!raw) return {};\n const parsed = JSON.parse(raw) as unknown;\n if (!parsed || typeof parsed !== \"object\") return {};\n return parsed as StoredMetadata;\n } catch {\n return {};\n }\n};\n\nconst writeAll = (next: StoredMetadata): void => {\n if (typeof window === \"undefined\") return;\n if (Object.keys(next).length === 0) {\n window.localStorage.removeItem(STORAGE_KEY);\n return;\n }\n window.localStorage.setItem(STORAGE_KEY, JSON.stringify(next));\n};\n\nexport const getStoredConversationMetadata = (\n conversationId: string,\n): ConversationMetadata | null => readAll()[conversationId] ?? null;\n\nexport const setStoredConversationMetadata = (\n conversationId: string,\n metadata: ConversationMetadata,\n): void => {\n const all = readAll();\n all[conversationId] = metadata;\n writeAll(all);\n};\n\nexport const removeStoredConversationMetadata = (\n conversationId: string,\n): void => {\n const all = readAll();\n if (!(conversationId in all)) return;\n delete all[conversationId];\n writeAll(all);\n};\n"],"mappings":";AAGA,IAAM,IAAc,gDAgDd,UAAgC;AACpC,KAAI,OAAO,SAAW,IAAa,QAAO,EAAE;AAC5C,KAAI;EACF,IAAM,IAAM,OAAO,aAAa,QAAQ,EAAY;AACpD,MAAI,CAAC,EAAK,QAAO,EAAE;EACnB,IAAM,IAAS,KAAK,MAAM,EAAI;AAE9B,SADI,CAAC,KAAU,OAAO,KAAW,WAAiB,EAAE,GAC7C;SACD;AACN,SAAO,EAAE;;GAIP,KAAY,MAA+B;AAC3C,cAAO,SAAW,MACtB;MAAI,OAAO,KAAK,EAAK,CAAC,WAAW,GAAG;AAClC,UAAO,aAAa,WAAW,EAAY;AAC3C;;AAEF,SAAO,aAAa,QAAQ,GAAa,KAAK,UAAU,EAAK,CAAC;;GAGnD,KACX,MACgC,GAAS,CAAC,MAAmB,MAElD,KACX,GACA,MACS;CACT,IAAM,IAAM,GAAS;AAErB,CADA,EAAI,KAAkB,GACtB,EAAS,EAAI;GAGF,KACX,MACS;CACT,IAAM,IAAM,GAAS;AACf,MAAkB,MACxB,OAAO,EAAI,IACX,EAAS,EAAI"}
|