@openhands/agent-canvas 1.5.1 → 1.6.1
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/{Trans-DqF_OEZB.js → Trans-52HCczKK.js} +1 -1
- package/build/assets/{acp-providers-DerAmTyY.js → acp-providers-xACMK9ZP.js} +1 -1
- package/build/assets/{active-backend-context-B8rMv0X9.js → active-backend-context-Cd1qcZsb.js} +1 -1
- package/build/assets/{add-backend-modal-CxC7BNEc.js → add-backend-modal-5chsfln3.js} +1 -1
- package/build/assets/{agent-profiles-settings-BJb8YXR1.js → agent-profiles-settings-BWK4H3kR.js} +1 -1
- package/build/assets/agent-server-compatibility-DMY0CihN.js +1 -0
- package/build/assets/agent-server-conversation-service.api-CI5-xmIX.js +41 -0
- package/build/assets/agent-settings-CMd8-O4f.js +2 -0
- package/build/assets/agent-settings-CdrhQJXX.js +1 -0
- package/build/assets/{alert-banner-Dh51WURQ.js → alert-banner-CLfWuIAX.js} +1 -1
- package/build/assets/api-key-entry-screen-Cc3aC7DZ.js +1 -0
- package/build/assets/app-settings-B-DQcBoB.js +1 -0
- package/build/assets/{automation-detail-CZsu2CoM.js → automation-detail-BgxBIpyK.js} +2 -2
- package/build/assets/automation-export-Dbur8OHa.js +2 -0
- package/build/assets/automations-list-BWfjizlp.js +1 -0
- package/build/assets/{back-nav-button-DVknCcSP.js → back-nav-button-CaKvsD1E.js} +1 -1
- package/build/assets/backend-form-modal-YcfpuBZo.js +1 -0
- package/build/assets/{backend-synced-settings-badge-BSfN0AZA.js → backend-synced-settings-badge-BellMmgC.js} +1 -1
- package/build/assets/{base-modal-CIF_785P.js → base-modal-Cw7enAHz.js} +1 -1
- package/build/assets/{brand-button-B1izLAdR.js → brand-button-BulEFHr3.js} +1 -1
- package/build/assets/{browser-DKaeq_sT.js → browser-DfVgUREb.js} +2 -2
- package/build/assets/browser-store-CBqI3tNR.js +1 -0
- package/build/assets/{browser-tab-qb_ftCxW.js → browser-tab-CmIKQB7S.js} +1 -1
- package/build/assets/chat-send-button-BchSSwuD.js +1 -0
- package/build/assets/circle-check-BXbQ5nEH.js +1 -0
- package/build/assets/{circle-plus-check-toggle-DoFIjVE0.js → circle-plus-check-toggle-BhpPjkh9.js} +1 -1
- package/build/assets/client-source-DAUgyJsi.js +1 -0
- package/build/assets/cloud-funnel-analytics-B5OeWh4y.js +1 -0
- package/build/assets/{color-themes-CHizm1xF.js → color-themes-QKMSVfDU.js} +1 -1
- package/build/assets/{combobox-caret-CxZpqoSR.js → combobox-caret-kNZtp53R.js} +1 -1
- package/build/assets/{command-menu-oTvKDU3Y.js → command-menu-tUsn23zy.js} +1 -1
- package/build/assets/{command-store-D8J5LMW1.js → command-store-B0hrIWMN.js} +1 -1
- package/build/assets/{condenser-settings-BGlWn93P.js → condenser-settings-BBizzfIH.js} +1 -1
- package/build/assets/{confirmation-modal-DGBWM2Ls.js → confirmation-modal-108xng7X.js} +1 -1
- package/build/assets/{context-menu-list-item-6psNyl7X.js → context-menu-list-item-BbKfFuN1.js} +1 -1
- package/build/assets/conversation-CTzSrLMq.js +1 -0
- package/build/assets/conversation-CgcXNb-Z.js +90 -0
- package/build/assets/conversation-panel-bscjGQda.js +1 -0
- package/build/assets/{conversation-service.api-_f9GlIEi.js → conversation-service.api-DbBvscJA.js} +1 -1
- package/build/assets/conversation-state-store-C5GagZHT.js +1 -0
- package/build/assets/{conversation-store-LptbOvKa.js → conversation-store-CyVqoa0d.js} +1 -1
- package/build/assets/{conversation-tab-empty-state-CNUmIms2.js → conversation-tab-empty-state-2KYlk5Bh.js} +1 -1
- package/build/assets/{copy-to-clipboard-button-CFzH_NOX.js → copy-to-clipboard-button-C54YRPMg.js} +1 -1
- package/build/assets/declaration-_yumYLEx.js +1 -0
- package/build/assets/{device-verify-WBSjJBLH.js → device-verify-D6FW_KZq.js} +1 -1
- package/build/assets/{dropdown-classes-D3wMJlXT.js → dropdown-classes-9uONlOg1.js} +1 -1
- package/build/assets/{ellipsis-button-CbNnHlIq.js → ellipsis-button-CoaUrKmQ.js} +1 -1
- package/build/assets/{entry.client-DNlPGxsu.js → entry.client-BJSVzw7V.js} +2 -2
- package/build/assets/{enum-filter-dropdown-JLYv1t8L.js → enum-filter-dropdown-qQzyjk_q.js} +1 -1
- package/build/assets/{environment-switch-overlay-B1PFO8P8.js → environment-switch-overlay-XRWCClLu.js} +1 -1
- package/build/assets/extensions-hub-DUp9sWQY.js +1 -0
- package/build/assets/extensions-navigation-DmkftjAx.js +1 -0
- package/build/assets/file-tUAzhmJ3.js +1 -0
- package/build/assets/files-tab-GV5hwiIM.js +1 -0
- package/build/assets/files-tab-store-DehyITNC.js +1 -0
- package/build/assets/{form-control-classes-CbdN5aO3.js → form-control-classes-BPUnoYyg.js} +1 -1
- package/build/assets/git-provider-icon-DDkru3b_.js +1 -0
- package/build/assets/highlighted-source-view-CYkPZUxr.js +1 -0
- package/build/assets/home-C53WekZ2.js +1 -0
- package/build/assets/home-EAwq8ah2.js +1 -0
- package/build/assets/index-home-kBdZGKtu.js +1 -0
- package/build/assets/install-server-modal-DYk4VP3-.js +1 -0
- package/build/assets/{launch-CAGavYl-.js → launch-CIecOy_y.js} +1 -1
- package/build/assets/lesson-plan-BSEUwflx.js +4 -0
- package/build/assets/llm-not-configured-banner-C8uv1PHT.js +27 -0
- package/build/assets/llm-settings-0Bb97NCk.js +1 -0
- package/build/assets/llm-settings-D4toJ90k.js +1 -0
- package/build/assets/{llm-subscription-service-Casyzgn1.js → llm-subscription-service-BPRw3u3H.js} +1 -1
- package/build/assets/{loading-spinner-BcdnT0mN.js → loading-spinner-BCInDEXB.js} +1 -1
- package/build/assets/manage-backends-modal-Bon32JYr.js +1 -0
- package/build/assets/manifest-ec000ae3.js +1 -0
- package/build/assets/markdown-renderer-BlaJOAI2.js +2 -0
- package/build/assets/mcp-CFIpOkn2.js +9 -0
- package/build/assets/messages-eRPeR4pW.js +40 -0
- package/build/assets/{modal-body-Cc2zp0xb.js → modal-body-Bg9UCeoV.js} +1 -1
- package/build/assets/{modal-classes-3qT9Ap7Q.js → modal-classes-H1KbJkeC.js} +1 -1
- package/build/assets/{modal-close-button-BcIBUdSq.js → modal-close-button-BMLYvo0C.js} +1 -1
- package/build/assets/{model-selector-DJrMrFAr.js → model-selector-BqX2RvEr.js} +1 -1
- package/build/assets/{navigation-link-D8hfwvxI.js → navigation-link-DoJzTCEz.js} +1 -1
- package/build/assets/onboarding-3KO4qE6R.js +1 -0
- package/build/assets/onboarding-modal-D4vqkJeT.js +1 -0
- package/build/assets/{organization-service.api-vrRNwOma.js → organization-service.api-CvfQugOt.js} +1 -1
- package/build/assets/{path-utils-PNfCKQDV.js → path-utils-DRgexxnX.js} +1 -1
- package/build/assets/{plan-components-BdZXPyZU.js → plan-components-qkMiGs_-.js} +1 -1
- package/build/assets/{planner-tab-ByOw1he8.js → planner-tab-ZrjiirRr.js} +1 -1
- package/build/assets/{plugins-management-service-B75jyC56.js → plugins-management-service-9qT-r_37.js} +1 -1
- package/build/assets/plus-CzE1b-wl.js +1 -0
- package/build/assets/{profiles-service.api-BQTklD5D.js → profiles-service.api-CRVlrQpT.js} +1 -1
- package/build/assets/{providers-DfTB2gPd.js → providers-C2DFGBrf.js} +1 -1
- package/build/assets/{proxy-B3tCGf0X.js → proxy-DnnDqkwn.js} +1 -1
- package/build/assets/puzzle-IHQnD54C.js +1 -0
- package/build/assets/recommended-automations-launcher-B97vgHuN.js +58 -0
- package/build/assets/refresh-cw-DxbAs3SK.js +1 -0
- package/build/assets/root-BbONavTg.css +1 -0
- package/build/assets/root-D01rpqZU.js +2 -0
- package/build/assets/root-layout-BiHbCIkS.js +2 -0
- package/build/assets/{runtime-waiting-state-CnyVhX4T.js → runtime-waiting-state-CbUV9txX.js} +1 -1
- package/build/assets/{schema-field-CUwk4wrQ.js → schema-field-B9-9Ta9u.js} +1 -1
- package/build/assets/sdk-section-page-DG1s25Pr.js +1 -0
- package/build/assets/{sdk-settings-schema-CLR01YIK.js → sdk-settings-schema-B42JFr5Y.js} +1 -1
- package/build/assets/{secrets-service-CvyPWJhg.js → secrets-service-DvyS6-mV.js} +1 -1
- package/build/assets/secrets-settings-CeSq6cQw.js +1 -0
- package/build/assets/{segmented-toggle-kzwZkLaj.js → segmented-toggle-DRVJBNy0.js} +1 -1
- package/build/assets/settings-Dzo0dJKM.js +1 -0
- package/build/assets/{settings-mQUckT0g.js → settings-HcwfqMjJ.js} +1 -1
- package/build/assets/{settings-dropdown-input-Dhx9ErGd.js → settings-dropdown-input-B6RL_mt0.js} +1 -1
- package/build/assets/settings-index-uAKHyijw.js +1 -0
- package/build/assets/{settings-input-BsgQWS5R.js → settings-input-ZoaAPNQh.js} +1 -1
- package/build/assets/{settings-list-classes-DSJJX99U.js → settings-list-classes-Dr8LgITi.js} +1 -1
- package/build/assets/settings-modal-BVX2G_IT.js +1 -0
- package/build/assets/{settings-service.api-DXk5TdeJ.js → settings-service.api-BY7ncxIz.js} +1 -1
- package/build/assets/{settings-switch-Bes8dIlV.js → settings-switch-DUlGnP0B.js} +1 -1
- package/build/assets/{settings-utils-DzCVfiR3.js → settings-utils-kWEEvcdv.js} +1 -1
- package/build/assets/shared-conversation-CV4Rtdz2.js +1 -0
- package/build/assets/{sidebar-layout-Bm7pa3Vk.js → sidebar-layout-BhGooCga.js} +1 -1
- package/build/assets/sidebar-mobile-menu-toggle-BntOJphE.js +1 -0
- package/build/assets/{sidebar-nav-link-CHqyFXwV.js → sidebar-nav-link-DkA1XWV8.js} +1 -1
- package/build/assets/{sidebar-store-uiUXBU1N.js → sidebar-store-CF3b12-m.js} +1 -1
- package/build/assets/{skill-card-pill-row-BPYKQ3IN.js → skill-card-pill-row-_gWe1Tws.js} +1 -1
- package/build/assets/skill-icon-badge-C-zbaXbD.js +1 -0
- package/build/assets/skills-plugins-BwoXKtrR.js +1 -0
- package/build/assets/skills-settings-Crq-fZSt.js +2 -0
- package/build/assets/{styled-tooltip-B14i_Uac.js → styled-tooltip-CdnCJ67u.js} +1 -1
- package/build/assets/syntax-highlighter-CZK2ab-O.js +1 -0
- package/build/assets/{task-list-tab-DyfgG4MC.js → task-list-tab-CONOO9iI.js} +1 -1
- package/build/assets/telemetry-CC32dJYW.js +2 -0
- package/build/assets/{terminal-DRXt2Lr4.js → terminal-CTkDpIU-.js} +1 -1
- package/build/assets/{toggle-switch-DX_k418f.js → toggle-switch-yVIzmJLM.js} +1 -1
- package/build/assets/{typography-CzfoD9DY.js → typography-BBVEW0un.js} +1 -1
- package/build/assets/{use-acp-credential-form-Bm8qXdlc.js → use-acp-credential-form-CIsp8hJe.js} +1 -1
- package/build/assets/use-activate-agent-profile-BfcTTJJG.js +1 -0
- package/build/assets/{use-active-agent-profile-hI-x-UBa.js → use-active-agent-profile-CCeFtmk9.js} +1 -1
- package/build/assets/{use-active-conversation-2qeez40F.js → use-active-conversation-Badxj8w4.js} +1 -1
- package/build/assets/{use-agent-profiles-0pr5bLS7.js → use-agent-profiles-BSWVN6hH.js} +1 -1
- package/build/assets/{use-agent-state-C6peDXUm.js → use-agent-state-BzRrhoPd.js} +1 -1
- package/build/assets/use-backends-health-BsZikyFW.js +1 -0
- package/build/assets/{use-can-manage-org-profiles-Ck_bsNbH.js → use-can-manage-org-profiles-Do6mYf6P.js} +1 -1
- package/build/assets/{use-cloud-current-user-id-DUCSxNjY.js → use-cloud-current-user-id-Cx3B_0-w.js} +1 -1
- package/build/assets/use-config-D9zUVw5b.js +1 -0
- package/build/assets/{use-create-conversation-r1JHfKO5.js → use-create-conversation-vvl0kvu7.js} +1 -1
- package/build/assets/{use-create-secret-Cf2N11d2.js → use-create-secret-CB7Dvd4s.js} +1 -1
- package/build/assets/use-event-store-BlpSUF7N.js +4 -0
- package/build/assets/{use-handle-plan-click-CsAW3FlH.js → use-handle-plan-click-DDZkew9p.js} +1 -1
- package/build/assets/use-is-creating-conversation-fxSzN778.js +1 -0
- package/build/assets/{use-launch-skill-in-chat-DJWEfVc5.js → use-launch-skill-in-chat-D6_n1fs3.js} +1 -1
- package/build/assets/use-llm-profiles-CNQm7HYS.js +1 -0
- package/build/assets/use-plugins-marketplace-CloojomS.js +1 -0
- package/build/assets/use-runtime-is-ready-Bx_4cfar.js +1 -0
- package/build/assets/{use-save-agent-profile-RqUGqTv6.js → use-save-agent-profile-Bj7N-1jS.js} +1 -1
- package/build/assets/{use-save-settings-Chvzeu2s.js → use-save-settings-BMsb2wk_.js} +1 -1
- package/build/assets/use-settings-B9XEmh7i.js +1 -0
- package/build/assets/use-settings-nav-items-BGfBS0yL.js +16 -0
- package/build/assets/{use-skills-xrVoKYrF.js → use-skills-CSRbvPle.js} +1 -1
- package/build/assets/{use-task-list-CfisapBW.js → use-task-list-CTIVLrQA.js} +1 -1
- package/build/assets/use-tracking-DjdCssvp.js +1 -0
- package/build/assets/{use-user-conversation-CnE4zhOA.js → use-user-conversation-BCpFn-Ei.js} +1 -1
- package/build/assets/{useTranslation-Cbf5AGg_.js → useTranslation-CHm_6BRr.js} +1 -1
- package/build/assets/{utils-DB9LsAzA.js → utils-CrRpzbM2.js} +1 -1
- package/build/assets/vendor-markdown-DzO4uO_0.js +37 -0
- package/build/assets/{vendor~browser-wXQ-WZEC.js → vendor~browser-Byfuq5J-.js} +1 -1
- package/build/assets/{vendor~browser-tab-CsMb-pta.js → vendor~browser-tab-BLk3qxhw.js} +1 -1
- package/build/assets/{vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~dhilvkxv-eGLBu60s.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~dhilvkxv-DTJ_cjR5.js} +2 -2
- package/build/assets/{vendor~files-tab-B-5fBohe.js → vendor~files-tab-XmnauIZI.js} +1 -1
- package/build/assets/{vendor~launch-_Km3J77E.js → vendor~launch-DeC8QhXQ.js} +1 -1
- package/build/assets/{vendor~root-layout~conversation-panel~conversation~shared-conversation-BrguKXCn.js → vendor~root-layout~conversation-panel~conversation~shared-conversation-DDmLzCzm.js} +1 -1
- package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation-YrfJYTQw.js +1 -0
- package/build/assets/{vendor~root-layout~index-home~home~conversation-panel~conversation~launch~skills-settings~a~j2jlu22h-mC0v44WR.js → vendor~root-layout~index-home~home~conversation-panel~conversation~launch~skills-settings~a~j2jlu22h-DoaS51iW.js} +123 -3
- package/build/assets/{vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation~aler~gfu7qdtz-BOKQkbc6.js → vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation~aler~gfu7qdtz-DEYwoy8u.js} +1 -1
- package/build/assets/vendor~root-layout~index-home~home~mcp~automations-list~onboarding-modal-DZHLw5Sr.js +1 -0
- package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~ftka0fnu-cFNmfAE6.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~ftka0fnu-UJ4BNDJP.js} +1 -1
- package/build/assets/{verification-settings-CfkrXoSa.js → verification-settings-uwOfc16F.js} +1 -1
- package/build/index.html +4 -4
- package/build/locales/ar/openhands.json +38 -4
- package/build/locales/ca/openhands.json +38 -4
- package/build/locales/de/openhands.json +38 -4
- package/build/locales/en/openhands.json +38 -4
- package/build/locales/es/openhands.json +38 -4
- package/build/locales/fr/openhands.json +38 -4
- package/build/locales/it/openhands.json +38 -4
- package/build/locales/ja/openhands.json +38 -4
- package/build/locales/ko-KR/openhands.json +38 -4
- package/build/locales/no/openhands.json +38 -4
- package/build/locales/pt/openhands.json +38 -4
- package/build/locales/tr/openhands.json +38 -4
- package/build/locales/uk/openhands.json +38 -4
- package/build/locales/zh-CN/openhands.json +38 -4
- package/build/locales/zh-TW/openhands.json +38 -4
- package/config/defaults.json +7 -3
- package/dist/api/agent-canvas-updates.cjs +2 -0
- package/dist/api/agent-canvas-updates.cjs.map +1 -0
- package/dist/api/agent-canvas-updates.d.ts +7 -0
- package/dist/api/agent-canvas-updates.js +19 -0
- package/dist/api/agent-canvas-updates.js.map +1 -0
- package/dist/api/agent-server-adapter.cjs +1 -1
- package/dist/api/agent-server-adapter.cjs.map +1 -1
- package/dist/api/agent-server-adapter.d.ts +3 -0
- package/dist/api/agent-server-adapter.js +1 -0
- package/dist/api/agent-server-adapter.js.map +1 -1
- package/dist/api/agent-server-compatibility.cjs +1 -1
- package/dist/api/agent-server-compatibility.cjs.map +1 -1
- package/dist/api/agent-server-compatibility.d.ts +5 -0
- package/dist/api/agent-server-compatibility.js +24 -15
- package/dist/api/agent-server-compatibility.js.map +1 -1
- package/dist/api/agent-server-config.cjs +1 -1
- package/dist/api/agent-server-config.cjs.map +1 -1
- package/dist/api/agent-server-config.js +11 -8
- package/dist/api/agent-server-config.js.map +1 -1
- package/dist/api/automation-service/automation-service.api.cjs +2 -0
- package/dist/api/automation-service/automation-service.api.cjs.map +1 -0
- package/dist/api/automation-service/automation-service.api.d.ts +3 -0
- package/dist/api/automation-service/automation-service.api.js +283 -0
- package/dist/api/automation-service/automation-service.api.js.map +1 -0
- package/dist/api/client-source.cjs +1 -1
- package/dist/api/client-source.cjs.map +1 -1
- package/dist/api/client-source.d.ts +3 -0
- package/dist/api/client-source.js +4 -4
- package/dist/api/client-source.js.map +1 -1
- package/dist/api/cloud/settings-service.api.cjs.map +1 -1
- package/dist/api/cloud/settings-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 +111 -109
- package/dist/api/conversation-service/agent-server-conversation-service.api.js.map +1 -1
- package/dist/api/mcp-health/mcp-health-store.cjs +2 -0
- package/dist/api/mcp-health/mcp-health-store.cjs.map +1 -0
- package/dist/api/mcp-health/mcp-health-store.d.ts +22 -0
- package/dist/api/mcp-health/mcp-health-store.js +45 -0
- package/dist/api/mcp-health/mcp-health-store.js.map +1 -0
- package/dist/api/mcp-health/probe-mcp-server-health.cjs +2 -0
- package/dist/api/mcp-health/probe-mcp-server-health.cjs.map +1 -0
- package/dist/api/mcp-health/probe-mcp-server-health.d.ts +31 -0
- package/dist/api/mcp-health/probe-mcp-server-health.js +57 -0
- package/dist/api/mcp-health/probe-mcp-server-health.js.map +1 -0
- package/dist/api/mcp-service/mcp-service.api.cjs +1 -1
- package/dist/api/mcp-service/mcp-service.api.cjs.map +1 -1
- package/dist/api/mcp-service/mcp-service.api.js +66 -46
- package/dist/api/mcp-service/mcp-service.api.js.map +1 -1
- package/dist/api/plugins-management-service.cjs.map +1 -1
- package/dist/api/plugins-management-service.d.ts +6 -1
- package/dist/api/plugins-management-service.js.map +1 -1
- package/dist/api/plugins-service.d.ts +30 -2
- package/dist/api/secrets-service.cjs +1 -1
- package/dist/api/secrets-service.cjs.map +1 -1
- package/dist/api/secrets-service.d.ts +6 -6
- package/dist/api/secrets-service.js +8 -3
- package/dist/api/secrets-service.js.map +1 -1
- package/dist/api/settings-service/settings-service.api.cjs +1 -1
- package/dist/api/settings-service/settings-service.api.cjs.map +1 -1
- package/dist/api/settings-service/settings-service.api.d.ts +1 -1
- package/dist/api/settings-service/settings-service.api.js +1 -0
- package/dist/api/settings-service/settings-service.api.js.map +1 -1
- package/dist/components/conversation-events/chat/event-message-components/critic-result-display.cjs +1 -1
- package/dist/components/conversation-events/chat/event-message-components/critic-result-display.js +5 -5
- package/dist/components/features/backends/backend-form-modal.cjs +1 -1
- package/dist/components/features/backends/backend-form-modal.cjs.map +1 -1
- package/dist/components/features/backends/backend-form-modal.d.ts +4 -1
- package/dist/components/features/backends/backend-form-modal.js +15 -16
- package/dist/components/features/backends/backend-form-modal.js.map +1 -1
- package/dist/components/features/backends/backend-selector.cjs +1 -1
- package/dist/components/features/backends/backend-selector.cjs.map +1 -1
- package/dist/components/features/backends/backend-selector.js +103 -102
- package/dist/components/features/backends/backend-selector.js.map +1 -1
- package/dist/components/features/backends/manage-backends-modal.cjs +1 -1
- package/dist/components/features/backends/manage-backends-modal.cjs.map +1 -1
- package/dist/components/features/backends/manage-backends-modal.js +85 -73
- package/dist/components/features/backends/manage-backends-modal.js.map +1 -1
- 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 +131 -129
- package/dist/components/features/chat/chat-interface.js.map +1 -1
- package/dist/components/features/chat/confirmation-mode-enabled.cjs +1 -1
- package/dist/components/features/chat/confirmation-mode-enabled.js +4 -4
- package/dist/components/features/chat/skill-install-restart-banner.cjs +2 -0
- package/dist/components/features/chat/skill-install-restart-banner.cjs.map +1 -0
- package/dist/components/features/chat/skill-install-restart-banner.d.ts +11 -0
- package/dist/components/features/chat/skill-install-restart-banner.js +63 -0
- package/dist/components/features/chat/skill-install-restart-banner.js.map +1 -0
- 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.js +1 -1
- package/dist/components/features/conversation/right-panel-toggle.js.map +1 -1
- package/dist/components/features/conversation-panel/conversation-panel.cjs +1 -1
- package/dist/components/features/conversation-panel/conversation-panel.js +10 -10
- package/dist/components/features/mcp-page/custom-server-editor.cjs +1 -1
- package/dist/components/features/mcp-page/custom-server-editor.cjs.map +1 -1
- package/dist/components/features/mcp-page/custom-server-editor.js +78 -77
- package/dist/components/features/mcp-page/custom-server-editor.js.map +1 -1
- package/dist/components/features/mcp-page/install-server-modal.cjs +1 -1
- package/dist/components/features/mcp-page/install-server-modal.cjs.map +1 -1
- package/dist/components/features/mcp-page/install-server-modal.d.ts +4 -1
- package/dist/components/features/mcp-page/install-server-modal.js +135 -136
- 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.cjs.map +1 -1
- package/dist/components/features/mcp-page/installed-server-card.js +40 -34
- package/dist/components/features/mcp-page/installed-server-card.js.map +1 -1
- package/dist/components/features/mcp-page/mcp-server-health.cjs +2 -0
- package/dist/components/features/mcp-page/mcp-server-health.cjs.map +1 -0
- package/dist/components/features/mcp-page/mcp-server-health.d.ts +18 -0
- package/dist/components/features/mcp-page/mcp-server-health.js +117 -0
- package/dist/components/features/mcp-page/mcp-server-health.js.map +1 -0
- package/dist/components/features/plugins/build-plugins-view-model.d.ts +10 -1
- package/dist/components/features/plugins/plugin-files-section.d.ts +13 -0
- package/dist/components/features/settings/agent-canvas-update-card.cjs +2 -0
- package/dist/components/features/settings/agent-canvas-update-card.cjs.map +1 -0
- package/dist/components/features/settings/agent-canvas-update-card.d.ts +7 -0
- package/dist/components/features/settings/agent-canvas-update-card.js +170 -0
- package/dist/components/features/settings/agent-canvas-update-card.js.map +1 -0
- package/dist/components/features/settings/integrations-settings-link.cjs +2 -0
- package/dist/components/features/settings/integrations-settings-link.cjs.map +1 -0
- package/dist/components/features/settings/integrations-settings-link.d.ts +5 -0
- package/dist/components/features/settings/integrations-settings-link.js +41 -0
- package/dist/components/features/settings/integrations-settings-link.js.map +1 -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 -1
- package/dist/components/features/settings/settings-desktop-sidebar.cjs +1 -1
- package/dist/components/features/settings/settings-desktop-sidebar.cjs.map +1 -1
- package/dist/components/features/settings/settings-desktop-sidebar.js +31 -21
- package/dist/components/features/settings/settings-desktop-sidebar.js.map +1 -1
- package/dist/components/features/settings/settings-mobile-drawer.cjs +1 -1
- package/dist/components/features/settings/settings-mobile-drawer.cjs.map +1 -1
- package/dist/components/features/settings/settings-mobile-drawer.js +40 -30
- package/dist/components/features/settings/settings-mobile-drawer.js.map +1 -1
- package/dist/components/features/skills/extensions-navigation.cjs +1 -1
- package/dist/components/features/skills/extensions-navigation.cjs.map +1 -1
- package/dist/components/features/skills/extensions-navigation.js +54 -33
- package/dist/components/features/skills/extensions-navigation.js.map +1 -1
- package/dist/config/defaults.cjs +1 -1
- package/dist/config/defaults.cjs.map +1 -1
- package/dist/config/defaults.js +7 -3
- package/dist/config/defaults.js.map +1 -1
- package/dist/constants/acp-providers.cjs.map +1 -1
- package/dist/constants/acp-providers.js.map +1 -1
- package/dist/contexts/conversation-websocket-context.cjs +2 -2
- package/dist/contexts/conversation-websocket-context.cjs.map +1 -1
- package/dist/contexts/conversation-websocket-context.js +169 -166
- package/dist/contexts/conversation-websocket-context.js.map +1 -1
- package/dist/hooks/mutation/use-delete-llm-profile.cjs +1 -1
- package/dist/hooks/mutation/use-delete-llm-profile.js +1 -0
- package/dist/hooks/mutation/use-delete-mcp-server.cjs +1 -1
- package/dist/hooks/mutation/use-delete-mcp-server.cjs.map +1 -1
- package/dist/hooks/mutation/use-delete-mcp-server.js +8 -6
- package/dist/hooks/mutation/use-delete-mcp-server.js.map +1 -1
- package/dist/hooks/mutation/use-rename-llm-profile.cjs +1 -1
- package/dist/hooks/mutation/use-rename-llm-profile.js +1 -0
- package/dist/hooks/mutation/use-save-settings.cjs +1 -1
- package/dist/hooks/mutation/use-save-settings.js +3 -3
- package/dist/hooks/mutation/use-update-mcp-server.cjs +1 -1
- package/dist/hooks/mutation/use-update-mcp-server.cjs.map +1 -1
- package/dist/hooks/mutation/use-update-mcp-server.js +11 -9
- package/dist/hooks/mutation/use-update-mcp-server.js.map +1 -1
- 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 +4 -0
- package/dist/hooks/query/query-keys.js +2 -2
- package/dist/hooks/query/query-keys.js.map +1 -1
- package/dist/hooks/query/use-automation-sdk-version.cjs +2 -0
- package/dist/hooks/query/use-automation-sdk-version.cjs.map +1 -0
- package/dist/hooks/query/use-automation-sdk-version.d.ts +3 -0
- package/dist/hooks/query/use-automation-sdk-version.js +63 -0
- package/dist/hooks/query/use-automation-sdk-version.js.map +1 -0
- package/dist/hooks/query/use-latest-agent-canvas-version.cjs +2 -0
- package/dist/hooks/query/use-latest-agent-canvas-version.cjs.map +1 -0
- package/dist/hooks/query/use-latest-agent-canvas-version.d.ts +10 -0
- package/dist/hooks/query/use-latest-agent-canvas-version.js +19 -0
- package/dist/hooks/query/use-latest-agent-canvas-version.js.map +1 -0
- package/dist/hooks/query/use-plugin-file-content.d.ts +7 -0
- package/dist/hooks/query/use-resolved-workspaces.cjs +1 -1
- package/dist/hooks/query/use-resolved-workspaces.cjs.map +1 -1
- package/dist/hooks/query/use-resolved-workspaces.js +25 -26
- package/dist/hooks/query/use-resolved-workspaces.js.map +1 -1
- package/dist/hooks/query/use-search-subdirs.cjs +1 -1
- package/dist/hooks/query/use-search-subdirs.cjs.map +1 -1
- package/dist/hooks/query/use-search-subdirs.d.ts +5 -0
- package/dist/hooks/query/use-search-subdirs.js +16 -4
- package/dist/hooks/query/use-search-subdirs.js.map +1 -1
- 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.d.ts +19 -3
- package/dist/hooks/query/use-task-polling.js +36 -35
- package/dist/hooks/query/use-task-polling.js.map +1 -1
- package/dist/hooks/use-device-flow.cjs +1 -1
- package/dist/hooks/use-device-flow.js +6 -6
- package/dist/hooks/use-llm-configured.cjs +1 -1
- package/dist/hooks/use-llm-configured.js +3 -3
- package/dist/hooks/use-mcp-server-health.cjs +2 -0
- package/dist/hooks/use-mcp-server-health.cjs.map +1 -0
- package/dist/hooks/use-mcp-server-health.d.ts +11 -0
- package/dist/hooks/use-mcp-server-health.js +18 -0
- package/dist/hooks/use-mcp-server-health.js.map +1 -0
- package/dist/hooks/use-skill-installs.cjs +2 -0
- package/dist/hooks/use-skill-installs.cjs.map +1 -0
- package/dist/hooks/use-skill-installs.d.ts +10 -0
- package/dist/hooks/use-skill-installs.js +21 -0
- package/dist/hooks/use-skill-installs.js.map +1 -0
- package/dist/hooks/use-tracking.cjs +1 -1
- package/dist/hooks/use-tracking.cjs.map +1 -1
- package/dist/hooks/use-tracking.d.ts +3 -3
- package/dist/hooks/use-tracking.js +67 -52
- package/dist/hooks/use-tracking.js.map +1 -1
- package/dist/i18n/declaration.cjs +1 -1
- package/dist/i18n/declaration.cjs.map +1 -1
- package/dist/i18n/declaration.d.ts +35 -1
- 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 +623 -45
- package/dist/i18n/translation.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -2
- package/dist/lib/index.cjs +1 -1
- package/dist/lib/index.d.ts +0 -1
- package/dist/lib/index.js +0 -1
- package/dist/locales/ar/openhands.json +38 -4
- package/dist/locales/ca/openhands.json +38 -4
- package/dist/locales/de/openhands.json +38 -4
- package/dist/locales/en/openhands.json +38 -4
- package/dist/locales/es/openhands.json +38 -4
- package/dist/locales/fr/openhands.json +38 -4
- package/dist/locales/it/openhands.json +38 -4
- package/dist/locales/ja/openhands.json +38 -4
- package/dist/locales/ko-KR/openhands.json +38 -4
- package/dist/locales/no/openhands.json +38 -4
- package/dist/locales/pt/openhands.json +38 -4
- package/dist/locales/tr/openhands.json +38 -4
- package/dist/locales/uk/openhands.json +38 -4
- package/dist/locales/zh-CN/openhands.json +38 -4
- package/dist/locales/zh-TW/openhands.json +38 -4
- package/dist/node_modules/@openhands/extensions/integrations/catalog/atlassian-rovo.cjs +2 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/atlassian-rovo.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/atlassian-rovo.js +44 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/atlassian-rovo.js.map +1 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/atlassian.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/atlassian.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/atlassian.js +13 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/atlassian.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/github.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/github.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/github.js +21 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/github.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/linear.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/linear.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/linear.js +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/linear.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-outlook.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-outlook.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-outlook.js +13 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-outlook.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-teams.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-teams.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-teams.js +13 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/microsoft-teams.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/notion.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/notion.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/notion.js +13 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/notion.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/onedrive.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/onedrive.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/onedrive.js +13 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/onedrive.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/sharepoint.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/sharepoint.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/sharepoint.js +13 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/sharepoint.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/slack.cjs +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/slack.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/slack.js +16 -2
- package/dist/node_modules/@openhands/extensions/integrations/catalog/slack.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/integrations/catalog/vanta.cjs +2 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/vanta.cjs.map +1 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/vanta.js +46 -0
- package/dist/node_modules/@openhands/extensions/integrations/catalog/vanta.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 +74 -70
- package/dist/node_modules/@openhands/extensions/integrations/catalog-index.js.map +1 -1
- package/dist/node_modules/@openhands/extensions/skills/index.cjs +123 -3
- package/dist/node_modules/@openhands/extensions/skills/index.cjs.map +1 -1
- package/dist/node_modules/@openhands/extensions/skills/index.js +7 -1
- package/dist/node_modules/@openhands/extensions/skills/index.js.map +1 -1
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.js +9 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.js.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/info.cjs +2 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/info.cjs.map +1 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/info.js +21 -0
- package/dist/node_modules/lucide-react/dist/esm/icons/info.js.map +1 -0
- package/dist/package.cjs +1 -1
- package/dist/package.cjs.map +1 -1
- package/dist/package.js +10 -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 +113 -67
- package/dist/routes/app-settings.js.map +1 -1
- package/dist/routes/conversation.cjs +1 -1
- package/dist/routes/conversation.cjs.map +1 -1
- package/dist/routes/conversation.js +1 -1
- package/dist/routes/conversation.js.map +1 -1
- package/dist/routes/mcp.cjs +1 -1
- package/dist/routes/mcp.cjs.map +1 -1
- package/dist/routes/mcp.js +1 -0
- package/dist/routes/mcp.js.map +1 -1
- package/dist/services/cloud-funnel-analytics.cjs +1 -1
- package/dist/services/cloud-funnel-analytics.cjs.map +1 -1
- package/dist/services/cloud-funnel-analytics.d.ts +2 -2
- package/dist/services/cloud-funnel-analytics.js +18 -16
- package/dist/services/cloud-funnel-analytics.js.map +1 -1
- package/dist/services/settings.cjs +1 -1
- package/dist/services/settings.cjs.map +1 -1
- package/dist/services/settings.js +1 -0
- package/dist/services/settings.js.map +1 -1
- package/dist/services/telemetry-context.cjs +2 -0
- package/dist/services/telemetry-context.cjs.map +1 -0
- package/dist/services/telemetry-context.d.ts +17 -0
- package/dist/services/telemetry-context.js +27 -0
- package/dist/services/telemetry-context.js.map +1 -0
- package/dist/services/telemetry.cjs +1 -1
- package/dist/services/telemetry.cjs.map +1 -1
- package/dist/services/telemetry.d.ts +7 -5
- package/dist/services/telemetry.js +132 -123
- package/dist/services/telemetry.js.map +1 -1
- package/dist/stores/skill-install-banner-store.cjs +2 -0
- package/dist/stores/skill-install-banner-store.cjs.map +1 -0
- package/dist/stores/skill-install-banner-store.d.ts +32 -0
- package/dist/stores/skill-install-banner-store.js +14 -0
- package/dist/stores/skill-install-banner-store.js.map +1 -0
- 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 +35 -35
- package/dist/stores/use-event-store.js.map +1 -1
- package/dist/types/mcp-health.cjs +2 -0
- package/dist/types/mcp-health.cjs.map +1 -0
- package/dist/types/mcp-health.d.ts +21 -0
- package/dist/types/mcp-health.js +6 -0
- package/dist/types/mcp-health.js.map +1 -0
- package/dist/types/settings.d.ts +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.d.ts +5 -0
- package/dist/utils/handle-event-for-ui.js +71 -57
- 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.cjs.map +1 -1
- package/dist/utils/mcp-credential-validation.js +32 -16
- package/dist/utils/mcp-credential-validation.js.map +1 -1
- package/dist/utils/mcp-server-health-key.cjs +2 -0
- package/dist/utils/mcp-server-health-key.cjs.map +1 -0
- package/dist/utils/mcp-server-health-key.d.ts +16 -0
- package/dist/utils/mcp-server-health-key.js +23 -0
- package/dist/utils/mcp-server-health-key.js.map +1 -0
- package/dist/utils/mcp-test-error-message.cjs +2 -0
- package/dist/utils/mcp-test-error-message.cjs.map +1 -0
- package/dist/utils/mcp-test-error-message.d.ts +8 -0
- package/dist/utils/mcp-test-error-message.js +14 -0
- package/dist/utils/mcp-test-error-message.js.map +1 -0
- package/dist/utils/redact-mcp-secrets.cjs +2 -0
- package/dist/utils/redact-mcp-secrets.cjs.map +1 -0
- package/dist/utils/redact-mcp-secrets.d.ts +13 -0
- package/dist/utils/redact-mcp-secrets.js +57 -0
- package/dist/utils/redact-mcp-secrets.js.map +1 -0
- package/dist/utils/settings-utils.cjs.map +1 -1
- package/dist/utils/settings-utils.js.map +1 -1
- package/dist/utils/skill-install-events.cjs +3 -0
- package/dist/utils/skill-install-events.cjs.map +1 -0
- package/dist/utils/skill-install-events.d.ts +16 -0
- package/dist/utils/skill-install-events.js +26 -0
- package/dist/utils/skill-install-events.js.map +1 -0
- package/dist/utils/title-llm-profile.cjs +2 -0
- package/dist/utils/title-llm-profile.cjs.map +1 -0
- package/dist/utils/title-llm-profile.d.ts +2 -0
- package/dist/utils/title-llm-profile.js +11 -0
- package/dist/utils/title-llm-profile.js.map +1 -0
- package/package.json +10 -3
- package/scripts/check-sdk-version-sync.mjs +6 -6
- package/scripts/check-translation-completeness.cjs +2 -0
- package/scripts/dev-process-utils.mjs +62 -1
- package/scripts/dev-safe.mjs +2 -2
- package/scripts/dev-static.mjs +5 -3
- package/scripts/dev-with-automation.mjs +98 -14
- package/scripts/download-node.mjs +382 -0
- package/scripts/download-uv.mjs +204 -0
- package/scripts/logger.mjs +64 -35
- package/build/assets/agent-server-compatibility-BWN-EIQn.js +0 -1
- package/build/assets/agent-server-conversation-service.api-DSPIkMwJ.js +0 -41
- package/build/assets/agent-settings-CgCnqaAA.js +0 -2
- package/build/assets/agent-settings-DDkSavD7.js +0 -1
- package/build/assets/api-key-entry-screen-iZc7n8AI.js +0 -1
- package/build/assets/app-settings-B5zyipxJ.js +0 -1
- package/build/assets/automation-export-BwRX6H32.js +0 -2
- package/build/assets/automations-list-lHAVzMoA.js +0 -1
- package/build/assets/backend-form-modal-RGcu909r.js +0 -1
- package/build/assets/browser-store-BI6uklCG.js +0 -1
- package/build/assets/chat-send-button-BZHG2hAW.js +0 -1
- package/build/assets/client-source-BZK8vRs2.js +0 -1
- package/build/assets/cloud-funnel-analytics-Zcv57hfT.js +0 -1
- package/build/assets/conversation-BoCYx8n2.js +0 -89
- package/build/assets/conversation-DgHqMjnY.js +0 -1
- package/build/assets/conversation-panel-78Rxh_-I.js +0 -1
- package/build/assets/conversation-state-store-B2Bp32XI.js +0 -1
- package/build/assets/declaration-BGsHjPEW.js +0 -1
- package/build/assets/extensions-hub-CCbLA7IM.js +0 -1
- package/build/assets/extensions-navigation-CPNjMNvR.js +0 -1
- package/build/assets/files-tab-store-DJsPxYdg.js +0 -1
- package/build/assets/files-tab-y4K7EXBO.js +0 -1
- package/build/assets/git-provider-icon-ITvsH4Ko.js +0 -1
- package/build/assets/home-BwbeOWwU.js +0 -1
- package/build/assets/home-DKPGQ5P3.js +0 -1
- package/build/assets/index-home-Bko2Itv5.js +0 -1
- package/build/assets/install-server-modal-Qk1gwyI8.js +0 -1
- package/build/assets/lesson-plan-DMCPdtrf.js +0 -4
- package/build/assets/llm-not-configured-banner-C1ktyb3C.js +0 -27
- package/build/assets/llm-settings-BBsZFi9l.js +0 -1
- package/build/assets/llm-settings-DFkJQr_w.js +0 -1
- package/build/assets/manage-backends-modal-CKQ46rvw.js +0 -1
- package/build/assets/manifest-03478bbf.js +0 -1
- package/build/assets/markdown-renderer-B4V2OMFP.js +0 -2
- package/build/assets/mcp-BapoJsDc.js +0 -9
- package/build/assets/messages-CUBFMY5o.js +0 -40
- package/build/assets/objectWithoutPropertiesLoose-BgYIAs2y.js +0 -1
- package/build/assets/onboarding-6NMkdNxV.js +0 -1
- package/build/assets/onboarding-modal-Q4AnpIdg.js +0 -1
- package/build/assets/recommended-automations-launcher-Bj7PuHY1.js +0 -58
- package/build/assets/refresh-cw-B9B7-vsy.js +0 -1
- package/build/assets/root-CDnuTToz.js +0 -2
- package/build/assets/root-CYWeTrWE.css +0 -1
- package/build/assets/root-layout-DfYVlcRG.js +0 -2
- package/build/assets/sdk-section-page-DLLNrYjI.js +0 -1
- package/build/assets/secrets-settings-CHy72A5C.js +0 -1
- package/build/assets/settings-B9S8UVQr.js +0 -1
- package/build/assets/settings-index-BKDl2CQ-.js +0 -1
- package/build/assets/settings-modal-DeK11CyT.js +0 -1
- package/build/assets/shared-conversation-9atDzTR4.js +0 -1
- package/build/assets/sidebar-mobile-menu-toggle-giMMZctn.js +0 -1
- package/build/assets/skills-plugins-Tropusio.js +0 -1
- package/build/assets/skills-settings-BvzBBCWk.js +0 -2
- package/build/assets/telemetry-C5JMEfqB.js +0 -2
- package/build/assets/use-activate-agent-profile-DlykqEfN.js +0 -1
- package/build/assets/use-backends-health-CLHPitJM.js +0 -1
- package/build/assets/use-config-B5r8erYt.js +0 -1
- package/build/assets/use-event-store-Bbaz51GR.js +0 -4
- package/build/assets/use-llm-profiles-Dr5__SlZ.js +0 -1
- package/build/assets/use-plugins-marketplace-BplU65ae.js +0 -1
- package/build/assets/use-runtime-is-ready-vCFOcLFa.js +0 -1
- package/build/assets/use-settings-CyxSlyTQ.js +0 -1
- package/build/assets/use-settings-nav-items-zEkSO_Bf.js +0 -16
- package/build/assets/use-tracking-D2Qg5Lpd.js +0 -1
- package/build/assets/useMutationState-OnAsCLA_.js +0 -1
- package/build/assets/vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-BD7v71DM.js +0 -2
- package/build/assets/vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-BT05Osu4.js +0 -28
- package/build/assets/vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-COhHANvV.js +0 -2
- package/build/assets/vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-DgzWSMRc.js +0 -2
- package/build/assets/vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-DqZatR3B.js +0 -7
- package/build/assets/vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-FghQ3Z1a.js +0 -1
- package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation-BTvhGHHG.js +0 -1
- package/build/assets/vendor~root-layout~index-home~home~mcp~automations-list~onboarding-modal-C4-GDgiF.js +0 -1
- package/dist/components/features/analytics/telemetry-consent-banner.cjs +0 -2
- package/dist/components/features/analytics/telemetry-consent-banner.cjs.map +0 -1
- package/dist/components/features/analytics/telemetry-consent-banner.d.ts +0 -29
- package/dist/components/features/analytics/telemetry-consent-banner.js +0 -59
- package/dist/components/features/analytics/telemetry-consent-banner.js.map +0 -1
- /package/build/assets/{__vite-browser-external-BQUj0sYu.js → __vite-browser-external-CKHVBTNC.js} +0 -0
- /package/build/assets/{agent-server-ui-style-scope-qhnhZHBV.js → agent-server-ui-style-scope-BvSa9on7.js} +0 -0
- /package/build/assets/{automation-LZB0MjdV.js → automation-BGiPmxFR.js} +0 -0
- /package/build/assets/{canvas-ui-COgjltGz.js → canvas-ui-CC4EJo-H.js} +0 -0
- /package/build/assets/{checkmark-h7udgXMM.js → checkmark-ygQB1AtV.js} +0 -0
- /package/build/assets/{close-DLFb5kfv.js → close-BjSA0HWT.js} +0 -0
- /package/build/assets/{code-tag-DYlAhEQY.js → code-tag-D9aPPbOe.js} +0 -0
- /package/build/assets/{common-CxbUL3nR.js → common-CCuqQy_S.js} +0 -0
- /package/build/assets/{conversation-local-storage-F6zVMM--.js → conversation-local-storage-BDjWPg0Z.js} +0 -0
- /package/build/assets/{copy-BLmGeJcd.js → copy-Dce7sOvS.js} +0 -0
- /package/build/assets/{copy-D1YGjP-C.js → copy-iPJAncAj.js} +0 -0
- /package/build/assets/{dist-CodhvuAP.js → dist-D9PhjOaq.js} +0 -0
- /package/build/assets/{environment-switch-store-DkjlKWzN.js → environment-switch-store-DHfcz4M4.js} +0 -0
- /package/build/assets/{extension-module-card-classes-9V3J9J_b.js → extension-module-card-classes-BpebKiN6.js} +0 -0
- /package/build/assets/{external-link-lhdITPqq.js → external-link-CpPMXxrV.js} +0 -0
- /package/build/assets/{folder-Bk311brm.js → folder-BabbYnbF.js} +0 -0
- /package/build/assets/{format-time-delta-DhDbkD7V.js → format-time-delta-BkAmJEPT.js} +0 -0
- /package/build/assets/{get-language-from-path-DBqBsCWH.js → get-language-from-path-CPNnuVhI.js} +0 -0
- /package/build/assets/{git-status-mapper-DnL9OC8_.js → git-status-mapper-BIXK0AAG.js} +0 -0
- /package/build/assets/{iconBase-Dz51Zn5x.js → iconBase-Ch-fOe8B.js} +0 -0
- /package/build/assets/{link-external-CaBmUEs_.js → link-external-DfKQroKX.js} +0 -0
- /package/build/assets/{list-todo-CAtvkzcy.js → list-todo-6J6zc8oS.js} +0 -0
- /package/build/assets/{llm-subscription-DtsX5Lhg.js → llm-subscription-Bvu8BLXc.js} +0 -0
- /package/build/assets/{loader-circle-CsAsfLIs.js → loader-circle-DGsqG5qw.js} +0 -0
- /package/build/assets/{map-provider-BbIb12oh.js → map-provider-BSvXvVR0.js} +0 -0
- /package/build/assets/{middleware-DYHYNAnP.js → middleware-_izt7V6U.js} +0 -0
- /package/build/assets/{modal-backdrop-zVwfOJZr.js → modal-backdrop-B7H42xHG.js} +0 -0
- /package/build/assets/{navigation-context-DPs2G0X8.js → navigation-context-cvyvI1WA.js} +0 -0
- /package/build/assets/{openhands-logo-bcNw5bkY.js → openhands-logo-pEw0nKFP.js} +0 -0
- /package/build/assets/{pencil-CWhApFIT.js → pencil-DmSqWUA3.js} +0 -0
- /package/build/assets/{react-DPDgL6du.js → react-MKQOkha9.js} +0 -0
- /package/build/assets/{search-BgOCR7_c.js → search-B5D5EuSn.js} +0 -0
- /package/build/assets/{search-dIQ09UY2.js → search-vnYL5jwV.js} +0 -0
- /package/build/assets/{settings-gear-MXCyZW0x.js → settings-gear-BOwF59Bs.js} +0 -0
- /package/build/assets/{settings-section-header-context-COMOIaxV.js → settings-section-header-context-CGgHZXrf.js} +0 -0
- /package/build/assets/{skills-EqzxYBvT.js → skills-arUOHLcS.js} +0 -0
- /package/build/assets/{square-chevron-right-DE-JN-2Z.js → square-chevron-right-EizCGtgq.js} +0 -0
- /package/build/assets/{switch-skeleton-DqQwalyu.js → switch-skeleton-BjPRx1QD.js} +0 -0
- /package/build/assets/{terminal-Cgf___rK.js → terminal-a57bHgZs.js} +0 -0
- /package/build/assets/{trash-2-BU6BlW4i.js → trash-2-CF3hilrY.js} +0 -0
- /package/build/assets/{u-check-circle-BqoIxNz_.js → u-check-circle-WGqHdtfO.js} +0 -0
- /package/build/assets/{u-check-circle-half-MsShT8Ec.js → u-check-circle-half-LiwZkuFe.js} +0 -0
- /package/build/assets/{u-edit-DL5LgKon.js → u-edit-BwHepAPi.js} +0 -0
- /package/build/assets/{use-breakpoint-BP3lqLMx.js → use-breakpoint-B-O0lQ84.js} +0 -0
- /package/build/assets/{use-click-outside-element-D9BYdANT.js → use-click-outside-element-DLQIMQrz.js} +0 -0
- /package/build/assets/{use-is-authed-BezEyfeh.js → use-is-authed-BSeo4coy.js} +0 -0
- /package/build/assets/{use-onboarding-completion-C_Swglzp.js → use-onboarding-completion-C0hPNGpw.js} +0 -0
- /package/build/assets/{v4-DbCkTSoU.js → v4-q4yWTlMz.js} +0 -0
- /package/build/assets/{vendor~browser-By2MVv_N.js → vendor~browser-UwB1jbAZ.js} +0 -0
- /package/build/assets/{vendor~conversation-panel~conversation~alert-banner-CxfzCmkN.js → vendor~conversation-panel~conversation~alert-banner-DHDkknt5.js} +0 -0
- /package/build/assets/{vendor~index-home~home~conversation-panel~conversation-ChmYLVgz.js → vendor~index-home~home~conversation-panel~conversation-Bff9cq5J.js} +0 -0
- /package/build/assets/{vendor~module-D5a_AClf.js → vendor~module-D4DeFV4J.js} +0 -0
- /package/build/assets/{vendor~terminal-CnKZILnC.js → vendor~terminal-B7Eiak0-.js} +0 -0
- /package/build/assets/{x-ZE4iplpF.js → x-DQB_00VJ.js} +0 -0
- /package/build/assets/{x-mark-Batp6gXa.js → x-mark-B32XuEwS.js} +0 -0
|
@@ -22,52 +22,53 @@ var y = (e, t) => {
|
|
|
22
22
|
plugins: n
|
|
23
23
|
});
|
|
24
24
|
}, b = () => {
|
|
25
|
-
let { conversationId:
|
|
26
|
-
queryKey: ["start-task",
|
|
27
|
-
queryFn: async () =>
|
|
28
|
-
enabled: !!
|
|
25
|
+
let { conversationId: e } = t(), n = !!e && e.startsWith("task-"), r = n ? e.replace("task-", "") : null, a = i({
|
|
26
|
+
queryKey: ["start-task", r],
|
|
27
|
+
queryFn: async () => r ? l.getStartTask(r) : null,
|
|
28
|
+
enabled: !!r,
|
|
29
29
|
refetchInterval: (e) => {
|
|
30
30
|
let t = e.state.data;
|
|
31
31
|
return !t || t.status === "READY" || t.status === "ERROR" ? !1 : 3e3;
|
|
32
32
|
},
|
|
33
33
|
retry: !1
|
|
34
|
-
})
|
|
34
|
+
});
|
|
35
|
+
return {
|
|
36
|
+
isTask: n,
|
|
37
|
+
taskId: r,
|
|
38
|
+
conversationId: n ? null : e ?? null,
|
|
39
|
+
task: a.data,
|
|
40
|
+
taskStatus: a.data?.status,
|
|
41
|
+
taskDetail: a.data?.detail,
|
|
42
|
+
taskError: a.error,
|
|
43
|
+
isLoadingTask: a.isLoading,
|
|
44
|
+
repositoryInfo: {
|
|
45
|
+
selectedRepository: a.data?.request?.selected_repository,
|
|
46
|
+
selectedBranch: a.data?.request?.selected_branch,
|
|
47
|
+
gitProvider: a.data?.request?.git_provider
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
}, x = () => {
|
|
51
|
+
let i = b(), { task: o, taskId: s } = i, { conversationId: c } = t(), { navigate: l } = e(), x = v(null);
|
|
35
52
|
return _(() => {
|
|
36
|
-
if (!
|
|
37
|
-
let e = p(
|
|
53
|
+
if (!c) return;
|
|
54
|
+
let e = p(c);
|
|
38
55
|
e && (a.getState().reassignPendingMessages(e.fromConversationId, e.toConversationId), f(e.toConversationId));
|
|
39
|
-
}, [
|
|
40
|
-
let e =
|
|
41
|
-
!
|
|
42
|
-
await d(
|
|
43
|
-
let
|
|
44
|
-
m(
|
|
45
|
-
let i = n(
|
|
46
|
-
i && r(
|
|
56
|
+
}, [c]), g(() => {
|
|
57
|
+
let e = o?.app_conversation_id;
|
|
58
|
+
!s || o?.status !== "READY" || !e || x.current === s || (x.current = s, u(s, e), y(o, e), (async () => {
|
|
59
|
+
await d(s, e);
|
|
60
|
+
let t = `task-${s}`;
|
|
61
|
+
m(e, t), h(t, e);
|
|
62
|
+
let i = n(s);
|
|
63
|
+
i && r(e, { draftMessage: i }), l(`/conversations/${e}`, { replace: !0 });
|
|
47
64
|
})());
|
|
48
65
|
}, [
|
|
49
|
-
|
|
66
|
+
o,
|
|
50
67
|
s,
|
|
51
|
-
|
|
52
|
-
]),
|
|
53
|
-
S.current = null;
|
|
54
|
-
}, [b]), {
|
|
55
|
-
isTask: c,
|
|
56
|
-
taskId: b,
|
|
57
|
-
conversationId: c ? null : o ?? null,
|
|
58
|
-
task: x.data,
|
|
59
|
-
taskStatus: x.data?.status,
|
|
60
|
-
taskDetail: x.data?.detail,
|
|
61
|
-
taskError: x.error,
|
|
62
|
-
isLoadingTask: x.isLoading,
|
|
63
|
-
repositoryInfo: {
|
|
64
|
-
selectedRepository: x.data?.request?.selected_repository,
|
|
65
|
-
selectedBranch: x.data?.request?.selected_branch,
|
|
66
|
-
gitProvider: x.data?.request?.git_provider
|
|
67
|
-
}
|
|
68
|
-
};
|
|
68
|
+
l
|
|
69
|
+
]), i;
|
|
69
70
|
};
|
|
70
71
|
//#endregion
|
|
71
|
-
export { b as useTaskPolling };
|
|
72
|
+
export { b as useTaskPolling, x as useTaskPollingController };
|
|
72
73
|
|
|
73
74
|
//# sourceMappingURL=use-task-polling.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-task-polling.js","names":[],"sources":["../../../src/hooks/query/use-task-polling.ts"],"sourcesContent":["import { useEffect, useLayoutEffect, useRef } from \"react\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport AgentServerConversationService from \"#/api/conversation-service/agent-server-conversation-service.api\";\nimport type { AppConversationStartTask } from \"#/api/conversation-service/agent-server-conversation-service.types\";\nimport {\n getStoredConversationMetadata,\n setStoredConversationMetadata,\n toPluginCoordinates,\n} from \"#/api/conversation-metadata-store\";\nimport { useNavigation } from \"#/context/navigation-context\";\nimport { useOptionalConversationId } from \"#/hooks/use-conversation-id\";\nimport {\n consumePendingTaskDraft,\n setConversationState,\n} from \"#/utils/conversation-local-storage\";\nimport { useOptimisticUserMessageStore } from \"#/stores/optimistic-user-message-store\";\nimport { trackCloudConversationReady } from \"#/services/cloud-funnel-analytics\";\nimport { flushPendingTaskAttachments } from \"#/utils/flush-pending-task-attachments\";\nimport {\n clearPendingTaskMessageLink,\n consumeScheduledPendingTaskMessageReassign,\n linkPendingTaskMessages,\n schedulePendingTaskMessageReassign,\n} from \"#/utils/pending-task-message-link\";\n\nconst storeTaskPlugins = (\n task: AppConversationStartTask,\n conversationId: string,\n) => {\n const plugins = task.request.plugins?.map(toPluginCoordinates);\n if (!plugins?.length) return;\n\n const metadata = getStoredConversationMetadata(conversationId);\n setStoredConversationMetadata(conversationId, {\n ...metadata,\n selected_repository:\n metadata?.selected_repository ?? task.request.selected_repository ?? null,\n selected_branch:\n metadata?.selected_branch ?? task.request.selected_branch ?? null,\n git_provider: metadata?.git_provider ?? task.request.git_provider ?? null,\n plugins,\n });\n};\n\n/**\n *
|
|
1
|
+
{"version":3,"file":"use-task-polling.js","names":[],"sources":["../../../src/hooks/query/use-task-polling.ts"],"sourcesContent":["import { useEffect, useLayoutEffect, useRef } from \"react\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport AgentServerConversationService from \"#/api/conversation-service/agent-server-conversation-service.api\";\nimport type { AppConversationStartTask } from \"#/api/conversation-service/agent-server-conversation-service.types\";\nimport {\n getStoredConversationMetadata,\n setStoredConversationMetadata,\n toPluginCoordinates,\n} from \"#/api/conversation-metadata-store\";\nimport { useNavigation } from \"#/context/navigation-context\";\nimport { useOptionalConversationId } from \"#/hooks/use-conversation-id\";\nimport {\n consumePendingTaskDraft,\n setConversationState,\n} from \"#/utils/conversation-local-storage\";\nimport { useOptimisticUserMessageStore } from \"#/stores/optimistic-user-message-store\";\nimport { trackCloudConversationReady } from \"#/services/cloud-funnel-analytics\";\nimport { flushPendingTaskAttachments } from \"#/utils/flush-pending-task-attachments\";\nimport {\n clearPendingTaskMessageLink,\n consumeScheduledPendingTaskMessageReassign,\n linkPendingTaskMessages,\n schedulePendingTaskMessageReassign,\n} from \"#/utils/pending-task-message-link\";\n\nconst storeTaskPlugins = (\n task: AppConversationStartTask,\n conversationId: string,\n) => {\n const plugins = task.request.plugins?.map(toPluginCoordinates);\n if (!plugins?.length) return;\n\n const metadata = getStoredConversationMetadata(conversationId);\n setStoredConversationMetadata(conversationId, {\n ...metadata,\n selected_repository:\n metadata?.selected_repository ?? task.request.selected_repository ?? null,\n selected_branch:\n metadata?.selected_branch ?? task.request.selected_branch ?? null,\n git_provider: metadata?.git_provider ?? task.request.git_provider ?? null,\n plugins,\n });\n};\n\n/**\n * Read the shared polling state for a V1 conversation start task.\n *\n * This hook:\n * - Detects if the conversationId URL param is a task ID (format: \"task-{uuid}\")\n * - Polls the V1 start task API every 3 seconds until status is READY or ERROR\n * - Exposes task status and details for UI components to show loading states and errors\n *\n * URL patterns:\n * - /conversations/task-{uuid} → Polls start task, then navigates to /conversations/{conversation-id}\n * - /conversations/{uuid or hex} → No polling (handled by useActiveConversation)\n *\n * The conversation route mounts useTaskPollingController once to own READY\n * side effects; other components can consume this hook without repeating them.\n */\nexport const useTaskPolling = () => {\n // Optional: the chat input shell renders on the home page too; polling\n // simply no-ops when there's no conversation id yet.\n const { conversationId } = useOptionalConversationId();\n\n // Check if this is a task ID (format: \"task-{uuid}\")\n const isTask = !!conversationId && conversationId.startsWith(\"task-\");\n const taskId = isTask ? conversationId!.replace(\"task-\", \"\") : null;\n\n // Poll the task if this is a task ID\n const taskQuery = useQuery({\n queryKey: [\"start-task\", taskId],\n queryFn: async () => {\n if (!taskId) return null;\n return AgentServerConversationService.getStartTask(taskId);\n },\n enabled: !!taskId,\n refetchInterval: (query) => {\n const task = query.state.data;\n if (!task) return false;\n\n // Stop polling if ready or error\n if (task.status === \"READY\" || task.status === \"ERROR\") {\n return false;\n }\n\n // Poll every 3 seconds while task is in progress\n return 3000;\n },\n retry: false,\n });\n\n return {\n isTask,\n taskId,\n conversationId: isTask ? null : (conversationId ?? null),\n task: taskQuery.data,\n taskStatus: taskQuery.data?.status,\n taskDetail: taskQuery.data?.detail,\n taskError: taskQuery.error,\n isLoadingTask: taskQuery.isLoading,\n // Repository information from task request\n repositoryInfo: {\n selectedRepository: taskQuery.data?.request?.selected_repository,\n selectedBranch: taskQuery.data?.request?.selected_branch,\n gitProvider: taskQuery.data?.request?.git_provider,\n },\n };\n};\n\n/** Own the task lifecycle side effects once at the conversation route. */\nexport const useTaskPollingController = () => {\n const polling = useTaskPolling();\n const { task, taskId } = polling;\n const { conversationId } = useOptionalConversationId();\n const { navigate } = useNavigation();\n const handledReadyTaskIdRef = useRef<string | null>(null);\n\n // Reassign optimistic pending messages before paint on the real conversation\n // route. Doing this in the ready handler before navigate leaves a frame where\n // the URL still points at `task-{uuid}` but pending is keyed to the real id.\n useLayoutEffect(() => {\n if (!conversationId) {\n return;\n }\n\n const pendingReassign =\n consumeScheduledPendingTaskMessageReassign(conversationId);\n if (!pendingReassign) {\n return;\n }\n\n useOptimisticUserMessageStore\n .getState()\n .reassignPendingMessages(\n pendingReassign.fromConversationId,\n pendingReassign.toConversationId,\n );\n clearPendingTaskMessageLink(pendingReassign.toConversationId);\n }, [conversationId]);\n\n // Navigate to conversation ID when task is ready\n useEffect(() => {\n const appConversationId = task?.app_conversation_id;\n if (\n !taskId ||\n task?.status !== \"READY\" ||\n !appConversationId ||\n handledReadyTaskIdRef.current === taskId\n ) {\n return;\n }\n\n handledReadyTaskIdRef.current = taskId;\n trackCloudConversationReady(taskId, appConversationId);\n storeTaskPlugins(task, appConversationId);\n\n void (async () => {\n await flushPendingTaskAttachments(taskId, appConversationId);\n\n const taskConversationId = `task-${taskId}`;\n linkPendingTaskMessages(appConversationId, taskConversationId);\n schedulePendingTaskMessageReassign(taskConversationId, appConversationId);\n\n const pendingDraft = consumePendingTaskDraft(taskId);\n if (pendingDraft) {\n setConversationState(appConversationId, {\n draftMessage: pendingDraft,\n });\n }\n\n navigate(`/conversations/${appConversationId}`, { replace: true });\n })();\n }, [task, taskId, navigate]);\n\n return polling;\n};\n"],"mappings":";;;;;;;;;;;;AAyBA,IAAM,KACJ,GACA,MACG;CACH,IAAM,IAAU,EAAK,QAAQ,SAAS,IAAI,EAAoB;AAC9D,KAAI,CAAC,GAAS,OAAQ;CAEtB,IAAM,IAAW,EAA8B,EAAe;AAC9D,GAA8B,GAAgB;EAC5C,GAAG;EACH,qBACE,GAAU,uBAAuB,EAAK,QAAQ,uBAAuB;EACvE,iBACE,GAAU,mBAAmB,EAAK,QAAQ,mBAAmB;EAC/D,cAAc,GAAU,gBAAgB,EAAK,QAAQ,gBAAgB;EACrE;EACD,CAAC;GAkBS,UAAuB;CAGlC,IAAM,EAAE,sBAAmB,GAA2B,EAGhD,IAAS,CAAC,CAAC,KAAkB,EAAe,WAAW,QAAQ,EAC/D,IAAS,IAAS,EAAgB,QAAQ,SAAS,GAAG,GAAG,MAGzD,IAAY,EAAS;EACzB,UAAU,CAAC,cAAc,EAAO;EAChC,SAAS,YACF,IACE,EAA+B,aAAa,EAAO,GADtC;EAGtB,SAAS,CAAC,CAAC;EACX,kBAAkB,MAAU;GAC1B,IAAM,IAAO,EAAM,MAAM;AASzB,UARI,CAAC,KAGD,EAAK,WAAW,WAAW,EAAK,WAAW,UACtC,KAIF;;EAET,OAAO;EACR,CAAC;AAEF,QAAO;EACL;EACA;EACA,gBAAgB,IAAS,OAAQ,KAAkB;EACnD,MAAM,EAAU;EAChB,YAAY,EAAU,MAAM;EAC5B,YAAY,EAAU,MAAM;EAC5B,WAAW,EAAU;EACrB,eAAe,EAAU;EAEzB,gBAAgB;GACd,oBAAoB,EAAU,MAAM,SAAS;GAC7C,gBAAgB,EAAU,MAAM,SAAS;GACzC,aAAa,EAAU,MAAM,SAAS;GACvC;EACF;GAIU,UAAiC;CAC5C,IAAM,IAAU,GAAgB,EAC1B,EAAE,SAAM,cAAW,GACnB,EAAE,sBAAmB,GAA2B,EAChD,EAAE,gBAAa,GAAe,EAC9B,IAAwB,EAAsB,KAAK;AA2DzD,QAtDA,QAAsB;AACpB,MAAI,CAAC,EACH;EAGF,IAAM,IACJ,EAA2C,EAAe;AACvD,QAIL,EACG,UAAU,CACV,wBACC,EAAgB,oBAChB,EAAgB,iBACjB,EACH,EAA4B,EAAgB,iBAAiB;IAC5D,CAAC,EAAe,CAAC,EAGpB,QAAgB;EACd,IAAM,IAAoB,GAAM;AAE9B,GAAC,KACD,GAAM,WAAW,WACjB,CAAC,KACD,EAAsB,YAAY,MAKpC,EAAsB,UAAU,GAChC,EAA4B,GAAQ,EAAkB,EACtD,EAAiB,GAAM,EAAkB,GAEnC,YAAY;AAChB,SAAM,EAA4B,GAAQ,EAAkB;GAE5D,IAAM,IAAqB,QAAQ;AAEnC,GADA,EAAwB,GAAmB,EAAmB,EAC9D,EAAmC,GAAoB,EAAkB;GAEzE,IAAM,IAAe,EAAwB,EAAO;AAOpD,GANI,KACF,EAAqB,GAAmB,EACtC,cAAc,GACf,CAAC,EAGJ,EAAS,kBAAkB,KAAqB,EAAE,SAAS,IAAM,CAAC;MAChE;IACH;EAAC;EAAM;EAAQ;EAAS,CAAC,EAErB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=require(`../_virtual/_rolldown/runtime.cjs`),t=require(`../node_modules/@openhands/typescript-client/dist/client/device-flow-client.cjs`),n=require(`../
|
|
1
|
+
const e=require(`../_virtual/_rolldown/runtime.cjs`),t=require(`../node_modules/@openhands/typescript-client/dist/client/device-flow-client.cjs`),n=require(`../services/cloud-funnel-analytics.cjs`),r=require(`../api/device-flow-client.cjs`);let i=require(`react`);i=e.__toESM(i,1);var a={status:`idle`,verificationUrl:null,userCode:null,apiKey:null,error:null,errorCode:null};function o(){let[e,o]=i.default.useState(a),s=i.default.useRef(null),c=i.default.useCallback((e,i)=>{s.current?.abort();let c=new AbortController;s.current=c,o({...a,status:`starting`}),(async()=>{let s;try{s=await r.startDeviceFlow(e)}catch(e){if(c.signal.aborted)return;let n=e instanceof Error?e.message:`Failed to start device flow`,r=e instanceof t.DeviceFlowError?e.code:void 0;o({...a,status:`error`,error:n,errorCode:r??null});return}if(!c.signal.aborted){n.trackCloudDeviceAuthorizationStarted(e,i),o({...a,status:`awaiting_authorization`,verificationUrl:s.verification_uri_complete,userCode:s.user_code});try{let t=await r.pollForToken(e,s.device_code,{interval:s.interval,signal:c.signal});if(c.signal.aborted)return;n.trackCloudDeviceAuthorizationSucceeded(e,i),o({...a,status:`success`,apiKey:t.access_token})}catch(e){if(c.signal.aborted)return;if(e instanceof t.DeviceFlowError&&e.code===`cancelled`){o(a);return}let n=e instanceof Error?e.message:`Authorization failed`,r=e instanceof t.DeviceFlowError?e.code:void 0;o({...a,status:`error`,error:n,errorCode:r??null})}}})()},[]),l=i.default.useCallback(()=>{s.current?.abort(),s.current=null,o(a)},[]),u=i.default.useCallback(()=>{s.current?.abort(),s.current=null,o(a)},[]);return i.default.useEffect(()=>()=>{s.current?.abort()},[]),{...e,start:c,cancel:l,reset:u}}exports.useDeviceFlow=o;
|
|
2
2
|
//# sourceMappingURL=use-device-flow.cjs.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DeviceFlowError as e } from "../node_modules/@openhands/typescript-client/dist/client/device-flow-client.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { trackCloudDeviceAuthorizationStarted as t, trackCloudDeviceAuthorizationSucceeded as n } from "../services/cloud-funnel-analytics.js";
|
|
3
|
+
import { pollForToken as r, startDeviceFlow as i } from "../api/device-flow-client.js";
|
|
4
4
|
import a from "react";
|
|
5
5
|
//#region src/hooks/use-device-flow.ts
|
|
6
6
|
var o = {
|
|
@@ -21,7 +21,7 @@ function s() {
|
|
|
21
21
|
}), (async () => {
|
|
22
22
|
let l;
|
|
23
23
|
try {
|
|
24
|
-
l = await
|
|
24
|
+
l = await i(a);
|
|
25
25
|
} catch (t) {
|
|
26
26
|
if (u.signal.aborted) return;
|
|
27
27
|
let n = t instanceof Error ? t.message : "Failed to start device flow", r = t instanceof e ? t.code : void 0;
|
|
@@ -34,19 +34,19 @@ function s() {
|
|
|
34
34
|
return;
|
|
35
35
|
}
|
|
36
36
|
if (!u.signal.aborted) {
|
|
37
|
-
|
|
37
|
+
t(a, s), c({
|
|
38
38
|
...o,
|
|
39
39
|
status: "awaiting_authorization",
|
|
40
40
|
verificationUrl: l.verification_uri_complete,
|
|
41
41
|
userCode: l.user_code
|
|
42
42
|
});
|
|
43
43
|
try {
|
|
44
|
-
let e = await
|
|
44
|
+
let e = await r(a, l.device_code, {
|
|
45
45
|
interval: l.interval,
|
|
46
46
|
signal: u.signal
|
|
47
47
|
});
|
|
48
48
|
if (u.signal.aborted) return;
|
|
49
|
-
|
|
49
|
+
n(a, s), c({
|
|
50
50
|
...o,
|
|
51
51
|
status: "success",
|
|
52
52
|
apiKey: e.access_token
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`./query/query-keys.cjs`),t=require(`../node_modules/@tanstack/react-query/build/modern/useQuery.cjs`),n=require(`../contexts/active-backend-context.cjs`),r=require(`../api/profiles-service/profiles-service.api.cjs`),i=require(`../constants/llm-subscription.cjs`),a=require(`./query/use-
|
|
1
|
+
require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`./query/query-keys.cjs`),t=require(`../node_modules/@tanstack/react-query/build/modern/useQuery.cjs`),n=require(`../contexts/active-backend-context.cjs`),r=require(`../api/profiles-service/profiles-service.api.cjs`),i=require(`../constants/llm-subscription.cjs`),a=require(`./query/use-llm-profiles.cjs`),o=require(`./query/use-settings.cjs`),s=require(`./use-active-agent-profile.cjs`),c=require(`./query/use-config.cjs`),l=require(`../utils/settings-utils.cjs`);function u(){let{data:u,isLoading:d,isError:f}=o.useSettings(),{data:p,isLoading:m,isError:h}=c.useConfig(),{data:g,isLoading:_,isError:v}=a.useLlmProfiles(),{backend:y,orgId:b}=n.useActiveBackend(),x=y.kind===`local`,{activeProfile:S,isLoading:C}=s.useActiveAgentProfile(),w=(S?.agent_kind??u?.agent_settings?.agent_kind)===`acp`,T=u?.llm_api_key_set===!0,E=S?.agent_kind===`openhands`?S.llm_profile_ref:void 0,D=(E?g?.profiles.find(e=>e.name===E):void 0)??g?.profiles.find(e=>e.name===g?.active_profile),O=D?.api_key_set===!0,k=x&&!!D&&!O,{data:A,isLoading:j,isError:M}=t.useQuery({queryKey:[...e.LLM_PROFILES_QUERY_KEYS.all,y.id,b,`detail`,D?.name],queryFn:()=>r.default.getProfile(D.name),...e.CONFIG_CACHE_OPTIONS,enabled:k,meta:{disableToast:!0}}),N=k&&i.isSubscriptionLlmConfig(A?.config),P=l.isSettingsPageHidden(`/settings/llm`,p?.feature_flags);return{isConfigured:w||P||(x?O||N:T),isLoading:d||f&&!u||m||h&&!p||_||v&&!g||C||k&&(j||M&&!A)}}exports.useLlmConfigured=u;
|
|
2
2
|
//# sourceMappingURL=use-llm-configured.cjs.map
|
|
@@ -3,14 +3,14 @@ import { useQuery as n } from "../node_modules/@tanstack/react-query/build/moder
|
|
|
3
3
|
import { useActiveBackend as r } from "../contexts/active-backend-context.js";
|
|
4
4
|
import i from "../api/profiles-service/profiles-service.api.js";
|
|
5
5
|
import { isSubscriptionLlmConfig as a } from "../constants/llm-subscription.js";
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
6
|
+
import { useLlmProfiles as o } from "./query/use-llm-profiles.js";
|
|
7
|
+
import { useSettings as s } from "./query/use-settings.js";
|
|
8
8
|
import { useActiveAgentProfile as c } from "./use-active-agent-profile.js";
|
|
9
9
|
import { useConfig as l } from "./query/use-config.js";
|
|
10
10
|
import { isSettingsPageHidden as u } from "../utils/settings-utils.js";
|
|
11
11
|
//#region src/hooks/use-llm-configured.ts
|
|
12
12
|
function d() {
|
|
13
|
-
let { data: d, isLoading: f, isError: p } =
|
|
13
|
+
let { data: d, isLoading: f, isError: p } = s(), { data: m, isLoading: h, isError: g } = l(), { data: _, isLoading: v, isError: y } = o(), { backend: b, orgId: x } = r(), S = b.kind === "local", { activeProfile: C, isLoading: w } = c(), T = (C?.agent_kind ?? d?.agent_settings?.agent_kind) === "acp", E = d?.llm_api_key_set === !0, D = C?.agent_kind === "openhands" ? C.llm_profile_ref : void 0, O = (D ? _?.profiles.find((e) => e.name === D) : void 0) ?? _?.profiles.find((e) => e.name === _?.active_profile), k = O?.api_key_set === !0, A = S && !!O && !k, { data: j, isLoading: M, isError: N } = n({
|
|
14
14
|
queryKey: [
|
|
15
15
|
...t.all,
|
|
16
16
|
b.id,
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require(`../_virtual/_rolldown/runtime.cjs`),t=require(`../api/mcp-health/mcp-health-store.cjs`),n=require(`../utils/mcp-server-health-key.cjs`),r=require(`../api/mcp-health/probe-mcp-server-health.cjs`),i=require(`../types/mcp-health.cjs`);let a=require(`react`);a=e.__toESM(a,1);function o(e){let o=n.getMcpServerHealthKey(e),s=a.default.useSyncExternalStore(t.subscribeMcpHealth,()=>t.getMcpHealthSnapshot()[o]??i.UNCHECKED_MCP_HEALTH),c=a.default.useRef(e);return c.current=e,{health:s,probe:a.default.useCallback(()=>r.probeMcpServerHealth(c.current),[]),reauthorize:a.default.useCallback(()=>r.reauthorizeMcpServerHealth(c.current),[])}}exports.useMcpServerHealth=o;
|
|
2
|
+
//# sourceMappingURL=use-mcp-server-health.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-mcp-server-health.cjs","names":[],"sources":["../../src/hooks/use-mcp-server-health.ts"],"sourcesContent":["import React from \"react\";\nimport {\n getMcpHealthSnapshot,\n subscribeMcpHealth,\n} from \"#/api/mcp-health/mcp-health-store\";\nimport {\n probeMcpServerHealth,\n reauthorizeMcpServerHealth,\n} from \"#/api/mcp-health/probe-mcp-server-health\";\nimport { UNCHECKED_MCP_HEALTH, type McpServerHealth } from \"#/types/mcp-health\";\nimport type { MCPServerConfig } from \"#/types/mcp-server\";\nimport { getMcpServerHealthKey } from \"#/utils/mcp-server-health-key\";\n\n/**\n * Subscribe to an installed server's connection health and expose the\n * probe actions bound to its current config.\n */\nexport function useMcpServerHealth(server: MCPServerConfig) {\n const key = getMcpServerHealthKey(server);\n const health: McpServerHealth = React.useSyncExternalStore(\n subscribeMcpHealth,\n () => getMcpHealthSnapshot()[key] ?? UNCHECKED_MCP_HEALTH,\n );\n\n // Keep the latest config without re-creating the callbacks every render\n // (settings refetches rebuild the server objects each time).\n const serverRef = React.useRef(server);\n serverRef.current = server;\n\n const probe = React.useCallback(\n () => probeMcpServerHealth(serverRef.current),\n [],\n );\n const reauthorize = React.useCallback(\n () => reauthorizeMcpServerHealth(serverRef.current),\n [],\n );\n\n return { health, probe, reauthorize };\n}\n"],"mappings":"iSAiBA,SAAgB,EAAmB,EAAyB,CAC1D,IAAM,EAAM,EAAA,sBAAsB,EAAO,CACnC,EAA0B,EAAA,QAAM,qBACpC,EAAA,uBACM,EAAA,sBAAsB,CAAC,IAAQ,EAAA,qBACtC,CAIK,EAAY,EAAA,QAAM,OAAO,EAAO,CAYtC,MAXA,GAAU,QAAU,EAWb,CAAE,SAAQ,MATH,EAAA,QAAM,gBACZ,EAAA,qBAAqB,EAAU,QAAQ,CAC7C,EAAE,CAOa,CAAO,YALJ,EAAA,QAAM,gBAClB,EAAA,2BAA2B,EAAU,QAAQ,CACnD,EAAE,CAGoB,CAAa"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type McpServerHealth } from "#/types/mcp-health";
|
|
2
|
+
import type { MCPServerConfig } from "#/types/mcp-server";
|
|
3
|
+
/**
|
|
4
|
+
* Subscribe to an installed server's connection health and expose the
|
|
5
|
+
* probe actions bound to its current config.
|
|
6
|
+
*/
|
|
7
|
+
export declare function useMcpServerHealth(server: MCPServerConfig): {
|
|
8
|
+
health: McpServerHealth;
|
|
9
|
+
probe: () => Promise<void>;
|
|
10
|
+
reauthorize: () => Promise<import("#/types/mcp-server").ExtendedMCPTestResponse | null>;
|
|
11
|
+
};
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { getMcpHealthSnapshot as e, subscribeMcpHealth as t } from "../api/mcp-health/mcp-health-store.js";
|
|
2
|
+
import { getMcpServerHealthKey as n } from "../utils/mcp-server-health-key.js";
|
|
3
|
+
import { probeMcpServerHealth as r, reauthorizeMcpServerHealth as i } from "../api/mcp-health/probe-mcp-server-health.js";
|
|
4
|
+
import { UNCHECKED_MCP_HEALTH as a } from "../types/mcp-health.js";
|
|
5
|
+
import o from "react";
|
|
6
|
+
//#region src/hooks/use-mcp-server-health.ts
|
|
7
|
+
function s(s) {
|
|
8
|
+
let c = n(s), l = o.useSyncExternalStore(t, () => e()[c] ?? a), u = o.useRef(s);
|
|
9
|
+
return u.current = s, {
|
|
10
|
+
health: l,
|
|
11
|
+
probe: o.useCallback(() => r(u.current), []),
|
|
12
|
+
reauthorize: o.useCallback(() => i(u.current), [])
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
//#endregion
|
|
16
|
+
export { s as useMcpServerHealth };
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=use-mcp-server-health.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-mcp-server-health.js","names":[],"sources":["../../src/hooks/use-mcp-server-health.ts"],"sourcesContent":["import React from \"react\";\nimport {\n getMcpHealthSnapshot,\n subscribeMcpHealth,\n} from \"#/api/mcp-health/mcp-health-store\";\nimport {\n probeMcpServerHealth,\n reauthorizeMcpServerHealth,\n} from \"#/api/mcp-health/probe-mcp-server-health\";\nimport { UNCHECKED_MCP_HEALTH, type McpServerHealth } from \"#/types/mcp-health\";\nimport type { MCPServerConfig } from \"#/types/mcp-server\";\nimport { getMcpServerHealthKey } from \"#/utils/mcp-server-health-key\";\n\n/**\n * Subscribe to an installed server's connection health and expose the\n * probe actions bound to its current config.\n */\nexport function useMcpServerHealth(server: MCPServerConfig) {\n const key = getMcpServerHealthKey(server);\n const health: McpServerHealth = React.useSyncExternalStore(\n subscribeMcpHealth,\n () => getMcpHealthSnapshot()[key] ?? UNCHECKED_MCP_HEALTH,\n );\n\n // Keep the latest config without re-creating the callbacks every render\n // (settings refetches rebuild the server objects each time).\n const serverRef = React.useRef(server);\n serverRef.current = server;\n\n const probe = React.useCallback(\n () => probeMcpServerHealth(serverRef.current),\n [],\n );\n const reauthorize = React.useCallback(\n () => reauthorizeMcpServerHealth(serverRef.current),\n [],\n );\n\n return { health, probe, reauthorize };\n}\n"],"mappings":";;;;;;AAiBA,SAAgB,EAAmB,GAAyB;CAC1D,IAAM,IAAM,EAAsB,EAAO,EACnC,IAA0B,EAAM,qBACpC,SACM,GAAsB,CAAC,MAAQ,EACtC,EAIK,IAAY,EAAM,OAAO,EAAO;AAYtC,QAXA,EAAU,UAAU,GAWb;EAAE;EAAQ,OATH,EAAM,kBACZ,EAAqB,EAAU,QAAQ,EAC7C,EAAE,CAOa;EAAO,aALJ,EAAM,kBAClB,EAA2B,EAAU,QAAQ,EACnD,EAAE,CAGoB;EAAa"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
require(`../_virtual/_rolldown/runtime.cjs`);const e=require(`../stores/use-event-store.cjs`),t=require(`../stores/skill-install-banner-store.cjs`),n=require(`../utils/skill-install-events.cjs`);let r=require(`react`);var i=i=>{let a=e.useEventStore(e=>e.events),o=e.useEventStore(e=>e.loadedConversationId),s=t.useSkillInstallBannerStore(e=>e.dismissedEventIds),c=t.useSkillInstallBannerStore(e=>e.dismiss),l=(0,r.useMemo)(()=>!i||i!==o?[]:n.detectSkillInstalls(a).filter(e=>!s[e.eventId]),[i,o,a,s]);return{installs:l,dismissAll:(0,r.useCallback)(()=>c(l.map(e=>e.eventId)),[c,l])}};exports.useSkillInstalls=i;
|
|
2
|
+
//# sourceMappingURL=use-skill-installs.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-skill-installs.cjs","names":[],"sources":["../../src/hooks/use-skill-installs.ts"],"sourcesContent":["import { useCallback, useMemo } from \"react\";\nimport { useEventStore } from \"#/stores/use-event-store\";\nimport { useSkillInstallBannerStore } from \"#/stores/skill-install-banner-store\";\nimport { detectSkillInstalls } from \"#/utils/skill-install-events\";\n\n/**\n * Skill installs performed by the agent in this conversation (via the\n * bundled add-skill flow), minus the ones the user dismissed. The event\n * store is global, so results are scoped to the conversation it currently\n * holds — a mismatched id (remount race) yields no installs.\n */\nexport const useSkillInstalls = (conversationId: string | null | undefined) => {\n const events = useEventStore((s) => s.events);\n const loadedConversationId = useEventStore((s) => s.loadedConversationId);\n const dismissedEventIds = useSkillInstallBannerStore(\n (s) => s.dismissedEventIds,\n );\n const dismiss = useSkillInstallBannerStore((s) => s.dismiss);\n\n const installs = useMemo(() => {\n if (!conversationId || conversationId !== loadedConversationId) return [];\n return detectSkillInstalls(events).filter(\n (install) => !dismissedEventIds[install.eventId],\n );\n }, [conversationId, loadedConversationId, events, dismissedEventIds]);\n\n const dismissAll = useCallback(\n () => dismiss(installs.map((install) => install.eventId)),\n [dismiss, installs],\n );\n\n return { installs, dismissAll };\n};\n"],"mappings":"0NAWA,IAAa,EAAoB,GAA8C,CAC7E,IAAM,EAAS,EAAA,cAAe,GAAM,EAAE,OAAO,CACvC,EAAuB,EAAA,cAAe,GAAM,EAAE,qBAAqB,CACnE,EAAoB,EAAA,2BACvB,GAAM,EAAE,kBACV,CACK,EAAU,EAAA,2BAA4B,GAAM,EAAE,QAAQ,CAEtD,GAAA,EAAA,EAAA,aACA,CAAC,GAAkB,IAAmB,EAA6B,EAAE,CAClE,EAAA,oBAAoB,EAAO,CAAC,OAChC,GAAY,CAAC,EAAkB,EAAQ,SACzC,CACA,CAAC,EAAgB,EAAsB,EAAQ,EAAkB,CAAC,CAOrE,MAAO,CAAE,WAAU,YAAA,EAAA,EAAA,iBAJX,EAAQ,EAAS,IAAK,GAAY,EAAQ,QAAQ,CAAC,CACzD,CAAC,EAAS,EAAS,CAGF,CAAY"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill installs performed by the agent in this conversation (via the
|
|
3
|
+
* bundled add-skill flow), minus the ones the user dismissed. The event
|
|
4
|
+
* store is global, so results are scoped to the conversation it currently
|
|
5
|
+
* holds — a mismatched id (remount race) yields no installs.
|
|
6
|
+
*/
|
|
7
|
+
export declare const useSkillInstalls: (conversationId: string | null | undefined) => {
|
|
8
|
+
installs: import("#/utils/skill-install-events").DetectedSkillInstall[];
|
|
9
|
+
dismissAll: () => void;
|
|
10
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { useEventStore as e } from "../stores/use-event-store.js";
|
|
2
|
+
import { useSkillInstallBannerStore as t } from "../stores/skill-install-banner-store.js";
|
|
3
|
+
import { detectSkillInstalls as n } from "../utils/skill-install-events.js";
|
|
4
|
+
import { useCallback as r, useMemo as i } from "react";
|
|
5
|
+
//#region src/hooks/use-skill-installs.ts
|
|
6
|
+
var a = (a) => {
|
|
7
|
+
let o = e((e) => e.events), s = e((e) => e.loadedConversationId), c = t((e) => e.dismissedEventIds), l = t((e) => e.dismiss), u = i(() => !a || a !== s ? [] : n(o).filter((e) => !c[e.eventId]), [
|
|
8
|
+
a,
|
|
9
|
+
s,
|
|
10
|
+
o,
|
|
11
|
+
c
|
|
12
|
+
]);
|
|
13
|
+
return {
|
|
14
|
+
installs: u,
|
|
15
|
+
dismissAll: r(() => l(u.map((e) => e.eventId)), [l, u])
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
//#endregion
|
|
19
|
+
export { a as useSkillInstalls };
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=use-skill-installs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-skill-installs.js","names":[],"sources":["../../src/hooks/use-skill-installs.ts"],"sourcesContent":["import { useCallback, useMemo } from \"react\";\nimport { useEventStore } from \"#/stores/use-event-store\";\nimport { useSkillInstallBannerStore } from \"#/stores/skill-install-banner-store\";\nimport { detectSkillInstalls } from \"#/utils/skill-install-events\";\n\n/**\n * Skill installs performed by the agent in this conversation (via the\n * bundled add-skill flow), minus the ones the user dismissed. The event\n * store is global, so results are scoped to the conversation it currently\n * holds — a mismatched id (remount race) yields no installs.\n */\nexport const useSkillInstalls = (conversationId: string | null | undefined) => {\n const events = useEventStore((s) => s.events);\n const loadedConversationId = useEventStore((s) => s.loadedConversationId);\n const dismissedEventIds = useSkillInstallBannerStore(\n (s) => s.dismissedEventIds,\n );\n const dismiss = useSkillInstallBannerStore((s) => s.dismiss);\n\n const installs = useMemo(() => {\n if (!conversationId || conversationId !== loadedConversationId) return [];\n return detectSkillInstalls(events).filter(\n (install) => !dismissedEventIds[install.eventId],\n );\n }, [conversationId, loadedConversationId, events, dismissedEventIds]);\n\n const dismissAll = useCallback(\n () => dismiss(installs.map((install) => install.eventId)),\n [dismiss, installs],\n );\n\n return { installs, dismissAll };\n};\n"],"mappings":";;;;;AAWA,IAAa,KAAoB,MAA8C;CAC7E,IAAM,IAAS,GAAe,MAAM,EAAE,OAAO,EACvC,IAAuB,GAAe,MAAM,EAAE,qBAAqB,EACnE,IAAoB,GACvB,MAAM,EAAE,kBACV,EACK,IAAU,GAA4B,MAAM,EAAE,QAAQ,EAEtD,IAAW,QACX,CAAC,KAAkB,MAAmB,IAA6B,EAAE,GAClE,EAAoB,EAAO,CAAC,QAChC,MAAY,CAAC,EAAkB,EAAQ,SACzC,EACA;EAAC;EAAgB;EAAsB;EAAQ;EAAkB,CAAC;AAOrE,QAAO;EAAE;EAAU,YALA,QACX,EAAQ,EAAS,KAAK,MAAY,EAAQ,QAAQ,CAAC,EACzD,CAAC,GAAS,EAAS,CAGF;EAAY"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
require(`../_virtual/_rolldown/runtime.cjs`)
|
|
1
|
+
const e=require(`../_virtual/_rolldown/runtime.cjs`),t=require(`../api/agent-server-compatibility.cjs`),n=require(`../contexts/active-backend-context.cjs`),r=require(`../services/telemetry-context.cjs`),i=require(`../services/telemetry.cjs`),a=require(`./query/use-automation-sdk-version.cjs`);let o=require(`react`);o=e.__toESM(o,1);var s=()=>{let{backend:e}=n.useActiveBackend(),s=a.useAutomationSdkVersion(),c=o.default.useCallback(()=>({backendKind:e.kind,agentServerVersion:e.kind===`local`?t.getCachedAgentServerVersion(e.host):null,automationSdkVersion:s??null}),[s,e.host,e.kind]);o.default.useEffect(()=>{i.setTelemetryBackendContext(c())},[c]);let l={current_url:window.location.href},u=(e,t={})=>{i.setTelemetryBackendContext(c()),i.trackEvent(e,{...l,...t})};return{trackLoginButtonClick:({provider:e})=>{u(`login_button_clicked`,{provider:e})},trackConversationCreated:({conversationId:e,taskId:t,hasRepository:n,gitProvider:r,hasWorkspace:i,workspaceMode:a,hasInitialQuery:o,agentType:s,hasParentConversation:c,entryPoint:l})=>{u(`conversation_created`,{conversation_id:e,task_id:t,is_start_task:e.startsWith(`task-`),has_repository:n,git_provider:r,has_workspace:i,workspace_mode:a,has_initial_query:o,agent_type:s,has_parent_conversation:c,entry_point:l})},trackPushButtonClick:()=>{u(`push_button_clicked`)},trackPullButtonClick:()=>{u(`pull_button_clicked`)},trackCreatePrButtonClick:()=>{u(`create_pr_button_clicked`)},trackUserSignupCompleted:()=>{u(`user_signup_completed`,{signup_timestamp:new Date().toISOString()})},trackPrebuiltAutomationEnabled:({automationId:e,automationName:t,automationCategory:n})=>{u(`prebuilt_automation_enabled`,{automation_id:e,automation_name:t,automation_category:n})},trackInitialQuerySubmitted:({entryPoint:e,queryCharacterLength:t,replayJsonSize:n})=>{u(`initial_query_submitted`,{entry_point:e,query_character_length:t,replay_json_size:n})},trackUserMessageSent:({sessionMessageCount:e,currentMessageLength:t})=>{u(`user_message_sent`,{session_message_count:e,current_message_length:t})},trackDownloadVsCodeButtonClicked:()=>{u(`download_via_vscode_button_clicked`)},trackSettingsSaved:({llmModel:e,llmApiKeySet:t,searchApiKeySet:n,remoteRuntimeResourceFactor:r})=>{u(`settings_saved`,{LLM_MODEL:e,LLM_API_KEY_SET:t,SEARCH_API_KEY_SET:n,REMOTE_RUNTIME_RESOURCE_FACTOR:r})},trackMcpConfigUpdated:({sseServersCount:e,stdioServersCount:t})=>{u(`mcp_config_updated`,{has_mcp_config:!0,sse_servers_count:e,stdio_servers_count:t})},trackDownloadTrajectoryButtonClicked:()=>{u(`download_trajectory_button_clicked`)},trackConversationExported:e=>{u(`conversation_exported`,{format:e})},trackAutomationCreated:({backendKind:e})=>{u(`automation_created`,{backend_kind:e})},trackAutomationExecuted:({backendKind:e})=>{u(`automation_executed`,{backend_kind:e})},trackAutomationDeleted:({backendKind:e})=>{u(`automation_deleted`,{backend_kind:e})},trackAutomationDeactivated:({backendKind:e})=>{u(`automation_deactivated`,{backend_kind:e})},trackAutomationEdited:({backendKind:e})=>{u(`automation_edited`,{backend_kind:e})},trackAutomationExported:({backendKind:e})=>{u(`automation_exported`,{backend_kind:e})},trackAutomationImported:({backendKind:e})=>{u(`automation_imported`,{backend_kind:e})},trackBackendAdded:({backendKind:e,connectionMethod:t,hasApiKey:n,source:i,agentServerVersion:a,backendVersion:o})=>{u(`backend_added`,{...r.getBackendTelemetryProperties({backendKind:e,agentServerVersion:a,backendVersion:o,connectionMethod:t}),has_api_key:n,source:i})},trackOnboardingStarted:()=>{u(`onboarding_started`)},trackOnboardingStepViewed:({step:e,stepIndex:t,totalSteps:n,agent:r})=>{u(`onboarding_step_viewed`,{step:e,step_index:t,total_steps:n,agent:r})},trackOnboardingCompleted:({agent:e})=>{u(`onboarding_completed`,{agent:e})},trackOnboardingSkipped:({step:e,stepIndex:t,totalSteps:n,agent:r})=>{u(`onboarding_skipped`,{step:e,step_index:t,total_steps:n,agent:r})}}};exports.useTracking=s;
|
|
2
2
|
//# sourceMappingURL=use-tracking.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-tracking.cjs","names":[],"sources":["../../src/hooks/use-tracking.ts"],"sourcesContent":["import { useSettings } from \"./query/use-settings\";\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 { 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 { data: settings } = useSettings();\n\n // Common properties included in all tracking events\n const commonProperties = {\n current_url: window.location.href,\n user_email: settings?.email || settings?.git_user_email || null,\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 void trackEvent(event, { ...properties, ...commonProperties });\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_created\", {\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 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 trackAutomationCreated = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_created\", { 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 trackAutomationDeactivated = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_deactivated\", { 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 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 isOpenhandsCloud,\n isCustomHost,\n hasApiKey,\n source,\n }: {\n backendKind: BackendKind;\n connectionMethod: \"manual\" | \"cloud_login\";\n isOpenhandsCloud: boolean;\n isCustomHost: boolean;\n hasApiKey: boolean;\n source?: CloudConnectionSource;\n }) => {\n track(\"backend_added\", {\n backend_kind: backendKind,\n connection_method: connectionMethod,\n is_openhands_cloud: isOpenhandsCloud,\n is_custom_host: isCustomHost,\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 trackInitialQuerySubmitted,\n trackUserMessageSent,\n trackDownloadVsCodeButtonClicked,\n trackSettingsSaved,\n trackMcpConfigUpdated,\n trackDownloadTrajectoryButtonClicked,\n trackConversationExported,\n trackAutomationCreated,\n trackAutomationExecuted,\n trackAutomationDeleted,\n trackAutomationDeactivated,\n trackAutomationEdited,\n trackAutomationExported,\n trackAutomationImported,\n trackBackendAdded,\n trackOnboardingStarted,\n trackOnboardingStepViewed,\n trackOnboardingCompleted,\n trackOnboardingSkipped,\n };\n};\n"],"mappings":"gIAeA,IAAa,MAAoB,CAC/B,GAAM,CAAE,KAAM,GAAa,EAAA,aAAa,CAGlC,EAAmB,CACvB,YAAa,OAAO,SAAS,KAC7B,WAAY,GAAU,OAAS,GAAU,gBAAkB,KAC5D,CAOK,GAAS,EAAe,EAAsC,EAAE,GAAK,CACpE,EAAA,WAAW,EAAO,CAAE,GAAG,EAAY,GAAG,EAAkB,CAAC,EAwRhE,MAAO,CACL,uBAtR6B,CAAE,cAAuC,CACtE,EAAM,uBAAwB,CAAE,WAAU,CAAC,EAsR3C,0BAnRgC,CAChC,iBACA,SACA,gBACA,cACA,eACA,gBACA,kBACA,YACA,wBACA,gBAYI,CACJ,EAAM,uBAAwB,CAC5B,gBAAiB,EACjB,QAAS,EACT,cAAe,EAAe,WAAW,QAAQ,CACjD,eAAgB,EAChB,aAAc,EACd,cAAe,EACf,eAAgB,EAChB,kBAAmB,EACnB,WAAY,EACZ,wBAAyB,EACzB,YAAa,EACd,CAAC,EAiPF,yBA9OiC,CACjC,EAAM,sBAAsB,EA8O5B,yBA3OiC,CACjC,EAAM,sBAAsB,EA2O5B,6BAxOqC,CACrC,EAAM,2BAA2B,EAwOjC,6BArOqC,CACrC,EAAM,wBAAyB,CAC7B,iBAAkB,IAAI,MAAM,CAAC,aAAa,CAC3C,CAAC,EAmOF,gCAhOsC,CACtC,eACA,iBACA,wBAKI,CACJ,EAAM,8BAA+B,CACnC,cAAe,EACf,gBAAiB,EACjB,oBAAqB,EACtB,CAAC,EAoNF,4BAjNkC,CAClC,aACA,uBACA,oBAKI,CACJ,EAAM,0BAA2B,CAC/B,YAAa,EACb,uBAAwB,EACxB,iBAAkB,EACnB,CAAC,EAqMF,sBAlM4B,CAC5B,sBACA,0BAII,CACJ,EAAM,oBAAqB,CACzB,sBAAuB,EACvB,uBAAwB,EACzB,CAAC,EAyLF,qCAtL6C,CAC7C,EAAM,qCAAqC,EAsL3C,oBAnL0B,CAC1B,WACA,eACA,kBACA,iCAMI,CACJ,EAAM,iBAAkB,CACtB,UAAW,EACX,gBAAiB,EACjB,mBAAoB,EACpB,+BAAgC,EACjC,CAAC,EAoKF,uBAjK6B,CAC7B,kBACA,uBAII,CACJ,EAAM,qBAAsB,CAC1B,eAAgB,GAChB,kBAAmB,EACnB,oBAAqB,EACtB,CAAC,EAuJF,yCApJiD,CACjD,EAAM,qCAAqC,EAoJ3C,0BAjJiC,GAAgC,CACjE,EAAM,wBAAyB,CAAE,SAAQ,CAAC,EAiJ1C,wBA9I8B,CAC9B,iBAGI,CACJ,EAAM,qBAAsB,CAAE,aAAc,EAAa,CAAC,EA0I1D,yBAvI+B,CAC/B,iBAGI,CACJ,EAAM,sBAAuB,CAAE,aAAc,EAAa,CAAC,EAmI3D,wBAhI8B,CAC9B,iBAGI,CACJ,EAAM,qBAAsB,CAAE,aAAc,EAAa,CAAC,EA4H1D,4BAzHkC,CAClC,iBAGI,CACJ,EAAM,yBAA0B,CAAE,aAAc,EAAa,CAAC,EAqH9D,uBAlH6B,CAC7B,iBAGI,CACJ,EAAM,oBAAqB,CAAE,aAAc,EAAa,CAAC,EA8GzD,yBA3G+B,CAC/B,iBAGI,CACJ,EAAM,sBAAuB,CAAE,aAAc,EAAa,CAAC,EAuG3D,yBApG+B,CAC/B,iBAGI,CACJ,EAAM,sBAAuB,CAAE,aAAc,EAAa,CAAC,EAgG3D,mBA7FyB,CACzB,cACA,mBACA,mBACA,eACA,YACA,YAQI,CACJ,EAAM,gBAAiB,CACrB,aAAc,EACd,kBAAmB,EACnB,mBAAoB,EACpB,eAAgB,EAChB,YAAa,EACb,SACD,CAAC,EAwEF,2BArEmC,CACnC,EAAM,qBAAqB,EAqE3B,2BAlEiC,CACjC,OACA,YACA,aACA,WAMI,CACJ,EAAM,yBAA0B,CAC9B,OACA,WAAY,EACZ,YAAa,EACb,QACD,CAAC,EAmDF,0BAhDgC,CAAE,WAA+B,CACjE,EAAM,uBAAwB,CAAE,QAAO,CAAC,EAgDxC,wBA7C8B,CAC9B,OACA,YACA,aACA,WAMI,CACJ,EAAM,qBAAsB,CAC1B,OACA,WAAY,EACZ,YAAa,EACb,QACD,CAAC,EA8BH"}
|
|
1
|
+
{"version":3,"file":"use-tracking.cjs","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 { getBackendTelemetryProperties } 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_created\", {\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 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 trackAutomationCreated = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_created\", { 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 trackAutomationDeactivated = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_deactivated\", { 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 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: \"manual\" | \"cloud_login\";\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 trackInitialQuerySubmitted,\n trackUserMessageSent,\n trackDownloadVsCodeButtonClicked,\n trackSettingsSaved,\n trackMcpConfigUpdated,\n trackDownloadTrajectoryButtonClicked,\n trackConversationExported,\n trackAutomationCreated,\n trackAutomationExecuted,\n trackAutomationDeleted,\n trackAutomationDeactivated,\n trackAutomationEdited,\n trackAutomationExported,\n trackAutomationImported,\n trackBackendAdded,\n trackOnboardingStarted,\n trackOnboardingStepViewed,\n trackOnboardingCompleted,\n trackOnboardingSkipped,\n };\n};\n"],"mappings":"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"}
|
|
@@ -78,13 +78,13 @@ export declare const useTracking: () => {
|
|
|
78
78
|
trackAutomationImported: ({ backendKind, }: {
|
|
79
79
|
backendKind: BackendKind;
|
|
80
80
|
}) => void;
|
|
81
|
-
trackBackendAdded: ({ backendKind, connectionMethod,
|
|
81
|
+
trackBackendAdded: ({ backendKind, connectionMethod, hasApiKey, source, agentServerVersion, backendVersion, }: {
|
|
82
82
|
backendKind: BackendKind;
|
|
83
83
|
connectionMethod: "manual" | "cloud_login";
|
|
84
|
-
isOpenhandsCloud: boolean;
|
|
85
|
-
isCustomHost: boolean;
|
|
86
84
|
hasApiKey: boolean;
|
|
87
85
|
source?: CloudConnectionSource;
|
|
86
|
+
agentServerVersion?: string | null;
|
|
87
|
+
backendVersion?: string | null;
|
|
88
88
|
}) => void;
|
|
89
89
|
trackOnboardingStarted: () => void;
|
|
90
90
|
trackOnboardingStepViewed: ({ step, stepIndex, totalSteps, agent, }: {
|