@openhands/agent-canvas 1.18.0 → 1.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/README.windows.md +2 -2
- package/build/assets/acp-providers-BQ4o4vqy.js +1 -0
- package/build/assets/{active-backend-context-BnH4-L8h.js → active-backend-context-BsLfwrXB.js} +1 -1
- package/build/assets/{agent-context-settings-D3peZkjX.js → agent-context-settings-D9i6ezoJ.js} +1 -1
- package/build/assets/{agent-profiles-service.api-DkeZaqIl.js → agent-profiles-service.api-U-9YzDFU.js} +1 -1
- package/build/assets/{agent-profiles-settings-7yMWYjGF.js → agent-profiles-settings-D-bUV2PX.js} +1 -1
- package/build/assets/agent-server-conversation-service.api-BaVQ6NpE.js +88 -0
- package/build/assets/agent-settings-BZJHtaIK.js +2 -0
- package/build/assets/agent-settings-D4snDd6u.js +1 -0
- package/build/assets/{alert-banner-eYyqvHL3.js → alert-banner-BkVt_8Or.js} +1 -1
- package/build/assets/{api-key-entry-screen-CCBvBD8u.js → api-key-entry-screen-fAIld-n7.js} +1 -1
- package/build/assets/{app-settings-BtYDs-Be.js → app-settings-DITbrM2u.js} +1 -1
- package/build/assets/automation-detail-DawHmaOl.js +3 -0
- package/build/assets/automation-disabled-reason-DtgC8Ppt.js +1 -0
- package/build/assets/{automation-export-BJsfi7n2.js → automation-export-Kv6e0bHx.js} +1 -1
- package/build/assets/{automation-git-sync-B7o_Nbl-.js → automation-git-sync-Dd98G_Oz.js} +1 -1
- package/build/assets/{automation-setup-route-qaJ6lLCf.js → automation-setup-route-Cdc109ZD.js} +1 -1
- package/build/assets/{automation-templates-Bb98r-kx.js → automation-templates-Xhr-FDAB.js} +1 -1
- package/build/assets/automations-list-BeP1LuzQ.js +1 -0
- package/build/assets/{back-nav-button-B2yBiVMB.js → back-nav-button-DWNiN277.js} +1 -1
- package/build/assets/backend-form-modal-DeaUJIik.js +1 -0
- package/build/assets/{backend-synced-settings-badge-DLEp6cq7.js → backend-synced-settings-badge-Br85iWIY.js} +1 -1
- package/build/assets/{badge-ehL-kgeO.js → badge-Cdnei7Ly.js} +1 -1
- package/build/assets/{base-modal-C1a0TsSx.js → base-modal-Ds7grR67.js} +1 -1
- package/build/assets/{brand-button-CUMfjb99.js → brand-button-mQq2Ld1I.js} +1 -1
- package/build/assets/{browser-SE24Tk8g.js → browser-Bfum8fkE.js} +2 -2
- package/build/assets/{browser-tab-HjJxHA0V.js → browser-tab-CmYT4j_r.js} +1 -1
- package/build/assets/{canvas-extension-page-BsUGBb1T.js → canvas-extension-page-CokKSVRG.js} +1 -1
- package/build/assets/{canvas-extensions-C9Tm6s_E.js → canvas-extensions-BoQEYG-2.js} +1 -1
- package/build/assets/{canvas-extensions-runtime-B8kxM4rO.js → canvas-extensions-runtime-Du2M5iEX.js} +1 -1
- package/build/assets/{chat-send-button-CGvc2wpE.js → chat-send-button-DM3JgMc2.js} +1 -1
- package/build/assets/{circle-plus-check-toggle-BDX_ctNs.js → circle-plus-check-toggle-BbYBiUwv.js} +1 -1
- package/build/assets/{cloud-funnel-analytics-D5uJ_4JE.js → cloud-funnel-analytics-D02kgq1s.js} +1 -1
- package/build/assets/{cog-CAEugqtV.js → cog-Dy1eWbSZ.js} +1 -1
- package/build/assets/{command-menu-CQxs4mtX.js → command-menu-mehU3Evb.js} +1 -1
- package/build/assets/{commits-tab-D0xgjipP.js → commits-tab-DhQW8CXi.js} +1 -1
- package/build/assets/{condenser-settings-D63NJRBT.js → condenser-settings-eRk6Fkx6.js} +1 -1
- package/build/assets/{confirmation-modal-78sd9Vny.js → confirmation-modal-BmVt_c0I.js} +1 -1
- package/build/assets/{context-menu-list-item-Cm7-7Y-7.js → context-menu-list-item-lx2zk9G7.js} +1 -1
- package/build/assets/{conversation-B_nweu5p.js → conversation-BOj0ENI6.js} +4 -4
- package/build/assets/conversation-SouWlGvs.js +1 -0
- package/build/assets/conversation-panel-SouWlGvs.js +1 -0
- package/build/assets/{conversation-state-store-9D_3P7q4.js → conversation-state-store-C6YncQNo.js} +1 -1
- package/build/assets/{conversation-tab-empty-state-B3dpJXX0.js → conversation-tab-empty-state-DIhwCC2J.js} +1 -1
- package/build/assets/{copy-to-clipboard-button-B1ljgNxO.js → copy-to-clipboard-button-DVNXLylP.js} +1 -1
- package/build/assets/{device-verify-D5QRIS_x.js → device-verify-LP-x7nra.js} +1 -1
- package/build/assets/{dropdown-classes-BGvOvW2_.js → dropdown-classes-goDldkiu.js} +1 -1
- package/build/assets/edit-automation-modal-BJJR9wSW.js +1 -0
- package/build/assets/empty-state-Cd-TFe7i.js +1 -0
- package/build/assets/{entry.client-BMafTpjO.js → entry.client-CJdjIvMZ.js} +2 -2
- package/build/assets/{enum-filter-dropdown-UNaom12H.js → enum-filter-dropdown-pocrz9AL.js} +1 -1
- package/build/assets/{environment-switch-overlay-COibRUA-.js → environment-switch-overlay-Dwe78wRl.js} +1 -1
- package/build/assets/{error-state-Cf8LRuuY.js → error-state-SuWwztxV.js} +1 -1
- package/build/assets/{extensions-hub-C_6ahIua.js → extensions-hub-O0esK3Er.js} +1 -1
- package/build/assets/{extensions-navigation-C5GfpzFe.js → extensions-navigation-CgCVSXje.js} +1 -1
- package/build/assets/{files-tab-D5PPIWI1.js → files-tab-B_6t8ljw.js} +1 -1
- package/build/assets/{form-control-classes-Dbq-7YP_.js → form-control-classes-lQfLxzH4.js} +1 -1
- package/build/assets/{get-git-path-jU2zjqIB.js → get-git-path-Bp5rsUkl.js} +1 -1
- package/build/assets/git-repo-dropdown-CbD0_LPN.js +1 -0
- package/build/assets/{git-repo-dropdown-uxlFw2gn.js → git-repo-dropdown-DPQVumZg.js} +1 -1
- package/build/assets/{highlighted-source-view-C7pAXrT0.js → highlighted-source-view-Bp0sgK-f.js} +1 -1
- package/build/assets/home-BghzJd-D.js +1 -0
- package/build/assets/home-CXZ8zawS.js +1 -0
- package/build/assets/home-automation-run-tooltip-BdpCckKO.js +1 -0
- package/build/assets/{home-store-DCbei3DX.js → home-store-DNQpfIEO.js} +1 -1
- package/build/assets/{hooks-service-Dnmhqc0Z.js → hooks-service-DkxnQa4N.js} +1 -1
- package/build/assets/index-home-Ca6Q5CtT.js +1 -0
- package/build/assets/{install-server-modal-B81I-5OE.js → install-server-modal-DvxxYKia.js} +1 -1
- package/build/assets/{key-O84CMFHb.js → key-CwTE6XJj.js} +1 -1
- package/build/assets/{launch-ZLxI4opd.js → launch-jsRGPRBx.js} +1 -1
- package/build/assets/link-external-B4gx3EeM.js +1 -0
- package/build/assets/{llm-not-configured-banner-Dh_ajcM8.js → llm-not-configured-banner-DMdL1vaX.js} +4 -4
- package/build/assets/{llm-settings-CODhjQzy.js → llm-settings-dkQ5Oq7W.js} +1 -1
- package/build/assets/llm-settings-lNDerSlu.js +1 -0
- package/build/assets/{llm-subscription-service-CgIDc38n.js → llm-subscription-service-BiQaZbvv.js} +1 -1
- package/build/assets/{loading-spinner-BeLV0IXf.js → loading-spinner-DK1sAwVg.js} +1 -1
- package/build/assets/{manage-backends-modal-cMXqCb-B.js → manage-backends-modal-DqCJohsX.js} +1 -1
- package/build/assets/manifest-ff93dc8c.js +1 -0
- package/build/assets/{manifest-subpage-layout-CVZgVKoY.js → manifest-subpage-layout-sxuPqfUr.js} +1 -1
- package/build/assets/{markdown-renderer-DyFl9-mL.js → markdown-renderer-BH5pqDuJ.js} +1 -1
- package/build/assets/mcp-BtaJDXnP.js +1 -0
- package/build/assets/mcp-installed-servers-Br4ZLsjr.js +1 -0
- package/build/assets/mcp-marketplace-utils-BwEnDYqm.js +1 -0
- package/build/assets/mcp-page-DwbnQpVs.js +9 -0
- package/build/assets/{messages-Bk1xhbU2.js → messages-DmFJlW6c.js} +4 -4
- package/build/assets/{modal-body-C24WsdFb.js → modal-body-DBweM2EN.js} +1 -1
- package/build/assets/{modal-classes-B0b9eiL8.js → modal-classes-jvG85nkU.js} +1 -1
- package/build/assets/{modal-close-button-DfqfB2Nj.js → modal-close-button-BrM5fNnn.js} +1 -1
- package/build/assets/onboarding-CQ8T6T0U.js +1 -0
- package/build/assets/{onboarding-modal-BT3Gx_sZ.js → onboarding-modal-CnliiaSN.js} +1 -1
- package/build/assets/{organization-service.api-B5CvmnYQ.js → organization-service.api-DmFUEmu5.js} +1 -1
- package/build/assets/parse-git-remote-url-BG8pcKL8.js +1 -0
- package/build/assets/{planner-tab-CstoOlAB.js → planner-tab-CXph_C9F.js} +1 -1
- package/build/assets/{plugins-management-service-5rqVPEGN.js → plugins-management-service-CcEpfNKz.js} +1 -1
- package/build/assets/{profiles-service.api-D1XKMgr0.js → profiles-service.api-DdF_4Zhe.js} +1 -1
- package/build/assets/{providers-XmZ9HM4Q.js → providers-BWRnl31s.js} +1 -1
- package/build/assets/{proxy-XP6U1Dhv.js → proxy-DbEf3Nqr.js} +1 -1
- package/build/assets/recommended-automations-launcher-r0oI91HN.js +1 -0
- package/build/assets/root-j2fFRlWS.js +2 -0
- package/build/assets/{root-layout-DUquNZTU.js → root-layout-CfGgm2lo.js} +2 -2
- package/build/assets/root-sEWn3ha1.css +1 -0
- package/build/assets/{schema-field-Y3F8JvXd.js → schema-field-c3Ncgm4x.js} +1 -1
- package/build/assets/{sdk-section-page-CNZTLwH9.js → sdk-section-page-DFEiuiFQ.js} +1 -1
- package/build/assets/{secret-form-9-BoGA40.js → secret-form-WXXNFqTM.js} +1 -1
- package/build/assets/{secrets-service-BOIsfD9j.js → secrets-service-DU6wh3wX.js} +1 -1
- package/build/assets/{secrets-settings-CBJgFr42.js → secrets-settings-BEqbPvjy.js} +1 -1
- package/build/assets/{settings-D4hdToD4.js → settings-DjaSQwFh.js} +1 -1
- package/build/assets/{settings-dropdown-input-DBvsZ7-Q.js → settings-dropdown-input-BRR2OZwi.js} +1 -1
- package/build/assets/{settings-index-DeQphyBK.js → settings-index-DHv4XFcM.js} +1 -1
- package/build/assets/{settings-input-dVuzapBA.js → settings-input-Cm4VxUon.js} +1 -1
- package/build/assets/{settings-list-classes-DhAPuXm6.js → settings-list-classes-CaUfKZ33.js} +1 -1
- package/build/assets/{settings-modal-tHiJ8iYV.js → settings-modal-djXuAnBO.js} +1 -1
- package/build/assets/{settings-nav-GAQjW1a-.js → settings-nav-DFb3hBMr.js} +1 -1
- package/build/assets/{settings-service.api-C1vZH9Vh.js → settings-service.api-Q9lKW1TX.js} +1 -1
- package/build/assets/{settings-switch-DDd1cQ8t.js → settings-switch-seaSJc7t.js} +1 -1
- package/build/assets/{shared-conversation-Cyg7m7ns.js → shared-conversation-x3rxVCon.js} +1 -1
- package/build/assets/{sidebar-layout-DH0E-5KW.js → sidebar-layout-B6mcvvdV.js} +1 -1
- package/build/assets/{sidebar-mobile-menu-toggle-CQ4iky__.js → sidebar-mobile-menu-toggle-CEqS8KnA.js} +1 -1
- package/build/assets/{sidebar-nav-link-oLQiKUBu.js → sidebar-nav-link-BTHX11LG.js} +1 -1
- package/build/assets/{sidebar-onboarding-checklist-storage-TfvNNnnr.js → sidebar-onboarding-checklist-storage-BP1kzn6p.js} +1 -1
- package/build/assets/{skill-card-pill-row-DfjIfj0K.js → skill-card-pill-row-TD39nfP3.js} +1 -1
- package/build/assets/{skill-filter-DsNLmn76.js → skill-filter-CdBbbwjm.js} +1 -1
- package/build/assets/{skill-icon-badge-0MK_68Nc.js → skill-icon-badge-vUEp7gsC.js} +1 -1
- package/build/assets/{skill-scope-BE-H9TSZ.js → skill-scope-BTRBQt0-.js} +1 -1
- package/build/assets/{skills-plugins-vzSdxSk_.js → skills-plugins-k1tUNAw4.js} +1 -1
- package/build/assets/{skills-settings-BiPOH9H9.js → skills-settings-CENviPT7.js} +1 -1
- package/build/assets/{styled-tooltip-CejG0rqv.js → styled-tooltip-DVAlWYnL.js} +1 -1
- package/build/assets/{task-list-tab-OkZSqnTp.js → task-list-tab-BLKF_x9f.js} +1 -1
- package/build/assets/{terminal-Dph60VFZ.js → terminal-Ckbnqb23.js} +1 -1
- package/build/assets/{toggle-switch-B2uXaAUS.js → toggle-switch-DeiG9Mf6.js} +1 -1
- package/build/assets/trash-CXN2R54L.js +1 -0
- package/build/assets/{typography-DgcLGdHk.js → typography-NarNyelM.js} +1 -1
- package/build/assets/{usage-tab-MCmNRAnR.js → usage-tab-Drd3O006.js} +1 -1
- package/build/assets/{use-acp-credential-form-ychoGqjC.js → use-acp-credential-form-CJ5wPsQm.js} +1 -1
- package/build/assets/{use-activate-agent-profile-8L8Xdghy.js → use-activate-agent-profile-iQZ0U3qV.js} +1 -1
- package/build/assets/{use-agent-profiles-Bi8hSkze.js → use-agent-profiles-LCvb5OXT.js} +1 -1
- package/build/assets/{use-automation-health-U99vvHxx.js → use-automation-health-DdgSa8sA.js} +1 -1
- package/build/assets/{use-automation-permissions-Buus0R6h.js → use-automation-permissions-D3kEeieu.js} +1 -1
- package/build/assets/{use-automations-Bq5hVuv0.js → use-automations-CEubcYTD.js} +1 -1
- package/build/assets/{use-can-manage-org-profiles-MzIeEV8F.js → use-can-manage-org-profiles-CB8ybxFK.js} +1 -1
- package/build/assets/{use-canvas-extensions-Ca9KoVEm.js → use-canvas-extensions-BMacwi2v.js} +1 -1
- package/build/assets/{use-cloud-current-user-id-B4ZLUZSa.js → use-cloud-current-user-id-BEKRd6XZ.js} +1 -1
- package/build/assets/{use-config-l5tkDHyD.js → use-config-3WYcJsgC.js} +1 -1
- package/build/assets/{use-create-conversation-i_PdFdIs.js → use-create-conversation-Be-eVpFp.js} +1 -1
- package/build/assets/use-create-secret-Bk9ZxTjl.js +1 -0
- package/build/assets/{use-free-models-gCsJ5BV0.js → use-free-models-Ci3FkKEm.js} +1 -1
- package/build/assets/{use-get-secrets-CMTuWEp_.js → use-get-secrets-fqS0kxt6.js} +1 -1
- package/build/assets/{use-llm-configured-Dl4zg8ht.js → use-llm-configured-B71ZEVg2.js} +1 -1
- package/build/assets/{use-llm-profiles-SWsuFmFu.js → use-llm-profiles-xtCBMbef.js} +1 -1
- package/build/assets/{use-manifest-capabilities-CdqYfUAC.js → use-manifest-capabilities-Bso6A_-A.js} +1 -1
- package/build/assets/{use-onboarding-completion-Xl63ZvzQ.js → use-onboarding-completion-CEgjL02y.js} +1 -1
- package/build/assets/{use-pinned-home-route-BXDIUaxQ.js → use-pinned-home-route-pK4IlJ-p.js} +1 -1
- package/build/assets/{use-plugins-marketplace-BIIaPiaB.js → use-plugins-marketplace-B8-ZEB34.js} +1 -1
- package/build/assets/{use-save-agent-profile-D-ZHHE94.js → use-save-agent-profile-D7hJuW_u.js} +1 -1
- package/build/assets/{use-save-settings-Dapkf4cC.js → use-save-settings-CikTu5xV.js} +1 -1
- package/build/assets/{use-settings-C2KKQKVC.js → use-settings-BWIH5EuN.js} +1 -1
- package/build/assets/{use-settings-nav-items-TOc0Rsfd.js → use-settings-nav-items-DSKwLDnd.js} +1 -1
- package/build/assets/use-tracking-ChnSFChv.js +3 -0
- package/build/assets/{use-user-conversation-5UFqMoO4.js → use-user-conversation-C_l65DqW.js} +1 -1
- package/build/assets/utils-D-gOfhmN.js +1 -0
- package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~b0x1wrp2-D6owle9R.js +2 -0
- package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~inibp4qe-BFRW8wt-.js +48 -0
- package/build/assets/{verification-settings-DdBpaVPz.js → verification-settings-PKtoIUUY.js} +1 -1
- package/build/index.html +4 -4
- package/build/locales/ar/openhands.json +10 -0
- package/build/locales/ca/openhands.json +10 -0
- package/build/locales/de/openhands.json +10 -0
- package/build/locales/en/openhands.json +10 -0
- package/build/locales/es/openhands.json +10 -0
- package/build/locales/fr/openhands.json +10 -0
- package/build/locales/it/openhands.json +10 -0
- package/build/locales/ja/openhands.json +10 -0
- package/build/locales/ko-KR/openhands.json +10 -0
- package/build/locales/no/openhands.json +10 -0
- package/build/locales/pt/openhands.json +10 -0
- package/build/locales/tr/openhands.json +10 -0
- package/build/locales/uk/openhands.json +10 -0
- package/build/locales/zh-CN/openhands.json +10 -0
- package/build/locales/zh-TW/openhands.json +10 -0
- package/config/defaults.json +3 -3
- package/dist/components/conversation-events/chat/event-content-helpers/get-skill-ready-content.cjs +3 -3
- package/dist/components/conversation-events/chat/event-content-helpers/get-skill-ready-content.cjs.map +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/get-skill-ready-content.js +12 -16
- package/dist/components/conversation-events/chat/event-content-helpers/get-skill-ready-content.js.map +1 -1
- package/dist/components/features/automations/detail/disabled-reason-banner.d.ts +16 -0
- package/dist/components/features/home/featured-automations/home-automation-run-tooltip.cjs +1 -1
- package/dist/components/features/home/featured-automations/home-automation-run-tooltip.cjs.map +1 -1
- package/dist/components/features/home/featured-automations/home-automation-run-tooltip.js +38 -29
- package/dist/components/features/home/featured-automations/home-automation-run-tooltip.js.map +1 -1
- package/dist/components/features/settings/agent-profiles/profile-scope-list.d.ts +20 -0
- package/dist/config/defaults.cjs +1 -1
- package/dist/config/defaults.cjs.map +1 -1
- package/dist/config/defaults.js +3 -3
- package/dist/config/defaults.js.map +1 -1
- package/dist/constants/acp-providers.cjs +1 -1
- package/dist/constants/acp-providers.cjs.map +1 -1
- package/dist/constants/acp-providers.d.ts +0 -5
- package/dist/constants/acp-providers.js +20 -16
- package/dist/constants/acp-providers.js.map +1 -1
- package/dist/constants/profile-scope.d.ts +21 -0
- package/dist/hooks/query/use-automation-sdk-version.cjs +1 -1
- package/dist/hooks/query/use-automation-sdk-version.cjs.map +1 -1
- package/dist/hooks/query/use-automation-sdk-version.js +3 -1
- package/dist/hooks/query/use-automation-sdk-version.js.map +1 -1
- package/dist/hooks/use-drag-resize.cjs +1 -1
- package/dist/hooks/use-drag-resize.cjs.map +1 -1
- package/dist/hooks/use-drag-resize.js +8 -9
- package/dist/hooks/use-drag-resize.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 +10 -0
- package/dist/i18n/declaration.js +1 -1
- package/dist/i18n/declaration.js.map +1 -1
- package/dist/i18n/translation.cjs +2 -2
- package/dist/i18n/translation.cjs.map +1 -1
- package/dist/i18n/translation.js +170 -0
- package/dist/i18n/translation.js.map +1 -1
- package/dist/locales/ar/openhands.json +10 -0
- package/dist/locales/ca/openhands.json +10 -0
- package/dist/locales/de/openhands.json +10 -0
- package/dist/locales/en/openhands.json +10 -0
- package/dist/locales/es/openhands.json +10 -0
- package/dist/locales/fr/openhands.json +10 -0
- package/dist/locales/it/openhands.json +10 -0
- package/dist/locales/ja/openhands.json +10 -0
- package/dist/locales/ko-KR/openhands.json +10 -0
- package/dist/locales/no/openhands.json +10 -0
- package/dist/locales/pt/openhands.json +10 -0
- package/dist/locales/tr/openhands.json +10 -0
- package/dist/locales/uk/openhands.json +10 -0
- package/dist/locales/zh-CN/openhands.json +10 -0
- package/dist/locales/zh-TW/openhands.json +10 -0
- package/dist/manifests/manifest-validation.cjs +1 -1
- package/dist/manifests/manifest-validation.cjs.map +1 -1
- package/dist/manifests/manifest-validation.js +2 -2
- package/dist/manifests/manifest-validation.js.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/agent-server-compatibility.cjs +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/agent-server-compatibility.cjs.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/agent-server-compatibility.js +15 -8
- package/dist/node_modules/@openhands/typescript-client/dist/client/agent-server-compatibility.js.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/bash-client.cjs +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/bash-client.cjs.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/bash-client.js +11 -13
- package/dist/node_modules/@openhands/typescript-client/dist/client/bash-client.js.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/conversation-client.cjs +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/conversation-client.cjs.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/conversation-client.js +6 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/conversation-client.js.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/desktop-client.cjs +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/desktop-client.cjs.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/desktop-client.js +3 -6
- package/dist/node_modules/@openhands/typescript-client/dist/client/desktop-client.js.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/file-client.cjs +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/file-client.cjs.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/file-client.js +9 -12
- package/dist/node_modules/@openhands/typescript-client/dist/client/file-client.js.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/runtime-transport.cjs +2 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/runtime-transport.cjs.map +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/runtime-transport.js +41 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/runtime-transport.js.map +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/vscode-client.cjs +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/vscode-client.cjs.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/client/vscode-client.js +3 -6
- package/dist/node_modules/@openhands/typescript-client/dist/client/vscode-client.js.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/clients.cjs +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/clients.js +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/models/acp-providers.cjs +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/models/acp-providers.cjs.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/models/acp-providers.js +199 -61
- package/dist/node_modules/@openhands/typescript-client/dist/models/acp-providers.js.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/workspace/remote-workspace.cjs +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/workspace/remote-workspace.cjs.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/workspace/remote-workspace.js +9 -8
- package/dist/node_modules/@openhands/typescript-client/dist/workspace/remote-workspace.js.map +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/agent-settings.d.ts +5 -0
- package/dist/types/automation.cjs.map +1 -1
- package/dist/types/automation.d.ts +23 -1
- package/dist/types/automation.js.map +1 -1
- package/dist/utils/automation-disabled-reason.cjs +2 -0
- package/dist/utils/automation-disabled-reason.cjs.map +1 -0
- package/dist/utils/automation-disabled-reason.d.ts +32 -0
- package/dist/utils/automation-disabled-reason.js +19 -0
- package/dist/utils/automation-disabled-reason.js.map +1 -0
- package/dist/utils/parse-git-remote-url.cjs +1 -1
- package/dist/utils/parse-git-remote-url.cjs.map +1 -1
- package/dist/utils/parse-git-remote-url.d.ts +5 -1
- package/dist/utils/parse-git-remote-url.js +20 -13
- package/dist/utils/parse-git-remote-url.js.map +1 -1
- package/package.json +2 -2
- package/scripts/check-sdk-version-sync.mjs +79 -8
- package/scripts/dev-safe.mjs +1 -1
- package/scripts/static-server.mjs +24 -7
- package/build/assets/acp-providers-DcY_mKYa.js +0 -1
- package/build/assets/agent-server-conversation-service.api-jiCopc2E.js +0 -88
- package/build/assets/agent-settings-BF8hM6wb.js +0 -2
- package/build/assets/agent-settings-YPutBAeR.js +0 -1
- package/build/assets/automation-detail-BxXhb_m2.js +0 -3
- package/build/assets/automations-list-DEPVNud3.js +0 -1
- package/build/assets/backend-form-modal-DxisQV_6.js +0 -1
- package/build/assets/conversation-edjzrv5w.js +0 -1
- package/build/assets/conversation-panel-edjzrv5w.js +0 -1
- package/build/assets/edit-automation-modal-D_JWSmxT.js +0 -1
- package/build/assets/empty-state-FK_s1B60.js +0 -1
- package/build/assets/git-repo-dropdown-BoDDWXfX.js +0 -1
- package/build/assets/home-BM5_Wz_R.js +0 -1
- package/build/assets/home-Ivfm7KC4.js +0 -1
- package/build/assets/home-automation-run-tooltip-B1N2uO9p.js +0 -1
- package/build/assets/index-home-td9BN2T3.js +0 -1
- package/build/assets/kebab-menu-item-content-SCJBwZnp.js +0 -1
- package/build/assets/link-external-BNZzCM1I.js +0 -1
- package/build/assets/llm-settings-CZaXYgtw.js +0 -1
- package/build/assets/manifest-bfeccb98.js +0 -1
- package/build/assets/mcp-CraxoXQv.js +0 -1
- package/build/assets/mcp-marketplace-utils-C7PYr293.js +0 -1
- package/build/assets/mcp-page-CteH_K0N.js +0 -9
- package/build/assets/onboarding-DXFBRqEy.js +0 -1
- package/build/assets/parse-git-remote-url-DpDM9bK6.js +0 -1
- package/build/assets/recommended-automations-launcher-DEHRKIAg.js +0 -1
- package/build/assets/root-CM6IZHlg.css +0 -1
- package/build/assets/root-DdFkodKW.js +0 -2
- package/build/assets/trash-Ckh7yCaB.js +0 -1
- package/build/assets/use-create-secret-CjWq0J4O.js +0 -1
- package/build/assets/use-tracking-j4uo9VEW.js +0 -3
- package/build/assets/utils-BgLSZdyy.js +0 -1
- package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~b0x1wrp2-Z0lly3FE.js +0 -2
- package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~inibp4qe-CnsDDzeE.js +0 -48
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acp-providers.cjs","names":[],"sources":["../../../../../../node_modules/@openhands/typescript-client/dist/models/acp-providers.json"],"sourcesContent":["{\n \"claude-code\": {\n \"
|
|
1
|
+
{"version":3,"file":"acp-providers.cjs","names":[],"sources":["../../../../../../node_modules/@openhands/typescript-client/dist/models/acp-providers.json"],"sourcesContent":["{\n \"claude-code\": {\n \"agent_name_patterns\": [\n \"claude-agent\"\n ],\n \"api_key_env_var\": \"ANTHROPIC_API_KEY\",\n \"available_models\": [\n {\n \"id\": \"default\",\n \"label\": \"Default (recommended)\"\n },\n {\n \"id\": \"opus[1m]\",\n \"label\": \"Claude Opus (1M)\"\n },\n {\n \"id\": \"claude-opus-5\",\n \"label\": \"Claude Opus 5\"\n },\n {\n \"id\": \"sonnet\",\n \"label\": \"Claude Sonnet\"\n },\n {\n \"id\": \"haiku\",\n \"label\": \"Claude Haiku\"\n }\n ],\n \"base_url_env_var\": \"ANTHROPIC_BASE_URL\",\n \"binary_name\": \"claude-agent-acp\",\n \"data_dir_env_var\": \"CLAUDE_CONFIG_DIR\",\n \"default_command\": [\n \"npx\",\n \"-y\",\n \"--prefer-offline\",\n \"@agentclientprotocol/claude-agent-acp@0.63.0\"\n ],\n \"default_model\": \"opus[1m]\",\n \"default_session_mode\": \"bypassPermissions\",\n \"display_name\": \"Claude Code\",\n \"env_conflicts\": [\n {\n \"dominant\": \"CLAUDE_CODE_OAUTH_TOKEN\",\n \"strip\": [\n \"ANTHROPIC_API_KEY\",\n \"ANTHROPIC_BASE_URL\"\n ]\n }\n ],\n \"file_secrets\": [],\n \"key\": \"claude-code\",\n \"session_meta_key\": \"claudeCode\",\n \"supports_runtime_model_switch\": true,\n \"supports_set_session_model\": true\n },\n \"codex\": {\n \"agent_name_patterns\": [\n \"codex-acp\"\n ],\n \"api_key_env_var\": \"OPENAI_API_KEY\",\n \"available_models\": [\n {\n \"id\": \"gpt-6-astra\",\n \"label\": \"GPT-6 Astra\"\n },\n {\n \"id\": \"gpt-5.6-sol\",\n \"label\": \"GPT-5.6 Sol\"\n },\n {\n \"id\": \"gpt-5.6-terra\",\n \"label\": \"GPT-5.6 Terra\"\n },\n {\n \"id\": \"gpt-5.6-luna\",\n \"label\": \"GPT-5.6 Luna\"\n },\n {\n \"id\": \"gpt-5.5\",\n \"label\": \"GPT-5.5\"\n }\n ],\n \"base_url_env_var\": \"OPENAI_BASE_URL\",\n \"binary_name\": \"codex-acp\",\n \"data_dir_env_var\": \"CODEX_HOME\",\n \"default_command\": [\n \"npx\",\n \"-y\",\n \"--prefer-offline\",\n \"@agentclientprotocol/codex-acp@1.10.0\"\n ],\n \"default_model\": \"gpt-5.5\",\n \"default_session_mode\": \"agent-full-access\",\n \"display_name\": \"Codex\",\n \"env_conflicts\": [],\n \"file_secrets\": [\n {\n \"env_points_to\": \"dir\",\n \"env_var\": \"CODEX_HOME\",\n \"filename\": \"auth.json\",\n \"secret_name\": \"CODEX_AUTH_JSON\",\n \"subdir\": \"codex\",\n \"warn_if_unset\": []\n }\n ],\n \"key\": \"codex\",\n \"session_meta_key\": null,\n \"supports_runtime_model_switch\": true,\n \"supports_set_session_model\": true\n },\n \"gemini-cli\": {\n \"agent_name_patterns\": [\n \"gemini-cli\"\n ],\n \"api_key_env_var\": \"GEMINI_API_KEY\",\n \"available_models\": [\n {\n \"id\": \"auto\",\n \"label\": \"Auto\"\n },\n {\n \"id\": \"gemini-3.1-pro-preview\",\n \"label\": \"Gemini 3.1 Pro (preview)\"\n },\n {\n \"id\": \"gemini-3-pro-preview\",\n \"label\": \"Gemini 3 Pro (preview)\"\n },\n {\n \"id\": \"gemini-3-flash-preview\",\n \"label\": \"Gemini 3 Flash (preview)\"\n },\n {\n \"id\": \"gemini-3.1-flash-lite\",\n \"label\": \"Gemini 3.1 Flash Lite\"\n },\n {\n \"id\": \"gemini-2.5-pro\",\n \"label\": \"Gemini 2.5 Pro\"\n },\n {\n \"id\": \"gemini-2.5-flash\",\n \"label\": \"Gemini 2.5 Flash\"\n }\n ],\n \"base_url_env_var\": \"GEMINI_BASE_URL\",\n \"binary_name\": \"gemini\",\n \"data_dir_env_var\": \"HOME\",\n \"default_command\": [\n \"npx\",\n \"-y\",\n \"--prefer-offline\",\n \"@google/gemini-cli@0.46.0\",\n \"--acp\"\n ],\n \"default_model\": \"auto\",\n \"default_session_mode\": \"default\",\n \"display_name\": \"Gemini CLI\",\n \"env_conflicts\": [],\n \"file_secrets\": [\n {\n \"env_points_to\": \"file\",\n \"env_var\": \"GOOGLE_APPLICATION_CREDENTIALS\",\n \"filename\": \"gcloud-credentials.json\",\n \"secret_name\": \"GOOGLE_APPLICATION_CREDENTIALS_JSON\",\n \"subdir\": \"gemini-cli\",\n \"warn_if_unset\": [\n \"GOOGLE_CLOUD_PROJECT\",\n \"GOOGLE_CLOUD_LOCATION\"\n ]\n }\n ],\n \"key\": \"gemini-cli\",\n \"session_meta_key\": null,\n \"supports_runtime_model_switch\": true,\n \"supports_set_session_model\": true\n },\n \"kimi-code\": {\n \"agent_name_patterns\": [\n \"kimi\"\n ],\n \"api_key_env_var\": null,\n \"available_models\": [],\n \"base_url_env_var\": \"KIMI_BASE_URL\",\n \"binary_name\": \"kimi\",\n \"data_dir_env_var\": \"KIMI_CODE_HOME\",\n \"default_command\": [\n \"npx\",\n \"-y\",\n \"--prefer-offline\",\n \"@moonshot-ai/kimi-code@0.38.0\",\n \"acp\"\n ],\n \"default_model\": null,\n \"default_session_mode\": \"yolo\",\n \"display_name\": \"Kimi Code\",\n \"env_conflicts\": [],\n \"file_secrets\": [\n {\n \"env_points_to\": \"dir\",\n \"env_var\": \"KIMI_CODE_HOME\",\n \"filename\": \"config.toml\",\n \"secret_name\": \"KIMI_CODE_CONFIG_TOML\",\n \"subdir\": \"kimi-code\",\n \"warn_if_unset\": []\n }\n ],\n \"key\": \"kimi-code\",\n \"session_meta_key\": null,\n \"supports_runtime_model_switch\": true,\n \"supports_set_session_model\": true\n },\n \"opencode\": {\n \"agent_name_patterns\": [\n \"opencode\"\n ],\n \"api_key_env_var\": \"OPENCODE_API_KEY\",\n \"available_models\": [\n {\n \"id\": \"opencode/big-pickle\",\n \"label\": \"Big Pickle\"\n },\n {\n \"id\": \"opencode/claude-opus-5\",\n \"label\": \"Claude Opus 5\"\n },\n {\n \"id\": \"opencode/claude-sonnet-5\",\n \"label\": \"Claude Sonnet 5\"\n },\n {\n \"id\": \"opencode/gpt-5.5\",\n \"label\": \"GPT-5.5\"\n },\n {\n \"id\": \"opencode/gemini-3.1-pro\",\n \"label\": \"Gemini 3.1 Pro\"\n },\n {\n \"id\": \"opencode/kimi-k3\",\n \"label\": \"Kimi K3\"\n },\n {\n \"id\": \"opencode/nemotron-3-ultra-free\",\n \"label\": \"Nemotron 3 Ultra (free)\"\n }\n ],\n \"base_url_env_var\": null,\n \"binary_name\": \"opencode\",\n \"data_dir_env_var\": \"HOME\",\n \"default_command\": [\n \"npx\",\n \"-y\",\n \"--prefer-offline\",\n \"opencode-ai@1.18.23\",\n \"acp\"\n ],\n \"default_model\": \"opencode/big-pickle\",\n \"default_session_mode\": \"build\",\n \"display_name\": \"OpenCode\",\n \"env_conflicts\": [],\n \"file_secrets\": [],\n \"key\": \"opencode\",\n \"session_meta_key\": null,\n \"supports_runtime_model_switch\": true,\n \"supports_set_session_model\": true\n },\n \"pi\": {\n \"agent_name_patterns\": [\n \"pi-acp\"\n ],\n \"api_key_env_var\": \"ANTHROPIC_API_KEY\",\n \"available_models\": [\n {\n \"id\": \"anthropic/claude-opus-5\",\n \"label\": \"Claude Opus 5\"\n },\n {\n \"id\": \"anthropic/claude-opus-4-8\",\n \"label\": \"Claude Opus 4.8\"\n },\n {\n \"id\": \"anthropic/claude-sonnet-5\",\n \"label\": \"Claude Sonnet 5\"\n },\n {\n \"id\": \"anthropic/claude-sonnet-4-6\",\n \"label\": \"Claude Sonnet 4.6\"\n },\n {\n \"id\": \"anthropic/claude-haiku-4-5\",\n \"label\": \"Claude Haiku 4.5\"\n }\n ],\n \"base_url_env_var\": null,\n \"binary_name\": \"pi-acp\",\n \"data_dir_env_var\": \"HOME\",\n \"default_command\": [\n \"npx\",\n \"-y\",\n \"--prefer-offline\",\n \"--package=pi-acp@0.0.33\",\n \"--package=@earendil-works/pi-coding-agent@0.83.0\",\n \"pi-acp\"\n ],\n \"default_model\": null,\n \"default_session_mode\": null,\n \"display_name\": \"Pi\",\n \"env_conflicts\": [],\n \"file_secrets\": [\n {\n \"env_points_to\": \"dir\",\n \"env_var\": \"PI_CODING_AGENT_DIR\",\n \"filename\": \"auth.json\",\n \"secret_name\": \"PI_AUTH_JSON\",\n \"subdir\": \"pi\",\n \"warn_if_unset\": []\n }\n ],\n \"key\": \"pi\",\n \"session_meta_key\": null,\n \"supports_runtime_model_switch\": true,\n \"supports_set_session_model\": true\n }\n}\n"],"x_google_ignoreList":[0],"mappings":""}
|
|
@@ -1,18 +1,7 @@
|
|
|
1
1
|
var e = {
|
|
2
2
|
"claude-code": {
|
|
3
|
-
key: "claude-code",
|
|
4
|
-
display_name: "Claude Code",
|
|
5
|
-
default_command: [
|
|
6
|
-
"npx",
|
|
7
|
-
"-y",
|
|
8
|
-
"@agentclientprotocol/claude-agent-acp@0.63.0"
|
|
9
|
-
],
|
|
10
|
-
api_key_env_var: "ANTHROPIC_API_KEY",
|
|
11
|
-
base_url_env_var: "ANTHROPIC_BASE_URL",
|
|
12
|
-
default_session_mode: "bypassPermissions",
|
|
13
3
|
agent_name_patterns: ["claude-agent"],
|
|
14
|
-
|
|
15
|
-
session_meta_key: "claudeCode",
|
|
4
|
+
api_key_env_var: "ANTHROPIC_API_KEY",
|
|
16
5
|
available_models: [
|
|
17
6
|
{
|
|
18
7
|
id: "default",
|
|
@@ -35,30 +24,35 @@ var e = {
|
|
|
35
24
|
label: "Claude Haiku"
|
|
36
25
|
}
|
|
37
26
|
],
|
|
38
|
-
|
|
39
|
-
supports_runtime_model_switch: !0,
|
|
40
|
-
file_secrets: [],
|
|
27
|
+
base_url_env_var: "ANTHROPIC_BASE_URL",
|
|
41
28
|
binary_name: "claude-agent-acp",
|
|
42
|
-
data_dir_env_var: "CLAUDE_CONFIG_DIR"
|
|
43
|
-
},
|
|
44
|
-
codex: {
|
|
45
|
-
key: "codex",
|
|
46
|
-
display_name: "Codex",
|
|
29
|
+
data_dir_env_var: "CLAUDE_CONFIG_DIR",
|
|
47
30
|
default_command: [
|
|
48
31
|
"npx",
|
|
49
32
|
"-y",
|
|
50
|
-
"
|
|
33
|
+
"--prefer-offline",
|
|
34
|
+
"@agentclientprotocol/claude-agent-acp@0.63.0"
|
|
51
35
|
],
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
36
|
+
default_model: "opus[1m]",
|
|
37
|
+
default_session_mode: "bypassPermissions",
|
|
38
|
+
display_name: "Claude Code",
|
|
39
|
+
env_conflicts: [{
|
|
40
|
+
dominant: "CLAUDE_CODE_OAUTH_TOKEN",
|
|
41
|
+
strip: ["ANTHROPIC_API_KEY", "ANTHROPIC_BASE_URL"]
|
|
42
|
+
}],
|
|
43
|
+
file_secrets: [],
|
|
44
|
+
key: "claude-code",
|
|
45
|
+
session_meta_key: "claudeCode",
|
|
46
|
+
supports_runtime_model_switch: !0,
|
|
47
|
+
supports_set_session_model: !0
|
|
48
|
+
},
|
|
49
|
+
codex: {
|
|
55
50
|
agent_name_patterns: ["codex-acp"],
|
|
56
|
-
|
|
57
|
-
session_meta_key: null,
|
|
51
|
+
api_key_env_var: "OPENAI_API_KEY",
|
|
58
52
|
available_models: [
|
|
59
53
|
{
|
|
60
|
-
id: "gpt-
|
|
61
|
-
label: "GPT-
|
|
54
|
+
id: "gpt-6-astra",
|
|
55
|
+
label: "GPT-6 Astra"
|
|
62
56
|
},
|
|
63
57
|
{
|
|
64
58
|
id: "gpt-5.6-sol",
|
|
@@ -75,44 +69,37 @@ var e = {
|
|
|
75
69
|
{
|
|
76
70
|
id: "gpt-5.5",
|
|
77
71
|
label: "GPT-5.5"
|
|
78
|
-
},
|
|
79
|
-
{
|
|
80
|
-
id: "gpt-5.4",
|
|
81
|
-
label: "GPT-5.4"
|
|
82
|
-
},
|
|
83
|
-
{
|
|
84
|
-
id: "gpt-5.4-mini",
|
|
85
|
-
label: "GPT-5.4 Mini"
|
|
86
72
|
}
|
|
87
73
|
],
|
|
74
|
+
base_url_env_var: "OPENAI_BASE_URL",
|
|
75
|
+
binary_name: "codex-acp",
|
|
76
|
+
data_dir_env_var: "CODEX_HOME",
|
|
77
|
+
default_command: [
|
|
78
|
+
"npx",
|
|
79
|
+
"-y",
|
|
80
|
+
"--prefer-offline",
|
|
81
|
+
"@agentclientprotocol/codex-acp@1.10.0"
|
|
82
|
+
],
|
|
88
83
|
default_model: "gpt-5.5",
|
|
89
|
-
|
|
84
|
+
default_session_mode: "agent-full-access",
|
|
85
|
+
display_name: "Codex",
|
|
86
|
+
env_conflicts: [],
|
|
90
87
|
file_secrets: [{
|
|
91
|
-
|
|
92
|
-
filename: "auth.json",
|
|
88
|
+
env_points_to: "dir",
|
|
93
89
|
env_var: "CODEX_HOME",
|
|
90
|
+
filename: "auth.json",
|
|
91
|
+
secret_name: "CODEX_AUTH_JSON",
|
|
94
92
|
subdir: "codex",
|
|
95
|
-
env_points_to: "dir",
|
|
96
93
|
warn_if_unset: []
|
|
97
94
|
}],
|
|
98
|
-
|
|
99
|
-
|
|
95
|
+
key: "codex",
|
|
96
|
+
session_meta_key: null,
|
|
97
|
+
supports_runtime_model_switch: !0,
|
|
98
|
+
supports_set_session_model: !0
|
|
100
99
|
},
|
|
101
100
|
"gemini-cli": {
|
|
102
|
-
key: "gemini-cli",
|
|
103
|
-
display_name: "Gemini CLI",
|
|
104
|
-
default_command: [
|
|
105
|
-
"npx",
|
|
106
|
-
"-y",
|
|
107
|
-
"@google/gemini-cli@0.46.0",
|
|
108
|
-
"--acp"
|
|
109
|
-
],
|
|
110
|
-
api_key_env_var: "GEMINI_API_KEY",
|
|
111
|
-
base_url_env_var: "GEMINI_BASE_URL",
|
|
112
|
-
default_session_mode: "default",
|
|
113
101
|
agent_name_patterns: ["gemini-cli"],
|
|
114
|
-
|
|
115
|
-
session_meta_key: null,
|
|
102
|
+
api_key_env_var: "GEMINI_API_KEY",
|
|
116
103
|
available_models: [
|
|
117
104
|
{
|
|
118
105
|
id: "auto",
|
|
@@ -143,18 +130,169 @@ var e = {
|
|
|
143
130
|
label: "Gemini 2.5 Flash"
|
|
144
131
|
}
|
|
145
132
|
],
|
|
133
|
+
base_url_env_var: "GEMINI_BASE_URL",
|
|
134
|
+
binary_name: "gemini",
|
|
135
|
+
data_dir_env_var: "HOME",
|
|
136
|
+
default_command: [
|
|
137
|
+
"npx",
|
|
138
|
+
"-y",
|
|
139
|
+
"--prefer-offline",
|
|
140
|
+
"@google/gemini-cli@0.46.0",
|
|
141
|
+
"--acp"
|
|
142
|
+
],
|
|
146
143
|
default_model: "auto",
|
|
147
|
-
|
|
144
|
+
default_session_mode: "default",
|
|
145
|
+
display_name: "Gemini CLI",
|
|
146
|
+
env_conflicts: [],
|
|
148
147
|
file_secrets: [{
|
|
149
|
-
|
|
150
|
-
filename: "gcloud-credentials.json",
|
|
148
|
+
env_points_to: "file",
|
|
151
149
|
env_var: "GOOGLE_APPLICATION_CREDENTIALS",
|
|
150
|
+
filename: "gcloud-credentials.json",
|
|
151
|
+
secret_name: "GOOGLE_APPLICATION_CREDENTIALS_JSON",
|
|
152
152
|
subdir: "gemini-cli",
|
|
153
|
-
env_points_to: "file",
|
|
154
153
|
warn_if_unset: ["GOOGLE_CLOUD_PROJECT", "GOOGLE_CLOUD_LOCATION"]
|
|
155
154
|
}],
|
|
156
|
-
|
|
157
|
-
|
|
155
|
+
key: "gemini-cli",
|
|
156
|
+
session_meta_key: null,
|
|
157
|
+
supports_runtime_model_switch: !0,
|
|
158
|
+
supports_set_session_model: !0
|
|
159
|
+
},
|
|
160
|
+
"kimi-code": {
|
|
161
|
+
agent_name_patterns: ["kimi"],
|
|
162
|
+
api_key_env_var: null,
|
|
163
|
+
available_models: [],
|
|
164
|
+
base_url_env_var: "KIMI_BASE_URL",
|
|
165
|
+
binary_name: "kimi",
|
|
166
|
+
data_dir_env_var: "KIMI_CODE_HOME",
|
|
167
|
+
default_command: [
|
|
168
|
+
"npx",
|
|
169
|
+
"-y",
|
|
170
|
+
"--prefer-offline",
|
|
171
|
+
"@moonshot-ai/kimi-code@0.38.0",
|
|
172
|
+
"acp"
|
|
173
|
+
],
|
|
174
|
+
default_model: null,
|
|
175
|
+
default_session_mode: "yolo",
|
|
176
|
+
display_name: "Kimi Code",
|
|
177
|
+
env_conflicts: [],
|
|
178
|
+
file_secrets: [{
|
|
179
|
+
env_points_to: "dir",
|
|
180
|
+
env_var: "KIMI_CODE_HOME",
|
|
181
|
+
filename: "config.toml",
|
|
182
|
+
secret_name: "KIMI_CODE_CONFIG_TOML",
|
|
183
|
+
subdir: "kimi-code",
|
|
184
|
+
warn_if_unset: []
|
|
185
|
+
}],
|
|
186
|
+
key: "kimi-code",
|
|
187
|
+
session_meta_key: null,
|
|
188
|
+
supports_runtime_model_switch: !0,
|
|
189
|
+
supports_set_session_model: !0
|
|
190
|
+
},
|
|
191
|
+
opencode: {
|
|
192
|
+
agent_name_patterns: ["opencode"],
|
|
193
|
+
api_key_env_var: "OPENCODE_API_KEY",
|
|
194
|
+
available_models: [
|
|
195
|
+
{
|
|
196
|
+
id: "opencode/big-pickle",
|
|
197
|
+
label: "Big Pickle"
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
id: "opencode/claude-opus-5",
|
|
201
|
+
label: "Claude Opus 5"
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
id: "opencode/claude-sonnet-5",
|
|
205
|
+
label: "Claude Sonnet 5"
|
|
206
|
+
},
|
|
207
|
+
{
|
|
208
|
+
id: "opencode/gpt-5.5",
|
|
209
|
+
label: "GPT-5.5"
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
id: "opencode/gemini-3.1-pro",
|
|
213
|
+
label: "Gemini 3.1 Pro"
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
id: "opencode/kimi-k3",
|
|
217
|
+
label: "Kimi K3"
|
|
218
|
+
},
|
|
219
|
+
{
|
|
220
|
+
id: "opencode/nemotron-3-ultra-free",
|
|
221
|
+
label: "Nemotron 3 Ultra (free)"
|
|
222
|
+
}
|
|
223
|
+
],
|
|
224
|
+
base_url_env_var: null,
|
|
225
|
+
binary_name: "opencode",
|
|
226
|
+
data_dir_env_var: "HOME",
|
|
227
|
+
default_command: [
|
|
228
|
+
"npx",
|
|
229
|
+
"-y",
|
|
230
|
+
"--prefer-offline",
|
|
231
|
+
"opencode-ai@1.18.23",
|
|
232
|
+
"acp"
|
|
233
|
+
],
|
|
234
|
+
default_model: "opencode/big-pickle",
|
|
235
|
+
default_session_mode: "build",
|
|
236
|
+
display_name: "OpenCode",
|
|
237
|
+
env_conflicts: [],
|
|
238
|
+
file_secrets: [],
|
|
239
|
+
key: "opencode",
|
|
240
|
+
session_meta_key: null,
|
|
241
|
+
supports_runtime_model_switch: !0,
|
|
242
|
+
supports_set_session_model: !0
|
|
243
|
+
},
|
|
244
|
+
pi: {
|
|
245
|
+
agent_name_patterns: ["pi-acp"],
|
|
246
|
+
api_key_env_var: "ANTHROPIC_API_KEY",
|
|
247
|
+
available_models: [
|
|
248
|
+
{
|
|
249
|
+
id: "anthropic/claude-opus-5",
|
|
250
|
+
label: "Claude Opus 5"
|
|
251
|
+
},
|
|
252
|
+
{
|
|
253
|
+
id: "anthropic/claude-opus-4-8",
|
|
254
|
+
label: "Claude Opus 4.8"
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
id: "anthropic/claude-sonnet-5",
|
|
258
|
+
label: "Claude Sonnet 5"
|
|
259
|
+
},
|
|
260
|
+
{
|
|
261
|
+
id: "anthropic/claude-sonnet-4-6",
|
|
262
|
+
label: "Claude Sonnet 4.6"
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
id: "anthropic/claude-haiku-4-5",
|
|
266
|
+
label: "Claude Haiku 4.5"
|
|
267
|
+
}
|
|
268
|
+
],
|
|
269
|
+
base_url_env_var: null,
|
|
270
|
+
binary_name: "pi-acp",
|
|
271
|
+
data_dir_env_var: "HOME",
|
|
272
|
+
default_command: [
|
|
273
|
+
"npx",
|
|
274
|
+
"-y",
|
|
275
|
+
"--prefer-offline",
|
|
276
|
+
"--package=pi-acp@0.0.33",
|
|
277
|
+
"--package=@earendil-works/pi-coding-agent@0.83.0",
|
|
278
|
+
"pi-acp"
|
|
279
|
+
],
|
|
280
|
+
default_model: null,
|
|
281
|
+
default_session_mode: null,
|
|
282
|
+
display_name: "Pi",
|
|
283
|
+
env_conflicts: [],
|
|
284
|
+
file_secrets: [{
|
|
285
|
+
env_points_to: "dir",
|
|
286
|
+
env_var: "PI_CODING_AGENT_DIR",
|
|
287
|
+
filename: "auth.json",
|
|
288
|
+
secret_name: "PI_AUTH_JSON",
|
|
289
|
+
subdir: "pi",
|
|
290
|
+
warn_if_unset: []
|
|
291
|
+
}],
|
|
292
|
+
key: "pi",
|
|
293
|
+
session_meta_key: null,
|
|
294
|
+
supports_runtime_model_switch: !0,
|
|
295
|
+
supports_set_session_model: !0
|
|
158
296
|
}
|
|
159
297
|
};
|
|
160
298
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acp-providers.js","names":[],"sources":["../../../../../../node_modules/@openhands/typescript-client/dist/models/acp-providers.json"],"sourcesContent":["{\n \"claude-code\": {\n \"
|
|
1
|
+
{"version":3,"file":"acp-providers.js","names":[],"sources":["../../../../../../node_modules/@openhands/typescript-client/dist/models/acp-providers.json"],"sourcesContent":["{\n \"claude-code\": {\n \"agent_name_patterns\": [\n \"claude-agent\"\n ],\n \"api_key_env_var\": \"ANTHROPIC_API_KEY\",\n \"available_models\": [\n {\n \"id\": \"default\",\n \"label\": \"Default (recommended)\"\n },\n {\n \"id\": \"opus[1m]\",\n \"label\": \"Claude Opus (1M)\"\n },\n {\n \"id\": \"claude-opus-5\",\n \"label\": \"Claude Opus 5\"\n },\n {\n \"id\": \"sonnet\",\n \"label\": \"Claude Sonnet\"\n },\n {\n \"id\": \"haiku\",\n \"label\": \"Claude Haiku\"\n }\n ],\n \"base_url_env_var\": \"ANTHROPIC_BASE_URL\",\n \"binary_name\": \"claude-agent-acp\",\n \"data_dir_env_var\": \"CLAUDE_CONFIG_DIR\",\n \"default_command\": [\n \"npx\",\n \"-y\",\n \"--prefer-offline\",\n \"@agentclientprotocol/claude-agent-acp@0.63.0\"\n ],\n \"default_model\": \"opus[1m]\",\n \"default_session_mode\": \"bypassPermissions\",\n \"display_name\": \"Claude Code\",\n \"env_conflicts\": [\n {\n \"dominant\": \"CLAUDE_CODE_OAUTH_TOKEN\",\n \"strip\": [\n \"ANTHROPIC_API_KEY\",\n \"ANTHROPIC_BASE_URL\"\n ]\n }\n ],\n \"file_secrets\": [],\n \"key\": \"claude-code\",\n \"session_meta_key\": \"claudeCode\",\n \"supports_runtime_model_switch\": true,\n \"supports_set_session_model\": true\n },\n \"codex\": {\n \"agent_name_patterns\": [\n \"codex-acp\"\n ],\n \"api_key_env_var\": \"OPENAI_API_KEY\",\n \"available_models\": [\n {\n \"id\": \"gpt-6-astra\",\n \"label\": \"GPT-6 Astra\"\n },\n {\n \"id\": \"gpt-5.6-sol\",\n \"label\": \"GPT-5.6 Sol\"\n },\n {\n \"id\": \"gpt-5.6-terra\",\n \"label\": \"GPT-5.6 Terra\"\n },\n {\n \"id\": \"gpt-5.6-luna\",\n \"label\": \"GPT-5.6 Luna\"\n },\n {\n \"id\": \"gpt-5.5\",\n \"label\": \"GPT-5.5\"\n }\n ],\n \"base_url_env_var\": \"OPENAI_BASE_URL\",\n \"binary_name\": \"codex-acp\",\n \"data_dir_env_var\": \"CODEX_HOME\",\n \"default_command\": [\n \"npx\",\n \"-y\",\n \"--prefer-offline\",\n \"@agentclientprotocol/codex-acp@1.10.0\"\n ],\n \"default_model\": \"gpt-5.5\",\n \"default_session_mode\": \"agent-full-access\",\n \"display_name\": \"Codex\",\n \"env_conflicts\": [],\n \"file_secrets\": [\n {\n \"env_points_to\": \"dir\",\n \"env_var\": \"CODEX_HOME\",\n \"filename\": \"auth.json\",\n \"secret_name\": \"CODEX_AUTH_JSON\",\n \"subdir\": \"codex\",\n \"warn_if_unset\": []\n }\n ],\n \"key\": \"codex\",\n \"session_meta_key\": null,\n \"supports_runtime_model_switch\": true,\n \"supports_set_session_model\": true\n },\n \"gemini-cli\": {\n \"agent_name_patterns\": [\n \"gemini-cli\"\n ],\n \"api_key_env_var\": \"GEMINI_API_KEY\",\n \"available_models\": [\n {\n \"id\": \"auto\",\n \"label\": \"Auto\"\n },\n {\n \"id\": \"gemini-3.1-pro-preview\",\n \"label\": \"Gemini 3.1 Pro (preview)\"\n },\n {\n \"id\": \"gemini-3-pro-preview\",\n \"label\": \"Gemini 3 Pro (preview)\"\n },\n {\n \"id\": \"gemini-3-flash-preview\",\n \"label\": \"Gemini 3 Flash (preview)\"\n },\n {\n \"id\": \"gemini-3.1-flash-lite\",\n \"label\": \"Gemini 3.1 Flash Lite\"\n },\n {\n \"id\": \"gemini-2.5-pro\",\n \"label\": \"Gemini 2.5 Pro\"\n },\n {\n \"id\": \"gemini-2.5-flash\",\n \"label\": \"Gemini 2.5 Flash\"\n }\n ],\n \"base_url_env_var\": \"GEMINI_BASE_URL\",\n \"binary_name\": \"gemini\",\n \"data_dir_env_var\": \"HOME\",\n \"default_command\": [\n \"npx\",\n \"-y\",\n \"--prefer-offline\",\n \"@google/gemini-cli@0.46.0\",\n \"--acp\"\n ],\n \"default_model\": \"auto\",\n \"default_session_mode\": \"default\",\n \"display_name\": \"Gemini CLI\",\n \"env_conflicts\": [],\n \"file_secrets\": [\n {\n \"env_points_to\": \"file\",\n \"env_var\": \"GOOGLE_APPLICATION_CREDENTIALS\",\n \"filename\": \"gcloud-credentials.json\",\n \"secret_name\": \"GOOGLE_APPLICATION_CREDENTIALS_JSON\",\n \"subdir\": \"gemini-cli\",\n \"warn_if_unset\": [\n \"GOOGLE_CLOUD_PROJECT\",\n \"GOOGLE_CLOUD_LOCATION\"\n ]\n }\n ],\n \"key\": \"gemini-cli\",\n \"session_meta_key\": null,\n \"supports_runtime_model_switch\": true,\n \"supports_set_session_model\": true\n },\n \"kimi-code\": {\n \"agent_name_patterns\": [\n \"kimi\"\n ],\n \"api_key_env_var\": null,\n \"available_models\": [],\n \"base_url_env_var\": \"KIMI_BASE_URL\",\n \"binary_name\": \"kimi\",\n \"data_dir_env_var\": \"KIMI_CODE_HOME\",\n \"default_command\": [\n \"npx\",\n \"-y\",\n \"--prefer-offline\",\n \"@moonshot-ai/kimi-code@0.38.0\",\n \"acp\"\n ],\n \"default_model\": null,\n \"default_session_mode\": \"yolo\",\n \"display_name\": \"Kimi Code\",\n \"env_conflicts\": [],\n \"file_secrets\": [\n {\n \"env_points_to\": \"dir\",\n \"env_var\": \"KIMI_CODE_HOME\",\n \"filename\": \"config.toml\",\n \"secret_name\": \"KIMI_CODE_CONFIG_TOML\",\n \"subdir\": \"kimi-code\",\n \"warn_if_unset\": []\n }\n ],\n \"key\": \"kimi-code\",\n \"session_meta_key\": null,\n \"supports_runtime_model_switch\": true,\n \"supports_set_session_model\": true\n },\n \"opencode\": {\n \"agent_name_patterns\": [\n \"opencode\"\n ],\n \"api_key_env_var\": \"OPENCODE_API_KEY\",\n \"available_models\": [\n {\n \"id\": \"opencode/big-pickle\",\n \"label\": \"Big Pickle\"\n },\n {\n \"id\": \"opencode/claude-opus-5\",\n \"label\": \"Claude Opus 5\"\n },\n {\n \"id\": \"opencode/claude-sonnet-5\",\n \"label\": \"Claude Sonnet 5\"\n },\n {\n \"id\": \"opencode/gpt-5.5\",\n \"label\": \"GPT-5.5\"\n },\n {\n \"id\": \"opencode/gemini-3.1-pro\",\n \"label\": \"Gemini 3.1 Pro\"\n },\n {\n \"id\": \"opencode/kimi-k3\",\n \"label\": \"Kimi K3\"\n },\n {\n \"id\": \"opencode/nemotron-3-ultra-free\",\n \"label\": \"Nemotron 3 Ultra (free)\"\n }\n ],\n \"base_url_env_var\": null,\n \"binary_name\": \"opencode\",\n \"data_dir_env_var\": \"HOME\",\n \"default_command\": [\n \"npx\",\n \"-y\",\n \"--prefer-offline\",\n \"opencode-ai@1.18.23\",\n \"acp\"\n ],\n \"default_model\": \"opencode/big-pickle\",\n \"default_session_mode\": \"build\",\n \"display_name\": \"OpenCode\",\n \"env_conflicts\": [],\n \"file_secrets\": [],\n \"key\": \"opencode\",\n \"session_meta_key\": null,\n \"supports_runtime_model_switch\": true,\n \"supports_set_session_model\": true\n },\n \"pi\": {\n \"agent_name_patterns\": [\n \"pi-acp\"\n ],\n \"api_key_env_var\": \"ANTHROPIC_API_KEY\",\n \"available_models\": [\n {\n \"id\": \"anthropic/claude-opus-5\",\n \"label\": \"Claude Opus 5\"\n },\n {\n \"id\": \"anthropic/claude-opus-4-8\",\n \"label\": \"Claude Opus 4.8\"\n },\n {\n \"id\": \"anthropic/claude-sonnet-5\",\n \"label\": \"Claude Sonnet 5\"\n },\n {\n \"id\": \"anthropic/claude-sonnet-4-6\",\n \"label\": \"Claude Sonnet 4.6\"\n },\n {\n \"id\": \"anthropic/claude-haiku-4-5\",\n \"label\": \"Claude Haiku 4.5\"\n }\n ],\n \"base_url_env_var\": null,\n \"binary_name\": \"pi-acp\",\n \"data_dir_env_var\": \"HOME\",\n \"default_command\": [\n \"npx\",\n \"-y\",\n \"--prefer-offline\",\n \"--package=pi-acp@0.0.33\",\n \"--package=@earendil-works/pi-coding-agent@0.83.0\",\n \"pi-acp\"\n ],\n \"default_model\": null,\n \"default_session_mode\": null,\n \"display_name\": \"Pi\",\n \"env_conflicts\": [],\n \"file_secrets\": [\n {\n \"env_points_to\": \"dir\",\n \"env_var\": \"PI_CODING_AGENT_DIR\",\n \"filename\": \"auth.json\",\n \"secret_name\": \"PI_AUTH_JSON\",\n \"subdir\": \"pi\",\n \"warn_if_unset\": []\n }\n ],\n \"key\": \"pi\",\n \"session_meta_key\": null,\n \"supports_runtime_model_switch\": true,\n \"supports_set_session_model\": true\n }\n}\n"],"x_google_ignoreList":[0],"mappings":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require("../../../../../_virtual/_rolldown/runtime.cjs");const e=require("../client/
|
|
1
|
+
require("../../../../../_virtual/_rolldown/runtime.cjs");const e=require("../client/runtime-transport.cjs"),t=require("../client/bash-client.cjs");var n=class{constructor(n){this.host=n.host.replace(/\/$/,``),this.workingDir=n.workingDir,this.apiKey=n.apiKey,this.conversationId=n.conversationId;let{serverClient:r,runtimeClient:i}=e.createRuntimeHttpClients(n);this.serverClient=r,this.client=i,this.bash=new t.BashClient({host:this.host,conversationId:this.conversationId,...this.apiKey?{apiKey:this.apiKey}:{}})}async startWorkspaceSession(e){if(this.conversationId!==void 0&&this.conversationId!==e)throw Error(`Workspace session must belong to the selected runtime`);return await this.serverClient.post(`/api/auth/workspace-session`,void 0,{credentials:`include`}),`${this.host}/api/conversations/${encodeURIComponent(e)}/workspace/`}async deleteWorkspaceSession(){await this.serverClient.delete(`/api/auth/workspace-session`,{credentials:`include`,acceptableStatusCodes:new Set([204])})}async executeCommand(e,t,n=30){let r={command:e,timeout:Math.floor(n)};t&&(r.cwd=t);let i=(await this.client.post(`/api/bash/execute_bash_command`,r,{timeout:(n+10)*1e3})).data;return{command:e,exit_code:i.exit_code??0,stdout:i.stdout||``,stderr:i.stderr||``,timeout_occurred:!1}}async fileUpload(e,t,n){let r=new FormData,i,a;e instanceof File?(i=e,a=n||e.name):e instanceof Blob?(i=e,a=n||`blob-file`):(i=new Blob([e],{type:`text/plain`}),a=n||`text-file.txt`),r.append(`file`,i,a);let o=(await this.client.request({method:`POST`,url:`/api/file/upload`,params:{path:t},data:r,timeout:6e4})).data;return{success:o.success??!0,source_path:a,destination_path:t,file_size:o.file_size,error:o.error}}async fileDownload(e){let t=await this.client.get(`/api/file/download`,{params:{path:e},timeout:6e4}),n,r;if(typeof t.data==`string`)n=t.data,r=new Blob([t.data]).size;else if(t.data instanceof ArrayBuffer)n=new Blob([t.data]),r=t.data.byteLength;else if(t.data instanceof Blob)n=t.data,r=t.data.size;else{let e=JSON.stringify(t.data);n=e,r=new Blob([e]).size}return{success:!0,source_path:e,content:n,file_size:r}}async gitChanges(e,t={}){let n={path:e};t.ref!==void 0&&(n.ref=t.ref);try{return(await this.client.get(`/api/git/changes`,{params:n})).data}catch(e){throw Error(`Failed to get git changes: ${e instanceof Error?e.message:String(e)}`,{cause:e})}}async gitDiff(e,t={}){let n={path:e};t.ref!==void 0&&(n.ref=t.ref);try{return(await this.client.get(`/api/git/diff`,{params:n})).data}catch(e){throw Error(`Failed to get git diff: ${e instanceof Error?e.message:String(e)}`,{cause:e})}}async uploadText(e,t,n){return this.fileUpload(e,t,n)}async uploadFileObject(e,t){return this.fileUpload(e,t)}async downloadAsText(e){let t=await this.fileDownload(e);if(!t.success)throw Error(t.error||`Download failed`);return typeof t.content==`string`?t.content:t.content instanceof Blob?await t.content.text():``}async downloadAsBlob(e){let t=await this.fileDownload(e);if(!t.success)throw Error(t.error||`Download failed`);return t.content instanceof Blob?t.content:typeof t.content==`string`?new Blob([t.content],{type:`text/plain`}):new Blob}async downloadAndSave(e,t){if(typeof document>`u`)throw Error(`downloadAndSave() is only available in browser environments. Use downloadAsBlob() or downloadAsText() in Node.js.`);let n=await this.downloadAsBlob(e),r=URL.createObjectURL(n),i=document.createElement(`a`);i.href=r,i.download=t||e.split(`/`).pop()||`download`,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(r)}close(){this.bash.close(),this.client.close()}};exports.RemoteWorkspace=n;
|
|
2
2
|
//# sourceMappingURL=remote-workspace.cjs.map
|
package/dist/node_modules/@openhands/typescript-client/dist/workspace/remote-workspace.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote-workspace.cjs","names":["HttpClient","BashClient"],"sources":["../../../../../../node_modules/@openhands/typescript-client/dist/workspace/remote-workspace.js"],"sourcesContent":["/**\n * Remote workspace implementation for executing commands and file operations\n *\n * This implements the IWorkspace interface by connecting to a remote OpenHands\n * agent server. It mirrors the Python SDK's RemoteWorkspace class.\n */\nimport { BashClient } from '../client/bash-client.js';\nimport { HttpClient } from '../client/http-client.js';\n/**\n * Remote workspace implementation that connects to an OpenHands agent server.\n *\n * RemoteWorkspace provides access to a sandboxed environment running on a remote\n * OpenHands agent server. This is the recommended approach for production deployments\n * as it provides better isolation and security.\n */\nexport class RemoteWorkspace {\n constructor(options) {\n this.host = options.host.replace(/\\/$/, '');\n this.workingDir = options.workingDir;\n this.apiKey = options.apiKey;\n this.client = new HttpClient({\n baseUrl: this.host,\n apiKey: this.apiKey,\n timeout: 60000,\n });\n this.bash = new BashClient({\n host: this.host,\n ...(this.apiKey ? { apiKey: this.apiKey } : {}),\n });\n }\n /**\n * Start a workspace static-asset session for a conversation and return the\n * base URL its workspace files are served from.\n *\n * Calls `POST /api/auth/workspace-session` to exchange the workspace's\n * configured `X-Session-API-Key` for an HttpOnly cookie\n * (`oh_workspace_session_key`) scoped to `/api/conversations`. With the\n * cookie set, browsers can embed workspace artifacts directly as\n * `<iframe src>`, `<img src>` or top-level navigations without having to\n * attach the custom `X-Session-API-Key` header — which they cannot do on\n * those request types.\n *\n * The fetch is made with `credentials: 'include'` so the browser persists\n * the `Set-Cookie` response even when the agent server lives on a different\n * origin from the embedding page (e.g. canvas + `agent-{id}.example.com`).\n *\n * This is intentionally a workspace-level method rather than a\n * conversation-level one: the static asset server lives on the agent host\n * and consumers (e.g. agent-canvas) often want to embed workspace files\n * before they have a full `RemoteConversation` constructed — they just need\n * a conversation ID.\n *\n * @param conversationId The conversation whose workspace files should be\n * served from the returned URL.\n * @returns The base URL for the workspace static file server, including a\n * trailing slash (e.g. `https://host/api/conversations/{id}/workspace/`),\n * suitable for joining a relative path onto.\n */\n async startWorkspaceSession(conversationId) {\n await this.client.post('/api/auth/workspace-session', undefined, {\n credentials: 'include',\n });\n return `${this.host}/api/conversations/${conversationId}/workspace/`;\n }\n async deleteWorkspaceSession() {\n await this.client.delete('/api/auth/workspace-session', {\n credentials: 'include',\n acceptableStatusCodes: new Set([204]),\n });\n }\n async executeCommand(command, cwd, timeout = 30.0) {\n const payload = {\n command,\n timeout: Math.floor(timeout),\n };\n if (cwd) {\n payload.cwd = cwd;\n }\n const response = await this.client.post('/api/bash/execute_bash_command', payload, {\n timeout: (timeout + 10) * 1000,\n });\n const bashOutput = response.data;\n return {\n command,\n exit_code: bashOutput.exit_code ?? 0,\n stdout: bashOutput.stdout || '',\n stderr: bashOutput.stderr || '',\n timeout_occurred: false,\n };\n }\n async fileUpload(content, destinationPath, fileName) {\n const formData = new FormData();\n let blob;\n let finalFileName;\n if (content instanceof File) {\n blob = content;\n finalFileName = fileName || content.name;\n }\n else if (content instanceof Blob) {\n blob = content;\n finalFileName = fileName || 'blob-file';\n }\n else {\n blob = new Blob([content], { type: 'text/plain' });\n finalFileName = fileName || 'text-file.txt';\n }\n formData.append('file', blob, finalFileName);\n const response = await this.client.request({\n method: 'POST',\n url: '/api/file/upload',\n params: { path: destinationPath },\n data: formData,\n timeout: 60000,\n });\n const resultData = response.data;\n return {\n success: resultData.success ?? true,\n source_path: finalFileName,\n destination_path: destinationPath,\n file_size: resultData.file_size,\n error: resultData.error,\n };\n }\n async fileDownload(sourcePath) {\n const response = await this.client.get('/api/file/download', {\n params: { path: sourcePath },\n timeout: 60000,\n });\n let content;\n let fileSize;\n if (typeof response.data === 'string') {\n content = response.data;\n fileSize = new Blob([response.data]).size;\n }\n else if (response.data instanceof ArrayBuffer) {\n content = new Blob([response.data]);\n fileSize = response.data.byteLength;\n }\n else if (response.data instanceof Blob) {\n content = response.data;\n fileSize = response.data.size;\n }\n else {\n const stringData = JSON.stringify(response.data);\n content = stringData;\n fileSize = new Blob([stringData]).size;\n }\n return {\n success: true,\n source_path: sourcePath,\n content,\n file_size: fileSize,\n };\n }\n async gitChanges(path, options = {}) {\n const params = { path };\n if (options.ref !== undefined) {\n params.ref = options.ref;\n }\n try {\n const response = await this.client.get('/api/git/changes', {\n params,\n });\n return response.data;\n }\n catch (error) {\n throw new Error(`Failed to get git changes: ${error instanceof Error ? error.message : String(error)}`, { cause: error });\n }\n }\n async gitDiff(path, options = {}) {\n const params = { path };\n if (options.ref !== undefined) {\n params.ref = options.ref;\n }\n try {\n const response = await this.client.get('/api/git/diff', {\n params,\n });\n return response.data;\n }\n catch (error) {\n throw new Error(`Failed to get git diff: ${error instanceof Error ? error.message : String(error)}`, { cause: error });\n }\n }\n /**\n * Convenience method to upload text content as a file\n */\n async uploadText(text, destinationPath, fileName) {\n return this.fileUpload(text, destinationPath, fileName);\n }\n /**\n * Convenience method to upload a File object (from file input)\n */\n async uploadFileObject(file, destinationPath) {\n return this.fileUpload(file, destinationPath);\n }\n /**\n * Convenience method to download file content as text\n */\n async downloadAsText(sourcePath) {\n const result = await this.fileDownload(sourcePath);\n if (!result.success) {\n throw new Error(result.error || 'Download failed');\n }\n if (typeof result.content === 'string') {\n return result.content;\n }\n else if (result.content instanceof Blob) {\n return await result.content.text();\n }\n return '';\n }\n /**\n * Convenience method to download file content as a Blob\n */\n async downloadAsBlob(sourcePath) {\n const result = await this.fileDownload(sourcePath);\n if (!result.success) {\n throw new Error(result.error || 'Download failed');\n }\n if (result.content instanceof Blob) {\n return result.content;\n }\n else if (typeof result.content === 'string') {\n return new Blob([result.content], { type: 'text/plain' });\n }\n return new Blob();\n }\n /**\n * Convenience method to trigger a browser download of a file\n */\n async downloadAndSave(sourcePath, saveAsFileName) {\n const blob = await this.downloadAsBlob(sourcePath);\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = saveAsFileName || sourcePath.split('/').pop() || 'download';\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n }\n close() {\n this.bash.close();\n this.client.close();\n }\n}\n//# sourceMappingURL=remote-workspace.js.map"],"x_google_ignoreList":[0],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"remote-workspace.cjs","names":["createRuntimeHttpClients","BashClient"],"sources":["../../../../../../node_modules/@openhands/typescript-client/dist/workspace/remote-workspace.js"],"sourcesContent":["/**\n * Remote workspace implementation for executing commands and file operations\n *\n * This implements the IWorkspace interface by connecting to a remote OpenHands\n * agent server. It mirrors the Python SDK's RemoteWorkspace class.\n */\nimport { BashClient } from '../client/bash-client.js';\nimport { createRuntimeHttpClients } from '../client/runtime-transport.js';\n/**\n * Remote workspace implementation that connects to an OpenHands agent server.\n *\n * RemoteWorkspace provides access to a sandboxed environment running on a remote\n * OpenHands agent server. This is the recommended approach for production deployments\n * as it provides better isolation and security.\n */\nexport class RemoteWorkspace {\n constructor(options) {\n this.host = options.host.replace(/\\/$/, '');\n this.workingDir = options.workingDir;\n this.apiKey = options.apiKey;\n this.conversationId = options.conversationId;\n const { serverClient, runtimeClient } = createRuntimeHttpClients(options);\n this.serverClient = serverClient;\n this.client = runtimeClient;\n this.bash = new BashClient({\n host: this.host,\n conversationId: this.conversationId,\n ...(this.apiKey ? { apiKey: this.apiKey } : {}),\n });\n }\n /**\n * Start a workspace static-asset session for a conversation and return the\n * base URL its workspace files are served from.\n *\n * Calls `POST /api/auth/workspace-session` to exchange the workspace's\n * configured `X-Session-API-Key` for an HttpOnly cookie\n * (`oh_workspace_session_key`) scoped to `/api/conversations`. With the\n * cookie set, browsers can embed workspace artifacts directly as\n * `<iframe src>`, `<img src>` or top-level navigations without having to\n * attach the custom `X-Session-API-Key` header — which they cannot do on\n * those request types.\n *\n * The fetch is made with `credentials: 'include'` so the browser persists\n * the `Set-Cookie` response even when the agent server lives on a different\n * origin from the embedding page (e.g. canvas + `agent-{id}.example.com`).\n *\n * This is intentionally a workspace-level method rather than a\n * conversation-level one: the static asset server lives on the agent host\n * and consumers (e.g. agent-canvas) often want to embed workspace files\n * before they have a full `RemoteConversation` constructed — they just need\n * a conversation ID.\n *\n * @param conversationId The conversation whose workspace files should be\n * served from the returned URL.\n * @returns The base URL for the workspace static file server, including a\n * trailing slash (e.g. `https://host/api/conversations/{id}/workspace/`),\n * suitable for joining a relative path onto.\n */\n async startWorkspaceSession(conversationId) {\n if (this.conversationId !== undefined && this.conversationId !== conversationId) {\n throw new Error('Workspace session must belong to the selected runtime');\n }\n await this.serverClient.post('/api/auth/workspace-session', undefined, {\n credentials: 'include',\n });\n return `${this.host}/api/conversations/${encodeURIComponent(conversationId)}/workspace/`;\n }\n async deleteWorkspaceSession() {\n await this.serverClient.delete('/api/auth/workspace-session', {\n credentials: 'include',\n acceptableStatusCodes: new Set([204]),\n });\n }\n async executeCommand(command, cwd, timeout = 30.0) {\n const payload = {\n command,\n timeout: Math.floor(timeout),\n };\n if (cwd) {\n payload.cwd = cwd;\n }\n const response = await this.client.post('/api/bash/execute_bash_command', payload, {\n timeout: (timeout + 10) * 1000,\n });\n const bashOutput = response.data;\n return {\n command,\n exit_code: bashOutput.exit_code ?? 0,\n stdout: bashOutput.stdout || '',\n stderr: bashOutput.stderr || '',\n timeout_occurred: false,\n };\n }\n async fileUpload(content, destinationPath, fileName) {\n const formData = new FormData();\n let blob;\n let finalFileName;\n if (content instanceof File) {\n blob = content;\n finalFileName = fileName || content.name;\n }\n else if (content instanceof Blob) {\n blob = content;\n finalFileName = fileName || 'blob-file';\n }\n else {\n blob = new Blob([content], { type: 'text/plain' });\n finalFileName = fileName || 'text-file.txt';\n }\n formData.append('file', blob, finalFileName);\n const response = await this.client.request({\n method: 'POST',\n url: '/api/file/upload',\n params: { path: destinationPath },\n data: formData,\n timeout: 60000,\n });\n const resultData = response.data;\n return {\n success: resultData.success ?? true,\n source_path: finalFileName,\n destination_path: destinationPath,\n file_size: resultData.file_size,\n error: resultData.error,\n };\n }\n async fileDownload(sourcePath) {\n const response = await this.client.get('/api/file/download', {\n params: { path: sourcePath },\n timeout: 60000,\n });\n let content;\n let fileSize;\n if (typeof response.data === 'string') {\n content = response.data;\n fileSize = new Blob([response.data]).size;\n }\n else if (response.data instanceof ArrayBuffer) {\n content = new Blob([response.data]);\n fileSize = response.data.byteLength;\n }\n else if (response.data instanceof Blob) {\n content = response.data;\n fileSize = response.data.size;\n }\n else {\n const stringData = JSON.stringify(response.data);\n content = stringData;\n fileSize = new Blob([stringData]).size;\n }\n return {\n success: true,\n source_path: sourcePath,\n content,\n file_size: fileSize,\n };\n }\n async gitChanges(path, options = {}) {\n const params = { path };\n if (options.ref !== undefined) {\n params.ref = options.ref;\n }\n try {\n const response = await this.client.get('/api/git/changes', {\n params,\n });\n return response.data;\n }\n catch (error) {\n throw new Error(`Failed to get git changes: ${error instanceof Error ? error.message : String(error)}`, { cause: error });\n }\n }\n async gitDiff(path, options = {}) {\n const params = { path };\n if (options.ref !== undefined) {\n params.ref = options.ref;\n }\n try {\n const response = await this.client.get('/api/git/diff', {\n params,\n });\n return response.data;\n }\n catch (error) {\n throw new Error(`Failed to get git diff: ${error instanceof Error ? error.message : String(error)}`, { cause: error });\n }\n }\n /**\n * Convenience method to upload text content as a file\n */\n async uploadText(text, destinationPath, fileName) {\n return this.fileUpload(text, destinationPath, fileName);\n }\n /**\n * Convenience method to upload a File object (from file input)\n */\n async uploadFileObject(file, destinationPath) {\n return this.fileUpload(file, destinationPath);\n }\n /**\n * Convenience method to download file content as text\n */\n async downloadAsText(sourcePath) {\n const result = await this.fileDownload(sourcePath);\n if (!result.success) {\n throw new Error(result.error || 'Download failed');\n }\n if (typeof result.content === 'string') {\n return result.content;\n }\n else if (result.content instanceof Blob) {\n return await result.content.text();\n }\n return '';\n }\n /**\n * Convenience method to download file content as a Blob\n */\n async downloadAsBlob(sourcePath) {\n const result = await this.fileDownload(sourcePath);\n if (!result.success) {\n throw new Error(result.error || 'Download failed');\n }\n if (result.content instanceof Blob) {\n return result.content;\n }\n else if (typeof result.content === 'string') {\n return new Blob([result.content], { type: 'text/plain' });\n }\n return new Blob();\n }\n /**\n * Convenience method to trigger a browser download of a file\n * @throws Error in non-browser environments; use downloadAsBlob() or downloadAsText() instead.\n */\n async downloadAndSave(sourcePath, saveAsFileName) {\n if (typeof document === 'undefined') {\n throw new Error('downloadAndSave() is only available in browser environments. ' +\n 'Use downloadAsBlob() or downloadAsText() in Node.js.');\n }\n const blob = await this.downloadAsBlob(sourcePath);\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = saveAsFileName || sourcePath.split('/').pop() || 'download';\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n }\n close() {\n this.bash.close();\n this.client.close();\n }\n}\n//# sourceMappingURL=remote-workspace.js.map"],"x_google_ignoreList":[0],"mappings":"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"}
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createRuntimeHttpClients as e } from "../client/runtime-transport.js";
|
|
2
2
|
import { BashClient as t } from "../client/bash-client.js";
|
|
3
3
|
//#region node_modules/@openhands/typescript-client/dist/workspace/remote-workspace.js
|
|
4
4
|
var n = class {
|
|
5
5
|
constructor(n) {
|
|
6
|
-
this.host = n.host.replace(/\/$/, ""), this.workingDir = n.workingDir, this.apiKey = n.apiKey, this.
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
timeout: 6e4
|
|
10
|
-
}), this.bash = new t({
|
|
6
|
+
this.host = n.host.replace(/\/$/, ""), this.workingDir = n.workingDir, this.apiKey = n.apiKey, this.conversationId = n.conversationId;
|
|
7
|
+
let { serverClient: r, runtimeClient: i } = e(n);
|
|
8
|
+
this.serverClient = r, this.client = i, this.bash = new t({
|
|
11
9
|
host: this.host,
|
|
10
|
+
conversationId: this.conversationId,
|
|
12
11
|
...this.apiKey ? { apiKey: this.apiKey } : {}
|
|
13
12
|
});
|
|
14
13
|
}
|
|
15
14
|
async startWorkspaceSession(e) {
|
|
16
|
-
|
|
15
|
+
if (this.conversationId !== void 0 && this.conversationId !== e) throw Error("Workspace session must belong to the selected runtime");
|
|
16
|
+
return await this.serverClient.post("/api/auth/workspace-session", void 0, { credentials: "include" }), `${this.host}/api/conversations/${encodeURIComponent(e)}/workspace/`;
|
|
17
17
|
}
|
|
18
18
|
async deleteWorkspaceSession() {
|
|
19
|
-
await this.
|
|
19
|
+
await this.serverClient.delete("/api/auth/workspace-session", {
|
|
20
20
|
credentials: "include",
|
|
21
21
|
acceptableStatusCodes: new Set([204])
|
|
22
22
|
});
|
|
@@ -108,6 +108,7 @@ var n = class {
|
|
|
108
108
|
return t.content instanceof Blob ? t.content : typeof t.content == "string" ? new Blob([t.content], { type: "text/plain" }) : new Blob();
|
|
109
109
|
}
|
|
110
110
|
async downloadAndSave(e, t) {
|
|
111
|
+
if (typeof document > "u") throw Error("downloadAndSave() is only available in browser environments. Use downloadAsBlob() or downloadAsText() in Node.js.");
|
|
111
112
|
let n = await this.downloadAsBlob(e), r = URL.createObjectURL(n), i = document.createElement("a");
|
|
112
113
|
i.href = r, i.download = t || e.split("/").pop() || "download", document.body.appendChild(i), i.click(), document.body.removeChild(i), URL.revokeObjectURL(r);
|
|
113
114
|
}
|
package/dist/node_modules/@openhands/typescript-client/dist/workspace/remote-workspace.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remote-workspace.js","names":[],"sources":["../../../../../../node_modules/@openhands/typescript-client/dist/workspace/remote-workspace.js"],"sourcesContent":["/**\n * Remote workspace implementation for executing commands and file operations\n *\n * This implements the IWorkspace interface by connecting to a remote OpenHands\n * agent server. It mirrors the Python SDK's RemoteWorkspace class.\n */\nimport { BashClient } from '../client/bash-client.js';\nimport { HttpClient } from '../client/http-client.js';\n/**\n * Remote workspace implementation that connects to an OpenHands agent server.\n *\n * RemoteWorkspace provides access to a sandboxed environment running on a remote\n * OpenHands agent server. This is the recommended approach for production deployments\n * as it provides better isolation and security.\n */\nexport class RemoteWorkspace {\n constructor(options) {\n this.host = options.host.replace(/\\/$/, '');\n this.workingDir = options.workingDir;\n this.apiKey = options.apiKey;\n this.client = new HttpClient({\n baseUrl: this.host,\n apiKey: this.apiKey,\n timeout: 60000,\n });\n this.bash = new BashClient({\n host: this.host,\n ...(this.apiKey ? { apiKey: this.apiKey } : {}),\n });\n }\n /**\n * Start a workspace static-asset session for a conversation and return the\n * base URL its workspace files are served from.\n *\n * Calls `POST /api/auth/workspace-session` to exchange the workspace's\n * configured `X-Session-API-Key` for an HttpOnly cookie\n * (`oh_workspace_session_key`) scoped to `/api/conversations`. With the\n * cookie set, browsers can embed workspace artifacts directly as\n * `<iframe src>`, `<img src>` or top-level navigations without having to\n * attach the custom `X-Session-API-Key` header — which they cannot do on\n * those request types.\n *\n * The fetch is made with `credentials: 'include'` so the browser persists\n * the `Set-Cookie` response even when the agent server lives on a different\n * origin from the embedding page (e.g. canvas + `agent-{id}.example.com`).\n *\n * This is intentionally a workspace-level method rather than a\n * conversation-level one: the static asset server lives on the agent host\n * and consumers (e.g. agent-canvas) often want to embed workspace files\n * before they have a full `RemoteConversation` constructed — they just need\n * a conversation ID.\n *\n * @param conversationId The conversation whose workspace files should be\n * served from the returned URL.\n * @returns The base URL for the workspace static file server, including a\n * trailing slash (e.g. `https://host/api/conversations/{id}/workspace/`),\n * suitable for joining a relative path onto.\n */\n async startWorkspaceSession(conversationId) {\n await this.client.post('/api/auth/workspace-session', undefined, {\n credentials: 'include',\n });\n return `${this.host}/api/conversations/${conversationId}/workspace/`;\n }\n async deleteWorkspaceSession() {\n await this.client.delete('/api/auth/workspace-session', {\n credentials: 'include',\n acceptableStatusCodes: new Set([204]),\n });\n }\n async executeCommand(command, cwd, timeout = 30.0) {\n const payload = {\n command,\n timeout: Math.floor(timeout),\n };\n if (cwd) {\n payload.cwd = cwd;\n }\n const response = await this.client.post('/api/bash/execute_bash_command', payload, {\n timeout: (timeout + 10) * 1000,\n });\n const bashOutput = response.data;\n return {\n command,\n exit_code: bashOutput.exit_code ?? 0,\n stdout: bashOutput.stdout || '',\n stderr: bashOutput.stderr || '',\n timeout_occurred: false,\n };\n }\n async fileUpload(content, destinationPath, fileName) {\n const formData = new FormData();\n let blob;\n let finalFileName;\n if (content instanceof File) {\n blob = content;\n finalFileName = fileName || content.name;\n }\n else if (content instanceof Blob) {\n blob = content;\n finalFileName = fileName || 'blob-file';\n }\n else {\n blob = new Blob([content], { type: 'text/plain' });\n finalFileName = fileName || 'text-file.txt';\n }\n formData.append('file', blob, finalFileName);\n const response = await this.client.request({\n method: 'POST',\n url: '/api/file/upload',\n params: { path: destinationPath },\n data: formData,\n timeout: 60000,\n });\n const resultData = response.data;\n return {\n success: resultData.success ?? true,\n source_path: finalFileName,\n destination_path: destinationPath,\n file_size: resultData.file_size,\n error: resultData.error,\n };\n }\n async fileDownload(sourcePath) {\n const response = await this.client.get('/api/file/download', {\n params: { path: sourcePath },\n timeout: 60000,\n });\n let content;\n let fileSize;\n if (typeof response.data === 'string') {\n content = response.data;\n fileSize = new Blob([response.data]).size;\n }\n else if (response.data instanceof ArrayBuffer) {\n content = new Blob([response.data]);\n fileSize = response.data.byteLength;\n }\n else if (response.data instanceof Blob) {\n content = response.data;\n fileSize = response.data.size;\n }\n else {\n const stringData = JSON.stringify(response.data);\n content = stringData;\n fileSize = new Blob([stringData]).size;\n }\n return {\n success: true,\n source_path: sourcePath,\n content,\n file_size: fileSize,\n };\n }\n async gitChanges(path, options = {}) {\n const params = { path };\n if (options.ref !== undefined) {\n params.ref = options.ref;\n }\n try {\n const response = await this.client.get('/api/git/changes', {\n params,\n });\n return response.data;\n }\n catch (error) {\n throw new Error(`Failed to get git changes: ${error instanceof Error ? error.message : String(error)}`, { cause: error });\n }\n }\n async gitDiff(path, options = {}) {\n const params = { path };\n if (options.ref !== undefined) {\n params.ref = options.ref;\n }\n try {\n const response = await this.client.get('/api/git/diff', {\n params,\n });\n return response.data;\n }\n catch (error) {\n throw new Error(`Failed to get git diff: ${error instanceof Error ? error.message : String(error)}`, { cause: error });\n }\n }\n /**\n * Convenience method to upload text content as a file\n */\n async uploadText(text, destinationPath, fileName) {\n return this.fileUpload(text, destinationPath, fileName);\n }\n /**\n * Convenience method to upload a File object (from file input)\n */\n async uploadFileObject(file, destinationPath) {\n return this.fileUpload(file, destinationPath);\n }\n /**\n * Convenience method to download file content as text\n */\n async downloadAsText(sourcePath) {\n const result = await this.fileDownload(sourcePath);\n if (!result.success) {\n throw new Error(result.error || 'Download failed');\n }\n if (typeof result.content === 'string') {\n return result.content;\n }\n else if (result.content instanceof Blob) {\n return await result.content.text();\n }\n return '';\n }\n /**\n * Convenience method to download file content as a Blob\n */\n async downloadAsBlob(sourcePath) {\n const result = await this.fileDownload(sourcePath);\n if (!result.success) {\n throw new Error(result.error || 'Download failed');\n }\n if (result.content instanceof Blob) {\n return result.content;\n }\n else if (typeof result.content === 'string') {\n return new Blob([result.content], { type: 'text/plain' });\n }\n return new Blob();\n }\n /**\n * Convenience method to trigger a browser download of a file\n */\n async downloadAndSave(sourcePath, saveAsFileName) {\n const blob = await this.downloadAsBlob(sourcePath);\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = saveAsFileName || sourcePath.split('/').pop() || 'download';\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n }\n close() {\n this.bash.close();\n this.client.close();\n }\n}\n//# sourceMappingURL=remote-workspace.js.map"],"x_google_ignoreList":[0],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"remote-workspace.js","names":[],"sources":["../../../../../../node_modules/@openhands/typescript-client/dist/workspace/remote-workspace.js"],"sourcesContent":["/**\n * Remote workspace implementation for executing commands and file operations\n *\n * This implements the IWorkspace interface by connecting to a remote OpenHands\n * agent server. It mirrors the Python SDK's RemoteWorkspace class.\n */\nimport { BashClient } from '../client/bash-client.js';\nimport { createRuntimeHttpClients } from '../client/runtime-transport.js';\n/**\n * Remote workspace implementation that connects to an OpenHands agent server.\n *\n * RemoteWorkspace provides access to a sandboxed environment running on a remote\n * OpenHands agent server. This is the recommended approach for production deployments\n * as it provides better isolation and security.\n */\nexport class RemoteWorkspace {\n constructor(options) {\n this.host = options.host.replace(/\\/$/, '');\n this.workingDir = options.workingDir;\n this.apiKey = options.apiKey;\n this.conversationId = options.conversationId;\n const { serverClient, runtimeClient } = createRuntimeHttpClients(options);\n this.serverClient = serverClient;\n this.client = runtimeClient;\n this.bash = new BashClient({\n host: this.host,\n conversationId: this.conversationId,\n ...(this.apiKey ? { apiKey: this.apiKey } : {}),\n });\n }\n /**\n * Start a workspace static-asset session for a conversation and return the\n * base URL its workspace files are served from.\n *\n * Calls `POST /api/auth/workspace-session` to exchange the workspace's\n * configured `X-Session-API-Key` for an HttpOnly cookie\n * (`oh_workspace_session_key`) scoped to `/api/conversations`. With the\n * cookie set, browsers can embed workspace artifacts directly as\n * `<iframe src>`, `<img src>` or top-level navigations without having to\n * attach the custom `X-Session-API-Key` header — which they cannot do on\n * those request types.\n *\n * The fetch is made with `credentials: 'include'` so the browser persists\n * the `Set-Cookie` response even when the agent server lives on a different\n * origin from the embedding page (e.g. canvas + `agent-{id}.example.com`).\n *\n * This is intentionally a workspace-level method rather than a\n * conversation-level one: the static asset server lives on the agent host\n * and consumers (e.g. agent-canvas) often want to embed workspace files\n * before they have a full `RemoteConversation` constructed — they just need\n * a conversation ID.\n *\n * @param conversationId The conversation whose workspace files should be\n * served from the returned URL.\n * @returns The base URL for the workspace static file server, including a\n * trailing slash (e.g. `https://host/api/conversations/{id}/workspace/`),\n * suitable for joining a relative path onto.\n */\n async startWorkspaceSession(conversationId) {\n if (this.conversationId !== undefined && this.conversationId !== conversationId) {\n throw new Error('Workspace session must belong to the selected runtime');\n }\n await this.serverClient.post('/api/auth/workspace-session', undefined, {\n credentials: 'include',\n });\n return `${this.host}/api/conversations/${encodeURIComponent(conversationId)}/workspace/`;\n }\n async deleteWorkspaceSession() {\n await this.serverClient.delete('/api/auth/workspace-session', {\n credentials: 'include',\n acceptableStatusCodes: new Set([204]),\n });\n }\n async executeCommand(command, cwd, timeout = 30.0) {\n const payload = {\n command,\n timeout: Math.floor(timeout),\n };\n if (cwd) {\n payload.cwd = cwd;\n }\n const response = await this.client.post('/api/bash/execute_bash_command', payload, {\n timeout: (timeout + 10) * 1000,\n });\n const bashOutput = response.data;\n return {\n command,\n exit_code: bashOutput.exit_code ?? 0,\n stdout: bashOutput.stdout || '',\n stderr: bashOutput.stderr || '',\n timeout_occurred: false,\n };\n }\n async fileUpload(content, destinationPath, fileName) {\n const formData = new FormData();\n let blob;\n let finalFileName;\n if (content instanceof File) {\n blob = content;\n finalFileName = fileName || content.name;\n }\n else if (content instanceof Blob) {\n blob = content;\n finalFileName = fileName || 'blob-file';\n }\n else {\n blob = new Blob([content], { type: 'text/plain' });\n finalFileName = fileName || 'text-file.txt';\n }\n formData.append('file', blob, finalFileName);\n const response = await this.client.request({\n method: 'POST',\n url: '/api/file/upload',\n params: { path: destinationPath },\n data: formData,\n timeout: 60000,\n });\n const resultData = response.data;\n return {\n success: resultData.success ?? true,\n source_path: finalFileName,\n destination_path: destinationPath,\n file_size: resultData.file_size,\n error: resultData.error,\n };\n }\n async fileDownload(sourcePath) {\n const response = await this.client.get('/api/file/download', {\n params: { path: sourcePath },\n timeout: 60000,\n });\n let content;\n let fileSize;\n if (typeof response.data === 'string') {\n content = response.data;\n fileSize = new Blob([response.data]).size;\n }\n else if (response.data instanceof ArrayBuffer) {\n content = new Blob([response.data]);\n fileSize = response.data.byteLength;\n }\n else if (response.data instanceof Blob) {\n content = response.data;\n fileSize = response.data.size;\n }\n else {\n const stringData = JSON.stringify(response.data);\n content = stringData;\n fileSize = new Blob([stringData]).size;\n }\n return {\n success: true,\n source_path: sourcePath,\n content,\n file_size: fileSize,\n };\n }\n async gitChanges(path, options = {}) {\n const params = { path };\n if (options.ref !== undefined) {\n params.ref = options.ref;\n }\n try {\n const response = await this.client.get('/api/git/changes', {\n params,\n });\n return response.data;\n }\n catch (error) {\n throw new Error(`Failed to get git changes: ${error instanceof Error ? error.message : String(error)}`, { cause: error });\n }\n }\n async gitDiff(path, options = {}) {\n const params = { path };\n if (options.ref !== undefined) {\n params.ref = options.ref;\n }\n try {\n const response = await this.client.get('/api/git/diff', {\n params,\n });\n return response.data;\n }\n catch (error) {\n throw new Error(`Failed to get git diff: ${error instanceof Error ? error.message : String(error)}`, { cause: error });\n }\n }\n /**\n * Convenience method to upload text content as a file\n */\n async uploadText(text, destinationPath, fileName) {\n return this.fileUpload(text, destinationPath, fileName);\n }\n /**\n * Convenience method to upload a File object (from file input)\n */\n async uploadFileObject(file, destinationPath) {\n return this.fileUpload(file, destinationPath);\n }\n /**\n * Convenience method to download file content as text\n */\n async downloadAsText(sourcePath) {\n const result = await this.fileDownload(sourcePath);\n if (!result.success) {\n throw new Error(result.error || 'Download failed');\n }\n if (typeof result.content === 'string') {\n return result.content;\n }\n else if (result.content instanceof Blob) {\n return await result.content.text();\n }\n return '';\n }\n /**\n * Convenience method to download file content as a Blob\n */\n async downloadAsBlob(sourcePath) {\n const result = await this.fileDownload(sourcePath);\n if (!result.success) {\n throw new Error(result.error || 'Download failed');\n }\n if (result.content instanceof Blob) {\n return result.content;\n }\n else if (typeof result.content === 'string') {\n return new Blob([result.content], { type: 'text/plain' });\n }\n return new Blob();\n }\n /**\n * Convenience method to trigger a browser download of a file\n * @throws Error in non-browser environments; use downloadAsBlob() or downloadAsText() instead.\n */\n async downloadAndSave(sourcePath, saveAsFileName) {\n if (typeof document === 'undefined') {\n throw new Error('downloadAndSave() is only available in browser environments. ' +\n 'Use downloadAsBlob() or downloadAsText() in Node.js.');\n }\n const blob = await this.downloadAsBlob(sourcePath);\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = saveAsFileName || sourcePath.split('/').pop() || 'download';\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n }\n close() {\n this.bash.close();\n this.client.close();\n }\n}\n//# sourceMappingURL=remote-workspace.js.map"],"x_google_ignoreList":[0],"mappings":"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"}
|