@openhands/agent-canvas 1.7.2 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (599) hide show
  1. package/README.md +1 -1
  2. package/README.windows.md +2 -2
  3. package/build/assets/{Trans-DP5rcauH.js → Trans-Bwpzk1wT.js} +1 -1
  4. package/build/assets/{acp-providers-BHKZvEm5.js → acp-providers-C921BlYB.js} +1 -1
  5. package/build/assets/active-backend-context-BiwzkzDy.js +2 -0
  6. package/build/assets/agent-context-settings-DXNT_dcw.js +1 -0
  7. package/build/assets/agent-profiles-settings-BymJf3EP.js +1 -0
  8. package/build/assets/agent-server-conversation-service.api-CYSWw-2g.js +41 -0
  9. package/build/assets/agent-settings-BjgQQe-_.js +1 -0
  10. package/build/assets/{agent-settings-BIOsUglV.js → agent-settings-WzqXk6B4.js} +2 -2
  11. package/build/assets/{alert-banner-C1nzoXBC.js → alert-banner-DR8EVyZM.js} +1 -1
  12. package/build/assets/api-error-message-e16L1kwH.js +1 -0
  13. package/build/assets/api-key-entry-screen-DI0I04O3.js +1 -0
  14. package/build/assets/app-settings-DGistSFV.js +1 -0
  15. package/build/assets/automation-C_eCrGyP.js +1 -0
  16. package/build/assets/automation-detail-DY6x2FW1.js +2 -0
  17. package/build/assets/automation-export-C09f-Lua.js +2 -0
  18. package/build/assets/automation-setup-route-CqKp0717.js +1 -0
  19. package/build/assets/automations-list-CqWJ7qXW.js +1 -0
  20. package/build/assets/{back-nav-button-Be_L157B.js → back-nav-button-D4ngzpSh.js} +1 -1
  21. package/build/assets/backend-form-modal-B8D5hBzK.js +1 -0
  22. package/build/assets/{backend-synced-settings-badge-BNpEylNP.js → backend-synced-settings-badge-BnzI8Ysj.js} +1 -1
  23. package/build/assets/{badge-DwgrwohM.js → badge-1Mf1iPcX.js} +1 -1
  24. package/build/assets/{base-modal-CSHhJTSr.js → base-modal-BBuy0WQQ.js} +1 -1
  25. package/build/assets/{brand-button-CQO8oqVo.js → brand-button-DGN6Y9o6.js} +1 -1
  26. package/build/assets/browser-D_ekTlTS.js +6 -0
  27. package/build/assets/{browser-tab-CEApjoEV.js → browser-tab-D4a4Ou_w.js} +1 -1
  28. package/build/assets/{chat-send-button-D4614wUz.js → chat-send-button-CgbcjD97.js} +1 -1
  29. package/build/assets/check-CPLXgluF.js +1 -0
  30. package/build/assets/chevron-down-CP4QHvyc.js +1 -0
  31. package/build/assets/circle-check-Dpy2_xSI.js +1 -0
  32. package/build/assets/{circle-plus-check-toggle-E3Ecb_gg.js → circle-plus-check-toggle-yTAS-nX3.js} +1 -1
  33. package/build/assets/cloud-funnel-analytics-CEOl5Gxr.js +1 -0
  34. package/build/assets/{combobox-caret-C8_eGdp2.js → combobox-caret-Bd2yySnF.js} +1 -1
  35. package/build/assets/command-menu-Bj6X4ckE.js +1 -0
  36. package/build/assets/condenser-settings-EAXQNR2E.js +1 -0
  37. package/build/assets/{confirmation-modal-gZtbojCm.js → confirmation-modal-NCUPr2-O.js} +1 -1
  38. package/build/assets/{context-menu-list-item-BTHGFhIx.js → context-menu-list-item-CrCrYuPF.js} +1 -1
  39. package/build/assets/conversation-BzyIcSwr.js +1 -0
  40. package/build/assets/conversation-CUJ0Vo8g.js +90 -0
  41. package/build/assets/conversation-panel-BzyIcSwr.js +1 -0
  42. package/build/assets/conversation-state-store-F62HvuI1.js +1 -0
  43. package/build/assets/{conversation-tab-empty-state-BCMHkGQk.js → conversation-tab-empty-state-BCZ7rUMH.js} +1 -1
  44. package/build/assets/{copy-B8Y5ufoR.js → copy-DCmZtz6n.js} +1 -1
  45. package/build/assets/{copy-to-clipboard-button-C4l3CMSd.js → copy-to-clipboard-button-D_Lp6-Fl.js} +1 -1
  46. package/build/assets/{device-verify-C_M7Z8xs.js → device-verify-DLmolX8Q.js} +1 -1
  47. package/build/assets/{dropdown-classes-DQlj-MpS.js → dropdown-classes-BB8rzqXL.js} +1 -1
  48. package/build/assets/{entry.client-DETaouwO.js → entry.client-BbIYOsIg.js} +2 -2
  49. package/build/assets/{enum-filter-dropdown-paB-lFSP.js → enum-filter-dropdown-C08-srev.js} +1 -1
  50. package/build/assets/{environment-switch-overlay-D0FgCMqs.js → environment-switch-overlay-BepBBX66.js} +1 -1
  51. package/build/assets/extensions-hub-R3KNv-5V.js +1 -0
  52. package/build/assets/extensions-navigation-CfWFmI1I.js +1 -0
  53. package/build/assets/{external-link-Cnnd6ikC.js → external-link-BdBSg8rk.js} +1 -1
  54. package/build/assets/files-tab-DEq8MbHu.js +1 -0
  55. package/build/assets/{form-control-classes-CSPevi7c.js → form-control-classes-DAfsCJTe.js} +1 -1
  56. package/build/assets/{format-time-delta-DuhE50B-.js → format-time-delta-CxfPJpzC.js} +1 -1
  57. package/build/assets/git-provider-icon-BZqqUPlm.js +1 -0
  58. package/build/assets/git-repo-dropdown-9WKINV6J.js +1 -0
  59. package/build/assets/git-repo-dropdown-DEpOwUez.js +1 -0
  60. package/build/assets/{highlighted-source-view-suUKd5if.js → highlighted-source-view-CX9oIoVT.js} +1 -1
  61. package/build/assets/home-CY0JaxiY.js +1 -0
  62. package/build/assets/home-CaNWlVvB.js +1 -0
  63. package/build/assets/home-store-Ch1ErdBc.js +1 -0
  64. package/build/assets/index-home-CaNWlVvB.js +1 -0
  65. package/build/assets/info-CmWQXtRQ.js +1 -0
  66. package/build/assets/install-server-modal-BWrudmZU.js +1 -0
  67. package/build/assets/{launch-Ccnhte5b.js → launch-B1POpHuP.js} +1 -1
  68. package/build/assets/{list-todo-_BXQzOiB.js → list-todo-DtiL3lTp.js} +1 -1
  69. package/build/assets/llm-not-configured-banner-3tMsM4K6.js +27 -0
  70. package/build/assets/llm-settings-CXo8iPNW.js +1 -0
  71. package/build/assets/llm-settings-D0W8mJDk.js +1 -0
  72. package/build/assets/{llm-subscription-service-W5BprsNA.js → llm-subscription-service-DBJbfd8Z.js} +1 -1
  73. package/build/assets/loader-circle-B4QDBARx.js +1 -0
  74. package/build/assets/{loading-spinner-CcpnCr_d.js → loading-spinner-DfZ_bhV7.js} +1 -1
  75. package/build/assets/manage-backends-modal-CwyWsiag.js +1 -0
  76. package/build/assets/manifest-39f4789d.js +1 -0
  77. package/build/assets/{markdown-renderer-CvOO0YIr.js → markdown-renderer-DgiLLhW6.js} +6 -6
  78. package/build/assets/mcp-DXG9LWrI.js +9 -0
  79. package/build/assets/mcp-marketplace-utils-DFmhKc5s.js +1 -0
  80. package/build/assets/messages-kBjKaAeA.js +40 -0
  81. package/build/assets/{modal-body-DQhiw-AR.js → modal-body-CMsDpalT.js} +1 -1
  82. package/build/assets/{modal-classes-YaEEa5eZ.js → modal-classes-B6PDrxXo.js} +1 -1
  83. package/build/assets/{modal-close-button-turIYn0t.js → modal-close-button-DyxBZaAb.js} +1 -1
  84. package/build/assets/{onboarding-BegDrOKn.js → onboarding-47hh2IHA.js} +1 -1
  85. package/build/assets/onboarding-modal-9BuvvROo.js +1 -0
  86. package/build/assets/organization-service.api-UDy63-oC.js +1 -0
  87. package/build/assets/{pencil-8_lvWDoZ.js → pencil-BjgtZmWp.js} +1 -1
  88. package/build/assets/{planner-tab-w6HT0N_A.js → planner-tab-BWk8885v.js} +1 -1
  89. package/build/assets/plugins-management-service-CjkgF2dd.js +1 -0
  90. package/build/assets/plus-DrKuuvMe.js +1 -0
  91. package/build/assets/profiles-service.api-CukSFLzz.js +1 -0
  92. package/build/assets/providers-CqUWC85T.js +1 -0
  93. package/build/assets/proxy-BBUG3sd2.js +1 -0
  94. package/build/assets/{puzzle-DXWdfaa7.js → puzzle-BoNc6zZ8.js} +1 -1
  95. package/build/assets/recommended-automations-launcher-ejxy1P27.js +1 -0
  96. package/build/assets/{refresh-cw-D7CYLy-d.js → refresh-cw-BrM5ZAZD.js} +1 -1
  97. package/build/assets/root-5S-M8SYa.js +2 -0
  98. package/build/assets/root-DZ39lS5f.css +1 -0
  99. package/build/assets/root-layout-BPqoa0gv.js +3 -0
  100. package/build/assets/schema-field-nImDoY6-.js +1 -0
  101. package/build/assets/{sdk-section-page-BW-i45yr.js → sdk-section-page-BxMrtUNV.js} +1 -1
  102. package/build/assets/search-Dc2qR4O2.js +1 -0
  103. package/build/assets/secrets-service-Dhjh3HhH.js +1 -0
  104. package/build/assets/{secrets-settings-D7U1ErCH.js → secrets-settings-CPdxceT_.js} +1 -1
  105. package/build/assets/segmented-toggle-Do6oyepX.js +1 -0
  106. package/build/assets/settings-BRbnfKEm.js +1 -0
  107. package/build/assets/{settings-dropdown-input-Dx6vlkgf.js → settings-dropdown-input-DYCULKpp.js} +1 -1
  108. package/build/assets/{settings-index-COAdxm2Q.js → settings-index-C9o2NBO0.js} +1 -1
  109. package/build/assets/settings-input-B-q2gkVy.js +1 -0
  110. package/build/assets/{settings-list-classes-gQdBahdt.js → settings-list-classes-WpQi0q1L.js} +1 -1
  111. package/build/assets/{settings-modal-CFnbQ8_4.js → settings-modal-CEK0AIx6.js} +1 -1
  112. package/build/assets/settings-service.api-CZiPD8__.js +1 -0
  113. package/build/assets/{settings-switch-UNSf8K8I.js → settings-switch-LqKdGxHL.js} +1 -1
  114. package/build/assets/shared-conversation-Bu-dQlgp.js +1 -0
  115. package/build/assets/{sidebar-layout-DXHtbEj1.js → sidebar-layout-oHBGQmLh.js} +1 -1
  116. package/build/assets/{sidebar-mobile-menu-toggle-U78hQRJ1.js → sidebar-mobile-menu-toggle-ND-hgygu.js} +1 -1
  117. package/build/assets/{sidebar-nav-link-pvUivfK2.js → sidebar-nav-link-CrujNA09.js} +1 -1
  118. package/build/assets/{sidebar-store-DwrYKwYr.js → sidebar-store-Bui-WNEr.js} +1 -1
  119. package/build/assets/{skill-card-pill-row-D7XCz5uk.js → skill-card-pill-row-CZBI7OqH.js} +1 -1
  120. package/build/assets/{skill-icon-badge-HqBWZ2Eq.js → skill-icon-badge-BOov_phZ.js} +1 -1
  121. package/build/assets/{skills-plugins-BPhaNpfx.js → skills-plugins-D0PiHWAD.js} +1 -1
  122. package/build/assets/{skills-settings-CcwMtnnJ.js → skills-settings-B43KArIz.js} +2 -2
  123. package/build/assets/{styled-tooltip-DsjDnR_W.js → styled-tooltip-C7grwnOX.js} +1 -1
  124. package/build/assets/{task-list-tab-BmaTwjaS.js → task-list-tab-R3ac6m7O.js} +1 -1
  125. package/build/assets/{terminal-BRcoba5B.js → terminal-yqkNdEAx.js} +1 -1
  126. package/build/assets/{toggle-switch-BptY3XRG.js → toggle-switch-BeSrbgCg.js} +1 -1
  127. package/build/assets/{trash-2-Bq4lHbTB.js → trash-2-wW5TWcdN.js} +1 -1
  128. package/build/assets/{typography-C6fuRTTT.js → typography-iYhzLlHO.js} +1 -1
  129. package/build/assets/{use-acp-credential-form-B0_pZ_uS.js → use-acp-credential-form-DUxbxmbq.js} +1 -1
  130. package/build/assets/use-activate-agent-profile-CDHA52tC.js +1 -0
  131. package/build/assets/use-agent-profiles-TsOdIyw5.js +1 -0
  132. package/build/assets/{use-can-manage-org-profiles-CrG1km7R.js → use-can-manage-org-profiles-Bt1M71u5.js} +1 -1
  133. package/build/assets/use-cloud-current-user-id-DWt7HCgf.js +1 -0
  134. package/build/assets/{use-config-Csy8EAP9.js → use-config-CxlEdf_v.js} +1 -1
  135. package/build/assets/{use-create-conversation-Dsa4nzU9.js → use-create-conversation-nOJ6Um5h.js} +1 -1
  136. package/build/assets/{use-create-secret-BnxuAjDt.js → use-create-secret-Dj5ang9x.js} +1 -1
  137. package/build/assets/use-is-authed-BT7Iud4U.js +1 -0
  138. package/build/assets/{use-is-creating-conversation-CIAcnd8M.js → use-is-creating-conversation-CAggrM75.js} +1 -1
  139. package/build/assets/use-llm-profiles-2Wc2db8u.js +1 -0
  140. package/build/assets/use-onboarding-completion-gxQlcEy2.js +1 -0
  141. package/build/assets/use-plugins-marketplace-CVO7sXYR.js +1 -0
  142. package/build/assets/use-save-agent-profile-D0wC5ExW.js +1 -0
  143. package/build/assets/{use-save-settings-BRh9p_fv.js → use-save-settings-L3aMaDeS.js} +1 -1
  144. package/build/assets/use-settings-8nt3DGxW.js +1 -0
  145. package/build/assets/use-settings-nav-items-DHAAD-zk.js +16 -0
  146. package/build/assets/use-skills-CE6miQ3r.js +1 -0
  147. package/build/assets/use-tracking-BGboadaZ.js +68 -0
  148. package/build/assets/{use-user-conversation-GnGhs_Ob.js → use-user-conversation-BIIpGUgM.js} +1 -1
  149. package/build/assets/useInfiniteQuery-BLRVmVPU.js +1 -0
  150. package/build/assets/{useMutation-DyQXZFEF.js → useMutation-CaSHLnX0.js} +1 -1
  151. package/build/assets/{useQueries-B3T1a7qt.js → useQueries--d_WWAzc.js} +1 -1
  152. package/build/assets/{useQuery-B38jBavx.js → useQuery-DiPh8LRJ.js} +1 -1
  153. package/build/assets/utils-BgGG1znF.js +1 -0
  154. package/build/assets/{vendor~browser-CIoZCqGs.js → vendor~browser-IVYgIgG1.js} +1 -1
  155. package/build/assets/{vendor~entry.client-Di4qO77Y.js → vendor~entry.client-BcYIVQvB.js} +1 -1
  156. package/build/assets/{vendor~entry.client-BfviqoVc.js → vendor~entry.client-CXM9oiAk.js} +1 -1
  157. package/build/assets/{vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~g4xrpilz-CJ7amdtQ.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~b0bpqexo-CbTboogo.js} +2 -2
  158. package/build/assets/{vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~f9xdmd0z-DLMP7bZx.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~d4by102p-C2f0ZhS-.js} +1 -1
  159. package/build/assets/{vendor~files-tab-vm3f67Pz.js → vendor~files-tab-C7RmQJwN.js} +1 -1
  160. package/build/assets/{vendor~index-home~home~conversation-panel~conversation-kX4LrGQC.js → vendor~index-home~home~conversation-panel~conversation-Bqp1ZqJM.js} +1 -1
  161. package/build/assets/{vendor~root-layout~conversation-panel~conversation-DpA6fir3.js → vendor~root-layout~conversation-panel~conversation-BCn8lzeG.js} +1 -1
  162. package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~automation-setup-route-B_L-gcOG.js +1 -0
  163. package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation-sjx0x5ac.js +1 -0
  164. package/build/assets/vendor~root-layout~index-home~home~mcp~automations-list~automation-setup-route~onboarding-modal-D7IDevqN.js +1 -0
  165. package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~bi2r7bko-Bw4AuHN1.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~dfc8ddxy-tTyxnjXT.js} +1 -1
  166. package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~hakxo2tj-ClV0p9g3.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~gy8zbn65-CGt6bWRT.js} +1 -1
  167. package/build/assets/{vendor~root-layout~index-home~home~conversation-panel~conversation~launch~skills-settings~a~eywn6ulz-BKxxr74w.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~dufan6ng-Dtdw8H0q.js} +17 -4
  168. package/build/assets/{verification-settings-CaCzojbc.js → verification-settings-DBsnSXC3.js} +1 -1
  169. package/build/assets/x-omAzpXkl.js +1 -0
  170. package/build/favicon-16x16.png +0 -0
  171. package/build/favicon-32x32.png +0 -0
  172. package/build/favicon.ico +0 -0
  173. package/build/index.html +4 -4
  174. package/build/locales/ar/openhands.json +39 -2
  175. package/build/locales/ca/openhands.json +39 -2
  176. package/build/locales/de/openhands.json +39 -2
  177. package/build/locales/en/openhands.json +40 -3
  178. package/build/locales/es/openhands.json +39 -2
  179. package/build/locales/fr/openhands.json +39 -2
  180. package/build/locales/it/openhands.json +39 -2
  181. package/build/locales/ja/openhands.json +39 -2
  182. package/build/locales/ko-KR/openhands.json +39 -2
  183. package/build/locales/no/openhands.json +39 -2
  184. package/build/locales/pt/openhands.json +39 -2
  185. package/build/locales/tr/openhands.json +39 -2
  186. package/build/locales/uk/openhands.json +39 -2
  187. package/build/locales/zh-CN/openhands.json +39 -2
  188. package/build/locales/zh-TW/openhands.json +39 -2
  189. package/config/defaults.json +4 -4
  190. package/dist/api/agent-server-adapter.cjs +3 -3
  191. package/dist/api/agent-server-adapter.cjs.map +1 -1
  192. package/dist/api/agent-server-adapter.d.ts +46 -6
  193. package/dist/api/agent-server-adapter.js +187 -168
  194. package/dist/api/agent-server-adapter.js.map +1 -1
  195. package/dist/api/agent-server-compatibility.cjs +1 -1
  196. package/dist/api/agent-server-compatibility.cjs.map +1 -1
  197. package/dist/api/agent-server-compatibility.d.ts +4 -0
  198. package/dist/api/agent-server-compatibility.js +41 -38
  199. package/dist/api/agent-server-compatibility.js.map +1 -1
  200. package/dist/api/automation-service/automation-service.api.cjs +1 -1
  201. package/dist/api/automation-service/automation-service.api.cjs.map +1 -1
  202. package/dist/api/automation-service/automation-service.api.d.ts +20 -0
  203. package/dist/api/automation-service/automation-service.api.js +136 -99
  204. package/dist/api/automation-service/automation-service.api.js.map +1 -1
  205. package/dist/api/backend-registry/storage.cjs +1 -1
  206. package/dist/api/backend-registry/storage.cjs.map +1 -1
  207. package/dist/api/backend-registry/storage.js +1 -1
  208. package/dist/api/backend-registry/storage.js.map +1 -1
  209. package/dist/api/backend-registry/types.d.ts +2 -0
  210. package/dist/api/cloud/conversation-service.api.cjs +1 -1
  211. package/dist/api/cloud/conversation-service.api.js +22 -22
  212. package/dist/api/mcp-service/mcp-service.api.cjs +1 -1
  213. package/dist/api/mcp-service/mcp-service.api.cjs.map +1 -1
  214. package/dist/api/mcp-service/mcp-service.api.js +19 -19
  215. package/dist/api/mcp-service/mcp-service.api.js.map +1 -1
  216. package/dist/api/settings-service/settings-service.api.cjs +1 -1
  217. package/dist/api/settings-service/settings-service.api.cjs.map +1 -1
  218. package/dist/api/settings-service/settings-service.api.js +26 -12
  219. package/dist/api/settings-service/settings-service.api.js.map +1 -1
  220. package/dist/components/conversation-events/chat/event-content-helpers/get-action-event-title.cjs +2 -0
  221. package/dist/components/conversation-events/chat/event-content-helpers/get-action-event-title.cjs.map +1 -0
  222. package/dist/components/conversation-events/chat/event-content-helpers/get-action-event-title.d.ts +12 -0
  223. package/dist/components/conversation-events/chat/event-content-helpers/get-action-event-title.js +94 -0
  224. package/dist/components/conversation-events/chat/event-content-helpers/get-action-event-title.js.map +1 -0
  225. package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.cjs +1 -1
  226. package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.cjs.map +1 -1
  227. package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.js +31 -90
  228. package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.js.map +1 -1
  229. package/dist/components/features/automations/recommended-automations-launcher.d.ts +0 -7
  230. package/dist/components/features/automations/recommended-automations-section.d.ts +0 -6
  231. package/dist/components/features/backends/backend-form-modal.cjs +1 -1
  232. package/dist/components/features/backends/backend-form-modal.cjs.map +1 -1
  233. package/dist/components/features/backends/backend-form-modal.js +568 -358
  234. package/dist/components/features/backends/backend-form-modal.js.map +1 -1
  235. package/dist/components/features/backends/device-flow-auth.cjs +1 -1
  236. package/dist/components/features/backends/device-flow-auth.cjs.map +1 -1
  237. package/dist/components/features/backends/device-flow-auth.d.ts +9 -1
  238. package/dist/components/features/backends/device-flow-auth.js +56 -55
  239. package/dist/components/features/backends/device-flow-auth.js.map +1 -1
  240. package/dist/components/features/backends/manage-backends-modal.cjs +1 -1
  241. package/dist/components/features/backends/manage-backends-modal.cjs.map +1 -1
  242. package/dist/components/features/backends/manage-backends-modal.js +1 -1
  243. package/dist/components/features/backends/manage-backends-modal.js.map +1 -1
  244. package/dist/components/features/chat/chat-interface.cjs +1 -1
  245. package/dist/components/features/chat/chat-interface.cjs.map +1 -1
  246. package/dist/components/features/chat/chat-interface.js +105 -105
  247. package/dist/components/features/chat/chat-interface.js.map +1 -1
  248. package/dist/components/features/chat/chat-message.cjs +1 -1
  249. package/dist/components/features/chat/chat-message.cjs.map +1 -1
  250. package/dist/components/features/chat/chat-message.d.ts +2 -1
  251. package/dist/components/features/chat/chat-message.js +59 -49
  252. package/dist/components/features/chat/chat-message.js.map +1 -1
  253. package/dist/components/features/chat/pending-user-messages.cjs +1 -1
  254. package/dist/components/features/chat/pending-user-messages.cjs.map +1 -1
  255. package/dist/components/features/chat/pending-user-messages.js +4 -1
  256. package/dist/components/features/chat/pending-user-messages.js.map +1 -1
  257. package/dist/components/features/chat/typing-indicator.cjs +1 -1
  258. package/dist/components/features/chat/typing-indicator.cjs.map +1 -1
  259. package/dist/components/features/chat/typing-indicator.d.ts +8 -1
  260. package/dist/components/features/chat/typing-indicator.js +94 -10
  261. package/dist/components/features/chat/typing-indicator.js.map +1 -1
  262. package/dist/components/features/command-menu/command-menu-items.d.ts +5 -1
  263. package/dist/components/features/files-tab/segmented-toggle.cjs +1 -1
  264. package/dist/components/features/files-tab/segmented-toggle.cjs.map +1 -1
  265. package/dist/components/features/files-tab/segmented-toggle.d.ts +2 -0
  266. package/dist/components/features/files-tab/segmented-toggle.js +17 -14
  267. package/dist/components/features/files-tab/segmented-toggle.js.map +1 -1
  268. package/dist/components/features/manifest/manifest-form-field.d.ts +27 -0
  269. package/dist/components/features/manifest/manifest-prerequisites-step.d.ts +11 -0
  270. package/dist/components/features/manifest/manifest-review-step.d.ts +14 -0
  271. package/dist/components/features/manifest/manifest-setup-dialog.d.ts +14 -0
  272. package/dist/components/features/mcp-page/custom-server-editor.cjs +1 -1
  273. package/dist/components/features/mcp-page/custom-server-editor.js +16 -16
  274. package/dist/components/features/mcp-page/installed-server-card.cjs +1 -1
  275. package/dist/components/features/mcp-page/installed-server-card.cjs.map +1 -1
  276. package/dist/components/features/mcp-page/installed-server-card.d.ts +2 -2
  277. package/dist/components/features/mcp-page/installed-server-card.js +6 -7
  278. package/dist/components/features/mcp-page/installed-server-card.js.map +1 -1
  279. package/dist/components/features/mcp-page/installed-servers-section.cjs +1 -1
  280. package/dist/components/features/mcp-page/installed-servers-section.cjs.map +1 -1
  281. package/dist/components/features/mcp-page/installed-servers-section.d.ts +2 -2
  282. package/dist/components/features/mcp-page/installed-servers-section.js +2 -2
  283. package/dist/components/features/mcp-page/installed-servers-section.js.map +1 -1
  284. package/dist/components/features/mcp-page/mcp-server-health.cjs +1 -1
  285. package/dist/components/features/mcp-page/mcp-server-health.js +4 -4
  286. package/dist/components/features/settings/mcp-settings/mcp-server-form.cjs +1 -1
  287. package/dist/components/features/settings/mcp-settings/mcp-server-form.cjs.map +1 -1
  288. package/dist/components/features/settings/mcp-settings/mcp-server-form.js +2 -1
  289. package/dist/components/features/settings/mcp-settings/mcp-server-form.js.map +1 -1
  290. package/dist/components/features/settings/settings-input.cjs +1 -1
  291. package/dist/components/features/settings/settings-input.cjs.map +1 -1
  292. package/dist/components/features/settings/settings-input.d.ts +6 -0
  293. package/dist/components/features/settings/settings-input.js +13 -8
  294. package/dist/components/features/settings/settings-input.js.map +1 -1
  295. package/dist/components/features/sidebar/sidebar-rail-body.cjs +1 -1
  296. package/dist/components/features/sidebar/sidebar-rail-body.cjs.map +1 -1
  297. package/dist/components/features/sidebar/sidebar-rail-body.js +124 -123
  298. package/dist/components/features/sidebar/sidebar-rail-body.js.map +1 -1
  299. package/dist/config/defaults.cjs +1 -1
  300. package/dist/config/defaults.cjs.map +1 -1
  301. package/dist/config/defaults.js +3 -3
  302. package/dist/config/defaults.js.map +1 -1
  303. package/dist/contexts/active-backend-context.cjs +1 -1
  304. package/dist/contexts/active-backend-context.cjs.map +1 -1
  305. package/dist/contexts/active-backend-context.d.ts +3 -2
  306. package/dist/contexts/active-backend-context.js +55 -42
  307. package/dist/contexts/active-backend-context.js.map +1 -1
  308. package/dist/favicon-16x16.png +0 -0
  309. package/dist/favicon-32x32.png +0 -0
  310. package/dist/favicon.ico +0 -0
  311. package/dist/hooks/mutation/use-update-mcp-server.cjs +1 -1
  312. package/dist/hooks/mutation/use-update-mcp-server.js +5 -5
  313. package/dist/hooks/query/query-keys.cjs.map +1 -1
  314. package/dist/hooks/query/query-keys.d.ts +4 -0
  315. package/dist/hooks/query/query-keys.js.map +1 -1
  316. package/dist/hooks/query/use-cloud-current-user-id.cjs +1 -1
  317. package/dist/hooks/query/use-cloud-current-user-id.cjs.map +1 -1
  318. package/dist/hooks/query/use-cloud-current-user-id.js +7 -5
  319. package/dist/hooks/query/use-cloud-current-user-id.js.map +1 -1
  320. package/dist/hooks/query/use-cloud-organizations.cjs +1 -1
  321. package/dist/hooks/query/use-cloud-organizations.cjs.map +1 -1
  322. package/dist/hooks/query/use-cloud-organizations.js +5 -1
  323. package/dist/hooks/query/use-cloud-organizations.js.map +1 -1
  324. package/dist/hooks/query/use-manifest-capabilities.d.ts +21 -0
  325. package/dist/hooks/query/use-manifest-prerequisites.d.ts +24 -0
  326. package/dist/hooks/use-can-manage-org-profiles.cjs +1 -1
  327. package/dist/hooks/use-can-manage-org-profiles.cjs.map +1 -1
  328. package/dist/hooks/use-can-manage-org-profiles.js +2 -1
  329. package/dist/hooks/use-can-manage-org-profiles.js.map +1 -1
  330. package/dist/hooks/use-llm-configured.cjs +1 -1
  331. package/dist/hooks/use-llm-configured.cjs.map +1 -1
  332. package/dist/hooks/use-llm-configured.js +2 -1
  333. package/dist/hooks/use-llm-configured.js.map +1 -1
  334. package/dist/hooks/use-manifest-preflight.d.ts +18 -0
  335. package/dist/hooks/use-tracking.cjs +1 -1
  336. package/dist/hooks/use-tracking.cjs.map +1 -1
  337. package/dist/hooks/use-tracking.d.ts +14 -0
  338. package/dist/hooks/use-tracking.js +28 -10
  339. package/dist/hooks/use-tracking.js.map +1 -1
  340. package/dist/i18n/declaration.cjs +1 -1
  341. package/dist/i18n/declaration.cjs.map +1 -1
  342. package/dist/i18n/declaration.d.ts +38 -1
  343. package/dist/i18n/declaration.js +1 -1
  344. package/dist/i18n/declaration.js.map +1 -1
  345. package/dist/i18n/translation.cjs +2 -2
  346. package/dist/i18n/translation.cjs.map +1 -1
  347. package/dist/i18n/translation.js +645 -16
  348. package/dist/i18n/translation.js.map +1 -1
  349. package/dist/icons/external-link.cjs +2 -0
  350. package/dist/icons/external-link.cjs.map +1 -0
  351. package/dist/icons/external-link.js +22 -0
  352. package/dist/icons/external-link.js.map +1 -0
  353. package/dist/icons/server.cjs +2 -0
  354. package/dist/icons/server.cjs.map +1 -0
  355. package/dist/icons/server.js +17 -0
  356. package/dist/icons/server.js.map +1 -0
  357. package/dist/locales/ar/openhands.json +39 -2
  358. package/dist/locales/ca/openhands.json +39 -2
  359. package/dist/locales/de/openhands.json +39 -2
  360. package/dist/locales/en/openhands.json +40 -3
  361. package/dist/locales/es/openhands.json +39 -2
  362. package/dist/locales/fr/openhands.json +39 -2
  363. package/dist/locales/it/openhands.json +39 -2
  364. package/dist/locales/ja/openhands.json +39 -2
  365. package/dist/locales/ko-KR/openhands.json +39 -2
  366. package/dist/locales/no/openhands.json +39 -2
  367. package/dist/locales/pt/openhands.json +39 -2
  368. package/dist/locales/tr/openhands.json +39 -2
  369. package/dist/locales/uk/openhands.json +39 -2
  370. package/dist/locales/zh-CN/openhands.json +39 -2
  371. package/dist/locales/zh-TW/openhands.json +39 -2
  372. package/dist/manifests/automation-interface.cjs +2 -0
  373. package/dist/manifests/automation-interface.cjs.map +1 -0
  374. package/dist/manifests/automation-interface.d.ts +44 -0
  375. package/dist/manifests/automation-interface.js +81 -0
  376. package/dist/manifests/automation-interface.js.map +1 -0
  377. package/dist/manifests/automation-setup.cjs +2 -0
  378. package/dist/manifests/automation-setup.cjs.map +1 -0
  379. package/dist/manifests/automation-setup.d.ts +52 -0
  380. package/dist/manifests/automation-setup.js +8 -0
  381. package/dist/manifests/automation-setup.js.map +1 -0
  382. package/dist/manifests/interface-validation.cjs +2 -0
  383. package/dist/manifests/interface-validation.cjs.map +1 -0
  384. package/dist/manifests/interface-validation.d.ts +27 -0
  385. package/dist/manifests/interface-validation.js +182 -0
  386. package/dist/manifests/interface-validation.js.map +1 -0
  387. package/dist/manifests/manifest-actions.d.ts +15 -0
  388. package/dist/manifests/manifest-capabilities.d.ts +25 -0
  389. package/dist/manifests/manifest-error-map.d.ts +40 -0
  390. package/dist/manifests/manifest-local-validation.d.ts +56 -0
  391. package/dist/manifests/manifest-registry.cjs +2 -0
  392. package/dist/manifests/manifest-registry.cjs.map +1 -0
  393. package/dist/manifests/manifest-registry.d.ts +15 -0
  394. package/dist/manifests/manifest-registry.js +26 -0
  395. package/dist/manifests/manifest-registry.js.map +1 -0
  396. package/dist/manifests/manifest-sources.cjs +2 -0
  397. package/dist/manifests/manifest-sources.cjs.map +1 -0
  398. package/dist/manifests/manifest-sources.d.ts +15 -0
  399. package/dist/manifests/manifest-sources.js +8 -0
  400. package/dist/manifests/manifest-sources.js.map +1 -0
  401. package/dist/manifests/manifest-template.d.ts +18 -0
  402. package/dist/manifests/manifest-validation.cjs +2 -0
  403. package/dist/manifests/manifest-validation.cjs.map +1 -0
  404. package/dist/manifests/manifest-validation.d.ts +30 -0
  405. package/dist/manifests/manifest-validation.js +145 -0
  406. package/dist/manifests/manifest-validation.js.map +1 -0
  407. package/dist/manifests/types.cjs +2 -0
  408. package/dist/manifests/types.cjs.map +1 -0
  409. package/dist/manifests/types.d.ts +227 -0
  410. package/dist/manifests/types.js +6 -0
  411. package/dist/manifests/types.js.map +1 -0
  412. package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.cjs +9 -0
  413. package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.cjs.map +1 -0
  414. package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.js +75 -0
  415. package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.js.map +1 -0
  416. package/dist/node_modules/@openhands/extensions/automations/catalog/github-repo-monitor/manifest.cjs +9 -0
  417. package/dist/node_modules/@openhands/extensions/automations/catalog/github-repo-monitor/manifest.cjs.map +1 -0
  418. package/dist/node_modules/@openhands/extensions/automations/catalog/github-repo-monitor/manifest.js +78 -0
  419. package/dist/node_modules/@openhands/extensions/automations/catalog/github-repo-monitor/manifest.js.map +1 -0
  420. package/dist/node_modules/@openhands/extensions/automations/catalog/incident-retrospective-drafter/manifest.cjs +17 -0
  421. package/dist/node_modules/@openhands/extensions/automations/catalog/incident-retrospective-drafter/manifest.cjs.map +1 -0
  422. package/dist/node_modules/@openhands/extensions/automations/catalog/incident-retrospective-drafter/manifest.js +89 -0
  423. package/dist/node_modules/@openhands/extensions/automations/catalog/incident-retrospective-drafter/manifest.js.map +1 -0
  424. package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-pr/manifest.cjs +10 -0
  425. package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-pr/manifest.cjs.map +1 -0
  426. package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-pr/manifest.js +17 -0
  427. package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-pr/manifest.js.map +1 -0
  428. package/dist/node_modules/@openhands/extensions/automations/catalog/linear-triage-assistant/manifest.cjs +9 -0
  429. package/dist/node_modules/@openhands/extensions/automations/catalog/linear-triage-assistant/manifest.cjs.map +1 -0
  430. package/dist/node_modules/@openhands/extensions/automations/catalog/linear-triage-assistant/manifest.js +15 -0
  431. package/dist/node_modules/@openhands/extensions/automations/catalog/linear-triage-assistant/manifest.js.map +1 -0
  432. package/dist/node_modules/@openhands/extensions/automations/catalog/research-brief-writer/manifest.cjs +9 -0
  433. package/dist/node_modules/@openhands/extensions/automations/catalog/research-brief-writer/manifest.cjs.map +1 -0
  434. package/dist/node_modules/@openhands/extensions/automations/catalog/research-brief-writer/manifest.js +18 -0
  435. package/dist/node_modules/@openhands/extensions/automations/catalog/research-brief-writer/manifest.js.map +1 -0
  436. package/dist/node_modules/@openhands/extensions/automations/catalog/slack-channel-monitor/manifest.cjs +9 -0
  437. package/dist/node_modules/@openhands/extensions/automations/catalog/slack-channel-monitor/manifest.cjs.map +1 -0
  438. package/dist/node_modules/@openhands/extensions/automations/catalog/slack-channel-monitor/manifest.js +14 -0
  439. package/dist/node_modules/@openhands/extensions/automations/catalog/slack-channel-monitor/manifest.js.map +1 -0
  440. package/dist/node_modules/@openhands/extensions/automations/catalog/slack-standup-digest/manifest.cjs +9 -0
  441. package/dist/node_modules/@openhands/extensions/automations/catalog/slack-standup-digest/manifest.cjs.map +1 -0
  442. package/dist/node_modules/@openhands/extensions/automations/catalog/slack-standup-digest/manifest.js +14 -0
  443. package/dist/node_modules/@openhands/extensions/automations/catalog/slack-standup-digest/manifest.js.map +1 -0
  444. package/dist/node_modules/@openhands/extensions/automations/catalog-index.cjs +2 -0
  445. package/dist/node_modules/@openhands/extensions/automations/catalog-index.cjs.map +1 -0
  446. package/dist/node_modules/@openhands/extensions/automations/catalog-index.js +23 -0
  447. package/dist/node_modules/@openhands/extensions/automations/catalog-index.js.map +1 -0
  448. package/dist/node_modules/@openhands/extensions/automations/index.cjs +2 -0
  449. package/dist/node_modules/@openhands/extensions/automations/index.cjs.map +1 -0
  450. package/dist/node_modules/@openhands/extensions/automations/index.js +18 -0
  451. package/dist/node_modules/@openhands/extensions/automations/index.js.map +1 -0
  452. package/dist/node_modules/@openhands/extensions/automations/interface.cjs +2 -0
  453. package/dist/node_modules/@openhands/extensions/automations/interface.cjs.map +1 -0
  454. package/dist/node_modules/@openhands/extensions/automations/interface.js +89 -0
  455. package/dist/node_modules/@openhands/extensions/automations/interface.js.map +1 -0
  456. package/dist/node_modules/@openhands/extensions/integrations/catalog/datadog.cjs +1 -1
  457. package/dist/node_modules/@openhands/extensions/integrations/catalog/datadog.cjs.map +1 -1
  458. package/dist/node_modules/@openhands/extensions/integrations/catalog/datadog.js +3 -3
  459. package/dist/node_modules/@openhands/extensions/integrations/catalog/datadog.js.map +1 -1
  460. package/dist/node_modules/@openhands/extensions/skills/index.cjs +17 -4
  461. package/dist/node_modules/@openhands/extensions/skills/index.cjs.map +1 -1
  462. package/dist/node_modules/@openhands/extensions/skills/index.js +5 -5
  463. package/dist/node_modules/@openhands/extensions/skills/index.js.map +1 -1
  464. package/dist/node_modules/@openhands/typescript-client/dist/client/settings-client.cjs +1 -1
  465. package/dist/node_modules/@openhands/typescript-client/dist/client/settings-client.cjs.map +1 -1
  466. package/dist/node_modules/@openhands/typescript-client/dist/client/settings-client.js +9 -0
  467. package/dist/node_modules/@openhands/typescript-client/dist/client/settings-client.js.map +1 -1
  468. package/dist/node_modules/lucide-react/dist/esm/icons/monitor.cjs +2 -0
  469. package/dist/node_modules/lucide-react/dist/esm/icons/monitor.cjs.map +1 -0
  470. package/dist/node_modules/lucide-react/dist/esm/icons/monitor.js +29 -0
  471. package/dist/node_modules/lucide-react/dist/esm/icons/monitor.js.map +1 -0
  472. package/dist/package.cjs +1 -1
  473. package/dist/package.cjs.map +1 -1
  474. package/dist/package.js +3 -3
  475. package/dist/package.js.map +1 -1
  476. package/dist/routes/app-settings.cjs +1 -1
  477. package/dist/routes/app-settings.js +5 -5
  478. package/dist/routes/mcp.cjs +1 -1
  479. package/dist/routes/mcp.cjs.map +1 -1
  480. package/dist/routes/mcp.js +73 -82
  481. package/dist/routes/mcp.js.map +1 -1
  482. package/dist/services/telemetry.cjs +1 -1
  483. package/dist/services/telemetry.cjs.map +1 -1
  484. package/dist/services/telemetry.d.ts +8 -0
  485. package/dist/services/telemetry.js +163 -116
  486. package/dist/services/telemetry.js.map +1 -1
  487. package/dist/types/agent-server/core/events/conversation-state-event.d.ts +2 -19
  488. package/dist/types/agent-server/core/events/observation-event.d.ts +2 -18
  489. package/dist/types/automation.d.ts +7 -3
  490. package/dist/types/mcp-server.d.ts +5 -0
  491. package/dist/types/settings.d.ts +3 -0
  492. package/dist/utils/api-error-message.d.ts +6 -2
  493. package/dist/utils/automation-catalog.cjs +2 -0
  494. package/dist/utils/automation-catalog.cjs.map +1 -0
  495. package/dist/utils/automation-catalog.d.ts +28 -0
  496. package/dist/utils/automation-catalog.js +5 -0
  497. package/dist/utils/automation-catalog.js.map +1 -0
  498. package/dist/utils/automation-timeout.d.ts +3 -2
  499. package/dist/utils/mcp-config.cjs +1 -1
  500. package/dist/utils/mcp-config.cjs.map +1 -1
  501. package/dist/utils/mcp-config.d.ts +8 -0
  502. package/dist/utils/mcp-config.js +25 -20
  503. package/dist/utils/mcp-config.js.map +1 -1
  504. package/dist/utils/mcp-installed-servers.cjs +1 -1
  505. package/dist/utils/mcp-installed-servers.cjs.map +1 -1
  506. package/dist/utils/mcp-installed-servers.js +6 -3
  507. package/dist/utils/mcp-installed-servers.js.map +1 -1
  508. package/dist/utils/responder-deployment.d.ts +5 -1
  509. package/dist/utils/transcript-export/index.cjs +5 -5
  510. package/dist/utils/transcript-export/index.js +12 -12
  511. package/package.json +3 -3
  512. package/scripts/check-sdk-version-sync.mjs +6 -6
  513. package/scripts/check-translation-completeness.cjs +1 -0
  514. package/scripts/dev-safe.mjs +17 -12
  515. package/scripts/dev-static.mjs +17 -0
  516. package/scripts/dev-with-automation.mjs +12 -14
  517. package/scripts/ingress.mjs +22 -0
  518. package/scripts/proxy-utils.mjs +157 -2
  519. package/scripts/runtime-services-info.mjs +6 -6
  520. package/scripts/static-build.mjs +0 -7
  521. package/scripts/static-server.mjs +10 -0
  522. package/build/assets/active-backend-context-BlZPzZNU.js +0 -1
  523. package/build/assets/agent-context-settings-CTaN-Iw9.js +0 -1
  524. package/build/assets/agent-profiles-settings-CR4VTqv_.js +0 -1
  525. package/build/assets/agent-server-conversation-service.api-Btmi4q6d.js +0 -41
  526. package/build/assets/agent-settings-KQs-occT.js +0 -1
  527. package/build/assets/api-key-entry-screen-BhR24gkM.js +0 -1
  528. package/build/assets/app-settings-Bs4sY8WP.js +0 -1
  529. package/build/assets/automation-BGP_I1RR.js +0 -1
  530. package/build/assets/automation-detail-CwDnJbYR.js +0 -2
  531. package/build/assets/automation-export-Bu-r-EzL.js +0 -2
  532. package/build/assets/automations-list-CYw7_6FR.js +0 -1
  533. package/build/assets/backend-form-modal-Ce-KRHOJ.js +0 -1
  534. package/build/assets/browser-BUDJnBg4.js +0 -6
  535. package/build/assets/check-BMOG005H.js +0 -1
  536. package/build/assets/chevron-down-CV1zZP_K.js +0 -1
  537. package/build/assets/circle-check-lvN_jFN5.js +0 -1
  538. package/build/assets/client-source-1v-kWLNU.js +0 -1
  539. package/build/assets/cloud-funnel-analytics-CasMM7EO.js +0 -1
  540. package/build/assets/command-menu-N_BriUy8.js +0 -1
  541. package/build/assets/condenser-settings-Czi8cKxV.js +0 -1
  542. package/build/assets/conversation-C25pc2dT.js +0 -1
  543. package/build/assets/conversation-CObLYSJd.js +0 -90
  544. package/build/assets/conversation-panel-C25pc2dT.js +0 -1
  545. package/build/assets/conversation-state-store-DTq4hFoP.js +0 -1
  546. package/build/assets/extensions-hub-BKftOQ-X.js +0 -1
  547. package/build/assets/extensions-navigation-DF24q1H1.js +0 -1
  548. package/build/assets/files-tab-SAiFCnS5.js +0 -1
  549. package/build/assets/git-provider-icon-BREx-yUX.js +0 -1
  550. package/build/assets/home-EPNFgzUh.js +0 -1
  551. package/build/assets/home-sN90Xcxp.js +0 -1
  552. package/build/assets/index-home-EPNFgzUh.js +0 -1
  553. package/build/assets/install-server-modal-BI8yUfmr.js +0 -1
  554. package/build/assets/llm-not-configured-banner-DTWzISnk.js +0 -27
  555. package/build/assets/llm-settings-BXk5_Pac.js +0 -1
  556. package/build/assets/llm-settings-C1vpgWam.js +0 -1
  557. package/build/assets/loader-circle-6zlEYCJw.js +0 -1
  558. package/build/assets/manage-backends-modal-DhflyGTf.js +0 -1
  559. package/build/assets/manifest-8082e879.js +0 -1
  560. package/build/assets/mcp-CxLPda-W.js +0 -9
  561. package/build/assets/messages-DINDkPNK.js +0 -40
  562. package/build/assets/onboarding-modal-DdvE6rzw.js +0 -1
  563. package/build/assets/organization-service.api-CT2OQlLz.js +0 -1
  564. package/build/assets/plugins-management-service-DVkoM3eA.js +0 -1
  565. package/build/assets/plus-vIbGD459.js +0 -1
  566. package/build/assets/profiles-service.api-CBafmAPO.js +0 -1
  567. package/build/assets/providers-9UzRB9mT.js +0 -1
  568. package/build/assets/proxy-C79PCMjo.js +0 -1
  569. package/build/assets/recommended-automations-launcher-BF2mtAKw.js +0 -58
  570. package/build/assets/root-B5JXKp1P.css +0 -1
  571. package/build/assets/root-Sj7W28yE.js +0 -2
  572. package/build/assets/root-layout-DbhKVoc7.js +0 -3
  573. package/build/assets/schema-field-CV6bFnoL.js +0 -1
  574. package/build/assets/search-sKuYKllf.js +0 -1
  575. package/build/assets/secrets-service-BjK-bPN2.js +0 -1
  576. package/build/assets/segmented-toggle-DbbD3Tve.js +0 -1
  577. package/build/assets/settings-Bj5Oo45A.js +0 -1
  578. package/build/assets/settings-input-BjW_zyTN.js +0 -1
  579. package/build/assets/settings-service.api-DryhKdSr.js +0 -1
  580. package/build/assets/shared-conversation-CnMxy7p_.js +0 -1
  581. package/build/assets/telemetry-cmCL3o6Z.js +0 -2
  582. package/build/assets/use-activate-agent-profile-DH33MvVj.js +0 -1
  583. package/build/assets/use-agent-profiles-Dmd_4H8q.js +0 -1
  584. package/build/assets/use-cloud-current-user-id-B6DP3s47.js +0 -1
  585. package/build/assets/use-is-authed-BsS4XwSL.js +0 -1
  586. package/build/assets/use-llm-profiles-BMQoc612.js +0 -1
  587. package/build/assets/use-onboarding-completion-B-2BTS-y.js +0 -1
  588. package/build/assets/use-plugins-marketplace-PBc_XNz_.js +0 -1
  589. package/build/assets/use-save-agent-profile-2Mk9ZX37.js +0 -1
  590. package/build/assets/use-settings-DBI44RnH.js +0 -1
  591. package/build/assets/use-settings-nav-items-Cva28C-c.js +0 -16
  592. package/build/assets/use-skills-RQsCtdzN.js +0 -1
  593. package/build/assets/use-tracking-CN1nIMnY.js +0 -1
  594. package/build/assets/utils-qjs_KuS4.js +0 -1
  595. package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation-EShpjxey.js +0 -1
  596. package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation-DD_UNO02.js +0 -1
  597. package/build/assets/vendor~root-layout~index-home~home~mcp~automations-list~onboarding-modal-Be63Q2Ln.js +0 -1
  598. package/build/assets/x-EjvKGawc.js +0 -1
  599. /package/build/assets/{vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~f1hl7voa-BrmgjeOw.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~emdr2jt4-BrmgjeOw.js} +0 -0
