@openhands/agent-canvas 1.4.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 (710) hide show
  1. package/README.md +11 -12
  2. package/README.windows.md +4 -2
  3. package/build/assets/{Trans-Ch-OVWEA.js → Trans-DqF_OEZB.js} +1 -1
  4. package/build/assets/{acp-providers-Sy2LKyMa.js → acp-providers-DerAmTyY.js} +1 -1
  5. package/build/assets/active-backend-context-B8rMv0X9.js +1 -0
  6. package/build/assets/{add-backend-modal-Bgy8anoR.js → add-backend-modal-CxC7BNEc.js} +1 -1
  7. package/build/assets/{agent-profiles-settings-3mmXljZX.js → agent-profiles-settings-BJb8YXR1.js} +1 -1
  8. package/build/assets/agent-server-compatibility-BWN-EIQn.js +1 -0
  9. package/build/assets/agent-server-conversation-service.api-DSPIkMwJ.js +41 -0
  10. package/build/assets/{agent-settings-B-W10B4E.js → agent-settings-CgCnqaAA.js} +2 -2
  11. package/build/assets/agent-settings-DDkSavD7.js +1 -0
  12. package/build/assets/{alert-banner-Bpf2NQJq.js → alert-banner-Dh51WURQ.js} +1 -1
  13. package/build/assets/api-key-entry-screen-iZc7n8AI.js +1 -0
  14. package/build/assets/app-settings-B5zyipxJ.js +1 -0
  15. package/build/assets/automation-detail-CZsu2CoM.js +2 -0
  16. package/build/assets/automation-export-BwRX6H32.js +2 -0
  17. package/build/assets/automations-list-lHAVzMoA.js +1 -0
  18. package/build/assets/{back-nav-button-CUS2mi-U.js → back-nav-button-DVknCcSP.js} +1 -1
  19. package/build/assets/backend-form-modal-RGcu909r.js +1 -0
  20. package/build/assets/{backend-synced-settings-badge-D9hZx05w.js → backend-synced-settings-badge-BSfN0AZA.js} +1 -1
  21. package/build/assets/{base-modal-BuF2f0YL.js → base-modal-CIF_785P.js} +1 -1
  22. package/build/assets/{bot-D7eUAuSB.js → bot-C-EA6685.js} +1 -1
  23. package/build/assets/{brand-button-vMVuyDXu.js → brand-button-B1izLAdR.js} +1 -1
  24. package/build/assets/{browser-BifzWIBd.js → browser-DKaeq_sT.js} +3 -3
  25. package/build/assets/{browser-tab-CkkqJnqw.js → browser-tab-qb_ftCxW.js} +1 -1
  26. package/build/assets/canvas-ui-COgjltGz.js +1 -0
  27. package/build/assets/{chat-send-button-B_jc5z5C.js → chat-send-button-BZHG2hAW.js} +1 -1
  28. package/build/assets/check-TbOEtHKj.js +1 -0
  29. package/build/assets/{chevron-down-CI8A6tet.js → chevron-down-D7IvFMBM.js} +1 -1
  30. package/build/assets/{circle-plus-check-toggle-C5YxjxvI.js → circle-plus-check-toggle-DoFIjVE0.js} +1 -1
  31. package/build/assets/client-source-BZK8vRs2.js +1 -0
  32. package/build/assets/cloud-funnel-analytics-Zcv57hfT.js +1 -0
  33. package/build/assets/{color-themes-DPBzNtVg.js → color-themes-CHizm1xF.js} +1 -1
  34. package/build/assets/{combobox-caret-DoObzqf4.js → combobox-caret-CxZpqoSR.js} +1 -1
  35. package/build/assets/{command-menu-D-JV3Wqm.js → command-menu-oTvKDU3Y.js} +1 -1
  36. package/build/assets/condenser-settings-BGlWn93P.js +1 -0
  37. package/build/assets/{confirmation-modal-BGLu6XJN.js → confirmation-modal-DGBWM2Ls.js} +1 -1
  38. package/build/assets/{context-menu-list-item-BD5_EaKN.js → context-menu-list-item-6psNyl7X.js} +1 -1
  39. package/build/assets/conversation-BoCYx8n2.js +89 -0
  40. package/build/assets/conversation-DgHqMjnY.js +1 -0
  41. package/build/assets/conversation-panel-78Rxh_-I.js +1 -0
  42. package/build/assets/conversation-service.api-_f9GlIEi.js +1 -0
  43. package/build/assets/{conversation-tab-empty-state-B2dDYEwf.js → conversation-tab-empty-state-CNUmIms2.js} +1 -1
  44. package/build/assets/{copy-3JCw_XFB.js → copy-D1YGjP-C.js} +1 -1
  45. package/build/assets/{copy-to-clipboard-button-CaR52OnA.js → copy-to-clipboard-button-CFzH_NOX.js} +1 -1
  46. package/build/assets/declaration-BGsHjPEW.js +1 -0
  47. package/build/assets/{device-verify-Dj6I4Iqe.js → device-verify-WBSjJBLH.js} +1 -1
  48. package/build/assets/{dropdown-classes-DJSXeLqc.js → dropdown-classes-D3wMJlXT.js} +1 -1
  49. package/build/assets/{ellipsis-button-C5Z-tPFp.js → ellipsis-button-CbNnHlIq.js} +1 -1
  50. package/build/assets/{entry.client-2_3ePAm0.js → entry.client-DNlPGxsu.js} +2 -2
  51. package/build/assets/{enum-filter-dropdown-DXbVwiNZ.js → enum-filter-dropdown-JLYv1t8L.js} +1 -1
  52. package/build/assets/{environment-switch-overlay-DZQfRGTx.js → environment-switch-overlay-B1PFO8P8.js} +1 -1
  53. package/build/assets/{extensions-hub-CLjmOGqS.js → extensions-hub-CCbLA7IM.js} +1 -1
  54. package/build/assets/{extensions-navigation-B5MeUiMq.js → extensions-navigation-CPNjMNvR.js} +1 -1
  55. package/build/assets/{external-link-D2zJjE9G.js → external-link-lhdITPqq.js} +1 -1
  56. package/build/assets/files-tab-y4K7EXBO.js +1 -0
  57. package/build/assets/{form-control-classes-ChpNBe9n.js → form-control-classes-CbdN5aO3.js} +1 -1
  58. package/build/assets/format-time-delta-DhDbkD7V.js +1 -0
  59. package/build/assets/git-provider-icon-ITvsH4Ko.js +1 -0
  60. package/build/assets/home-BwbeOWwU.js +1 -0
  61. package/build/assets/home-DKPGQ5P3.js +1 -0
  62. package/build/assets/index-home-Bko2Itv5.js +1 -0
  63. package/build/assets/install-server-modal-Qk1gwyI8.js +1 -0
  64. package/build/assets/{launch-V_3Rp7WS.js → launch-CAGavYl-.js} +1 -1
  65. package/build/assets/lesson-plan-DMCPdtrf.js +4 -0
  66. package/build/assets/{list-todo-BfH6yYUK.js → list-todo-CAtvkzcy.js} +1 -1
  67. package/build/assets/llm-not-configured-banner-C1ktyb3C.js +27 -0
  68. package/build/assets/llm-settings-BBsZFi9l.js +1 -0
  69. package/build/assets/llm-settings-DFkJQr_w.js +1 -0
  70. package/build/assets/llm-subscription-service-Casyzgn1.js +1 -0
  71. package/build/assets/loader-circle-CsAsfLIs.js +1 -0
  72. package/build/assets/{loading-spinner-BLdswi6q.js → loading-spinner-BcdnT0mN.js} +1 -1
  73. package/build/assets/manage-backends-modal-CKQ46rvw.js +1 -0
  74. package/build/assets/manifest-03478bbf.js +1 -0
  75. package/build/assets/{map-provider-BM2SJarp.js → map-provider-BbIb12oh.js} +1 -1
  76. package/build/assets/{markdown-renderer-DMT7Zkpd.js → markdown-renderer-B4V2OMFP.js} +1 -1
  77. package/build/assets/{mcp-BQufNPZ6.js → mcp-BapoJsDc.js} +2 -2
  78. package/build/assets/{messages-BnJCqnFf.js → messages-CUBFMY5o.js} +26 -26
  79. package/build/assets/{modal-body-DouOE5KH.js → modal-body-Cc2zp0xb.js} +1 -1
  80. package/build/assets/{modal-classes-Cf-4tbHz.js → modal-classes-3qT9Ap7Q.js} +1 -1
  81. package/build/assets/{modal-close-button-B6CfxxJj.js → modal-close-button-BcIBUdSq.js} +1 -1
  82. package/build/assets/model-selector-DJrMrFAr.js +1 -0
  83. package/build/assets/onboarding-6NMkdNxV.js +1 -0
  84. package/build/assets/onboarding-modal-Q4AnpIdg.js +1 -0
  85. package/build/assets/organization-service.api-vrRNwOma.js +1 -0
  86. package/build/assets/path-utils-PNfCKQDV.js +1 -0
  87. package/build/assets/{pencil-Dj2XjKmI.js → pencil-CWhApFIT.js} +1 -1
  88. package/build/assets/{plan-components-CcCBmCzW.js → plan-components-BdZXPyZU.js} +1 -1
  89. package/build/assets/{planner-tab-Dhyqcqmb.js → planner-tab-ByOw1he8.js} +1 -1
  90. package/build/assets/plugins-management-service-B75jyC56.js +1 -0
  91. package/build/assets/profiles-service.api-BQTklD5D.js +1 -0
  92. package/build/assets/providers-DfTB2gPd.js +1 -0
  93. package/build/assets/proxy-B3tCGf0X.js +1 -0
  94. package/build/assets/{recommended-automations-launcher-CTcGTl4d.js → recommended-automations-launcher-Bj7PuHY1.js} +1 -1
  95. package/build/assets/{refresh-cw-DM82EIyx.js → refresh-cw-B9B7-vsy.js} +1 -1
  96. package/build/assets/root-CDnuTToz.js +2 -0
  97. package/build/assets/root-CYWeTrWE.css +1 -0
  98. package/build/assets/root-layout-DfYVlcRG.js +2 -0
  99. package/build/assets/{runtime-waiting-state-BsXLElvN.js → runtime-waiting-state-CnyVhX4T.js} +1 -1
  100. package/build/assets/schema-field-CUwk4wrQ.js +1 -0
  101. package/build/assets/sdk-section-page-DLLNrYjI.js +1 -0
  102. package/build/assets/{sdk-settings-schema-Cv7M9eSe.js → sdk-settings-schema-CLR01YIK.js} +1 -1
  103. package/build/assets/search-dIQ09UY2.js +1 -0
  104. package/build/assets/secrets-service-CvyPWJhg.js +1 -0
  105. package/build/assets/{secrets-settings-Cx6yJlyb.js → secrets-settings-CHy72A5C.js} +1 -1
  106. package/build/assets/{segmented-toggle-DyQqPhoD.js → segmented-toggle-kzwZkLaj.js} +1 -1
  107. package/build/assets/settings-B9S8UVQr.js +1 -0
  108. package/build/assets/{settings-dropdown-input-BjunGXJb.js → settings-dropdown-input-Dhx9ErGd.js} +1 -1
  109. package/build/assets/{settings-index-D6sxWSRk.js → settings-index-BKDl2CQ-.js} +1 -1
  110. package/build/assets/{settings-input-bD6npsDm.js → settings-input-BsgQWS5R.js} +1 -1
  111. package/build/assets/{settings-list-classes-Dp_OgzN0.js → settings-list-classes-DSJJX99U.js} +1 -1
  112. package/build/assets/settings-modal-DeK11CyT.js +1 -0
  113. package/build/assets/settings-service.api-DXk5TdeJ.js +1 -0
  114. package/build/assets/{settings-switch-5cuxl8Dc.js → settings-switch-Bes8dIlV.js} +1 -1
  115. package/build/assets/{settings-utils-BMdG65By.js → settings-utils-DzCVfiR3.js} +1 -1
  116. package/build/assets/shared-conversation-9atDzTR4.js +1 -0
  117. package/build/assets/{sidebar-layout-DuzJMMw-.js → sidebar-layout-Bm7pa3Vk.js} +1 -1
  118. package/build/assets/{sidebar-mobile-menu-toggle-VvvX32iF.js → sidebar-mobile-menu-toggle-giMMZctn.js} +1 -1
  119. package/build/assets/{sidebar-nav-link-5AlTT5-j.js → sidebar-nav-link-CHqyFXwV.js} +1 -1
  120. package/build/assets/{sidebar-store-CZuE8AH5.js → sidebar-store-uiUXBU1N.js} +1 -1
  121. package/build/assets/{skill-card-pill-row-eTIkE4nz.js → skill-card-pill-row-BPYKQ3IN.js} +1 -1
  122. package/build/assets/skills-plugins-Tropusio.js +1 -0
  123. package/build/assets/{skills-settings-BUv04tSc.js → skills-settings-BvzBBCWk.js} +2 -2
  124. package/build/assets/{square-chevron-right-Czw3FFWc.js → square-chevron-right-DE-JN-2Z.js} +1 -1
  125. package/build/assets/{styled-tooltip-CgX2oRaK.js → styled-tooltip-B14i_Uac.js} +1 -1
  126. package/build/assets/{suspense-BO1Tl_Vf.js → suspense-DmZ3MSSh.js} +1 -1
  127. package/build/assets/{task-list-tab-0k9PhuqO.js → task-list-tab-DyfgG4MC.js} +1 -1
  128. package/build/assets/telemetry-C5JMEfqB.js +2 -0
  129. package/build/assets/{terminal-B61WrJdS.js → terminal-DRXt2Lr4.js} +1 -1
  130. package/build/assets/{toggle-switch-2j5wwR85.js → toggle-switch-DX_k418f.js} +1 -1
  131. package/build/assets/{trash-2-Be_7y3Mn.js → trash-2-BU6BlW4i.js} +1 -1
  132. package/build/assets/{typography-D8mHDeNG.js → typography-CzfoD9DY.js} +1 -1
  133. package/build/assets/use-acp-credential-form-Bm8qXdlc.js +1 -0
  134. package/build/assets/{use-activate-agent-profile-20v1xU0H.js → use-activate-agent-profile-DlykqEfN.js} +1 -1
  135. package/build/assets/{use-active-agent-profile-BkJN7Xsy.js → use-active-agent-profile-hI-x-UBa.js} +1 -1
  136. package/build/assets/{use-active-conversation-DOZVSVtU.js → use-active-conversation-2qeez40F.js} +1 -1
  137. package/build/assets/use-agent-profiles-0pr5bLS7.js +1 -0
  138. package/build/assets/{use-agent-state-DHZO1obC.js → use-agent-state-C6peDXUm.js} +1 -1
  139. package/build/assets/use-backends-health-CLHPitJM.js +1 -0
  140. package/build/assets/{use-can-manage-org-profiles-C-OhWVBS.js → use-can-manage-org-profiles-Ck_bsNbH.js} +1 -1
  141. package/build/assets/use-cloud-current-user-id-DUCSxNjY.js +1 -0
  142. package/build/assets/use-config-B5r8erYt.js +1 -0
  143. package/build/assets/use-create-conversation-r1JHfKO5.js +1 -0
  144. package/build/assets/{use-create-secret-D0HCOZFu.js → use-create-secret-Cf2N11d2.js} +1 -1
  145. package/build/assets/{use-event-store-DjgU4wfO.js → use-event-store-Bbaz51GR.js} +1 -1
  146. package/build/assets/{use-handle-plan-click-DyRASKMC.js → use-handle-plan-click-CsAW3FlH.js} +1 -1
  147. package/build/assets/use-is-authed-BezEyfeh.js +1 -0
  148. package/build/assets/use-llm-profiles-Dr5__SlZ.js +1 -0
  149. package/build/assets/use-plugins-marketplace-BplU65ae.js +1 -0
  150. package/build/assets/use-runtime-is-ready-vCFOcLFa.js +1 -0
  151. package/build/assets/use-save-agent-profile-RqUGqTv6.js +1 -0
  152. package/build/assets/use-save-settings-Chvzeu2s.js +1 -0
  153. package/build/assets/use-settings-CyxSlyTQ.js +1 -0
  154. package/build/assets/use-settings-nav-items-zEkSO_Bf.js +16 -0
  155. package/build/assets/use-skills-xrVoKYrF.js +1 -0
  156. package/build/assets/{use-task-list-AVBLbbcR.js → use-task-list-CfisapBW.js} +1 -1
  157. package/build/assets/use-tracking-D2Qg5Lpd.js +1 -0
  158. package/build/assets/{use-user-conversation-zpx7I18x.js → use-user-conversation-CnE4zhOA.js} +1 -1
  159. package/build/assets/{useMutation-DrCAVg5w.js → useMutation-u8UgRgDK.js} +1 -1
  160. package/build/assets/{useMutationState-D8QN0ZCy.js → useMutationState-OnAsCLA_.js} +1 -1
  161. package/build/assets/{useQueries-DClgUTc7.js → useQueries-BpIlT8Mt.js} +1 -1
  162. package/build/assets/{useQuery-CRBP8vIS.js → useQuery-D5pEZbY0.js} +1 -1
  163. package/build/assets/{useTranslation-CDRCKC9-.js → useTranslation-Cbf5AGg_.js} +1 -1
  164. package/build/assets/{utils-D3U3rlqr.js → utils-DB9LsAzA.js} +1 -1
  165. package/build/assets/{vendor~browser-tab-Di0kh5Zw.js → vendor~browser-tab-CsMb-pta.js} +1 -1
  166. package/build/assets/{vendor~browser-Cvg7jXCP.js → vendor~browser-wXQ-WZEC.js} +1 -1
  167. package/build/assets/{vendor~entry.client-9tWQ_Ugw.js → vendor~entry.client-DDuH4--y.js} +1 -1
  168. package/build/assets/{vendor~entry.client-D6BtSOtn.js → vendor~entry.client-DQGrNspu.js} +1 -1
  169. package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~dhilvkxv-eGLBu60s.js +2 -0
  170. package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~iztiaf2o-rqo6vRFz.js +185 -0
  171. package/build/assets/{vendor~files-tab-B02k3xvx.js → vendor~files-tab-B-5fBohe.js} +1 -1
  172. package/build/assets/{vendor~home~conversation-panel~conversation-CYMF9JYB.js → vendor~index-home~home~conversation-panel~conversation-ChmYLVgz.js} +1 -1
  173. package/build/assets/vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-BD7v71DM.js +2 -0
  174. package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-BD0GaRGa.js → vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-BT05Osu4.js} +1 -1
  175. package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-D7EUmQ8Y.js → vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-DgzWSMRc.js} +1 -1
  176. package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-d8aETPbZ.js → vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-DqZatR3B.js} +1 -1
  177. package/build/assets/{vendor~launch-CHXA9cJu.js → vendor~launch-_Km3J77E.js} +1 -1
  178. package/build/assets/{vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~skills-set~ivvrgjsa-BlIZPCXX.js → vendor~module-D5a_AClf.js} +1 -1
  179. package/build/assets/{vendor~root-layout~conversation-panel~conversation-CpiTHpHl.js → vendor~root-layout~conversation-panel~conversation-8tIsyrPj.js} +1 -1
  180. package/build/assets/{vendor~root-layout~conversation-panel~conversation~shared-conversation-_TdZcNMD.js → vendor~root-layout~conversation-panel~conversation~shared-conversation-BrguKXCn.js} +1 -1
  181. package/build/assets/{vendor~root-layout~home~conversation-panel~conversation-Cn2jwSga.js → vendor~root-layout~index-home~home~conversation-panel~conversation-BTvhGHHG.js} +1 -1
  182. package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~shared-conversation~alert-banner~pl~rqjteh0a-CZM4hwUT.js → vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation~aler~gfu7qdtz-BOKQkbc6.js} +1 -1
  183. package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~launch~settings~settings-index~agen~enjl5xdm-B0EIDu4M.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~ftka0fnu-cFNmfAE6.js} +2 -2
  184. package/build/assets/{verification-settings-D576N2xa.js → verification-settings-CfkrXoSa.js} +1 -1
  185. package/build/assets/x-ZE4iplpF.js +1 -0
  186. package/build/index.html +4 -4
  187. package/build/locales/ar/openhands.json +9 -0
  188. package/build/locales/ca/openhands.json +9 -0
  189. package/build/locales/de/openhands.json +9 -0
  190. package/build/locales/en/openhands.json +9 -0
  191. package/build/locales/es/openhands.json +9 -0
  192. package/build/locales/fr/openhands.json +9 -0
  193. package/build/locales/it/openhands.json +9 -0
  194. package/build/locales/ja/openhands.json +9 -0
  195. package/build/locales/ko-KR/openhands.json +9 -0
  196. package/build/locales/no/openhands.json +9 -0
  197. package/build/locales/pt/openhands.json +9 -0
  198. package/build/locales/tr/openhands.json +9 -0
  199. package/build/locales/uk/openhands.json +9 -0
  200. package/build/locales/zh-CN/openhands.json +9 -0
  201. package/build/locales/zh-TW/openhands.json +9 -0
  202. package/config/defaults.json +5 -4
  203. package/dist/api/agent-server-adapter.cjs +3 -3
  204. package/dist/api/agent-server-adapter.cjs.map +1 -1
  205. package/dist/api/agent-server-adapter.d.ts +9 -1
  206. package/dist/api/agent-server-adapter.js +105 -102
  207. package/dist/api/agent-server-adapter.js.map +1 -1
  208. package/dist/api/agent-server-config.cjs +1 -1
  209. package/dist/api/agent-server-config.cjs.map +1 -1
  210. package/dist/api/agent-server-config.d.ts +3 -0
  211. package/dist/api/agent-server-config.js +45 -23
  212. package/dist/api/agent-server-config.js.map +1 -1
  213. package/dist/api/backend-registry/auth.cjs +1 -1
  214. package/dist/api/backend-registry/auth.cjs.map +1 -1
  215. package/dist/api/backend-registry/auth.js +1 -1
  216. package/dist/api/backend-registry/auth.js.map +1 -1
  217. package/dist/api/backend-registry/default-backend.cjs +1 -1
  218. package/dist/api/backend-registry/default-backend.cjs.map +1 -1
  219. package/dist/api/backend-registry/default-backend.d.ts +3 -0
  220. package/dist/api/backend-registry/default-backend.js +22 -10
  221. package/dist/api/backend-registry/default-backend.js.map +1 -1
  222. package/dist/api/backend-registry/storage.cjs +1 -1
  223. package/dist/api/backend-registry/storage.cjs.map +1 -1
  224. package/dist/api/backend-registry/storage.js +38 -33
  225. package/dist/api/backend-registry/storage.js.map +1 -1
  226. package/dist/api/backend-registry/types.d.ts +2 -0
  227. package/dist/api/canvas-ui-client-tool.cjs +38 -0
  228. package/dist/api/canvas-ui-client-tool.cjs.map +1 -0
  229. package/dist/api/canvas-ui-client-tool.d.ts +14 -0
  230. package/dist/api/canvas-ui-client-tool.js +47 -0
  231. package/dist/api/canvas-ui-client-tool.js.map +1 -0
  232. package/dist/api/client-source.cjs +2 -0
  233. package/dist/api/client-source.cjs.map +1 -0
  234. package/dist/api/client-source.d.ts +9 -0
  235. package/dist/api/client-source.js +10 -0
  236. package/dist/api/client-source.js.map +1 -0
  237. package/dist/api/cloud/client.cjs +2 -0
  238. package/dist/api/cloud/client.cjs.map +1 -0
  239. package/dist/api/cloud/client.d.ts +4 -0
  240. package/dist/api/cloud/client.js +38 -0
  241. package/dist/api/cloud/client.js.map +1 -0
  242. package/dist/api/cloud/conversation-service.api.cjs +1 -1
  243. package/dist/api/cloud/conversation-service.api.cjs.map +1 -1
  244. package/dist/api/cloud/conversation-service.api.js +35 -33
  245. package/dist/api/cloud/conversation-service.api.js.map +1 -1
  246. package/dist/api/cloud/organization-service.api.cjs +1 -1
  247. package/dist/api/cloud/organization-service.api.cjs.map +1 -1
  248. package/dist/api/cloud/organization-service.api.js +11 -10
  249. package/dist/api/cloud/organization-service.api.js.map +1 -1
  250. package/dist/api/cloud/proxy.cjs +1 -1
  251. package/dist/api/cloud/proxy.cjs.map +1 -1
  252. package/dist/api/cloud/proxy.d.ts +2 -40
  253. package/dist/api/cloud/proxy.js +14 -39
  254. package/dist/api/cloud/proxy.js.map +1 -1
  255. package/dist/api/conversation-metadata-store.cjs +1 -1
  256. package/dist/api/conversation-metadata-store.cjs.map +1 -1
  257. package/dist/api/conversation-metadata-store.d.ts +2 -9
  258. package/dist/api/conversation-metadata-store.js +13 -9
  259. package/dist/api/conversation-metadata-store.js.map +1 -1
  260. package/dist/api/conversation-service/agent-server-conversation-service.api.cjs +1 -1
  261. package/dist/api/conversation-service/agent-server-conversation-service.api.cjs.map +1 -1
  262. package/dist/api/conversation-service/agent-server-conversation-service.api.d.ts +2 -1
  263. package/dist/api/conversation-service/agent-server-conversation-service.api.js +98 -88
  264. package/dist/api/conversation-service/agent-server-conversation-service.api.js.map +1 -1
  265. package/dist/api/conversation-service/agent-server-conversation-service.types.d.ts +5 -0
  266. package/dist/api/device-flow-client.cjs +1 -1
  267. package/dist/api/device-flow-client.cjs.map +1 -1
  268. package/dist/api/device-flow-client.d.ts +4 -58
  269. package/dist/api/device-flow-client.js +8 -98
  270. package/dist/api/device-flow-client.js.map +1 -1
  271. package/dist/api/git-service/agent-server-git-service.api.cjs +1 -1
  272. package/dist/api/git-service/agent-server-git-service.api.cjs.map +1 -1
  273. package/dist/api/git-service/agent-server-git-service.api.d.ts +10 -2
  274. package/dist/api/git-service/agent-server-git-service.api.js +107 -40
  275. package/dist/api/git-service/agent-server-git-service.api.js.map +1 -1
  276. package/dist/api/open-hands.types.d.ts +11 -0
  277. package/dist/api/option-service/option-service.api.cjs +1 -1
  278. package/dist/api/option-service/option-service.api.cjs.map +1 -1
  279. package/dist/api/option-service/option-service.api.js +0 -1
  280. package/dist/api/option-service/option-service.api.js.map +1 -1
  281. package/dist/api/option-service/option.types.d.ts +0 -1
  282. package/dist/api/secrets-service.cjs +1 -1
  283. package/dist/api/secrets-service.cjs.map +1 -1
  284. package/dist/api/secrets-service.js +15 -14
  285. package/dist/api/secrets-service.js.map +1 -1
  286. package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.cjs +1 -1
  287. package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.cjs.map +1 -1
  288. package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.js +73 -64
  289. package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.js.map +1 -1
  290. package/dist/components/conversation-events/chat/event-content-helpers/get-observation-content.cjs +2 -2
  291. package/dist/components/conversation-events/chat/event-content-helpers/get-observation-content.cjs.map +1 -1
  292. package/dist/components/conversation-events/chat/event-content-helpers/get-observation-content.js +2 -0
  293. package/dist/components/conversation-events/chat/event-content-helpers/get-observation-content.js.map +1 -1
  294. package/dist/components/features/backends/backend-form-modal.cjs +1 -1
  295. package/dist/components/features/backends/backend-form-modal.cjs.map +1 -1
  296. package/dist/components/features/backends/backend-form-modal.d.ts +4 -2
  297. package/dist/components/features/backends/backend-form-modal.js +108 -101
  298. package/dist/components/features/backends/backend-form-modal.js.map +1 -1
  299. package/dist/components/features/backends/backend-row.cjs +1 -1
  300. package/dist/components/features/backends/backend-row.cjs.map +1 -1
  301. package/dist/components/features/backends/backend-row.js +2 -1
  302. package/dist/components/features/backends/backend-row.js.map +1 -1
  303. package/dist/components/features/backends/backend-selector.cjs +1 -1
  304. package/dist/components/features/backends/backend-selector.cjs.map +1 -1
  305. package/dist/components/features/backends/backend-selector.js +51 -51
  306. package/dist/components/features/backends/backend-selector.js.map +1 -1
  307. package/dist/components/features/backends/device-flow-auth.cjs +1 -1
  308. package/dist/components/features/backends/device-flow-auth.cjs.map +1 -1
  309. package/dist/components/features/backends/device-flow-auth.d.ts +4 -1
  310. package/dist/components/features/backends/device-flow-auth.js +38 -38
  311. package/dist/components/features/backends/device-flow-auth.js.map +1 -1
  312. package/dist/components/features/chat/chat-interface.cjs +2 -2
  313. package/dist/components/features/chat/chat-interface.cjs.map +1 -1
  314. package/dist/components/features/chat/chat-interface.js +173 -165
  315. package/dist/components/features/chat/chat-interface.js.map +1 -1
  316. package/dist/components/features/chat/components/chat-input-actions.cjs +1 -1
  317. package/dist/components/features/chat/components/chat-input-actions.cjs.map +1 -1
  318. package/dist/components/features/chat/components/chat-input-actions.d.ts +2 -1
  319. package/dist/components/features/chat/components/chat-input-actions.js +44 -43
  320. package/dist/components/features/chat/components/chat-input-actions.js.map +1 -1
  321. package/dist/components/features/chat/components/chat-input-container.cjs +1 -1
  322. package/dist/components/features/chat/components/chat-input-container.cjs.map +1 -1
  323. package/dist/components/features/chat/components/chat-input-container.d.ts +2 -1
  324. package/dist/components/features/chat/components/chat-input-container.js +20 -19
  325. package/dist/components/features/chat/components/chat-input-container.js.map +1 -1
  326. package/dist/components/features/chat/components/chat-input-profile-picker.cjs +1 -1
  327. package/dist/components/features/chat/components/chat-input-profile-picker.cjs.map +1 -1
  328. package/dist/components/features/chat/components/chat-input-profile-picker.js +44 -32
  329. package/dist/components/features/chat/components/chat-input-profile-picker.js.map +1 -1
  330. package/dist/components/features/chat/components/resolve-picker-kind.cjs +1 -1
  331. package/dist/components/features/chat/components/resolve-picker-kind.cjs.map +1 -1
  332. package/dist/components/features/chat/components/resolve-picker-kind.d.ts +10 -22
  333. package/dist/components/features/chat/components/resolve-picker-kind.js +6 -3
  334. package/dist/components/features/chat/components/resolve-picker-kind.js.map +1 -1
  335. package/dist/components/features/chat/custom-chat-input.cjs +1 -1
  336. package/dist/components/features/chat/custom-chat-input.cjs.map +1 -1
  337. package/dist/components/features/chat/custom-chat-input.d.ts +2 -1
  338. package/dist/components/features/chat/custom-chat-input.js +52 -51
  339. package/dist/components/features/chat/custom-chat-input.js.map +1 -1
  340. package/dist/components/features/chat/interactive-chat-box.cjs +1 -1
  341. package/dist/components/features/chat/interactive-chat-box.cjs.map +1 -1
  342. package/dist/components/features/chat/interactive-chat-box.d.ts +2 -1
  343. package/dist/components/features/chat/interactive-chat-box.js +9 -8
  344. package/dist/components/features/chat/interactive-chat-box.js.map +1 -1
  345. package/dist/components/features/diff-viewer/commit-list.cjs +2 -0
  346. package/dist/components/features/diff-viewer/commit-list.cjs.map +1 -0
  347. package/dist/components/features/diff-viewer/commit-list.d.ts +13 -0
  348. package/dist/components/features/diff-viewer/commit-list.js +27 -0
  349. package/dist/components/features/diff-viewer/commit-list.js.map +1 -0
  350. package/dist/components/features/diff-viewer/commit-row.cjs +2 -0
  351. package/dist/components/features/diff-viewer/commit-row.cjs.map +1 -0
  352. package/dist/components/features/diff-viewer/commit-row.d.ts +14 -0
  353. package/dist/components/features/diff-viewer/commit-row.js +59 -0
  354. package/dist/components/features/diff-viewer/commit-row.js.map +1 -0
  355. package/dist/components/features/diff-viewer/file-diff-viewer.cjs +1 -1
  356. package/dist/components/features/diff-viewer/file-diff-viewer.cjs.map +1 -1
  357. package/dist/components/features/diff-viewer/file-diff-viewer.d.ts +7 -1
  358. package/dist/components/features/diff-viewer/file-diff-viewer.js +40 -39
  359. package/dist/components/features/diff-viewer/file-diff-viewer.js.map +1 -1
  360. package/dist/components/features/plugins/plugin-detail-modal.d.ts +2 -1
  361. package/dist/components/providers/agent-server-ui-providers.cjs +1 -1
  362. package/dist/components/providers/agent-server-ui-providers.cjs.map +1 -1
  363. package/dist/components/providers/agent-server-ui-providers.d.ts +4 -2
  364. package/dist/components/providers/agent-server-ui-providers.js +9 -2
  365. package/dist/components/providers/agent-server-ui-providers.js.map +1 -1
  366. package/dist/components/providers/index.cjs +1 -1
  367. package/dist/components/providers/index.d.ts +1 -2
  368. package/dist/components/providers/index.js +0 -1
  369. package/dist/components/providers/telemetry-provider.cjs +2 -0
  370. package/dist/components/providers/telemetry-provider.cjs.map +1 -0
  371. package/dist/components/providers/telemetry-provider.d.ts +6 -0
  372. package/dist/components/providers/telemetry-provider.js +64 -0
  373. package/dist/components/providers/telemetry-provider.js.map +1 -0
  374. package/dist/components/shared/modals/settings/settings-modal.cjs +1 -1
  375. package/dist/components/shared/modals/settings/settings-modal.cjs.map +1 -1
  376. package/dist/components/shared/modals/settings/settings-modal.js +23 -22
  377. package/dist/components/shared/modals/settings/settings-modal.js.map +1 -1
  378. package/dist/config/defaults.cjs +1 -1
  379. package/dist/config/defaults.cjs.map +1 -1
  380. package/dist/config/defaults.js +5 -4
  381. package/dist/config/defaults.js.map +1 -1
  382. package/dist/constants/acp-providers.cjs.map +1 -1
  383. package/dist/constants/acp-providers.d.ts +1 -1
  384. package/dist/constants/acp-providers.js.map +1 -1
  385. package/dist/constants/canvas-ui.cjs +2 -0
  386. package/dist/constants/canvas-ui.cjs.map +1 -0
  387. package/dist/constants/canvas-ui.d.ts +8 -0
  388. package/dist/constants/canvas-ui.js +6 -0
  389. package/dist/constants/canvas-ui.js.map +1 -0
  390. package/dist/contexts/conversation-websocket-context.cjs +3 -3
  391. package/dist/contexts/conversation-websocket-context.cjs.map +1 -1
  392. package/dist/contexts/conversation-websocket-context.js +197 -204
  393. package/dist/contexts/conversation-websocket-context.js.map +1 -1
  394. package/dist/hooks/mutation/use-create-conversation.cjs +1 -1
  395. package/dist/hooks/mutation/use-create-conversation.cjs.map +1 -1
  396. package/dist/hooks/mutation/use-create-conversation.d.ts +2 -1
  397. package/dist/hooks/mutation/use-create-conversation.js +52 -52
  398. package/dist/hooks/mutation/use-create-conversation.js.map +1 -1
  399. package/dist/hooks/mutation/use-save-settings.cjs +1 -1
  400. package/dist/hooks/mutation/use-save-settings.cjs.map +1 -1
  401. package/dist/hooks/mutation/use-save-settings.d.ts +3 -1
  402. package/dist/hooks/mutation/use-save-settings.js +6 -5
  403. package/dist/hooks/mutation/use-save-settings.js.map +1 -1
  404. package/dist/hooks/query/query-keys.cjs +1 -1
  405. package/dist/hooks/query/query-keys.cjs.map +1 -1
  406. package/dist/hooks/query/query-keys.d.ts +2 -0
  407. package/dist/hooks/query/query-keys.js +4 -1
  408. package/dist/hooks/query/query-keys.js.map +1 -1
  409. package/dist/hooks/query/use-backends-health.cjs +1 -1
  410. package/dist/hooks/query/use-backends-health.cjs.map +1 -1
  411. package/dist/hooks/query/use-backends-health.js +50 -48
  412. package/dist/hooks/query/use-backends-health.js.map +1 -1
  413. package/dist/hooks/query/use-cloud-organizations.cjs +1 -1
  414. package/dist/hooks/query/use-cloud-organizations.cjs.map +1 -1
  415. package/dist/hooks/query/use-cloud-organizations.d.ts +1 -0
  416. package/dist/hooks/query/use-cloud-organizations.js +5 -2
  417. package/dist/hooks/query/use-cloud-organizations.js.map +1 -1
  418. package/dist/hooks/query/use-commit-changes.cjs +2 -0
  419. package/dist/hooks/query/use-commit-changes.cjs.map +1 -0
  420. package/dist/hooks/query/use-commit-changes.d.ts +5 -0
  421. package/dist/hooks/query/use-commit-changes.js +34 -0
  422. package/dist/hooks/query/use-commit-changes.js.map +1 -0
  423. package/dist/hooks/query/use-task-polling.cjs +1 -1
  424. package/dist/hooks/query/use-task-polling.cjs.map +1 -1
  425. package/dist/hooks/query/use-task-polling.d.ts +3 -2
  426. package/dist/hooks/query/use-task-polling.js +53 -40
  427. package/dist/hooks/query/use-task-polling.js.map +1 -1
  428. package/dist/hooks/query/use-unified-git-commits.cjs +2 -0
  429. package/dist/hooks/query/use-unified-git-commits.cjs.map +1 -0
  430. package/dist/hooks/query/use-unified-git-commits.d.ts +10 -0
  431. package/dist/hooks/query/use-unified-git-commits.js +41 -0
  432. package/dist/hooks/query/use-unified-git-commits.js.map +1 -0
  433. package/dist/hooks/query/use-unified-git-diff.cjs +1 -1
  434. package/dist/hooks/query/use-unified-git-diff.cjs.map +1 -1
  435. package/dist/hooks/query/use-unified-git-diff.d.ts +5 -0
  436. package/dist/hooks/query/use-unified-git-diff.js +11 -4
  437. package/dist/hooks/query/use-unified-git-diff.js.map +1 -1
  438. package/dist/hooks/use-acp-model-context.cjs +1 -1
  439. package/dist/hooks/use-acp-model-context.cjs.map +1 -1
  440. package/dist/hooks/use-acp-model-context.d.ts +4 -1
  441. package/dist/hooks/use-acp-model-context.js +9 -8
  442. package/dist/hooks/use-acp-model-context.js.map +1 -1
  443. package/dist/hooks/use-auto-refresh-files-on-edit.cjs +1 -1
  444. package/dist/hooks/use-auto-refresh-files-on-edit.cjs.map +1 -1
  445. package/dist/hooks/use-auto-refresh-files-on-edit.js +1 -1
  446. package/dist/hooks/use-auto-refresh-files-on-edit.js.map +1 -1
  447. package/dist/hooks/use-chat-input-model-state.cjs.map +1 -1
  448. package/dist/hooks/use-chat-input-model-state.d.ts +2 -1
  449. package/dist/hooks/use-chat-input-model-state.js.map +1 -1
  450. package/dist/hooks/use-chat-input-profile-state.cjs +1 -1
  451. package/dist/hooks/use-chat-input-profile-state.cjs.map +1 -1
  452. package/dist/hooks/use-chat-input-profile-state.d.ts +1 -10
  453. package/dist/hooks/use-chat-input-profile-state.js +42 -15
  454. package/dist/hooks/use-chat-input-profile-state.js.map +1 -1
  455. package/dist/hooks/use-device-flow.cjs +1 -1
  456. package/dist/hooks/use-device-flow.cjs.map +1 -1
  457. package/dist/hooks/use-device-flow.d.ts +4 -1
  458. package/dist/hooks/use-device-flow.js +42 -40
  459. package/dist/hooks/use-device-flow.js.map +1 -1
  460. package/dist/hooks/use-telemetry.cjs +1 -1
  461. package/dist/hooks/use-telemetry.cjs.map +1 -1
  462. package/dist/hooks/use-telemetry.d.ts +3 -3
  463. package/dist/hooks/use-telemetry.js +16 -22
  464. package/dist/hooks/use-telemetry.js.map +1 -1
  465. package/dist/hooks/use-tracking.cjs +1 -1
  466. package/dist/hooks/use-tracking.cjs.map +1 -1
  467. package/dist/hooks/use-tracking.d.ts +5 -5
  468. package/dist/hooks/use-tracking.js +37 -37
  469. package/dist/hooks/use-tracking.js.map +1 -1
  470. package/dist/i18n/declaration.cjs +1 -1
  471. package/dist/i18n/declaration.cjs.map +1 -1
  472. package/dist/i18n/declaration.d.ts +9 -0
  473. package/dist/i18n/declaration.js +1 -1
  474. package/dist/i18n/declaration.js.map +1 -1
  475. package/dist/i18n/index.cjs +1 -1
  476. package/dist/i18n/index.cjs.map +1 -1
  477. package/dist/i18n/index.js +19 -18
  478. package/dist/i18n/index.js.map +1 -1
  479. package/dist/i18n/translation.cjs +2 -2
  480. package/dist/i18n/translation.cjs.map +1 -1
  481. package/dist/i18n/translation.js +153 -0
  482. package/dist/i18n/translation.js.map +1 -1
  483. package/dist/index.cjs +1 -1
  484. package/dist/index.js +32 -32
  485. package/dist/lib/index.cjs +1 -1
  486. package/dist/lib/index.d.ts +2 -2
  487. package/dist/lib/index.js +1 -1
  488. package/dist/locales/ar/openhands.json +9 -0
  489. package/dist/locales/ca/openhands.json +9 -0
  490. package/dist/locales/de/openhands.json +9 -0
  491. package/dist/locales/en/openhands.json +9 -0
  492. package/dist/locales/es/openhands.json +9 -0
  493. package/dist/locales/fr/openhands.json +9 -0
  494. package/dist/locales/it/openhands.json +9 -0
  495. package/dist/locales/ja/openhands.json +9 -0
  496. package/dist/locales/ko-KR/openhands.json +9 -0
  497. package/dist/locales/no/openhands.json +9 -0
  498. package/dist/locales/pt/openhands.json +9 -0
  499. package/dist/locales/tr/openhands.json +9 -0
  500. package/dist/locales/uk/openhands.json +9 -0
  501. package/dist/locales/zh-CN/openhands.json +9 -0
  502. package/dist/locales/zh-TW/openhands.json +9 -0
  503. package/dist/node_modules/@openhands/typescript-client/dist/client/cloud-client.cjs +2 -0
  504. package/dist/node_modules/@openhands/typescript-client/dist/client/cloud-client.cjs.map +1 -0
  505. package/dist/node_modules/@openhands/typescript-client/dist/client/cloud-client.js +351 -0
  506. package/dist/node_modules/@openhands/typescript-client/dist/client/cloud-client.js.map +1 -0
  507. package/dist/node_modules/@openhands/typescript-client/dist/client/device-flow-client.cjs +2 -0
  508. package/dist/node_modules/@openhands/typescript-client/dist/client/device-flow-client.cjs.map +1 -0
  509. package/dist/node_modules/@openhands/typescript-client/dist/client/device-flow-client.js +106 -0
  510. package/dist/node_modules/@openhands/typescript-client/dist/client/device-flow-client.js.map +1 -0
  511. package/dist/node_modules/@openhands/typescript-client/dist/client/openhands-client.cjs +2 -0
  512. package/dist/node_modules/@openhands/typescript-client/dist/client/openhands-client.cjs.map +1 -0
  513. package/dist/node_modules/@openhands/typescript-client/dist/client/openhands-client.js +69 -0
  514. package/dist/node_modules/@openhands/typescript-client/dist/client/openhands-client.js.map +1 -0
  515. package/dist/node_modules/@openhands/typescript-client/dist/clients.cjs +1 -1
  516. package/dist/node_modules/@openhands/typescript-client/dist/clients.js +3 -0
  517. package/dist/node_modules/@openhands/typescript-client/dist/models/acp-providers.cjs +1 -1
  518. package/dist/node_modules/@openhands/typescript-client/dist/models/acp-providers.cjs.map +1 -1
  519. package/dist/node_modules/@openhands/typescript-client/dist/models/acp-providers.js +18 -2
  520. package/dist/node_modules/@openhands/typescript-client/dist/models/acp-providers.js.map +1 -1
  521. package/dist/node_modules/@openhands/typescript-client/dist/models/acp.cjs.map +1 -1
  522. package/dist/node_modules/@openhands/typescript-client/dist/models/acp.js.map +1 -1
  523. package/dist/node_modules/axios/index.cjs +1 -1
  524. package/dist/node_modules/axios/index.js +1 -1
  525. package/dist/package.cjs +1 -1
  526. package/dist/package.cjs.map +1 -1
  527. package/dist/package.js +3 -3
  528. package/dist/package.js.map +1 -1
  529. package/dist/routes/app-settings.cjs +1 -1
  530. package/dist/routes/app-settings.cjs.map +1 -1
  531. package/dist/routes/app-settings.js +59 -60
  532. package/dist/routes/app-settings.js.map +1 -1
  533. package/dist/routes/commits-tab.cjs +2 -0
  534. package/dist/routes/commits-tab.cjs.map +1 -0
  535. package/dist/routes/commits-tab.d.ts +8 -0
  536. package/dist/routes/commits-tab.js +45 -0
  537. package/dist/routes/commits-tab.js.map +1 -0
  538. package/dist/routes/files-tab.cjs +1 -1
  539. package/dist/routes/files-tab.cjs.map +1 -1
  540. package/dist/routes/files-tab.js +148 -127
  541. package/dist/routes/files-tab.js.map +1 -1
  542. package/dist/routes/llm-settings.cjs +1 -1
  543. package/dist/routes/llm-settings.cjs.map +1 -1
  544. package/dist/routes/llm-settings.js +4 -1
  545. package/dist/routes/llm-settings.js.map +1 -1
  546. package/dist/services/cloud-funnel-analytics.cjs +2 -0
  547. package/dist/services/cloud-funnel-analytics.cjs.map +1 -0
  548. package/dist/services/cloud-funnel-analytics.d.ts +4 -0
  549. package/dist/services/cloud-funnel-analytics.js +39 -0
  550. package/dist/services/cloud-funnel-analytics.js.map +1 -0
  551. package/dist/services/telemetry.cjs +1 -1
  552. package/dist/services/telemetry.cjs.map +1 -1
  553. package/dist/services/telemetry.d.ts +46 -9
  554. package/dist/services/telemetry.js +182 -71
  555. package/dist/services/telemetry.js.map +1 -1
  556. package/dist/themes/color-themes.cjs.map +1 -1
  557. package/dist/themes/color-themes.d.ts +3 -6
  558. package/dist/themes/color-themes.js.map +1 -1
  559. package/dist/types/agent-server/core/base/action.d.ts +5 -4
  560. package/dist/types/agent-server/core/base/base.d.ts +3 -2
  561. package/dist/types/agent-server/core/base/observation.d.ts +1 -1
  562. package/dist/types/agent-server/type-guards.cjs +1 -1
  563. package/dist/types/agent-server/type-guards.cjs.map +1 -1
  564. package/dist/types/agent-server/type-guards.d.ts +3 -5
  565. package/dist/types/agent-server/type-guards.js +2 -1
  566. package/dist/types/agent-server/type-guards.js.map +1 -1
  567. package/dist/types/automation.d.ts +5 -0
  568. package/dist/utils/api-error-message.d.ts +11 -0
  569. package/dist/utils/automation-timeout.d.ts +19 -0
  570. package/dist/utils/base-path.cjs +2 -0
  571. package/dist/utils/base-path.cjs.map +1 -0
  572. package/dist/utils/base-path.d.ts +2 -0
  573. package/dist/utils/base-path.js +23 -0
  574. package/dist/utils/base-path.js.map +1 -0
  575. package/dist/utils/error-handler.cjs +1 -1
  576. package/dist/utils/error-handler.cjs.map +1 -1
  577. package/dist/utils/error-handler.d.ts +1 -4
  578. package/dist/utils/error-handler.js +6 -7
  579. package/dist/utils/error-handler.js.map +1 -1
  580. package/dist/utils/map-provider.cjs +1 -1
  581. package/dist/utils/map-provider.cjs.map +1 -1
  582. package/dist/utils/map-provider.d.ts +1 -0
  583. package/dist/utils/map-provider.js +2 -1
  584. package/dist/utils/map-provider.js.map +1 -1
  585. package/package.json +3 -3
  586. package/scripts/check-sdk-version-sync.mjs +6 -6
  587. package/scripts/dev-safe.mjs +7 -8
  588. package/scripts/dev-static.mjs +3 -0
  589. package/scripts/dev-with-automation.mjs +3 -0
  590. package/scripts/docker-build.mjs +4 -0
  591. package/scripts/static-server.mjs +93 -7
  592. package/tools/canvas_ui_tool.py +14 -8
  593. package/build/assets/active-backend-context-hxq31W25.js +0 -1
  594. package/build/assets/agent-server-client-options-DVLRd9sw.js +0 -1
  595. package/build/assets/agent-server-conversation-service.api-CuSdr4Qb.js +0 -5
  596. package/build/assets/agent-settings-D_yOy8XB.js +0 -1
  597. package/build/assets/api-key-entry-screen-Dl0qVYi4.js +0 -1
  598. package/build/assets/app-settings-yVizGXox.js +0 -1
  599. package/build/assets/automation-detail-dvJfLs5u.js +0 -2
  600. package/build/assets/automation-export-BPcgLqPD.js +0 -2
  601. package/build/assets/automations-list-CUXogTe0.js +0 -1
  602. package/build/assets/backend-form-modal-CQJGmItq.js +0 -1
  603. package/build/assets/check-Bvi71siz.js +0 -1
  604. package/build/assets/condenser-settings-Ca8fYZ_Z.js +0 -1
  605. package/build/assets/conversation-9NBSRoR9.js +0 -1
  606. package/build/assets/conversation-BXg6Oti2.js +0 -89
  607. package/build/assets/conversation-panel-CZri9Rup.js +0 -1
  608. package/build/assets/conversation-service.api-DPBQvTKD.js +0 -1
  609. package/build/assets/declaration-gq8V5eTU.js +0 -1
  610. package/build/assets/files-tab-UVoray88.js +0 -1
  611. package/build/assets/git-provider-icon-o6hdnJUB.js +0 -1
  612. package/build/assets/handle-capture-consent-CPMXU29K.js +0 -1
  613. package/build/assets/home-D1IHvGTN.js +0 -1
  614. package/build/assets/index-redirect-CUUJiNki.js +0 -1
  615. package/build/assets/install-server-modal-BbuQaA2w.js +0 -1
  616. package/build/assets/lesson-plan-jC0HBoe6.js +0 -4
  617. package/build/assets/llm-not-configured-banner-DoARbcdL.js +0 -27
  618. package/build/assets/llm-settings-4JMLV8mq.js +0 -1
  619. package/build/assets/llm-settings-D91gMw3U.js +0 -1
  620. package/build/assets/llm-subscription-service-CKyaV24y.js +0 -1
  621. package/build/assets/loader-circle-BEykUKYG.js +0 -1
  622. package/build/assets/manage-backends-modal-DkWAMSle.js +0 -1
  623. package/build/assets/manifest-aa5c29f6.js +0 -1
  624. package/build/assets/model-selector-BfqpMkSJ.js +0 -1
  625. package/build/assets/mouse-pointer-click-PdEQPL6v.js +0 -1
  626. package/build/assets/onboarding-Bu-HN1ze.js +0 -1
  627. package/build/assets/onboarding-modal-CZgjs5Bx.js +0 -1
  628. package/build/assets/option-service.api-BrZ5q87N.js +0 -1
  629. package/build/assets/organization-service.api-Bk4pCGU1.js +0 -1
  630. package/build/assets/path-utils-CSmuZoix.js +0 -1
  631. package/build/assets/plugins-management-service-BRBLxvUl.js +0 -1
  632. package/build/assets/profiles-service.api-BMXQ9pZC.js +0 -1
  633. package/build/assets/providers-BpO967xS.js +0 -1
  634. package/build/assets/proxy-BgJLtxu7.js +0 -1
  635. package/build/assets/root-BM5WgQ4_.js +0 -2
  636. package/build/assets/root-V8fkplMy.css +0 -1
  637. package/build/assets/root-layout-BdoyoobY.js +0 -2
  638. package/build/assets/schema-field-BSHrUMme.js +0 -1
  639. package/build/assets/sdk-section-page-t82gsOqa.js +0 -1
  640. package/build/assets/search-4DHskuhE.js +0 -1
  641. package/build/assets/secrets-service-B2GqPV0N.js +0 -1
  642. package/build/assets/settings-DmPLkgq0.js +0 -1
  643. package/build/assets/settings-modal-CwrZKrTq.js +0 -1
  644. package/build/assets/settings-service.api-Ce-ub11I.js +0 -1
  645. package/build/assets/shared-conversation-BDREQPnE.js +0 -1
  646. package/build/assets/skills-plugins-2Y44YHbO.js +0 -1
  647. package/build/assets/use-acp-credential-form-MzZM6D7D.js +0 -1
  648. package/build/assets/use-agent-profiles-DwZxnwO5.js +0 -1
  649. package/build/assets/use-backends-health-CRHzuvxO.js +0 -1
  650. package/build/assets/use-cloud-current-user-id-utFreJ0i.js +0 -1
  651. package/build/assets/use-config-mJrtZHP1.js +0 -1
  652. package/build/assets/use-create-conversation-DdqsP78F.js +0 -1
  653. package/build/assets/use-is-authed-B6M0mcGL.js +0 -1
  654. package/build/assets/use-llm-profiles-RC-PkpBl.js +0 -1
  655. package/build/assets/use-plugins-marketplace-FHlbeQ4c.js +0 -1
  656. package/build/assets/use-runtime-is-ready-RKj2WmEh.js +0 -1
  657. package/build/assets/use-save-agent-profile-tvDP15mh.js +0 -1
  658. package/build/assets/use-save-settings-BGlSfuYn.js +0 -1
  659. package/build/assets/use-settings-CH5LzXD8.js +0 -1
  660. package/build/assets/use-settings-nav-items-Dwktv8wo.js +0 -16
  661. package/build/assets/use-skills-CSzSL6HG.js +0 -1
  662. package/build/assets/use-tracking-BIXzagSI.js +0 -1
  663. package/build/assets/vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~lf310vj7-CSVPGId3.js +0 -10
  664. package/build/assets/vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~nfpll1wp-BCpa95De.js +0 -177
  665. package/build/assets/vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~skills-set~jewnulst-C57fm7C-.js +0 -1
  666. package/build/assets/vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-CqXiHwjU.js +0 -2
  667. package/build/assets/x-Cb0WAtak.js +0 -1
  668. package/dist/components/providers/posthog-wrapper.cjs +0 -2
  669. package/dist/components/providers/posthog-wrapper.cjs.map +0 -1
  670. package/dist/components/providers/posthog-wrapper.d.ts +0 -4
  671. package/dist/components/providers/posthog-wrapper.js +0 -49
  672. package/dist/components/providers/posthog-wrapper.js.map +0 -1
  673. package/dist/node_modules/posthog-js/react/dist/esm/index.cjs +0 -2
  674. package/dist/node_modules/posthog-js/react/dist/esm/index.cjs.map +0 -1
  675. package/dist/node_modules/posthog-js/react/dist/esm/index.js +0 -113
  676. package/dist/node_modules/posthog-js/react/dist/esm/index.js.map +0 -1
  677. package/dist/utils/handle-capture-consent.cjs +0 -2
  678. package/dist/utils/handle-capture-consent.cjs.map +0 -1
  679. package/dist/utils/handle-capture-consent.d.ts +0 -7
  680. package/dist/utils/handle-capture-consent.js +0 -8
  681. package/dist/utils/handle-capture-consent.js.map +0 -1
  682. /package/build/assets/{__vite-browser-external-4xJsU2-u.js → __vite-browser-external-BQUj0sYu.js} +0 -0
  683. /package/build/assets/{agent-server-ui-style-scope-COnDHTm5.js → agent-server-ui-style-scope-qhnhZHBV.js} +0 -0
  684. /package/build/assets/{automation-BU8zu-FP.js → automation-LZB0MjdV.js} +0 -0
  685. /package/build/assets/{close-p3Op5lxI.js → close-DLFb5kfv.js} +0 -0
  686. /package/build/assets/{common-Dh7OqABE.js → common-CxbUL3nR.js} +0 -0
  687. /package/build/assets/{createLucideIcon-CVAsW2Yo.js → createLucideIcon-D4Tak8A1.js} +0 -0
  688. /package/build/assets/{folder-mMWFvaw0.js → folder-Bk311brm.js} +0 -0
  689. /package/build/assets/{get-language-from-path-CPNnuVhI.js → get-language-from-path-DBqBsCWH.js} +0 -0
  690. /package/build/assets/{git-status-mapper-BI8FyUVp.js → git-status-mapper-DnL9OC8_.js} +0 -0
  691. /package/build/assets/{iconBase-DaTRRUjy.js → iconBase-Dz51Zn5x.js} +0 -0
  692. /package/build/assets/{link-external-DfKQroKX.js → link-external-CaBmUEs_.js} +0 -0
  693. /package/build/assets/{search-BsjCEFNf.js → search-BgOCR7_c.js} +0 -0
  694. /package/build/assets/{settings-like-page-layout-classes-DENKlZpD.js → settings-like-page-layout-classes-Cdl6jOe5.js} +0 -0
  695. /package/build/assets/{skills-9cDZONKh.js → skills-EqzxYBvT.js} +0 -0
  696. /package/build/assets/{terminal-BuLtIrb9.js → terminal-Cgf___rK.js} +0 -0
  697. /package/build/assets/{u-check-circle-half-LiwZkuFe.js → u-check-circle-half-MsShT8Ec.js} +0 -0
  698. /package/build/assets/{u-edit-DJ90xc8Z.js → u-edit-DL5LgKon.js} +0 -0
  699. /package/build/assets/{use-breakpoint-B-O0lQ84.js → use-breakpoint-BP3lqLMx.js} +0 -0
  700. /package/build/assets/{use-click-outside-element-Bf4Omzot.js → use-click-outside-element-D9BYdANT.js} +0 -0
  701. /package/build/assets/{use-launch-skill-in-chat-BnoDgvAy.js → use-launch-skill-in-chat-DJWEfVc5.js} +0 -0
  702. /package/build/assets/{vendor~browser-Dqd33JyP.js → vendor~browser-By2MVv_N.js} +0 -0
  703. /package/build/assets/{vendor~conversation-panel~conversation~alert-banner-DHDkknt5.js → vendor~conversation-panel~conversation~alert-banner-CxfzCmkN.js} +0 -0
  704. /package/build/assets/{vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~extensions~epa72zsm-B4rXs7Zd.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~e0djk9ee-Cw6LUe8p.js} +0 -0
  705. /package/build/assets/{vendor~entry.client~root~root-layout~index-redirect~home~conversation-panel~conversation~la~byh8a1g4-XNPdpuO8.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~jkpzbynd-CkpBIhVe.js} +0 -0
  706. /package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-9UMeuPV6.js → vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-COhHANvV.js} +0 -0
  707. /package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-DTzw2x50.js → vendor~index-home~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-FghQ3Z1a.js} +0 -0
  708. /package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~launch~skills-settings~automations-~ki5qnp0d-rV6d1Iv_.js → vendor~root-layout~index-home~home~conversation-panel~conversation~launch~skills-settings~a~j2jlu22h-mC0v44WR.js} +0 -0
  709. /package/build/assets/{vendor~root-layout~home~mcp~automations-list~onboarding-modal-CXyYYvYh.js → vendor~root-layout~index-home~home~mcp~automations-list~onboarding-modal-C4-GDgiF.js} +0 -0
  710. /package/build/assets/{vendor~terminal-aeP3PnKf.js → vendor~terminal-CnKZILnC.js} +0 -0
