@openhands/agent-canvas 1.4.0 → 1.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -12
- package/README.windows.md +4 -2
- package/build/assets/{Trans-Ch-OVWEA.js → Trans-DqF_OEZB.js} +1 -1
- package/build/assets/{acp-providers-Sy2LKyMa.js → acp-providers-DerAmTyY.js} +1 -1
- package/build/assets/active-backend-context-B8rMv0X9.js +1 -0
- package/build/assets/{add-backend-modal-Bgy8anoR.js → add-backend-modal-CxC7BNEc.js} +1 -1
- package/build/assets/{agent-profiles-settings-3mmXljZX.js → agent-profiles-settings-BJb8YXR1.js} +1 -1
- package/build/assets/agent-server-compatibility-BWN-EIQn.js +1 -0
- package/build/assets/agent-server-conversation-service.api-DSPIkMwJ.js +41 -0
- package/build/assets/{agent-settings-B-W10B4E.js → agent-settings-CgCnqaAA.js} +2 -2
- package/build/assets/agent-settings-DDkSavD7.js +1 -0
- package/build/assets/{alert-banner-Bpf2NQJq.js → alert-banner-Dh51WURQ.js} +1 -1
- package/build/assets/api-key-entry-screen-iZc7n8AI.js +1 -0
- package/build/assets/app-settings-B5zyipxJ.js +1 -0
- package/build/assets/automation-detail-CZsu2CoM.js +2 -0
- package/build/assets/automation-export-BwRX6H32.js +2 -0
- package/build/assets/automations-list-lHAVzMoA.js +1 -0
- package/build/assets/{back-nav-button-CUS2mi-U.js → back-nav-button-DVknCcSP.js} +1 -1
- package/build/assets/backend-form-modal-RGcu909r.js +1 -0
- package/build/assets/{backend-synced-settings-badge-D9hZx05w.js → backend-synced-settings-badge-BSfN0AZA.js} +1 -1
- package/build/assets/{base-modal-BuF2f0YL.js → base-modal-CIF_785P.js} +1 -1
- package/build/assets/{bot-D7eUAuSB.js → bot-C-EA6685.js} +1 -1
- package/build/assets/{brand-button-vMVuyDXu.js → brand-button-B1izLAdR.js} +1 -1
- package/build/assets/{browser-BifzWIBd.js → browser-DKaeq_sT.js} +3 -3
- package/build/assets/{browser-tab-CkkqJnqw.js → browser-tab-qb_ftCxW.js} +1 -1
- package/build/assets/canvas-ui-COgjltGz.js +1 -0
- package/build/assets/{chat-send-button-B_jc5z5C.js → chat-send-button-BZHG2hAW.js} +1 -1
- package/build/assets/check-TbOEtHKj.js +1 -0
- package/build/assets/{chevron-down-CI8A6tet.js → chevron-down-D7IvFMBM.js} +1 -1
- package/build/assets/{circle-plus-check-toggle-C5YxjxvI.js → circle-plus-check-toggle-DoFIjVE0.js} +1 -1
- package/build/assets/client-source-BZK8vRs2.js +1 -0
- package/build/assets/cloud-funnel-analytics-Zcv57hfT.js +1 -0
- package/build/assets/{color-themes-DPBzNtVg.js → color-themes-CHizm1xF.js} +1 -1
- package/build/assets/{combobox-caret-DoObzqf4.js → combobox-caret-CxZpqoSR.js} +1 -1
- package/build/assets/{command-menu-D-JV3Wqm.js → command-menu-oTvKDU3Y.js} +1 -1
- package/build/assets/condenser-settings-BGlWn93P.js +1 -0
- package/build/assets/{confirmation-modal-BGLu6XJN.js → confirmation-modal-DGBWM2Ls.js} +1 -1
- package/build/assets/{context-menu-list-item-BD5_EaKN.js → context-menu-list-item-6psNyl7X.js} +1 -1
- package/build/assets/conversation-BoCYx8n2.js +89 -0
- package/build/assets/conversation-DgHqMjnY.js +1 -0
- package/build/assets/conversation-panel-78Rxh_-I.js +1 -0
- package/build/assets/conversation-service.api-_f9GlIEi.js +1 -0
- package/build/assets/{conversation-tab-empty-state-B2dDYEwf.js → conversation-tab-empty-state-CNUmIms2.js} +1 -1
- package/build/assets/{copy-3JCw_XFB.js → copy-D1YGjP-C.js} +1 -1
- package/build/assets/{copy-to-clipboard-button-CaR52OnA.js → copy-to-clipboard-button-CFzH_NOX.js} +1 -1
- package/build/assets/declaration-BGsHjPEW.js +1 -0
- package/build/assets/{device-verify-Dj6I4Iqe.js → device-verify-WBSjJBLH.js} +1 -1
- package/build/assets/{dropdown-classes-DJSXeLqc.js → dropdown-classes-D3wMJlXT.js} +1 -1
- package/build/assets/{ellipsis-button-C5Z-tPFp.js → ellipsis-button-CbNnHlIq.js} +1 -1
- package/build/assets/{entry.client-2_3ePAm0.js → entry.client-DNlPGxsu.js} +2 -2
- package/build/assets/{enum-filter-dropdown-DXbVwiNZ.js → enum-filter-dropdown-JLYv1t8L.js} +1 -1
- package/build/assets/{environment-switch-overlay-DZQfRGTx.js → environment-switch-overlay-B1PFO8P8.js} +1 -1
- package/build/assets/{extensions-hub-CLjmOGqS.js → extensions-hub-CCbLA7IM.js} +1 -1
- package/build/assets/{extensions-navigation-B5MeUiMq.js → extensions-navigation-CPNjMNvR.js} +1 -1
- package/build/assets/{external-link-D2zJjE9G.js → external-link-lhdITPqq.js} +1 -1
- package/build/assets/files-tab-y4K7EXBO.js +1 -0
- package/build/assets/{form-control-classes-ChpNBe9n.js → form-control-classes-CbdN5aO3.js} +1 -1
- package/build/assets/format-time-delta-DhDbkD7V.js +1 -0
- package/build/assets/git-provider-icon-ITvsH4Ko.js +1 -0
- package/build/assets/home-BwbeOWwU.js +1 -0
- package/build/assets/home-DKPGQ5P3.js +1 -0
- package/build/assets/index-home-Bko2Itv5.js +1 -0
- package/build/assets/install-server-modal-Qk1gwyI8.js +1 -0
- package/build/assets/{launch-V_3Rp7WS.js → launch-CAGavYl-.js} +1 -1
- package/build/assets/lesson-plan-DMCPdtrf.js +4 -0
- package/build/assets/{list-todo-BfH6yYUK.js → list-todo-CAtvkzcy.js} +1 -1
- package/build/assets/llm-not-configured-banner-C1ktyb3C.js +27 -0
- package/build/assets/llm-settings-BBsZFi9l.js +1 -0
- package/build/assets/llm-settings-DFkJQr_w.js +1 -0
- package/build/assets/llm-subscription-service-Casyzgn1.js +1 -0
- package/build/assets/loader-circle-CsAsfLIs.js +1 -0
- package/build/assets/{loading-spinner-BLdswi6q.js → loading-spinner-BcdnT0mN.js} +1 -1
- package/build/assets/manage-backends-modal-CKQ46rvw.js +1 -0
- package/build/assets/manifest-03478bbf.js +1 -0
- package/build/assets/{map-provider-BM2SJarp.js → map-provider-BbIb12oh.js} +1 -1
- package/build/assets/{markdown-renderer-DMT7Zkpd.js → markdown-renderer-B4V2OMFP.js} +1 -1
- package/build/assets/{mcp-BQufNPZ6.js → mcp-BapoJsDc.js} +2 -2
- package/build/assets/{messages-BnJCqnFf.js → messages-CUBFMY5o.js} +26 -26
- package/build/assets/{modal-body-DouOE5KH.js → modal-body-Cc2zp0xb.js} +1 -1
- package/build/assets/{modal-classes-Cf-4tbHz.js → modal-classes-3qT9Ap7Q.js} +1 -1
- package/build/assets/{modal-close-button-B6CfxxJj.js → modal-close-button-BcIBUdSq.js} +1 -1
- package/build/assets/model-selector-DJrMrFAr.js +1 -0
- package/build/assets/onboarding-6NMkdNxV.js +1 -0
- package/build/assets/onboarding-modal-Q4AnpIdg.js +1 -0
- package/build/assets/organization-service.api-vrRNwOma.js +1 -0
- package/build/assets/path-utils-PNfCKQDV.js +1 -0
- package/build/assets/{pencil-Dj2XjKmI.js → pencil-CWhApFIT.js} +1 -1
- package/build/assets/{plan-components-CcCBmCzW.js → plan-components-BdZXPyZU.js} +1 -1
- package/build/assets/{planner-tab-Dhyqcqmb.js → planner-tab-ByOw1he8.js} +1 -1
- package/build/assets/plugins-management-service-B75jyC56.js +1 -0
- package/build/assets/profiles-service.api-BQTklD5D.js +1 -0
- package/build/assets/providers-DfTB2gPd.js +1 -0
- package/build/assets/proxy-B3tCGf0X.js +1 -0
- package/build/assets/{recommended-automations-launcher-CTcGTl4d.js → recommended-automations-launcher-Bj7PuHY1.js} +1 -1
- package/build/assets/{refresh-cw-DM82EIyx.js → refresh-cw-B9B7-vsy.js} +1 -1
- package/build/assets/root-CDnuTToz.js +2 -0
- package/build/assets/root-CYWeTrWE.css +1 -0
- package/build/assets/root-layout-DfYVlcRG.js +2 -0
- package/build/assets/{runtime-waiting-state-BsXLElvN.js → runtime-waiting-state-CnyVhX4T.js} +1 -1
- package/build/assets/schema-field-CUwk4wrQ.js +1 -0
- package/build/assets/sdk-section-page-DLLNrYjI.js +1 -0
- package/build/assets/{sdk-settings-schema-Cv7M9eSe.js → sdk-settings-schema-CLR01YIK.js} +1 -1
- package/build/assets/search-dIQ09UY2.js +1 -0
- package/build/assets/secrets-service-CvyPWJhg.js +1 -0
- package/build/assets/{secrets-settings-Cx6yJlyb.js → secrets-settings-CHy72A5C.js} +1 -1
- package/build/assets/{segmented-toggle-DyQqPhoD.js → segmented-toggle-kzwZkLaj.js} +1 -1
- package/build/assets/settings-B9S8UVQr.js +1 -0
- package/build/assets/{settings-dropdown-input-BjunGXJb.js → settings-dropdown-input-Dhx9ErGd.js} +1 -1
- package/build/assets/{settings-index-D6sxWSRk.js → settings-index-BKDl2CQ-.js} +1 -1
- package/build/assets/{settings-input-bD6npsDm.js → settings-input-BsgQWS5R.js} +1 -1
- package/build/assets/{settings-list-classes-Dp_OgzN0.js → settings-list-classes-DSJJX99U.js} +1 -1
- package/build/assets/settings-modal-DeK11CyT.js +1 -0
- package/build/assets/settings-service.api-DXk5TdeJ.js +1 -0
- package/build/assets/{settings-switch-5cuxl8Dc.js → settings-switch-Bes8dIlV.js} +1 -1
- package/build/assets/{settings-utils-BMdG65By.js → settings-utils-DzCVfiR3.js} +1 -1
- package/build/assets/shared-conversation-9atDzTR4.js +1 -0
- package/build/assets/{sidebar-layout-DuzJMMw-.js → sidebar-layout-Bm7pa3Vk.js} +1 -1
- package/build/assets/{sidebar-mobile-menu-toggle-VvvX32iF.js → sidebar-mobile-menu-toggle-giMMZctn.js} +1 -1
- package/build/assets/{sidebar-nav-link-5AlTT5-j.js → sidebar-nav-link-CHqyFXwV.js} +1 -1
- package/build/assets/{sidebar-store-CZuE8AH5.js → sidebar-store-uiUXBU1N.js} +1 -1
- package/build/assets/{skill-card-pill-row-eTIkE4nz.js → skill-card-pill-row-BPYKQ3IN.js} +1 -1
- package/build/assets/skills-plugins-Tropusio.js +1 -0
- package/build/assets/{skills-settings-BUv04tSc.js → skills-settings-BvzBBCWk.js} +2 -2
- package/build/assets/{square-chevron-right-Czw3FFWc.js → square-chevron-right-DE-JN-2Z.js} +1 -1
- package/build/assets/{styled-tooltip-CgX2oRaK.js → styled-tooltip-B14i_Uac.js} +1 -1
- package/build/assets/{suspense-BO1Tl_Vf.js → suspense-DmZ3MSSh.js} +1 -1
- package/build/assets/{task-list-tab-0k9PhuqO.js → task-list-tab-DyfgG4MC.js} +1 -1
- package/build/assets/telemetry-C5JMEfqB.js +2 -0
- package/build/assets/{terminal-B61WrJdS.js → terminal-DRXt2Lr4.js} +1 -1
- package/build/assets/{toggle-switch-2j5wwR85.js → toggle-switch-DX_k418f.js} +1 -1
- package/build/assets/{trash-2-Be_7y3Mn.js → trash-2-BU6BlW4i.js} +1 -1
- package/build/assets/{typography-D8mHDeNG.js → typography-CzfoD9DY.js} +1 -1
- package/build/assets/use-acp-credential-form-Bm8qXdlc.js +1 -0
- package/build/assets/{use-activate-agent-profile-20v1xU0H.js → use-activate-agent-profile-DlykqEfN.js} +1 -1
- package/build/assets/{use-active-agent-profile-BkJN7Xsy.js → use-active-agent-profile-hI-x-UBa.js} +1 -1
- package/build/assets/{use-active-conversation-DOZVSVtU.js → use-active-conversation-2qeez40F.js} +1 -1
- package/build/assets/use-agent-profiles-0pr5bLS7.js +1 -0
- package/build/assets/{use-agent-state-DHZO1obC.js → use-agent-state-C6peDXUm.js} +1 -1
- package/build/assets/use-backends-health-CLHPitJM.js +1 -0
- package/build/assets/{use-can-manage-org-profiles-C-OhWVBS.js → use-can-manage-org-profiles-Ck_bsNbH.js} +1 -1
- package/build/assets/use-cloud-current-user-id-DUCSxNjY.js +1 -0
- package/build/assets/use-config-B5r8erYt.js +1 -0
- package/build/assets/use-create-conversation-r1JHfKO5.js +1 -0
- package/build/assets/{use-create-secret-D0HCOZFu.js → use-create-secret-Cf2N11d2.js} +1 -1
- package/build/assets/{use-event-store-DjgU4wfO.js → use-event-store-Bbaz51GR.js} +1 -1
- package/build/assets/{use-handle-plan-click-DyRASKMC.js → use-handle-plan-click-CsAW3FlH.js} +1 -1
- package/build/assets/use-is-authed-BezEyfeh.js +1 -0
- package/build/assets/use-llm-profiles-Dr5__SlZ.js +1 -0
- package/build/assets/use-plugins-marketplace-BplU65ae.js +1 -0
- package/build/assets/use-runtime-is-ready-vCFOcLFa.js +1 -0
- package/build/assets/use-save-agent-profile-RqUGqTv6.js +1 -0
- package/build/assets/use-save-settings-Chvzeu2s.js +1 -0
- package/build/assets/use-settings-CyxSlyTQ.js +1 -0
- package/build/assets/use-settings-nav-items-zEkSO_Bf.js +16 -0
- package/build/assets/use-skills-xrVoKYrF.js +1 -0
- package/build/assets/{use-task-list-AVBLbbcR.js → use-task-list-CfisapBW.js} +1 -1
- package/build/assets/use-tracking-D2Qg5Lpd.js +1 -0
- package/build/assets/{use-user-conversation-zpx7I18x.js → use-user-conversation-CnE4zhOA.js} +1 -1
- package/build/assets/{useMutation-DrCAVg5w.js → useMutation-u8UgRgDK.js} +1 -1
- package/build/assets/{useMutationState-D8QN0ZCy.js → useMutationState-OnAsCLA_.js} +1 -1
- package/build/assets/{useQueries-DClgUTc7.js → useQueries-BpIlT8Mt.js} +1 -1
- package/build/assets/{useQuery-CRBP8vIS.js → useQuery-D5pEZbY0.js} +1 -1
- package/build/assets/{useTranslation-CDRCKC9-.js → useTranslation-Cbf5AGg_.js} +1 -1
- package/build/assets/{utils-D3U3rlqr.js → utils-DB9LsAzA.js} +1 -1
- package/build/assets/{vendor~browser-tab-Di0kh5Zw.js → vendor~browser-tab-CsMb-pta.js} +1 -1
- package/build/assets/{vendor~browser-Cvg7jXCP.js → vendor~browser-wXQ-WZEC.js} +1 -1
- package/build/assets/{vendor~entry.client-9tWQ_Ugw.js → vendor~entry.client-DDuH4--y.js} +1 -1
- package/build/assets/{vendor~entry.client-D6BtSOtn.js → vendor~entry.client-DQGrNspu.js} +1 -1
- package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~dhilvkxv-eGLBu60s.js +2 -0
- package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~iztiaf2o-rqo6vRFz.js +185 -0
- package/build/assets/{vendor~files-tab-B02k3xvx.js → vendor~files-tab-B-5fBohe.js} +1 -1
- package/build/assets/{vendor~home~conversation-panel~conversation-CYMF9JYB.js → vendor~index-home~home~conversation-panel~conversation-ChmYLVgz.js} +1 -1
- package/build/assets/vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-BD7v71DM.js +2 -0
- package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-BD0GaRGa.js → vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-BT05Osu4.js} +1 -1
- package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-D7EUmQ8Y.js → vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-DgzWSMRc.js} +1 -1
- package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-d8aETPbZ.js → vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-DqZatR3B.js} +1 -1
- package/build/assets/{vendor~launch-CHXA9cJu.js → vendor~launch-_Km3J77E.js} +1 -1
- package/build/assets/{vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~skills-set~ivvrgjsa-BlIZPCXX.js → vendor~module-D5a_AClf.js} +1 -1
- package/build/assets/{vendor~root-layout~conversation-panel~conversation-CpiTHpHl.js → vendor~root-layout~conversation-panel~conversation-8tIsyrPj.js} +1 -1
- package/build/assets/{vendor~root-layout~conversation-panel~conversation~shared-conversation-_TdZcNMD.js → vendor~root-layout~conversation-panel~conversation~shared-conversation-BrguKXCn.js} +1 -1
- package/build/assets/{vendor~root-layout~home~conversation-panel~conversation-Cn2jwSga.js → vendor~root-layout~index-home~home~conversation-panel~conversation-BTvhGHHG.js} +1 -1
- package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~shared-conversation~alert-banner~pl~rqjteh0a-CZM4hwUT.js → vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation~aler~gfu7qdtz-BOKQkbc6.js} +1 -1
- package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~launch~settings~settings-index~agen~enjl5xdm-B0EIDu4M.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~ftka0fnu-cFNmfAE6.js} +2 -2
- package/build/assets/{verification-settings-D576N2xa.js → verification-settings-CfkrXoSa.js} +1 -1
- package/build/assets/x-ZE4iplpF.js +1 -0
- package/build/index.html +4 -4
- package/build/locales/ar/openhands.json +9 -0
- package/build/locales/ca/openhands.json +9 -0
- package/build/locales/de/openhands.json +9 -0
- package/build/locales/en/openhands.json +9 -0
- package/build/locales/es/openhands.json +9 -0
- package/build/locales/fr/openhands.json +9 -0
- package/build/locales/it/openhands.json +9 -0
- package/build/locales/ja/openhands.json +9 -0
- package/build/locales/ko-KR/openhands.json +9 -0
- package/build/locales/no/openhands.json +9 -0
- package/build/locales/pt/openhands.json +9 -0
- package/build/locales/tr/openhands.json +9 -0
- package/build/locales/uk/openhands.json +9 -0
- package/build/locales/zh-CN/openhands.json +9 -0
- package/build/locales/zh-TW/openhands.json +9 -0
- package/config/defaults.json +5 -4
- package/dist/api/agent-server-adapter.cjs +3 -3
- package/dist/api/agent-server-adapter.cjs.map +1 -1
- package/dist/api/agent-server-adapter.d.ts +9 -1
- package/dist/api/agent-server-adapter.js +105 -102
- package/dist/api/agent-server-adapter.js.map +1 -1
- package/dist/api/agent-server-config.cjs +1 -1
- package/dist/api/agent-server-config.cjs.map +1 -1
- package/dist/api/agent-server-config.d.ts +3 -0
- package/dist/api/agent-server-config.js +45 -23
- package/dist/api/agent-server-config.js.map +1 -1
- package/dist/api/backend-registry/auth.cjs +1 -1
- package/dist/api/backend-registry/auth.cjs.map +1 -1
- package/dist/api/backend-registry/auth.js +1 -1
- package/dist/api/backend-registry/auth.js.map +1 -1
- package/dist/api/backend-registry/default-backend.cjs +1 -1
- package/dist/api/backend-registry/default-backend.cjs.map +1 -1
- package/dist/api/backend-registry/default-backend.d.ts +3 -0
- package/dist/api/backend-registry/default-backend.js +22 -10
- package/dist/api/backend-registry/default-backend.js.map +1 -1
- package/dist/api/backend-registry/storage.cjs +1 -1
- package/dist/api/backend-registry/storage.cjs.map +1 -1
- package/dist/api/backend-registry/storage.js +38 -33
- package/dist/api/backend-registry/storage.js.map +1 -1
- package/dist/api/backend-registry/types.d.ts +2 -0
- package/dist/api/canvas-ui-client-tool.cjs +38 -0
- package/dist/api/canvas-ui-client-tool.cjs.map +1 -0
- package/dist/api/canvas-ui-client-tool.d.ts +14 -0
- package/dist/api/canvas-ui-client-tool.js +47 -0
- package/dist/api/canvas-ui-client-tool.js.map +1 -0
- package/dist/api/client-source.cjs +2 -0
- package/dist/api/client-source.cjs.map +1 -0
- package/dist/api/client-source.d.ts +9 -0
- package/dist/api/client-source.js +10 -0
- package/dist/api/client-source.js.map +1 -0
- package/dist/api/cloud/client.cjs +2 -0
- package/dist/api/cloud/client.cjs.map +1 -0
- package/dist/api/cloud/client.d.ts +4 -0
- package/dist/api/cloud/client.js +38 -0
- package/dist/api/cloud/client.js.map +1 -0
- package/dist/api/cloud/conversation-service.api.cjs +1 -1
- package/dist/api/cloud/conversation-service.api.cjs.map +1 -1
- package/dist/api/cloud/conversation-service.api.js +35 -33
- package/dist/api/cloud/conversation-service.api.js.map +1 -1
- package/dist/api/cloud/organization-service.api.cjs +1 -1
- package/dist/api/cloud/organization-service.api.cjs.map +1 -1
- package/dist/api/cloud/organization-service.api.js +11 -10
- package/dist/api/cloud/organization-service.api.js.map +1 -1
- package/dist/api/cloud/proxy.cjs +1 -1
- package/dist/api/cloud/proxy.cjs.map +1 -1
- package/dist/api/cloud/proxy.d.ts +2 -40
- package/dist/api/cloud/proxy.js +14 -39
- package/dist/api/cloud/proxy.js.map +1 -1
- package/dist/api/conversation-metadata-store.cjs +1 -1
- package/dist/api/conversation-metadata-store.cjs.map +1 -1
- package/dist/api/conversation-metadata-store.d.ts +2 -9
- package/dist/api/conversation-metadata-store.js +13 -9
- package/dist/api/conversation-metadata-store.js.map +1 -1
- package/dist/api/conversation-service/agent-server-conversation-service.api.cjs +1 -1
- package/dist/api/conversation-service/agent-server-conversation-service.api.cjs.map +1 -1
- package/dist/api/conversation-service/agent-server-conversation-service.api.d.ts +2 -1
- package/dist/api/conversation-service/agent-server-conversation-service.api.js +98 -88
- package/dist/api/conversation-service/agent-server-conversation-service.api.js.map +1 -1
- package/dist/api/conversation-service/agent-server-conversation-service.types.d.ts +5 -0
- package/dist/api/device-flow-client.cjs +1 -1
- package/dist/api/device-flow-client.cjs.map +1 -1
- package/dist/api/device-flow-client.d.ts +4 -58
- package/dist/api/device-flow-client.js +8 -98
- package/dist/api/device-flow-client.js.map +1 -1
- package/dist/api/git-service/agent-server-git-service.api.cjs +1 -1
- package/dist/api/git-service/agent-server-git-service.api.cjs.map +1 -1
- package/dist/api/git-service/agent-server-git-service.api.d.ts +10 -2
- package/dist/api/git-service/agent-server-git-service.api.js +107 -40
- package/dist/api/git-service/agent-server-git-service.api.js.map +1 -1
- package/dist/api/open-hands.types.d.ts +11 -0
- package/dist/api/option-service/option-service.api.cjs +1 -1
- package/dist/api/option-service/option-service.api.cjs.map +1 -1
- package/dist/api/option-service/option-service.api.js +0 -1
- package/dist/api/option-service/option-service.api.js.map +1 -1
- package/dist/api/option-service/option.types.d.ts +0 -1
- package/dist/api/secrets-service.cjs +1 -1
- package/dist/api/secrets-service.cjs.map +1 -1
- package/dist/api/secrets-service.js +15 -14
- package/dist/api/secrets-service.js.map +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.cjs +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.cjs.map +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.js +73 -64
- package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.js.map +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/get-observation-content.cjs +2 -2
- package/dist/components/conversation-events/chat/event-content-helpers/get-observation-content.cjs.map +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/get-observation-content.js +2 -0
- package/dist/components/conversation-events/chat/event-content-helpers/get-observation-content.js.map +1 -1
- package/dist/components/features/backends/backend-form-modal.cjs +1 -1
- package/dist/components/features/backends/backend-form-modal.cjs.map +1 -1
- package/dist/components/features/backends/backend-form-modal.d.ts +4 -2
- package/dist/components/features/backends/backend-form-modal.js +108 -101
- package/dist/components/features/backends/backend-form-modal.js.map +1 -1
- package/dist/components/features/backends/backend-row.cjs +1 -1
- package/dist/components/features/backends/backend-row.cjs.map +1 -1
- package/dist/components/features/backends/backend-row.js +2 -1
- package/dist/components/features/backends/backend-row.js.map +1 -1
- package/dist/components/features/backends/backend-selector.cjs +1 -1
- package/dist/components/features/backends/backend-selector.cjs.map +1 -1
- package/dist/components/features/backends/backend-selector.js +51 -51
- package/dist/components/features/backends/backend-selector.js.map +1 -1
- package/dist/components/features/backends/device-flow-auth.cjs +1 -1
- package/dist/components/features/backends/device-flow-auth.cjs.map +1 -1
- package/dist/components/features/backends/device-flow-auth.d.ts +4 -1
- package/dist/components/features/backends/device-flow-auth.js +38 -38
- package/dist/components/features/backends/device-flow-auth.js.map +1 -1
- package/dist/components/features/chat/chat-interface.cjs +2 -2
- package/dist/components/features/chat/chat-interface.cjs.map +1 -1
- package/dist/components/features/chat/chat-interface.js +173 -165
- package/dist/components/features/chat/chat-interface.js.map +1 -1
- package/dist/components/features/chat/components/chat-input-actions.cjs +1 -1
- package/dist/components/features/chat/components/chat-input-actions.cjs.map +1 -1
- package/dist/components/features/chat/components/chat-input-actions.d.ts +2 -1
- package/dist/components/features/chat/components/chat-input-actions.js +44 -43
- package/dist/components/features/chat/components/chat-input-actions.js.map +1 -1
- package/dist/components/features/chat/components/chat-input-container.cjs +1 -1
- package/dist/components/features/chat/components/chat-input-container.cjs.map +1 -1
- package/dist/components/features/chat/components/chat-input-container.d.ts +2 -1
- package/dist/components/features/chat/components/chat-input-container.js +20 -19
- package/dist/components/features/chat/components/chat-input-container.js.map +1 -1
- package/dist/components/features/chat/components/chat-input-profile-picker.cjs +1 -1
- package/dist/components/features/chat/components/chat-input-profile-picker.cjs.map +1 -1
- package/dist/components/features/chat/components/chat-input-profile-picker.js +44 -32
- package/dist/components/features/chat/components/chat-input-profile-picker.js.map +1 -1
- package/dist/components/features/chat/components/resolve-picker-kind.cjs +1 -1
- package/dist/components/features/chat/components/resolve-picker-kind.cjs.map +1 -1
- package/dist/components/features/chat/components/resolve-picker-kind.d.ts +10 -22
- package/dist/components/features/chat/components/resolve-picker-kind.js +6 -3
- package/dist/components/features/chat/components/resolve-picker-kind.js.map +1 -1
- package/dist/components/features/chat/custom-chat-input.cjs +1 -1
- package/dist/components/features/chat/custom-chat-input.cjs.map +1 -1
- package/dist/components/features/chat/custom-chat-input.d.ts +2 -1
- package/dist/components/features/chat/custom-chat-input.js +52 -51
- package/dist/components/features/chat/custom-chat-input.js.map +1 -1
- package/dist/components/features/chat/interactive-chat-box.cjs +1 -1
- package/dist/components/features/chat/interactive-chat-box.cjs.map +1 -1
- package/dist/components/features/chat/interactive-chat-box.d.ts +2 -1
- package/dist/components/features/chat/interactive-chat-box.js +9 -8
- package/dist/components/features/chat/interactive-chat-box.js.map +1 -1
- package/dist/components/features/diff-viewer/commit-list.cjs +2 -0
- package/dist/components/features/diff-viewer/commit-list.cjs.map +1 -0
- package/dist/components/features/diff-viewer/commit-list.d.ts +13 -0
- package/dist/components/features/diff-viewer/commit-list.js +27 -0
- package/dist/components/features/diff-viewer/commit-list.js.map +1 -0
- package/dist/components/features/diff-viewer/commit-row.cjs +2 -0
- package/dist/components/features/diff-viewer/commit-row.cjs.map +1 -0
- package/dist/components/features/diff-viewer/commit-row.d.ts +14 -0
- package/dist/components/features/diff-viewer/commit-row.js +59 -0
- package/dist/components/features/diff-viewer/commit-row.js.map +1 -0
- package/dist/components/features/diff-viewer/file-diff-viewer.cjs +1 -1
- package/dist/components/features/diff-viewer/file-diff-viewer.cjs.map +1 -1
- package/dist/components/features/diff-viewer/file-diff-viewer.d.ts +7 -1
- package/dist/components/features/diff-viewer/file-diff-viewer.js +40 -39
- package/dist/components/features/diff-viewer/file-diff-viewer.js.map +1 -1
- package/dist/components/features/plugins/plugin-detail-modal.d.ts +2 -1
- package/dist/components/providers/agent-server-ui-providers.cjs +1 -1
- package/dist/components/providers/agent-server-ui-providers.cjs.map +1 -1
- package/dist/components/providers/agent-server-ui-providers.d.ts +4 -2
- package/dist/components/providers/agent-server-ui-providers.js +9 -2
- package/dist/components/providers/agent-server-ui-providers.js.map +1 -1
- package/dist/components/providers/index.cjs +1 -1
- package/dist/components/providers/index.d.ts +1 -2
- package/dist/components/providers/index.js +0 -1
- package/dist/components/providers/telemetry-provider.cjs +2 -0
- package/dist/components/providers/telemetry-provider.cjs.map +1 -0
- package/dist/components/providers/telemetry-provider.d.ts +6 -0
- package/dist/components/providers/telemetry-provider.js +64 -0
- package/dist/components/providers/telemetry-provider.js.map +1 -0
- package/dist/components/shared/modals/settings/settings-modal.cjs +1 -1
- package/dist/components/shared/modals/settings/settings-modal.cjs.map +1 -1
- package/dist/components/shared/modals/settings/settings-modal.js +23 -22
- package/dist/components/shared/modals/settings/settings-modal.js.map +1 -1
- package/dist/config/defaults.cjs +1 -1
- package/dist/config/defaults.cjs.map +1 -1
- package/dist/config/defaults.js +5 -4
- package/dist/config/defaults.js.map +1 -1
- package/dist/constants/acp-providers.cjs.map +1 -1
- package/dist/constants/acp-providers.d.ts +1 -1
- package/dist/constants/acp-providers.js.map +1 -1
- package/dist/constants/canvas-ui.cjs +2 -0
- package/dist/constants/canvas-ui.cjs.map +1 -0
- package/dist/constants/canvas-ui.d.ts +8 -0
- package/dist/constants/canvas-ui.js +6 -0
- package/dist/constants/canvas-ui.js.map +1 -0
- package/dist/contexts/conversation-websocket-context.cjs +3 -3
- package/dist/contexts/conversation-websocket-context.cjs.map +1 -1
- package/dist/contexts/conversation-websocket-context.js +197 -204
- package/dist/contexts/conversation-websocket-context.js.map +1 -1
- package/dist/hooks/mutation/use-create-conversation.cjs +1 -1
- package/dist/hooks/mutation/use-create-conversation.cjs.map +1 -1
- package/dist/hooks/mutation/use-create-conversation.d.ts +2 -1
- package/dist/hooks/mutation/use-create-conversation.js +52 -52
- package/dist/hooks/mutation/use-create-conversation.js.map +1 -1
- package/dist/hooks/mutation/use-save-settings.cjs +1 -1
- package/dist/hooks/mutation/use-save-settings.cjs.map +1 -1
- package/dist/hooks/mutation/use-save-settings.d.ts +3 -1
- package/dist/hooks/mutation/use-save-settings.js +6 -5
- package/dist/hooks/mutation/use-save-settings.js.map +1 -1
- package/dist/hooks/query/query-keys.cjs +1 -1
- package/dist/hooks/query/query-keys.cjs.map +1 -1
- package/dist/hooks/query/query-keys.d.ts +2 -0
- package/dist/hooks/query/query-keys.js +4 -1
- package/dist/hooks/query/query-keys.js.map +1 -1
- package/dist/hooks/query/use-backends-health.cjs +1 -1
- package/dist/hooks/query/use-backends-health.cjs.map +1 -1
- package/dist/hooks/query/use-backends-health.js +50 -48
- package/dist/hooks/query/use-backends-health.js.map +1 -1
- package/dist/hooks/query/use-cloud-organizations.cjs +1 -1
- package/dist/hooks/query/use-cloud-organizations.cjs.map +1 -1
- package/dist/hooks/query/use-cloud-organizations.d.ts +1 -0
- package/dist/hooks/query/use-cloud-organizations.js +5 -2
- package/dist/hooks/query/use-cloud-organizations.js.map +1 -1
- package/dist/hooks/query/use-commit-changes.cjs +2 -0
- package/dist/hooks/query/use-commit-changes.cjs.map +1 -0
- package/dist/hooks/query/use-commit-changes.d.ts +5 -0
- package/dist/hooks/query/use-commit-changes.js +34 -0
- package/dist/hooks/query/use-commit-changes.js.map +1 -0
- package/dist/hooks/query/use-task-polling.cjs +1 -1
- package/dist/hooks/query/use-task-polling.cjs.map +1 -1
- package/dist/hooks/query/use-task-polling.d.ts +3 -2
- package/dist/hooks/query/use-task-polling.js +53 -40
- package/dist/hooks/query/use-task-polling.js.map +1 -1
- package/dist/hooks/query/use-unified-git-commits.cjs +2 -0
- package/dist/hooks/query/use-unified-git-commits.cjs.map +1 -0
- package/dist/hooks/query/use-unified-git-commits.d.ts +10 -0
- package/dist/hooks/query/use-unified-git-commits.js +41 -0
- package/dist/hooks/query/use-unified-git-commits.js.map +1 -0
- package/dist/hooks/query/use-unified-git-diff.cjs +1 -1
- package/dist/hooks/query/use-unified-git-diff.cjs.map +1 -1
- package/dist/hooks/query/use-unified-git-diff.d.ts +5 -0
- package/dist/hooks/query/use-unified-git-diff.js +11 -4
- package/dist/hooks/query/use-unified-git-diff.js.map +1 -1
- package/dist/hooks/use-acp-model-context.cjs +1 -1
- package/dist/hooks/use-acp-model-context.cjs.map +1 -1
- package/dist/hooks/use-acp-model-context.d.ts +4 -1
- package/dist/hooks/use-acp-model-context.js +9 -8
- package/dist/hooks/use-acp-model-context.js.map +1 -1
- package/dist/hooks/use-auto-refresh-files-on-edit.cjs +1 -1
- package/dist/hooks/use-auto-refresh-files-on-edit.cjs.map +1 -1
- package/dist/hooks/use-auto-refresh-files-on-edit.js +1 -1
- package/dist/hooks/use-auto-refresh-files-on-edit.js.map +1 -1
- package/dist/hooks/use-chat-input-model-state.cjs.map +1 -1
- package/dist/hooks/use-chat-input-model-state.d.ts +2 -1
- package/dist/hooks/use-chat-input-model-state.js.map +1 -1
- package/dist/hooks/use-chat-input-profile-state.cjs +1 -1
- package/dist/hooks/use-chat-input-profile-state.cjs.map +1 -1
- package/dist/hooks/use-chat-input-profile-state.d.ts +1 -10
- package/dist/hooks/use-chat-input-profile-state.js +42 -15
- package/dist/hooks/use-chat-input-profile-state.js.map +1 -1
- package/dist/hooks/use-device-flow.cjs +1 -1
- package/dist/hooks/use-device-flow.cjs.map +1 -1
- package/dist/hooks/use-device-flow.d.ts +4 -1
- package/dist/hooks/use-device-flow.js +42 -40
- package/dist/hooks/use-device-flow.js.map +1 -1
- package/dist/hooks/use-telemetry.cjs +1 -1
- package/dist/hooks/use-telemetry.cjs.map +1 -1
- package/dist/hooks/use-telemetry.d.ts +3 -3
- package/dist/hooks/use-telemetry.js +16 -22
- package/dist/hooks/use-telemetry.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 +5 -5
- package/dist/hooks/use-tracking.js +37 -37
- package/dist/hooks/use-tracking.js.map +1 -1
- package/dist/i18n/declaration.cjs +1 -1
- package/dist/i18n/declaration.cjs.map +1 -1
- package/dist/i18n/declaration.d.ts +9 -0
- package/dist/i18n/declaration.js +1 -1
- package/dist/i18n/declaration.js.map +1 -1
- package/dist/i18n/index.cjs +1 -1
- package/dist/i18n/index.cjs.map +1 -1
- package/dist/i18n/index.js +19 -18
- package/dist/i18n/index.js.map +1 -1
- package/dist/i18n/translation.cjs +2 -2
- package/dist/i18n/translation.cjs.map +1 -1
- package/dist/i18n/translation.js +153 -0
- package/dist/i18n/translation.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +32 -32
- package/dist/lib/index.cjs +1 -1
- package/dist/lib/index.d.ts +2 -2
- package/dist/lib/index.js +1 -1
- package/dist/locales/ar/openhands.json +9 -0
- package/dist/locales/ca/openhands.json +9 -0
- package/dist/locales/de/openhands.json +9 -0
- package/dist/locales/en/openhands.json +9 -0
- package/dist/locales/es/openhands.json +9 -0
- package/dist/locales/fr/openhands.json +9 -0
- package/dist/locales/it/openhands.json +9 -0
- package/dist/locales/ja/openhands.json +9 -0
- package/dist/locales/ko-KR/openhands.json +9 -0
- package/dist/locales/no/openhands.json +9 -0
- package/dist/locales/pt/openhands.json +9 -0
- package/dist/locales/tr/openhands.json +9 -0
- package/dist/locales/uk/openhands.json +9 -0
- package/dist/locales/zh-CN/openhands.json +9 -0
- package/dist/locales/zh-TW/openhands.json +9 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/cloud-client.cjs +2 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/cloud-client.cjs.map +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/cloud-client.js +351 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/cloud-client.js.map +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/device-flow-client.cjs +2 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/device-flow-client.cjs.map +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/device-flow-client.js +106 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/device-flow-client.js.map +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/openhands-client.cjs +2 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/openhands-client.cjs.map +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/openhands-client.js +69 -0
- package/dist/node_modules/@openhands/typescript-client/dist/client/openhands-client.js.map +1 -0
- package/dist/node_modules/@openhands/typescript-client/dist/clients.cjs +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/clients.js +3 -0
- package/dist/node_modules/@openhands/typescript-client/dist/models/acp-providers.cjs +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/models/acp-providers.cjs.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/models/acp-providers.js +18 -2
- package/dist/node_modules/@openhands/typescript-client/dist/models/acp-providers.js.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/models/acp.cjs.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/models/acp.js.map +1 -1
- package/dist/node_modules/axios/index.cjs +1 -1
- package/dist/node_modules/axios/index.js +1 -1
- package/dist/package.cjs +1 -1
- package/dist/package.cjs.map +1 -1
- package/dist/package.js +3 -3
- package/dist/package.js.map +1 -1
- package/dist/routes/app-settings.cjs +1 -1
- package/dist/routes/app-settings.cjs.map +1 -1
- package/dist/routes/app-settings.js +59 -60
- package/dist/routes/app-settings.js.map +1 -1
- package/dist/routes/commits-tab.cjs +2 -0
- package/dist/routes/commits-tab.cjs.map +1 -0
- package/dist/routes/commits-tab.d.ts +8 -0
- package/dist/routes/commits-tab.js +45 -0
- package/dist/routes/commits-tab.js.map +1 -0
- package/dist/routes/files-tab.cjs +1 -1
- package/dist/routes/files-tab.cjs.map +1 -1
- package/dist/routes/files-tab.js +148 -127
- package/dist/routes/files-tab.js.map +1 -1
- package/dist/routes/llm-settings.cjs +1 -1
- package/dist/routes/llm-settings.cjs.map +1 -1
- package/dist/routes/llm-settings.js +4 -1
- package/dist/routes/llm-settings.js.map +1 -1
- package/dist/services/cloud-funnel-analytics.cjs +2 -0
- package/dist/services/cloud-funnel-analytics.cjs.map +1 -0
- package/dist/services/cloud-funnel-analytics.d.ts +4 -0
- package/dist/services/cloud-funnel-analytics.js +39 -0
- package/dist/services/cloud-funnel-analytics.js.map +1 -0
- package/dist/services/telemetry.cjs +1 -1
- package/dist/services/telemetry.cjs.map +1 -1
- package/dist/services/telemetry.d.ts +46 -9
- package/dist/services/telemetry.js +182 -71
- package/dist/services/telemetry.js.map +1 -1
- package/dist/themes/color-themes.cjs.map +1 -1
- package/dist/themes/color-themes.d.ts +3 -6
- package/dist/themes/color-themes.js.map +1 -1
- package/dist/types/agent-server/core/base/action.d.ts +5 -4
- package/dist/types/agent-server/core/base/base.d.ts +3 -2
- package/dist/types/agent-server/core/base/observation.d.ts +1 -1
- package/dist/types/agent-server/type-guards.cjs +1 -1
- package/dist/types/agent-server/type-guards.cjs.map +1 -1
- package/dist/types/agent-server/type-guards.d.ts +3 -5
- package/dist/types/agent-server/type-guards.js +2 -1
- package/dist/types/agent-server/type-guards.js.map +1 -1
- package/dist/types/automation.d.ts +5 -0
- package/dist/utils/api-error-message.d.ts +11 -0
- package/dist/utils/automation-timeout.d.ts +19 -0
- package/dist/utils/base-path.cjs +2 -0
- package/dist/utils/base-path.cjs.map +1 -0
- package/dist/utils/base-path.d.ts +2 -0
- package/dist/utils/base-path.js +23 -0
- package/dist/utils/base-path.js.map +1 -0
- package/dist/utils/error-handler.cjs +1 -1
- package/dist/utils/error-handler.cjs.map +1 -1
- package/dist/utils/error-handler.d.ts +1 -4
- package/dist/utils/error-handler.js +6 -7
- package/dist/utils/error-handler.js.map +1 -1
- package/dist/utils/map-provider.cjs +1 -1
- package/dist/utils/map-provider.cjs.map +1 -1
- package/dist/utils/map-provider.d.ts +1 -0
- package/dist/utils/map-provider.js +2 -1
- package/dist/utils/map-provider.js.map +1 -1
- package/package.json +3 -3
- package/scripts/check-sdk-version-sync.mjs +6 -6
- package/scripts/dev-safe.mjs +7 -8
- package/scripts/dev-static.mjs +3 -0
- package/scripts/dev-with-automation.mjs +3 -0
- package/scripts/docker-build.mjs +4 -0
- package/scripts/static-server.mjs +93 -7
- package/tools/canvas_ui_tool.py +14 -8
- package/build/assets/active-backend-context-hxq31W25.js +0 -1
- package/build/assets/agent-server-client-options-DVLRd9sw.js +0 -1
- package/build/assets/agent-server-conversation-service.api-CuSdr4Qb.js +0 -5
- package/build/assets/agent-settings-D_yOy8XB.js +0 -1
- package/build/assets/api-key-entry-screen-Dl0qVYi4.js +0 -1
- package/build/assets/app-settings-yVizGXox.js +0 -1
- package/build/assets/automation-detail-dvJfLs5u.js +0 -2
- package/build/assets/automation-export-BPcgLqPD.js +0 -2
- package/build/assets/automations-list-CUXogTe0.js +0 -1
- package/build/assets/backend-form-modal-CQJGmItq.js +0 -1
- package/build/assets/check-Bvi71siz.js +0 -1
- package/build/assets/condenser-settings-Ca8fYZ_Z.js +0 -1
- package/build/assets/conversation-9NBSRoR9.js +0 -1
- package/build/assets/conversation-BXg6Oti2.js +0 -89
- package/build/assets/conversation-panel-CZri9Rup.js +0 -1
- package/build/assets/conversation-service.api-DPBQvTKD.js +0 -1
- package/build/assets/declaration-gq8V5eTU.js +0 -1
- package/build/assets/files-tab-UVoray88.js +0 -1
- package/build/assets/git-provider-icon-o6hdnJUB.js +0 -1
- package/build/assets/handle-capture-consent-CPMXU29K.js +0 -1
- package/build/assets/home-D1IHvGTN.js +0 -1
- package/build/assets/index-redirect-CUUJiNki.js +0 -1
- package/build/assets/install-server-modal-BbuQaA2w.js +0 -1
- package/build/assets/lesson-plan-jC0HBoe6.js +0 -4
- package/build/assets/llm-not-configured-banner-DoARbcdL.js +0 -27
- package/build/assets/llm-settings-4JMLV8mq.js +0 -1
- package/build/assets/llm-settings-D91gMw3U.js +0 -1
- package/build/assets/llm-subscription-service-CKyaV24y.js +0 -1
- package/build/assets/loader-circle-BEykUKYG.js +0 -1
- package/build/assets/manage-backends-modal-DkWAMSle.js +0 -1
- package/build/assets/manifest-aa5c29f6.js +0 -1
- package/build/assets/model-selector-BfqpMkSJ.js +0 -1
- package/build/assets/mouse-pointer-click-PdEQPL6v.js +0 -1
- package/build/assets/onboarding-Bu-HN1ze.js +0 -1
- package/build/assets/onboarding-modal-CZgjs5Bx.js +0 -1
- package/build/assets/option-service.api-BrZ5q87N.js +0 -1
- package/build/assets/organization-service.api-Bk4pCGU1.js +0 -1
- package/build/assets/path-utils-CSmuZoix.js +0 -1
- package/build/assets/plugins-management-service-BRBLxvUl.js +0 -1
- package/build/assets/profiles-service.api-BMXQ9pZC.js +0 -1
- package/build/assets/providers-BpO967xS.js +0 -1
- package/build/assets/proxy-BgJLtxu7.js +0 -1
- package/build/assets/root-BM5WgQ4_.js +0 -2
- package/build/assets/root-V8fkplMy.css +0 -1
- package/build/assets/root-layout-BdoyoobY.js +0 -2
- package/build/assets/schema-field-BSHrUMme.js +0 -1
- package/build/assets/sdk-section-page-t82gsOqa.js +0 -1
- package/build/assets/search-4DHskuhE.js +0 -1
- package/build/assets/secrets-service-B2GqPV0N.js +0 -1
- package/build/assets/settings-DmPLkgq0.js +0 -1
- package/build/assets/settings-modal-CwrZKrTq.js +0 -1
- package/build/assets/settings-service.api-Ce-ub11I.js +0 -1
- package/build/assets/shared-conversation-BDREQPnE.js +0 -1
- package/build/assets/skills-plugins-2Y44YHbO.js +0 -1
- package/build/assets/use-acp-credential-form-MzZM6D7D.js +0 -1
- package/build/assets/use-agent-profiles-DwZxnwO5.js +0 -1
- package/build/assets/use-backends-health-CRHzuvxO.js +0 -1
- package/build/assets/use-cloud-current-user-id-utFreJ0i.js +0 -1
- package/build/assets/use-config-mJrtZHP1.js +0 -1
- package/build/assets/use-create-conversation-DdqsP78F.js +0 -1
- package/build/assets/use-is-authed-B6M0mcGL.js +0 -1
- package/build/assets/use-llm-profiles-RC-PkpBl.js +0 -1
- package/build/assets/use-plugins-marketplace-FHlbeQ4c.js +0 -1
- package/build/assets/use-runtime-is-ready-RKj2WmEh.js +0 -1
- package/build/assets/use-save-agent-profile-tvDP15mh.js +0 -1
- package/build/assets/use-save-settings-BGlSfuYn.js +0 -1
- package/build/assets/use-settings-CH5LzXD8.js +0 -1
- package/build/assets/use-settings-nav-items-Dwktv8wo.js +0 -16
- package/build/assets/use-skills-CSzSL6HG.js +0 -1
- package/build/assets/use-tracking-BIXzagSI.js +0 -1
- package/build/assets/vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~lf310vj7-CSVPGId3.js +0 -10
- package/build/assets/vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~nfpll1wp-BCpa95De.js +0 -177
- package/build/assets/vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~skills-set~jewnulst-C57fm7C-.js +0 -1
- package/build/assets/vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-CqXiHwjU.js +0 -2
- package/build/assets/x-Cb0WAtak.js +0 -1
- package/dist/components/providers/posthog-wrapper.cjs +0 -2
- package/dist/components/providers/posthog-wrapper.cjs.map +0 -1
- package/dist/components/providers/posthog-wrapper.d.ts +0 -4
- package/dist/components/providers/posthog-wrapper.js +0 -49
- package/dist/components/providers/posthog-wrapper.js.map +0 -1
- package/dist/node_modules/posthog-js/react/dist/esm/index.cjs +0 -2
- package/dist/node_modules/posthog-js/react/dist/esm/index.cjs.map +0 -1
- package/dist/node_modules/posthog-js/react/dist/esm/index.js +0 -113
- package/dist/node_modules/posthog-js/react/dist/esm/index.js.map +0 -1
- package/dist/utils/handle-capture-consent.cjs +0 -2
- package/dist/utils/handle-capture-consent.cjs.map +0 -1
- package/dist/utils/handle-capture-consent.d.ts +0 -7
- package/dist/utils/handle-capture-consent.js +0 -8
- package/dist/utils/handle-capture-consent.js.map +0 -1
- /package/build/assets/{__vite-browser-external-4xJsU2-u.js → __vite-browser-external-BQUj0sYu.js} +0 -0
- /package/build/assets/{agent-server-ui-style-scope-COnDHTm5.js → agent-server-ui-style-scope-qhnhZHBV.js} +0 -0
- /package/build/assets/{automation-BU8zu-FP.js → automation-LZB0MjdV.js} +0 -0
- /package/build/assets/{close-p3Op5lxI.js → close-DLFb5kfv.js} +0 -0
- /package/build/assets/{common-Dh7OqABE.js → common-CxbUL3nR.js} +0 -0
- /package/build/assets/{createLucideIcon-CVAsW2Yo.js → createLucideIcon-D4Tak8A1.js} +0 -0
- /package/build/assets/{folder-mMWFvaw0.js → folder-Bk311brm.js} +0 -0
- /package/build/assets/{get-language-from-path-CPNnuVhI.js → get-language-from-path-DBqBsCWH.js} +0 -0
- /package/build/assets/{git-status-mapper-BI8FyUVp.js → git-status-mapper-DnL9OC8_.js} +0 -0
- /package/build/assets/{iconBase-DaTRRUjy.js → iconBase-Dz51Zn5x.js} +0 -0
- /package/build/assets/{link-external-DfKQroKX.js → link-external-CaBmUEs_.js} +0 -0
- /package/build/assets/{search-BsjCEFNf.js → search-BgOCR7_c.js} +0 -0
- /package/build/assets/{settings-like-page-layout-classes-DENKlZpD.js → settings-like-page-layout-classes-Cdl6jOe5.js} +0 -0
- /package/build/assets/{skills-9cDZONKh.js → skills-EqzxYBvT.js} +0 -0
- /package/build/assets/{terminal-BuLtIrb9.js → terminal-Cgf___rK.js} +0 -0
- /package/build/assets/{u-check-circle-half-LiwZkuFe.js → u-check-circle-half-MsShT8Ec.js} +0 -0
- /package/build/assets/{u-edit-DJ90xc8Z.js → u-edit-DL5LgKon.js} +0 -0
- /package/build/assets/{use-breakpoint-B-O0lQ84.js → use-breakpoint-BP3lqLMx.js} +0 -0
- /package/build/assets/{use-click-outside-element-Bf4Omzot.js → use-click-outside-element-D9BYdANT.js} +0 -0
- /package/build/assets/{use-launch-skill-in-chat-BnoDgvAy.js → use-launch-skill-in-chat-DJWEfVc5.js} +0 -0
- /package/build/assets/{vendor~browser-Dqd33JyP.js → vendor~browser-By2MVv_N.js} +0 -0
- /package/build/assets/{vendor~conversation-panel~conversation~alert-banner-DHDkknt5.js → vendor~conversation-panel~conversation~alert-banner-CxfzCmkN.js} +0 -0
- /package/build/assets/{vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~epa72zsm-B4rXs7Zd.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~e0djk9ee-Cw6LUe8p.js} +0 -0
- /package/build/assets/{vendor~entry.client~root~root-layout~index-redirect~home~conversation-panel~conversation~la~byh8a1g4-XNPdpuO8.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~jkpzbynd-CkpBIhVe.js} +0 -0
- /package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-9UMeuPV6.js → vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-COhHANvV.js} +0 -0
- /package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-DTzw2x50.js → vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-FghQ3Z1a.js} +0 -0
- /package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~launch~skills-settings~automations-~ki5qnp0d-rV6d1Iv_.js → vendor~root-layout~index-home~home~conversation-panel~conversation~launch~skills-settings~a~j2jlu22h-mC0v44WR.js} +0 -0
- /package/build/assets/{vendor~root-layout~home~mcp~automations-list~onboarding-modal-CXyYYvYh.js → vendor~root-layout~index-home~home~mcp~automations-list~onboarding-modal-C4-GDgiF.js} +0 -0
- /package/build/assets/{vendor~terminal-aeP3PnKf.js → vendor~terminal-CnKZILnC.js} +0 -0
|
@@ -86,6 +86,7 @@ export function parseArgs(argv = process.argv.slice(2)) {
|
|
|
86
86
|
authRequired: false,
|
|
87
87
|
runtimeServicesInfo: null,
|
|
88
88
|
lockToCloud: null,
|
|
89
|
+
basePath: "/",
|
|
89
90
|
};
|
|
90
91
|
|
|
91
92
|
for (let i = 0; i < argv.length; i++) {
|
|
@@ -127,6 +128,9 @@ export function parseArgs(argv = process.argv.slice(2)) {
|
|
|
127
128
|
case "--lock-to-cloud":
|
|
128
129
|
config.lockToCloud = argv[++i] || null;
|
|
129
130
|
break;
|
|
131
|
+
case "--base-path":
|
|
132
|
+
config.basePath = normalizeBasePath(argv[++i]);
|
|
133
|
+
break;
|
|
130
134
|
|
|
131
135
|
case "--auth-required":
|
|
132
136
|
config.authRequired = true;
|
|
@@ -166,6 +170,14 @@ export function parseArgs(argv = process.argv.slice(2)) {
|
|
|
166
170
|
return config;
|
|
167
171
|
}
|
|
168
172
|
|
|
173
|
+
function normalizeBasePath(value) {
|
|
174
|
+
const raw = (value ?? "").trim();
|
|
175
|
+
if (!raw || raw === "/") return "/";
|
|
176
|
+
|
|
177
|
+
const withLeadingSlash = raw.startsWith("/") ? raw : `/${raw}`;
|
|
178
|
+
return withLeadingSlash.replace(/\/+$/, "");
|
|
179
|
+
}
|
|
180
|
+
|
|
169
181
|
function showHelp() {
|
|
170
182
|
console.log(`
|
|
171
183
|
Combined static file server + reverse proxy.
|
|
@@ -194,6 +206,9 @@ OPTIONS:
|
|
|
194
206
|
--lock-to-cloud <cloud-url> Lock backend setup to a single OpenHands Cloud
|
|
195
207
|
URL. Hides manual/local backend setup and the
|
|
196
208
|
custom Cloud URL field in the pre-built frontend.
|
|
209
|
+
--base-path <path> Mount the SPA under <path> (default: /).
|
|
210
|
+
For example, --base-path /canvas serves
|
|
211
|
+
index.html and assets under /canvas.
|
|
197
212
|
--reject-prefix <prefix> Return 503 for requests matching <prefix>
|
|
198
213
|
instead of SPA-fallbacking to index.html;
|
|
199
214
|
may be repeated. Useful in --frontend-only
|
|
@@ -247,12 +262,17 @@ ROUTING:
|
|
|
247
262
|
* `window.__AGENT_CANVAS_LOCK_TO_CLOUD__`. Read by `getLockedCloudHost()` in
|
|
248
263
|
* `agent-server-config.ts` so pre-built frontend bundles can hide manual
|
|
249
264
|
* backend setup and the custom Cloud URL field at runtime.
|
|
265
|
+
*
|
|
266
|
+
* - `basePath`: the path prefix the SPA is mounted under, exposed as
|
|
267
|
+
* `window.__AGENT_CANVAS_BASE_PATH__` so runtime static assets like locale
|
|
268
|
+
* files can resolve through the same subpath as the built bundle.
|
|
250
269
|
*/
|
|
251
270
|
function makeConfigInjectionScript(
|
|
252
271
|
sessionApiKey,
|
|
253
272
|
authRequired,
|
|
254
273
|
runtimeServicesInfo,
|
|
255
274
|
lockToCloud,
|
|
275
|
+
basePath,
|
|
256
276
|
) {
|
|
257
277
|
const parts = [];
|
|
258
278
|
|
|
@@ -296,6 +316,12 @@ function makeConfigInjectionScript(
|
|
|
296
316
|
);
|
|
297
317
|
}
|
|
298
318
|
|
|
319
|
+
if (basePath && basePath !== "/") {
|
|
320
|
+
parts.push(
|
|
321
|
+
`window.__AGENT_CANVAS_BASE_PATH__=${JSON.stringify(basePath)};`,
|
|
322
|
+
);
|
|
323
|
+
}
|
|
324
|
+
|
|
299
325
|
if (parts.length === 0) return "";
|
|
300
326
|
|
|
301
327
|
return `<script>(function(){${parts.join("")}}());</script>`;
|
|
@@ -309,7 +335,13 @@ async function serveInjectedIndexHtml(
|
|
|
309
335
|
req,
|
|
310
336
|
res,
|
|
311
337
|
indexPath,
|
|
312
|
-
{
|
|
338
|
+
{
|
|
339
|
+
sessionApiKey,
|
|
340
|
+
authRequired,
|
|
341
|
+
runtimeServicesInfo,
|
|
342
|
+
lockToCloud,
|
|
343
|
+
basePath,
|
|
344
|
+
} = {},
|
|
313
345
|
) {
|
|
314
346
|
let content;
|
|
315
347
|
try {
|
|
@@ -323,6 +355,7 @@ async function serveInjectedIndexHtml(
|
|
|
323
355
|
authRequired,
|
|
324
356
|
runtimeServicesInfo,
|
|
325
357
|
lockToCloud,
|
|
358
|
+
basePath,
|
|
326
359
|
);
|
|
327
360
|
// Inject right before </head> so the key is available before any app code runs.
|
|
328
361
|
// replace() targets the first (and only) </head> in well-formed HTML.
|
|
@@ -370,7 +403,8 @@ function needsRuntimeInjection(injectionOpts) {
|
|
|
370
403
|
injectionOpts.sessionApiKey ||
|
|
371
404
|
injectionOpts.authRequired ||
|
|
372
405
|
injectionOpts.runtimeServicesInfo ||
|
|
373
|
-
injectionOpts.lockToCloud
|
|
406
|
+
injectionOpts.lockToCloud ||
|
|
407
|
+
(injectionOpts.basePath && injectionOpts.basePath !== "/"),
|
|
374
408
|
);
|
|
375
409
|
}
|
|
376
410
|
|
|
@@ -393,6 +427,36 @@ function notFound(res) {
|
|
|
393
427
|
res.end("Not Found");
|
|
394
428
|
}
|
|
395
429
|
|
|
430
|
+
function isMountedPath(urlPath, basePath) {
|
|
431
|
+
return (
|
|
432
|
+
basePath === "/" ||
|
|
433
|
+
urlPath === basePath ||
|
|
434
|
+
urlPath.startsWith(`${basePath}/`)
|
|
435
|
+
);
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
function stripBasePathFromUrl(rawUrl, basePath) {
|
|
439
|
+
if (basePath === "/") return rawUrl;
|
|
440
|
+
|
|
441
|
+
const [rawPath = "/", ...rest] = (rawUrl || "/").split("?");
|
|
442
|
+
const suffix = rawPath.slice(basePath.length) || "/";
|
|
443
|
+
const path = suffix.startsWith("/") ? suffix : `/${suffix}`;
|
|
444
|
+
return rest.length > 0 ? `${path}?${rest.join("?")}` : path;
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
function redirectToMountedPath(req, res, urlPath, basePath) {
|
|
448
|
+
if (basePath === "/" || !isGetOrHead(req) || looksLikeAssetRequest(urlPath)) {
|
|
449
|
+
return false;
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
const [, query = ""] = (req.url ?? "/").split("?", 2);
|
|
453
|
+
const path = urlPath === "/" ? "/" : urlPath;
|
|
454
|
+
const location = `${basePath}${path}${query ? `?${query}` : ""}`;
|
|
455
|
+
res.writeHead(308, { Location: location });
|
|
456
|
+
res.end();
|
|
457
|
+
return true;
|
|
458
|
+
}
|
|
459
|
+
|
|
396
460
|
function setStaticHeaders(res, pathname) {
|
|
397
461
|
const extension = extname(pathname).toLowerCase();
|
|
398
462
|
if (extension === ".js" || extension === ".mjs") {
|
|
@@ -421,29 +485,46 @@ async function handleStatic(
|
|
|
421
485
|
staticMiddleware,
|
|
422
486
|
injectionOpts = {},
|
|
423
487
|
rejectPrefixes = [],
|
|
488
|
+
basePath = "/",
|
|
424
489
|
) {
|
|
425
490
|
const urlPath = parseUrlPath(req, res);
|
|
426
491
|
if (urlPath === null) return;
|
|
427
492
|
|
|
493
|
+
if (!isMountedPath(urlPath, basePath)) {
|
|
494
|
+
if (matchesAnyPrefix(urlPath, rejectPrefixes)) {
|
|
495
|
+
rejectUnavailable(res);
|
|
496
|
+
return;
|
|
497
|
+
}
|
|
498
|
+
if (!redirectToMountedPath(req, res, urlPath, basePath)) notFound(res);
|
|
499
|
+
return;
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
const mountedUrl = stripBasePathFromUrl(req.url ?? "/", basePath);
|
|
503
|
+
const mountedPath = parseUrlPath({ ...req, url: mountedUrl }, res);
|
|
504
|
+
if (mountedPath === null) return;
|
|
505
|
+
|
|
428
506
|
const injectRuntimeConfig = needsRuntimeInjection(injectionOpts);
|
|
429
507
|
const indexPath = resolve(dirAbs, "index.html");
|
|
430
508
|
|
|
431
509
|
if (
|
|
432
510
|
injectRuntimeConfig &&
|
|
433
511
|
isGetOrHead(req) &&
|
|
434
|
-
(
|
|
512
|
+
(mountedPath === "/" || mountedPath === "/index.html")
|
|
435
513
|
) {
|
|
436
514
|
if (await serveInjectedIndexHtml(req, res, indexPath, injectionOpts))
|
|
437
515
|
return;
|
|
438
516
|
}
|
|
439
517
|
|
|
440
|
-
|
|
441
|
-
|
|
518
|
+
const mountedReq = Object.create(req);
|
|
519
|
+
mountedReq.url = mountedUrl;
|
|
520
|
+
|
|
521
|
+
staticMiddleware(mountedReq, res, async () => {
|
|
522
|
+
if (matchesAnyPrefix(mountedPath, rejectPrefixes)) {
|
|
442
523
|
rejectUnavailable(res);
|
|
443
524
|
return;
|
|
444
525
|
}
|
|
445
526
|
|
|
446
|
-
if (isGetOrHead(req) && !looksLikeAssetRequest(
|
|
527
|
+
if (isGetOrHead(req) && !looksLikeAssetRequest(mountedPath)) {
|
|
447
528
|
if (await serveInjectedIndexHtml(req, res, indexPath, injectionOpts)) {
|
|
448
529
|
return;
|
|
449
530
|
}
|
|
@@ -466,7 +547,9 @@ export function startStaticServer(config) {
|
|
|
466
547
|
authRequired: config.authRequired || false,
|
|
467
548
|
runtimeServicesInfo: config.runtimeServicesInfo || null,
|
|
468
549
|
lockToCloud: config.lockToCloud || null,
|
|
550
|
+
basePath: normalizeBasePath(config.basePath),
|
|
469
551
|
};
|
|
552
|
+
const basePath = injectionOpts.basePath;
|
|
470
553
|
const rejectPrefixes = config.rejectPrefixes ?? [];
|
|
471
554
|
const staticMiddleware = createStaticMiddleware(dirAbs);
|
|
472
555
|
|
|
@@ -485,6 +568,7 @@ export function startStaticServer(config) {
|
|
|
485
568
|
staticMiddleware,
|
|
486
569
|
injectionOpts,
|
|
487
570
|
rejectPrefixes,
|
|
571
|
+
basePath,
|
|
488
572
|
).catch((err) => {
|
|
489
573
|
console.error(`Static handler error for ${req.url}:`, err);
|
|
490
574
|
if (!res.headersSent) {
|
|
@@ -506,11 +590,13 @@ export function startStaticServer(config) {
|
|
|
506
590
|
|
|
507
591
|
return new Promise((resolveListen) => {
|
|
508
592
|
server.listen(config.port, config.host, () => {
|
|
593
|
+
const displayPath = basePath === "/" ? "/" : `${basePath}/`;
|
|
509
594
|
console.log("");
|
|
510
595
|
console.log(
|
|
511
|
-
`Static-server + proxy listening on http://${config.host}:${config.port}
|
|
596
|
+
`Static-server + proxy listening on http://${config.host}:${config.port}${displayPath}`,
|
|
512
597
|
);
|
|
513
598
|
console.log(` Static dir: ${dirAbs}`);
|
|
599
|
+
console.log(` Base path: ${basePath}`);
|
|
514
600
|
const sortedRoutes = Object.entries(config.routes).sort(
|
|
515
601
|
([a], [b]) => b.length - a.length,
|
|
516
602
|
);
|
package/tools/canvas_ui_tool.py
CHANGED
|
@@ -1,12 +1,18 @@
|
|
|
1
|
-
"""Canvas UI
|
|
1
|
+
"""Legacy conversation compatibility for the former Python Canvas UI tool.
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
New conversations define ``canvas_ui_control`` through the agent-server's
|
|
4
|
+
``client_tools`` JSON API. The distinct name avoids colliding with this
|
|
5
|
+
process-global legacy registration. This module remains importable because
|
|
6
|
+
persisted conversations store
|
|
7
|
+
``tool_module_qualnames = {"canvas_ui": "canvas_ui_tool"}`` and may contain
|
|
8
|
+
``CanvasUIAction`` / ``CanvasUIObservation`` events. Agent-server imports the
|
|
9
|
+
module before restoring those conversations so the legacy event kinds and tool
|
|
10
|
+
registration remain resolvable.
|
|
6
11
|
|
|
7
12
|
The server-side executor is a no-op that returns an acknowledgment. The actual
|
|
8
13
|
UI effect happens client-side: the frontend watches the WebSocket stream for
|
|
9
|
-
``
|
|
14
|
+
legacy ``canvas_ui`` and current ``canvas_ui_control`` ActionEvents and dispatches
|
|
15
|
+
the command.
|
|
10
16
|
"""
|
|
11
17
|
|
|
12
18
|
from collections.abc import Sequence
|
|
@@ -127,7 +133,7 @@ class CanvasUITool(ToolDefinition[CanvasUIAction, CanvasUIObservation]):
|
|
|
127
133
|
]
|
|
128
134
|
|
|
129
135
|
|
|
130
|
-
#
|
|
131
|
-
#
|
|
132
|
-
#
|
|
136
|
+
# Persisted pre-client_tools conversations import this module by qualname before
|
|
137
|
+
# restoring their agent and events. Keep the registration until those records
|
|
138
|
+
# have a server-side migration path.
|
|
133
139
|
register_tool("canvas_ui", CanvasUITool)
|
|
@@ -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~nfpll1wp-BCpa95De.js";import{i as re,t as c}from"./declaration-gq8V5eTU.js";import{m as ie,o as ae,v as oe}from"./vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~lf310vj7-CSVPGId3.js";import{I as se,t as ce}from"./utils-D3U3rlqr.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`,he=[{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`}],v=new WeakMap,ge=e=>{if(!v.has(e)){let t=e.use(r).use(a).use(re).init({fallbackLng:`en`,debug:!1,supportedLngs:he.map(e=>e.value),nonExplicitSupportedLngs:!1,ns:[_],defaultNS:_,fallbackNS:_,backend:{loadPath:`/locales/{{lng}}/{{ns}}.json`},interpolation:{escapeValue:!1}});v.set(e,t)}return e},_e=()=>ge(ee()),y=null,b=null,x=()=>(y||=_e(),y),S=()=>b??x(),ve=e=>(b=e??x(),b),ye=async(e=x())=>(await v.get(e),e),be=e=>e?typeof e==`object`&&!Array.isArray(e)?{ns:_,...e}:e:{ns:_},C=new Proxy({},{get:(e,t)=>{let n=S();if(t===`t`)return(e,t)=>n.t(e,be(t));if(t===`exists`)return(e,t)=>n.exists(e,be(t));let r=Reflect.get(n,t,n);return typeof r==`function`?r.bind(n):r},set:(e,t,n)=>{let r=S();return Reflect.set(r,t,n,r)}}),xe=e=>typeof e.response?.data==`object`&&e.response?.data!==null&&`error`in e.response.data&&typeof e.response?.data?.error==`string`,Se=e=>typeof e.response?.data==`object`&&e.response?.data!==null&&`message`in e.response.data&&typeof e.response?.data?.message==`string`,Ce=`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.`,we=`Disconnected (request timed out). Check that the backend URL is correct and reachable.`,Te=4;function Ee(e){return typeof e==`object`&&!!e}function De(e){let t=[],n=new Set,r=e,i=0;for(;r!=null&&i<Te&&!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(Ee(r)){let e=r.message;typeof e==`string`&&e&&t.push(e),r=r.cause}else break;i+=1}return t}function w(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 Oe(e){return De(e).some(w)}function T(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 E(e){let t=De(e);return t.some(w)?Ce:t.some(T)?we:t[0]??null}function ke(e){return typeof e==`object`&&!!e&&`isAxiosError`in e&&e.isAxiosError===!0}var D=e=>{let t=null,n=!1;return ke(e)?(n=!0,t=xe(e)&&e.response?.data.error?e.response?.data.error:Se(e)&&e.response?.data.message?e.response?.data.message:e.message):t=e instanceof Error?e.message:typeof e==`string`?e:null,E(n?t??e:e)??t??``},O=(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)},k=n(),A={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`},j={position:`top-right`,style:A},Ae={...A,color:`var(--oh-muted)`};function je({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,k.jsxs)(`div`,{className:ce(`flex min-w-0 gap-2`,n?`items-start`:`items-center`),children:[(0,k.jsx)(te,{"aria-hidden":!0,className:`h-4 w-4 shrink-0`,strokeWidth:2,style:{color:se}}),(0,k.jsx)(`span`,{ref:t,className:`min-w-0 flex-1 text-sm leading-5 [word-break:break-word] [overflow-wrap:anywhere]`,children:e})]})}var Me={...j,icon:null,style:Ae},M=e=>{let t=e||C.t(c.STATUS$ERROR);w(t)?t=C.t(c.ERROR$CORS_OR_NETWORK):T(t)&&(t=C.t(c.ERROR$BACKEND_REQUEST_TIMEOUT));let n=O(t,4e3);s((0,k.jsx)(je,{message:t}),{...Me,duration:n})},Ne=e=>{let t=O(e,5e3);s.success((0,k.jsx)(`span`,{className:`[word-break:break-word] [overflow-wrap:anywhere]`,children:e}),{...j,duration:t})},Pe=(e,t,n)=>{let r=O(`${e} ${t}`,5e3);s.success((0,k.jsxs)(`span`,{className:`[word-break:break-word] [overflow-wrap:anywhere]`,children:[e,` `,(0,k.jsx)(`a`,{className:`underline hover:no-underline`,href:n,children:t})]}),{...j,duration:r})},Fe=e=>{let t=O(e,6e3);s((0,k.jsx)(`span`,{className:`[word-break:break-word] [overflow-wrap:anywhere]`,children:e}),{...j,icon:`⚠️`,duration:t})},N=`openhands-backend-health`,P=500;function Ie(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 Le(){if(typeof window>`u`)return{};try{let e=window.localStorage.getItem(N);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&&Ie(r)&&(n[e]=r);return n}catch{return{}}}function Re(e){if(!(typeof window>`u`))try{if(Object.keys(e).length===0){window.localStorage.removeItem(N);return}window.localStorage.setItem(N,JSON.stringify(e))}catch{}}function ze(e){let t=E(e)??`Unknown error`;return t.length>P?`${t.slice(0,P)}…`:t}var F=Le(),I=new Set;function Be(){I.forEach(e=>e())}function L(e){F=e,Re(e),Be()}function Ve(){return F}function He(e){return I.add(e),()=>{I.delete(e)}}function Ue(e,t){let n=F[e],r=Math.min((n?.consecutiveFailures??0)+1,5),i=n?.disabled===!0||r>=5,a={consecutiveFailures:r,lastError:ze(t),lastFailureAt:Date.now(),disabled:i};L({...F,[e]:a})}function R(e){if(!(e in F))return;let{[e]:t,...n}=F;L(n)}function We(e){if(!(e in F))return;let{[e]:t,...n}=F;L(n)}function Ge(e){if(!(e in F))return;let{[e]:t,...n}=F;L(n)}var Ke=(e,t)=>{(e?.response?.status===401||e?.status===401)&&t.invalidateQueries({queryKey:[`user`,`authenticated`]})},z=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,qe=()=>{let e=new i({queryCache:new o({onSuccess:(e,t)=>{let n=t.meta?.backendId??t.options.meta?.backendId;typeof n==`string`&&R(n)},onError:(t,n)=>{if(n.queryKey[0]===`user`&&n.queryKey[1]===`authenticated`||Ke(t,e),!(n.meta?.disableToast??n.options.meta?.disableToast)&&!z(t)){let e=D(t);B.has(e||``)||(M(e||C.t(c.ERROR$GENERIC)),B.add(e||``),setTimeout(()=>{B.delete(e||``)},3e3))}}}),mutationCache:new ne({onError:(t,n,r,i)=>{Ke(t,e),!(i?.meta?.disableToast??i?.options.meta?.disableToast)&&!z(t)&&M(D(t)||C.t(c.ERROR$GENERIC))}})});return e},V=null,H=null,U=()=>(V||=qe(),V),W=()=>H??U(),Je=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)}}),Ye={_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.35.0`,agentCanvas:`1.4.0`,automation:`1.1.6`},compatibility:{minimumAgentServer:`1.28.0`},constraints:{_comment:`Temporary upper bound on the agent-client-protocol (acp) transitive dependency. openhands-sdk 1.35.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`}},Xe=5e3,Ze=`unknown`,K=Ye.compatibility.minimumAgentServer,Qe=`AGENT_SERVER_UNSUPPORTED_VERSION`,$e=`AGENT_SERVER_UNKNOWN_VERSION`,q=null,et=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}},tt=e=>e instanceof J||typeof e==`object`&&!!e&&`name`in e&&e.name===`AgentServerUnavailableError`,nt=class extends J{code=Qe;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=$e;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}},rt=e=>l()&&Z(e,401);function X(){q=null}function it(e){let t=et(q);return Array.isArray(t)?t.includes(e):!0}function at(e){return e instanceof Error&&e.name===`HttpError`&&`status`in e&&typeof e.status==`number`}function Z(e,t){return at(e)&&e.status===t}function ot(e){return typeof e.version==`string`&&e.version.trim()||null}function st(e){let t=ot(e);return!t||t.toLowerCase()===Ze?null:t}function ct(e){let t=st(e);return!t||!Q(t)?null:t}function lt(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 ut(e){let t=st(e);if(!t)throw X(),new Y(ot(e));let n=lt(t,K);if(n===null)throw X(),new Y(t);if(n<0)throw X(),new nt(t)}async function dt(){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:Xe}),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(ut(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 ft={WEB_CLIENT_CONFIG:[`web-client-config`]},pt={all:[`settings`],byScope:e=>[`settings`,e],personal:()=>[`settings`,`personal`]},mt={all:[`llm-profiles`]},ht={all:[`agent-profiles`]},gt={retry:!1},_t={all:[`llm-subscription`],openaiStatus:[`llm-subscription`,`openai`,`status`],openaiModels:[`llm-subscription`,`openai`,`models`]},vt={all:[`local-workspaces`]},yt={marketplace:[`plugins-marketplace`],installed:[`plugins-installed`],local:[`plugins-local`]},bt={staleTime:1e3*60*5,gcTime:1e3*60*15},$=g.createContext(null);function xt(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?crypto.randomUUID():`backend-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}function St({children:e}){let t=g.useSyncExternalStore(le,f,f),n=g.useCallback(()=>{X(),G.invalidateQueries({queryKey:ft.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:xt()};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)&&(We(e),i===e&&n())},[n]),o=g.useCallback(e=>{p(d().filter(t=>t.id!==e)),Ge(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,k.jsx)($.Provider,{value:s,children:e})}function Ct(){let e=g.useContext($);if(!e)throw Error(`useActiveBackendContext must be used inside <ActiveBackendProvider>`);return e}function wt(){let e=g.useContext($);return e?e.active:{backend:me()??fe,orgId:null}}export{M as A,_ as B,G as C,R as D,Ue as E,E as F,ye as G,S as H,T as I,Oe as L,Pe as M,Fe as N,He as O,D as P,w as R,W as S,Ve as T,C as U,x as V,ve as W,it as _,gt as a,dt as b,_t as c,ft as d,pt as f,rt as g,ct as h,ht as i,Ne as j,j as k,vt as l,X as m,wt as n,bt as o,ut as p,Ct as r,mt as s,St as t,yt as u,tt as v,Je as w,U as x,Z as y,he as z};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var e=`workspace/project`,t=`__AGENT_CANVAS_LOCK_TO_CLOUD__`;function n(e){return e?.trim()||null}function r(e){if(!e)return null;let t=e.trim().replace(/\/$/,``);return t?/^https?:\/\//i.test(t)?t:typeof window<`u`?`${window.location.protocol}//${t}`:`http://${t}`:null}function i(e){if(!e)return null;let t=e.trim().replace(/\/+$/,``);return t?/^https?:\/\//i.test(t)?t:`https://${t}`:null}function a(){return r(void 0)}function o(){let e=n(void 0);if(e)return e;if(typeof window<`u`){let e=window.__AGENT_CANVAS_SESSION_API_KEY__;if(typeof e==`string`)return n(e)}return null}function s(){return{baseUrl:u()??``,sessionApiKey:d()??``}}function c(){let e=i(void 0);if(e)return e;if(typeof window<`u`){let e=window[t];if(typeof e==`string`)return i(e)}return null}function l(e,t){let n=i(e),r=i(t);return!n||!r?!1:n.toLowerCase()===r.toLowerCase()}function u(){return a()||(typeof window<`u`?window.location.origin:null)}function d(){return o()}function f(){return(void 0)?.trim()||e}function p(e){return`${f().replace(/\/+$/,``)}/${e.replace(/-/g,``)}`}function m(){let e=d();return e?{"X-Session-API-Key":e}:{}}function h(){return typeof window<`u`&&window.__AGENT_CANVAS_AUTH_REQUIRED__===!0}function ee(){return h()?!d():!1}var g=`default-local`,_=`Local`;function v(){if(c())return null;let e=u(),t=d();return!e||!t?null:{id:g,name:_,host:e,apiKey:t,kind:`local`}}var y=`openhands-backends`,b=`openhands-active-backend`;function x(e){return e===`local`||e===`cloud`}function te(e){if(typeof e!=`object`||!e)return!1;let t=e;return typeof t.id==`string`&&t.id.length>0&&typeof t.name==`string`&&typeof t.host==`string`&&typeof t.apiKey==`string`&&x(t.kind)}function S(e){try{let{hostname:t}=new URL(e);return t===`localhost`||t===`127.0.0.1`||t===`::1`||t===`[::1]`}catch{return!1}}function ne(e,t){return e.id!==`default-local`||e.kind!==`local`?!1:e.host===t.host||S(e.host)&&S(t.host)}function C(e){let t=v();if(!t)return e;let n=!1,r=e.map(e=>!ne(e,t)||e.apiKey===t.apiKey?e:(n=!0,{...e,apiKey:t.apiKey}));return n?(w(r),r):e}function w(e){if(!(typeof window>`u`))try{window.localStorage.setItem(y,JSON.stringify(e))}catch{}}function T(){if(typeof window>`u`)return[];try{let e=window.localStorage.getItem(y);if(e===null){let e=v();return e?(w([e]),[e]):[]}let t=JSON.parse(e);if(!Array.isArray(t))return[];let n=t.filter(te);if(n.length===0){let e=v();return e?(w([e]),[e]):[]}return C(n)}catch{return[]}}function E(e){if(!e)return null;try{let t=JSON.parse(e);if(typeof t!=`object`||!t||typeof t.backendId!=`string`)return null;let n=t.orgId;return{backendId:t.backendId,orgId:typeof n==`string`&&n.length>0?n:null}}catch{return null}}function D(e,t){try{return e?.getItem(t)??null}catch{return null}}function O(e,t,n){try{e?.setItem(t,n)}catch{}}function k(e,t){try{e?.removeItem(t)}catch{}}function A(){return typeof window>`u`?null:E(D(window.sessionStorage,b))||E(D(window.localStorage,b))}function j(e){if(typeof window>`u`)return;if(!e){k(window.sessionStorage,b),k(window.localStorage,b);return}let t=JSON.stringify({backendId:e.backendId,orgId:e.orgId??null});O(window.sessionStorage,b,t),O(window.localStorage,b,t)}var M=`no-backend`,N={id:M,name:`No Backend Available`,host:``,apiKey:``,kind:`local`};function P(e){return e.id===M}function re(e){return e[0]??N}function F(e,t){let n=null,r=null;if(t){let i=e.find(e=>e.id===t.backendId);i&&(n=i,r=t.orgId??null)}return n||(n=re(e),r=null),{backends:e,selection:t,active:{backend:n,orgId:r}}}var I=F(T(),A()),L=new Set;function R(){L.forEach(e=>e())}function z(){return I.active}function B(){let e=I.active.backend;return e.kind===`local`&&!P(e)?e:null}function V(){return I.backends}function H(){return I.selection}function U(){return I}function W(e){j(e),I=F(I.backends,e),R()}function G(e){w(e);let t=I.selection;t&&!e.some(e=>e.id===t.backendId)&&(t=null,j(null)),I=F(e,t),R()}function K(e){return L.add(e),()=>{L.delete(e)}}function q(e){if(e&&!e.startsWith(`/`))try{let t=new URL(e),n=t.hostname,r=window.location.hostname??window.location.host?.split(`:`)[0];return r&&(n===`localhost`||n===`127.0.0.1`)&&r!==`localhost`&&r!==`127.0.0.1`?`${r}:${t.port}`:t.host}catch{return window.location.host}return window.location.host}function J(e){if(e&&!e.startsWith(`/`))try{return(new URL(e).pathname.split(`/api/conversations`)[0]||``).replace(/\/$/,``)}catch{return``}return``}function Y(e){let t=q(e),n=J(e),r=window.location.protocol===`https:`,i=X(e)===`https:`;return`${r||i?`https:`:`http:`}//${t}${n}`}function X(e){if(!e||e.startsWith(`/`))return null;try{return new URL(e).protocol}catch{return null}}function ie(e,t){let n=q(e),r=J(e),i=window.location.protocol===`https:`,a=X(e)===`https:`,o=`${i||a?`wss:`:`ws:`}//${n}${r}/sockets/bash-events`;return t?`${o}?session_api_key=${encodeURIComponent(t)}`:o}function ae(e,t){if(!e)return null;let n=q(t),r=J(t),i=window.location.protocol===`https:`,a=X(t)===`https:`;return`${i||a?`wss:`:`ws:`}//${n}${r}/sockets/events/${e}`}var Z=class extends Error{constructor(){super(`No backend is configured.`),this.name=`NoBackendAvailableError`}};function Q(e){return e.replace(/\/+$/,``)}function oe(e,t){return e.host?Q(e.host):e.conversationUrl?Q(Y(e.conversationUrl)):Q(t?.host??``)}function $(e={}){let t=B();if(!t&&!e.host&&!e.conversationUrl)throw new Z;let n=e.sessionApiKey??e.apiKey??t?.apiKey??void 0;return{host:oe(e,t),...n?{apiKey:n}:{},workingDir:e.workingDir??f(),...e.timeout===void 0?{}:{timeout:e.timeout}}}function se(e){let{host:t,apiKey:n,timeout:r}=$(e);return{baseUrl:t,...n?{apiKey:n}:{},timeout:r??6e4}}export{m as C,ee as D,h as E,l as O,s as S,c as T,_,Y as a,p as b,z as c,V as d,U as f,K as g,G as h,ie as i,H as l,W as m,$ as n,ae as o,P as p,se as r,N as s,Z as t,B as u,v,f as w,u as x,e as y};
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/secrets-service-B2GqPV0N.js","assets/rolldown-runtime-BFRubm34.js","assets/vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~lf310vj7-CSVPGId3.js","assets/vendor-styling-CI0PQ3ab.js","assets/agent-server-client-options-DVLRd9sw.js","assets/proxy-BgJLtxu7.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{St as e}from"./vendor-styling-CI0PQ3ab.js";import{d as t,f as n,r,s as i}from"./vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~lf310vj7-CSVPGId3.js";import{_ as a}from"./active-backend-context-hxq31W25.js";import{t as o}from"./common-Dh7OqABE.js";import{a as s,b as c,c as l,n as u,t as ee,u as d,w as f}from"./agent-server-client-options-DVLRd9sw.js";import{n as p,t as m}from"./proxy-BgJLtxu7.js";import{t as h}from"./settings-mQUckT0g.js";import{t as te}from"./settings-service.api-Ce-ub11I.js";import{r as g,t as _}from"./vendor~root-layout~home~conversation-panel~conversation~launch~settings~settings-index~agen~enjl5xdm-B0EIDu4M.js";import{t as v}from"./v4-DbCkTSoU.js";import{t as y}from"./profiles-service.api-BMXQ9pZC.js";import{t as b}from"./vendor~root-layout~home~conversation-panel~conversation~launch~skills-settings~automations-~ki5qnp0d-rV6d1Iv_.js";import{f as x,o as S,s as ne}from"./acp-providers-Sy2LKyMa.js";import{d as re,f as C,r as ie}from"./llm-subscription-DtsX5Lhg.js";import{t as ae}from"./llm-subscription-service-CKyaV24y.js";var w=new Map;function oe(e){return/^([/\\]|[a-zA-Z]:[/\\])/.test(e)}function se(e,t){return`${e.replace(/[/\\]+$/,``)}/${t.replace(/^[/\\]+/,``)}`}async function T(e={}){let n=u(e),r=n.host,i=w.get(r);if(i)return i;let a=(async()=>{let{home:e}=await new t(n).getHome();if(!e||typeof e!=`string`)throw Error(`Agent server returned an empty home directory`);return e.replace(/[/\\]+$/,``)})();w.set(r,a);try{return await a}catch(e){throw w.delete(r),e}}async function ce(e,t={}){let n=e.replace(/[/\\]+$/,``);return n?oe(n)?n:se(await T(t),n):T(t)}var E=`openhands-agent-server-conversation-metadata`,D=()=>{if(typeof window>`u`)return{};try{let e=window.localStorage.getItem(E);if(!e)return{};let t=JSON.parse(e);return!t||typeof t!=`object`?{}:t}catch{return{}}},le=e=>{if(!(typeof window>`u`)){if(Object.keys(e).length===0){window.localStorage.removeItem(E);return}window.localStorage.setItem(E,JSON.stringify(e))}},O=e=>D()[e]??null,k=(e,t)=>{let n=D();n[e]=t,le(n)},A=e=>{let t=D();e in t&&(delete t[e],le(t))};function j(e){if(!e?.id)return e;let t=O(e.id);return t?{...e,selected_repository:e.selected_repository??t.selected_repository??null,selected_branch:e.selected_branch??t.selected_branch??null,git_provider:e.git_provider??t.git_provider??null,selected_workspace:e.selected_workspace??t.selected_workspace??null}:e}function M(){let e=l().backend;if(e.kind!==`cloud`)throw Error(`Cloud conversations call requires a cloud backend.`);return e}async function ue(e=20,t){let n=M(),r=new URLSearchParams;r.set(`limit`,String(e)),t&&r.set(`page_id`,t),r.set(`sort_order`,`UPDATED_AT_DESC`);let i=await m({backend:n,method:`GET`,path:`/api/v1/app-conversations/search?${r.toString()}`});return{items:(i?.items??[]).map(e=>j(e)),next_page_id:i?.next_page_id??null}}async function N(e){if(e.length===0)return[];let t=M(),n=new URLSearchParams;for(let t of e)n.append(`ids`,t);return(await m({backend:t,method:`GET`,path:`/api/v1/app-conversations?${n.toString()}`})??[]).map(j)}async function de(e){return await m({backend:M(),method:`POST`,path:`/api/v1/app-conversations`,body:e})}async function fe(e){return m({backend:M(),method:`GET`,path:`/api/v1/app-conversations/${e}/download`,responseType:`blob`})}async function pe(e){await m({backend:M(),method:`DELETE`,path:`/api/v1/app-conversations/${e}`})}async function me(e,t){return await m({backend:M(),method:`PATCH`,path:`/api/v1/app-conversations/${e}`,body:{public:t}})}async function he(e){await m({backend:M(),method:`POST`,path:`/api/v1/sandboxes/${e}/pause`})}async function ge(e){await m({backend:M(),method:`POST`,path:`/api/v1/sandboxes/${e}/resume`})}async function P(e,t){let n=M(),r=new URLSearchParams;return r.append(`file_path`,t),await m({backend:n,method:`GET`,path:`/api/v1/app-conversations/${e}/file?${r.toString()}`})??``}async function _e(e){let t=M(),n=new URLSearchParams;return n.set(`ids`,e),(await m({backend:t,method:`GET`,path:`/api/v1/app-conversations/start-tasks?${n.toString()}`}))?.[0]??null}var F=`canvas_ui`,ve=`canvas_ui_tool`,ye=[`terminal`,`file_editor`,`task_tracker`,F],I=`browser_tool_set`,L=`task_tool_set`;function be(){return!0}function xe(){let e=(void 0)?.trim();if(e)return e;if(typeof window<`u`){let e=window.__AGENT_CANVAS_RUNTIME_SERVICES_INFO__;if(typeof e==`string`)return e.trim()||null}return null}function Se(){let e=xe();if(!e)return null;try{let t=JSON.parse(e);return!t||typeof t!=`object`?null:t}catch{return null}}function Ce(){let e=Se();if(!e?.services)return;let t=[];t.push(`<RUNTIME_SERVICES>`),e.mode?t.push(`You are running inside an agent-canvas dev stack started in '${e.mode}' mode.`):t.push(`You are running inside an agent-canvas dev stack.`),t.push(`The following services are reachable from your sandbox. URLs are written`,`from your point of view (i.e., as you should curl/fetch them).`,``);let{agent_server:n,ingress:r,automation:i}=e.services,{frontend:a}=e.services;n?.url_from_agent&&t.push(`* Agent Server (you): ${n.url_from_agent}`,` ${n.description??`The agent-server hosting your tool calls.`}`),r?.url_from_agent&&t.push(`* Ingress: ${r.url_from_agent}`,` ${r.description??`Unified entry point for browser-facing traffic.`}`),a?.url_from_agent&&t.push(`* Frontend: ${a.url_from_agent}`,` ${a.description??`Frontend dev server.`}`),i?.url_from_agent?(t.push(`* Automation backend: ${i.url_from_agent}`,` ${i.description??`OpenHands Automations service.`}`),i.docs_url&&t.push(` Docs: ${i.docs_url}`),i.openapi_url&&t.push(` OpenAPI: ${i.openapi_url}`),i.auth_env_var&&t.push(` Auth: header 'X-Session-API-Key: $${i.auth_env_var}'`)):t.push(`* Automation backend: not running in this dev mode (skip /api/automation calls).`);let o=n?.url_from_agent;return t.push(``,`Trust this block over guessing: do not assume any other URLs are running.`),o&&t.push(`In particular, ${o} inside your sandbox is the Agent Server`,`you are running inside of — NOT the automation backend.`),t.push(`</RUNTIME_SERVICES>`),t.join(`
|
|
3
|
-
`)}function we(e){let{host:t}=u();return`${t}/api/conversations/${e}`}function R(e){return`Conversation ${e.slice(0,5)}`}function z(e){let t=O(e.id),n=e.agent?.kind===`ACPAgent`,r=n?e.tags?.acpserver??e.agent?.acp_server??null:null;return{id:e.id,created_by_user_id:null,selected_repository:t?.selected_repository??null,selected_branch:t?.selected_branch??null,git_provider:t?.git_provider??null,selected_workspace:t?.selected_workspace??null,active_profile:t?.active_profile??null,title:e.title?.trim()?e.title:R(e.id),trigger:null,pr_number:[],agent_kind:n?`acp`:`openhands`,acp_server:r,llm_model:n?x({runtimeName:e.current_model_name,runtimeId:e.current_model_id,configured:e.agent?.acp_model,sdkLlm:e.agent?.llm?.model}):e.agent?.llm?.model??h.llm_model,metrics:e.metrics?{accumulated_cost:e.metrics.accumulated_cost??null,max_budget_per_task:e.metrics.max_budget_per_task??null,accumulated_token_usage:e.metrics.accumulated_token_usage?{prompt_tokens:e.metrics.accumulated_token_usage.prompt_tokens??0,completion_tokens:e.metrics.accumulated_token_usage.completion_tokens??0,cache_read_tokens:e.metrics.accumulated_token_usage.cache_read_tokens??0,cache_write_tokens:e.metrics.accumulated_token_usage.cache_write_tokens??0,context_window:e.metrics.accumulated_token_usage.context_window??0,per_turn_token:e.metrics.accumulated_token_usage.per_turn_token??0}:null}:null,created_at:e.created_at,updated_at:e.updated_at,execution_status:e.execution_status??o.IDLE,sandbox_status:e.sandbox_status??null,conversation_url:we(e.id),session_api_key:u().apiKey??null,sandbox_id:null,workspace:{working_dir:e.workspace?.working_dir??f()},public:!1,sub_conversation_ids:[]}}function Te(e){return{items:e.items.map(z),next_page_id:e.next_page_id??null}}var Ee=`acpserver`,De=`gAAAAA`,Oe=new Set([`schema_version`,`agent_settings`,`workspace`,`conversation_id`,`initial_message`,`plugins`]);function B(e){return!e||typeof e!=`object`||Array.isArray(e)?{}:structuredClone(e)}function V(e){if(typeof e!=`string`)return;let t=e.trim();return t.length>0?t:void 0}function H(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function U(e){return typeof e==`string`?e.startsWith(De):Array.isArray(e)?e.some(U):H(e)?Object.values(e).some(U):!1}function ke(e){return H(e)?Object.values(e).some(U):!1}function Ae(e){return e.confirmation_mode===!0?e.security_analyzer===`llm`?{kind:`ConfirmRisky`,threshold:`HIGH`,confirm_unknown:!0}:{kind:`AlwaysConfirm`}:{kind:`NeverConfirm`}}function je(e){switch(e.security_analyzer){case`llm`:return{kind:`LLMSecurityAnalyzer`};case`pattern`:return{kind:`PatternSecurityAnalyzer`};case`policy_rail`:return{kind:`PolicyRailSecurityAnalyzer`};default:return}}function Me(e){return!!e&&typeof e==`object`&&!Array.isArray(e)&&typeof e.name==`string`}function W(e,t){return e===F?a(e):e===I?be()&&a(e):e===L?t.enable_sub_agents===!0&&a(e):!0}function Ne(e){let t=new Map;for(let n of ye)W(n,e)&&t.set(n,{name:n,params:{}});for(let n of[I,L])W(n,e)&&t.set(n,{name:n,params:{}});let n=e.tools;if(Array.isArray(n)&&n.every(e=>Me(e)))for(let r of n)W(r.name,e)&&t.set(r.name,{name:r.name,params:B(r.params)});return Array.from(t.values())}function Pe(e,t){let n=[e?.trim(),t?.trim()].filter(Boolean);return n.length===0?null:{role:`user`,content:[{type:`text`,text:n.join(`
|
|
4
|
-
|
|
5
|
-
`)}],run:!0}}function Fe(){return b.map(e=>{let t=e.triggers?.length>0?{type:`keyword`,keywords:e.triggers}:null,n=`/home/runner/work/agent-canvas/agent-canvas/node_modules/@openhands/extensions/skills/${e.name}/SKILL.md`;return{name:e.name,content:e.content,trigger:t,source:n,description:e.description??null,is_agentskills_format:!0,...e.license?{license:e.license}:{},...e.compatibility?{compatibility:e.compatibility}:{}}})}function G(e){let t=Ce(),n=B(e.agent_context),r=[...Array.isArray(n.skills)?n.skills:[],...Fe()];return{...n,skills:r,load_public_skills:!1,load_user_skills:!0,load_project_skills:!0,...t?{system_message_suffix:t}:{}}}function K(e){return B(e.agent_settings).agent_kind===`acp`}function Ie(e){let t=B(e.agent_settings).acp_server;return typeof t==`string`&&t.length>0?t:void 0}function Le(e){let t=e.acp_command;if(!(Array.isArray(t)&&t.length===0)&&t!==void 0)return t;let n=ne(typeof e.acp_server==`string`?e.acp_server:void 0);return n?[...n.default_command]:t}function Re(e){let t=B(e.agent_settings),n={agent_kind:`acp`,agent_context:G(t)};for(let e of _){if(e===`acp_model`||e===`acp_env`)continue;let r=e===`acp_command`?Le(t):t[e];r!=null&&(n[e]=r)}let r=B(t.mcp_config);Object.keys(r).length>0&&(n.mcp_config=r);let i=typeof t.acp_server==`string`?t.acp_server:void 0,a=x({configured:t.acp_model,providerDefault:S(i)});return a&&(n.acp_model=a),n}function ze(e){let t=B(e.agent_settings),n=B(t.llm);n.model=typeof n.model==`string`&&n.model.trim().length>0?n.model:h.llm_model,n.stream=!0;let r=V(n.api_key);r?n.api_key=r:delete n.api_key;let i=V(n.base_url);i?n.base_url=i:delete n.base_url,C(n)?(n.auth_type=ie,n.subscription_vendor=re,delete n.api_key,delete n.base_url):(delete n.auth_type,delete n.subscription_vendor);let a=B(t.mcp_config);Object.keys(a).length===0&&delete t.mcp_config,delete t.acp_server;for(let e of _)delete t[e];return delete t.acp_env,{...t,llm:n,agent_context:G(t),tools:Ne(t)}}function Be(e){return K(e)?Re(e):ze(e)}function Ve(e){let{settings:t,query:n,conversationInstructions:r,plugins:i,workingDir:a}=e,o=B(t.conversation_settings),s=Pe(n,r);return Oe.forEach(e=>delete o[e]),{...o,workspace:{kind:`LocalWorkspace`,working_dir:a??f()},...s?{initial_message:s}:{},...i?.length?{plugins:i.map(e=>({source:e.source,...e.ref?{ref:e.ref}:{},...e.repo_path?{repo_path:e.repo_path}:{}}))}:{}}}function He(e){let t=e.encryptedAgentSettings?{...e.settings,agent_settings:e.encryptedAgentSettings}:e.settings,n=K(t),r=Be(t),i=n?Ie(t):void 0,o=Ve(e.encryptedConversationSettings?{...e,settings:{...e.settings,conversation_settings:e.encryptedConversationSettings}}:e),s={...e.agentProfileId?{agent_profile_id:e.agentProfileId}:{agent_settings:r},workspace:o.workspace,confirmation_policy:Ae(o),max_iterations:typeof o.max_iterations==`number`?o.max_iterations:500,stuck_detection:!0,autotitle:!0,worktree:e.worktree??!0};!e.agentProfileId&&i&&(s.tags={[Ee]:i}),!e.agentProfileId&&e.secretsEncrypted&&(!n||ke(r.mcp_config))&&(s.secrets_encrypted=!0),e.conversationId&&(s.conversation_id=e.conversationId);let c=je(o);c&&(s.security_analyzer=c),o.initial_message&&(s.initial_message=o.initial_message),o.plugins&&(s.plugins=o.plugins),o.hook_config&&(s.hook_config=o.hook_config);let l={},u=a(F);if(u&&(l[F]=ve),Object.assign(l,o.tool_module_qualnames??{}),u||delete l[F],Object.keys(l).length>0&&(s.tool_module_qualnames=l),o.agent_definitions&&(s.agent_definitions=o.agent_definitions),e.customSecrets&&e.customSecrets.length>0){let t=d(),n=t?p(t):{},r={};for(let t of e.customSecrets){let e={kind:`LookupSecret`,url:`/api/settings/secrets/${encodeURIComponent(t.name)}`,description:t.description};Object.keys(n).length>0&&(e.headers=n),r[t.name]=e}s.secrets=r}return s}var Ue=`Connect your ChatGPT subscription before starting a conversation with this LLM profile.`;async function q(e){if(C(B(e.llm))&&!(await ae.getOpenAIStatus()).connected)throw Error(Ue)}async function We(t){let{SecretsService:n}=await e(async()=>{let{SecretsService:e}=await import(`./secrets-service-B2GqPV0N.js`).then(e=>e.n);return{SecretsService:e}},__vite__mapDeps([0,1,2,3,4,5])),[r,i]=await Promise.all([te.getSettingsForConversation(),n.getSecrets()]),{agentSettings:a,conversationSettings:o,secretsEncrypted:s}=r;return t.agentProfileId||await q(a),He({...t,encryptedAgentSettings:a,encryptedConversationSettings:o,secretsEncrypted:s,customSecrets:i})}function Ge(){return{hooks:[]}}var Ke=`1970-01-01T00:00:00.000Z`,qe=`Unable to load conversations because the selected agent server returned data this UI does not understand. Check the backend URL/session key and update the agent server if needed.`;function J(){return Error(qe)}function Y(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function X(e){return typeof e==`number`?e:null}function Z(e){return typeof e==`number`?e:0}function Q(e){return typeof e==`string`?e:null}function Je(e,t,n){let r=e[t]??e[n];return typeof r==`string`&&r.trim()?r:Ke}function Ye(e){return Y(e)?{prompt_tokens:Z(e.prompt_tokens),completion_tokens:Z(e.completion_tokens),cache_read_tokens:Z(e.cache_read_tokens),cache_write_tokens:Z(e.cache_write_tokens),context_window:Z(e.context_window),per_turn_token:Z(e.per_turn_token)}:null}function Xe(e){return Y(e)?{accumulated_cost:X(e.accumulated_cost),max_budget_per_task:X(e.max_budget_per_task),accumulated_token_usage:Ye(e.accumulated_token_usage)}:null}function Ze(e){if(!Y(e))return null;let t=Y(e.llm)?{model:Q(e.llm.model)}:null;return{kind:Q(e.kind),acp_server:Q(e.acp_server),acp_model:Q(e.acp_model),llm:t}}function Qe(e){return Y(e)?{working_dir:Q(e.working_dir)}:null}function $e(e){if(!Y(e))return null;let t={};for(let[n,r]of Object.entries(e))typeof r==`string`&&(t[n]=r);return t}function et(e){if(!e.startsWith(`/`))return null;let t=[];for(let n of e.split(`/`))if(n&&n!==`.`)if(n===`..`){if(!t.length)return null;t.pop()}else t.push(n);return`/${t.join(`/`)}`}function tt(e,t){let n=et(e),r=et(t);if(!n||!r||n!==r&&!n.startsWith(`${r}/`))throw Error(`Conversation file path must stay inside the workspace`);return n}function nt(e){if(!Y(e)||typeof e.id!=`string`||!e.id.trim())throw J();return{id:e.id.trim(),title:Q(e.title),created_at:Je(e,`created_at`,`createdAt`),updated_at:Je(e,`updated_at`,`updatedAt`),execution_status:Q(e.execution_status),sandbox_status:Q(e.sandbox_status),metrics:Xe(e.metrics),agent:Ze(e.agent),workspace:Qe(e.workspace),tags:$e(e.tags),current_model_id:Q(e.current_model_id),current_model_name:Q(e.current_model_name)}}function $(e){if(!Array.isArray(e))throw J();return e.map(nt)}function rt(e){if(Array.isArray(e))return{items:$(e),next_page_id:null};if(!Y(e))throw J();return{items:$(e.items),next_page_id:typeof e.next_page_id==`string`?e.next_page_id:null}}var it=new Set([`idle`,`running`,`paused`,`waiting_for_confirmation`,`finished`,`error`,`stuck`]);function at(e){let t=e??`idle`;return it.has(t)?t:`idle`}function ot(e,t){if(!e)throw Error(`Conversation ${t} was not found`);return e}var st=class{static async sendMessage(e,t,r){let i=l().backend,a=r?.conversationUrl??null,o=r?.sessionApiKey??null;if(i.kind===`cloud`){if(!a||!o){let[t]=await N([e]);a=t?.conversation_url?.trim()??null,o=t?.session_api_key?.trim()??null}if(!a||!o)throw Error(`Conversation sandbox is still starting. Wait for it to finish, then try again.`);return await m({backend:i,method:`POST`,hostOverride:s(a),path:`/api/conversations/${e}/events`,body:{...t,run:!0},authMode:`session-api-key`,sessionApiKey:o}),t}return await new n(u({conversationUrl:a,sessionApiKey:o})).sendEvent(e,t,{run:!0}),t}static async createConversation(e,t,r,i,a,o,s,f,p,m){if(l().backend.kind===`cloud`)return de({initial_message:e?{role:`user`,content:[{type:`text`,text:e}]}:null,title:t??null,selected_repository:i?.selected_repository??null,selected_branch:i?.selected_branch??null,git_provider:i?.git_provider??null,plugins:r??null,parent_conversation_id:s??null,agent_type:f,sandbox_id:p??null,agent_profile_id:m??null});let h=await te.getSettings(),g=v(),_=await ce(a??c(g)),y=o??(a?`local_repo`:`new_worktree`),b=await We({settings:h,query:e,conversationInstructions:t,plugins:r,conversationId:g,workingDir:_,worktree:y===`new_worktree`,agentProfileId:m}),x=await new n(u()).createConversation(b),S=d();if(!S)throw new ee;return(i?.selected_repository||a)&&k(x.id,{selected_repository:i?.selected_repository??null,selected_branch:i?.selected_branch??null,git_provider:i?.git_provider??null,selected_workspace:a??null,workspace_mode:y}),{id:x.id,created_by_user_id:null,status:`READY`,detail:null,app_conversation_id:x.id,agent_server_url:S.host,request:{initial_message:b.initial_message,plugins:r??null},created_at:x.created_at,updated_at:x.updated_at}}static async getStartTask(e){return l().backend.kind===`cloud`?_e(e):null}static async getVSCodeUrl(e,t,n){let i=await this.resolveConversationWorkingDir(e);return{vscode_url:await new r(u({conversationUrl:t,sessionApiKey:n})).getUrl({baseUrl:typeof window<`u`?window.location.origin:void 0,workspaceDir:i})}}static async resolveConversationWorkingDir(e){let[t]=await this.batchGetAppConversations([e]);return t?.workspace?.working_dir??f()}static async batchGetAppConversations(e){return e.length===0?[]:l().backend.kind===`cloud`?N(e):$(await new n(u()).getConversations(e)).map(e=>z(e))}static async updateConversationPublicFlag(e,t){if(l().backend.kind!==`cloud`)throw Error(`Public sharing requires a cloud backend.`);return me(e,t)}static async updateConversationRepository(e,t,n,r){t?k(e,{...O(e)??{},selected_repository:t,selected_branch:n??null,git_provider:r??null}):A(e);let[i]=await this.batchGetAppConversations([e]);return ot(i,e)}static async readConversationFile(e,n){if(l().backend.kind===`cloud`)return P(e,tt(n??`/workspace/project/.agents_tmp/PLAN.md`,`/workspace/project`));let r=await this.resolveConversationWorkingDir(e),i=tt(n??`${r}/.agents_tmp/PLAN.md`,r);return new t(u()).downloadTextFile(i)}static async downloadConversation(e){return l().backend.kind===`cloud`?fe(e):new t(u()).downloadTrajectory(e)}static async getHooks(e){return Ge()}static async getRuntimeConversation(e,t,r){let i=l().backend,a=i.kind===`cloud`&&t?await m({backend:i,method:`GET`,hostOverride:s(t),path:`/api/conversations/${e}`,authMode:`session-api-key`,sessionApiKey:r}):await new n(u({conversationUrl:t,sessionApiKey:r})).getConversation(e),o=nt(a),c=Y(a)?a.stats:null;return{id:o.id,title:o.title?.trim()?o.title:R(o.id),metrics:Xe(o.metrics),created_at:o.created_at,updated_at:o.updated_at,status:at(o.execution_status),stats:Y(c)?c:{usage_to_metrics:{}}}}static async searchConversations(e=20,t){return l().backend.kind===`cloud`?ue(e,t):Te(rt(await new n(u()).searchConversations({limit:e,page_id:t,sort_order:g.UPDATED_AT_DESC})))}static async deleteConversation(e){l().backend.kind===`cloud`?await pe(e):await new n(u()).deleteConversation(e),A(e)}static async updateConversationTitle(e,t){await new n(u()).updateConversation(e,{title:t});let[r]=await this.batchGetAppConversations([e]);return ot(r,e)}static async forkConversation(e,t,r){if(l().backend.kind===`cloud`)throw Error(`Branching a conversation isn't supported on the cloud backend yet.`);let i=await new n(u()).forkConversation(e,{from_event_id:t,...r?{title:r}:{}}),a=O(e);return a&&k(i.id,a),i}static async getEventParentId(e,t){return(await new n(u()).getEvent(e,t)).parent_id??void 0}static async switchProfile(e,t){let{backend:r}=l();if(r.kind===`cloud`){if(!e){await y.activateProfile(t);return}await m({backend:r,method:`POST`,path:`/api/v1/app-conversations/${e}/switch_profile`,body:{profile_name:t}});return}if(!e){await new i(u()).activateProfile(t);return}let a=u(),o=new n(a),s=await new i(a).getProfile(t,{exposeSecrets:`encrypted`}),c=typeof s.config.model==`string`?s.config.model:``;if(!c)throw Error(`Profile '${t}' has no model.`);await q({llm:s.config}),await o.switchLLM(e,{...s.config,model:c,stream:!0,usage_id:`profile:${t}:${v()}`})}static async switchAcpModel(e,t){let{backend:r}=l();if(r.kind===`cloud`){await m({backend:r,method:`POST`,path:`/api/v1/app-conversations/${e}/switch_acp_model`,body:{model:t}});return}await new n(u()).switchAcpModel(e,t)}};export{ge as a,ce as c,P as i,N as n,O as o,he as r,k as s,st as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e,r as t}from"./agent-settings-B-W10B4E.js";export{e as default,t as handle};
|
|
@@ -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{t as r}from"./useTranslation-CDRCKC9-.js";import{t as i}from"./declaration-gq8V5eTU.js";import{o as a}from"./vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~lf310vj7-CSVPGId3.js";import{r as o,y as s}from"./active-backend-context-hxq31W25.js";import{t as c}from"./utils-D3U3rlqr.js";import{n as l,p as u}from"./agent-server-client-options-DVLRd9sw.js";import{r as d,t as f}from"./modal-body-DouOE5KH.js";import{t as p}from"./brand-button-vMVuyDXu.js";import{n as m,o as h}from"./backend-form-modal-CQJGmItq.js";var g=e(t(),1),_=n();function v(){let{t:e}=r(`openhands`),{active:t,addBackend:n,updateBackend:v}=o(),y=window.location.origin,[b,x]=g.useState(!1),[S,C]=g.useState(`idle`),[w,T]=g.useState(null),E=g.useCallback(async r=>{x(!0),C(`idle`),T(null);try{await new a(l({host:r.host,sessionApiKey:r.apiKey,timeout:5e3})).getSettings(),C(`success`),u(t.backend)?n(r):v(t.backend.id,r),window.location.reload()}catch(t){if(C(`error`),s(t,401))T(e(i.AUTH$INVALID_KEY));else{let n=t instanceof Error?t.message:String(t);T(`${e(i.AUTH$CONNECTION_FAILED)}${n?`: ${n}`:``}`)}x(!1)}},[t.backend,n,v,e]);return(0,_.jsx)(`div`,{"data-testid":`api-key-entry-screen`,className:`flex min-h-screen items-center justify-center bg-base px-6`,children:(0,_.jsxs)(`div`,{className:c(`relative rounded-xl border border-[var(--oh-border)] bg-base-secondary`,d(`md`),f),children:[(0,_.jsx)(`div`,{className:`px-6 pt-6 pb-2 pr-12`,children:(0,_.jsx)(`h2`,{className:`text-lg font-semibold`,children:e(i.BACKEND$ADD_TITLE)})}),(0,_.jsx)(`div`,{className:`px-6 pb-6 pt-2`,children:(0,_.jsx)(m,{mode:`add`,backend:{...t.backend,host:y,apiKey:``,name:``},onSubmitted:()=>{},testIdRoot:`api-key-entry`,hostReadOnly:!0,requireApiKey:!0,onSubmitOverride:E,renderActions:({canSubmit:t,testIdRoot:n})=>(0,_.jsxs)(_.Fragment,{children:[S!==`idle`&&(0,_.jsxs)(`div`,{className:`flex items-center gap-3 text-sm`,children:[(0,_.jsx)(h,{isConnected:S===`success`}),(0,_.jsx)(`span`,{"data-testid":`${n}-status`,className:S===`error`?`text-red-400`:`text-green-400`,children:S===`error`?w:e(i.ONBOARDING$BACKEND_STATUS_CONNECTED)})]}),(0,_.jsx)(p,{type:`submit`,variant:`secondary`,isDisabled:!t||b,testId:`${n}-submit`,className:`w-full text-center`,children:e(b?i.ONBOARDING$BACKEND_STATUS_CHECKING:i.BACKEND$CONNECT)})]})})})]})})}export{v as default};
|
|
@@ -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{L as r}from"./vendor~entry.client~root~root-layout~index-redirect~home~conversation-panel~conversation~la~byh8a1g4-XNPdpuO8.js";import{t as i}from"./useTranslation-CDRCKC9-.js";import{t as a}from"./declaration-gq8V5eTU.js";import{A as o,P as s,j as c,z as l}from"./active-backend-context-hxq31W25.js";import{n as u}from"./vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~skills-set~jewnulst-C57fm7C-.js";import{t as d}from"./brand-button-vMVuyDXu.js";import{i as f,n as p,r as m,t as h}from"./color-themes-DPBzNtVg.js";import{t as g}from"./settings-input-bD6npsDm.js";import{t as _}from"./settings-mQUckT0g.js";import{r as v}from"./use-settings-CH5LzXD8.js";import{t as y}from"./handle-capture-consent-CPMXU29K.js";import{t as b}from"./use-save-settings-BGlSfuYn.js";import{t as x}from"./settings-dropdown-input-BjunGXJb.js";import{n as S,t as C}from"./switch-skeleton-DqQwalyu.js";import{t as w}from"./settings-switch-5cuxl8Dc.js";var T=e(t(),1),E=n();function D({defaultKey:e,onChange:t,name:n}){let{t:r}=i(`openhands`);return(0,E.jsx)(x,{testId:n,name:n,onInputChange:t,label:r(a.SETTINGS$LANGUAGE),items:l.map(e=>({key:e.value,label:e.label})),defaultSelectedKey:e,isClearable:!1,wrapperClassName:`w-full min-w-0`})}function O(){let{t:e}=i(`openhands`),t=T.useCallback(e=>{if(!e)return;let t=e;p(t),m(t)},[]);return(0,E.jsx)(x,{testId:`color-theme-input`,name:`color-theme-input`,label:e(a.SETTINGS$COLOR_THEME),items:h.map(e=>({key:e.key,label:e.label})),defaultSelectedKey:f(),onSelectionChange:t,isClearable:!1,wrapperClassName:`w-full min-w-0`})}function k(){return(0,E.jsxs)(`div`,{"data-testid":`app-settings-skeleton`,className:`px-11 py-9 flex flex-col gap-6`,children:[(0,E.jsx)(S,{}),(0,E.jsx)(C,{}),(0,E.jsx)(C,{})]})}function A(){let e=u(),{t}=i(`openhands`),{mutate:n,isPending:r}=b(),{data:f,isLoading:p}=v(),[m,h]=T.useState(!1),[x,S]=T.useState(!1),[C,A]=T.useState(!1),[j,M]=T.useState(!1),[N,P]=T.useState(!1),F=r=>{let i=r.get(`language-input`)?.toString(),u=l.find(({label:e})=>e===i)?.value||_.language,d=r.get(`enable-analytics-switch`)?.toString()===`on`;n({language:u,user_consents_to_analytics:d,enable_sound_notifications:r.get(`enable-sound-notifications-switch`)?.toString()===`on`,git_user_name:r.get(`git-user-name-input`)?.toString()||_.git_user_name,git_user_email:r.get(`git-user-email-input`)?.toString()||_.git_user_email},{onSuccess:()=>{y(e,d),c(t(a.SETTINGS$SAVED))},onError:e=>{o(s(e)||t(a.ERROR$GENERIC))},onSettled:()=>{h(!1),S(!1),A(!1),M(!1),P(!1)}})},I=e=>{let t=l.find(({label:t})=>t===e)?.label,n=l.find(({value:e})=>e===f?.language)?.label;h(t!==n)},L=e=>{S(e!==(f?.user_consents_to_analytics??!0))},R=e=>{A(e!==!!f?.enable_sound_notifications)},z=e=>{let t=f?.git_user_name;M(e!==t)},B=e=>{let t=f?.git_user_email;P(e!==t)},V=!m&&!x&&!C&&!j&&!N,H=!f||p||r;return(0,E.jsxs)(`form`,{"data-testid":`app-settings-screen`,action:F,className:`flex flex-col gap-6`,children:[H&&(0,E.jsx)(k,{}),!H&&(0,E.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,E.jsx)(D,{name:`language-input`,defaultKey:f.language,onChange:I}),(0,E.jsx)(O,{}),(0,E.jsx)(w,{testId:`enable-analytics-switch`,name:`enable-analytics-switch`,defaultIsToggled:f.user_consents_to_analytics??!0,onToggle:L,children:t(a.ANALYTICS$SEND_ANONYMOUS_DATA)}),(0,E.jsx)(w,{testId:`enable-sound-notifications-switch`,name:`enable-sound-notifications-switch`,defaultIsToggled:!!f.enable_sound_notifications,onToggle:R,children:t(a.SETTINGS$SOUND_NOTIFICATIONS)}),(0,E.jsxs)(`div`,{className:`border-t border-[var(--oh-border)] pt-6 mt-2`,children:[(0,E.jsx)(`h3`,{className:`text-lg font-medium mb-2`,children:t(a.SETTINGS$GIT_SETTINGS)}),(0,E.jsx)(`p`,{className:`mb-4 text-sm leading-5 text-tertiary-light`,children:t(a.SETTINGS$GIT_SETTINGS_DESCRIPTION)}),(0,E.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,E.jsx)(g,{testId:`git-user-name-input`,name:`git-user-name-input`,type:`text`,label:t(a.SETTINGS$GIT_USERNAME),defaultValue:f.git_user_name||``,onChange:z,placeholder:t(a.SETTINGS$GIT_USERNAME_PLACEHOLDER),className:`w-full min-w-0`}),(0,E.jsx)(g,{testId:`git-user-email-input`,name:`git-user-email-input`,type:`email`,label:t(a.SETTINGS$GIT_EMAIL),defaultValue:f.git_user_email||``,onChange:B,placeholder:t(a.SETTINGS$GIT_EMAIL_PLACEHOLDER),className:`w-full min-w-0`})]}),(0,E.jsx)(`div`,{className:`flex justify-start pt-4`,children:(0,E.jsxs)(d,{testId:`submit-button`,variant:`primary`,type:`submit`,isDisabled:r||V,children:[!r&&t(a.SETTINGS$SAVE_CHANGES),r&&t(a.SETTINGS$SAVING)]})})]})]})]})}var j=r(A);export{j as default};
|
|
@@ -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-CRBP8vIS.js";import{t as o}from"./useTranslation-CDRCKC9-.js";import{t as s}from"./declaration-gq8V5eTU.js";import{b as c,p as l,y as u}from"./vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~lf310vj7-CSVPGId3.js";import{A as d,j as f,n as p}from"./active-backend-context-hxq31W25.js";import{t as m}from"./back-nav-button-CUS2mi-U.js";import{i as h,t as g}from"./utils-D3U3rlqr.js";import{a as _,c as v,n as y}from"./agent-server-client-options-DVLRd9sw.js";import{t as b}from"./proxy-BgJLtxu7.js";import{r as x}from"./modal-classes-Cf-4tbHz.js";import{t as S}from"./brand-button-vMVuyDXu.js";import{n as C}from"./navigation-context-DPs2G0X8.js";import{t as w}from"./use-tracking-BIXzagSI.js";import{t as T}from"./use-create-conversation-DdqsP78F.js";import{t as E}from"./u-edit-DJ90xc8Z.js";import{t as D}from"./terminal-BuLtIrb9.js";import{t as O}from"./use-user-conversation-zpx7I18x.js";import{t as k}from"./toggle-switch-2j5wwR85.js";import{t as ee}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 te,D as M,E as ne,O as re,S as ie,T as ae,_ as N,a as oe,b as se,c as P,d as F,f as I,g as L,h as ce,i as le,l as ue,m as R,o as de,p as fe,r as pe,s as me,t as he,u as ge}from"./automation-export-BPcgLqPD.js";import{t as z}from"./automation-BU8zu-FP.js";var B=e(t()),V=n();function H(){let{t:e}=o(`openhands`);return(0,V.jsx)(m,{to:`/automations`,children:e(s.AUTOMATIONS$DETAIL$BACK_TO_LIST)})}var U=e=>(0,V.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,stroke:`currentColor`,strokeWidth:2,...e,children:(0,V.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 _e({active:e}){let{t}=o(`openhands`);return(0,V.jsx)(`span`,{"data-testid":e?`active-status-badge-active`:`active-status-badge-inactive`,className:g(`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 ve({automation:e,onToggle:t,onEdit:n,onDelete:r,onExport:i,onDownloadTarball:a,onRunNow:c,isRunningNow:l=!1}){let{t:u}=o(`openhands`),d=L(`manage_automations`),f=[...n?[{label:u(s.AUTOMATIONS$EDIT),icon:(0,V.jsx)(E,{className:`size-4`}),onClick:n}]:[],{label:e.enabled?u(s.AUTOMATIONS$TURN_OFF):u(s.AUTOMATIONS$TURN_ON),icon:(0,V.jsx)(ge,{className:`size-4`}),onClick:t},{label:u(s.AUTOMATIONS$EXPORT),icon:(0,V.jsx)(U,{className:`size-4`}),onClick:i},{label:u(s.AUTOMATIONS$DOWNLOAD_TARBALL),icon:(0,V.jsx)(U,{className:`size-4`}),onClick:a},{label:u(s.AUTOMATIONS$DELETE),icon:(0,V.jsx)(ue,{className:`size-4`}),onClick:r}];return(0,V.jsx)(`div`,{className:`flex flex-col gap-4`,children:(0,V.jsxs)(`div`,{className:`flex items-start justify-between`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,V.jsx)(`h1`,{className:`text-xl font-medium text-content`,children:e.name}),(0,V.jsx)(_e,{active:e.enabled})]}),(0,V.jsxs)(`div`,{className:`flex items-center gap-2`,children:[d&&c&&(0,V.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:l||!e.enabled,onClick:c,children:[(0,V.jsx)(ce,{className:`size-3.5 shrink-0`,"aria-hidden":!0}),u(l?s.AUTOMATIONS$STARTING:s.AUTOMATIONS$RUN_NOW)]}),d&&(0,V.jsx)(k,{enabled:e.enabled,label:e.enabled?u(s.AUTOMATIONS$TURN_OFF):u(s.AUTOMATIONS$TURN_ON),onToggle:t}),d&&(0,V.jsx)(N,{items:f})]})]})})}function W({icon:e,title:t,children:n}){return(0,V.jsxs)(`div`,{className:`rounded-2xl border border-[var(--oh-border)] bg-[var(--oh-surface)]`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-[var(--oh-border)] px-5 py-3`,children:[(0,V.jsx)(`span`,{className:`size-4 text-muted`,children:e}),(0,V.jsx)(`h3`,{className:`text-sm font-medium text-content`,children:t})]}),(0,V.jsx)(`div`,{className:`px-5 py-5`,children:n})]})}var ye=240,be=`max-h-60`;function xe({prompt:e}){let{t}=o(`openhands`),[n,r]=B.useState(!1),[i,a]=B.useState(!1),c=B.useRef(null),l=i&&!n;return B.useLayoutEffect(()=>{let e=c.current;if(!e)return;let t=()=>{a(e.scrollHeight>ye)};t();let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[e]),(0,V.jsx)(W,{icon:(0,V.jsx)(D,{className:`size-4`}),title:t(s.AUTOMATIONS$DETAIL$PROMPT),children:(0,V.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,V.jsxs)(`div`,{className:`relative`,children:[(0,V.jsx)(`p`,{ref:c,className:g(`whitespace-pre-wrap text-sm leading-6 text-content`,l&&g(be,`overflow-hidden`)),"data-testid":`automation-prompt-content`,children:e}),l?(0,V.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,V.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 Se=e=>(0,V.jsxs)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,strokeWidth:2,stroke:`currentColor`,...e,children:[(0,V.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,V.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z`})]}),Ce=e=>(0,V.jsxs)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,strokeWidth:2,stroke:`currentColor`,...e,children:[(0,V.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,V.jsx)(`circle`,{cx:6,cy:3,r:2}),(0,V.jsx)(`circle`,{cx:18,cy:3,r:2}),(0,V.jsx)(`circle`,{cx:9,cy:18,r:2})]}),G=e=>(0,V.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,strokeWidth:2,stroke:`currentColor`,...e,children:(0,V.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`})}),K=e=>(0,V.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,strokeWidth:2,stroke:`currentColor`,...e,children:(0,V.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`})}),we=e=>(0,V.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,strokeWidth:2,stroke:`currentColor`,...e,children:(0,V.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 q({icon:e,label:t,children:n}){return(0,V.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,V.jsx)(`span`,{className:`size-3.5 text-muted`,children:e}),(0,V.jsx)(`span`,{className:`text-xs font-medium text-muted`,children:t})]}),(0,V.jsx)(`div`,{className:`text-sm text-content`,children:n})]})}function Te({branch:e}){return(0,V.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 J=60;function Ee({filter:e}){let{t}=o(`openhands`),[n,r]=(0,B.useState)(!1),i=e.length>J;return(0,V.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,V.jsx)(`span`,{className:`break-all`,children:i&&!n?`${e.slice(0,J)}…`:e}),i&&(0,V.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 De({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,V.jsx)(W,{icon:(0,V.jsx)(Se,{className:`size-4`}),title:t(s.AUTOMATIONS$DETAIL$CONFIGURATION),children:(0,V.jsxs)(`div`,{className:`grid grid-cols-2 gap-x-4 gap-y-5`,children:[e.repository&&(0,V.jsx)(q,{icon:(0,V.jsx)(Ce,{className:`size-3.5`}),label:t(s.AUTOMATIONS$DETAIL$REPOSITORIES),children:(0,V.jsxs)(`span`,{className:`flex items-center gap-1`,children:[e.repository,e.branch&&(0,V.jsx)(Te,{branch:e.branch})]})}),(0,V.jsx)(q,{icon:(0,V.jsx)(G,{className:`size-3.5`}),label:t(s.AUTOMATIONS$DETAIL$TRIGGER),children:i}),!n&&(0,V.jsx)(q,{icon:(0,V.jsx)(K,{className:`size-3.5`}),label:t(s.AUTOMATIONS$DETAIL$SCHEDULE),children:r}),n&&e.trigger.source&&(0,V.jsx)(q,{icon:(0,V.jsx)(fe,{className:`size-3.5`}),label:t(s.AUTOMATIONS$DETAIL$EVENT_SOURCE),children:e.trigger.source}),n&&e.trigger.on&&(0,V.jsx)(q,{icon:(0,V.jsx)(j,{className:`size-3.5`}),label:t(s.AUTOMATIONS$DETAIL$EVENT_TYPE),children:F(e.trigger.on)}),n&&e.trigger.filter&&(0,V.jsx)(q,{icon:(0,V.jsx)(A,{className:`size-3.5`}),label:t(s.AUTOMATIONS$DETAIL$EVENT_FILTER),children:(0,V.jsx)(Ee,{filter:e.trigger.filter})}),(0,V.jsx)(q,{icon:(0,V.jsx)(I,{className:`size-3.5`}),label:t(s.AUTOMATIONS$DETAIL$MODEL),children:e.model??t(s.COMMON$ACTIVE_PROFILE)}),e.notification&&(0,V.jsx)(q,{icon:(0,V.jsx)(we,{className:`size-3.5`}),label:t(s.AUTOMATIONS$DETAIL$NOTIFICATION),children:e.notification})]})})}var Oe=e=>(0,V.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,strokeWidth:2,stroke:`currentColor`,...e,children:(0,V.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 ke({name:e}){return(0,V.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 Ae({plugins:e}){let{t}=o(`openhands`);return(0,V.jsx)(W,{icon:(0,V.jsx)(Oe,{className:`size-4`}),title:t(s.AUTOMATIONS$DETAIL$PLUGINS),children:(0,V.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:e.map(e=>(0,V.jsx)(ke,{name:e},e))})})}var Y=e=>(0,V.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,strokeWidth:2,stroke:`currentColor`,...e,children:(0,V.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 X(e,t){return new Date(e).toLocaleDateString(t,{year:`numeric`,month:`short`,day:`numeric`})}function je(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}):X(e,t)}function Me({createdAt:e,lastRunAt:t}){let{t:n,i18n:r}=o(`openhands`),i=r.language;return(0,V.jsx)(W,{icon:(0,V.jsx)(Y,{className:`size-4`}),title:n(s.AUTOMATIONS$DETAIL$ACTIVITY),children:(0,V.jsxs)(`div`,{className:`grid grid-cols-2 gap-x-4`,children:[(0,V.jsx)(q,{icon:(0,V.jsx)(K,{className:`size-3.5`}),label:n(s.AUTOMATIONS$DETAIL$CREATED),children:X(e,i)}),(0,V.jsx)(q,{icon:(0,V.jsx)(R,{className:`size-3.5`}),label:n(s.AUTOMATIONS$DETAIL$LAST_RUN),children:t?je(t,i,n):n(s.AUTOMATIONS$DETAIL$TIME_NEVER)})]})})}var Ne=e=>(0,V.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,strokeWidth:2,stroke:`currentColor`,...e,children:(0,V.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`})}),Pe={[z.COMPLETED]:{label:s.AUTOMATIONS$DETAIL$SUCCESSFUL,style:`border-[var(--oh-success)]/50 bg-[var(--oh-success)]/10 text-[var(--oh-success)]`},[z.FAILED]:{label:s.AUTOMATIONS$DETAIL$FAILED,style:`border-[var(--oh-danger)]/50 bg-[var(--oh-danger)]/10 text-danger`},[z.PENDING]:{label:s.AUTOMATIONS$DETAIL$PENDING,style:`border-[var(--oh-border)] bg-surface-raised text-muted`},[z.RUNNING]:{label:s.AUTOMATIONS$DETAIL$RUNNING,style:`border-[var(--oh-border)] bg-surface-raised text-muted`}};function Fe({status:e}){switch(e){case z.COMPLETED:return(0,V.jsx)(G,{"data-testid":`run-status-icon-completed`,className:`size-3.5`});case z.FAILED:return(0,V.jsx)(Ne,{"data-testid":`run-status-icon-failed`,className:`size-3.5`});default:return(0,V.jsx)(R,{"data-testid":`run-status-icon-pending`,className:`size-3.5`})}}function Ie({status:e}){let{t}=o(`openhands`),n=Pe[e];return(0,V.jsxs)(`span`,{className:g(`inline-flex items-center gap-1.5 rounded-full border px-2.5 py-1 text-xs font-medium`,n.style),children:[(0,V.jsx)(Fe,{status:e}),t(n.label)]})}var Le=20;function Re(e){return e.kind===`BashOutput`}var ze=class e{static async listOutputs(t,n,r){let i=[],a;for(let o=0;o<Le;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=>{Re(e)&&i.push(e)}),!o.next_page_id)break;a=o.next_page_id}return i}static async searchEvents(e,t,n){let r=v().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))}),b({backend:r,method:`GET`,hostOverride:_(e),path:`/api/bash/bash_events/search?${i.toString()}`,authMode:`session-api-key`,sessionApiKey:t})}return new l(y({...e?{conversationUrl:e}:{},sessionApiKey:t})).searchEvents(n)}},Be=[`bash-command-logs`];function Ve(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 He(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 Ue(e){let{conversationId:t,bashCommandId:n,enabled:r=!0}=e,i=p(),o=O(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=Ve(s.sandbox_status)??(s.conversation_url?null:`missing`):m=!0);let h=r&&!!n&&(u?!!c:!0)&&!f&&!m,g=a({queryKey:[...Be,n,c,l,i.backend.id,i.orgId],queryFn:()=>ze.listOutputs(c,l,n),enabled:h,staleTime:60*1e3,gcTime:300*1e3,retry:!1}),_=u?He(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 We=4e3;function Ge(e,t){return e.length<=t?e:`…(truncated)…\n${e.slice(e.length-t)}`}function Ke({automationName:e,automationPrompt:t,errorDetail:n,stderr:r,runId:i}){let a=r?.trim()||n?.trim()||``,o=a?Ge(a,We):`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 qe({run:e,automation:t,stderr:n}){let{t:r}=o(`openhands`),{navigate:i}=C(),a=T();return(0,V.jsx)(S,{testId:`debug-automation-button`,type:`button`,variant:`primary`,onClick:()=>{if(a.isPending)return;let r=Ke({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 Je={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 Z(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 Ye({conversationId:e,bashCommandId:t,isOpen:n,onClose:r,run:i,automation:a}){let{t:c}=o(`openhands`),[l,u]=(0,B.useState)(`stdout`),{data:d,isFetching:f,isResolvingConversation:p,sandboxIssue:m,conversationMissing:h,error:_}=Ue({conversationId:e,bashCommandId:t,enabled:n});(0,B.useEffect)(()=>{n&&u(`stdout`)},[n,t]),(0,B.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,B.useMemo)(()=>d?{stdout:Z(d,`stdout`),stderr:Z(d,`stderr`)}:{stdout:``,stderr:``},[d]);if(!n)return null;let b=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,V.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,V.jsx)(`div`,{className:`absolute inset-0 bg-black/60`,onClick:r,onKeyDown:e=>{e.key===`Escape`&&r()},role:`presentation`}),(0,V.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,V.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,V.jsx)(ee,{className:`size-5`})}),(0,V.jsx)(`h2`,{className:g(`pr-8`,x),children:c(s.AUTOMATIONS$DETAIL$LOGS_TITLE)}),(0,V.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,V.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,V.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,V.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,V.jsx)(`p`,{className:`text-muted italic`,children:c(s.AUTOMATIONS$DETAIL$LOGS_NO_COMMAND)}),!S&&h&&(0,V.jsx)(`p`,{className:`text-muted italic`,children:c(s.AUTOMATIONS$DETAIL$LOGS_CONVERSATION_MISSING)}),!S&&!h&&m&&(0,V.jsx)(`p`,{"data-testid":`run-logs-sandbox-issue-${m}`,className:`text-muted italic`,children:c(Je[m])}),!S&&!h&&!m&&b&&(0,V.jsx)(`p`,{className:`text-muted italic`,children:c(s.AUTOMATIONS$DETAIL$LOGS_LOADING)}),!S&&!h&&!m&&!b&&_&&!d&&(0,V.jsxs)(`p`,{className:`text-danger`,children:[c(s.AUTOMATIONS$DETAIL$LOGS_ERROR),`: `,String(_)]}),!b&&!m&&d&&(0,V.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,V.jsx)(`span`,{className:`text-muted italic`,children:c(s.AUTOMATIONS$DETAIL$LOGS_EMPTY)})})]}),i?.status===z.FAILED&&(0,V.jsx)(`div`,{className:`mt-4 flex justify-end`,children:(0,V.jsx)(qe,{run:i,automation:a,stderr:y})})]})]})}function Xe(e,t){return new Date(e).toLocaleDateString(t,{weekday:`long`,year:`numeric`,month:`long`,day:`numeric`,hour:`numeric`,minute:`2-digit`})}function Ze(e){if(!e)return!0;let t=new Date(e).getTime();return Number.isNaN(t)||t===0}function Qe(e){return`/conversations/${e}`}function $e({run:e,automation:t}){let{t:n,i18n:r}=o(`openhands`),i=!!e.conversation_id,a=!!e.bash_command_id,c=e.status===z.COMPLETED||e.status===z.FAILED,l=!i&&c,[u,d]=(0,B.useState)(!1),[f]=(0,B.useState)(()=>new Date().toISOString()),p=Xe(Ze(e.started_at)?f:e.started_at,r.language),m=a?(0,V.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,V.jsx)(D,{className:`size-4`})}):null,h=(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,V.jsx)(`span`,{className:`text-sm text-content`,children:p}),l&&(0,V.jsxs)(`span`,{className:`text-xs text-muted italic`,children:[`(`,n(s.AUTOMATIONS$DETAIL$NO_CONVERSATION),`)`]})]}),(0,V.jsxs)(`div`,{className:`flex items-center gap-2`,children:[m,(0,V.jsx)(Ie,{status:e.status})]})]});return(0,V.jsxs)(V.Fragment,{children:[i&&e.conversation_id?(0,V.jsx)(`a`,{href:Qe(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,V.jsx)(`div`,{className:`flex items-center justify-between px-5 py-3 cursor-default`,children:h}),a&&(0,V.jsx)(Ye,{conversationId:e.conversation_id,bashCommandId:e.bash_command_id,isOpen:u,onClose:()=>d(!1),run:e,automation:t})]})}var Q=20;function et({automation:e}){let{t}=o(`openhands`),[n,r]=(0,B.useState)(Q),{data:i,isLoading:a}=M({id:e.id,limit:n,offset:0}),c=i?i.total>i.runs.length:!1;return(0,V.jsxs)(`div`,{className:`rounded-2xl border border-[var(--oh-border)] bg-[var(--oh-surface)]`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-[var(--oh-border)] px-5 py-3`,children:[(0,V.jsx)(`span`,{className:`size-4 text-muted`,children:(0,V.jsx)(Y,{className:`size-4`})}),(0,V.jsx)(`h3`,{className:`text-sm font-medium text-content`,children:t(s.AUTOMATIONS$DETAIL$ACTIVITY_LOG)})]}),a&&(0,V.jsx)(`div`,{className:`space-y-1 p-5`,children:Array.from({length:3}).map((e,t)=>(0,V.jsxs)(`div`,{className:`flex items-center justify-between py-3`,children:[(0,V.jsx)(`div`,{className:`h-5 w-64 animate-pulse rounded bg-surface-raised`}),(0,V.jsx)(`div`,{className:`h-6 w-24 animate-pulse rounded-full bg-surface-raised`})]},`skeleton-${t}`))}),!a&&i?.runs.length===0&&(0,V.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,V.jsxs)(`div`,{children:[i.runs.map((t,n)=>(0,V.jsx)(`div`,{className:n>0?`border-t border-[var(--oh-border)]`:``,children:(0,V.jsx)($e,{run:t,automation:e})},t.id)),c&&(0,V.jsx)(`div`,{className:`border-t border-[var(--oh-border)] px-5 py-3`,children:(0,V.jsx)(`button`,{type:`button`,onClick:()=>r(e=>e+Q),className:`text-sm text-muted hover:text-foreground`,children:t(s.AUTOMATIONS$DETAIL$LOAD_MORE_RUNS)})})]})]})}function $({className:e}){return(0,V.jsx)(`div`,{className:g(`animate-pulse rounded bg-surface-raised`,e)})}function tt(){return(0,V.jsxs)(`div`,{className:`flex flex-col gap-4`,"data-testid":`detail-skeleton`,children:[(0,V.jsx)($,{className:`h-5 w-40`}),(0,V.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,V.jsxs)(`div`,{className:`flex items-center gap-3`,children:[(0,V.jsx)($,{className:`h-6 w-48`}),(0,V.jsx)($,{className:`h-6 w-16 rounded-full`})]}),(0,V.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,V.jsx)($,{className:`h-6 w-11 rounded-full`}),(0,V.jsx)($,{className:`h-8 w-8`})]})]}),(0,V.jsx)($,{className:`h-5 w-96`}),(0,V.jsx)($,{className:`h-36 w-full rounded-2xl`}),(0,V.jsx)($,{className:`h-72 w-full rounded-2xl`}),(0,V.jsx)($,{className:`h-32 w-full rounded-2xl`}),(0,V.jsx)($,{className:`h-40 w-full rounded-2xl`})]})}function nt(){let{t:e}=o(`openhands`);return(0,V.jsxs)(`div`,{className:`flex flex-col items-center justify-center py-20`,children:[(0,V.jsx)(P,{className:`size-12 text-muted`}),(0,V.jsx)(`p`,{className:`mt-4 text-sm font-medium text-content`,children:e(s.AUTOMATIONS$DETAIL$NOT_FOUND_TITLE)}),(0,V.jsx)(`p`,{className:`mt-2 text-sm text-muted`,children:e(s.AUTOMATIONS$DETAIL$NOT_FOUND_MESSAGE)}),(0,V.jsx)(`div`,{className:`mt-6`,children:(0,V.jsx)(H,{})})]})}var rt=r(function(){let{t:e}=o(`openhands`),{automationId:t}=i(),{navigate:n}=C(),[r,a]=(0,B.useState)(!1),[c,l]=(0,B.useState)(!1),{data:m,isLoading:g,refetch:_}=se(),v=m?.status===`ok`,y=p(),b=(0,B.useRef)(y.backend.id).current!==y.backend.id,{data:x,isLoading:S,isError:T,error:E,refetch:D}=ne({id:t??``,enabled:v&&!b}),{trackPrebuiltAutomationEnabled:O,trackAutomationExported:k}=w(),ee=ae(),A=ie(),j=te(),M=T&&u(E)&&E.response?.status===404;if(g)return(0,V.jsx)(`div`,{className:`min-h-full`,children:(0,V.jsx)(`div`,{className:`p-6 max-w-4xl mx-auto`,children:(0,V.jsx)(tt,{})})});if(!v)return(0,V.jsx)(`div`,{className:`min-h-full`,children:(0,V.jsx)(`div`,{className:`p-6 max-w-4xl mx-auto`,children:(0,V.jsx)(de,{onRetry:_})})});if(S)return(0,V.jsx)(`div`,{className:`min-h-full`,children:(0,V.jsx)(`div`,{className:`p-6 max-w-4xl mx-auto`,children:(0,V.jsx)(tt,{})})});if(M)return(0,V.jsx)(`div`,{className:`min-h-full`,children:(0,V.jsx)(`div`,{className:`p-6 max-w-4xl mx-auto`,children:(0,V.jsx)(nt,{})})});if(T||!x)return(0,V.jsx)(`div`,{className:`min-h-full`,children:(0,V.jsx)(`div`,{className:`p-6 max-w-4xl mx-auto`,children:(0,V.jsx)(me,{onRetry:()=>D()})})});let N=()=>{let e=!x.enabled;ee.mutate({id:x.id,enabled:e}),e&&O({automationId:x.id,automationName:x.name})},P=()=>{A.mutate(x.id,{onSuccess:()=>{n?.(`/automations`)}})},F=()=>{j.mutate(x.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))}})},I=()=>{let e=`${JSON.stringify(pe(x),null,2)}\n`;h(new Blob([e],{type:`application/json`}),he(x)),k({backendKind:y.backend.kind})},L=y.backend.kind===`local`;return(0,V.jsx)(`div`,{className:`min-h-full`,children:(0,V.jsx)(`div`,{className:`p-6 max-w-4xl mx-auto`,children:(0,V.jsxs)(`div`,{className:`flex flex-col gap-4`,children:[(0,V.jsx)(H,{}),(0,V.jsx)(ve,{automation:x,onToggle:N,onEdit:L?()=>l(!0):void 0,onDelete:()=>a(!0),onExport:I,onDownloadTarball:()=>re.downloadTarball(x.id,x.name),onRunNow:F,isRunningNow:j.isPending}),x.prompt&&(0,V.jsx)(xe,{prompt:x.prompt}),(0,V.jsx)(De,{automation:x}),x.plugins&&x.plugins.length>0&&(0,V.jsx)(Ae,{plugins:x.plugins}),(0,V.jsx)(Me,{createdAt:x.created_at,lastRunAt:x.last_triggered_at}),(0,V.jsx)(et,{automation:x}),(0,V.jsx)(oe,{automationName:x.name,isOpen:r,onConfirm:P,onCancel:()=>a(!1)}),L&&(0,V.jsx)(le,{automation:x,isOpen:c,onClose:()=>l(!1)})]})})})});export{rt as default};
|
|
@@ -1,2 +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{n as i}from"./vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~epa72zsm-B4rXs7Zd.js";import{t as a}from"./useMutation-DrCAVg5w.js";import{t as o}from"./useQuery-CRBP8vIS.js";import{t as s}from"./useTranslation-CDRCKC9-.js";import{t as c}from"./declaration-gq8V5eTU.js";import{b as l,y as u}from"./vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~lf310vj7-CSVPGId3.js";import{A as d,j as ee,n as f}from"./active-backend-context-hxq31W25.js";import{t as p}from"./utils-D3U3rlqr.js";import{c as m,t as h,u as g}from"./agent-server-client-options-DVLRd9sw.js";import{t as _}from"./proxy-BgJLtxu7.js";import{r as v}from"./modal-classes-Cf-4tbHz.js";import{f as te,l as ne}from"./form-control-classes-ChpNBe9n.js";import{t as y}from"./brand-button-vMVuyDXu.js";import{r as b,u as x}from"./dropdown-classes-DJSXeLqc.js";import{t as re}from"./settings-input-bD6npsDm.js";import{t as S}from"./use-tracking-BIXzagSI.js";import{t as ie}from"./use-llm-profiles-RC-PkpBl.js";import{n as C,t as ae}from"./context-menu-list-item-BD5_EaKN.js";import{t as w}from"./settings-dropdown-input-BjunGXJb.js";import{t as T}from"./x-mark-Batp6gXa.js";import{t as E}from"./automation-BU8zu-FP.js";var D=`/api/automation`,O=l.create();O.interceptors.request.use(e=>{if(e.baseURL)return e;let t=g();if(!t)throw new h;e.baseURL=t.host;let n=t.apiKey?.trim();return n&&e.headers.set(`X-Session-API-Key`,n),e});function k(e,t){let n=new URLSearchParams;return n.set(`limit`,String(e)),n.set(`offset`,String(t)),n.toString()}function oe(e){return e.trigger.type===`event`?{type:`event`,source:e.trigger.source,on:e.trigger.on,...e.trigger.filter&&{filter:e.trigger.filter}}:{type:`cron`,schedule:e.trigger.schedule,timezone:e.timezone??e.trigger.timezone??`UTC`}}function se(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?`pending.${crypto.randomUUID()}`:`pending.${Date.now()}.${Math.random().toString(36).slice(2,10)}`}function ce(e){if(!e.prompt)throw Error(`An automation prompt is required for import.`);let t=e.repository?[{url:e.repository,...e.branch&&{ref:e.branch},...!e.repository.includes(`://`)&&!e.repository.startsWith(`git@`)&&{provider:`github`}}]:void 0;return{path:`${D}/v1/preset/${e.plugins?.length?`plugin`:`prompt`}`,body:{name:e.name,prompt:e.prompt,trigger:{type:`event`,source:`agent-canvas-import`,on:se()},...e.model&&{model:e.model},...t&&{repos:t},...e.plugins?.length&&{plugins:e.plugins.map(e=>({source:e}))}}}}function A(e){let t=e.apiKey.trim();return{baseURL:e.host,...t&&{headers:{"X-Session-API-Key":t}}}}function j(e){return e.orgId?{"X-Org-Id":e.orgId}:void 0}var M=class e{static async listAutomations(e={}){let{limit:t=50,offset:n=0}=e,r=m().backend;if(r.kind===`cloud`)return _({backend:r,method:`GET`,path:`${D}/v1?${k(t,n)}`});let{data:i}=await O.get(`${D}/v1`,{params:{limit:t,offset:n}});return i}static async getAutomations(t=50,n=0){return e.listAutomations({limit:t,offset:n})}static async getAutomation(e){let t=m().backend,n=`${D}/v1/${encodeURIComponent(e)}`;if(t.kind===`cloud`)return _({backend:t,method:`GET`,path:n});let{data:r}=await O.get(n);return r}static async createAutomation(e){let t=m(),{path:n,body:r}=ce(e),i;if(t.backend.kind===`cloud`)i=await _({backend:t.backend,method:`POST`,path:n,body:r,headers:j(t)});else{let{data:e}=await O.post(n,r,A(t.backend));i=e}let a=`${D}/v1/${encodeURIComponent(i.id)}`,o={trigger:oe(e),enabled:!1};try{if(t.backend.kind===`cloud`)return await _({backend:t.backend,method:`PATCH`,path:a,body:o,headers:j(t)});let{data:e}=await O.patch(a,o,A(t.backend));return e}catch(e){try{t.backend.kind===`cloud`?await _({backend:t.backend,method:`DELETE`,path:a,headers:j(t)}):await O.delete(a,A(t.backend))}catch(t){throw AggregateError([e,t],`Failed to disable the imported automation and clean it up.`)}throw e}}static async updateAutomation(e,t){let n=m().backend,r=`${D}/v1/${encodeURIComponent(e)}`;if(n.kind===`cloud`)return _({backend:n,method:`PATCH`,path:r,body:t});let{data:i}=await O.patch(r,t);return i}static async deleteAutomation(e){let t=m().backend,n=`${D}/v1/${encodeURIComponent(e)}`;if(t.kind===`cloud`){await _({backend:t,method:`DELETE`,path:n});return}await O.delete(n)}static async dispatchAutomation(e){let t=m().backend,n=`${D}/v1/${encodeURIComponent(e)}/dispatch`;if(t.kind===`cloud`)return _({backend:t,method:`POST`,path:n});let{data:r}=await O.post(n);return r}static async listAutomationRuns(e,t={}){let{limit:n=50,offset:r=0}=t,i=m().backend,a=`${D}/v1/${encodeURIComponent(e)}/runs`;if(i.kind===`cloud`)return _({backend:i,method:`GET`,path:`${a}?${k(n,r)}`});let{data:o}=await O.get(a,{params:{limit:n,offset:r}});return o}static async getAutomationRuns(t,n=50,r=0){return e.listAutomationRuns(t,{limit:n,offset:r})}static async toggleAutomation(t,n){return e.updateAutomation(t,{enabled:n})}static async downloadTarball(e,t){let n=m().backend,r=`${D}/v1/${encodeURIComponent(e)}/tarball`,i;if(n.kind===`cloud`)i=await _({backend:n,method:`GET`,path:r,responseType:`blob`});else{let{data:e}=await O.get(r,{responseType:`blob`});i=e}let a=URL.createObjectURL(i),o=document.createElement(`a`);o.href=a,o.download=`${t}.tar`,o.click(),URL.revokeObjectURL(a)}static async checkHealth(){let e=m().backend,t=`${D}/health`;try{if(e.kind===`cloud`)return await _({backend:e,method:`GET`,path:t,timeoutSeconds:5});let{data:n}=await O.get(t,{timeout:5e3});return n}catch{return{status:`error`}}}},N=e(t()),le=e(r(),1),P=n(),F=[`automation-detail`],I=[`automation-runs`];function ue(e){let{id:t,enabled:n=!0}=e,r=f();return o({queryKey:[...F,t,r.backend.id,r.orgId],queryFn:()=>M.getAutomation(t),staleTime:300*1e3,enabled:!!t&&n})}function de(e){let{id:t,limit:n=20,offset:r=0,enabled:i=!0}=e,a=f();return o({queryKey:[...I,t,{limit:n,offset:r},a.backend.id,a.orgId],queryFn:()=>M.getAutomationRuns(t,n,r),staleTime:60*1e3,enabled:!!t&&i,refetchInterval:e=>{let t=e.state.data;return t&&t.runs.some(e=>e.status===E.PENDING||e.status===E.RUNNING)?3e3:!1}})}var L=[`automations`];function fe(e={}){let{limit:t=50,offset:n=0,enabled:r=!0}=e,i=f();return o({queryKey:[...L,{limit:t,offset:n},i.backend.id,i.orgId],queryFn:()=>M.getAutomations(t,n),staleTime:0,enabled:r})}function pe(){let e=i(),t=f(),{trackAutomationDeactivated:n}=S();return a({mutationFn:({id:e,enabled:t})=>M.toggleAutomation(e,t),onSuccess:(r,i)=>{e.invalidateQueries({queryKey:L}),e.invalidateQueries({queryKey:F}),i.enabled||n({backendKind:t.backend.kind})}})}function R(){let e=i(),t=f(),{trackAutomationImported:n}=S();return a({mutationFn:e=>M.createAutomation({...e,enabled:!1}),onSuccess:()=>{e.invalidateQueries({queryKey:L}),n({backendKind:t.backend.kind})}})}function z(){let e=i(),t=f(),{trackAutomationEdited:n}=S();return a({mutationFn:({id:e,body:t})=>M.updateAutomation(e,t),onSuccess:()=>{e.invalidateQueries({queryKey:L}),e.invalidateQueries({queryKey:F}),n({backendKind:t.backend.kind})}})}function B(){let e=i(),t=f(),{trackAutomationDeleted:n}=S();return a({mutationFn:e=>M.deleteAutomation(e),onSuccess:()=>{e.invalidateQueries({queryKey:L}),n({backendKind:t.backend.kind})}})}function me(){let e=i(),t=f(),{trackAutomationExecuted:n}=S();return a({mutationFn:e=>M.dispatchAutomation(e),onSuccess:(r,i)=>{e.invalidateQueries({queryKey:L}),e.invalidateQueries({queryKey:F}),e.invalidateQueries({queryKey:[...I,i]}),n({backendKind:t.backend.kind})}})}var he=[`automation-health`];function ge(){let e=f();return o({queryKey:[...he,e.backend.id,e.orgId],queryFn:()=>M.checkHealth(),staleTime:30*1e3,retry:!1})}var _e=e=>(0,P.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`currentColor`,viewBox:`0 0 20 20`,...e,children:(0,P.jsx)(`path`,{d:`M10 6a2 2 0 110-4 2 2 0 010 4zm0 6a2 2 0 110-4 2 2 0 010 4zm0 6a2 2 0 110-4 2 2 0 010 4z`})}),V=p(`inline-flex size-8 shrink-0 cursor-pointer items-center justify-center rounded-md border-0 bg-transparent text-muted hover:bg-interactive-hover hover:text-white focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:bg-transparent disabled:hover:text-muted`,b),ve=p(`inline-flex h-8 shrink-0 cursor-pointer items-center gap-1.5 rounded-md border-0 bg-transparent px-2 text-xs text-muted hover:bg-interactive-hover hover:text-white focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:bg-transparent disabled:hover:text-muted`,b);function ye({icon:e,label:t}){return(0,P.jsxs)(`span`,{className:`flex min-w-0 w-full items-center gap-2`,children:[(0,P.jsx)(`span`,{className:p(`[&_svg]:size-4`,x),"aria-hidden":!0,children:e}),(0,P.jsx)(`span`,{className:`min-w-0 flex-1 truncate`,children:t})]})}function be({items:e}){let{t}=s(`openhands`),[n,r]=(0,N.useState)(!1),[i,a]=(0,N.useState)(),o=(0,N.useRef)(null),l=(0,N.useRef)(null);(0,N.useLayoutEffect)(()=>{if(!n||!o.current)return;let e=()=>{let e=o.current?.getBoundingClientRect();e&&a({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)}},[n]),(0,N.useEffect)(()=>{if(!n)return;let e=e=>{let t=e.target;o.current?.contains(t)||l.current?.contains(t)||r(!1)},t=e=>{e.key===`Escape`&&r(!1)};return document.addEventListener(`mousedown`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`mousedown`,e),document.removeEventListener(`keydown`,t)}},[n]);let u=n&&i?(0,P.jsx)(C,{ref:l,theme:`popover`,className:`min-w-[10rem]`,children:e.map(e=>(0,P.jsx)(`li`,{children:(0,P.jsx)(ae,{onClick:t=>{t.stopPropagation(),e.onClick(),r(!1)},isDisabled:e.disabled,className:`group`,children:(0,P.jsx)(ye,{icon:e.icon,label:e.label})})},e.label))}):null;return(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(`button`,{ref:o,type:`button`,onClick:e=>{e.stopPropagation(),r(e=>!e)},className:V,"aria-label":t(c.AUTOMATIONS$ACTIONS_MENU),"aria-expanded":n,"aria-haspopup":`menu`,children:(0,P.jsx)(_e,{className:`size-4`})}),n&&i&&typeof document<`u`?le.createPortal((0,P.jsx)(`div`,{style:i,children:u}),document.body):null]})}function xe(e){return!0}var Se=e=>(0,P.jsxs)(`svg`,{width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,...e,children:[(0,P.jsx)(`g`,{clipPath:`url(#clip0_8467_30872)`,children:(0,P.jsx)(`path`,{d:`M6.26693 21.4874L6.25583 21.4951L6.24514 21.5033C5.95991 21.7227 5.5 21.5308 5.5 21.0996V2.89961C5.5 2.4684 5.95991 2.2765 6.24514 2.49592L6.25634 2.50452L6.26799 2.51249L19.518 11.5625L19.518 11.5625L19.5226 11.5656C19.8258 11.7677 19.8258 12.1815 19.5226 12.3836L19.5226 12.3835L19.5169 12.3874L6.26693 21.4874Z`,fill:`currentColor`,stroke:`currentColor`})}),(0,P.jsx)(`defs`,{children:(0,P.jsx)(`clipPath`,{id:`clip0_8467_30872`,children:(0,P.jsx)(`rect`,{width:24,height:24,fill:`white`})})})]}),H=e=>(0,P.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,stroke:`currentColor`,strokeWidth:2,...e,children:(0,P.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z`})}),Ce=e=>(0,P.jsx)(`svg`,{viewBox:`0 0 18 18`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`,...e,children:(0,P.jsx)(`path`,{fillRule:`evenodd`,clipRule:`evenodd`,d:`M2.4375 9C2.4375 5.37563 5.37563 2.4375 9 2.4375C12.6244 2.4375 15.5625 5.37563 15.5625 9C15.5625 12.6244 12.6244 15.5625 9 15.5625C5.37563 15.5625 2.4375 12.6244 2.4375 9ZM4.13812 6.5625C4.81317 5.21867 6.02897 4.19333 7.49996 3.77204C7.15155 4.17641 6.85182 4.65395 6.60713 5.17892C6.40828 5.60556 6.24263 6.06975 6.11494 6.5625H4.13812ZM3.72196 7.6875C3.61778 8.10783 3.5625 8.54746 3.5625 9C3.5625 9.45254 3.61778 9.89217 3.72196 10.3125H5.89738C5.84161 9.88758 5.8125 9.44852 5.8125 8.99998C5.8125 8.55142 5.84161 8.11239 5.89737 7.6875H3.72196ZM7.0333 7.6875C6.97087 8.10689 6.9375 8.54634 6.9375 8.99998C6.9375 9.45367 6.97087 9.89313 7.0333 10.3125H10.9667C11.0291 9.89311 11.0625 9.45367 11.0625 9.00002C11.0625 8.54637 11.0291 8.1069 10.9667 7.6875H7.0333ZM12.1026 7.6875C12.1584 8.1124 12.1875 8.55145 12.1875 9.00002C12.1875 9.44858 12.1584 9.88762 12.1026 10.3125H14.278C14.3822 9.89217 14.4375 9.45254 14.4375 9C14.4375 8.54746 14.3822 8.10783 14.278 7.6875H12.1026ZM13.8619 6.5625H11.885C11.7574 6.06976 11.5917 5.6056 11.3929 5.17897C11.1482 4.65397 10.8484 4.1764 10.5 3.77203C11.971 4.19331 13.1868 5.21866 13.8619 6.5625ZM10.7171 6.5625H7.28293C7.38007 6.23971 7.49559 5.93571 7.62681 5.65419C7.99835 4.85708 8.48101 4.26914 8.99997 3.92442C9.51895 4.26913 10.0016 4.8571 10.3732 5.65424C10.5044 5.93575 10.6199 6.23973 10.7171 6.5625ZM4.13812 11.4375H6.11496C6.24963 11.9572 6.42655 12.4452 6.64015 12.8909C6.87835 13.3879 7.16685 13.8413 7.50006 14.228C6.02902 13.8067 4.81318 12.7814 4.13812 11.4375ZM10.7171 11.4375H7.28295C7.3869 11.7829 7.51191 12.1068 7.65465 12.4047C8.02305 13.1733 8.49456 13.7398 9.00007 14.0756C9.51902 13.7308 10.0017 13.1429 10.3732 12.3458C10.5044 12.0643 10.6199 11.7603 10.7171 11.4375ZM11.3929 12.8211C11.5917 12.3944 11.7574 11.9303 11.8851 11.4375H13.8619C13.1868 12.7813 11.971 13.8067 10.5 14.228C10.8485 13.8236 11.1482 13.346 11.3929 12.8211Z`,fill:`currentColor`})}),we=e=>(0,P.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,stroke:`currentColor`,strokeWidth:2,...e,children:(0,P.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M9.813 15.904L9 18.75l-.813-2.846a4.5 4.5 0 00-3.09-3.09L2.25 12l2.846-.813a4.5 4.5 0 003.09-3.09L9 5.25l.813 2.846a4.5 4.5 0 003.09 3.09L15.75 12l-2.846.813a4.5 4.5 0 00-3.09 3.09zM18.259 8.715L18 9.75l-.259-1.035a3.375 3.375 0 00-2.455-2.456L14.25 6l1.036-.259a3.375 3.375 0 002.455-2.456L18 2.25l.259 1.035a3.375 3.375 0 002.455 2.456L21.75 6l-1.036.259a3.375 3.375 0 00-2.455 2.456z`})}),Te=/^(\d+)$/;function U(e,t,n){let r=e.match(Te);if(!r)return null;let i=Number(r[1]);return Number.isNaN(i)||i<t||i>n?null:i}function Ee(e){let t=(e??``).trim();if(!t)return{kind:`custom`,raw:``};let n=t.split(/\s+/);if(n.length!==5)return{kind:`custom`,raw:t};let[r,i,a,o,s]=n,c=U(r,0,59),l=U(i,0,23);if(c===null||l===null)return{kind:`custom`,raw:t};if(a!==`*`||o!==`*`)return{kind:`custom`,raw:t,hour:l,minute:c};if(s===`*`||s===`0-6`)return{kind:`daily`,hour:l,minute:c};if(s===`1-5`)return{kind:`weekdays`,hour:l,minute:c};let u=U(s,0,6);return u===null?{kind:`custom`,raw:t,hour:l,minute:c}:{kind:`weekly`,hour:l,minute:c,weekday:u}}function De(e){let{kind:t,hour:n,minute:r,weekday:i}=e;switch(t){case`daily`:return`${r} ${n} * * *`;case`weekdays`:return`${r} ${n} * * 1-5`;case`weekly`:return`${r} ${n} * * ${i??1}`;default:return t}}function W(e,t){return`${String(e).padStart(2,`0`)}:${String(t).padStart(2,`0`)}`}function G(e){let t=e.match(/^(\d{1,2}):(\d{2})$/);if(!t)return null;let n=Number(t[1]),r=Number(t[2]);return Number.isNaN(n)||Number.isNaN(r)||n<0||n>23||r<0||r>59?null:{hour:n,minute:r}}function K(e){return e?Array.isArray(e)?e.join(`, `):e:`—`}var Oe=e=>(0,P.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,stroke:`currentColor`,strokeWidth:2,...e,children:(0,P.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M5.636 5.636a9 9 0 1012.728 0M12 3v9`})}),ke=e=>(0,P.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,stroke:`currentColor`,strokeWidth:2,...e,children:(0,P.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16`})}),q=e=>(0,P.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,stroke:`currentColor`,strokeWidth:1.5,...e,children:(0,P.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M12 9v3.75m9-.75a9 9 0 11-18 0 9 9 0 0118 0zm-9 3.75h.008v.008H12v-.008z`})});function Ae({onRetry:e}){let{t}=s(`openhands`);return(0,P.jsxs)(`div`,{className:`flex flex-col items-center justify-center py-20`,children:[(0,P.jsx)(q,{className:`size-12 text-danger`}),(0,P.jsx)(`p`,{className:`mt-4 text-sm text-muted`,children:t(c.AUTOMATIONS$ERROR_TITLE)}),(0,P.jsx)(`button`,{type:`button`,onClick:e,className:`mt-4 rounded-lg border border-[var(--oh-border)] px-4 py-2 text-sm text-white hover:bg-surface-raised`,children:t(c.AUTOMATIONS$ERROR_RETRY)})]})}function je({onRetry:e}){let{t}=s(`openhands`);return(0,P.jsxs)(`div`,{className:`flex flex-col items-center justify-center py-20 px-4`,children:[(0,P.jsx)(q,{className:`size-12 text-[var(--oh-warning)]`}),(0,P.jsx)(`h2`,{className:`mt-4 text-lg font-medium text-content`,children:t(c.AUTOMATIONS$BACKEND_UNAVAILABLE_TITLE)}),(0,P.jsx)(`p`,{className:`mt-2 text-sm text-muted text-center max-w-md`,children:t(c.AUTOMATIONS$BACKEND_UNAVAILABLE_MESSAGE)}),(0,P.jsx)(y,{type:`button`,variant:`secondary`,className:`mt-6`,onClick:e,children:t(c.AUTOMATIONS$BACKEND_UNAVAILABLE_RETRY)})]})}function Me({automationName:e,isOpen:t,onConfirm:n,onCancel:r}){let{t:i}=s(`openhands`);return t?(0,P.jsxs)(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center`,children:[(0,P.jsx)(`div`,{className:`absolute inset-0 bg-black/60`,onClick:r,onKeyDown:e=>{e.key===`Escape`&&r()},role:`presentation`}),(0,P.jsxs)(`div`,{className:`relative w-full max-w-sm rounded-xl border border-[var(--oh-border)] bg-[var(--oh-surface)] p-6`,children:[(0,P.jsx)(`button`,{type:`button`,onClick:r,className:`absolute right-4 top-4 text-muted hover:text-foreground`,"aria-label":i(c.BUTTON$CLOSE),children:(0,P.jsx)(T,{className:`size-5`})}),(0,P.jsx)(`h2`,{className:v,children:i(c.AUTOMATIONS$DELETE_CONFIRM_TITLE)}),(0,P.jsx)(`p`,{className:`mt-2 text-sm text-muted`,children:i(c.AUTOMATIONS$DELETE_CONFIRM_MESSAGE,{name:e})}),(0,P.jsxs)(`div`,{className:`mt-6 flex justify-end gap-3`,children:[(0,P.jsx)(`button`,{type:`button`,onClick:r,className:`rounded-lg border border-[var(--oh-border)] px-4 py-2 text-sm text-white hover:bg-surface-raised`,children:i(c.AUTOMATIONS$CANCEL)}),(0,P.jsx)(`button`,{type:`button`,onClick:n,className:`rounded-lg bg-danger px-4 py-2 text-sm text-white hover:bg-danger/80`,children:i(c.AUTOMATIONS$DELETE)})]})]})]}):null}var J=`__active__`,Ne=[c.AUTOMATIONS$WEEKDAY_SUN,c.AUTOMATIONS$WEEKDAY_MON,c.AUTOMATIONS$WEEKDAY_TUE,c.AUTOMATIONS$WEEKDAY_WED,c.AUTOMATIONS$WEEKDAY_THU,c.AUTOMATIONS$WEEKDAY_FRI,c.AUTOMATIONS$WEEKDAY_SAT];function Pe(e){if(e.trigger.type===`event`)return{name:e.name,prompt:e.prompt??``,model:e.model??``,frequency:`custom`,weekday:1,timeOfDay:``,isCustomSchedule:!0,rawSchedule:``};let t=Ee(e.trigger.schedule);return t.kind===`custom`?{name:e.name,prompt:e.prompt??``,model:e.model??``,frequency:`custom`,weekday:1,timeOfDay:t.hour!==void 0&&t.minute!==void 0?W(t.hour,t.minute):``,isCustomSchedule:!0,rawSchedule:t.raw}:{name:e.name,prompt:e.prompt??``,model:e.model??``,frequency:t.kind,weekday:t.kind===`weekly`?t.weekday??1:1,timeOfDay:W(t.hour,t.minute),isCustomSchedule:!1,rawSchedule:e.trigger.schedule??``}}function Fe({automation:e,isOpen:t,onClose:n}){let{t:r}=s(`openhands`),i=z(),{data:a,isLoading:o}=ie(),l=a?.profiles??[],f=[{key:J,label:r(c.COMMON$ACTIVE_PROFILE)},...l.map(e=>({key:e.name,label:e.name}))],m=(0,N.useMemo)(()=>Pe(e),[e]),[h,g]=(0,N.useState)(m),[_,b]=(0,N.useState)(null);if((0,N.useEffect)(()=>{t&&(g(m),b(null))},[t,m]),!t)return null;let x=[{key:`daily`,label:r(c.AUTOMATIONS$FREQUENCY_DAILY)},{key:`weekdays`,label:r(c.AUTOMATIONS$FREQUENCY_WEEKDAYS)},{key:`weekly`,label:r(c.AUTOMATIONS$FREQUENCY_WEEKLY)},...h.isCustomSchedule?[{key:`custom`,label:r(c.AUTOMATIONS$FREQUENCY_CUSTOM)}]:[]],S=Ne.map((e,t)=>({key:String(t),label:r(e)})),C=!h.isCustomSchedule||G(h.timeOfDay)!==null||h.timeOfDay===``;return(0,P.jsxs)(`div`,{className:`fixed inset-0 z-50 flex items-center justify-center`,children:[(0,P.jsx)(`div`,{className:`absolute inset-0 bg-black/60`,onClick:n,onKeyDown:e=>{e.key===`Escape`&&n()},role:`presentation`}),(0,P.jsxs)(`div`,{className:`relative w-full max-w-md rounded-xl border border-[var(--oh-border)] bg-[var(--oh-surface)] p-6`,children:[(0,P.jsx)(`button`,{type:`button`,onClick:n,className:`absolute right-4 top-4 text-muted hover:text-foreground`,"aria-label":r(c.AUTOMATIONS$CANCEL),children:(0,P.jsx)(T,{className:`size-5`})}),(0,P.jsx)(`h2`,{className:v,children:r(c.AUTOMATIONS$EDIT_TITLE)}),(0,P.jsxs)(`form`,{onSubmit:t=>{t.preventDefault();let a=h.name.trim();if(!a){b(r(c.AUTOMATIONS$NAME_REQUIRED));return}b(null);let o={};a!==e.name&&(o.name=a);let s=h.prompt.trim();s!==(e.prompt??``).trim()&&(o.prompt=s.length===0?null:s);let l=h.model.trim();if(l!==(e.model??``)&&(o.model=l===``?null:l),!h.isCustomSchedule&&h.frequency!==`custom`){let t=G(h.timeOfDay);if(t){let n=De({kind:h.frequency,hour:t.hour,minute:t.minute,weekday:h.frequency===`weekly`?h.weekday:void 0});n!==e.trigger.schedule&&(o.trigger={...e.trigger,schedule:n})}}if(Object.keys(o).length===0){n();return}i.mutate({id:e.id,body:o},{onSuccess:()=>{ee(r(c.AUTOMATIONS$EDIT_SUCCESS)),n()},onError:e=>{d(u(e)?e.response?.data?.message||e.message||r(c.AUTOMATIONS$EDIT_ERROR):e.message||r(c.AUTOMATIONS$EDIT_ERROR))}})},className:`mt-4 flex flex-col gap-4`,"aria-label":r(c.AUTOMATIONS$EDIT_TITLE),children:[(0,P.jsx)(re,{testId:`edit-automation-name`,name:`name`,type:`text`,label:r(c.AUTOMATIONS$NAME),value:h.name,onChange:e=>g(t=>({...t,name:e})),error:_??void 0,showRequiredTag:!0}),(0,P.jsxs)(`label`,{className:`flex flex-col gap-2.5 w-full min-w-0`,children:[(0,P.jsx)(`span`,{className:`text-sm`,children:r(c.AUTOMATIONS$PROMPT)}),(0,P.jsx)(`textarea`,{"data-testid":`edit-automation-prompt`,name:`prompt`,value:h.prompt,onChange:e=>g(t=>({...t,prompt:e.target.value})),rows:4,className:p(ne,`placeholder:italic`)}),(0,P.jsx)(`span`,{className:`text-xs text-muted`,children:r(c.AUTOMATIONS$EDIT_PROMPT_HINT)})]}),(o||l.length>0)&&(0,P.jsx)(w,{testId:`edit-automation-model`,name:`model`,label:r(c.AUTOMATIONS$DETAIL$MODEL),items:f,selectedKey:h.model||J,isLoading:o,placeholder:r(c.COMMON$ACTIVE_PROFILE),onSelectionChange:e=>g(t=>({...t,model:e&&e!==J?String(e):``}))}),e.trigger.type===`event`?(0,P.jsxs)(`div`,{className:`flex flex-col gap-3 rounded-lg bg-[var(--oh-surface-raised)] p-3`,children:[(0,P.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,P.jsx)(`span`,{className:`text-xs font-medium text-muted`,children:r(c.AUTOMATIONS$DETAIL$TRIGGER)}),(0,P.jsx)(`span`,{className:`text-sm text-content`,children:r(c.AUTOMATIONS$DETAIL$TRIGGER_EVENT)})]}),e.trigger.source&&(0,P.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,P.jsx)(`span`,{className:`text-xs font-medium text-muted`,children:r(c.AUTOMATIONS$DETAIL$EVENT_SOURCE)}),(0,P.jsx)(`span`,{className:`text-sm text-content`,children:e.trigger.source})]}),e.trigger.on&&(0,P.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,P.jsx)(`span`,{className:`text-xs font-medium text-muted`,children:r(c.AUTOMATIONS$DETAIL$EVENT_TYPE)}),(0,P.jsx)(`code`,{className:`text-xs font-mono text-content`,children:K(e.trigger.on)})]}),e.trigger.filter&&(0,P.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,P.jsx)(`span`,{className:`text-xs font-medium text-muted`,children:r(c.AUTOMATIONS$DETAIL$EVENT_FILTER)}),(0,P.jsx)(`code`,{className:`text-xs font-mono text-content break-all`,children:e.trigger.filter})]})]}):(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(w,{testId:`edit-automation-frequency`,name:`frequency`,label:r(c.AUTOMATIONS$FREQUENCY),items:x,selectedKey:h.frequency,isDisabled:h.isCustomSchedule,onSelectionChange:e=>{!e||h.isCustomSchedule||g(t=>({...t,frequency:e}))}}),h.frequency===`weekly`&&!h.isCustomSchedule&&(0,P.jsx)(w,{testId:`edit-automation-weekday`,name:`weekday`,label:r(c.AUTOMATIONS$WEEKDAY),items:S,selectedKey:String(h.weekday),onSelectionChange:e=>{e!==null&&g(t=>({...t,weekday:Number(e)}))}}),(0,P.jsxs)(`label`,{className:`flex flex-col gap-2.5 w-full min-w-0`,children:[(0,P.jsx)(`span`,{className:`text-sm`,children:r(c.AUTOMATIONS$TIME_OF_DAY)}),(0,P.jsx)(`input`,{"data-testid":`edit-automation-time`,name:`timeOfDay`,type:`time`,value:h.timeOfDay,onChange:e=>g(t=>({...t,timeOfDay:e.target.value})),disabled:h.isCustomSchedule&&!C,className:p(te,`disabled:bg-[var(--oh-surface-raised)]`)}),e.timezone&&(0,P.jsxs)(`span`,{className:`text-xs text-muted`,children:[r(c.AUTOMATIONS$TIMEZONE),`: `,e.timezone]})]}),h.isCustomSchedule&&(0,P.jsxs)(`p`,{className:`text-xs text-muted`,"data-testid":`custom-schedule-hint`,children:[r(c.AUTOMATIONS$CUSTOM_SCHEDULE_HINT),h.rawSchedule&&(0,P.jsxs)(P.Fragment,{children:[` `,(0,P.jsx)(`code`,{className:`text-xs text-content`,children:h.rawSchedule})]})]})]}),(0,P.jsxs)(`div`,{className:`mt-2 flex justify-end gap-3`,children:[(0,P.jsx)(y,{testId:`edit-automation-cancel`,type:`button`,variant:`secondary`,onClick:n,isDisabled:i.isPending,children:r(c.AUTOMATIONS$CANCEL)}),(0,P.jsx)(y,{testId:`edit-automation-save`,type:`submit`,variant:`primary`,isDisabled:i.isPending,"aria-busy":i.isPending,children:i.isPending?r(c.AUTOMATIONS$SAVING):r(c.AUTOMATIONS$SAVE)})]})]})]})]})}var Y=new Set([`cron`,`schedule`,`event`]),X=class extends Error{issues;constructor(e){super(e.join(`
|
|
2
|
-
`)),this.name=`AutomationFileValidationError`,this.issues=e}};function Z(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Q(e,t,n,r){let i=e[t];if(typeof i!=`string`||i.trim().length===0){r.push(`${n}: expected a non-empty string`);return}return i}function $(e,t,n,r){let i=e[t];if(i!==void 0){if(typeof i!=`string`){r.push(`${n}: expected a string`);return}return i}}function Ie(e,t){if(!Z(e)){t.push(`spec.trigger: expected an object`);return}let n=Q(e,`type`,`spec.trigger.type`,t);n&&!Y.has(n)&&t.push(`spec.trigger.type: expected one of "cron", "schedule", or "event"`);let r=$(e,`schedule`,`spec.trigger.schedule`,t),i=$(e,`schedule_human`,`spec.trigger.schedule_human`,t),a=$(e,`timezone`,`spec.trigger.timezone`,t),o=$(e,`source`,`spec.trigger.source`,t),s=$(e,`filter`,`spec.trigger.filter`,t),c;if(e.on!==void 0&&(typeof e.on==`string`||Array.isArray(e.on)&&e.on.length>0&&e.on.every(e=>typeof e==`string`&&e.trim().length>0)?c=e.on:t.push(`spec.trigger.on: expected a string or a non-empty array of strings`)),(n===`cron`||n===`schedule`)&&!r?.trim()&&t.push(`spec.trigger.schedule: required for a scheduled trigger`),n===`event`&&(o?.trim()||t.push(`spec.trigger.source: required for an event trigger`),(c===void 0||typeof c==`string`&&c.trim().length===0)&&t.push(`spec.trigger.on: required for an event trigger`)),!(!n||!Y.has(n)))return{type:n,...r!==void 0&&{schedule:r},...i!==void 0&&{schedule_human:i},...a!==void 0&&{timezone:a},...o!==void 0&&{source:o},...c!==void 0&&{on:c},...s!==void 0&&{filter:s}}}function Le(e){let t=e.timezone??e.trigger.timezone;return{version:1,kind:`automation`,spec:{name:e.name,trigger:{...e.trigger},enabled:e.enabled,prompt:e.prompt,...e.repository!==void 0&&{repository:e.repository},...e.model!==void 0&&{model:e.model},...e.branch!==void 0&&{branch:e.branch},...e.plugins!==void 0&&{plugins:[...e.plugins]},...e.notification!==void 0&&{notification:e.notification},...t!==void 0&&{timezone:t}}}}function Re(e){return`${e.name.trim().toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``)||e.id}.automation.json`}function ze(e){let t=[];if(!Z(e))throw new X([`file: expected a JSON object`]);if(e.version!==1&&t.push(`version: expected 1`),e.kind!==`automation`&&t.push(`kind: expected "automation"`),!Z(e.spec))throw t.push(`spec: expected an object`),new X(t);let n=Q(e.spec,`name`,`spec.name`,t),r=Q(e.spec,`prompt`,`spec.prompt`,t),i=Ie(e.spec.trigger,t),a=e.spec.enabled;typeof a!=`boolean`&&t.push(`spec.enabled: expected a boolean`);let o=$(e.spec,`repository`,`spec.repository`,t),s=$(e.spec,`branch`,`spec.branch`,t),c=$(e.spec,`notification`,`spec.notification`,t),l=$(e.spec,`timezone`,`spec.timezone`,t),u;e.spec.model===null||e.spec.model===void 0||typeof e.spec.model==`string`&&e.spec.model.trim().length>0?u=e.spec.model:t.push(`spec.model: expected a non-empty string or null`);let d;if(e.spec.plugins!==void 0&&(Array.isArray(e.spec.plugins)&&e.spec.plugins.every(e=>typeof e==`string`&&e.trim().length>0)?d=[...e.spec.plugins]:t.push(`spec.plugins: expected an array of non-empty strings`)),t.length>0||!n||!r||!i)throw new X(t);return{name:n,prompt:r,trigger:i,enabled:a,...o!==void 0&&{repository:o},...u!==void 0&&{model:u},...s!==void 0&&{branch:s},...d!==void 0&&{plugins:d},...c!==void 0&&{notification:c},...l!==void 0&&{timezone:l}}}export{me as C,de as D,ue as E,M as O,B as S,pe as T,be as _,Me as a,ge as b,q as c,K as d,we as f,xe as g,Se as h,Fe as i,ke as l,H as m,ze as n,je as o,Ce as p,Le as r,Ae as s,Re as t,Oe as u,V as v,R as w,fe as x,ve as y};
|
|
@@ -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-Ch-OVWEA.js";import{t as o}from"./useTranslation-CDRCKC9-.js";import{t as s}from"./declaration-gq8V5eTU.js";import{y as c}from"./vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~lf310vj7-CSVPGId3.js";import{A as l,M as u,j as d,n as f}from"./active-backend-context-hxq31W25.js";import{t as p}from"./createLucideIcon-CVAsW2Yo.js";import{t as m}from"./check-Bvi71siz.js";import{i as h,t as g}from"./utils-D3U3rlqr.js";import{t as _}from"./modal-backdrop-zVwfOJZr.js";import{n as v}from"./modal-classes-Cf-4tbHz.js";import{t as y}from"./brand-button-vMVuyDXu.js";import{n as b}from"./navigation-context-DPs2G0X8.js";import{t as x}from"./styled-tooltip-CgX2oRaK.js";import{u as S}from"./dropdown-classes-DJSXeLqc.js";import{t as C}from"./modal-close-button-B6CfxxJj.js";import{t as ee}from"./use-tracking-BIXzagSI.js";import{n as w,t as te}from"./recommended-automations-launcher-CTcGTl4d.js";import{n as T,t as E}from"./context-menu-list-item-BD5_EaKN.js";import{t as D}from"./u-edit-DJ90xc8Z.js";import{t as O}from"./folder-mMWFvaw0.js";import{t as k}from"./search-BsjCEFNf.js";import{a as A,i as j,n as M,o as N,r as ne,t as P}from"./extension-module-card-classes-9V3J9J_b.js";import{n as F}from"./skill-card-pill-row-eTIkE4nz.js";import{n as I,t as re}from"./use-launch-skill-in-chat-BnoDgvAy.js";import{C as ie,S as ae,T as oe,_ as L,a as se,b as ce,d as R,f as z,g as B,h as V,i as le,l as H,m as U,n as ue,o as de,p as W,r as fe,s as pe,t as me,u as G,v as K,w as he,x as ge,y as q}from"./automation-export-BPcgLqPD.js";var _e=p(`download`,[[`path`,{d:`M12 15V3`,key:`m9g1x1`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}],[`path`,{d:`m7 10 5 5 5-5`,key:`brsn70`}]]),ve=p(`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`}]]),ye=p(`file-up`,[[`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:`M12 12v6`,key:`3ahymv`}],[`path`,{d:`m15 15-3-3-3 3`,key:`15xj92`}]]),be=p(`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`}]]),xe=p(`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`}]]),J=e(t(),1),Y=n();function Se({value:e,onChange:t,className:n}){let{t:r}=o(`openhands`);return(0,Y.jsxs)(`div`,{className:g(`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,Y.jsx)(k,{className:`ml-3 size-4 shrink-0 text-tertiary-alt`,"aria-hidden":!0}),(0,Y.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 X(e,t){let n=[];if(e.repository&&n.push({id:`repository`,node:(0,Y.jsxs)(`span`,{className:g(j,`gap-1`),children:[(0,Y.jsx)(O,{className:`size-3 shrink-0`}),e.repository]})}),e.trigger.type===`event`){let t=[e.trigger.on?R(e.trigger.on):``,e.trigger.source?`(${e.trigger.source})`:``].filter(Boolean).join(` `);n.push({id:`event-trigger`,node:(0,Y.jsxs)(`span`,{className:g(j,`gap-1`),children:[(0,Y.jsx)(W,{className:`size-3 shrink-0`}),t]})})}else n.push({id:`schedule`,node:(0,Y.jsxs)(`span`,{className:g(j,`gap-1`),children:[(0,Y.jsx)(U,{className:`size-3 shrink-0`}),t]})});return e.model&&n.push({id:`model`,node:(0,Y.jsxs)(`span`,{className:g(j,`gap-1`),children:[(0,Y.jsx)(z,{className:`size-3 shrink-0`}),e.model]})}),n}function Ce({automation:e,t,canManage:n,onRunNow:r,isRunPending:i,onView:a,onExport:o,onEdit:c,onToggle:l,onDelete:u}){return[...n?[{label:t(s.AUTOMATIONS$RUN_NOW),icon:(0,Y.jsx)(V,{className:`size-4`}),onClick:()=>r(e.id),disabled:i||!e.enabled}]:[],{label:t(s.COMMON$VIEW),icon:(0,Y.jsx)(ve,{className:`size-4`,"aria-hidden":!0}),onClick:a},{label:t(s.AUTOMATIONS$EXPORT),icon:(0,Y.jsx)(_e,{className:`size-4`,"aria-hidden":!0}),onClick:()=>o(e)},...n&&c?[{label:t(s.AUTOMATIONS$EDIT),icon:(0,Y.jsx)(D,{className:`size-4`}),onClick:()=>c(e.id)}]:[],...n?[{label:e.enabled?t(s.AUTOMATIONS$TURN_OFF):t(s.AUTOMATIONS$TURN_ON),icon:(0,Y.jsx)(G,{className:`size-4`}),onClick:()=>l(e.id,e.enabled)},{label:t(s.AUTOMATIONS$DELETE),icon:(0,Y.jsx)(H,{className:`size-4`}),onClick:()=>u(e.id)}]:[]]}function we({automation:e,onToggle:t,onRunNow:n,isRunPending:r=!1,onDelete:i,onExport:a,onEdit:c}){let{navigate:l}=b(),{t:u}=o(`openhands`),d=B(`manage_automations`),f=e.trigger.schedule_human||e.trigger.type,p=(0,J.useMemo)(()=>X(e,f),[e,f]),m=()=>{l?.(`/automations/${e.id}`)},h=Ce({automation:e,t:u,canManage:d,onRunNow:n,isRunPending:r,onView:m,onExport:a,onEdit:c,onToggle:t,onDelete:i}),_=()=>{m()};return(0,Y.jsxs)(`div`,{role:`link`,tabIndex:0,"data-testid":`automation-card-${e.id}`,onClick:_,onKeyDown:e=>{e.key===`Enter`&&_()},className:g(`flex min-w-0 flex-col gap-3 overflow-hidden p-4 text-left`,A,ne),children:[(0,Y.jsxs)(`header`,{className:`flex items-start justify-between gap-3`,children:[(0,Y.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-1.5`,children:[(0,Y.jsxs)(`h3`,{className:`flex items-center gap-2 truncate text-sm font-semibold text-white`,children:[e.trigger.type===`event`?(0,Y.jsx)(W,{className:`size-4 shrink-0 text-muted`}):(0,Y.jsx)(U,{className:`size-4 shrink-0 text-muted`}),(0,Y.jsx)(`span`,{className:`truncate`,children:e.name})]}),e.prompt?(0,Y.jsx)(`p`,{className:`line-clamp-2 text-xs leading-relaxed text-tertiary-light`,children:e.prompt}):null]}),(0,Y.jsxs)(`div`,{className:`flex shrink-0 items-center gap-0.5`,children:[d?(0,Y.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:q,children:[(0,Y.jsx)(V,{className:`size-3.5 shrink-0`,"aria-hidden":!0}),u(s.AUTOMATIONS$RUN_NOW)]}):null,(0,Y.jsx)(L,{items:h})]})]}),p.length>0?(0,Y.jsx)(F,{pills:p,testId:`automation-pills-${e.id}`}):null]})}var Te=`overflow-hidden rounded-md border border-[var(--oh-border)] bg-base-secondary`,Ee=[`h-11`,`border-t border-[var(--oh-border)] transition-colors`].join(` `),De=`hover:bg-interactive-hover-low outline-none focus:outline-none focus-visible:outline-none focus-visible:bg-interactive-hover-low`,Oe=`px-3 align-middle`,ke=[Ee,De,`cursor-pointer`].join(` `),Ae=`openhands-automations-view`;function je(){return typeof window>`u`?`grid`:window.localStorage.getItem(`openhands-automations-view`)===`list`?`list`:`grid`}function Me(e){window.localStorage.setItem(Ae,e)}function Ne({automation:e,onToggle:t,onRunNow:n,isRunPending:r=!1,onDelete:i,onExport:a,onEdit:c}){let{navigate:l}=b(),{t:u}=o(`openhands`),d=B(`manage_automations`),f=e.trigger.schedule_human||e.trigger.type,p=(0,J.useMemo)(()=>X(e,f),[e,f]),m=()=>{l?.(`/automations/${e.id}`)},h=Ce({automation:e,t:u,canManage:d,onRunNow:n,isRunPending:r,onView:m,onExport:a,onEdit:c,onToggle:t,onDelete:i}),_=()=>{m()};return(0,Y.jsxs)(`tr`,{"data-testid":`automation-list-row-${e.id}`,onClick:_,onKeyDown:e=>{e.key===`Enter`&&_()},tabIndex:0,className:g(ke,`cursor-pointer`),children:[(0,Y.jsx)(`td`,{className:Oe,children:(0,Y.jsxs)(`div`,{className:`flex min-w-0 items-center gap-1.5`,children:[e.trigger.type===`event`?(0,Y.jsx)(W,{className:`size-4 shrink-0 text-muted`}):(0,Y.jsx)(U,{className:`size-4 shrink-0 text-muted`}),(0,Y.jsx)(`span`,{className:`max-w-[40%] shrink-0 truncate text-sm font-medium text-white`,title:e.name,children:e.name}),p.length>0?(0,Y.jsx)(`div`,{className:`min-w-0 flex-1`,children:(0,Y.jsx)(F,{pills:p,testId:`automation-pills-${e.id}`})}):null]})}),(0,Y.jsx)(`td`,{className:g(`w-0 whitespace-nowrap`,Oe),children:(0,Y.jsxs)(`div`,{className:`flex items-center justify-end gap-0.5`,children:[d?(0,Y.jsx)(x,{content:u(s.AUTOMATIONS$RUN_NOW),placement:`top`,children:(0,Y.jsx)(`button`,{type:`button`,"data-testid":`automation-run-now-${e.id}`,"aria-label":u(s.AUTOMATIONS$RUN_NOW),"aria-busy":r,disabled:r||!e.enabled,onClick:t=>{t.stopPropagation(),n(e.id)},className:K,children:(0,Y.jsx)(V,{className:`size-4 shrink-0`,"aria-hidden":!0})})}):null,(0,Y.jsx)(L,{items:h})]})})]})}function Pe({title:e,count:t,automations:n,view:r,onToggle:i,onRunNow:a,runPendingId:o=null,onDelete:s,onExport:c,onEdit:l}){return n.length===0?null:(0,Y.jsxs)(`section`,{children:[(0,Y.jsxs)(`div`,{className:`flex items-center`,children:[(0,Y.jsx)(`h2`,{className:`text-base font-semibold text-foreground`,children:e}),(0,Y.jsx)(w,{count:t})]}),r===`grid`?(0,Y.jsx)(`div`,{className:g(`mt-3`,M),children:(0,Y.jsx)(`div`,{className:P,children:n.map(e=>(0,Y.jsx)(we,{automation:e,onToggle:i,onRunNow:a,isRunPending:o===e.id,onDelete:s,onExport:c,onEdit:l},e.id))})}):(0,Y.jsx)(`div`,{className:g(Te,`mt-3`),children:(0,Y.jsx)(`table`,{className:`w-full min-w-full [&>tbody>tr:first-child]:border-t-0`,children:(0,Y.jsx)(`tbody`,{children:n.map(e=>(0,Y.jsx)(Ne,{automation:e,onToggle:i,onRunNow:a,isRunPending:o===e.id,onDelete:s,onExport:c,onEdit:l},e.id))})})})]})}var Fe=e(r(),1);function Ie({icon:e,label:t,isSelected:n}){return(0,Y.jsxs)(`span`,{className:`flex min-w-0 w-full items-center gap-2`,children:[(0,Y.jsx)(`span`,{className:S,"aria-hidden":!0,children:(0,Y.jsx)(e,{})}),(0,Y.jsx)(`span`,{className:`min-w-0 flex-1 truncate`,children:t}),n?(0,Y.jsx)(m,{className:`size-4 shrink-0`,"aria-hidden":!0}):null]})}var Z=[{value:`grid`,icon:be,labelKey:s.AUTOMATIONS$VIEW_GRID,testId:`automations-view-toggle-grid`},{value:`list`,icon:xe,labelKey:s.AUTOMATIONS$VIEW_LIST,testId:`automations-view-toggle-list`}];function Le({view:e,onChange:t,disabled:n=!1}){let{t:r}=o(`openhands`),[i,a]=(0,J.useState)(!1),[c,l]=(0,J.useState)(),u=(0,J.useRef)(null),d=(0,J.useRef)(null),f=(Z.find(t=>t.value===e)??Z[0]).icon;(0,J.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,J.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,Y.jsx)(T,{ref:d,theme:`popover`,className:`min-w-[10rem]`,children:Z.map(n=>(0,Y.jsx)(`li`,{children:(0,Y.jsx)(E,{testId:n.testId,onClick:()=>{t(n.value),a(!1)},className:`group`,children:(0,Y.jsx)(Ie,{icon:n.icon,label:r(n.labelKey),isSelected:e===n.value})})},n.value))}):null;return(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.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:g(`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,Y.jsx)(f,{className:`size-4`,"aria-hidden":!0})}),i&&c&&typeof document<`u`?Fe.createPortal((0,Y.jsx)(`div`,{style:c,children:p}),document.body):null]})}function Re(){return(0,Y.jsxs)(`div`,{"data-testid":`automation-card-skeleton`,className:`${A} border border-transparent p-4`,children:[(0,Y.jsxs)(`div`,{className:`flex items-start justify-between`,children:[(0,Y.jsx)(`div`,{className:`h-5 w-40 animate-pulse rounded bg-surface-raised`}),(0,Y.jsx)(`div`,{className:`h-5 w-10 animate-pulse rounded-full bg-surface-raised`})]}),(0,Y.jsx)(`div`,{className:`mt-2 h-4 w-72 animate-pulse rounded bg-surface-raised`}),(0,Y.jsxs)(`div`,{className:`mt-4 flex gap-2`,children:[(0,Y.jsx)(`div`,{className:`h-7 w-32 animate-pulse rounded-full bg-surface-raised`}),(0,Y.jsx)(`div`,{className:`h-7 w-28 animate-pulse rounded-full bg-surface-raised`}),(0,Y.jsx)(`div`,{className:`h-7 w-24 animate-pulse rounded-full bg-surface-raised`})]})]})}var ze=e=>(0,Y.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,fill:`none`,viewBox:`0 0 24 24`,strokeWidth:2,stroke:`currentColor`,...e,children:(0,Y.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`m19.5 8.25-7.5 7.5-7.5-7.5`})}),Be=`https://docs.openhands.dev/openhands/usage/automations/overview`;function Ve({children:e}){return(0,Y.jsx)(`span`,{className:`whitespace-nowrap`,children:e})}function He({children:e}){return(0,Y.jsx)(`code`,{"data-testid":`automations-create-instructions-example`,className:g(`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 Ue({children:e}){return(0,Y.jsx)(Y.Fragment,{children:e})}var We={example:(0,Y.jsx)(Ve,{}),cmd:(0,Y.jsx)(He,{}),punct:(0,Y.jsx)(Ue,{})};function Q({onLaunch:e}={}){let{t}=o(`openhands`),n=re(),r=f(),{trackAutomationCreated:i}=ee();return(0,Y.jsxs)(`div`,{className:`flex flex-col gap-5`,children:[(0,Y.jsxs)(`p`,{className:`text-sm leading-relaxed text-tertiary-light`,children:[(0,Y.jsx)(a,{ns:`openhands`,i18nKey:s.AUTOMATIONS$EMPTY_OPTION_CONVERSATION_DESC,components:We}),` `,t(s.AUTOMATIONS$CREATE_INSTRUCTIONS_GUIDANCE)]}),(0,Y.jsxs)(`div`,{className:`flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between`,children:[(0,Y.jsx)(`a`,{href:Be,target:`_blank`,rel:`noopener noreferrer`,className:`text-sm text-muted underline transition-colors hover:text-foreground`,children:t(s.AUTOMATIONS$EMPTY_LEARN_MORE)}),(0,Y.jsx)(y,{type:`button`,variant:`primary`,testId:`automations-create-automation`,onClick:()=>{i({backendKind:r.backend.kind}),n(t(s.AUTOMATIONS$CREATE_AUTOMATION_PROMPT),e)},startContent:(0,Y.jsx)(I,{className:`size-4`,"aria-hidden":!0}),children:t(s.AUTOMATIONS$CREATE_AUTOMATION_BUTTON)})]})]})}function Ge({collapsible:e=!1}){let{t}=o(`openhands`),[n,r]=(0,J.useState)(!e);return e?(0,Y.jsxs)(`div`,{className:`w-full rounded-lg border border-[var(--oh-border)] bg-[var(--oh-surface)]`,children:[(0,Y.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,Y.jsx)(`span`,{className:`text-sm font-normal text-content`,children:t(s.AUTOMATIONS$EMPTY_HOW_TO_CREATE_TITLE)}),(0,Y.jsx)(ze,{className:g(`size-5 text-muted transition-transform`,n&&`rotate-180`)})]}),n?(0,Y.jsx)(`div`,{className:`px-4 pb-4`,children:(0,Y.jsx)(Q,{})}):null]}):(0,Y.jsxs)(`div`,{className:`w-full max-w-2xl`,children:[(0,Y.jsx)(`h3`,{className:`text-center text-sm font-medium text-content`,children:t(s.AUTOMATIONS$EMPTY_HOW_TO_CREATE_TITLE)}),(0,Y.jsx)(`div`,{className:`mt-4`,children:(0,Y.jsx)(Q,{})})]})}function Ke(){let{t:e}=o(`openhands`);return(0,Y.jsxs)(`div`,{"data-testid":`automations-empty`,className:N,children:[(0,Y.jsx)(`p`,{className:`text-sm text-white`,children:e(s.AUTOMATIONS$EMPTY)}),(0,Y.jsx)(`p`,{className:`mt-1 text-xs text-tertiary-light`,children:e(s.AUTOMATIONS$EMPTY_HINT)}),(0,Y.jsx)(`div`,{className:`mt-8 flex justify-center border-t border-[var(--oh-border)] pt-8`,children:(0,Y.jsx)(Ge,{})})]})}function qe({isOpen:e,onClose:t}){let{t:n}=o(`openhands`);return e?(0,Y.jsx)(_,{onClose:t,"aria-label":n(s.AUTOMATIONS$EMPTY_HOW_TO_CREATE_TITLE),children:(0,Y.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,Y.jsx)(C,{onClose:t,testId:`add-automation-modal-close`}),(0,Y.jsx)(`header`,{className:`flex-shrink-0 px-6 pb-4 pt-6`,children:(0,Y.jsx)(`h2`,{id:`add-automation-modal-title`,className:g(`pr-6`,v),children:n(s.AUTOMATIONS$EMPTY_HOW_TO_CREATE_TITLE)})}),(0,Y.jsx)(`div`,{className:`px-6 pb-6`,children:(0,Y.jsx)(Q,{onLaunch:t})})]})}):null}function $({label:e,value:t}){return(0,Y.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,Y.jsx)(`dt`,{className:`text-xs font-medium uppercase tracking-wide text-muted`,children:e}),(0,Y.jsx)(`dd`,{className:`whitespace-pre-wrap break-words text-sm text-content`,children:t})]})}function Je({isOpen:e,spec:t,isImporting:n,onClose:r,onImport:i}){let{t:a}=o(`openhands`);if(!e||!t)return null;let c=t.trigger.type===`event`?[t.trigger.source,R(t.trigger.on)].filter(Boolean).join(`: `):[t.trigger.schedule_human??t.trigger.schedule,t.timezone??t.trigger.timezone].filter(Boolean).join(` · `);return(0,Y.jsx)(_,{onClose:n?void 0:r,closeOnEscape:!n,closeOnBackdropClick:!n,"aria-label":a(s.AUTOMATIONS$IMPORT),children:(0,Y.jsxs)(`div`,{"data-testid":`import-automation-modal`,className:`relative flex max-h-[85vh] w-[min(36rem,calc(100vw-2rem))] flex-col rounded-xl border border-[var(--oh-border)] bg-base-secondary`,children:[(0,Y.jsx)(C,{onClose:r,testId:`import-automation-modal-close`,disabled:n}),(0,Y.jsxs)(`header`,{className:`px-6 pb-4 pt-6`,children:[(0,Y.jsx)(`h2`,{className:g(`pr-6`,v),children:a(s.AUTOMATIONS$IMPORT)}),(0,Y.jsx)(`p`,{className:`mt-2 text-sm text-tertiary-light`,children:a(s.AUTOMATIONS$IMPORT_PREVIEW_DESCRIPTION)})]}),(0,Y.jsxs)(`dl`,{className:`flex min-h-0 flex-1 flex-col gap-4 overflow-y-auto border-y border-[var(--oh-border)] px-6 py-5`,children:[(0,Y.jsx)($,{label:a(s.AUTOMATIONS$NAME),value:t.name}),(0,Y.jsx)($,{label:a(s.AUTOMATIONS$DETAIL$TRIGGER),value:c}),(0,Y.jsx)($,{label:a(s.AUTOMATIONS$PROMPT),value:t.prompt??``}),t.plugins&&t.plugins.length>0?(0,Y.jsx)($,{label:a(s.AUTOMATIONS$DETAIL$PLUGINS),value:t.plugins.join(`, `)}):null]}),(0,Y.jsxs)(`footer`,{className:`px-6 py-5`,children:[(0,Y.jsx)(`p`,{className:`mb-4 text-sm text-tertiary-light`,children:a(s.AUTOMATIONS$IMPORT_DISABLED_NOTICE)}),(0,Y.jsxs)(`div`,{className:`flex justify-end gap-3`,children:[(0,Y.jsx)(y,{testId:`import-automation-cancel`,type:`button`,variant:`secondary`,onClick:r,isDisabled:n,children:a(s.AUTOMATIONS$CANCEL)}),(0,Y.jsx)(y,{testId:`import-automation-confirm`,type:`button`,variant:`primary`,onClick:i,isDisabled:n,"aria-busy":n,children:a(n?s.AUTOMATIONS$IMPORTING:s.AUTOMATIONS$IMPORT)})]})]})]})})}var Ye=50,Xe=i(function(){let{t:e}=o(`openhands`),[t,n]=(0,J.useState)(``),[r,i]=(0,J.useState)(()=>je()),[a,p]=(0,J.useState)(Ye),[m,g]=(0,J.useState)(null),[_,v]=(0,J.useState)(null),[b,x]=(0,J.useState)(!1),[S,C]=(0,J.useState)(null),w=(0,J.useRef)(null),T=f(),E=T.backend.kind===`local`,{data:D,isLoading:O,refetch:k}=ce(),A=D?.status===`ok`,{data:j,isLoading:M,isError:N,refetch:ne}=ge({limit:a,offset:0,enabled:A}),{trackPrebuiltAutomationEnabled:P,trackAutomationExported:F}=ee(),I=oe(),re=ae(),L=ie(),R=he(),z=(0,J.useMemo)(()=>{if(!j?.automations)return[];let e=t.toLowerCase();return e?j.automations.filter(t=>t.name.toLowerCase().includes(e)||(t.prompt??``).toLowerCase().includes(e)||t.repository?.toLowerCase().includes(e)||t.model?.toLowerCase().includes(e)):j.automations},[j?.automations,t]),B=(0,J.useMemo)(()=>z.filter(e=>e.enabled),[z]),V=(0,J.useMemo)(()=>z.filter(e=>!e.enabled),[z]),H=(e,t)=>{let n=!t;if(I.mutate({id:e,enabled:n}),n){let t=j?.automations.find(t=>t.id===e);P({automationId:e,automationName:t?.name??e})}},U=t=>{L.mutate(t,{onSuccess:()=>{d(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))}})},W=e=>{let t=j?.automations.find(t=>t.id===e);t&&g({id:e,name:t.name})},G=e=>{let t=j?.automations.find(t=>t.id===e);t&&v(t)},K=e=>{let t=`${JSON.stringify(fe(e),null,2)}\n`;h(new Blob([t],{type:`application/json`}),me(e)),F({backendKind:T.backend.kind})},q=async t=>{let n=t.currentTarget,r=n.files?.[0];if(n.value=``,r)try{let t;try{t=JSON.parse(await r.text())}catch{l(e(s.AUTOMATIONS$IMPORT_INVALID_JSON));return}C(ue(t))}catch(t){l(t instanceof Error?t.message:e(s.ERROR$GENERIC))}},_e=()=>{S&&R.mutate({...S,enabled:!1},{onSuccess:t=>{C(null),u(e(s.AUTOMATIONS$IMPORT_SUCCESS,{name:t.name}),e(s.AUTOMATIONS$IMPORT_VIEW),`/automations/${encodeURIComponent(t.id)}`)},onError:t=>{let n=c(t)?t.response?.data?.detail:void 0;l(typeof n==`string`?n:c(t)?t.message:e(s.ERROR$GENERIC))}})},ve=()=>{m&&(re.mutate(m.id),g(null))},be=(0,J.useCallback)(e=>{i(e),Me(e)},[]),xe=j?j.total>j.automations.length:!1,X=!M&&!N&&j?.automations.length===0;return O?(0,Y.jsx)(`div`,{className:`min-h-full`,children:(0,Y.jsxs)(`div`,{className:`p-6 max-w-4xl mx-auto`,children:[(0,Y.jsx)(`h1`,{className:`text-xl font-medium text-content`,children:e(s.AUTOMATIONS$TITLE)}),(0,Y.jsx)(`p`,{className:`mt-1 text-sm text-muted`,children:e(s.AUTOMATIONS$SUBTITLE)}),(0,Y.jsx)(`div`,{className:`mt-6 flex flex-col gap-3`,children:Array.from({length:3}).map((e,t)=>(0,Y.jsx)(Re,{},`skeleton-${String(t)}`))})]})}):A?(0,Y.jsx)(`div`,{className:`min-h-full`,children:(0,Y.jsxs)(`div`,{className:`p-6 max-w-4xl mx-auto`,children:[(0,Y.jsxs)(`div`,{className:`flex items-start justify-between gap-4`,children:[(0,Y.jsxs)(`div`,{className:`min-w-0`,children:[(0,Y.jsx)(`h1`,{className:`text-xl font-semibold text-content`,children:e(s.AUTOMATIONS$TITLE)}),(0,Y.jsx)(`p`,{className:`mt-1 text-sm text-muted`,children:e(s.AUTOMATIONS$SUBTITLE)})]}),(0,Y.jsxs)(`div`,{className:`flex shrink-0 flex-wrap justify-end gap-2`,children:[(0,Y.jsx)(y,{type:`button`,variant:`secondary`,testId:`automations-import-automation`,className:`whitespace-nowrap`,onClick:()=>w.current?.click(),startContent:(0,Y.jsx)(ye,{className:`size-4`,"aria-hidden":!0}),children:e(s.AUTOMATIONS$IMPORT)}),(0,Y.jsx)(`input`,{ref:w,type:`file`,accept:`application/json,.json`,className:`hidden`,"data-testid":`automations-import-file`,onChange:q}),(0,Y.jsx)(y,{type:`button`,variant:`secondary`,testId:`automations-add-automation`,className:`whitespace-nowrap`,onClick:()=>x(!0),children:e(s.AUTOMATIONS$ADD_AUTOMATION)})]})]}),(0,Y.jsxs)(`div`,{className:`mt-6 flex items-stretch gap-2`,children:[(0,Y.jsx)(Se,{value:t,onChange:n}),(0,Y.jsx)(Le,{view:r,onChange:be,disabled:X})]}),(0,Y.jsxs)(`div`,{className:`mt-6 flex flex-col gap-6`,children:[M&&(0,Y.jsx)(`div`,{className:`flex flex-col gap-3`,children:Array.from({length:3}).map((e,t)=>(0,Y.jsx)(Re,{},`skeleton-${String(t)}`))}),N&&!M&&(0,Y.jsx)(pe,{onRetry:ne}),X&&(0,Y.jsx)(Ke,{}),!M&&!N&&j&&j.automations.length>0&&(0,Y.jsxs)(Y.Fragment,{children:[(0,Y.jsx)(Pe,{title:e(s.AUTOMATIONS$ACTIVE),count:B.length,automations:B,view:r,onToggle:H,onRunNow:U,runPendingId:L.isPending?L.variables??null:null,onDelete:W,onExport:K,onEdit:E?G:void 0}),(0,Y.jsx)(Pe,{title:e(s.AUTOMATIONS$INACTIVE),count:V.length,automations:V,view:r,onToggle:H,onRunNow:U,runPendingId:L.isPending?L.variables??null:null,onDelete:W,onExport:K,onEdit:E?G:void 0}),xe&&(0,Y.jsx)(`button`,{type:`button`,onClick:()=>p(e=>e+Ye),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,Y.jsx)(`div`,{className:`mt-6`,children:(0,Y.jsx)(te,{query:t})}),(0,Y.jsx)(se,{automationName:m?.name??``,isOpen:m!==null,onConfirm:ve,onCancel:()=>g(null)}),_&&(0,Y.jsx)(le,{automation:_,isOpen:_!==null,onClose:()=>v(null)}),(0,Y.jsx)(qe,{isOpen:b,onClose:()=>x(!1)}),(0,Y.jsx)(Je,{isOpen:S!==null,spec:S,isImporting:R.isPending,onClose:()=>C(null),onImport:_e})]})}):(0,Y.jsx)(`div`,{className:`min-h-full`,children:(0,Y.jsxs)(`div`,{className:`p-6 max-w-4xl mx-auto`,children:[(0,Y.jsx)(`h1`,{className:`text-xl font-medium text-content`,children:e(s.AUTOMATIONS$TITLE)}),(0,Y.jsx)(`p`,{className:`mt-1 text-sm text-muted`,children:e(s.AUTOMATIONS$SUBTITLE)}),(0,Y.jsx)(de,{onRetry:k})]})})});export{Xe as default};
|