@openhands/agent-canvas 1.14.0 → 1.16.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 +15 -1
- package/README.windows.md +2 -2
- package/build/assets/acp-providers-CX3Lh9gj.js +1 -0
- package/build/assets/active-backend-context-CrHTlgvN.js +2 -0
- package/build/assets/agent-context-settings-DSZlXrLj.js +1 -0
- package/build/assets/agent-profiles-settings-Dzgb7G9z.js +1 -0
- package/build/assets/agent-server-conversation-service.api-tnqNjbpE.js +86 -0
- package/build/assets/agent-settings-DLtsqaOs.js +2 -0
- package/build/assets/agent-settings-fFvR-XC2.js +1 -0
- package/build/assets/alert-banner-HP6mX-Vr.js +1 -0
- package/build/assets/api-error-message-B-XdSk3b.js +1 -0
- package/build/assets/api-key-entry-screen-qTzrmJcr.js +1 -0
- package/build/assets/app-settings-dbnneVaV.js +1 -0
- package/build/assets/automation-detail-BmwlCUAB.js +3 -0
- package/build/assets/automation-export-D3a3of4G.js +2 -0
- package/build/assets/automation-git-sync-CprN5DcU.js +1 -0
- package/build/assets/automation-setup-route-C40kXjMY.js +1 -0
- package/build/assets/automation-templates-BRppNh99.js +1 -0
- package/build/assets/automations-list-DuNcRawl.js +1 -0
- package/build/assets/back-nav-button-Cjl_hoxq.js +1 -0
- package/build/assets/backend-form-modal-lhGwzXFI.js +1 -0
- package/build/assets/backend-synced-settings-badge-DPkz30BE.js +1 -0
- package/build/assets/badge-BU3S0VtE.js +1 -0
- package/build/assets/base-modal-D_L0oEbG.js +1 -0
- package/build/assets/bot-dMYHVfYM.js +1 -0
- package/build/assets/brand-button-BAfk4wGP.js +1 -0
- package/build/assets/browser-DSAo0tz1.js +46 -0
- package/build/assets/browser-tab-C9vy56R5.js +1 -0
- package/build/assets/canvas-extension-page-dx1gFrfW.js +1 -0
- package/build/assets/canvas-extensions-8A-XhpgP.js +1 -0
- package/build/assets/canvas-extensions-runtime-2_x5Ezmi.js +1 -0
- package/build/assets/chat-send-button-MUQqCZCS.js +1 -0
- package/build/assets/check-CS0vmpQQ.js +1 -0
- package/build/assets/chevron-down-e1QBpjVy.js +1 -0
- package/build/assets/chevron-right-ZG4R5G4Q.js +1 -0
- package/build/assets/circle-check-DzWLNsbE.js +1 -0
- package/build/assets/circle-plus-check-toggle-BO_kFZt3.js +1 -0
- package/build/assets/cloud-funnel-analytics-CztBCCPp.js +1 -0
- package/build/assets/cog-D-MPQW6G.js +1 -0
- package/build/assets/command-menu--UIlGL72.js +1 -0
- package/build/assets/commits-tab-AnZwLvh-.js +1 -0
- package/build/assets/condenser-settings-DmEOje-7.js +1 -0
- package/build/assets/confirmation-modal-Dv1ktp8K.js +1 -0
- package/build/assets/context-menu-list-item-I86vKcmM.js +1 -0
- package/build/assets/conversation-BbGrAO4Z.js +93 -0
- package/build/assets/conversation-mYT6NAoj.js +1 -0
- package/build/assets/conversation-panel-mYT6NAoj.js +1 -0
- package/build/assets/conversation-state-store-B0ImPLHO.js +1 -0
- package/build/assets/conversation-store-Ca3ghXap.js +6 -0
- package/build/assets/conversation-tab-empty-state-FIbh_lc8.js +1 -0
- package/build/assets/copy-to-clipboard-button-Ca8iSkkA.js +1 -0
- package/build/assets/device-verify-Bhn2e_Ye.js +1 -0
- package/build/assets/dropdown-classes-Bc1djN0-.js +1 -0
- package/build/assets/edit-automation-modal-DadGbJ2u.js +1 -0
- package/build/assets/empty-state-BoGVDecT.js +1 -0
- package/build/assets/entry.client-CqyPPjOq.js +2 -0
- package/build/assets/enum-filter-dropdown-Bgca129f.js +1 -0
- package/build/assets/environment-switch-overlay-BmBRT7gv.js +1 -0
- package/build/assets/error-state-Body8Ngd.js +1 -0
- package/build/assets/extension-module-card-classes-DpeaYhYo.js +1 -0
- package/build/assets/extensions-hub-CcDqq_vR.js +1 -0
- package/build/assets/extensions-navigation-Cr4yzYk4.js +1 -0
- package/build/assets/external-link-DKUlnCQV.js +1 -0
- package/build/assets/files-tab-D4o2VyE_.js +1 -0
- package/build/assets/form-control-classes-Bkh5FGrD.js +1 -0
- package/build/assets/format-model-name-CasAP3nd.js +1 -0
- package/build/assets/get-git-path-ChKDVHZp.js +1 -0
- package/build/assets/git-repo-dropdown-4ROKl2cB.js +1 -0
- package/build/assets/git-repo-dropdown-BkqzkMmM.js +1 -0
- package/build/assets/highlighted-source-view-BFRxGT_Q.js +1 -0
- package/build/assets/home-ChpSuepX.js +1 -0
- package/build/assets/home-DIsB440S.js +1 -0
- package/build/assets/home-automation-run-tooltip-BVNDWjAH.js +1 -0
- package/build/assets/home-store-CY9Ej0ux.js +1 -0
- package/build/assets/index-home-BdlrFIif.js +1 -0
- package/build/assets/info-B6RQawoW.js +1 -0
- package/build/assets/install-server-modal-Dpy89p4g.js +1 -0
- package/build/assets/kebab-menu-item-content-D8hSNGmm.js +1 -0
- package/build/assets/key-BmVyxs-2.js +1 -0
- package/build/assets/launch-IrTDEFCs.js +1 -0
- package/build/assets/list-filter-DsEK7NFC.js +1 -0
- package/build/assets/list-todo-apgLVjMw.js +1 -0
- package/build/assets/llm-not-configured-banner-CIFABh3K.js +27 -0
- package/build/assets/llm-settings-B9juXhIa.js +1 -0
- package/build/assets/llm-settings-De1d5dfr.js +1 -0
- package/build/assets/llm-subscription-service-BpJ0ouQo.js +1 -0
- package/build/assets/loader-circle-CC1au6hc.js +1 -0
- package/build/assets/loading-spinner-BY9N3pOe.js +1 -0
- package/build/assets/manage-backends-modal-BrPV3oB-.js +1 -0
- package/build/assets/manifest-80fb1c29.js +1 -0
- package/build/assets/manifest-subpage-layout-CAOYzrYp.js +1 -0
- package/build/assets/map-provider-Cu3Zgumb.js +1 -0
- package/build/assets/markdown-renderer-BzTlxI8x.js +8 -0
- package/build/assets/mcp-BTs_SXfZ.js +1 -0
- package/build/assets/mcp-marketplace-utils-AIBzzHTO.js +1 -0
- package/build/assets/mcp-page-BEBYqH_K.js +9 -0
- package/build/assets/messages-DKV9cRc2.js +41 -0
- package/build/assets/modal-body-BxZjsju9.js +1 -0
- package/build/assets/modal-classes-C8eycCwG.js +1 -0
- package/build/assets/modal-close-button-DDzdRvCs.js +1 -0
- package/build/assets/mouse-pointer-click-Co2uyaPA.js +1 -0
- package/build/assets/onboarding-DV_OXoeP.js +1 -0
- package/build/assets/onboarding-modal-rkyBYkeQ.js +1 -0
- package/build/assets/organization-service.api-DrYNkEN_.js +1 -0
- package/build/assets/parse-git-remote-url-DpDM9bK6.js +1 -0
- package/build/assets/pencil-47jAZH_V.js +1 -0
- package/build/assets/pin-By41Vl5J.js +1 -0
- package/build/assets/planner-tab-C9uZmhme.js +1 -0
- package/build/assets/plug-CG5HFcNG.js +1 -0
- package/build/assets/plugins-management-service-BMJgC3Ga.js +1 -0
- package/build/assets/plus-C7Slq-0I.js +1 -0
- package/build/assets/profiles-service.api-ChoKrL0l.js +1 -0
- package/build/assets/providers-BhMcY5nv.js +1 -0
- package/build/assets/proxy-9Fe1v5na.js +1 -0
- package/build/assets/puzzle-JM_QaRm0.js +1 -0
- package/build/assets/recommended-automations-launcher-6ABrI9Cy.js +1 -0
- package/build/assets/refresh-cw-3q3Frrii.js +1 -0
- package/build/assets/root-Dc8YmC9F.js +2 -0
- package/build/assets/root-VDaypvK4.css +1 -0
- package/build/assets/root-layout-CXkhSPYh.js +2 -0
- package/build/assets/schema-field-D-y9-LDb.js +1 -0
- package/build/assets/scroll-fade-state-Dw-i4SGq.js +1 -0
- package/build/assets/sdk-section-page-BlFiizlG.js +1 -0
- package/build/assets/secret-form-BB7the8W.js +1 -0
- package/build/assets/secrets-service-ByZVENbp.js +1 -0
- package/build/assets/secrets-settings-B_GpxKW2.js +1 -0
- package/build/assets/server-process-C9RKzd1x.js +1 -0
- package/build/assets/settings-C0EWuBtA.js +1 -0
- package/build/assets/settings-CKqk8ZnH.js +1 -0
- package/build/assets/settings-dropdown-input-BcwylHs2.js +1 -0
- package/build/assets/settings-index-5w5UW2K3.js +1 -0
- package/build/assets/settings-input-Db-1g8Ql.js +1 -0
- package/build/assets/settings-list-classes-BzeSZbF2.js +1 -0
- package/build/assets/settings-modal-DfJ3tcJQ.js +1 -0
- package/build/assets/settings-service.api-DJ1r62Zr.js +1 -0
- package/build/assets/settings-switch-CS-dJDmA.js +1 -0
- package/build/assets/settings-utils-UYpEdPuD.js +1 -0
- package/build/assets/shared-conversation-CA5ISEDy.js +1 -0
- package/build/assets/shield-check-D2aCRd16.js +1 -0
- package/build/assets/sidebar-layout-D6fS8-Gl.js +1 -0
- package/build/assets/sidebar-mobile-menu-toggle-C_fb0Jki.js +1 -0
- package/build/assets/sidebar-nav-link-DQQcMf1A.js +1 -0
- package/build/assets/sidebar-onboarding-checklist-storage-BBkeI6Bp.js +1 -0
- package/build/assets/sidebar-store-DGqHkVLw.js +1 -0
- package/build/assets/skill-card-pill-row-B27-xyig.js +1 -0
- package/build/assets/skill-enablement-DXeaImBz.js +1 -0
- package/build/assets/skill-filter-w__3UCEE.js +2 -0
- package/build/assets/skill-icon-badge-RQkq8wvl.js +1 -0
- package/build/assets/skill-scope-B42H-XOc.js +1 -0
- package/build/assets/skills-plugins-tgF8EiXC.js +1 -0
- package/build/assets/skills-settings-BgJ9PaOe.js +1 -0
- package/build/assets/styled-tooltip-C4jf5Fv9.js +1 -0
- package/build/assets/task-list-tab-C5zcaktH.js +1 -0
- package/build/assets/terminal-CNElN42a.js +3 -0
- package/build/assets/toggle-switch-ChOLXv2n.js +1 -0
- package/build/assets/trash-2-D7K26eDO.js +1 -0
- package/build/assets/trash-D-HYiVYM.js +1 -0
- package/build/assets/triangle-alert-CtdXWHUI.js +1 -0
- package/build/assets/typography-v1KN0tzi.js +1 -0
- package/build/assets/usage-tab-CVDffLPt.js +1 -0
- package/build/assets/use-acp-credential-form-XIQmpX6M.js +1 -0
- package/build/assets/use-activate-agent-profile-BLfmvDiG.js +1 -0
- package/build/assets/use-agent-profiles-Bd9Bvvp1.js +1 -0
- package/build/assets/use-automation-health-E6NZi9rb.js +1 -0
- package/build/assets/use-automations-xijQKIl9.js +1 -0
- package/build/assets/use-can-manage-org-profiles-CrJP5262.js +1 -0
- package/build/assets/use-canvas-extensions-Bi693ujJ.js +1 -0
- package/build/assets/use-cloud-current-user-id-CDfAHpPX.js +1 -0
- package/build/assets/use-config-A9QovgXO.js +1 -0
- package/build/assets/use-create-conversation-Dx3l7mFZ.js +1 -0
- package/build/assets/use-create-secret-B9cUFWRG.js +1 -0
- package/build/assets/use-get-secrets-K3jmk-LH.js +1 -0
- package/build/assets/use-has-permission-B3C8rQmR.js +1 -0
- package/build/assets/use-is-authed-nTBcM7dE.js +1 -0
- package/build/assets/use-launch-skill-in-chat-BYjYihBP.js +1 -0
- package/build/assets/use-llm-configured-BV9nZ1_j.js +1 -0
- package/build/assets/use-llm-profiles-BO-P4Oyo.js +1 -0
- package/build/assets/use-manifest-capabilities-Cw_flwEz.js +1 -0
- package/build/assets/use-onboarding-completion-D8U7k4Qb.js +1 -0
- package/build/assets/use-pinned-home-route-CckOZrmb.js +1 -0
- package/build/assets/use-plugins-marketplace-7i94Zu3Z.js +1 -0
- package/build/assets/use-save-agent-profile-BUjSsDXK.js +1 -0
- package/build/assets/use-save-settings-DYqkKv7T.js +1 -0
- package/build/assets/use-settings-DSXLbvBl.js +1 -0
- package/build/assets/use-settings-nav-items-CwRw-CmX.js +16 -0
- package/build/assets/use-tracking-D53y3TH9.js +3 -0
- package/build/assets/use-user-conversation-B9Gebw_g.js +1 -0
- package/build/assets/useInfiniteQuery-C926xzY4.js +1 -0
- package/build/assets/useMutation-B-qc391N.js +1 -0
- package/build/assets/useQueries-DlbhlH9I.js +1 -0
- package/build/assets/useQuery-BSTgq1rl.js +1 -0
- package/build/assets/utils-CN5ZfZy1.js +1 -0
- package/build/assets/vendor~browser-hbU4u2Ag.js +47 -0
- package/build/assets/vendor~commits-tab-BaO2Ce3e.js +11 -0
- package/build/assets/vendor~conversation-panel~conversation-C8Fn4XOf.js +1 -0
- package/build/assets/vendor~entry.client-CoCfUXUF.js +1 -0
- package/build/assets/vendor~entry.client-DA2izTjq.js +9 -0
- package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~czjee3a3-DqZDXfg2.js +186 -0
- package/build/assets/vendor~index-home~home~conversation-panel~conversation-hWywRBaR.js +13 -0
- package/build/assets/vendor~root-layout-C9Ju9DQg.js +1 -0
- package/build/assets/vendor~root-layout~conversation-panel~conversation-BMbMgaGu.js +1 -0
- package/build/assets/vendor~root-layout~conversation-panel~conversation~skills-settings~automations-list~shared-~bovqqk8e-BWir3rJs.js +1 -0
- package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation-j5MFqfSy.js +1 -0
- package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~mcp~automations-list~aut~ibfbmr9f-cDuKr-WD.js +1 -0
- package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation-DXqM7vqB.js +1 -0
- package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~iyia17eu-Chf7vmKB.js +1 -0
- package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~nj1hli3r-DP9wmsjo.js +48 -0
- package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~eo2nf80n-CUmIwQCN.js +5053 -0
- package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~jz4f6vo2-C7HiY4Ae.js +8459 -0
- package/build/assets/verification-settings-gw_q6vkL.js +1 -0
- package/build/assets/wrench-CUEI1krB.js +1 -0
- package/build/assets/x-DJdhbdmt.js +1 -0
- package/build/index.html +4 -4
- package/build/locales/ar/openhands.json +156 -59
- package/build/locales/ca/openhands.json +156 -59
- package/build/locales/de/openhands.json +156 -59
- package/build/locales/en/openhands.json +156 -59
- package/build/locales/es/openhands.json +156 -59
- package/build/locales/fr/openhands.json +156 -59
- package/build/locales/it/openhands.json +156 -59
- package/build/locales/ja/openhands.json +156 -59
- package/build/locales/ko-KR/openhands.json +156 -59
- package/build/locales/no/openhands.json +156 -59
- package/build/locales/pt/openhands.json +156 -59
- package/build/locales/tr/openhands.json +156 -59
- package/build/locales/uk/openhands.json +156 -59
- package/build/locales/zh-CN/openhands.json +156 -59
- package/build/locales/zh-TW/openhands.json +156 -59
- package/config/defaults.json +9 -5
- package/dist/api/agent-profiles-service/profile-field-support.d.ts +26 -0
- 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 +10 -1
- package/dist/api/agent-server-adapter.js +139 -132
- package/dist/api/agent-server-adapter.js.map +1 -1
- package/dist/api/agent-server-compatibility.cjs +1 -1
- package/dist/api/agent-server-compatibility.cjs.map +1 -1
- package/dist/api/agent-server-compatibility.d.ts +21 -0
- package/dist/api/agent-server-compatibility.js +52 -38
- package/dist/api/agent-server-compatibility.js.map +1 -1
- package/dist/api/agent-server-config.cjs +1 -1
- package/dist/api/agent-server-config.cjs.map +1 -1
- package/dist/api/agent-server-config.d.ts +26 -0
- package/dist/api/agent-server-config.js +18 -5
- package/dist/api/agent-server-config.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 +13 -2
- package/dist/api/automation-service/automation-service.api.js +99 -84
- package/dist/api/automation-service/automation-service.api.js.map +1 -1
- package/dist/api/backend-registry/url-selection.cjs +1 -1
- package/dist/api/backend-registry/url-selection.cjs.map +1 -1
- package/dist/api/backend-registry/url-selection.d.ts +2 -1
- package/dist/api/backend-registry/url-selection.js +2 -2
- package/dist/api/backend-registry/url-selection.js.map +1 -1
- package/dist/api/canvas-extensions-service.cjs +1 -0
- package/dist/api/canvas-extensions-service.d.ts +22 -0
- package/dist/api/canvas-extensions-service.js +4 -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 +6 -0
- package/dist/api/cloud/conversation-service.api.js +14 -6
- 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.d.ts +11 -0
- package/dist/api/conversation-service/agent-server-conversation-service.api.js +138 -122
- 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/git-provider-items-service.cjs +2 -0
- package/dist/api/git-provider-items-service.cjs.map +1 -0
- package/dist/api/git-provider-items-service.d.ts +25 -0
- package/dist/api/git-provider-items-service.js +127 -0
- package/dist/api/git-provider-items-service.js.map +1 -0
- package/dist/api/git-service/agent-server-git-service.api.cjs +1 -1
- package/dist/api/git-service/agent-server-git-service.api.js +8 -8
- package/dist/api/mcp-health/probe-mcp-server-health.cjs +1 -1
- package/dist/api/mcp-health/probe-mcp-server-health.js +31 -31
- package/dist/api/open-hands.types.d.ts +0 -19
- package/dist/api/profiles-service/profiles-service.api.cjs.map +1 -1
- package/dist/api/profiles-service/profiles-service.api.d.ts +16 -2
- package/dist/api/profiles-service/profiles-service.api.js.map +1 -1
- package/dist/api/provider-connections-service/provider-connections-service.api.cjs +2 -0
- package/dist/api/provider-connections-service/provider-connections-service.api.cjs.map +1 -0
- package/dist/api/provider-connections-service/provider-connections-service.api.d.ts +34 -0
- package/dist/api/provider-connections-service/provider-connections-service.api.js +50 -0
- package/dist/api/provider-connections-service/provider-connections-service.api.js.map +1 -0
- package/dist/api/runtime-service/agent-server-runtime-service.cjs +1 -1
- package/dist/api/runtime-service/agent-server-runtime-service.js +8 -8
- 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 +3 -2
- package/dist/api/settings-service/settings-service.api.js +2 -1
- package/dist/api/settings-service/settings-service.api.js.map +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/create-skill-ready-event.cjs +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/create-skill-ready-event.cjs.map +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/create-skill-ready-event.js +1 -1
- package/dist/components/conversation-events/chat/event-content-helpers/create-skill-ready-event.js.map +1 -1
- package/dist/components/conversation-events/chat/event-message-components/event-group.cjs +1 -1
- package/dist/components/conversation-events/chat/event-message-components/event-group.cjs.map +1 -1
- package/dist/components/conversation-events/chat/event-message-components/event-group.js +40 -36
- package/dist/components/conversation-events/chat/event-message-components/event-group.js.map +1 -1
- package/dist/components/conversation-events/chat/event-message.cjs +1 -1
- package/dist/components/conversation-events/chat/event-message.cjs.map +1 -1
- package/dist/components/conversation-events/chat/event-message.js +1 -1
- package/dist/components/conversation-events/chat/event-message.js.map +1 -1
- package/dist/components/conversation-events/chat/messages.cjs.map +1 -1
- package/dist/components/conversation-events/chat/messages.js.map +1 -1
- package/dist/components/features/automations/add-automation-menu.d.ts +7 -0
- package/dist/components/features/automations/add-automation-modal.cjs +2 -0
- package/dist/components/features/automations/add-automation-modal.cjs.map +1 -0
- package/dist/components/features/automations/add-automation-modal.js +42 -0
- package/dist/components/features/automations/add-automation-modal.js.map +1 -0
- package/dist/components/features/automations/automation-action-button-classes.cjs +2 -0
- package/dist/components/features/automations/automation-action-button-classes.cjs.map +1 -0
- package/dist/components/features/automations/automation-action-button-classes.d.ts +0 -2
- package/dist/components/features/automations/automation-action-button-classes.js +8 -0
- package/dist/components/features/automations/automation-action-button-classes.js.map +1 -0
- package/dist/components/features/automations/automation-card-skeleton.cjs +2 -0
- package/dist/components/features/automations/automation-card-skeleton.cjs.map +1 -0
- package/dist/components/features/automations/automation-card-skeleton.js +33 -0
- package/dist/components/features/automations/automation-card-skeleton.js.map +1 -0
- package/dist/components/features/automations/automation-card.cjs +2 -0
- package/dist/components/features/automations/automation-card.cjs.map +1 -0
- package/dist/components/features/automations/automation-card.d.ts +1 -1
- package/dist/components/features/automations/automation-card.js +170 -0
- package/dist/components/features/automations/automation-card.js.map +1 -0
- package/dist/components/features/automations/automation-group.cjs +2 -0
- package/dist/components/features/automations/automation-group.cjs.map +1 -0
- package/dist/components/features/automations/automation-group.js +54 -0
- package/dist/components/features/automations/automation-group.js.map +1 -0
- package/dist/components/features/automations/automation-list-row.cjs +2 -0
- package/dist/components/features/automations/automation-list-row.cjs.map +1 -0
- package/dist/components/features/automations/automation-list-row.js +152 -0
- package/dist/components/features/automations/automation-list-row.js.map +1 -0
- package/dist/components/features/automations/automation-run-insights.cjs +2 -0
- package/dist/components/features/automations/automation-run-insights.cjs.map +1 -0
- package/dist/components/features/automations/automation-run-insights.js +46 -0
- package/dist/components/features/automations/automation-run-insights.js.map +1 -0
- package/dist/components/features/automations/automation-view-mode.cjs +2 -0
- package/dist/components/features/automations/automation-view-mode.cjs.map +1 -0
- package/dist/components/features/automations/automation-view-mode.d.ts +5 -1
- package/dist/components/features/automations/automation-view-mode.js +6 -0
- package/dist/components/features/automations/automation-view-mode.js.map +1 -0
- package/dist/components/features/automations/backend-not-configured.cjs +2 -0
- package/dist/components/features/automations/backend-not-configured.cjs.map +1 -0
- package/dist/components/features/automations/backend-not-configured.js +34 -0
- package/dist/components/features/automations/backend-not-configured.js.map +1 -0
- package/dist/components/features/automations/build-automation-menu-items.cjs +2 -0
- package/dist/components/features/automations/build-automation-menu-items.cjs.map +1 -0
- package/dist/components/features/automations/build-automation-menu-items.js +53 -0
- package/dist/components/features/automations/build-automation-menu-items.js.map +1 -0
- package/dist/components/features/automations/build-automation-pills.cjs +2 -0
- package/dist/components/features/automations/build-automation-pills.cjs.map +1 -0
- package/dist/components/features/automations/build-automation-pills.js +71 -0
- package/dist/components/features/automations/build-automation-pills.js.map +1 -0
- package/dist/components/features/automations/create-instructions.cjs +2 -0
- package/dist/components/features/automations/create-instructions.cjs.map +1 -0
- package/dist/components/features/automations/create-instructions.js +102 -0
- package/dist/components/features/automations/create-instructions.js.map +1 -0
- package/dist/components/features/automations/dashboard/automations-dashboard-controls.d.ts +4 -3
- package/dist/components/features/automations/detail/run-phase.cjs +2 -0
- package/dist/components/features/automations/detail/run-phase.cjs.map +1 -0
- package/dist/components/features/automations/detail/run-phase.d.ts +89 -0
- package/dist/components/features/automations/detail/run-phase.js +72 -0
- package/dist/components/features/automations/detail/run-phase.js.map +1 -0
- package/dist/components/features/automations/detail/run-status-badge.cjs +2 -0
- package/dist/components/features/automations/detail/run-status-badge.cjs.map +1 -0
- package/dist/components/features/automations/detail/run-status-badge.js +102 -0
- package/dist/components/features/automations/detail/run-status-badge.js.map +1 -0
- package/dist/components/features/automations/empty-state.cjs +2 -0
- package/dist/components/features/automations/empty-state.cjs.map +1 -0
- package/dist/components/features/automations/empty-state.js +35 -0
- package/dist/components/features/automations/empty-state.js.map +1 -0
- package/dist/components/features/automations/error-state.cjs +2 -0
- package/dist/components/features/automations/error-state.cjs.map +1 -0
- package/dist/components/features/automations/error-state.js +28 -0
- package/dist/components/features/automations/error-state.js.map +1 -0
- package/dist/components/features/automations/import-automation-modal.d.ts +2 -1
- package/dist/components/features/automations/kebab-menu-item-content.cjs +2 -0
- package/dist/components/features/automations/kebab-menu-item-content.cjs.map +1 -0
- package/dist/components/features/automations/kebab-menu-item-content.js +21 -0
- package/dist/components/features/automations/kebab-menu-item-content.js.map +1 -0
- package/dist/components/features/automations/kebab-menu.cjs +2 -0
- package/dist/components/features/automations/kebab-menu.cjs.map +1 -0
- package/dist/components/features/automations/kebab-menu.d.ts +2 -1
- package/dist/components/features/automations/kebab-menu.js +76 -0
- package/dist/components/features/automations/kebab-menu.js.map +1 -0
- package/dist/components/features/automations/recommended-automations-launcher.cjs +2 -0
- package/dist/components/features/automations/recommended-automations-launcher.cjs.map +1 -0
- package/dist/components/features/automations/recommended-automations-launcher.d.ts +7 -1
- package/dist/components/features/automations/recommended-automations-launcher.js +134 -0
- package/dist/components/features/automations/recommended-automations-launcher.js.map +1 -0
- package/dist/components/features/automations/recommended-automations-rail.cjs +2 -0
- package/dist/components/features/automations/recommended-automations-rail.cjs.map +1 -0
- package/dist/components/features/automations/recommended-automations-rail.d.ts +9 -0
- package/dist/components/features/automations/recommended-automations-rail.js +127 -0
- package/dist/components/features/automations/recommended-automations-rail.js.map +1 -0
- package/dist/components/features/automations/recommended-automations-section.cjs +2 -0
- package/dist/components/features/automations/recommended-automations-section.cjs.map +1 -0
- package/dist/components/features/automations/recommended-automations-section.d.ts +2 -2
- package/dist/components/features/automations/recommended-automations-section.js +198 -0
- package/dist/components/features/automations/recommended-automations-section.js.map +1 -0
- package/dist/components/features/automations/responder-deployment-modal.cjs +2 -0
- package/dist/components/features/automations/responder-deployment-modal.cjs.map +1 -0
- package/dist/components/features/automations/responder-deployment-modal.js +75 -0
- package/dist/components/features/automations/responder-deployment-modal.js.map +1 -0
- package/dist/components/features/automations/status-badge.cjs +2 -0
- package/dist/components/features/automations/status-badge.cjs.map +1 -0
- package/dist/components/features/automations/status-badge.js +12 -0
- package/dist/components/features/automations/status-badge.js.map +1 -0
- package/dist/components/features/automations/to-latest-run-state.cjs +2 -0
- package/dist/components/features/automations/to-latest-run-state.cjs.map +1 -0
- package/dist/components/features/automations/to-latest-run-state.d.ts +6 -0
- package/dist/components/features/automations/to-latest-run-state.js +21 -0
- package/dist/components/features/automations/to-latest-run-state.js.map +1 -0
- package/dist/components/features/backends/backend-form-modal.cjs +1 -1
- package/dist/components/features/backends/backend-form-modal.cjs.map +1 -1
- package/dist/components/features/backends/backend-form-modal.js +15 -21
- package/dist/components/features/backends/backend-form-modal.js.map +1 -1
- package/dist/components/features/backends/manage-backends-modal.cjs +1 -1
- package/dist/components/features/backends/manage-backends-modal.js +5 -5
- package/dist/components/features/canvas-extensions/add-canvas-extension-modal.d.ts +6 -0
- package/dist/components/features/canvas-extensions/canvas-extension-card.d.ts +9 -0
- package/dist/components/features/canvas-extensions/canvas-extensions-runtime.cjs +2 -0
- package/dist/components/features/canvas-extensions/canvas-extensions-runtime.cjs.map +1 -0
- package/dist/components/features/canvas-extensions/canvas-extensions-runtime.d.ts +23 -0
- package/dist/components/features/canvas-extensions/canvas-extensions-runtime.js +19 -0
- package/dist/components/features/canvas-extensions/canvas-extensions-runtime.js.map +1 -0
- package/dist/components/features/chat/chat-interface.cjs +2 -2
- package/dist/components/features/chat/chat-interface.cjs.map +1 -1
- package/dist/components/features/chat/chat-interface.js +138 -133
- package/dist/components/features/chat/chat-interface.js.map +1 -1
- package/dist/components/features/chat/chat-markdown-path-code.cjs +3 -0
- package/dist/components/features/chat/chat-markdown-path-code.cjs.map +1 -0
- package/dist/components/features/chat/chat-markdown-path-code.d.ts +27 -0
- package/dist/components/features/chat/chat-markdown-path-code.js +72 -0
- package/dist/components/features/chat/chat-markdown-path-code.js.map +1 -0
- package/dist/components/features/chat/path-component.cjs +1 -1
- package/dist/components/features/chat/path-component.cjs.map +1 -1
- package/dist/components/features/chat/path-component.d.ts +8 -2
- package/dist/components/features/chat/path-component.js +33 -21
- package/dist/components/features/chat/path-component.js.map +1 -1
- package/dist/components/features/chat/tool-visualizers/file-editor/file-editor.cjs +1 -1
- package/dist/components/features/chat/tool-visualizers/file-editor/file-editor.cjs.map +1 -1
- package/dist/components/features/chat/tool-visualizers/file-editor/file-editor.js +38 -43
- package/dist/components/features/chat/tool-visualizers/file-editor/file-editor.js.map +1 -1
- package/dist/components/features/chat/tool-visualizers/primitives/file-path-chip.cjs +1 -1
- package/dist/components/features/chat/tool-visualizers/primitives/file-path-chip.cjs.map +1 -1
- package/dist/components/features/chat/tool-visualizers/primitives/file-path-chip.d.ts +8 -5
- package/dist/components/features/chat/tool-visualizers/primitives/file-path-chip.js +22 -16
- package/dist/components/features/chat/tool-visualizers/primitives/file-path-chip.js.map +1 -1
- package/dist/components/features/chat/user-message-body.cjs +1 -1
- package/dist/components/features/chat/user-message-body.cjs.map +1 -1
- package/dist/components/features/chat/user-message-body.d.ts +4 -0
- package/dist/components/features/chat/user-message-body.js +30 -24
- package/dist/components/features/chat/user-message-body.js.map +1 -1
- package/dist/components/features/command-menu/command-menu-items.d.ts +10 -4
- package/dist/components/features/conversation/conversation-git-actions-menu.cjs +2 -0
- package/dist/components/features/conversation/conversation-git-actions-menu.cjs.map +1 -0
- package/dist/components/features/conversation/conversation-git-actions-menu.d.ts +15 -0
- package/dist/components/features/conversation/conversation-git-actions-menu.js +123 -0
- package/dist/components/features/conversation/conversation-git-actions-menu.js.map +1 -0
- package/dist/components/features/conversation/conversation-git-actions-toggle.cjs +2 -0
- package/dist/components/features/conversation/conversation-git-actions-toggle.cjs.map +1 -0
- package/dist/components/features/conversation/conversation-git-actions-toggle.d.ts +10 -0
- package/dist/components/features/conversation/conversation-git-actions-toggle.js +60 -0
- package/dist/components/features/conversation/conversation-git-actions-toggle.js.map +1 -0
- package/dist/components/features/conversation/conversation-main/chat-interface-wrapper.cjs +1 -1
- package/dist/components/features/conversation/conversation-main/chat-interface-wrapper.cjs.map +1 -1
- package/dist/components/features/conversation/conversation-main/chat-interface-wrapper.js +46 -10
- package/dist/components/features/conversation/conversation-main/chat-interface-wrapper.js.map +1 -1
- package/dist/components/features/conversation/conversation-main/conversation-main.cjs +1 -1
- package/dist/components/features/conversation/conversation-main/conversation-main.cjs.map +1 -1
- package/dist/components/features/conversation/conversation-main/conversation-main.js +49 -43
- package/dist/components/features/conversation/conversation-main/conversation-main.js.map +1 -1
- package/dist/components/features/conversation/conversation-name-with-status.cjs +1 -1
- package/dist/components/features/conversation/conversation-name-with-status.cjs.map +1 -1
- package/dist/components/features/conversation/conversation-name-with-status.js +49 -40
- package/dist/components/features/conversation/conversation-name-with-status.js.map +1 -1
- package/dist/components/features/conversation/conversation-name.cjs +1 -1
- package/dist/components/features/conversation/conversation-name.js +4 -4
- package/dist/components/features/conversation/conversation-overview-automations-panel.cjs +2 -0
- package/dist/components/features/conversation/conversation-overview-automations-panel.cjs.map +1 -0
- package/dist/components/features/conversation/conversation-overview-automations-panel.d.ts +6 -0
- package/dist/components/features/conversation/conversation-overview-automations-panel.js +48 -0
- package/dist/components/features/conversation/conversation-overview-automations-panel.js.map +1 -0
- package/dist/components/features/conversation/conversation-overview-context-menu.cjs +2 -0
- package/dist/components/features/conversation/conversation-overview-context-menu.cjs.map +1 -0
- package/dist/components/features/conversation/conversation-overview-context-menu.d.ts +10 -0
- package/dist/components/features/conversation/conversation-overview-context-menu.js +221 -0
- package/dist/components/features/conversation/conversation-overview-context-menu.js.map +1 -0
- package/dist/components/features/conversation/conversation-overview-diffs-row.cjs +2 -0
- package/dist/components/features/conversation/conversation-overview-diffs-row.cjs.map +1 -0
- package/dist/components/features/conversation/conversation-overview-diffs-row.d.ts +2 -0
- package/dist/components/features/conversation/conversation-overview-diffs-row.js +88 -0
- package/dist/components/features/conversation/conversation-overview-diffs-row.js.map +1 -0
- package/dist/components/features/conversation/conversation-overview-drawer-content.cjs +2 -0
- package/dist/components/features/conversation/conversation-overview-drawer-content.cjs.map +1 -0
- package/dist/components/features/conversation/conversation-overview-drawer-content.d.ts +6 -0
- package/dist/components/features/conversation/conversation-overview-drawer-content.js +138 -0
- package/dist/components/features/conversation/conversation-overview-drawer-content.js.map +1 -0
- package/dist/components/features/conversation/conversation-overview-drawer-context.cjs +2 -0
- package/dist/components/features/conversation/conversation-overview-drawer-context.cjs.map +1 -0
- package/dist/components/features/conversation/conversation-overview-drawer-context.d.ts +17 -0
- package/dist/components/features/conversation/conversation-overview-drawer-context.js +43 -0
- package/dist/components/features/conversation/conversation-overview-drawer-context.js.map +1 -0
- package/dist/components/features/conversation/conversation-overview-drawer.cjs +2 -0
- package/dist/components/features/conversation/conversation-overview-drawer.cjs.map +1 -0
- package/dist/components/features/conversation/conversation-overview-drawer.constants.cjs +2 -0
- package/dist/components/features/conversation/conversation-overview-drawer.constants.cjs.map +1 -0
- package/dist/components/features/conversation/conversation-overview-drawer.constants.d.ts +6 -0
- package/dist/components/features/conversation/conversation-overview-drawer.constants.js +6 -0
- package/dist/components/features/conversation/conversation-overview-drawer.constants.js.map +1 -0
- package/dist/components/features/conversation/conversation-overview-drawer.d.ts +7 -0
- package/dist/components/features/conversation/conversation-overview-drawer.js +45 -0
- package/dist/components/features/conversation/conversation-overview-drawer.js.map +1 -0
- package/dist/components/features/conversation/conversation-overview-drawer.types.cjs +2 -0
- package/dist/components/features/conversation/conversation-overview-drawer.types.cjs.map +1 -0
- package/dist/components/features/conversation/conversation-overview-drawer.types.d.ts +12 -0
- package/dist/components/features/conversation/conversation-overview-drawer.types.js +13 -0
- package/dist/components/features/conversation/conversation-overview-drawer.types.js.map +1 -0
- package/dist/components/features/conversation/conversation-overview-git-items-panel.cjs +2 -0
- package/dist/components/features/conversation/conversation-overview-git-items-panel.cjs.map +1 -0
- package/dist/components/features/conversation/conversation-overview-git-items-panel.d.ts +7 -0
- package/dist/components/features/conversation/conversation-overview-git-items-panel.js +81 -0
- package/dist/components/features/conversation/conversation-overview-git-items-panel.js.map +1 -0
- package/dist/components/features/conversation/conversation-overview-git-section.cjs +2 -0
- package/dist/components/features/conversation/conversation-overview-git-section.cjs.map +1 -0
- package/dist/components/features/conversation/conversation-overview-git-section.d.ts +6 -0
- package/dist/components/features/conversation/conversation-overview-git-section.js +143 -0
- package/dist/components/features/conversation/conversation-overview-git-section.js.map +1 -0
- package/dist/components/features/conversation/conversation-overview-mcp-panel.cjs +2 -0
- package/dist/components/features/conversation/conversation-overview-mcp-panel.cjs.map +1 -0
- package/dist/components/features/conversation/conversation-overview-mcp-panel.d.ts +6 -0
- package/dist/components/features/conversation/conversation-overview-mcp-panel.js +108 -0
- package/dist/components/features/conversation/conversation-overview-mcp-panel.js.map +1 -0
- package/dist/components/features/conversation/conversation-overview-panel.cjs +2 -0
- package/dist/components/features/conversation/conversation-overview-panel.cjs.map +1 -0
- package/dist/components/features/conversation/conversation-overview-panel.constants.cjs +2 -0
- package/dist/components/features/conversation/conversation-overview-panel.constants.cjs.map +1 -0
- package/dist/components/features/conversation/conversation-overview-panel.constants.d.ts +24 -0
- package/dist/components/features/conversation/conversation-overview-panel.constants.js +12 -0
- package/dist/components/features/conversation/conversation-overview-panel.constants.js.map +1 -0
- package/dist/components/features/conversation/conversation-overview-panel.d.ts +2 -0
- package/dist/components/features/conversation/conversation-overview-panel.js +102 -0
- package/dist/components/features/conversation/conversation-overview-panel.js.map +1 -0
- package/dist/components/features/conversation/conversation-overview-project-scope-toggle.cjs +2 -0
- package/dist/components/features/conversation/conversation-overview-project-scope-toggle.cjs.map +1 -0
- package/dist/components/features/conversation/conversation-overview-project-scope-toggle.d.ts +8 -0
- package/dist/components/features/conversation/conversation-overview-project-scope-toggle.js +29 -0
- package/dist/components/features/conversation/conversation-overview-project-scope-toggle.js.map +1 -0
- package/dist/components/features/conversation/conversation-overview-secrets-panel.cjs +2 -0
- package/dist/components/features/conversation/conversation-overview-secrets-panel.cjs.map +1 -0
- package/dist/components/features/conversation/conversation-overview-secrets-panel.d.ts +6 -0
- package/dist/components/features/conversation/conversation-overview-secrets-panel.js +89 -0
- package/dist/components/features/conversation/conversation-overview-secrets-panel.js.map +1 -0
- package/dist/components/features/conversation/conversation-overview-sections.cjs +2 -0
- package/dist/components/features/conversation/conversation-overview-sections.cjs.map +1 -0
- package/dist/components/features/conversation/conversation-overview-sections.d.ts +43 -0
- package/dist/components/features/conversation/conversation-overview-sections.js +27 -0
- package/dist/components/features/conversation/conversation-overview-sections.js.map +1 -0
- package/dist/components/features/conversation/conversation-overview-skills-panel.cjs +2 -0
- package/dist/components/features/conversation/conversation-overview-skills-panel.cjs.map +1 -0
- package/dist/components/features/conversation/conversation-overview-skills-panel.d.ts +6 -0
- package/dist/components/features/conversation/conversation-overview-skills-panel.js +120 -0
- package/dist/components/features/conversation/conversation-overview-skills-panel.js.map +1 -0
- package/dist/components/features/conversation/conversation-overview-toggle.cjs +2 -0
- package/dist/components/features/conversation/conversation-overview-toggle.cjs.map +1 -0
- package/dist/components/features/conversation/conversation-overview-toggle.d.ts +11 -0
- package/dist/components/features/conversation/conversation-overview-toggle.js +99 -0
- package/dist/components/features/conversation/conversation-overview-toggle.js.map +1 -0
- package/dist/components/features/conversation/conversation-secondary-drawer.classes.cjs +2 -0
- package/dist/components/features/conversation/conversation-secondary-drawer.classes.cjs.map +1 -0
- package/dist/components/features/conversation/conversation-secondary-drawer.classes.d.ts +4 -0
- package/dist/components/features/conversation/conversation-secondary-drawer.classes.js +7 -0
- package/dist/components/features/conversation/conversation-secondary-drawer.classes.js.map +1 -0
- package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/conversation-tab-content.cjs +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/conversation-tab-content.cjs.map +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/conversation-tab-content.js +10 -9
- package/dist/components/features/conversation/conversation-tabs/conversation-tab-content/conversation-tab-content.js.map +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.cjs +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.cjs.map +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.js +68 -62
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.js.map +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs.cjs +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs.cjs.map +1 -1
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs.js +89 -79
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs.js.map +1 -1
- package/dist/components/features/conversation/conversation-tabs/drawer-vscode-link.cjs +1 -1
- package/dist/components/features/conversation/conversation-tabs/drawer-vscode-link.cjs.map +1 -1
- package/dist/components/features/conversation/conversation-tabs/drawer-vscode-link.d.ts +1 -1
- package/dist/components/features/conversation/conversation-tabs/drawer-vscode-link.js +3 -3
- package/dist/components/features/conversation/conversation-tabs/drawer-vscode-link.js.map +1 -1
- package/dist/components/features/conversation/right-panel-toggle.cjs +1 -1
- package/dist/components/features/conversation/right-panel-toggle.cjs.map +1 -1
- package/dist/components/features/conversation/right-panel-toggle.d.ts +3 -2
- package/dist/components/features/conversation/right-panel-toggle.js +34 -33
- package/dist/components/features/conversation/right-panel-toggle.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 +2 -1
- package/dist/components/features/conversation-panel/conversation-panel-list-helpers.js +14 -7
- package/dist/components/features/conversation-panel/conversation-panel-list-helpers.js.map +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.js +252 -225
- package/dist/components/features/conversation-panel/conversation-panel.js.map +1 -1
- package/dist/components/features/conversation-panel/local-new-conversation-menu.cjs +1 -1
- package/dist/components/features/conversation-panel/local-new-conversation-menu.cjs.map +1 -1
- package/dist/components/features/conversation-panel/local-new-conversation-menu.js +4 -4
- package/dist/components/features/conversation-panel/local-new-conversation-menu.js.map +1 -1
- package/dist/components/features/conversation-panel/skills-modal.cjs +1 -1
- package/dist/components/features/conversation-panel/skills-modal.cjs.map +1 -1
- package/dist/components/features/conversation-panel/skills-modal.js +29 -28
- package/dist/components/features/conversation-panel/skills-modal.js.map +1 -1
- package/dist/components/features/diff-viewer/accordion-panel.cjs +2 -0
- package/dist/components/features/diff-viewer/accordion-panel.cjs.map +1 -0
- package/dist/components/features/diff-viewer/accordion-panel.d.ts +13 -0
- package/dist/components/features/diff-viewer/accordion-panel.js +41 -0
- package/dist/components/features/diff-viewer/accordion-panel.js.map +1 -0
- package/dist/components/features/diff-viewer/commit-list.cjs +1 -1
- package/dist/components/features/diff-viewer/commit-list.cjs.map +1 -1
- package/dist/components/features/diff-viewer/commit-list.d.ts +5 -1
- package/dist/components/features/diff-viewer/commit-list.js +30 -16
- package/dist/components/features/diff-viewer/commit-list.js.map +1 -1
- package/dist/components/features/diff-viewer/commit-row.cjs +1 -1
- package/dist/components/features/diff-viewer/commit-row.cjs.map +1 -1
- package/dist/components/features/diff-viewer/commit-row.d.ts +1 -2
- package/dist/components/features/diff-viewer/commit-row.js +38 -34
- package/dist/components/features/diff-viewer/commit-row.js.map +1 -1
- package/dist/components/features/diff-viewer/diff-change-list.cjs +2 -0
- package/dist/components/features/diff-viewer/diff-change-list.cjs.map +1 -0
- package/dist/components/features/diff-viewer/diff-change-list.d.ts +18 -0
- package/dist/components/features/diff-viewer/diff-change-list.js +22 -0
- package/dist/components/features/diff-viewer/diff-change-list.js.map +1 -0
- package/dist/components/features/diff-viewer/editor-container.cjs +1 -1
- package/dist/components/features/diff-viewer/editor-container.cjs.map +1 -1
- package/dist/components/features/diff-viewer/editor-container.d.ts +2 -1
- package/dist/components/features/diff-viewer/editor-container.js +8 -7
- package/dist/components/features/diff-viewer/editor-container.js.map +1 -1
- package/dist/components/features/diff-viewer/file-diff-viewer.cjs +1 -1
- package/dist/components/features/diff-viewer/file-diff-viewer.cjs.map +1 -1
- package/dist/components/features/diff-viewer/file-diff-viewer.d.ts +10 -1
- package/dist/components/features/diff-viewer/file-diff-viewer.js +138 -112
- package/dist/components/features/diff-viewer/file-diff-viewer.js.map +1 -1
- package/dist/components/features/diff-viewer/uncommitted-changes-row.cjs +2 -0
- package/dist/components/features/diff-viewer/uncommitted-changes-row.cjs.map +1 -0
- package/dist/components/features/diff-viewer/uncommitted-changes-row.d.ts +12 -0
- package/dist/components/features/diff-viewer/uncommitted-changes-row.js +51 -0
- package/dist/components/features/diff-viewer/uncommitted-changes-row.js.map +1 -0
- package/dist/components/features/files-tab/file-content-viewer.cjs +1 -1
- package/dist/components/features/files-tab/file-content-viewer.cjs.map +1 -1
- package/dist/components/features/files-tab/file-content-viewer.js +5 -6
- package/dist/components/features/files-tab/file-content-viewer.js.map +1 -1
- package/dist/components/features/files-tab/file-quick-row.cjs +1 -1
- package/dist/components/features/files-tab/file-quick-row.cjs.map +1 -1
- package/dist/components/features/files-tab/file-quick-row.d.ts +9 -7
- package/dist/components/features/files-tab/file-quick-row.js +63 -34
- package/dist/components/features/files-tab/file-quick-row.js.map +1 -1
- package/dist/components/features/files-tab/files-tab-tree.constants.cjs +2 -0
- package/dist/components/features/files-tab/files-tab-tree.constants.cjs.map +1 -0
- package/dist/components/features/files-tab/files-tab-tree.constants.d.ts +7 -0
- package/dist/components/features/files-tab/files-tab-tree.constants.js +6 -0
- package/dist/components/features/files-tab/files-tab-tree.constants.js.map +1 -0
- package/dist/components/features/files-tab/segmented-toggle.cjs +1 -1
- package/dist/components/features/files-tab/segmented-toggle.cjs.map +1 -1
- package/dist/components/features/files-tab/segmented-toggle.d.ts +5 -3
- package/dist/components/features/files-tab/segmented-toggle.js +10 -13
- package/dist/components/features/files-tab/segmented-toggle.js.map +1 -1
- package/dist/components/features/files-tab/tree-node.cjs +1 -1
- package/dist/components/features/files-tab/tree-node.cjs.map +1 -1
- package/dist/components/features/files-tab/tree-node.js +34 -32
- package/dist/components/features/files-tab/tree-node.js.map +1 -1
- package/dist/components/features/files-tab/workspace-path.cjs +2 -0
- package/dist/components/features/files-tab/workspace-path.cjs.map +1 -0
- package/dist/components/features/files-tab/workspace-path.d.ts +6 -0
- package/dist/components/features/files-tab/workspace-path.js +41 -0
- package/dist/components/features/files-tab/workspace-path.js.map +1 -0
- package/dist/components/features/home/featured-automations/automation-health-indicator.cjs +2 -0
- package/dist/components/features/home/featured-automations/automation-health-indicator.cjs.map +1 -0
- package/dist/components/features/home/featured-automations/automation-health-indicator.js +22 -0
- package/dist/components/features/home/featured-automations/automation-health-indicator.js.map +1 -0
- package/dist/components/features/home/featured-automations/automation-run-activity-metrics.cjs +2 -0
- package/dist/components/features/home/featured-automations/automation-run-activity-metrics.cjs.map +1 -0
- package/dist/components/features/home/featured-automations/automation-run-activity-metrics.js +45 -0
- package/dist/components/features/home/featured-automations/automation-run-activity-metrics.js.map +1 -0
- package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.cjs +2 -0
- package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.cjs.map +1 -0
- package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.js +108 -0
- package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.js.map +1 -0
- package/dist/components/features/home/featured-automations/automation-run-health.cjs +2 -0
- package/dist/components/features/home/featured-automations/automation-run-health.cjs.map +1 -0
- package/dist/components/features/home/featured-automations/automation-run-health.js +75 -0
- package/dist/components/features/home/featured-automations/automation-run-health.js.map +1 -0
- package/dist/components/features/home/featured-automations/home-automation-run-tooltip.cjs +2 -0
- package/dist/components/features/home/featured-automations/home-automation-run-tooltip.cjs.map +1 -0
- package/dist/components/features/home/featured-automations/home-automation-run-tooltip.js +96 -0
- package/dist/components/features/home/featured-automations/home-automation-run-tooltip.js.map +1 -0
- package/dist/components/features/home/featured-automations/pinned-automation-card.d.ts +3 -3
- package/dist/components/features/home/git-repo-dropdown/use-url-search.cjs +1 -1
- package/dist/components/features/home/git-repo-dropdown/use-url-search.cjs.map +1 -1
- package/dist/components/features/home/git-repo-dropdown/use-url-search.js +1 -1
- package/dist/components/features/home/git-repo-dropdown/use-url-search.js.map +1 -1
- package/dist/components/features/home/workspace-dropdown/folder-browser-modal.cjs +1 -1
- package/dist/components/features/home/workspace-dropdown/folder-browser-modal.js +6 -6
- package/dist/components/features/home/workspace-dropdown/manage-workspaces-modal.cjs +1 -1
- package/dist/components/features/home/workspace-dropdown/manage-workspaces-modal.js +6 -6
- package/dist/components/features/manifest/manifest-form-field.d.ts +4 -3
- package/dist/components/features/manifest/manifest-icons.cjs +2 -0
- package/dist/components/features/manifest/manifest-icons.cjs.map +1 -0
- package/dist/components/features/manifest/manifest-icons.d.ts +1 -0
- package/dist/components/features/manifest/manifest-icons.js +21 -0
- package/dist/components/features/manifest/manifest-icons.js.map +1 -0
- package/dist/components/features/manifest/manifest-repository-list.d.ts +25 -0
- package/dist/components/features/markdown/markdown-table-scroll.cjs +1 -1
- package/dist/components/features/markdown/markdown-table-scroll.cjs.map +1 -1
- package/dist/components/features/markdown/markdown-table-scroll.d.ts +2 -6
- package/dist/components/features/markdown/markdown-table-scroll.js +15 -21
- package/dist/components/features/markdown/markdown-table-scroll.js.map +1 -1
- package/dist/components/features/mcp-logo-badge.cjs +1 -1
- package/dist/components/features/mcp-logo-badge.cjs.map +1 -1
- package/dist/components/features/mcp-logo-badge.d.ts +1 -1
- package/dist/components/features/mcp-logo-badge.js +1 -0
- package/dist/components/features/mcp-logo-badge.js.map +1 -1
- package/dist/components/features/mcp-page/custom-server-editor.cjs +1 -1
- package/dist/components/features/mcp-page/custom-server-editor.js +16 -16
- package/dist/components/features/mcp-page/index.cjs +1 -1
- package/dist/components/features/mcp-page/index.js +2 -2
- 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.js +25 -25
- package/dist/components/features/mcp-page/install-server-modal.js.map +1 -1
- package/dist/components/features/mcp-page/installed-server-card.cjs +1 -1
- package/dist/components/features/mcp-page/installed-server-card.js +5 -5
- package/dist/components/features/mcp-page/marketplace-card.cjs +1 -1
- package/dist/components/features/mcp-page/marketplace-card.js +4 -4
- package/dist/components/features/mcp-page/marketplace-section.cjs +1 -1
- package/dist/components/features/mcp-page/marketplace-section.js +3 -3
- package/dist/components/features/mcp-page/mcp-logo-stack-badge.cjs +2 -0
- package/dist/components/features/mcp-page/mcp-logo-stack-badge.cjs.map +1 -0
- package/dist/components/features/mcp-page/mcp-logo-stack-badge.js +60 -0
- package/dist/components/features/mcp-page/mcp-logo-stack-badge.js.map +1 -0
- package/dist/components/features/mcp-page/mcp-server-health.cjs +1 -1
- package/dist/components/features/mcp-page/mcp-server-health.js +18 -18
- package/dist/components/features/onboarding/onboarding-host.d.ts +3 -4
- package/dist/components/features/onboarding/steps/setup-llm-step.d.ts +5 -9
- package/dist/components/features/onboarding/use-onboarding-completion.cjs +2 -0
- package/dist/components/features/onboarding/use-onboarding-completion.cjs.map +1 -0
- package/dist/components/features/onboarding/use-onboarding-completion.js +32 -0
- package/dist/components/features/onboarding/use-onboarding-completion.js.map +1 -0
- package/dist/components/features/settings/acp-auth-status-banner.d.ts +23 -6
- package/dist/components/features/settings/app-settings/getting-started-checklist-switch.cjs +2 -0
- package/dist/components/features/settings/app-settings/getting-started-checklist-switch.cjs.map +1 -0
- package/dist/components/features/settings/app-settings/getting-started-checklist-switch.d.ts +1 -0
- package/dist/components/features/settings/app-settings/getting-started-checklist-switch.js +22 -0
- package/dist/components/features/settings/app-settings/getting-started-checklist-switch.js.map +1 -0
- package/dist/components/features/settings/brand-button.cjs +1 -1
- package/dist/components/features/settings/brand-button.cjs.map +1 -1
- package/dist/components/features/settings/brand-button.d.ts +2 -0
- package/dist/components/features/settings/brand-button.js +4 -2
- package/dist/components/features/settings/brand-button.js.map +1 -1
- package/dist/components/features/settings/llm-profiles/delete-provider-connection-modal.cjs +1 -0
- package/dist/components/features/settings/llm-profiles/delete-provider-connection-modal.d.ts +7 -0
- package/dist/components/features/settings/llm-profiles/delete-provider-connection-modal.js +7 -0
- package/dist/components/features/settings/llm-profiles/llm-profiles-manager.cjs +1 -1
- package/dist/components/features/settings/llm-profiles/llm-profiles-manager.js +3 -0
- package/dist/components/features/settings/llm-profiles/llm-settings-local-view.cjs +1 -1
- package/dist/components/features/settings/llm-profiles/llm-settings-local-view.js +2 -0
- package/dist/components/features/settings/llm-profiles/profiles-body.d.ts +20 -1
- package/dist/components/features/settings/llm-profiles/provider-connection-modal.cjs +1 -0
- package/dist/components/features/settings/llm-profiles/provider-connection-modal.d.ts +19 -0
- package/dist/components/features/settings/llm-profiles/provider-connection-modal.js +13 -0
- package/dist/components/features/settings/llm-profiles/provider-connection-row.cjs +1 -0
- package/dist/components/features/settings/llm-profiles/provider-connection-row.d.ts +10 -0
- package/dist/components/features/settings/llm-profiles/provider-connection-row.js +6 -0
- package/dist/components/features/settings/llm-profiles/provider-connections-manager.cjs +1 -0
- package/dist/components/features/settings/llm-profiles/provider-connections-manager.d.ts +15 -0
- package/dist/components/features/settings/llm-profiles/provider-connections-manager.js +8 -0
- package/dist/components/features/settings/sdk-settings/field-help.cjs +1 -1
- package/dist/components/features/settings/sdk-settings/field-help.cjs.map +1 -1
- package/dist/components/features/settings/sdk-settings/field-help.d.ts +1 -1
- package/dist/components/features/settings/sdk-settings/field-help.js +1 -1
- package/dist/components/features/settings/sdk-settings/field-help.js.map +1 -1
- package/dist/components/features/settings/sdk-settings/schema-field.cjs +1 -1
- package/dist/components/features/settings/sdk-settings/schema-field.js +6 -6
- package/dist/components/features/settings/sdk-settings/sdk-section-page.cjs +1 -1
- package/dist/components/features/settings/sdk-settings/sdk-section-page.js +9 -9
- package/dist/components/features/settings/secrets-settings/secret-form.cjs +1 -1
- package/dist/components/features/settings/secrets-settings/secret-form.js +7 -7
- package/dist/components/features/settings/settings-input.cjs +1 -1
- package/dist/components/features/settings/settings-input.cjs.map +1 -1
- package/dist/components/features/settings/settings-input.d.ts +6 -0
- package/dist/components/features/settings/settings-input.js +14 -13
- package/dist/components/features/settings/settings-input.js.map +1 -1
- package/dist/components/features/sidebar/sidebar-nav-link.cjs +1 -1
- package/dist/components/features/sidebar/sidebar-nav-link.cjs.map +1 -1
- package/dist/components/features/sidebar/sidebar-nav-link.d.ts +10 -1
- package/dist/components/features/sidebar/sidebar-nav-link.js +54 -36
- package/dist/components/features/sidebar/sidebar-nav-link.js.map +1 -1
- package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-icon.cjs +2 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-icon.cjs.map +1 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-icon.d.ts +7 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-icon.js +102 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-icon.js.map +1 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-preview.cjs +2 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-preview.cjs.map +1 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-preview.d.ts +8 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-preview.js +66 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist-item-preview.js.map +1 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist-llm-complete.cjs +2 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist-llm-complete.cjs.map +1 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist-llm-complete.d.ts +3 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist-llm-complete.js +15 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist-llm-complete.js.map +1 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist-storage.cjs +2 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist-storage.cjs.map +1 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist-storage.d.ts +10 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist-storage.js +39 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist-storage.js.map +1 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist.cjs +2 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist.cjs.map +1 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist.constants.cjs +2 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist.constants.cjs.map +1 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist.constants.d.ts +26 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist.constants.js +78 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist.constants.js.map +1 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist.d.ts +5 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist.js +127 -0
- package/dist/components/features/sidebar/sidebar-onboarding-checklist.js.map +1 -0
- 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.js +137 -110
- package/dist/components/features/sidebar/sidebar-rail-body.js.map +1 -1
- package/dist/components/features/sidebar/sidebar.cjs +1 -1
- package/dist/components/features/sidebar/sidebar.cjs.map +1 -1
- package/dist/components/features/sidebar/sidebar.js +1 -1
- package/dist/components/features/sidebar/sidebar.js.map +1 -1
- package/dist/components/features/sidebar/use-sidebar-onboarding-checklist-dismissed.cjs +2 -0
- package/dist/components/features/sidebar/use-sidebar-onboarding-checklist-dismissed.cjs.map +1 -0
- package/dist/components/features/sidebar/use-sidebar-onboarding-checklist-dismissed.d.ts +1 -0
- package/dist/components/features/sidebar/use-sidebar-onboarding-checklist-dismissed.js +10 -0
- package/dist/components/features/sidebar/use-sidebar-onboarding-checklist-dismissed.js.map +1 -0
- package/dist/components/features/sidebar/use-sidebar-onboarding-checklist.cjs +2 -0
- package/dist/components/features/sidebar/use-sidebar-onboarding-checklist.cjs.map +1 -0
- package/dist/components/features/sidebar/use-sidebar-onboarding-checklist.d.ts +15 -0
- package/dist/components/features/sidebar/use-sidebar-onboarding-checklist.js +75 -0
- package/dist/components/features/sidebar/use-sidebar-onboarding-checklist.js.map +1 -0
- package/dist/components/features/skills/add-skill-modal.cjs +2 -0
- package/dist/components/features/skills/add-skill-modal.cjs.map +1 -0
- package/dist/components/features/skills/add-skill-modal.js +164 -0
- package/dist/components/features/skills/add-skill-modal.js.map +1 -0
- package/dist/components/features/skills/build-skill-pills.cjs +2 -0
- package/dist/components/features/skills/build-skill-pills.cjs.map +1 -0
- package/dist/components/features/skills/build-skill-pills.js +96 -0
- package/dist/components/features/skills/build-skill-pills.js.map +1 -0
- 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.js +54 -43
- package/dist/components/features/skills/extensions-navigation.js.map +1 -1
- package/dist/components/features/skills/get-skill-card-description.cjs +2 -0
- package/dist/components/features/skills/get-skill-card-description.cjs.map +1 -0
- package/dist/components/features/skills/get-skill-card-description.js +34 -0
- package/dist/components/features/skills/get-skill-card-description.js.map +1 -0
- package/dist/components/features/skills/get-skill-chat-launch-message.cjs +2 -0
- package/dist/components/features/skills/get-skill-chat-launch-message.cjs.map +1 -0
- package/dist/components/features/skills/get-skill-chat-launch-message.js +9 -0
- package/dist/components/features/skills/get-skill-chat-launch-message.js.map +1 -0
- package/dist/components/features/skills/is-copyable-skill-source.cjs +2 -0
- package/dist/components/features/skills/is-copyable-skill-source.cjs.map +1 -0
- package/dist/components/features/skills/is-copyable-skill-source.js +9 -0
- package/dist/components/features/skills/is-copyable-skill-source.js.map +1 -0
- package/dist/components/features/skills/skill-card-pill-row.cjs +2 -0
- package/dist/components/features/skills/skill-card-pill-row.cjs.map +1 -0
- package/dist/components/features/skills/skill-card-pill-row.d.ts +1 -1
- package/dist/components/features/skills/skill-card-pill-row.js +137 -0
- package/dist/components/features/skills/skill-card-pill-row.js.map +1 -0
- package/dist/components/features/skills/skill-card.cjs +2 -0
- package/dist/components/features/skills/skill-card.cjs.map +1 -0
- package/dist/components/features/skills/skill-card.js +93 -0
- package/dist/components/features/skills/skill-card.js.map +1 -0
- package/dist/components/features/skills/skill-detail-modal.cjs +3 -0
- package/dist/components/features/skills/skill-detail-modal.cjs.map +1 -0
- package/dist/components/features/skills/skill-detail-modal.js +150 -0
- package/dist/components/features/skills/skill-detail-modal.js.map +1 -0
- package/dist/components/features/skills/skill-facet-rail.cjs +2 -0
- package/dist/components/features/skills/skill-facet-rail.cjs.map +1 -0
- package/dist/components/features/skills/skill-facet-rail.js +42 -0
- package/dist/components/features/skills/skill-facet-rail.js.map +1 -0
- package/dist/components/features/skills/skill-facet-row.cjs +2 -0
- package/dist/components/features/skills/skill-facet-row.cjs.map +1 -0
- package/dist/components/features/skills/skill-facet-row.js +44 -0
- package/dist/components/features/skills/skill-facet-row.js.map +1 -0
- package/dist/components/features/skills/skill-filter.cjs +2 -0
- package/dist/components/features/skills/skill-filter.cjs.map +1 -0
- package/dist/components/features/skills/skill-filter.d.ts +8 -3
- package/dist/components/features/skills/skill-filter.js +183 -0
- package/dist/components/features/skills/skill-filter.js.map +1 -0
- package/dist/components/features/skills/skill-filters-modal.cjs +2 -0
- package/dist/components/features/skills/skill-filters-modal.cjs.map +1 -0
- package/dist/components/features/skills/skill-filters-modal.js +53 -0
- package/dist/components/features/skills/skill-filters-modal.js.map +1 -0
- package/dist/components/features/skills/skill-icon-badge.cjs +2 -0
- package/dist/components/features/skills/skill-icon-badge.cjs.map +1 -0
- package/dist/components/features/skills/skill-icon-badge.js +17 -0
- package/dist/components/features/skills/skill-icon-badge.js.map +1 -0
- package/dist/components/features/skills/skill-type-badge.cjs +2 -0
- package/dist/components/features/skills/skill-type-badge.cjs.map +1 -0
- package/dist/components/features/skills/skill-type-badge.js +21 -0
- package/dist/components/features/skills/skill-type-badge.js.map +1 -0
- package/dist/components/features/skills/skills-toolbar.cjs +2 -0
- package/dist/components/features/skills/skills-toolbar.cjs.map +1 -0
- package/dist/components/features/skills/skills-toolbar.js +63 -0
- package/dist/components/features/skills/skills-toolbar.js.map +1 -0
- package/dist/components/shared/buttons/circle-plus-check-toggle.cjs +1 -1
- package/dist/components/shared/buttons/circle-plus-check-toggle.cjs.map +1 -1
- package/dist/components/shared/buttons/circle-plus-check-toggle.js +19 -6
- package/dist/components/shared/buttons/circle-plus-check-toggle.js.map +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 +4 -1
- package/dist/components/shared/filters/enum-filter-dropdown.js +14 -14
- package/dist/components/shared/filters/enum-filter-dropdown.js.map +1 -1
- package/dist/components/shared/modals/settings/settings-form.cjs +1 -1
- package/dist/components/shared/modals/settings/settings-form.js +6 -6
- package/dist/components/ui/resize-handle.cjs +1 -1
- package/dist/components/ui/resize-handle.cjs.map +1 -1
- package/dist/components/ui/resize-handle.d.ts +2 -1
- package/dist/components/ui/resize-handle.js +6 -5
- package/dist/components/ui/resize-handle.js.map +1 -1
- package/dist/config/defaults.cjs +1 -1
- package/dist/config/defaults.cjs.map +1 -1
- package/dist/config/defaults.js +9 -5
- package/dist/config/defaults.js.map +1 -1
- package/dist/constants/skills-docs.cjs +2 -0
- package/dist/constants/skills-docs.cjs.map +1 -0
- package/dist/constants/skills-docs.js +6 -0
- package/dist/constants/skills-docs.js.map +1 -0
- package/dist/contexts/conversation-websocket-context.cjs +3 -3
- package/dist/contexts/conversation-websocket-context.cjs.map +1 -1
- package/dist/contexts/conversation-websocket-context.js +174 -149
- package/dist/contexts/conversation-websocket-context.js.map +1 -1
- package/dist/extensions/canvas-extension-module-loader.d.ts +11 -0
- package/dist/fixtures/home-automations-demo.cjs +2 -0
- package/dist/fixtures/home-automations-demo.cjs.map +1 -0
- package/dist/fixtures/home-automations-demo.d.ts +1 -3
- package/dist/fixtures/home-automations-demo.js +384 -0
- package/dist/fixtures/home-automations-demo.js.map +1 -0
- package/dist/hooks/chat/use-slash-command.cjs +1 -1
- package/dist/hooks/chat/use-slash-command.cjs.map +1 -1
- package/dist/hooks/chat/use-slash-command.d.ts +1 -2
- package/dist/hooks/chat/use-slash-command.js +1 -0
- package/dist/hooks/chat/use-slash-command.js.map +1 -1
- package/dist/hooks/mutation/use-create-conversation.cjs +1 -1
- package/dist/hooks/mutation/use-create-conversation.cjs.map +1 -1
- package/dist/hooks/mutation/use-create-conversation.js +27 -30
- package/dist/hooks/mutation/use-create-conversation.js.map +1 -1
- package/dist/hooks/mutation/use-create-provider-connection.cjs +1 -0
- package/dist/hooks/mutation/use-create-provider-connection.d.ts +2 -0
- package/dist/hooks/mutation/use-create-provider-connection.js +1 -0
- package/dist/hooks/mutation/use-delete-mcp-server.cjs +1 -1
- package/dist/hooks/mutation/use-delete-mcp-server.js +3 -3
- package/dist/hooks/mutation/use-delete-provider-connection.cjs +1 -0
- package/dist/hooks/mutation/use-delete-provider-connection.d.ts +1 -0
- package/dist/hooks/mutation/use-delete-provider-connection.js +1 -0
- package/dist/hooks/mutation/use-manage-canvas-extensions.d.ts +12 -0
- package/dist/hooks/mutation/use-switch-acp-model.cjs +1 -1
- package/dist/hooks/mutation/use-switch-acp-model.cjs.map +1 -1
- package/dist/hooks/mutation/use-switch-acp-model.d.ts +5 -3
- package/dist/hooks/mutation/use-switch-acp-model.js +9 -13
- package/dist/hooks/mutation/use-switch-acp-model.js.map +1 -1
- package/dist/hooks/mutation/use-update-mcp-server.cjs +1 -1
- package/dist/hooks/mutation/use-update-mcp-server.js +6 -6
- package/dist/hooks/mutation/use-update-provider-connection.cjs +1 -0
- package/dist/hooks/mutation/use-update-provider-connection.d.ts +7 -0
- package/dist/hooks/mutation/use-update-provider-connection.js +1 -0
- package/dist/hooks/query/concurrency-limiter.cjs +2 -0
- package/dist/hooks/query/concurrency-limiter.cjs.map +1 -0
- package/dist/hooks/query/concurrency-limiter.d.ts +22 -0
- package/dist/hooks/query/concurrency-limiter.js +29 -0
- package/dist/hooks/query/concurrency-limiter.js.map +1 -0
- package/dist/hooks/query/query-keys.cjs +1 -1
- package/dist/hooks/query/query-keys.cjs.map +1 -1
- package/dist/hooks/query/query-keys.d.ts +7 -0
- package/dist/hooks/query/query-keys.js +4 -4
- package/dist/hooks/query/query-keys.js.map +1 -1
- package/dist/hooks/query/use-active-conversation.cjs +1 -1
- package/dist/hooks/query/use-active-conversation.js +4 -4
- package/dist/hooks/query/use-automation-detail.cjs +1 -0
- package/dist/hooks/query/use-automation-detail.js +2 -0
- package/dist/hooks/query/use-automation-health.cjs +2 -0
- package/dist/hooks/query/use-automation-health.cjs.map +1 -0
- package/dist/hooks/query/use-automation-health.js +22 -0
- package/dist/hooks/query/use-automation-health.js.map +1 -0
- package/dist/hooks/query/use-automations.cjs +2 -0
- package/dist/hooks/query/use-automations.cjs.map +1 -0
- package/dist/hooks/query/use-automations.js +28 -0
- package/dist/hooks/query/use-automations.js.map +1 -0
- package/dist/hooks/query/use-backends-health.cjs +1 -1
- package/dist/hooks/query/use-backends-health.cjs.map +1 -1
- package/dist/hooks/query/use-backends-health.d.ts +1 -1
- package/dist/hooks/query/use-backends-health.js +50 -64
- package/dist/hooks/query/use-backends-health.js.map +1 -1
- package/dist/hooks/query/use-canvas-extensions.cjs +1 -0
- package/dist/hooks/query/use-canvas-extensions.d.ts +5 -0
- package/dist/hooks/query/use-canvas-extensions.js +3 -0
- package/dist/hooks/query/use-conversation-history.cjs +1 -1
- package/dist/hooks/query/use-conversation-history.cjs.map +1 -1
- package/dist/hooks/query/use-conversation-history.js +3 -1
- package/dist/hooks/query/use-conversation-history.js.map +1 -1
- package/dist/hooks/query/use-conversation-metrics.cjs +1 -1
- package/dist/hooks/query/use-conversation-metrics.js +3 -3
- package/dist/hooks/query/use-latest-automation-runs.cjs +1 -0
- package/dist/hooks/query/use-latest-automation-runs.d.ts +2 -0
- package/dist/hooks/query/use-latest-automation-runs.js +4 -0
- package/dist/hooks/query/use-llm-profiles.d.ts +1 -1
- package/dist/hooks/query/use-paginated-conversations.cjs +1 -1
- package/dist/hooks/query/use-paginated-conversations.cjs.map +1 -1
- package/dist/hooks/query/use-paginated-conversations.js +19 -16
- package/dist/hooks/query/use-paginated-conversations.js.map +1 -1
- package/dist/hooks/query/use-provider-connections.cjs +2 -0
- package/dist/hooks/query/use-provider-connections.cjs.map +1 -0
- package/dist/hooks/query/use-provider-connections.d.ts +8 -0
- package/dist/hooks/query/use-provider-connections.js +19 -0
- package/dist/hooks/query/use-provider-connections.js.map +1 -0
- package/dist/hooks/query/use-repository-git-items.cjs +2 -0
- package/dist/hooks/query/use-repository-git-items.cjs.map +1 -0
- package/dist/hooks/query/use-repository-git-items.d.ts +3 -0
- package/dist/hooks/query/use-repository-git-items.js +33 -0
- package/dist/hooks/query/use-repository-git-items.js.map +1 -0
- package/dist/hooks/query/use-search-providers.cjs +1 -1
- package/dist/hooks/query/use-search-providers.cjs.map +1 -1
- package/dist/hooks/query/use-search-providers.js +17 -10
- package/dist/hooks/query/use-search-providers.js.map +1 -1
- package/dist/hooks/query/use-unified-vscode-url.cjs +1 -1
- package/dist/hooks/query/use-unified-vscode-url.cjs.map +1 -1
- package/dist/hooks/query/use-unified-vscode-url.d.ts +1 -0
- package/dist/hooks/query/use-unified-vscode-url.js +40 -26
- package/dist/hooks/query/use-unified-vscode-url.js.map +1 -1
- package/dist/hooks/query/use-workspace-file-content.cjs +1 -1
- package/dist/hooks/query/use-workspace-file-content.js +5 -5
- package/dist/hooks/use-acp-credential-form.d.ts +6 -0
- package/dist/hooks/use-bash-command-runner.cjs +1 -1
- package/dist/hooks/use-bash-command-runner.cjs.map +1 -1
- package/dist/hooks/use-bash-command-runner.js +45 -42
- package/dist/hooks/use-bash-command-runner.js.map +1 -1
- package/dist/hooks/use-conversation-overview-column-space.cjs +2 -0
- package/dist/hooks/use-conversation-overview-column-space.cjs.map +1 -0
- package/dist/hooks/use-conversation-overview-column-space.d.ts +2 -0
- package/dist/hooks/use-conversation-overview-column-space.js +25 -0
- package/dist/hooks/use-conversation-overview-column-space.js.map +1 -0
- package/dist/hooks/use-conversation-overview-git-diff-stats.cjs +2 -0
- package/dist/hooks/use-conversation-overview-git-diff-stats.cjs.map +1 -0
- package/dist/hooks/use-conversation-overview-git-diff-stats.d.ts +7 -0
- package/dist/hooks/use-conversation-overview-git-diff-stats.js +37 -0
- package/dist/hooks/use-conversation-overview-git-diff-stats.js.map +1 -0
- package/dist/hooks/use-conversation-overview-panel-peek.cjs +2 -0
- package/dist/hooks/use-conversation-overview-panel-peek.cjs.map +1 -0
- package/dist/hooks/use-conversation-overview-panel-peek.d.ts +9 -0
- package/dist/hooks/use-conversation-overview-panel-peek.js +32 -0
- package/dist/hooks/use-conversation-overview-panel-peek.js.map +1 -0
- package/dist/hooks/use-conversation-overview-stats.cjs +2 -0
- package/dist/hooks/use-conversation-overview-stats.cjs.map +1 -0
- package/dist/hooks/use-conversation-overview-stats.d.ts +4 -0
- package/dist/hooks/use-conversation-overview-stats.js +15 -0
- package/dist/hooks/use-conversation-overview-stats.js.map +1 -0
- package/dist/hooks/use-conversation-primary-repository.cjs +2 -0
- package/dist/hooks/use-conversation-primary-repository.cjs.map +1 -0
- package/dist/hooks/use-conversation-primary-repository.d.ts +11 -0
- package/dist/hooks/use-conversation-primary-repository.js +17 -0
- package/dist/hooks/use-conversation-primary-repository.js.map +1 -0
- package/dist/hooks/use-drag-scroll.cjs +2 -0
- package/dist/hooks/use-drag-scroll.cjs.map +1 -0
- package/dist/hooks/use-drag-scroll.d.ts +12 -0
- package/dist/hooks/use-drag-scroll.js +41 -0
- package/dist/hooks/use-drag-scroll.js.map +1 -0
- package/dist/hooks/use-has-permission.cjs +2 -0
- package/dist/hooks/use-has-permission.cjs.map +1 -0
- package/dist/hooks/use-has-permission.js +8 -0
- package/dist/hooks/use-has-permission.js.map +1 -0
- package/dist/hooks/use-home-automation-actions.cjs +2 -0
- package/dist/hooks/use-home-automation-actions.cjs.map +1 -0
- package/dist/hooks/use-home-automation-actions.js +15 -0
- package/dist/hooks/use-home-automation-actions.js.map +1 -0
- package/dist/hooks/use-launch-skill-in-chat.cjs +2 -0
- package/dist/hooks/use-launch-skill-in-chat.cjs.map +1 -0
- package/dist/hooks/use-launch-skill-in-chat.js +16 -0
- package/dist/hooks/use-launch-skill-in-chat.js.map +1 -0
- package/dist/hooks/use-mcp-server-health.cjs +1 -1
- package/dist/hooks/use-mcp-server-health.js +3 -3
- package/dist/hooks/use-pinned-home-route.cjs +2 -0
- package/dist/hooks/use-pinned-home-route.cjs.map +1 -0
- package/dist/hooks/use-pinned-home-route.d.ts +33 -0
- package/dist/hooks/use-pinned-home-route.js +34 -0
- package/dist/hooks/use-pinned-home-route.js.map +1 -0
- package/dist/hooks/use-resizable-drawer-width.cjs +2 -0
- package/dist/hooks/use-resizable-drawer-width.cjs.map +1 -0
- package/dist/hooks/use-resizable-drawer-width.d.ts +22 -0
- package/dist/hooks/use-resizable-drawer-width.js +46 -0
- package/dist/hooks/use-resizable-drawer-width.js.map +1 -0
- package/dist/hooks/use-responder-url-secret.cjs +2 -0
- package/dist/hooks/use-responder-url-secret.cjs.map +1 -0
- package/dist/hooks/use-responder-url-secret.js +51 -0
- package/dist/hooks/use-responder-url-secret.js.map +1 -0
- package/dist/hooks/use-select-conversation-tab.cjs +1 -1
- package/dist/hooks/use-select-conversation-tab.cjs.map +1 -1
- package/dist/hooks/use-select-conversation-tab.d.ts +2 -0
- package/dist/hooks/use-select-conversation-tab.js +15 -7
- package/dist/hooks/use-select-conversation-tab.js.map +1 -1
- package/dist/hooks/use-skill-enablement.cjs +2 -0
- package/dist/hooks/use-skill-enablement.cjs.map +1 -0
- package/dist/hooks/use-skill-enablement.d.ts +14 -0
- package/dist/hooks/use-skill-enablement.js +80 -0
- package/dist/hooks/use-skill-enablement.js.map +1 -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 +17 -0
- package/dist/hooks/use-tracking.js +10 -0
- package/dist/hooks/use-tracking.js.map +1 -1
- package/dist/hooks/use-websocket.cjs +1 -1
- package/dist/hooks/use-websocket.cjs.map +1 -1
- package/dist/hooks/use-websocket.d.ts +1 -2
- package/dist/hooks/use-websocket.js +58 -51
- package/dist/hooks/use-websocket.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 +153 -56
- package/dist/i18n/declaration.js +1 -1
- package/dist/i18n/declaration.js.map +1 -1
- package/dist/i18n/translation.cjs +3 -3
- package/dist/i18n/translation.cjs.map +1 -1
- package/dist/i18n/translation.js +2629 -980
- package/dist/i18n/translation.js.map +1 -1
- package/dist/icons/check-circle.cjs +2 -0
- package/dist/icons/check-circle.cjs.map +1 -0
- package/dist/icons/check-circle.js +20 -0
- package/dist/icons/check-circle.js.map +1 -0
- package/dist/icons/chevron-down.cjs +2 -0
- package/dist/icons/chevron-down.cjs.map +1 -0
- package/dist/icons/chevron-down.js +20 -0
- package/dist/icons/chevron-down.js.map +1 -0
- package/dist/icons/clock.cjs +2 -0
- package/dist/icons/clock.cjs.map +1 -0
- package/dist/icons/clock.js +20 -0
- package/dist/icons/clock.js.map +1 -0
- package/dist/icons/exclamation-circle.cjs +2 -0
- package/dist/icons/exclamation-circle.cjs.map +1 -0
- package/dist/icons/exclamation-circle.js +20 -0
- package/dist/icons/exclamation-circle.js.map +1 -0
- package/dist/icons/kebab-vertical.cjs +2 -0
- package/dist/icons/kebab-vertical.cjs.map +1 -0
- package/dist/icons/kebab-vertical.js +14 -0
- package/dist/icons/kebab-vertical.js.map +1 -0
- package/dist/icons/key.cjs +2 -0
- package/dist/icons/key.cjs.map +1 -0
- package/dist/icons/key.js +21 -0
- package/dist/icons/key.js.map +1 -0
- package/dist/icons/message-square-share.cjs +2 -0
- package/dist/icons/message-square-share.cjs.map +1 -0
- package/dist/icons/message-square-share.js +22 -0
- package/dist/icons/message-square-share.js.map +1 -0
- package/dist/icons/play.cjs +2 -0
- package/dist/icons/play.cjs.map +1 -0
- package/dist/icons/play.js +19 -0
- package/dist/icons/play.js.map +1 -0
- package/dist/icons/power.cjs +2 -0
- package/dist/icons/power.cjs.map +1 -0
- package/dist/icons/power.js +20 -0
- package/dist/icons/power.js.map +1 -0
- package/dist/icons/sparkle.cjs +2 -0
- package/dist/icons/sparkle.cjs.map +1 -0
- package/dist/icons/sparkle.js +20 -0
- package/dist/icons/sparkle.js.map +1 -0
- package/dist/icons/trash.cjs +2 -0
- package/dist/icons/trash.cjs.map +1 -0
- package/dist/icons/trash.js +20 -0
- package/dist/icons/trash.js.map +1 -0
- package/dist/icons/x-circle.cjs +2 -0
- package/dist/icons/x-circle.cjs.map +1 -0
- package/dist/icons/x-circle.js +20 -0
- package/dist/icons/x-circle.js.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.js +15 -14
- package/dist/lib/index.cjs +1 -1
- package/dist/lib/index.d.ts +1 -0
- package/dist/lib/index.js +1 -0
- package/dist/locales/ar/openhands.json +156 -59
- package/dist/locales/ca/openhands.json +156 -59
- package/dist/locales/de/openhands.json +156 -59
- package/dist/locales/en/openhands.json +156 -59
- package/dist/locales/es/openhands.json +156 -59
- package/dist/locales/fr/openhands.json +156 -59
- package/dist/locales/it/openhands.json +156 -59
- package/dist/locales/ja/openhands.json +156 -59
- package/dist/locales/ko-KR/openhands.json +156 -59
- package/dist/locales/no/openhands.json +156 -59
- package/dist/locales/pt/openhands.json +156 -59
- package/dist/locales/tr/openhands.json +156 -59
- package/dist/locales/uk/openhands.json +156 -59
- package/dist/locales/zh-CN/openhands.json +156 -59
- package/dist/locales/zh-TW/openhands.json +156 -59
- package/dist/manifests/automation-insights.cjs +2 -0
- package/dist/manifests/automation-insights.cjs.map +1 -0
- package/dist/manifests/automation-insights.d.ts +2 -0
- package/dist/manifests/automation-insights.js +9 -0
- package/dist/manifests/automation-insights.js.map +1 -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 +53 -31
- package/dist/manifests/automation-interface.js +56 -59
- package/dist/manifests/automation-interface.js.map +1 -1
- package/dist/manifests/automation-setup.cjs +1 -1
- package/dist/manifests/automation-setup.cjs.map +1 -1
- package/dist/manifests/automation-setup.d.ts +37 -3
- package/dist/manifests/automation-setup.js +16 -2
- package/dist/manifests/automation-setup.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 +56 -52
- package/dist/manifests/interface-validation.js.map +1 -1
- package/dist/manifests/manifest-actions.d.ts +5 -0
- package/dist/manifests/manifest-bundle.d.ts +30 -0
- package/dist/manifests/manifest-local-validation.d.ts +10 -1
- package/dist/manifests/manifest-sources.cjs +1 -1
- package/dist/manifests/manifest-sources.cjs.map +1 -1
- package/dist/manifests/manifest-sources.js +3 -3
- package/dist/manifests/manifest-sources.js.map +1 -1
- package/dist/manifests/manifest-template.d.ts +14 -0
- package/dist/manifests/manifest-validation.cjs +1 -1
- package/dist/manifests/manifest-validation.cjs.map +1 -1
- package/dist/manifests/manifest-validation.js +78 -45
- 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 +64 -3
- package/dist/manifests/types.js +7 -6
- package/dist/manifests/types.js.map +1 -1
- package/dist/node_modules/@heroui/popover/dist/chunk-NW7HJLND.cjs +1 -1
- package/dist/node_modules/@heroui/popover/dist/chunk-NW7HJLND.js +10 -10
- package/dist/node_modules/@heroui/ripple/dist/chunk-UIQI3AYJ.cjs +1 -1
- package/dist/node_modules/@heroui/ripple/dist/chunk-UIQI3AYJ.js +8 -8
- package/dist/node_modules/@heroui/tooltip/dist/chunk-AUA5GDXN.cjs +1 -1
- package/dist/node_modules/@heroui/tooltip/dist/chunk-AUA5GDXN.js +9 -9
- package/dist/node_modules/@openhands/extensions/automations/bundle-index.cjs +4884 -0
- package/dist/node_modules/@openhands/extensions/automations/bundle-index.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/bundle-index.js +11 -0
- package/dist/node_modules/@openhands/extensions/automations/bundle-index.js.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-agents-md-maintainer/manifest.cjs +13 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-agents-md-maintainer/manifest.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-agents-md-maintainer/manifest.js +92 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-agents-md-maintainer/manifest.js.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.cjs +12 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.js +103 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.js.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.cjs +9 -7
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.js +37 -13
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-repo-monitor/manifest.cjs +2 -2
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-repo-monitor/manifest.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-repo-monitor/manifest.js +34 -34
- package/dist/node_modules/@openhands/extensions/automations/catalog/github-repo-monitor/manifest.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-bitbucket-pr/manifest.cjs +9 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-bitbucket-pr/manifest.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-bitbucket-pr/manifest.js +21 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-bitbucket-pr/manifest.js.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-gitlab-mr/manifest.cjs +9 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-gitlab-mr/manifest.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-gitlab-mr/manifest.js +21 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-gitlab-mr/manifest.js.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-pr/manifest.cjs +3 -3
- package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-pr/manifest.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-pr/manifest.js +2 -2
- package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-pr/manifest.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/catalog/linear-issue-to-bitbucket-pr/manifest.cjs +9 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/linear-issue-to-bitbucket-pr/manifest.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/linear-issue-to-bitbucket-pr/manifest.js +21 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/linear-issue-to-bitbucket-pr/manifest.js.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/linear-issue-to-github-pr/manifest.cjs +9 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/linear-issue-to-github-pr/manifest.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/linear-issue-to-github-pr/manifest.js +21 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/linear-issue-to-github-pr/manifest.js.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/linear-issue-to-gitlab-mr/manifest.cjs +9 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/linear-issue-to-gitlab-mr/manifest.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/linear-issue-to-gitlab-mr/manifest.js +21 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/linear-issue-to-gitlab-mr/manifest.js.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/news-digest/manifest.cjs +14 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/news-digest/manifest.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/news-digest/manifest.js +77 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/news-digest/manifest.js.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/qa-changes/manifest.cjs +30 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/qa-changes/manifest.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/qa-changes/manifest.js +65 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/qa-changes/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 +28 -10
- package/dist/node_modules/@openhands/extensions/automations/catalog-index.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/index.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/automations/index.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/automations/index.js +18 -13
- package/dist/node_modules/@openhands/extensions/automations/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 +6 -2
- package/dist/node_modules/@openhands/extensions/automations/interface.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/datadog.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/datadog.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/datadog.js +2 -2
- package/dist/node_modules/@openhands/extensions/integrations/catalog/datadog.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/gitlab.cjs +2 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/gitlab.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/gitlab.js +40 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/gitlab.js.map +1 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/notion.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/notion.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/notion.js +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/notion.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/posthog.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/posthog.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/posthog.js +36 -3
- package/dist/node_modules/@openhands/extensions/integrations/catalog/posthog.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/sonarqube.cjs +2 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/sonarqube.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/sonarqube.js +75 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/sonarqube.js.map +1 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog-index.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog-index.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog-index.js +75 -71
- package/dist/node_modules/@openhands/extensions/integrations/catalog-index.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/skills/index.cjs +1043 -49
- package/dist/node_modules/@openhands/extensions/skills/index.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/skills/index.js +78 -17
- package/dist/node_modules/@openhands/extensions/skills/index.js.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/conversation/remote-conversation.cjs +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/conversation/remote-conversation.js +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/conversation/remote-state.cjs +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/conversation/remote-state.cjs.map +1 -1
- package/dist/node_modules/@openhands/typescript-client/dist/conversation/remote-state.js +8 -7
- package/dist/node_modules/@openhands/typescript-client/dist/conversation/remote-state.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 +2 -2
- package/dist/node_modules/lucide-react/dist/esm/icons/activity.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/activity.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/activity.js +9 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/activity.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/blocks.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/blocks.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/blocks.js +16 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/blocks.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/book-open.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/book-open.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/book-open.js +12 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/book-open.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/download.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/download.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/download.js +19 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/download.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/file-text.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/file-text.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/file-text.js +27 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/file-text.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/git-commit-horizontal.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/git-commit-horizontal.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/git-commit-horizontal.js +27 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/git-commit-horizontal.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/laptop.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/laptop.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/laptop.js +12 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/laptop.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/layout-dashboard.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/layout-dashboard.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/layout-dashboard.js +39 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/layout-dashboard.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/library.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/library.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/library.js +23 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/library.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/package.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/package.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/package.js +23 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/package.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/palette.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/palette.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/palette.js +39 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/palette.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/panels-top-left.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/panels-top-left.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/panels-top-left.js +23 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/panels-top-left.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/pen-line.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/pen-line.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/pen-line.js +12 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/pen-line.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/shield-check.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/shield-check.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/shield-check.js +12 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/shield-check.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/sparkles.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/sparkles.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/sparkles.js +25 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/sparkles.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/timer.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/timer.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/timer.js +27 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/timer.js.map +1 -0
- package/dist/package.cjs +1 -1
- package/dist/package.cjs.map +1 -1
- package/dist/package.js +3 -3
- package/dist/package.js.map +1 -1
- package/dist/routes/agent-settings.d.ts +10 -0
- package/dist/routes/app-settings.cjs +1 -1
- package/dist/routes/app-settings.cjs.map +1 -1
- package/dist/routes/app-settings.js +88 -86
- package/dist/routes/app-settings.js.map +1 -1
- package/dist/routes/commits-tab.cjs +1 -1
- package/dist/routes/commits-tab.cjs.map +1 -1
- package/dist/routes/commits-tab.js +27 -21
- package/dist/routes/commits-tab.js.map +1 -1
- package/dist/routes/conversation.cjs +1 -1
- package/dist/routes/conversation.cjs.map +1 -1
- package/dist/routes/conversation.js +56 -55
- package/dist/routes/conversation.js.map +1 -1
- package/dist/routes/files-tab.cjs +1 -1
- package/dist/routes/files-tab.cjs.map +1 -1
- package/dist/routes/files-tab.d.ts +4 -0
- package/dist/routes/files-tab.js +119 -149
- package/dist/routes/files-tab.js.map +1 -1
- package/dist/routes/llm-settings.cjs +1 -1
- package/dist/routes/llm-settings.cjs.map +1 -1
- package/dist/routes/llm-settings.d.ts +9 -1
- package/dist/routes/llm-settings.js +141 -103
- package/dist/routes/llm-settings.js.map +1 -1
- package/dist/routes/mcp.cjs +1 -1
- package/dist/routes/mcp.cjs.map +1 -1
- package/dist/routes/mcp.js +20 -20
- package/dist/routes/secrets-settings.cjs +1 -1
- package/dist/routes/secrets-settings.js +15 -15
- package/dist/services/canvas-ui.cjs +1 -1
- package/dist/services/canvas-ui.cjs.map +1 -1
- package/dist/services/canvas-ui.d.ts +5 -0
- package/dist/services/canvas-ui.js +24 -10
- package/dist/services/canvas-ui.js.map +1 -1
- package/dist/services/settings.cjs +1 -1
- package/dist/services/settings.cjs.map +1 -1
- package/dist/services/settings.js +3 -2
- package/dist/services/settings.js.map +1 -1
- package/dist/stores/conversation-store.cjs +1 -1
- package/dist/stores/conversation-store.cjs.map +1 -1
- package/dist/stores/conversation-store.d.ts +8 -1
- package/dist/stores/conversation-store.js +9 -0
- package/dist/stores/conversation-store.js.map +1 -1
- package/dist/stores/files-tab-store.cjs +1 -1
- package/dist/stores/files-tab-store.cjs.map +1 -1
- package/dist/stores/files-tab-store.d.ts +13 -0
- package/dist/stores/files-tab-store.js +49 -5
- package/dist/stores/files-tab-store.js.map +1 -1
- package/dist/stores/use-event-store.cjs +1 -1
- package/dist/stores/use-event-store.cjs.map +1 -1
- package/dist/stores/use-event-store.js +11 -11
- package/dist/stores/use-event-store.js.map +1 -1
- package/dist/types/agent-server/core/events/message-event.d.ts +2 -2
- package/dist/types/automation.cjs +2 -0
- package/dist/types/automation.cjs.map +1 -0
- package/dist/types/automation.d.ts +20 -0
- package/dist/types/automation.js +8 -0
- package/dist/types/automation.js.map +1 -0
- package/dist/types/canvas-extension.cjs +2 -0
- package/dist/types/canvas-extension.cjs.map +1 -0
- package/dist/types/canvas-extension.d.ts +77 -0
- package/dist/types/canvas-extension.js +6 -0
- package/dist/types/canvas-extension.js.map +1 -0
- package/dist/types/settings.d.ts +7 -0
- package/dist/ui/help-link.cjs +1 -1
- package/dist/ui/help-link.cjs.map +1 -1
- package/dist/ui/help-link.d.ts +6 -1
- package/dist/ui/help-link.js +32 -18
- package/dist/ui/help-link.js.map +1 -1
- package/dist/utils/acp-auth-display.d.ts +35 -0
- package/dist/utils/automation-catalog.cjs +1 -1
- package/dist/utils/automation-catalog.cjs.map +1 -1
- package/dist/utils/automation-catalog.d.ts +12 -0
- package/dist/utils/automation-catalog.js +20 -1
- package/dist/utils/automation-catalog.js.map +1 -1
- package/dist/utils/automation-schedule.cjs +2 -0
- package/dist/utils/automation-schedule.cjs.map +1 -0
- package/dist/utils/automation-schedule.js +8 -0
- package/dist/utils/automation-schedule.js.map +1 -0
- package/dist/utils/automation-stack-section.cjs +2 -0
- package/dist/utils/automation-stack-section.cjs.map +1 -0
- package/dist/utils/automation-stack-section.d.ts +2 -0
- package/dist/utils/automation-stack-section.js +6 -0
- package/dist/utils/automation-stack-section.js.map +1 -0
- package/dist/utils/cache-utils.cjs +1 -1
- package/dist/utils/cache-utils.js +5 -5
- package/dist/utils/constants.cjs +1 -1
- package/dist/utils/constants.cjs.map +1 -1
- package/dist/utils/constants.js +4 -0
- package/dist/utils/constants.js.map +1 -1
- package/dist/utils/conversation-local-storage.cjs +1 -1
- package/dist/utils/conversation-local-storage.cjs.map +1 -1
- package/dist/utils/conversation-local-storage.d.ts +17 -4
- package/dist/utils/conversation-local-storage.js +111 -63
- package/dist/utils/conversation-local-storage.js.map +1 -1
- package/dist/utils/conversation-metrics.cjs +1 -1
- package/dist/utils/conversation-metrics.cjs.map +1 -1
- package/dist/utils/conversation-metrics.d.ts +3 -2
- package/dist/utils/conversation-metrics.js +16 -14
- package/dist/utils/conversation-metrics.js.map +1 -1
- package/dist/utils/conversation-overview-project-scope.cjs +2 -0
- package/dist/utils/conversation-overview-project-scope.cjs.map +1 -0
- package/dist/utils/conversation-overview-project-scope.d.ts +16 -0
- package/dist/utils/conversation-overview-project-scope.js +22 -0
- package/dist/utils/conversation-overview-project-scope.js.map +1 -0
- package/dist/utils/extension-module-card-classes.cjs +1 -1
- package/dist/utils/extension-module-card-classes.cjs.map +1 -1
- package/dist/utils/extension-module-card-classes.d.ts +1 -1
- package/dist/utils/extension-module-card-classes.js +2 -2
- package/dist/utils/extension-module-card-classes.js.map +1 -1
- package/dist/utils/format-model-name.cjs +1 -1
- package/dist/utils/format-model-name.cjs.map +1 -1
- package/dist/utils/format-model-name.d.ts +7 -3
- package/dist/utils/format-model-name.js +6 -11
- package/dist/utils/format-model-name.js.map +1 -1
- package/dist/utils/format-relative-time.cjs +2 -0
- package/dist/utils/format-relative-time.cjs.map +1 -0
- package/dist/utils/format-relative-time.d.ts +7 -0
- package/dist/utils/format-relative-time.js +22 -0
- package/dist/utils/format-relative-time.js.map +1 -0
- package/dist/utils/git-diff-stats.cjs +5 -0
- package/dist/utils/git-diff-stats.cjs.map +1 -0
- package/dist/utils/git-diff-stats.d.ts +9 -0
- package/dist/utils/git-diff-stats.js +53 -0
- package/dist/utils/git-diff-stats.js.map +1 -0
- package/dist/utils/handle-event-for-ui.cjs +1 -1
- package/dist/utils/handle-event-for-ui.cjs.map +1 -1
- package/dist/utils/handle-event-for-ui.js +13 -11
- package/dist/utils/handle-event-for-ui.js.map +1 -1
- package/dist/utils/mcp-credential-validation.cjs +1 -1
- package/dist/utils/mcp-credential-validation.js +3 -3
- package/dist/utils/mcp-marketplace-utils.cjs +1 -1
- package/dist/utils/mcp-marketplace-utils.cjs.map +1 -1
- package/dist/utils/mcp-marketplace-utils.js +22 -9
- package/dist/utils/mcp-marketplace-utils.js.map +1 -1
- package/dist/utils/parse-git-remote-url.cjs +1 -1
- package/dist/utils/parse-git-remote-url.cjs.map +1 -1
- package/dist/utils/parse-git-remote-url.js +6 -7
- package/dist/utils/parse-git-remote-url.js.map +1 -1
- package/dist/utils/path-utils.cjs +1 -1
- package/dist/utils/path-utils.cjs.map +1 -1
- package/dist/utils/path-utils.d.ts +15 -3
- package/dist/utils/path-utils.js +29 -3
- package/dist/utils/path-utils.js.map +1 -1
- package/dist/utils/recommended-automation-rail.cjs +2 -0
- package/dist/utils/recommended-automation-rail.cjs.map +1 -0
- package/dist/utils/recommended-automation-rail.d.ts +22 -0
- package/dist/utils/recommended-automation-rail.js +44 -0
- package/dist/utils/recommended-automation-rail.js.map +1 -0
- package/dist/utils/responder-deployment.cjs +2 -0
- package/dist/utils/responder-deployment.cjs.map +1 -0
- package/dist/utils/responder-deployment.js +42 -0
- package/dist/utils/responder-deployment.js.map +1 -0
- package/dist/utils/scroll-fade-state.cjs +2 -0
- package/dist/utils/scroll-fade-state.cjs.map +1 -0
- package/dist/utils/scroll-fade-state.d.ts +6 -0
- package/dist/utils/scroll-fade-state.js +13 -0
- package/dist/utils/scroll-fade-state.js.map +1 -0
- package/dist/utils/skill-category.cjs +2 -0
- package/dist/utils/skill-category.cjs.map +1 -0
- package/dist/utils/skill-category.js +51 -0
- package/dist/utils/skill-category.js.map +1 -0
- package/dist/utils/skill-enablement.cjs +2 -0
- package/dist/utils/skill-enablement.cjs.map +1 -0
- package/dist/utils/skill-enablement.d.ts +51 -0
- package/dist/utils/skill-enablement.js +31 -0
- package/dist/utils/skill-enablement.js.map +1 -0
- package/dist/utils/skill-scope.cjs +1 -1
- package/dist/utils/skill-scope.cjs.map +1 -1
- package/dist/utils/skill-scope.js +1 -1
- package/dist/utils/skill-scope.js.map +1 -1
- package/dist/utils/streaming-delta-batcher.cjs +2 -0
- package/dist/utils/streaming-delta-batcher.cjs.map +1 -0
- package/dist/utils/streaming-delta-batcher.d.ts +21 -0
- package/dist/utils/streaming-delta-batcher.js +31 -0
- package/dist/utils/streaming-delta-batcher.js.map +1 -0
- package/dist/utils/tar-gzip.d.ts +26 -0
- package/dist/utils/utils.cjs +1 -1
- package/dist/utils/utils.cjs.map +1 -1
- package/dist/utils/utils.d.ts +1 -41
- package/dist/utils/utils.js +27 -6
- package/dist/utils/utils.js.map +1 -1
- package/dist/utils/vscode-origin.cjs +2 -0
- package/dist/utils/vscode-origin.cjs.map +1 -0
- package/dist/utils/vscode-origin.d.ts +55 -0
- package/dist/utils/vscode-origin.js +27 -0
- package/dist/utils/vscode-origin.js.map +1 -0
- package/dist/utils/websocket-handshake.cjs +2 -0
- package/dist/utils/websocket-handshake.cjs.map +1 -0
- package/dist/utils/websocket-handshake.d.ts +11 -0
- package/dist/utils/websocket-handshake.js +12 -0
- package/dist/utils/websocket-handshake.js.map +1 -0
- package/dist/utils/workspace-mode.d.ts +4 -0
- package/package.json +3 -3
- package/scripts/check-sdk-version-sync.mjs +6 -6
- package/scripts/check-translation-completeness.cjs +5 -0
- package/scripts/dev-extra-backend.mjs +28 -9
- package/scripts/dev-safe.mjs +81 -8
- package/scripts/dev-static.mjs +48 -44
- package/scripts/dev-with-automation.mjs +95 -6
- package/scripts/ingress.mjs +27 -1
- package/scripts/seed-automation-ux-data.mjs +810 -0
- package/scripts/static-server.mjs +74 -1
- package/tools/canvas_ui_tool.py +19 -0
- package/build/assets/acp-providers-CYy8qA2z.js +0 -1
- package/build/assets/active-backend-context-BZDG15C0.js +0 -2
- package/build/assets/agent-context-settings-DGWBBbcp.js +0 -1
- package/build/assets/agent-profiles-settings-DrkGdf4_.js +0 -1
- package/build/assets/agent-server-conversation-service.api-DK56YPTs.js +0 -86
- package/build/assets/agent-settings-DfcSgkLD.js +0 -2
- package/build/assets/agent-settings-Lrc5-twS.js +0 -1
- package/build/assets/alert-banner-BgDHhL7b.js +0 -1
- package/build/assets/api-error-message-BEIE_yD1.js +0 -1
- package/build/assets/api-key-entry-screen-DaZnOlVo.js +0 -1
- package/build/assets/app-settings-BG5NAUbC.js +0 -1
- package/build/assets/automation-detail-D4Hs831Z.js +0 -3
- package/build/assets/automation-export-n0X6FB0C.js +0 -2
- package/build/assets/automation-git-sync-CDrm8WV7.js +0 -1
- package/build/assets/automation-setup-route-CZCl4ONs.js +0 -1
- package/build/assets/automation-templates-DFF96AdL.js +0 -1
- package/build/assets/automations-list-Bl-oGOrV.js +0 -1
- package/build/assets/back-nav-button-H_ThtDA0.js +0 -1
- package/build/assets/backend-form-modal-CbCemvHt.js +0 -1
- package/build/assets/backend-not-configured-DP8KLNq_.js +0 -1
- package/build/assets/backend-synced-settings-badge-BBASWqsb.js +0 -1
- package/build/assets/badge-B-51h-SW.js +0 -1
- package/build/assets/base-modal-BbjycA8X.js +0 -1
- package/build/assets/bot-CGPCg03p.js +0 -1
- package/build/assets/brand-button-Blxv5nww.js +0 -1
- package/build/assets/browser-CuW0nWvh.js +0 -7
- package/build/assets/browser-tab-D5G0ORwt.js +0 -1
- package/build/assets/chat-send-button-BD2tii1r.js +0 -1
- package/build/assets/check-DSuS-lyr.js +0 -1
- package/build/assets/chevron-down-CgGcmtE2.js +0 -1
- package/build/assets/circle-check-CG5-NPw7.js +0 -1
- package/build/assets/circle-plus-check-toggle-ASbpB8vN.js +0 -1
- package/build/assets/cloud-funnel-analytics-GlCUG0gk.js +0 -1
- package/build/assets/cog-CZiR80uT.js +0 -1
- package/build/assets/combobox-caret-DvpEsh2O.js +0 -1
- package/build/assets/command-menu-DwUQzjYP.js +0 -1
- package/build/assets/condenser-settings-BptcoiLA.js +0 -1
- package/build/assets/confirmation-modal-CiEwxZAA.js +0 -1
- package/build/assets/context-menu-list-item-CdcamfM1.js +0 -1
- package/build/assets/conversation-DREHj4nT.js +0 -1
- package/build/assets/conversation-DotRfiDz.js +0 -90
- package/build/assets/conversation-panel-DREHj4nT.js +0 -1
- package/build/assets/conversation-state-store-DMLtlHbE.js +0 -1
- package/build/assets/conversation-store-Blc5xysY.js +0 -6
- package/build/assets/conversation-tab-empty-state-D-puECpY.js +0 -1
- package/build/assets/copy-to-clipboard-button-BGxcUbgy.js +0 -1
- package/build/assets/device-verify-CZJfWaJf.js +0 -1
- package/build/assets/dropdown-classes-tLhpwtxS.js +0 -1
- package/build/assets/entry.client-D8GnI6GZ.js +0 -2
- package/build/assets/enum-filter-dropdown-Fk8k60nk.js +0 -1
- package/build/assets/environment-switch-overlay-DeztVYuL.js +0 -1
- package/build/assets/extension-module-card-classes-Bo43vY5V.js +0 -1
- package/build/assets/extensions-hub-Cd6GCYzq.js +0 -1
- package/build/assets/extensions-navigation-C4sgZg-y.js +0 -1
- package/build/assets/external-link-C0UpBgsE.js +0 -1
- package/build/assets/file-text-C6WYtNdV.js +0 -1
- package/build/assets/files-tab-BW_qzyAm.js +0 -1
- package/build/assets/form-control-classes-CGXBLcn1.js +0 -1
- package/build/assets/format-model-name-BNPKVsIq.js +0 -1
- package/build/assets/format-relative-time-ZhQD4rsl.js +0 -1
- package/build/assets/git-provider-icon-CaQ1yLPi.js +0 -1
- package/build/assets/git-repo-dropdown-CgXR6M_E.js +0 -1
- package/build/assets/git-repo-dropdown-D2Uei3CO.js +0 -1
- package/build/assets/highlighted-source-view-C_YOp8Fo.js +0 -1
- package/build/assets/home-DNzzJcMP.js +0 -1
- package/build/assets/home-aCos-5vc.js +0 -1
- package/build/assets/home-store-DgzViC3f.js +0 -1
- package/build/assets/index-home-DNzzJcMP.js +0 -1
- package/build/assets/info-CLoC1LRo.js +0 -1
- package/build/assets/install-server-modal-D7zIqNKz.js +0 -1
- package/build/assets/kebab-menu-item-content-DERMdnDv.js +0 -1
- package/build/assets/launch-5PjKeLak.js +0 -1
- package/build/assets/list-todo-BF049YaY.js +0 -1
- package/build/assets/llm-not-configured-banner-BK9z5eS0.js +0 -27
- package/build/assets/llm-settings-BLAMK2tR.js +0 -1
- package/build/assets/llm-settings-BWsbarGM.js +0 -1
- package/build/assets/llm-subscription-service-SfnEV9Uc.js +0 -1
- package/build/assets/loader-circle-D7IagAyF.js +0 -1
- package/build/assets/loading-spinner-DBgXgra0.js +0 -1
- package/build/assets/manage-backends-modal-BTqNPhzc.js +0 -1
- package/build/assets/manifest-abebca3c.js +0 -1
- package/build/assets/manifest-subpage-layout-Rn-glaxV.js +0 -1
- package/build/assets/map-provider-BK4HnqYz.js +0 -1
- package/build/assets/markdown-renderer-Cp6DlHQN.js +0 -8
- package/build/assets/mcp-BC-Ixn4T.js +0 -9
- package/build/assets/mcp-marketplace-utils-BJWJgbB6.js +0 -1
- package/build/assets/messages-CzFKrzPG.js +0 -40
- package/build/assets/modal-body-BdKfD3Hl.js +0 -1
- package/build/assets/modal-classes-D5_b5vMi.js +0 -1
- package/build/assets/modal-close-button-objukxk_.js +0 -1
- package/build/assets/mouse-pointer-click-C_gXyLyD.js +0 -1
- package/build/assets/npm-CHVHV1MC.js +0 -1
- package/build/assets/onboarding-Diw0V51A.js +0 -1
- package/build/assets/onboarding-modal-Da4yHzsA.js +0 -1
- package/build/assets/organization-service.api-BztSy69u.js +0 -1
- package/build/assets/parse-git-remote-url-BkXN9jzl.js +0 -1
- package/build/assets/pencil-49avMHlD.js +0 -1
- package/build/assets/planner-tab-CJiSpNax.js +0 -1
- package/build/assets/plugins-management-service-lHdNKWNU.js +0 -1
- package/build/assets/plus-C0BagBpV.js +0 -1
- package/build/assets/profiles-service.api-BLr7FXec.js +0 -1
- package/build/assets/providers-CWXnb7S3.js +0 -1
- package/build/assets/proxy-DYDXxtje.js +0 -1
- package/build/assets/puzzle-Bt2B1rzf.js +0 -1
- package/build/assets/recommended-automations-launcher-CcFMfJRR.js +0 -1
- package/build/assets/refresh-cw-nmcesifB.js +0 -1
- package/build/assets/root-CT4t7apy.css +0 -1
- package/build/assets/root-DnRgLKpU.js +0 -2
- package/build/assets/root-layout-2L9tr-BN.js +0 -2
- package/build/assets/schema-field-C59lVZTA.js +0 -1
- package/build/assets/sdk-section-page-BbBEQQjq.js +0 -1
- package/build/assets/search-CYSDBczG.js +0 -1
- package/build/assets/secrets-service-BtsgYSlj.js +0 -1
- package/build/assets/secrets-settings-DJ0OKa4_.js +0 -1
- package/build/assets/segmented-toggle-DiVfTZuN.js +0 -1
- package/build/assets/settings-CDqL_Uqh.js +0 -1
- package/build/assets/settings-DcNPxz0v.js +0 -1
- package/build/assets/settings-dropdown-input-Ba1UN5Du.js +0 -1
- package/build/assets/settings-index-Cz2cKt2K.js +0 -1
- package/build/assets/settings-input-CWUEHHvS.js +0 -1
- package/build/assets/settings-list-classes-DdcLXDGn.js +0 -1
- package/build/assets/settings-modal-nEEK1Kh1.js +0 -1
- package/build/assets/settings-service.api-3yAUFcaP.js +0 -1
- package/build/assets/settings-switch-Dk9hChx1.js +0 -1
- package/build/assets/settings-utils-CxjtCSB3.js +0 -1
- package/build/assets/shared-conversation-DbAcrx3s.js +0 -1
- package/build/assets/shield-check-CiOTXxV2.js +0 -1
- package/build/assets/sidebar-layout-lrfPooIB.js +0 -1
- package/build/assets/sidebar-mobile-menu-toggle-KERXfNu1.js +0 -1
- package/build/assets/sidebar-nav-link-B8lFD6Cb.js +0 -1
- package/build/assets/sidebar-store-u6pUpxJ7.js +0 -1
- package/build/assets/skill-card-pill-row-dGIUzr_b.js +0 -1
- package/build/assets/skill-icon-badge-kkOWZ89w.js +0 -1
- package/build/assets/skill-scope-DWN1PBPH.js +0 -1
- package/build/assets/skills-plugins-DFjH2Nq6.js +0 -1
- package/build/assets/skills-settings-DIHpl3ol.js +0 -2
- package/build/assets/sparkles-ntyMLnbj.js +0 -1
- package/build/assets/styled-tooltip-B6JXcsmL.js +0 -1
- package/build/assets/task-list-tab-aEJzEcHD.js +0 -1
- package/build/assets/terminal-Dch7Ty5K.js +0 -3
- package/build/assets/toggle-switch-B2MLKsgt.js +0 -1
- package/build/assets/trash-2-yZnDM4Ji.js +0 -1
- package/build/assets/typography-DB5HoCk0.js +0 -1
- package/build/assets/usage-tab-DrEtBmBT.js +0 -1
- package/build/assets/use-acp-credential-form-c8KXAa8A.js +0 -1
- package/build/assets/use-activate-agent-profile-B0p34N3q.js +0 -1
- package/build/assets/use-agent-profiles-CPIc6wLH.js +0 -1
- package/build/assets/use-can-manage-org-profiles-Dz_8Eqkv.js +0 -1
- package/build/assets/use-cloud-current-user-id-DvUVqCle.js +0 -1
- package/build/assets/use-config-C3PO4TBw.js +0 -1
- package/build/assets/use-create-conversation-DVrA_uLD.js +0 -1
- package/build/assets/use-create-secret-DbBIpaCR.js +0 -1
- package/build/assets/use-get-secrets-6PBitf54.js +0 -1
- package/build/assets/use-has-permission-CQ31Cl8j.js +0 -1
- package/build/assets/use-is-authed-2UrDIziV.js +0 -1
- package/build/assets/use-is-creating-conversation-BvYpmb3v.js +0 -1
- package/build/assets/use-launch-skill-in-chat-COnDpxCQ.js +0 -1
- package/build/assets/use-llm-profiles-diZS4FiN.js +0 -1
- package/build/assets/use-manifest-capabilities-HIWCtIUm.js +0 -1
- package/build/assets/use-onboarding-completion-Bs8PcXik.js +0 -1
- package/build/assets/use-plugins-marketplace-BCuNLFsr.js +0 -1
- package/build/assets/use-save-agent-profile-BaMNSpBV.js +0 -1
- package/build/assets/use-save-settings-BahvC2Gw.js +0 -1
- package/build/assets/use-settings-C6ZxpBDX.js +0 -1
- package/build/assets/use-settings-nav-items-Bqn69Ggw.js +0 -16
- package/build/assets/use-tracking-Bhu7gk2y.js +0 -3
- package/build/assets/use-user-conversation-BkNXpXrd.js +0 -1
- package/build/assets/useInfiniteQuery-c_OmS3lK.js +0 -1
- package/build/assets/useMutation-6ZsQCqAn.js +0 -1
- package/build/assets/useQueries-xDrGlTO_.js +0 -1
- package/build/assets/useQuery-Bs5NFz2s.js +0 -1
- package/build/assets/utils-DUD5ScdA.js +0 -1
- package/build/assets/vendor~browser-B-fae1JU.js +0 -47
- package/build/assets/vendor~entry.client-BFE7Llz9.js +0 -1
- package/build/assets/vendor~entry.client-BaKt_PIp.js +0 -9
- package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~kepq2zme-D87mAf6K.js +0 -186
- package/build/assets/vendor~files-tab-B6POTS66.js +0 -11
- package/build/assets/vendor~index-home~home~conversation-panel~conversation-53Q_U6uP.js +0 -13
- package/build/assets/vendor~index-home~home~conversation-panel~conversation~alert-banner-B3qC_oj8.js +0 -1
- package/build/assets/vendor~root-layout-DeQACFVA.js +0 -1
- package/build/assets/vendor~root-layout~conversation-panel~conversation-bv7ooVgH.js +0 -1
- package/build/assets/vendor~root-layout~conversation-panel~conversation~skills-settings~automations-list~shared-~bovqqk8e-e8pX05xf.js +0 -1
- package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation-BvS6PCK2.js +0 -1
- package/build/assets/vendor~root-layout~index-home~home~mcp~automations-list~automation-templates~automation-set~bxsimjx0-D7IDevqN.js +0 -1
- package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~hjcjabwg-DOPLJMH9.js +0 -48
- package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~iw7io29p-Dz8NQve5.js +0 -1
- package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~eo2nf80n-BOVIFA_g.js +0 -73
- package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~jz4f6vo2-C0JXQb_q.js +0 -7465
- package/build/assets/verification-settings-COueVXmM.js +0 -1
- package/build/assets/wrench-C95ujnYo.js +0 -1
- package/build/assets/x-86ZCfxKY.js +0 -1
- package/build/assets/zap-DRa-r-Tf.js +0 -1
- package/dist/components/features/diff-viewer/empty-changes-message.cjs +0 -2
- package/dist/components/features/diff-viewer/empty-changes-message.cjs.map +0 -1
- package/dist/components/features/diff-viewer/empty-changes-message.js +0 -17
- package/dist/components/features/diff-viewer/empty-changes-message.js.map +0 -1
- package/dist/components/features/tips/random-tip.cjs +0 -2
- package/dist/components/features/tips/random-tip.cjs.map +0 -1
- package/dist/components/features/tips/random-tip.d.ts +0 -2
- package/dist/components/features/tips/random-tip.js +0 -41
- package/dist/components/features/tips/random-tip.js.map +0 -1
- package/dist/hooks/query/use-has-git-commits.cjs +0 -2
- package/dist/hooks/query/use-has-git-commits.cjs.map +0 -1
- package/dist/hooks/query/use-has-git-commits.d.ts +0 -25
- package/dist/hooks/query/use-has-git-commits.js +0 -31
- package/dist/hooks/query/use-has-git-commits.js.map +0 -1
- package/dist/hooks/use-has-attached-source.cjs +0 -2
- package/dist/hooks/use-has-attached-source.cjs.map +0 -1
- package/dist/hooks/use-has-attached-source.d.ts +0 -18
- package/dist/hooks/use-has-attached-source.js +0 -14
- package/dist/hooks/use-has-attached-source.js.map +0 -1
- package/dist/icons/chveron-up.cjs +0 -2
- package/dist/icons/chveron-up.cjs.map +0 -1
- package/dist/icons/chveron-up.js +0 -21
- package/dist/icons/chveron-up.js.map +0 -1
- package/dist/routes/changes-tab.cjs +0 -2
- package/dist/routes/changes-tab.cjs.map +0 -1
- package/dist/routes/changes-tab.d.ts +0 -3
- package/dist/routes/changes-tab.js +0 -64
- package/dist/routes/changes-tab.js.map +0 -1
- package/dist/utils/file-priority.cjs +0 -2
- package/dist/utils/file-priority.cjs.map +0 -1
- package/dist/utils/file-priority.d.ts +0 -27
- package/dist/utils/file-priority.js +0 -61
- package/dist/utils/file-priority.js.map +0 -1
- package/dist/utils/table-row-classes.d.ts +0 -9
- package/dist/utils/tips.cjs +0 -2
- package/dist/utils/tips.cjs.map +0 -1
- package/dist/utils/tips.d.ts +0 -7
- package/dist/utils/tips.js +0 -45
- package/dist/utils/tips.js.map +0 -1
- package/dist/utils/workspace-relative-path.cjs +0 -2
- package/dist/utils/workspace-relative-path.cjs.map +0 -1
- package/dist/utils/workspace-relative-path.d.ts +0 -10
- package/dist/utils/workspace-relative-path.js +0 -22
- package/dist/utils/workspace-relative-path.js.map +0 -1
- /package/build/assets/{vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~dcc51rps-rfV8mQ9m.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~ew9ih1s8-rfV8mQ9m.js} +0 -0
- /package/build/assets/{vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~ox0jfsa0-cHFhpUBq.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~i58xkef6-cHFhpUBq.js} +0 -0
package/dist/utils/utils.d.ts
CHANGED
|
@@ -126,40 +126,6 @@ export declare const getPRShort: (isGitLab: boolean) => "MR" | "PR";
|
|
|
126
126
|
* constructPullRequestUrl(789, "bitbucket", "PROJECT/repo", "server.com") // "https://server.com/projects/PROJECT/repos/repo/pull-requests/789"
|
|
127
127
|
*/
|
|
128
128
|
export declare const constructPullRequestUrl: (prNumber: number, provider: Provider, repositoryName: string, host?: string | null) => string;
|
|
129
|
-
/**
|
|
130
|
-
* Construct the microagent URL for different providers
|
|
131
|
-
* @param gitProvider The git provider
|
|
132
|
-
* @param repositoryName The repository name in format "owner/repo"
|
|
133
|
-
* @param microagentPath The path to the microagent in the repository
|
|
134
|
-
* @returns The URL to the microagent file in the Git provider
|
|
135
|
-
*
|
|
136
|
-
* @example
|
|
137
|
-
* constructMicroagentUrl("github", "owner/repo", ".openhands/microagents/tell-me-a-joke.md")
|
|
138
|
-
* // "https://github.com/owner/repo/blob/main/.openhands/microagents/tell-me-a-joke.md"
|
|
139
|
-
* constructMicroagentUrl("gitlab", "owner/repo", "microagents/git-helper.md")
|
|
140
|
-
* // "https://gitlab.com/owner/repo/-/blob/main/microagents/git-helper.md"
|
|
141
|
-
* constructMicroagentUrl("bitbucket", "owner/repo", ".openhands/microagents/docker-helper.md")
|
|
142
|
-
* // "https://bitbucket.org/owner/repo/src/main/.openhands/microagents/docker-helper.md"
|
|
143
|
-
*/
|
|
144
|
-
export declare const constructMicroagentUrl: (gitProvider: Provider, repositoryName: string, microagentPath: string, host?: string | null) => string;
|
|
145
|
-
/**
|
|
146
|
-
* Extract repository owner, repo name, and file path from repository and microagent data
|
|
147
|
-
* @param selectedRepository The selected repository object with full_name property
|
|
148
|
-
* @param microagent The microagent object with path property
|
|
149
|
-
* @returns Object containing owner, repo, and filePath
|
|
150
|
-
*
|
|
151
|
-
* @example
|
|
152
|
-
* const { owner, repo, filePath } = extractRepositoryInfo(selectedRepository, microagent);
|
|
153
|
-
*/
|
|
154
|
-
export declare const extractRepositoryInfo: (selectedRepository: {
|
|
155
|
-
full_name?: string;
|
|
156
|
-
} | null | undefined, microagent: {
|
|
157
|
-
path?: string;
|
|
158
|
-
} | null | undefined) => {
|
|
159
|
-
owner: string;
|
|
160
|
-
repo: string;
|
|
161
|
-
filePath: string;
|
|
162
|
-
};
|
|
163
129
|
/**
|
|
164
130
|
* Construct the repository URL for different providers
|
|
165
131
|
* @param provider The git provider
|
|
@@ -187,6 +153,7 @@ export declare const constructRepositoryUrl: (provider: Provider, repositoryName
|
|
|
187
153
|
* constructBranchUrl("bitbucket", "PROJECT/repo", "feature", "server.com") // "https://server.com/projects/PROJECT/repos/repo/browse?at=refs/heads/feature"
|
|
188
154
|
*/
|
|
189
155
|
export declare const constructBranchUrl: (provider: Provider, repositoryName: string, branchName: string, host?: string | null) => string;
|
|
156
|
+
export declare const getGitCommitPrompt: () => string;
|
|
190
157
|
/**
|
|
191
158
|
* Generate a git pull prompt
|
|
192
159
|
* @returns The git pull prompt
|
|
@@ -218,13 +185,6 @@ export declare const getCreateNewBranchPrompt: () => string;
|
|
|
218
185
|
export declare function getTotalTaskCount(suggestedTasks: SuggestedTaskGroup[] | undefined): number;
|
|
219
186
|
export declare function getLimitedTaskGroups(suggestedTasks: SuggestedTaskGroup[], maxTasks: number): SuggestedTaskGroup[];
|
|
220
187
|
export declare function getDisplayedTaskGroups(suggestedTasks: SuggestedTaskGroup[] | undefined, isExpanded: boolean): SuggestedTaskGroup[];
|
|
221
|
-
/**
|
|
222
|
-
* Get the repository markdown creation prompt with additional PR creation instructions
|
|
223
|
-
* @param gitProvider The git provider to use for generating provider-specific text
|
|
224
|
-
* @param query Optional custom query to use instead of the default prompt
|
|
225
|
-
* @returns The complete prompt for creating repository markdown and PR instructions
|
|
226
|
-
*/
|
|
227
|
-
export declare const getRepoMdCreatePrompt: (gitProvider: Provider, query?: string) => string;
|
|
228
188
|
/**
|
|
229
189
|
* Get the label for a conversation status
|
|
230
190
|
* @param status The conversation status
|
package/dist/utils/utils.js
CHANGED
|
@@ -34,14 +34,35 @@ var c = (e, t) => {
|
|
|
34
34
|
case "forgejo": return "https://codeberg.org";
|
|
35
35
|
default: return "";
|
|
36
36
|
}
|
|
37
|
-
}, g = (e) => e === "gitlab" ? "GitLab" : e === "bitbucket" ? "Bitbucket" : e === "bitbucket_data_center" ? "Bitbucket Data Center" : e === "azure_devops" ? "Azure DevOps" : e === "forgejo" ? "Forgejo" : "GitHub", _ = (e) => e ? "merge request" : "pull request", v = (e) => e ? "MR" : "PR", y = (e, t, n) => {
|
|
37
|
+
}, g = (e) => e === "gitlab" ? "GitLab" : e === "bitbucket" ? "Bitbucket" : e === "bitbucket_data_center" ? "Bitbucket Data Center" : e === "azure_devops" ? "Azure DevOps" : e === "forgejo" ? "Forgejo" : "GitHub", _ = (e) => e ? "merge request" : "pull request", v = (e) => e ? "MR" : "PR", y = (e, t, n, r) => {
|
|
38
|
+
let i = h(t, r);
|
|
39
|
+
switch (t) {
|
|
40
|
+
case "github": return `${i}/${n}/pull/${e}`;
|
|
41
|
+
case "forgejo": return `${i}/${n}/pull/${e}`;
|
|
42
|
+
case "gitlab": return `${i}/${n}/-/merge_requests/${e}`;
|
|
43
|
+
case "bitbucket": return `${i}/${n}/pull-requests/${e}`;
|
|
44
|
+
case "bitbucket_data_center": {
|
|
45
|
+
let [t, r] = n.split("/");
|
|
46
|
+
return `${i}/projects/${t}/repos/${r}/pull-requests/${e}`;
|
|
47
|
+
}
|
|
48
|
+
case "azure_devops": {
|
|
49
|
+
let t = n.split("/");
|
|
50
|
+
if (t.length === 3) {
|
|
51
|
+
let [n, r, a] = t;
|
|
52
|
+
return `${i}/${n}/${r}/_git/${a}/pullrequest/${e}`;
|
|
53
|
+
}
|
|
54
|
+
return "";
|
|
55
|
+
}
|
|
56
|
+
default: return "";
|
|
57
|
+
}
|
|
58
|
+
}, b = (e, t, n) => {
|
|
38
59
|
let r = h(e, n);
|
|
39
60
|
if (e === "bitbucket_data_center") {
|
|
40
61
|
let [e, n] = t.split("/");
|
|
41
62
|
return `${r}/projects/${e}/repos/${n}`;
|
|
42
63
|
}
|
|
43
64
|
return `${r}/${t}`;
|
|
44
|
-
},
|
|
65
|
+
}, x = (e, t, n, r) => {
|
|
45
66
|
let i = h(e, r);
|
|
46
67
|
switch (e) {
|
|
47
68
|
case "github": return `${i}/${t}/tree/${n}`;
|
|
@@ -66,17 +87,17 @@ var c = (e, t) => {
|
|
|
66
87
|
}
|
|
67
88
|
default: return "";
|
|
68
89
|
}
|
|
69
|
-
},
|
|
90
|
+
}, S = "Please review the current changes and create a git commit with a concise, descriptive message.", C = () => S, w = () => "Please pull the latest code from the repository.", T = (e) => `Please push the changes to a remote branch on ${g(e)}, but do NOT create a ${_(e === "gitlab")}. Check your current branch name first - if it's main, master, deploy, or another common default branch name, create a new branch with a descriptive name related to your changes. Otherwise, use the exact SAME branch name as the one you are currently on.`, E = (e) => {
|
|
70
91
|
let t = g(e), n = _(e === "gitlab");
|
|
71
92
|
return `Please push the changes to ${t} and open a ${n}. If you're on a default branch (e.g., main, master, deploy), create a new branch with a descriptive name otherwise use the current branch. If a ${n} template exists in the repository, please follow it when creating the ${v(e === "gitlab")} description.`;
|
|
72
|
-
},
|
|
93
|
+
}, D = () => "Please create a new branch with a descriptive name related to the work you plan to do.", O = (e) => !!e && e !== "ERROR" && e !== "READY", k = (e) => {
|
|
73
94
|
let { isPausing: t, isTask: n, taskStatus: i, isStartingStatus: s, isStopStatus: c, curAgentState: l } = e;
|
|
74
95
|
return t ? "#FFD600" : n && i ? i === "ERROR" ? a : "#FFD600" : s ? "#FFD600" : c ? "#ffffff" : l === r.ERROR ? a : o;
|
|
75
96
|
};
|
|
76
|
-
function
|
|
97
|
+
function A({ isPausing: t = !1, isTask: n, taskStatus: a, taskDetail: o, isStartingStatus: s, isStopStatus: c, curAgentState: l, errorMessage: u, t: d }) {
|
|
77
98
|
return t ? d(e.COMMON$STOPPING) : n && a ? a === "ERROR" ? o || d(e.CONVERSATION$ERROR_STARTING_CONVERSATION) : a === "READY" ? d(e.CONVERSATION$READY) : o || d(i(a)) : s ? d(e.COMMON$STARTING) : c ? d(e.COMMON$SERVER_STOPPED) : l === r.ERROR ? u || d(e.COMMON$ERROR) : d(e.COMMON$RUNNING);
|
|
78
99
|
}
|
|
79
100
|
//#endregion
|
|
80
|
-
export { s as cn,
|
|
101
|
+
export { s as cn, x as constructBranchUrl, y as constructPullRequestUrl, b as constructRepositoryUrl, c as downloadBlob, D as getCreateNewBranchPrompt, E as getCreatePRPrompt, p as getFileExtension, C as getGitCommitPrompt, h as getGitProviderBaseUrl, w as getGitPullPrompt, T as getGitPushPrompt, g as getProviderName, k as getStatusColor, A as getStatusText, l as getStyleHeightPx, f as isMobileDevice, d as isMobileUserAgent, O as isTaskPolling, u as setStyleHeightPx, m as shouldUseInstallationRepos };
|
|
81
102
|
|
|
82
103
|
//# sourceMappingURL=utils.js.map
|
package/dist/utils/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":[],"sources":["../../src/utils/utils.ts"],"sourcesContent":["import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\nimport { Provider } from \"#/types/settings\";\nimport { SuggestedTaskGroup } from \"#/utils/types\";\nimport { ConversationStatus } from \"#/types/conversation-status\";\nimport { GitRepository } from \"#/types/git\";\nimport { sanitizeQuery } from \"#/utils/sanitize-query\";\nimport { PRODUCT_URL } from \"#/utils/constants\";\nimport { AgentState } from \"#/types/agent-state\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { getTaskStatusI18nKey } from \"#/utils/status\";\nimport type { AppConversationStartTaskStatus } from \"#/api/conversation-service/agent-server-conversation-service.types\";\nimport {\n OH_STATUS_ERROR_COLOR,\n OH_STATUS_SUCCESS_COLOR,\n} from \"#/constants/status-colors\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\n/**\n * Trigger a download for a provided Blob with the given filename\n */\nexport const downloadBlob = (blob: Blob, filename: string): void => {\n const url = window.URL.createObjectURL(blob);\n const link = document.createElement(\"a\");\n link.href = url;\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n window.URL.revokeObjectURL(url);\n};\n\n/**\n * Get the numeric height value from an element's style property\n * @param el The HTML element to get the height from\n * @param fallback The fallback value to return if style height is invalid\n * @returns The numeric height value in pixels, or the fallback value\n *\n * @example\n * getStyleHeightPx(element, 20) // Returns 20 if element.style.height is \"auto\" or invalid\n * getStyleHeightPx(element, 20) // Returns 100 if element.style.height is \"100px\"\n */\nexport const getStyleHeightPx = (el: HTMLElement, fallback: number): number => {\n const elementHeight = parseFloat(el.style.height || \"\");\n return Number.isFinite(elementHeight) ? elementHeight : fallback;\n};\n\n/**\n * Set the height style property of an element to a specific pixel value\n * @param el The HTML element to set the height for\n * @param height The height value in pixels to set\n *\n * @example\n * setStyleHeightPx(element, 100) // Sets element.style.height to \"100px\"\n * setStyleHeightPx(textarea, 200) // Sets textarea.style.height to \"200px\"\n */\nexport const setStyleHeightPx = (el: HTMLElement, height: number): void => {\n el.style.setProperty(\"height\", `${height}px`);\n};\n\n/**\n * Detect a phone/tablet user agent (Android, iPhone, iPad, …).\n * Unlike isMobileDevice, this ignores touch capability, so a desktop OS with\n * a touchscreen (e.g. a Windows 2-in-1) is NOT matched. Use this when the\n * decision depends on having a physical keyboard rather than on touch input.\n */\nexport const isMobileUserAgent = (): boolean =>\n /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n navigator.userAgent,\n );\n\n/**\n * Detect if the user is on a mobile device.\n * Touch support alone is not sufficient — touchscreen laptops have touch\n * but use a mouse/trackpad as primary input. We check that the primary\n * pointing device is coarse (finger) to avoid false positives.\n */\nexport const isMobileDevice = (): boolean => {\n if (isMobileUserAgent()) return true;\n\n const hasTouch = \"ontouchstart\" in window || navigator.maxTouchPoints > 0;\n if (!hasTouch) return false;\n\n // If matchMedia is available, check whether the primary pointer is fine\n // (mouse/trackpad). Touchscreen laptops report fine, real mobile devices don't.\n if (typeof window.matchMedia === \"function\") {\n return !window.matchMedia(\"(pointer: fine)\").matches;\n }\n\n // Fallback: touch present but no matchMedia — assume mobile\n return true;\n};\n\n/**\n * Checks if the current domain is the production domain\n * @returns True if the current domain matches the production URL\n */\nexport const isProductionDomain = (): boolean =>\n window.location.origin === PRODUCT_URL.PRODUCTION;\n\ninterface EventActionHistory {\n args?: {\n LLM_API_KEY?: string;\n [key: string]: unknown;\n };\n extras?: {\n open_page_urls: string[];\n active_page_index: number;\n dom_object: Record<string, unknown>;\n axtree_object: Record<string, unknown>;\n extra_element_properties: Record<string, unknown>;\n last_browser_action: string;\n last_browser_action_error: unknown;\n focused_element_bid: string;\n };\n [key: string]: unknown;\n}\n\nexport const removeUnwantedKeys = (\n data: EventActionHistory[],\n): EventActionHistory[] => {\n const UNDESIRED_KEYS = [\n \"open_page_urls\",\n \"active_page_index\",\n \"dom_object\",\n \"axtree_object\",\n \"extra_element_properties\",\n \"last_browser_action\",\n \"last_browser_action_error\",\n \"focused_element_bid\",\n ];\n\n return data\n .filter((item) => {\n // Skip items that have a status key\n if (\"status\" in item) {\n return false;\n }\n return true;\n })\n .map((item) => {\n // Create a shallow copy of item\n const newItem = { ...item };\n\n // Check if extras exists and delete it from a new extras object\n if (newItem.extras) {\n const newExtras = { ...newItem.extras };\n UNDESIRED_KEYS.forEach((key) => {\n delete newExtras[key as keyof typeof newExtras];\n });\n newItem.extras = newExtras;\n }\n\n return newItem;\n });\n};\n\n/**\n * Get file extension from file name in uppercase format\n * @param fileName The file name to extract extension from\n * @returns The file extension in uppercase, or \"FILE\" if no extension found\n *\n * @example\n * getFileExtension(\"document.pdf\") // \"PDF\"\n * getFileExtension(\"image.jpeg\") // \"JPEG\"\n * getFileExtension(\"noextension\") // \"FILE\"\n */\nexport const getFileExtension = (fileName: string): string => {\n const extension = fileName.split(\".\").pop()?.toUpperCase();\n return extension || \"FILE\";\n};\n\n/**\n * Whether to use the installation-scoped repo flow\n * (`/api/v1/git/installations/search` → `/api/v1/git/repositories/search?installation_id=…`)\n * for the given provider/backend combo.\n *\n * Mirrors OpenHands' cloud frontend (parameterized by `app_mode`):\n * - bitbucket / bitbucket_data_center → always installation-based\n * - github → installation-based ONLY when the active backend is cloud\n * - gitlab / azure_devops / forgejo → direct (search) flow\n *\n * `appMode` accepts the active backend `kind` (\"local\" | \"cloud\") so call\n * sites can hand it through directly.\n */\nexport const shouldUseInstallationRepos = (\n provider: Provider | null | undefined,\n appMode?: \"local\" | \"cloud\",\n) => {\n if (!provider) return false;\n\n switch (provider) {\n case \"bitbucket\":\n case \"bitbucket_data_center\":\n return true;\n case \"github\":\n return appMode === \"cloud\";\n default:\n return false;\n }\n};\n\nexport const getGitProviderBaseUrl = (\n gitProvider: Provider,\n host?: string | null,\n): string => {\n // If custom host provided, use it (with https:// prefix if needed)\n if (host && host.trim() !== \"\") {\n return host.startsWith(\"http\") ? host : `https://${host}`;\n }\n\n // Fall back to defaults\n switch (gitProvider) {\n case \"github\":\n return \"https://github.com\";\n case \"gitlab\":\n return \"https://gitlab.com\";\n case \"bitbucket\":\n return \"https://bitbucket.org\";\n case \"azure_devops\":\n return \"https://dev.azure.com\";\n case \"forgejo\":\n // Default UI links to Codeberg unless a custom host is available in settings\n // Note: UI link builders don't currently receive host; consider plumbing settings if needed\n return \"https://codeberg.org\";\n default:\n return \"\";\n }\n};\n\n/**\n * Get the name of the git provider\n * @param gitProvider The git provider\n * @returns The name of the git provider\n */\nexport const getProviderName = (gitProvider: Provider) => {\n if (gitProvider === \"gitlab\") return \"GitLab\";\n if (gitProvider === \"bitbucket\") return \"Bitbucket\";\n if (gitProvider === \"bitbucket_data_center\") return \"Bitbucket Data Center\";\n if (gitProvider === \"azure_devops\") return \"Azure DevOps\";\n if (gitProvider === \"forgejo\") return \"Forgejo\";\n return \"GitHub\";\n};\n\n/**\n * Get the name of the PR\n * @param isGitLab Whether the git provider is GitLab\n * @returns The name of the PR\n */\nexport const getPR = (isGitLab: boolean) =>\n isGitLab ? \"merge request\" : \"pull request\";\n\n/**\n * Get the short name of the PR\n * @param isGitLab Whether the git provider is GitLab\n * @returns The short name of the PR\n */\nexport const getPRShort = (isGitLab: boolean) => (isGitLab ? \"MR\" : \"PR\");\n\n/**\n * Construct the pull request (merge request) URL for different providers\n * @param prNumber The pull request number\n * @param provider The git provider\n * @param repositoryName The repository name in format \"owner/repo\"\n * @returns The pull request URL\n *\n * @example\n * constructPullRequestUrl(123, \"github\", \"owner/repo\") // \"https://github.com/owner/repo/pull/123\"\n * constructPullRequestUrl(456, \"gitlab\", \"owner/repo\") // \"https://gitlab.com/owner/repo/-/merge_requests/456\"\n * constructPullRequestUrl(789, \"bitbucket\", \"owner/repo\") // \"https://bitbucket.org/owner/repo/pull-requests/789\"\n * constructPullRequestUrl(789, \"bitbucket\", \"PROJECT/repo\", \"server.com\") // \"https://server.com/projects/PROJECT/repos/repo/pull-requests/789\"\n */\nexport const constructPullRequestUrl = (\n prNumber: number,\n provider: Provider,\n repositoryName: string,\n host?: string | null,\n): string => {\n const baseUrl = getGitProviderBaseUrl(provider, host);\n\n switch (provider) {\n case \"github\":\n return `${baseUrl}/${repositoryName}/pull/${prNumber}`;\n case \"forgejo\":\n return `${baseUrl}/${repositoryName}/pull/${prNumber}`;\n case \"gitlab\":\n return `${baseUrl}/${repositoryName}/-/merge_requests/${prNumber}`;\n case \"bitbucket\":\n return `${baseUrl}/${repositoryName}/pull-requests/${prNumber}`;\n case \"bitbucket_data_center\": {\n const [project, repo] = repositoryName.split(\"/\");\n return `${baseUrl}/projects/${project}/repos/${repo}/pull-requests/${prNumber}`;\n }\n case \"azure_devops\": {\n // Azure DevOps format: org/project/repo\n const parts = repositoryName.split(\"/\");\n if (parts.length === 3) {\n const [org, project, repo] = parts;\n return `${baseUrl}/${org}/${project}/_git/${repo}/pullrequest/${prNumber}`;\n }\n return \"\";\n }\n default:\n return \"\";\n }\n};\n\n/**\n * Construct the microagent URL for different providers\n * @param gitProvider The git provider\n * @param repositoryName The repository name in format \"owner/repo\"\n * @param microagentPath The path to the microagent in the repository\n * @returns The URL to the microagent file in the Git provider\n *\n * @example\n * constructMicroagentUrl(\"github\", \"owner/repo\", \".openhands/microagents/tell-me-a-joke.md\")\n * // \"https://github.com/owner/repo/blob/main/.openhands/microagents/tell-me-a-joke.md\"\n * constructMicroagentUrl(\"gitlab\", \"owner/repo\", \"microagents/git-helper.md\")\n * // \"https://gitlab.com/owner/repo/-/blob/main/microagents/git-helper.md\"\n * constructMicroagentUrl(\"bitbucket\", \"owner/repo\", \".openhands/microagents/docker-helper.md\")\n * // \"https://bitbucket.org/owner/repo/src/main/.openhands/microagents/docker-helper.md\"\n */\nexport const constructMicroagentUrl = (\n gitProvider: Provider,\n repositoryName: string,\n microagentPath: string,\n host?: string | null,\n): string => {\n const baseUrl = getGitProviderBaseUrl(gitProvider, host);\n\n switch (gitProvider) {\n case \"github\":\n return `${baseUrl}/${repositoryName}/blob/main/${microagentPath}`;\n case \"forgejo\":\n return `${baseUrl}/${repositoryName}/src/branch/main/${microagentPath}`;\n case \"gitlab\":\n return `${baseUrl}/${repositoryName}/-/blob/main/${microagentPath}`;\n case \"bitbucket\":\n return `${baseUrl}/${repositoryName}/src/main/${microagentPath}`;\n case \"bitbucket_data_center\": {\n const [project, repo] = repositoryName.split(\"/\");\n return `${baseUrl}/projects/${project}/repos/${repo}/browse/${microagentPath}?at=refs/heads/main`;\n }\n case \"azure_devops\": {\n // Azure DevOps format: org/project/repo\n const parts = repositoryName.split(\"/\");\n if (parts.length === 3) {\n const [org, project, repo] = parts;\n return `${baseUrl}/${org}/${project}/_git/${repo}?path=/${microagentPath}&version=GBmain`;\n }\n return \"\";\n }\n default:\n return \"\";\n }\n};\n\n/**\n * Extract repository owner, repo name, and file path from repository and microagent data\n * @param selectedRepository The selected repository object with full_name property\n * @param microagent The microagent object with path property\n * @returns Object containing owner, repo, and filePath\n *\n * @example\n * const { owner, repo, filePath } = extractRepositoryInfo(selectedRepository, microagent);\n */\nexport const extractRepositoryInfo = (\n selectedRepository: { full_name?: string } | null | undefined,\n microagent: { path?: string } | null | undefined,\n) => {\n const [owner, repo] = selectedRepository?.full_name?.split(\"/\") || [];\n const filePath = microagent?.path || \"\";\n\n return { owner, repo, filePath };\n};\n\n/**\n * Construct the repository URL for different providers\n * @param provider The git provider\n * @param repositoryName The repository name in format \"owner/repo\"\n * @returns The repository URL\n *\n * @example\n * constructRepositoryUrl(\"github\", \"owner/repo\") // \"https://github.com/owner/repo\"\n * constructRepositoryUrl(\"gitlab\", \"owner/repo\") // \"https://gitlab.com/owner/repo\"\n * constructRepositoryUrl(\"bitbucket\", \"owner/repo\") // \"https://bitbucket.org/owner/repo\"\n */\nexport const constructRepositoryUrl = (\n provider: Provider,\n repositoryName: string,\n host?: string | null,\n): string => {\n const baseUrl = getGitProviderBaseUrl(provider, host);\n if (provider === \"bitbucket_data_center\") {\n const [project, repo] = repositoryName.split(\"/\");\n return `${baseUrl}/projects/${project}/repos/${repo}`;\n }\n return `${baseUrl}/${repositoryName}`;\n};\n\n/**\n * Construct the branch URL for different providers\n * @param provider The git provider\n * @param repositoryName The repository name in format \"owner/repo\"\n * @param branchName The branch name\n * @param host Optional custom host for self-hosted instances\n * @returns The branch URL\n *\n * @example\n * constructBranchUrl(\"github\", \"owner/repo\", \"main\") // \"https://github.com/owner/repo/tree/main\"\n * constructBranchUrl(\"gitlab\", \"owner/repo\", \"develop\") // \"https://gitlab.com/owner/repo/-/tree/develop\"\n * constructBranchUrl(\"bitbucket\", \"owner/repo\", \"feature\") // \"https://bitbucket.org/owner/repo/src/feature\"\n * constructBranchUrl(\"bitbucket\", \"PROJECT/repo\", \"feature\", \"server.com\") // \"https://server.com/projects/PROJECT/repos/repo/browse?at=refs/heads/feature\"\n */\nexport const constructBranchUrl = (\n provider: Provider,\n repositoryName: string,\n branchName: string,\n host?: string | null,\n): string => {\n const baseUrl = getGitProviderBaseUrl(provider, host);\n\n switch (provider) {\n case \"github\":\n return `${baseUrl}/${repositoryName}/tree/${branchName}`;\n case \"forgejo\":\n return `${baseUrl}/${repositoryName}/src/branch/${branchName}`;\n case \"gitlab\":\n return `${baseUrl}/${repositoryName}/-/tree/${branchName}`;\n case \"bitbucket\":\n return `${baseUrl}/${repositoryName}/src/${branchName}`;\n case \"bitbucket_data_center\": {\n // Bitbucket Server format: /projects/{PROJECT}/repos/{repo}/browse?at=refs/heads/{branch}\n const parts = repositoryName.split(\"/\");\n if (parts.length >= 2) {\n const [project, repo] = parts;\n return `${baseUrl}/projects/${project}/repos/${repo}/browse?at=refs/heads/${branchName}`;\n }\n return \"\";\n }\n case \"azure_devops\": {\n // Azure DevOps format: org/project/repo\n const parts = repositoryName.split(\"/\");\n if (parts.length === 3) {\n const [org, project, repo] = parts;\n return `${baseUrl}/${org}/${project}/_git/${repo}?version=GB${branchName}`;\n }\n return \"\";\n }\n default:\n return \"\";\n }\n};\n\n// Git Action Prompts\n\n/**\n * Generate a git pull prompt\n * @returns The git pull prompt\n */\nexport const getGitPullPrompt = (): string =>\n \"Please pull the latest code from the repository.\";\n\n/**\n * Generate a git push prompt\n * @param gitProvider The git provider\n * @returns The git push prompt\n */\nexport const getGitPushPrompt = (gitProvider: Provider): string => {\n const providerName = getProviderName(gitProvider);\n const pr = getPR(gitProvider === \"gitlab\");\n\n return `Please push the changes to a remote branch on ${providerName}, but do NOT create a ${pr}. Check your current branch name first - if it's main, master, deploy, or another common default branch name, create a new branch with a descriptive name related to your changes. Otherwise, use the exact SAME branch name as the one you are currently on.`;\n};\n\n/**\n * Generate a create pull request prompt\n * @param gitProvider The git provider\n * @returns The create PR prompt\n */\nexport const getCreatePRPrompt = (gitProvider: Provider): string => {\n const providerName = getProviderName(gitProvider);\n const pr = getPR(gitProvider === \"gitlab\");\n const prShort = getPRShort(gitProvider === \"gitlab\");\n\n return `Please push the changes to ${providerName} and open a ${pr}. If you're on a default branch (e.g., main, master, deploy), create a new branch with a descriptive name otherwise use the current branch. If a ${pr} template exists in the repository, please follow it when creating the ${prShort} description.`;\n};\n\n/**\n * Generate a push to existing PR prompt\n * @param gitProvider The git provider\n * @returns The push to PR prompt\n */\nexport const getPushToPRPrompt = (gitProvider: Provider): string => {\n const pr = getPR(gitProvider === \"gitlab\");\n\n return `Please push the latest changes to the existing ${pr}.`;\n};\n\n/**\n * Generate a create new branch prompt\n * @returns The create new branch prompt\n */\nexport const getCreateNewBranchPrompt = (): string =>\n \"Please create a new branch with a descriptive name related to the work you plan to do.\";\n\n// Helper functions\nexport function getTotalTaskCount(\n suggestedTasks: SuggestedTaskGroup[] | undefined,\n): number {\n if (!suggestedTasks) return 0;\n return suggestedTasks.flatMap((group) => group.tasks).length;\n}\n\nexport function getLimitedTaskGroups(\n suggestedTasks: SuggestedTaskGroup[],\n maxTasks: number,\n): SuggestedTaskGroup[] {\n const limitedGroups: SuggestedTaskGroup[] = [];\n let taskCount = 0;\n\n for (const group of suggestedTasks) {\n if (taskCount >= maxTasks) break;\n\n const remainingTasksNeeded = maxTasks - taskCount;\n const tasksToShow = group.tasks.slice(0, remainingTasksNeeded);\n\n if (tasksToShow.length > 0) {\n limitedGroups.push({\n ...group,\n tasks: tasksToShow,\n });\n taskCount += tasksToShow.length;\n }\n }\n\n return limitedGroups;\n}\n\nexport function getDisplayedTaskGroups(\n suggestedTasks: SuggestedTaskGroup[] | undefined,\n isExpanded: boolean,\n): SuggestedTaskGroup[] {\n if (!suggestedTasks || suggestedTasks.length === 0) {\n return [];\n }\n\n if (isExpanded) {\n return suggestedTasks;\n }\n\n return getLimitedTaskGroups(suggestedTasks, 3);\n}\n\n/**\n * Get the repository markdown creation prompt with additional PR creation instructions\n * @param gitProvider The git provider to use for generating provider-specific text\n * @param query Optional custom query to use instead of the default prompt\n * @returns The complete prompt for creating repository markdown and PR instructions\n */\nexport const getRepoMdCreatePrompt = (\n gitProvider: Provider,\n query?: string,\n): string => {\n const providerName = getProviderName(gitProvider);\n const pr = getPR(gitProvider === \"gitlab\");\n const prShort = getPRShort(gitProvider === \"gitlab\");\n\n return `Please explore this repository. Create the file .openhands/microagents/repo.md with:\n ${\n query\n ? `- ${query}`\n : `- A description of the project\n - An overview of the file structure\n - Any information on how to run tests or other relevant commands\n - Any other information that would be helpful to a brand new developer\n Keep it short--just a few paragraphs will do.`\n }\n\nPlease push the changes to your branch on ${providerName} and create a ${pr}. Please create a meaningful branch name that describes the changes. If a ${pr} template exists in the repository, please follow it when creating the ${prShort} description.`;\n};\n\n/**\n * Get the label for a conversation status\n * @param status The conversation status\n * @returns The localized label for the status\n */\nexport const getConversationStatusLabel = (\n status: ConversationStatus,\n): string => {\n switch (status) {\n case \"STOPPED\":\n return \"COMMON$STOPPED\";\n case \"RUNNING\":\n return \"COMMON$RUNNING\";\n case \"STARTING\":\n return \"COMMON$STARTING\";\n case \"ERROR\":\n return \"COMMON$ERROR\";\n case \"ARCHIVED\":\n return \"COMMON$ARCHIVED\"; // Use STOPPED for archived conversations\n default:\n return \"COMMON$UNKNOWN\";\n }\n};\n\n// Task Tracking Utility Functions\n\n/**\n * Get the status icon for a task status\n * @param status The task status\n * @returns The emoji icon for the status\n */\nexport const getStatusIcon = (status: string) => {\n switch (status) {\n case \"todo\":\n return \"⏳\";\n case \"in_progress\":\n return \"🔄\";\n case \"done\":\n return \"✅\";\n default:\n return \"❓\";\n }\n};\n\n/**\n * Get the CSS class names for a task status badge\n * @param status The task status\n * @returns The CSS class names for styling the status badge\n */\nexport const getStatusClassName = (status: string) => {\n if (status === \"done\") {\n return \"bg-green-800 text-green-200\";\n }\n if (status === \"in_progress\") {\n return \"bg-yellow-800 text-yellow-200\";\n }\n return \"bg-tertiary text-[var(--oh-text-tertiary)]\";\n};\n\n/**\n * Helper function to apply client-side filtering based on search query\n * @param repo The Git repository to check\n * @param searchQuery The search query string\n * @returns True if the repository should be included based on the search query\n */\nexport const shouldIncludeRepository = (\n repo: GitRepository,\n searchQuery: string,\n): boolean => {\n if (!searchQuery.trim()) {\n return true;\n }\n\n const sanitizedQuery = sanitizeQuery(searchQuery);\n const sanitizedRepoName = sanitizeQuery(repo.full_name);\n return sanitizedRepoName.includes(sanitizedQuery);\n};\n\n/**\n * Get the OpenHands query string based on the provider\n * @param provider The git provider\n * @returns The query string for searching OpenHands repositories\n */\nexport const getOpenHandsQuery = (provider: Provider | null): string => {\n const providerRepositorySuffix: Record<string, string> = {\n gitlab: \"openhands-config\",\n azure_devops: \"openhands-config\",\n default: \".openhands\",\n } as const;\n\n return provider && provider in providerRepositorySuffix\n ? providerRepositorySuffix[provider]\n : providerRepositorySuffix.default;\n};\n\n/**\n * Check if a repository has the OpenHands suffix based on the provider\n * @param repo The Git repository to check\n * @param provider The git provider\n * @returns True if the repository has the OpenHands suffix\n */\nexport const hasOpenHandsSuffix = (\n repo: GitRepository,\n provider: Provider | null,\n): boolean => repo.full_name.endsWith(`/${getOpenHandsQuery(provider)}`);\n\n/**\n * Build headers for V1 API requests that require session authentication\n * @param sessionApiKey Session API key for authentication\n * @returns Headers object with X-Session-API-Key if provided\n */\nexport const buildSessionHeaders = (\n sessionApiKey?: string | null,\n): Record<string, string> => {\n const headers: Record<string, string> = {};\n if (sessionApiKey) {\n headers[\"X-Session-API-Key\"] = sessionApiKey;\n }\n return headers;\n};\n\n/**\n * Check if a task is currently being polled (loading state)\n * @param taskStatus The task status string (e.g., \"WORKING\", \"ERROR\", \"READY\")\n * @returns True if the task is in a loading state (not ERROR and not READY)\n *\n * @example\n * isTaskPolling(\"WORKING\") // Returns true\n * isTaskPolling(\"PREPARING_REPOSITORY\") // Returns true\n * isTaskPolling(\"READY\") // Returns false\n * isTaskPolling(\"ERROR\") // Returns false\n * isTaskPolling(null) // Returns false\n * isTaskPolling(undefined) // Returns false\n */\nexport const isTaskPolling = (taskStatus: string | null | undefined): boolean =>\n !!taskStatus && taskStatus !== \"ERROR\" && taskStatus !== \"READY\";\n\n/**\n * Get the appropriate color based on agent status\n * @param options Configuration object for status color calculation\n * @param options.isPausing Whether the agent is currently pausing\n * @param options.isTask Whether we're polling a task\n * @param options.taskStatus The task status string (e.g., \"ERROR\", \"READY\")\n * @param options.isStartingStatus Whether the agent is in a starting state (LOADING or INIT)\n * @param options.isStopStatus Whether the conversation status is STOPPED\n * @param options.curAgentState The current agent state\n * @returns The hex color code for the status\n *\n * @example\n * getStatusColor({\n * isPausing: false,\n * isTask: false,\n * taskStatus: undefined,\n * isStartingStatus: false,\n * isStopStatus: false,\n * curAgentState: AgentState.RUNNING\n * }) // Returns \"var(--oh-status-success)\"\n */\nexport const getStatusColor = (options: {\n isPausing: boolean;\n isTask: boolean;\n taskStatus?: string | null;\n isStartingStatus: boolean;\n isStopStatus: boolean;\n curAgentState: AgentState;\n}): string => {\n const {\n isPausing,\n isTask,\n taskStatus,\n isStartingStatus,\n isStopStatus,\n curAgentState,\n } = options;\n\n // Show pausing status\n if (isPausing) {\n return \"#FFD600\";\n }\n\n // Show task status if we're polling a task\n if (isTask && taskStatus) {\n if (taskStatus === \"ERROR\") {\n return OH_STATUS_ERROR_COLOR;\n }\n return \"#FFD600\";\n }\n\n if (isStartingStatus) {\n return \"#FFD600\";\n }\n if (isStopStatus) {\n return \"#ffffff\";\n }\n if (curAgentState === AgentState.ERROR) {\n return OH_STATUS_ERROR_COLOR;\n }\n return OH_STATUS_SUCCESS_COLOR;\n};\n\ninterface GetStatusTextArgs {\n isPausing: boolean;\n isTask: boolean;\n taskStatus?: AppConversationStartTaskStatus | null;\n taskDetail?: string | null;\n isStartingStatus: boolean;\n isStopStatus: boolean;\n curAgentState: AgentState;\n errorMessage?: string | null;\n t: (t: string) => string;\n}\n\n/**\n * Get the server status text based on agent and task state\n *\n * @param options Configuration object for status text calculation\n * @param options.isPausing Whether the agent is currently pausing\n * @param options.isTask Whether we're polling a task\n * @param options.taskStatus The task status string (e.g., \"ERROR\", \"READY\")\n * @param options.taskDetail Optional task-specific detail text\n * @param options.isStartingStatus Whether the conversation is in STARTING state\n * @param options.isStopStatus Whether the conversation is STOPPED\n * @param options.curAgentState The current agent state\n * @param options.errorMessage Optional agent error message\n * @returns Localized human-readable status text\n *\n * @example\n * getStatusText({\n * isPausing: false,\n * isTask: true,\n * taskStatus: \"STARTING_CONVERSATION\",\n * taskDetail: null,\n * isStartingStatus: false,\n * isStopStatus: false,\n * curAgentState: AgentState.RUNNING\n * }) // Returns \"Starting conversation\"\n */\nexport function getStatusText({\n isPausing = false,\n isTask,\n taskStatus,\n taskDetail,\n isStartingStatus,\n isStopStatus,\n curAgentState,\n errorMessage,\n t,\n}: GetStatusTextArgs): string {\n // Show pausing status\n if (isPausing) {\n return t(I18nKey.COMMON$STOPPING);\n }\n\n // Show task status if we're polling a task\n if (isTask && taskStatus) {\n if (taskStatus === \"ERROR\") {\n return taskDetail || t(I18nKey.CONVERSATION$ERROR_STARTING_CONVERSATION);\n }\n\n if (taskStatus === \"READY\") {\n return t(I18nKey.CONVERSATION$READY);\n }\n\n return taskDetail || t(getTaskStatusI18nKey(taskStatus));\n }\n\n if (isStartingStatus) {\n return t(I18nKey.COMMON$STARTING);\n }\n\n if (isStopStatus) {\n return t(I18nKey.COMMON$SERVER_STOPPED);\n }\n\n if (curAgentState === AgentState.ERROR) {\n return errorMessage || t(I18nKey.COMMON$ERROR);\n }\n\n return t(I18nKey.COMMON$RUNNING);\n}\n"],"mappings":";;;;;;;AAiBA,SAAgB,EAAG,GAAG,GAAsB;CAC1C,OAAO,EAAQ,EAAK,CAAM,CAAC;AAC7B;AAKA,IAAa,KAAgB,GAAY,MAA2B;CAClE,IAAM,IAAM,OAAO,IAAI,gBAAgB,CAAI,GACrC,IAAO,SAAS,cAAc,GAAG;CAMvC,AALA,EAAK,OAAO,GACZ,EAAK,WAAW,GAChB,SAAS,KAAK,YAAY,CAAI,GAC9B,EAAK,MAAM,GACX,SAAS,KAAK,YAAY,CAAI,GAC9B,OAAO,IAAI,gBAAgB,CAAG;AAChC,GAYa,KAAoB,GAAiB,MAA6B;CAC7E,IAAM,IAAgB,WAAW,EAAG,MAAM,UAAU,EAAE;CACtD,OAAO,OAAO,SAAS,CAAa,IAAI,IAAgB;AAC1D,GAWa,KAAoB,GAAiB,MAAyB;CACzE,EAAG,MAAM,YAAY,UAAU,GAAG,EAAO,GAAG;AAC9C,GAQa,UACX,iEAAiE,KAC/D,UAAU,SACZ,GAQW,UACP,EAAkB,IAAU,KAEf,kBAAkB,UAAU,UAAU,iBAAiB,IAKpE,OAAO,OAAO,cAAe,aACxB,CAAC,OAAO,WAAW,iBAAiB,EAAE,UAIxC,KATe,IAsFX,KAAoB,MACb,EAAS,MAAM,GAAG,EAAE,IAAI,GAAG,YAAY,KACrC,QAgBT,KACX,GACA,MACG;CACH,IAAI,CAAC,GAAU,OAAO;CAEtB,QAAQ,GAAR;EACE,KAAK;EACL,KAAK,yBACH,OAAO;EACT,KAAK,UACH,OAAO,MAAY;EACrB,SACE,OAAO;CACX;AACF,GAEa,KACX,GACA,MACW;CAEX,IAAI,KAAQ,EAAK,KAAK,MAAM,IAC1B,OAAO,EAAK,WAAW,MAAM,IAAI,IAAO,WAAW;CAIrD,QAAQ,GAAR;EACE,KAAK,UACH,OAAO;EACT,KAAK,UACH,OAAO;EACT,KAAK,aACH,OAAO;EACT,KAAK,gBACH,OAAO;EACT,KAAK,WAGH,OAAO;EACT,SACE,OAAO;CACX;AACF,GAOa,KAAmB,MAC1B,MAAgB,WAAiB,WACjC,MAAgB,cAAoB,cACpC,MAAgB,0BAAgC,0BAChD,MAAgB,iBAAuB,iBACvC,MAAgB,YAAkB,YAC/B,UAQI,KAAS,MACpB,IAAW,kBAAkB,gBAOlB,KAAc,MAAuB,IAAW,OAAO,MAkIvD,KACX,GACA,GACA,MACW;CACX,IAAM,IAAU,EAAsB,GAAU,CAAI;CACpD,IAAI,MAAa,yBAAyB;EACxC,IAAM,CAAC,GAAS,KAAQ,EAAe,MAAM,GAAG;EAChD,OAAO,GAAG,EAAQ,YAAY,EAAQ,SAAS;CACjD;CACA,OAAO,GAAG,EAAQ,GAAG;AACvB,GAgBa,KACX,GACA,GACA,GACA,MACW;CACX,IAAM,IAAU,EAAsB,GAAU,CAAI;CAEpD,QAAQ,GAAR;EACE,KAAK,UACH,OAAO,GAAG,EAAQ,GAAG,EAAe,QAAQ;EAC9C,KAAK,WACH,OAAO,GAAG,EAAQ,GAAG,EAAe,cAAc;EACpD,KAAK,UACH,OAAO,GAAG,EAAQ,GAAG,EAAe,UAAU;EAChD,KAAK,aACH,OAAO,GAAG,EAAQ,GAAG,EAAe,OAAO;EAC7C,KAAK,yBAAyB;GAE5B,IAAM,IAAQ,EAAe,MAAM,GAAG;GACtC,IAAI,EAAM,UAAU,GAAG;IACrB,IAAM,CAAC,GAAS,KAAQ;IACxB,OAAO,GAAG,EAAQ,YAAY,EAAQ,SAAS,EAAK,wBAAwB;GAC9E;GACA,OAAO;EACT;EACA,KAAK,gBAAgB;GAEnB,IAAM,IAAQ,EAAe,MAAM,GAAG;GACtC,IAAI,EAAM,WAAW,GAAG;IACtB,IAAM,CAAC,GAAK,GAAS,KAAQ;IAC7B,OAAO,GAAG,EAAQ,GAAG,EAAI,GAAG,EAAQ,QAAQ,EAAK,aAAa;GAChE;GACA,OAAO;EACT;EACA,SACE,OAAO;CACX;AACF,GAQa,UACX,oDAOW,KAAoB,MAIxB,iDAHc,EAAgB,CAGmB,EAAa,wBAF1D,EAAM,MAAgB,QAE4D,EAAG,gQAQrF,KAAqB,MAAkC;CAClE,IAAM,IAAe,EAAgB,CAAW,GAC1C,IAAK,EAAM,MAAgB,QAAQ;CAGzC,OAAO,8BAA8B,EAAa,cAAc,EAAG,mJAAmJ,EAAG,yEAFzM,EAAW,MAAgB,QAEuP,EAAQ;AAC5S,GAiBa,UACX,0FAoNW,KAAiB,MAC5B,CAAC,CAAC,KAAc,MAAe,WAAW,MAAe,SAuB9C,KAAkB,MAOjB;CACZ,IAAM,EACJ,cACA,WACA,eACA,qBACA,iBACA,qBACE;CAwBJ,OArBI,IACK,YAIL,KAAU,IACR,MAAe,UACV,IAEF,YAGL,IACK,YAEL,IACK,YAEL,MAAkB,EAAW,QACxB,IAEF;AACT;AAuCA,SAAgB,EAAc,EAC5B,eAAY,IACZ,WACA,eACA,eACA,qBACA,iBACA,kBACA,iBACA,QAC4B;CA+B5B,OA7BI,IACK,EAAE,EAAQ,eAAe,IAI9B,KAAU,IACR,MAAe,UACV,KAAc,EAAE,EAAQ,wCAAwC,IAGrE,MAAe,UACV,EAAE,EAAQ,kBAAkB,IAG9B,KAAc,EAAE,EAAqB,CAAU,CAAC,IAGrD,IACK,EAAE,EAAQ,eAAe,IAG9B,IACK,EAAE,EAAQ,qBAAqB,IAGpC,MAAkB,EAAW,QACxB,KAAgB,EAAE,EAAQ,YAAY,IAGxC,EAAE,EAAQ,cAAc;AACjC"}
|
|
1
|
+
{"version":3,"file":"utils.js","names":[],"sources":["../../src/utils/utils.ts"],"sourcesContent":["import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\nimport { Provider } from \"#/types/settings\";\nimport { SuggestedTaskGroup } from \"#/utils/types\";\nimport { ConversationStatus } from \"#/types/conversation-status\";\nimport { GitRepository } from \"#/types/git\";\nimport { sanitizeQuery } from \"#/utils/sanitize-query\";\nimport { PRODUCT_URL } from \"#/utils/constants\";\nimport { AgentState } from \"#/types/agent-state\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { getTaskStatusI18nKey } from \"#/utils/status\";\nimport type { AppConversationStartTaskStatus } from \"#/api/conversation-service/agent-server-conversation-service.types\";\nimport {\n OH_STATUS_ERROR_COLOR,\n OH_STATUS_SUCCESS_COLOR,\n} from \"#/constants/status-colors\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\n/**\n * Trigger a download for a provided Blob with the given filename\n */\nexport const downloadBlob = (blob: Blob, filename: string): void => {\n const url = window.URL.createObjectURL(blob);\n const link = document.createElement(\"a\");\n link.href = url;\n link.download = filename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n window.URL.revokeObjectURL(url);\n};\n\n/**\n * Get the numeric height value from an element's style property\n * @param el The HTML element to get the height from\n * @param fallback The fallback value to return if style height is invalid\n * @returns The numeric height value in pixels, or the fallback value\n *\n * @example\n * getStyleHeightPx(element, 20) // Returns 20 if element.style.height is \"auto\" or invalid\n * getStyleHeightPx(element, 20) // Returns 100 if element.style.height is \"100px\"\n */\nexport const getStyleHeightPx = (el: HTMLElement, fallback: number): number => {\n const elementHeight = parseFloat(el.style.height || \"\");\n return Number.isFinite(elementHeight) ? elementHeight : fallback;\n};\n\n/**\n * Set the height style property of an element to a specific pixel value\n * @param el The HTML element to set the height for\n * @param height The height value in pixels to set\n *\n * @example\n * setStyleHeightPx(element, 100) // Sets element.style.height to \"100px\"\n * setStyleHeightPx(textarea, 200) // Sets textarea.style.height to \"200px\"\n */\nexport const setStyleHeightPx = (el: HTMLElement, height: number): void => {\n el.style.setProperty(\"height\", `${height}px`);\n};\n\n/**\n * Detect a phone/tablet user agent (Android, iPhone, iPad, …).\n * Unlike isMobileDevice, this ignores touch capability, so a desktop OS with\n * a touchscreen (e.g. a Windows 2-in-1) is NOT matched. Use this when the\n * decision depends on having a physical keyboard rather than on touch input.\n */\nexport const isMobileUserAgent = (): boolean =>\n /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n navigator.userAgent,\n );\n\n/**\n * Detect if the user is on a mobile device.\n * Touch support alone is not sufficient — touchscreen laptops have touch\n * but use a mouse/trackpad as primary input. We check that the primary\n * pointing device is coarse (finger) to avoid false positives.\n */\nexport const isMobileDevice = (): boolean => {\n if (isMobileUserAgent()) return true;\n\n const hasTouch = \"ontouchstart\" in window || navigator.maxTouchPoints > 0;\n if (!hasTouch) return false;\n\n // If matchMedia is available, check whether the primary pointer is fine\n // (mouse/trackpad). Touchscreen laptops report fine, real mobile devices don't.\n if (typeof window.matchMedia === \"function\") {\n return !window.matchMedia(\"(pointer: fine)\").matches;\n }\n\n // Fallback: touch present but no matchMedia — assume mobile\n return true;\n};\n\n/**\n * Checks if the current domain is the production domain\n * @returns True if the current domain matches the production URL\n */\nexport const isProductionDomain = (): boolean =>\n window.location.origin === PRODUCT_URL.PRODUCTION;\n\ninterface EventActionHistory {\n args?: {\n LLM_API_KEY?: string;\n [key: string]: unknown;\n };\n extras?: {\n open_page_urls: string[];\n active_page_index: number;\n dom_object: Record<string, unknown>;\n axtree_object: Record<string, unknown>;\n extra_element_properties: Record<string, unknown>;\n last_browser_action: string;\n last_browser_action_error: unknown;\n focused_element_bid: string;\n };\n [key: string]: unknown;\n}\n\nexport const removeUnwantedKeys = (\n data: EventActionHistory[],\n): EventActionHistory[] => {\n const UNDESIRED_KEYS = [\n \"open_page_urls\",\n \"active_page_index\",\n \"dom_object\",\n \"axtree_object\",\n \"extra_element_properties\",\n \"last_browser_action\",\n \"last_browser_action_error\",\n \"focused_element_bid\",\n ];\n\n return data\n .filter((item) => {\n // Skip items that have a status key\n if (\"status\" in item) {\n return false;\n }\n return true;\n })\n .map((item) => {\n // Create a shallow copy of item\n const newItem = { ...item };\n\n // Check if extras exists and delete it from a new extras object\n if (newItem.extras) {\n const newExtras = { ...newItem.extras };\n UNDESIRED_KEYS.forEach((key) => {\n delete newExtras[key as keyof typeof newExtras];\n });\n newItem.extras = newExtras;\n }\n\n return newItem;\n });\n};\n\n/**\n * Get file extension from file name in uppercase format\n * @param fileName The file name to extract extension from\n * @returns The file extension in uppercase, or \"FILE\" if no extension found\n *\n * @example\n * getFileExtension(\"document.pdf\") // \"PDF\"\n * getFileExtension(\"image.jpeg\") // \"JPEG\"\n * getFileExtension(\"noextension\") // \"FILE\"\n */\nexport const getFileExtension = (fileName: string): string => {\n const extension = fileName.split(\".\").pop()?.toUpperCase();\n return extension || \"FILE\";\n};\n\n/**\n * Whether to use the installation-scoped repo flow\n * (`/api/v1/git/installations/search` → `/api/v1/git/repositories/search?installation_id=…`)\n * for the given provider/backend combo.\n *\n * Mirrors OpenHands' cloud frontend (parameterized by `app_mode`):\n * - bitbucket / bitbucket_data_center → always installation-based\n * - github → installation-based ONLY when the active backend is cloud\n * - gitlab / azure_devops / forgejo → direct (search) flow\n *\n * `appMode` accepts the active backend `kind` (\"local\" | \"cloud\") so call\n * sites can hand it through directly.\n */\nexport const shouldUseInstallationRepos = (\n provider: Provider | null | undefined,\n appMode?: \"local\" | \"cloud\",\n) => {\n if (!provider) return false;\n\n switch (provider) {\n case \"bitbucket\":\n case \"bitbucket_data_center\":\n return true;\n case \"github\":\n return appMode === \"cloud\";\n default:\n return false;\n }\n};\n\nexport const getGitProviderBaseUrl = (\n gitProvider: Provider,\n host?: string | null,\n): string => {\n // If custom host provided, use it (with https:// prefix if needed)\n if (host && host.trim() !== \"\") {\n return host.startsWith(\"http\") ? host : `https://${host}`;\n }\n\n // Fall back to defaults\n switch (gitProvider) {\n case \"github\":\n return \"https://github.com\";\n case \"gitlab\":\n return \"https://gitlab.com\";\n case \"bitbucket\":\n return \"https://bitbucket.org\";\n case \"azure_devops\":\n return \"https://dev.azure.com\";\n case \"forgejo\":\n // Default UI links to Codeberg unless a custom host is available in settings\n // Note: UI link builders don't currently receive host; consider plumbing settings if needed\n return \"https://codeberg.org\";\n default:\n return \"\";\n }\n};\n\n/**\n * Get the name of the git provider\n * @param gitProvider The git provider\n * @returns The name of the git provider\n */\nexport const getProviderName = (gitProvider: Provider) => {\n if (gitProvider === \"gitlab\") return \"GitLab\";\n if (gitProvider === \"bitbucket\") return \"Bitbucket\";\n if (gitProvider === \"bitbucket_data_center\") return \"Bitbucket Data Center\";\n if (gitProvider === \"azure_devops\") return \"Azure DevOps\";\n if (gitProvider === \"forgejo\") return \"Forgejo\";\n return \"GitHub\";\n};\n\n/**\n * Get the name of the PR\n * @param isGitLab Whether the git provider is GitLab\n * @returns The name of the PR\n */\nexport const getPR = (isGitLab: boolean) =>\n isGitLab ? \"merge request\" : \"pull request\";\n\n/**\n * Get the short name of the PR\n * @param isGitLab Whether the git provider is GitLab\n * @returns The short name of the PR\n */\nexport const getPRShort = (isGitLab: boolean) => (isGitLab ? \"MR\" : \"PR\");\n\n/**\n * Construct the pull request (merge request) URL for different providers\n * @param prNumber The pull request number\n * @param provider The git provider\n * @param repositoryName The repository name in format \"owner/repo\"\n * @returns The pull request URL\n *\n * @example\n * constructPullRequestUrl(123, \"github\", \"owner/repo\") // \"https://github.com/owner/repo/pull/123\"\n * constructPullRequestUrl(456, \"gitlab\", \"owner/repo\") // \"https://gitlab.com/owner/repo/-/merge_requests/456\"\n * constructPullRequestUrl(789, \"bitbucket\", \"owner/repo\") // \"https://bitbucket.org/owner/repo/pull-requests/789\"\n * constructPullRequestUrl(789, \"bitbucket\", \"PROJECT/repo\", \"server.com\") // \"https://server.com/projects/PROJECT/repos/repo/pull-requests/789\"\n */\nexport const constructPullRequestUrl = (\n prNumber: number,\n provider: Provider,\n repositoryName: string,\n host?: string | null,\n): string => {\n const baseUrl = getGitProviderBaseUrl(provider, host);\n\n switch (provider) {\n case \"github\":\n return `${baseUrl}/${repositoryName}/pull/${prNumber}`;\n case \"forgejo\":\n return `${baseUrl}/${repositoryName}/pull/${prNumber}`;\n case \"gitlab\":\n return `${baseUrl}/${repositoryName}/-/merge_requests/${prNumber}`;\n case \"bitbucket\":\n return `${baseUrl}/${repositoryName}/pull-requests/${prNumber}`;\n case \"bitbucket_data_center\": {\n const [project, repo] = repositoryName.split(\"/\");\n return `${baseUrl}/projects/${project}/repos/${repo}/pull-requests/${prNumber}`;\n }\n case \"azure_devops\": {\n // Azure DevOps format: org/project/repo\n const parts = repositoryName.split(\"/\");\n if (parts.length === 3) {\n const [org, project, repo] = parts;\n return `${baseUrl}/${org}/${project}/_git/${repo}/pullrequest/${prNumber}`;\n }\n return \"\";\n }\n default:\n return \"\";\n }\n};\n\n/**\n * Construct the repository URL for different providers\n * @param provider The git provider\n * @param repositoryName The repository name in format \"owner/repo\"\n * @returns The repository URL\n *\n * @example\n * constructRepositoryUrl(\"github\", \"owner/repo\") // \"https://github.com/owner/repo\"\n * constructRepositoryUrl(\"gitlab\", \"owner/repo\") // \"https://gitlab.com/owner/repo\"\n * constructRepositoryUrl(\"bitbucket\", \"owner/repo\") // \"https://bitbucket.org/owner/repo\"\n */\nexport const constructRepositoryUrl = (\n provider: Provider,\n repositoryName: string,\n host?: string | null,\n): string => {\n const baseUrl = getGitProviderBaseUrl(provider, host);\n if (provider === \"bitbucket_data_center\") {\n const [project, repo] = repositoryName.split(\"/\");\n return `${baseUrl}/projects/${project}/repos/${repo}`;\n }\n return `${baseUrl}/${repositoryName}`;\n};\n\n/**\n * Construct the branch URL for different providers\n * @param provider The git provider\n * @param repositoryName The repository name in format \"owner/repo\"\n * @param branchName The branch name\n * @param host Optional custom host for self-hosted instances\n * @returns The branch URL\n *\n * @example\n * constructBranchUrl(\"github\", \"owner/repo\", \"main\") // \"https://github.com/owner/repo/tree/main\"\n * constructBranchUrl(\"gitlab\", \"owner/repo\", \"develop\") // \"https://gitlab.com/owner/repo/-/tree/develop\"\n * constructBranchUrl(\"bitbucket\", \"owner/repo\", \"feature\") // \"https://bitbucket.org/owner/repo/src/feature\"\n * constructBranchUrl(\"bitbucket\", \"PROJECT/repo\", \"feature\", \"server.com\") // \"https://server.com/projects/PROJECT/repos/repo/browse?at=refs/heads/feature\"\n */\nexport const constructBranchUrl = (\n provider: Provider,\n repositoryName: string,\n branchName: string,\n host?: string | null,\n): string => {\n const baseUrl = getGitProviderBaseUrl(provider, host);\n\n switch (provider) {\n case \"github\":\n return `${baseUrl}/${repositoryName}/tree/${branchName}`;\n case \"forgejo\":\n return `${baseUrl}/${repositoryName}/src/branch/${branchName}`;\n case \"gitlab\":\n return `${baseUrl}/${repositoryName}/-/tree/${branchName}`;\n case \"bitbucket\":\n return `${baseUrl}/${repositoryName}/src/${branchName}`;\n case \"bitbucket_data_center\": {\n // Bitbucket Server format: /projects/{PROJECT}/repos/{repo}/browse?at=refs/heads/{branch}\n const parts = repositoryName.split(\"/\");\n if (parts.length >= 2) {\n const [project, repo] = parts;\n return `${baseUrl}/projects/${project}/repos/${repo}/browse?at=refs/heads/${branchName}`;\n }\n return \"\";\n }\n case \"azure_devops\": {\n // Azure DevOps format: org/project/repo\n const parts = repositoryName.split(\"/\");\n if (parts.length === 3) {\n const [org, project, repo] = parts;\n return `${baseUrl}/${org}/${project}/_git/${repo}?version=GB${branchName}`;\n }\n return \"\";\n }\n default:\n return \"\";\n }\n};\n\n// Git Action Prompts\n\nconst GIT_COMMIT_PROMPT =\n \"Please review the current changes and create a git commit with a concise, descriptive message.\";\n\nexport const getGitCommitPrompt = (): string => GIT_COMMIT_PROMPT;\n\n/**\n * Generate a git pull prompt\n * @returns The git pull prompt\n */\nexport const getGitPullPrompt = (): string =>\n \"Please pull the latest code from the repository.\";\n\n/**\n * Generate a git push prompt\n * @param gitProvider The git provider\n * @returns The git push prompt\n */\nexport const getGitPushPrompt = (gitProvider: Provider): string => {\n const providerName = getProviderName(gitProvider);\n const pr = getPR(gitProvider === \"gitlab\");\n\n return `Please push the changes to a remote branch on ${providerName}, but do NOT create a ${pr}. Check your current branch name first - if it's main, master, deploy, or another common default branch name, create a new branch with a descriptive name related to your changes. Otherwise, use the exact SAME branch name as the one you are currently on.`;\n};\n\n/**\n * Generate a create pull request prompt\n * @param gitProvider The git provider\n * @returns The create PR prompt\n */\nexport const getCreatePRPrompt = (gitProvider: Provider): string => {\n const providerName = getProviderName(gitProvider);\n const pr = getPR(gitProvider === \"gitlab\");\n const prShort = getPRShort(gitProvider === \"gitlab\");\n\n return `Please push the changes to ${providerName} and open a ${pr}. If you're on a default branch (e.g., main, master, deploy), create a new branch with a descriptive name otherwise use the current branch. If a ${pr} template exists in the repository, please follow it when creating the ${prShort} description.`;\n};\n\n/**\n * Generate a push to existing PR prompt\n * @param gitProvider The git provider\n * @returns The push to PR prompt\n */\nexport const getPushToPRPrompt = (gitProvider: Provider): string => {\n const pr = getPR(gitProvider === \"gitlab\");\n\n return `Please push the latest changes to the existing ${pr}.`;\n};\n\n/**\n * Generate a create new branch prompt\n * @returns The create new branch prompt\n */\nexport const getCreateNewBranchPrompt = (): string =>\n \"Please create a new branch with a descriptive name related to the work you plan to do.\";\n\n// Helper functions\nexport function getTotalTaskCount(\n suggestedTasks: SuggestedTaskGroup[] | undefined,\n): number {\n if (!suggestedTasks) return 0;\n return suggestedTasks.flatMap((group) => group.tasks).length;\n}\n\nexport function getLimitedTaskGroups(\n suggestedTasks: SuggestedTaskGroup[],\n maxTasks: number,\n): SuggestedTaskGroup[] {\n const limitedGroups: SuggestedTaskGroup[] = [];\n let taskCount = 0;\n\n for (const group of suggestedTasks) {\n if (taskCount >= maxTasks) break;\n\n const remainingTasksNeeded = maxTasks - taskCount;\n const tasksToShow = group.tasks.slice(0, remainingTasksNeeded);\n\n if (tasksToShow.length > 0) {\n limitedGroups.push({\n ...group,\n tasks: tasksToShow,\n });\n taskCount += tasksToShow.length;\n }\n }\n\n return limitedGroups;\n}\n\nexport function getDisplayedTaskGroups(\n suggestedTasks: SuggestedTaskGroup[] | undefined,\n isExpanded: boolean,\n): SuggestedTaskGroup[] {\n if (!suggestedTasks || suggestedTasks.length === 0) {\n return [];\n }\n\n if (isExpanded) {\n return suggestedTasks;\n }\n\n return getLimitedTaskGroups(suggestedTasks, 3);\n}\n\n/**\n * Get the label for a conversation status\n * @param status The conversation status\n * @returns The localized label for the status\n */\nexport const getConversationStatusLabel = (\n status: ConversationStatus,\n): string => {\n switch (status) {\n case \"STOPPED\":\n return \"COMMON$STOPPED\";\n case \"RUNNING\":\n return \"COMMON$RUNNING\";\n case \"STARTING\":\n return \"COMMON$STARTING\";\n case \"ERROR\":\n return \"COMMON$ERROR\";\n case \"ARCHIVED\":\n return \"COMMON$ARCHIVED\"; // Use STOPPED for archived conversations\n default:\n return \"COMMON$UNKNOWN\";\n }\n};\n\n// Task Tracking Utility Functions\n\n/**\n * Get the status icon for a task status\n * @param status The task status\n * @returns The emoji icon for the status\n */\nexport const getStatusIcon = (status: string) => {\n switch (status) {\n case \"todo\":\n return \"⏳\";\n case \"in_progress\":\n return \"🔄\";\n case \"done\":\n return \"✅\";\n default:\n return \"❓\";\n }\n};\n\n/**\n * Get the CSS class names for a task status badge\n * @param status The task status\n * @returns The CSS class names for styling the status badge\n */\nexport const getStatusClassName = (status: string) => {\n if (status === \"done\") {\n return \"bg-green-800 text-green-200\";\n }\n if (status === \"in_progress\") {\n return \"bg-yellow-800 text-yellow-200\";\n }\n return \"bg-tertiary text-[var(--oh-text-tertiary)]\";\n};\n\n/**\n * Helper function to apply client-side filtering based on search query\n * @param repo The Git repository to check\n * @param searchQuery The search query string\n * @returns True if the repository should be included based on the search query\n */\nexport const shouldIncludeRepository = (\n repo: GitRepository,\n searchQuery: string,\n): boolean => {\n if (!searchQuery.trim()) {\n return true;\n }\n\n const sanitizedQuery = sanitizeQuery(searchQuery);\n const sanitizedRepoName = sanitizeQuery(repo.full_name);\n return sanitizedRepoName.includes(sanitizedQuery);\n};\n\n/**\n * Get the OpenHands query string based on the provider\n * @param provider The git provider\n * @returns The query string for searching OpenHands repositories\n */\nexport const getOpenHandsQuery = (provider: Provider | null): string => {\n const providerRepositorySuffix: Record<string, string> = {\n gitlab: \"openhands-config\",\n azure_devops: \"openhands-config\",\n default: \".openhands\",\n } as const;\n\n return provider && provider in providerRepositorySuffix\n ? providerRepositorySuffix[provider]\n : providerRepositorySuffix.default;\n};\n\n/**\n * Check if a repository has the OpenHands suffix based on the provider\n * @param repo The Git repository to check\n * @param provider The git provider\n * @returns True if the repository has the OpenHands suffix\n */\nexport const hasOpenHandsSuffix = (\n repo: GitRepository,\n provider: Provider | null,\n): boolean => repo.full_name.endsWith(`/${getOpenHandsQuery(provider)}`);\n\n/**\n * Build headers for V1 API requests that require session authentication\n * @param sessionApiKey Session API key for authentication\n * @returns Headers object with X-Session-API-Key if provided\n */\nexport const buildSessionHeaders = (\n sessionApiKey?: string | null,\n): Record<string, string> => {\n const headers: Record<string, string> = {};\n if (sessionApiKey) {\n headers[\"X-Session-API-Key\"] = sessionApiKey;\n }\n return headers;\n};\n\n/**\n * Check if a task is currently being polled (loading state)\n * @param taskStatus The task status string (e.g., \"WORKING\", \"ERROR\", \"READY\")\n * @returns True if the task is in a loading state (not ERROR and not READY)\n *\n * @example\n * isTaskPolling(\"WORKING\") // Returns true\n * isTaskPolling(\"PREPARING_REPOSITORY\") // Returns true\n * isTaskPolling(\"READY\") // Returns false\n * isTaskPolling(\"ERROR\") // Returns false\n * isTaskPolling(null) // Returns false\n * isTaskPolling(undefined) // Returns false\n */\nexport const isTaskPolling = (taskStatus: string | null | undefined): boolean =>\n !!taskStatus && taskStatus !== \"ERROR\" && taskStatus !== \"READY\";\n\n/**\n * Get the appropriate color based on agent status\n * @param options Configuration object for status color calculation\n * @param options.isPausing Whether the agent is currently pausing\n * @param options.isTask Whether we're polling a task\n * @param options.taskStatus The task status string (e.g., \"ERROR\", \"READY\")\n * @param options.isStartingStatus Whether the agent is in a starting state (LOADING or INIT)\n * @param options.isStopStatus Whether the conversation status is STOPPED\n * @param options.curAgentState The current agent state\n * @returns The hex color code for the status\n *\n * @example\n * getStatusColor({\n * isPausing: false,\n * isTask: false,\n * taskStatus: undefined,\n * isStartingStatus: false,\n * isStopStatus: false,\n * curAgentState: AgentState.RUNNING\n * }) // Returns \"var(--oh-status-success)\"\n */\nexport const getStatusColor = (options: {\n isPausing: boolean;\n isTask: boolean;\n taskStatus?: string | null;\n isStartingStatus: boolean;\n isStopStatus: boolean;\n curAgentState: AgentState;\n}): string => {\n const {\n isPausing,\n isTask,\n taskStatus,\n isStartingStatus,\n isStopStatus,\n curAgentState,\n } = options;\n\n // Show pausing status\n if (isPausing) {\n return \"#FFD600\";\n }\n\n // Show task status if we're polling a task\n if (isTask && taskStatus) {\n if (taskStatus === \"ERROR\") {\n return OH_STATUS_ERROR_COLOR;\n }\n return \"#FFD600\";\n }\n\n if (isStartingStatus) {\n return \"#FFD600\";\n }\n if (isStopStatus) {\n return \"#ffffff\";\n }\n if (curAgentState === AgentState.ERROR) {\n return OH_STATUS_ERROR_COLOR;\n }\n return OH_STATUS_SUCCESS_COLOR;\n};\n\ninterface GetStatusTextArgs {\n isPausing: boolean;\n isTask: boolean;\n taskStatus?: AppConversationStartTaskStatus | null;\n taskDetail?: string | null;\n isStartingStatus: boolean;\n isStopStatus: boolean;\n curAgentState: AgentState;\n errorMessage?: string | null;\n t: (t: string) => string;\n}\n\n/**\n * Get the server status text based on agent and task state\n *\n * @param options Configuration object for status text calculation\n * @param options.isPausing Whether the agent is currently pausing\n * @param options.isTask Whether we're polling a task\n * @param options.taskStatus The task status string (e.g., \"ERROR\", \"READY\")\n * @param options.taskDetail Optional task-specific detail text\n * @param options.isStartingStatus Whether the conversation is in STARTING state\n * @param options.isStopStatus Whether the conversation is STOPPED\n * @param options.curAgentState The current agent state\n * @param options.errorMessage Optional agent error message\n * @returns Localized human-readable status text\n *\n * @example\n * getStatusText({\n * isPausing: false,\n * isTask: true,\n * taskStatus: \"STARTING_CONVERSATION\",\n * taskDetail: null,\n * isStartingStatus: false,\n * isStopStatus: false,\n * curAgentState: AgentState.RUNNING\n * }) // Returns \"Starting conversation\"\n */\nexport function getStatusText({\n isPausing = false,\n isTask,\n taskStatus,\n taskDetail,\n isStartingStatus,\n isStopStatus,\n curAgentState,\n errorMessage,\n t,\n}: GetStatusTextArgs): string {\n // Show pausing status\n if (isPausing) {\n return t(I18nKey.COMMON$STOPPING);\n }\n\n // Show task status if we're polling a task\n if (isTask && taskStatus) {\n if (taskStatus === \"ERROR\") {\n return taskDetail || t(I18nKey.CONVERSATION$ERROR_STARTING_CONVERSATION);\n }\n\n if (taskStatus === \"READY\") {\n return t(I18nKey.CONVERSATION$READY);\n }\n\n return taskDetail || t(getTaskStatusI18nKey(taskStatus));\n }\n\n if (isStartingStatus) {\n return t(I18nKey.COMMON$STARTING);\n }\n\n if (isStopStatus) {\n return t(I18nKey.COMMON$SERVER_STOPPED);\n }\n\n if (curAgentState === AgentState.ERROR) {\n return errorMessage || t(I18nKey.COMMON$ERROR);\n }\n\n return t(I18nKey.COMMON$RUNNING);\n}\n"],"mappings":";;;;;;;AAiBA,SAAgB,EAAG,GAAG,GAAsB;CAC1C,OAAO,EAAQ,EAAK,CAAM,CAAC;AAC7B;AAKA,IAAa,KAAgB,GAAY,MAA2B;CAClE,IAAM,IAAM,OAAO,IAAI,gBAAgB,CAAI,GACrC,IAAO,SAAS,cAAc,GAAG;CAMvC,AALA,EAAK,OAAO,GACZ,EAAK,WAAW,GAChB,SAAS,KAAK,YAAY,CAAI,GAC9B,EAAK,MAAM,GACX,SAAS,KAAK,YAAY,CAAI,GAC9B,OAAO,IAAI,gBAAgB,CAAG;AAChC,GAYa,KAAoB,GAAiB,MAA6B;CAC7E,IAAM,IAAgB,WAAW,EAAG,MAAM,UAAU,EAAE;CACtD,OAAO,OAAO,SAAS,CAAa,IAAI,IAAgB;AAC1D,GAWa,KAAoB,GAAiB,MAAyB;CACzE,EAAG,MAAM,YAAY,UAAU,GAAG,EAAO,GAAG;AAC9C,GAQa,UACX,iEAAiE,KAC/D,UAAU,SACZ,GAQW,UACP,EAAkB,IAAU,KAEf,kBAAkB,UAAU,UAAU,iBAAiB,IAKpE,OAAO,OAAO,cAAe,aACxB,CAAC,OAAO,WAAW,iBAAiB,EAAE,UAIxC,KATe,IAsFX,KAAoB,MACb,EAAS,MAAM,GAAG,EAAE,IAAI,GAAG,YAAY,KACrC,QAgBT,KACX,GACA,MACG;CACH,IAAI,CAAC,GAAU,OAAO;CAEtB,QAAQ,GAAR;EACE,KAAK;EACL,KAAK,yBACH,OAAO;EACT,KAAK,UACH,OAAO,MAAY;EACrB,SACE,OAAO;CACX;AACF,GAEa,KACX,GACA,MACW;CAEX,IAAI,KAAQ,EAAK,KAAK,MAAM,IAC1B,OAAO,EAAK,WAAW,MAAM,IAAI,IAAO,WAAW;CAIrD,QAAQ,GAAR;EACE,KAAK,UACH,OAAO;EACT,KAAK,UACH,OAAO;EACT,KAAK,aACH,OAAO;EACT,KAAK,gBACH,OAAO;EACT,KAAK,WAGH,OAAO;EACT,SACE,OAAO;CACX;AACF,GAOa,KAAmB,MAC1B,MAAgB,WAAiB,WACjC,MAAgB,cAAoB,cACpC,MAAgB,0BAAgC,0BAChD,MAAgB,iBAAuB,iBACvC,MAAgB,YAAkB,YAC/B,UAQI,KAAS,MACpB,IAAW,kBAAkB,gBAOlB,KAAc,MAAuB,IAAW,OAAO,MAevD,KACX,GACA,GACA,GACA,MACW;CACX,IAAM,IAAU,EAAsB,GAAU,CAAI;CAEpD,QAAQ,GAAR;EACE,KAAK,UACH,OAAO,GAAG,EAAQ,GAAG,EAAe,QAAQ;EAC9C,KAAK,WACH,OAAO,GAAG,EAAQ,GAAG,EAAe,QAAQ;EAC9C,KAAK,UACH,OAAO,GAAG,EAAQ,GAAG,EAAe,oBAAoB;EAC1D,KAAK,aACH,OAAO,GAAG,EAAQ,GAAG,EAAe,iBAAiB;EACvD,KAAK,yBAAyB;GAC5B,IAAM,CAAC,GAAS,KAAQ,EAAe,MAAM,GAAG;GAChD,OAAO,GAAG,EAAQ,YAAY,EAAQ,SAAS,EAAK,iBAAiB;EACvE;EACA,KAAK,gBAAgB;GAEnB,IAAM,IAAQ,EAAe,MAAM,GAAG;GACtC,IAAI,EAAM,WAAW,GAAG;IACtB,IAAM,CAAC,GAAK,GAAS,KAAQ;IAC7B,OAAO,GAAG,EAAQ,GAAG,EAAI,GAAG,EAAQ,QAAQ,EAAK,eAAe;GAClE;GACA,OAAO;EACT;EACA,SACE,OAAO;CACX;AACF,GAaa,KACX,GACA,GACA,MACW;CACX,IAAM,IAAU,EAAsB,GAAU,CAAI;CACpD,IAAI,MAAa,yBAAyB;EACxC,IAAM,CAAC,GAAS,KAAQ,EAAe,MAAM,GAAG;EAChD,OAAO,GAAG,EAAQ,YAAY,EAAQ,SAAS;CACjD;CACA,OAAO,GAAG,EAAQ,GAAG;AACvB,GAgBa,KACX,GACA,GACA,GACA,MACW;CACX,IAAM,IAAU,EAAsB,GAAU,CAAI;CAEpD,QAAQ,GAAR;EACE,KAAK,UACH,OAAO,GAAG,EAAQ,GAAG,EAAe,QAAQ;EAC9C,KAAK,WACH,OAAO,GAAG,EAAQ,GAAG,EAAe,cAAc;EACpD,KAAK,UACH,OAAO,GAAG,EAAQ,GAAG,EAAe,UAAU;EAChD,KAAK,aACH,OAAO,GAAG,EAAQ,GAAG,EAAe,OAAO;EAC7C,KAAK,yBAAyB;GAE5B,IAAM,IAAQ,EAAe,MAAM,GAAG;GACtC,IAAI,EAAM,UAAU,GAAG;IACrB,IAAM,CAAC,GAAS,KAAQ;IACxB,OAAO,GAAG,EAAQ,YAAY,EAAQ,SAAS,EAAK,wBAAwB;GAC9E;GACA,OAAO;EACT;EACA,KAAK,gBAAgB;GAEnB,IAAM,IAAQ,EAAe,MAAM,GAAG;GACtC,IAAI,EAAM,WAAW,GAAG;IACtB,IAAM,CAAC,GAAK,GAAS,KAAQ;IAC7B,OAAO,GAAG,EAAQ,GAAG,EAAI,GAAG,EAAQ,QAAQ,EAAK,aAAa;GAChE;GACA,OAAO;EACT;EACA,SACE,OAAO;CACX;AACF,GAIM,IACJ,kGAEW,UAAmC,GAMnC,UACX,oDAOW,KAAoB,MAIxB,iDAHc,EAAgB,CAGmB,EAAa,wBAF1D,EAAM,MAAgB,QAE4D,EAAG,gQAQrF,KAAqB,MAAkC;CAClE,IAAM,IAAe,EAAgB,CAAW,GAC1C,IAAK,EAAM,MAAgB,QAAQ;CAGzC,OAAO,8BAA8B,EAAa,cAAc,EAAG,mJAAmJ,EAAG,yEAFzM,EAAW,MAAgB,QAEuP,EAAQ;AAC5S,GAiBa,UACX,0FAwLW,KAAiB,MAC5B,CAAC,CAAC,KAAc,MAAe,WAAW,MAAe,SAuB9C,KAAkB,MAOjB;CACZ,IAAM,EACJ,cACA,WACA,eACA,qBACA,iBACA,qBACE;CAwBJ,OArBI,IACK,YAIL,KAAU,IACR,MAAe,UACV,IAEF,YAGL,IACK,YAEL,IACK,YAEL,MAAkB,EAAW,QACxB,IAEF;AACT;AAuCA,SAAgB,EAAc,EAC5B,eAAY,IACZ,WACA,eACA,eACA,qBACA,iBACA,kBACA,iBACA,QAC4B;CA+B5B,OA7BI,IACK,EAAE,EAAQ,eAAe,IAI9B,KAAU,IACR,MAAe,UACV,KAAc,EAAE,EAAQ,wCAAwC,IAGrE,MAAe,UACV,EAAE,EAAQ,kBAAkB,IAG9B,KAAc,EAAE,EAAqB,CAAU,CAAC,IAGrD,IACK,EAAE,EAAQ,eAAe,IAG9B,IACK,EAAE,EAAQ,qBAAqB,IAGpC,MAAkB,EAAW,QACxB,KAAgB,EAAE,EAAQ,YAAY,IAGxC,EAAE,EAAQ,cAAc;AACjC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
require("../_virtual/_rolldown/runtime.cjs");var e=`__AGENT_CANVAS_VSCODE_BASE_PATH__`;function t(){if(typeof window<`u`){let t=window[e];if(typeof t==`string`&&t.trim())return n(t.trim())}return null}function n(e){let t=e.startsWith(`/`)?e:`/${e}`;return t.length>1?t.replace(/\/+$/,``):t}function r(e,t){if(!e||!t)return!1;let n;try{n=new URL(e,typeof window<`u`?window.location.href:void 0)}catch{return!1}return typeof window<`u`&&n.origin!==window.location.origin?!1:n.pathname===t||n.pathname.startsWith(`${t}/`)}exports.getOriginVSCodeBasePath=t,exports.isVSCodeUrlServedByOrigin=r;
|
|
2
|
+
//# sourceMappingURL=vscode-origin.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vscode-origin.cjs","names":[],"sources":["../../src/utils/vscode-origin.ts"],"sourcesContent":["/**\n * Whether *this browser origin* can serve the editor, and whether a given\n * editor URL is one it will actually route.\n *\n * Editor availability is not a property of the agent-server process alone. The\n * agent-server answers `/api/vscode/status` for whatever conversation you ask\n * about, and builds `/api/vscode/url` from the `base_url` the caller sends —\n * which is always `window.location.origin`. So a server can truthfully report\n * an editor that the page's own origin has no route to. Two supported layouts\n * hit that:\n *\n * - **Public mode** (`docker/entrypoint.sh`, `--auth-required`): a second\n * static server on its own port, sharing the same agent-server but\n * deliberately without the editor route, because the editor's connection\n * token is the session API key (OpenHands/software-agent-sdk#4317) and that\n * origin exists to test the *unauthenticated* case.\n * - **Extra backends** (`scripts/dev-extra-backend.mjs`): a second\n * agent-server registered from a browser whose origin belongs to another\n * stack. That origin's editor route, if any, points at the *bundled*\n * stack's editor — a different container's workspace.\n *\n * In both cases a control gated only on the server probe renders and then\n * resolves to the canvas SPA or, worse, someone else's workspace. So the\n * frontend has to intersect the server's capability with the origin's route\n * table, and this module is the origin half of that.\n */\n\nconst VSCODE_BASE_PATH_WINDOW_KEY = \"__AGENT_CANVAS_VSCODE_BASE_PATH__\";\n\n/**\n * The path prefix this origin serves the editor under, or `null` if it serves\n * no editor at all.\n *\n * Two sources, in order — mirroring `getRawRuntimeServicesInfo` in\n * `agent-server-adapter.ts`:\n * 1. `VITE_VSCODE_BASE_PATH` — baked in at build time by the dev launchers\n * that proxy the editor (`npm run dev`, dev:static).\n * 2. `window.__AGENT_CANVAS_VSCODE_BASE_PATH__` — injected into index.html at\n * serve time by `scripts/static-server.mjs --vscode-base-path <path>`,\n * which refuses to start unless a matching `--route` exists. That is the\n * path used by static builds (the Docker image, the published binary),\n * where the env var is empty in the prebuilt bundle.\n *\n * Absent from both means \"this origin does not serve the editor\" and the\n * control is hidden. That is the pre-existing behavior for every local backend,\n * so a deployment this cannot detect is no worse off than before.\n */\nexport function getOriginVSCodeBasePath(): string | null {\n const envRaw = import.meta.env.VITE_VSCODE_BASE_PATH?.trim();\n if (envRaw) return normalizePrefix(envRaw);\n\n if (typeof window !== \"undefined\") {\n const injected = (window as unknown as Record<string, unknown>)[\n VSCODE_BASE_PATH_WINDOW_KEY\n ];\n if (typeof injected === \"string\" && injected.trim()) {\n return normalizePrefix(injected.trim());\n }\n }\n\n return null;\n}\n\nfunction normalizePrefix(value: string): string {\n const withLeadingSlash = value.startsWith(\"/\") ? value : `/${value}`;\n return withLeadingSlash.length > 1\n ? withLeadingSlash.replace(/\\/+$/, \"\")\n : withLeadingSlash;\n}\n\n/**\n * Whether `url` is an editor URL this origin will actually route.\n *\n * The agent-server appends its own `vscode_base_path` to the origin we send it,\n * so the returned URL carries the prefix of the server that answered — not\n * necessarily the prefix this origin routes. An extra backend that configures\n * no prefix yields `<origin>/?tkn=…`, which is the canvas root: same origin,\n * wrong destination. Comparing paths is what separates the two.\n */\nexport function isVSCodeUrlServedByOrigin(\n url: string | null | undefined,\n basePath: string | null,\n): boolean {\n if (!url || !basePath) return false;\n\n let parsed: URL;\n try {\n parsed = new URL(\n url,\n typeof window !== \"undefined\" ? window.location.href : undefined,\n );\n } catch {\n return false;\n }\n\n // A cross-origin URL is somebody else's problem to route, not ours to vouch\n // for. The local path always builds on `window.location.origin`, so this only\n // fires on a value we did not construct.\n if (\n typeof window !== \"undefined\" &&\n parsed.origin !== window.location.origin\n ) {\n return false;\n }\n\n return (\n parsed.pathname === basePath || parsed.pathname.startsWith(`${basePath}/`)\n );\n}\n"],"mappings":"6CA2BA,IAAM,EAA8B,oCAoBpC,SAAgB,GAAyC,CAIvD,GAAI,OAAO,OAAW,IAAa,CACjC,IAAM,EAAY,OAChB,GAEF,GAAI,OAAO,GAAa,UAAY,EAAS,KAAK,EAChD,OAAO,EAAgB,EAAS,KAAK,CAAC,CAE1C,CAEA,OAAO,IACT,CAEA,SAAS,EAAgB,EAAuB,CAC9C,IAAM,EAAmB,EAAM,WAAW,GAAG,EAAI,EAAQ,IAAI,IAC7D,OAAO,EAAiB,OAAS,EAC7B,EAAiB,QAAQ,OAAQ,EAAE,EACnC,CACN,CAWA,SAAgB,EACd,EACA,EACS,CACT,GAAI,CAAC,GAAO,CAAC,EAAU,MAAO,GAE9B,IAAI,EACJ,GAAI,CACF,EAAS,IAAI,IACX,EACA,OAAO,OAAW,IAAc,OAAO,SAAS,KAAO,IAAA,EACzD,CACF,MAAQ,CACN,MAAO,EACT,CAYA,OANE,OAAO,OAAW,KAClB,EAAO,SAAW,OAAO,SAAS,OAE3B,GAIP,EAAO,WAAa,GAAY,EAAO,SAAS,WAAW,GAAG,EAAS,EAAE,CAE7E"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Whether *this browser origin* can serve the editor, and whether a given
|
|
3
|
+
* editor URL is one it will actually route.
|
|
4
|
+
*
|
|
5
|
+
* Editor availability is not a property of the agent-server process alone. The
|
|
6
|
+
* agent-server answers `/api/vscode/status` for whatever conversation you ask
|
|
7
|
+
* about, and builds `/api/vscode/url` from the `base_url` the caller sends —
|
|
8
|
+
* which is always `window.location.origin`. So a server can truthfully report
|
|
9
|
+
* an editor that the page's own origin has no route to. Two supported layouts
|
|
10
|
+
* hit that:
|
|
11
|
+
*
|
|
12
|
+
* - **Public mode** (`docker/entrypoint.sh`, `--auth-required`): a second
|
|
13
|
+
* static server on its own port, sharing the same agent-server but
|
|
14
|
+
* deliberately without the editor route, because the editor's connection
|
|
15
|
+
* token is the session API key (OpenHands/software-agent-sdk#4317) and that
|
|
16
|
+
* origin exists to test the *unauthenticated* case.
|
|
17
|
+
* - **Extra backends** (`scripts/dev-extra-backend.mjs`): a second
|
|
18
|
+
* agent-server registered from a browser whose origin belongs to another
|
|
19
|
+
* stack. That origin's editor route, if any, points at the *bundled*
|
|
20
|
+
* stack's editor — a different container's workspace.
|
|
21
|
+
*
|
|
22
|
+
* In both cases a control gated only on the server probe renders and then
|
|
23
|
+
* resolves to the canvas SPA or, worse, someone else's workspace. So the
|
|
24
|
+
* frontend has to intersect the server's capability with the origin's route
|
|
25
|
+
* table, and this module is the origin half of that.
|
|
26
|
+
*/
|
|
27
|
+
/**
|
|
28
|
+
* The path prefix this origin serves the editor under, or `null` if it serves
|
|
29
|
+
* no editor at all.
|
|
30
|
+
*
|
|
31
|
+
* Two sources, in order — mirroring `getRawRuntimeServicesInfo` in
|
|
32
|
+
* `agent-server-adapter.ts`:
|
|
33
|
+
* 1. `VITE_VSCODE_BASE_PATH` — baked in at build time by the dev launchers
|
|
34
|
+
* that proxy the editor (`npm run dev`, dev:static).
|
|
35
|
+
* 2. `window.__AGENT_CANVAS_VSCODE_BASE_PATH__` — injected into index.html at
|
|
36
|
+
* serve time by `scripts/static-server.mjs --vscode-base-path <path>`,
|
|
37
|
+
* which refuses to start unless a matching `--route` exists. That is the
|
|
38
|
+
* path used by static builds (the Docker image, the published binary),
|
|
39
|
+
* where the env var is empty in the prebuilt bundle.
|
|
40
|
+
*
|
|
41
|
+
* Absent from both means "this origin does not serve the editor" and the
|
|
42
|
+
* control is hidden. That is the pre-existing behavior for every local backend,
|
|
43
|
+
* so a deployment this cannot detect is no worse off than before.
|
|
44
|
+
*/
|
|
45
|
+
export declare function getOriginVSCodeBasePath(): string | null;
|
|
46
|
+
/**
|
|
47
|
+
* Whether `url` is an editor URL this origin will actually route.
|
|
48
|
+
*
|
|
49
|
+
* The agent-server appends its own `vscode_base_path` to the origin we send it,
|
|
50
|
+
* so the returned URL carries the prefix of the server that answered — not
|
|
51
|
+
* necessarily the prefix this origin routes. An extra backend that configures
|
|
52
|
+
* no prefix yields `<origin>/?tkn=…`, which is the canvas root: same origin,
|
|
53
|
+
* wrong destination. Comparing paths is what separates the two.
|
|
54
|
+
*/
|
|
55
|
+
export declare function isVSCodeUrlServedByOrigin(url: string | null | undefined, basePath: string | null): boolean;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
//#region src/utils/vscode-origin.ts
|
|
2
|
+
var e = "__AGENT_CANVAS_VSCODE_BASE_PATH__";
|
|
3
|
+
function t() {
|
|
4
|
+
if (typeof window < "u") {
|
|
5
|
+
let t = window[e];
|
|
6
|
+
if (typeof t == "string" && t.trim()) return n(t.trim());
|
|
7
|
+
}
|
|
8
|
+
return null;
|
|
9
|
+
}
|
|
10
|
+
function n(e) {
|
|
11
|
+
let t = e.startsWith("/") ? e : `/${e}`;
|
|
12
|
+
return t.length > 1 ? t.replace(/\/+$/, "") : t;
|
|
13
|
+
}
|
|
14
|
+
function r(e, t) {
|
|
15
|
+
if (!e || !t) return !1;
|
|
16
|
+
let n;
|
|
17
|
+
try {
|
|
18
|
+
n = new URL(e, typeof window < "u" ? window.location.href : void 0);
|
|
19
|
+
} catch {
|
|
20
|
+
return !1;
|
|
21
|
+
}
|
|
22
|
+
return typeof window < "u" && n.origin !== window.location.origin ? !1 : n.pathname === t || n.pathname.startsWith(`${t}/`);
|
|
23
|
+
}
|
|
24
|
+
//#endregion
|
|
25
|
+
export { t as getOriginVSCodeBasePath, r as isVSCodeUrlServedByOrigin };
|
|
26
|
+
|
|
27
|
+
//# sourceMappingURL=vscode-origin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vscode-origin.js","names":[],"sources":["../../src/utils/vscode-origin.ts"],"sourcesContent":["/**\n * Whether *this browser origin* can serve the editor, and whether a given\n * editor URL is one it will actually route.\n *\n * Editor availability is not a property of the agent-server process alone. The\n * agent-server answers `/api/vscode/status` for whatever conversation you ask\n * about, and builds `/api/vscode/url` from the `base_url` the caller sends —\n * which is always `window.location.origin`. So a server can truthfully report\n * an editor that the page's own origin has no route to. Two supported layouts\n * hit that:\n *\n * - **Public mode** (`docker/entrypoint.sh`, `--auth-required`): a second\n * static server on its own port, sharing the same agent-server but\n * deliberately without the editor route, because the editor's connection\n * token is the session API key (OpenHands/software-agent-sdk#4317) and that\n * origin exists to test the *unauthenticated* case.\n * - **Extra backends** (`scripts/dev-extra-backend.mjs`): a second\n * agent-server registered from a browser whose origin belongs to another\n * stack. That origin's editor route, if any, points at the *bundled*\n * stack's editor — a different container's workspace.\n *\n * In both cases a control gated only on the server probe renders and then\n * resolves to the canvas SPA or, worse, someone else's workspace. So the\n * frontend has to intersect the server's capability with the origin's route\n * table, and this module is the origin half of that.\n */\n\nconst VSCODE_BASE_PATH_WINDOW_KEY = \"__AGENT_CANVAS_VSCODE_BASE_PATH__\";\n\n/**\n * The path prefix this origin serves the editor under, or `null` if it serves\n * no editor at all.\n *\n * Two sources, in order — mirroring `getRawRuntimeServicesInfo` in\n * `agent-server-adapter.ts`:\n * 1. `VITE_VSCODE_BASE_PATH` — baked in at build time by the dev launchers\n * that proxy the editor (`npm run dev`, dev:static).\n * 2. `window.__AGENT_CANVAS_VSCODE_BASE_PATH__` — injected into index.html at\n * serve time by `scripts/static-server.mjs --vscode-base-path <path>`,\n * which refuses to start unless a matching `--route` exists. That is the\n * path used by static builds (the Docker image, the published binary),\n * where the env var is empty in the prebuilt bundle.\n *\n * Absent from both means \"this origin does not serve the editor\" and the\n * control is hidden. That is the pre-existing behavior for every local backend,\n * so a deployment this cannot detect is no worse off than before.\n */\nexport function getOriginVSCodeBasePath(): string | null {\n const envRaw = import.meta.env.VITE_VSCODE_BASE_PATH?.trim();\n if (envRaw) return normalizePrefix(envRaw);\n\n if (typeof window !== \"undefined\") {\n const injected = (window as unknown as Record<string, unknown>)[\n VSCODE_BASE_PATH_WINDOW_KEY\n ];\n if (typeof injected === \"string\" && injected.trim()) {\n return normalizePrefix(injected.trim());\n }\n }\n\n return null;\n}\n\nfunction normalizePrefix(value: string): string {\n const withLeadingSlash = value.startsWith(\"/\") ? value : `/${value}`;\n return withLeadingSlash.length > 1\n ? withLeadingSlash.replace(/\\/+$/, \"\")\n : withLeadingSlash;\n}\n\n/**\n * Whether `url` is an editor URL this origin will actually route.\n *\n * The agent-server appends its own `vscode_base_path` to the origin we send it,\n * so the returned URL carries the prefix of the server that answered — not\n * necessarily the prefix this origin routes. An extra backend that configures\n * no prefix yields `<origin>/?tkn=…`, which is the canvas root: same origin,\n * wrong destination. Comparing paths is what separates the two.\n */\nexport function isVSCodeUrlServedByOrigin(\n url: string | null | undefined,\n basePath: string | null,\n): boolean {\n if (!url || !basePath) return false;\n\n let parsed: URL;\n try {\n parsed = new URL(\n url,\n typeof window !== \"undefined\" ? window.location.href : undefined,\n );\n } catch {\n return false;\n }\n\n // A cross-origin URL is somebody else's problem to route, not ours to vouch\n // for. The local path always builds on `window.location.origin`, so this only\n // fires on a value we did not construct.\n if (\n typeof window !== \"undefined\" &&\n parsed.origin !== window.location.origin\n ) {\n return false;\n }\n\n return (\n parsed.pathname === basePath || parsed.pathname.startsWith(`${basePath}/`)\n );\n}\n"],"mappings":";AA2BA,IAAM,IAA8B;AAoBpC,SAAgB,IAAyC;CAIvD,IAAI,OAAO,SAAW,KAAa;EACjC,IAAM,IAAY,OAChB;EAEF,IAAI,OAAO,KAAa,YAAY,EAAS,KAAK,GAChD,OAAO,EAAgB,EAAS,KAAK,CAAC;CAE1C;CAEA,OAAO;AACT;AAEA,SAAS,EAAgB,GAAuB;CAC9C,IAAM,IAAmB,EAAM,WAAW,GAAG,IAAI,IAAQ,IAAI;CAC7D,OAAO,EAAiB,SAAS,IAC7B,EAAiB,QAAQ,QAAQ,EAAE,IACnC;AACN;AAWA,SAAgB,EACd,GACA,GACS;CACT,IAAI,CAAC,KAAO,CAAC,GAAU,OAAO;CAE9B,IAAI;CACJ,IAAI;EACF,IAAS,IAAI,IACX,GACA,OAAO,SAAW,MAAc,OAAO,SAAS,OAAO,KAAA,CACzD;CACF,QAAQ;EACN,OAAO;CACT;CAYA,OANE,OAAO,SAAW,OAClB,EAAO,WAAW,OAAO,SAAS,SAE3B,KAIP,EAAO,aAAa,KAAY,EAAO,SAAS,WAAW,GAAG,EAAS,EAAE;AAE7E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket-handshake.cjs","names":[],"sources":["../../src/utils/websocket-handshake.ts"],"sourcesContent":["// Browsers never time out a socket stuck in CONNECTING on their own, and\n// Chrome serializes WebSocket handshakes per host — a hung handshake also\n// blocks every other socket to the same origin until it settles. Close it\n// after this long so a retry (and any other queued handshake) can proceed.\nconst HANDSHAKE_TIMEOUT_MS = 10_000;\n\n/**\n * Watches a freshly constructed socket's handshake and closes the socket if it\n * is still in CONNECTING when the timeout elapses. close() fires the socket's\n * own error/close events (code 1006), so the abort flows through the caller's\n * normal close handling rather than a separate failure path.\n *\n * Returns a cancel function. The caller must invoke it once the handshake\n * settles — in its open and close handlers, and in any cleanup that detaches\n * those handlers — so the watchdog never outlives the socket it watches.\n */\nexport function startHandshakeWatchdog(\n ws: Pick<WebSocket, \"readyState\" | \"close\">,\n): () => void {\n const timeout = setTimeout(() => {\n if (ws.readyState === WebSocket.CONNECTING) {\n ws.close();\n }\n }, HANDSHAKE_TIMEOUT_MS);\n return () => clearTimeout(timeout);\n}\n"],"mappings":"6CAIA,IAAM,EAAuB,IAY7B,SAAgB,EACd,EACY,CACZ,IAAM,EAAU,eAAiB,CAC3B,EAAG,aAAe,UAAU,YAC9B,EAAG,MAAM,CAEb,EAAG,CAAoB,EACvB,UAAa,aAAa,CAAO,CACnC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Watches a freshly constructed socket's handshake and closes the socket if it
|
|
3
|
+
* is still in CONNECTING when the timeout elapses. close() fires the socket's
|
|
4
|
+
* own error/close events (code 1006), so the abort flows through the caller's
|
|
5
|
+
* normal close handling rather than a separate failure path.
|
|
6
|
+
*
|
|
7
|
+
* Returns a cancel function. The caller must invoke it once the handshake
|
|
8
|
+
* settles — in its open and close handlers, and in any cleanup that detaches
|
|
9
|
+
* those handlers — so the watchdog never outlives the socket it watches.
|
|
10
|
+
*/
|
|
11
|
+
export declare function startHandshakeWatchdog(ws: Pick<WebSocket, "readyState" | "close">): () => void;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
//#region src/utils/websocket-handshake.ts
|
|
2
|
+
var e = 1e4;
|
|
3
|
+
function t(t) {
|
|
4
|
+
let n = setTimeout(() => {
|
|
5
|
+
t.readyState === WebSocket.CONNECTING && t.close();
|
|
6
|
+
}, e);
|
|
7
|
+
return () => clearTimeout(n);
|
|
8
|
+
}
|
|
9
|
+
//#endregion
|
|
10
|
+
export { t as startHandshakeWatchdog };
|
|
11
|
+
|
|
12
|
+
//# sourceMappingURL=websocket-handshake.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket-handshake.js","names":[],"sources":["../../src/utils/websocket-handshake.ts"],"sourcesContent":["// Browsers never time out a socket stuck in CONNECTING on their own, and\n// Chrome serializes WebSocket handshakes per host — a hung handshake also\n// blocks every other socket to the same origin until it settles. Close it\n// after this long so a retry (and any other queued handshake) can proceed.\nconst HANDSHAKE_TIMEOUT_MS = 10_000;\n\n/**\n * Watches a freshly constructed socket's handshake and closes the socket if it\n * is still in CONNECTING when the timeout elapses. close() fires the socket's\n * own error/close events (code 1006), so the abort flows through the caller's\n * normal close handling rather than a separate failure path.\n *\n * Returns a cancel function. The caller must invoke it once the handshake\n * settles — in its open and close handlers, and in any cleanup that detaches\n * those handlers — so the watchdog never outlives the socket it watches.\n */\nexport function startHandshakeWatchdog(\n ws: Pick<WebSocket, \"readyState\" | \"close\">,\n): () => void {\n const timeout = setTimeout(() => {\n if (ws.readyState === WebSocket.CONNECTING) {\n ws.close();\n }\n }, HANDSHAKE_TIMEOUT_MS);\n return () => clearTimeout(timeout);\n}\n"],"mappings":";AAIA,IAAM,IAAuB;AAY7B,SAAgB,EACd,GACY;CACZ,IAAM,IAAU,iBAAiB;EAC/B,AAAI,EAAG,eAAe,UAAU,cAC9B,EAAG,MAAM;CAEb,GAAG,CAAoB;CACvB,aAAa,aAAa,CAAO;AACnC"}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import type { BackendKind } from "#/api/backend-registry/types";
|
|
2
2
|
import type { WorkspaceMode } from "#/api/conversation-metadata-store";
|
|
3
3
|
import { I18nKey } from "#/i18n/declaration";
|
|
4
|
+
export declare const DEFAULT_WORKSPACE_MODE: WorkspaceMode;
|
|
5
|
+
export declare const LAST_LOCAL_WORKSPACE_MODE_STORAGE_KEY = "openhands-last-local-workspace-mode";
|
|
6
|
+
export declare function readStoredLocalWorkspaceMode(): WorkspaceMode;
|
|
7
|
+
export declare function writeStoredLocalWorkspaceMode(mode: WorkspaceMode): void;
|
|
4
8
|
export declare function getWorkspaceModeI18nKey(mode: WorkspaceMode, backendKind: BackendKind): I18nKey;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openhands/agent-canvas",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.16.0",
|
|
4
4
|
"description": "Agent Canvas UI for OpenHands - run AI coding agents with a visual interface",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"private": false,
|
|
@@ -23,8 +23,8 @@
|
|
|
23
23
|
"@heroui/react": "2.8.10",
|
|
24
24
|
"@microlink/react-json-view": "1.31.25",
|
|
25
25
|
"@monaco-editor/react": "4.7.0",
|
|
26
|
-
"@openhands/extensions": "0.
|
|
27
|
-
"@openhands/typescript-client": "1.
|
|
26
|
+
"@openhands/extensions": "0.19.0",
|
|
27
|
+
"@openhands/typescript-client": "1.39.0",
|
|
28
28
|
"@react-router/node": "7.18.2",
|
|
29
29
|
"@react-router/serve": "7.18.2",
|
|
30
30
|
"@tailwindcss/vite": "4.3.3",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
*
|
|
20
20
|
* Usage:
|
|
21
21
|
* node scripts/check-sdk-version-sync.mjs
|
|
22
|
-
* EXPECTED_SDK_VERSION=1.
|
|
22
|
+
* EXPECTED_SDK_VERSION=1.44.0 node scripts/check-sdk-version-sync.mjs
|
|
23
23
|
* node scripts/check-sdk-version-sync.mjs --check-pypi
|
|
24
24
|
*
|
|
25
25
|
* Environment variables:
|
|
@@ -78,7 +78,7 @@ Triggering from other repos:
|
|
|
78
78
|
-H "Authorization: token \$GITHUB_TOKEN" \\
|
|
79
79
|
-H "Accept: application/vnd.github.v3+json" \\
|
|
80
80
|
https://api.github.com/repos/OpenHands/OpenHands/dispatches \\
|
|
81
|
-
-d '{"event_type": "sdk-version-check", "client_payload": {"version": "1.
|
|
81
|
+
-d '{"event_type": "sdk-version-check", "client_payload": {"version": "1.44.0"}}'
|
|
82
82
|
`);
|
|
83
83
|
process.exit(0);
|
|
84
84
|
}
|
|
@@ -260,9 +260,9 @@ async function fetchPyPIDependencies(packageName, version) {
|
|
|
260
260
|
* Parse PyPI requires_dist array and extract SDK package versions
|
|
261
261
|
*
|
|
262
262
|
* PyPI returns dependencies in PEP 508 format like:
|
|
263
|
-
* "openhands-sdk>=1.
|
|
264
|
-
* "openhands-tools==1.
|
|
265
|
-
* "openhands-workspace (>=1.
|
|
263
|
+
* "openhands-sdk>=1.44.0,<2.0.0"
|
|
264
|
+
* "openhands-tools==1.44.0"
|
|
265
|
+
* "openhands-workspace (>=1.44.0)"
|
|
266
266
|
*/
|
|
267
267
|
function parseSdkVersionsFromRequiresDist(requiresDist) {
|
|
268
268
|
const versions = {};
|
|
@@ -276,7 +276,7 @@ function parseSdkVersionsFromRequiresDist(requiresDist) {
|
|
|
276
276
|
}
|
|
277
277
|
|
|
278
278
|
// Extract the version number - look for patterns like:
|
|
279
|
-
// ">=1.
|
|
279
|
+
// ">=1.44.0", "==1.44.0", "(>=1.44.0)", "~=1.44.0"
|
|
280
280
|
// After the package name and before any comma or closing paren
|
|
281
281
|
const versionPattern = /[><=~!]+\s*([0-9]+(?:\.[0-9]+)*)/;
|
|
282
282
|
const match = dep.match(versionPattern);
|
|
@@ -26,6 +26,10 @@ const IDENTICAL_VALUE_ALLOWLIST = new Set([
|
|
|
26
26
|
'COMMAND_MENU$SHORTCUT',
|
|
27
27
|
'CONVERSATION$ACP_AGENT_GENERIC',
|
|
28
28
|
'CONVERSATION$BUDGET_USAGE_FORMAT',
|
|
29
|
+
'CONVERSATION$OVERVIEW_DIFF_ADDITIONS',
|
|
30
|
+
'CONVERSATION$OVERVIEW_DIFF_DELETIONS',
|
|
31
|
+
'CONVERSATION$OVERVIEW_GIT',
|
|
32
|
+
'CONVERSATION$OVERVIEW_UNAVAILABLE',
|
|
29
33
|
'CONVERSATION_PANEL$PREVIEW_GIT',
|
|
30
34
|
'FILES$VSCODE',
|
|
31
35
|
'GITHUB$AUTH_SCOPE',
|
|
@@ -56,6 +60,7 @@ const IDENTICAL_VALUE_ALLOWLIST = new Set([
|
|
|
56
60
|
'SETTINGS$MCP_SERVER_TYPE_SSE',
|
|
57
61
|
'SETTINGS$MCP_SERVER_TYPE_STDIO',
|
|
58
62
|
'SETTINGS$NAV_LLM',
|
|
63
|
+
'SETTINGS$OPENHANDS_API_KEY_HELP_LINK',
|
|
59
64
|
'SETTINGS$SKILLS_PILLS_MORE',
|
|
60
65
|
'SETTINGS$SKILLS_VERSION',
|
|
61
66
|
'SETTINGS$SLACK',
|
|
@@ -43,7 +43,10 @@ function parsePort(value, fallback) {
|
|
|
43
43
|
* @param {string} cwd
|
|
44
44
|
* @param {Record<string, string | undefined>} env
|
|
45
45
|
*/
|
|
46
|
-
export function buildExtraBackendConfig(
|
|
46
|
+
export function buildExtraBackendConfig(
|
|
47
|
+
cwd = process.cwd(),
|
|
48
|
+
env = process.env,
|
|
49
|
+
) {
|
|
47
50
|
const base = buildSafeDevConfig(cwd, env);
|
|
48
51
|
|
|
49
52
|
const backendPort = parsePort(
|
|
@@ -70,7 +73,7 @@ function isEnoentError(error) {
|
|
|
70
73
|
typeof error === "object" &&
|
|
71
74
|
"code" in error &&
|
|
72
75
|
error.code === "ENOENT") ||
|
|
73
|
-
|
|
76
|
+
/ENOENT/.test(String(error)),
|
|
74
77
|
);
|
|
75
78
|
}
|
|
76
79
|
|
|
@@ -94,10 +97,14 @@ async function waitForServer(url, timeoutMs = DEFAULT_WAIT_TIMEOUT_MS) {
|
|
|
94
97
|
}
|
|
95
98
|
|
|
96
99
|
function spawnProcess(command, args, options = {}) {
|
|
97
|
-
const child = spawn(
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
100
|
+
const child = spawn(
|
|
101
|
+
command,
|
|
102
|
+
args,
|
|
103
|
+
getProcessTreeSpawnOptions({
|
|
104
|
+
stdio: "inherit",
|
|
105
|
+
...options,
|
|
106
|
+
}),
|
|
107
|
+
);
|
|
101
108
|
|
|
102
109
|
child.once("error", (error) => {
|
|
103
110
|
if (isEnoentError(error) && command === "uvx") {
|
|
@@ -164,6 +171,14 @@ async function main() {
|
|
|
164
171
|
{
|
|
165
172
|
cwd: config.cwd,
|
|
166
173
|
env: {
|
|
174
|
+
// Deliberately not opting into the editor path prefix. This server is
|
|
175
|
+
// reached by registering it as an extra backend from a browser whose
|
|
176
|
+
// origin belongs to some *other* stack, so a prefix on that origin
|
|
177
|
+
// either does not resolve or — worse — resolves to the bundled
|
|
178
|
+
// stack's editor, silently handing back a different container's
|
|
179
|
+
// workspace. No single global prefix can disambiguate the two, so this
|
|
180
|
+
// launcher stays out of prefix-mode; the editor button is unavailable
|
|
181
|
+
// for conversations on an extra backend.
|
|
167
182
|
...process.env,
|
|
168
183
|
...buildAgentServerEnv(config),
|
|
169
184
|
},
|
|
@@ -190,6 +205,12 @@ async function main() {
|
|
|
190
205
|
|
|
191
206
|
process.on("SIGINT", () => shutdown("SIGINT"));
|
|
192
207
|
process.on("SIGTERM", () => shutdown("SIGTERM"));
|
|
208
|
+
// The agent-server is spawned detached, so a SIGHUP that kills this launcher
|
|
209
|
+
// (terminal or multiplexer death) would otherwise leave it running and holding
|
|
210
|
+
// its port. Forward SIGTERM rather than SIGHUP: uvicorn only handles
|
|
211
|
+
// SIGINT/SIGTERM, so a forwarded SIGHUP would terminate the agent-server by
|
|
212
|
+
// default action instead of shutting it down gracefully.
|
|
213
|
+
process.on("SIGHUP", () => shutdown("SIGTERM"));
|
|
193
214
|
|
|
194
215
|
const backendErrored = new Promise((_, reject) => {
|
|
195
216
|
backend.once("error", (error) => reject(error));
|
|
@@ -221,9 +242,7 @@ async function main() {
|
|
|
221
242
|
|
|
222
243
|
backend.once("exit", (code) => {
|
|
223
244
|
if (!shuttingDown) {
|
|
224
|
-
console.error(
|
|
225
|
-
`agent-server exited unexpectedly with code ${code ?? 0}`,
|
|
226
|
-
);
|
|
245
|
+
console.error(`agent-server exited unexpectedly with code ${code ?? 0}`);
|
|
227
246
|
shutdown();
|
|
228
247
|
process.exitCode = code ?? 1;
|
|
229
248
|
} else {
|