@@ -72,103 +72,104 @@ var x = [
72
72
  }
73
73
  });
74
74
  };
75
- function T({ path: c, type: l }) {
76
- let { t: u } = e("openhands"), [d, f] = v.useState(!0), [p, T] = v.useState(400), [E, D] = v.useState("diff"), O = v.useRef(null), k = v.useRef(null), A = l === "A" || l === "U", j = l === "D", M = v.useMemo(() => {
75
+ function T({ path: c, type: l, commit: u }) {
76
+ let { t: d } = e("openhands"), [f, p] = v.useState(!0), [T, E] = v.useState(400), [D, O] = v.useState("diff"), k = v.useRef(null), A = v.useRef(null), j = l === "A" || l === "U", M = l === "D", N = v.useMemo(() => {
77
77
  if (l === "R") {
78
78
  let e = c.split(/\s+/).slice(1);
79
79
  return e[e.length - 1];
80
80
  }
81
81
  return c;
82
- }, [c, l]), { data: N, isLoading: P, isSuccess: F, isRefetching: I } = h({
83
- filePath: M,
82
+ }, [c, l]), { data: P, isLoading: F, isSuccess: I, isRefetching: L } = h({
83
+ filePath: N,
84
84
  type: l,
85
- enabled: !d
86
- }), L = v.useCallback(() => {
87
- if (!O.current) return;
88
- let e = O.current.getOriginalEditor(), t = O.current.getModifiedEditor();
89
- e && t && T(Math.max(e.getContentHeight(), t.getContentHeight()) + 20);
90
- }, []), R = v.useCallback(() => {
91
- k.current && T(k.current.getContentHeight() + 20);
92
- }, []), z = (e) => {
93
- O.current = e, L(), e.getOriginalEditor().onDidContentSizeChange(L), e.getModifiedEditor().onDidContentSizeChange(L);
94
- }, B = (e) => {
95
- k.current = e, R(), e.onDidContentSizeChange(R);
96
- }, V = (l === "U" ? C.A : C[l]) || "?", H = typeof V == "string" ? /* @__PURE__ */ y(i.Text, { children: V }) : v.createElement(V, { className: "w-5 h-5" }), U = P || I, W = a(M), G = W === "markdown", K = E === "old" ? N?.original ?? "" : N?.modified ?? "";
85
+ enabled: !f,
86
+ commit: u
87
+ }), R = v.useCallback(() => {
88
+ if (!k.current) return;
89
+ let e = k.current.getOriginalEditor(), t = k.current.getModifiedEditor();
90
+ e && t && E(Math.max(e.getContentHeight(), t.getContentHeight()) + 20);
91
+ }, []), z = v.useCallback(() => {
92
+ A.current && E(A.current.getContentHeight() + 20);
93
+ }, []), B = (e) => {
94
+ k.current = e, R(), e.getOriginalEditor().onDidContentSizeChange(R), e.getModifiedEditor().onDidContentSizeChange(R);
95
+ }, V = (e) => {
96
+ A.current = e, z(), e.onDidContentSizeChange(z);
97
+ }, H = (l === "U" ? C.A : C[l]) || "?", U = typeof H == "string" ? /* @__PURE__ */ y(i.Text, { children: H }) : v.createElement(H, { className: "w-5 h-5" }), W = F || L, G = a(N), K = G === "markdown", q = D === "old" ? P?.original ?? "" : P?.modified ?? "";
97
98
  return /* @__PURE__ */ b("div", {
98
99
  "data-testid": "file-diff-viewer-outer",
99
100
  className: "w-full flex flex-col",
100
101
  children: [
101
102
  /* @__PURE__ */ y("div", {
102
103
  className: "flex justify-between items-center px-3 py-2.5 border-b border-[var(--oh-border)] hover:cursor-pointer",
103
- onClick: () => f((e) => !e),
104
+ onClick: () => p((e) => !e),
104
105
  children: /* @__PURE__ */ b("span", {
105
106
  className: "text-sm w-full text-content flex items-center gap-2",
106
107
  children: [
107
- U ? /* @__PURE__ */ y(g, { className: "w-4 h-4" }) : H,
108
+ W ? /* @__PURE__ */ y(g, { className: "w-4 h-4" }) : U,
108
109
  /* @__PURE__ */ y("strong", {
109
110
  className: "w-full truncate font-medium",
110
- children: M
111
+ children: N
111
112
  }),
112
- !d && !j && /* @__PURE__ */ y("span", {
113
+ !f && !M && /* @__PURE__ */ y("span", {
113
114
  className: "flex items-center gap-0.5 shrink-0",
114
115
  onClick: (e) => e.stopPropagation(),
115
116
  children: x.map(({ mode: e, icon: t }) => /* @__PURE__ */ y("button", {
116
117
  "data-testid": `view-mode-${e}`,
117
118
  type: "button",
118
- "aria-pressed": E === e,
119
- onClick: () => D(e),
120
- className: n("p-1 rounded transition-colors cursor-pointer", E === e ? "bg-[var(--oh-interactive-hover)] text-white" : "text-[var(--oh-muted)] hover:bg-[var(--oh-interactive-hover)] hover:text-white"),
119
+ "aria-pressed": D === e,
120
+ onClick: () => O(e),
121
+ className: n("p-1 rounded transition-colors cursor-pointer", D === e ? "bg-[var(--oh-interactive-hover)] text-white" : "text-[var(--oh-muted)] hover:bg-[var(--oh-interactive-hover)] hover:text-white"),
121
122
  children: /* @__PURE__ */ y(t, { className: "w-4 h-4" })
122
123
  }, e))
123
124
  }),
124
125
  /* @__PURE__ */ y("button", {
125
126
  "data-testid": "collapse",
126
127
  type: "button",
127
- children: /* @__PURE__ */ y(m, { className: n("w-4 h-4 transition-transform", d && "transform rotate-180") })
128
+ children: /* @__PURE__ */ y(m, { className: n("w-4 h-4 transition-transform", f && "transform rotate-180") })
128
129
  })
129
130
  ]
130
131
  })
131
132
  }),
132
- !d && j && /* @__PURE__ */ y("div", {
133
+ !f && M && !u && /* @__PURE__ */ y("div", {
133
134
  "data-testid": "file-deleted-message",
134
135
  className: "w-full border-b border-[var(--oh-border)] p-4 bg-base text-[var(--oh-text-dim)] text-sm",
135
- children: u(t.DIFF_VIEWER$FILE_DELETED)
136
+ children: d(t.DIFF_VIEWER$FILE_DELETED)
136
137
  }),
137
- !d && !j && F && (E === "diff" ? /* @__PURE__ */ y(_, {
138
- height: p,
138
+ !f && (!M || !!u) && I && (D === "diff" ? /* @__PURE__ */ y(_, {
139
+ height: T,
139
140
  children: /* @__PURE__ */ y(s, {
140
141
  "data-testid": "file-diff-viewer",
141
142
  className: "w-full h-full",
142
- language: W,
143
- original: A ? "" : N?.original ?? "",
144
- modified: j ? "" : N?.modified ?? "",
143
+ language: G,
144
+ original: j ? "" : P?.original ?? "",
145
+ modified: M ? "" : P?.modified ?? "",
145
146
  theme: "custom-diff-theme",
146
- onMount: z,
147
+ onMount: B,
147
148
  beforeMount: w,
148
149
  options: {
149
150
  ...S,
150
- renderSideBySide: !A && !j,
151
+ renderSideBySide: !j && !M,
151
152
  hideUnchangedRegions: { enabled: !0 }
152
153
  }
153
154
  })
154
- }) : G ? /* @__PURE__ */ y("div", {
155
+ }) : K ? /* @__PURE__ */ y("div", {
155
156
  className: "w-full border-b border-[var(--oh-border)] overflow-auto p-4 bg-base prose prose-invert max-w-none",
156
157
  "data-testid": "markdown-preview",
157
158
  children: /* @__PURE__ */ y(r, {
158
- content: K,
159
+ content: q,
159
160
  includeStandard: !0,
160
161
  includeHeadings: !0
161
162
  })
162
163
  }) : /* @__PURE__ */ y(_, {
163
- height: p,
164
+ height: T,
164
165
  children: /* @__PURE__ */ y(o, {
165
166
  "data-testid": "file-single-viewer",
166
167
  className: "w-full h-full",
167
- language: W,
168
- value: K,
168
+ language: G,
169
+ value: q,
169
170
  theme: "custom-diff-theme",
170
171
  beforeMount: w,
171
- onMount: B,
172
+ onMount: V,
172
173
  options: S
173
174
  })
174
175
  }))
@@ -1 +1 @@
1
- {"version":3,"file":"file-diff-viewer.js","names":[],"sources":["../../../../src/components/features/diff-viewer/file-diff-viewer.tsx"],"sourcesContent":["import { DiffEditor, Editor, Monaco } from \"@monaco-editor/react\";\nimport React from \"react\";\nimport { editor as editor_t } from \"monaco-editor\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n LuFileDiff,\n LuFileMinus,\n LuFilePlus,\n LuHistory,\n LuGitCompareArrows,\n LuFileCheck,\n} from \"react-icons/lu\";\nimport { IconType } from \"react-icons/lib\";\nimport { GitChangeStatus } from \"#/api/open-hands.types\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { getLanguageFromPath } from \"#/utils/get-language-from-path\";\nimport { cn } from \"#/utils/utils\";\nimport ChevronUp from \"#/icons/chveron-up.svg?react\";\nimport { useUnifiedGitDiff } from \"#/hooks/query/use-unified-git-diff\";\nimport { MarkdownRenderer } from \"#/components/features/markdown/markdown-renderer\";\nimport { Typography } from \"#/ui/typography\";\nimport { LoadingSpinner } from \"./loading-spinner\";\nimport { EditorContainer } from \"./editor-container\";\n\ntype ViewMode = \"diff\" | \"old\" | \"new\";\n\nconst VIEW_MODES: { mode: ViewMode; icon: IconType }[] = [\n { mode: \"old\", icon: LuHistory },\n { mode: \"diff\", icon: LuGitCompareArrows },\n { mode: \"new\", icon: LuFileCheck },\n];\n\nconst SHARED_EDITOR_OPTIONS: editor_t.IEditorOptions = {\n renderValidationDecorations: \"off\",\n readOnly: true,\n scrollBeyondLastLine: false,\n minimap: { enabled: false },\n automaticLayout: true,\n scrollbar: { alwaysConsumeMouseWheel: false },\n};\n\nconst STATUS_MAP: Record<GitChangeStatus, string | IconType> = {\n A: LuFilePlus,\n D: LuFileMinus,\n M: LuFileDiff,\n R: \"Renamed\",\n U: \"Untracked\",\n};\n\nconst beforeMount = (monaco: Monaco) => {\n monaco.editor.defineTheme(\"custom-diff-theme\", {\n base: \"vs-dark\",\n inherit: true,\n rules: [\n { token: \"comment\", foreground: \"6a9955\" },\n { token: \"keyword\", foreground: \"569cd6\" },\n { token: \"string\", foreground: \"ce9178\" },\n { token: \"number\", foreground: \"b5cea8\" },\n ],\n colors: {\n \"diffEditor.insertedTextBackground\": \"#014b01AA\",\n \"diffEditor.removedTextBackground\": \"#750000AA\",\n \"diffEditor.insertedLineBackground\": \"#003f00AA\",\n \"diffEditor.removedLineBackground\": \"#5a0000AA\",\n \"diffEditor.border\": \"var(--oh-border-subtle)\",\n \"editorUnnecessaryCode.border\": \"#00000000\",\n \"editorUnnecessaryCode.opacity\": \"rgba(0, 0, 0, 0.467)\",\n },\n });\n};\n\nexport interface FileDiffViewerProps {\n path: string;\n type: GitChangeStatus;\n}\n\nexport function FileDiffViewer({ path, type }: FileDiffViewerProps) {\n const { t } = useTranslation(\"openhands\");\n const [isCollapsed, setIsCollapsed] = React.useState(true);\n const [editorHeight, setEditorHeight] = React.useState(400);\n const [viewMode, setViewMode] = React.useState<ViewMode>(\"diff\");\n const diffEditorRef = React.useRef<editor_t.IStandaloneDiffEditor>(null);\n const singleEditorRef = React.useRef<editor_t.IStandaloneCodeEditor>(null);\n\n const isAdded = type === \"A\" || type === \"U\";\n const isDeleted = type === \"D\";\n\n const filePath = React.useMemo(() => {\n if (type === \"R\") {\n const parts = path.split(/\\s+/).slice(1);\n return parts[parts.length - 1];\n }\n return path;\n }, [path, type]);\n\n const {\n data: diff,\n isLoading,\n isSuccess,\n isRefetching,\n } = useUnifiedGitDiff({\n filePath,\n type,\n enabled: !isCollapsed,\n });\n\n const updateEditorHeight = React.useCallback(() => {\n if (!diffEditorRef.current) return;\n const originalEditor = diffEditorRef.current.getOriginalEditor();\n const modifiedEditor = diffEditorRef.current.getModifiedEditor();\n if (originalEditor && modifiedEditor) {\n setEditorHeight(\n Math.max(\n originalEditor.getContentHeight(),\n modifiedEditor.getContentHeight(),\n ) + 20,\n );\n }\n }, []);\n\n const updateSingleEditorHeight = React.useCallback(() => {\n if (singleEditorRef.current) {\n setEditorHeight(singleEditorRef.current.getContentHeight() + 20);\n }\n }, []);\n\n const handleDiffEditorMount = (editor: editor_t.IStandaloneDiffEditor) => {\n diffEditorRef.current = editor;\n updateEditorHeight();\n editor.getOriginalEditor().onDidContentSizeChange(updateEditorHeight);\n editor.getModifiedEditor().onDidContentSizeChange(updateEditorHeight);\n };\n\n const handleSingleEditorMount = (editor: editor_t.IStandaloneCodeEditor) => {\n singleEditorRef.current = editor;\n updateSingleEditorHeight();\n editor.onDidContentSizeChange(updateSingleEditorHeight);\n };\n\n const status = (type === \"U\" ? STATUS_MAP.A : STATUS_MAP[type]) || \"?\";\n const statusIcon =\n typeof status === \"string\" ? (\n <Typography.Text>{status}</Typography.Text>\n ) : (\n React.createElement(status, { className: \"w-5 h-5\" })\n );\n\n const isFetchingData = isLoading || isRefetching;\n const language = getLanguageFromPath(filePath);\n const isMarkdownFile = language === \"markdown\";\n const singleViewContent =\n viewMode === \"old\" ? (diff?.original ?? \"\") : (diff?.modified ?? \"\");\n\n const renderContent = () => {\n if (viewMode === \"diff\") {\n return (\n <EditorContainer height={editorHeight}>\n <DiffEditor\n data-testid=\"file-diff-viewer\"\n className=\"w-full h-full\"\n language={language}\n original={isAdded ? \"\" : (diff?.original ?? \"\")}\n modified={isDeleted ? \"\" : (diff?.modified ?? \"\")}\n theme=\"custom-diff-theme\"\n onMount={handleDiffEditorMount}\n beforeMount={beforeMount}\n options={{\n ...SHARED_EDITOR_OPTIONS,\n renderSideBySide: !isAdded && !isDeleted,\n hideUnchangedRegions: { enabled: true },\n }}\n />\n </EditorContainer>\n );\n }\n\n if (isMarkdownFile) {\n return (\n <div\n className=\"w-full border-b border-[var(--oh-border)] overflow-auto p-4 bg-base prose prose-invert max-w-none\"\n data-testid=\"markdown-preview\"\n >\n <MarkdownRenderer\n content={singleViewContent}\n includeStandard\n includeHeadings\n />\n </div>\n );\n }\n\n return (\n <EditorContainer height={editorHeight}>\n <Editor\n data-testid=\"file-single-viewer\"\n className=\"w-full h-full\"\n language={language}\n value={singleViewContent}\n theme=\"custom-diff-theme\"\n beforeMount={beforeMount}\n onMount={handleSingleEditorMount}\n options={SHARED_EDITOR_OPTIONS}\n />\n </EditorContainer>\n );\n };\n\n return (\n <div data-testid=\"file-diff-viewer-outer\" className=\"w-full flex flex-col\">\n <div\n className=\"flex justify-between items-center px-3 py-2.5 border-b border-[var(--oh-border)] hover:cursor-pointer\"\n onClick={() => setIsCollapsed((prev) => !prev)}\n >\n <span className=\"text-sm w-full text-content flex items-center gap-2\">\n {isFetchingData ? <LoadingSpinner className=\"w-4 h-4\" /> : statusIcon}\n <strong className=\"w-full truncate font-medium\">{filePath}</strong>\n {!isCollapsed && !isDeleted && (\n <span\n className=\"flex items-center gap-0.5 shrink-0\"\n onClick={(e) => e.stopPropagation()}\n >\n {VIEW_MODES.map(({ mode, icon: Icon }) => (\n <button\n key={mode}\n data-testid={`view-mode-${mode}`}\n type=\"button\"\n aria-pressed={viewMode === mode}\n onClick={() => setViewMode(mode)}\n className={cn(\n \"p-1 rounded transition-colors cursor-pointer\",\n viewMode === mode\n ? \"bg-[var(--oh-interactive-hover)] text-white\"\n : \"text-[var(--oh-muted)] hover:bg-[var(--oh-interactive-hover)] hover:text-white\",\n )}\n >\n <Icon className=\"w-4 h-4\" />\n </button>\n ))}\n </span>\n )}\n <button data-testid=\"collapse\" type=\"button\">\n <ChevronUp\n className={cn(\n \"w-4 h-4 transition-transform\",\n isCollapsed && \"transform rotate-180\",\n )}\n />\n </button>\n </span>\n </div>\n\n {!isCollapsed && isDeleted && (\n <div\n data-testid=\"file-deleted-message\"\n className=\"w-full border-b border-[var(--oh-border)] p-4 bg-base text-[var(--oh-text-dim)] text-sm\"\n >\n {t(I18nKey.DIFF_VIEWER$FILE_DELETED)}\n </div>\n )}\n\n {!isCollapsed && !isDeleted && isSuccess && renderContent()}\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"file-diff-viewer.js","names":[],"sources":["../../../../src/components/features/diff-viewer/file-diff-viewer.tsx"],"sourcesContent":["import { DiffEditor, Editor, Monaco } from \"@monaco-editor/react\";\nimport React from \"react\";\nimport { editor as editor_t } from \"monaco-editor\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n LuFileDiff,\n LuFileMinus,\n LuFilePlus,\n LuHistory,\n LuGitCompareArrows,\n LuFileCheck,\n} from \"react-icons/lu\";\nimport { IconType } from \"react-icons/lib\";\nimport { GitChangeStatus } from \"#/api/open-hands.types\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { getLanguageFromPath } from \"#/utils/get-language-from-path\";\nimport { cn } from \"#/utils/utils\";\nimport ChevronUp from \"#/icons/chveron-up.svg?react\";\nimport { useUnifiedGitDiff } from \"#/hooks/query/use-unified-git-diff\";\nimport { MarkdownRenderer } from \"#/components/features/markdown/markdown-renderer\";\nimport { Typography } from \"#/ui/typography\";\nimport { LoadingSpinner } from \"./loading-spinner\";\nimport { EditorContainer } from \"./editor-container\";\n\ntype ViewMode = \"diff\" | \"old\" | \"new\";\n\nconst VIEW_MODES: { mode: ViewMode; icon: IconType }[] = [\n { mode: \"old\", icon: LuHistory },\n { mode: \"diff\", icon: LuGitCompareArrows },\n { mode: \"new\", icon: LuFileCheck },\n];\n\nconst SHARED_EDITOR_OPTIONS: editor_t.IEditorOptions = {\n renderValidationDecorations: \"off\",\n readOnly: true,\n scrollBeyondLastLine: false,\n minimap: { enabled: false },\n automaticLayout: true,\n scrollbar: { alwaysConsumeMouseWheel: false },\n};\n\nconst STATUS_MAP: Record<GitChangeStatus, string | IconType> = {\n A: LuFilePlus,\n D: LuFileMinus,\n M: LuFileDiff,\n R: \"Renamed\",\n U: \"Untracked\",\n};\n\nconst beforeMount = (monaco: Monaco) => {\n monaco.editor.defineTheme(\"custom-diff-theme\", {\n base: \"vs-dark\",\n inherit: true,\n rules: [\n { token: \"comment\", foreground: \"6a9955\" },\n { token: \"keyword\", foreground: \"569cd6\" },\n { token: \"string\", foreground: \"ce9178\" },\n { token: \"number\", foreground: \"b5cea8\" },\n ],\n colors: {\n \"diffEditor.insertedTextBackground\": \"#014b01AA\",\n \"diffEditor.removedTextBackground\": \"#750000AA\",\n \"diffEditor.insertedLineBackground\": \"#003f00AA\",\n \"diffEditor.removedLineBackground\": \"#5a0000AA\",\n \"diffEditor.border\": \"var(--oh-border-subtle)\",\n \"editorUnnecessaryCode.border\": \"#00000000\",\n \"editorUnnecessaryCode.opacity\": \"rgba(0, 0, 0, 0.467)\",\n },\n });\n};\n\nexport interface FileDiffViewerProps {\n path: string;\n type: GitChangeStatus;\n /**\n * When set, show the file's diff as changed by this commit instead of\n * the working-tree-vs-base diff. Deleted files render their content in\n * commit mode (both sides come from git objects).\n */\n commit?: string;\n}\n\nexport function FileDiffViewer({ path, type, commit }: FileDiffViewerProps) {\n const { t } = useTranslation(\"openhands\");\n const [isCollapsed, setIsCollapsed] = React.useState(true);\n const [editorHeight, setEditorHeight] = React.useState(400);\n const [viewMode, setViewMode] = React.useState<ViewMode>(\"diff\");\n const diffEditorRef = React.useRef<editor_t.IStandaloneDiffEditor>(null);\n const singleEditorRef = React.useRef<editor_t.IStandaloneCodeEditor>(null);\n\n const isAdded = type === \"A\" || type === \"U\";\n const isDeleted = type === \"D\";\n\n const filePath = React.useMemo(() => {\n if (type === \"R\") {\n const parts = path.split(/\\s+/).slice(1);\n return parts[parts.length - 1];\n }\n return path;\n }, [path, type]);\n\n const {\n data: diff,\n isLoading,\n isSuccess,\n isRefetching,\n } = useUnifiedGitDiff({\n filePath,\n type,\n enabled: !isCollapsed,\n commit,\n });\n\n const updateEditorHeight = React.useCallback(() => {\n if (!diffEditorRef.current) return;\n const originalEditor = diffEditorRef.current.getOriginalEditor();\n const modifiedEditor = diffEditorRef.current.getModifiedEditor();\n if (originalEditor && modifiedEditor) {\n setEditorHeight(\n Math.max(\n originalEditor.getContentHeight(),\n modifiedEditor.getContentHeight(),\n ) + 20,\n );\n }\n }, []);\n\n const updateSingleEditorHeight = React.useCallback(() => {\n if (singleEditorRef.current) {\n setEditorHeight(singleEditorRef.current.getContentHeight() + 20);\n }\n }, []);\n\n const handleDiffEditorMount = (editor: editor_t.IStandaloneDiffEditor) => {\n diffEditorRef.current = editor;\n updateEditorHeight();\n editor.getOriginalEditor().onDidContentSizeChange(updateEditorHeight);\n editor.getModifiedEditor().onDidContentSizeChange(updateEditorHeight);\n };\n\n const handleSingleEditorMount = (editor: editor_t.IStandaloneCodeEditor) => {\n singleEditorRef.current = editor;\n updateSingleEditorHeight();\n editor.onDidContentSizeChange(updateSingleEditorHeight);\n };\n\n const status = (type === \"U\" ? STATUS_MAP.A : STATUS_MAP[type]) || \"?\";\n const statusIcon =\n typeof status === \"string\" ? (\n <Typography.Text>{status}</Typography.Text>\n ) : (\n React.createElement(status, { className: \"w-5 h-5\" })\n );\n\n const isFetchingData = isLoading || isRefetching;\n const language = getLanguageFromPath(filePath);\n const isMarkdownFile = language === \"markdown\";\n const singleViewContent =\n viewMode === \"old\" ? (diff?.original ?? \"\") : (diff?.modified ?? \"\");\n\n const renderContent = () => {\n if (viewMode === \"diff\") {\n return (\n <EditorContainer height={editorHeight}>\n <DiffEditor\n data-testid=\"file-diff-viewer\"\n className=\"w-full h-full\"\n language={language}\n original={isAdded ? \"\" : (diff?.original ?? \"\")}\n modified={isDeleted ? \"\" : (diff?.modified ?? \"\")}\n theme=\"custom-diff-theme\"\n onMount={handleDiffEditorMount}\n beforeMount={beforeMount}\n options={{\n ...SHARED_EDITOR_OPTIONS,\n renderSideBySide: !isAdded && !isDeleted,\n hideUnchangedRegions: { enabled: true },\n }}\n />\n </EditorContainer>\n );\n }\n\n if (isMarkdownFile) {\n return (\n <div\n className=\"w-full border-b border-[var(--oh-border)] overflow-auto p-4 bg-base prose prose-invert max-w-none\"\n data-testid=\"markdown-preview\"\n >\n <MarkdownRenderer\n content={singleViewContent}\n includeStandard\n includeHeadings\n />\n </div>\n );\n }\n\n return (\n <EditorContainer height={editorHeight}>\n <Editor\n data-testid=\"file-single-viewer\"\n className=\"w-full h-full\"\n language={language}\n value={singleViewContent}\n theme=\"custom-diff-theme\"\n beforeMount={beforeMount}\n onMount={handleSingleEditorMount}\n options={SHARED_EDITOR_OPTIONS}\n />\n </EditorContainer>\n );\n };\n\n return (\n <div data-testid=\"file-diff-viewer-outer\" className=\"w-full flex flex-col\">\n <div\n className=\"flex justify-between items-center px-3 py-2.5 border-b border-[var(--oh-border)] hover:cursor-pointer\"\n onClick={() => setIsCollapsed((prev) => !prev)}\n >\n <span className=\"text-sm w-full text-content flex items-center gap-2\">\n {isFetchingData ? <LoadingSpinner className=\"w-4 h-4\" /> : statusIcon}\n <strong className=\"w-full truncate font-medium\">{filePath}</strong>\n {!isCollapsed && !isDeleted && (\n <span\n className=\"flex items-center gap-0.5 shrink-0\"\n onClick={(e) => e.stopPropagation()}\n >\n {VIEW_MODES.map(({ mode, icon: Icon }) => (\n <button\n key={mode}\n data-testid={`view-mode-${mode}`}\n type=\"button\"\n aria-pressed={viewMode === mode}\n onClick={() => setViewMode(mode)}\n className={cn(\n \"p-1 rounded transition-colors cursor-pointer\",\n viewMode === mode\n ? \"bg-[var(--oh-interactive-hover)] text-white\"\n : \"text-[var(--oh-muted)] hover:bg-[var(--oh-interactive-hover)] hover:text-white\",\n )}\n >\n <Icon className=\"w-4 h-4\" />\n </button>\n ))}\n </span>\n )}\n <button data-testid=\"collapse\" type=\"button\">\n <ChevronUp\n className={cn(\n \"w-4 h-4 transition-transform\",\n isCollapsed && \"transform rotate-180\",\n )}\n />\n </button>\n </span>\n </div>\n\n {!isCollapsed && isDeleted && !commit && (\n <div\n data-testid=\"file-deleted-message\"\n className=\"w-full border-b border-[var(--oh-border)] p-4 bg-base text-[var(--oh-text-dim)] text-sm\"\n >\n {t(I18nKey.DIFF_VIEWER$FILE_DELETED)}\n </div>\n )}\n\n {!isCollapsed && (!isDeleted || !!commit) && isSuccess && renderContent()}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -8,6 +8,7 @@ interface PluginDetailModalProps {
8
8
  onUninstall: () => void;
9
9
  onRefresh: () => void;
10
10
  onClose: () => void;
11
+ onStartConversation?: () => void;
11
12
  }
12
- export declare function PluginDetailModal({ plugin, isBusy, isDisabled, onToggle, onInstall, onUninstall, onRefresh, onClose, }: PluginDetailModalProps): import("react/jsx-runtime").JSX.Element;
13
+ export declare function PluginDetailModal({ plugin, isBusy, isDisabled, onToggle, onInstall, onUninstall, onRefresh, onClose, onStartConversation, }: PluginDetailModalProps): import("react/jsx-runtime").JSX.Element;
13
14
  export {};
@@ -1,2 +1,2 @@
1
- const e=require(`../../_virtual/_rolldown/runtime.cjs`),t=require(`../../node_modules/react-i18next/dist/es/I18nextProvider.cjs`),n=require(`../../node_modules/@tanstack/react-query/build/modern/QueryClientProvider.cjs`),r=require(`../../i18n/index.cjs`),i=require(`../../query-client-config.cjs`),a=require(`../../contexts/active-backend-context.cjs`),o=require(`./posthog-wrapper.cjs`),s=require(`./agent-server-ui-root.cjs`);let c=require(`react`);c=e.__toESM(c,1);let l=require(`react/jsx-runtime`);var u={provider:`posthog`};function d({children:e,queryClient:u,analytics:d,i18n:f,className:p,contentClassName:m,style:h,styleOverrides:g,theme:_,withStyleRoot:v=!0}){let y=c.default.useMemo(()=>u??i.getDefaultQueryClient(),[u]),b=c.default.useMemo(()=>f??r.getDefaultI18n(),[f]),x=c.default.useRef(null);x.current||={queryClient:i.getQueryClient(),i18n:r.getI18n()},i.setQueryClient(y),r.setI18n(b),c.default.useEffect(()=>()=>{x.current&&(i.setQueryClient(x.current.queryClient),r.setI18n(x.current.i18n))},[]);let S=d&&d.provider===`posthog`?(0,l.jsx)(o.PostHogWrapper,{children:e}):e;return(0,l.jsx)(t.I18nextProvider,{i18n:b,defaultNS:r.OPENHANDS_I18N_NAMESPACE,children:(0,l.jsx)(n.QueryClientProvider,{client:y,children:(0,l.jsx)(a.ActiveBackendProvider,{children:v?(0,l.jsx)(s.AgentServerUIRoot,{className:p,contentClassName:m,style:h,styleOverrides:g,theme:_,children:S}):S})})})}exports.AgentServerUIProviders=d,exports.DEFAULT_AGENT_SERVER_ANALYTICS=u;
1
+ const e=require(`../../_virtual/_rolldown/runtime.cjs`),t=require(`../../node_modules/react-i18next/dist/es/I18nextProvider.cjs`),n=require(`../../node_modules/@tanstack/react-query/build/modern/QueryClientProvider.cjs`),r=require(`../../i18n/index.cjs`),i=require(`../../query-client-config.cjs`),a=require(`../../contexts/active-backend-context.cjs`),o=require(`./telemetry-provider.cjs`),s=require(`./agent-server-ui-root.cjs`);let c=require(`react`);c=e.__toESM(c,1);let l=require(`react/jsx-runtime`);var u={provider:`posthog`};function d({children:e,queryClient:u,analytics:d,i18n:f,className:p,contentClassName:m,style:h,styleOverrides:g,theme:_,withStyleRoot:v=!0}){let y=c.default.useMemo(()=>u??i.getDefaultQueryClient(),[u]),b=c.default.useMemo(()=>f??r.getDefaultI18n(),[f]),x=c.default.useRef(null);x.current||={queryClient:i.getQueryClient(),i18n:r.getI18n()},i.setQueryClient(y),r.setI18n(b),c.default.useEffect(()=>()=>{x.current&&(i.setQueryClient(x.current.queryClient),r.setI18n(x.current.i18n))},[]);let S=(0,l.jsx)(o.TelemetryProvider,{config:d&&d.provider===`posthog`?{apiKey:d.apiKey,apiHost:d.apiHost,uiHost:d.uiHost}:!1,children:e});return(0,l.jsx)(t.I18nextProvider,{i18n:b,defaultNS:r.OPENHANDS_I18N_NAMESPACE,children:(0,l.jsx)(n.QueryClientProvider,{client:y,children:(0,l.jsx)(a.ActiveBackendProvider,{children:v?(0,l.jsx)(s.AgentServerUIRoot,{className:p,contentClassName:m,style:h,styleOverrides:g,theme:_,children:S}):S})})})}exports.AgentServerUIProviders=d,exports.DEFAULT_AGENT_SERVER_ANALYTICS=u;
2
2
  //# sourceMappingURL=agent-server-ui-providers.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"agent-server-ui-providers.cjs","names":[],"sources":["../../../src/components/providers/agent-server-ui-providers.tsx"],"sourcesContent":["import React from \"react\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport { I18nextProvider } from \"react-i18next\";\nimport { type i18n as I18nInstance } from \"i18next\";\nimport {\n getDefaultQueryClient,\n getQueryClient,\n setQueryClient,\n} from \"#/query-client-config\";\nimport {\n OPENHANDS_I18N_NAMESPACE,\n getDefaultI18n,\n getI18n,\n setI18n,\n} from \"#/i18n\";\nimport { ActiveBackendProvider } from \"#/contexts/active-backend-context\";\nimport { PostHogWrapper } from \"./posthog-wrapper\";\nimport {\n AgentServerUIRoot,\n type AgentServerUIRootProps,\n} from \"./agent-server-ui-root\";\n\nexport type AgentServerUIAnalyticsConfig =\n | {\n provider: \"posthog\";\n }\n | false\n | null;\n\nexport const DEFAULT_AGENT_SERVER_ANALYTICS: AgentServerUIAnalyticsConfig = {\n provider: \"posthog\",\n};\n\nexport interface AgentServerUIProvidersProps extends Pick<\n AgentServerUIRootProps,\n \"className\" | \"contentClassName\" | \"style\" | \"styleOverrides\" | \"theme\"\n> {\n children: React.ReactNode;\n queryClient?: QueryClient;\n analytics?: AgentServerUIAnalyticsConfig;\n i18n?: I18nInstance;\n withStyleRoot?: boolean;\n}\n\nexport function AgentServerUIProviders({\n children,\n queryClient,\n analytics,\n i18n,\n className,\n contentClassName,\n style,\n styleOverrides,\n theme,\n withStyleRoot = true,\n}: AgentServerUIProvidersProps) {\n const resolvedQueryClient = React.useMemo(\n () => queryClient ?? getDefaultQueryClient(),\n [queryClient],\n );\n const resolvedI18n = React.useMemo(() => i18n ?? getDefaultI18n(), [i18n]);\n const previousProvidersRef = React.useRef<{\n queryClient: QueryClient;\n i18n: I18nInstance;\n } | null>(null);\n\n if (!previousProvidersRef.current) {\n previousProvidersRef.current = {\n queryClient: getQueryClient(),\n i18n: getI18n(),\n };\n }\n\n setQueryClient(resolvedQueryClient);\n setI18n(resolvedI18n);\n\n React.useEffect(\n () => () => {\n if (previousProvidersRef.current) {\n setQueryClient(previousProvidersRef.current.queryClient);\n setI18n(previousProvidersRef.current.i18n);\n }\n },\n [],\n );\n\n const content =\n analytics && analytics.provider === \"posthog\" ? (\n <PostHogWrapper>{children}</PostHogWrapper>\n ) : (\n children\n );\n\n const wrappedContent = withStyleRoot ? (\n <AgentServerUIRoot\n className={className}\n contentClassName={contentClassName}\n style={style}\n styleOverrides={styleOverrides}\n theme={theme}\n >\n {content}\n </AgentServerUIRoot>\n ) : (\n content\n );\n\n return (\n <I18nextProvider i18n={resolvedI18n} defaultNS={OPENHANDS_I18N_NAMESPACE}>\n <QueryClientProvider client={resolvedQueryClient}>\n <ActiveBackendProvider>{wrappedContent}</ActiveBackendProvider>\n </QueryClientProvider>\n </I18nextProvider>\n );\n}\n"],"mappings":"ufA6BA,IAAa,EAA+D,CAC1E,SAAU,UACX,CAaD,SAAgB,EAAuB,CACrC,WACA,cACA,YACA,OACA,YACA,mBACA,QACA,iBACA,QACA,gBAAgB,IACc,CAC9B,IAAM,EAAsB,EAAA,QAAM,YAC1B,GAAe,EAAA,uBAAuB,CAC5C,CAAC,EAAY,CACd,CACK,EAAe,EAAA,QAAM,YAAc,GAAQ,EAAA,gBAAgB,CAAE,CAAC,EAAK,CAAC,CACpE,EAAuB,EAAA,QAAM,OAGzB,KAAK,CAEf,AACE,EAAqB,UAAU,CAC7B,YAAa,EAAA,gBAAgB,CAC7B,KAAM,EAAA,SAAS,CAChB,CAGH,EAAA,eAAe,EAAoB,CACnC,EAAA,QAAQ,EAAa,CAErB,EAAA,QAAM,kBACQ,CACN,EAAqB,UACvB,EAAA,eAAe,EAAqB,QAAQ,YAAY,CACxD,EAAA,QAAQ,EAAqB,QAAQ,KAAK,GAG9C,EAAE,CACH,CAED,IAAM,EACJ,GAAa,EAAU,WAAa,WAClC,EAAA,EAAA,KAAC,EAAA,eAAD,CAAiB,WAA0B,CAAA,CAE3C,EAiBJ,OACE,EAAA,EAAA,KAAC,EAAA,gBAAD,CAAiB,KAAM,EAAc,UAAW,EAAA,mCAC9C,EAAA,EAAA,KAAC,EAAA,oBAAD,CAAqB,OAAQ,YAC3B,EAAA,EAAA,KAAC,EAAA,sBAAD,CAAA,SAjBiB,GACrB,EAAA,EAAA,KAAC,EAAA,kBAAD,CACa,YACO,mBACX,QACS,iBACT,iBAEN,EACiB,CAAA,CAEpB,EAMmE,CAAA,CAC3C,CAAA,CACN,CAAA"}
1
+ {"version":3,"file":"agent-server-ui-providers.cjs","names":[],"sources":["../../../src/components/providers/agent-server-ui-providers.tsx"],"sourcesContent":["import React from \"react\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport { I18nextProvider } from \"react-i18next\";\nimport { type i18n as I18nInstance } from \"i18next\";\nimport {\n getDefaultQueryClient,\n getQueryClient,\n setQueryClient,\n} from \"#/query-client-config\";\nimport {\n OPENHANDS_I18N_NAMESPACE,\n getDefaultI18n,\n getI18n,\n setI18n,\n} from \"#/i18n\";\nimport { ActiveBackendProvider } from \"#/contexts/active-backend-context\";\nimport type { TelemetryConfig } from \"#/services/telemetry\";\nimport { TelemetryProvider } from \"./telemetry-provider\";\nimport {\n AgentServerUIRoot,\n type AgentServerUIRootProps,\n} from \"./agent-server-ui-root\";\n\nexport interface AgentServerUIPostHogAnalyticsConfig extends TelemetryConfig {\n provider: \"posthog\";\n}\n\nexport type AgentServerUIAnalyticsConfig =\n | AgentServerUIPostHogAnalyticsConfig\n | false\n | null;\n\nexport const DEFAULT_AGENT_SERVER_ANALYTICS: AgentServerUIAnalyticsConfig = {\n provider: \"posthog\",\n};\n\nexport interface AgentServerUIProvidersProps extends Pick<\n AgentServerUIRootProps,\n \"className\" | \"contentClassName\" | \"style\" | \"styleOverrides\" | \"theme\"\n> {\n children: React.ReactNode;\n queryClient?: QueryClient;\n analytics?: AgentServerUIAnalyticsConfig;\n i18n?: I18nInstance;\n withStyleRoot?: boolean;\n}\n\nexport function AgentServerUIProviders({\n children,\n queryClient,\n analytics,\n i18n,\n className,\n contentClassName,\n style,\n styleOverrides,\n theme,\n withStyleRoot = true,\n}: AgentServerUIProvidersProps) {\n const resolvedQueryClient = React.useMemo(\n () => queryClient ?? getDefaultQueryClient(),\n [queryClient],\n );\n const resolvedI18n = React.useMemo(() => i18n ?? getDefaultI18n(), [i18n]);\n const previousProvidersRef = React.useRef<{\n queryClient: QueryClient;\n i18n: I18nInstance;\n } | null>(null);\n\n if (!previousProvidersRef.current) {\n previousProvidersRef.current = {\n queryClient: getQueryClient(),\n i18n: getI18n(),\n };\n }\n\n setQueryClient(resolvedQueryClient);\n setI18n(resolvedI18n);\n\n React.useEffect(\n () => () => {\n if (previousProvidersRef.current) {\n setQueryClient(previousProvidersRef.current.queryClient);\n setI18n(previousProvidersRef.current.i18n);\n }\n },\n [],\n );\n\n const posthogConfig =\n analytics && analytics.provider === \"posthog\"\n ? {\n apiKey: analytics.apiKey,\n apiHost: analytics.apiHost,\n uiHost: analytics.uiHost,\n }\n : false;\n const content = (\n <TelemetryProvider config={posthogConfig}>{children}</TelemetryProvider>\n );\n\n const wrappedContent = withStyleRoot ? (\n <AgentServerUIRoot\n className={className}\n contentClassName={contentClassName}\n style={style}\n styleOverrides={styleOverrides}\n theme={theme}\n >\n {content}\n </AgentServerUIRoot>\n ) : (\n content\n );\n\n return (\n <I18nextProvider i18n={resolvedI18n} defaultNS={OPENHANDS_I18N_NAMESPACE}>\n <QueryClientProvider client={resolvedQueryClient}>\n <ActiveBackendProvider>{wrappedContent}</ActiveBackendProvider>\n </QueryClientProvider>\n </I18nextProvider>\n );\n}\n"],"mappings":"0fAgCA,IAAa,EAA+D,CAC1E,SAAU,UACX,CAaD,SAAgB,EAAuB,CACrC,WACA,cACA,YACA,OACA,YACA,mBACA,QACA,iBACA,QACA,gBAAgB,IACc,CAC9B,IAAM,EAAsB,EAAA,QAAM,YAC1B,GAAe,EAAA,uBAAuB,CAC5C,CAAC,EAAY,CACd,CACK,EAAe,EAAA,QAAM,YAAc,GAAQ,EAAA,gBAAgB,CAAE,CAAC,EAAK,CAAC,CACpE,EAAuB,EAAA,QAAM,OAGzB,KAAK,CAEf,AACE,EAAqB,UAAU,CAC7B,YAAa,EAAA,gBAAgB,CAC7B,KAAM,EAAA,SAAS,CAChB,CAGH,EAAA,eAAe,EAAoB,CACnC,EAAA,QAAQ,EAAa,CAErB,EAAA,QAAM,kBACQ,CACN,EAAqB,UACvB,EAAA,eAAe,EAAqB,QAAQ,YAAY,CACxD,EAAA,QAAQ,EAAqB,QAAQ,KAAK,GAG9C,EAAE,CACH,CAUD,IAAM,GACJ,EAAA,EAAA,KAAC,EAAA,kBAAD,CAAmB,OARnB,GAAa,EAAU,WAAa,UAChC,CACE,OAAQ,EAAU,OAClB,QAAS,EAAU,QACnB,OAAQ,EAAU,OACnB,CACD,GAEuC,WAA6B,CAAA,CAiB1E,OACE,EAAA,EAAA,KAAC,EAAA,gBAAD,CAAiB,KAAM,EAAc,UAAW,EAAA,mCAC9C,EAAA,EAAA,KAAC,EAAA,oBAAD,CAAqB,OAAQ,YAC3B,EAAA,EAAA,KAAC,EAAA,sBAAD,CAAA,SAjBiB,GACrB,EAAA,EAAA,KAAC,EAAA,kBAAD,CACa,YACO,mBACX,QACS,iBACT,iBAEN,EACiB,CAAA,CAEpB,EAMmE,CAAA,CAC3C,CAAA,CACN,CAAA"}
@@ -1,10 +1,12 @@
1
1
  import React from "react";
2
2
  import { QueryClient } from "@tanstack/react-query";
3
3
  import { type i18n as I18nInstance } from "i18next";
4
+ import type { TelemetryConfig } from "#/services/telemetry";
4
5
  import { type AgentServerUIRootProps } from "./agent-server-ui-root";
5
- export type AgentServerUIAnalyticsConfig = {
6
+ export interface AgentServerUIPostHogAnalyticsConfig extends TelemetryConfig {
6
7
  provider: "posthog";
7
- } | false | null;
8
+ }
9
+ export type AgentServerUIAnalyticsConfig = AgentServerUIPostHogAnalyticsConfig | false | null;
8
10
  export declare const DEFAULT_AGENT_SERVER_ANALYTICS: AgentServerUIAnalyticsConfig;
9
11
  export interface AgentServerUIProvidersProps extends Pick<AgentServerUIRootProps, "className" | "contentClassName" | "style" | "styleOverrides" | "theme"> {
10
12
  children: React.ReactNode;
@@ -3,7 +3,7 @@ import { QueryClientProvider as t } from "../../node_modules/@tanstack/react-que
3
3
  import { OPENHANDS_I18N_NAMESPACE as n, getDefaultI18n as r, getI18n as i, setI18n as a } from "../../i18n/index.js";
4
4
  import { getDefaultQueryClient as o, getQueryClient as s, setQueryClient as c } from "../../query-client-config.js";
5
5
  import { ActiveBackendProvider as l } from "../../contexts/active-backend-context.js";
6
- import { PostHogWrapper as u } from "./posthog-wrapper.js";
6
+ import { TelemetryProvider as u } from "./telemetry-provider.js";
7
7
  import { AgentServerUIRoot as d } from "./agent-server-ui-root.js";
8
8
  import f from "react";
9
9
  import { jsx as p } from "react/jsx-runtime";
@@ -17,7 +17,14 @@ function h({ children: m, queryClient: h, analytics: g, i18n: _, className: v, c
17
17
  }, c(w), a(T), f.useEffect(() => () => {
18
18
  E.current && (c(E.current.queryClient), a(E.current.i18n));
19
19
  }, []);
20
- let D = g && g.provider === "posthog" ? /* @__PURE__ */ p(u, { children: m }) : m;
20
+ let D = /* @__PURE__ */ p(u, {
21
+ config: g && g.provider === "posthog" ? {
22
+ apiKey: g.apiKey,
23
+ apiHost: g.apiHost,
24
+ uiHost: g.uiHost
25
+ } : !1,
26
+ children: m
27
+ });
21
28
  return /* @__PURE__ */ p(e, {
22
29
  i18n: T,
23
30
  defaultNS: n,
@@ -1 +1 @@
1
- {"version":3,"file":"agent-server-ui-providers.js","names":[],"sources":["../../../src/components/providers/agent-server-ui-providers.tsx"],"sourcesContent":["import React from \"react\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport { I18nextProvider } from \"react-i18next\";\nimport { type i18n as I18nInstance } from \"i18next\";\nimport {\n getDefaultQueryClient,\n getQueryClient,\n setQueryClient,\n} from \"#/query-client-config\";\nimport {\n OPENHANDS_I18N_NAMESPACE,\n getDefaultI18n,\n getI18n,\n setI18n,\n} from \"#/i18n\";\nimport { ActiveBackendProvider } from \"#/contexts/active-backend-context\";\nimport { PostHogWrapper } from \"./posthog-wrapper\";\nimport {\n AgentServerUIRoot,\n type AgentServerUIRootProps,\n} from \"./agent-server-ui-root\";\n\nexport type AgentServerUIAnalyticsConfig =\n | {\n provider: \"posthog\";\n }\n | false\n | null;\n\nexport const DEFAULT_AGENT_SERVER_ANALYTICS: AgentServerUIAnalyticsConfig = {\n provider: \"posthog\",\n};\n\nexport interface AgentServerUIProvidersProps extends Pick<\n AgentServerUIRootProps,\n \"className\" | \"contentClassName\" | \"style\" | \"styleOverrides\" | \"theme\"\n> {\n children: React.ReactNode;\n queryClient?: QueryClient;\n analytics?: AgentServerUIAnalyticsConfig;\n i18n?: I18nInstance;\n withStyleRoot?: boolean;\n}\n\nexport function AgentServerUIProviders({\n children,\n queryClient,\n analytics,\n i18n,\n className,\n contentClassName,\n style,\n styleOverrides,\n theme,\n withStyleRoot = true,\n}: AgentServerUIProvidersProps) {\n const resolvedQueryClient = React.useMemo(\n () => queryClient ?? getDefaultQueryClient(),\n [queryClient],\n );\n const resolvedI18n = React.useMemo(() => i18n ?? getDefaultI18n(), [i18n]);\n const previousProvidersRef = React.useRef<{\n queryClient: QueryClient;\n i18n: I18nInstance;\n } | null>(null);\n\n if (!previousProvidersRef.current) {\n previousProvidersRef.current = {\n queryClient: getQueryClient(),\n i18n: getI18n(),\n };\n }\n\n setQueryClient(resolvedQueryClient);\n setI18n(resolvedI18n);\n\n React.useEffect(\n () => () => {\n if (previousProvidersRef.current) {\n setQueryClient(previousProvidersRef.current.queryClient);\n setI18n(previousProvidersRef.current.i18n);\n }\n },\n [],\n );\n\n const content =\n analytics && analytics.provider === \"posthog\" ? (\n <PostHogWrapper>{children}</PostHogWrapper>\n ) : (\n children\n );\n\n const wrappedContent = withStyleRoot ? (\n <AgentServerUIRoot\n className={className}\n contentClassName={contentClassName}\n style={style}\n styleOverrides={styleOverrides}\n theme={theme}\n >\n {content}\n </AgentServerUIRoot>\n ) : (\n content\n );\n\n return (\n <I18nextProvider i18n={resolvedI18n} defaultNS={OPENHANDS_I18N_NAMESPACE}>\n <QueryClientProvider client={resolvedQueryClient}>\n <ActiveBackendProvider>{wrappedContent}</ActiveBackendProvider>\n </QueryClientProvider>\n </I18nextProvider>\n );\n}\n"],"mappings":";;;;;;;;;;AA6BA,IAAa,IAA+D,EAC1E,UAAU,WACX;AAaD,SAAgB,EAAuB,EACrC,aACA,gBACA,cACA,SACA,cACA,qBACA,UACA,mBACA,UACA,mBAAgB,MACc;CAC9B,IAAM,IAAsB,EAAM,cAC1B,KAAe,GAAuB,EAC5C,CAAC,EAAY,CACd,EACK,IAAe,EAAM,cAAc,KAAQ,GAAgB,EAAE,CAAC,EAAK,CAAC,EACpE,IAAuB,EAAM,OAGzB,KAAK;AAYf,CAVA,AACE,EAAqB,YAAU;EAC7B,aAAa,GAAgB;EAC7B,MAAM,GAAS;EAChB,EAGH,EAAe,EAAoB,EACnC,EAAQ,EAAa,EAErB,EAAM,sBACQ;AACV,EAAI,EAAqB,YACvB,EAAe,EAAqB,QAAQ,YAAY,EACxD,EAAQ,EAAqB,QAAQ,KAAK;IAG9C,EAAE,CACH;CAED,IAAM,IACJ,KAAa,EAAU,aAAa,YAClC,kBAAC,GAAD,EAAiB,aAA0B,CAAA,GAE3C;AAiBJ,QACE,kBAAC,GAAD;EAAiB,MAAM;EAAc,WAAW;YAC9C,kBAAC,GAAD;GAAqB,QAAQ;aAC3B,kBAAC,GAAD,EAAA,UAjBiB,IACrB,kBAAC,GAAD;IACa;IACO;IACX;IACS;IACT;cAEN;IACiB,CAAA,GAEpB,GAMmE,CAAA;GAC3C,CAAA;EACN,CAAA"}
1
+ {"version":3,"file":"agent-server-ui-providers.js","names":[],"sources":["../../../src/components/providers/agent-server-ui-providers.tsx"],"sourcesContent":["import React from \"react\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport { I18nextProvider } from \"react-i18next\";\nimport { type i18n as I18nInstance } from \"i18next\";\nimport {\n getDefaultQueryClient,\n getQueryClient,\n setQueryClient,\n} from \"#/query-client-config\";\nimport {\n OPENHANDS_I18N_NAMESPACE,\n getDefaultI18n,\n getI18n,\n setI18n,\n} from \"#/i18n\";\nimport { ActiveBackendProvider } from \"#/contexts/active-backend-context\";\nimport type { TelemetryConfig } from \"#/services/telemetry\";\nimport { TelemetryProvider } from \"./telemetry-provider\";\nimport {\n AgentServerUIRoot,\n type AgentServerUIRootProps,\n} from \"./agent-server-ui-root\";\n\nexport interface AgentServerUIPostHogAnalyticsConfig extends TelemetryConfig {\n provider: \"posthog\";\n}\n\nexport type AgentServerUIAnalyticsConfig =\n | AgentServerUIPostHogAnalyticsConfig\n | false\n | null;\n\nexport const DEFAULT_AGENT_SERVER_ANALYTICS: AgentServerUIAnalyticsConfig = {\n provider: \"posthog\",\n};\n\nexport interface AgentServerUIProvidersProps extends Pick<\n AgentServerUIRootProps,\n \"className\" | \"contentClassName\" | \"style\" | \"styleOverrides\" | \"theme\"\n> {\n children: React.ReactNode;\n queryClient?: QueryClient;\n analytics?: AgentServerUIAnalyticsConfig;\n i18n?: I18nInstance;\n withStyleRoot?: boolean;\n}\n\nexport function AgentServerUIProviders({\n children,\n queryClient,\n analytics,\n i18n,\n className,\n contentClassName,\n style,\n styleOverrides,\n theme,\n withStyleRoot = true,\n}: AgentServerUIProvidersProps) {\n const resolvedQueryClient = React.useMemo(\n () => queryClient ?? getDefaultQueryClient(),\n [queryClient],\n );\n const resolvedI18n = React.useMemo(() => i18n ?? getDefaultI18n(), [i18n]);\n const previousProvidersRef = React.useRef<{\n queryClient: QueryClient;\n i18n: I18nInstance;\n } | null>(null);\n\n if (!previousProvidersRef.current) {\n previousProvidersRef.current = {\n queryClient: getQueryClient(),\n i18n: getI18n(),\n };\n }\n\n setQueryClient(resolvedQueryClient);\n setI18n(resolvedI18n);\n\n React.useEffect(\n () => () => {\n if (previousProvidersRef.current) {\n setQueryClient(previousProvidersRef.current.queryClient);\n setI18n(previousProvidersRef.current.i18n);\n }\n },\n [],\n );\n\n const posthogConfig =\n analytics && analytics.provider === \"posthog\"\n ? {\n apiKey: analytics.apiKey,\n apiHost: analytics.apiHost,\n uiHost: analytics.uiHost,\n }\n : false;\n const content = (\n <TelemetryProvider config={posthogConfig}>{children}</TelemetryProvider>\n );\n\n const wrappedContent = withStyleRoot ? (\n <AgentServerUIRoot\n className={className}\n contentClassName={contentClassName}\n style={style}\n styleOverrides={styleOverrides}\n theme={theme}\n >\n {content}\n </AgentServerUIRoot>\n ) : (\n content\n );\n\n return (\n <I18nextProvider i18n={resolvedI18n} defaultNS={OPENHANDS_I18N_NAMESPACE}>\n <QueryClientProvider client={resolvedQueryClient}>\n <ActiveBackendProvider>{wrappedContent}</ActiveBackendProvider>\n </QueryClientProvider>\n </I18nextProvider>\n );\n}\n"],"mappings":";;;;;;;;;;AAgCA,IAAa,IAA+D,EAC1E,UAAU,WACX;AAaD,SAAgB,EAAuB,EACrC,aACA,gBACA,cACA,SACA,cACA,qBACA,UACA,mBACA,UACA,mBAAgB,MACc;CAC9B,IAAM,IAAsB,EAAM,cAC1B,KAAe,GAAuB,EAC5C,CAAC,EAAY,CACd,EACK,IAAe,EAAM,cAAc,KAAQ,GAAgB,EAAE,CAAC,EAAK,CAAC,EACpE,IAAuB,EAAM,OAGzB,KAAK;AAYf,CAVA,AACE,EAAqB,YAAU;EAC7B,aAAa,GAAgB;EAC7B,MAAM,GAAS;EAChB,EAGH,EAAe,EAAoB,EACnC,EAAQ,EAAa,EAErB,EAAM,sBACQ;AACV,EAAI,EAAqB,YACvB,EAAe,EAAqB,QAAQ,YAAY,EACxD,EAAQ,EAAqB,QAAQ,KAAK;IAG9C,EAAE,CACH;CAUD,IAAM,IACJ,kBAAC,GAAD;EAAmB,QARnB,KAAa,EAAU,aAAa,YAChC;GACE,QAAQ,EAAU;GAClB,SAAS,EAAU;GACnB,QAAQ,EAAU;GACnB,GACD;EAEuC;EAA6B,CAAA;AAiB1E,QACE,kBAAC,GAAD;EAAiB,MAAM;EAAc,WAAW;YAC9C,kBAAC,GAAD;GAAqB,QAAQ;aAC3B,kBAAC,GAAD,EAAA,UAjBiB,IACrB,kBAAC,GAAD;IACa;IACO;IACX;IACS;IACT;cAEN;IACiB,CAAA,GAEpB,GAMmE,CAAA;GAC3C,CAAA;EACN,CAAA"}
@@ -1 +1 @@
1
- require(`../../_virtual/_rolldown/runtime.cjs`),require(`./posthog-wrapper.cjs`),require(`./agent-server-ui-root.cjs`),require(`./agent-server-ui-providers.cjs`);
1
+ require(`../../_virtual/_rolldown/runtime.cjs`),require(`./agent-server-ui-root.cjs`),require(`./agent-server-ui-providers.cjs`);
@@ -1,3 +1,2 @@
1
- export { AgentServerUIProviders, DEFAULT_AGENT_SERVER_ANALYTICS, type AgentServerUIAnalyticsConfig, type AgentServerUIProvidersProps, } from "./agent-server-ui-providers";
1
+ export { AgentServerUIProviders, DEFAULT_AGENT_SERVER_ANALYTICS, type AgentServerUIAnalyticsConfig, type AgentServerUIPostHogAnalyticsConfig, type AgentServerUIProvidersProps, } from "./agent-server-ui-providers";
2
2
  export { AgentServerUIRoot, type AgentServerUIRootProps, } from "./agent-server-ui-root";
3
- export { PostHogWrapper } from "./posthog-wrapper";
@@ -1,3 +1,2 @@
1
- import "./posthog-wrapper.js";
2
1
  import "./agent-server-ui-root.js";
3
2
  import "./agent-server-ui-providers.js";
@@ -0,0 +1,2 @@
1
+ const e=require(`../../_virtual/_rolldown/runtime.cjs`),t=require(`../../services/telemetry.cjs`);let n=require(`react`);n=e.__toESM(n,1);var r=`posthog_bootstrap`;function i(e){if(typeof e!=`object`||!e)return!1;let t=e;return typeof t.distinctID==`string`&&typeof t.sessionID==`string`}function a(){if(typeof window>`u`||typeof sessionStorage>`u`)return;let e=new URLSearchParams(window.location.hash.slice(1)),t=e.get(`distinct_id`),n=e.get(`session_id`);if(t&&n){let e={distinctID:t,sessionID:n};try{sessionStorage.setItem(r,JSON.stringify(e))}catch{}try{window.history.replaceState(null,``,window.location.pathname+window.location.search)}catch{}return e}try{let e=sessionStorage.getItem(r);if(!e)return;sessionStorage.removeItem(r);let t=JSON.parse(e);return i(t)?t:void 0}catch{try{sessionStorage.removeItem(r)}catch{}return}}function o({children:e,config:r={}}){let i=n.default.useRef(!1),o=r!==!1,s=r===!1?void 0:r.apiKey,c=r===!1?void 0:r.apiHost,l=r===!1?void 0:r.uiHost;return n.default.useLayoutEffect(()=>{t.configureTelemetry(o?{apiKey:s,apiHost:c,uiHost:l}:!1),i.current||=(t.configurePostHogBootstrap(a()),!0)},[o,c,s,l]),n.default.useEffect(()=>{o&&t.initializePostHogClient().catch(()=>{})},[o,c,s,l]),e}exports.TelemetryProvider=o;
2
+ //# sourceMappingURL=telemetry-provider.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry-provider.cjs","names":[],"sources":["../../../src/components/providers/telemetry-provider.tsx"],"sourcesContent":["import React from \"react\";\nimport type { BootstrapConfig } from \"posthog-js\";\nimport {\n configurePostHogBootstrap,\n configureTelemetry,\n initializePostHogClient,\n type TelemetryConfiguration,\n} from \"#/services/telemetry\";\n\nconst POSTHOG_BOOTSTRAP_KEY = \"posthog_bootstrap\";\n\nfunction isBootstrapConfig(value: unknown): value is BootstrapConfig {\n if (typeof value !== \"object\" || value === null) return false;\n const candidate = value as Record<string, unknown>;\n return (\n typeof candidate.distinctID === \"string\" &&\n typeof candidate.sessionID === \"string\"\n );\n}\n\nfunction readBootstrapIds(): BootstrapConfig | undefined {\n if (typeof window === \"undefined\" || typeof sessionStorage === \"undefined\") {\n return undefined;\n }\n\n const params = new URLSearchParams(window.location.hash.slice(1));\n const distinctID = params.get(\"distinct_id\");\n const sessionID = params.get(\"session_id\");\n if (distinctID && sessionID) {\n const bootstrap = { distinctID, sessionID };\n try {\n sessionStorage.setItem(POSTHOG_BOOTSTRAP_KEY, JSON.stringify(bootstrap));\n } catch {\n // OAuth continuity is best effort when browser storage is unavailable.\n }\n try {\n window.history.replaceState(\n null,\n \"\",\n window.location.pathname + window.location.search,\n );\n } catch {\n // Telemetry must never prevent the application from rendering.\n }\n return bootstrap;\n }\n\n try {\n const stored = sessionStorage.getItem(POSTHOG_BOOTSTRAP_KEY);\n if (!stored) return undefined;\n\n sessionStorage.removeItem(POSTHOG_BOOTSTRAP_KEY);\n const parsed: unknown = JSON.parse(stored);\n return isBootstrapConfig(parsed) ? parsed : undefined;\n } catch {\n try {\n sessionStorage.removeItem(POSTHOG_BOOTSTRAP_KEY);\n } catch {\n // Ignore unavailable storage.\n }\n return undefined;\n }\n}\n\nexport function TelemetryProvider({\n children,\n config = {},\n}: {\n children: React.ReactNode;\n config?: TelemetryConfiguration;\n}) {\n const configuredBootstrap = React.useRef(false);\n const analyticsEnabled = config !== false;\n const apiKey = config === false ? undefined : config.apiKey;\n const apiHost = config === false ? undefined : config.apiHost;\n const uiHost = config === false ? undefined : config.uiHost;\n\n React.useLayoutEffect(() => {\n configureTelemetry(analyticsEnabled ? { apiKey, apiHost, uiHost } : false);\n if (!configuredBootstrap.current) {\n configurePostHogBootstrap(readBootstrapIds());\n configuredBootstrap.current = true;\n }\n }, [analyticsEnabled, apiHost, apiKey, uiHost]);\n\n React.useEffect(() => {\n if (analyticsEnabled) {\n void initializePostHogClient().catch(() => {\n // Analytics are optional; the service retries on the next operation.\n });\n }\n }, [analyticsEnabled, apiHost, apiKey, uiHost]);\n\n return children;\n}\n"],"mappings":"0IASA,IAAM,EAAwB,oBAE9B,SAAS,EAAkB,EAA0C,CACnE,GAAI,OAAO,GAAU,WAAY,EAAgB,MAAO,GACxD,IAAM,EAAY,EAClB,OACE,OAAO,EAAU,YAAe,UAChC,OAAO,EAAU,WAAc,SAInC,SAAS,GAAgD,CACvD,GAAI,OAAO,OAAW,KAAe,OAAO,eAAmB,IAC7D,OAGF,IAAM,EAAS,IAAI,gBAAgB,OAAO,SAAS,KAAK,MAAM,EAAE,CAAC,CAC3D,EAAa,EAAO,IAAI,cAAc,CACtC,EAAY,EAAO,IAAI,aAAa,CAC1C,GAAI,GAAc,EAAW,CAC3B,IAAM,EAAY,CAAE,aAAY,YAAW,CAC3C,GAAI,CACF,eAAe,QAAQ,EAAuB,KAAK,UAAU,EAAU,CAAC,MAClE,EAGR,GAAI,CACF,OAAO,QAAQ,aACb,KACA,GACA,OAAO,SAAS,SAAW,OAAO,SAAS,OAC5C,MACK,EAGR,OAAO,EAGT,GAAI,CACF,IAAM,EAAS,eAAe,QAAQ,EAAsB,CAC5D,GAAI,CAAC,EAAQ,OAEb,eAAe,WAAW,EAAsB,CAChD,IAAM,EAAkB,KAAK,MAAM,EAAO,CAC1C,OAAO,EAAkB,EAAO,CAAG,EAAS,IAAA,QACtC,CACN,GAAI,CACF,eAAe,WAAW,EAAsB,MAC1C,EAGR,QAIJ,SAAgB,EAAkB,CAChC,WACA,SAAS,EAAE,EAIV,CACD,IAAM,EAAsB,EAAA,QAAM,OAAO,GAAM,CACzC,EAAmB,IAAW,GAC9B,EAAS,IAAW,GAAQ,IAAA,GAAY,EAAO,OAC/C,EAAU,IAAW,GAAQ,IAAA,GAAY,EAAO,QAChD,EAAS,IAAW,GAAQ,IAAA,GAAY,EAAO,OAkBrD,OAhBA,EAAA,QAAM,oBAAsB,CAC1B,EAAA,mBAAmB,EAAmB,CAAE,SAAQ,UAAS,SAAQ,CAAG,GAAM,CAC1E,AAEE,EAAoB,WADpB,EAAA,0BAA0B,GAAkB,CAAC,CACf,KAE/B,CAAC,EAAkB,EAAS,EAAQ,EAAO,CAAC,CAE/C,EAAA,QAAM,cAAgB,CAChB,GACG,EAAA,yBAAyB,CAAC,UAAY,GAEzC,EAEH,CAAC,EAAkB,EAAS,EAAQ,EAAO,CAAC,CAExC"}
@@ -0,0 +1,6 @@
1
+ import React from "react";
2
+ import { type TelemetryConfiguration } from "#/services/telemetry";
3
+ export declare function TelemetryProvider({ children, config, }: {
4
+ children: React.ReactNode;
5
+ config?: TelemetryConfiguration;
6
+ }): React.ReactNode;
@@ -0,0 +1,64 @@
1
+ import { configurePostHogBootstrap as e, configureTelemetry as t, initializePostHogClient as n } from "../../services/telemetry.js";
2
+ import r from "react";
3
+ //#region src/components/providers/telemetry-provider.tsx
4
+ var i = "posthog_bootstrap";
5
+ function a(e) {
6
+ if (typeof e != "object" || !e) return !1;
7
+ let t = e;
8
+ return typeof t.distinctID == "string" && typeof t.sessionID == "string";
9
+ }
10
+ function o() {
11
+ if (typeof window > "u" || typeof sessionStorage > "u") return;
12
+ let e = new URLSearchParams(window.location.hash.slice(1)), t = e.get("distinct_id"), n = e.get("session_id");
13
+ if (t && n) {
14
+ let e = {
15
+ distinctID: t,
16
+ sessionID: n
17
+ };
18
+ try {
19
+ sessionStorage.setItem(i, JSON.stringify(e));
20
+ } catch {}
21
+ try {
22
+ window.history.replaceState(null, "", window.location.pathname + window.location.search);
23
+ } catch {}
24
+ return e;
25
+ }
26
+ try {
27
+ let e = sessionStorage.getItem(i);
28
+ if (!e) return;
29
+ sessionStorage.removeItem(i);
30
+ let t = JSON.parse(e);
31
+ return a(t) ? t : void 0;
32
+ } catch {
33
+ try {
34
+ sessionStorage.removeItem(i);
35
+ } catch {}
36
+ return;
37
+ }
38
+ }
39
+ function s({ children: i, config: a = {} }) {
40
+ let s = r.useRef(!1), c = a !== !1, l = a === !1 ? void 0 : a.apiKey, u = a === !1 ? void 0 : a.apiHost, d = a === !1 ? void 0 : a.uiHost;
41
+ return r.useLayoutEffect(() => {
42
+ t(c ? {
43
+ apiKey: l,
44
+ apiHost: u,
45
+ uiHost: d
46
+ } : !1), s.current ||= (e(o()), !0);
47
+ }, [
48
+ c,
49
+ u,
50
+ l,
51
+ d
52
+ ]), r.useEffect(() => {
53
+ c && n().catch(() => {});
54
+ }, [
55
+ c,
56
+ u,
57
+ l,
58
+ d
59
+ ]), i;
60
+ }
61
+ //#endregion
62
+ export { s as TelemetryProvider };
63
+
64
+ //# sourceMappingURL=telemetry-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry-provider.js","names":[],"sources":["../../../src/components/providers/telemetry-provider.tsx"],"sourcesContent":["import React from \"react\";\nimport type { BootstrapConfig } from \"posthog-js\";\nimport {\n configurePostHogBootstrap,\n configureTelemetry,\n initializePostHogClient,\n type TelemetryConfiguration,\n} from \"#/services/telemetry\";\n\nconst POSTHOG_BOOTSTRAP_KEY = \"posthog_bootstrap\";\n\nfunction isBootstrapConfig(value: unknown): value is BootstrapConfig {\n if (typeof value !== \"object\" || value === null) return false;\n const candidate = value as Record<string, unknown>;\n return (\n typeof candidate.distinctID === \"string\" &&\n typeof candidate.sessionID === \"string\"\n );\n}\n\nfunction readBootstrapIds(): BootstrapConfig | undefined {\n if (typeof window === \"undefined\" || typeof sessionStorage === \"undefined\") {\n return undefined;\n }\n\n const params = new URLSearchParams(window.location.hash.slice(1));\n const distinctID = params.get(\"distinct_id\");\n const sessionID = params.get(\"session_id\");\n if (distinctID && sessionID) {\n const bootstrap = { distinctID, sessionID };\n try {\n sessionStorage.setItem(POSTHOG_BOOTSTRAP_KEY, JSON.stringify(bootstrap));\n } catch {\n // OAuth continuity is best effort when browser storage is unavailable.\n }\n try {\n window.history.replaceState(\n null,\n \"\",\n window.location.pathname + window.location.search,\n );\n } catch {\n // Telemetry must never prevent the application from rendering.\n }\n return bootstrap;\n }\n\n try {\n const stored = sessionStorage.getItem(POSTHOG_BOOTSTRAP_KEY);\n if (!stored) return undefined;\n\n sessionStorage.removeItem(POSTHOG_BOOTSTRAP_KEY);\n const parsed: unknown = JSON.parse(stored);\n return isBootstrapConfig(parsed) ? parsed : undefined;\n } catch {\n try {\n sessionStorage.removeItem(POSTHOG_BOOTSTRAP_KEY);\n } catch {\n // Ignore unavailable storage.\n }\n return undefined;\n }\n}\n\nexport function TelemetryProvider({\n children,\n config = {},\n}: {\n children: React.ReactNode;\n config?: TelemetryConfiguration;\n}) {\n const configuredBootstrap = React.useRef(false);\n const analyticsEnabled = config !== false;\n const apiKey = config === false ? undefined : config.apiKey;\n const apiHost = config === false ? undefined : config.apiHost;\n const uiHost = config === false ? undefined : config.uiHost;\n\n React.useLayoutEffect(() => {\n configureTelemetry(analyticsEnabled ? { apiKey, apiHost, uiHost } : false);\n if (!configuredBootstrap.current) {\n configurePostHogBootstrap(readBootstrapIds());\n configuredBootstrap.current = true;\n }\n }, [analyticsEnabled, apiHost, apiKey, uiHost]);\n\n React.useEffect(() => {\n if (analyticsEnabled) {\n void initializePostHogClient().catch(() => {\n // Analytics are optional; the service retries on the next operation.\n });\n }\n }, [analyticsEnabled, apiHost, apiKey, uiHost]);\n\n return children;\n}\n"],"mappings":";;;AASA,IAAM,IAAwB;AAE9B,SAAS,EAAkB,GAA0C;AACnE,KAAI,OAAO,KAAU,aAAY,EAAgB,QAAO;CACxD,IAAM,IAAY;AAClB,QACE,OAAO,EAAU,cAAe,YAChC,OAAO,EAAU,aAAc;;AAInC,SAAS,IAAgD;AACvD,KAAI,OAAO,SAAW,OAAe,OAAO,iBAAmB,IAC7D;CAGF,IAAM,IAAS,IAAI,gBAAgB,OAAO,SAAS,KAAK,MAAM,EAAE,CAAC,EAC3D,IAAa,EAAO,IAAI,cAAc,EACtC,IAAY,EAAO,IAAI,aAAa;AAC1C,KAAI,KAAc,GAAW;EAC3B,IAAM,IAAY;GAAE;GAAY;GAAW;AAC3C,MAAI;AACF,kBAAe,QAAQ,GAAuB,KAAK,UAAU,EAAU,CAAC;UAClE;AAGR,MAAI;AACF,UAAO,QAAQ,aACb,MACA,IACA,OAAO,SAAS,WAAW,OAAO,SAAS,OAC5C;UACK;AAGR,SAAO;;AAGT,KAAI;EACF,IAAM,IAAS,eAAe,QAAQ,EAAsB;AAC5D,MAAI,CAAC,EAAQ;AAEb,iBAAe,WAAW,EAAsB;EAChD,IAAM,IAAkB,KAAK,MAAM,EAAO;AAC1C,SAAO,EAAkB,EAAO,GAAG,IAAS,KAAA;SACtC;AACN,MAAI;AACF,kBAAe,WAAW,EAAsB;UAC1C;AAGR;;;AAIJ,SAAgB,EAAkB,EAChC,aACA,YAAS,EAAE,IAIV;CACD,IAAM,IAAsB,EAAM,OAAO,GAAM,EACzC,IAAmB,MAAW,IAC9B,IAAS,MAAW,KAAQ,KAAA,IAAY,EAAO,QAC/C,IAAU,MAAW,KAAQ,KAAA,IAAY,EAAO,SAChD,IAAS,MAAW,KAAQ,KAAA,IAAY,EAAO;AAkBrD,QAhBA,EAAM,sBAAsB;AAE1B,EADA,EAAmB,IAAmB;GAAE;GAAQ;GAAS;GAAQ,GAAG,GAAM,EAC1E,AAEE,EAAoB,aADpB,EAA0B,GAAkB,CAAC,EACf;IAE/B;EAAC;EAAkB;EAAS;EAAQ;EAAO,CAAC,EAE/C,EAAM,gBAAgB;AACpB,EAAI,KACG,GAAyB,CAAC,YAAY,GAEzC;IAEH;EAAC;EAAkB;EAAS;EAAQ;EAAO,CAAC,EAExC"}
@@ -1,2 +1,2 @@
1
- require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../../../node_modules/react-i18next/dist/es/useTranslation.cjs`),t=require(`../../../../i18n/declaration.cjs`),n=require(`../../../../utils/utils.cjs`),r=require(`../../../../services/settings.cjs`),i=require(`../modal-backdrop.cjs`),a=require(`../modal-body.cjs`),o=require(`../../../../utils/modal-classes.cjs`),s=require(`../../../../ui/help-link.cjs`),c=require(`./settings-form.cjs`);let l=require(`react/jsx-runtime`);function u({onClose:u,settings:d}){let{t:f}=e.useTranslation(`openhands`);return(0,l.jsx)(i.ModalBackdrop,{children:(0,l.jsxs)(`div`,{"data-testid":`ai-config-modal`,className:n.cn(`bg-[var(--oh-surface)] m-4 p-6 rounded-xl flex flex-col gap-[17px] border border-[var(--oh-border)] api-configuration-modal`,a.modalWidthClassName(`md`),a.MODAL_MAX_WIDTH_VIEWPORT),children:[(0,l.jsx)(`span`,{className:o.modalTitleClassName,children:f(t.I18nKey.AI_SETTINGS$TITLE)}),(0,l.jsx)(s.HelpLink,{testId:`advanced-settings-link`,text:`${f(t.I18nKey.SETTINGS$DESCRIPTION)}. ${f(t.I18nKey.SETTINGS$FOR_OTHER_OPTIONS)} ${f(t.I18nKey.COMMON$SEE)}`,linkText:f(t.I18nKey.COMMON$ADVANCED_SETTINGS),href:`/settings`,suffix:`.`,size:`settings`,linkColor:`white`,suffixClassName:`text-white`}),(0,l.jsx)(c.SettingsForm,{settings:d||r.DEFAULT_SETTINGS,onClose:u})]})})}exports.SettingsModal=u;
1
+ require(`../../../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../../../node_modules/react-i18next/dist/es/useTranslation.cjs`),t=require(`../../../../i18n/declaration.cjs`),n=require(`../../../../utils/utils.cjs`),r=require(`../../../../utils/base-path.cjs`),i=require(`../../../../services/settings.cjs`),a=require(`../modal-backdrop.cjs`),o=require(`../modal-body.cjs`),s=require(`../../../../utils/modal-classes.cjs`),c=require(`../../../../ui/help-link.cjs`),l=require(`./settings-form.cjs`);let u=require(`react/jsx-runtime`);function d({onClose:d,settings:f}){let{t:p}=e.useTranslation(`openhands`);return(0,u.jsx)(a.ModalBackdrop,{children:(0,u.jsxs)(`div`,{"data-testid":`ai-config-modal`,className:n.cn(`bg-[var(--oh-surface)] m-4 p-6 rounded-xl flex flex-col gap-[17px] border border-[var(--oh-border)] api-configuration-modal`,o.modalWidthClassName(`md`),o.MODAL_MAX_WIDTH_VIEWPORT),children:[(0,u.jsx)(`span`,{className:s.modalTitleClassName,children:p(t.I18nKey.AI_SETTINGS$TITLE)}),(0,u.jsx)(c.HelpLink,{testId:`advanced-settings-link`,text:`${p(t.I18nKey.SETTINGS$DESCRIPTION)}. ${p(t.I18nKey.SETTINGS$FOR_OTHER_OPTIONS)} ${p(t.I18nKey.COMMON$SEE)}`,linkText:p(t.I18nKey.COMMON$ADVANCED_SETTINGS),href:r.buildAgentCanvasPath(`/settings`),suffix:`.`,size:`settings`,linkColor:`white`,suffixClassName:`text-white`}),(0,u.jsx)(l.SettingsForm,{settings:f||i.DEFAULT_SETTINGS,onClose:d})]})})}exports.SettingsModal=d;
2
2
  //# sourceMappingURL=settings-modal.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings-modal.cjs","names":[],"sources":["../../../../../src/components/shared/modals/settings/settings-modal.tsx"],"sourcesContent":["import { useTranslation } from \"react-i18next\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { ModalBackdrop } from \"../modal-backdrop\";\nimport { MODAL_MAX_WIDTH_VIEWPORT, modalWidthClassName } from \"../modal-body\";\nimport { cn } from \"#/utils/utils\";\nimport { SettingsForm } from \"./settings-form\";\nimport { Settings } from \"#/types/settings\";\nimport { DEFAULT_SETTINGS } from \"#/services/settings\";\nimport { HelpLink } from \"#/ui/help-link\";\nimport { modalTitleClassName } from \"#/utils/modal-classes\";\n\ninterface SettingsModalProps {\n settings?: Settings;\n onClose: () => void;\n}\n\nexport function SettingsModal({ onClose, settings }: SettingsModalProps) {\n const { t } = useTranslation(\"openhands\");\n\n return (\n <ModalBackdrop>\n <div\n data-testid=\"ai-config-modal\"\n className={cn(\n \"bg-[var(--oh-surface)] m-4 p-6 rounded-xl flex flex-col gap-[17px] border border-[var(--oh-border)] api-configuration-modal\",\n modalWidthClassName(\"md\"),\n MODAL_MAX_WIDTH_VIEWPORT,\n )}\n >\n <span className={modalTitleClassName}>\n {t(I18nKey.AI_SETTINGS$TITLE)}\n </span>\n <HelpLink\n testId=\"advanced-settings-link\"\n text={`${t(I18nKey.SETTINGS$DESCRIPTION)}. ${t(I18nKey.SETTINGS$FOR_OTHER_OPTIONS)} ${t(I18nKey.COMMON$SEE)}`}\n linkText={t(I18nKey.COMMON$ADVANCED_SETTINGS)}\n href=\"/settings\"\n suffix=\".\"\n size=\"settings\"\n linkColor=\"white\"\n suffixClassName=\"text-white\"\n />\n\n <SettingsForm\n settings={settings || DEFAULT_SETTINGS}\n onClose={onClose}\n />\n </div>\n </ModalBackdrop>\n );\n}\n"],"mappings":"kfAgBA,SAAgB,EAAc,CAAE,UAAS,YAAgC,CACvE,GAAM,CAAE,KAAM,EAAA,eAAe,YAAY,CAEzC,OACE,EAAA,EAAA,KAAC,EAAA,cAAD,CAAA,UACE,EAAA,EAAA,MAAC,MAAD,CACE,cAAY,kBACZ,UAAW,EAAA,GACT,8HACA,EAAA,oBAAoB,KAAK,CACzB,EAAA,yBACD,UANH,EAQE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAW,EAAA,6BACd,EAAE,EAAA,QAAQ,kBAAkB,CACxB,CAAA,EACP,EAAA,EAAA,KAAC,EAAA,SAAD,CACE,OAAO,yBACP,KAAM,GAAG,EAAE,EAAA,QAAQ,qBAAqB,CAAC,IAAI,EAAE,EAAA,QAAQ,2BAA2B,CAAC,GAAG,EAAE,EAAA,QAAQ,WAAW,GAC3G,SAAU,EAAE,EAAA,QAAQ,yBAAyB,CAC7C,KAAK,YACL,OAAO,IACP,KAAK,WACL,UAAU,QACV,gBAAgB,aAChB,CAAA,EAEF,EAAA,EAAA,KAAC,EAAA,aAAD,CACE,SAAU,GAAY,EAAA,iBACb,UACT,CAAA,CACE,GACQ,CAAA"}
1
+ {"version":3,"file":"settings-modal.cjs","names":[],"sources":["../../../../../src/components/shared/modals/settings/settings-modal.tsx"],"sourcesContent":["import { useTranslation } from \"react-i18next\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { ModalBackdrop } from \"../modal-backdrop\";\nimport { MODAL_MAX_WIDTH_VIEWPORT, modalWidthClassName } from \"../modal-body\";\nimport { cn } from \"#/utils/utils\";\nimport { SettingsForm } from \"./settings-form\";\nimport { Settings } from \"#/types/settings\";\nimport { DEFAULT_SETTINGS } from \"#/services/settings\";\nimport { HelpLink } from \"#/ui/help-link\";\nimport { modalTitleClassName } from \"#/utils/modal-classes\";\nimport { buildAgentCanvasPath } from \"#/utils/base-path\";\n\ninterface SettingsModalProps {\n settings?: Settings;\n onClose: () => void;\n}\n\nexport function SettingsModal({ onClose, settings }: SettingsModalProps) {\n const { t } = useTranslation(\"openhands\");\n\n return (\n <ModalBackdrop>\n <div\n data-testid=\"ai-config-modal\"\n className={cn(\n \"bg-[var(--oh-surface)] m-4 p-6 rounded-xl flex flex-col gap-[17px] border border-[var(--oh-border)] api-configuration-modal\",\n modalWidthClassName(\"md\"),\n MODAL_MAX_WIDTH_VIEWPORT,\n )}\n >\n <span className={modalTitleClassName}>\n {t(I18nKey.AI_SETTINGS$TITLE)}\n </span>\n <HelpLink\n testId=\"advanced-settings-link\"\n text={`${t(I18nKey.SETTINGS$DESCRIPTION)}. ${t(I18nKey.SETTINGS$FOR_OTHER_OPTIONS)} ${t(I18nKey.COMMON$SEE)}`}\n linkText={t(I18nKey.COMMON$ADVANCED_SETTINGS)}\n href={buildAgentCanvasPath(\"/settings\")}\n suffix=\".\"\n size=\"settings\"\n linkColor=\"white\"\n suffixClassName=\"text-white\"\n />\n\n <SettingsForm\n settings={settings || DEFAULT_SETTINGS}\n onClose={onClose}\n />\n </div>\n </ModalBackdrop>\n );\n}\n"],"mappings":"+hBAiBA,SAAgB,EAAc,CAAE,UAAS,YAAgC,CACvE,GAAM,CAAE,KAAM,EAAA,eAAe,YAAY,CAEzC,OACE,EAAA,EAAA,KAAC,EAAA,cAAD,CAAA,UACE,EAAA,EAAA,MAAC,MAAD,CACE,cAAY,kBACZ,UAAW,EAAA,GACT,8HACA,EAAA,oBAAoB,KAAK,CACzB,EAAA,yBACD,UANH,EAQE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAW,EAAA,6BACd,EAAE,EAAA,QAAQ,kBAAkB,CACxB,CAAA,EACP,EAAA,EAAA,KAAC,EAAA,SAAD,CACE,OAAO,yBACP,KAAM,GAAG,EAAE,EAAA,QAAQ,qBAAqB,CAAC,IAAI,EAAE,EAAA,QAAQ,2BAA2B,CAAC,GAAG,EAAE,EAAA,QAAQ,WAAW,GAC3G,SAAU,EAAE,EAAA,QAAQ,yBAAyB,CAC7C,KAAM,EAAA,qBAAqB,YAAY,CACvC,OAAO,IACP,KAAK,WACL,UAAU,QACV,gBAAgB,aAChB,CAAA,EAEF,EAAA,EAAA,KAAC,EAAA,aAAD,CACE,SAAU,GAAY,EAAA,iBACb,UACT,CAAA,CACE,GACQ,CAAA"}
@@ -1,42 +1,43 @@
1
1
  import { useTranslation as e } from "../../../../node_modules/react-i18next/dist/es/useTranslation.js";
2
2
  import { I18nKey as t } from "../../../../i18n/declaration.js";
3
3
  import { cn as n } from "../../../../utils/utils.js";
4
- import { DEFAULT_SETTINGS as r } from "../../../../services/settings.js";
5
- import { ModalBackdrop as i } from "../modal-backdrop.js";
6
- import { MODAL_MAX_WIDTH_VIEWPORT as a, modalWidthClassName as o } from "../modal-body.js";
7
- import { modalTitleClassName as s } from "../../../../utils/modal-classes.js";
8
- import { HelpLink as c } from "../../../../ui/help-link.js";
9
- import { SettingsForm as l } from "./settings-form.js";
10
- import { jsx as u, jsxs as d } from "react/jsx-runtime";
4
+ import { buildAgentCanvasPath as r } from "../../../../utils/base-path.js";
5
+ import { DEFAULT_SETTINGS as i } from "../../../../services/settings.js";
6
+ import { ModalBackdrop as a } from "../modal-backdrop.js";
7
+ import { MODAL_MAX_WIDTH_VIEWPORT as o, modalWidthClassName as s } from "../modal-body.js";
8
+ import { modalTitleClassName as c } from "../../../../utils/modal-classes.js";
9
+ import { HelpLink as l } from "../../../../ui/help-link.js";
10
+ import { SettingsForm as u } from "./settings-form.js";
11
+ import { jsx as d, jsxs as f } from "react/jsx-runtime";
11
12
  //#region src/components/shared/modals/settings/settings-modal.tsx
12
- function f({ onClose: f, settings: p }) {
13
- let { t: m } = e("openhands");
14
- return /* @__PURE__ */ u(i, { children: /* @__PURE__ */ d("div", {
13
+ function p({ onClose: p, settings: m }) {
14
+ let { t: h } = e("openhands");
15
+ return /* @__PURE__ */ d(a, { children: /* @__PURE__ */ f("div", {
15
16
  "data-testid": "ai-config-modal",
16
- className: n("bg-[var(--oh-surface)] m-4 p-6 rounded-xl flex flex-col gap-[17px] border border-[var(--oh-border)] api-configuration-modal", o("md"), a),
17
+ className: n("bg-[var(--oh-surface)] m-4 p-6 rounded-xl flex flex-col gap-[17px] border border-[var(--oh-border)] api-configuration-modal", s("md"), o),
17
18
  children: [
18
- /* @__PURE__ */ u("span", {
19
- className: s,
20
- children: m(t.AI_SETTINGS$TITLE)
19
+ /* @__PURE__ */ d("span", {
20
+ className: c,
21
+ children: h(t.AI_SETTINGS$TITLE)
21
22
  }),
22
- /* @__PURE__ */ u(c, {
23
+ /* @__PURE__ */ d(l, {
23
24
  testId: "advanced-settings-link",
24
- text: `${m(t.SETTINGS$DESCRIPTION)}. ${m(t.SETTINGS$FOR_OTHER_OPTIONS)} ${m(t.COMMON$SEE)}`,
25
- linkText: m(t.COMMON$ADVANCED_SETTINGS),
26
- href: "/settings",
25
+ text: `${h(t.SETTINGS$DESCRIPTION)}. ${h(t.SETTINGS$FOR_OTHER_OPTIONS)} ${h(t.COMMON$SEE)}`,
26
+ linkText: h(t.COMMON$ADVANCED_SETTINGS),
27
+ href: r("/settings"),
27
28
  suffix: ".",
28
29
  size: "settings",
29
30
  linkColor: "white",
30
31
  suffixClassName: "text-white"
31
32
  }),
32
- /* @__PURE__ */ u(l, {
33
- settings: p || r,
34
- onClose: f
33
+ /* @__PURE__ */ d(u, {
34
+ settings: m || i,
35
+ onClose: p
35
36
  })
36
37
  ]
37
38
  }) });
38
39
  }
39
40
  //#endregion
40
- export { f as SettingsModal };
41
+ export { p as SettingsModal };
41
42
 
42
43
  //# sourceMappingURL=settings-modal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"settings-modal.js","names":[],"sources":["../../../../../src/components/shared/modals/settings/settings-modal.tsx"],"sourcesContent":["import { useTranslation } from \"react-i18next\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { ModalBackdrop } from \"../modal-backdrop\";\nimport { MODAL_MAX_WIDTH_VIEWPORT, modalWidthClassName } from \"../modal-body\";\nimport { cn } from \"#/utils/utils\";\nimport { SettingsForm } from \"./settings-form\";\nimport { Settings } from \"#/types/settings\";\nimport { DEFAULT_SETTINGS } from \"#/services/settings\";\nimport { HelpLink } from \"#/ui/help-link\";\nimport { modalTitleClassName } from \"#/utils/modal-classes\";\n\ninterface SettingsModalProps {\n settings?: Settings;\n onClose: () => void;\n}\n\nexport function SettingsModal({ onClose, settings }: SettingsModalProps) {\n const { t } = useTranslation(\"openhands\");\n\n return (\n <ModalBackdrop>\n <div\n data-testid=\"ai-config-modal\"\n className={cn(\n \"bg-[var(--oh-surface)] m-4 p-6 rounded-xl flex flex-col gap-[17px] border border-[var(--oh-border)] api-configuration-modal\",\n modalWidthClassName(\"md\"),\n MODAL_MAX_WIDTH_VIEWPORT,\n )}\n >\n <span className={modalTitleClassName}>\n {t(I18nKey.AI_SETTINGS$TITLE)}\n </span>\n <HelpLink\n testId=\"advanced-settings-link\"\n text={`${t(I18nKey.SETTINGS$DESCRIPTION)}. ${t(I18nKey.SETTINGS$FOR_OTHER_OPTIONS)} ${t(I18nKey.COMMON$SEE)}`}\n linkText={t(I18nKey.COMMON$ADVANCED_SETTINGS)}\n href=\"/settings\"\n suffix=\".\"\n size=\"settings\"\n linkColor=\"white\"\n suffixClassName=\"text-white\"\n />\n\n <SettingsForm\n settings={settings || DEFAULT_SETTINGS}\n onClose={onClose}\n />\n </div>\n </ModalBackdrop>\n );\n}\n"],"mappings":";;;;;;;;;;;AAgBA,SAAgB,EAAc,EAAE,YAAS,eAAgC;CACvE,IAAM,EAAE,SAAM,EAAe,YAAY;AAEzC,QACE,kBAAC,GAAD,EAAA,UACE,kBAAC,OAAD;EACE,eAAY;EACZ,WAAW,EACT,+HACA,EAAoB,KAAK,EACzB,EACD;YANH;GAQE,kBAAC,QAAD;IAAM,WAAW;cACd,EAAE,EAAQ,kBAAkB;IACxB,CAAA;GACP,kBAAC,GAAD;IACE,QAAO;IACP,MAAM,GAAG,EAAE,EAAQ,qBAAqB,CAAC,IAAI,EAAE,EAAQ,2BAA2B,CAAC,GAAG,EAAE,EAAQ,WAAW;IAC3G,UAAU,EAAE,EAAQ,yBAAyB;IAC7C,MAAK;IACL,QAAO;IACP,MAAK;IACL,WAAU;IACV,iBAAgB;IAChB,CAAA;GAEF,kBAAC,GAAD;IACE,UAAU,KAAY;IACb;IACT,CAAA;GACE;KACQ,CAAA"}
1
+ {"version":3,"file":"settings-modal.js","names":[],"sources":["../../../../../src/components/shared/modals/settings/settings-modal.tsx"],"sourcesContent":["import { useTranslation } from \"react-i18next\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { ModalBackdrop } from \"../modal-backdrop\";\nimport { MODAL_MAX_WIDTH_VIEWPORT, modalWidthClassName } from \"../modal-body\";\nimport { cn } from \"#/utils/utils\";\nimport { SettingsForm } from \"./settings-form\";\nimport { Settings } from \"#/types/settings\";\nimport { DEFAULT_SETTINGS } from \"#/services/settings\";\nimport { HelpLink } from \"#/ui/help-link\";\nimport { modalTitleClassName } from \"#/utils/modal-classes\";\nimport { buildAgentCanvasPath } from \"#/utils/base-path\";\n\ninterface SettingsModalProps {\n settings?: Settings;\n onClose: () => void;\n}\n\nexport function SettingsModal({ onClose, settings }: SettingsModalProps) {\n const { t } = useTranslation(\"openhands\");\n\n return (\n <ModalBackdrop>\n <div\n data-testid=\"ai-config-modal\"\n className={cn(\n \"bg-[var(--oh-surface)] m-4 p-6 rounded-xl flex flex-col gap-[17px] border border-[var(--oh-border)] api-configuration-modal\",\n modalWidthClassName(\"md\"),\n MODAL_MAX_WIDTH_VIEWPORT,\n )}\n >\n <span className={modalTitleClassName}>\n {t(I18nKey.AI_SETTINGS$TITLE)}\n </span>\n <HelpLink\n testId=\"advanced-settings-link\"\n text={`${t(I18nKey.SETTINGS$DESCRIPTION)}. ${t(I18nKey.SETTINGS$FOR_OTHER_OPTIONS)} ${t(I18nKey.COMMON$SEE)}`}\n linkText={t(I18nKey.COMMON$ADVANCED_SETTINGS)}\n href={buildAgentCanvasPath(\"/settings\")}\n suffix=\".\"\n size=\"settings\"\n linkColor=\"white\"\n suffixClassName=\"text-white\"\n />\n\n <SettingsForm\n settings={settings || DEFAULT_SETTINGS}\n onClose={onClose}\n />\n </div>\n </ModalBackdrop>\n );\n}\n"],"mappings":";;;;;;;;;;;;AAiBA,SAAgB,EAAc,EAAE,YAAS,eAAgC;CACvE,IAAM,EAAE,SAAM,EAAe,YAAY;AAEzC,QACE,kBAAC,GAAD,EAAA,UACE,kBAAC,OAAD;EACE,eAAY;EACZ,WAAW,EACT,+HACA,EAAoB,KAAK,EACzB,EACD;YANH;GAQE,kBAAC,QAAD;IAAM,WAAW;cACd,EAAE,EAAQ,kBAAkB;IACxB,CAAA;GACP,kBAAC,GAAD;IACE,QAAO;IACP,MAAM,GAAG,EAAE,EAAQ,qBAAqB,CAAC,IAAI,EAAE,EAAQ,2BAA2B,CAAC,GAAG,EAAE,EAAQ,WAAW;IAC3G,UAAU,EAAE,EAAQ,yBAAyB;IAC7C,MAAM,EAAqB,YAAY;IACvC,QAAO;IACP,MAAK;IACL,WAAU;IACV,iBAAgB;IAChB,CAAA;GAEF,kBAAC,GAAD;IACE,UAAU,KAAY;IACb;IACT,CAAA;GACE;KACQ,CAAA"}
@@ -1,2 +1,2 @@
1
- require(`../_virtual/_rolldown/runtime.cjs`);var e={_comment:`Single source of truth for version pins, ports, paths, and defaults shared across the npm and Docker install paths. Read by scripts/dev-safe.mjs, scripts/dev-with-automation.mjs, docker/entrypoint.sh (via generated defaults.env), and .github/workflows/docker.yml.`,versions:{agentServer:`1.35.0`,agentCanvas:`1.4.0`,automation:`1.1.6`},compatibility:{minimumAgentServer:`1.28.0`},constraints:{_comment:`Temporary upper bound on the agent-client-protocol (acp) transitive dependency. openhands-sdk 1.35.0 requires agent-client-protocol>=0.10.1 with no upper bound, but acp 0.11.0 reordered the ACP prompt() arguments and breaks the SDK's ACP client (a PromptRequest validation error surfaces as 'ACP error: 2 validation errors for PromptRequest'). Pin acp <0.11 until a fixed openhands-sdk ships. Consumed by scripts/dev-safe.mjs (agent-server uvx install) and .github/workflows/mock-llm-e2e.yml (mock ACP server venv).`,agentClientProtocol:`agent-client-protocol<0.11`},images:{agentServer:`ghcr.io/openhands/agent-server`,agentCanvas:`ghcr.io/openhands/agent-canvas`},ports:{agentServer:18e3,automation:18001,proxy:8e3},paths:{stateSubdir:`agent-canvas`,conversations:`agent-canvas/conversations`,bashEvents:`agent-canvas/bash_events`,automationDb:`automation/automations.db`},packages:{agentServer:`openhands-agent-server`,automation:`openhands-automation`,tools:`openhands-tools`,workspace:`openhands-workspace`}};exports.default=e;
1
+ require(`../_virtual/_rolldown/runtime.cjs`);var e={_comment:`Single source of truth for version pins, ports, paths, and defaults shared across the npm and Docker install paths. Read by scripts/dev-safe.mjs, scripts/dev-with-automation.mjs, docker/entrypoint.sh (via generated defaults.env), and .github/workflows/docker.yml.`,versions:{agentServer:`1.36.1`,agentCanvas:`1.5.1`,automation:`1.1.7`},compatibility:{minimumAgentServer:`1.28.0`},constraints:{_comment:`Temporary upper bound on the agent-client-protocol (acp) transitive dependency. openhands-sdk 1.35.0 requires agent-client-protocol>=0.10.1 with no upper bound, but acp 0.11.0 reordered the ACP prompt() arguments and breaks the SDK's ACP client (a PromptRequest validation error surfaces as 'ACP error: 2 validation errors for PromptRequest'). Pin acp <0.11 until a fixed openhands-sdk ships. Consumed by scripts/dev-safe.mjs (agent-server uvx install) and .github/workflows/mock-llm-e2e.yml (mock ACP server venv).`,agentClientProtocol:`agent-client-protocol<0.11`},images:{agentServer:`ghcr.io/openhands/agent-server`,agentCanvas:`ghcr.io/openhands/agent-canvas`},ports:{agentServer:18e3,automation:18001,proxy:8e3},paths:{stateSubdir:`agent-canvas`,conversations:`agent-canvas/conversations`,bashEvents:`agent-canvas/bash_events`,automationDb:`automation/automations.db`,canvasBasePath:`/canvas`},packages:{agentServer:`openhands-agent-server`,automation:`openhands-automation`,tools:`openhands-tools`,workspace:`openhands-workspace`}};exports.default=e;
2
2
  //# sourceMappingURL=defaults.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"defaults.cjs","names":[],"sources":["../../config/defaults.json"],"sourcesContent":["{\n \"_comment\": \"Single source of truth for version pins, ports, paths, and defaults shared across the npm and Docker install paths. Read by scripts/dev-safe.mjs, scripts/dev-with-automation.mjs, docker/entrypoint.sh (via generated defaults.env), and .github/workflows/docker.yml.\",\n \"versions\": {\n \"agentServer\": \"1.35.0\",\n \"agentCanvas\": \"1.4.0\",\n \"automation\": \"1.1.6\"\n },\n \"compatibility\": {\n \"minimumAgentServer\": \"1.28.0\"\n },\n \"constraints\": {\n \"_comment\": \"Temporary upper bound on the agent-client-protocol (acp) transitive dependency. openhands-sdk 1.35.0 requires agent-client-protocol>=0.10.1 with no upper bound, but acp 0.11.0 reordered the ACP prompt() arguments and breaks the SDK's ACP client (a PromptRequest validation error surfaces as 'ACP error: 2 validation errors for PromptRequest'). Pin acp <0.11 until a fixed openhands-sdk ships. Consumed by scripts/dev-safe.mjs (agent-server uvx install) and .github/workflows/mock-llm-e2e.yml (mock ACP server venv).\",\n \"agentClientProtocol\": \"agent-client-protocol<0.11\"\n },\n \"images\": {\n \"agentServer\": \"ghcr.io/openhands/agent-server\",\n \"agentCanvas\": \"ghcr.io/openhands/agent-canvas\"\n },\n \"ports\": {\n \"agentServer\": 18000,\n \"automation\": 18001,\n \"proxy\": 8000\n },\n \"paths\": {\n \"stateSubdir\": \"agent-canvas\",\n \"conversations\": \"agent-canvas/conversations\",\n \"bashEvents\": \"agent-canvas/bash_events\",\n \"automationDb\": \"automation/automations.db\"\n },\n \"packages\": {\n \"agentServer\": \"openhands-agent-server\",\n \"automation\": \"openhands-automation\",\n \"tools\": \"openhands-tools\",\n \"workspace\": \"openhands-workspace\"\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"defaults.cjs","names":[],"sources":["../../config/defaults.json"],"sourcesContent":["{\n \"_comment\": \"Single source of truth for version pins, ports, paths, and defaults shared across the npm and Docker install paths. Read by scripts/dev-safe.mjs, scripts/dev-with-automation.mjs, docker/entrypoint.sh (via generated defaults.env), and .github/workflows/docker.yml.\",\n \"versions\": {\n \"agentServer\": \"1.36.1\",\n \"agentCanvas\": \"1.5.1\",\n \"automation\": \"1.1.7\"\n },\n \"compatibility\": {\n \"minimumAgentServer\": \"1.28.0\"\n },\n \"constraints\": {\n \"_comment\": \"Temporary upper bound on the agent-client-protocol (acp) transitive dependency. openhands-sdk 1.35.0 requires agent-client-protocol>=0.10.1 with no upper bound, but acp 0.11.0 reordered the ACP prompt() arguments and breaks the SDK's ACP client (a PromptRequest validation error surfaces as 'ACP error: 2 validation errors for PromptRequest'). Pin acp <0.11 until a fixed openhands-sdk ships. Consumed by scripts/dev-safe.mjs (agent-server uvx install) and .github/workflows/mock-llm-e2e.yml (mock ACP server venv).\",\n \"agentClientProtocol\": \"agent-client-protocol<0.11\"\n },\n \"images\": {\n \"agentServer\": \"ghcr.io/openhands/agent-server\",\n \"agentCanvas\": \"ghcr.io/openhands/agent-canvas\"\n },\n \"ports\": {\n \"agentServer\": 18000,\n \"automation\": 18001,\n \"proxy\": 8000\n },\n \"paths\": {\n \"stateSubdir\": \"agent-canvas\",\n \"conversations\": \"agent-canvas/conversations\",\n \"bashEvents\": \"agent-canvas/bash_events\",\n \"automationDb\": \"automation/automations.db\",\n \"canvasBasePath\": \"/canvas\"\n },\n \"packages\": {\n \"agentServer\": \"openhands-agent-server\",\n \"automation\": \"openhands-automation\",\n \"tools\": \"openhands-tools\",\n \"workspace\": \"openhands-workspace\"\n }\n}\n"],"mappings":""}