@openhands/agent-canvas 1.9.0 → 1.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/README.windows.md +2 -2
- package/build/assets/{acp-providers-C921BlYB.js → acp-providers-DLe_gVDY.js} +1 -1
- package/build/assets/active-backend-context-B0wI7OzM.js +2 -0
- package/build/assets/agent-context-settings-CaQtdNA-.js +1 -0
- package/build/assets/{agent-profiles-settings-BymJf3EP.js → agent-profiles-settings-CvuErjp6.js} +1 -1
- package/build/assets/agent-server-conversation-service.api-km_8sOVf.js +41 -0
- package/build/assets/{agent-settings-WzqXk6B4.js → agent-settings-UE-U4Xii.js} +2 -2
- package/build/assets/agent-settings-nmO-KSXr.js +1 -0
- package/build/assets/alert-banner-BMaOtTCG.js +1 -0
- package/build/assets/{api-key-entry-screen-DI0I04O3.js → api-key-entry-screen-Cy66vT4D.js} +1 -1
- package/build/assets/{app-settings-DGistSFV.js → app-settings-9ok42bV6.js} +1 -1
- package/build/assets/automation-detail-fuITm6i3.js +3 -0
- package/build/assets/automation-export-CRq40mux.js +2 -0
- package/build/assets/automation-setup-route-EXDazOHW.js +1 -0
- package/build/assets/automation-templates-BArZsaxP.js +1 -0
- package/build/assets/automations-list-CG4HKOTn.js +1 -0
- package/build/assets/{back-nav-button-D4ngzpSh.js → back-nav-button-BZB6H7xz.js} +1 -1
- package/build/assets/{backend-form-modal-B8D5hBzK.js → backend-form-modal-B_lXjOGa.js} +1 -1
- package/build/assets/{backend-synced-settings-badge-BnzI8Ysj.js → backend-synced-settings-badge-B_NXJ3u1.js} +1 -1
- package/build/assets/{badge-1Mf1iPcX.js → badge-C64c-7PO.js} +1 -1
- package/build/assets/{base-modal-BBuy0WQQ.js → base-modal-C0RQPug5.js} +1 -1
- package/build/assets/bot-DuN83i3p.js +1 -0
- package/build/assets/{brand-button-DGN6Y9o6.js → brand-button-DJmFCyMK.js} +1 -1
- package/build/assets/{browser-D_ekTlTS.js → browser-D3gd2n83.js} +2 -2
- package/build/assets/{browser-tab-D4a4Ou_w.js → browser-tab-BicAWuJ1.js} +1 -1
- package/build/assets/{chat-send-button-CgbcjD97.js → chat-send-button-CCrH1E8u.js} +1 -1
- package/build/assets/check-DLOKoFU9.js +1 -0
- package/build/assets/{checkmark-CxdXtM3b.js → checkmark-XZyokq_Y.js} +1 -1
- package/build/assets/chevron-down-CnIbtM6i.js +1 -0
- package/build/assets/circle-check-CxCYJrpZ.js +1 -0
- package/build/assets/{circle-plus-check-toggle-yTAS-nX3.js → circle-plus-check-toggle-CB_sNERY.js} +1 -1
- package/build/assets/{close-CDAVqnTn.js → close-ScPlnwyq.js} +1 -1
- package/build/assets/{cloud-funnel-analytics-CEOl5Gxr.js → cloud-funnel-analytics-XynamQGU.js} +1 -1
- package/build/assets/{combobox-caret-Bd2yySnF.js → combobox-caret-Bwiifgjs.js} +1 -1
- package/build/assets/command-menu-CA3IjGNc.js +1 -0
- package/build/assets/condenser-settings-cNGy75gq.js +1 -0
- package/build/assets/{confirmation-modal-NCUPr2-O.js → confirmation-modal-BATFmFyP.js} +1 -1
- package/build/assets/context-menu-list-item-DhJCcBA0.js +1 -0
- package/build/assets/conversation-B6t6EiVp.js +1 -0
- package/build/assets/{conversation-CUJ0Vo8g.js → conversation-Csdxh9Xt.js} +7 -7
- package/build/assets/conversation-panel-B6t6EiVp.js +1 -0
- package/build/assets/{conversation-state-store-F62HvuI1.js → conversation-state-store-C2QzhPaK.js} +1 -1
- package/build/assets/{conversation-store-C6hSXHw0.js → conversation-store-B8Eahyeg.js} +1 -1
- package/build/assets/{conversation-tab-empty-state-BCZ7rUMH.js → conversation-tab-empty-state-D3fb5xIA.js} +1 -1
- package/build/assets/{copy-DCmZtz6n.js → copy-DaHuDtG4.js} +1 -1
- package/build/assets/{copy-z7idLzWO.js → copy-Drmhc2jD.js} +1 -1
- package/build/assets/{copy-to-clipboard-button-D_Lp6-Fl.js → copy-to-clipboard-button-c4MQwKGj.js} +1 -1
- package/build/assets/{device-verify-DLmolX8Q.js → device-verify-oFpQoLgm.js} +1 -1
- package/build/assets/{dist-hOnv1nn2.js → dist-Bl64nBZL.js} +1 -1
- package/build/assets/{dropdown-classes-BB8rzqXL.js → dropdown-classes-f91ARMV1.js} +1 -1
- package/build/assets/entry.client-BCzY2Bf3.js +2 -0
- package/build/assets/enum-filter-dropdown-HG3q3rkV.js +1 -0
- package/build/assets/{environment-switch-overlay-BepBBX66.js → environment-switch-overlay-CquZXolz.js} +1 -1
- package/build/assets/{extensions-hub-R3KNv-5V.js → extensions-hub-BeweE0PW.js} +1 -1
- package/build/assets/{extensions-navigation-CfWFmI1I.js → extensions-navigation-Dd58NlUF.js} +1 -1
- package/build/assets/{external-link-BdBSg8rk.js → external-link-zWbg5KXS.js} +1 -1
- package/build/assets/file-text-RecuaId_.js +1 -0
- package/build/assets/files-tab-CLLG55-q.js +1 -0
- package/build/assets/{folder-C86qXV7M.js → folder-C1ou4_DT.js} +1 -1
- package/build/assets/{form-control-classes-DAfsCJTe.js → form-control-classes-pHtZUI6K.js} +1 -1
- package/build/assets/format-relative-time-6-3uvOXe.js +1 -0
- package/build/assets/format-time-delta-BIR5Os7T.js +1 -0
- package/build/assets/{git-provider-icon-BZqqUPlm.js → git-provider-icon-wg7ShB98.js} +1 -1
- package/build/assets/{git-repo-dropdown-DEpOwUez.js → git-repo-dropdown-CWnaUyxL.js} +1 -1
- package/build/assets/git-repo-dropdown-TzOuG5Ef.js +1 -0
- package/build/assets/{highlighted-source-view-CX9oIoVT.js → highlighted-source-view-DBtI3por.js} +1 -1
- package/build/assets/home-BpZQkDWM.js +1 -0
- package/build/assets/home-OEx0XtfP.js +1 -0
- package/build/assets/{home-store-Ch1ErdBc.js → home-store-DM4qw1lF.js} +1 -1
- package/build/assets/{iconBase-B2rQun3J.js → iconBase-C2sR-uAp.js} +1 -1
- package/build/assets/index-home-OEx0XtfP.js +1 -0
- package/build/assets/info-C9lpK5pw.js +1 -0
- package/build/assets/install-server-modal-DnjZrJUy.js +1 -0
- package/build/assets/kebab-menu-item-content-By16Tm_0.js +1 -0
- package/build/assets/{launch-B1POpHuP.js → launch-C9uijypN.js} +1 -1
- package/build/assets/{link-external-BDBCz-_z.js → link-external-BNZzCM1I.js} +1 -1
- package/build/assets/list-filter-C86CBRDE.js +1 -0
- package/build/assets/{list-todo-DtiL3lTp.js → list-todo-CheUtB7F.js} +1 -1
- package/build/assets/llm-not-configured-banner-DrBrhfN0.js +27 -0
- package/build/assets/{llm-settings-CXo8iPNW.js → llm-settings-CRsLqxgu.js} +1 -1
- package/build/assets/llm-settings-RBm_3kNm.js +1 -0
- package/build/assets/{llm-subscription-service-DBJbfd8Z.js → llm-subscription-service-DwjJ8-_X.js} +1 -1
- package/build/assets/loader-circle-C5AnEN8r.js +1 -0
- package/build/assets/{loading-spinner-DfZ_bhV7.js → loading-spinner-6Yj-YyoS.js} +1 -1
- package/build/assets/{manage-backends-modal-CwyWsiag.js → manage-backends-modal-DrwErS0N.js} +1 -1
- package/build/assets/manifest-c352d453.js +1 -0
- package/build/assets/manifest-subpage-layout-CtqVwIvJ.js +1 -0
- package/build/assets/{markdown-renderer-DgiLLhW6.js → markdown-renderer-lsvsp7jn.js} +4 -4
- package/build/assets/mcp-DD4hPTRE.js +9 -0
- package/build/assets/mcp-marketplace-utils-BMnYz0Gc.js +1 -0
- package/build/assets/messages-Dt77e0qi.js +40 -0
- package/build/assets/{modal-backdrop-X-vKo61e.js → modal-backdrop-BSzNhM4r.js} +1 -1
- package/build/assets/{modal-body-CMsDpalT.js → modal-body-BHGCSAtj.js} +1 -1
- package/build/assets/{modal-classes-B6PDrxXo.js → modal-classes-DSTLuxkA.js} +1 -1
- package/build/assets/{modal-close-button-DyxBZaAb.js → modal-close-button-dheWZ2ys.js} +1 -1
- package/build/assets/mouse-pointer-click-Px-dXWcS.js +1 -0
- package/build/assets/{navigation-context-BOGzIng3.js → navigation-context-CQZwH_tC.js} +1 -1
- package/build/assets/navigation-link-Bxo3-4vo.js +1 -0
- package/build/assets/onboarding-5CZvRBbh.js +1 -0
- package/build/assets/onboarding-modal-CD2ehuxt.js +1 -0
- package/build/assets/{openhands-logo-CmYvJXBa.js → openhands-logo-BS-Epajy.js} +1 -1
- package/build/assets/{organization-service.api-UDy63-oC.js → organization-service.api-Dsuoep0g.js} +1 -1
- package/build/assets/{pencil-BjgtZmWp.js → pencil-Bl3GWhgq.js} +1 -1
- package/build/assets/{planner-tab-BWk8885v.js → planner-tab-DeO7Thb0.js} +1 -1
- package/build/assets/{plugins-management-service-CjkgF2dd.js → plugins-management-service-C9f75R6X.js} +1 -1
- package/build/assets/plus-CtzlyAoF.js +1 -0
- package/build/assets/{profiles-service.api-CukSFLzz.js → profiles-service.api-Dl20_2IM.js} +1 -1
- package/build/assets/{providers-CqUWC85T.js → providers-CeuhK46N.js} +1 -1
- package/build/assets/{proxy-BBUG3sd2.js → proxy-CIGI9zQC.js} +1 -1
- package/build/assets/{puzzle-BoNc6zZ8.js → puzzle-B3v361yY.js} +1 -1
- package/build/assets/recommended-automations-launcher-6xmbf7lh.js +1 -0
- package/build/assets/{refresh-cw-BrM5ZAZD.js → refresh-cw-B9GhC3QC.js} +1 -1
- package/build/assets/root-BQPNqNvD.js +2 -0
- package/build/assets/root-BeuHFY2s.css +1 -0
- package/build/assets/root-layout-Dl_2CDoq.js +3 -0
- package/build/assets/{schema-field-nImDoY6-.js → schema-field-z2vSLuLo.js} +1 -1
- package/build/assets/{sdk-section-page-BxMrtUNV.js → sdk-section-page-BnCXAytf.js} +1 -1
- package/build/assets/{search-7DRiGm4Z.js → search-BatSpWed.js} +1 -1
- package/build/assets/search-CYaiKHRp.js +1 -0
- package/build/assets/{secrets-service-Dhjh3HhH.js → secrets-service-DGUNlwQd.js} +1 -1
- package/build/assets/{secrets-settings-CPdxceT_.js → secrets-settings-DUmML_dK.js} +1 -1
- package/build/assets/{segmented-toggle-Do6oyepX.js → segmented-toggle-eSofF7gn.js} +1 -1
- package/build/assets/settings-CWFxymAf.js +1 -0
- package/build/assets/{settings-BRbnfKEm.js → settings-Co-M5bK9.js} +1 -1
- package/build/assets/{settings-dropdown-input-DYCULKpp.js → settings-dropdown-input-Cx4g7Xfl.js} +1 -1
- package/build/assets/{settings-gear-TYXnELES.js → settings-gear-DaJj6Pde.js} +1 -1
- package/build/assets/{settings-index-C9o2NBO0.js → settings-index-BECdgecg.js} +1 -1
- package/build/assets/{settings-input-B-q2gkVy.js → settings-input-BQY115xH.js} +1 -1
- package/build/assets/settings-like-page-layout-classes-Cw4Yzv_P.js +1 -0
- package/build/assets/{settings-list-classes-WpQi0q1L.js → settings-list-classes-C9cLrrcc.js} +1 -1
- package/build/assets/{settings-modal-CEK0AIx6.js → settings-modal-ChBJNTdd.js} +1 -1
- package/build/assets/{settings-section-header-context-CnIIQAUn.js → settings-section-header-context-BOJ_Fbak.js} +1 -1
- package/build/assets/settings-service.api-Dz9cZyvx.js +1 -0
- package/build/assets/{settings-switch-LqKdGxHL.js → settings-switch-BIodMVz9.js} +1 -1
- package/build/assets/{shared-conversation-Bu-dQlgp.js → shared-conversation-CSF0aTuE.js} +1 -1
- package/build/assets/{sidebar-layout-oHBGQmLh.js → sidebar-layout-DEycoFd_.js} +1 -1
- package/build/assets/sidebar-mobile-menu-toggle-DeRvTupV.js +1 -0
- package/build/assets/{sidebar-nav-link-CrujNA09.js → sidebar-nav-link-BjpQ-NVc.js} +1 -1
- package/build/assets/{sidebar-store-Bui-WNEr.js → sidebar-store-B04sX8aP.js} +1 -1
- package/build/assets/{skill-card-pill-row-CZBI7OqH.js → skill-card-pill-row-BH6fPGba.js} +1 -1
- package/build/assets/{skill-icon-badge-BOov_phZ.js → skill-icon-badge-D4uznfjU.js} +1 -1
- package/build/assets/skill-scope-DH_AUUUP.js +1 -0
- package/build/assets/{skills-CYFLsN5U.js → skills-B0IliMxw.js} +1 -1
- package/build/assets/{skills-plugins-D0PiHWAD.js → skills-plugins-vfvOk34h.js} +1 -1
- package/build/assets/skills-settings-DnbIu2eO.js +2 -0
- package/build/assets/sparkles-g7y3r-Ut.js +1 -0
- package/build/assets/{styled-tooltip-C7grwnOX.js → styled-tooltip-CQ9JEFiO.js} +1 -1
- package/build/assets/{switch-skeleton-BQoOhQTB.js → switch-skeleton-DwOoCqaL.js} +1 -1
- package/build/assets/{syntax-highlighter-B92AFGMy.js → syntax-highlighter-BGDg_7w9.js} +1 -1
- package/build/assets/{task-list-tab-R3ac6m7O.js → task-list-tab-DeF_uXdw.js} +1 -1
- package/build/assets/{terminal-cMS3RgVE.js → terminal-BUpID2wS.js} +1 -1
- package/build/assets/{terminal-yqkNdEAx.js → terminal-DRc4rup7.js} +1 -1
- package/build/assets/{toggle-switch-BeSrbgCg.js → toggle-switch--8n8NeV_.js} +1 -1
- package/build/assets/{trash-2-wW5TWcdN.js → trash-2-CzDVN-Iw.js} +1 -1
- package/build/assets/{typography-iYhzLlHO.js → typography-BSbUhJPn.js} +1 -1
- package/build/assets/{u-check-circle-DBEvndTS.js → u-check-circle-BKn1spCL.js} +1 -1
- package/build/assets/{u-edit-809W9D9T.js → u-edit-DAkcF52u.js} +1 -1
- package/build/assets/{u-robot-CJtSzy5X.js → u-robot-BvAOA2ZD.js} +1 -1
- package/build/assets/{use-acp-credential-form-DUxbxmbq.js → use-acp-credential-form-BGKFi1VL.js} +1 -1
- package/build/assets/{use-activate-agent-profile-CDHA52tC.js → use-activate-agent-profile-2nvALjC-.js} +1 -1
- package/build/assets/{use-agent-profiles-TsOdIyw5.js → use-agent-profiles-BlQA67MW.js} +1 -1
- package/build/assets/{use-breakpoint-DA7JqsRN.js → use-breakpoint-DWtihr9g.js} +1 -1
- package/build/assets/{use-can-manage-org-profiles-Bt1M71u5.js → use-can-manage-org-profiles-Clw5Dh1s.js} +1 -1
- package/build/assets/{use-click-outside-element-DKqpqEEm.js → use-click-outside-element-W6Os4Nlb.js} +1 -1
- package/build/assets/{use-cloud-current-user-id-DWt7HCgf.js → use-cloud-current-user-id-B8AQSQFM.js} +1 -1
- package/build/assets/{use-config-CxlEdf_v.js → use-config-C3zGuUQI.js} +1 -1
- package/build/assets/{use-create-conversation-nOJ6Um5h.js → use-create-conversation-FaP0kUpg.js} +1 -1
- package/build/assets/{use-create-secret-Dj5ang9x.js → use-create-secret-CgQ3pXd6.js} +1 -1
- package/build/assets/use-is-authed-Bka89Xmm.js +1 -0
- package/build/assets/{use-is-creating-conversation-CAggrM75.js → use-is-creating-conversation-CVefC9Ns.js} +1 -1
- package/build/assets/{use-launch-skill-in-chat-DKzCTMt0.js → use-launch-skill-in-chat-BcKNjxxd.js} +1 -1
- package/build/assets/use-llm-profiles-C-tDO6UB.js +1 -0
- package/build/assets/use-manifest-capabilities-DLP5wCxp.js +1 -0
- package/build/assets/{use-onboarding-completion-gxQlcEy2.js → use-onboarding-completion-BiCdXvlU.js} +1 -1
- package/build/assets/{use-plugins-marketplace-CVO7sXYR.js → use-plugins-marketplace-DRFNLBlr.js} +1 -1
- package/build/assets/use-save-agent-profile-CaGVAudI.js +1 -0
- package/build/assets/{use-save-settings-L3aMaDeS.js → use-save-settings-C9B8Y-h3.js} +1 -1
- package/build/assets/{use-settings-8nt3DGxW.js → use-settings-3RcgdUuZ.js} +1 -1
- package/build/assets/{use-settings-nav-items-DHAAD-zk.js → use-settings-nav-items-y-Oyc93G.js} +2 -2
- package/build/assets/use-tracking-CTtkLAmx.js +3 -0
- package/build/assets/{use-user-conversation-BIIpGUgM.js → use-user-conversation-Bei82QsZ.js} +1 -1
- package/build/assets/{useInfiniteQuery-BLRVmVPU.js → useInfiniteQuery-DbCv0Jzd.js} +1 -1
- package/build/assets/{useMutation-CaSHLnX0.js → useMutation-ChpkYxI5.js} +1 -1
- package/build/assets/{useQueries--d_WWAzc.js → useQueries-Cjv3E8_1.js} +1 -1
- package/build/assets/useQuery-BCnzy4LX.js +1 -0
- package/build/assets/utils-BX9XJ0IE.js +1 -0
- package/build/assets/{vendor-markdown-BML7QbqS.js → vendor-markdown-j0kYzV48.js} +1 -1
- package/build/assets/{vendor-styling-Bcgpimp9.js → vendor-styling-Ck5D_A2Q.js} +6 -6
- package/build/assets/{vendor~browser-jaN4ilxM.js → vendor~browser-C6uXH-dw.js} +2 -2
- package/build/assets/vendor~browser-DJ1pl_wn.js +47 -0
- package/build/assets/{vendor~browser-tab-_-VCXq8n.js → vendor~browser-tab-C5uuAxZX.js} +1 -1
- package/build/assets/vendor~entry.client-CgNUwtQL.js +1 -0
- package/build/assets/{vendor~entry.client-BcYIVQvB.js → vendor~entry.client-zSIea5EO.js} +2 -2
- package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~cy4jtuc2-rfV8mQ9m.js +1 -0
- package/build/assets/{vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~b0bpqexo-CbTboogo.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~kv3pap4j-oGvLV0dO.js} +4 -4
- package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~lq5hicxx-cHFhpUBq.js +26 -0
- package/build/assets/{vendor~files-tab-C7RmQJwN.js → vendor~files-tab-C87pjSpi.js} +1 -1
- package/build/assets/{vendor~index-home~home~conversation-panel~conversation-Bqp1ZqJM.js → vendor~index-home~home~conversation-panel~conversation-DiXf0dkj.js} +1 -1
- package/build/assets/{vendor~conversation-panel~conversation~alert-banner-BNzz5FuZ.js → vendor~index-home~home~conversation-panel~conversation~alert-banner-B3qC_oj8.js} +1 -1
- package/build/assets/{vendor~launch-ChXCOGw8.js → vendor~launch-CHwEQG6e.js} +1 -1
- package/build/assets/vendor~module-DyG7x7JT.js +2 -0
- package/build/assets/{vendor~root-layout~conversation-panel~conversation-BCn8lzeG.js → vendor~root-layout~conversation-panel~conversation-DEzjR4K7.js} +1 -1
- package/build/assets/{vendor~root-layout~conversation-panel~conversation~shared-conversation-DRblkyXD.js → vendor~root-layout~conversation-panel~conversation~shared-conversation-DOuig0C0.js} +1 -1
- package/build/assets/vendor~root-layout~conversation-panel~conversation~skills-settings~automations-list~shared-~bovqqk8e-U-xdsAEx.js +1 -0
- package/build/assets/{vendor~root-layout~index-home~home~conversation-panel~conversation~automation-setup-route-B_L-gcOG.js → vendor~root-layout~index-home~home~conversation-panel~conversation~automation-setup-route-CjECvSl5.js} +1 -1
- package/build/assets/{vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation-sjx0x5ac.js → vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation-CQR5Sa0H.js} +1 -1
- package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~gy8zbn65-CGt6bWRT.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~gxu4j2ea-Cwhh3zLe.js} +1 -1
- package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~dfc8ddxy-tTyxnjXT.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~hjcjabwg-CuQhkiS7.js} +1 -1
- package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~9pstowjp-BOVIFA_g.js +73 -0
- package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~dufan6ng-Dtdw8H0q.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~ht43enc2-C0JXQb_q.js} +162 -54
- package/build/assets/{verification-settings-DBsnSXC3.js → verification-settings-nD61Ijph.js} +1 -1
- package/build/assets/wrench-DRitTfwe.js +1 -0
- package/build/assets/x-RYDBg-e2.js +1 -0
- package/build/assets/{x-mark-jcTkPiOB.js → x-mark-BopmFoBq.js} +1 -1
- package/build/assets/zap-tbKDzCe3.js +1 -0
- package/build/index.html +4 -4
- package/build/locales/ar/openhands.json +70 -4
- package/build/locales/ca/openhands.json +70 -4
- package/build/locales/de/openhands.json +70 -4
- package/build/locales/en/openhands.json +70 -4
- package/build/locales/es/openhands.json +70 -4
- package/build/locales/fr/openhands.json +70 -4
- package/build/locales/it/openhands.json +70 -4
- package/build/locales/ja/openhands.json +70 -4
- package/build/locales/ko-KR/openhands.json +70 -4
- package/build/locales/no/openhands.json +70 -4
- package/build/locales/pt/openhands.json +70 -4
- package/build/locales/tr/openhands.json +70 -4
- package/build/locales/uk/openhands.json +70 -4
- package/build/locales/zh-CN/openhands.json +70 -4
- package/build/locales/zh-TW/openhands.json +70 -4
- package/build/mockServiceWorker.js +21 -9
- package/config/defaults.json +3 -3
- package/dist/api/automation-service/automation-service.api.cjs +1 -1
- package/dist/api/automation-service/automation-service.api.cjs.map +1 -1
- package/dist/api/automation-service/automation-service.api.d.ts +5 -0
- package/dist/api/automation-service/automation-service.api.js +11 -0
- package/dist/api/automation-service/automation-service.api.js.map +1 -1
- package/dist/api/backend-registry/active-store.cjs +1 -1
- package/dist/api/backend-registry/active-store.cjs.map +1 -1
- package/dist/api/backend-registry/active-store.js +36 -31
- package/dist/api/backend-registry/active-store.js.map +1 -1
- package/dist/api/backend-registry/url-selection.cjs +2 -0
- package/dist/api/backend-registry/url-selection.cjs.map +1 -0
- package/dist/api/backend-registry/url-selection.d.ts +31 -0
- package/dist/api/backend-registry/url-selection.js +29 -0
- package/dist/api/backend-registry/url-selection.js.map +1 -0
- package/dist/api/mcp-service/mcp-redacted-credentials.cjs +1 -1
- package/dist/api/mcp-service/mcp-redacted-credentials.cjs.map +1 -1
- package/dist/api/mcp-service/mcp-redacted-credentials.d.ts +3 -2
- package/dist/api/mcp-service/mcp-redacted-credentials.js +32 -27
- package/dist/api/mcp-service/mcp-redacted-credentials.js.map +1 -1
- package/dist/api/mcp-service/mcp-service.api.cjs +1 -1
- package/dist/api/mcp-service/mcp-service.api.cjs.map +1 -1
- package/dist/api/mcp-service/mcp-service.api.js +19 -19
- package/dist/api/mcp-service/mcp-service.api.js.map +1 -1
- package/dist/api/settings-service/settings-service.api.cjs +1 -1
- package/dist/api/settings-service/settings-service.api.cjs.map +1 -1
- package/dist/api/settings-service/settings-service.api.d.ts +10 -0
- package/dist/api/settings-service/settings-service.api.js +90 -100
- package/dist/api/settings-service/settings-service.api.js.map +1 -1
- package/dist/api/skills-service.cjs +1 -1
- package/dist/api/skills-service.cjs.map +1 -1
- package/dist/api/skills-service.js +1 -0
- package/dist/api/skills-service.js.map +1 -1
- package/dist/assets/chevron-left.d.ts +1 -1
- package/dist/assets/chevron-right.d.ts +1 -1
- package/dist/components/conversation-events/chat/event-message-components/collapsible-thinking.d.ts +2 -1
- package/dist/components/conversation-events/chat/event-message-components/critic-result-display.d.ts +2 -1
- package/dist/components/conversation-events/chat/event-message-components/error-event-message.d.ts +2 -1
- package/dist/components/conversation-events/chat/event-message-components/event-group.d.ts +1 -1
- package/dist/components/conversation-events/chat/event-message-components/finish-event-message.d.ts +1 -1
- package/dist/components/conversation-events/chat/event-message-components/generic-event-message-wrapper.d.ts +1 -1
- package/dist/components/conversation-events/chat/event-message-components/observation-pair-event-message.d.ts +2 -1
- package/dist/components/conversation-events/chat/event-message-components/skill-item-expanded.d.ts +1 -1
- package/dist/components/conversation-events/chat/event-message-components/skill-ready-content-list.d.ts +2 -1
- package/dist/components/conversation-events/chat/event-message-components/thought-event-message.d.ts +1 -1
- package/dist/components/conversation-events/chat/event-message-components/user-assistant-event-message.d.ts +2 -1
- package/dist/components/conversation-events/chat/event-message.d.ts +2 -1
- package/dist/components/conversation-events/chat/task-tracking/task-item.d.ts +1 -1
- package/dist/components/conversation-events/chat/task-tracking/task-list-section.d.ts +1 -1
- package/dist/components/features/alerts/alert-banner.d.ts +1 -1
- package/dist/components/features/analytics/telemetry-consent-banner.d.ts +2 -1
- package/dist/components/features/automations/add-automation-modal.d.ts +1 -1
- package/dist/components/features/automations/automation-card-skeleton.d.ts +1 -1
- package/dist/components/features/automations/automation-card.d.ts +9 -1
- package/dist/components/features/automations/automation-group.d.ts +9 -1
- package/dist/components/features/automations/automation-health-badge.d.ts +8 -0
- package/dist/components/features/automations/automation-list-row.d.ts +3 -1
- package/dist/components/features/automations/automation-run-insights.d.ts +17 -0
- package/dist/components/features/automations/automation-view-toggle.d.ts +1 -1
- package/dist/components/features/automations/backend-not-configured.d.ts +1 -1
- package/dist/components/features/automations/create-instructions.d.ts +2 -2
- package/dist/components/features/automations/dashboard/automations-dashboard-controls.d.ts +18 -0
- package/dist/components/features/automations/dashboard/automations-filtered-empty-state.d.ts +9 -0
- package/dist/components/features/automations/dashboard/use-automation-sub-page-nav.d.ts +12 -0
- package/dist/components/features/automations/delete-confirmation-modal.d.ts +1 -1
- package/dist/components/features/automations/detail/active-status-badge.d.ts +1 -1
- package/dist/components/features/automations/detail/activity-log-item.d.ts +1 -1
- package/dist/components/features/automations/detail/activity-log-section.d.ts +3 -1
- package/dist/components/features/automations/detail/activity-section.d.ts +1 -1
- package/dist/components/features/automations/detail/back-link.d.ts +1 -1
- package/dist/components/features/automations/detail/branch-badge.d.ts +1 -1
- package/dist/components/features/automations/detail/config-field.d.ts +1 -1
- package/dist/components/features/automations/detail/configuration-section.d.ts +1 -1
- package/dist/components/features/automations/detail/debug-automation-button.d.ts +1 -1
- package/dist/components/features/automations/detail/detail-header.d.ts +1 -1
- package/dist/components/features/automations/detail/detail-skeleton.d.ts +1 -1
- package/dist/components/features/automations/detail/edit-automation-modal.d.ts +1 -1
- package/dist/components/features/automations/detail/not-found-state.d.ts +1 -1
- package/dist/components/features/automations/detail/plugin-chip.d.ts +1 -1
- package/dist/components/features/automations/detail/plugins-section.d.ts +1 -1
- package/dist/components/features/automations/detail/prompt-section.d.ts +2 -1
- package/dist/components/features/automations/detail/run-logs-modal.d.ts +1 -1
- package/dist/components/features/automations/detail/run-status-badge.d.ts +10 -1
- package/dist/components/features/automations/detail/section-card.d.ts +1 -1
- package/dist/components/features/automations/empty-state.d.ts +1 -1
- package/dist/components/features/automations/error-state.d.ts +1 -1
- package/dist/components/features/automations/import-automation-modal.d.ts +1 -1
- package/dist/components/features/automations/kebab-menu-item-content.d.ts +1 -1
- package/dist/components/features/automations/kebab-menu.d.ts +1 -1
- package/dist/components/features/automations/metadata-chip.d.ts +1 -1
- package/dist/components/features/automations/recommended-automations-launcher.d.ts +1 -1
- package/dist/components/features/automations/recommended-automations-section.d.ts +1 -1
- package/dist/components/features/automations/responder-deployment-modal.d.ts +1 -1
- package/dist/components/features/automations/search-input.d.ts +1 -1
- package/dist/components/features/automations/status-badge.d.ts +1 -1
- package/dist/components/features/automations/turn-off-confirmation-modal.d.ts +8 -0
- package/dist/components/features/automations/view-menu-item-content.d.ts +1 -1
- package/dist/components/features/backends/add-backend-modal.d.ts +1 -1
- package/dist/components/features/backends/api-key-entry-screen.d.ts +2 -1
- package/dist/components/features/backends/backend-form-modal.d.ts +3 -3
- package/dist/components/features/backends/backend-row.d.ts +1 -1
- package/dist/components/features/backends/backend-selector.d.ts +2 -1
- package/dist/components/features/backends/backend-status-dot.d.ts +2 -1
- package/dist/components/features/backends/backend-version.d.ts +1 -1
- package/dist/components/features/backends/device-flow-auth.d.ts +1 -1
- package/dist/components/features/backends/manage-backends-modal.d.ts +2 -1
- package/dist/components/features/browser/browser-chrome-bar.d.ts +1 -1
- package/dist/components/features/browser/browser-snapshot.d.ts +1 -1
- package/dist/components/features/browser/browser.d.ts +1 -1
- package/dist/components/features/browser/empty-browser-message.d.ts +1 -1
- package/dist/components/features/chat/btw-messages.d.ts +1 -1
- package/dist/components/features/chat/change-agent-button.d.ts +2 -1
- package/dist/components/features/chat/change-agent-context-menu.d.ts +1 -1
- package/dist/components/features/chat/chat-action-tooltip.d.ts +1 -1
- package/dist/components/features/chat/chat-add-file-button.d.ts +2 -1
- package/dist/components/features/chat/chat-interface.d.ts +2 -1
- package/dist/components/features/chat/chat-message.d.ts +1 -1
- package/dist/components/features/chat/chat-messages-skeleton.d.ts +2 -1
- package/dist/components/features/chat/chat-play-button.d.ts +1 -1
- package/dist/components/features/chat/chat-send-button.d.ts +1 -1
- package/dist/components/features/chat/chat-status-indicator.d.ts +1 -1
- package/dist/components/features/chat/chat-stop-button.d.ts +1 -1
- package/dist/components/features/chat/chat-suggestions.d.ts +1 -1
- package/dist/components/features/chat/components/chat-input-actions.d.ts +2 -1
- package/dist/components/features/chat/components/chat-input-container.d.ts +1 -1
- package/dist/components/features/chat/components/chat-input-field.d.ts +1 -1
- package/dist/components/features/chat/components/chat-input-grip.d.ts +1 -1
- package/dist/components/features/chat/components/chat-input-llm-profile-picker.d.ts +3 -2
- package/dist/components/features/chat/components/chat-input-model.d.ts +3 -2
- package/dist/components/features/chat/components/chat-input-profile-picker.d.ts +1 -1
- package/dist/components/features/chat/components/chat-input-row.d.ts +1 -1
- package/dist/components/features/chat/components/hidden-file-input.d.ts +1 -1
- package/dist/components/features/chat/components/slash-command-menu.d.ts +2 -1
- package/dist/components/features/chat/confirmation-mode-enabled.d.ts +1 -1
- package/dist/components/features/chat/custom-chat-input.d.ts +1 -1
- package/dist/components/features/chat/drag-over.d.ts +1 -1
- package/dist/components/features/chat/error-message-banner.d.ts +2 -1
- package/dist/components/features/chat/error-message.d.ts +2 -1
- package/dist/components/features/chat/generic-event-message.d.ts +1 -1
- package/dist/components/features/chat/git-control-bar-branch-button.d.ts +1 -1
- package/dist/components/features/chat/git-control-bar-pr-button.d.ts +1 -1
- package/dist/components/features/chat/git-control-bar-pull-button.d.ts +1 -1
- package/dist/components/features/chat/git-control-bar-push-button.d.ts +1 -1
- package/dist/components/features/chat/git-control-bar-repo-button.d.ts +1 -1
- package/dist/components/features/chat/git-control-bar-tooltip-wrapper.d.ts +1 -1
- package/dist/components/features/chat/git-control-bar.d.ts +1 -1
- package/dist/components/features/chat/git-external-link-icon.d.ts +1 -1
- package/dist/components/features/chat/goal-status-banner.d.ts +1 -1
- package/dist/components/features/chat/goal-status-content.d.ts +1 -1
- package/dist/components/features/chat/got-it-button.d.ts +1 -1
- package/dist/components/features/chat/interactive-chat-box.d.ts +1 -1
- package/dist/components/features/chat/model-messages.d.ts +2 -1
- package/dist/components/features/chat/mono-component.d.ts +1 -1
- package/dist/components/features/chat/open-repository-modal.d.ts +2 -1
- package/dist/components/features/chat/pasted-image-upload-as-file-button.d.ts +1 -1
- package/dist/components/features/chat/path-component.d.ts +1 -1
- package/dist/components/features/chat/pending-stop-icon.d.ts +1 -1
- package/dist/components/features/chat/pending-user-messages.d.ts +2 -1
- package/dist/components/features/chat/plan-preview.d.ts +1 -1
- package/dist/components/features/chat/remove-file-button.d.ts +1 -1
- package/dist/components/features/chat/skill-install-restart-banner.d.ts +1 -1
- package/dist/components/features/chat/success-indicator.d.ts +1 -1
- package/dist/components/features/chat/task-tracking/status-badge.d.ts +1 -1
- package/dist/components/features/chat/task-tracking/status-icon.d.ts +1 -1
- package/dist/components/features/chat/task-tracking/task-item.d.ts +1 -1
- package/dist/components/features/chat/task-tracking/task-list-section.d.ts +1 -1
- package/dist/components/features/chat/tool-visualizers/primitives/code-block.d.ts +2 -1
- package/dist/components/features/chat/tool-visualizers/primitives/diff-view.d.ts +2 -1
- package/dist/components/features/chat/tool-visualizers/primitives/file-path-chip.d.ts +2 -1
- package/dist/components/features/chat/tool-visualizers/primitives/key-value-grid.d.ts +1 -1
- package/dist/components/features/chat/tool-visualizers/primitives/output-pane.d.ts +2 -1
- package/dist/components/features/chat/typing-indicator.d.ts +1 -1
- package/dist/components/features/chat/uploaded-file.d.ts +1 -1
- package/dist/components/features/chat/uploaded-files.d.ts +1 -1
- package/dist/components/features/chat/uploaded-image.d.ts +2 -1
- package/dist/components/features/chat/user-message-body.d.ts +2 -2
- package/dist/components/features/chat/waiting-for-runtime-message.d.ts +1 -1
- package/dist/components/features/chat/workspace-mode-icon.d.ts +1 -1
- package/dist/components/features/chat/workspace-mode-selector.d.ts +1 -1
- package/dist/components/features/command-menu/command-menu-trigger.d.ts +2 -1
- package/dist/components/features/context-menu/archived-disabled-tooltip.d.ts +1 -1
- package/dist/components/features/context-menu/context-menu-icon-text-with-description.d.ts +1 -1
- package/dist/components/features/context-menu/context-menu-icon-text.d.ts +1 -1
- package/dist/components/features/context-menu/context-menu-list-item.cjs +1 -1
- package/dist/components/features/context-menu/context-menu-list-item.cjs.map +1 -1
- package/dist/components/features/context-menu/context-menu-list-item.d.ts +2 -1
- package/dist/components/features/context-menu/context-menu-list-item.js +2 -1
- package/dist/components/features/context-menu/context-menu-list-item.js.map +1 -1
- package/dist/components/features/controls/agent-loading.d.ts +1 -1
- package/dist/components/features/controls/agent-status.d.ts +1 -1
- package/dist/components/features/controls/git-tools-submenu.d.ts +1 -1
- package/dist/components/features/controls/macros-submenu.d.ts +1 -1
- package/dist/components/features/controls/server-status-context-menu-icon-text.d.ts +1 -1
- package/dist/components/features/controls/server-status-context-menu.d.ts +1 -1
- package/dist/components/features/controls/server-status.d.ts +1 -1
- package/dist/components/features/controls/tools-context-menu-icon-text.d.ts +1 -1
- package/dist/components/features/controls/tools-context-menu.d.ts +1 -1
- package/dist/components/features/controls/tools.d.ts +2 -1
- package/dist/components/features/conversation/conversation-loading.d.ts +1 -1
- package/dist/components/features/conversation/conversation-main/chat-interface-wrapper.d.ts +1 -1
- package/dist/components/features/conversation/conversation-main/conversation-main.d.ts +1 -1
- package/dist/components/features/conversation/conversation-main/conversation-mobile-panel-page.d.ts +2 -1
- package/dist/components/features/conversation/conversation-name-context-menu-icon-text.d.ts +1 -1
- package/dist/components/features/conversation/conversation-name-context-menu.d.ts +1 -1
- package/dist/components/features/conversation/conversation-name-with-status.d.ts +2 -1
- package/dist/components/features/conversation/conversation-name.d.ts +2 -1
- package/dist/components/features/conversation/conversation-tab-empty-state.d.ts +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/conversation-tab-content-crossfade.d.ts +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/conversation-tab-content.d.ts +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/suspense-pending-fallback.d.ts +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/tab-container.d.ts +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/tab-content-area.d.ts +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/tab-wrapper.d.ts +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tab-nav.d.ts +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.d.ts +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs.d.ts +1 -1
- package/dist/components/features/conversation/conversation-tabs/drawer-vscode-link.d.ts +1 -1
- package/dist/components/features/conversation/metrics-modal/context-window-section.d.ts +1 -1
- package/dist/components/features/conversation/metrics-modal/cost-section.d.ts +1 -1
- package/dist/components/features/conversation/metrics-modal/empty-state.d.ts +1 -1
- package/dist/components/features/conversation/metrics-modal/metric-row.d.ts +1 -1
- package/dist/components/features/conversation/metrics-modal/metrics-modal-header.d.ts +1 -1
- package/dist/components/features/conversation/metrics-modal/metrics-modal.d.ts +1 -1
- package/dist/components/features/conversation/metrics-modal/usage-section.d.ts +1 -1
- package/dist/components/features/conversation/right-panel-toggle.d.ts +1 -1
- package/dist/components/features/conversation/transcript-export-modal.d.ts +2 -1
- package/dist/components/features/conversation-panel/budget-display.d.ts +2 -1
- package/dist/components/features/conversation-panel/budget-progress-bar.d.ts +1 -1
- package/dist/components/features/conversation-panel/budget-usage-text.d.ts +2 -1
- package/dist/components/features/conversation-panel/cloud-new-conversation-menu.d.ts +1 -1
- package/dist/components/features/conversation-panel/compact-conversation-row.cjs +1 -1
- package/dist/components/features/conversation-panel/compact-conversation-row.cjs.map +1 -1
- package/dist/components/features/conversation-panel/compact-conversation-row.d.ts +2 -1
- package/dist/components/features/conversation-panel/compact-conversation-row.js +38 -37
- package/dist/components/features/conversation-panel/compact-conversation-row.js.map +1 -1
- package/dist/components/features/conversation-panel/confirm-delete-modal.d.ts +1 -1
- package/dist/components/features/conversation-panel/confirm-stop-modal.d.ts +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.d.ts +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.d.ts +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.d.ts +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-header.d.ts +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.d.ts +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-skeleton.d.ts +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-title.d.ts +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card.d.ts +2 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-repo-link.d.ts +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-status-badges.d.ts +1 -1
- package/dist/components/features/conversation-panel/conversation-card/no-repository.d.ts +1 -1
- package/dist/components/features/conversation-panel/conversation-group-folder-list.d.ts +1 -1
- package/dist/components/features/conversation-panel/conversation-group-folder-row.d.ts +1 -1
- package/dist/components/features/conversation-panel/conversation-panel-filter-menu.d.ts +1 -1
- package/dist/components/features/conversation-panel/conversation-panel-new-thread-picker.d.ts +1 -1
- package/dist/components/features/conversation-panel/conversation-panel-pinned-section.d.ts +1 -1
- package/dist/components/features/conversation-panel/conversation-panel.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-panel.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-panel.d.ts +2 -1
- package/dist/components/features/conversation-panel/conversation-panel.js +221 -220
- package/dist/components/features/conversation-panel/conversation-panel.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-status-dot.d.ts +1 -1
- package/dist/components/features/conversation-panel/exit-conversation-modal.d.ts +1 -1
- package/dist/components/features/conversation-panel/hook-event-item.d.ts +1 -1
- package/dist/components/features/conversation-panel/hook-matcher-content.d.ts +1 -1
- package/dist/components/features/conversation-panel/hooks-empty-state.d.ts +1 -1
- package/dist/components/features/conversation-panel/hooks-loading-state.d.ts +1 -1
- package/dist/components/features/conversation-panel/hooks-modal-header.d.ts +1 -1
- package/dist/components/features/conversation-panel/hooks-modal.d.ts +1 -1
- package/dist/components/features/conversation-panel/local-new-conversation-menu.d.ts +1 -1
- package/dist/components/features/conversation-panel/menu-heading.d.ts +1 -1
- package/dist/components/features/conversation-panel/menu-row.d.ts +1 -1
- package/dist/components/features/conversation-panel/menu-separator.d.ts +1 -1
- package/dist/components/features/conversation-panel/new-conversation-button.d.ts +2 -1
- package/dist/components/features/conversation-panel/plugins-modal.d.ts +1 -1
- package/dist/components/features/conversation-panel/runtime-waiting-state.d.ts +1 -1
- package/dist/components/features/conversation-panel/skill-content.d.ts +1 -1
- package/dist/components/features/conversation-panel/skill-item.d.ts +1 -1
- package/dist/components/features/conversation-panel/skill-triggers.d.ts +1 -1
- package/dist/components/features/conversation-panel/skills-empty-state.d.ts +1 -1
- package/dist/components/features/conversation-panel/skills-loading-state.d.ts +1 -1
- package/dist/components/features/conversation-panel/skills-modal-header.d.ts +1 -1
- package/dist/components/features/conversation-panel/skills-modal-section.d.ts +1 -1
- package/dist/components/features/conversation-panel/skills-modal.d.ts +1 -1
- package/dist/components/features/conversation-panel/start-task-card/start-task-card-footer.d.ts +1 -1
- package/dist/components/features/conversation-panel/start-task-card/start-task-card-header.d.ts +1 -1
- package/dist/components/features/conversation-panel/start-task-card/start-task-card.d.ts +1 -1
- package/dist/components/features/conversation-panel/start-task-card/start-task-status-badge.d.ts +1 -1
- package/dist/components/features/conversation-panel/start-task-card/start-task-status-indicator.d.ts +1 -1
- package/dist/components/features/conversation-panel/system-message-modal/empty-tools-state.d.ts +1 -1
- package/dist/components/features/conversation-panel/system-message-modal/system-message-content.d.ts +1 -1
- package/dist/components/features/conversation-panel/system-message-modal/system-message-header.d.ts +1 -1
- package/dist/components/features/conversation-panel/system-message-modal/tab-button.d.ts +1 -1
- package/dist/components/features/conversation-panel/system-message-modal/tab-content.d.ts +1 -1
- package/dist/components/features/conversation-panel/system-message-modal/tab-navigation.d.ts +1 -1
- package/dist/components/features/conversation-panel/system-message-modal/toggle-button.d.ts +1 -1
- package/dist/components/features/conversation-panel/system-message-modal/tool-item.d.ts +1 -1
- package/dist/components/features/conversation-panel/system-message-modal/tool-parameters.d.ts +1 -1
- package/dist/components/features/conversation-panel/system-message-modal/tools-list.d.ts +1 -1
- package/dist/components/features/conversation-panel/system-message-modal.d.ts +1 -1
- package/dist/components/features/diff-viewer/commit-list.d.ts +2 -1
- package/dist/components/features/diff-viewer/commit-row.d.ts +2 -1
- package/dist/components/features/diff-viewer/diff-drawer-icon.d.ts +1 -1
- package/dist/components/features/diff-viewer/editor-container.d.ts +1 -1
- package/dist/components/features/diff-viewer/empty-changes-message.d.ts +1 -1
- package/dist/components/features/diff-viewer/file-diff-viewer.d.ts +2 -1
- package/dist/components/features/diff-viewer/loading-spinner.d.ts +1 -1
- package/dist/components/features/files/file-item.d.ts +1 -1
- package/dist/components/features/files/file-list.d.ts +2 -1
- package/dist/components/features/files-tab/file-content-viewer.d.ts +1 -1
- package/dist/components/features/files-tab/file-quick-row.d.ts +1 -1
- package/dist/components/features/files-tab/file-tree-view.d.ts +1 -1
- package/dist/components/features/files-tab/highlighted-source-view.d.ts +1 -1
- package/dist/components/features/files-tab/no-file-selected-message.d.ts +1 -1
- package/dist/components/features/files-tab/segmented-toggle.d.ts +1 -1
- package/dist/components/features/files-tab/tree-node.d.ts +1 -1
- package/dist/components/features/home/featured-automations/automation-health-indicator.d.ts +11 -0
- package/dist/components/features/home/featured-automations/automation-run-activity-metrics.d.ts +18 -0
- package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.d.ts +14 -0
- package/dist/components/features/home/featured-automations/automation-run-health.d.ts +25 -0
- package/dist/components/features/home/featured-automations/build-home-automation-menu-items.d.ts +39 -0
- package/dist/components/features/home/featured-automations/build-pinned-automation-menu-items.d.ts +22 -0
- package/dist/components/features/home/featured-automations/home-automation-activity.d.ts +23 -0
- package/dist/components/features/home/featured-automations/home-automation-menu.d.ts +13 -0
- package/dist/components/features/home/featured-automations/home-automation-run-tooltip.d.ts +12 -0
- package/dist/components/features/home/featured-automations/pinned-automation-card.d.ts +21 -0
- package/dist/components/features/home/featured-automations/pinned-automations-dashboard.d.ts +6 -0
- package/dist/components/features/home/featured-automations/running-automations-list.d.ts +6 -0
- package/dist/components/features/home/git-branch-dropdown/branch-dropdown-menu.d.ts +1 -1
- package/dist/components/features/home/git-branch-dropdown/git-branch-dropdown.d.ts +2 -1
- package/dist/components/features/home/git-provider-dropdown/git-provider-dropdown.d.ts +2 -1
- package/dist/components/features/home/git-repo-dropdown/git-repo-dropdown.d.ts +2 -1
- package/dist/components/features/home/home-chat-launcher.d.ts +1 -1
- package/dist/components/features/home/home-git-control-bar-preview.d.ts +1 -1
- package/dist/components/features/home/home-header/guide-message.d.ts +1 -1
- package/dist/components/features/home/home-header/home-header-title.d.ts +1 -1
- package/dist/components/features/home/home-header/home-header.d.ts +1 -1
- package/dist/components/features/home/llm-not-configured-banner.d.ts +1 -1
- package/dist/components/features/home/new-conversation/create-conversation-button.d.ts +1 -1
- package/dist/components/features/home/new-conversation/new-conversation.d.ts +1 -1
- package/dist/components/features/home/new-conversation.d.ts +1 -1
- package/dist/components/features/home/open-launcher-button.d.ts +1 -1
- package/dist/components/features/home/open-repository-dialog.d.ts +1 -1
- package/dist/components/features/home/open-workspace-dialog.d.ts +1 -1
- package/dist/components/features/home/repo-selection-form.d.ts +2 -1
- package/dist/components/features/home/shared/clear-button.d.ts +2 -1
- package/dist/components/features/home/shared/dropdown-item.d.ts +1 -1
- package/dist/components/features/home/shared/empty-state.d.ts +2 -1
- package/dist/components/features/home/shared/error-message.d.ts +2 -1
- package/dist/components/features/home/shared/generic-dropdown-menu.d.ts +1 -1
- package/dist/components/features/home/shared/loading-spinner.d.ts +2 -1
- package/dist/components/features/home/shared/toggle-button.d.ts +1 -1
- package/dist/components/features/home/tasks/task-card.d.ts +1 -1
- package/dist/components/features/home/tasks/task-group.d.ts +1 -1
- package/dist/components/features/home/tasks/task-issue-number.d.ts +1 -1
- package/dist/components/features/home/tasks/task-item-title.d.ts +1 -1
- package/dist/components/features/home/tasks/task-suggestions-skeleton.d.ts +1 -1
- package/dist/components/features/home/tasks/task-suggestions.d.ts +1 -1
- package/dist/components/features/home/workspace-dropdown/folder-browser-modal.d.ts +2 -1
- package/dist/components/features/home/workspace-dropdown/manage-workspaces-modal.d.ts +2 -1
- package/dist/components/features/home/workspace-dropdown/workspace-dropdown.d.ts +2 -1
- package/dist/components/features/home/workspace-selection-form.d.ts +2 -1
- package/dist/components/features/images/image-carousel.d.ts +2 -1
- package/dist/components/features/images/image-preview.d.ts +1 -1
- package/dist/components/features/images/thumbnail.d.ts +1 -1
- package/dist/components/features/launch/plugin-launch-modal.d.ts +2 -1
- package/dist/components/features/launch/plugin-launch-parameter-input.d.ts +1 -1
- package/dist/components/features/launch/plugin-launch-plugin-section.d.ts +1 -1
- package/dist/components/features/manifest/manifest-form-field.d.ts +1 -1
- package/dist/components/features/manifest/manifest-icons.d.ts +13 -0
- package/dist/components/features/manifest/manifest-overview-tiles.d.ts +19 -0
- package/dist/components/features/manifest/manifest-prerequisites-step.d.ts +1 -1
- package/dist/components/features/manifest/manifest-review-step.d.ts +1 -1
- package/dist/components/features/manifest/manifest-setup-dialog.d.ts +1 -1
- package/dist/components/features/manifest/manifest-subpage-layout.d.ts +23 -0
- package/dist/components/features/markdown/anchor.d.ts +1 -1
- package/dist/components/features/markdown/blockquote.d.ts +1 -1
- package/dist/components/features/markdown/code.d.ts +1 -1
- package/dist/components/features/markdown/headings.d.ts +6 -6
- package/dist/components/features/markdown/horizontal-rule.d.ts +1 -1
- package/dist/components/features/markdown/list.d.ts +3 -3
- package/dist/components/features/markdown/markdown-renderer.d.ts +1 -1
- package/dist/components/features/markdown/markdown-table-scroll.d.ts +1 -1
- package/dist/components/features/markdown/paragraph.d.ts +1 -1
- package/dist/components/features/markdown/plan-components.d.ts +36 -36
- package/dist/components/features/markdown/table.d.ts +3 -3
- package/dist/components/features/mcp-logo-badge.d.ts +1 -1
- package/dist/components/features/mcp-page/custom-server-editor.cjs +1 -1
- package/dist/components/features/mcp-page/custom-server-editor.cjs.map +1 -1
- package/dist/components/features/mcp-page/custom-server-editor.d.ts +2 -1
- package/dist/components/features/mcp-page/custom-server-editor.js +5 -0
- package/dist/components/features/mcp-page/custom-server-editor.js.map +1 -1
- package/dist/components/features/mcp-page/install-server-modal.cjs +1 -1
- package/dist/components/features/mcp-page/install-server-modal.cjs.map +1 -1
- package/dist/components/features/mcp-page/install-server-modal.d.ts +2 -1
- package/dist/components/features/mcp-page/install-server-modal.js +117 -118
- package/dist/components/features/mcp-page/install-server-modal.js.map +1 -1
- package/dist/components/features/mcp-page/installed-server-card.d.ts +2 -1
- package/dist/components/features/mcp-page/installed-servers-section.d.ts +1 -1
- package/dist/components/features/mcp-page/marketplace-card.d.ts +1 -1
- package/dist/components/features/mcp-page/marketplace-section.d.ts +1 -1
- package/dist/components/features/mcp-page/mcp-logo-stack-badge.d.ts +1 -1
- package/dist/components/features/mcp-page/mcp-section-filter-dropdown.d.ts +1 -1
- package/dist/components/features/mcp-page/mcp-server-health.d.ts +2 -1
- package/dist/components/features/mcp-page/mcp-toolbar.d.ts +1 -1
- package/dist/components/features/mcp-page/save-as-secret-toggle.d.ts +1 -1
- package/dist/components/features/onboarding/onboarding-host.d.ts +1 -1
- package/dist/components/features/onboarding/onboarding-modal.d.ts +2 -1
- package/dist/components/features/onboarding/onboarding-progress-bar.d.ts +1 -1
- package/dist/components/features/onboarding/steps/check-backend-step.d.ts +2 -1
- package/dist/components/features/onboarding/steps/choose-agent-step.d.ts +3 -2
- package/dist/components/features/onboarding/steps/say-hello-step.d.ts +2 -1
- package/dist/components/features/onboarding/steps/setup-acp-secrets-step.d.ts +2 -1
- package/dist/components/features/onboarding/steps/setup-llm-step.d.ts +2 -1
- package/dist/components/features/plugins/add-plugin-modal.d.ts +2 -1
- package/dist/components/features/plugins/plugin-card.d.ts +2 -1
- package/dist/components/features/plugins/plugin-detail-modal.d.ts +1 -1
- package/dist/components/features/plugins/plugin-files-section.d.ts +2 -1
- package/dist/components/features/plugins/plugin-picker-card.d.ts +1 -1
- package/dist/components/features/plugins/plugin-picker-modal.d.ts +1 -1
- package/dist/components/features/plugins/plugin-picker-trigger.d.ts +1 -1
- package/dist/components/features/plugins/plugin-picker.d.ts +1 -1
- package/dist/components/features/plugins/plugins-toolbar.d.ts +1 -1
- package/dist/components/features/settings/acp-auth-status-banner.d.ts +1 -1
- package/dist/components/features/settings/acp-conflict-warnings.d.ts +2 -1
- package/dist/components/features/settings/acp-credentials-section.d.ts +1 -1
- package/dist/components/features/settings/acp-secret-field.d.ts +2 -1
- package/dist/components/features/settings/agent-canvas-update-card.d.ts +1 -1
- package/dist/components/features/settings/agent-profiles/agent-profile-actions-menu.d.ts +1 -1
- package/dist/components/features/settings/agent-profiles/agent-profile-row.d.ts +1 -1
- package/dist/components/features/settings/agent-profiles/agent-profiles-body.d.ts +1 -1
- package/dist/components/features/settings/agent-profiles/agent-profiles-local-view.d.ts +1 -1
- package/dist/components/features/settings/agent-profiles/agent-profiles-manager.d.ts +1 -1
- package/dist/components/features/settings/agent-profiles/delete-agent-profile-modal.d.ts +1 -1
- package/dist/components/features/settings/agent-server-onboarding.d.ts +2 -1
- package/dist/components/features/settings/api-key-modal-base.d.ts +1 -1
- package/dist/components/features/settings/app-settings/app-settings-inputs-skeleton.d.ts +1 -1
- package/dist/components/features/settings/app-settings/language-input.d.ts +1 -1
- package/dist/components/features/settings/app-settings/theme-input.d.ts +2 -1
- package/dist/components/features/settings/backend-synced-settings-badge.d.ts +1 -1
- package/dist/components/features/settings/banner-message.d.ts +1 -1
- package/dist/components/features/settings/cloud-settings-link.d.ts +1 -1
- package/dist/components/features/settings/input-skeleton.d.ts +1 -1
- package/dist/components/features/settings/integrations-settings-link.d.ts +1 -1
- package/dist/components/features/settings/key-status-icon.d.ts +1 -1
- package/dist/components/features/settings/llm-profiles/delete-profile-modal.d.ts +1 -1
- package/dist/components/features/settings/llm-profiles/llm-profiles-manager.d.ts +1 -1
- package/dist/components/features/settings/llm-profiles/llm-settings-local-view.d.ts +2 -1
- package/dist/components/features/settings/llm-profiles/profile-actions-menu-item.d.ts +1 -1
- package/dist/components/features/settings/llm-profiles/profile-actions-menu.d.ts +1 -1
- package/dist/components/features/settings/llm-profiles/profile-row.d.ts +1 -1
- package/dist/components/features/settings/llm-profiles/profiles-body.d.ts +1 -1
- package/dist/components/features/settings/llm-profiles/rename-profile-modal.d.ts +1 -1
- package/dist/components/features/settings/llm-settings/llm-settings-inputs-skeleton.d.ts +1 -1
- package/dist/components/features/settings/llm-settings/openai-subscription-auth-card.d.ts +2 -1
- package/dist/components/features/settings/mcp-settings/mcp-server-form.cjs +1 -1
- package/dist/components/features/settings/mcp-settings/mcp-server-form.cjs.map +1 -1
- package/dist/components/features/settings/mcp-settings/mcp-server-form.d.ts +2 -1
- package/dist/components/features/settings/mcp-settings/mcp-server-form.js +2 -1
- package/dist/components/features/settings/mcp-settings/mcp-server-form.js.map +1 -1
- package/dist/components/features/settings/mcp-settings/mcp-server-list-item.d.ts +1 -1
- package/dist/components/features/settings/mcp-settings/mcp-server-list.d.ts +1 -1
- package/dist/components/features/settings/mobile-header.d.ts +1 -1
- package/dist/components/features/settings/optional-tag.d.ts +1 -1
- package/dist/components/features/settings/sdk-settings/field-help.d.ts +1 -1
- package/dist/components/features/settings/sdk-settings/schema-field.d.ts +2 -1
- package/dist/components/features/settings/sdk-settings/sdk-section-page.d.ts +1 -1
- package/dist/components/features/settings/sdk-settings/view-toggle.d.ts +1 -1
- package/dist/components/features/settings/secrets-settings/secret-form.d.ts +2 -1
- package/dist/components/features/settings/secrets-settings/secret-list-item.d.ts +2 -2
- package/dist/components/features/settings/settings-desktop-sidebar.d.ts +1 -1
- package/dist/components/features/settings/settings-dropdown-input.d.ts +1 -1
- package/dist/components/features/settings/settings-layout.d.ts +1 -1
- package/dist/components/features/settings/settings-mobile-drawer.d.ts +1 -1
- package/dist/components/features/settings/settings-mobile-hub.d.ts +1 -1
- package/dist/components/features/settings/settings-nav-divider.d.ts +1 -1
- package/dist/components/features/settings/settings-nav-header.d.ts +1 -1
- package/dist/components/features/settings/settings-nav-link.d.ts +1 -1
- package/dist/components/features/settings/settings-navigation.d.ts +1 -1
- package/dist/components/features/settings/settings-switch.d.ts +1 -1
- package/dist/components/features/settings/subtext-skeleton.d.ts +1 -1
- package/dist/components/features/settings/switch-skeleton.d.ts +1 -1
- package/dist/components/features/settings/upgrade-banner.d.ts +1 -1
- package/dist/components/features/settings/upgrade-button.d.ts +1 -1
- package/dist/components/features/sidebar/avatar.d.ts +1 -1
- package/dist/components/features/sidebar/sidebar-collapsed-icon-slot.d.ts +1 -1
- package/dist/components/features/sidebar/sidebar-conversation-list.d.ts +1 -1
- package/dist/components/features/sidebar/sidebar-mobile-menu-bar.d.ts +1 -1
- package/dist/components/features/sidebar/sidebar-mobile-menu-toggle.d.ts +1 -1
- package/dist/components/features/sidebar/sidebar-mobile-nav-context.d.ts +1 -1
- package/dist/components/features/sidebar/sidebar-nav-link.d.ts +1 -1
- package/dist/components/features/sidebar/sidebar-rail-body.d.ts +1 -1
- package/dist/components/features/sidebar/sidebar.d.ts +2 -1
- package/dist/components/features/sidebar/user-avatar.d.ts +1 -1
- package/dist/components/features/skills/add-skill-modal.d.ts +2 -1
- package/dist/components/features/skills/extensions-mobile-hub.d.ts +1 -1
- package/dist/components/features/skills/extensions-navigation.d.ts +1 -1
- package/dist/components/features/skills/skill-card-pill-row.d.ts +1 -1
- package/dist/components/features/skills/skill-card.d.ts +2 -1
- package/dist/components/features/skills/skill-detail-modal.d.ts +2 -1
- package/dist/components/features/skills/skill-facet-rail.d.ts +8 -0
- package/dist/components/features/skills/skill-facet-row.d.ts +13 -0
- package/dist/components/features/skills/skill-filter.d.ts +34 -0
- package/dist/components/features/skills/skill-filters-modal.d.ts +10 -0
- package/dist/components/features/skills/skill-icon-badge.d.ts +1 -1
- package/dist/components/features/skills/skill-type-badge.d.ts +1 -1
- package/dist/components/features/skills/skills-toolbar.d.ts +3 -4
- package/dist/components/features/suggestions/suggestion-item.d.ts +1 -1
- package/dist/components/features/suggestions/suggestions.d.ts +1 -1
- package/dist/components/features/terminal/empty-terminal-message.d.ts +1 -1
- package/dist/components/features/terminal/terminal.d.ts +1 -1
- package/dist/components/features/tips/random-tip.d.ts +2 -1
- package/dist/components/providers/agent-server-ui-providers.d.ts +1 -1
- package/dist/components/providers/agent-server-ui-root.d.ts +1 -1
- package/dist/components/providers/telemetry-provider.d.ts +1 -1
- package/dist/components/shared/action-tooltip.d.ts +1 -1
- package/dist/components/shared/agent-brand-icon.d.ts +1 -1
- package/dist/components/shared/badge.d.ts +1 -1
- package/dist/components/shared/buttons/back-nav-button-content.d.ts +1 -1
- package/dist/components/shared/buttons/circle-plus-check-toggle.d.ts +3 -2
- package/dist/components/shared/buttons/conversation-confirmation-buttons.d.ts +1 -1
- package/dist/components/shared/buttons/copy-to-clipboard-button.d.ts +1 -1
- package/dist/components/shared/buttons/copyable-content-wrapper.d.ts +1 -1
- package/dist/components/shared/buttons/modal-button.d.ts +1 -1
- package/dist/components/shared/buttons/openhands-logo-button.d.ts +1 -1
- package/dist/components/shared/buttons/remove-button.d.ts +1 -1
- package/dist/components/shared/buttons/scroll-to-bottom-button.d.ts +1 -1
- package/dist/components/shared/buttons/styled-tooltip.d.ts +1 -1
- package/dist/components/shared/filters/enum-filter-dropdown.cjs +1 -1
- package/dist/components/shared/filters/enum-filter-dropdown.cjs.map +1 -1
- package/dist/components/shared/filters/enum-filter-dropdown.d.ts +6 -2
- package/dist/components/shared/filters/enum-filter-dropdown.js +13 -13
- package/dist/components/shared/filters/enum-filter-dropdown.js.map +1 -1
- package/dist/components/shared/git-provider-icon.d.ts +1 -1
- package/dist/components/shared/hook-execution-event-message.d.ts +2 -1
- package/dist/components/shared/loading-spinner.d.ts +1 -1
- package/dist/components/shared/modals/confirmation-modal.d.ts +1 -1
- package/dist/components/shared/modals/confirmation-modals/base-modal.d.ts +3 -3
- package/dist/components/shared/modals/confirmation-modals/danger-modal.d.ts +1 -1
- package/dist/components/shared/modals/modal-body.d.ts +1 -1
- package/dist/components/shared/modals/modal-close-button.d.ts +1 -1
- package/dist/components/shared/modals/settings/model-selector.d.ts +2 -1
- package/dist/components/shared/modals/settings/settings-form.d.ts +2 -1
- package/dist/components/shared/modals/settings/settings-modal.d.ts +1 -1
- package/dist/components/shared/navigation-link.cjs +1 -1
- package/dist/components/shared/navigation-link.cjs.map +1 -1
- package/dist/components/shared/navigation-link.js +11 -7
- package/dist/components/shared/navigation-link.js.map +1 -1
- package/dist/components/shared/risk-alert.d.ts +1 -1
- package/dist/components/shared/text-shimmer.d.ts +1 -1
- package/dist/components/ui/resize-handle.d.ts +1 -1
- package/dist/config/defaults.cjs +1 -1
- package/dist/config/defaults.cjs.map +1 -1
- package/dist/config/defaults.js +3 -3
- package/dist/config/defaults.js.map +1 -1
- package/dist/context/navigation-context.d.ts +1 -1
- package/dist/context/scroll-context.d.ts +1 -1
- package/dist/contexts/active-backend-context.d.ts +1 -1
- package/dist/contexts/conversation-websocket-context.d.ts +1 -1
- package/dist/contexts/settings-section-header-context.d.ts +1 -1
- package/dist/contexts/websocket-provider-wrapper.d.ts +1 -1
- package/dist/fixtures/home-automations-demo.d.ts +19 -0
- package/dist/hooks/mutation/use-add-mcp-server.cjs +1 -1
- package/dist/hooks/mutation/use-add-mcp-server.cjs.map +1 -1
- package/dist/hooks/mutation/use-add-mcp-server.js +10 -14
- package/dist/hooks/mutation/use-add-mcp-server.js.map +1 -1
- package/dist/hooks/mutation/use-delete-mcp-server.cjs +1 -1
- package/dist/hooks/mutation/use-delete-mcp-server.cjs.map +1 -1
- package/dist/hooks/mutation/use-delete-mcp-server.d.ts +2 -7
- package/dist/hooks/mutation/use-delete-mcp-server.js +8 -34
- package/dist/hooks/mutation/use-delete-mcp-server.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.js +8 -4
- package/dist/hooks/mutation/use-save-settings.js.map +1 -1
- package/dist/hooks/mutation/use-update-mcp-server.cjs +1 -1
- package/dist/hooks/mutation/use-update-mcp-server.cjs.map +1 -1
- package/dist/hooks/mutation/use-update-mcp-server.d.ts +1 -1
- package/dist/hooks/mutation/use-update-mcp-server.js +31 -16
- package/dist/hooks/mutation/use-update-mcp-server.js.map +1 -1
- package/dist/hooks/query/use-active-conversation.d.ts +1 -1
- package/dist/hooks/query/use-agent-profiles.d.ts +1 -1
- package/dist/hooks/query/use-app-installations.d.ts +1 -1
- package/dist/hooks/query/use-automation-detail.d.ts +2 -2
- package/dist/hooks/query/use-automation-health.d.ts +2 -0
- package/dist/hooks/query/use-automations.d.ts +5 -1
- package/dist/hooks/query/use-bash-command-logs.d.ts +1 -1
- package/dist/hooks/query/use-cloud-sandbox.d.ts +1 -1
- package/dist/hooks/query/use-commit-changes.d.ts +1 -1
- package/dist/hooks/query/use-config.d.ts +1 -1
- package/dist/hooks/query/use-conversation-history.d.ts +1 -1
- package/dist/hooks/query/use-conversation-hooks.d.ts +1 -1
- package/dist/hooks/query/use-conversation-skills.d.ts +1 -1
- package/dist/hooks/query/use-get-secrets.d.ts +1 -1
- package/dist/hooks/query/use-home-automations.d.ts +20 -0
- package/dist/hooks/query/use-latest-automation-runs.d.ts +19 -0
- package/dist/hooks/query/use-llm-profiles.d.ts +1 -1
- package/dist/hooks/query/use-llm-subscription-models.d.ts +1 -1
- package/dist/hooks/query/use-llm-subscription-status.d.ts +1 -1
- package/dist/hooks/query/use-local-git-info.d.ts +1 -1
- package/dist/hooks/query/use-local-workspaces.d.ts +1 -1
- package/dist/hooks/query/use-manifest-capabilities.d.ts +2 -0
- package/dist/hooks/query/use-plugin-file-content.d.ts +1 -1
- package/dist/hooks/query/use-plugins-marketplace.d.ts +1 -1
- package/dist/hooks/query/use-provider-models.d.ts +1 -1
- package/dist/hooks/query/use-search-branches.d.ts +1 -1
- package/dist/hooks/query/use-search-providers.d.ts +1 -1
- package/dist/hooks/query/use-search-repositories.d.ts +1 -1
- package/dist/hooks/query/use-search-subdirs.d.ts +2 -2
- package/dist/hooks/query/use-settings.d.ts +2 -2
- package/dist/hooks/query/use-skills.d.ts +1 -1
- package/dist/hooks/query/use-start-tasks.d.ts +1 -1
- package/dist/hooks/query/use-sub-conversation-task-polling.d.ts +1 -1
- package/dist/hooks/query/use-sub-conversations.d.ts +1 -1
- package/dist/hooks/query/use-suggested-tasks.d.ts +1 -1
- package/dist/hooks/query/use-task-polling.d.ts +2 -2
- package/dist/hooks/query/use-unified-get-git-changes.d.ts +1 -1
- package/dist/hooks/query/use-unified-git-diff.d.ts +1 -1
- package/dist/hooks/query/use-user-conversation.d.ts +1 -1
- package/dist/hooks/query/use-workspace-file-content.d.ts +1 -1
- package/dist/hooks/use-backend-scoped-path.cjs +2 -0
- package/dist/hooks/use-backend-scoped-path.cjs.map +1 -0
- package/dist/hooks/use-backend-scoped-path.d.ts +10 -0
- package/dist/hooks/use-backend-scoped-path.js +13 -0
- package/dist/hooks/use-backend-scoped-path.js.map +1 -0
- package/dist/hooks/use-home-automation-actions.d.ts +23 -0
- package/dist/hooks/use-home-pinned-automations.d.ts +26 -0
- package/dist/hooks/use-tracking.cjs +1 -1
- package/dist/hooks/use-tracking.cjs.map +1 -1
- package/dist/hooks/use-tracking.d.ts +4 -0
- package/dist/hooks/use-tracking.js +6 -0
- package/dist/hooks/use-tracking.js.map +1 -1
- package/dist/i18n/declaration.cjs +1 -1
- package/dist/i18n/declaration.cjs.map +1 -1
- package/dist/i18n/declaration.d.ts +68 -2
- package/dist/i18n/declaration.js +1 -1
- package/dist/i18n/declaration.js.map +1 -1
- package/dist/i18n/translation.cjs +2 -2
- package/dist/i18n/translation.cjs.map +1 -1
- package/dist/i18n/translation.js +1169 -47
- package/dist/i18n/translation.js.map +1 -1
- package/dist/icons/code-pill.d.ts +1 -1
- package/dist/locales/ar/openhands.json +70 -4
- package/dist/locales/ca/openhands.json +70 -4
- package/dist/locales/de/openhands.json +70 -4
- package/dist/locales/en/openhands.json +70 -4
- package/dist/locales/es/openhands.json +70 -4
- package/dist/locales/fr/openhands.json +70 -4
- package/dist/locales/it/openhands.json +70 -4
- package/dist/locales/ja/openhands.json +70 -4
- package/dist/locales/ko-KR/openhands.json +70 -4
- package/dist/locales/no/openhands.json +70 -4
- package/dist/locales/pt/openhands.json +70 -4
- package/dist/locales/tr/openhands.json +70 -4
- package/dist/locales/uk/openhands.json +70 -4
- package/dist/locales/zh-CN/openhands.json +70 -4
- package/dist/locales/zh-TW/openhands.json +70 -4
- package/dist/manifests/automation-insights.d.ts +64 -0
- package/dist/manifests/automation-interface.cjs +1 -1
- package/dist/manifests/automation-interface.cjs.map +1 -1
- package/dist/manifests/automation-interface.d.ts +33 -1
- package/dist/manifests/automation-interface.js +2 -1
- package/dist/manifests/automation-interface.js.map +1 -1
- package/dist/manifests/interface-validation.cjs +1 -1
- package/dist/manifests/interface-validation.cjs.map +1 -1
- package/dist/manifests/interface-validation.js +228 -50
- package/dist/manifests/interface-validation.js.map +1 -1
- package/dist/manifests/manifest-template.d.ts +2 -0
- package/dist/manifests/manifest-validation.cjs.map +1 -1
- package/dist/manifests/manifest-validation.js.map +1 -1
- package/dist/manifests/types.cjs +1 -1
- package/dist/manifests/types.cjs.map +1 -1
- package/dist/manifests/types.d.ts +128 -0
- package/dist/manifests/types.js +35 -2
- package/dist/manifests/types.js.map +1 -1
- package/dist/mockServiceWorker.js +21 -9
- package/dist/node_modules/@openhands/extensions/automations/catalog/upstream-fork-sync/manifest.cjs +9 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/upstream-fork-sync/manifest.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/upstream-fork-sync/manifest.js +74 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/upstream-fork-sync/manifest.js.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog-index.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog-index.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog-index.js +6 -4
- package/dist/node_modules/@openhands/extensions/automations/catalog-index.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/interface.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/automations/interface.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/interface.js +126 -5
- package/dist/node_modules/@openhands/extensions/automations/interface.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/skills/index.cjs +161 -53
- package/dist/node_modules/@openhands/extensions/skills/index.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/skills/index.js +112 -50
- package/dist/node_modules/@openhands/extensions/skills/index.js.map +1 -1
- package/dist/node_modules/@tanstack/query-core/build/modern/utils.cjs +1 -1
- package/dist/node_modules/@tanstack/query-core/build/modern/utils.cjs.map +1 -1
- package/dist/node_modules/@tanstack/query-core/build/modern/utils.js +12 -1
- package/dist/node_modules/@tanstack/query-core/build/modern/utils.js.map +1 -1
- package/dist/node_modules/@tanstack/react-query/build/modern/useBaseQuery.cjs +1 -1
- package/dist/node_modules/@tanstack/react-query/build/modern/useBaseQuery.cjs.map +1 -1
- package/dist/node_modules/@tanstack/react-query/build/modern/useBaseQuery.js +14 -12
- package/dist/node_modules/@tanstack/react-query/build/modern/useBaseQuery.js.map +1 -1
- package/dist/node_modules/html-parse-stringify/dist/esm/html-parse-stringify.cjs +2 -0
- package/dist/node_modules/html-parse-stringify/dist/esm/html-parse-stringify.cjs.map +1 -0
- package/dist/node_modules/html-parse-stringify/dist/esm/html-parse-stringify.js +177 -0
- package/dist/node_modules/html-parse-stringify/dist/esm/html-parse-stringify.js.map +1 -0
- package/dist/node_modules/i18next/dist/esm/i18next.cjs +1 -1
- package/dist/node_modules/i18next/dist/esm/i18next.cjs.map +1 -1
- package/dist/node_modules/i18next/dist/esm/i18next.js +31 -24
- package/dist/node_modules/i18next/dist/esm/i18next.js.map +1 -1
- package/dist/node_modules/posthog-js/dist/module.cjs +2 -2
- package/dist/node_modules/posthog-js/dist/module.cjs.map +1 -1
- package/dist/node_modules/posthog-js/dist/module.js +2055 -1929
- package/dist/node_modules/posthog-js/dist/module.js.map +1 -1
- package/dist/node_modules/react-i18next/dist/es/TransWithoutContext.cjs +1 -1
- package/dist/node_modules/react-i18next/dist/es/TransWithoutContext.cjs.map +1 -1
- package/dist/node_modules/react-i18next/dist/es/TransWithoutContext.js +43 -62
- package/dist/node_modules/react-i18next/dist/es/TransWithoutContext.js.map +1 -1
- package/dist/node_modules/react-i18next/dist/es/useTranslation.cjs +1 -1
- package/dist/node_modules/react-i18next/dist/es/useTranslation.cjs.map +1 -1
- package/dist/node_modules/react-i18next/dist/es/useTranslation.js +12 -6
- package/dist/node_modules/react-i18next/dist/es/useTranslation.js.map +1 -1
- package/dist/node_modules/tailwind-merge/dist/bundle-mjs.cjs +1 -1
- package/dist/node_modules/tailwind-merge/dist/bundle-mjs.cjs.map +1 -1
- package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js +352 -310
- package/dist/node_modules/tailwind-merge/dist/bundle-mjs.js.map +1 -1
- package/dist/package.cjs +1 -1
- package/dist/package.cjs.map +1 -1
- package/dist/package.js +34 -33
- package/dist/package.js.map +1 -1
- package/dist/routes/agent-settings.d.ts +3 -2
- package/dist/routes/app-settings.d.ts +2 -1
- package/dist/routes/browser-tab.d.ts +1 -1
- package/dist/routes/changes-tab.d.ts +2 -1
- package/dist/routes/commits-tab.d.ts +1 -1
- package/dist/routes/conversation.d.ts +2 -1
- package/dist/routes/files-tab.d.ts +1 -1
- package/dist/routes/llm-settings.d.ts +3 -2
- package/dist/routes/mcp.cjs +1 -1
- package/dist/routes/mcp.cjs.map +1 -1
- package/dist/routes/mcp.d.ts +2 -1
- package/dist/routes/mcp.js +1 -1
- package/dist/routes/mcp.js.map +1 -1
- package/dist/routes/planner-tab.d.ts +2 -1
- package/dist/routes/secrets-settings.d.ts +2 -1
- package/dist/routes/task-list-tab.d.ts +1 -1
- package/dist/services/settings.cjs +1 -1
- package/dist/services/settings.cjs.map +1 -1
- package/dist/services/settings.js +3 -7
- package/dist/services/settings.js.map +1 -1
- package/dist/types/automation.d.ts +16 -1
- package/dist/types/mcp-auth.cjs.map +1 -1
- package/dist/types/mcp-auth.d.ts +5 -41
- package/dist/types/mcp-auth.js.map +1 -1
- package/dist/types/mcp-server.d.ts +17 -32
- package/dist/types/settings.d.ts +8 -28
- package/dist/ui/card-title.d.ts +1 -1
- package/dist/ui/card.d.ts +1 -1
- package/dist/ui/combobox-caret.d.ts +3 -3
- package/dist/ui/context-menu.cjs +1 -1
- package/dist/ui/context-menu.cjs.map +1 -1
- package/dist/ui/context-menu.d.ts +3 -2
- package/dist/ui/context-menu.js +10 -9
- package/dist/ui/context-menu.js.map +1 -1
- package/dist/ui/divider.d.ts +1 -1
- package/dist/ui/dropdown/clear-button.d.ts +1 -1
- package/dist/ui/dropdown/dropdown-input.d.ts +1 -1
- package/dist/ui/dropdown/dropdown-menu.d.ts +1 -1
- package/dist/ui/dropdown/dropdown.d.ts +1 -1
- package/dist/ui/dropdown/loading-spinner.d.ts +1 -1
- package/dist/ui/dropdown/toggle-button.d.ts +1 -1
- package/dist/ui/help-link.d.ts +1 -1
- package/dist/ui/pre.d.ts +1 -1
- package/dist/ui/toggle-switch.d.ts +2 -2
- package/dist/ui/typography.d.ts +7 -7
- package/dist/utils/automation-activity-log-export.d.ts +17 -0
- package/dist/utils/automation-timeout.d.ts +4 -6
- package/dist/utils/custom-toast-handlers.d.ts +2 -2
- package/dist/utils/format-relative-time.d.ts +3 -0
- package/dist/utils/mcp-config.cjs +1 -1
- package/dist/utils/mcp-config.cjs.map +1 -1
- package/dist/utils/mcp-config.d.ts +12 -29
- package/dist/utils/mcp-config.js +161 -143
- package/dist/utils/mcp-config.js.map +1 -1
- package/dist/utils/mcp-installed-servers.cjs +1 -1
- package/dist/utils/mcp-installed-servers.cjs.map +1 -1
- package/dist/utils/mcp-installed-servers.d.ts +2 -2
- package/dist/utils/mcp-installed-servers.js +21 -32
- package/dist/utils/mcp-installed-servers.js.map +1 -1
- package/dist/utils/mcp-server-health-key.cjs.map +1 -1
- package/dist/utils/mcp-server-health-key.d.ts +2 -4
- package/dist/utils/mcp-server-health-key.js.map +1 -1
- package/dist/utils/settings-like-page-layout-classes.cjs +1 -1
- package/dist/utils/settings-like-page-layout-classes.cjs.map +1 -1
- package/dist/utils/settings-like-page-layout-classes.d.ts +6 -2
- package/dist/utils/settings-like-page-layout-classes.js +1 -1
- package/dist/utils/settings-like-page-layout-classes.js.map +1 -1
- package/dist/utils/skill-category.d.ts +12 -0
- package/package.json +36 -33
- package/scripts/check-sdk-version-sync.mjs +6 -6
- package/scripts/dev-safe.mjs +2 -2
- package/scripts/dev-with-automation.mjs +3 -2
- package/build/assets/Trans-Bwpzk1wT.js +0 -1
- package/build/assets/active-backend-context-BiwzkzDy.js +0 -2
- package/build/assets/agent-context-settings-DXNT_dcw.js +0 -1
- package/build/assets/agent-server-conversation-service.api-CYSWw-2g.js +0 -41
- package/build/assets/agent-settings-BjgQQe-_.js +0 -1
- package/build/assets/alert-banner-DR8EVyZM.js +0 -1
- package/build/assets/api-error-message-e16L1kwH.js +0 -1
- package/build/assets/automation-detail-DY6x2FW1.js +0 -2
- package/build/assets/automation-export-C09f-Lua.js +0 -2
- package/build/assets/automation-setup-route-CqKp0717.js +0 -1
- package/build/assets/automations-list-CqWJ7qXW.js +0 -1
- package/build/assets/check-CPLXgluF.js +0 -1
- package/build/assets/chevron-down-CP4QHvyc.js +0 -1
- package/build/assets/circle-check-Dpy2_xSI.js +0 -1
- package/build/assets/command-menu-Bj6X4ckE.js +0 -1
- package/build/assets/condenser-settings-EAXQNR2E.js +0 -1
- package/build/assets/context-menu-list-item-CrCrYuPF.js +0 -1
- package/build/assets/conversation-BzyIcSwr.js +0 -1
- package/build/assets/conversation-panel-BzyIcSwr.js +0 -1
- package/build/assets/entry.client-BbIYOsIg.js +0 -2
- package/build/assets/enum-filter-dropdown-C08-srev.js +0 -1
- package/build/assets/files-tab-DEq8MbHu.js +0 -1
- package/build/assets/format-time-delta-CxfPJpzC.js +0 -1
- package/build/assets/git-repo-dropdown-9WKINV6J.js +0 -1
- package/build/assets/home-CY0JaxiY.js +0 -1
- package/build/assets/home-CaNWlVvB.js +0 -1
- package/build/assets/index-home-CaNWlVvB.js +0 -1
- package/build/assets/info-CmWQXtRQ.js +0 -1
- package/build/assets/install-server-modal-BWrudmZU.js +0 -1
- package/build/assets/llm-not-configured-banner-3tMsM4K6.js +0 -27
- package/build/assets/llm-settings-D0W8mJDk.js +0 -1
- package/build/assets/loader-circle-B4QDBARx.js +0 -1
- package/build/assets/manifest-39f4789d.js +0 -1
- package/build/assets/mcp-DXG9LWrI.js +0 -9
- package/build/assets/mcp-marketplace-utils-DFmhKc5s.js +0 -1
- package/build/assets/messages-kBjKaAeA.js +0 -40
- package/build/assets/navigation-link-Bxmn-pCs.js +0 -1
- package/build/assets/onboarding-47hh2IHA.js +0 -1
- package/build/assets/onboarding-modal-9BuvvROo.js +0 -1
- package/build/assets/plus-DrKuuvMe.js +0 -1
- package/build/assets/recommended-automations-launcher-ejxy1P27.js +0 -1
- package/build/assets/root-5S-M8SYa.js +0 -2
- package/build/assets/root-DZ39lS5f.css +0 -1
- package/build/assets/root-layout-BPqoa0gv.js +0 -3
- package/build/assets/search-Dc2qR4O2.js +0 -1
- package/build/assets/settings-Chfn5xTD.js +0 -1
- package/build/assets/settings-like-page-layout-classes-DyxyJ0k4.js +0 -1
- package/build/assets/settings-service.api-CZiPD8__.js +0 -1
- package/build/assets/sidebar-mobile-menu-toggle-ND-hgygu.js +0 -1
- package/build/assets/skills-settings-B43KArIz.js +0 -2
- package/build/assets/use-is-authed-BT7Iud4U.js +0 -1
- package/build/assets/use-llm-profiles-2Wc2db8u.js +0 -1
- package/build/assets/use-save-agent-profile-D0wC5ExW.js +0 -1
- package/build/assets/use-skills-CE6miQ3r.js +0 -1
- package/build/assets/use-tracking-BGboadaZ.js +0 -68
- package/build/assets/useQuery-DiPh8LRJ.js +0 -1
- package/build/assets/utils-BgGG1znF.js +0 -1
- package/build/assets/v4-DDdyfk2q.js +0 -1
- package/build/assets/vendor~browser-IVYgIgG1.js +0 -47
- package/build/assets/vendor~entry.client-CXM9oiAk.js +0 -1
- package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~d4by102p-C2f0ZhS-.js +0 -26
- package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~emdr2jt4-BrmgjeOw.js +0 -1
- package/build/assets/vendor~module-BZXjBMvd.js +0 -2
- package/build/assets/x-omAzpXkl.js +0 -1
- package/dist/components/features/skills/skill-type-filter.d.ts +0 -3
- package/dist/components/features/skills/skills-type-filter-dropdown.d.ts +0 -7
- package/dist/node_modules/html-parse-stringify/dist/html-parse-stringify.module.cjs +0 -2
- package/dist/node_modules/html-parse-stringify/dist/html-parse-stringify.module.cjs.map +0 -1
- package/dist/node_modules/html-parse-stringify/dist/html-parse-stringify.module.js +0 -81
- package/dist/node_modules/html-parse-stringify/dist/html-parse-stringify.module.js.map +0 -1
- package/dist/node_modules/void-elements/index.cjs +0 -2
- package/dist/node_modules/void-elements/index.cjs.map +0 -1
- package/dist/node_modules/void-elements/index.js +0 -25
- package/dist/node_modules/void-elements/index.js.map +0 -1
- /package/build/assets/{vendor~root-layout~index-home~home~mcp~automations-list~automation-setup-route~onboarding-modal-D7IDevqN.js → vendor~root-layout~index-home~home~mcp~automations-list~automation-templates~automation-set~bxsimjx0-D7IDevqN.js} +0 -0
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/settings-modal-CEK0AIx6.js","assets/rolldown-runtime-Cyuzqnbw.js","assets/vendor-styling-Bcgpimp9.js","assets/active-backend-context-BiwzkzDy.js","assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~b0bpqexo-CbTboogo.js","assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~emdr2jt4-BrmgjeOw.js","assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~d4by102p-C2f0ZhS-.js","assets/utils-BgGG1znF.js","assets/use-tracking-BGboadaZ.js","assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~dufan6ng-Dtdw8H0q.js","assets/proxy-BBUG3sd2.js","assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~gy8zbn65-CGt6bWRT.js","assets/llm-settings-CXo8iPNW.js","assets/useMutation-CaSHLnX0.js","assets/useQuery-DiPh8LRJ.js","assets/back-nav-button-D4ngzpSh.js","assets/navigation-link-Bxmn-pCs.js","assets/navigation-context-BOGzIng3.js","assets/form-control-classes-DAfsCJTe.js","assets/copy-DCmZtz6n.js","assets/external-link-BdBSg8rk.js","assets/profiles-service.api-CukSFLzz.js","assets/settings-service.api-CZiPD8__.js","assets/settings-Chfn5xTD.js","assets/llm-subscription-service-DBJbfd8Z.js","assets/llm-subscription-DTqtBCWz.js","assets/use-can-manage-org-profiles-Bt1M71u5.js","assets/organization-service.api-UDy63-oC.js","assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~dfc8ddxy-tTyxnjXT.js","assets/dropdown-classes-BB8rzqXL.js","assets/badge-1Mf1iPcX.js","assets/settings-input-B-q2gkVy.js","assets/base-modal-BBuy0WQQ.js","assets/modal-body-CMsDpalT.js","assets/modal-classes-B6PDrxXo.js","assets/modal-backdrop-X-vKo61e.js","assets/brand-button-DGN6Y9o6.js","assets/sdk-section-page-BxMrtUNV.js","assets/switch-skeleton-BQoOhQTB.js","assets/schema-field-nImDoY6-.js","assets/dist-hOnv1nn2.js","assets/settings-dropdown-input-DYCULKpp.js","assets/combobox-caret-Bd2yySnF.js","assets/settings-switch-LqKdGxHL.js","assets/toggle-switch-BeSrbgCg.js","assets/use-is-authed-BT7Iud4U.js","assets/typography-iYhzLlHO.js","assets/use-save-settings-L3aMaDeS.js","assets/use-settings-8nt3DGxW.js","assets/extension-module-card-classes-Bo43vY5V.js","assets/copy-to-clipboard-button-D_Lp6-Fl.js","assets/checkmark-CxdXtM3b.js","assets/copy-z7idLzWO.js","assets/loading-spinner-DfZ_bhV7.js","assets/settings-section-header-context-CnIIQAUn.js","assets/use-llm-profiles-2Wc2db8u.js","assets/u-check-circle-DBEvndTS.js","assets/u-edit-809W9D9T.js","assets/map-provider-CXU6issd.js","assets/settings-list-classes-WpQi0q1L.js","assets/settings-utils-BL_Z9uIe.js","assets/manage-backends-modal-CwyWsiag.js","assets/backend-form-modal-B8D5hBzK.js","assets/chevron-down-CP4QHvyc.js","assets/cloud-funnel-analytics-CEOl5Gxr.js","assets/info-CmWQXtRQ.js","assets/segmented-toggle-Do6oyepX.js","assets/use-onboarding-completion-gxQlcEy2.js","assets/useQueries--d_WWAzc.js","assets/modal-close-button-DyxBZaAb.js","assets/pencil-BjgtZmWp.js","assets/plus-DrKuuvMe.js","assets/refresh-cw-BrM5ZAZD.js","assets/trash-2-wW5TWcdN.js","assets/confirmation-modal-NCUPr2-O.js","assets/use-cloud-current-user-id-DWt7HCgf.js","assets/environment-switch-overlay-BepBBX66.js","assets/environment-switch-store-DVQZLFbj.js","assets/alert-banner-DR8EVyZM.js","assets/vendor~conversation-panel~conversation~alert-banner-BNzz5FuZ.js","assets/vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation-sjx0x5ac.js","assets/iconBase-B2rQun3J.js","assets/close-CDAVqnTn.js","assets/command-menu-Bj6X4ckE.js","assets/install-server-modal-BWrudmZU.js","assets/vendor~root-layout~index-home~home~mcp~automations-list~automation-setup-route~onboarding-modal-D7IDevqN.js","assets/v4-DDdyfk2q.js","assets/secrets-service-Dhjh3HhH.js","assets/styled-tooltip-C7grwnOX.js","assets/mcp-marketplace-utils-DFmhKc5s.js","assets/list-todo-DtiL3lTp.js","assets/search-Dc2qR4O2.js","assets/sidebar-store-Bui-WNEr.js","assets/conversation-store-C6hSXHw0.js","assets/x-omAzpXkl.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{a as e,r as t}from"./rolldown-runtime-Cyuzqnbw.js";import{St as n,bt as r,i,xt as a,yt as o}from"./vendor-styling-Bcgpimp9.js";import{B as s,G as c,H as l,I as u,L as d,R as f,V as p,W as m,k as h,m as g,z as _}from"./vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~d4by102p-C2f0ZhS-.js";import{t as v}from"./vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~gy8zbn65-CGt6bWRT.js";import{t as y}from"./useInfiniteQuery-BLRVmVPU.js";import{E as b}from"./vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~b0bpqexo-CbTboogo.js";import{t as x}from"./useQuery-DiPh8LRJ.js";import{t as S}from"./use-is-creating-conversation-CAggrM75.js";import{At as C,Ht as w,_ as T,bt as E,d as D,dt as O,g as k,i as A,kt as j,l as M,n as N,r as P,u as F,v as I,y as L}from"./active-backend-context-BiwzkzDy.js";import{C as R,S as ee,b as z,t as B,y as V,z as H}from"./utils-BgGG1znF.js";import{h as U}from"./install-server-modal-BWrudmZU.js";import{t as W}from"./check-CPLXgluF.js";import{n as te,t as ne}from"./vendor~root-layout~conversation-panel~conversation-BCn8lzeG.js";import{a as re,l as ie,o as ae,t as oe}from"./vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation-sjx0x5ac.js";import{r as se}from"./onboarding-modal-9BuvvROo.js";import{a as G,c as ce,d as le,i as ue,l as de,n as fe,o as pe,r as me,s as he,t as ge,u as _e}from"./git-provider-icon-BZqqUPlm.js";import{a as ve,c as ye,d as be,f as xe,i as Se,l as Ce,n as we,o as Te,p as Ee,r as De,s as Oe,t as K,u as ke}from"./onboarding-47hh2IHA.js";import{o as Ae,r as q}from"./backend-form-modal-B8D5hBzK.js";import{n as je,t as Me}from"./format-time-delta-CxfPJpzC.js";import{t as Ne}from"./plus-DrKuuvMe.js";import{t as Pe}from"./search-Dc2qR4O2.js";import{n as Fe,r as Ie,t as Le}from"./sidebar-store-Bui-WNEr.js";import{a as Re}from"./llm-settings-CXo8iPNW.js";import{t as ze}from"./trash-2-wW5TWcdN.js";import{t as Be}from"./x-omAzpXkl.js";import{o as Ve}from"./use-onboarding-completion-gxQlcEy2.js";import{t as He}from"./loading-spinner-DfZ_bhV7.js";import{t as Ue}from"./use-config-CxlEdf_v.js";import{n as We,p as Ge,t as Ke,y as qe}from"./use-tracking-BGboadaZ.js";import{n as Je,t as Ye}from"./use-settings-8nt3DGxW.js";import{t as Xe}from"./use-save-settings-L3aMaDeS.js";import{t as Ze}from"./modal-backdrop-X-vKo61e.js";import{n as Qe}from"./modal-body-CMsDpalT.js";import{i as $e,r as et}from"./base-modal-BBuy0WQQ.js";import{_ as tt,c as nt}from"./form-control-classes-DAfsCJTe.js";import{n as rt,t as it}from"./navigation-context-BOGzIng3.js";import{t as at}from"./openhands-logo-CmYvJXBa.js";import{t as ot}from"./navigation-link-Bxmn-pCs.js";import{a as st,d as ct,f as lt,i as ut,l as dt,n as ft,r as pt,u as mt}from"./sidebar-layout-oHBGQmLh.js";import{n as ht,t as gt}from"./sidebar-nav-link-CrujNA09.js";import{t as _t}from"./vendor~root-layout~index-home~home~conversation-panel~conversation~automation-setup-route-B_L-gcOG.js";import{t as vt}from"./styled-tooltip-C7grwnOX.js";import{a as yt,d as bt,f as xt,i as St,l as Ct,n as wt,o as Tt,r as Et,u as Dt}from"./dropdown-classes-BB8rzqXL.js";import{r as Ot,t as kt}from"./combobox-caret-Bd2yySnF.js";import{n as At,t as jt}from"./use-cloud-current-user-id-DWt7HCgf.js";import{s as Mt}from"./environment-switch-store-DVQZLFbj.js";import{d as Nt,f as Pt,l as Ft,t as It}from"./conversation-store-C6hSXHw0.js";import{t as Lt}from"./manage-backends-modal-CwyWsiag.js";import{n as Rt,t as zt}from"./agent-server-conversation-service.api-CYSWw-2g.js";import{c as Bt,d as Vt,u as Ht}from"./acp-providers-C921BlYB.js";import{t as Ut}from"./use-is-authed-BT7Iud4U.js";import{a as Wt,i as Gt,n as Kt,t as qt}from"./conversation-state-store-F62HvuI1.js";import{a as Jt,c as Yt,d as Xt,f as Zt,i as Qt,l as $t,o as en,r as tn,s as nn,t as rn,u as an}from"./sidebar-mobile-menu-toggle-ND-hgygu.js";import{t as on}from"./use-click-outside-element-DKqpqEEm.js";import{t as sn}from"./use-llm-profiles-2Wc2db8u.js";import{n as cn}from"./use-create-conversation-nOJ6Um5h.js";import{r as ln,t as un}from"./vendor~root-layout~conversation-panel~conversation~shared-conversation-DRblkyXD.js";import{n as dn,t as J}from"./context-menu-list-item-CrCrYuPF.js";import{a as fn,i as pn,n as mn}from"./use-can-manage-org-profiles-Bt1M71u5.js";import{t as hn}from"./u-edit-809W9D9T.js";import{t as gn}from"./skills-CYFLsN5U.js";import{c as _n,i as vn,n as yn,r as bn,s as xn,t as Sn}from"./home-store-Ch1ErdBc.js";import{t as Cn}from"./search-7DRiGm4Z.js";import{t as wn}from"./use-user-conversation-BIIpGUgM.js";var Tn=b(`calendar-arrow-down`,[[`path`,{d:`m14 18 4 4 4-4`,key:`1waygx`}],[`path`,{d:`M16 2v4`,key:`4m81vk`}],[`path`,{d:`M18 14v8`,key:`irew45`}],[`path`,{d:`M21 11.354V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h7.343`,key:`bse4f3`}],[`path`,{d:`M3 10h18`,key:`8toen8`}],[`path`,{d:`M8 2v4`,key:`1cmpym`}]]),En=b(`clock-3`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 6v6h4`,key:`135r8i`}]]),Dn=b(`clock-arrow-down`,[[`path`,{d:`M12 6v6l2 1`,key:`19cm8n`}],[`path`,{d:`M12.337 21.994a10 10 0 1 1 9.588-8.767`,key:`28moa`}],[`path`,{d:`m14 18 4 4 4-4`,key:`1waygx`}],[`path`,{d:`M18 14v8`,key:`irew45`}]]),On=b(`eye-off`,[[`path`,{d:`M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49`,key:`ct8e1f`}],[`path`,{d:`M14.084 14.158a3 3 0 0 1-4.242-4.242`,key:`151rxh`}],[`path`,{d:`M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143`,key:`13bj9a`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}]]),kn=b(`eye`,[[`path`,{d:`M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0`,key:`1nclc0`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]),An=b(`folder-plus`,[[`path`,{d:`M12 10v6`,key:`1bos4e`}],[`path`,{d:`M9 13h6`,key:`1uhe8q`}],[`path`,{d:`M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z`,key:`1kt360`}]]),jn=b(`list-filter`,[[`path`,{d:`M2 5h20`,key:`1fs1ex`}],[`path`,{d:`M6 12h12`,key:`8npq4p`}],[`path`,{d:`M9 19h6`,key:`456am0`}]]),Mn=b(`message-circle`,[[`path`,{d:`M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719`,key:`1sd12s`}]]),Nn=b(`pin`,[[`path`,{d:`M12 17v5`,key:`bb1du9`}],[`path`,{d:`M9 10.76a2 2 0 0 1-1.11 1.79l-1.78.9A2 2 0 0 0 5 15.24V16a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-.76a2 2 0 0 0-1.11-1.79l-1.78-.9A2 2 0 0 1 15 10.76V7a1 1 0 0 1 1-1 2 2 0 0 0 0-4H8a2 2 0 0 0 0 4 1 1 0 0 1 1 1z`,key:`1nkz8b`}]]),Pn=b(`server`,[[`rect`,{width:`20`,height:`8`,x:`2`,y:`2`,rx:`2`,ry:`2`,key:`ngkwjq`}],[`rect`,{width:`20`,height:`8`,x:`2`,y:`14`,rx:`2`,ry:`2`,key:`iecqi9`}],[`line`,{x1:`6`,x2:`6.01`,y1:`6`,y2:`6`,key:`16zg32`}],[`line`,{x1:`6`,x2:`6.01`,y1:`18`,y2:`18`,key:`nzw8ys`}]]),Fn=b(`star`,[[`path`,{d:`M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z`,key:`r04s7s`}]]),In=b(`tag`,[[`path`,{d:`M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z`,key:`vktsd0`}],[`circle`,{cx:`7.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`kqv944`}]]),Y=e(n(),1),X=o(),Ln=46,Rn=30;function zn({className:e,logoClassName:t,logoWidth:n=Ln,logoHeight:r=Rn}={}){let{t:i}=v(`openhands`);return(0,X.jsx)(ot,{to:`/conversations`,"aria-label":i(H.BRANDING$OPENHANDS_LOGO),className:B(e),children:(0,X.jsx)(at,{width:n,height:r,className:B(`shrink-0`,t)})})}function Bn(){return(0,X.jsx)(`div`,{className:`animate-spin h-4 w-4 border-2 border-transparent border-t-white rounded-full`,"data-testid":`dropdown-loading`})}function Vn({onClear:e}){return(0,X.jsx)(`button`,{type:`button`,"data-testid":`dropdown-clear`,onClick:e,"aria-label":`Clear selection`,className:`text-white hover:text-[var(--oh-text-tertiary)]`,children:(0,X.jsx)(Be,{size:14})})}function Hn({isOpen:e,isDisabled:t,getToggleButtonProps:n}){return(0,X.jsx)(`button`,{type:`button`,"data-testid":`dropdown-trigger`,...n({disabled:t,className:B(Ot,`text-current`,e&&`rotate-180`,t&&`cursor-not-allowed`)}),children:(0,X.jsx)(kt,{})})}function Un({isOpen:e,filteredOptions:t,selectedItem:n,emptyMessage:r,getMenuProps:i,getItemProps:a,footer:o,openUpward:s=!1,fitContent:c=!1}){return(0,X.jsxs)(`div`,{className:B(`absolute z-50 overflow-hidden text-white`,c?`min-w-full w-max`:`w-full`,s?`bottom-full mb-1`:`mt-1`,`bg-tertiary rounded-[6px] context-menu-box-shadow p-1`,`max-h-60 overflow-auto`,!e&&`hidden`),children:[(0,X.jsxs)(`ul`,{...i({className:B(`p-0`,St)}),children:[e&&t.length===0&&(0,X.jsx)(`li`,{className:`px-2 py-2 text-sm text-[var(--oh-muted)] italic`,children:r}),e&&t.map((e,t)=>(0,X.jsxs)(`li`,{...a({item:e,index:t,className:B(Tt,`focus:outline-none`,n?.value===e.value&&`bg-[var(--oh-interactive-selected)] text-white`)}),children:[e.prefix?(0,X.jsx)(`span`,{className:Dt,children:e.prefix}):null,(0,X.jsx)(`span`,{className:`min-w-0 truncate`,children:e.label})]},e.value))]}),e&&o?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(_e,{inset:`menu`}),(0,X.jsx)(`div`,{className:`p-0`,children:o})]}):null]})}function Wn({placeholder:e,isDisabled:t,getInputProps:n,italicPlaceholder:r=!0,fitContent:i=!1}){return(0,X.jsx)(`input`,{...n({placeholder:e,disabled:t,className:B(`outline-none bg-transparent text-white not-italic`,i?`w-auto field-sizing-content whitespace-nowrap text-sm`:`flex-1 min-w-0`,r&&`placeholder:italic placeholder:text-tertiary-alt`,!r&&`placeholder:text-tertiary-alt`,nt,`px-0 not-italic text-inherit`)})})}var Gn={position:`absolute`,width:1,height:1,padding:0,margin:-1,overflow:`hidden`,clip:`rect(0, 0, 0, 0)`,whiteSpace:`nowrap`,border:0};function Kn({options:e,emptyMessage:t=`No options`,clearable:n=!1,loading:r=!1,disabled:i=!1,placeholder:a,defaultValue:o,onChange:s,testId:c,className:l,footer:u,openUpward:d=!1,hideTrigger:f=!1,defaultOpen:p=!1,openOnHover:m=!1,italicPlaceholder:h=!0,fitContent:g=!1}){let _=Y.useRef(null),[v,y]=(0,Y.useState)(o?.label??``),[b,x]=(0,Y.useState)(``);Y.useEffect(()=>()=>{_.current&&=(clearTimeout(_.current),null)},[]);let S=e.filter(e=>e.label.toLowerCase().includes(b.toLowerCase())),{isOpen:C,selectedItem:w,selectItem:T,openMenu:E,closeMenu:D,getToggleButtonProps:O,getMenuProps:k,getItemProps:A,getInputProps:j}=_t({items:S,itemToString:e=>e?.label??``,inputValue:v,stateReducer:(e,t)=>t.type===_t.stateChangeTypes.InputClick&&e.isOpen?{...t.changes,isOpen:!0}:t.changes,initialIsOpen:p,onInputValueChange:({inputValue:e})=>{y(e??``),x(e??``)},defaultSelectedItem:o,onSelectedItemChange:({selectedItem:e})=>{s?.(e??null)},onIsOpenChange:({isOpen:e,selectedItem:t})=>{e?(y(``),x(``)):(y(t?.label??``),x(``))}}),M=r||i,N=w?e.find(e=>e.value===w.value)??w:null,P=e=>j({...e,onChange:e=>{y(e.target.value),x(e.target.value)}});return(0,X.jsxs)(`div`,{className:B(`relative`,g?`inline-block w-auto`:`w-full`),"data-testid":c,onMouseEnter:m?()=>{_.current&&=(clearTimeout(_.current),null),E()}:void 0,onMouseLeave:m?()=>{_.current&&clearTimeout(_.current),_.current=setTimeout(()=>D(),150)}:void 0,children:[f?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`input`,{...P({"aria-label":a??`Filter options`,tabIndex:-1}),style:Gn}),(0,X.jsx)(`button`,{type:`button`,...O({tabIndex:-1}),style:Gn,"aria-hidden":!0})]}):(0,X.jsxs)(`div`,{className:B(xt,g?`w-auto`:`w-full`,M&&`cursor-not-allowed opacity-60`,l),children:[N?.prefix?(0,X.jsx)(`span`,{className:`flex items-center shrink-0`,children:N.prefix}):null,(0,X.jsx)(Wn,{placeholder:a,isDisabled:M,getInputProps:P,italicPlaceholder:h,fitContent:g}),r&&(0,X.jsx)(Bn,{}),n&&w&&(0,X.jsx)(Vn,{onClear:()=>T(null)}),(0,X.jsx)(Hn,{isOpen:C,isDisabled:M,getToggleButtonProps:O})]}),(0,X.jsx)(Un,{isOpen:C,filteredOptions:S,selectedItem:w,emptyMessage:t,getMenuProps:k,getItemProps:A,footer:u,openUpward:d,fitContent:g})]})}var qn=t({AddBackendModal:()=>Jn});function Jn({onClose:e}){return(0,X.jsx)(q,{mode:`add`,onClose:e})}var Yn=`::`;function Xn(e,t){return t?`${e}${Yn}${t}`:e}function Zn(e){let[t,n]=e.split(Yn);return{backendId:t,orgId:n??null}}function Qn(e){return(0,X.jsx)(Ae,{isConnected:e?.isConnected??null})}function $n(){return(0,X.jsx)(Ae,{isConnected:`unavailable`})}function er(e,t,n,r,i){let a=[],o=e.filter(e=>e.kind===`local`),s=e.filter(e=>e.kind===`cloud`);for(let e of o)a.push({value:Xn(e.id,null),label:e.name,prefix:Qn(i[e.id])});for(let e of s){let o=n[e.id],s=Qn(i[e.id]);if(!o||o.orgs.length===0)a.push({value:Xn(e.id,null),label:e.name,prefix:s});else{let n=r[e.id]?.userId??null;for(let r of o.orgs){let i=n&&n===r.id?t:r.name;a.push({value:Xn(e.id,r.id),label:`${e.name} – ${i}`,prefix:s})}}}return a}function tr({openUpward:e=!1,hideTrigger:t=!1,defaultOpen:n=!1,onSelectOption:r,onOpenAddBackend:i,onOpenManageBackends:a,sidebarCollapsed:o=!1}={}){let{t:s}=v(`openhands`),{backends:c,active:l,setActive:u}=P(),f=At(),p=jt(),m=Ve(c),h=_(),g=d(`/settings`),y=d(`/settings/*`),b=d(`/conversations/:conversationId`),x=d(`/automations/:automationId`),[S,C]=Y.useState(!1),[w,T]=Y.useState(!1),D=s(H.BACKEND$PERSONAL_WORKSPACE),k=Y.useMemo(()=>er(c,D,f,p,m),[c,D,f,p,m]),A=O(l.backend),j=s(H.BACKEND$NO_BACKEND_AVAILABLE),M=Xn(l.backend.id,l.orgId),N=A?void 0:k.find(e=>e.value===M),F=!!(g||y),I=s(H.SIDEBAR$SETTINGS),L=It(e=>e.isRightPanelShown),R=!o||b&&L?`top`:`left`,ee=Object.values(f).some(e=>e.isLoading);Y.useEffect(()=>{if(A||l.backend.kind!==`cloud`||l.orgId)return;let{backend:e}=l,t=f[e.id];if(!t||t.orgs.length===0)return;let n=t.currentOrgId?t.orgs.find(e=>e.id===t.currentOrgId):void 0,r=p[e.id]?.userId??null,i=r?t.orgs.find(e=>e.id===r):void 0,a=n??i??t.orgs[0];a&&u(e.id,a.id)},[l,f,p,u,A]);let z=Y.useCallback(()=>{if(i){i(),r?.();return}C(!0)},[i,r]),V=Y.useCallback(()=>{if(a){a(),r?.();return}T(!0)},[a,r]),U=E()!==null,W=Y.useCallback(e=>{e.preventDefault(),e.stopPropagation()},[]),te=Y.useCallback(e=>{W(e),z()},[z,W]),ne=Y.useCallback(e=>{W(e),z()},[z,W]),re=Y.useCallback(e=>{W(e),V()},[V,W]),ie=Y.useCallback(e=>{W(e),V()},[V,W]),ae=(0,X.jsxs)(`div`,{className:St,children:[U?null:(0,X.jsxs)(`button`,{type:`button`,"data-testid":`add-backend-menu-item`,onMouseDown:W,onTouchStart:W,onTouchEnd:ne,onClick:te,className:B(wt,`cursor-pointer rounded-md`),children:[(0,X.jsx)(`span`,{className:Dt,"aria-hidden":!0,children:(0,X.jsx)(Ne,{width:16,height:16})}),s(H.BACKEND$ADD)]}),(0,X.jsxs)(`button`,{type:`button`,"data-testid":`manage-backends-menu-item`,onMouseDown:W,onTouchStart:W,onTouchEnd:ie,onClick:re,className:B(wt,`cursor-pointer rounded-md`),children:[(0,X.jsx)(`span`,{className:Dt,"aria-hidden":!0,children:(0,X.jsx)(Ie,{width:16,height:16})}),s(U?H.BACKEND$RECONNECT_CLOUD:H.BACKEND$MANAGE)]})]}),oe=Y.useCallback(async e=>{if(e===M)return;let{backendId:t,orgId:n}=Zn(e),i=c.find(e=>e.id===t);i&&(Mt(k.find(t=>t.value===e)?.label??i.name),await new Promise(e=>{setTimeout(e,400)}),b?h(`/conversations`):x&&h(`/automations`),u(i.id,n),r?.())},[M,c,b,x,h,k,u,s,r]);return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2 w-full`,children:[(0,X.jsx)(`div`,{className:`flex-1 min-w-0`,children:(0,X.jsx)(Kn,{testId:`backend-selector`,defaultValue:N??{value:M,label:A?j:l.backend.name,prefix:A?$n():Qn(m[l.backend.id])},footer:ae,openUpward:e,hideTrigger:t,defaultOpen:n,openOnHover:!t,onChange:e=>{e&&oe(e.value)},placeholder:A?j:l.backend.name,loading:ee,options:k,className:`h-10 px-2 py-0 bg-transparent border-transparent hover:bg-[var(--oh-surface-raised)] focus-within:bg-[var(--oh-surface-raised)] focus-within:border-transparent focus-within:ring-0`},`${M}-${N?.label??``}`)}),t?null:(0,X.jsx)(vt,{content:I,placement:R,offset:10,children:(0,X.jsx)(ot,{to:`/settings`,"data-testid":`backend-selector-settings-link`,"data-active":F,"aria-label":I,className:B(F?`inline-flex items-center justify-center shrink-0 w-9 h-9 rounded-md bg-tertiary text-white font-normal cursor-pointer`:`inline-flex items-center justify-center shrink-0 w-9 h-9 rounded-md text-[var(--oh-muted)] hover:text-white hover:bg-[var(--oh-surface-raised)] cursor-pointer`,tt),children:(0,X.jsx)(Ie,{width:16,height:16})})})]}),S?(0,X.jsx)(Jn,{onClose:()=>C(!1)}):null,w?(0,X.jsx)(Lt,{onClose:()=>T(!1)}):null]})}var nr=`command-menu-trigger`,rr=18;function ir({collapsed:e}){let{t}=v(`openhands`),n=Fe(e=>e.open),r=t(H.COMMAND_MENU$OPEN_LABEL),i=(0,X.jsxs)(`button`,{type:`button`,"data-testid":nr,"aria-label":r,onClick:n,className:B(lt({collapsed:e}),e?`cursor-pointer`:`group justify-between border border-[var(--oh-border-subtle)] bg-[var(--oh-surface)]/50 hover:border-[var(--oh-border)] hover:bg-[var(--oh-surface-raised)]`),children:[(0,X.jsxs)(`span`,{className:`flex min-w-0 items-center gap-2`,children:[e?(0,X.jsx)(ht,{active:!1,children:(0,X.jsx)(Pe,{width:rr,height:rr})}):(0,X.jsx)(`span`,{className:B(st,`text-[var(--oh-muted)] group-hover:text-white`),"aria-hidden":`true`,children:(0,X.jsx)(Pe,{width:rr,height:rr})}),(0,X.jsx)(`span`,{className:mt(e),children:r})]}),e?null:(0,X.jsx)(`kbd`,{className:`rounded-md border border-[var(--oh-border)] bg-black/20 px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-[0.12em] text-[var(--oh-text-dim)]`,children:t(H.COMMAND_MENU$SHORTCUT)})]});return e?(0,X.jsx)(vt,{content:r,placement:`right`,children:i}):i}var ar=(e=20)=>{let{data:t}=Ut(),n=N(),r=!O(n.backend);return y({queryKey:[`user`,`conversations`,`paginated`,e,n.backend.id,n.orgId],queryFn:async({pageParam:t})=>await zt.searchConversations(e,t),enabled:!!t&&r,getNextPageParam:e=>e.next_page_id,initialPageParam:void 0,refetchInterval:1e4,meta:{backendId:n.backend.id}})},or=(e=10)=>x({queryKey:[`start-tasks`,`search`,e],queryFn:()=>[],select:e=>e.filter(e=>e.status!==`READY`&&e.status!==`ERROR`)});function sr({onConfirm:e,onClose:t,onCancel:n}){let{t:r}=v(`openhands`);return(0,X.jsx)(Ze,{onClose:n,children:(0,X.jsxs)(Qe,{testID:`confirm-new-conversation-modal`,children:[(0,X.jsx)(et,{title:r(H.CONVERSATION$EXIT_WARNING)}),(0,X.jsxs)(`div`,{className:`flex w-full justify-end gap-2`,children:[(0,X.jsx)($e,{text:r(H.BUTTON$CANCEL),onClick:t,className:`bg-tertiary`}),(0,X.jsx)($e,{text:r(H.ACTION$CONFIRM),onClick:e,className:`bg-[#C63143]`})]})]})})}function cr({titleMode:e,title:t,onSave:n,isConversationArchived:r}){return e===`edit`?(0,X.jsx)(`input`,{autoFocus:!0,"data-testid":`conversation-card-title`,onClick:e=>{e.preventDefault(),e.stopPropagation()},onBlur:e=>{n(e.currentTarget?.value?.trim?.()??``)},onKeyUp:e=>{e.nativeEvent.isComposing||e.key===`Enter`&&e.currentTarget.blur()},type:`text`,defaultValue:t,className:`text-sm leading-6 font-semibold bg-transparent w-full`}):(0,X.jsx)(`p`,{"data-testid":`conversation-card-title`,className:B(`text-xs leading-6 font-semibold bg-transparent truncate overflow-hidden`,r&&`opacity-60`),children:t})}var lr=e=>{switch(e){case R.FINISHED:return`check`;case R.RUNNING:return`working`;case R.IDLE:case R.WAITING_FOR_CONFIRMATION:return`active`;case R.PAUSED:return`paused`;case R.ERROR:case R.STUCK:return`error`;default:return`unknown`}},ur=(e,t)=>{if(t)return`COMMON$ARCHIVED`;switch(e){case`check`:return`COMMON$FINISHED`;case`working`:case`active`:return`COMMON$WORKING`;case`paused`:return`COMMON$PAUSED`;case`error`:return`COMMON$ERROR`;default:return`COMMON$STOPPED`}};function dr(e){switch(e){case`check`:return(0,X.jsx)(`svg`,{"data-testid":`conversation-status-check`,viewBox:`0 0 12 12`,className:`w-2.5 h-2.5 stroke-[var(--oh-status-success)]`,fill:`none`,strokeWidth:2.25,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:(0,X.jsx)(`path`,{d:`M2.5 6.5 5 9l4.5-5.5`})});case`working`:return(0,X.jsx)(`span`,{"data-testid":`conversation-status-working`,className:`w-1.5 h-1.5 rounded-full animate-pulse bg-[var(--oh-status-success)]`});case`active`:return(0,X.jsx)(`span`,{"data-testid":`conversation-status-active`,className:`w-1.5 h-1.5 rounded-full bg-[var(--oh-status-success)]`});case`paused`:return(0,X.jsx)(`span`,{"data-testid":`conversation-status-paused`,className:`w-1.5 h-1.5 rounded-full bg-[var(--oh-muted)]`});case`error`:return(0,X.jsx)(`span`,{"data-testid":`conversation-status-error`,className:`w-1.5 h-1.5 rounded-full bg-[var(--oh-status-error)]`});default:return(0,X.jsx)(`span`,{"data-testid":`conversation-status-unknown`,className:`w-1.5 h-1.5 rounded-full bg-[var(--oh-color-tertiary)]`})}}function fr({executionStatus:e,sandboxStatus:t,showTooltip:n=!0}){let{t:r}=v(`openhands`),i=t===`MISSING`,a=t===`ERROR`?`error`:i?`paused`:lr(e),o=r(ur(a,i)),s=(0,X.jsx)(`div`,{className:`w-2.5 h-2.5 flex items-center justify-center shrink-0`,children:i?(0,X.jsx)(un,{"data-testid":`conversation-status-archived`,size:10,className:`shrink-0 text-[var(--oh-muted)] opacity-60`,"aria-hidden":!0}):dr(a)});return n?(0,X.jsx)(vt,{content:o,placement:`right`,showArrow:!0,tooltipClassName:`bg-base text-white text-xs shadow-lg`,children:s}):s}function pr({title:e,titleMode:t,onTitleSave:n,executionStatus:r,sandboxStatus:i}){let a=he(i);return(0,X.jsxs)(`div`,{className:`flex items-center gap-2 flex-1 min-w-0 overflow-hidden`,children:[r!==void 0&&(0,X.jsx)(`div`,{className:`flex w-[18px] shrink-0 items-center justify-center`,children:(0,X.jsx)(fr,{executionStatus:r,sandboxStatus:i,showTooltip:!1})}),(0,X.jsx)(cr,{title:e,titleMode:t,onSave:n,isConversationArchived:a})]})}var mr=e(r(),1);function hr({onClose:e,onDelete:t,onStop:n,onEdit:r,onDisplayCost:i,onShowAgentTools:a,onShowSkills:o,onDownloadViaVSCode:s,onDownloadConversation:c,position:l=`bottom`,floatingStyle:u,ignoreOutsideClickRef:d}){let{t:f}=v(`openhands`),{backend:p}=N(),m=on(e,d),h=p.kind===`cloud`?H.COMMON$CLOSE_CONVERSATION_STOP_RUNTIME:H.COMMON$STOP_CONVERSATION,g=(0,Y.useCallback)((e,t,n)=>{let r=e.filter(e=>e!=null);return r.length>0?n?(0,X.jsx)(Y.Fragment,{children:r},t):(0,X.jsxs)(Y.Fragment,{children:[r,(0,X.jsx)(_e,{inset:`menu`})]},t):null},[]),_=u!=null;return(0,X.jsxs)(dn,{ref:m,testId:`context-menu`,style:_?u:void 0,theme:_?`popover`:`default`,position:_?`none`:l,alignment:_?`none`:`right`,spacing:_?`none`:`default`,className:_?`mt-0 min-w-[200px] w-max max-w-[min(280px,100vw-16px)]`:`z-[200] mt-0`,children:[g([r&&(0,X.jsx)(J,{testId:`edit-button`,onClick:r,children:(0,X.jsx)(fn,{icon:(0,X.jsx)(hn,{width:16,height:16}),text:f(H.BUTTON$RENAME)})},`edit-button`)],`edit-section`),g([a&&(0,X.jsx)(J,{testId:`show-agent-tools-button`,onClick:a,children:(0,X.jsx)(fn,{icon:(0,X.jsx)(pe,{width:16,height:16}),text:f(H.BUTTON$SHOW_AGENT_TOOLS_AND_METADATA)})},`show-agent-tools-button`),o&&(0,X.jsx)(J,{testId:`show-skills-button`,onClick:o,children:(0,X.jsx)(fn,{icon:(0,X.jsx)(gn,{width:16,height:16,className:`stroke-[1.75]`,"aria-hidden":!0}),text:f(H.CONVERSATION$SHOW_SKILLS)})},`show-skills-button`)],`tools-section`),g([n&&(0,X.jsx)(J,{testId:`stop-button`,onClick:n,children:(0,X.jsx)(fn,{icon:(0,X.jsx)(G,{width:16,height:16}),text:f(h)})},`stop-button`),s&&(0,X.jsx)(J,{testId:`download-vscode-button`,onClick:s,children:(0,X.jsx)(fn,{icon:(0,X.jsx)(Yt,{width:16,height:16}),text:f(H.BUTTON$DOWNLOAD_VIA_VSCODE)})},`download-vscode-button`),c&&(0,X.jsx)(J,{testId:`download-trajectory-button`,onClick:c,children:(0,X.jsx)(fn,{icon:(0,X.jsx)(Yt,{width:16,height:16}),text:f(H.BUTTON$DOWNLOAD_CONVERSATION_DATA)})},`download-trajectory-button`)],`control-section`),g([i&&(0,X.jsx)(J,{testId:`display-cost-button`,onClick:i,children:(0,X.jsx)(fn,{icon:(0,X.jsx)(nn,{width:16,height:16}),text:f(H.BUTTON$DISPLAY_COST)})},`display-cost-button`),t&&(0,X.jsx)(J,{testId:`delete-button`,onClick:t,children:(0,X.jsx)(fn,{icon:(0,X.jsx)(pn,{width:16,height:16}),text:f(H.COMMON$DELETE_CONVERSATION)})},`delete-button`)],`info-section`,!0)]})}function gr({contextMenuOpen:e,onContextMenuToggle:t,onDelete:n,onStop:r,onEdit:i,onDownloadViaVSCode:a,onDownloadConversation:o,executionStatus:s,conversationId:c,showOptions:l}){let u=ee(s),d=z(s),f=(0,Y.useRef)(null),[,p]=(0,Y.useReducer)(e=>e+1,0);(0,Y.useLayoutEffect)(()=>{if(!e)return;p();let t=0,n=()=>{t||=window.requestAnimationFrame(()=>{t=0,p()})};return window.addEventListener(`resize`,n),window.addEventListener(`scroll`,n,!0),()=>{t&&window.cancelAnimationFrame(t),window.removeEventListener(`resize`,n),window.removeEventListener(`scroll`,n,!0)}},[e]);let m=(()=>{if(!e||!f.current)return;let t=f.current.getBoundingClientRect(),n=Number(window.innerWidth)||0,r=Number(window.innerHeight)||0,i=Number(t.bottom)||0,a=Number(t.right)||0;return{position:`fixed`,top:i+280+8>r?Math.max(8,t.top-280-4):i+4,right:Math.max(8,n-a),zIndex:1e5}})(),h=typeof document<`u`?document.body:null;return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(mn,{ref:f,onClick:n=>{n.preventDefault(),n.stopPropagation(),t(!e)},className:B(u&&`opacity-60`)}),e&&m&&h?(0,mr.createPortal)((0,X.jsx)(hr,{ignoreOutsideClickRef:f,floatingStyle:m,onClose:()=>t(!1),onDelete:n,onStop:d?r:void 0,onEdit:i,onDownloadViaVSCode:c&&l?a:void 0,onDownloadConversation:c?o:void 0,position:`bottom`}),h):null]})}function _r(e){return e?e.split(`/`).pop()||e:null}var vr={bitbucket:oe,bitbucket_data_center:oe,github:re,gitlab:ae};function yr({selectedRepository:e}){let t=e.git_provider?vr[e.git_provider]:null;return(0,X.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-center gap-2 overflow-hidden`,children:[(0,X.jsxs)(`div`,{className:`flex min-w-0 items-center gap-1`,children:[t&&(0,X.jsx)(t,{size:14,className:`shrink-0 text-[var(--oh-muted)]`}),e.git_provider===`azure_devops`&&(0,X.jsx)(ue,{className:`h-[14px] w-[14px] shrink-0 text-[var(--oh-muted)]`}),(0,X.jsx)(`span`,{"data-testid":`conversation-card-selected-repository`,className:`min-w-0 truncate text-xs text-[var(--oh-muted)]`,children:e.selected_repository})]}),(0,X.jsxs)(`div`,{className:`flex min-w-0 items-center gap-1`,children:[(0,X.jsx)(ln,{size:12,className:`shrink-0 text-[var(--oh-muted)]`}),(0,X.jsx)(`span`,{"data-testid":`conversation-card-selected-branch`,className:`min-w-0 truncate text-xs text-[var(--oh-muted)]`,children:e.selected_branch})]})]})}function br({workspaceWorkingDir:e}){let{t}=v(`openhands`),n=e?Kt(e).trim():``;return n?(0,X.jsx)(`span`,{className:`truncate min-w-0 text-xs text-[var(--oh-muted)] flex-1`,title:e??void 0,children:n}):(0,X.jsxs)(`div`,{className:`flex items-center gap-1 text-xs text-[var(--oh-muted)] flex-1 min-w-0 overflow-hidden`,children:[(0,X.jsx)(Gt,{width:14,height:14,className:`text-[var(--oh-muted)]`}),(0,X.jsx)(`span`,{className:`truncate min-w-0`,children:t(H.COMMON$NO_REPOSITORY)})]})}function xr({selectedRepository:e,lastUpdatedAt:t,createdAt:n,executionStatus:r,workspaceWorkingDir:i,showRepositoryMetadata:a=!0,showTimestamp:o=!0,llmModel:s,showAgentChip:c=!1,agentKind:l=null,acpServer:u=null,tags:d=null,showTags:f=!1}){let{t:p}=v(`openhands`),m=ee(r),h=null;if(c)if(l===`acp`){let e=Bt(u)??p(H.CONVERSATION$ACP_AGENT_GENERIC),t=Ht(u,s),n=t??e;h={kind:Vt(u),text:n,tooltip:t?`${e} · ${t}`:e}}else s&&(h={kind:`openhands`,text:_r(s)??s,tooltip:s});let g=r===void 0?void 0:`pl-[26px]`,_=f?Rt(d):[],y=_.slice(0,3),b=_.slice(3);return(0,X.jsxs)(`div`,{className:B(`flex flex-col gap-0.5 mt-0.5 w-full min-w-0`,m&&`opacity-60`),children:[h?(0,X.jsx)(`div`,{className:g,children:(0,X.jsxs)(`span`,{"data-testid":`conversation-card-agent-chip`,className:`inline-flex items-center gap-1 text-xs text-[var(--oh-muted)] max-w-full min-w-0`,title:h.tooltip,children:[(0,X.jsx)(se,{kind:h.kind}),(0,X.jsx)(`span`,{className:`truncate`,children:h.text})]})}):null,_.length>0?(0,X.jsxs)(`div`,{className:B(`flex flex-row flex-wrap items-center gap-1 min-w-0`,g),children:[y.map(([e,t])=>(0,X.jsx)(`span`,{"data-testid":`conversation-card-tag-chip`,title:`${e}: ${t}`,className:`inline-flex max-w-full min-w-0 items-center rounded-sm bg-[var(--oh-surface-raised)] px-1 py-px text-[10px] leading-4 text-[var(--oh-muted)]`,children:(0,X.jsx)(`span`,{className:`truncate`,children:`${e}: ${t}`})},e)),b.length>0?(0,X.jsx)(`span`,{"data-testid":`conversation-card-tag-overflow`,title:b.map(([e,t])=>`${e}: ${t}`).join(`
|
|
3
|
-
`),className:`inline-flex items-center rounded-sm bg-[var(--oh-surface-raised)] px-1 py-px text-[10px] leading-4 text-[var(--oh-muted)]`,children:`+${b.length}`}):null]}):null,(0,X.jsxs)(`div`,{className:B(`flex flex-row items-center gap-2 w-full min-w-0`,a&&g),children:[a&&(e?.selected_repository?(0,X.jsx)(yr,{selectedRepository:e}):(0,X.jsx)(br,{workspaceWorkingDir:i})),(0,X.jsx)(`div`,{className:`flex items-center gap-2 shrink-0 ml-auto`,children:o&&(n??t)&&(0,X.jsx)(`p`,{className:`text-xs text-[var(--oh-muted)] text-right`,children:(0,X.jsx)(`time`,{children:`${Me(t??n)} ${p(H.CONVERSATION$AGO)}`})})})]})]})}function Sr(){let{t:e}=v(`openhands`);return(0,X.jsxs)(`span`,{"data-testid":`error-badge`,className:`flex items-center gap-1 px-1.5 py-0.5 bg-[var(--oh-status-error)] text-white text-xs font-medium rounded-full`,children:[(0,X.jsx)(me,{className:`text-white w-3 h-3`}),(0,X.jsx)(`span`,{children:e(H.COMMON$ERROR)})]})}function Cr({onClick:e,onDelete:t,onStop:n,onChangeTitle:r,showOptions:i,title:a,selectedRepository:o,lastUpdatedAt:s,createdAt:c,conversationId:l,executionStatus:u,sandboxStatus:d,contextMenuOpen:f=!1,onContextMenuToggle:p,isActive:m=!1,workspaceWorkingDir:h,showRepositoryMetadata:g=!0,llmModel:_=null,showLlmProfiles:y=!1,agentKind:b=null,acpServer:x=null,tags:S=null,showTags:C=!1,isPinned:w=!1,onTogglePin:T,alwaysShowPinIcon:E=!1}){let{t:D}=v(`openhands`),{trackDownloadVsCodeButtonClicked:O}=Ke(),[k,A]=Y.useState(`view`),{mutateAsync:j}=fe(),M=e=>{e!==``&&e!==a&&r?.(e),A(`view`)},N=e=>{e.preventDefault(),e.stopPropagation(),t?.(),p?.(!1)},P=e=>{e.preventDefault(),e.stopPropagation(),n?.(),p?.(!1)},F=e=>{e.preventDefault(),e.stopPropagation(),A(`edit`),p?.(!1)},I=async e=>{if(e.preventDefault(),e.stopPropagation(),O(),l)try{let e=await Wt.getVSCodeUrl(l);if(e.vscode_url){let t=$t(e.vscode_url);t&&window.open(t,`_blank`)}}catch{}p?.(!1)},L=async e=>{e.preventDefault(),e.stopPropagation(),l&&await j(l),p?.(!1)},R=e=>{e.preventDefault(),e.stopPropagation(),T?.()},ee=()=>(0,X.jsx)(`button`,{type:`button`,"data-testid":l?`conversation-pin-toggle-${l}`:`conversation-pin-toggle`,"aria-pressed":w,"aria-label":D(w?H.CONVERSATION_PANEL$UNPIN_CONVERSATION:H.CONVERSATION_PANEL$PIN_CONVERSATION),onClick:R,className:B(`flex shrink-0 cursor-pointer items-center justify-center rounded-md p-1`,`text-[var(--oh-muted)] hover:bg-white/10 hover:text-white`),children:(0,X.jsx)(Nn,{className:B(`h-3.5 w-3.5`,w&&`fill-current`),"aria-hidden":!0})}),z=!!(t||r||i),V=z||!!T,U=E&&w&&!!T,W=g||y&&(b===`acp`||!!_)||C&&Rt(S).length>0;return(0,X.jsxs)(`div`,{"data-testid":`conversation-card`,"data-context-menu-open":f.toString(),"data-active":m?`true`:`false`,onClick:e,className:B(`group relative h-auto w-full cursor-pointer rounded-md py-1 pl-2 pr-1 transition-colors`,!f&&`hover:bg-[var(--oh-surface)]`,(m||f)&&`bg-[var(--oh-surface)]`),children:[(0,X.jsxs)(`div`,{className:`flex items-center w-full min-w-0`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2 flex-1 min-w-0 overflow-hidden`,children:[(0,X.jsx)(pr,{title:a,titleMode:k,onTitleSave:M,executionStatus:u,sandboxStatus:d}),d===`ERROR`&&(0,X.jsx)(Sr,{})]}),(0,X.jsxs)(`div`,{className:B(`relative ml-auto pl-2 flex items-center justify-end shrink-0`,U?`min-w-[3.75rem]`:V&&`group-hover:min-w-[3.75rem] group-focus-within:min-w-[3.75rem]`,f&&`min-w-[3.75rem]`),children:[!U&&(c??s)&&(0,X.jsx)(`p`,{className:B(`text-xs text-[var(--oh-muted)] text-right whitespace-nowrap transition-opacity -translate-x-1.5`,V&&`group-hover:opacity-0 group-focus-within:opacity-0`,f&&`opacity-0`),children:(0,X.jsx)(`time`,{children:Me(s??c)})}),V?(0,X.jsxs)(`div`,{className:B(`absolute right-0 top-1/2 flex -translate-y-1/2 items-center gap-0.5 transition-opacity`,U?`pointer-events-auto visible opacity-100`:B(`pointer-events-none opacity-0 invisible`,`group-hover:pointer-events-auto group-hover:opacity-100 group-hover:visible`,`group-focus-within:pointer-events-auto group-focus-within:opacity-100 group-focus-within:visible`),f&&`pointer-events-auto visible opacity-100`),children:[T?ee():null,U&&(c??s)&&z?(0,X.jsxs)(`div`,{className:`relative shrink-0`,children:[(0,X.jsx)(`div`,{className:B(!f&&`invisible pointer-events-none group-hover:visible group-hover:pointer-events-auto group-focus-within:visible group-focus-within:pointer-events-auto`),children:(0,X.jsx)(gr,{contextMenuOpen:f,onContextMenuToggle:p||(()=>{}),onDelete:t&&N,onStop:n&&P,onEdit:r&&F,onDownloadViaVSCode:I,onDownloadConversation:L,executionStatus:u,conversationId:l,showOptions:i})}),(0,X.jsx)(`p`,{className:B(`pointer-events-none absolute inset-0 flex items-center justify-end`,`text-xs text-[var(--oh-muted)] whitespace-nowrap -translate-x-1.5`,`group-hover:hidden group-focus-within:hidden`,f&&`hidden`),children:(0,X.jsx)(`time`,{children:Me(s??c)})})]}):null,!U&&z?(0,X.jsx)(gr,{contextMenuOpen:f,onContextMenuToggle:p||(()=>{}),onDelete:t&&N,onStop:n&&P,onEdit:r&&F,onDownloadViaVSCode:I,onDownloadConversation:L,executionStatus:u,conversationId:l,showOptions:i}):null]}):null]})]}),W&&(0,X.jsx)(xr,{selectedRepository:o,lastUpdatedAt:s,createdAt:c,executionStatus:u,workspaceWorkingDir:h,showRepositoryMetadata:g,showTimestamp:!1,llmModel:_,showAgentChip:y,agentKind:b,acpServer:x,tags:S,showTags:C})]})}var wr={bitbucket:oe,bitbucket_data_center:oe,github:re,gitlab:ae};function Tr({label:e,children:t}){return(0,X.jsxs)(`div`,{className:`flex items-start gap-2 text-xs`,children:[(0,X.jsx)(`span`,{className:`w-20 shrink-0 text-[var(--oh-muted)]`,children:e}),(0,X.jsx)(`span`,{className:`min-w-0 flex-1 break-words text-[var(--oh-foreground)]`,children:t})]})}function Er({title:e,executionStatus:t,sandboxStatus:n,selectedRepository:r,workspaceWorkingDir:i,llmModel:a,createdAt:o}){let{t:s}=v(`openhands`),c=r?.selected_repository??null,l=r?.selected_branch??null,u=r?.git_provider??null,d=u?wr[u]:null,f=o?new Date(o).toLocaleString(void 0,{dateStyle:`medium`,timeStyle:`short`}):null;return(0,X.jsxs)(`div`,{className:`flex w-[280px] flex-col gap-3 p-3`,children:[(0,X.jsxs)(`div`,{className:`flex items-start gap-2`,children:[t===void 0?null:(0,X.jsx)(`div`,{className:`mt-0.5`,children:(0,X.jsx)(fr,{executionStatus:t,sandboxStatus:n,showTooltip:!1})}),(0,X.jsx)(`span`,{className:`break-words text-sm font-medium text-white`,children:e})]}),(0,X.jsxs)(`dl`,{className:`flex flex-col gap-1.5`,children:[c?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(Tr,{label:s(H.CONVERSATION$REPOSITORY),children:(0,X.jsxs)(`span`,{className:`inline-flex min-w-0 items-start gap-1.5`,children:[d?(0,X.jsx)(d,{size:12,className:`mt-0.5 shrink-0`}):null,u===`azure_devops`?(0,X.jsx)(ue,{className:`mt-0.5 h-3 w-3 shrink-0`}):null,(0,X.jsx)(`span`,{className:`break-all`,children:c})]})}),l?(0,X.jsx)(Tr,{label:s(H.CONVERSATION$BRANCH),children:(0,X.jsxs)(`span`,{className:`inline-flex min-w-0 items-start gap-1.5`,children:[(0,X.jsx)(ln,{size:11,className:`mt-0.5 shrink-0`}),(0,X.jsx)(`span`,{className:`break-all`,children:l})]})}):null]}):i?(0,X.jsx)(Tr,{label:s(H.CONVERSATION_PANEL$PREVIEW_DIRECTORY),children:(0,X.jsxs)(`span`,{className:`inline-flex min-w-0 items-start gap-1.5`,children:[(0,X.jsx)(Ee,{size:12,className:`mt-0.5 shrink-0`}),(0,X.jsx)(`span`,{className:`break-all`,children:i})]})}):null,a?(0,X.jsx)(Tr,{label:s(H.CONVERSATION_PANEL$PREVIEW_MODEL),children:(0,X.jsx)(`span`,{className:`break-all`,children:a})}):null,f?(0,X.jsx)(Tr,{label:s(H.CONVERSATION$CREATED),children:f}):null]})]})}function Dr({taskStatus:e}){return(0,X.jsx)(`div`,{className:B(`w-2 h-2 rounded-full flex-shrink-0`,(()=>{switch(e){case`READY`:return`bg-green-500`;case`ERROR`:return`bg-red-500`;case`WORKING`:case`WAITING_FOR_SANDBOX`:case`PREPARING_REPOSITORY`:case`RUNNING_SETUP_SCRIPT`:case`SETTING_UP_GIT_HOOKS`:case`SETTING_UP_SKILLS`:case`STARTING_CONVERSATION`:return`bg-yellow-500 animate-pulse`;default:return`bg-[var(--oh-interactive-selected)]`}})()),"aria-label":`Task status: ${e}`})}function Or({taskStatus:e}){let{t}=v(`openhands`);return e===`WORKING`?null:(0,X.jsx)(`span`,{className:B(`text-xs font-medium px-2 py-0.5 rounded border flex-shrink-0`,(()=>{switch(e){case`READY`:return`bg-green-500/10 text-green-400 border-green-500/20`;case`ERROR`:return`bg-red-500/10 text-red-400 border-red-500/20`;default:return`bg-yellow-500/10 text-yellow-400 border-yellow-500/20`}})()),children:t(V(e))})}function kr({title:e,taskStatus:t}){return(0,X.jsxs)(`div`,{className:`flex items-center gap-2 flex-1 min-w-0 overflow-hidden mr-2`,children:[(0,X.jsx)(`div`,{className:`flex items-center`,children:(0,X.jsx)(Dr,{taskStatus:t})}),(0,X.jsx)(`h3`,{className:`text-sm font-medium text-content-2 truncate flex-1`,children:e}),(0,X.jsx)(Or,{taskStatus:t})]})}function Ar({selectedRepository:e,createdAt:t,detail:n}){let{t:r}=v(`openhands`);return(0,X.jsxs)(`div`,{className:B(`flex flex-col gap-1 mt-1`),children:[(0,X.jsxs)(`div`,{className:`flex flex-row justify-between items-center`,children:[e?(0,X.jsx)(yr,{selectedRepository:e}):(0,X.jsx)(br,{}),t&&(0,X.jsx)(`p`,{className:`text-xs text-[var(--oh-muted)] flex-1 text-right`,children:(0,X.jsx)(`time`,{children:`${Me(t)} ${r(H.CONVERSATION$AGO)}`})})]}),n&&(0,X.jsx)(`div`,{className:`text-xs text-[var(--oh-text-subtle)] truncate`,children:n})]})}function jr({task:e,onClick:t}){let{t:n}=v(`openhands`),r=e.request.title||e.detail||n(H.CONVERSATION$STARTING_CONVERSATION),i=e.request.selected_repository?{selected_repository:e.request.selected_repository,selected_branch:e.request.selected_branch||null,git_provider:e.request.git_provider||null}:null;return(0,X.jsxs)(`div`,{"data-testid":`start-task-card`,onClick:t,className:B(`relative h-auto w-full p-3.5 border-b border-[var(--oh-border)] cursor-pointer`,`hover:bg-tertiary`),children:[(0,X.jsx)(`div`,{className:`flex items-center justify-between w-full`,children:(0,X.jsx)(kr,{title:r,taskStatus:e.status})}),(0,X.jsx)(Ar,{selectedRepository:i,createdAt:e.created_at,detail:e.detail})]})}function Mr({compact:e=!1}){return e?(0,X.jsx)(`div`,{"data-testid":`conversation-card-skeleton-compact`,className:`skeleton-stagger flex flex-col items-center gap-1.5 py-1`,"aria-hidden":!0,children:[0,1,2].map(e=>(0,X.jsx)(`div`,{className:`h-1.5 w-7 shrink-0 skeleton`},`conversation-skeleton-compact-${e}`))}):(0,X.jsx)(`div`,{"data-testid":`conversation-card-skeleton`,className:`skeleton-stagger flex flex-col gap-1.5 py-0.5`,"aria-hidden":!0,children:[0,1,2].map(e=>(0,X.jsx)(`div`,{className:`h-6 min-h-6 w-full skeleton`},`conversation-skeleton-row-${e}`))})}function Nr({conversationId:e,title:t,selectedRepository:n,executionStatus:r,sandboxStatus:a,lastUpdatedAt:o,createdAt:s,workspaceWorkingDir:c,isActive:l=!1,onClose:u,showRepositoryMetadata:d=!0,llmModel:f=null,showLlmProfiles:p=!1,agentKind:m=null,acpServer:h=null,tags:g=null,showTags:_=!1}){let{t:y}=v(`openhands`);return(0,X.jsx)(i,{content:(0,X.jsxs)(`div`,{className:`w-[260px] p-3`,children:[(0,X.jsxs)(`div`,{className:`flex items-center gap-2 mb-1`,children:[(0,X.jsx)(fr,{executionStatus:r,sandboxStatus:a,showTooltip:!1}),(0,X.jsx)(`span`,{className:`text-sm font-medium text-white truncate`,title:t,children:t||y(H.CONVERSATION$UNTITLED)})]}),(0,X.jsx)(xr,{selectedRepository:n,lastUpdatedAt:o,createdAt:s,executionStatus:r,workspaceWorkingDir:c,showRepositoryMetadata:d,llmModel:f,showAgentChip:p,agentKind:m,acpServer:h,tags:g,showTags:_})]}),placement:`right`,closeDelay:100,className:`bg-[var(--oh-surface)] text-white border border-[var(--oh-border-subtle)] shadow-xl p-0`,disableAnimation:!1,children:(0,X.jsx)(ot,{to:`/conversations/${e}`,onClick:u,"data-testid":`compact-conversation-row`,"data-conversation-id":e,"aria-label":t||e,className:({isActive:e})=>B(`flex items-center justify-center w-10 h-9 mx-auto rounded-md`,`transition-colors cursor-pointer`,e||l?`bg-tertiary`:`hover:bg-[var(--oh-surface-raised)]`),children:(0,X.jsx)(fr,{executionStatus:r,sandboxStatus:a,showTooltip:!1})})})}var Pr={showOlderConversations:!0,showRepoBranchMetadata:!1,showLlmProfiles:!0,showTagsMetadata:!0,showHoverMetadata:!0,organizeMode:`chronological`,conversationSort:`updated`,threadScope:`all`,groupFolderOrder:[]},Z=Pt()(Nt(e=>({...Pr,setShowOlderConversations:t=>e(()=>({showOlderConversations:t})),toggleShowOlderConversations:()=>e(e=>({showOlderConversations:!e.showOlderConversations})),setShowRepoBranchMetadata:t=>e(()=>({showRepoBranchMetadata:t})),toggleShowRepoBranchMetadata:()=>e(e=>({showRepoBranchMetadata:!e.showRepoBranchMetadata})),setShowLlmProfiles:t=>e(()=>({showLlmProfiles:t})),toggleShowLlmProfiles:()=>e(e=>({showLlmProfiles:!e.showLlmProfiles})),setShowTagsMetadata:t=>e(()=>({showTagsMetadata:t})),toggleShowTagsMetadata:()=>e(e=>({showTagsMetadata:!e.showTagsMetadata})),setShowHoverMetadata:t=>e(()=>({showHoverMetadata:t})),toggleShowHoverMetadata:()=>e(e=>({showHoverMetadata:!e.showHoverMetadata})),setOrganizeMode:t=>e(()=>({organizeMode:t})),setConversationSort:t=>e(()=>({conversationSort:t})),setThreadScope:t=>e(()=>({threadScope:t})),setGroupFolderOrder:t=>e(()=>({groupFolderOrder:[...t]}))}),{name:`conversation-panel-preferences`,storage:Ft(()=>localStorage),partialize:e=>({showOlderConversations:e.showOlderConversations,showRepoBranchMetadata:e.showRepoBranchMetadata,showLlmProfiles:e.showLlmProfiles,showTagsMetadata:e.showTagsMetadata,showHoverMetadata:e.showHoverMetadata,organizeMode:e.organizeMode,conversationSort:e.conversationSort,threadScope:e.threadScope,groupFolderOrder:e.groupFolderOrder})})),Fr=`px-2 pb-1 pt-1`,Ir=`text-[11px] font-semibold uppercase tracking-wide text-[var(--oh-muted)]`;function Lr({children:e,suffix:t}){return t==null?(0,X.jsx)(`div`,{role:`presentation`,className:B(Fr,Ir),children:e}):(0,X.jsxs)(`div`,{role:`presentation`,className:B(`flex items-baseline justify-between gap-2`,Fr),children:[(0,X.jsx)(`span`,{className:B(`min-w-0 truncate text-left`,Ir),children:e}),t]})}function Rr(){return(0,X.jsx)(_e,{inset:`menu`})}function Q({icon:e,label:t,selected:n,onClick:r,testId:i,disabled:a}){return(0,X.jsxs)(`button`,{type:`button`,role:n===void 0?`menuitem`:`menuitemradio`,"aria-checked":n===void 0?void 0:!!n,"data-testid":i,disabled:a,onClick:r,className:B(`group`,Tt,`text-[var(--oh-foreground)] disabled:opacity-50`),children:[(0,X.jsx)(e,{className:B(`h-3.5 w-3.5`,Ct),"aria-hidden":!0}),(0,X.jsx)(`span`,{className:`min-w-0 flex-1 truncate`,children:t}),n?(0,X.jsx)(W,{className:`ml-auto h-3.5 w-3.5 shrink-0 text-white`,"aria-hidden":!0}):null]})}var zr=e=>e.length>0?e.charAt(0).toUpperCase()+e.slice(1):e;function Br({filterMenuOpen:e,setFilterMenuOpen:t,menuRef:n,backendKind:r,organizeMode:i,setOrganizeMode:a,conversationSort:o,setConversationSort:s,threadScope:c,setThreadScope:l,showOlderConversations:u,toggleShowOlderConversations:d,showRepoBranchMetadata:f,toggleShowRepoBranchMetadata:p,showLlmProfiles:m,toggleShowLlmProfiles:h,showTagsMetadata:g,toggleShowTagsMetadata:_,showHoverMetadata:y,toggleShowHoverMetadata:b,totalConversationsCount:x,onRequestDeleteAll:S}){let{t:C}=v(`openhands`),w=C(r===`local`?H.CONVERSATION_PANEL$BY_WORKSPACE:H.CONVERSATION_PANEL$BY_REPOSITORY),T=Y.useRef(null),E=Y.useRef(null),D=Y.useRef(e);return Y.useEffect(()=>{e?(E.current?.querySelector(`[role="menuitem"], [role="menuitemradio"]`))?.focus():D.current&&T.current?.focus(),D.current=e},[e]),(0,X.jsxs)(`div`,{ref:n,className:`relative shrink-0 pr-0.5`,children:[(0,X.jsx)(`button`,{ref:T,type:`button`,"data-testid":`older-conversations-filter-toggle`,"aria-label":C(H.CONVERSATION_PANEL$FILTER_LABEL),"aria-haspopup":`menu`,"aria-expanded":e,onClick:()=>t(!e),className:B(`inline-flex h-7 w-7 items-center justify-center rounded-md text-[var(--oh-muted)] hover:text-white hover:bg-[var(--oh-surface-raised)]`,Et),children:(0,X.jsx)(jn,{className:`lucide lucide-list-filter shrink-0`,width:14,height:14,strokeWidth:2,"aria-hidden":!0})}),e?(0,X.jsxs)(`div`,{ref:E,role:`menu`,"aria-orientation":`vertical`,"aria-label":C(H.CONVERSATION_PANEL$FILTER_LABEL),tabIndex:-1,"data-testid":`older-conversations-filter-menu`,onKeyDown:e=>{if(e.key===`Escape`){e.preventDefault(),t(!1);return}if(e.key!==`ArrowDown`&&e.key!==`ArrowUp`)return;let n=E.current;if(!n)return;let r=Array.from(n.querySelectorAll(`[role="menuitem"], [role="menuitemradio"]`)).filter(e=>!e.disabled);if(r.length===0)return;let i=r.indexOf(document.activeElement),a=e.key===`ArrowDown`?1:-1,o=((i===-1?0:i)+a+r.length)%r.length;e.preventDefault(),r[o]?.focus()},className:B(`absolute right-0 top-full z-50 mt-0 w-64 rounded-md border border-[var(--oh-border-subtle)] bg-tertiary px-1 py-1 text-[var(--oh-foreground)] shadow-lg`,St,bt),children:[(0,X.jsx)(Lr,{children:C(H.CONVERSATION_PANEL$ORGANIZE)}),(0,X.jsx)(Q,{icon:Ee,label:w,selected:i===`grouped`,onClick:()=>{a(`grouped`),t(!1)}}),(0,X.jsx)(Q,{icon:En,label:C(H.CONVERSATION_PANEL$CHRONOLOGICAL),selected:i===`chronological`,onClick:()=>{a(`chronological`),t(!1)}}),(0,X.jsx)(Rr,{}),(0,X.jsx)(Lr,{children:C(H.CONVERSATION_PANEL$SORT_BY)}),(0,X.jsx)(Q,{icon:Tn,label:C(H.CONVERSATION_PANEL$SORT_CREATED),selected:o===`created`,onClick:()=>{s(`created`),t(!1)}}),(0,X.jsx)(Q,{icon:Dn,label:C(H.CONVERSATION_PANEL$SORT_UPDATED),selected:o===`updated`,onClick:()=>{s(`updated`),t(!1)}}),(0,X.jsx)(Rr,{}),(0,X.jsx)(Lr,{children:C(H.CONVERSATION_PANEL$SHOW)}),(0,X.jsx)(Q,{icon:Mn,label:C(H.CONVERSATION_PANEL$ALL_THREADS),selected:c===`all`,onClick:()=>{l(`all`),t(!1)}}),(0,X.jsx)(Q,{icon:Fn,label:C(H.CONVERSATION_PANEL$RELEVANT_THREADS),selected:c===`relevant`,onClick:()=>{l(`relevant`),t(!1)}}),(0,X.jsx)(Rr,{}),(0,X.jsx)(Lr,{children:C(H.CONVERSATION_PANEL$METADATA)}),(0,X.jsx)(Q,{icon:U,label:C(H.CONVERSATION_PANEL$LLM_MODEL),selected:m,testId:`toggle-llm-profiles`,onClick:()=>{h(),t(!1)}}),(0,X.jsx)(Q,{icon:xe,label:C(H.CONVERSATION_PANEL$REPO_BRANCH),selected:f,testId:`toggle-repo-branch-metadata`,onClick:()=>{p(),t(!1)}}),(0,X.jsx)(Q,{icon:In,label:C(H.CONVERSATION_PANEL$TAGS),selected:g,testId:`toggle-tags-metadata`,onClick:()=>{_(),t(!1)}}),(0,X.jsx)(Q,{icon:je,label:C(H.CONVERSATION_PANEL$HOVER_METADATA),selected:y,testId:`toggle-hover-metadata`,onClick:()=>{b(),t(!1)}}),(0,X.jsx)(Rr,{}),(0,X.jsx)(Lr,{suffix:(0,X.jsx)(`span`,{className:`shrink-0 text-right text-[10px] font-medium normal-case tracking-normal text-[var(--oh-muted)]/70`,children:C(H.CONVERSATION_PANEL$OLDER_OVER_ONE_HOUR)}),children:C(H.CONVERSATION_PANEL$OLDER_SECTION)}),(0,X.jsx)(Q,{testId:`toggle-older-conversations`,icon:u?On:kn,label:zr(C(u?H.CONVERSATION$HIDE:H.CONVERSATION$SHOW_ALL)),onClick:()=>{d(),t(!1)}}),(0,X.jsx)(Rr,{}),(0,X.jsx)(Q,{testId:`delete-all-conversations`,icon:ze,label:zr(C(H.CONVERSATION$DELETE_ALL)),disabled:x===0,onClick:()=>{x!==0&&(S(),t(!1))}})]}):null]})}var Vr=B(`z-50 flex flex-col rounded-md border border-[var(--oh-border-subtle)] bg-tertiary px-1 py-1 text-white shadow-lg`,yt);function Hr(e,t){let{open:n,enabled:r,targetWidth:i=256}=t,[a,o]=Y.useState(null),s=Y.useCallback(()=>{let t=e.current;if(!t)return;let n=t.getBoundingClientRect(),r=Math.min(i,window.innerWidth-16),a=n.right-r;a<8&&(a=8),a+r>window.innerWidth-8&&(a=Math.max(8,window.innerWidth-8-r)),o({top:n.bottom+4,left:a,width:r})},[e,i]);return Y.useLayoutEffect(()=>{if(!n||!r){o(null);return}return s(),window.addEventListener(`resize`,s),window.addEventListener(`scroll`,s,!0),()=>{window.removeEventListener(`resize`,s),window.removeEventListener(`scroll`,s,!0)}},[n,r,s]),a}function Ur({trigger:e,className:t,popoverClassName:n,popoverTestId:r=`new-conversation-popover`,useFixedPlacement:i=!1}){let{t:a}=v(`openhands`),{navigate:o}=rt(),[s,c]=Y.useState(!1),l=Y.useRef(null),u=Y.useRef(null),d=Hr(u,{open:s,enabled:i}),{data:f,error:p}=Oe(),m=f?.workspaceParents??[],{mutate:h}=Ce(),{mutate:g}=ke(),{mutate:_}=ye(),{mutate:y}=be(),{workspaces:b}=Te(),x=ve(p,a),[C,w]=Y.useState(!1),[T,E]=Y.useState(!1),{mutate:D,isPending:O}=cn(),k=S(),A=O||k;Y.useEffect(()=>{if(!s||C||T)return;let e=e=>{l.current&&!l.current.contains(e.target)&&c(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[s,C,T]),Y.useEffect(()=>{if(!s||C||T)return;let e=e=>{e.key===`Escape`&&c(!1)};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[s,C,T]);let j=e=>{A||D({workingDir:e,entryPoint:`sidebar_local_menu`},{onSuccess:e=>{c(!1),o(`/conversations/${e.conversation_id}`)}})},M=Tt,N=Y.useCallback(e=>{e.preventDefault(),e.stopPropagation()},[]),P=Y.useCallback(()=>{c(e=>!e)},[]),F=s&&(!i||d!==null),I=!!x,L=i&&d?{position:`fixed`,top:d.top,left:d.left,width:d.width}:void 0,R=(0,X.jsx)(`button`,{type:`button`,"data-testid":`add-workspaces-button`,disabled:I,onMouseDown:N,onClick:e=>{e.preventDefault(),e.stopPropagation(),!I&&w(!0)},className:M,children:a(H.HOME$ADD_WORKSPACES)}),ee=x?(0,X.jsx)(vt,{content:x,placement:`top`,children:(0,X.jsx)(`span`,{className:`block`,children:R})}):R;return(0,X.jsxs)(`div`,{className:B(!i&&`relative`,t),ref:l,children:[(0,X.jsx)(`span`,{ref:u,className:`inline-flex`,children:e({onClick:P,"aria-expanded":s,"aria-haspopup":`menu`,disabled:A})}),F&&(0,X.jsxs)(`div`,{"data-testid":r,className:B(Vr,!i&&B(`absolute top-full mt-0`,n)),style:L,children:[(0,X.jsxs)(`ul`,{className:B(`max-h-[40vh] overflow-y-auto sm:max-h-[280px]`,St),children:[(0,X.jsx)(`li`,{children:(0,X.jsx)(`button`,{type:`button`,disabled:A,"data-testid":`launch-no-workspace`,onClick:()=>j(),className:M,children:(0,X.jsx)(`span`,{className:`text-[var(--oh-muted)]`,children:a(H.HOME$NO_WORKSPACE_OPTION)})})}),b.map(e=>(0,X.jsx)(`li`,{children:(0,X.jsxs)(`button`,{type:`button`,disabled:A,"data-testid":`launch-workspace`,"data-workspace-path":e.path,onClick:()=>j(e.path),className:M,children:[(0,X.jsx)(`span`,{className:Dt,"aria-hidden":!0,children:(0,X.jsx)(_n,{width:14,height:14})}),(0,X.jsx)(`span`,{className:`truncate`,children:e.name})]})},e.id))]}),(0,X.jsxs)(`div`,{className:B(`flex flex-col`,St),"data-testid":`new-conversation-menu-footer`,children:[(0,X.jsx)(_e,{inset:`menu`,testId:`new-conversation-menu-footer-divider`}),ee,(b.length>0||m.length>0)&&(0,X.jsx)(`button`,{type:`button`,"data-testid":`manage-workspaces-button`,onMouseDown:N,onClick:e=>{e.preventDefault(),e.stopPropagation(),E(!0)},className:M,children:a(H.HOME$MANAGE_WORKSPACES)})]})]}),(0,X.jsx)(Se,{isOpen:C,onClose:()=>w(!1),onAdd:e=>h(e),onAddParent:e=>_(e)}),(0,X.jsx)(De,{isOpen:T,workspaces:b,workspaceParents:m,onClose:()=>E(!1),onRemove:e=>g(e),onRemoveParent:e=>y(e)})]})}function Wr({repo:e,disabled:t,onSelect:n,itemClass:r}){return(0,X.jsx)(`li`,{children:(0,X.jsxs)(`button`,{type:`button`,disabled:t,"data-testid":`launch-repository`,"data-repo-name":e.full_name,onClick:()=>n(e),className:r,children:[(0,X.jsx)(`span`,{className:Dt,"aria-hidden":!0,children:(0,X.jsx)(_n,{width:14,height:14})}),(0,X.jsx)(`span`,{className:`truncate`,children:e.full_name})]})})}function Gr({trigger:e,className:t,popoverClassName:n,popoverTestId:r=`new-conversation-popover`,useFixedPlacement:i=!1}){let{t:a}=v(`openhands`),{navigate:o}=rt(),{providers:s}=xn(),{lastSelectedProvider:c,setLastSelectedProvider:l}=Sn(),[u,d]=Y.useState(!1),f=Y.useRef(null),p=Y.useRef(null),m=Hr(p,{open:u,enabled:i}),[h,g]=Y.useState(c??null),[_,y]=Y.useState(``),b=yn(_,300);Y.useEffect(()=>{if(s.length===0){h!==null&&g(null);return}h&&s.includes(h)||g(c&&s.includes(c)?c:s[0])},[s,h,c]);let{data:x,isLoading:C,isError:w,hasNextPage:T,isFetchingNextPage:E,fetchNextPage:D}=vn({provider:h}),{data:O,isLoading:k}=bn(b,h),A=Y.useMemo(()=>x?.pages.flatMap(e=>e.items)??[],[x]),j=b?O??[]:A,{mutate:M,isPending:N}=cn(),P=S(),F=N||P;Y.useEffect(()=>{if(!u)return;let e=e=>{f.current&&!f.current.contains(e.target)&&d(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[u]),Y.useEffect(()=>{if(!u)return;let e=e=>{e.key===`Escape`&&d(!1)};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[u]);let I=e=>{F||M({repository:{name:e.full_name,gitProvider:e.git_provider,branch:e.main_branch??`main`},entryPoint:`sidebar_cloud_menu`},{onSuccess:e=>{d(!1),o(`/conversations/${e.conversation_id}`)}})},L=e=>{g(e),l(e),y(``)},R=Tt;Y.useEffect(()=>{u&&(b||!T||E||C||j.length===0||j.length>=10||D())},[u,b,T,E,C,j.length,D]);let ee=b?k:C,z=!b&&T&&j.length>0,V=Y.useCallback(()=>{d(e=>!e)},[]),U=u&&(!i||m!==null),W=i&&m?{position:`fixed`,top:m.top,left:m.left,width:m.width}:void 0;return(0,X.jsxs)(`div`,{className:B(!i&&`relative`,t),ref:f,children:[(0,X.jsx)(`span`,{ref:p,className:`inline-flex`,children:e({onClick:V,"aria-expanded":u,"aria-haspopup":`menu`,disabled:F})}),U&&(0,X.jsxs)(`div`,{"data-testid":r,className:B(Vr,!i&&B(`absolute top-full mt-0`,n)),style:W,children:[s.length>1&&(0,X.jsx)(`div`,{className:`flex items-center gap-1 px-1 py-1`,"data-testid":`cloud-provider-tabs`,children:s.map(e=>{let t=e===h;return(0,X.jsxs)(`button`,{type:`button`,"data-testid":`cloud-provider-tab-${e}`,onClick:()=>L(e),className:B(`flex items-center gap-1 rounded border px-2 py-1 text-xs`,`transition-none`,t?`border-[var(--oh-border-subtle)] bg-[var(--oh-interactive-hover)] text-white`:`border-transparent text-[var(--oh-text-secondary)] hover:text-white`),children:[(0,X.jsx)(ge,{gitProvider:e}),(0,X.jsx)(`span`,{className:`capitalize`,children:e})]},e)})}),(0,X.jsx)(`div`,{className:`px-2`,children:(0,X.jsxs)(`div`,{className:`relative`,children:[(0,X.jsx)(Cn,{width:16,height:16,"aria-hidden":!0,className:`pointer-events-none absolute left-0 top-1/2 -translate-y-1/2 text-[var(--oh-muted)]`}),(0,X.jsx)(`input`,{type:`text`,"data-testid":`cloud-repo-search-input`,value:_,onChange:e=>y(e.target.value),placeholder:a(H.COMMON$SEARCH_REPOSITORIES),disabled:!h,className:B(`w-full border-0 bg-transparent py-1.5 pl-6 pr-0 text-sm text-white`,`outline-none placeholder:text-[var(--oh-muted)]`,`focus:outline-none focus:ring-0`,`disabled:cursor-not-allowed disabled:opacity-60`)})]})}),(0,X.jsx)(_e,{inset:`menu`}),(0,X.jsxs)(`ul`,{className:B(`max-h-[40vh] overflow-y-auto custom-scrollbar-always sm:max-h-[280px]`,St),children:[ee&&j.length===0&&(0,X.jsx)(`li`,{className:`px-2 py-2 text-sm text-[var(--oh-muted)] italic`,"data-testid":`cloud-repo-loading`,children:a(H.HOME$LOADING_REPOSITORIES)}),w&&(0,X.jsx)(`li`,{className:`px-2 py-2 text-sm text-[#F87171]`,"data-testid":`cloud-repo-error`,children:a(H.HOME$FAILED_TO_LOAD_REPOSITORIES)}),!ee&&!w&&j.length===0&&!!h&&(0,X.jsx)(`li`,{className:`px-2 py-2 text-sm text-[var(--oh-muted)] italic`,"data-testid":`cloud-repo-empty`,children:a(H.GITHUB$NO_RESULTS)}),j.map(e=>(0,X.jsx)(Wr,{repo:e,disabled:F,onSelect:I,itemClass:R},`${e.git_provider}:${e.id}`)),z&&(0,X.jsx)(`li`,{children:(0,X.jsx)(`button`,{type:`button`,"data-testid":`cloud-repo-load-more`,disabled:E,onClick:()=>D(),className:R,children:(0,X.jsx)(`span`,{className:`text-[var(--oh-text-secondary)]`,children:a(E?H.HOME$LOADING_MORE_REPOSITORIES:H.CONVERSATION$LOAD_MORE)})})})]})]})]})}var Kr=B(`inline-flex h-7 w-7 shrink-0 items-center justify-center rounded-md`,`text-[var(--oh-muted)] transition-colors`,`hover:bg-[var(--oh-surface-raised)] hover:text-white`,`focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-[var(--oh-border)]`,`disabled:cursor-not-allowed disabled:opacity-50`);function qr({backendKind:e}){let{t}=v(`openhands`),n=t(H.CONVERSATION_PANEL$NEW_THREAD_FOLDER_ARIA),r=(0,X.jsx)(An,{className:`h-4 w-4 shrink-0`,"aria-hidden":!0,strokeWidth:2});return e===`local`?(0,X.jsx)(Ur,{useFixedPlacement:!0,popoverTestId:`conversation-panel-new-thread-popover`,popoverClassName:``,trigger:({onClick:e,"aria-expanded":t,disabled:i,"aria-haspopup":a})=>(0,X.jsx)(`button`,{type:`button`,className:Kr,"aria-label":n,"aria-expanded":t,"aria-haspopup":a,disabled:i,"data-testid":`conversation-panel-new-thread-picker`,onClick:e,children:r})}):(0,X.jsx)(Gr,{useFixedPlacement:!0,popoverTestId:`conversation-panel-new-thread-popover`,popoverClassName:``,trigger:({onClick:e,"aria-expanded":t,disabled:i,"aria-haspopup":a})=>(0,X.jsx)(`button`,{type:`button`,className:Kr,"aria-label":n,"aria-expanded":t,"aria-haspopup":a,disabled:i,"data-testid":`conversation-panel-new-thread-picker`,onClick:e,children:r})})}function Jr(e,t){let n=t.limit??5;if(t.expanded||e.length<=n)return{visibleConversations:[...e],isPreviewTruncated:e.length>n,isShowingAll:!0};let r=t.activeConversationId==null?-1:e.findIndex(e=>e.id===t.activeConversationId);if(r>=n){let t=e[r];return{visibleConversations:[...e.slice(0,n-1),t],isPreviewTruncated:!0,isShowingAll:!1}}return{visibleConversations:e.slice(0,n),isPreviewTruncated:e.length>n,isShowingAll:!1}}function Yr(e,t){let n=new Map(t.map(e=>[e.id,e]));return e.map(e=>n.get(e)).filter(e=>e!=null)}function Xr(e,t){if(t.length===0)return[...e];let n=new Set(t);return e.filter(e=>!n.has(e.id))}function Zr(e,t,n){if(t===`local`)return e===`__none_workspace`?{}:e.startsWith(`ws:`)?{workingDir:e.slice(3)}:{};if(e===`__none_repo`)return{};if(e.startsWith(`repo:`)){let t=e.slice(5),r=n[0];return{repository:{name:t,gitProvider:r?.git_provider??`github`,branch:r?.selected_branch??`main`}}}return{}}function Qr(e){if(!e)return 0;let t=Date.parse(e);return Number.isFinite(t)?t:0}function $r(e,t){let n=t===`created`?`created_at`:`updated_at`;return[...e].sort((e,t)=>Qr(t[n])-Qr(e[n]))}function ei(e){let t=e.selected_workspace?.trim().replace(/\/+$/,``);if(!t)return{id:`__none_workspace`,label:``};let n=t.split(`/`).filter(Boolean).pop()??t;return{id:`ws:${t}`,label:n}}function ti(e){let t=e.selected_repository?.trim().replace(/\/+$/,``);if(!t)return{id:`__none_repo`,label:``};let n=t.split(`/`).filter(Boolean),r=n.length?(n[n.length-1]??t).replace(/\.git$/,``):t.replace(/\.git$/,``);return{id:`repo:${t}`,label:r}}function ni(e,t,n,r){let i=new Map;for(let n of e){let{id:e,label:a}=t===`local`?ei(n):ti(n),o=e===`__none_workspace`?r.emptyWorkspace:e===`__none_repo`?r.emptyRepository:a,s=i.get(e);s?s.conversations.push(n):i.set(e,{label:o,conversations:[n]})}let a=[...i.entries()].map(([e,r])=>{let i=$r(r.conversations,n);return{id:e,label:r.label,conversations:i,launch:Zr(e,t,i)}}),o=e=>e.conversations.reduce((e,t)=>Math.max(e,Qr(n===`created`?t.created_at:t.updated_at)),0);return a.sort((e,t)=>o(t)-o(e)),a}function ri(e,t){if(t.length===0)return[...e];let n=new Map(e.map(e=>[e.id,e])),r=[],i=new Set;for(let e of t){let t=n.get(e);t&&(r.push(t),i.add(e))}for(let t of e)i.has(t.id)||r.push(t);return r}function ii(e,t,n,r,i=`after`){if(n===r)return[...e];let a=ri(t.map(e=>({id:e})),e).map(e=>e.id),o=a.indexOf(n),s=a.indexOf(r);if(o<0||s<0)return[...e];let c=[...a];c.splice(o,1);let l=c.indexOf(r),u=i===`before`?l:l+1;return c.splice(u,0,n),c}function ai({group:e,expanded:t,previewExpanded:n,isDragging:r,dropIndicatorPosition:i,animateLayout:a,isCreatingConversationFlow:o,activeConversationId:s,onToggleExpanded:c,onDragStart:l,onDragEnd:u,onDragOver:d,onDragLeave:f,onDrop:p,onTogglePreviewExpanded:m,onLaunchFromGroup:h,renderConversationCard:g}){let{t:_}=v(`openhands`),y=(0,Y.useRef)(null),b=`thread-folder-${e.id.replace(/[^a-zA-Z0-9_-]/g,`-`)}`,x=e.id.replace(/[^a-zA-Z0-9_-]/g,`-`),{visibleConversations:S,isPreviewTruncated:C,isShowingAll:w}=Jr(e.conversations,{expanded:n,activeConversationId:s});return(0,X.jsxs)(ne.section,{ref:y,layout:a?`position`:!1,transition:{type:`spring`,stiffness:600,damping:45},"aria-labelledby":b,"data-testid":`thread-folder-${x}`,onDragOver:d,onDragLeave:f,onDrop:p,className:`relative rounded-md`,children:[i?(0,X.jsx)(`div`,{"aria-hidden":!0,"data-testid":`thread-folder-drop-indicator-${x}`,className:B(`pointer-events-none absolute inset-x-0 z-10 h-0.5 rounded-full bg-[var(--oh-accent)]`,i===`before`?`-top-0.5`:`-bottom-0.5`)}):null,(0,X.jsxs)(`div`,{className:B(r&&`opacity-0`),children:[(0,X.jsxs)(`div`,{className:B(`flex h-8 w-full min-w-0 items-center gap-0.5 rounded-md pl-2 pr-1 text-sm font-normal`,`text-[var(--oh-muted)] transition-colors hover:bg-[var(--oh-surface-raised)] hover:text-white`),children:[(0,X.jsxs)(`button`,{type:`button`,draggable:!0,id:b,"aria-expanded":t,"aria-controls":`thread-folder-content-${x}`,"data-testid":`thread-folder-drag-${x}`,"aria-label":_(t?H.CONVERSATION_PANEL$COLLAPSE_FOLDER:H.CONVERSATION_PANEL$EXPAND_FOLDER,{label:e.label}),onClick:c,onDragStart:t=>{t.stopPropagation();let{dataTransfer:n}=t;if(n){n.effectAllowed=`move`,n.setData(`text/plain`,e.id);let r=y.current;if(r&&typeof n.setDragImage==`function`){let e=r.getBoundingClientRect(),i=r.cloneNode(!0);i.style.position=`fixed`,i.style.top=`0`,i.style.left=`-9999px`,i.style.width=`${e.width}px`,i.style.margin=`0`,i.style.pointerEvents=`none`,i.style.borderRadius=`0.5rem`,i.style.padding=`0.25rem`,i.style.backgroundColor=`var(--oh-surface-raised)`,i.style.boxShadow=`0 8px 24px rgba(0, 0, 0, 0.35)`,document.body.appendChild(i),n.setDragImage(i,t.clientX-e.left,t.clientY-e.top),window.setTimeout(()=>i.remove(),0)}}l()},onDragEnd:e=>{e.stopPropagation(),u()},className:B(`group/folder flex min-h-8 min-w-0 flex-1 cursor-grab items-center gap-2 rounded-md py-1 text-left text-inherit outline-none active:cursor-grabbing`,`focus-visible:ring-1 focus-visible:ring-[var(--oh-border)]`),children:[(0,X.jsx)(Ee,{className:B(`h-4 w-4 shrink-0`,t?`hidden group-hover/folder:block`:`block group-hover/folder:hidden`),"aria-hidden":!0}),(0,X.jsx)(le,{className:B(`h-4 w-4 shrink-0`,t?`block group-hover/folder:hidden`:`hidden group-hover/folder:block`),"aria-hidden":!0}),(0,X.jsx)(`span`,{className:`truncate`,children:e.label})]}),(0,X.jsx)(`button`,{type:`button`,className:B(`inline-flex h-6 w-6 shrink-0 cursor-pointer items-center justify-center rounded-md`,`text-inherit transition-colors`,`hover:bg-white/10 hover:text-white`,`focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-[var(--oh-border)]`,`disabled:cursor-not-allowed disabled:opacity-50`),disabled:o,"aria-label":_(H.CONVERSATION_PANEL$ADD_CONVERSATION_TO_GROUP,{label:e.label}),"data-testid":`add-conversation-to-group-${x}`,onClick:e=>{e.preventDefault(),e.stopPropagation(),h()},children:(0,X.jsx)(Ne,{className:`h-3.5 w-3.5 shrink-0`,"aria-hidden":!0,strokeWidth:2})})]}),t?(0,X.jsxs)(`div`,{id:`thread-folder-content-${x}`,className:`mt-0.5 space-y-0.5`,children:[S.map(g),C?(0,X.jsx)(`div`,{className:`pl-2`,children:(0,X.jsx)(`button`,{type:`button`,"data-testid":`thread-folder-view-more-${x}`,onClick:m,className:`cursor-pointer text-xs text-[var(--oh-text-dim)] hover:text-white`,children:_(w?H.CONVERSATION_PANEL$LESS:H.CONVERSATION_PANEL$MORE)})}):null]}):null]})]})}function oi({groups:e,groupIds:t,groupFolderOrder:n,setGroupFolderOrder:r,collapsedGroupIds:i,expandedGroupPreviewIds:a,onToggleGroupCollapsed:o,onToggleGroupPreviewExpanded:s,isCreatingConversationFlow:c,activeConversationId:l,onLaunchFromGroup:u,renderConversationCard:d}){let{t:f}=v(`openhands`),[p,m]=(0,Y.useState)(null),[h,g]=(0,Y.useState)(null),[_,y]=(0,Y.useState)(null),[b,x]=(0,Y.useState)(!1),S=(0,Y.useRef)(null);(0,Y.useEffect)(()=>()=>{S.current&&clearTimeout(S.current)},[]);let C=(0,Y.useCallback)(()=>{S.current&&clearTimeout(S.current),S.current=setTimeout(()=>{x(!1),S.current=null},300)},[]),w=(0,Y.useCallback)(()=>{m(null),g(null),y(null)},[]),T=(0,Y.useCallback)(e=>{let t=e.currentTarget.getBoundingClientRect();return e.clientY<t.top+t.height/2?`before`:`after`},[]),E=(0,Y.useCallback)((e,i)=>{if(!p||p===e){w(),C();return}r(ii(n,t,p,e,i)),w(),C()},[p,n,t,w,r,C]);return(0,X.jsx)(`nav`,{"aria-label":f(H.SIDEBAR$CONVERSATIONS),className:`space-y-1 md:space-y-0.5 pb-1`,children:e.map(e=>(0,X.jsx)(ai,{group:e,expanded:!i.has(e.id),previewExpanded:a.has(e.id),isDragging:p===e.id,dropIndicatorPosition:h===e.id&&p!==e.id?_:null,animateLayout:b,isCreatingConversationFlow:c,activeConversationId:l,onToggleExpanded:()=>o(e.id),onDragStart:()=>{x(!0),m(e.id)},onDragEnd:()=>{w(),C()},onDragOver:t=>{t.preventDefault();let{dataTransfer:n}=t;n&&(n.dropEffect=`move`),g(e.id),y(T(t))},onDragLeave:()=>{g(t=>t===e.id?null:t)},onDrop:t=>{t.preventDefault(),E(e.id,T(t))},onTogglePreviewExpanded:()=>s(e.id),onLaunchFromGroup:()=>u(e.launch),renderConversationCard:d},e.id))})}function si({pinnedConversations:e,isPreviewExpanded:t,onTogglePreviewExpanded:n,activeConversationId:r,showDivider:i=!1,renderConversationCard:a}){let{t:o}=v(`openhands`),{visibleConversations:s,isPreviewTruncated:c,isShowingAll:l}=Jr(e,{limit:5,expanded:t,activeConversationId:r});return(0,X.jsxs)(`section`,{"data-testid":`conversation-panel-pinned-section`,className:B(`pt-1`,i?`mb-2 border-b border-[var(--oh-border-subtle)] pb-2`:`pb-2`),children:[(0,X.jsxs)(`h3`,{className:`flex items-center gap-1.5 py-1.5 pl-2 text-sm font-normal text-[var(--oh-muted)]`,children:[(0,X.jsx)(Nn,{className:`h-3.5 w-3.5 shrink-0`,"aria-hidden":!0}),o(H.CONVERSATION_PANEL$PINNED)]}),(0,X.jsx)(`div`,{className:`space-y-0.5`,children:s.map(a)}),c?(0,X.jsx)(`div`,{className:`pl-2 pt-0.5`,children:(0,X.jsx)(`button`,{type:`button`,"data-testid":`conversation-panel-pinned-view-more`,onClick:n,className:`cursor-pointer text-xs text-[var(--oh-text-dim)] hover:text-white`,children:o(l?H.CONVERSATION_PANEL$LESS:H.CONVERSATION_PANEL$MORE)})}):null]})}var ci={pinsByBackendId:{}};function li(e,t){return e[t]??[]}var ui=Pt()(Nt((e,t)=>({...ci,pinConversation:(n,r)=>{let i=li(t().pinsByBackendId,n);i.includes(r)||e(e=>({pinsByBackendId:{...e.pinsByBackendId,[n]:[r,...i]}}))},unpinConversation:(n,r)=>{let i=li(t().pinsByBackendId,n);i.includes(r)&&e(e=>({pinsByBackendId:{...e.pinsByBackendId,[n]:i.filter(e=>e!==r)}}))},togglePin:(e,n)=>{li(t().pinsByBackendId,e).includes(n)?t().unpinConversation(e,n):t().pinConversation(e,n)},pruneMissingConversations:(n,r)=>{let i=new Set(r),a=li(t().pinsByBackendId,n),o=a.filter(e=>i.has(e));o.length!==a.length&&e(e=>({pinsByBackendId:{...e.pinsByBackendId,[n]:o}}))}}),{name:`pinned-conversations`,storage:Ft(()=>localStorage),partialize:e=>({pinsByBackendId:e.pinsByBackendId})})),di=()=>{},fi=[],pi=3600*1e3,mi=e=>{let t=Date.now()-pi,n=[],r=[];for(let i of e){let e=i.updated_at?Date.parse(i.updated_at):NaN;Number.isFinite(e)&&e<t?r.push(i):n.push(i)}return{recent:n,older:r}};function hi({onClose:e,compact:t=!1}){let{t:n}=v(`openhands`),{conversationId:r,navigate:a}=rt(),{backend:o}=N(),s=on(e??di),[c,l]=Y.useState(!1),[u,d]=Y.useState(!1),[f,p]=Y.useState(!1),[m,h]=Y.useState(!1),g=Z(e=>e.showOlderConversations),_=Z(e=>e.toggleShowOlderConversations),y=Z(e=>e.showRepoBranchMetadata),b=Z(e=>e.toggleShowRepoBranchMetadata),x=Z(e=>e.showLlmProfiles),w=Z(e=>e.toggleShowLlmProfiles),T=Z(e=>e.showTagsMetadata),E=Z(e=>e.toggleShowTagsMetadata),D=Z(e=>e.showHoverMetadata),O=Z(e=>e.toggleShowHoverMetadata),k=Z(e=>e.organizeMode),A=Z(e=>e.setOrganizeMode),M=Z(e=>e.conversationSort),P=Z(e=>e.setConversationSort),F=Z(e=>e.threadScope),I=Z(e=>e.setThreadScope),L=Z(e=>e.groupFolderOrder),R=Z(e=>e.setGroupFolderOrder),[ee,V]=Y.useState(!1),[U,W]=Y.useState(!1),te=on(()=>{V(!1)}),[ne,re]=Y.useState(()=>new Set),[ie,ae]=Y.useState(()=>new Set),[oe,se]=Y.useState(!1),G=ui(e=>e.pinsByBackendId[o.id]??fi),le=ui(e=>e.togglePin),ue=ui(e=>e.pruneMissingConversations),fe=Y.useCallback(e=>{re(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]),pe=Y.useCallback(e=>{ae(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]);Y.useEffect(()=>{k!==`grouped`&&(re(new Set),ae(new Set))},[k]);let me=Y.useRef(null),[he,ge]=Y.useState(null),[_e,ve]=Y.useState(null),[ye,be]=Y.useState(null),{data:xe,isLoading:Se,isFetched:Ce,hasNextPage:we,isFetching:Te,isFetchingNextPage:Ee,fetchNextPage:De}=ar(),{data:Oe}=or(),K=Y.useMemo(()=>{let e=xe?.pages.flatMap(e=>e.items)??[],t=new Set;return e.filter(e=>t.has(e.id)?!1:(t.add(e.id),!0))},[xe]),ke=Y.useMemo(()=>Yr(G,K),[K,G]);Y.useEffect(()=>{Ce&&ue(o.id,K.map(e=>e.id))},[o.id,K,Ce,ue]),Y.useEffect(()=>{G.length===0&&se(!1)},[G.length]);let Ae=Y.useMemo(()=>{let e=F===`relevant`?K.filter(e=>z(e.execution_status)):K;return t?e:Xr(e,G)},[t,K,G,F]),{recent:q,older:je}=Y.useMemo(()=>mi(Ae),[Ae]),Me=Y.useMemo(()=>$r(g?[...q,...je]:q,M),[q,je,g,M]),Ne=Y.useMemo(()=>({emptyWorkspace:n(H.CONVERSATION_PANEL$NO_WORKSPACE),emptyRepository:n(H.CONVERSATION_PANEL$NO_REPOSITORY)}),[n]),Pe=Y.useMemo(()=>t||k!==`grouped`?null:ni([...q,...g?je:[]],o.kind,M,Ne),[o.kind,t,M,Ne,je,k,q,g]),Fe=Y.useMemo(()=>Pe?ri(Pe,L):null,[Pe,L]),Ie=Y.useMemo(()=>Pe?.map(e=>e.id)??[],[Pe]),Le=Y.useMemo(()=>$r(q.filter(e=>z(e.execution_status)),M),[M,q]),Re=Me.length,ze=Y.useMemo(()=>Fe?Fe.reduce((e,t)=>e+t.conversations.length,0):0,[Fe]),Be=k===`grouped`&&!t?ze===0:Re===0,Ve=k===`grouped`&&!t?ze:Re,[He,Ue]=Y.useState(null),We=Y.useRef(Ve);We.current=Ve;let Ge=Y.useCallback(()=>{we&&Ue(We.current)},[we]);Y.useEffect(()=>{if(He!==null){if(Ve>He){Ue(null);return}if(!we){Ue(null);return}Te||Ee||De()}},[He,Ve,we,Te,Ee,De]);let Ke=He!==null||Ee,{mutate:qe,mutateAsync:Je}=de(),{mutate:Ye}=ce(),{mutate:Xe}=an(),Ze=je.length>0&&!g,Qe=!!we&&!Ze&&!t&&!Be,{mutate:$e}=cn(),et=S(),tt=Y.useCallback(e=>{et||$e({workingDir:e.workingDir,repository:e.repository,entryPoint:`sidebar_relaunch_project`},{onSuccess:e=>{a(`/conversations/${e.conversation_id}`)}})},[$e,et,a]),nt=Y.useCallback((e,t)=>{l(!0),ge(e),ve(t)},[]),it=Y.useCallback(e=>{d(!0),ge(e)},[]),at=Y.useCallback((e,t)=>{Xe({conversationId:e,newTitle:t},{onSuccess:()=>{C(n(H.CONVERSATION$TITLE_UPDATED))}})},[n,Xe]),st=()=>{he&&qe({conversationId:he},{onSuccess:()=>{he===r&&a(`/conversations`)}})},ct=()=>{he&&Ye({conversationId:he})},lt=async()=>{let e=K.map(e=>e.id),t=await Promise.allSettled(e.map(e=>Je({conversationId:e}))),n=t.flatMap((t,n)=>t.status===`fulfilled`?[e[n]]:[]),i=t.length-n.length;r!==null&&n.includes(r)&&a(`/conversations`),i>0&&j(`${i} conversation${i===1?``:`s`} could not be deleted.`)},ut=Y.useCallback((n,a)=>{let s=G.includes(n.id);return t?(0,X.jsx)(Nr,{conversationId:n.id,title:n.title??``,selectedRepository:{selected_repository:n.selected_repository,selected_branch:n.selected_branch,git_provider:n.git_provider},executionStatus:n.execution_status,sandboxStatus:n.sandbox_status,lastUpdatedAt:n.updated_at,createdAt:n.created_at,workspaceWorkingDir:n.selected_workspace??n.workspace?.working_dir,isActive:n.id===r,onClose:e,showRepositoryMetadata:y,llmModel:n.llm_model,showLlmProfiles:x,agentKind:n.agent_kind,acpServer:n.acp_server,tags:n.tags,showTags:T},n.id):(0,X.jsx)(i,{placement:`right-start`,delay:1e3,closeDelay:100,isDisabled:!D||ye===n.id,disableAnimation:!1,className:`rounded-xl border border-[var(--oh-border)] bg-base-secondary p-0 text-white shadow-xl`,content:(0,X.jsx)(Er,{title:n.title??``,executionStatus:n.execution_status,sandboxStatus:n.sandbox_status,selectedRepository:{selected_repository:n.selected_repository,selected_branch:n.selected_branch,git_provider:n.git_provider},workspaceWorkingDir:n.selected_workspace??n.workspace?.working_dir,llmModel:n.llm_model,createdAt:n.created_at}),children:(0,X.jsx)(ot,{to:`/conversations/${n.id}`,onClick:e,className:B(`block rounded-md transition-colors`,ye!==n.id&&`hover:bg-[var(--oh-surface)]`,(n.id===r||ye===n.id)&&`bg-[var(--oh-surface)]`),children:(0,X.jsx)(Cr,{onDelete:()=>nt(n.id,n.title??``),onStop:()=>it(n.id),onChangeTitle:e=>at(n.id,e),title:n.title??``,selectedRepository:{selected_repository:n.selected_repository,selected_branch:n.selected_branch,git_provider:n.git_provider},lastUpdatedAt:n.updated_at,createdAt:n.created_at,executionStatus:n.execution_status,sandboxStatus:n.sandbox_status,conversationId:n.id,contextMenuOpen:ye===n.id,onContextMenuToggle:e=>be(e?n.id:null),isActive:n.id===r,workspaceWorkingDir:n.selected_workspace??n.workspace?.working_dir,showRepositoryMetadata:y,llmModel:n.llm_model,showLlmProfiles:x,agentKind:n.agent_kind,acpServer:n.acp_server,tags:n.tags,showTags:T,isPinned:s,onTogglePin:()=>le(o.id,n.id),alwaysShowPinIcon:s&&!a?.inPinnedSection})})},n.id)},[o.id,t,r,at,nt,it,e,ye,G,y,x,T,D,le]),dt=Se||!Ce,ft=!t&&!dt&&ke.length>0,pt=Ce&&!Se&&!t&&Be&&!ft&&!Oe?.length;return(0,X.jsxs)(`div`,{ref:s,"data-testid":`conversation-panel`,className:`flex h-full min-h-0 w-full flex-col`,children:[!t&&(0,X.jsx)(`div`,{className:B(`-ml-2.5 w-[calc(100%+0.625rem)] max-w-none box-border border-b`,U?`border-[var(--oh-border)]`:`border-transparent`),children:(0,X.jsxs)(`div`,{"data-testid":`older-conversations-summary`,className:`flex min-w-0 flex-nowrap items-center gap-x-2 py-2 pl-4 pr-2.5 text-[var(--oh-muted)]`,children:[(0,X.jsx)(`span`,{className:`min-w-0 truncate text-sm font-medium text-[var(--oh-muted)]`,children:n(H.SIDEBAR$CONVERSATIONS)}),(0,X.jsxs)(`div`,{className:`ml-auto flex shrink-0 items-center gap-0.5`,children:[(0,X.jsx)(qr,{backendKind:o.kind}),(0,X.jsx)(Br,{filterMenuOpen:ee,setFilterMenuOpen:V,menuRef:te,backendKind:o.kind,organizeMode:k,setOrganizeMode:A,conversationSort:M,setConversationSort:P,threadScope:F,setThreadScope:I,showOlderConversations:g,toggleShowOlderConversations:_,showRepoBranchMetadata:y,toggleShowRepoBranchMetadata:b,showLlmProfiles:x,toggleShowLlmProfiles:w,showTagsMetadata:T,toggleShowTagsMetadata:E,showHoverMetadata:D,toggleShowHoverMetadata:O,totalConversationsCount:K.length,onRequestDeleteAll:()=>h(!0)})]})]})}),(0,X.jsxs)(`div`,{ref:me,"data-testid":`conversation-panel-list-scroll`,onScroll:e=>{W(e.currentTarget.scrollTop>0)},className:B(`flex min-h-0 flex-1 flex-col overflow-y-auto overflow-x-hidden overscroll-contain custom-scrollbar-always`,!t&&`conversation-panel-list-scroll`),children:[dt&&(0,X.jsx)(Mr,{compact:t}),!t&&pt&&(0,X.jsx)(`div`,{"data-testid":`conversation-panel-empty-state`,className:`flex min-h-0 flex-1 flex-col items-center justify-center px-4 py-8`,children:(0,X.jsx)(`p`,{className:`text-xs text-[var(--oh-muted)]`,children:n(H.CONVERSATION$NO_CONVERSATIONS)})}),ft?(0,X.jsx)(si,{pinnedConversations:ke,isPreviewExpanded:oe,onTogglePreviewExpanded:()=>se(e=>!e),activeConversationId:r,showDivider:!t&&k===`chronological`,renderConversationCard:e=>ut(e,{inPinnedSection:!0})}):null,!t&&Oe?.map(t=>(0,X.jsx)(ot,{to:`/conversations/task-${t.id}`,onClick:e,className:`block`,children:(0,X.jsx)(jr,{task:t})},t.id)),!dt&&t?Le.map(e=>ut(e)):null,!dt&&!t&&k===`grouped`&&Fe&&Fe.length>0?(0,X.jsx)(oi,{groups:Fe,groupIds:Ie,groupFolderOrder:L,setGroupFolderOrder:R,collapsedGroupIds:ne,expandedGroupPreviewIds:ie,onToggleGroupCollapsed:fe,onToggleGroupPreviewExpanded:pe,isCreatingConversationFlow:et,activeConversationId:r,onLaunchFromGroup:tt,renderConversationCard:e=>ut(e)}):null,!dt&&!t&&k===`chronological`?(0,X.jsx)(`div`,{className:`space-y-0.5`,children:Me.map(e=>ut(e))}):null,Qe&&(Ke?(0,X.jsx)(`div`,{className:`py-1`,children:(0,X.jsx)(Mr,{compact:t})}):(0,X.jsx)(`div`,{className:`flex justify-center py-4`,children:(0,X.jsx)(`button`,{type:`button`,"data-testid":`load-more-conversations`,onClick:Ge,className:`text-xs text-[var(--oh-muted)] hover:text-white`,children:n(H.CONVERSATION$LOAD_MORE)})}))]}),c&&(0,X.jsx)(Zt,{onConfirm:()=>{st(),l(!1),ve(null)},onCancel:()=>{l(!1),ve(null)},conversationTitle:_e??void 0}),m&&(0,X.jsx)(Zt,{title:n(H.CONVERSATION$CONFIRM_DELETE_ALL_TITLE),description:n(H.CONVERSATION$CONFIRM_DELETE_ALL_DESC,{count:K.length}),onConfirm:async()=>{await lt(),h(!1)},onCancel:()=>h(!1)}),u&&(0,X.jsx)(Xt,{onConfirm:()=>{ct(),d(!1)},onCancel:()=>d(!1)}),f&&(0,X.jsx)(sr,{onConfirm:()=>{e?.()},onClose:()=>p(!1),onCancel:()=>p(!1)})]})}function gi({collapsed:e}){return e?null:(0,X.jsx)(`div`,{className:`flex flex-col flex-1 min-h-0`,children:(0,X.jsx)(`div`,{className:`flex min-h-0 w-full flex-1 flex-col`,children:(0,X.jsx)(hi,{})})})}var _i=e=>(0,X.jsxs)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 20 20`,fill:`none`,...e,children:[(0,X.jsx)(`mask`,{id:`mask0_18339_1445`,style:{maskType:`luminance`},maskUnits:`userSpaceOnUse`,x:1,y:1,width:18,height:18,children:(0,X.jsx)(`path`,{d:`M19 1H1V19H19V1Z`,fill:`white`})}),(0,X.jsxs)(`g`,{mask:`url(#mask0_18339_1445)`,children:[(0,X.jsx)(`path`,{d:`M10 18.1818V16.5454`,stroke:`currentColor`,strokeWidth:1.67,strokeLinecap:`round`,strokeLinejoin:`round`}),(0,X.jsx)(`path`,{d:`M10 1.81836V3.45472`,stroke:`currentColor`,strokeWidth:1.67,strokeLinecap:`round`,strokeLinejoin:`round`}),(0,X.jsx)(`path`,{d:`M1.81824 10H3.4546`,stroke:`currentColor`,strokeWidth:1.67,strokeLinecap:`round`,strokeLinejoin:`round`}),(0,X.jsx)(`path`,{d:`M18.1818 10H16.5454`,stroke:`currentColor`,strokeWidth:1.67,strokeLinecap:`round`,strokeLinejoin:`round`}),(0,X.jsx)(`path`,{d:`M5.93359 17.1019L6.74359 15.6782`,stroke:`currentColor`,strokeWidth:1.67,strokeLinecap:`round`,strokeLinejoin:`round`}),(0,X.jsx)(`path`,{d:`M14.0663 2.89844L13.2563 4.32208`,stroke:`currentColor`,strokeWidth:1.67,strokeLinecap:`round`,strokeLinejoin:`round`}),(0,X.jsx)(`path`,{d:`M2.89819 5.93359L4.32183 6.74359`,stroke:`currentColor`,strokeWidth:1.67,strokeLinecap:`round`,strokeLinejoin:`round`}),(0,X.jsx)(`path`,{d:`M17.1019 14.0663L15.6782 13.2563`,stroke:`currentColor`,strokeWidth:1.67,strokeLinecap:`round`,strokeLinejoin:`round`}),(0,X.jsx)(`path`,{d:`M5.92542 2.90625L6.7436 4.3217`,stroke:`currentColor`,strokeWidth:1.67,strokeLinecap:`round`,strokeLinejoin:`round`}),(0,X.jsx)(`path`,{d:`M14.0909 17.0854L13.2727 15.6699`,stroke:`currentColor`,strokeWidth:1.67,strokeLinecap:`round`,strokeLinejoin:`round`}),(0,X.jsx)(`path`,{d:`M17.0855 5.90918L15.67 6.72736`,stroke:`currentColor`,strokeWidth:1.67,strokeLinecap:`round`,strokeLinejoin:`round`}),(0,X.jsx)(`path`,{d:`M2.91455 14.0911L4.33001 13.2729`,stroke:`currentColor`,strokeWidth:1.67,strokeLinecap:`round`,strokeLinejoin:`round`}),(0,X.jsx)(`path`,{d:`M10 16.5455C13.615 16.5455 16.5455 13.615 16.5455 10C16.5455 6.38509 13.615 3.45459 10 3.45459C6.38509 3.45459 3.45459 6.38509 3.45459 10C3.45459 13.615 6.38509 16.5455 10 16.5455Z`,stroke:`currentColor`,strokeWidth:1.67,strokeLinecap:`round`,strokeLinejoin:`round`}),(0,X.jsx)(`path`,{d:`M12.5854 9.77916L8.80545 7.59461C8.63363 7.49643 8.41272 7.61916 8.41272 7.81552V12.1846C8.41272 12.381 8.62545 12.5119 8.80545 12.4055L12.5854 10.221C12.7573 10.1228 12.7573 9.86916 12.5854 9.77098V9.77916Z`,fill:`currentColor`,stroke:`currentColor`,strokeWidth:1.67,strokeLinecap:`round`,strokeLinejoin:`round`})]})]}),$=18,vi=34,yi=Math.round(vi*30/46);function bi({collapsed:e,showCollapseToggle:t,showMobileCloseButton:n=!1,onCloseMobile:r,collapseToggleLabel:i,onCollapse:a,onExpand:o,showCollapsedExpandButton:s,isExtensionsActive:c,currentPath:l,activeBackendHealth:u,collapsedBackendPopoverOpen:d,setCollapsedBackendPopoverOpen:f,collapsedBackendPopoverRef:p,collapsedBackendCloseTimer:m,onOpenAddBackend:h,onOpenManageBackends:g}){let{t:_}=v(`openhands`),y=m;return(0,X.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col`,children:[(0,X.jsxs)(`div`,{className:dt(e),children:[(0,X.jsxs)(`div`,{className:B(e&&t?ft:`flex min-w-0 shrink-0 items-center`),children:[(0,X.jsx)(`div`,{className:B(e&&t&&`flex h-full w-full items-center justify-start pl-2.5 transition-opacity duration-150`,e&&s&&`opacity-0`),children:(0,X.jsx)(zn,{logoWidth:vi,logoHeight:yi,logoClassName:`max-w-none`,className:B(st,`overflow-visible`)})}),e&&t?(0,X.jsx)(`button`,{type:`button`,"data-testid":`sidebar-collapse-toggle`,"aria-pressed":e,"aria-label":i,onClick:o,className:B(pt,s?`opacity-100 pointer-events-auto`:`opacity-0 pointer-events-none`),children:(0,X.jsx)(ie,{width:14,height:14})}):null]}),!e&&t?(0,X.jsx)(`button`,{type:`button`,"data-testid":`sidebar-collapse-toggle`,"aria-pressed":e,"aria-label":i,onClick:a,className:B(`hidden md:inline-flex ml-auto`,ut,`text-[var(--oh-muted)] hover:text-white hover:bg-[var(--oh-surface-raised)]`),children:(0,X.jsx)(te,{width:14,height:14})}):null,!e&&n?(0,X.jsx)(`button`,{type:`button`,"data-testid":`sidebar-mobile-drawer-close`,onClick:r,"aria-label":_(H.SIDEBAR$CLOSE_MENU),className:B(`inline-flex ml-auto`,ut,`text-[var(--oh-muted)] hover:text-white hover:bg-[var(--oh-surface-raised)]`),children:(0,X.jsx)(te,{width:14,height:14})}):null]}),(0,X.jsxs)(`nav`,{className:ct(e),children:[(0,X.jsx)(ir,{collapsed:e}),(0,X.jsx)(gt,{to:`/conversations`,end:!0,label:_(H.SIDEBAR$NEW_CHAT),testId:`sidebar-conversations-link`,collapsed:e,icon:(0,X.jsx)(Ne,{width:$,height:$})}),(0,X.jsx)(gt,{to:`/customize`,label:_(H.NAV$CUSTOMIZE),testId:`sidebar-skills-link`,collapsed:e,forceActive:c,icon:(0,X.jsxs)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:$,height:$,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:[(0,X.jsx)(`path`,{d:`M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z`}),(0,X.jsx)(`path`,{d:`m7 16.5-4.74-2.85`}),(0,X.jsx)(`path`,{d:`m7 16.5 5-3`}),(0,X.jsx)(`path`,{d:`M7 16.5v5.17`}),(0,X.jsx)(`path`,{d:`M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z`}),(0,X.jsx)(`path`,{d:`m17 16.5-5-3`}),(0,X.jsx)(`path`,{d:`m17 16.5 4.74-2.85`}),(0,X.jsx)(`path`,{d:`m17 16.5v5.17`}),(0,X.jsx)(`path`,{d:`M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z`}),(0,X.jsx)(`path`,{d:`M12 8 7.26 5.15`}),(0,X.jsx)(`path`,{d:`m12 8 4.74-2.85`}),(0,X.jsx)(`path`,{d:`M12 13.5V8`})]})}),(0,X.jsx)(gt,{to:Ge(),label:qe().sidebarLabel??_(H.SIDEBAR$AUTOMATIONS),testId:`sidebar-automations-link`,collapsed:e,icon:(0,X.jsx)(_i,{width:$,height:$})})]}),(0,X.jsx)(gi,{collapsed:e}),e&&t?(0,X.jsxs)(`nav`,{className:B(ct(e),`mt-auto pb-2 cursor-pointer`),children:[(0,X.jsx)(vt,{content:_(H.SIDEBAR$SETTINGS),placement:`right`,children:(0,X.jsxs)(ot,{to:`/settings`,"data-testid":`collapsed-settings-link`,"aria-label":_(H.SIDEBAR$SETTINGS),className:lt({collapsed:!0}),children:[(0,X.jsx)(ht,{active:l.startsWith(`/settings`),children:(0,X.jsx)(Ie,{width:$,height:$})}),(0,X.jsx)(`span`,{className:mt(!0),children:_(H.SIDEBAR$SETTINGS)})]})}),(0,X.jsxs)(`div`,{className:`relative`,ref:p,onMouseEnter:()=>{y.current&&=(clearTimeout(y.current),null),f(!0)},onMouseLeave:()=>{y.current=setTimeout(()=>f(!1),150)},children:[(0,X.jsxs)(`button`,{type:`button`,"data-testid":`collapsed-backend-selector-link`,"aria-label":_(H.BACKEND$MANAGE),"aria-expanded":d,onMouseDown:e=>{e.preventDefault(),e.stopPropagation()},onMouseUp:e=>e.stopPropagation(),className:B(lt({collapsed:!0}),`relative`),children:[(0,X.jsx)(ht,{active:d,children:(0,X.jsxs)(`span`,{className:`relative inline-flex size-[18px] shrink-0 items-center justify-center`,children:[(0,X.jsx)(Ae,{isConnected:u?.isConnected??null,className:`absolute -left-0.5 -top-0.5 z-[1] pointer-events-none`}),(0,X.jsx)(Pn,{width:$,height:$})]})}),(0,X.jsx)(`span`,{className:mt(!0),children:_(H.BACKEND$MANAGE)})]}),d?(0,X.jsx)(`div`,{className:`absolute bottom-[-4px] left-full pl-2.5 z-40 w-[272px]`,onClick:e=>e.stopPropagation(),children:(0,X.jsx)(tr,{sidebarCollapsed:e,hideTrigger:!0,defaultOpen:!0,openUpward:!0,onSelectOption:()=>f(!1),onOpenAddBackend:h,onOpenManageBackends:g})}):null]})]}):null,e?null:(0,X.jsx)(`div`,{className:B(`flex flex-col items-stretch max-w-none box-border shrink-0`,`-ml-2.5 w-[calc(100%+0.625rem)] border-t border-[var(--oh-border)] pt-2 px-2.5`),children:(0,X.jsx)(tr,{sidebarCollapsed:e,openUpward:!0})})]})}var xi=Y.lazy(()=>a(()=>import(`./settings-modal-CEK0AIx6.js`).then(e=>({default:e.SettingsModal})),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60]))),Si=Y.lazy(()=>a(()=>Promise.resolve().then(()=>qn).then(e=>({default:e.AddBackendModal})),void 0)),Ci=Y.lazy(()=>a(()=>import(`./manage-backends-modal-CwyWsiag.js`).then(e=>e.n).then(e=>({default:e.ManageBackendsModal})),__vite__mapDeps([61,1,2,3,4,5,6,7,11,14,62,8,9,10,63,64,65,66,67,28,68,27,36,18,31,35,33,69,17,34,70,71,72,73,74,75]))),wi=250;function Ti(){let{t:e}=v(`openhands`),{currentPath:t}=rt(),{data:n}=Ue(),{data:r,error:i,isError:a,isFetching:o}=Je(),{backends:s,active:c}=P(),l=Ve(s)[c.backend.id],u=Le(e=>e.collapsed),d=Le(e=>e.setCollapsed),[f,p]=Y.useState(!1),[m,h]=Y.useState(!1),g=Y.useRef(null),[_,y]=Y.useState(!1),[b,x]=Y.useState(!1),[S,C]=Y.useState(!1),w=Y.useRef(!1),[,T]=Y.useReducer(e=>e+1,0),{isOpen:E,close:D}=en(),[O,k]=Y.useState(!1),[A,M]=Y.useState(!1),N=on(()=>h(!1)),F=Ye(i);Y.useEffect(()=>{D()},[t,D]),Y.useEffect(()=>{if(E){k(!0);let e=requestAnimationFrame(()=>{M(!0)});return()=>cancelAnimationFrame(e)}M(!1);let e=window.setTimeout(()=>{k(!1)},wi);return()=>window.clearTimeout(e)},[E]),Y.useEffect(()=>{if(!E)return;let e=e=>{e.key===`Escape`&&D()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[E,D]),Y.useEffect(()=>{t===`/settings`?p(!1):!o&&a&&F!==404?j(e(H.SETTINGS$FETCH_ERROR)):F===404&&!n?.feature_flags?.hide_llm_settings&&p(!0)},[t,o,a,F,n?.feature_flags?.hide_llm_settings,e]);let I=e(u?H.SIDEBAR$EXPAND:H.SIDEBAR$COLLAPSE),L=Y.useCallback(e=>{if(!u)return;let t=e.target;t instanceof HTMLElement&&(t.closest(`a,button,input,textarea,select,[role='button'],[role='link']`)||d(!1))},[u,d]),R={collapseToggleLabel:I,onCollapse:Y.useCallback(()=>{C(!1),w.current=!0,T(),d(!0),window.setTimeout(()=>{w.current=!1,T()},250)},[d]),onExpand:()=>d(!1),showCollapsedExpandButton:u&&S&&!w.current,isExtensionsActive:t===`/customize`||t.startsWith(`/skills`)||t===`/plugins`||t===`/mcp`,currentPath:t,activeBackendHealth:l,collapsedBackendPopoverOpen:m,setCollapsedBackendPopoverOpen:h,collapsedBackendPopoverRef:N,collapsedBackendCloseTimer:g,onOpenAddBackend:()=>y(!0),onOpenManageBackends:()=>x(!0)};return(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`aside`,{"aria-label":e(H.SIDEBAR$NAVIGATION_LABEL),"data-collapsed":u?`true`:`false`,onClick:L,onMouseEnter:()=>{u&&C(!0)},onMouseLeave:()=>{C(!1)},className:B(`max-md:hidden flex bg-base flex-col min-h-0 transition-[width,min-width] duration-200`,`md:border-r md:border-[var(--oh-border)] md:h-full`,u?`md:w-[60px] md:min-w-[60px] md:px-2.5`:`md:w-[300px] md:min-w-[300px] pb-2 md:pl-2.5 md:pr-0`,t===`/`&&`md:pb-3`),children:(0,X.jsx)(bi,{collapsed:u,showCollapseToggle:!0,...R})}),O?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`div`,{className:B(`fixed inset-0 z-40 bg-black/50 md:hidden`,`transition-opacity ease-in-out motion-reduce:transition-none`,A?`opacity-100`:`pointer-events-none opacity-0`),style:{transitionDuration:`${wi}ms`},onClick:D,"aria-hidden":!A}),(0,X.jsx)(`aside`,{"aria-label":e(H.SIDEBAR$NAVIGATION_LABEL),"data-testid":`sidebar-mobile-drawer`,"aria-hidden":!A,className:B(`fixed inset-y-0 left-0 z-50 flex min-h-0 w-[min(300px,85vw)] flex-col bg-base`,`border-r border-[var(--oh-border)] pb-2 pl-2.5 pr-0 md:hidden`,`transition-transform ease-in-out motion-reduce:transition-none`,A?`translate-x-0`:`-translate-x-full`),style:{transitionDuration:`${wi}ms`},children:(0,X.jsx)(bi,{collapsed:!1,showCollapseToggle:!1,showMobileCloseButton:!0,onCloseMobile:D,...R})})]}):null,f&&(0,X.jsx)(Y.Suspense,{fallback:null,children:(0,X.jsx)(xi,{settings:r,onClose:()=>p(!1)})}),_&&(0,X.jsx)(Y.Suspense,{fallback:null,children:(0,X.jsx)(Si,{onClose:()=>y(!1)})}),b&&(0,X.jsx)(Y.Suspense,{fallback:null,children:(0,X.jsx)(Ci,{onClose:()=>x(!1)})})]})}var Ei=`/settings`,Di=`/customize`,Oi=[`/skills`,`/mcp`,`/plugins`];function ki(e){return e===Ei?{mode:`menu`}:e.startsWith(`${Ei}/`)&&e.length>9?{mode:`back`,backTo:Ei,backLabelKey:H.SETTINGS$TITLE}:e===Di?{mode:`menu`}:Oi.some(t=>e===t||e.startsWith(`${t}/`))?{mode:`back`,backTo:Di,backLabelKey:H.NAV$CUSTOMIZE}:{mode:`menu`}}function Ai(){let{t:e}=v(`openhands`),{currentPath:t,navigate:n}=rt(),r=ki(t);return(0,X.jsxs)(`header`,{className:`flex md:hidden h-12 shrink-0 items-center gap-2 px-2.5`,"aria-label":e(H.SIDEBAR$NAVIGATION_LABEL),children:[(0,X.jsx)(rn,{}),r.mode===`back`&&r.backTo?(0,X.jsx)(`button`,{type:`button`,"data-testid":`sidebar-mobile-back-button`,onClick:()=>n(r.backTo),"aria-label":e(r.backLabelKey??H.COMMON$BACK),className:tn,children:(0,X.jsx)(te,{size:20,className:Qt,"aria-hidden":!0,strokeWidth:2})}):null]})}function ji(){let{backend:e}=N(),t=e.kind===`local`,{data:n}=sn(),{mutate:r,isPending:i}=Re(),a=(0,Y.useRef)(null);(0,Y.useEffect)(()=>{a.current=null},[e.id]),(0,Y.useEffect)(()=>{if(!t||i||!n)return;let{profiles:e,active_profile:o}=n,s=o!=null&&e.some(e=>e.name===o);if(e.length===0||s){a.current=null;return}let c=e.find(e=>e.api_key_set)??e[0];a.current!==c.name&&(a.current=c.name,r(c.name))},[t,n,i,r])}var Mi=()=>{let{backend:e}=N(),{data:t}=Je(),{mutate:n,isPending:r}=Xe(`personal`,{retry:2}),i=Y.useSyncExternalStore(L,M,()=>null),a=Y.useRef(null);Y.useEffect(()=>{if(t!==void 0){if(i!==null){if((t.user_consents_to_analytics===!0?`granted`:t.user_consents_to_analytics===!1?`denied`:null)===i){a.current=null,e.kind===`cloud`&&A(i);return}if(e.kind!==`cloud`)return;let o=`${e.id}:${i}`;if(r||a.current===o)return;a.current=o,n({user_consents_to_analytics:i===`granted`});return}t.user_consents_to_analytics!==null&&T(t.user_consents_to_analytics===!0?`granted`:`denied`,{syncToCloud:!1})}},[e.id,e.kind,r,i,n,t])};function Ni(){let{backend:e}=N(),t=Y.useSyncExternalStore(L,D,()=>`pending`),n=Y.useRef(null);Y.useEffect(()=>{let r=t===`pending`?F():null;if(e.kind!==`local`||t===`pending`&&!r)return;let i=t===`granted`?`granted`:`denied`,a=t===`pending`?r:``,o=`${e.id}:${e.host}:${e.apiKey??``}:${i}:${a}`;n.current!==o&&(n.current=o,We.syncTelemetryConsent(i).catch(()=>{}))},[e.apiKey,e.host,e.id,e.kind,t])}var Pi=`agent_canvas_cloud_cookie_backend_added`,Fi=new Set;function Ii(e,t){return`${Pi}:${e}:${t}`}function Li(e,t){let n=Ii(e,t);if(typeof window>`u`)return!0;try{return window.sessionStorage.getItem(n)===`true`||Fi.has(n)}catch{return Fi.has(n)}}function Ri(e,t){let n=Ii(e,t);if(!(typeof window>`u`))try{window.sessionStorage.setItem(n,`true`)}catch{Fi.add(n)}}var zi=()=>{let{backend:e,orgId:t}=N(),{data:n}=Je(),{trackBackendAdded:r}=Ke(),i=Y.useRef(r),a=jt(),o=e.kind===`cloud`?a[e.id]:void 0,s=o?.isLoading??!0,c=o?.userId??null,l=(n?.email||n?.git_user_email)?.trim()||void 0;Y.useEffect(()=>{i.current=r},[r]),Y.useEffect(()=>{if(e.kind!==`cloud`){k(null);return}if(!s){if(!c){k(null),I(null);return}k({userId:c,email:l,orgId:t}),I(c,l?{email:l}:{}),e.authMode===`cookie`&&l&&!Li(e.id,c)&&(i.current({backendKind:`cloud`,connectionMethod:`cloud_cookie`,hasApiKey:!1,source:`cloud_auto_connect`}),Ri(e.id,c))}},[e.authMode,e.connectionRevision,e.id,e.kind,l,s,t,c])};function Bi(e){switch(e){case R.RUNNING:return`🟢`;case R.FINISHED:case R.IDLE:case R.WAITING_FOR_CONFIRMATION:return`✅`;case R.PAUSED:return`⚪`;case R.ERROR:case R.STUCK:return`🔴`;default:return null}}var Vi=`OpenHands`,Hi=()=>{let{conversationId:e}=p(),{data:t}=wn(e??null),n=qt(e=>e.execution_status),r=t?.title,i=e&&r?`${r} | ${Vi}`:Vi;if(!e)return i;let a=Bi(n??t?.execution_status??null);return a?`${a} ${i}`:i};function Ui({children:e}){let{pathname:t}=u(),n=_(),r=s(),i=f(),a=Y.useMemo(()=>{for(let e=i.length-1;e>=0;--e){let t=i[e]?.params?.conversationId;if(t)return t}return null},[i]);return(0,X.jsx)(it,{value:Y.useMemo(()=>({currentPath:t,conversationId:a,isNavigating:!!r.location,navigate:(e,t)=>n(e,t)}),[t,a,r.location,n]),children:e})}var Wi=Y.lazy(()=>a(()=>import(`./environment-switch-overlay-BepBBX66.js`),__vite__mapDeps([76,1,2,11,5,6,77,7]))),Gi=Y.lazy(()=>a(()=>import(`./alert-banner-DR8EVyZM.js`).then(e=>({default:e.AlertBanner})),__vite__mapDeps([78,1,2,11,5,6,79,80,4,81,7,17,82,46,40]))),Ki=Y.lazy(()=>a(()=>import(`./command-menu-Bj6X4ckE.js`).then(e=>({default:e.CommandMenu})),__vite__mapDeps([83,1,2,8,3,4,5,6,7,9,10,11,84,85,13,86,87,22,23,36,18,31,88,35,69,48,14,89,34,90,91,92,93,94,17]))),qi=c(function(){let e=l(),{t}=v(`openhands`);return h(e)?(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`h1`,{children:e.status}),(0,X.jsx)(`p`,{children:e.statusText}),(0,X.jsx)(`pre`,{children:e.data instanceof Object?JSON.stringify(e.data):e.data})]}):e instanceof Error?(0,X.jsxs)(`div`,{children:[(0,X.jsx)(`h1`,{children:t(H.ERROR$GENERIC)}),(0,X.jsx)(`pre`,{children:e.message})]}):(0,X.jsx)(`div`,{children:(0,X.jsx)(`h1`,{children:t(H.ERROR$UNKNOWN)})})}),Ji=m(function(){let e=u(),t=Hi(),{data:n}=Je(),r=Ue();if(Ni(),Mi(),zi(),ji(),Y.useEffect(()=>{n?.language&&w.changeLanguage(n.language)},[n?.language]),r.isLoading)return(0,X.jsx)(`div`,{className:`min-h-screen flex items-center justify-center bg-base`,children:(0,X.jsx)(He,{size:`large`})});let i=/^\/conversations\/[^/]+/.test(e.pathname),a=we(e.search);return(0,X.jsx)(Ui,{children:(0,X.jsxs)(Jt,{children:[(0,X.jsxs)(`div`,{"data-testid":`root-layout`,className:`h-screen lg:min-w-5xl flex flex-col md:flex-row bg-base overflow-hidden p-0`,children:[(0,X.jsx)(`title`,{children:t}),(0,X.jsx)(Ti,{}),(0,X.jsxs)(`div`,{className:`flex min-h-0 flex-col w-full min-w-0 h-full gap-3`,children:[i?null:(0,X.jsx)(Ai,{}),r.data&&(r.data.maintenance_start_time||r.data.faulty_models&&r.data.faulty_models.length>0||r.data.error_message)&&(0,X.jsx)(Y.Suspense,{fallback:null,children:(0,X.jsx)(Gi,{maintenanceStartTime:r.data.maintenance_start_time,faultyModels:r.data.faulty_models,errorMessage:r.data.error_message,updatedAt:r.data.updated_at})}),(0,X.jsx)(`div`,{id:`root-outlet`,className:`relative flex-1 overflow-auto px-0 custom-scrollbar`,children:(0,X.jsx)(g,{})})]})]}),(0,X.jsxs)(Y.Suspense,{fallback:null,children:[(0,X.jsx)(Wi,{}),(0,X.jsx)(Ki,{})]}),a?(0,X.jsx)(K,{}):null]})})});export{qi as ErrorBoundary,Ji as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{E as e}from"./vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~b0bpqexo-CbTboogo.js";var t=e(`search`,[[`path`,{d:`m21 21-4.34-4.34`,key:`14j7rj`}],[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}]]);export{t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var e={llm_model:`openhands/minimax-m2.7`,llm_base_url:``,agent:`CodeActAgent`,language:`en`,llm_api_key:null,llm_api_key_set:!1,search_api_key_set:!1,confirmation_mode:!1,security_analyzer:`llm`,max_iterations:null,remote_runtime_resource_factor:1,provider_tokens_set:{},enable_default_condenser:!0,condenser_max_size:240,enable_sound_notifications:!1,user_consents_to_analytics:null,enable_proactive_conversation_starters:!1,enable_solvability_analysis:!1,search_api_key:``,is_new_user:!0,disabled_skills:[],mcp_config:{sse_servers:[],stdio_servers:[],shttp_servers:[]},max_budget_per_task:null,email:``,email_verified:!0,git_user_name:`openhands`,git_user_email:`openhands@all-hands.dev`,title_llm_profile:null,agent_settings_schema:null,agent_settings:{schema_version:6,agent_kind:`openhands`,agent:`CodeActAgent`,llm:{model:`openhands/minimax-m2.7`},condenser:{enabled:!0,max_size:240},verification:{critic_enabled:!1,enable_iterative_refinement:!1},enable_sub_agents:!1,mcp_config:{}},conversation_settings_schema:null,conversation_settings:{schema_version:1,confirmation_mode:!1,security_analyzer:`llm`}};export{e as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var e=`flex min-h-0 min-w-0 flex-1 flex-col overflow-x-hidden overflow-y-auto custom-scrollbar-always px-4 pt-8 pb-12 md:px-0 md:pr-[14px]`,t=`flex min-h-0 min-w-0 flex-1 flex-col overflow-x-hidden overflow-y-auto custom-scrollbar-always px-4 pt-8 pb-12 md:px-0 md:pt-0 md:pr-[14px]`;export{e as n,t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{d as e}from"./vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~b0bpqexo-CbTboogo.js";import{$ as t,ct as n}from"./active-backend-context-BiwzkzDy.js";import{t as r}from"./proxy-BBUG3sd2.js";import{t as i}from"./settings-Chfn5xTD.js";var a=/^[a-zA-Z0-9_-]+$/;function o(e){return a.test(e)}function s(e,t=`mcp`){return e.trim().replace(/[^a-zA-Z0-9_-]+/g,`_`).replace(/_+/g,`_`).replace(/^_+|_+$/g,``)||t}var c={sse_servers:[],stdio_servers:[],shttp_servers:[]},l=`**********`;function u(e,t){return RegExp(`^${t}(_\\d+)?$`).test(e)?void 0:e}function d(e){return!!e&&typeof e==`object`&&!Array.isArray(e)}function f(e){if(!d(e))return null;let t=e.mcpServers;return d(t)&&!(`url`in t)&&!(`command`in t)?t:e}function p(e){if(!d(e))return;let t=Object.entries(e).filter(e=>typeof e[1]==`string`);return t.length>0?Object.fromEntries(t):void 0}function m(e){return e===`**********`?!0:Array.isArray(e)?e.some(m):d(e)?Object.values(e).some(m):!1}function h(e){if(!d(e))return;let t={};return d(e.tokens)&&(t.tokens=e.tokens),d(e.client_info)&&(t.client_info=e.client_info),(typeof e.token_expires_at==`number`||e.token_expires_at===null)&&(t.token_expires_at=e.token_expires_at),Object.keys(t).length>0?t:void 0}function g(e){if(d(e))switch(e.strategy){case`none`:return{strategy:`none`};case`api_key`:return typeof e.value==`string`?{strategy:`api_key`,value:e.value,...typeof e.header_name==`string`&&{header_name:e.header_name}}:void 0;case`bearer`:return typeof e.value==`string`?{strategy:`bearer`,value:e.value}:void 0;case`basic`:return typeof e.username!=`string`||typeof e.password!=`string`?void 0:{strategy:`basic`,username:e.username,password:e.password};case`header`:{let t=p(e.headers);return t?{strategy:`header`,headers:t}:void 0}case`oauth2`:{let t=w(e.authentication),n=h(e.state);return{strategy:`oauth2`,...t&&{authentication:t},...n&&{state:n}}}default:return}}function _(e){return g(e.auth)}function v(e){let t={};return e.auth&&!m(e.auth)&&(t.auth=e.auth),e.headers&&Object.keys(e.headers).length>0&&(t.headers=e.headers),t}function y(e){return e.enabled===!1?{enabled:!1}:{}}function b(e){return{...e.name&&{name:e.name},url:e.url,...e.headers&&{headers:e.headers},...e.auth&&{auth:e.auth},...y(e)}}function x(e){return b(e)}function S(e){return{...b(e),...e.timeout!==void 0&&{timeout:e.timeout}}}function C(e){return{name:e.name,command:e.command,...e.args&&{args:e.args},...e.env&&{env:e.env},...y(e)}}function w(e){if(!e||typeof e!=`object`)return;let t=e;if(t.type!==`oauth`)return;let n={type:`oauth`};return(t.client_auth_method===`none`||t.client_auth_method===`client_secret_post`||t.client_auth_method===`client_secret_basic`||t.client_auth_method===`private_key_jwt`)&&(n.client_auth_method=t.client_auth_method),(typeof t.scopes==`string`||Array.isArray(t.scopes)&&t.scopes.every(e=>typeof e==`string`))&&(n.scopes=t.scopes),typeof t.client_name==`string`&&(n.client_name=t.client_name),typeof t.client_metadata_url==`string`&&(n.client_metadata_url=t.client_metadata_url),typeof t.client_id==`string`&&(n.client_id=t.client_id),typeof t.client_secret==`string`&&(n.client_secret=t.client_secret),t.additional_client_metadata&&typeof t.additional_client_metadata==`object`&&!Array.isArray(t.additional_client_metadata)&&(n.additional_client_metadata=t.additional_client_metadata),n}function T(e){let t=f(e);if(!t)return{...c};let n=[],r=[],i=[];for(let[e,a]of Object.entries(t)){if(!d(a))continue;let t=a.url,o=a.enabled===!1;if(t){let r=a.transport,s=_(a),c=p(a.headers);if(r===`sse`){let r=u(e,`sse`),i={url:t};r&&(i.name=r),s&&(i.auth=s),c&&(i.headers=c),o&&(i.enabled=!1),n.push(i)}else{let n=u(e,`shttp`),r={url:t};n&&(r.name=n),a.timeout!=null&&(r.timeout=a.timeout),s&&(r.auth=s),c&&(r.headers=c),o&&(r.enabled=!1),i.push(r)}}else{if(typeof a.command!=`string`)continue;let t={name:e,command:a.command};a.args&&(t.args=a.args),a.env&&(t.env=a.env),o&&(t.enabled=!1),r.push(t)}}return{sse_servers:n,stdio_servers:r,shttp_servers:i}}function E(e){let t={},n=e=>{let n=s(e);if(!(n in t))return n;let r=1;for(;`${n}_${r}`in t;)r+=1;return`${n}_${r}`};for(let r of e.sse_servers){let e={},i;typeof r==`string`?e.url=r:(i=r.name,e.url=r.url,Object.assign(e,v(r),y(r))),e.transport=`sse`,t[n(i||`sse`)]=e}for(let r of e.shttp_servers){let e={transport:`http`},i;typeof r==`string`?e.url=r:(i=r.name,e.url=r.url,Object.assign(e,v(r),y(r)),r.timeout!=null&&(e.timeout=r.timeout)),t[n(i||`shttp`)]=e}for(let r of e.stdio_servers){let e={command:r.command};r.args&&(e.args=r.args),r.env&&(e.env=r.env),Object.assign(e,y(r)),t[n(r.name||`stdio`)]=e}return Object.keys(t).length>0?t:null}function D(){let e=n().backend;if(e.kind!==`cloud`)throw Error(`Cloud settings call requires a cloud backend.`);return e}function O(e){if(e.agent_settings&&Object.keys(e.agent_settings).length>0)return e.agent_settings;let t={},n={};typeof e.llm_model==`string`&&(n.model=e.llm_model),typeof e.llm_base_url==`string`&&(n.base_url=e.llm_base_url),typeof e.llm_api_key==`string`&&(n.api_key=e.llm_api_key),Object.keys(n).length>0&&(t.llm=n);let r={};return typeof e.enable_default_condenser==`boolean`&&(r.enabled=e.enable_default_condenser),typeof e.condenser_max_size==`number`&&(r.max_size=e.condenser_max_size),Object.keys(r).length>0&&(t.condenser=r),typeof e.agent==`string`&&(t.agent=e.agent),e.mcp_config&&Object.keys(e.mcp_config).length>0&&(t.mcp_config=e.mcp_config),t}function k(e){if(e.conversation_settings&&Object.keys(e.conversation_settings).length>0)return e.conversation_settings;let t={};return typeof e.confirmation_mode==`boolean`&&(t.confirmation_mode=e.confirmation_mode),(typeof e.security_analyzer==`string`||e.security_analyzer===null)&&(t.security_analyzer=e.security_analyzer),typeof e.max_iterations==`number`&&(t.max_iterations=e.max_iterations),t}async function A(){let e=await r({backend:D(),method:`GET`,path:`/api/v1/settings`});return{...e,agent_settings:O(e),conversation_settings:k(e),llm_api_key_set:!!e.llm_api_key_set,search_api_key_set:!!e.search_api_key_set,provider_tokens_set:e.provider_tokens_set}}async function j(e){let t=D(),n={};if(e.agent_settings_diff){let t={...e.agent_settings_diff};t.agent_context===null&&delete t.agent_context,Object.keys(t).length>0&&(n.agent_settings_diff=t)}if(e.conversation_settings_diff&&Object.keys(e.conversation_settings_diff).length>0&&(n.conversation_settings_diff=e.conversation_settings_diff),e.app_preferences)for(let[t,r]of Object.entries(e.app_preferences))r!==void 0&&(n[t]=r);await r({backend:t,method:`POST`,path:`/api/v1/settings`,body:n})}async function M(){return r({backend:D(),method:`GET`,path:`/api/v1/settings/agent-schema`})}async function N(){return r({backend:D(),method:`GET`,path:`/api/v1/settings/conversation-schema`})}var P=[`language`,`user_consents_to_analytics`,`enable_sound_notifications`,`git_user_name`,`git_user_email`,`title_llm_profile`,`disabled_skills`],F=new Set(P),I=e=>F.has(e),L=e=>{let t={},n={};for(let[r,i]of Object.entries(e))I(r)?t[r]=i:n[r]=i;return{extracted:t,rest:n}},R=e=>JSON.parse(JSON.stringify(e)),z=(e,t)=>({...e??{},...t??{}});async function B(e,t=3,n=500){for(let r=0;r<t;r+=1)try{return await e()}catch(e){if(r>=t-1)throw e;let i=n*2**r;await new Promise(e=>{setTimeout(e,i)})}throw Error(`Retry attempts exhausted`)}var V={redacted:null,encrypted:null,timestamp:0},H=300*1e3,U=()=>Date.now()-V.timestamp<H,W=()=>{V={redacted:null,encrypted:null,timestamp:0}},G=e=>!!e&&typeof e==`object`&&!Array.isArray(e),K=(e,t)=>`Basic ${btoa(`${e}:${t}`)}`,q=e=>{switch(e.strategy){case`none`:return{};case`api_key`:{if(typeof e.value!=`string`||!e.value)return null;let t=typeof e.header_name==`string`&&e.header_name?e.header_name:`Authorization`,n=t===`Authorization`?`Bearer ${e.value}`:e.value;return{[t]:n}}case`bearer`:return typeof e.value!=`string`||!e.value?null:{Authorization:`Bearer ${e.value}`};case`basic`:return typeof e.username!=`string`||typeof e.password!=`string`?null:{Authorization:K(e.username,e.password)};case`header`:return p(e.headers)??{};case`oauth2`:{let t=G(e.state)?e.state.tokens:void 0;return!G(t)||typeof t.access_token!=`string`?null:{Authorization:`Bearer ${t.access_token}`}}default:return null}},J=e=>{if(!G(e))return e;let t=G(e.mcpServers),n=t?e.mcpServers:e,r=Object.fromEntries(Object.entries(n).map(([e,t])=>{if(!G(t)||!G(t.auth))return[e,t];let n=q(t.auth);if(n===null)return[e,t];let r={...t},i={...p(t.headers)??{},...n};return delete r.auth,Object.keys(i).length>0?r.headers=i:delete r.headers,[e,r]}));return t?{...e,mcpServers:r}:r},Y=e=>{if(!G(e))return e;let t=G(e.mcpServers),n=t?e.mcpServers:e,r=Object.fromEntries(Object.entries(n).map(([e,t])=>G(t)?[e,{...t,enabled:t.enabled!==!1}]:[e,t]));return t?{...e,mcpServers:r}:r},X=e=>{let t=f(e);return t?Object.values(t).some(e=>m(G(e)?e.auth:void 0)||m(G(e)?e.headers:void 0)||m(G(e)?e.env:void 0)):!1},Z=(e,t)=>{let n=f(e),r=f(t);return!n||!r?!1:Object.keys(n).some(e=>!(e in r))},Q=e=>{let t={agent_settings:e.agent_settings??{},conversation_settings:e.conversation_settings??{},llm_api_key_set:e.llm_api_key_is_set},n=e.misc_settings?.app_preferences;if(n)for(let e of P){let r=n[e];r!==void 0&&(t[e]=r)}return t},$=e=>{let t=z(i.agent_settings??{},e.agent_settings??{}),n=z(i.conversation_settings??{},e.conversation_settings??{}),r={...R(i),...e,provider_tokens_set:{...i.provider_tokens_set??{},...e.provider_tokens_set??{}},agent_settings:t,conversation_settings:n},a=t.llm,o=t.condenser;return typeof t.agent==`string`&&(r.agent=t.agent),typeof a?.model==`string`&&a.model.length>0&&(r.llm_model=a.model),typeof a?.base_url==`string`&&(r.llm_base_url=a.base_url),typeof o?.enabled==`boolean`&&(r.enable_default_condenser=o.enabled),typeof o?.max_size==`number`&&(r.condenser_max_size=o.max_size),typeof n.confirmation_mode==`boolean`&&(r.confirmation_mode=n.confirmation_mode),(typeof n.security_analyzer==`string`||n.security_analyzer===null)&&(r.security_analyzer=n.security_analyzer),typeof n.max_iterations==`number`&&(r.max_iterations=n.max_iterations),r.search_api_key_set=!!r.search_api_key,r},ee=class r{static async fetchSettingsFromApi(n){return B(()=>new e(t()).getSettings({exposeSecrets:n}))}static async getSettings(){if(n().backend.kind===`cloud`)try{return $(await B(()=>A()))}catch(e){return console.warn(`Failed to fetch cloud settings, using defaults:`,e),$({})}if(U()&&V.redacted)return $(Q(V.redacted));try{let e=await this.fetchSettingsFromApi();return V.redacted=e,V.timestamp=Date.now(),$(Q(e))}catch(e){return console.warn(`Failed to fetch settings from API, using defaults:`,e),$({})}}static async getSettingsForConversation(){if(U()&&V.encrypted)return{agentSettings:V.encrypted.agent_settings,conversationSettings:V.encrypted.conversation_settings,secretsEncrypted:!0};let e=await this.fetchSettingsFromApi(`encrypted`);return V.encrypted=e,V.timestamp||=Date.now(),{agentSettings:e.agent_settings,conversationSettings:e.conversation_settings,secretsEncrypted:!0}}static async getSettingsSchema(){return n().backend.kind===`cloud`?await M():await new e(t()).getAgentSchema()}static async getConversationSettingsSchema(){return n().backend.kind===`cloud`?await N():await new e(t()).getConversationSchema()}static async saveSettings(i){let{extracted:a,rest:o}=L(i),s=Object.keys(a).length>0,c={},l=o.agent_settings_diff;l&&Object.keys(l).length>0&&(c.agent_settings_diff=l);let u=o.conversation_settings_diff;u&&Object.keys(u).length>0&&(c.conversation_settings_diff=u),s&&(c.misc_settings_diff={app_preferences:a});let d=n().backend.kind===`cloud`,f=c.agent_settings_diff,p=!!f&&`mcp_config`in f&&f.mcp_config!==null,m;if(p)try{m=d?(await A())?.agent_settings?.mcp_config:(await r.fetchSettingsFromApi())?.agent_settings?.mcp_config}catch{}let h=d&&p&&X(m)&&!Z(m,f?.mcp_config),g=p&&!h;if(d){if(!(c.agent_settings_diff||c.conversation_settings_diff||s))return!0;g&&await B(()=>j({agent_settings_diff:{mcp_config:null}}));let e={};if(c.agent_settings_diff&&(e.agent_settings_diff={...c.agent_settings_diff},`mcp_config`in e.agent_settings_diff)){let t=J(e.agent_settings_diff.mcp_config);e.agent_settings_diff.mcp_config=h?Y(t):t}c.conversation_settings_diff&&(e.conversation_settings_diff=c.conversation_settings_diff),s&&(e.app_preferences=a);try{await B(()=>j(e))}catch(e){if(g&&m)try{await j({agent_settings_diff:{mcp_config:m}})}catch{}throw e}}else{if(!(c.agent_settings_diff||c.conversation_settings_diff||c.misc_settings_diff))return!0;g&&await B(()=>new e(t()).updateSettings({agent_settings_diff:{mcp_config:null}}));try{await B(()=>new e(t()).updateSettings(c))}catch(n){if(g&&m)try{await new e(t()).updateSettings({agent_settings_diff:{mcp_config:m}})}catch{}throw n}}return W(),!0}static invalidateCache(){W()}};export{S as a,E as c,s as d,T as i,a as l,l as n,x as o,m as r,C as s,ee as t,o as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as e}from"./rolldown-runtime-Cyuzqnbw.js";import{St as t,yt as n}from"./vendor-styling-Bcgpimp9.js";import{n as r}from"./vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~emdr2jt4-BrmgjeOw.js";import{t as i}from"./vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~gy8zbn65-CGt6bWRT.js";import{t as a}from"./useMutation-CaSHLnX0.js";import{t as o}from"./Trans-Bwpzk1wT.js";import{t as s,z as c}from"./utils-BgGG1znF.js";import{t as l}from"./modal-backdrop-X-vKo61e.js";import{n as u}from"./modal-body-CMsDpalT.js";import{n as d,r as f}from"./base-modal-BBuy0WQQ.js";import{_ as p,u as m}from"./form-control-classes-DAfsCJTe.js";import{t as h}from"./brand-button-DGN6Y9o6.js";import{t as g}from"./agent-server-conversation-service.api-CYSWw-2g.js";var _=e(t(),1),v=n();function y({onConfirm:e,onCancel:t,conversationTitle:n,title:r,description:a}){let{t:s}=i(`openhands`),p;return p=a??(n?(0,v.jsx)(o,{ns:`openhands`,i18nKey:c.CONVERSATION$DELETE_WARNING_WITH_TITLE,values:{title:n},components:{title:(0,v.jsx)(`span`,{className:`text-white`})}}):s(c.CONVERSATION$DELETE_WARNING)),(0,v.jsx)(l,{onClose:t,children:(0,v.jsxs)(u,{className:`items-start border border-[var(--oh-border)]`,children:[(0,v.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,v.jsx)(f,{title:r??s(c.CONVERSATION$CONFIRM_DELETE)}),(0,v.jsx)(d,{children:p})]}),(0,v.jsxs)(`div`,{className:`flex justify-end gap-2 w-full`,onClick:e=>e.stopPropagation(),children:[(0,v.jsx)(h,{type:`button`,variant:`secondary`,onClick:t,"data-testid":`cancel-button`,children:s(c.BUTTON$CANCEL)}),(0,v.jsx)(h,{type:`button`,variant:`primary`,onClick:e,"data-testid":`confirm-button`,children:s(c.ACTION$CONFIRM_DELETE)})]})]})})}function b({onConfirm:e,onCancel:t}){let{t:n}=i(`openhands`);return(0,v.jsx)(l,{onClose:t,children:(0,v.jsxs)(u,{className:`items-start border border-[var(--oh-border)]`,children:[(0,v.jsxs)(`div`,{className:`flex flex-col gap-2`,children:[(0,v.jsx)(f,{title:n(c.CONVERSATION$CONFIRM_CLOSE_CONVERSATION)}),(0,v.jsx)(d,{description:n(c.CONVERSATION$CLOSE_CONVERSATION_WARNING)})]}),(0,v.jsxs)(`div`,{className:`flex justify-end gap-2 w-full`,onClick:e=>e.stopPropagation(),children:[(0,v.jsx)(h,{type:`button`,variant:`secondary`,onClick:t,"data-testid":`cancel-button`,children:n(c.BUTTON$CANCEL)}),(0,v.jsx)(h,{type:`button`,variant:`primary`,onClick:e,"data-testid":`confirm-button`,children:n(c.ACTION$CONFIRM_CLOSE)})]})]})})}var x=()=>{let e=r();return a({mutationFn:e=>g.updateConversationTitle(e.conversationId,e.newTitle),onMutate:async t=>{await e.cancelQueries({queryKey:[`user`,`conversations`]});let n=e.getQueryData([`user`,`conversations`]);return e.setQueryData([`user`,`conversations`],e=>e?.map(e=>e.id===t.conversationId?{...e,title:t.newTitle}:e)),e.setQueryData([`user`,`conversation`,t.conversationId],e=>e&&{...e,title:t.newTitle}),{previousConversations:n}},onError:(t,n,r)=>{r?.previousConversations&&e.setQueryData([`user`,`conversations`],r.previousConversations)},onSettled:(t,n,r)=>{e.invalidateQueries({queryKey:[`user`,`conversations`]}),e.invalidateQueries({queryKey:[`user`,`conversation`,r.conversationId]})}})};function S(e){if(!e)return null;try{let t=new URL(e);return t.hostname===`localhost`&&window.location.hostname!==`localhost`?(t.hostname=window.location.hostname,t.toString()):e}catch{return e}}var C=e=>(0,v.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,...e,children:(0,v.jsx)(`path`,{d:`M12 2C12.5523 2 13 2.44772 13 3V13.5858L15.2929 11.2929C15.6834 10.9024 16.3166 10.9024 16.7071 11.2929C17.0976 11.6834 17.0976 12.3166 16.7071 12.7071L12.7071 16.7071C12.3166 17.0976 11.6834 17.0976 11.2929 16.7071L7.29289 12.7071C6.90237 12.3166 6.90237 11.6834 7.29289 11.2929C7.68342 10.9024 8.31658 10.9024 8.70711 11.2929L11 13.5858V3C11 2.44772 11.4477 2 12 2ZM5 17C5.55228 17 6 17.4477 6 18V20H18V18C18 17.4477 18.4477 17 19 17C19.5523 17 20 17.4477 20 18V20C20 21.1046 19.1046 22 18 22H6C4.89543 22 4 21.1046 4 20V18C4 17.4477 4.44772 17 5 17Z`,fill:`currentColor`})}),w=e=>(0,v.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,...e,children:(0,v.jsx)(`path`,{fillRule:`evenodd`,clipRule:`evenodd`,d:`M21 7.5V9H3V7.5H21ZM3 10.5H21V18H3V10.5ZM21 6H3C2.60218 6 2.22064 6.15804 1.93934 6.43934C1.65804 6.72064 1.5 7.10218 1.5 7.5V18C1.5 18.3978 1.65804 18.7794 1.93934 19.0607C2.22064 19.342 2.60218 19.5 3 19.5H21C21.3978 19.5 21.7794 19.342 22.0607 19.0607C22.342 18.7794 22.5 18.3978 22.5 18V7.5C22.5 7.10218 22.342 6.72064 22.0607 6.43934C21.7794 6.15804 21.3978 6 21 6ZM16.5 15H19.5V16.5H16.5V15Z`,fill:`currentColor`})}),T=_.createContext(null);function E({children:e}){let[t,n]=_.useState(!1),r=_.useCallback(()=>n(!0),[]),i=_.useCallback(()=>n(!1),[]),a=_.useCallback(()=>n(e=>!e),[]),o=_.useMemo(()=>({isOpen:t,open:r,close:i,toggle:a}),[t,r,i,a]);return(0,v.jsx)(T.Provider,{value:o,children:e})}function D(){let e=_.useContext(T);if(!e)throw Error(`useSidebarMobileNav must be used within SidebarMobileNavProvider`);return e}var O=s(`inline-flex shrink-0 cursor-pointer items-center justify-center rounded-md p-1`,`text-[var(--oh-muted)]`,p,m),k=`size-5 shrink-0`,A=e=>(0,v.jsx)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,...e,children:(0,v.jsx)(`path`,{fillRule:`evenodd`,clipRule:`evenodd`,d:`M10 5.5H18C18.2761 5.5 18.5 5.72386 18.5 6V18C18.5 18.2761 18.2761 18.5 18 18.5H10L10 5.5ZM8.5 5.5H6C5.72386 5.5 5.5 5.72386 5.5 6V18C5.5 18.2761 5.72386 18.5 6 18.5H8.5L8.5 5.5ZM18 4H6C4.89543 4 4 4.89543 4 6V18C4 19.1046 4.89543 20 6 20H18C19.1046 20 20 19.1046 20 18V6C20 4.89543 19.1046 4 18 4Z`,fill:`currentColor`})});function j(){let{t:e}=i(`openhands`),{isOpen:t,toggle:n}=D();return(0,v.jsx)(`button`,{type:`button`,"data-testid":`sidebar-mobile-menu-toggle`,onClick:n,"aria-expanded":t,"aria-label":e(t?c.SIDEBAR$CLOSE_MENU:c.SIDEBAR$OPEN_MENU),className:O,children:(0,v.jsx)(A,{className:k,"aria-hidden":!0})})}export{E as a,C as c,b as d,y as f,k as i,S as l,A as n,D as o,O as r,w as s,j as t,x as u};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as e}from"./rolldown-runtime-Cyuzqnbw.js";import{St as t,yt as n}from"./vendor-styling-Bcgpimp9.js";import{W as r}from"./vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~d4by102p-C2f0ZhS-.js";import{t as i}from"./vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~gy8zbn65-CGt6bWRT.js";import{t as a}from"./Trans-Bwpzk1wT.js";import{Nt as o,kt as s}from"./active-backend-context-BiwzkzDy.js";import{t as c,z as l}from"./utils-BgGG1znF.js";import{t as u}from"./search-Dc2qR4O2.js";import{t as d}from"./x-omAzpXkl.js";import{n as f}from"./use-settings-8nt3DGxW.js";import{t as p}from"./use-save-settings-L3aMaDeS.js";import{t as m}from"./modal-backdrop-X-vKo61e.js";import{n as h}from"./modal-classes-B6PDrxXo.js";import{t as g}from"./brand-button-DGN6Y9o6.js";import{t as _}from"./modal-close-button-DyxBZaAb.js";import{t as v}from"./checkmark-CxdXtM3b.js";import{t as y}from"./copy-z7idLzWO.js";import{a as b,r as x}from"./extension-module-card-classes-Bo43vY5V.js";import{t as S}from"./settings-switch-LqKdGxHL.js";import{n as C,t as w}from"./skill-card-pill-row-CZBI7OqH.js";import{n as T}from"./circle-plus-check-toggle-yTAS-nX3.js";import{t as E}from"./use-skills-CE6miQ3r.js";import{n as D}from"./extensions-navigation-CfWFmI1I.js";import{t as O}from"./skill-icon-badge-BOov_phZ.js";import{n as k,t as A}from"./use-launch-skill-in-chat-DKzCTMt0.js";import{t as ee}from"./enum-filter-dropdown-C08-srev.js";import{n as te}from"./settings-like-page-layout-classes-DyxyJ0k4.js";var j=e(t(),1),M=/^---\r?\n([\s\S]*?)\r?\n---\r?\n?/;function N(e){let t=e.match(/^description:\s*\|\s*\r?\n((?:[ \t].*(?:\r?\n|$))+)/m);if(t)return t[1].replace(/^[ \t]+/gm,``).trim();let n=e.match(/^description:\s*['"](.+?)['"]\s*$/m);if(n)return n[1].trim();let r=e.match(/^description:\s*(.+)\s*$/m);return r?r[1].trim():null}function P(e){let t=e.match(M);return t?e.slice(t[0].length).trim():e.trim()}function F(e){let t=e.replace(/^#+\s+[^\n]+\n+/,``).trim();return t.split(/\n\s*\n/).map(e=>e.replace(/\s+/g,` `).trim()).find(e=>e.length>0)??t.replace(/\s+/g,` `).trim()}function I(e){let t=e.description?.trim();if(t)return t;let n=e.content?.trim();if(!n)return``;let r=n.match(M);if(r){let e=N(r[1]);if(e)return e}return F(P(n))}var L=n(),ne=`inline-flex shrink-0 items-center whitespace-nowrap rounded-full border border-text-secondary/35 bg-text-secondary/12 px-2 py-0.5 text-[11px] font-medium leading-4 text-tertiary-light`,R={agentskills:{labelKey:l.SETTINGS$SKILLS_TYPE_AGENTSKILLS},knowledge:{labelKey:l.SETTINGS$SKILLS_TYPE_KNOWLEDGE},repo:{labelKey:l.SETTINGS$SKILLS_TYPE_REPO}};function z({type:e}){let{t}=i(`openhands`),n=R[e];return(0,L.jsx)(`span`,{"data-testid":`skill-type-badge-${e}`,className:ne,children:t(n.labelKey)})}function B(e,t,n){if(e)return`${e}-${t}-${n}`}function V(e,t,n={}){let{variant:r=`card`,testIdPrefix:i}=n,a=[{id:`type-${e.type}`,node:(0,L.jsx)(z,{type:e.type})}];if(e.version&&a.push({id:`version-${e.version}`,node:(0,L.jsx)(`span`,{"data-testid":B(i,e.name,`version`)??`skill-version-${e.name}`,className:w,children:t(l.SETTINGS$SKILLS_VERSION,{version:e.version})})}),r===`detail`&&e.license&&a.push({id:`license-${e.license}`,node:(0,L.jsx)(`span`,{"data-testid":B(i,e.name,`license`),className:w,children:e.license})}),r===`detail`&&e.compatibility&&a.push({id:`compatibility-${e.compatibility}`,node:(0,L.jsx)(`span`,{"data-testid":B(i,e.name,`compatibility`),className:w,children:e.compatibility})}),e.disable_model_invocation&&a.push({id:`disable-model-invocation`,node:(0,L.jsxs)(`span`,{"data-testid":B(i,e.name,`disable-model-invocation`)??`skill-disable-model-invocation-${e.name}`,className:`inline-flex shrink-0 items-center gap-1 whitespace-nowrap rounded-full border border-[rgba(248,113,113,0.35)] bg-[rgba(248,113,113,0.12)] px-2 py-0.5 text-[11px] font-medium leading-4 text-[#fca5a5]`,children:[(0,L.jsx)(`span`,{className:`size-1.5 rounded-full bg-[#fca5a5]`}),t(l.SETTINGS$SKILLS_DISABLE_MODEL_INVOCATION)]})}),r===`detail`&&e.allowed_tools)for(let t of e.allowed_tools)a.push({id:`allowed-tool-${t}`,node:(0,L.jsx)(`span`,{"data-testid":B(i,e.name,`tool-${t}`),className:c(w,`font-mono`),children:t})});if(r===`detail`&&e.metadata)for(let[t,n]of Object.entries(e.metadata))a.push({id:`metadata-${t}`,node:(0,L.jsxs)(`span`,{"data-testid":B(i,e.name,`metadata-${t}`),className:w,children:[(0,L.jsxs)(`span`,{className:`font-mono text-[10px] text-tertiary-light`,children:[t,`:`]}),` `,n]})});for(let t of e.triggers??[])a.push({id:`trigger-${t}`,node:(0,L.jsx)(`span`,{"data-testid":B(i,e.name,`trigger-${t}`),className:w,children:t})});return a}function H(e){let t=e?.trim();return t?!!(/^https?:\/\//i.test(t)||t.startsWith(`/`)||t.startsWith(`./`)||t.startsWith(`../`)||t.startsWith(`~`)||/^[A-Za-z]:[\\/]/.test(t)||t.includes(`/`)||t.includes(`\\`)):!1}function U({skill:e,enabled:t,onOpen:n,onToggle:r}){let{t:a}=i(`openhands`),[o,s]=j.useState(!1),u=I(e),d=j.useMemo(()=>V(e,a),[e,a]),f=H(e.source);return j.useEffect(()=>{if(!o)return;let e=setTimeout(()=>s(!1),2e3);return()=>clearTimeout(e)},[o]),(0,L.jsx)(`div`,{"data-testid":`skill-card-${e.name}`,role:`button`,tabIndex:0,onClick:n,onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),n())},className:c(`flex min-w-0 flex-col gap-3 overflow-hidden p-4`,b,x),children:(0,L.jsxs)(`div`,{className:`flex items-start gap-3`,children:[(0,L.jsx)(O,{skillName:e.name}),(0,L.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-col gap-3`,children:[(0,L.jsxs)(`header`,{className:`flex items-start justify-between gap-3`,children:[(0,L.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,L.jsx)(`h3`,{"data-testid":`skill-name-${e.name}`,className:`truncate text-sm font-semibold text-white`,children:e.name}),e.source?(0,L.jsxs)(`div`,{className:`mt-0.5 flex min-w-0 items-center gap-1`,children:[(0,L.jsx)(`p`,{"data-testid":`skill-source-${e.name}`,className:`min-w-0 flex-1 truncate text-xs text-tertiary-alt`,title:e.source,children:e.source}),f?(0,L.jsx)(`button`,{type:`button`,"data-testid":`skill-copy-source-${e.name}`,"aria-label":a(o?l.BUTTON$COPIED:l.SETTINGS$SKILLS_COPY_PATH),disabled:o,onClick:async t=>{t.stopPropagation(),e.source&&(await navigator.clipboard.writeText(e.source),s(!0))},className:`shrink-0 cursor-pointer border-0 bg-transparent p-0.5 text-tertiary-alt hover:text-white disabled:cursor-default [&_path]:fill-current`,children:o?(0,L.jsx)(v,{width:12,height:12}):(0,L.jsx)(y,{width:12,height:12})}):null]}):null]}),(0,L.jsx)(T,{testId:`skill-toggle-${e.name}`,isSelected:t,onToggle:r,disableTooltipKey:l.COMMON$DISABLE})]}),u?(0,L.jsx)(`div`,{"data-testid":`skill-description-${e.name}`,className:`min-w-0`,children:(0,L.jsx)(`p`,{className:`line-clamp-2 break-words text-xs leading-relaxed text-tertiary-light`,children:u})}):null,d.length>0?(0,L.jsx)(C,{pills:d,testId:`skill-triggers-${e.name}`}):null]})]})})}var W=`https://docs.openhands.dev/overview/skills/adding#adding-new-skills`,G=`/add-skill https://github.com/OpenHands/extensions/tree/main/skills/codereview`;function K(e){return e.name===`add-skill`?G:`/${e.name} `}function q({testId:e,label:t,value:n}){return(0,L.jsxs)(`label`,{className:`flex min-w-0 w-full flex-col gap-2.5`,children:[(0,L.jsx)(`span`,{className:`text-sm`,children:t}),(0,L.jsx)(`textarea`,{"data-testid":e,readOnly:!0,value:n,rows:Math.min(12,Math.max(4,n.split(`
|
|
2
|
-
`).length)),className:c(`bg-[var(--oh-surface-raised)] border border-[var(--oh-border-subtle)] w-full min-w-0 rounded-sm p-2 text-sm`,`cursor-not-allowed resize-none custom-scrollbar`)})]})}function J({skill:e,enabled:t,onToggle:n,onClose:r}){let{t:a}=i(`openhands`),o=A(),[s,c]=j.useState(!1),u=j.useMemo(()=>K(e),[e]),d=I(e),f=j.useMemo(()=>V(e,a,{variant:`detail`,testIdPrefix:`skill-modal-pill`}),[e,a]),p=H(e.source);return j.useEffect(()=>{if(!s)return;let e=setTimeout(()=>c(!1),2e3);return()=>clearTimeout(e)},[s]),(0,L.jsx)(m,{onClose:r,"aria-label":e.name,children:(0,L.jsxs)(`div`,{"data-testid":`skill-detail-modal`,"data-skill-name":e.name,className:`relative bg-base-secondary p-6 rounded-xl flex flex-col gap-4 border border-[var(--oh-border)] w-[520px] max-w-[90vw] max-h-[85vh] overflow-y-auto custom-scrollbar`,children:[(0,L.jsx)(_,{onClose:r,testId:`skill-detail-modal-close`}),(0,L.jsxs)(`div`,{className:`flex items-start gap-3 pr-6`,children:[(0,L.jsx)(O,{skillName:e.name}),(0,L.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,L.jsx)(`h2`,{"data-testid":`skill-modal-name-${e.name}`,className:h,children:e.name}),e.source?(0,L.jsxs)(`div`,{className:`mt-0.5 flex min-w-0 items-center gap-1`,children:[(0,L.jsx)(`p`,{"data-testid":`skill-modal-source-${e.name}`,className:`min-w-0 flex-1 truncate text-xs text-tertiary-alt`,title:e.source,children:e.source}),p?(0,L.jsx)(`button`,{type:`button`,"data-testid":`skill-modal-copy-source-${e.name}`,"aria-label":a(s?l.BUTTON$COPIED:l.SETTINGS$SKILLS_COPY_PATH),disabled:s,onClick:async()=>{e.source&&(await navigator.clipboard.writeText(e.source),c(!0))},className:`shrink-0 cursor-pointer border-0 bg-transparent p-0.5 text-tertiary-alt hover:text-white disabled:cursor-default [&_path]:fill-current`,children:s?(0,L.jsx)(v,{width:12,height:12}):(0,L.jsx)(y,{width:12,height:12})}):null]}):null]})]}),(0,L.jsx)(`div`,{"data-testid":`skill-modal-enable-row-${e.name}`,className:`flex w-full items-center rounded-lg border border-[var(--oh-border)] bg-[rgba(255,255,255,0.04)] px-3 py-2.5`,children:(0,L.jsx)(S,{testId:`skill-modal-toggle-${e.name}`,isToggled:t,onToggle:n,togglePosition:`right`,children:a(t?l.SETTINGS$SKILLS_ENABLED:l.SETTINGS$SKILLS_DISABLED)})}),d?(0,L.jsx)(`p`,{"data-testid":`skill-modal-description-${e.name}`,className:`text-xs text-tertiary-light`,children:d}):null,f.length>0?(0,L.jsx)(C,{pills:f,testId:`skill-modal-pills-${e.name}`}):null,e.content?(0,L.jsx)(q,{testId:`skill-modal-field-content-${e.name}`,label:a(l.SETTINGS$SKILLS_CONTENT),value:e.content}):null,(0,L.jsxs)(`div`,{className:`mt-2 flex justify-end gap-2`,children:[(0,L.jsx)(g,{type:`button`,variant:`secondary`,onClick:r,testId:`skill-detail-close`,children:a(l.BUTTON$CLOSE)}),(0,L.jsx)(g,{type:`button`,variant:`primary`,isDisabled:!t,onClick:()=>o(u,r),testId:`skill-detail-use-skill-${e.name}`,startContent:(0,L.jsx)(k,{className:`size-4`,"aria-hidden":!0}),children:a(l.SETTINGS$SKILLS_USE_SKILL_BUTTON)})]})]})})}var Y=[l.SETTINGS$SKILLS_ADD_MODAL_STEP_1,l.SETTINGS$SKILLS_ADD_MODAL_STEP_2,l.SETTINGS$SKILLS_ADD_MODAL_STEP_3,l.SETTINGS$SKILLS_ADD_MODAL_STEP_4,l.SETTINGS$SKILLS_ADD_MODAL_STEP_5],X={cmd:(0,L.jsx)(Z,{}),path:(0,L.jsx)(Z,{}),env:(0,L.jsx)(Z,{})};function Z({children:e}){return(0,L.jsx)(`code`,{className:c(`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 re(){let{t:e}=i(`openhands`),[t,n]=j.useState(!1);return j.useEffect(()=>{if(!t)return;let e=setTimeout(()=>n(!1),2e3);return()=>clearTimeout(e)},[t]),(0,L.jsxs)(`div`,{className:`relative`,children:[(0,L.jsx)(`pre`,{"data-testid":`add-skill-modal-example`,className:c(`overflow-x-auto rounded-sm border border-[var(--oh-border-subtle)]`,`bg-[var(--oh-surface-raised)] p-2 pr-10 text-xs text-white`),children:G}),(0,L.jsx)(`button`,{type:`button`,"data-testid":`add-skill-modal-example-copy`,"aria-label":e(t?l.BUTTON$COPIED:l.BUTTON$COPY),disabled:t,onClick:async()=>{await navigator.clipboard.writeText(G),n(!0)},className:c(`absolute right-2 top-2 cursor-pointer rounded-sm border border-[var(--oh-border-subtle)]`,`bg-base-secondary p-1 text-tertiary-alt transition-colors`,`hover:bg-[var(--oh-surface)] hover:text-white disabled:cursor-default [&_path]:fill-current`),children:t?(0,L.jsx)(v,{width:14,height:14}):(0,L.jsx)(y,{width:14,height:14})})]})}function Q({i18nKey:e}){return(0,L.jsx)(`p`,{className:`text-xs leading-relaxed text-tertiary-light`,children:(0,L.jsx)(a,{ns:`openhands`,i18nKey:e,components:X})})}function ie({onClose:e}){let{t}=i(`openhands`);return(0,L.jsx)(m,{onClose:e,"aria-label":t(l.SETTINGS$SKILLS_ADD_MODAL_TITLE),children:(0,L.jsxs)(`div`,{"data-testid":`add-skill-modal`,className:`relative flex w-[520px] max-w-[90vw] max-h-[85vh] flex-col rounded-xl border border-[var(--oh-border)] bg-base-secondary`,children:[(0,L.jsx)(_,{onClose:e,testId:`add-skill-modal-close`}),(0,L.jsxs)(`header`,{className:`flex-shrink-0 px-6 pb-4 pt-6`,children:[(0,L.jsx)(`h2`,{className:c(`pr-6`,h),children:t(l.SETTINGS$SKILLS_ADD_MODAL_TITLE)}),(0,L.jsx)(`p`,{className:`mt-4 text-sm text-tertiary-light`,children:t(l.SETTINGS$SKILLS_ADD_MODAL_INTRO)})]}),(0,L.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col gap-4 overflow-y-auto px-6 custom-scrollbar`,children:[(0,L.jsxs)(`section`,{className:`flex flex-col gap-2`,children:[(0,L.jsx)(`h3`,{className:`text-sm font-semibold text-foreground`,children:t(l.SETTINGS$SKILLS_ADD_MODAL_CHAT_TITLE)}),(0,L.jsx)(Q,{i18nKey:l.SETTINGS$SKILLS_ADD_MODAL_CHAT_BODY}),(0,L.jsx)(`p`,{className:`text-xs text-tertiary-light`,children:t(l.SETTINGS$SKILLS_ADD_MODAL_EXAMPLE_LABEL)}),(0,L.jsx)(re,{}),(0,L.jsx)(`ol`,{className:`list-decimal space-y-1 pl-4 text-xs leading-relaxed text-tertiary-light`,children:Y.map(e=>(0,L.jsx)(`li`,{children:e===l.SETTINGS$SKILLS_ADD_MODAL_STEP_3?(0,L.jsx)(a,{ns:`openhands`,i18nKey:e,components:X}):t(e)},e))})]}),(0,L.jsxs)(`section`,{className:`flex flex-col gap-1`,children:[(0,L.jsx)(`h3`,{className:`text-sm font-semibold text-foreground`,children:t(l.SETTINGS$SKILLS_ADD_MODAL_URL_FORMATS_TITLE)}),(0,L.jsx)(`p`,{className:`text-xs leading-relaxed text-tertiary-light`,children:t(l.SETTINGS$SKILLS_ADD_MODAL_URL_FORMATS)})]}),(0,L.jsxs)(`section`,{className:`flex flex-col gap-1`,children:[(0,L.jsx)(`h3`,{className:`text-sm font-semibold text-foreground`,children:t(l.SETTINGS$SKILLS_ADD_MODAL_STORAGE_TITLE)}),(0,L.jsx)(Q,{i18nKey:l.SETTINGS$SKILLS_ADD_MODAL_STORAGE_BODY})]}),(0,L.jsx)(Q,{i18nKey:l.SETTINGS$SKILLS_ADD_MODAL_PRIVATE_REPOS}),(0,L.jsx)(`a`,{href:W,target:`_blank`,rel:`noreferrer`,"data-testid":`add-skill-modal-docs-link`,className:`self-start text-xs text-[var(--oh-muted)] transition-colors hover:text-white hover:underline`,children:t(l.SETTINGS$SKILLS_ADD_MODAL_VIEW_DOCS)})]}),(0,L.jsx)(`footer`,{className:`flex flex-shrink-0 justify-end gap-2 px-6 pb-6 pt-4`,children:(0,L.jsx)(g,{type:`button`,variant:`secondary`,onClick:e,testId:`add-skill-modal-dismiss`,children:t(l.BUTTON$CLOSE)})})]})})}var ae=[`all`,`agentskills`,`knowledge`,`repo`],oe={all:l.SETTINGS$SKILLS_TYPE_ALL,agentskills:l.SETTINGS$SKILLS_TYPE_AGENTSKILLS,knowledge:l.SETTINGS$SKILLS_TYPE_KNOWLEDGE,repo:l.SETTINGS$SKILLS_TYPE_REPO};function se({value:e,onChange:t}){return(0,L.jsx)(ee,{testId:`skills-type-filter`,value:e,onChange:t,options:ae,labelKeyByValue:oe})}function ce({search:e,onSearchChange:t,typeFilter:n,onTypeFilterChange:r}){let{t:a}=i(`openhands`);return(0,L.jsxs)(`div`,{"data-testid":`skills-toolbar`,className:`flex items-stretch gap-2`,children:[(0,L.jsxs)(`div`,{className:c(`relative flex flex-1 min-w-0 items-center`,`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`),children:[(0,L.jsx)(u,{className:`ml-3 h-4 w-4 shrink-0 text-tertiary-alt`,"aria-hidden":!0}),(0,L.jsx)(`input`,{"data-testid":`skills-search-input`,type:`search`,value:e,onChange:e=>t(e.target.value),placeholder:a(l.SETTINGS$SKILLS_SEARCH_PLACEHOLDER),"aria-label":a(l.SETTINGS$SKILLS_SEARCH_PLACEHOLDER),className:c(`flex-1 min-w-0 bg-transparent border-0 outline-none`,`px-3 py-2 text-sm placeholder:text-tertiary-alt`,`[&::-webkit-search-cancel-button]:hidden`)}),e?(0,L.jsx)(`button`,{type:`button`,onClick:()=>t(``),"aria-label":a(l.MCP$SEARCH_CLEAR),className:`mr-2 p-1 rounded text-tertiary-alt hover:text-white cursor-pointer`,children:(0,L.jsx)(d,{className:`h-4 w-4`,"aria-hidden":!0})}):null]}),(0,L.jsx)(se,{value:n,onChange:r})]})}function le(e,t){if(!t)return!0;let n=[e.name,I(e),e.description??``,e.content??``,e.license??``,e.compatibility??``,...e.triggers??[],...e.allowed_tools??[]],r=t.toLowerCase();return n.some(e=>e.toLowerCase().includes(r))}function $(){let{t:e}=i(`openhands`),{mutate:t}=p(),{data:n,isLoading:r}=f(),{data:a,isLoading:u}=E(),[d,m]=j.useState(new Set),[h,_]=j.useState(!1),[v,y]=j.useState(``),[b,x]=j.useState(`all`),[S,C]=j.useState(null),[w,T]=j.useState(!1);j.useEffect(()=>{r||!n||(m(new Set(n.disabled_skills??[])),_(!0))},[r,n?.disabled_skills]);let O=(e,t)=>{m(n=>{let r=new Set(n);return t?r.delete(e):r.add(e),r})};j.useEffect(()=>{h&&t({disabled_skills:Array.from(d)},{onError:t=>{s(o(t)||e(l.ERROR$GENERIC))}})},[d,h,t,e]);let k=r||u||!n,A=j.useMemo(()=>a?a.filter(e=>(b===`all`||e.type===b)&&le(e,v)):[],[a,b,v]);return(0,L.jsxs)(`div`,{"data-testid":`skills-settings-screen`,className:`flex h-full gap-4 md:gap-6 md:pl-8 lg:gap-10 lg:pl-10`,children:[(0,L.jsx)(D,{}),(0,L.jsx)(`main`,{className:c(te,`h-full`),children:(0,L.jsxs)(`div`,{className:`mx-auto flex w-full min-w-0 max-w-[800px] flex-col gap-6`,children:[(0,L.jsxs)(`div`,{className:`flex min-w-0 items-start justify-between gap-4`,children:[(0,L.jsxs)(`div`,{className:`min-w-0 space-y-1`,children:[(0,L.jsx)(`h2`,{className:`text-xl font-semibold leading-6 text-foreground`,children:e(l.SETTINGS$SKILLS_TITLE)}),(0,L.jsx)(`div`,{"data-testid":`skills-settings-description`,className:`max-w-2xl text-sm text-tertiary-light`,children:e(l.SETTINGS$SKILLS_PAGE_DESCRIPTION)})]}),(0,L.jsx)(g,{type:`button`,variant:`secondary`,testId:`skills-add-skill-button`,className:`flex-shrink-0 whitespace-nowrap`,onClick:()=>T(!0),children:e(l.SETTINGS$SKILLS_ADD_BUTTON)})]}),k&&(0,L.jsx)(`div`,{className:`flex flex-col gap-4`,children:[1,2,3].map(e=>(0,L.jsx)(`div`,{className:`h-24 rounded-2xl bg-tertiary animate-pulse`},e))}),!k&&(!a||a.length===0)&&(0,L.jsx)(`div`,{"data-testid":`skills-empty`,className:`rounded-xl border border-[var(--oh-border)] p-8 text-center`,children:(0,L.jsx)(`p`,{className:`text-sm text-tertiary-light`,children:e(l.SETTINGS$SKILLS_NO_SKILLS)})}),!k&&a&&a.length>0&&(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(ce,{search:v,onSearchChange:y,typeFilter:b,onTypeFilterChange:x}),A.length===0?(0,L.jsx)(`div`,{"data-testid":`skills-no-match`,className:`rounded-xl border border-[var(--oh-border)] p-8 text-center`,children:(0,L.jsx)(`p`,{className:`text-sm text-tertiary-light`,children:e(l.SETTINGS$SKILLS_NO_MATCH)})}):(0,L.jsx)(`section`,{className:c(`flex min-w-0 flex-col gap-3`,`@container min-w-0 w-full`),children:(0,L.jsx)(`div`,{className:`grid min-w-0 grid-cols-1 gap-3 @min-[600px]:grid-cols-2`,children:A.map(e=>(0,L.jsx)(U,{skill:e,enabled:!d.has(e.name),onOpen:()=>C(e),onToggle:t=>O(e.name,t)},e.name))})})]}),S&&(0,L.jsx)(J,{skill:S,enabled:!d.has(S.name),onToggle:e=>O(S.name,e),onClose:()=>C(null)}),w&&(0,L.jsx)(ie,{onClose:()=>T(!1)})]})})]})}var ue=r($);export{ue as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./useQuery-DiPh8LRJ.js";var t=()=>e({queryKey:[`user`,`authenticated`],queryFn:async()=>!0,staleTime:1e3*60*5,gcTime:1e3*60*15,retry:!1,meta:{disableToast:!0}});export{t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{t as e}from"./useQuery-DiPh8LRJ.js";import{M as t,N as n,n as r}from"./active-backend-context-BiwzkzDy.js";import{t as i}from"./profiles-service.api-CukSFLzz.js";function a(a={}){let{backend:o,orgId:s}=r();return e({queryKey:[...n.all,o.id,s],queryFn:i.listProfiles,...t,enabled:a.enabled??!0,meta:{disableToast:!0}})}export{a as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{n as e}from"./vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~emdr2jt4-BrmgjeOw.js";import{t}from"./useMutation-CaSHLnX0.js";import{k as n}from"./active-backend-context-BiwzkzDy.js";import{n as r}from"./use-agent-profiles-TsOdIyw5.js";function i(){let i=e();return t({mutationFn:({name:e,profile:t})=>r.saveProfile(e,t),onSuccess:async()=>{await i.invalidateQueries({queryKey:n.all})},meta:{disableToast:!0}})}export{i as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{u as e}from"./vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~b0bpqexo-CbTboogo.js";import{t}from"./useQuery-DiPh8LRJ.js";import{$ as n,ct as r,vt as i}from"./active-backend-context-BiwzkzDy.js";import{t as a}from"./proxy-BBUG3sd2.js";import{t as o}from"./vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~dufan6ng-Dtdw8H0q.js";var s=100;function c(){let e=r().backend;if(e.kind!==`cloud`)throw Error(`Cloud skills call requires a cloud backend.`);return e}async function l(){let e=c(),t=[],n=null;do{let r=new URLSearchParams({limit:String(s)});n&&r.set(`page_id`,n);let i=await a({backend:e,method:`GET`,path:`/api/v1/skills/search?${r.toString()}`});t.push(...i.items??[]),n=i.next_page_id}while(n);return t}function u(e){return{name:e.name,type:`knowledge`,source:`public`,description:e.description,triggers:e.triggers,content:e.content,license:e.license??null,compatibility:e.compatibility??null}}var d=o.map(u),f=class{static async getSkills(t){if(r().backend.kind===`cloud`)return l();let a=[];try{a=(await new e(n()).getSkills({load_public:!1,load_user:!0,load_project:!0,load_org:!1,project_dir:t??i()})).skills??[]}catch{}return[...a,...d]}},p=e=>t({queryKey:[`skills`,e??null],queryFn:()=>f.getSkills(e),staleTime:1e3*60*10,refetchOnWindowFocus:!1});export{p as t};
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import{a as e,r as t}from"./rolldown-runtime-Cyuzqnbw.js";import{St as n}from"./vendor-styling-Bcgpimp9.js";import{j as r}from"./vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~b0bpqexo-CbTboogo.js";import{O as i,Q as a,T as o,W as s,a as c,b as l,ct as u,d as ee,dt as te,f as ne,h as d,lt as re,n as ie,p as ae,w as oe}from"./active-backend-context-BiwzkzDy.js";import{z as f}from"./utils-BgGG1znF.js";import{t as p}from"./proxy-BBUG3sd2.js";import{t as se}from"./vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~dufan6ng-Dtdw8H0q.js";var m=e(n(),1),ce=new Map(se.map(e=>[e.name,e]));function le(e){return Object.keys(e.requires.integrations)}function ue(e){return Object.entries(e.requires.integrations).filter(([,e])=>e.required!==!1).map(([e])=>e)}function h(e){return ce.get(e.skill??e.id)?.triggers[0]??null}function de(e){return h(e)??`Set up the ${e.name} automation`}var fe=[{id:`github-pr-reviewer`,name:`GitHub Code Review Agent`,category:`Code review`,description:`Watch for a configurable label on GitHub pull requests, inspect full PR and repository context, and post an AI review comment once per label event.`,requires:{integrations:{github:{message:`Used to read pull requests and post review comments.`}},features:[`repoClone`,`presetPrompt`]},popularityRank:100,estimatedSetupMinutes:4,exampleImplementation:`Trigger: cron polling for open GitHub PRs with a configured label such as openhands-review
|
|
2
|
-
Required secret: GITHUB_PERSONAL_ACCESS_TOKEN
|
|
3
|
-
|
|
4
|
-
1. Read repository, trigger label, review tone, and polling schedule from setup.
|
|
5
|
-
2. List open PRs and find the latest matching GitHub labeled issue event for each labeled PR.
|
|
6
|
-
3. Deduplicate on the label event ID so every label application queues exactly one review.
|
|
7
|
-
4. Start an OpenHands conversation that clones the repo, checks out the exact PR head SHA, and inspects PR discussion, review comments, changed files, diff, and surrounding code.
|
|
8
|
-
5. Post an acknowledgement with the conversation link, then post the final AI review comment only if the PR is still open and the head SHA has not changed.`,setup:{version:`1.0`,mode:`direct`,form:{triggers:{cron:{schedule:{type:`cron`,label:`Check frequency`,help:`How often to look for newly labelled pull requests.`,default:`*/15 * * * *`,required:!0},timezone:{type:`timezone`,label:`Timezone`,help:`Timezone the schedule is interpreted in.`,default:`UTC`,required:!0}}},args:{repository:{type:`repo-picker`,label:`Repository`,help:`The repository whose pull requests will be reviewed.`,provider:`github`,required:!0},triggerLabel:{type:`text`,label:`Trigger label`,help:`Only pull requests carrying this label are reviewed.`,default:`openhands-review`,required:!0,constraints:{minLength:1,maxLength:50}},reviewTone:{type:`select`,label:`Review tone`,help:`How detailed the review comments should be.`,default:`concise`,required:!0,options:[{value:`concise`,label:`Concise`},{value:`thorough`,label:`Thorough`}]}}},prompt:`Review pull requests labeled '{{form.triggerLabel}}' in {{form.repository}}. Review tone: {{form.reviewTone}}.`,message:`This deployment cannot run the scheduled review automation directly. Set it up in this conversation instead: confirm the repository to review, the trigger label, the review tone, and the polling schedule, then create the automation.`}},{id:`github-repo-monitor`,name:`GitHub repository monitor`,category:`Developer tools`,description:`Watch a repository for @OpenHands mentions in issues and PR comments, start a conversation, and post the agent's reply back to GitHub.`,requires:{integrations:{github:{message:`Used to read issue and pull request comments and post replies.`}},features:[`repoClone`,`presetPrompt`,`webhookDelivery`]},popularityRank:98,estimatedSetupMinutes:5,exampleImplementation:`Trigger: cron, every minute (configurable)
|
|
9
|
-
Required secret: GITHUB_PERSONAL_ACCESS_TOKEN
|
|
10
|
-
|
|
11
|
-
1. Poll GitHub for new issue and PR comments since the last run.
|
|
12
|
-
2. Match comments containing the trigger phrase (case-insensitive, default: @OpenHands).
|
|
13
|
-
3. Post an acknowledgment comment with a link to the new OpenHands conversation.
|
|
14
|
-
4. Forward follow-up replies in the same thread to the running conversation.
|
|
15
|
-
5. Post the agent's final response back to GitHub when the conversation completes.`,setup:{version:`1.0`,mode:`direct`,form:{triggers:{event:{on:{type:`select`,label:`Respond to`,help:`Which GitHub comment event starts a conversation.`,default:`issue_comment.created`,required:!0,options:[{value:`issue_comment.created`,label:`Comments on issues and pull requests`},{value:`pull_request_review_comment.created`,label:`Pull request review comments only`}]},triggerPhrase:{type:`text`,label:`Trigger phrase`,help:`Only comments containing this phrase start a conversation. Matched case-insensitively. Quotes and backslashes are not allowed, because the phrase becomes part of the event filter expression.`,default:`@openhands`,required:!0,constraints:{minLength:2,maxLength:50,format:`safeExpressionLiteral`}}}},args:{repository:{type:`repo-picker`,label:`Repository`,help:`The repository or repositories to watch for mentions.`,provider:`github`,required:!0},ref:{type:`text`,label:`Base branch`,help:`Branch checked out when the agent responds.`,default:`main`,required:!0,constraints:{minLength:1,maxLength:255}}}},prompt:`A comment in {{form.repository}} mentions '{{form.triggerPhrase}}'. Read the surrounding issue or pull request context from the event payload, then post a helpful reply as a comment on the same thread.`,filter:`icontains(comment.body, '{{form.triggerPhrase}}') && glob(repository.full_name, '{{form.repository}}')`,message:`This deployment cannot run the webhook-driven monitor directly. Set it up in this conversation instead: confirm the repository to watch, the comment event, and the trigger phrase, then create the automation. If webhook delivery is unavailable here, build the polling variant this skill supports.`}},{id:`slack-standup-digest`,name:`Slack standup digest`,category:`Team updates`,description:`Summarize yesterday’s Slack activity into an async standup note with blockers, decisions, and owners.`,requires:{integrations:{slack:{message:`Reads recent channel activity and posts the digest.`}}},popularityRank:94,estimatedSetupMinutes:5,exampleImplementation:`Trigger: cron, weekday mornings
|
|
16
|
-
Required MCP: Slack
|
|
17
|
-
|
|
18
|
-
1. Search configured channels for messages since the last digest window.
|
|
19
|
-
2. Cluster updates into shipped work, active work, blockers, and decisions.
|
|
20
|
-
3. TODO: choose a safe allowlist for channels and whether DMs are excluded.
|
|
21
|
-
4. Draft a Slack message with owners, links, and unanswered questions.
|
|
22
|
-
5. Optionally post to the configured standup channel.`},{id:`slack-channel-monitor`,name:`Slack channel monitor`,category:`Team communication`,description:`Watch Slack channels for @openhands mentions, open a conversation with the message context, reply when the agent finishes, and continue the same conversation from triggered Slack thread follow-ups.`,requires:{integrations:{slack:{message:`Reads channel messages and posts replies back to the thread.`}}},popularityRank:92,estimatedSetupMinutes:7,exampleImplementation:`Trigger: cron, every minute
|
|
23
|
-
Required secret: SLACK_BOT_TOKEN or SLACK_USER_TOKEN
|
|
24
|
-
|
|
25
|
-
1. Poll up to 10 configured Slack channels for new messages since the last run.
|
|
26
|
-
2. Match messages containing the trigger phrase (default: @openhands).
|
|
27
|
-
3. React with 👀 and start an OpenHands conversation with the message and recent channel context.
|
|
28
|
-
4. Post a thread reply with a link to the conversation, then post the agent response when done.
|
|
29
|
-
5. Keep the thread in a short follow-up watch window and forward only replies that repeat the trigger phrase to the same conversation, with per-thread backoff for quiet threads.`},{id:`linear-triage-assistant`,name:`Linear issue triage assistant`,category:`Project management`,description:`Classify new Linear issues, suggest labels, find duplicates, and ask clarifying questions.`,requires:{integrations:{linear:{message:`Reads new issues and applies labels, comments, and duplicate links.`}}},popularityRank:90,estimatedSetupMinutes:3,skill:`linear-triage`,exampleImplementation:`Trigger: linear Issue create
|
|
30
|
-
Required MCP: Linear
|
|
31
|
-
|
|
32
|
-
1. Load the new issue, team context, project, labels, and recent similar issues.
|
|
33
|
-
2. Score priority and classify the request as bug, feature, support, or chore.
|
|
34
|
-
3. TODO: map local team labels and priority conventions.
|
|
35
|
-
4. Add a triage comment with rationale and suggested next actions.
|
|
36
|
-
5. Optionally update labels, priority, and assignee.`},{id:`jira-issue-to-pr`,name:`Jira issue to GitHub PR`,category:`Project management`,description:`Watch a Jira Cloud project for issues with a configurable label and automatically open a GitHub pull request for each new issue found. The target GitHub repo is read from the ticket body - no repo parameter required at deploy time.`,requires:{integrations:{jira:{message:`Reads the project for issues carrying the trigger label.`},github:{message:`Opens a pull request on the repository named in the ticket.`}}},popularityRank:85,estimatedSetupMinutes:5,exampleImplementation:`Trigger: cron polling (e.g. every 5 minutes)
|
|
37
|
-
Required secrets: Jira API token, GitHub personal access token (repo + workflow scope)
|
|
38
|
-
|
|
39
|
-
1. Collect Jira base URL, email, API token secret name, label to watch, and cron schedule from the user. No GitHub repo is needed at deploy time - each ticket must include the target repo (owner/repo) in its body.
|
|
40
|
-
2. Poll POST /rest/api/3/search/jql on the Jira Cloud instance to find open issues carrying the configured label.
|
|
41
|
-
3. Deduplicate against a KV-store-backed set of already-processed issue keys so re-runs never create duplicate PRs.
|
|
42
|
-
4. For each new issue, start an independent OpenHands agent conversation that extracts the GitHub repo from the ticket body, clones it, creates a branch named after the Jira key, implements or scaffolds the requested change, and opens a pull request.
|
|
43
|
-
5. Immediately after the conversation is created, post a Jira comment on the issue: 'I'm on it: <conversation URL>'.
|
|
44
|
-
6. Persist the processed issue key immediately after dispatching so the next poll skips it.`},{id:`research-brief-writer`,name:`Research brief writer`,category:`Research`,description:`Monitor a topic, gather sources from the web, and publish a short brief for your team.`,requires:{integrations:{tavily:{message:`Searches the web for sources on the topic.`},notion:{message:`Publishes the finished brief.`}}},popularityRank:84,estimatedSetupMinutes:7,skill:`research-brief`,exampleImplementation:`Trigger: cron, weekly or daily
|
|
45
|
-
Required MCPs: Tavily, Notion
|
|
46
|
-
|
|
47
|
-
1. Run focused Tavily searches for configured topics and competitors.
|
|
48
|
-
2. Deduplicate sources and rank them by freshness and authority.
|
|
49
|
-
3. TODO: confirm citation format and destination Notion database schema.
|
|
50
|
-
4. Write an executive summary, implications, and recommended actions.
|
|
51
|
-
5. Create or update a Notion page with citations and source links.`},{id:`incident-retrospective-drafter`,name:`Incident retrospective drafter`,category:`Reliability`,description:`Collect incident chatter and issue updates, then draft a timeline and follow-up checklist.`,requires:{integrations:{slack:{message:`Reads incident discussion and timestamps.`},linear:{message:`Reads follow-up tickets, owners, and status.`},notion:{message:`Publishes the drafted retrospective. Can be connected later during setup.`,required:!1}},features:[`mcpTools`,`conversationDispatch`]},popularityRank:78,estimatedSetupMinutes:8,skill:`incident-retrospective`,exampleImplementation:`Trigger: manual, cron, or incident label added
|
|
52
|
-
Required MCPs: Slack, Linear, Notion
|
|
53
|
-
|
|
54
|
-
1. Gather incident messages, timestamps, and linked issue references.
|
|
55
|
-
2. Pull Linear follow-up tickets, owners, and status.
|
|
56
|
-
3. TODO: define the incident identifier format and approved Notion template.
|
|
57
|
-
4. Build a timeline, impact summary, root-cause hypotheses, and action items.
|
|
58
|
-
5. Publish a draft retrospective and notify the incident owner.`,setup:{version:`1.0`,mode:`assisted`,form:{note:`These answers start the conversation. Anything left blank is something the agent will ask about.`,args:{incidentChannel:{type:`text`,label:`Incident channel`,help:`The Slack channel where incidents are discussed.`,placeholder:`#incidents`,required:!1,constraints:{maxLength:100}},linearTeam:{type:`text`,label:`Linear team`,help:`The team whose follow-up tickets belong in the retrospective.`,required:!1,constraints:{maxLength:100}},notionDestination:{type:`text`,label:`Notion destination`,help:`Page or database where drafts should be published. Leave blank to decide during setup.`,required:!1,constraints:{maxLength:200}},triggerPreference:{type:`select`,label:`How should it run?`,help:`A starting preference only. The agent confirms the exact trigger before creating anything.`,default:`undecided`,required:!1,options:[{value:`undecided`,label:`Let the agent recommend one`},{value:`scheduled`,label:`On a schedule`},{value:`onIncidentLabel`,label:`When an incident is labelled`},{value:`manual`,label:`Only when I run it`}]},notes:{type:`textarea`,label:`Anything else the agent should know?`,help:`Incident naming conventions, an existing retro template, who should be notified.`,required:!1,constraints:{maxLength:2e3}}}},message:`The user supplied these starting points. Confirm each one, ask about anything left blank, then create the automation.
|
|
59
|
-
|
|
60
|
-
- Incident channel: {{form.incidentChannel}}
|
|
61
|
-
- Linear team: {{form.linearTeam}}
|
|
62
|
-
- Notion destination: {{form.notionDestination}}
|
|
63
|
-
- Preferred trigger: {{form.triggerPreference}}
|
|
64
|
-
- Notes: {{form.notes}}
|
|
65
|
-
|
|
66
|
-
Still undecided and required before creation: the incident identifier format and the approved Notion retrospective template.`}}],pe={version:`1.0`,routes:{list:`/automations`,setup:`/automations/new/:automationId`,detail:`/automations/:automationId`},navigation:{sidebar:{label:`Automate`},commandMenu:{title:`Automations`,description:`Review scheduled and webhook automations.`,keywords:`automate cron schedule webhook jobs`}},pages:{list:{title:`Automations`,subtitle:`View active and inactive automations, search by metadata, and inspect read-only details.`},detail:{backLabel:`Back to Automations`},edit:{title:`Edit automation`}},docsUrl:`https://docs.openhands.dev/openhands/usage/automations/overview`,attributes:{name:{type:`text`,label:`Name`,required:!0},prompt:{type:`textarea`,label:`Prompt`,help:`Edits apply to future runs only.`,required:!1},model:{type:`llm-profile`,label:`LLM profile`,required:!1},timeout:{type:`number`,label:`Timeout (seconds)`,help:`Maximum time a single run may take. Leave empty for the default of 600 seconds (10 minutes); maximum 1800 seconds (30 minutes).`,required:!1,constraints:{min:1,max:1800}},schedule:{type:`schedule`,label:`Frequency`,required:!1}},importExport:{fileKind:`automation`,fileVersion:1,filenameSuffix:`.automation.json`,importDefaults:{repoProvider:`github`,placeholderEventSource:`agent-canvas-import`}},endpoints:{list:`/v1`,detail:`/v1/{id}`,dispatch:`/v1/{id}/dispatch`,runs:`/v1/{id}/runs`,tarball:`/v1/{id}/tarball`,health:`/health`,capabilities:`/v1/capabilities`,validate:`/v1/validate`,createPrompt:`/v1/preset/prompt`,createPlugin:`/v1/preset/plugin`},featuredAutomationIds:[`github-pr-reviewer`,`github-repo-monitor`,`slack-channel-monitor`],responderIntegrationIds:[`github`,`slack`]},me=t({AUTOMATION_CATALOG:()=>v,AUTOMATION_INTERFACE:()=>ve,default:()=>v,getAutomationCatalogEntry:()=>_e,listAutomationCatalog:()=>ge}),g=e=>JSON.parse(JSON.stringify(e)),_=fe,he=new Map(_.map(e=>[e.id,e])),ge=()=>g(_),_e=e=>{let t=he.get(e);return t?g(t):void 0},v=g(_),ve=g(pe),y=1800;function ye(e,t=y){let n=e.trim();if(!n)return{value:null};let r=Number(n);return Number.isInteger(r)?r<=0?{errorKey:f.AUTOMATIONS$ERROR_TIMEOUT_POSITIVE}:r>t?{errorKey:f.AUTOMATIONS$ERROR_TIMEOUT_MAX_EXCEEDED}:{value:r}:{errorKey:f.AUTOMATIONS$ERROR_TIMEOUT_INVALID_NUMBER}}var be=[`form`,`automation`],xe=/<[A-Za-z/!]/,Se=/^[a-z0-9]+(-[a-z0-9]+)*$/,b=`https://docs.openhands.dev/`,Ce=/^[a-z][a-z-]*$/,we=/^\.[a-z][a-z.]*json$/,Te=/^[a-z0-9][a-z0-9.-]*$/,Ee=/^\/[A-Za-z0-9/{}_-]*$/,De=/^[^{}]*\{id\}[^{}]*$/,Oe=[`github`,`gitlab`,`bitbucket`],x={name:{type:`text`,required:!0},prompt:{type:`textarea`,required:!1},model:{type:`llm-profile`,required:!1},timeout:{type:`number`,required:!1},schedule:{type:`schedule`,required:!1}},ke=Object.keys(x),S=[`list`,`health`,`capabilities`,`validate`,`createPrompt`,`createPlugin`],C=[`detail`,`dispatch`,`runs`,`tarball`];function w(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var Ae=class{errors=[];fail(e,t){return this.errors.push(`${e}: ${t}`),!1}copy(e,t){return typeof e!=`string`||e.length===0?this.fail(t,`must be a non-empty string`):xe.test(e)?this.fail(t,`must not contain markup`):!0}closed(e,t,n){Object.keys(e).filter(e=>!t.includes(e)).forEach(e=>this.fail(`${n}.${e}`,`is not allowed`))}record(e,t){return w(e)?!0:(this.fail(t,`must be an object`),!1)}};function je(e,t,n){e.record(t,`routes`)&&(e.closed(t,[`list`,`setup`,`detail`],`routes`),[`list`,`setup`,`detail`].forEach(r=>{t[r]!==n[r]&&e.fail(`routes.${r}`,`must be "${n[r]}"`)}))}function Me(e,t){if(e.record(t,`navigation`)&&(e.closed(t,[`sidebar`,`commandMenu`],`navigation`),e.record(t.sidebar,`navigation.sidebar`)&&(e.closed(t.sidebar,[`label`],`navigation.sidebar`),e.copy(t.sidebar.label,`navigation.sidebar.label`)),e.record(t.commandMenu,`navigation.commandMenu`))){let n=t.commandMenu;e.closed(n,[`title`,`description`,`keywords`],`navigation.commandMenu`),e.copy(n.title,`navigation.commandMenu.title`),e.copy(n.description,`navigation.commandMenu.description`),e.copy(n.keywords,`navigation.commandMenu.keywords`)}}function Ne(e,t){e.record(t,`pages`)&&(e.closed(t,[`list`,`detail`,`edit`],`pages`),e.record(t.list,`pages.list`)&&(e.closed(t.list,[`title`,`subtitle`],`pages.list`),e.copy(t.list.title,`pages.list.title`),e.copy(t.list.subtitle,`pages.list.subtitle`)),e.record(t.detail,`pages.detail`)&&(e.closed(t.detail,[`backLabel`],`pages.detail`),e.copy(t.detail.backLabel,`pages.detail.backLabel`)),e.record(t.edit,`pages.edit`)&&(e.closed(t.edit,[`title`],`pages.edit`),e.copy(t.edit.title,`pages.edit.title`)))}function Pe(e,t,n,r){if(!e.record(n,r))return;e.closed(n,[`type`,`label`,`help`,`required`,`constraints`],r);let{type:i,label:a,help:o,required:s,constraints:c}=n;if(i!==t.type&&e.fail(`${r}.type`,`must be "${t.type}", the control this host renders`),e.copy(a,`${r}.label`),o!==void 0&&e.copy(o,`${r}.help`),s!==t.required&&e.fail(`${r}.required`,`must be ${t.required}, what this host enforces`),c!==void 0){if(t.type!==`number`)e.fail(`${r}.constraints`,`is only allowed on a number attribute`);else if(e.record(c,`${r}.constraints`)){e.closed(c,[`min`,`max`],`${r}.constraints`);let{min:t,max:n}=c;t!==void 0&&t!==1&&e.fail(`${r}.constraints.min`,`must be the 1 this host enforces`),n!==void 0&&(!Number.isInteger(n)||n<1)&&e.fail(`${r}.constraints.max`,`must be a positive integer`)}}}function Fe(e,t){if(!e.record(t,`attributes`))return;let n=Object.keys(t);n.length===0&&e.fail(`attributes`,`must declare at least one attribute`),n.forEach(n=>{if(!ke.includes(n)){e.fail(`attributes.${n}`,`is not a settable attribute`);return}Pe(e,x[n],t[n],`attributes.${n}`)})}function Ie(e,t){if(!e.record(t,`importExport`))return;e.closed(t,[`fileKind`,`fileVersion`,`filenameSuffix`,`importDefaults`],`importExport`);let{fileKind:n,fileVersion:r,filenameSuffix:i,importDefaults:a}=t;(typeof n!=`string`||!Ce.test(n))&&e.fail(`importExport.fileKind`,`must be a lowercase slug`),r!==1&&e.fail(`importExport.fileVersion`,`must be 1`),(typeof i!=`string`||!we.test(i))&&e.fail(`importExport.filenameSuffix`,`must be a .json suffix`),e.record(a,`importExport.importDefaults`)&&(e.closed(a,[`repoProvider`,`placeholderEventSource`],`importExport.importDefaults`),(typeof a.repoProvider!=`string`||!Oe.includes(a.repoProvider))&&e.fail(`importExport.importDefaults.repoProvider`,`is not a supported provider`),(typeof a.placeholderEventSource!=`string`||!Te.test(a.placeholderEventSource))&&e.fail(`importExport.importDefaults.placeholderEventSource`,`must be a lowercase event source`))}function Le(e,t){if(!e.record(t,`endpoints`))return;let n=[...S,...C];e.closed(t,n,`endpoints`);let r=n=>{let r=t[n];return typeof r!=`string`||!Ee.test(r)||r.includes(`//`)?(e.fail(`endpoints.${n}`,`must be a rooted service-relative path`),null):r};S.forEach(t=>{let n=r(t);n!==null&&/[{}]/.test(n)&&e.fail(`endpoints.${t}`,`must not carry a substitution`)}),C.forEach(t=>{let n=r(t);n!==null&&!De.test(n)&&e.fail(`endpoints.${t}`,`must carry exactly one {id}`)})}function Re(e,t,n){if(!Array.isArray(t)||t.length===0)return e.fail(n,`must be a non-empty array`),[];let r=t.filter(t=>typeof t==`string`&&Se.test(t)?!0:(e.fail(n,`must contain only lowercase slugs`),!1));return new Set(r).size!==r.length&&e.fail(n,`must not repeat an id`),r}var ze=[`version`,`routes`,`navigation`,`pages`,`docsUrl`,`attributes`,`importExport`,`endpoints`,`featuredAutomationIds`,`responderIntegrationIds`];function Be(e,t){if(!w(e))return{valid:!1,errors:[`interface: must be an object`]};if(e.version!==`1.0`)return{valid:!1,errors:[`interface.version: must be "1.0"`]};let n=new Ae;return n.closed(e,ze,`interface`),je(n,e.routes,t.mountedRoutes),Me(n,e.navigation),Ne(n,e.pages),(typeof e.docsUrl!=`string`||!e.docsUrl.startsWith(b))&&n.fail(`docsUrl`,`must start with ${b}`),Fe(n,e.attributes),Ie(n,e.importExport),Le(n,e.endpoints),Re(n,e.featuredAutomationIds,`featuredAutomationIds`).forEach(e=>{t.catalogIds.has(e)||n.fail(`featuredAutomationIds`,`${e} is not a catalog entry`)}),Re(n,e.responderIntegrationIds,`responderIntegrationIds`),{valid:n.errors.length===0,errors:n.errors}}var Ve=/^[a-z0-9]+(-[a-z0-9]+)*$/,He=/^[a-z][A-Za-z0-9]*$/,Ue=/<[A-Za-z/!]/,We=RegExp(`\\{\\{(?!(?:${be.join(`|`)})\\.[A-Za-z0-9_.]+\\}\\})`),Ge=[`direct`,`assisted`],Ke=[`text`,`textarea`,`select`,`cron`,`timezone`,`repo-picker`],qe=[`github`,`gitlab`,`bitbucket`],Je=[`cron`,`event`],Ye=[`safeExpressionLiteral`],T=2e3;function E(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function D(e,t){return typeof e==`string`&&t.includes(e)}function Xe(e,t){return typeof e==`number`&&Number.isInteger(e)&&e>=t}var Ze=class{errors=[];fail(e,t){return this.errors.push(`${e}: ${t}`),!1}copy(e,t){return typeof e!=`string`||e.length===0?this.fail(t,`must be a non-empty string`):Ue.test(e)?this.fail(t,`must not contain markup`):!0}placeholders(e,t){return We.test(e)?this.fail(t,`uses an unknown placeholder namespace`):!0}templateCopy(e,t){return this.copy(e,t)&&this.placeholders(e,t)}templateValue(e,t){return typeof e!=`string`||e.length===0?this.fail(t,`must be a non-empty string`):this.placeholders(e,t)}absent(e,t,n,r){return t in e?this.fail(`${n}.${t}`,r):!0}};function Qe(e,t){if(!E(t)){e.fail(`requires`,`must be an object`);return}let{integrations:n,features:r}=t;!E(n)||Object.keys(n).length===0?e.fail(`requires.integrations`,`must be a non-empty object`):Object.entries(n).forEach(([t,n])=>{let r=`requires.integrations.${t}`;if(!E(n)){e.fail(r,`must be an object`);return}e.copy(n.message,`${r}.message`),`required`in n&&n.required!==!1&&e.fail(`${r}.required`,`may only be false`);let i=[`message`,`required`];Object.keys(n).filter(e=>!i.includes(e)).forEach(t=>e.fail(`${r}.${t}`,`is not allowed`))}),r!==void 0&&(!Array.isArray(r)||r.length===0?e.fail(`requires.features`,`must be a non-empty array`):r.forEach((t,n)=>{(typeof t!=`string`||t.length===0)&&e.fail(`requires.features[${n}]`,`must be a non-empty string`)}))}function $e(e,t,n){if(!E(t)||Object.keys(t).length===0){e.fail(n,`must be a non-empty object`);return}let{minLength:r,maxLength:i,format:a}=t;r!==void 0&&!Xe(r,0)&&e.fail(`${n}.minLength`,`must be a non-negative integer`),i!==void 0&&!Xe(i,1)&&e.fail(`${n}.maxLength`,`must be a positive integer`),a!==void 0&&!D(a,Ye)&&e.fail(`${n}.format`,`is not a supported format`)}function et(e,t,n){if(!E(t)){e.fail(n,`must be an object`);return}let{type:r,label:i,help:a,placeholder:o,required:s,provider:c,options:l}=t;D(r,Ke)||e.fail(`${n}.type`,`is not a supported field type`),e.copy(i,`${n}.label`),e.copy(a,`${n}.help`),o!==void 0&&e.copy(o,`${n}.placeholder`),t.default!==void 0&&typeof t.default!=`string`&&e.fail(`${n}.default`,`must be a string`),typeof s!=`boolean`&&e.fail(`${n}.required`,`must be a boolean`),c!==void 0&&!D(c,qe)&&e.fail(`${n}.provider`,`is not a supported provider`),r===`repo-picker`&&c===void 0&&e.fail(`${n}.provider`,`is required for a repository field`),l!==void 0&&(r===`select`?!Array.isArray(l)||l.length===0?e.fail(`${n}.options`,`must be a non-empty array`):l.forEach((t,r)=>{let i=`${n}.options[${r}]`;if(!E(t)){e.fail(i,`must be an object`);return}(typeof t.value!=`string`||t.value.length===0)&&e.fail(`${i}.value`,`must be a non-empty string`),e.copy(t.label,`${i}.label`)}):e.fail(`${n}.options`,`is only allowed on a select field`)),t.constraints!==void 0&&$e(e,t.constraints,`${n}.constraints`)}function O(e,t,n){return!E(t)||Object.keys(t).length===0?(e.fail(n,`must be a non-empty object`),[]):Object.entries(t).map(([t,r])=>(He.test(t)||e.fail(`${n}.${t}`,`is not a valid field name`),et(e,r,`${n}.${t}`),t))}function tt(e,t){if(!E(t))return e.fail(`setup.form`,`must be an object`),[];t.note!==void 0&&e.copy(t.note,`setup.form.note`);let n=O(e,t.args,`setup.form.args`),r=[];t.triggers!==void 0&&(!E(t.triggers)||Object.keys(t.triggers).length===0?e.fail(`setup.form.triggers`,`must be a non-empty object`):Object.entries(t.triggers).forEach(([t,i])=>{if(!D(t,Je)){e.fail(`setup.form.triggers.${t}`,`is not a trigger kind`);return}r.push(t),n.push(...O(e,i,`setup.form.triggers.${t}`))}));let i=n.filter((e,t)=>n.indexOf(e)!==t);return Array.from(new Set(i)).forEach(t=>e.fail(`setup.form.${t}`,`is declared more than once`)),r}function nt(e){return E(e)?[e.args,...Object.values(E(e.triggers)?e.triggers:{})].some(e=>E(e)&&Object.values(e).some(e=>E(e)&&e.type===`repo-picker`)):!1}function k(e,t){e.templateCopy(t,`setup.message`)&&t.length>T&&e.fail(`setup.message`,`must be at most ${T} characters`)}function rt(e,t,n){if(!D(t.mode,Ge)){e.fail(`setup.mode`,`is not a supported mode`);return}if(t.mode===`direct`){e.templateValue(t.prompt,`setup.prompt`),t.message!==void 0&&k(e,t.message),n.length!==1&&e.fail(`setup.form.triggers`,`must declare exactly one trigger kind`),n.includes(`event`)&&!nt(t.form)&&e.fail(`setup.form`,`must declare a repository field for an event trigger`),t.filter!==void 0&&(n.includes(`event`)?e.templateValue(t.filter,`setup.filter`):e.fail(`setup.filter`,`is only allowed for an event trigger`));return}k(e,t.message),e.absent(t,`prompt`,`setup`,`is only allowed for direct setup`),e.absent(t,`filter`,`setup`,`is only allowed for direct setup`)}function it(e){return E(e)&&e.setup!==void 0}function at(e){let t=new Ze;if(!E(e))return{valid:!1,errors:[`manifest: must be an object`]};let{setup:n}=e;return E(n)?n.version===`1.0`?((typeof e.id!=`string`||!Ve.test(e.id))&&t.fail(`id`,`must be a lowercase slug`),t.copy(e.name,`name`),t.copy(e.description,`description`),e.skill!==void 0&&(typeof e.skill!=`string`||!Ve.test(e.skill))&&t.fail(`skill`,`must be a lowercase slug`),Qe(t,e.requires),rt(t,n,tt(t,n.form)),{valid:t.errors.length===0,errors:t.errors}):{valid:!1,errors:[`setup.version: must be "1.0"`]}:{valid:!1,errors:[`setup: must be an object`]}}function ot(e){let t=[],n=new Map;return e.forEach(e=>{if(!it(e))return;let{valid:r,errors:i}=at(e);if(!r){console.warn(`Rejected a setup manifest:`,i.join(`; `));return}let a=e;if(n.has(a.id)){console.warn(`Rejected a setup manifest: id "${a.id}" is already registered`);return}t.push(a),n.set(a.id,a)}),{entries:t,findById:e=>n.get(e)??null}}var st=ot(v),A=me,ct=`AUTOMATION_INTERFACE`in A?A.AUTOMATION_INTERFACE:void 0,j={list:`/automations`,setup:`/automations/new/:automationId`,detail:`/automations/:automationId`},lt={list:`/v1`,detail:`/v1/{id}`,dispatch:`/v1/{id}/dispatch`,runs:`/v1/{id}/runs`,tarball:`/v1/{id}/tarball`,health:`/health`,capabilities:`/v1/capabilities`,validate:`/v1/validate`,createPrompt:`/v1/preset/prompt`,createPlugin:`/v1/preset/plugin`},ut={fileKind:`automation`,fileVersion:1,filenameSuffix:`.automation.json`,importDefaults:{repoProvider:`github`,placeholderEventSource:`agent-canvas-import`}},dt=`https://docs.openhands.dev/openhands/usage/automations/overview`,ft=[`github-pr-reviewer`,`github-repo-monitor`,`slack-channel-monitor`],pt=[`github`,`slack`],mt={present:!1,label:null,help:null,required:!1,min:null,max:null},ht={name:{present:!0,label:null,help:null,required:!0,min:null,max:null},prompt:{present:!0,label:null,help:null,required:!1,min:null,max:null},model:{present:!0,label:null,help:null,required:!1,min:null,max:null},timeout:{present:!0,label:null,help:null,required:!1,min:1,max:y},schedule:{present:!0,label:null,help:null,required:!1,min:null,max:null}};function gt(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function _t(){return new Set(v.flatMap(e=>gt(e)&&typeof e.id==`string`?[e.id]:[]))}function vt(e){if(e===void 0)return null;let t=Be(e,{catalogIds:_t(),mountedRoutes:j});return t.valid?e:(console.warn(`Rejected the automation interface manifest:`,t.errors.join(`; `)),null)}var M=vt(ct);function N(e,t){return e.replace(`:automationId`,encodeURIComponent(t))}function yt(){return(M?.routes??j).list}function bt(e){return N((M?.routes??j).setup,e)}function xt(e){return N((M?.routes??j).detail,e)}function P(e){return(M?.endpoints??lt)[e]}function F(e,t){return P(e).replace(`{id}`,encodeURIComponent(t))}var St={sidebarLabel:null,commandMenuTitle:null,commandMenuDescription:null,commandMenuKeywords:null,listTitle:null,listSubtitle:null,detailBackLabel:null,editTitle:null};function Ct(){return M?{sidebarLabel:M.navigation.sidebar.label,commandMenuTitle:M.navigation.commandMenu.title,commandMenuDescription:M.navigation.commandMenu.description,commandMenuKeywords:M.navigation.commandMenu.keywords,listTitle:M.pages.list.title,listSubtitle:M.pages.list.subtitle,detailBackLabel:M.pages.detail.backLabel,editTitle:M.pages.edit.title}:St}function wt(e){if(!M)return ht[e];let t=M.attributes[e];return t?{present:!0,label:t.label,help:t.help??null,required:t.required,min:t.constraints?.min??null,max:t.constraints?.max??null}:mt}function I(){return M?.importExport??ut}function Tt(){return M?.docsUrl??dt}function Et(){return M?.featuredAutomationIds??ft}function Dt(){return M?.responderIntegrationIds??pt}var Ot=/["'\\]/;function L(e){let t=Object.values(e.form.triggers??{});return Object.assign({},...t,e.form.args)}function kt(e,t){let n=t?.triggers?.cron?.timezones;if(!n?.length)return{};let r=n.map(e=>({value:e,label:e}));return Object.fromEntries(Object.entries(L(e)).filter(([,e])=>e.type===`timezone`).map(([e])=>[e,{options:r}]))}function R(e,t,n={}){return n[e]?.options??t.options??[]}function At(e){return Object.fromEntries(Object.entries(L(e)).map(([e,t])=>[e,t.default??``]))}function jt(e,t,n,r){let i=(n??``).trim();if(!i)return t.required?{code:`required`}:null;let{minLength:a,maxLength:o,format:s}=t.constraints??{};if(a!==void 0&&i.length<a)return{code:`minLength`,length:a};if(o!==void 0&&i.length>o)return{code:`maxLength`,length:o};if(s===`safeExpressionLiteral`&&Ot.test(i))return{code:`unsafeExpressionLiteral`};let c=R(e,t,r);return c.length>0&&!c.some(e=>e.value===i)?{code:`invalidOption`}:null}function Mt(e,t,n={}){return Object.entries(L(e)).reduce((e,[r,i])=>{let a=jt(r,i,t[r],n);return a?{...e,[r]:a}:e},{})}var Nt=/\{\{([A-Za-z0-9_]+(?:\.[A-Za-z0-9_]+)*)\}\}/g;function Pt(e,t){return t.split(`.`).reduce((e,t)=>{if(!(typeof e!=`object`||!e))return e[t]},e)}function Ft(e){return typeof e==`string`?e:typeof e==`number`||typeof e==`boolean`?String(e):``}function z(e,t){return e.replace(Nt,(e,n)=>Ft(Pt(t,n)))}var B=P(`createPrompt`),It={cron:[`schedule`,`timezone`],event:[`on`]},Lt=[`ref`],Rt=/\{\{form\.([A-Za-z0-9_.]+)\}\}/g;function zt(e){let t=Object.entries(L(e)).find(([,e])=>e.type===`repo-picker`);return t?{name:t[0],field:t[1]}:null}function Bt(e){let t=Object.entries(e.form.triggers??{});if(t.length===0)return null;let[n,r]=t[0];return{kind:n,fields:r??{}}}function V(e,t){let{setup:n}=e;if(n.mode!==`direct`||!n.prompt)return null;let r={form:t,automation:e},i=zt(n),a=i?t[i.name]:void 0,o={name:a?`${e.name} - ${a}`:e.name,prompt:z(n.prompt,r)};if(a&&i?.field.provider){let e=Lt.filter(e=>e in t);o.repos=[{url:a,...Object.fromEntries(e.map(e=>[e,t[e]])),provider:i.field.provider}]}let s=Bt(n);if(s){let e=It[s.kind],a=Object.keys(s.fields).filter(t=>e.includes(t));o.trigger={type:s.kind,...Object.fromEntries(a.map(e=>[e,t[e]??``])),...s.kind===`event`&&{source:i?.field.provider??``,...n.filter&&{filter:z(n.filter,r)}}}}return o}function Vt(e,t){let n=V(e,t);return n?{automationId:e.id,endpoint:B,draft:n}:null}function Ht(e,t){return[h(e),e.setup.message?z(e.setup.message,{form:t,automation:e}):``].filter(Boolean).join(`
|
|
67
|
-
|
|
68
|
-
`)}function Ut(e){let t=Array.from(e.matchAll(Rt),e=>e[1]);return Array.from(new Set(t))}function Wt(e){let t={},n=V(e,Object.fromEntries(Object.keys(L(e.setup)).map(e=>[e,`{{form.${e}}}`])));if(!n)return t;let r=(e,n)=>{if(Array.isArray(e)){e.forEach((e,t)=>r(e,`${n}[${t}]`));return}if(typeof e==`object`&&e){Object.entries(e).forEach(([e,t])=>r(t,n?`${n}.${e}`:e));return}if(typeof e==`string`){let r=Ut(e);r.length>0&&(t[n]=r)}};return r(n,``),t}var H=`/api/automation`,U=r.create();async function W(e={}){let t=await ne();return{...o,...t?{[i]:t}:{},...e}}U.interceptors.request.use(async e=>{let t=await W();if(Object.entries(t).forEach(([t,n])=>{e.headers.set(t,n)}),e.baseURL)return e;let n=re();if(!n)throw new a;e.baseURL=n.host;let r=n.apiKey?.trim();return r&&e.headers.set(`X-Session-API-Key`,r),e});function G(e){return typeof e==`string`&&e.trim()||null}function Gt(e){return typeof e==`string`?G(e):G(e.sdk_version)??G(e.version)}function K(e,t){let n=new URLSearchParams;return n.set(`limit`,String(e)),n.set(`offset`,String(t)),n.toString()}function Kt(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 qt(){return typeof crypto<`u`&&typeof crypto.randomUUID==`function`?`pending.${crypto.randomUUID()}`:`pending.${Date.now()}.${Math.random().toString(36).slice(2,10)}`}function Jt(e){if(!e.prompt)throw Error(`An automation prompt is required for import.`);let{importDefaults:t}=I(),n=e.repository?[{url:e.repository,...e.branch&&{ref:e.branch},...!e.repository.includes(`://`)&&!e.repository.startsWith(`git@`)&&{provider:t.repoProvider}}]:void 0;return{path:`${H}${P(e.plugins?.length?`createPlugin`:`createPrompt`)}`,body:{name:e.name,prompt:e.prompt,trigger:{type:`event`,source:t.placeholderEventSource,on:qt()},...e.model&&{model:e.model},...n&&{repos:n},...e.plugins?.length&&{plugins:e.plugins.map(e=>({source:e}))},...e.timeout!=null&&{timeout:e.timeout}}}}async function q(e){let t=e.apiKey.trim();return{baseURL:e.host,headers:await W(t?{"X-Session-API-Key":t}:{})}}async function J(e){return W(e.orgId?{"X-Org-Id":e.orgId}:{})}var Y=class e{static async syncTelemetryConsent(e=ee()){if(u().backend.kind!==`local`)return;let t=await ae();await U.post(`${H}/v1/telemetry/consent`,{consent_granted:e===`granted`,frontend_distinct_id:t},{timeout:5e3}),e!==`granted`&&t&&c(t)}static async getSdkVersion(){let e=u(),t=`${H}/sdk-version`;try{let n;if(e.backend.kind===`cloud`)n=await p({backend:e.backend,method:`GET`,path:t,headers:await J(e),timeoutSeconds:5});else{let{data:e}=await U.get(t,{timeout:5e3});n=e}return Gt(n)}catch{return null}}static async listAutomations(e={}){let{limit:t=50,offset:n=0}=e,r=u().backend;if(r.kind===`cloud`)return p({backend:r,method:`GET`,path:`${H}${P(`list`)}?${K(t,n)}`,headers:await W()});let{data:i}=await U.get(`${H}${P(`list`)}`,{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=u().backend,n=`${H}${F(`detail`,e)}`;if(t.kind===`cloud`)return p({backend:t,method:`GET`,path:n,headers:await W()});let{data:r}=await U.get(n);return r}static async createAutomation(e){let t=u(),{path:n,body:r}=Jt(e),i;if(t.backend.kind===`cloud`)i=await p({backend:t.backend,method:`POST`,path:n,body:r,headers:await J(t)});else{let{data:e}=await U.post(n,r,await q(t.backend));i=e}let a=`${H}${F(`detail`,i.id)}`,o={trigger:Kt(e),enabled:!1};try{if(t.backend.kind===`cloud`)return await p({backend:t.backend,method:`PATCH`,path:a,body:o,headers:await J(t)});let{data:e}=await U.patch(a,o,await q(t.backend));return e}catch(e){try{t.backend.kind===`cloud`?await p({backend:t.backend,method:`DELETE`,path:a,headers:await J(t)}):await U.delete(a,await q(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=u().backend,r=`${H}${F(`detail`,e)}`;if(n.kind===`cloud`)return p({backend:n,method:`PATCH`,path:r,body:t,headers:await W()});let{data:i}=await U.patch(r,t);return i}static async deleteAutomation(e){let t=u().backend,n=`${H}${F(`detail`,e)}`;if(t.kind===`cloud`){await p({backend:t,method:`DELETE`,path:n,headers:await W()});return}await U.delete(n)}static async dispatchAutomation(e){let t=u().backend,n=`${H}${F(`dispatch`,e)}`;if(t.kind===`cloud`)return p({backend:t,method:`POST`,path:n,headers:await W()});let{data:r}=await U.post(n);return r}static async listAutomationRuns(e,t={}){let{limit:n=50,offset:r=0}=t,i=u().backend,a=`${H}${F(`runs`,e)}`;if(i.kind===`cloud`)return p({backend:i,method:`GET`,path:`${a}?${K(n,r)}`,headers:await W()});let{data:o}=await U.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=u().backend,r=`${H}${F(`tarball`,e)}`,i;if(n.kind===`cloud`)i=await p({backend:n,method:`GET`,path:r,responseType:`blob`,headers:await W()});else{let{data:e}=await U.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 getCapabilities(){let e=u().backend,t=`${H}${P(`capabilities`)}`;if(e.kind===`cloud`)return p({backend:e,method:`GET`,path:t,headers:await W()});let{data:n}=await U.get(t);return n}static async validateDraft(e){let t=u().backend,n=`${H}${P(`validate`)}`;if(t.kind===`cloud`)return p({backend:t,method:`POST`,path:n,body:e,headers:await W()});let{data:r}=await U.post(n,e);return r}static async createAutomationDraft(e){let t=u().backend,n=`${H}${B}`;if(t.kind===`cloud`)return p({backend:t,method:`POST`,path:n,body:e,headers:await W()});let{data:r}=await U.post(n,e);return r}static async checkHealth(){let e=u().backend,t=`${H}${P(`health`)}`;try{if(e.kind===`cloud`)return await p({backend:e,method:`GET`,path:t,timeoutSeconds:5,headers:await W()});let{data:n}=await U.get(t,{timeout:5e3});return n}catch{return{status:`error`}}}},Yt=`automation-sdk-version`,Xt=3600*1e3,Zt=`\0`,X=new Map,Z=new Map;function Q(e){let t=X.get(e);if(t){if(t.expiresAt<=Date.now()){X.delete(e);return}return t.version}}function $(e,t){X.set(e,{expiresAt:Date.now()+Xt,version:t})}function Qt(e){let t=Q(e);if(t!==void 0)return Promise.resolve(t);let n=Z.get(e);if(n)return n;if(typeof Y.getSdkVersion!=`function`)return $(e,null),Promise.resolve(null);let r=Y.getSdkVersion().then(t=>($(e,t),t)).catch(()=>($(e,null),null)).finally(()=>{Z.delete(e)});return Z.set(e,r),r}function $t(){let e=ie(),{backend:t}=e,n=[Yt,t.id,t.kind,t.host,e.orgId??``].join(Zt),[r,i]=m.useState(()=>Q(n)??null);return m.useEffect(()=>{if(te(t)){i(null);return}let e=Q(n);if(e!==void 0){i(e);return}let r=!0;return i(null),Qt(n).then(e=>{r&&i(e)}),()=>{r=!1}},[t,n]),r}var en=()=>{let{backend:e}=ie(),t=$t(),n=m.useCallback(()=>({backendKind:e.kind,agentServerVersion:e.kind===`local`?s(e.host):null,automationSdkVersion:t??null}),[t,e.host,e.kind]);m.useEffect(()=>{d(n())},[n]);let r={current_url:window.location.href},i=(e,t={})=>{d(n()),l(e,{...r,...t})};return{trackLoginButtonClick:({provider:e})=>{i(`login_button_clicked`,{provider:e})},trackConversationCreated:({conversationId:e,taskId:t,hasRepository:n,gitProvider:r,hasWorkspace:a,workspaceMode:o,hasInitialQuery:s,agentType:c,hasParentConversation:l,entryPoint:u})=>{i(`conversation_start_requested`,{conversation_id:e,task_id:t,is_start_task:e.startsWith(`task-`),has_repository:n,git_provider:r,has_workspace:a,workspace_mode:o,has_initial_query:s,agent_type:c,has_parent_conversation:l,entry_point:u})},trackPushButtonClick:()=>{i(`push_button_clicked`)},trackPullButtonClick:()=>{i(`pull_button_clicked`)},trackCreatePrButtonClick:()=>{i(`create_pr_button_clicked`)},trackUserSignupCompleted:()=>{i(`user_signup_completed`,{signup_timestamp:new Date().toISOString()})},trackPrebuiltAutomationEnabled:({automationId:e,automationName:t,automationCategory:n})=>{i(`prebuilt_automation_enabled`,{automation_id:e,automation_name:t,automation_category:n})},trackAutomationSetupOpened:({automationId:e})=>{i(`automation_setup_opened`,{automation_id:e})},trackAutomationSetupValidated:({automationId:e})=>{i(`automation_setup_validated`,{automation_id:e})},trackAutomationSetupCreated:({automationId:e,setupMode:t})=>{i(`automation_setup_created`,{automation_id:e,setup_mode:t})},trackAutomationSetupFailed:({automationId:e,setupMode:t})=>{i(`automation_setup_failed`,{automation_id:e,setup_mode:t})},trackInitialQuerySubmitted:({entryPoint:e,queryCharacterLength:t,replayJsonSize:n})=>{i(`initial_query_submitted`,{entry_point:e,query_character_length:t,replay_json_size:n})},trackUserMessageSent:({sessionMessageCount:e,currentMessageLength:t})=>{i(`user_message_sent`,{session_message_count:e,current_message_length:t})},trackDownloadVsCodeButtonClicked:()=>{i(`download_via_vscode_button_clicked`)},trackSettingsSaved:({llmModel:e,llmApiKeySet:t,searchApiKeySet:n,remoteRuntimeResourceFactor:r})=>{i(`settings_saved`,{LLM_MODEL:e,LLM_API_KEY_SET:t,SEARCH_API_KEY_SET:n,REMOTE_RUNTIME_RESOURCE_FACTOR:r})},trackMcpConfigUpdated:({sseServersCount:e,stdioServersCount:t})=>{i(`mcp_config_updated`,{has_mcp_config:!0,sse_servers_count:e,stdio_servers_count:t})},trackDownloadTrajectoryButtonClicked:()=>{i(`download_trajectory_button_clicked`)},trackConversationExported:e=>{i(`conversation_exported`,{format:e})},trackAutomationCreatedButton:({backendKind:e})=>{i(`automation_created_button`,{backend_kind:e})},trackAutomationExecuted:({backendKind:e})=>{i(`automation_executed`,{backend_kind:e})},trackAutomationDeleted:({backendKind:e})=>{i(`automation_deleted`,{backend_kind:e})},trackAutomationDisableButton:({backendKind:e})=>{i(`automation_disable_button`,{backend_kind:e})},trackAutomationEdited:({backendKind:e})=>{i(`automation_edited`,{backend_kind:e})},trackAutomationExported:({backendKind:e})=>{i(`automation_exported`,{backend_kind:e})},trackAutomationImported:({backendKind:e})=>{i(`automation_imported`,{backend_kind:e})},trackBackendAdded:({backendKind:e,connectionMethod:t,hasApiKey:n,source:r,agentServerVersion:a,backendVersion:o})=>{i(`backend_added`,{...oe({backendKind:e,agentServerVersion:a,backendVersion:o,connectionMethod:t}),has_api_key:n,source:r})},trackOnboardingStarted:()=>{i(`onboarding_started`)},trackOnboardingStepViewed:({step:e,stepIndex:t,totalSteps:n,agent:r})=>{i(`onboarding_step_viewed`,{step:e,step_index:t,total_steps:n,agent:r})},trackOnboardingCompleted:({agent:e})=>{i(`onboarding_completed`,{agent:e})},trackOnboardingSkipped:({step:e,stepIndex:t,totalSteps:n,agent:r})=>{i(`onboarding_skipped`,{step:e,step_index:t,total_steps:n,agent:r})}}};export{ye as C,le as D,de as E,ue as O,y as S,h as T,Et as _,Vt as a,Dt as b,R as c,Mt as d,xt as f,Tt as g,wt as h,V as i,At as l,bt as m,Y as n,Wt as o,yt as p,Ht as r,L as s,en as t,kt as u,I as v,v as w,st as x,Ct as y};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{a as e}from"./rolldown-runtime-Cyuzqnbw.js";import{St as t}from"./vendor-styling-Bcgpimp9.js";import{f as n,n as r,u as i,y as a}from"./vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~emdr2jt4-BrmgjeOw.js";import{c as o,d as s,f as c,h as l,l as u,m as d,o as f,p,s as m,u as h}from"./vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~gy8zbn65-CGt6bWRT.js";var g=e(t(),1);function _(e,t,l){let _=d(),v=p(),y=r(l),b=y.defaultQueryOptions(e);y.getDefaultOptions().queries?._experimental_beforeQuery?.(b);let x=y.getQueryCache().get(b.queryHash);b._optimisticResults=_?`isRestoring`:`optimistic`,f(b),h(b,v,x),c(v);let S=!y.getQueryCache().get(b.queryHash),[C]=g.useState(()=>new t(y,b)),w=C.getOptimisticResult(b),T=!_&&e.subscribed!==!1;if(g.useSyncExternalStore(g.useCallback(e=>{let t=T?C.subscribe(i.batchCalls(e)):a;return C.updateResult(),t},[C,T]),()=>C.getCurrentResult(),()=>C.getCurrentResult()),g.useEffect(()=>{C.setOptions(b)},[b,C]),o(b,w))throw m(b,C,v);if(s({result:w,errorResetBoundary:v,throwOnError:b.throwOnError,query:x,suspense:b.suspense}))throw w.error;return y.getDefaultOptions().queries?._experimental_afterQuery?.(b,w),b.experimental_prefetchInRender&&!n.isServer()&&u(w,_)&&(S?m(b,C,v):x?.promise)?.catch(a).finally(()=>{C.updateResult()}),b.notifyOnChangeProps?w:C.trackResult(w)}function v(e,t){return _(e,l,t)}export{_ as n,v as t};
|