@openhands/agent-canvas 1.10.0 → 1.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (531) hide show
  1. package/README.md +1 -1
  2. package/README.windows.md +2 -2
  3. package/build/assets/{acp-providers-DLe_gVDY.js → acp-providers-BkL3HWa3.js} +1 -1
  4. package/build/assets/{active-backend-context-B0wI7OzM.js → active-backend-context-B_bg5h9O.js} +1 -1
  5. package/build/assets/{agent-context-settings-CaQtdNA-.js → agent-context-settings-CzWS1DgR.js} +1 -1
  6. package/build/assets/{agent-profiles-settings-CvuErjp6.js → agent-profiles-settings-hd2cAIZM.js} +1 -1
  7. package/build/assets/agent-server-conversation-service.api-BheU4HX3.js +86 -0
  8. package/build/assets/{agent-settings-UE-U4Xii.js → agent-settings-D2J1dKVd.js} +1 -1
  9. package/build/assets/agent-settings-D_SVrWhI.js +1 -0
  10. package/build/assets/{alert-banner-BMaOtTCG.js → alert-banner-lrK-2_0Y.js} +1 -1
  11. package/build/assets/{api-key-entry-screen-Cy66vT4D.js → api-key-entry-screen-D70oJj2c.js} +1 -1
  12. package/build/assets/app-settings-D0OKHB3M.js +1 -0
  13. package/build/assets/{automation-detail-fuITm6i3.js → automation-detail-C0SxWTnQ.js} +3 -3
  14. package/build/assets/{automation-export-CRq40mux.js → automation-export-BjQa_fT6.js} +1 -1
  15. package/build/assets/{automation-setup-route-EXDazOHW.js → automation-setup-route-BzCNpljP.js} +1 -1
  16. package/build/assets/{automation-templates-BArZsaxP.js → automation-templates-D9gs6ihu.js} +1 -1
  17. package/build/assets/{automations-list-CG4HKOTn.js → automations-list-dZg8zOCl.js} +1 -1
  18. package/build/assets/{back-nav-button-BZB6H7xz.js → back-nav-button-B3pYwmUJ.js} +1 -1
  19. package/build/assets/{backend-form-modal-B_lXjOGa.js → backend-form-modal-HwclKrUS.js} +1 -1
  20. package/build/assets/{backend-synced-settings-badge-B_NXJ3u1.js → backend-synced-settings-badge-YI3k09Wr.js} +1 -1
  21. package/build/assets/{badge-C64c-7PO.js → badge-Dpn3-LTV.js} +1 -1
  22. package/build/assets/{base-modal-C0RQPug5.js → base-modal-3NmIOKDm.js} +1 -1
  23. package/build/assets/{brand-button-DJmFCyMK.js → brand-button-CJcwjnfb.js} +1 -1
  24. package/build/assets/{browser-D3gd2n83.js → browser--eoQOo4M.js} +1 -1
  25. package/build/assets/{browser-tab-BicAWuJ1.js → browser-tab-4CPdj3J3.js} +1 -1
  26. package/build/assets/{chat-send-button-CCrH1E8u.js → chat-send-button-B8n6-DQA.js} +1 -1
  27. package/build/assets/{circle-plus-check-toggle-CB_sNERY.js → circle-plus-check-toggle-BVzv5EkZ.js} +1 -1
  28. package/build/assets/{cloud-funnel-analytics-XynamQGU.js → cloud-funnel-analytics-CcSez21r.js} +1 -1
  29. package/build/assets/{combobox-caret-Bwiifgjs.js → combobox-caret-BlmRwiM8.js} +1 -1
  30. package/build/assets/command-menu-BKOLj-TC.js +1 -0
  31. package/build/assets/{condenser-settings-cNGy75gq.js → condenser-settings-DLQogFnB.js} +1 -1
  32. package/build/assets/{confirmation-modal-BATFmFyP.js → confirmation-modal-DAH0XtOp.js} +1 -1
  33. package/build/assets/{context-menu-list-item-DhJCcBA0.js → context-menu-list-item-BQhmFVEK.js} +1 -1
  34. package/build/assets/{conversation-Csdxh9Xt.js → conversation-Cmyw9bFh.js} +4 -4
  35. package/build/assets/conversation-CvoGZ5vC.js +1 -0
  36. package/build/assets/conversation-panel-CvoGZ5vC.js +1 -0
  37. package/build/assets/{conversation-state-store-C2QzhPaK.js → conversation-state-store-CtgILxWF.js} +1 -1
  38. package/build/assets/{conversation-tab-empty-state-D3fb5xIA.js → conversation-tab-empty-state-C9sfDOlt.js} +1 -1
  39. package/build/assets/{copy-to-clipboard-button-c4MQwKGj.js → copy-to-clipboard-button-DatoElj8.js} +1 -1
  40. package/build/assets/{device-verify-oFpQoLgm.js → device-verify-BIjXeW9N.js} +1 -1
  41. package/build/assets/{dropdown-classes-f91ARMV1.js → dropdown-classes-zFW7qPSK.js} +1 -1
  42. package/build/assets/{entry.client-BCzY2Bf3.js → entry.client-EBn3ZtNP.js} +2 -2
  43. package/build/assets/{enum-filter-dropdown-HG3q3rkV.js → enum-filter-dropdown-CctILg5t.js} +1 -1
  44. package/build/assets/{environment-switch-overlay-CquZXolz.js → environment-switch-overlay-Cvmo6clk.js} +1 -1
  45. package/build/assets/{extensions-hub-BeweE0PW.js → extensions-hub-BZ3HYztk.js} +1 -1
  46. package/build/assets/{extensions-navigation-Dd58NlUF.js → extensions-navigation-Bnx32WAb.js} +1 -1
  47. package/build/assets/{files-tab-CLLG55-q.js → files-tab-D5zuU5TY.js} +1 -1
  48. package/build/assets/{form-control-classes-pHtZUI6K.js → form-control-classes-DLN3Qgub.js} +1 -1
  49. package/build/assets/format-model-name-BN_rx1Y3.js +1 -0
  50. package/build/assets/{format-relative-time-6-3uvOXe.js → format-relative-time-BerVamGl.js} +1 -1
  51. package/build/assets/{git-provider-icon-wg7ShB98.js → git-provider-icon-zuKz2cwo.js} +1 -1
  52. package/build/assets/{git-repo-dropdown-CWnaUyxL.js → git-repo-dropdown-B5VnMftu.js} +1 -1
  53. package/build/assets/git-repo-dropdown-Bo7ciSNX.js +1 -0
  54. package/build/assets/{highlighted-source-view-DBtI3por.js → highlighted-source-view-CgJfD5VT.js} +1 -1
  55. package/build/assets/home-DqyeeFA_.js +1 -0
  56. package/build/assets/{home-BpZQkDWM.js → home-Y0aDou-a.js} +1 -1
  57. package/build/assets/{home-store-DM4qw1lF.js → home-store-Cubdq0uP.js} +1 -1
  58. package/build/assets/index-home-DqyeeFA_.js +1 -0
  59. package/build/assets/install-server-modal-DW6dSyGr.js +1 -0
  60. package/build/assets/{kebab-menu-item-content-By16Tm_0.js → kebab-menu-item-content-CKydZrbH.js} +1 -1
  61. package/build/assets/{launch-C9uijypN.js → launch-c4GEP8oo.js} +1 -1
  62. package/build/assets/llm-not-configured-banner-DCE_0B4I.js +27 -0
  63. package/build/assets/llm-settings-8eWBF3Ij.js +1 -0
  64. package/build/assets/llm-settings-D9ko42Pi.js +1 -0
  65. package/build/assets/{llm-subscription-service-DwjJ8-_X.js → llm-subscription-service-B3K-97lP.js} +1 -1
  66. package/build/assets/{loading-spinner-6Yj-YyoS.js → loading-spinner-CN3riY7k.js} +1 -1
  67. package/build/assets/{manage-backends-modal-DrwErS0N.js → manage-backends-modal-DTCME_Pu.js} +1 -1
  68. package/build/assets/manifest-e1c3bc3b.js +1 -0
  69. package/build/assets/{manifest-subpage-layout-CtqVwIvJ.js → manifest-subpage-layout-Ds7G5GZ8.js} +1 -1
  70. package/build/assets/map-provider-7Bp2aih5.js +1 -0
  71. package/build/assets/markdown-renderer-DzvgdZey.js +8 -0
  72. package/build/assets/mcp-Da7wFU7A.js +9 -0
  73. package/build/assets/{mcp-marketplace-utils-BMnYz0Gc.js → mcp-marketplace-utils-DSLou4n7.js} +1 -1
  74. package/build/assets/messages-B2l0qLVk.js +40 -0
  75. package/build/assets/{modal-body-BHGCSAtj.js → modal-body-duRaxj_K.js} +1 -1
  76. package/build/assets/{modal-classes-DSTLuxkA.js → modal-classes-CLEXO6dj.js} +1 -1
  77. package/build/assets/{modal-close-button-dheWZ2ys.js → modal-close-button-D0aT02hs.js} +1 -1
  78. package/build/assets/npm-Cswluf6-.js +1 -0
  79. package/build/assets/{onboarding-5CZvRBbh.js → onboarding-BKbTYlW1.js} +1 -1
  80. package/build/assets/{onboarding-modal-CD2ehuxt.js → onboarding-modal-DrrGlEQq.js} +1 -1
  81. package/build/assets/{organization-service.api-Dsuoep0g.js → organization-service.api-DK8csGvK.js} +1 -1
  82. package/build/assets/{planner-tab-DeO7Thb0.js → planner-tab-D-mZ1I7n.js} +1 -1
  83. package/build/assets/{plugins-management-service-C9f75R6X.js → plugins-management-service-CywqyfLK.js} +1 -1
  84. package/build/assets/{profiles-service.api-Dl20_2IM.js → profiles-service.api-vcE_jJCe.js} +1 -1
  85. package/build/assets/{providers-CeuhK46N.js → providers-CdrPPm0z.js} +1 -1
  86. package/build/assets/{proxy-CIGI9zQC.js → proxy-b4aqL4SX.js} +1 -1
  87. package/build/assets/recommended-automations-launcher-DIYgUdMm.js +1 -0
  88. package/build/assets/{root-BQPNqNvD.js → root-CBBi6IAe.js} +2 -2
  89. package/build/assets/root-CRK9fOFd.css +1 -0
  90. package/build/assets/root-layout-BFN2rCOy.js +2 -0
  91. package/build/assets/{schema-field-z2vSLuLo.js → schema-field-Z-rMg9ti.js} +1 -1
  92. package/build/assets/{sdk-section-page-BnCXAytf.js → sdk-section-page-m_cjygxR.js} +1 -1
  93. package/build/assets/{secrets-service-DGUNlwQd.js → secrets-service-BHF4fxML.js} +1 -1
  94. package/build/assets/{secrets-settings-DUmML_dK.js → secrets-settings-aBGXtQhX.js} +1 -1
  95. package/build/assets/{segmented-toggle-eSofF7gn.js → segmented-toggle-SmvsR3jW.js} +1 -1
  96. package/build/assets/settings-CZPGNens.js +1 -0
  97. package/build/assets/{settings-dropdown-input-Cx4g7Xfl.js → settings-dropdown-input-TWIeiG02.js} +1 -1
  98. package/build/assets/{settings-index-BECdgecg.js → settings-index-Dtlegd6s.js} +1 -1
  99. package/build/assets/{settings-input-BQY115xH.js → settings-input-D61Vzp9e.js} +1 -1
  100. package/build/assets/{settings-list-classes-C9cLrrcc.js → settings-list-classes-sE0ASr1s.js} +1 -1
  101. package/build/assets/{settings-modal-ChBJNTdd.js → settings-modal-CalzJP2l.js} +1 -1
  102. package/build/assets/{settings-service.api-Dz9cZyvx.js → settings-service.api-DfPYaxZJ.js} +1 -1
  103. package/build/assets/{settings-switch-BIodMVz9.js → settings-switch-Drt-rF5s.js} +1 -1
  104. package/build/assets/{settings-utils-BL_Z9uIe.js → settings-utils-gw2ppAvw.js} +1 -1
  105. package/build/assets/{shared-conversation-CSF0aTuE.js → shared-conversation-BIAcuORk.js} +1 -1
  106. package/build/assets/{wrench-DRitTfwe.js → shield-check-D2cpEpv3.js} +1 -1
  107. package/build/assets/{sidebar-layout-DEycoFd_.js → sidebar-layout-Dxg6zc2K.js} +1 -1
  108. package/build/assets/{sidebar-mobile-menu-toggle-DeRvTupV.js → sidebar-mobile-menu-toggle-C6HpQ55l.js} +1 -1
  109. package/build/assets/{sidebar-nav-link-BjpQ-NVc.js → sidebar-nav-link-CxLoG-dG.js} +1 -1
  110. package/build/assets/sidebar-store-BJeYY-E9.js +1 -0
  111. package/build/assets/{skill-card-pill-row-BH6fPGba.js → skill-card-pill-row-B_BYBONu.js} +1 -1
  112. package/build/assets/{skill-icon-badge-D4uznfjU.js → skill-icon-badge-CN41Hy9l.js} +1 -1
  113. package/build/assets/{skill-scope-DH_AUUUP.js → skill-scope-Dt1V5X2p.js} +1 -1
  114. package/build/assets/{skills-plugins-vfvOk34h.js → skills-plugins-B-H0cCOP.js} +1 -1
  115. package/build/assets/skills-settings-DthdIDUb.js +2 -0
  116. package/build/assets/{styled-tooltip-CQ9JEFiO.js → styled-tooltip-C5C07RQC.js} +1 -1
  117. package/build/assets/{task-list-tab-DeF_uXdw.js → task-list-tab-BTde81Iu.js} +1 -1
  118. package/build/assets/{terminal-DRc4rup7.js → terminal-DRrJo-cR.js} +1 -1
  119. package/build/assets/{toggle-switch--8n8NeV_.js → toggle-switch-CIioisto.js} +1 -1
  120. package/build/assets/{typography-BSbUhJPn.js → typography-D9tiHct7.js} +1 -1
  121. package/build/assets/{use-acp-credential-form-BGKFi1VL.js → use-acp-credential-form-DGyo0QvL.js} +1 -1
  122. package/build/assets/{use-activate-agent-profile-2nvALjC-.js → use-activate-agent-profile-DrPzIKJF.js} +1 -1
  123. package/build/assets/{use-agent-profiles-BlQA67MW.js → use-agent-profiles-B37XWDLq.js} +1 -1
  124. package/build/assets/{use-can-manage-org-profiles-Clw5Dh1s.js → use-can-manage-org-profiles-BzE28H3x.js} +1 -1
  125. package/build/assets/{use-cloud-current-user-id-B8AQSQFM.js → use-cloud-current-user-id-U6HPjy50.js} +1 -1
  126. package/build/assets/{use-config-C3zGuUQI.js → use-config-DapX3pjC.js} +1 -1
  127. package/build/assets/{use-create-conversation-FaP0kUpg.js → use-create-conversation-CRf1dCm5.js} +1 -1
  128. package/build/assets/{use-create-secret-CgQ3pXd6.js → use-create-secret-DcpT3RPw.js} +1 -1
  129. package/build/assets/{use-llm-profiles-C-tDO6UB.js → use-llm-profiles-CHxqoHiN.js} +1 -1
  130. package/build/assets/{use-manifest-capabilities-DLP5wCxp.js → use-manifest-capabilities-zihHDbMW.js} +1 -1
  131. package/build/assets/{use-onboarding-completion-BiCdXvlU.js → use-onboarding-completion-6kWOW3ul.js} +1 -1
  132. package/build/assets/{use-plugins-marketplace-DRFNLBlr.js → use-plugins-marketplace-CqkR8kLE.js} +1 -1
  133. package/build/assets/{use-save-agent-profile-CaGVAudI.js → use-save-agent-profile-CH9_EXQG.js} +1 -1
  134. package/build/assets/{use-save-settings-C9B8Y-h3.js → use-save-settings-DIEurJ3D.js} +1 -1
  135. package/build/assets/{use-settings-3RcgdUuZ.js → use-settings-BmLzQjnC.js} +1 -1
  136. package/build/assets/use-settings-nav-items-DV9qgeu7.js +16 -0
  137. package/build/assets/{use-tracking-CTtkLAmx.js → use-tracking-salbPJxT.js} +1 -1
  138. package/build/assets/{use-user-conversation-Bei82QsZ.js → use-user-conversation-Dt-W6uNw.js} +1 -1
  139. package/build/assets/utils-DPQfkd-7.js +1 -0
  140. package/build/assets/{verification-settings-nD61Ijph.js → verification-settings-oi54wEc1.js} +1 -1
  141. package/build/assets/wrench-B1_H-tL1.js +1 -0
  142. package/build/index.html +4 -4
  143. package/build/locales/ar/openhands.json +39 -2
  144. package/build/locales/ca/openhands.json +39 -2
  145. package/build/locales/de/openhands.json +39 -2
  146. package/build/locales/en/openhands.json +39 -2
  147. package/build/locales/es/openhands.json +39 -2
  148. package/build/locales/fr/openhands.json +39 -2
  149. package/build/locales/it/openhands.json +39 -2
  150. package/build/locales/ja/openhands.json +39 -2
  151. package/build/locales/ko-KR/openhands.json +39 -2
  152. package/build/locales/no/openhands.json +39 -2
  153. package/build/locales/pt/openhands.json +39 -2
  154. package/build/locales/tr/openhands.json +39 -2
  155. package/build/locales/uk/openhands.json +39 -2
  156. package/build/locales/zh-CN/openhands.json +39 -2
  157. package/build/locales/zh-TW/openhands.json +39 -2
  158. package/config/defaults.json +1 -1
  159. package/dist/api/agent-server-adapter.cjs +3 -3
  160. package/dist/api/agent-server-adapter.cjs.map +1 -1
  161. package/dist/api/agent-server-adapter.d.ts +32 -5
  162. package/dist/api/agent-server-adapter.js +120 -91
  163. package/dist/api/agent-server-adapter.js.map +1 -1
  164. package/dist/api/cloud/conversation-service.api.cjs +1 -1
  165. package/dist/api/cloud/conversation-service.api.cjs.map +1 -1
  166. package/dist/api/cloud/conversation-service.api.d.ts +19 -2
  167. package/dist/api/cloud/conversation-service.api.js +51 -47
  168. package/dist/api/cloud/conversation-service.api.js.map +1 -1
  169. package/dist/api/conversation-file-upload.api.cjs +1 -1
  170. package/dist/api/conversation-file-upload.api.js +10 -10
  171. package/dist/api/conversation-service/agent-server-conversation-service.api.cjs +1 -1
  172. package/dist/api/conversation-service/agent-server-conversation-service.api.cjs.map +1 -1
  173. package/dist/api/conversation-service/agent-server-conversation-service.api.js +55 -61
  174. package/dist/api/conversation-service/agent-server-conversation-service.api.js.map +1 -1
  175. package/dist/api/event-service/event-service.api.cjs +1 -1
  176. package/dist/api/event-service/event-service.api.js +12 -12
  177. package/dist/api/launch-child-conversation-client-tool.cjs +47 -0
  178. package/dist/api/launch-child-conversation-client-tool.cjs.map +1 -0
  179. package/dist/api/launch-child-conversation-client-tool.d.ts +3 -0
  180. package/dist/api/launch-child-conversation-client-tool.js +93 -0
  181. package/dist/api/launch-child-conversation-client-tool.js.map +1 -0
  182. package/dist/api/open-hands.types.d.ts +1 -1
  183. package/dist/api/workspace-upload-path.cjs +1 -1
  184. package/dist/api/workspace-upload-path.js +8 -8
  185. package/dist/components/conversation-events/chat/event-content-helpers/get-action-event-title.cjs +1 -1
  186. package/dist/components/conversation-events/chat/event-content-helpers/get-action-event-title.cjs.map +1 -1
  187. package/dist/components/conversation-events/chat/event-content-helpers/get-action-event-title.js +24 -18
  188. package/dist/components/conversation-events/chat/event-content-helpers/get-action-event-title.js.map +1 -1
  189. package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.cjs +1 -1
  190. package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.cjs.map +1 -1
  191. package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.js +5 -0
  192. package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.js.map +1 -1
  193. package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.cjs +2 -2
  194. package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.cjs.map +1 -1
  195. package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.js +11 -7
  196. package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.js.map +1 -1
  197. package/dist/components/features/chat/components/chat-input-llm-profile-picker.cjs +1 -1
  198. package/dist/components/features/chat/components/chat-input-llm-profile-picker.cjs.map +1 -1
  199. package/dist/components/features/chat/components/chat-input-llm-profile-picker.js +61 -60
  200. package/dist/components/features/chat/components/chat-input-llm-profile-picker.js.map +1 -1
  201. package/dist/components/features/chat/model-messages.cjs +1 -1
  202. package/dist/components/features/chat/model-messages.cjs.map +1 -1
  203. package/dist/components/features/chat/model-messages.js +26 -25
  204. package/dist/components/features/chat/model-messages.js.map +1 -1
  205. package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.cjs +1 -2
  206. package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.cjs.map +1 -1
  207. package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.d.ts +2 -8
  208. package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.js +50 -53
  209. package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.js.map +1 -1
  210. package/dist/components/features/conversation-panel/conversation-card/conversation-card-meta-chip.cjs +2 -0
  211. package/dist/components/features/conversation-panel/conversation-card/conversation-card-meta-chip.cjs.map +1 -0
  212. package/dist/components/features/conversation-panel/conversation-card/conversation-card-meta-chip.d.ts +12 -0
  213. package/dist/components/features/conversation-panel/conversation-card/conversation-card-meta-chip.js +6 -0
  214. package/dist/components/features/conversation-panel/conversation-card/conversation-card-meta-chip.js.map +1 -0
  215. package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.cjs +1 -1
  216. package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.cjs.map +1 -1
  217. package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.d.ts +16 -1
  218. package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.js +95 -78
  219. package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.js.map +1 -1
  220. package/dist/components/features/conversation-panel/conversation-card/conversation-repo-link.cjs +1 -1
  221. package/dist/components/features/conversation-panel/conversation-card/conversation-repo-link.cjs.map +1 -1
  222. package/dist/components/features/conversation-panel/conversation-card/conversation-repo-link.js +40 -38
  223. package/dist/components/features/conversation-panel/conversation-card/conversation-repo-link.js.map +1 -1
  224. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.cjs +2 -0
  225. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.cjs.map +1 -0
  226. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.d.ts +14 -0
  227. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.js +167 -0
  228. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.js.map +1 -0
  229. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.cjs +2 -0
  230. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.cjs.map +1 -0
  231. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.d.ts +63 -0
  232. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.js +66 -0
  233. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.js.map +1 -0
  234. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-icons.cjs +2 -0
  235. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-icons.cjs.map +1 -0
  236. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-icons.d.ts +15 -0
  237. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-icons.js +117 -0
  238. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-icons.js.map +1 -0
  239. package/dist/components/features/conversation-panel/conversation-card/no-repository.cjs +1 -1
  240. package/dist/components/features/conversation-panel/conversation-card/no-repository.cjs.map +1 -1
  241. package/dist/components/features/conversation-panel/conversation-card/no-repository.js +30 -19
  242. package/dist/components/features/conversation-panel/conversation-card/no-repository.js.map +1 -1
  243. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.cjs +1 -1
  244. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.cjs.map +1 -1
  245. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.d.ts +7 -2
  246. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.js +146 -104
  247. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.js.map +1 -1
  248. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.cjs +1 -1
  249. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.cjs.map +1 -1
  250. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.d.ts +20 -0
  251. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.js +53 -27
  252. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.js.map +1 -1
  253. package/dist/components/features/conversation-panel/conversation-panel.cjs +1 -1
  254. package/dist/components/features/conversation-panel/conversation-panel.cjs.map +1 -1
  255. package/dist/components/features/conversation-panel/conversation-panel.js +226 -213
  256. package/dist/components/features/conversation-panel/conversation-panel.js.map +1 -1
  257. package/dist/components/features/settings/agent-canvas-update-card.cjs +1 -1
  258. package/dist/components/features/settings/agent-canvas-update-card.cjs.map +1 -1
  259. package/dist/components/features/settings/agent-canvas-update-card.d.ts +10 -5
  260. package/dist/components/features/settings/agent-canvas-update-card.js +223 -149
  261. package/dist/components/features/settings/agent-canvas-update-card.js.map +1 -1
  262. package/dist/components/features/settings/agent-canvas-version-modal.cjs +2 -0
  263. package/dist/components/features/settings/agent-canvas-version-modal.cjs.map +1 -0
  264. package/dist/components/features/settings/agent-canvas-version-modal.d.ts +11 -0
  265. package/dist/components/features/settings/agent-canvas-version-modal.js +166 -0
  266. package/dist/components/features/settings/agent-canvas-version-modal.js.map +1 -0
  267. package/dist/components/features/settings/agent-canvas-version-tile.cjs +2 -0
  268. package/dist/components/features/settings/agent-canvas-version-tile.cjs.map +1 -0
  269. package/dist/components/features/settings/agent-canvas-version-tile.d.ts +13 -0
  270. package/dist/components/features/settings/agent-canvas-version-tile.js +60 -0
  271. package/dist/components/features/settings/agent-canvas-version-tile.js.map +1 -0
  272. package/dist/components/features/settings/llm-profiles/profile-row.cjs +1 -1
  273. package/dist/components/features/settings/llm-profiles/profile-row.js +1 -0
  274. package/dist/components/features/settings/settings-desktop-sidebar.cjs +1 -1
  275. package/dist/components/features/settings/settings-desktop-sidebar.cjs.map +1 -1
  276. package/dist/components/features/settings/settings-desktop-sidebar.js +1 -1
  277. package/dist/components/features/settings/settings-desktop-sidebar.js.map +1 -1
  278. package/dist/components/features/settings/settings-mobile-drawer.cjs +1 -1
  279. package/dist/components/features/settings/settings-mobile-drawer.cjs.map +1 -1
  280. package/dist/components/features/settings/settings-mobile-drawer.js +1 -1
  281. package/dist/components/features/settings/settings-mobile-drawer.js.map +1 -1
  282. package/dist/components/features/sidebar/sidebar-rail-body.cjs +1 -1
  283. package/dist/components/features/sidebar/sidebar-rail-body.cjs.map +1 -1
  284. package/dist/components/features/sidebar/sidebar-rail-body.js +109 -108
  285. package/dist/components/features/sidebar/sidebar-rail-body.js.map +1 -1
  286. package/dist/components/features/skills/extensions-navigation.cjs +1 -1
  287. package/dist/components/features/skills/extensions-navigation.cjs.map +1 -1
  288. package/dist/components/features/skills/extensions-navigation.js +9 -9
  289. package/dist/components/features/skills/extensions-navigation.js.map +1 -1
  290. package/dist/components/shared/modals/settings/model-selector.cjs +1 -1
  291. package/dist/components/shared/modals/settings/model-selector.cjs.map +1 -1
  292. package/dist/components/shared/modals/settings/model-selector.js +154 -98
  293. package/dist/components/shared/modals/settings/model-selector.js.map +1 -1
  294. package/dist/config/defaults.cjs +1 -1
  295. package/dist/config/defaults.cjs.map +1 -1
  296. package/dist/config/defaults.js +1 -1
  297. package/dist/config/defaults.js.map +1 -1
  298. package/dist/constants/child-conversation.cjs +2 -0
  299. package/dist/constants/child-conversation.cjs.map +1 -0
  300. package/dist/constants/child-conversation.d.ts +29 -0
  301. package/dist/constants/child-conversation.js +6 -0
  302. package/dist/constants/child-conversation.js.map +1 -0
  303. package/dist/contexts/conversation-websocket-context.cjs +3 -3
  304. package/dist/contexts/conversation-websocket-context.cjs.map +1 -1
  305. package/dist/contexts/conversation-websocket-context.js +189 -188
  306. package/dist/contexts/conversation-websocket-context.js.map +1 -1
  307. package/dist/hooks/chat/use-model-interceptor.cjs +1 -1
  308. package/dist/hooks/chat/use-model-interceptor.js +6 -6
  309. package/dist/hooks/chat/use-slash-command.cjs +1 -1
  310. package/dist/hooks/chat/use-slash-command.cjs.map +1 -1
  311. package/dist/hooks/chat/use-slash-command.js +61 -60
  312. package/dist/hooks/chat/use-slash-command.js.map +1 -1
  313. package/dist/hooks/mutation/use-create-conversation.cjs +1 -1
  314. package/dist/hooks/mutation/use-create-conversation.js +6 -6
  315. package/dist/i18n/declaration.cjs +1 -1
  316. package/dist/i18n/declaration.cjs.map +1 -1
  317. package/dist/i18n/declaration.d.ts +38 -1
  318. package/dist/i18n/declaration.js +1 -1
  319. package/dist/i18n/declaration.js.map +1 -1
  320. package/dist/i18n/translation.cjs +2 -2
  321. package/dist/i18n/translation.cjs.map +1 -1
  322. package/dist/i18n/translation.js +644 -15
  323. package/dist/i18n/translation.js.map +1 -1
  324. package/dist/icons/docker.cjs +2 -0
  325. package/dist/icons/docker.cjs.map +1 -0
  326. package/dist/icons/docker.js +19 -0
  327. package/dist/icons/docker.js.map +1 -0
  328. package/dist/icons/npm.cjs +2 -0
  329. package/dist/icons/npm.cjs.map +1 -0
  330. package/dist/icons/npm.js +19 -0
  331. package/dist/icons/npm.js.map +1 -0
  332. package/dist/locales/ar/openhands.json +39 -2
  333. package/dist/locales/ca/openhands.json +39 -2
  334. package/dist/locales/de/openhands.json +39 -2
  335. package/dist/locales/en/openhands.json +39 -2
  336. package/dist/locales/es/openhands.json +39 -2
  337. package/dist/locales/fr/openhands.json +39 -2
  338. package/dist/locales/it/openhands.json +39 -2
  339. package/dist/locales/ja/openhands.json +39 -2
  340. package/dist/locales/ko-KR/openhands.json +39 -2
  341. package/dist/locales/no/openhands.json +39 -2
  342. package/dist/locales/pt/openhands.json +39 -2
  343. package/dist/locales/tr/openhands.json +39 -2
  344. package/dist/locales/uk/openhands.json +39 -2
  345. package/dist/locales/zh-CN/openhands.json +39 -2
  346. package/dist/locales/zh-TW/openhands.json +39 -2
  347. package/dist/node_modules/@openhands/typescript-client/dist/index.cjs +1 -1
  348. package/dist/node_modules/@openhands/typescript-client/dist/index.js +1 -1
  349. package/dist/node_modules/lucide-react/dist/esm/icons/briefcase.cjs +2 -0
  350. package/dist/node_modules/lucide-react/dist/esm/icons/briefcase.cjs.map +1 -0
  351. package/dist/node_modules/lucide-react/dist/esm/icons/briefcase.js +16 -0
  352. package/dist/node_modules/lucide-react/dist/esm/icons/briefcase.js.map +1 -0
  353. package/dist/node_modules/lucide-react/dist/esm/icons/building-2.cjs +2 -0
  354. package/dist/node_modules/lucide-react/dist/esm/icons/building-2.cjs.map +1 -0
  355. package/dist/node_modules/lucide-react/dist/esm/icons/building-2.js +27 -0
  356. package/dist/node_modules/lucide-react/dist/esm/icons/building-2.js.map +1 -0
  357. package/dist/node_modules/lucide-react/dist/esm/icons/circle-arrow-up.cjs +2 -0
  358. package/dist/node_modules/lucide-react/dist/esm/icons/circle-arrow-up.cjs.map +1 -0
  359. package/dist/node_modules/lucide-react/dist/esm/icons/circle-arrow-up.js +21 -0
  360. package/dist/node_modules/lucide-react/dist/esm/icons/circle-arrow-up.js.map +1 -0
  361. package/dist/node_modules/lucide-react/dist/esm/icons/circle-user-round.cjs +2 -0
  362. package/dist/node_modules/lucide-react/dist/esm/icons/circle-user-round.cjs.map +1 -0
  363. package/dist/node_modules/lucide-react/dist/esm/icons/circle-user-round.js +23 -0
  364. package/dist/node_modules/lucide-react/dist/esm/icons/circle-user-round.js.map +1 -0
  365. package/dist/node_modules/lucide-react/dist/esm/icons/cloud-cog.cjs +2 -0
  366. package/dist/node_modules/lucide-react/dist/esm/icons/cloud-cog.cjs.map +1 -0
  367. package/dist/node_modules/lucide-react/dist/esm/icons/cloud-cog.js +43 -0
  368. package/dist/node_modules/lucide-react/dist/esm/icons/cloud-cog.js.map +1 -0
  369. package/dist/node_modules/lucide-react/dist/esm/icons/earth.cjs +2 -0
  370. package/dist/node_modules/lucide-react/dist/esm/icons/earth.cjs.map +1 -0
  371. package/dist/node_modules/lucide-react/dist/esm/icons/earth.js +25 -0
  372. package/dist/node_modules/lucide-react/dist/esm/icons/earth.js.map +1 -0
  373. package/dist/node_modules/lucide-react/dist/esm/icons/flag.cjs +2 -0
  374. package/dist/node_modules/lucide-react/dist/esm/icons/flag.cjs.map +1 -0
  375. package/dist/node_modules/lucide-react/dist/esm/icons/flag.js +9 -0
  376. package/dist/node_modules/lucide-react/dist/esm/icons/flag.js.map +1 -0
  377. package/dist/node_modules/lucide-react/dist/esm/icons/folder-git-2.cjs +2 -0
  378. package/dist/node_modules/lucide-react/dist/esm/icons/folder-git-2.cjs.map +1 -0
  379. package/dist/node_modules/lucide-react/dist/esm/icons/folder-git-2.js +27 -0
  380. package/dist/node_modules/lucide-react/dist/esm/icons/folder-git-2.js.map +1 -0
  381. package/dist/node_modules/lucide-react/dist/esm/icons/folder-key.cjs +2 -0
  382. package/dist/node_modules/lucide-react/dist/esm/icons/folder-key.cjs.map +1 -0
  383. package/dist/node_modules/lucide-react/dist/esm/icons/folder-key.js +25 -0
  384. package/dist/node_modules/lucide-react/dist/esm/icons/folder-key.js.map +1 -0
  385. package/dist/node_modules/lucide-react/dist/esm/icons/git-pull-request.cjs +2 -0
  386. package/dist/node_modules/lucide-react/dist/esm/icons/git-pull-request.cjs.map +1 -0
  387. package/dist/node_modules/lucide-react/dist/esm/icons/git-pull-request.js +30 -0
  388. package/dist/node_modules/lucide-react/dist/esm/icons/git-pull-request.js.map +1 -0
  389. package/dist/node_modules/lucide-react/dist/esm/icons/hash.cjs +2 -0
  390. package/dist/node_modules/lucide-react/dist/esm/icons/hash.cjs.map +1 -0
  391. package/dist/node_modules/lucide-react/dist/esm/icons/hash.js +35 -0
  392. package/dist/node_modules/lucide-react/dist/esm/icons/hash.js.map +1 -0
  393. package/dist/node_modules/lucide-react/dist/esm/icons/house.cjs +2 -0
  394. package/dist/node_modules/lucide-react/dist/esm/icons/house.cjs.map +1 -0
  395. package/dist/node_modules/lucide-react/dist/esm/icons/house.js +12 -0
  396. package/dist/node_modules/lucide-react/dist/esm/icons/house.js.map +1 -0
  397. package/dist/node_modules/lucide-react/dist/esm/icons/id-card.cjs +2 -0
  398. package/dist/node_modules/lucide-react/dist/esm/icons/id-card.cjs.map +1 -0
  399. package/dist/node_modules/lucide-react/dist/esm/icons/id-card.js +33 -0
  400. package/dist/node_modules/lucide-react/dist/esm/icons/id-card.js.map +1 -0
  401. package/dist/node_modules/lucide-react/dist/esm/icons/key-round.cjs +2 -0
  402. package/dist/node_modules/lucide-react/dist/esm/icons/key-round.cjs.map +1 -0
  403. package/dist/node_modules/lucide-react/dist/esm/icons/key-round.js +15 -0
  404. package/dist/node_modules/lucide-react/dist/esm/icons/key-round.js.map +1 -0
  405. package/dist/node_modules/lucide-react/dist/esm/icons/layers.cjs +2 -0
  406. package/dist/node_modules/lucide-react/dist/esm/icons/layers.cjs.map +1 -0
  407. package/dist/node_modules/lucide-react/dist/esm/icons/layers.js +19 -0
  408. package/dist/node_modules/lucide-react/dist/esm/icons/layers.js.map +1 -0
  409. package/dist/node_modules/lucide-react/dist/esm/icons/link-2.cjs +2 -0
  410. package/dist/node_modules/lucide-react/dist/esm/icons/link-2.cjs.map +1 -0
  411. package/dist/node_modules/lucide-react/dist/esm/icons/link-2.js +22 -0
  412. package/dist/node_modules/lucide-react/dist/esm/icons/link-2.js.map +1 -0
  413. package/dist/node_modules/lucide-react/dist/esm/icons/mails.cjs +2 -0
  414. package/dist/node_modules/lucide-react/dist/esm/icons/mails.cjs.map +1 -0
  415. package/dist/node_modules/lucide-react/dist/esm/icons/mails.js +23 -0
  416. package/dist/node_modules/lucide-react/dist/esm/icons/mails.js.map +1 -0
  417. package/dist/node_modules/lucide-react/dist/esm/icons/messages-square.cjs +2 -0
  418. package/dist/node_modules/lucide-react/dist/esm/icons/messages-square.cjs.map +1 -0
  419. package/dist/node_modules/lucide-react/dist/esm/icons/messages-square.js +12 -0
  420. package/dist/node_modules/lucide-react/dist/esm/icons/messages-square.js.map +1 -0
  421. package/dist/node_modules/lucide-react/dist/esm/icons/plug.cjs +2 -0
  422. package/dist/node_modules/lucide-react/dist/esm/icons/plug.cjs.map +1 -0
  423. package/dist/node_modules/lucide-react/dist/esm/icons/plug.js +23 -0
  424. package/dist/node_modules/lucide-react/dist/esm/icons/plug.js.map +1 -0
  425. package/dist/node_modules/lucide-react/dist/esm/icons/square-kanban.cjs +2 -0
  426. package/dist/node_modules/lucide-react/dist/esm/icons/square-kanban.cjs.map +1 -0
  427. package/dist/node_modules/lucide-react/dist/esm/icons/square-kanban.js +27 -0
  428. package/dist/node_modules/lucide-react/dist/esm/icons/square-kanban.js.map +1 -0
  429. package/dist/node_modules/lucide-react/dist/esm/icons/ticket.cjs +2 -0
  430. package/dist/node_modules/lucide-react/dist/esm/icons/ticket.cjs.map +1 -0
  431. package/dist/node_modules/lucide-react/dist/esm/icons/ticket.js +23 -0
  432. package/dist/node_modules/lucide-react/dist/esm/icons/ticket.js.map +1 -0
  433. package/dist/node_modules/lucide-react/dist/esm/icons/users-round.cjs +2 -0
  434. package/dist/node_modules/lucide-react/dist/esm/icons/users-round.cjs.map +1 -0
  435. package/dist/node_modules/lucide-react/dist/esm/icons/users-round.js +21 -0
  436. package/dist/node_modules/lucide-react/dist/esm/icons/users-round.js.map +1 -0
  437. package/dist/node_modules/lucide-react/dist/esm/icons/waypoints.cjs +2 -0
  438. package/dist/node_modules/lucide-react/dist/esm/icons/waypoints.cjs.map +1 -0
  439. package/dist/node_modules/lucide-react/dist/esm/icons/waypoints.js +43 -0
  440. package/dist/node_modules/lucide-react/dist/esm/icons/waypoints.js.map +1 -0
  441. package/dist/node_modules/lucide-react/dist/esm/icons/webhook.cjs +2 -0
  442. package/dist/node_modules/lucide-react/dist/esm/icons/webhook.cjs.map +1 -0
  443. package/dist/node_modules/lucide-react/dist/esm/icons/webhook.js +19 -0
  444. package/dist/node_modules/lucide-react/dist/esm/icons/webhook.js.map +1 -0
  445. package/dist/node_modules/lucide-react/dist/esm/icons/workflow.cjs +2 -0
  446. package/dist/node_modules/lucide-react/dist/esm/icons/workflow.cjs.map +1 -0
  447. package/dist/node_modules/lucide-react/dist/esm/icons/workflow.js +27 -0
  448. package/dist/node_modules/lucide-react/dist/esm/icons/workflow.js.map +1 -0
  449. package/dist/node_modules/lucide-react/dist/esm/icons/wrench.cjs +2 -0
  450. package/dist/node_modules/lucide-react/dist/esm/icons/wrench.cjs.map +1 -0
  451. package/dist/node_modules/lucide-react/dist/esm/icons/wrench.js +9 -0
  452. package/dist/node_modules/lucide-react/dist/esm/icons/wrench.js.map +1 -0
  453. package/dist/node_modules/lucide-react/dist/esm/icons/zap.cjs +2 -0
  454. package/dist/node_modules/lucide-react/dist/esm/icons/zap.cjs.map +1 -0
  455. package/dist/node_modules/lucide-react/dist/esm/icons/zap.js +9 -0
  456. package/dist/node_modules/lucide-react/dist/esm/icons/zap.js.map +1 -0
  457. package/dist/package.cjs +1 -1
  458. package/dist/package.cjs.map +1 -1
  459. package/dist/package.js +6 -3
  460. package/dist/package.js.map +1 -1
  461. package/dist/routes/app-settings.cjs +1 -1
  462. package/dist/routes/app-settings.cjs.map +1 -1
  463. package/dist/routes/app-settings.js +94 -93
  464. package/dist/routes/app-settings.js.map +1 -1
  465. package/dist/routes/llm-settings.cjs +1 -1
  466. package/dist/routes/llm-settings.cjs.map +1 -1
  467. package/dist/routes/llm-settings.js +131 -119
  468. package/dist/routes/llm-settings.js.map +1 -1
  469. package/dist/services/child-conversation-launch.cjs +2 -0
  470. package/dist/services/child-conversation-launch.cjs.map +1 -0
  471. package/dist/services/child-conversation-launch.d.ts +41 -0
  472. package/dist/services/child-conversation-launch.js +182 -0
  473. package/dist/services/child-conversation-launch.js.map +1 -0
  474. package/dist/stores/conversation-panel-preferences-store.cjs +1 -1
  475. package/dist/stores/conversation-panel-preferences-store.cjs.map +1 -1
  476. package/dist/stores/conversation-panel-preferences-store.d.ts +5 -1
  477. package/dist/stores/conversation-panel-preferences-store.js +8 -2
  478. package/dist/stores/conversation-panel-preferences-store.js.map +1 -1
  479. package/dist/types/agent-server/core/base/action.d.ts +17 -1
  480. package/dist/types/agent-server/core/base/base.d.ts +2 -1
  481. package/dist/types/agent-server/type-guards.cjs +1 -1
  482. package/dist/types/agent-server/type-guards.cjs.map +1 -1
  483. package/dist/types/agent-server/type-guards.d.ts +8 -1
  484. package/dist/types/agent-server/type-guards.js +4 -3
  485. package/dist/types/agent-server/type-guards.js.map +1 -1
  486. package/dist/types/automation.d.ts +14 -0
  487. package/dist/utils/custom-toast-handlers.cjs +1 -1
  488. package/dist/utils/custom-toast-handlers.cjs.map +1 -1
  489. package/dist/utils/custom-toast-handlers.js +18 -1
  490. package/dist/utils/custom-toast-handlers.js.map +1 -1
  491. package/dist/utils/format-model-name.cjs +1 -1
  492. package/dist/utils/format-model-name.cjs.map +1 -1
  493. package/dist/utils/format-model-name.d.ts +11 -0
  494. package/dist/utils/format-model-name.js +11 -3
  495. package/dist/utils/format-model-name.js.map +1 -1
  496. package/package.json +6 -3
  497. package/scripts/brand-dev-electron.mjs +244 -0
  498. package/scripts/check-translation-completeness.cjs +4 -0
  499. package/scripts/generate-icons.mjs +109 -0
  500. package/build/assets/agent-server-conversation-service.api-km_8sOVf.js +0 -41
  501. package/build/assets/agent-settings-nmO-KSXr.js +0 -1
  502. package/build/assets/app-settings-9ok42bV6.js +0 -1
  503. package/build/assets/command-menu-CA3IjGNc.js +0 -1
  504. package/build/assets/conversation-B6t6EiVp.js +0 -1
  505. package/build/assets/conversation-panel-B6t6EiVp.js +0 -1
  506. package/build/assets/copy-DaHuDtG4.js +0 -1
  507. package/build/assets/git-repo-dropdown-TzOuG5Ef.js +0 -1
  508. package/build/assets/home-OEx0XtfP.js +0 -1
  509. package/build/assets/index-home-OEx0XtfP.js +0 -1
  510. package/build/assets/install-server-modal-DnjZrJUy.js +0 -1
  511. package/build/assets/list-filter-C86CBRDE.js +0 -1
  512. package/build/assets/llm-not-configured-banner-DrBrhfN0.js +0 -27
  513. package/build/assets/llm-settings-CRsLqxgu.js +0 -1
  514. package/build/assets/llm-settings-RBm_3kNm.js +0 -1
  515. package/build/assets/manifest-c352d453.js +0 -1
  516. package/build/assets/map-provider-CXU6issd.js +0 -1
  517. package/build/assets/markdown-renderer-lsvsp7jn.js +0 -8
  518. package/build/assets/mcp-DD4hPTRE.js +0 -9
  519. package/build/assets/messages-Dt77e0qi.js +0 -40
  520. package/build/assets/recommended-automations-launcher-6xmbf7lh.js +0 -1
  521. package/build/assets/root-BeuHFY2s.css +0 -1
  522. package/build/assets/root-layout-Dl_2CDoq.js +0 -3
  523. package/build/assets/settings-Co-M5bK9.js +0 -1
  524. package/build/assets/sidebar-store-B04sX8aP.js +0 -1
  525. package/build/assets/skills-settings-DnbIu2eO.js +0 -2
  526. package/build/assets/use-settings-nav-items-y-Oyc93G.js +0 -16
  527. package/build/assets/utils-BX9XJ0IE.js +0 -1
  528. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.cjs +0 -2
  529. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.cjs.map +0 -1
  530. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.js +0 -9
  531. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-up.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"package.cjs","names":[],"sources":["../package.json"],"sourcesContent":["{\n \"name\": \"@openhands/agent-canvas\",\n \"version\": \"1.10.0\",\n \"description\": \"Agent Canvas UI for OpenHands - run AI coding agents with a visual interface\",\n \"license\": \"MIT\",\n \"private\": false,\n \"type\": \"module\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/OpenHands/OpenHands\"\n },\n \"homepage\": \"https://github.com/OpenHands/OpenHands#readme\",\n \"bugs\": {\n \"url\": \"https://github.com/OpenHands/OpenHands/issues\"\n },\n \"bin\": {\n \"agent-canvas\": \"bin/agent-canvas.mjs\"\n },\n \"engines\": {\n \"node\": \">=22.12.0\"\n },\n \"dependencies\": {\n \"@heroui/react\": \"2.8.10\",\n \"@microlink/react-json-view\": \"1.31.20\",\n \"@monaco-editor/react\": \"4.7.0\",\n \"@openhands/extensions\": \"0.16.0\",\n \"@openhands/typescript-client\": \"1.36.1\",\n \"@react-router/node\": \"7.18.2\",\n \"@react-router/serve\": \"7.18.2\",\n \"@tailwindcss/vite\": \"4.3.3\",\n \"@tanstack/react-query\": \"5.101.4\",\n \"@types/shell-quote\": \"1.7.5\",\n \"@uidotdev/usehooks\": \"2.4.1\",\n \"@xterm/addon-fit\": \"0.11.0\",\n \"@xterm/xterm\": \"6.0.0\",\n \"axios\": \"1.18.0\",\n \"class-variance-authority\": \"0.7.1\",\n \"clsx\": \"2.1.1\",\n \"downshift\": \"9.3.2\",\n \"framer-motion\": \"12.38.0\",\n \"httpxy\": \"0.5.3\",\n \"i18next\": \"26.3.6\",\n \"i18next-browser-languagedetector\": \"8.2.1\",\n \"i18next-http-backend\": \"4.0.0\",\n \"isbot\": \"5.1.39\",\n \"lucide-react\": \"1.25.0\",\n \"monaco-editor\": \"0.56.0\",\n \"posthog-js\": \"1.380.0\",\n \"react\": \"19.2.8\",\n \"react-dom\": \"19.2.8\",\n \"react-hot-toast\": \"2.6.0\",\n \"react-i18next\": \"17.0.11\",\n \"react-icons\": \"5.6.0\",\n \"react-markdown\": \"10.1.0\",\n \"react-router\": \"7.18.2\",\n \"react-syntax-highlighter\": \"16.1.1\",\n \"rehype-raw\": \"7.0.0\",\n \"rehype-sanitize\": \"6.0.0\",\n \"remark-breaks\": \"4.0.0\",\n \"remark-gfm\": \"4.0.1\",\n \"shell-quote\": \"1.9.0\",\n \"sirv\": \"3.0.2\",\n \"sirv-cli\": \"3.0.1\",\n \"socket.io-client\": \"4.8.3\",\n \"tailwind-merge\": \"3.6.0\",\n \"tailwind-scrollbar\": \"4.0.2\",\n \"unist-util-visit\": \"5.1.0\",\n \"uuid\": \"14.0.0\",\n \"vite\": \"8.0.16\",\n \"winston\": \"3.19.0\",\n \"winston-daily-rotate-file\": \"5.0.0\",\n \"zustand\": \"5.0.12\"\n },\n \"scripts\": {\n \"dev\": \"node --env-file-if-exists=.env scripts/dev-with-automation.mjs\",\n \"dev:static\": \"node --env-file-if-exists=.env scripts/dev-static.mjs\",\n \"dev:extra-backend\": \"node --env-file-if-exists=.env scripts/dev-extra-backend.mjs\",\n \"dev:minimal\": \"node --env-file-if-exists=.env scripts/dev-safe.mjs\",\n \"dev:frontend\": \"npm run make-i18n && cross-env VITE_MOCK_API=false react-router dev\",\n \"dev:mock\": \"npm run make-i18n && cross-env VITE_MOCK_API=true react-router dev\",\n \"build\": \"npm run build:app\",\n \"build:mock\": \"npm run make-i18n && cross-env VITE_MOCK_API=true react-router build\",\n \"start\": \"npx sirv-cli build/ --single\",\n \"test\": \"npm run make-i18n && vitest run\",\n \"test:e2e\": \"playwright test --pass-with-no-tests\",\n \"test:e2e:live\": \"node --env-file-if-exists=.env tests/e2e/live/scripts/run-live-e2e.mjs\",\n \"test:e2e:mock-llm\": \"playwright test --config=playwright.mock-llm.config.ts\",\n \"test:e2e:mock-llm:docker\": \"playwright test --config=playwright.mock-llm-docker.config.ts\",\n \"test:coverage\": \"npm run make-i18n && vitest run --coverage\",\n \"test:mutation\": \"npm run make-i18n && stryker run\",\n \"test:mutation:diff\": \"npm run make-i18n && node scripts/stryker-diff.mjs\",\n \"test:mutation:incremental\": \"npm run make-i18n && stryker run --incremental\",\n \"dev_wsl\": \"VITE_WATCH_USE_POLLING=true vite\",\n \"preview\": \"vite preview\",\n \"make-i18n\": \"node scripts/make-i18n-translations.cjs\",\n \"prelint\": \"npm run make-i18n\",\n \"lint\": \"npm run typecheck && eslint src && prettier --check src/**/*.{ts,tsx}\",\n \"lint:fix\": \"eslint src --fix && prettier --write src/**/*.{ts,tsx}\",\n \"prepare\": \"husky\",\n \"typecheck\": \"react-router typegen && tsc\",\n \"typecheck:staged\": \"react-router typegen && npx tsc --noEmit --skipLibCheck\",\n \"check-translation-completeness\": \"node scripts/check-translation-completeness.cjs\",\n \"build:app\": \"npm run make-i18n && react-router build\",\n \"build:lib\": \"npm run make-i18n && react-router typegen && cross-env BUILD_LIB=true vite build && tsc -p tsconfig.lib.json\",\n \"build:docker\": \"node scripts/docker-build.mjs\",\n \"example:acp-docker:env\": \"node scripts/gen-acp-docker-env.mjs\",\n \"desktop\": \"npm run build:app && electron electron/main.mjs\",\n \"build:desktop\": \"npm run build:app && node scripts/download-uv.mjs && node scripts/download-node.mjs && electron-builder --config electron-builder.config.mjs --publish never\",\n \"build:desktop:universal\": \"npm run build:app && node scripts/download-uv.mjs && node scripts/download-node.mjs && cross-env ELECTRON_ARCH=universal electron-builder --config electron-builder.config.mjs --publish never\",\n \"download-uv\": \"node scripts/download-uv.mjs\",\n \"download-node\": \"node scripts/download-node.mjs\"\n },\n \"lint-staged\": {\n \"src/**/*.{ts,tsx,js}\": [\n \"eslint --fix\",\n \"prettier --write\"\n ],\n \"src/**/*.{ts,tsx}\": [\n \"node scripts/run-staged-typecheck.mjs\"\n ],\n \"src/**/*\": [\n \"npm run check-translation-completeness\"\n ]\n },\n \"devDependencies\": {\n \"@eslint/eslintrc\": \"3.3.1\",\n \"@eslint/js\": \"9.39.4\",\n \"@mswjs/socket.io-binding\": \"0.2.0\",\n \"@playwright/test\": \"1.62.0\",\n \"@react-router/dev\": \"7.18.2\",\n \"@stryker-mutator/core\": \"9.6.1\",\n \"@stryker-mutator/vitest-runner\": \"9.6.1\",\n \"@tailwindcss/typography\": \"0.5.20\",\n \"@tanstack/eslint-plugin-query\": \"5.101.4\",\n \"@testing-library/dom\": \"10.4.1\",\n \"@testing-library/jest-dom\": \"7.0.0\",\n \"@testing-library/react\": \"16.3.2\",\n \"@testing-library/user-event\": \"14.6.1\",\n \"@types/mdast\": \"4.0.4\",\n \"@types/node\": \"26.1.2\",\n \"@types/react\": \"19.2.17\",\n \"@types/react-dom\": \"19.2.3\",\n \"@types/react-syntax-highlighter\": \"15.5.13\",\n \"@typescript-eslint/eslint-plugin\": \"8.59.2\",\n \"@typescript-eslint/parser\": \"8.59.2\",\n \"@vercel/react-router\": \"1.3.0\",\n \"@vitest/coverage-v8\": \"4.1.10\",\n \"cross-env\": \"10.1.0\",\n \"electron\": \"42.3.3\",\n \"electron-builder\": \"26.15.3\",\n \"eslint\": \"9.39.4\",\n \"eslint-config-prettier\": \"10.1.8\",\n \"eslint-import-resolver-typescript\": \"4.4.5\",\n \"eslint-plugin-i18next\": \"6.1.5\",\n \"eslint-plugin-import-x\": \"4.16.2\",\n \"eslint-plugin-jsx-a11y\": \"6.10.2\",\n \"eslint-plugin-prettier\": \"5.5.5\",\n \"eslint-plugin-react\": \"7.37.5\",\n \"eslint-plugin-react-hooks\": \"7.1.1\",\n \"eslint-plugin-unused-imports\": \"4.4.1\",\n \"globals\": \"16.5.0\",\n \"husky\": \"9.1.7\",\n \"jsdom\": \"30.0.0\",\n \"lint-staged\": \"16.4.0\",\n \"msw\": \"2.15.0\",\n \"postcss-prefix-selector\": \"2.1.1\",\n \"prettier\": \"3.8.3\",\n \"tailwindcss\": \"4.3.3\",\n \"typescript\": \"6.0.3\",\n \"vite-plugin-svgr\": \"5.2.0\",\n \"vitest\": \"4.1.10\"\n },\n \"packageManager\": \"npm@10.5.0\",\n \"volta\": {\n \"node\": \"22.12.0\"\n },\n \"msw\": {\n \"workerDirectory\": [\n \"public\"\n ]\n },\n \"overrides\": {\n \"@vercel/static-config\": {\n \"ajv\": \"8.20.0\"\n },\n \"dompurify\": \"3.4.12\",\n \"typed-rest-client\": {\n \"qs\": \"6.15.3\"\n }\n },\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"files\": [\n \"dist\",\n \"bin\",\n \"build\",\n \"config\",\n \"scripts\",\n \"tools\"\n ],\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\"\n },\n \"./browser\": {\n \"types\": \"./dist/components/browser/index.d.ts\",\n \"import\": \"./dist/components/browser/index.js\",\n \"require\": \"./dist/components/browser/index.cjs\"\n },\n \"./conversation\": {\n \"types\": \"./dist/components/conversation/index.d.ts\",\n \"import\": \"./dist/components/conversation/index.js\",\n \"require\": \"./dist/components/conversation/index.cjs\"\n },\n \"./files\": {\n \"types\": \"./dist/components/files/index.d.ts\",\n \"import\": \"./dist/components/files/index.js\",\n \"require\": \"./dist/components/files/index.cjs\"\n },\n \"./settings\": {\n \"types\": \"./dist/components/settings/index.d.ts\",\n \"import\": \"./dist/components/settings/index.js\",\n \"require\": \"./dist/components/settings/index.cjs\"\n },\n \"./sidebar\": {\n \"types\": \"./dist/components/sidebar/index.d.ts\",\n \"import\": \"./dist/components/sidebar/index.js\",\n \"require\": \"./dist/components/sidebar/index.cjs\"\n },\n \"./terminal\": {\n \"types\": \"./dist/components/terminal/index.d.ts\",\n \"import\": \"./dist/components/terminal/index.js\",\n \"require\": \"./dist/components/terminal/index.cjs\"\n },\n \"./i18n\": {\n \"types\": \"./dist/i18n/index.d.ts\",\n \"import\": \"./dist/i18n/index.js\",\n \"require\": \"./dist/i18n/index.cjs\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"peerDependencies\": {\n \"react\": \"19.2.8\",\n \"react-dom\": \"19.2.8\",\n \"react-router\": \"7.18.2\"\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"package.cjs","names":[],"sources":["../package.json"],"sourcesContent":["{\n \"name\": \"@openhands/agent-canvas\",\n \"version\": \"1.12.0\",\n \"description\": \"Agent Canvas UI for OpenHands - run AI coding agents with a visual interface\",\n \"license\": \"MIT\",\n \"private\": false,\n \"type\": \"module\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/OpenHands/OpenHands\"\n },\n \"homepage\": \"https://github.com/OpenHands/OpenHands#readme\",\n \"bugs\": {\n \"url\": \"https://github.com/OpenHands/OpenHands/issues\"\n },\n \"bin\": {\n \"agent-canvas\": \"bin/agent-canvas.mjs\"\n },\n \"engines\": {\n \"node\": \">=22.12.0\"\n },\n \"dependencies\": {\n \"@heroui/react\": \"2.8.10\",\n \"@microlink/react-json-view\": \"1.31.20\",\n \"@monaco-editor/react\": \"4.7.0\",\n \"@openhands/extensions\": \"0.16.0\",\n \"@openhands/typescript-client\": \"1.36.1\",\n \"@react-router/node\": \"7.18.2\",\n \"@react-router/serve\": \"7.18.2\",\n \"@tailwindcss/vite\": \"4.3.3\",\n \"@tanstack/react-query\": \"5.101.4\",\n \"@types/shell-quote\": \"1.7.5\",\n \"@uidotdev/usehooks\": \"2.4.1\",\n \"@xterm/addon-fit\": \"0.11.0\",\n \"@xterm/xterm\": \"6.0.0\",\n \"axios\": \"1.18.0\",\n \"class-variance-authority\": \"0.7.1\",\n \"clsx\": \"2.1.1\",\n \"downshift\": \"9.3.2\",\n \"framer-motion\": \"12.38.0\",\n \"httpxy\": \"0.5.3\",\n \"i18next\": \"26.3.6\",\n \"i18next-browser-languagedetector\": \"8.2.1\",\n \"i18next-http-backend\": \"4.0.0\",\n \"isbot\": \"5.1.39\",\n \"lucide-react\": \"1.25.0\",\n \"monaco-editor\": \"0.56.0\",\n \"posthog-js\": \"1.380.0\",\n \"react\": \"19.2.8\",\n \"react-dom\": \"19.2.8\",\n \"react-hot-toast\": \"2.6.0\",\n \"react-i18next\": \"17.0.11\",\n \"react-icons\": \"5.6.0\",\n \"react-markdown\": \"10.1.0\",\n \"react-router\": \"7.18.2\",\n \"react-syntax-highlighter\": \"16.1.1\",\n \"rehype-raw\": \"7.0.0\",\n \"rehype-sanitize\": \"6.0.0\",\n \"remark-breaks\": \"4.0.0\",\n \"remark-gfm\": \"4.0.1\",\n \"shell-quote\": \"1.9.0\",\n \"sirv\": \"3.0.2\",\n \"sirv-cli\": \"3.0.1\",\n \"socket.io-client\": \"4.8.3\",\n \"tailwind-merge\": \"3.6.0\",\n \"tailwind-scrollbar\": \"4.0.2\",\n \"unist-util-visit\": \"5.1.0\",\n \"uuid\": \"14.0.0\",\n \"vite\": \"8.0.16\",\n \"winston\": \"3.19.0\",\n \"winston-daily-rotate-file\": \"5.0.0\",\n \"zustand\": \"5.0.12\"\n },\n \"scripts\": {\n \"dev\": \"node --env-file-if-exists=.env scripts/dev-with-automation.mjs\",\n \"dev:static\": \"node --env-file-if-exists=.env scripts/dev-static.mjs\",\n \"dev:extra-backend\": \"node --env-file-if-exists=.env scripts/dev-extra-backend.mjs\",\n \"dev:minimal\": \"node --env-file-if-exists=.env scripts/dev-safe.mjs\",\n \"dev:frontend\": \"npm run make-i18n && cross-env VITE_MOCK_API=false react-router dev\",\n \"dev:mock\": \"npm run make-i18n && cross-env VITE_MOCK_API=true react-router dev\",\n \"build\": \"npm run build:app\",\n \"build:mock\": \"npm run make-i18n && cross-env VITE_MOCK_API=true react-router build\",\n \"start\": \"npx sirv-cli build/ --single\",\n \"test\": \"npm run make-i18n && vitest run\",\n \"test:e2e\": \"playwright test --pass-with-no-tests\",\n \"test:e2e:live\": \"node --env-file-if-exists=.env tests/e2e/live/scripts/run-live-e2e.mjs\",\n \"test:e2e:mock-llm\": \"playwright test --config=playwright.mock-llm.config.ts\",\n \"test:e2e:mock-llm:docker\": \"playwright test --config=playwright.mock-llm-docker.config.ts\",\n \"test:coverage\": \"npm run make-i18n && vitest run --coverage\",\n \"test:mutation\": \"npm run make-i18n && stryker run\",\n \"test:mutation:diff\": \"npm run make-i18n && node scripts/stryker-diff.mjs\",\n \"test:mutation:incremental\": \"npm run make-i18n && stryker run --incremental\",\n \"dev_wsl\": \"VITE_WATCH_USE_POLLING=true vite\",\n \"preview\": \"vite preview\",\n \"make-i18n\": \"node scripts/make-i18n-translations.cjs\",\n \"prelint\": \"npm run make-i18n\",\n \"lint\": \"npm run typecheck && eslint src && prettier --check src/**/*.{ts,tsx}\",\n \"lint:fix\": \"eslint src --fix && prettier --write src/**/*.{ts,tsx}\",\n \"prepare\": \"husky\",\n \"typecheck\": \"react-router typegen && tsc\",\n \"typecheck:staged\": \"react-router typegen && npx tsc --noEmit --skipLibCheck\",\n \"check-translation-completeness\": \"node scripts/check-translation-completeness.cjs\",\n \"build:app\": \"npm run make-i18n && react-router build\",\n \"build:lib\": \"npm run make-i18n && react-router typegen && cross-env BUILD_LIB=true vite build && tsc -p tsconfig.lib.json\",\n \"build:docker\": \"node scripts/docker-build.mjs\",\n \"example:acp-docker:env\": \"node scripts/gen-acp-docker-env.mjs\",\n \"predesktop\": \"node scripts/brand-dev-electron.mjs\",\n \"desktop\": \"npm run build:app && electron electron\",\n \"build:desktop\": \"npm run build:app && node scripts/download-uv.mjs && node scripts/download-node.mjs && electron-builder --config electron-builder.config.mjs --publish never\",\n \"build:desktop:universal\": \"npm run build:app && node scripts/download-uv.mjs && node scripts/download-node.mjs && cross-env ELECTRON_ARCH=universal electron-builder --config electron-builder.config.mjs --publish never\",\n \"download-uv\": \"node scripts/download-uv.mjs\",\n \"download-node\": \"node scripts/download-node.mjs\",\n \"generate-icons\": \"node scripts/generate-icons.mjs\"\n },\n \"lint-staged\": {\n \"src/**/*.{ts,tsx,js}\": [\n \"eslint --fix\",\n \"prettier --write\"\n ],\n \"src/**/*.{ts,tsx}\": [\n \"node scripts/run-staged-typecheck.mjs\"\n ],\n \"src/**/*\": [\n \"npm run check-translation-completeness\"\n ]\n },\n \"devDependencies\": {\n \"@eslint/eslintrc\": \"3.3.1\",\n \"@eslint/js\": \"9.39.4\",\n \"@mswjs/socket.io-binding\": \"0.2.0\",\n \"@playwright/test\": \"1.62.0\",\n \"@react-router/dev\": \"7.18.2\",\n \"@stryker-mutator/core\": \"9.6.1\",\n \"@stryker-mutator/vitest-runner\": \"9.6.1\",\n \"@tailwindcss/typography\": \"0.5.20\",\n \"@tanstack/eslint-plugin-query\": \"5.101.4\",\n \"@testing-library/dom\": \"10.4.1\",\n \"@testing-library/jest-dom\": \"7.0.0\",\n \"@testing-library/react\": \"16.3.2\",\n \"@testing-library/user-event\": \"14.6.1\",\n \"@types/mdast\": \"4.0.4\",\n \"@types/node\": \"26.1.2\",\n \"@types/react\": \"19.2.17\",\n \"@types/react-dom\": \"19.2.3\",\n \"@types/react-syntax-highlighter\": \"15.5.13\",\n \"@typescript-eslint/eslint-plugin\": \"8.59.2\",\n \"@typescript-eslint/parser\": \"8.59.2\",\n \"@vercel/react-router\": \"1.3.0\",\n \"@vitest/coverage-v8\": \"4.1.10\",\n \"cross-env\": \"10.1.0\",\n \"electron\": \"42.3.3\",\n \"electron-builder\": \"26.15.3\",\n \"eslint\": \"9.39.4\",\n \"eslint-config-prettier\": \"10.1.8\",\n \"eslint-import-resolver-typescript\": \"4.4.5\",\n \"eslint-plugin-i18next\": \"6.1.5\",\n \"eslint-plugin-import-x\": \"4.16.2\",\n \"eslint-plugin-jsx-a11y\": \"6.10.2\",\n \"eslint-plugin-prettier\": \"5.5.5\",\n \"eslint-plugin-react\": \"7.37.5\",\n \"eslint-plugin-react-hooks\": \"7.1.1\",\n \"eslint-plugin-unused-imports\": \"4.4.1\",\n \"globals\": \"16.5.0\",\n \"husky\": \"9.1.7\",\n \"jsdom\": \"30.0.0\",\n \"lint-staged\": \"16.4.0\",\n \"msw\": \"2.15.0\",\n \"png2icons\": \"2.0.1\",\n \"postcss-prefix-selector\": \"2.1.1\",\n \"prettier\": \"3.8.3\",\n \"tailwindcss\": \"4.3.3\",\n \"typescript\": \"6.0.3\",\n \"vite-plugin-svgr\": \"5.2.0\",\n \"vitest\": \"4.1.10\"\n },\n \"packageManager\": \"npm@10.5.0\",\n \"volta\": {\n \"node\": \"22.12.0\"\n },\n \"msw\": {\n \"workerDirectory\": [\n \"public\"\n ]\n },\n \"overrides\": {\n \"@vercel/static-config\": {\n \"ajv\": \"8.20.0\"\n },\n \"dompurify\": \"3.4.12\",\n \"typed-rest-client\": {\n \"qs\": \"6.15.3\"\n }\n },\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"files\": [\n \"dist\",\n \"bin\",\n \"build\",\n \"config\",\n \"scripts\",\n \"tools\"\n ],\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\"\n },\n \"./browser\": {\n \"types\": \"./dist/components/browser/index.d.ts\",\n \"import\": \"./dist/components/browser/index.js\",\n \"require\": \"./dist/components/browser/index.cjs\"\n },\n \"./conversation\": {\n \"types\": \"./dist/components/conversation/index.d.ts\",\n \"import\": \"./dist/components/conversation/index.js\",\n \"require\": \"./dist/components/conversation/index.cjs\"\n },\n \"./files\": {\n \"types\": \"./dist/components/files/index.d.ts\",\n \"import\": \"./dist/components/files/index.js\",\n \"require\": \"./dist/components/files/index.cjs\"\n },\n \"./settings\": {\n \"types\": \"./dist/components/settings/index.d.ts\",\n \"import\": \"./dist/components/settings/index.js\",\n \"require\": \"./dist/components/settings/index.cjs\"\n },\n \"./sidebar\": {\n \"types\": \"./dist/components/sidebar/index.d.ts\",\n \"import\": \"./dist/components/sidebar/index.js\",\n \"require\": \"./dist/components/sidebar/index.cjs\"\n },\n \"./terminal\": {\n \"types\": \"./dist/components/terminal/index.d.ts\",\n \"import\": \"./dist/components/terminal/index.js\",\n \"require\": \"./dist/components/terminal/index.cjs\"\n },\n \"./i18n\": {\n \"types\": \"./dist/i18n/index.d.ts\",\n \"import\": \"./dist/i18n/index.js\",\n \"require\": \"./dist/i18n/index.cjs\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"peerDependencies\": {\n \"react\": \"19.2.8\",\n \"react-dom\": \"19.2.8\",\n \"react-router\": \"7.18.2\"\n }\n}\n"],"mappings":""}
