@openhands/agent-canvas 1.3.0 → 1.5.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 +11 -12
- package/README.windows.md +4 -2
- package/build/assets/{Trans-DY6toRDu.js → Trans-DqF_OEZB.js} +1 -1
- package/build/assets/{acp-providers-Djl6vNn-.js → acp-providers-BQwoUBpe.js} +1 -1
- package/build/assets/active-backend-context-BCXRv5pm.js +1 -0
- package/build/assets/{add-backend-modal-DljoP9lc.js → add-backend-modal-BKHzq5no.js} +1 -1
- package/build/assets/{agent-profiles-settings-BJMmTZgv.js → agent-profiles-settings-CEp5CIz8.js} +1 -1
- package/build/assets/agent-server-compatibility-D6DSanlx.js +1 -0
- package/build/assets/agent-server-conversation-service.api-cylugfDz.js +41 -0
- package/build/assets/{agent-settings-lUknCeaF.js → agent-settings-C-tann3x.js} +2 -2
- package/build/assets/agent-settings-DGUKNSnU.js +1 -0
- package/build/assets/{alert-banner-Bpf2NQJq.js → alert-banner-Dd4woGbm.js} +1 -1
- package/build/assets/api-key-entry-screen-Bll_CkuQ.js +1 -0
- package/build/assets/app-settings-BpViWwpC.js +1 -0
- package/build/assets/automation-detail-Z9dN2f5l.js +2 -0
- package/build/assets/automation-export-D5uL0Tf8.js +2 -0
- package/build/assets/automations-list-BMOWcqzZ.js +1 -0
- package/build/assets/{back-nav-button-CUS2mi-U.js → back-nav-button-ZUDTMOTB.js} +1 -1
- package/build/assets/backend-form-modal-DhBT8P4g.js +1 -0
- package/build/assets/{backend-synced-settings-badge-CanzmG12.js → backend-synced-settings-badge-Db_REKVw.js} +1 -1
- package/build/assets/{base-modal-BuF2f0YL.js → base-modal-Cb0C6m0Q.js} +1 -1
- package/build/assets/{bot-D7eUAuSB.js → bot-C-EA6685.js} +1 -1
- package/build/assets/{brand-button-vMVuyDXu.js → brand-button-2Tp3aXk1.js} +1 -1
- package/build/assets/{browser-BifzWIBd.js → browser-QYLVr1kS.js} +2 -2
- package/build/assets/browser-store-BGXOGo-R.js +1 -0
- package/build/assets/{browser-tab-CkkqJnqw.js → browser-tab-BTTP1OE2.js} +1 -1
- package/build/assets/canvas-ui-BhxjoA1f.js +1 -0
- package/build/assets/{chat-send-button-B_jc5z5C.js → chat-send-button-BZHG2hAW.js} +1 -1
- package/build/assets/check-TbOEtHKj.js +1 -0
- package/build/assets/{chevron-down-CI8A6tet.js → chevron-down-D7IvFMBM.js} +1 -1
- package/build/assets/{circle-plus-check-toggle-C5YxjxvI.js → circle-plus-check-toggle-QQJKUnF6.js} +1 -1
- package/build/assets/client-source-Biqarhgr.js +1 -0
- package/build/assets/cloud-funnel-analytics-D-27T5Ao.js +1 -0
- package/build/assets/{combobox-caret-DoObzqf4.js → combobox-caret-A5jMVHgE.js} +1 -1
- package/build/assets/{command-menu-D-JV3Wqm.js → command-menu-BMVEme4H.js} +1 -1
- package/build/assets/{command-store-D8J5LMW1.js → command-store-jrWX_CcW.js} +1 -1
- package/build/assets/condenser-settings-CIa6eyB4.js +1 -0
- package/build/assets/{confirmation-modal-BGLu6XJN.js → confirmation-modal-4n_944zq.js} +1 -1
- package/build/assets/{context-menu-list-item-BD5_EaKN.js → context-menu-list-item-DvfFic5I.js} +1 -1
- package/build/assets/conversation-CHnEXGRM.js +1 -0
- package/build/assets/conversation-D4o4dG2t.js +89 -0
- package/build/assets/conversation-panel-11FjLCId.js +1 -0
- package/build/assets/conversation-service.api-0JG_fF9d.js +1 -0
- package/build/assets/conversation-state-store-JiUQp02U.js +1 -0
- package/build/assets/{conversation-store-LptbOvKa.js → conversation-store-BCSpLuEf.js} +1 -1
- package/build/assets/{conversation-tab-empty-state-B2dDYEwf.js → conversation-tab-empty-state-BUhKVwoi.js} +1 -1
- package/build/assets/{copy-3JCw_XFB.js → copy-D1YGjP-C.js} +1 -1
- package/build/assets/{copy-to-clipboard-button-CaR52OnA.js → copy-to-clipboard-button-Dp4Q_hXi.js} +1 -1
- package/build/assets/declaration-BGsHjPEW.js +1 -0
- package/build/assets/{device-verify-BsznkV-a.js → device-verify-CM086oKs.js} +1 -1
- package/build/assets/{dropdown-classes-DJSXeLqc.js → dropdown-classes-DZq0BQjb.js} +1 -1
- package/build/assets/{ellipsis-button-C5Z-tPFp.js → ellipsis-button-TPJdyxnK.js} +1 -1
- package/build/assets/{entry.client-JixNvFrr.js → entry.client-DypYHsYm.js} +2 -2
- package/build/assets/{enum-filter-dropdown-DXbVwiNZ.js → enum-filter-dropdown-CW_mBg0e.js} +1 -1
- package/build/assets/{environment-switch-overlay-DZQfRGTx.js → environment-switch-overlay-6laJch-9.js} +1 -1
- package/build/assets/{extensions-hub-DfvgqzTc.js → extensions-hub-BJFbFfKS.js} +1 -1
- package/build/assets/{extensions-navigation-D9i0DL62.js → extensions-navigation-DqSl7CJw.js} +1 -1
- package/build/assets/{external-link-D2zJjE9G.js → external-link-lhdITPqq.js} +1 -1
- package/build/assets/files-tab-c316dKAq.js +1 -0
- package/build/assets/{files-tab-store-DJsPxYdg.js → files-tab-store-tfCav6bB.js} +1 -1
- package/build/assets/{form-control-classes-ChpNBe9n.js → form-control-classes-CvUaw8_L.js} +1 -1
- package/build/assets/format-time-delta-DhDbkD7V.js +1 -0
- package/build/assets/git-provider-icon-DUb2pEos.js +1 -0
- package/build/assets/home-BQ-DC06B.js +1 -0
- package/build/assets/home-D7ds4Jyw.js +1 -0
- package/build/assets/index-home-BRFDWs_4.js +1 -0
- package/build/assets/install-server-modal-CvHvzZj3.js +1 -0
- package/build/assets/{launch-BgIlZLSX.js → launch-A47TK2Me.js} +1 -1
- package/build/assets/lesson-plan-DSf95kQ2.js +4 -0
- package/build/assets/{list-todo-BfH6yYUK.js → list-todo-CAtvkzcy.js} +1 -1
- package/build/assets/llm-not-configured-banner-B7DR8SPs.js +27 -0
- package/build/assets/llm-settings-Ch4ZbW3c.js +1 -0
- package/build/assets/llm-settings-Cvi7q4ox.js +1 -0
- package/build/assets/llm-subscription-service-Cz1yBBvE.js +1 -0
- package/build/assets/loader-circle-CsAsfLIs.js +1 -0
- package/build/assets/{loading-spinner-BLdswi6q.js → loading-spinner-Txxx1I1p.js} +1 -1
- package/build/assets/manage-backends-modal-DAVhNUCe.js +1 -0
- package/build/assets/manifest-958c741a.js +1 -0
- package/build/assets/{markdown-renderer-DMT7Zkpd.js → markdown-renderer-B6cJJ_MN.js} +1 -1
- package/build/assets/{mcp-CHkklDMv.js → mcp-BwssgMpg.js} +2 -2
- package/build/assets/{messages-B3RugH7P.js → messages-D8MeG2ZQ.js} +26 -26
- package/build/assets/{modal-body-DouOE5KH.js → modal-body-CDZdZ-eT.js} +1 -1
- package/build/assets/{modal-classes-Cf-4tbHz.js → modal-classes-B4oit_4c.js} +1 -1
- package/build/assets/{modal-close-button-B6CfxxJj.js → modal-close-button-DQElFMPo.js} +1 -1
- package/build/assets/model-selector-BxTbbKub.js +1 -0
- package/build/assets/{navigation-link-D8hfwvxI.js → navigation-link-imH6S7h2.js} +1 -1
- package/build/assets/onboarding-CyicadGt.js +1 -0
- package/build/assets/onboarding-modal-DQwihcTz.js +1 -0
- package/build/assets/option-service.api-DAkg_F7p.js +1 -0
- package/build/assets/organization-service.api-QknzKDh3.js +1 -0
- package/build/assets/package-Dk_VtWJ4.js +1 -0
- package/build/assets/path-utils-BECGet7G.js +1 -0
- package/build/assets/{pencil-Dj2XjKmI.js → pencil-CWhApFIT.js} +1 -1
- package/build/assets/{plan-components-CcCBmCzW.js → plan-components-CgPHWz3E.js} +1 -1
- package/build/assets/{planner-tab-CCqdXxkL.js → planner-tab-DPKHmMAX.js} +1 -1
- package/build/assets/plugins-management-service-DuTTxquo.js +1 -0
- package/build/assets/profiles-service.api-D6jvZOWu.js +1 -0
- package/build/assets/providers-B8pxQK8x.js +1 -0
- package/build/assets/proxy-CuhhyjdX.js +1 -0
- package/build/assets/{recommended-automations-launcher-CVEF_1pc.js → recommended-automations-launcher-DA6DWS7V.js} +1 -1
- package/build/assets/{refresh-cw-DM82EIyx.js → refresh-cw-B9B7-vsy.js} +1 -1
- package/build/assets/root-BhP6bTBB.js +2 -0
- package/build/assets/root-CYWeTrWE.css +1 -0
- package/build/assets/root-layout-oBaHHW4s.js +2 -0
- package/build/assets/{runtime-waiting-state-BsXLElvN.js → runtime-waiting-state-DeD9G7yJ.js} +1 -1
- package/build/assets/schema-field-BOLdL_U7.js +1 -0
- package/build/assets/sdk-section-page-ZIltERxf.js +1 -0
- package/build/assets/{sdk-settings-schema-Cv7M9eSe.js → sdk-settings-schema-Ba_Pa9uf.js} +1 -1
- package/build/assets/search-dIQ09UY2.js +1 -0
- package/build/assets/secrets-service-50DElFny.js +1 -0
- package/build/assets/{secrets-settings-DxTx9HgU.js → secrets-settings-Digl7JLe.js} +1 -1
- package/build/assets/{segmented-toggle-DyQqPhoD.js → segmented-toggle-C1-ZVyr5.js} +1 -1
- package/build/assets/settings-BfgLHsgd.js +1 -0
- package/build/assets/{settings-dropdown-input-BjunGXJb.js → settings-dropdown-input-BD5C9fBn.js} +1 -1
- package/build/assets/{settings-index-BjeuYFFa.js → settings-index-CODBijya.js} +1 -1
- package/build/assets/{settings-input-bD6npsDm.js → settings-input-CzNOq-Pj.js} +1 -1
- package/build/assets/{settings-list-classes-Dp_OgzN0.js → settings-list-classes-CuxH9ZoR.js} +1 -1
- package/build/assets/settings-modal-BcSWpKI0.js +1 -0
- package/build/assets/settings-service.api-Bsu1PvYO.js +1 -0
- package/build/assets/{settings-switch-5cuxl8Dc.js → settings-switch-DqmHAfWJ.js} +1 -1
- package/build/assets/{settings-utils-BMdG65By.js → settings-utils-B1lBErvV.js} +1 -1
- package/build/assets/shared-conversation-CDskdmrb.js +1 -0
- package/build/assets/{sidebar-layout-DuzJMMw-.js → sidebar-layout-Cn6eQaEI.js} +1 -1
- package/build/assets/{sidebar-mobile-menu-toggle-CMmAYkh8.js → sidebar-mobile-menu-toggle-DmCmZgq1.js} +1 -1
- package/build/assets/{sidebar-nav-link-5AlTT5-j.js → sidebar-nav-link-DMc8AIe7.js} +1 -1
- package/build/assets/{sidebar-store-CZuE8AH5.js → sidebar-store-DXWSCFpa.js} +1 -1
- package/build/assets/{skill-card-pill-row-eTIkE4nz.js → skill-card-pill-row-DOIWjiMF.js} +1 -1
- package/build/assets/skills-plugins-DLgINYuY.js +1 -0
- package/build/assets/{skills-settings-BYn4-AQQ.js → skills-settings-DPiCWalR.js} +2 -2
- package/build/assets/{square-chevron-right-Czw3FFWc.js → square-chevron-right-DE-JN-2Z.js} +1 -1
- package/build/assets/{styled-tooltip-CgX2oRaK.js → styled-tooltip-CvsjHuIf.js} +1 -1
- package/build/assets/{suspense-X5dBsJzn.js → suspense-DmZ3MSSh.js} +1 -1
- package/build/assets/{task-list-tab-0k9PhuqO.js → task-list-tab-CuhcDycu.js} +1 -1
- package/build/assets/telemetry-DHiTRl5_.js +2 -0
- package/build/assets/{terminal-BsGcSpRS.js → terminal-CVqF-tCD.js} +1 -1
- package/build/assets/{toggle-switch-2j5wwR85.js → toggle-switch-CS0ClOy2.js} +1 -1
- package/build/assets/{trash-2-Be_7y3Mn.js → trash-2-BU6BlW4i.js} +1 -1
- package/build/assets/{typography-D8mHDeNG.js → typography-CQn9wyEX.js} +1 -1
- package/build/assets/use-acp-credential-form-LlfZO_DD.js +1 -0
- package/build/assets/{use-activate-agent-profile-WaAZYz4E.js → use-activate-agent-profile-DpQjsXM0.js} +1 -1
- package/build/assets/{use-active-agent-profile-CYY3vGar.js → use-active-agent-profile-Gw_uJujV.js} +1 -1
- package/build/assets/{use-active-conversation-D-r929nx.js → use-active-conversation-B0sttISF.js} +1 -1
- package/build/assets/use-agent-profiles-LHZEK0Gg.js +1 -0
- package/build/assets/{use-agent-state-DijdVAQ0.js → use-agent-state-C5uA0bRj.js} +1 -1
- package/build/assets/use-backends-health-DKt1SmiU.js +1 -0
- package/build/assets/{use-can-manage-org-profiles-BEo0peGn.js → use-can-manage-org-profiles-BAtqsbCi.js} +1 -1
- package/build/assets/use-cloud-current-user-id-C8m1oBy4.js +1 -0
- package/build/assets/use-config-CXy4vD0H.js +1 -0
- package/build/assets/use-create-conversation-CWQGNQ9J.js +1 -0
- package/build/assets/{use-create-secret-D5O5qdWC.js → use-create-secret-BIrsX3OB.js} +1 -1
- package/build/assets/{use-event-store-DjgU4wfO.js → use-event-store-CsD17BKu.js} +1 -1
- package/build/assets/{use-handle-plan-click-Mn_SNTCh.js → use-handle-plan-click-DEuO7Byo.js} +1 -1
- package/build/assets/use-is-authed-Dvbpiu3B.js +1 -0
- package/build/assets/{use-launch-skill-in-chat-BnoDgvAy.js → use-launch-skill-in-chat-CdHOoQGM.js} +1 -1
- package/build/assets/use-llm-profiles-DQpQxVOD.js +1 -0
- package/build/assets/use-plugins-marketplace-Bkk07W_M.js +1 -0
- package/build/assets/use-runtime-is-ready-D4pkGT6E.js +1 -0
- package/build/assets/use-save-agent-profile-BxEsjnW0.js +1 -0
- package/build/assets/{use-save-settings-D1HoCDbn.js → use-save-settings-ioSUMqbE.js} +1 -1
- package/build/assets/use-settings-DNJC4gqu.js +1 -0
- package/build/assets/use-settings-nav-items-BUsrDbVR.js +16 -0
- package/build/assets/use-skills-BsmKm23M.js +1 -0
- package/build/assets/{use-task-list-AVBLbbcR.js → use-task-list-rs7Xbzl8.js} +1 -1
- package/build/assets/{use-tracking-2ZwQwpg_.js → use-tracking-poxQHMwR.js} +1 -1
- package/build/assets/{use-user-conversation-OAfenBRG.js → use-user-conversation-B337kUKB.js} +1 -1
- package/build/assets/{useMutation-DCE9RcgK.js → useMutation-u8UgRgDK.js} +1 -1
- package/build/assets/{useMutationState-BUab8Kxr.js → useMutationState-OnAsCLA_.js} +1 -1
- package/build/assets/{useQueries-CRzaAqzH.js → useQueries-BpIlT8Mt.js} +1 -1
- package/build/assets/{useQuery-CpjHYtZc.js → useQuery-D5pEZbY0.js} +1 -1
- package/build/assets/{useTranslation-CDRCKC9-.js → useTranslation-Cbf5AGg_.js} +1 -1
- package/build/assets/{utils-D3U3rlqr.js → utils-DB9LsAzA.js} +1 -1
- package/build/assets/{vendor~browser-Cvg7jXCP.js → vendor~browser-5Njjw1Cl.js} +1 -1
- package/build/assets/{vendor~browser-tab-Di0kh5Zw.js → vendor~browser-tab-Xn94EtUo.js} +1 -1
- package/build/assets/{vendor~entry.client-9tWQ_Ugw.js → vendor~entry.client-DDuH4--y.js} +1 -1
- package/build/assets/{vendor~entry.client-D6BtSOtn.js → vendor~entry.client-DQGrNspu.js} +1 -1
- package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~dhilvkxv-BIieS_OD.js +2 -0
- package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~iztiaf2o-rqo6vRFz.js +185 -0
- package/build/assets/{vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~skills-set~nn5zty47-Zl0G1QCy.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~ljq5gbus-B2XD4bi2.js} +1 -1
- package/build/assets/{vendor~files-tab-B02k3xvx.js → vendor~files-tab-CiC3-lGh.js} +1 -1
- package/build/assets/{vendor~home~conversation-panel~conversation-CYMF9JYB.js → vendor~index-home~home~conversation-panel~conversation-ChmYLVgz.js} +1 -1
- package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-9UMeuPV6.js → vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-B8XNNEQZ.js} +1 -1
- package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-d8aETPbZ.js → vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-CnJRLn5s.js} +1 -1
- package/build/assets/vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-DWteoTyr.js +2 -0
- package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-D7EUmQ8Y.js → vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-Dc5nKwLO.js} +1 -1
- package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-BD0GaRGa.js → vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-tlf6AnDe.js} +1 -1
- package/build/assets/{vendor~launch-CHXA9cJu.js → vendor~launch-28DK5Rsl.js} +1 -1
- package/build/assets/{vendor~root-layout~conversation-panel~conversation-CpiTHpHl.js → vendor~root-layout~conversation-panel~conversation-8tIsyrPj.js} +1 -1
- package/build/assets/{vendor~root-layout~conversation-panel~conversation~shared-conversation-_TdZcNMD.js → vendor~root-layout~conversation-panel~conversation~shared-conversation-lYNG9C1U.js} +1 -1
- package/build/assets/{vendor~root-layout~home~conversation-panel~conversation-Cn2jwSga.js → vendor~root-layout~index-home~home~conversation-panel~conversation-Zhq6xAxR.js} +1 -1
- package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~shared-conversation~alert-banner~pl~rqjteh0a-CZM4hwUT.js → vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation~aler~gfu7qdtz-B81b08bw.js} +1 -1
- package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~launch~settings~settings-index~agen~enjl5xdm-mMKDm94D.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~ftka0fnu-jpyLM1Nn.js} +2 -2
- package/build/assets/{verification-settings-DnXS6VWv.js → verification-settings-HRgEM-_3.js} +1 -1
- package/build/assets/x-ZE4iplpF.js +1 -0
- package/build/index.html +4 -4
- package/build/locales/ar/openhands.json +9 -0
- package/build/locales/ca/openhands.json +9 -0
- package/build/locales/de/openhands.json +9 -0
- package/build/locales/en/openhands.json +10 -1
- package/build/locales/es/openhands.json +9 -0
- package/build/locales/fr/openhands.json +9 -0
- package/build/locales/it/openhands.json +9 -0
- package/build/locales/ja/openhands.json +9 -0
- package/build/locales/ko-KR/openhands.json +9 -0
- package/build/locales/no/openhands.json +9 -0
- package/build/locales/pt/openhands.json +9 -0
- package/build/locales/tr/openhands.json +9 -0
- package/build/locales/uk/openhands.json +9 -0
- package/build/locales/zh-CN/openhands.json +9 -0
- package/build/locales/zh-TW/openhands.json +9 -0
- package/config/defaults.json +5 -4
- package/dist/api/agent-server-adapter.cjs +3 -3
- package/dist/api/agent-server-adapter.cjs.map +1 -1
- package/dist/api/agent-server-adapter.d.ts +9 -1
- package/dist/api/agent-server-adapter.js +105 -102
- package/dist/api/agent-server-adapter.js.map +1 -1
- package/dist/api/agent-server-config.cjs +1 -1
- package/dist/api/agent-server-config.cjs.map +1 -1
- package/dist/api/agent-server-config.d.ts +3 -0
- package/dist/api/agent-server-config.js +45 -23
- package/dist/api/agent-server-config.js.map +1 -1
- package/dist/api/backend-registry/auth.cjs +1 -1
- package/dist/api/backend-registry/auth.cjs.map +1 -1
- package/dist/api/backend-registry/auth.js +1 -1
- package/dist/api/backend-registry/auth.js.map +1 -1
- package/dist/api/backend-registry/default-backend.cjs +1 -1
- package/dist/api/backend-registry/default-backend.cjs.map +1 -1
- package/dist/api/backend-registry/default-backend.d.ts +3 -0
- package/dist/api/backend-registry/default-backend.js +22 -10
- package/dist/api/backend-registry/default-backend.js.map +1 -1
- package/dist/api/backend-registry/storage.cjs +1 -1
- package/dist/api/backend-registry/storage.cjs.map +1 -1
- package/dist/api/backend-registry/storage.js +38 -33
- package/dist/api/backend-registry/storage.js.map +1 -1
- package/dist/api/backend-registry/types.d.ts +2 -0
- package/dist/api/canvas-ui-client-tool.cjs +38 -0
- package/dist/api/canvas-ui-client-tool.cjs.map +1 -0
- package/dist/api/canvas-ui-client-tool.d.ts +14 -0
- package/dist/api/canvas-ui-client-tool.js +47 -0
- package/dist/api/canvas-ui-client-tool.js.map +1 -0
- package/dist/api/client-source.cjs +2 -0
- package/dist/api/client-source.cjs.map +1 -0
- package/dist/api/client-source.d.ts +9 -0
- package/dist/api/client-source.js +10 -0
- package/dist/api/client-source.js.map +1 -0
- package/dist/api/cloud/client.cjs +2 -0
- package/dist/api/cloud/client.cjs.map +1 -0
- package/dist/api/cloud/client.d.ts +4 -0
- package/dist/api/cloud/client.js +38 -0
- package/dist/api/cloud/client.js.map +1 -0
- package/dist/api/cloud/conversation-service.api.cjs +1 -1
- package/dist/api/cloud/conversation-service.api.cjs.map +1 -1
- package/dist/api/cloud/conversation-service.api.js +33 -31
- package/dist/api/cloud/conversation-service.api.js.map +1 -1
- package/dist/api/cloud/organization-service.api.cjs +1 -1
- package/dist/api/cloud/organization-service.api.cjs.map +1 -1
- package/dist/api/cloud/organization-service.api.js +11 -10
- package/dist/api/cloud/organization-service.api.js.map +1 -1
- package/dist/api/cloud/proxy.cjs +1 -1
- package/dist/api/cloud/proxy.cjs.map +1 -1
- package/dist/api/cloud/proxy.d.ts +2 -40
- package/dist/api/cloud/proxy.js +14 -39
- package/dist/api/cloud/proxy.js.map +1 -1
- package/dist/api/conversation-metadata-store.cjs +1 -1
- package/dist/api/conversation-metadata-store.cjs.map +1 -1
- package/dist/api/conversation-metadata-store.d.ts +2 -9
- package/dist/api/conversation-metadata-store.js +13 -9
- package/dist/api/conversation-metadata-store.js.map +1 -1
- package/dist/api/conversation-service/agent-server-conversation-service.api.cjs +1 -1
- package/dist/api/conversation-service/agent-server-conversation-service.api.cjs.map +1 -1
- package/dist/api/conversation-service/agent-server-conversation-service.api.d.ts +2 -1
- package/dist/api/conversation-service/agent-server-conversation-service.api.js +98 -88
- package/dist/api/conversation-service/agent-server-conversation-service.api.js.map +1 -1
- package/dist/api/conversation-service/agent-server-conversation-service.types.d.ts +5 -0
- package/dist/api/device-flow-client.cjs +1 -1
- package/dist/api/device-flow-client.cjs.map +1 -1
- package/dist/api/device-flow-client.d.ts +4 -58
- package/dist/api/device-flow-client.js +8 -98
- package/dist/api/device-flow-client.js.map +1 -1
- package/dist/api/git-service/agent-server-git-service.api.cjs +1 -1
- package/dist/api/git-service/agent-server-git-service.api.cjs.map +1 -1
- package/dist/api/git-service/agent-server-git-service.api.d.ts +10 -2
- package/dist/api/git-service/agent-server-git-service.api.js +107 -40
- package/dist/api/git-service/agent-server-git-service.api.js.map +1 -1
- package/dist/api/open-hands.types.d.ts +11 -0
- package/dist/api/secrets-service.cjs +1 -1
- package/dist/api/secrets-service.cjs.map +1 -1
- package/dist/api/secrets-service.js +15 -14
- package/dist/api/secrets-service.js.map +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.cjs +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.cjs.map +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.js +73 -64
- package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.js.map +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/get-observation-content.cjs +2 -2
- package/dist/components/conversation-events/chat/event-content-helpers/get-observation-content.cjs.map +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/get-observation-content.js +2 -0
- package/dist/components/conversation-events/chat/event-content-helpers/get-observation-content.js.map +1 -1
- package/dist/components/features/backends/backend-form-modal.cjs +1 -1
- package/dist/components/features/backends/backend-form-modal.cjs.map +1 -1
- package/dist/components/features/backends/backend-form-modal.d.ts +7 -3
- package/dist/components/features/backends/backend-form-modal.js +216 -201
- package/dist/components/features/backends/backend-form-modal.js.map +1 -1
- package/dist/components/features/backends/backend-row.cjs +1 -1
- package/dist/components/features/backends/backend-row.cjs.map +1 -1
- package/dist/components/features/backends/backend-row.js +2 -1
- package/dist/components/features/backends/backend-row.js.map +1 -1
- package/dist/components/features/backends/backend-selector.cjs +1 -1
- package/dist/components/features/backends/backend-selector.cjs.map +1 -1
- package/dist/components/features/backends/backend-selector.js +51 -51
- package/dist/components/features/backends/backend-selector.js.map +1 -1
- package/dist/components/features/backends/device-flow-auth.cjs +1 -1
- package/dist/components/features/backends/device-flow-auth.cjs.map +1 -1
- package/dist/components/features/backends/device-flow-auth.d.ts +4 -1
- package/dist/components/features/backends/device-flow-auth.js +38 -38
- package/dist/components/features/backends/device-flow-auth.js.map +1 -1
- package/dist/components/features/chat/chat-interface.cjs +2 -2
- package/dist/components/features/chat/chat-interface.cjs.map +1 -1
- package/dist/components/features/chat/chat-interface.js +173 -165
- 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.d.ts +2 -1
- package/dist/components/features/chat/components/chat-input-actions.js +44 -43
- package/dist/components/features/chat/components/chat-input-actions.js.map +1 -1
- package/dist/components/features/chat/components/chat-input-container.cjs +1 -1
- package/dist/components/features/chat/components/chat-input-container.cjs.map +1 -1
- package/dist/components/features/chat/components/chat-input-container.d.ts +2 -1
- package/dist/components/features/chat/components/chat-input-container.js +20 -19
- package/dist/components/features/chat/components/chat-input-container.js.map +1 -1
- package/dist/components/features/chat/components/chat-input-profile-picker.cjs +1 -1
- package/dist/components/features/chat/components/chat-input-profile-picker.cjs.map +1 -1
- package/dist/components/features/chat/components/chat-input-profile-picker.js +44 -32
- package/dist/components/features/chat/components/chat-input-profile-picker.js.map +1 -1
- package/dist/components/features/chat/components/resolve-picker-kind.cjs +1 -1
- package/dist/components/features/chat/components/resolve-picker-kind.cjs.map +1 -1
- package/dist/components/features/chat/components/resolve-picker-kind.d.ts +10 -22
- package/dist/components/features/chat/components/resolve-picker-kind.js +6 -3
- package/dist/components/features/chat/components/resolve-picker-kind.js.map +1 -1
- 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.d.ts +2 -1
- package/dist/components/features/chat/custom-chat-input.js +52 -51
- package/dist/components/features/chat/custom-chat-input.js.map +1 -1
- package/dist/components/features/chat/interactive-chat-box.cjs +1 -1
- package/dist/components/features/chat/interactive-chat-box.cjs.map +1 -1
- package/dist/components/features/chat/interactive-chat-box.d.ts +2 -1
- package/dist/components/features/chat/interactive-chat-box.js +9 -8
- package/dist/components/features/chat/interactive-chat-box.js.map +1 -1
- package/dist/components/features/diff-viewer/commit-list.cjs +2 -0
- package/dist/components/features/diff-viewer/commit-list.cjs.map +1 -0
- package/dist/components/features/diff-viewer/commit-list.d.ts +13 -0
- package/dist/components/features/diff-viewer/commit-list.js +27 -0
- package/dist/components/features/diff-viewer/commit-list.js.map +1 -0
- package/dist/components/features/diff-viewer/commit-row.cjs +2 -0
- package/dist/components/features/diff-viewer/commit-row.cjs.map +1 -0
- package/dist/components/features/diff-viewer/commit-row.d.ts +14 -0
- package/dist/components/features/diff-viewer/commit-row.js +59 -0
- package/dist/components/features/diff-viewer/commit-row.js.map +1 -0
- package/dist/components/features/diff-viewer/file-diff-viewer.cjs +1 -1
- package/dist/components/features/diff-viewer/file-diff-viewer.cjs.map +1 -1
- package/dist/components/features/diff-viewer/file-diff-viewer.d.ts +7 -1
- package/dist/components/features/diff-viewer/file-diff-viewer.js +40 -39
- package/dist/components/features/diff-viewer/file-diff-viewer.js.map +1 -1
- package/dist/components/features/plugins/plugin-detail-modal.d.ts +2 -1
- package/dist/components/shared/modals/settings/settings-modal.cjs +1 -1
- package/dist/components/shared/modals/settings/settings-modal.cjs.map +1 -1
- package/dist/components/shared/modals/settings/settings-modal.js +23 -22
- package/dist/components/shared/modals/settings/settings-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 +5 -4
- package/dist/config/defaults.js.map +1 -1
- package/dist/constants/acp-providers.cjs.map +1 -1
- package/dist/constants/acp-providers.d.ts +1 -1
- package/dist/constants/acp-providers.js.map +1 -1
- package/dist/constants/canvas-ui.cjs +2 -0
- package/dist/constants/canvas-ui.cjs.map +1 -0
- package/dist/constants/canvas-ui.d.ts +8 -0
- package/dist/constants/canvas-ui.js +6 -0
- package/dist/constants/canvas-ui.js.map +1 -0
- package/dist/contexts/conversation-websocket-context.cjs.map +1 -1
- package/dist/contexts/conversation-websocket-context.js.map +1 -1
- package/dist/hooks/mutation/use-create-conversation.cjs +1 -1
- package/dist/hooks/mutation/use-create-conversation.cjs.map +1 -1
- package/dist/hooks/mutation/use-create-conversation.d.ts +2 -1
- package/dist/hooks/mutation/use-create-conversation.js +52 -52
- package/dist/hooks/mutation/use-create-conversation.js.map +1 -1
- package/dist/hooks/query/query-keys.cjs +1 -1
- package/dist/hooks/query/query-keys.cjs.map +1 -1
- package/dist/hooks/query/query-keys.d.ts +2 -0
- package/dist/hooks/query/query-keys.js +4 -1
- package/dist/hooks/query/query-keys.js.map +1 -1
- package/dist/hooks/query/use-backends-health.cjs +1 -1
- package/dist/hooks/query/use-backends-health.cjs.map +1 -1
- package/dist/hooks/query/use-backends-health.js +50 -48
- package/dist/hooks/query/use-backends-health.js.map +1 -1
- package/dist/hooks/query/use-cloud-organizations.cjs +1 -1
- package/dist/hooks/query/use-cloud-organizations.cjs.map +1 -1
- package/dist/hooks/query/use-cloud-organizations.d.ts +1 -0
- package/dist/hooks/query/use-cloud-organizations.js +5 -2
- package/dist/hooks/query/use-cloud-organizations.js.map +1 -1
- package/dist/hooks/query/use-commit-changes.cjs +2 -0
- package/dist/hooks/query/use-commit-changes.cjs.map +1 -0
- package/dist/hooks/query/use-commit-changes.d.ts +5 -0
- package/dist/hooks/query/use-commit-changes.js +34 -0
- package/dist/hooks/query/use-commit-changes.js.map +1 -0
- 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.d.ts +3 -2
- package/dist/hooks/query/use-task-polling.js +53 -40
- package/dist/hooks/query/use-task-polling.js.map +1 -1
- package/dist/hooks/query/use-unified-git-commits.cjs +2 -0
- package/dist/hooks/query/use-unified-git-commits.cjs.map +1 -0
- package/dist/hooks/query/use-unified-git-commits.d.ts +10 -0
- package/dist/hooks/query/use-unified-git-commits.js +41 -0
- package/dist/hooks/query/use-unified-git-commits.js.map +1 -0
- package/dist/hooks/query/use-unified-git-diff.cjs +1 -1
- package/dist/hooks/query/use-unified-git-diff.cjs.map +1 -1
- package/dist/hooks/query/use-unified-git-diff.d.ts +5 -0
- package/dist/hooks/query/use-unified-git-diff.js +11 -4
- package/dist/hooks/query/use-unified-git-diff.js.map +1 -1
- package/dist/hooks/use-acp-model-context.cjs +1 -1
- package/dist/hooks/use-acp-model-context.cjs.map +1 -1
- package/dist/hooks/use-acp-model-context.d.ts +4 -1
- package/dist/hooks/use-acp-model-context.js +9 -8
- package/dist/hooks/use-acp-model-context.js.map +1 -1
- package/dist/hooks/use-auto-refresh-files-on-edit.cjs +1 -1
- package/dist/hooks/use-auto-refresh-files-on-edit.cjs.map +1 -1
- package/dist/hooks/use-auto-refresh-files-on-edit.js +1 -1
- package/dist/hooks/use-auto-refresh-files-on-edit.js.map +1 -1
- package/dist/hooks/use-chat-input-model-state.cjs.map +1 -1
- package/dist/hooks/use-chat-input-model-state.d.ts +2 -1
- package/dist/hooks/use-chat-input-model-state.js.map +1 -1
- package/dist/hooks/use-chat-input-profile-state.cjs +1 -1
- package/dist/hooks/use-chat-input-profile-state.cjs.map +1 -1
- package/dist/hooks/use-chat-input-profile-state.d.ts +1 -10
- package/dist/hooks/use-chat-input-profile-state.js +42 -15
- package/dist/hooks/use-chat-input-profile-state.js.map +1 -1
- package/dist/hooks/use-device-flow.cjs +1 -1
- package/dist/hooks/use-device-flow.cjs.map +1 -1
- package/dist/hooks/use-device-flow.d.ts +4 -1
- package/dist/hooks/use-device-flow.js +42 -40
- package/dist/hooks/use-device-flow.js.map +1 -1
- package/dist/hooks/use-tracking.cjs.map +1 -1
- package/dist/hooks/use-tracking.d.ts +2 -1
- 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 +9 -0
- package/dist/i18n/declaration.js +1 -1
- package/dist/i18n/declaration.js.map +1 -1
- package/dist/i18n/index.cjs +1 -1
- package/dist/i18n/index.cjs.map +1 -1
- package/dist/i18n/index.js +19 -18
- package/dist/i18n/index.js.map +1 -1
- package/dist/i18n/translation.cjs +3 -3
- package/dist/i18n/translation.cjs.map +1 -1
- package/dist/i18n/translation.js +154 -1
- package/dist/i18n/translation.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +32 -32
- package/dist/lib/index.cjs +1 -1
- package/dist/lib/index.js +1 -1
- package/dist/locales/ar/openhands.json +9 -0
- package/dist/locales/ca/openhands.json +9 -0
- package/dist/locales/de/openhands.json +9 -0
- package/dist/locales/en/openhands.json +10 -1
- package/dist/locales/es/openhands.json +9 -0
- package/dist/locales/fr/openhands.json +9 -0
- package/dist/locales/it/openhands.json +9 -0
- package/dist/locales/ja/openhands.json +9 -0
- package/dist/locales/ko-KR/openhands.json +9 -0
- package/dist/locales/no/openhands.json +9 -0
- package/dist/locales/pt/openhands.json +9 -0
- package/dist/locales/tr/openhands.json +9 -0
- package/dist/locales/uk/openhands.json +9 -0
- package/dist/locales/zh-CN/openhands.json +9 -0
- package/dist/locales/zh-TW/openhands.json +9 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/cloud-client.cjs +2 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/cloud-client.cjs.map +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/cloud-client.js +351 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/cloud-client.js.map +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/device-flow-client.cjs +2 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/device-flow-client.cjs.map +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/device-flow-client.js +106 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/device-flow-client.js.map +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/openhands-client.cjs +2 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/openhands-client.cjs.map +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/openhands-client.js +69 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/openhands-client.js.map +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/clients.cjs +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/clients.js +3 -0
- 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 +18 -2
- package/dist/node_modules/@openhands/typescript-client/dist/models/acp-providers.js.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/models/acp.cjs.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/models/acp.js.map +1 -1
- package/dist/node_modules/axios/index.cjs +1 -1
- package/dist/node_modules/axios/index.js +1 -1
- package/dist/package.cjs +1 -1
- package/dist/package.cjs.map +1 -1
- package/dist/package.js +2 -2
- package/dist/package.js.map +1 -1
- package/dist/routes/app-settings.cjs +1 -1
- package/dist/routes/app-settings.cjs.map +1 -1
- package/dist/routes/app-settings.js +67 -66
- package/dist/routes/app-settings.js.map +1 -1
- package/dist/routes/commits-tab.cjs +2 -0
- package/dist/routes/commits-tab.cjs.map +1 -0
- package/dist/routes/commits-tab.d.ts +8 -0
- package/dist/routes/commits-tab.js +45 -0
- package/dist/routes/commits-tab.js.map +1 -0
- package/dist/routes/files-tab.cjs +1 -1
- package/dist/routes/files-tab.cjs.map +1 -1
- package/dist/routes/files-tab.js +148 -127
- package/dist/routes/files-tab.js.map +1 -1
- package/dist/services/cloud-funnel-analytics.cjs +2 -0
- package/dist/services/cloud-funnel-analytics.cjs.map +1 -0
- package/dist/services/cloud-funnel-analytics.d.ts +12 -0
- package/dist/services/cloud-funnel-analytics.js +53 -0
- package/dist/services/cloud-funnel-analytics.js.map +1 -0
- package/dist/services/telemetry.cjs +1 -1
- package/dist/services/telemetry.cjs.map +1 -1
- package/dist/services/telemetry.js +49 -47
- package/dist/services/telemetry.js.map +1 -1
- package/dist/types/agent-server/core/base/action.d.ts +5 -4
- package/dist/types/agent-server/core/base/base.d.ts +3 -2
- package/dist/types/agent-server/core/base/observation.d.ts +1 -1
- 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 +3 -5
- package/dist/types/agent-server/type-guards.js +2 -1
- package/dist/types/agent-server/type-guards.js.map +1 -1
- package/dist/types/automation.d.ts +5 -0
- package/dist/utils/api-error-message.d.ts +11 -0
- package/dist/utils/automation-timeout.d.ts +19 -0
- package/dist/utils/base-path.cjs +2 -0
- package/dist/utils/base-path.cjs.map +1 -0
- package/dist/utils/base-path.d.ts +2 -0
- package/dist/utils/base-path.js +23 -0
- package/dist/utils/base-path.js.map +1 -0
- package/package.json +2 -2
- package/scripts/check-sdk-version-sync.mjs +6 -6
- package/scripts/dev-safe.mjs +7 -8
- package/scripts/dev-static.mjs +3 -0
- package/scripts/dev-with-automation.mjs +3 -0
- package/scripts/docker-build.mjs +4 -0
- package/scripts/static-server.mjs +93 -7
- package/tools/canvas_ui_tool.py +14 -8
- package/build/assets/active-backend-context-B3umL5R-.js +0 -1
- package/build/assets/agent-server-client-options-DVLRd9sw.js +0 -1
- package/build/assets/agent-server-conversation-service.api-D_ZvtJjG.js +0 -5
- package/build/assets/agent-settings-BVVFzBWS.js +0 -1
- package/build/assets/api-key-entry-screen-CWEHcPJA.js +0 -1
- package/build/assets/app-settings-Dj90qosy.js +0 -1
- package/build/assets/automation-detail-CXJU0_gF.js +0 -2
- package/build/assets/automation-export-FWY9LPsG.js +0 -2
- package/build/assets/automations-list-DDGBkWLC.js +0 -1
- package/build/assets/backend-form-modal-DSbrafX2.js +0 -1
- package/build/assets/browser-store-BI6uklCG.js +0 -1
- package/build/assets/check-Bvi71siz.js +0 -1
- package/build/assets/condenser-settings-30cX9SK6.js +0 -1
- package/build/assets/conversation-BltULtFA.js +0 -89
- package/build/assets/conversation-e0a0_X4S.js +0 -1
- package/build/assets/conversation-panel-Cr9_ZGI-.js +0 -1
- package/build/assets/conversation-service.api-DQaKzIRj.js +0 -1
- package/build/assets/conversation-state-store-B2Bp32XI.js +0 -1
- package/build/assets/declaration-gq8V5eTU.js +0 -1
- package/build/assets/files-tab-DDtEJcGE.js +0 -1
- package/build/assets/git-provider-icon-BjkecAuV.js +0 -1
- package/build/assets/home-BCKWpKpf.js +0 -1
- package/build/assets/index-redirect-CUUJiNki.js +0 -1
- package/build/assets/install-server-modal-BIugLhVB.js +0 -1
- package/build/assets/lesson-plan-DgpP80mJ.js +0 -4
- package/build/assets/llm-not-configured-banner-BlX8NifC.js +0 -27
- package/build/assets/llm-settings-DJmbryaE.js +0 -1
- package/build/assets/llm-settings-kU5v0H1Z.js +0 -1
- package/build/assets/llm-subscription-service-CKyaV24y.js +0 -1
- package/build/assets/loader-circle-BEykUKYG.js +0 -1
- package/build/assets/manage-backends-modal-C8FJQIZR.js +0 -1
- package/build/assets/manifest-56d40d7c.js +0 -1
- package/build/assets/model-selector-BOj1wBlq.js +0 -1
- package/build/assets/mouse-pointer-click-PdEQPL6v.js +0 -1
- package/build/assets/onboarding-DYhDxmI9.js +0 -1
- package/build/assets/onboarding-modal-CP_WxDC9.js +0 -1
- package/build/assets/option-service.api-C0tYT4-r.js +0 -1
- package/build/assets/organization-service.api-CnynNoT-.js +0 -1
- package/build/assets/path-utils-DWcgCGen.js +0 -1
- package/build/assets/plugins-management-service-BAp70KN7.js +0 -1
- package/build/assets/profiles-service.api-CeYEmSM3.js +0 -1
- package/build/assets/providers-BxCuC9bZ.js +0 -1
- package/build/assets/proxy-CHmFkV16.js +0 -1
- package/build/assets/root-V8fkplMy.css +0 -1
- package/build/assets/root-layout-CttG_lQi.js +0 -2
- package/build/assets/root-uJ2t9rCQ.js +0 -2
- package/build/assets/schema-field-xUr6rDd6.js +0 -1
- package/build/assets/sdk-section-page-CbLrVUa3.js +0 -1
- package/build/assets/search-4DHskuhE.js +0 -1
- package/build/assets/secrets-service-CZYjNxFw.js +0 -1
- package/build/assets/settings-DnlfS09K.js +0 -1
- package/build/assets/settings-modal-DfTcL-mV.js +0 -1
- package/build/assets/settings-service.api-K4ncGlBv.js +0 -1
- package/build/assets/shared-conversation-DWtBkJv7.js +0 -1
- package/build/assets/skills-plugins-BJ040luO.js +0 -1
- package/build/assets/use-acp-credential-form-EtnbtYt0.js +0 -1
- package/build/assets/use-agent-profiles-DEAMFp-W.js +0 -1
- package/build/assets/use-backends-health-DkC7tKkC.js +0 -1
- package/build/assets/use-cloud-current-user-id-Dm99wXp2.js +0 -1
- package/build/assets/use-config-CHzNIHpv.js +0 -1
- package/build/assets/use-create-conversation-CTsvZ96U.js +0 -1
- package/build/assets/use-is-authed-_dhQ2Xuj.js +0 -1
- package/build/assets/use-llm-profiles-BMhPDlwQ.js +0 -1
- package/build/assets/use-plugins-marketplace-BGb-KgfD.js +0 -1
- package/build/assets/use-runtime-is-ready-CC-KrLKe.js +0 -1
- package/build/assets/use-save-agent-profile-CLMmbx_X.js +0 -1
- package/build/assets/use-settings-BReAMxCG.js +0 -1
- package/build/assets/use-settings-nav-items-xe1YgLnE.js +0 -16
- package/build/assets/use-skills-Dqo-pDDx.js +0 -1
- package/build/assets/vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~d1e18dtv-5Q6lQJdE.js +0 -177
- package/build/assets/vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~ncdxw0bh-ClHnt5lR.js +0 -10
- package/build/assets/vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-CqXiHwjU.js +0 -2
- package/build/assets/x-Cb0WAtak.js +0 -1
- /package/build/assets/{__vite-browser-external-4xJsU2-u.js → __vite-browser-external-DU-Cb_sT.js} +0 -0
- /package/build/assets/{automation-BU8zu-FP.js → automation-BVEmGghX.js} +0 -0
- /package/build/assets/{checkmark-h7udgXMM.js → checkmark-DhcMGwtO.js} +0 -0
- /package/build/assets/{close-p3Op5lxI.js → close-DO5Rq_CS.js} +0 -0
- /package/build/assets/{code-tag-DYlAhEQY.js → code-tag-BvjtzUsr.js} +0 -0
- /package/build/assets/{color-themes-DPBzNtVg.js → color-themes-bVMmJJG6.js} +0 -0
- /package/build/assets/{common-Dh7OqABE.js → common-CxbUL3nR.js} +0 -0
- /package/build/assets/{conversation-local-storage-F6zVMM--.js → conversation-local-storage-B31voBg7.js} +0 -0
- /package/build/assets/{copy-BLmGeJcd.js → copy-DLUw2us-.js} +0 -0
- /package/build/assets/{createLucideIcon-CVAsW2Yo.js → createLucideIcon-D4Tak8A1.js} +0 -0
- /package/build/assets/{dist-CodhvuAP.js → dist-Dj01FXbZ.js} +0 -0
- /package/build/assets/{environment-switch-store-DkjlKWzN.js → environment-switch-store-D9hB9PvY.js} +0 -0
- /package/build/assets/{extension-module-card-classes-9V3J9J_b.js → extension-module-card-classes-BlO4w702.js} +0 -0
- /package/build/assets/{folder-mMWFvaw0.js → folder-ynxP2EIL.js} +0 -0
- /package/build/assets/{get-language-from-path-CPNnuVhI.js → get-language-from-path-rWEQrOGU.js} +0 -0
- /package/build/assets/{git-status-mapper-BI8FyUVp.js → git-status-mapper-C3rfzUex.js} +0 -0
- /package/build/assets/{handle-capture-consent-CPMXU29K.js → handle-capture-consent-DDnXMC9Y.js} +0 -0
- /package/build/assets/{iconBase-DaTRRUjy.js → iconBase-CuvxAQZ5.js} +0 -0
- /package/build/assets/{link-external-DfKQroKX.js → link-external-BVDiJfZt.js} +0 -0
- /package/build/assets/{llm-subscription-DtsX5Lhg.js → llm-subscription-BkdHwtQe.js} +0 -0
- /package/build/assets/{map-provider-BM2SJarp.js → map-provider-XSFHmdDs.js} +0 -0
- /package/build/assets/{middleware-DYHYNAnP.js → middleware-CWYDMVuG.js} +0 -0
- /package/build/assets/{modal-backdrop-zVwfOJZr.js → modal-backdrop-Dsmzgr5s.js} +0 -0
- /package/build/assets/{navigation-context-DPs2G0X8.js → navigation-context-SjzfpygH.js} +0 -0
- /package/build/assets/{objectWithoutPropertiesLoose-BgYIAs2y.js → objectWithoutPropertiesLoose-CQwg6tC0.js} +0 -0
- /package/build/assets/{openhands-logo-bcNw5bkY.js → openhands-logo-C-gDp1wr.js} +0 -0
- /package/build/assets/{react-DPDgL6du.js → react-ao3tWj6K.js} +0 -0
- /package/build/assets/{search-BsjCEFNf.js → search-pb4UKTfK.js} +0 -0
- /package/build/assets/{settings-mQUckT0g.js → settings-DksoDv5z.js} +0 -0
- /package/build/assets/{settings-gear-MXCyZW0x.js → settings-gear-D_HVvE5L.js} +0 -0
- /package/build/assets/{settings-like-page-layout-classes-DENKlZpD.js → settings-like-page-layout-classes-DLrsPCaI.js} +0 -0
- /package/build/assets/{settings-section-header-context-COMOIaxV.js → settings-section-header-context-C2MUIG88.js} +0 -0
- /package/build/assets/{skills-9cDZONKh.js → skills-CH4xgIh-.js} +0 -0
- /package/build/assets/{switch-skeleton-DqQwalyu.js → switch-skeleton-BpSOvZ-n.js} +0 -0
- /package/build/assets/{terminal-BuLtIrb9.js → terminal-Dokfkxn0.js} +0 -0
- /package/build/assets/{u-check-circle-BqoIxNz_.js → u-check-circle-DPWVO-9N.js} +0 -0
- /package/build/assets/{u-check-circle-half-LiwZkuFe.js → u-check-circle-half-BGNAAjOW.js} +0 -0
- /package/build/assets/{u-edit-DJ90xc8Z.js → u-edit-BIskOoEG.js} +0 -0
- /package/build/assets/{use-breakpoint-B-O0lQ84.js → use-breakpoint-OjLm94cF.js} +0 -0
- /package/build/assets/{use-click-outside-element-Bf4Omzot.js → use-click-outside-element-Jpt2WWd7.js} +0 -0
- /package/build/assets/{use-onboarding-completion-C_Swglzp.js → use-onboarding-completion-DkRpDTsD.js} +0 -0
- /package/build/assets/{v4-DbCkTSoU.js → v4-DPgam_jW.js} +0 -0
- /package/build/assets/{vendor~browser-Dqd33JyP.js → vendor~browser-BvEKaLBz.js} +0 -0
- /package/build/assets/{vendor~conversation-panel~conversation~alert-banner-DHDkknt5.js → vendor~conversation-panel~conversation~alert-banner-CznX01nZ.js} +0 -0
- /package/build/assets/{vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~i3v2mlbw-BrJQ3XZH.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~e0djk9ee-Cw6LUe8p.js} +0 -0
- /package/build/assets/{vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~skills-set~k6tszsdc-Bb-xMtbv.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~g9hift2g-DmmpG9SI.js} +0 -0
- /package/build/assets/{vendor~entry.client~root~root-layout~index-redirect~home~conversation-panel~conversation~la~byh8a1g4-XNPdpuO8.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~jkpzbynd-CkpBIhVe.js} +0 -0
- /package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-DTzw2x50.js → vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-BuL5kjfS.js} +0 -0
- /package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~launch~skills-settings~automations-~ki5qnp0d-rV6d1Iv_.js → vendor~root-layout~index-home~home~conversation-panel~conversation~launch~skills-settings~a~j2jlu22h-DUYl8gbZ.js} +0 -0
- /package/build/assets/{vendor~root-layout~home~mcp~automations-list~onboarding-modal-CXyYYvYh.js → vendor~root-layout~index-home~home~mcp~automations-list~onboarding-modal-pIgQDxTc.js} +0 -0
- /package/build/assets/{vendor~terminal-aeP3PnKf.js → vendor~terminal-jAaNQWS9.js} +0 -0
- /package/build/assets/{x-mark-Batp6gXa.js → x-mark-C5przfXl.js} +0 -0
|
@@ -140,6 +140,7 @@
|
|
|
140
140
|
"SETTINGS$AGENT_PROFILE_NO_LLM": "請先建立一個LLM設定檔以定義OpenHands代理。",
|
|
141
141
|
"CHAT$AGENT_PROFILE_PLACEHOLDER": "代理設定檔",
|
|
142
142
|
"CHAT$MANAGE_AGENT_PROFILES": "管理代理設定檔",
|
|
143
|
+
"CHAT$START_NEW_WITH_PROFILE_HINT": "選擇後將開始新對話",
|
|
143
144
|
"SETTINGS$ENABLE_MEMORY_CONDENSATION": "啟用記憶體凝縮",
|
|
144
145
|
"SETTINGS$CONDENSER_MAX_SIZE": "記憶體凝縮最大歷史大小",
|
|
145
146
|
"SETTINGS$CONDENSER_MAX_SIZE_TOOLTIP": "超過此事件數後,凝縮器會摘要歷史。最小 20。",
|
|
@@ -795,6 +796,11 @@
|
|
|
795
796
|
"AUTOMATIONS$WEEKDAY_FRI": "星期五",
|
|
796
797
|
"AUTOMATIONS$WEEKDAY_SAT": "星期六",
|
|
797
798
|
"AUTOMATIONS$EDIT_PROMPT_HINT": "編輯僅適用於後續執行。",
|
|
799
|
+
"AUTOMATIONS$TIMEOUT": "超時(秒)",
|
|
800
|
+
"AUTOMATIONS$TIMEOUT_HINT": "單次執行的最長時間。留空則使用預設值600秒(10分鐘);最大1800秒(30分鐘)。",
|
|
801
|
+
"AUTOMATIONS$ERROR_TIMEOUT_INVALID_NUMBER": "超時必須是有效數字",
|
|
802
|
+
"AUTOMATIONS$ERROR_TIMEOUT_POSITIVE": "超時必須為正數",
|
|
803
|
+
"AUTOMATIONS$ERROR_TIMEOUT_MAX_EXCEEDED": "超時不能超過1800秒(30分鐘)",
|
|
798
804
|
"AUTOMATIONS$CUSTOM_SCHEDULE_HINT": "此自動化使用自訂排程。已停用頻率編輯以避免破壞它。",
|
|
799
805
|
"AUTOMATIONS$EDIT_SUCCESS": "自動化已更新",
|
|
800
806
|
"AUTOMATIONS$EDIT_ERROR": "無法更新自動化",
|
|
@@ -1146,6 +1152,9 @@
|
|
|
1146
1152
|
"DIFF_VIEWER$NO_CHANGES": "OpenHands尚未進行任何更改",
|
|
1147
1153
|
"DIFF_VIEWER$FILE_DELETED": "此檔案已被刪除,無法預覽其先前內容。",
|
|
1148
1154
|
"DIFF_VIEWER$WAITING_FOR_RUNTIME": "等待運行時啟動...",
|
|
1155
|
+
"DIFF_VIEWER$COMMITS": "提交記錄",
|
|
1156
|
+
"DIFF_VIEWER$NO_COMMITS": "尚無提交",
|
|
1157
|
+
"DIFF_VIEWER$COMMITS_CAP": "顯示最新的 {{count}} 個提交",
|
|
1149
1158
|
"SYSTEM_MESSAGE_MODAL$TITLE": "代理工具和元數據",
|
|
1150
1159
|
"SYSTEM_MESSAGE_MODAL$AGENT_CLASS": "代理類別:",
|
|
1151
1160
|
"SYSTEM_MESSAGE_MODAL$OPENHANDS_VERSION": "OpenHands 版本:",
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
require(`../../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`./http-client.cjs`),t=require(`./openhands-client.cjs`),n=require(`./device-flow-client.cjs`);var r=`/api/v1/settings/profiles`,i=100,a=class extends t.OpenHandsClient{constructor(e){super(e),this.kind=`cloud`,this.orgId=e.orgId??null,this.proxy=e.proxy?{...e.proxy,host:e.proxy.host.replace(/\/+$/,``),path:e.proxy.path??`/api/cloud-proxy`}:void 0}async request(e){return e.hostOverride?this.requestThroughProxy(e):this.requestDirect(e)}startDeviceFlow(e={}){return n.startDeviceFlow(this.host,e)}pollForToken(e,t){return n.pollForToken(this.host,e,t)}async getOrganizations(){let e=await this.get(`/api/organizations`);return{items:e?.items??[],currentOrgId:e?.current_org_id??null}}getCurrentApiKey(){return this.get(`/api/keys/current`)}async getOrganizationMe(e){let t=await this.get(`/api/organizations/${encodeURIComponent(e)}/me`);return{orgId:t?.org_id??e,userId:t?.user_id??``,role:t?.role??null,permissions:Array.isArray(t?.permissions)?t.permissions:null}}getSettings(){return this.get(`/api/v1/settings`)}async getSettingsWithDerivedFields(){let e=await this.getSettings();return{...e,agent_settings:f(e),conversation_settings:p(e),llm_api_key_set:!!e.llm_api_key_set,search_api_key_set:!!e.search_api_key_set,provider_tokens_set:e.provider_tokens_set}}async saveSettings(e){let t={};if(e.agent_settings_diff){let n={...e.agent_settings_diff};n.agent_context===null&&delete n.agent_context,Object.keys(n).length>0&&(t.agent_settings_diff=n)}if(e.conversation_settings_diff&&Object.keys(e.conversation_settings_diff).length>0&&(t.conversation_settings_diff=e.conversation_settings_diff),e.app_preferences)for(let[n,r]of Object.entries(e.app_preferences))r!==void 0&&(t[n]=r);await this.post(`/api/v1/settings`,t)}getSettingsSchema(){return this.get(`/api/v1/settings/agent-schema`)}getConversationSettingsSchema(){return this.get(`/api/v1/settings/conversation-schema`)}listProfiles(){return this.get(this.profileBasePath())}async getProfile(e){let t=await this.get(`${this.profileBasePath()}/${encodeURIComponent(e)}`);return{name:t.name,config:t.config??t.llm??{},api_key_set:t.api_key_set??!1}}saveProfile(e,t){return this.post(`${this.profileBasePath()}/${encodeURIComponent(e)}`,t)}deleteProfile(e){return this.delete(`${this.profileBasePath()}/${encodeURIComponent(e)}`)}renameProfile(e,t){return this.post(`${this.profileBasePath()}/${encodeURIComponent(e)}/rename`,{new_name:t})}async activateProfile(e){let t=await this.post(`${this.profileBasePath()}/${encodeURIComponent(e)}/activate`,{});return{name:t.name,message:t.message,llm_applied:t.model!=null||t.llm!=null}}async listSecrets(){let e=[],t=null;do{let n=new URLSearchParams({limit:String(i)});t&&n.set(`page_id`,t);let r=await this.get(`/api/v1/secrets/search?${n.toString()}`);e.push(...r.items??[]),t=r.next_page_id}while(t);return e}async createSecret(e,t,n){await this.post(`/api/v1/secrets`,{name:e,value:t,description:n})}async updateSecret(e,t,n){await this.put(`/api/v1/secrets/${encodeURIComponent(e)}`,{name:t,description:n})}async deleteSecret(e){await this.delete(`/api/v1/secrets/${encodeURIComponent(e)}`)}async listSkills(){let e=[],t=null;do{let n=new URLSearchParams({limit:String(i)});t&&n.set(`page_id`,t);let r=await this.get(`/api/v1/skills/search?${n.toString()}`);e.push(...r.items??[]),t=r.next_page_id}while(t);return e}searchRepositories(e){let t=new URLSearchParams;return t.set(`provider`,e.provider),t.set(`limit`,String(e.limit??100)),e.query&&t.set(`query`,e.query),e.pageId&&t.set(`page_id`,e.pageId),e.installationId&&t.set(`installation_id`,e.installationId),this.get(`/api/v1/git/repositories/search?${t.toString()}`)}getInstallations(e){let t=new URLSearchParams;return t.set(`provider`,e.provider),t.set(`limit`,String(e.limit??100)),e.pageId&&t.set(`page_id`,e.pageId),this.get(`/api/v1/git/installations/search?${t.toString()}`)}getRepositoryBranches(e){let t=new URLSearchParams;return t.set(`provider`,e.provider),t.set(`repository`,e.repository),t.set(`limit`,String(e.limit??30)),t.set(`query`,e.query??``),e.pageId&&t.set(`page_id`,e.pageId),this.get(`/api/v1/git/branches/search?${t.toString()}`)}getSuggestedTasks(e={}){let t=new URLSearchParams;return t.set(`limit`,String(e.limit??30)),e.pageId&&t.set(`page_id`,e.pageId),this.get(`/api/v1/git/suggested-tasks/search?${t.toString()}`)}searchModels(e){return this.get(`/api/v1/config/models/search${u(e)}`)}searchProviders(e){return this.get(`/api/v1/config/providers/search${u(e)}`)}searchConversations(e=20,t){let n=new URLSearchParams;return n.set(`limit`,String(e)),t&&n.set(`page_id`,t),n.set(`sort_order`,`UPDATED_AT_DESC`),this.get(`/api/v1/app-conversations/search?${n.toString()}`)}getConversations(e){if(e.length===0)return Promise.resolve([]);let t=new URLSearchParams;for(let n of e)t.append(`ids`,n);return this.get(`/api/v1/app-conversations?${t}`)}createConversation(e){return this.post(`/api/v1/app-conversations`,e)}downloadConversation(e){return this.get(`/api/v1/app-conversations/${e}/download`,{responseType:`blob`})}async deleteConversation(e){await this.delete(`/api/v1/app-conversations/${e}`)}updateConversationPublicFlag(e,t){return this.patch(`/api/v1/app-conversations/${e}`,{public:t})}async pauseSandbox(e){await this.post(`/api/v1/sandboxes/${e}/pause`,{})}async resumeSandbox(e){await this.post(`/api/v1/sandboxes/${e}/resume`,{})}getSandboxes(e){if(e.length===0)return Promise.resolve([]);let t=new URLSearchParams;for(let n of e)t.append(`id`,n);return this.get(`/api/v1/sandboxes?${t}`)}readConversationFile(e,t){let n=new URLSearchParams({file_path:t});return this.get(`/api/v1/app-conversations/${e}/file?${n}`,{responseType:`text`})}async getConversationStartTask(e){let t=new URLSearchParams;return t.append(`ids`,e),(await this.get(`/api/v1/app-conversations/start-tasks?${t}`))?.[0]??null}async switchConversationProfile(e,t){await this.post(`/api/v1/app-conversations/${e}/switch_profile`,{profile_name:t})}async switchConversationAcpModel(e,t){await this.post(`/api/v1/app-conversations/${e}/switch_acp_model`,{model:t})}async listAutomations(e=50,t=0){return this.get(`/api/automation/v1?${d(e,t)}`)}getAutomation(e){return this.get(`/api/automation/v1/${encodeURIComponent(e)}`)}updateAutomation(e,t){return this.patch(`/api/automation/v1/${encodeURIComponent(e)}`,t)}async deleteAutomation(e){await this.delete(`/api/automation/v1/${encodeURIComponent(e)}`)}dispatchAutomation(e){return this.post(`/api/automation/v1/${encodeURIComponent(e)}/dispatch`)}listAutomationRuns(e,t=50,n=0){return this.get(`/api/automation/v1/${encodeURIComponent(e)}/runs?${d(t,n)}`)}downloadAutomationTarball(e){return this.get(`/api/automation/v1/${encodeURIComponent(e)}/tarball`,{responseType:`blob`})}getAutomationHealth(){return this.get(`/api/automation/health`,{timeoutSeconds:5})}profileBasePath(){return this.orgId?`/api/organizations/${encodeURIComponent(this.orgId)}/profiles`:r}buildUpstreamAuthHeaders(e){let t=e.authMode??`bearer`;return t===`none`?{}:t===`session-api-key`?e.sessionApiKey?{"X-Session-API-Key":e.sessionApiKey}:{}:this.apiKey?{Authorization:`Bearer ${this.apiKey}`}:{}}async requestDirect(e){let t={...this.buildUpstreamAuthHeaders(e),...this.orgId?{"X-Org-Id":this.orgId}:{},...e.headers??{}};return o({host:this.host,method:e.method,path:e.path,params:e.params,body:e.body,headers:t,timeoutMs:e.timeoutSeconds?e.timeoutSeconds*1e3:this.timeout,acceptableStatusCodes:e.acceptableStatusCodes,responseType:e.responseType})}async requestThroughProxy(e){if(!this.proxy)throw Error(`CloudClient proxy options are required for hostOverride requests`);let t={...this.buildUpstreamAuthHeaders(e),...this.orgId?{"X-Org-Id":this.orgId}:{},...e.headers??{}},n={"Content-Type":`application/json`,...this.proxy.apiKey?{"X-Session-API-Key":this.proxy.apiKey}:{},...this.proxy.headers??{}},r=this.proxy.path??`/api/cloud-proxy`;return o({host:this.proxy.host,method:`POST`,path:r,body:{host:e.hostOverride,method:e.method,path:l(e.path,e.params),headers:t,body:e.body??null,...e.timeoutSeconds?{timeout_seconds:e.timeoutSeconds}:{}},headers:n,timeoutMs:this.timeout,acceptableStatusCodes:e.acceptableStatusCodes,responseType:e.responseType})}};async function o(e){let t=`${e.host.replace(/\/+$/,``)}${l(e.path,e.params)}`,n={...e.body instanceof FormData?{}:{"Content-Type":`application/json`},...e.headers??{}},r={method:e.method,headers:n,signal:AbortSignal.timeout(e.timeoutMs)};e.body!==void 0&&e.method!==`GET`&&(r.body=e.body instanceof FormData?e.body:JSON.stringify(e.body));let i;try{i=await fetch(t,r)}catch(t){throw t instanceof Error&&(t.name===`TimeoutError`||t.name===`AbortError`)?Error(`Request timeout after ${e.timeoutMs}ms`,{cause:t}):t}if(!(e.acceptableStatusCodes?.has(i.status)||!e.acceptableStatusCodes&&i.ok))throw await s(i);return c(i,e.responseType??`auto`)}async function s(t){let n;try{n=t.headers.get(`content-type`)?.includes(`application/json`)?await t.json():await t.text()}catch{n=null}return new e.HttpError(t.status,t.statusText,n,`HTTP request failed (${t.status} ${t.statusText}): ${JSON.stringify(n)}`)}async function c(e,t){if(e.status===204)return;if(t===`blob`)return await e.blob();if(t===`arrayBuffer`)return await e.arrayBuffer();if(t===`text`)return await e.text();let n=e.headers.get(`content-type`);return t===`json`||n?.includes(`application/json`)?await e.json():await e.text()}function l(e,t){if(!t)return e;let[n,r=``]=e.split(`?`),i=new URLSearchParams(r);for(let[e,n]of Object.entries(t))n!=null&&(Array.isArray(n)?n.forEach(t=>i.append(e,String(t))):i.append(e,String(n)));let a=i.toString();return a?`${n}?${a}`:n}function u(e){let t=new URLSearchParams;for(let[n,r]of Object.entries(e))r!==void 0&&t.set(n,String(r));let n=t.toString();return n?`?${n}`:``}function d(e,t){let n=new URLSearchParams;return n.set(`limit`,String(e)),n.set(`offset`,String(t)),n.toString()}function f(e){if(e.agent_settings&&Object.keys(e.agent_settings).length>0)return e.agent_settings;let t={},n={};typeof e.llm_model==`string`&&(n.model=e.llm_model),typeof e.llm_base_url==`string`&&(n.base_url=e.llm_base_url),typeof e.llm_api_key==`string`&&(n.api_key=e.llm_api_key),Object.keys(n).length>0&&(t.llm=n);let r={};return typeof e.enable_default_condenser==`boolean`&&(r.enabled=e.enable_default_condenser),typeof e.condenser_max_size==`number`&&(r.max_size=e.condenser_max_size),Object.keys(r).length>0&&(t.condenser=r),typeof e.agent==`string`&&(t.agent=e.agent),e.mcp_config&&Object.keys(e.mcp_config).length>0&&(t.mcp_config=e.mcp_config),t}function p(e){if(e.conversation_settings&&Object.keys(e.conversation_settings).length>0)return e.conversation_settings;let t={};return typeof e.confirmation_mode==`boolean`&&(t.confirmation_mode=e.confirmation_mode),(typeof e.security_analyzer==`string`||e.security_analyzer===null)&&(t.security_analyzer=e.security_analyzer),typeof e.max_iterations==`number`&&(t.max_iterations=e.max_iterations),t}exports.CloudClient=a;
|
|
2
|
+
//# sourceMappingURL=cloud-client.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-client.cjs","names":["OpenHandsClient","startDeviceFlow","pollForToken","HttpError"],"sources":["../../../../../../node_modules/@openhands/typescript-client/dist/client/cloud-client.js"],"sourcesContent":["import { HttpError } from './http-client.js';\nimport { OpenHandsClient, } from './openhands-client.js';\nimport { pollForToken, startDeviceFlow, } from './device-flow-client.js';\nconst SETTINGS_PROFILES_PATH = '/api/v1/settings/profiles';\nconst DEFAULT_PAGE_LIMIT = 100;\nexport class CloudClient extends OpenHandsClient {\n constructor(options) {\n super(options);\n this.kind = 'cloud';\n this.orgId = options.orgId ?? null;\n this.proxy = options.proxy\n ? {\n ...options.proxy,\n host: options.proxy.host.replace(/\\/+$/, ''),\n path: options.proxy.path ?? '/api/cloud-proxy',\n }\n : undefined;\n }\n async request(options) {\n return options.hostOverride\n ? this.requestThroughProxy(options)\n : this.requestDirect(options);\n }\n startDeviceFlow(options = {}) {\n return startDeviceFlow(this.host, options);\n }\n pollForToken(deviceCode, options) {\n return pollForToken(this.host, deviceCode, options);\n }\n async getOrganizations() {\n const data = await this.get('/api/organizations');\n return {\n items: data?.items ?? [],\n currentOrgId: data?.current_org_id ?? null,\n };\n }\n getCurrentApiKey() {\n return this.get('/api/keys/current');\n }\n async getOrganizationMe(orgId) {\n const data = await this.get(`/api/organizations/${encodeURIComponent(orgId)}/me`);\n return {\n orgId: data?.org_id ?? orgId,\n userId: data?.user_id ?? '',\n role: data?.role ?? null,\n permissions: Array.isArray(data?.permissions) ? data.permissions : null,\n };\n }\n getSettings() {\n return this.get('/api/v1/settings');\n }\n async getSettingsWithDerivedFields() {\n const flat = await this.getSettings();\n return {\n ...flat,\n agent_settings: deriveAgentSettings(flat),\n conversation_settings: deriveConversationSettings(flat),\n llm_api_key_set: !!flat.llm_api_key_set,\n search_api_key_set: !!flat.search_api_key_set,\n provider_tokens_set: flat.provider_tokens_set,\n };\n }\n async saveSettings(diff) {\n const body = {};\n if (diff.agent_settings_diff) {\n const agentDiff = { ...diff.agent_settings_diff };\n if (agentDiff.agent_context === null) {\n delete agentDiff.agent_context;\n }\n if (Object.keys(agentDiff).length > 0) {\n body.agent_settings_diff = agentDiff;\n }\n }\n if (diff.conversation_settings_diff &&\n Object.keys(diff.conversation_settings_diff).length > 0) {\n body.conversation_settings_diff = diff.conversation_settings_diff;\n }\n if (diff.app_preferences) {\n for (const [key, value] of Object.entries(diff.app_preferences)) {\n if (value !== undefined) {\n body[key] = value;\n }\n }\n }\n await this.post('/api/v1/settings', body);\n }\n getSettingsSchema() {\n return this.get('/api/v1/settings/agent-schema');\n }\n getConversationSettingsSchema() {\n return this.get('/api/v1/settings/conversation-schema');\n }\n listProfiles() {\n return this.get(this.profileBasePath());\n }\n async getProfile(name) {\n const result = await this.get(`${this.profileBasePath()}/${encodeURIComponent(name)}`);\n return {\n name: result.name,\n config: result.config ?? result.llm ?? {},\n api_key_set: result.api_key_set ?? false,\n };\n }\n saveProfile(name, request) {\n return this.post(`${this.profileBasePath()}/${encodeURIComponent(name)}`, request);\n }\n deleteProfile(name) {\n return this.delete(`${this.profileBasePath()}/${encodeURIComponent(name)}`);\n }\n renameProfile(name, newName) {\n return this.post(`${this.profileBasePath()}/${encodeURIComponent(name)}/rename`, { new_name: newName });\n }\n async activateProfile(name) {\n const result = await this.post(`${this.profileBasePath()}/${encodeURIComponent(name)}/activate`, {});\n return {\n name: result.name,\n message: result.message,\n llm_applied: result.model != null || result.llm != null,\n };\n }\n async listSecrets() {\n const secrets = [];\n let pageId = null;\n do {\n const query = new URLSearchParams({ limit: String(DEFAULT_PAGE_LIMIT) });\n if (pageId)\n query.set('page_id', pageId);\n const page = await this.get(`/api/v1/secrets/search?${query.toString()}`);\n secrets.push(...(page.items ?? []));\n pageId = page.next_page_id;\n } while (pageId);\n return secrets;\n }\n async createSecret(name, value, description) {\n await this.post('/api/v1/secrets', { name, value, description });\n }\n async updateSecret(secretToEdit, name, description) {\n await this.put(`/api/v1/secrets/${encodeURIComponent(secretToEdit)}`, {\n name,\n description,\n });\n }\n async deleteSecret(name) {\n await this.delete(`/api/v1/secrets/${encodeURIComponent(name)}`);\n }\n async listSkills() {\n const skills = [];\n let pageId = null;\n do {\n const query = new URLSearchParams({ limit: String(DEFAULT_PAGE_LIMIT) });\n if (pageId)\n query.set('page_id', pageId);\n const page = await this.get(`/api/v1/skills/search?${query.toString()}`);\n skills.push(...(page.items ?? []));\n pageId = page.next_page_id;\n } while (pageId);\n return skills;\n }\n searchRepositories(args) {\n const params = new URLSearchParams();\n params.set('provider', args.provider);\n params.set('limit', String(args.limit ?? 100));\n if (args.query)\n params.set('query', args.query);\n if (args.pageId)\n params.set('page_id', args.pageId);\n if (args.installationId)\n params.set('installation_id', args.installationId);\n return this.get(`/api/v1/git/repositories/search?${params.toString()}`);\n }\n getInstallations(args) {\n const params = new URLSearchParams();\n params.set('provider', args.provider);\n params.set('limit', String(args.limit ?? 100));\n if (args.pageId)\n params.set('page_id', args.pageId);\n return this.get(`/api/v1/git/installations/search?${params.toString()}`);\n }\n getRepositoryBranches(args) {\n const params = new URLSearchParams();\n params.set('provider', args.provider);\n params.set('repository', args.repository);\n params.set('limit', String(args.limit ?? 30));\n params.set('query', args.query ?? '');\n if (args.pageId)\n params.set('page_id', args.pageId);\n return this.get(`/api/v1/git/branches/search?${params.toString()}`);\n }\n getSuggestedTasks(args = {}) {\n const params = new URLSearchParams();\n params.set('limit', String(args.limit ?? 30));\n if (args.pageId)\n params.set('page_id', args.pageId);\n return this.get(`/api/v1/git/suggested-tasks/search?${params.toString()}`);\n }\n searchModels(params) {\n return this.get(`/api/v1/config/models/search${buildQuerySuffix(params)}`);\n }\n searchProviders(params) {\n return this.get(`/api/v1/config/providers/search${buildQuerySuffix(params)}`);\n }\n searchConversations(limit = 20, pageId) {\n const params = new URLSearchParams();\n params.set('limit', String(limit));\n if (pageId)\n params.set('page_id', pageId);\n params.set('sort_order', 'UPDATED_AT_DESC');\n return this.get(`/api/v1/app-conversations/search?${params.toString()}`);\n }\n getConversations(ids) {\n if (ids.length === 0)\n return Promise.resolve([]);\n const params = new URLSearchParams();\n for (const id of ids)\n params.append('ids', id);\n return this.get(`/api/v1/app-conversations?${params}`);\n }\n createConversation(request) {\n return this.post('/api/v1/app-conversations', request);\n }\n downloadConversation(conversationId) {\n return this.get(`/api/v1/app-conversations/${conversationId}/download`, {\n responseType: 'blob',\n });\n }\n async deleteConversation(conversationId) {\n await this.delete(`/api/v1/app-conversations/${conversationId}`);\n }\n updateConversationPublicFlag(conversationId, isPublic) {\n return this.patch(`/api/v1/app-conversations/${conversationId}`, {\n public: isPublic,\n });\n }\n async pauseSandbox(sandboxId) {\n await this.post(`/api/v1/sandboxes/${sandboxId}/pause`, {});\n }\n async resumeSandbox(sandboxId) {\n await this.post(`/api/v1/sandboxes/${sandboxId}/resume`, {});\n }\n getSandboxes(ids) {\n if (ids.length === 0)\n return Promise.resolve([]);\n const params = new URLSearchParams();\n for (const id of ids)\n params.append('id', id);\n return this.get(`/api/v1/sandboxes?${params}`);\n }\n readConversationFile(conversationId, filePath) {\n const query = new URLSearchParams({ file_path: filePath });\n return this.get(`/api/v1/app-conversations/${conversationId}/file?${query}`, {\n responseType: 'text',\n });\n }\n async getConversationStartTask(taskId) {\n const params = new URLSearchParams();\n params.append('ids', taskId);\n const data = await this.get(`/api/v1/app-conversations/start-tasks?${params}`);\n return data?.[0] ?? null;\n }\n async switchConversationProfile(conversationId, profileName) {\n await this.post(`/api/v1/app-conversations/${conversationId}/switch_profile`, {\n profile_name: profileName,\n });\n }\n async switchConversationAcpModel(conversationId, model) {\n await this.post(`/api/v1/app-conversations/${conversationId}/switch_acp_model`, { model });\n }\n async listAutomations(limit = 50, offset = 0) {\n return this.get(`/api/automation/v1?${paginationQuery(limit, offset)}`);\n }\n getAutomation(id) {\n return this.get(`/api/automation/v1/${encodeURIComponent(id)}`);\n }\n updateAutomation(id, body) {\n return this.patch(`/api/automation/v1/${encodeURIComponent(id)}`, body);\n }\n async deleteAutomation(id) {\n await this.delete(`/api/automation/v1/${encodeURIComponent(id)}`);\n }\n dispatchAutomation(id) {\n return this.post(`/api/automation/v1/${encodeURIComponent(id)}/dispatch`);\n }\n listAutomationRuns(id, limit = 50, offset = 0) {\n return this.get(`/api/automation/v1/${encodeURIComponent(id)}/runs?${paginationQuery(limit, offset)}`);\n }\n downloadAutomationTarball(id) {\n return this.get(`/api/automation/v1/${encodeURIComponent(id)}/tarball`, {\n responseType: 'blob',\n });\n }\n getAutomationHealth() {\n return this.get('/api/automation/health', { timeoutSeconds: 5 });\n }\n profileBasePath() {\n return this.orgId\n ? `/api/organizations/${encodeURIComponent(this.orgId)}/profiles`\n : SETTINGS_PROFILES_PATH;\n }\n buildUpstreamAuthHeaders(options) {\n const mode = options.authMode ?? 'bearer';\n if (mode === 'none')\n return {};\n if (mode === 'session-api-key') {\n return options.sessionApiKey ? { 'X-Session-API-Key': options.sessionApiKey } : {};\n }\n if (!this.apiKey)\n return {};\n return { Authorization: `Bearer ${this.apiKey}` };\n }\n async requestDirect(options) {\n const headers = {\n ...this.buildUpstreamAuthHeaders(options),\n ...(this.orgId ? { 'X-Org-Id': this.orgId } : {}),\n ...(options.headers ?? {}),\n };\n return fetchAndParse({\n host: this.host,\n method: options.method,\n path: options.path,\n params: options.params,\n body: options.body,\n headers,\n timeoutMs: options.timeoutSeconds ? options.timeoutSeconds * 1000 : this.timeout,\n acceptableStatusCodes: options.acceptableStatusCodes,\n responseType: options.responseType,\n });\n }\n async requestThroughProxy(options) {\n if (!this.proxy) {\n throw new Error('CloudClient proxy options are required for hostOverride requests');\n }\n const upstreamHeaders = {\n ...this.buildUpstreamAuthHeaders(options),\n ...(this.orgId ? { 'X-Org-Id': this.orgId } : {}),\n ...(options.headers ?? {}),\n };\n const proxyHeaders = {\n 'Content-Type': 'application/json',\n ...(this.proxy.apiKey ? { 'X-Session-API-Key': this.proxy.apiKey } : {}),\n ...(this.proxy.headers ?? {}),\n };\n const proxyPath = this.proxy.path ?? '/api/cloud-proxy';\n return fetchAndParse({\n host: this.proxy.host,\n method: 'POST',\n path: proxyPath,\n body: {\n host: options.hostOverride,\n method: options.method,\n path: appendParams(options.path, options.params),\n headers: upstreamHeaders,\n body: options.body ?? null,\n ...(options.timeoutSeconds ? { timeout_seconds: options.timeoutSeconds } : {}),\n },\n headers: proxyHeaders,\n timeoutMs: this.timeout,\n acceptableStatusCodes: options.acceptableStatusCodes,\n responseType: options.responseType,\n });\n }\n}\nasync function fetchAndParse(options) {\n const url = `${options.host.replace(/\\/+$/, '')}${appendParams(options.path, options.params)}`;\n const headers = {\n ...(options.body instanceof FormData ? {} : { 'Content-Type': 'application/json' }),\n ...(options.headers ?? {}),\n };\n const init = {\n method: options.method,\n headers,\n signal: AbortSignal.timeout(options.timeoutMs),\n };\n if (options.body !== undefined && options.method !== 'GET') {\n init.body = options.body instanceof FormData ? options.body : JSON.stringify(options.body);\n }\n let response;\n try {\n response = await fetch(url, init);\n }\n catch (error) {\n // AbortSignal.timeout() aborts with a TimeoutError; some runtimes\n // surface plain AbortError instead.\n if (error instanceof Error && (error.name === 'TimeoutError' || error.name === 'AbortError')) {\n throw new Error(`Request timeout after ${options.timeoutMs}ms`, { cause: error });\n }\n throw error;\n }\n const isAcceptable = options.acceptableStatusCodes?.has(response.status) ||\n (!options.acceptableStatusCodes && response.ok);\n if (!isAcceptable) {\n throw await buildHttpError(response);\n }\n return parseResponse(response, options.responseType ?? 'auto');\n}\nasync function buildHttpError(response) {\n let errorContent;\n try {\n const contentType = response.headers.get('content-type');\n errorContent = contentType?.includes('application/json')\n ? await response.json()\n : await response.text();\n }\n catch {\n errorContent = null;\n }\n return new HttpError(response.status, response.statusText, errorContent, `HTTP request failed (${response.status} ${response.statusText}): ${JSON.stringify(errorContent)}`);\n}\nasync function parseResponse(response, responseType) {\n if (response.status === 204) {\n return undefined;\n }\n if (responseType === 'blob')\n return (await response.blob());\n if (responseType === 'arrayBuffer')\n return (await response.arrayBuffer());\n if (responseType === 'text')\n return (await response.text());\n const contentType = response.headers.get('content-type');\n if (responseType === 'json' || contentType?.includes('application/json')) {\n return (await response.json());\n }\n return (await response.text());\n}\nfunction appendParams(path, params) {\n if (!params)\n return path;\n const [base, existingQuery = ''] = path.split('?');\n const search = new URLSearchParams(existingQuery);\n for (const [key, value] of Object.entries(params)) {\n if (value === undefined || value === null)\n continue;\n if (Array.isArray(value)) {\n value.forEach((item) => search.append(key, String(item)));\n }\n else {\n search.append(key, String(value));\n }\n }\n const query = search.toString();\n return query ? `${base}?${query}` : base;\n}\nfunction buildQuerySuffix(params) {\n const search = new URLSearchParams();\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined)\n search.set(key, String(value));\n }\n const query = search.toString();\n return query ? `?${query}` : '';\n}\nfunction paginationQuery(limit, offset) {\n const params = new URLSearchParams();\n params.set('limit', String(limit));\n params.set('offset', String(offset));\n return params.toString();\n}\nfunction deriveAgentSettings(flat) {\n if (flat.agent_settings && Object.keys(flat.agent_settings).length > 0) {\n return flat.agent_settings;\n }\n const agent = {};\n const llm = {};\n if (typeof flat.llm_model === 'string')\n llm.model = flat.llm_model;\n if (typeof flat.llm_base_url === 'string')\n llm.base_url = flat.llm_base_url;\n if (typeof flat.llm_api_key === 'string')\n llm.api_key = flat.llm_api_key;\n if (Object.keys(llm).length > 0)\n agent.llm = llm;\n const condenser = {};\n if (typeof flat.enable_default_condenser === 'boolean') {\n condenser.enabled = flat.enable_default_condenser;\n }\n if (typeof flat.condenser_max_size === 'number') {\n condenser.max_size = flat.condenser_max_size;\n }\n if (Object.keys(condenser).length > 0)\n agent.condenser = condenser;\n if (typeof flat.agent === 'string')\n agent.agent = flat.agent;\n if (flat.mcp_config && Object.keys(flat.mcp_config).length > 0) {\n agent.mcp_config = flat.mcp_config;\n }\n return agent;\n}\nfunction deriveConversationSettings(flat) {\n if (flat.conversation_settings && Object.keys(flat.conversation_settings).length > 0) {\n return flat.conversation_settings;\n }\n const out = {};\n if (typeof flat.confirmation_mode === 'boolean') {\n out.confirmation_mode = flat.confirmation_mode;\n }\n if (typeof flat.security_analyzer === 'string' || flat.security_analyzer === null) {\n out.security_analyzer = flat.security_analyzer;\n }\n if (typeof flat.max_iterations === 'number') {\n out.max_iterations = flat.max_iterations;\n }\n return out;\n}\n//# sourceMappingURL=cloud-client.js.map"],"x_google_ignoreList":[0],"mappings":"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"}
|
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
import { HttpError as e } from "./http-client.js";
|
|
2
|
+
import { OpenHandsClient as t } from "./openhands-client.js";
|
|
3
|
+
import { pollForToken as n, startDeviceFlow as r } from "./device-flow-client.js";
|
|
4
|
+
//#region node_modules/@openhands/typescript-client/dist/client/cloud-client.js
|
|
5
|
+
var i = "/api/v1/settings/profiles", a = 100, o = class extends t {
|
|
6
|
+
constructor(e) {
|
|
7
|
+
super(e), this.kind = "cloud", this.orgId = e.orgId ?? null, this.proxy = e.proxy ? {
|
|
8
|
+
...e.proxy,
|
|
9
|
+
host: e.proxy.host.replace(/\/+$/, ""),
|
|
10
|
+
path: e.proxy.path ?? "/api/cloud-proxy"
|
|
11
|
+
} : void 0;
|
|
12
|
+
}
|
|
13
|
+
async request(e) {
|
|
14
|
+
return e.hostOverride ? this.requestThroughProxy(e) : this.requestDirect(e);
|
|
15
|
+
}
|
|
16
|
+
startDeviceFlow(e = {}) {
|
|
17
|
+
return r(this.host, e);
|
|
18
|
+
}
|
|
19
|
+
pollForToken(e, t) {
|
|
20
|
+
return n(this.host, e, t);
|
|
21
|
+
}
|
|
22
|
+
async getOrganizations() {
|
|
23
|
+
let e = await this.get("/api/organizations");
|
|
24
|
+
return {
|
|
25
|
+
items: e?.items ?? [],
|
|
26
|
+
currentOrgId: e?.current_org_id ?? null
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
getCurrentApiKey() {
|
|
30
|
+
return this.get("/api/keys/current");
|
|
31
|
+
}
|
|
32
|
+
async getOrganizationMe(e) {
|
|
33
|
+
let t = await this.get(`/api/organizations/${encodeURIComponent(e)}/me`);
|
|
34
|
+
return {
|
|
35
|
+
orgId: t?.org_id ?? e,
|
|
36
|
+
userId: t?.user_id ?? "",
|
|
37
|
+
role: t?.role ?? null,
|
|
38
|
+
permissions: Array.isArray(t?.permissions) ? t.permissions : null
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
getSettings() {
|
|
42
|
+
return this.get("/api/v1/settings");
|
|
43
|
+
}
|
|
44
|
+
async getSettingsWithDerivedFields() {
|
|
45
|
+
let e = await this.getSettings();
|
|
46
|
+
return {
|
|
47
|
+
...e,
|
|
48
|
+
agent_settings: p(e),
|
|
49
|
+
conversation_settings: m(e),
|
|
50
|
+
llm_api_key_set: !!e.llm_api_key_set,
|
|
51
|
+
search_api_key_set: !!e.search_api_key_set,
|
|
52
|
+
provider_tokens_set: e.provider_tokens_set
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
async saveSettings(e) {
|
|
56
|
+
let t = {};
|
|
57
|
+
if (e.agent_settings_diff) {
|
|
58
|
+
let n = { ...e.agent_settings_diff };
|
|
59
|
+
n.agent_context === null && delete n.agent_context, Object.keys(n).length > 0 && (t.agent_settings_diff = n);
|
|
60
|
+
}
|
|
61
|
+
if (e.conversation_settings_diff && Object.keys(e.conversation_settings_diff).length > 0 && (t.conversation_settings_diff = e.conversation_settings_diff), e.app_preferences) for (let [n, r] of Object.entries(e.app_preferences)) r !== void 0 && (t[n] = r);
|
|
62
|
+
await this.post("/api/v1/settings", t);
|
|
63
|
+
}
|
|
64
|
+
getSettingsSchema() {
|
|
65
|
+
return this.get("/api/v1/settings/agent-schema");
|
|
66
|
+
}
|
|
67
|
+
getConversationSettingsSchema() {
|
|
68
|
+
return this.get("/api/v1/settings/conversation-schema");
|
|
69
|
+
}
|
|
70
|
+
listProfiles() {
|
|
71
|
+
return this.get(this.profileBasePath());
|
|
72
|
+
}
|
|
73
|
+
async getProfile(e) {
|
|
74
|
+
let t = await this.get(`${this.profileBasePath()}/${encodeURIComponent(e)}`);
|
|
75
|
+
return {
|
|
76
|
+
name: t.name,
|
|
77
|
+
config: t.config ?? t.llm ?? {},
|
|
78
|
+
api_key_set: t.api_key_set ?? !1
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
saveProfile(e, t) {
|
|
82
|
+
return this.post(`${this.profileBasePath()}/${encodeURIComponent(e)}`, t);
|
|
83
|
+
}
|
|
84
|
+
deleteProfile(e) {
|
|
85
|
+
return this.delete(`${this.profileBasePath()}/${encodeURIComponent(e)}`);
|
|
86
|
+
}
|
|
87
|
+
renameProfile(e, t) {
|
|
88
|
+
return this.post(`${this.profileBasePath()}/${encodeURIComponent(e)}/rename`, { new_name: t });
|
|
89
|
+
}
|
|
90
|
+
async activateProfile(e) {
|
|
91
|
+
let t = await this.post(`${this.profileBasePath()}/${encodeURIComponent(e)}/activate`, {});
|
|
92
|
+
return {
|
|
93
|
+
name: t.name,
|
|
94
|
+
message: t.message,
|
|
95
|
+
llm_applied: t.model != null || t.llm != null
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
async listSecrets() {
|
|
99
|
+
let e = [], t = null;
|
|
100
|
+
do {
|
|
101
|
+
let n = new URLSearchParams({ limit: String(a) });
|
|
102
|
+
t && n.set("page_id", t);
|
|
103
|
+
let r = await this.get(`/api/v1/secrets/search?${n.toString()}`);
|
|
104
|
+
e.push(...r.items ?? []), t = r.next_page_id;
|
|
105
|
+
} while (t);
|
|
106
|
+
return e;
|
|
107
|
+
}
|
|
108
|
+
async createSecret(e, t, n) {
|
|
109
|
+
await this.post("/api/v1/secrets", {
|
|
110
|
+
name: e,
|
|
111
|
+
value: t,
|
|
112
|
+
description: n
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
async updateSecret(e, t, n) {
|
|
116
|
+
await this.put(`/api/v1/secrets/${encodeURIComponent(e)}`, {
|
|
117
|
+
name: t,
|
|
118
|
+
description: n
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
async deleteSecret(e) {
|
|
122
|
+
await this.delete(`/api/v1/secrets/${encodeURIComponent(e)}`);
|
|
123
|
+
}
|
|
124
|
+
async listSkills() {
|
|
125
|
+
let e = [], t = null;
|
|
126
|
+
do {
|
|
127
|
+
let n = new URLSearchParams({ limit: String(a) });
|
|
128
|
+
t && n.set("page_id", t);
|
|
129
|
+
let r = await this.get(`/api/v1/skills/search?${n.toString()}`);
|
|
130
|
+
e.push(...r.items ?? []), t = r.next_page_id;
|
|
131
|
+
} while (t);
|
|
132
|
+
return e;
|
|
133
|
+
}
|
|
134
|
+
searchRepositories(e) {
|
|
135
|
+
let t = new URLSearchParams();
|
|
136
|
+
return t.set("provider", e.provider), t.set("limit", String(e.limit ?? 100)), e.query && t.set("query", e.query), e.pageId && t.set("page_id", e.pageId), e.installationId && t.set("installation_id", e.installationId), this.get(`/api/v1/git/repositories/search?${t.toString()}`);
|
|
137
|
+
}
|
|
138
|
+
getInstallations(e) {
|
|
139
|
+
let t = new URLSearchParams();
|
|
140
|
+
return t.set("provider", e.provider), t.set("limit", String(e.limit ?? 100)), e.pageId && t.set("page_id", e.pageId), this.get(`/api/v1/git/installations/search?${t.toString()}`);
|
|
141
|
+
}
|
|
142
|
+
getRepositoryBranches(e) {
|
|
143
|
+
let t = new URLSearchParams();
|
|
144
|
+
return t.set("provider", e.provider), t.set("repository", e.repository), t.set("limit", String(e.limit ?? 30)), t.set("query", e.query ?? ""), e.pageId && t.set("page_id", e.pageId), this.get(`/api/v1/git/branches/search?${t.toString()}`);
|
|
145
|
+
}
|
|
146
|
+
getSuggestedTasks(e = {}) {
|
|
147
|
+
let t = new URLSearchParams();
|
|
148
|
+
return t.set("limit", String(e.limit ?? 30)), e.pageId && t.set("page_id", e.pageId), this.get(`/api/v1/git/suggested-tasks/search?${t.toString()}`);
|
|
149
|
+
}
|
|
150
|
+
searchModels(e) {
|
|
151
|
+
return this.get(`/api/v1/config/models/search${d(e)}`);
|
|
152
|
+
}
|
|
153
|
+
searchProviders(e) {
|
|
154
|
+
return this.get(`/api/v1/config/providers/search${d(e)}`);
|
|
155
|
+
}
|
|
156
|
+
searchConversations(e = 20, t) {
|
|
157
|
+
let n = new URLSearchParams();
|
|
158
|
+
return n.set("limit", String(e)), t && n.set("page_id", t), n.set("sort_order", "UPDATED_AT_DESC"), this.get(`/api/v1/app-conversations/search?${n.toString()}`);
|
|
159
|
+
}
|
|
160
|
+
getConversations(e) {
|
|
161
|
+
if (e.length === 0) return Promise.resolve([]);
|
|
162
|
+
let t = new URLSearchParams();
|
|
163
|
+
for (let n of e) t.append("ids", n);
|
|
164
|
+
return this.get(`/api/v1/app-conversations?${t}`);
|
|
165
|
+
}
|
|
166
|
+
createConversation(e) {
|
|
167
|
+
return this.post("/api/v1/app-conversations", e);
|
|
168
|
+
}
|
|
169
|
+
downloadConversation(e) {
|
|
170
|
+
return this.get(`/api/v1/app-conversations/${e}/download`, { responseType: "blob" });
|
|
171
|
+
}
|
|
172
|
+
async deleteConversation(e) {
|
|
173
|
+
await this.delete(`/api/v1/app-conversations/${e}`);
|
|
174
|
+
}
|
|
175
|
+
updateConversationPublicFlag(e, t) {
|
|
176
|
+
return this.patch(`/api/v1/app-conversations/${e}`, { public: t });
|
|
177
|
+
}
|
|
178
|
+
async pauseSandbox(e) {
|
|
179
|
+
await this.post(`/api/v1/sandboxes/${e}/pause`, {});
|
|
180
|
+
}
|
|
181
|
+
async resumeSandbox(e) {
|
|
182
|
+
await this.post(`/api/v1/sandboxes/${e}/resume`, {});
|
|
183
|
+
}
|
|
184
|
+
getSandboxes(e) {
|
|
185
|
+
if (e.length === 0) return Promise.resolve([]);
|
|
186
|
+
let t = new URLSearchParams();
|
|
187
|
+
for (let n of e) t.append("id", n);
|
|
188
|
+
return this.get(`/api/v1/sandboxes?${t}`);
|
|
189
|
+
}
|
|
190
|
+
readConversationFile(e, t) {
|
|
191
|
+
let n = new URLSearchParams({ file_path: t });
|
|
192
|
+
return this.get(`/api/v1/app-conversations/${e}/file?${n}`, { responseType: "text" });
|
|
193
|
+
}
|
|
194
|
+
async getConversationStartTask(e) {
|
|
195
|
+
let t = new URLSearchParams();
|
|
196
|
+
return t.append("ids", e), (await this.get(`/api/v1/app-conversations/start-tasks?${t}`))?.[0] ?? null;
|
|
197
|
+
}
|
|
198
|
+
async switchConversationProfile(e, t) {
|
|
199
|
+
await this.post(`/api/v1/app-conversations/${e}/switch_profile`, { profile_name: t });
|
|
200
|
+
}
|
|
201
|
+
async switchConversationAcpModel(e, t) {
|
|
202
|
+
await this.post(`/api/v1/app-conversations/${e}/switch_acp_model`, { model: t });
|
|
203
|
+
}
|
|
204
|
+
async listAutomations(e = 50, t = 0) {
|
|
205
|
+
return this.get(`/api/automation/v1?${f(e, t)}`);
|
|
206
|
+
}
|
|
207
|
+
getAutomation(e) {
|
|
208
|
+
return this.get(`/api/automation/v1/${encodeURIComponent(e)}`);
|
|
209
|
+
}
|
|
210
|
+
updateAutomation(e, t) {
|
|
211
|
+
return this.patch(`/api/automation/v1/${encodeURIComponent(e)}`, t);
|
|
212
|
+
}
|
|
213
|
+
async deleteAutomation(e) {
|
|
214
|
+
await this.delete(`/api/automation/v1/${encodeURIComponent(e)}`);
|
|
215
|
+
}
|
|
216
|
+
dispatchAutomation(e) {
|
|
217
|
+
return this.post(`/api/automation/v1/${encodeURIComponent(e)}/dispatch`);
|
|
218
|
+
}
|
|
219
|
+
listAutomationRuns(e, t = 50, n = 0) {
|
|
220
|
+
return this.get(`/api/automation/v1/${encodeURIComponent(e)}/runs?${f(t, n)}`);
|
|
221
|
+
}
|
|
222
|
+
downloadAutomationTarball(e) {
|
|
223
|
+
return this.get(`/api/automation/v1/${encodeURIComponent(e)}/tarball`, { responseType: "blob" });
|
|
224
|
+
}
|
|
225
|
+
getAutomationHealth() {
|
|
226
|
+
return this.get("/api/automation/health", { timeoutSeconds: 5 });
|
|
227
|
+
}
|
|
228
|
+
profileBasePath() {
|
|
229
|
+
return this.orgId ? `/api/organizations/${encodeURIComponent(this.orgId)}/profiles` : i;
|
|
230
|
+
}
|
|
231
|
+
buildUpstreamAuthHeaders(e) {
|
|
232
|
+
let t = e.authMode ?? "bearer";
|
|
233
|
+
return t === "none" ? {} : t === "session-api-key" ? e.sessionApiKey ? { "X-Session-API-Key": e.sessionApiKey } : {} : this.apiKey ? { Authorization: `Bearer ${this.apiKey}` } : {};
|
|
234
|
+
}
|
|
235
|
+
async requestDirect(e) {
|
|
236
|
+
let t = {
|
|
237
|
+
...this.buildUpstreamAuthHeaders(e),
|
|
238
|
+
...this.orgId ? { "X-Org-Id": this.orgId } : {},
|
|
239
|
+
...e.headers ?? {}
|
|
240
|
+
};
|
|
241
|
+
return s({
|
|
242
|
+
host: this.host,
|
|
243
|
+
method: e.method,
|
|
244
|
+
path: e.path,
|
|
245
|
+
params: e.params,
|
|
246
|
+
body: e.body,
|
|
247
|
+
headers: t,
|
|
248
|
+
timeoutMs: e.timeoutSeconds ? e.timeoutSeconds * 1e3 : this.timeout,
|
|
249
|
+
acceptableStatusCodes: e.acceptableStatusCodes,
|
|
250
|
+
responseType: e.responseType
|
|
251
|
+
});
|
|
252
|
+
}
|
|
253
|
+
async requestThroughProxy(e) {
|
|
254
|
+
if (!this.proxy) throw Error("CloudClient proxy options are required for hostOverride requests");
|
|
255
|
+
let t = {
|
|
256
|
+
...this.buildUpstreamAuthHeaders(e),
|
|
257
|
+
...this.orgId ? { "X-Org-Id": this.orgId } : {},
|
|
258
|
+
...e.headers ?? {}
|
|
259
|
+
}, n = {
|
|
260
|
+
"Content-Type": "application/json",
|
|
261
|
+
...this.proxy.apiKey ? { "X-Session-API-Key": this.proxy.apiKey } : {},
|
|
262
|
+
...this.proxy.headers ?? {}
|
|
263
|
+
}, r = this.proxy.path ?? "/api/cloud-proxy";
|
|
264
|
+
return s({
|
|
265
|
+
host: this.proxy.host,
|
|
266
|
+
method: "POST",
|
|
267
|
+
path: r,
|
|
268
|
+
body: {
|
|
269
|
+
host: e.hostOverride,
|
|
270
|
+
method: e.method,
|
|
271
|
+
path: u(e.path, e.params),
|
|
272
|
+
headers: t,
|
|
273
|
+
body: e.body ?? null,
|
|
274
|
+
...e.timeoutSeconds ? { timeout_seconds: e.timeoutSeconds } : {}
|
|
275
|
+
},
|
|
276
|
+
headers: n,
|
|
277
|
+
timeoutMs: this.timeout,
|
|
278
|
+
acceptableStatusCodes: e.acceptableStatusCodes,
|
|
279
|
+
responseType: e.responseType
|
|
280
|
+
});
|
|
281
|
+
}
|
|
282
|
+
};
|
|
283
|
+
async function s(e) {
|
|
284
|
+
let t = `${e.host.replace(/\/+$/, "")}${u(e.path, e.params)}`, n = {
|
|
285
|
+
...e.body instanceof FormData ? {} : { "Content-Type": "application/json" },
|
|
286
|
+
...e.headers ?? {}
|
|
287
|
+
}, r = {
|
|
288
|
+
method: e.method,
|
|
289
|
+
headers: n,
|
|
290
|
+
signal: AbortSignal.timeout(e.timeoutMs)
|
|
291
|
+
};
|
|
292
|
+
e.body !== void 0 && e.method !== "GET" && (r.body = e.body instanceof FormData ? e.body : JSON.stringify(e.body));
|
|
293
|
+
let i;
|
|
294
|
+
try {
|
|
295
|
+
i = await fetch(t, r);
|
|
296
|
+
} catch (t) {
|
|
297
|
+
throw t instanceof Error && (t.name === "TimeoutError" || t.name === "AbortError") ? Error(`Request timeout after ${e.timeoutMs}ms`, { cause: t }) : t;
|
|
298
|
+
}
|
|
299
|
+
if (!(e.acceptableStatusCodes?.has(i.status) || !e.acceptableStatusCodes && i.ok)) throw await c(i);
|
|
300
|
+
return l(i, e.responseType ?? "auto");
|
|
301
|
+
}
|
|
302
|
+
async function c(t) {
|
|
303
|
+
let n;
|
|
304
|
+
try {
|
|
305
|
+
n = t.headers.get("content-type")?.includes("application/json") ? await t.json() : await t.text();
|
|
306
|
+
} catch {
|
|
307
|
+
n = null;
|
|
308
|
+
}
|
|
309
|
+
return new e(t.status, t.statusText, n, `HTTP request failed (${t.status} ${t.statusText}): ${JSON.stringify(n)}`);
|
|
310
|
+
}
|
|
311
|
+
async function l(e, t) {
|
|
312
|
+
if (e.status === 204) return;
|
|
313
|
+
if (t === "blob") return await e.blob();
|
|
314
|
+
if (t === "arrayBuffer") return await e.arrayBuffer();
|
|
315
|
+
if (t === "text") return await e.text();
|
|
316
|
+
let n = e.headers.get("content-type");
|
|
317
|
+
return t === "json" || n?.includes("application/json") ? await e.json() : await e.text();
|
|
318
|
+
}
|
|
319
|
+
function u(e, t) {
|
|
320
|
+
if (!t) return e;
|
|
321
|
+
let [n, r = ""] = e.split("?"), i = new URLSearchParams(r);
|
|
322
|
+
for (let [e, n] of Object.entries(t)) n != null && (Array.isArray(n) ? n.forEach((t) => i.append(e, String(t))) : i.append(e, String(n)));
|
|
323
|
+
let a = i.toString();
|
|
324
|
+
return a ? `${n}?${a}` : n;
|
|
325
|
+
}
|
|
326
|
+
function d(e) {
|
|
327
|
+
let t = new URLSearchParams();
|
|
328
|
+
for (let [n, r] of Object.entries(e)) r !== void 0 && t.set(n, String(r));
|
|
329
|
+
let n = t.toString();
|
|
330
|
+
return n ? `?${n}` : "";
|
|
331
|
+
}
|
|
332
|
+
function f(e, t) {
|
|
333
|
+
let n = new URLSearchParams();
|
|
334
|
+
return n.set("limit", String(e)), n.set("offset", String(t)), n.toString();
|
|
335
|
+
}
|
|
336
|
+
function p(e) {
|
|
337
|
+
if (e.agent_settings && Object.keys(e.agent_settings).length > 0) return e.agent_settings;
|
|
338
|
+
let t = {}, n = {};
|
|
339
|
+
typeof e.llm_model == "string" && (n.model = e.llm_model), typeof e.llm_base_url == "string" && (n.base_url = e.llm_base_url), typeof e.llm_api_key == "string" && (n.api_key = e.llm_api_key), Object.keys(n).length > 0 && (t.llm = n);
|
|
340
|
+
let r = {};
|
|
341
|
+
return typeof e.enable_default_condenser == "boolean" && (r.enabled = e.enable_default_condenser), typeof e.condenser_max_size == "number" && (r.max_size = e.condenser_max_size), Object.keys(r).length > 0 && (t.condenser = r), typeof e.agent == "string" && (t.agent = e.agent), e.mcp_config && Object.keys(e.mcp_config).length > 0 && (t.mcp_config = e.mcp_config), t;
|
|
342
|
+
}
|
|
343
|
+
function m(e) {
|
|
344
|
+
if (e.conversation_settings && Object.keys(e.conversation_settings).length > 0) return e.conversation_settings;
|
|
345
|
+
let t = {};
|
|
346
|
+
return typeof e.confirmation_mode == "boolean" && (t.confirmation_mode = e.confirmation_mode), (typeof e.security_analyzer == "string" || e.security_analyzer === null) && (t.security_analyzer = e.security_analyzer), typeof e.max_iterations == "number" && (t.max_iterations = e.max_iterations), t;
|
|
347
|
+
}
|
|
348
|
+
//#endregion
|
|
349
|
+
export { o as CloudClient };
|
|
350
|
+
|
|
351
|
+
//# sourceMappingURL=cloud-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-client.js","names":[],"sources":["../../../../../../node_modules/@openhands/typescript-client/dist/client/cloud-client.js"],"sourcesContent":["import { HttpError } from './http-client.js';\nimport { OpenHandsClient, } from './openhands-client.js';\nimport { pollForToken, startDeviceFlow, } from './device-flow-client.js';\nconst SETTINGS_PROFILES_PATH = '/api/v1/settings/profiles';\nconst DEFAULT_PAGE_LIMIT = 100;\nexport class CloudClient extends OpenHandsClient {\n constructor(options) {\n super(options);\n this.kind = 'cloud';\n this.orgId = options.orgId ?? null;\n this.proxy = options.proxy\n ? {\n ...options.proxy,\n host: options.proxy.host.replace(/\\/+$/, ''),\n path: options.proxy.path ?? '/api/cloud-proxy',\n }\n : undefined;\n }\n async request(options) {\n return options.hostOverride\n ? this.requestThroughProxy(options)\n : this.requestDirect(options);\n }\n startDeviceFlow(options = {}) {\n return startDeviceFlow(this.host, options);\n }\n pollForToken(deviceCode, options) {\n return pollForToken(this.host, deviceCode, options);\n }\n async getOrganizations() {\n const data = await this.get('/api/organizations');\n return {\n items: data?.items ?? [],\n currentOrgId: data?.current_org_id ?? null,\n };\n }\n getCurrentApiKey() {\n return this.get('/api/keys/current');\n }\n async getOrganizationMe(orgId) {\n const data = await this.get(`/api/organizations/${encodeURIComponent(orgId)}/me`);\n return {\n orgId: data?.org_id ?? orgId,\n userId: data?.user_id ?? '',\n role: data?.role ?? null,\n permissions: Array.isArray(data?.permissions) ? data.permissions : null,\n };\n }\n getSettings() {\n return this.get('/api/v1/settings');\n }\n async getSettingsWithDerivedFields() {\n const flat = await this.getSettings();\n return {\n ...flat,\n agent_settings: deriveAgentSettings(flat),\n conversation_settings: deriveConversationSettings(flat),\n llm_api_key_set: !!flat.llm_api_key_set,\n search_api_key_set: !!flat.search_api_key_set,\n provider_tokens_set: flat.provider_tokens_set,\n };\n }\n async saveSettings(diff) {\n const body = {};\n if (diff.agent_settings_diff) {\n const agentDiff = { ...diff.agent_settings_diff };\n if (agentDiff.agent_context === null) {\n delete agentDiff.agent_context;\n }\n if (Object.keys(agentDiff).length > 0) {\n body.agent_settings_diff = agentDiff;\n }\n }\n if (diff.conversation_settings_diff &&\n Object.keys(diff.conversation_settings_diff).length > 0) {\n body.conversation_settings_diff = diff.conversation_settings_diff;\n }\n if (diff.app_preferences) {\n for (const [key, value] of Object.entries(diff.app_preferences)) {\n if (value !== undefined) {\n body[key] = value;\n }\n }\n }\n await this.post('/api/v1/settings', body);\n }\n getSettingsSchema() {\n return this.get('/api/v1/settings/agent-schema');\n }\n getConversationSettingsSchema() {\n return this.get('/api/v1/settings/conversation-schema');\n }\n listProfiles() {\n return this.get(this.profileBasePath());\n }\n async getProfile(name) {\n const result = await this.get(`${this.profileBasePath()}/${encodeURIComponent(name)}`);\n return {\n name: result.name,\n config: result.config ?? result.llm ?? {},\n api_key_set: result.api_key_set ?? false,\n };\n }\n saveProfile(name, request) {\n return this.post(`${this.profileBasePath()}/${encodeURIComponent(name)}`, request);\n }\n deleteProfile(name) {\n return this.delete(`${this.profileBasePath()}/${encodeURIComponent(name)}`);\n }\n renameProfile(name, newName) {\n return this.post(`${this.profileBasePath()}/${encodeURIComponent(name)}/rename`, { new_name: newName });\n }\n async activateProfile(name) {\n const result = await this.post(`${this.profileBasePath()}/${encodeURIComponent(name)}/activate`, {});\n return {\n name: result.name,\n message: result.message,\n llm_applied: result.model != null || result.llm != null,\n };\n }\n async listSecrets() {\n const secrets = [];\n let pageId = null;\n do {\n const query = new URLSearchParams({ limit: String(DEFAULT_PAGE_LIMIT) });\n if (pageId)\n query.set('page_id', pageId);\n const page = await this.get(`/api/v1/secrets/search?${query.toString()}`);\n secrets.push(...(page.items ?? []));\n pageId = page.next_page_id;\n } while (pageId);\n return secrets;\n }\n async createSecret(name, value, description) {\n await this.post('/api/v1/secrets', { name, value, description });\n }\n async updateSecret(secretToEdit, name, description) {\n await this.put(`/api/v1/secrets/${encodeURIComponent(secretToEdit)}`, {\n name,\n description,\n });\n }\n async deleteSecret(name) {\n await this.delete(`/api/v1/secrets/${encodeURIComponent(name)}`);\n }\n async listSkills() {\n const skills = [];\n let pageId = null;\n do {\n const query = new URLSearchParams({ limit: String(DEFAULT_PAGE_LIMIT) });\n if (pageId)\n query.set('page_id', pageId);\n const page = await this.get(`/api/v1/skills/search?${query.toString()}`);\n skills.push(...(page.items ?? []));\n pageId = page.next_page_id;\n } while (pageId);\n return skills;\n }\n searchRepositories(args) {\n const params = new URLSearchParams();\n params.set('provider', args.provider);\n params.set('limit', String(args.limit ?? 100));\n if (args.query)\n params.set('query', args.query);\n if (args.pageId)\n params.set('page_id', args.pageId);\n if (args.installationId)\n params.set('installation_id', args.installationId);\n return this.get(`/api/v1/git/repositories/search?${params.toString()}`);\n }\n getInstallations(args) {\n const params = new URLSearchParams();\n params.set('provider', args.provider);\n params.set('limit', String(args.limit ?? 100));\n if (args.pageId)\n params.set('page_id', args.pageId);\n return this.get(`/api/v1/git/installations/search?${params.toString()}`);\n }\n getRepositoryBranches(args) {\n const params = new URLSearchParams();\n params.set('provider', args.provider);\n params.set('repository', args.repository);\n params.set('limit', String(args.limit ?? 30));\n params.set('query', args.query ?? '');\n if (args.pageId)\n params.set('page_id', args.pageId);\n return this.get(`/api/v1/git/branches/search?${params.toString()}`);\n }\n getSuggestedTasks(args = {}) {\n const params = new URLSearchParams();\n params.set('limit', String(args.limit ?? 30));\n if (args.pageId)\n params.set('page_id', args.pageId);\n return this.get(`/api/v1/git/suggested-tasks/search?${params.toString()}`);\n }\n searchModels(params) {\n return this.get(`/api/v1/config/models/search${buildQuerySuffix(params)}`);\n }\n searchProviders(params) {\n return this.get(`/api/v1/config/providers/search${buildQuerySuffix(params)}`);\n }\n searchConversations(limit = 20, pageId) {\n const params = new URLSearchParams();\n params.set('limit', String(limit));\n if (pageId)\n params.set('page_id', pageId);\n params.set('sort_order', 'UPDATED_AT_DESC');\n return this.get(`/api/v1/app-conversations/search?${params.toString()}`);\n }\n getConversations(ids) {\n if (ids.length === 0)\n return Promise.resolve([]);\n const params = new URLSearchParams();\n for (const id of ids)\n params.append('ids', id);\n return this.get(`/api/v1/app-conversations?${params}`);\n }\n createConversation(request) {\n return this.post('/api/v1/app-conversations', request);\n }\n downloadConversation(conversationId) {\n return this.get(`/api/v1/app-conversations/${conversationId}/download`, {\n responseType: 'blob',\n });\n }\n async deleteConversation(conversationId) {\n await this.delete(`/api/v1/app-conversations/${conversationId}`);\n }\n updateConversationPublicFlag(conversationId, isPublic) {\n return this.patch(`/api/v1/app-conversations/${conversationId}`, {\n public: isPublic,\n });\n }\n async pauseSandbox(sandboxId) {\n await this.post(`/api/v1/sandboxes/${sandboxId}/pause`, {});\n }\n async resumeSandbox(sandboxId) {\n await this.post(`/api/v1/sandboxes/${sandboxId}/resume`, {});\n }\n getSandboxes(ids) {\n if (ids.length === 0)\n return Promise.resolve([]);\n const params = new URLSearchParams();\n for (const id of ids)\n params.append('id', id);\n return this.get(`/api/v1/sandboxes?${params}`);\n }\n readConversationFile(conversationId, filePath) {\n const query = new URLSearchParams({ file_path: filePath });\n return this.get(`/api/v1/app-conversations/${conversationId}/file?${query}`, {\n responseType: 'text',\n });\n }\n async getConversationStartTask(taskId) {\n const params = new URLSearchParams();\n params.append('ids', taskId);\n const data = await this.get(`/api/v1/app-conversations/start-tasks?${params}`);\n return data?.[0] ?? null;\n }\n async switchConversationProfile(conversationId, profileName) {\n await this.post(`/api/v1/app-conversations/${conversationId}/switch_profile`, {\n profile_name: profileName,\n });\n }\n async switchConversationAcpModel(conversationId, model) {\n await this.post(`/api/v1/app-conversations/${conversationId}/switch_acp_model`, { model });\n }\n async listAutomations(limit = 50, offset = 0) {\n return this.get(`/api/automation/v1?${paginationQuery(limit, offset)}`);\n }\n getAutomation(id) {\n return this.get(`/api/automation/v1/${encodeURIComponent(id)}`);\n }\n updateAutomation(id, body) {\n return this.patch(`/api/automation/v1/${encodeURIComponent(id)}`, body);\n }\n async deleteAutomation(id) {\n await this.delete(`/api/automation/v1/${encodeURIComponent(id)}`);\n }\n dispatchAutomation(id) {\n return this.post(`/api/automation/v1/${encodeURIComponent(id)}/dispatch`);\n }\n listAutomationRuns(id, limit = 50, offset = 0) {\n return this.get(`/api/automation/v1/${encodeURIComponent(id)}/runs?${paginationQuery(limit, offset)}`);\n }\n downloadAutomationTarball(id) {\n return this.get(`/api/automation/v1/${encodeURIComponent(id)}/tarball`, {\n responseType: 'blob',\n });\n }\n getAutomationHealth() {\n return this.get('/api/automation/health', { timeoutSeconds: 5 });\n }\n profileBasePath() {\n return this.orgId\n ? `/api/organizations/${encodeURIComponent(this.orgId)}/profiles`\n : SETTINGS_PROFILES_PATH;\n }\n buildUpstreamAuthHeaders(options) {\n const mode = options.authMode ?? 'bearer';\n if (mode === 'none')\n return {};\n if (mode === 'session-api-key') {\n return options.sessionApiKey ? { 'X-Session-API-Key': options.sessionApiKey } : {};\n }\n if (!this.apiKey)\n return {};\n return { Authorization: `Bearer ${this.apiKey}` };\n }\n async requestDirect(options) {\n const headers = {\n ...this.buildUpstreamAuthHeaders(options),\n ...(this.orgId ? { 'X-Org-Id': this.orgId } : {}),\n ...(options.headers ?? {}),\n };\n return fetchAndParse({\n host: this.host,\n method: options.method,\n path: options.path,\n params: options.params,\n body: options.body,\n headers,\n timeoutMs: options.timeoutSeconds ? options.timeoutSeconds * 1000 : this.timeout,\n acceptableStatusCodes: options.acceptableStatusCodes,\n responseType: options.responseType,\n });\n }\n async requestThroughProxy(options) {\n if (!this.proxy) {\n throw new Error('CloudClient proxy options are required for hostOverride requests');\n }\n const upstreamHeaders = {\n ...this.buildUpstreamAuthHeaders(options),\n ...(this.orgId ? { 'X-Org-Id': this.orgId } : {}),\n ...(options.headers ?? {}),\n };\n const proxyHeaders = {\n 'Content-Type': 'application/json',\n ...(this.proxy.apiKey ? { 'X-Session-API-Key': this.proxy.apiKey } : {}),\n ...(this.proxy.headers ?? {}),\n };\n const proxyPath = this.proxy.path ?? '/api/cloud-proxy';\n return fetchAndParse({\n host: this.proxy.host,\n method: 'POST',\n path: proxyPath,\n body: {\n host: options.hostOverride,\n method: options.method,\n path: appendParams(options.path, options.params),\n headers: upstreamHeaders,\n body: options.body ?? null,\n ...(options.timeoutSeconds ? { timeout_seconds: options.timeoutSeconds } : {}),\n },\n headers: proxyHeaders,\n timeoutMs: this.timeout,\n acceptableStatusCodes: options.acceptableStatusCodes,\n responseType: options.responseType,\n });\n }\n}\nasync function fetchAndParse(options) {\n const url = `${options.host.replace(/\\/+$/, '')}${appendParams(options.path, options.params)}`;\n const headers = {\n ...(options.body instanceof FormData ? {} : { 'Content-Type': 'application/json' }),\n ...(options.headers ?? {}),\n };\n const init = {\n method: options.method,\n headers,\n signal: AbortSignal.timeout(options.timeoutMs),\n };\n if (options.body !== undefined && options.method !== 'GET') {\n init.body = options.body instanceof FormData ? options.body : JSON.stringify(options.body);\n }\n let response;\n try {\n response = await fetch(url, init);\n }\n catch (error) {\n // AbortSignal.timeout() aborts with a TimeoutError; some runtimes\n // surface plain AbortError instead.\n if (error instanceof Error && (error.name === 'TimeoutError' || error.name === 'AbortError')) {\n throw new Error(`Request timeout after ${options.timeoutMs}ms`, { cause: error });\n }\n throw error;\n }\n const isAcceptable = options.acceptableStatusCodes?.has(response.status) ||\n (!options.acceptableStatusCodes && response.ok);\n if (!isAcceptable) {\n throw await buildHttpError(response);\n }\n return parseResponse(response, options.responseType ?? 'auto');\n}\nasync function buildHttpError(response) {\n let errorContent;\n try {\n const contentType = response.headers.get('content-type');\n errorContent = contentType?.includes('application/json')\n ? await response.json()\n : await response.text();\n }\n catch {\n errorContent = null;\n }\n return new HttpError(response.status, response.statusText, errorContent, `HTTP request failed (${response.status} ${response.statusText}): ${JSON.stringify(errorContent)}`);\n}\nasync function parseResponse(response, responseType) {\n if (response.status === 204) {\n return undefined;\n }\n if (responseType === 'blob')\n return (await response.blob());\n if (responseType === 'arrayBuffer')\n return (await response.arrayBuffer());\n if (responseType === 'text')\n return (await response.text());\n const contentType = response.headers.get('content-type');\n if (responseType === 'json' || contentType?.includes('application/json')) {\n return (await response.json());\n }\n return (await response.text());\n}\nfunction appendParams(path, params) {\n if (!params)\n return path;\n const [base, existingQuery = ''] = path.split('?');\n const search = new URLSearchParams(existingQuery);\n for (const [key, value] of Object.entries(params)) {\n if (value === undefined || value === null)\n continue;\n if (Array.isArray(value)) {\n value.forEach((item) => search.append(key, String(item)));\n }\n else {\n search.append(key, String(value));\n }\n }\n const query = search.toString();\n return query ? `${base}?${query}` : base;\n}\nfunction buildQuerySuffix(params) {\n const search = new URLSearchParams();\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined)\n search.set(key, String(value));\n }\n const query = search.toString();\n return query ? `?${query}` : '';\n}\nfunction paginationQuery(limit, offset) {\n const params = new URLSearchParams();\n params.set('limit', String(limit));\n params.set('offset', String(offset));\n return params.toString();\n}\nfunction deriveAgentSettings(flat) {\n if (flat.agent_settings && Object.keys(flat.agent_settings).length > 0) {\n return flat.agent_settings;\n }\n const agent = {};\n const llm = {};\n if (typeof flat.llm_model === 'string')\n llm.model = flat.llm_model;\n if (typeof flat.llm_base_url === 'string')\n llm.base_url = flat.llm_base_url;\n if (typeof flat.llm_api_key === 'string')\n llm.api_key = flat.llm_api_key;\n if (Object.keys(llm).length > 0)\n agent.llm = llm;\n const condenser = {};\n if (typeof flat.enable_default_condenser === 'boolean') {\n condenser.enabled = flat.enable_default_condenser;\n }\n if (typeof flat.condenser_max_size === 'number') {\n condenser.max_size = flat.condenser_max_size;\n }\n if (Object.keys(condenser).length > 0)\n agent.condenser = condenser;\n if (typeof flat.agent === 'string')\n agent.agent = flat.agent;\n if (flat.mcp_config && Object.keys(flat.mcp_config).length > 0) {\n agent.mcp_config = flat.mcp_config;\n }\n return agent;\n}\nfunction deriveConversationSettings(flat) {\n if (flat.conversation_settings && Object.keys(flat.conversation_settings).length > 0) {\n return flat.conversation_settings;\n }\n const out = {};\n if (typeof flat.confirmation_mode === 'boolean') {\n out.confirmation_mode = flat.confirmation_mode;\n }\n if (typeof flat.security_analyzer === 'string' || flat.security_analyzer === null) {\n out.security_analyzer = flat.security_analyzer;\n }\n if (typeof flat.max_iterations === 'number') {\n out.max_iterations = flat.max_iterations;\n }\n return out;\n}\n//# sourceMappingURL=cloud-client.js.map"],"x_google_ignoreList":[0],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
require(`../../../../../_virtual/_rolldown/runtime.cjs`);var e=class e extends Error{constructor(t,n){super(t),this.code=n,this.name=`DeviceFlowError`,Object.setPrototypeOf(this,e.prototype)}},t=6e5,n=3e4;function r(e){try{let t=e.trim().toLowerCase(),n=/^https?:\/\//i.test(t)?t:`https://${t}`,r=new URL(n).hostname;return r.endsWith(`.all-hands.dev`)||r===`all-hands.dev`||r.endsWith(`.openhands.dev`)||r===`openhands.dev`}catch{return!1}}function i(e){return e.replace(/\/+$/,``)}async function a(e,t,n,r,a,o){let s=typeof n==`string`||n instanceof Blob||n instanceof FormData||n instanceof URLSearchParams?n:JSON.stringify(n),c=new Headers(o);return c.set(`Content-Type`,r),fetch(`${i(e)}${t}`,{method:`POST`,headers:c,body:s,signal:a})}async function o(t,n={}){try{let r=await a(t,`/oauth/device/authorize`,{},`application/json`,void 0,n.headers);if(!r.ok)throw new e(`Failed to start device flow: Server returned ${r.status}`);let i=await r.json();if(!i.device_code||!i.user_code||!i.verification_uri)throw new e(`Invalid response from device authorization endpoint: missing required fields`);return{device_code:i.device_code,user_code:i.user_code,verification_uri:i.verification_uri,verification_uri_complete:i.verification_uri_complete??`${i.verification_uri}?user_code=${encodeURIComponent(i.user_code)}`,expires_in:i.expires_in??600,interval:i.interval??5}}catch(t){throw t instanceof e?t:new e(`Failed to start device flow: ${t instanceof Error?t.message:String(t)}`)}}async function s(r,i,o){let s=o.timeout??t,l=Math.max(1,o.interval)*1e3,u=Date.now();for(;Date.now()-u<s;){if(o.signal?.aborted)throw new e(`Authorization cancelled`,`cancelled`);try{let t=await a(r,`/oauth/device/token`,new URLSearchParams({grant_type:`urn:ietf:params:oauth:grant-type:device_code`,device_code:i}),`application/x-www-form-urlencoded`,o.signal,o.headers);if(t.ok){let n=await t.json();if(!n.access_token)throw new e(`Invalid token response: missing access_token`);return{access_token:n.access_token,token_type:n.token_type??`Bearer`,expires_in:n.expires_in}}let s;try{s=await t.json()}catch{throw new e(`Unexpected response from server: ${t.status}`)}switch(s.error){case`authorization_pending`:break;case`slow_down`:l=typeof s.interval==`number`&&Number.isFinite(s.interval)&&s.interval>0?Math.max(1,Math.min(s.interval,30))*1e3:Math.min(l+5e3,n);break;case`expired_token`:throw new e(`Device code has expired. Please try again.`,`expired_token`);case`access_denied`:throw new e(`Authorization request was denied.`,`access_denied`);default:throw new e(`Authorization error: ${s.error}${s.error_description?` - ${s.error_description}`:``}`,s.error)}}catch(t){if(t instanceof e)throw t;if(t instanceof DOMException&&t.name===`AbortError`)throw new e(`Authorization cancelled`,`cancelled`);console.warn(`Network error during polling, retrying:`,t)}try{await c(l,o.signal)}catch(t){throw t instanceof DOMException&&t.name===`AbortError`?new e(`Authorization cancelled`,`cancelled`):t}}throw new e(`Timeout waiting for authorization. Please try again.`,`timeout`)}function c(e,t){return new Promise((n,r)=>{if(t?.aborted){r(new DOMException(`Aborted`,`AbortError`));return}let i=setTimeout(n,e);t?.addEventListener(`abort`,()=>{clearTimeout(i),r(new DOMException(`Aborted`,`AbortError`))},{once:!0})})}exports.DeviceFlowError=e,exports.isOpenHandsCloudHost=r,exports.pollForToken=s,exports.startDeviceFlow=o;
|
|
2
|
+
//# sourceMappingURL=device-flow-client.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-flow-client.cjs","names":[],"sources":["../../../../../../node_modules/@openhands/typescript-client/dist/client/device-flow-client.js"],"sourcesContent":["export class DeviceFlowError extends Error {\n constructor(message, code) {\n super(message);\n this.code = code;\n this.name = 'DeviceFlowError';\n Object.setPrototypeOf(this, DeviceFlowError.prototype);\n }\n}\nconst DEFAULT_TIMEOUT_MS = 600000;\nconst MAX_INTERVAL_MS = 30000;\nexport function isOpenHandsCloudHost(host) {\n try {\n const trimmed = host.trim().toLowerCase();\n const withProtocol = /^https?:\\/\\//i.test(trimmed) ? trimmed : `https://${trimmed}`;\n const hostname = new URL(withProtocol).hostname;\n return (hostname.endsWith('.all-hands.dev') ||\n hostname === 'all-hands.dev' ||\n hostname.endsWith('.openhands.dev') ||\n hostname === 'openhands.dev');\n }\n catch {\n return false;\n }\n}\nfunction normalizeHost(host) {\n return host.replace(/\\/+$/, '');\n}\nasync function requestCloudDeviceEndpoint(host, path, body, contentType, signal, headers) {\n const requestBody = typeof body === 'string' ||\n body instanceof Blob ||\n body instanceof FormData ||\n body instanceof URLSearchParams\n ? body\n : JSON.stringify(body);\n const requestHeaders = new Headers(headers);\n requestHeaders.set('Content-Type', contentType);\n return fetch(`${normalizeHost(host)}${path}`, {\n method: 'POST',\n headers: requestHeaders,\n body: requestBody,\n signal,\n });\n}\nexport async function startDeviceFlow(host, options = {}) {\n try {\n const response = await requestCloudDeviceEndpoint(host, '/oauth/device/authorize', {}, 'application/json', undefined, options.headers);\n if (!response.ok) {\n throw new DeviceFlowError(`Failed to start device flow: Server returned ${response.status}`);\n }\n const data = await response.json();\n if (!data.device_code || !data.user_code || !data.verification_uri) {\n throw new DeviceFlowError('Invalid response from device authorization endpoint: missing required fields');\n }\n return {\n device_code: data.device_code,\n user_code: data.user_code,\n verification_uri: data.verification_uri,\n verification_uri_complete: data.verification_uri_complete ??\n `${data.verification_uri}?user_code=${encodeURIComponent(data.user_code)}`,\n expires_in: data.expires_in ?? 600,\n interval: data.interval ?? 5,\n };\n }\n catch (error) {\n if (error instanceof DeviceFlowError) {\n throw error;\n }\n throw new DeviceFlowError(`Failed to start device flow: ${error instanceof Error ? error.message : String(error)}`);\n }\n}\nexport async function pollForToken(host, deviceCode, options) {\n const timeout = options.timeout ?? DEFAULT_TIMEOUT_MS;\n let interval = Math.max(1, options.interval) * 1000;\n const startTime = Date.now();\n while (Date.now() - startTime < timeout) {\n if (options.signal?.aborted) {\n throw new DeviceFlowError('Authorization cancelled', 'cancelled');\n }\n try {\n const body = new URLSearchParams({\n grant_type: 'urn:ietf:params:oauth:grant-type:device_code',\n device_code: deviceCode,\n });\n const response = await requestCloudDeviceEndpoint(host, '/oauth/device/token', body, 'application/x-www-form-urlencoded', options.signal, options.headers);\n if (response.ok) {\n const data = await response.json();\n if (!data.access_token) {\n throw new DeviceFlowError('Invalid token response: missing access_token');\n }\n return {\n access_token: data.access_token,\n token_type: data.token_type ?? 'Bearer',\n expires_in: data.expires_in,\n };\n }\n let errorData;\n try {\n errorData = await response.json();\n }\n catch {\n throw new DeviceFlowError(`Unexpected response from server: ${response.status}`);\n }\n switch (errorData.error) {\n case 'authorization_pending':\n break;\n case 'slow_down':\n if (typeof errorData.interval === 'number' &&\n Number.isFinite(errorData.interval) &&\n errorData.interval > 0) {\n interval = Math.max(1, Math.min(errorData.interval, 30)) * 1000;\n }\n else {\n interval = Math.min(interval + 5000, MAX_INTERVAL_MS);\n }\n break;\n case 'expired_token':\n throw new DeviceFlowError('Device code has expired. Please try again.', 'expired_token');\n case 'access_denied':\n throw new DeviceFlowError('Authorization request was denied.', 'access_denied');\n default:\n throw new DeviceFlowError(`Authorization error: ${errorData.error}${errorData.error_description ? ` - ${errorData.error_description}` : ''}`, errorData.error);\n }\n }\n catch (error) {\n if (error instanceof DeviceFlowError) {\n throw error;\n }\n if (error instanceof DOMException && error.name === 'AbortError') {\n throw new DeviceFlowError('Authorization cancelled', 'cancelled');\n }\n console.warn('Network error during polling, retrying:', error);\n }\n try {\n await sleep(interval, options.signal);\n }\n catch (error) {\n if (error instanceof DOMException && error.name === 'AbortError') {\n throw new DeviceFlowError('Authorization cancelled', 'cancelled');\n }\n throw error;\n }\n }\n throw new DeviceFlowError('Timeout waiting for authorization. Please try again.', 'timeout');\n}\nfunction sleep(ms, signal) {\n return new Promise((resolve, reject) => {\n if (signal?.aborted) {\n reject(new DOMException('Aborted', 'AbortError'));\n return;\n }\n const timeoutId = setTimeout(resolve, ms);\n signal?.addEventListener('abort', () => {\n clearTimeout(timeoutId);\n reject(new DOMException('Aborted', 'AbortError'));\n }, { once: true });\n });\n}\n//# sourceMappingURL=device-flow-client.js.map"],"x_google_ignoreList":[0],"mappings":"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"}
|