@openhands/agent-canvas 1.15.0 → 1.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -1
- package/README.windows.md +2 -2
- package/build/assets/{acp-providers-BKvmTf82.js → acp-providers-DrjNsPOH.js} +1 -1
- package/build/assets/active-backend-context-rZiLJRUc.js +2 -0
- package/build/assets/{agent-context-settings-D3PjSTU1.js → agent-context-settings-CJUrcBut.js} +1 -1
- package/build/assets/agent-profiles-service.api-Biieml2L.js +1 -0
- package/build/assets/agent-profiles-settings-x6RvPsq7.js +1 -0
- package/build/assets/agent-server-client-options-BikiNwTa.js +1 -0
- package/build/assets/agent-server-conversation-service.api-DYFsNHKf.js +88 -0
- package/build/assets/agent-settings-BJyovpJ_.js +1 -0
- package/build/assets/agent-settings-CpY3zObk.js +2 -0
- package/build/assets/alert-banner-vARz1idS.js +1 -0
- package/build/assets/{api-error-message-BJyfWp6p.js → api-error-message-Ve79qDcN.js} +1 -1
- package/build/assets/api-key-entry-screen-CsMuBhoP.js +1 -0
- package/build/assets/{app-settings-CbHqzQus.js → app-settings-BaJ7nfHt.js} +1 -1
- package/build/assets/automation-detail-CVoGDrKq.js +3 -0
- package/build/assets/{automation-export-BRopEHMu.js → automation-export-DxY47m3T.js} +1 -1
- package/build/assets/automation-git-sync-CRMP9Bbm.js +1 -0
- package/build/assets/automation-setup-route-072beLz1.js +3 -0
- package/build/assets/{automation-templates-C_0FZgLG.js → automation-templates-4C4PM8K7.js} +1 -1
- package/build/assets/automations-list-xuqTSQL4.js +1 -0
- package/build/assets/{back-nav-button-Dm9tIjVf.js → back-nav-button-B8tH0BEp.js} +1 -1
- package/build/assets/backend-form-modal-0aJmWdsa.js +1 -0
- package/build/assets/{backend-synced-settings-badge-3fOwg6Bd.js → backend-synced-settings-badge-B7rKWBir.js} +1 -1
- package/build/assets/{badge-D4SqUCsR.js → badge-CcGx2TaV.js} +1 -1
- package/build/assets/{base-modal-C7_BDl_U.js → base-modal-DTULovNc.js} +1 -1
- package/build/assets/bot-CLMxGFaq.js +1 -0
- package/build/assets/{brand-button-Dxv6PDeN.js → brand-button-DxPO4Lf8.js} +1 -1
- package/build/assets/browser-C-_qBasq.js +46 -0
- package/build/assets/{browser-tab-BAl4ckJE.js → browser-tab-DZanIw5m.js} +1 -1
- package/build/assets/canvas-extension-page-o_cWgE9B.js +1 -0
- package/build/assets/canvas-extensions-DSgNlCha.js +1 -0
- package/build/assets/canvas-extensions-runtime-DdnkgJXV.js +1 -0
- package/build/assets/{chat-send-button-DWwR2cgI.js → chat-send-button-B3SFSIg5.js} +1 -1
- package/build/assets/check-fDEfgSzj.js +1 -0
- package/build/assets/chevron-down-CFrWHqu8.js +1 -0
- package/build/assets/chevron-right-C5roOrJu.js +1 -0
- package/build/assets/circle-check-ClTzJTdb.js +1 -0
- package/build/assets/{circle-plus-check-toggle-CBh_qomE.js → circle-plus-check-toggle-Fr-h-mbL.js} +1 -1
- package/build/assets/{cloud-funnel-analytics-287iIERo.js → cloud-funnel-analytics-BQanUEEC.js} +1 -1
- package/build/assets/{cog-C4rrw-ZK.js → cog-VBlRo6iw.js} +1 -1
- package/build/assets/command-menu-BT3Ia5Ru.js +1 -0
- package/build/assets/commits-tab-2jhtaohl.js +1 -0
- package/build/assets/{condenser-settings-BcNmYR4s.js → condenser-settings-eVKFMvap.js} +1 -1
- package/build/assets/confirmation-modal-gIFHeZt6.js +1 -0
- package/build/assets/{context-menu-list-item-lVYETtY5.js → context-menu-list-item-DDROe12Z.js} +1 -1
- package/build/assets/conversation-BnjJSFf5.js +93 -0
- package/build/assets/conversation-DZ578rOX.js +1 -0
- package/build/assets/conversation-panel-DZ578rOX.js +1 -0
- package/build/assets/conversation-state-store-D1_G_9I-.js +1 -0
- package/build/assets/{conversation-store-Ca3ghXap.js → conversation-store-DVVfkCsk.js} +1 -1
- package/build/assets/{conversation-tab-empty-state-HJtkmHZj.js → conversation-tab-empty-state-DKlzAz5c.js} +1 -1
- package/build/assets/{copy-to-clipboard-button-Cjkswvnj.js → copy-to-clipboard-button-B3w0X7WH.js} +1 -1
- package/build/assets/{device-verify-EZhHhBT7.js → device-verify-BfkCzyFB.js} +1 -1
- package/build/assets/{dropdown-classes-DJe-E6MC.js → dropdown-classes-B9kJVDIk.js} +1 -1
- package/build/assets/edit-automation-modal-BwhJ39JT.js +1 -0
- package/build/assets/empty-state-RZz0OfnY.js +1 -0
- package/build/assets/{entry.client-C7Bi2tkU.js → entry.client-Ds8LVp-E.js} +2 -2
- package/build/assets/enum-filter-dropdown-C4pW0ORd.js +1 -0
- package/build/assets/{environment-switch-overlay-CEKrFiMw.js → environment-switch-overlay-P2ZAuzov.js} +1 -1
- package/build/assets/{error-state-BALXiBNy.js → error-state-B_5cgNPJ.js} +1 -1
- package/build/assets/extensions-hub-DsaUr4ca.js +1 -0
- package/build/assets/extensions-navigation-CRMZd-FE.js +1 -0
- package/build/assets/external-link-DQtv7eTh.js +1 -0
- package/build/assets/files-tab-CCgAcVdc.js +1 -0
- package/build/assets/{form-control-classes-CGw40z5h.js → form-control-classes-B-z85REi.js} +1 -1
- package/build/assets/format-model-name-CasAP3nd.js +1 -0
- package/build/assets/get-git-path-EHrSDxTM.js +1 -0
- package/build/assets/git-repo-dropdown-D2WEQ97X.js +1 -0
- package/build/assets/{git-repo-dropdown-ai8qaNkD.js → git-repo-dropdown-DVeCUUXG.js} +1 -1
- package/build/assets/{highlighted-source-view-C3sxykQi.js → highlighted-source-view-DjHO3SdW.js} +1 -1
- package/build/assets/home-BorS_vdS.js +1 -0
- package/build/assets/home-aIMbHw5M.js +1 -0
- package/build/assets/home-automation-run-tooltip-CpHNFiFl.js +1 -0
- package/build/assets/home-store-DyXz0w6d.js +1 -0
- package/build/assets/hooks-service-C6dpRtZM.js +1 -0
- package/build/assets/index-home-zKFuKK2B.js +1 -0
- package/build/assets/info-CTIdjttz.js +1 -0
- package/build/assets/install-server-modal-DUiZMc8u.js +1 -0
- package/build/assets/kebab-menu-item-content-mm04SBD3.js +1 -0
- package/build/assets/{key-Cn5za3rg.js → key-CfXbJa8w.js} +1 -1
- package/build/assets/{launch-C1ieiOGe.js → launch-BSIf9KEg.js} +1 -1
- package/build/assets/list-filter-CNpqTWVY.js +1 -0
- package/build/assets/{list-todo-Cuu-STFc.js → list-todo-ByXMdY4W.js} +1 -1
- package/build/assets/llm-not-configured-banner-z_QRSeV0.js +27 -0
- package/build/assets/llm-settings-B-5AHMiX.js +1 -0
- package/build/assets/llm-settings-B3SjHDmA.js +1 -0
- package/build/assets/llm-subscription-service-aDNBQ7Gq.js +1 -0
- package/build/assets/loader-circle-Dex47vVW.js +1 -0
- package/build/assets/{loading-spinner-0L3ZTToZ.js → loading-spinner-DfHI77BA.js} +1 -1
- package/build/assets/manage-backends-modal-q1NdFisr.js +1 -0
- package/build/assets/manifest-8920b615.js +1 -0
- package/build/assets/{manifest-subpage-layout-BGhiUQbA.js → manifest-subpage-layout-BQQy5ipR.js} +1 -1
- package/build/assets/{map-provider-B9LTm23I.js → map-provider-DXvssjw9.js} +1 -1
- package/build/assets/markdown-renderer-rivLvYh-.js +8 -0
- package/build/assets/{mcp-CKbR4Vft.js → mcp-CEXDhQWn.js} +1 -1
- package/build/assets/{mcp-marketplace-utils-C13fFccR.js → mcp-marketplace-utils-Cn_NIMWM.js} +1 -1
- package/build/assets/mcp-page-LGYIICMG.js +9 -0
- package/build/assets/messages-DUSeANAh.js +41 -0
- package/build/assets/{modal-body-CMOc2tLl.js → modal-body-DJw4xBki.js} +1 -1
- package/build/assets/{modal-classes-BAb4Y_BG.js → modal-classes-Dg0ngBPO.js} +1 -1
- package/build/assets/{modal-close-button-CkJ0Ktjj.js → modal-close-button-B9j4nasm.js} +1 -1
- package/build/assets/{mouse-pointer-click-CsgRs_-r.js → mouse-pointer-click-DEhsSUpu.js} +1 -1
- package/build/assets/onboarding-BjFebfs5.js +1 -0
- package/build/assets/onboarding-modal-DDTjOpyd.js +1 -0
- package/build/assets/organization-service.api-Cyg1Tn03.js +1 -0
- package/build/assets/pencil-D5c47kyN.js +1 -0
- package/build/assets/pin-C7vMagvf.js +1 -0
- package/build/assets/planner-tab-D8f2Y3rn.js +1 -0
- package/build/assets/plug-CeaqeF6u.js +1 -0
- package/build/assets/plugins-management-service-Bh_pBuf-.js +1 -0
- package/build/assets/plus-B3wvU06-.js +1 -0
- package/build/assets/profiles-service.api-BbOK0EkF.js +1 -0
- package/build/assets/providers-2gIIkz2N.js +1 -0
- package/build/assets/proxy-CBgMd2zf.js +1 -0
- package/build/assets/{puzzle-A9pGxxai.js → puzzle-DdAqbUrb.js} +1 -1
- package/build/assets/recommended-automations-launcher-YLAQTp4s.js +1 -0
- package/build/assets/refresh-cw-DEQdPCpH.js +1 -0
- package/build/assets/root-Bye_XmEL.js +2 -0
- package/build/assets/root-Cnwwzgo0.css +1 -0
- package/build/assets/root-layout-CSAwxBGM.js +2 -0
- package/build/assets/schema-field-CK0xYNbO.js +1 -0
- package/build/assets/scroll-fade-state-Dt_fx2kf.js +1 -0
- package/build/assets/sdk-section-page-Da73Rs_o.js +1 -0
- package/build/assets/secret-form-CB2VwYYg.js +1 -0
- package/build/assets/secrets-service-Cr8g8xuv.js +1 -0
- package/build/assets/{secrets-settings-BizaTEr1.js → secrets-settings-Bh0udeKv.js} +1 -1
- package/build/assets/settings-CKqk8ZnH.js +1 -0
- package/build/assets/settings-DmyIgRxO.js +1 -0
- package/build/assets/{settings-dropdown-input-tM0A0ipy.js → settings-dropdown-input-DVpyD87C.js} +1 -1
- package/build/assets/settings-index-BSJUFmjE.js +1 -0
- package/build/assets/{settings-input-C03KUoSC.js → settings-input-C0dd8Utu.js} +1 -1
- package/build/assets/{settings-list-classes-BJ0g8rWj.js → settings-list-classes-Ds4jPBHK.js} +1 -1
- package/build/assets/{settings-modal-AzEF1QPP.js → settings-modal-yStgEh2o.js} +1 -1
- package/build/assets/settings-service.api-9_xdv_mh.js +1 -0
- package/build/assets/{settings-switch-CQE0EGC-.js → settings-switch-B78Khmyz.js} +1 -1
- package/build/assets/{settings-utils-ClYOkbbI.js → settings-utils-8GIIgOQL.js} +1 -1
- package/build/assets/shared-conversation-DM96X4KV.js +1 -0
- package/build/assets/shield-check-DO7wa_eu.js +1 -0
- package/build/assets/{sidebar-layout-D3hE08wK.js → sidebar-layout-EPfWxk11.js} +1 -1
- package/build/assets/sidebar-mobile-menu-toggle-D5GR5xT9.js +1 -0
- package/build/assets/sidebar-nav-link-_t4_Ef-9.js +1 -0
- package/build/assets/{sidebar-onboarding-checklist-storage-3qYflszY.js → sidebar-onboarding-checklist-storage-DbDX-Wvj.js} +1 -1
- package/build/assets/sidebar-store-CSDFK0W5.js +1 -0
- package/build/assets/{skill-card-pill-row-CFxjoqxn.js → skill-card-pill-row-989y15jV.js} +1 -1
- package/build/assets/skill-enablement-DXeaImBz.js +1 -0
- package/build/assets/skill-filter-BBeZ4JEP.js +2 -0
- package/build/assets/{skill-icon-badge-CPQJ6A-I.js → skill-icon-badge-BDhQ-tQ0.js} +1 -1
- package/build/assets/skill-scope-Dz3kPH3P.js +1 -0
- package/build/assets/skills-plugins-e3CYGdUJ.js +1 -0
- package/build/assets/skills-settings-3e-FuHw_.js +1 -0
- package/build/assets/styled-tooltip-Pd22BIvr.js +1 -0
- package/build/assets/{task-list-tab-04GNQuii.js → task-list-tab-3Jg8ywch.js} +1 -1
- package/build/assets/{terminal-Cj0iHIW7.js → terminal-onXx0_Qz.js} +1 -1
- package/build/assets/toggle-switch-lwQtxDcm.js +1 -0
- package/build/assets/trash-2-ZhKuTLiz.js +1 -0
- package/build/assets/trash-B6OIe4yX.js +1 -0
- package/build/assets/triangle-alert-BajLPpQg.js +1 -0
- package/build/assets/{typography-SgFy466J.js → typography-HLLg_FAn.js} +1 -1
- package/build/assets/usage-tab-Cm-9j3UK.js +1 -0
- package/build/assets/use-acp-credential-form-BARcvjYE.js +1 -0
- package/build/assets/use-activate-agent-profile-BLKML6vQ.js +1 -0
- package/build/assets/use-agent-profiles-1P91KSXz.js +1 -0
- package/build/assets/{use-automation-health-BxXdzZMP.js → use-automation-health-BZkQNEA8.js} +1 -1
- package/build/assets/use-automation-permissions-B_RpvL-s.js +1 -0
- package/build/assets/{use-automations-zYb0dUny.js → use-automations-Cg0PDIZr.js} +1 -1
- package/build/assets/{use-can-manage-org-profiles-BWMahtUh.js → use-can-manage-org-profiles-BbN6KfDr.js} +1 -1
- package/build/assets/use-canvas-extensions-CFUpHat6.js +1 -0
- package/build/assets/{use-cloud-current-user-id-CPHMDG-C.js → use-cloud-current-user-id-Dk0rjr63.js} +1 -1
- package/build/assets/use-config-DpafU_QP.js +1 -0
- package/build/assets/use-create-conversation-1YgmAHt-.js +1 -0
- package/build/assets/use-create-secret-D8p9ybQj.js +1 -0
- package/build/assets/{use-get-secrets-BT4ihRwj.js → use-get-secrets-CQ4b0qK8.js} +1 -1
- package/build/assets/use-is-authed-BRPjCRKM.js +1 -0
- package/build/assets/{use-launch-skill-in-chat-BYjYihBP.js → use-launch-skill-in-chat-DeYa1tFM.js} +1 -1
- package/build/assets/use-llm-configured-DGm8FiRR.js +1 -0
- package/build/assets/use-llm-profiles-BTTtpW4z.js +1 -0
- package/build/assets/use-manifest-capabilities-AOWGcu0j.js +1 -0
- package/build/assets/use-onboarding-completion-CoINurkm.js +1 -0
- package/build/assets/use-pinned-home-route-D6krwXjy.js +1 -0
- package/build/assets/use-plugins-marketplace-mLsIDhBv.js +1 -0
- package/build/assets/use-save-agent-profile-CxyO9YG-.js +1 -0
- package/build/assets/{use-save-settings-CUZW6yXP.js → use-save-settings-3U5K9-8x.js} +1 -1
- package/build/assets/use-settings-Dn00UISA.js +1 -0
- package/build/assets/use-settings-nav-items-vrjxTqcu.js +16 -0
- package/build/assets/use-tracking-B9prBsrq.js +3 -0
- package/build/assets/{use-user-conversation-DT0_QCnL.js → use-user-conversation-ZWlXtbZb.js} +1 -1
- package/build/assets/{useInfiniteQuery-CgeUQPfs.js → useInfiniteQuery-BzrRqjLg.js} +1 -1
- package/build/assets/{useMutation-DFnzkf6f.js → useMutation-CJuK90oc.js} +1 -1
- package/build/assets/{useQueries-BhbrGEf1.js → useQueries-CykmpT-a.js} +1 -1
- package/build/assets/{useQuery-BXWbZBZl.js → useQuery-S6j94er1.js} +1 -1
- package/build/assets/utils-BOco8mxR.js +1 -0
- package/build/assets/{vendor~conversation-panel~conversation-CTvDDiXg.js → vendor~conversation-panel~conversation-4eJ0tml3.js} +1 -1
- package/build/assets/{vendor~entry.client-BFE7Llz9.js → vendor~entry.client-CoCfUXUF.js} +1 -1
- package/build/assets/{vendor~entry.client-BaKt_PIp.js → vendor~entry.client-DA2izTjq.js} +1 -1
- package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~b0x1wrp2-Z0lly3FE.js +2 -0
- package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~czjee3a3-BfkNGovw.js +185 -0
- package/build/assets/{vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~ew3u153i-rfV8mQ9m.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~ew9ih1s8-DnDoaYNi.js} +1 -1
- package/build/assets/{vendor~index-home~home~conversation-panel~conversation-BTyukeM-.js → vendor~index-home~home~conversation-panel~conversation-CSFLzmTN.js} +1 -1
- package/build/assets/vendor~root-layout-n8XCEXG8.js +1 -0
- package/build/assets/{vendor~root-layout~conversation-panel~conversation-BYAWJwQX.js → vendor~root-layout~conversation-panel~conversation-3Idg1_U3.js} +1 -1
- package/build/assets/{vendor~root-layout~conversation-panel~conversation~skills-settings~automations-list~shared-~bovqqk8e-CHaLEBVR.js → vendor~root-layout~conversation-panel~conversation~skills-settings~automations-list~shared-~bovqqk8e-DkPlXWl9.js} +1 -1
- package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation-DgQ564nC.js +1 -0
- package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~mcp~automations-list~aut~ibfbmr9f-CxhwKuAd.js +1 -0
- package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~hjcjabwg-Dtu7BpYk.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~inibp4qe-CnsDDzeE.js} +2 -2
- package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~iyia17eu-CV850oio.js +1 -0
- package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~eo2nf80n-DonTKfQD.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~eo2nf80n-BPjI-atc.js} +125 -15
- package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~jz4f6vo2-BgxDvUcf.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~jz4f6vo2-C7HiY4Ae.js} +42 -3
- package/build/assets/{verification-settings-Bj6bo097.js → verification-settings-u2POabjH.js} +1 -1
- package/build/assets/{wrench-hi7Q13dF.js → wrench-CkgI4rxA.js} +1 -1
- package/build/assets/x-By6qCmtY.js +1 -0
- package/build/index.html +4 -4
- package/build/locales/ar/openhands.json +94 -25
- package/build/locales/ca/openhands.json +94 -25
- package/build/locales/de/openhands.json +94 -25
- package/build/locales/en/openhands.json +94 -25
- package/build/locales/es/openhands.json +94 -25
- package/build/locales/fr/openhands.json +94 -25
- package/build/locales/it/openhands.json +94 -25
- package/build/locales/ja/openhands.json +94 -25
- package/build/locales/ko-KR/openhands.json +94 -25
- package/build/locales/no/openhands.json +94 -25
- package/build/locales/pt/openhands.json +94 -25
- package/build/locales/tr/openhands.json +94 -25
- package/build/locales/uk/openhands.json +94 -25
- package/build/locales/zh-CN/openhands.json +94 -25
- package/build/locales/zh-TW/openhands.json +94 -25
- package/config/defaults.json +9 -5
- package/dist/api/agent-profiles-service/profile-field-support.d.ts +26 -0
- package/dist/api/agent-server-adapter.cjs +3 -3
- package/dist/api/agent-server-adapter.cjs.map +1 -1
- package/dist/api/agent-server-adapter.d.ts +72 -12
- package/dist/api/agent-server-adapter.js +249 -145
- package/dist/api/agent-server-adapter.js.map +1 -1
- package/dist/api/agent-server-compatibility.cjs +1 -1
- package/dist/api/agent-server-compatibility.cjs.map +1 -1
- package/dist/api/agent-server-compatibility.d.ts +21 -0
- package/dist/api/agent-server-compatibility.js +52 -38
- package/dist/api/agent-server-compatibility.js.map +1 -1
- package/dist/api/agent-server-config.cjs +1 -1
- package/dist/api/agent-server-config.cjs.map +1 -1
- package/dist/api/agent-server-config.d.ts +32 -0
- package/dist/api/agent-server-config.js +21 -5
- package/dist/api/agent-server-config.js.map +1 -1
- package/dist/api/automation-service/automation-service.api.cjs +1 -1
- package/dist/api/automation-service/automation-service.api.cjs.map +1 -1
- package/dist/api/automation-service/automation-service.api.d.ts +2 -2
- package/dist/api/automation-service/automation-service.api.js +7 -7
- package/dist/api/automation-service/automation-service.api.js.map +1 -1
- package/dist/api/canvas-extensions-service.cjs +1 -0
- package/dist/api/canvas-extensions-service.d.ts +22 -0
- package/dist/api/canvas-extensions-service.js +4 -0
- package/dist/api/cloud/conversation-service.api.cjs +1 -1
- package/dist/api/cloud/conversation-service.api.cjs.map +1 -1
- package/dist/api/cloud/conversation-service.api.d.ts +6 -0
- package/dist/api/cloud/conversation-service.api.js +14 -6
- package/dist/api/cloud/conversation-service.api.js.map +1 -1
- package/dist/api/cloud/provider-connections-service.api.cjs +2 -0
- package/dist/api/cloud/provider-connections-service.api.cjs.map +1 -0
- package/dist/api/cloud/provider-connections-service.api.d.ts +5 -0
- package/dist/api/cloud/provider-connections-service.api.js +50 -0
- package/dist/api/cloud/provider-connections-service.api.js.map +1 -0
- package/dist/api/cloud/skills-service.api.cjs +1 -1
- package/dist/api/cloud/skills-service.api.cjs.map +1 -1
- package/dist/api/cloud/skills-service.api.d.ts +10 -0
- package/dist/api/cloud/skills-service.api.js +11 -1
- package/dist/api/cloud/skills-service.api.js.map +1 -1
- package/dist/api/conversation-file-upload.api.cjs +1 -1
- package/dist/api/conversation-file-upload.api.js +10 -10
- package/dist/api/conversation-metadata-store.cjs +1 -1
- package/dist/api/conversation-metadata-store.cjs.map +1 -1
- package/dist/api/conversation-metadata-store.d.ts +24 -0
- package/dist/api/conversation-metadata-store.js +10 -2
- 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 +31 -0
- package/dist/api/conversation-service/agent-server-conversation-service.api.js +188 -128
- package/dist/api/conversation-service/agent-server-conversation-service.api.js.map +1 -1
- package/dist/api/event-service/event-service.api.cjs +1 -1
- package/dist/api/event-service/event-service.api.js +12 -12
- package/dist/api/git-service/agent-server-git-service.api.cjs +1 -1
- package/dist/api/git-service/agent-server-git-service.api.js +8 -8
- package/dist/api/hooks-service.cjs +2 -0
- package/dist/api/hooks-service.cjs.map +1 -0
- package/dist/api/hooks-service.d.ts +13 -0
- package/dist/api/hooks-service.js +20 -0
- package/dist/api/hooks-service.js.map +1 -0
- package/dist/api/provider-connections-service/provider-connections-service.api.cjs +1 -1
- package/dist/api/provider-connections-service/provider-connections-service.api.cjs.map +1 -1
- package/dist/api/provider-connections-service/provider-connections-service.api.js +25 -16
- package/dist/api/provider-connections-service/provider-connections-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.js +8 -8
- package/dist/api/settings-service/settings-service.api.cjs +1 -1
- package/dist/api/settings-service/settings-service.api.cjs.map +1 -1
- package/dist/api/settings-service/settings-service.api.d.ts +5 -2
- package/dist/api/settings-service/settings-service.api.js +20 -11
- 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.d.ts +7 -0
- package/dist/api/skills-service.js +11 -8
- package/dist/api/skills-service.js.map +1 -1
- package/dist/components/conversation-events/chat/event-message-components/critic-result-display.cjs +1 -1
- package/dist/components/conversation-events/chat/event-message-components/critic-result-display.js +5 -5
- package/dist/components/conversation-events/chat/event-message-components/event-group.cjs +1 -1
- package/dist/components/conversation-events/chat/event-message-components/event-group.cjs.map +1 -1
- package/dist/components/conversation-events/chat/event-message-components/event-group.js +40 -36
- package/dist/components/conversation-events/chat/event-message-components/event-group.js.map +1 -1
- package/dist/components/conversation-events/chat/event-message-components/finish-event-message.cjs +1 -1
- package/dist/components/conversation-events/chat/event-message-components/finish-event-message.cjs.map +1 -1
- package/dist/components/conversation-events/chat/event-message-components/finish-event-message.js +2 -1
- package/dist/components/conversation-events/chat/event-message-components/finish-event-message.js.map +1 -1
- package/dist/components/conversation-events/chat/event-message-components/generic-event-message-wrapper.cjs +1 -1
- package/dist/components/conversation-events/chat/event-message-components/generic-event-message-wrapper.cjs.map +1 -1
- package/dist/components/conversation-events/chat/event-message-components/generic-event-message-wrapper.d.ts +1 -1
- package/dist/components/conversation-events/chat/event-message-components/generic-event-message-wrapper.js +28 -28
- package/dist/components/conversation-events/chat/event-message-components/generic-event-message-wrapper.js.map +1 -1
- package/dist/components/conversation-events/chat/event-message-components/thought-event-message.cjs +1 -1
- package/dist/components/conversation-events/chat/event-message-components/thought-event-message.cjs.map +1 -1
- package/dist/components/conversation-events/chat/event-message-components/thought-event-message.js +2 -1
- package/dist/components/conversation-events/chat/event-message-components/thought-event-message.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.d.ts +1 -1
- package/dist/components/conversation-events/chat/event-message-components/user-assistant-event-message.js +37 -37
- 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 +79 -70
- package/dist/components/conversation-events/chat/event-message.js.map +1 -1
- package/dist/components/conversation-events/chat/messages.cjs +1 -1
- package/dist/components/conversation-events/chat/messages.cjs.map +1 -1
- package/dist/components/conversation-events/chat/messages.js +28 -27
- package/dist/components/conversation-events/chat/messages.js.map +1 -1
- package/dist/components/features/automations/automation-card.cjs +1 -1
- package/dist/components/features/automations/automation-card.cjs.map +1 -1
- package/dist/components/features/automations/automation-card.js +118 -102
- package/dist/components/features/automations/automation-card.js.map +1 -1
- package/dist/components/features/automations/automation-list-row.cjs +1 -1
- package/dist/components/features/automations/automation-list-row.cjs.map +1 -1
- package/dist/components/features/automations/automation-list-row.js +88 -77
- package/dist/components/features/automations/automation-list-row.js.map +1 -1
- package/dist/components/features/automations/detail/detail-header.d.ts +3 -1
- package/dist/components/features/automations/detail/run-phase.cjs +2 -0
- package/dist/components/features/automations/detail/run-phase.cjs.map +1 -0
- package/dist/components/features/automations/detail/run-phase.d.ts +89 -0
- package/dist/components/features/automations/detail/run-phase.js +72 -0
- package/dist/components/features/automations/detail/run-phase.js.map +1 -0
- package/dist/components/features/automations/detail/run-status-badge.cjs +1 -1
- package/dist/components/features/automations/detail/run-status-badge.cjs.map +1 -1
- package/dist/components/features/automations/detail/run-status-badge.d.ts +2 -2
- package/dist/components/features/automations/detail/run-status-badge.js +82 -53
- package/dist/components/features/automations/detail/run-status-badge.js.map +1 -1
- package/dist/components/features/automations/kebab-menu.cjs +1 -1
- package/dist/components/features/automations/kebab-menu.cjs.map +1 -1
- package/dist/components/features/automations/kebab-menu.js +9 -5
- package/dist/components/features/automations/kebab-menu.js.map +1 -1
- package/dist/components/features/automations/recommended-automations-launcher.cjs +1 -1
- package/dist/components/features/automations/recommended-automations-launcher.cjs.map +1 -1
- package/dist/components/features/automations/recommended-automations-launcher.js +12 -12
- package/dist/components/features/automations/recommended-automations-launcher.js.map +1 -1
- package/dist/components/features/automations/recommended-automations-section.cjs +1 -1
- package/dist/components/features/automations/recommended-automations-section.js +9 -9
- 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.js +5 -11
- package/dist/components/features/backends/backend-form-modal.js.map +1 -1
- package/dist/components/features/backends/backend-selector.cjs +1 -1
- package/dist/components/features/backends/backend-selector.cjs.map +1 -1
- package/dist/components/features/backends/backend-selector.js +133 -122
- package/dist/components/features/backends/backend-selector.js.map +1 -1
- package/dist/components/features/backends/manage-backends-modal.cjs +1 -1
- package/dist/components/features/backends/manage-backends-modal.cjs.map +1 -1
- package/dist/components/features/backends/manage-backends-modal.js +29 -29
- package/dist/components/features/backends/manage-backends-modal.js.map +1 -1
- package/dist/components/features/canvas-extensions/add-canvas-extension-modal.d.ts +6 -0
- package/dist/components/features/canvas-extensions/canvas-extension-card.d.ts +9 -0
- package/dist/components/features/canvas-extensions/canvas-extensions-runtime.cjs +2 -0
- package/dist/components/features/canvas-extensions/canvas-extensions-runtime.cjs.map +1 -0
- package/dist/components/features/canvas-extensions/canvas-extensions-runtime.d.ts +23 -0
- package/dist/components/features/canvas-extensions/canvas-extensions-runtime.js +19 -0
- package/dist/components/features/canvas-extensions/canvas-extensions-runtime.js.map +1 -0
- package/dist/components/features/chat/change-agent-button.cjs +1 -1
- package/dist/components/features/chat/change-agent-button.js +4 -4
- 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 +107 -104
- package/dist/components/features/chat/chat-interface.js.map +1 -1
- package/dist/components/features/chat/chat-markdown-path-code.cjs +3 -0
- package/dist/components/features/chat/chat-markdown-path-code.cjs.map +1 -0
- package/dist/components/features/chat/chat-markdown-path-code.d.ts +27 -0
- package/dist/components/features/chat/chat-markdown-path-code.js +72 -0
- package/dist/components/features/chat/chat-markdown-path-code.js.map +1 -0
- package/dist/components/features/chat/chat-message.cjs +1 -1
- package/dist/components/features/chat/chat-message.cjs.map +1 -1
- package/dist/components/features/chat/chat-message.d.ts +2 -1
- package/dist/components/features/chat/chat-message.js +88 -79
- package/dist/components/features/chat/chat-message.js.map +1 -1
- package/dist/components/features/chat/components/context-window-meter.cjs +1 -1
- package/dist/components/features/chat/components/context-window-meter.js +4 -4
- package/dist/components/features/chat/confirmation-mode-enabled.cjs +1 -1
- package/dist/components/features/chat/confirmation-mode-enabled.js +4 -4
- package/dist/components/features/chat/generic-event-message.cjs +1 -1
- package/dist/components/features/chat/generic-event-message.cjs.map +1 -1
- package/dist/components/features/chat/generic-event-message.d.ts +2 -1
- package/dist/components/features/chat/generic-event-message.js +41 -22
- package/dist/components/features/chat/generic-event-message.js.map +1 -1
- 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/path-component.cjs +1 -1
- package/dist/components/features/chat/path-component.cjs.map +1 -1
- package/dist/components/features/chat/path-component.d.ts +8 -2
- package/dist/components/features/chat/path-component.js +33 -21
- package/dist/components/features/chat/path-component.js.map +1 -1
- package/dist/components/features/chat/tool-visualizers/file-editor/file-editor.cjs +1 -1
- package/dist/components/features/chat/tool-visualizers/file-editor/file-editor.cjs.map +1 -1
- package/dist/components/features/chat/tool-visualizers/file-editor/file-editor.js +38 -43
- package/dist/components/features/chat/tool-visualizers/file-editor/file-editor.js.map +1 -1
- package/dist/components/features/chat/tool-visualizers/primitives/file-path-chip.cjs +1 -1
- package/dist/components/features/chat/tool-visualizers/primitives/file-path-chip.cjs.map +1 -1
- package/dist/components/features/chat/tool-visualizers/primitives/file-path-chip.d.ts +8 -5
- package/dist/components/features/chat/tool-visualizers/primitives/file-path-chip.js +22 -16
- package/dist/components/features/chat/tool-visualizers/primitives/file-path-chip.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.d.ts +4 -0
- package/dist/components/features/chat/user-message-body.js +30 -24
- package/dist/components/features/chat/user-message-body.js.map +1 -1
- package/dist/components/features/conversation/conversation-overview-git-section.cjs +1 -1
- package/dist/components/features/conversation/conversation-overview-git-section.js +4 -4
- package/dist/components/features/conversation/conversation-overview-skills-panel.cjs +1 -1
- package/dist/components/features/conversation/conversation-overview-skills-panel.cjs.map +1 -1
- package/dist/components/features/conversation/conversation-overview-skills-panel.js +63 -81
- package/dist/components/features/conversation/conversation-overview-skills-panel.js.map +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.cjs +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.cjs.map +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.js +77 -78
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.js.map +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs.cjs +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs.cjs.map +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs.js +96 -96
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs.js.map +1 -1
- package/dist/components/features/conversation/conversation-tabs/drawer-vscode-link.cjs +1 -1
- package/dist/components/features/conversation/conversation-tabs/drawer-vscode-link.cjs.map +1 -1
- package/dist/components/features/conversation/conversation-tabs/drawer-vscode-link.d.ts +1 -1
- package/dist/components/features/conversation/conversation-tabs/drawer-vscode-link.js +3 -3
- package/dist/components/features/conversation/conversation-tabs/drawer-vscode-link.js.map +1 -1
- package/dist/components/features/conversation-panel/advanced-conversation-options-modal.cjs +2 -0
- package/dist/components/features/conversation-panel/advanced-conversation-options-modal.cjs.map +1 -0
- package/dist/components/features/conversation-panel/advanced-conversation-options-modal.d.ts +21 -0
- package/dist/components/features/conversation-panel/advanced-conversation-options-modal.js +239 -0
- package/dist/components/features/conversation-panel/advanced-conversation-options-modal.js.map +1 -0
- package/dist/components/features/conversation-panel/conversation-active-tag-filters.cjs +2 -0
- package/dist/components/features/conversation-panel/conversation-active-tag-filters.cjs.map +1 -0
- package/dist/components/features/conversation-panel/conversation-active-tag-filters.d.ts +28 -0
- package/dist/components/features/conversation-panel/conversation-active-tag-filters.js +69 -0
- package/dist/components/features/conversation-panel/conversation-active-tag-filters.js.map +1 -0
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.d.ts +2 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.js +19 -18
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.d.ts +2 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.js +91 -80
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.js +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card.d.ts +7 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card.js +87 -81
- package/dist/components/features/conversation-panel/conversation-card/conversation-card.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.d.ts +2 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.js +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.d.ts +2 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.js +2 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-layouts-menu.cjs +2 -0
- package/dist/components/features/conversation-panel/conversation-layouts-menu.cjs.map +1 -0
- package/dist/components/features/conversation-panel/conversation-layouts-menu.d.ts +29 -0
- package/dist/components/features/conversation-panel/conversation-layouts-menu.js +177 -0
- package/dist/components/features/conversation-panel/conversation-layouts-menu.js.map +1 -0
- package/dist/components/features/conversation-panel/conversation-panel-list-helpers.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-panel-list-helpers.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-panel-list-helpers.d.ts +37 -0
- package/dist/components/features/conversation-panel/conversation-panel-list-helpers.js +85 -45
- package/dist/components/features/conversation-panel/conversation-panel-list-helpers.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 +296 -290
- package/dist/components/features/conversation-panel/conversation-panel.js.map +1 -1
- package/dist/components/features/conversation-panel/edit-conversation-tags-modal.cjs +2 -0
- package/dist/components/features/conversation-panel/edit-conversation-tags-modal.cjs.map +1 -0
- package/dist/components/features/conversation-panel/edit-conversation-tags-modal.d.ts +22 -0
- package/dist/components/features/conversation-panel/edit-conversation-tags-modal.js +153 -0
- package/dist/components/features/conversation-panel/edit-conversation-tags-modal.js.map +1 -0
- package/dist/components/features/conversation-panel/hide-older-conversations-row.cjs +2 -0
- package/dist/components/features/conversation-panel/hide-older-conversations-row.cjs.map +1 -0
- package/dist/components/features/conversation-panel/hide-older-conversations-row.d.ts +6 -0
- package/dist/components/features/conversation-panel/hide-older-conversations-row.js +65 -0
- package/dist/components/features/conversation-panel/hide-older-conversations-row.js.map +1 -0
- package/dist/components/features/conversation-panel/menu-row.cjs +1 -1
- package/dist/components/features/conversation-panel/menu-row.cjs.map +1 -1
- package/dist/components/features/conversation-panel/menu-row.d.ts +11 -1
- package/dist/components/features/conversation-panel/menu-row.js +27 -16
- package/dist/components/features/conversation-panel/menu-row.js.map +1 -1
- package/dist/components/features/conversation-panel/skills-modal.cjs +1 -1
- package/dist/components/features/conversation-panel/skills-modal.cjs.map +1 -1
- package/dist/components/features/conversation-panel/skills-modal.js +29 -28
- package/dist/components/features/conversation-panel/skills-modal.js.map +1 -1
- package/dist/components/features/files-tab/file-content-viewer.cjs +1 -1
- package/dist/components/features/files-tab/file-content-viewer.js +5 -5
- package/dist/components/features/home/featured-automations/automation-health-indicator.cjs +1 -1
- package/dist/components/features/home/featured-automations/automation-health-indicator.cjs.map +1 -1
- package/dist/components/features/home/featured-automations/automation-health-indicator.js +1 -1
- package/dist/components/features/home/featured-automations/automation-health-indicator.js.map +1 -1
- package/dist/components/features/home/featured-automations/automation-run-activity-metrics.cjs +1 -1
- package/dist/components/features/home/featured-automations/automation-run-activity-metrics.cjs.map +1 -1
- package/dist/components/features/home/featured-automations/automation-run-activity-metrics.d.ts +4 -3
- package/dist/components/features/home/featured-automations/automation-run-activity-metrics.js +22 -25
- package/dist/components/features/home/featured-automations/automation-run-activity-metrics.js.map +1 -1
- package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.cjs +1 -1
- package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.cjs.map +1 -1
- package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.d.ts +1 -1
- package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.js +15 -15
- package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.js.map +1 -1
- package/dist/components/features/home/featured-automations/automation-run-health.cjs +1 -1
- package/dist/components/features/home/featured-automations/automation-run-health.cjs.map +1 -1
- package/dist/components/features/home/featured-automations/automation-run-health.d.ts +5 -3
- package/dist/components/features/home/featured-automations/automation-run-health.js +30 -23
- package/dist/components/features/home/featured-automations/automation-run-health.js.map +1 -1
- package/dist/components/features/home/featured-automations/home-automation-activity.d.ts +3 -2
- package/dist/components/features/home/featured-automations/home-automation-run-tooltip.cjs +1 -1
- package/dist/components/features/home/featured-automations/home-automation-run-tooltip.cjs.map +1 -1
- package/dist/components/features/home/featured-automations/home-automation-run-tooltip.d.ts +1 -1
- package/dist/components/features/home/featured-automations/home-automation-run-tooltip.js +59 -37
- package/dist/components/features/home/featured-automations/home-automation-run-tooltip.js.map +1 -1
- package/dist/components/features/manifest/manifest-form-field.d.ts +3 -1
- package/dist/components/features/manifest/manifest-review-step.d.ts +3 -1
- package/dist/components/features/onboarding/onboarding-host.d.ts +3 -4
- package/dist/components/features/onboarding/steps/setup-llm-step.d.ts +5 -9
- package/dist/components/features/settings/acp-auth-status-banner.d.ts +23 -6
- package/dist/components/features/settings/cloud-settings-link.cjs +1 -1
- package/dist/components/features/settings/cloud-settings-link.cjs.map +1 -1
- package/dist/components/features/settings/cloud-settings-link.js +5 -3
- package/dist/components/features/settings/cloud-settings-link.js.map +1 -1
- package/dist/components/features/settings/integrations-settings-link.cjs +1 -1
- package/dist/components/features/settings/integrations-settings-link.cjs.map +1 -1
- package/dist/components/features/settings/integrations-settings-link.d.ts +3 -1
- package/dist/components/features/settings/integrations-settings-link.js +20 -17
- package/dist/components/features/settings/integrations-settings-link.js.map +1 -1
- 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 +2 -1
- package/dist/components/features/settings/llm-profiles/profiles-body.d.ts +2 -2
- package/dist/components/features/settings/llm-profiles/provider-connection-modal.cjs +1 -1
- package/dist/components/features/settings/llm-profiles/provider-connection-modal.js +3 -0
- package/dist/components/features/settings/sdk-settings/field-help.cjs +1 -1
- package/dist/components/features/settings/sdk-settings/field-help.cjs.map +1 -1
- package/dist/components/features/settings/sdk-settings/field-help.d.ts +1 -1
- package/dist/components/features/settings/sdk-settings/field-help.js +1 -1
- package/dist/components/features/settings/sdk-settings/field-help.js.map +1 -1
- package/dist/components/features/settings/sdk-settings/sdk-section-page.cjs +1 -1
- package/dist/components/features/settings/sdk-settings/sdk-section-page.cjs.map +1 -1
- package/dist/components/features/settings/sdk-settings/sdk-section-page.d.ts +8 -7
- package/dist/components/features/settings/sdk-settings/sdk-section-page.js +172 -142
- package/dist/components/features/settings/sdk-settings/sdk-section-page.js.map +1 -1
- package/dist/components/features/settings/secrets-settings/secret-form.cjs +1 -1
- package/dist/components/features/settings/secrets-settings/secret-form.cjs.map +1 -1
- package/dist/components/features/settings/secrets-settings/secret-form.js +38 -25
- package/dist/components/features/settings/secrets-settings/secret-form.js.map +1 -1
- 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-nav-link.cjs +1 -1
- package/dist/components/features/sidebar/sidebar-nav-link.cjs.map +1 -1
- package/dist/components/features/sidebar/sidebar-nav-link.d.ts +10 -1
- package/dist/components/features/sidebar/sidebar-nav-link.js +54 -36
- package/dist/components/features/sidebar/sidebar-nav-link.js.map +1 -1
- 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 +3 -1
- package/dist/components/features/sidebar/sidebar-rail-body.js +98 -58
- 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 +44 -43
- package/dist/components/features/sidebar/sidebar.js.map +1 -1
- package/dist/components/features/sidebar/use-sidebar-onboarding-checklist.cjs +1 -1
- package/dist/components/features/sidebar/use-sidebar-onboarding-checklist.js +3 -3
- package/dist/components/features/skills/build-skill-pills.cjs +1 -1
- package/dist/components/features/skills/build-skill-pills.cjs.map +1 -1
- package/dist/components/features/skills/build-skill-pills.js +60 -52
- package/dist/components/features/skills/build-skill-pills.js.map +1 -1
- package/dist/components/features/skills/extensions-navigation.cjs +1 -1
- package/dist/components/features/skills/extensions-navigation.cjs.map +1 -1
- package/dist/components/features/skills/extensions-navigation.js +54 -43
- package/dist/components/features/skills/extensions-navigation.js.map +1 -1
- package/dist/components/features/skills/skill-filter.cjs +1 -1
- package/dist/components/features/skills/skill-filter.cjs.map +1 -1
- package/dist/components/features/skills/skill-filter.d.ts +8 -3
- package/dist/components/features/skills/skill-filter.js +69 -52
- package/dist/components/features/skills/skill-filter.js.map +1 -1
- package/dist/components/shared/buttons/styled-tooltip.cjs +1 -1
- package/dist/components/shared/buttons/styled-tooltip.cjs.map +1 -1
- package/dist/components/shared/buttons/styled-tooltip.d.ts +2 -1
- package/dist/components/shared/buttons/styled-tooltip.js +2 -1
- package/dist/components/shared/buttons/styled-tooltip.js.map +1 -1
- package/dist/components/shared/filters/enum-filter-dropdown.cjs +1 -1
- package/dist/components/shared/filters/enum-filter-dropdown.cjs.map +1 -1
- package/dist/components/shared/filters/enum-filter-dropdown.d.ts +5 -1
- package/dist/components/shared/filters/enum-filter-dropdown.js +14 -14
- package/dist/components/shared/filters/enum-filter-dropdown.js.map +1 -1
- package/dist/components/shared/modals/confirmation-modal.cjs +1 -1
- package/dist/components/shared/modals/confirmation-modal.cjs.map +1 -1
- package/dist/components/shared/modals/confirmation-modal.d.ts +2 -1
- package/dist/components/shared/modals/confirmation-modal.js +8 -8
- package/dist/components/shared/modals/confirmation-modal.js.map +1 -1
- package/dist/components/shared/modals/settings/model-selector.cjs +1 -1
- package/dist/components/shared/modals/settings/model-selector.js +27 -27
- package/dist/components/shared/modals/settings/settings-form.cjs +1 -1
- package/dist/components/shared/modals/settings/settings-form.js +8 -8
- package/dist/config/defaults.cjs +1 -1
- package/dist/config/defaults.cjs.map +1 -1
- package/dist/config/defaults.js +9 -5
- package/dist/config/defaults.js.map +1 -1
- package/dist/constants/settings-nav.d.ts +8 -0
- 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.d.ts +5 -0
- package/dist/contexts/conversation-websocket-context.js +194 -198
- package/dist/contexts/conversation-websocket-context.js.map +1 -1
- package/dist/contexts/websocket-provider-wrapper.cjs +1 -1
- package/dist/contexts/websocket-provider-wrapper.cjs.map +1 -1
- package/dist/contexts/websocket-provider-wrapper.js +31 -15
- package/dist/contexts/websocket-provider-wrapper.js.map +1 -1
- package/dist/extensions/canvas-extension-module-loader.d.ts +11 -0
- package/dist/hooks/chat/record-model-switch-message.cjs +1 -1
- package/dist/hooks/chat/record-model-switch-message.cjs.map +1 -1
- package/dist/hooks/chat/record-model-switch-message.d.ts +31 -0
- package/dist/hooks/chat/record-model-switch-message.js +25 -12
- package/dist/hooks/chat/record-model-switch-message.js.map +1 -1
- package/dist/hooks/chat/use-plan-mode-interceptor.cjs +2 -0
- package/dist/hooks/chat/use-plan-mode-interceptor.cjs.map +1 -0
- package/dist/hooks/chat/use-plan-mode-interceptor.d.ts +16 -0
- package/dist/hooks/chat/use-plan-mode-interceptor.js +43 -0
- package/dist/hooks/chat/use-plan-mode-interceptor.js.map +1 -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.js +5 -1
- package/dist/hooks/mutation/use-create-conversation.js.map +1 -1
- package/dist/hooks/mutation/use-manage-canvas-extensions.d.ts +12 -0
- package/dist/hooks/mutation/use-read-conversation-file.cjs +1 -1
- package/dist/hooks/mutation/use-read-conversation-file.cjs.map +1 -1
- package/dist/hooks/mutation/use-read-conversation-file.js +11 -4
- package/dist/hooks/mutation/use-read-conversation-file.js.map +1 -1
- package/dist/hooks/mutation/use-save-settings.cjs +1 -1
- package/dist/hooks/mutation/use-save-settings.js +3 -3
- package/dist/hooks/mutation/use-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.js +13 -25
- package/dist/hooks/mutation/use-switch-llm-profile.js.map +1 -1
- package/dist/hooks/mutation/use-update-conversation-tags.cjs +2 -0
- package/dist/hooks/mutation/use-update-conversation-tags.cjs.map +1 -0
- package/dist/hooks/mutation/use-update-conversation-tags.d.ts +8 -0
- package/dist/hooks/mutation/use-update-conversation-tags.js +45 -0
- package/dist/hooks/mutation/use-update-conversation-tags.js.map +1 -0
- package/dist/hooks/query/concurrency-limiter.cjs +2 -0
- package/dist/hooks/query/concurrency-limiter.cjs.map +1 -0
- package/dist/hooks/query/concurrency-limiter.d.ts +22 -0
- package/dist/hooks/query/concurrency-limiter.js +29 -0
- package/dist/hooks/query/concurrency-limiter.js.map +1 -0
- 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 +10 -0
- package/dist/hooks/query/query-keys.js +2 -2
- package/dist/hooks/query/query-keys.js.map +1 -1
- package/dist/hooks/query/use-active-conversation.cjs +1 -1
- package/dist/hooks/query/use-active-conversation.js +4 -4
- package/dist/hooks/query/use-automation-sdk-version.cjs +1 -1
- package/dist/hooks/query/use-automation-sdk-version.cjs.map +1 -1
- package/dist/hooks/query/use-automation-sdk-version.d.ts +0 -1
- package/dist/hooks/query/use-automation-sdk-version.js +30 -55
- package/dist/hooks/query/use-automation-sdk-version.js.map +1 -1
- package/dist/hooks/query/use-automations.cjs.map +1 -1
- package/dist/hooks/query/use-automations.js.map +1 -1
- 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.d.ts +1 -1
- package/dist/hooks/query/use-backends-health.js +50 -64
- package/dist/hooks/query/use-backends-health.js.map +1 -1
- package/dist/hooks/query/use-canvas-extensions.cjs +1 -0
- package/dist/hooks/query/use-canvas-extensions.d.ts +5 -0
- package/dist/hooks/query/use-canvas-extensions.js +3 -0
- package/dist/hooks/query/use-commit-changes.cjs +1 -1
- package/dist/hooks/query/use-commit-changes.js +4 -4
- package/dist/hooks/query/use-conversation-skills.cjs +1 -1
- package/dist/hooks/query/use-conversation-skills.cjs.map +1 -1
- package/dist/hooks/query/use-conversation-skills.d.ts +14 -5
- package/dist/hooks/query/use-conversation-skills.js +20 -4
- package/dist/hooks/query/use-conversation-skills.js.map +1 -1
- package/dist/hooks/query/use-latest-automation-runs.cjs +1 -1
- package/dist/hooks/query/use-latest-automation-runs.js +1 -0
- package/dist/hooks/query/use-paginated-conversations.cjs +1 -1
- package/dist/hooks/query/use-paginated-conversations.cjs.map +1 -1
- package/dist/hooks/query/use-paginated-conversations.js +19 -16
- package/dist/hooks/query/use-paginated-conversations.js.map +1 -1
- package/dist/hooks/query/use-provider-connections.cjs +1 -1
- package/dist/hooks/query/use-provider-connections.cjs.map +1 -1
- package/dist/hooks/query/use-provider-connections.d.ts +6 -3
- package/dist/hooks/query/use-provider-connections.js +7 -3
- package/dist/hooks/query/use-provider-connections.js.map +1 -1
- package/dist/hooks/query/use-search-providers.cjs +1 -1
- package/dist/hooks/query/use-search-providers.cjs.map +1 -1
- package/dist/hooks/query/use-search-providers.js +17 -10
- package/dist/hooks/query/use-search-providers.js.map +1 -1
- package/dist/hooks/query/use-sub-conversations.cjs +1 -1
- package/dist/hooks/query/use-sub-conversations.cjs.map +1 -1
- package/dist/hooks/query/use-sub-conversations.js +16 -16
- package/dist/hooks/query/use-sub-conversations.js.map +1 -1
- package/dist/hooks/query/use-unified-get-git-changes.cjs +1 -1
- package/dist/hooks/query/use-unified-get-git-changes.js +4 -4
- package/dist/hooks/query/use-unified-git-commits.cjs +1 -1
- package/dist/hooks/query/use-unified-git-commits.js +4 -4
- package/dist/hooks/query/use-unified-git-diff.cjs +1 -1
- package/dist/hooks/query/use-unified-git-diff.js +4 -4
- package/dist/hooks/query/use-unified-vscode-url.cjs +1 -1
- package/dist/hooks/query/use-unified-vscode-url.cjs.map +1 -1
- package/dist/hooks/query/use-unified-vscode-url.d.ts +1 -0
- package/dist/hooks/query/use-unified-vscode-url.js +40 -26
- package/dist/hooks/query/use-unified-vscode-url.js.map +1 -1
- package/dist/hooks/query/use-workspace-file-content.cjs +1 -1
- package/dist/hooks/query/use-workspace-file-content.js +5 -5
- package/dist/hooks/query/use-workspace-files.cjs +1 -1
- package/dist/hooks/query/use-workspace-files.js +6 -6
- package/dist/hooks/use-acp-credential-form.d.ts +6 -0
- package/dist/hooks/use-acp-model-context.cjs +1 -1
- package/dist/hooks/use-acp-model-context.js +3 -3
- package/dist/hooks/use-agent-state.cjs +1 -1
- package/dist/hooks/use-agent-state.cjs.map +1 -1
- package/dist/hooks/use-agent-state.d.ts +17 -1
- package/dist/hooks/use-agent-state.js +19 -9
- package/dist/hooks/use-agent-state.js.map +1 -1
- package/dist/hooks/use-automation-permissions.cjs +2 -0
- package/dist/hooks/use-automation-permissions.cjs.map +1 -0
- package/dist/hooks/use-automation-permissions.d.ts +43 -0
- package/dist/hooks/use-automation-permissions.js +52 -0
- package/dist/hooks/use-automation-permissions.js.map +1 -0
- package/dist/hooks/use-chat-input-model-state.cjs +1 -1
- package/dist/hooks/use-chat-input-model-state.js +3 -3
- package/dist/hooks/use-conversation-overview-git-diff-stats.cjs +1 -1
- package/dist/hooks/use-conversation-overview-git-diff-stats.js +4 -4
- 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.d.ts +3 -1
- package/dist/hooks/use-handle-plan-click.js +85 -26
- package/dist/hooks/use-handle-plan-click.js.map +1 -1
- package/dist/hooks/use-home-automation-actions.cjs +1 -1
- package/dist/hooks/use-home-automation-actions.cjs.map +1 -1
- package/dist/hooks/use-home-automation-actions.js +1 -0
- package/dist/hooks/use-home-automation-actions.js.map +1 -1
- package/dist/hooks/use-llm-configured.cjs +1 -1
- package/dist/hooks/use-llm-configured.js +3 -3
- package/dist/hooks/use-manifest-preflight.d.ts +1 -1
- package/dist/hooks/use-pinned-home-route.cjs +2 -0
- package/dist/hooks/use-pinned-home-route.cjs.map +1 -0
- package/dist/hooks/use-pinned-home-route.d.ts +33 -0
- package/dist/hooks/use-pinned-home-route.js +34 -0
- package/dist/hooks/use-pinned-home-route.js.map +1 -0
- package/dist/hooks/use-skill-enablement.cjs +2 -0
- package/dist/hooks/use-skill-enablement.cjs.map +1 -0
- package/dist/hooks/use-skill-enablement.d.ts +14 -0
- package/dist/hooks/use-skill-enablement.js +80 -0
- package/dist/hooks/use-skill-enablement.js.map +1 -0
- package/dist/hooks/use-unified-websocket-status.cjs +1 -1
- package/dist/hooks/use-unified-websocket-status.cjs.map +1 -1
- package/dist/hooks/use-unified-websocket-status.d.ts +7 -0
- package/dist/hooks/use-unified-websocket-status.js +5 -1
- package/dist/hooks/use-unified-websocket-status.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 +83 -14
- package/dist/i18n/declaration.js +1 -1
- package/dist/i18n/declaration.js.map +1 -1
- package/dist/i18n/translation.cjs +3 -3
- package/dist/i18n/translation.cjs.map +1 -1
- package/dist/i18n/translation.js +1575 -402
- package/dist/i18n/translation.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +15 -14
- package/dist/lib/index.cjs +1 -1
- package/dist/lib/index.d.ts +1 -0
- package/dist/lib/index.js +1 -0
- package/dist/locales/ar/openhands.json +94 -25
- package/dist/locales/ca/openhands.json +94 -25
- package/dist/locales/de/openhands.json +94 -25
- package/dist/locales/en/openhands.json +94 -25
- package/dist/locales/es/openhands.json +94 -25
- package/dist/locales/fr/openhands.json +94 -25
- package/dist/locales/it/openhands.json +94 -25
- package/dist/locales/ja/openhands.json +94 -25
- package/dist/locales/ko-KR/openhands.json +94 -25
- package/dist/locales/no/openhands.json +94 -25
- package/dist/locales/pt/openhands.json +94 -25
- package/dist/locales/tr/openhands.json +94 -25
- package/dist/locales/uk/openhands.json +94 -25
- package/dist/locales/zh-CN/openhands.json +94 -25
- package/dist/locales/zh-TW/openhands.json +94 -25
- package/dist/manifests/automation-insights.cjs.map +1 -1
- package/dist/manifests/automation-insights.d.ts +10 -2
- package/dist/manifests/automation-insights.js.map +1 -1
- package/dist/manifests/automation-interface.cjs +1 -1
- package/dist/manifests/automation-interface.cjs.map +1 -1
- package/dist/manifests/automation-interface.d.ts +6 -0
- package/dist/manifests/automation-interface.js +11 -8
- package/dist/manifests/automation-interface.js.map +1 -1
- package/dist/manifests/automation-setup.cjs +1 -1
- package/dist/manifests/automation-setup.cjs.map +1 -1
- package/dist/manifests/automation-setup.d.ts +9 -16
- package/dist/manifests/automation-setup.js +17 -7
- package/dist/manifests/automation-setup.js.map +1 -1
- package/dist/manifests/manifest-actions.d.ts +1 -1
- package/dist/manifests/manifest-capabilities.d.ts +3 -1
- package/dist/manifests/manifest-local-validation.cjs +2 -0
- package/dist/manifests/manifest-local-validation.cjs.map +1 -0
- package/dist/manifests/manifest-local-validation.d.ts +15 -11
- package/dist/manifests/manifest-local-validation.js +8 -0
- package/dist/manifests/manifest-local-validation.js.map +1 -0
- package/dist/manifests/manifest-template.cjs +2 -0
- package/dist/manifests/manifest-template.cjs.map +1 -0
- package/dist/manifests/manifest-template.d.ts +4 -4
- package/dist/manifests/manifest-template.js +12 -0
- package/dist/manifests/manifest-template.js.map +1 -0
- package/dist/manifests/manifest-validation.cjs +1 -1
- package/dist/manifests/manifest-validation.cjs.map +1 -1
- package/dist/manifests/manifest-validation.js +106 -28
- package/dist/manifests/manifest-validation.js.map +1 -1
- package/dist/manifests/types.cjs.map +1 -1
- package/dist/manifests/types.d.ts +39 -4
- package/dist/manifests/types.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/bundle-index.cjs +45 -4
- package/dist/node_modules/@openhands/extensions/automations/bundle-index.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/bundle-index.js +1 -1
- package/dist/node_modules/@openhands/extensions/automations/bundle-index.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/custom-automation/manifest.cjs +8 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/custom-automation/manifest.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/custom-automation/manifest.js +221 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/custom-automation/manifest.js.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-agents-md-maintainer/manifest.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-agents-md-maintainer/manifest.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-agents-md-maintainer/manifest.js +5 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-agents-md-maintainer/manifest.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.cjs +2 -2
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.js +6 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.cjs +2 -2
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.js +6 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-repo-monitor/manifest.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-repo-monitor/manifest.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-repo-monitor/manifest.js +5 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-repo-monitor/manifest.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-bitbucket-pr/manifest.cjs +9 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-bitbucket-pr/manifest.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-bitbucket-pr/manifest.js +21 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-bitbucket-pr/manifest.js.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-gitlab-mr/manifest.cjs +9 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-gitlab-mr/manifest.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-gitlab-mr/manifest.js +21 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-gitlab-mr/manifest.js.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/linear-issue-to-bitbucket-pr/manifest.cjs +9 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/linear-issue-to-bitbucket-pr/manifest.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/linear-issue-to-bitbucket-pr/manifest.js +21 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/linear-issue-to-bitbucket-pr/manifest.js.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/linear-issue-to-github-pr/manifest.cjs +9 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/linear-issue-to-github-pr/manifest.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/linear-issue-to-github-pr/manifest.js +21 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/linear-issue-to-github-pr/manifest.js.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/linear-issue-to-gitlab-mr/manifest.cjs +9 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/linear-issue-to-gitlab-mr/manifest.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/linear-issue-to-gitlab-mr/manifest.js +21 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/linear-issue-to-gitlab-mr/manifest.js.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/news-digest/manifest.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/news-digest/manifest.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/news-digest/manifest.js +5 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/news-digest/manifest.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/qa-changes/manifest.cjs +30 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/qa-changes/manifest.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/qa-changes/manifest.js +65 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/qa-changes/manifest.js.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog-index.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog-index.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog-index.js +28 -14
- package/dist/node_modules/@openhands/extensions/automations/catalog-index.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/interface.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/automations/interface.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/interface.js +2 -1
- package/dist/node_modules/@openhands/extensions/automations/interface.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 +2 -2
- package/dist/node_modules/@openhands/extensions/integrations/catalog/datadog.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/gitlab.cjs +2 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/gitlab.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/gitlab.js +59 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/gitlab.js.map +1 -0
- 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 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/notion.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 +74 -72
- package/dist/node_modules/@openhands/extensions/integrations/catalog-index.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/skills/index.cjs +42 -3
- package/dist/node_modules/@openhands/extensions/skills/index.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/skills/index.js +22 -3
- package/dist/node_modules/@openhands/extensions/skills/index.js.map +1 -1
- 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 +1 -1
- 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 +8 -7
- 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 +2 -2
- package/dist/node_modules/@tanstack/react-query/build/modern/QueryClientProvider.cjs +1 -1
- package/dist/node_modules/@tanstack/react-query/build/modern/QueryClientProvider.js +1 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/blocks.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/blocks.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/blocks.js +16 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/blocks.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-question-mark.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-question-mark.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-question-mark.js +21 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-question-mark.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/panels-top-left.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/panels-top-left.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/panels-top-left.js +23 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/panels-top-left.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/shrink.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/shrink.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/shrink.js +23 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/shrink.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/sliders-horizontal.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/sliders-horizontal.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/sliders-horizontal.js +43 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/sliders-horizontal.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/tags.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/tags.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/tags.js +22 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/tags.js.map +1 -0
- package/dist/package.cjs +1 -1
- package/dist/package.cjs.map +1 -1
- package/dist/package.js +5 -5
- package/dist/package.js.map +1 -1
- package/dist/routes/agent-settings.d.ts +12 -0
- package/dist/routes/app-settings.cjs +1 -1
- package/dist/routes/app-settings.cjs.map +1 -1
- package/dist/routes/app-settings.js +11 -11
- package/dist/routes/files-tab.cjs +1 -1
- package/dist/routes/files-tab.cjs.map +1 -1
- package/dist/routes/files-tab.js +14 -14
- package/dist/routes/files-tab.js.map +1 -1
- package/dist/routes/llm-settings.cjs +1 -1
- package/dist/routes/llm-settings.cjs.map +1 -1
- package/dist/routes/llm-settings.d.ts +3 -1
- package/dist/routes/llm-settings.js +100 -91
- package/dist/routes/llm-settings.js.map +1 -1
- package/dist/routes/planner-tab.cjs +1 -1
- package/dist/routes/planner-tab.cjs.map +1 -1
- package/dist/routes/planner-tab.js +44 -28
- package/dist/routes/planner-tab.js.map +1 -1
- package/dist/services/canvas-ui.cjs +1 -1
- package/dist/services/canvas-ui.cjs.map +1 -1
- package/dist/services/canvas-ui.d.ts +5 -0
- package/dist/services/canvas-ui.js +24 -10
- package/dist/services/canvas-ui.js.map +1 -1
- package/dist/services/settings.cjs +1 -1
- package/dist/services/settings.cjs.map +1 -1
- package/dist/services/settings.js +3 -2
- package/dist/services/settings.js.map +1 -1
- package/dist/services/telemetry.cjs +1 -1
- package/dist/services/telemetry.cjs.map +1 -1
- package/dist/services/telemetry.d.ts +5 -0
- package/dist/services/telemetry.js +122 -115
- package/dist/services/telemetry.js.map +1 -1
- 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.d.ts +32 -5
- package/dist/stores/conversation-panel-preferences-store.js +29 -12
- package/dist/stores/conversation-panel-preferences-store.js.map +1 -1
- package/dist/stores/conversation-state-store.cjs +1 -1
- package/dist/stores/conversation-state-store.cjs.map +1 -1
- package/dist/stores/conversation-state-store.d.ts +9 -3
- package/dist/stores/conversation-state-store.js +6 -3
- package/dist/stores/conversation-state-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 +2 -0
- package/dist/stores/conversation-store.js +3 -0
- package/dist/stores/conversation-store.js.map +1 -1
- package/dist/stores/model-store.cjs +1 -1
- package/dist/stores/model-store.cjs.map +1 -1
- package/dist/stores/model-store.d.ts +7 -0
- package/dist/stores/model-store.js +4 -0
- package/dist/stores/model-store.js.map +1 -1
- package/dist/types/automation.cjs.map +1 -1
- package/dist/types/automation.d.ts +66 -1
- package/dist/types/automation.js.map +1 -1
- package/dist/types/canvas-extension.cjs +2 -0
- package/dist/types/canvas-extension.cjs.map +1 -0
- package/dist/types/canvas-extension.d.ts +77 -0
- package/dist/types/canvas-extension.js +6 -0
- package/dist/types/canvas-extension.js.map +1 -0
- package/dist/types/settings.d.ts +7 -0
- package/dist/ui/context-menu.d.ts +1 -1
- package/dist/ui/help-link.cjs +1 -1
- package/dist/ui/help-link.cjs.map +1 -1
- package/dist/ui/help-link.d.ts +6 -1
- package/dist/ui/help-link.js +32 -18
- package/dist/ui/help-link.js.map +1 -1
- package/dist/ui/toggle-switch.cjs +1 -1
- package/dist/ui/toggle-switch.cjs.map +1 -1
- package/dist/ui/toggle-switch.d.ts +4 -1
- package/dist/ui/toggle-switch.js +4 -3
- package/dist/ui/toggle-switch.js.map +1 -1
- package/dist/utils/acp-auth-display.d.ts +35 -0
- package/dist/utils/automation-catalog.cjs +1 -1
- package/dist/utils/automation-catalog.cjs.map +1 -1
- package/dist/utils/automation-catalog.d.ts +12 -1
- package/dist/utils/automation-catalog.js +42 -12
- package/dist/utils/automation-catalog.js.map +1 -1
- package/dist/utils/automation-run-display.cjs +2 -0
- package/dist/utils/automation-run-display.cjs.map +1 -0
- package/dist/utils/automation-run-display.d.ts +20 -0
- package/dist/utils/automation-run-display.js +85 -0
- package/dist/utils/automation-run-display.js.map +1 -0
- package/dist/utils/automation-schedule.cjs +1 -1
- package/dist/utils/automation-schedule.cjs.map +1 -1
- package/dist/utils/automation-schedule.d.ts +16 -0
- package/dist/utils/automation-schedule.js +2 -0
- package/dist/utils/automation-schedule.js.map +1 -1
- package/dist/utils/cache-utils.cjs +1 -1
- package/dist/utils/cache-utils.js +5 -5
- package/dist/utils/constants.cjs +1 -1
- package/dist/utils/constants.cjs.map +1 -1
- package/dist/utils/constants.d.ts +4 -0
- package/dist/utils/constants.js +23 -3
- package/dist/utils/constants.js.map +1 -1
- package/dist/utils/format-event-timestamp.cjs +2 -0
- package/dist/utils/format-event-timestamp.cjs.map +1 -0
- package/dist/utils/format-event-timestamp.d.ts +1 -0
- package/dist/utils/format-event-timestamp.js +13 -0
- package/dist/utils/format-event-timestamp.js.map +1 -0
- package/dist/utils/format-model-name.cjs +1 -1
- package/dist/utils/format-model-name.cjs.map +1 -1
- package/dist/utils/format-model-name.d.ts +7 -3
- package/dist/utils/format-model-name.js +6 -11
- package/dist/utils/format-model-name.js.map +1 -1
- package/dist/utils/format-relative-time.cjs +1 -1
- package/dist/utils/format-relative-time.cjs.map +1 -1
- package/dist/utils/format-relative-time.d.ts +7 -0
- package/dist/utils/format-relative-time.js +7 -2
- package/dist/utils/format-relative-time.js.map +1 -1
- package/dist/utils/git-diff-stats.cjs +2 -2
- package/dist/utils/git-diff-stats.cjs.map +1 -1
- package/dist/utils/git-diff-stats.d.ts +4 -0
- package/dist/utils/git-diff-stats.js +12 -2
- package/dist/utils/git-diff-stats.js.map +1 -1
- package/dist/utils/path-utils.cjs +1 -1
- package/dist/utils/path-utils.cjs.map +1 -1
- package/dist/utils/path-utils.d.ts +15 -3
- package/dist/utils/path-utils.js +29 -3
- package/dist/utils/path-utils.js.map +1 -1
- package/dist/utils/plan-file.cjs +4 -0
- package/dist/utils/plan-file.cjs.map +1 -0
- package/dist/utils/plan-file.d.ts +18 -0
- package/dist/utils/plan-file.js +58 -0
- package/dist/utils/plan-file.js.map +1 -0
- package/dist/utils/recommended-automation-rail.cjs +1 -1
- package/dist/utils/recommended-automation-rail.cjs.map +1 -1
- package/dist/utils/recommended-automation-rail.js +1 -0
- package/dist/utils/recommended-automation-rail.js.map +1 -1
- package/dist/utils/scroll-fade-state.cjs +1 -1
- package/dist/utils/scroll-fade-state.cjs.map +1 -1
- package/dist/utils/scroll-fade-state.d.ts +6 -0
- package/dist/utils/scroll-fade-state.js +8 -1
- package/dist/utils/scroll-fade-state.js.map +1 -1
- package/dist/utils/sdk-settings-schema.cjs +1 -1
- package/dist/utils/sdk-settings-schema.cjs.map +1 -1
- package/dist/utils/sdk-settings-schema.d.ts +1 -0
- package/dist/utils/sdk-settings-schema.js +25 -22
- package/dist/utils/sdk-settings-schema.js.map +1 -1
- package/dist/utils/skill-enablement.cjs +2 -0
- package/dist/utils/skill-enablement.cjs.map +1 -0
- package/dist/utils/skill-enablement.d.ts +51 -0
- package/dist/utils/skill-enablement.js +31 -0
- package/dist/utils/skill-enablement.js.map +1 -0
- package/dist/utils/utils.cjs +1 -1
- package/dist/utils/utils.cjs.map +1 -1
- package/dist/utils/utils.js +11 -11
- package/dist/utils/utils.js.map +1 -1
- package/dist/utils/vscode-origin.cjs +2 -0
- package/dist/utils/vscode-origin.cjs.map +1 -0
- package/dist/utils/vscode-origin.d.ts +55 -0
- package/dist/utils/vscode-origin.js +27 -0
- package/dist/utils/vscode-origin.js.map +1 -0
- package/dist/utils/workspace-mode.d.ts +4 -0
- package/package.json +5 -5
- package/scripts/check-sdk-version-sync.mjs +6 -6
- package/scripts/check-translation-completeness.cjs +1 -0
- package/scripts/dev-extra-backend.mjs +28 -9
- package/scripts/dev-safe.mjs +81 -8
- package/scripts/dev-static.mjs +35 -37
- package/scripts/dev-with-automation.mjs +83 -2
- package/scripts/ingress.mjs +27 -1
- package/scripts/static-server.mjs +107 -2
- package/tools/canvas_ui_tool.py +19 -0
- package/build/assets/active-backend-context-DKFSMbn3.js +0 -2
- package/build/assets/agent-profiles-settings-D4cY5U2T.js +0 -1
- package/build/assets/agent-server-conversation-service.api-DozDKIW_.js +0 -86
- package/build/assets/agent-settings-351vXWc9.js +0 -2
- package/build/assets/agent-settings-Ce7BDZ6I.js +0 -1
- package/build/assets/alert-banner-Kyy1YWZU.js +0 -1
- package/build/assets/api-key-entry-screen-INIxqAMs.js +0 -1
- package/build/assets/automation-detail-DXDhUwPq.js +0 -3
- package/build/assets/automation-git-sync-CzyS4cn1.js +0 -1
- package/build/assets/automation-setup-route-FRr05f_g.js +0 -1
- package/build/assets/automations-list-CERuQWE6.js +0 -1
- package/build/assets/backend-form-modal-DK78-jn1.js +0 -1
- package/build/assets/bot-C-0Wu7vQ.js +0 -1
- package/build/assets/browser-11etCQ04.js +0 -7
- package/build/assets/check-Cf2YoT90.js +0 -1
- package/build/assets/chevron-down-C3OQ-ehx.js +0 -1
- package/build/assets/chevron-right-CN1uUiJ1.js +0 -1
- package/build/assets/circle-check-g5yeGMd-.js +0 -1
- package/build/assets/command-menu-BZQ8S3Ke.js +0 -1
- package/build/assets/commits-tab-DZtJgaDM.js +0 -1
- package/build/assets/confirmation-modal-Bk4JRcCM.js +0 -1
- package/build/assets/conversation-CchMzpGl.js +0 -1
- package/build/assets/conversation-Dpzftz57.js +0 -93
- package/build/assets/conversation-panel-CchMzpGl.js +0 -1
- package/build/assets/conversation-state-store-a9d2fxRc.js +0 -1
- package/build/assets/edit-automation-modal-D-urtv8n.js +0 -1
- package/build/assets/empty-state-CvaVahVr.js +0 -1
- package/build/assets/enum-filter-dropdown-DliX_Lo0.js +0 -1
- package/build/assets/extensions-hub-CFduxBnk.js +0 -1
- package/build/assets/extensions-navigation-BeC224yX.js +0 -1
- package/build/assets/external-link-DFpYunfj.js +0 -1
- package/build/assets/files-tab-CL3J9b3p.js +0 -1
- package/build/assets/format-model-name-BNPKVsIq.js +0 -1
- package/build/assets/get-git-path-DlAJa_i6.js +0 -1
- package/build/assets/git-repo-dropdown-DGMEhz7d.js +0 -1
- package/build/assets/home-BCGlNJCA.js +0 -1
- package/build/assets/home-DB1pRqTC.js +0 -1
- package/build/assets/home-automation-run-tooltip-CooFQRIG.js +0 -1
- package/build/assets/home-store-Dl1dPE58.js +0 -1
- package/build/assets/index-home-DB1pRqTC.js +0 -1
- package/build/assets/info-uYSVzX86.js +0 -1
- package/build/assets/install-server-modal-BbJdhzet.js +0 -1
- package/build/assets/kebab-menu-item-content-BYokkRHi.js +0 -1
- package/build/assets/list-filter-OFkpRrmi.js +0 -1
- package/build/assets/llm-not-configured-banner-BqqYnJ1t.js +0 -27
- package/build/assets/llm-settings-CnDbbmVW.js +0 -1
- package/build/assets/llm-settings-S8Yjg__1.js +0 -1
- package/build/assets/llm-subscription-service-BpPfzW4x.js +0 -1
- package/build/assets/loader-circle-nvrwthvj.js +0 -1
- package/build/assets/manage-backends-modal-BCUPswyl.js +0 -1
- package/build/assets/manifest-58597dde.js +0 -1
- package/build/assets/markdown-renderer-Cb2sBWtV.js +0 -8
- package/build/assets/mcp-page-Bm4K2NQq.js +0 -9
- package/build/assets/messages-BTN5thLe.js +0 -40
- package/build/assets/onboarding-Cx_kaiD1.js +0 -1
- package/build/assets/onboarding-modal-vMwn7ihv.js +0 -1
- package/build/assets/organization-service.api-C8XpQ0pM.js +0 -1
- package/build/assets/pencil-Clh1Wjvh.js +0 -1
- package/build/assets/planner-tab-DQvDU3ap.js +0 -1
- package/build/assets/plug-BuQhHSSG.js +0 -1
- package/build/assets/plugins-management-service-BjYeF0b0.js +0 -1
- package/build/assets/plus-CEKne-Yp.js +0 -1
- package/build/assets/profiles-service.api-QB-T_u-g.js +0 -1
- package/build/assets/providers-FfSZ5TXP.js +0 -1
- package/build/assets/proxy-tcFL2yTQ.js +0 -1
- package/build/assets/recommended-automations-launcher-Bw8uC4V6.js +0 -1
- package/build/assets/refresh-cw-Bh69DyYO.js +0 -1
- package/build/assets/root-BLeQfBEq.css +0 -1
- package/build/assets/root-ZKKYPR1Z.js +0 -2
- package/build/assets/root-layout-luJoE9IG.js +0 -2
- package/build/assets/schema-field-Csw5fhtN.js +0 -1
- package/build/assets/scroll-fade-state-Dw-i4SGq.js +0 -1
- package/build/assets/sdk-section-page-HTffvm7Q.js +0 -1
- package/build/assets/secret-form-HTUbYw5o.js +0 -1
- package/build/assets/secrets-service-BTor9uAU.js +0 -1
- package/build/assets/settings-BlmrkwRi.js +0 -1
- package/build/assets/settings-DcNPxz0v.js +0 -1
- package/build/assets/settings-index-CKq0b0Vg.js +0 -1
- package/build/assets/settings-service.api-B2agVfjL.js +0 -1
- package/build/assets/shared-conversation-B55pCyBG.js +0 -1
- package/build/assets/shield-check-CFDViW82.js +0 -1
- package/build/assets/sidebar-mobile-menu-toggle-BOtyJHwE.js +0 -1
- package/build/assets/sidebar-nav-link-CPzhyHQg.js +0 -1
- package/build/assets/sidebar-store-DtpU7zaI.js +0 -1
- package/build/assets/skill-filter-CWZ5kjcg.js +0 -2
- package/build/assets/skill-scope-CV1dkAbW.js +0 -1
- package/build/assets/skills-plugins-DGHULTq6.js +0 -1
- package/build/assets/skills-settings-CM1lFv3e.js +0 -1
- package/build/assets/styled-tooltip-Dl06rkpY.js +0 -1
- package/build/assets/toggle-switch-Fd_QGz0r.js +0 -1
- package/build/assets/trash-2-Dl8_RGz0.js +0 -1
- package/build/assets/trash-_RMt7Ayc.js +0 -1
- package/build/assets/triangle-alert-SM-q4NU_.js +0 -1
- package/build/assets/usage-tab-BcfWV6db.js +0 -1
- package/build/assets/use-acp-credential-form-BsSW5NHG.js +0 -1
- package/build/assets/use-activate-agent-profile-B2NS8nA5.js +0 -1
- package/build/assets/use-agent-profiles-DWBPC0Si.js +0 -1
- package/build/assets/use-config-Bft35DOK.js +0 -1
- package/build/assets/use-create-conversation-DwN5vv2f.js +0 -1
- package/build/assets/use-create-secret-BSxJMxHp.js +0 -1
- package/build/assets/use-has-permission-B3C8rQmR.js +0 -1
- package/build/assets/use-is-authed-CFGkY3-Z.js +0 -1
- package/build/assets/use-llm-configured-BI6obxsc.js +0 -1
- package/build/assets/use-llm-profiles-djGAhTWL.js +0 -1
- package/build/assets/use-manifest-capabilities-3z0-1G59.js +0 -1
- package/build/assets/use-onboarding-completion-BXpyUSsJ.js +0 -1
- package/build/assets/use-plugins-marketplace-DI4_pK56.js +0 -1
- package/build/assets/use-save-agent-profile-DdBSTdpN.js +0 -1
- package/build/assets/use-settings-C5VhGpqd.js +0 -1
- package/build/assets/use-settings-nav-items-DHaUu1Dg.js +0 -16
- package/build/assets/use-tracking-D5t9otIF.js +0 -3
- package/build/assets/utils-DaCIEEQP.js +0 -1
- package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~kepq2zme-ZixYGy6E.js +0 -186
- package/build/assets/vendor~index-home~home~conversation-panel~conversation~alert-banner-B3qC_oj8.js +0 -1
- package/build/assets/vendor~root-layout-BlUaZ18v.js +0 -1
- package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~mcp~automations-list~aut~ibfbmr9f-B2OLKL7N.js +0 -1
- package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~iw7io29p-Dz-MAyNb.js +0 -1
- package/build/assets/x-DkgltWa0.js +0 -1
- package/dist/components/features/conversation-panel/conversation-panel-filter-menu.cjs +0 -2
- package/dist/components/features/conversation-panel/conversation-panel-filter-menu.cjs.map +0 -1
- package/dist/components/features/conversation-panel/conversation-panel-filter-menu.d.ts +0 -35
- package/dist/components/features/conversation-panel/conversation-panel-filter-menu.js +0 -247
- package/dist/components/features/conversation-panel/conversation-panel-filter-menu.js.map +0 -1
- package/dist/components/features/tips/random-tip.d.ts +0 -2
- package/dist/hooks/query/use-skills.cjs +0 -2
- package/dist/hooks/query/use-skills.cjs.map +0 -1
- package/dist/hooks/query/use-skills.d.ts +0 -7
- package/dist/hooks/query/use-skills.js +0 -13
- package/dist/hooks/query/use-skills.js.map +0 -1
- package/dist/hooks/use-has-permission.cjs +0 -2
- package/dist/hooks/use-has-permission.cjs.map +0 -1
- package/dist/hooks/use-has-permission.d.ts +0 -1
- package/dist/hooks/use-has-permission.js +0 -8
- package/dist/hooks/use-has-permission.js.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/eye.cjs +0 -2
- package/dist/node_modules/lucide-react/dist/esm/icons/eye.cjs.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/eye.js +0 -14
- package/dist/node_modules/lucide-react/dist/esm/icons/eye.js.map +0 -1
- package/dist/utils/tips.d.ts +0 -7
- package/dist/utils/workspace-relative-path.cjs +0 -2
- package/dist/utils/workspace-relative-path.cjs.map +0 -1
- package/dist/utils/workspace-relative-path.d.ts +0 -10
- package/dist/utils/workspace-relative-path.js +0 -22
- package/dist/utils/workspace-relative-path.js.map +0 -1
- /package/build/assets/{vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~ox0jfsa0-cHFhpUBq.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~i58xkef6-cHFhpUBq.js} +0 -0
|
@@ -6,14 +6,14 @@ import { getActiveBackend as r, getEffectiveLocalBackend as i, isNoBackend as a
|
|
|
6
6
|
import { getAgentServerClientOptions as o } from "./agent-server-client-options.js";
|
|
7
7
|
import s from "../config/defaults.js";
|
|
8
8
|
//#region src/api/agent-server-compatibility.ts
|
|
9
|
-
var c = 5e3, l = "unknown", u = s.compatibility.minimumAgentServer, d = "AGENT_SERVER_UNSUPPORTED_VERSION", f = "AGENT_SERVER_UNKNOWN_VERSION", p =
|
|
9
|
+
var c = 5e3, l = "unknown", u = s.compatibility.minimumAgentServer, d = "AGENT_SERVER_UNSUPPORTED_VERSION", f = "AGENT_SERVER_UNKNOWN_VERSION", p = "Invalid API key", m = null, h = null, g = (e) => Array.isArray(e?.usable_tools) ? e.usable_tools : null, _ = class extends Error {
|
|
10
10
|
details;
|
|
11
11
|
noBackendConfigured;
|
|
12
12
|
constructor(e, t) {
|
|
13
13
|
let n = t?.noBackendConfigured ?? !1;
|
|
14
14
|
super(n ? "No agent server backend is configured yet. Add a backend to get started." : "Could not connect to the configured agent server. Make sure it is running and reachable, then reload the page."), this.name = "AgentServerUnavailableError", this.details = e ?? null, this.noBackendConfigured = n;
|
|
15
15
|
}
|
|
16
|
-
},
|
|
16
|
+
}, v = (e) => e instanceof _ || typeof e == "object" && !!e && "name" in e && (e.name === "AgentServerUnavailableError" || e.name === "AgentServerUnsupportedVersionError" || e.name === "AgentServerUnknownVersionError"), y = class extends _ {
|
|
17
17
|
code = d;
|
|
18
18
|
actualVersion;
|
|
19
19
|
requiredVersion = u;
|
|
@@ -21,7 +21,7 @@ var c = 5e3, l = "unknown", u = s.compatibility.minimumAgentServer, d = "AGENT_S
|
|
|
21
21
|
let t = `Agent Canvas requires agent-server ${u} or newer; this backend is running ${e}. Please upgrade the agent-server backend.`;
|
|
22
22
|
super(t), this.name = "AgentServerUnsupportedVersionError", this.message = t, this.actualVersion = e;
|
|
23
23
|
}
|
|
24
|
-
},
|
|
24
|
+
}, b = class extends _ {
|
|
25
25
|
code = f;
|
|
26
26
|
actualVersion;
|
|
27
27
|
requiredVersion = u;
|
|
@@ -29,45 +29,45 @@ var c = 5e3, l = "unknown", u = s.compatibility.minimumAgentServer, d = "AGENT_S
|
|
|
29
29
|
let t = `Could not determine this backend's agent-server version.${e ? ` It reported "${e}".` : ""} Agent Canvas requires agent-server ${u} or newer, but this backend did not return a valid version from /server_info. Restart or rebuild the agent-server backend, then try again.`;
|
|
30
30
|
super(t), this.name = "AgentServerUnknownVersionError", this.message = t, this.actualVersion = e;
|
|
31
31
|
}
|
|
32
|
-
},
|
|
33
|
-
function
|
|
34
|
-
|
|
35
|
-
}
|
|
36
|
-
function S(e) {
|
|
37
|
-
return e?.host && e.host !== m ? null : p;
|
|
32
|
+
}, x = (e) => n() && E(e, 401);
|
|
33
|
+
function S() {
|
|
34
|
+
m = null, h = null;
|
|
38
35
|
}
|
|
39
36
|
function C(e) {
|
|
40
|
-
|
|
41
|
-
return Array.isArray(t) ? t.includes(e) : !0;
|
|
37
|
+
return e?.host && e.host !== h ? null : m;
|
|
42
38
|
}
|
|
43
39
|
function w(e) {
|
|
40
|
+
let t = g(m);
|
|
41
|
+
return Array.isArray(t) ? t.includes(e) : !0;
|
|
42
|
+
}
|
|
43
|
+
function T(e) {
|
|
44
44
|
return e instanceof Error && e.name === "HttpError" && "status" in e && typeof e.status == "number";
|
|
45
45
|
}
|
|
46
|
-
function
|
|
47
|
-
return
|
|
48
|
-
}
|
|
49
|
-
function E(e) {
|
|
50
|
-
return typeof e == "string" && e.trim() || null;
|
|
46
|
+
function E(e, t) {
|
|
47
|
+
return T(e) && e.status === t;
|
|
51
48
|
}
|
|
52
49
|
function D(e) {
|
|
53
|
-
return
|
|
50
|
+
return typeof e == "string" && e.trim() || null;
|
|
54
51
|
}
|
|
55
52
|
function O(e) {
|
|
56
|
-
return
|
|
53
|
+
return D(e.sdk_version);
|
|
57
54
|
}
|
|
58
55
|
function k(e) {
|
|
59
|
-
|
|
60
|
-
return !t || t.toLowerCase() === l ? null : t;
|
|
56
|
+
return D(e.version) ?? O(e);
|
|
61
57
|
}
|
|
62
58
|
function A(e) {
|
|
63
59
|
let t = k(e);
|
|
64
|
-
return !t ||
|
|
60
|
+
return !t || t.toLowerCase() === l ? null : t;
|
|
65
61
|
}
|
|
66
62
|
function j(e) {
|
|
67
|
-
|
|
63
|
+
let t = A(e);
|
|
64
|
+
return !t || !P(t) ? null : t;
|
|
68
65
|
}
|
|
69
|
-
function M(e
|
|
70
|
-
|
|
66
|
+
function M(e) {
|
|
67
|
+
return !m || e && i()?.host !== e ? null : j(m);
|
|
68
|
+
}
|
|
69
|
+
function N(e, t) {
|
|
70
|
+
let n = P(e), r = P(t);
|
|
71
71
|
if (!n || !r) return null;
|
|
72
72
|
for (let e of [
|
|
73
73
|
"major",
|
|
@@ -79,7 +79,7 @@ function M(e, t) {
|
|
|
79
79
|
}
|
|
80
80
|
return n.prerelease && !r.prerelease ? -1 : !n.prerelease && r.prerelease ? 1 : n.prerelease && r.prerelease ? n.prerelease.localeCompare(r.prerelease) : 0;
|
|
81
81
|
}
|
|
82
|
-
function
|
|
82
|
+
function P(e) {
|
|
83
83
|
let [t] = e.trim().replace(/^v/, "").split("+"), [n, r] = t.split("-", 2), i = n.split(".");
|
|
84
84
|
if (i.length !== 3) return null;
|
|
85
85
|
let [a, o, s] = i.map((e) => Number(e));
|
|
@@ -94,17 +94,31 @@ function N(e) {
|
|
|
94
94
|
prerelease: r
|
|
95
95
|
} : null;
|
|
96
96
|
}
|
|
97
|
-
function
|
|
98
|
-
let t =
|
|
99
|
-
if (!t) throw
|
|
100
|
-
let n =
|
|
101
|
-
if (n === null) throw
|
|
102
|
-
if (n < 0) throw
|
|
97
|
+
function F(e) {
|
|
98
|
+
let t = A(e);
|
|
99
|
+
if (!t) throw S(), new b(k(e));
|
|
100
|
+
let n = N(t, u);
|
|
101
|
+
if (n === null) throw S(), new b(t);
|
|
102
|
+
if (n < 0) throw S(), new y(t);
|
|
103
|
+
}
|
|
104
|
+
async function I(n, r) {
|
|
105
|
+
let i = o({
|
|
106
|
+
host: n.host,
|
|
107
|
+
sessionApiKey: n.apiKey || null,
|
|
108
|
+
timeout: r
|
|
109
|
+
});
|
|
110
|
+
try {
|
|
111
|
+
await new t(i).getSettings();
|
|
112
|
+
let n = await new e(i).getServerInfo();
|
|
113
|
+
return F(n), j(n);
|
|
114
|
+
} catch (e) {
|
|
115
|
+
throw E(e, 401) ? Error(p) : e;
|
|
116
|
+
}
|
|
103
117
|
}
|
|
104
|
-
async function
|
|
118
|
+
async function L() {
|
|
105
119
|
let s = i();
|
|
106
120
|
if (!s) {
|
|
107
|
-
if (
|
|
121
|
+
if (S(), a(r().backend)) throw new _("No backend configured", { noBackendConfigured: !0 });
|
|
108
122
|
return null;
|
|
109
123
|
}
|
|
110
124
|
let l = o({
|
|
@@ -115,17 +129,17 @@ async function F() {
|
|
|
115
129
|
try {
|
|
116
130
|
u = await new e(l).getServerInfo();
|
|
117
131
|
} catch (e) {
|
|
118
|
-
throw
|
|
132
|
+
throw S(), E(e, 401) ? e : new _(e instanceof Error ? e.message : null);
|
|
119
133
|
}
|
|
120
|
-
if (
|
|
134
|
+
if (F(u), n()) try {
|
|
121
135
|
await new t(l).getSettings();
|
|
122
136
|
} catch (e) {
|
|
123
|
-
if (
|
|
137
|
+
if (E(e, 401)) throw e;
|
|
124
138
|
console.warn("[agent-server] getSettings() probe failed (non-401):", e);
|
|
125
139
|
}
|
|
126
|
-
return
|
|
140
|
+
return m = u, h = l.host, u;
|
|
127
141
|
}
|
|
128
142
|
//#endregion
|
|
129
|
-
export {
|
|
143
|
+
export { p as INVALID_BACKEND_API_KEY_ERROR, S as clearCachedAgentServerInfo, N as compareAgentServerVersions, C as getCachedAgentServerInfo, M as getCachedAgentServerVersion, j as getDisplayAgentServerVersion, x as isAgentServerAuthError, w as isAgentServerToolAvailable, v as isAgentServerUnavailableError, E as isSdkHttpStatusError, L as loadAgentServerInfo, I as validateLocalBackend };
|
|
130
144
|
|
|
131
145
|
//# sourceMappingURL=agent-server-compatibility.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-server-compatibility.js","names":[],"sources":["../../src/api/agent-server-compatibility.ts"],"sourcesContent":["import {\n ServerClient,\n SettingsClient,\n} from \"@openhands/typescript-client/clients\";\nimport type { ServerInfo as BaseServerInfo } from \"@openhands/typescript-client\";\nimport { getAgentServerClientOptions } from \"#/api/agent-server-client-options\";\nimport { isAuthRequired } from \"#/api/agent-server-config\";\nimport {\n getActiveBackend,\n getEffectiveLocalBackend,\n isNoBackend,\n} from \"#/api/backend-registry/active-store\";\nimport defaults from \"../../config/defaults.json\";\n\nconst AGENT_SERVER_INFO_TIMEOUT_MS = 5000;\nconst UNKNOWN_AGENT_SERVER_VERSION = \"unknown\";\n\nexport const MINIMUM_COMPATIBLE_AGENT_SERVER_VERSION =\n defaults.compatibility.minimumAgentServer;\nexport const AGENT_SERVER_UNSUPPORTED_VERSION_ERROR_CODE =\n \"AGENT_SERVER_UNSUPPORTED_VERSION\";\nexport const AGENT_SERVER_UNKNOWN_VERSION_ERROR_CODE =\n \"AGENT_SERVER_UNKNOWN_VERSION\";\n\nexport interface AgentServerInfo extends BaseServerInfo {\n sdk_version?: string;\n usable_tools?: string[] | null;\n runtime_services?: unknown;\n}\n\nlet cachedAgentServerInfo: AgentServerInfo | null = null;\nlet cachedAgentServerInfoHost: string | null = null;\n\nconst getAdvertisedTools = (serverInfo: AgentServerInfo | null) => {\n if (Array.isArray(serverInfo?.usable_tools)) {\n return serverInfo.usable_tools;\n }\n return null;\n};\n\nexport class AgentServerUnavailableError extends Error {\n readonly details: string | null;\n readonly noBackendConfigured: boolean;\n\n constructor(\n details?: string | null,\n options?: { noBackendConfigured?: boolean },\n ) {\n const noBackendConfigured = options?.noBackendConfigured ?? false;\n super(\n noBackendConfigured\n ? \"No agent server backend is configured yet. Add a backend to get started.\"\n : \"Could not connect to the configured agent server. Make sure it is running and reachable, then reload the page.\",\n );\n this.name = \"AgentServerUnavailableError\";\n this.details = details ?? null;\n this.noBackendConfigured = noBackendConfigured;\n }\n}\n\nexport const isAgentServerUnavailableError = (\n error: unknown,\n): error is AgentServerUnavailableError =>\n error instanceof AgentServerUnavailableError ||\n (typeof error === \"object\" &&\n error !== null &&\n \"name\" in error &&\n (error.name === \"AgentServerUnavailableError\" ||\n error.name === \"AgentServerUnsupportedVersionError\" ||\n error.name === \"AgentServerUnknownVersionError\"));\n\nexport class AgentServerUnsupportedVersionError extends AgentServerUnavailableError {\n readonly code = AGENT_SERVER_UNSUPPORTED_VERSION_ERROR_CODE;\n readonly actualVersion: string;\n readonly requiredVersion = MINIMUM_COMPATIBLE_AGENT_SERVER_VERSION;\n\n constructor(actualVersion: string) {\n const message = `Agent Canvas requires agent-server ${MINIMUM_COMPATIBLE_AGENT_SERVER_VERSION} or newer; this backend is running ${actualVersion}. Please upgrade the agent-server backend.`;\n super(message);\n this.name = \"AgentServerUnsupportedVersionError\";\n this.message = message;\n this.actualVersion = actualVersion;\n }\n}\n\nexport class AgentServerUnknownVersionError extends AgentServerUnavailableError {\n readonly code = AGENT_SERVER_UNKNOWN_VERSION_ERROR_CODE;\n readonly actualVersion: string | null;\n readonly requiredVersion = MINIMUM_COMPATIBLE_AGENT_SERVER_VERSION;\n\n constructor(actualVersion: string | null) {\n const reported = actualVersion ? ` It reported \"${actualVersion}\".` : \"\";\n const message =\n `Could not determine this backend's agent-server version.${reported} ` +\n `Agent Canvas requires agent-server ${MINIMUM_COMPATIBLE_AGENT_SERVER_VERSION} ` +\n \"or newer, but this backend did not return a valid version from \" +\n \"/server_info. Restart or rebuild the agent-server backend, then try again.\";\n super(message);\n this.name = \"AgentServerUnknownVersionError\";\n this.message = message;\n this.actualVersion = actualVersion;\n }\n}\n\nexport const isAgentServerUnsupportedVersionError = (\n error: unknown,\n): error is AgentServerUnsupportedVersionError =>\n error instanceof AgentServerUnsupportedVersionError ||\n (typeof error === \"object\" &&\n error !== null &&\n \"code\" in error &&\n error.code === AGENT_SERVER_UNSUPPORTED_VERSION_ERROR_CODE);\n\nexport const isAgentServerUnknownVersionError = (\n error: unknown,\n): error is AgentServerUnknownVersionError =>\n error instanceof AgentServerUnknownVersionError ||\n (typeof error === \"object\" &&\n error !== null &&\n \"code\" in error &&\n error.code === AGENT_SERVER_UNKNOWN_VERSION_ERROR_CODE);\n\n/**\n * Returns true when the agent-server probe failed with HTTP 401.\n * In public mode this means the stored key is stale (server restarted\n * with a different `LOCAL_BACKEND_API_KEY`). Only meaningful when\n * auth is required — a 401 in local mode is a misconfiguration, not a\n * key-rotation event. Uses {@link isAuthRequired} so both the build-time\n * `VITE_AUTH_REQUIRED` flag and the runtime `window.__AGENT_CANVAS_AUTH_REQUIRED__`\n * injection (used by pre-built static binaries) are honoured.\n */\nexport const isAgentServerAuthError = (error: unknown): boolean =>\n isAuthRequired() && isSdkHttpStatusError(error, 401);\n\nexport function clearCachedAgentServerInfo() {\n cachedAgentServerInfo = null;\n cachedAgentServerInfoHost = null;\n}\n\nexport function getCachedAgentServerInfo(options?: {\n host?: string | null;\n}): AgentServerInfo | null {\n if (options?.host && options.host !== cachedAgentServerInfoHost) {\n return null;\n }\n return cachedAgentServerInfo;\n}\n\nexport function isAgentServerToolAvailable(toolName: string) {\n const availableTools = getAdvertisedTools(cachedAgentServerInfo);\n if (!Array.isArray(availableTools)) {\n return true;\n }\n return availableTools.includes(toolName);\n}\n\nexport function isSdkHttpError(error: unknown) {\n return (\n error instanceof Error &&\n error.name === \"HttpError\" &&\n \"status\" in error &&\n typeof error.status === \"number\"\n );\n}\n\n/**\n * Narrows an SDK HTTP error to a specific status code.\n * Use instead of manually casting `(err as { status: number }).status`.\n */\nexport function isSdkHttpStatusError(error: unknown, status: number): boolean {\n return (\n isSdkHttpError(error) && (error as { status: number }).status === status\n );\n}\n\nfunction normalizeAgentServerInfoVersion(version: unknown): string | null {\n if (typeof version !== \"string\") return null;\n const trimmed = version.trim();\n return trimmed || null;\n}\n\nfunction getRawAgentServerSdkVersion(\n serverInfo: AgentServerInfo,\n): string | null {\n return normalizeAgentServerInfoVersion(serverInfo.sdk_version);\n}\n\nfunction getRawAgentServerVersion(serverInfo: AgentServerInfo): string | null {\n return (\n normalizeAgentServerInfoVersion(serverInfo.version) ??\n getRawAgentServerSdkVersion(serverInfo)\n );\n}\n\nfunction getComparableAgentServerVersion(\n serverInfo: AgentServerInfo,\n): string | null {\n const version = getRawAgentServerVersion(serverInfo);\n if (!version || version.toLowerCase() === UNKNOWN_AGENT_SERVER_VERSION) {\n return null;\n }\n return version;\n}\n\nexport function getDisplayAgentServerVersion(\n serverInfo: AgentServerInfo,\n): string | null {\n const version = getComparableAgentServerVersion(serverInfo);\n if (!version || !parseAgentServerVersion(version)) {\n return null;\n }\n return version;\n}\n\nexport function getDisplayAgentServerSdkVersion(\n serverInfo: AgentServerInfo,\n): string | null {\n const version =\n getRawAgentServerSdkVersion(serverInfo) ??\n getComparableAgentServerVersion(serverInfo);\n if (!version || version.toLowerCase() === UNKNOWN_AGENT_SERVER_VERSION) {\n return null;\n }\n return version;\n}\n\nexport function getCachedAgentServerSdkVersion(\n host?: string | null,\n): string | null {\n if (!cachedAgentServerInfo) return null;\n if (host && getEffectiveLocalBackend()?.host !== host) return null;\n return getDisplayAgentServerSdkVersion(cachedAgentServerInfo);\n}\n\nexport function getCachedAgentServerVersion(\n host?: string | null,\n): string | null {\n if (!cachedAgentServerInfo) return null;\n if (host && getEffectiveLocalBackend()?.host !== host) return null;\n return getDisplayAgentServerVersion(cachedAgentServerInfo);\n}\n\nexport function compareAgentServerVersions(actual: string, required: string) {\n const parsedActual = parseAgentServerVersion(actual);\n const parsedRequired = parseAgentServerVersion(required);\n\n if (!parsedActual || !parsedRequired) {\n return null;\n }\n\n for (const key of [\"major\", \"minor\", \"patch\"] as const) {\n if (parsedActual[key] > parsedRequired[key]) {\n return 1;\n }\n if (parsedActual[key] < parsedRequired[key]) {\n return -1;\n }\n }\n\n if (parsedActual.prerelease && !parsedRequired.prerelease) {\n return -1;\n }\n if (!parsedActual.prerelease && parsedRequired.prerelease) {\n return 1;\n }\n if (parsedActual.prerelease && parsedRequired.prerelease) {\n return parsedActual.prerelease.localeCompare(parsedRequired.prerelease);\n }\n\n return 0;\n}\n\nfunction parseAgentServerVersion(version: string) {\n const trimmed = version.trim().replace(/^v/, \"\");\n const [withoutBuild] = trimmed.split(\"+\");\n const [core, prerelease] = withoutBuild.split(\"-\", 2);\n const parts = core.split(\".\");\n\n if (parts.length !== 3) {\n return null;\n }\n\n const [major, minor, patch] = parts.map((part) => Number(part));\n if (\n ![major, minor, patch].every((part) => Number.isInteger(part) && part >= 0)\n ) {\n return null;\n }\n\n return { major, minor, patch, prerelease };\n}\n\nexport function assertAgentServerVersionIsSupported(\n serverInfo: AgentServerInfo,\n) {\n const actualVersion = getComparableAgentServerVersion(serverInfo);\n if (!actualVersion) {\n clearCachedAgentServerInfo();\n throw new AgentServerUnknownVersionError(\n getRawAgentServerVersion(serverInfo),\n );\n }\n\n const comparison = compareAgentServerVersions(\n actualVersion,\n MINIMUM_COMPATIBLE_AGENT_SERVER_VERSION,\n );\n\n if (comparison === null) {\n clearCachedAgentServerInfo();\n throw new AgentServerUnknownVersionError(actualVersion);\n }\n\n if (comparison < 0) {\n clearCachedAgentServerInfo();\n throw new AgentServerUnsupportedVersionError(actualVersion);\n }\n}\n\nexport async function loadAgentServerInfo() {\n // The probe is a *local* agent-server concern — it verifies the runtime\n // hosting the GUI is reachable. It must NEVER run against the active\n // backend when that backend is cloud, because cloud hosts don't\n // expose /api/server_info and would fail with a CORS error besides.\n const local = getEffectiveLocalBackend();\n if (!local) {\n clearCachedAgentServerInfo();\n\n // Empty registry (NO_BACKEND sentinel) — the user has no backend\n // configured at all. Throw so root.tsx shows the manage-backends\n // modal instead of silently rendering a broken home page.\n if (isNoBackend(getActiveBackend().backend)) {\n throw new AgentServerUnavailableError(\"No backend configured\", {\n noBackendConfigured: true,\n });\n }\n\n // Active backend is cloud — no local probe needed.\n return null;\n }\n\n const clientOptions = getAgentServerClientOptions({\n host: local.host,\n sessionApiKey: local.apiKey || null,\n timeout: AGENT_SERVER_INFO_TIMEOUT_MS,\n });\n let serverInfo: AgentServerInfo;\n\n try {\n serverInfo = (await new ServerClient(\n clientOptions,\n ).getServerInfo()) as AgentServerInfo;\n } catch (error) {\n clearCachedAgentServerInfo();\n // Preserve 401 so root.tsx can show the auth screen (public mode).\n // All other HTTP errors (502, 503, etc.) mean the server is unreachable\n // or misconfigured — treat them as unavailable.\n if (isSdkHttpStatusError(error, 401)) {\n throw error;\n }\n\n const details = error instanceof Error ? error.message : null;\n throw new AgentServerUnavailableError(details);\n }\n\n assertAgentServerVersionIsSupported(serverInfo);\n\n // /server_info is unprotected, so a stale session key still gets 200.\n // In public mode, validate the key against a protected endpoint so a\n // server restart with a new LOCAL_BACKEND_API_KEY surfaces immediately\n // instead of letting the app load and fail on every subsequent call.\n if (isAuthRequired()) {\n try {\n await new SettingsClient(clientOptions).getSettings();\n } catch (error) {\n // Only rethrow 401 — that means the stored key is invalid /\n // rotated. Other HTTP errors (403, 5xx) and non-HTTP errors\n // (network, timeout) are swallowed: the server *is* up (we just\n // reached /server_info), so let the app proceed with an\n // unvalidated key rather than blocking the UI.\n // NOTE: If the connection drops between the /server_info and\n // getSettings() probes, the app loads with an unvalidated key and\n // subsequent 401s won't trigger the auth screen (they come from\n // React Query hooks, not this bootstrap path). Acceptable for now\n // since the window is narrow and a page refresh recovers.\n if (isSdkHttpStatusError(error, 401)) {\n throw error;\n }\n\n console.warn(\n \"[agent-server] getSettings() probe failed (non-401):\",\n error,\n );\n }\n }\n\n cachedAgentServerInfo = serverInfo;\n cachedAgentServerInfoHost = clientOptions.host;\n return serverInfo;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"agent-server-compatibility.js","names":[],"sources":["../../src/api/agent-server-compatibility.ts"],"sourcesContent":["import {\n ServerClient,\n SettingsClient,\n} from \"@openhands/typescript-client/clients\";\nimport type { ServerInfo as BaseServerInfo } from \"@openhands/typescript-client\";\nimport { getAgentServerClientOptions } from \"#/api/agent-server-client-options\";\nimport { isAuthRequired } from \"#/api/agent-server-config\";\nimport {\n getActiveBackend,\n getEffectiveLocalBackend,\n isNoBackend,\n} from \"#/api/backend-registry/active-store\";\nimport type { Backend } from \"#/api/backend-registry/types\";\nimport defaults from \"../../config/defaults.json\";\n\nconst AGENT_SERVER_INFO_TIMEOUT_MS = 5000;\nconst UNKNOWN_AGENT_SERVER_VERSION = \"unknown\";\n\nexport const MINIMUM_COMPATIBLE_AGENT_SERVER_VERSION =\n defaults.compatibility.minimumAgentServer;\nexport const AGENT_SERVER_UNSUPPORTED_VERSION_ERROR_CODE =\n \"AGENT_SERVER_UNSUPPORTED_VERSION\";\nexport const AGENT_SERVER_UNKNOWN_VERSION_ERROR_CODE =\n \"AGENT_SERVER_UNKNOWN_VERSION\";\n\n/**\n * Sentinel string thrown (as an Error message) when a local backend\n * rejects the configured session API key with HTTP 401.\n * Shared between the backend health probe ({@link validateLocalBackend})\n * and any consumer that needs to detect this specific failure.\n */\nexport const INVALID_BACKEND_API_KEY_ERROR = \"Invalid API key\";\n\nexport interface AgentServerInfo extends BaseServerInfo {\n sdk_version?: string;\n usable_tools?: string[] | null;\n runtime_services?: unknown;\n}\n\nlet cachedAgentServerInfo: AgentServerInfo | null = null;\nlet cachedAgentServerInfoHost: string | null = null;\n\nconst getAdvertisedTools = (serverInfo: AgentServerInfo | null) => {\n if (Array.isArray(serverInfo?.usable_tools)) {\n return serverInfo.usable_tools;\n }\n return null;\n};\n\nexport class AgentServerUnavailableError extends Error {\n readonly details: string | null;\n readonly noBackendConfigured: boolean;\n\n constructor(\n details?: string | null,\n options?: { noBackendConfigured?: boolean },\n ) {\n const noBackendConfigured = options?.noBackendConfigured ?? false;\n super(\n noBackendConfigured\n ? \"No agent server backend is configured yet. Add a backend to get started.\"\n : \"Could not connect to the configured agent server. Make sure it is running and reachable, then reload the page.\",\n );\n this.name = \"AgentServerUnavailableError\";\n this.details = details ?? null;\n this.noBackendConfigured = noBackendConfigured;\n }\n}\n\nexport const isAgentServerUnavailableError = (\n error: unknown,\n): error is AgentServerUnavailableError =>\n error instanceof AgentServerUnavailableError ||\n (typeof error === \"object\" &&\n error !== null &&\n \"name\" in error &&\n (error.name === \"AgentServerUnavailableError\" ||\n error.name === \"AgentServerUnsupportedVersionError\" ||\n error.name === \"AgentServerUnknownVersionError\"));\n\nexport class AgentServerUnsupportedVersionError extends AgentServerUnavailableError {\n readonly code = AGENT_SERVER_UNSUPPORTED_VERSION_ERROR_CODE;\n readonly actualVersion: string;\n readonly requiredVersion = MINIMUM_COMPATIBLE_AGENT_SERVER_VERSION;\n\n constructor(actualVersion: string) {\n const message = `Agent Canvas requires agent-server ${MINIMUM_COMPATIBLE_AGENT_SERVER_VERSION} or newer; this backend is running ${actualVersion}. Please upgrade the agent-server backend.`;\n super(message);\n this.name = \"AgentServerUnsupportedVersionError\";\n this.message = message;\n this.actualVersion = actualVersion;\n }\n}\n\nexport class AgentServerUnknownVersionError extends AgentServerUnavailableError {\n readonly code = AGENT_SERVER_UNKNOWN_VERSION_ERROR_CODE;\n readonly actualVersion: string | null;\n readonly requiredVersion = MINIMUM_COMPATIBLE_AGENT_SERVER_VERSION;\n\n constructor(actualVersion: string | null) {\n const reported = actualVersion ? ` It reported \"${actualVersion}\".` : \"\";\n const message =\n `Could not determine this backend's agent-server version.${reported} ` +\n `Agent Canvas requires agent-server ${MINIMUM_COMPATIBLE_AGENT_SERVER_VERSION} ` +\n \"or newer, but this backend did not return a valid version from \" +\n \"/server_info. Restart or rebuild the agent-server backend, then try again.\";\n super(message);\n this.name = \"AgentServerUnknownVersionError\";\n this.message = message;\n this.actualVersion = actualVersion;\n }\n}\n\nexport const isAgentServerUnsupportedVersionError = (\n error: unknown,\n): error is AgentServerUnsupportedVersionError =>\n error instanceof AgentServerUnsupportedVersionError ||\n (typeof error === \"object\" &&\n error !== null &&\n \"code\" in error &&\n error.code === AGENT_SERVER_UNSUPPORTED_VERSION_ERROR_CODE);\n\nexport const isAgentServerUnknownVersionError = (\n error: unknown,\n): error is AgentServerUnknownVersionError =>\n error instanceof AgentServerUnknownVersionError ||\n (typeof error === \"object\" &&\n error !== null &&\n \"code\" in error &&\n error.code === AGENT_SERVER_UNKNOWN_VERSION_ERROR_CODE);\n\n/**\n * Returns true when the agent-server probe failed with HTTP 401.\n * In public mode this means the stored key is stale (server restarted\n * with a different `LOCAL_BACKEND_API_KEY`). Only meaningful when\n * auth is required — a 401 in local mode is a misconfiguration, not a\n * key-rotation event. Uses {@link isAuthRequired} so both the build-time\n * `VITE_AUTH_REQUIRED` flag and the runtime `window.__AGENT_CANVAS_AUTH_REQUIRED__`\n * injection (used by pre-built static binaries) are honoured.\n */\nexport const isAgentServerAuthError = (error: unknown): boolean =>\n isAuthRequired() && isSdkHttpStatusError(error, 401);\n\nexport function clearCachedAgentServerInfo() {\n cachedAgentServerInfo = null;\n cachedAgentServerInfoHost = null;\n}\n\nexport function getCachedAgentServerInfo(options?: {\n host?: string | null;\n}): AgentServerInfo | null {\n if (options?.host && options.host !== cachedAgentServerInfoHost) {\n return null;\n }\n return cachedAgentServerInfo;\n}\n\nexport function isAgentServerToolAvailable(toolName: string) {\n const availableTools = getAdvertisedTools(cachedAgentServerInfo);\n if (!Array.isArray(availableTools)) {\n return true;\n }\n return availableTools.includes(toolName);\n}\n\nexport function isSdkHttpError(error: unknown) {\n return (\n error instanceof Error &&\n error.name === \"HttpError\" &&\n \"status\" in error &&\n typeof error.status === \"number\"\n );\n}\n\n/**\n * Narrows an SDK HTTP error to a specific status code.\n * Use instead of manually casting `(err as { status: number }).status`.\n */\nexport function isSdkHttpStatusError(error: unknown, status: number): boolean {\n return (\n isSdkHttpError(error) && (error as { status: number }).status === status\n );\n}\n\nfunction normalizeAgentServerInfoVersion(version: unknown): string | null {\n if (typeof version !== \"string\") return null;\n const trimmed = version.trim();\n return trimmed || null;\n}\n\nfunction getRawAgentServerSdkVersion(\n serverInfo: AgentServerInfo,\n): string | null {\n return normalizeAgentServerInfoVersion(serverInfo.sdk_version);\n}\n\nfunction getRawAgentServerVersion(serverInfo: AgentServerInfo): string | null {\n return (\n normalizeAgentServerInfoVersion(serverInfo.version) ??\n getRawAgentServerSdkVersion(serverInfo)\n );\n}\n\nfunction getComparableAgentServerVersion(\n serverInfo: AgentServerInfo,\n): string | null {\n const version = getRawAgentServerVersion(serverInfo);\n if (!version || version.toLowerCase() === UNKNOWN_AGENT_SERVER_VERSION) {\n return null;\n }\n return version;\n}\n\nexport function getDisplayAgentServerVersion(\n serverInfo: AgentServerInfo,\n): string | null {\n const version = getComparableAgentServerVersion(serverInfo);\n if (!version || !parseAgentServerVersion(version)) {\n return null;\n }\n return version;\n}\n\nexport function getDisplayAgentServerSdkVersion(\n serverInfo: AgentServerInfo,\n): string | null {\n const version =\n getRawAgentServerSdkVersion(serverInfo) ??\n getComparableAgentServerVersion(serverInfo);\n if (!version || version.toLowerCase() === UNKNOWN_AGENT_SERVER_VERSION) {\n return null;\n }\n return version;\n}\n\nexport function getCachedAgentServerSdkVersion(\n host?: string | null,\n): string | null {\n if (!cachedAgentServerInfo) return null;\n if (host && getEffectiveLocalBackend()?.host !== host) return null;\n return getDisplayAgentServerSdkVersion(cachedAgentServerInfo);\n}\n\nexport function getCachedAgentServerVersion(\n host?: string | null,\n): string | null {\n if (!cachedAgentServerInfo) return null;\n if (host && getEffectiveLocalBackend()?.host !== host) return null;\n return getDisplayAgentServerVersion(cachedAgentServerInfo);\n}\n\nexport function compareAgentServerVersions(actual: string, required: string) {\n const parsedActual = parseAgentServerVersion(actual);\n const parsedRequired = parseAgentServerVersion(required);\n\n if (!parsedActual || !parsedRequired) {\n return null;\n }\n\n for (const key of [\"major\", \"minor\", \"patch\"] as const) {\n if (parsedActual[key] > parsedRequired[key]) {\n return 1;\n }\n if (parsedActual[key] < parsedRequired[key]) {\n return -1;\n }\n }\n\n if (parsedActual.prerelease && !parsedRequired.prerelease) {\n return -1;\n }\n if (!parsedActual.prerelease && parsedRequired.prerelease) {\n return 1;\n }\n if (parsedActual.prerelease && parsedRequired.prerelease) {\n return parsedActual.prerelease.localeCompare(parsedRequired.prerelease);\n }\n\n return 0;\n}\n\nfunction parseAgentServerVersion(version: string) {\n const trimmed = version.trim().replace(/^v/, \"\");\n const [withoutBuild] = trimmed.split(\"+\");\n const [core, prerelease] = withoutBuild.split(\"-\", 2);\n const parts = core.split(\".\");\n\n if (parts.length !== 3) {\n return null;\n }\n\n const [major, minor, patch] = parts.map((part) => Number(part));\n if (\n ![major, minor, patch].every((part) => Number.isInteger(part) && part >= 0)\n ) {\n return null;\n }\n\n return { major, minor, patch, prerelease };\n}\n\nexport function assertAgentServerVersionIsSupported(\n serverInfo: AgentServerInfo,\n) {\n const actualVersion = getComparableAgentServerVersion(serverInfo);\n if (!actualVersion) {\n clearCachedAgentServerInfo();\n throw new AgentServerUnknownVersionError(\n getRawAgentServerVersion(serverInfo),\n );\n }\n\n const comparison = compareAgentServerVersions(\n actualVersion,\n MINIMUM_COMPATIBLE_AGENT_SERVER_VERSION,\n );\n\n if (comparison === null) {\n clearCachedAgentServerInfo();\n throw new AgentServerUnknownVersionError(actualVersion);\n }\n\n if (comparison < 0) {\n clearCachedAgentServerInfo();\n throw new AgentServerUnsupportedVersionError(actualVersion);\n }\n}\n\n/**\n * Validates a local agent-server backend with a two-step probe:\n * 1. GET /api/settings — authenticates the configured session API key;\n * a 401 throws an Error with message {@link INVALID_BACKEND_API_KEY_ERROR}.\n * 2. GET /server_info — asserts the server meets the minimum version floor.\n *\n * Returns the display version string reported by the server, or `null` when\n * the server does not report a parseable version. Throws on any failure.\n *\n * Used by both the backend health poller and the backend-form connection test\n * so that auth-check semantics (status codes, error messages) stay in one place.\n */\nexport async function validateLocalBackend(\n backend: Pick<Backend, \"host\" | \"apiKey\">,\n timeout: number,\n): Promise<string | null> {\n const clientOptions = getAgentServerClientOptions({\n host: backend.host,\n sessionApiKey: backend.apiKey || null,\n timeout,\n });\n\n try {\n await new SettingsClient(clientOptions).getSettings();\n const serverInfo = await new ServerClient(clientOptions).getServerInfo();\n assertAgentServerVersionIsSupported(serverInfo);\n return getDisplayAgentServerVersion(serverInfo);\n } catch (error) {\n if (isSdkHttpStatusError(error, 401)) {\n throw new Error(INVALID_BACKEND_API_KEY_ERROR);\n }\n throw error;\n }\n}\n\nexport async function loadAgentServerInfo() {\n // The probe is a *local* agent-server concern — it verifies the runtime\n // hosting the GUI is reachable. It must NEVER run against the active\n // backend when that backend is cloud, because cloud hosts don't\n // expose /api/server_info and would fail with a CORS error besides.\n const local = getEffectiveLocalBackend();\n if (!local) {\n clearCachedAgentServerInfo();\n\n // Empty registry (NO_BACKEND sentinel) — the user has no backend\n // configured at all. Throw so root.tsx shows the manage-backends\n // modal instead of silently rendering a broken home page.\n if (isNoBackend(getActiveBackend().backend)) {\n throw new AgentServerUnavailableError(\"No backend configured\", {\n noBackendConfigured: true,\n });\n }\n\n // Active backend is cloud — no local probe needed.\n return null;\n }\n\n const clientOptions = getAgentServerClientOptions({\n host: local.host,\n sessionApiKey: local.apiKey || null,\n timeout: AGENT_SERVER_INFO_TIMEOUT_MS,\n });\n let serverInfo: AgentServerInfo;\n\n try {\n serverInfo = (await new ServerClient(\n clientOptions,\n ).getServerInfo()) as AgentServerInfo;\n } catch (error) {\n clearCachedAgentServerInfo();\n // Preserve 401 so root.tsx can show the auth screen (public mode).\n // All other HTTP errors (502, 503, etc.) mean the server is unreachable\n // or misconfigured — treat them as unavailable.\n if (isSdkHttpStatusError(error, 401)) {\n throw error;\n }\n\n const details = error instanceof Error ? error.message : null;\n throw new AgentServerUnavailableError(details);\n }\n\n assertAgentServerVersionIsSupported(serverInfo);\n\n // /server_info is unprotected, so a stale session key still gets 200.\n // In public mode, validate the key against a protected endpoint so a\n // server restart with a new LOCAL_BACKEND_API_KEY surfaces immediately\n // instead of letting the app load and fail on every subsequent call.\n if (isAuthRequired()) {\n try {\n await new SettingsClient(clientOptions).getSettings();\n } catch (error) {\n // Only rethrow 401 — that means the stored key is invalid /\n // rotated. Other HTTP errors (403, 5xx) and non-HTTP errors\n // (network, timeout) are swallowed: the server *is* up (we just\n // reached /server_info), so let the app proceed with an\n // unvalidated key rather than blocking the UI.\n // NOTE: If the connection drops between the /server_info and\n // getSettings() probes, the app loads with an unvalidated key and\n // subsequent 401s won't trigger the auth screen (they come from\n // React Query hooks, not this bootstrap path). Acceptable for now\n // since the window is narrow and a page refresh recovers.\n if (isSdkHttpStatusError(error, 401)) {\n throw error;\n }\n\n console.warn(\n \"[agent-server] getSettings() probe failed (non-401):\",\n error,\n );\n }\n }\n\n cachedAgentServerInfo = serverInfo;\n cachedAgentServerInfoHost = clientOptions.host;\n return serverInfo;\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require("../_virtual/_rolldown/runtime.cjs");var e=`workspace/project`,t=`__AGENT_CANVAS_LOCK_TO_CLOUD__`,n=`all-hands.dev`,r=`openhands.dev`,i=`app.${n}`,a=r,o=`app.${r}`;function s(e){return e?.trim()||null}function c(e){if(!e)return null;let t=e.trim().replace(/\/$/,``);return t?/^https?:\/\//i.test(t)?t:typeof window<`u`?`${window.location.protocol}//${t}`:`http://${t}`:null}function l(e){if(!e)return null;let t=e.trim().replace(/\/+$/,``);return t?/^https?:\/\//i.test(t)?t:`https://${t}`:null}function u(e){let t=e.toLowerCase();return t===i||t===o?a:t===n?r:t.endsWith(`.${n}`)?`${t.slice(0,-13)}${r}`:t}function d(e){let t=l(e);if(!t)return null;try{let e=new URL(t),n=e.port?`:${e.port}`:``;return`${e.protocol}//${u(e.hostname)}${n}`}catch{return t.toLowerCase()}}function f(){let e=h();return!e||typeof window>`u`||!g(window.location.origin,e)?null:window.location.origin}function p(){return c(void 0)}function m(){let e=s(void 0);if(e)return e;if(typeof window<`u`){let e=window.__AGENT_CANVAS_SESSION_API_KEY__;if(typeof e==`string`)return s(e)}return null}function h(){let e=l(void 0);if(e)return e;if(typeof window<`u`){let e=window[t];if(typeof e==`string`)return l(e)}return null}function g(e,t){let n=d(e),r=d(t);return!n||!r?!1:n===r}function _(){return f()?`cookie`:`api-key`}function v(){return p()||(typeof window<`u`?window.location.origin:null)}function y(){return m()}function b(){return e}function x(e){return`${
|
|
1
|
+
require("../_virtual/_rolldown/runtime.cjs");var e=`workspace/project`,t=`__AGENT_CANVAS_LOCK_TO_CLOUD__`,n=`all-hands.dev`,r=`openhands.dev`,i=`app.${n}`,a=r,o=`app.${r}`;function s(e){return e?.trim()||null}function c(e){if(!e)return null;let t=e.trim().replace(/\/$/,``);return t?/^https?:\/\//i.test(t)?t:typeof window<`u`?`${window.location.protocol}//${t}`:`http://${t}`:null}function l(e){if(!e)return null;let t=e.trim().replace(/\/+$/,``);return t?/^https?:\/\//i.test(t)?t:`https://${t}`:null}function u(e){let t=e.toLowerCase();return t===i||t===o?a:t===n?r:t.endsWith(`.${n}`)?`${t.slice(0,-13)}${r}`:t}function d(e){let t=l(e);if(!t)return null;try{let e=new URL(t),n=e.port?`:${e.port}`:``;return`${e.protocol}//${u(e.hostname)}${n}`}catch{return t.toLowerCase()}}function f(){let e=h();return!e||typeof window>`u`||!g(window.location.origin,e)?null:window.location.origin}function p(){return c(void 0)}function m(){let e=s(void 0);if(e)return e;if(typeof window<`u`){let e=window.__AGENT_CANVAS_SESSION_API_KEY__;if(typeof e==`string`)return s(e)}return null}function h(){let e=l(void 0);if(e)return e;if(typeof window<`u`){let e=window[t];if(typeof e==`string`)return l(e)}return null}function g(e,t){let n=d(e),r=d(t);return!n||!r?!1:n===r}function _(){return f()?`cookie`:`api-key`}function v(){return p()||(typeof window<`u`?window.location.origin:null)}function y(){return m()}function b(){return e}function x(e,t){return`${e.replace(/\/+$/,``)}/${t.replace(/-/g,``)}`}function S(e){return x(b(),e)}function C(t){return x(e,t)}function w(e){let t=c(v()),n=c(e);return!t||!n?!1:t===n}function T(e,t){return w(t)?S(e):C(e)}function E(t){return w(t)?b():e}function D(){let e=y();return e?{"X-Session-API-Key":e}:{}}function O(){return typeof window<`u`&&window.__AGENT_CANVAS_AUTH_REQUIRED__===!0}exports.DEFAULT_WORKING_DIR=e,exports.buildConversationWorkingDirForBackend=T,exports.getAgentServerBaseUrl=v,exports.getAgentServerHeaders=D,exports.getAgentServerSessionApiKey=y,exports.getAgentServerWorkingDir=b,exports.getCookieAuthCloudHost=f,exports.getLockedCloudAuthMode=_,exports.getLockedCloudHost=h,exports.getWorkspaceRootForBackend=E,exports.isAuthRequired=O;
|
|
2
2
|
//# sourceMappingURL=agent-server-config.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-server-config.cjs","names":[],"sources":["../../src/api/agent-server-config.ts"],"sourcesContent":["export const DEFAULT_WORKING_DIR = \"workspace/project\";\n\nexport type LockedCloudAuthMode = \"api-key\" | \"cookie\";\n\nexport interface AgentServerFormDefaults {\n baseUrl: string;\n sessionApiKey: string;\n}\n\n// Window-global key the static server injects `--lock-to-cloud` into; kept\n// module-private because only `getLockedCloudHost()` reads it. The static\n// server (`scripts/static-server.mjs`) and its tests reference the literal\n// string directly, not this constant.\nconst LOCK_TO_CLOUD_WINDOW_KEY = \"__AGENT_CANVAS_LOCK_TO_CLOUD__\";\nconst LEGACY_CLOUD_DOMAIN = \"all-hands.dev\";\nconst CURRENT_CLOUD_DOMAIN = \"openhands.dev\";\nconst LEGACY_PRODUCTION_APP_HOST = `app.${LEGACY_CLOUD_DOMAIN}`;\nconst CURRENT_PRODUCTION_APP_HOST = CURRENT_CLOUD_DOMAIN;\nconst PRODUCTION_APP_HOST_ALIAS = `app.${CURRENT_CLOUD_DOMAIN}`;\n\nfunction trimToNull(value?: string | null): string | null {\n return value?.trim() || null;\n}\n\nfunction normalizeBaseUrl(value?: string | null): string | null {\n if (!value) return null;\n\n const trimmed = value.trim().replace(/\\/$/, \"\");\n if (!trimmed) return null;\n\n if (/^https?:\\/\\//i.test(trimmed)) {\n return trimmed;\n }\n\n if (typeof window !== \"undefined\") {\n return `${window.location.protocol}//${trimmed}`;\n }\n\n return `http://${trimmed}`;\n}\n\nfunction normalizeCloudHost(value?: string | null): string | null {\n if (!value) return null;\n\n const trimmed = value.trim().replace(/\\/+$/, \"\");\n if (!trimmed) return null;\n\n if (/^https?:\\/\\//i.test(trimmed)) {\n return trimmed;\n }\n\n return `https://${trimmed}`;\n}\n\nfunction canonicalizeCloudHostname(hostname: string): string {\n const lower = hostname.toLowerCase();\n if (\n lower === LEGACY_PRODUCTION_APP_HOST ||\n lower === PRODUCTION_APP_HOST_ALIAS\n ) {\n return CURRENT_PRODUCTION_APP_HOST;\n }\n\n if (lower === LEGACY_CLOUD_DOMAIN) return CURRENT_CLOUD_DOMAIN;\n if (lower.endsWith(`.${LEGACY_CLOUD_DOMAIN}`)) {\n return `${lower.slice(0, -LEGACY_CLOUD_DOMAIN.length)}${CURRENT_CLOUD_DOMAIN}`;\n }\n\n return lower;\n}\n\nfunction getCloudHostComparisonKey(value?: string | null): string | null {\n const normalized = normalizeCloudHost(value);\n if (!normalized) return null;\n\n try {\n const url = new URL(normalized);\n const port = url.port ? `:${url.port}` : \"\";\n return `${url.protocol}//${canonicalizeCloudHostname(url.hostname)}${port}`;\n } catch {\n return normalized.toLowerCase();\n }\n}\n\nexport function getCookieAuthCloudHost(): string | null {\n const lockedHost = getLockedCloudHost();\n if (\n !lockedHost ||\n typeof window === \"undefined\" ||\n !isSameCloudHost(window.location.origin, lockedHost)\n ) {\n return null;\n }\n\n return window.location.origin;\n}\n\nfunction getConfiguredBaseUrl(): string | null {\n return normalizeBaseUrl(import.meta.env.VITE_BACKEND_BASE_URL);\n}\n\n/**\n * Return the session API key supplied by the deployment host.\n *\n * Two sources are consulted, in order:\n * 1. `VITE_SESSION_API_KEY` — baked into the bundle at build time (used by\n * `npm run dev` so the dev server has the key without a round-trip).\n * 2. `window.__AGENT_CANVAS_SESSION_API_KEY__` — injected into `index.html`\n * at serve time by `scripts/static-server.mjs --session-api-key <key>`.\n * This is the path used by the published `agent-canvas` binary, where\n * `VITE_SESSION_API_KEY` is empty in the prebuilt bundle and the\n * runtime key is generated when the user launches the CLI.\n *\n * Without the window-global fallback, the published binary cannot construct a\n * default local backend (`makeDefaultLocalBackend()` returns null), the\n * registry is left empty, and the user sees the Manage Backends modal\n * instead of the onboarding flow.\n */\nexport function getBakedSessionApiKey(): string | null {\n const envKey = trimToNull(import.meta.env.VITE_SESSION_API_KEY);\n if (envKey) return envKey;\n\n if (typeof window !== \"undefined\") {\n const injected = (window as unknown as Record<string, unknown>)\n .__AGENT_CANVAS_SESSION_API_KEY__;\n if (typeof injected === \"string\") {\n return trimToNull(injected);\n }\n }\n\n return null;\n}\n\nexport function getAgentServerFormDefaults(): AgentServerFormDefaults {\n return {\n baseUrl: getAgentServerBaseUrl() ?? \"\",\n sessionApiKey: getAgentServerSessionApiKey() ?? \"\",\n };\n}\n\nexport function getLockedCloudHost(): string | null {\n const envHost = normalizeCloudHost(import.meta.env.VITE_LOCK_TO_CLOUD);\n if (envHost) return envHost;\n\n if (typeof window !== \"undefined\") {\n const injected = (window as unknown as Record<string, unknown>)[\n LOCK_TO_CLOUD_WINDOW_KEY\n ];\n if (typeof injected === \"string\") {\n return normalizeCloudHost(injected);\n }\n }\n\n return null;\n}\n\n/**\n * Compare a backend host against the locked Cloud host, normalizing\n * trailing slashes, protocol, and case so that e.g.\n * `https://app.all-hands.dev/` matches `https://app.all-hands.dev`.\n *\n * Used by the locked-to-Cloud gates (`root.tsx`,\n * `onboarding-modal.tsx`) to decide whether the active backend is the\n * configured locked Cloud host — a Cloud backend on a *different* host\n * (or a stale Local backend) must not be treated as the locked backend.\n */\nexport function isSameCloudHost(\n host: string | null | undefined,\n lockedHost: string | null | undefined,\n): boolean {\n const a = getCloudHostComparisonKey(host);\n const b = getCloudHostComparisonKey(lockedHost);\n if (!a || !b) return false;\n return a === b;\n}\n\nexport function getLockedCloudAuthMode(): LockedCloudAuthMode {\n return getCookieAuthCloudHost() ? \"cookie\" : \"api-key\";\n}\n\nexport function getAgentServerBaseUrl(): string | null {\n const configuredUrl = getConfiguredBaseUrl();\n if (configuredUrl) return configuredUrl;\n\n if (typeof window !== \"undefined\") {\n return window.location.origin;\n }\n\n return null;\n}\n\nexport function getAgentServerSessionApiKey(): string | null {\n return getBakedSessionApiKey();\n}\n\nexport function getAgentServerWorkingDir(): string {\n const envDir = import.meta.env.VITE_WORKING_DIR?.trim();\n if (envDir) return envDir;\n\n return DEFAULT_WORKING_DIR;\n}\n\nexport function buildConversationWorkingDir(conversationId: string): string {\n const base = getAgentServerWorkingDir().replace(/\\/+$/, \"\");\n const hex = conversationId.replace(/-/g, \"\");\n return `${base}/${hex}`;\n}\n\nexport function getAgentServerHeaders(): Record<string, string> {\n const sessionApiKey = getAgentServerSessionApiKey();\n return sessionApiKey ? { \"X-Session-API-Key\": sessionApiKey } : {};\n}\n\nexport function isAuthRequired(): boolean {\n return (\n import.meta.env.VITE_AUTH_REQUIRED === \"true\" ||\n (typeof window !== \"undefined\" &&\n (window as unknown as Record<string, unknown>)\n .__AGENT_CANVAS_AUTH_REQUIRED__ === true)\n );\n}\n\nexport function isAuthRequiredAndMissing(): boolean {\n if (!isAuthRequired()) return false;\n return !getAgentServerSessionApiKey();\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"agent-server-config.cjs","names":[],"sources":["../../src/api/agent-server-config.ts"],"sourcesContent":["export const DEFAULT_WORKING_DIR = \"workspace/project\";\n\nexport type LockedCloudAuthMode = \"api-key\" | \"cookie\";\n\nexport interface AgentServerFormDefaults {\n baseUrl: string;\n sessionApiKey: string;\n}\n\n// Window-global key the static server injects `--lock-to-cloud` into; kept\n// module-private because only `getLockedCloudHost()` reads it. The static\n// server (`scripts/static-server.mjs`) and its tests reference the literal\n// string directly, not this constant.\nconst LOCK_TO_CLOUD_WINDOW_KEY = \"__AGENT_CANVAS_LOCK_TO_CLOUD__\";\nconst LEGACY_CLOUD_DOMAIN = \"all-hands.dev\";\nconst CURRENT_CLOUD_DOMAIN = \"openhands.dev\";\nconst LEGACY_PRODUCTION_APP_HOST = `app.${LEGACY_CLOUD_DOMAIN}`;\nconst CURRENT_PRODUCTION_APP_HOST = CURRENT_CLOUD_DOMAIN;\nconst PRODUCTION_APP_HOST_ALIAS = `app.${CURRENT_CLOUD_DOMAIN}`;\n\nfunction trimToNull(value?: string | null): string | null {\n return value?.trim() || null;\n}\n\nfunction normalizeBaseUrl(value?: string | null): string | null {\n if (!value) return null;\n\n const trimmed = value.trim().replace(/\\/$/, \"\");\n if (!trimmed) return null;\n\n if (/^https?:\\/\\//i.test(trimmed)) {\n return trimmed;\n }\n\n if (typeof window !== \"undefined\") {\n return `${window.location.protocol}//${trimmed}`;\n }\n\n return `http://${trimmed}`;\n}\n\nfunction normalizeCloudHost(value?: string | null): string | null {\n if (!value) return null;\n\n const trimmed = value.trim().replace(/\\/+$/, \"\");\n if (!trimmed) return null;\n\n if (/^https?:\\/\\//i.test(trimmed)) {\n return trimmed;\n }\n\n return `https://${trimmed}`;\n}\n\nfunction canonicalizeCloudHostname(hostname: string): string {\n const lower = hostname.toLowerCase();\n if (\n lower === LEGACY_PRODUCTION_APP_HOST ||\n lower === PRODUCTION_APP_HOST_ALIAS\n ) {\n return CURRENT_PRODUCTION_APP_HOST;\n }\n\n if (lower === LEGACY_CLOUD_DOMAIN) return CURRENT_CLOUD_DOMAIN;\n if (lower.endsWith(`.${LEGACY_CLOUD_DOMAIN}`)) {\n return `${lower.slice(0, -LEGACY_CLOUD_DOMAIN.length)}${CURRENT_CLOUD_DOMAIN}`;\n }\n\n return lower;\n}\n\nfunction getCloudHostComparisonKey(value?: string | null): string | null {\n const normalized = normalizeCloudHost(value);\n if (!normalized) return null;\n\n try {\n const url = new URL(normalized);\n const port = url.port ? `:${url.port}` : \"\";\n return `${url.protocol}//${canonicalizeCloudHostname(url.hostname)}${port}`;\n } catch {\n return normalized.toLowerCase();\n }\n}\n\nexport function getCookieAuthCloudHost(): string | null {\n const lockedHost = getLockedCloudHost();\n if (\n !lockedHost ||\n typeof window === \"undefined\" ||\n !isSameCloudHost(window.location.origin, lockedHost)\n ) {\n return null;\n }\n\n return window.location.origin;\n}\n\nfunction getConfiguredBaseUrl(): string | null {\n return normalizeBaseUrl(import.meta.env.VITE_BACKEND_BASE_URL);\n}\n\n/**\n * Return the session API key supplied by the deployment host.\n *\n * Two sources are consulted, in order:\n * 1. `VITE_SESSION_API_KEY` — baked into the bundle at build time (used by\n * `npm run dev` so the dev server has the key without a round-trip).\n * 2. `window.__AGENT_CANVAS_SESSION_API_KEY__` — injected into `index.html`\n * at serve time by `scripts/static-server.mjs --session-api-key <key>`.\n * This is the path used by the published `agent-canvas` binary, where\n * `VITE_SESSION_API_KEY` is empty in the prebuilt bundle and the\n * runtime key is generated when the user launches the CLI.\n *\n * Without the window-global fallback, the published binary cannot construct a\n * default local backend (`makeDefaultLocalBackend()` returns null), the\n * registry is left empty, and the user sees the Manage Backends modal\n * instead of the onboarding flow.\n */\nexport function getBakedSessionApiKey(): string | null {\n const envKey = trimToNull(import.meta.env.VITE_SESSION_API_KEY);\n if (envKey) return envKey;\n\n if (typeof window !== \"undefined\") {\n const injected = (window as unknown as Record<string, unknown>)\n .__AGENT_CANVAS_SESSION_API_KEY__;\n if (typeof injected === \"string\") {\n return trimToNull(injected);\n }\n }\n\n return null;\n}\n\nexport function getAgentServerFormDefaults(): AgentServerFormDefaults {\n return {\n baseUrl: getAgentServerBaseUrl() ?? \"\",\n sessionApiKey: getAgentServerSessionApiKey() ?? \"\",\n };\n}\n\nexport function getLockedCloudHost(): string | null {\n const envHost = normalizeCloudHost(import.meta.env.VITE_LOCK_TO_CLOUD);\n if (envHost) return envHost;\n\n if (typeof window !== \"undefined\") {\n const injected = (window as unknown as Record<string, unknown>)[\n LOCK_TO_CLOUD_WINDOW_KEY\n ];\n if (typeof injected === \"string\") {\n return normalizeCloudHost(injected);\n }\n }\n\n return null;\n}\n\n/**\n * Compare a backend host against the locked Cloud host, normalizing\n * trailing slashes, protocol, and case so that e.g.\n * `https://app.all-hands.dev/` matches `https://app.all-hands.dev`.\n *\n * Used by the locked-to-Cloud gates (`root.tsx`,\n * `onboarding-modal.tsx`) to decide whether the active backend is the\n * configured locked Cloud host — a Cloud backend on a *different* host\n * (or a stale Local backend) must not be treated as the locked backend.\n */\nexport function isSameCloudHost(\n host: string | null | undefined,\n lockedHost: string | null | undefined,\n): boolean {\n const a = getCloudHostComparisonKey(host);\n const b = getCloudHostComparisonKey(lockedHost);\n if (!a || !b) return false;\n return a === b;\n}\n\nexport function getLockedCloudAuthMode(): LockedCloudAuthMode {\n return getCookieAuthCloudHost() ? \"cookie\" : \"api-key\";\n}\n\nexport function getAgentServerBaseUrl(): string | null {\n const configuredUrl = getConfiguredBaseUrl();\n if (configuredUrl) return configuredUrl;\n\n if (typeof window !== \"undefined\") {\n return window.location.origin;\n }\n\n return null;\n}\n\nexport function getAgentServerSessionApiKey(): string | null {\n return getBakedSessionApiKey();\n}\n\nexport function getAgentServerWorkingDir(): string {\n const envDir = import.meta.env.VITE_WORKING_DIR?.trim();\n if (envDir) return envDir;\n\n return DEFAULT_WORKING_DIR;\n}\n\nfunction buildWorkingDir(base: string, conversationId: string): string {\n const trimmed = base.replace(/\\/+$/, \"\");\n const hex = conversationId.replace(/-/g, \"\");\n return `${trimmed}/${hex}`;\n}\n\nexport function buildConversationWorkingDir(conversationId: string): string {\n return buildWorkingDir(getAgentServerWorkingDir(), conversationId);\n}\n\n/**\n * Conversation working dir under the backend-relative default\n * (`workspace/project/<hex>`), deliberately ignoring any baked absolute\n * `VITE_WORKING_DIR`. `resolveAbsoluteAgentServerPath()` anchors this to the\n * active backend's own home via `GET /api/file/home`, so it resolves to a\n * writable path on whichever backend actually runs the conversation.\n */\nexport function buildRelativeConversationWorkingDir(\n conversationId: string,\n): string {\n return buildWorkingDir(DEFAULT_WORKING_DIR, conversationId);\n}\n\n/**\n * Whether `backendHost` is the same host that served this frontend.\n *\n * A launcher-baked `VITE_WORKING_DIR` is an absolute path on the serving\n * host's filesystem, so it is only valid on that exact backend. The seeded\n * `default-local` entry starts life pointing at the served origin, but its\n * `host` is mutable — the user can edit it to a remote backend while its id\n * stays `default-local`. Matching on the host (not the stable id) keeps the\n * real invariant: the baked path is only safe for the host it was baked for.\n */\nexport function isServedOriginHost(\n backendHost: string | null | undefined,\n): boolean {\n const served = normalizeBaseUrl(getAgentServerBaseUrl());\n const candidate = normalizeBaseUrl(backendHost);\n if (!served || !candidate) return false;\n return served === candidate;\n}\n\n/**\n * Base working dir for a new conversation on the backend at `backendHost`.\n * The baked (possibly absolute) default is used only for the served-origin\n * backend; every other backend gets the relative default, anchored to its\n * own home by `resolveAbsoluteAgentServerPath()`.\n */\nexport function buildConversationWorkingDirForBackend(\n conversationId: string,\n backendHost: string | null | undefined,\n): string {\n return isServedOriginHost(backendHost)\n ? buildConversationWorkingDir(conversationId)\n : buildRelativeConversationWorkingDir(conversationId);\n}\n\n/**\n * Workspace root for `backendHost` — the dir each conversation's `<root>/<hex>`\n * working dir is created under. Same per-backend rule as\n * `buildConversationWorkingDirForBackend()`.\n */\nexport function getWorkspaceRootForBackend(\n backendHost: string | null | undefined,\n): string {\n return isServedOriginHost(backendHost)\n ? getAgentServerWorkingDir()\n : DEFAULT_WORKING_DIR;\n}\n\nexport function getAgentServerHeaders(): Record<string, string> {\n const sessionApiKey = getAgentServerSessionApiKey();\n return sessionApiKey ? { \"X-Session-API-Key\": sessionApiKey } : {};\n}\n\nexport function isAuthRequired(): boolean {\n return (\n import.meta.env.VITE_AUTH_REQUIRED === \"true\" ||\n (typeof window !== \"undefined\" &&\n (window as unknown as Record<string, unknown>)\n .__AGENT_CANVAS_AUTH_REQUIRED__ === true)\n );\n}\n\nexport function isAuthRequiredAndMissing(): boolean {\n if (!isAuthRequired()) return false;\n return !getAgentServerSessionApiKey();\n}\n"],"mappings":"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"}
|
|
@@ -41,6 +41,38 @@ export declare function getAgentServerBaseUrl(): string | null;
|
|
|
41
41
|
export declare function getAgentServerSessionApiKey(): string | null;
|
|
42
42
|
export declare function getAgentServerWorkingDir(): string;
|
|
43
43
|
export declare function buildConversationWorkingDir(conversationId: string): string;
|
|
44
|
+
/**
|
|
45
|
+
* Conversation working dir under the backend-relative default
|
|
46
|
+
* (`workspace/project/<hex>`), deliberately ignoring any baked absolute
|
|
47
|
+
* `VITE_WORKING_DIR`. `resolveAbsoluteAgentServerPath()` anchors this to the
|
|
48
|
+
* active backend's own home via `GET /api/file/home`, so it resolves to a
|
|
49
|
+
* writable path on whichever backend actually runs the conversation.
|
|
50
|
+
*/
|
|
51
|
+
export declare function buildRelativeConversationWorkingDir(conversationId: string): string;
|
|
52
|
+
/**
|
|
53
|
+
* Whether `backendHost` is the same host that served this frontend.
|
|
54
|
+
*
|
|
55
|
+
* A launcher-baked `VITE_WORKING_DIR` is an absolute path on the serving
|
|
56
|
+
* host's filesystem, so it is only valid on that exact backend. The seeded
|
|
57
|
+
* `default-local` entry starts life pointing at the served origin, but its
|
|
58
|
+
* `host` is mutable — the user can edit it to a remote backend while its id
|
|
59
|
+
* stays `default-local`. Matching on the host (not the stable id) keeps the
|
|
60
|
+
* real invariant: the baked path is only safe for the host it was baked for.
|
|
61
|
+
*/
|
|
62
|
+
export declare function isServedOriginHost(backendHost: string | null | undefined): boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Base working dir for a new conversation on the backend at `backendHost`.
|
|
65
|
+
* The baked (possibly absolute) default is used only for the served-origin
|
|
66
|
+
* backend; every other backend gets the relative default, anchored to its
|
|
67
|
+
* own home by `resolveAbsoluteAgentServerPath()`.
|
|
68
|
+
*/
|
|
69
|
+
export declare function buildConversationWorkingDirForBackend(conversationId: string, backendHost: string | null | undefined): string;
|
|
70
|
+
/**
|
|
71
|
+
* Workspace root for `backendHost` — the dir each conversation's `<root>/<hex>`
|
|
72
|
+
* working dir is created under. Same per-backend rule as
|
|
73
|
+
* `buildConversationWorkingDirForBackend()`.
|
|
74
|
+
*/
|
|
75
|
+
export declare function getWorkspaceRootForBackend(backendHost: string | null | undefined): string;
|
|
44
76
|
export declare function getAgentServerHeaders(): Record<string, string>;
|
|
45
77
|
export declare function isAuthRequired(): boolean;
|
|
46
78
|
export declare function isAuthRequiredAndMissing(): boolean;
|
|
@@ -68,17 +68,33 @@ function y() {
|
|
|
68
68
|
function b() {
|
|
69
69
|
return e;
|
|
70
70
|
}
|
|
71
|
-
function x(e) {
|
|
72
|
-
return `${
|
|
71
|
+
function x(e, t) {
|
|
72
|
+
return `${e.replace(/\/+$/, "")}/${t.replace(/-/g, "")}`;
|
|
73
73
|
}
|
|
74
|
-
function S() {
|
|
74
|
+
function S(e) {
|
|
75
|
+
return x(b(), e);
|
|
76
|
+
}
|
|
77
|
+
function C(t) {
|
|
78
|
+
return x(e, t);
|
|
79
|
+
}
|
|
80
|
+
function w(e) {
|
|
81
|
+
let t = c(v()), n = c(e);
|
|
82
|
+
return !t || !n ? !1 : t === n;
|
|
83
|
+
}
|
|
84
|
+
function T(e, t) {
|
|
85
|
+
return w(t) ? S(e) : C(e);
|
|
86
|
+
}
|
|
87
|
+
function E(t) {
|
|
88
|
+
return w(t) ? b() : e;
|
|
89
|
+
}
|
|
90
|
+
function D() {
|
|
75
91
|
let e = y();
|
|
76
92
|
return e ? { "X-Session-API-Key": e } : {};
|
|
77
93
|
}
|
|
78
|
-
function
|
|
94
|
+
function O() {
|
|
79
95
|
return typeof window < "u" && window.__AGENT_CANVAS_AUTH_REQUIRED__ === !0;
|
|
80
96
|
}
|
|
81
97
|
//#endregion
|
|
82
|
-
export { e as DEFAULT_WORKING_DIR,
|
|
98
|
+
export { e as DEFAULT_WORKING_DIR, T as buildConversationWorkingDirForBackend, v as getAgentServerBaseUrl, D as getAgentServerHeaders, y as getAgentServerSessionApiKey, b as getAgentServerWorkingDir, f as getCookieAuthCloudHost, _ as getLockedCloudAuthMode, h as getLockedCloudHost, E as getWorkspaceRootForBackend, O as isAuthRequired };
|
|
83
99
|
|
|
84
100
|
//# sourceMappingURL=agent-server-config.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-server-config.js","names":[],"sources":["../../src/api/agent-server-config.ts"],"sourcesContent":["export const DEFAULT_WORKING_DIR = \"workspace/project\";\n\nexport type LockedCloudAuthMode = \"api-key\" | \"cookie\";\n\nexport interface AgentServerFormDefaults {\n baseUrl: string;\n sessionApiKey: string;\n}\n\n// Window-global key the static server injects `--lock-to-cloud` into; kept\n// module-private because only `getLockedCloudHost()` reads it. The static\n// server (`scripts/static-server.mjs`) and its tests reference the literal\n// string directly, not this constant.\nconst LOCK_TO_CLOUD_WINDOW_KEY = \"__AGENT_CANVAS_LOCK_TO_CLOUD__\";\nconst LEGACY_CLOUD_DOMAIN = \"all-hands.dev\";\nconst CURRENT_CLOUD_DOMAIN = \"openhands.dev\";\nconst LEGACY_PRODUCTION_APP_HOST = `app.${LEGACY_CLOUD_DOMAIN}`;\nconst CURRENT_PRODUCTION_APP_HOST = CURRENT_CLOUD_DOMAIN;\nconst PRODUCTION_APP_HOST_ALIAS = `app.${CURRENT_CLOUD_DOMAIN}`;\n\nfunction trimToNull(value?: string | null): string | null {\n return value?.trim() || null;\n}\n\nfunction normalizeBaseUrl(value?: string | null): string | null {\n if (!value) return null;\n\n const trimmed = value.trim().replace(/\\/$/, \"\");\n if (!trimmed) return null;\n\n if (/^https?:\\/\\//i.test(trimmed)) {\n return trimmed;\n }\n\n if (typeof window !== \"undefined\") {\n return `${window.location.protocol}//${trimmed}`;\n }\n\n return `http://${trimmed}`;\n}\n\nfunction normalizeCloudHost(value?: string | null): string | null {\n if (!value) return null;\n\n const trimmed = value.trim().replace(/\\/+$/, \"\");\n if (!trimmed) return null;\n\n if (/^https?:\\/\\//i.test(trimmed)) {\n return trimmed;\n }\n\n return `https://${trimmed}`;\n}\n\nfunction canonicalizeCloudHostname(hostname: string): string {\n const lower = hostname.toLowerCase();\n if (\n lower === LEGACY_PRODUCTION_APP_HOST ||\n lower === PRODUCTION_APP_HOST_ALIAS\n ) {\n return CURRENT_PRODUCTION_APP_HOST;\n }\n\n if (lower === LEGACY_CLOUD_DOMAIN) return CURRENT_CLOUD_DOMAIN;\n if (lower.endsWith(`.${LEGACY_CLOUD_DOMAIN}`)) {\n return `${lower.slice(0, -LEGACY_CLOUD_DOMAIN.length)}${CURRENT_CLOUD_DOMAIN}`;\n }\n\n return lower;\n}\n\nfunction getCloudHostComparisonKey(value?: string | null): string | null {\n const normalized = normalizeCloudHost(value);\n if (!normalized) return null;\n\n try {\n const url = new URL(normalized);\n const port = url.port ? `:${url.port}` : \"\";\n return `${url.protocol}//${canonicalizeCloudHostname(url.hostname)}${port}`;\n } catch {\n return normalized.toLowerCase();\n }\n}\n\nexport function getCookieAuthCloudHost(): string | null {\n const lockedHost = getLockedCloudHost();\n if (\n !lockedHost ||\n typeof window === \"undefined\" ||\n !isSameCloudHost(window.location.origin, lockedHost)\n ) {\n return null;\n }\n\n return window.location.origin;\n}\n\nfunction getConfiguredBaseUrl(): string | null {\n return normalizeBaseUrl(import.meta.env.VITE_BACKEND_BASE_URL);\n}\n\n/**\n * Return the session API key supplied by the deployment host.\n *\n * Two sources are consulted, in order:\n * 1. `VITE_SESSION_API_KEY` — baked into the bundle at build time (used by\n * `npm run dev` so the dev server has the key without a round-trip).\n * 2. `window.__AGENT_CANVAS_SESSION_API_KEY__` — injected into `index.html`\n * at serve time by `scripts/static-server.mjs --session-api-key <key>`.\n * This is the path used by the published `agent-canvas` binary, where\n * `VITE_SESSION_API_KEY` is empty in the prebuilt bundle and the\n * runtime key is generated when the user launches the CLI.\n *\n * Without the window-global fallback, the published binary cannot construct a\n * default local backend (`makeDefaultLocalBackend()` returns null), the\n * registry is left empty, and the user sees the Manage Backends modal\n * instead of the onboarding flow.\n */\nexport function getBakedSessionApiKey(): string | null {\n const envKey = trimToNull(import.meta.env.VITE_SESSION_API_KEY);\n if (envKey) return envKey;\n\n if (typeof window !== \"undefined\") {\n const injected = (window as unknown as Record<string, unknown>)\n .__AGENT_CANVAS_SESSION_API_KEY__;\n if (typeof injected === \"string\") {\n return trimToNull(injected);\n }\n }\n\n return null;\n}\n\nexport function getAgentServerFormDefaults(): AgentServerFormDefaults {\n return {\n baseUrl: getAgentServerBaseUrl() ?? \"\",\n sessionApiKey: getAgentServerSessionApiKey() ?? \"\",\n };\n}\n\nexport function getLockedCloudHost(): string | null {\n const envHost = normalizeCloudHost(import.meta.env.VITE_LOCK_TO_CLOUD);\n if (envHost) return envHost;\n\n if (typeof window !== \"undefined\") {\n const injected = (window as unknown as Record<string, unknown>)[\n LOCK_TO_CLOUD_WINDOW_KEY\n ];\n if (typeof injected === \"string\") {\n return normalizeCloudHost(injected);\n }\n }\n\n return null;\n}\n\n/**\n * Compare a backend host against the locked Cloud host, normalizing\n * trailing slashes, protocol, and case so that e.g.\n * `https://app.all-hands.dev/` matches `https://app.all-hands.dev`.\n *\n * Used by the locked-to-Cloud gates (`root.tsx`,\n * `onboarding-modal.tsx`) to decide whether the active backend is the\n * configured locked Cloud host — a Cloud backend on a *different* host\n * (or a stale Local backend) must not be treated as the locked backend.\n */\nexport function isSameCloudHost(\n host: string | null | undefined,\n lockedHost: string | null | undefined,\n): boolean {\n const a = getCloudHostComparisonKey(host);\n const b = getCloudHostComparisonKey(lockedHost);\n if (!a || !b) return false;\n return a === b;\n}\n\nexport function getLockedCloudAuthMode(): LockedCloudAuthMode {\n return getCookieAuthCloudHost() ? \"cookie\" : \"api-key\";\n}\n\nexport function getAgentServerBaseUrl(): string | null {\n const configuredUrl = getConfiguredBaseUrl();\n if (configuredUrl) return configuredUrl;\n\n if (typeof window !== \"undefined\") {\n return window.location.origin;\n }\n\n return null;\n}\n\nexport function getAgentServerSessionApiKey(): string | null {\n return getBakedSessionApiKey();\n}\n\nexport function getAgentServerWorkingDir(): string {\n const envDir = import.meta.env.VITE_WORKING_DIR?.trim();\n if (envDir) return envDir;\n\n return DEFAULT_WORKING_DIR;\n}\n\nexport function buildConversationWorkingDir(conversationId: string): string {\n const base = getAgentServerWorkingDir().replace(/\\/+$/, \"\");\n const hex = conversationId.replace(/-/g, \"\");\n return `${base}/${hex}`;\n}\n\nexport function getAgentServerHeaders(): Record<string, string> {\n const sessionApiKey = getAgentServerSessionApiKey();\n return sessionApiKey ? { \"X-Session-API-Key\": sessionApiKey } : {};\n}\n\nexport function isAuthRequired(): boolean {\n return (\n import.meta.env.VITE_AUTH_REQUIRED === \"true\" ||\n (typeof window !== \"undefined\" &&\n (window as unknown as Record<string, unknown>)\n .__AGENT_CANVAS_AUTH_REQUIRED__ === true)\n );\n}\n\nexport function isAuthRequiredAndMissing(): boolean {\n if (!isAuthRequired()) return false;\n return !getAgentServerSessionApiKey();\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"agent-server-config.js","names":[],"sources":["../../src/api/agent-server-config.ts"],"sourcesContent":["export const DEFAULT_WORKING_DIR = \"workspace/project\";\n\nexport type LockedCloudAuthMode = \"api-key\" | \"cookie\";\n\nexport interface AgentServerFormDefaults {\n baseUrl: string;\n sessionApiKey: string;\n}\n\n// Window-global key the static server injects `--lock-to-cloud` into; kept\n// module-private because only `getLockedCloudHost()` reads it. The static\n// server (`scripts/static-server.mjs`) and its tests reference the literal\n// string directly, not this constant.\nconst LOCK_TO_CLOUD_WINDOW_KEY = \"__AGENT_CANVAS_LOCK_TO_CLOUD__\";\nconst LEGACY_CLOUD_DOMAIN = \"all-hands.dev\";\nconst CURRENT_CLOUD_DOMAIN = \"openhands.dev\";\nconst LEGACY_PRODUCTION_APP_HOST = `app.${LEGACY_CLOUD_DOMAIN}`;\nconst CURRENT_PRODUCTION_APP_HOST = CURRENT_CLOUD_DOMAIN;\nconst PRODUCTION_APP_HOST_ALIAS = `app.${CURRENT_CLOUD_DOMAIN}`;\n\nfunction trimToNull(value?: string | null): string | null {\n return value?.trim() || null;\n}\n\nfunction normalizeBaseUrl(value?: string | null): string | null {\n if (!value) return null;\n\n const trimmed = value.trim().replace(/\\/$/, \"\");\n if (!trimmed) return null;\n\n if (/^https?:\\/\\//i.test(trimmed)) {\n return trimmed;\n }\n\n if (typeof window !== \"undefined\") {\n return `${window.location.protocol}//${trimmed}`;\n }\n\n return `http://${trimmed}`;\n}\n\nfunction normalizeCloudHost(value?: string | null): string | null {\n if (!value) return null;\n\n const trimmed = value.trim().replace(/\\/+$/, \"\");\n if (!trimmed) return null;\n\n if (/^https?:\\/\\//i.test(trimmed)) {\n return trimmed;\n }\n\n return `https://${trimmed}`;\n}\n\nfunction canonicalizeCloudHostname(hostname: string): string {\n const lower = hostname.toLowerCase();\n if (\n lower === LEGACY_PRODUCTION_APP_HOST ||\n lower === PRODUCTION_APP_HOST_ALIAS\n ) {\n return CURRENT_PRODUCTION_APP_HOST;\n }\n\n if (lower === LEGACY_CLOUD_DOMAIN) return CURRENT_CLOUD_DOMAIN;\n if (lower.endsWith(`.${LEGACY_CLOUD_DOMAIN}`)) {\n return `${lower.slice(0, -LEGACY_CLOUD_DOMAIN.length)}${CURRENT_CLOUD_DOMAIN}`;\n }\n\n return lower;\n}\n\nfunction getCloudHostComparisonKey(value?: string | null): string | null {\n const normalized = normalizeCloudHost(value);\n if (!normalized) return null;\n\n try {\n const url = new URL(normalized);\n const port = url.port ? `:${url.port}` : \"\";\n return `${url.protocol}//${canonicalizeCloudHostname(url.hostname)}${port}`;\n } catch {\n return normalized.toLowerCase();\n }\n}\n\nexport function getCookieAuthCloudHost(): string | null {\n const lockedHost = getLockedCloudHost();\n if (\n !lockedHost ||\n typeof window === \"undefined\" ||\n !isSameCloudHost(window.location.origin, lockedHost)\n ) {\n return null;\n }\n\n return window.location.origin;\n}\n\nfunction getConfiguredBaseUrl(): string | null {\n return normalizeBaseUrl(import.meta.env.VITE_BACKEND_BASE_URL);\n}\n\n/**\n * Return the session API key supplied by the deployment host.\n *\n * Two sources are consulted, in order:\n * 1. `VITE_SESSION_API_KEY` — baked into the bundle at build time (used by\n * `npm run dev` so the dev server has the key without a round-trip).\n * 2. `window.__AGENT_CANVAS_SESSION_API_KEY__` — injected into `index.html`\n * at serve time by `scripts/static-server.mjs --session-api-key <key>`.\n * This is the path used by the published `agent-canvas` binary, where\n * `VITE_SESSION_API_KEY` is empty in the prebuilt bundle and the\n * runtime key is generated when the user launches the CLI.\n *\n * Without the window-global fallback, the published binary cannot construct a\n * default local backend (`makeDefaultLocalBackend()` returns null), the\n * registry is left empty, and the user sees the Manage Backends modal\n * instead of the onboarding flow.\n */\nexport function getBakedSessionApiKey(): string | null {\n const envKey = trimToNull(import.meta.env.VITE_SESSION_API_KEY);\n if (envKey) return envKey;\n\n if (typeof window !== \"undefined\") {\n const injected = (window as unknown as Record<string, unknown>)\n .__AGENT_CANVAS_SESSION_API_KEY__;\n if (typeof injected === \"string\") {\n return trimToNull(injected);\n }\n }\n\n return null;\n}\n\nexport function getAgentServerFormDefaults(): AgentServerFormDefaults {\n return {\n baseUrl: getAgentServerBaseUrl() ?? \"\",\n sessionApiKey: getAgentServerSessionApiKey() ?? \"\",\n };\n}\n\nexport function getLockedCloudHost(): string | null {\n const envHost = normalizeCloudHost(import.meta.env.VITE_LOCK_TO_CLOUD);\n if (envHost) return envHost;\n\n if (typeof window !== \"undefined\") {\n const injected = (window as unknown as Record<string, unknown>)[\n LOCK_TO_CLOUD_WINDOW_KEY\n ];\n if (typeof injected === \"string\") {\n return normalizeCloudHost(injected);\n }\n }\n\n return null;\n}\n\n/**\n * Compare a backend host against the locked Cloud host, normalizing\n * trailing slashes, protocol, and case so that e.g.\n * `https://app.all-hands.dev/` matches `https://app.all-hands.dev`.\n *\n * Used by the locked-to-Cloud gates (`root.tsx`,\n * `onboarding-modal.tsx`) to decide whether the active backend is the\n * configured locked Cloud host — a Cloud backend on a *different* host\n * (or a stale Local backend) must not be treated as the locked backend.\n */\nexport function isSameCloudHost(\n host: string | null | undefined,\n lockedHost: string | null | undefined,\n): boolean {\n const a = getCloudHostComparisonKey(host);\n const b = getCloudHostComparisonKey(lockedHost);\n if (!a || !b) return false;\n return a === b;\n}\n\nexport function getLockedCloudAuthMode(): LockedCloudAuthMode {\n return getCookieAuthCloudHost() ? \"cookie\" : \"api-key\";\n}\n\nexport function getAgentServerBaseUrl(): string | null {\n const configuredUrl = getConfiguredBaseUrl();\n if (configuredUrl) return configuredUrl;\n\n if (typeof window !== \"undefined\") {\n return window.location.origin;\n }\n\n return null;\n}\n\nexport function getAgentServerSessionApiKey(): string | null {\n return getBakedSessionApiKey();\n}\n\nexport function getAgentServerWorkingDir(): string {\n const envDir = import.meta.env.VITE_WORKING_DIR?.trim();\n if (envDir) return envDir;\n\n return DEFAULT_WORKING_DIR;\n}\n\nfunction buildWorkingDir(base: string, conversationId: string): string {\n const trimmed = base.replace(/\\/+$/, \"\");\n const hex = conversationId.replace(/-/g, \"\");\n return `${trimmed}/${hex}`;\n}\n\nexport function buildConversationWorkingDir(conversationId: string): string {\n return buildWorkingDir(getAgentServerWorkingDir(), conversationId);\n}\n\n/**\n * Conversation working dir under the backend-relative default\n * (`workspace/project/<hex>`), deliberately ignoring any baked absolute\n * `VITE_WORKING_DIR`. `resolveAbsoluteAgentServerPath()` anchors this to the\n * active backend's own home via `GET /api/file/home`, so it resolves to a\n * writable path on whichever backend actually runs the conversation.\n */\nexport function buildRelativeConversationWorkingDir(\n conversationId: string,\n): string {\n return buildWorkingDir(DEFAULT_WORKING_DIR, conversationId);\n}\n\n/**\n * Whether `backendHost` is the same host that served this frontend.\n *\n * A launcher-baked `VITE_WORKING_DIR` is an absolute path on the serving\n * host's filesystem, so it is only valid on that exact backend. The seeded\n * `default-local` entry starts life pointing at the served origin, but its\n * `host` is mutable — the user can edit it to a remote backend while its id\n * stays `default-local`. Matching on the host (not the stable id) keeps the\n * real invariant: the baked path is only safe for the host it was baked for.\n */\nexport function isServedOriginHost(\n backendHost: string | null | undefined,\n): boolean {\n const served = normalizeBaseUrl(getAgentServerBaseUrl());\n const candidate = normalizeBaseUrl(backendHost);\n if (!served || !candidate) return false;\n return served === candidate;\n}\n\n/**\n * Base working dir for a new conversation on the backend at `backendHost`.\n * The baked (possibly absolute) default is used only for the served-origin\n * backend; every other backend gets the relative default, anchored to its\n * own home by `resolveAbsoluteAgentServerPath()`.\n */\nexport function buildConversationWorkingDirForBackend(\n conversationId: string,\n backendHost: string | null | undefined,\n): string {\n return isServedOriginHost(backendHost)\n ? buildConversationWorkingDir(conversationId)\n : buildRelativeConversationWorkingDir(conversationId);\n}\n\n/**\n * Workspace root for `backendHost` — the dir each conversation's `<root>/<hex>`\n * working dir is created under. Same per-backend rule as\n * `buildConversationWorkingDirForBackend()`.\n */\nexport function getWorkspaceRootForBackend(\n backendHost: string | null | undefined,\n): string {\n return isServedOriginHost(backendHost)\n ? getAgentServerWorkingDir()\n : DEFAULT_WORKING_DIR;\n}\n\nexport function getAgentServerHeaders(): Record<string, string> {\n const sessionApiKey = getAgentServerSessionApiKey();\n return sessionApiKey ? { \"X-Session-API-Key\": sessionApiKey } : {};\n}\n\nexport function isAuthRequired(): boolean {\n return (\n import.meta.env.VITE_AUTH_REQUIRED === \"true\" ||\n (typeof window !== \"undefined\" &&\n (window as unknown as Record<string, unknown>)\n .__AGENT_CANVAS_AUTH_REQUIRED__ === true)\n );\n}\n\nexport function isAuthRequiredAndMissing(): boolean {\n if (!isAuthRequired()) return false;\n return !getAgentServerSessionApiKey();\n}\n"],"mappings":";AAAA,IAAa,IAAsB,qBAa7B,IAA2B,kCAC3B,IAAsB,iBACtB,IAAuB,iBACvB,IAA6B,OAAO,KACpC,IAA8B,GAC9B,IAA4B,OAAO;AAEzC,SAAS,EAAW,GAAsC;CACxD,OAAO,GAAO,KAAK,KAAK;AAC1B;AAEA,SAAS,EAAiB,GAAsC;CAC9D,IAAI,CAAC,GAAO,OAAO;CAEnB,IAAM,IAAU,EAAM,KAAK,EAAE,QAAQ,OAAO,EAAE;CAW9C,OAVK,IAED,gBAAgB,KAAK,CAAO,IACvB,IAGL,OAAO,SAAW,MACb,GAAG,OAAO,SAAS,SAAS,IAAI,MAGlC,UAAU,MAVI;AAWvB;AAEA,SAAS,EAAmB,GAAsC;CAChE,IAAI,CAAC,GAAO,OAAO;CAEnB,IAAM,IAAU,EAAM,KAAK,EAAE,QAAQ,QAAQ,EAAE;CAO/C,OANK,IAED,gBAAgB,KAAK,CAAO,IACvB,IAGF,WAAW,MANG;AAOvB;AAEA,SAAS,EAA0B,GAA0B;CAC3D,IAAM,IAAQ,EAAS,YAAY;CAanC,OAXE,MAAU,KACV,MAAU,IAEH,IAGL,MAAU,IAA4B,IACtC,EAAM,SAAS,IAAI,GAAqB,IACnC,GAAG,EAAM,MAAM,GAAG,GAA2B,IAAI,MAGnD;AACT;AAEA,SAAS,EAA0B,GAAsC;CACvE,IAAM,IAAa,EAAmB,CAAK;CAC3C,IAAI,CAAC,GAAY,OAAO;CAExB,IAAI;EACF,IAAM,IAAM,IAAI,IAAI,CAAU,GACxB,IAAO,EAAI,OAAO,IAAI,EAAI,SAAS;EACzC,OAAO,GAAG,EAAI,SAAS,IAAI,EAA0B,EAAI,QAAQ,IAAI;CACvE,QAAQ;EACN,OAAO,EAAW,YAAY;CAChC;AACF;AAEA,SAAgB,IAAwC;CACtD,IAAM,IAAa,EAAmB;CAStC,OAPE,CAAC,KACD,OAAO,SAAW,OAClB,CAAC,EAAgB,OAAO,SAAS,QAAQ,CAAU,IAE5C,OAGF,OAAO,SAAS;AACzB;AAEA,SAAS,IAAsC;CAC7C,OAAO,EAAA,KAAA,CAAsD;AAC/D;AAmBA,SAAgB,IAAuC;CACrD,IAAM,IAAS,EAAA,KAAA,CAA+C;CAC9D,IAAI,GAAQ,OAAO;CAEnB,IAAI,OAAO,SAAW,KAAa;EACjC,IAAM,IAAY,OACf;EACH,IAAI,OAAO,KAAa,UACtB,OAAO,EAAW,CAAQ;CAE9B;CAEA,OAAO;AACT;AASA,SAAgB,IAAoC;CAClD,IAAM,IAAU,EAAA,KAAA,CAAqD;CACrE,IAAI,GAAS,OAAO;CAEpB,IAAI,OAAO,SAAW,KAAa;EACjC,IAAM,IAAY,OAChB;EAEF,IAAI,OAAO,KAAa,UACtB,OAAO,EAAmB,CAAQ;CAEtC;CAEA,OAAO;AACT;AAYA,SAAgB,EACd,GACA,GACS;CACT,IAAM,IAAI,EAA0B,CAAI,GAClC,IAAI,EAA0B,CAAU;CAE9C,OADI,CAAC,KAAK,CAAC,IAAU,KACd,MAAM;AACf;AAEA,SAAgB,IAA8C;CAC5D,OAAO,EAAuB,IAAI,WAAW;AAC/C;AAEA,SAAgB,IAAuC;CAQrD,OAPsB,EAClB,MAEA,OAAO,SAAW,MACb,OAAO,SAAS,SAGlB;AACT;AAEA,SAAgB,IAA6C;CAC3D,OAAO,EAAsB;AAC/B;AAEA,SAAgB,IAAmC;CAIjD,OAAO;AACT;AAEA,SAAS,EAAgB,GAAc,GAAgC;CAGrE,OAAO,GAFS,EAAK,QAAQ,QAAQ,EAE3B,EAAQ,GADN,EAAe,QAAQ,MAAM,EACpB;AACvB;AAEA,SAAgB,EAA4B,GAAgC;CAC1E,OAAO,EAAgB,EAAyB,GAAG,CAAc;AACnE;AASA,SAAgB,EACd,GACQ;CACR,OAAO,EAAgB,GAAqB,CAAc;AAC5D;AAYA,SAAgB,EACd,GACS;CACT,IAAM,IAAS,EAAiB,EAAsB,CAAC,GACjD,IAAY,EAAiB,CAAW;CAE9C,OADI,CAAC,KAAU,CAAC,IAAkB,KAC3B,MAAW;AACpB;AAQA,SAAgB,EACd,GACA,GACQ;CACR,OAAO,EAAmB,CAAW,IACjC,EAA4B,CAAc,IAC1C,EAAoC,CAAc;AACxD;AAOA,SAAgB,EACd,GACQ;CACR,OAAO,EAAmB,CAAW,IACjC,EAAyB,IACzB;AACN;AAEA,SAAgB,IAAgD;CAC9D,IAAM,IAAgB,EAA4B;CAClD,OAAO,IAAgB,EAAE,qBAAqB,EAAc,IAAI,CAAC;AACnE;AAEA,SAAgB,IAA0B;CACxC,OAEG,OAAO,SAAW,OAChB,OACE,mCAAmC;AAE5C"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require("../../_virtual/_rolldown/runtime.cjs");const e=require("../backend-registry/active-store.cjs"),t=require("../agent-server-client-options.cjs"),n=require("../../node_modules/axios/lib/axios.cjs"),r=require("../client-source.cjs"),i=require("../../services/telemetry.cjs"),a=require("../cloud/proxy.cjs"),o=require("../../manifests/automation-interface.cjs"),s=require("../../manifests/automation-setup.cjs");var c=`/api/automation`,l=n.default.create();async function u(e={}){let t=await i.getTelemetryDistinctId();return{...r.AGENT_CANVAS_CLIENT_HEADERS,...t?{[r.OPENHANDS_TELEMETRY_DISTINCT_ID_HEADER]:t}:{},...e}}l.interceptors.request.use(async n=>{let r=await u();if(Object.entries(r).forEach(([e,t])=>{n.headers.set(e,t)}),n.baseURL)return n;let i=e.getEffectiveLocalBackend();if(!i)throw new t.NoBackendAvailableError;n.baseURL=i.host;let a=i.apiKey?.trim();return a&&n.headers.set(`X-Session-API-Key`,a),n});function d(e){return typeof e==`string`&&e.trim()||null}function f(e){return typeof e==`string`?d(e):d(e.sdk_version)??d(e.version)}function p(e,t){let n=new URLSearchParams;return n.set(`limit`,String(e)),n.set(`offset`,String(t)),n.toString()}function m(e){return e.trigger.type===`event`?{type:`event`,source:e.trigger.source,on:e.trigger.on,...e.trigger.filter&&{filter:e.trigger.filter}}:{type:`cron`,schedule:e.trigger.schedule,timezone:e.timezone??e.trigger.timezone??`UTC`}}function h(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?`pending.${crypto.randomUUID()}`:`pending.${Date.now()}.${Math.random().toString(36).slice(2,10)}`}function g(e){if(!e.prompt)throw Error(`An automation prompt is required for import.`);let{importDefaults:t}=o.getImportExportSpec(),n=e.repository?[{url:e.repository,...e.branch&&{ref:e.branch},...!e.repository.includes(`://`)&&!e.repository.startsWith(`git@`)&&{provider:t.repoProvider}}]:void 0;return{path:`${c}${o.getAutomationEndpoint(e.plugins?.length?`createPlugin`:`createPrompt`)}`,body:{name:e.name,prompt:e.prompt,trigger:{type:`event`,source:t.placeholderEventSource,on:h()},...e.model&&{model:e.model},...n&&{repos:n},...e.plugins?.length&&{plugins:e.plugins.map(e=>({source:e}))},...e.timeout!=null&&{timeout:e.timeout}}}}async function _(e){let t=e.apiKey.trim();return{baseURL:e.host,headers:await u(t?{"X-Session-API-Key":t}:{})}}async function v(e){return u(e.orgId?{"X-Org-Id":e.orgId}:{})}var y=class t{static async syncTelemetryConsent(t=i.getTelemetryConsent()){if(e.getActiveBackend().backend.kind!==`local`)return;let n=await i.getTelemetryDistinctIdForConsentSync();await l.post(`${c}/v1/telemetry/consent`,{consent_granted:t===`granted`,frontend_distinct_id:n},{timeout:5e3}),t!==`granted`&&n&&i.clearPendingLocalTelemetryRevocation(n)}static async getSdkVersion(){let t=e.getActiveBackend(),n=`${c}/sdk-version`;try{let e;if(t.backend.kind===`cloud`)e=await a.callCloudProxy({backend:t.backend,method:`GET`,path:n,headers:await v(t),timeoutSeconds:5});else{let{data:t}=await l.get(n,{timeout:5e3});e=t}return f(e)}catch{return null}}static async listAutomations(t={}){let{limit:n=50,offset:r=0}=t,i=e.getActiveBackend().backend;if(i.kind===`cloud`)return a.callCloudProxy({backend:i,method:`GET`,path:`${c}${o.getAutomationEndpoint(`list`)}?${p(n,r)}`,headers:await u()});let{data:s}=await l.get(`${c}${o.getAutomationEndpoint(`list`)}`,{params:{limit:n,offset:r}});return s}static async getAutomations(e=50,n=0){return t.listAutomations({limit:e,offset:n})}static async getAutomation(t){let n=e.getActiveBackend().backend,r=`${c}${o.getAutomationIdEndpoint(`detail`,t)}`;if(n.kind===`cloud`)return a.callCloudProxy({backend:n,method:`GET`,path:r,headers:await u()});let{data:i}=await l.get(r);return i}static async createAutomation(t){let n=e.getActiveBackend(),{path:r,body:i}=g(t),s;if(n.backend.kind===`cloud`)s=await a.callCloudProxy({backend:n.backend,method:`POST`,path:r,body:i,headers:await v(n)});else{let{data:e}=await l.post(r,i,await _(n.backend));s=e}let u=`${c}${o.getAutomationIdEndpoint(`detail`,s.id)}`,d={trigger:m(t),enabled:!1};try{if(n.backend.kind===`cloud`)return await a.callCloudProxy({backend:n.backend,method:`PATCH`,path:u,body:d,headers:await v(n)});let{data:e}=await l.patch(u,d,await _(n.backend));return e}catch(e){try{n.backend.kind===`cloud`?await a.callCloudProxy({backend:n.backend,method:`DELETE`,path:u,headers:await v(n)}):await l.delete(u,await _(n.backend))}catch(t){throw AggregateError([e,t],`Failed to disable the imported automation and clean it up.`)}throw e}}static async updateAutomation(t,n){let r=e.getActiveBackend().backend,i=`${c}${o.getAutomationIdEndpoint(`detail`,t)}`;if(r.kind===`cloud`)return a.callCloudProxy({backend:r,method:`PATCH`,path:i,body:n,headers:await u()});let{data:s}=await l.patch(i,n);return s}static async deleteAutomation(t){let n=e.getActiveBackend().backend,r=`${c}${o.getAutomationIdEndpoint(`detail`,t)}`;if(n.kind===`cloud`){await a.callCloudProxy({backend:n,method:`DELETE`,path:r,headers:await u()});return}await l.delete(r)}static async dispatchAutomation(t){let n=e.getActiveBackend().backend,r=`${c}${o.getAutomationIdEndpoint(`dispatch`,t)}`;if(n.kind===`cloud`)return a.callCloudProxy({backend:n,method:`POST`,path:r,headers:await u()});let{data:i}=await l.post(r);return i}static async cancelAutomationRun(t){let n=e.getActiveBackend().backend,r=`${c}/v1/runs/${encodeURIComponent(t)}/cancel`;if(n.kind===`cloud`)return a.callCloudProxy({backend:n,method:`POST`,path:r,headers:await u()});let{data:i}=await l.post(r);return i}static async listAutomationRuns(t,n={}){let{limit:r=50,offset:i=0}=n,s=e.getActiveBackend().backend,d=`${c}${o.getAutomationIdEndpoint(`runs`,t)}`;if(s.kind===`cloud`)return a.callCloudProxy({backend:s,method:`GET`,path:`${d}?${p(r,i)}`,headers:await u()});let{data:f}=await l.get(d,{params:{limit:r,offset:i}});return f}static async getAutomationRuns(e,n=50,r=0){return t.listAutomationRuns(e,{limit:n,offset:r})}static async toggleAutomation(e,n){return t.updateAutomation(e,{enabled:n})}static async downloadTarball(t,n){let r=e.getActiveBackend().backend,i=`${c}${o.getAutomationIdEndpoint(`tarball`,t)}`,s;if(r.kind===`cloud`)s=await a.callCloudProxy({backend:r,method:`GET`,path:i,responseType:`blob`,headers:await u()});else{let{data:e}=await l.get(i,{responseType:`blob`});s=e}let d=URL.createObjectURL(s),f=document.createElement(`a`);f.href=d,f.download=`${n}.tar`,f.click(),URL.revokeObjectURL(d)}static async getCapabilities(){let t=e.getActiveBackend().backend,n=`${c}${o.getAutomationEndpoint(`capabilities`)}`;if(t.kind===`cloud`)return a.callCloudProxy({backend:t,method:`GET`,path:n,headers:await u()});let{data:r}=await l.get(n);return r}static async validateDraft(t){let n=e.getActiveBackend().backend,r=`${c}${o.getAutomationEndpoint(`validate`)}`;if(n.kind===`cloud`)return a.callCloudProxy({backend:n,method:`POST`,path:r,body:t,headers:await u()});let{data:i}=await l.post(r,t);return i}static async createAutomationDraft(t,n){let
|
|
1
|
+
require("../../_virtual/_rolldown/runtime.cjs");const e=require("../backend-registry/active-store.cjs"),t=require("../agent-server-client-options.cjs"),n=require("../../node_modules/axios/lib/axios.cjs"),r=require("../client-source.cjs"),i=require("../../services/telemetry.cjs"),a=require("../cloud/proxy.cjs"),o=require("../../manifests/automation-interface.cjs"),s=require("../../manifests/automation-setup.cjs");var c=`/api/automation`,l=n.default.create();async function u(e={}){let t=await i.getTelemetryDistinctId();return{...r.AGENT_CANVAS_CLIENT_HEADERS,...t?{[r.OPENHANDS_TELEMETRY_DISTINCT_ID_HEADER]:t}:{},...e}}l.interceptors.request.use(async n=>{let r=await u();if(Object.entries(r).forEach(([e,t])=>{n.headers.set(e,t)}),n.baseURL)return n;let i=e.getEffectiveLocalBackend();if(!i)throw new t.NoBackendAvailableError;n.baseURL=i.host;let a=i.apiKey?.trim();return a&&n.headers.set(`X-Session-API-Key`,a),n});function d(e){return typeof e==`string`&&e.trim()||null}function f(e){return typeof e==`string`?d(e):d(e.sdk_version)??d(e.version)}function p(e,t){let n=new URLSearchParams;return n.set(`limit`,String(e)),n.set(`offset`,String(t)),n.toString()}function m(e){return e.trigger.type===`event`?{type:`event`,source:e.trigger.source,on:e.trigger.on,...e.trigger.filter&&{filter:e.trigger.filter}}:{type:`cron`,schedule:e.trigger.schedule,timezone:e.timezone??e.trigger.timezone??`UTC`}}function h(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?`pending.${crypto.randomUUID()}`:`pending.${Date.now()}.${Math.random().toString(36).slice(2,10)}`}function g(e){if(!e.prompt)throw Error(`An automation prompt is required for import.`);let{importDefaults:t}=o.getImportExportSpec(),n=e.repository?[{url:e.repository,...e.branch&&{ref:e.branch},...!e.repository.includes(`://`)&&!e.repository.startsWith(`git@`)&&{provider:t.repoProvider}}]:void 0;return{path:`${c}${o.getAutomationEndpoint(e.plugins?.length?`createPlugin`:`createPrompt`)}`,body:{name:e.name,prompt:e.prompt,trigger:{type:`event`,source:t.placeholderEventSource,on:h()},...e.model&&{model:e.model},...n&&{repos:n},...e.plugins?.length&&{plugins:e.plugins.map(e=>({source:e}))},...e.timeout!=null&&{timeout:e.timeout}}}}async function _(e){let t=e.apiKey.trim();return{baseURL:e.host,headers:await u(t?{"X-Session-API-Key":t}:{})}}async function v(e){return u(e.orgId?{"X-Org-Id":e.orgId}:{})}var y=class t{static async syncTelemetryConsent(t=i.getTelemetryConsent()){if(e.getActiveBackend().backend.kind!==`local`)return;let n=await i.getTelemetryDistinctIdForConsentSync();await l.post(`${c}/v1/telemetry/consent`,{consent_granted:t===`granted`,frontend_distinct_id:n},{timeout:5e3}),t!==`granted`&&n&&i.clearPendingLocalTelemetryRevocation(n)}static async getSdkVersion(){let t=e.getActiveBackend(),n=`${c}/sdk-version`;try{let e;if(t.backend.kind===`cloud`)e=await a.callCloudProxy({backend:t.backend,method:`GET`,path:n,headers:await v(t),timeoutSeconds:5});else{let{data:t}=await l.get(n,{timeout:5e3});e=t}return f(e)}catch{return null}}static async listAutomations(t={}){let{limit:n=50,offset:r=0}=t,i=e.getActiveBackend().backend;if(i.kind===`cloud`)return a.callCloudProxy({backend:i,method:`GET`,path:`${c}${o.getAutomationEndpoint(`list`)}?${p(n,r)}`,headers:await u()});let{data:s}=await l.get(`${c}${o.getAutomationEndpoint(`list`)}`,{params:{limit:n,offset:r}});return s}static async getAutomations(e=50,n=0){return t.listAutomations({limit:e,offset:n})}static async getAutomation(t){let n=e.getActiveBackend().backend,r=`${c}${o.getAutomationIdEndpoint(`detail`,t)}`;if(n.kind===`cloud`)return a.callCloudProxy({backend:n,method:`GET`,path:r,headers:await u()});let{data:i}=await l.get(r);return i}static async createAutomation(t){let n=e.getActiveBackend(),{path:r,body:i}=g(t),s;if(n.backend.kind===`cloud`)s=await a.callCloudProxy({backend:n.backend,method:`POST`,path:r,body:i,headers:await v(n)});else{let{data:e}=await l.post(r,i,await _(n.backend));s=e}let u=`${c}${o.getAutomationIdEndpoint(`detail`,s.id)}`,d={trigger:m(t),enabled:!1};try{if(n.backend.kind===`cloud`)return await a.callCloudProxy({backend:n.backend,method:`PATCH`,path:u,body:d,headers:await v(n)});let{data:e}=await l.patch(u,d,await _(n.backend));return e}catch(e){try{n.backend.kind===`cloud`?await a.callCloudProxy({backend:n.backend,method:`DELETE`,path:u,headers:await v(n)}):await l.delete(u,await _(n.backend))}catch(t){throw AggregateError([e,t],`Failed to disable the imported automation and clean it up.`)}throw e}}static async updateAutomation(t,n){let r=e.getActiveBackend().backend,i=`${c}${o.getAutomationIdEndpoint(`detail`,t)}`;if(r.kind===`cloud`)return a.callCloudProxy({backend:r,method:`PATCH`,path:i,body:n,headers:await u()});let{data:s}=await l.patch(i,n);return s}static async deleteAutomation(t){let n=e.getActiveBackend().backend,r=`${c}${o.getAutomationIdEndpoint(`detail`,t)}`;if(n.kind===`cloud`){await a.callCloudProxy({backend:n,method:`DELETE`,path:r,headers:await u()});return}await l.delete(r)}static async dispatchAutomation(t){let n=e.getActiveBackend().backend,r=`${c}${o.getAutomationIdEndpoint(`dispatch`,t)}`;if(n.kind===`cloud`)return a.callCloudProxy({backend:n,method:`POST`,path:r,headers:await u()});let{data:i}=await l.post(r);return i}static async cancelAutomationRun(t){let n=e.getActiveBackend().backend,r=`${c}/v1/runs/${encodeURIComponent(t)}/cancel`;if(n.kind===`cloud`)return a.callCloudProxy({backend:n,method:`POST`,path:r,headers:await u()});let{data:i}=await l.post(r);return i}static async listAutomationRuns(t,n={}){let{limit:r=50,offset:i=0}=n,s=e.getActiveBackend().backend,d=`${c}${o.getAutomationIdEndpoint(`runs`,t)}`;if(s.kind===`cloud`)return a.callCloudProxy({backend:s,method:`GET`,path:`${d}?${p(r,i)}`,headers:await u()});let{data:f}=await l.get(d,{params:{limit:r,offset:i}});return f}static async getAutomationRuns(e,n=50,r=0){return t.listAutomationRuns(e,{limit:n,offset:r})}static async toggleAutomation(e,n){return t.updateAutomation(e,{enabled:n})}static async downloadTarball(t,n){let r=e.getActiveBackend().backend,i=`${c}${o.getAutomationIdEndpoint(`tarball`,t)}`,s;if(r.kind===`cloud`)s=await a.callCloudProxy({backend:r,method:`GET`,path:i,responseType:`blob`,headers:await u()});else{let{data:e}=await l.get(i,{responseType:`blob`});s=e}let d=URL.createObjectURL(s),f=document.createElement(`a`);f.href=d,f.download=`${n}.tar`,f.click(),URL.revokeObjectURL(d)}static async getCapabilities(){let t=e.getActiveBackend().backend,n=`${c}${o.getAutomationEndpoint(`capabilities`)}`;if(t.kind===`cloud`)return a.callCloudProxy({backend:t,method:`GET`,path:n,headers:await u()});let{data:r}=await l.get(n);return r}static async validateDraft(t){let n=e.getActiveBackend().backend,r=`${c}${o.getAutomationEndpoint(`validate`)}`;if(n.kind===`cloud`)return a.callCloudProxy({backend:n,method:`POST`,path:r,body:t,headers:await u()});let{data:i}=await l.post(r,t);return i}static async createAutomationDraft(t,n,r){let i=e.getActiveBackend().backend,o=`${c}${s.automationCreateEndpoint(n,r)}`;if(i.kind===`cloud`)return a.callCloudProxy({backend:i,method:`POST`,path:o,body:t,headers:await u()});let{data:d}=await l.post(o,t);return d}static async uploadAutomationTarball(t,r){let i=e.getActiveBackend().backend,a=`${c}${s.automationUploadEndpoint()}?name=${encodeURIComponent(t)}`,o={"Content-Type":`application/gzip`},d;if(i.kind===`cloud`){let{orgId:t}=e.getActiveBackend();d=(await n.default.post(`${i.host.replace(/\/+$/,``)}${a}`,r,{headers:{...await u(),...o,...i.apiKey?{Authorization:`Bearer ${i.apiKey}`}:{},...t?{"X-Org-Id":t}:{}}})).data}else d=(await l.post(a,r,{headers:o})).data;let f=d.tarball_path;if(typeof f!=`string`||!f)throw Error(`The upload returned no tarball path.`);return f}static async getGitSyncStatus(){let t=e.getActiveBackend().backend,n=`${c}/v1/git-sync/status`;if(t.kind===`cloud`)return a.callCloudProxy({backend:t,method:`GET`,path:n});let{data:r}=await l.get(n);return r}static async updateGitSyncConfig(t){let n=e.getActiveBackend().backend,r=`${c}/v1/git-sync/config`;if(n.kind===`cloud`)return a.callCloudProxy({backend:n,method:`PUT`,path:r,body:t});let{data:i}=await l.put(r,t);return i}static async checkGitSyncConfig(t){let n=e.getActiveBackend().backend,r=`${c}/v1/git-sync/check`;if(n.kind===`cloud`)return a.callCloudProxy({backend:n,method:`POST`,path:r,body:t});let{data:i}=await l.post(r,t);return i}static async triggerGitSync(){let t=e.getActiveBackend().backend,n=`${c}/v1/git-sync/sync`;if(t.kind===`cloud`)return a.callCloudProxy({backend:t,method:`POST`,path:n});let{data:r}=await l.post(n);return r}static async checkHealth(){let t=e.getActiveBackend().backend,n=`${c}${o.getAutomationEndpoint(`health`)}`;try{if(t.kind===`cloud`)return await a.callCloudProxy({backend:t,method:`GET`,path:n,timeoutSeconds:5,headers:await u()});let{data:e}=await l.get(n,{timeout:5e3});return e}catch{return{status:`error`}}}};exports.default=y;
|
|
2
2
|
//# sourceMappingURL=automation-service.api.cjs.map
|