@openhands/agent-canvas 1.9.0 → 1.11.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-BkL3HWa3.js} +1 -1
- package/build/assets/active-backend-context-BBvP-bI2.js +2 -0
- package/build/assets/agent-context-settings-Bno1nwPL.js +1 -0
- package/build/assets/{agent-profiles-settings-BymJf3EP.js → agent-profiles-settings-DqoS7RL3.js} +1 -1
- package/build/assets/agent-server-conversation-service.api-0RztSdJJ.js +86 -0
- package/build/assets/agent-settings-BJHryp65.js +1 -0
- package/build/assets/{agent-settings-WzqXk6B4.js → agent-settings-h8hQz-IU.js} +2 -2
- package/build/assets/alert-banner-lrK-2_0Y.js +1 -0
- package/build/assets/{api-key-entry-screen-DI0I04O3.js → api-key-entry-screen-Qsb83VX1.js} +1 -1
- package/build/assets/{app-settings-DGistSFV.js → app-settings-r1RUbgGi.js} +1 -1
- package/build/assets/automation-detail-7LkL91j9.js +3 -0
- package/build/assets/automation-export-U2QNyNy6.js +2 -0
- package/build/assets/automation-setup-route-Bel9_Lue.js +1 -0
- package/build/assets/automation-templates-CRLDssaI.js +1 -0
- package/build/assets/automations-list-B2iV3ZKW.js +1 -0
- package/build/assets/{back-nav-button-D4ngzpSh.js → back-nav-button-B3pYwmUJ.js} +1 -1
- package/build/assets/backend-form-modal-OroTqnAv.js +1 -0
- package/build/assets/{backend-synced-settings-badge-BnzI8Ysj.js → backend-synced-settings-badge-DB4717Iu.js} +1 -1
- package/build/assets/{badge-1Mf1iPcX.js → badge-yR53enbU.js} +1 -1
- package/build/assets/{base-modal-BBuy0WQQ.js → base-modal-3NmIOKDm.js} +1 -1
- package/build/assets/bot-DuN83i3p.js +1 -0
- package/build/assets/{brand-button-DGN6Y9o6.js → brand-button-CJcwjnfb.js} +1 -1
- package/build/assets/{browser-D_ekTlTS.js → browser--eoQOo4M.js} +2 -2
- package/build/assets/{browser-tab-D4a4Ou_w.js → browser-tab-A94o33Vn.js} +1 -1
- package/build/assets/{chat-send-button-CgbcjD97.js → chat-send-button-B8n6-DQA.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-BVzv5EkZ.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-CBQdPZl_.js} +1 -1
- package/build/assets/{combobox-caret-Bd2yySnF.js → combobox-caret-BlmRwiM8.js} +1 -1
- package/build/assets/command-menu-PsRXVBz2.js +1 -0
- package/build/assets/condenser-settings-w7L3EFvm.js +1 -0
- package/build/assets/{confirmation-modal-NCUPr2-O.js → confirmation-modal-DAH0XtOp.js} +1 -1
- package/build/assets/context-menu-list-item-BQhmFVEK.js +1 -0
- package/build/assets/{conversation-CUJ0Vo8g.js → conversation-BUzBZAc-.js} +7 -7
- package/build/assets/conversation-panel-pzAKsSDb.js +1 -0
- package/build/assets/conversation-pzAKsSDb.js +1 -0
- package/build/assets/{conversation-state-store-F62HvuI1.js → conversation-state-store-Bs8gA263.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-C9sfDOlt.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-DatoElj8.js} +1 -1
- package/build/assets/{device-verify-DLmolX8Q.js → device-verify-BIjXeW9N.js} +1 -1
- package/build/assets/{dist-hOnv1nn2.js → dist-Bl64nBZL.js} +1 -1
- package/build/assets/{dropdown-classes-BB8rzqXL.js → dropdown-classes-zFW7qPSK.js} +1 -1
- package/build/assets/entry.client-DzbDyLkV.js +2 -0
- package/build/assets/enum-filter-dropdown-CctILg5t.js +1 -0
- package/build/assets/{environment-switch-overlay-BepBBX66.js → environment-switch-overlay-Cvmo6clk.js} +1 -1
- package/build/assets/{extensions-hub-R3KNv-5V.js → extensions-hub-DOmHPGTA.js} +1 -1
- package/build/assets/{extensions-navigation-CfWFmI1I.js → extensions-navigation-6zU5M1pa.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-BzofBmF4.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-DLN3Qgub.js} +1 -1
- package/build/assets/format-relative-time-DGPQlPx0.js +1 -0
- package/build/assets/format-time-delta-BIR5Os7T.js +1 -0
- package/build/assets/{git-provider-icon-BZqqUPlm.js → git-provider-icon-BLMlwy02.js} +1 -1
- package/build/assets/{git-repo-dropdown-DEpOwUez.js → git-repo-dropdown-B7RvO70z.js} +1 -1
- package/build/assets/git-repo-dropdown-B_PTq4ol.js +1 -0
- package/build/assets/{highlighted-source-view-CX9oIoVT.js → highlighted-source-view-CgJfD5VT.js} +1 -1
- package/build/assets/home-DEZaZqYv.js +1 -0
- package/build/assets/home-r89Vj2td.js +1 -0
- package/build/assets/{home-store-Ch1ErdBc.js → home-store-D7CjMN_-.js} +1 -1
- package/build/assets/{iconBase-B2rQun3J.js → iconBase-C2sR-uAp.js} +1 -1
- package/build/assets/index-home-r89Vj2td.js +1 -0
- package/build/assets/install-server-modal-BTwK5lbi.js +1 -0
- package/build/assets/kebab-menu-item-content-C4CkeiJO.js +1 -0
- package/build/assets/{launch-B1POpHuP.js → launch-DVlx4v9o.js} +1 -1
- package/build/assets/{link-external-BDBCz-_z.js → link-external-BNZzCM1I.js} +1 -1
- package/build/assets/{list-todo-DtiL3lTp.js → list-todo-CheUtB7F.js} +1 -1
- package/build/assets/llm-not-configured-banner-CwKu8C6g.js +27 -0
- package/build/assets/llm-settings-BJotLQND.js +1 -0
- package/build/assets/llm-settings-CDM-5H2A.js +1 -0
- package/build/assets/{llm-subscription-service-DBJbfd8Z.js → llm-subscription-service-7eVfDIE1.js} +1 -1
- package/build/assets/loader-circle-C5AnEN8r.js +1 -0
- package/build/assets/{loading-spinner-DfZ_bhV7.js → loading-spinner-CN3riY7k.js} +1 -1
- package/build/assets/{manage-backends-modal-CwyWsiag.js → manage-backends-modal-HNWKLYhq.js} +1 -1
- package/build/assets/manifest-2a36a8f8.js +1 -0
- package/build/assets/manifest-subpage-layout-D-m-h8_t.js +1 -0
- package/build/assets/map-provider-7Bp2aih5.js +1 -0
- package/build/assets/markdown-renderer-BiiiIznl.js +8 -0
- package/build/assets/mcp-gLgPP7AS.js +9 -0
- package/build/assets/mcp-marketplace-utils-Dr_HG_ol.js +1 -0
- package/build/assets/messages-D1cbVhRK.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-duRaxj_K.js} +1 -1
- package/build/assets/{modal-classes-B6PDrxXo.js → modal-classes-CLEXO6dj.js} +1 -1
- package/build/assets/{modal-close-button-DyxBZaAb.js → modal-close-button-D0aT02hs.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/npm-DRzJF5Zn.js +1 -0
- package/build/assets/onboarding-DSr8hOpk.js +1 -0
- package/build/assets/onboarding-modal-C6Euf7N4.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-C4GYWwj9.js} +1 -1
- package/build/assets/{pencil-BjgtZmWp.js → pencil-Bl3GWhgq.js} +1 -1
- package/build/assets/{planner-tab-BWk8885v.js → planner-tab-CZcguxTK.js} +1 -1
- package/build/assets/{plugins-management-service-CjkgF2dd.js → plugins-management-service-BmDzOQsd.js} +1 -1
- package/build/assets/plus-CtzlyAoF.js +1 -0
- package/build/assets/{profiles-service.api-CukSFLzz.js → profiles-service.api-CoLTwjc1.js} +1 -1
- package/build/assets/{providers-CqUWC85T.js → providers-tBzTpz1w.js} +1 -1
- package/build/assets/{proxy-BBUG3sd2.js → proxy-DCI9S-LA.js} +1 -1
- package/build/assets/{puzzle-BoNc6zZ8.js → puzzle-B3v361yY.js} +1 -1
- package/build/assets/recommended-automations-launcher-BbJAJVED.js +1 -0
- package/build/assets/{refresh-cw-BrM5ZAZD.js → refresh-cw-B9GhC3QC.js} +1 -1
- package/build/assets/root-BfM_kC_d.css +1 -0
- package/build/assets/root-gstBEjty.js +2 -0
- package/build/assets/root-layout-BIAFLP9p.js +2 -0
- package/build/assets/{schema-field-nImDoY6-.js → schema-field-zhsVDllR.js} +1 -1
- package/build/assets/{sdk-section-page-BxMrtUNV.js → sdk-section-page-CS4GWn0y.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-DjgGduXk.js} +1 -1
- package/build/assets/{secrets-settings-CPdxceT_.js → secrets-settings-f-qahfbi.js} +1 -1
- package/build/assets/{segmented-toggle-Do6oyepX.js → segmented-toggle-SmvsR3jW.js} +1 -1
- package/build/assets/settings-CWFxymAf.js +1 -0
- package/build/assets/settings-DQd0xLEw.js +1 -0
- package/build/assets/{settings-dropdown-input-DYCULKpp.js → settings-dropdown-input-TWIeiG02.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-BVwy9JEp.js} +1 -1
- package/build/assets/{settings-input-B-q2gkVy.js → settings-input-D61Vzp9e.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-sE0ASr1s.js} +1 -1
- package/build/assets/{settings-modal-CEK0AIx6.js → settings-modal-D6D5ngET.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-DZp7E7A9.js +1 -0
- package/build/assets/{settings-switch-LqKdGxHL.js → settings-switch-Drt-rF5s.js} +1 -1
- package/build/assets/{settings-utils-BL_Z9uIe.js → settings-utils-gw2ppAvw.js} +1 -1
- package/build/assets/{shared-conversation-Bu-dQlgp.js → shared-conversation-DIxZjElr.js} +1 -1
- package/build/assets/shield-check-D2cpEpv3.js +1 -0
- package/build/assets/{sidebar-layout-oHBGQmLh.js → sidebar-layout-Dxg6zc2K.js} +1 -1
- package/build/assets/sidebar-mobile-menu-toggle-OoZBHxaT.js +1 -0
- package/build/assets/{sidebar-nav-link-CrujNA09.js → sidebar-nav-link-CxLoG-dG.js} +1 -1
- package/build/assets/sidebar-store-BJeYY-E9.js +1 -0
- package/build/assets/{skill-card-pill-row-CZBI7OqH.js → skill-card-pill-row-B_BYBONu.js} +1 -1
- package/build/assets/{skill-icon-badge-BOov_phZ.js → skill-icon-badge-CN41Hy9l.js} +1 -1
- package/build/assets/skill-scope-B1Per5XI.js +1 -0
- package/build/assets/{skills-CYFLsN5U.js → skills-B0IliMxw.js} +1 -1
- package/build/assets/{skills-plugins-D0PiHWAD.js → skills-plugins-B3AO6sMz.js} +1 -1
- package/build/assets/skills-settings-DmmgJ6CT.js +2 -0
- package/build/assets/sparkles-g7y3r-Ut.js +1 -0
- package/build/assets/{styled-tooltip-C7grwnOX.js → styled-tooltip-C5C07RQC.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-C19Q_JNf.js} +1 -1
- package/build/assets/{terminal-cMS3RgVE.js → terminal-BUpID2wS.js} +1 -1
- package/build/assets/{terminal-yqkNdEAx.js → terminal-CbuMRYal.js} +1 -1
- package/build/assets/{toggle-switch-BeSrbgCg.js → toggle-switch-CIioisto.js} +1 -1
- package/build/assets/{trash-2-wW5TWcdN.js → trash-2-CzDVN-Iw.js} +1 -1
- package/build/assets/{typography-iYhzLlHO.js → typography-D9tiHct7.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-DJmmJKMo.js} +1 -1
- package/build/assets/{use-activate-agent-profile-CDHA52tC.js → use-activate-agent-profile-CeFfYwu_.js} +1 -1
- package/build/assets/{use-agent-profiles-TsOdIyw5.js → use-agent-profiles-BHLkLbRR.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-Bu4y8gSx.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-QD9x3ySO.js} +1 -1
- package/build/assets/{use-config-CxlEdf_v.js → use-config-CPwqciXN.js} +1 -1
- package/build/assets/{use-create-conversation-nOJ6Um5h.js → use-create-conversation-DWaSVUOB.js} +1 -1
- package/build/assets/{use-create-secret-Dj5ang9x.js → use-create-secret-BsOfOLvg.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-CU8ah1pz.js +1 -0
- package/build/assets/use-manifest-capabilities-DBYPjyV6.js +1 -0
- package/build/assets/{use-onboarding-completion-gxQlcEy2.js → use-onboarding-completion-CtNJxkXG.js} +1 -1
- package/build/assets/{use-plugins-marketplace-CVO7sXYR.js → use-plugins-marketplace-ZEA-gyM9.js} +1 -1
- package/build/assets/use-save-agent-profile-DgI_Uz9a.js +1 -0
- package/build/assets/{use-save-settings-L3aMaDeS.js → use-save-settings-pSjRhD_m.js} +1 -1
- package/build/assets/{use-settings-8nt3DGxW.js → use-settings-BHWsOcIG.js} +1 -1
- package/build/assets/use-settings-nav-items-CQgkxUbV.js +16 -0
- package/build/assets/use-tracking-CGCsBWhg.js +3 -0
- package/build/assets/{use-user-conversation-BIIpGUgM.js → use-user-conversation-DRfEU8x0.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-DPQfkd-7.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-BItwt998.js} +1 -1
- package/build/assets/wrench-B1_H-tL1.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 +108 -5
- package/build/locales/ca/openhands.json +108 -5
- package/build/locales/de/openhands.json +108 -5
- package/build/locales/en/openhands.json +108 -5
- package/build/locales/es/openhands.json +108 -5
- package/build/locales/fr/openhands.json +108 -5
- package/build/locales/it/openhands.json +108 -5
- package/build/locales/ja/openhands.json +108 -5
- package/build/locales/ko-KR/openhands.json +108 -5
- package/build/locales/no/openhands.json +108 -5
- package/build/locales/pt/openhands.json +108 -5
- package/build/locales/tr/openhands.json +108 -5
- package/build/locales/uk/openhands.json +108 -5
- package/build/locales/zh-CN/openhands.json +108 -5
- package/build/locales/zh-TW/openhands.json +108 -5
- package/build/mockServiceWorker.js +21 -9
- package/config/defaults.json +3 -3
- package/dist/api/agent-server-adapter.cjs +3 -3
- package/dist/api/agent-server-adapter.cjs.map +1 -1
- package/dist/api/agent-server-adapter.d.ts +32 -5
- package/dist/api/agent-server-adapter.js +120 -91
- package/dist/api/agent-server-adapter.js.map +1 -1
- 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/cloud/conversation-service.api.cjs +1 -1
- package/dist/api/cloud/conversation-service.api.cjs.map +1 -1
- package/dist/api/cloud/conversation-service.api.d.ts +19 -2
- package/dist/api/cloud/conversation-service.api.js +51 -47
- package/dist/api/cloud/conversation-service.api.js.map +1 -1
- package/dist/api/conversation-file-upload.api.cjs +1 -1
- package/dist/api/conversation-file-upload.api.js +10 -10
- package/dist/api/conversation-service/agent-server-conversation-service.api.cjs +1 -1
- package/dist/api/conversation-service/agent-server-conversation-service.api.cjs.map +1 -1
- package/dist/api/conversation-service/agent-server-conversation-service.api.js +55 -61
- package/dist/api/conversation-service/agent-server-conversation-service.api.js.map +1 -1
- package/dist/api/event-service/event-service.api.cjs +1 -1
- package/dist/api/event-service/event-service.api.js +12 -12
- package/dist/api/launch-child-conversation-client-tool.cjs +47 -0
- package/dist/api/launch-child-conversation-client-tool.cjs.map +1 -0
- package/dist/api/launch-child-conversation-client-tool.d.ts +3 -0
- package/dist/api/launch-child-conversation-client-tool.js +93 -0
- package/dist/api/launch-child-conversation-client-tool.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/open-hands.types.d.ts +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/api/workspace-upload-path.cjs +1 -1
- package/dist/api/workspace-upload-path.js +8 -8
- 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-content-helpers/get-action-event-title.cjs +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/get-action-event-title.cjs.map +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/get-action-event-title.js +24 -18
- package/dist/components/conversation-events/chat/event-content-helpers/get-action-event-title.js.map +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.cjs +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.cjs.map +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.js +5 -0
- package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.js.map +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.cjs +2 -2
- package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.cjs.map +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.js +11 -7
- package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.js.map +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.cjs +1 -2
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.d.ts +3 -9
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.js +48 -51
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.js.map +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-meta-chip.cjs +2 -0
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-meta-chip.cjs.map +1 -0
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-meta-chip.d.ts +12 -0
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-meta-chip.js +6 -0
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-meta-chip.js.map +1 -0
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.d.ts +16 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.js +95 -78
- package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.js.map +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.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-card/conversation-repo-link.cjs.map +1 -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-repo-link.js +40 -38
- package/dist/components/features/conversation-panel/conversation-card/conversation-repo-link.js.map +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/conversation-tag-chips.cjs +2 -0
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.cjs.map +1 -0
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.d.ts +14 -0
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.js +167 -0
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.js.map +1 -0
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.cjs +2 -0
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.cjs.map +1 -0
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.d.ts +63 -0
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.js +66 -0
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.js.map +1 -0
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-icons.cjs +2 -0
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-icons.cjs.map +1 -0
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-icons.d.ts +15 -0
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-icons.js +117 -0
- package/dist/components/features/conversation-panel/conversation-card/conversation-tag-icons.js.map +1 -0
- package/dist/components/features/conversation-panel/conversation-card/no-repository.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-card/no-repository.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-card/no-repository.d.ts +1 -1
- package/dist/components/features/conversation-panel/conversation-card/no-repository.js +30 -19
- package/dist/components/features/conversation-panel/conversation-card/no-repository.js.map +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.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-panel-filter-menu.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-panel-filter-menu.d.ts +7 -2
- package/dist/components/features/conversation-panel/conversation-panel-filter-menu.js +146 -104
- package/dist/components/features/conversation-panel/conversation-panel-filter-menu.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-panel-list-helpers.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-panel-list-helpers.cjs.map +1 -1
- package/dist/components/features/conversation-panel/conversation-panel-list-helpers.d.ts +20 -0
- package/dist/components/features/conversation-panel/conversation-panel-list-helpers.js +53 -27
- package/dist/components/features/conversation-panel/conversation-panel-list-helpers.js.map +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 +169 -155
- 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.cjs +1 -1
- package/dist/components/features/settings/agent-canvas-update-card.cjs.map +1 -1
- package/dist/components/features/settings/agent-canvas-update-card.d.ts +10 -5
- package/dist/components/features/settings/agent-canvas-update-card.js +223 -149
- package/dist/components/features/settings/agent-canvas-update-card.js.map +1 -1
- package/dist/components/features/settings/agent-canvas-version-modal.cjs +2 -0
- package/dist/components/features/settings/agent-canvas-version-modal.cjs.map +1 -0
- package/dist/components/features/settings/agent-canvas-version-modal.d.ts +11 -0
- package/dist/components/features/settings/agent-canvas-version-modal.js +166 -0
- package/dist/components/features/settings/agent-canvas-version-modal.js.map +1 -0
- package/dist/components/features/settings/agent-canvas-version-tile.cjs +2 -0
- package/dist/components/features/settings/agent-canvas-version-tile.cjs.map +1 -0
- package/dist/components/features/settings/agent-canvas-version-tile.d.ts +13 -0
- package/dist/components/features/settings/agent-canvas-version-tile.js +60 -0
- package/dist/components/features/settings/agent-canvas-version-tile.js.map +1 -0
- 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.cjs +1 -1
- package/dist/components/features/settings/settings-desktop-sidebar.cjs.map +1 -1
- package/dist/components/features/settings/settings-desktop-sidebar.d.ts +1 -1
- package/dist/components/features/settings/settings-desktop-sidebar.js +1 -1
- package/dist/components/features/settings/settings-desktop-sidebar.js.map +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.cjs +1 -1
- package/dist/components/features/settings/settings-mobile-drawer.cjs.map +1 -1
- package/dist/components/features/settings/settings-mobile-drawer.d.ts +1 -1
- package/dist/components/features/settings/settings-mobile-drawer.js +1 -1
- package/dist/components/features/settings/settings-mobile-drawer.js.map +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.cjs +1 -1
- package/dist/components/features/sidebar/sidebar-rail-body.cjs.map +1 -1
- package/dist/components/features/sidebar/sidebar-rail-body.d.ts +1 -1
- package/dist/components/features/sidebar/sidebar-rail-body.js +109 -108
- package/dist/components/features/sidebar/sidebar-rail-body.js.map +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.cjs +1 -1
- package/dist/components/features/skills/extensions-navigation.cjs.map +1 -1
- package/dist/components/features/skills/extensions-navigation.d.ts +1 -1
- package/dist/components/features/skills/extensions-navigation.js +9 -9
- package/dist/components/features/skills/extensions-navigation.js.map +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/constants/child-conversation.cjs +2 -0
- package/dist/constants/child-conversation.cjs.map +1 -0
- package/dist/constants/child-conversation.d.ts +29 -0
- package/dist/constants/child-conversation.js +6 -0
- package/dist/constants/child-conversation.js.map +1 -0
- 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.cjs +3 -3
- package/dist/contexts/conversation-websocket-context.cjs.map +1 -1
- package/dist/contexts/conversation-websocket-context.d.ts +1 -1
- package/dist/contexts/conversation-websocket-context.js +189 -188
- package/dist/contexts/conversation-websocket-context.js.map +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/chat/use-model-interceptor.cjs +1 -1
- package/dist/hooks/chat/use-model-interceptor.js +6 -6
- 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-create-conversation.cjs +1 -1
- package/dist/hooks/mutation/use-create-conversation.js +6 -6
- 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 +105 -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 +1813 -62
- package/dist/i18n/translation.js.map +1 -1
- package/dist/icons/code-pill.d.ts +1 -1
- package/dist/icons/docker.cjs +2 -0
- package/dist/icons/docker.cjs.map +1 -0
- package/dist/icons/docker.js +19 -0
- package/dist/icons/docker.js.map +1 -0
- package/dist/icons/npm.cjs +2 -0
- package/dist/icons/npm.cjs.map +1 -0
- package/dist/icons/npm.js +19 -0
- package/dist/icons/npm.js.map +1 -0
- package/dist/locales/ar/openhands.json +108 -5
- package/dist/locales/ca/openhands.json +108 -5
- package/dist/locales/de/openhands.json +108 -5
- package/dist/locales/en/openhands.json +108 -5
- package/dist/locales/es/openhands.json +108 -5
- package/dist/locales/fr/openhands.json +108 -5
- package/dist/locales/it/openhands.json +108 -5
- package/dist/locales/ja/openhands.json +108 -5
- package/dist/locales/ko-KR/openhands.json +108 -5
- package/dist/locales/no/openhands.json +108 -5
- package/dist/locales/pt/openhands.json +108 -5
- package/dist/locales/tr/openhands.json +108 -5
- package/dist/locales/uk/openhands.json +108 -5
- package/dist/locales/zh-CN/openhands.json +108 -5
- package/dist/locales/zh-TW/openhands.json +108 -5
- 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/@openhands/typescript-client/dist/index.cjs +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/index.js +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/lucide-react/dist/esm/icons/briefcase.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/briefcase.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/briefcase.js +16 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/briefcase.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/building-2.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/building-2.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/building-2.js +27 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/building-2.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-arrow-up.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-arrow-up.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-arrow-up.js +21 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-arrow-up.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-user-round.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-user-round.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-user-round.js +23 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-user-round.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/cloud-cog.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/cloud-cog.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/cloud-cog.js +43 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/cloud-cog.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/earth.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/earth.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/earth.js +25 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/earth.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/flag.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/flag.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/flag.js +9 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/flag.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/folder-git-2.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/folder-git-2.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/folder-git-2.js +27 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/folder-git-2.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/folder-key.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/folder-key.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/folder-key.js +25 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/folder-key.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/git-pull-request.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/git-pull-request.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/git-pull-request.js +30 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/git-pull-request.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/hash.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/hash.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/hash.js +35 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/hash.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/house.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/house.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/house.js +12 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/house.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/id-card.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/id-card.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/id-card.js +33 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/id-card.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/key-round.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/key-round.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/key-round.js +15 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/key-round.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/layers.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/layers.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/layers.js +19 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/layers.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/link-2.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/link-2.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/link-2.js +22 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/link-2.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/mails.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/mails.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/mails.js +23 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/mails.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/messages-square.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/messages-square.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/messages-square.js +12 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/messages-square.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/plug.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/plug.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/plug.js +23 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/plug.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/square-kanban.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/square-kanban.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/square-kanban.js +27 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/square-kanban.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/ticket.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/ticket.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/ticket.js +23 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/ticket.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/users-round.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/users-round.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/users-round.js +21 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/users-round.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/waypoints.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/waypoints.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/waypoints.js +43 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/waypoints.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/webhook.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/webhook.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/webhook.js +19 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/webhook.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/workflow.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/workflow.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/workflow.js +27 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/workflow.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/wrench.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/wrench.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/wrench.js +9 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/wrench.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/zap.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/zap.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/zap.js +9 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/zap.js.map +1 -0
- 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 +39 -35
- 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/child-conversation-launch.cjs +2 -0
- package/dist/services/child-conversation-launch.cjs.map +1 -0
- package/dist/services/child-conversation-launch.d.ts +41 -0
- package/dist/services/child-conversation-launch.js +182 -0
- package/dist/services/child-conversation-launch.js.map +1 -0
- 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/stores/conversation-panel-preferences-store.cjs +1 -1
- package/dist/stores/conversation-panel-preferences-store.cjs.map +1 -1
- package/dist/stores/conversation-panel-preferences-store.d.ts +5 -1
- package/dist/stores/conversation-panel-preferences-store.js +8 -2
- package/dist/stores/conversation-panel-preferences-store.js.map +1 -1
- package/dist/types/agent-server/core/base/action.d.ts +17 -1
- package/dist/types/agent-server/core/base/base.d.ts +2 -1
- package/dist/types/agent-server/type-guards.cjs +1 -1
- package/dist/types/agent-server/type-guards.cjs.map +1 -1
- package/dist/types/agent-server/type-guards.d.ts +8 -1
- package/dist/types/agent-server/type-guards.js +4 -3
- package/dist/types/agent-server/type-guards.js.map +1 -1
- package/dist/types/automation.d.ts +30 -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.cjs +1 -1
- package/dist/utils/custom-toast-handlers.cjs.map +1 -1
- package/dist/utils/custom-toast-handlers.d.ts +2 -2
- package/dist/utils/custom-toast-handlers.js +18 -1
- package/dist/utils/custom-toast-handlers.js.map +1 -1
- 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 +41 -35
- package/scripts/brand-dev-electron.mjs +244 -0
- package/scripts/check-sdk-version-sync.mjs +6 -6
- package/scripts/check-translation-completeness.cjs +4 -0
- package/scripts/dev-safe.mjs +2 -2
- package/scripts/dev-with-automation.mjs +3 -2
- package/scripts/generate-icons.mjs +109 -0
- 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/backend-form-modal-B8D5hBzK.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/copy-DCmZtz6n.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-CXo8iPNW.js +0 -1
- 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/map-provider-CXU6issd.js +0 -1
- package/build/assets/markdown-renderer-DgiLLhW6.js +0 -8
- 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-BRbnfKEm.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/sidebar-store-Bui-WNEr.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-settings-nav-items-DHAAD-zk.js +0 -16
- 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/lucide-react/dist/esm/icons/chevron-up.cjs +0 -2
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.cjs.map +0 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.js +0 -9
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.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
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
require("../_virtual/_rolldown/runtime.cjs");const e=require("../i18n/declaration.cjs"),t=require("../api/agent-server-compatibility.cjs"),n=require("../utils/base-path.cjs"),r=require("../i18n/index.cjs"),i=require("../utils/custom-toast-handlers.cjs"),a=require("../constants/child-conversation.cjs"),o=require("../stores/goal-store.cjs"),s=require("../api/conversation-metadata-store.cjs"),c=require("../api/cloud/conversation-service.api.cjs"),l=require("../api/conversation-service/agent-server-conversation-service.api.cjs");var u=3e3,d=18e4,f=`openhands-child-conversation-launches:`,p=(e,t)=>({status:`error`,error:e,guidance:t}),m=e=>e.map(e=>`"${e}"`).join(` or `),h=e=>e?.trim()||null;function g(e){let t=e.target;if(!a.CHILD_CONVERSATION_TARGETS.includes(t))return{ok:!1,failure:p(`Unknown target ${JSON.stringify(e.target)}.`,`\`target\` must be exactly ${m(a.CHILD_CONVERSATION_TARGETS)}. Nothing was launched — call ${a.LAUNCH_CHILD_CONVERSATION_TOOL_NAME} again with a valid target.`)};let n=h(e.task);if(!n)return{ok:!1,failure:p("`task` is empty.","`task` must be a self-contained brief: the child conversation cannot see this one, so state the goal, constraints and expected output.")};let r=h(e.repository),i=h(e.branch),o=h(e.isolation);return t===`local`&&(r||i)?{ok:!1,failure:p('`repository`/`branch` were passed with target="local".','A local child always runs in this conversation\'s workspace. Drop `repository` and `branch`, or use target="cloud" to run against a repository in a Cloud sandbox.')}:t===`cloud`&&o?{ok:!1,failure:p('`isolation` was passed with target="cloud".','Cloud children always run in their own isolated sandbox. Drop `isolation`, or use target="local" to choose between "worktree" and "shared".')}:i&&!r?{ok:!1,failure:p("`branch` was passed without `repository`.",'Pass `repository` as "owner/repo" alongside `branch`, or drop `branch` to use the repository\'s default branch.')}:o&&!a.CHILD_CONVERSATION_ISOLATIONS.includes(o)?{ok:!1,failure:p(`Unknown isolation ${JSON.stringify(e.isolation)}.`,`\`isolation\` must be exactly ${m(a.CHILD_CONVERSATION_ISOLATIONS)}. Nothing was launched — call ${a.LAUNCH_CHILD_CONVERSATION_TOOL_NAME} again with a valid isolation.`)}:{ok:!0,params:{target:t,task:n,title:h(e.title),repository:r,branch:i,isolation:o??`worktree`}}}function _(e,t){let n=`${f}${e}`,r=[];try{let e=window.localStorage.getItem(n),t=e?JSON.parse(e):null;Array.isArray(t)&&(r=t.filter(e=>typeof e==`string`))}catch{}if(r.includes(t))return!1;try{window.localStorage.setItem(n,JSON.stringify([...r,t]))}catch{}return!0}function v(e){let t=n.buildAgentCanvasPath(e);return typeof window>`u`?t:new URL(t,window.location.origin).toString()}function y(){let e=t.getCachedAgentServerVersion();if(!e)return null;let n=t.compareAgentServerVersions(e,a.MIN_AGENT_SERVER_VERSION_FOR_PARENT_LINK);return n===null||n>=0?null:`Agent server ${e} does not persist parent/child conversation links (needs ${a.MIN_AGENT_SERVER_VERSION_FOR_PARENT_LINK}); the child was created but is not linked to this conversation.`}var b=e=>!!(e?.selected_repository||e?.selected_workspace),x=`The child was launched in this conversation's directory instead, so it can see work in progress here and the two agents may conflict over the same files.`;async function S(e,t){let n=await l.default.resolveConversationWorkingDir(t),r=s.getStoredConversationMetadata(t),i=i=>l.default.createConversation(e.task,void 0,void 0,r?{selected_repository:r.selected_repository,selected_branch:r.selected_branch,git_provider:r.git_provider}:null,n,i===`shared`?`local_repo`:`new_worktree`,t),a=e.isolation,o=null;a===`worktree`&&!b(r)&&(a=`shared`,o=`This conversation's workspace is a scratch directory with no commits, which git cannot cut a worktree from. ${x}`);let c;try{c=await i(a)}catch(e){if(a!==`worktree`)throw e;try{c=await i(`shared`)}catch{throw e}a=`shared`,o=`Creating a git worktree in this conversation's workspace failed (${e instanceof Error?e.message:String(e)}). ${x}`}let u=c.app_conversation_id??c.id;e.title&&await l.default.updateConversationTitle(u,e.title).catch(()=>void 0);let d=y();return{status:`launched`,target:`local`,conversation_id:u,url:v(`/conversations/${u}`),initial_status:c.status,title:e.title,workspace:n,isolation:a,...o?{isolation_note:o}:{},parent_link:!d,...d?{parent_link_note:d}:{}}}var C=e=>new Promise(t=>{setTimeout(t,e)});async function w(e,t){let n=Date.now()+d,r=e;for(;!r.app_conversation_id&&r.status!==`ERROR`&&!(Date.now()>=n);){await C(u);let e=await c.getCloudAppConversationStartTask(r.id,t).catch(()=>null);if(!e)break;r=e}return r}async function T(e,t){let n=c.pickCloudBackendForLaunch();if(!n)return p(`No OpenHands Cloud backend is connected in Agent Canvas.`,`Ask the user to connect OpenHands Cloud from the backend picker, then call this tool again — or relaunch now with target="local".`);let r=s.getStoredConversationMetadata(t),i=await w(await c.createCloudAppConversation({initial_message:{role:`user`,content:[{type:`text`,text:e.task}]},title:e.title,selected_repository:e.repository??r?.selected_repository??null,selected_branch:e.branch??null,git_provider:e.repository?null:r?.git_provider??null,parent_conversation_id:null},n),n);if(i.status===`ERROR`)return p(i.detail||`The Cloud conversation failed to start.`,`The Cloud sandbox could not be provisioned. Report this to the user; you can retry, or fall back to target="local".`);let a=i.app_conversation_id;return{status:`launched`,target:`cloud`,conversation_id:a,url:a?`${n.host.replace(/\/$/,``)}/conversations/${a}`:null,initial_status:i.status,title:e.title,start_task_id:i.id,backend:n.name,parent_link:!1,parent_link_note:`This conversation runs on the local agent server, so OpenHands Cloud has no parent to link the child to.`}}async function E(t,n){n.status===`error`?i.displayErrorToast(r.default.t(e.I18nKey.CHILD_CONVERSATION$LAUNCH_FAILED,{error:n.error})):n.url&&i.displaySuccessToastWithLink(r.default.t(n.target===`cloud`?e.I18nKey.CHILD_CONVERSATION$LAUNCHED_CLOUD:e.I18nKey.CHILD_CONVERSATION$LAUNCHED_LOCAL),r.default.t(e.I18nKey.CHILD_CONVERSATION$OPEN),n.url),!o.useGoalStore.getState().statusByConversation[t]?.active&&await l.default.sendMessage(t,{role:`user`,content:[{type:`text`,text:`${a.CHILD_CONVERSATION_RESULT_PREFIX}${JSON.stringify(n)}`}]})}async function D(e,t,n){if(!_(t,n))return;let r=g(e),i;if(!r.ok)i=r.failure;else try{i=r.params.target===`cloud`?await T(r.params,t):await S(r.params,t)}catch(e){i=p(e instanceof Error?e.message:String(e),`The launch request failed. Report the error to the user; retry only if the cause looks transient.`)}await E(t,i).catch(e=>{console.warn(`[${a.LAUNCH_CHILD_CONVERSATION_TOOL_NAME}] Failed to report the launch result:`,e)})}exports.handleLaunchChildConversationAction=D;
|
|
2
|
+
//# sourceMappingURL=child-conversation-launch.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"child-conversation-launch.cjs","names":[],"sources":["../../src/services/child-conversation-launch.ts"],"sourcesContent":["import i18n from \"#/i18n\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport {\n compareAgentServerVersions,\n getCachedAgentServerVersion,\n} from \"#/api/agent-server-compatibility\";\nimport {\n createCloudAppConversation,\n getCloudAppConversationStartTask,\n pickCloudBackendForLaunch,\n} from \"#/api/cloud/conversation-service.api\";\nimport type { Backend } from \"#/api/backend-registry/types\";\nimport {\n getStoredConversationMetadata,\n type ConversationMetadata,\n} from \"#/api/conversation-metadata-store\";\nimport AgentServerConversationService from \"#/api/conversation-service/agent-server-conversation-service.api\";\nimport type { AppConversationStartTask } from \"#/api/conversation-service/agent-server-conversation-service.types\";\nimport {\n CHILD_CONVERSATION_ISOLATIONS,\n CHILD_CONVERSATION_RESULT_PREFIX,\n CHILD_CONVERSATION_TARGETS,\n LAUNCH_CHILD_CONVERSATION_TOOL_NAME,\n MIN_AGENT_SERVER_VERSION_FOR_PARENT_LINK,\n type ChildConversationIsolation,\n type ChildConversationTarget,\n} from \"#/constants/child-conversation\";\nimport { useGoalStore } from \"#/stores/goal-store\";\nimport type { LaunchChildConversationAction } from \"#/types/agent-server/core\";\nimport { buildAgentCanvasPath } from \"#/utils/base-path\";\nimport {\n displayErrorToast,\n displaySuccessToastWithLink,\n} from \"#/utils/custom-toast-handlers\";\n\n/** Cadence and ceiling for waiting on a Cloud sandbox to expose its id. */\nconst CLOUD_START_POLL_INTERVAL_MS = 3_000;\nconst CLOUD_START_POLL_TIMEOUT_MS = 180_000;\n\nconst LEDGER_STORAGE_KEY_PREFIX = \"openhands-child-conversation-launches:\";\n\ninterface LaunchSuccess {\n status: \"launched\";\n target: ChildConversationTarget;\n conversation_id: string | null;\n url: string | null;\n initial_status: string;\n title: string | null;\n /** Local only: the directory the child inherited from this conversation. */\n workspace?: string;\n /** Local only: which isolation mode was actually applied. */\n isolation?: ChildConversationIsolation;\n /**\n * Present when the applied isolation is not the one that was asked for,\n * explaining why and what it means for the child.\n */\n isolation_note?: string;\n /** Cloud only: poll this if `conversation_id` is still null. */\n start_task_id?: string;\n /** Cloud only: which connected Cloud backend the child was launched on. */\n backend?: string;\n /** Whether the parent/child link was persisted server-side. */\n parent_link: boolean;\n /** Present when `parent_link` is false, explaining why. */\n parent_link_note?: string;\n}\n\ninterface LaunchFailure {\n status: \"error\";\n error: string;\n guidance: string;\n}\n\nexport type LaunchChildConversationResult = LaunchSuccess | LaunchFailure;\n\ninterface ValidatedParams {\n target: ChildConversationTarget;\n task: string;\n title: string | null;\n repository: string | null;\n branch: string | null;\n isolation: ChildConversationIsolation;\n}\n\nconst failure = (error: string, guidance: string): LaunchFailure => ({\n status: \"error\",\n error,\n guidance,\n});\n\nconst quoted = (values: readonly string[]) =>\n values.map((value) => `\"${value}\"`).join(\" or \");\n\nconst blankToNull = (value: string | null | undefined) => {\n const trimmed = value?.trim();\n return trimmed ? trimmed : null;\n};\n\n/**\n * Validate what the agent-server cannot.\n *\n * The tool's JSON Schema is turned into a pydantic model with `extra=\"forbid\"`,\n * so unknown/misspelled parameter names, missing required parameters and wrong\n * types already fail server-side with a corrective message. `enum` is the gap:\n * the SDK advertises it to the LLM but drops it when building the model, so a\n * misspelled `target` reaches us intact and must be rejected here. The\n * cross-target rules (cloud-only / local-only parameters) are ours to enforce\n * too, since a schema cannot express them.\n */\nfunction validateLaunchParams(\n action: LaunchChildConversationAction,\n):\n | { ok: true; params: ValidatedParams }\n | { ok: false; failure: LaunchFailure } {\n const target = action.target as ChildConversationTarget;\n if (!CHILD_CONVERSATION_TARGETS.includes(target)) {\n return {\n ok: false,\n failure: failure(\n `Unknown target ${JSON.stringify(action.target)}.`,\n `\\`target\\` must be exactly ${quoted(CHILD_CONVERSATION_TARGETS)}. Nothing was launched — call ${LAUNCH_CHILD_CONVERSATION_TOOL_NAME} again with a valid target.`,\n ),\n };\n }\n\n const task = blankToNull(action.task);\n if (!task) {\n return {\n ok: false,\n failure: failure(\n \"`task` is empty.\",\n \"`task` must be a self-contained brief: the child conversation cannot see this one, so state the goal, constraints and expected output.\",\n ),\n };\n }\n\n const repository = blankToNull(action.repository);\n const branch = blankToNull(action.branch);\n const isolation = blankToNull(\n action.isolation,\n ) as ChildConversationIsolation | null;\n\n if (target === \"local\" && (repository || branch)) {\n return {\n ok: false,\n failure: failure(\n '`repository`/`branch` were passed with target=\"local\".',\n 'A local child always runs in this conversation\\'s workspace. Drop `repository` and `branch`, or use target=\"cloud\" to run against a repository in a Cloud sandbox.',\n ),\n };\n }\n\n if (target === \"cloud\" && isolation) {\n return {\n ok: false,\n failure: failure(\n '`isolation` was passed with target=\"cloud\".',\n 'Cloud children always run in their own isolated sandbox. Drop `isolation`, or use target=\"local\" to choose between \"worktree\" and \"shared\".',\n ),\n };\n }\n\n if (branch && !repository) {\n return {\n ok: false,\n failure: failure(\n \"`branch` was passed without `repository`.\",\n 'Pass `repository` as \"owner/repo\" alongside `branch`, or drop `branch` to use the repository\\'s default branch.',\n ),\n };\n }\n\n if (isolation && !CHILD_CONVERSATION_ISOLATIONS.includes(isolation)) {\n return {\n ok: false,\n failure: failure(\n `Unknown isolation ${JSON.stringify(action.isolation)}.`,\n `\\`isolation\\` must be exactly ${quoted(CHILD_CONVERSATION_ISOLATIONS)}. Nothing was launched — call ${LAUNCH_CHILD_CONVERSATION_TOOL_NAME} again with a valid isolation.`,\n ),\n };\n }\n\n return {\n ok: true,\n params: {\n target,\n task,\n title: blankToNull(action.title),\n repository,\n branch,\n isolation: isolation ?? \"worktree\",\n },\n };\n}\n\n/**\n * Remember which tool calls have already been acted on.\n *\n * Unlike the Canvas UI tool, a launch is not idempotent: replaying its\n * ActionEvent (a socket reconnect that falls back to `resend_mode: \"all\"`, or a\n * REST/WebSocket race after a reload) would start a second — on Cloud, billable\n * — conversation. Claim the tool call before any network work so a replay that\n * arrives mid-flight is dropped too.\n */\nfunction claimToolCall(parentConversationId: string, toolCallId: string) {\n const key = `${LEDGER_STORAGE_KEY_PREFIX}${parentConversationId}`;\n let handled: string[] = [];\n try {\n const raw = window.localStorage.getItem(key);\n const parsed: unknown = raw ? JSON.parse(raw) : null;\n if (Array.isArray(parsed)) {\n handled = parsed.filter((id): id is string => typeof id === \"string\");\n }\n } catch {\n // A corrupt ledger must not block the launch; start a fresh one.\n }\n\n if (handled.includes(toolCallId)) return false;\n\n try {\n window.localStorage.setItem(key, JSON.stringify([...handled, toolCallId]));\n } catch {\n // Storage full or unavailable — proceed, accepting replay risk over never\n // launching at all.\n }\n return true;\n}\n\nfunction absoluteCanvasUrl(path: string) {\n const canvasPath = buildAgentCanvasPath(path);\n if (typeof window === \"undefined\") return canvasPath;\n return new URL(canvasPath, window.location.origin).toString();\n}\n\n/**\n * `parent_conversation_id` on the local start request landed in agent-server\n * 1.37.1. Older servers ignore unknown fields, so the child is created without\n * the link — report that rather than letting the agent assume a relationship\n * that does not exist.\n */\nfunction localParentLinkNote(): string | null {\n const version = getCachedAgentServerVersion();\n if (!version) return null;\n const comparison = compareAgentServerVersions(\n version,\n MIN_AGENT_SERVER_VERSION_FOR_PARENT_LINK,\n );\n if (comparison === null || comparison >= 0) return null;\n return `Agent server ${version} does not persist parent/child conversation links (needs ${MIN_AGENT_SERVER_VERSION_FOR_PARENT_LINK}); the child was created but is not linked to this conversation.`;\n}\n\n/**\n * Whether the parent's workspace can host a git worktree.\n *\n * A conversation started without a repository or an attached workspace runs in\n * a scratch directory that is `git init`-ed but never committed to. `git\n * worktree add` cannot branch from an unborn HEAD, and the agent-server raises\n * the resulting error straight out of its start-conversation handler as a 500,\n * so asking for a worktree there fails the whole launch. Conversation metadata\n * is only persisted when a repository or an explicit workspace was chosen (see\n * `createConversation`), so its absence pinpoints exactly those scratch\n * workspaces. Anything else is attempted and falls back on failure, because the\n * frontend cannot inspect the workspace's git state directly.\n */\nconst parentSupportsWorktree = (\n metadata: ConversationMetadata | null,\n): boolean => !!(metadata?.selected_repository || metadata?.selected_workspace);\n\nconst SHARED_FALLBACK_CONSEQUENCE =\n \"The child was launched in this conversation's directory instead, so it can see work in progress here and the two agents may conflict over the same files.\";\n\nasync function launchLocalChild(\n params: ValidatedParams,\n parentConversationId: string,\n): Promise<LaunchChildConversationResult> {\n // The agent-server rejects a parent whose workspace differs from the child's,\n // so the child requests the parent's own directory. `worktree` then carves an\n // isolated worktree out of it, which is what keeps siblings from colliding.\n const workspace =\n await AgentServerConversationService.resolveConversationWorkingDir(\n parentConversationId,\n );\n const parentMetadata = getStoredConversationMetadata(parentConversationId);\n\n const createChild = (isolation: ChildConversationIsolation) =>\n AgentServerConversationService.createConversation(\n params.task,\n undefined,\n undefined,\n parentMetadata\n ? {\n selected_repository: parentMetadata.selected_repository,\n selected_branch: parentMetadata.selected_branch,\n git_provider: parentMetadata.git_provider,\n }\n : null,\n workspace,\n isolation === \"shared\" ? \"local_repo\" : \"new_worktree\",\n parentConversationId,\n );\n\n let isolation = params.isolation;\n let isolationNote: string | null = null;\n\n if (isolation === \"worktree\" && !parentSupportsWorktree(parentMetadata)) {\n isolation = \"shared\";\n isolationNote = `This conversation's workspace is a scratch directory with no commits, which git cannot cut a worktree from. ${SHARED_FALLBACK_CONSEQUENCE}`;\n }\n\n let startTask;\n try {\n startTask = await createChild(isolation);\n } catch (worktreeError) {\n if (isolation !== \"worktree\") throw worktreeError;\n // Creating the worktree is the one part of a local launch that can fail on\n // an otherwise healthy workspace, so retry without it rather than losing\n // the launch. Anything else fails both attempts and is reported as-is.\n try {\n startTask = await createChild(\"shared\");\n } catch {\n throw worktreeError;\n }\n isolation = \"shared\";\n isolationNote = `Creating a git worktree in this conversation's workspace failed (${worktreeError instanceof Error ? worktreeError.message : String(worktreeError)}). ${SHARED_FALLBACK_CONSEQUENCE}`;\n }\n\n const conversationId = startTask.app_conversation_id ?? startTask.id;\n\n if (params.title) {\n // Local start requests carry no title — only `autotitle`. Best effort: a\n // failed rename must not fail the launch.\n await AgentServerConversationService.updateConversationTitle(\n conversationId,\n params.title,\n ).catch(() => undefined);\n }\n\n const parentLinkNote = localParentLinkNote();\n return {\n status: \"launched\",\n target: \"local\",\n conversation_id: conversationId,\n url: absoluteCanvasUrl(`/conversations/${conversationId}`),\n initial_status: startTask.status,\n title: params.title,\n workspace,\n isolation,\n ...(isolationNote ? { isolation_note: isolationNote } : {}),\n parent_link: !parentLinkNote,\n ...(parentLinkNote ? { parent_link_note: parentLinkNote } : {}),\n };\n}\n\nconst delay = (ms: number) =>\n new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n\n/**\n * Wait for the Cloud start task to expose its conversation id.\n *\n * The Cloud API provisions a sandbox asynchronously and only fills in\n * `app_conversation_id` once the task reaches READY, so without this the agent\n * would get a result with no conversation to open. Bounded: on timeout the\n * caller reports the still-provisioning task instead of hanging.\n */\nasync function waitForCloudConversationId(\n task: AppConversationStartTask,\n backend: Backend,\n): Promise<AppConversationStartTask> {\n const deadline = Date.now() + CLOUD_START_POLL_TIMEOUT_MS;\n let latest = task;\n while (!latest.app_conversation_id && latest.status !== \"ERROR\") {\n if (Date.now() >= deadline) break;\n\n await delay(CLOUD_START_POLL_INTERVAL_MS);\n\n const next = await getCloudAppConversationStartTask(\n latest.id,\n backend,\n ).catch(() => null);\n if (!next) break;\n latest = next;\n }\n return latest;\n}\n\nasync function launchCloudChild(\n params: ValidatedParams,\n parentConversationId: string,\n): Promise<LaunchChildConversationResult> {\n const backend = pickCloudBackendForLaunch();\n if (!backend) {\n return failure(\n \"No OpenHands Cloud backend is connected in Agent Canvas.\",\n 'Ask the user to connect OpenHands Cloud from the backend picker, then call this tool again — or relaunch now with target=\"local\".',\n );\n }\n\n const parentMetadata = getStoredConversationMetadata(parentConversationId);\n const startTask = await createCloudAppConversation(\n {\n initial_message: {\n role: \"user\",\n content: [{ type: \"text\", text: params.task }],\n },\n title: params.title,\n // Fall back to this conversation's repository so a bare `target: \"cloud\"`\n // call still lands the child on the code the user is working on. The\n // provider only travels with the inherited repository — it may not apply\n // to one the agent named itself.\n selected_repository:\n params.repository ?? parentMetadata?.selected_repository ?? null,\n selected_branch: params.branch ?? null,\n git_provider: params.repository\n ? null\n : (parentMetadata?.git_provider ?? null),\n // The parent runs on the local agent-server, so its id means nothing to\n // Cloud. Sending it would only hide the child from the Cloud\n // conversation list, which filters out anything with a parent.\n parent_conversation_id: null,\n },\n backend,\n );\n\n const settled = await waitForCloudConversationId(startTask, backend);\n if (settled.status === \"ERROR\") {\n return failure(\n settled.detail || \"The Cloud conversation failed to start.\",\n 'The Cloud sandbox could not be provisioned. Report this to the user; you can retry, or fall back to target=\"local\".',\n );\n }\n\n const conversationId = settled.app_conversation_id;\n return {\n status: \"launched\",\n target: \"cloud\",\n conversation_id: conversationId,\n url: conversationId\n ? `${backend.host.replace(/\\/$/, \"\")}/conversations/${conversationId}`\n : null,\n initial_status: settled.status,\n title: params.title,\n start_task_id: settled.id,\n backend: backend.name,\n // Cloud children of a local parent carry no server-side link; see above.\n parent_link: false,\n parent_link_note:\n \"This conversation runs on the local agent server, so OpenHands Cloud has no parent to link the child to.\",\n };\n}\n\n/**\n * Hand the outcome back to the agent and the user.\n *\n * Client tools are acknowledged by the agent-server before the browser does any\n * work, so a message is the only way to give the agent the child's id or tell\n * it how to fix a malformed call. `sendMessage` runs the agent, which is what\n * makes it relay the result to the user in its next turn.\n */\nasync function reportLaunchResult(\n parentConversationId: string,\n result: LaunchChildConversationResult,\n) {\n if (result.status === \"error\") {\n displayErrorToast(\n i18n.t(I18nKey.CHILD_CONVERSATION$LAUNCH_FAILED, {\n error: result.error,\n }),\n );\n } else if (result.url) {\n displaySuccessToastWithLink(\n i18n.t(\n result.target === \"cloud\"\n ? I18nKey.CHILD_CONVERSATION$LAUNCHED_CLOUD\n : I18nKey.CHILD_CONVERSATION$LAUNCHED_LOCAL,\n ),\n i18n.t(I18nKey.CHILD_CONVERSATION$OPEN),\n result.url,\n );\n }\n\n // The agent-server cancels an active `/goal` loop on any inbound message, so\n // a launch must not silently end one. The toast above still tells the user\n // what happened.\n const goalStatus =\n useGoalStore.getState().statusByConversation[parentConversationId];\n if (goalStatus?.active) return;\n\n await AgentServerConversationService.sendMessage(parentConversationId, {\n role: \"user\",\n content: [\n {\n type: \"text\",\n text: `${CHILD_CONVERSATION_RESULT_PREFIX}${JSON.stringify(result)}`,\n },\n ],\n });\n}\n\n/**\n * Execute a `launch_child_conversation` tool call.\n *\n * Never rejects: every failure is turned into corrective guidance for the\n * agent, because the agent-server has already told it the call succeeded.\n */\nexport async function handleLaunchChildConversationAction(\n action: LaunchChildConversationAction,\n parentConversationId: string,\n toolCallId: string,\n): Promise<void> {\n if (!claimToolCall(parentConversationId, toolCallId)) return;\n\n const validation = validateLaunchParams(action);\n let result: LaunchChildConversationResult;\n if (!validation.ok) {\n result = validation.failure;\n } else {\n try {\n result =\n validation.params.target === \"cloud\"\n ? await launchCloudChild(validation.params, parentConversationId)\n : await launchLocalChild(validation.params, parentConversationId);\n } catch (error) {\n result = failure(\n error instanceof Error ? error.message : String(error),\n \"The launch request failed. Report the error to the user; retry only if the cause looks transient.\",\n );\n }\n }\n\n await reportLaunchResult(parentConversationId, result).catch((error) => {\n console.warn(\n `[${LAUNCH_CHILD_CONVERSATION_TOOL_NAME}] Failed to report the launch result:`,\n error,\n );\n });\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { type ChildConversationIsolation, type ChildConversationTarget } from "#/constants/child-conversation";
|
|
2
|
+
import type { LaunchChildConversationAction } from "#/types/agent-server/core";
|
|
3
|
+
interface LaunchSuccess {
|
|
4
|
+
status: "launched";
|
|
5
|
+
target: ChildConversationTarget;
|
|
6
|
+
conversation_id: string | null;
|
|
7
|
+
url: string | null;
|
|
8
|
+
initial_status: string;
|
|
9
|
+
title: string | null;
|
|
10
|
+
/** Local only: the directory the child inherited from this conversation. */
|
|
11
|
+
workspace?: string;
|
|
12
|
+
/** Local only: which isolation mode was actually applied. */
|
|
13
|
+
isolation?: ChildConversationIsolation;
|
|
14
|
+
/**
|
|
15
|
+
* Present when the applied isolation is not the one that was asked for,
|
|
16
|
+
* explaining why and what it means for the child.
|
|
17
|
+
*/
|
|
18
|
+
isolation_note?: string;
|
|
19
|
+
/** Cloud only: poll this if `conversation_id` is still null. */
|
|
20
|
+
start_task_id?: string;
|
|
21
|
+
/** Cloud only: which connected Cloud backend the child was launched on. */
|
|
22
|
+
backend?: string;
|
|
23
|
+
/** Whether the parent/child link was persisted server-side. */
|
|
24
|
+
parent_link: boolean;
|
|
25
|
+
/** Present when `parent_link` is false, explaining why. */
|
|
26
|
+
parent_link_note?: string;
|
|
27
|
+
}
|
|
28
|
+
interface LaunchFailure {
|
|
29
|
+
status: "error";
|
|
30
|
+
error: string;
|
|
31
|
+
guidance: string;
|
|
32
|
+
}
|
|
33
|
+
export type LaunchChildConversationResult = LaunchSuccess | LaunchFailure;
|
|
34
|
+
/**
|
|
35
|
+
* Execute a `launch_child_conversation` tool call.
|
|
36
|
+
*
|
|
37
|
+
* Never rejects: every failure is turned into corrective guidance for the
|
|
38
|
+
* agent, because the agent-server has already told it the call succeeded.
|
|
39
|
+
*/
|
|
40
|
+
export declare function handleLaunchChildConversationAction(action: LaunchChildConversationAction, parentConversationId: string, toolCallId: string): Promise<void>;
|
|
41
|
+
export {};
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { I18nKey as e } from "../i18n/declaration.js";
|
|
2
|
+
import { compareAgentServerVersions as t, getCachedAgentServerVersion as n } from "../api/agent-server-compatibility.js";
|
|
3
|
+
import { buildAgentCanvasPath as r } from "../utils/base-path.js";
|
|
4
|
+
import i from "../i18n/index.js";
|
|
5
|
+
import { displayErrorToast as a, displaySuccessToastWithLink as o } from "../utils/custom-toast-handlers.js";
|
|
6
|
+
import { CHILD_CONVERSATION_ISOLATIONS as s, CHILD_CONVERSATION_RESULT_PREFIX as c, CHILD_CONVERSATION_TARGETS as l, LAUNCH_CHILD_CONVERSATION_TOOL_NAME as u, MIN_AGENT_SERVER_VERSION_FOR_PARENT_LINK as d } from "../constants/child-conversation.js";
|
|
7
|
+
import { useGoalStore as f } from "../stores/goal-store.js";
|
|
8
|
+
import { getStoredConversationMetadata as p } from "../api/conversation-metadata-store.js";
|
|
9
|
+
import { createCloudAppConversation as m, getCloudAppConversationStartTask as h, pickCloudBackendForLaunch as g } from "../api/cloud/conversation-service.api.js";
|
|
10
|
+
import _ from "../api/conversation-service/agent-server-conversation-service.api.js";
|
|
11
|
+
//#region src/services/child-conversation-launch.ts
|
|
12
|
+
var v = 3e3, y = 18e4, b = "openhands-child-conversation-launches:", x = (e, t) => ({
|
|
13
|
+
status: "error",
|
|
14
|
+
error: e,
|
|
15
|
+
guidance: t
|
|
16
|
+
}), S = (e) => e.map((e) => `"${e}"`).join(" or "), C = (e) => e?.trim() || null;
|
|
17
|
+
function w(e) {
|
|
18
|
+
let t = e.target;
|
|
19
|
+
if (!l.includes(t)) return {
|
|
20
|
+
ok: !1,
|
|
21
|
+
failure: x(`Unknown target ${JSON.stringify(e.target)}.`, `\`target\` must be exactly ${S(l)}. Nothing was launched — call ${u} again with a valid target.`)
|
|
22
|
+
};
|
|
23
|
+
let n = C(e.task);
|
|
24
|
+
if (!n) return {
|
|
25
|
+
ok: !1,
|
|
26
|
+
failure: x("`task` is empty.", "`task` must be a self-contained brief: the child conversation cannot see this one, so state the goal, constraints and expected output.")
|
|
27
|
+
};
|
|
28
|
+
let r = C(e.repository), i = C(e.branch), a = C(e.isolation);
|
|
29
|
+
return t === "local" && (r || i) ? {
|
|
30
|
+
ok: !1,
|
|
31
|
+
failure: x("`repository`/`branch` were passed with target=\"local\".", "A local child always runs in this conversation's workspace. Drop `repository` and `branch`, or use target=\"cloud\" to run against a repository in a Cloud sandbox.")
|
|
32
|
+
} : t === "cloud" && a ? {
|
|
33
|
+
ok: !1,
|
|
34
|
+
failure: x("`isolation` was passed with target=\"cloud\".", "Cloud children always run in their own isolated sandbox. Drop `isolation`, or use target=\"local\" to choose between \"worktree\" and \"shared\".")
|
|
35
|
+
} : i && !r ? {
|
|
36
|
+
ok: !1,
|
|
37
|
+
failure: x("`branch` was passed without `repository`.", "Pass `repository` as \"owner/repo\" alongside `branch`, or drop `branch` to use the repository's default branch.")
|
|
38
|
+
} : a && !s.includes(a) ? {
|
|
39
|
+
ok: !1,
|
|
40
|
+
failure: x(`Unknown isolation ${JSON.stringify(e.isolation)}.`, `\`isolation\` must be exactly ${S(s)}. Nothing was launched — call ${u} again with a valid isolation.`)
|
|
41
|
+
} : {
|
|
42
|
+
ok: !0,
|
|
43
|
+
params: {
|
|
44
|
+
target: t,
|
|
45
|
+
task: n,
|
|
46
|
+
title: C(e.title),
|
|
47
|
+
repository: r,
|
|
48
|
+
branch: i,
|
|
49
|
+
isolation: a ?? "worktree"
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
function T(e, t) {
|
|
54
|
+
let n = `${b}${e}`, r = [];
|
|
55
|
+
try {
|
|
56
|
+
let e = window.localStorage.getItem(n), t = e ? JSON.parse(e) : null;
|
|
57
|
+
Array.isArray(t) && (r = t.filter((e) => typeof e == "string"));
|
|
58
|
+
} catch {}
|
|
59
|
+
if (r.includes(t)) return !1;
|
|
60
|
+
try {
|
|
61
|
+
window.localStorage.setItem(n, JSON.stringify([...r, t]));
|
|
62
|
+
} catch {}
|
|
63
|
+
return !0;
|
|
64
|
+
}
|
|
65
|
+
function E(e) {
|
|
66
|
+
let t = r(e);
|
|
67
|
+
return typeof window > "u" ? t : new URL(t, window.location.origin).toString();
|
|
68
|
+
}
|
|
69
|
+
function D() {
|
|
70
|
+
let e = n();
|
|
71
|
+
if (!e) return null;
|
|
72
|
+
let r = t(e, d);
|
|
73
|
+
return r === null || r >= 0 ? null : `Agent server ${e} does not persist parent/child conversation links (needs ${d}); the child was created but is not linked to this conversation.`;
|
|
74
|
+
}
|
|
75
|
+
var O = (e) => !!(e?.selected_repository || e?.selected_workspace), k = "The child was launched in this conversation's directory instead, so it can see work in progress here and the two agents may conflict over the same files.";
|
|
76
|
+
async function A(e, t) {
|
|
77
|
+
let n = await _.resolveConversationWorkingDir(t), r = p(t), i = (i) => _.createConversation(e.task, void 0, void 0, r ? {
|
|
78
|
+
selected_repository: r.selected_repository,
|
|
79
|
+
selected_branch: r.selected_branch,
|
|
80
|
+
git_provider: r.git_provider
|
|
81
|
+
} : null, n, i === "shared" ? "local_repo" : "new_worktree", t), a = e.isolation, o = null;
|
|
82
|
+
a === "worktree" && !O(r) && (a = "shared", o = `This conversation's workspace is a scratch directory with no commits, which git cannot cut a worktree from. ${k}`);
|
|
83
|
+
let s;
|
|
84
|
+
try {
|
|
85
|
+
s = await i(a);
|
|
86
|
+
} catch (e) {
|
|
87
|
+
if (a !== "worktree") throw e;
|
|
88
|
+
try {
|
|
89
|
+
s = await i("shared");
|
|
90
|
+
} catch {
|
|
91
|
+
throw e;
|
|
92
|
+
}
|
|
93
|
+
a = "shared", o = `Creating a git worktree in this conversation's workspace failed (${e instanceof Error ? e.message : String(e)}). ${k}`;
|
|
94
|
+
}
|
|
95
|
+
let c = s.app_conversation_id ?? s.id;
|
|
96
|
+
e.title && await _.updateConversationTitle(c, e.title).catch(() => void 0);
|
|
97
|
+
let l = D();
|
|
98
|
+
return {
|
|
99
|
+
status: "launched",
|
|
100
|
+
target: "local",
|
|
101
|
+
conversation_id: c,
|
|
102
|
+
url: E(`/conversations/${c}`),
|
|
103
|
+
initial_status: s.status,
|
|
104
|
+
title: e.title,
|
|
105
|
+
workspace: n,
|
|
106
|
+
isolation: a,
|
|
107
|
+
...o ? { isolation_note: o } : {},
|
|
108
|
+
parent_link: !l,
|
|
109
|
+
...l ? { parent_link_note: l } : {}
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
var j = (e) => new Promise((t) => {
|
|
113
|
+
setTimeout(t, e);
|
|
114
|
+
});
|
|
115
|
+
async function M(e, t) {
|
|
116
|
+
let n = Date.now() + y, r = e;
|
|
117
|
+
for (; !r.app_conversation_id && r.status !== "ERROR" && !(Date.now() >= n);) {
|
|
118
|
+
await j(v);
|
|
119
|
+
let e = await h(r.id, t).catch(() => null);
|
|
120
|
+
if (!e) break;
|
|
121
|
+
r = e;
|
|
122
|
+
}
|
|
123
|
+
return r;
|
|
124
|
+
}
|
|
125
|
+
async function N(e, t) {
|
|
126
|
+
let n = g();
|
|
127
|
+
if (!n) return x("No OpenHands Cloud backend is connected in Agent Canvas.", "Ask the user to connect OpenHands Cloud from the backend picker, then call this tool again — or relaunch now with target=\"local\".");
|
|
128
|
+
let r = p(t), i = await M(await m({
|
|
129
|
+
initial_message: {
|
|
130
|
+
role: "user",
|
|
131
|
+
content: [{
|
|
132
|
+
type: "text",
|
|
133
|
+
text: e.task
|
|
134
|
+
}]
|
|
135
|
+
},
|
|
136
|
+
title: e.title,
|
|
137
|
+
selected_repository: e.repository ?? r?.selected_repository ?? null,
|
|
138
|
+
selected_branch: e.branch ?? null,
|
|
139
|
+
git_provider: e.repository ? null : r?.git_provider ?? null,
|
|
140
|
+
parent_conversation_id: null
|
|
141
|
+
}, n), n);
|
|
142
|
+
if (i.status === "ERROR") return x(i.detail || "The Cloud conversation failed to start.", "The Cloud sandbox could not be provisioned. Report this to the user; you can retry, or fall back to target=\"local\".");
|
|
143
|
+
let a = i.app_conversation_id;
|
|
144
|
+
return {
|
|
145
|
+
status: "launched",
|
|
146
|
+
target: "cloud",
|
|
147
|
+
conversation_id: a,
|
|
148
|
+
url: a ? `${n.host.replace(/\/$/, "")}/conversations/${a}` : null,
|
|
149
|
+
initial_status: i.status,
|
|
150
|
+
title: e.title,
|
|
151
|
+
start_task_id: i.id,
|
|
152
|
+
backend: n.name,
|
|
153
|
+
parent_link: !1,
|
|
154
|
+
parent_link_note: "This conversation runs on the local agent server, so OpenHands Cloud has no parent to link the child to."
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
async function P(t, n) {
|
|
158
|
+
n.status === "error" ? a(i.t(e.CHILD_CONVERSATION$LAUNCH_FAILED, { error: n.error })) : n.url && o(i.t(n.target === "cloud" ? e.CHILD_CONVERSATION$LAUNCHED_CLOUD : e.CHILD_CONVERSATION$LAUNCHED_LOCAL), i.t(e.CHILD_CONVERSATION$OPEN), n.url), !f.getState().statusByConversation[t]?.active && await _.sendMessage(t, {
|
|
159
|
+
role: "user",
|
|
160
|
+
content: [{
|
|
161
|
+
type: "text",
|
|
162
|
+
text: `${c}${JSON.stringify(n)}`
|
|
163
|
+
}]
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
async function F(e, t, n) {
|
|
167
|
+
if (!T(t, n)) return;
|
|
168
|
+
let r = w(e), i;
|
|
169
|
+
if (!r.ok) i = r.failure;
|
|
170
|
+
else try {
|
|
171
|
+
i = r.params.target === "cloud" ? await N(r.params, t) : await A(r.params, t);
|
|
172
|
+
} catch (e) {
|
|
173
|
+
i = x(e instanceof Error ? e.message : String(e), "The launch request failed. Report the error to the user; retry only if the cause looks transient.");
|
|
174
|
+
}
|
|
175
|
+
await P(t, i).catch((e) => {
|
|
176
|
+
console.warn(`[${u}] Failed to report the launch result:`, e);
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
//#endregion
|
|
180
|
+
export { F as handleLaunchChildConversationAction };
|
|
181
|
+
|
|
182
|
+
//# sourceMappingURL=child-conversation-launch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"child-conversation-launch.js","names":[],"sources":["../../src/services/child-conversation-launch.ts"],"sourcesContent":["import i18n from \"#/i18n\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport {\n compareAgentServerVersions,\n getCachedAgentServerVersion,\n} from \"#/api/agent-server-compatibility\";\nimport {\n createCloudAppConversation,\n getCloudAppConversationStartTask,\n pickCloudBackendForLaunch,\n} from \"#/api/cloud/conversation-service.api\";\nimport type { Backend } from \"#/api/backend-registry/types\";\nimport {\n getStoredConversationMetadata,\n type ConversationMetadata,\n} from \"#/api/conversation-metadata-store\";\nimport AgentServerConversationService from \"#/api/conversation-service/agent-server-conversation-service.api\";\nimport type { AppConversationStartTask } from \"#/api/conversation-service/agent-server-conversation-service.types\";\nimport {\n CHILD_CONVERSATION_ISOLATIONS,\n CHILD_CONVERSATION_RESULT_PREFIX,\n CHILD_CONVERSATION_TARGETS,\n LAUNCH_CHILD_CONVERSATION_TOOL_NAME,\n MIN_AGENT_SERVER_VERSION_FOR_PARENT_LINK,\n type ChildConversationIsolation,\n type ChildConversationTarget,\n} from \"#/constants/child-conversation\";\nimport { useGoalStore } from \"#/stores/goal-store\";\nimport type { LaunchChildConversationAction } from \"#/types/agent-server/core\";\nimport { buildAgentCanvasPath } from \"#/utils/base-path\";\nimport {\n displayErrorToast,\n displaySuccessToastWithLink,\n} from \"#/utils/custom-toast-handlers\";\n\n/** Cadence and ceiling for waiting on a Cloud sandbox to expose its id. */\nconst CLOUD_START_POLL_INTERVAL_MS = 3_000;\nconst CLOUD_START_POLL_TIMEOUT_MS = 180_000;\n\nconst LEDGER_STORAGE_KEY_PREFIX = \"openhands-child-conversation-launches:\";\n\ninterface LaunchSuccess {\n status: \"launched\";\n target: ChildConversationTarget;\n conversation_id: string | null;\n url: string | null;\n initial_status: string;\n title: string | null;\n /** Local only: the directory the child inherited from this conversation. */\n workspace?: string;\n /** Local only: which isolation mode was actually applied. */\n isolation?: ChildConversationIsolation;\n /**\n * Present when the applied isolation is not the one that was asked for,\n * explaining why and what it means for the child.\n */\n isolation_note?: string;\n /** Cloud only: poll this if `conversation_id` is still null. */\n start_task_id?: string;\n /** Cloud only: which connected Cloud backend the child was launched on. */\n backend?: string;\n /** Whether the parent/child link was persisted server-side. */\n parent_link: boolean;\n /** Present when `parent_link` is false, explaining why. */\n parent_link_note?: string;\n}\n\ninterface LaunchFailure {\n status: \"error\";\n error: string;\n guidance: string;\n}\n\nexport type LaunchChildConversationResult = LaunchSuccess | LaunchFailure;\n\ninterface ValidatedParams {\n target: ChildConversationTarget;\n task: string;\n title: string | null;\n repository: string | null;\n branch: string | null;\n isolation: ChildConversationIsolation;\n}\n\nconst failure = (error: string, guidance: string): LaunchFailure => ({\n status: \"error\",\n error,\n guidance,\n});\n\nconst quoted = (values: readonly string[]) =>\n values.map((value) => `\"${value}\"`).join(\" or \");\n\nconst blankToNull = (value: string | null | undefined) => {\n const trimmed = value?.trim();\n return trimmed ? trimmed : null;\n};\n\n/**\n * Validate what the agent-server cannot.\n *\n * The tool's JSON Schema is turned into a pydantic model with `extra=\"forbid\"`,\n * so unknown/misspelled parameter names, missing required parameters and wrong\n * types already fail server-side with a corrective message. `enum` is the gap:\n * the SDK advertises it to the LLM but drops it when building the model, so a\n * misspelled `target` reaches us intact and must be rejected here. The\n * cross-target rules (cloud-only / local-only parameters) are ours to enforce\n * too, since a schema cannot express them.\n */\nfunction validateLaunchParams(\n action: LaunchChildConversationAction,\n):\n | { ok: true; params: ValidatedParams }\n | { ok: false; failure: LaunchFailure } {\n const target = action.target as ChildConversationTarget;\n if (!CHILD_CONVERSATION_TARGETS.includes(target)) {\n return {\n ok: false,\n failure: failure(\n `Unknown target ${JSON.stringify(action.target)}.`,\n `\\`target\\` must be exactly ${quoted(CHILD_CONVERSATION_TARGETS)}. Nothing was launched — call ${LAUNCH_CHILD_CONVERSATION_TOOL_NAME} again with a valid target.`,\n ),\n };\n }\n\n const task = blankToNull(action.task);\n if (!task) {\n return {\n ok: false,\n failure: failure(\n \"`task` is empty.\",\n \"`task` must be a self-contained brief: the child conversation cannot see this one, so state the goal, constraints and expected output.\",\n ),\n };\n }\n\n const repository = blankToNull(action.repository);\n const branch = blankToNull(action.branch);\n const isolation = blankToNull(\n action.isolation,\n ) as ChildConversationIsolation | null;\n\n if (target === \"local\" && (repository || branch)) {\n return {\n ok: false,\n failure: failure(\n '`repository`/`branch` were passed with target=\"local\".',\n 'A local child always runs in this conversation\\'s workspace. Drop `repository` and `branch`, or use target=\"cloud\" to run against a repository in a Cloud sandbox.',\n ),\n };\n }\n\n if (target === \"cloud\" && isolation) {\n return {\n ok: false,\n failure: failure(\n '`isolation` was passed with target=\"cloud\".',\n 'Cloud children always run in their own isolated sandbox. Drop `isolation`, or use target=\"local\" to choose between \"worktree\" and \"shared\".',\n ),\n };\n }\n\n if (branch && !repository) {\n return {\n ok: false,\n failure: failure(\n \"`branch` was passed without `repository`.\",\n 'Pass `repository` as \"owner/repo\" alongside `branch`, or drop `branch` to use the repository\\'s default branch.',\n ),\n };\n }\n\n if (isolation && !CHILD_CONVERSATION_ISOLATIONS.includes(isolation)) {\n return {\n ok: false,\n failure: failure(\n `Unknown isolation ${JSON.stringify(action.isolation)}.`,\n `\\`isolation\\` must be exactly ${quoted(CHILD_CONVERSATION_ISOLATIONS)}. Nothing was launched — call ${LAUNCH_CHILD_CONVERSATION_TOOL_NAME} again with a valid isolation.`,\n ),\n };\n }\n\n return {\n ok: true,\n params: {\n target,\n task,\n title: blankToNull(action.title),\n repository,\n branch,\n isolation: isolation ?? \"worktree\",\n },\n };\n}\n\n/**\n * Remember which tool calls have already been acted on.\n *\n * Unlike the Canvas UI tool, a launch is not idempotent: replaying its\n * ActionEvent (a socket reconnect that falls back to `resend_mode: \"all\"`, or a\n * REST/WebSocket race after a reload) would start a second — on Cloud, billable\n * — conversation. Claim the tool call before any network work so a replay that\n * arrives mid-flight is dropped too.\n */\nfunction claimToolCall(parentConversationId: string, toolCallId: string) {\n const key = `${LEDGER_STORAGE_KEY_PREFIX}${parentConversationId}`;\n let handled: string[] = [];\n try {\n const raw = window.localStorage.getItem(key);\n const parsed: unknown = raw ? JSON.parse(raw) : null;\n if (Array.isArray(parsed)) {\n handled = parsed.filter((id): id is string => typeof id === \"string\");\n }\n } catch {\n // A corrupt ledger must not block the launch; start a fresh one.\n }\n\n if (handled.includes(toolCallId)) return false;\n\n try {\n window.localStorage.setItem(key, JSON.stringify([...handled, toolCallId]));\n } catch {\n // Storage full or unavailable — proceed, accepting replay risk over never\n // launching at all.\n }\n return true;\n}\n\nfunction absoluteCanvasUrl(path: string) {\n const canvasPath = buildAgentCanvasPath(path);\n if (typeof window === \"undefined\") return canvasPath;\n return new URL(canvasPath, window.location.origin).toString();\n}\n\n/**\n * `parent_conversation_id` on the local start request landed in agent-server\n * 1.37.1. Older servers ignore unknown fields, so the child is created without\n * the link — report that rather than letting the agent assume a relationship\n * that does not exist.\n */\nfunction localParentLinkNote(): string | null {\n const version = getCachedAgentServerVersion();\n if (!version) return null;\n const comparison = compareAgentServerVersions(\n version,\n MIN_AGENT_SERVER_VERSION_FOR_PARENT_LINK,\n );\n if (comparison === null || comparison >= 0) return null;\n return `Agent server ${version} does not persist parent/child conversation links (needs ${MIN_AGENT_SERVER_VERSION_FOR_PARENT_LINK}); the child was created but is not linked to this conversation.`;\n}\n\n/**\n * Whether the parent's workspace can host a git worktree.\n *\n * A conversation started without a repository or an attached workspace runs in\n * a scratch directory that is `git init`-ed but never committed to. `git\n * worktree add` cannot branch from an unborn HEAD, and the agent-server raises\n * the resulting error straight out of its start-conversation handler as a 500,\n * so asking for a worktree there fails the whole launch. Conversation metadata\n * is only persisted when a repository or an explicit workspace was chosen (see\n * `createConversation`), so its absence pinpoints exactly those scratch\n * workspaces. Anything else is attempted and falls back on failure, because the\n * frontend cannot inspect the workspace's git state directly.\n */\nconst parentSupportsWorktree = (\n metadata: ConversationMetadata | null,\n): boolean => !!(metadata?.selected_repository || metadata?.selected_workspace);\n\nconst SHARED_FALLBACK_CONSEQUENCE =\n \"The child was launched in this conversation's directory instead, so it can see work in progress here and the two agents may conflict over the same files.\";\n\nasync function launchLocalChild(\n params: ValidatedParams,\n parentConversationId: string,\n): Promise<LaunchChildConversationResult> {\n // The agent-server rejects a parent whose workspace differs from the child's,\n // so the child requests the parent's own directory. `worktree` then carves an\n // isolated worktree out of it, which is what keeps siblings from colliding.\n const workspace =\n await AgentServerConversationService.resolveConversationWorkingDir(\n parentConversationId,\n );\n const parentMetadata = getStoredConversationMetadata(parentConversationId);\n\n const createChild = (isolation: ChildConversationIsolation) =>\n AgentServerConversationService.createConversation(\n params.task,\n undefined,\n undefined,\n parentMetadata\n ? {\n selected_repository: parentMetadata.selected_repository,\n selected_branch: parentMetadata.selected_branch,\n git_provider: parentMetadata.git_provider,\n }\n : null,\n workspace,\n isolation === \"shared\" ? \"local_repo\" : \"new_worktree\",\n parentConversationId,\n );\n\n let isolation = params.isolation;\n let isolationNote: string | null = null;\n\n if (isolation === \"worktree\" && !parentSupportsWorktree(parentMetadata)) {\n isolation = \"shared\";\n isolationNote = `This conversation's workspace is a scratch directory with no commits, which git cannot cut a worktree from. ${SHARED_FALLBACK_CONSEQUENCE}`;\n }\n\n let startTask;\n try {\n startTask = await createChild(isolation);\n } catch (worktreeError) {\n if (isolation !== \"worktree\") throw worktreeError;\n // Creating the worktree is the one part of a local launch that can fail on\n // an otherwise healthy workspace, so retry without it rather than losing\n // the launch. Anything else fails both attempts and is reported as-is.\n try {\n startTask = await createChild(\"shared\");\n } catch {\n throw worktreeError;\n }\n isolation = \"shared\";\n isolationNote = `Creating a git worktree in this conversation's workspace failed (${worktreeError instanceof Error ? worktreeError.message : String(worktreeError)}). ${SHARED_FALLBACK_CONSEQUENCE}`;\n }\n\n const conversationId = startTask.app_conversation_id ?? startTask.id;\n\n if (params.title) {\n // Local start requests carry no title — only `autotitle`. Best effort: a\n // failed rename must not fail the launch.\n await AgentServerConversationService.updateConversationTitle(\n conversationId,\n params.title,\n ).catch(() => undefined);\n }\n\n const parentLinkNote = localParentLinkNote();\n return {\n status: \"launched\",\n target: \"local\",\n conversation_id: conversationId,\n url: absoluteCanvasUrl(`/conversations/${conversationId}`),\n initial_status: startTask.status,\n title: params.title,\n workspace,\n isolation,\n ...(isolationNote ? { isolation_note: isolationNote } : {}),\n parent_link: !parentLinkNote,\n ...(parentLinkNote ? { parent_link_note: parentLinkNote } : {}),\n };\n}\n\nconst delay = (ms: number) =>\n new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n\n/**\n * Wait for the Cloud start task to expose its conversation id.\n *\n * The Cloud API provisions a sandbox asynchronously and only fills in\n * `app_conversation_id` once the task reaches READY, so without this the agent\n * would get a result with no conversation to open. Bounded: on timeout the\n * caller reports the still-provisioning task instead of hanging.\n */\nasync function waitForCloudConversationId(\n task: AppConversationStartTask,\n backend: Backend,\n): Promise<AppConversationStartTask> {\n const deadline = Date.now() + CLOUD_START_POLL_TIMEOUT_MS;\n let latest = task;\n while (!latest.app_conversation_id && latest.status !== \"ERROR\") {\n if (Date.now() >= deadline) break;\n\n await delay(CLOUD_START_POLL_INTERVAL_MS);\n\n const next = await getCloudAppConversationStartTask(\n latest.id,\n backend,\n ).catch(() => null);\n if (!next) break;\n latest = next;\n }\n return latest;\n}\n\nasync function launchCloudChild(\n params: ValidatedParams,\n parentConversationId: string,\n): Promise<LaunchChildConversationResult> {\n const backend = pickCloudBackendForLaunch();\n if (!backend) {\n return failure(\n \"No OpenHands Cloud backend is connected in Agent Canvas.\",\n 'Ask the user to connect OpenHands Cloud from the backend picker, then call this tool again — or relaunch now with target=\"local\".',\n );\n }\n\n const parentMetadata = getStoredConversationMetadata(parentConversationId);\n const startTask = await createCloudAppConversation(\n {\n initial_message: {\n role: \"user\",\n content: [{ type: \"text\", text: params.task }],\n },\n title: params.title,\n // Fall back to this conversation's repository so a bare `target: \"cloud\"`\n // call still lands the child on the code the user is working on. The\n // provider only travels with the inherited repository — it may not apply\n // to one the agent named itself.\n selected_repository:\n params.repository ?? parentMetadata?.selected_repository ?? null,\n selected_branch: params.branch ?? null,\n git_provider: params.repository\n ? null\n : (parentMetadata?.git_provider ?? null),\n // The parent runs on the local agent-server, so its id means nothing to\n // Cloud. Sending it would only hide the child from the Cloud\n // conversation list, which filters out anything with a parent.\n parent_conversation_id: null,\n },\n backend,\n );\n\n const settled = await waitForCloudConversationId(startTask, backend);\n if (settled.status === \"ERROR\") {\n return failure(\n settled.detail || \"The Cloud conversation failed to start.\",\n 'The Cloud sandbox could not be provisioned. Report this to the user; you can retry, or fall back to target=\"local\".',\n );\n }\n\n const conversationId = settled.app_conversation_id;\n return {\n status: \"launched\",\n target: \"cloud\",\n conversation_id: conversationId,\n url: conversationId\n ? `${backend.host.replace(/\\/$/, \"\")}/conversations/${conversationId}`\n : null,\n initial_status: settled.status,\n title: params.title,\n start_task_id: settled.id,\n backend: backend.name,\n // Cloud children of a local parent carry no server-side link; see above.\n parent_link: false,\n parent_link_note:\n \"This conversation runs on the local agent server, so OpenHands Cloud has no parent to link the child to.\",\n };\n}\n\n/**\n * Hand the outcome back to the agent and the user.\n *\n * Client tools are acknowledged by the agent-server before the browser does any\n * work, so a message is the only way to give the agent the child's id or tell\n * it how to fix a malformed call. `sendMessage` runs the agent, which is what\n * makes it relay the result to the user in its next turn.\n */\nasync function reportLaunchResult(\n parentConversationId: string,\n result: LaunchChildConversationResult,\n) {\n if (result.status === \"error\") {\n displayErrorToast(\n i18n.t(I18nKey.CHILD_CONVERSATION$LAUNCH_FAILED, {\n error: result.error,\n }),\n );\n } else if (result.url) {\n displaySuccessToastWithLink(\n i18n.t(\n result.target === \"cloud\"\n ? I18nKey.CHILD_CONVERSATION$LAUNCHED_CLOUD\n : I18nKey.CHILD_CONVERSATION$LAUNCHED_LOCAL,\n ),\n i18n.t(I18nKey.CHILD_CONVERSATION$OPEN),\n result.url,\n );\n }\n\n // The agent-server cancels an active `/goal` loop on any inbound message, so\n // a launch must not silently end one. The toast above still tells the user\n // what happened.\n const goalStatus =\n useGoalStore.getState().statusByConversation[parentConversationId];\n if (goalStatus?.active) return;\n\n await AgentServerConversationService.sendMessage(parentConversationId, {\n role: \"user\",\n content: [\n {\n type: \"text\",\n text: `${CHILD_CONVERSATION_RESULT_PREFIX}${JSON.stringify(result)}`,\n },\n ],\n });\n}\n\n/**\n * Execute a `launch_child_conversation` tool call.\n *\n * Never rejects: every failure is turned into corrective guidance for the\n * agent, because the agent-server has already told it the call succeeded.\n */\nexport async function handleLaunchChildConversationAction(\n action: LaunchChildConversationAction,\n parentConversationId: string,\n toolCallId: string,\n): Promise<void> {\n if (!claimToolCall(parentConversationId, toolCallId)) return;\n\n const validation = validateLaunchParams(action);\n let result: LaunchChildConversationResult;\n if (!validation.ok) {\n result = validation.failure;\n } else {\n try {\n result =\n validation.params.target === \"cloud\"\n ? await launchCloudChild(validation.params, parentConversationId)\n : await launchLocalChild(validation.params, parentConversationId);\n } catch (error) {\n result = failure(\n error instanceof Error ? error.message : String(error),\n \"The launch request failed. Report the error to the user; retry only if the cause looks transient.\",\n );\n }\n }\n\n await reportLaunchResult(parentConversationId, result).catch((error) => {\n console.warn(\n `[${LAUNCH_CHILD_CONVERSATION_TOOL_NAME}] Failed to report the launch result:`,\n error,\n );\n });\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require("../_virtual/_rolldown/runtime.cjs");var e={llm_model:`openhands/
|
|
1
|
+
require("../_virtual/_rolldown/runtime.cjs");var e={llm_model:`openhands/glm-5.2`,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:{},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/glm-5.2`},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`}};exports.DEFAULT_SETTINGS=e;
|
|
2
2
|
//# sourceMappingURL=settings.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.cjs","names":[],"sources":["../../src/services/settings.ts"],"sourcesContent":["import { Settings } from \"#/types/settings\";\n\nexport const LATEST_SETTINGS_VERSION = 5;\n\nexport const DEFAULT_SETTINGS: Settings = {\n llm_model: \"openhands/
|
|
1
|
+
{"version":3,"file":"settings.cjs","names":[],"sources":["../../src/services/settings.ts"],"sourcesContent":["import { Settings } from \"#/types/settings\";\n\nexport const LATEST_SETTINGS_VERSION = 5;\n\nexport const DEFAULT_SETTINGS: Settings = {\n llm_model: \"openhands/glm-5.2\",\n llm_base_url: \"\",\n agent: \"CodeActAgent\",\n language: \"en\",\n llm_api_key: null,\n llm_api_key_set: false,\n search_api_key_set: false,\n confirmation_mode: false,\n security_analyzer: \"llm\",\n max_iterations: null,\n remote_runtime_resource_factor: 1,\n provider_tokens_set: {},\n enable_default_condenser: true,\n condenser_max_size: 240,\n enable_sound_notifications: false,\n user_consents_to_analytics: null,\n enable_proactive_conversation_starters: false,\n enable_solvability_analysis: false,\n search_api_key: \"\",\n is_new_user: true,\n disabled_skills: [],\n mcp_config: {},\n max_budget_per_task: null,\n email: \"\",\n email_verified: true,\n git_user_name: \"openhands\",\n git_user_email: \"openhands@all-hands.dev\",\n title_llm_profile: null,\n agent_settings_schema: null,\n agent_settings: {\n schema_version: 6,\n agent_kind: \"openhands\",\n agent: \"CodeActAgent\",\n llm: {\n model: \"openhands/glm-5.2\",\n },\n condenser: {\n enabled: true,\n max_size: 240,\n },\n verification: {\n critic_enabled: false,\n enable_iterative_refinement: false,\n },\n enable_sub_agents: false,\n mcp_config: {},\n },\n conversation_settings_schema: null,\n conversation_settings: {\n schema_version: 1,\n confirmation_mode: false,\n security_analyzer: \"llm\",\n },\n};\n\n/**\n * Get the default settings\n */\nexport const getDefaultSettings = (): Settings => DEFAULT_SETTINGS;\n"],"mappings":"6CAIA,IAAa,EAA6B,CACxC,UAAW,oBACX,aAAc,GACd,MAAO,eACP,SAAU,KACV,YAAa,KACb,gBAAiB,GACjB,mBAAoB,GACpB,kBAAmB,GACnB,kBAAmB,MACnB,eAAgB,KAChB,+BAAgC,EAChC,oBAAqB,CAAC,EACtB,yBAA0B,GAC1B,mBAAoB,IACpB,2BAA4B,GAC5B,2BAA4B,KAC5B,uCAAwC,GACxC,4BAA6B,GAC7B,eAAgB,GAChB,YAAa,GACb,gBAAiB,CAAC,EAClB,WAAY,CAAC,EACb,oBAAqB,KACrB,MAAO,GACP,eAAgB,GAChB,cAAe,YACf,eAAgB,0BAChB,kBAAmB,KACnB,sBAAuB,KACvB,eAAgB,CACd,eAAgB,EAChB,WAAY,YACZ,MAAO,eACP,IAAK,CACH,MAAO,mBACT,EACA,UAAW,CACT,QAAS,GACT,SAAU,GACZ,EACA,aAAc,CACZ,eAAgB,GAChB,4BAA6B,EAC/B,EACA,kBAAmB,GACnB,WAAY,CAAC,CACf,EACA,6BAA8B,KAC9B,sBAAuB,CACrB,eAAgB,EAChB,kBAAmB,GACnB,kBAAmB,KACrB,CACF"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
//#region src/services/settings.ts
|
|
2
2
|
var e = {
|
|
3
|
-
llm_model: "openhands/
|
|
3
|
+
llm_model: "openhands/glm-5.2",
|
|
4
4
|
llm_base_url: "",
|
|
5
5
|
agent: "CodeActAgent",
|
|
6
6
|
language: "en",
|
|
@@ -21,11 +21,7 @@ var e = {
|
|
|
21
21
|
search_api_key: "",
|
|
22
22
|
is_new_user: !0,
|
|
23
23
|
disabled_skills: [],
|
|
24
|
-
mcp_config: {
|
|
25
|
-
sse_servers: [],
|
|
26
|
-
stdio_servers: [],
|
|
27
|
-
shttp_servers: []
|
|
28
|
-
},
|
|
24
|
+
mcp_config: {},
|
|
29
25
|
max_budget_per_task: null,
|
|
30
26
|
email: "",
|
|
31
27
|
email_verified: !0,
|
|
@@ -37,7 +33,7 @@ var e = {
|
|
|
37
33
|
schema_version: 6,
|
|
38
34
|
agent_kind: "openhands",
|
|
39
35
|
agent: "CodeActAgent",
|
|
40
|
-
llm: { model: "openhands/
|
|
36
|
+
llm: { model: "openhands/glm-5.2" },
|
|
41
37
|
condenser: {
|
|
42
38
|
enabled: !0,
|
|
43
39
|
max_size: 240
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings.js","names":[],"sources":["../../src/services/settings.ts"],"sourcesContent":["import { Settings } from \"#/types/settings\";\n\nexport const LATEST_SETTINGS_VERSION = 5;\n\nexport const DEFAULT_SETTINGS: Settings = {\n llm_model: \"openhands/
|
|
1
|
+
{"version":3,"file":"settings.js","names":[],"sources":["../../src/services/settings.ts"],"sourcesContent":["import { Settings } from \"#/types/settings\";\n\nexport const LATEST_SETTINGS_VERSION = 5;\n\nexport const DEFAULT_SETTINGS: Settings = {\n llm_model: \"openhands/glm-5.2\",\n llm_base_url: \"\",\n agent: \"CodeActAgent\",\n language: \"en\",\n llm_api_key: null,\n llm_api_key_set: false,\n search_api_key_set: false,\n confirmation_mode: false,\n security_analyzer: \"llm\",\n max_iterations: null,\n remote_runtime_resource_factor: 1,\n provider_tokens_set: {},\n enable_default_condenser: true,\n condenser_max_size: 240,\n enable_sound_notifications: false,\n user_consents_to_analytics: null,\n enable_proactive_conversation_starters: false,\n enable_solvability_analysis: false,\n search_api_key: \"\",\n is_new_user: true,\n disabled_skills: [],\n mcp_config: {},\n max_budget_per_task: null,\n email: \"\",\n email_verified: true,\n git_user_name: \"openhands\",\n git_user_email: \"openhands@all-hands.dev\",\n title_llm_profile: null,\n agent_settings_schema: null,\n agent_settings: {\n schema_version: 6,\n agent_kind: \"openhands\",\n agent: \"CodeActAgent\",\n llm: {\n model: \"openhands/glm-5.2\",\n },\n condenser: {\n enabled: true,\n max_size: 240,\n },\n verification: {\n critic_enabled: false,\n enable_iterative_refinement: false,\n },\n enable_sub_agents: false,\n mcp_config: {},\n },\n conversation_settings_schema: null,\n conversation_settings: {\n schema_version: 1,\n confirmation_mode: false,\n security_analyzer: \"llm\",\n },\n};\n\n/**\n * Get the default settings\n */\nexport const getDefaultSettings = (): Settings => DEFAULT_SETTINGS;\n"],"mappings":";AAIA,IAAa,IAA6B;CACxC,WAAW;CACX,cAAc;CACd,OAAO;CACP,UAAU;CACV,aAAa;CACb,iBAAiB;CACjB,oBAAoB;CACpB,mBAAmB;CACnB,mBAAmB;CACnB,gBAAgB;CAChB,gCAAgC;CAChC,qBAAqB,CAAC;CACtB,0BAA0B;CAC1B,oBAAoB;CACpB,4BAA4B;CAC5B,4BAA4B;CAC5B,wCAAwC;CACxC,6BAA6B;CAC7B,gBAAgB;CAChB,aAAa;CACb,iBAAiB,CAAC;CAClB,YAAY,CAAC;CACb,qBAAqB;CACrB,OAAO;CACP,gBAAgB;CAChB,eAAe;CACf,gBAAgB;CAChB,mBAAmB;CACnB,uBAAuB;CACvB,gBAAgB;EACd,gBAAgB;EAChB,YAAY;EACZ,OAAO;EACP,KAAK,EACH,OAAO,oBACT;EACA,WAAW;GACT,SAAS;GACT,UAAU;EACZ;EACA,cAAc;GACZ,gBAAgB;GAChB,6BAA6B;EAC/B;EACA,mBAAmB;EACnB,YAAY,CAAC;CACf;CACA,8BAA8B;CAC9B,uBAAuB;EACrB,gBAAgB;EAChB,mBAAmB;EACnB,mBAAmB;CACrB;AACF"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require("../_virtual/_rolldown/runtime.cjs");const e=require("../node_modules/zustand/esm/react.cjs"),t=require("../node_modules/zustand/esm/middleware.cjs");var n={showOlderConversations:!0,showRepoBranchMetadata:!1,showLlmProfiles:!
|
|
1
|
+
require("../_virtual/_rolldown/runtime.cjs");const e=require("../node_modules/zustand/esm/react.cjs"),t=require("../node_modules/zustand/esm/middleware.cjs");var n={showOlderConversations:!0,showRepoBranchMetadata:!1,showLlmProfiles:!1,showTagsMetadata:!1,showHoverMetadata:!0,organizeMode:`chronological`,conversationSort:`updated`,threadScope:`all`,automationFilterMode:`all`,selectedAutomationNames:[],groupFolderOrder:[]},r=e.create()(t.persist(e=>({...n,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})),setAutomationFilterMode:t=>e(()=>({automationFilterMode:t})),toggleAutomationName:t=>e(e=>({selectedAutomationNames:e.selectedAutomationNames.includes(t)?e.selectedAutomationNames.filter(e=>e!==t):[...e.selectedAutomationNames,t]})),setGroupFolderOrder:t=>e(()=>({groupFolderOrder:[...t]}))}),{name:`conversation-panel-preferences`,storage:t.createJSONStorage(()=>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,automationFilterMode:e.automationFilterMode,selectedAutomationNames:e.selectedAutomationNames,groupFolderOrder:e.groupFolderOrder})}));exports.useConversationPanelPreferencesStore=r;
|
|
2
2
|
//# sourceMappingURL=conversation-panel-preferences-store.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-panel-preferences-store.cjs","names":[],"sources":["../../src/stores/conversation-panel-preferences-store.ts"],"sourcesContent":["import { create } from \"zustand\";\nimport { persist, createJSONStorage } from \"zustand/middleware\";\nimport {\n type ConversationSortField,\n type OrganizeMode,\n type ThreadScope,\n} from \"#/components/features/conversation-panel/conversation-panel-list-helpers\";\n\n/**\n * User-toggleable display preferences for the sidebar conversation list\n * filter menu. These are intentionally persisted to localStorage (via the\n * same `zustand/persist` pattern used by `home-store` and `workspaces-store`)\n * so the menu state survives full reloads.\n *\n * To add a new preference exposed by the filter menu:\n * 1. Add a field here with a sensible default in `initialState`.\n * 2. Add matching `setX`/`toggleX` actions below.\n * 3. Read/write through the store in `conversation-panel.tsx`.\n * No additional plumbing (storage keys, sanitization, etc.) is required —\n * `persist` handles migration of unknown fields gracefully.\n */\ninterface ConversationPanelPreferencesState {\n showOlderConversations: boolean;\n showRepoBranchMetadata: boolean;\n showLlmProfiles: boolean;\n showTagsMetadata: boolean;\n showHoverMetadata: boolean;\n organizeMode: OrganizeMode;\n conversationSort: ConversationSortField;\n threadScope: ThreadScope;\n groupFolderOrder: string[];\n}\n\ninterface ConversationPanelPreferencesActions {\n setShowOlderConversations: (value: boolean) => void;\n toggleShowOlderConversations: () => void;\n setShowRepoBranchMetadata: (value: boolean) => void;\n toggleShowRepoBranchMetadata: () => void;\n setShowLlmProfiles: (value: boolean) => void;\n toggleShowLlmProfiles: () => void;\n setShowTagsMetadata: (value: boolean) => void;\n toggleShowTagsMetadata: () => void;\n setShowHoverMetadata: (value: boolean) => void;\n toggleShowHoverMetadata: () => void;\n setOrganizeMode: (value: OrganizeMode) => void;\n setConversationSort: (value: ConversationSortField) => void;\n setThreadScope: (value: ThreadScope) => void;\n setGroupFolderOrder: (order: readonly string[]) => void;\n}\n\ntype ConversationPanelPreferencesStore = ConversationPanelPreferencesState &\n ConversationPanelPreferencesActions;\n\nconst initialState: ConversationPanelPreferencesState = {\n showOlderConversations: true,\n showRepoBranchMetadata: false,\n showLlmProfiles:
|
|
1
|
+
{"version":3,"file":"conversation-panel-preferences-store.cjs","names":[],"sources":["../../src/stores/conversation-panel-preferences-store.ts"],"sourcesContent":["import { create } from \"zustand\";\nimport { persist, createJSONStorage } from \"zustand/middleware\";\nimport {\n type AutomationFilterMode,\n type ConversationSortField,\n type OrganizeMode,\n type ThreadScope,\n} from \"#/components/features/conversation-panel/conversation-panel-list-helpers\";\n\n/**\n * User-toggleable display preferences for the sidebar conversation list\n * filter menu. These are intentionally persisted to localStorage (via the\n * same `zustand/persist` pattern used by `home-store` and `workspaces-store`)\n * so the menu state survives full reloads.\n *\n * To add a new preference exposed by the filter menu:\n * 1. Add a field here with a sensible default in `initialState`.\n * 2. Add matching `setX`/`toggleX` actions below.\n * 3. Read/write through the store in `conversation-panel.tsx`.\n * No additional plumbing (storage keys, sanitization, etc.) is required —\n * `persist` handles migration of unknown fields gracefully.\n */\ninterface ConversationPanelPreferencesState {\n showOlderConversations: boolean;\n showRepoBranchMetadata: boolean;\n showLlmProfiles: boolean;\n showTagsMetadata: boolean;\n showHoverMetadata: boolean;\n organizeMode: OrganizeMode;\n conversationSort: ConversationSortField;\n threadScope: ThreadScope;\n automationFilterMode: AutomationFilterMode;\n selectedAutomationNames: string[];\n groupFolderOrder: string[];\n}\n\ninterface ConversationPanelPreferencesActions {\n setShowOlderConversations: (value: boolean) => void;\n toggleShowOlderConversations: () => void;\n setShowRepoBranchMetadata: (value: boolean) => void;\n toggleShowRepoBranchMetadata: () => void;\n setShowLlmProfiles: (value: boolean) => void;\n toggleShowLlmProfiles: () => void;\n setShowTagsMetadata: (value: boolean) => void;\n toggleShowTagsMetadata: () => void;\n setShowHoverMetadata: (value: boolean) => void;\n toggleShowHoverMetadata: () => void;\n setOrganizeMode: (value: OrganizeMode) => void;\n setConversationSort: (value: ConversationSortField) => void;\n setThreadScope: (value: ThreadScope) => void;\n setAutomationFilterMode: (value: AutomationFilterMode) => void;\n toggleAutomationName: (name: string) => void;\n setGroupFolderOrder: (order: readonly string[]) => void;\n}\n\ntype ConversationPanelPreferencesStore = ConversationPanelPreferencesState &\n ConversationPanelPreferencesActions;\n\nconst initialState: ConversationPanelPreferencesState = {\n showOlderConversations: true,\n showRepoBranchMetadata: false,\n showLlmProfiles: false,\n showTagsMetadata: false,\n showHoverMetadata: true,\n organizeMode: \"chronological\",\n conversationSort: \"updated\",\n threadScope: \"all\",\n automationFilterMode: \"all\",\n selectedAutomationNames: [],\n groupFolderOrder: [],\n};\n\nexport const useConversationPanelPreferencesStore =\n create<ConversationPanelPreferencesStore>()(\n persist(\n (set) => ({\n ...initialState,\n\n setShowOlderConversations: (value) =>\n set(() => ({ showOlderConversations: value })),\n toggleShowOlderConversations: () =>\n set((state) => ({\n showOlderConversations: !state.showOlderConversations,\n })),\n\n setShowRepoBranchMetadata: (value) =>\n set(() => ({ showRepoBranchMetadata: value })),\n toggleShowRepoBranchMetadata: () =>\n set((state) => ({\n showRepoBranchMetadata: !state.showRepoBranchMetadata,\n })),\n\n setShowLlmProfiles: (value) => set(() => ({ showLlmProfiles: value })),\n toggleShowLlmProfiles: () =>\n set((state) => ({\n showLlmProfiles: !state.showLlmProfiles,\n })),\n\n setShowTagsMetadata: (value) =>\n set(() => ({ showTagsMetadata: value })),\n toggleShowTagsMetadata: () =>\n set((state) => ({\n showTagsMetadata: !state.showTagsMetadata,\n })),\n\n setShowHoverMetadata: (value) =>\n set(() => ({ showHoverMetadata: value })),\n toggleShowHoverMetadata: () =>\n set((state) => ({\n showHoverMetadata: !state.showHoverMetadata,\n })),\n\n setOrganizeMode: (value) => set(() => ({ organizeMode: value })),\n setConversationSort: (value) =>\n set(() => ({ conversationSort: value })),\n setThreadScope: (value) => set(() => ({ threadScope: value })),\n setAutomationFilterMode: (value) =>\n set(() => ({ automationFilterMode: value })),\n toggleAutomationName: (name) =>\n set((state) => ({\n selectedAutomationNames: state.selectedAutomationNames.includes(\n name,\n )\n ? state.selectedAutomationNames.filter(\n (existing) => existing !== name,\n )\n : [...state.selectedAutomationNames, name],\n })),\n setGroupFolderOrder: (order) =>\n set(() => ({ groupFolderOrder: [...order] })),\n }),\n {\n name: \"conversation-panel-preferences\",\n storage: createJSONStorage(() => localStorage),\n // Only persist the data fields — actions are recreated on each load.\n partialize: (state): ConversationPanelPreferencesState => ({\n showOlderConversations: state.showOlderConversations,\n showRepoBranchMetadata: state.showRepoBranchMetadata,\n showLlmProfiles: state.showLlmProfiles,\n showTagsMetadata: state.showTagsMetadata,\n showHoverMetadata: state.showHoverMetadata,\n organizeMode: state.organizeMode,\n conversationSort: state.conversationSort,\n threadScope: state.threadScope,\n automationFilterMode: state.automationFilterMode,\n selectedAutomationNames: state.selectedAutomationNames,\n groupFolderOrder: state.groupFolderOrder,\n }),\n },\n ),\n );\n"],"mappings":"8JA0DA,IAAM,EAAkD,CACtD,uBAAwB,GACxB,uBAAwB,GACxB,gBAAiB,GACjB,iBAAkB,GAClB,kBAAmB,GACnB,aAAc,gBACd,iBAAkB,UAClB,YAAa,MACb,qBAAsB,MACtB,wBAAyB,CAAC,EAC1B,iBAAkB,CAAC,CACrB,EAEa,EACX,EAAA,OAA0C,EACxC,EAAA,QACG,IAAS,CACR,GAAG,EAEH,0BAA4B,GAC1B,OAAW,CAAE,uBAAwB,CAAM,EAAE,EAC/C,iCACE,EAAK,IAAW,CACd,uBAAwB,CAAC,EAAM,sBACjC,EAAE,EAEJ,0BAA4B,GAC1B,OAAW,CAAE,uBAAwB,CAAM,EAAE,EAC/C,iCACE,EAAK,IAAW,CACd,uBAAwB,CAAC,EAAM,sBACjC,EAAE,EAEJ,mBAAqB,GAAU,OAAW,CAAE,gBAAiB,CAAM,EAAE,EACrE,0BACE,EAAK,IAAW,CACd,gBAAiB,CAAC,EAAM,eAC1B,EAAE,EAEJ,oBAAsB,GACpB,OAAW,CAAE,iBAAkB,CAAM,EAAE,EACzC,2BACE,EAAK,IAAW,CACd,iBAAkB,CAAC,EAAM,gBAC3B,EAAE,EAEJ,qBAAuB,GACrB,OAAW,CAAE,kBAAmB,CAAM,EAAE,EAC1C,4BACE,EAAK,IAAW,CACd,kBAAmB,CAAC,EAAM,iBAC5B,EAAE,EAEJ,gBAAkB,GAAU,OAAW,CAAE,aAAc,CAAM,EAAE,EAC/D,oBAAsB,GACpB,OAAW,CAAE,iBAAkB,CAAM,EAAE,EACzC,eAAiB,GAAU,OAAW,CAAE,YAAa,CAAM,EAAE,EAC7D,wBAA0B,GACxB,OAAW,CAAE,qBAAsB,CAAM,EAAE,EAC7C,qBAAuB,GACrB,EAAK,IAAW,CACd,wBAAyB,EAAM,wBAAwB,SACrD,CACF,EACI,EAAM,wBAAwB,OAC3B,GAAa,IAAa,CAC7B,EACA,CAAC,GAAG,EAAM,wBAAyB,CAAI,CAC7C,EAAE,EACJ,oBAAsB,GACpB,OAAW,CAAE,iBAAkB,CAAC,GAAG,CAAK,CAAE,EAAE,CAChD,GACA,CACE,KAAM,iCACN,QAAS,EAAA,sBAAwB,YAAY,EAE7C,WAAa,IAA8C,CACzD,uBAAwB,EAAM,uBAC9B,uBAAwB,EAAM,uBAC9B,gBAAiB,EAAM,gBACvB,iBAAkB,EAAM,iBACxB,kBAAmB,EAAM,kBACzB,aAAc,EAAM,aACpB,iBAAkB,EAAM,iBACxB,YAAa,EAAM,YACnB,qBAAsB,EAAM,qBAC5B,wBAAyB,EAAM,wBAC/B,iBAAkB,EAAM,gBAC1B,EACF,CACF,CACF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type ConversationSortField, type OrganizeMode, type ThreadScope } from "#/components/features/conversation-panel/conversation-panel-list-helpers";
|
|
1
|
+
import { type AutomationFilterMode, type ConversationSortField, type OrganizeMode, type ThreadScope } from "#/components/features/conversation-panel/conversation-panel-list-helpers";
|
|
2
2
|
/**
|
|
3
3
|
* User-toggleable display preferences for the sidebar conversation list
|
|
4
4
|
* filter menu. These are intentionally persisted to localStorage (via the
|
|
@@ -21,6 +21,8 @@ interface ConversationPanelPreferencesState {
|
|
|
21
21
|
organizeMode: OrganizeMode;
|
|
22
22
|
conversationSort: ConversationSortField;
|
|
23
23
|
threadScope: ThreadScope;
|
|
24
|
+
automationFilterMode: AutomationFilterMode;
|
|
25
|
+
selectedAutomationNames: string[];
|
|
24
26
|
groupFolderOrder: string[];
|
|
25
27
|
}
|
|
26
28
|
interface ConversationPanelPreferencesActions {
|
|
@@ -37,6 +39,8 @@ interface ConversationPanelPreferencesActions {
|
|
|
37
39
|
setOrganizeMode: (value: OrganizeMode) => void;
|
|
38
40
|
setConversationSort: (value: ConversationSortField) => void;
|
|
39
41
|
setThreadScope: (value: ThreadScope) => void;
|
|
42
|
+
setAutomationFilterMode: (value: AutomationFilterMode) => void;
|
|
43
|
+
toggleAutomationName: (name: string) => void;
|
|
40
44
|
setGroupFolderOrder: (order: readonly string[]) => void;
|
|
41
45
|
}
|
|
42
46
|
type ConversationPanelPreferencesStore = ConversationPanelPreferencesState & ConversationPanelPreferencesActions;
|
|
@@ -4,12 +4,14 @@ import { createJSONStorage as t, persist as n } from "../node_modules/zustand/es
|
|
|
4
4
|
var r = {
|
|
5
5
|
showOlderConversations: !0,
|
|
6
6
|
showRepoBranchMetadata: !1,
|
|
7
|
-
showLlmProfiles: !
|
|
8
|
-
showTagsMetadata: !
|
|
7
|
+
showLlmProfiles: !1,
|
|
8
|
+
showTagsMetadata: !1,
|
|
9
9
|
showHoverMetadata: !0,
|
|
10
10
|
organizeMode: "chronological",
|
|
11
11
|
conversationSort: "updated",
|
|
12
12
|
threadScope: "all",
|
|
13
|
+
automationFilterMode: "all",
|
|
14
|
+
selectedAutomationNames: [],
|
|
13
15
|
groupFolderOrder: []
|
|
14
16
|
}, i = e()(n((e) => ({
|
|
15
17
|
...r,
|
|
@@ -26,6 +28,8 @@ var r = {
|
|
|
26
28
|
setOrganizeMode: (t) => e(() => ({ organizeMode: t })),
|
|
27
29
|
setConversationSort: (t) => e(() => ({ conversationSort: t })),
|
|
28
30
|
setThreadScope: (t) => e(() => ({ threadScope: t })),
|
|
31
|
+
setAutomationFilterMode: (t) => e(() => ({ automationFilterMode: t })),
|
|
32
|
+
toggleAutomationName: (t) => e((e) => ({ selectedAutomationNames: e.selectedAutomationNames.includes(t) ? e.selectedAutomationNames.filter((e) => e !== t) : [...e.selectedAutomationNames, t] })),
|
|
29
33
|
setGroupFolderOrder: (t) => e(() => ({ groupFolderOrder: [...t] }))
|
|
30
34
|
}), {
|
|
31
35
|
name: "conversation-panel-preferences",
|
|
@@ -39,6 +43,8 @@ var r = {
|
|
|
39
43
|
organizeMode: e.organizeMode,
|
|
40
44
|
conversationSort: e.conversationSort,
|
|
41
45
|
threadScope: e.threadScope,
|
|
46
|
+
automationFilterMode: e.automationFilterMode,
|
|
47
|
+
selectedAutomationNames: e.selectedAutomationNames,
|
|
42
48
|
groupFolderOrder: e.groupFolderOrder
|
|
43
49
|
})
|
|
44
50
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation-panel-preferences-store.js","names":[],"sources":["../../src/stores/conversation-panel-preferences-store.ts"],"sourcesContent":["import { create } from \"zustand\";\nimport { persist, createJSONStorage } from \"zustand/middleware\";\nimport {\n type ConversationSortField,\n type OrganizeMode,\n type ThreadScope,\n} from \"#/components/features/conversation-panel/conversation-panel-list-helpers\";\n\n/**\n * User-toggleable display preferences for the sidebar conversation list\n * filter menu. These are intentionally persisted to localStorage (via the\n * same `zustand/persist` pattern used by `home-store` and `workspaces-store`)\n * so the menu state survives full reloads.\n *\n * To add a new preference exposed by the filter menu:\n * 1. Add a field here with a sensible default in `initialState`.\n * 2. Add matching `setX`/`toggleX` actions below.\n * 3. Read/write through the store in `conversation-panel.tsx`.\n * No additional plumbing (storage keys, sanitization, etc.) is required —\n * `persist` handles migration of unknown fields gracefully.\n */\ninterface ConversationPanelPreferencesState {\n showOlderConversations: boolean;\n showRepoBranchMetadata: boolean;\n showLlmProfiles: boolean;\n showTagsMetadata: boolean;\n showHoverMetadata: boolean;\n organizeMode: OrganizeMode;\n conversationSort: ConversationSortField;\n threadScope: ThreadScope;\n groupFolderOrder: string[];\n}\n\ninterface ConversationPanelPreferencesActions {\n setShowOlderConversations: (value: boolean) => void;\n toggleShowOlderConversations: () => void;\n setShowRepoBranchMetadata: (value: boolean) => void;\n toggleShowRepoBranchMetadata: () => void;\n setShowLlmProfiles: (value: boolean) => void;\n toggleShowLlmProfiles: () => void;\n setShowTagsMetadata: (value: boolean) => void;\n toggleShowTagsMetadata: () => void;\n setShowHoverMetadata: (value: boolean) => void;\n toggleShowHoverMetadata: () => void;\n setOrganizeMode: (value: OrganizeMode) => void;\n setConversationSort: (value: ConversationSortField) => void;\n setThreadScope: (value: ThreadScope) => void;\n setGroupFolderOrder: (order: readonly string[]) => void;\n}\n\ntype ConversationPanelPreferencesStore = ConversationPanelPreferencesState &\n ConversationPanelPreferencesActions;\n\nconst initialState: ConversationPanelPreferencesState = {\n showOlderConversations: true,\n showRepoBranchMetadata: false,\n showLlmProfiles:
|
|
1
|
+
{"version":3,"file":"conversation-panel-preferences-store.js","names":[],"sources":["../../src/stores/conversation-panel-preferences-store.ts"],"sourcesContent":["import { create } from \"zustand\";\nimport { persist, createJSONStorage } from \"zustand/middleware\";\nimport {\n type AutomationFilterMode,\n type ConversationSortField,\n type OrganizeMode,\n type ThreadScope,\n} from \"#/components/features/conversation-panel/conversation-panel-list-helpers\";\n\n/**\n * User-toggleable display preferences for the sidebar conversation list\n * filter menu. These are intentionally persisted to localStorage (via the\n * same `zustand/persist` pattern used by `home-store` and `workspaces-store`)\n * so the menu state survives full reloads.\n *\n * To add a new preference exposed by the filter menu:\n * 1. Add a field here with a sensible default in `initialState`.\n * 2. Add matching `setX`/`toggleX` actions below.\n * 3. Read/write through the store in `conversation-panel.tsx`.\n * No additional plumbing (storage keys, sanitization, etc.) is required —\n * `persist` handles migration of unknown fields gracefully.\n */\ninterface ConversationPanelPreferencesState {\n showOlderConversations: boolean;\n showRepoBranchMetadata: boolean;\n showLlmProfiles: boolean;\n showTagsMetadata: boolean;\n showHoverMetadata: boolean;\n organizeMode: OrganizeMode;\n conversationSort: ConversationSortField;\n threadScope: ThreadScope;\n automationFilterMode: AutomationFilterMode;\n selectedAutomationNames: string[];\n groupFolderOrder: string[];\n}\n\ninterface ConversationPanelPreferencesActions {\n setShowOlderConversations: (value: boolean) => void;\n toggleShowOlderConversations: () => void;\n setShowRepoBranchMetadata: (value: boolean) => void;\n toggleShowRepoBranchMetadata: () => void;\n setShowLlmProfiles: (value: boolean) => void;\n toggleShowLlmProfiles: () => void;\n setShowTagsMetadata: (value: boolean) => void;\n toggleShowTagsMetadata: () => void;\n setShowHoverMetadata: (value: boolean) => void;\n toggleShowHoverMetadata: () => void;\n setOrganizeMode: (value: OrganizeMode) => void;\n setConversationSort: (value: ConversationSortField) => void;\n setThreadScope: (value: ThreadScope) => void;\n setAutomationFilterMode: (value: AutomationFilterMode) => void;\n toggleAutomationName: (name: string) => void;\n setGroupFolderOrder: (order: readonly string[]) => void;\n}\n\ntype ConversationPanelPreferencesStore = ConversationPanelPreferencesState &\n ConversationPanelPreferencesActions;\n\nconst initialState: ConversationPanelPreferencesState = {\n showOlderConversations: true,\n showRepoBranchMetadata: false,\n showLlmProfiles: false,\n showTagsMetadata: false,\n showHoverMetadata: true,\n organizeMode: \"chronological\",\n conversationSort: \"updated\",\n threadScope: \"all\",\n automationFilterMode: \"all\",\n selectedAutomationNames: [],\n groupFolderOrder: [],\n};\n\nexport const useConversationPanelPreferencesStore =\n create<ConversationPanelPreferencesStore>()(\n persist(\n (set) => ({\n ...initialState,\n\n setShowOlderConversations: (value) =>\n set(() => ({ showOlderConversations: value })),\n toggleShowOlderConversations: () =>\n set((state) => ({\n showOlderConversations: !state.showOlderConversations,\n })),\n\n setShowRepoBranchMetadata: (value) =>\n set(() => ({ showRepoBranchMetadata: value })),\n toggleShowRepoBranchMetadata: () =>\n set((state) => ({\n showRepoBranchMetadata: !state.showRepoBranchMetadata,\n })),\n\n setShowLlmProfiles: (value) => set(() => ({ showLlmProfiles: value })),\n toggleShowLlmProfiles: () =>\n set((state) => ({\n showLlmProfiles: !state.showLlmProfiles,\n })),\n\n setShowTagsMetadata: (value) =>\n set(() => ({ showTagsMetadata: value })),\n toggleShowTagsMetadata: () =>\n set((state) => ({\n showTagsMetadata: !state.showTagsMetadata,\n })),\n\n setShowHoverMetadata: (value) =>\n set(() => ({ showHoverMetadata: value })),\n toggleShowHoverMetadata: () =>\n set((state) => ({\n showHoverMetadata: !state.showHoverMetadata,\n })),\n\n setOrganizeMode: (value) => set(() => ({ organizeMode: value })),\n setConversationSort: (value) =>\n set(() => ({ conversationSort: value })),\n setThreadScope: (value) => set(() => ({ threadScope: value })),\n setAutomationFilterMode: (value) =>\n set(() => ({ automationFilterMode: value })),\n toggleAutomationName: (name) =>\n set((state) => ({\n selectedAutomationNames: state.selectedAutomationNames.includes(\n name,\n )\n ? state.selectedAutomationNames.filter(\n (existing) => existing !== name,\n )\n : [...state.selectedAutomationNames, name],\n })),\n setGroupFolderOrder: (order) =>\n set(() => ({ groupFolderOrder: [...order] })),\n }),\n {\n name: \"conversation-panel-preferences\",\n storage: createJSONStorage(() => localStorage),\n // Only persist the data fields — actions are recreated on each load.\n partialize: (state): ConversationPanelPreferencesState => ({\n showOlderConversations: state.showOlderConversations,\n showRepoBranchMetadata: state.showRepoBranchMetadata,\n showLlmProfiles: state.showLlmProfiles,\n showTagsMetadata: state.showTagsMetadata,\n showHoverMetadata: state.showHoverMetadata,\n organizeMode: state.organizeMode,\n conversationSort: state.conversationSort,\n threadScope: state.threadScope,\n automationFilterMode: state.automationFilterMode,\n selectedAutomationNames: state.selectedAutomationNames,\n groupFolderOrder: state.groupFolderOrder,\n }),\n },\n ),\n );\n"],"mappings":";;;AA0DA,IAAM,IAAkD;CACtD,wBAAwB;CACxB,wBAAwB;CACxB,iBAAiB;CACjB,kBAAkB;CAClB,mBAAmB;CACnB,cAAc;CACd,kBAAkB;CAClB,aAAa;CACb,sBAAsB;CACtB,yBAAyB,CAAC;CAC1B,kBAAkB,CAAC;AACrB,GAEa,IACX,EAA0C,EACxC,GACG,OAAS;CACR,GAAG;CAEH,4BAA4B,MAC1B,SAAW,EAAE,wBAAwB,EAAM,EAAE;CAC/C,oCACE,GAAK,OAAW,EACd,wBAAwB,CAAC,EAAM,uBACjC,EAAE;CAEJ,4BAA4B,MAC1B,SAAW,EAAE,wBAAwB,EAAM,EAAE;CAC/C,oCACE,GAAK,OAAW,EACd,wBAAwB,CAAC,EAAM,uBACjC,EAAE;CAEJ,qBAAqB,MAAU,SAAW,EAAE,iBAAiB,EAAM,EAAE;CACrE,6BACE,GAAK,OAAW,EACd,iBAAiB,CAAC,EAAM,gBAC1B,EAAE;CAEJ,sBAAsB,MACpB,SAAW,EAAE,kBAAkB,EAAM,EAAE;CACzC,8BACE,GAAK,OAAW,EACd,kBAAkB,CAAC,EAAM,iBAC3B,EAAE;CAEJ,uBAAuB,MACrB,SAAW,EAAE,mBAAmB,EAAM,EAAE;CAC1C,+BACE,GAAK,OAAW,EACd,mBAAmB,CAAC,EAAM,kBAC5B,EAAE;CAEJ,kBAAkB,MAAU,SAAW,EAAE,cAAc,EAAM,EAAE;CAC/D,sBAAsB,MACpB,SAAW,EAAE,kBAAkB,EAAM,EAAE;CACzC,iBAAiB,MAAU,SAAW,EAAE,aAAa,EAAM,EAAE;CAC7D,0BAA0B,MACxB,SAAW,EAAE,sBAAsB,EAAM,EAAE;CAC7C,uBAAuB,MACrB,GAAK,OAAW,EACd,yBAAyB,EAAM,wBAAwB,SACrD,CACF,IACI,EAAM,wBAAwB,QAC3B,MAAa,MAAa,CAC7B,IACA,CAAC,GAAG,EAAM,yBAAyB,CAAI,EAC7C,EAAE;CACJ,sBAAsB,MACpB,SAAW,EAAE,kBAAkB,CAAC,GAAG,CAAK,EAAE,EAAE;AAChD,IACA;CACE,MAAM;CACN,SAAS,QAAwB,YAAY;CAE7C,aAAa,OAA8C;EACzD,wBAAwB,EAAM;EAC9B,wBAAwB,EAAM;EAC9B,iBAAiB,EAAM;EACvB,kBAAkB,EAAM;EACxB,mBAAmB,EAAM;EACzB,cAAc,EAAM;EACpB,kBAAkB,EAAM;EACxB,aAAa,EAAM;EACnB,sBAAsB,EAAM;EAC5B,yBAAyB,EAAM;EAC/B,kBAAkB,EAAM;CAC1B;AACF,CACF,CACF"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { CANVAS_UI_CLIENT_ACTION_KIND } from "#/constants/canvas-ui";
|
|
2
|
+
import { LAUNCH_CHILD_CONVERSATION_ACTION_KIND } from "#/constants/child-conversation";
|
|
2
3
|
import { ActionBase } from "./base";
|
|
3
4
|
import { TaskItem } from "./common";
|
|
4
5
|
export interface MCPToolAction extends ActionBase<"MCPToolAction"> {
|
|
@@ -291,4 +292,19 @@ export interface CanvasUIAction extends ActionBase<"CanvasUIAction" | typeof CAN
|
|
|
291
292
|
path?: string | null;
|
|
292
293
|
tab?: string | null;
|
|
293
294
|
}
|
|
294
|
-
|
|
295
|
+
/**
|
|
296
|
+
* Request to launch a child conversation, emitted over the existing WebSocket
|
|
297
|
+
* and intercepted by handleLaunchChildConversationAction. The agent-server
|
|
298
|
+
* validates the parameter *names* and types against the tool schema but not
|
|
299
|
+
* `enum` values, so the fields stay loosely typed here and the dispatcher
|
|
300
|
+
* narrows them (returning corrective guidance on a mismatch).
|
|
301
|
+
*/
|
|
302
|
+
export interface LaunchChildConversationAction extends ActionBase<typeof LAUNCH_CHILD_CONVERSATION_ACTION_KIND> {
|
|
303
|
+
target: string;
|
|
304
|
+
task: string;
|
|
305
|
+
title?: string | null;
|
|
306
|
+
repository?: string | null;
|
|
307
|
+
branch?: string | null;
|
|
308
|
+
isolation?: string | null;
|
|
309
|
+
}
|
|
310
|
+
export type Action = MCPToolAction | FinishAction | ThinkAction | ExecuteBashAction | TerminalAction | FileEditorAction | StrReplaceEditorAction | TaskTrackerAction | PlanningFileEditorAction | BrowserNavigateAction | BrowserClickAction | BrowserTypeAction | BrowserGetStateAction | BrowserGetContentAction | BrowserScrollAction | BrowserGoBackAction | BrowserListTabsAction | BrowserSwitchTabAction | BrowserCloseTabAction | GlobAction | GrepAction | InvokeSkillAction | TaskAction | SwitchLLMAction | CanvasUIAction | LaunchChildConversationAction;
|