@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":"use-tracking.js","names":[],"sources":["../../src/hooks/use-tracking.ts"],"sourcesContent":["import React from \"react\";\nimport { Provider } from \"#/types/settings\";\nimport type { BackendKind } from \"#/api/backend-registry/types\";\nimport type { WorkspaceMode } from \"#/api/conversation-metadata-store\";\nimport type { CloudConnectionSource } from \"#/services/cloud-funnel-analytics\";\nimport { getCachedAgentServerVersion } from \"#/api/agent-server-compatibility\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport { useAutomationSdkVersion } from \"#/hooks/query/use-automation-sdk-version\";\nimport {\n type BackendConnectionMethod,\n getBackendTelemetryProperties,\n} from \"#/services/telemetry-context\";\nimport { setTelemetryBackendContext, trackEvent } from \"#/services/telemetry\";\n\n/**\n * Hook that provides tracking functions with automatic data collection\n * from available hooks (settings, etc.)\n *\n * All events require explicit user consent. The shared PostHog client enforces\n * the canonical consent configured by telemetry.ts; this hook must not gate on\n * backend settings because they can be stale while a backend changes.\n */\nexport const useTracking = () => {\n const { backend } = useActiveBackend();\n const automationSdkVersion = useAutomationSdkVersion();\n\n const getBackendTelemetryContext = React.useCallback(\n () => ({\n backendKind: backend.kind,\n agentServerVersion:\n backend.kind === \"local\"\n ? getCachedAgentServerVersion(backend.host)\n : null,\n automationSdkVersion: automationSdkVersion ?? null,\n }),\n [automationSdkVersion, backend.host, backend.kind],\n );\n\n React.useEffect(() => {\n setTelemetryBackendContext(getBackendTelemetryContext());\n }, [getBackendTelemetryContext]);\n\n // Common properties included in all tracking events\n const commonProperties = {\n current_url: window.location.href,\n };\n\n /**\n * PostHog enforces the canonical consent state configured by telemetry.ts.\n * Backend settings are not a capture gate because they can be stale while a\n * backend is being added or switched.\n */\n const track = (event: string, properties: Record<string, unknown> = {}) => {\n setTelemetryBackendContext(getBackendTelemetryContext());\n void trackEvent(event, { ...commonProperties, ...properties });\n };\n\n const trackLoginButtonClick = ({ provider }: { provider: Provider }) => {\n track(\"login_button_clicked\", { provider });\n };\n\n const trackConversationCreated = ({\n conversationId,\n taskId,\n hasRepository,\n gitProvider,\n hasWorkspace,\n workspaceMode,\n hasInitialQuery,\n agentType,\n hasParentConversation,\n entryPoint,\n }: {\n conversationId: string;\n taskId?: string;\n hasRepository: boolean;\n gitProvider?: Provider;\n hasWorkspace: boolean;\n workspaceMode?: WorkspaceMode;\n hasInitialQuery: boolean;\n agentType?: \"default\" | \"plan\";\n hasParentConversation: boolean;\n entryPoint?: string;\n }) => {\n track(\"conversation_start_requested\", {\n conversation_id: conversationId,\n task_id: taskId,\n is_start_task: conversationId.startsWith(\"task-\"),\n has_repository: hasRepository,\n git_provider: gitProvider,\n has_workspace: hasWorkspace,\n workspace_mode: workspaceMode,\n has_initial_query: hasInitialQuery,\n agent_type: agentType,\n has_parent_conversation: hasParentConversation,\n entry_point: entryPoint,\n });\n };\n\n const trackPushButtonClick = () => {\n track(\"push_button_clicked\");\n };\n\n const trackPullButtonClick = () => {\n track(\"pull_button_clicked\");\n };\n\n const trackCreatePrButtonClick = () => {\n track(\"create_pr_button_clicked\");\n };\n\n const trackUserSignupCompleted = () => {\n track(\"user_signup_completed\", {\n signup_timestamp: new Date().toISOString(),\n });\n };\n\n const trackPrebuiltAutomationEnabled = ({\n automationId,\n automationName,\n automationCategory,\n }: {\n automationId?: string;\n automationName: string;\n automationCategory?: string;\n }) => {\n track(\"prebuilt_automation_enabled\", {\n automation_id: automationId,\n automation_name: automationName,\n automation_category: automationCategory,\n });\n };\n\n /**\n * The setup funnel: opened → validated → created, or failed.\n *\n * A manifest declares no analytics of its own, so the stages are the same for\n * every entry and only the id it carries varies.\n */\n const trackAutomationSetupOpened = ({\n automationId,\n }: {\n automationId: string;\n }) => {\n track(\"automation_setup_opened\", { automation_id: automationId });\n };\n\n const trackAutomationSetupValidated = ({\n automationId,\n }: {\n automationId: string;\n }) => {\n track(\"automation_setup_validated\", { automation_id: automationId });\n };\n\n const trackAutomationSetupCreated = ({\n automationId,\n setupMode,\n }: {\n automationId: string;\n setupMode: string;\n }) => {\n track(\"automation_setup_created\", {\n automation_id: automationId,\n setup_mode: setupMode,\n });\n };\n\n const trackAutomationSetupFailed = ({\n automationId,\n setupMode,\n }: {\n automationId: string;\n setupMode: string;\n }) => {\n track(\"automation_setup_failed\", {\n automation_id: automationId,\n setup_mode: setupMode,\n });\n };\n\n const trackInitialQuerySubmitted = ({\n entryPoint,\n queryCharacterLength,\n replayJsonSize,\n }: {\n entryPoint: string;\n queryCharacterLength: number;\n replayJsonSize?: number;\n }) => {\n track(\"initial_query_submitted\", {\n entry_point: entryPoint,\n query_character_length: queryCharacterLength,\n replay_json_size: replayJsonSize,\n });\n };\n\n const trackUserMessageSent = ({\n sessionMessageCount,\n currentMessageLength,\n }: {\n sessionMessageCount: number;\n currentMessageLength: number;\n }) => {\n track(\"user_message_sent\", {\n session_message_count: sessionMessageCount,\n current_message_length: currentMessageLength,\n });\n };\n\n const trackDownloadVsCodeButtonClicked = () => {\n track(\"download_via_vscode_button_clicked\");\n };\n\n const trackSettingsSaved = ({\n llmModel,\n llmApiKeySet,\n searchApiKeySet,\n remoteRuntimeResourceFactor,\n }: {\n llmModel: unknown;\n llmApiKeySet: \"SET\" | \"UNSET\";\n searchApiKeySet: \"SET\" | \"UNSET\";\n remoteRuntimeResourceFactor?: unknown;\n }) => {\n track(\"settings_saved\", {\n LLM_MODEL: llmModel,\n LLM_API_KEY_SET: llmApiKeySet,\n SEARCH_API_KEY_SET: searchApiKeySet,\n REMOTE_RUNTIME_RESOURCE_FACTOR: remoteRuntimeResourceFactor,\n });\n };\n\n const trackMcpConfigUpdated = ({\n sseServersCount,\n stdioServersCount,\n }: {\n sseServersCount: number;\n stdioServersCount: number;\n }) => {\n track(\"mcp_config_updated\", {\n has_mcp_config: true,\n sse_servers_count: sseServersCount,\n stdio_servers_count: stdioServersCount,\n });\n };\n\n const trackDownloadTrajectoryButtonClicked = () => {\n track(\"download_trajectory_button_clicked\");\n };\n\n const trackConversationExported = (format: \"markdown\" | \"html\") => {\n track(\"conversation_exported\", { format });\n };\n\n const trackAutomationCreatedButton = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_created_button\", { backend_kind: backendKind });\n };\n\n const trackAutomationExecuted = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_executed\", { backend_kind: backendKind });\n };\n\n const trackAutomationDeleted = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_deleted\", { backend_kind: backendKind });\n };\n\n const trackAutomationDisableButton = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_disable_button\", { backend_kind: backendKind });\n };\n\n const trackAutomationEdited = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_edited\", { backend_kind: backendKind });\n };\n\n const trackAutomationExported = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_exported\", { backend_kind: backendKind });\n };\n\n const trackAutomationActivityLogExported = ({\n backendKind,\n format,\n }: {\n backendKind: BackendKind;\n format: \"json\" | \"csv\";\n }) => {\n track(\"automation_activity_log_exported\", {\n backend_kind: backendKind,\n format,\n });\n };\n\n const trackAutomationImported = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_imported\", { backend_kind: backendKind });\n };\n\n const trackBackendAdded = ({\n backendKind,\n connectionMethod,\n hasApiKey,\n source,\n agentServerVersion,\n backendVersion,\n }: {\n backendKind: BackendKind;\n connectionMethod: BackendConnectionMethod;\n hasApiKey: boolean;\n source?: CloudConnectionSource;\n agentServerVersion?: string | null;\n backendVersion?: string | null;\n }) => {\n track(\"backend_added\", {\n ...getBackendTelemetryProperties({\n backendKind,\n agentServerVersion,\n backendVersion,\n connectionMethod,\n }),\n has_api_key: hasApiKey,\n source,\n });\n };\n\n const trackOnboardingStarted = () => {\n track(\"onboarding_started\");\n };\n\n const trackOnboardingStepViewed = ({\n step,\n stepIndex,\n totalSteps,\n agent,\n }: {\n step: string;\n stepIndex: number;\n totalSteps: number;\n agent: string;\n }) => {\n track(\"onboarding_step_viewed\", {\n step,\n step_index: stepIndex,\n total_steps: totalSteps,\n agent,\n });\n };\n\n const trackOnboardingCompleted = ({ agent }: { agent: string }) => {\n track(\"onboarding_completed\", { agent });\n };\n\n const trackOnboardingSkipped = ({\n step,\n stepIndex,\n totalSteps,\n agent,\n }: {\n step: string;\n stepIndex: number;\n totalSteps: number;\n agent: string;\n }) => {\n track(\"onboarding_skipped\", {\n step,\n step_index: stepIndex,\n total_steps: totalSteps,\n agent,\n });\n };\n\n return {\n trackLoginButtonClick,\n trackConversationCreated,\n trackPushButtonClick,\n trackPullButtonClick,\n trackCreatePrButtonClick,\n trackUserSignupCompleted,\n trackPrebuiltAutomationEnabled,\n trackAutomationSetupOpened,\n trackAutomationSetupValidated,\n trackAutomationSetupCreated,\n trackAutomationSetupFailed,\n trackInitialQuerySubmitted,\n trackUserMessageSent,\n trackDownloadVsCodeButtonClicked,\n trackSettingsSaved,\n trackMcpConfigUpdated,\n trackDownloadTrajectoryButtonClicked,\n trackConversationExported,\n trackAutomationCreatedButton,\n trackAutomationExecuted,\n trackAutomationDeleted,\n trackAutomationDisableButton,\n trackAutomationEdited,\n trackAutomationExported,\n trackAutomationActivityLogExported,\n trackAutomationImported,\n trackBackendAdded,\n trackOnboardingStarted,\n trackOnboardingStepViewed,\n trackOnboardingCompleted,\n trackOnboardingSkipped,\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"use-tracking.js","names":[],"sources":["../../src/hooks/use-tracking.ts"],"sourcesContent":["import React from \"react\";\nimport { Provider } from \"#/types/settings\";\nimport type { BackendKind } from \"#/api/backend-registry/types\";\nimport type { WorkspaceMode } from \"#/api/conversation-metadata-store\";\nimport type { CloudConnectionSource } from \"#/services/cloud-funnel-analytics\";\nimport { getCachedAgentServerVersion } from \"#/api/agent-server-compatibility\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport { useAutomationSdkVersion } from \"#/hooks/query/use-automation-sdk-version\";\nimport {\n type BackendConnectionMethod,\n getBackendTelemetryProperties,\n} from \"#/services/telemetry-context\";\nimport { setTelemetryBackendContext, trackEvent } from \"#/services/telemetry\";\n\n/**\n * Stable semantic identifier for an onboarding link or CTA. Identifies the\n * destination, never the clicked element or its text.\n */\nexport type OnboardingLinkId =\n | \"configure_llm\"\n | \"start_conversation\"\n | \"schedule_task\"\n | \"customize_agent\"\n | \"connect_mcp\"\n | \"join_slack\"\n | \"open_docs\";\n\n/** Controlled destination category for `onboarding_link_clicked`. */\nexport type OnboardingLinkDestinationType =\n | \"community\"\n | \"integration\"\n | \"documentation\"\n | \"settings\"\n | \"conversation\"\n | \"automation\";\n\n/** Onboarding surface that presented the link. */\nexport type OnboardingLinkSurface = \"landing_checklist\" | \"onboarding_modal\";\n\n/**\n * Hook that provides tracking functions with automatic data collection\n * from available hooks (settings, etc.)\n *\n * All events require explicit user consent. The shared PostHog client enforces\n * the canonical consent configured by telemetry.ts; this hook must not gate on\n * backend settings because they can be stale while a backend changes.\n */\nexport const useTracking = () => {\n const { backend } = useActiveBackend();\n const automationSdkVersion = useAutomationSdkVersion();\n\n const getBackendTelemetryContext = React.useCallback(\n () => ({\n backendKind: backend.kind,\n agentServerVersion:\n backend.kind === \"local\"\n ? getCachedAgentServerVersion(backend.host)\n : null,\n automationSdkVersion: automationSdkVersion ?? null,\n }),\n [automationSdkVersion, backend.host, backend.kind],\n );\n\n React.useEffect(() => {\n setTelemetryBackendContext(getBackendTelemetryContext());\n }, [getBackendTelemetryContext]);\n\n // Common properties included in all tracking events\n const commonProperties = {\n current_url: window.location.href,\n };\n\n /**\n * PostHog enforces the canonical consent state configured by telemetry.ts.\n * Backend settings are not a capture gate because they can be stale while a\n * backend is being added or switched.\n */\n const track = (event: string, properties: Record<string, unknown> = {}) => {\n setTelemetryBackendContext(getBackendTelemetryContext());\n void trackEvent(event, { ...commonProperties, ...properties });\n };\n\n const trackLoginButtonClick = ({ provider }: { provider: Provider }) => {\n track(\"login_button_clicked\", { provider });\n };\n\n const trackConversationCreated = ({\n conversationId,\n taskId,\n hasRepository,\n gitProvider,\n hasWorkspace,\n workspaceMode,\n hasInitialQuery,\n agentType,\n hasParentConversation,\n entryPoint,\n }: {\n conversationId: string;\n taskId?: string;\n hasRepository: boolean;\n gitProvider?: Provider;\n hasWorkspace: boolean;\n workspaceMode?: WorkspaceMode;\n hasInitialQuery: boolean;\n agentType?: \"default\" | \"plan\";\n hasParentConversation: boolean;\n entryPoint?: string;\n }) => {\n track(\"conversation_start_requested\", {\n conversation_id: conversationId,\n task_id: taskId,\n is_start_task: conversationId.startsWith(\"task-\"),\n has_repository: hasRepository,\n git_provider: gitProvider,\n has_workspace: hasWorkspace,\n workspace_mode: workspaceMode,\n has_initial_query: hasInitialQuery,\n agent_type: agentType,\n has_parent_conversation: hasParentConversation,\n entry_point: entryPoint,\n });\n };\n\n const trackPushButtonClick = () => {\n track(\"push_button_clicked\");\n };\n\n const trackPullButtonClick = () => {\n track(\"pull_button_clicked\");\n };\n\n const trackCreatePrButtonClick = () => {\n track(\"create_pr_button_clicked\");\n };\n\n const trackUserSignupCompleted = () => {\n track(\"user_signup_completed\", {\n signup_timestamp: new Date().toISOString(),\n });\n };\n\n const trackPrebuiltAutomationEnabled = ({\n automationId,\n automationName,\n automationCategory,\n }: {\n automationId?: string;\n automationName: string;\n automationCategory?: string;\n }) => {\n track(\"prebuilt_automation_enabled\", {\n automation_id: automationId,\n automation_name: automationName,\n automation_category: automationCategory,\n });\n };\n\n /**\n * The setup funnel: opened → validated → created, or failed.\n *\n * A manifest declares no analytics of its own, so the stages are the same for\n * every entry and only the id it carries varies.\n */\n const trackAutomationSetupOpened = ({\n automationId,\n }: {\n automationId: string;\n }) => {\n track(\"automation_setup_opened\", { automation_id: automationId });\n };\n\n const trackAutomationSetupValidated = ({\n automationId,\n }: {\n automationId: string;\n }) => {\n track(\"automation_setup_validated\", { automation_id: automationId });\n };\n\n const trackAutomationSetupCreated = ({\n automationId,\n setupMode,\n }: {\n automationId: string;\n setupMode: string;\n }) => {\n track(\"automation_setup_created\", {\n automation_id: automationId,\n setup_mode: setupMode,\n });\n };\n\n const trackAutomationSetupFailed = ({\n automationId,\n setupMode,\n }: {\n automationId: string;\n setupMode: string;\n }) => {\n track(\"automation_setup_failed\", {\n automation_id: automationId,\n setup_mode: setupMode,\n });\n };\n\n const trackInitialQuerySubmitted = ({\n entryPoint,\n queryCharacterLength,\n replayJsonSize,\n }: {\n entryPoint: string;\n queryCharacterLength: number;\n replayJsonSize?: number;\n }) => {\n track(\"initial_query_submitted\", {\n entry_point: entryPoint,\n query_character_length: queryCharacterLength,\n replay_json_size: replayJsonSize,\n });\n };\n\n const trackUserMessageSent = ({\n sessionMessageCount,\n currentMessageLength,\n }: {\n sessionMessageCount: number;\n currentMessageLength: number;\n }) => {\n track(\"user_message_sent\", {\n session_message_count: sessionMessageCount,\n current_message_length: currentMessageLength,\n });\n };\n\n const trackDownloadVsCodeButtonClicked = () => {\n track(\"download_via_vscode_button_clicked\");\n };\n\n const trackSettingsSaved = ({\n llmModel,\n llmApiKeySet,\n searchApiKeySet,\n remoteRuntimeResourceFactor,\n }: {\n llmModel: unknown;\n llmApiKeySet: \"SET\" | \"UNSET\";\n searchApiKeySet: \"SET\" | \"UNSET\";\n remoteRuntimeResourceFactor?: unknown;\n }) => {\n track(\"settings_saved\", {\n LLM_MODEL: llmModel,\n LLM_API_KEY_SET: llmApiKeySet,\n SEARCH_API_KEY_SET: searchApiKeySet,\n REMOTE_RUNTIME_RESOURCE_FACTOR: remoteRuntimeResourceFactor,\n });\n };\n\n const trackMcpConfigUpdated = ({\n sseServersCount,\n stdioServersCount,\n }: {\n sseServersCount: number;\n stdioServersCount: number;\n }) => {\n track(\"mcp_config_updated\", {\n has_mcp_config: true,\n sse_servers_count: sseServersCount,\n stdio_servers_count: stdioServersCount,\n });\n };\n\n const trackDownloadTrajectoryButtonClicked = () => {\n track(\"download_trajectory_button_clicked\");\n };\n\n const trackConversationExported = (format: \"markdown\" | \"html\") => {\n track(\"conversation_exported\", { format });\n };\n\n const trackAutomationCreatedButton = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_created_button\", { backend_kind: backendKind });\n };\n\n const trackAutomationExecuted = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_executed\", { backend_kind: backendKind });\n };\n\n const trackAutomationDeleted = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_deleted\", { backend_kind: backendKind });\n };\n\n const trackAutomationDisableButton = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_disable_button\", { backend_kind: backendKind });\n };\n\n const trackAutomationEdited = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_edited\", { backend_kind: backendKind });\n };\n\n const trackAutomationExported = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_exported\", { backend_kind: backendKind });\n };\n\n const trackAutomationActivityLogExported = ({\n backendKind,\n format,\n }: {\n backendKind: BackendKind;\n format: \"json\" | \"csv\";\n }) => {\n track(\"automation_activity_log_exported\", {\n backend_kind: backendKind,\n format,\n });\n };\n\n const trackAutomationImported = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_imported\", { backend_kind: backendKind });\n };\n\n const trackGitSyncConfigUpdated = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"git_sync_config_updated\", { backend_kind: backendKind });\n };\n\n const trackGitSyncTriggered = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"git_sync_triggered\", { backend_kind: backendKind });\n };\n\n const trackBackendAdded = ({\n backendKind,\n connectionMethod,\n hasApiKey,\n source,\n agentServerVersion,\n backendVersion,\n }: {\n backendKind: BackendKind;\n connectionMethod: BackendConnectionMethod;\n hasApiKey: boolean;\n source?: CloudConnectionSource;\n agentServerVersion?: string | null;\n backendVersion?: string | null;\n }) => {\n track(\"backend_added\", {\n ...getBackendTelemetryProperties({\n backendKind,\n agentServerVersion,\n backendVersion,\n connectionMethod,\n }),\n has_api_key: hasApiKey,\n source,\n });\n };\n\n const trackOnboardingStarted = () => {\n track(\"onboarding_started\");\n };\n\n const trackOnboardingStepViewed = ({\n step,\n stepIndex,\n totalSteps,\n agent,\n }: {\n step: string;\n stepIndex: number;\n totalSteps: number;\n agent: string;\n }) => {\n track(\"onboarding_step_viewed\", {\n step,\n step_index: stepIndex,\n total_steps: totalSteps,\n agent,\n });\n };\n\n const trackOnboardingCompleted = ({ agent }: { agent: string }) => {\n track(\"onboarding_completed\", { agent });\n };\n\n const trackOnboardingSkipped = ({\n step,\n stepIndex,\n totalSteps,\n agent,\n }: {\n step: string;\n stepIndex: number;\n totalSteps: number;\n agent: string;\n }) => {\n track(\"onboarding_skipped\", {\n step,\n step_index: stepIndex,\n total_steps: totalSteps,\n agent,\n });\n };\n\n const trackOnboardingLinkClicked = ({\n linkId,\n destinationType,\n surface,\n checklistItem,\n stepId,\n isExternal,\n }: {\n linkId: OnboardingLinkId;\n destinationType: OnboardingLinkDestinationType;\n surface: OnboardingLinkSurface;\n checklistItem?: Exclude<OnboardingLinkId, \"open_docs\">;\n stepId?: string;\n isExternal: boolean;\n }) => {\n track(\"onboarding_link_clicked\", {\n link_id: linkId,\n destination_type: destinationType,\n surface,\n checklist_item: checklistItem,\n step_id: stepId,\n is_external: isExternal,\n });\n };\n\n return {\n trackLoginButtonClick,\n trackConversationCreated,\n trackPushButtonClick,\n trackPullButtonClick,\n trackCreatePrButtonClick,\n trackUserSignupCompleted,\n trackPrebuiltAutomationEnabled,\n trackAutomationSetupOpened,\n trackAutomationSetupValidated,\n trackAutomationSetupCreated,\n trackAutomationSetupFailed,\n trackInitialQuerySubmitted,\n trackUserMessageSent,\n trackDownloadVsCodeButtonClicked,\n trackSettingsSaved,\n trackMcpConfigUpdated,\n trackDownloadTrajectoryButtonClicked,\n trackConversationExported,\n trackAutomationCreatedButton,\n trackAutomationExecuted,\n trackAutomationDeleted,\n trackAutomationDisableButton,\n trackAutomationEdited,\n trackAutomationExported,\n trackAutomationActivityLogExported,\n trackAutomationImported,\n trackGitSyncConfigUpdated,\n trackGitSyncTriggered,\n trackBackendAdded,\n trackOnboardingStarted,\n trackOnboardingStepViewed,\n trackOnboardingCompleted,\n trackOnboardingSkipped,\n trackOnboardingLinkClicked,\n };\n};\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require("../_virtual/_rolldown/runtime.cjs"),t=require("../utils/websocket-auth.cjs");let
|
|
1
|
+
const e=require("../_virtual/_rolldown/runtime.cjs"),t=require("../utils/websocket-auth.cjs"),n=require("../utils/websocket-handshake.cjs");let r=require("react");r=e.__toESM(r,1);var i=1e3,a=3e4,o=(e,o)=>{let[s,c]=r.default.useState(!1),[l,u]=r.default.useState(null),[d,f]=r.default.useState(!1),p=r.default.useRef(null),m=r.default.useRef(0),h=r.default.useRef(null),g=r.default.useRef(!0),_=r.default.useRef(new WeakSet),v=r.default.useRef(o);r.default.useEffect(()=>{v.current=o},[o]);let y=r.default.useCallback(()=>{let r=e;if(v.current?.queryParams){let t=Object.entries(v.current.queryParams).reduce((e,[t,n])=>(e[t]=String(n),e),{});r=`${e}?${new URLSearchParams(t).toString()}`}let o=new WebSocket(r);p.current=o,_.current.add(o);let s=n.startHandshakeWatchdog(o);o.onopen=e=>{s(),t.sendWebSocketAuth(o,v.current?.sessionApiKey),c(!0),u(null),f(!1),m.current=0,v.current?.onOpen?.(e)},o.onmessage=e=>{v.current?.onMessage?.(e)},o.onclose=e=>{s();let t=_.current.has(o);c(!1),e.code!==1e3&&(u(Error(`WebSocket closed with code ${e.code}: ${e.reason||`Connection closed unexpectedly`}`)),t&&v.current?.onError?.(e)),p.current!==null&&p.current!==o||v.current?.onClose?.(e);let n=v.current?.reconnect?.enabled??!1,r=v.current?.reconnect?.maxAttempts??1/0;if(n&&t&&g.current&&m.current<r){f(!0),m.current+=1;let e=Math.min(i*2**(m.current-1),a),t=e+Math.random()*e*.3;h.current=setTimeout(()=>{y()},t)}else f(!1)},o.onerror=e=>{_.current.has(o)&&(c(!1),v.current?.onError?.(e))}},[e]);r.default.useEffect(()=>(g.current=!0,m.current=0,e&&e.trim()!==``&&y(),()=>{if(g.current=!1,h.current&&=(clearTimeout(h.current),null),p.current){let{readyState:e}=p.current;_.current.delete(p.current),(e===WebSocket.CONNECTING||e===WebSocket.OPEN)&&p.current.close(),p.current=null}}),[e,y]);let b=r.default.useCallback(e=>{p.current?.readyState===WebSocket.OPEN&&p.current.send(e)},[]),x=r.default.useCallback(()=>{g.current=!1,f(!1),h.current&&=(clearTimeout(h.current),null),p.current&&(_.current.delete(p.current),p.current.close())},[]),S=r.default.useCallback(()=>{if(g.current=!0,m.current=0,f(!0),u(null),h.current&&=(clearTimeout(h.current),null),p.current){let e=p.current;_.current.delete(e),p.current=null,(e.readyState===WebSocket.CONNECTING||e.readyState===WebSocket.OPEN)&&e.close()}y()},[y]);return{isConnected:s,error:l,socket:p.current,sendMessage:b,isReconnecting:d,attemptCount:m.current,disconnect:x,reconnect:S}};exports.useWebSocket=o;
|
|
2
2
|
//# sourceMappingURL=use-websocket.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-websocket.cjs","names":[],"sources":["../../src/hooks/use-websocket.ts"],"sourcesContent":["import React from \"react\";\nimport { sendWebSocketAuth } from \"#/utils/websocket-auth\";\n\nexport interface WebSocketHookOptions {\n queryParams?: Record<string, string | boolean>;\n sessionApiKey?: string | null;\n onOpen?: (event: Event) => void;\n onClose?: (event: CloseEvent) => void;\n onMessage?: (event: MessageEvent) => void;\n onError?: (event: Event) => void;\n reconnect?: {\n enabled?: boolean;\n maxAttempts?: number;\n };\n}\n\nexport const useWebSocket = <T = string>(\n url: string,\n options?: WebSocketHookOptions,\n) => {\n const [isConnected, setIsConnected] = React.useState(false);\n const [lastMessage, setLastMessage] = React.useState<T | null>(null);\n const [error, setError] = React.useState<Error | null>(null);\n const [isReconnecting, setIsReconnecting] = React.useState(false);\n const wsRef = React.useRef<WebSocket | null>(null);\n const attemptCountRef = React.useRef(0);\n const reconnectTimeoutRef = React.useRef<NodeJS.Timeout | null>(null);\n const shouldReconnectRef = React.useRef(true); // Only set to false by disconnect()\n // Track which WebSocket instances are allowed to reconnect using a WeakSet\n const allowedToReconnectRef = React.useRef<WeakSet<WebSocket>>(new WeakSet());\n\n // Store options in a ref to avoid reconnecting when callbacks change\n const optionsRef = React.useRef(options);\n React.useEffect(() => {\n optionsRef.current = options;\n }, [options]);\n\n const connectWebSocket = React.useCallback(() => {\n // Build URL with query parameters if provided\n let wsUrl = url;\n if (optionsRef.current?.queryParams) {\n const stringParams = Object.entries(\n optionsRef.current.queryParams,\n ).reduce(\n (acc, [key, value]) => {\n acc[key] = String(value);\n return acc;\n },\n {} as Record<string, string>,\n );\n const params = new URLSearchParams(stringParams);\n wsUrl = `${url}?${params.toString()}`;\n }\n\n const ws = new WebSocket(wsUrl);\n wsRef.current = ws;\n // Mark this WebSocket instance as allowed to reconnect\n allowedToReconnectRef.current.add(ws);\n\n ws.onopen = (event) => {\n sendWebSocketAuth(ws, optionsRef.current?.sessionApiKey);\n setIsConnected(true);\n setError(null); // Clear any previous errors\n setIsReconnecting(false);\n attemptCountRef.current = 0; // Reset attempt count on successful connection\n optionsRef.current?.onOpen?.(event);\n };\n\n ws.onmessage = (event) => {\n setLastMessage(event.data);\n optionsRef.current?.onMessage?.(event);\n };\n\n ws.onclose = (event) => {\n // Check if this specific WebSocket instance is allowed to reconnect\n const canReconnect = allowedToReconnectRef.current.has(ws);\n setIsConnected(false);\n // If the connection closes with an error code, treat it as an error\n if (event.code !== 1000) {\n // 1000 is normal closure\n setError(\n new Error(\n `WebSocket closed with code ${event.code}: ${event.reason || \"Connection closed unexpectedly\"}`,\n ),\n );\n // Also call onError handler for error closures (only if allowed to reconnect)\n if (canReconnect) {\n optionsRef.current?.onError?.(event);\n }\n }\n optionsRef.current?.onClose?.(event);\n\n // Attempt reconnection if enabled and allowed\n // IMPORTANT: Only reconnect if this specific instance is allowed to reconnect\n const reconnectEnabled = optionsRef.current?.reconnect?.enabled ?? false;\n const maxAttempts =\n optionsRef.current?.reconnect?.maxAttempts ?? Infinity;\n\n if (\n reconnectEnabled &&\n canReconnect &&\n shouldReconnectRef.current &&\n attemptCountRef.current < maxAttempts\n ) {\n setIsReconnecting(true);\n attemptCountRef.current += 1;\n\n reconnectTimeoutRef.current = setTimeout(() => {\n connectWebSocket();\n }, 3000); // 3 second delay\n } else {\n setIsReconnecting(false);\n }\n };\n\n ws.onerror = (event) => {\n setIsConnected(false);\n optionsRef.current?.onError?.(event);\n };\n }, [url]);\n\n React.useEffect(() => {\n // Reset shouldReconnect flag and attempt count when creating a new connection\n shouldReconnectRef.current = true;\n attemptCountRef.current = 0;\n\n // Only attempt connection if we have a valid URL\n if (url && url.trim() !== \"\") {\n connectWebSocket();\n }\n\n return () => {\n // Disable reconnection on unmount to prevent reconnection attempts\n // This must be set BEFORE closing the socket, so the onclose handler sees it\n shouldReconnectRef.current = false;\n // Clear any pending reconnection timeouts\n if (reconnectTimeoutRef.current) {\n clearTimeout(reconnectTimeoutRef.current);\n reconnectTimeoutRef.current = null;\n }\n // Close the WebSocket connection\n if (wsRef.current) {\n const { readyState } = wsRef.current;\n // Remove this WebSocket from the allowed list BEFORE closing\n // so its onclose handler won't try to reconnect\n allowedToReconnectRef.current.delete(wsRef.current);\n // Only close if not already closed/closing\n if (\n readyState === WebSocket.CONNECTING ||\n readyState === WebSocket.OPEN\n ) {\n wsRef.current.close();\n }\n wsRef.current = null;\n }\n };\n }, [url, connectWebSocket]);\n\n const sendMessage = React.useCallback(\n (data: string | Blob | BufferSource) => {\n if (wsRef.current?.readyState === WebSocket.OPEN) {\n wsRef.current.send(data);\n }\n },\n [],\n );\n\n const disconnect = React.useCallback(() => {\n shouldReconnectRef.current = false;\n setIsReconnecting(false);\n if (reconnectTimeoutRef.current) {\n clearTimeout(reconnectTimeoutRef.current);\n reconnectTimeoutRef.current = null;\n }\n if (wsRef.current) {\n // Remove from allowed list before closing\n allowedToReconnectRef.current.delete(wsRef.current);\n wsRef.current.close();\n }\n }, []);\n\n const reconnect = React.useCallback(() => {\n shouldReconnectRef.current = true;\n attemptCountRef.current = 0;\n setIsReconnecting(true);\n setError(null);\n\n if (reconnectTimeoutRef.current) {\n clearTimeout(reconnectTimeoutRef.current);\n reconnectTimeoutRef.current = null;\n }\n\n if (wsRef.current) {\n const ws = wsRef.current;\n allowedToReconnectRef.current.delete(ws);\n wsRef.current = null;\n if (\n ws.readyState === WebSocket.CONNECTING ||\n ws.readyState === WebSocket.OPEN\n ) {\n ws.close();\n }\n }\n\n connectWebSocket();\n }, [connectWebSocket]);\n\n return {\n isConnected,\n lastMessage,\n error,\n socket: wsRef.current,\n sendMessage,\n isReconnecting,\n attemptCount: attemptCountRef.current,\n disconnect,\n reconnect,\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"use-websocket.cjs","names":[],"sources":["../../src/hooks/use-websocket.ts"],"sourcesContent":["import React from \"react\";\nimport { sendWebSocketAuth } from \"#/utils/websocket-auth\";\nimport { startHandshakeWatchdog } from \"#/utils/websocket-handshake\";\n\nexport interface WebSocketHookOptions {\n queryParams?: Record<string, string | boolean>;\n sessionApiKey?: string | null;\n onOpen?: (event: Event) => void;\n onClose?: (event: CloseEvent) => void;\n onMessage?: (event: MessageEvent) => void;\n onError?: (event: Event) => void;\n reconnect?: {\n enabled?: boolean;\n maxAttempts?: number;\n };\n}\n\n// Reconnect backoff bounds: 1s, 2s, 4s, … capped at 30s.\nconst RECONNECT_BASE_DELAY_MS = 1_000;\nconst RECONNECT_MAX_DELAY_MS = 30_000;\n\nexport const useWebSocket = (url: string, options?: WebSocketHookOptions) => {\n const [isConnected, setIsConnected] = React.useState(false);\n const [error, setError] = React.useState<Error | null>(null);\n const [isReconnecting, setIsReconnecting] = React.useState(false);\n const wsRef = React.useRef<WebSocket | null>(null);\n const attemptCountRef = React.useRef(0);\n const reconnectTimeoutRef = React.useRef<NodeJS.Timeout | null>(null);\n const shouldReconnectRef = React.useRef(true); // Only set to false by disconnect()\n // Track which WebSocket instances are allowed to reconnect using a WeakSet\n const allowedToReconnectRef = React.useRef<WeakSet<WebSocket>>(new WeakSet());\n\n // Store options in a ref to avoid reconnecting when callbacks change\n const optionsRef = React.useRef(options);\n React.useEffect(() => {\n optionsRef.current = options;\n }, [options]);\n\n const connectWebSocket = React.useCallback(() => {\n // Build URL with query parameters if provided\n let wsUrl = url;\n if (optionsRef.current?.queryParams) {\n const stringParams = Object.entries(\n optionsRef.current.queryParams,\n ).reduce(\n (acc, [key, value]) => {\n acc[key] = String(value);\n return acc;\n },\n {} as Record<string, string>,\n );\n const params = new URLSearchParams(stringParams);\n wsUrl = `${url}?${params.toString()}`;\n }\n\n const ws = new WebSocket(wsUrl);\n wsRef.current = ws;\n // Mark this WebSocket instance as allowed to reconnect\n allowedToReconnectRef.current.add(ws);\n\n // Abort a socket stuck in CONNECTING so it can't hold Chrome's per-host\n // handshake lock indefinitely; its close flows into the reconnect path\n // below.\n const cancelHandshakeWatchdog = startHandshakeWatchdog(ws);\n\n ws.onopen = (event) => {\n cancelHandshakeWatchdog();\n sendWebSocketAuth(ws, optionsRef.current?.sessionApiKey);\n setIsConnected(true);\n setError(null); // Clear any previous errors\n setIsReconnecting(false);\n attemptCountRef.current = 0; // Reset attempt count on successful connection\n optionsRef.current?.onOpen?.(event);\n };\n\n ws.onmessage = (event) => {\n // Deliberately no `lastMessage` state here: nothing reads it, and a\n // React state write per frame re-renders this hook's owner on every\n // streamed token. Consumers subscribe via `onMessage`.\n optionsRef.current?.onMessage?.(event);\n };\n\n ws.onclose = (event) => {\n cancelHandshakeWatchdog();\n // Check if this specific WebSocket instance is allowed to reconnect\n const canReconnect = allowedToReconnectRef.current.has(ws);\n setIsConnected(false);\n // If the connection closes with an error code, treat it as an error\n if (event.code !== 1000) {\n // 1000 is normal closure\n setError(\n new Error(\n `WebSocket closed with code ${event.code}: ${event.reason || \"Connection closed unexpectedly\"}`,\n ),\n );\n // Also call onError handler for error closures (only if allowed to reconnect)\n if (canReconnect) {\n optionsRef.current?.onError?.(event);\n }\n }\n // Notify the consumer unless this socket was deliberately replaced by a\n // newer one — a replaced socket's close event arrives late and must not\n // clobber the replacement's OPEN state in the consumer. Final closes\n // (disconnect/unmount, nothing replacing the socket) still notify.\n const wasReplaced = wsRef.current !== null && wsRef.current !== ws;\n if (!wasReplaced) {\n optionsRef.current?.onClose?.(event);\n }\n\n // Attempt reconnection if enabled and allowed\n // IMPORTANT: Only reconnect if this specific instance is allowed to reconnect\n const reconnectEnabled = optionsRef.current?.reconnect?.enabled ?? false;\n const maxAttempts =\n optionsRef.current?.reconnect?.maxAttempts ?? Infinity;\n\n if (\n reconnectEnabled &&\n canReconnect &&\n shouldReconnectRef.current &&\n attemptCountRef.current < maxAttempts\n ) {\n setIsReconnecting(true);\n attemptCountRef.current += 1;\n\n // Exponential backoff with up to 30% random jitter so parallel\n // sockets (main + planning) don't retry in lockstep and hammer an\n // already-struggling server every few seconds forever.\n const baseDelay = Math.min(\n RECONNECT_BASE_DELAY_MS * 2 ** (attemptCountRef.current - 1),\n RECONNECT_MAX_DELAY_MS,\n );\n const delay = baseDelay + Math.random() * baseDelay * 0.3;\n\n reconnectTimeoutRef.current = setTimeout(() => {\n connectWebSocket();\n }, delay);\n } else {\n setIsReconnecting(false);\n }\n };\n\n ws.onerror = (event) => {\n // Ignore errors from sockets we've deliberately replaced or closed —\n // aborting a mid-handshake socket fires `error`, and it must not\n // surface as a connection failure for the replacement socket.\n if (!allowedToReconnectRef.current.has(ws)) {\n return;\n }\n setIsConnected(false);\n optionsRef.current?.onError?.(event);\n };\n }, [url]);\n\n React.useEffect(() => {\n // Reset shouldReconnect flag and attempt count when creating a new connection\n shouldReconnectRef.current = true;\n attemptCountRef.current = 0;\n\n // Only attempt connection if we have a valid URL\n if (url && url.trim() !== \"\") {\n connectWebSocket();\n }\n\n return () => {\n // Disable reconnection on unmount to prevent reconnection attempts\n // This must be set BEFORE closing the socket, so the onclose handler sees it\n shouldReconnectRef.current = false;\n // Clear any pending reconnection timeouts\n if (reconnectTimeoutRef.current) {\n clearTimeout(reconnectTimeoutRef.current);\n reconnectTimeoutRef.current = null;\n }\n // Close the WebSocket connection\n if (wsRef.current) {\n const { readyState } = wsRef.current;\n // Remove this WebSocket from the allowed list BEFORE closing\n // so its onclose handler won't try to reconnect\n allowedToReconnectRef.current.delete(wsRef.current);\n // Only close if not already closed/closing\n if (\n readyState === WebSocket.CONNECTING ||\n readyState === WebSocket.OPEN\n ) {\n wsRef.current.close();\n }\n wsRef.current = null;\n }\n };\n }, [url, connectWebSocket]);\n\n const sendMessage = React.useCallback(\n (data: string | Blob | BufferSource) => {\n if (wsRef.current?.readyState === WebSocket.OPEN) {\n wsRef.current.send(data);\n }\n },\n [],\n );\n\n const disconnect = React.useCallback(() => {\n shouldReconnectRef.current = false;\n setIsReconnecting(false);\n if (reconnectTimeoutRef.current) {\n clearTimeout(reconnectTimeoutRef.current);\n reconnectTimeoutRef.current = null;\n }\n if (wsRef.current) {\n // Remove from allowed list before closing\n allowedToReconnectRef.current.delete(wsRef.current);\n wsRef.current.close();\n }\n }, []);\n\n const reconnect = React.useCallback(() => {\n shouldReconnectRef.current = true;\n attemptCountRef.current = 0;\n setIsReconnecting(true);\n setError(null);\n\n if (reconnectTimeoutRef.current) {\n clearTimeout(reconnectTimeoutRef.current);\n reconnectTimeoutRef.current = null;\n }\n\n if (wsRef.current) {\n const ws = wsRef.current;\n allowedToReconnectRef.current.delete(ws);\n wsRef.current = null;\n if (\n ws.readyState === WebSocket.CONNECTING ||\n ws.readyState === WebSocket.OPEN\n ) {\n ws.close();\n }\n }\n\n connectWebSocket();\n }, [connectWebSocket]);\n\n return {\n isConnected,\n error,\n socket: wsRef.current,\n sendMessage,\n isReconnecting,\n attemptCount: attemptCountRef.current,\n disconnect,\n reconnect,\n };\n};\n"],"mappings":"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"}
|
|
@@ -10,9 +10,8 @@ export interface WebSocketHookOptions {
|
|
|
10
10
|
maxAttempts?: number;
|
|
11
11
|
};
|
|
12
12
|
}
|
|
13
|
-
export declare const useWebSocket:
|
|
13
|
+
export declare const useWebSocket: (url: string, options?: WebSocketHookOptions) => {
|
|
14
14
|
isConnected: boolean;
|
|
15
|
-
lastMessage: T | null;
|
|
16
15
|
error: Error | null;
|
|
17
16
|
socket: WebSocket | null;
|
|
18
17
|
sendMessage: (data: string | Blob | BufferSource) => void;
|
|
@@ -1,63 +1,70 @@
|
|
|
1
1
|
import { sendWebSocketAuth as e } from "../utils/websocket-auth.js";
|
|
2
|
-
import t from "
|
|
2
|
+
import { startHandshakeWatchdog as t } from "../utils/websocket-handshake.js";
|
|
3
|
+
import n from "react";
|
|
3
4
|
//#region src/hooks/use-websocket.ts
|
|
4
|
-
var
|
|
5
|
-
let [
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
}, [
|
|
9
|
-
let
|
|
10
|
-
let
|
|
11
|
-
if (
|
|
12
|
-
let e = Object.entries(
|
|
13
|
-
|
|
5
|
+
var r = 1e3, i = 3e4, a = (a, o) => {
|
|
6
|
+
let [s, c] = n.useState(!1), [l, u] = n.useState(null), [d, f] = n.useState(!1), p = n.useRef(null), m = n.useRef(0), h = n.useRef(null), g = n.useRef(!0), _ = n.useRef(/* @__PURE__ */ new WeakSet()), v = n.useRef(o);
|
|
7
|
+
n.useEffect(() => {
|
|
8
|
+
v.current = o;
|
|
9
|
+
}, [o]);
|
|
10
|
+
let y = n.useCallback(() => {
|
|
11
|
+
let n = a;
|
|
12
|
+
if (v.current?.queryParams) {
|
|
13
|
+
let e = Object.entries(v.current.queryParams).reduce((e, [t, n]) => (e[t] = String(n), e), {});
|
|
14
|
+
n = `${a}?${new URLSearchParams(e).toString()}`;
|
|
14
15
|
}
|
|
15
|
-
let
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
s(e.
|
|
20
|
-
},
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
16
|
+
let o = new WebSocket(n);
|
|
17
|
+
p.current = o, _.current.add(o);
|
|
18
|
+
let s = t(o);
|
|
19
|
+
o.onopen = (t) => {
|
|
20
|
+
s(), e(o, v.current?.sessionApiKey), c(!0), u(null), f(!1), m.current = 0, v.current?.onOpen?.(t);
|
|
21
|
+
}, o.onmessage = (e) => {
|
|
22
|
+
v.current?.onMessage?.(e);
|
|
23
|
+
}, o.onclose = (e) => {
|
|
24
|
+
s();
|
|
25
|
+
let t = _.current.has(o);
|
|
26
|
+
c(!1), e.code !== 1e3 && (u(/* @__PURE__ */ Error(`WebSocket closed with code ${e.code}: ${e.reason || "Connection closed unexpectedly"}`)), t && v.current?.onError?.(e)), p.current !== null && p.current !== o || v.current?.onClose?.(e);
|
|
27
|
+
let n = v.current?.reconnect?.enabled ?? !1, a = v.current?.reconnect?.maxAttempts ?? Infinity;
|
|
28
|
+
if (n && t && g.current && m.current < a) {
|
|
29
|
+
f(!0), m.current += 1;
|
|
30
|
+
let e = Math.min(r * 2 ** (m.current - 1), i), t = e + Math.random() * e * .3;
|
|
31
|
+
h.current = setTimeout(() => {
|
|
32
|
+
y();
|
|
33
|
+
}, t);
|
|
34
|
+
} else f(!1);
|
|
35
|
+
}, o.onerror = (e) => {
|
|
36
|
+
_.current.has(o) && (c(!1), v.current?.onError?.(e));
|
|
29
37
|
};
|
|
30
|
-
}, [
|
|
31
|
-
|
|
32
|
-
if (
|
|
33
|
-
let { readyState: e } =
|
|
34
|
-
|
|
38
|
+
}, [a]);
|
|
39
|
+
n.useEffect(() => (g.current = !0, m.current = 0, a && a.trim() !== "" && y(), () => {
|
|
40
|
+
if (g.current = !1, h.current &&= (clearTimeout(h.current), null), p.current) {
|
|
41
|
+
let { readyState: e } = p.current;
|
|
42
|
+
_.current.delete(p.current), (e === WebSocket.CONNECTING || e === WebSocket.OPEN) && p.current.close(), p.current = null;
|
|
35
43
|
}
|
|
36
|
-
}), [
|
|
37
|
-
let
|
|
38
|
-
|
|
39
|
-
}, []),
|
|
40
|
-
|
|
41
|
-
}, []),
|
|
42
|
-
if (
|
|
43
|
-
let e =
|
|
44
|
-
|
|
44
|
+
}), [a, y]);
|
|
45
|
+
let b = n.useCallback((e) => {
|
|
46
|
+
p.current?.readyState === WebSocket.OPEN && p.current.send(e);
|
|
47
|
+
}, []), x = n.useCallback(() => {
|
|
48
|
+
g.current = !1, f(!1), h.current &&= (clearTimeout(h.current), null), p.current && (_.current.delete(p.current), p.current.close());
|
|
49
|
+
}, []), S = n.useCallback(() => {
|
|
50
|
+
if (g.current = !0, m.current = 0, f(!0), u(null), h.current &&= (clearTimeout(h.current), null), p.current) {
|
|
51
|
+
let e = p.current;
|
|
52
|
+
_.current.delete(e), p.current = null, (e.readyState === WebSocket.CONNECTING || e.readyState === WebSocket.OPEN) && e.close();
|
|
45
53
|
}
|
|
46
|
-
|
|
47
|
-
}, [
|
|
54
|
+
y();
|
|
55
|
+
}, [y]);
|
|
48
56
|
return {
|
|
49
|
-
isConnected:
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
reconnect: x
|
|
57
|
+
isConnected: s,
|
|
58
|
+
error: l,
|
|
59
|
+
socket: p.current,
|
|
60
|
+
sendMessage: b,
|
|
61
|
+
isReconnecting: d,
|
|
62
|
+
attemptCount: m.current,
|
|
63
|
+
disconnect: x,
|
|
64
|
+
reconnect: S
|
|
58
65
|
};
|
|
59
66
|
};
|
|
60
67
|
//#endregion
|
|
61
|
-
export {
|
|
68
|
+
export { a as useWebSocket };
|
|
62
69
|
|
|
63
70
|
//# sourceMappingURL=use-websocket.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-websocket.js","names":[],"sources":["../../src/hooks/use-websocket.ts"],"sourcesContent":["import React from \"react\";\nimport { sendWebSocketAuth } from \"#/utils/websocket-auth\";\n\nexport interface WebSocketHookOptions {\n queryParams?: Record<string, string | boolean>;\n sessionApiKey?: string | null;\n onOpen?: (event: Event) => void;\n onClose?: (event: CloseEvent) => void;\n onMessage?: (event: MessageEvent) => void;\n onError?: (event: Event) => void;\n reconnect?: {\n enabled?: boolean;\n maxAttempts?: number;\n };\n}\n\nexport const useWebSocket = <T = string>(\n url: string,\n options?: WebSocketHookOptions,\n) => {\n const [isConnected, setIsConnected] = React.useState(false);\n const [lastMessage, setLastMessage] = React.useState<T | null>(null);\n const [error, setError] = React.useState<Error | null>(null);\n const [isReconnecting, setIsReconnecting] = React.useState(false);\n const wsRef = React.useRef<WebSocket | null>(null);\n const attemptCountRef = React.useRef(0);\n const reconnectTimeoutRef = React.useRef<NodeJS.Timeout | null>(null);\n const shouldReconnectRef = React.useRef(true); // Only set to false by disconnect()\n // Track which WebSocket instances are allowed to reconnect using a WeakSet\n const allowedToReconnectRef = React.useRef<WeakSet<WebSocket>>(new WeakSet());\n\n // Store options in a ref to avoid reconnecting when callbacks change\n const optionsRef = React.useRef(options);\n React.useEffect(() => {\n optionsRef.current = options;\n }, [options]);\n\n const connectWebSocket = React.useCallback(() => {\n // Build URL with query parameters if provided\n let wsUrl = url;\n if (optionsRef.current?.queryParams) {\n const stringParams = Object.entries(\n optionsRef.current.queryParams,\n ).reduce(\n (acc, [key, value]) => {\n acc[key] = String(value);\n return acc;\n },\n {} as Record<string, string>,\n );\n const params = new URLSearchParams(stringParams);\n wsUrl = `${url}?${params.toString()}`;\n }\n\n const ws = new WebSocket(wsUrl);\n wsRef.current = ws;\n // Mark this WebSocket instance as allowed to reconnect\n allowedToReconnectRef.current.add(ws);\n\n ws.onopen = (event) => {\n sendWebSocketAuth(ws, optionsRef.current?.sessionApiKey);\n setIsConnected(true);\n setError(null); // Clear any previous errors\n setIsReconnecting(false);\n attemptCountRef.current = 0; // Reset attempt count on successful connection\n optionsRef.current?.onOpen?.(event);\n };\n\n ws.onmessage = (event) => {\n setLastMessage(event.data);\n optionsRef.current?.onMessage?.(event);\n };\n\n ws.onclose = (event) => {\n // Check if this specific WebSocket instance is allowed to reconnect\n const canReconnect = allowedToReconnectRef.current.has(ws);\n setIsConnected(false);\n // If the connection closes with an error code, treat it as an error\n if (event.code !== 1000) {\n // 1000 is normal closure\n setError(\n new Error(\n `WebSocket closed with code ${event.code}: ${event.reason || \"Connection closed unexpectedly\"}`,\n ),\n );\n // Also call onError handler for error closures (only if allowed to reconnect)\n if (canReconnect) {\n optionsRef.current?.onError?.(event);\n }\n }\n optionsRef.current?.onClose?.(event);\n\n // Attempt reconnection if enabled and allowed\n // IMPORTANT: Only reconnect if this specific instance is allowed to reconnect\n const reconnectEnabled = optionsRef.current?.reconnect?.enabled ?? false;\n const maxAttempts =\n optionsRef.current?.reconnect?.maxAttempts ?? Infinity;\n\n if (\n reconnectEnabled &&\n canReconnect &&\n shouldReconnectRef.current &&\n attemptCountRef.current < maxAttempts\n ) {\n setIsReconnecting(true);\n attemptCountRef.current += 1;\n\n reconnectTimeoutRef.current = setTimeout(() => {\n connectWebSocket();\n }, 3000); // 3 second delay\n } else {\n setIsReconnecting(false);\n }\n };\n\n ws.onerror = (event) => {\n setIsConnected(false);\n optionsRef.current?.onError?.(event);\n };\n }, [url]);\n\n React.useEffect(() => {\n // Reset shouldReconnect flag and attempt count when creating a new connection\n shouldReconnectRef.current = true;\n attemptCountRef.current = 0;\n\n // Only attempt connection if we have a valid URL\n if (url && url.trim() !== \"\") {\n connectWebSocket();\n }\n\n return () => {\n // Disable reconnection on unmount to prevent reconnection attempts\n // This must be set BEFORE closing the socket, so the onclose handler sees it\n shouldReconnectRef.current = false;\n // Clear any pending reconnection timeouts\n if (reconnectTimeoutRef.current) {\n clearTimeout(reconnectTimeoutRef.current);\n reconnectTimeoutRef.current = null;\n }\n // Close the WebSocket connection\n if (wsRef.current) {\n const { readyState } = wsRef.current;\n // Remove this WebSocket from the allowed list BEFORE closing\n // so its onclose handler won't try to reconnect\n allowedToReconnectRef.current.delete(wsRef.current);\n // Only close if not already closed/closing\n if (\n readyState === WebSocket.CONNECTING ||\n readyState === WebSocket.OPEN\n ) {\n wsRef.current.close();\n }\n wsRef.current = null;\n }\n };\n }, [url, connectWebSocket]);\n\n const sendMessage = React.useCallback(\n (data: string | Blob | BufferSource) => {\n if (wsRef.current?.readyState === WebSocket.OPEN) {\n wsRef.current.send(data);\n }\n },\n [],\n );\n\n const disconnect = React.useCallback(() => {\n shouldReconnectRef.current = false;\n setIsReconnecting(false);\n if (reconnectTimeoutRef.current) {\n clearTimeout(reconnectTimeoutRef.current);\n reconnectTimeoutRef.current = null;\n }\n if (wsRef.current) {\n // Remove from allowed list before closing\n allowedToReconnectRef.current.delete(wsRef.current);\n wsRef.current.close();\n }\n }, []);\n\n const reconnect = React.useCallback(() => {\n shouldReconnectRef.current = true;\n attemptCountRef.current = 0;\n setIsReconnecting(true);\n setError(null);\n\n if (reconnectTimeoutRef.current) {\n clearTimeout(reconnectTimeoutRef.current);\n reconnectTimeoutRef.current = null;\n }\n\n if (wsRef.current) {\n const ws = wsRef.current;\n allowedToReconnectRef.current.delete(ws);\n wsRef.current = null;\n if (\n ws.readyState === WebSocket.CONNECTING ||\n ws.readyState === WebSocket.OPEN\n ) {\n ws.close();\n }\n }\n\n connectWebSocket();\n }, [connectWebSocket]);\n\n return {\n isConnected,\n lastMessage,\n error,\n socket: wsRef.current,\n sendMessage,\n isReconnecting,\n attemptCount: attemptCountRef.current,\n disconnect,\n reconnect,\n };\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"use-websocket.js","names":[],"sources":["../../src/hooks/use-websocket.ts"],"sourcesContent":["import React from \"react\";\nimport { sendWebSocketAuth } from \"#/utils/websocket-auth\";\nimport { startHandshakeWatchdog } from \"#/utils/websocket-handshake\";\n\nexport interface WebSocketHookOptions {\n queryParams?: Record<string, string | boolean>;\n sessionApiKey?: string | null;\n onOpen?: (event: Event) => void;\n onClose?: (event: CloseEvent) => void;\n onMessage?: (event: MessageEvent) => void;\n onError?: (event: Event) => void;\n reconnect?: {\n enabled?: boolean;\n maxAttempts?: number;\n };\n}\n\n// Reconnect backoff bounds: 1s, 2s, 4s, … capped at 30s.\nconst RECONNECT_BASE_DELAY_MS = 1_000;\nconst RECONNECT_MAX_DELAY_MS = 30_000;\n\nexport const useWebSocket = (url: string, options?: WebSocketHookOptions) => {\n const [isConnected, setIsConnected] = React.useState(false);\n const [error, setError] = React.useState<Error | null>(null);\n const [isReconnecting, setIsReconnecting] = React.useState(false);\n const wsRef = React.useRef<WebSocket | null>(null);\n const attemptCountRef = React.useRef(0);\n const reconnectTimeoutRef = React.useRef<NodeJS.Timeout | null>(null);\n const shouldReconnectRef = React.useRef(true); // Only set to false by disconnect()\n // Track which WebSocket instances are allowed to reconnect using a WeakSet\n const allowedToReconnectRef = React.useRef<WeakSet<WebSocket>>(new WeakSet());\n\n // Store options in a ref to avoid reconnecting when callbacks change\n const optionsRef = React.useRef(options);\n React.useEffect(() => {\n optionsRef.current = options;\n }, [options]);\n\n const connectWebSocket = React.useCallback(() => {\n // Build URL with query parameters if provided\n let wsUrl = url;\n if (optionsRef.current?.queryParams) {\n const stringParams = Object.entries(\n optionsRef.current.queryParams,\n ).reduce(\n (acc, [key, value]) => {\n acc[key] = String(value);\n return acc;\n },\n {} as Record<string, string>,\n );\n const params = new URLSearchParams(stringParams);\n wsUrl = `${url}?${params.toString()}`;\n }\n\n const ws = new WebSocket(wsUrl);\n wsRef.current = ws;\n // Mark this WebSocket instance as allowed to reconnect\n allowedToReconnectRef.current.add(ws);\n\n // Abort a socket stuck in CONNECTING so it can't hold Chrome's per-host\n // handshake lock indefinitely; its close flows into the reconnect path\n // below.\n const cancelHandshakeWatchdog = startHandshakeWatchdog(ws);\n\n ws.onopen = (event) => {\n cancelHandshakeWatchdog();\n sendWebSocketAuth(ws, optionsRef.current?.sessionApiKey);\n setIsConnected(true);\n setError(null); // Clear any previous errors\n setIsReconnecting(false);\n attemptCountRef.current = 0; // Reset attempt count on successful connection\n optionsRef.current?.onOpen?.(event);\n };\n\n ws.onmessage = (event) => {\n // Deliberately no `lastMessage` state here: nothing reads it, and a\n // React state write per frame re-renders this hook's owner on every\n // streamed token. Consumers subscribe via `onMessage`.\n optionsRef.current?.onMessage?.(event);\n };\n\n ws.onclose = (event) => {\n cancelHandshakeWatchdog();\n // Check if this specific WebSocket instance is allowed to reconnect\n const canReconnect = allowedToReconnectRef.current.has(ws);\n setIsConnected(false);\n // If the connection closes with an error code, treat it as an error\n if (event.code !== 1000) {\n // 1000 is normal closure\n setError(\n new Error(\n `WebSocket closed with code ${event.code}: ${event.reason || \"Connection closed unexpectedly\"}`,\n ),\n );\n // Also call onError handler for error closures (only if allowed to reconnect)\n if (canReconnect) {\n optionsRef.current?.onError?.(event);\n }\n }\n // Notify the consumer unless this socket was deliberately replaced by a\n // newer one — a replaced socket's close event arrives late and must not\n // clobber the replacement's OPEN state in the consumer. Final closes\n // (disconnect/unmount, nothing replacing the socket) still notify.\n const wasReplaced = wsRef.current !== null && wsRef.current !== ws;\n if (!wasReplaced) {\n optionsRef.current?.onClose?.(event);\n }\n\n // Attempt reconnection if enabled and allowed\n // IMPORTANT: Only reconnect if this specific instance is allowed to reconnect\n const reconnectEnabled = optionsRef.current?.reconnect?.enabled ?? false;\n const maxAttempts =\n optionsRef.current?.reconnect?.maxAttempts ?? Infinity;\n\n if (\n reconnectEnabled &&\n canReconnect &&\n shouldReconnectRef.current &&\n attemptCountRef.current < maxAttempts\n ) {\n setIsReconnecting(true);\n attemptCountRef.current += 1;\n\n // Exponential backoff with up to 30% random jitter so parallel\n // sockets (main + planning) don't retry in lockstep and hammer an\n // already-struggling server every few seconds forever.\n const baseDelay = Math.min(\n RECONNECT_BASE_DELAY_MS * 2 ** (attemptCountRef.current - 1),\n RECONNECT_MAX_DELAY_MS,\n );\n const delay = baseDelay + Math.random() * baseDelay * 0.3;\n\n reconnectTimeoutRef.current = setTimeout(() => {\n connectWebSocket();\n }, delay);\n } else {\n setIsReconnecting(false);\n }\n };\n\n ws.onerror = (event) => {\n // Ignore errors from sockets we've deliberately replaced or closed —\n // aborting a mid-handshake socket fires `error`, and it must not\n // surface as a connection failure for the replacement socket.\n if (!allowedToReconnectRef.current.has(ws)) {\n return;\n }\n setIsConnected(false);\n optionsRef.current?.onError?.(event);\n };\n }, [url]);\n\n React.useEffect(() => {\n // Reset shouldReconnect flag and attempt count when creating a new connection\n shouldReconnectRef.current = true;\n attemptCountRef.current = 0;\n\n // Only attempt connection if we have a valid URL\n if (url && url.trim() !== \"\") {\n connectWebSocket();\n }\n\n return () => {\n // Disable reconnection on unmount to prevent reconnection attempts\n // This must be set BEFORE closing the socket, so the onclose handler sees it\n shouldReconnectRef.current = false;\n // Clear any pending reconnection timeouts\n if (reconnectTimeoutRef.current) {\n clearTimeout(reconnectTimeoutRef.current);\n reconnectTimeoutRef.current = null;\n }\n // Close the WebSocket connection\n if (wsRef.current) {\n const { readyState } = wsRef.current;\n // Remove this WebSocket from the allowed list BEFORE closing\n // so its onclose handler won't try to reconnect\n allowedToReconnectRef.current.delete(wsRef.current);\n // Only close if not already closed/closing\n if (\n readyState === WebSocket.CONNECTING ||\n readyState === WebSocket.OPEN\n ) {\n wsRef.current.close();\n }\n wsRef.current = null;\n }\n };\n }, [url, connectWebSocket]);\n\n const sendMessage = React.useCallback(\n (data: string | Blob | BufferSource) => {\n if (wsRef.current?.readyState === WebSocket.OPEN) {\n wsRef.current.send(data);\n }\n },\n [],\n );\n\n const disconnect = React.useCallback(() => {\n shouldReconnectRef.current = false;\n setIsReconnecting(false);\n if (reconnectTimeoutRef.current) {\n clearTimeout(reconnectTimeoutRef.current);\n reconnectTimeoutRef.current = null;\n }\n if (wsRef.current) {\n // Remove from allowed list before closing\n allowedToReconnectRef.current.delete(wsRef.current);\n wsRef.current.close();\n }\n }, []);\n\n const reconnect = React.useCallback(() => {\n shouldReconnectRef.current = true;\n attemptCountRef.current = 0;\n setIsReconnecting(true);\n setError(null);\n\n if (reconnectTimeoutRef.current) {\n clearTimeout(reconnectTimeoutRef.current);\n reconnectTimeoutRef.current = null;\n }\n\n if (wsRef.current) {\n const ws = wsRef.current;\n allowedToReconnectRef.current.delete(ws);\n wsRef.current = null;\n if (\n ws.readyState === WebSocket.CONNECTING ||\n ws.readyState === WebSocket.OPEN\n ) {\n ws.close();\n }\n }\n\n connectWebSocket();\n }, [connectWebSocket]);\n\n return {\n isConnected,\n error,\n socket: wsRef.current,\n sendMessage,\n isReconnecting,\n attemptCount: attemptCountRef.current,\n disconnect,\n reconnect,\n };\n};\n"],"mappings":"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"}
|