@openhands/agent-canvas 1.13.0 → 1.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/README.windows.md +2 -2
- package/build/assets/acp-providers-BKvmTf82.js +1 -0
- package/build/assets/active-backend-context-DKFSMbn3.js +2 -0
- package/build/assets/agent-context-settings-D3PjSTU1.js +1 -0
- package/build/assets/agent-profiles-settings-D4cY5U2T.js +1 -0
- package/build/assets/agent-server-conversation-service.api-DozDKIW_.js +86 -0
- package/build/assets/agent-settings-351vXWc9.js +2 -0
- package/build/assets/agent-settings-Ce7BDZ6I.js +1 -0
- package/build/assets/alert-banner-Kyy1YWZU.js +1 -0
- package/build/assets/api-error-message-BJyfWp6p.js +1 -0
- package/build/assets/api-key-entry-screen-INIxqAMs.js +1 -0
- package/build/assets/app-settings-CbHqzQus.js +1 -0
- package/build/assets/automation-detail-DXDhUwPq.js +3 -0
- package/build/assets/automation-export-BRopEHMu.js +2 -0
- package/build/assets/automation-git-sync-CzyS4cn1.js +1 -0
- package/build/assets/automation-setup-route-FRr05f_g.js +1 -0
- package/build/assets/automation-templates-C_0FZgLG.js +1 -0
- package/build/assets/automations-list-CERuQWE6.js +1 -0
- package/build/assets/back-nav-button-Dm9tIjVf.js +1 -0
- package/build/assets/backend-form-modal-DK78-jn1.js +1 -0
- package/build/assets/backend-synced-settings-badge-3fOwg6Bd.js +1 -0
- package/build/assets/badge-D4SqUCsR.js +1 -0
- package/build/assets/base-modal-C7_BDl_U.js +1 -0
- package/build/assets/bot-C-0Wu7vQ.js +1 -0
- package/build/assets/brand-button-Dxv6PDeN.js +1 -0
- package/build/assets/browser-11etCQ04.js +7 -0
- package/build/assets/browser-tab-BAl4ckJE.js +1 -0
- package/build/assets/chat-send-button-DWwR2cgI.js +1 -0
- package/build/assets/check-Cf2YoT90.js +1 -0
- package/build/assets/chevron-down-C3OQ-ehx.js +1 -0
- package/build/assets/chevron-right-CN1uUiJ1.js +1 -0
- package/build/assets/circle-check-g5yeGMd-.js +1 -0
- package/build/assets/circle-plus-check-toggle-CBh_qomE.js +1 -0
- package/build/assets/cloud-funnel-analytics-287iIERo.js +1 -0
- package/build/assets/cog-C4rrw-ZK.js +1 -0
- package/build/assets/command-menu-BZQ8S3Ke.js +1 -0
- package/build/assets/commits-tab-DZtJgaDM.js +1 -0
- package/build/assets/condenser-settings-BcNmYR4s.js +1 -0
- package/build/assets/confirmation-modal-Bk4JRcCM.js +1 -0
- package/build/assets/context-menu-list-item-lVYETtY5.js +1 -0
- package/build/assets/conversation-CchMzpGl.js +1 -0
- package/build/assets/conversation-Dpzftz57.js +93 -0
- package/build/assets/conversation-panel-CchMzpGl.js +1 -0
- package/build/assets/conversation-state-store-a9d2fxRc.js +1 -0
- package/build/assets/conversation-store-Ca3ghXap.js +6 -0
- package/build/assets/conversation-tab-empty-state-HJtkmHZj.js +1 -0
- package/build/assets/copy-to-clipboard-button-Cjkswvnj.js +1 -0
- package/build/assets/device-verify-EZhHhBT7.js +1 -0
- package/build/assets/dropdown-classes-DJe-E6MC.js +1 -0
- package/build/assets/edit-automation-modal-D-urtv8n.js +1 -0
- package/build/assets/empty-state-CvaVahVr.js +1 -0
- package/build/assets/entry.client-C7Bi2tkU.js +2 -0
- package/build/assets/enum-filter-dropdown-DliX_Lo0.js +1 -0
- package/build/assets/environment-switch-overlay-CEKrFiMw.js +1 -0
- package/build/assets/error-state-BALXiBNy.js +1 -0
- package/build/assets/extension-module-card-classes-DpeaYhYo.js +1 -0
- package/build/assets/extensions-hub-CFduxBnk.js +1 -0
- package/build/assets/extensions-navigation-BeC224yX.js +1 -0
- package/build/assets/external-link-DFpYunfj.js +1 -0
- package/build/assets/files-tab-CL3J9b3p.js +1 -0
- package/build/assets/form-control-classes-CGw40z5h.js +1 -0
- package/build/assets/format-model-name-BNPKVsIq.js +1 -0
- package/build/assets/get-git-path-DlAJa_i6.js +1 -0
- package/build/assets/git-repo-dropdown-DGMEhz7d.js +1 -0
- package/build/assets/git-repo-dropdown-ai8qaNkD.js +1 -0
- package/build/assets/highlighted-source-view-C3sxykQi.js +1 -0
- package/build/assets/home-BCGlNJCA.js +1 -0
- package/build/assets/home-DB1pRqTC.js +1 -0
- package/build/assets/home-automation-run-tooltip-CooFQRIG.js +1 -0
- package/build/assets/home-store-Dl1dPE58.js +1 -0
- package/build/assets/index-home-DB1pRqTC.js +1 -0
- package/build/assets/info-uYSVzX86.js +1 -0
- package/build/assets/install-server-modal-BbJdhzet.js +1 -0
- package/build/assets/kebab-menu-item-content-BYokkRHi.js +1 -0
- package/build/assets/key-Cn5za3rg.js +1 -0
- package/build/assets/launch-C1ieiOGe.js +1 -0
- package/build/assets/list-filter-OFkpRrmi.js +1 -0
- package/build/assets/list-todo-Cuu-STFc.js +1 -0
- package/build/assets/llm-not-configured-banner-BqqYnJ1t.js +27 -0
- package/build/assets/llm-settings-CnDbbmVW.js +1 -0
- package/build/assets/llm-settings-S8Yjg__1.js +1 -0
- package/build/assets/llm-subscription-service-BpPfzW4x.js +1 -0
- package/build/assets/loader-circle-nvrwthvj.js +1 -0
- package/build/assets/loading-spinner-0L3ZTToZ.js +1 -0
- package/build/assets/manage-backends-modal-BCUPswyl.js +1 -0
- package/build/assets/manifest-58597dde.js +1 -0
- package/build/assets/manifest-subpage-layout-BGhiUQbA.js +1 -0
- package/build/assets/map-provider-B9LTm23I.js +1 -0
- package/build/assets/markdown-renderer-Cb2sBWtV.js +8 -0
- package/build/assets/mcp-CKbR4Vft.js +1 -0
- package/build/assets/mcp-marketplace-utils-C13fFccR.js +1 -0
- package/build/assets/mcp-page-Bm4K2NQq.js +9 -0
- package/build/assets/messages-BTN5thLe.js +40 -0
- package/build/assets/modal-body-CMOc2tLl.js +1 -0
- package/build/assets/modal-classes-BAb4Y_BG.js +1 -0
- package/build/assets/modal-close-button-CkJ0Ktjj.js +1 -0
- package/build/assets/mouse-pointer-click-CsgRs_-r.js +1 -0
- package/build/assets/onboarding-Cx_kaiD1.js +1 -0
- package/build/assets/onboarding-modal-vMwn7ihv.js +1 -0
- package/build/assets/organization-service.api-C8XpQ0pM.js +1 -0
- package/build/assets/parse-git-remote-url-DpDM9bK6.js +1 -0
- package/build/assets/pencil-Clh1Wjvh.js +1 -0
- package/build/assets/planner-tab-DQvDU3ap.js +1 -0
- package/build/assets/plug-BuQhHSSG.js +1 -0
- package/build/assets/plugins-management-service-BjYeF0b0.js +1 -0
- package/build/assets/plus-CEKne-Yp.js +1 -0
- package/build/assets/profiles-service.api-QB-T_u-g.js +1 -0
- package/build/assets/providers-FfSZ5TXP.js +1 -0
- package/build/assets/proxy-tcFL2yTQ.js +1 -0
- package/build/assets/puzzle-A9pGxxai.js +1 -0
- package/build/assets/recommended-automations-launcher-Bw8uC4V6.js +1 -0
- package/build/assets/refresh-cw-Bh69DyYO.js +1 -0
- package/build/assets/root-BLeQfBEq.css +1 -0
- package/build/assets/root-ZKKYPR1Z.js +2 -0
- package/build/assets/root-layout-luJoE9IG.js +2 -0
- package/build/assets/schema-field-Csw5fhtN.js +1 -0
- package/build/assets/scroll-fade-state-Dw-i4SGq.js +1 -0
- package/build/assets/sdk-section-page-HTffvm7Q.js +1 -0
- package/build/assets/secret-form-HTUbYw5o.js +1 -0
- package/build/assets/secrets-service-BTor9uAU.js +1 -0
- package/build/assets/secrets-settings-BizaTEr1.js +1 -0
- package/build/assets/server-process-C9RKzd1x.js +1 -0
- package/build/assets/settings-BlmrkwRi.js +1 -0
- package/build/assets/settings-DcNPxz0v.js +1 -0
- package/build/assets/settings-dropdown-input-tM0A0ipy.js +1 -0
- package/build/assets/settings-index-CKq0b0Vg.js +1 -0
- package/build/assets/settings-input-C03KUoSC.js +1 -0
- package/build/assets/settings-list-classes-BJ0g8rWj.js +1 -0
- package/build/assets/settings-modal-AzEF1QPP.js +1 -0
- package/build/assets/settings-service.api-B2agVfjL.js +1 -0
- package/build/assets/settings-switch-CQE0EGC-.js +1 -0
- package/build/assets/settings-utils-ClYOkbbI.js +1 -0
- package/build/assets/shared-conversation-B55pCyBG.js +1 -0
- package/build/assets/shield-check-CFDViW82.js +1 -0
- package/build/assets/sidebar-layout-D3hE08wK.js +1 -0
- package/build/assets/sidebar-mobile-menu-toggle-BOtyJHwE.js +1 -0
- package/build/assets/sidebar-nav-link-CPzhyHQg.js +1 -0
- package/build/assets/sidebar-onboarding-checklist-storage-3qYflszY.js +1 -0
- package/build/assets/sidebar-store-DtpU7zaI.js +1 -0
- package/build/assets/skill-card-pill-row-CFxjoqxn.js +1 -0
- package/build/assets/skill-filter-CWZ5kjcg.js +2 -0
- package/build/assets/skill-icon-badge-CPQJ6A-I.js +1 -0
- package/build/assets/skill-scope-CV1dkAbW.js +1 -0
- package/build/assets/skills-plugins-DGHULTq6.js +1 -0
- package/build/assets/skills-settings-CM1lFv3e.js +1 -0
- package/build/assets/styled-tooltip-Dl06rkpY.js +1 -0
- package/build/assets/task-list-tab-04GNQuii.js +1 -0
- package/build/assets/terminal-Cj0iHIW7.js +3 -0
- package/build/assets/toggle-switch-Fd_QGz0r.js +1 -0
- package/build/assets/trash-2-Dl8_RGz0.js +1 -0
- package/build/assets/trash-_RMt7Ayc.js +1 -0
- package/build/assets/triangle-alert-SM-q4NU_.js +1 -0
- package/build/assets/typography-SgFy466J.js +1 -0
- package/build/assets/usage-tab-BcfWV6db.js +1 -0
- package/build/assets/use-acp-credential-form-BsSW5NHG.js +1 -0
- package/build/assets/use-activate-agent-profile-B2NS8nA5.js +1 -0
- package/build/assets/use-agent-profiles-DWBPC0Si.js +1 -0
- package/build/assets/use-automation-health-BxXdzZMP.js +1 -0
- package/build/assets/use-automations-zYb0dUny.js +1 -0
- package/build/assets/use-can-manage-org-profiles-BWMahtUh.js +1 -0
- package/build/assets/use-cloud-current-user-id-CPHMDG-C.js +1 -0
- package/build/assets/use-config-Bft35DOK.js +1 -0
- package/build/assets/use-create-conversation-DwN5vv2f.js +1 -0
- package/build/assets/use-create-secret-BSxJMxHp.js +1 -0
- package/build/assets/use-get-secrets-BT4ihRwj.js +1 -0
- package/build/assets/use-has-permission-B3C8rQmR.js +1 -0
- package/build/assets/use-is-authed-CFGkY3-Z.js +1 -0
- package/build/assets/use-launch-skill-in-chat-BYjYihBP.js +1 -0
- package/build/assets/use-llm-configured-BI6obxsc.js +1 -0
- package/build/assets/use-llm-profiles-djGAhTWL.js +1 -0
- package/build/assets/use-manifest-capabilities-3z0-1G59.js +1 -0
- package/build/assets/use-onboarding-completion-BXpyUSsJ.js +1 -0
- package/build/assets/use-plugins-marketplace-DI4_pK56.js +1 -0
- package/build/assets/use-save-agent-profile-DdBSTdpN.js +1 -0
- package/build/assets/use-save-settings-CUZW6yXP.js +1 -0
- package/build/assets/use-settings-C5VhGpqd.js +1 -0
- package/build/assets/use-settings-nav-items-DHaUu1Dg.js +16 -0
- package/build/assets/use-tracking-D5t9otIF.js +3 -0
- package/build/assets/use-user-conversation-DT0_QCnL.js +1 -0
- package/build/assets/useInfiniteQuery-CgeUQPfs.js +1 -0
- package/build/assets/useMutation-DFnzkf6f.js +1 -0
- package/build/assets/useQueries-BhbrGEf1.js +1 -0
- package/build/assets/useQuery-BXWbZBZl.js +1 -0
- package/build/assets/utils-DaCIEEQP.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-CTvDDiXg.js +1 -0
- package/build/assets/vendor~entry.client-BFE7Llz9.js +1 -0
- package/build/assets/vendor~entry.client-BaKt_PIp.js +9 -0
- package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~kepq2zme-ZixYGy6E.js +186 -0
- package/build/assets/vendor~index-home~home~conversation-panel~conversation-BTyukeM-.js +13 -0
- package/build/assets/vendor~root-layout-BlUaZ18v.js +1 -0
- package/build/assets/vendor~root-layout~conversation-panel~conversation-BYAWJwQX.js +1 -0
- package/build/assets/vendor~root-layout~conversation-panel~conversation~skills-settings~automations-list~shared-~bovqqk8e-CHaLEBVR.js +1 -0
- package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~mcp~automations-list~aut~ibfbmr9f-B2OLKL7N.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~hjcjabwg-Dtu7BpYk.js +48 -0
- package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~iw7io29p-Dz-MAyNb.js +1 -0
- package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~eo2nf80n-DonTKfQD.js +4949 -0
- package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~jz4f6vo2-BgxDvUcf.js +8420 -0
- package/build/assets/verification-settings-Bj6bo097.js +1 -0
- package/build/assets/wrench-hi7Q13dF.js +1 -0
- package/build/assets/x-DkgltWa0.js +1 -0
- package/build/index.html +4 -4
- package/build/locales/ar/openhands.json +183 -44
- package/build/locales/ca/openhands.json +183 -44
- package/build/locales/de/openhands.json +183 -44
- package/build/locales/en/openhands.json +183 -44
- package/build/locales/es/openhands.json +183 -44
- package/build/locales/fr/openhands.json +183 -44
- package/build/locales/it/openhands.json +183 -44
- package/build/locales/ja/openhands.json +183 -44
- package/build/locales/ko-KR/openhands.json +183 -44
- package/build/locales/no/openhands.json +183 -44
- package/build/locales/pt/openhands.json +183 -44
- package/build/locales/tr/openhands.json +183 -44
- package/build/locales/uk/openhands.json +183 -44
- package/build/locales/zh-CN/openhands.json +183 -44
- package/build/locales/zh-TW/openhands.json +183 -44
- package/config/defaults.json +2 -2
- 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 +115 -110
- package/dist/api/agent-server-adapter.js.map +1 -1
- package/dist/api/automation-service/automation-service.api.cjs +1 -1
- package/dist/api/automation-service/automation-service.api.cjs.map +1 -1
- package/dist/api/automation-service/automation-service.api.d.ts +23 -2
- package/dist/api/automation-service/automation-service.api.js +130 -73
- 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/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 +9 -0
- package/dist/api/cloud/conversation-service.api.js +11 -1
- package/dist/api/cloud/conversation-service.api.js.map +1 -1
- package/dist/api/conversation-service/agent-server-conversation-service.api.cjs +1 -1
- package/dist/api/conversation-service/agent-server-conversation-service.api.cjs.map +1 -1
- package/dist/api/conversation-service/agent-server-conversation-service.api.js +29 -24
- package/dist/api/conversation-service/agent-server-conversation-service.api.js.map +1 -1
- 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/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 +1 -1
- package/dist/api/profiles-service/profiles-service.api.cjs.map +1 -1
- package/dist/api/profiles-service/profiles-service.api.d.ts +29 -2
- package/dist/api/profiles-service/profiles-service.api.js +25 -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/secrets-service.cjs +1 -1
- package/dist/api/secrets-service.cjs.map +1 -1
- package/dist/api/secrets-service.d.ts +5 -0
- package/dist/api/secrets-service.js +12 -6
- package/dist/api/secrets-service.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/index.d.ts +0 -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 +160 -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-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/git-sync/git-sync-activity-row.d.ts +15 -0
- package/dist/components/features/automations/git-sync/git-sync-config-form.d.ts +13 -0
- package/dist/components/features/automations/git-sync/git-sync-error-banner.d.ts +6 -0
- package/dist/components/features/automations/git-sync/git-sync-not-local-state.d.ts +1 -0
- package/dist/components/features/automations/git-sync/git-sync-overview-section.d.ts +12 -0
- package/dist/components/features/automations/git-sync/git-sync-skeleton.d.ts +1 -0
- package/dist/components/features/automations/git-sync/git-sync-status-pill.d.ts +7 -0
- package/dist/components/features/automations/git-sync/git-sync-unsupported-state.d.ts +7 -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.d.ts +2 -1
- 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.js +10 -10
- 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/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 +151 -148
- package/dist/components/features/chat/chat-interface.js.map +1 -1
- package/dist/components/features/chat/error-message-banner.cjs +1 -1
- package/dist/components/features/chat/error-message-banner.cjs.map +1 -1
- package/dist/components/features/chat/error-message-banner.d.ts +3 -1
- package/dist/components/features/chat/error-message-banner.js +64 -58
- package/dist/components/features/chat/error-message-banner.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 +138 -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 +98 -88
- package/dist/components/features/conversation/conversation-tabs/conversation-tabs.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/compact-conversation-row.cjs +1 -1
- package/dist/components/features/conversation-panel/compact-conversation-row.js +6 -6
- 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 +263 -236
- 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/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 +0 -1
- 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 +74 -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/steps/setup-llm-step.d.ts +10 -7
- 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/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 +1 -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 +10 -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/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 +7 -7
- package/dist/components/features/settings/sdk-settings/sdk-section-page.js.map +1 -1
- 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-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 +115 -111
- package/dist/components/features/sidebar/sidebar-rail-body.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 +88 -0
- package/dist/components/features/skills/build-skill-pills.js.map +1 -0
- 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.js +166 -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/buttons/conversation-confirmation-buttons.cjs +1 -1
- package/dist/components/shared/buttons/conversation-confirmation-buttons.cjs.map +1 -1
- package/dist/components/shared/buttons/conversation-confirmation-buttons.js +1 -1
- package/dist/components/shared/buttons/conversation-confirmation-buttons.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 +4 -4
- 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 +2 -2
- 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 +184 -159
- package/dist/contexts/conversation-websocket-context.js.map +1 -1
- 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-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/query-keys.cjs +1 -1
- package/dist/hooks/query/query-keys.cjs.map +1 -1
- package/dist/hooks/query/query-keys.d.ts +3 -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-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.js +1 -1
- package/dist/hooks/query/use-backends-health.js.map +1 -1
- 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-git-sync.d.ts +19 -0
- 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 +3 -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 +1 -1
- 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-task-polling.cjs +1 -1
- package/dist/hooks/query/use-task-polling.cjs.map +1 -1
- package/dist/hooks/query/use-task-polling.js +12 -10
- package/dist/hooks/query/use-task-polling.js.map +1 -1
- package/dist/hooks/query/use-workspace-files.cjs +1 -1
- package/dist/hooks/query/use-workspace-files.cjs.map +1 -1
- package/dist/hooks/query/use-workspace-files.d.ts +14 -4
- package/dist/hooks/query/use-workspace-files.js +46 -33
- package/dist/hooks/query/use-workspace-files.js.map +1 -1
- 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-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.d.ts +5 -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-tracking.cjs +1 -1
- package/dist/hooks/use-tracking.cjs.map +1 -1
- package/dist/hooks/use-tracking.d.ts +23 -0
- package/dist/hooks/use-tracking.js +16 -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 +182 -43
- 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 +3092 -729
- 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/locales/ar/openhands.json +183 -44
- package/dist/locales/ca/openhands.json +183 -44
- package/dist/locales/de/openhands.json +183 -44
- package/dist/locales/en/openhands.json +183 -44
- package/dist/locales/es/openhands.json +183 -44
- package/dist/locales/fr/openhands.json +183 -44
- package/dist/locales/it/openhands.json +183 -44
- package/dist/locales/ja/openhands.json +183 -44
- package/dist/locales/ko-KR/openhands.json +183 -44
- package/dist/locales/no/openhands.json +183 -44
- package/dist/locales/pt/openhands.json +183 -44
- package/dist/locales/tr/openhands.json +183 -44
- package/dist/locales/uk/openhands.json +183 -44
- package/dist/locales/zh-CN/openhands.json +183 -44
- package/dist/locales/zh-TW/openhands.json +183 -44
- 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 +47 -31
- package/dist/manifests/automation-interface.js +48 -54
- 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 +4843 -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 +87 -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 +98 -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 +32 -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 +29 -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-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/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 +72 -0
- package/dist/node_modules/@openhands/extensions/automations/catalog/news-digest/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 +16 -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/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 +68 -66
- package/dist/node_modules/@openhands/extensions/integrations/catalog-index.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/skills/index.cjs +1002 -47
- package/dist/node_modules/@openhands/extensions/skills/index.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/skills/index.js +59 -17
- package/dist/node_modules/@openhands/extensions/skills/index.js.map +1 -1
- 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/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/circle-alert.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-alert.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-alert.js +27 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/circle-alert.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/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/app-settings.cjs +1 -1
- package/dist/routes/app-settings.cjs.map +1 -1
- package/dist/routes/app-settings.js +87 -85
- 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 +121 -151
- 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 +137 -107
- 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/settings.cjs +1 -1
- package/dist/services/settings.cjs.map +1 -1
- package/dist/services/settings.js +2 -2
- package/dist/services/settings.js.map +1 -1
- package/dist/services/telemetry.cjs +1 -1
- package/dist/services/telemetry.cjs.map +1 -1
- package/dist/services/telemetry.js +47 -51
- package/dist/services/telemetry.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/error-message-store.cjs +1 -1
- package/dist/stores/error-message-store.cjs.map +1 -1
- package/dist/stores/error-message-store.d.ts +3 -1
- package/dist/stores/error-message-store.js +5 -3
- package/dist/stores/error-message-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.js +8 -0
- package/dist/types/automation.js.map +1 -0
- package/dist/types/git-sync.d.ts +51 -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/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/error-handler.cjs +1 -1
- package/dist/utils/error-handler.cjs.map +1 -1
- package/dist/utils/error-handler.d.ts +3 -2
- package/dist/utils/error-handler.js +18 -5
- package/dist/utils/error-handler.js.map +1 -1
- 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 +1 -0
- package/dist/utils/format-model-name.js +1 -0
- 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.js +17 -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/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-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/transcript-export/load-complete-events.cjs +1 -1
- package/dist/utils/transcript-export/load-complete-events.cjs.map +1 -1
- package/dist/utils/transcript-export/load-complete-events.js +24 -16
- package/dist/utils/transcript-export/load-complete-events.js.map +1 -1
- 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/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/package.json +3 -3
- package/scripts/check-translation-completeness.cjs +7 -0
- package/scripts/dev-static.mjs +49 -43
- package/scripts/dev-with-automation.mjs +111 -14
- package/scripts/seed-automation-ux-data.mjs +810 -0
- package/build/assets/acp-providers-D1PORKc0.js +0 -1
- package/build/assets/active-backend-context-IqOjobNK.js +0 -2
- package/build/assets/agent-context-settings-DMrObcIS.js +0 -1
- package/build/assets/agent-profiles-settings-DororXN5.js +0 -1
- package/build/assets/agent-server-conversation-service.api-DWBe0rbX.js +0 -86
- package/build/assets/agent-settings-BJVk92PU.js +0 -2
- package/build/assets/agent-settings-COfJsQ1d.js +0 -1
- package/build/assets/alert-banner-CzZsm7ms.js +0 -1
- package/build/assets/api-key-entry-screen-D8Fade_-.js +0 -1
- package/build/assets/app-settings-CpyGB3AT.js +0 -1
- package/build/assets/automation-detail-B-jQ39Mm.js +0 -3
- package/build/assets/automation-export-B1dywoqk.js +0 -2
- package/build/assets/automation-setup-route-C-bWUZBi.js +0 -1
- package/build/assets/automation-templates-DgpCGOJV.js +0 -1
- package/build/assets/automations-list-DnMxlxsL.js +0 -1
- package/build/assets/back-nav-button-HHEneWMw.js +0 -1
- package/build/assets/backend-form-modal-DiVrD4Cm.js +0 -1
- package/build/assets/backend-synced-settings-badge-7MIjpr8M.js +0 -1
- package/build/assets/badge-CpYmcVZV.js +0 -1
- package/build/assets/base-modal-Fnh6Uln9.js +0 -1
- package/build/assets/bot-BQZx8e2i.js +0 -1
- package/build/assets/brand-button-swT1RyO0.js +0 -1
- package/build/assets/browser-B9AbV6kG.js +0 -7
- package/build/assets/browser-tab-zAY12m_i.js +0 -1
- package/build/assets/chat-send-button-DsJtivmL.js +0 -1
- package/build/assets/check-WAFXrrs_.js +0 -1
- package/build/assets/chevron-down-CifNWzme.js +0 -1
- package/build/assets/circle-check-CtnimJa8.js +0 -1
- package/build/assets/circle-plus-check-toggle-Cuzx55bo.js +0 -1
- package/build/assets/cloud-funnel-analytics-86CwNdSh.js +0 -1
- package/build/assets/combobox-caret-D0fRotFi.js +0 -1
- package/build/assets/command-menu-BXy03FBl.js +0 -1
- package/build/assets/condenser-settings-BmZa0ui_.js +0 -1
- package/build/assets/confirmation-modal-BgoN6lbN.js +0 -1
- package/build/assets/context-menu-list-item-Bq02tc-P.js +0 -1
- package/build/assets/conversation-BPo8SvLN.js +0 -1
- package/build/assets/conversation-CPCVsCUY.js +0 -90
- package/build/assets/conversation-panel-BPo8SvLN.js +0 -1
- package/build/assets/conversation-state-store-C5YpjMNy.js +0 -1
- package/build/assets/conversation-store-Blc5xysY.js +0 -6
- package/build/assets/conversation-tab-empty-state-CMqo_0Bd.js +0 -1
- package/build/assets/copy-to-clipboard-button-Cg1pF0xn.js +0 -1
- package/build/assets/device-verify-BfQLgNyq.js +0 -1
- package/build/assets/dropdown-classes-BIqQr5mx.js +0 -1
- package/build/assets/entry.client-CxFjRYqH.js +0 -2
- package/build/assets/enum-filter-dropdown-C_yV4_bo.js +0 -1
- package/build/assets/environment-switch-overlay-Bi4qbh2g.js +0 -1
- package/build/assets/extension-module-card-classes-Bo43vY5V.js +0 -1
- package/build/assets/extensions-hub-BqUINAhp.js +0 -1
- package/build/assets/extensions-navigation-lraj88Wk.js +0 -1
- package/build/assets/external-link-CgtpA_a1.js +0 -1
- package/build/assets/file-text-DEK4LSVw.js +0 -1
- package/build/assets/files-tab-DV0L-lFE.js +0 -1
- package/build/assets/form-control-classes-7yFSQJq_.js +0 -1
- package/build/assets/format-model-name-BN_rx1Y3.js +0 -1
- package/build/assets/format-relative-time-DSErAuVr.js +0 -1
- package/build/assets/git-provider-icon-BvlLAche.js +0 -1
- package/build/assets/git-repo-dropdown-ByMzpNko.js +0 -1
- package/build/assets/git-repo-dropdown-C6R7hgM8.js +0 -1
- package/build/assets/highlighted-source-view-C_sfncLZ.js +0 -1
- package/build/assets/home-BOrlwLqG.js +0 -1
- package/build/assets/home-BvMNC6E-.js +0 -1
- package/build/assets/home-store-CxqsY9Fi.js +0 -1
- package/build/assets/index-home-BvMNC6E-.js +0 -1
- package/build/assets/info-BRVcJAUg.js +0 -1
- package/build/assets/install-server-modal-Bl4G1zF4.js +0 -1
- package/build/assets/kebab-menu-item-content-BGoGFEAg.js +0 -1
- package/build/assets/launch-CkqiSCqi.js +0 -1
- package/build/assets/list-todo-DNWlzfaM.js +0 -1
- package/build/assets/llm-not-configured-banner-DLw_tu-G.js +0 -27
- package/build/assets/llm-settings-B-pkVCrt.js +0 -1
- package/build/assets/llm-settings-DSC0-IQ7.js +0 -1
- package/build/assets/llm-subscription-service-BAdOl5Xx.js +0 -1
- package/build/assets/loader-circle-B47W9XqT.js +0 -1
- package/build/assets/loading-spinner-xhnrGP4Y.js +0 -1
- package/build/assets/manage-backends-modal-DhGk5mJt.js +0 -1
- package/build/assets/manifest-653b89aa.js +0 -1
- package/build/assets/manifest-subpage-layout-CKWvL2ig.js +0 -1
- package/build/assets/map-provider-Mx8mZuE-.js +0 -1
- package/build/assets/markdown-renderer-DUmk7pFc.js +0 -8
- package/build/assets/mcp-DCkvl6K0.js +0 -9
- package/build/assets/mcp-marketplace-utils-DEbMXlQr.js +0 -1
- package/build/assets/messages-DSXvyc21.js +0 -40
- package/build/assets/modal-body-gIe21fDv.js +0 -1
- package/build/assets/modal-classes-D66dlgZ7.js +0 -1
- package/build/assets/modal-close-button-B6iOGYpI.js +0 -1
- package/build/assets/mouse-pointer-click-BYX1Pw5W.js +0 -1
- package/build/assets/npm-DLckoeJc.js +0 -1
- package/build/assets/onboarding-D7WDG66N.js +0 -1
- package/build/assets/onboarding-modal-C_xVrFNv.js +0 -1
- package/build/assets/organization-service.api-D-s9z18a.js +0 -1
- package/build/assets/pencil-BGOCPRyu.js +0 -1
- package/build/assets/planner-tab-AKaXIIfg.js +0 -1
- package/build/assets/plugins-management-service-wtmY4QQw.js +0 -1
- package/build/assets/plus-zNEL8rcX.js +0 -1
- package/build/assets/profiles-service.api-DCMYxHMi.js +0 -1
- package/build/assets/providers-BjrtjX4L.js +0 -1
- package/build/assets/proxy-9Z_WZggZ.js +0 -1
- package/build/assets/puzzle-BWLmN8z4.js +0 -1
- package/build/assets/recommended-automations-launcher-CFlzhu1o.js +0 -1
- package/build/assets/refresh-cw-CXtFWpwv.js +0 -1
- package/build/assets/root-CanxKlNV.css +0 -1
- package/build/assets/root-DkfG_UWR.js +0 -2
- package/build/assets/root-layout-D75LHYhh.js +0 -2
- package/build/assets/schema-field-OnM5Uob_.js +0 -1
- package/build/assets/sdk-section-page-m5WQm2sy.js +0 -1
- package/build/assets/search-CycosyjN.js +0 -1
- package/build/assets/secrets-service-B26R61C1.js +0 -1
- package/build/assets/secrets-settings-CbLYCKOX.js +0 -1
- package/build/assets/segmented-toggle-DCspm2U5.js +0 -1
- package/build/assets/settings-BJQI_iBM.js +0 -1
- package/build/assets/settings-CWFxymAf.js +0 -1
- package/build/assets/settings-dropdown-input-BI8V_Nov.js +0 -1
- package/build/assets/settings-index-BiTqJoH7.js +0 -1
- package/build/assets/settings-input-Cz62hWVW.js +0 -1
- package/build/assets/settings-list-classes-z_3FW5H3.js +0 -1
- package/build/assets/settings-modal-BIrIVn97.js +0 -1
- package/build/assets/settings-service.api--rJmnuLa.js +0 -1
- package/build/assets/settings-switch-BRsSI8Vs.js +0 -1
- package/build/assets/settings-utils-Ba7vel6T.js +0 -1
- package/build/assets/shared-conversation-CQK_PqHx.js +0 -1
- package/build/assets/shield-check-T3JsDJiM.js +0 -1
- package/build/assets/sidebar-layout-Bhi3hVcu.js +0 -1
- package/build/assets/sidebar-mobile-menu-toggle-YWJNRN4p.js +0 -1
- package/build/assets/sidebar-nav-link-BSUlY5Ml.js +0 -1
- package/build/assets/sidebar-store-Cl1cUv_F.js +0 -1
- package/build/assets/skill-card-pill-row-BXz8L8Rn.js +0 -1
- package/build/assets/skill-icon-badge-QgfKv31M.js +0 -1
- package/build/assets/skill-scope-Dc3JPW-8.js +0 -1
- package/build/assets/skills-plugins-CpTV27n3.js +0 -1
- package/build/assets/skills-settings-CSW__IW4.js +0 -2
- package/build/assets/sparkles-TJ0mdECe.js +0 -1
- package/build/assets/styled-tooltip-BUMSbgrF.js +0 -1
- package/build/assets/task-list-tab-mAHMOkUz.js +0 -1
- package/build/assets/terminal-BzxBaHx2.js +0 -3
- package/build/assets/toggle-switch-O5v1FgxW.js +0 -1
- package/build/assets/trash-2-C0xNVp9c.js +0 -1
- package/build/assets/typography-NOKSk9_R.js +0 -1
- package/build/assets/usage-tab-tEmVN0KD.js +0 -1
- package/build/assets/use-acp-credential-form-BPNi0Zbm.js +0 -1
- package/build/assets/use-activate-agent-profile-D9YRQPTF.js +0 -1
- package/build/assets/use-agent-profiles-Cb2zUW3l.js +0 -1
- package/build/assets/use-can-manage-org-profiles-Dxzq2AEd.js +0 -1
- package/build/assets/use-cloud-current-user-id-Co2eJk2A.js +0 -1
- package/build/assets/use-config-DKAMiI5R.js +0 -1
- package/build/assets/use-create-conversation-CoHTiCbI.js +0 -1
- package/build/assets/use-create-secret-2zBlCDsF.js +0 -1
- package/build/assets/use-is-authed-C52-ivnB.js +0 -1
- package/build/assets/use-is-creating-conversation-DdaAE6jV.js +0 -1
- package/build/assets/use-launch-skill-in-chat-COnDpxCQ.js +0 -1
- package/build/assets/use-llm-profiles-C_BHue65.js +0 -1
- package/build/assets/use-manifest-capabilities-DPrQsaPP.js +0 -1
- package/build/assets/use-onboarding-completion-CCE8OQgV.js +0 -1
- package/build/assets/use-plugins-marketplace-CEiak69h.js +0 -1
- package/build/assets/use-save-agent-profile-DK9idD6a.js +0 -1
- package/build/assets/use-save-settings-DNmnbG6f.js +0 -1
- package/build/assets/use-settings-nav-items-BlFL7YhM.js +0 -16
- package/build/assets/use-settings-wCwPaSIv.js +0 -1
- package/build/assets/use-tracking-CVwPmhlX.js +0 -3
- package/build/assets/use-user-conversation-DVtfg0B_.js +0 -1
- package/build/assets/useInfiniteQuery-p1xq35r2.js +0 -1
- package/build/assets/useMutation-BFDQmgk9.js +0 -1
- package/build/assets/useQueries-DF1NAAeC.js +0 -1
- package/build/assets/useQuery-DRv--6bK.js +0 -1
- package/build/assets/utils-zxEjKE70.js +0 -1
- package/build/assets/vendor~browser-B-fae1JU.js +0 -47
- package/build/assets/vendor~entry.client-CgNUwtQL.js +0 -1
- package/build/assets/vendor~entry.client-zSIea5EO.js +0 -9
- package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~kv3pap4j-B8i84bh4.js +0 -186
- package/build/assets/vendor~files-tab-D9wR9yM2.js +0 -11
- package/build/assets/vendor~index-home~home~conversation-panel~conversation-Ipoe6hvY.js +0 -13
- package/build/assets/vendor~root-layout-C-IgVx6e.js +0 -1
- package/build/assets/vendor~root-layout~conversation-panel~conversation-Dhd_I4H4.js +0 -1
- package/build/assets/vendor~root-layout~conversation-panel~conversation~skills-settings~automations-list~shared-~bovqqk8e-Cc0f9kPP.js +0 -1
- package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation-d7svw-BB.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~gxu4j2ea-D5DWZVc7.js +0 -1
- package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~hjcjabwg-4WsUP-tz.js +0 -48
- package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~9pstowjp-BOVIFA_g.js +0 -73
- package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~ht43enc2-C0JXQb_q.js +0 -7465
- package/build/assets/verification-settings-B8UMQ7MG.js +0 -1
- package/build/assets/wrench-DIka3hCq.js +0 -1
- package/build/assets/x-BWKA2Ver.js +0 -1
- package/build/assets/zap-DHddTPc0.js +0 -1
- package/dist/api/cloud/suggestions-service.api.d.ts +0 -8
- package/dist/api/suggestions-service/suggestions-service.api.d.ts +0 -11
- package/dist/components/conversation-events/chat/event-message-components/observation-pair-event-message.d.ts +0 -7
- package/dist/components/conversation-events/index.d.ts +0 -1
- package/dist/components/features/automations/metadata-chip.d.ts +0 -6
- package/dist/components/features/chat/task-tracking/status-badge.d.ts +0 -5
- package/dist/components/features/chat/task-tracking/status-icon.d.ts +0 -5
- package/dist/components/features/chat/task-tracking/task-list-section.d.ts +0 -10
- package/dist/components/features/controls/tools.d.ts +0 -2
- package/dist/components/features/conversation-panel/new-conversation-button.d.ts +0 -23
- 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/home/home-header/guide-message.d.ts +0 -1
- package/dist/components/features/home/home-header/home-header.d.ts +0 -1
- package/dist/components/features/home/new-conversation/create-conversation-button.d.ts +0 -1
- package/dist/components/features/home/new-conversation/new-conversation.d.ts +0 -1
- package/dist/components/features/home/new-conversation.d.ts +0 -1
- package/dist/components/features/home/tasks/task-card.d.ts +0 -6
- package/dist/components/features/home/tasks/task-group.d.ts +0 -7
- package/dist/components/features/home/tasks/task-issue-number.d.ts +0 -6
- package/dist/components/features/home/tasks/task-item-title.d.ts +0 -1
- package/dist/components/features/home/tasks/task-suggestions-skeleton.d.ts +0 -1
- package/dist/components/features/home/tasks/task-suggestions.d.ts +0 -6
- package/dist/components/features/settings/agent-server-onboarding.d.ts +0 -10
- package/dist/components/features/settings/mcp-settings/mcp-server-list-item.d.ts +0 -6
- package/dist/components/features/settings/mcp-settings/mcp-server-list.d.ts +0 -8
- 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.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/query/use-suggested-tasks.d.ts +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/hooks/use-should-show-user-features.d.ts +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/ui/card-title.d.ts +0 -16
- package/dist/ui/card.d.ts +0 -14
- 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/group-suggested-tasks.d.ts +0 -7
- 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.js +0 -45
- package/dist/utils/tips.js.map +0 -1
- /package/build/assets/{vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~dh9v73sa-rfV8mQ9m.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~ew3u153i-rfV8mQ9m.js} +0 -0
- /package/build/assets/{vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~lq5hicxx-cHFhpUBq.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~ox0jfsa0-cHFhpUBq.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-settings.js","names":[],"sources":["../../src/routes/app-settings.tsx"],"sourcesContent":["import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useSaveSettings } from \"#/hooks/mutation/use-save-settings\";\nimport { useSettings } from \"#/hooks/query/use-settings\";\nimport { AvailableLanguages } from \"#/i18n\";\nimport { DEFAULT_SETTINGS } from \"#/services/settings\";\nimport { setTelemetryConsent } from \"#/services/telemetry\";\nimport { BrandButton } from \"#/components/features/settings/brand-button\";\nimport { SettingsSwitch } from \"#/components/features/settings/settings-switch\";\nimport { SettingsInput } from \"#/components/features/settings/settings-input\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { LanguageInput } from \"#/components/features/settings/app-settings/language-input\";\nimport { ThemeInput } from \"#/components/features/settings/app-settings/theme-input\";\nimport {\n displayErrorToast,\n displaySuccessToast,\n} from \"#/utils/custom-toast-handlers\";\nimport { retrieveAxiosErrorMessage } from \"#/utils/retrieve-axios-error-message\";\nimport { AppSettingsInputsSkeleton } from \"#/components/features/settings/app-settings/app-settings-inputs-skeleton\";\nimport { SettingsDropdownInput } from \"#/components/features/settings/settings-dropdown-input\";\nimport { NavigationLink } from \"#/components/shared/navigation-link\";\nimport { useLlmProfiles } from \"#/hooks/query/use-llm-profiles\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport { formatModelNameForDisplay } from \"#/utils/format-model-name\";\n\nconst AUTOMATIC_TITLE_LLM_PROFILE_KEY = \"__automatic__\";\n\nexport function AppSettingsScreen() {\n const { t } = useTranslation(\"openhands\");\n\n const { mutate: saveSettings, isPending } = useSaveSettings();\n const { data: settings, isLoading } = useSettings();\n const activeBackend = useActiveBackend();\n const isCloudBackend = activeBackend.backend.kind === \"cloud\";\n const { data: llmProfiles, isLoading: areLlmProfilesLoading } =\n useLlmProfiles();\n\n const [languageInputHasChanged, setLanguageInputHasChanged] =\n React.useState(false);\n const [analyticsSwitchHasChanged, setAnalyticsSwitchHasChanged] =\n React.useState(false);\n const [\n soundNotificationsSwitchHasChanged,\n setSoundNotificationsSwitchHasChanged,\n ] = React.useState(false);\n const [gitUserNameHasChanged, setGitUserNameHasChanged] =\n React.useState(false);\n const [gitUserEmailHasChanged, setGitUserEmailHasChanged] =\n React.useState(false);\n const [titleLlmProfileInput, setTitleLlmProfileInput] = React.useState<\n string | null | undefined\n >(undefined);\n\n const storedTitleLlmProfile = React.useMemo(() => {\n const preference = settings?.title_llm_profile ?? null;\n if (!preference || !llmProfiles) return preference;\n return llmProfiles.profiles.some((profile) => profile.name === preference)\n ? preference\n : null;\n }, [llmProfiles, settings?.title_llm_profile]);\n const selectedTitleLlmProfile =\n titleLlmProfileInput === undefined\n ? storedTitleLlmProfile\n : titleLlmProfileInput;\n const titleLlmProfileItems = React.useMemo(\n () => [\n {\n key: AUTOMATIC_TITLE_LLM_PROFILE_KEY,\n label: t(I18nKey.SETTINGS$TITLE_GENERATION_AUTOMATIC),\n },\n ...(llmProfiles?.profiles.map((profile) => ({\n key: profile.name,\n label: profile.model\n ? t(I18nKey.SETTINGS$TITLE_GENERATION_PROFILE_OPTION, {\n name: profile.name,\n model: formatModelNameForDisplay(profile.model) ?? profile.model,\n })\n : profile.name,\n })) ?? []),\n ],\n [llmProfiles?.profiles, t],\n );\n\n const formAction = (formData: FormData) => {\n const languageLabel = formData.get(\"language-input\")?.toString();\n const languageValue = AvailableLanguages.find(\n ({ label }) => label === languageLabel,\n )?.value;\n const language = languageValue || DEFAULT_SETTINGS.language;\n\n const enableAnalytics = isCloudBackend\n ? true\n : formData.get(\"enable-analytics-switch\")?.toString() === \"on\";\n const enableSoundNotifications =\n formData.get(\"enable-sound-notifications-switch\")?.toString() === \"on\";\n\n const gitUserName =\n formData.get(\"git-user-name-input\")?.toString() ||\n DEFAULT_SETTINGS.git_user_name;\n const gitUserEmail =\n formData.get(\"git-user-email-input\")?.toString() ||\n DEFAULT_SETTINGS.git_user_email;\n\n saveSettings(\n {\n language,\n ...(!isCloudBackend && { user_consents_to_analytics: enableAnalytics }),\n enable_sound_notifications: enableSoundNotifications,\n git_user_name: gitUserName,\n git_user_email: gitUserEmail,\n title_llm_profile: selectedTitleLlmProfile,\n },\n {\n onSuccess: () => {\n void setTelemetryConsent(enableAnalytics ? \"granted\" : \"denied\");\n displaySuccessToast(t(I18nKey.SETTINGS$SAVED));\n },\n onError: (error) => {\n const errorMessage = retrieveAxiosErrorMessage(error);\n displayErrorToast(errorMessage || t(I18nKey.ERROR$GENERIC));\n },\n onSettled: () => {\n setLanguageInputHasChanged(false);\n setAnalyticsSwitchHasChanged(false);\n setSoundNotificationsSwitchHasChanged(false);\n setGitUserNameHasChanged(false);\n setGitUserEmailHasChanged(false);\n setTitleLlmProfileInput(undefined);\n },\n },\n );\n };\n\n const checkIfLanguageInputHasChanged = (value: string) => {\n const selectedLanguage = AvailableLanguages.find(\n ({ label: langValue }) => langValue === value,\n )?.label;\n const currentLanguage = AvailableLanguages.find(\n ({ value: langValue }) => langValue === settings?.language,\n )?.label;\n\n setLanguageInputHasChanged(selectedLanguage !== currentLanguage);\n };\n\n const checkIfAnalyticsSwitchHasChanged = (checked: boolean) => {\n // Treat null as true since analytics is opt-in by default\n const currentAnalytics = settings?.user_consents_to_analytics ?? true;\n setAnalyticsSwitchHasChanged(checked !== currentAnalytics);\n };\n\n const checkIfSoundNotificationsSwitchHasChanged = (checked: boolean) => {\n const currentSoundNotifications = !!settings?.enable_sound_notifications;\n setSoundNotificationsSwitchHasChanged(\n checked !== currentSoundNotifications,\n );\n };\n\n const checkIfGitUserNameHasChanged = (value: string) => {\n const currentValue = settings?.git_user_name;\n setGitUserNameHasChanged(value !== currentValue);\n };\n\n const checkIfGitUserEmailHasChanged = (value: string) => {\n const currentValue = settings?.git_user_email;\n setGitUserEmailHasChanged(value !== currentValue);\n };\n\n const formIsClean =\n !languageInputHasChanged &&\n !analyticsSwitchHasChanged &&\n !soundNotificationsSwitchHasChanged &&\n selectedTitleLlmProfile === storedTitleLlmProfile &&\n !gitUserNameHasChanged &&\n !gitUserEmailHasChanged;\n\n const shouldBeLoading =\n !settings || isLoading || areLlmProfilesLoading || isPending;\n\n return (\n <form\n data-testid=\"app-settings-screen\"\n action={formAction}\n className=\"flex flex-col gap-6\"\n >\n {shouldBeLoading && <AppSettingsInputsSkeleton />}\n {!shouldBeLoading && (\n <div className=\"flex flex-col gap-6\">\n <LanguageInput\n name=\"language-input\"\n defaultKey={settings.language}\n onChange={checkIfLanguageInputHasChanged}\n />\n\n <ThemeInput />\n\n <SettingsSwitch\n testId=\"enable-analytics-switch\"\n name={isCloudBackend ? undefined : \"enable-analytics-switch\"}\n defaultIsToggled={\n isCloudBackend\n ? true\n : (settings.user_consents_to_analytics ?? true)\n }\n isToggled={isCloudBackend ? true : undefined}\n isDisabled={isCloudBackend}\n onToggle={\n isCloudBackend ? undefined : checkIfAnalyticsSwitchHasChanged\n }\n >\n {t(I18nKey.ANALYTICS$SEND_ANONYMOUS_DATA)}\n </SettingsSwitch>\n\n <SettingsSwitch\n testId=\"enable-sound-notifications-switch\"\n name=\"enable-sound-notifications-switch\"\n defaultIsToggled={!!settings.enable_sound_notifications}\n onToggle={checkIfSoundNotificationsSwitchHasChanged}\n >\n {t(I18nKey.SETTINGS$SOUND_NOTIFICATIONS)}\n </SettingsSwitch>\n\n <div className=\"border-t border-[var(--oh-border)] pt-6 mt-2\">\n <h3 className=\"text-lg font-medium mb-2\">\n {t(I18nKey.SETTINGS$CONVERSATION_TITLES)}\n </h3>\n <p className=\"mb-4 text-sm leading-5 text-tertiary-light\">\n {t(I18nKey.SETTINGS$TITLE_GENERATION_DESCRIPTION)}\n </p>\n <SettingsDropdownInput\n testId=\"title-llm-profile-input\"\n name=\"title-llm-profile-input\"\n label={t(I18nKey.SETTINGS$TITLE_GENERATION_MODEL)}\n items={titleLlmProfileItems}\n selectedKey={\n selectedTitleLlmProfile ?? AUTOMATIC_TITLE_LLM_PROFILE_KEY\n }\n onSelectionChange={(key) => {\n const value = key?.toString();\n setTitleLlmProfileInput(\n !value || value === AUTOMATIC_TITLE_LLM_PROFILE_KEY\n ? null\n : value,\n );\n }}\n />\n <NavigationLink\n to=\"/settings/llm\"\n className=\"mt-3 inline-block text-sm text-primary hover:underline\"\n >\n {t(I18nKey.SETTINGS$MANAGE_LLM_PROFILES)}\n </NavigationLink>\n </div>\n\n <div className=\"border-t border-[var(--oh-border)] pt-6 mt-2\">\n <h3 className=\"text-lg font-medium mb-2\">\n {t(I18nKey.SETTINGS$GIT_SETTINGS)}\n </h3>\n <p className=\"mb-4 text-sm leading-5 text-tertiary-light\">\n {t(I18nKey.SETTINGS$GIT_SETTINGS_DESCRIPTION)}\n </p>\n <div className=\"flex flex-col gap-6\">\n <SettingsInput\n testId=\"git-user-name-input\"\n name=\"git-user-name-input\"\n type=\"text\"\n label={t(I18nKey.SETTINGS$GIT_USERNAME)}\n defaultValue={settings.git_user_name || \"\"}\n onChange={checkIfGitUserNameHasChanged}\n placeholder={t(I18nKey.SETTINGS$GIT_USERNAME_PLACEHOLDER)}\n className=\"w-full min-w-0\"\n />\n <SettingsInput\n testId=\"git-user-email-input\"\n name=\"git-user-email-input\"\n type=\"email\"\n label={t(I18nKey.SETTINGS$GIT_EMAIL)}\n defaultValue={settings.git_user_email || \"\"}\n onChange={checkIfGitUserEmailHasChanged}\n placeholder={t(I18nKey.SETTINGS$GIT_EMAIL_PLACEHOLDER)}\n className=\"w-full min-w-0\"\n />\n </div>\n <div className=\"flex justify-start pt-4\">\n <BrandButton\n testId=\"submit-button\"\n variant=\"primary\"\n type=\"submit\"\n isDisabled={isPending || formIsClean}\n >\n {!isPending && t(I18nKey.SETTINGS$SAVE_CHANGES)}\n {isPending && t(I18nKey.SETTINGS$SAVING)}\n </BrandButton>\n </div>\n </div>\n </div>\n )}\n </form>\n );\n}\n\nexport default AppSettingsScreen;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"app-settings.js","names":[],"sources":["../../src/routes/app-settings.tsx"],"sourcesContent":["import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useSaveSettings } from \"#/hooks/mutation/use-save-settings\";\nimport { useSettings } from \"#/hooks/query/use-settings\";\nimport { AvailableLanguages } from \"#/i18n\";\nimport { DEFAULT_SETTINGS } from \"#/services/settings\";\nimport { setTelemetryConsent } from \"#/services/telemetry\";\nimport { BrandButton } from \"#/components/features/settings/brand-button\";\nimport { SettingsSwitch } from \"#/components/features/settings/settings-switch\";\nimport { SettingsInput } from \"#/components/features/settings/settings-input\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { LanguageInput } from \"#/components/features/settings/app-settings/language-input\";\nimport { ThemeInput } from \"#/components/features/settings/app-settings/theme-input\";\nimport { GettingStartedChecklistSwitch } from \"#/components/features/settings/app-settings/getting-started-checklist-switch\";\nimport {\n displayErrorToast,\n displaySuccessToast,\n} from \"#/utils/custom-toast-handlers\";\nimport { retrieveAxiosErrorMessage } from \"#/utils/retrieve-axios-error-message\";\nimport { AppSettingsInputsSkeleton } from \"#/components/features/settings/app-settings/app-settings-inputs-skeleton\";\nimport { SettingsDropdownInput } from \"#/components/features/settings/settings-dropdown-input\";\nimport { NavigationLink } from \"#/components/shared/navigation-link\";\nimport { useLlmProfiles } from \"#/hooks/query/use-llm-profiles\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport { formatModelNameForDisplay } from \"#/utils/format-model-name\";\n\nconst AUTOMATIC_TITLE_LLM_PROFILE_KEY = \"__automatic__\";\n\nexport function AppSettingsScreen() {\n const { t } = useTranslation(\"openhands\");\n\n const { mutate: saveSettings, isPending } = useSaveSettings();\n const { data: settings, isLoading } = useSettings();\n const activeBackend = useActiveBackend();\n const isCloudBackend = activeBackend.backend.kind === \"cloud\";\n const { data: llmProfiles, isLoading: areLlmProfilesLoading } =\n useLlmProfiles();\n\n const [languageInputHasChanged, setLanguageInputHasChanged] =\n React.useState(false);\n const [analyticsSwitchHasChanged, setAnalyticsSwitchHasChanged] =\n React.useState(false);\n const [\n soundNotificationsSwitchHasChanged,\n setSoundNotificationsSwitchHasChanged,\n ] = React.useState(false);\n const [gitUserNameHasChanged, setGitUserNameHasChanged] =\n React.useState(false);\n const [gitUserEmailHasChanged, setGitUserEmailHasChanged] =\n React.useState(false);\n const [titleLlmProfileInput, setTitleLlmProfileInput] = React.useState<\n string | null | undefined\n >(undefined);\n\n const storedTitleLlmProfile = React.useMemo(() => {\n const preference = settings?.title_llm_profile ?? null;\n if (!preference || !llmProfiles) return preference;\n return llmProfiles.profiles.some((profile) => profile.name === preference)\n ? preference\n : null;\n }, [llmProfiles, settings?.title_llm_profile]);\n const selectedTitleLlmProfile =\n titleLlmProfileInput === undefined\n ? storedTitleLlmProfile\n : titleLlmProfileInput;\n const titleLlmProfileItems = React.useMemo(\n () => [\n {\n key: AUTOMATIC_TITLE_LLM_PROFILE_KEY,\n label: t(I18nKey.SETTINGS$TITLE_GENERATION_AUTOMATIC),\n },\n ...(llmProfiles?.profiles.map((profile) => ({\n key: profile.name,\n label: profile.model\n ? t(I18nKey.SETTINGS$TITLE_GENERATION_PROFILE_OPTION, {\n name: profile.name,\n model: formatModelNameForDisplay(profile.model) ?? profile.model,\n })\n : profile.name,\n })) ?? []),\n ],\n [llmProfiles?.profiles, t],\n );\n\n const formAction = (formData: FormData) => {\n const languageLabel = formData.get(\"language-input\")?.toString();\n const languageValue = AvailableLanguages.find(\n ({ label }) => label === languageLabel,\n )?.value;\n const language = languageValue || DEFAULT_SETTINGS.language;\n\n const enableAnalytics = isCloudBackend\n ? true\n : formData.get(\"enable-analytics-switch\")?.toString() === \"on\";\n const enableSoundNotifications =\n formData.get(\"enable-sound-notifications-switch\")?.toString() === \"on\";\n\n const gitUserName =\n formData.get(\"git-user-name-input\")?.toString() ||\n DEFAULT_SETTINGS.git_user_name;\n const gitUserEmail =\n formData.get(\"git-user-email-input\")?.toString() ||\n DEFAULT_SETTINGS.git_user_email;\n\n saveSettings(\n {\n language,\n ...(!isCloudBackend && { user_consents_to_analytics: enableAnalytics }),\n enable_sound_notifications: enableSoundNotifications,\n git_user_name: gitUserName,\n git_user_email: gitUserEmail,\n title_llm_profile: selectedTitleLlmProfile,\n },\n {\n onSuccess: () => {\n void setTelemetryConsent(enableAnalytics ? \"granted\" : \"denied\");\n displaySuccessToast(t(I18nKey.SETTINGS$SAVED));\n },\n onError: (error) => {\n const errorMessage = retrieveAxiosErrorMessage(error);\n displayErrorToast(errorMessage || t(I18nKey.ERROR$GENERIC));\n },\n onSettled: () => {\n setLanguageInputHasChanged(false);\n setAnalyticsSwitchHasChanged(false);\n setSoundNotificationsSwitchHasChanged(false);\n setGitUserNameHasChanged(false);\n setGitUserEmailHasChanged(false);\n setTitleLlmProfileInput(undefined);\n },\n },\n );\n };\n\n const checkIfLanguageInputHasChanged = (value: string) => {\n const selectedLanguage = AvailableLanguages.find(\n ({ label: langValue }) => langValue === value,\n )?.label;\n const currentLanguage = AvailableLanguages.find(\n ({ value: langValue }) => langValue === settings?.language,\n )?.label;\n\n setLanguageInputHasChanged(selectedLanguage !== currentLanguage);\n };\n\n const checkIfAnalyticsSwitchHasChanged = (checked: boolean) => {\n // Treat null as true since analytics is opt-in by default\n const currentAnalytics = settings?.user_consents_to_analytics ?? true;\n setAnalyticsSwitchHasChanged(checked !== currentAnalytics);\n };\n\n const checkIfSoundNotificationsSwitchHasChanged = (checked: boolean) => {\n const currentSoundNotifications = !!settings?.enable_sound_notifications;\n setSoundNotificationsSwitchHasChanged(\n checked !== currentSoundNotifications,\n );\n };\n\n const checkIfGitUserNameHasChanged = (value: string) => {\n const currentValue = settings?.git_user_name;\n setGitUserNameHasChanged(value !== currentValue);\n };\n\n const checkIfGitUserEmailHasChanged = (value: string) => {\n const currentValue = settings?.git_user_email;\n setGitUserEmailHasChanged(value !== currentValue);\n };\n\n const formIsClean =\n !languageInputHasChanged &&\n !analyticsSwitchHasChanged &&\n !soundNotificationsSwitchHasChanged &&\n selectedTitleLlmProfile === storedTitleLlmProfile &&\n !gitUserNameHasChanged &&\n !gitUserEmailHasChanged;\n\n const shouldBeLoading =\n !settings || isLoading || areLlmProfilesLoading || isPending;\n\n return (\n <form\n data-testid=\"app-settings-screen\"\n action={formAction}\n className=\"flex flex-col gap-6\"\n >\n {shouldBeLoading && <AppSettingsInputsSkeleton />}\n {!shouldBeLoading && (\n <div className=\"flex flex-col gap-6\">\n <LanguageInput\n name=\"language-input\"\n defaultKey={settings.language}\n onChange={checkIfLanguageInputHasChanged}\n />\n\n <ThemeInput />\n\n <SettingsSwitch\n testId=\"enable-analytics-switch\"\n name={isCloudBackend ? undefined : \"enable-analytics-switch\"}\n defaultIsToggled={\n isCloudBackend\n ? true\n : (settings.user_consents_to_analytics ?? true)\n }\n isToggled={isCloudBackend ? true : undefined}\n isDisabled={isCloudBackend}\n onToggle={\n isCloudBackend ? undefined : checkIfAnalyticsSwitchHasChanged\n }\n >\n {t(I18nKey.ANALYTICS$SEND_ANONYMOUS_DATA)}\n </SettingsSwitch>\n\n <SettingsSwitch\n testId=\"enable-sound-notifications-switch\"\n name=\"enable-sound-notifications-switch\"\n defaultIsToggled={!!settings.enable_sound_notifications}\n onToggle={checkIfSoundNotificationsSwitchHasChanged}\n >\n {t(I18nKey.SETTINGS$SOUND_NOTIFICATIONS)}\n </SettingsSwitch>\n\n <GettingStartedChecklistSwitch />\n\n <div className=\"border-t border-[var(--oh-border)] pt-6 mt-2\">\n <h3 className=\"text-lg font-medium mb-2\">\n {t(I18nKey.SETTINGS$CONVERSATION_TITLES)}\n </h3>\n <p className=\"mb-4 text-sm leading-5 text-tertiary-light\">\n {t(I18nKey.SETTINGS$TITLE_GENERATION_DESCRIPTION)}\n </p>\n <SettingsDropdownInput\n testId=\"title-llm-profile-input\"\n name=\"title-llm-profile-input\"\n label={t(I18nKey.SETTINGS$TITLE_GENERATION_MODEL)}\n items={titleLlmProfileItems}\n selectedKey={\n selectedTitleLlmProfile ?? AUTOMATIC_TITLE_LLM_PROFILE_KEY\n }\n onSelectionChange={(key) => {\n const value = key?.toString();\n setTitleLlmProfileInput(\n !value || value === AUTOMATIC_TITLE_LLM_PROFILE_KEY\n ? null\n : value,\n );\n }}\n />\n <NavigationLink\n to=\"/settings/llm\"\n className=\"mt-3 inline-block text-sm text-primary hover:underline\"\n >\n {t(I18nKey.SETTINGS$MANAGE_LLM_PROFILES)}\n </NavigationLink>\n </div>\n\n <div className=\"border-t border-[var(--oh-border)] pt-6 mt-2\">\n <h3 className=\"text-lg font-medium mb-2\">\n {t(I18nKey.SETTINGS$GIT_SETTINGS)}\n </h3>\n <p className=\"mb-4 text-sm leading-5 text-tertiary-light\">\n {t(I18nKey.SETTINGS$GIT_SETTINGS_DESCRIPTION)}\n </p>\n <div className=\"flex flex-col gap-6\">\n <SettingsInput\n testId=\"git-user-name-input\"\n name=\"git-user-name-input\"\n type=\"text\"\n label={t(I18nKey.SETTINGS$GIT_USERNAME)}\n defaultValue={settings.git_user_name || \"\"}\n onChange={checkIfGitUserNameHasChanged}\n placeholder={t(I18nKey.SETTINGS$GIT_USERNAME_PLACEHOLDER)}\n className=\"w-full min-w-0\"\n />\n <SettingsInput\n testId=\"git-user-email-input\"\n name=\"git-user-email-input\"\n type=\"email\"\n label={t(I18nKey.SETTINGS$GIT_EMAIL)}\n defaultValue={settings.git_user_email || \"\"}\n onChange={checkIfGitUserEmailHasChanged}\n placeholder={t(I18nKey.SETTINGS$GIT_EMAIL_PLACEHOLDER)}\n className=\"w-full min-w-0\"\n />\n </div>\n <div className=\"flex justify-start pt-4\">\n <BrandButton\n testId=\"submit-button\"\n variant=\"primary\"\n type=\"submit\"\n isDisabled={isPending || formIsClean}\n >\n {!isPending && t(I18nKey.SETTINGS$SAVE_CHANGES)}\n {isPending && t(I18nKey.SETTINGS$SAVING)}\n </BrandButton>\n </div>\n </div>\n </div>\n )}\n </form>\n );\n}\n\nexport default AppSettingsScreen;\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require("../_virtual/_rolldown/runtime.cjs");const e=require("../node_modules/react-i18next/dist/es/useTranslation.cjs"),t=require("../i18n/declaration.cjs"),n=require("../types/agent-state.cjs"),r=require("../components/features/conversation/conversation-tab-empty-state.cjs"),i=require("../hooks/use-conversation-id.cjs"),a=require("../hooks/use-agent-state.cjs"),
|
|
1
|
+
require("../_virtual/_rolldown/runtime.cjs");const e=require("../node_modules/react-i18next/dist/es/useTranslation.cjs"),t=require("../i18n/declaration.cjs"),n=require("../types/agent-state.cjs"),r=require("../components/features/conversation/conversation-tab-empty-state.cjs"),i=require("../hooks/use-conversation-id.cjs"),a=require("../stores/conversation-store.cjs"),o=require("../hooks/use-agent-state.cjs"),s=require("../components/features/conversation-panel/runtime-waiting-state.cjs"),c=require("../hooks/query/use-unified-get-git-changes.cjs"),l=require("../hooks/query/use-unified-git-commits.cjs"),u=require("../components/features/diff-viewer/commit-list.cjs"),d=require("../components/features/diff-viewer/diff-drawer-icon.cjs");let f=require("react"),p=require("react/jsx-runtime");function m(){let{t:m}=e.useTranslation(`openhands`),{conversationId:h}=i.useConversationId(),{commits:g,hasMore:_,isUnsupported:v,isLoading:y,isSuccess:b}=l.useUnifiedGitCommits(),{data:x,isSuccess:S,isLoading:C}=c.useUnifiedGetGitChanges(),w=a.useConversationStore(e=>e.commitsAutoExpandSection),T=a.useConversationStore(e=>e.setCommitsAutoExpandSection),E=(0,f.useCallback)(()=>T(null),[T]),{curAgentState:D}=o.useAgentState(),O=!n.RUNTIME_INACTIVE_STATES.includes(D),k=b&&!v&&g.length>0,A=S&&(x?.length??0)>0,j=k||A,M=y||O&&C;return(0,p.jsx)(`main`,{className:`h-full w-full flex flex-col items-stretch`,children:j?(0,p.jsx)(`div`,{className:`h-full overflow-y-auto flex flex-col items-stretch custom-scrollbar-always`,children:(0,p.jsx)(u.CommitList,{commits:k?g:[],hasMore:k?_:!1,uncommittedChanges:S?(x??[]).slice(0,100):[],autoExpandUncommitted:w===`uncommitted`,onAutoExpandHandled:E},h)}):(0,p.jsxs)(`div`,{className:`flex-1 flex items-center justify-center`,children:[!O&&(0,p.jsx)(s.RuntimeWaitingState,{testId:`commits-tab-status`,messageKey:t.I18nKey.DIFF_VIEWER$WAITING_FOR_RUNTIME}),O&&M&&(0,p.jsx)(s.RuntimeWaitingState,{testId:`commits-tab-status`,messageKey:t.I18nKey.DIFF_VIEWER$LOADING}),O&&!M&&(0,p.jsx)(r.ConversationTabEmptyState,{icon:(0,p.jsx)(d.DiffDrawerIcon,{}),children:m(t.I18nKey.DIFF_VIEWER$NO_COMMITS)})]})})}exports.default=m;
|
|
2
2
|
//# sourceMappingURL=commits-tab.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commits-tab.cjs","names":[],"sources":["../../src/routes/commits-tab.tsx"],"sourcesContent":["import { useTranslation } from \"react-i18next\";\nimport { CommitList } from \"#/components/features/diff-viewer/commit-list\";\nimport { DiffDrawerIcon } from \"#/components/features/diff-viewer/diff-drawer-icon\";\nimport { useUnifiedGitCommits } from \"#/hooks/query/use-unified-git-commits\";\nimport { useConversationId } from \"#/hooks/use-conversation-id\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { RUNTIME_INACTIVE_STATES } from \"#/types/agent-state\";\nimport { useAgentState } from \"#/hooks/use-agent-state\";\nimport { RuntimeWaitingState } from \"#/components/features/conversation-panel/runtime-waiting-state\";\nimport { ConversationTabEmptyState } from \"#/components/features/conversation/conversation-tab-empty-state\";\n\n/**\n * The Files tab's \"Commits\" view: the workspace's recent commit history\n * (newest first), each commit expandable into its per-file diffs. Sits\n * behind the third segment of the Diff/Files toggle, which is only\n * offered when the agent server supports the commits API.\n */\nfunction GitCommits() {\n const { t } = useTranslation(\"openhands\");\n const { conversationId } = useConversationId();\n const { commits, hasMore, isUnsupported, isLoading, isSuccess } =\n useUnifiedGitCommits();\n\n const { curAgentState } = useAgentState();\n const runtimeIsActive = !RUNTIME_INACTIVE_STATES.includes(curAgentState);\n\n const
|
|
1
|
+
{"version":3,"file":"commits-tab.cjs","names":[],"sources":["../../src/routes/commits-tab.tsx"],"sourcesContent":["import { useCallback } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { CommitList } from \"#/components/features/diff-viewer/commit-list\";\nimport { DiffDrawerIcon } from \"#/components/features/diff-viewer/diff-drawer-icon\";\nimport { useUnifiedGitCommits } from \"#/hooks/query/use-unified-git-commits\";\nimport { useUnifiedGetGitChanges } from \"#/hooks/query/use-unified-get-git-changes\";\nimport { useConversationId } from \"#/hooks/use-conversation-id\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { RUNTIME_INACTIVE_STATES } from \"#/types/agent-state\";\nimport { useAgentState } from \"#/hooks/use-agent-state\";\nimport { RuntimeWaitingState } from \"#/components/features/conversation-panel/runtime-waiting-state\";\nimport { ConversationTabEmptyState } from \"#/components/features/conversation/conversation-tab-empty-state\";\nimport { useConversationStore } from \"#/stores/conversation-store\";\n\n/**\n * The Files tab's \"Commits\" view: the workspace's recent commit history\n * (newest first), each commit expandable into its per-file diffs. Sits\n * behind the third segment of the Diff/Files toggle, which is only\n * offered when the agent server supports the commits API.\n */\nfunction GitCommits() {\n const { t } = useTranslation(\"openhands\");\n const { conversationId } = useConversationId();\n const { commits, hasMore, isUnsupported, isLoading, isSuccess } =\n useUnifiedGitCommits();\n const {\n data: uncommittedChanges,\n isSuccess: uncommittedSuccess,\n isLoading: uncommittedLoading,\n } = useUnifiedGetGitChanges();\n const commitsAutoExpandSection = useConversationStore(\n (state) => state.commitsAutoExpandSection,\n );\n const setCommitsAutoExpandSection = useConversationStore(\n (state) => state.setCommitsAutoExpandSection,\n );\n const handleAutoExpandHandled = useCallback(\n () => setCommitsAutoExpandSection(null),\n [setCommitsAutoExpandSection],\n );\n\n const { curAgentState } = useAgentState();\n const runtimeIsActive = !RUNTIME_INACTIVE_STATES.includes(curAgentState);\n\n const hasCommits = isSuccess && !isUnsupported && commits.length > 0;\n const hasUncommitted =\n uncommittedSuccess && (uncommittedChanges?.length ?? 0) > 0;\n const showList = hasCommits || hasUncommitted;\n const isListLoading = isLoading || (runtimeIsActive && uncommittedLoading);\n\n return (\n <main className=\"h-full w-full flex flex-col items-stretch\">\n {showList ? (\n <div className=\"h-full overflow-y-auto flex flex-col items-stretch custom-scrollbar-always\">\n {/* Keyed by conversation so switching conversations collapses any\n expanded commit. */}\n <CommitList\n key={conversationId}\n commits={hasCommits ? commits : []}\n hasMore={hasCommits ? hasMore : false}\n uncommittedChanges={\n uncommittedSuccess ? (uncommittedChanges ?? []).slice(0, 100) : []\n }\n autoExpandUncommitted={commitsAutoExpandSection === \"uncommitted\"}\n onAutoExpandHandled={handleAutoExpandHandled}\n />\n </div>\n ) : (\n <div className=\"flex-1 flex items-center justify-center\">\n {!runtimeIsActive && (\n <RuntimeWaitingState\n testId=\"commits-tab-status\"\n messageKey={I18nKey.DIFF_VIEWER$WAITING_FOR_RUNTIME}\n />\n )}\n {runtimeIsActive && isListLoading && (\n <RuntimeWaitingState\n testId=\"commits-tab-status\"\n messageKey={I18nKey.DIFF_VIEWER$LOADING}\n />\n )}\n {runtimeIsActive && !isListLoading && (\n <ConversationTabEmptyState icon={<DiffDrawerIcon />}>\n {t(I18nKey.DIFF_VIEWER$NO_COMMITS)}\n </ConversationTabEmptyState>\n )}\n </div>\n )}\n </main>\n );\n}\n\nexport default GitCommits;\n"],"mappings":"4xBAoBA,SAAS,GAAa,CACpB,GAAM,CAAE,KAAM,EAAA,eAAe,WAAW,EAClC,CAAE,kBAAmB,EAAA,kBAAkB,EACvC,CAAE,UAAS,UAAS,gBAAe,YAAW,aAClD,EAAA,qBAAqB,EACjB,CACJ,KAAM,EACN,UAAW,EACX,UAAW,GACT,EAAA,wBAAwB,EACtB,EAA2B,EAAA,qBAC9B,GAAU,EAAM,wBACnB,EACM,EAA8B,EAAA,qBACjC,GAAU,EAAM,2BACnB,EACM,GAAA,EAAA,EAAA,iBACE,EAA4B,IAAI,EACtC,CAAC,CAA2B,CAC9B,EAEM,CAAE,iBAAkB,EAAA,cAAc,EAClC,EAAkB,CAAC,EAAA,wBAAwB,SAAS,CAAa,EAEjE,EAAa,GAAa,CAAC,GAAiB,EAAQ,OAAS,EAC7D,EACJ,IAAuB,GAAoB,QAAU,GAAK,EACtD,EAAW,GAAc,EACzB,EAAgB,GAAc,GAAmB,EAEvD,OACE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,qDACb,GACC,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,uFAGb,EAAA,EAAA,KAAC,EAAA,WAAD,CAEE,QAAS,EAAa,EAAU,CAAC,EACjC,QAAS,EAAa,EAAU,GAChC,mBACE,GAAsB,GAAsB,CAAC,GAAG,MAAM,EAAG,GAAG,EAAI,CAAC,EAEnE,sBAAuB,IAA6B,cACpD,oBAAqB,CACtB,EARM,CAQN,CACE,CAAA,GAEL,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,mDAAf,CACG,CAAC,IACA,EAAA,EAAA,KAAC,EAAA,oBAAD,CACE,OAAO,qBACP,WAAY,EAAA,QAAQ,+BACrB,CAAA,EAEF,GAAmB,IAClB,EAAA,EAAA,KAAC,EAAA,oBAAD,CACE,OAAO,qBACP,WAAY,EAAA,QAAQ,mBACrB,CAAA,EAEF,GAAmB,CAAC,IACnB,EAAA,EAAA,KAAC,EAAA,0BAAD,CAA2B,MAAM,EAAA,EAAA,KAAC,EAAA,eAAD,CAAiB,CAAA,WAC/C,EAAE,EAAA,QAAQ,sBAAsB,CACR,CAAA,CAE1B,GAEH,CAAA,CAEV"}
|
|
@@ -3,43 +3,49 @@ import { I18nKey as t } from "../i18n/declaration.js";
|
|
|
3
3
|
import { RUNTIME_INACTIVE_STATES as n } from "../types/agent-state.js";
|
|
4
4
|
import { ConversationTabEmptyState as r } from "../components/features/conversation/conversation-tab-empty-state.js";
|
|
5
5
|
import { useConversationId as i } from "../hooks/use-conversation-id.js";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
6
|
+
import { useConversationStore as a } from "../stores/conversation-store.js";
|
|
7
|
+
import { useAgentState as o } from "../hooks/use-agent-state.js";
|
|
8
|
+
import { RuntimeWaitingState as s } from "../components/features/conversation-panel/runtime-waiting-state.js";
|
|
9
|
+
import { useUnifiedGetGitChanges as c } from "../hooks/query/use-unified-get-git-changes.js";
|
|
10
|
+
import { useUnifiedGitCommits as l } from "../hooks/query/use-unified-git-commits.js";
|
|
11
|
+
import { CommitList as u } from "../components/features/diff-viewer/commit-list.js";
|
|
12
|
+
import { DiffDrawerIcon as d } from "../components/features/diff-viewer/diff-drawer-icon.js";
|
|
13
|
+
import { useCallback as f } from "react";
|
|
14
|
+
import { jsx as p, jsxs as m } from "react/jsx-runtime";
|
|
12
15
|
//#region src/routes/commits-tab.tsx
|
|
13
|
-
function
|
|
14
|
-
let { t:
|
|
15
|
-
return /* @__PURE__ */
|
|
16
|
+
function h() {
|
|
17
|
+
let { t: h } = e("openhands"), { conversationId: g } = i(), { commits: _, hasMore: v, isUnsupported: y, isLoading: b, isSuccess: x } = l(), { data: S, isSuccess: C, isLoading: w } = c(), T = a((e) => e.commitsAutoExpandSection), E = a((e) => e.setCommitsAutoExpandSection), D = f(() => E(null), [E]), { curAgentState: O } = o(), k = !n.includes(O), A = x && !y && _.length > 0, j = C && (S?.length ?? 0) > 0, M = A || j, N = b || k && w;
|
|
18
|
+
return /* @__PURE__ */ p("main", {
|
|
16
19
|
className: "h-full w-full flex flex-col items-stretch",
|
|
17
|
-
children:
|
|
20
|
+
children: M ? /* @__PURE__ */ p("div", {
|
|
18
21
|
className: "h-full overflow-y-auto flex flex-col items-stretch custom-scrollbar-always",
|
|
19
|
-
children: /* @__PURE__ */ u
|
|
20
|
-
commits:
|
|
21
|
-
hasMore:
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
children: /* @__PURE__ */ p(u, {
|
|
23
|
+
commits: A ? _ : [],
|
|
24
|
+
hasMore: A ? v : !1,
|
|
25
|
+
uncommittedChanges: C ? (S ?? []).slice(0, 100) : [],
|
|
26
|
+
autoExpandUncommitted: T === "uncommitted",
|
|
27
|
+
onAutoExpandHandled: D
|
|
28
|
+
}, g)
|
|
29
|
+
}) : /* @__PURE__ */ m("div", {
|
|
24
30
|
className: "flex-1 flex items-center justify-center",
|
|
25
31
|
children: [
|
|
26
|
-
!
|
|
32
|
+
!k && /* @__PURE__ */ p(s, {
|
|
27
33
|
testId: "commits-tab-status",
|
|
28
34
|
messageKey: t.DIFF_VIEWER$WAITING_FOR_RUNTIME
|
|
29
35
|
}),
|
|
30
|
-
|
|
36
|
+
k && N && /* @__PURE__ */ p(s, {
|
|
31
37
|
testId: "commits-tab-status",
|
|
32
38
|
messageKey: t.DIFF_VIEWER$LOADING
|
|
33
39
|
}),
|
|
34
|
-
|
|
35
|
-
icon: /* @__PURE__ */
|
|
36
|
-
children:
|
|
40
|
+
k && !N && /* @__PURE__ */ p(r, {
|
|
41
|
+
icon: /* @__PURE__ */ p(d, {}),
|
|
42
|
+
children: h(t.DIFF_VIEWER$NO_COMMITS)
|
|
37
43
|
})
|
|
38
44
|
]
|
|
39
45
|
})
|
|
40
46
|
});
|
|
41
47
|
}
|
|
42
48
|
//#endregion
|
|
43
|
-
export {
|
|
49
|
+
export { h as default };
|
|
44
50
|
|
|
45
51
|
//# sourceMappingURL=commits-tab.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commits-tab.js","names":[],"sources":["../../src/routes/commits-tab.tsx"],"sourcesContent":["import { useTranslation } from \"react-i18next\";\nimport { CommitList } from \"#/components/features/diff-viewer/commit-list\";\nimport { DiffDrawerIcon } from \"#/components/features/diff-viewer/diff-drawer-icon\";\nimport { useUnifiedGitCommits } from \"#/hooks/query/use-unified-git-commits\";\nimport { useConversationId } from \"#/hooks/use-conversation-id\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { RUNTIME_INACTIVE_STATES } from \"#/types/agent-state\";\nimport { useAgentState } from \"#/hooks/use-agent-state\";\nimport { RuntimeWaitingState } from \"#/components/features/conversation-panel/runtime-waiting-state\";\nimport { ConversationTabEmptyState } from \"#/components/features/conversation/conversation-tab-empty-state\";\n\n/**\n * The Files tab's \"Commits\" view: the workspace's recent commit history\n * (newest first), each commit expandable into its per-file diffs. Sits\n * behind the third segment of the Diff/Files toggle, which is only\n * offered when the agent server supports the commits API.\n */\nfunction GitCommits() {\n const { t } = useTranslation(\"openhands\");\n const { conversationId } = useConversationId();\n const { commits, hasMore, isUnsupported, isLoading, isSuccess } =\n useUnifiedGitCommits();\n\n const { curAgentState } = useAgentState();\n const runtimeIsActive = !RUNTIME_INACTIVE_STATES.includes(curAgentState);\n\n const
|
|
1
|
+
{"version":3,"file":"commits-tab.js","names":[],"sources":["../../src/routes/commits-tab.tsx"],"sourcesContent":["import { useCallback } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { CommitList } from \"#/components/features/diff-viewer/commit-list\";\nimport { DiffDrawerIcon } from \"#/components/features/diff-viewer/diff-drawer-icon\";\nimport { useUnifiedGitCommits } from \"#/hooks/query/use-unified-git-commits\";\nimport { useUnifiedGetGitChanges } from \"#/hooks/query/use-unified-get-git-changes\";\nimport { useConversationId } from \"#/hooks/use-conversation-id\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { RUNTIME_INACTIVE_STATES } from \"#/types/agent-state\";\nimport { useAgentState } from \"#/hooks/use-agent-state\";\nimport { RuntimeWaitingState } from \"#/components/features/conversation-panel/runtime-waiting-state\";\nimport { ConversationTabEmptyState } from \"#/components/features/conversation/conversation-tab-empty-state\";\nimport { useConversationStore } from \"#/stores/conversation-store\";\n\n/**\n * The Files tab's \"Commits\" view: the workspace's recent commit history\n * (newest first), each commit expandable into its per-file diffs. Sits\n * behind the third segment of the Diff/Files toggle, which is only\n * offered when the agent server supports the commits API.\n */\nfunction GitCommits() {\n const { t } = useTranslation(\"openhands\");\n const { conversationId } = useConversationId();\n const { commits, hasMore, isUnsupported, isLoading, isSuccess } =\n useUnifiedGitCommits();\n const {\n data: uncommittedChanges,\n isSuccess: uncommittedSuccess,\n isLoading: uncommittedLoading,\n } = useUnifiedGetGitChanges();\n const commitsAutoExpandSection = useConversationStore(\n (state) => state.commitsAutoExpandSection,\n );\n const setCommitsAutoExpandSection = useConversationStore(\n (state) => state.setCommitsAutoExpandSection,\n );\n const handleAutoExpandHandled = useCallback(\n () => setCommitsAutoExpandSection(null),\n [setCommitsAutoExpandSection],\n );\n\n const { curAgentState } = useAgentState();\n const runtimeIsActive = !RUNTIME_INACTIVE_STATES.includes(curAgentState);\n\n const hasCommits = isSuccess && !isUnsupported && commits.length > 0;\n const hasUncommitted =\n uncommittedSuccess && (uncommittedChanges?.length ?? 0) > 0;\n const showList = hasCommits || hasUncommitted;\n const isListLoading = isLoading || (runtimeIsActive && uncommittedLoading);\n\n return (\n <main className=\"h-full w-full flex flex-col items-stretch\">\n {showList ? (\n <div className=\"h-full overflow-y-auto flex flex-col items-stretch custom-scrollbar-always\">\n {/* Keyed by conversation so switching conversations collapses any\n expanded commit. */}\n <CommitList\n key={conversationId}\n commits={hasCommits ? commits : []}\n hasMore={hasCommits ? hasMore : false}\n uncommittedChanges={\n uncommittedSuccess ? (uncommittedChanges ?? []).slice(0, 100) : []\n }\n autoExpandUncommitted={commitsAutoExpandSection === \"uncommitted\"}\n onAutoExpandHandled={handleAutoExpandHandled}\n />\n </div>\n ) : (\n <div className=\"flex-1 flex items-center justify-center\">\n {!runtimeIsActive && (\n <RuntimeWaitingState\n testId=\"commits-tab-status\"\n messageKey={I18nKey.DIFF_VIEWER$WAITING_FOR_RUNTIME}\n />\n )}\n {runtimeIsActive && isListLoading && (\n <RuntimeWaitingState\n testId=\"commits-tab-status\"\n messageKey={I18nKey.DIFF_VIEWER$LOADING}\n />\n )}\n {runtimeIsActive && !isListLoading && (\n <ConversationTabEmptyState icon={<DiffDrawerIcon />}>\n {t(I18nKey.DIFF_VIEWER$NO_COMMITS)}\n </ConversationTabEmptyState>\n )}\n </div>\n )}\n </main>\n );\n}\n\nexport default GitCommits;\n"],"mappings":";;;;;;;;;;;;;;;AAoBA,SAAS,IAAa;CACpB,IAAM,EAAE,SAAM,EAAe,WAAW,GAClC,EAAE,sBAAmB,EAAkB,GACvC,EAAE,YAAS,YAAS,kBAAe,cAAW,iBAClD,EAAqB,GACjB,EACJ,MAAM,GACN,WAAW,GACX,WAAW,MACT,EAAwB,GACtB,IAA2B,GAC9B,MAAU,EAAM,wBACnB,GACM,IAA8B,GACjC,MAAU,EAAM,2BACnB,GACM,IAA0B,QACxB,EAA4B,IAAI,GACtC,CAAC,CAA2B,CAC9B,GAEM,EAAE,qBAAkB,EAAc,GAClC,IAAkB,CAAC,EAAwB,SAAS,CAAa,GAEjE,IAAa,KAAa,CAAC,KAAiB,EAAQ,SAAS,GAC7D,IACJ,MAAuB,GAAoB,UAAU,KAAK,GACtD,IAAW,KAAc,GACzB,IAAgB,KAAc,KAAmB;CAEvD,OACE,kBAAC,QAAD;EAAM,WAAU;YACb,IACC,kBAAC,OAAD;GAAK,WAAU;aAGb,kBAAC,GAAD;IAEE,SAAS,IAAa,IAAU,CAAC;IACjC,SAAS,IAAa,IAAU;IAChC,oBACE,KAAsB,KAAsB,CAAC,GAAG,MAAM,GAAG,GAAG,IAAI,CAAC;IAEnE,uBAAuB,MAA6B;IACpD,qBAAqB;GACtB,GARM,CAQN;EACE,CAAA,IAEL,kBAAC,OAAD;GAAK,WAAU;aAAf;IACG,CAAC,KACA,kBAAC,GAAD;KACE,QAAO;KACP,YAAY,EAAQ;IACrB,CAAA;IAEF,KAAmB,KAClB,kBAAC,GAAD;KACE,QAAO;KACP,YAAY,EAAQ;IACrB,CAAA;IAEF,KAAmB,CAAC,KACnB,kBAAC,GAAD;KAA2B,MAAM,kBAAC,GAAD,CAAiB,CAAA;eAC/C,EAAE,EAAQ,sBAAsB;IACR,CAAA;GAE1B;;CAEH,CAAA;AAEV"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require("../_virtual/_rolldown/runtime.cjs"),t=require("../node_modules/react-i18next/dist/es/useTranslation.cjs"),n=require("../i18n/declaration.cjs"),r=require("../types/agent-state.cjs"),i=require("../hooks/use-conversation-id.cjs"),a=require("../stores/command-store.cjs"),o=require("../stores/conversation-store.cjs"),s=require("../stores/agent-store.cjs"),c=require("../stores/conversation-state-store.cjs"),l=require("../utils/custom-toast-handlers.cjs"),u=require("../contexts/active-backend-context.cjs"),d=require("../api/backend-registry/last-conversation-store.cjs"),f=require("../stores/error-message-store.cjs"),p=require("../api/cloud/conversation-service.api.cjs"),m=require("../hooks/query/use-active-conversation.cjs"),h=require("../wrapper/event-handler.cjs"),g=require("../hooks/query/use-task-polling.cjs"),_=require("../hooks/query/use-is-authed.cjs"),v=require("../components/features/conversation/conversation-main/conversation-main.cjs"),
|
|
1
|
+
const e=require("../_virtual/_rolldown/runtime.cjs"),t=require("../node_modules/react-i18next/dist/es/useTranslation.cjs"),n=require("../i18n/declaration.cjs"),r=require("../types/agent-state.cjs"),i=require("../hooks/use-conversation-id.cjs"),a=require("../stores/command-store.cjs"),o=require("../stores/conversation-store.cjs"),s=require("../stores/agent-store.cjs"),c=require("../stores/conversation-state-store.cjs"),l=require("../utils/custom-toast-handlers.cjs"),u=require("../contexts/active-backend-context.cjs"),d=require("../api/backend-registry/last-conversation-store.cjs"),f=require("../stores/error-message-store.cjs"),p=require("../api/cloud/conversation-service.api.cjs"),m=require("../hooks/query/use-active-conversation.cjs"),h=require("../wrapper/event-handler.cjs"),g=require("../hooks/query/use-task-polling.cjs"),_=require("../hooks/query/use-is-authed.cjs"),v=require("../components/features/conversation/conversation-overview-drawer-context.cjs"),y=require("../components/features/conversation/conversation-main/conversation-main.cjs"),b=require("../components/features/conversation/conversation-main/conversation-mobile-panel-page.cjs"),x=require("../contexts/websocket-provider-wrapper.cjs");let S=require("react");S=e.__toESM(S,1);let C=require("react/jsx-runtime"),w=require("react-router");function T(){let{t:e}=t.useTranslation(`openhands`),{conversationId:T}=i.useConversationId(),E=(0,w.useMatch)(`/conversations/:conversationId/panel`),{isTask:D,taskStatus:O,taskDetail:k}=g.useTaskPollingController(),A=u.useActiveBackend(),j=S.default.useRef(A.backend.id),M=S.default.useRef(A.orgId),N=j.current!==A.backend.id||M.current!==A.orgId,{data:P,isFetched:F}=m.useActiveConversation(),{data:I}=_.useIsAuthed(),{resetConversationState:L}=o.useConversationStore(),R=(0,w.useNavigate)(),z=(0,w.useLocation)(),B=a.useCommandStore(e=>e.clearTerminal),V=c.useConversationStateStore(e=>e.reset),H=s.useAgentStore(e=>e.setCurrentAgentState),U=f.useErrorMessageStore(e=>e.removeErrorMessage);S.default.useEffect(()=>{B(),L(),V(),H(r.AgentState.LOADING),U()},[T,B,L,V,H,U]),S.default.useEffect(()=>{if(D&&O===`ERROR`){l.displayErrorToast(k||e(n.I18nKey.CONVERSATION$FAILED_TO_START_FROM_TASK));let t=z.state?.resumedFromConversationId;R(t?`/conversations/${t}`:`/conversations`,{replace:!0})}},[D,O,k,e,R,z.state]),S.default.useEffect(()=>{!F||!I||N||P||(d.clearLastConversationId(A.backend.id,A.orgId),l.displayErrorToast(e(n.I18nKey.CONVERSATION$NOT_EXIST_OR_NO_PERMISSION)),R(`/conversations`))},[P,F,I,R,e,N,A.backend.id,A.orgId]),S.default.useEffect(()=>{N||T&&(T.startsWith(`task-`)||d.setLastConversationId(A.backend.id,A.orgId,T))},[T,N,A.backend.id,A.orgId]);let W=S.default.useRef(null);return S.default.useEffect(()=>{!F||!P||A.backend.kind===`cloud`&&P.sandbox_status===`PAUSED`&&P.sandbox_id&&W.current!==P.id&&(W.current=P.id,p.resumeCloudSandbox(P.sandbox_id).catch(()=>{l.displayErrorToast(e(n.I18nKey.CONVERSATION$FAILED_TO_START_FROM_TASK))}))},[F,P?.id,P?.sandbox_status,P?.sandbox_id,A.backend.kind,e]),N?null:(0,C.jsx)(x.WebSocketProviderWrapper,{conversationId:T,children:(0,C.jsx)(h.EventHandler,{children:(0,C.jsx)(v.ConversationOverviewDrawerProvider,{children:(0,C.jsx)(`div`,{"data-testid":`app-route`,className:`flex h-full flex-col`,children:E?(0,C.jsx)(b.ConversationMobilePanelPage,{onNavigateBack:()=>R(`/conversations/${T}`)}):(0,C.jsx)(y.ConversationMain,{})})})})})}function E(){return(0,C.jsx)(T,{})}exports.default=E;
|
|
2
2
|
//# sourceMappingURL=conversation.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation.cjs","names":[],"sources":["../../src/routes/conversation.tsx"],"sourcesContent":["import React from \"react\";\nimport { useNavigate, useLocation, useMatch } from \"react-router\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { useConversationId } from \"#/hooks/use-conversation-id\";\nimport { useCommandStore } from \"#/stores/command-store\";\nimport { useConversationStore } from \"#/stores/conversation-store\";\nimport { useAgentStore } from \"#/stores/agent-store\";\nimport { useConversationStateStore } from \"#/stores/conversation-state-store\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport {\n clearLastConversationId,\n setLastConversationId,\n} from \"#/api/backend-registry/last-conversation-store\";\nimport { AgentState } from \"#/types/agent-state\";\n\nimport { EventHandler } from \"../wrapper/event-handler\";\n\nimport { useActiveConversation } from \"#/hooks/query/use-active-conversation\";\nimport { useTaskPollingController } from \"#/hooks/query/use-task-polling\";\n\nimport { displayErrorToast } from \"#/utils/custom-toast-handlers\";\nimport { useIsAuthed } from \"#/hooks/query/use-is-authed\";\nimport { ConversationMain } from \"#/components/features/conversation/conversation-main/conversation-main\";\nimport { ConversationMobilePanelPage } from \"#/components/features/conversation/conversation-main/conversation-mobile-panel-page\";\n\nimport { WebSocketProviderWrapper } from \"#/contexts/websocket-provider-wrapper\";\nimport { useErrorMessageStore } from \"#/stores/error-message-store\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { resumeCloudSandbox } from \"#/api/cloud/conversation-service.api\";\n\nfunction AppContent() {\n const { t } = useTranslation(\"openhands\");\n const { conversationId } = useConversationId();\n const panelViewMatch = useMatch(\"/conversations/:conversationId/panel\");\n\n const { isTask, taskStatus, taskDetail } = useTaskPollingController();\n\n // The conversationId in the URL belongs to whichever backend was\n // active when the route first mounted. If the user switches backends\n // while this route is still mounted, the id is meaningless under the\n // new backend — disable the active-conversation fetch (and its 404\n // toast) so we don't fire a request that the BackendSelector's\n // redirect will immediately navigate away from anyway. Mirrors the\n // same guard in `routes/automation-detail.tsx`.\n const active = useActiveBackend();\n const mountedBackendId = React.useRef(active.backend.id);\n const mountedOrgId = React.useRef(active.orgId);\n const backendChanged =\n mountedBackendId.current !== active.backend.id ||\n mountedOrgId.current !== active.orgId;\n\n const { data: conversation, isFetched } = useActiveConversation();\n const { data: isAuthed } = useIsAuthed();\n const { resetConversationState } = useConversationStore();\n const navigate = useNavigate();\n const location = useLocation();\n const clearTerminal = useCommandStore((state) => state.clearTerminal);\n const resetConversationRuntimeState = useConversationStateStore(\n (state) => state.reset,\n );\n const setCurrentAgentState = useAgentStore(\n (state) => state.setCurrentAgentState,\n );\n const removeErrorMessage = useErrorMessageStore(\n (state) => state.removeErrorMessage,\n );\n\n // Per-conversation UI/runtime resets. The event store is cleared separately,\n // inside ConversationWebSocketProvider, so the clear is ordered *before* the\n // preloaded-history re-seed (see the note there) — clearing it here would run\n // too late and wipe the freshly seeded history on a conversation switch.\n React.useEffect(() => {\n clearTerminal();\n resetConversationState();\n resetConversationRuntimeState();\n setCurrentAgentState(AgentState.LOADING);\n removeErrorMessage();\n }, [\n conversationId,\n clearTerminal,\n resetConversationState,\n resetConversationRuntimeState,\n setCurrentAgentState,\n removeErrorMessage,\n ]);\n\n React.useEffect(() => {\n if (isTask && taskStatus === \"ERROR\") {\n displayErrorToast(\n taskDetail || t(I18nKey.CONVERSATION$FAILED_TO_START_FROM_TASK),\n );\n // Navigate back to the original conversation when a resume task fails so\n // the user isn't stranded at the dead task-{id} URL. The resume effect's\n // ref prevents it from immediately retrying once we land there.\n const resumedFrom = (location.state as Record<string, unknown> | null)\n ?.resumedFromConversationId as string | undefined;\n navigate(\n resumedFrom ? `/conversations/${resumedFrom}` : \"/conversations\",\n { replace: true },\n );\n }\n }, [isTask, taskStatus, taskDetail, t, navigate, location.state]);\n\n React.useEffect(() => {\n if (!isFetched || !isAuthed) return;\n // The BackendSelector is in the middle of redirecting us away from\n // this route — don't toast/navigate based on a 404 that's just\n // \"this id doesn't exist on the new backend\".\n if (backendChanged) return;\n\n if (!conversation) {\n // Clear the per-backend \"last selected\" slot so the next switch\n // to this backend doesn't try to revisit a stale id.\n clearLastConversationId(active.backend.id, active.orgId);\n displayErrorToast(t(I18nKey.CONVERSATION$NOT_EXIST_OR_NO_PERMISSION));\n navigate(\"/conversations\");\n }\n }, [\n conversation,\n isFetched,\n isAuthed,\n navigate,\n t,\n backendChanged,\n active.backend.id,\n active.orgId,\n ]);\n\n // Remember the most recently selected conversation for the current\n // (backend, org) so flipping back to this backend later restores the\n // user to where they left off. Skip while a backend switch is in\n // flight: the id in the URL is from the previous backend and would\n // otherwise overwrite the new backend's memory.\n React.useEffect(() => {\n if (backendChanged) return;\n if (!conversationId) return;\n if (conversationId.startsWith(\"task-\")) return;\n setLastConversationId(active.backend.id, active.orgId, conversationId);\n }, [conversationId, backendChanged, active.backend.id, active.orgId]);\n\n // Cloud conversation resume: mirrors OpenHands' useSandboxRecovery.\n //\n // When the cloud API reports sandbox_status === \"PAUSED\" the sandbox is\n // sleeping. The correct wake-up call is POST /api/v1/sandboxes/{id}/resume\n // (a lightweight unpause). The previous approach — creating a new start task\n // via POST /api/v1/app-conversations — was wrong: it tries to provision a\n // fresh conversation in the sandbox and is subject to a 120-second cold-start\n // timeout that can fail. The resume endpoint simply unpauses the existing one.\n //\n // After calling resume we stay on the current URL. The 3-second refetch\n // interval in useActiveConversation (active while conversation_url is null)\n // polls until conversation_url populates, then the WebSocket connects.\n //\n // A ref guards against duplicate triggers per unique conversation.id within\n // the same route-mount lifetime.\n const resumeTriggeredForRef = React.useRef<string | null>(null);\n React.useEffect(() => {\n if (!isFetched || !conversation) return;\n if (active.backend.kind !== \"cloud\") return;\n if (conversation.sandbox_status !== \"PAUSED\") return; // only resume PAUSED sandboxes\n if (!conversation.sandbox_id) return; // no sandbox to resume\n if (resumeTriggeredForRef.current === conversation.id) return; // already sent\n\n resumeTriggeredForRef.current = conversation.id;\n\n resumeCloudSandbox(conversation.sandbox_id).catch(() => {\n displayErrorToast(t(I18nKey.CONVERSATION$FAILED_TO_START_FROM_TASK));\n });\n }, [\n isFetched,\n conversation?.id,\n conversation?.sandbox_status,\n conversation?.sandbox_id,\n active.backend.kind,\n t,\n ]);\n\n // A backend switch is in flight (BackendSelector flips the active backend\n // and redirects to /conversations on the next tick). The conversationId in\n // the URL belongs to the *previous* backend, so unmount the whole\n // conversation subtree now — before any per-conversation query (history,\n // metrics, sub-conversations, runtime info, …) re-fires against a backend\n // the id is foreign to. Those foreign fetches fail response validation and\n // surface \"agent server returned data this UI does not understand\". This is\n // deterministic regardless of the navigate-vs-setActive render race: React\n // re-renders this parent before its children, so returning null removes them\n // before they can issue the request.\n if (backendChanged) {\n return null;\n }\n\n const content = (\n <EventHandler>\n <div data-testid=\"app-route\" className=\"flex h-full flex-col\">\n {panelViewMatch ? (\n <ConversationMobilePanelPage\n onNavigateBack={() => navigate(`/conversations/${conversationId}`)}\n />\n ) : (\n <ConversationMain />\n )}\n </div>\n </EventHandler>\n );\n\n return (\n <WebSocketProviderWrapper conversationId={conversationId}>\n {content}\n </WebSocketProviderWrapper>\n );\n}\n\nexport function ConversationView() {\n return <AppContent />;\n}\n\nexport default ConversationView;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"conversation.cjs","names":[],"sources":["../../src/routes/conversation.tsx"],"sourcesContent":["import React from \"react\";\nimport { useNavigate, useLocation, useMatch } from \"react-router\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { useConversationId } from \"#/hooks/use-conversation-id\";\nimport { useCommandStore } from \"#/stores/command-store\";\nimport { useConversationStore } from \"#/stores/conversation-store\";\nimport { useAgentStore } from \"#/stores/agent-store\";\nimport { useConversationStateStore } from \"#/stores/conversation-state-store\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport {\n clearLastConversationId,\n setLastConversationId,\n} from \"#/api/backend-registry/last-conversation-store\";\nimport { AgentState } from \"#/types/agent-state\";\n\nimport { EventHandler } from \"../wrapper/event-handler\";\n\nimport { useActiveConversation } from \"#/hooks/query/use-active-conversation\";\nimport { useTaskPollingController } from \"#/hooks/query/use-task-polling\";\n\nimport { displayErrorToast } from \"#/utils/custom-toast-handlers\";\nimport { useIsAuthed } from \"#/hooks/query/use-is-authed\";\nimport { ConversationMain } from \"#/components/features/conversation/conversation-main/conversation-main\";\nimport { ConversationMobilePanelPage } from \"#/components/features/conversation/conversation-main/conversation-mobile-panel-page\";\nimport { ConversationOverviewDrawerProvider } from \"#/components/features/conversation/conversation-overview-drawer-context\";\n\nimport { WebSocketProviderWrapper } from \"#/contexts/websocket-provider-wrapper\";\nimport { useErrorMessageStore } from \"#/stores/error-message-store\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { resumeCloudSandbox } from \"#/api/cloud/conversation-service.api\";\n\nfunction AppContent() {\n const { t } = useTranslation(\"openhands\");\n const { conversationId } = useConversationId();\n const panelViewMatch = useMatch(\"/conversations/:conversationId/panel\");\n\n const { isTask, taskStatus, taskDetail } = useTaskPollingController();\n\n // The conversationId in the URL belongs to whichever backend was\n // active when the route first mounted. If the user switches backends\n // while this route is still mounted, the id is meaningless under the\n // new backend — disable the active-conversation fetch (and its 404\n // toast) so we don't fire a request that the BackendSelector's\n // redirect will immediately navigate away from anyway. Mirrors the\n // same guard in `routes/automation-detail.tsx`.\n const active = useActiveBackend();\n const mountedBackendId = React.useRef(active.backend.id);\n const mountedOrgId = React.useRef(active.orgId);\n const backendChanged =\n mountedBackendId.current !== active.backend.id ||\n mountedOrgId.current !== active.orgId;\n\n const { data: conversation, isFetched } = useActiveConversation();\n const { data: isAuthed } = useIsAuthed();\n const { resetConversationState } = useConversationStore();\n const navigate = useNavigate();\n const location = useLocation();\n const clearTerminal = useCommandStore((state) => state.clearTerminal);\n const resetConversationRuntimeState = useConversationStateStore(\n (state) => state.reset,\n );\n const setCurrentAgentState = useAgentStore(\n (state) => state.setCurrentAgentState,\n );\n const removeErrorMessage = useErrorMessageStore(\n (state) => state.removeErrorMessage,\n );\n\n // Per-conversation UI/runtime resets. The event store is cleared separately,\n // inside ConversationWebSocketProvider, so the clear is ordered *before* the\n // preloaded-history re-seed (see the note there) — clearing it here would run\n // too late and wipe the freshly seeded history on a conversation switch.\n React.useEffect(() => {\n clearTerminal();\n resetConversationState();\n resetConversationRuntimeState();\n setCurrentAgentState(AgentState.LOADING);\n removeErrorMessage();\n }, [\n conversationId,\n clearTerminal,\n resetConversationState,\n resetConversationRuntimeState,\n setCurrentAgentState,\n removeErrorMessage,\n ]);\n\n React.useEffect(() => {\n if (isTask && taskStatus === \"ERROR\") {\n displayErrorToast(\n taskDetail || t(I18nKey.CONVERSATION$FAILED_TO_START_FROM_TASK),\n );\n // Navigate back to the original conversation when a resume task fails so\n // the user isn't stranded at the dead task-{id} URL. The resume effect's\n // ref prevents it from immediately retrying once we land there.\n const resumedFrom = (location.state as Record<string, unknown> | null)\n ?.resumedFromConversationId as string | undefined;\n navigate(\n resumedFrom ? `/conversations/${resumedFrom}` : \"/conversations\",\n { replace: true },\n );\n }\n }, [isTask, taskStatus, taskDetail, t, navigate, location.state]);\n\n React.useEffect(() => {\n if (!isFetched || !isAuthed) return;\n // The BackendSelector is in the middle of redirecting us away from\n // this route — don't toast/navigate based on a 404 that's just\n // \"this id doesn't exist on the new backend\".\n if (backendChanged) return;\n\n if (!conversation) {\n // Clear the per-backend \"last selected\" slot so the next switch\n // to this backend doesn't try to revisit a stale id.\n clearLastConversationId(active.backend.id, active.orgId);\n displayErrorToast(t(I18nKey.CONVERSATION$NOT_EXIST_OR_NO_PERMISSION));\n navigate(\"/conversations\");\n }\n }, [\n conversation,\n isFetched,\n isAuthed,\n navigate,\n t,\n backendChanged,\n active.backend.id,\n active.orgId,\n ]);\n\n // Remember the most recently selected conversation for the current\n // (backend, org) so flipping back to this backend later restores the\n // user to where they left off. Skip while a backend switch is in\n // flight: the id in the URL is from the previous backend and would\n // otherwise overwrite the new backend's memory.\n React.useEffect(() => {\n if (backendChanged) return;\n if (!conversationId) return;\n if (conversationId.startsWith(\"task-\")) return;\n setLastConversationId(active.backend.id, active.orgId, conversationId);\n }, [conversationId, backendChanged, active.backend.id, active.orgId]);\n\n // Cloud conversation resume: mirrors OpenHands' useSandboxRecovery.\n //\n // When the cloud API reports sandbox_status === \"PAUSED\" the sandbox is\n // sleeping. The correct wake-up call is POST /api/v1/sandboxes/{id}/resume\n // (a lightweight unpause). The previous approach — creating a new start task\n // via POST /api/v1/app-conversations — was wrong: it tries to provision a\n // fresh conversation in the sandbox and is subject to a 120-second cold-start\n // timeout that can fail. The resume endpoint simply unpauses the existing one.\n //\n // After calling resume we stay on the current URL. The 3-second refetch\n // interval in useActiveConversation (active while conversation_url is null)\n // polls until conversation_url populates, then the WebSocket connects.\n //\n // A ref guards against duplicate triggers per unique conversation.id within\n // the same route-mount lifetime.\n const resumeTriggeredForRef = React.useRef<string | null>(null);\n React.useEffect(() => {\n if (!isFetched || !conversation) return;\n if (active.backend.kind !== \"cloud\") return;\n if (conversation.sandbox_status !== \"PAUSED\") return; // only resume PAUSED sandboxes\n if (!conversation.sandbox_id) return; // no sandbox to resume\n if (resumeTriggeredForRef.current === conversation.id) return; // already sent\n\n resumeTriggeredForRef.current = conversation.id;\n\n resumeCloudSandbox(conversation.sandbox_id).catch(() => {\n displayErrorToast(t(I18nKey.CONVERSATION$FAILED_TO_START_FROM_TASK));\n });\n }, [\n isFetched,\n conversation?.id,\n conversation?.sandbox_status,\n conversation?.sandbox_id,\n active.backend.kind,\n t,\n ]);\n\n // A backend switch is in flight (BackendSelector flips the active backend\n // and redirects to /conversations on the next tick). The conversationId in\n // the URL belongs to the *previous* backend, so unmount the whole\n // conversation subtree now — before any per-conversation query (history,\n // metrics, sub-conversations, runtime info, …) re-fires against a backend\n // the id is foreign to. Those foreign fetches fail response validation and\n // surface \"agent server returned data this UI does not understand\". This is\n // deterministic regardless of the navigate-vs-setActive render race: React\n // re-renders this parent before its children, so returning null removes them\n // before they can issue the request.\n if (backendChanged) {\n return null;\n }\n\n const content = (\n <EventHandler>\n <ConversationOverviewDrawerProvider>\n <div data-testid=\"app-route\" className=\"flex h-full flex-col\">\n {panelViewMatch ? (\n <ConversationMobilePanelPage\n onNavigateBack={() =>\n navigate(`/conversations/${conversationId}`)\n }\n />\n ) : (\n <ConversationMain />\n )}\n </div>\n </ConversationOverviewDrawerProvider>\n </EventHandler>\n );\n\n return (\n <WebSocketProviderWrapper conversationId={conversationId}>\n {content}\n </WebSocketProviderWrapper>\n );\n}\n\nexport function ConversationView() {\n return <AppContent />;\n}\n\nexport default ConversationView;\n"],"mappings":"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"}
|
|
@@ -15,81 +15,82 @@ import { useActiveConversation as m } from "../hooks/query/use-active-conversati
|
|
|
15
15
|
import { EventHandler as h } from "../wrapper/event-handler.js";
|
|
16
16
|
import { useTaskPollingController as g } from "../hooks/query/use-task-polling.js";
|
|
17
17
|
import { useIsAuthed as _ } from "../hooks/query/use-is-authed.js";
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import {
|
|
21
|
-
import x from "
|
|
22
|
-
import
|
|
23
|
-
import {
|
|
18
|
+
import { ConversationOverviewDrawerProvider as v } from "../components/features/conversation/conversation-overview-drawer-context.js";
|
|
19
|
+
import { ConversationMain as y } from "../components/features/conversation/conversation-main/conversation-main.js";
|
|
20
|
+
import { ConversationMobilePanelPage as b } from "../components/features/conversation/conversation-main/conversation-mobile-panel-page.js";
|
|
21
|
+
import { WebSocketProviderWrapper as x } from "../contexts/websocket-provider-wrapper.js";
|
|
22
|
+
import S from "react";
|
|
23
|
+
import { jsx as C } from "react/jsx-runtime";
|
|
24
|
+
import { useLocation as w, useMatch as T, useNavigate as E } from "react-router";
|
|
24
25
|
//#region src/routes/conversation.tsx
|
|
25
|
-
function
|
|
26
|
-
let { t:
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
function D() {
|
|
27
|
+
let { t: D } = e("openhands"), { conversationId: O } = r(), k = T("/conversations/:conversationId/panel"), { isTask: A, taskStatus: j, taskDetail: M } = g(), N = l(), P = S.useRef(N.backend.id), F = S.useRef(N.orgId), I = P.current !== N.backend.id || F.current !== N.orgId, { data: L, isFetched: R } = m(), { data: z } = _(), { resetConversationState: B } = a(), V = E(), H = w(), U = i((e) => e.clearTerminal), W = s((e) => e.reset), G = o((e) => e.setCurrentAgentState), K = f((e) => e.removeErrorMessage);
|
|
28
|
+
S.useEffect(() => {
|
|
29
|
+
U(), B(), W(), G(n.LOADING), K();
|
|
29
30
|
}, [
|
|
30
|
-
|
|
31
|
-
H,
|
|
32
|
-
z,
|
|
31
|
+
O,
|
|
33
32
|
U,
|
|
33
|
+
B,
|
|
34
34
|
W,
|
|
35
|
-
G
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
35
|
+
G,
|
|
36
|
+
K
|
|
37
|
+
]), S.useEffect(() => {
|
|
38
|
+
if (A && j === "ERROR") {
|
|
39
|
+
c(M || D(t.CONVERSATION$FAILED_TO_START_FROM_TASK));
|
|
40
|
+
let e = H.state?.resumedFromConversationId;
|
|
41
|
+
V(e ? `/conversations/${e}` : "/conversations", { replace: !0 });
|
|
41
42
|
}
|
|
42
43
|
}, [
|
|
43
|
-
k,
|
|
44
44
|
A,
|
|
45
45
|
j,
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
V
|
|
49
|
-
|
|
50
|
-
|
|
46
|
+
M,
|
|
47
|
+
D,
|
|
48
|
+
V,
|
|
49
|
+
H.state
|
|
50
|
+
]), S.useEffect(() => {
|
|
51
|
+
!R || !z || I || L || (u(N.backend.id, N.orgId), c(D(t.CONVERSATION$NOT_EXIST_OR_NO_PERMISSION)), V("/conversations"));
|
|
51
52
|
}, [
|
|
52
|
-
I,
|
|
53
53
|
L,
|
|
54
54
|
R,
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
F,
|
|
58
|
-
M.backend.id,
|
|
59
|
-
M.orgId
|
|
60
|
-
]), x.useEffect(() => {
|
|
61
|
-
F || D && (D.startsWith("task-") || d(M.backend.id, M.orgId, D));
|
|
62
|
-
}, [
|
|
55
|
+
z,
|
|
56
|
+
V,
|
|
63
57
|
D,
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
58
|
+
I,
|
|
59
|
+
N.backend.id,
|
|
60
|
+
N.orgId
|
|
61
|
+
]), S.useEffect(() => {
|
|
62
|
+
I || O && (O.startsWith("task-") || d(N.backend.id, N.orgId, O));
|
|
63
|
+
}, [
|
|
64
|
+
O,
|
|
65
|
+
I,
|
|
66
|
+
N.backend.id,
|
|
67
|
+
N.orgId
|
|
67
68
|
]);
|
|
68
|
-
let
|
|
69
|
-
return
|
|
70
|
-
!
|
|
71
|
-
c(
|
|
69
|
+
let q = S.useRef(null);
|
|
70
|
+
return S.useEffect(() => {
|
|
71
|
+
!R || !L || N.backend.kind === "cloud" && L.sandbox_status === "PAUSED" && L.sandbox_id && q.current !== L.id && (q.current = L.id, p(L.sandbox_id).catch(() => {
|
|
72
|
+
c(D(t.CONVERSATION$FAILED_TO_START_FROM_TASK));
|
|
72
73
|
}));
|
|
73
74
|
}, [
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
]),
|
|
81
|
-
conversationId:
|
|
82
|
-
children: /* @__PURE__ */
|
|
75
|
+
R,
|
|
76
|
+
L?.id,
|
|
77
|
+
L?.sandbox_status,
|
|
78
|
+
L?.sandbox_id,
|
|
79
|
+
N.backend.kind,
|
|
80
|
+
D
|
|
81
|
+
]), I ? null : /* @__PURE__ */ C(x, {
|
|
82
|
+
conversationId: O,
|
|
83
|
+
children: /* @__PURE__ */ C(h, { children: /* @__PURE__ */ C(v, { children: /* @__PURE__ */ C("div", {
|
|
83
84
|
"data-testid": "app-route",
|
|
84
85
|
className: "flex h-full flex-col",
|
|
85
|
-
children:
|
|
86
|
-
}) })
|
|
86
|
+
children: k ? /* @__PURE__ */ C(b, { onNavigateBack: () => V(`/conversations/${O}`) }) : /* @__PURE__ */ C(y, {})
|
|
87
|
+
}) }) })
|
|
87
88
|
});
|
|
88
89
|
}
|
|
89
|
-
function
|
|
90
|
-
return /* @__PURE__ */
|
|
90
|
+
function O() {
|
|
91
|
+
return /* @__PURE__ */ C(D, {});
|
|
91
92
|
}
|
|
92
93
|
//#endregion
|
|
93
|
-
export {
|
|
94
|
+
export { O as default };
|
|
94
95
|
|
|
95
96
|
//# sourceMappingURL=conversation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversation.js","names":[],"sources":["../../src/routes/conversation.tsx"],"sourcesContent":["import React from \"react\";\nimport { useNavigate, useLocation, useMatch } from \"react-router\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { useConversationId } from \"#/hooks/use-conversation-id\";\nimport { useCommandStore } from \"#/stores/command-store\";\nimport { useConversationStore } from \"#/stores/conversation-store\";\nimport { useAgentStore } from \"#/stores/agent-store\";\nimport { useConversationStateStore } from \"#/stores/conversation-state-store\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport {\n clearLastConversationId,\n setLastConversationId,\n} from \"#/api/backend-registry/last-conversation-store\";\nimport { AgentState } from \"#/types/agent-state\";\n\nimport { EventHandler } from \"../wrapper/event-handler\";\n\nimport { useActiveConversation } from \"#/hooks/query/use-active-conversation\";\nimport { useTaskPollingController } from \"#/hooks/query/use-task-polling\";\n\nimport { displayErrorToast } from \"#/utils/custom-toast-handlers\";\nimport { useIsAuthed } from \"#/hooks/query/use-is-authed\";\nimport { ConversationMain } from \"#/components/features/conversation/conversation-main/conversation-main\";\nimport { ConversationMobilePanelPage } from \"#/components/features/conversation/conversation-main/conversation-mobile-panel-page\";\n\nimport { WebSocketProviderWrapper } from \"#/contexts/websocket-provider-wrapper\";\nimport { useErrorMessageStore } from \"#/stores/error-message-store\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { resumeCloudSandbox } from \"#/api/cloud/conversation-service.api\";\n\nfunction AppContent() {\n const { t } = useTranslation(\"openhands\");\n const { conversationId } = useConversationId();\n const panelViewMatch = useMatch(\"/conversations/:conversationId/panel\");\n\n const { isTask, taskStatus, taskDetail } = useTaskPollingController();\n\n // The conversationId in the URL belongs to whichever backend was\n // active when the route first mounted. If the user switches backends\n // while this route is still mounted, the id is meaningless under the\n // new backend — disable the active-conversation fetch (and its 404\n // toast) so we don't fire a request that the BackendSelector's\n // redirect will immediately navigate away from anyway. Mirrors the\n // same guard in `routes/automation-detail.tsx`.\n const active = useActiveBackend();\n const mountedBackendId = React.useRef(active.backend.id);\n const mountedOrgId = React.useRef(active.orgId);\n const backendChanged =\n mountedBackendId.current !== active.backend.id ||\n mountedOrgId.current !== active.orgId;\n\n const { data: conversation, isFetched } = useActiveConversation();\n const { data: isAuthed } = useIsAuthed();\n const { resetConversationState } = useConversationStore();\n const navigate = useNavigate();\n const location = useLocation();\n const clearTerminal = useCommandStore((state) => state.clearTerminal);\n const resetConversationRuntimeState = useConversationStateStore(\n (state) => state.reset,\n );\n const setCurrentAgentState = useAgentStore(\n (state) => state.setCurrentAgentState,\n );\n const removeErrorMessage = useErrorMessageStore(\n (state) => state.removeErrorMessage,\n );\n\n // Per-conversation UI/runtime resets. The event store is cleared separately,\n // inside ConversationWebSocketProvider, so the clear is ordered *before* the\n // preloaded-history re-seed (see the note there) — clearing it here would run\n // too late and wipe the freshly seeded history on a conversation switch.\n React.useEffect(() => {\n clearTerminal();\n resetConversationState();\n resetConversationRuntimeState();\n setCurrentAgentState(AgentState.LOADING);\n removeErrorMessage();\n }, [\n conversationId,\n clearTerminal,\n resetConversationState,\n resetConversationRuntimeState,\n setCurrentAgentState,\n removeErrorMessage,\n ]);\n\n React.useEffect(() => {\n if (isTask && taskStatus === \"ERROR\") {\n displayErrorToast(\n taskDetail || t(I18nKey.CONVERSATION$FAILED_TO_START_FROM_TASK),\n );\n // Navigate back to the original conversation when a resume task fails so\n // the user isn't stranded at the dead task-{id} URL. The resume effect's\n // ref prevents it from immediately retrying once we land there.\n const resumedFrom = (location.state as Record<string, unknown> | null)\n ?.resumedFromConversationId as string | undefined;\n navigate(\n resumedFrom ? `/conversations/${resumedFrom}` : \"/conversations\",\n { replace: true },\n );\n }\n }, [isTask, taskStatus, taskDetail, t, navigate, location.state]);\n\n React.useEffect(() => {\n if (!isFetched || !isAuthed) return;\n // The BackendSelector is in the middle of redirecting us away from\n // this route — don't toast/navigate based on a 404 that's just\n // \"this id doesn't exist on the new backend\".\n if (backendChanged) return;\n\n if (!conversation) {\n // Clear the per-backend \"last selected\" slot so the next switch\n // to this backend doesn't try to revisit a stale id.\n clearLastConversationId(active.backend.id, active.orgId);\n displayErrorToast(t(I18nKey.CONVERSATION$NOT_EXIST_OR_NO_PERMISSION));\n navigate(\"/conversations\");\n }\n }, [\n conversation,\n isFetched,\n isAuthed,\n navigate,\n t,\n backendChanged,\n active.backend.id,\n active.orgId,\n ]);\n\n // Remember the most recently selected conversation for the current\n // (backend, org) so flipping back to this backend later restores the\n // user to where they left off. Skip while a backend switch is in\n // flight: the id in the URL is from the previous backend and would\n // otherwise overwrite the new backend's memory.\n React.useEffect(() => {\n if (backendChanged) return;\n if (!conversationId) return;\n if (conversationId.startsWith(\"task-\")) return;\n setLastConversationId(active.backend.id, active.orgId, conversationId);\n }, [conversationId, backendChanged, active.backend.id, active.orgId]);\n\n // Cloud conversation resume: mirrors OpenHands' useSandboxRecovery.\n //\n // When the cloud API reports sandbox_status === \"PAUSED\" the sandbox is\n // sleeping. The correct wake-up call is POST /api/v1/sandboxes/{id}/resume\n // (a lightweight unpause). The previous approach — creating a new start task\n // via POST /api/v1/app-conversations — was wrong: it tries to provision a\n // fresh conversation in the sandbox and is subject to a 120-second cold-start\n // timeout that can fail. The resume endpoint simply unpauses the existing one.\n //\n // After calling resume we stay on the current URL. The 3-second refetch\n // interval in useActiveConversation (active while conversation_url is null)\n // polls until conversation_url populates, then the WebSocket connects.\n //\n // A ref guards against duplicate triggers per unique conversation.id within\n // the same route-mount lifetime.\n const resumeTriggeredForRef = React.useRef<string | null>(null);\n React.useEffect(() => {\n if (!isFetched || !conversation) return;\n if (active.backend.kind !== \"cloud\") return;\n if (conversation.sandbox_status !== \"PAUSED\") return; // only resume PAUSED sandboxes\n if (!conversation.sandbox_id) return; // no sandbox to resume\n if (resumeTriggeredForRef.current === conversation.id) return; // already sent\n\n resumeTriggeredForRef.current = conversation.id;\n\n resumeCloudSandbox(conversation.sandbox_id).catch(() => {\n displayErrorToast(t(I18nKey.CONVERSATION$FAILED_TO_START_FROM_TASK));\n });\n }, [\n isFetched,\n conversation?.id,\n conversation?.sandbox_status,\n conversation?.sandbox_id,\n active.backend.kind,\n t,\n ]);\n\n // A backend switch is in flight (BackendSelector flips the active backend\n // and redirects to /conversations on the next tick). The conversationId in\n // the URL belongs to the *previous* backend, so unmount the whole\n // conversation subtree now — before any per-conversation query (history,\n // metrics, sub-conversations, runtime info, …) re-fires against a backend\n // the id is foreign to. Those foreign fetches fail response validation and\n // surface \"agent server returned data this UI does not understand\". This is\n // deterministic regardless of the navigate-vs-setActive render race: React\n // re-renders this parent before its children, so returning null removes them\n // before they can issue the request.\n if (backendChanged) {\n return null;\n }\n\n const content = (\n <EventHandler>\n <div data-testid=\"app-route\" className=\"flex h-full flex-col\">\n {panelViewMatch ? (\n <ConversationMobilePanelPage\n onNavigateBack={() => navigate(`/conversations/${conversationId}`)}\n />\n ) : (\n <ConversationMain />\n )}\n </div>\n </EventHandler>\n );\n\n return (\n <WebSocketProviderWrapper conversationId={conversationId}>\n {content}\n </WebSocketProviderWrapper>\n );\n}\n\nexport function ConversationView() {\n return <AppContent />;\n}\n\nexport default ConversationView;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AA+BA,SAAS,IAAa;CACpB,IAAM,EAAE,SAAM,EAAe,WAAW,GAClC,EAAE,sBAAmB,EAAkB,GACvC,IAAiB,EAAS,sCAAsC,GAEhE,EAAE,WAAQ,eAAY,kBAAe,EAAyB,GAS9D,IAAS,EAAiB,GAC1B,IAAmB,EAAM,OAAO,EAAO,QAAQ,EAAE,GACjD,IAAe,EAAM,OAAO,EAAO,KAAK,GACxC,IACJ,EAAiB,YAAY,EAAO,QAAQ,MAC5C,EAAa,YAAY,EAAO,OAE5B,EAAE,MAAM,GAAc,iBAAc,EAAsB,GAC1D,EAAE,MAAM,MAAa,EAAY,GACjC,EAAE,8BAA2B,EAAqB,GAClD,IAAW,EAAY,GACvB,IAAW,EAAY,GACvB,IAAgB,GAAiB,MAAU,EAAM,aAAa,GAC9D,IAAgC,GACnC,MAAU,EAAM,KACnB,GACM,IAAuB,GAC1B,MAAU,EAAM,oBACnB,GACM,IAAqB,GACxB,MAAU,EAAM,kBACnB;CAoEA,AA9DA,EAAM,gBAAgB;EAKpB,AAJA,EAAc,GACd,EAAuB,GACvB,EAA8B,GAC9B,EAAqB,EAAW,OAAO,GACvC,EAAmB;CACrB,GAAG;EACD;EACA;EACA;EACA;EACA;EACA;CACF,CAAC,GAED,EAAM,gBAAgB;EACpB,IAAI,KAAU,MAAe,SAAS;GACpC,EACE,KAAc,EAAE,EAAQ,sCAAsC,CAChE;GAIA,IAAM,IAAe,EAAS,OAC1B;GACJ,EACE,IAAc,kBAAkB,MAAgB,kBAChD,EAAE,SAAS,GAAK,CAClB;EACF;CACF,GAAG;EAAC;EAAQ;EAAY;EAAY;EAAG;EAAU,EAAS;CAAK,CAAC,GAEhE,EAAM,gBAAgB;EAChB,CAAC,KAAa,CAAC,KAIf,KAEC,MAGH,EAAwB,EAAO,QAAQ,IAAI,EAAO,KAAK,GACvD,EAAkB,EAAE,EAAQ,uCAAuC,CAAC,GACpE,EAAS,gBAAgB;CAE7B,GAAG;EACD;EACA;EACA;EACA;EACA;EACA;EACA,EAAO,QAAQ;EACf,EAAO;CACT,CAAC,GAOD,EAAM,gBAAgB;EAChB,KACC,MACD,EAAe,WAAW,OAAO,KACrC,EAAsB,EAAO,QAAQ,IAAI,EAAO,OAAO,CAAc;CACvE,GAAG;EAAC;EAAgB;EAAgB,EAAO,QAAQ;EAAI,EAAO;CAAK,CAAC;CAiBpE,IAAM,IAAwB,EAAM,OAAsB,IAAI;CAkD9D,OAjDA,EAAM,gBAAgB;EAChB,CAAC,KAAa,CAAC,KACf,EAAO,QAAQ,SAAS,WACxB,EAAa,mBAAmB,YAC/B,EAAa,cACd,EAAsB,YAAY,EAAa,OAEnD,EAAsB,UAAU,EAAa,IAE7C,EAAmB,EAAa,UAAU,EAAE,YAAY;GACtD,EAAkB,EAAE,EAAQ,sCAAsC,CAAC;EACrE,CAAC;CACH,GAAG;EACD;EACA,GAAc;EACd,GAAc;EACd,GAAc;EACd,EAAO,QAAQ;EACf;CACF,CAAC,GAYG,IACK,OAkBP,kBAAC,GAAD;EAA0C;YAd1C,kBAAC,GAAD,EAAA,UACE,kBAAC,OAAD;GAAK,eAAY;GAAY,WAAU;aACpC,IACC,kBAAC,GAAD,EACE,sBAAsB,EAAS,kBAAkB,GAAgB,EAClE,CAAA,IAED,kBAAC,GAAD,CAAmB,CAAA;EAElB,CAAA,EACO,CAKX;CACuB,CAAA;AAE9B;AAEA,SAAgB,IAAmB;CACjC,OAAO,kBAAC,GAAD,CAAa,CAAA;AACtB"}
|
|
1
|
+
{"version":3,"file":"conversation.js","names":[],"sources":["../../src/routes/conversation.tsx"],"sourcesContent":["import React from \"react\";\nimport { useNavigate, useLocation, useMatch } from \"react-router\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { useConversationId } from \"#/hooks/use-conversation-id\";\nimport { useCommandStore } from \"#/stores/command-store\";\nimport { useConversationStore } from \"#/stores/conversation-store\";\nimport { useAgentStore } from \"#/stores/agent-store\";\nimport { useConversationStateStore } from \"#/stores/conversation-state-store\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport {\n clearLastConversationId,\n setLastConversationId,\n} from \"#/api/backend-registry/last-conversation-store\";\nimport { AgentState } from \"#/types/agent-state\";\n\nimport { EventHandler } from \"../wrapper/event-handler\";\n\nimport { useActiveConversation } from \"#/hooks/query/use-active-conversation\";\nimport { useTaskPollingController } from \"#/hooks/query/use-task-polling\";\n\nimport { displayErrorToast } from \"#/utils/custom-toast-handlers\";\nimport { useIsAuthed } from \"#/hooks/query/use-is-authed\";\nimport { ConversationMain } from \"#/components/features/conversation/conversation-main/conversation-main\";\nimport { ConversationMobilePanelPage } from \"#/components/features/conversation/conversation-main/conversation-mobile-panel-page\";\nimport { ConversationOverviewDrawerProvider } from \"#/components/features/conversation/conversation-overview-drawer-context\";\n\nimport { WebSocketProviderWrapper } from \"#/contexts/websocket-provider-wrapper\";\nimport { useErrorMessageStore } from \"#/stores/error-message-store\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { resumeCloudSandbox } from \"#/api/cloud/conversation-service.api\";\n\nfunction AppContent() {\n const { t } = useTranslation(\"openhands\");\n const { conversationId } = useConversationId();\n const panelViewMatch = useMatch(\"/conversations/:conversationId/panel\");\n\n const { isTask, taskStatus, taskDetail } = useTaskPollingController();\n\n // The conversationId in the URL belongs to whichever backend was\n // active when the route first mounted. If the user switches backends\n // while this route is still mounted, the id is meaningless under the\n // new backend — disable the active-conversation fetch (and its 404\n // toast) so we don't fire a request that the BackendSelector's\n // redirect will immediately navigate away from anyway. Mirrors the\n // same guard in `routes/automation-detail.tsx`.\n const active = useActiveBackend();\n const mountedBackendId = React.useRef(active.backend.id);\n const mountedOrgId = React.useRef(active.orgId);\n const backendChanged =\n mountedBackendId.current !== active.backend.id ||\n mountedOrgId.current !== active.orgId;\n\n const { data: conversation, isFetched } = useActiveConversation();\n const { data: isAuthed } = useIsAuthed();\n const { resetConversationState } = useConversationStore();\n const navigate = useNavigate();\n const location = useLocation();\n const clearTerminal = useCommandStore((state) => state.clearTerminal);\n const resetConversationRuntimeState = useConversationStateStore(\n (state) => state.reset,\n );\n const setCurrentAgentState = useAgentStore(\n (state) => state.setCurrentAgentState,\n );\n const removeErrorMessage = useErrorMessageStore(\n (state) => state.removeErrorMessage,\n );\n\n // Per-conversation UI/runtime resets. The event store is cleared separately,\n // inside ConversationWebSocketProvider, so the clear is ordered *before* the\n // preloaded-history re-seed (see the note there) — clearing it here would run\n // too late and wipe the freshly seeded history on a conversation switch.\n React.useEffect(() => {\n clearTerminal();\n resetConversationState();\n resetConversationRuntimeState();\n setCurrentAgentState(AgentState.LOADING);\n removeErrorMessage();\n }, [\n conversationId,\n clearTerminal,\n resetConversationState,\n resetConversationRuntimeState,\n setCurrentAgentState,\n removeErrorMessage,\n ]);\n\n React.useEffect(() => {\n if (isTask && taskStatus === \"ERROR\") {\n displayErrorToast(\n taskDetail || t(I18nKey.CONVERSATION$FAILED_TO_START_FROM_TASK),\n );\n // Navigate back to the original conversation when a resume task fails so\n // the user isn't stranded at the dead task-{id} URL. The resume effect's\n // ref prevents it from immediately retrying once we land there.\n const resumedFrom = (location.state as Record<string, unknown> | null)\n ?.resumedFromConversationId as string | undefined;\n navigate(\n resumedFrom ? `/conversations/${resumedFrom}` : \"/conversations\",\n { replace: true },\n );\n }\n }, [isTask, taskStatus, taskDetail, t, navigate, location.state]);\n\n React.useEffect(() => {\n if (!isFetched || !isAuthed) return;\n // The BackendSelector is in the middle of redirecting us away from\n // this route — don't toast/navigate based on a 404 that's just\n // \"this id doesn't exist on the new backend\".\n if (backendChanged) return;\n\n if (!conversation) {\n // Clear the per-backend \"last selected\" slot so the next switch\n // to this backend doesn't try to revisit a stale id.\n clearLastConversationId(active.backend.id, active.orgId);\n displayErrorToast(t(I18nKey.CONVERSATION$NOT_EXIST_OR_NO_PERMISSION));\n navigate(\"/conversations\");\n }\n }, [\n conversation,\n isFetched,\n isAuthed,\n navigate,\n t,\n backendChanged,\n active.backend.id,\n active.orgId,\n ]);\n\n // Remember the most recently selected conversation for the current\n // (backend, org) so flipping back to this backend later restores the\n // user to where they left off. Skip while a backend switch is in\n // flight: the id in the URL is from the previous backend and would\n // otherwise overwrite the new backend's memory.\n React.useEffect(() => {\n if (backendChanged) return;\n if (!conversationId) return;\n if (conversationId.startsWith(\"task-\")) return;\n setLastConversationId(active.backend.id, active.orgId, conversationId);\n }, [conversationId, backendChanged, active.backend.id, active.orgId]);\n\n // Cloud conversation resume: mirrors OpenHands' useSandboxRecovery.\n //\n // When the cloud API reports sandbox_status === \"PAUSED\" the sandbox is\n // sleeping. The correct wake-up call is POST /api/v1/sandboxes/{id}/resume\n // (a lightweight unpause). The previous approach — creating a new start task\n // via POST /api/v1/app-conversations — was wrong: it tries to provision a\n // fresh conversation in the sandbox and is subject to a 120-second cold-start\n // timeout that can fail. The resume endpoint simply unpauses the existing one.\n //\n // After calling resume we stay on the current URL. The 3-second refetch\n // interval in useActiveConversation (active while conversation_url is null)\n // polls until conversation_url populates, then the WebSocket connects.\n //\n // A ref guards against duplicate triggers per unique conversation.id within\n // the same route-mount lifetime.\n const resumeTriggeredForRef = React.useRef<string | null>(null);\n React.useEffect(() => {\n if (!isFetched || !conversation) return;\n if (active.backend.kind !== \"cloud\") return;\n if (conversation.sandbox_status !== \"PAUSED\") return; // only resume PAUSED sandboxes\n if (!conversation.sandbox_id) return; // no sandbox to resume\n if (resumeTriggeredForRef.current === conversation.id) return; // already sent\n\n resumeTriggeredForRef.current = conversation.id;\n\n resumeCloudSandbox(conversation.sandbox_id).catch(() => {\n displayErrorToast(t(I18nKey.CONVERSATION$FAILED_TO_START_FROM_TASK));\n });\n }, [\n isFetched,\n conversation?.id,\n conversation?.sandbox_status,\n conversation?.sandbox_id,\n active.backend.kind,\n t,\n ]);\n\n // A backend switch is in flight (BackendSelector flips the active backend\n // and redirects to /conversations on the next tick). The conversationId in\n // the URL belongs to the *previous* backend, so unmount the whole\n // conversation subtree now — before any per-conversation query (history,\n // metrics, sub-conversations, runtime info, …) re-fires against a backend\n // the id is foreign to. Those foreign fetches fail response validation and\n // surface \"agent server returned data this UI does not understand\". This is\n // deterministic regardless of the navigate-vs-setActive render race: React\n // re-renders this parent before its children, so returning null removes them\n // before they can issue the request.\n if (backendChanged) {\n return null;\n }\n\n const content = (\n <EventHandler>\n <ConversationOverviewDrawerProvider>\n <div data-testid=\"app-route\" className=\"flex h-full flex-col\">\n {panelViewMatch ? (\n <ConversationMobilePanelPage\n onNavigateBack={() =>\n navigate(`/conversations/${conversationId}`)\n }\n />\n ) : (\n <ConversationMain />\n )}\n </div>\n </ConversationOverviewDrawerProvider>\n </EventHandler>\n );\n\n return (\n <WebSocketProviderWrapper conversationId={conversationId}>\n {content}\n </WebSocketProviderWrapper>\n );\n}\n\nexport function ConversationView() {\n return <AppContent />;\n}\n\nexport default ConversationView;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAgCA,SAAS,IAAa;CACpB,IAAM,EAAE,SAAM,EAAe,WAAW,GAClC,EAAE,sBAAmB,EAAkB,GACvC,IAAiB,EAAS,sCAAsC,GAEhE,EAAE,WAAQ,eAAY,kBAAe,EAAyB,GAS9D,IAAS,EAAiB,GAC1B,IAAmB,EAAM,OAAO,EAAO,QAAQ,EAAE,GACjD,IAAe,EAAM,OAAO,EAAO,KAAK,GACxC,IACJ,EAAiB,YAAY,EAAO,QAAQ,MAC5C,EAAa,YAAY,EAAO,OAE5B,EAAE,MAAM,GAAc,iBAAc,EAAsB,GAC1D,EAAE,MAAM,MAAa,EAAY,GACjC,EAAE,8BAA2B,EAAqB,GAClD,IAAW,EAAY,GACvB,IAAW,EAAY,GACvB,IAAgB,GAAiB,MAAU,EAAM,aAAa,GAC9D,IAAgC,GACnC,MAAU,EAAM,KACnB,GACM,IAAuB,GAC1B,MAAU,EAAM,oBACnB,GACM,IAAqB,GACxB,MAAU,EAAM,kBACnB;CAoEA,AA9DA,EAAM,gBAAgB;EAKpB,AAJA,EAAc,GACd,EAAuB,GACvB,EAA8B,GAC9B,EAAqB,EAAW,OAAO,GACvC,EAAmB;CACrB,GAAG;EACD;EACA;EACA;EACA;EACA;EACA;CACF,CAAC,GAED,EAAM,gBAAgB;EACpB,IAAI,KAAU,MAAe,SAAS;GACpC,EACE,KAAc,EAAE,EAAQ,sCAAsC,CAChE;GAIA,IAAM,IAAe,EAAS,OAC1B;GACJ,EACE,IAAc,kBAAkB,MAAgB,kBAChD,EAAE,SAAS,GAAK,CAClB;EACF;CACF,GAAG;EAAC;EAAQ;EAAY;EAAY;EAAG;EAAU,EAAS;CAAK,CAAC,GAEhE,EAAM,gBAAgB;EAChB,CAAC,KAAa,CAAC,KAIf,KAEC,MAGH,EAAwB,EAAO,QAAQ,IAAI,EAAO,KAAK,GACvD,EAAkB,EAAE,EAAQ,uCAAuC,CAAC,GACpE,EAAS,gBAAgB;CAE7B,GAAG;EACD;EACA;EACA;EACA;EACA;EACA;EACA,EAAO,QAAQ;EACf,EAAO;CACT,CAAC,GAOD,EAAM,gBAAgB;EAChB,KACC,MACD,EAAe,WAAW,OAAO,KACrC,EAAsB,EAAO,QAAQ,IAAI,EAAO,OAAO,CAAc;CACvE,GAAG;EAAC;EAAgB;EAAgB,EAAO,QAAQ;EAAI,EAAO;CAAK,CAAC;CAiBpE,IAAM,IAAwB,EAAM,OAAsB,IAAI;CAsD9D,OArDA,EAAM,gBAAgB;EAChB,CAAC,KAAa,CAAC,KACf,EAAO,QAAQ,SAAS,WACxB,EAAa,mBAAmB,YAC/B,EAAa,cACd,EAAsB,YAAY,EAAa,OAEnD,EAAsB,UAAU,EAAa,IAE7C,EAAmB,EAAa,UAAU,EAAE,YAAY;GACtD,EAAkB,EAAE,EAAQ,sCAAsC,CAAC;EACrE,CAAC;CACH,GAAG;EACD;EACA,GAAc;EACd,GAAc;EACd,GAAc;EACd,EAAO,QAAQ;EACf;CACF,CAAC,GAYG,IACK,OAsBP,kBAAC,GAAD;EAA0C;YAlB1C,kBAAC,GAAD,EAAA,UACE,kBAAC,GAAD,EAAA,UACE,kBAAC,OAAD;GAAK,eAAY;GAAY,WAAU;aACpC,IACC,kBAAC,GAAD,EACE,sBACE,EAAS,kBAAkB,GAAgB,EAE9C,CAAA,IAED,kBAAC,GAAD,CAAmB,CAAA;EAElB,CAAA,EAC6B,CAAA,EACxB,CAKX;CACuB,CAAA;AAE9B;AAEA,SAAgB,IAAmB;CACjC,OAAO,kBAAC,GAAD,CAAa,CAAA;AACtB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require("../_virtual/_rolldown/runtime.cjs");const e=require("../node_modules/react-i18next/dist/es/useTranslation.cjs"),t=require("../i18n/declaration.cjs"),ee=require("../hooks/use-conversation-id.cjs"),
|
|
1
|
+
require("../_virtual/_rolldown/runtime.cjs");const e=require("../node_modules/react-i18next/dist/es/useTranslation.cjs"),t=require("../i18n/declaration.cjs"),ee=require("../hooks/use-conversation-id.cjs"),n=require("../utils/conversation-local-storage.cjs"),r=require("../node_modules/@tanstack/react-query/build/modern/QueryClientProvider.cjs"),i=require("../stores/files-tab-store.cjs"),a=require("../hooks/query/use-active-conversation.cjs"),o=require("../icons/link-external.cjs"),s=require("../components/ui/resize-handle.cjs"),c=require("../hooks/use-resizable-drawer-width.cjs"),l=require("../components/features/files-tab/segmented-toggle.cjs"),u=require("../components/features/files-tab/no-file-selected-message.cjs"),d=require("../hooks/query/use-workspace-files.cjs"),f=require("../stores/use-workspace-mutation-counter.cjs"),p=require("../hooks/query/use-workspace-file-content.cjs"),m=require("../hooks/use-auto-refresh-files-on-edit.cjs"),h=require("../components/features/files-tab/file-quick-row.cjs"),g=require("../components/features/files-tab/file-tree-view.cjs"),_=require("../components/features/files-tab/file-content-viewer.cjs"),v=require("../components/features/files-tab/workspace-path.cjs"),y=require("../components/features/files-tab/files-tab-tree.constants.cjs"),b=require("../icons/u-refresh.cjs");let x=require("react"),S=require("react/jsx-runtime");function C(){let{t:C}=e.useTranslation(`openhands`);m.useAutoRefreshFilesOnEdit();let{data:w}=a.useActiveConversation(),T=w?.workspace?.working_dir,{conversationId:E}=ee.useOptionalConversationId(),{state:D,setFilesTabContentViewMode:O,setFilesTabTreeVisible:k}=n.useConversationLocalStorageState(E??``),A=D.filesTabContentViewMode,j=D.filesTabTreeVisible??!0,M=(0,x.useCallback)(()=>{k?.(!j)},[j,k]),N=(0,x.useRef)(null),{drawerWidth:P,isDragging:F,handleMouseDown:I}=c.useResizableDrawerWidth({containerRef:N,defaultWidth:224,minWidth:160,maxWidth:480,storageKey:y.FILES_TAB_TREE_WIDTH_STORAGE_KEY,enabled:j,edge:`left`}),L=d.useWorkspaceFiles(),R=(0,x.useMemo)(()=>L.data??[],[L.data]),z=i.useFilesTabStore(e=>e.selectedPath),B=i.useFilesTabStore(e=>e.selectedConversationId),V=i.useFilesTabStore(e=>e.openPaths),H=i.useFilesTabStore(e=>e.setSelectedPath),U=i.useFilesTabStore(e=>e.closeOpenPath),W=i.useFilesTabStore(e=>e.hydrateForConversation),G=B===E?z:null,K=B===E?V:[],q=(0,x.useCallback)(e=>H(e,E),[E,H]),J=p.useWorkspaceFileContent(G),Y=f.useWorkspaceMutationCounter(e=>e.count),X=f.withWorkspaceCacheBuster(J.data?.staticUrl??null,Y);(0,x.useEffect)(()=>{if(!E||B===E)return;let e=n.getConversationState(E);W(E,e.filesTabOpenPaths??[],e.filesTabSelectedPath??null)},[E,B,W]);let Z=r.useQueryClient(),[Q,$]=(0,x.useState)(!1),te=(0,S.jsx)(`button`,{type:`button`,onClick:async()=>{$(!0);try{await Promise.all([Z.invalidateQueries({queryKey:[`workspace-files`]}),Z.invalidateQueries({queryKey:[`workspace-file-content`]})])}finally{$(!1)}},disabled:Q,"aria-label":C(t.I18nKey.FILES$REFRESH),title:C(t.I18nKey.FILES$REFRESH),"data-testid":`files-tab-refresh`,className:`flex items-center justify-center w-[26px] py-1 rounded-[7px] hover:enabled:bg-[var(--oh-interactive-hover)] cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed`,children:(0,S.jsx)(b.default,{width:12.75,height:15,color:`#ffffff`,className:Q?`animate-spin`:``})});return(0,S.jsxs)(`main`,{className:`h-full w-full flex flex-col items-stretch`,"data-testid":`files-tab`,children:[(0,S.jsx)(v.WorkspacePath,{path:T}),L.isLoading?(0,S.jsx)(`div`,{className:`flex flex-1 items-center justify-center text-sm text-[var(--oh-muted)]`,children:C(t.I18nKey.FILES$LOADING_FILES)}):(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(h.FileQuickRow,{openPaths:K,selectedPath:G,onSelectFile:q,onCloseFile:U,isTreeVisible:j,onToggleTree:M,actions:te}),(0,S.jsxs)(`div`,{ref:N,className:`flex h-full min-h-0 flex-1`,children:[j&&(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(`aside`,{className:`shrink-0 border-r border-[var(--oh-border)] overflow-y-auto custom-scrollbar-always`,"data-testid":`files-tab-tree`,style:{width:`${P}px`},children:(0,S.jsx)(g.FileTreeView,{paths:R,selectedPath:G,onSelectFile:q})}),(0,S.jsx)(s.ResizeHandle,{testId:`files-tab-tree-resize-handle`,onMouseDown:I,isDragging:F})]}),(0,S.jsx)(`section`,{className:`flex h-full min-h-0 min-w-0 flex-1 flex-col`,"data-testid":`files-tab-content`,children:G?(0,S.jsxs)(S.Fragment,{children:[(0,S.jsxs)(`div`,{className:`flex items-center gap-3 px-3 py-1.5 border-b border-[var(--oh-border)]`,children:[(0,S.jsx)(l.SegmentedToggle,{ariaLabel:C(t.I18nKey.FILES$RICH),testId:`files-tab-content-mode-toggle`,value:A,options:[{value:`rich`,label:C(t.I18nKey.FILES$RICH)},{value:`plain`,label:C(t.I18nKey.FILES$PLAIN)}],onChange:O}),X?(0,S.jsx)(`a`,{href:X,target:`_blank`,rel:`noopener noreferrer`,"aria-label":C(t.I18nKey.FILES$OPEN_IN_NEW_WINDOW),title:C(t.I18nKey.FILES$OPEN_IN_NEW_WINDOW),"data-testid":`files-tab-open-in-new-window`,className:`ml-auto flex items-center justify-center w-[26px] py-1 rounded-[7px] hover:bg-[var(--oh-interactive-hover)] cursor-pointer text-white`,children:(0,S.jsx)(o.default,{width:14,height:14})}):null]}),(0,S.jsx)(_.FileContentViewer,{path:G,viewMode:A})]}):(0,S.jsx)(u.NoFileSelectedMessage,{})})]})]})]})}exports.default=C;
|
|
2
2
|
//# sourceMappingURL=files-tab.cjs.map
|