package/dist/package.js CHANGED
@@ -1,6 +1,6 @@
1
1
  var e = {
2
2
  name: "@openhands/agent-canvas",
3
- version: "1.10.0",
3
+ version: "1.12.0",
4
4
  description: "Agent Canvas UI for OpenHands - run AI coding agents with a visual interface",
5
5
  license: "MIT",
6
6
  private: !1,
@@ -98,11 +98,13 @@ var e = {
98
98
  "build:lib": "npm run make-i18n && react-router typegen && cross-env BUILD_LIB=true vite build && tsc -p tsconfig.lib.json",
99
99
  "build:docker": "node scripts/docker-build.mjs",
100
100
  "example:acp-docker:env": "node scripts/gen-acp-docker-env.mjs",
101
- desktop: "npm run build:app && electron electron/main.mjs",
101
+ predesktop: "node scripts/brand-dev-electron.mjs",
102
+ desktop: "npm run build:app && electron electron",
102
103
  "build:desktop": "npm run build:app && node scripts/download-uv.mjs && node scripts/download-node.mjs && electron-builder --config electron-builder.config.mjs --publish never",
103
104
  "build:desktop:universal": "npm run build:app && node scripts/download-uv.mjs && node scripts/download-node.mjs && cross-env ELECTRON_ARCH=universal electron-builder --config electron-builder.config.mjs --publish never",
104
105
  "download-uv": "node scripts/download-uv.mjs",
105
- "download-node": "node scripts/download-node.mjs"
106
+ "download-node": "node scripts/download-node.mjs",
107
+ "generate-icons": "node scripts/generate-icons.mjs"
106
108
  },
107
109
  "lint-staged": {
108
110
  "src/**/*.{ts,tsx,js}": ["eslint --fix", "prettier --write"],
@@ -150,6 +152,7 @@ var e = {
150
152
  jsdom: "30.0.0",
151
153
  "lint-staged": "16.4.0",
152
154
  msw: "2.15.0",
155
+ png2icons: "2.0.1",
153
156
  "postcss-prefix-selector": "2.1.1",
154
157
  prettier: "3.8.3",
155
158
  tailwindcss: "4.3.3",
@@ -1 +1 @@
1
- {"version":3,"file":"package.js","names":[],"sources":["../package.json"],"sourcesContent":["{\n \"name\": \"@openhands/agent-canvas\",\n \"version\": \"1.10.0\",\n \"description\": \"Agent Canvas UI for OpenHands - run AI coding agents with a visual interface\",\n \"license\": \"MIT\",\n \"private\": false,\n \"type\": \"module\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/OpenHands/OpenHands\"\n },\n \"homepage\": \"https://github.com/OpenHands/OpenHands#readme\",\n \"bugs\": {\n \"url\": \"https://github.com/OpenHands/OpenHands/issues\"\n },\n \"bin\": {\n \"agent-canvas\": \"bin/agent-canvas.mjs\"\n },\n \"engines\": {\n \"node\": \">=22.12.0\"\n },\n \"dependencies\": {\n \"@heroui/react\": \"2.8.10\",\n \"@microlink/react-json-view\": \"1.31.20\",\n \"@monaco-editor/react\": \"4.7.0\",\n \"@openhands/extensions\": \"0.16.0\",\n \"@openhands/typescript-client\": \"1.36.1\",\n \"@react-router/node\": \"7.18.2\",\n \"@react-router/serve\": \"7.18.2\",\n \"@tailwindcss/vite\": \"4.3.3\",\n \"@tanstack/react-query\": \"5.101.4\",\n \"@types/shell-quote\": \"1.7.5\",\n \"@uidotdev/usehooks\": \"2.4.1\",\n \"@xterm/addon-fit\": \"0.11.0\",\n \"@xterm/xterm\": \"6.0.0\",\n \"axios\": \"1.18.0\",\n \"class-variance-authority\": \"0.7.1\",\n \"clsx\": \"2.1.1\",\n \"downshift\": \"9.3.2\",\n \"framer-motion\": \"12.38.0\",\n \"httpxy\": \"0.5.3\",\n \"i18next\": \"26.3.6\",\n \"i18next-browser-languagedetector\": \"8.2.1\",\n \"i18next-http-backend\": \"4.0.0\",\n \"isbot\": \"5.1.39\",\n \"lucide-react\": \"1.25.0\",\n \"monaco-editor\": \"0.56.0\",\n \"posthog-js\": \"1.380.0\",\n \"react\": \"19.2.8\",\n \"react-dom\": \"19.2.8\",\n \"react-hot-toast\": \"2.6.0\",\n \"react-i18next\": \"17.0.11\",\n \"react-icons\": \"5.6.0\",\n \"react-markdown\": \"10.1.0\",\n \"react-router\": \"7.18.2\",\n \"react-syntax-highlighter\": \"16.1.1\",\n \"rehype-raw\": \"7.0.0\",\n \"rehype-sanitize\": \"6.0.0\",\n \"remark-breaks\": \"4.0.0\",\n \"remark-gfm\": \"4.0.1\",\n \"shell-quote\": \"1.9.0\",\n \"sirv\": \"3.0.2\",\n \"sirv-cli\": \"3.0.1\",\n \"socket.io-client\": \"4.8.3\",\n \"tailwind-merge\": \"3.6.0\",\n \"tailwind-scrollbar\": \"4.0.2\",\n \"unist-util-visit\": \"5.1.0\",\n \"uuid\": \"14.0.0\",\n \"vite\": \"8.0.16\",\n \"winston\": \"3.19.0\",\n \"winston-daily-rotate-file\": \"5.0.0\",\n \"zustand\": \"5.0.12\"\n },\n \"scripts\": {\n \"dev\": \"node --env-file-if-exists=.env scripts/dev-with-automation.mjs\",\n \"dev:static\": \"node --env-file-if-exists=.env scripts/dev-static.mjs\",\n \"dev:extra-backend\": \"node --env-file-if-exists=.env scripts/dev-extra-backend.mjs\",\n \"dev:minimal\": \"node --env-file-if-exists=.env scripts/dev-safe.mjs\",\n \"dev:frontend\": \"npm run make-i18n && cross-env VITE_MOCK_API=false react-router dev\",\n \"dev:mock\": \"npm run make-i18n && cross-env VITE_MOCK_API=true react-router dev\",\n \"build\": \"npm run build:app\",\n \"build:mock\": \"npm run make-i18n && cross-env VITE_MOCK_API=true react-router build\",\n \"start\": \"npx sirv-cli build/ --single\",\n \"test\": \"npm run make-i18n && vitest run\",\n \"test:e2e\": \"playwright test --pass-with-no-tests\",\n \"test:e2e:live\": \"node --env-file-if-exists=.env tests/e2e/live/scripts/run-live-e2e.mjs\",\n \"test:e2e:mock-llm\": \"playwright test --config=playwright.mock-llm.config.ts\",\n \"test:e2e:mock-llm:docker\": \"playwright test --config=playwright.mock-llm-docker.config.ts\",\n \"test:coverage\": \"npm run make-i18n && vitest run --coverage\",\n \"test:mutation\": \"npm run make-i18n && stryker run\",\n \"test:mutation:diff\": \"npm run make-i18n && node scripts/stryker-diff.mjs\",\n \"test:mutation:incremental\": \"npm run make-i18n && stryker run --incremental\",\n \"dev_wsl\": \"VITE_WATCH_USE_POLLING=true vite\",\n \"preview\": \"vite preview\",\n \"make-i18n\": \"node scripts/make-i18n-translations.cjs\",\n \"prelint\": \"npm run make-i18n\",\n \"lint\": \"npm run typecheck && eslint src && prettier --check src/**/*.{ts,tsx}\",\n \"lint:fix\": \"eslint src --fix && prettier --write src/**/*.{ts,tsx}\",\n \"prepare\": \"husky\",\n \"typecheck\": \"react-router typegen && tsc\",\n \"typecheck:staged\": \"react-router typegen && npx tsc --noEmit --skipLibCheck\",\n \"check-translation-completeness\": \"node scripts/check-translation-completeness.cjs\",\n \"build:app\": \"npm run make-i18n && react-router build\",\n \"build:lib\": \"npm run make-i18n && react-router typegen && cross-env BUILD_LIB=true vite build && tsc -p tsconfig.lib.json\",\n \"build:docker\": \"node scripts/docker-build.mjs\",\n \"example:acp-docker:env\": \"node scripts/gen-acp-docker-env.mjs\",\n \"desktop\": \"npm run build:app && electron electron/main.mjs\",\n \"build:desktop\": \"npm run build:app && node scripts/download-uv.mjs && node scripts/download-node.mjs && electron-builder --config electron-builder.config.mjs --publish never\",\n \"build:desktop:universal\": \"npm run build:app && node scripts/download-uv.mjs && node scripts/download-node.mjs && cross-env ELECTRON_ARCH=universal electron-builder --config electron-builder.config.mjs --publish never\",\n \"download-uv\": \"node scripts/download-uv.mjs\",\n \"download-node\": \"node scripts/download-node.mjs\"\n },\n \"lint-staged\": {\n \"src/**/*.{ts,tsx,js}\": [\n \"eslint --fix\",\n \"prettier --write\"\n ],\n \"src/**/*.{ts,tsx}\": [\n \"node scripts/run-staged-typecheck.mjs\"\n ],\n \"src/**/*\": [\n \"npm run check-translation-completeness\"\n ]\n },\n \"devDependencies\": {\n \"@eslint/eslintrc\": \"3.3.1\",\n \"@eslint/js\": \"9.39.4\",\n \"@mswjs/socket.io-binding\": \"0.2.0\",\n \"@playwright/test\": \"1.62.0\",\n \"@react-router/dev\": \"7.18.2\",\n \"@stryker-mutator/core\": \"9.6.1\",\n \"@stryker-mutator/vitest-runner\": \"9.6.1\",\n \"@tailwindcss/typography\": \"0.5.20\",\n \"@tanstack/eslint-plugin-query\": \"5.101.4\",\n \"@testing-library/dom\": \"10.4.1\",\n \"@testing-library/jest-dom\": \"7.0.0\",\n \"@testing-library/react\": \"16.3.2\",\n \"@testing-library/user-event\": \"14.6.1\",\n \"@types/mdast\": \"4.0.4\",\n \"@types/node\": \"26.1.2\",\n \"@types/react\": \"19.2.17\",\n \"@types/react-dom\": \"19.2.3\",\n \"@types/react-syntax-highlighter\": \"15.5.13\",\n \"@typescript-eslint/eslint-plugin\": \"8.59.2\",\n \"@typescript-eslint/parser\": \"8.59.2\",\n \"@vercel/react-router\": \"1.3.0\",\n \"@vitest/coverage-v8\": \"4.1.10\",\n \"cross-env\": \"10.1.0\",\n \"electron\": \"42.3.3\",\n \"electron-builder\": \"26.15.3\",\n \"eslint\": \"9.39.4\",\n \"eslint-config-prettier\": \"10.1.8\",\n \"eslint-import-resolver-typescript\": \"4.4.5\",\n \"eslint-plugin-i18next\": \"6.1.5\",\n \"eslint-plugin-import-x\": \"4.16.2\",\n \"eslint-plugin-jsx-a11y\": \"6.10.2\",\n \"eslint-plugin-prettier\": \"5.5.5\",\n \"eslint-plugin-react\": \"7.37.5\",\n \"eslint-plugin-react-hooks\": \"7.1.1\",\n \"eslint-plugin-unused-imports\": \"4.4.1\",\n \"globals\": \"16.5.0\",\n \"husky\": \"9.1.7\",\n \"jsdom\": \"30.0.0\",\n \"lint-staged\": \"16.4.0\",\n \"msw\": \"2.15.0\",\n \"postcss-prefix-selector\": \"2.1.1\",\n \"prettier\": \"3.8.3\",\n \"tailwindcss\": \"4.3.3\",\n \"typescript\": \"6.0.3\",\n \"vite-plugin-svgr\": \"5.2.0\",\n \"vitest\": \"4.1.10\"\n },\n \"packageManager\": \"npm@10.5.0\",\n \"volta\": {\n \"node\": \"22.12.0\"\n },\n \"msw\": {\n \"workerDirectory\": [\n \"public\"\n ]\n },\n \"overrides\": {\n \"@vercel/static-config\": {\n \"ajv\": \"8.20.0\"\n },\n \"dompurify\": \"3.4.12\",\n \"typed-rest-client\": {\n \"qs\": \"6.15.3\"\n }\n },\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"files\": [\n \"dist\",\n \"bin\",\n \"build\",\n \"config\",\n \"scripts\",\n \"tools\"\n ],\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\"\n },\n \"./browser\": {\n \"types\": \"./dist/components/browser/index.d.ts\",\n \"import\": \"./dist/components/browser/index.js\",\n \"require\": \"./dist/components/browser/index.cjs\"\n },\n \"./conversation\": {\n \"types\": \"./dist/components/conversation/index.d.ts\",\n \"import\": \"./dist/components/conversation/index.js\",\n \"require\": \"./dist/components/conversation/index.cjs\"\n },\n \"./files\": {\n \"types\": \"./dist/components/files/index.d.ts\",\n \"import\": \"./dist/components/files/index.js\",\n \"require\": \"./dist/components/files/index.cjs\"\n },\n \"./settings\": {\n \"types\": \"./dist/components/settings/index.d.ts\",\n \"import\": \"./dist/components/settings/index.js\",\n \"require\": \"./dist/components/settings/index.cjs\"\n },\n \"./sidebar\": {\n \"types\": \"./dist/components/sidebar/index.d.ts\",\n \"import\": \"./dist/components/sidebar/index.js\",\n \"require\": \"./dist/components/sidebar/index.cjs\"\n },\n \"./terminal\": {\n \"types\": \"./dist/components/terminal/index.d.ts\",\n \"import\": \"./dist/components/terminal/index.js\",\n \"require\": \"./dist/components/terminal/index.cjs\"\n },\n \"./i18n\": {\n \"types\": \"./dist/i18n/index.d.ts\",\n \"import\": \"./dist/i18n/index.js\",\n \"require\": \"./dist/i18n/index.cjs\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"peerDependencies\": {\n \"react\": \"19.2.8\",\n \"react-dom\": \"19.2.8\",\n \"react-router\": \"7.18.2\"\n }\n}\n"],"mappings":""}
1
+ {"version":3,"file":"package.js","names":[],"sources":["../package.json"],"sourcesContent":["{\n \"name\": \"@openhands/agent-canvas\",\n \"version\": \"1.12.0\",\n \"description\": \"Agent Canvas UI for OpenHands - run AI coding agents with a visual interface\",\n \"license\": \"MIT\",\n \"private\": false,\n \"type\": \"module\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/OpenHands/OpenHands\"\n },\n \"homepage\": \"https://github.com/OpenHands/OpenHands#readme\",\n \"bugs\": {\n \"url\": \"https://github.com/OpenHands/OpenHands/issues\"\n },\n \"bin\": {\n \"agent-canvas\": \"bin/agent-canvas.mjs\"\n },\n \"engines\": {\n \"node\": \">=22.12.0\"\n },\n \"dependencies\": {\n \"@heroui/react\": \"2.8.10\",\n \"@microlink/react-json-view\": \"1.31.20\",\n \"@monaco-editor/react\": \"4.7.0\",\n \"@openhands/extensions\": \"0.16.0\",\n \"@openhands/typescript-client\": \"1.36.1\",\n \"@react-router/node\": \"7.18.2\",\n \"@react-router/serve\": \"7.18.2\",\n \"@tailwindcss/vite\": \"4.3.3\",\n \"@tanstack/react-query\": \"5.101.4\",\n \"@types/shell-quote\": \"1.7.5\",\n \"@uidotdev/usehooks\": \"2.4.1\",\n \"@xterm/addon-fit\": \"0.11.0\",\n \"@xterm/xterm\": \"6.0.0\",\n \"axios\": \"1.18.0\",\n \"class-variance-authority\": \"0.7.1\",\n \"clsx\": \"2.1.1\",\n \"downshift\": \"9.3.2\",\n \"framer-motion\": \"12.38.0\",\n \"httpxy\": \"0.5.3\",\n \"i18next\": \"26.3.6\",\n \"i18next-browser-languagedetector\": \"8.2.1\",\n \"i18next-http-backend\": \"4.0.0\",\n \"isbot\": \"5.1.39\",\n \"lucide-react\": \"1.25.0\",\n \"monaco-editor\": \"0.56.0\",\n \"posthog-js\": \"1.380.0\",\n \"react\": \"19.2.8\",\n \"react-dom\": \"19.2.8\",\n \"react-hot-toast\": \"2.6.0\",\n \"react-i18next\": \"17.0.11\",\n \"react-icons\": \"5.6.0\",\n \"react-markdown\": \"10.1.0\",\n \"react-router\": \"7.18.2\",\n \"react-syntax-highlighter\": \"16.1.1\",\n \"rehype-raw\": \"7.0.0\",\n \"rehype-sanitize\": \"6.0.0\",\n \"remark-breaks\": \"4.0.0\",\n \"remark-gfm\": \"4.0.1\",\n \"shell-quote\": \"1.9.0\",\n \"sirv\": \"3.0.2\",\n \"sirv-cli\": \"3.0.1\",\n \"socket.io-client\": \"4.8.3\",\n \"tailwind-merge\": \"3.6.0\",\n \"tailwind-scrollbar\": \"4.0.2\",\n \"unist-util-visit\": \"5.1.0\",\n \"uuid\": \"14.0.0\",\n \"vite\": \"8.0.16\",\n \"winston\": \"3.19.0\",\n \"winston-daily-rotate-file\": \"5.0.0\",\n \"zustand\": \"5.0.12\"\n },\n \"scripts\": {\n \"dev\": \"node --env-file-if-exists=.env scripts/dev-with-automation.mjs\",\n \"dev:static\": \"node --env-file-if-exists=.env scripts/dev-static.mjs\",\n \"dev:extra-backend\": \"node --env-file-if-exists=.env scripts/dev-extra-backend.mjs\",\n \"dev:minimal\": \"node --env-file-if-exists=.env scripts/dev-safe.mjs\",\n \"dev:frontend\": \"npm run make-i18n && cross-env VITE_MOCK_API=false react-router dev\",\n \"dev:mock\": \"npm run make-i18n && cross-env VITE_MOCK_API=true react-router dev\",\n \"build\": \"npm run build:app\",\n \"build:mock\": \"npm run make-i18n && cross-env VITE_MOCK_API=true react-router build\",\n \"start\": \"npx sirv-cli build/ --single\",\n \"test\": \"npm run make-i18n && vitest run\",\n \"test:e2e\": \"playwright test --pass-with-no-tests\",\n \"test:e2e:live\": \"node --env-file-if-exists=.env tests/e2e/live/scripts/run-live-e2e.mjs\",\n \"test:e2e:mock-llm\": \"playwright test --config=playwright.mock-llm.config.ts\",\n \"test:e2e:mock-llm:docker\": \"playwright test --config=playwright.mock-llm-docker.config.ts\",\n \"test:coverage\": \"npm run make-i18n && vitest run --coverage\",\n \"test:mutation\": \"npm run make-i18n && stryker run\",\n \"test:mutation:diff\": \"npm run make-i18n && node scripts/stryker-diff.mjs\",\n \"test:mutation:incremental\": \"npm run make-i18n && stryker run --incremental\",\n \"dev_wsl\": \"VITE_WATCH_USE_POLLING=true vite\",\n \"preview\": \"vite preview\",\n \"make-i18n\": \"node scripts/make-i18n-translations.cjs\",\n \"prelint\": \"npm run make-i18n\",\n \"lint\": \"npm run typecheck && eslint src && prettier --check src/**/*.{ts,tsx}\",\n \"lint:fix\": \"eslint src --fix && prettier --write src/**/*.{ts,tsx}\",\n \"prepare\": \"husky\",\n \"typecheck\": \"react-router typegen && tsc\",\n \"typecheck:staged\": \"react-router typegen && npx tsc --noEmit --skipLibCheck\",\n \"check-translation-completeness\": \"node scripts/check-translation-completeness.cjs\",\n \"build:app\": \"npm run make-i18n && react-router build\",\n \"build:lib\": \"npm run make-i18n && react-router typegen && cross-env BUILD_LIB=true vite build && tsc -p tsconfig.lib.json\",\n \"build:docker\": \"node scripts/docker-build.mjs\",\n \"example:acp-docker:env\": \"node scripts/gen-acp-docker-env.mjs\",\n \"predesktop\": \"node scripts/brand-dev-electron.mjs\",\n \"desktop\": \"npm run build:app && electron electron\",\n \"build:desktop\": \"npm run build:app && node scripts/download-uv.mjs && node scripts/download-node.mjs && electron-builder --config electron-builder.config.mjs --publish never\",\n \"build:desktop:universal\": \"npm run build:app && node scripts/download-uv.mjs && node scripts/download-node.mjs && cross-env ELECTRON_ARCH=universal electron-builder --config electron-builder.config.mjs --publish never\",\n \"download-uv\": \"node scripts/download-uv.mjs\",\n \"download-node\": \"node scripts/download-node.mjs\",\n \"generate-icons\": \"node scripts/generate-icons.mjs\"\n },\n \"lint-staged\": {\n \"src/**/*.{ts,tsx,js}\": [\n \"eslint --fix\",\n \"prettier --write\"\n ],\n \"src/**/*.{ts,tsx}\": [\n \"node scripts/run-staged-typecheck.mjs\"\n ],\n \"src/**/*\": [\n \"npm run check-translation-completeness\"\n ]\n },\n \"devDependencies\": {\n \"@eslint/eslintrc\": \"3.3.1\",\n \"@eslint/js\": \"9.39.4\",\n \"@mswjs/socket.io-binding\": \"0.2.0\",\n \"@playwright/test\": \"1.62.0\",\n \"@react-router/dev\": \"7.18.2\",\n \"@stryker-mutator/core\": \"9.6.1\",\n \"@stryker-mutator/vitest-runner\": \"9.6.1\",\n \"@tailwindcss/typography\": \"0.5.20\",\n \"@tanstack/eslint-plugin-query\": \"5.101.4\",\n \"@testing-library/dom\": \"10.4.1\",\n \"@testing-library/jest-dom\": \"7.0.0\",\n \"@testing-library/react\": \"16.3.2\",\n \"@testing-library/user-event\": \"14.6.1\",\n \"@types/mdast\": \"4.0.4\",\n \"@types/node\": \"26.1.2\",\n \"@types/react\": \"19.2.17\",\n \"@types/react-dom\": \"19.2.3\",\n \"@types/react-syntax-highlighter\": \"15.5.13\",\n \"@typescript-eslint/eslint-plugin\": \"8.59.2\",\n \"@typescript-eslint/parser\": \"8.59.2\",\n \"@vercel/react-router\": \"1.3.0\",\n \"@vitest/coverage-v8\": \"4.1.10\",\n \"cross-env\": \"10.1.0\",\n \"electron\": \"42.3.3\",\n \"electron-builder\": \"26.15.3\",\n \"eslint\": \"9.39.4\",\n \"eslint-config-prettier\": \"10.1.8\",\n \"eslint-import-resolver-typescript\": \"4.4.5\",\n \"eslint-plugin-i18next\": \"6.1.5\",\n \"eslint-plugin-import-x\": \"4.16.2\",\n \"eslint-plugin-jsx-a11y\": \"6.10.2\",\n \"eslint-plugin-prettier\": \"5.5.5\",\n \"eslint-plugin-react\": \"7.37.5\",\n \"eslint-plugin-react-hooks\": \"7.1.1\",\n \"eslint-plugin-unused-imports\": \"4.4.1\",\n \"globals\": \"16.5.0\",\n \"husky\": \"9.1.7\",\n \"jsdom\": \"30.0.0\",\n \"lint-staged\": \"16.4.0\",\n \"msw\": \"2.15.0\",\n \"png2icons\": \"2.0.1\",\n \"postcss-prefix-selector\": \"2.1.1\",\n \"prettier\": \"3.8.3\",\n \"tailwindcss\": \"4.3.3\",\n \"typescript\": \"6.0.3\",\n \"vite-plugin-svgr\": \"5.2.0\",\n \"vitest\": \"4.1.10\"\n },\n \"packageManager\": \"npm@10.5.0\",\n \"volta\": {\n \"node\": \"22.12.0\"\n },\n \"msw\": {\n \"workerDirectory\": [\n \"public\"\n ]\n },\n \"overrides\": {\n \"@vercel/static-config\": {\n \"ajv\": \"8.20.0\"\n },\n \"dompurify\": \"3.4.12\",\n \"typed-rest-client\": {\n \"qs\": \"6.15.3\"\n }\n },\n \"main\": \"./dist/index.cjs\",\n \"module\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"files\": [\n \"dist\",\n \"bin\",\n \"build\",\n \"config\",\n \"scripts\",\n \"tools\"\n ],\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\"\n },\n \"./browser\": {\n \"types\": \"./dist/components/browser/index.d.ts\",\n \"import\": \"./dist/components/browser/index.js\",\n \"require\": \"./dist/components/browser/index.cjs\"\n },\n \"./conversation\": {\n \"types\": \"./dist/components/conversation/index.d.ts\",\n \"import\": \"./dist/components/conversation/index.js\",\n \"require\": \"./dist/components/conversation/index.cjs\"\n },\n \"./files\": {\n \"types\": \"./dist/components/files/index.d.ts\",\n \"import\": \"./dist/components/files/index.js\",\n \"require\": \"./dist/components/files/index.cjs\"\n },\n \"./settings\": {\n \"types\": \"./dist/components/settings/index.d.ts\",\n \"import\": \"./dist/components/settings/index.js\",\n \"require\": \"./dist/components/settings/index.cjs\"\n },\n \"./sidebar\": {\n \"types\": \"./dist/components/sidebar/index.d.ts\",\n \"import\": \"./dist/components/sidebar/index.js\",\n \"require\": \"./dist/components/sidebar/index.cjs\"\n },\n \"./terminal\": {\n \"types\": \"./dist/components/terminal/index.d.ts\",\n \"import\": \"./dist/components/terminal/index.js\",\n \"require\": \"./dist/components/terminal/index.cjs\"\n },\n \"./i18n\": {\n \"types\": \"./dist/i18n/index.d.ts\",\n \"import\": \"./dist/i18n/index.js\",\n \"require\": \"./dist/i18n/index.cjs\"\n },\n \"./package.json\": \"./package.json\"\n },\n \"peerDependencies\": {\n \"react\": \"19.2.8\",\n \"react-dom\": \"19.2.8\",\n \"react-router\": \"7.18.2\"\n }\n}\n"],"mappings":""}
@@ -1,2 +1,2 @@
1
- const e=require("../_virtual/_rolldown/runtime.cjs"),t=require("../node_modules/react-i18next/dist/es/useTranslation.cjs"),n=require("../i18n/declaration.cjs"),r=require("../i18n/index.cjs"),i=require("../utils/retrieve-axios-error-message.cjs"),a=require("../utils/custom-toast-handlers.cjs"),o=require("../services/telemetry.cjs"),s=require("../contexts/active-backend-context.cjs"),c=require("../services/settings.cjs"),l=require("../hooks/query/use-llm-profiles.cjs"),u=require("../hooks/query/use-settings.cjs"),d=require("../components/shared/navigation-link.cjs"),f=require("../components/features/settings/brand-button.cjs"),p=require("../hooks/mutation/use-save-settings.cjs"),m=require("../components/features/settings/settings-switch.cjs"),h=require("../components/features/settings/settings-input.cjs"),g=require("../components/features/settings/settings-dropdown-input.cjs"),_=require("../components/features/settings/app-settings/language-input.cjs"),v=require("../components/features/settings/app-settings/theme-input.cjs"),y=require("../components/features/settings/app-settings/app-settings-inputs-skeleton.cjs");let b=require("react");b=e.__toESM(b,1);let x=require("react/jsx-runtime");var S=`__automatic__`;function C(){let{t:e}=t.useTranslation(`openhands`),{mutate:C,isPending:w}=p.useSaveSettings(),{data:T,isLoading:E}=u.useSettings(),D=s.useActiveBackend().backend.kind===`cloud`,{data:O,isLoading:k}=l.useLlmProfiles(),[A,j]=b.default.useState(!1),[M,N]=b.default.useState(!1),[P,F]=b.default.useState(!1),[I,L]=b.default.useState(!1),[R,z]=b.default.useState(!1),[B,V]=b.default.useState(void 0),H=b.default.useMemo(()=>{let e=T?.title_llm_profile??null;return!e||!O||O.profiles.some(t=>t.name===e)?e:null},[O,T?.title_llm_profile]),U=B===void 0?H:B,W=b.default.useMemo(()=>[{key:S,label:e(n.I18nKey.SETTINGS$TITLE_GENERATION_AUTOMATIC)},...O?.profiles.map(t=>({key:t.name,label:t.model?e(n.I18nKey.SETTINGS$TITLE_GENERATION_PROFILE_OPTION,{name:t.name,model:t.model}):t.name}))??[]],[O?.profiles,e]),G=t=>{let s=t.get(`language-input`)?.toString(),l=r.AvailableLanguages.find(({label:e})=>e===s)?.value||c.DEFAULT_SETTINGS.language,u=D?!0:t.get(`enable-analytics-switch`)?.toString()===`on`,d=t.get(`enable-sound-notifications-switch`)?.toString()===`on`,f=t.get(`git-user-name-input`)?.toString()||c.DEFAULT_SETTINGS.git_user_name,p=t.get(`git-user-email-input`)?.toString()||c.DEFAULT_SETTINGS.git_user_email;C({language:l,...!D&&{user_consents_to_analytics:u},enable_sound_notifications:d,git_user_name:f,git_user_email:p,title_llm_profile:U},{onSuccess:()=>{o.setTelemetryConsent(u?`granted`:`denied`),a.displaySuccessToast(e(n.I18nKey.SETTINGS$SAVED))},onError:t=>{a.displayErrorToast(i.retrieveAxiosErrorMessage(t)||e(n.I18nKey.ERROR$GENERIC))},onSettled:()=>{j(!1),N(!1),F(!1),L(!1),z(!1),V(void 0)}})},K=e=>{let t=r.AvailableLanguages.find(({label:t})=>t===e)?.label,n=r.AvailableLanguages.find(({value:e})=>e===T?.language)?.label;j(t!==n)},q=e=>{N(e!==(T?.user_consents_to_analytics??!0))},J=e=>{F(e!==!!T?.enable_sound_notifications)},Y=e=>{let t=T?.git_user_name;L(e!==t)},X=e=>{let t=T?.git_user_email;z(e!==t)},Z=!A&&!M&&!P&&U===H&&!I&&!R,Q=!T||E||k||w;return(0,x.jsxs)(`form`,{"data-testid":`app-settings-screen`,action:G,className:`flex flex-col gap-6`,children:[Q&&(0,x.jsx)(y.AppSettingsInputsSkeleton,{}),!Q&&(0,x.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,x.jsx)(_.LanguageInput,{name:`language-input`,defaultKey:T.language,onChange:K}),(0,x.jsx)(v.ThemeInput,{}),(0,x.jsx)(m.SettingsSwitch,{testId:`enable-analytics-switch`,name:D?void 0:`enable-analytics-switch`,defaultIsToggled:D?!0:T.user_consents_to_analytics??!0,isToggled:D?!0:void 0,isDisabled:D,onToggle:D?void 0:q,children:e(n.I18nKey.ANALYTICS$SEND_ANONYMOUS_DATA)}),(0,x.jsx)(m.SettingsSwitch,{testId:`enable-sound-notifications-switch`,name:`enable-sound-notifications-switch`,defaultIsToggled:!!T.enable_sound_notifications,onToggle:J,children:e(n.I18nKey.SETTINGS$SOUND_NOTIFICATIONS)}),(0,x.jsxs)(`div`,{className:`border-t border-[var(--oh-border)] pt-6 mt-2`,children:[(0,x.jsx)(`h3`,{className:`text-lg font-medium mb-2`,children:e(n.I18nKey.SETTINGS$CONVERSATION_TITLES)}),(0,x.jsx)(`p`,{className:`mb-4 text-sm leading-5 text-tertiary-light`,children:e(n.I18nKey.SETTINGS$TITLE_GENERATION_DESCRIPTION)}),(0,x.jsx)(g.SettingsDropdownInput,{testId:`title-llm-profile-input`,name:`title-llm-profile-input`,label:e(n.I18nKey.SETTINGS$TITLE_GENERATION_MODEL),items:W,selectedKey:U??S,onSelectionChange:e=>{let t=e?.toString();V(!t||t===S?null:t)}}),(0,x.jsx)(d.NavigationLink,{to:`/settings/llm`,className:`mt-3 inline-block text-sm text-primary hover:underline`,children:e(n.I18nKey.SETTINGS$MANAGE_LLM_PROFILES)})]}),(0,x.jsxs)(`div`,{className:`border-t border-[var(--oh-border)] pt-6 mt-2`,children:[(0,x.jsx)(`h3`,{className:`text-lg font-medium mb-2`,children:e(n.I18nKey.SETTINGS$GIT_SETTINGS)}),(0,x.jsx)(`p`,{className:`mb-4 text-sm leading-5 text-tertiary-light`,children:e(n.I18nKey.SETTINGS$GIT_SETTINGS_DESCRIPTION)}),(0,x.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,x.jsx)(h.SettingsInput,{testId:`git-user-name-input`,name:`git-user-name-input`,type:`text`,label:e(n.I18nKey.SETTINGS$GIT_USERNAME),defaultValue:T.git_user_name||``,onChange:Y,placeholder:e(n.I18nKey.SETTINGS$GIT_USERNAME_PLACEHOLDER),className:`w-full min-w-0`}),(0,x.jsx)(h.SettingsInput,{testId:`git-user-email-input`,name:`git-user-email-input`,type:`email`,label:e(n.I18nKey.SETTINGS$GIT_EMAIL),defaultValue:T.git_user_email||``,onChange:X,placeholder:e(n.I18nKey.SETTINGS$GIT_EMAIL_PLACEHOLDER),className:`w-full min-w-0`})]}),(0,x.jsx)(`div`,{className:`flex justify-start pt-4`,children:(0,x.jsxs)(f.BrandButton,{testId:`submit-button`,variant:`primary`,type:`submit`,isDisabled:w||Z,children:[!w&&e(n.I18nKey.SETTINGS$SAVE_CHANGES),w&&e(n.I18nKey.SETTINGS$SAVING)]})})]})]})]})}exports.default=C;
1
+ const e=require("../_virtual/_rolldown/runtime.cjs"),t=require("../node_modules/react-i18next/dist/es/useTranslation.cjs"),n=require("../i18n/declaration.cjs"),r=require("../i18n/index.cjs"),i=require("../utils/retrieve-axios-error-message.cjs"),a=require("../utils/custom-toast-handlers.cjs"),o=require("../services/telemetry.cjs"),s=require("../contexts/active-backend-context.cjs"),c=require("../services/settings.cjs"),l=require("../utils/format-model-name.cjs"),u=require("../hooks/query/use-llm-profiles.cjs"),d=require("../hooks/query/use-settings.cjs"),f=require("../components/shared/navigation-link.cjs"),p=require("../components/features/settings/brand-button.cjs"),m=require("../hooks/mutation/use-save-settings.cjs"),h=require("../components/features/settings/settings-switch.cjs"),g=require("../components/features/settings/settings-input.cjs"),_=require("../components/features/settings/settings-dropdown-input.cjs"),v=require("../components/features/settings/app-settings/language-input.cjs"),y=require("../components/features/settings/app-settings/theme-input.cjs"),b=require("../components/features/settings/app-settings/app-settings-inputs-skeleton.cjs");let x=require("react");x=e.__toESM(x,1);let S=require("react/jsx-runtime");var C=`__automatic__`;function w(){let{t:e}=t.useTranslation(`openhands`),{mutate:w,isPending:T}=m.useSaveSettings(),{data:E,isLoading:D}=d.useSettings(),O=s.useActiveBackend().backend.kind===`cloud`,{data:k,isLoading:A}=u.useLlmProfiles(),[j,M]=x.default.useState(!1),[N,P]=x.default.useState(!1),[F,I]=x.default.useState(!1),[L,R]=x.default.useState(!1),[z,B]=x.default.useState(!1),[V,H]=x.default.useState(void 0),U=x.default.useMemo(()=>{let e=E?.title_llm_profile??null;return!e||!k||k.profiles.some(t=>t.name===e)?e:null},[k,E?.title_llm_profile]),W=V===void 0?U:V,G=x.default.useMemo(()=>[{key:C,label:e(n.I18nKey.SETTINGS$TITLE_GENERATION_AUTOMATIC)},...k?.profiles.map(t=>({key:t.name,label:t.model?e(n.I18nKey.SETTINGS$TITLE_GENERATION_PROFILE_OPTION,{name:t.name,model:l.formatModelNameForDisplay(t.model)??t.model}):t.name}))??[]],[k?.profiles,e]),K=t=>{let s=t.get(`language-input`)?.toString(),l=r.AvailableLanguages.find(({label:e})=>e===s)?.value||c.DEFAULT_SETTINGS.language,u=O?!0:t.get(`enable-analytics-switch`)?.toString()===`on`,d=t.get(`enable-sound-notifications-switch`)?.toString()===`on`,f=t.get(`git-user-name-input`)?.toString()||c.DEFAULT_SETTINGS.git_user_name,p=t.get(`git-user-email-input`)?.toString()||c.DEFAULT_SETTINGS.git_user_email;w({language:l,...!O&&{user_consents_to_analytics:u},enable_sound_notifications:d,git_user_name:f,git_user_email:p,title_llm_profile:W},{onSuccess:()=>{o.setTelemetryConsent(u?`granted`:`denied`),a.displaySuccessToast(e(n.I18nKey.SETTINGS$SAVED))},onError:t=>{a.displayErrorToast(i.retrieveAxiosErrorMessage(t)||e(n.I18nKey.ERROR$GENERIC))},onSettled:()=>{M(!1),P(!1),I(!1),R(!1),B(!1),H(void 0)}})},q=e=>{let t=r.AvailableLanguages.find(({label:t})=>t===e)?.label,n=r.AvailableLanguages.find(({value:e})=>e===E?.language)?.label;M(t!==n)},J=e=>{P(e!==(E?.user_consents_to_analytics??!0))},Y=e=>{I(e!==!!E?.enable_sound_notifications)},X=e=>{let t=E?.git_user_name;R(e!==t)},Z=e=>{let t=E?.git_user_email;B(e!==t)},Q=!j&&!N&&!F&&W===U&&!L&&!z,$=!E||D||A||T;return(0,S.jsxs)(`form`,{"data-testid":`app-settings-screen`,action:K,className:`flex flex-col gap-6`,children:[$&&(0,S.jsx)(b.AppSettingsInputsSkeleton,{}),!$&&(0,S.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,S.jsx)(v.LanguageInput,{name:`language-input`,defaultKey:E.language,onChange:q}),(0,S.jsx)(y.ThemeInput,{}),(0,S.jsx)(h.SettingsSwitch,{testId:`enable-analytics-switch`,name:O?void 0:`enable-analytics-switch`,defaultIsToggled:O?!0:E.user_consents_to_analytics??!0,isToggled:O?!0:void 0,isDisabled:O,onToggle:O?void 0:J,children:e(n.I18nKey.ANALYTICS$SEND_ANONYMOUS_DATA)}),(0,S.jsx)(h.SettingsSwitch,{testId:`enable-sound-notifications-switch`,name:`enable-sound-notifications-switch`,defaultIsToggled:!!E.enable_sound_notifications,onToggle:Y,children:e(n.I18nKey.SETTINGS$SOUND_NOTIFICATIONS)}),(0,S.jsxs)(`div`,{className:`border-t border-[var(--oh-border)] pt-6 mt-2`,children:[(0,S.jsx)(`h3`,{className:`text-lg font-medium mb-2`,children:e(n.I18nKey.SETTINGS$CONVERSATION_TITLES)}),(0,S.jsx)(`p`,{className:`mb-4 text-sm leading-5 text-tertiary-light`,children:e(n.I18nKey.SETTINGS$TITLE_GENERATION_DESCRIPTION)}),(0,S.jsx)(_.SettingsDropdownInput,{testId:`title-llm-profile-input`,name:`title-llm-profile-input`,label:e(n.I18nKey.SETTINGS$TITLE_GENERATION_MODEL),items:G,selectedKey:W??C,onSelectionChange:e=>{let t=e?.toString();H(!t||t===C?null:t)}}),(0,S.jsx)(f.NavigationLink,{to:`/settings/llm`,className:`mt-3 inline-block text-sm text-primary hover:underline`,children:e(n.I18nKey.SETTINGS$MANAGE_LLM_PROFILES)})]}),(0,S.jsxs)(`div`,{className:`border-t border-[var(--oh-border)] pt-6 mt-2`,children:[(0,S.jsx)(`h3`,{className:`text-lg font-medium mb-2`,children:e(n.I18nKey.SETTINGS$GIT_SETTINGS)}),(0,S.jsx)(`p`,{className:`mb-4 text-sm leading-5 text-tertiary-light`,children:e(n.I18nKey.SETTINGS$GIT_SETTINGS_DESCRIPTION)}),(0,S.jsxs)(`div`,{className:`flex flex-col gap-6`,children:[(0,S.jsx)(g.SettingsInput,{testId:`git-user-name-input`,name:`git-user-name-input`,type:`text`,label:e(n.I18nKey.SETTINGS$GIT_USERNAME),defaultValue:E.git_user_name||``,onChange:X,placeholder:e(n.I18nKey.SETTINGS$GIT_USERNAME_PLACEHOLDER),className:`w-full min-w-0`}),(0,S.jsx)(g.SettingsInput,{testId:`git-user-email-input`,name:`git-user-email-input`,type:`email`,label:e(n.I18nKey.SETTINGS$GIT_EMAIL),defaultValue:E.git_user_email||``,onChange:Z,placeholder:e(n.I18nKey.SETTINGS$GIT_EMAIL_PLACEHOLDER),className:`w-full min-w-0`})]}),(0,S.jsx)(`div`,{className:`flex justify-start pt-4`,children:(0,S.jsxs)(p.BrandButton,{testId:`submit-button`,variant:`primary`,type:`submit`,isDisabled:T||Q,children:[!T&&e(n.I18nKey.SETTINGS$SAVE_CHANGES),T&&e(n.I18nKey.SETTINGS$SAVING)]})})]})]})]})}exports.default=w;
2
2
  //# sourceMappingURL=app-settings.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"app-settings.cjs","names":[],"sources":["../../src/routes/app-settings.tsx"],"sourcesContent":["import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useSaveSettings } from \"#/hooks/mutation/use-save-settings\";\nimport { useSettings } from \"#/hooks/query/use-settings\";\nimport { AvailableLanguages } from \"#/i18n\";\nimport { DEFAULT_SETTINGS } from \"#/services/settings\";\nimport { setTelemetryConsent } from \"#/services/telemetry\";\nimport { BrandButton } from \"#/components/features/settings/brand-button\";\nimport { SettingsSwitch } from \"#/components/features/settings/settings-switch\";\nimport { SettingsInput } from \"#/components/features/settings/settings-input\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { LanguageInput } from \"#/components/features/settings/app-settings/language-input\";\nimport { ThemeInput } from \"#/components/features/settings/app-settings/theme-input\";\nimport {\n displayErrorToast,\n displaySuccessToast,\n} from \"#/utils/custom-toast-handlers\";\nimport { retrieveAxiosErrorMessage } from \"#/utils/retrieve-axios-error-message\";\nimport { AppSettingsInputsSkeleton } from \"#/components/features/settings/app-settings/app-settings-inputs-skeleton\";\nimport { SettingsDropdownInput } from \"#/components/features/settings/settings-dropdown-input\";\nimport { NavigationLink } from \"#/components/shared/navigation-link\";\nimport { useLlmProfiles } from \"#/hooks/query/use-llm-profiles\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\n\nconst AUTOMATIC_TITLE_LLM_PROFILE_KEY = \"__automatic__\";\n\nexport function AppSettingsScreen() {\n const { t } = useTranslation(\"openhands\");\n\n const { mutate: saveSettings, isPending } = useSaveSettings();\n const { data: settings, isLoading } = useSettings();\n const activeBackend = useActiveBackend();\n const isCloudBackend = activeBackend.backend.kind === \"cloud\";\n const { data: llmProfiles, isLoading: areLlmProfilesLoading } =\n useLlmProfiles();\n\n const [languageInputHasChanged, setLanguageInputHasChanged] =\n React.useState(false);\n const [analyticsSwitchHasChanged, setAnalyticsSwitchHasChanged] =\n React.useState(false);\n const [\n soundNotificationsSwitchHasChanged,\n setSoundNotificationsSwitchHasChanged,\n ] = React.useState(false);\n const [gitUserNameHasChanged, setGitUserNameHasChanged] =\n React.useState(false);\n const [gitUserEmailHasChanged, setGitUserEmailHasChanged] =\n React.useState(false);\n const [titleLlmProfileInput, setTitleLlmProfileInput] = React.useState<\n string | null | undefined\n >(undefined);\n\n const storedTitleLlmProfile = React.useMemo(() => {\n const preference = settings?.title_llm_profile ?? null;\n if (!preference || !llmProfiles) return preference;\n return llmProfiles.profiles.some((profile) => profile.name === preference)\n ? preference\n : null;\n }, [llmProfiles, settings?.title_llm_profile]);\n const selectedTitleLlmProfile =\n titleLlmProfileInput === undefined\n ? storedTitleLlmProfile\n : titleLlmProfileInput;\n const titleLlmProfileItems = React.useMemo(\n () => [\n {\n key: AUTOMATIC_TITLE_LLM_PROFILE_KEY,\n label: t(I18nKey.SETTINGS$TITLE_GENERATION_AUTOMATIC),\n },\n ...(llmProfiles?.profiles.map((profile) => ({\n key: profile.name,\n label: profile.model\n ? t(I18nKey.SETTINGS$TITLE_GENERATION_PROFILE_OPTION, {\n name: profile.name,\n model: profile.model,\n })\n : profile.name,\n })) ?? []),\n ],\n [llmProfiles?.profiles, t],\n );\n\n const formAction = (formData: FormData) => {\n const languageLabel = formData.get(\"language-input\")?.toString();\n const languageValue = AvailableLanguages.find(\n ({ label }) => label === languageLabel,\n )?.value;\n const language = languageValue || DEFAULT_SETTINGS.language;\n\n const enableAnalytics = isCloudBackend\n ? true\n : formData.get(\"enable-analytics-switch\")?.toString() === \"on\";\n const enableSoundNotifications =\n formData.get(\"enable-sound-notifications-switch\")?.toString() === \"on\";\n\n const gitUserName =\n formData.get(\"git-user-name-input\")?.toString() ||\n DEFAULT_SETTINGS.git_user_name;\n const gitUserEmail =\n formData.get(\"git-user-email-input\")?.toString() ||\n DEFAULT_SETTINGS.git_user_email;\n\n saveSettings(\n {\n language,\n ...(!isCloudBackend && { user_consents_to_analytics: enableAnalytics }),\n enable_sound_notifications: enableSoundNotifications,\n git_user_name: gitUserName,\n git_user_email: gitUserEmail,\n title_llm_profile: selectedTitleLlmProfile,\n },\n {\n onSuccess: () => {\n void setTelemetryConsent(enableAnalytics ? \"granted\" : \"denied\");\n displaySuccessToast(t(I18nKey.SETTINGS$SAVED));\n },\n onError: (error) => {\n const errorMessage = retrieveAxiosErrorMessage(error);\n displayErrorToast(errorMessage || t(I18nKey.ERROR$GENERIC));\n },\n onSettled: () => {\n setLanguageInputHasChanged(false);\n setAnalyticsSwitchHasChanged(false);\n setSoundNotificationsSwitchHasChanged(false);\n setGitUserNameHasChanged(false);\n setGitUserEmailHasChanged(false);\n setTitleLlmProfileInput(undefined);\n },\n },\n );\n };\n\n const checkIfLanguageInputHasChanged = (value: string) => {\n const selectedLanguage = AvailableLanguages.find(\n ({ label: langValue }) => langValue === value,\n )?.label;\n const currentLanguage = AvailableLanguages.find(\n ({ value: langValue }) => langValue === settings?.language,\n )?.label;\n\n setLanguageInputHasChanged(selectedLanguage !== currentLanguage);\n };\n\n const checkIfAnalyticsSwitchHasChanged = (checked: boolean) => {\n // Treat null as true since analytics is opt-in by default\n const currentAnalytics = settings?.user_consents_to_analytics ?? true;\n setAnalyticsSwitchHasChanged(checked !== currentAnalytics);\n };\n\n const checkIfSoundNotificationsSwitchHasChanged = (checked: boolean) => {\n const currentSoundNotifications = !!settings?.enable_sound_notifications;\n setSoundNotificationsSwitchHasChanged(\n checked !== currentSoundNotifications,\n );\n };\n\n const checkIfGitUserNameHasChanged = (value: string) => {\n const currentValue = settings?.git_user_name;\n setGitUserNameHasChanged(value !== currentValue);\n };\n\n const checkIfGitUserEmailHasChanged = (value: string) => {\n const currentValue = settings?.git_user_email;\n setGitUserEmailHasChanged(value !== currentValue);\n };\n\n const formIsClean =\n !languageInputHasChanged &&\n !analyticsSwitchHasChanged &&\n !soundNotificationsSwitchHasChanged &&\n selectedTitleLlmProfile === storedTitleLlmProfile &&\n !gitUserNameHasChanged &&\n !gitUserEmailHasChanged;\n\n const shouldBeLoading =\n !settings || isLoading || areLlmProfilesLoading || isPending;\n\n return (\n <form\n data-testid=\"app-settings-screen\"\n action={formAction}\n className=\"flex flex-col gap-6\"\n >\n {shouldBeLoading && <AppSettingsInputsSkeleton />}\n {!shouldBeLoading && (\n <div className=\"flex flex-col gap-6\">\n <LanguageInput\n name=\"language-input\"\n defaultKey={settings.language}\n onChange={checkIfLanguageInputHasChanged}\n />\n\n <ThemeInput />\n\n <SettingsSwitch\n testId=\"enable-analytics-switch\"\n name={isCloudBackend ? undefined : \"enable-analytics-switch\"}\n defaultIsToggled={\n isCloudBackend\n ? true\n : (settings.user_consents_to_analytics ?? true)\n }\n isToggled={isCloudBackend ? true : undefined}\n isDisabled={isCloudBackend}\n onToggle={\n isCloudBackend ? undefined : checkIfAnalyticsSwitchHasChanged\n }\n >\n {t(I18nKey.ANALYTICS$SEND_ANONYMOUS_DATA)}\n </SettingsSwitch>\n\n <SettingsSwitch\n testId=\"enable-sound-notifications-switch\"\n name=\"enable-sound-notifications-switch\"\n defaultIsToggled={!!settings.enable_sound_notifications}\n onToggle={checkIfSoundNotificationsSwitchHasChanged}\n >\n {t(I18nKey.SETTINGS$SOUND_NOTIFICATIONS)}\n </SettingsSwitch>\n\n <div className=\"border-t border-[var(--oh-border)] pt-6 mt-2\">\n <h3 className=\"text-lg font-medium mb-2\">\n {t(I18nKey.SETTINGS$CONVERSATION_TITLES)}\n </h3>\n <p className=\"mb-4 text-sm leading-5 text-tertiary-light\">\n {t(I18nKey.SETTINGS$TITLE_GENERATION_DESCRIPTION)}\n </p>\n <SettingsDropdownInput\n testId=\"title-llm-profile-input\"\n name=\"title-llm-profile-input\"\n label={t(I18nKey.SETTINGS$TITLE_GENERATION_MODEL)}\n items={titleLlmProfileItems}\n selectedKey={\n selectedTitleLlmProfile ?? AUTOMATIC_TITLE_LLM_PROFILE_KEY\n }\n onSelectionChange={(key) => {\n const value = key?.toString();\n setTitleLlmProfileInput(\n !value || value === AUTOMATIC_TITLE_LLM_PROFILE_KEY\n ? null\n : value,\n );\n }}\n />\n <NavigationLink\n to=\"/settings/llm\"\n className=\"mt-3 inline-block text-sm text-primary hover:underline\"\n >\n {t(I18nKey.SETTINGS$MANAGE_LLM_PROFILES)}\n </NavigationLink>\n </div>\n\n <div className=\"border-t border-[var(--oh-border)] pt-6 mt-2\">\n <h3 className=\"text-lg font-medium mb-2\">\n {t(I18nKey.SETTINGS$GIT_SETTINGS)}\n </h3>\n <p className=\"mb-4 text-sm leading-5 text-tertiary-light\">\n {t(I18nKey.SETTINGS$GIT_SETTINGS_DESCRIPTION)}\n </p>\n <div className=\"flex flex-col gap-6\">\n <SettingsInput\n testId=\"git-user-name-input\"\n name=\"git-user-name-input\"\n type=\"text\"\n label={t(I18nKey.SETTINGS$GIT_USERNAME)}\n defaultValue={settings.git_user_name || \"\"}\n onChange={checkIfGitUserNameHasChanged}\n placeholder={t(I18nKey.SETTINGS$GIT_USERNAME_PLACEHOLDER)}\n className=\"w-full min-w-0\"\n />\n <SettingsInput\n testId=\"git-user-email-input\"\n name=\"git-user-email-input\"\n type=\"email\"\n label={t(I18nKey.SETTINGS$GIT_EMAIL)}\n defaultValue={settings.git_user_email || \"\"}\n onChange={checkIfGitUserEmailHasChanged}\n placeholder={t(I18nKey.SETTINGS$GIT_EMAIL_PLACEHOLDER)}\n className=\"w-full min-w-0\"\n />\n </div>\n <div className=\"flex justify-start pt-4\">\n <BrandButton\n testId=\"submit-button\"\n variant=\"primary\"\n type=\"submit\"\n isDisabled={isPending || formIsClean}\n >\n {!isPending && t(I18nKey.SETTINGS$SAVE_CHANGES)}\n {isPending && t(I18nKey.SETTINGS$SAVING)}\n </BrandButton>\n </div>\n </div>\n </div>\n )}\n </form>\n );\n}\n\nexport default AppSettingsScreen;\n"],"mappings":"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"}
