@openhands/agent-canvas 1.5.0 → 1.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (338) hide show
  1. package/README.md +1 -1
  2. package/README.windows.md +2 -2
  3. package/build/assets/{acp-providers-BQwoUBpe.js → acp-providers-DerAmTyY.js} +1 -1
  4. package/build/assets/{active-backend-context-BCXRv5pm.js → active-backend-context-B8rMv0X9.js} +1 -1
  5. package/build/assets/{add-backend-modal-BKHzq5no.js → add-backend-modal-CxC7BNEc.js} +1 -1
  6. package/build/assets/{agent-profiles-settings-CEp5CIz8.js → agent-profiles-settings-BJb8YXR1.js} +1 -1
  7. package/build/assets/{agent-server-compatibility-D6DSanlx.js → agent-server-compatibility-BWN-EIQn.js} +1 -1
  8. package/build/assets/{agent-server-conversation-service.api-cylugfDz.js → agent-server-conversation-service.api-DSPIkMwJ.js} +4 -4
  9. package/build/assets/{agent-settings-C-tann3x.js → agent-settings-CgCnqaAA.js} +1 -1
  10. package/build/assets/agent-settings-DDkSavD7.js +1 -0
  11. package/build/assets/{alert-banner-Dd4woGbm.js → alert-banner-Dh51WURQ.js} +1 -1
  12. package/build/assets/{api-key-entry-screen-Bll_CkuQ.js → api-key-entry-screen-iZc7n8AI.js} +1 -1
  13. package/build/assets/app-settings-B5zyipxJ.js +1 -0
  14. package/build/assets/{automation-detail-Z9dN2f5l.js → automation-detail-CZsu2CoM.js} +1 -1
  15. package/build/assets/{automation-export-D5uL0Tf8.js → automation-export-BwRX6H32.js} +1 -1
  16. package/build/assets/{automations-list-BMOWcqzZ.js → automations-list-lHAVzMoA.js} +1 -1
  17. package/build/assets/{back-nav-button-ZUDTMOTB.js → back-nav-button-DVknCcSP.js} +1 -1
  18. package/build/assets/backend-form-modal-RGcu909r.js +1 -0
  19. package/build/assets/{backend-synced-settings-badge-Db_REKVw.js → backend-synced-settings-badge-BSfN0AZA.js} +1 -1
  20. package/build/assets/{base-modal-Cb0C6m0Q.js → base-modal-CIF_785P.js} +1 -1
  21. package/build/assets/{brand-button-2Tp3aXk1.js → brand-button-B1izLAdR.js} +1 -1
  22. package/build/assets/{browser-QYLVr1kS.js → browser-DKaeq_sT.js} +2 -2
  23. package/build/assets/browser-store-BI6uklCG.js +1 -0
  24. package/build/assets/{browser-tab-BTTP1OE2.js → browser-tab-qb_ftCxW.js} +1 -1
  25. package/build/assets/{circle-plus-check-toggle-QQJKUnF6.js → circle-plus-check-toggle-DoFIjVE0.js} +1 -1
  26. package/build/assets/client-source-BZK8vRs2.js +1 -0
  27. package/build/assets/cloud-funnel-analytics-Zcv57hfT.js +1 -0
  28. package/build/assets/{color-themes-bVMmJJG6.js → color-themes-CHizm1xF.js} +1 -1
  29. package/build/assets/{combobox-caret-A5jMVHgE.js → combobox-caret-CxZpqoSR.js} +1 -1
  30. package/build/assets/{command-menu-BMVEme4H.js → command-menu-oTvKDU3Y.js} +1 -1
  31. package/build/assets/{command-store-jrWX_CcW.js → command-store-D8J5LMW1.js} +1 -1
  32. package/build/assets/{condenser-settings-CIa6eyB4.js → condenser-settings-BGlWn93P.js} +1 -1
  33. package/build/assets/{confirmation-modal-4n_944zq.js → confirmation-modal-DGBWM2Ls.js} +1 -1
  34. package/build/assets/{context-menu-list-item-DvfFic5I.js → context-menu-list-item-6psNyl7X.js} +1 -1
  35. package/build/assets/{conversation-D4o4dG2t.js → conversation-BoCYx8n2.js} +3 -3
  36. package/build/assets/conversation-DgHqMjnY.js +1 -0
  37. package/build/assets/conversation-panel-78Rxh_-I.js +1 -0
  38. package/build/assets/{conversation-service.api-0JG_fF9d.js → conversation-service.api-_f9GlIEi.js} +1 -1
  39. package/build/assets/conversation-state-store-B2Bp32XI.js +1 -0
  40. package/build/assets/{conversation-store-BCSpLuEf.js → conversation-store-LptbOvKa.js} +1 -1
  41. package/build/assets/{copy-to-clipboard-button-Dp4Q_hXi.js → copy-to-clipboard-button-CFzH_NOX.js} +1 -1
  42. package/build/assets/{device-verify-CM086oKs.js → device-verify-WBSjJBLH.js} +1 -1
  43. package/build/assets/{dropdown-classes-DZq0BQjb.js → dropdown-classes-D3wMJlXT.js} +1 -1
  44. package/build/assets/{ellipsis-button-TPJdyxnK.js → ellipsis-button-CbNnHlIq.js} +1 -1
  45. package/build/assets/{entry.client-DypYHsYm.js → entry.client-DNlPGxsu.js} +2 -2
  46. package/build/assets/{enum-filter-dropdown-CW_mBg0e.js → enum-filter-dropdown-JLYv1t8L.js} +1 -1
  47. package/build/assets/{environment-switch-overlay-6laJch-9.js → environment-switch-overlay-B1PFO8P8.js} +1 -1
  48. package/build/assets/{extensions-hub-BJFbFfKS.js → extensions-hub-CCbLA7IM.js} +1 -1
  49. package/build/assets/{extensions-navigation-DqSl7CJw.js → extensions-navigation-CPNjMNvR.js} +1 -1
  50. package/build/assets/{files-tab-store-tfCav6bB.js → files-tab-store-DJsPxYdg.js} +1 -1
  51. package/build/assets/{files-tab-c316dKAq.js → files-tab-y4K7EXBO.js} +1 -1
  52. package/build/assets/{git-provider-icon-DUb2pEos.js → git-provider-icon-ITvsH4Ko.js} +1 -1
  53. package/build/assets/{home-D7ds4Jyw.js → home-BwbeOWwU.js} +1 -1
  54. package/build/assets/home-DKPGQ5P3.js +1 -0
  55. package/build/assets/index-home-Bko2Itv5.js +1 -0
  56. package/build/assets/{install-server-modal-CvHvzZj3.js → install-server-modal-Qk1gwyI8.js} +1 -1
  57. package/build/assets/{launch-A47TK2Me.js → launch-CAGavYl-.js} +1 -1
  58. package/build/assets/lesson-plan-DMCPdtrf.js +4 -0
  59. package/build/assets/{llm-not-configured-banner-B7DR8SPs.js → llm-not-configured-banner-C1ktyb3C.js} +1 -1
  60. package/build/assets/llm-settings-BBsZFi9l.js +1 -0
  61. package/build/assets/{llm-settings-Cvi7q4ox.js → llm-settings-DFkJQr_w.js} +1 -1
  62. package/build/assets/{llm-subscription-service-Cz1yBBvE.js → llm-subscription-service-Casyzgn1.js} +1 -1
  63. package/build/assets/{manage-backends-modal-DAVhNUCe.js → manage-backends-modal-CKQ46rvw.js} +1 -1
  64. package/build/assets/manifest-03478bbf.js +1 -0
  65. package/build/assets/{map-provider-XSFHmdDs.js → map-provider-BbIb12oh.js} +1 -1
  66. package/build/assets/{markdown-renderer-B6cJJ_MN.js → markdown-renderer-B4V2OMFP.js} +1 -1
  67. package/build/assets/{mcp-BwssgMpg.js → mcp-BapoJsDc.js} +1 -1
  68. package/build/assets/{messages-D8MeG2ZQ.js → messages-CUBFMY5o.js} +1 -1
  69. package/build/assets/{model-selector-BxTbbKub.js → model-selector-DJrMrFAr.js} +1 -1
  70. package/build/assets/{navigation-link-imH6S7h2.js → navigation-link-D8hfwvxI.js} +1 -1
  71. package/build/assets/{onboarding-CyicadGt.js → onboarding-6NMkdNxV.js} +1 -1
  72. package/build/assets/onboarding-modal-Q4AnpIdg.js +1 -0
  73. package/build/assets/{organization-service.api-QknzKDh3.js → organization-service.api-vrRNwOma.js} +1 -1
  74. package/build/assets/{path-utils-BECGet7G.js → path-utils-PNfCKQDV.js} +1 -1
  75. package/build/assets/{planner-tab-DPKHmMAX.js → planner-tab-ByOw1he8.js} +1 -1
  76. package/build/assets/{plugins-management-service-DuTTxquo.js → plugins-management-service-B75jyC56.js} +1 -1
  77. package/build/assets/{profiles-service.api-D6jvZOWu.js → profiles-service.api-BQTklD5D.js} +1 -1
  78. package/build/assets/providers-DfTB2gPd.js +1 -0
  79. package/build/assets/{proxy-CuhhyjdX.js → proxy-B3tCGf0X.js} +1 -1
  80. package/build/assets/{recommended-automations-launcher-DA6DWS7V.js → recommended-automations-launcher-Bj7PuHY1.js} +1 -1
  81. package/build/assets/root-CDnuTToz.js +2 -0
  82. package/build/assets/root-layout-DfYVlcRG.js +2 -0
  83. package/build/assets/{runtime-waiting-state-DeD9G7yJ.js → runtime-waiting-state-CnyVhX4T.js} +1 -1
  84. package/build/assets/{schema-field-BOLdL_U7.js → schema-field-CUwk4wrQ.js} +1 -1
  85. package/build/assets/{sdk-section-page-ZIltERxf.js → sdk-section-page-DLLNrYjI.js} +1 -1
  86. package/build/assets/{sdk-settings-schema-Ba_Pa9uf.js → sdk-settings-schema-CLR01YIK.js} +1 -1
  87. package/build/assets/{secrets-service-50DElFny.js → secrets-service-CvyPWJhg.js} +1 -1
  88. package/build/assets/{secrets-settings-Digl7JLe.js → secrets-settings-CHy72A5C.js} +1 -1
  89. package/build/assets/settings-B9S8UVQr.js +1 -0
  90. package/build/assets/{settings-dropdown-input-BD5C9fBn.js → settings-dropdown-input-Dhx9ErGd.js} +1 -1
  91. package/build/assets/{settings-index-CODBijya.js → settings-index-BKDl2CQ-.js} +1 -1
  92. package/build/assets/{settings-input-CzNOq-Pj.js → settings-input-BsgQWS5R.js} +1 -1
  93. package/build/assets/{settings-list-classes-CuxH9ZoR.js → settings-list-classes-DSJJX99U.js} +1 -1
  94. package/build/assets/{settings-modal-BcSWpKI0.js → settings-modal-DeK11CyT.js} +1 -1
  95. package/build/assets/{settings-service.api-Bsu1PvYO.js → settings-service.api-DXk5TdeJ.js} +1 -1
  96. package/build/assets/{settings-switch-DqmHAfWJ.js → settings-switch-Bes8dIlV.js} +1 -1
  97. package/build/assets/{settings-utils-B1lBErvV.js → settings-utils-DzCVfiR3.js} +1 -1
  98. package/build/assets/{shared-conversation-CDskdmrb.js → shared-conversation-9atDzTR4.js} +1 -1
  99. package/build/assets/{sidebar-mobile-menu-toggle-DmCmZgq1.js → sidebar-mobile-menu-toggle-giMMZctn.js} +1 -1
  100. package/build/assets/{sidebar-nav-link-DMc8AIe7.js → sidebar-nav-link-CHqyFXwV.js} +1 -1
  101. package/build/assets/{sidebar-store-DXWSCFpa.js → sidebar-store-uiUXBU1N.js} +1 -1
  102. package/build/assets/{skill-card-pill-row-DOIWjiMF.js → skill-card-pill-row-BPYKQ3IN.js} +1 -1
  103. package/build/assets/{skills-plugins-DLgINYuY.js → skills-plugins-Tropusio.js} +1 -1
  104. package/build/assets/{skills-settings-DPiCWalR.js → skills-settings-BvzBBCWk.js} +1 -1
  105. package/build/assets/{task-list-tab-CuhcDycu.js → task-list-tab-DyfgG4MC.js} +1 -1
  106. package/build/assets/telemetry-C5JMEfqB.js +2 -0
  107. package/build/assets/{terminal-CVqF-tCD.js → terminal-DRXt2Lr4.js} +1 -1
  108. package/build/assets/{typography-CQn9wyEX.js → typography-CzfoD9DY.js} +1 -1
  109. package/build/assets/{use-acp-credential-form-LlfZO_DD.js → use-acp-credential-form-Bm8qXdlc.js} +1 -1
  110. package/build/assets/{use-activate-agent-profile-DpQjsXM0.js → use-activate-agent-profile-DlykqEfN.js} +1 -1
  111. package/build/assets/{use-active-agent-profile-Gw_uJujV.js → use-active-agent-profile-hI-x-UBa.js} +1 -1
  112. package/build/assets/{use-active-conversation-B0sttISF.js → use-active-conversation-2qeez40F.js} +1 -1
  113. package/build/assets/{use-agent-profiles-LHZEK0Gg.js → use-agent-profiles-0pr5bLS7.js} +1 -1
  114. package/build/assets/{use-agent-state-C5uA0bRj.js → use-agent-state-C6peDXUm.js} +1 -1
  115. package/build/assets/{use-backends-health-DKt1SmiU.js → use-backends-health-CLHPitJM.js} +1 -1
  116. package/build/assets/{use-can-manage-org-profiles-BAtqsbCi.js → use-can-manage-org-profiles-Ck_bsNbH.js} +1 -1
  117. package/build/assets/{use-cloud-current-user-id-C8m1oBy4.js → use-cloud-current-user-id-DUCSxNjY.js} +1 -1
  118. package/build/assets/use-config-B5r8erYt.js +1 -0
  119. package/build/assets/{use-create-conversation-CWQGNQ9J.js → use-create-conversation-r1JHfKO5.js} +1 -1
  120. package/build/assets/{use-create-secret-BIrsX3OB.js → use-create-secret-Cf2N11d2.js} +1 -1
  121. package/build/assets/{use-event-store-CsD17BKu.js → use-event-store-Bbaz51GR.js} +1 -1
  122. package/build/assets/{use-handle-plan-click-DEuO7Byo.js → use-handle-plan-click-CsAW3FlH.js} +1 -1
  123. package/build/assets/{use-launch-skill-in-chat-CdHOoQGM.js → use-launch-skill-in-chat-DJWEfVc5.js} +1 -1
  124. package/build/assets/{use-llm-profiles-DQpQxVOD.js → use-llm-profiles-Dr5__SlZ.js} +1 -1
  125. package/build/assets/{use-plugins-marketplace-Bkk07W_M.js → use-plugins-marketplace-BplU65ae.js} +1 -1
  126. package/build/assets/use-runtime-is-ready-vCFOcLFa.js +1 -0
  127. package/build/assets/{use-save-agent-profile-BxEsjnW0.js → use-save-agent-profile-RqUGqTv6.js} +1 -1
  128. package/build/assets/{use-save-settings-ioSUMqbE.js → use-save-settings-Chvzeu2s.js} +1 -1
  129. package/build/assets/{use-settings-DNJC4gqu.js → use-settings-CyxSlyTQ.js} +1 -1
  130. package/build/assets/{use-settings-nav-items-BUsrDbVR.js → use-settings-nav-items-zEkSO_Bf.js} +1 -1
  131. package/build/assets/{use-skills-BsmKm23M.js → use-skills-xrVoKYrF.js} +1 -1
  132. package/build/assets/{use-task-list-rs7Xbzl8.js → use-task-list-CfisapBW.js} +1 -1
  133. package/build/assets/use-tracking-D2Qg5Lpd.js +1 -0
  134. package/build/assets/{use-user-conversation-B337kUKB.js → use-user-conversation-CnE4zhOA.js} +1 -1
  135. package/build/assets/{vendor~browser-tab-Xn94EtUo.js → vendor~browser-tab-CsMb-pta.js} +1 -1
  136. package/build/assets/{vendor~browser-5Njjw1Cl.js → vendor~browser-wXQ-WZEC.js} +1 -1
  137. package/build/assets/{vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~dhilvkxv-BIieS_OD.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~dhilvkxv-eGLBu60s.js} +2 -2
  138. package/build/assets/{vendor~files-tab-CiC3-lGh.js → vendor~files-tab-B-5fBohe.js} +1 -1
  139. package/build/assets/{vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-DWteoTyr.js → vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-BD7v71DM.js} +1 -1
  140. package/build/assets/{vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-tlf6AnDe.js → vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-BT05Osu4.js} +1 -1
  141. package/build/assets/{vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-B8XNNEQZ.js → vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-COhHANvV.js} +1 -1
  142. package/build/assets/{vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-Dc5nKwLO.js → vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-DgzWSMRc.js} +1 -1
  143. package/build/assets/{vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-CnJRLn5s.js → vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-DqZatR3B.js} +1 -1
  144. package/build/assets/{vendor~launch-28DK5Rsl.js → vendor~launch-_Km3J77E.js} +1 -1
  145. package/build/assets/{vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~g9hift2g-DmmpG9SI.js → vendor~module-D5a_AClf.js} +1 -1
  146. package/build/assets/{vendor~root-layout~conversation-panel~conversation~shared-conversation-lYNG9C1U.js → vendor~root-layout~conversation-panel~conversation~shared-conversation-BrguKXCn.js} +1 -1
  147. package/build/assets/{vendor~root-layout~index-home~home~conversation-panel~conversation-Zhq6xAxR.js → vendor~root-layout~index-home~home~conversation-panel~conversation-BTvhGHHG.js} +1 -1
  148. package/build/assets/{vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation~aler~gfu7qdtz-B81b08bw.js → vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation~aler~gfu7qdtz-BOKQkbc6.js} +1 -1
  149. package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~ftka0fnu-jpyLM1Nn.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~ftka0fnu-cFNmfAE6.js} +1 -1
  150. package/build/assets/{verification-settings-HRgEM-_3.js → verification-settings-CfkrXoSa.js} +1 -1
  151. package/build/index.html +4 -4
  152. package/config/defaults.json +1 -1
  153. package/dist/api/cloud/conversation-service.api.cjs +1 -1
  154. package/dist/api/cloud/conversation-service.api.js +4 -4
  155. package/dist/api/option-service/option-service.api.cjs +1 -1
  156. package/dist/api/option-service/option-service.api.cjs.map +1 -1
  157. package/dist/api/option-service/option-service.api.js +0 -1
  158. package/dist/api/option-service/option-service.api.js.map +1 -1
  159. package/dist/api/option-service/option.types.d.ts +0 -1
  160. package/dist/components/features/backends/backend-form-modal.cjs +1 -1
  161. package/dist/components/features/backends/backend-form-modal.cjs.map +1 -1
  162. package/dist/components/features/backends/backend-form-modal.d.ts +1 -1
  163. package/dist/components/features/backends/backend-form-modal.js +137 -144
  164. package/dist/components/features/backends/backend-form-modal.js.map +1 -1
  165. package/dist/components/providers/agent-server-ui-providers.cjs +1 -1
  166. package/dist/components/providers/agent-server-ui-providers.cjs.map +1 -1
  167. package/dist/components/providers/agent-server-ui-providers.d.ts +4 -2
  168. package/dist/components/providers/agent-server-ui-providers.js +9 -2
  169. package/dist/components/providers/agent-server-ui-providers.js.map +1 -1
  170. package/dist/components/providers/index.cjs +1 -1
  171. package/dist/components/providers/index.d.ts +1 -2
  172. package/dist/components/providers/index.js +0 -1
  173. package/dist/components/providers/telemetry-provider.cjs +2 -0
  174. package/dist/components/providers/telemetry-provider.cjs.map +1 -0
  175. package/dist/components/providers/telemetry-provider.d.ts +6 -0
  176. package/dist/components/providers/telemetry-provider.js +64 -0
  177. package/dist/components/providers/telemetry-provider.js.map +1 -0
  178. package/dist/config/defaults.cjs +1 -1
  179. package/dist/config/defaults.cjs.map +1 -1
  180. package/dist/config/defaults.js +1 -1
  181. package/dist/config/defaults.js.map +1 -1
  182. package/dist/contexts/conversation-websocket-context.cjs +3 -3
  183. package/dist/contexts/conversation-websocket-context.cjs.map +1 -1
  184. package/dist/contexts/conversation-websocket-context.js +197 -204
  185. package/dist/contexts/conversation-websocket-context.js.map +1 -1
  186. package/dist/hooks/mutation/use-save-settings.cjs +1 -1
  187. package/dist/hooks/mutation/use-save-settings.cjs.map +1 -1
  188. package/dist/hooks/mutation/use-save-settings.d.ts +3 -1
  189. package/dist/hooks/mutation/use-save-settings.js +6 -5
  190. package/dist/hooks/mutation/use-save-settings.js.map +1 -1
  191. package/dist/hooks/use-telemetry.cjs +1 -1
  192. package/dist/hooks/use-telemetry.cjs.map +1 -1
  193. package/dist/hooks/use-telemetry.d.ts +3 -3
  194. package/dist/hooks/use-telemetry.js +16 -22
  195. package/dist/hooks/use-telemetry.js.map +1 -1
  196. package/dist/hooks/use-tracking.cjs +1 -1
  197. package/dist/hooks/use-tracking.cjs.map +1 -1
  198. package/dist/hooks/use-tracking.d.ts +3 -4
  199. package/dist/hooks/use-tracking.js +37 -37
  200. package/dist/hooks/use-tracking.js.map +1 -1
  201. package/dist/index.cjs +1 -1
  202. package/dist/index.js +2 -2
  203. package/dist/lib/index.d.ts +2 -2
  204. package/dist/package.cjs +1 -1
  205. package/dist/package.cjs.map +1 -1
  206. package/dist/package.js +2 -2
  207. package/dist/package.js.map +1 -1
  208. package/dist/routes/app-settings.cjs +1 -1
  209. package/dist/routes/app-settings.cjs.map +1 -1
  210. package/dist/routes/app-settings.js +66 -68
  211. package/dist/routes/app-settings.js.map +1 -1
  212. package/dist/routes/llm-settings.cjs +1 -1
  213. package/dist/routes/llm-settings.cjs.map +1 -1
  214. package/dist/routes/llm-settings.js +4 -1
  215. package/dist/routes/llm-settings.js.map +1 -1
  216. package/dist/services/cloud-funnel-analytics.cjs +1 -1
  217. package/dist/services/cloud-funnel-analytics.cjs.map +1 -1
  218. package/dist/services/cloud-funnel-analytics.d.ts +3 -11
  219. package/dist/services/cloud-funnel-analytics.js +16 -30
  220. package/dist/services/cloud-funnel-analytics.js.map +1 -1
  221. package/dist/services/telemetry.cjs +1 -1
  222. package/dist/services/telemetry.cjs.map +1 -1
  223. package/dist/services/telemetry.d.ts +46 -9
  224. package/dist/services/telemetry.js +181 -72
  225. package/dist/services/telemetry.js.map +1 -1
  226. package/dist/themes/color-themes.cjs.map +1 -1
  227. package/dist/themes/color-themes.d.ts +3 -6
  228. package/dist/themes/color-themes.js.map +1 -1
  229. package/dist/utils/error-handler.cjs +1 -1
  230. package/dist/utils/error-handler.cjs.map +1 -1
  231. package/dist/utils/error-handler.d.ts +1 -4
  232. package/dist/utils/error-handler.js +6 -7
  233. package/dist/utils/error-handler.js.map +1 -1
  234. package/dist/utils/map-provider.cjs +1 -1
  235. package/dist/utils/map-provider.cjs.map +1 -1
  236. package/dist/utils/map-provider.d.ts +1 -0
  237. package/dist/utils/map-provider.js +2 -1
  238. package/dist/utils/map-provider.js.map +1 -1
  239. package/package.json +2 -2
  240. package/build/assets/agent-settings-DGUKNSnU.js +0 -1
  241. package/build/assets/app-settings-BpViWwpC.js +0 -1
  242. package/build/assets/backend-form-modal-DhBT8P4g.js +0 -1
  243. package/build/assets/browser-store-BGXOGo-R.js +0 -1
  244. package/build/assets/client-source-Biqarhgr.js +0 -1
  245. package/build/assets/cloud-funnel-analytics-D-27T5Ao.js +0 -1
  246. package/build/assets/conversation-CHnEXGRM.js +0 -1
  247. package/build/assets/conversation-panel-11FjLCId.js +0 -1
  248. package/build/assets/conversation-state-store-JiUQp02U.js +0 -1
  249. package/build/assets/handle-capture-consent-DDnXMC9Y.js +0 -1
  250. package/build/assets/home-BQ-DC06B.js +0 -1
  251. package/build/assets/index-home-BRFDWs_4.js +0 -1
  252. package/build/assets/lesson-plan-DSf95kQ2.js +0 -4
  253. package/build/assets/llm-settings-Ch4ZbW3c.js +0 -1
  254. package/build/assets/manifest-958c741a.js +0 -1
  255. package/build/assets/onboarding-modal-DQwihcTz.js +0 -1
  256. package/build/assets/option-service.api-DAkg_F7p.js +0 -1
  257. package/build/assets/package-Dk_VtWJ4.js +0 -1
  258. package/build/assets/providers-B8pxQK8x.js +0 -1
  259. package/build/assets/root-BhP6bTBB.js +0 -2
  260. package/build/assets/root-layout-oBaHHW4s.js +0 -2
  261. package/build/assets/settings-BfgLHsgd.js +0 -1
  262. package/build/assets/telemetry-DHiTRl5_.js +0 -2
  263. package/build/assets/use-config-CXy4vD0H.js +0 -1
  264. package/build/assets/use-runtime-is-ready-D4pkGT6E.js +0 -1
  265. package/build/assets/use-tracking-poxQHMwR.js +0 -1
  266. package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~ljq5gbus-B2XD4bi2.js +0 -1
  267. package/dist/components/providers/posthog-wrapper.cjs +0 -2
  268. package/dist/components/providers/posthog-wrapper.cjs.map +0 -1
  269. package/dist/components/providers/posthog-wrapper.d.ts +0 -4
  270. package/dist/components/providers/posthog-wrapper.js +0 -49
  271. package/dist/components/providers/posthog-wrapper.js.map +0 -1
  272. package/dist/node_modules/posthog-js/react/dist/esm/index.cjs +0 -2
  273. package/dist/node_modules/posthog-js/react/dist/esm/index.cjs.map +0 -1
  274. package/dist/node_modules/posthog-js/react/dist/esm/index.js +0 -113
  275. package/dist/node_modules/posthog-js/react/dist/esm/index.js.map +0 -1
  276. package/dist/utils/handle-capture-consent.cjs +0 -2
  277. package/dist/utils/handle-capture-consent.cjs.map +0 -1
  278. package/dist/utils/handle-capture-consent.d.ts +0 -7
  279. package/dist/utils/handle-capture-consent.js +0 -8
  280. package/dist/utils/handle-capture-consent.js.map +0 -1
  281. /package/build/assets/{__vite-browser-external-DU-Cb_sT.js → __vite-browser-external-BQUj0sYu.js} +0 -0
  282. /package/build/assets/{agent-server-ui-style-scope-COnDHTm5.js → agent-server-ui-style-scope-qhnhZHBV.js} +0 -0
  283. /package/build/assets/{automation-BVEmGghX.js → automation-LZB0MjdV.js} +0 -0
  284. /package/build/assets/{canvas-ui-BhxjoA1f.js → canvas-ui-COgjltGz.js} +0 -0
  285. /package/build/assets/{checkmark-DhcMGwtO.js → checkmark-h7udgXMM.js} +0 -0
  286. /package/build/assets/{close-DO5Rq_CS.js → close-DLFb5kfv.js} +0 -0
  287. /package/build/assets/{code-tag-BvjtzUsr.js → code-tag-DYlAhEQY.js} +0 -0
  288. /package/build/assets/{conversation-local-storage-B31voBg7.js → conversation-local-storage-F6zVMM--.js} +0 -0
  289. /package/build/assets/{conversation-tab-empty-state-BUhKVwoi.js → conversation-tab-empty-state-CNUmIms2.js} +0 -0
  290. /package/build/assets/{copy-DLUw2us-.js → copy-BLmGeJcd.js} +0 -0
  291. /package/build/assets/{dist-Dj01FXbZ.js → dist-CodhvuAP.js} +0 -0
  292. /package/build/assets/{environment-switch-store-D9hB9PvY.js → environment-switch-store-DkjlKWzN.js} +0 -0
  293. /package/build/assets/{extension-module-card-classes-BlO4w702.js → extension-module-card-classes-9V3J9J_b.js} +0 -0
  294. /package/build/assets/{folder-ynxP2EIL.js → folder-Bk311brm.js} +0 -0
  295. /package/build/assets/{form-control-classes-CvUaw8_L.js → form-control-classes-CbdN5aO3.js} +0 -0
  296. /package/build/assets/{get-language-from-path-rWEQrOGU.js → get-language-from-path-DBqBsCWH.js} +0 -0
  297. /package/build/assets/{git-status-mapper-C3rfzUex.js → git-status-mapper-DnL9OC8_.js} +0 -0
  298. /package/build/assets/{iconBase-CuvxAQZ5.js → iconBase-Dz51Zn5x.js} +0 -0
  299. /package/build/assets/{link-external-BVDiJfZt.js → link-external-CaBmUEs_.js} +0 -0
  300. /package/build/assets/{llm-subscription-BkdHwtQe.js → llm-subscription-DtsX5Lhg.js} +0 -0
  301. /package/build/assets/{loading-spinner-Txxx1I1p.js → loading-spinner-BcdnT0mN.js} +0 -0
  302. /package/build/assets/{middleware-CWYDMVuG.js → middleware-DYHYNAnP.js} +0 -0
  303. /package/build/assets/{modal-backdrop-Dsmzgr5s.js → modal-backdrop-zVwfOJZr.js} +0 -0
  304. /package/build/assets/{modal-body-CDZdZ-eT.js → modal-body-Cc2zp0xb.js} +0 -0
  305. /package/build/assets/{modal-classes-B4oit_4c.js → modal-classes-3qT9Ap7Q.js} +0 -0
  306. /package/build/assets/{modal-close-button-DQElFMPo.js → modal-close-button-BcIBUdSq.js} +0 -0
  307. /package/build/assets/{navigation-context-SjzfpygH.js → navigation-context-DPs2G0X8.js} +0 -0
  308. /package/build/assets/{objectWithoutPropertiesLoose-CQwg6tC0.js → objectWithoutPropertiesLoose-BgYIAs2y.js} +0 -0
  309. /package/build/assets/{openhands-logo-C-gDp1wr.js → openhands-logo-bcNw5bkY.js} +0 -0
  310. /package/build/assets/{plan-components-CgPHWz3E.js → plan-components-BdZXPyZU.js} +0 -0
  311. /package/build/assets/{react-ao3tWj6K.js → react-DPDgL6du.js} +0 -0
  312. /package/build/assets/{search-pb4UKTfK.js → search-BgOCR7_c.js} +0 -0
  313. /package/build/assets/{segmented-toggle-C1-ZVyr5.js → segmented-toggle-kzwZkLaj.js} +0 -0
  314. /package/build/assets/{settings-gear-D_HVvE5L.js → settings-gear-MXCyZW0x.js} +0 -0
  315. /package/build/assets/{settings-like-page-layout-classes-DLrsPCaI.js → settings-like-page-layout-classes-Cdl6jOe5.js} +0 -0
  316. /package/build/assets/{settings-DksoDv5z.js → settings-mQUckT0g.js} +0 -0
  317. /package/build/assets/{settings-section-header-context-C2MUIG88.js → settings-section-header-context-COMOIaxV.js} +0 -0
  318. /package/build/assets/{sidebar-layout-Cn6eQaEI.js → sidebar-layout-Bm7pa3Vk.js} +0 -0
  319. /package/build/assets/{skills-CH4xgIh-.js → skills-EqzxYBvT.js} +0 -0
  320. /package/build/assets/{styled-tooltip-CvsjHuIf.js → styled-tooltip-B14i_Uac.js} +0 -0
  321. /package/build/assets/{switch-skeleton-BpSOvZ-n.js → switch-skeleton-DqQwalyu.js} +0 -0
  322. /package/build/assets/{terminal-Dokfkxn0.js → terminal-Cgf___rK.js} +0 -0
  323. /package/build/assets/{toggle-switch-CS0ClOy2.js → toggle-switch-DX_k418f.js} +0 -0
  324. /package/build/assets/{u-check-circle-DPWVO-9N.js → u-check-circle-BqoIxNz_.js} +0 -0
  325. /package/build/assets/{u-check-circle-half-BGNAAjOW.js → u-check-circle-half-MsShT8Ec.js} +0 -0
  326. /package/build/assets/{u-edit-BIskOoEG.js → u-edit-DL5LgKon.js} +0 -0
  327. /package/build/assets/{use-breakpoint-OjLm94cF.js → use-breakpoint-BP3lqLMx.js} +0 -0
  328. /package/build/assets/{use-click-outside-element-Jpt2WWd7.js → use-click-outside-element-D9BYdANT.js} +0 -0
  329. /package/build/assets/{use-is-authed-Dvbpiu3B.js → use-is-authed-BezEyfeh.js} +0 -0
  330. /package/build/assets/{use-onboarding-completion-DkRpDTsD.js → use-onboarding-completion-C_Swglzp.js} +0 -0
  331. /package/build/assets/{v4-DPgam_jW.js → v4-DbCkTSoU.js} +0 -0
  332. /package/build/assets/{vendor~browser-BvEKaLBz.js → vendor~browser-By2MVv_N.js} +0 -0
  333. /package/build/assets/{vendor~conversation-panel~conversation~alert-banner-CznX01nZ.js → vendor~conversation-panel~conversation~alert-banner-CxfzCmkN.js} +0 -0
  334. /package/build/assets/{vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-BuL5kjfS.js → vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-FghQ3Z1a.js} +0 -0
  335. /package/build/assets/{vendor~root-layout~index-home~home~conversation-panel~conversation~launch~skills-settings~a~j2jlu22h-DUYl8gbZ.js → vendor~root-layout~index-home~home~conversation-panel~conversation~launch~skills-settings~a~j2jlu22h-mC0v44WR.js} +0 -0
  336. /package/build/assets/{vendor~root-layout~index-home~home~mcp~automations-list~onboarding-modal-pIgQDxTc.js → vendor~root-layout~index-home~home~mcp~automations-list~onboarding-modal-C4-GDgiF.js} +0 -0
  337. /package/build/assets/{vendor~terminal-jAaNQWS9.js → vendor~terminal-CnKZILnC.js} +0 -0
  338. /package/build/assets/{x-mark-C5przfXl.js → x-mark-Batp6gXa.js} +0 -0
