@openhands/agent-canvas 1.12.0 → 1.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/README.windows.md +2 -2
- package/build/assets/{acp-providers-BkL3HWa3.js → acp-providers-CYy8qA2z.js} +1 -1
- package/build/assets/active-backend-context-BZDG15C0.js +2 -0
- package/build/assets/{agent-context-settings-CzWS1DgR.js → agent-context-settings-DGWBBbcp.js} +1 -1
- package/build/assets/agent-profiles-settings-DrkGdf4_.js +1 -0
- package/build/assets/agent-server-conversation-service.api-DK56YPTs.js +86 -0
- package/build/assets/{agent-settings-D2J1dKVd.js → agent-settings-DfcSgkLD.js} +2 -2
- package/build/assets/agent-settings-Lrc5-twS.js +1 -0
- package/build/assets/{alert-banner-lrK-2_0Y.js → alert-banner-BgDHhL7b.js} +1 -1
- package/build/assets/api-error-message-BEIE_yD1.js +1 -0
- package/build/assets/{api-key-entry-screen-D70oJj2c.js → api-key-entry-screen-DaZnOlVo.js} +1 -1
- package/build/assets/{app-settings-D0OKHB3M.js → app-settings-BG5NAUbC.js} +1 -1
- package/build/assets/automation-detail-D4Hs831Z.js +3 -0
- package/build/assets/automation-export-n0X6FB0C.js +2 -0
- package/build/assets/automation-git-sync-CDrm8WV7.js +1 -0
- package/build/assets/automation-setup-route-CZCl4ONs.js +1 -0
- package/build/assets/{automation-templates-D9gs6ihu.js → automation-templates-DFF96AdL.js} +1 -1
- package/build/assets/automations-list-Bl-oGOrV.js +1 -0
- package/build/assets/{back-nav-button-B3pYwmUJ.js → back-nav-button-H_ThtDA0.js} +1 -1
- package/build/assets/{backend-form-modal-HwclKrUS.js → backend-form-modal-CbCemvHt.js} +1 -1
- package/build/assets/backend-not-configured-DP8KLNq_.js +1 -0
- package/build/assets/{backend-synced-settings-badge-YI3k09Wr.js → backend-synced-settings-badge-BBASWqsb.js} +1 -1
- package/build/assets/{badge-Dpn3-LTV.js → badge-B-51h-SW.js} +1 -1
- package/build/assets/{base-modal-3NmIOKDm.js → base-modal-BbjycA8X.js} +1 -1
- package/build/assets/bot-CGPCg03p.js +1 -0
- package/build/assets/{brand-button-CJcwjnfb.js → brand-button-Blxv5nww.js} +1 -1
- package/build/assets/browser-CuW0nWvh.js +7 -0
- package/build/assets/{browser-tab-4CPdj3J3.js → browser-tab-D5G0ORwt.js} +1 -1
- package/build/assets/{chat-send-button-B8n6-DQA.js → chat-send-button-BD2tii1r.js} +1 -1
- package/build/assets/check-DSuS-lyr.js +1 -0
- package/build/assets/chevron-down-CgGcmtE2.js +1 -0
- package/build/assets/circle-check-CG5-NPw7.js +1 -0
- package/build/assets/{circle-plus-check-toggle-BVzv5EkZ.js → circle-plus-check-toggle-ASbpB8vN.js} +1 -1
- package/build/assets/cloud-funnel-analytics-GlCUG0gk.js +1 -0
- package/build/assets/cog-CZiR80uT.js +1 -0
- package/build/assets/{combobox-caret-BlmRwiM8.js → combobox-caret-DvpEsh2O.js} +1 -1
- package/build/assets/{command-menu-BKOLj-TC.js → command-menu-DwUQzjYP.js} +1 -1
- package/build/assets/{condenser-settings-DLQogFnB.js → condenser-settings-BptcoiLA.js} +1 -1
- package/build/assets/{confirmation-modal-DAH0XtOp.js → confirmation-modal-CiEwxZAA.js} +1 -1
- package/build/assets/{context-menu-list-item-BQhmFVEK.js → context-menu-list-item-CdcamfM1.js} +1 -1
- package/build/assets/conversation-DREHj4nT.js +1 -0
- package/build/assets/conversation-DotRfiDz.js +90 -0
- package/build/assets/conversation-panel-DREHj4nT.js +1 -0
- package/build/assets/conversation-state-store-DMLtlHbE.js +1 -0
- package/build/assets/conversation-store-Blc5xysY.js +6 -0
- package/build/assets/{conversation-tab-empty-state-C9sfDOlt.js → conversation-tab-empty-state-D-puECpY.js} +1 -1
- package/build/assets/{copy-to-clipboard-button-DatoElj8.js → copy-to-clipboard-button-BGxcUbgy.js} +1 -1
- package/build/assets/{device-verify-BIjXeW9N.js → device-verify-CZJfWaJf.js} +1 -1
- package/build/assets/{dropdown-classes-zFW7qPSK.js → dropdown-classes-tLhpwtxS.js} +1 -1
- package/build/assets/{entry.client-EBn3ZtNP.js → entry.client-D8GnI6GZ.js} +2 -2
- package/build/assets/{enum-filter-dropdown-CctILg5t.js → enum-filter-dropdown-Fk8k60nk.js} +1 -1
- package/build/assets/{environment-switch-overlay-Cvmo6clk.js → environment-switch-overlay-DeztVYuL.js} +1 -1
- package/build/assets/{extensions-hub-BZ3HYztk.js → extensions-hub-Cd6GCYzq.js} +1 -1
- package/build/assets/{extensions-navigation-Bnx32WAb.js → extensions-navigation-C4sgZg-y.js} +1 -1
- package/build/assets/external-link-C0UpBgsE.js +1 -0
- package/build/assets/{file-text-RecuaId_.js → file-text-C6WYtNdV.js} +1 -1
- package/build/assets/files-tab-BW_qzyAm.js +1 -0
- package/build/assets/{form-control-classes-DLN3Qgub.js → form-control-classes-CGXBLcn1.js} +1 -1
- package/build/assets/format-model-name-BNPKVsIq.js +1 -0
- package/build/assets/format-relative-time-ZhQD4rsl.js +1 -0
- package/build/assets/git-provider-icon-CaQ1yLPi.js +1 -0
- package/build/assets/{git-repo-dropdown-B5VnMftu.js → git-repo-dropdown-CgXR6M_E.js} +1 -1
- package/build/assets/git-repo-dropdown-D2Uei3CO.js +1 -0
- package/build/assets/{highlighted-source-view-CgJfD5VT.js → highlighted-source-view-C_YOp8Fo.js} +1 -1
- package/build/assets/home-DNzzJcMP.js +1 -0
- package/build/assets/home-aCos-5vc.js +1 -0
- package/build/assets/{home-store-Cubdq0uP.js → home-store-DgzViC3f.js} +1 -1
- package/build/assets/index-home-DNzzJcMP.js +1 -0
- package/build/assets/info-CLoC1LRo.js +1 -0
- package/build/assets/install-server-modal-D7zIqNKz.js +1 -0
- package/build/assets/kebab-menu-item-content-DERMdnDv.js +1 -0
- package/build/assets/{launch-c4GEP8oo.js → launch-5PjKeLak.js} +1 -1
- package/build/assets/{list-todo-CheUtB7F.js → list-todo-BF049YaY.js} +1 -1
- package/build/assets/llm-not-configured-banner-BK9z5eS0.js +27 -0
- package/build/assets/llm-settings-BLAMK2tR.js +1 -0
- package/build/assets/llm-settings-BWsbarGM.js +1 -0
- package/build/assets/llm-subscription-service-SfnEV9Uc.js +1 -0
- package/build/assets/loader-circle-D7IagAyF.js +1 -0
- package/build/assets/{loading-spinner-CN3riY7k.js → loading-spinner-DBgXgra0.js} +1 -1
- package/build/assets/{manage-backends-modal-DTCME_Pu.js → manage-backends-modal-BTqNPhzc.js} +1 -1
- package/build/assets/manifest-abebca3c.js +1 -0
- package/build/assets/manifest-subpage-layout-Rn-glaxV.js +1 -0
- package/build/assets/{map-provider-7Bp2aih5.js → map-provider-BK4HnqYz.js} +1 -1
- package/build/assets/markdown-renderer-Cp6DlHQN.js +8 -0
- package/build/assets/{mcp-Da7wFU7A.js → mcp-BC-Ixn4T.js} +2 -2
- package/build/assets/mcp-marketplace-utils-BJWJgbB6.js +1 -0
- package/build/assets/messages-CzFKrzPG.js +40 -0
- package/build/assets/{modal-body-duRaxj_K.js → modal-body-BdKfD3Hl.js} +1 -1
- package/build/assets/{modal-classes-CLEXO6dj.js → modal-classes-D5_b5vMi.js} +1 -1
- package/build/assets/{modal-close-button-D0aT02hs.js → modal-close-button-objukxk_.js} +1 -1
- package/build/assets/{mouse-pointer-click-Px-dXWcS.js → mouse-pointer-click-C_gXyLyD.js} +1 -1
- package/build/assets/{npm-Cswluf6-.js → npm-CHVHV1MC.js} +1 -1
- package/build/assets/{onboarding-BKbTYlW1.js → onboarding-Diw0V51A.js} +1 -1
- package/build/assets/onboarding-modal-Da4yHzsA.js +1 -0
- package/build/assets/{organization-service.api-DK8csGvK.js → organization-service.api-BztSy69u.js} +1 -1
- package/build/assets/parse-git-remote-url-BkXN9jzl.js +1 -0
- package/build/assets/pencil-49avMHlD.js +1 -0
- package/build/assets/{planner-tab-D-mZ1I7n.js → planner-tab-CJiSpNax.js} +1 -1
- package/build/assets/{plugins-management-service-CywqyfLK.js → plugins-management-service-lHdNKWNU.js} +1 -1
- package/build/assets/plus-C0BagBpV.js +1 -0
- package/build/assets/profiles-service.api-BLr7FXec.js +1 -0
- package/build/assets/providers-CWXnb7S3.js +1 -0
- package/build/assets/{proxy-b4aqL4SX.js → proxy-DYDXxtje.js} +1 -1
- package/build/assets/{puzzle-B3v361yY.js → puzzle-Bt2B1rzf.js} +1 -1
- package/build/assets/recommended-automations-launcher-CcFMfJRR.js +1 -0
- package/build/assets/refresh-cw-nmcesifB.js +1 -0
- package/build/assets/root-CT4t7apy.css +1 -0
- package/build/assets/root-DnRgLKpU.js +2 -0
- package/build/assets/root-layout-2L9tr-BN.js +2 -0
- package/build/assets/{schema-field-Z-rMg9ti.js → schema-field-C59lVZTA.js} +1 -1
- package/build/assets/{sdk-section-page-m_cjygxR.js → sdk-section-page-BbBEQQjq.js} +1 -1
- package/build/assets/search-CYSDBczG.js +1 -0
- package/build/assets/secrets-service-BtsgYSlj.js +1 -0
- package/build/assets/secrets-settings-DJ0OKa4_.js +1 -0
- package/build/assets/{segmented-toggle-SmvsR3jW.js → segmented-toggle-DiVfTZuN.js} +1 -1
- package/build/assets/{settings-CZPGNens.js → settings-CDqL_Uqh.js} +1 -1
- package/build/assets/{settings-CWFxymAf.js → settings-DcNPxz0v.js} +1 -1
- package/build/assets/{settings-dropdown-input-TWIeiG02.js → settings-dropdown-input-Ba1UN5Du.js} +1 -1
- package/build/assets/{settings-index-Dtlegd6s.js → settings-index-Cz2cKt2K.js} +1 -1
- package/build/assets/{settings-input-D61Vzp9e.js → settings-input-CWUEHHvS.js} +1 -1
- package/build/assets/{settings-list-classes-sE0ASr1s.js → settings-list-classes-DdcLXDGn.js} +1 -1
- package/build/assets/{settings-modal-CalzJP2l.js → settings-modal-nEEK1Kh1.js} +1 -1
- package/build/assets/{settings-service.api-DfPYaxZJ.js → settings-service.api-3yAUFcaP.js} +1 -1
- package/build/assets/{settings-switch-Drt-rF5s.js → settings-switch-Dk9hChx1.js} +1 -1
- package/build/assets/{settings-utils-gw2ppAvw.js → settings-utils-CxjtCSB3.js} +1 -1
- package/build/assets/shared-conversation-DbAcrx3s.js +1 -0
- package/build/assets/shield-check-CiOTXxV2.js +1 -0
- package/build/assets/{sidebar-layout-Dxg6zc2K.js → sidebar-layout-lrfPooIB.js} +1 -1
- package/build/assets/{sidebar-mobile-menu-toggle-C6HpQ55l.js → sidebar-mobile-menu-toggle-KERXfNu1.js} +1 -1
- package/build/assets/{sidebar-nav-link-CxLoG-dG.js → sidebar-nav-link-B8lFD6Cb.js} +1 -1
- package/build/assets/{sidebar-store-BJeYY-E9.js → sidebar-store-u6pUpxJ7.js} +1 -1
- package/build/assets/{skill-card-pill-row-B_BYBONu.js → skill-card-pill-row-dGIUzr_b.js} +1 -1
- package/build/assets/{skill-icon-badge-CN41Hy9l.js → skill-icon-badge-kkOWZ89w.js} +1 -1
- package/build/assets/{skill-scope-Dt1V5X2p.js → skill-scope-DWN1PBPH.js} +1 -1
- package/build/assets/{skills-plugins-B-H0cCOP.js → skills-plugins-DFjH2Nq6.js} +1 -1
- package/build/assets/{skills-settings-DthdIDUb.js → skills-settings-DIHpl3ol.js} +2 -2
- package/build/assets/{sparkles-g7y3r-Ut.js → sparkles-ntyMLnbj.js} +1 -1
- package/build/assets/{styled-tooltip-C5C07RQC.js → styled-tooltip-B6JXcsmL.js} +1 -1
- package/build/assets/{task-list-tab-BTde81Iu.js → task-list-tab-aEJzEcHD.js} +1 -1
- package/build/assets/{terminal-DRrJo-cR.js → terminal-Dch7Ty5K.js} +1 -1
- package/build/assets/{toggle-switch-CIioisto.js → toggle-switch-B2MLKsgt.js} +1 -1
- package/build/assets/trash-2-yZnDM4Ji.js +1 -0
- package/build/assets/{typography-D9tiHct7.js → typography-DB5HoCk0.js} +1 -1
- package/build/assets/usage-tab-DrEtBmBT.js +1 -0
- package/build/assets/use-acp-credential-form-c8KXAa8A.js +1 -0
- package/build/assets/{use-activate-agent-profile-DrPzIKJF.js → use-activate-agent-profile-B0p34N3q.js} +1 -1
- package/build/assets/use-agent-profiles-CPIc6wLH.js +1 -0
- package/build/assets/{use-can-manage-org-profiles-BzE28H3x.js → use-can-manage-org-profiles-Dz_8Eqkv.js} +1 -1
- package/build/assets/{use-cloud-current-user-id-U6HPjy50.js → use-cloud-current-user-id-DvUVqCle.js} +1 -1
- package/build/assets/use-config-C3PO4TBw.js +1 -0
- package/build/assets/use-create-conversation-DVrA_uLD.js +1 -0
- package/build/assets/use-create-secret-DbBIpaCR.js +1 -0
- package/build/assets/use-get-secrets-6PBitf54.js +1 -0
- package/build/assets/use-has-permission-CQ31Cl8j.js +1 -0
- package/build/assets/use-is-authed-2UrDIziV.js +1 -0
- package/build/assets/use-is-creating-conversation-BvYpmb3v.js +1 -0
- package/build/assets/{use-launch-skill-in-chat-BcKNjxxd.js → use-launch-skill-in-chat-COnDpxCQ.js} +1 -1
- package/build/assets/use-llm-profiles-diZS4FiN.js +1 -0
- package/build/assets/use-manifest-capabilities-HIWCtIUm.js +1 -0
- package/build/assets/{use-onboarding-completion-6kWOW3ul.js → use-onboarding-completion-Bs8PcXik.js} +1 -1
- package/build/assets/{use-plugins-marketplace-CqkR8kLE.js → use-plugins-marketplace-BCuNLFsr.js} +1 -1
- package/build/assets/use-save-agent-profile-BaMNSpBV.js +1 -0
- package/build/assets/{use-save-settings-DIEurJ3D.js → use-save-settings-BahvC2Gw.js} +1 -1
- package/build/assets/{use-settings-BmLzQjnC.js → use-settings-C6ZxpBDX.js} +1 -1
- package/build/assets/{use-settings-nav-items-DV9qgeu7.js → use-settings-nav-items-Bqn69Ggw.js} +2 -2
- package/build/assets/use-tracking-Bhu7gk2y.js +3 -0
- package/build/assets/{use-user-conversation-Dt-W6uNw.js → use-user-conversation-BkNXpXrd.js} +1 -1
- package/build/assets/{useInfiniteQuery-DbCv0Jzd.js → useInfiniteQuery-c_OmS3lK.js} +1 -1
- package/build/assets/{useMutation-ChpkYxI5.js → useMutation-6ZsQCqAn.js} +1 -1
- package/build/assets/{useQueries-Cjv3E8_1.js → useQueries-xDrGlTO_.js} +1 -1
- package/build/assets/{useQuery-BCnzy4LX.js → useQuery-Bs5NFz2s.js} +1 -1
- package/build/assets/utils-DUD5ScdA.js +1 -0
- package/build/assets/{vendor~browser-DJ1pl_wn.js → vendor~browser-B-fae1JU.js} +14 -14
- package/build/assets/{vendor~entry.client-CgNUwtQL.js → vendor~entry.client-BFE7Llz9.js} +1 -1
- package/build/assets/{vendor~entry.client-zSIea5EO.js → vendor~entry.client-BaKt_PIp.js} +1 -1
- package/build/assets/{vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~kv3pap4j-oGvLV0dO.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~kepq2zme-D87mAf6K.js} +3 -3
- package/build/assets/{vendor~files-tab-C87pjSpi.js → vendor~files-tab-B6POTS66.js} +1 -1
- package/build/assets/vendor~index-home~home~conversation-panel~conversation-53Q_U6uP.js +13 -0
- package/build/assets/vendor~root-layout-DeQACFVA.js +1 -0
- package/build/assets/{vendor~root-layout~conversation-panel~conversation-DEzjR4K7.js → vendor~root-layout~conversation-panel~conversation-bv7ooVgH.js} +1 -1
- package/build/assets/{vendor~root-layout~conversation-panel~conversation~skills-settings~automations-list~shared-~bovqqk8e-U-xdsAEx.js → vendor~root-layout~conversation-panel~conversation~skills-settings~automations-list~shared-~bovqqk8e-e8pX05xf.js} +1 -1
- package/build/assets/{vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation-CQR5Sa0H.js → vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation-BvS6PCK2.js} +1 -1
- package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~hjcjabwg-CuQhkiS7.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~hjcjabwg-DOPLJMH9.js} +2 -2
- package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~gxu4j2ea-Cwhh3zLe.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~iw7io29p-Dz8NQve5.js} +1 -1
- package/build/assets/{verification-settings-oi54wEc1.js → verification-settings-COueVXmM.js} +1 -1
- package/build/assets/{wrench-B1_H-tL1.js → wrench-C95ujnYo.js} +1 -1
- package/build/assets/x-86ZCfxKY.js +1 -0
- package/build/assets/zap-DRa-r-Tf.js +1 -0
- package/build/index.html +4 -4
- package/build/locales/ar/openhands.json +88 -3
- package/build/locales/ca/openhands.json +88 -3
- package/build/locales/de/openhands.json +88 -3
- package/build/locales/en/openhands.json +88 -3
- package/build/locales/es/openhands.json +88 -3
- package/build/locales/fr/openhands.json +88 -3
- package/build/locales/it/openhands.json +88 -3
- package/build/locales/ja/openhands.json +88 -3
- package/build/locales/ko-KR/openhands.json +88 -3
- package/build/locales/no/openhands.json +88 -3
- package/build/locales/pt/openhands.json +88 -3
- package/build/locales/tr/openhands.json +88 -3
- package/build/locales/uk/openhands.json +88 -3
- package/build/locales/zh-CN/openhands.json +88 -3
- package/build/locales/zh-TW/openhands.json +88 -3
- package/config/defaults.json +3 -3
- package/dist/api/agent-server-compatibility.cjs +1 -1
- package/dist/api/agent-server-compatibility.cjs.map +1 -1
- package/dist/api/agent-server-compatibility.js +1 -1
- package/dist/api/agent-server-compatibility.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 +10 -0
- package/dist/api/automation-service/automation-service.api.js +42 -0
- package/dist/api/automation-service/automation-service.api.js.map +1 -1
- 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 +9 -0
- package/dist/api/cloud/conversation-service.api.js +11 -1
- package/dist/api/cloud/conversation-service.api.js.map +1 -1
- package/dist/api/conversation-service/agent-server-conversation-service.api.cjs +1 -1
- package/dist/api/conversation-service/agent-server-conversation-service.api.cjs.map +1 -1
- package/dist/api/conversation-service/agent-server-conversation-service.api.d.ts +24 -1
- package/dist/api/conversation-service/agent-server-conversation-service.api.js +116 -97
- package/dist/api/conversation-service/agent-server-conversation-service.api.js.map +1 -1
- package/dist/api/llm-balance-service.cjs +2 -0
- package/dist/api/llm-balance-service.cjs.map +1 -0
- package/dist/api/llm-balance-service.d.ts +33 -0
- package/dist/api/llm-balance-service.js +53 -0
- package/dist/api/llm-balance-service.js.map +1 -0
- package/dist/api/llm-subscription-service.cjs +1 -1
- package/dist/api/llm-subscription-service.cjs.map +1 -1
- package/dist/api/llm-subscription-service.js +42 -34
- package/dist/api/llm-subscription-service.js.map +1 -1
- package/dist/api/profiles-service/profiles-service.api.cjs +1 -1
- package/dist/api/profiles-service/profiles-service.api.cjs.map +1 -1
- package/dist/api/profiles-service/profiles-service.api.d.ts +15 -2
- package/dist/api/profiles-service/profiles-service.api.js +25 -2
- package/dist/api/profiles-service/profiles-service.api.js.map +1 -1
- package/dist/api/secrets-service.cjs +1 -1
- package/dist/api/secrets-service.cjs.map +1 -1
- package/dist/api/secrets-service.d.ts +5 -0
- package/dist/api/secrets-service.js +12 -6
- package/dist/api/secrets-service.js.map +1 -1
- package/dist/components/conversation/index.cjs +1 -1
- package/dist/components/conversation/index.d.ts +0 -1
- package/dist/components/conversation/index.js +0 -1
- package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.cjs +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.cjs.map +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.js +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.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.js +24 -23
- 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/index.d.ts +0 -1
- package/dist/components/conversation-events/chat/group-events.cjs +1 -1
- package/dist/components/conversation-events/chat/group-events.cjs.map +1 -1
- package/dist/components/conversation-events/chat/group-events.d.ts +3 -3
- package/dist/components/conversation-events/chat/group-events.js +27 -26
- package/dist/components/conversation-events/chat/group-events.js.map +1 -1
- package/dist/components/features/automations/git-sync/git-sync-activity-row.d.ts +15 -0
- package/dist/components/features/automations/git-sync/git-sync-config-form.d.ts +13 -0
- package/dist/components/features/automations/git-sync/git-sync-error-banner.d.ts +6 -0
- package/dist/components/features/automations/git-sync/git-sync-not-local-state.d.ts +1 -0
- package/dist/components/features/automations/git-sync/git-sync-overview-section.d.ts +12 -0
- package/dist/components/features/automations/git-sync/git-sync-skeleton.d.ts +1 -0
- package/dist/components/features/automations/git-sync/git-sync-status-pill.d.ts +7 -0
- package/dist/components/features/automations/git-sync/git-sync-unsupported-state.d.ts +7 -0
- package/dist/components/features/automations/recommended-automations-section.d.ts +7 -0
- package/dist/components/features/automations/responder-deployment-modal.d.ts +2 -1
- package/dist/components/features/chat/chat-interface.cjs +2 -2
- package/dist/components/features/chat/chat-interface.cjs.map +1 -1
- package/dist/components/features/chat/chat-interface.js +177 -176
- package/dist/components/features/chat/chat-interface.js.map +1 -1
- package/dist/components/features/chat/components/chat-input-actions.cjs +1 -1
- package/dist/components/features/chat/components/chat-input-actions.cjs.map +1 -1
- package/dist/components/features/chat/components/chat-input-actions.js +123 -118
- package/dist/components/features/chat/components/chat-input-actions.js.map +1 -1
- package/dist/components/features/chat/components/chat-input-grip.cjs +1 -1
- package/dist/components/features/chat/components/chat-input-grip.cjs.map +1 -1
- package/dist/components/features/chat/components/chat-input-grip.d.ts +2 -1
- package/dist/components/features/chat/components/chat-input-grip.js +7 -7
- package/dist/components/features/chat/components/chat-input-grip.js.map +1 -1
- package/dist/components/features/chat/components/context-window-meter.cjs +2 -0
- package/dist/components/features/chat/components/context-window-meter.cjs.map +1 -0
- package/dist/components/features/chat/components/context-window-meter.d.ts +2 -0
- package/dist/components/features/chat/components/context-window-meter.js +131 -0
- package/dist/components/features/chat/components/context-window-meter.js.map +1 -0
- package/dist/components/features/chat/components/context-window-ring.cjs +2 -0
- package/dist/components/features/chat/components/context-window-ring.cjs.map +1 -0
- package/dist/components/features/chat/components/context-window-ring.d.ts +26 -0
- package/dist/components/features/chat/components/context-window-ring.js +45 -0
- package/dist/components/features/chat/components/context-window-ring.js.map +1 -0
- package/dist/components/features/chat/custom-chat-input.cjs +1 -1
- package/dist/components/features/chat/custom-chat-input.cjs.map +1 -1
- package/dist/components/features/chat/custom-chat-input.js +68 -67
- package/dist/components/features/chat/custom-chat-input.js.map +1 -1
- package/dist/components/features/chat/error-message-banner.cjs +1 -1
- package/dist/components/features/chat/error-message-banner.cjs.map +1 -1
- package/dist/components/features/chat/error-message-banner.d.ts +3 -1
- package/dist/components/features/chat/error-message-banner.js +64 -58
- package/dist/components/features/chat/error-message-banner.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.js +9 -6
- package/dist/components/features/chat/path-component.js.map +1 -1
- package/dist/components/features/chat/plan-preview.cjs +1 -1
- package/dist/components/features/chat/plan-preview.js +4 -4
- 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.d.ts +0 -8
- package/dist/components/features/chat/tool-visualizers/file-editor/file-editor.js +92 -50
- 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 +7 -2
- package/dist/components/features/chat/tool-visualizers/primitives/file-path-chip.js +15 -9
- package/dist/components/features/chat/tool-visualizers/primitives/file-path-chip.js.map +1 -1
- package/dist/components/features/chat/tool-visualizers/primitives/markdown-file-preview.cjs +2 -0
- package/dist/components/features/chat/tool-visualizers/primitives/markdown-file-preview.cjs.map +1 -0
- package/dist/components/features/chat/tool-visualizers/primitives/markdown-file-preview.d.ts +20 -0
- package/dist/components/features/chat/tool-visualizers/primitives/markdown-file-preview.js +76 -0
- package/dist/components/features/chat/tool-visualizers/primitives/markdown-file-preview.js.map +1 -0
- package/dist/components/features/controls/server-status-context-menu.cjs +1 -1
- package/dist/components/features/controls/server-status-context-menu.cjs.map +1 -1
- package/dist/components/features/controls/server-status-context-menu.d.ts +5 -3
- package/dist/components/features/controls/server-status-context-menu.js +8 -8
- package/dist/components/features/controls/server-status-context-menu.js.map +1 -1
- package/dist/components/features/conversation/conversation-name-context-menu.cjs +1 -1
- package/dist/components/features/conversation/conversation-name-context-menu.cjs.map +1 -1
- package/dist/components/features/conversation/conversation-name-context-menu.js +58 -61
- package/dist/components/features/conversation/conversation-name-context-menu.js.map +1 -1
- package/dist/components/features/conversation/conversation-name-with-status.cjs +1 -1
- package/dist/components/features/conversation/conversation-name-with-status.cjs.map +1 -1
- package/dist/components/features/conversation/conversation-name-with-status.js +74 -46
- package/dist/components/features/conversation/conversation-name-with-status.js.map +1 -1
- package/dist/components/features/conversation/conversation-name.cjs +1 -1
- package/dist/components/features/conversation/conversation-name.cjs.map +1 -1
- package/dist/components/features/conversation/conversation-name.js +69 -71
- package/dist/components/features/conversation/conversation-name.js.map +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/conversation-tab-content.cjs +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/conversation-tab-content.cjs.map +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/conversation-tab-content.js +7 -6
- package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/conversation-tab-content.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 +92 -86
- 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 +81 -71
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs.js.map +1 -1
- package/dist/components/features/conversation/metrics-modal/cost-section.cjs +1 -1
- package/dist/components/features/conversation/metrics-modal/cost-section.cjs.map +1 -1
- package/dist/components/features/conversation/metrics-modal/cost-section.js +6 -6
- package/dist/components/features/conversation/metrics-modal/cost-section.js.map +1 -1
- package/dist/components/features/conversation/metrics-modal/metric-row.cjs +1 -1
- package/dist/components/features/conversation/metrics-modal/metric-row.cjs.map +1 -1
- package/dist/components/features/conversation/metrics-modal/metric-row.d.ts +2 -1
- package/dist/components/features/conversation/metrics-modal/metric-row.js +10 -9
- package/dist/components/features/conversation/metrics-modal/metric-row.js.map +1 -1
- package/dist/components/features/conversation/metrics-modal/usage-section.cjs +1 -1
- package/dist/components/features/conversation/metrics-modal/usage-section.cjs.map +1 -1
- package/dist/components/features/conversation/metrics-modal/usage-section.js +2 -1
- package/dist/components/features/conversation/metrics-modal/usage-section.js.map +1 -1
- package/dist/components/features/conversation/usage-panel/compact-context-button.cjs +2 -0
- package/dist/components/features/conversation/usage-panel/compact-context-button.cjs.map +1 -0
- package/dist/components/features/conversation/usage-panel/compact-context-button.d.ts +16 -0
- package/dist/components/features/conversation/usage-panel/compact-context-button.js +59 -0
- package/dist/components/features/conversation/usage-panel/compact-context-button.js.map +1 -0
- package/dist/components/features/conversation/usage-panel/context-meter.cjs +2 -0
- package/dist/components/features/conversation/usage-panel/context-meter.cjs.map +1 -0
- package/dist/components/features/conversation/usage-panel/context-meter.d.ts +19 -0
- package/dist/components/features/conversation/usage-panel/context-meter.js +46 -0
- package/dist/components/features/conversation/usage-panel/context-meter.js.map +1 -0
- package/dist/components/features/conversation/usage-panel/provider-balance-card.cjs +2 -0
- package/dist/components/features/conversation/usage-panel/provider-balance-card.cjs.map +1 -0
- package/dist/components/features/conversation/usage-panel/provider-balance-card.d.ts +7 -0
- package/dist/components/features/conversation/usage-panel/provider-balance-card.js +57 -0
- package/dist/components/features/conversation/usage-panel/provider-balance-card.js.map +1 -0
- package/dist/components/features/conversation/usage-panel/usage-panel.cjs +2 -0
- package/dist/components/features/conversation/usage-panel/usage-panel.cjs.map +1 -0
- package/dist/components/features/conversation/usage-panel/usage-panel.d.ts +9 -0
- package/dist/components/features/conversation/usage-panel/usage-panel.js +68 -0
- package/dist/components/features/conversation/usage-panel/usage-panel.js.map +1 -0
- package/dist/components/features/conversation-panel/budget-display.cjs +1 -1
- package/dist/components/features/conversation-panel/budget-display.cjs.map +1 -1
- package/dist/components/features/conversation-panel/budget-display.js +10 -13
- package/dist/components/features/conversation-panel/budget-display.js.map +1 -1
- package/dist/components/features/conversation-panel/budget-progress-bar.cjs +1 -1
- package/dist/components/features/conversation-panel/budget-progress-bar.cjs.map +1 -1
- package/dist/components/features/conversation-panel/budget-progress-bar.js +2 -2
- package/dist/components/features/conversation-panel/budget-progress-bar.js.map +1 -1
- package/dist/components/features/conversation-panel/compact-conversation-row.cjs +1 -1
- package/dist/components/features/conversation-panel/compact-conversation-row.js +6 -6
- package/dist/components/features/conversation-panel/confirm-archive-modal.cjs +2 -0
- package/dist/components/features/conversation-panel/confirm-archive-modal.cjs.map +1 -0
- package/dist/components/features/conversation-panel/confirm-archive-modal.d.ts +8 -0
- package/dist/components/features/conversation-panel/confirm-archive-modal.js +48 -0
- package/dist/components/features/conversation-panel/confirm-archive-modal.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 +3 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.js +39 -34
- 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 +3 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.js +104 -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-footer.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.d.ts +7 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.js +25 -17
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.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 +9 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card.js +94 -84
- package/dist/components/features/conversation-panel/conversation-card/conversation-card.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-group-folder-list.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-group-folder-list.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-group-folder-list.d.ts +2 -1
- package/dist/components/features/conversation-panel/conversation-group-folder-list.js +32 -31
- package/dist/components/features/conversation-panel/conversation-group-folder-list.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-group-folder-row.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-group-folder-row.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-group-folder-row.d.ts +2 -1
- package/dist/components/features/conversation-panel/conversation-group-folder-row.js +27 -26
- package/dist/components/features/conversation-panel/conversation-group-folder-row.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-panel-filter-menu.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-panel-filter-menu.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-panel-filter-menu.d.ts +3 -1
- package/dist/components/features/conversation-panel/conversation-panel-filter-menu.js +116 -106
- package/dist/components/features/conversation-panel/conversation-panel-filter-menu.js.map +1 -1
- 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 +27 -0
- package/dist/components/features/conversation-panel/conversation-panel-list-helpers.js +69 -46
- 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 +240 -175
- package/dist/components/features/conversation-panel/conversation-panel.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.cjs.map +1 -1
- package/dist/components/features/files-tab/file-content-viewer.js +22 -25
- package/dist/components/features/files-tab/file-content-viewer.js.map +1 -1
- package/dist/components/features/markdown/markdown-table-scroll.cjs +1 -1
- package/dist/components/features/markdown/markdown-table-scroll.cjs.map +1 -1
- package/dist/components/features/markdown/markdown-table-scroll.js +2 -2
- package/dist/components/features/markdown/markdown-table-scroll.js.map +1 -1
- package/dist/components/features/onboarding/steps/setup-llm-step.d.ts +10 -7
- package/dist/components/shared/buttons/conversation-confirmation-buttons.cjs +1 -1
- package/dist/components/shared/buttons/conversation-confirmation-buttons.cjs.map +1 -1
- package/dist/components/shared/buttons/conversation-confirmation-buttons.js +2 -2
- package/dist/components/shared/buttons/conversation-confirmation-buttons.js.map +1 -1
- package/dist/components/shared/modals/confirmation-modals/base-modal.cjs +1 -1
- package/dist/components/shared/modals/confirmation-modals/base-modal.cjs.map +1 -1
- package/dist/components/shared/modals/confirmation-modals/base-modal.js +1 -1
- package/dist/components/shared/modals/confirmation-modals/base-modal.js.map +1 -1
- package/dist/config/defaults.cjs +1 -1
- package/dist/config/defaults.cjs.map +1 -1
- package/dist/config/defaults.js +3 -3
- package/dist/config/defaults.js.map +1 -1
- package/dist/constants/llm-balance.cjs +2 -0
- package/dist/constants/llm-balance.cjs.map +1 -0
- package/dist/constants/llm-balance.d.ts +13 -0
- package/dist/constants/llm-balance.js +6 -0
- package/dist/constants/llm-balance.js.map +1 -0
- package/dist/contexts/conversation-websocket-context.cjs +2 -2
- package/dist/contexts/conversation-websocket-context.cjs.map +1 -1
- package/dist/contexts/conversation-websocket-context.js +227 -219
- package/dist/contexts/conversation-websocket-context.js.map +1 -1
- package/dist/hooks/chat/use-grip-resize.cjs +1 -1
- package/dist/hooks/chat/use-grip-resize.cjs.map +1 -1
- package/dist/hooks/chat/use-grip-resize.d.ts +1 -0
- package/dist/hooks/chat/use-grip-resize.js +39 -30
- package/dist/hooks/chat/use-grip-resize.js.map +1 -1
- package/dist/hooks/mutation/use-condense-conversation.cjs +2 -0
- package/dist/hooks/mutation/use-condense-conversation.cjs.map +1 -0
- package/dist/hooks/mutation/use-condense-conversation.d.ts +12 -0
- package/dist/hooks/mutation/use-condense-conversation.js +17 -0
- package/dist/hooks/mutation/use-condense-conversation.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 +30 -21
- package/dist/hooks/mutation/use-create-conversation.js.map +1 -1
- package/dist/hooks/mutation/use-new-conversation-command.cjs +1 -1
- package/dist/hooks/mutation/use-new-conversation-command.cjs.map +1 -1
- package/dist/hooks/mutation/use-new-conversation-command.js +1 -1
- package/dist/hooks/mutation/use-new-conversation-command.js.map +1 -1
- 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-metrics.cjs +1 -1
- package/dist/hooks/query/use-conversation-metrics.cjs.map +1 -1
- package/dist/hooks/query/use-conversation-metrics.js +1 -1
- package/dist/hooks/query/use-conversation-metrics.js.map +1 -1
- package/dist/hooks/query/use-git-sync.d.ts +19 -0
- package/dist/hooks/query/use-llm-balance.cjs +2 -0
- package/dist/hooks/query/use-llm-balance.cjs.map +1 -0
- package/dist/hooks/query/use-llm-balance.d.ts +10 -0
- package/dist/hooks/query/use-llm-balance.js +24 -0
- package/dist/hooks/query/use-llm-balance.js.map +1 -0
- 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 +1 -1
- package/dist/hooks/query/use-search-providers.js.map +1 -1
- package/dist/hooks/query/use-task-polling.cjs +1 -1
- package/dist/hooks/query/use-task-polling.cjs.map +1 -1
- package/dist/hooks/query/use-task-polling.js +12 -10
- package/dist/hooks/query/use-task-polling.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-workspace-files.cjs +1 -1
- package/dist/hooks/query/use-workspace-files.cjs.map +1 -1
- package/dist/hooks/query/use-workspace-files.d.ts +14 -4
- package/dist/hooks/query/use-workspace-files.js +45 -32
- package/dist/hooks/query/use-workspace-files.js.map +1 -1
- package/dist/hooks/use-await-context-compaction.cjs +2 -0
- package/dist/hooks/use-await-context-compaction.cjs.map +1 -0
- package/dist/hooks/use-await-context-compaction.d.ts +38 -0
- package/dist/hooks/use-await-context-compaction.js +61 -0
- package/dist/hooks/use-await-context-compaction.js.map +1 -0
- package/dist/hooks/use-compact-context-action.cjs +2 -0
- package/dist/hooks/use-compact-context-action.cjs.map +1 -0
- package/dist/hooks/use-compact-context-action.d.ts +10 -0
- package/dist/hooks/use-compact-context-action.js +61 -0
- package/dist/hooks/use-compact-context-action.js.map +1 -0
- package/dist/hooks/use-context-window-usage.cjs +2 -0
- package/dist/hooks/use-context-window-usage.cjs.map +1 -0
- package/dist/hooks/use-context-window-usage.d.ts +5 -0
- package/dist/hooks/use-context-window-usage.js +20 -0
- package/dist/hooks/use-context-window-usage.js.map +1 -0
- package/dist/hooks/use-conversation-name-context-menu.cjs +1 -1
- package/dist/hooks/use-conversation-name-context-menu.cjs.map +1 -1
- package/dist/hooks/use-conversation-name-context-menu.d.ts +0 -3
- package/dist/hooks/use-conversation-name-context-menu.js +54 -57
- package/dist/hooks/use-conversation-name-context-menu.js.map +1 -1
- package/dist/hooks/use-drag-resize.cjs +1 -1
- package/dist/hooks/use-drag-resize.cjs.map +1 -1
- package/dist/hooks/use-drag-resize.d.ts +8 -0
- package/dist/hooks/use-drag-resize.js +21 -18
- package/dist/hooks/use-drag-resize.js.map +1 -1
- package/dist/hooks/use-live-conversation-metrics.cjs +2 -0
- package/dist/hooks/use-live-conversation-metrics.cjs.map +1 -0
- package/dist/hooks/use-live-conversation-metrics.d.ts +18 -0
- package/dist/hooks/use-live-conversation-metrics.js +37 -0
- package/dist/hooks/use-live-conversation-metrics.js.map +1 -0
- package/dist/hooks/use-responder-url-secret.d.ts +5 -0
- package/dist/hooks/use-select-conversation-tab.cjs +1 -1
- package/dist/hooks/use-select-conversation-tab.cjs.map +1 -1
- package/dist/hooks/use-select-conversation-tab.js +2 -2
- package/dist/hooks/use-select-conversation-tab.js.map +1 -1
- package/dist/hooks/use-tracking.cjs +1 -1
- package/dist/hooks/use-tracking.cjs.map +1 -1
- package/dist/hooks/use-tracking.d.ts +6 -0
- package/dist/hooks/use-tracking.js +6 -0
- package/dist/hooks/use-tracking.js.map +1 -1
- package/dist/i18n/declaration.cjs +1 -1
- package/dist/i18n/declaration.cjs.map +1 -1
- package/dist/i18n/declaration.d.ts +86 -1
- package/dist/i18n/declaration.js +1 -1
- package/dist/i18n/declaration.js.map +1 -1
- package/dist/i18n/translation.cjs +2 -2
- package/dist/i18n/translation.cjs.map +1 -1
- package/dist/i18n/translation.js +1475 -30
- package/dist/i18n/translation.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +28 -29
- package/dist/lib/index.cjs +1 -1
- package/dist/lib/index.js +0 -1
- package/dist/locales/ar/openhands.json +88 -3
- package/dist/locales/ca/openhands.json +88 -3
- package/dist/locales/de/openhands.json +88 -3
- package/dist/locales/en/openhands.json +88 -3
- package/dist/locales/es/openhands.json +88 -3
- package/dist/locales/fr/openhands.json +88 -3
- package/dist/locales/it/openhands.json +88 -3
- package/dist/locales/ja/openhands.json +88 -3
- package/dist/locales/ko-KR/openhands.json +88 -3
- package/dist/locales/no/openhands.json +88 -3
- package/dist/locales/pt/openhands.json +88 -3
- package/dist/locales/tr/openhands.json +88 -3
- package/dist/locales/uk/openhands.json +88 -3
- package/dist/locales/zh-CN/openhands.json +88 -3
- package/dist/locales/zh-TW/openhands.json +88 -3
- package/dist/node_modules/@microlink/react-json-view/dist/main.cjs +5 -5
- package/dist/node_modules/@microlink/react-json-view/dist/main.cjs.map +1 -1
- package/dist/node_modules/@microlink/react-json-view/dist/main.js +5194 -5187
- package/dist/node_modules/@microlink/react-json-view/dist/main.js.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/desktop-client.cjs +2 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/desktop-client.cjs.map +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/desktop-client.js +21 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/desktop-client.js.map +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/hooks-client.cjs +2 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/hooks-client.cjs.map +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/hooks-client.js +22 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/hooks-client.js.map +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/meta-profiles-client.cjs +2 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/meta-profiles-client.cjs.map +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/meta-profiles-client.js +33 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/meta-profiles-client.js.map +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/openhands-client.cjs +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/openhands-client.cjs.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/openhands-client.js +56 -22
- package/dist/node_modules/@openhands/typescript-client/dist/client/openhands-client.js.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/profiles-client.cjs +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/profiles-client.cjs.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/profiles-client.js +3 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/profiles-client.js.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/shared-client.cjs +2 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/shared-client.cjs.map +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/shared-client.js +31 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/shared-client.js.map +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/sub-agents-client.cjs +2 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/sub-agents-client.cjs.map +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/sub-agents-client.js +21 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/sub-agents-client.js.map +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/tool-client.cjs +2 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/tool-client.cjs.map +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/tool-client.js +21 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/tool-client.js.map +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/conversation/local-conversation.cjs.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/conversation/local-conversation.js.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/models/acp-providers.cjs +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/models/acp-providers.cjs.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/models/acp-providers.js +9 -5
- package/dist/node_modules/@openhands/typescript-client/dist/models/acp-providers.js.map +1 -1
- package/dist/node_modules/i18next-http-backend/esm/index.cjs +1 -1
- package/dist/node_modules/i18next-http-backend/esm/index.cjs.map +1 -1
- package/dist/node_modules/i18next-http-backend/esm/index.js +2 -2
- package/dist/node_modules/i18next-http-backend/esm/index.js.map +1 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/archive-restore.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/archive-restore.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/archive-restore.js +31 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/archive-restore.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/archive.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/archive.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/archive.js +23 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/archive.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-alert.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-alert.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-alert.js +27 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-alert.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/gauge.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/gauge.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/gauge.js +12 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/gauge.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/minimize.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/minimize.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/minimize.js +23 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/minimize.js.map +1 -0
- package/dist/node_modules/zustand/esm/middleware.cjs +3 -3
- package/dist/node_modules/zustand/esm/middleware.cjs.map +1 -1
- package/dist/node_modules/zustand/esm/middleware.js +33 -31
- package/dist/node_modules/zustand/esm/middleware.js.map +1 -1
- package/dist/package.cjs +1 -1
- package/dist/package.cjs.map +1 -1
- package/dist/package.js +17 -16
- package/dist/package.js.map +1 -1
- package/dist/routes/files-tab.cjs +1 -1
- package/dist/routes/files-tab.js +11 -11
- package/dist/routes/files-tab.js.map +1 -1
- package/dist/routes/usage-tab.cjs +2 -0
- package/dist/routes/usage-tab.cjs.map +1 -0
- package/dist/routes/usage-tab.d.ts +2 -0
- package/dist/routes/usage-tab.js +10 -0
- package/dist/routes/usage-tab.js.map +1 -0
- package/dist/services/child-conversation-launch.cjs +1 -1
- package/dist/services/child-conversation-launch.cjs.map +1 -1
- package/dist/services/child-conversation-launch.js +11 -5
- package/dist/services/child-conversation-launch.js.map +1 -1
- package/dist/services/settings.cjs +1 -1
- package/dist/services/settings.cjs.map +1 -1
- package/dist/services/settings.js +2 -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.js +47 -51
- package/dist/services/telemetry.js.map +1 -1
- package/dist/stores/archived-conversations-store.cjs +2 -0
- package/dist/stores/archived-conversations-store.cjs.map +1 -0
- package/dist/stores/archived-conversations-store.d.ts +24 -0
- package/dist/stores/archived-conversations-store.js +33 -0
- package/dist/stores/archived-conversations-store.js.map +1 -0
- package/dist/stores/conversation-panel-preferences-store.cjs +1 -1
- package/dist/stores/conversation-panel-preferences-store.cjs.map +1 -1
- package/dist/stores/conversation-panel-preferences-store.d.ts +3 -0
- package/dist/stores/conversation-panel-preferences-store.js +4 -0
- package/dist/stores/conversation-panel-preferences-store.js.map +1 -1
- package/dist/stores/conversation-store.cjs.map +1 -1
- package/dist/stores/conversation-store.d.ts +1 -1
- package/dist/stores/conversation-store.js.map +1 -1
- package/dist/stores/error-message-store.cjs +1 -1
- package/dist/stores/error-message-store.cjs.map +1 -1
- package/dist/stores/error-message-store.d.ts +3 -1
- package/dist/stores/error-message-store.js +5 -3
- package/dist/stores/error-message-store.js.map +1 -1
- package/dist/stores/metrics-store.cjs +1 -1
- package/dist/stores/metrics-store.cjs.map +1 -1
- package/dist/stores/metrics-store.d.ts +1 -0
- package/dist/stores/metrics-store.js +7 -4
- package/dist/stores/metrics-store.js.map +1 -1
- package/dist/types/agent-server/core/events/condensation-event.d.ts +3 -0
- package/dist/types/agent-server/core/events/conversation-state-event.d.ts +4 -6
- package/dist/types/agent-server/type-guards.cjs +1 -1
- package/dist/types/agent-server/type-guards.cjs.map +1 -1
- package/dist/types/agent-server/type-guards.d.ts +5 -0
- package/dist/types/agent-server/type-guards.js +3 -3
- package/dist/types/agent-server/type-guards.js.map +1 -1
- package/dist/types/git-sync.d.ts +51 -0
- package/dist/utils/conversation-local-storage.cjs +1 -1
- package/dist/utils/conversation-local-storage.cjs.map +1 -1
- package/dist/utils/conversation-local-storage.js +2 -1
- package/dist/utils/conversation-local-storage.js.map +1 -1
- package/dist/utils/error-handler.cjs +1 -1
- package/dist/utils/error-handler.cjs.map +1 -1
- package/dist/utils/error-handler.d.ts +3 -2
- package/dist/utils/error-handler.js +18 -5
- package/dist/utils/error-handler.js.map +1 -1
- 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 +1 -0
- package/dist/utils/format-model-name.js +1 -0
- package/dist/utils/format-model-name.js.map +1 -1
- package/dist/utils/format-token-count.cjs +2 -0
- package/dist/utils/format-token-count.cjs.map +1 -0
- package/dist/utils/format-token-count.d.ts +3 -0
- package/dist/utils/format-token-count.js +19 -0
- package/dist/utils/format-token-count.js.map +1 -0
- package/dist/utils/hover-reveal-classes.cjs +2 -0
- package/dist/utils/hover-reveal-classes.cjs.map +1 -0
- package/dist/utils/hover-reveal-classes.d.ts +34 -0
- package/dist/utils/hover-reveal-classes.js +41 -0
- package/dist/utils/hover-reveal-classes.js.map +1 -0
- package/dist/utils/is-markdown-file-path.cjs +2 -0
- package/dist/utils/is-markdown-file-path.cjs.map +1 -0
- package/dist/utils/is-markdown-file-path.d.ts +4 -0
- package/dist/utils/is-markdown-file-path.js +14 -0
- package/dist/utils/is-markdown-file-path.js.map +1 -0
- package/dist/utils/mcp-marketplace-utils.cjs +1 -1
- package/dist/utils/mcp-marketplace-utils.cjs.map +1 -1
- package/dist/utils/mcp-marketplace-utils.d.ts +7 -0
- package/dist/utils/mcp-marketplace-utils.js +19 -16
- package/dist/utils/mcp-marketplace-utils.js.map +1 -1
- package/dist/utils/transcript-export/index.cjs +3 -3
- package/dist/utils/transcript-export/index.cjs.map +1 -1
- package/dist/utils/transcript-export/index.js +12 -12
- package/dist/utils/transcript-export/index.js.map +1 -1
- package/dist/utils/transcript-export/load-complete-events.cjs +1 -1
- package/dist/utils/transcript-export/load-complete-events.cjs.map +1 -1
- package/dist/utils/transcript-export/load-complete-events.js +25 -17
- package/dist/utils/transcript-export/load-complete-events.js.map +1 -1
- package/dist/utils/workspace-relative-path.cjs +2 -0
- package/dist/utils/workspace-relative-path.cjs.map +1 -0
- package/dist/utils/workspace-relative-path.d.ts +10 -0
- package/dist/utils/workspace-relative-path.js +22 -0
- package/dist/utils/workspace-relative-path.js.map +1 -0
- package/package.json +17 -16
- package/scripts/check-sdk-version-sync.mjs +6 -6
- package/scripts/check-translation-completeness.cjs +3 -0
- package/scripts/dev-process-utils.mjs +6 -1
- package/scripts/dev-safe.mjs +57 -2
- package/scripts/dev-with-automation.mjs +98 -9
- package/build/assets/active-backend-context-B_bg5h9O.js +0 -2
- package/build/assets/agent-profiles-settings-hd2cAIZM.js +0 -1
- package/build/assets/agent-server-conversation-service.api-BheU4HX3.js +0 -86
- package/build/assets/agent-settings-D_SVrWhI.js +0 -1
- package/build/assets/automation-detail-C0SxWTnQ.js +0 -3
- package/build/assets/automation-export-BjQa_fT6.js +0 -2
- package/build/assets/automation-setup-route-BzCNpljP.js +0 -1
- package/build/assets/automations-list-dZg8zOCl.js +0 -1
- package/build/assets/bot-DuN83i3p.js +0 -1
- package/build/assets/browser--eoQOo4M.js +0 -6
- package/build/assets/check-DLOKoFU9.js +0 -1
- package/build/assets/chevron-down-CnIbtM6i.js +0 -1
- package/build/assets/circle-check-CxCYJrpZ.js +0 -1
- package/build/assets/cloud-funnel-analytics-CcSez21r.js +0 -1
- package/build/assets/conversation-Cmyw9bFh.js +0 -90
- package/build/assets/conversation-CvoGZ5vC.js +0 -1
- package/build/assets/conversation-panel-CvoGZ5vC.js +0 -1
- package/build/assets/conversation-state-store-CtgILxWF.js +0 -1
- package/build/assets/conversation-store-B8Eahyeg.js +0 -6
- package/build/assets/external-link-zWbg5KXS.js +0 -1
- package/build/assets/files-tab-D5zuU5TY.js +0 -1
- package/build/assets/format-model-name-BN_rx1Y3.js +0 -1
- package/build/assets/format-relative-time-BerVamGl.js +0 -1
- package/build/assets/git-provider-icon-zuKz2cwo.js +0 -1
- package/build/assets/git-repo-dropdown-Bo7ciSNX.js +0 -1
- package/build/assets/home-DqyeeFA_.js +0 -1
- package/build/assets/home-Y0aDou-a.js +0 -1
- package/build/assets/index-home-DqyeeFA_.js +0 -1
- package/build/assets/info-C9lpK5pw.js +0 -1
- package/build/assets/install-server-modal-DW6dSyGr.js +0 -1
- package/build/assets/kebab-menu-item-content-CKydZrbH.js +0 -1
- package/build/assets/llm-not-configured-banner-DCE_0B4I.js +0 -27
- package/build/assets/llm-settings-8eWBF3Ij.js +0 -1
- package/build/assets/llm-settings-D9ko42Pi.js +0 -1
- package/build/assets/llm-subscription-service-B3K-97lP.js +0 -1
- package/build/assets/loader-circle-C5AnEN8r.js +0 -1
- package/build/assets/manifest-e1c3bc3b.js +0 -1
- package/build/assets/manifest-subpage-layout-Ds7G5GZ8.js +0 -1
- package/build/assets/markdown-renderer-DzvgdZey.js +0 -8
- package/build/assets/mcp-marketplace-utils-DSLou4n7.js +0 -1
- package/build/assets/messages-B2l0qLVk.js +0 -40
- package/build/assets/onboarding-modal-DrrGlEQq.js +0 -1
- package/build/assets/pencil-Bl3GWhgq.js +0 -1
- package/build/assets/plus-CtzlyAoF.js +0 -1
- package/build/assets/profiles-service.api-vcE_jJCe.js +0 -1
- package/build/assets/providers-CdrPPm0z.js +0 -1
- package/build/assets/recommended-automations-launcher-DIYgUdMm.js +0 -1
- package/build/assets/refresh-cw-B9GhC3QC.js +0 -1
- package/build/assets/root-CBBi6IAe.js +0 -2
- package/build/assets/root-CRK9fOFd.css +0 -1
- package/build/assets/root-layout-BFN2rCOy.js +0 -2
- package/build/assets/search-CYaiKHRp.js +0 -1
- package/build/assets/secrets-service-BHF4fxML.js +0 -1
- package/build/assets/secrets-settings-aBGXtQhX.js +0 -1
- package/build/assets/shared-conversation-BIAcuORk.js +0 -1
- package/build/assets/shield-check-D2cpEpv3.js +0 -1
- package/build/assets/trash-2-CzDVN-Iw.js +0 -1
- package/build/assets/use-acp-credential-form-DGyo0QvL.js +0 -1
- package/build/assets/use-agent-profiles-B37XWDLq.js +0 -1
- package/build/assets/use-config-DapX3pjC.js +0 -1
- package/build/assets/use-create-conversation-CRf1dCm5.js +0 -1
- package/build/assets/use-create-secret-DcpT3RPw.js +0 -1
- package/build/assets/use-is-authed-Bka89Xmm.js +0 -1
- package/build/assets/use-is-creating-conversation-CVefC9Ns.js +0 -1
- package/build/assets/use-llm-profiles-CHxqoHiN.js +0 -1
- package/build/assets/use-manifest-capabilities-zihHDbMW.js +0 -1
- package/build/assets/use-save-agent-profile-CH9_EXQG.js +0 -1
- package/build/assets/use-tracking-salbPJxT.js +0 -3
- package/build/assets/utils-DPQfkd-7.js +0 -1
- package/build/assets/vendor~index-home~home~conversation-panel~conversation-DiXf0dkj.js +0 -13
- package/build/assets/x-RYDBg-e2.js +0 -1
- package/build/assets/zap-tbKDzCe3.js +0 -1
- package/dist/api/cloud/suggestions-service.api.d.ts +0 -8
- package/dist/api/suggestions-service/suggestions-service.api.d.ts +0 -11
- package/dist/components/conversation-events/chat/event-message-components/observation-pair-event-message.d.ts +0 -7
- package/dist/components/conversation-events/index.d.ts +0 -1
- package/dist/components/features/automations/metadata-chip.d.ts +0 -6
- package/dist/components/features/chat/task-tracking/status-badge.d.ts +0 -5
- package/dist/components/features/chat/task-tracking/status-icon.d.ts +0 -5
- package/dist/components/features/chat/task-tracking/task-list-section.d.ts +0 -10
- package/dist/components/features/controls/tools.d.ts +0 -2
- package/dist/components/features/conversation/metrics-modal/context-window-section.cjs +0 -2
- package/dist/components/features/conversation/metrics-modal/context-window-section.cjs.map +0 -1
- package/dist/components/features/conversation/metrics-modal/context-window-section.d.ts +0 -6
- package/dist/components/features/conversation/metrics-modal/context-window-section.js +0 -46
- package/dist/components/features/conversation/metrics-modal/context-window-section.js.map +0 -1
- package/dist/components/features/conversation/metrics-modal/empty-state.cjs +0 -2
- package/dist/components/features/conversation/metrics-modal/empty-state.cjs.map +0 -1
- package/dist/components/features/conversation/metrics-modal/empty-state.d.ts +0 -1
- package/dist/components/features/conversation/metrics-modal/empty-state.js +0 -18
- package/dist/components/features/conversation/metrics-modal/empty-state.js.map +0 -1
- package/dist/components/features/conversation/metrics-modal/metrics-modal-header.cjs +0 -2
- package/dist/components/features/conversation/metrics-modal/metrics-modal-header.cjs.map +0 -1
- package/dist/components/features/conversation/metrics-modal/metrics-modal-header.d.ts +0 -5
- package/dist/components/features/conversation/metrics-modal/metrics-modal-header.js +0 -20
- package/dist/components/features/conversation/metrics-modal/metrics-modal-header.js.map +0 -1
- package/dist/components/features/conversation/metrics-modal/metrics-modal.cjs +0 -2
- package/dist/components/features/conversation/metrics-modal/metrics-modal.cjs.map +0 -1
- package/dist/components/features/conversation/metrics-modal/metrics-modal.d.ts +0 -6
- package/dist/components/features/conversation/metrics-modal/metrics-modal.js +0 -57
- package/dist/components/features/conversation/metrics-modal/metrics-modal.js.map +0 -1
- package/dist/components/features/conversation-panel/new-conversation-button.d.ts +0 -23
- package/dist/components/features/home/home-header/guide-message.d.ts +0 -1
- package/dist/components/features/home/home-header/home-header.d.ts +0 -1
- package/dist/components/features/home/new-conversation/create-conversation-button.d.ts +0 -1
- package/dist/components/features/home/new-conversation/new-conversation.d.ts +0 -1
- package/dist/components/features/home/new-conversation.d.ts +0 -1
- package/dist/components/features/home/tasks/task-card.d.ts +0 -6
- package/dist/components/features/home/tasks/task-group.d.ts +0 -7
- package/dist/components/features/home/tasks/task-issue-number.d.ts +0 -6
- package/dist/components/features/home/tasks/task-item-title.d.ts +0 -1
- package/dist/components/features/home/tasks/task-suggestions-skeleton.d.ts +0 -1
- package/dist/components/features/home/tasks/task-suggestions.d.ts +0 -6
- package/dist/components/features/settings/agent-server-onboarding.d.ts +0 -10
- package/dist/components/features/settings/mcp-settings/mcp-server-list-item.d.ts +0 -6
- package/dist/components/features/settings/mcp-settings/mcp-server-list.d.ts +0 -8
- package/dist/hooks/query/use-suggested-tasks.d.ts +0 -1
- package/dist/hooks/use-should-show-user-features.d.ts +0 -1
- package/dist/icons/u-credit-card.cjs +0 -2
- package/dist/icons/u-credit-card.cjs.map +0 -1
- package/dist/icons/u-credit-card.js +0 -21
- package/dist/icons/u-credit-card.js.map +0 -1
- package/dist/ui/card-title.d.ts +0 -16
- package/dist/ui/card.d.ts +0 -14
- package/dist/utils/group-suggested-tasks.d.ts +0 -7
- /package/build/assets/{vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~cy4jtuc2-rfV8mQ9m.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~dcc51rps-rfV8mQ9m.js} +0 -0
- /package/build/assets/{vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~lq5hicxx-cHFhpUBq.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~ox0jfsa0-cHFhpUBq.js} +0 -0
- /package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~9pstowjp-BOVIFA_g.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~eo2nf80n-BOVIFA_g.js} +0 -0
- /package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~ht43enc2-C0JXQb_q.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~jz4f6vo2-C0JXQb_q.js} +0 -0
|
@@ -633,7 +633,7 @@
|
|
|
633
633
|
"BUTTON$PAUSE": "暂停",
|
|
634
634
|
"BUTTON$EDIT_TITLE": "编辑标题",
|
|
635
635
|
"BUTTON$DOWNLOAD_VIA_VSCODE": "通过VS Code下载",
|
|
636
|
-
"BUTTON$DISPLAY_COST": "
|
|
636
|
+
"BUTTON$DISPLAY_COST": "显示用量和成本",
|
|
637
637
|
"BUTTON$SHOW_AGENT_TOOLS_AND_METADATA": "显示代理工具和元数据",
|
|
638
638
|
"LANDING$ATTACH_IMAGES": "附加图片",
|
|
639
639
|
"LANDING$OPEN_REPO": "打开仓库",
|
|
@@ -1056,6 +1056,7 @@
|
|
|
1056
1056
|
"CONVERSATION_PANEL$SHOW": "显示",
|
|
1057
1057
|
"CONVERSATION_PANEL$ALL_THREADS": "所有会话",
|
|
1058
1058
|
"CONVERSATION_PANEL$RELEVANT_THREADS": "相关(进行中)",
|
|
1059
|
+
"CONVERSATION_PANEL$SHOW_ARCHIVED": "显示已归档",
|
|
1059
1060
|
"CONVERSATION_PANEL$METADATA": "元数据",
|
|
1060
1061
|
"CONVERSATION_PANEL$LLM_MODEL": "代理 / 模型",
|
|
1061
1062
|
"CONVERSATION_PANEL$REPO_BRANCH": "仓库与分支",
|
|
@@ -1829,7 +1830,7 @@
|
|
|
1829
1830
|
"ONBOARDING$BACKEND_STATUS_DISCONNECTED": "未连接",
|
|
1830
1831
|
"ONBOARDING$BACKEND_STATUS_CHECKING": "正在检查…",
|
|
1831
1832
|
"ONBOARDING$LLM_TITLE": "设置你的 LLM",
|
|
1832
|
-
"ONBOARDING$LLM_SUBTITLE": "选择提供商和模型。我们已为你预先选择
|
|
1833
|
+
"ONBOARDING$LLM_SUBTITLE": "选择提供商和模型。我们已为你预先选择 OpenHands GLM-5.2。",
|
|
1833
1834
|
"ONBOARDING$HELLO_TITLE": "打个招呼 👋",
|
|
1834
1835
|
"ONBOARDING$HELLO_SUBTITLE": "向 OpenHands 发送你的第一条消息。我们将启动一个无工作区的新对话。",
|
|
1835
1836
|
"ONBOARDING$HELLO_DEFAULT_MESSAGE": "创建一个简单的网页,说明 OpenHands 能做什么。",
|
|
@@ -1904,6 +1905,7 @@
|
|
|
1904
1905
|
"SETTINGS$SUBSCRIPTION_CONNECTED_TOAST": "ChatGPT 订阅已连接",
|
|
1905
1906
|
"SETTINGS$SUBSCRIPTION_DISCONNECTED_TOAST": "ChatGPT 订阅已断开连接",
|
|
1906
1907
|
"SETTINGS$SUBSCRIPTION_PENDING_TOAST": "登录尚未完成。请完成浏览器流程后重试。",
|
|
1908
|
+
"STATUS$VALIDATING": "验证中...",
|
|
1907
1909
|
"STATUS$SAVING": "保存中...",
|
|
1908
1910
|
"THINKING$TITLE": "思考",
|
|
1909
1911
|
"THINKING$EXPAND": "展开思考",
|
|
@@ -1983,6 +1985,8 @@
|
|
|
1983
1985
|
"RECOMMENDED_AUTOMATIONS$POPULARITY_SORTED": "按热度排序",
|
|
1984
1986
|
"RECOMMENDED_AUTOMATIONS$MINUTES": "{{count}} 分钟",
|
|
1985
1987
|
"RECOMMENDED_AUTOMATIONS$MISSING_CONNECT": "启动前需连接 {{count}} 个 MCP",
|
|
1988
|
+
"RECOMMENDED_AUTOMATIONS$EXTERNAL_SETUP": "需要外部配置",
|
|
1989
|
+
"RECOMMENDED_AUTOMATIONS$UNKNOWN_SETUP": "集成不可用",
|
|
1986
1990
|
"RECOMMENDED_AUTOMATIONS$MODAL_AGENT_PROMPT": "代理提示",
|
|
1987
1991
|
"RECOMMENDED_AUTOMATIONS$MODAL_EXAMPLE_IMPLEMENTATION": "示例实现草图",
|
|
1988
1992
|
"RECOMMENDED_AUTOMATIONS$MODAL_REQUIRED_MCPS": "必需的 MCP",
|
|
@@ -2158,6 +2162,12 @@
|
|
|
2158
2162
|
"SETTINGS$APP_UPDATE_RUN_COMMANDS": "运行以下任一命令:",
|
|
2159
2163
|
"SETTINGS$APP_UPDATE_OR": "或",
|
|
2160
2164
|
"SETTINGS$APP_UPDATE_RELEASE_NOTES": "查看发行说明",
|
|
2165
|
+
"CONVERSATION$CONFIRM_ARCHIVE": "归档对话",
|
|
2166
|
+
"CONVERSATION$ARCHIVE_WARNING": "该对话及其完整历史记录将保留,可通过“显示已归档”恢复。",
|
|
2167
|
+
"CONVERSATION$ARCHIVE_WARNING_WITH_TITLE": "要归档“<title>{{title}}</title>”吗?该对话及其完整历史记录将保留,可通过“显示已归档”恢复。",
|
|
2168
|
+
"ACTION$CONFIRM_ARCHIVE": "归档",
|
|
2169
|
+
"COMMON$ARCHIVE_CONVERSATION": "归档对话",
|
|
2170
|
+
"COMMON$UNARCHIVE_CONVERSATION": "取消归档对话",
|
|
2161
2171
|
"BUTTON$CONTINUE": "继续",
|
|
2162
2172
|
"SETUP$PREREQUISITES_TITLE": "开始之前",
|
|
2163
2173
|
"SETUP$MANAGE_INTEGRATIONS": "管理集成",
|
|
@@ -2188,6 +2198,24 @@
|
|
|
2188
2198
|
"FEATURED_AUTOMATIONS$MOVE_UP": "上移",
|
|
2189
2199
|
"FEATURED_AUTOMATIONS$MOVE_DOWN": "下移",
|
|
2190
2200
|
"FEATURED_AUTOMATIONS$REORDER_HANDLE": "重新排序 {{name}}",
|
|
2201
|
+
"CONVERSATION$CONTEXT_WINDOW_UNKNOWN": "窗口大小未知",
|
|
2202
|
+
"CONVERSATION$LEFT": "剩余",
|
|
2203
|
+
"CONVERSATION$COMPACT_CONTEXT_DESCRIPTION": "总结较早的消息以释放上下文空间,同时保留近期细节。",
|
|
2204
|
+
"CONVERSATION$COMPACT_CONTEXT_STARTED": "已开始压缩上下文",
|
|
2205
|
+
"CONVERSATION$COMPACT_CONTEXT_COMPLETE": "上下文已压缩 — 释放 {{saved}} tokens({{before}} → {{after}})",
|
|
2206
|
+
"CONVERSATION$COMPACT_CONTEXT_COMPLETE_NO_CHANGE": "上下文已压缩",
|
|
2207
|
+
"CONVERSATION$COMPACT_CONTEXT_FAILED": "压缩上下文失败",
|
|
2208
|
+
"CONVERSATION$TOKEN_USAGE": "Token 用量",
|
|
2209
|
+
"CONVERSATION$PLAN_USAGE_NOTE": "套餐用量 — API 等价估算",
|
|
2210
|
+
"COMMON$USAGE": "用量",
|
|
2211
|
+
"CONVERSATION$COMPACT_CONTEXT": "压缩上下文",
|
|
2212
|
+
"CONVERSATION$CONTEXT_FILLING_UP": "上下文即将占满——压缩可释放空间",
|
|
2213
|
+
"CONVERSATION$PROVIDER_BALANCE": "提供商余额",
|
|
2214
|
+
"CONVERSATION$CREDITS_REMAINING": "剩余额度",
|
|
2215
|
+
"CONVERSATION$CREDITS_USED": "已用额度",
|
|
2216
|
+
"CONVERSATION$FREE_TIER": "免费套餐",
|
|
2217
|
+
"CHAT_INTERFACE$CONTEXT_WINDOW_METER_LABEL": "上下文窗口用量",
|
|
2218
|
+
"CHAT_INTERFACE$SHOW_CONTEXT": "显示上下文",
|
|
2191
2219
|
"CONVERSATION$TAGS_OVERFLOW_ARIA": "显示另外 {{count}} 个标签",
|
|
2192
2220
|
"CONVERSATION_PANEL$PREVIEW_GIT": "Git",
|
|
2193
2221
|
"CONVERSATION_PANEL$PREVIEW_REPO": "仓库",
|
|
@@ -2216,5 +2244,62 @@
|
|
|
2216
2244
|
"CHILD_CONVERSATION$OPEN": "打开",
|
|
2217
2245
|
"CHILD_CONVERSATION$LAUNCH_FAILED": "无法启动子会话:{{error}}",
|
|
2218
2246
|
"ACTION_MESSAGE$LAUNCH_CHILD_CONVERSATION": "正在启动子会话",
|
|
2219
|
-
"OBSERVATION_MESSAGE$LAUNCH_CHILD_CONVERSATION": "已请求子会话"
|
|
2247
|
+
"OBSERVATION_MESSAGE$LAUNCH_CHILD_CONVERSATION": "已请求子会话",
|
|
2248
|
+
"AUTOMATIONS$GIT_SYNC$NAV_BUTTON": "Git 同步",
|
|
2249
|
+
"AUTOMATIONS$GIT_SYNC$TITLE": "Git 同步",
|
|
2250
|
+
"AUTOMATIONS$GIT_SYNC$SUBTITLE": "将自动化同步到 Git 仓库,以便在重启后保留并可以共享。",
|
|
2251
|
+
"AUTOMATIONS$GIT_SYNC$STATUS_TITLE": "同步状态",
|
|
2252
|
+
"AUTOMATIONS$GIT_SYNC$CONFIG_TITLE": "配置",
|
|
2253
|
+
"AUTOMATIONS$GIT_SYNC$FIELD_ENABLED": "启用 Git 同步",
|
|
2254
|
+
"AUTOMATIONS$GIT_SYNC$ENABLED_HELP": "关闭后可暂停同步而不丢失配置。要开启,后端必须在启动时已启用 Git 同步。",
|
|
2255
|
+
"AUTOMATIONS$GIT_SYNC$ENABLED": "已启用",
|
|
2256
|
+
"AUTOMATIONS$GIT_SYNC$DISABLED": "已禁用",
|
|
2257
|
+
"AUTOMATIONS$GIT_SYNC$ENCRYPTED": "已加密",
|
|
2258
|
+
"AUTOMATIONS$GIT_SYNC$NOT_ENCRYPTED": "未加密",
|
|
2259
|
+
"AUTOMATIONS$GIT_SYNC$SAVE_AND_SYNC": "保存并立即同步",
|
|
2260
|
+
"AUTOMATIONS$GIT_SYNC$SYNC_NOW": "立即同步",
|
|
2261
|
+
"AUTOMATIONS$GIT_SYNC$SYNCING": "同步中...",
|
|
2262
|
+
"AUTOMATIONS$GIT_SYNC$SYNC_STARTED_AGO": "{{time}}前开始",
|
|
2263
|
+
"AUTOMATIONS$GIT_SYNC$SYNC_PENDING_COUNT": "待同步 {{count}} 项",
|
|
2264
|
+
"AUTOMATIONS$GIT_SYNC$SYNC_COMPLETED": "同步完成",
|
|
2265
|
+
"AUTOMATIONS$GIT_SYNC$SYNC_FAILED": "同步失败",
|
|
2266
|
+
"AUTOMATIONS$GIT_SYNC$SYNC_DISABLED_ERROR": "请先启用 Git 同步,然后再触发同步。",
|
|
2267
|
+
"AUTOMATIONS$GIT_SYNC$REPOSITORY": "仓库",
|
|
2268
|
+
"AUTOMATIONS$GIT_SYNC$NOT_CONFIGURED": "未配置",
|
|
2269
|
+
"AUTOMATIONS$GIT_SYNC$LAST_SYNCED_COMMIT": "最近同步的提交",
|
|
2270
|
+
"AUTOMATIONS$GIT_SYNC$LAST_SYNCED_AT": "最近同步时间",
|
|
2271
|
+
"AUTOMATIONS$GIT_SYNC$PENDING_CHANGES": "待处理的更改",
|
|
2272
|
+
"AUTOMATIONS$GIT_SYNC$NEVER_SYNCED": "从未同步",
|
|
2273
|
+
"AUTOMATIONS$GIT_SYNC$LAST_ERROR_TITLE": "最近一次同步错误",
|
|
2274
|
+
"AUTOMATIONS$GIT_SYNC$FIELD_REPO_URL": "仓库 URL",
|
|
2275
|
+
"AUTOMATIONS$GIT_SYNC$REPO_URL_PLACEHOLDER": "https://github.com/org/repo.git",
|
|
2276
|
+
"AUTOMATIONS$GIT_SYNC$FIELD_BRANCH": "分支",
|
|
2277
|
+
"AUTOMATIONS$GIT_SYNC$BRANCH_PLACEHOLDER": "main",
|
|
2278
|
+
"AUTOMATIONS$GIT_SYNC$FIELD_PATH": "路径",
|
|
2279
|
+
"AUTOMATIONS$GIT_SYNC$PATH_PLACEHOLDER": "automations",
|
|
2280
|
+
"AUTOMATIONS$GIT_SYNC$FIELD_AUTHOR_NAME": "提交作者姓名",
|
|
2281
|
+
"AUTOMATIONS$GIT_SYNC$FIELD_AUTHOR_EMAIL": "提交作者邮箱",
|
|
2282
|
+
"AUTOMATIONS$GIT_SYNC$AUTHOR_HELP": "留空则使用后端的默认提交作者。",
|
|
2283
|
+
"AUTOMATIONS$GIT_SYNC$FIELD_TOKEN": "访问令牌",
|
|
2284
|
+
"AUTOMATIONS$GIT_SYNC$FIELD_ENCRYPTION_KEY": "加密密钥",
|
|
2285
|
+
"AUTOMATIONS$GIT_SYNC$TOKEN_HELP": "私有仓库需要此项。留空则保留现有令牌不变。",
|
|
2286
|
+
"AUTOMATIONS$GIT_SYNC$TOKEN_PLACEHOLDER": "留空以保留当前令牌",
|
|
2287
|
+
"AUTOMATIONS$GIT_SYNC$KEY_SET_PLACEHOLDER": "当前已设置加密密钥",
|
|
2288
|
+
"AUTOMATIONS$GIT_SYNC$KEY_UNSET_PLACEHOLDER": "未设置加密密钥",
|
|
2289
|
+
"AUTOMATIONS$GIT_SYNC$ENCRYPTION_KEY_HELP": "可选。提交前会加密自动化文件,因此仓库中保存的是密文而非可读的 YAML。请妥善保存密钥副本;没有它将无法读取或恢复该仓库。",
|
|
2290
|
+
"AUTOMATIONS$GIT_SYNC$CLEAR_TOKEN": "清除现有令牌",
|
|
2291
|
+
"AUTOMATIONS$GIT_SYNC$CLEAR_ENCRYPTION_KEY": "清除现有加密密钥",
|
|
2292
|
+
"AUTOMATIONS$GIT_SYNC$CONFIG_SAVED": "Git 同步设置已保存。",
|
|
2293
|
+
"AUTOMATIONS$GIT_SYNC$CHECKING": "正在检查仓库...",
|
|
2294
|
+
"AUTOMATIONS$GIT_SYNC$CHECK_FAILED_TITLE": "使用这些设置无法访问仓库",
|
|
2295
|
+
"AUTOMATIONS$GIT_SYNC$CHECK_FAILED_HINT": "请修改上面的设置,或再次点击“保存”仍然保存。",
|
|
2296
|
+
"AUTOMATIONS$GIT_SYNC$ENABLE_BLOCKED_ERROR": "必须先在自动化后端的环境中启用 Git 同步并重启服务,才能在此处开启。",
|
|
2297
|
+
"AUTOMATIONS$GIT_SYNC$NOT_LOCAL_TITLE": "Git 同步不可用",
|
|
2298
|
+
"AUTOMATIONS$GIT_SYNC$NOT_LOCAL_MESSAGE": "只有连接到本地 OpenHands 后端时才能使用 Git 同步。",
|
|
2299
|
+
"AUTOMATIONS$GIT_SYNC$UNSUPPORTED_TITLE": "此后端不支持 Git 同步",
|
|
2300
|
+
"AUTOMATIONS$GIT_SYNC$UNSUPPORTED_MESSAGE": "自动化后端运行的版本不包含 Git 同步 API。请将其更新到支持 Git 同步的版本。",
|
|
2301
|
+
"AUTOMATIONS$GIT_SYNC$FIELD_INTERVAL": "同步间隔(秒)",
|
|
2302
|
+
"AUTOMATIONS$GIT_SYNC$INTERVAL_HELP": "设置为 0 则仅在点击“立即同步”时同步。",
|
|
2303
|
+
"AUTOMATIONS$GIT_SYNC$MANUAL_ONLY": "仅手动",
|
|
2304
|
+
"AUTOMATIONS$GIT_SYNC$EVERY_N_SECONDS": "每 {{count}} 秒"
|
|
2220
2305
|
}
|
|
@@ -633,7 +633,7 @@
|
|
|
633
633
|
"BUTTON$PAUSE": "暫停",
|
|
634
634
|
"BUTTON$EDIT_TITLE": "編輯標題",
|
|
635
635
|
"BUTTON$DOWNLOAD_VIA_VSCODE": "透過VS Code下載",
|
|
636
|
-
"BUTTON$DISPLAY_COST": "
|
|
636
|
+
"BUTTON$DISPLAY_COST": "顯示用量和成本",
|
|
637
637
|
"BUTTON$SHOW_AGENT_TOOLS_AND_METADATA": "顯示代理工具和元數據",
|
|
638
638
|
"LANDING$ATTACH_IMAGES": "附加圖片",
|
|
639
639
|
"LANDING$OPEN_REPO": "開啟儲存庫",
|
|
@@ -1056,6 +1056,7 @@
|
|
|
1056
1056
|
"CONVERSATION_PANEL$SHOW": "顯示",
|
|
1057
1057
|
"CONVERSATION_PANEL$ALL_THREADS": "所有對話串",
|
|
1058
1058
|
"CONVERSATION_PANEL$RELEVANT_THREADS": "相關(進行中)",
|
|
1059
|
+
"CONVERSATION_PANEL$SHOW_ARCHIVED": "顯示已封存",
|
|
1059
1060
|
"CONVERSATION_PANEL$METADATA": "中繼資料",
|
|
1060
1061
|
"CONVERSATION_PANEL$LLM_MODEL": "代理 / 模型",
|
|
1061
1062
|
"CONVERSATION_PANEL$REPO_BRANCH": "存放庫與分支",
|
|
@@ -1829,7 +1830,7 @@
|
|
|
1829
1830
|
"ONBOARDING$BACKEND_STATUS_DISCONNECTED": "未連線",
|
|
1830
1831
|
"ONBOARDING$BACKEND_STATUS_CHECKING": "檢查中…",
|
|
1831
1832
|
"ONBOARDING$LLM_TITLE": "設定你的 LLM",
|
|
1832
|
-
"ONBOARDING$LLM_SUBTITLE": "選擇供應商與模型。我們已預先選好
|
|
1833
|
+
"ONBOARDING$LLM_SUBTITLE": "選擇供應商與模型。我們已預先選好 OpenHands GLM-5.2。",
|
|
1833
1834
|
"ONBOARDING$HELLO_TITLE": "打個招呼 👋",
|
|
1834
1835
|
"ONBOARDING$HELLO_SUBTITLE": "向 OpenHands 傳送第一則訊息。我們會開始一個沒有工作區的新對話。",
|
|
1835
1836
|
"ONBOARDING$HELLO_DEFAULT_MESSAGE": "建立一個簡單的網頁,說明 OpenHands 能做什麼。",
|
|
@@ -1904,6 +1905,7 @@
|
|
|
1904
1905
|
"SETTINGS$SUBSCRIPTION_CONNECTED_TOAST": "ChatGPT 訂閱已連接",
|
|
1905
1906
|
"SETTINGS$SUBSCRIPTION_DISCONNECTED_TOAST": "ChatGPT 訂閱已中斷連線",
|
|
1906
1907
|
"SETTINGS$SUBSCRIPTION_PENDING_TOAST": "登入尚未完成。請完成瀏覽器流程後再試一次。",
|
|
1908
|
+
"STATUS$VALIDATING": "驗證中...",
|
|
1907
1909
|
"STATUS$SAVING": "儲存中...",
|
|
1908
1910
|
"THINKING$TITLE": "思考",
|
|
1909
1911
|
"THINKING$EXPAND": "展開思考",
|
|
@@ -1983,6 +1985,8 @@
|
|
|
1983
1985
|
"RECOMMENDED_AUTOMATIONS$POPULARITY_SORTED": "依熱門程度排序",
|
|
1984
1986
|
"RECOMMENDED_AUTOMATIONS$MINUTES": "{{count}} 分鐘",
|
|
1985
1987
|
"RECOMMENDED_AUTOMATIONS$MISSING_CONNECT": "啟動前需連接 {{count}} 個 MCP",
|
|
1988
|
+
"RECOMMENDED_AUTOMATIONS$EXTERNAL_SETUP": "需要外部設定",
|
|
1989
|
+
"RECOMMENDED_AUTOMATIONS$UNKNOWN_SETUP": "整合不可用",
|
|
1986
1990
|
"RECOMMENDED_AUTOMATIONS$MODAL_AGENT_PROMPT": "代理提示",
|
|
1987
1991
|
"RECOMMENDED_AUTOMATIONS$MODAL_EXAMPLE_IMPLEMENTATION": "範例實作草圖",
|
|
1988
1992
|
"RECOMMENDED_AUTOMATIONS$MODAL_REQUIRED_MCPS": "必要的 MCP",
|
|
@@ -2158,6 +2162,12 @@
|
|
|
2158
2162
|
"SETTINGS$APP_UPDATE_RUN_COMMANDS": "執行以下任一命令:",
|
|
2159
2163
|
"SETTINGS$APP_UPDATE_OR": "或",
|
|
2160
2164
|
"SETTINGS$APP_UPDATE_RELEASE_NOTES": "檢視版本資訊",
|
|
2165
|
+
"CONVERSATION$CONFIRM_ARCHIVE": "封存對話",
|
|
2166
|
+
"CONVERSATION$ARCHIVE_WARNING": "該對話及其完整歷史記錄會保留,可透過「顯示已封存」還原。",
|
|
2167
|
+
"CONVERSATION$ARCHIVE_WARNING_WITH_TITLE": "要封存「<title>{{title}}</title>」嗎?該對話及其完整歷史記錄會保留,可透過「顯示已封存」還原。",
|
|
2168
|
+
"ACTION$CONFIRM_ARCHIVE": "封存",
|
|
2169
|
+
"COMMON$ARCHIVE_CONVERSATION": "封存對話",
|
|
2170
|
+
"COMMON$UNARCHIVE_CONVERSATION": "取消封存對話",
|
|
2161
2171
|
"BUTTON$CONTINUE": "繼續",
|
|
2162
2172
|
"SETUP$PREREQUISITES_TITLE": "開始之前",
|
|
2163
2173
|
"SETUP$MANAGE_INTEGRATIONS": "管理整合",
|
|
@@ -2188,6 +2198,24 @@
|
|
|
2188
2198
|
"FEATURED_AUTOMATIONS$MOVE_UP": "上移",
|
|
2189
2199
|
"FEATURED_AUTOMATIONS$MOVE_DOWN": "下移",
|
|
2190
2200
|
"FEATURED_AUTOMATIONS$REORDER_HANDLE": "重新排序 {{name}}",
|
|
2201
|
+
"CONVERSATION$CONTEXT_WINDOW_UNKNOWN": "視窗大小未知",
|
|
2202
|
+
"CONVERSATION$LEFT": "剩餘",
|
|
2203
|
+
"CONVERSATION$COMPACT_CONTEXT_DESCRIPTION": "摘要較早的訊息以釋放上下文空間,同時保留近期細節。",
|
|
2204
|
+
"CONVERSATION$COMPACT_CONTEXT_STARTED": "已開始壓縮上下文",
|
|
2205
|
+
"CONVERSATION$COMPACT_CONTEXT_COMPLETE": "上下文已壓縮 — 釋放 {{saved}} tokens({{before}} → {{after}})",
|
|
2206
|
+
"CONVERSATION$COMPACT_CONTEXT_COMPLETE_NO_CHANGE": "上下文已壓縮",
|
|
2207
|
+
"CONVERSATION$COMPACT_CONTEXT_FAILED": "壓縮上下文失敗",
|
|
2208
|
+
"CONVERSATION$TOKEN_USAGE": "Token 用量",
|
|
2209
|
+
"CONVERSATION$PLAN_USAGE_NOTE": "方案用量 — API 等價估算",
|
|
2210
|
+
"COMMON$USAGE": "用量",
|
|
2211
|
+
"CONVERSATION$COMPACT_CONTEXT": "壓縮上下文",
|
|
2212
|
+
"CONVERSATION$CONTEXT_FILLING_UP": "上下文即將佔滿——壓縮可釋放空間",
|
|
2213
|
+
"CONVERSATION$PROVIDER_BALANCE": "供應商餘額",
|
|
2214
|
+
"CONVERSATION$CREDITS_REMAINING": "剩餘額度",
|
|
2215
|
+
"CONVERSATION$CREDITS_USED": "已用額度",
|
|
2216
|
+
"CONVERSATION$FREE_TIER": "免費方案",
|
|
2217
|
+
"CHAT_INTERFACE$CONTEXT_WINDOW_METER_LABEL": "上下文視窗用量",
|
|
2218
|
+
"CHAT_INTERFACE$SHOW_CONTEXT": "顯示上下文",
|
|
2191
2219
|
"CONVERSATION$TAGS_OVERFLOW_ARIA": "顯示另外 {{count}} 個標籤",
|
|
2192
2220
|
"CONVERSATION_PANEL$PREVIEW_GIT": "Git",
|
|
2193
2221
|
"CONVERSATION_PANEL$PREVIEW_REPO": "倉庫",
|
|
@@ -2216,5 +2244,62 @@
|
|
|
2216
2244
|
"CHILD_CONVERSATION$OPEN": "開啟",
|
|
2217
2245
|
"CHILD_CONVERSATION$LAUNCH_FAILED": "無法啟動子對話:{{error}}",
|
|
2218
2246
|
"ACTION_MESSAGE$LAUNCH_CHILD_CONVERSATION": "正在啟動子對話",
|
|
2219
|
-
"OBSERVATION_MESSAGE$LAUNCH_CHILD_CONVERSATION": "已請求子對話"
|
|
2247
|
+
"OBSERVATION_MESSAGE$LAUNCH_CHILD_CONVERSATION": "已請求子對話",
|
|
2248
|
+
"AUTOMATIONS$GIT_SYNC$NAV_BUTTON": "Git 同步",
|
|
2249
|
+
"AUTOMATIONS$GIT_SYNC$TITLE": "Git 同步",
|
|
2250
|
+
"AUTOMATIONS$GIT_SYNC$SUBTITLE": "將自動化同步到 Git 儲存庫,以便在重新啟動後保留並可以共用。",
|
|
2251
|
+
"AUTOMATIONS$GIT_SYNC$STATUS_TITLE": "同步狀態",
|
|
2252
|
+
"AUTOMATIONS$GIT_SYNC$CONFIG_TITLE": "設定",
|
|
2253
|
+
"AUTOMATIONS$GIT_SYNC$FIELD_ENABLED": "啟用 Git 同步",
|
|
2254
|
+
"AUTOMATIONS$GIT_SYNC$ENABLED_HELP": "關閉後可暫停同步而不遺失設定。要開啟,後端必須在啟動時已啟用 Git 同步。",
|
|
2255
|
+
"AUTOMATIONS$GIT_SYNC$ENABLED": "已啟用",
|
|
2256
|
+
"AUTOMATIONS$GIT_SYNC$DISABLED": "已停用",
|
|
2257
|
+
"AUTOMATIONS$GIT_SYNC$ENCRYPTED": "已加密",
|
|
2258
|
+
"AUTOMATIONS$GIT_SYNC$NOT_ENCRYPTED": "未加密",
|
|
2259
|
+
"AUTOMATIONS$GIT_SYNC$SAVE_AND_SYNC": "儲存並立即同步",
|
|
2260
|
+
"AUTOMATIONS$GIT_SYNC$SYNC_NOW": "立即同步",
|
|
2261
|
+
"AUTOMATIONS$GIT_SYNC$SYNCING": "同步中...",
|
|
2262
|
+
"AUTOMATIONS$GIT_SYNC$SYNC_STARTED_AGO": "{{time}}前開始",
|
|
2263
|
+
"AUTOMATIONS$GIT_SYNC$SYNC_PENDING_COUNT": "待同步 {{count}} 項",
|
|
2264
|
+
"AUTOMATIONS$GIT_SYNC$SYNC_COMPLETED": "同步完成",
|
|
2265
|
+
"AUTOMATIONS$GIT_SYNC$SYNC_FAILED": "同步失敗",
|
|
2266
|
+
"AUTOMATIONS$GIT_SYNC$SYNC_DISABLED_ERROR": "請先啟用 Git 同步,再觸發同步。",
|
|
2267
|
+
"AUTOMATIONS$GIT_SYNC$REPOSITORY": "儲存庫",
|
|
2268
|
+
"AUTOMATIONS$GIT_SYNC$NOT_CONFIGURED": "未設定",
|
|
2269
|
+
"AUTOMATIONS$GIT_SYNC$LAST_SYNCED_COMMIT": "最近同步的提交",
|
|
2270
|
+
"AUTOMATIONS$GIT_SYNC$LAST_SYNCED_AT": "最近同步時間",
|
|
2271
|
+
"AUTOMATIONS$GIT_SYNC$PENDING_CHANGES": "待處理的變更",
|
|
2272
|
+
"AUTOMATIONS$GIT_SYNC$NEVER_SYNCED": "從未同步",
|
|
2273
|
+
"AUTOMATIONS$GIT_SYNC$LAST_ERROR_TITLE": "最近一次同步錯誤",
|
|
2274
|
+
"AUTOMATIONS$GIT_SYNC$FIELD_REPO_URL": "儲存庫 URL",
|
|
2275
|
+
"AUTOMATIONS$GIT_SYNC$REPO_URL_PLACEHOLDER": "https://github.com/org/repo.git",
|
|
2276
|
+
"AUTOMATIONS$GIT_SYNC$FIELD_BRANCH": "分支",
|
|
2277
|
+
"AUTOMATIONS$GIT_SYNC$BRANCH_PLACEHOLDER": "main",
|
|
2278
|
+
"AUTOMATIONS$GIT_SYNC$FIELD_PATH": "路徑",
|
|
2279
|
+
"AUTOMATIONS$GIT_SYNC$PATH_PLACEHOLDER": "automations",
|
|
2280
|
+
"AUTOMATIONS$GIT_SYNC$FIELD_AUTHOR_NAME": "提交作者姓名",
|
|
2281
|
+
"AUTOMATIONS$GIT_SYNC$FIELD_AUTHOR_EMAIL": "提交作者電子郵件",
|
|
2282
|
+
"AUTOMATIONS$GIT_SYNC$AUTHOR_HELP": "留空則使用後端的預設提交作者。",
|
|
2283
|
+
"AUTOMATIONS$GIT_SYNC$FIELD_TOKEN": "存取權杖",
|
|
2284
|
+
"AUTOMATIONS$GIT_SYNC$FIELD_ENCRYPTION_KEY": "加密金鑰",
|
|
2285
|
+
"AUTOMATIONS$GIT_SYNC$TOKEN_HELP": "私有儲存庫需要此項。留空則保留現有權杖不變。",
|
|
2286
|
+
"AUTOMATIONS$GIT_SYNC$TOKEN_PLACEHOLDER": "留空以保留目前的權杖",
|
|
2287
|
+
"AUTOMATIONS$GIT_SYNC$KEY_SET_PLACEHOLDER": "目前已設定加密金鑰",
|
|
2288
|
+
"AUTOMATIONS$GIT_SYNC$KEY_UNSET_PLACEHOLDER": "尚未設定加密金鑰",
|
|
2289
|
+
"AUTOMATIONS$GIT_SYNC$ENCRYPTION_KEY_HELP": "選填。提交前會加密自動化檔案,因此儲存庫中保存的是密文而非可讀的 YAML。請妥善保存金鑰副本;沒有它將無法讀取或還原該儲存庫。",
|
|
2290
|
+
"AUTOMATIONS$GIT_SYNC$CLEAR_TOKEN": "清除現有權杖",
|
|
2291
|
+
"AUTOMATIONS$GIT_SYNC$CLEAR_ENCRYPTION_KEY": "清除現有加密金鑰",
|
|
2292
|
+
"AUTOMATIONS$GIT_SYNC$CONFIG_SAVED": "Git 同步設定已儲存。",
|
|
2293
|
+
"AUTOMATIONS$GIT_SYNC$CHECKING": "正在檢查儲存庫...",
|
|
2294
|
+
"AUTOMATIONS$GIT_SYNC$CHECK_FAILED_TITLE": "使用這些設定無法存取儲存庫",
|
|
2295
|
+
"AUTOMATIONS$GIT_SYNC$CHECK_FAILED_HINT": "請修改上面的設定,或再次點擊「儲存」仍然儲存。",
|
|
2296
|
+
"AUTOMATIONS$GIT_SYNC$ENABLE_BLOCKED_ERROR": "必須先在自動化後端的環境中啟用 Git 同步並重新啟動服務,才能在此處開啟。",
|
|
2297
|
+
"AUTOMATIONS$GIT_SYNC$NOT_LOCAL_TITLE": "Git 同步無法使用",
|
|
2298
|
+
"AUTOMATIONS$GIT_SYNC$NOT_LOCAL_MESSAGE": "只有連線到本機 OpenHands 後端時才能使用 Git 同步。",
|
|
2299
|
+
"AUTOMATIONS$GIT_SYNC$UNSUPPORTED_TITLE": "此後端不支援 Git 同步",
|
|
2300
|
+
"AUTOMATIONS$GIT_SYNC$UNSUPPORTED_MESSAGE": "自動化後端執行的版本不包含 Git 同步 API。請將其更新到支援 Git 同步的版本。",
|
|
2301
|
+
"AUTOMATIONS$GIT_SYNC$FIELD_INTERVAL": "同步間隔(秒)",
|
|
2302
|
+
"AUTOMATIONS$GIT_SYNC$INTERVAL_HELP": "設定為 0 則僅在點擊「立即同步」時同步。",
|
|
2303
|
+
"AUTOMATIONS$GIT_SYNC$MANUAL_ONLY": "僅手動",
|
|
2304
|
+
"AUTOMATIONS$GIT_SYNC$EVERY_N_SECONDS": "每 {{count}} 秒"
|
|
2220
2305
|
}
|
package/config/defaults.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"_comment": "Single source of truth for version pins, ports, paths, and defaults shared across the npm and Docker install paths. Read by scripts/dev-safe.mjs, scripts/dev-with-automation.mjs, docker/entrypoint.sh (via generated defaults.env), and .github/workflows/docker.yml.",
|
|
3
3
|
"versions": {
|
|
4
|
-
"agentServer": "1.
|
|
5
|
-
"agentCanvas": "1.
|
|
6
|
-
"automation": "1.
|
|
4
|
+
"agentServer": "1.42.1",
|
|
5
|
+
"agentCanvas": "1.14.0",
|
|
6
|
+
"automation": "1.7.1"
|
|
7
7
|
},
|
|
8
8
|
"compatibility": {
|
|
9
9
|
"minimumAgentServer": "1.28.0"
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require("../_virtual/_rolldown/runtime.cjs");const e=require("../node_modules/@openhands/typescript-client/dist/client/server-client.cjs"),t=require("../node_modules/@openhands/typescript-client/dist/client/settings-client.cjs");require("../node_modules/@openhands/typescript-client/dist/clients.cjs");const n=require("./agent-server-config.cjs"),r=require("./backend-registry/active-store.cjs"),i=require("./agent-server-client-options.cjs"),a=require("../config/defaults.cjs");var o=5e3,s=`unknown`,c=a.default.compatibility.minimumAgentServer,l=`AGENT_SERVER_UNSUPPORTED_VERSION`,u=`AGENT_SERVER_UNKNOWN_VERSION`,d=null,f=null,p=e=>Array.isArray(e?.usable_tools)?e.usable_tools:null,m=class extends Error{details;noBackendConfigured;constructor(e,t){let n=t?.noBackendConfigured??!1;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}},h=e=>e instanceof m||typeof e==`object`&&!!e&&`name`in e&&e.name===`AgentServerUnavailableError
|
|
1
|
+
require("../_virtual/_rolldown/runtime.cjs");const e=require("../node_modules/@openhands/typescript-client/dist/client/server-client.cjs"),t=require("../node_modules/@openhands/typescript-client/dist/client/settings-client.cjs");require("../node_modules/@openhands/typescript-client/dist/clients.cjs");const n=require("./agent-server-config.cjs"),r=require("./backend-registry/active-store.cjs"),i=require("./agent-server-client-options.cjs"),a=require("../config/defaults.cjs");var o=5e3,s=`unknown`,c=a.default.compatibility.minimumAgentServer,l=`AGENT_SERVER_UNSUPPORTED_VERSION`,u=`AGENT_SERVER_UNKNOWN_VERSION`,d=null,f=null,p=e=>Array.isArray(e?.usable_tools)?e.usable_tools:null,m=class extends Error{details;noBackendConfigured;constructor(e,t){let n=t?.noBackendConfigured??!1;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}},h=e=>e instanceof m||typeof e==`object`&&!!e&&`name`in e&&(e.name===`AgentServerUnavailableError`||e.name===`AgentServerUnsupportedVersionError`||e.name===`AgentServerUnknownVersionError`),g=class extends m{code=l;actualVersion;requiredVersion=c;constructor(e){let t=`Agent Canvas requires agent-server ${c} or newer; this backend is running ${e}. Please upgrade the agent-server backend.`;super(t),this.name=`AgentServerUnsupportedVersionError`,this.message=t,this.actualVersion=e}},_=class extends m{code=u;actualVersion;requiredVersion=c;constructor(e){let t=`Could not determine this backend's agent-server version.${e?` It reported "${e}".`:``} Agent Canvas requires agent-server ${c} or newer, but this backend did not return a valid version from /server_info. Restart or rebuild the agent-server backend, then try again.`;super(t),this.name=`AgentServerUnknownVersionError`,this.message=t,this.actualVersion=e}},v=e=>n.isAuthRequired()&&C(e,401);function y(){d=null,f=null}function b(e){return e?.host&&e.host!==f?null:d}function x(e){let t=p(d);return Array.isArray(t)?t.includes(e):!0}function S(e){return e instanceof Error&&e.name===`HttpError`&&`status`in e&&typeof e.status==`number`}function C(e,t){return S(e)&&e.status===t}function w(e){return typeof e==`string`&&e.trim()||null}function T(e){return w(e.sdk_version)}function E(e){return w(e.version)??T(e)}function D(e){let t=E(e);return!t||t.toLowerCase()===s?null:t}function O(e){let t=D(e);return!t||!j(t)?null:t}function k(e){return!d||e&&r.getEffectiveLocalBackend()?.host!==e?null:O(d)}function A(e,t){let n=j(e),r=j(t);if(!n||!r)return null;for(let e of[`major`,`minor`,`patch`]){if(n[e]>r[e])return 1;if(n[e]<r[e])return-1}return n.prerelease&&!r.prerelease?-1:!n.prerelease&&r.prerelease?1:n.prerelease&&r.prerelease?n.prerelease.localeCompare(r.prerelease):0}function j(e){let[t]=e.trim().replace(/^v/,``).split(`+`),[n,r]=t.split(`-`,2),i=n.split(`.`);if(i.length!==3)return null;let[a,o,s]=i.map(e=>Number(e));return[a,o,s].every(e=>Number.isInteger(e)&&e>=0)?{major:a,minor:o,patch:s,prerelease:r}:null}function M(e){let t=D(e);if(!t)throw y(),new _(E(e));let n=A(t,c);if(n===null)throw y(),new _(t);if(n<0)throw y(),new g(t)}async function N(){let a=r.getEffectiveLocalBackend();if(!a){if(y(),r.isNoBackend(r.getActiveBackend().backend))throw new m(`No backend configured`,{noBackendConfigured:!0});return null}let s=i.getAgentServerClientOptions({host:a.host,sessionApiKey:a.apiKey||null,timeout:o}),c;try{c=await new e.ServerClient(s).getServerInfo()}catch(e){throw y(),C(e,401)?e:new m(e instanceof Error?e.message:null)}if(M(c),n.isAuthRequired())try{await new t.SettingsClient(s).getSettings()}catch(e){if(C(e,401))throw e;console.warn(`[agent-server] getSettings() probe failed (non-401):`,e)}return d=c,f=s.host,c}exports.assertAgentServerVersionIsSupported=M,exports.clearCachedAgentServerInfo=y,exports.compareAgentServerVersions=A,exports.getCachedAgentServerInfo=b,exports.getCachedAgentServerVersion=k,exports.getDisplayAgentServerVersion=O,exports.isAgentServerAuthError=v,exports.isAgentServerToolAvailable=x,exports.isAgentServerUnavailableError=h,exports.isSdkHttpStatusError=C,exports.loadAgentServerInfo=N;
|
|
2
2
|
//# sourceMappingURL=agent-server-compatibility.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-server-compatibility.cjs","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\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.cjs","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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"}
|
|
@@ -13,7 +13,7 @@ var c = 5e3, l = "unknown", u = s.compatibility.minimumAgentServer, d = "AGENT_S
|
|
|
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
|
-
}, _ = (e) => e instanceof g || typeof e == "object" && !!e && "name" in e && e.name === "AgentServerUnavailableError", v = class extends g {
|
|
16
|
+
}, _ = (e) => e instanceof g || typeof e == "object" && !!e && "name" in e && (e.name === "AgentServerUnavailableError" || e.name === "AgentServerUnsupportedVersionError" || e.name === "AgentServerUnknownVersionError"), v = class extends g {
|
|
17
17
|
code = d;
|
|
18
18
|
actualVersion;
|
|
19
19
|
requiredVersion = u;
|
|
@@ -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\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 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":";;;;;;;;AAcA,IAAM,IAA+B,KAC/B,IAA+B,WAExB,IACX,EAAS,cAAc,oBACZ,IACX,oCACW,IACX,gCAQE,IAAgD,MAChD,IAA2C,MAEzC,KAAsB,MACtB,MAAM,QAAQ,GAAY,YAAY,IACjC,EAAW,eAEb,MAGI,IAAb,cAAiD,MAAM;CACrD;CACA;CAEA,YACE,GACA,GACA;EACA,IAAM,IAAsB,GAAS,uBAAuB;EAQ5D,AAPA,MACE,IACI,6EACA,gHACN,GACA,KAAK,OAAO,+BACZ,KAAK,UAAU,KAAW,MAC1B,KAAK,sBAAsB;CAC7B;AACF,GAEa,KACX,MAEA,aAAiB,KAChB,OAAO,KAAU,cAChB,KACA,UAAU,MACT,EAAM,SAAS,iCACd,EAAM,SAAS,wCACf,EAAM,SAAS,mCAER,IAAb,cAAwD,EAA4B;CAClF,OAAgB;CAChB;CACA,kBAA2B;CAE3B,YAAY,GAAuB;EACjC,IAAM,IAAU,sCAAsC,EAAwC,qCAAqC,EAAc;EAIjJ,AAHA,MAAM,CAAO,GACb,KAAK,OAAO,sCACZ,KAAK,UAAU,GACf,KAAK,gBAAgB;CACvB;AACF,GAEa,IAAb,cAAoD,EAA4B;CAC9E,OAAgB;CAChB;CACA,kBAA2B;CAE3B,YAAY,GAA8B;EAExC,IAAM,IACJ,2DAFe,IAAgB,iBAAiB,EAAc,MAAM,GAEA,sCAC9B,EAAwC;EAMhF,AAHA,MAAM,CAAO,GACb,KAAK,OAAO,kCACZ,KAAK,UAAU,GACf,KAAK,gBAAgB;CACvB;AACF,GA6Ba,KAA0B,MACrC,EAAe,KAAK,EAAqB,GAAO,GAAG;AAErD,SAAgB,IAA6B;CAE3C,AADA,IAAwB,MACxB,IAA4B;AAC9B;AAEA,SAAgB,EAAyB,GAEd;CAIzB,OAHI,GAAS,QAAQ,EAAQ,SAAS,IAC7B,OAEF;AACT;AAEA,SAAgB,EAA2B,GAAkB;CAC3D,IAAM,IAAiB,EAAmB,CAAqB;CAI/D,OAHK,MAAM,QAAQ,CAAc,IAG1B,EAAe,SAAS,CAAQ,IAF9B;AAGX;AAEA,SAAgB,EAAe,GAAgB;CAC7C,OACE,aAAiB,SACjB,EAAM,SAAS,eACf,YAAY,KACZ,OAAO,EAAM,UAAW;AAE5B;AAMA,SAAgB,EAAqB,GAAgB,GAAyB;CAC5E,OACE,EAAe,CAAK,KAAM,EAA6B,WAAW;AAEtE;AAEA,SAAS,EAAgC,GAAiC;CAGxE,OAFI,OAAO,KAAY,YACP,EAAQ,KACjB,KAFiC;AAG1C;AAEA,SAAS,EACP,GACe;CACf,OAAO,EAAgC,EAAW,WAAW;AAC/D;AAEA,SAAS,EAAyB,GAA4C;CAC5E,OACE,EAAgC,EAAW,OAAO,KAClD,EAA4B,CAAU;AAE1C;AAEA,SAAS,EACP,GACe;CACf,IAAM,IAAU,EAAyB,CAAU;CAInD,OAHI,CAAC,KAAW,EAAQ,YAAY,MAAM,IACjC,OAEF;AACT;AAEA,SAAgB,EACd,GACe;CACf,IAAM,IAAU,EAAgC,CAAU;CAI1D,OAHI,CAAC,KAAW,CAAC,EAAwB,CAAO,IACvC,OAEF;AACT;AAsBA,SAAgB,EACd,GACe;CAGf,OAFI,CAAC,KACD,KAAQ,EAAyB,GAAG,SAAS,IAAa,OACvD,EAA6B,CAAqB;AAC3D;AAEA,SAAgB,EAA2B,GAAgB,GAAkB;CAC3E,IAAM,IAAe,EAAwB,CAAM,GAC7C,IAAiB,EAAwB,CAAQ;CAEvD,IAAI,CAAC,KAAgB,CAAC,GACpB,OAAO;CAGT,KAAK,IAAM,KAAO;EAAC;EAAS;EAAS;CAAO,GAAY;EACtD,IAAI,EAAa,KAAO,EAAe,IACrC,OAAO;EAET,IAAI,EAAa,KAAO,EAAe,IACrC,OAAO;CAEX;CAYA,OAVI,EAAa,cAAc,CAAC,EAAe,aACtC,KAEL,CAAC,EAAa,cAAc,EAAe,aACtC,IAEL,EAAa,cAAc,EAAe,aACrC,EAAa,WAAW,cAAc,EAAe,UAAU,IAGjE;AACT;AAEA,SAAS,EAAwB,GAAiB;CAEhD,IAAM,CAAC,KADS,EAAQ,KAAK,EAAE,QAAQ,MAAM,EACtB,EAAQ,MAAM,GAAG,GAClC,CAAC,GAAM,KAAc,EAAa,MAAM,KAAK,CAAC,GAC9C,IAAQ,EAAK,MAAM,GAAG;CAE5B,IAAI,EAAM,WAAW,GACnB,OAAO;CAGT,IAAM,CAAC,GAAO,GAAO,KAAS,EAAM,KAAK,MAAS,OAAO,CAAI,CAAC;CAO9D,OALG;EAAC;EAAO;EAAO;CAAK,EAAE,OAAO,MAAS,OAAO,UAAU,CAAI,KAAK,KAAQ,CAAC,IAKrE;EAAE;EAAO;EAAO;EAAO;CAAW,IAHhC;AAIX;AAEA,SAAgB,EACd,GACA;CACA,IAAM,IAAgB,EAAgC,CAAU;CAChE,IAAI,CAAC,GAEH,MADA,EAA2B,GACrB,IAAI,EACR,EAAyB,CAAU,CACrC;CAGF,IAAM,IAAa,EACjB,GACA,CACF;CAEA,IAAI,MAAe,MAEjB,MADA,EAA2B,GACrB,IAAI,EAA+B,CAAa;CAGxD,IAAI,IAAa,GAEf,MADA,EAA2B,GACrB,IAAI,EAAmC,CAAa;AAE9D;AAEA,eAAsB,IAAsB;CAK1C,IAAM,IAAQ,EAAyB;CACvC,IAAI,CAAC,GAAO;EAMV,IALA,EAA2B,GAKvB,EAAY,EAAiB,EAAE,OAAO,GACxC,MAAM,IAAI,EAA4B,yBAAyB,EAC7D,qBAAqB,GACvB,CAAC;EAIH,OAAO;CACT;CAEA,IAAM,IAAgB,EAA4B;EAChD,MAAM,EAAM;EACZ,eAAe,EAAM,UAAU;EAC/B,SAAS;CACX,CAAC,GACG;CAEJ,IAAI;EACF,IAAc,MAAM,IAAI,EACtB,CACF,EAAE,cAAc;CAClB,SAAS,GAAO;EAUd,MATA,EAA2B,GAIvB,EAAqB,GAAO,GAAG,IAC3B,IAIF,IAAI,EADM,aAAiB,QAAQ,EAAM,UAAU,IACZ;CAC/C;CAQA,IANA,EAAoC,CAAU,GAM1C,EAAe,GACjB,IAAI;EACF,MAAM,IAAI,EAAe,CAAa,EAAE,YAAY;CACtD,SAAS,GAAO;EAWd,IAAI,EAAqB,GAAO,GAAG,GACjC,MAAM;EAGR,QAAQ,KACN,wDACA,CACF;CACF;CAKF,OAFA,IAAwB,GACxB,IAA4B,EAAc,MACnC;AACT"}
|
|
@@ -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){let n=e.getActiveBackend().backend,r=`${c}${s.AUTOMATION_CREATE_ENDPOINT}`;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 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;
|
|
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){let n=e.getActiveBackend().backend,r=`${c}${s.AUTOMATION_CREATE_ENDPOINT}`;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 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
|