1
+ {"version":3,"file":"app-settings.cjs","names":[],"sources":["../../src/routes/app-settings.tsx"],"sourcesContent":["import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useSaveSettings } from \"#/hooks/mutation/use-save-settings\";\nimport { useSettings } from \"#/hooks/query/use-settings\";\nimport { AvailableLanguages } from \"#/i18n\";\nimport { DEFAULT_SETTINGS } from \"#/services/settings\";\nimport { setTelemetryConsent } from \"#/services/telemetry\";\nimport { BrandButton } from \"#/components/features/settings/brand-button\";\nimport { SettingsSwitch } from \"#/components/features/settings/settings-switch\";\nimport { SettingsInput } from \"#/components/features/settings/settings-input\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { LanguageInput } from \"#/components/features/settings/app-settings/language-input\";\nimport { ThemeInput } from \"#/components/features/settings/app-settings/theme-input\";\nimport {\n displayErrorToast,\n displaySuccessToast,\n} from \"#/utils/custom-toast-handlers\";\nimport { retrieveAxiosErrorMessage } from \"#/utils/retrieve-axios-error-message\";\nimport { AppSettingsInputsSkeleton } from \"#/components/features/settings/app-settings/app-settings-inputs-skeleton\";\nimport { SettingsDropdownInput } from \"#/components/features/settings/settings-dropdown-input\";\nimport { NavigationLink } from \"#/components/shared/navigation-link\";\nimport { useLlmProfiles } from \"#/hooks/query/use-llm-profiles\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport { formatModelNameForDisplay } from \"#/utils/format-model-name\";\n\nconst AUTOMATIC_TITLE_LLM_PROFILE_KEY = \"__automatic__\";\n\nexport function AppSettingsScreen() {\n const { t } = useTranslation(\"openhands\");\n\n const { mutate: saveSettings, isPending } = useSaveSettings();\n const { data: settings, isLoading } = useSettings();\n const activeBackend = useActiveBackend();\n const isCloudBackend = activeBackend.backend.kind === \"cloud\";\n const { data: llmProfiles, isLoading: areLlmProfilesLoading } =\n useLlmProfiles();\n\n const [languageInputHasChanged, setLanguageInputHasChanged] =\n React.useState(false);\n const [analyticsSwitchHasChanged, setAnalyticsSwitchHasChanged] =\n React.useState(false);\n const [\n soundNotificationsSwitchHasChanged,\n setSoundNotificationsSwitchHasChanged,\n ] = React.useState(false);\n const [gitUserNameHasChanged, setGitUserNameHasChanged] =\n React.useState(false);\n const [gitUserEmailHasChanged, setGitUserEmailHasChanged] =\n React.useState(false);\n const [titleLlmProfileInput, setTitleLlmProfileInput] = React.useState<\n string | null | undefined\n >(undefined);\n\n const storedTitleLlmProfile = React.useMemo(() => {\n const preference = settings?.title_llm_profile ?? null;\n if (!preference || !llmProfiles) return preference;\n return llmProfiles.profiles.some((profile) => profile.name === preference)\n ? preference\n : null;\n }, [llmProfiles, settings?.title_llm_profile]);\n const selectedTitleLlmProfile =\n titleLlmProfileInput === undefined\n ? storedTitleLlmProfile\n : titleLlmProfileInput;\n const titleLlmProfileItems = React.useMemo(\n () => [\n {\n key: AUTOMATIC_TITLE_LLM_PROFILE_KEY,\n label: t(I18nKey.SETTINGS$TITLE_GENERATION_AUTOMATIC),\n },\n ...(llmProfiles?.profiles.map((profile) => ({\n key: profile.name,\n label: profile.model\n ? t(I18nKey.SETTINGS$TITLE_GENERATION_PROFILE_OPTION, {\n name: profile.name,\n model: formatModelNameForDisplay(profile.model) ?? profile.model,\n })\n : profile.name,\n })) ?? []),\n ],\n [llmProfiles?.profiles, t],\n );\n\n const formAction = (formData: FormData) => {\n const languageLabel = formData.get(\"language-input\")?.toString();\n const languageValue = AvailableLanguages.find(\n ({ label }) => label === languageLabel,\n )?.value;\n const language = languageValue || DEFAULT_SETTINGS.language;\n\n const enableAnalytics = isCloudBackend\n ? true\n : formData.get(\"enable-analytics-switch\")?.toString() === \"on\";\n const enableSoundNotifications =\n formData.get(\"enable-sound-notifications-switch\")?.toString() === \"on\";\n\n const gitUserName =\n formData.get(\"git-user-name-input\")?.toString() ||\n DEFAULT_SETTINGS.git_user_name;\n const gitUserEmail =\n formData.get(\"git-user-email-input\")?.toString() ||\n DEFAULT_SETTINGS.git_user_email;\n\n saveSettings(\n {\n language,\n ...(!isCloudBackend && { user_consents_to_analytics: enableAnalytics }),\n enable_sound_notifications: enableSoundNotifications,\n git_user_name: gitUserName,\n git_user_email: gitUserEmail,\n title_llm_profile: selectedTitleLlmProfile,\n },\n {\n onSuccess: () => {\n void setTelemetryConsent(enableAnalytics ? \"granted\" : \"denied\");\n displaySuccessToast(t(I18nKey.SETTINGS$SAVED));\n },\n onError: (error) => {\n const errorMessage = retrieveAxiosErrorMessage(error);\n displayErrorToast(errorMessage || t(I18nKey.ERROR$GENERIC));\n },\n onSettled: () => {\n setLanguageInputHasChanged(false);\n setAnalyticsSwitchHasChanged(false);\n setSoundNotificationsSwitchHasChanged(false);\n setGitUserNameHasChanged(false);\n setGitUserEmailHasChanged(false);\n setTitleLlmProfileInput(undefined);\n },\n },\n );\n };\n\n const checkIfLanguageInputHasChanged = (value: string) => {\n const selectedLanguage = AvailableLanguages.find(\n ({ label: langValue }) => langValue === value,\n )?.label;\n const currentLanguage = AvailableLanguages.find(\n ({ value: langValue }) => langValue === settings?.language,\n )?.label;\n\n setLanguageInputHasChanged(selectedLanguage !== currentLanguage);\n };\n\n const checkIfAnalyticsSwitchHasChanged = (checked: boolean) => {\n // Treat null as true since analytics is opt-in by default\n const currentAnalytics = settings?.user_consents_to_analytics ?? true;\n setAnalyticsSwitchHasChanged(checked !== currentAnalytics);\n };\n\n const checkIfSoundNotificationsSwitchHasChanged = (checked: boolean) => {\n const currentSoundNotifications = !!settings?.enable_sound_notifications;\n setSoundNotificationsSwitchHasChanged(\n checked !== currentSoundNotifications,\n );\n };\n\n const checkIfGitUserNameHasChanged = (value: string) => {\n const currentValue = settings?.git_user_name;\n setGitUserNameHasChanged(value !== currentValue);\n };\n\n const checkIfGitUserEmailHasChanged = (value: string) => {\n const currentValue = settings?.git_user_email;\n setGitUserEmailHasChanged(value !== currentValue);\n };\n\n const formIsClean =\n !languageInputHasChanged &&\n !analyticsSwitchHasChanged &&\n !soundNotificationsSwitchHasChanged &&\n selectedTitleLlmProfile === storedTitleLlmProfile &&\n !gitUserNameHasChanged &&\n !gitUserEmailHasChanged;\n\n const shouldBeLoading =\n !settings || isLoading || areLlmProfilesLoading || isPending;\n\n return (\n <form\n data-testid=\"app-settings-screen\"\n action={formAction}\n className=\"flex flex-col gap-6\"\n >\n {shouldBeLoading && <AppSettingsInputsSkeleton />}\n {!shouldBeLoading && (\n <div className=\"flex flex-col gap-6\">\n <LanguageInput\n name=\"language-input\"\n defaultKey={settings.language}\n onChange={checkIfLanguageInputHasChanged}\n />\n\n <ThemeInput />\n\n <SettingsSwitch\n testId=\"enable-analytics-switch\"\n name={isCloudBackend ? undefined : \"enable-analytics-switch\"}\n defaultIsToggled={\n isCloudBackend\n ? true\n : (settings.user_consents_to_analytics ?? true)\n }\n isToggled={isCloudBackend ? true : undefined}\n isDisabled={isCloudBackend}\n onToggle={\n isCloudBackend ? undefined : checkIfAnalyticsSwitchHasChanged\n }\n >\n {t(I18nKey.ANALYTICS$SEND_ANONYMOUS_DATA)}\n </SettingsSwitch>\n\n <SettingsSwitch\n testId=\"enable-sound-notifications-switch\"\n name=\"enable-sound-notifications-switch\"\n defaultIsToggled={!!settings.enable_sound_notifications}\n onToggle={checkIfSoundNotificationsSwitchHasChanged}\n >\n {t(I18nKey.SETTINGS$SOUND_NOTIFICATIONS)}\n </SettingsSwitch>\n\n <div className=\"border-t border-[var(--oh-border)] pt-6 mt-2\">\n <h3 className=\"text-lg font-medium mb-2\">\n {t(I18nKey.SETTINGS$CONVERSATION_TITLES)}\n </h3>\n <p className=\"mb-4 text-sm leading-5 text-tertiary-light\">\n {t(I18nKey.SETTINGS$TITLE_GENERATION_DESCRIPTION)}\n </p>\n <SettingsDropdownInput\n testId=\"title-llm-profile-input\"\n name=\"title-llm-profile-input\"\n label={t(I18nKey.SETTINGS$TITLE_GENERATION_MODEL)}\n items={titleLlmProfileItems}\n selectedKey={\n selectedTitleLlmProfile ?? AUTOMATIC_TITLE_LLM_PROFILE_KEY\n }\n onSelectionChange={(key) => {\n const value = key?.toString();\n setTitleLlmProfileInput(\n !value || value === AUTOMATIC_TITLE_LLM_PROFILE_KEY\n ? null\n : value,\n );\n }}\n />\n <NavigationLink\n to=\"/settings/llm\"\n className=\"mt-3 inline-block text-sm text-primary hover:underline\"\n >\n {t(I18nKey.SETTINGS$MANAGE_LLM_PROFILES)}\n </NavigationLink>\n </div>\n\n <div className=\"border-t border-[var(--oh-border)] pt-6 mt-2\">\n <h3 className=\"text-lg font-medium mb-2\">\n {t(I18nKey.SETTINGS$GIT_SETTINGS)}\n </h3>\n <p className=\"mb-4 text-sm leading-5 text-tertiary-light\">\n {t(I18nKey.SETTINGS$GIT_SETTINGS_DESCRIPTION)}\n </p>\n <div className=\"flex flex-col gap-6\">\n <SettingsInput\n testId=\"git-user-name-input\"\n name=\"git-user-name-input\"\n type=\"text\"\n label={t(I18nKey.SETTINGS$GIT_USERNAME)}\n defaultValue={settings.git_user_name || \"\"}\n onChange={checkIfGitUserNameHasChanged}\n placeholder={t(I18nKey.SETTINGS$GIT_USERNAME_PLACEHOLDER)}\n className=\"w-full min-w-0\"\n />\n <SettingsInput\n testId=\"git-user-email-input\"\n name=\"git-user-email-input\"\n type=\"email\"\n label={t(I18nKey.SETTINGS$GIT_EMAIL)}\n defaultValue={settings.git_user_email || \"\"}\n onChange={checkIfGitUserEmailHasChanged}\n placeholder={t(I18nKey.SETTINGS$GIT_EMAIL_PLACEHOLDER)}\n className=\"w-full min-w-0\"\n />\n </div>\n <div className=\"flex justify-start pt-4\">\n <BrandButton\n testId=\"submit-button\"\n variant=\"primary\"\n type=\"submit\"\n isDisabled={isPending || formIsClean}\n >\n {!isPending && t(I18nKey.SETTINGS$SAVE_CHANGES)}\n {isPending && t(I18nKey.SETTINGS$SAVING)}\n </BrandButton>\n </div>\n </div>\n </div>\n )}\n </form>\n );\n}\n\nexport default AppSettingsScreen;\n"],"mappings":"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"}
@@ -6,167 +6,168 @@ import { displayErrorToast as i, displaySuccessToast as a } from "../utils/custo
6
6
  import { setTelemetryConsent as o } from "../services/telemetry.js";