@@ -1,28 +1,28 @@
1
- import { usePostHog as e } from "../node_modules/posthog-js/react/dist/esm/index.js";
1
+ import { trackEvent as e } from "../services/telemetry.js";
2
2
  import { useSettings as t } from "./query/use-settings.js";
3
3
  //#region src/hooks/use-tracking.ts
4
4
  var n = () => {
5
- let n = e(), { data: r } = t(), i = {
5
+ let { data: n } = t(), r = {
6
6
  current_url: window.location.href,
7
- user_email: r?.email || r?.git_user_email || null
8
- }, a = (e, t = {}) => {
9
- !n || r?.user_consents_to_analytics !== !0 || n.capture(e, {
10
- ...t,
11
- ...i
7
+ user_email: n?.email || n?.git_user_email || null
8
+ }, i = (t, n = {}) => {
9
+ e(t, {
10
+ ...n,
11
+ ...r
12
12
  });
13
13
  };
14
14
  return {
15
15
  trackLoginButtonClick: ({ provider: e }) => {
16
- a("login_button_clicked", { provider: e });
16
+ i("login_button_clicked", { provider: e });
17
17
  },
18
- trackConversationCreated: ({ conversationId: e, taskId: t, hasRepository: n, gitProvider: r, hasWorkspace: i, workspaceMode: o, hasInitialQuery: s, agentType: c, hasParentConversation: l, entryPoint: u }) => {
19
- a("conversation_created", {
18
+ trackConversationCreated: ({ conversationId: e, taskId: t, hasRepository: n, gitProvider: r, hasWorkspace: a, workspaceMode: o, hasInitialQuery: s, agentType: c, hasParentConversation: l, entryPoint: u }) => {
19
+ i("conversation_created", {
20
20
  conversation_id: e,
21
21
  task_id: t,
22
22
  is_start_task: e.startsWith("task-"),
23
23
  has_repository: n,
24
24
  git_provider: r,
25
- has_workspace: i,
25
+ has_workspace: a,
26
26
  workspace_mode: o,
27
27
  has_initial_query: s,
28
28
  agent_type: c,
@@ -31,42 +31,42 @@ var n = () => {
31
31
  });
32
32
  },
33
33
  trackPushButtonClick: () => {
34
- a("push_button_clicked");
34
+ i("push_button_clicked");
35
35
  },
36
36
  trackPullButtonClick: () => {
37
- a("pull_button_clicked");
37
+ i("pull_button_clicked");
38
38
  },
39
39
  trackCreatePrButtonClick: () => {
40
- a("create_pr_button_clicked");
40
+ i("create_pr_button_clicked");
41
41
  },
42
42
  trackUserSignupCompleted: () => {
43
- a("user_signup_completed", { signup_timestamp: (/* @__PURE__ */ new Date()).toISOString() });
43
+ i("user_signup_completed", { signup_timestamp: (/* @__PURE__ */ new Date()).toISOString() });
44
44
  },
45
45
  trackPrebuiltAutomationEnabled: ({ automationId: e, automationName: t, automationCategory: n }) => {
46
- a("prebuilt_automation_enabled", {
46
+ i("prebuilt_automation_enabled", {
47
47
  automation_id: e,
48
48
  automation_name: t,
49
49
  automation_category: n
50
50
  });
51
51
  },
52
52
  trackInitialQuerySubmitted: ({ entryPoint: e, queryCharacterLength: t, replayJsonSize: n }) => {
53
- a("initial_query_submitted", {
53
+ i("initial_query_submitted", {
54
54
  entry_point: e,
55
55
  query_character_length: t,
56
56
  replay_json_size: n
57
57
  });
58
58
  },
59
59
  trackUserMessageSent: ({ sessionMessageCount: e, currentMessageLength: t }) => {
60
- a("user_message_sent", {
60
+ i("user_message_sent", {
61
61
  session_message_count: e,
62
62
  current_message_length: t
63
63
  });
64
64
  },
65
65
  trackDownloadVsCodeButtonClicked: () => {
66
- a("download_via_vscode_button_clicked");
66
+ i("download_via_vscode_button_clicked");
67
67
  },
68
68
  trackSettingsSaved: ({ llmModel: e, llmApiKeySet: t, searchApiKeySet: n, remoteRuntimeResourceFactor: r }) => {
69
- a("settings_saved", {
69
+ i("settings_saved", {
70
70
  LLM_MODEL: e,
71
71
  LLM_API_KEY_SET: t,
72
72
  SEARCH_API_KEY_SET: n,
@@ -74,54 +74,54 @@ var n = () => {
74
74
  });
75
75
  },
76
76
  trackMcpConfigUpdated: ({ sseServersCount: e, stdioServersCount: t }) => {
77
- a("mcp_config_updated", {
77
+ i("mcp_config_updated", {
78
78
  has_mcp_config: !0,
79
79
  sse_servers_count: e,
80
80
  stdio_servers_count: t
81
81
  });
82
82
  },
83
83
  trackDownloadTrajectoryButtonClicked: () => {
84
- a("download_trajectory_button_clicked");
84
+ i("download_trajectory_button_clicked");
85
85
  },
86
86
  trackConversationExported: (e) => {
87
- a("conversation_exported", { format: e });
87
+ i("conversation_exported", { format: e });
88
88
  },
89
89
  trackAutomationCreated: ({ backendKind: e }) => {
90
- a("automation_created", { backend_kind: e });
90
+ i("automation_created", { backend_kind: e });
91
91
  },
92
92
  trackAutomationExecuted: ({ backendKind: e }) => {
93
- a("automation_executed", { backend_kind: e });
93
+ i("automation_executed", { backend_kind: e });
94
94
  },
95
95
  trackAutomationDeleted: ({ backendKind: e }) => {
96
- a("automation_deleted", { backend_kind: e });
96
+ i("automation_deleted", { backend_kind: e });
97
97
  },
98
98
  trackAutomationDeactivated: ({ backendKind: e }) => {
99
- a("automation_deactivated", { backend_kind: e });
99
+ i("automation_deactivated", { backend_kind: e });
100
100
  },
101
101
  trackAutomationEdited: ({ backendKind: e }) => {
102
- a("automation_edited", { backend_kind: e });
102
+ i("automation_edited", { backend_kind: e });
103
103
  },
104
104
  trackAutomationExported: ({ backendKind: e }) => {
105
- a("automation_exported", { backend_kind: e });
105
+ i("automation_exported", { backend_kind: e });
106
106
  },
107
107
  trackAutomationImported: ({ backendKind: e }) => {
108
- a("automation_imported", { backend_kind: e });
108
+ i("automation_imported", { backend_kind: e });
109
109
  },
110
- trackBackendAdded: ({ backendKind: e, connectionMethod: t, isOpenhandsCloud: n, isCustomHost: r, hasApiKey: i, source: o }) => {
111
- a("backend_added", {
110
+ trackBackendAdded: ({ backendKind: e, connectionMethod: t, isOpenhandsCloud: n, isCustomHost: r, hasApiKey: a, source: o }) => {
111
+ i("backend_added", {
112
112
  backend_kind: e,
113
113
  connection_method: t,
114
114
  is_openhands_cloud: n,
115
115
  is_custom_host: r,
116
- has_api_key: i,
116
+ has_api_key: a,
117
117
  source: o
118
118
  });
119
119
  },
120
120
  trackOnboardingStarted: () => {
121
- a("onboarding_started");
121
+ i("onboarding_started");
122
122
  },
123
123
  trackOnboardingStepViewed: ({ step: e, stepIndex: t, totalSteps: n, agent: r }) => {
124
- a("onboarding_step_viewed", {
124
+ i("onboarding_step_viewed", {
125
125
  step: e,
126
126
  step_index: t,
127
127
  total_steps: n,
@@ -129,10 +129,10 @@ var n = () => {
129
129
  });
130
130
  },
131
131
  trackOnboardingCompleted: ({ agent: e }) => {
132
- a("onboarding_completed", { agent: e });
132
+ i("onboarding_completed", { agent: e });
133
133
  },
134
134
  trackOnboardingSkipped: ({ step: e, stepIndex: t, totalSteps: n, agent: r }) => {
135
- a("onboarding_skipped", {
135
+ i("onboarding_skipped", {
136
136
  step: e,
137
137
  step_index: t,
138
138
  total_steps: n,
@@ -1 +1 @@
1
- {"version":3,"file":"use-tracking.js","names":[],"sources":["../../src/hooks/use-tracking.ts"],"sourcesContent":["import { usePostHog } from \"posthog-js/react\";\nimport { useSettings } from \"./query/use-settings\";\nimport { Provider } from \"#/types/settings\";\nimport type { BackendKind } from \"#/api/backend-registry/types\";\nimport type { WorkspaceMode } from \"#/api/conversation-metadata-store\";\nimport type { CloudConnectionSource } from \"#/services/cloud-funnel-analytics\";\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 (user_consents_to_analytics === true).\n * Events are silently dropped when:\n * - posthog is not initialized (VITE_POSTHOG_CLIENT_KEY not set)\n * - user_consents_to_analytics is false or null (consent not yet collected)\n */\nexport const useTracking = () => {\n const posthog = usePostHog();\n const { data: settings } = useSettings();\n\n // Common properties included in all tracking events\n const commonProperties = {\n current_url: window.location.href,\n user_email: settings?.email || settings?.git_user_email || null,\n };\n\n /**\n * Capture an event only when PostHog is available and the user has\n * explicitly consented. null and false are both treated as \"not consented\".\n */\n const track = (event: string, properties: Record<string, unknown> = {}) => {\n if (!posthog || settings?.user_consents_to_analytics !== true) return;\n posthog.capture(event, { ...properties, ...commonProperties });\n };\n\n const trackLoginButtonClick = ({ provider }: { provider: Provider }) => {\n track(\"login_button_clicked\", { provider });\n };\n\n const trackConversationCreated = ({\n conversationId,\n taskId,\n hasRepository,\n gitProvider,\n hasWorkspace,\n workspaceMode,\n hasInitialQuery,\n agentType,\n hasParentConversation,\n entryPoint,\n }: {\n conversationId: string;\n taskId?: string;\n hasRepository: boolean;\n gitProvider?: Provider;\n hasWorkspace: boolean;\n workspaceMode?: WorkspaceMode;\n hasInitialQuery: boolean;\n agentType?: \"default\" | \"plan\";\n hasParentConversation: boolean;\n entryPoint?: string;\n }) => {\n track(\"conversation_created\", {\n conversation_id: conversationId,\n task_id: taskId,\n is_start_task: conversationId.startsWith(\"task-\"),\n has_repository: hasRepository,\n git_provider: gitProvider,\n has_workspace: hasWorkspace,\n workspace_mode: workspaceMode,\n has_initial_query: hasInitialQuery,\n agent_type: agentType,\n has_parent_conversation: hasParentConversation,\n entry_point: entryPoint,\n });\n };\n\n const trackPushButtonClick = () => {\n track(\"push_button_clicked\");\n };\n\n const trackPullButtonClick = () => {\n track(\"pull_button_clicked\");\n };\n\n const trackCreatePrButtonClick = () => {\n track(\"create_pr_button_clicked\");\n };\n\n const trackUserSignupCompleted = () => {\n track(\"user_signup_completed\", {\n signup_timestamp: new Date().toISOString(),\n });\n };\n\n const trackPrebuiltAutomationEnabled = ({\n automationId,\n automationName,\n automationCategory,\n }: {\n automationId?: string;\n automationName: string;\n automationCategory?: string;\n }) => {\n track(\"prebuilt_automation_enabled\", {\n automation_id: automationId,\n automation_name: automationName,\n automation_category: automationCategory,\n });\n };\n\n const trackInitialQuerySubmitted = ({\n entryPoint,\n queryCharacterLength,\n replayJsonSize,\n }: {\n entryPoint: string;\n queryCharacterLength: number;\n replayJsonSize?: number;\n }) => {\n track(\"initial_query_submitted\", {\n entry_point: entryPoint,\n query_character_length: queryCharacterLength,\n replay_json_size: replayJsonSize,\n });\n };\n\n const trackUserMessageSent = ({\n sessionMessageCount,\n currentMessageLength,\n }: {\n sessionMessageCount: number;\n currentMessageLength: number;\n }) => {\n track(\"user_message_sent\", {\n session_message_count: sessionMessageCount,\n current_message_length: currentMessageLength,\n });\n };\n\n const trackDownloadVsCodeButtonClicked = () => {\n track(\"download_via_vscode_button_clicked\");\n };\n\n const trackSettingsSaved = ({\n llmModel,\n llmApiKeySet,\n searchApiKeySet,\n remoteRuntimeResourceFactor,\n }: {\n llmModel: unknown;\n llmApiKeySet: \"SET\" | \"UNSET\";\n searchApiKeySet: \"SET\" | \"UNSET\";\n remoteRuntimeResourceFactor?: unknown;\n }) => {\n track(\"settings_saved\", {\n LLM_MODEL: llmModel,\n LLM_API_KEY_SET: llmApiKeySet,\n SEARCH_API_KEY_SET: searchApiKeySet,\n REMOTE_RUNTIME_RESOURCE_FACTOR: remoteRuntimeResourceFactor,\n });\n };\n\n const trackMcpConfigUpdated = ({\n sseServersCount,\n stdioServersCount,\n }: {\n sseServersCount: number;\n stdioServersCount: number;\n }) => {\n track(\"mcp_config_updated\", {\n has_mcp_config: true,\n sse_servers_count: sseServersCount,\n stdio_servers_count: stdioServersCount,\n });\n };\n\n const trackDownloadTrajectoryButtonClicked = () => {\n track(\"download_trajectory_button_clicked\");\n };\n\n const trackConversationExported = (format: \"markdown\" | \"html\") => {\n track(\"conversation_exported\", { format });\n };\n\n const trackAutomationCreated = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_created\", { backend_kind: backendKind });\n };\n\n const trackAutomationExecuted = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_executed\", { backend_kind: backendKind });\n };\n\n const trackAutomationDeleted = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_deleted\", { backend_kind: backendKind });\n };\n\n const trackAutomationDeactivated = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_deactivated\", { backend_kind: backendKind });\n };\n\n const trackAutomationEdited = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_edited\", { backend_kind: backendKind });\n };\n\n const trackAutomationExported = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_exported\", { backend_kind: backendKind });\n };\n\n const trackAutomationImported = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_imported\", { backend_kind: backendKind });\n };\n\n const trackBackendAdded = ({\n backendKind,\n connectionMethod,\n isOpenhandsCloud,\n isCustomHost,\n hasApiKey,\n source,\n }: {\n backendKind: BackendKind;\n connectionMethod: \"manual\" | \"cloud_login\";\n isOpenhandsCloud: boolean;\n isCustomHost: boolean;\n hasApiKey: boolean;\n source?: CloudConnectionSource;\n }) => {\n track(\"backend_added\", {\n backend_kind: backendKind,\n connection_method: connectionMethod,\n is_openhands_cloud: isOpenhandsCloud,\n is_custom_host: isCustomHost,\n has_api_key: hasApiKey,\n source,\n });\n };\n\n const trackOnboardingStarted = () => {\n track(\"onboarding_started\");\n };\n\n const trackOnboardingStepViewed = ({\n step,\n stepIndex,\n totalSteps,\n agent,\n }: {\n step: string;\n stepIndex: number;\n totalSteps: number;\n agent: string;\n }) => {\n track(\"onboarding_step_viewed\", {\n step,\n step_index: stepIndex,\n total_steps: totalSteps,\n agent,\n });\n };\n\n const trackOnboardingCompleted = ({ agent }: { agent: string }) => {\n track(\"onboarding_completed\", { agent });\n };\n\n const trackOnboardingSkipped = ({\n step,\n stepIndex,\n totalSteps,\n agent,\n }: {\n step: string;\n stepIndex: number;\n totalSteps: number;\n agent: string;\n }) => {\n track(\"onboarding_skipped\", {\n step,\n step_index: stepIndex,\n total_steps: totalSteps,\n agent,\n });\n };\n\n return {\n trackLoginButtonClick,\n trackConversationCreated,\n trackPushButtonClick,\n trackPullButtonClick,\n trackCreatePrButtonClick,\n trackUserSignupCompleted,\n trackPrebuiltAutomationEnabled,\n trackInitialQuerySubmitted,\n trackUserMessageSent,\n trackDownloadVsCodeButtonClicked,\n trackSettingsSaved,\n trackMcpConfigUpdated,\n trackDownloadTrajectoryButtonClicked,\n trackConversationExported,\n trackAutomationCreated,\n trackAutomationExecuted,\n trackAutomationDeleted,\n trackAutomationDeactivated,\n trackAutomationEdited,\n trackAutomationExported,\n trackAutomationImported,\n trackBackendAdded,\n trackOnboardingStarted,\n trackOnboardingStepViewed,\n trackOnboardingCompleted,\n trackOnboardingSkipped,\n };\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"use-tracking.js","names":[],"sources":["../../src/hooks/use-tracking.ts"],"sourcesContent":["import { useSettings } from \"./query/use-settings\";\nimport { Provider } from \"#/types/settings\";\nimport type { BackendKind } from \"#/api/backend-registry/types\";\nimport type { WorkspaceMode } from \"#/api/conversation-metadata-store\";\nimport type { CloudConnectionSource } from \"#/services/cloud-funnel-analytics\";\nimport { trackEvent } from \"#/services/telemetry\";\n\n/**\n * Hook that provides tracking functions with automatic data collection\n * from available hooks (settings, etc.)\n *\n * All events require explicit user consent. The shared PostHog client enforces\n * the canonical consent configured by telemetry.ts; this hook must not gate on\n * backend settings because they can be stale while a backend changes.\n */\nexport const useTracking = () => {\n const { data: settings } = useSettings();\n\n // Common properties included in all tracking events\n const commonProperties = {\n current_url: window.location.href,\n user_email: settings?.email || settings?.git_user_email || null,\n };\n\n /**\n * PostHog enforces the canonical consent state configured by telemetry.ts.\n * Backend settings are not a capture gate because they can be stale while a\n * backend is being added or switched.\n */\n const track = (event: string, properties: Record<string, unknown> = {}) => {\n void trackEvent(event, { ...properties, ...commonProperties });\n };\n\n const trackLoginButtonClick = ({ provider }: { provider: Provider }) => {\n track(\"login_button_clicked\", { provider });\n };\n\n const trackConversationCreated = ({\n conversationId,\n taskId,\n hasRepository,\n gitProvider,\n hasWorkspace,\n workspaceMode,\n hasInitialQuery,\n agentType,\n hasParentConversation,\n entryPoint,\n }: {\n conversationId: string;\n taskId?: string;\n hasRepository: boolean;\n gitProvider?: Provider;\n hasWorkspace: boolean;\n workspaceMode?: WorkspaceMode;\n hasInitialQuery: boolean;\n agentType?: \"default\" | \"plan\";\n hasParentConversation: boolean;\n entryPoint?: string;\n }) => {\n track(\"conversation_created\", {\n conversation_id: conversationId,\n task_id: taskId,\n is_start_task: conversationId.startsWith(\"task-\"),\n has_repository: hasRepository,\n git_provider: gitProvider,\n has_workspace: hasWorkspace,\n workspace_mode: workspaceMode,\n has_initial_query: hasInitialQuery,\n agent_type: agentType,\n has_parent_conversation: hasParentConversation,\n entry_point: entryPoint,\n });\n };\n\n const trackPushButtonClick = () => {\n track(\"push_button_clicked\");\n };\n\n const trackPullButtonClick = () => {\n track(\"pull_button_clicked\");\n };\n\n const trackCreatePrButtonClick = () => {\n track(\"create_pr_button_clicked\");\n };\n\n const trackUserSignupCompleted = () => {\n track(\"user_signup_completed\", {\n signup_timestamp: new Date().toISOString(),\n });\n };\n\n const trackPrebuiltAutomationEnabled = ({\n automationId,\n automationName,\n automationCategory,\n }: {\n automationId?: string;\n automationName: string;\n automationCategory?: string;\n }) => {\n track(\"prebuilt_automation_enabled\", {\n automation_id: automationId,\n automation_name: automationName,\n automation_category: automationCategory,\n });\n };\n\n const trackInitialQuerySubmitted = ({\n entryPoint,\n queryCharacterLength,\n replayJsonSize,\n }: {\n entryPoint: string;\n queryCharacterLength: number;\n replayJsonSize?: number;\n }) => {\n track(\"initial_query_submitted\", {\n entry_point: entryPoint,\n query_character_length: queryCharacterLength,\n replay_json_size: replayJsonSize,\n });\n };\n\n const trackUserMessageSent = ({\n sessionMessageCount,\n currentMessageLength,\n }: {\n sessionMessageCount: number;\n currentMessageLength: number;\n }) => {\n track(\"user_message_sent\", {\n session_message_count: sessionMessageCount,\n current_message_length: currentMessageLength,\n });\n };\n\n const trackDownloadVsCodeButtonClicked = () => {\n track(\"download_via_vscode_button_clicked\");\n };\n\n const trackSettingsSaved = ({\n llmModel,\n llmApiKeySet,\n searchApiKeySet,\n remoteRuntimeResourceFactor,\n }: {\n llmModel: unknown;\n llmApiKeySet: \"SET\" | \"UNSET\";\n searchApiKeySet: \"SET\" | \"UNSET\";\n remoteRuntimeResourceFactor?: unknown;\n }) => {\n track(\"settings_saved\", {\n LLM_MODEL: llmModel,\n LLM_API_KEY_SET: llmApiKeySet,\n SEARCH_API_KEY_SET: searchApiKeySet,\n REMOTE_RUNTIME_RESOURCE_FACTOR: remoteRuntimeResourceFactor,\n });\n };\n\n const trackMcpConfigUpdated = ({\n sseServersCount,\n stdioServersCount,\n }: {\n sseServersCount: number;\n stdioServersCount: number;\n }) => {\n track(\"mcp_config_updated\", {\n has_mcp_config: true,\n sse_servers_count: sseServersCount,\n stdio_servers_count: stdioServersCount,\n });\n };\n\n const trackDownloadTrajectoryButtonClicked = () => {\n track(\"download_trajectory_button_clicked\");\n };\n\n const trackConversationExported = (format: \"markdown\" | \"html\") => {\n track(\"conversation_exported\", { format });\n };\n\n const trackAutomationCreated = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_created\", { backend_kind: backendKind });\n };\n\n const trackAutomationExecuted = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_executed\", { backend_kind: backendKind });\n };\n\n const trackAutomationDeleted = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_deleted\", { backend_kind: backendKind });\n };\n\n const trackAutomationDeactivated = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_deactivated\", { backend_kind: backendKind });\n };\n\n const trackAutomationEdited = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_edited\", { backend_kind: backendKind });\n };\n\n const trackAutomationExported = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_exported\", { backend_kind: backendKind });\n };\n\n const trackAutomationImported = ({\n backendKind,\n }: {\n backendKind: BackendKind;\n }) => {\n track(\"automation_imported\", { backend_kind: backendKind });\n };\n\n const trackBackendAdded = ({\n backendKind,\n connectionMethod,\n isOpenhandsCloud,\n isCustomHost,\n hasApiKey,\n source,\n }: {\n backendKind: BackendKind;\n connectionMethod: \"manual\" | \"cloud_login\";\n isOpenhandsCloud: boolean;\n isCustomHost: boolean;\n hasApiKey: boolean;\n source?: CloudConnectionSource;\n }) => {\n track(\"backend_added\", {\n backend_kind: backendKind,\n connection_method: connectionMethod,\n is_openhands_cloud: isOpenhandsCloud,\n is_custom_host: isCustomHost,\n has_api_key: hasApiKey,\n source,\n });\n };\n\n const trackOnboardingStarted = () => {\n track(\"onboarding_started\");\n };\n\n const trackOnboardingStepViewed = ({\n step,\n stepIndex,\n totalSteps,\n agent,\n }: {\n step: string;\n stepIndex: number;\n totalSteps: number;\n agent: string;\n }) => {\n track(\"onboarding_step_viewed\", {\n step,\n step_index: stepIndex,\n total_steps: totalSteps,\n agent,\n });\n };\n\n const trackOnboardingCompleted = ({ agent }: { agent: string }) => {\n track(\"onboarding_completed\", { agent });\n };\n\n const trackOnboardingSkipped = ({\n step,\n stepIndex,\n totalSteps,\n agent,\n }: {\n step: string;\n stepIndex: number;\n totalSteps: number;\n agent: string;\n }) => {\n track(\"onboarding_skipped\", {\n step,\n step_index: stepIndex,\n total_steps: totalSteps,\n agent,\n });\n };\n\n return {\n trackLoginButtonClick,\n trackConversationCreated,\n trackPushButtonClick,\n trackPullButtonClick,\n trackCreatePrButtonClick,\n trackUserSignupCompleted,\n trackPrebuiltAutomationEnabled,\n trackInitialQuerySubmitted,\n trackUserMessageSent,\n trackDownloadVsCodeButtonClicked,\n trackSettingsSaved,\n trackMcpConfigUpdated,\n trackDownloadTrajectoryButtonClicked,\n trackConversationExported,\n trackAutomationCreated,\n trackAutomationExecuted,\n trackAutomationDeleted,\n trackAutomationDeactivated,\n trackAutomationEdited,\n trackAutomationExported,\n trackAutomationImported,\n trackBackendAdded,\n trackOnboardingStarted,\n trackOnboardingStepViewed,\n trackOnboardingCompleted,\n trackOnboardingSkipped,\n };\n};\n"],"mappings":"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"}
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./_virtual/_rolldown/runtime.cjs`);const e=require(`./components/features/browser/browser-snapshot.cjs`),t=require(`./components/features/browser/empty-browser-message.cjs`),n=require(`./components/features/browser/browser.cjs`),r=require(`./i18n/resources.cjs`),i=require(`./i18n/index.cjs`),a=require(`./query-client-config.cjs`),o=require(`./services/telemetry.cjs`),s=require(`./components/features/chat/chat-interface.cjs`),c=require(`./components/features/conversation/conversation-main/chat-interface-wrapper.cjs`),l=require(`./components/features/conversation/conversation-loading.cjs`),u=require(`./components/features/conversation/metrics-modal/metrics-modal.cjs`),d=require(`./components/features/conversation/conversation-name.cjs`),f=require(`./components/features/conversation/conversation-name-with-status.cjs`),p=require(`./components/features/conversation/conversation-tabs/conversation-tabs.cjs`),m=require(`./components/features/conversation/conversation-main/conversation-main.cjs`),h=require(`./routes/conversation.cjs`),g=require(`./components/features/files/file-item.cjs`),_=require(`./components/features/files/file-list.cjs`),v=require(`./components/features/settings/upgrade-button.cjs`),y=require(`./components/features/settings/banner-message.cjs`),b=require(`./components/features/settings/upgrade-banner.cjs`),x=require(`./components/features/settings/mobile-header.cjs`),S=require(`./components/features/settings/settings-navigation.cjs`),C=require(`./components/features/settings/settings-layout.cjs`),w=require(`./styles/agent-server-ui-style-scope.cjs`),T=require(`./routes/app-settings.cjs`),E=require(`./routes/llm-settings.cjs`),D=require(`./routes/mcp-settings.cjs`),O=require(`./routes/secrets-settings.cjs`),k=require(`./components/features/conversation-panel/conversation-panel.cjs`),A=require(`./components/features/sidebar/sidebar.cjs`),j=require(`./components/features/sidebar/avatar.cjs`),M=require(`./components/features/sidebar/user-avatar.cjs`),N=require(`./components/features/conversation-panel/conversation-panel-wrapper.cjs`),P=require(`./components/features/terminal/terminal.cjs`),F=require(`./components/providers/agent-server-ui-root.cjs`),I=require(`./components/providers/agent-server-ui-providers.cjs`),L=require(`./hooks/use-telemetry.cjs`),R=require(`./components/features/analytics/telemetry-consent-banner.cjs`);require(`./lib/index.cjs`),exports.AGENT_SERVER_UI_DEFAULT_CSS_VARIABLES=w.AGENT_SERVER_UI_DEFAULT_CSS_VARIABLES,exports.AGENT_SERVER_UI_DEFAULT_THEME=w.AGENT_SERVER_UI_DEFAULT_THEME,exports.AGENT_SERVER_UI_SCOPE_ATTRIBUTE=w.AGENT_SERVER_UI_SCOPE_ATTRIBUTE,exports.AGENT_SERVER_UI_SCOPE_SELECTOR=w.AGENT_SERVER_UI_SCOPE_SELECTOR,exports.AgentServerUIProviders=I.AgentServerUIProviders,exports.AgentServerUIRoot=F.AgentServerUIRoot,exports.AppSettings=T.default,exports.AvailableLanguages=i.AvailableLanguages,exports.Avatar=j.Avatar,exports.BannerMessage=y.BannerMessage,exports.BrowserPanel=n.BrowserPanel,exports.BrowserSnapshot=e.BrowserSnapshot,exports.ChatInterfaceWrapper=c.ChatInterfaceWrapper,exports.ChatPanel=s.ChatInterface,exports.ConversationLoading=l.ConversationLoading,exports.ConversationMain=m.ConversationMain,exports.ConversationName=d.ConversationName,exports.ConversationNameWithStatus=f.ConversationNameWithStatus,exports.ConversationPanel=k.ConversationPanel,exports.ConversationPanelWrapper=N.ConversationPanelWrapper,exports.ConversationTabs=p.ConversationTabs,exports.ConversationView=h.default,exports.DEFAULT_AGENT_SERVER_ANALYTICS=I.DEFAULT_AGENT_SERVER_ANALYTICS,exports.EmptyBrowserMessage=t.EmptyBrowserMessage,exports.FileExplorer=_.FileList,exports.FileItem=g.FileItem,exports.FileList=_.FileList,exports.LLMSettings=E.LlmSettingsScreen,exports.MCPSettings=D.MCPSettingsScreen,exports.MetricsModal=u.MetricsModal,exports.MobileHeader=x.MobileHeader,exports.OPENHANDS_I18N_NAMESPACE=i.OPENHANDS_I18N_NAMESPACE,exports.SecretsSettings=O.default,exports.SettingsLayout=C.SettingsLayout,exports.SettingsNavigation=S.SettingsNavigation,exports.SettingsPanel=C.SettingsLayout,exports.Sidebar=A.Sidebar,exports.TelemetryConsentBanner=R.TelemetryConsentBanner,exports.TerminalPanel=P.default,exports.UpgradeBanner=b.UpgradeBanner,exports.UpgradeButton=v.UpgradeButton,exports.UserAvatar=M.UserAvatar,exports.clearTelemetryData=o.clearTelemetryData,exports.createAgentServerI18n=i.createAgentServerI18n,exports.createAgentServerQueryClient=a.createAgentServerQueryClient,exports.getDefaultI18n=i.getDefaultI18n,exports.getDefaultQueryClient=a.getDefaultQueryClient,exports.getI18n=i.getI18n,exports.getPostHogInstance=o.getPostHogInstance,exports.getQueryClient=a.getQueryClient,exports.getTelemetryConsent=o.getTelemetryConsent,exports.isTelemetryEnabled=o.isTelemetryEnabled,exports.queryClient=a.queryClient,exports.setI18n=i.setI18n,exports.setQueryClient=a.setQueryClient,exports.setTelemetryConsent=o.setTelemetryConsent,exports.trackEvent=o.trackEvent,exports.trackInstall=o.trackInstall,exports.trackSessionStart=o.trackSessionStart,exports.translationResources=r.translationResources,exports.useTelemetry=L.useTelemetry,exports.waitForI18n=i.waitForI18n;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`./_virtual/_rolldown/runtime.cjs`);const e=require(`./components/features/browser/browser-snapshot.cjs`),t=require(`./components/features/browser/empty-browser-message.cjs`),n=require(`./components/features/browser/browser.cjs`),r=require(`./i18n/resources.cjs`),i=require(`./i18n/index.cjs`),a=require(`./query-client-config.cjs`),o=require(`./services/telemetry.cjs`),s=require(`./components/features/chat/chat-interface.cjs`),c=require(`./components/features/conversation/conversation-main/chat-interface-wrapper.cjs`),l=require(`./components/features/conversation/conversation-loading.cjs`),u=require(`./components/features/conversation/metrics-modal/metrics-modal.cjs`),d=require(`./components/features/conversation/conversation-name.cjs`),f=require(`./components/features/conversation/conversation-name-with-status.cjs`),p=require(`./components/features/conversation/conversation-tabs/conversation-tabs.cjs`),m=require(`./components/features/conversation/conversation-main/conversation-main.cjs`),h=require(`./routes/conversation.cjs`),g=require(`./components/features/files/file-item.cjs`),_=require(`./components/features/files/file-list.cjs`),v=require(`./components/features/settings/upgrade-button.cjs`),y=require(`./components/features/settings/banner-message.cjs`),b=require(`./components/features/settings/upgrade-banner.cjs`),x=require(`./components/features/settings/mobile-header.cjs`),S=require(`./components/features/settings/settings-navigation.cjs`),C=require(`./components/features/settings/settings-layout.cjs`),w=require(`./styles/agent-server-ui-style-scope.cjs`),T=require(`./routes/app-settings.cjs`),E=require(`./routes/llm-settings.cjs`),D=require(`./routes/mcp-settings.cjs`),O=require(`./routes/secrets-settings.cjs`),k=require(`./components/features/conversation-panel/conversation-panel.cjs`),A=require(`./components/features/sidebar/sidebar.cjs`),j=require(`./components/features/sidebar/avatar.cjs`),M=require(`./components/features/sidebar/user-avatar.cjs`),N=require(`./components/features/conversation-panel/conversation-panel-wrapper.cjs`),P=require(`./components/features/terminal/terminal.cjs`),F=require(`./components/providers/agent-server-ui-root.cjs`),I=require(`./components/providers/agent-server-ui-providers.cjs`),L=require(`./hooks/use-telemetry.cjs`),R=require(`./components/features/analytics/telemetry-consent-banner.cjs`);require(`./lib/index.cjs`),exports.AGENT_SERVER_UI_DEFAULT_CSS_VARIABLES=w.AGENT_SERVER_UI_DEFAULT_CSS_VARIABLES,exports.AGENT_SERVER_UI_DEFAULT_THEME=w.AGENT_SERVER_UI_DEFAULT_THEME,exports.AGENT_SERVER_UI_SCOPE_ATTRIBUTE=w.AGENT_SERVER_UI_SCOPE_ATTRIBUTE,exports.AGENT_SERVER_UI_SCOPE_SELECTOR=w.AGENT_SERVER_UI_SCOPE_SELECTOR,exports.AgentServerUIProviders=I.AgentServerUIProviders,exports.AgentServerUIRoot=F.AgentServerUIRoot,exports.AppSettings=T.default,exports.AvailableLanguages=i.AvailableLanguages,exports.Avatar=j.Avatar,exports.BannerMessage=y.BannerMessage,exports.BrowserPanel=n.BrowserPanel,exports.BrowserSnapshot=e.BrowserSnapshot,exports.ChatInterfaceWrapper=c.ChatInterfaceWrapper,exports.ChatPanel=s.ChatInterface,exports.ConversationLoading=l.ConversationLoading,exports.ConversationMain=m.ConversationMain,exports.ConversationName=d.ConversationName,exports.ConversationNameWithStatus=f.ConversationNameWithStatus,exports.ConversationPanel=k.ConversationPanel,exports.ConversationPanelWrapper=N.ConversationPanelWrapper,exports.ConversationTabs=p.ConversationTabs,exports.ConversationView=h.default,exports.DEFAULT_AGENT_SERVER_ANALYTICS=I.DEFAULT_AGENT_SERVER_ANALYTICS,exports.EmptyBrowserMessage=t.EmptyBrowserMessage,exports.FileExplorer=_.FileList,exports.FileItem=g.FileItem,exports.FileList=_.FileList,exports.LLMSettings=E.LlmSettingsScreen,exports.MCPSettings=D.MCPSettingsScreen,exports.MetricsModal=u.MetricsModal,exports.MobileHeader=x.MobileHeader,exports.OPENHANDS_I18N_NAMESPACE=i.OPENHANDS_I18N_NAMESPACE,exports.SecretsSettings=O.default,exports.SettingsLayout=C.SettingsLayout,exports.SettingsNavigation=S.SettingsNavigation,exports.SettingsPanel=C.SettingsLayout,exports.Sidebar=A.Sidebar,exports.TelemetryConsentBanner=R.TelemetryConsentBanner,exports.TerminalPanel=P.default,exports.UpgradeBanner=b.UpgradeBanner,exports.UpgradeButton=v.UpgradeButton,exports.UserAvatar=M.UserAvatar,exports.clearTelemetryData=o.clearTelemetryData,exports.configureTelemetry=o.configureTelemetry,exports.createAgentServerI18n=i.createAgentServerI18n,exports.createAgentServerQueryClient=a.createAgentServerQueryClient,exports.getDefaultI18n=i.getDefaultI18n,exports.getDefaultQueryClient=a.getDefaultQueryClient,exports.getI18n=i.getI18n,exports.getQueryClient=a.getQueryClient,exports.getTelemetryConsent=o.getTelemetryConsent,exports.isTelemetryEnabled=o.isTelemetryEnabled,exports.queryClient=a.queryClient,exports.setI18n=i.setI18n,exports.setQueryClient=a.setQueryClient,exports.setTelemetryConsent=o.setTelemetryConsent,exports.trackEvent=o.trackEvent,exports.trackInstall=o.trackInstall,exports.trackSessionStart=o.trackSessionStart,exports.translationResources=r.translationResources,exports.useTelemetry=L.useTelemetry,exports.waitForI18n=i.waitForI18n;
package/dist/index.js CHANGED
@@ -4,7 +4,7 @@ import { BrowserPanel as n } from "./components/features/browser/browser.js";
4
4
  import { translationResources as r } from "./i18n/resources.js";
5
5
  import { AvailableLanguages as i, OPENHANDS_I18N_NAMESPACE as a, createAgentServerI18n as o, getDefaultI18n as s, getI18n as c, setI18n as l, waitForI18n as u } from "./i18n/index.js";
6
6
  import { createAgentServerQueryClient as d, getDefaultQueryClient as f, getQueryClient as p, queryClient as m, setQueryClient as h } from "./query-client-config.js";
7
- import { clearTelemetryData as g, getPostHogInstance as _, getTelemetryConsent as v, isTelemetryEnabled as y, setTelemetryConsent as b, trackEvent as x, trackInstall as S, trackSessionStart as C } from "./services/telemetry.js";
7
+ import { clearTelemetryData as g, configureTelemetry as _, getTelemetryConsent as v, isTelemetryEnabled as y, setTelemetryConsent as b, trackEvent as x, trackInstall as S, trackSessionStart as C } from "./services/telemetry.js";
8
8
  import { ChatInterface as w } from "./components/features/chat/chat-interface.js";
9
9
  import { ChatInterfaceWrapper as T } from "./components/features/conversation/conversation-main/chat-interface-wrapper.js";
10
10
  import { ConversationLoading as E } from "./components/features/conversation/conversation-loading.js";
@@ -38,4 +38,4 @@ import { AgentServerUIProviders as ne, DEFAULT_AGENT_SERVER_ANALYTICS as re } fr
38
38
  import { useTelemetry as ie } from "./hooks/use-telemetry.js";
39
39
  import { TelemetryConsentBanner as ae } from "./components/features/analytics/telemetry-consent-banner.js";
40
40
  import "./lib/index.js";
41
- export { B as AGENT_SERVER_UI_DEFAULT_CSS_VARIABLES, V as AGENT_SERVER_UI_DEFAULT_THEME, H as AGENT_SERVER_UI_SCOPE_ATTRIBUTE, U as AGENT_SERVER_UI_SCOPE_SELECTOR, ne as AgentServerUIProviders, te as AgentServerUIRoot, W as AppSettings, i as AvailableLanguages, X as Avatar, F as BannerMessage, n as BrowserPanel, e as BrowserSnapshot, T as ChatInterfaceWrapper, w as ChatPanel, E as ConversationLoading, ee as ConversationMain, O as ConversationName, k as ConversationNameWithStatus, J as ConversationPanel, Q as ConversationPanelWrapper, A as ConversationTabs, j as ConversationView, re as DEFAULT_AGENT_SERVER_ANALYTICS, t as EmptyBrowserMessage, N as FileExplorer, M as FileItem, N as FileList, G as LLMSettings, K as MCPSettings, D as MetricsModal, L as MobileHeader, a as OPENHANDS_I18N_NAMESPACE, q as SecretsSettings, z as SettingsLayout, R as SettingsNavigation, z as SettingsPanel, Y as Sidebar, ae as TelemetryConsentBanner, $ as TerminalPanel, I as UpgradeBanner, P as UpgradeButton, Z as UserAvatar, g as clearTelemetryData, o as createAgentServerI18n, d as createAgentServerQueryClient, s as getDefaultI18n, f as getDefaultQueryClient, c as getI18n, _ as getPostHogInstance, p as getQueryClient, v as getTelemetryConsent, y as isTelemetryEnabled, m as queryClient, l as setI18n, h as setQueryClient, b as setTelemetryConsent, x as trackEvent, S as trackInstall, C as trackSessionStart, r as translationResources, ie as useTelemetry, u as waitForI18n };
41
+ export { B as AGENT_SERVER_UI_DEFAULT_CSS_VARIABLES, V as AGENT_SERVER_UI_DEFAULT_THEME, H as AGENT_SERVER_UI_SCOPE_ATTRIBUTE, U as AGENT_SERVER_UI_SCOPE_SELECTOR, ne as AgentServerUIProviders, te as AgentServerUIRoot, W as AppSettings, i as AvailableLanguages, X as Avatar, F as BannerMessage, n as BrowserPanel, e as BrowserSnapshot, T as ChatInterfaceWrapper, w as ChatPanel, E as ConversationLoading, ee as ConversationMain, O as ConversationName, k as ConversationNameWithStatus, J as ConversationPanel, Q as ConversationPanelWrapper, A as ConversationTabs, j as ConversationView, re as DEFAULT_AGENT_SERVER_ANALYTICS, t as EmptyBrowserMessage, N as FileExplorer, M as FileItem, N as FileList, G as LLMSettings, K as MCPSettings, D as MetricsModal, L as MobileHeader, a as OPENHANDS_I18N_NAMESPACE, q as SecretsSettings, z as SettingsLayout, R as SettingsNavigation, z as SettingsPanel, Y as Sidebar, ae as TelemetryConsentBanner, $ as TerminalPanel, I as UpgradeBanner, P as UpgradeButton, Z as UserAvatar, g as clearTelemetryData, _ as configureTelemetry, o as createAgentServerI18n, d as createAgentServerQueryClient, s as getDefaultI18n, f as getDefaultQueryClient, c as getI18n, p as getQueryClient, v as getTelemetryConsent, y as isTelemetryEnabled, m as queryClient, l as setI18n, h as setQueryClient, b as setTelemetryConsent, x as trackEvent, S as trackInstall, C as trackSessionStart, r as translationResources, ie as useTelemetry, u as waitForI18n };
@@ -4,10 +4,10 @@ export * from "../components/files";
4
4
  export * from "../components/settings";
5
5
  export * from "../components/sidebar";
6
6
  export * from "../components/terminal";
7
- export { AgentServerUIProviders, AgentServerUIRoot, DEFAULT_AGENT_SERVER_ANALYTICS, type AgentServerUIAnalyticsConfig, type AgentServerUIProvidersProps, type AgentServerUIRootProps, } from "../components/providers";
7
+ export { AgentServerUIProviders, AgentServerUIRoot, DEFAULT_AGENT_SERVER_ANALYTICS, type AgentServerUIAnalyticsConfig, type AgentServerUIPostHogAnalyticsConfig, type AgentServerUIProvidersProps, type AgentServerUIRootProps, } from "../components/providers";
8
8
  export { createAgentServerQueryClient, getDefaultQueryClient, getQueryClient, queryClient, setQueryClient, } from "../query-client-config";
9
9
  export { AvailableLanguages, OPENHANDS_I18N_NAMESPACE, createAgentServerI18n, getDefaultI18n, getI18n, setI18n, translationResources, waitForI18n, } from "../i18n";
10
10
  export { AGENT_SERVER_UI_DEFAULT_CSS_VARIABLES, AGENT_SERVER_UI_DEFAULT_THEME, AGENT_SERVER_UI_SCOPE_ATTRIBUTE, AGENT_SERVER_UI_SCOPE_SELECTOR, type AgentServerUICssVariableName, type AgentServerUIStyleOverrides, type AgentServerUITheme, } from "../styles/agent-server-ui-style-scope";
11
11
  export { TelemetryConsentBanner } from "../components/features/analytics/telemetry-consent-banner";
12
12
  export { useTelemetry, type UseTelemetryReturn } from "../hooks/use-telemetry";
13
- export { getTelemetryConsent, setTelemetryConsent, isTelemetryEnabled, trackInstall, trackSessionStart, trackEvent, clearTelemetryData, getPostHogInstance, type TelemetryConsent, } from "../services/telemetry";
13
+ export { configureTelemetry, getTelemetryConsent, setTelemetryConsent, isTelemetryEnabled, trackInstall, trackSessionStart, trackEvent, clearTelemetryData, type TelemetryConfig, type TelemetryConfiguration, type TelemetryConsent, } from "../services/telemetry";
package/dist/package.cjs CHANGED
@@ -1,2 +1,2 @@
1
- require(`./_virtual/_rolldown/runtime.cjs`);var e={name:`@openhands/agent-canvas`,version:`1.5.0`,description:`Agent Canvas UI for OpenHands - run AI coding agents with a visual interface`,license:`MIT`,private:!1,type:`module`,repository:{type:`git`,url:`https://github.com/OpenHands/agent-canvas`},homepage:`https://github.com/OpenHands/agent-canvas#readme`,bugs:{url:`https://github.com/OpenHands/agent-canvas/issues`},bin:{"agent-canvas":`bin/agent-canvas.mjs`},engines:{node:`>=22.12.0`},dependencies:{"@heroui/react":`2.8.10`,"@microlink/react-json-view":`1.31.20`,"@monaco-editor/react":`4.7.0`,"@openhands/extensions":`0.9.0`,"@openhands/typescript-client":`1.34.0`,"@react-router/node":`7.17.0`,"@react-router/serve":`7.17.0`,"@tailwindcss/vite":`4.2.4`,"@tanstack/react-query":`5.100.9`,"@types/shell-quote":`1.7.5`,"@uidotdev/usehooks":`2.4.1`,"@xterm/addon-fit":`0.11.0`,"@xterm/xterm":`6.0.0`,axios:`1.16.0`,"class-variance-authority":`0.7.1`,clsx:`2.1.1`,downshift:`9.3.2`,"framer-motion":`12.38.0`,httpxy:`0.5.3`,i18next:`26.0.8`,"i18next-browser-languagedetector":`8.2.1`,"i18next-http-backend":`4.0.0`,isbot:`5.1.39`,"lucide-react":`1.14.0`,"monaco-editor":`0.55.1`,"posthog-js":`1.372.6`,react:`19.2.5`,"react-dom":`19.2.5`,"react-hot-toast":`2.6.0`,"react-i18next":`17.0.6`,"react-icons":`5.6.0`,"react-markdown":`10.1.0`,"react-router":`7.17.0`,"react-syntax-highlighter":`16.1.1`,"rehype-raw":`7.0.0`,"rehype-sanitize":`6.0.0`,"remark-breaks":`4.0.0`,"remark-gfm":`4.0.1`,"shell-quote":`1.8.4`,sirv:`3.0.2`,"sirv-cli":`3.0.1`,"socket.io-client":`4.8.3`,"tailwind-merge":`3.5.0`,"tailwind-scrollbar":`4.0.2`,"unist-util-visit":`5.1.0`,uuid:`14.0.0`,vite:`8.0.10`,winston:`3.19.0`,"winston-daily-rotate-file":`5.0.0`,zustand:`5.0.12`},scripts:{dev:`node --env-file-if-exists=.env scripts/dev-with-automation.mjs`,"dev:static":`node --env-file-if-exists=.env scripts/dev-static.mjs`,"dev:extra-backend":`node --env-file-if-exists=.env scripts/dev-extra-backend.mjs`,"dev:minimal":`node --env-file-if-exists=.env scripts/dev-safe.mjs`,"dev:frontend":`npm run make-i18n && cross-env VITE_MOCK_API=false react-router dev`,"dev:mock":`npm run make-i18n && cross-env VITE_MOCK_API=true react-router dev`,build:`npm run build:app`,"build:mock":`npm run make-i18n && cross-env VITE_MOCK_API=true react-router build`,start:`npx sirv-cli build/ --single`,test:`npm run make-i18n && vitest run`,"test:e2e":`playwright test --pass-with-no-tests`,"test:e2e:live":`node --env-file-if-exists=.env tests/e2e/live/scripts/run-live-e2e.mjs`,"test:e2e:mock-llm":`playwright test --config=playwright.mock-llm.config.ts`,"test:e2e:mock-llm:docker":`playwright test --config=playwright.mock-llm-docker.config.ts`,"test:coverage":`npm run make-i18n && vitest run --coverage`,dev_wsl:`VITE_WATCH_USE_POLLING=true vite`,preview:`vite preview`,"make-i18n":`node scripts/make-i18n-translations.cjs`,prelint:`npm run make-i18n`,lint:`npm run typecheck && eslint src && prettier --check src/**/*.{ts,tsx}`,"lint:fix":`eslint src --fix && prettier --write src/**/*.{ts,tsx}`,prepare:`husky`,typecheck:`react-router typegen && tsc`,"typecheck:staged":`react-router typegen && npx tsc --noEmit --skipLibCheck`,"check-translation-completeness":`node scripts/check-translation-completeness.cjs`,"build:app":`npm run make-i18n && react-router build`,"build:lib":`npm run make-i18n && react-router typegen && cross-env BUILD_LIB=true VITE_APP_ENV=production vite build && tsc -p tsconfig.lib.json`,"build:docker":`node scripts/docker-build.mjs`,"example:acp-docker:env":`node scripts/gen-acp-docker-env.mjs`},"lint-staged":{"src/**/*.{ts,tsx,js}":[`eslint --fix`,`prettier --write`],"src/**/*.{ts,tsx}":[`node scripts/run-staged-typecheck.mjs`],"src/**/*":[`npm run check-translation-completeness`]},devDependencies:{"@eslint/eslintrc":`3.3.1`,"@eslint/js":`9.39.4`,"@mswjs/socket.io-binding":`0.2.0`,"@playwright/test":`1.59.1`,"@react-router/dev":`7.17.0`,"@tailwindcss/typography":`0.5.19`,"@tanstack/eslint-plugin-query":`5.100.9`,"@testing-library/dom":`10.4.1`,"@testing-library/jest-dom":`6.9.1`,"@testing-library/react":`16.3.2`,"@testing-library/user-event":`14.6.1`,"@types/mdast":`4.0.4`,"@types/node":`25.6.0`,"@types/react":`19.2.14`,"@types/react-dom":`19.2.3`,"@types/react-syntax-highlighter":`15.5.13`,"@typescript-eslint/eslint-plugin":`8.59.2`,"@typescript-eslint/parser":`8.59.2`,"@vercel/react-router":`1.3.0`,"@vitest/coverage-v8":`4.1.5`,"cross-env":`10.1.0`,eslint:`9.39.4`,"eslint-config-prettier":`10.1.8`,"eslint-import-resolver-typescript":`4.4.4`,"eslint-plugin-i18next":`6.1.4`,"eslint-plugin-import-x":`4.16.2`,"eslint-plugin-jsx-a11y":`6.10.2`,"eslint-plugin-prettier":`5.5.5`,"eslint-plugin-react":`7.37.5`,"eslint-plugin-react-hooks":`7.1.1`,"eslint-plugin-unused-imports":`4.4.1`,globals:`16.5.0`,husky:`9.1.7`,jsdom:`29.1.1`,"lint-staged":`16.4.0`,msw:`2.14.2`,"postcss-prefix-selector":`2.1.1`,prettier:`3.8.3`,tailwindcss:`4.2.4`,typescript:`6.0.3`,"vite-plugin-svgr":`5.2.0`,vitest:`4.1.5`},packageManager:`npm@10.5.0`,volta:{node:`22.12.0`},msw:{workerDirectory:[`public`]},overrides:{"@vercel/static-config":{ajv:`8.20.0`},dompurify:`3.4.7`},main:`./dist/index.cjs`,module:`./dist/index.js`,types:`./dist/index.d.ts`,files:[`dist`,`bin`,`build`,`config`,`scripts`,`tools`],exports:{".":{types:`./dist/index.d.ts`,import:`./dist/index.js`,require:`./dist/index.cjs`},"./browser":{types:`./dist/components/browser/index.d.ts`,import:`./dist/components/browser/index.js`,require:`./dist/components/browser/index.cjs`},"./conversation":{types:`./dist/components/conversation/index.d.ts`,import:`./dist/components/conversation/index.js`,require:`./dist/components/conversation/index.cjs`},"./files":{types:`./dist/components/files/index.d.ts`,import:`./dist/components/files/index.js`,require:`./dist/components/files/index.cjs`},"./settings":{types:`./dist/components/settings/index.d.ts`,import:`./dist/components/settings/index.js`,require:`./dist/components/settings/index.cjs`},"./sidebar":{types:`./dist/components/sidebar/index.d.ts`,import:`./dist/components/sidebar/index.js`,require:`./dist/components/sidebar/index.cjs`},"./terminal":{types:`./dist/components/terminal/index.d.ts`,import:`./dist/components/terminal/index.js`,require:`./dist/components/terminal/index.cjs`},"./i18n":{types:`./dist/i18n/index.d.ts`,import:`./dist/i18n/index.js`,require:`./dist/i18n/index.cjs`},"./package.json":`./package.json`},peerDependencies:{react:`19.2.5`,"react-dom":`19.2.5`,"react-router":`7.17.0`}};exports.default=e;
1
+ require(`./_virtual/_rolldown/runtime.cjs`);var e={name:`@openhands/agent-canvas`,version:`1.5.1`,description:`Agent Canvas UI for OpenHands - run AI coding agents with a visual interface`,license:`MIT`,private:!1,type:`module`,repository:{type:`git`,url:`https://github.com/OpenHands/agent-canvas`},homepage:`https://github.com/OpenHands/agent-canvas#readme`,bugs:{url:`https://github.com/OpenHands/agent-canvas/issues`},bin:{"agent-canvas":`bin/agent-canvas.mjs`},engines:{node:`>=22.12.0`},dependencies:{"@heroui/react":`2.8.10`,"@microlink/react-json-view":`1.31.20`,"@monaco-editor/react":`4.7.0`,"@openhands/extensions":`0.9.0`,"@openhands/typescript-client":`1.34.0`,"@react-router/node":`7.17.0`,"@react-router/serve":`7.17.0`,"@tailwindcss/vite":`4.2.4`,"@tanstack/react-query":`5.100.9`,"@types/shell-quote":`1.7.5`,"@uidotdev/usehooks":`2.4.1`,"@xterm/addon-fit":`0.11.0`,"@xterm/xterm":`6.0.0`,axios:`1.16.0`,"class-variance-authority":`0.7.1`,clsx:`2.1.1`,downshift:`9.3.2`,"framer-motion":`12.38.0`,httpxy:`0.5.3`,i18next:`26.0.8`,"i18next-browser-languagedetector":`8.2.1`,"i18next-http-backend":`4.0.0`,isbot:`5.1.39`,"lucide-react":`1.14.0`,"monaco-editor":`0.55.1`,"posthog-js":`1.372.6`,react:`19.2.5`,"react-dom":`19.2.5`,"react-hot-toast":`2.6.0`,"react-i18next":`17.0.6`,"react-icons":`5.6.0`,"react-markdown":`10.1.0`,"react-router":`7.17.0`,"react-syntax-highlighter":`16.1.1`,"rehype-raw":`7.0.0`,"rehype-sanitize":`6.0.0`,"remark-breaks":`4.0.0`,"remark-gfm":`4.0.1`,"shell-quote":`1.8.4`,sirv:`3.0.2`,"sirv-cli":`3.0.1`,"socket.io-client":`4.8.3`,"tailwind-merge":`3.5.0`,"tailwind-scrollbar":`4.0.2`,"unist-util-visit":`5.1.0`,uuid:`14.0.0`,vite:`8.0.10`,winston:`3.19.0`,"winston-daily-rotate-file":`5.0.0`,zustand:`5.0.12`},scripts:{dev:`node --env-file-if-exists=.env scripts/dev-with-automation.mjs`,"dev:static":`node --env-file-if-exists=.env scripts/dev-static.mjs`,"dev:extra-backend":`node --env-file-if-exists=.env scripts/dev-extra-backend.mjs`,"dev:minimal":`node --env-file-if-exists=.env scripts/dev-safe.mjs`,"dev:frontend":`npm run make-i18n && cross-env VITE_MOCK_API=false react-router dev`,"dev:mock":`npm run make-i18n && cross-env VITE_MOCK_API=true react-router dev`,build:`npm run build:app`,"build:mock":`npm run make-i18n && cross-env VITE_MOCK_API=true react-router build`,start:`npx sirv-cli build/ --single`,test:`npm run make-i18n && vitest run`,"test:e2e":`playwright test --pass-with-no-tests`,"test:e2e:live":`node --env-file-if-exists=.env tests/e2e/live/scripts/run-live-e2e.mjs`,"test:e2e:mock-llm":`playwright test --config=playwright.mock-llm.config.ts`,"test:e2e:mock-llm:docker":`playwright test --config=playwright.mock-llm-docker.config.ts`,"test:coverage":`npm run make-i18n && vitest run --coverage`,dev_wsl:`VITE_WATCH_USE_POLLING=true vite`,preview:`vite preview`,"make-i18n":`node scripts/make-i18n-translations.cjs`,prelint:`npm run make-i18n`,lint:`npm run typecheck && eslint src && prettier --check src/**/*.{ts,tsx}`,"lint:fix":`eslint src --fix && prettier --write src/**/*.{ts,tsx}`,prepare:`husky`,typecheck:`react-router typegen && tsc`,"typecheck:staged":`react-router typegen && npx tsc --noEmit --skipLibCheck`,"check-translation-completeness":`node scripts/check-translation-completeness.cjs`,"build:app":`npm run make-i18n && react-router build`,"build:lib":`npm run make-i18n && react-router typegen && cross-env BUILD_LIB=true vite build && tsc -p tsconfig.lib.json`,"build:docker":`node scripts/docker-build.mjs`,"example:acp-docker:env":`node scripts/gen-acp-docker-env.mjs`},"lint-staged":{"src/**/*.{ts,tsx,js}":[`eslint --fix`,`prettier --write`],"src/**/*.{ts,tsx}":[`node scripts/run-staged-typecheck.mjs`],"src/**/*":[`npm run check-translation-completeness`]},devDependencies:{"@eslint/eslintrc":`3.3.1`,"@eslint/js":`9.39.4`,"@mswjs/socket.io-binding":`0.2.0`,"@playwright/test":`1.59.1`,"@react-router/dev":`7.17.0`,"@tailwindcss/typography":`0.5.19`,"@tanstack/eslint-plugin-query":`5.100.9`,"@testing-library/dom":`10.4.1`,"@testing-library/jest-dom":`6.9.1`,"@testing-library/react":`16.3.2`,"@testing-library/user-event":`14.6.1`,"@types/mdast":`4.0.4`,"@types/node":`25.6.0`,"@types/react":`19.2.14`,"@types/react-dom":`19.2.3`,"@types/react-syntax-highlighter":`15.5.13`,"@typescript-eslint/eslint-plugin":`8.59.2`,"@typescript-eslint/parser":`8.59.2`,"@vercel/react-router":`1.3.0`,"@vitest/coverage-v8":`4.1.5`,"cross-env":`10.1.0`,eslint:`9.39.4`,"eslint-config-prettier":`10.1.8`,"eslint-import-resolver-typescript":`4.4.4`,"eslint-plugin-i18next":`6.1.4`,"eslint-plugin-import-x":`4.16.2`,"eslint-plugin-jsx-a11y":`6.10.2`,"eslint-plugin-prettier":`5.5.5`,"eslint-plugin-react":`7.37.5`,"eslint-plugin-react-hooks":`7.1.1`,"eslint-plugin-unused-imports":`4.4.1`,globals:`16.5.0`,husky:`9.1.7`,jsdom:`29.1.1`,"lint-staged":`16.4.0`,msw:`2.14.2`,"postcss-prefix-selector":`2.1.1`,prettier:`3.8.3`,tailwindcss:`4.2.4`,typescript:`6.0.3`,"vite-plugin-svgr":`5.2.0`,vitest:`4.1.5`},packageManager:`npm@10.5.0`,volta:{node:`22.12.0`},msw:{workerDirectory:[`public`]},overrides:{"@vercel/static-config":{ajv:`8.20.0`},dompurify:`3.4.7`},main:`./dist/index.cjs`,module:`./dist/index.js`,types:`./dist/index.d.ts`,files:[`dist`,`bin`,`build`,`config`,`scripts`,`tools`],exports:{".":{types:`./dist/index.d.ts`,import:`./dist/index.js`,require:`./dist/index.cjs`},"./browser":{types:`./dist/components/browser/index.d.ts`,import:`./dist/components/browser/index.js`,require:`./dist/components/browser/index.cjs`},"./conversation":{types:`./dist/components/conversation/index.d.ts`,import:`./dist/components/conversation/index.js`,require:`./dist/components/conversation/index.cjs`},"./files":{types:`./dist/components/files/index.d.ts`,import:`./dist/components/files/index.js`,require:`./dist/components/files/index.cjs`},"./settings":{types:`./dist/components/settings/index.d.ts`,import:`./dist/components/settings/index.js`,require:`./dist/components/settings/index.cjs`},"./sidebar":{types:`./dist/components/sidebar/index.d.ts`,import:`./dist/components/sidebar/index.js`,require:`./dist/components/sidebar/index.cjs`},"./terminal":{types:`./dist/components/terminal/index.d.ts`,import:`./dist/components/terminal/index.js`,require:`./dist/components/terminal/index.cjs`},"./i18n":{types:`./dist/i18n/index.d.ts`,import:`./dist/i18n/index.js`,require:`./dist/i18n/index.cjs`},"./package.json":`./package.json`},peerDependencies:{react:`19.2.5`,"react-dom":`19.2.5`,"react-router":`7.17.0`}};exports.default=e;
2
2
  //# sourceMappingURL=package.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"package.cjs","names":[],"sources":["../package.json"],"sourcesContent":["{\n \"name\": \"@openhands/agent-canvas\",\n \"version\": \"1.5.0\",\n \"description\": \"Agent Canvas UI for OpenHands - run AI coding agents with a visual interface\",\n \"license\": \"MIT\",\n \"private\": false,\n \"type\": \"module\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/OpenHands/agent-canvas\"\n },\n \"homepage\": \"https://github.com/OpenHands/agent-canvas#readme\",\n \"bugs\": {\n \"url\": \"https://github.com/OpenHands/agent-canvas/issues\"\n },\n \"bin\": {\n \"agent-canvas\": \"bin/agent-canvas.mjs\"\n },\n \"engines\": {\n \"node\": \">=22.12.0\"\n },\n \"dependencies\": {\n \"@heroui/react\": \"2.8.10\",\n \"@microlink/react-json-view\": \"1.31.20\",\n \"@monaco-editor/react\": \"4.7.0\",\n \"@openhands/extensions\": \"0.9.0\",\n \"@openhands/typescript-client\": \"1.34.0\",\n \"@react-router/node\": \"7.17.0\",\n \"@react-router/serve\": \"7.17.0\",\n \"@tailwindcss/vite\": \"4.2.4\",\n \"@tanstack/react-query\": \"5.100.9\",\n \"@types/shell-quote\": \"1.7.5\",\n \"@uidotdev/usehooks\": \"2.4.1\",\n \"@xterm/addon-fit\": \"0.11.0\",\n \"@xterm/xterm\": \"6.0.0\",\n \"axios\": \"1.16.0\",\n \"class-variance-authority\": \"0.7.1\",\n \"clsx\": \"2.1.1\",\n \"downshift\": \"9.3.2\",\n \"framer-motion\": \"12.38.0\",\n \"httpxy\": \"0.5.3\",\n \"i18next\": \"26.0.8\",\n \"i18next-browser-languagedetector\": \"8.2.1\",\n \"i18next-http-backend\": \"4.0.0\",\n \"isbot\": \"5.1.39\",\n \"lucide-react\": \"1.14.0\",\n \"monaco-editor\": \"0.55.1\",\n \"posthog-js\": \"1.372.6\",\n \"react\": \"19.2.5\",\n \"react-dom\": \"19.2.5\",\n \"react-hot-toast\": \"2.6.0\",\n \"react-i18next\": \"17.0.6\",\n \"react-icons\": \"5.6.0\",\n \"react-markdown\": \"10.1.0\",\n \"react-router\": \"7.17.0\",\n \"react-syntax-highlighter\": \"16.1.1\",\n \"rehype-raw\": \"7.0.0\",\n \"rehype-sanitize\": \"6.0.0\",\n \"remark-breaks\": \"4.0.0\",\n \"remark-gfm\": \"4.0.1\",\n \"shell-quote\": \"1.8.4\",\n \"sirv\": \"3.0.2\",\n \"sirv-cli\": \"3.0.1\",\n \"socket.io-client\": \"4.8.3\",\n \"tailwind-merge\": \"3.5.0\",\n \"tailwind-scrollbar\": \"4.0.2\",\n \"unist-util-visit\": \"5.1.0\",\n \"uuid\": \"14.0.0\",\n \"vite\": \"8.0.10\",\n \"winston\": \"3.19.0\",\n \"winston-daily-rotate-file\": \"5.0.0\",\n \"zustand\": \"5.0.12\"\n },\n \"scripts\": {\n \"dev\": \"node --env-file-if-exists=.env scripts/dev-with-automation.mjs\",\n \"dev:static\": \"node --env-file-if-exists=.env scripts/dev-static.mjs\",\n \"dev:extra-backend\": \"node --env-file-if-exists=.env scripts/dev-extra-backend.mjs\",\n \"dev:minimal\": \"node --env-file-if-exists=.env scripts/dev-safe.mjs\",\n \"dev:frontend\": \"npm run make-i18n && cross-env VITE_MOCK_API=false react-router dev\",\n \"dev:mock\": \"npm run make-i18n && cross-env VITE_MOCK_API=true react-router dev\",\n \"build\": \"npm run build:app\",\n \"build:mock\": \"npm run make-i18n && cross-env VITE_MOCK_API=true react-router build\",\n \"start\": \"npx sirv-cli build/ --single\",\n \"test\": \"npm run make-i18n && vitest run\",\n \"test:e2e\": \"playwright test --pass-with-no-tests\",\n \"test:e2e:live\": \"node --env-file-if-exists=.env tests/e2e/live/scripts/run-live-e2e.mjs\",\n \"test:e2e:mock-llm\": \"playwright test --config=playwright.mock-llm.config.ts\",\n \"test:e2e:mock-llm:docker\": \"playwright test --config=playwright.mock-llm-docker.config.ts\",\n \"test:coverage\": \"npm run make-i18n && vitest run --coverage\",\n \"dev_wsl\": \"VITE_WATCH_USE_POLLING=true vite\",\n \"preview\": \"vite preview\",\n \"make-i18n\": \"node scripts/make-i18n-translations.cjs\",\n \"prelint\": \"npm run make-i18n\",\n \"lint\": \"npm run typecheck && eslint src && prettier --check src/**/*.{ts,tsx}\",\n \"lint:fix\": \"eslint src --fix && prettier --write src/**/*.{ts,tsx}\",\n \"prepare\": \"husky\",\n \"typecheck\": \"react-router typegen && tsc\",\n \"typecheck:staged\": \"react-router typegen && npx tsc --noEmit --skipLibCheck\",\n \"check-translation-completeness\": \"node scripts/check-translation-completeness.cjs\",\n \"build:app\": \"npm run make-i18n && react-router build\",\n \"build:lib\": \"npm run make-i18n && react-router typegen && cross-env BUILD_LIB=true VITE_APP_ENV=production vite build && tsc -p tsconfig.lib.json\",\n \"build:docker\": \"node scripts/docker-build.mjs\",\n \"example:acp-docker:env\": \"node scripts/gen-acp-docker-env.mjs\"\n },\n \"lint-staged\": {\n \"src/**/*.{ts,tsx,js}\": [\n \"eslint --fix\",\n \"prettier --write\"\n ],\n \"src/**/*.{ts,tsx}\": [\n \"node scripts/run-staged-typecheck.mjs\"\n ],\n \"src/**/*\": [\n \"npm run check-translation-completeness\"\n ]\n },\n \"devDependencies\": {\n \"@eslint/eslintrc\": \"3.3.1\",\n \"@eslint/js\": \"9.39.4\",\n \"@mswjs/socket.io-binding\": \"0.2.0\",\n \"@playwright/test\": \"1.59.1\",\n \"@react-router/dev\": \"7.17.0\",\n \"@tailwindcss/typography\": \"0.5.19\",\n \"@tanstack/eslint-plugin-query\": \"5.100.9\",\n \"@testing-library/dom\": \"10.4.1\",\n \"@testing-library/jest-dom\": \"6.9.1\",\n \"@testing-library/react\": \"16.3.2\",\n \"@testing-library/user-event\": \"14.6.1\",\n \"@types/mdast\": \"4.0.4\",\n \"@types/node\": \"25.6.0\",\n \"@types/react\": \"19.2.14\",\n \"@types/react-dom\": \"19.2.3\",\n \"@types/react-syntax-highlighter\": \"15.5.13\",\n \"@typescript-eslint/eslint-plugin\": \"8.59.2\",\n \"@typescript-eslint/parser\": \"8.59.2\",\n \"@vercel/react-router\": \"1.3.0\",\n \"@vitest/coverage-v8\": \"4.1.5\",\n \"cross-env\": \"10.1.0\",\n \"eslint\": \"9.39.4\",\n \"eslint-config-prettier\": \"10.1.8\",\n \"eslint-import-resolver-typescript\": \"4.4.4\",\n \"eslint-plugin-i18next\": \"6.1.4\",\n \"eslint-plugin-import-x\": \"4.16.2\",\n \"eslint-plugin-jsx-a11y\": \"6.10.2\",\n \"eslint-plugin-prettier\": \"5.5.5\",\n \"eslint-plugin-react\": \"7.37.5\",\n \"eslint-plugin-react-hooks\": \"7.1.1\",\n \"eslint-plugin-unused-imports\": \"4.4.1\",\n \"globals\": \"16.5.0\",\n \"husky\": \"9.1.7\",\n \"jsdom\": \"29.1.1\",\n \"lint-staged\": \"16.4.0\",\n \"msw\": \"2.14.2\",\n \"postcss-prefix-selector\": \"2.1.1\",\n \"prettier\": \"3.8.3\",\n \"tailwindcss\": \"4.2.4\",\n \"typescript\": \"6.0.3\",\n \"vite-plugin-svgr\": \"5.2.0\",\n \"vitest\": \"4.1.5\"\n },\n \"packageManager\": \"npm@10.5.0\",\n \"volta\": {\n \"node\": \"22.12.0\"\n },\n \"msw\": {\n \"workerDirectory\": [\n \"public\"\n ]\n },\n \"overrides\": {\n \"@vercel/static-config\": {\n \"ajv\": \"8.20.0\"\n },\n \"dompurify\": \"3.4.7\"\n },\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"files\": [\n \"dist\",\n \"bin\",\n \"build\",\n \"config\",\n \"scripts\",\n \"tools\"\n ],\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\"\n },\n \"./browser\": {\n \"types\": \"./dist/components/browser/index.d.ts\",\n \"import\": \"./dist/components/browser/index.js\",\n \"require\": \"./dist/components/browser/index.cjs\"\n },\n \"./conversation\": {\n \"types\": \"./dist/components/conversation/index.d.ts\",\n \"import\": \"./dist/components/conversation/index.js\",\n \"require\": \"./dist/components/conversation/index.cjs\"\n },\n \"./files\": {\n \"types\": \"./dist/components/files/index.d.ts\",\n \"import\": \"./dist/components/files/index.js\",\n \"require\": \"./dist/components/files/index.cjs\"\n },\n \"./settings\": {\n \"types\": \"./dist/components/settings/index.d.ts\",\n \"import\": \"./dist/components/settings/index.js\",\n \"require\": \"./dist/components/settings/index.cjs\"\n },\n \"./sidebar\": {\n \"types\": \"./dist/components/sidebar/index.d.ts\",\n \"import\": \"./dist/components/sidebar/index.js\",\n \"require\": \"./dist/components/sidebar/index.cjs\"\n },\n \"./terminal\": {\n \"types\": \"./dist/components/terminal/index.d.ts\",\n \"import\": \"./dist/components/terminal/index.js\",\n \"require\": \"./dist/components/terminal/index.cjs\"\n },\n \"./i18n\": {\n \"types\": \"./dist/i18n/index.d.ts\",\n \"import\": \"./dist/i18n/index.js\",\n \"require\": \"./dist/i18n/index.cjs\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"peerDependencies\": {\n \"react\": \"19.2.5\",\n \"react-dom\": \"19.2.5\",\n \"react-router\": \"7.17.0\"\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"package.cjs","names":[],"sources":["../package.json"],"sourcesContent":["{\n \"name\": \"@openhands/agent-canvas\",\n \"version\": \"1.5.1\",\n \"description\": \"Agent Canvas UI for OpenHands - run AI coding agents with a visual interface\",\n \"license\": \"MIT\",\n \"private\": false,\n \"type\": \"module\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/OpenHands/agent-canvas\"\n },\n \"homepage\": \"https://github.com/OpenHands/agent-canvas#readme\",\n \"bugs\": {\n \"url\": \"https://github.com/OpenHands/agent-canvas/issues\"\n },\n \"bin\": {\n \"agent-canvas\": \"bin/agent-canvas.mjs\"\n },\n \"engines\": {\n \"node\": \">=22.12.0\"\n },\n \"dependencies\": {\n \"@heroui/react\": \"2.8.10\",\n \"@microlink/react-json-view\": \"1.31.20\",\n \"@monaco-editor/react\": \"4.7.0\",\n \"@openhands/extensions\": \"0.9.0\",\n \"@openhands/typescript-client\": \"1.34.0\",\n \"@react-router/node\": \"7.17.0\",\n \"@react-router/serve\": \"7.17.0\",\n \"@tailwindcss/vite\": \"4.2.4\",\n \"@tanstack/react-query\": \"5.100.9\",\n \"@types/shell-quote\": \"1.7.5\",\n \"@uidotdev/usehooks\": \"2.4.1\",\n \"@xterm/addon-fit\": \"0.11.0\",\n \"@xterm/xterm\": \"6.0.0\",\n \"axios\": \"1.16.0\",\n \"class-variance-authority\": \"0.7.1\",\n \"clsx\": \"2.1.1\",\n \"downshift\": \"9.3.2\",\n \"framer-motion\": \"12.38.0\",\n \"httpxy\": \"0.5.3\",\n \"i18next\": \"26.0.8\",\n \"i18next-browser-languagedetector\": \"8.2.1\",\n \"i18next-http-backend\": \"4.0.0\",\n \"isbot\": \"5.1.39\",\n \"lucide-react\": \"1.14.0\",\n \"monaco-editor\": \"0.55.1\",\n \"posthog-js\": \"1.372.6\",\n \"react\": \"19.2.5\",\n \"react-dom\": \"19.2.5\",\n \"react-hot-toast\": \"2.6.0\",\n \"react-i18next\": \"17.0.6\",\n \"react-icons\": \"5.6.0\",\n \"react-markdown\": \"10.1.0\",\n \"react-router\": \"7.17.0\",\n \"react-syntax-highlighter\": \"16.1.1\",\n \"rehype-raw\": \"7.0.0\",\n \"rehype-sanitize\": \"6.0.0\",\n \"remark-breaks\": \"4.0.0\",\n \"remark-gfm\": \"4.0.1\",\n \"shell-quote\": \"1.8.4\",\n \"sirv\": \"3.0.2\",\n \"sirv-cli\": \"3.0.1\",\n \"socket.io-client\": \"4.8.3\",\n \"tailwind-merge\": \"3.5.0\",\n \"tailwind-scrollbar\": \"4.0.2\",\n \"unist-util-visit\": \"5.1.0\",\n \"uuid\": \"14.0.0\",\n \"vite\": \"8.0.10\",\n \"winston\": \"3.19.0\",\n \"winston-daily-rotate-file\": \"5.0.0\",\n \"zustand\": \"5.0.12\"\n },\n \"scripts\": {\n \"dev\": \"node --env-file-if-exists=.env scripts/dev-with-automation.mjs\",\n \"dev:static\": \"node --env-file-if-exists=.env scripts/dev-static.mjs\",\n \"dev:extra-backend\": \"node --env-file-if-exists=.env scripts/dev-extra-backend.mjs\",\n \"dev:minimal\": \"node --env-file-if-exists=.env scripts/dev-safe.mjs\",\n \"dev:frontend\": \"npm run make-i18n && cross-env VITE_MOCK_API=false react-router dev\",\n \"dev:mock\": \"npm run make-i18n && cross-env VITE_MOCK_API=true react-router dev\",\n \"build\": \"npm run build:app\",\n \"build:mock\": \"npm run make-i18n && cross-env VITE_MOCK_API=true react-router build\",\n \"start\": \"npx sirv-cli build/ --single\",\n \"test\": \"npm run make-i18n && vitest run\",\n \"test:e2e\": \"playwright test --pass-with-no-tests\",\n \"test:e2e:live\": \"node --env-file-if-exists=.env tests/e2e/live/scripts/run-live-e2e.mjs\",\n \"test:e2e:mock-llm\": \"playwright test --config=playwright.mock-llm.config.ts\",\n \"test:e2e:mock-llm:docker\": \"playwright test --config=playwright.mock-llm-docker.config.ts\",\n \"test:coverage\": \"npm run make-i18n && vitest run --coverage\",\n \"dev_wsl\": \"VITE_WATCH_USE_POLLING=true vite\",\n \"preview\": \"vite preview\",\n \"make-i18n\": \"node scripts/make-i18n-translations.cjs\",\n \"prelint\": \"npm run make-i18n\",\n \"lint\": \"npm run typecheck && eslint src && prettier --check src/**/*.{ts,tsx}\",\n \"lint:fix\": \"eslint src --fix && prettier --write src/**/*.{ts,tsx}\",\n \"prepare\": \"husky\",\n \"typecheck\": \"react-router typegen && tsc\",\n \"typecheck:staged\": \"react-router typegen && npx tsc --noEmit --skipLibCheck\",\n \"check-translation-completeness\": \"node scripts/check-translation-completeness.cjs\",\n \"build:app\": \"npm run make-i18n && react-router build\",\n \"build:lib\": \"npm run make-i18n && react-router typegen && cross-env BUILD_LIB=true vite build && tsc -p tsconfig.lib.json\",\n \"build:docker\": \"node scripts/docker-build.mjs\",\n \"example:acp-docker:env\": \"node scripts/gen-acp-docker-env.mjs\"\n },\n \"lint-staged\": {\n \"src/**/*.{ts,tsx,js}\": [\n \"eslint --fix\",\n \"prettier --write\"\n ],\n \"src/**/*.{ts,tsx}\": [\n \"node scripts/run-staged-typecheck.mjs\"\n ],\n \"src/**/*\": [\n \"npm run check-translation-completeness\"\n ]\n },\n \"devDependencies\": {\n \"@eslint/eslintrc\": \"3.3.1\",\n \"@eslint/js\": \"9.39.4\",\n \"@mswjs/socket.io-binding\": \"0.2.0\",\n \"@playwright/test\": \"1.59.1\",\n \"@react-router/dev\": \"7.17.0\",\n \"@tailwindcss/typography\": \"0.5.19\",\n \"@tanstack/eslint-plugin-query\": \"5.100.9\",\n \"@testing-library/dom\": \"10.4.1\",\n \"@testing-library/jest-dom\": \"6.9.1\",\n \"@testing-library/react\": \"16.3.2\",\n \"@testing-library/user-event\": \"14.6.1\",\n \"@types/mdast\": \"4.0.4\",\n \"@types/node\": \"25.6.0\",\n \"@types/react\": \"19.2.14\",\n \"@types/react-dom\": \"19.2.3\",\n \"@types/react-syntax-highlighter\": \"15.5.13\",\n \"@typescript-eslint/eslint-plugin\": \"8.59.2\",\n \"@typescript-eslint/parser\": \"8.59.2\",\n \"@vercel/react-router\": \"1.3.0\",\n \"@vitest/coverage-v8\": \"4.1.5\",\n \"cross-env\": \"10.1.0\",\n \"eslint\": \"9.39.4\",\n \"eslint-config-prettier\": \"10.1.8\",\n \"eslint-import-resolver-typescript\": \"4.4.4\",\n \"eslint-plugin-i18next\": \"6.1.4\",\n \"eslint-plugin-import-x\": \"4.16.2\",\n \"eslint-plugin-jsx-a11y\": \"6.10.2\",\n \"eslint-plugin-prettier\": \"5.5.5\",\n \"eslint-plugin-react\": \"7.37.5\",\n \"eslint-plugin-react-hooks\": \"7.1.1\",\n \"eslint-plugin-unused-imports\": \"4.4.1\",\n \"globals\": \"16.5.0\",\n \"husky\": \"9.1.7\",\n \"jsdom\": \"29.1.1\",\n \"lint-staged\": \"16.4.0\",\n \"msw\": \"2.14.2\",\n \"postcss-prefix-selector\": \"2.1.1\",\n \"prettier\": \"3.8.3\",\n \"tailwindcss\": \"4.2.4\",\n \"typescript\": \"6.0.3\",\n \"vite-plugin-svgr\": \"5.2.0\",\n \"vitest\": \"4.1.5\"\n },\n \"packageManager\": \"npm@10.5.0\",\n \"volta\": {\n \"node\": \"22.12.0\"\n },\n \"msw\": {\n \"workerDirectory\": [\n \"public\"\n ]\n },\n \"overrides\": {\n \"@vercel/static-config\": {\n \"ajv\": \"8.20.0\"\n },\n \"dompurify\": \"3.4.7\"\n },\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"files\": [\n \"dist\",\n \"bin\",\n \"build\",\n \"config\",\n \"scripts\",\n \"tools\"\n ],\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\"\n },\n \"./browser\": {\n \"types\": \"./dist/components/browser/index.d.ts\",\n \"import\": \"./dist/components/browser/index.js\",\n \"require\": \"./dist/components/browser/index.cjs\"\n },\n \"./conversation\": {\n \"types\": \"./dist/components/conversation/index.d.ts\",\n \"import\": \"./dist/components/conversation/index.js\",\n \"require\": \"./dist/components/conversation/index.cjs\"\n },\n \"./files\": {\n \"types\": \"./dist/components/files/index.d.ts\",\n \"import\": \"./dist/components/files/index.js\",\n \"require\": \"./dist/components/files/index.cjs\"\n },\n \"./settings\": {\n \"types\": \"./dist/components/settings/index.d.ts\",\n \"import\": \"./dist/components/settings/index.js\",\n \"require\": \"./dist/components/settings/index.cjs\"\n },\n \"./sidebar\": {\n \"types\": \"./dist/components/sidebar/index.d.ts\",\n \"import\": \"./dist/components/sidebar/index.js\",\n \"require\": \"./dist/components/sidebar/index.cjs\"\n },\n \"./terminal\": {\n \"types\": \"./dist/components/terminal/index.d.ts\",\n \"import\": \"./dist/components/terminal/index.js\",\n \"require\": \"./dist/components/terminal/index.cjs\"\n },\n \"./i18n\": {\n \"types\": \"./dist/i18n/index.d.ts\",\n \"import\": \"./dist/i18n/index.js\",\n \"require\": \"./dist/i18n/index.cjs\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"peerDependencies\": {\n \"react\": \"19.2.5\",\n \"react-dom\": \"19.2.5\",\n \"react-router\": \"7.17.0\"\n }\n}\n"],"mappings":""}
package/dist/package.js CHANGED
@@ -1,6 +1,6 @@
1
1
  var e = {
2
2
  name: "@openhands/agent-canvas",
3
- version: "1.5.0",
3
+ version: "1.5.1",
4
4
  description: "Agent Canvas UI for OpenHands - run AI coding agents with a visual interface",
5
5
  license: "MIT",
6
6
  private: !1,
@@ -92,7 +92,7 @@ var e = {
92
92
  "typecheck:staged": "react-router typegen && npx tsc --noEmit --skipLibCheck",
93
93
  "check-translation-completeness": "node scripts/check-translation-completeness.cjs",
94
94
  "build:app": "npm run make-i18n && react-router build",
95
- "build:lib": "npm run make-i18n && react-router typegen && cross-env BUILD_LIB=true VITE_APP_ENV=production vite build && tsc -p tsconfig.lib.json",
95
+ "build:lib": "npm run make-i18n && react-router typegen && cross-env BUILD_LIB=true vite build && tsc -p tsconfig.lib.json",
96
96
  "build:docker": "node scripts/docker-build.mjs",
97
97
  "example:acp-docker:env": "node scripts/gen-acp-docker-env.mjs"
98
98
  },
@@ -1 +1 @@
1
- {"version":3,"file":"package.js","names":[],"sources":["../package.json"],"sourcesContent":["{\n \"name\": \"@openhands/agent-canvas\",\n \"version\": \"1.5.0\",\n \"description\": \"Agent Canvas UI for OpenHands - run AI coding agents with a visual interface\",\n \"license\": \"MIT\",\n \"private\": false,\n \"type\": \"module\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/OpenHands/agent-canvas\"\n },\n \"homepage\": \"https://github.com/OpenHands/agent-canvas#readme\",\n \"bugs\": {\n \"url\": \"https://github.com/OpenHands/agent-canvas/issues\"\n },\n \"bin\": {\n \"agent-canvas\": \"bin/agent-canvas.mjs\"\n },\n \"engines\": {\n \"node\": \">=22.12.0\"\n },\n \"dependencies\": {\n \"@heroui/react\": \"2.8.10\",\n \"@microlink/react-json-view\": \"1.31.20\",\n \"@monaco-editor/react\": \"4.7.0\",\n \"@openhands/extensions\": \"0.9.0\",\n \"@openhands/typescript-client\": \"1.34.0\",\n \"@react-router/node\": \"7.17.0\",\n \"@react-router/serve\": \"7.17.0\",\n \"@tailwindcss/vite\": \"4.2.4\",\n \"@tanstack/react-query\": \"5.100.9\",\n \"@types/shell-quote\": \"1.7.5\",\n \"@uidotdev/usehooks\": \"2.4.1\",\n \"@xterm/addon-fit\": \"0.11.0\",\n \"@xterm/xterm\": \"6.0.0\",\n \"axios\": \"1.16.0\",\n \"class-variance-authority\": \"0.7.1\",\n \"clsx\": \"2.1.1\",\n \"downshift\": \"9.3.2\",\n \"framer-motion\": \"12.38.0\",\n \"httpxy\": \"0.5.3\",\n \"i18next\": \"26.0.8\",\n \"i18next-browser-languagedetector\": \"8.2.1\",\n \"i18next-http-backend\": \"4.0.0\",\n \"isbot\": \"5.1.39\",\n \"lucide-react\": \"1.14.0\",\n \"monaco-editor\": \"0.55.1\",\n \"posthog-js\": \"1.372.6\",\n \"react\": \"19.2.5\",\n \"react-dom\": \"19.2.5\",\n \"react-hot-toast\": \"2.6.0\",\n \"react-i18next\": \"17.0.6\",\n \"react-icons\": \"5.6.0\",\n \"react-markdown\": \"10.1.0\",\n \"react-router\": \"7.17.0\",\n \"react-syntax-highlighter\": \"16.1.1\",\n \"rehype-raw\": \"7.0.0\",\n \"rehype-sanitize\": \"6.0.0\",\n \"remark-breaks\": \"4.0.0\",\n \"remark-gfm\": \"4.0.1\",\n \"shell-quote\": \"1.8.4\",\n \"sirv\": \"3.0.2\",\n \"sirv-cli\": \"3.0.1\",\n \"socket.io-client\": \"4.8.3\",\n \"tailwind-merge\": \"3.5.0\",\n \"tailwind-scrollbar\": \"4.0.2\",\n \"unist-util-visit\": \"5.1.0\",\n \"uuid\": \"14.0.0\",\n \"vite\": \"8.0.10\",\n \"winston\": \"3.19.0\",\n \"winston-daily-rotate-file\": \"5.0.0\",\n \"zustand\": \"5.0.12\"\n },\n \"scripts\": {\n \"dev\": \"node --env-file-if-exists=.env scripts/dev-with-automation.mjs\",\n \"dev:static\": \"node --env-file-if-exists=.env scripts/dev-static.mjs\",\n \"dev:extra-backend\": \"node --env-file-if-exists=.env scripts/dev-extra-backend.mjs\",\n \"dev:minimal\": \"node --env-file-if-exists=.env scripts/dev-safe.mjs\",\n \"dev:frontend\": \"npm run make-i18n && cross-env VITE_MOCK_API=false react-router dev\",\n \"dev:mock\": \"npm run make-i18n && cross-env VITE_MOCK_API=true react-router dev\",\n \"build\": \"npm run build:app\",\n \"build:mock\": \"npm run make-i18n && cross-env VITE_MOCK_API=true react-router build\",\n \"start\": \"npx sirv-cli build/ --single\",\n \"test\": \"npm run make-i18n && vitest run\",\n \"test:e2e\": \"playwright test --pass-with-no-tests\",\n \"test:e2e:live\": \"node --env-file-if-exists=.env tests/e2e/live/scripts/run-live-e2e.mjs\",\n \"test:e2e:mock-llm\": \"playwright test --config=playwright.mock-llm.config.ts\",\n \"test:e2e:mock-llm:docker\": \"playwright test --config=playwright.mock-llm-docker.config.ts\",\n \"test:coverage\": \"npm run make-i18n && vitest run --coverage\",\n \"dev_wsl\": \"VITE_WATCH_USE_POLLING=true vite\",\n \"preview\": \"vite preview\",\n \"make-i18n\": \"node scripts/make-i18n-translations.cjs\",\n \"prelint\": \"npm run make-i18n\",\n \"lint\": \"npm run typecheck && eslint src && prettier --check src/**/*.{ts,tsx}\",\n \"lint:fix\": \"eslint src --fix && prettier --write src/**/*.{ts,tsx}\",\n \"prepare\": \"husky\",\n \"typecheck\": \"react-router typegen && tsc\",\n \"typecheck:staged\": \"react-router typegen && npx tsc --noEmit --skipLibCheck\",\n \"check-translation-completeness\": \"node scripts/check-translation-completeness.cjs\",\n \"build:app\": \"npm run make-i18n && react-router build\",\n \"build:lib\": \"npm run make-i18n && react-router typegen && cross-env BUILD_LIB=true VITE_APP_ENV=production vite build && tsc -p tsconfig.lib.json\",\n \"build:docker\": \"node scripts/docker-build.mjs\",\n \"example:acp-docker:env\": \"node scripts/gen-acp-docker-env.mjs\"\n },\n \"lint-staged\": {\n \"src/**/*.{ts,tsx,js}\": [\n \"eslint --fix\",\n \"prettier --write\"\n ],\n \"src/**/*.{ts,tsx}\": [\n \"node scripts/run-staged-typecheck.mjs\"\n ],\n \"src/**/*\": [\n \"npm run check-translation-completeness\"\n ]\n },\n \"devDependencies\": {\n \"@eslint/eslintrc\": \"3.3.1\",\n \"@eslint/js\": \"9.39.4\",\n \"@mswjs/socket.io-binding\": \"0.2.0\",\n \"@playwright/test\": \"1.59.1\",\n \"@react-router/dev\": \"7.17.0\",\n \"@tailwindcss/typography\": \"0.5.19\",\n \"@tanstack/eslint-plugin-query\": \"5.100.9\",\n \"@testing-library/dom\": \"10.4.1\",\n \"@testing-library/jest-dom\": \"6.9.1\",\n \"@testing-library/react\": \"16.3.2\",\n \"@testing-library/user-event\": \"14.6.1\",\n \"@types/mdast\": \"4.0.4\",\n \"@types/node\": \"25.6.0\",\n \"@types/react\": \"19.2.14\",\n \"@types/react-dom\": \"19.2.3\",\n \"@types/react-syntax-highlighter\": \"15.5.13\",\n \"@typescript-eslint/eslint-plugin\": \"8.59.2\",\n \"@typescript-eslint/parser\": \"8.59.2\",\n \"@vercel/react-router\": \"1.3.0\",\n \"@vitest/coverage-v8\": \"4.1.5\",\n \"cross-env\": \"10.1.0\",\n \"eslint\": \"9.39.4\",\n \"eslint-config-prettier\": \"10.1.8\",\n \"eslint-import-resolver-typescript\": \"4.4.4\",\n \"eslint-plugin-i18next\": \"6.1.4\",\n \"eslint-plugin-import-x\": \"4.16.2\",\n \"eslint-plugin-jsx-a11y\": \"6.10.2\",\n \"eslint-plugin-prettier\": \"5.5.5\",\n \"eslint-plugin-react\": \"7.37.5\",\n \"eslint-plugin-react-hooks\": \"7.1.1\",\n \"eslint-plugin-unused-imports\": \"4.4.1\",\n \"globals\": \"16.5.0\",\n \"husky\": \"9.1.7\",\n \"jsdom\": \"29.1.1\",\n \"lint-staged\": \"16.4.0\",\n \"msw\": \"2.14.2\",\n \"postcss-prefix-selector\": \"2.1.1\",\n \"prettier\": \"3.8.3\",\n \"tailwindcss\": \"4.2.4\",\n \"typescript\": \"6.0.3\",\n \"vite-plugin-svgr\": \"5.2.0\",\n \"vitest\": \"4.1.5\"\n },\n \"packageManager\": \"npm@10.5.0\",\n \"volta\": {\n \"node\": \"22.12.0\"\n },\n \"msw\": {\n \"workerDirectory\": [\n \"public\"\n ]\n },\n \"overrides\": {\n \"@vercel/static-config\": {\n \"ajv\": \"8.20.0\"\n },\n \"dompurify\": \"3.4.7\"\n },\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"files\": [\n \"dist\",\n \"bin\",\n \"build\",\n \"config\",\n \"scripts\",\n \"tools\"\n ],\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\"\n },\n \"./browser\": {\n \"types\": \"./dist/components/browser/index.d.ts\",\n \"import\": \"./dist/components/browser/index.js\",\n \"require\": \"./dist/components/browser/index.cjs\"\n },\n \"./conversation\": {\n \"types\": \"./dist/components/conversation/index.d.ts\",\n \"import\": \"./dist/components/conversation/index.js\",\n \"require\": \"./dist/components/conversation/index.cjs\"\n },\n \"./files\": {\n \"types\": \"./dist/components/files/index.d.ts\",\n \"import\": \"./dist/components/files/index.js\",\n \"require\": \"./dist/components/files/index.cjs\"\n },\n \"./settings\": {\n \"types\": \"./dist/components/settings/index.d.ts\",\n \"import\": \"./dist/components/settings/index.js\",\n \"require\": \"./dist/components/settings/index.cjs\"\n },\n \"./sidebar\": {\n \"types\": \"./dist/components/sidebar/index.d.ts\",\n \"import\": \"./dist/components/sidebar/index.js\",\n \"require\": \"./dist/components/sidebar/index.cjs\"\n },\n \"./terminal\": {\n \"types\": \"./dist/components/terminal/index.d.ts\",\n \"import\": \"./dist/components/terminal/index.js\",\n \"require\": \"./dist/components/terminal/index.cjs\"\n },\n \"./i18n\": {\n \"types\": \"./dist/i18n/index.d.ts\",\n \"import\": \"./dist/i18n/index.js\",\n \"require\": \"./dist/i18n/index.cjs\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"peerDependencies\": {\n \"react\": \"19.2.5\",\n \"react-dom\": \"19.2.5\",\n \"react-router\": \"7.17.0\"\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"package.js","names":[],"sources":["../package.json"],"sourcesContent":["{\n \"name\": \"@openhands/agent-canvas\",\n \"version\": \"1.5.1\",\n \"description\": \"Agent Canvas UI for OpenHands - run AI coding agents with a visual interface\",\n \"license\": \"MIT\",\n \"private\": false,\n \"type\": \"module\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/OpenHands/agent-canvas\"\n },\n \"homepage\": \"https://github.com/OpenHands/agent-canvas#readme\",\n \"bugs\": {\n \"url\": \"https://github.com/OpenHands/agent-canvas/issues\"\n },\n \"bin\": {\n \"agent-canvas\": \"bin/agent-canvas.mjs\"\n },\n \"engines\": {\n \"node\": \">=22.12.0\"\n },\n \"dependencies\": {\n \"@heroui/react\": \"2.8.10\",\n \"@microlink/react-json-view\": \"1.31.20\",\n \"@monaco-editor/react\": \"4.7.0\",\n \"@openhands/extensions\": \"0.9.0\",\n \"@openhands/typescript-client\": \"1.34.0\",\n \"@react-router/node\": \"7.17.0\",\n \"@react-router/serve\": \"7.17.0\",\n \"@tailwindcss/vite\": \"4.2.4\",\n \"@tanstack/react-query\": \"5.100.9\",\n \"@types/shell-quote\": \"1.7.5\",\n \"@uidotdev/usehooks\": \"2.4.1\",\n \"@xterm/addon-fit\": \"0.11.0\",\n \"@xterm/xterm\": \"6.0.0\",\n \"axios\": \"1.16.0\",\n \"class-variance-authority\": \"0.7.1\",\n \"clsx\": \"2.1.1\",\n \"downshift\": \"9.3.2\",\n \"framer-motion\": \"12.38.0\",\n \"httpxy\": \"0.5.3\",\n \"i18next\": \"26.0.8\",\n \"i18next-browser-languagedetector\": \"8.2.1\",\n \"i18next-http-backend\": \"4.0.0\",\n \"isbot\": \"5.1.39\",\n \"lucide-react\": \"1.14.0\",\n \"monaco-editor\": \"0.55.1\",\n \"posthog-js\": \"1.372.6\",\n \"react\": \"19.2.5\",\n \"react-dom\": \"19.2.5\",\n \"react-hot-toast\": \"2.6.0\",\n \"react-i18next\": \"17.0.6\",\n \"react-icons\": \"5.6.0\",\n \"react-markdown\": \"10.1.0\",\n \"react-router\": \"7.17.0\",\n \"react-syntax-highlighter\": \"16.1.1\",\n \"rehype-raw\": \"7.0.0\",\n \"rehype-sanitize\": \"6.0.0\",\n \"remark-breaks\": \"4.0.0\",\n \"remark-gfm\": \"4.0.1\",\n \"shell-quote\": \"1.8.4\",\n \"sirv\": \"3.0.2\",\n \"sirv-cli\": \"3.0.1\",\n \"socket.io-client\": \"4.8.3\",\n \"tailwind-merge\": \"3.5.0\",\n \"tailwind-scrollbar\": \"4.0.2\",\n \"unist-util-visit\": \"5.1.0\",\n \"uuid\": \"14.0.0\",\n \"vite\": \"8.0.10\",\n \"winston\": \"3.19.0\",\n \"winston-daily-rotate-file\": \"5.0.0\",\n \"zustand\": \"5.0.12\"\n },\n \"scripts\": {\n \"dev\": \"node --env-file-if-exists=.env scripts/dev-with-automation.mjs\",\n \"dev:static\": \"node --env-file-if-exists=.env scripts/dev-static.mjs\",\n \"dev:extra-backend\": \"node --env-file-if-exists=.env scripts/dev-extra-backend.mjs\",\n \"dev:minimal\": \"node --env-file-if-exists=.env scripts/dev-safe.mjs\",\n \"dev:frontend\": \"npm run make-i18n && cross-env VITE_MOCK_API=false react-router dev\",\n \"dev:mock\": \"npm run make-i18n && cross-env VITE_MOCK_API=true react-router dev\",\n \"build\": \"npm run build:app\",\n \"build:mock\": \"npm run make-i18n && cross-env VITE_MOCK_API=true react-router build\",\n \"start\": \"npx sirv-cli build/ --single\",\n \"test\": \"npm run make-i18n && vitest run\",\n \"test:e2e\": \"playwright test --pass-with-no-tests\",\n \"test:e2e:live\": \"node --env-file-if-exists=.env tests/e2e/live/scripts/run-live-e2e.mjs\",\n \"test:e2e:mock-llm\": \"playwright test --config=playwright.mock-llm.config.ts\",\n \"test:e2e:mock-llm:docker\": \"playwright test --config=playwright.mock-llm-docker.config.ts\",\n \"test:coverage\": \"npm run make-i18n && vitest run --coverage\",\n \"dev_wsl\": \"VITE_WATCH_USE_POLLING=true vite\",\n \"preview\": \"vite preview\",\n \"make-i18n\": \"node scripts/make-i18n-translations.cjs\",\n \"prelint\": \"npm run make-i18n\",\n \"lint\": \"npm run typecheck && eslint src && prettier --check src/**/*.{ts,tsx}\",\n \"lint:fix\": \"eslint src --fix && prettier --write src/**/*.{ts,tsx}\",\n \"prepare\": \"husky\",\n \"typecheck\": \"react-router typegen && tsc\",\n \"typecheck:staged\": \"react-router typegen && npx tsc --noEmit --skipLibCheck\",\n \"check-translation-completeness\": \"node scripts/check-translation-completeness.cjs\",\n \"build:app\": \"npm run make-i18n && react-router build\",\n \"build:lib\": \"npm run make-i18n && react-router typegen && cross-env BUILD_LIB=true vite build && tsc -p tsconfig.lib.json\",\n \"build:docker\": \"node scripts/docker-build.mjs\",\n \"example:acp-docker:env\": \"node scripts/gen-acp-docker-env.mjs\"\n },\n \"lint-staged\": {\n \"src/**/*.{ts,tsx,js}\": [\n \"eslint --fix\",\n \"prettier --write\"\n ],\n \"src/**/*.{ts,tsx}\": [\n \"node scripts/run-staged-typecheck.mjs\"\n ],\n \"src/**/*\": [\n \"npm run check-translation-completeness\"\n ]\n },\n \"devDependencies\": {\n \"@eslint/eslintrc\": \"3.3.1\",\n \"@eslint/js\": \"9.39.4\",\n \"@mswjs/socket.io-binding\": \"0.2.0\",\n \"@playwright/test\": \"1.59.1\",\n \"@react-router/dev\": \"7.17.0\",\n \"@tailwindcss/typography\": \"0.5.19\",\n \"@tanstack/eslint-plugin-query\": \"5.100.9\",\n \"@testing-library/dom\": \"10.4.1\",\n \"@testing-library/jest-dom\": \"6.9.1\",\n \"@testing-library/react\": \"16.3.2\",\n \"@testing-library/user-event\": \"14.6.1\",\n \"@types/mdast\": \"4.0.4\",\n \"@types/node\": \"25.6.0\",\n \"@types/react\": \"19.2.14\",\n \"@types/react-dom\": \"19.2.3\",\n \"@types/react-syntax-highlighter\": \"15.5.13\",\n \"@typescript-eslint/eslint-plugin\": \"8.59.2\",\n \"@typescript-eslint/parser\": \"8.59.2\",\n \"@vercel/react-router\": \"1.3.0\",\n \"@vitest/coverage-v8\": \"4.1.5\",\n \"cross-env\": \"10.1.0\",\n \"eslint\": \"9.39.4\",\n \"eslint-config-prettier\": \"10.1.8\",\n \"eslint-import-resolver-typescript\": \"4.4.4\",\n \"eslint-plugin-i18next\": \"6.1.4\",\n \"eslint-plugin-import-x\": \"4.16.2\",\n \"eslint-plugin-jsx-a11y\": \"6.10.2\",\n \"eslint-plugin-prettier\": \"5.5.5\",\n \"eslint-plugin-react\": \"7.37.5\",\n \"eslint-plugin-react-hooks\": \"7.1.1\",\n \"eslint-plugin-unused-imports\": \"4.4.1\",\n \"globals\": \"16.5.0\",\n \"husky\": \"9.1.7\",\n \"jsdom\": \"29.1.1\",\n \"lint-staged\": \"16.4.0\",\n \"msw\": \"2.14.2\",\n \"postcss-prefix-selector\": \"2.1.1\",\n \"prettier\": \"3.8.3\",\n \"tailwindcss\": \"4.2.4\",\n \"typescript\": \"6.0.3\",\n \"vite-plugin-svgr\": \"5.2.0\",\n \"vitest\": \"4.1.5\"\n },\n \"packageManager\": \"npm@10.5.0\",\n \"volta\": {\n \"node\": \"22.12.0\"\n },\n \"msw\": {\n \"workerDirectory\": [\n \"public\"\n ]\n },\n \"overrides\": {\n \"@vercel/static-config\": {\n \"ajv\": \"8.20.0\"\n },\n \"dompurify\": \"3.4.7\"\n },\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"files\": [\n \"dist\",\n \"bin\",\n \"build\",\n \"config\",\n \"scripts\",\n \"tools\"\n ],\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\"\n },\n \"./browser\": {\n \"types\": \"./dist/components/browser/index.d.ts\",\n \"import\": \"./dist/components/browser/index.js\",\n \"require\": \"./dist/components/browser/index.cjs\"\n },\n \"./conversation\": {\n \"types\": \"./dist/components/conversation/index.d.ts\",\n \"import\": \"./dist/components/conversation/index.js\",\n \"require\": \"./dist/components/conversation/index.cjs\"\n },\n \"./files\": {\n \"types\": \"./dist/components/files/index.d.ts\",\n \"import\": \"./dist/components/files/index.js\",\n \"require\": \"./dist/components/files/index.cjs\"\n },\n \"./settings\": {\n \"types\": \"./dist/components/settings/index.d.ts\",\n \"import\": \"./dist/components/settings/index.js\",\n \"require\": \"./dist/components/settings/index.cjs\"\n },\n \"./sidebar\": {\n \"types\": \"./dist/components/sidebar/index.d.ts\",\n \"import\": \"./dist/components/sidebar/index.js\",\n \"require\": \"./dist/components/sidebar/index.cjs\"\n },\n \"./terminal\": {\n \"types\": \"./dist/components/terminal/index.d.ts\",\n \"import\": \"./dist/components/terminal/index.js\",\n \"require\": \"./dist/components/terminal/index.cjs\"\n },\n \"./i18n\": {\n \"types\": \"./dist/i18n/index.d.ts\",\n \"import\": \"./dist/i18n/index.js\",\n \"require\": \"./dist/i18n/index.cjs\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"peerDependencies\": {\n \"react\": \"19.2.5\",\n \"react-dom\": \"19.2.5\",\n \"react-router\": \"7.17.0\"\n }\n}\n"],"mappings":""}
@@ -1,2 +1,2 @@
1
- const e=require(`../_virtual/_rolldown/runtime.cjs`),t=require(`../node_modules/react-i18next/dist/es/useTranslation.cjs`),n=require(`../i18n/declaration.cjs`),r=require(`../i18n/index.cjs`),i=require(`../utils/retrieve-axios-error-message.cjs`),a=require(`../utils/custom-toast-handlers.cjs`),o=require(`../node_modules/posthog-js/react/dist/esm/index.cjs`),s=require(`../services/settings.cjs`),c=require(`../services/telemetry.cjs`),l=require(`../hooks/query/use-settings.cjs`),u=require(`../components/features/settings/brand-button.cjs`),d=require(`../hooks/mutation/use-save-settings.cjs`),f=require(`../components/features/settings/settings-switch.cjs`),p=require(`../components/features/settings/settings-input.cjs`),m=require(`../components/features/settings/app-settings/language-input.cjs`),h=require(`../components/features/settings/app-settings/theme-input.cjs`),g=require(`../utils/handle-capture-consent.cjs`),_=require(`../components/features/settings/app-settings/app-settings-inputs-skeleton.cjs`);let v=require(`react`);v=e.__toESM(v,1);let y=require(`react/jsx-runtime`);function b(){let e=o.usePostHog(),{t:b}=t.useTranslation(`openhands`),{mutate:x,isPending:S}=d.useSaveSettings(),{data:C,isLoading:w}=l.useSettings(),[T,E]=v.default.useState(!1),[D,O]=v.default.useState(!1),[k,A]=v.default.useState(!1),[j,M]=v.default.useState(!1),[N,P]=v.default.useState(!1),F=t=>{let o=t.get(`language-input`)?.toString(),l=r.AvailableLanguages.find(({label:e})=>e===o)?.value||s.DEFAULT_SETTINGS.language,u=t.get(`enable-analytics-switch`)?.toString()===`on`;x({language:l,user_consents_to_analytics:u,enable_sound_notifications:t.get(`enable-sound-notifications-switch`)?.toString()===`on`,git_user_name:t.get(`git-user-name-input`)?.toString()||s.DEFAULT_SETTINGS.git_user_name,git_user_email:t.get(`git-user-email-input`)?.toString()||s.DEFAULT_SETTINGS.git_user_email},{onSuccess:()=>{g.handleCaptureConsent(e,u),c.setTelemetryConsent(u?`granted`:`denied`),a.displaySuccessToast(b(n.I18nKey.SETTINGS$SAVED))},onError:e=>{a.displayErrorToast(i.retrieveAxiosErrorMessage(e)||b(n.I18nKey.ERROR$GENERIC))},onSettled:()=>{E(!1),O(!1),A(!1),M(!1),P(!1)}})},I=e=>{let t=r.AvailableLanguages.find(({label:t})=>t===e)?.label,n=r.AvailableLanguages.find(({value:e})=>e===C?.language)?.label;E(t!==n)},L=e=>{O(e!==(C?.user_consents_to_analytics??!0))},R=e=>{A(e!==!!C?.enable_sound_notifications)},z=e=>{let t=C?.git_user_name;M(e!==t)},B=e=>{let t=C?.git_user_email;P(e!==t)},V=!T&&!D&&!k&&!j&&!N,H=!C||w||S;return(0,y.jsxs)(`form`,{"data-testid":`app-settings-screen`,action:F,className:`flex flex-col gap-6`,children:[H&&(0,y.jsx)(_.AppSettingsInputsSkeleton,{}),!H&&(0,y.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,y.jsx)(m.LanguageInput,{name:`language-input`,defaultKey:C.language,onChange:I}),(0,y.jsx)(h.ThemeInput,{}),(0,y.jsx)(f.SettingsSwitch,{testId:`enable-analytics-switch`,name:`enable-analytics-switch`,defaultIsToggled:C.user_consents_to_analytics??!0,onToggle:L,children:b(n.I18nKey.ANALYTICS$SEND_ANONYMOUS_DATA)}),(0,y.jsx)(f.SettingsSwitch,{testId:`enable-sound-notifications-switch`,name:`enable-sound-notifications-switch`,defaultIsToggled:!!C.enable_sound_notifications,onToggle:R,children:b(n.I18nKey.SETTINGS$SOUND_NOTIFICATIONS)}),(0,y.jsxs)(`div`,{className:`border-t border-[var(--oh-border)] pt-6 mt-2`,children:[(0,y.jsx)(`h3`,{className:`text-lg font-medium mb-2`,children:b(n.I18nKey.SETTINGS$GIT_SETTINGS)}),(0,y.jsx)(`p`,{className:`mb-4 text-sm leading-5 text-tertiary-light`,children:b(n.I18nKey.SETTINGS$GIT_SETTINGS_DESCRIPTION)}),(0,y.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,y.jsx)(p.SettingsInput,{testId:`git-user-name-input`,name:`git-user-name-input`,type:`text`,label:b(n.I18nKey.SETTINGS$GIT_USERNAME),defaultValue:C.git_user_name||``,onChange:z,placeholder:b(n.I18nKey.SETTINGS$GIT_USERNAME_PLACEHOLDER),className:`w-full min-w-0`}),(0,y.jsx)(p.SettingsInput,{testId:`git-user-email-input`,name:`git-user-email-input`,type:`email`,label:b(n.I18nKey.SETTINGS$GIT_EMAIL),defaultValue:C.git_user_email||``,onChange:B,placeholder:b(n.I18nKey.SETTINGS$GIT_EMAIL_PLACEHOLDER),className:`w-full min-w-0`})]}),(0,y.jsx)(`div`,{className:`flex justify-start pt-4`,children:(0,y.jsxs)(u.BrandButton,{testId:`submit-button`,variant:`primary`,type:`submit`,isDisabled:S||V,children:[!S&&b(n.I18nKey.SETTINGS$SAVE_CHANGES),S&&b(n.I18nKey.SETTINGS$SAVING)]})})]})]})]})}exports.default=b;
1
+ const e=require(`../_virtual/_rolldown/runtime.cjs`),t=require(`../node_modules/react-i18next/dist/es/useTranslation.cjs`),n=require(`../i18n/declaration.cjs`),r=require(`../i18n/index.cjs`),i=require(`../utils/retrieve-axios-error-message.cjs`),a=require(`../utils/custom-toast-handlers.cjs`),o=require(`../services/telemetry.cjs`),s=require(`../services/settings.cjs`),c=require(`../hooks/query/use-settings.cjs`),l=require(`../components/features/settings/brand-button.cjs`),u=require(`../hooks/mutation/use-save-settings.cjs`),d=require(`../components/features/settings/settings-switch.cjs`),f=require(`../components/features/settings/settings-input.cjs`),p=require(`../components/features/settings/app-settings/language-input.cjs`),m=require(`../components/features/settings/app-settings/theme-input.cjs`),h=require(`../components/features/settings/app-settings/app-settings-inputs-skeleton.cjs`);let g=require(`react`);g=e.__toESM(g,1);let _=require(`react/jsx-runtime`);function v(){let{t:e}=t.useTranslation(`openhands`),{mutate:v,isPending:y}=u.useSaveSettings(),{data:b,isLoading:x}=c.useSettings(),[S,C]=g.default.useState(!1),[w,T]=g.default.useState(!1),[E,D]=g.default.useState(!1),[O,k]=g.default.useState(!1),[A,j]=g.default.useState(!1),M=t=>{let c=t.get(`language-input`)?.toString(),l=r.AvailableLanguages.find(({label:e})=>e===c)?.value||s.DEFAULT_SETTINGS.language,u=t.get(`enable-analytics-switch`)?.toString()===`on`;v({language:l,user_consents_to_analytics:u,enable_sound_notifications:t.get(`enable-sound-notifications-switch`)?.toString()===`on`,git_user_name:t.get(`git-user-name-input`)?.toString()||s.DEFAULT_SETTINGS.git_user_name,git_user_email:t.get(`git-user-email-input`)?.toString()||s.DEFAULT_SETTINGS.git_user_email},{onSuccess:()=>{o.setTelemetryConsent(u?`granted`:`denied`),a.displaySuccessToast(e(n.I18nKey.SETTINGS$SAVED))},onError:t=>{a.displayErrorToast(i.retrieveAxiosErrorMessage(t)||e(n.I18nKey.ERROR$GENERIC))},onSettled:()=>{C(!1),T(!1),D(!1),k(!1),j(!1)}})},N=e=>{let t=r.AvailableLanguages.find(({label:t})=>t===e)?.label,n=r.AvailableLanguages.find(({value:e})=>e===b?.language)?.label;C(t!==n)},P=e=>{T(e!==(b?.user_consents_to_analytics??!0))},F=e=>{D(e!==!!b?.enable_sound_notifications)},I=e=>{let t=b?.git_user_name;k(e!==t)},L=e=>{let t=b?.git_user_email;j(e!==t)},R=!S&&!w&&!E&&!O&&!A,z=!b||x||y;return(0,_.jsxs)(`form`,{"data-testid":`app-settings-screen`,action:M,className:`flex flex-col gap-6`,children:[z&&(0,_.jsx)(h.AppSettingsInputsSkeleton,{}),!z&&(0,_.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,_.jsx)(p.LanguageInput,{name:`language-input`,defaultKey:b.language,onChange:N}),(0,_.jsx)(m.ThemeInput,{}),(0,_.jsx)(d.SettingsSwitch,{testId:`enable-analytics-switch`,name:`enable-analytics-switch`,defaultIsToggled:b.user_consents_to_analytics??!0,onToggle:P,children:e(n.I18nKey.ANALYTICS$SEND_ANONYMOUS_DATA)}),(0,_.jsx)(d.SettingsSwitch,{testId:`enable-sound-notifications-switch`,name:`enable-sound-notifications-switch`,defaultIsToggled:!!b.enable_sound_notifications,onToggle:F,children:e(n.I18nKey.SETTINGS$SOUND_NOTIFICATIONS)}),(0,_.jsxs)(`div`,{className:`border-t border-[var(--oh-border)] pt-6 mt-2`,children:[(0,_.jsx)(`h3`,{className:`text-lg font-medium mb-2`,children:e(n.I18nKey.SETTINGS$GIT_SETTINGS)}),(0,_.jsx)(`p`,{className:`mb-4 text-sm leading-5 text-tertiary-light`,children:e(n.I18nKey.SETTINGS$GIT_SETTINGS_DESCRIPTION)}),(0,_.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,_.jsx)(f.SettingsInput,{testId:`git-user-name-input`,name:`git-user-name-input`,type:`text`,label:e(n.I18nKey.SETTINGS$GIT_USERNAME),defaultValue:b.git_user_name||``,onChange:I,placeholder:e(n.I18nKey.SETTINGS$GIT_USERNAME_PLACEHOLDER),className:`w-full min-w-0`}),(0,_.jsx)(f.SettingsInput,{testId:`git-user-email-input`,name:`git-user-email-input`,type:`email`,label:e(n.I18nKey.SETTINGS$GIT_EMAIL),defaultValue:b.git_user_email||``,onChange:L,placeholder:e(n.I18nKey.SETTINGS$GIT_EMAIL_PLACEHOLDER),className:`w-full min-w-0`})]}),(0,_.jsx)(`div`,{className:`flex justify-start pt-4`,children:(0,_.jsxs)(l.BrandButton,{testId:`submit-button`,variant:`primary`,type:`submit`,isDisabled:y||R,children:[!y&&e(n.I18nKey.SETTINGS$SAVE_CHANGES),y&&e(n.I18nKey.SETTINGS$SAVING)]})})]})]})]})}exports.default=v;
2
2
  //# sourceMappingURL=app-settings.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"app-settings.cjs","names":[],"sources":["../../src/routes/app-settings.tsx"],"sourcesContent":["import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { usePostHog } from \"posthog-js/react\";\nimport { useSaveSettings } from \"#/hooks/mutation/use-save-settings\";\nimport { useSettings } from \"#/hooks/query/use-settings\";\nimport { AvailableLanguages } from \"#/i18n\";\nimport { DEFAULT_SETTINGS } from \"#/services/settings\";\nimport { setTelemetryConsent } from \"#/services/telemetry\";\nimport { BrandButton } from \"#/components/features/settings/brand-button\";\nimport { SettingsSwitch } from \"#/components/features/settings/settings-switch\";\nimport { SettingsInput } from \"#/components/features/settings/settings-input\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { LanguageInput } from \"#/components/features/settings/app-settings/language-input\";\nimport { ThemeInput } from \"#/components/features/settings/app-settings/theme-input\";\nimport { handleCaptureConsent } from \"#/utils/handle-capture-consent\";\nimport {\n displayErrorToast,\n displaySuccessToast,\n} from \"#/utils/custom-toast-handlers\";\nimport { retrieveAxiosErrorMessage } from \"#/utils/retrieve-axios-error-message\";\nimport { AppSettingsInputsSkeleton } from \"#/components/features/settings/app-settings/app-settings-inputs-skeleton\";\n\nexport function AppSettingsScreen() {\n const posthog = usePostHog();\n const { t } = useTranslation(\"openhands\");\n\n const { mutate: saveSettings, isPending } = useSaveSettings();\n const { data: settings, isLoading } = useSettings();\n\n const [languageInputHasChanged, setLanguageInputHasChanged] =\n React.useState(false);\n const [analyticsSwitchHasChanged, setAnalyticsSwitchHasChanged] =\n React.useState(false);\n const [\n soundNotificationsSwitchHasChanged,\n setSoundNotificationsSwitchHasChanged,\n ] = React.useState(false);\n const [gitUserNameHasChanged, setGitUserNameHasChanged] =\n React.useState(false);\n const [gitUserEmailHasChanged, setGitUserEmailHasChanged] =\n React.useState(false);\n\n const formAction = (formData: FormData) => {\n const languageLabel = formData.get(\"language-input\")?.toString();\n const languageValue = AvailableLanguages.find(\n ({ label }) => label === languageLabel,\n )?.value;\n const language = languageValue || DEFAULT_SETTINGS.language;\n\n const enableAnalytics =\n formData.get(\"enable-analytics-switch\")?.toString() === \"on\";\n const enableSoundNotifications =\n formData.get(\"enable-sound-notifications-switch\")?.toString() === \"on\";\n\n const gitUserName =\n formData.get(\"git-user-name-input\")?.toString() ||\n DEFAULT_SETTINGS.git_user_name;\n const gitUserEmail =\n formData.get(\"git-user-email-input\")?.toString() ||\n DEFAULT_SETTINGS.git_user_email;\n\n saveSettings(\n {\n language,\n user_consents_to_analytics: enableAnalytics,\n enable_sound_notifications: enableSoundNotifications,\n git_user_name: gitUserName,\n git_user_email: gitUserEmail,\n },\n {\n onSuccess: () => {\n handleCaptureConsent(posthog, enableAnalytics);\n void setTelemetryConsent(enableAnalytics ? \"granted\" : \"denied\");\n displaySuccessToast(t(I18nKey.SETTINGS$SAVED));\n },\n onError: (error) => {\n const errorMessage = retrieveAxiosErrorMessage(error);\n displayErrorToast(errorMessage || t(I18nKey.ERROR$GENERIC));\n },\n onSettled: () => {\n setLanguageInputHasChanged(false);\n setAnalyticsSwitchHasChanged(false);\n setSoundNotificationsSwitchHasChanged(false);\n setGitUserNameHasChanged(false);\n setGitUserEmailHasChanged(false);\n },\n },\n );\n };\n\n const checkIfLanguageInputHasChanged = (value: string) => {\n const selectedLanguage = AvailableLanguages.find(\n ({ label: langValue }) => langValue === value,\n )?.label;\n const currentLanguage = AvailableLanguages.find(\n ({ value: langValue }) => langValue === settings?.language,\n )?.label;\n\n setLanguageInputHasChanged(selectedLanguage !== currentLanguage);\n };\n\n const checkIfAnalyticsSwitchHasChanged = (checked: boolean) => {\n // Treat null as true since analytics is opt-in by default\n const currentAnalytics = settings?.user_consents_to_analytics ?? true;\n setAnalyticsSwitchHasChanged(checked !== currentAnalytics);\n };\n\n const checkIfSoundNotificationsSwitchHasChanged = (checked: boolean) => {\n const currentSoundNotifications = !!settings?.enable_sound_notifications;\n setSoundNotificationsSwitchHasChanged(\n checked !== currentSoundNotifications,\n );\n };\n\n const checkIfGitUserNameHasChanged = (value: string) => {\n const currentValue = settings?.git_user_name;\n setGitUserNameHasChanged(value !== currentValue);\n };\n\n const checkIfGitUserEmailHasChanged = (value: string) => {\n const currentValue = settings?.git_user_email;\n setGitUserEmailHasChanged(value !== currentValue);\n };\n\n const formIsClean =\n !languageInputHasChanged &&\n !analyticsSwitchHasChanged &&\n !soundNotificationsSwitchHasChanged &&\n !gitUserNameHasChanged &&\n !gitUserEmailHasChanged;\n\n const shouldBeLoading = !settings || isLoading || isPending;\n\n return (\n <form\n data-testid=\"app-settings-screen\"\n action={formAction}\n className=\"flex flex-col gap-6\"\n >\n {shouldBeLoading && <AppSettingsInputsSkeleton />}\n {!shouldBeLoading && (\n <div className=\"flex flex-col gap-6\">\n <LanguageInput\n name=\"language-input\"\n defaultKey={settings.language}\n onChange={checkIfLanguageInputHasChanged}\n />\n\n <ThemeInput />\n\n <SettingsSwitch\n testId=\"enable-analytics-switch\"\n name=\"enable-analytics-switch\"\n defaultIsToggled={settings.user_consents_to_analytics ?? true}\n onToggle={checkIfAnalyticsSwitchHasChanged}\n >\n {t(I18nKey.ANALYTICS$SEND_ANONYMOUS_DATA)}\n </SettingsSwitch>\n\n <SettingsSwitch\n testId=\"enable-sound-notifications-switch\"\n name=\"enable-sound-notifications-switch\"\n defaultIsToggled={!!settings.enable_sound_notifications}\n onToggle={checkIfSoundNotificationsSwitchHasChanged}\n >\n {t(I18nKey.SETTINGS$SOUND_NOTIFICATIONS)}\n </SettingsSwitch>\n\n <div className=\"border-t border-[var(--oh-border)] pt-6 mt-2\">\n <h3 className=\"text-lg font-medium mb-2\">\n {t(I18nKey.SETTINGS$GIT_SETTINGS)}\n </h3>\n <p className=\"mb-4 text-sm leading-5 text-tertiary-light\">\n {t(I18nKey.SETTINGS$GIT_SETTINGS_DESCRIPTION)}\n </p>\n <div className=\"flex flex-col gap-6\">\n <SettingsInput\n testId=\"git-user-name-input\"\n name=\"git-user-name-input\"\n type=\"text\"\n label={t(I18nKey.SETTINGS$GIT_USERNAME)}\n defaultValue={settings.git_user_name || \"\"}\n onChange={checkIfGitUserNameHasChanged}\n placeholder={t(I18nKey.SETTINGS$GIT_USERNAME_PLACEHOLDER)}\n className=\"w-full min-w-0\"\n />\n <SettingsInput\n testId=\"git-user-email-input\"\n name=\"git-user-email-input\"\n type=\"email\"\n label={t(I18nKey.SETTINGS$GIT_EMAIL)}\n defaultValue={settings.git_user_email || \"\"}\n onChange={checkIfGitUserEmailHasChanged}\n placeholder={t(I18nKey.SETTINGS$GIT_EMAIL_PLACEHOLDER)}\n className=\"w-full min-w-0\"\n />\n </div>\n <div className=\"flex justify-start pt-4\">\n <BrandButton\n testId=\"submit-button\"\n variant=\"primary\"\n type=\"submit\"\n isDisabled={isPending || formIsClean}\n >\n {!isPending && t(I18nKey.SETTINGS$SAVE_CHANGES)}\n {isPending && t(I18nKey.SETTINGS$SAVING)}\n </BrandButton>\n </div>\n </div>\n </div>\n )}\n </form>\n );\n}\n\nexport default AppSettingsScreen;\n"],"mappings":"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"}
1
+ {"version":3,"file":"app-settings.cjs","names":[],"sources":["../../src/routes/app-settings.tsx"],"sourcesContent":["import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useSaveSettings } from \"#/hooks/mutation/use-save-settings\";\nimport { useSettings } from \"#/hooks/query/use-settings\";\nimport { AvailableLanguages } from \"#/i18n\";\nimport { DEFAULT_SETTINGS } from \"#/services/settings\";\nimport { setTelemetryConsent } from \"#/services/telemetry\";\nimport { BrandButton } from \"#/components/features/settings/brand-button\";\nimport { SettingsSwitch } from \"#/components/features/settings/settings-switch\";\nimport { SettingsInput } from \"#/components/features/settings/settings-input\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { LanguageInput } from \"#/components/features/settings/app-settings/language-input\";\nimport { ThemeInput } from \"#/components/features/settings/app-settings/theme-input\";\nimport {\n displayErrorToast,\n displaySuccessToast,\n} from \"#/utils/custom-toast-handlers\";\nimport { retrieveAxiosErrorMessage } from \"#/utils/retrieve-axios-error-message\";\nimport { AppSettingsInputsSkeleton } from \"#/components/features/settings/app-settings/app-settings-inputs-skeleton\";\n\nexport function AppSettingsScreen() {\n const { t } = useTranslation(\"openhands\");\n\n const { mutate: saveSettings, isPending } = useSaveSettings();\n const { data: settings, isLoading } = useSettings();\n\n const [languageInputHasChanged, setLanguageInputHasChanged] =\n React.useState(false);\n const [analyticsSwitchHasChanged, setAnalyticsSwitchHasChanged] =\n React.useState(false);\n const [\n soundNotificationsSwitchHasChanged,\n setSoundNotificationsSwitchHasChanged,\n ] = React.useState(false);\n const [gitUserNameHasChanged, setGitUserNameHasChanged] =\n React.useState(false);\n const [gitUserEmailHasChanged, setGitUserEmailHasChanged] =\n React.useState(false);\n\n const formAction = (formData: FormData) => {\n const languageLabel = formData.get(\"language-input\")?.toString();\n const languageValue = AvailableLanguages.find(\n ({ label }) => label === languageLabel,\n )?.value;\n const language = languageValue || DEFAULT_SETTINGS.language;\n\n const enableAnalytics =\n formData.get(\"enable-analytics-switch\")?.toString() === \"on\";\n const enableSoundNotifications =\n formData.get(\"enable-sound-notifications-switch\")?.toString() === \"on\";\n\n const gitUserName =\n formData.get(\"git-user-name-input\")?.toString() ||\n DEFAULT_SETTINGS.git_user_name;\n const gitUserEmail =\n formData.get(\"git-user-email-input\")?.toString() ||\n DEFAULT_SETTINGS.git_user_email;\n\n saveSettings(\n {\n language,\n user_consents_to_analytics: enableAnalytics,\n enable_sound_notifications: enableSoundNotifications,\n git_user_name: gitUserName,\n git_user_email: gitUserEmail,\n },\n {\n onSuccess: () => {\n void setTelemetryConsent(enableAnalytics ? \"granted\" : \"denied\");\n displaySuccessToast(t(I18nKey.SETTINGS$SAVED));\n },\n onError: (error) => {\n const errorMessage = retrieveAxiosErrorMessage(error);\n displayErrorToast(errorMessage || t(I18nKey.ERROR$GENERIC));\n },\n onSettled: () => {\n setLanguageInputHasChanged(false);\n setAnalyticsSwitchHasChanged(false);\n setSoundNotificationsSwitchHasChanged(false);\n setGitUserNameHasChanged(false);\n setGitUserEmailHasChanged(false);\n },\n },\n );\n };\n\n const checkIfLanguageInputHasChanged = (value: string) => {\n const selectedLanguage = AvailableLanguages.find(\n ({ label: langValue }) => langValue === value,\n )?.label;\n const currentLanguage = AvailableLanguages.find(\n ({ value: langValue }) => langValue === settings?.language,\n )?.label;\n\n setLanguageInputHasChanged(selectedLanguage !== currentLanguage);\n };\n\n const checkIfAnalyticsSwitchHasChanged = (checked: boolean) => {\n // Treat null as true since analytics is opt-in by default\n const currentAnalytics = settings?.user_consents_to_analytics ?? true;\n setAnalyticsSwitchHasChanged(checked !== currentAnalytics);\n };\n\n const checkIfSoundNotificationsSwitchHasChanged = (checked: boolean) => {\n const currentSoundNotifications = !!settings?.enable_sound_notifications;\n setSoundNotificationsSwitchHasChanged(\n checked !== currentSoundNotifications,\n );\n };\n\n const checkIfGitUserNameHasChanged = (value: string) => {\n const currentValue = settings?.git_user_name;\n setGitUserNameHasChanged(value !== currentValue);\n };\n\n const checkIfGitUserEmailHasChanged = (value: string) => {\n const currentValue = settings?.git_user_email;\n setGitUserEmailHasChanged(value !== currentValue);\n };\n\n const formIsClean =\n !languageInputHasChanged &&\n !analyticsSwitchHasChanged &&\n !soundNotificationsSwitchHasChanged &&\n !gitUserNameHasChanged &&\n !gitUserEmailHasChanged;\n\n const shouldBeLoading = !settings || isLoading || isPending;\n\n return (\n <form\n data-testid=\"app-settings-screen\"\n action={formAction}\n className=\"flex flex-col gap-6\"\n >\n {shouldBeLoading && <AppSettingsInputsSkeleton />}\n {!shouldBeLoading && (\n <div className=\"flex flex-col gap-6\">\n <LanguageInput\n name=\"language-input\"\n defaultKey={settings.language}\n onChange={checkIfLanguageInputHasChanged}\n />\n\n <ThemeInput />\n\n <SettingsSwitch\n testId=\"enable-analytics-switch\"\n name=\"enable-analytics-switch\"\n defaultIsToggled={settings.user_consents_to_analytics ?? true}\n onToggle={checkIfAnalyticsSwitchHasChanged}\n >\n {t(I18nKey.ANALYTICS$SEND_ANONYMOUS_DATA)}\n </SettingsSwitch>\n\n <SettingsSwitch\n testId=\"enable-sound-notifications-switch\"\n name=\"enable-sound-notifications-switch\"\n defaultIsToggled={!!settings.enable_sound_notifications}\n onToggle={checkIfSoundNotificationsSwitchHasChanged}\n >\n {t(I18nKey.SETTINGS$SOUND_NOTIFICATIONS)}\n </SettingsSwitch>\n\n <div className=\"border-t border-[var(--oh-border)] pt-6 mt-2\">\n <h3 className=\"text-lg font-medium mb-2\">\n {t(I18nKey.SETTINGS$GIT_SETTINGS)}\n </h3>\n <p className=\"mb-4 text-sm leading-5 text-tertiary-light\">\n {t(I18nKey.SETTINGS$GIT_SETTINGS_DESCRIPTION)}\n </p>\n <div className=\"flex flex-col gap-6\">\n <SettingsInput\n testId=\"git-user-name-input\"\n name=\"git-user-name-input\"\n type=\"text\"\n label={t(I18nKey.SETTINGS$GIT_USERNAME)}\n defaultValue={settings.git_user_name || \"\"}\n onChange={checkIfGitUserNameHasChanged}\n placeholder={t(I18nKey.SETTINGS$GIT_USERNAME_PLACEHOLDER)}\n className=\"w-full min-w-0\"\n />\n <SettingsInput\n testId=\"git-user-email-input\"\n name=\"git-user-email-input\"\n type=\"email\"\n label={t(I18nKey.SETTINGS$GIT_EMAIL)}\n defaultValue={settings.git_user_email || \"\"}\n onChange={checkIfGitUserEmailHasChanged}\n placeholder={t(I18nKey.SETTINGS$GIT_EMAIL_PLACEHOLDER)}\n className=\"w-full min-w-0\"\n />\n </div>\n <div className=\"flex justify-start pt-4\">\n <BrandButton\n testId=\"submit-button\"\n variant=\"primary\"\n type=\"submit\"\n isDisabled={isPending || formIsClean}\n >\n {!isPending && t(I18nKey.SETTINGS$SAVE_CHANGES)}\n {isPending && t(I18nKey.SETTINGS$SAVING)}\n </BrandButton>\n </div>\n </div>\n </div>\n )}\n </form>\n );\n}\n\nexport default AppSettingsScreen;\n"],"mappings":"i9BAoBA,SAAgB,GAAoB,CAClC,GAAM,CAAE,KAAM,EAAA,eAAe,YAAY,CAEnC,CAAE,OAAQ,EAAc,aAAc,EAAA,iBAAiB,CACvD,CAAE,KAAM,EAAU,aAAc,EAAA,aAAa,CAE7C,CAAC,EAAyB,GAC9B,EAAA,QAAM,SAAS,GAAM,CACjB,CAAC,EAA2B,GAChC,EAAA,QAAM,SAAS,GAAM,CACjB,CACJ,EACA,GACE,EAAA,QAAM,SAAS,GAAM,CACnB,CAAC,EAAuB,GAC5B,EAAA,QAAM,SAAS,GAAM,CACjB,CAAC,EAAwB,GAC7B,EAAA,QAAM,SAAS,GAAM,CAEjB,EAAc,GAAuB,CACzC,IAAM,EAAgB,EAAS,IAAI,iBAAiB,EAAE,UAAU,CAI1D,EAHgB,EAAA,mBAAmB,MACtC,CAAE,WAAY,IAAU,EAC1B,EAAE,OAC+B,EAAA,iBAAiB,SAE7C,EACJ,EAAS,IAAI,0BAA0B,EAAE,UAAU,GAAK,KAW1D,EACE,CACE,WACA,2BAA4B,EAC5B,2BAbF,EAAS,IAAI,oCAAoC,EAAE,UAAU,GAAK,KAchE,cAXF,EAAS,IAAI,sBAAsB,EAAE,UAAU,EAC/C,EAAA,iBAAiB,cAWf,eATF,EAAS,IAAI,uBAAuB,EAAE,UAAU,EAChD,EAAA,iBAAiB,eAShB,CACD,CACE,cAAiB,CACV,EAAA,oBAAoB,EAAkB,UAAY,SAAS,CAChE,EAAA,oBAAoB,EAAE,EAAA,QAAQ,eAAe,CAAC,EAEhD,QAAU,GAAU,CAElB,EAAA,kBADqB,EAAA,0BAA0B,EAC7B,EAAgB,EAAE,EAAA,QAAQ,cAAc,CAAC,EAE7D,cAAiB,CACf,EAA2B,GAAM,CACjC,EAA6B,GAAM,CACnC,EAAsC,GAAM,CAC5C,EAAyB,GAAM,CAC/B,EAA0B,GAAM,EAEnC,CACF,EAGG,EAAkC,GAAkB,CACxD,IAAM,EAAmB,EAAA,mBAAmB,MACzC,CAAE,MAAO,KAAgB,IAAc,EACzC,EAAE,MACG,EAAkB,EAAA,mBAAmB,MACxC,CAAE,MAAO,KAAgB,IAAc,GAAU,SACnD,EAAE,MAEH,EAA2B,IAAqB,EAAgB,EAG5D,EAAoC,GAAqB,CAG7D,EAA6B,KADJ,GAAU,4BAA8B,IACP,EAGtD,EAA6C,GAAqB,CAEtE,EACE,IAAY,CAFqB,CAAC,GAAU,2BAG7C,EAGG,EAAgC,GAAkB,CACtD,IAAM,EAAe,GAAU,cAC/B,EAAyB,IAAU,EAAa,EAG5C,EAAiC,GAAkB,CACvD,IAAM,EAAe,GAAU,eAC/B,EAA0B,IAAU,EAAa,EAG7C,EACJ,CAAC,GACD,CAAC,GACD,CAAC,GACD,CAAC,GACD,CAAC,EAEG,EAAkB,CAAC,GAAY,GAAa,EAElD,OACE,EAAA,EAAA,MAAC,OAAD,CACE,cAAY,sBACZ,OAAQ,EACR,UAAU,+BAHZ,CAKG,IAAmB,EAAA,EAAA,KAAC,EAAA,0BAAD,EAA6B,CAAA,CAChD,CAAC,IACA,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,+BAAf,EACE,EAAA,EAAA,KAAC,EAAA,cAAD,CACE,KAAK,iBACL,WAAY,EAAS,SACrB,SAAU,EACV,CAAA,EAEF,EAAA,EAAA,KAAC,EAAA,WAAD,EAAc,CAAA,EAEd,EAAA,EAAA,KAAC,EAAA,eAAD,CACE,OAAO,0BACP,KAAK,0BACL,iBAAkB,EAAS,4BAA8B,GACzD,SAAU,WAET,EAAE,EAAA,QAAQ,8BAA8B,CAC1B,CAAA,EAEjB,EAAA,EAAA,KAAC,EAAA,eAAD,CACE,OAAO,oCACP,KAAK,oCACL,iBAAkB,CAAC,CAAC,EAAS,2BAC7B,SAAU,WAET,EAAE,EAAA,QAAQ,6BAA6B,CACzB,CAAA,EAEjB,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,wDAAf,EACE,EAAA,EAAA,KAAC,KAAD,CAAI,UAAU,oCACX,EAAE,EAAA,QAAQ,sBAAsB,CAC9B,CAAA,EACL,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,sDACV,EAAE,EAAA,QAAQ,kCAAkC,CAC3C,CAAA,EACJ,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,+BAAf,EACE,EAAA,EAAA,KAAC,EAAA,cAAD,CACE,OAAO,sBACP,KAAK,sBACL,KAAK,OACL,MAAO,EAAE,EAAA,QAAQ,sBAAsB,CACvC,aAAc,EAAS,eAAiB,GACxC,SAAU,EACV,YAAa,EAAE,EAAA,QAAQ,kCAAkC,CACzD,UAAU,iBACV,CAAA,EACF,EAAA,EAAA,KAAC,EAAA,cAAD,CACE,OAAO,uBACP,KAAK,uBACL,KAAK,QACL,MAAO,EAAE,EAAA,QAAQ,mBAAmB,CACpC,aAAc,EAAS,gBAAkB,GACzC,SAAU,EACV,YAAa,EAAE,EAAA,QAAQ,+BAA+B,CACtD,UAAU,iBACV,CAAA,CACE,IACN,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,oCACb,EAAA,EAAA,MAAC,EAAA,YAAD,CACE,OAAO,gBACP,QAAQ,UACR,KAAK,SACL,WAAY,GAAa,WAJ3B,CAMG,CAAC,GAAa,EAAE,EAAA,QAAQ,sBAAsB,CAC9C,GAAa,EAAE,EAAA,QAAQ,gBAAgB,CAC5B,GACV,CAAA,CACF,GACF,GAEH"}