@@ -5,12 +5,13 @@ import i from "../api/profiles-service/profiles-service.api.js";
5
5
  import { isSubscriptionLlmConfig as a } from "../constants/llm-subscription.js";
6
6
  import { useLlmProfiles as o } from "./query/use-llm-profiles.js";
7
7
  import { useSettings as s } from "./query/use-settings.js";
8
+ import "../api/agent-profiles-service/agent-profiles-service.api.js";
8
9
  import { useActiveAgentProfile as c } from "./use-active-agent-profile.js";
9
10
  import { useConfig as l } from "./query/use-config.js";
10
11
  import { isSettingsPageHidden as u } from "../utils/settings-utils.js";
11
12
  //#region src/hooks/use-llm-configured.ts
12
13
  function d() {
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
+ 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" && !(S && C.name === "default") ? 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
15
  queryKey: [
15
16
  ...t.all,
16
17
  b.id,
@@ -1 +1 @@
1
- {"version":3,"file":"use-llm-configured.js","names":[],"sources":["../../src/hooks/use-llm-configured.ts"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport { useSettings } from \"#/hooks/query/use-settings\";\nimport { useConfig } from \"#/hooks/query/use-config\";\nimport { useLlmProfiles } from \"#/hooks/query/use-llm-profiles\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport { useActiveAgentProfile } from \"#/hooks/use-active-agent-profile\";\nimport { isSettingsPageHidden } from \"#/utils/settings-utils\";\nimport ProfilesService from \"#/api/profiles-service/profiles-service.api\";\nimport {\n CONFIG_CACHE_OPTIONS,\n LLM_PROFILES_QUERY_KEYS,\n} from \"#/hooks/query/query-keys\";\nimport { isSubscriptionLlmConfig } from \"#/constants/llm-subscription\";\n\ninterface LlmConfiguredResult {\n /**\n * True when the active backend's agent has a usable LLM:\n * - ACP agents own their LLM via a subprocess, so they never need a key.\n * - OpenHands agents are ready only once an LLM API key has been saved.\n * - When the LLM settings page is hidden by a feature flag there is no\n * place to finish setup, so we treat the LLM as configured to avoid\n * surfacing an actionless warning.\n */\n isConfigured: boolean;\n /**\n * True while the configured/unconfigured state is indeterminate — either\n * settings/config are still resolving, or a fetch failed and left us with no\n * data to decide from. Consumers should render nothing in this state so a\n * warning doesn't flash before data loads or on a transient network error.\n */\n isLoading: boolean;\n}\n\n/**\n * Reports whether the active backend's agent has an LLM ready to run\n * conversations. Surfaces the gap left by the onboarding \"Skip for now\" path,\n * which persists no settings — leaving an OpenHands agent without an API key.\n */\nexport function useLlmConfigured(): LlmConfiguredResult {\n const {\n data: settings,\n isLoading: settingsLoading,\n isError: settingsError,\n } = useSettings();\n const {\n data: config,\n isLoading: configLoading,\n isError: configError,\n } = useConfig();\n const {\n data: profilesData,\n isLoading: profilesLoading,\n isError: profilesError,\n } = useLlmProfiles();\n const { backend, orgId } = useActiveBackend();\n const isLocal = backend.kind === \"local\";\n\n // The active AgentProfile is the current agent — an ACP profile owns its LLM\n // via the subprocess and never needs an API key. Fall back to the global\n // agent settings only while the profile list loads.\n const {\n activeProfile: activeAgentProfile,\n isLoading: activeAgentProfileLoading,\n } = useActiveAgentProfile();\n const activeAgentKind = activeAgentProfile?.agent_kind;\n const isAcpAgent =\n (activeAgentKind ?? settings?.agent_settings?.agent_kind) === \"acp\";\n const hasApiKey = settings?.llm_api_key_set === true;\n // The LLM that will actually power the next conversation is the profile the\n // active AGENT profile references (`llm_profile_ref`) — conversations launch\n // from the agent profile, not the standalone \"active LLM profile\".\n const referencedLlmProfileName =\n activeAgentProfile?.agent_kind === \"openhands\"\n ? activeAgentProfile.llm_profile_ref\n : undefined;\n const referencedProfile = referencedLlmProfileName\n ? profilesData?.profiles.find(\n (profile) => profile.name === referencedLlmProfileName,\n )\n : undefined;\n // Fall back to the active LLM profile when the ref is absent (list loading,\n // or an agent profile without a ref) OR stale (names a profile that no longer\n // exists). This mirrors the launch-time fallback in `useCreateConversation`,\n // which drops a stale-ref profile launch to an `agent_settings` launch on the\n // active LLM. Without this fallback the two contradict each other: launch\n // succeeds via the fallback, but this hook reports `isConfigured: false` and\n // spuriously disables the composer + shows the banner — even inside a running\n // conversation (VascoSch92 review, #1571).\n const activeProfile =\n referencedProfile ??\n profilesData?.profiles.find(\n (profile) => profile.name === profilesData?.active_profile,\n );\n const hasActiveProfileApiKey = activeProfile?.api_key_set === true;\n const shouldLoadActiveProfileDetail =\n isLocal && !!activeProfile && !hasActiveProfileApiKey;\n const {\n data: activeProfileDetail,\n isLoading: activeProfileDetailLoading,\n isError: activeProfileDetailError,\n } = useQuery({\n queryKey: [\n ...LLM_PROFILES_QUERY_KEYS.all,\n backend.id,\n orgId,\n \"detail\",\n activeProfile?.name,\n ],\n queryFn: () => ProfilesService.getProfile(activeProfile!.name),\n ...CONFIG_CACHE_OPTIONS,\n enabled: shouldLoadActiveProfileDetail,\n meta: { disableToast: true },\n });\n const hasActiveProfileSubscription =\n shouldLoadActiveProfileDetail &&\n isSubscriptionLlmConfig(\n activeProfileDetail?.config as Record<string, unknown> | undefined,\n );\n const llmSettingsHidden = isSettingsPageHidden(\n \"/settings/llm\",\n config?.feature_flags,\n );\n\n // In local mode, profiles are the source of truth: a usable LLM must be\n // backed by an active profile that still exists and is authenticated. API-key\n // profiles use the list endpoint's api_key_set flag; subscription profiles\n // intentionally have no key, so we inspect the active profile detail config.\n // The raw settings key can be a stale copy left behind by a deleted profile\n // (settings are not cleared on delete), so we don't count it here. Cloud\n // backends don't use profiles and keep the settings-key signal.\n const hasUsableActiveProfile =\n hasActiveProfileApiKey || hasActiveProfileSubscription;\n const hasUsableLlm = isLocal ? hasUsableActiveProfile : hasApiKey;\n\n // Treat a fetch failure as indeterminate (same as loading) only when it\n // leaves us with no data to decide from — otherwise a transient network\n // error would surface the banner with the same urgency as a genuinely\n // missing API key. A settings 404 is deliberately not covered here:\n // `useSettings` maps it to DEFAULT_SETTINGS (no key, OpenHands agent) while\n // keeping `isError` set, and that is exactly the new-user / \"Skip for now\"\n // state the banner exists to catch — so we keep deciding from that data.\n const settingsIndeterminate = settingsLoading || (settingsError && !settings);\n const configIndeterminate = configLoading || (configError && !config);\n // The active agent profile decides `isAcpAgent` and which LLM profile the\n // next conversation runs; on a cold cache it's still loading, so decide\n // nothing yet — otherwise an ACP agent (which needs no key) briefly reads as\n // an unconfigured OpenHands agent and flashes the \"LLM not set up\" banner.\n const agentProfileIndeterminate = activeAgentProfileLoading;\n const profilesIndeterminate =\n profilesLoading || (profilesError && !profilesData);\n const activeProfileDetailIndeterminate =\n shouldLoadActiveProfileDetail &&\n (activeProfileDetailLoading ||\n (activeProfileDetailError && !activeProfileDetail));\n\n return {\n isConfigured: isAcpAgent || llmSettingsHidden || hasUsableLlm,\n isLoading:\n settingsIndeterminate ||\n configIndeterminate ||\n profilesIndeterminate ||\n agentProfileIndeterminate ||\n activeProfileDetailIndeterminate,\n };\n}\n"],"mappings":";;;;;;;;;;;AAsCA,SAAgB,IAAwC;CACtD,IAAM,EACJ,MAAM,GACN,WAAW,GACX,SAAS,MACP,EAAY,GACV,EACJ,MAAM,GACN,WAAW,GACX,SAAS,MACP,EAAU,GACR,EACJ,MAAM,GACN,WAAW,GACX,SAAS,MACP,EAAe,GACb,EAAE,YAAS,aAAU,EAAiB,GACtC,IAAU,EAAQ,SAAS,SAK3B,EACJ,eAAe,GACf,WAAW,MACT,EAAsB,GAEpB,KADkB,GAAoB,cAEtB,GAAU,gBAAgB,gBAAgB,OAC1D,IAAY,GAAU,oBAAoB,IAI1C,IACJ,GAAoB,eAAe,cAC/B,EAAmB,kBACnB,KAAA,GAcA,KAboB,IACtB,GAAc,SAAS,MACpB,MAAY,EAAQ,SAAS,CAChC,IACA,KAAA,MAWF,GAAc,SAAS,MACpB,MAAY,EAAQ,SAAS,GAAc,cAC9C,GACI,IAAyB,GAAe,gBAAgB,IACxD,IACJ,KAAW,CAAC,CAAC,KAAiB,CAAC,GAC3B,EACJ,MAAM,GACN,WAAW,GACX,SAAS,MACP,EAAS;EACX,UAAU;GACR,GAAG,EAAwB;GAC3B,EAAQ;GACR;GACA;GACA,GAAe;EACjB;EACA,eAAe,EAAgB,WAAW,EAAe,IAAI;EAC7D,GAAG;EACH,SAAS;EACT,MAAM,EAAE,cAAc,GAAK;CAC7B,CAAC,GACK,IACJ,KACA,EACE,GAAqB,MACvB,GACI,IAAoB,EACxB,iBACA,GAAQ,aACV;CAkCA,OAAO;EACL,cAAc,KAAc,MAxBT,IADnB,KAA0B,IAC4B;EAyBtD,WAhB4B,KAAoB,KAAiB,CAAC,KACxC,KAAkB,KAAe,CAAC,KAO5D,KAAoB,KAAiB,CAAC,KAYpC,KAVF,MACC,KACE,KAA4B,CAAC;CAUlC;AACF"}
1
+ {"version":3,"file":"use-llm-configured.js","names":[],"sources":["../../src/hooks/use-llm-configured.ts"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport { useSettings } from \"#/hooks/query/use-settings\";\nimport { useConfig } from \"#/hooks/query/use-config\";\nimport { useLlmProfiles } from \"#/hooks/query/use-llm-profiles\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport { useActiveAgentProfile } from \"#/hooks/use-active-agent-profile\";\nimport { isSettingsPageHidden } from \"#/utils/settings-utils\";\nimport ProfilesService from \"#/api/profiles-service/profiles-service.api\";\nimport { WELL_KNOWN_DEFAULT_AGENT_PROFILE_NAME } from \"#/api/agent-profiles-service/agent-profiles-service.api\";\nimport {\n CONFIG_CACHE_OPTIONS,\n LLM_PROFILES_QUERY_KEYS,\n} from \"#/hooks/query/query-keys\";\nimport { isSubscriptionLlmConfig } from \"#/constants/llm-subscription\";\n\ninterface LlmConfiguredResult {\n /**\n * True when the active backend's agent has a usable LLM:\n * - ACP agents own their LLM via a subprocess, so they never need a key.\n * - OpenHands agents are ready only once an LLM API key has been saved.\n * - When the LLM settings page is hidden by a feature flag there is no\n * place to finish setup, so we treat the LLM as configured to avoid\n * surfacing an actionless warning.\n */\n isConfigured: boolean;\n /**\n * True while the configured/unconfigured state is indeterminate — either\n * settings/config are still resolving, or a fetch failed and left us with no\n * data to decide from. Consumers should render nothing in this state so a\n * warning doesn't flash before data loads or on a transient network error.\n */\n isLoading: boolean;\n}\n\n/**\n * Reports whether the active backend's agent has an LLM ready to run\n * conversations. Surfaces the gap left by the onboarding \"Skip for now\" path,\n * which persists no settings — leaving an OpenHands agent without an API key.\n */\nexport function useLlmConfigured(): LlmConfiguredResult {\n const {\n data: settings,\n isLoading: settingsLoading,\n isError: settingsError,\n } = useSettings();\n const {\n data: config,\n isLoading: configLoading,\n isError: configError,\n } = useConfig();\n const {\n data: profilesData,\n isLoading: profilesLoading,\n isError: profilesError,\n } = useLlmProfiles();\n const { backend, orgId } = useActiveBackend();\n const isLocal = backend.kind === \"local\";\n\n // The active AgentProfile is the current agent — an ACP profile owns its LLM\n // via the subprocess and never needs an API key. Fall back to the global\n // agent settings only while the profile list loads.\n const {\n activeProfile: activeAgentProfile,\n isLoading: activeAgentProfileLoading,\n } = useActiveAgentProfile();\n const activeAgentKind = activeAgentProfile?.agent_kind;\n const isAcpAgent =\n (activeAgentKind ?? settings?.agent_settings?.agent_kind) === \"acp\";\n const hasApiKey = settings?.llm_api_key_set === true;\n // The LLM that will actually power the next conversation is the profile the\n // active AGENT profile references (`llm_profile_ref`) — conversations launch\n // from the agent profile, not the standalone \"active LLM profile\".\n // Except the local seeded `default` profile: `useCreateConversation` launches\n // it via `agent_settings` on the ACTIVE LLM, not the seed's ref, so gating on\n // that ref blocks launches that would have succeeded (#16193).\n const referencedLlmProfileName =\n activeAgentProfile?.agent_kind === \"openhands\" &&\n !(\n isLocal &&\n activeAgentProfile.name === WELL_KNOWN_DEFAULT_AGENT_PROFILE_NAME\n )\n ? activeAgentProfile.llm_profile_ref\n : undefined;\n const referencedProfile = referencedLlmProfileName\n ? profilesData?.profiles.find(\n (profile) => profile.name === referencedLlmProfileName,\n )\n : undefined;\n // Fall back to the active LLM profile when the ref is absent (list loading,\n // or an agent profile without a ref) OR stale (names a profile that no longer\n // exists). This mirrors the launch-time fallback in `useCreateConversation`,\n // which drops a stale-ref profile launch to an `agent_settings` launch on the\n // active LLM. Without this fallback the two contradict each other: launch\n // succeeds via the fallback, but this hook reports `isConfigured: false` and\n // spuriously disables the composer + shows the banner — even inside a running\n // conversation (VascoSch92 review, #1571).\n const activeProfile =\n referencedProfile ??\n profilesData?.profiles.find(\n (profile) => profile.name === profilesData?.active_profile,\n );\n const hasActiveProfileApiKey = activeProfile?.api_key_set === true;\n const shouldLoadActiveProfileDetail =\n isLocal && !!activeProfile && !hasActiveProfileApiKey;\n const {\n data: activeProfileDetail,\n isLoading: activeProfileDetailLoading,\n isError: activeProfileDetailError,\n } = useQuery({\n queryKey: [\n ...LLM_PROFILES_QUERY_KEYS.all,\n backend.id,\n orgId,\n \"detail\",\n activeProfile?.name,\n ],\n queryFn: () => ProfilesService.getProfile(activeProfile!.name),\n ...CONFIG_CACHE_OPTIONS,\n enabled: shouldLoadActiveProfileDetail,\n meta: { disableToast: true },\n });\n const hasActiveProfileSubscription =\n shouldLoadActiveProfileDetail &&\n isSubscriptionLlmConfig(\n activeProfileDetail?.config as Record<string, unknown> | undefined,\n );\n const llmSettingsHidden = isSettingsPageHidden(\n \"/settings/llm\",\n config?.feature_flags,\n );\n\n // In local mode, profiles are the source of truth: a usable LLM must be\n // backed by an active profile that still exists and is authenticated. API-key\n // profiles use the list endpoint's api_key_set flag; subscription profiles\n // intentionally have no key, so we inspect the active profile detail config.\n // The raw settings key can be a stale copy left behind by a deleted profile\n // (settings are not cleared on delete), so we don't count it here. Cloud\n // backends don't use profiles and keep the settings-key signal.\n const hasUsableActiveProfile =\n hasActiveProfileApiKey || hasActiveProfileSubscription;\n const hasUsableLlm = isLocal ? hasUsableActiveProfile : hasApiKey;\n\n // Treat a fetch failure as indeterminate (same as loading) only when it\n // leaves us with no data to decide from — otherwise a transient network\n // error would surface the banner with the same urgency as a genuinely\n // missing API key. A settings 404 is deliberately not covered here:\n // `useSettings` maps it to DEFAULT_SETTINGS (no key, OpenHands agent) while\n // keeping `isError` set, and that is exactly the new-user / \"Skip for now\"\n // state the banner exists to catch — so we keep deciding from that data.\n const settingsIndeterminate = settingsLoading || (settingsError && !settings);\n const configIndeterminate = configLoading || (configError && !config);\n // The active agent profile decides `isAcpAgent` and which LLM profile the\n // next conversation runs; on a cold cache it's still loading, so decide\n // nothing yet — otherwise an ACP agent (which needs no key) briefly reads as\n // an unconfigured OpenHands agent and flashes the \"LLM not set up\" banner.\n const agentProfileIndeterminate = activeAgentProfileLoading;\n const profilesIndeterminate =\n profilesLoading || (profilesError && !profilesData);\n const activeProfileDetailIndeterminate =\n shouldLoadActiveProfileDetail &&\n (activeProfileDetailLoading ||\n (activeProfileDetailError && !activeProfileDetail));\n\n return {\n isConfigured: isAcpAgent || llmSettingsHidden || hasUsableLlm,\n isLoading:\n settingsIndeterminate ||\n configIndeterminate ||\n profilesIndeterminate ||\n agentProfileIndeterminate ||\n activeProfileDetailIndeterminate,\n };\n}\n"],"mappings":";;;;;;;;;;;;AAuCA,SAAgB,IAAwC;CACtD,IAAM,EACJ,MAAM,GACN,WAAW,GACX,SAAS,MACP,EAAY,GACV,EACJ,MAAM,GACN,WAAW,GACX,SAAS,MACP,EAAU,GACR,EACJ,MAAM,GACN,WAAW,GACX,SAAS,MACP,EAAe,GACb,EAAE,YAAS,aAAU,EAAiB,GACtC,IAAU,EAAQ,SAAS,SAK3B,EACJ,eAAe,GACf,WAAW,MACT,EAAsB,GAEpB,KADkB,GAAoB,cAEtB,GAAU,gBAAgB,gBAAgB,OAC1D,IAAY,GAAU,oBAAoB,IAO1C,IACJ,GAAoB,eAAe,eACnC,EACE,KACA,EAAmB,SAAA,aAEjB,EAAmB,kBACnB,KAAA,GAcA,KAboB,IACtB,GAAc,SAAS,MACpB,MAAY,EAAQ,SAAS,CAChC,IACA,KAAA,MAWF,GAAc,SAAS,MACpB,MAAY,EAAQ,SAAS,GAAc,cAC9C,GACI,IAAyB,GAAe,gBAAgB,IACxD,IACJ,KAAW,CAAC,CAAC,KAAiB,CAAC,GAC3B,EACJ,MAAM,GACN,WAAW,GACX,SAAS,MACP,EAAS;EACX,UAAU;GACR,GAAG,EAAwB;GAC3B,EAAQ;GACR;GACA;GACA,GAAe;EACjB;EACA,eAAe,EAAgB,WAAW,EAAe,IAAI;EAC7D,GAAG;EACH,SAAS;EACT,MAAM,EAAE,cAAc,GAAK;CAC7B,CAAC,GACK,IACJ,KACA,EACE,GAAqB,MACvB,GACI,IAAoB,EACxB,iBACA,GAAQ,aACV;CAkCA,OAAO;EACL,cAAc,KAAc,MAxBT,IADnB,KAA0B,IAC4B;EAyBtD,WAhB4B,KAAoB,KAAiB,CAAC,KACxC,KAAkB,KAAe,CAAC,KAO5D,KAAoB,KAAiB,CAAC,KAYpC,KAVF,MACC,KACE,KAA4B,CAAC;CAUlC;AACF"}
@@ -0,0 +1,18 @@
1
+ import { type MappedManifestErrors } from "#/manifests/manifest-error-map";
2
+ import type { SetupEntry, SetupFormValues } from "#/manifests/types";
3
+ /**
4
+ * Stage 6 — ask the service whether a draft is valid before anything is created.
5
+ *
6
+ * The service is the authoritative validator, so what it receives is the derived
7
+ * payload rather than the raw form values: what is checked is exactly what would
8
+ * be sent. Errors come back addressed by payload path and are translated back to
9
+ * fields through the map derived from that same builder.
10
+ *
11
+ * Resolves to null when there is no verdict — the entry has no draft to check,
12
+ * the deployment does not implement preflight, a newer run has already
13
+ * superseded this one, or the request failed. A missing preflight is not a
14
+ * failure: local checks and the create response still stand between the user
15
+ * and a bad configuration. Only a deployment without the endpoint is an
16
+ * expected failure though, so any other one is reported.
17
+ */
18
+ export declare function useSetupPreflight(entry: SetupEntry): (formValues: SetupFormValues) => Promise<MappedManifestErrors | null>;
@@ -1,2 +1,2 @@
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})},trackAutomationCreatedButton:({backendKind:e})=>{u(`automation_created_button`,{backend_kind:e})},trackAutomationExecuted:({backendKind:e})=>{u(`automation_executed`,{backend_kind:e})},trackAutomationDeleted:({backendKind:e})=>{u(`automation_deleted`,{backend_kind:e})},trackAutomationDisableButton:({backendKind:e})=>{u(`automation_disable_button`,{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;
1
+ const e=require("../_virtual/_rolldown/runtime.cjs"),t=require("../api/agent-server-compatibility.cjs"),n=require("../services/telemetry-context.cjs"),r=require("../services/telemetry.cjs"),i=require("../contexts/active-backend-context.cjs"),a=require("./query/use-automation-sdk-version.cjs");let o=require("react");o=e.__toESM(o,1);var s=()=>{let{backend:e}=i.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(()=>{r.setTelemetryBackendContext(c())},[c]);let l={current_url:window.location.href},u=(e,t={})=>{r.setTelemetryBackendContext(c()),r.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_start_requested`,{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})},trackAutomationSetupOpened:({automationId:e})=>{u(`automation_setup_opened`,{automation_id:e})},trackAutomationSetupValidated:({automationId:e})=>{u(`automation_setup_validated`,{automation_id:e})},trackAutomationSetupCreated:({automationId:e,setupMode:t})=>{u(`automation_setup_created`,{automation_id:e,setup_mode:t})},trackAutomationSetupFailed:({automationId:e,setupMode:t})=>{u(`automation_setup_failed`,{automation_id:e,setup_mode:t})},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})},trackAutomationCreatedButton:({backendKind:e})=>{u(`automation_created_button`,{backend_kind:e})},trackAutomationExecuted:({backendKind:e})=>{u(`automation_executed`,{backend_kind:e})},trackAutomationDeleted:({backendKind:e})=>{u(`automation_deleted`,{backend_kind:e})},trackAutomationDisableButton:({backendKind:e})=>{u(`automation_disable_button`,{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:r,source:i,agentServerVersion:a,backendVersion:o})=>{u(`backend_added`,{...n.getBackendTelemetryProperties({backendKind:e,agentServerVersion:a,backendVersion:o,connectionMethod:t}),has_api_key:r,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 React from \"react\";\nimport { Provider } from \"#/types/settings\";\nimport type { BackendKind } from \"#/api/backend-registry/types\";\nimport type { WorkspaceMode } from \"#/api/conversation-metadata-store\";\nimport type { CloudConnectionSource } from \"#/services/cloud-funnel-analytics\";\nimport { getCachedAgentServerVersion } from \"#/api/agent-server-compatibility\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport { useAutomationSdkVersion } from \"#/hooks/query/use-automation-sdk-version\";\nimport {\n type BackendConnectionMethod,\n getBackendTelemetryProperties,\n} from \"#/services/telemetry-context\";\nimport { setTelemetryBackendContext, trackEvent } from \"#/services/telemetry\";\n\n/**\n * Hook that provides tracking functions with automatic data collection\n * from available hooks (settings, etc.)\n *\n * All events require explicit user consent. The shared PostHog client enforces\n * the canonical consent configured by telemetry.ts; this hook must not gate on\n * backend settings because they can be stale while a backend changes.\n */\nexport const useTracking = () => {\n const { backend } = useActiveBackend();\n const automationSdkVersion = useAutomationSdkVersion();\n\n const getBackendTelemetryContext = React.useCallback(\n () => ({\n backendKind: backend.kind,\n agentServerVersion:\n backend.kind === \"local\"\n ? getCachedAgentServerVersion(backend.host)\n : null,\n automationSdkVersion: automationSdkVersion ?? null,\n }),\n [automationSdkVersion, backend.host, backend.kind],\n );\n\n React.useEffect(() => {\n setTelemetryBackendContext(getBackendTelemetryContext());\n }, [getBackendTelemetryContext]);\n\n // Common properties included in all tracking events\n const commonProperties = {\n current_url: window.location.href,\n };\n\n /**\n * PostHog enforces the canonical consent state configured by telemetry.ts.\n * Backend settings are not a capture gate because they can be stale while a\n * backend is being added or switched.\n */\n const track = (event: string, properties: Record<string, unknown> = {}) => {\n setTelemetryBackendContext(getBackendTelemetryContext());\n void trackEvent(event, { ...commonProperties, ...properties });\n };\n\n const trackLoginButtonClick = ({ provider }: { provider: Provider }) => {\n track(\"login_button_clicked\", { provider });\n };\n\n const trackConversationCreated = ({\n conversationId,\n taskId,\n hasRepository,\n gitProvider,\n hasWorkspace,\n workspaceMode,\n hasInitialQuery,\n agentType,\n hasParentConversation,\n entryPoint,\n }: {\n conversationId: string;\n taskId?: string;\n hasRepository: boolean;\n gitProvider?: Provider;\n hasWorkspace: boolean;\n workspaceMode?: WorkspaceMode;\n hasInitialQuery: boolean;\n agentType?: \"default\" | \"plan\";\n hasParentConversation: boolean;\n entryPoint?: string;\n }) => {\n track(\"conversation_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 trackAutomationCreatedButton = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_created_button\", { backend_kind: backendKind });\n };\n\n const trackAutomationExecuted = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_executed\", { backend_kind: backendKind });\n };\n\n const trackAutomationDeleted = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_deleted\", { backend_kind: backendKind });\n };\n\n const trackAutomationDisableButton = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_disable_button\", { backend_kind: backendKind });\n };\n\n const trackAutomationEdited = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_edited\", { backend_kind: backendKind });\n };\n\n const trackAutomationExported = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_exported\", { backend_kind: backendKind });\n };\n\n const trackAutomationImported = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_imported\", { backend_kind: backendKind });\n };\n\n const trackBackendAdded = ({\n backendKind,\n connectionMethod,\n hasApiKey,\n source,\n agentServerVersion,\n backendVersion,\n }: {\n backendKind: BackendKind;\n connectionMethod: BackendConnectionMethod;\n hasApiKey: boolean;\n source?: CloudConnectionSource;\n agentServerVersion?: string | null;\n backendVersion?: string | null;\n }) => {\n track(\"backend_added\", {\n ...getBackendTelemetryProperties({\n backendKind,\n agentServerVersion,\n backendVersion,\n connectionMethod,\n }),\n has_api_key: hasApiKey,\n source,\n });\n };\n\n const trackOnboardingStarted = () => {\n track(\"onboarding_started\");\n };\n\n const trackOnboardingStepViewed = ({\n step,\n stepIndex,\n totalSteps,\n agent,\n }: {\n step: string;\n stepIndex: number;\n totalSteps: number;\n agent: string;\n }) => {\n track(\"onboarding_step_viewed\", {\n step,\n step_index: stepIndex,\n total_steps: totalSteps,\n agent,\n });\n };\n\n const trackOnboardingCompleted = ({ agent }: { agent: string }) => {\n track(\"onboarding_completed\", { agent });\n };\n\n const trackOnboardingSkipped = ({\n step,\n stepIndex,\n totalSteps,\n agent,\n }: {\n step: string;\n stepIndex: number;\n totalSteps: number;\n agent: string;\n }) => {\n track(\"onboarding_skipped\", {\n step,\n step_index: stepIndex,\n total_steps: totalSteps,\n agent,\n });\n };\n\n return {\n trackLoginButtonClick,\n trackConversationCreated,\n trackPushButtonClick,\n trackPullButtonClick,\n trackCreatePrButtonClick,\n trackUserSignupCompleted,\n trackPrebuiltAutomationEnabled,\n trackInitialQuerySubmitted,\n trackUserMessageSent,\n trackDownloadVsCodeButtonClicked,\n trackSettingsSaved,\n trackMcpConfigUpdated,\n trackDownloadTrajectoryButtonClicked,\n trackConversationExported,\n trackAutomationCreatedButton,\n trackAutomationExecuted,\n trackAutomationDeleted,\n trackAutomationDisableButton,\n trackAutomationEdited,\n trackAutomationExported,\n trackAutomationImported,\n trackBackendAdded,\n trackOnboardingStarted,\n trackOnboardingStepViewed,\n trackOnboardingCompleted,\n trackOnboardingSkipped,\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"use-tracking.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 {\n type BackendConnectionMethod,\n getBackendTelemetryProperties,\n} from \"#/services/telemetry-context\";\nimport { setTelemetryBackendContext, trackEvent } from \"#/services/telemetry\";\n\n/**\n * Hook that provides tracking functions with automatic data collection\n * from available hooks (settings, etc.)\n *\n * All events require explicit user consent. The shared PostHog client enforces\n * the canonical consent configured by telemetry.ts; this hook must not gate on\n * backend settings because they can be stale while a backend changes.\n */\nexport const useTracking = () => {\n const { backend } = useActiveBackend();\n const automationSdkVersion = useAutomationSdkVersion();\n\n const getBackendTelemetryContext = React.useCallback(\n () => ({\n backendKind: backend.kind,\n agentServerVersion:\n backend.kind === \"local\"\n ? getCachedAgentServerVersion(backend.host)\n : null,\n automationSdkVersion: automationSdkVersion ?? null,\n }),\n [automationSdkVersion, backend.host, backend.kind],\n );\n\n React.useEffect(() => {\n setTelemetryBackendContext(getBackendTelemetryContext());\n }, [getBackendTelemetryContext]);\n\n // Common properties included in all tracking events\n const commonProperties = {\n current_url: window.location.href,\n };\n\n /**\n * PostHog enforces the canonical consent state configured by telemetry.ts.\n * Backend settings are not a capture gate because they can be stale while a\n * backend is being added or switched.\n */\n const track = (event: string, properties: Record<string, unknown> = {}) => {\n setTelemetryBackendContext(getBackendTelemetryContext());\n void trackEvent(event, { ...commonProperties, ...properties });\n };\n\n const trackLoginButtonClick = ({ provider }: { provider: Provider }) => {\n track(\"login_button_clicked\", { provider });\n };\n\n const trackConversationCreated = ({\n conversationId,\n taskId,\n hasRepository,\n gitProvider,\n hasWorkspace,\n workspaceMode,\n hasInitialQuery,\n agentType,\n hasParentConversation,\n entryPoint,\n }: {\n conversationId: string;\n taskId?: string;\n hasRepository: boolean;\n gitProvider?: Provider;\n hasWorkspace: boolean;\n workspaceMode?: WorkspaceMode;\n hasInitialQuery: boolean;\n agentType?: \"default\" | \"plan\";\n hasParentConversation: boolean;\n entryPoint?: string;\n }) => {\n track(\"conversation_start_requested\", {\n conversation_id: conversationId,\n task_id: taskId,\n is_start_task: conversationId.startsWith(\"task-\"),\n has_repository: hasRepository,\n git_provider: gitProvider,\n has_workspace: hasWorkspace,\n workspace_mode: workspaceMode,\n has_initial_query: hasInitialQuery,\n agent_type: agentType,\n has_parent_conversation: hasParentConversation,\n entry_point: entryPoint,\n });\n };\n\n const trackPushButtonClick = () => {\n track(\"push_button_clicked\");\n };\n\n const trackPullButtonClick = () => {\n track(\"pull_button_clicked\");\n };\n\n const trackCreatePrButtonClick = () => {\n track(\"create_pr_button_clicked\");\n };\n\n const trackUserSignupCompleted = () => {\n track(\"user_signup_completed\", {\n signup_timestamp: new Date().toISOString(),\n });\n };\n\n const trackPrebuiltAutomationEnabled = ({\n automationId,\n automationName,\n automationCategory,\n }: {\n automationId?: string;\n automationName: string;\n automationCategory?: string;\n }) => {\n track(\"prebuilt_automation_enabled\", {\n automation_id: automationId,\n automation_name: automationName,\n automation_category: automationCategory,\n });\n };\n\n /**\n * The setup funnel: opened → validated → created, or failed.\n *\n * A manifest declares no analytics of its own, so the stages are the same for\n * every entry and only the id it carries varies.\n */\n const trackAutomationSetupOpened = ({\n automationId,\n }: {\n automationId: string;\n }) => {\n track(\"automation_setup_opened\", { automation_id: automationId });\n };\n\n const trackAutomationSetupValidated = ({\n automationId,\n }: {\n automationId: string;\n }) => {\n track(\"automation_setup_validated\", { automation_id: automationId });\n };\n\n const trackAutomationSetupCreated = ({\n automationId,\n setupMode,\n }: {\n automationId: string;\n setupMode: string;\n }) => {\n track(\"automation_setup_created\", {\n automation_id: automationId,\n setup_mode: setupMode,\n });\n };\n\n const trackAutomationSetupFailed = ({\n automationId,\n setupMode,\n }: {\n automationId: string;\n setupMode: string;\n }) => {\n track(\"automation_setup_failed\", {\n automation_id: automationId,\n setup_mode: setupMode,\n });\n };\n\n const trackInitialQuerySubmitted = ({\n entryPoint,\n queryCharacterLength,\n replayJsonSize,\n }: {\n entryPoint: string;\n queryCharacterLength: number;\n replayJsonSize?: number;\n }) => {\n track(\"initial_query_submitted\", {\n entry_point: entryPoint,\n query_character_length: queryCharacterLength,\n replay_json_size: replayJsonSize,\n });\n };\n\n const trackUserMessageSent = ({\n sessionMessageCount,\n currentMessageLength,\n }: {\n sessionMessageCount: number;\n currentMessageLength: number;\n }) => {\n track(\"user_message_sent\", {\n session_message_count: sessionMessageCount,\n current_message_length: currentMessageLength,\n });\n };\n\n const trackDownloadVsCodeButtonClicked = () => {\n track(\"download_via_vscode_button_clicked\");\n };\n\n const trackSettingsSaved = ({\n llmModel,\n llmApiKeySet,\n searchApiKeySet,\n remoteRuntimeResourceFactor,\n }: {\n llmModel: unknown;\n llmApiKeySet: \"SET\" | \"UNSET\";\n searchApiKeySet: \"SET\" | \"UNSET\";\n remoteRuntimeResourceFactor?: unknown;\n }) => {\n track(\"settings_saved\", {\n LLM_MODEL: llmModel,\n LLM_API_KEY_SET: llmApiKeySet,\n SEARCH_API_KEY_SET: searchApiKeySet,\n REMOTE_RUNTIME_RESOURCE_FACTOR: remoteRuntimeResourceFactor,\n });\n };\n\n const trackMcpConfigUpdated = ({\n sseServersCount,\n stdioServersCount,\n }: {\n sseServersCount: number;\n stdioServersCount: number;\n }) => {\n track(\"mcp_config_updated\", {\n has_mcp_config: true,\n sse_servers_count: sseServersCount,\n stdio_servers_count: stdioServersCount,\n });\n };\n\n const trackDownloadTrajectoryButtonClicked = () => {\n track(\"download_trajectory_button_clicked\");\n };\n\n const trackConversationExported = (format: \"markdown\" | \"html\") => {\n track(\"conversation_exported\", { format });\n };\n\n const trackAutomationCreatedButton = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_created_button\", { backend_kind: backendKind });\n };\n\n const trackAutomationExecuted = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_executed\", { backend_kind: backendKind });\n };\n\n const trackAutomationDeleted = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_deleted\", { backend_kind: backendKind });\n };\n\n const trackAutomationDisableButton = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_disable_button\", { backend_kind: backendKind });\n };\n\n const trackAutomationEdited = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_edited\", { backend_kind: backendKind });\n };\n\n const trackAutomationExported = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_exported\", { backend_kind: backendKind });\n };\n\n const trackAutomationImported = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_imported\", { backend_kind: backendKind });\n };\n\n const trackBackendAdded = ({\n backendKind,\n connectionMethod,\n hasApiKey,\n source,\n agentServerVersion,\n backendVersion,\n }: {\n backendKind: BackendKind;\n connectionMethod: BackendConnectionMethod;\n hasApiKey: boolean;\n source?: CloudConnectionSource;\n agentServerVersion?: string | null;\n backendVersion?: string | null;\n }) => {\n track(\"backend_added\", {\n ...getBackendTelemetryProperties({\n backendKind,\n agentServerVersion,\n backendVersion,\n connectionMethod,\n }),\n has_api_key: hasApiKey,\n source,\n });\n };\n\n const trackOnboardingStarted = () => {\n track(\"onboarding_started\");\n };\n\n const trackOnboardingStepViewed = ({\n step,\n stepIndex,\n totalSteps,\n agent,\n }: {\n step: string;\n stepIndex: number;\n totalSteps: number;\n agent: string;\n }) => {\n track(\"onboarding_step_viewed\", {\n step,\n step_index: stepIndex,\n total_steps: totalSteps,\n agent,\n });\n };\n\n const trackOnboardingCompleted = ({ agent }: { agent: string }) => {\n track(\"onboarding_completed\", { agent });\n };\n\n const trackOnboardingSkipped = ({\n step,\n stepIndex,\n totalSteps,\n agent,\n }: {\n step: string;\n stepIndex: number;\n totalSteps: number;\n agent: string;\n }) => {\n track(\"onboarding_skipped\", {\n step,\n step_index: stepIndex,\n total_steps: totalSteps,\n agent,\n });\n };\n\n return {\n trackLoginButtonClick,\n trackConversationCreated,\n trackPushButtonClick,\n trackPullButtonClick,\n trackCreatePrButtonClick,\n trackUserSignupCompleted,\n trackPrebuiltAutomationEnabled,\n trackAutomationSetupOpened,\n trackAutomationSetupValidated,\n trackAutomationSetupCreated,\n trackAutomationSetupFailed,\n trackInitialQuerySubmitted,\n trackUserMessageSent,\n trackDownloadVsCodeButtonClicked,\n trackSettingsSaved,\n trackMcpConfigUpdated,\n trackDownloadTrajectoryButtonClicked,\n trackConversationExported,\n trackAutomationCreatedButton,\n trackAutomationExecuted,\n trackAutomationDeleted,\n trackAutomationDisableButton,\n trackAutomationEdited,\n trackAutomationExported,\n trackAutomationImported,\n trackBackendAdded,\n trackOnboardingStarted,\n trackOnboardingStepViewed,\n trackOnboardingCompleted,\n trackOnboardingSkipped,\n };\n};\n"],"mappings":"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"}
@@ -36,6 +36,20 @@ export declare const useTracking: () => {
36
36
  automationName: string;
37
37
  automationCategory?: string;
38
38
  }) => void;
39
+ trackAutomationSetupOpened: ({ automationId, }: {
40
+ automationId: string;
41
+ }) => void;
42
+ trackAutomationSetupValidated: ({ automationId, }: {
43
+ automationId: string;
44
+ }) => void;
45
+ trackAutomationSetupCreated: ({ automationId, setupMode, }: {
46
+ automationId: string;
47
+ setupMode: string;
48
+ }) => void;
49
+ trackAutomationSetupFailed: ({ automationId, setupMode, }: {
50
+ automationId: string;
51
+ setupMode: string;
52
+ }) => void;
39
53
  trackInitialQuerySubmitted: ({ entryPoint, queryCharacterLength, replayJsonSize, }: {
40
54
  entryPoint: string;
41
55
  queryCharacterLength: number;
@@ -1,12 +1,12 @@
1
1
  import { getCachedAgentServerVersion as e } from "../api/agent-server-compatibility.js";
2
- import { useActiveBackend as t } from "../contexts/active-backend-context.js";
3
- import { getBackendTelemetryProperties as n } from "../services/telemetry-context.js";
4
- import { setTelemetryBackendContext as r, trackEvent as i } from "../services/telemetry.js";
2
+ import { getBackendTelemetryProperties as t } from "../services/telemetry-context.js";
3
+ import { setTelemetryBackendContext as n, trackEvent as r } from "../services/telemetry.js";
4
+ import { useActiveBackend as i } from "../contexts/active-backend-context.js";
5
5
  import { useAutomationSdkVersion as a } from "./query/use-automation-sdk-version.js";
6
6
  import o from "react";
7
7
  //#region src/hooks/use-tracking.ts
8
8
  var s = () => {
9
- let { backend: s } = t(), c = a(), l = o.useCallback(() => ({
9
+ let { backend: s } = i(), c = a(), l = o.useCallback(() => ({
10
10
  backendKind: s.kind,
11
11
  agentServerVersion: s.kind === "local" ? e(s.host) : null,
12
12
  automationSdkVersion: c ?? null
@@ -16,10 +16,10 @@ var s = () => {
16
16
  s.kind
17
17
  ]);
18
18
  o.useEffect(() => {
19
- r(l());
19
+ n(l());
20
20
  }, [l]);
21
21
  let u = { current_url: window.location.href }, d = (e, t = {}) => {
22
- r(l()), i(e, {
22
+ n(l()), r(e, {
23
23
  ...u,
24
24
  ...t
25
25
  });
@@ -29,7 +29,7 @@ var s = () => {
29
29
  d("login_button_clicked", { provider: e });
30
30
  },
31
31
  trackConversationCreated: ({ conversationId: e, taskId: t, hasRepository: n, gitProvider: r, hasWorkspace: i, workspaceMode: a, hasInitialQuery: o, agentType: s, hasParentConversation: c, entryPoint: l }) => {
32
- d("conversation_created", {
32
+ d("conversation_start_requested", {
33
33
  conversation_id: e,
34
34
  task_id: t,
35
35
  is_start_task: e.startsWith("task-"),
@@ -62,6 +62,24 @@ var s = () => {
62
62
  automation_category: n
63
63
  });
64
64
  },
65
+ trackAutomationSetupOpened: ({ automationId: e }) => {
66
+ d("automation_setup_opened", { automation_id: e });
67
+ },
68
+ trackAutomationSetupValidated: ({ automationId: e }) => {
69
+ d("automation_setup_validated", { automation_id: e });
70
+ },
71
+ trackAutomationSetupCreated: ({ automationId: e, setupMode: t }) => {
72
+ d("automation_setup_created", {
73
+ automation_id: e,
74
+ setup_mode: t
75
+ });
76
+ },
77
+ trackAutomationSetupFailed: ({ automationId: e, setupMode: t }) => {
78
+ d("automation_setup_failed", {
79
+ automation_id: e,
80
+ setup_mode: t
81
+ });
82
+ },
65
83
  trackInitialQuerySubmitted: ({ entryPoint: e, queryCharacterLength: t, replayJsonSize: n }) => {
66
84
  d("initial_query_submitted", {
67
85
  entry_point: e,
@@ -120,13 +138,13 @@ var s = () => {
120
138
  trackAutomationImported: ({ backendKind: e }) => {
121
139
  d("automation_imported", { backend_kind: e });
122
140
  },
123
- trackBackendAdded: ({ backendKind: e, connectionMethod: t, hasApiKey: r, source: i, agentServerVersion: a, backendVersion: o }) => {
141
+ trackBackendAdded: ({ backendKind: e, connectionMethod: n, hasApiKey: r, source: i, agentServerVersion: a, backendVersion: o }) => {
124
142
  d("backend_added", {
125
- ...n({
143
+ ...t({
126
144
  backendKind: e,
127
145
  agentServerVersion: a,
128
146
  backendVersion: o,
129
- connectionMethod: t
147
+ connectionMethod: n
130
148
  }),
131
149
  has_api_key: r,
132
150
  source: i
@@ -1 +1 @@
1
- {"version":3,"file":"use-tracking.js","names":[],"sources":["../../src/hooks/use-tracking.ts"],"sourcesContent":["import React from \"react\";\nimport { Provider } from \"#/types/settings\";\nimport type { BackendKind } from \"#/api/backend-registry/types\";\nimport type { WorkspaceMode } from \"#/api/conversation-metadata-store\";\nimport type { CloudConnectionSource } from \"#/services/cloud-funnel-analytics\";\nimport { getCachedAgentServerVersion } from \"#/api/agent-server-compatibility\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport { useAutomationSdkVersion } from \"#/hooks/query/use-automation-sdk-version\";\nimport {\n type BackendConnectionMethod,\n getBackendTelemetryProperties,\n} from \"#/services/telemetry-context\";\nimport { setTelemetryBackendContext, trackEvent } from \"#/services/telemetry\";\n\n/**\n * Hook that provides tracking functions with automatic data collection\n * from available hooks (settings, etc.)\n *\n * All events require explicit user consent. The shared PostHog client enforces\n * the canonical consent configured by telemetry.ts; this hook must not gate on\n * backend settings because they can be stale while a backend changes.\n */\nexport const useTracking = () => {\n const { backend } = useActiveBackend();\n const automationSdkVersion = useAutomationSdkVersion();\n\n const getBackendTelemetryContext = React.useCallback(\n () => ({\n backendKind: backend.kind,\n agentServerVersion:\n backend.kind === \"local\"\n ? getCachedAgentServerVersion(backend.host)\n : null,\n automationSdkVersion: automationSdkVersion ?? null,\n }),\n [automationSdkVersion, backend.host, backend.kind],\n );\n\n React.useEffect(() => {\n setTelemetryBackendContext(getBackendTelemetryContext());\n }, [getBackendTelemetryContext]);\n\n // Common properties included in all tracking events\n const commonProperties = {\n current_url: window.location.href,\n };\n\n /**\n * PostHog enforces the canonical consent state configured by telemetry.ts.\n * Backend settings are not a capture gate because they can be stale while a\n * backend is being added or switched.\n */\n const track = (event: string, properties: Record<string, unknown> = {}) => {\n setTelemetryBackendContext(getBackendTelemetryContext());\n void trackEvent(event, { ...commonProperties, ...properties });\n };\n\n const trackLoginButtonClick = ({ provider }: { provider: Provider }) => {\n track(\"login_button_clicked\", { provider });\n };\n\n const trackConversationCreated = ({\n conversationId,\n taskId,\n hasRepository,\n gitProvider,\n hasWorkspace,\n workspaceMode,\n hasInitialQuery,\n agentType,\n hasParentConversation,\n entryPoint,\n }: {\n conversationId: string;\n taskId?: string;\n hasRepository: boolean;\n gitProvider?: Provider;\n hasWorkspace: boolean;\n workspaceMode?: WorkspaceMode;\n hasInitialQuery: boolean;\n agentType?: \"default\" | \"plan\";\n hasParentConversation: boolean;\n entryPoint?: string;\n }) => {\n track(\"conversation_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 trackAutomationCreatedButton = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_created_button\", { backend_kind: backendKind });\n };\n\n const trackAutomationExecuted = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_executed\", { backend_kind: backendKind });\n };\n\n const trackAutomationDeleted = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_deleted\", { backend_kind: backendKind });\n };\n\n const trackAutomationDisableButton = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_disable_button\", { backend_kind: backendKind });\n };\n\n const trackAutomationEdited = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_edited\", { backend_kind: backendKind });\n };\n\n const trackAutomationExported = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_exported\", { backend_kind: backendKind });\n };\n\n const trackAutomationImported = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_imported\", { backend_kind: backendKind });\n };\n\n const trackBackendAdded = ({\n backendKind,\n connectionMethod,\n hasApiKey,\n source,\n agentServerVersion,\n backendVersion,\n }: {\n backendKind: BackendKind;\n connectionMethod: BackendConnectionMethod;\n hasApiKey: boolean;\n source?: CloudConnectionSource;\n agentServerVersion?: string | null;\n backendVersion?: string | null;\n }) => {\n track(\"backend_added\", {\n ...getBackendTelemetryProperties({\n backendKind,\n agentServerVersion,\n backendVersion,\n connectionMethod,\n }),\n has_api_key: hasApiKey,\n source,\n });\n };\n\n const trackOnboardingStarted = () => {\n track(\"onboarding_started\");\n };\n\n const trackOnboardingStepViewed = ({\n step,\n stepIndex,\n totalSteps,\n agent,\n }: {\n step: string;\n stepIndex: number;\n totalSteps: number;\n agent: string;\n }) => {\n track(\"onboarding_step_viewed\", {\n step,\n step_index: stepIndex,\n total_steps: totalSteps,\n agent,\n });\n };\n\n const trackOnboardingCompleted = ({ agent }: { agent: string }) => {\n track(\"onboarding_completed\", { agent });\n };\n\n const trackOnboardingSkipped = ({\n step,\n stepIndex,\n totalSteps,\n agent,\n }: {\n step: string;\n stepIndex: number;\n totalSteps: number;\n agent: string;\n }) => {\n track(\"onboarding_skipped\", {\n step,\n step_index: stepIndex,\n total_steps: totalSteps,\n agent,\n });\n };\n\n return {\n trackLoginButtonClick,\n trackConversationCreated,\n trackPushButtonClick,\n trackPullButtonClick,\n trackCreatePrButtonClick,\n trackUserSignupCompleted,\n trackPrebuiltAutomationEnabled,\n trackInitialQuerySubmitted,\n trackUserMessageSent,\n trackDownloadVsCodeButtonClicked,\n trackSettingsSaved,\n trackMcpConfigUpdated,\n trackDownloadTrajectoryButtonClicked,\n trackConversationExported,\n trackAutomationCreatedButton,\n trackAutomationExecuted,\n trackAutomationDeleted,\n trackAutomationDisableButton,\n trackAutomationEdited,\n trackAutomationExported,\n trackAutomationImported,\n trackBackendAdded,\n trackOnboardingStarted,\n trackOnboardingStepViewed,\n trackOnboardingCompleted,\n trackOnboardingSkipped,\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"use-tracking.js","names":[],"sources":["../../src/hooks/use-tracking.ts"],"sourcesContent":["import React from \"react\";\nimport { Provider } from \"#/types/settings\";\nimport type { BackendKind } from \"#/api/backend-registry/types\";\nimport type { WorkspaceMode } from \"#/api/conversation-metadata-store\";\nimport type { CloudConnectionSource } from \"#/services/cloud-funnel-analytics\";\nimport { getCachedAgentServerVersion } from \"#/api/agent-server-compatibility\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport { useAutomationSdkVersion } from \"#/hooks/query/use-automation-sdk-version\";\nimport {\n type BackendConnectionMethod,\n getBackendTelemetryProperties,\n} from \"#/services/telemetry-context\";\nimport { setTelemetryBackendContext, trackEvent } from \"#/services/telemetry\";\n\n/**\n * Hook that provides tracking functions with automatic data collection\n * from available hooks (settings, etc.)\n *\n * All events require explicit user consent. The shared PostHog client enforces\n * the canonical consent configured by telemetry.ts; this hook must not gate on\n * backend settings because they can be stale while a backend changes.\n */\nexport const useTracking = () => {\n const { backend } = useActiveBackend();\n const automationSdkVersion = useAutomationSdkVersion();\n\n const getBackendTelemetryContext = React.useCallback(\n () => ({\n backendKind: backend.kind,\n agentServerVersion:\n backend.kind === \"local\"\n ? getCachedAgentServerVersion(backend.host)\n : null,\n automationSdkVersion: automationSdkVersion ?? null,\n }),\n [automationSdkVersion, backend.host, backend.kind],\n );\n\n React.useEffect(() => {\n setTelemetryBackendContext(getBackendTelemetryContext());\n }, [getBackendTelemetryContext]);\n\n // Common properties included in all tracking events\n const commonProperties = {\n current_url: window.location.href,\n };\n\n /**\n * PostHog enforces the canonical consent state configured by telemetry.ts.\n * Backend settings are not a capture gate because they can be stale while a\n * backend is being added or switched.\n */\n const track = (event: string, properties: Record<string, unknown> = {}) => {\n setTelemetryBackendContext(getBackendTelemetryContext());\n void trackEvent(event, { ...commonProperties, ...properties });\n };\n\n const trackLoginButtonClick = ({ provider }: { provider: Provider }) => {\n track(\"login_button_clicked\", { provider });\n };\n\n const trackConversationCreated = ({\n conversationId,\n taskId,\n hasRepository,\n gitProvider,\n hasWorkspace,\n workspaceMode,\n hasInitialQuery,\n agentType,\n hasParentConversation,\n entryPoint,\n }: {\n conversationId: string;\n taskId?: string;\n hasRepository: boolean;\n gitProvider?: Provider;\n hasWorkspace: boolean;\n workspaceMode?: WorkspaceMode;\n hasInitialQuery: boolean;\n agentType?: \"default\" | \"plan\";\n hasParentConversation: boolean;\n entryPoint?: string;\n }) => {\n track(\"conversation_start_requested\", {\n conversation_id: conversationId,\n task_id: taskId,\n is_start_task: conversationId.startsWith(\"task-\"),\n has_repository: hasRepository,\n git_provider: gitProvider,\n has_workspace: hasWorkspace,\n workspace_mode: workspaceMode,\n has_initial_query: hasInitialQuery,\n agent_type: agentType,\n has_parent_conversation: hasParentConversation,\n entry_point: entryPoint,\n });\n };\n\n const trackPushButtonClick = () => {\n track(\"push_button_clicked\");\n };\n\n const trackPullButtonClick = () => {\n track(\"pull_button_clicked\");\n };\n\n const trackCreatePrButtonClick = () => {\n track(\"create_pr_button_clicked\");\n };\n\n const trackUserSignupCompleted = () => {\n track(\"user_signup_completed\", {\n signup_timestamp: new Date().toISOString(),\n });\n };\n\n const trackPrebuiltAutomationEnabled = ({\n automationId,\n automationName,\n automationCategory,\n }: {\n automationId?: string;\n automationName: string;\n automationCategory?: string;\n }) => {\n track(\"prebuilt_automation_enabled\", {\n automation_id: automationId,\n automation_name: automationName,\n automation_category: automationCategory,\n });\n };\n\n /**\n * The setup funnel: opened → validated → created, or failed.\n *\n * A manifest declares no analytics of its own, so the stages are the same for\n * every entry and only the id it carries varies.\n */\n const trackAutomationSetupOpened = ({\n automationId,\n }: {\n automationId: string;\n }) => {\n track(\"automation_setup_opened\", { automation_id: automationId });\n };\n\n const trackAutomationSetupValidated = ({\n automationId,\n }: {\n automationId: string;\n }) => {\n track(\"automation_setup_validated\", { automation_id: automationId });\n };\n\n const trackAutomationSetupCreated = ({\n automationId,\n setupMode,\n }: {\n automationId: string;\n setupMode: string;\n }) => {\n track(\"automation_setup_created\", {\n automation_id: automationId,\n setup_mode: setupMode,\n });\n };\n\n const trackAutomationSetupFailed = ({\n automationId,\n setupMode,\n }: {\n automationId: string;\n setupMode: string;\n }) => {\n track(\"automation_setup_failed\", {\n automation_id: automationId,\n setup_mode: setupMode,\n });\n };\n\n const trackInitialQuerySubmitted = ({\n entryPoint,\n queryCharacterLength,\n replayJsonSize,\n }: {\n entryPoint: string;\n queryCharacterLength: number;\n replayJsonSize?: number;\n }) => {\n track(\"initial_query_submitted\", {\n entry_point: entryPoint,\n query_character_length: queryCharacterLength,\n replay_json_size: replayJsonSize,\n });\n };\n\n const trackUserMessageSent = ({\n sessionMessageCount,\n currentMessageLength,\n }: {\n sessionMessageCount: number;\n currentMessageLength: number;\n }) => {\n track(\"user_message_sent\", {\n session_message_count: sessionMessageCount,\n current_message_length: currentMessageLength,\n });\n };\n\n const trackDownloadVsCodeButtonClicked = () => {\n track(\"download_via_vscode_button_clicked\");\n };\n\n const trackSettingsSaved = ({\n llmModel,\n llmApiKeySet,\n searchApiKeySet,\n remoteRuntimeResourceFactor,\n }: {\n llmModel: unknown;\n llmApiKeySet: \"SET\" | \"UNSET\";\n searchApiKeySet: \"SET\" | \"UNSET\";\n remoteRuntimeResourceFactor?: unknown;\n }) => {\n track(\"settings_saved\", {\n LLM_MODEL: llmModel,\n LLM_API_KEY_SET: llmApiKeySet,\n SEARCH_API_KEY_SET: searchApiKeySet,\n REMOTE_RUNTIME_RESOURCE_FACTOR: remoteRuntimeResourceFactor,\n });\n };\n\n const trackMcpConfigUpdated = ({\n sseServersCount,\n stdioServersCount,\n }: {\n sseServersCount: number;\n stdioServersCount: number;\n }) => {\n track(\"mcp_config_updated\", {\n has_mcp_config: true,\n sse_servers_count: sseServersCount,\n stdio_servers_count: stdioServersCount,\n });\n };\n\n const trackDownloadTrajectoryButtonClicked = () => {\n track(\"download_trajectory_button_clicked\");\n };\n\n const trackConversationExported = (format: \"markdown\" | \"html\") => {\n track(\"conversation_exported\", { format });\n };\n\n const trackAutomationCreatedButton = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_created_button\", { backend_kind: backendKind });\n };\n\n const trackAutomationExecuted = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_executed\", { backend_kind: backendKind });\n };\n\n const trackAutomationDeleted = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_deleted\", { backend_kind: backendKind });\n };\n\n const trackAutomationDisableButton = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_disable_button\", { backend_kind: backendKind });\n };\n\n const trackAutomationEdited = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_edited\", { backend_kind: backendKind });\n };\n\n const trackAutomationExported = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_exported\", { backend_kind: backendKind });\n };\n\n const trackAutomationImported = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_imported\", { backend_kind: backendKind });\n };\n\n const trackBackendAdded = ({\n backendKind,\n connectionMethod,\n hasApiKey,\n source,\n agentServerVersion,\n backendVersion,\n }: {\n backendKind: BackendKind;\n connectionMethod: BackendConnectionMethod;\n hasApiKey: boolean;\n source?: CloudConnectionSource;\n agentServerVersion?: string | null;\n backendVersion?: string | null;\n }) => {\n track(\"backend_added\", {\n ...getBackendTelemetryProperties({\n backendKind,\n agentServerVersion,\n backendVersion,\n connectionMethod,\n }),\n has_api_key: hasApiKey,\n source,\n });\n };\n\n const trackOnboardingStarted = () => {\n track(\"onboarding_started\");\n };\n\n const trackOnboardingStepViewed = ({\n step,\n stepIndex,\n totalSteps,\n agent,\n }: {\n step: string;\n stepIndex: number;\n totalSteps: number;\n agent: string;\n }) => {\n track(\"onboarding_step_viewed\", {\n step,\n step_index: stepIndex,\n total_steps: totalSteps,\n agent,\n });\n };\n\n const trackOnboardingCompleted = ({ agent }: { agent: string }) => {\n track(\"onboarding_completed\", { agent });\n };\n\n const trackOnboardingSkipped = ({\n step,\n stepIndex,\n totalSteps,\n agent,\n }: {\n step: string;\n stepIndex: number;\n totalSteps: number;\n agent: string;\n }) => {\n track(\"onboarding_skipped\", {\n step,\n step_index: stepIndex,\n total_steps: totalSteps,\n agent,\n });\n };\n\n return {\n trackLoginButtonClick,\n trackConversationCreated,\n trackPushButtonClick,\n trackPullButtonClick,\n trackCreatePrButtonClick,\n trackUserSignupCompleted,\n trackPrebuiltAutomationEnabled,\n trackAutomationSetupOpened,\n trackAutomationSetupValidated,\n trackAutomationSetupCreated,\n trackAutomationSetupFailed,\n trackInitialQuerySubmitted,\n trackUserMessageSent,\n trackDownloadVsCodeButtonClicked,\n trackSettingsSaved,\n trackMcpConfigUpdated,\n trackDownloadTrajectoryButtonClicked,\n trackConversationExported,\n trackAutomationCreatedButton,\n trackAutomationExecuted,\n trackAutomationDeleted,\n trackAutomationDisableButton,\n trackAutomationEdited,\n trackAutomationExported,\n trackAutomationImported,\n trackBackendAdded,\n trackOnboardingStarted,\n trackOnboardingStepViewed,\n trackOnboardingCompleted,\n trackOnboardingSkipped,\n };\n};\n"],"mappings":"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"}