7
7
  import { useActiveBackend as s } from "../contexts/active-backend-context.js";
8
8
  import { DEFAULT_SETTINGS as c } from "../services/settings.js";
9
- import { useLlmProfiles as l } from "../hooks/query/use-llm-profiles.js";
10
- import { useSettings as u } from "../hooks/query/use-settings.js";
11
- import { NavigationLink as d } from "../components/shared/navigation-link.js";
12
- import { BrandButton as f } from "../components/features/settings/brand-button.js";
13
- import { useSaveSettings as p } from "../hooks/mutation/use-save-settings.js";
14
- import { SettingsSwitch as m } from "../components/features/settings/settings-switch.js";
15
- import { SettingsInput as h } from "../components/features/settings/settings-input.js";
16
- import { SettingsDropdownInput as g } from "../components/features/settings/settings-dropdown-input.js";
17
- import { LanguageInput as _ } from "../components/features/settings/app-settings/language-input.js";
18
- import { ThemeInput as v } from "../components/features/settings/app-settings/theme-input.js";
19
- import { AppSettingsInputsSkeleton as y } from "../components/features/settings/app-settings/app-settings-inputs-skeleton.js";
20
- import b from "react";
21
- import { jsx as x, jsxs as S } from "react/jsx-runtime";
9
+ import { formatModelNameForDisplay as l } from "../utils/format-model-name.js";
10
+ import { useLlmProfiles as u } from "../hooks/query/use-llm-profiles.js";
11
+ import { useSettings as d } from "../hooks/query/use-settings.js";
12
+ import { NavigationLink as f } from "../components/shared/navigation-link.js";
13
+ import { BrandButton as p } from "../components/features/settings/brand-button.js";
14
+ import { useSaveSettings as m } from "../hooks/mutation/use-save-settings.js";
15
+ import { SettingsSwitch as h } from "../components/features/settings/settings-switch.js";
16
+ import { SettingsInput as g } from "../components/features/settings/settings-input.js";
17
+ import { SettingsDropdownInput as _ } from "../components/features/settings/settings-dropdown-input.js";
18
+ import { LanguageInput as v } from "../components/features/settings/app-settings/language-input.js";
19
+ import { ThemeInput as y } from "../components/features/settings/app-settings/theme-input.js";
20
+ import { AppSettingsInputsSkeleton as b } from "../components/features/settings/app-settings/app-settings-inputs-skeleton.js";
21
+ import x from "react";
22
+ import { jsx as S, jsxs as C } from "react/jsx-runtime";
22
23
  //#region src/routes/app-settings.tsx
