@openhands/agent-canvas 1.2.0 → 1.3.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/{Trans-De9RwQhA.js → Trans-DY6toRDu.js} +1 -1
- package/build/assets/{acp-providers-D_D8VUpP.js → acp-providers-Djl6vNn-.js} +1 -1
- package/build/assets/active-backend-context-B3umL5R-.js +1 -0
- package/build/assets/{add-backend-modal-DzuB9zlG.js → add-backend-modal-DljoP9lc.js} +1 -1
- package/build/assets/{agent-profiles-settings-BfAwTshW.js → agent-profiles-settings-BJMmTZgv.js} +1 -1
- package/build/assets/{agent-server-conversation-service.api-DfH2k6Sx.js → agent-server-conversation-service.api-D_ZvtJjG.js} +3 -3
- package/build/assets/agent-settings-BVVFzBWS.js +1 -0
- package/build/assets/{agent-settings-DjVlKgaP.js → agent-settings-lUknCeaF.js} +1 -1
- package/build/assets/{alert-banner-BW0wRYw6.js → alert-banner-Bpf2NQJq.js} +1 -1
- package/build/assets/{api-key-entry-screen-O8gS-fnF.js → api-key-entry-screen-CWEHcPJA.js} +1 -1
- package/build/assets/{app-settings-SlZvaXlk.js → app-settings-Dj90qosy.js} +1 -1
- package/build/assets/automation-detail-CXJU0_gF.js +2 -0
- package/build/assets/automation-export-FWY9LPsG.js +2 -0
- package/build/assets/automations-list-DDGBkWLC.js +1 -0
- package/build/assets/{back-nav-button-BYmxFxGt.js → back-nav-button-CUS2mi-U.js} +1 -1
- package/build/assets/{backend-form-modal-D2EDGVAc.js → backend-form-modal-DSbrafX2.js} +1 -1
- package/build/assets/{backend-synced-settings-badge-6OCwIuLY.js → backend-synced-settings-badge-CanzmG12.js} +1 -1
- package/build/assets/{base-modal-CC5Pp8CF.js → base-modal-BuF2f0YL.js} +1 -1
- package/build/assets/{brand-button-DKPMEKcW.js → brand-button-vMVuyDXu.js} +1 -1
- package/build/assets/{browser-B39N74jU.js → browser-BifzWIBd.js} +1 -1
- package/build/assets/{browser-tab-aiDg7aEn.js → browser-tab-CkkqJnqw.js} +1 -1
- package/build/assets/{chat-send-button-DxuZIoW8.js → chat-send-button-B_jc5z5C.js} +1 -1
- package/build/assets/{circle-plus-check-toggle-T3eAIuPQ.js → circle-plus-check-toggle-C5YxjxvI.js} +1 -1
- package/build/assets/{color-themes-Dd1sO5U6.js → color-themes-DPBzNtVg.js} +3 -3
- package/build/assets/{combobox-caret-CLGvOs32.js → combobox-caret-DoObzqf4.js} +1 -1
- package/build/assets/{command-menu-DKrLCRla.js → command-menu-D-JV3Wqm.js} +1 -1
- package/build/assets/{condenser-settings-BhxvlfoY.js → condenser-settings-30cX9SK6.js} +1 -1
- package/build/assets/{confirmation-modal-BK1F0A68.js → confirmation-modal-BGLu6XJN.js} +1 -1
- package/build/assets/{context-menu-list-item-DBFzplWW.js → context-menu-list-item-BD5_EaKN.js} +1 -1
- package/build/assets/conversation-BltULtFA.js +89 -0
- package/build/assets/conversation-e0a0_X4S.js +1 -0
- package/build/assets/conversation-panel-Cr9_ZGI-.js +1 -0
- package/build/assets/{conversation-service.api-Ch9kR9aE.js → conversation-service.api-DQaKzIRj.js} +1 -1
- package/build/assets/{conversation-tab-empty-state-m8IUkfMj.js → conversation-tab-empty-state-B2dDYEwf.js} +1 -1
- package/build/assets/{copy-to-clipboard-button-Aj9wFmt2.js → copy-to-clipboard-button-CaR52OnA.js} +1 -1
- package/build/assets/declaration-gq8V5eTU.js +1 -0
- package/build/assets/{device-verify-B5YCrvSu.js → device-verify-BsznkV-a.js} +1 -1
- package/build/assets/{dropdown-classes-CgQ45JmQ.js → dropdown-classes-DJSXeLqc.js} +1 -1
- package/build/assets/{ellipsis-button-1BV9Sga8.js → ellipsis-button-C5Z-tPFp.js} +1 -1
- package/build/assets/{entry.client-BgWj9jL_.js → entry.client-JixNvFrr.js} +2 -2
- package/build/assets/{enum-filter-dropdown-DCITiYVi.js → enum-filter-dropdown-DXbVwiNZ.js} +1 -1
- package/build/assets/{environment-switch-overlay-DUnKILNH.js → environment-switch-overlay-DZQfRGTx.js} +1 -1
- package/build/assets/{extensions-hub-MtC8lK3A.js → extensions-hub-DfvgqzTc.js} +1 -1
- package/build/assets/{extensions-navigation-BtV14oQL.js → extensions-navigation-D9i0DL62.js} +1 -1
- package/build/assets/files-tab-DDtEJcGE.js +1 -0
- package/build/assets/{form-control-classes-9rkU4usZ.js → form-control-classes-ChpNBe9n.js} +1 -1
- package/build/assets/{git-provider-icon-CGU7_KiU.js → git-provider-icon-BjkecAuV.js} +1 -1
- package/build/assets/home-BCKWpKpf.js +1 -0
- package/build/assets/{install-server-modal-J_eQ6lhG.js → install-server-modal-BIugLhVB.js} +1 -1
- package/build/assets/{launch-DamfAY5L.js → launch-BgIlZLSX.js} +1 -1
- package/build/assets/lesson-plan-DgpP80mJ.js +4 -0
- package/build/assets/{llm-not-configured-banner-DTrLsVr_.js → llm-not-configured-banner-BlX8NifC.js} +4 -4
- package/build/assets/llm-settings-DJmbryaE.js +1 -0
- package/build/assets/{llm-settings-BgSFkbHC.js → llm-settings-kU5v0H1Z.js} +1 -1
- package/build/assets/{loading-spinner-DHAIPZkP.js → loading-spinner-BLdswi6q.js} +1 -1
- package/build/assets/{manage-backends-modal-BUzj5_Lq.js → manage-backends-modal-C8FJQIZR.js} +1 -1
- package/build/assets/manifest-56d40d7c.js +1 -0
- package/build/assets/{markdown-renderer-D8mayGjI.js → markdown-renderer-DMT7Zkpd.js} +1 -1
- package/build/assets/{mcp-DvqJYDbz.js → mcp-CHkklDMv.js} +1 -1
- package/build/assets/{messages-C4KEFkPk.js → messages-B3RugH7P.js} +11 -11
- package/build/assets/{modal-body-Dcu5McCa.js → modal-body-DouOE5KH.js} +1 -1
- package/build/assets/{modal-classes-DPqxSyuP.js → modal-classes-Cf-4tbHz.js} +1 -1
- package/build/assets/{modal-close-button-CTCX4nCH.js → modal-close-button-B6CfxxJj.js} +1 -1
- package/build/assets/{model-selector-VDHBytb6.js → model-selector-BOj1wBlq.js} +1 -1
- package/build/assets/onboarding-DYhDxmI9.js +1 -0
- package/build/assets/{onboarding-modal-CGHPoMp7.js → onboarding-modal-CP_WxDC9.js} +1 -1
- package/build/assets/{option-service.api-Dz7Eomnx.js → option-service.api-C0tYT4-r.js} +1 -1
- package/build/assets/{path-utils-CBaRYg35.js → path-utils-DWcgCGen.js} +1 -1
- package/build/assets/{plan-components-j9X4AxYM.js → plan-components-CcCBmCzW.js} +1 -1
- package/build/assets/{planner-tab-G4j36bJk.js → planner-tab-CCqdXxkL.js} +1 -1
- package/build/assets/providers-BxCuC9bZ.js +1 -0
- package/build/assets/recommended-automations-launcher-CVEF_1pc.js +58 -0
- package/build/assets/root-V8fkplMy.css +1 -0
- package/build/assets/root-layout-CttG_lQi.js +2 -0
- package/build/assets/{root-S6CfVoNm.js → root-uJ2t9rCQ.js} +2 -2
- package/build/assets/{runtime-waiting-state-DkzLgvMn.js → runtime-waiting-state-BsXLElvN.js} +1 -1
- package/build/assets/{schema-field-DwUzlw6b.js → schema-field-xUr6rDd6.js} +1 -1
- package/build/assets/{sdk-section-page-BUXONTx6.js → sdk-section-page-CbLrVUa3.js} +1 -1
- package/build/assets/{sdk-settings-schema-BjBkMHzZ.js → sdk-settings-schema-Cv7M9eSe.js} +1 -1
- package/build/assets/{secrets-settings-ZxyfRBgx.js → secrets-settings-DxTx9HgU.js} +1 -1
- package/build/assets/{segmented-toggle-Cen5AMUc.js → segmented-toggle-DyQqPhoD.js} +1 -1
- package/build/assets/{settings-Bx6vn-g8.js → settings-DnlfS09K.js} +1 -1
- package/build/assets/{settings-dropdown-input-xzoZwgUe.js → settings-dropdown-input-BjunGXJb.js} +1 -1
- package/build/assets/{settings-index-D4SM26d5.js → settings-index-BjeuYFFa.js} +1 -1
- package/build/assets/{settings-input-DYs7t3oK.js → settings-input-bD6npsDm.js} +1 -1
- package/build/assets/{settings-list-classes-DvQr5jVS.js → settings-list-classes-Dp_OgzN0.js} +1 -1
- package/build/assets/{settings-modal-BoC8oMlg.js → settings-modal-DfTcL-mV.js} +1 -1
- package/build/assets/settings-service.api-K4ncGlBv.js +1 -0
- package/build/assets/{settings-switch-C2N2xqEb.js → settings-switch-5cuxl8Dc.js} +1 -1
- package/build/assets/{shared-conversation-DMiaQFsj.js → shared-conversation-DWtBkJv7.js} +1 -1
- package/build/assets/{sidebar-layout-BtpUSN3j.js → sidebar-layout-DuzJMMw-.js} +1 -1
- package/build/assets/{sidebar-mobile-menu-toggle-CaV3tQFF.js → sidebar-mobile-menu-toggle-CMmAYkh8.js} +1 -1
- package/build/assets/{sidebar-nav-link-CIB3NBRW.js → sidebar-nav-link-5AlTT5-j.js} +1 -1
- package/build/assets/{skill-card-pill-row-D2bUe2kB.js → skill-card-pill-row-eTIkE4nz.js} +1 -1
- package/build/assets/{skills-plugins-D2WkrXkr.js → skills-plugins-BJ040luO.js} +1 -1
- package/build/assets/{skills-settings-CZGVOp_t.js → skills-settings-BYn4-AQQ.js} +1 -1
- package/build/assets/{styled-tooltip-DsKsFjuq.js → styled-tooltip-CgX2oRaK.js} +1 -1
- package/build/assets/{task-list-tab-BAThr9Ex.js → task-list-tab-0k9PhuqO.js} +1 -1
- package/build/assets/{terminal-B0aL_iDZ.js → terminal-BsGcSpRS.js} +1 -1
- package/build/assets/{toggle-switch-DBlOOzBr.js → toggle-switch-2j5wwR85.js} +1 -1
- package/build/assets/{typography-YGPBGzOG.js → typography-D8mHDeNG.js} +1 -1
- package/build/assets/{use-acp-credential-form-rzaqkJ1n.js → use-acp-credential-form-EtnbtYt0.js} +1 -1
- package/build/assets/{use-activate-agent-profile-DY0txItX.js → use-activate-agent-profile-WaAZYz4E.js} +1 -1
- package/build/assets/{use-active-agent-profile-Cp5AFONR.js → use-active-agent-profile-CYY3vGar.js} +1 -1
- package/build/assets/{use-active-conversation-DvcFBqFe.js → use-active-conversation-D-r929nx.js} +1 -1
- package/build/assets/{use-agent-profiles-DnH16_Vm.js → use-agent-profiles-DEAMFp-W.js} +1 -1
- package/build/assets/{use-agent-state-BvRcEzY4.js → use-agent-state-DijdVAQ0.js} +1 -1
- package/build/assets/{use-backends-health-e-Ull4wz.js → use-backends-health-DkC7tKkC.js} +1 -1
- package/build/assets/{use-can-manage-org-profiles-OIhplvQ0.js → use-can-manage-org-profiles-BEo0peGn.js} +1 -1
- package/build/assets/{use-cloud-current-user-id-ekU7UXDT.js → use-cloud-current-user-id-Dm99wXp2.js} +1 -1
- package/build/assets/{use-config-Dwf5gla-.js → use-config-CHzNIHpv.js} +1 -1
- package/build/assets/{use-create-conversation-CvAXfA3T.js → use-create-conversation-CTsvZ96U.js} +1 -1
- package/build/assets/{use-create-secret-BKeXCo__.js → use-create-secret-D5O5qdWC.js} +1 -1
- package/build/assets/{use-event-store-YSOxy9FC.js → use-event-store-DjgU4wfO.js} +1 -1
- package/build/assets/{use-handle-plan-click-cAXS-Hft.js → use-handle-plan-click-Mn_SNTCh.js} +1 -1
- package/build/assets/{use-llm-profiles-BcLibtGb.js → use-llm-profiles-BMhPDlwQ.js} +1 -1
- package/build/assets/use-runtime-is-ready-CC-KrLKe.js +1 -0
- package/build/assets/{use-save-agent-profile-DFjxHhNx.js → use-save-agent-profile-CLMmbx_X.js} +1 -1
- package/build/assets/{use-save-settings-5xPYpSQM.js → use-save-settings-D1HoCDbn.js} +1 -1
- package/build/assets/{use-settings-B07msZ2Z.js → use-settings-BReAMxCG.js} +1 -1
- package/build/assets/{use-settings-nav-items-CswsOEyw.js → use-settings-nav-items-xe1YgLnE.js} +1 -1
- package/build/assets/{use-skills-Aoaoq_ei.js → use-skills-Dqo-pDDx.js} +1 -1
- package/build/assets/{use-task-list-CmWGElgb.js → use-task-list-AVBLbbcR.js} +1 -1
- package/build/assets/{use-tracking-CqODdfO4.js → use-tracking-2ZwQwpg_.js} +1 -1
- package/build/assets/{use-user-conversation-BPHQ-dm-.js → use-user-conversation-OAfenBRG.js} +1 -1
- package/build/assets/{useTranslation-Cgy4JA_g.js → useTranslation-CDRCKC9-.js} +1 -1
- package/build/assets/{utils-CE0lDWtb.js → utils-D3U3rlqr.js} +1 -1
- package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~launch~skills-settings~automations-~ki5qnp0d-DJHl5b-B.js → vendor~root-layout~home~conversation-panel~conversation~launch~skills-settings~automations-~ki5qnp0d-rV6d1Iv_.js} +267 -27
- package/build/assets/vendor~root-layout~home~mcp~automations-list~onboarding-modal-CXyYYvYh.js +1 -0
- package/build/assets/{verification-settings-DZQ-JvKH.js → verification-settings-DnXS6VWv.js} +1 -1
- package/build/index.html +4 -4
- package/build/locales/ar/openhands.json +24 -0
- package/build/locales/ca/openhands.json +24 -0
- package/build/locales/de/openhands.json +24 -0
- package/build/locales/en/openhands.json +24 -0
- package/build/locales/es/openhands.json +24 -0
- package/build/locales/fr/openhands.json +24 -0
- package/build/locales/it/openhands.json +24 -0
- package/build/locales/ja/openhands.json +24 -0
- package/build/locales/ko-KR/openhands.json +24 -0
- package/build/locales/no/openhands.json +24 -0
- package/build/locales/pt/openhands.json +24 -0
- package/build/locales/tr/openhands.json +24 -0
- package/build/locales/uk/openhands.json +24 -0
- package/build/locales/zh-CN/openhands.json +24 -0
- package/build/locales/zh-TW/openhands.json +24 -0
- package/config/defaults.json +4 -4
- package/dist/api/automation-service/automation-service.api.d.ts +2 -1
- package/dist/api/event-service/event-service.api.cjs +1 -1
- package/dist/api/event-service/event-service.api.cjs.map +1 -1
- package/dist/api/event-service/event-service.api.js +1 -1
- package/dist/api/event-service/event-service.api.js.map +1 -1
- package/dist/api/event-service/event-service.types.d.ts +6 -0
- 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.js +2 -2
- package/dist/api/git-service/agent-server-git-service.api.js.map +1 -1
- package/dist/api/git-service/git-service.api.cjs +1 -1
- package/dist/api/git-service/git-service.api.cjs.map +1 -1
- package/dist/api/git-service/git-service.api.js +2 -2
- package/dist/api/git-service/git-service.api.js.map +1 -1
- package/dist/components/conversation-events/chat/event-thought-helpers.cjs +1 -1
- package/dist/components/conversation-events/chat/event-thought-helpers.js +1 -1
- package/dist/components/features/automations/automation-card.d.ts +2 -1
- package/dist/components/features/automations/automation-group.d.ts +2 -1
- package/dist/components/features/automations/automation-list-row.d.ts +2 -1
- package/dist/components/features/automations/build-automation-menu-items.d.ts +2 -1
- package/dist/components/features/automations/detail/detail-header.d.ts +3 -1
- package/dist/components/features/automations/import-automation-modal.d.ts +10 -0
- package/dist/components/features/conversation/conversation-name-context-menu.cjs +1 -1
- package/dist/components/features/conversation/conversation-name-context-menu.cjs.map +1 -1
- package/dist/components/features/conversation/conversation-name-context-menu.d.ts +2 -1
- package/dist/components/features/conversation/conversation-name-context-menu.js +74 -63
- package/dist/components/features/conversation/conversation-name-context-menu.js.map +1 -1
- package/dist/components/features/conversation/conversation-name.cjs +1 -1
- package/dist/components/features/conversation/conversation-name.cjs.map +1 -1
- package/dist/components/features/conversation/conversation-name.js +73 -61
- package/dist/components/features/conversation/conversation-name.js.map +1 -1
- package/dist/components/features/conversation/transcript-export-modal.cjs +2 -0
- package/dist/components/features/conversation/transcript-export-modal.cjs.map +1 -0
- package/dist/components/features/conversation/transcript-export-modal.d.ts +10 -0
- package/dist/components/features/conversation/transcript-export-modal.js +140 -0
- package/dist/components/features/conversation/transcript-export-modal.js.map +1 -0
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.js +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.js.map +1 -1
- package/dist/components/features/home/shared/dropdown-item.cjs +1 -1
- package/dist/components/features/home/shared/dropdown-item.cjs.map +1 -1
- package/dist/components/features/home/shared/dropdown-item.d.ts +7 -1
- package/dist/components/features/home/shared/dropdown-item.js +2 -1
- package/dist/components/features/home/shared/dropdown-item.js.map +1 -1
- package/dist/components/features/home/shared/generic-dropdown-menu.cjs +1 -1
- package/dist/components/features/home/shared/generic-dropdown-menu.cjs.map +1 -1
- package/dist/components/features/home/shared/generic-dropdown-menu.d.ts +8 -1
- package/dist/components/features/home/shared/generic-dropdown-menu.js +18 -10
- package/dist/components/features/home/shared/generic-dropdown-menu.js.map +1 -1
- package/dist/components/features/home/workspace-dropdown/workspace-dropdown.d.ts +11 -2
- package/dist/config/defaults.cjs +1 -1
- package/dist/config/defaults.cjs.map +1 -1
- package/dist/config/defaults.js +4 -4
- package/dist/config/defaults.js.map +1 -1
- package/dist/hooks/query/use-automations.d.ts +2 -1
- package/dist/hooks/query/use-resolved-workspaces.cjs +1 -1
- package/dist/hooks/query/use-resolved-workspaces.cjs.map +1 -1
- package/dist/hooks/query/use-resolved-workspaces.d.ts +9 -1
- package/dist/hooks/query/use-resolved-workspaces.js +1 -0
- package/dist/hooks/query/use-resolved-workspaces.js.map +1 -1
- package/dist/hooks/query/use-workspace-file-content.cjs +1 -1
- package/dist/hooks/query/use-workspace-file-content.cjs.map +1 -1
- package/dist/hooks/query/use-workspace-file-content.js +61 -55
- package/dist/hooks/query/use-workspace-file-content.js.map +1 -1
- package/dist/hooks/query/use-workspace-files.cjs +1 -1
- package/dist/hooks/query/use-workspace-files.cjs.map +1 -1
- package/dist/hooks/query/use-workspace-files.d.ts +11 -4
- package/dist/hooks/query/use-workspace-files.js +39 -18
- package/dist/hooks/query/use-workspace-files.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.d.ts +9 -0
- package/dist/hooks/use-auto-refresh-files-on-edit.js +15 -11
- package/dist/hooks/use-auto-refresh-files-on-edit.js.map +1 -1
- package/dist/hooks/use-tracking.cjs +1 -1
- package/dist/hooks/use-tracking.cjs.map +1 -1
- package/dist/hooks/use-tracking.d.ts +7 -0
- package/dist/hooks/use-tracking.js +9 -0
- package/dist/hooks/use-tracking.js.map +1 -1
- package/dist/i18n/declaration.cjs +1 -1
- package/dist/i18n/declaration.cjs.map +1 -1
- package/dist/i18n/declaration.d.ts +24 -0
- package/dist/i18n/declaration.js +1 -1
- package/dist/i18n/declaration.js.map +1 -1
- package/dist/i18n/translation.cjs +1 -1
- package/dist/i18n/translation.cjs.map +1 -1
- package/dist/i18n/translation.js +408 -0
- package/dist/i18n/translation.js.map +1 -1
- package/dist/locales/ar/openhands.json +24 -0
- package/dist/locales/ca/openhands.json +24 -0
- package/dist/locales/de/openhands.json +24 -0
- package/dist/locales/en/openhands.json +24 -0
- package/dist/locales/es/openhands.json +24 -0
- package/dist/locales/fr/openhands.json +24 -0
- package/dist/locales/it/openhands.json +24 -0
- package/dist/locales/ja/openhands.json +24 -0
- package/dist/locales/ko-KR/openhands.json +24 -0
- package/dist/locales/no/openhands.json +24 -0
- package/dist/locales/pt/openhands.json +24 -0
- package/dist/locales/tr/openhands.json +24 -0
- package/dist/locales/uk/openhands.json +24 -0
- package/dist/locales/zh-CN/openhands.json +24 -0
- package/dist/locales/zh-TW/openhands.json +24 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/atlassian.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/atlassian.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/atlassian.js +70 -3
- package/dist/node_modules/@openhands/extensions/integrations/catalog/atlassian.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/datadog.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/datadog.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/datadog.js +27 -2
- package/dist/node_modules/@openhands/extensions/integrations/catalog/datadog.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/superhuman-mail.cjs +2 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/superhuman-mail.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/superhuman-mail.js +33 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/superhuman-mail.js.map +1 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog-index.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog-index.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog-index.js +48 -46
- package/dist/node_modules/@openhands/extensions/integrations/catalog-index.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/skills/index.cjs +267 -27
- package/dist/node_modules/@openhands/extensions/skills/index.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/skills/index.js +36 -30
- package/dist/node_modules/@openhands/extensions/skills/index.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/files-tab.cjs +1 -1
- package/dist/routes/files-tab.js +10 -10
- package/dist/themes/color-themes.cjs +3 -3
- package/dist/themes/color-themes.cjs.map +1 -1
- package/dist/themes/color-themes.d.ts +13 -2
- package/dist/themes/color-themes.js +2 -2
- package/dist/themes/color-themes.js.map +1 -1
- package/dist/types/automation.d.ts +8 -0
- package/dist/utils/custom-toast-handlers.cjs.map +1 -1
- package/dist/utils/custom-toast-handlers.d.ts +1 -0
- package/dist/utils/custom-toast-handlers.js.map +1 -1
- package/dist/utils/mcp-server-name.cjs +1 -1
- package/dist/utils/mcp-server-name.cjs.map +1 -1
- package/dist/utils/mcp-server-name.js +2 -2
- package/dist/utils/mcp-server-name.js.map +1 -1
- package/dist/utils/transcript-export/index.cjs +72 -0
- package/dist/utils/transcript-export/index.cjs.map +1 -0
- package/dist/utils/transcript-export/index.d.ts +10 -0
- package/dist/utils/transcript-export/index.js +302 -0
- package/dist/utils/transcript-export/index.js.map +1 -0
- package/dist/utils/transcript-export/load-complete-events.cjs +2 -0
- package/dist/utils/transcript-export/load-complete-events.cjs.map +1 -0
- package/dist/utils/transcript-export/load-complete-events.d.ts +22 -0
- package/dist/utils/transcript-export/load-complete-events.js +39 -0
- package/dist/utils/transcript-export/load-complete-events.js.map +1 -0
- package/package.json +2 -2
- package/scripts/check-sdk-version-sync.mjs +6 -6
- package/scripts/dev-safe.mjs +2 -2
- package/build/assets/active-backend-context-DRFevVIj.js +0 -1
- package/build/assets/agent-settings-CMMms-0q.js +0 -1
- package/build/assets/automation-detail-CwsNJ9AM.js +0 -2
- package/build/assets/automations-list-B9cPtugh.js +0 -1
- package/build/assets/conversation-B8prFAZF.js +0 -19
- package/build/assets/conversation-DGVDwGn8.js +0 -1
- package/build/assets/conversation-panel-C7DC4Cxx.js +0 -1
- package/build/assets/declaration-B9kpCaYl.js +0 -1
- package/build/assets/edit-automation-modal-BoibW8cd.js +0 -1
- package/build/assets/files-tab-DHqtsKLy.js +0 -1
- package/build/assets/home-BgjWP_UN.js +0 -1
- package/build/assets/lesson-plan-HD886V64.js +0 -4
- package/build/assets/llm-settings-Bkc8C5Bi.js +0 -1
- package/build/assets/manifest-4d6a1552.js +0 -1
- package/build/assets/onboarding-gGIqoxvA.js +0 -1
- package/build/assets/providers-CPoq0VXm.js +0 -1
- package/build/assets/recommended-automations-launcher-CXaEK1rW.js +0 -50
- package/build/assets/root-CxWZUXTQ.css +0 -1
- package/build/assets/root-layout-CvxdHJ6j.js +0 -2
- package/build/assets/settings-service.api-DldkFI1x.js +0 -1
- package/build/assets/use-runtime-is-ready-CBFe69Ew.js +0 -1
- package/build/assets/vendor~root-layout~home~mcp~automations-list~onboarding-modal-L2sdihTY.js +0 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
require(`../../_virtual/_rolldown/runtime.cjs`);var e=(e,t)=>e.timestamp.localeCompare(t.timestamp),t=async(t,n,r)=>{let i=[],a=new Set,o=new Set,s,c,l=!1,u=!1;for(;;){let e=await n({limit:100,sortOrder:`TIMESTAMP_DESC`,strictPagination:!0,...c?{pageId:c}:{},...s?{timestampLt:s}:{}});if(!Array.isArray(e.items))throw Error(`Invalid transcript history response: expected page.items to be an array.`);i.push(...e.items);let t,d=!1;if(e.items.forEach(e=>{a.has(e.id)||(a.add(e.id),d=!0),(!t||e.timestamp<t)&&(t=e.timestamp)}),e.next_page_id){if(o.has(e.next_page_id))throw Error(`Transcript history pagination repeated a page cursor.`);o.add(e.next_page_id),c=e.next_page_id,s=void 0,l=!0;continue}if(l&&!u||e.items.length<100)break;if(r===void 0)throw Error(`Transcript history pagination cannot prove that all events were loaded.`);if(!t||s&&(!d||t>=s))throw Error(`Transcript history pagination did not advance.`);c=void 0,s=t,u=!0}let d=new Map;i.slice().reverse().forEach(e=>{d.has(e.id)||d.set(e.id,e)}),t.forEach(e=>{d.has(e.id)||d.set(e.id,e)});let f=[...d.values()].sort(e);if(r!==void 0&&a.size<r)throw Error(`Transcript history is incomplete: expected ${r} persisted events, received ${a.size}.`);return f};exports.loadCompleteTranscriptEvents=t;
|
|
2
|
+
//# sourceMappingURL=load-complete-events.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-complete-events.cjs","names":[],"sources":["../../../src/utils/transcript-export/load-complete-events.ts"],"sourcesContent":["import type { OpenHandsEvent } from \"#/types/agent-server/core\";\n\nexport const TRANSCRIPT_HISTORY_PAGE_SIZE = 100;\n\ninterface TranscriptEventSearchOptions {\n limit: number;\n sortOrder: \"TIMESTAMP_DESC\";\n pageId?: string;\n timestampLt?: string;\n strictPagination: true;\n}\n\ninterface TranscriptEventPage {\n items: OpenHandsEvent[];\n next_page_id?: string | null;\n}\n\ntype SearchTranscriptEvents = (\n options: TranscriptEventSearchOptions,\n) => Promise<TranscriptEventPage>;\n\nconst compareEventTimestamps = (\n first: OpenHandsEvent,\n second: OpenHandsEvent,\n): number => first.timestamp.localeCompare(second.timestamp);\n\n/**\n * Loads the persisted history from the newest page back to the beginning,\n * then merges any live store events that have not persisted yet. The timestamp\n * anchor matches the chat's existing history pagination, while id-based\n * de-duplication keeps the result stable if pages overlap.\n */\nexport const loadCompleteTranscriptEvents = async (\n loadedEvents: OpenHandsEvent[],\n searchEvents: SearchTranscriptEvents,\n expectedEventCount?: number,\n): Promise<OpenHandsEvent[]> => {\n const persistedDescending: OpenHandsEvent[] = [];\n const fetchedEventIds = new Set<string>();\n const seenPageIds = new Set<string>();\n let oldestTimestamp: string | undefined;\n let pageId: string | undefined;\n let usedCursor = false;\n let usingTimestampFallback = false;\n\n while (true) {\n const page = await searchEvents({\n limit: TRANSCRIPT_HISTORY_PAGE_SIZE,\n sortOrder: \"TIMESTAMP_DESC\",\n strictPagination: true,\n ...(pageId ? { pageId } : {}),\n ...(oldestTimestamp ? { timestampLt: oldestTimestamp } : {}),\n });\n\n if (!Array.isArray(page.items)) {\n throw new Error(\n \"Invalid transcript history response: expected page.items to be an array.\",\n );\n }\n\n persistedDescending.push(...page.items);\n let pageOldestTimestamp: string | undefined;\n let addedEvent = false;\n page.items.forEach((event) => {\n if (!fetchedEventIds.has(event.id)) {\n fetchedEventIds.add(event.id);\n addedEvent = true;\n }\n if (!pageOldestTimestamp || event.timestamp < pageOldestTimestamp) {\n pageOldestTimestamp = event.timestamp;\n }\n });\n\n if (page.next_page_id) {\n if (seenPageIds.has(page.next_page_id)) {\n throw new Error(\n \"Transcript history pagination repeated a page cursor.\",\n );\n }\n seenPageIds.add(page.next_page_id);\n pageId = page.next_page_id;\n oldestTimestamp = undefined;\n usedCursor = true;\n continue;\n }\n\n // Once a server supplies a cursor, a page without a next cursor is an\n // explicit exhaustion signal, even when the final page is exactly full.\n if (usedCursor && !usingTimestampFallback) break;\n if (page.items.length < TRANSCRIPT_HISTORY_PAGE_SIZE) break;\n\n // Some older servers omit cursors for filtered searches. A timestamp\n // fallback is safe to attempt only when an independent event count can\n // prove completeness; otherwise fail instead of exporting a partial tail.\n if (expectedEventCount === undefined) {\n throw new Error(\n \"Transcript history pagination cannot prove that all events were loaded.\",\n );\n }\n if (!pageOldestTimestamp) {\n throw new Error(\"Transcript history pagination did not advance.\");\n }\n if (\n oldestTimestamp &&\n (!addedEvent || pageOldestTimestamp >= oldestTimestamp)\n ) {\n throw new Error(\"Transcript history pagination did not advance.\");\n }\n\n pageId = undefined;\n oldestTimestamp = pageOldestTimestamp;\n usingTimestampFallback = true;\n }\n\n const eventsById = new Map<string, OpenHandsEvent>();\n persistedDescending\n .slice()\n .reverse()\n .forEach((event) => {\n if (!eventsById.has(event.id)) eventsById.set(event.id, event);\n });\n loadedEvents.forEach((event) => {\n if (!eventsById.has(event.id)) eventsById.set(event.id, event);\n });\n // Array.prototype.sort is stable, so equal-timestamp events keep the causal\n // order returned by the server/store rather than being reordered by id.\n const completeEvents = [...eventsById.values()].sort(compareEventTimestamps);\n if (\n expectedEventCount !== undefined &&\n fetchedEventIds.size < expectedEventCount\n ) {\n throw new Error(\n `Transcript history is incomplete: expected ${expectedEventCount} persisted events, received ${fetchedEventIds.size}.`,\n );\n }\n return completeEvents;\n};\n"],"mappings":"gDAqBA,IAAM,GACJ,EACA,IACW,EAAM,UAAU,cAAc,EAAO,UAAU,CAQ/C,EAA+B,MAC1C,EACA,EACA,IAC8B,CAC9B,IAAM,EAAwC,EAAE,CAC1C,EAAkB,IAAI,IACtB,EAAc,IAAI,IACpB,EACA,EACA,EAAa,GACb,EAAyB,GAE7B,OAAa,CACX,IAAM,EAAO,MAAM,EAAa,CAC9B,MAAA,IACA,UAAW,iBACX,iBAAkB,GAClB,GAAI,EAAS,CAAE,SAAQ,CAAG,EAAE,CAC5B,GAAI,EAAkB,CAAE,YAAa,EAAiB,CAAG,EAAE,CAC5D,CAAC,CAEF,GAAI,CAAC,MAAM,QAAQ,EAAK,MAAM,CAC5B,MAAU,MACR,2EACD,CAGH,EAAoB,KAAK,GAAG,EAAK,MAAM,CACvC,IAAI,EACA,EAAa,GAWjB,GAVA,EAAK,MAAM,QAAS,GAAU,CACvB,EAAgB,IAAI,EAAM,GAAG,GAChC,EAAgB,IAAI,EAAM,GAAG,CAC7B,EAAa,KAEX,CAAC,GAAuB,EAAM,UAAY,KAC5C,EAAsB,EAAM,YAE9B,CAEE,EAAK,aAAc,CACrB,GAAI,EAAY,IAAI,EAAK,aAAa,CACpC,MAAU,MACR,wDACD,CAEH,EAAY,IAAI,EAAK,aAAa,CAClC,EAAS,EAAK,aACd,EAAkB,IAAA,GAClB,EAAa,GACb,SAMF,GADI,GAAc,CAAC,GACf,EAAK,MAAM,OAAA,IAAuC,MAKtD,GAAI,IAAuB,IAAA,GACzB,MAAU,MACR,0EACD,CAKH,GAHI,CAAC,GAIH,IACC,CAAC,GAAc,GAAuB,GAEvC,MAAU,MAAM,iDAAiD,CAGnE,EAAS,IAAA,GACT,EAAkB,EAClB,EAAyB,GAG3B,IAAM,EAAa,IAAI,IACvB,EACG,OAAO,CACP,SAAS,CACT,QAAS,GAAU,CACb,EAAW,IAAI,EAAM,GAAG,EAAE,EAAW,IAAI,EAAM,GAAI,EAAM,EAC9D,CACJ,EAAa,QAAS,GAAU,CACzB,EAAW,IAAI,EAAM,GAAG,EAAE,EAAW,IAAI,EAAM,GAAI,EAAM,EAC9D,CAGF,IAAM,EAAiB,CAAC,GAAG,EAAW,QAAQ,CAAC,CAAC,KAAK,EAAuB,CAC5E,GACE,IAAuB,IAAA,IACvB,EAAgB,KAAO,EAEvB,MAAU,MACR,8CAA8C,EAAmB,8BAA8B,EAAgB,KAAK,GACrH,CAEH,OAAO"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { OpenHandsEvent } from "#/types/agent-server/core";
|
|
2
|
+
export declare const TRANSCRIPT_HISTORY_PAGE_SIZE = 100;
|
|
3
|
+
interface TranscriptEventSearchOptions {
|
|
4
|
+
limit: number;
|
|
5
|
+
sortOrder: "TIMESTAMP_DESC";
|
|
6
|
+
pageId?: string;
|
|
7
|
+
timestampLt?: string;
|
|
8
|
+
strictPagination: true;
|
|
9
|
+
}
|
|
10
|
+
interface TranscriptEventPage {
|
|
11
|
+
items: OpenHandsEvent[];
|
|
12
|
+
next_page_id?: string | null;
|
|
13
|
+
}
|
|
14
|
+
type SearchTranscriptEvents = (options: TranscriptEventSearchOptions) => Promise<TranscriptEventPage>;
|
|
15
|
+
/**
|
|
16
|
+
* Loads the persisted history from the newest page back to the beginning,
|
|
17
|
+
* then merges any live store events that have not persisted yet. The timestamp
|
|
18
|
+
* anchor matches the chat's existing history pagination, while id-based
|
|
19
|
+
* de-duplication keeps the result stable if pages overlap.
|
|
20
|
+
*/
|
|
21
|
+
export declare const loadCompleteTranscriptEvents: (loadedEvents: OpenHandsEvent[], searchEvents: SearchTranscriptEvents, expectedEventCount?: number) => Promise<OpenHandsEvent[]>;
|
|
22
|
+
export {};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
var e = (e, t) => e.timestamp.localeCompare(t.timestamp), t = async (t, n, r) => {
|
|
2
|
+
let i = [], a = /* @__PURE__ */ new Set(), o = /* @__PURE__ */ new Set(), s, c, l = !1, u = !1;
|
|
3
|
+
for (;;) {
|
|
4
|
+
let e = await n({
|
|
5
|
+
limit: 100,
|
|
6
|
+
sortOrder: "TIMESTAMP_DESC",
|
|
7
|
+
strictPagination: !0,
|
|
8
|
+
...c ? { pageId: c } : {},
|
|
9
|
+
...s ? { timestampLt: s } : {}
|
|
10
|
+
});
|
|
11
|
+
if (!Array.isArray(e.items)) throw Error("Invalid transcript history response: expected page.items to be an array.");
|
|
12
|
+
i.push(...e.items);
|
|
13
|
+
let t, d = !1;
|
|
14
|
+
if (e.items.forEach((e) => {
|
|
15
|
+
a.has(e.id) || (a.add(e.id), d = !0), (!t || e.timestamp < t) && (t = e.timestamp);
|
|
16
|
+
}), e.next_page_id) {
|
|
17
|
+
if (o.has(e.next_page_id)) throw Error("Transcript history pagination repeated a page cursor.");
|
|
18
|
+
o.add(e.next_page_id), c = e.next_page_id, s = void 0, l = !0;
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
if (l && !u || e.items.length < 100) break;
|
|
22
|
+
if (r === void 0) throw Error("Transcript history pagination cannot prove that all events were loaded.");
|
|
23
|
+
if (!t || s && (!d || t >= s)) throw Error("Transcript history pagination did not advance.");
|
|
24
|
+
c = void 0, s = t, u = !0;
|
|
25
|
+
}
|
|
26
|
+
let d = /* @__PURE__ */ new Map();
|
|
27
|
+
i.slice().reverse().forEach((e) => {
|
|
28
|
+
d.has(e.id) || d.set(e.id, e);
|
|
29
|
+
}), t.forEach((e) => {
|
|
30
|
+
d.has(e.id) || d.set(e.id, e);
|
|
31
|
+
});
|
|
32
|
+
let f = [...d.values()].sort(e);
|
|
33
|
+
if (r !== void 0 && a.size < r) throw Error(`Transcript history is incomplete: expected ${r} persisted events, received ${a.size}.`);
|
|
34
|
+
return f;
|
|
35
|
+
};
|
|
36
|
+
//#endregion
|
|
37
|
+
export { t as loadCompleteTranscriptEvents };
|
|
38
|
+
|
|
39
|
+
//# sourceMappingURL=load-complete-events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load-complete-events.js","names":[],"sources":["../../../src/utils/transcript-export/load-complete-events.ts"],"sourcesContent":["import type { OpenHandsEvent } from \"#/types/agent-server/core\";\n\nexport const TRANSCRIPT_HISTORY_PAGE_SIZE = 100;\n\ninterface TranscriptEventSearchOptions {\n limit: number;\n sortOrder: \"TIMESTAMP_DESC\";\n pageId?: string;\n timestampLt?: string;\n strictPagination: true;\n}\n\ninterface TranscriptEventPage {\n items: OpenHandsEvent[];\n next_page_id?: string | null;\n}\n\ntype SearchTranscriptEvents = (\n options: TranscriptEventSearchOptions,\n) => Promise<TranscriptEventPage>;\n\nconst compareEventTimestamps = (\n first: OpenHandsEvent,\n second: OpenHandsEvent,\n): number => first.timestamp.localeCompare(second.timestamp);\n\n/**\n * Loads the persisted history from the newest page back to the beginning,\n * then merges any live store events that have not persisted yet. The timestamp\n * anchor matches the chat's existing history pagination, while id-based\n * de-duplication keeps the result stable if pages overlap.\n */\nexport const loadCompleteTranscriptEvents = async (\n loadedEvents: OpenHandsEvent[],\n searchEvents: SearchTranscriptEvents,\n expectedEventCount?: number,\n): Promise<OpenHandsEvent[]> => {\n const persistedDescending: OpenHandsEvent[] = [];\n const fetchedEventIds = new Set<string>();\n const seenPageIds = new Set<string>();\n let oldestTimestamp: string | undefined;\n let pageId: string | undefined;\n let usedCursor = false;\n let usingTimestampFallback = false;\n\n while (true) {\n const page = await searchEvents({\n limit: TRANSCRIPT_HISTORY_PAGE_SIZE,\n sortOrder: \"TIMESTAMP_DESC\",\n strictPagination: true,\n ...(pageId ? { pageId } : {}),\n ...(oldestTimestamp ? { timestampLt: oldestTimestamp } : {}),\n });\n\n if (!Array.isArray(page.items)) {\n throw new Error(\n \"Invalid transcript history response: expected page.items to be an array.\",\n );\n }\n\n persistedDescending.push(...page.items);\n let pageOldestTimestamp: string | undefined;\n let addedEvent = false;\n page.items.forEach((event) => {\n if (!fetchedEventIds.has(event.id)) {\n fetchedEventIds.add(event.id);\n addedEvent = true;\n }\n if (!pageOldestTimestamp || event.timestamp < pageOldestTimestamp) {\n pageOldestTimestamp = event.timestamp;\n }\n });\n\n if (page.next_page_id) {\n if (seenPageIds.has(page.next_page_id)) {\n throw new Error(\n \"Transcript history pagination repeated a page cursor.\",\n );\n }\n seenPageIds.add(page.next_page_id);\n pageId = page.next_page_id;\n oldestTimestamp = undefined;\n usedCursor = true;\n continue;\n }\n\n // Once a server supplies a cursor, a page without a next cursor is an\n // explicit exhaustion signal, even when the final page is exactly full.\n if (usedCursor && !usingTimestampFallback) break;\n if (page.items.length < TRANSCRIPT_HISTORY_PAGE_SIZE) break;\n\n // Some older servers omit cursors for filtered searches. A timestamp\n // fallback is safe to attempt only when an independent event count can\n // prove completeness; otherwise fail instead of exporting a partial tail.\n if (expectedEventCount === undefined) {\n throw new Error(\n \"Transcript history pagination cannot prove that all events were loaded.\",\n );\n }\n if (!pageOldestTimestamp) {\n throw new Error(\"Transcript history pagination did not advance.\");\n }\n if (\n oldestTimestamp &&\n (!addedEvent || pageOldestTimestamp >= oldestTimestamp)\n ) {\n throw new Error(\"Transcript history pagination did not advance.\");\n }\n\n pageId = undefined;\n oldestTimestamp = pageOldestTimestamp;\n usingTimestampFallback = true;\n }\n\n const eventsById = new Map<string, OpenHandsEvent>();\n persistedDescending\n .slice()\n .reverse()\n .forEach((event) => {\n if (!eventsById.has(event.id)) eventsById.set(event.id, event);\n });\n loadedEvents.forEach((event) => {\n if (!eventsById.has(event.id)) eventsById.set(event.id, event);\n });\n // Array.prototype.sort is stable, so equal-timestamp events keep the causal\n // order returned by the server/store rather than being reordered by id.\n const completeEvents = [...eventsById.values()].sort(compareEventTimestamps);\n if (\n expectedEventCount !== undefined &&\n fetchedEventIds.size < expectedEventCount\n ) {\n throw new Error(\n `Transcript history is incomplete: expected ${expectedEventCount} persisted events, received ${fetchedEventIds.size}.`,\n );\n }\n return completeEvents;\n};\n"],"mappings":"AAqBA,IAAM,KACJ,GACA,MACW,EAAM,UAAU,cAAc,EAAO,UAAU,EAQ/C,IAA+B,OAC1C,GACA,GACA,MAC8B;CAC9B,IAAM,IAAwC,EAAE,EAC1C,oBAAkB,IAAI,KAAa,EACnC,oBAAc,IAAI,KAAa,EACjC,GACA,GACA,IAAa,IACb,IAAyB;AAE7B,UAAa;EACX,IAAM,IAAO,MAAM,EAAa;GAC9B,OAAA;GACA,WAAW;GACX,kBAAkB;GAClB,GAAI,IAAS,EAAE,WAAQ,GAAG,EAAE;GAC5B,GAAI,IAAkB,EAAE,aAAa,GAAiB,GAAG,EAAE;GAC5D,CAAC;AAEF,MAAI,CAAC,MAAM,QAAQ,EAAK,MAAM,CAC5B,OAAU,MACR,2EACD;AAGH,IAAoB,KAAK,GAAG,EAAK,MAAM;EACvC,IAAI,GACA,IAAa;AAWjB,MAVA,EAAK,MAAM,SAAS,MAAU;AAK5B,GAJK,EAAgB,IAAI,EAAM,GAAG,KAChC,EAAgB,IAAI,EAAM,GAAG,EAC7B,IAAa,MAEX,CAAC,KAAuB,EAAM,YAAY,OAC5C,IAAsB,EAAM;IAE9B,EAEE,EAAK,cAAc;AACrB,OAAI,EAAY,IAAI,EAAK,aAAa,CACpC,OAAU,MACR,wDACD;AAKH,GAHA,EAAY,IAAI,EAAK,aAAa,EAClC,IAAS,EAAK,cACd,IAAkB,KAAA,GAClB,IAAa;AACb;;AAMF,MADI,KAAc,CAAC,KACf,EAAK,MAAM,SAAA,IAAuC;AAKtD,MAAI,MAAuB,KAAA,EACzB,OAAU,MACR,0EACD;AAKH,MAHI,CAAC,KAIH,MACC,CAAC,KAAc,KAAuB,GAEvC,OAAU,MAAM,iDAAiD;AAKnE,EAFA,IAAS,KAAA,GACT,IAAkB,GAClB,IAAyB;;CAG3B,IAAM,oBAAa,IAAI,KAA6B;AAOpD,CANA,EACG,OAAO,CACP,SAAS,CACT,SAAS,MAAU;AAClB,EAAK,EAAW,IAAI,EAAM,GAAG,IAAE,EAAW,IAAI,EAAM,IAAI,EAAM;GAC9D,EACJ,EAAa,SAAS,MAAU;AAC9B,EAAK,EAAW,IAAI,EAAM,GAAG,IAAE,EAAW,IAAI,EAAM,IAAI,EAAM;GAC9D;CAGF,IAAM,IAAiB,CAAC,GAAG,EAAW,QAAQ,CAAC,CAAC,KAAK,EAAuB;AAC5E,KACE,MAAuB,KAAA,KACvB,EAAgB,OAAO,EAEvB,OAAU,MACR,8CAA8C,EAAmB,8BAA8B,EAAgB,KAAK,GACrH;AAEH,QAAO"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openhands/agent-canvas",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "Agent Canvas UI for OpenHands - run AI coding agents with a visual interface",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"private": false,
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"@heroui/react": "2.8.10",
|
|
24
24
|
"@microlink/react-json-view": "1.31.20",
|
|
25
25
|
"@monaco-editor/react": "4.7.0",
|
|
26
|
-
"@openhands/extensions": "0.
|
|
26
|
+
"@openhands/extensions": "0.9.0",
|
|
27
27
|
"@openhands/typescript-client": "1.32.1",
|
|
28
28
|
"@react-router/node": "7.17.0",
|
|
29
29
|
"@react-router/serve": "7.17.0",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
*
|
|
20
20
|
* Usage:
|
|
21
21
|
* node scripts/check-sdk-version-sync.mjs
|
|
22
|
-
* EXPECTED_SDK_VERSION=1.
|
|
22
|
+
* EXPECTED_SDK_VERSION=1.35.0 node scripts/check-sdk-version-sync.mjs
|
|
23
23
|
* node scripts/check-sdk-version-sync.mjs --check-pypi
|
|
24
24
|
*
|
|
25
25
|
* Environment variables:
|
|
@@ -78,7 +78,7 @@ Triggering from other repos:
|
|
|
78
78
|
-H "Authorization: token \$GITHUB_TOKEN" \\
|
|
79
79
|
-H "Accept: application/vnd.github.v3+json" \\
|
|
80
80
|
https://api.github.com/repos/OpenHands/agent-canvas/dispatches \\
|
|
81
|
-
-d '{"event_type": "sdk-version-check", "client_payload": {"version": "1.
|
|
81
|
+
-d '{"event_type": "sdk-version-check", "client_payload": {"version": "1.35.0"}}'
|
|
82
82
|
`);
|
|
83
83
|
process.exit(0);
|
|
84
84
|
}
|
|
@@ -260,9 +260,9 @@ async function fetchPyPIDependencies(packageName, version) {
|
|
|
260
260
|
* Parse PyPI requires_dist array and extract SDK package versions
|
|
261
261
|
*
|
|
262
262
|
* PyPI returns dependencies in PEP 508 format like:
|
|
263
|
-
* "openhands-sdk>=1.
|
|
264
|
-
* "openhands-tools==1.
|
|
265
|
-
* "openhands-workspace (>=1.
|
|
263
|
+
* "openhands-sdk>=1.35.0,<2.0.0"
|
|
264
|
+
* "openhands-tools==1.35.0"
|
|
265
|
+
* "openhands-workspace (>=1.35.0)"
|
|
266
266
|
*/
|
|
267
267
|
function parseSdkVersionsFromRequiresDist(requiresDist) {
|
|
268
268
|
const versions = {};
|
|
@@ -276,7 +276,7 @@ function parseSdkVersionsFromRequiresDist(requiresDist) {
|
|
|
276
276
|
}
|
|
277
277
|
|
|
278
278
|
// Extract the version number - look for patterns like:
|
|
279
|
-
// ">=1.
|
|
279
|
+
// ">=1.35.0", "==1.35.0", "(>=1.35.0)", "~=1.35.0"
|
|
280
280
|
// After the package name and before any comma or closing paren
|
|
281
281
|
const versionPattern = /[><=~!]+\s*([0-9]+(?:\.[0-9]+)*)/;
|
|
282
282
|
const match = dep.match(versionPattern);
|
package/scripts/dev-safe.mjs
CHANGED
|
@@ -48,7 +48,7 @@ const LOCAL_AGENT_SERVER_SUBDIRS = [
|
|
|
48
48
|
"openhands-workspace",
|
|
49
49
|
];
|
|
50
50
|
const DEFAULT_AGENT_SERVER_VERSION = SHARED_DEFAULTS.versions.agentServer;
|
|
51
|
-
// Temporary transitive-dep pin: openhands-sdk 1.
|
|
51
|
+
// Temporary transitive-dep pin: openhands-sdk 1.35.0 leaves agent-client-protocol
|
|
52
52
|
// unbounded (>=0.10.1), but acp 0.11.0 reordered the ACP prompt() args and breaks
|
|
53
53
|
// the SDK's ACP client. Hold acp <0.11 until a fixed SDK ships. See config/defaults.json.
|
|
54
54
|
const AGENT_CLIENT_PROTOCOL_CONSTRAINT =
|
|
@@ -399,7 +399,7 @@ export function validateFrontendDependencies(
|
|
|
399
399
|
* edits are picked up without a manual reinstall. The agent-server itself
|
|
400
400
|
* is rebuilt from local source on each invocation (--reinstall).
|
|
401
401
|
* - OH_AGENT_SERVER_GIT_REF: Git commit SHA or branch name
|
|
402
|
-
* - OH_AGENT_SERVER_VERSION: Specific PyPI version (e.g., "1.
|
|
402
|
+
* - OH_AGENT_SERVER_VERSION: Specific PyPI version (e.g., "1.35.0")
|
|
403
403
|
*
|
|
404
404
|
* If none are set, defaults to the released version specified by
|
|
405
405
|
* DEFAULT_AGENT_SERVER_VERSION. Set OH_AGENT_SERVER_GIT_REF to use a
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as e}from"./rolldown-runtime-BFRubm34.js";import{Ct as t,bt as n}from"./vendor-styling-CI0PQ3ab.js";import{a as r,c as i,i as a,l as o,n as s,o as ee,r as te,u as ne}from"./vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~d1e18dtv-5Q6lQJdE.js";import{i as re,t as c}from"./declaration-B9kpCaYl.js";import{m as ie,o as ae,v as oe}from"./vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~ncdxw0bh-ClHnt5lR.js";import{I as se,t as ce}from"./utils-CE0lDWtb.js";import{E as l,c as u,d,f,g as le,h as p,l as m,m as h,n as ue,p as de,s as fe,u as pe,v as me}from"./agent-server-client-options-DVLRd9sw.js";var g=e(t(),1),_=`openhands`,v=[{label:`English`,value:`en`},{label:`日本語`,value:`ja`},{label:`简体中文`,value:`zh-CN`},{label:`繁體中文`,value:`zh-TW`},{label:`한국어`,value:`ko-KR`},{label:`Norsk`,value:`no`},{label:`Arabic`,value:`ar`},{label:`Deutsch`,value:`de`},{label:`Français`,value:`fr`},{label:`Italiano`,value:`it`},{label:`Português`,value:`pt`},{label:`Español`,value:`es`},{label:`Català`,value:`ca`},{label:`Türkçe`,value:`tr`},{label:`Українська`,value:`uk`}],y=new WeakMap,he=e=>{if(!y.has(e)){let t=e.use(r).use(a).use(re).init({fallbackLng:`en`,debug:!1,supportedLngs:v.map(e=>e.value),nonExplicitSupportedLngs:!1,ns:[_],defaultNS:_,fallbackNS:_,backend:{loadPath:`/locales/{{lng}}/{{ns}}.json`},interpolation:{escapeValue:!1}});y.set(e,t)}return e},ge=()=>he(ee()),b=null,x=null,S=()=>(b||=ge(),b),C=()=>x??S(),_e=e=>(x=e??S(),x),ve=async(e=S())=>(await y.get(e),e),ye=e=>e?typeof e==`object`&&!Array.isArray(e)?{ns:_,...e}:e:{ns:_},w=new Proxy({},{get:(e,t)=>{let n=C();if(t===`t`)return(e,t)=>n.t(e,ye(t));if(t===`exists`)return(e,t)=>n.exists(e,ye(t));let r=Reflect.get(n,t,n);return typeof r==`function`?r.bind(n):r},set:(e,t,n)=>{let r=C();return Reflect.set(r,t,n,r)}}),be=e=>typeof e.response?.data==`object`&&e.response?.data!==null&&`error`in e.response.data&&typeof e.response?.data?.error==`string`,xe=e=>typeof e.response?.data==`object`&&e.response?.data!==null&&`message`in e.response.data&&typeof e.response?.data?.message==`string`,Se=`Disconnected (check URL or network). Check that the backend URL is correct and the backend server is reachable. If the backend is on another origin, check that it allows this frontend origin.`,Ce=`Disconnected (request timed out). Check that the backend URL is correct and reachable.`,we=4;function Te(e){return typeof e==`object`&&!!e}function T(e){let t=[],n=new Set,r=e,i=0;for(;r!=null&&i<we&&!n.has(r);){if(n.add(r),r instanceof Error)r.message&&t.push(r.message),r=r.cause;else if(typeof r==`string`){r&&t.push(r);break}else if(Te(r)){let e=r.message;typeof e==`string`&&e&&t.push(e),r=r.cause}else break;i+=1}return t}function E(e){if(!e)return!1;let t=e.toLowerCase();return t.includes(`disconnected (check cors or network)`)||t.includes(`disconnected (check url or network)`)||t.includes(`blocked by cors`)||t.includes(`failed to fetch`)||t.includes(`network error`)||t.includes(`load failed`)||t.includes(`networkerror when attempting to fetch resource`)||t.includes(`cors`)&&t.includes(`blocked`)}function Ee(e){return T(e).some(E)}function D(e){if(!e)return!1;let t=e.toLowerCase();return t.includes(`request timeout`)||t.includes(`timeout after`)||t.includes(`backend request timed out`)}function O(e){let t=T(e);return t.some(E)?Se:t.some(D)?Ce:t[0]??null}function De(e){return typeof e==`object`&&!!e&&`isAxiosError`in e&&e.isAxiosError===!0}var k=e=>{let t=null,n=!1;return De(e)?(n=!0,t=be(e)&&e.response?.data.error?e.response?.data.error:xe(e)&&e.response?.data.message?e.response?.data.message:e.message):t=e instanceof Error?e.message:typeof e==`string`?e:null,O(n?t??e:e)??t??``},A=(e,t=5e3,n=1e4)=>{if(!e)return t;let r=e.length/(1e3/60)*1e3*1.5;return Math.min(Math.max(r,t),n)},j=n(),M={background:`var(--oh-color-tertiary)`,border:`1px solid var(--oh-border-input)`,color:`#fff`,borderRadius:`var(--oh-radius)`,maxWidth:`400px`,wordBreak:`break-word`,overflowWrap:`anywhere`,whiteSpace:`pre-wrap`},N={position:`top-right`,style:M},Oe={...M,color:`var(--oh-muted)`};function ke({message:e}){let t=g.useRef(null),[n,r]=g.useState(!1);return g.useLayoutEffect(()=>{let e=t.current;if(!e)return;let n=()=>{let t=Number.parseFloat(getComputedStyle(e).lineHeight);if(!Number.isFinite(t)||t<=0){r(!1);return}r(e.getBoundingClientRect().height>t*1.5)};n();let i=new ResizeObserver(n);return i.observe(e),()=>i.disconnect()},[e]),(0,j.jsxs)(`div`,{className:ce(`flex min-w-0 gap-2`,n?`items-start`:`items-center`),children:[(0,j.jsx)(te,{"aria-hidden":!0,className:`h-4 w-4 shrink-0`,strokeWidth:2,style:{color:se}}),(0,j.jsx)(`span`,{ref:t,className:`min-w-0 flex-1 text-sm leading-5 [word-break:break-word] [overflow-wrap:anywhere]`,children:e})]})}var Ae={...N,icon:null,style:Oe},P=e=>{let t=e||w.t(c.STATUS$ERROR);E(t)?t=w.t(c.ERROR$CORS_OR_NETWORK):D(t)&&(t=w.t(c.ERROR$BACKEND_REQUEST_TIMEOUT));let n=A(t,4e3);s((0,j.jsx)(ke,{message:t}),{...Ae,duration:n})},je=e=>{let t=A(e,5e3);s.success((0,j.jsx)(`span`,{className:`[word-break:break-word] [overflow-wrap:anywhere]`,children:e}),{...N,duration:t})},Me=e=>{let t=A(e,6e3);s((0,j.jsx)(`span`,{className:`[word-break:break-word] [overflow-wrap:anywhere]`,children:e}),{...N,icon:`⚠️`,duration:t})},F=`openhands-backend-health`,I=500;function Ne(e){if(typeof e!=`object`||!e)return!1;let t=e;return Number.isInteger(t.consecutiveFailures)&&t.consecutiveFailures>=0&&t.consecutiveFailures<=5&&(t.lastError===null||typeof t.lastError==`string`)&&(t.lastFailureAt===null||typeof t.lastFailureAt==`number`)&&typeof t.disabled==`boolean`}function Pe(){if(typeof window>`u`)return{};try{let e=window.localStorage.getItem(F);if(!e)return{};let t=JSON.parse(e);if(typeof t!=`object`||!t)return{};let n={};for(let[e,r]of Object.entries(t))typeof e==`string`&&e.length>0&&Ne(r)&&(n[e]=r);return n}catch{return{}}}function Fe(e){if(!(typeof window>`u`))try{if(Object.keys(e).length===0){window.localStorage.removeItem(F);return}window.localStorage.setItem(F,JSON.stringify(e))}catch{}}function Ie(e){let t=O(e)??`Unknown error`;return t.length>I?`${t.slice(0,I)}…`:t}var L=Pe(),R=new Set;function Le(){R.forEach(e=>e())}function z(e){L=e,Fe(e),Le()}function Re(){return L}function ze(e){return R.add(e),()=>{R.delete(e)}}function Be(e,t){let n=L[e],r=Math.min((n?.consecutiveFailures??0)+1,5),i=n?.disabled===!0||r>=5,a={consecutiveFailures:r,lastError:Ie(t),lastFailureAt:Date.now(),disabled:i};z({...L,[e]:a})}function Ve(e){if(!(e in L))return;let{[e]:t,...n}=L;z(n)}function He(e){if(!(e in L))return;let{[e]:t,...n}=L;z(n)}function Ue(e){if(!(e in L))return;let{[e]:t,...n}=L;z(n)}var We=(e,t)=>{(e?.response?.status===401||e?.status===401)&&t.invalidateQueries({queryKey:[`user`,`authenticated`]})},Ge=e=>{if(!(e instanceof oe)||e.response?.status!==401&&e.status!==401)return!1;let t=u().backend;if(t.kind!==`cloud`)return!1;let n=e.config?.url;return!n||n.startsWith(t.host.replace(/\/+$/,``))},B=new Set,Ke=()=>{let e=new i({queryCache:new o({onSuccess:(e,t)=>{let n=t.meta?.backendId??t.options.meta?.backendId;typeof n==`string`&&Ve(n)},onError:(t,n)=>{if(n.queryKey[0]===`user`&&n.queryKey[1]===`authenticated`||We(t,e),!(n.meta?.disableToast??n.options.meta?.disableToast)&&!Ge(t)){let e=k(t);B.has(e||``)||(P(e||w.t(c.ERROR$GENERIC)),B.add(e||``),setTimeout(()=>{B.delete(e||``)},3e3))}}}),mutationCache:new ne({onError:(t,n,r,i)=>{We(t,e),!(i?.meta?.disableToast??i?.options.meta?.disableToast)&&!Ge(t)&&P(k(t)||w.t(c.ERROR$GENERIC))}})});return e},V=null,H=null,U=()=>(V||=Ke(),V),W=()=>H??U(),qe=e=>(H=e??U(),H),G=new Proxy({},{get:(e,t)=>{let n=W(),r=Reflect.get(n,t,n);return typeof r==`function`?r.bind(n):r},set:(e,t,n)=>{let r=W();return Reflect.set(r,t,n,r)}}),Je={_comment:`Single source of truth for version pins, ports, paths, and defaults shared across the npm and Docker install paths. Read by scripts/dev-safe.mjs, scripts/dev-with-automation.mjs, docker/entrypoint.sh (via generated defaults.env), and .github/workflows/docker.yml.`,versions:{agentServer:`1.33.0`,agentCanvas:`1.2.0`,automation:`1.1.4`},compatibility:{minimumAgentServer:`1.28.0`},constraints:{_comment:`Temporary upper bound on the agent-client-protocol (acp) transitive dependency. openhands-sdk 1.33.0 requires agent-client-protocol>=0.10.1 with no upper bound, but acp 0.11.0 reordered the ACP prompt() arguments and breaks the SDK's ACP client (a PromptRequest validation error surfaces as 'ACP error: 2 validation errors for PromptRequest'). Pin acp <0.11 until a fixed openhands-sdk ships. Consumed by scripts/dev-safe.mjs (agent-server uvx install) and .github/workflows/mock-llm-e2e.yml (mock ACP server venv).`,agentClientProtocol:`agent-client-protocol<0.11`},images:{agentServer:`ghcr.io/openhands/agent-server`,agentCanvas:`ghcr.io/openhands/agent-canvas`},ports:{agentServer:18e3,automation:18001,proxy:8e3},paths:{stateSubdir:`agent-canvas`,conversations:`agent-canvas/conversations`,bashEvents:`agent-canvas/bash_events`,automationDb:`automation/automations.db`},packages:{agentServer:`openhands-agent-server`,automation:`openhands-automation`,tools:`openhands-tools`,workspace:`openhands-workspace`}},Ye=5e3,Xe=`unknown`,K=Je.compatibility.minimumAgentServer,Ze=`AGENT_SERVER_UNSUPPORTED_VERSION`,Qe=`AGENT_SERVER_UNKNOWN_VERSION`,q=null,$e=e=>Array.isArray(e?.usable_tools)?e.usable_tools:null,J=class extends Error{details;noBackendConfigured;constructor(e,t){let n=t?.noBackendConfigured??!1;super(n?`No agent server backend is configured yet. Add a backend to get started.`:`Could not connect to the configured agent server. Make sure it is running and reachable, then reload the page.`),this.name=`AgentServerUnavailableError`,this.details=e??null,this.noBackendConfigured=n}},et=e=>e instanceof J||typeof e==`object`&&!!e&&`name`in e&&e.name===`AgentServerUnavailableError`,tt=class extends J{code=Ze;actualVersion;requiredVersion=K;constructor(e){let t=`Agent Canvas requires agent-server ${K} or newer; this backend is running ${e}. Please upgrade the agent-server backend.`;super(t),this.name=`AgentServerUnsupportedVersionError`,this.message=t,this.actualVersion=e}},Y=class extends J{code=Qe;actualVersion;requiredVersion=K;constructor(e){let t=`Could not determine this backend's agent-server version.${e?` It reported "${e}".`:``} Agent Canvas requires agent-server ${K} or newer, but this backend did not return a valid version from /server_info. Restart or rebuild the agent-server backend, then try again.`;super(t),this.name=`AgentServerUnknownVersionError`,this.message=t,this.actualVersion=e}},nt=e=>l()&&Z(e,401);function X(){q=null}function rt(e){let t=$e(q);return Array.isArray(t)?t.includes(e):!0}function it(e){return e instanceof Error&&e.name===`HttpError`&&`status`in e&&typeof e.status==`number`}function Z(e,t){return it(e)&&e.status===t}function at(e){return typeof e.version==`string`&&e.version.trim()||null}function ot(e){let t=at(e);return!t||t.toLowerCase()===Xe?null:t}function st(e){let t=ot(e);return!t||!Q(t)?null:t}function ct(e,t){let n=Q(e),r=Q(t);if(!n||!r)return null;for(let e of[`major`,`minor`,`patch`]){if(n[e]>r[e])return 1;if(n[e]<r[e])return-1}return n.prerelease&&!r.prerelease?-1:!n.prerelease&&r.prerelease?1:n.prerelease&&r.prerelease?n.prerelease.localeCompare(r.prerelease):0}function Q(e){let[t]=e.trim().replace(/^v/,``).split(`+`),[n,r]=t.split(`-`,2),i=n.split(`.`);if(i.length!==3)return null;let[a,o,s]=i.map(e=>Number(e));return[a,o,s].every(e=>Number.isInteger(e)&&e>=0)?{major:a,minor:o,patch:s,prerelease:r}:null}function lt(e){let t=ot(e);if(!t)throw X(),new Y(at(e));let n=ct(t,K);if(n===null)throw X(),new Y(t);if(n<0)throw X(),new tt(t)}async function ut(){let e=pe();if(!e){if(X(),de(u().backend))throw new J(`No backend configured`,{noBackendConfigured:!0});return null}let t=ue({host:e.host,sessionApiKey:e.apiKey||null,timeout:Ye}),n;try{n=await new ie(t).getServerInfo()}catch(e){throw X(),Z(e,401)?e:new J(e instanceof Error?e.message:null)}if(lt(n),l())try{await new ae(t).getSettings()}catch(e){if(Z(e,401))throw e;console.warn(`[agent-server] getSettings() probe failed (non-401):`,e)}return q=n,n}var dt={WEB_CLIENT_CONFIG:[`web-client-config`]},ft={all:[`settings`],byScope:e=>[`settings`,e],personal:()=>[`settings`,`personal`]},pt={all:[`llm-profiles`]},mt={all:[`agent-profiles`]},ht={retry:!1},gt={all:[`llm-subscription`],openaiStatus:[`llm-subscription`,`openai`,`status`],openaiModels:[`llm-subscription`,`openai`,`models`]},_t={all:[`local-workspaces`]},vt={marketplace:[`plugins-marketplace`],installed:[`plugins-installed`],local:[`plugins-local`]},yt={staleTime:1e3*60*5,gcTime:1e3*60*15},$=g.createContext(null);function bt(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?crypto.randomUUID():`backend-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}function xt({children:e}){let t=g.useSyncExternalStore(le,f,f),n=g.useCallback(()=>{X(),G.invalidateQueries({queryKey:dt.WEB_CLIENT_CONFIG})},[]),r=g.useCallback((e,t)=>{let r=m()?.backendId??null,i=m()?.orgId??null,a=t??null;e===r&&a===i||(h({backendId:e,orgId:a}),n())},[n]),i=g.useCallback(e=>{let t={...e,id:bt()};return p([...d(),t]),h({backendId:t.id}),n(),t},[n]),a=g.useCallback((e,t)=>{let r=d().find(t=>t.id===e),i=m()?.backendId??null;p(d().map(n=>n.id===e?{...n,...t}:n));let a=t.host!==void 0&&r!==void 0&&t.host!==r.host,o=t.apiKey!==void 0&&r!==void 0&&t.apiKey!==r.apiKey;(a||o)&&(He(e),i===e&&n())},[n]),o=g.useCallback(e=>{p(d().filter(t=>t.id!==e)),Ue(e),n()},[n]),s=g.useMemo(()=>({backends:t.backends,active:t.active,setActive:r,addBackend:i,updateBackend:a,removeBackend:o}),[t,r,i,a,o]);return(0,j.jsx)($.Provider,{value:s,children:e})}function St(){let e=g.useContext($);if(!e)throw Error(`useActiveBackendContext must be used inside <ActiveBackendProvider>`);return e}function Ct(){let e=g.useContext($);return e?e.active:{backend:me()??fe,orgId:null}}export{P as A,S as B,G as C,Ve as D,Be as E,D as F,w as H,Ee as I,E as L,Me as M,k as N,ze as O,O as P,v as R,W as S,Re as T,_e as U,C as V,ve as W,rt as _,ht as a,ut as b,gt as c,dt as d,ft as f,nt as g,st as h,mt as i,je as j,N as k,_t as l,X as m,Ct as n,yt as o,lt as p,St as r,pt as s,xt as t,vt as u,et as v,qe as w,U as x,Z as y,_ as z};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e,r as t}from"./agent-settings-DjVlKgaP.js";export{e as default,t as handle};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as e}from"./rolldown-runtime-BFRubm34.js";import{Ct as t,bt as n}from"./vendor-styling-CI0PQ3ab.js";import{L as r,P as i}from"./vendor~entry.client~root~root-layout~index-redirect~home~conversation-panel~conversation~la~byh8a1g4-XNPdpuO8.js";import{t as a}from"./useQuery-CpjHYtZc.js";import{t as o}from"./useTranslation-Cgy4JA_g.js";import{t as s}from"./declaration-B9kpCaYl.js";import{b as c,p as l,y as u}from"./vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~ncdxw0bh-ClHnt5lR.js";import{A as d,j as f,n as p}from"./active-backend-context-DRFevVIj.js";import{t as m}from"./back-nav-button-BYmxFxGt.js";import{t as h}from"./utils-CE0lDWtb.js";import{a as g,c as _,n as v}from"./agent-server-client-options-DVLRd9sw.js";import{t as y}from"./proxy-CHmFkV16.js";import{r as b}from"./modal-classes-DPqxSyuP.js";import{t as x}from"./brand-button-DKPMEKcW.js";import{n as S}from"./navigation-context-DPs2G0X8.js";import{t as C}from"./use-tracking-CqODdfO4.js";import{t as w}from"./use-create-conversation-CvAXfA3T.js";import{t as T}from"./u-edit-DJ90xc8Z.js";import{t as E}from"./terminal-BuLtIrb9.js";import{t as D}from"./use-user-conversation-BPHQ-dm-.js";import{t as O}from"./toggle-switch-DBlOOzBr.js";import{t as k}from"./x-mark-Batp6gXa.js";import{t as A}from"./code-tag-DYlAhEQY.js";import{t as j}from"./link-external-DfKQroKX.js";import{C as M,S as ee,_ as N,a as P,b as F,c as I,d as L,f as te,i as ne,l as re,m as ie,n as ae,o as oe,p as se,r as ce,s as le,t as ue,u as de,w as fe,x as pe,y as me}from"./edit-automation-modal-BoibW8cd.js";import{t as R}from"./automation-BU8zu-FP.js";var z=e(t()),B=n();function V(){let{t:e}=o(`openhands`);return(0,B.jsx)(m,{to:`/automations`,children:e(s.AUTOMATIONS$DETAIL$BACK_TO_LIST)})}var he=e=>(0,B.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,stroke:`currentColor`,strokeWidth:2,...e,children:(0,B.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M3 16.5v2.25A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75V16.5M16.5 12L12 16.5m0 0L7.5 12m4.5 4.5V3`})});function ge({active:e}){let{t}=o(`openhands`);return(0,B.jsx)(`span`,{"data-testid":e?`active-status-badge-active`:`active-status-badge-inactive`,className:h(`inline-flex items-center rounded-full px-3 py-1 text-xs font-medium`,e?`bg-[var(--oh-success)]/15 text-[var(--oh-success)]`:`bg-surface-raised text-muted`),children:t(e?s.AUTOMATIONS$DETAIL$ACTIVE:s.AUTOMATIONS$DETAIL$INACTIVE)})}function _e({automation:e,onToggle:t,onEdit:n,onDelete:r,onRunNow:i,isRunningNow:a=!1}){let{t:c}=o(`openhands`),l=se(`manage_automations`),u=[...n?[{label:c(s.AUTOMATIONS$EDIT),icon:(0,B.jsx)(T,{className:`size-4`}),onClick:n}]:[],{label:e.enabled?c(s.AUTOMATIONS$TURN_OFF):c(s.AUTOMATIONS$TURN_ON),icon:(0,B.jsx)(le,{className:`size-4`}),onClick:t},{label:c(s.AUTOMATIONS$DOWNLOAD_TARBALL),icon:(0,B.jsx)(he,{className:`size-4`}),onClick:()=>{fe.downloadTarball(e.id,e.name)}},{label:c(s.AUTOMATIONS$DELETE),icon:(0,B.jsx)(oe,{className:`size-4`}),onClick:r}];return(0,B.jsx)(`div`,{className:`flex flex-col gap-4`,children:(0,B.jsxs)(`div`,{className:`flex items-start justify-between`,children:[(0,B.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,B.jsx)(`h1`,{className:`text-xl font-medium text-content`,children:e.name}),(0,B.jsx)(ge,{active:e.enabled})]}),(0,B.jsxs)(`div`,{className:`flex items-center gap-2`,children:[l&&i&&(0,B.jsxs)(`button`,{type:`button`,className:`inline-flex items-center gap-1.5 rounded-md border border-[var(--oh-border)] px-3 py-1.5 text-sm font-medium text-content transition-colors hover:bg-surface-raised disabled:cursor-not-allowed disabled:opacity-60`,disabled:a||!e.enabled,onClick:i,children:[(0,B.jsx)(te,{className:`size-3.5 shrink-0`,"aria-hidden":!0}),c(a?s.AUTOMATIONS$STARTING:s.AUTOMATIONS$RUN_NOW)]}),l&&(0,B.jsx)(O,{enabled:e.enabled,label:e.enabled?c(s.AUTOMATIONS$TURN_OFF):c(s.AUTOMATIONS$TURN_ON),onToggle:t}),l&&(0,B.jsx)(ie,{items:u})]})]})})}function H({icon:e,title:t,children:n}){return(0,B.jsxs)(`div`,{className:`rounded-2xl border border-[var(--oh-border)] bg-[var(--oh-surface)]`,children:[(0,B.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-[var(--oh-border)] px-5 py-3`,children:[(0,B.jsx)(`span`,{className:`size-4 text-muted`,children:e}),(0,B.jsx)(`h3`,{className:`text-sm font-medium text-content`,children:t})]}),(0,B.jsx)(`div`,{className:`px-5 py-5`,children:n})]})}var ve=240,ye=`max-h-60`;function be({prompt:e}){let{t}=o(`openhands`),[n,r]=z.useState(!1),[i,a]=z.useState(!1),c=z.useRef(null),l=i&&!n;return z.useLayoutEffect(()=>{let e=c.current;if(!e)return;let t=()=>{a(e.scrollHeight>ve)};t();let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[e]),(0,B.jsx)(H,{icon:(0,B.jsx)(E,{className:`size-4`}),title:t(s.AUTOMATIONS$DETAIL$PROMPT),children:(0,B.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,B.jsxs)(`div`,{className:`relative`,children:[(0,B.jsx)(`p`,{ref:c,className:h(`whitespace-pre-wrap text-sm leading-6 text-content`,l&&h(ye,`overflow-hidden`)),"data-testid":`automation-prompt-content`,children:e}),l?(0,B.jsx)(`div`,{className:`pointer-events-none absolute inset-x-0 bottom-0 h-20 bg-gradient-to-t from-[var(--oh-surface)] to-transparent`,"aria-hidden":!0,"data-testid":`automation-prompt-fade`}):null]}),i?(0,B.jsx)(`button`,{type:`button`,className:`self-start cursor-pointer text-sm font-normal text-[var(--oh-muted)] hover:text-white`,onClick:()=>r(e=>!e),"data-testid":`automation-prompt-toggle`,children:t(n?s.COMMON$VIEW_LESS:s.COMMON$VIEW_MORE)}):null]})})}var xe=e=>(0,B.jsxs)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,strokeWidth:2,stroke:`currentColor`,...e,children:[(0,B.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M10.343 3.94c.09-.542.56-.94 1.11-.94h1.093c.55 0 1.02.398 1.11.94l.149.894c.07.424.384.764.78.93.398.164.855.142 1.205-.108l.737-.527a1.125 1.125 0 0 1 1.45.12l.773.774c.39.389.44 1.002.12 1.45l-.527.737c-.25.35-.272.806-.107 1.204.165.397.505.71.93.78l.893.15c.543.09.94.56.94 1.109v1.094c0 .55-.397 1.02-.94 1.11l-.893.149c-.425.07-.765.383-.93.78-.165.398-.143.854.107 1.204l.527.738c.32.447.269 1.06-.12 1.45l-.774.773a1.125 1.125 0 0 1-1.449.12l-.738-.527c-.35-.25-.806-.272-1.204-.107-.397.165-.71.505-.78.929l-.15.894c-.09.542-.56.94-1.11.94h-1.094c-.55 0-1.019-.398-1.11-.94l-.148-.894c-.071-.424-.384-.764-.781-.93-.398-.164-.854-.142-1.204.108l-.738.527c-.447.32-1.06.269-1.45-.12l-.773-.774a1.125 1.125 0 0 1-.12-1.45l.527-.737c.25-.35.273-.806.108-1.204-.165-.397-.506-.71-.93-.78l-.894-.15c-.542-.09-.94-.56-.94-1.109v-1.094c0-.55.398-1.02.94-1.11l.894-.149c.424-.07.765-.383.93-.78.165-.398.143-.854-.108-1.204l-.526-.738a1.125 1.125 0 0 1 .12-1.45l.773-.773a1.125 1.125 0 0 1 1.45-.12l.737.527c.35.25.807.272 1.204.107.397-.165.71-.505.78-.929l.15-.894Z`}),(0,B.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z`})]}),Se=e=>(0,B.jsxs)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,strokeWidth:2,stroke:`currentColor`,...e,children:[(0,B.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M6 3v12m0 0a3 3 0 1 0 3 3M6 15a3 3 0 0 1 3-3h6a3 3 0 0 0 3-3V3m0 0a3 3 0 1 0 0 0`}),(0,B.jsx)(`circle`,{cx:6,cy:3,r:2}),(0,B.jsx)(`circle`,{cx:18,cy:3,r:2}),(0,B.jsx)(`circle`,{cx:9,cy:18,r:2})]}),U=e=>(0,B.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,strokeWidth:2,stroke:`currentColor`,...e,children:(0,B.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M9 12.75 11.25 15 15 9.75M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z`})}),W=e=>(0,B.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,strokeWidth:2,stroke:`currentColor`,...e,children:(0,B.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M6.75 3v2.25M17.25 3v2.25M3 18.75V7.5a2.25 2.25 0 0 1 2.25-2.25h13.5A2.25 2.25 0 0 1 21 7.5v11.25m-18 0A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75m-18 0v-7.5A2.25 2.25 0 0 1 5.25 9h13.5A2.25 2.25 0 0 1 21 11.25v7.5`})}),Ce=e=>(0,B.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,strokeWidth:2,stroke:`currentColor`,...e,children:(0,B.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M14.857 17.082a23.848 23.848 0 0 0 5.454-1.31A8.967 8.967 0 0 1 18 9.75V9A6 6 0 0 0 6 9v.75a8.967 8.967 0 0 1-2.312 6.022c1.733.64 3.56 1.085 5.455 1.31m5.714 0a24.255 24.255 0 0 1-5.714 0m5.714 0a3 3 0 1 1-5.714 0`})});function G({icon:e,label:t,children:n}){return(0,B.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,B.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,B.jsx)(`span`,{className:`size-3.5 text-muted`,children:e}),(0,B.jsx)(`span`,{className:`text-xs font-medium text-muted`,children:t})]}),(0,B.jsx)(`div`,{className:`text-sm text-content`,children:n})]})}function we({branch:e}){return(0,B.jsx)(`span`,{className:`inline-flex items-center rounded-full border border-[var(--oh-border)] bg-surface-raised px-2.5 py-0.5 text-xs text-muted`,children:e})}var K=60;function Te({filter:e}){let{t}=o(`openhands`),[n,r]=(0,z.useState)(!1),i=e.length>K;return(0,B.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,B.jsx)(`span`,{className:`break-all`,children:i&&!n?`${e.slice(0,K)}…`:e}),i&&(0,B.jsx)(`button`,{type:`button`,onClick:()=>r(!n),"aria-expanded":n,className:`text-xs text-muted hover:text-content self-start`,children:t(n?s.SETTINGS$SKILLS_SHOW_LESS:s.SETTINGS$SKILLS_SHOW_MORE)})]})}function Ee({automation:e}){let{t}=o(`openhands`),n=e.trigger.type===`event`,r=e.trigger.schedule??``;e.trigger.schedule_human&&(r=e.timezone?`${e.trigger.schedule_human} (${e.timezone})`:e.trigger.schedule_human);let i=t(n?s.AUTOMATIONS$DETAIL$TRIGGER_EVENT:s.AUTOMATIONS$DETAIL$TRIGGER_SCHEDULE);return(0,B.jsx)(H,{icon:(0,B.jsx)(xe,{className:`size-4`}),title:t(s.AUTOMATIONS$DETAIL$CONFIGURATION),children:(0,B.jsxs)(`div`,{className:`grid grid-cols-2 gap-x-4 gap-y-5`,children:[e.repository&&(0,B.jsx)(G,{icon:(0,B.jsx)(Se,{className:`size-3.5`}),label:t(s.AUTOMATIONS$DETAIL$REPOSITORIES),children:(0,B.jsxs)(`span`,{className:`flex items-center gap-1`,children:[e.repository,e.branch&&(0,B.jsx)(we,{branch:e.branch})]})}),(0,B.jsx)(G,{icon:(0,B.jsx)(U,{className:`size-3.5`}),label:t(s.AUTOMATIONS$DETAIL$TRIGGER),children:i}),!n&&(0,B.jsx)(G,{icon:(0,B.jsx)(W,{className:`size-3.5`}),label:t(s.AUTOMATIONS$DETAIL$SCHEDULE),children:r}),n&&e.trigger.source&&(0,B.jsx)(G,{icon:(0,B.jsx)(de,{className:`size-3.5`}),label:t(s.AUTOMATIONS$DETAIL$EVENT_SOURCE),children:e.trigger.source}),n&&e.trigger.on&&(0,B.jsx)(G,{icon:(0,B.jsx)(j,{className:`size-3.5`}),label:t(s.AUTOMATIONS$DETAIL$EVENT_TYPE),children:I(e.trigger.on)}),n&&e.trigger.filter&&(0,B.jsx)(G,{icon:(0,B.jsx)(A,{className:`size-3.5`}),label:t(s.AUTOMATIONS$DETAIL$EVENT_FILTER),children:(0,B.jsx)(Te,{filter:e.trigger.filter})}),(0,B.jsx)(G,{icon:(0,B.jsx)(re,{className:`size-3.5`}),label:t(s.AUTOMATIONS$DETAIL$MODEL),children:e.model??t(s.COMMON$ACTIVE_PROFILE)}),e.notification&&(0,B.jsx)(G,{icon:(0,B.jsx)(Ce,{className:`size-3.5`}),label:t(s.AUTOMATIONS$DETAIL$NOTIFICATION),children:e.notification})]})})}var De=e=>(0,B.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,strokeWidth:2,stroke:`currentColor`,...e,children:(0,B.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M14.25 6.087c0-.355.186-.676.401-.959.221-.29.349-.634.349-1.003 0-1.036-1.007-1.875-2.25-1.875s-2.25.84-2.25 1.875c0 .369.128.713.349 1.003.215.283.401.604.401.959v0a.64.64 0 0 1-.657.643 48.39 48.39 0 0 1-4.163-.3c.186 1.613.293 3.25.315 4.907a.656.656 0 0 1-.658.663v0c-.355 0-.676-.186-.959-.401a1.647 1.647 0 0 0-1.003-.349c-1.036 0-1.875 1.007-1.875 2.25s.84 2.25 1.875 2.25c.369 0 .713-.128 1.003-.349.283-.215.604-.401.959-.401v0c.31 0 .555.26.532.57a48.039 48.039 0 0 1-.642 5.056c1.518.19 3.058.309 4.616.354a.64.64 0 0 0 .657-.643v0c0-.355-.186-.676-.401-.959a1.647 1.647 0 0 1-.349-1.003c0-1.035 1.008-1.875 2.25-1.875 1.243 0 2.25.84 2.25 1.875 0 .369-.128.713-.349 1.003-.215.283-.4.604-.4.959v0c0 .333.277.599.61.58a48.1 48.1 0 0 0 5.427-.63 48.05 48.05 0 0 0 .582-4.717.532.532 0 0 0-.533-.57v0c-.355 0-.676.186-.959.401-.29.221-.634.349-1.003.349-1.035 0-1.875-1.007-1.875-2.25s.84-2.25 1.875-2.25c.37 0 .713.128 1.003.349.283.215.604.401.96.401v0a.656.656 0 0 0 .658-.663 48.422 48.422 0 0 0-.37-5.36c-1.886.342-3.81.574-5.766.689a.578.578 0 0 1-.61-.58v0Z`})});function Oe({name:e}){return(0,B.jsx)(`span`,{className:`inline-flex items-center rounded-full border border-[var(--oh-border)] bg-[var(--oh-surface-deep)] px-3.5 py-1.5 text-sm text-content`,children:e})}function ke({plugins:e}){let{t}=o(`openhands`);return(0,B.jsx)(H,{icon:(0,B.jsx)(De,{className:`size-4`}),title:t(s.AUTOMATIONS$DETAIL$PLUGINS),children:(0,B.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:e.map(e=>(0,B.jsx)(Oe,{name:e},e))})})}var q=e=>(0,B.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,strokeWidth:2,stroke:`currentColor`,...e,children:(0,B.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M16.023 9.348h4.992v-.001M2.985 19.644v-4.992m0 0h4.992m-4.993 0 3.181 3.183a8.25 8.25 0 0 0 13.803-3.7M4.031 9.865a8.25 8.25 0 0 1 13.803-3.7l3.181 3.182`})});function J(e,t){return new Date(e).toLocaleDateString(t,{year:`numeric`,month:`short`,day:`numeric`})}function Ae(e,t,n){let r=Date.now()-new Date(e).getTime(),i=Math.floor(r/6e4),a=Math.floor(r/36e5),o=Math.floor(r/864e5);return i<1?n(s.AUTOMATIONS$DETAIL$TIME_JUST_NOW):i<60?n(s.AUTOMATIONS$DETAIL$TIME_MINUTES_AGO,{count:i}):a<24?n(s.AUTOMATIONS$DETAIL$TIME_HOURS_AGO,{count:a}):o===1?n(s.AUTOMATIONS$DETAIL$TIME_YESTERDAY):o<7?n(s.AUTOMATIONS$DETAIL$TIME_DAYS_AGO,{count:o}):J(e,t)}function je({createdAt:e,lastRunAt:t}){let{t:n,i18n:r}=o(`openhands`),i=r.language;return(0,B.jsx)(H,{icon:(0,B.jsx)(q,{className:`size-4`}),title:n(s.AUTOMATIONS$DETAIL$ACTIVITY),children:(0,B.jsxs)(`div`,{className:`grid grid-cols-2 gap-x-4`,children:[(0,B.jsx)(G,{icon:(0,B.jsx)(W,{className:`size-3.5`}),label:n(s.AUTOMATIONS$DETAIL$CREATED),children:J(e,i)}),(0,B.jsx)(G,{icon:(0,B.jsx)(L,{className:`size-3.5`}),label:n(s.AUTOMATIONS$DETAIL$LAST_RUN),children:t?Ae(t,i,n):n(s.AUTOMATIONS$DETAIL$TIME_NEVER)})]})})}var Me=e=>(0,B.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,strokeWidth:2,stroke:`currentColor`,...e,children:(0,B.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`m9.75 9.75 4.5 4.5m0-4.5-4.5 4.5M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z`})}),Ne={[R.COMPLETED]:{label:s.AUTOMATIONS$DETAIL$SUCCESSFUL,style:`border-[var(--oh-success)]/50 bg-[var(--oh-success)]/10 text-[var(--oh-success)]`},[R.FAILED]:{label:s.AUTOMATIONS$DETAIL$FAILED,style:`border-[var(--oh-danger)]/50 bg-[var(--oh-danger)]/10 text-danger`},[R.PENDING]:{label:s.AUTOMATIONS$DETAIL$PENDING,style:`border-[var(--oh-border)] bg-surface-raised text-muted`},[R.RUNNING]:{label:s.AUTOMATIONS$DETAIL$RUNNING,style:`border-[var(--oh-border)] bg-surface-raised text-muted`}};function Pe({status:e}){switch(e){case R.COMPLETED:return(0,B.jsx)(U,{"data-testid":`run-status-icon-completed`,className:`size-3.5`});case R.FAILED:return(0,B.jsx)(Me,{"data-testid":`run-status-icon-failed`,className:`size-3.5`});default:return(0,B.jsx)(L,{"data-testid":`run-status-icon-pending`,className:`size-3.5`})}}function Fe({status:e}){let{t}=o(`openhands`),n=Ne[e];return(0,B.jsxs)(`span`,{className:h(`inline-flex items-center gap-1.5 rounded-full border px-2.5 py-1 text-xs font-medium`,n.style),children:[(0,B.jsx)(Pe,{status:e}),t(n.label)]})}var Ie=20;function Le(e){return e.kind===`BashOutput`}var Re=class e{static async listOutputs(t,n,r){let i=[],a;for(let o=0;o<Ie;o+=1){let o=await e.searchEvents(t,n,{kind__eq:`BashOutput`,command_id__eq:r,sort_order:`TIMESTAMP`,...a?{page_id:a}:{}});if(o.items.forEach(e=>{Le(e)&&i.push(e)}),!o.next_page_id)break;a=o.next_page_id}return i}static async searchEvents(e,t,n){let r=_().backend;if(r.kind===`cloud`){if(!e)throw Error(`BashService.listOutputs requires a conversation URL on cloud backends`);let i=new URLSearchParams;return Object.entries(n).forEach(([e,t])=>{t!=null&&i.set(e,String(t))}),y({backend:r,method:`GET`,hostOverride:g(e),path:`/api/bash/bash_events/search?${i.toString()}`,authMode:`session-api-key`,sessionApiKey:t})}return new l(v({...e?{conversationUrl:e}:{},sessionApiKey:t})).searchEvents(n)}},ze=[`bash-command-logs`];function Be(e){switch(e){case`MISSING`:return`missing`;case`PAUSED`:return`paused`;case`STARTING`:return`starting`;case`ERROR`:return`errored`;case`RUNNING`:case null:case void 0:default:return null}}function Ve(e){if(!c.isAxiosError(e))return null;if(!e.response)return`unreachable`;let t=e.response.status;return t===404||t>=500?`unreachable`:null}function He(e){let{conversationId:t,bashCommandId:n,enabled:r=!0}=e,i=p(),o=D(r?t??null:null),s=o.data,c=s?.conversation_url??null,l=s?.session_api_key??null,u=i.backend.kind===`cloud`,d=o.isFetched,f=null,m=!1;u&&d&&(s?f=Be(s.sandbox_status)??(s.conversation_url?null:`missing`):m=!0);let h=r&&!!n&&(u?!!c:!0)&&!f&&!m,g=a({queryKey:[...ze,n,c,l,i.backend.id,i.orgId],queryFn:()=>Re.listOutputs(c,l,n),enabled:h,staleTime:60*1e3,gcTime:300*1e3,retry:!1}),_=u?Ve(g.error):null,v=f??_;return{data:g.data,error:_?null:g.error,isFetching:g.isFetching,isPending:g.isPending,isResolvingConversation:u&&o.isPending,conversationMissing:m,sandboxIssue:v}}var Ue=4e3;function We(e,t){return e.length<=t?e:`…(truncated)…\n${e.slice(e.length-t)}`}function Ge({automationName:e,automationPrompt:t,errorDetail:n,stderr:r,runId:i}){let a=r?.trim()||n?.trim()||``,o=a?We(a,Ue):`No error output was captured for this run.`,s=e?.trim(),c=[`${s?`The scheduled automation "${s}" failed during a run.`:`A scheduled automation failed during a run.`} Please investigate the error and fix the root cause.`],l=t?.trim();return l&&c.push(``,`What the automation was set up to do:`,l),c.push(``,`Error output from the failed run (run ${i}):`,o,``,`Please diagnose why it failed and propose or implement a fix.`),c.join(`
|
|
2
|
-
`)}function Y({run:e,automation:t,stderr:n}){let{t:r}=o(`openhands`),{navigate:i}=S(),a=w();return(0,B.jsx)(x,{testId:`debug-automation-button`,type:`button`,variant:`primary`,onClick:()=>{if(a.isPending)return;let r=Ge({automationName:t?.name,automationPrompt:t?.prompt,errorDetail:e.error_detail,stderr:n,runId:e.id});a.mutate({query:r},{onSuccess:e=>{i(`/conversations/${e.conversation_id}`)}})},isDisabled:a.isPending,"aria-busy":a.isPending,children:r(s.AUTOMATIONS$DETAIL$DEBUG_WITH_OPENHANDS)})}var Ke={missing:s.AUTOMATIONS$DETAIL$LOGS_SANDBOX_MISSING,paused:s.AUTOMATIONS$DETAIL$LOGS_SANDBOX_PAUSED,starting:s.AUTOMATIONS$DETAIL$LOGS_SANDBOX_STARTING,errored:s.AUTOMATIONS$DETAIL$LOGS_SANDBOX_ERROR,unreachable:s.AUTOMATIONS$DETAIL$LOGS_SANDBOX_UNREACHABLE};function X(e,t){return[...e].sort((e,t)=>{let n=e.timestamp.localeCompare(t.timestamp);return n===0?(e.order??0)-(t.order??0):n}).map(e=>e[t]??``).join(``)}function qe({conversationId:e,bashCommandId:t,isOpen:n,onClose:r,run:i,automation:a}){let{t:c}=o(`openhands`),[l,u]=(0,z.useState)(`stdout`),{data:d,isFetching:f,isResolvingConversation:p,sandboxIssue:m,conversationMissing:g,error:_}=He({conversationId:e,bashCommandId:t,enabled:n});(0,z.useEffect)(()=>{n&&u(`stdout`)},[n,t]),(0,z.useEffect)(()=>{if(!n)return;let e=e=>{e.key===`Escape`&&r()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[n,r]);let{stdout:v,stderr:y}=(0,z.useMemo)(()=>d?{stdout:X(d,`stdout`),stderr:X(d,`stderr`)}:{stdout:``,stderr:``},[d]);if(!n)return null;let x=p||f&&!d,S=!t,C=l===`stdout`?v:y,w=`border-b-2 px-3 py-2 text-sm font-normal transition-colors focus:outline-none`,T=`border-[var(--oh-primary)] text-white`,E=`border-transparent text-muted hover:text-content`;return(0,B.jsxs)(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center p-4`,role:`dialog`,"aria-modal":`true`,"aria-label":c(s.AUTOMATIONS$DETAIL$LOGS_TITLE),children:[(0,B.jsx)(`div`,{className:`absolute inset-0 bg-black/60`,onClick:r,onKeyDown:e=>{e.key===`Escape`&&r()},role:`presentation`}),(0,B.jsxs)(`div`,{className:`relative flex max-h-[80vh] w-full max-w-3xl flex-col rounded-xl border border-[var(--oh-border)] bg-[var(--oh-surface)] p-6`,children:[(0,B.jsx)(`button`,{type:`button`,onClick:r,className:`absolute right-4 top-4 text-muted hover:text-foreground`,"aria-label":c(s.AUTOMATIONS$CANCEL),children:(0,B.jsx)(k,{className:`size-5`})}),(0,B.jsx)(`h2`,{className:h(`pr-8`,b),children:c(s.AUTOMATIONS$DETAIL$LOGS_TITLE)}),(0,B.jsxs)(`div`,{role:`tablist`,"aria-label":c(s.AUTOMATIONS$DETAIL$LOGS_TITLE),className:`mt-4 flex gap-1 border-b border-[var(--oh-border)]`,children:[(0,B.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":l===`stdout`,"aria-controls":`run-logs-panel-stdout`,id:`run-logs-tab-stdout`,tabIndex:l===`stdout`?0:-1,onClick:()=>u(`stdout`),className:`${w} ${l===`stdout`?T:E}`,children:c(s.AUTOMATIONS$DETAIL$LOGS_TAB_OUTPUT)}),(0,B.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":l===`stderr`,"aria-controls":`run-logs-panel-stderr`,id:`run-logs-tab-stderr`,tabIndex:l===`stderr`?0:-1,onClick:()=>u(`stderr`),className:`${w} ${l===`stderr`?T:E}`,children:c(s.AUTOMATIONS$DETAIL$LOGS_TAB_ERROR)})]}),(0,B.jsxs)(`div`,{role:`tabpanel`,id:`run-logs-panel-${l}`,"aria-labelledby":`run-logs-tab-${l}`,className:`mt-3 min-h-[12rem] flex-1 overflow-auto rounded-lg border border-[var(--oh-border)] bg-black/40 p-4 font-mono text-xs`,children:[S&&(0,B.jsx)(`p`,{className:`text-muted italic`,children:c(s.AUTOMATIONS$DETAIL$LOGS_NO_COMMAND)}),!S&&g&&(0,B.jsx)(`p`,{className:`text-muted italic`,children:c(s.AUTOMATIONS$DETAIL$LOGS_CONVERSATION_MISSING)}),!S&&!g&&m&&(0,B.jsx)(`p`,{"data-testid":`run-logs-sandbox-issue-${m}`,className:`text-muted italic`,children:c(Ke[m])}),!S&&!g&&!m&&x&&(0,B.jsx)(`p`,{className:`text-muted italic`,children:c(s.AUTOMATIONS$DETAIL$LOGS_LOADING)}),!S&&!g&&!m&&!x&&_&&!d&&(0,B.jsxs)(`p`,{className:`text-danger`,children:[c(s.AUTOMATIONS$DETAIL$LOGS_ERROR),`: `,String(_)]}),!x&&!m&&d&&(0,B.jsx)(`pre`,{"data-testid":`run-logs-output-${l}`,className:`whitespace-pre-wrap break-words ${l===`stderr`?`text-danger`:`text-content`}`,children:C.length>0?C:(0,B.jsx)(`span`,{className:`text-muted italic`,children:c(s.AUTOMATIONS$DETAIL$LOGS_EMPTY)})})]}),i?.status===R.FAILED&&(0,B.jsx)(`div`,{className:`mt-4 flex justify-end`,children:(0,B.jsx)(Y,{run:i,automation:a,stderr:y})})]})]})}function Je(e,t){return new Date(e).toLocaleDateString(t,{weekday:`long`,year:`numeric`,month:`long`,day:`numeric`,hour:`numeric`,minute:`2-digit`})}function Ye(e){if(!e)return!0;let t=new Date(e).getTime();return Number.isNaN(t)||t===0}function Xe(e){return`/conversations/${e}`}function Ze({run:e,automation:t}){let{t:n,i18n:r}=o(`openhands`),i=!!e.conversation_id,a=!!e.bash_command_id,c=e.status===R.COMPLETED||e.status===R.FAILED,l=!i&&c,[u,d]=(0,z.useState)(!1),[f]=(0,z.useState)(()=>new Date().toISOString()),p=Je(Ye(e.started_at)?f:e.started_at,r.language),m=a?(0,B.jsx)(`button`,{type:`button`,onClick:e=>{e.stopPropagation(),e.preventDefault(),d(!0)},className:`rounded-md p-1 text-muted hover:bg-surface-raised hover:text-foreground focus:bg-surface-raised focus:outline-none`,"aria-label":n(s.AUTOMATIONS$DETAIL$LOGS_VIEW,{timestamp:p}),title:n(s.AUTOMATIONS$DETAIL$LOGS_VIEW_SHORT),children:(0,B.jsx)(E,{className:`size-4`})}):null,h=(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,B.jsx)(`span`,{className:`text-sm text-content`,children:p}),l&&(0,B.jsxs)(`span`,{className:`text-xs text-muted italic`,children:[`(`,n(s.AUTOMATIONS$DETAIL$NO_CONVERSATION),`)`]})]}),(0,B.jsxs)(`div`,{className:`flex items-center gap-2`,children:[m,(0,B.jsx)(Fe,{status:e.status})]})]});return(0,B.jsxs)(B.Fragment,{children:[i&&e.conversation_id?(0,B.jsx)(`a`,{href:Xe(e.conversation_id),className:`flex items-center justify-between px-5 py-3 transition-colors cursor-pointer hover:bg-surface-raised focus:bg-surface-raised focus:outline-none`,"aria-label":`View conversation for run at ${p}`,children:h}):(0,B.jsx)(`div`,{className:`flex items-center justify-between px-5 py-3 cursor-default`,children:h}),a&&(0,B.jsx)(qe,{conversationId:e.conversation_id,bashCommandId:e.bash_command_id,isOpen:u,onClose:()=>d(!1),run:e,automation:t})]})}var Z=20;function Qe({automation:e}){let{t}=o(`openhands`),[n,r]=(0,z.useState)(Z),{data:i,isLoading:a}=M({id:e.id,limit:n,offset:0}),c=i?i.total>i.runs.length:!1;return(0,B.jsxs)(`div`,{className:`rounded-2xl border border-[var(--oh-border)] bg-[var(--oh-surface)]`,children:[(0,B.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-[var(--oh-border)] px-5 py-3`,children:[(0,B.jsx)(`span`,{className:`size-4 text-muted`,children:(0,B.jsx)(q,{className:`size-4`})}),(0,B.jsx)(`h3`,{className:`text-sm font-medium text-content`,children:t(s.AUTOMATIONS$DETAIL$ACTIVITY_LOG)})]}),a&&(0,B.jsx)(`div`,{className:`space-y-1 p-5`,children:Array.from({length:3}).map((e,t)=>(0,B.jsxs)(`div`,{className:`flex items-center justify-between py-3`,children:[(0,B.jsx)(`div`,{className:`h-5 w-64 animate-pulse rounded bg-surface-raised`}),(0,B.jsx)(`div`,{className:`h-6 w-24 animate-pulse rounded-full bg-surface-raised`})]},`skeleton-${t}`))}),!a&&i?.runs.length===0&&(0,B.jsx)(`p`,{className:`px-5 py-8 text-center text-sm text-muted`,children:t(s.AUTOMATIONS$DETAIL$NO_RUNS)}),!a&&i&&i.runs.length>0&&(0,B.jsxs)(`div`,{children:[i.runs.map((t,n)=>(0,B.jsx)(`div`,{className:n>0?`border-t border-[var(--oh-border)]`:``,children:(0,B.jsx)(Ze,{run:t,automation:e})},t.id)),c&&(0,B.jsx)(`div`,{className:`border-t border-[var(--oh-border)] px-5 py-3`,children:(0,B.jsx)(`button`,{type:`button`,onClick:()=>r(e=>e+Z),className:`text-sm text-muted hover:text-foreground`,children:t(s.AUTOMATIONS$DETAIL$LOAD_MORE_RUNS)})})]})]})}function Q({className:e}){return(0,B.jsx)(`div`,{className:h(`animate-pulse rounded bg-surface-raised`,e)})}function $(){return(0,B.jsxs)(`div`,{className:`flex flex-col gap-4`,"data-testid":`detail-skeleton`,children:[(0,B.jsx)(Q,{className:`h-5 w-40`}),(0,B.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,B.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,B.jsx)(Q,{className:`h-6 w-48`}),(0,B.jsx)(Q,{className:`h-6 w-16 rounded-full`})]}),(0,B.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,B.jsx)(Q,{className:`h-6 w-11 rounded-full`}),(0,B.jsx)(Q,{className:`h-8 w-8`})]})]}),(0,B.jsx)(Q,{className:`h-5 w-96`}),(0,B.jsx)(Q,{className:`h-36 w-full rounded-2xl`}),(0,B.jsx)(Q,{className:`h-72 w-full rounded-2xl`}),(0,B.jsx)(Q,{className:`h-32 w-full rounded-2xl`}),(0,B.jsx)(Q,{className:`h-40 w-full rounded-2xl`})]})}function $e(){let{t:e}=o(`openhands`);return(0,B.jsxs)(`div`,{className:`flex flex-col items-center justify-center py-20`,children:[(0,B.jsx)(P,{className:`size-12 text-muted`}),(0,B.jsx)(`p`,{className:`mt-4 text-sm font-medium text-content`,children:e(s.AUTOMATIONS$DETAIL$NOT_FOUND_TITLE)}),(0,B.jsx)(`p`,{className:`mt-2 text-sm text-muted`,children:e(s.AUTOMATIONS$DETAIL$NOT_FOUND_MESSAGE)}),(0,B.jsx)(`div`,{className:`mt-6`,children:(0,B.jsx)(V,{})})]})}var et=r(function(){let{t:e}=o(`openhands`),{automationId:t}=i(),{navigate:n}=S(),[r,a]=(0,z.useState)(!1),[c,l]=(0,z.useState)(!1),{data:m,isLoading:h,refetch:g}=N(),_=m?.status===`ok`,v=p(),y=(0,z.useRef)(v.backend.id).current!==v.backend.id,{data:b,isLoading:x,isError:w,error:T,refetch:E}=ee({id:t??``,enabled:_&&!y}),{trackPrebuiltAutomationEnabled:D}=C(),O=pe(),k=me(),A=F(),j=w&&u(T)&&T.response?.status===404;if(h)return(0,B.jsx)(`div`,{className:`min-h-full`,children:(0,B.jsx)(`div`,{className:`p-6 max-w-4xl mx-auto`,children:(0,B.jsx)($,{})})});if(!_)return(0,B.jsx)(`div`,{className:`min-h-full`,children:(0,B.jsx)(`div`,{className:`p-6 max-w-4xl mx-auto`,children:(0,B.jsx)(ce,{onRetry:g})})});if(x)return(0,B.jsx)(`div`,{className:`min-h-full`,children:(0,B.jsx)(`div`,{className:`p-6 max-w-4xl mx-auto`,children:(0,B.jsx)($,{})})});if(j)return(0,B.jsx)(`div`,{className:`min-h-full`,children:(0,B.jsx)(`div`,{className:`p-6 max-w-4xl mx-auto`,children:(0,B.jsx)($e,{})})});if(w||!b)return(0,B.jsx)(`div`,{className:`min-h-full`,children:(0,B.jsx)(`div`,{className:`p-6 max-w-4xl mx-auto`,children:(0,B.jsx)(ne,{onRetry:()=>E()})})});let M=()=>{let e=!b.enabled;O.mutate({id:b.id,enabled:e}),e&&D({automationId:b.id,automationName:b.name})},P=()=>{k.mutate(b.id,{onSuccess:()=>{n?.(`/automations`)}})},I=()=>{A.mutate(b.id,{onSuccess:()=>{f(e(s.AUTOMATIONS$RUN_NOW_SUCCESS))},onError:t=>{d(u(t)?t.response?.data?.message||t.message||e(s.AUTOMATIONS$RUN_NOW_ERROR):t.message||e(s.AUTOMATIONS$RUN_NOW_ERROR))}})},L=v.backend.kind===`local`;return(0,B.jsx)(`div`,{className:`min-h-full`,children:(0,B.jsx)(`div`,{className:`p-6 max-w-4xl mx-auto`,children:(0,B.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,B.jsx)(V,{}),(0,B.jsx)(_e,{automation:b,onToggle:M,onEdit:L?()=>l(!0):void 0,onDelete:()=>a(!0),onRunNow:I,isRunningNow:A.isPending}),b.prompt&&(0,B.jsx)(be,{prompt:b.prompt}),(0,B.jsx)(Ee,{automation:b}),b.plugins&&b.plugins.length>0&&(0,B.jsx)(ke,{plugins:b.plugins}),(0,B.jsx)(je,{createdAt:b.created_at,lastRunAt:b.last_triggered_at}),(0,B.jsx)(Qe,{automation:b}),(0,B.jsx)(ae,{automationName:b.name,isOpen:r,onConfirm:P,onCancel:()=>a(!1)}),L&&(0,B.jsx)(ue,{automation:b,isOpen:c,onClose:()=>l(!1)})]})})})});export{et as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as e}from"./rolldown-runtime-BFRubm34.js";import{Ct as t,bt as n,xt as r}from"./vendor-styling-CI0PQ3ab.js";import{L as i}from"./vendor~entry.client~root~root-layout~index-redirect~home~conversation-panel~conversation~la~byh8a1g4-XNPdpuO8.js";import{t as a}from"./Trans-De9RwQhA.js";import{t as o}from"./useTranslation-Cgy4JA_g.js";import{t as s}from"./declaration-B9kpCaYl.js";import{y as c}from"./vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~ncdxw0bh-ClHnt5lR.js";import{A as l,j as u,n as d}from"./active-backend-context-DRFevVIj.js";import{t as f}from"./createLucideIcon-CVAsW2Yo.js";import{t as p}from"./check-Bvi71siz.js";import{t as m}from"./utils-CE0lDWtb.js";import{t as h}from"./modal-backdrop-zVwfOJZr.js";import{n as g}from"./modal-classes-DPqxSyuP.js";import{t as _}from"./brand-button-DKPMEKcW.js";import{n as v}from"./navigation-context-DPs2G0X8.js";import{t as y}from"./styled-tooltip-DsKsFjuq.js";import{u as b}from"./dropdown-classes-CgQ45JmQ.js";import{t as x}from"./modal-close-button-CTCX4nCH.js";import{t as S}from"./use-tracking-CqODdfO4.js";import{n as C,t as ee}from"./recommended-automations-launcher-CXaEK1rW.js";import{n as te,t as w}from"./context-menu-list-item-DBFzplWW.js";import{t as T}from"./u-edit-DJ90xc8Z.js";import{t as E}from"./folder-mMWFvaw0.js";import{t as D}from"./search-BsjCEFNf.js";import{a as O,i as k,n as A,o as j,r as M,t as N}from"./extension-module-card-classes-9V3J9J_b.js";import{n as P}from"./skill-card-pill-row-D2bUe2kB.js";import{n as F,t as I}from"./use-launch-skill-in-chat-BnoDgvAy.js";import{_ as ne,b as re,c as L,d as R,f as z,g as B,h as V,i as ie,l as H,m as U,n as ae,o as oe,p as W,r as se,s as ce,t as le,u as G,v as ue,x as de,y as fe}from"./edit-automation-modal-BoibW8cd.js";var pe=f(`file-text`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 9H8`,key:`b1mrlr`}],[`path`,{d:`M16 13H8`,key:`t4e002`}],[`path`,{d:`M16 17H8`,key:`z1uh3a`}]]),me=f(`grid-2x2`,[[`path`,{d:`M12 3v18`,key:`108xh3`}],[`path`,{d:`M3 12h18`,key:`1i2n21`}],[`rect`,{x:`3`,y:`3`,width:`18`,height:`18`,rx:`2`,key:`h1oib`}]]),he=f(`rows-3`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}],[`path`,{d:`M21 9H3`,key:`1338ky`}],[`path`,{d:`M21 15H3`,key:`9uk58r`}]]),K=e(t(),1),q=n();function ge({value:e,onChange:t,className:n}){let{t:r}=o(`openhands`);return(0,q.jsxs)(`div`,{className:m(`relative flex min-w-0 flex-1 items-center`,`h-9 rounded-lg border border-[var(--oh-border)] bg-base-secondary`,`focus-within:border-white/40 focus-within:ring-1 focus-within:ring-white/20`,`transition-colors`,n),children:[(0,q.jsx)(D,{className:`ml-3 size-4 shrink-0 text-tertiary-alt`,"aria-hidden":!0}),(0,q.jsx)(`input`,{type:`text`,value:e,onChange:e=>t(e.target.value),placeholder:r(s.AUTOMATIONS$SEARCH_PLACEHOLDER),"aria-label":r(s.AUTOMATIONS$SEARCH_PLACEHOLDER),className:`min-w-0 flex-1 border-0 bg-transparent px-3 text-sm text-white outline-none placeholder:text-tertiary-alt`})]})}function J(e,t){let n=[];if(e.repository&&n.push({id:`repository`,node:(0,q.jsxs)(`span`,{className:m(k,`gap-1`),children:[(0,q.jsx)(E,{className:`size-3 shrink-0`}),e.repository]})}),e.trigger.type===`event`){let t=[e.trigger.on?L(e.trigger.on):``,e.trigger.source?`(${e.trigger.source})`:``].filter(Boolean).join(` `);n.push({id:`event-trigger`,node:(0,q.jsxs)(`span`,{className:m(k,`gap-1`),children:[(0,q.jsx)(G,{className:`size-3 shrink-0`}),t]})})}else n.push({id:`schedule`,node:(0,q.jsxs)(`span`,{className:m(k,`gap-1`),children:[(0,q.jsx)(R,{className:`size-3 shrink-0`}),t]})});return e.model&&n.push({id:`model`,node:(0,q.jsxs)(`span`,{className:m(k,`gap-1`),children:[(0,q.jsx)(H,{className:`size-3 shrink-0`}),e.model]})}),n}function Y({automation:e,t,canManage:n,onRunNow:r,isRunPending:i,onView:a,onEdit:o,onToggle:c,onDelete:l}){return[...n?[{label:t(s.AUTOMATIONS$RUN_NOW),icon:(0,q.jsx)(z,{className:`size-4`}),onClick:()=>r(e.id),disabled:i||!e.enabled}]:[],{label:t(s.COMMON$VIEW),icon:(0,q.jsx)(pe,{className:`size-4`,"aria-hidden":!0}),onClick:a},...n&&o?[{label:t(s.AUTOMATIONS$EDIT),icon:(0,q.jsx)(T,{className:`size-4`}),onClick:()=>o(e.id)}]:[],...n?[{label:e.enabled?t(s.AUTOMATIONS$TURN_OFF):t(s.AUTOMATIONS$TURN_ON),icon:(0,q.jsx)(ce,{className:`size-4`}),onClick:()=>c(e.id,e.enabled)},{label:t(s.AUTOMATIONS$DELETE),icon:(0,q.jsx)(oe,{className:`size-4`}),onClick:()=>l(e.id)}]:[]]}function _e({automation:e,onToggle:t,onRunNow:n,isRunPending:r=!1,onDelete:i,onEdit:a}){let{navigate:c}=v(),{t:l}=o(`openhands`),u=W(`manage_automations`),d=e.trigger.schedule_human||e.trigger.type,f=(0,K.useMemo)(()=>J(e,d),[e,d]),p=()=>{c?.(`/automations/${e.id}`)},h=Y({automation:e,t:l,canManage:u,onRunNow:n,isRunPending:r,onView:p,onEdit:a,onToggle:t,onDelete:i}),g=()=>{p()};return(0,q.jsxs)(`div`,{role:`link`,tabIndex:0,"data-testid":`automation-card-${e.id}`,onClick:g,onKeyDown:e=>{e.key===`Enter`&&g()},className:m(`flex min-w-0 flex-col gap-3 overflow-hidden p-4 text-left`,O,M),children:[(0,q.jsxs)(`header`,{className:`flex items-start justify-between gap-3`,children:[(0,q.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-1.5`,children:[(0,q.jsxs)(`h3`,{className:`flex items-center gap-2 truncate text-sm font-semibold text-white`,children:[e.trigger.type===`event`?(0,q.jsx)(G,{className:`size-4 shrink-0 text-muted`}):(0,q.jsx)(R,{className:`size-4 shrink-0 text-muted`}),(0,q.jsx)(`span`,{className:`truncate`,children:e.name})]}),e.prompt?(0,q.jsx)(`p`,{className:`line-clamp-2 text-xs leading-relaxed text-tertiary-light`,children:e.prompt}):null]}),(0,q.jsxs)(`div`,{className:`flex shrink-0 items-center gap-0.5`,children:[u?(0,q.jsxs)(`button`,{type:`button`,"data-testid":`automation-run-now-${e.id}`,"aria-busy":r,disabled:r||!e.enabled,onClick:t=>{t.stopPropagation(),n(e.id)},className:B,children:[(0,q.jsx)(z,{className:`size-3.5 shrink-0`,"aria-hidden":!0}),l(s.AUTOMATIONS$RUN_NOW)]}):null,(0,q.jsx)(U,{items:h})]})]}),f.length>0?(0,q.jsx)(P,{pills:f,testId:`automation-pills-${e.id}`}):null]})}var ve=`overflow-hidden rounded-md border border-[var(--oh-border)] bg-base-secondary`,ye=[`h-11`,`border-t border-[var(--oh-border)] transition-colors`].join(` `),be=`hover:bg-interactive-hover-low outline-none focus:outline-none focus-visible:outline-none focus-visible:bg-interactive-hover-low`,X=`px-3 align-middle`,xe=[ye,be,`cursor-pointer`].join(` `),Se=`openhands-automations-view`;function Ce(){return typeof window>`u`?`grid`:window.localStorage.getItem(`openhands-automations-view`)===`list`?`list`:`grid`}function we(e){window.localStorage.setItem(Se,e)}function Te({automation:e,onToggle:t,onRunNow:n,isRunPending:r=!1,onDelete:i,onEdit:a}){let{navigate:c}=v(),{t:l}=o(`openhands`),u=W(`manage_automations`),d=e.trigger.schedule_human||e.trigger.type,f=(0,K.useMemo)(()=>J(e,d),[e,d]),p=()=>{c?.(`/automations/${e.id}`)},h=Y({automation:e,t:l,canManage:u,onRunNow:n,isRunPending:r,onView:p,onEdit:a,onToggle:t,onDelete:i}),g=()=>{p()};return(0,q.jsxs)(`tr`,{"data-testid":`automation-list-row-${e.id}`,onClick:g,onKeyDown:e=>{e.key===`Enter`&&g()},tabIndex:0,className:m(xe,`cursor-pointer`),children:[(0,q.jsx)(`td`,{className:X,children:(0,q.jsxs)(`div`,{className:`flex min-w-0 items-center gap-1.5`,children:[e.trigger.type===`event`?(0,q.jsx)(G,{className:`size-4 shrink-0 text-muted`}):(0,q.jsx)(R,{className:`size-4 shrink-0 text-muted`}),(0,q.jsx)(`span`,{className:`max-w-[40%] shrink-0 truncate text-sm font-medium text-white`,title:e.name,children:e.name}),f.length>0?(0,q.jsx)(`div`,{className:`min-w-0 flex-1`,children:(0,q.jsx)(P,{pills:f,testId:`automation-pills-${e.id}`})}):null]})}),(0,q.jsx)(`td`,{className:m(`w-0 whitespace-nowrap`,X),children:(0,q.jsxs)(`div`,{className:`flex items-center justify-end gap-0.5`,children:[u?(0,q.jsx)(y,{content:l(s.AUTOMATIONS$RUN_NOW),placement:`top`,children:(0,q.jsx)(`button`,{type:`button`,"data-testid":`automation-run-now-${e.id}`,"aria-label":l(s.AUTOMATIONS$RUN_NOW),"aria-busy":r,disabled:r||!e.enabled,onClick:t=>{t.stopPropagation(),n(e.id)},className:V,children:(0,q.jsx)(z,{className:`size-4 shrink-0`,"aria-hidden":!0})})}):null,(0,q.jsx)(U,{items:h})]})})]})}function Z({title:e,count:t,automations:n,view:r,onToggle:i,onRunNow:a,runPendingId:o=null,onDelete:s,onEdit:c}){return n.length===0?null:(0,q.jsxs)(`section`,{children:[(0,q.jsxs)(`div`,{className:`flex items-center`,children:[(0,q.jsx)(`h2`,{className:`text-base font-semibold text-foreground`,children:e}),(0,q.jsx)(C,{count:t})]}),r===`grid`?(0,q.jsx)(`div`,{className:m(`mt-3`,A),children:(0,q.jsx)(`div`,{className:N,children:n.map(e=>(0,q.jsx)(_e,{automation:e,onToggle:i,onRunNow:a,isRunPending:o===e.id,onDelete:s,onEdit:c},e.id))})}):(0,q.jsx)(`div`,{className:m(ve,`mt-3`),children:(0,q.jsx)(`table`,{className:`w-full min-w-full [&>tbody>tr:first-child]:border-t-0`,children:(0,q.jsx)(`tbody`,{children:n.map(e=>(0,q.jsx)(Te,{automation:e,onToggle:i,onRunNow:a,isRunPending:o===e.id,onDelete:s,onEdit:c},e.id))})})})]})}var Ee=e(r(),1);function De({icon:e,label:t,isSelected:n}){return(0,q.jsxs)(`span`,{className:`flex min-w-0 w-full items-center gap-2`,children:[(0,q.jsx)(`span`,{className:b,"aria-hidden":!0,children:(0,q.jsx)(e,{})}),(0,q.jsx)(`span`,{className:`min-w-0 flex-1 truncate`,children:t}),n?(0,q.jsx)(p,{className:`size-4 shrink-0`,"aria-hidden":!0}):null]})}var Q=[{value:`grid`,icon:me,labelKey:s.AUTOMATIONS$VIEW_GRID,testId:`automations-view-toggle-grid`},{value:`list`,icon:he,labelKey:s.AUTOMATIONS$VIEW_LIST,testId:`automations-view-toggle-list`}];function Oe({view:e,onChange:t,disabled:n=!1}){let{t:r}=o(`openhands`),[i,a]=(0,K.useState)(!1),[c,l]=(0,K.useState)(),u=(0,K.useRef)(null),d=(0,K.useRef)(null),f=(Q.find(t=>t.value===e)??Q[0]).icon;(0,K.useLayoutEffect)(()=>{if(!i||!u.current)return;let e=()=>{let e=u.current?.getBoundingClientRect();e&&l({position:`fixed`,zIndex:9999,top:e.bottom+4,right:window.innerWidth-e.right})};return e(),window.addEventListener(`resize`,e),window.addEventListener(`scroll`,e,!0),()=>{window.removeEventListener(`resize`,e),window.removeEventListener(`scroll`,e,!0)}},[i]),(0,K.useEffect)(()=>{if(!i)return;let e=e=>{let t=e.target;u.current?.contains(t)||d.current?.contains(t)||a(!1)},t=e=>{e.key===`Escape`&&a(!1)};return document.addEventListener(`mousedown`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`keydown`,t)}},[i]);let p=i&&c?(0,q.jsx)(te,{ref:d,theme:`popover`,className:`min-w-[10rem]`,children:Q.map(n=>(0,q.jsx)(`li`,{children:(0,q.jsx)(w,{testId:n.testId,onClick:()=>{t(n.value),a(!1)},className:`group`,children:(0,q.jsx)(De,{icon:n.icon,label:r(n.labelKey),isSelected:e===n.value})})},n.value))}):null;return(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`button`,{ref:u,type:`button`,"data-testid":`automations-view-toggle`,"aria-label":r(s.AUTOMATIONS$VIEW_MODE),"aria-haspopup":`menu`,"aria-expanded":i,"aria-disabled":n,disabled:n,onClick:()=>{n||a(e=>!e)},className:m(`inline-flex size-9 shrink-0 cursor-pointer items-center justify-center rounded-lg border border-[var(--oh-border)] bg-base-secondary text-white transition-colors hover:bg-[var(--oh-interactive-hover)] focus-visible:border-white/40 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-white/20`,`disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:bg-base-secondary`),children:(0,q.jsx)(f,{className:`size-4`,"aria-hidden":!0})}),i&&c&&typeof document<`u`?Ee.createPortal((0,q.jsx)(`div`,{style:c,children:p}),document.body):null]})}function ke(){return(0,q.jsxs)(`div`,{"data-testid":`automation-card-skeleton`,className:`${O} border border-transparent p-4`,children:[(0,q.jsxs)(`div`,{className:`flex items-start justify-between`,children:[(0,q.jsx)(`div`,{className:`h-5 w-40 animate-pulse rounded bg-surface-raised`}),(0,q.jsx)(`div`,{className:`h-5 w-10 animate-pulse rounded-full bg-surface-raised`})]}),(0,q.jsx)(`div`,{className:`mt-2 h-4 w-72 animate-pulse rounded bg-surface-raised`}),(0,q.jsxs)(`div`,{className:`mt-4 flex gap-2`,children:[(0,q.jsx)(`div`,{className:`h-7 w-32 animate-pulse rounded-full bg-surface-raised`}),(0,q.jsx)(`div`,{className:`h-7 w-28 animate-pulse rounded-full bg-surface-raised`}),(0,q.jsx)(`div`,{className:`h-7 w-24 animate-pulse rounded-full bg-surface-raised`})]})]})}var Ae=e=>(0,q.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,strokeWidth:2,stroke:`currentColor`,...e,children:(0,q.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`m19.5 8.25-7.5 7.5-7.5-7.5`})}),je=`https://docs.openhands.dev/openhands/usage/automations/overview`;function Me({children:e}){return(0,q.jsx)(`span`,{className:`whitespace-nowrap`,children:e})}function Ne({children:e}){return(0,q.jsx)(`code`,{"data-testid":`automations-create-instructions-example`,className:m(`mx-0.5 inline-block rounded-sm border border-[var(--oh-border-subtle)]`,`bg-[var(--oh-surface-raised)] px-1.5 py-0.5 align-baseline font-mono text-[11px] text-white`),children:e})}function Pe({children:e}){return(0,q.jsx)(q.Fragment,{children:e})}var Fe={example:(0,q.jsx)(Me,{}),cmd:(0,q.jsx)(Ne,{}),punct:(0,q.jsx)(Pe,{})};function $({onLaunch:e}={}){let{t}=o(`openhands`),n=I(),r=d(),{trackAutomationCreated:i}=S();return(0,q.jsxs)(`div`,{className:`flex flex-col gap-5`,children:[(0,q.jsxs)(`p`,{className:`text-sm leading-relaxed text-tertiary-light`,children:[(0,q.jsx)(a,{ns:`openhands`,i18nKey:s.AUTOMATIONS$EMPTY_OPTION_CONVERSATION_DESC,components:Fe}),` `,t(s.AUTOMATIONS$CREATE_INSTRUCTIONS_GUIDANCE)]}),(0,q.jsxs)(`div`,{className:`flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between`,children:[(0,q.jsx)(`a`,{href:je,target:`_blank`,rel:`noopener noreferrer`,className:`text-sm text-muted underline transition-colors hover:text-foreground`,children:t(s.AUTOMATIONS$EMPTY_LEARN_MORE)}),(0,q.jsx)(_,{type:`button`,variant:`primary`,testId:`automations-create-automation`,onClick:()=>{i({backendKind:r.backend.kind}),n(t(s.AUTOMATIONS$CREATE_AUTOMATION_PROMPT),e)},startContent:(0,q.jsx)(F,{className:`size-4`,"aria-hidden":!0}),children:t(s.AUTOMATIONS$CREATE_AUTOMATION_BUTTON)})]})]})}function Ie({collapsible:e=!1}){let{t}=o(`openhands`),[n,r]=(0,K.useState)(!e);return e?(0,q.jsxs)(`div`,{className:`w-full rounded-lg border border-[var(--oh-border)] bg-[var(--oh-surface)]`,children:[(0,q.jsxs)(`button`,{type:`button`,onClick:()=>r(!n),"aria-expanded":n,className:`flex w-full items-center justify-between rounded-lg p-4 text-left transition-colors hover:bg-surface-raised`,children:[(0,q.jsx)(`span`,{className:`text-sm font-normal text-content`,children:t(s.AUTOMATIONS$EMPTY_HOW_TO_CREATE_TITLE)}),(0,q.jsx)(Ae,{className:m(`size-5 text-muted transition-transform`,n&&`rotate-180`)})]}),n?(0,q.jsx)(`div`,{className:`px-4 pb-4`,children:(0,q.jsx)($,{})}):null]}):(0,q.jsxs)(`div`,{className:`w-full max-w-2xl`,children:[(0,q.jsx)(`h3`,{className:`text-center text-sm font-medium text-content`,children:t(s.AUTOMATIONS$EMPTY_HOW_TO_CREATE_TITLE)}),(0,q.jsx)(`div`,{className:`mt-4`,children:(0,q.jsx)($,{})})]})}function Le(){let{t:e}=o(`openhands`);return(0,q.jsxs)(`div`,{"data-testid":`automations-empty`,className:j,children:[(0,q.jsx)(`p`,{className:`text-sm text-white`,children:e(s.AUTOMATIONS$EMPTY)}),(0,q.jsx)(`p`,{className:`mt-1 text-xs text-tertiary-light`,children:e(s.AUTOMATIONS$EMPTY_HINT)}),(0,q.jsx)(`div`,{className:`mt-8 flex justify-center border-t border-[var(--oh-border)] pt-8`,children:(0,q.jsx)(Ie,{})})]})}function Re({isOpen:e,onClose:t}){let{t:n}=o(`openhands`);return e?(0,q.jsx)(h,{onClose:t,"aria-label":n(s.AUTOMATIONS$EMPTY_HOW_TO_CREATE_TITLE),children:(0,q.jsxs)(`div`,{"data-testid":`add-automation-modal`,className:`relative flex w-full max-w-lg flex-col rounded-xl border border-[var(--oh-border)] bg-base-secondary`,children:[(0,q.jsx)(x,{onClose:t,testId:`add-automation-modal-close`}),(0,q.jsx)(`header`,{className:`flex-shrink-0 px-6 pb-4 pt-6`,children:(0,q.jsx)(`h2`,{id:`add-automation-modal-title`,className:m(`pr-6`,g),children:n(s.AUTOMATIONS$EMPTY_HOW_TO_CREATE_TITLE)})}),(0,q.jsx)(`div`,{className:`px-6 pb-6`,children:(0,q.jsx)($,{onLaunch:t})})]})}):null}var ze=50,Be=i(function(){let{t:e}=o(`openhands`),[t,n]=(0,K.useState)(``),[r,i]=(0,K.useState)(()=>Ce()),[a,f]=(0,K.useState)(ze),[p,m]=(0,K.useState)(null),[h,g]=(0,K.useState)(null),[v,y]=(0,K.useState)(!1),b=d().backend.kind===`local`,{data:x,isLoading:C,refetch:te}=ne(),w=x?.status===`ok`,{data:T,isLoading:E,isError:D,refetch:O}=ue({limit:a,offset:0,enabled:w}),{trackPrebuiltAutomationEnabled:k}=S(),A=de(),j=fe(),M=re(),N=(0,K.useMemo)(()=>{if(!T?.automations)return[];let e=t.toLowerCase();return e?T.automations.filter(t=>t.name.toLowerCase().includes(e)||(t.prompt??``).toLowerCase().includes(e)||t.repository?.toLowerCase().includes(e)||t.model?.toLowerCase().includes(e)):T.automations},[T?.automations,t]),P=(0,K.useMemo)(()=>N.filter(e=>e.enabled),[N]),F=(0,K.useMemo)(()=>N.filter(e=>!e.enabled),[N]),I=(e,t)=>{let n=!t;if(A.mutate({id:e,enabled:n}),n){let t=T?.automations.find(t=>t.id===e);k({automationId:e,automationName:t?.name??e})}},L=t=>{M.mutate(t,{onSuccess:()=>{u(e(s.AUTOMATIONS$RUN_NOW_SUCCESS))},onError:t=>{l(c(t)?t.response?.data?.message||t.message||e(s.AUTOMATIONS$RUN_NOW_ERROR):t.message||e(s.AUTOMATIONS$RUN_NOW_ERROR))}})},R=e=>{let t=T?.automations.find(t=>t.id===e);t&&m({id:e,name:t.name})},z=e=>{let t=T?.automations.find(t=>t.id===e);t&&g(t)},B=()=>{p&&(j.mutate(p.id),m(null))},V=(0,K.useCallback)(e=>{i(e),we(e)},[]),H=T?T.total>T.automations.length:!1,U=!E&&!D&&T?.automations.length===0;return C?(0,q.jsx)(`div`,{className:`min-h-full`,children:(0,q.jsxs)(`div`,{className:`p-6 max-w-4xl mx-auto`,children:[(0,q.jsx)(`h1`,{className:`text-xl font-medium text-content`,children:e(s.AUTOMATIONS$TITLE)}),(0,q.jsx)(`p`,{className:`mt-1 text-sm text-muted`,children:e(s.AUTOMATIONS$SUBTITLE)}),(0,q.jsx)(`div`,{className:`mt-6 flex flex-col gap-3`,children:Array.from({length:3}).map((e,t)=>(0,q.jsx)(ke,{},`skeleton-${String(t)}`))})]})}):w?(0,q.jsx)(`div`,{className:`min-h-full`,children:(0,q.jsxs)(`div`,{className:`p-6 max-w-4xl mx-auto`,children:[(0,q.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,q.jsxs)(`div`,{className:`min-w-0`,children:[(0,q.jsx)(`h1`,{className:`text-xl font-semibold text-content`,children:e(s.AUTOMATIONS$TITLE)}),(0,q.jsx)(`p`,{className:`mt-1 text-sm text-muted`,children:e(s.AUTOMATIONS$SUBTITLE)})]}),(0,q.jsx)(_,{type:`button`,variant:`secondary`,testId:`automations-add-automation`,className:`shrink-0 whitespace-nowrap`,onClick:()=>y(!0),children:e(s.AUTOMATIONS$ADD_AUTOMATION)})]}),(0,q.jsxs)(`div`,{className:`mt-6 flex items-stretch gap-2`,children:[(0,q.jsx)(ge,{value:t,onChange:n}),(0,q.jsx)(Oe,{view:r,onChange:V,disabled:U})]}),(0,q.jsxs)(`div`,{className:`mt-6 flex flex-col gap-6`,children:[E&&(0,q.jsx)(`div`,{className:`flex flex-col gap-3`,children:Array.from({length:3}).map((e,t)=>(0,q.jsx)(ke,{},`skeleton-${String(t)}`))}),D&&!E&&(0,q.jsx)(ie,{onRetry:O}),U&&(0,q.jsx)(Le,{}),!E&&!D&&T&&T.automations.length>0&&(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(Z,{title:e(s.AUTOMATIONS$ACTIVE),count:P.length,automations:P,view:r,onToggle:I,onRunNow:L,runPendingId:M.isPending?M.variables??null:null,onDelete:R,onEdit:b?z:void 0}),(0,q.jsx)(Z,{title:e(s.AUTOMATIONS$INACTIVE),count:F.length,automations:F,view:r,onToggle:I,onRunNow:L,runPendingId:M.isPending?M.variables??null:null,onDelete:R,onEdit:b?z:void 0}),H&&(0,q.jsx)(`button`,{type:`button`,onClick:()=>f(e=>e+ze),className:`self-center rounded-lg border border-[var(--oh-border)] px-6 py-2 text-sm text-white hover:bg-surface-raised`,children:e(s.AUTOMATIONS$LOAD_MORE)})]})]}),(0,q.jsx)(`div`,{className:`mt-6`,children:(0,q.jsx)(ee,{query:t})}),(0,q.jsx)(ae,{automationName:p?.name??``,isOpen:p!==null,onConfirm:B,onCancel:()=>m(null)}),h&&(0,q.jsx)(le,{automation:h,isOpen:h!==null,onClose:()=>g(null)}),(0,q.jsx)(Re,{isOpen:v,onClose:()=>y(!1)})]})}):(0,q.jsx)(`div`,{className:`min-h-full`,children:(0,q.jsxs)(`div`,{className:`p-6 max-w-4xl mx-auto`,children:[(0,q.jsx)(`h1`,{className:`text-xl font-medium text-content`,children:e(s.AUTOMATIONS$TITLE)}),(0,q.jsx)(`p`,{className:`mt-1 text-sm text-muted`,children:e(s.AUTOMATIONS$SUBTITLE)}),(0,q.jsx)(se,{onRetry:te})]})})});export{Be as default};
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/files-tab-DHqtsKLy.js","assets/rolldown-runtime-BFRubm34.js","assets/vendor-styling-CI0PQ3ab.js","assets/active-backend-context-DRFevVIj.js","assets/vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~ncdxw0bh-ClHnt5lR.js","assets/vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~d1e18dtv-5Q6lQJdE.js","assets/vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~i3v2mlbw-BrJQ3XZH.js","assets/createLucideIcon-CVAsW2Yo.js","assets/declaration-B9kpCaYl.js","assets/agent-server-client-options-DVLRd9sw.js","assets/utils-CE0lDWtb.js","assets/common-Dh7OqABE.js","assets/vendor~files-tab-B02k3xvx.js","assets/iconBase-DaTRRUjy.js","assets/vendor~root-layout~home~conversation-panel~conversation~launch~settings~settings-index~agen~enjl5xdm-mMKDm94D.js","assets/useQuery-CpjHYtZc.js","assets/suspense-X5dBsJzn.js","assets/mouse-pointer-click-PdEQPL6v.js","assets/useTranslation-Cgy4JA_g.js","assets/vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-d8aETPbZ.js","assets/vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-9UMeuPV6.js","assets/objectWithoutPropertiesLoose-BgYIAs2y.js","assets/vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-D7EUmQ8Y.js","assets/vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-DTzw2x50.js","assets/vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-CqXiHwjU.js","assets/vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-BD0GaRGa.js","assets/react-DPDgL6du.js","assets/agent-server-conversation-service.api-DfH2k6Sx.js","assets/vendor~root-layout~home~conversation-panel~conversation~launch~skills-settings~automations-~ki5qnp0d-DJHl5b-B.js","assets/v4-DbCkTSoU.js","assets/proxy-CHmFkV16.js","assets/profiles-service.api-CeYEmSM3.js","assets/settings-service.api-DldkFI1x.js","assets/settings-mQUckT0g.js","assets/llm-subscription-service-CKyaV24y.js","assets/llm-subscription-DtsX5Lhg.js","assets/acp-providers-D_D8VUpP.js","assets/use-event-store-YSOxy9FC.js","assets/runtime-waiting-state-DkzLgvMn.js","assets/loading-spinner-DHAIPZkP.js","assets/typography-YGPBGzOG.js","assets/dist-CodhvuAP.js","assets/conversation-tab-empty-state-m8IUkfMj.js","assets/segmented-toggle-Cen5AMUc.js","assets/markdown-renderer-D8mayGjI.js","assets/vendor~root-layout~home~conversation-panel~conversation~shared-conversation~alert-banner~pl~rqjteh0a-CZM4hwUT.js","assets/copy-to-clipboard-button-Aj9wFmt2.js","assets/checkmark-h7udgXMM.js","assets/copy-BLmGeJcd.js","assets/use-active-conversation-DvcFBqFe.js","assets/conversation-service.api-Ch9kR9aE.js","assets/navigation-context-DPs2G0X8.js","assets/use-user-conversation-BPHQ-dm-.js","assets/use-agent-state-BvRcEzY4.js","assets/conversation-state-store-B2Bp32XI.js","assets/use-runtime-is-ready-CBFe69Ew.js","assets/files-tab-store-DJsPxYdg.js","assets/folder-mMWFvaw0.js","assets/get-language-from-path-CPNnuVhI.js","assets/link-external-DfKQroKX.js","assets/conversation-local-storage-F6zVMM--.js","assets/git-status-mapper-BI8FyUVp.js","assets/browser-tab-aiDg7aEn.js","assets/external-link-D2zJjE9G.js","assets/vendor~browser-tab-Di0kh5Zw.js","assets/browser-store-BI6uklCG.js","assets/planner-tab-G4j36bJk.js","assets/list-todo-BfH6yYUK.js","assets/plan-components-j9X4AxYM.js","assets/brand-button-DKPMEKcW.js","assets/form-control-classes-9rkU4usZ.js","assets/use-handle-plan-click-cAXS-Hft.js","assets/use-create-conversation-CvAXfA3T.js","assets/useMutation-DCE9RcgK.js","assets/use-agent-profiles-DnH16_Vm.js","assets/plugins-management-service-BAp70KN7.js","assets/use-llm-profiles-BcLibtGb.js","assets/use-tracking-CqODdfO4.js","assets/vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~skills-set~nn5zty47-Zl0G1QCy.js","assets/vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~skills-set~k6tszsdc-Bb-xMtbv.js","assets/use-settings-B07msZ2Z.js","assets/conversation-store-LptbOvKa.js","assets/middleware-DYHYNAnP.js","assets/task-list-tab-BAThr9Ex.js","assets/use-task-list-CmWGElgb.js","assets/u-check-circle-half-LiwZkuFe.js","assets/u-check-circle-BqoIxNz_.js","assets/terminal-B0aL_iDZ.js","assets/vendor~terminal-aeP3PnKf.js","assets/vendor~terminal-T4IDBjWs.css","assets/square-chevron-right-Czw3FFWc.js","assets/command-store-D8J5LMW1.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{a as e}from"./rolldown-runtime-BFRubm34.js";import{Ct as t,St as n,_t as r,bt as i,et as a,gt as o,h as s,o as c,xt as l}from"./vendor-styling-CI0PQ3ab.js";import{A as u,L as d,M as f,k as p}from"./vendor~entry.client~root~root-layout~index-redirect~home~conversation-panel~conversation~la~byh8a1g4-XNPdpuO8.js";import{n as m}from"./vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~i3v2mlbw-BrJQ3XZH.js";import{a as h,c as g,f as _,i as v,u as y}from"./path-utils-CBaRYg35.js";import{n as b,r as x}from"./vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~d1e18dtv-5Q6lQJdE.js";import{t as S}from"./useMutation-DCE9RcgK.js";import{t as C}from"./useQuery-CpjHYtZc.js";import{t as w}from"./Trans-De9RwQhA.js";import{t as T}from"./useTranslation-Cgy4JA_g.js";import{t as E}from"./declaration-B9kpCaYl.js";import{A as D,j as O,k,n as A}from"./active-backend-context-DRFevVIj.js";import{t as j}from"./createLucideIcon-CVAsW2Yo.js";import{a as M,c as ee,d as te,f as N,g as P,h as F,i as ne,l as re,m as ie,n as I,o as L,p as ae,r as R,s as oe,t as se,u as ce}from"./messages-C4KEFkPk.js";import{t as le}from"./check-Bvi71siz.js";import{n as ue,t as z}from"./vendor~root-layout~conversation-panel~conversation-CpiTHpHl.js";import{t as de}from"./copy-3JCw_XFB.js";import{t as fe}from"./external-link-D2zJjE9G.js";import{t as B}from"./list-todo-BfH6yYUK.js";import{t as pe}from"./loader-circle-BEykUKYG.js";import{t as me}from"./square-chevron-right-Czw3FFWc.js";import{t as he}from"./x-Cb0WAtak.js";import{A as ge,C as V,E as _e,I as ve,S as H,T as ye,b as be,c as xe,d as Se,h as Ce,l as we,o as Te,t as U,u as Ee,w as De,x as Oe}from"./utils-CE0lDWtb.js";import{t as ke}from"./common-Dh7OqABE.js";import{c as Ae,i as je}from"./agent-server-client-options-DVLRd9sw.js";import{t as Me}from"./proxy-CHmFkV16.js";import{t as Ne}from"./modal-backdrop-zVwfOJZr.js";import{n as Pe}from"./modal-body-Dcu5McCa.js";import{r as Fe}from"./base-modal-CC5Pp8CF.js";import{t as Ie}from"./brand-button-DKPMEKcW.js";import{t as Le}from"./loading-spinner-DHAIPZkP.js";import{n as Re}from"./navigation-context-DPs2G0X8.js";import{t as ze}from"./styled-tooltip-DsKsFjuq.js";import{r as Be,u as Ve}from"./dropdown-classes-CgQ45JmQ.js";import{_ as He,f as Ue,h as We,n as Ge,p as Ke,s as qe}from"./git-provider-icon-CGU7_KiU.js";import{t as Je}from"./react-DPDgL6du.js";import{n as Ye}from"./middleware-DYHYNAnP.js";import{i as Xe,s as Ze}from"./conversation-local-storage-F6zVMM--.js";import{t as W}from"./conversation-store-LptbOvKa.js";import{t as Qe}from"./modal-close-button-CTCX4nCH.js";import{r as $e}from"./use-settings-B07msZ2Z.js";import{t as et}from"./use-tracking-CqODdfO4.js";import{t as tt}from"./v4-DbCkTSoU.js";import{a as nt,i as rt,t as it}from"./agent-server-conversation-service.api-DfH2k6Sx.js";import{t as at}from"./use-is-authed-_dhQ2Xuj.js";import{c as ot,d as st,f as ct,i as lt,l as ut,n as dt,r as ft,s as pt,t as mt,u as ht}from"./sidebar-mobile-menu-toggle-CaV3tQFF.js";import{t as gt}from"./use-click-outside-element-Bf4Omzot.js";import{t as _t}from"./use-create-conversation-CvAXfA3T.js";import{r as vt,t as yt}from"./conversation-service.api-Ch9kR9aE.js";import{n as bt,t as G}from"./context-menu-list-item-DBFzplWW.js";import{i as K,r as xt,t as St}from"./ellipsis-button-1BV9Sga8.js";import{t as Ct}from"./u-edit-DJ90xc8Z.js";import{t as wt}from"./skills-9cDZONKh.js";import{t as Tt}from"./use-user-conversation-BPHQ-dm-.js";import{t as Et}from"./conversation-state-store-B2Bp32XI.js";import{t as Dt}from"./copy-BLmGeJcd.js";import{r as Ot}from"./typography-YGPBGzOG.js";import{C as kt,D as At,E as jt,I as Mt,L as Nt,M as Pt,N as Ft,O as It,P as Lt,S as Rt,T as zt,V as Bt,_ as Vt,a as Ht,b as Ut,f as Wt,g as Gt,h as Kt,i as qt,j as Jt,k as Yt,m as Xt,n as Zt,o as Qt,p as $t,r as en,t as tn,v as nn,w as rn,x as an,y as on,z as sn}from"./llm-not-configured-banner-DTrLsVr_.js";import{n as q,r as cn,t as J}from"./use-active-conversation-DvcFBqFe.js";import{t as Y}from"./use-agent-state-BvRcEzY4.js";import{a as ln,c as un,d as dn,f as fn,h as pn,l as mn,m as X,n as hn,p as gn,r as _n,s as vn,u as yn}from"./lesson-plan-HD886V64.js";import{D as bn,c as xn,l as Sn,m as Cn,t as Z}from"./use-event-store-YSOxy9FC.js";import{t as wn}from"./command-store-D8J5LMW1.js";import{t as Tn}from"./use-runtime-is-ready-CBFe69Ew.js";import{r as En}from"./plan-components-j9X4AxYM.js";import{t as Dn}from"./use-breakpoint-B-O0lQ84.js";import{t as On}from"./use-task-list-CmWGElgb.js";import{t as kn}from"./vendor~conversation-panel~conversation~alert-banner-DHDkknt5.js";var An=j(`globe`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20`,key:`13o1zl`}],[`path`,{d:`M2 12h20`,key:`9i4pu4`}]]),jn=j(`share-2`,[[`circle`,{cx:`18`,cy:`5`,r:`3`,key:`gq8acd`}],[`circle`,{cx:`6`,cy:`12`,r:`3`,key:`w7nqdw`}],[`circle`,{cx:`18`,cy:`19`,r:`3`,key:`1xt0gg`}],[`line`,{x1:`8.59`,x2:`15.42`,y1:`13.51`,y2:`17.49`,key:`47mynk`}],[`line`,{x1:`15.41`,x2:`8.59`,y1:`6.51`,y2:`10.49`,key:`1n3mei`}]]),Mn=e=>!e.isLayoutDirty&&e.willUpdate(!1);function Nn(){let e=new Set,t=new WeakMap,n=()=>e.forEach(Mn);return{add:r=>{e.add(r),t.set(r,r.addEventListener(`willUpdate`,n))},remove:r=>{e.delete(r);let i=t.get(r);i&&(i(),t.delete(r)),n()},dirty:n}}var Q=i(),$=e(t(),1),Pn=(0,$.createContext)(null);function Fn(){let e=(0,$.useRef)(!1);return o(()=>(e.current=!0,()=>{e.current=!1}),[]),e}function In(){let e=Fn(),[t,n]=(0,$.useState)(0),r=(0,$.useCallback)(()=>{e.current&&n(t+1)},[t]);return[(0,$.useCallback)(()=>a.postRender(r),[r]),t]}var Ln=e=>e===!0,Rn=e=>Ln(e===!0)||e===`id`,zn=({children:e,id:t,inherit:n=!0})=>{let i=(0,$.useContext)(r),a=(0,$.useContext)(Pn),[o,s]=In(),c=(0,$.useRef)(null),l=i.id||a;c.current===null&&(Rn(n)&&l&&(t=t?l+`-`+t:l),c.current={id:t,group:Ln(n)&&i.group||Nn()});let u=(0,$.useMemo)(()=>({...c.current,forceRender:o}),[s]);return(0,Q.jsx)(r.Provider,{value:u,children:e})},Bn={curAgentState:V.LOADING},Vn=Je(e=>({...Bn,setCurrentAgentState:t=>e({curAgentState:t}),reset:()=>e(Bn)})),Hn=`openhands-last-conversation-by-backend`;function Un(e,t){return t?`${e}::${t}`:e}function Wn(){if(typeof window>`u`)return{};try{let e=window.localStorage.getItem(Hn);if(!e)return{};let t=JSON.parse(e);if(typeof t!=`object`||!t)return{};let n={};for(let[e,r]of Object.entries(t))typeof r==`string`&&r.length>0&&(n[e]=r);return n}catch{return{}}}function Gn(e){if(!(typeof window>`u`))try{window.localStorage.setItem(Hn,JSON.stringify(e))}catch{}}function Kn(e,t,n){if(!n)return;let r=Wn();r[Un(e,t)]=n,Gn(r)}function qn(e,t){let n=Wn(),r=Un(e,t);r in n&&(delete n[r],Gn(n))}var Jn=e=>({action:F.CHANGE_AGENT_STATE,args:{agent_state:e}}),Yn=e=>`error`in e,Xn=e=>`type`in e&&e.type===`error`,Zn=()=>{let{send:e}=ie(),t=Z(e=>e.events);$.useEffect(()=>{if(!t.length)return;let n=t[t.length-1];if(!(Sn(n)&&xn(n))){if(Yn(n)){if(n.error_code===401){D(`Session expired.`);return}typeof n.error==`string`?D(n.error):D(n.message);return}Xn(n)&&`${n.message??``}`.startsWith(`Agent reached maximum`)&&e(Jn(V.PAUSED))}},[t.length])},Qn=()=>{let{curAgentState:e}=Y();return{runtimeActive:!De.includes(e)}};function $n({children:e}){return Zn(),Qn(),e}var er=`ACPAuthRequired`,tr={ACPAuthRequired:E.ERROR$ACP_AUTH_REQUIRED_TITLE,ACPSpawnError:E.CHAT_INTERFACE$AGENT_ERROR_MESSAGE,ACPInitError:E.CHAT_INTERFACE$AGENT_ERROR_MESSAGE,ACPPromptError:E.CHAT_INTERFACE$AGENT_ERROR_MESSAGE,UsagePolicyRefusal:E.CHAT_INTERFACE$AGENT_ERROR_MESSAGE};function nr(e){return e?tr[e]??null:null}function rr(e){return e===er}var ir={entriesByConversation:{}},ar=(e,t,n)=>({entriesByConversation:{...e.entriesByConversation,[t]:n(e.entriesByConversation[t]??[])}}),or=Je()(Ye(e=>({...ir,addPending:(t,n)=>{let r=tt();return e(e=>ar(e,t,e=>[...e,{id:r,question:n,status:`pending`}])),r},resolve:(t,n,r)=>e(e=>ar(e,t,e=>e.map(e=>e.id===n?{...e,response:r,status:`done`}:e))),fail:(t,n,r)=>e(e=>ar(e,t,e=>e.map(e=>e.id===n?{...e,response:r,status:`error`}:e))),dismiss:(t,n)=>e(e=>ar(e,t,e=>e.filter(e=>e.id!==n)))}),{name:`BtwStore`}));function sr({onClick:e}){let{t}=T(`openhands`);return(0,Q.jsxs)(`button`,{type:`button`,onClick:e,className:`flex items-center gap-1.5 px-3 py-1 rounded-full text-xs font-normal text-success bg-success/10 hover:bg-success/20 border border-success/30 transition-colors`,children:[(0,Q.jsx)(te,{className:`w-3.5 h-3.5 fill-success`}),(0,Q.jsx)(`span`,{children:t(E.CHAT_INTERFACE$BTW_GOT_IT)})]})}function cr({conversationId:e}){let{t}=T(`openhands`),n=or(e=>e.entriesByConversation),r=or(e=>e.dismiss),i=e?n[e]??[]:[];return!e||i.length===0?null:(0,Q.jsx)(`div`,{"data-testid":`btw-messages`,className:`flex flex-col w-full`,children:i.map(n=>{let i=n.status===`pending`;return(0,Q.jsx)(N,{title:(0,Q.jsxs)(`span`,{className:`flex items-center gap-2`,children:[(0,Q.jsx)(`span`,{className:`opacity-60`,children:t(E.CHAT_INTERFACE$BTW_PREFIX)}),(0,Q.jsx)(`span`,{children:n.question}),i&&(0,Q.jsx)(`span`,{"data-testid":`btw-spinner`,className:`inline-block w-3.5 h-3.5 ml-2 rounded-full border-2 border-transparent border-t-[var(--oh-border-input)] animate-spin`})]}),details:i?t(E.CHAT_INTERFACE$BTW_WAITING_FOR_ANSWER):n.response??``,initiallyExpanded:!i,chevronPosition:`before`,titleTrailing:!i&&(0,Q.jsx)(sr,{onClick:()=>r(e,n.id)})},n.id)})})}function lr({conversationId:e}){let t=gn(e=>e.statusByConversation),n=e?t[e]:void 0;return n?.active?(0,Q.jsx)(ce,{status:n}):null}var ur=`${_e} `,dr=(e,t)=>{let n=or(e=>e.addPending),r=or(e=>e.resolve),i=or(e=>e.fail);return(0,$.useCallback)(a=>{let o=a.trim(),s=o===`/btw`||o.startsWith(ur);if(!e||!s){t(a);return}let c=o.slice(_e.length).trim();if(!c)return;let l=n(e,c);v(e,c).then(({response:t})=>r(e,l,t)).catch(t=>i(e,l,t?.message??`Failed to ask agent`))},[e,t,n,r,i])},fr=`${ge} `,pr=/^--max(?:=|\s+)(\d+)\s*/,mr=(e,t)=>{let{t:n}=T();return(0,$.useCallback)(r=>{let i=r.trim(),a=i===`/goal`||i.startsWith(fr);if(!e||!a){t(r);return}let o=i.slice(ge.length).trim(),s,c=o.match(pr);c&&(s=parseInt(c[1],10),o=o.slice(c[0].length).trim());let l=o;if(!l){D(n(E.GOAL$OBJECTIVE_REQUIRED));return}let u={objective:l};s&&s>=1&&(u.max_iterations=s),y(e,u).catch(e=>{let t=n(E.GOAL$START_FAILED);D(e instanceof Error&&e.message?e.message:t)})},[e,t,n])},hr=`flex flex-row gap-1 items-center justify-center rounded-[100px]`;function gr(e){return U(hr,e?`bg-[var(--oh-surface)] hover:bg-tertiary cursor-pointer text-white`:`bg-[var(--oh-surface)] cursor-not-allowed opacity-50 text-[var(--oh-muted)]`)}function _r(e){return e?`white`:`var(--oh-muted)`}var vr=`font-normal text-sm leading-5 truncate`;function yr({onSuggestionsClick:e,hasRepository:t,providerTokensReady:n,isConversationReady:r=!0}){let{t:i}=T(`openhands`),{trackPullButtonClick:a}=et(),o=n&&t&&r;return(0,Q.jsxs)(`button`,{type:`button`,onClick:()=>{a(),e(xe())},disabled:!o,className:U(gr(o),`px-0.5 py-1 w-[76px] min-w-[76px]`),children:[(0,Q.jsx)(`div`,{className:`w-3 h-3 flex items-center justify-center`,children:(0,Q.jsx)(At,{width:12,height:12,color:_r(o)})}),(0,Q.jsx)(`div`,{className:U(vr,`max-w-[76px]`),title:i(E.COMMON$PULL),children:i(E.COMMON$PULL)})]})}function br({onSuggestionsClick:e,hasRepository:t,providerTokensReady:n,currentGitProvider:r,isConversationReady:i=!0}){let{t:a}=T(`openhands`),{trackPushButtonClick:o}=et(),s=n&&t&&i;return(0,Q.jsxs)(`button`,{type:`button`,onClick:()=>{o(),e(we(r))},disabled:!s,className:U(gr(s),`px-2 py-1 w-[77px] min-w-[77px]`),children:[(0,Q.jsx)(`div`,{className:`w-3 h-3 flex items-center justify-center`,children:(0,Q.jsx)(It,{width:12,height:12,color:_r(s)})}),(0,Q.jsx)(`div`,{className:U(vr,`max-w-[77px]`),title:a(E.COMMON$PUSH),children:a(E.COMMON$PUSH)})]})}function xr({onSuggestionsClick:e,hasRepository:t,providerTokensReady:n,currentGitProvider:r,isConversationReady:i=!0}){let{t:a}=T(`openhands`),{trackCreatePrButtonClick:o}=et(),s=n&&t&&i;return(0,Q.jsxs)(`button`,{type:`button`,onClick:()=>{o(),e(Te(r))},disabled:!s,className:U(gr(s),`px-2 py-1 w-[126px] min-w-[126px] h-7`),children:[(0,Q.jsx)(`div`,{className:`w-3 h-3 flex items-center justify-center`,children:(0,Q.jsx)(jt,{width:12,height:12,color:_r(s)})}),(0,Q.jsx)(`div`,{className:U(vr,`max-w-[126px]`),title:a(E.COMMON$PULL_REQUEST),children:a(E.COMMON$PULL_REQUEST)})]})}function Sr(e){return e.kind===`BashCommand`}function Cr(e){return e.kind===`BashOutput`}function wr(e){return e.kind===`BashError`}function Tr(e,t,n){let r=(0,$.useRef)(null),i=(0,$.useRef)([]),a=(0,$.useRef)([]),o=(0,$.useRef)(new Map);return(0,$.useEffect)(()=>{if(!n)return;let s=je(e,t),c=new WebSocket(s);r.current=c,c.onopen=()=>{for(let{command:e,cwd:t,timeout:n,resolve:r,reject:o}of i.current)a.current.push({resolve:r,reject:o}),c.send(JSON.stringify({command:e,cwd:t,timeout:n}));i.current=[]},c.onmessage=e=>{let t;try{t=JSON.parse(e.data)}catch{return}if(Sr(t)){let e=a.current.shift();e&&o.current.set(t.id,{...e,stdout:[],stderr:[]})}else if(Cr(t)&&t.command_id){let e=o.current.get(t.command_id);e&&(t.stdout&&e.stdout.push(t.stdout),t.stderr&&e.stderr.push(t.stderr),t.exit_code!=null&&(o.current.delete(t.command_id),e.resolve({exit_code:t.exit_code,stdout:e.stdout.join(``),stderr:e.stderr.join(``)})))}else wr(t)&&l(`Bash error: ${t.code}: ${t.detail}`)};function l(e){let t=Error(e);for(let{reject:e}of i.current)e(t);i.current=[];for(let e of a.current)e.reject(t);a.current=[];for(let e of o.current.values())e.reject(t);o.current.clear()}return c.onclose=()=>{r.current=null,l(`Bash WebSocket closed`)},c.onerror=()=>{r.current=null,l(`Bash WebSocket error`)},()=>{c.onclose=null,c.onerror=null,c.close(),r.current=null,l(`Bash WebSocket unmounted`)}},[n,e,t]),(0,$.useCallback)((e,t,n)=>new Promise((o,s)=>{let c=r.current;if(!c||c.readyState===WebSocket.CLOSED||c.readyState===WebSocket.CLOSING){s(Error(`Bash WebSocket not available`));return}c.readyState===WebSocket.CONNECTING?i.current.push({command:e,cwd:t,timeout:n,resolve:o,reject:s}):(a.current.push({resolve:o,reject:s}),c.send(JSON.stringify({command:e,cwd:t,timeout:n})))}),[])}var Er={"github.com":`github`,"gitlab.com":`gitlab`,"bitbucket.org":`bitbucket`,"dev.azure.com":`azure_devops`};function Dr(e){return e.replace(/\.git$/,``)}function Or(e){return e?Er[e.toLowerCase()]??null:null}function kr(e){let t=e.split(`/`).filter(Boolean),n=t.indexOf(`_git`);return n===-1?t.join(`/`):[...t.slice(0,n),...t.slice(n+1)].join(`/`)}function Ar(e,t,n){let r=Dr(n.replace(/^\/+/,``)),i=Or(t);return{url:e,host:t,repository:(i===`azure_devops`?kr(r):r)||null,provider:i}}function jr(e){let t=e?.trim();if(!t)return null;let n=t.match(/^[^@\s]+@([^:\s]+):(.+)$/);if(n){let e=n[1];return Ar(t,e,n[2])}try{let e=new URL(t);return Ar(t,e.hostname||null,e.pathname)}catch{return null}}var Mr={repository:null,branch:null,provider:null,remoteUrl:null},Nr=[`r=$(git remote get-url origin 2>/dev/null)`,`b=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)`,`if [ -z "$r$b" ]; then`,`n=$(find . -mindepth 2 -maxdepth 4 -name .git 2>/dev/null | cut -c3- | sed 's|/.git$||' | sort -u)`,`c=$(printf '%s\\n' "$n" | grep -c '[^[:space:]]')`,`if [ "$c" = "1" ] && [ -n "$n" ]; then`,`r=$(git -C "$n" remote get-url origin 2>/dev/null)`,`b=$(git -C "$n" rev-parse --abbrev-ref HEAD 2>/dev/null)`,`fi`,`fi`,`printf '%s\\n%s' "$r" "$b"`].join(`
|
|
3
|
-
`);async function Pr(e,t){let n=await e(Nr,t,10);if(n.exit_code!==0)return Mr;let r=n.stdout.indexOf(`
|
|
4
|
-
`),i=(r>=0?n.stdout.slice(0,r):n.stdout).trim(),a=(r>=0?n.stdout.slice(r+1):``).trim(),o=a&&a!==`HEAD`?a:null;if(!i&&!o)return Mr;let s=jr(i);return{repository:s?.repository??null,provider:s?.provider??null,remoteUrl:i||null,branch:o}}var Fr=()=>{let{data:e}=J(),t=Tn(),{backend:n}=A(),r=n.kind===`local`,i=e?.id,a=e?.conversation_url,o=e?.session_api_key,s=e?.workspace?.working_dir?.trim(),c=!!e?.selected_repository,l=!!e?.git_provider,u=!!e?.selected_branch,d=r&&t&&!!i&&!!s&&(!c||!l||!u),f=Tr(a,o,d),p=(0,$.useRef)(f);return p.current=f,C({queryKey:[`local-git-info`,i,a,o,s],queryFn:async()=>Pr((e,t,n)=>p.current(e,t,n),s),enabled:d,retry:!1,staleTime:1e4,refetchInterval:1e4,gcTime:1e3*60*5,meta:{disableToast:!0}})},Ir=()=>{let e=m(),{t}=T(`openhands`);return S({mutationFn:e=>it.updateConversationRepository(e.conversationId,e.repository,e.branch,e.gitProvider),onMutate:async t=>{let n=[`user`,`conversation`,t.conversationId];await e.cancelQueries({queryKey:n});let r=e.getQueriesData({queryKey:n});return e.setQueriesData({queryKey:n},e=>e&&{...e,selected_repository:t.repository,selected_branch:t.branch??null,git_provider:t.gitProvider??null}),{previousEntries:r}},onError:(n,r,i)=>{i?.previousEntries.forEach(([t,n])=>{e.setQueryData(t,n)}),D(t(E.CONVERSATION$FAILED_TO_UPDATE_REPOSITORY))},onSuccess:()=>{O(t(E.CONVERSATION$REPOSITORY_UPDATED))},onSettled:(t,n,r)=>{e.invalidateQueries({queryKey:[`user`,`conversation`,r.conversationId]}),e.invalidateQueries({queryKey:[`user`,`conversations`]}),e.invalidateQueries({queryKey:[`local-git-info`,r.conversationId]})}})};function Lr({children:e,tooltipMessage:t,testId:n,shouldShowTooltip:r}){return r?(0,Q.jsx)(ze,{content:t,placement:`top`,showArrow:!0,tooltipClassName:`bg-white text-black`,children:(0,Q.jsx)(`span`,{"data-testid":n,className:`hover:opacity-100`,children:e})}):e}function Rr({isOpen:e,onClose:t,onLaunch:n,defaultProvider:r=`github`}){let{t:i}=T(`openhands`),{providers:a}=qe(),[o,s]=(0,$.useState)(null),[c,l]=(0,$.useState)(null),[u,d]=(0,$.useState)(null);(0,$.useEffect)(()=>{a.length===1&&!o?s(a[0]):a.length>1&&!o&&r&&a.includes(r)&&s(r)},[a,o,r]);let f=(0,$.useCallback)(e=>{e!==o&&(s(e),l(null),d(null))},[o]),p=(0,$.useCallback)(e=>{e?(l(e),d(null)):(l(null),d(null))},[]),m=(0,$.useCallback)(e=>{d(e)},[]),h=()=>{!c||!u||(n(c,u),l(null),d(null),t())},g=()=>{s(null),l(null),d(null),t()};if(!e)return null;let _=c?.git_provider||o||r,v=!!c&&!!u;return(0,Q.jsx)(Ne,{onClose:g,children:(0,Q.jsxs)(Pe,{width:`sm`,className:`relative items-start border border-[var(--oh-border)] !gap-4`,children:[(0,Q.jsx)(Qe,{onClose:g,testId:`close-open-repository-modal`}),(0,Q.jsx)(`div`,{className:`w-full pr-6`,children:(0,Q.jsx)(Fe,{title:i(E.CONVERSATION$OPEN_REPOSITORY)})}),(0,Q.jsxs)(`div`,{className:`flex flex-col gap-4 w-full`,children:[(0,Q.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Q.jsx)(`span`,{className:`text-sm text-white font-normal leading-[22px]`,children:i(E.CONVERSATION$SELECT_OR_INSERT_LINK)}),a.length>1&&(0,Q.jsx)(Qt,{providers:a,value:o,onChange:f})]}),(0,Q.jsxs)(`div`,{className:`flex flex-col gap-[10px] w-full`,children:[(0,Q.jsx)(qt,{provider:_,value:c?.id||null,repositoryName:c?.full_name||null,onChange:p,className:`w-full`}),(0,Q.jsx)(Ht,{repository:c?.full_name||null,provider:_,selectedBranch:u,onBranchSelect:m,defaultBranch:c?.main_branch||null,disabled:!c,className:`w-full`})]})]}),(0,Q.jsxs)(`div`,{className:`flex justify-end gap-2 w-full`,onClick:e=>e.stopPropagation(),children:[(0,Q.jsx)(Ie,{type:`button`,variant:`secondary`,onClick:g,children:i(E.BUTTON$CANCEL)}),(0,Q.jsx)(Ie,{type:`button`,variant:`primary`,onClick:h,isDisabled:!v,children:i(E.BUTTON$LAUNCH)})]})]})})}function zr({onSuggestionsClick:e}){let{t}=T(`openhands`),{conversationId:n}=q(),[r,i]=(0,$.useState)(!1),[a,o]=(0,$.useState)(!1),s=(0,$.useRef)(null),{addRecentRepository:c}=Ge(),l=X(e=>e.enqueuePendingMessage),u=X(e=>e.markPendingMessageError),{backend:d}=A(),f=d.kind===`local`,{providers:p}=qe(),m=f||p.length>0,{data:h}=J(),{repositoryInfo:g}=Ft(),{data:_}=Fr(),v=sn(),y=_n()?.isLoadingHistory??!1,b=(0,$.useRef)(v);(0,$.useEffect)(()=>{b.current=v},[v]);let{send:x}=ie(),S=(0,$.useRef)(x);(0,$.useEffect)(()=>{S.current=x},[x]);let C=ee(),{mutate:w}=Ir(),{mutate:O,isPending:k}=_t(),j=h?.selected_repository||g?.selectedRepository,M=h?.git_provider||g?.gitProvider,te=h?.selected_branch||g?.selectedBranch,N=j||_?.repository||void 0,P=M||_?.provider,F=te||_?.branch||void 0,ne=(h?.id?nt(h.id):null)?.selected_workspace??null,re=ne&&ne.replace(/\/+$/,``).split(`/`).pop()||null,I=!!N&&!!P,L=!!h&&v===`OPEN`&&!y;(0,$.useEffect)(()=>{if(!a)return;let e=e=>{s.current&&!s.current.contains(e.target)&&o(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[a]),(0,$.useEffect)(()=>{if(!a)return;let e=e=>{e.key===`Escape`&&o(!1)};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[a]);let ae=(e,r)=>{n&&(c(e),w({conversationId:n,repository:e.full_name,branch:r.name,gitProvider:e.git_provider},{onSuccess:()=>{if(b.current!==`OPEN`){D(t(E.CONVERSATION$CLONE_COMMAND_FAILED_DISCONNECTED));return}let i=e.git_provider.charAt(0).toUpperCase()+e.git_provider.slice(1),a=`Clone ${e.full_name} from ${i} and checkout branch ${r.name}.`,o=n?l({conversationId:n,text:a}):null;C?.scrollDomToBottom(),Promise.resolve(S.current({action:`message`,args:{content:a,timestamp:new Date().toISOString()}})).catch(e=>{o&&u(o,e instanceof Error?e.message:t(E.CHAT_INTERFACE$FAILED_TO_SEND_MESSAGE))})}}))},R=!f||!!N||!!re,oe=f&&!I;return R||F||I?(0,Q.jsxs)(`div`,{className:`flex flex-row items-center`,children:[(0,Q.jsxs)(`div`,{className:`flex flex-row gap-2.5 items-center overflow-x-auto flex-nowrap relative scrollbar-hide`,children:[R?(0,Q.jsx)(en,{selectedRepository:N,gitProvider:P,workspaceName:re,onClick:()=>i(!0),disabled:!L||oe}):null,F?(0,Q.jsx)(Zt,{selectedBranch:F,selectedRepository:N,gitProvider:P}):null,I?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(Lr,{tooltipMessage:t(E.COMMON$GIT_TOOLS_DISABLED_CONTENT),testId:`git-control-bar-pull-button-tooltip`,shouldShowTooltip:!I,children:(0,Q.jsx)(yr,{onSuggestionsClick:e,hasRepository:I,providerTokensReady:m,isConversationReady:L})}),(0,Q.jsx)(Lr,{tooltipMessage:t(E.COMMON$GIT_TOOLS_DISABLED_CONTENT),testId:`git-control-bar-push-button-tooltip`,shouldShowTooltip:!I,children:(0,Q.jsx)(br,{onSuggestionsClick:e,hasRepository:I,providerTokensReady:m,currentGitProvider:P,isConversationReady:L})}),(0,Q.jsx)(Lr,{tooltipMessage:t(E.COMMON$GIT_TOOLS_DISABLED_CONTENT),testId:`git-control-bar-pr-button-tooltip`,shouldShowTooltip:!I,children:(0,Q.jsx)(xr,{onSuggestionsClick:e,hasRepository:I,providerTokensReady:m,currentGitProvider:P,isConversationReady:L})})]}):null]}),(0,Q.jsx)(Rr,{isOpen:r,onClose:()=>i(!1),onLaunch:ae,defaultProvider:P})]}):null}function Br({onSubmit:e,disabled:t=!1}){let{images:n,files:r,imagesMarkedUploadAsFile:i,clearAllFiles:a,subConversationTaskId:o}=W(),{curAgentState:s}=Y(),{data:c}=J(),{conversationId:l}=cn(),u=l??c?.id??null,{taskStatus:d}=Pt(o,c?.id||null),{handleUpload:f}=Wt(),p=Xt(u,mr(u,dr(u,t=>{let{imagesToEmbed:o,imagesAsFiles:s}=Bt(n,i);e(t,o,[...r,...s]),a()})));return(0,Q.jsxs)(`div`,{"data-testid":`interactive-chat-box`,children:[(0,Q.jsx)(Kt,{disabled:t||s===V.AWAITING_USER_CONFIRMATION||Ce(d),isNewConversationPending:t,onSubmit:p,onFilesPaste:f}),(0,Q.jsx)(`div`,{className:`mt-3 pb-3`,children:(0,Q.jsx)(zr,{onSuggestionsClick:e=>{p(e)}})})]})}function Vr(){let e=Z(e=>e.events),t=Z(e=>e.uiEvents),n=$.useMemo(()=>t.filter(un),[t]),r=$.useMemo(()=>e,[e]),i=$.useMemo(()=>n.length,[n]),a=$.useMemo(()=>r.some(e=>e.source===`agent`&&!bn(e)&&!Cn(e)),[r]),o=vn(r);return{storeEvents:e,uiEvents:t,renderableEvents:n,allConversationEvents:r,totalEvents:i,hasSubstantiveAgentActions:a,conversationUserEventsExist:o,userEventsExist:o}}var Hr=e=>`timestamp`in e?e.timestamp:void 0,Ur=e=>{let t=!!e&&Xe(e),n=t?void 0:e,{data:r}=Tt(e??null),{data:i,isFetched:a}=mn(n??void 0),o=Z(e=>e.addEvents),[s,c]=$.useState(!1),[l,u]=$.useState(!0),d=$.useRef(!1),f=$.useRef(!0);return $.useEffect(()=>{if(d.current=!1,c(!1),t){f.current=!1,u(!1);return}f.current=!0,u(!0)},[e,t]),$.useEffect(()=>{t||!a||!i||i.hasMore||(f.current=!1,u(!1))},[t,a,i?.hasMore,n]),{isLoading:s,hasMore:l,loadOlder:$.useCallback(async()=>{if(!e||Xe(e)||d.current||!f.current||!r)return;let{events:t}=Z.getState(),n=t[0];if(!n)return;let i=Hr(n);if(!i){f.current=!1,u(!1);return}d.current=!0,c(!0);try{let t=await dn.searchEvents(e,r?.conversation_url??null,r?.session_api_key??null,{limit:50,sortOrder:`TIMESTAMP_DESC`,timestampLt:i});if(!Array.isArray(t.items))throw Error(`Invalid older-events response: expected page.items to be an array.`);let n=[...t.items].reverse();n.length>0&&(o(n),ln(e,Z.getState().uiEvents)),(!t.next_page_id||t.items.length<50)&&(f.current=!1,u(!1))}finally{d.current=!1,c(!1)}},[e,r,r?.conversation_url,r?.session_api_key,o])}};function Wr(){return(0,Q.jsxs)(`div`,{className:`flex items-center space-x-1.5 rounded-full bg-[var(--oh-surface)] px-3 py-1.5`,children:[(0,Q.jsx)(`span`,{className:`h-1.5 w-1.5 rounded-full bg-[var(--oh-muted)] animate-[bounce_0.5s_infinite] translate-y-[1px] [animation-delay:0ms]`}),(0,Q.jsx)(`span`,{className:`h-1.5 w-1.5 rounded-full bg-[var(--oh-muted)] animate-[bounce_0.5s_infinite] translate-y-[1px] [animation-delay:75ms]`}),(0,Q.jsx)(`span`,{className:`h-1.5 w-1.5 rounded-full bg-[var(--oh-muted)] animate-[bounce_0.5s_infinite] translate-y-[1px] [animation-delay:150ms]`})]})}function Gr({suggestion:e,onClick:t}){let{t:n}=T(`openhands`);return(0,Q.jsxs)(`button`,{type:`button`,className:`list-none border border-[var(--oh-border)] rounded-[15px] hover:bg-surface-raised hover:border-[var(--oh-interactive-hover)] transition-colors flex-1 flex items-center justify-center cursor-pointer gap-[10px] h-[55px] px-4`,onClick:()=>t(e.value),children:[(0,$.useMemo)(()=>{switch(e.label){case`INCREASE_TEST_COVERAGE`:return(0,Q.jsx)(zt,{width:24,height:24,color:`#fff`});case`AUTO_MERGE_PRS`:return(0,Q.jsx)(rn,{width:19,height:20,color:`#fff`});case`FIX_README`:return(0,Q.jsx)(kt,{width:24,height:24,color:`#fff`});case`CLEAN_DEPENDENCIES`:return(0,Q.jsx)(Rt,{width:24,height:24,color:`#fff`});default:return null}},[e]),(0,Q.jsx)(`span`,{"data-testid":`suggestion`,className:`text-[15px] font-normal leading-5 text-white text-center cursor-pointer`,children:n(e.label)})]})}function Kr({suggestions:e,onSuggestionClick:t}){return(0,Q.jsx)(`div`,{"data-testid":`suggestions`,className:`grid grid-cols-2 gap-5 max-w-fit`,children:e.map((e,n)=>(0,Q.jsx)(Gr,{suggestion:e,onClick:t},n))})}var qr=E.SUGGESTIONS$HACKER_NEWS,Jr=`Please write a bash script which displays the top story on Hacker News. It should show the title, the link, and the number of points.
|
|
5
|
-
The script should only use tools that are widely available on unix systems, like curl and grep.`,Yr=E.SUGGESTIONS$HELLO_WORLD,Xr=`I want to create a Hello World app in Javascript that:
|
|
6
|
-
* Displays Hello World in the middle.
|
|
7
|
-
* Has a button that when clicked, changes the greeting with a bouncing animation to fun versions of Hello.
|
|
8
|
-
* Has a counter for how many times the button has been clicked.
|
|
9
|
-
* Has another button that changes the app's background color.`,Zr=E.SUGGESTIONS$TODO_APP,Qr=`I want to create a VueJS app that allows me to:
|
|
10
|
-
* See all the items on my todo list
|
|
11
|
-
* add a new item to the list
|
|
12
|
-
* mark an item as done
|
|
13
|
-
* totally remove an item from the list
|
|
14
|
-
* change the text of an item
|
|
15
|
-
* set a due date on the item
|
|
16
|
-
|
|
17
|
-
This should be a client-only app with no backend. The list should persist in localStorage.`,$r={repo:an,"non-repo":{[qr]:Jr,[Yr]:Xr,[Zr]:Qr}};function ei({onSuggestionsClick:e}){let{t}=T(`openhands`),{shouldHideSuggestions:n}=W();return(0,Q.jsx)(s,{children:!n&&(0,Q.jsxs)(z.div,{"data-testid":`chat-suggestions`,initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},transition:{duration:.3,ease:`easeInOut`},className:`pointer-events-auto absolute inset-x-4 bottom-[151px] top-0 flex flex-col items-center justify-center md:inset-x-8`,children:[(0,Q.jsx)(`div`,{className:`flex flex-col items-center p-4 rounded-xl w-full`,children:(0,Q.jsx)(`span`,{className:`pb-6 text-[32px] font-medium leading-5 text-white`,children:t(E.LANDING$TITLE)})}),(0,Q.jsx)(Kr,{suggestions:Object.entries($r.repo).slice(0,4).map(([e,t])=>({label:e,value:t})),onSuggestionClick:e})]})})}var ti={files:[],initialPrompt:null,selectedRepository:null,selectedRepositoryProvider:null,replayJson:null},ni=Je(e=>({...ti,addFile:t=>e(e=>({files:[...e.files,t]})),removeFile:t=>e(e=>({files:e.files.filter((e,n)=>n!==t)})),clearFiles:()=>e(()=>({files:[]})),setInitialPrompt:t=>e(()=>({initialPrompt:t})),clearInitialPrompt:()=>e(()=>({initialPrompt:null})),setSelectedRepository:t=>e(()=>({selectedRepository:t})),clearSelectedRepository:()=>e(()=>({selectedRepository:null})),setSelectedRepositoryProvider:t=>e(()=>({selectedRepositoryProvider:t})),setReplayJson:t=>e(()=>({replayJson:t})),reset:()=>e(()=>ti)})),ri=e=>(0,Q.jsx)(`svg`,{width:12,height:17,viewBox:`0 0 12 17`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,...e,children:(0,Q.jsx)(`path`,{fillRule:`evenodd`,clipRule:`evenodd`,d:`M11.5304 6.46978L10.4697 7.53044L6.75006 3.81077L6.75006 17.0001H5.25006L5.25006 3.81077L1.53039 7.53044L0.469727 6.46978L6.00006 0.939453L11.5304 6.46978Z`,fill:`currentColor`})});function ii({onClick:e}){return(0,Q.jsx)(`button`,{type:`button`,onClick:e,"data-testid":`scroll-to-bottom`,className:`flex items-center justify-center size-8 rounded-full bg-[var(--oh-surface)] text-[var(--oh-muted)] hover:bg-tertiary hover:text-white rotate-180 cursor-pointer transition-colors`,children:(0,Q.jsx)(ri,{width:15,height:15})})}var ai=[{width:`w-[25%]`,height:`h-4`,align:`justify-end`},{width:`w-[60%]`,height:`h-4`,align:`justify-start`},{width:`w-[45%]`,height:`h-4`,align:`justify-start`},{width:`w-[65%]`,height:`h-20`,align:`justify-start`},{width:`w-[35%]`,height:`h-4`,align:`justify-end`},{width:`w-[50%]`,height:`h-4`,align:`justify-start`},{width:`w-[30%]`,height:`h-4`,align:`justify-end`},{width:`w-[75%]`,height:`h-4`,align:`justify-start`},{width:`w-[55%]`,height:`h-4`,align:`justify-start`}];function oi({width:e,height:t}){return(0,Q.jsx)(`div`,{className:U(`rounded-md bg-foreground/5 animate-pulse`,e,t)})}function si(){let{t:e}=T(`openhands`);return(0,Q.jsx)(`div`,{className:`flex flex-col gap-6 p-4 w-full h-full overflow-hidden`,"data-testid":`chat-messages-skeleton`,"aria-label":e(E.CHAT_INTERFACE$LOADING_CONVERSATION),children:ai.map((e,t)=>(0,Q.jsx)(`div`,{className:U(`flex w-full`,e.align),children:(0,Q.jsx)(oi,{width:e.width,height:e.height})},t))})}var ci=220;function li({message:e,code:t,onDismiss:n,onRetry:r,onReauth:i}){let{t:a,i18n:o}=T(`openhands`),s=nr(t),[c,l]=$.useState(!1),[u,d]=$.useState(!1),[f,p]=$.useState(!1),m=$.useRef(null),h=o.exists(e,{ns:`openhands`}),g=h?String(a(e)):e,_=g.length>ci,v=_&&!c;return $.useEffect(()=>{if(!f)return;let e=setTimeout(()=>{p(!1)},2e3);return()=>clearTimeout(e)},[f]),$.useEffect(()=>{p(!1)},[g]),$.useLayoutEffect(()=>{let e=m.current;if(!e)return;let t=()=>{let t=Number.parseFloat(getComputedStyle(e).lineHeight);if(!Number.isFinite(t)||t<=0){d(!1);return}d(e.getBoundingClientRect().height>t*1.5)};t();let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[g,v,c,e]),(0,Q.jsxs)(`div`,{className:U(`flex w-full gap-2 rounded-lg border border-[var(--oh-border)] bg-[var(--oh-surface-raised)] p-2 text-[var(--oh-foreground)]`,u?`items-start`:`items-center`),"data-testid":`error-message-banner`,children:[(0,Q.jsx)(x,{"aria-hidden":!0,className:`h-4 w-4 shrink-0`,strokeWidth:2,style:{color:ve},"data-testid":`error-message-banner-icon`}),(0,Q.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[s&&(0,Q.jsx)(`div`,{className:`text-sm font-medium text-[var(--oh-foreground)]`,"data-testid":`error-message-banner-header`,children:a(s)}),(0,Q.jsx)(`div`,{ref:m,className:U(`whitespace-pre-wrap break-words text-sm text-[var(--oh-muted)]`,v&&`line-clamp-3`),"data-testid":`error-message-banner-content`,children:h?(0,Q.jsx)(w,{ns:`openhands`,i18nKey:e}):e}),i&&(0,Q.jsx)(`button`,{type:`button`,onClick:i,className:`mt-2 cursor-pointer rounded-md border border-[var(--oh-border)] px-2 py-1 text-xs font-normal text-[var(--oh-foreground)] hover:bg-[var(--oh-interactive-hover)]`,"data-testid":`error-message-banner-reauth`,children:a(E.ERROR$ACP_UPDATE_CREDENTIALS)}),_&&(0,Q.jsx)(`button`,{type:`button`,className:`mt-1 cursor-pointer text-xs font-normal text-[var(--oh-foreground)] underline`,onClick:()=>l(e=>!e),"data-testid":`error-message-banner-toggle`,children:a(c?E.COMMON$VIEW_LESS:E.COMMON$VIEW_MORE)})]}),(0,Q.jsxs)(`div`,{className:U(`flex shrink-0 gap-1`,u?`self-start`:`items-center`),children:[r&&(0,Q.jsx)(`button`,{type:`button`,onClick:r,className:`cursor-pointer rounded-md border border-[var(--oh-border)] px-2 py-1 text-xs font-normal text-[var(--oh-foreground)] hover:bg-[var(--oh-interactive-hover)]`,"data-testid":`error-message-banner-retry`,children:a(E.CHAT_INTERFACE$MESSAGE_RETRY)}),(0,Q.jsx)(`button`,{type:`button`,onClick:async()=>{try{await navigator.clipboard.writeText(g),p(!0)}catch{D(a(E.CHAT_INTERFACE$CHAT_MESSAGE_COPY_FAILED))}},className:`shrink-0 cursor-pointer rounded-md p-1 text-[var(--oh-muted)] hover:bg-[var(--oh-interactive-hover)] hover:text-[var(--oh-foreground)]`,"aria-label":a(f?E.BUTTON$COPIED:E.BUTTON$COPY),"data-testid":`error-message-banner-copy`,children:f?(0,Q.jsx)(le,{className:`h-4 w-4`,"aria-hidden":!0}):(0,Q.jsx)(de,{className:`h-4 w-4`,"aria-hidden":!0})}),n&&(0,Q.jsx)(`button`,{type:`button`,onClick:n,className:`shrink-0 cursor-pointer rounded-md p-1 text-[var(--oh-muted)] hover:bg-[var(--oh-interactive-hover)] hover:text-[var(--oh-foreground)]`,"aria-label":a(E.BUTTON$CLOSE),"data-testid":`error-message-banner-dismiss`,children:(0,Q.jsx)(he,{className:`h-4 w-4`,"aria-hidden":!0})})]})]})}function ui(){let{t:e}=T(`openhands`),{conversationId:t}=cn(),n=X(e=>e.pendingMessages),r=X(e=>e.markPendingMessageError),i=X(e=>e.markPendingMessageSending),a=X(e=>e.removePendingMessage),o=W(e=>e.restoreMessageToInputIfEmpty),{send:s}=ie(),c=$.useMemo(()=>t?n.filter(e=>Lt(t,e.conversationId)):[],[n,t]),l=$.useCallback(async t=>{let n=X.getState().pendingMessages.find(e=>e.id===t);if(n){i(t);try{await s(ae(n.text,n.imageUrls,n.fileUrls,n.timestamp))}catch(n){r(t,n instanceof Error?n.message:e(E.CHAT_INTERFACE$FAILED_TO_SEND_MESSAGE))}}},[s,r,i,e]),u=$.useCallback((e,t)=>{o(t),a(e)},[o,a]);return c.length===0?null:(0,Q.jsx)(Q.Fragment,{children:c.map(e=>(0,Q.jsx)(ne,{type:`user`,message:e.text,pendingStatus:e.status,onRetry:e.status===`error`?()=>l(e.id):void 0,onStop:e.status===`sending`?()=>u(e.id,e.text):void 0,children:e.imageUrls.length>0&&(0,Q.jsx)(I,{size:`small`,images:e.imageUrls})},e.id))})}var di=()=>{let{data:e}=J();return S({mutationKey:[`unified-upload-files`],mutationFn:async t=>{let{conversationId:n,files:r}=t;return vt(n,r,e)},meta:{disableToast:!0}})},fi=e=>(0,Q.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,...e,children:(0,Q.jsx)(`path`,{fillRule:`evenodd`,clipRule:`evenodd`,d:`M12 3.25C9.92893 3.25 8.25 4.92893 8.25 7V10H7C6.44772 10 6 10.4477 6 11V19C6 19.5523 6.44772 20 7 20H17C17.5523 20 18 19.5523 18 19V11C18 10.4477 17.5523 10 17 10H15.75V7C15.75 4.92893 14.0711 3.25 12 3.25ZM14.25 10V7C14.25 5.75736 13.2426 4.75 12 4.75C10.7574 4.75 9.75 5.75736 9.75 7V10H14.25Z`,fill:`currentColor`})});function pi(){let{t:e}=T(`openhands`),{data:t}=$e();return t?.confirmation_mode?(0,Q.jsx)(ze,{closeDelay:100,content:e(E.COMMON$CONFIRMATION_MODE_ENABLED),tooltipClassName:`bg-white text-black hover:bg-transparent`,children:(0,Q.jsx)(`div`,{className:`flex items-center justify-center w-[26px] h-[26px] rounded-lg bg-[var(--oh-surface)]`,children:(0,Q.jsx)(fi,{width:15,height:15})})}):null}var mi=e=>(0,Q.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,...e,children:(0,Q.jsx)(`path`,{d:`M15 12C15 12.7956 14.6839 13.5587 14.1213 14.1213C13.5587 14.6839 12.7956 15 12 15C11.2044 15 10.4413 14.6839 9.87868 14.1213C9.31607 13.5587 9 12.7956 9 12C9 11.2044 9.31607 10.4413 9.87868 9.87868C10.4413 9.31607 11.2044 9 12 9C12.7956 9 13.5587 9.31607 14.1213 9.87868C14.6839 10.4413 15 11.2044 15 12Z`,fill:`currentColor`})});function hi({status:e,statusColor:t}){return(0,Q.jsx)(`div`,{"data-testid":`chat-status-indicator`,className:c(`w-full max-w-full rounded-[100px] p-1 bg-[var(--oh-surface)] flex items-center gap-1`),children:(0,Q.jsxs)(s,{mode:`wait`,children:[(0,Q.jsx)(z.span,{className:`flex-shrink-0 animate-[pulse_1.2s_ease-in-out_infinite]`,initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},transition:{duration:.3},children:(0,Q.jsx)(mi,{className:`w-4 h-4`,color:t})},`dot-${e}`),(0,Q.jsx)(z.span,{initial:{opacity:0,y:-2},animate:{opacity:1,y:0},exit:{opacity:0,y:2},transition:{duration:.3},className:`pr-1.5 font-normal text-[11px] leading-[16px] normal-case break-words whitespace-normal`,children:e},`text-${e}`)]})})}var gi=()=>{let e=m(),{navigate:t}=Re(),{t:n}=T(`openhands`),{data:r}=J(),{trackConversationCreated:i}=et();return S({mutationFn:async()=>{if(!r?.id)throw Error(`No active conversation`);let e=await it.createConversation(void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,r.sandbox_id??void 0);if(e.status===`ERROR`)throw Error(e.detail||`Failed to create new conversation`);return{newConversationId:e.app_conversation_id?e.app_conversation_id:`task-${e.id}`,oldConversationId:r.id,taskId:e.id}},onMutate:()=>{b.loading(n(E.CONVERSATION$CLEARING),{...k,id:`clear-conversation`})},onSuccess:r=>{i({conversationId:r.newConversationId,taskId:r.taskId,hasRepository:!1,hasWorkspace:!1,hasInitialQuery:!1,hasParentConversation:!1,entryPoint:`new_command`}),b.dismiss(`clear-conversation`),O(n(E.CONVERSATION$CLEAR_SUCCESS)),t(`/conversations/${r.newConversationId}`),e.invalidateQueries({queryKey:[`user`,`conversations`]}),e.invalidateQueries({queryKey:[`v1-batch-get-app-conversations`]})},onError:e=>{b.dismiss(`clear-conversation`);let t=n(E.CONVERSATION$CLEAR_UNKNOWN_ERROR);e instanceof Error?t=e.message:typeof e==`string`&&(t=e),D(n(E.CONVERSATION$CLEAR_FAILED,{error:t}))}})};function _i(e,t){return e?`github`:t?`replay`:`direct`}function vi(){let{trackInitialQuerySubmitted:e,trackUserMessageSent:t}=et(),{setMessageToSend:n}=W(),{errorMessage:r,errorCode:i,removeErrorMessage:a,setErrorMessage:o}=pn(),s=f(),{isTask:c,taskStatus:l,taskDetail:u}=Ft(),d=c,p=_n(),{send:m}=ie(),{renderableEvents:h,allConversationEvents:g,totalEvents:_,hasSubstantiveAgentActions:v,userEventsExist:y}=Vr(),b=X(e=>e.enqueuePendingMessage),x=X(e=>e.markPendingMessageError),S=X(e=>e.pendingMessages),{t:C}=T(`openhands`),w=$.useRef(null),{scrollDomToBottom:O,onChatBodyScroll:k,hitBottom:A,autoScroll:j,setAutoScroll:M,setHitBottom:ee}=En(w),{mutate:te,isPending:N}=gi(),{curAgentState:P}=Y(),{handleBuildPlanClick:F}=L(),{data:ne}=J(),I=ne?.sandbox_status??null,R=on(),{isConfigured:ce,isLoading:le}=$t(),ue=!le&&!ce,z=P===V.RUNNING||P===V.LOADING;$.useEffect(()=>{if(z)return;let e=e=>{(e.metaKey||e.ctrlKey)&&e.key===`Enter`&&(e.preventDefault(),e.stopPropagation(),F(e),O())};return document.addEventListener(`keydown`,e),()=>{document.removeEventListener(`keydown`,e)}},[z,F,O]);let{selectedRepository:de,replayJson:fe}=ni(),{conversationId:B}=cn(),pe=gn(e=>{let t=B?e.statusByConversation[B]:void 0;return t?.active?`${t.iteration}:${t.status}`:null}),{mutateAsync:me}=di(),{isLoading:he,hasMore:ge,loadOlder:_e}=Ur(B),ve=$.useRef(null),H=$.useCallback(e=>{if(d||he||!ge)return;let t=e.scrollTop<=80,n=e.scrollHeight<=e.clientHeight+80;!t&&!n||(ve.current={scrollHeight:e.scrollHeight,scrollTop:e.scrollTop},_e().catch(e=>{ve.current=null,o(e instanceof Error&&e.message?e.message:C(E.ERROR$GENERIC))}))},[ge,he,d,_e,o,C]),ye=$.useCallback(e=>{e.deltaY<0&&e.currentTarget.scrollTop<=0&&H(e.currentTarget)},[H]),be=$.useMemo(()=>B?S.some(e=>Lt(B,e.conversationId)):!1,[S,B]),xe=g.length>0||be||!p?.isLoadingHistory,Ce=!!B,we=!xe&&!c,Te=fn(e=>B?(e.entriesByConversation[B]?.length??0)>0:!1),U=async(r,i,a)=>{if(r.trim()===`/new`){if(!B){D(C(E.CONVERSATION$CLEAR_NO_ID));return}if(_===0){D(C(E.CONVERSATION$CLEAR_EMPTY));return}if(N)return;te();return}let o=[...i],s=[...a];_===0?e({entryPoint:_i(de!==null,fe!==null),queryCharacterLength:r.length,replayJsonSize:fe?.length}):t({sessionMessageCount:_,currentMessageLength:r.length});let c=Mt([...o,...s]);if(!c.isValid){D(`Error: ${c.errorMessage}`);return}let l=o.map(e=>Nt(e)),u=await Promise.all(l),d=new Date().toISOString(),{skipped_files:f,uploaded_files:p}=s.length>0?await me({conversationId:B,files:s}):{skipped_files:[],uploaded_files:[]};f.forEach(e=>D(e.reason));let h=`${C(E.CHAT_INTERFACE$AUGMENTED_PROMPT_FILES_TITLE)}: ${p.join(`
|
|
18
|
-
|
|
19
|
-
`)}`,g=p.length>0?`${r}\n\n${h}`:r,v=b({conversationId:B,text:r,content:g,imageUrls:u,fileUrls:p,timestamp:d});O(),n(``);try{await m(ae(g,u,p,d))}catch(e){x(v,e instanceof Error?e.message:C(E.CHAT_INTERFACE$FAILED_TO_SEND_MESSAGE))}};$.useEffect(()=>{if(ve.current&&w.current){let{scrollHeight:e,scrollTop:t}=ve.current,n=w.current,r=n.scrollHeight-e;r>0&&(n.scrollTop=t+r),ve.current=null;return}j&&O()},[h.length,be,pe,O]);let De=$.useRef(H);$.useEffect(()=>{De.current=H}),$.useEffect(()=>{let e=w.current;e&&De.current(e)},[h.length,ge]);let Oe={scrollRef:w,autoScroll:j,setAutoScroll:M,scrollDomToBottom:O,hitBottom:A,setHitBottom:ee,onChatBodyScroll:k},ke=P===V.LOADING||P===V.INIT,Ae=P===V.STOPPED,je=P===V.PAUSED,Me=Ee({isPausing:je,isTask:c,taskStatus:l,isStartingStatus:ke,isStopStatus:Ae,curAgentState:P}),Ne=Se({isPausing:je,isTask:c,taskStatus:l,taskDetail:u,isStartingStatus:ke,isStopStatus:Ae,curAgentState:P,errorMessage:r,t:C});return(0,Q.jsx)(oe,{value:Oe,children:(0,Q.jsxs)(`div`,{className:`relative flex h-full flex-col justify-between px-4`,"data-testid":`chat-interface`,children:[!v&&!be&&!y&&!Te&&!we&&!d&&_===0&&!R&&!ue&&(0,Q.jsx)(ei,{onSuggestionsClick:e=>n(e)}),(0,Q.jsxs)(`div`,{ref:w,"data-testid":`chat-scroll-container`,onScroll:e=>{k(e.currentTarget),H(e.currentTarget)},onWheel:ye,className:`custom-scrollbar-always flex min-h-0 grow flex-col gap-2 overflow-x-hidden overflow-y-auto px-0 pt-4 pb-8 md:px-4`,children:[we&&Ce&&(0,Q.jsx)(si,{}),we&&!Ce&&(0,Q.jsx)(`div`,{className:`flex justify-center`,"data-testid":`loading-spinner`,children:(0,Q.jsx)(Le,{size:`small`})}),he&&(0,Q.jsxs)(`div`,{className:`flex items-center justify-center gap-2 py-3 text-sm text-neutral-400`,"data-testid":`loading-older-events`,children:[(0,Q.jsx)(Le,{size:`small`}),(0,Q.jsx)(`span`,{children:C(E.CHAT_INTERFACE$FETCHING_OLDER_MESSAGES)})]}),(0,Q.jsx)(re,{conversationId:B,anchorEventId:null}),xe&&h.length>0&&(0,Q.jsx)(se,{messages:h,allEvents:g}),(0,Q.jsx)(ui,{}),(0,Q.jsx)(lr,{conversationId:B})]}),(0,Q.jsxs)(`div`,{className:`flex shrink-0 flex-col gap-[6px] pb-4`,children:[(0,Q.jsx)(cr,{conversationId:B}),r&&(0,Q.jsx)(li,{message:r,code:i,onDismiss:a,onRetry:r===`Unable to connect to server`?()=>p?.reconnect():void 0,onReauth:rr(i)?()=>s(`/settings/agents`):void 0}),ue&&!R&&(0,Q.jsx)(tn,{}),R?(0,Q.jsxs)(`div`,{"data-testid":`archived-conversation-banner`,className:`mx-1 px-4 py-3 rounded-lg bg-[var(--oh-surface)] border border-[var(--oh-border-subtle)]`,children:[(0,Q.jsx)(`p`,{className:`text-xs font-semibold text-[var(--oh-foreground)]`,children:C(I===`ERROR`?E.CHAT_INTERFACE$ERROR_SANDBOX_TITLE:E.CHAT_INTERFACE$ARCHIVED_SANDBOX_TITLE)}),(0,Q.jsx)(`p`,{className:`text-xs text-[var(--oh-muted)] mt-0.5`,children:C(I===`ERROR`?E.CHAT_INTERFACE$ERROR_SANDBOX_DESCRIPTION:E.CHAT_INTERFACE$ARCHIVED_SANDBOX_DESCRIPTION)})]}):(0,Q.jsxs)(`div`,{className:`relative`,children:[(0,Q.jsx)(`div`,{className:`pointer-events-none absolute inset-x-0 bottom-full mb-1 z-20`,children:(0,Q.jsxs)(`div`,{className:`flex justify-between relative`,children:[(0,Q.jsxs)(`div`,{className:`flex items-end gap-1 pointer-events-auto`,children:[(0,Q.jsx)(pi,{}),ke&&(0,Q.jsx)(hi,{statusColor:Me,status:Ne})]}),A?P===V.RUNNING&&(0,Q.jsx)(`div`,{className:`absolute left-1/2 transform -translate-x-1/2 bottom-0 pointer-events-auto`,children:(0,Q.jsx)(Wr,{})}):(0,Q.jsx)(`div`,{className:`absolute left-1/2 transform -translate-x-1/2 bottom-0 pointer-events-auto`,children:(0,Q.jsx)(ii,{onClick:O})})]})}),(0,Q.jsx)(Br,{onSubmit:U,disabled:N||ue})]})]})]})})}function yi({isRightPanelShown:e}){return(0,Q.jsx)(`div`,{className:`flex justify-center w-full h-full`,children:(0,Q.jsx)(`div`,{className:`w-full min-w-0 max-w-[800px] h-full flex flex-col min-h-0 transition-all duration-300 ease-in-out`,children:(0,Q.jsx)(vi,{})})})}function bi({children:e}){return(0,Q.jsx)(`div`,{className:`absolute inset-0`,children:e})}function xi({children:e}){return(0,Q.jsx)(`div`,{className:`flex flex-col h-full w-full`,children:e})}function Si({children:e}){return(0,Q.jsx)(`div`,{className:`overflow-hidden flex-grow h-full w-full relative`,children:e})}function Ci({className:e}){let{t}=T(`openhands`);return(0,Q.jsxs)(`div`,{className:U(`bg-[var(--oh-surface)] flex h-full w-full flex-col items-center justify-center gap-3`,e),children:[(0,Q.jsx)(pe,{className:`h-8 w-8 shrink-0 animate-spin text-tertiary-light`,"aria-hidden":!0}),(0,Q.jsx)(M,{as:`p`,role:`status`,"aria-live":`polite`,className:`block w-full text-center text-base font-normal leading-5`,duration:1,spread:2,children:t(E.HOME$LOADING)})]})}function wi({children:e,onReady:t}){return(0,$.useLayoutEffect)(()=>{t()},[t]),e}function Ti({onPending:e}){return(0,$.useLayoutEffect)(()=>{e()},[e]),(0,Q.jsx)(Ci,{})}var Ei={duration:.35,ease:`easeInOut`};function Di({showAgentLoading:e,tabKey:t,children:n}){let r=P(),[i,a]=(0,$.useState)(!1);(0,$.useLayoutEffect)(()=>{a(!1)},[t]);let o=(0,$.useCallback)(()=>{a(!0)},[]),c=(0,$.useCallback)(()=>{a(!1)},[]),l=e||i;return r?(0,Q.jsx)(`div`,{className:`relative h-full w-full overflow-hidden`,children:l?(0,Q.jsx)(Ci,{}):(0,Q.jsx)($.Suspense,{fallback:(0,Q.jsx)(Ti,{onPending:o}),children:(0,Q.jsx)(wi,{onReady:c,children:n})})}):(0,Q.jsxs)(`div`,{className:`relative h-full w-full overflow-hidden`,children:[(0,Q.jsx)(z.div,{className:`absolute inset-0 h-full w-full`,initial:!1,animate:{opacity:+!l},transition:Ei,"aria-hidden":l,children:(0,Q.jsx)($.Suspense,{fallback:(0,Q.jsx)(Ti,{onPending:o}),children:(0,Q.jsx)(wi,{onReady:c,children:n})})}),(0,Q.jsx)(s,{children:l?(0,Q.jsx)(z.div,{className:`absolute inset-0 z-10 h-full w-full`,initial:{opacity:1},animate:{opacity:1},exit:{opacity:0},transition:Ei,children:(0,Q.jsx)(Ci,{})},`conversation-tab-loading-overlay`):null})]})}var Oi=(0,$.lazy)(()=>n(()=>import(`./files-tab-DHqtsKLy.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61]))),ki=(0,$.lazy)(()=>n(()=>import(`./browser-tab-aiDg7aEn.js`),__vite__mapDeps([62,2,1,63,7,8,18,64,13,42,10,11,65,26]))),Ai=(0,$.lazy)(()=>n(()=>import(`./planner-tab-G4j36bJk.js`),__vite__mapDeps([66,1,2,67,7,8,18,42,10,11,44,22,20,21,23,24,45,13,19,25,46,47,48,68,69,70,71,3,4,5,6,9,72,73,74,15,16,30,27,28,14,29,31,32,33,34,35,36,75,76,77,78,79,80,49,50,51,52,81,82,26,60]))),ji=(0,$.lazy)(()=>n(()=>import(`./task-list-tab-BAThr9Ex.js`),__vite__mapDeps([83,1,2,8,18,42,10,11,84,37,26,85,86,40,41]))),Mi=(0,$.lazy)(()=>n(()=>import(`./terminal-B0aL_iDZ.js`),__vite__mapDeps([87,1,2,88,89,90,7,8,18,38,39,10,11,40,41,42,53,49,50,4,14,27,3,5,6,9,28,29,30,31,32,33,34,35,36,51,52,15,16,54,26,91]))),Ni={tasklist:{component:ji},files:{component:Oi},browser:{component:ki},terminal:{component:Mi},planner:{component:Ai}};function Pi(){let{selectedTab:e,shouldShownAgentLoading:t}=W(),{conversationId:n}=q(),r=(0,$.useMemo)(()=>Ni[e]??Ni.files,[e]).component,i=e===`terminal`?`${e}-${n}`:e??`files`;return(0,Q.jsx)(xi,{children:(0,Q.jsx)(Si,{children:(0,Q.jsx)(Di,{showAgentLoading:t,tabKey:i,children:(0,Q.jsx)(bi,{children:(0,Q.jsx)(r,{})},i)})})})}var Fi=()=>{let e=m(),t=pn(e=>e.removeErrorMessage);return S({mutationKey:[`start-conversation`],mutationFn:async e=>g(e.conversationId),onMutate:async()=>(await e.cancelQueries({queryKey:[`user`,`conversations`]}),{previousConversations:e.getQueryData([`user`,`conversations`])}),onError:(t,n,r)=>{r?.previousConversations&&e.setQueryData([`user`,`conversations`],r.previousConversations)},onSettled:(t,n,r)=>{h(e,r.conversationId)},onSuccess:(n,r)=>{t(),_(e,r.conversationId,ke.RUNNING)}})},Ii=e=>(0,Q.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,...e,children:(0,Q.jsx)(`path`,{fillRule:`evenodd`,clipRule:`evenodd`,d:`M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22ZM10 9H14A1 1 0 0 1 15 10V14A1 1 0 0 1 14 15H10A1 1 0 0 1 9 14V10A1 1 0 0 1 10 9Z`,fill:`currentColor`})}),Li=e=>(0,Q.jsxs)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,...e,children:[(0,Q.jsx)(`path`,{fillRule:`evenodd`,clipRule:`evenodd`,d:`M12.9 1.50004C15.3 1.65004 17.55 2.85004 19.2 4.50004C21.15 6.60004 22.2 9.15004 22.2 12.15C22.2 14.55 21.3 16.8 19.8 18.75C18.3 20.55 16.2 21.9 13.8 22.35C11.4 22.8 9 22.5 6.9 21.3C4.8 20.1 3.15 18.3 2.25 16.05C1.35 13.8 1.2 11.25 1.95 9.00004C2.7 6.60004 4.05 4.65004 6.15 3.30004C8.1 1.95004 10.5 1.35004 12.9 1.50004ZM13.65 20.85C15.6 20.4 17.4 19.35 18.75 17.7C19.95 16.05 20.7 14.1 20.55 12C20.55 9.60004 19.65 7.20004 18 5.55004C16.5 4.05004 14.7 3.15004 12.6 3.00004C10.65 2.85004 8.55 3.30004 6.9 4.50004C5.25 5.70004 4.05 7.35004 3.45 9.45004C2.85 11.4 2.85 13.5 3.75 15.45C4.65 17.4 6 18.9 7.8 19.95C9.6 21 11.7 21.3 13.65 20.85Z`,fill:`currentColor`}),(0,Q.jsx)(`path`,{fillRule:`evenodd`,clipRule:`evenodd`,d:`M9 7.49998L10.1655 6.87598L16.9155 11.376V12.624L10.1655 17.124L9 16.5V7.49998ZM10.5 8.90098V15.099L15.1485 12L10.5 8.90098Z`,fill:`currentColor`})]});function Ri({icon:e,text:t,onClick:n,testId:r}){return(0,Q.jsx)(G,{testId:r,onClick:n,children:(0,Q.jsxs)(`div`,{className:`flex min-w-0 w-full items-center justify-between gap-2`,children:[(0,Q.jsx)(`span`,{className:`min-w-0 truncate`,children:t}),(0,Q.jsx)(`span`,{className:Ve,"aria-hidden":!0,children:e})]})})}function zi({className:e=``,executionStatus:t,isPausing:n=!1}){let{curAgentState:r}=Y(),{isTask:i,taskStatus:a,taskDetail:o}=Ft(),{t:s}=T(`openhands`),{errorMessage:c}=pn(),l=r===V.LOADING||r===V.INIT,u=Oe(t)||H(t),d=Ee({isPausing:n,isTask:i,taskStatus:a,isStartingStatus:l,isStopStatus:u,curAgentState:r}),f=Se({isPausing:n,isTask:i,taskStatus:a,taskDetail:o,isStartingStatus:l,isStopStatus:u,curAgentState:r,errorMessage:c,t:s});return(0,Q.jsx)(`div`,{className:e,"data-testid":`server-status`,children:(0,Q.jsxs)(`div`,{className:`flex items-center`,children:[(0,Q.jsx)(mi,{className:`w-6 h-6 shrink-0`,color:d}),(0,Q.jsx)(`span`,{className:`text-[13px] text-white font-normal`,children:f})]})})}function Bi({onClose:e,onStopServer:t,onStartServer:n,executionStatus:r,position:i=`top`,className:a=``,isPausing:o=!1}){let{t:s}=T(`openhands`),c=gt(e),l=be(r),u=H(r),d=l||u;return(0,Q.jsxs)(bt,{ref:c,testId:`server-status-context-menu`,position:i,alignment:`left`,size:`default`,className:U(`left-2 w-fit min-w-42`,a),children:[(0,Q.jsx)(zi,{executionStatus:r,isPausing:o,className:`pl-0 pr-2 py-1`}),d&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(He,{inset:`menu`}),l&&t&&(0,Q.jsx)(Ri,{icon:(0,Q.jsx)(Ii,{width:18,height:18}),text:s(E.COMMON$STOP_RUNTIME),onClick:t,testId:`stop-server-button`}),u&&n&&(0,Q.jsx)(Ri,{icon:(0,Q.jsx)(Li,{width:18,height:18}),text:s(E.COMMON$START_RUNTIME),onClick:n,testId:`start-server-button`})]})]})}var Vi=e(l(),1);function Hi({isPublic:e,onToggle:t,ariaLabel:n}){return(0,Q.jsxs)(`label`,{className:`relative inline-flex shrink-0 cursor-pointer items-center`,children:[(0,Q.jsx)(`input`,{hidden:!0,type:`checkbox`,"data-testid":`share-publicly-button`,checked:e,"aria-label":n,onChange:e=>t(e.target.checked)}),(0,Q.jsx)(`span`,{"aria-hidden":!0,className:U(`inline-flex h-3.5 w-7 items-center rounded-full px-0.5 py-px transition-colors duration-200 ease-in-out`,e?`bg-white`:`bg-base-secondary`),children:(0,Q.jsx)(`span`,{className:U(`block h-2 w-2 shrink-0 rounded-full transition-transform duration-200 ease-in-out`,e?`translate-x-[calc(1rem-1px)] bg-base-secondary`:`translate-x-px bg-tertiary-light`)})})]})}function Ui({onClose:e,onRename:t,onDelete:n,onStop:r,onDisplayCost:i,onShowAgentTools:a,onShowSkills:o,onShowHooks:s,onTogglePublic:c,onCopyShareLink:l,onDownloadConversation:u,shareUrl:d,position:f=`bottom`,anchorRef:p}){let m=Dn(),{t:h}=T(`openhands`),{backend:g}=A(),{data:_}=J(),v=on(),y=gt(e),b=p?.current??null,[x,S]=$.useState();$.useLayoutEffect(()=>{if(!b)return;let e=()=>{let e=b.getBoundingClientRect();if(!e)return;let t={position:`fixed`,zIndex:9999};f===`top`?t.bottom=window.innerHeight-e.top+8:t.top=e.bottom+8,t.left=e.left,S(t)};return e(),window.addEventListener(`resize`,e),window.addEventListener(`scroll`,e,!0),()=>{window.removeEventListener(`resize`,e),window.removeEventListener(`scroll`,e,!0)}},[b,f]);let C=!!(a||o||s),w=!!i,D=!!(r||n),O=g.kind===`cloud`?E.COMMON$CLOSE_CONVERSATION_STOP_RUNTIME:E.COMMON$STOP_CONVERSATION,k=g.kind===`cloud`&&!!c,j=_?.public||!1,M=!!b,ee=(0,Q.jsxs)(bt,{ref:y,testId:`conversation-name-context-menu`,position:f,alignment:`left`,className:U(m?`right-0 translate-x-[34%] left-auto`:``,M?`!static !top-auto !bottom-auto !left-auto !right-auto !mt-0`:``),children:[t&&(0,Q.jsx)(G,{testId:`rename-button`,onClick:t,children:(0,Q.jsx)(K,{icon:(0,Q.jsx)(Ct,{width:16,height:16}),text:h(E.BUTTON$RENAME)})}),C&&(0,Q.jsx)(He,{testId:`separator-tools`,inset:`menu`}),o&&(0,Q.jsx)(Ut,{isDisabled:v,children:(0,Q.jsx)(G,{testId:`show-skills-button`,onClick:o,isDisabled:v,children:(0,Q.jsx)(K,{icon:(0,Q.jsx)(wt,{width:16,height:16,className:`stroke-[1.75]`,"aria-hidden":!0}),text:h(E.CONVERSATION$SHOW_SKILLS)})})}),s&&(0,Q.jsx)(Ut,{isDisabled:v,children:(0,Q.jsx)(G,{testId:`show-hooks-button`,onClick:s,isDisabled:v,children:(0,Q.jsx)(K,{icon:(0,Q.jsx)(Yt,{width:16,height:16,"aria-hidden":!0}),text:h(E.CONVERSATION$SHOW_HOOKS)})})}),a&&(0,Q.jsx)(Ut,{isDisabled:v,children:(0,Q.jsx)(G,{testId:`show-agent-tools-button`,onClick:a,isDisabled:v,children:(0,Q.jsx)(K,{icon:(0,Q.jsx)(Ke,{width:16,height:16}),text:h(E.BUTTON$SHOW_AGENT_TOOLS_AND_METADATA)})})}),u&&(0,Q.jsx)(G,{testId:`download-trajectory-button`,onClick:u,children:(0,Q.jsx)(K,{icon:(0,Q.jsx)(ot,{width:16,height:16}),text:h(E.BUTTON$EXPORT_CONVERSATION)})}),(w||D)&&(0,Q.jsx)(He,{testId:`separator-info-control`,inset:`menu`}),i&&(0,Q.jsx)(G,{testId:`display-cost-button`,onClick:i,children:(0,Q.jsx)(K,{icon:(0,Q.jsx)(pt,{width:16,height:16}),text:h(E.BUTTON$DISPLAY_COST)})}),k&&c&&(0,Q.jsxs)(`li`,{className:`flex w-full items-center gap-2 rounded px-2 py-2 hover:bg-[var(--oh-interactive-hover)]`,children:[(0,Q.jsx)(`span`,{className:`flex shrink-0 items-center text-[var(--oh-muted)]`,"aria-hidden":!0,children:(0,Q.jsx)(jn,{size:16})}),(0,Q.jsx)(`span`,{className:`min-w-0 flex-1 truncate text-sm`,children:h(E.CONVERSATION$SHARE_PUBLICLY)}),(0,Q.jsxs)(`div`,{className:`flex shrink-0 items-center`,children:[j&&d&&l&&(0,Q.jsxs)(`div`,{className:`mr-2 flex items-center gap-0.5`,children:[(0,Q.jsx)(`button`,{type:`button`,"data-testid":`copy-share-link-button`,onClick:l,className:`rounded p-0.5 text-[var(--oh-muted)] hover:bg-[var(--oh-interactive-selected)] hover:text-[var(--oh-foreground)] cursor-pointer [&_svg]:text-current`,title:h(E.BUTTON$COPY_TO_CLIPBOARD),children:(0,Q.jsx)(Dt,{width:14,height:14})}),(0,Q.jsx)(`a`,{"data-testid":`open-share-link-button`,href:d,target:`_blank`,rel:`noopener noreferrer`,onClick:e=>e.stopPropagation(),className:`rounded p-0.5 text-[var(--oh-muted)] no-underline visited:text-[var(--oh-muted)] hover:bg-[var(--oh-interactive-selected)] hover:text-[var(--oh-foreground)] cursor-pointer [&_svg]:text-current`,title:h(E.BUTTON$OPEN_IN_NEW_TAB),children:(0,Q.jsx)(fe,{size:14,"aria-hidden":!0})})]}),(0,Q.jsx)(Hi,{isPublic:j,onToggle:c,ariaLabel:h(E.CONVERSATION$SHARE_PUBLICLY)})]})]}),r&&(0,Q.jsx)(Ut,{isDisabled:v,children:(0,Q.jsx)(G,{testId:`stop-button`,onClick:r,isDisabled:v,children:(0,Q.jsx)(K,{icon:(0,Q.jsx)(Ue,{width:16,height:16}),text:h(O)})})}),n&&(0,Q.jsx)(G,{testId:`delete-button`,onClick:n,children:(0,Q.jsx)(K,{icon:(0,Q.jsx)(xt,{width:16,height:16}),text:h(E.COMMON$DELETE_CONVERSATION)})})]});return M?typeof document>`u`||!x?null:Vi.createPortal((0,Q.jsx)(`div`,{style:x,children:ee}),document.body):ee}function Wi({onClose:e}){let{t}=T(`openhands`);return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(Qe,{onClose:e,testId:`close-metrics-modal`}),(0,Q.jsx)(`div`,{className:`w-full pr-6`,children:(0,Q.jsx)(Fe,{title:t(E.CONVERSATION$METRICS_INFO)})})]})}function Gi({currentCost:e,maxBudget:t}){let n=e/t*100;return(0,Q.jsx)(`div`,{className:`w-full h-1.5 bg-tertiary rounded-full overflow-hidden mt-1`,children:(0,Q.jsx)(`div`,{className:U(`h-full transition-all duration-300`,n>80?`bg-red-500`:`bg-blue-500`),style:{width:`${Math.min(100,n)}%`}})})}function Ki({currentCost:e,maxBudget:t}){let{t:n}=T(`openhands`),r=e/t*100;return(0,Q.jsx)(`div`,{className:`flex justify-end`,children:(0,Q.jsx)(`span`,{className:`text-xs text-[var(--oh-muted)]`,children:n(E.CONVERSATION$BUDGET_USAGE_FORMAT,{currentCost:`$${e.toFixed(4)}`,maxBudget:`$${t.toFixed(4)}`,usagePercentage:r.toFixed(2),used:n(E.CONVERSATION$USED)})})})}function qi({cost:e,maxBudgetPerTask:t}){let{t:n}=T(`openhands`);return e===null?null:(0,Q.jsx)(`div`,{className:`border-b border-[var(--oh-border-subtle)]`,children:t!==null&&t>0?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(Gi,{currentCost:e,maxBudget:t}),(0,Q.jsx)(Ki,{currentCost:e,maxBudget:t})]}):(0,Q.jsx)(`span`,{className:`text-xs text-[var(--oh-muted)]`,children:n(E.CONVERSATION$NO_BUDGET_LIMIT)})})}function Ji({cost:e,maxBudgetPerTask:t}){let{t:n}=T(`openhands`);return e===null?null:(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`div`,{className:`flex justify-between items-center pb-2`,children:[(0,Q.jsx)(`span`,{className:`text-lg font-semibold`,children:n(E.CONVERSATION$TOTAL_COST)}),(0,Q.jsxs)(`span`,{className:`font-semibold`,children:[`$`,e.toFixed(4)]})]}),(0,Q.jsx)(qi,{cost:e,maxBudgetPerTask:t})]})}function Yi({label:e,value:t,labelClassName:n=``,valueClassName:r=`font-semibold`}){return(0,Q.jsxs)(`div`,{className:`flex justify-between items-center border-b border-[var(--oh-border-subtle)] pb-2`,children:[(0,Q.jsx)(`span`,{className:n,children:e}),(0,Q.jsx)(`span`,{className:r,children:t})]})}function Xi({usage:e}){let{t}=T(`openhands`);return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(Yi,{label:t(E.CONVERSATION$INPUT),value:e.prompt_tokens.toLocaleString()}),(0,Q.jsxs)(`div`,{className:`grid grid-cols-2 gap-2 pl-4 text-sm`,children:[(0,Q.jsx)(`span`,{className:`text-[var(--oh-muted)]`,children:t(E.CONVERSATION$CACHE_HIT)}),(0,Q.jsx)(`span`,{className:`text-right`,children:e.cache_read_tokens.toLocaleString()}),(0,Q.jsx)(`span`,{className:`text-[var(--oh-muted)]`,children:t(E.CONVERSATION$CACHE_WRITE)}),(0,Q.jsx)(`span`,{className:`text-right`,children:e.cache_write_tokens.toLocaleString()})]}),(0,Q.jsx)(Yi,{label:t(E.CONVERSATION$OUTPUT),value:e.completion_tokens.toLocaleString()}),(0,Q.jsx)(Yi,{label:t(E.CONVERSATION$TOTAL),value:(e.prompt_tokens+e.completion_tokens).toLocaleString(),labelClassName:`font-semibold`,valueClassName:`font-bold`})]})}function Zi({perTurnToken:e,contextWindow:t}){let{t:n}=T(`openhands`),r=t>0?e/t*100:0,i=Math.min(100,r);return(0,Q.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,Q.jsx)(`div`,{className:`flex items-center justify-between`,children:(0,Q.jsx)(`span`,{className:`font-semibold`,children:n(E.CONVERSATION$CONTEXT_WINDOW)})}),(0,Q.jsx)(`div`,{className:`w-full h-1.5 bg-tertiary rounded-full overflow-hidden`,children:(0,Q.jsx)(`div`,{className:`h-full bg-foreground transition-all duration-300`,style:{width:`${i}%`}})}),(0,Q.jsx)(`div`,{className:`flex justify-end`,children:(0,Q.jsxs)(`span`,{className:`text-xs text-[var(--oh-muted)]`,children:[e.toLocaleString(),` / `,t.toLocaleString(),` (`,r.toFixed(2),`% `,n(E.CONVERSATION$USED),`)`]})})]})}function Qi(){let{t:e}=T(`openhands`);return(0,Q.jsx)(`div`,{className:`text-center`,children:(0,Q.jsx)(`p`,{className:`text-[var(--oh-muted)]`,children:e(E.CONVERSATION$NO_METRICS)})})}function $i(e){let{stats:t}=e;if(!t?.usage_to_metrics)return{accumulated_cost:0,max_budget_per_task:null,accumulated_token_usage:null};let n=0,r=null,i=null;for(let e of Object.values(t.usage_to_metrics))n+=e.accumulated_cost,r===null&&e.max_budget_per_task!==null&&(r=e.max_budget_per_task),e.accumulated_token_usage&&(i=i===null?{...e.accumulated_token_usage}:{prompt_tokens:i.prompt_tokens+e.accumulated_token_usage.prompt_tokens,completion_tokens:i.completion_tokens+e.accumulated_token_usage.completion_tokens,cache_read_tokens:i.cache_read_tokens+e.accumulated_token_usage.cache_read_tokens,cache_write_tokens:i.cache_write_tokens+e.accumulated_token_usage.cache_write_tokens,context_window:Math.max(i.context_window,e.accumulated_token_usage.context_window),per_turn_token:Math.max(i.per_turn_token,e.accumulated_token_usage.per_turn_token)});return{accumulated_cost:n,max_budget_per_task:r,accumulated_token_usage:i}}var ea=(e,t,n,r=!0)=>{let i=C({queryKey:[`conversation-metrics`,e,t,n],queryFn:async()=>{if(!e)throw Error(`Conversation ID is required`);return $i(await it.getRuntimeConversation(e,t,n))},enabled:r&&!!e&&!!t,staleTime:1e3*30,gcTime:1e3*60*5,refetchInterval:1e3*30,retry:!1});return{data:i.data,isLoading:i.isLoading,error:i.error}};function ta({isOpen:e,onOpenChange:t}){let n=yn(),{data:r}=J(),i=r?.id,a=r?.conversation_url,o=r?.session_api_key,{data:s}=ea(i,a,o,e),c=(0,$.useMemo)(()=>s?{cost:s.accumulated_cost,max_budget_per_task:s.max_budget_per_task,usage:s.accumulated_token_usage?{prompt_tokens:s.accumulated_token_usage.prompt_tokens??0,completion_tokens:s.accumulated_token_usage.completion_tokens??0,cache_read_tokens:s.accumulated_token_usage.cache_read_tokens??0,cache_write_tokens:s.accumulated_token_usage.cache_write_tokens??0,context_window:s.accumulated_token_usage.context_window??0,per_turn_token:s.accumulated_token_usage.per_turn_token??0}:null}:n,[s,n]);return e?(0,Q.jsx)(Ne,{onClose:()=>t(!1),children:(0,Q.jsxs)(Pe,{testID:`metrics-modal`,className:`relative items-start border border-[var(--oh-border)]`,children:[(0,Q.jsx)(Wi,{onClose:()=>t(!1)}),(0,Q.jsxs)(`div`,{className:`w-full`,children:[(c?.cost!==null||c?.usage!==null)&&(0,Q.jsx)(`div`,{className:`rounded-md border border-[var(--oh-border)] bg-surface-raised p-3`,children:(0,Q.jsxs)(`div`,{className:`grid gap-3`,children:[(0,Q.jsx)(Ji,{cost:c?.cost??null,maxBudgetPerTask:c?.max_budget_per_task??null}),c?.usage!==null&&(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsx)(Xi,{usage:c.usage}),(0,Q.jsx)(Zi,{perTurnToken:c.usage.per_turn_token,contextWindow:c.usage.context_window})]})]})}),!c?.cost&&!c?.usage&&(0,Q.jsx)(`div`,{className:`rounded-md border border-[var(--oh-border)] bg-surface-raised p-3`,children:(0,Q.jsx)(Qi,{})})]})]})}):null}function na(){let{t:e}=T(`openhands`),{conversationId:t}=q(),{data:n}=J(),{mutate:r}=ht(),[i,a]=$.useState(`view`),[o,s]=$.useState(!1),c=$.useRef(null),l=$.useRef(null),{handleDelete:u,handleStop:d,handleDownloadConversation:f,handleDisplayCost:p,handleShowAgentTools:m,handleShowSkills:h,handleShowHooks:g,handleTogglePublic:_,handleCopyShareLink:v,shareUrl:y,handleConfirmDelete:b,handleConfirmStop:x,metricsModalVisible:S,setMetricsModalVisible:C,systemModalVisible:w,setSystemModalVisible:D,skillsModalVisible:k,setSkillsModalVisible:A,hooksModalVisible:j,setHooksModalVisible:M,confirmDeleteModalVisible:ee,setConfirmDeleteModalVisible:te,confirmStopModalVisible:N,setConfirmStopModalVisible:P,systemMessage:F,shouldShowStop:ne,shouldShowDownloadConversation:re,shouldShowDisplayCost:ie,shouldShowAgentTools:I,shouldShowSkills:L,shouldShowHooks:ae}=Jt({conversationId:t,executionStatus:n?.execution_status,showOptions:!0,onContextMenuToggle:s});return $.useEffect(()=>{i===`edit`&&c.current?.focus()},[i]),n?(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`div`,{className:`flex items-center gap-2 h-[22px] text-base font-normal text-left pl-0 lg:pl-1 min-w-0`,"data-testid":`conversation-name`,children:[i===`edit`?(0,Q.jsx)(`input`,{ref:c,"data-testid":`conversation-name-input`,onClick:e=>{i===`edit`&&(e.preventDefault(),e.stopPropagation())},onBlur:()=>{if(c.current?.value&&t){let i=c.current.value.trim();i!==n?.title&&r({conversationId:t,newTitle:i},{onSuccess:()=>{O(e(E.CONVERSATION$TITLE_UPDATED))}})}else c.current&&(c.current.value=n?.title??``);a(`view`)},onKeyUp:e=>{e.nativeEvent.isComposing||e.key===`Enter`&&e.currentTarget.blur()},type:`text`,defaultValue:n.title||``,className:`text-white leading-5 bg-transparent border-none outline-none text-base font-normal w-fit max-w-fit field-sizing-content`}):(0,Q.jsx)(`div`,{className:`text-white leading-5 truncate`,"data-testid":`conversation-name-title`,onDoubleClick:()=>{a(`edit`)},title:n.title||``,children:n.title}),i!==`edit`&&(0,Q.jsxs)(`div`,{ref:l,className:`relative flex items-center shrink-0`,children:[(0,Q.jsx)(St,{onClick:e=>{e.preventDefault(),e.stopPropagation(),s(!o)}}),o&&(0,Q.jsx)(Ui,{onClose:()=>s(!1),onRename:e=>{e.preventDefault(),e.stopPropagation(),a(`edit`),s(!1)},onDelete:u,onStop:ne?d:void 0,onDisplayCost:ie?p:void 0,onShowAgentTools:I?m:void 0,onShowSkills:L?h:void 0,onShowHooks:ae?g:void 0,onTogglePublic:_,onCopyShareLink:v,shareUrl:y,onDownloadConversation:re?f:void 0,position:`bottom`,anchorRef:l})]})]}),(0,Q.jsx)(ta,{isOpen:S,onOpenChange:C}),(0,Q.jsx)(nn,{isOpen:w,onClose:()=>D(!1),systemMessage:F||null}),k&&(0,Q.jsx)(Vt,{onClose:()=>A(!1)}),j&&(0,Q.jsx)(Gt,{onClose:()=>M(!1)}),ee&&(0,Q.jsx)(ct,{onConfirm:b,onCancel:()=>te(!1),conversationTitle:n?.title||``}),N&&(0,Q.jsx)(st,{onConfirm:x,onCancel:()=>P(!1)})]}):null}function ra({children:e,tooltip:t,ariaLabel:n}){return(0,Q.jsx)(ze,{content:t,placement:`bottom`,tooltipClassName:`bg-white text-black text-xs font-medium leading-5`,children:(0,Q.jsx)(`span`,{"data-aria-label":n,children:e})})}function ia({className:e}){let{t}=T(`openhands`),n=Dn(),r=on(),i=f(),{conversationId:a}=q(),{isRightPanelShown:o,setHasRightPanelToggled:s,setIsRightPanelShown:c,setSelectedTab:l}=W(),u=()=>{if(r)return;if(n){if(!a)return;s(!0),c(!0);let{selectedTab:e}=W.getState();e||l(`files`),i(`/conversations/${a}/panel`);return}let e=!o;if(s(e),e){let{selectedTab:e}=W.getState();e||l(`files`)}},d=t(r?E.CONVERSATION$UNAVAILABLE_FOR_ARCHIVES:n?E.COMMON$SHOW_PANEL:o?E.COMMON$HIDE_PANEL:E.COMMON$SHOW_PANEL),p=n?!1:o;return(0,Q.jsx)(ra,{tooltip:d,ariaLabel:d,children:(0,Q.jsx)(`button`,{type:`button`,onClick:u,disabled:r,className:U(ft,r&&`cursor-not-allowed opacity-50 hover:bg-transparent hover:text-[var(--oh-muted)]`,e),"aria-label":d,"aria-pressed":p,"aria-disabled":r,"data-testid":`right-panel-toggle`,children:(0,Q.jsx)(dt,{className:`w-5 h-5 -scale-x-100`})})})}function aa(){let{conversationId:e}=q(),{data:t}=J(),{curAgentState:n}=Y(),{isTask:r,taskStatus:i}=Ft(),{mutate:a}=We(),{mutate:o}=Fi(),{providers:s}=qe(),c=t?.execution_status??null,l=Ee({isPausing:!1,isTask:r,taskStatus:i,isStartingStatus:n===V.LOADING||n===V.INIT,isStopStatus:Oe(c),curAgentState:n});return(0,Q.jsxs)(`div`,{className:`flex items-center justify-between w-full`,children:[(0,Q.jsxs)(`div`,{className:`flex items-center min-w-0`,children:[(0,Q.jsxs)(`div`,{className:`group relative shrink-0`,children:[(0,Q.jsx)(mi,{className:`ml-[3.5px] w-6 h-6 cursor-pointer`,color:l}),(0,Q.jsx)(Bi,{onClose:()=>{},onStopServer:be(c)?t=>{t.preventDefault(),t.stopPropagation(),e&&a({conversationId:e})}:void 0,onStartServer:H(c)?t=>{t.preventDefault(),t.stopPropagation(),e&&o({conversationId:e,providers:s})}:void 0,executionStatus:c,position:`bottom`,className:`opacity-0 invisible pointer-events-none group-hover:opacity-100 group-hover:visible group-hover:pointer-events-auto bottom-full left-0 mt-0 min-h-fit`,isPausing:!1})]}),(0,Q.jsx)(na,{})]}),(0,Q.jsx)(ia,{className:`mr-2`})]})}var oa=e=>(0,Q.jsxs)(`svg`,{width:20,height:20,viewBox:`0 0 20 20`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,...e,children:[(0,Q.jsx)(`path`,{d:`M3 10.5L6.5 14L14 6`,stroke:`currentColor`,strokeWidth:2.2,strokeLinecap:`round`,strokeLinejoin:`round`}),(0,Q.jsx)(`path`,{d:`M7 10.5L10.5 14L18 6`,stroke:`currentColor`,strokeWidth:2.2,strokeLinecap:`round`,strokeLinejoin:`round`})]}),sa=160,ca={duration:.22,ease:[.4,0,.2,1]};function la({tabValue:e,icon:t,onClick:n,isActive:r,label:i,className:a,measureOnly:o,suppressLayoutAnimation:s=!1}){let c=P(),l=o||c||!1,u=!l&&!s,d=U(`flex items-center rounded-md cursor-pointer`,`pl-1.5 pr-2 py-1 lg:py-1.5`,`text-[var(--oh-muted)] bg-transparent`,r&&`bg-[var(--oh-interactive-active)] text-white`,r?`hover:text-white hover:bg-[var(--oh-interactive-hover)]`:`hover:text-white hover:bg-white/5`,r?`focus-within:text-white`:`focus-within:text-[var(--oh-muted)]`,a),f=(0,Q.jsx)(t,{className:U(`h-4 w-4 shrink-0 text-inherit`)}),p=i&&r?(0,Q.jsx)(`span`,{className:`whitespace-nowrap text-sm font-normal`,children:i}):null,m=i?(0,Q.jsx)(z.span,{initial:!1,animate:{maxWidth:r?sa:0,opacity:+!!r,marginLeft:r?8:0},transition:ca,className:`block overflow-hidden whitespace-nowrap text-sm font-normal`,"aria-hidden":!r,children:i}):null;return l?(0,Q.jsxs)(`button`,{type:`button`,onClick:n,...o?{}:{"data-testid":`conversation-tab-${e}`},"data-tab-measure":o?`true`:void 0,className:U(d,`gap-2`),children:[f,p]}):(0,Q.jsxs)(z.button,{layout:u?`position`:!1,type:`button`,onClick:n,...o?{}:{"data-testid":`conversation-tab-${e}`},"data-tab-measure":o?`true`:void 0,className:d,transition:u?{layout:ca}:void 0,children:[f,m]})}var ua=e=>(0,Q.jsx)(`svg`,{viewBox:`0 0 128 128`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,...e,children:(0,Q.jsx)(`path`,{fill:`currentColor`,fillRule:`evenodd`,clipRule:`evenodd`,d:`M90.767 127.126a7.968 7.968 0 0 0 6.35-.244l26.353-12.681a8 8 0 0 0 4.53-7.209V21.009a8 8 0 0 0-4.53-7.21L97.117 1.12a7.97 7.97 0 0 0-9.093 1.548l-50.45 46.026L15.6 32.013a5.328 5.328 0 0 0-6.807.302l-7.048 6.411a5.335 5.335 0 0 0-.006 7.888L20.796 64 1.74 81.387a5.336 5.336 0 0 0 .006 7.887l7.048 6.411a5.327 5.327 0 0 0 6.807.303l21.974-16.68 50.45 46.025a7.96 7.96 0 0 0 2.743 1.793Zm5.252-92.183L57.74 64l38.28 29.058V34.943Z`})});function da(){let e=Ae().backend;if(e.kind!==`cloud`)throw Error(`Cloud sandboxes call requires a cloud backend.`);return e}async function fa(e){if(e.length===0)return[];let t=da(),n=new URLSearchParams;for(let t of e)n.append(`id`,t);return await Me({backend:t,method:`GET`,path:`/api/v1/sandboxes?${n.toString()}`})??[]}var pa=e=>{let t=A(),n=t.backend.kind===`cloud`;return C({queryKey:[`cloud`,`sandbox`,t.backend.id,t.orgId,e],queryFn:async()=>{if(!e)return null;let[t]=await fa([e]);return t??null},enabled:n&&!!e,staleTime:1e3*60*5,gcTime:1e3*60*15})},ma=`VSCODE`,ha=()=>{let{t:e}=T(`openhands`),{conversationId:t}=q(),n=Tn({allowAgentError:!0}),{data:r}=J(),i=A(),a=r?.conversation_url??null,o=r?.session_api_key??null,s=r?.sandbox_id??null,c=i.backend.kind===`cloud`,l=pa(c?s:null),u=C({queryKey:[`unified`,`vscode_url`,`local`,t,a,o],queryFn:async()=>{if(!t)throw Error(`No conversation ID`);return{url:ut((await it.getVSCodeUrl(t,a,o).catch(()=>yt.getVSCodeUrl(t))).vscode_url)}},enabled:!c&&n&&!!t,refetchOnMount:!0,retry:3}),d,f,p,m,h,g,_;if(c){let e=l.data?.exposed_urls?.find(e=>e.name===ma)?.url??null;d=l.isSuccess?{url:ut(e)}:void 0,f=l.isLoading,p=l.isError,m=l.isSuccess,h=l.status,g=l.error,_=async()=>{let e=await l.refetch(),t=e.data?.exposed_urls?.find(e=>e.name===ma)?.url??null;return{data:e.data?{url:ut(t)}:void 0}}}else d=u.data,f=u.isLoading,p=u.isError,m=u.isSuccess,h=u.status,g=u.error,_=async()=>({data:(await u.refetch()).data});let v=d&&!d.url?e(E.VSCODE$URL_NOT_AVAILABLE):null;return{data:d?{...d,error:v}:void 0,error:g,isLoading:f,isError:p,isSuccess:m,status:h,refetch:_}};function ga(){let{t:e}=T(`openhands`),{curAgentState:t}=Y(),{data:n,refetch:r,isLoading:i}=ha(),a=ye.includes(t);return(0,Q.jsxs)(`button`,{type:`button`,onClick:async()=>{let e=n?.url;e||=(await r()).data?.url??null,e&&window.open(e,`_blank`,`noopener,noreferrer`)},disabled:i||a,"aria-label":e(E.VSCODE$OPEN),title:e(E.VSCODE$OPEN),"data-testid":`drawer-vscode-link`,className:U(`inline-flex items-center gap-1.5 rounded-[7px] border border-[var(--oh-border)] bg-base-secondary px-2 py-1 text-xs`,`text-[var(--oh-muted)] transition-colors hover:enabled:bg-surface-raised hover:enabled:text-white`,`cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed`),children:[(0,Q.jsx)(ua,{className:`h-[15px] w-[15px] shrink-0`,"aria-hidden":!0}),(0,Q.jsx)(`span`,{children:e(E.FILES$VSCODE)}),(0,Q.jsx)(fe,{className:`h-3.5 w-3.5 shrink-0`,"aria-hidden":!0,strokeWidth:2})]})}var _a=e=>(0,Q.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,...e,children:(0,Q.jsx)(`path`,{fillRule:`evenodd`,clipRule:`evenodd`,d:`M7.13832 8.76476C8.25957 8.17949 9.52697 7.9727 10.7515 8.14436L14.9025 2.52826L21.4717 9.09737L15.8555 13.2484C16.0272 14.4729 15.8204 15.7403 15.2351 16.8616C15.1872 16.9535 15.1366 17.0444 15.0836 17.1343C14.8318 17.5605 14.5228 17.9624 14.1566 18.3286L10.4443 14.6163L4.75207 20.3085H3.69141V19.2478L9.38361 13.5556L5.6713 9.84332C6.03755 9.47708 6.43936 9.16808 6.86562 8.91632C6.95547 8.86326 7.04641 8.81274 7.13832 8.76476ZM15.0735 4.82054L19.1794 8.92641L14.2461 12.5727L14.3701 13.4567C14.492 14.3266 14.3596 15.2233 13.9758 16.0265L7.97338 10.0241C8.77665 9.64035 9.67335 9.50789 10.5432 9.62984L11.4272 9.75376L15.0735 4.82054Z`,fill:`currentColor`})}),va=e=>(0,Q.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,...e,children:(0,Q.jsx)(`path`,{d:`M10.9706 10.1586C10.2819 10.0621 9.56905 10.1784 8.93842 10.5075C8.88672 10.5345 8.83557 10.5629 8.78504 10.5928C8.54529 10.7344 8.3193 10.9082 8.11331 11.1142L9.83702 12.8372L7.00054 15.75L7 17H8.25064L11.1628 14.1632L12.8857 15.8865C13.0917 15.6805 13.2655 15.4545 13.4071 15.2147C13.437 15.1642 13.4654 15.1131 13.4924 15.0614C13.8215 14.4308 13.9378 13.718 13.8413 13.0293L17 10.6946L13.3053 7L10.9706 10.1586Z`,fill:`currentColor`})});function ya({isOpen:e,onClose:t,ignoreOutsideClickRef:n,anchorRef:r}){let i=gt(t,n),[a,o]=(0,$.useState)();(0,$.useLayoutEffect)(()=>{if(!e||!r?.current){o(void 0);return}let t=()=>{let e=r.current?.getBoundingClientRect();e&&o({position:`fixed`,zIndex:9999,top:e.bottom+8,left:e.left})};return t(),window.addEventListener(`resize`,t),window.addEventListener(`scroll`,t,!0),()=>{window.removeEventListener(`resize`,t),window.removeEventListener(`scroll`,t,!0)}},[e,r]);let{t:s}=T(`openhands`),{conversationId:c}=q(),{state:l,setUnpinnedTabs:u,setSelectedTab:d}=Ze(c),{selectedTab:f,isRightPanelShown:p,setSelectedTab:m}=W(),{navigateToTab:h}=R(),{hasTaskList:g}=On(),{backend:_}=A(),v=on(),y=[{tab:`planner`,icon:B,i18nKey:E.COMMON$PLANNER},{tab:`files`,icon:kt,i18nKey:E.COMMON$FILES},{tab:`terminal`,icon:me,i18nKey:E.COMMON$TERMINAL},{tab:`browser`,icon:An,i18nKey:E.COMMON$BROWSER}];g&&y.unshift({tab:`tasklist`,icon:oa,i18nKey:E.COMMON$TASK_LIST});let b=y.filter(({tab:e})=>e!==`planner`||_.kind===`cloud`),x=e=>{v||(h(e),t())},S=(e,t)=>{if(v){t.preventDefault(),t.stopPropagation();return}if(t.preventDefault(),t.stopPropagation(),l.unpinnedTabs.includes(e))u(l.unpinnedTabs.filter(t=>t!==e));else{let t=[...l.unpinnedTabs,e];if(u(t),f===e&&p){let n=b.find(({tab:n})=>n!==e&&!t.includes(n));n&&(m(n.tab),d(n.tab))}}};if(!e)return null;let C=!!(r?.current&&a),w=(0,Q.jsx)(bt,{ref:i,theme:C?`popover`:`default`,position:C?`none`:`bottom`,alignment:C?`none`:`left`,spacing:C?`none`:`default`,className:U(`z-[9999] w-fit`,C?`mt-0`:`mt-2`),children:b.map(({tab:e,icon:t,i18nKey:n})=>{let r=!l.unpinnedTabs.includes(e);return(0,Q.jsx)(`li`,{className:`list-none`,children:(0,Q.jsx)(Ut,{isDisabled:v,children:(0,Q.jsxs)(`div`,{className:U(`group flex h-[30px] w-full min-w-0 items-stretch rounded`,!v&&`hover:bg-[var(--oh-interactive-hover)]`,v&&`opacity-50`),children:[(0,Q.jsxs)(`button`,{type:`button`,"data-testid":`conversation-tabs-menu-open-${e}`,disabled:v,className:U(`flex min-w-0 flex-1 items-center gap-2 rounded-l p-2 text-start text-white`,Be,v?`cursor-not-allowed`:`cursor-pointer`),onClick:()=>x(e),children:[(0,Q.jsx)(`span`,{className:Ve,"aria-hidden":!0,children:(0,Q.jsx)(t,{className:`h-4 w-4`})}),(0,Q.jsx)(`span`,{className:`text-sm`,children:s(n)})]}),(0,Q.jsx)(`button`,{type:`button`,"data-testid":`conversation-tabs-menu-pin-${e}`,disabled:v,className:U(`flex shrink-0 items-center justify-center rounded-r px-2 text-white`,Be,v?`cursor-not-allowed`:`cursor-pointer hover:bg-white/10`),"aria-pressed":r,"aria-label":s(r?E.CONVERSATION$UNPIN_TAB:E.CONVERSATION$PIN_TAB),onClick:t=>S(e,t),children:r?(0,Q.jsx)(`span`,{className:U(`-mr-[5px] ml-auto`,Ve),"aria-hidden":!0,children:(0,Q.jsx)(va,{className:`h-7 w-7`})}):(0,Q.jsx)(`span`,{className:U(`ml-auto`,Ve),"aria-hidden":!0,children:(0,Q.jsx)(_a,{className:`h-4.5 w-4.5`})})})]})})},e)})});return C&&a&&typeof document<`u`?Vi.createPortal((0,Q.jsx)(`div`,{style:a,children:w}),document.body):w}function ba({variant:e=`default`,isPanelResizing:t=!1}){let{conversationId:n}=q(),{setSelectedTab:r,planContent:i}=W(),[a,o]=(0,$.useState)(!1),{state:s}=Ze(n),{hasTaskList:c}=On(),{backend:l}=A(),{handleBuildPlanClick:u}=L(),{curAgentState:d}=Y(),{selectTab:f,isTabActive:p,onTabChange:m,selectedTab:h,isRightPanelShown:g}=R();(0,$.useEffect)(()=>{r(s.selectedTab)},[r,s.selectedTab]),(0,$.useEffect)(()=>{g&&(h||m(`files`))},[g,h,m]);let{t:_,i18n:v}=T(`openhands`),y=[{tabValue:`files`,isActive:p(`files`),icon:kt,onClick:()=>f(`files`),tooltipContent:_(E.COMMON$FILES),tooltipAriaLabel:_(E.COMMON$FILES),label:_(E.COMMON$FILES)},{tabValue:`planner`,isActive:p(`planner`),icon:B,onClick:()=>f(`planner`),tooltipContent:_(E.COMMON$PLANNER),tooltipAriaLabel:_(E.COMMON$PLANNER),label:_(E.COMMON$PLANNER)},{tabValue:`terminal`,isActive:p(`terminal`),icon:me,onClick:()=>f(`terminal`),tooltipContent:_(E.COMMON$TERMINAL),tooltipAriaLabel:_(E.COMMON$TERMINAL),label:_(E.COMMON$TERMINAL),className:`pl-2`},{tabValue:`browser`,isActive:p(`browser`),icon:An,onClick:()=>f(`browser`),tooltipContent:_(E.COMMON$BROWSER),tooltipAriaLabel:_(E.COMMON$BROWSER),label:_(E.COMMON$BROWSER)}];c&&y.splice(1,0,{tabValue:`tasklist`,isActive:p(`tasklist`),icon:oa,onClick:()=>f(`tasklist`),tooltipContent:_(E.COMMON$TASK_LIST),tooltipAriaLabel:_(E.COMMON$TASK_LIST),label:_(E.COMMON$TASK_LIST)});let b=y.filter(e=>e.tabValue===`planner`&&l.kind!==`cloud`?!1:s.unpinnedTabs.includes(e.tabValue)?h===e.tabValue:!0),x=s.unpinnedTabs.join(`,`),S=d===V.RUNNING||d===V.LOADING||!i,C=(0,$.useRef)(null),w=(0,$.useRef)(null),D=(0,$.useRef)(null),O=(0,$.useRef)(null),k=(0,$.useRef)(null),[j,M]=(0,$.useState)(b.length);(0,$.useLayoutEffect)(()=>{let e=C.current,t=w.current,n=D.current,r=O.current;if(!e||!t||!n||!r)return;let i=()=>{let i=t.querySelectorAll(`[data-tab-measure="true"]`),a=i.length,o=e.getBoundingClientRect().width;if(o===0){M(a);return}let s=Array.from(i).map(e=>e.getBoundingClientRect().width);if(s.length!==a||a===0){M(Math.max(0,a));return}let c=n.getBoundingClientRect().width,l=r.getBoundingClientRect().width,u=getComputedStyle(e).columnGap||getComputedStyle(e).gap,d=parseFloat(u)||6,f=0;for(let e=a;e>=0;--e){let t=c+l;for(let n=0;n<e;n+=1)t+=s[n]??0;if(e>0&&(t+=e*d),t<=o+.5){f=e;break}}M(e=>e===f?e:f)};if(i(),typeof ResizeObserver>`u`)return;let a=new ResizeObserver(i);return a.observe(e),()=>a.disconnect()},[x,b.length,c,l.kind,h,g,v.language]);let ee=Math.min(j,b.length);return(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`div`,{className:U(`relative w-full min-w-0`,e===`compact`?`flex h-full min-h-0 items-center py-0 pl-0 pr-1`:`min-h-10 p-1`),children:[(0,Q.jsx)(`div`,{ref:w,"aria-hidden":!0,className:`pointer-events-none absolute top-0 left-[-10000px] flex flex-nowrap items-center gap-1.5`,children:b.map(({tabValue:e,icon:t,isActive:n,tooltipContent:r,tooltipAriaLabel:i,label:a,className:o},s)=>(0,Q.jsx)(ra,{tooltip:r,ariaLabel:i,children:(0,Q.jsx)(la,{tabValue:e,icon:t,onClick:()=>{},isActive:n,label:a,className:U(o,`shrink-0`),measureOnly:!0})},`measure-${e}-${s}`))}),(0,Q.jsxs)(`div`,{ref:C,className:`flex w-full min-w-0 flex-nowrap items-center justify-start`,children:[(0,Q.jsx)(`div`,{className:`flex min-w-0 flex-1 items-center justify-start overflow-hidden`,children:(0,Q.jsxs)(`div`,{className:`flex w-fit max-w-full min-w-0 items-center gap-1.5`,children:[(0,Q.jsx)(zn,{id:`conversation-drawer-tabs`,children:(0,Q.jsx)(`div`,{className:`flex w-fit max-w-full min-w-0 flex-nowrap items-center gap-1.5 overflow-x-hidden`,children:b.slice(0,ee).map(({tabValue:e,icon:n,onClick:r,isActive:i,tooltipContent:a,tooltipAriaLabel:o,label:s,className:c},l)=>(0,Q.jsx)(ra,{tooltip:a,ariaLabel:o,children:(0,Q.jsx)(la,{tabValue:e,icon:n,onClick:r,isActive:i,label:s,className:U(c,`shrink-0`),suppressLayoutAnimation:t})},`${e}-${l}`))})}),(0,Q.jsxs)(`div`,{ref:D,className:`relative shrink-0`,children:[(0,Q.jsx)(St,{ref:k,onClick:()=>o(!a),ariaLabel:_(E.COMMON$MORE_OPTIONS),iconClassName:e===`compact`?lt:void 0}),(0,Q.jsx)(ya,{isOpen:a,onClose:()=>o(!1),ignoreOutsideClickRef:k,anchorRef:k})]})]})}),(0,Q.jsx)(`div`,{ref:O,className:U(`ml-auto shrink-0`,l.kind===`cloud`&&`pr-1`),children:l.kind===`cloud`&&(0,Q.jsx)(ga,{})})]})]}),p(`planner`)&&(0,Q.jsx)(`div`,{className:U(`flex h-10 min-h-10 shrink-0 items-center border-t border-[var(--oh-border)] pl-[10px] pr-1`),children:(0,Q.jsx)(`button`,{type:`button`,onClick:u,disabled:S,className:U(`flex h-5 min-w-17 items-center justify-center rounded bg-white px-2 transition-opacity`,S?`cursor-not-allowed opacity-50`:`cursor-pointer hover:opacity-90`),"data-testid":`planner-tab-build-button`,children:(0,Q.jsxs)(Ot.Text,{className:`text-[11px] font-normal leading-5 text-black`,children:[_(E.COMMON$BUILD),` ⌘↩`]})})})]})}function xa({onMouseDown:e,className:t,isDragging:n=!1}){let[r,i]=(0,$.useState)(!1),a=n||r;return(0,Q.jsxs)(`div`,{className:U(`relative z-10 w-0 shrink-0 self-stretch`,t),"aria-hidden":!0,children:[(0,Q.jsx)(`div`,{className:`absolute inset-y-0 left-1/2 w-3 min-w-[12px] -translate-x-1/2 cursor-ew-resize`,onMouseDown:e,onMouseEnter:()=>i(!0),onMouseLeave:()=>i(!1)}),(0,Q.jsx)(`div`,{className:U(`pointer-events-none absolute inset-y-0 left-1/2 w-px -translate-x-1/2 transition-colors`,a?`bg-white`:`bg-transparent`),"aria-hidden":!0})]})}var Sa=200;function Ca({defaultLeftWidth:e=50,minLeftWidth:t=30,maxLeftWidth:n=80,storageKey:r=`desktop-layout-panel-width`}={}){let[i,a]=kn(r,e),o=(0,$.useCallback)(e=>Math.max(t,Math.min(n,e)),[t,n]),[s,c]=(0,$.useState)(()=>o(i)),[l,u]=(0,$.useState)(!1),d=(0,$.useRef)(null),f=(0,$.useCallback)(e=>{e.preventDefault(),u(!0)},[]),p=(0,$.useCallback)(e=>{if(!l||!d.current)return;let t=d.current.getBoundingClientRect();c(o((e.clientX-t.left)/t.width*100))},[l,o]),m=(0,$.useCallback)(()=>{l&&(u(!1),a(s))},[l,s,a]);return(0,$.useLayoutEffect)(()=>{if(!l)return;let e=document.createElement(`div`);return e.setAttribute(`aria-hidden`,`true`),e.dataset.panelDragShield=``,Object.assign(e.style,{position:`fixed`,inset:`0`,zIndex:String(Sa),cursor:`ew-resize`}),document.body.appendChild(e),document.addEventListener(`mousemove`,p),document.addEventListener(`mouseup`,m),document.body.style.cursor=`ew-resize`,document.body.style.userSelect=`none`,()=>{document.removeEventListener(`mousemove`,p),document.removeEventListener(`mouseup`,m),document.body.style.cursor=``,document.body.style.userSelect=``,e.remove()}},[l,p,m]),{leftWidth:s,rightWidth:100-s,isDragging:l,containerRef:d,handleMouseDown:f}}function wa(e){return e?`translate-x-0 opacity-100`:`w-0 translate-x-full opacity-0`}function Ta(){let e=Dn(),t=Dn(767),{isRightPanelShown:n}=W(),{leftWidth:r,rightWidth:i,isDragging:a,containerRef:o,handleMouseDown:s}=Ca({defaultLeftWidth:50,minLeftWidth:30,maxLeftWidth:80,storageKey:`desktop-layout-panel-width`});return(0,Q.jsx)(`div`,{className:U(e?`relative min-h-0 flex-1 flex flex-col`:`h-full flex flex-col overflow-hidden`),children:(0,Q.jsxs)(`div`,{ref:o,className:U(`flex flex-1 overflow-hidden`,e?`flex-col`:`transition-all duration-300 ease-in-out`),style:e?void 0:{transitionProperty:a?`none`:`all`},children:[(0,Q.jsxs)(`div`,{className:U(`flex flex-col bg-base overflow-hidden`,e?`flex-1`:`transition-all duration-300 ease-in-out`),style:e?void 0:{width:n?`${r}%`:`100%`,transitionProperty:a?`none`:`all`},children:[(0,Q.jsxs)(`div`,{"data-testid":`chat-pane-header`,className:U(`flex h-10 min-h-10 shrink-0 items-center`,t&&`gap-2 pl-2.5`),children:[t?(0,Q.jsx)(mt,{}):null,(0,Q.jsx)(`div`,{className:`min-w-0 flex-1`,children:(0,Q.jsx)(aa,{})})]}),(0,Q.jsx)(`div`,{className:`flex-1 min-h-0 flex flex-col`,children:(0,Q.jsx)(yi,{isRightPanelShown:!e&&n})})]}),!e&&n&&(0,Q.jsx)(xa,{onMouseDown:s,isDragging:a}),!e&&(0,Q.jsx)(`div`,{className:U(`transition-all duration-300 ease-in-out overflow-hidden`,wa(n)),style:{width:n?`${i}%`:`0%`,transitionProperty:a?`opacity, transform`:`all`},children:(0,Q.jsx)(`div`,{className:`flex h-full w-full flex-col`,children:(0,Q.jsxs)(`div`,{className:`flex flex-col flex-1 min-h-0 bg-[var(--oh-surface)] border-l border-[var(--oh-border)] overflow-hidden`,children:[(0,Q.jsx)(`div`,{"data-testid":`tabs-pane-header`,className:`flex shrink-0 flex-col border-b border-[var(--oh-border)]`,children:(0,Q.jsx)(ba,{isPanelResizing:a})}),(0,Q.jsx)(`div`,{className:`flex-1 min-h-0 flex flex-col`,children:(0,Q.jsx)(Pi,{})})]})})})]})})}function Ea({onNavigateBack:e}){let{t}=T(`openhands`),{setIsRightPanelShown:n,setHasRightPanelToggled:r,setSelectedTab:i}=W();return $.useLayoutEffect(()=>(n(!0),r(!0),W.getState().selectedTab||i(`files`),()=>{n(!1),r(!1)}),[n,r,i]),(0,Q.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col bg-[var(--oh-surface)]`,children:[(0,Q.jsxs)(`div`,{"data-testid":`conversation-mobile-panel-top`,className:`flex h-10 min-h-10 shrink-0 items-center gap-1.5 border-b border-[var(--oh-border)] pl-2.5`,children:[(0,Q.jsx)(`button`,{type:`button`,"data-testid":`conversation-mobile-panel-back`,onClick:()=>{e()},"aria-label":t(E.COMMON$BACK),className:ft,children:(0,Q.jsx)(ue,{size:20,className:lt,"aria-hidden":!0,strokeWidth:2})}),(0,Q.jsx)(`div`,{className:`flex min-h-0 min-w-0 flex-1 items-center self-stretch`,children:(0,Q.jsx)(`div`,{"data-testid":`tabs-pane-header`,className:`flex h-full min-h-0 w-full min-w-0 flex-col justify-center`,children:(0,Q.jsx)(ba,{variant:`compact`})})})]}),(0,Q.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col bg-[var(--oh-surface)]`,children:(0,Q.jsx)(Pi,{})})]})}var Da=1e3*60*5,Oa=1e3*60*15,ka=e=>{let t=e||[],n=A();return C({queryKey:[`v1`,`sub-conversations`,t,n.backend.id,n.orgId],queryFn:async()=>t.length===0?[]:it.batchGetAppConversations(t),enabled:t.length>0,staleTime:Da,gcTime:Oa,retry:!1})};function Aa({children:e,conversationId:t}){let{data:n}=J(),{data:r}=ka(n?.sub_conversation_ids??[]),i=r?.filter(e=>e!==null);return(0,Q.jsx)(hn,{conversationId:t,conversationUrl:n?.sandbox_status===`PAUSED`?null:n?.conversation_url,sessionApiKey:n?.session_api_key,subConversationIds:n?.sub_conversation_ids,subConversations:i,children:e})}function ja(){let{t:e}=T(`openhands`),{conversationId:t}=q(),n=u(`/conversations/:conversationId/panel`),{isTask:r,taskStatus:i,taskDetail:a}=Ft(),o=A(),s=$.useRef(o.backend.id),c=$.useRef(o.orgId),l=s.current!==o.backend.id||c.current!==o.orgId,{data:d,isFetched:m}=J(),{data:h}=at(),{resetConversationState:g}=W(),_=f(),v=p(),y=wn(e=>e.clearTerminal),b=Et(e=>e.reset),x=Vn(e=>e.setCurrentAgentState),S=pn(e=>e.removeErrorMessage);$.useEffect(()=>{y(),g(),b(),x(V.LOADING),S()},[t,y,g,b,x,S]),$.useEffect(()=>{if(r&&i===`ERROR`){D(a||e(E.CONVERSATION$FAILED_TO_START_FROM_TASK));let t=v.state?.resumedFromConversationId;_(t?`/conversations/${t}`:`/conversations`,{replace:!0})}},[r,i,a,e,_,v.state]),$.useEffect(()=>{!m||!h||l||d||(qn(o.backend.id,o.orgId),D(e(E.CONVERSATION$NOT_EXIST_OR_NO_PERMISSION)),_(`/conversations`))},[d,m,h,_,e,l,o.backend.id,o.orgId]),$.useEffect(()=>{l||t&&(t.startsWith(`task-`)||Kn(o.backend.id,o.orgId,t))},[t,l,o.backend.id,o.orgId]);let C=$.useRef(null);return $.useEffect(()=>{!m||!d||o.backend.kind===`cloud`&&d.sandbox_status===`PAUSED`&&d.sandbox_id&&C.current!==d.id&&(C.current=d.id,rt(d.sandbox_id).catch(()=>{D(e(E.CONVERSATION$FAILED_TO_START_FROM_TASK))}))},[m,d?.id,d?.sandbox_status,d?.sandbox_id,o.backend.kind,e]),l?null:(0,Q.jsx)(Aa,{conversationId:t,children:(0,Q.jsx)($n,{children:(0,Q.jsx)(`div`,{"data-testid":`app-route`,className:`flex h-full flex-col`,children:n?(0,Q.jsx)(Ea,{onNavigateBack:()=>_(`/conversations/${t}`)}):(0,Q.jsx)(Ta,{})})})})}function Ma(){return(0,Q.jsx)(ja,{})}var Na=d(Ma);export{Na as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./conversation-B8prFAZF.js";export{e as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./conversation-B8prFAZF.js";export{e as default};
|