23
- var C = "__automatic__";
24
- function w() {
25
- let { t: w } = e("openhands"), { mutate: T, isPending: E } = p(), { data: D, isLoading: O } = u(), k = s().backend.kind === "cloud", { data: A, isLoading: j } = l(), [ee, M] = b.useState(!1), [N, P] = b.useState(!1), [F, I] = b.useState(!1), [L, R] = b.useState(!1), [z, B] = b.useState(!1), [V, H] = b.useState(void 0), U = b.useMemo(() => {
26
- let e = D?.title_llm_profile ?? null;
27
- return !e || !A || A.profiles.some((t) => t.name === e) ? e : null;
28
- }, [A, D?.title_llm_profile]), W = V === void 0 ? U : V, G = b.useMemo(() => [{
29
- key: C,
30
- label: w(t.SETTINGS$TITLE_GENERATION_AUTOMATIC)
31
- }, ...A?.profiles.map((e) => ({
24
+ var w = "__automatic__";
25
+ function T() {
26
+ let { t: T } = e("openhands"), { mutate: E, isPending: D } = m(), { data: O, isLoading: k } = d(), A = s().backend.kind === "cloud", { data: j, isLoading: M } = u(), [ee, N] = x.useState(!1), [P, F] = x.useState(!1), [I, L] = x.useState(!1), [R, z] = x.useState(!1), [B, V] = x.useState(!1), [H, U] = x.useState(void 0), W = x.useMemo(() => {
27
+ let e = O?.title_llm_profile ?? null;
28
+ return !e || !j || j.profiles.some((t) => t.name === e) ? e : null;
29
+ }, [j, O?.title_llm_profile]), G = H === void 0 ? W : H, K = x.useMemo(() => [{
30
+ key: w,
31
+ label: T(t.SETTINGS$TITLE_GENERATION_AUTOMATIC)
32
+ }, ...j?.profiles.map((e) => ({
32
33
  key: e.name,
33
- label: e.model ? w(t.SETTINGS$TITLE_GENERATION_PROFILE_OPTION, {
34
+ label: e.model ? T(t.SETTINGS$TITLE_GENERATION_PROFILE_OPTION, {
34
35
  name: e.name,
35
- model: e.model
36
+ model: l(e.model) ?? e.model
36
37
  }) : e.name
37
- })) ?? []], [A?.profiles, w]), K = (e) => {
38
- let s = e.get("language-input")?.toString(), l = n.find(({ label: e }) => e === s)?.value || c.language, u = k ? !0 : e.get("enable-analytics-switch")?.toString() === "on", d = e.get("enable-sound-notifications-switch")?.toString() === "on", f = e.get("git-user-name-input")?.toString() || c.git_user_name, p = e.get("git-user-email-input")?.toString() || c.git_user_email;
39
- T({
38
+ })) ?? []], [j?.profiles, T]), q = (e) => {
39
+ let s = e.get("language-input")?.toString(), l = n.find(({ label: e }) => e === s)?.value || c.language, u = A ? !0 : e.get("enable-analytics-switch")?.toString() === "on", d = e.get("enable-sound-notifications-switch")?.toString() === "on", f = e.get("git-user-name-input")?.toString() || c.git_user_name, p = e.get("git-user-email-input")?.toString() || c.git_user_email;
40
+ E({
40
41
  language: l,
41
- ...!k && { user_consents_to_analytics: u },
42
+ ...!A && { user_consents_to_analytics: u },
42
43
  enable_sound_notifications: d,
43
44
  git_user_name: f,
44
45
  git_user_email: p,
45
- title_llm_profile: W
46
+ title_llm_profile: G
46
47
  }, {
47
48
  onSuccess: () => {
48
- o(u ? "granted" : "denied"), a(w(t.SETTINGS$SAVED));
49
+ o(u ? "granted" : "denied"), a(T(t.SETTINGS$SAVED));
49
50
  },
50
51
  onError: (e) => {
51
- i(r(e) || w(t.ERROR$GENERIC));
52
+ i(r(e) || T(t.ERROR$GENERIC));
52
53
  },
53
54
  onSettled: () => {
54
- M(!1), P(!1), I(!1), R(!1), B(!1), H(void 0);
55
+ N(!1), F(!1), L(!1), z(!1), V(!1), U(void 0);
55
56
  }
56
57
  });
57
- }, q = (e) => {
58
- let t = n.find(({ label: t }) => t === e)?.label, r = n.find(({ value: e }) => e === D?.language)?.label;
59
- M(t !== r);
60
58
  }, J = (e) => {
61
- P(e !== (D?.user_consents_to_analytics ?? !0));
59
+ let t = n.find(({ label: t }) => t === e)?.label, r = n.find(({ value: e }) => e === O?.language)?.label;
60
+ N(t !== r);
62
61
  }, Y = (e) => {
63
- I(e !== !!D?.enable_sound_notifications);
62
+ F(e !== (O?.user_consents_to_analytics ?? !0));
64
63
  }, X = (e) => {
65
- let t = D?.git_user_name;
66
- R(e !== t);
64
+ L(e !== !!O?.enable_sound_notifications);
67
65
  }, Z = (e) => {
68
- let t = D?.git_user_email;
69
- B(e !== t);
70
- }, Q = !ee && !N && !F && W === U && !L && !z, $ = !D || O || j || E;
71
- return /* @__PURE__ */ S("form", {
66
+ let t = O?.git_user_name;
67
+ z(e !== t);
68
+ }, Q = (e) => {
69
+ let t = O?.git_user_email;
70
+ V(e !== t);
71
+ }, te = !ee && !P && !I && G === W && !R && !B, $ = !O || k || M || D;
72
+ return /* @__PURE__ */ C("form", {
72
73
  "data-testid": "app-settings-screen",
73
- action: K,
74
+ action: q,
74
75
  className: "flex flex-col gap-6",
75
- children: [$ && /* @__PURE__ */ x(y, {}), !$ && /* @__PURE__ */ S("div", {
76
+ children: [$ && /* @__PURE__ */ S(b, {}), !$ && /* @__PURE__ */ C("div", {
76
77
  className: "flex flex-col gap-6",
77
78
  children: [
78
- /* @__PURE__ */ x(_, {
79
+ /* @__PURE__ */ S(v, {
79
80
  name: "language-input",
80
- defaultKey: D.language,
81
- onChange: q
81
+ defaultKey: O.language,
82
+ onChange: J
82
83
  }),
83
- /* @__PURE__ */ x(v, {}),
84
- /* @__PURE__ */ x(m, {
84
+ /* @__PURE__ */ S(y, {}),
85
+ /* @__PURE__ */ S(h, {
85
86
  testId: "enable-analytics-switch",
86
- name: k ? void 0 : "enable-analytics-switch",
87
- defaultIsToggled: k ? !0 : D.user_consents_to_analytics ?? !0,
88
- isToggled: k ? !0 : void 0,
89
- isDisabled: k,
90
- onToggle: k ? void 0 : J,
91
- children: w(t.ANALYTICS$SEND_ANONYMOUS_DATA)
87
+ name: A ? void 0 : "enable-analytics-switch",
88
+ defaultIsToggled: A ? !0 : O.user_consents_to_analytics ?? !0,
89
+ isToggled: A ? !0 : void 0,
90
+ isDisabled: A,
91
+ onToggle: A ? void 0 : Y,
92
+ children: T(t.ANALYTICS$SEND_ANONYMOUS_DATA)
92
93
  }),
93
- /* @__PURE__ */ x(m, {
94
+ /* @__PURE__ */ S(h, {
94
95
  testId: "enable-sound-notifications-switch",
95
96
  name: "enable-sound-notifications-switch",
96
- defaultIsToggled: !!D.enable_sound_notifications,
97
- onToggle: Y,
98
- children: w(t.SETTINGS$SOUND_NOTIFICATIONS)
97
+ defaultIsToggled: !!O.enable_sound_notifications,
98
+ onToggle: X,
99
+ children: T(t.SETTINGS$SOUND_NOTIFICATIONS)
99
100
  }),
100
- /* @__PURE__ */ S("div", {
101
+ /* @__PURE__ */ C("div", {
101
102
  className: "border-t border-[var(--oh-border)] pt-6 mt-2",
102
103
  children: [
103
- /* @__PURE__ */ x("h3", {
104
+ /* @__PURE__ */ S("h3", {
104
105
  className: "text-lg font-medium mb-2",
105
- children: w(t.SETTINGS$CONVERSATION_TITLES)
106
+ children: T(t.SETTINGS$CONVERSATION_TITLES)
106
107
  }),
107
- /* @__PURE__ */ x("p", {
108
+ /* @__PURE__ */ S("p", {
108
109
  className: "mb-4 text-sm leading-5 text-tertiary-light",
109
- children: w(t.SETTINGS$TITLE_GENERATION_DESCRIPTION)
110
+ children: T(t.SETTINGS$TITLE_GENERATION_DESCRIPTION)
110
111
  }),
111
- /* @__PURE__ */ x(g, {
112
+ /* @__PURE__ */ S(_, {
112
113
  testId: "title-llm-profile-input",
113
114
  name: "title-llm-profile-input",
114
- label: w(t.SETTINGS$TITLE_GENERATION_MODEL),
115
- items: G,
116
- selectedKey: W ?? C,
115
+ label: T(t.SETTINGS$TITLE_GENERATION_MODEL),
116
+ items: K,
117
+ selectedKey: G ?? w,
117
118
  onSelectionChange: (e) => {
118
119
  let t = e?.toString();
119
- H(!t || t === C ? null : t);
120
+ U(!t || t === w ? null : t);
120
121
  }
121
122
  }),
122
- /* @__PURE__ */ x(d, {
123
+ /* @__PURE__ */ S(f, {
123
124
  to: "/settings/llm",
124
125
  className: "mt-3 inline-block text-sm text-primary hover:underline",
125
- children: w(t.SETTINGS$MANAGE_LLM_PROFILES)
126
+ children: T(t.SETTINGS$MANAGE_LLM_PROFILES)
126
127
  })
127
128
  ]
128
129
  }),
129
- /* @__PURE__ */ S("div", {
130
+ /* @__PURE__ */ C("div", {
130
131
  className: "border-t border-[var(--oh-border)] pt-6 mt-2",
131
132
  children: [
132
- /* @__PURE__ */ x("h3", {
133
+ /* @__PURE__ */ S("h3", {
133
134
  className: "text-lg font-medium mb-2",
134
- children: w(t.SETTINGS$GIT_SETTINGS)
135
+ children: T(t.SETTINGS$GIT_SETTINGS)
135
136
  }),
136
- /* @__PURE__ */ x("p", {
137
+ /* @__PURE__ */ S("p", {
137
138
  className: "mb-4 text-sm leading-5 text-tertiary-light",
138
- children: w(t.SETTINGS$GIT_SETTINGS_DESCRIPTION)
139
+ children: T(t.SETTINGS$GIT_SETTINGS_DESCRIPTION)
139
140
  }),
140
- /* @__PURE__ */ S("div", {
141
+ /* @__PURE__ */ C("div", {
141
142
  className: "flex flex-col gap-6",
142
- children: [/* @__PURE__ */ x(h, {
143
+ children: [/* @__PURE__ */ S(g, {
143
144
  testId: "git-user-name-input",
144
145
  name: "git-user-name-input",
145
146
  type: "text",
146
- label: w(t.SETTINGS$GIT_USERNAME),
147
- defaultValue: D.git_user_name || "",
148
- onChange: X,
149
- placeholder: w(t.SETTINGS$GIT_USERNAME_PLACEHOLDER),
147
+ label: T(t.SETTINGS$GIT_USERNAME),
148
+ defaultValue: O.git_user_name || "",
149
+ onChange: Z,
150
+ placeholder: T(t.SETTINGS$GIT_USERNAME_PLACEHOLDER),
150
151
  className: "w-full min-w-0"
151
- }), /* @__PURE__ */ x(h, {
152
+ }), /* @__PURE__ */ S(g, {
152
153
  testId: "git-user-email-input",
153
154
  name: "git-user-email-input",
154
155
  type: "email",
155
- label: w(t.SETTINGS$GIT_EMAIL),
156
- defaultValue: D.git_user_email || "",
157
- onChange: Z,
158
- placeholder: w(t.SETTINGS$GIT_EMAIL_PLACEHOLDER),
156
+ label: T(t.SETTINGS$GIT_EMAIL),
157
+ defaultValue: O.git_user_email || "",
158
+ onChange: Q,
159
+ placeholder: T(t.SETTINGS$GIT_EMAIL_PLACEHOLDER),
159
160
  className: "w-full min-w-0"
160
161
  })]
161
162
  }),
162
- /* @__PURE__ */ x("div", {
163
+ /* @__PURE__ */ S("div", {
163
164
  className: "flex justify-start pt-4",
164
- children: /* @__PURE__ */ S(f, {
165
+ children: /* @__PURE__ */ C(p, {
165
166
  testId: "submit-button",
166
167
  variant: "primary",
167
168
  type: "submit",
168
- isDisabled: E || Q,
169
- children: [!E && w(t.SETTINGS$SAVE_CHANGES), E && w(t.SETTINGS$SAVING)]
169
+ isDisabled: D || te,
170
+ children: [!D && T(t.SETTINGS$SAVE_CHANGES), D && T(t.SETTINGS$SAVING)]
170
171
  })
171
172
  })
172
173
  ]
@@ -176,6 +177,6 @@ function w() {
176
177
  });
177
178
  }
178
179
  //#endregion
179
- export { w as default };
180
+ export { T as default };
180
181
 
181
182
  //# sourceMappingURL=app-settings.js.map