@openhands/agent-canvas 1.8.0 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (492) hide show
  1. package/README.md +1 -1
  2. package/README.windows.md +2 -2
  3. package/build/assets/{Trans-B7lYw4uD.js → Trans-Bwpzk1wT.js} +1 -1
  4. package/build/assets/{acp-providers-WUD4tfSq.js → acp-providers-C921BlYB.js} +1 -1
  5. package/build/assets/active-backend-context-BiwzkzDy.js +2 -0
  6. package/build/assets/agent-context-settings-DXNT_dcw.js +1 -0
  7. package/build/assets/agent-profiles-settings-BymJf3EP.js +1 -0
  8. package/build/assets/agent-server-conversation-service.api-CYSWw-2g.js +41 -0
  9. package/build/assets/agent-settings-BjgQQe-_.js +1 -0
  10. package/build/assets/{agent-settings-BGTyoT6X.js → agent-settings-WzqXk6B4.js} +2 -2
  11. package/build/assets/{alert-banner-eRyIwDyU.js → alert-banner-DR8EVyZM.js} +1 -1
  12. package/build/assets/api-error-message-e16L1kwH.js +1 -0
  13. package/build/assets/{api-key-entry-screen-JOx3SH1-.js → api-key-entry-screen-DI0I04O3.js} +1 -1
  14. package/build/assets/{app-settings-D53QZy5p.js → app-settings-DGistSFV.js} +1 -1
  15. package/build/assets/automation-C_eCrGyP.js +1 -0
  16. package/build/assets/automation-detail-DY6x2FW1.js +2 -0
  17. package/build/assets/automation-export-C09f-Lua.js +2 -0
  18. package/build/assets/automation-setup-route-CqKp0717.js +1 -0
  19. package/build/assets/automations-list-CqWJ7qXW.js +1 -0
  20. package/build/assets/{back-nav-button-C02hGa8t.js → back-nav-button-D4ngzpSh.js} +1 -1
  21. package/build/assets/backend-form-modal-B8D5hBzK.js +1 -0
  22. package/build/assets/{backend-synced-settings-badge-CQ9xtNWm.js → backend-synced-settings-badge-BnzI8Ysj.js} +1 -1
  23. package/build/assets/{badge-CzXbf7tR.js → badge-1Mf1iPcX.js} +1 -1
  24. package/build/assets/{base-modal-DkVyzFMt.js → base-modal-BBuy0WQQ.js} +1 -1
  25. package/build/assets/{brand-button-BUlDL-mz.js → brand-button-DGN6Y9o6.js} +1 -1
  26. package/build/assets/browser-D_ekTlTS.js +6 -0
  27. package/build/assets/{browser-tab-BijpUbdt.js → browser-tab-D4a4Ou_w.js} +1 -1
  28. package/build/assets/{chat-send-button-BKsVjhtA.js → chat-send-button-CgbcjD97.js} +1 -1
  29. package/build/assets/check-CPLXgluF.js +1 -0
  30. package/build/assets/chevron-down-CP4QHvyc.js +1 -0
  31. package/build/assets/circle-check-Dpy2_xSI.js +1 -0
  32. package/build/assets/{circle-plus-check-toggle-DdjUiOo1.js → circle-plus-check-toggle-yTAS-nX3.js} +1 -1
  33. package/build/assets/cloud-funnel-analytics-CEOl5Gxr.js +1 -0
  34. package/build/assets/{combobox-caret-Dl9UtvD6.js → combobox-caret-Bd2yySnF.js} +1 -1
  35. package/build/assets/command-menu-Bj6X4ckE.js +1 -0
  36. package/build/assets/condenser-settings-EAXQNR2E.js +1 -0
  37. package/build/assets/{confirmation-modal-CRBJSllP.js → confirmation-modal-NCUPr2-O.js} +1 -1
  38. package/build/assets/{context-menu-list-item-FGaafXGh.js → context-menu-list-item-CrCrYuPF.js} +1 -1
  39. package/build/assets/conversation-BzyIcSwr.js +1 -0
  40. package/build/assets/conversation-CUJ0Vo8g.js +90 -0
  41. package/build/assets/conversation-panel-BzyIcSwr.js +1 -0
  42. package/build/assets/conversation-state-store-F62HvuI1.js +1 -0
  43. package/build/assets/{conversation-tab-empty-state-CDjvNgpG.js → conversation-tab-empty-state-BCZ7rUMH.js} +1 -1
  44. package/build/assets/{copy-Drwu97Gx.js → copy-DCmZtz6n.js} +1 -1
  45. package/build/assets/{copy-to-clipboard-button-NbN1clVr.js → copy-to-clipboard-button-D_Lp6-Fl.js} +1 -1
  46. package/build/assets/{device-verify-CDm_WrVu.js → device-verify-DLmolX8Q.js} +1 -1
  47. package/build/assets/{dropdown-classes-CqA2BTCL.js → dropdown-classes-BB8rzqXL.js} +1 -1
  48. package/build/assets/{entry.client-BO2KQj0y.js → entry.client-BbIYOsIg.js} +2 -2
  49. package/build/assets/{enum-filter-dropdown-DSqPZnsD.js → enum-filter-dropdown-C08-srev.js} +1 -1
  50. package/build/assets/{environment-switch-overlay-mGl2pqqx.js → environment-switch-overlay-BepBBX66.js} +1 -1
  51. package/build/assets/{extensions-hub-Br3Lgynp.js → extensions-hub-R3KNv-5V.js} +1 -1
  52. package/build/assets/{extensions-navigation-BQmstKDZ.js → extensions-navigation-CfWFmI1I.js} +1 -1
  53. package/build/assets/{external-link-D9B2QMPf.js → external-link-BdBSg8rk.js} +1 -1
  54. package/build/assets/files-tab-DEq8MbHu.js +1 -0
  55. package/build/assets/{form-control-classes-CtVAktAy.js → form-control-classes-DAfsCJTe.js} +1 -1
  56. package/build/assets/{format-time-delta-DICE64sz.js → format-time-delta-CxfPJpzC.js} +1 -1
  57. package/build/assets/git-provider-icon-BZqqUPlm.js +1 -0
  58. package/build/assets/git-repo-dropdown-9WKINV6J.js +1 -0
  59. package/build/assets/git-repo-dropdown-DEpOwUez.js +1 -0
  60. package/build/assets/{highlighted-source-view-KMsA9c4a.js → highlighted-source-view-CX9oIoVT.js} +1 -1
  61. package/build/assets/home-CY0JaxiY.js +1 -0
  62. package/build/assets/home-CaNWlVvB.js +1 -0
  63. package/build/assets/home-store-Ch1ErdBc.js +1 -0
  64. package/build/assets/index-home-CaNWlVvB.js +1 -0
  65. package/build/assets/info-CmWQXtRQ.js +1 -0
  66. package/build/assets/install-server-modal-BWrudmZU.js +1 -0
  67. package/build/assets/{launch-DjkKw55l.js → launch-B1POpHuP.js} +1 -1
  68. package/build/assets/{list-todo-BpAf7aOT.js → list-todo-DtiL3lTp.js} +1 -1
  69. package/build/assets/llm-not-configured-banner-3tMsM4K6.js +27 -0
  70. package/build/assets/{llm-settings-D8zNkIlP.js → llm-settings-CXo8iPNW.js} +1 -1
  71. package/build/assets/llm-settings-D0W8mJDk.js +1 -0
  72. package/build/assets/{llm-subscription-service-COTgZc1C.js → llm-subscription-service-DBJbfd8Z.js} +1 -1
  73. package/build/assets/loader-circle-B4QDBARx.js +1 -0
  74. package/build/assets/{loading-spinner-DRFyh6Iy.js → loading-spinner-DfZ_bhV7.js} +1 -1
  75. package/build/assets/{manage-backends-modal-DiRWE3tJ.js → manage-backends-modal-CwyWsiag.js} +1 -1
  76. package/build/assets/manifest-39f4789d.js +1 -0
  77. package/build/assets/markdown-renderer-DgiLLhW6.js +8 -0
  78. package/build/assets/mcp-DXG9LWrI.js +9 -0
  79. package/build/assets/mcp-marketplace-utils-DFmhKc5s.js +1 -0
  80. package/build/assets/messages-kBjKaAeA.js +40 -0
  81. package/build/assets/{modal-body-C3bGicn4.js → modal-body-CMsDpalT.js} +1 -1
  82. package/build/assets/{modal-classes-DFFO6BMU.js → modal-classes-B6PDrxXo.js} +1 -1
  83. package/build/assets/{modal-close-button-vxkAIRyZ.js → modal-close-button-DyxBZaAb.js} +1 -1
  84. package/build/assets/{onboarding-DWuFieEA.js → onboarding-47hh2IHA.js} +1 -1
  85. package/build/assets/{onboarding-modal-C8m72Dpb.js → onboarding-modal-9BuvvROo.js} +1 -1
  86. package/build/assets/{organization-service.api-CQ73CB-S.js → organization-service.api-UDy63-oC.js} +1 -1
  87. package/build/assets/{pencil-DzW2GB2M.js → pencil-BjgtZmWp.js} +1 -1
  88. package/build/assets/{planner-tab-YG0bGxDY.js → planner-tab-BWk8885v.js} +1 -1
  89. package/build/assets/{plugins-management-service-ijhH8OSh.js → plugins-management-service-CjkgF2dd.js} +1 -1
  90. package/build/assets/plus-DrKuuvMe.js +1 -0
  91. package/build/assets/{profiles-service.api-C32pPm70.js → profiles-service.api-CukSFLzz.js} +1 -1
  92. package/build/assets/{providers-DuSn9s2i.js → providers-CqUWC85T.js} +1 -1
  93. package/build/assets/{proxy-BiyDhMBd.js → proxy-BBUG3sd2.js} +1 -1
  94. package/build/assets/{puzzle-DlqT0yvr.js → puzzle-BoNc6zZ8.js} +1 -1
  95. package/build/assets/recommended-automations-launcher-ejxy1P27.js +1 -0
  96. package/build/assets/{refresh-cw-Br5254f4.js → refresh-cw-BrM5ZAZD.js} +1 -1
  97. package/build/assets/root-5S-M8SYa.js +2 -0
  98. package/build/assets/root-DZ39lS5f.css +1 -0
  99. package/build/assets/root-layout-BPqoa0gv.js +3 -0
  100. package/build/assets/{schema-field-htfNouTG.js → schema-field-nImDoY6-.js} +1 -1
  101. package/build/assets/{sdk-section-page-D0K1dBQY.js → sdk-section-page-BxMrtUNV.js} +1 -1
  102. package/build/assets/search-Dc2qR4O2.js +1 -0
  103. package/build/assets/{secrets-service-Dbv5Zb8G.js → secrets-service-Dhjh3HhH.js} +1 -1
  104. package/build/assets/{secrets-settings-Da4SSaX9.js → secrets-settings-CPdxceT_.js} +1 -1
  105. package/build/assets/segmented-toggle-Do6oyepX.js +1 -0
  106. package/build/assets/{settings-F4a09IxY.js → settings-BRbnfKEm.js} +1 -1
  107. package/build/assets/{settings-dropdown-input-jOiv5Yrk.js → settings-dropdown-input-DYCULKpp.js} +1 -1
  108. package/build/assets/{settings-index-CyJBf5NA.js → settings-index-C9o2NBO0.js} +1 -1
  109. package/build/assets/settings-input-B-q2gkVy.js +1 -0
  110. package/build/assets/{settings-list-classes-VqMzkYYt.js → settings-list-classes-WpQi0q1L.js} +1 -1
  111. package/build/assets/{settings-modal-C-S1NpbC.js → settings-modal-CEK0AIx6.js} +1 -1
  112. package/build/assets/{settings-service.api-CTJRrvMu.js → settings-service.api-CZiPD8__.js} +1 -1
  113. package/build/assets/{settings-switch-B405oU_v.js → settings-switch-LqKdGxHL.js} +1 -1
  114. package/build/assets/shared-conversation-Bu-dQlgp.js +1 -0
  115. package/build/assets/{sidebar-layout-BGMuyC86.js → sidebar-layout-oHBGQmLh.js} +1 -1
  116. package/build/assets/{sidebar-mobile-menu-toggle-xiKoUfGa.js → sidebar-mobile-menu-toggle-ND-hgygu.js} +1 -1
  117. package/build/assets/{sidebar-nav-link-DA4_ct9G.js → sidebar-nav-link-CrujNA09.js} +1 -1
  118. package/build/assets/{sidebar-store-FRJ3rADB.js → sidebar-store-Bui-WNEr.js} +1 -1
  119. package/build/assets/{skill-card-pill-row-BMdhr_sd.js → skill-card-pill-row-CZBI7OqH.js} +1 -1
  120. package/build/assets/{skill-icon-badge-CGUkgcVH.js → skill-icon-badge-BOov_phZ.js} +1 -1
  121. package/build/assets/{skills-plugins-C5eJnyft.js → skills-plugins-D0PiHWAD.js} +1 -1
  122. package/build/assets/{skills-settings-pUxMr6WZ.js → skills-settings-B43KArIz.js} +2 -2
  123. package/build/assets/{styled-tooltip-B3kIdVyH.js → styled-tooltip-C7grwnOX.js} +1 -1
  124. package/build/assets/{task-list-tab-B3k4W1cK.js → task-list-tab-R3ac6m7O.js} +1 -1
  125. package/build/assets/{terminal-CBI_41Zc.js → terminal-yqkNdEAx.js} +1 -1
  126. package/build/assets/{toggle-switch-DYRr9CAR.js → toggle-switch-BeSrbgCg.js} +1 -1
  127. package/build/assets/{trash-2-gZPlx23R.js → trash-2-wW5TWcdN.js} +1 -1
  128. package/build/assets/{typography-B1UxuuEC.js → typography-iYhzLlHO.js} +1 -1
  129. package/build/assets/{use-acp-credential-form-CjSvKWFH.js → use-acp-credential-form-DUxbxmbq.js} +1 -1
  130. package/build/assets/{use-activate-agent-profile-DCRf47e-.js → use-activate-agent-profile-CDHA52tC.js} +1 -1
  131. package/build/assets/use-agent-profiles-TsOdIyw5.js +1 -0
  132. package/build/assets/{use-can-manage-org-profiles-vBiP7rHF.js → use-can-manage-org-profiles-Bt1M71u5.js} +1 -1
  133. package/build/assets/{use-cloud-current-user-id-BMq9gw93.js → use-cloud-current-user-id-DWt7HCgf.js} +1 -1
  134. package/build/assets/use-config-CxlEdf_v.js +1 -0
  135. package/build/assets/{use-create-conversation-CakhLF0X.js → use-create-conversation-nOJ6Um5h.js} +1 -1
  136. package/build/assets/{use-create-secret-RT4QtSS9.js → use-create-secret-Dj5ang9x.js} +1 -1
  137. package/build/assets/use-is-authed-BT7Iud4U.js +1 -0
  138. package/build/assets/{use-is-creating-conversation-CIAcnd8M.js → use-is-creating-conversation-CAggrM75.js} +1 -1
  139. package/build/assets/use-llm-profiles-2Wc2db8u.js +1 -0
  140. package/build/assets/{use-onboarding-completion-CJU4MNAY.js → use-onboarding-completion-gxQlcEy2.js} +1 -1
  141. package/build/assets/{use-plugins-marketplace-D-93nqtJ.js → use-plugins-marketplace-CVO7sXYR.js} +1 -1
  142. package/build/assets/use-save-agent-profile-D0wC5ExW.js +1 -0
  143. package/build/assets/{use-save-settings--C6LZXfI.js → use-save-settings-L3aMaDeS.js} +1 -1
  144. package/build/assets/{use-settings-DIAo5KFk.js → use-settings-8nt3DGxW.js} +1 -1
  145. package/build/assets/use-settings-nav-items-DHAAD-zk.js +16 -0
  146. package/build/assets/{use-skills-D_mLhYNa.js → use-skills-CE6miQ3r.js} +1 -1
  147. package/build/assets/use-tracking-BGboadaZ.js +68 -0
  148. package/build/assets/{use-user-conversation-DhcAEyJX.js → use-user-conversation-BIIpGUgM.js} +1 -1
  149. package/build/assets/useInfiniteQuery-BLRVmVPU.js +1 -0
  150. package/build/assets/{useMutation-DHLpZ6J0.js → useMutation-CaSHLnX0.js} +1 -1
  151. package/build/assets/{useQueries-B3T1a7qt.js → useQueries--d_WWAzc.js} +1 -1
  152. package/build/assets/{useQuery-B38jBavx.js → useQuery-DiPh8LRJ.js} +1 -1
  153. package/build/assets/utils-BgGG1znF.js +1 -0
  154. package/build/assets/{vendor~browser-CIoZCqGs.js → vendor~browser-IVYgIgG1.js} +1 -1
  155. package/build/assets/{vendor~entry.client-Di4qO77Y.js → vendor~entry.client-BcYIVQvB.js} +1 -1
  156. package/build/assets/{vendor~entry.client-BfviqoVc.js → vendor~entry.client-CXM9oiAk.js} +1 -1
  157. package/build/assets/{vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~g4xrpilz-CYPMCkX1.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~b0bpqexo-CbTboogo.js} +1 -1
  158. package/build/assets/{vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~f9xdmd0z-DLMP7bZx.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~d4by102p-C2f0ZhS-.js} +1 -1
  159. package/build/assets/{vendor~files-tab-atebg0iG.js → vendor~files-tab-C7RmQJwN.js} +1 -1
  160. package/build/assets/{vendor~index-home~home~conversation-panel~conversation-G9DMrR7m.js → vendor~index-home~home~conversation-panel~conversation-Bqp1ZqJM.js} +1 -1
  161. package/build/assets/{vendor~root-layout~conversation-panel~conversation-DEhW1h3I.js → vendor~root-layout~conversation-panel~conversation-BCn8lzeG.js} +1 -1
  162. package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~automation-setup-route-B_L-gcOG.js +1 -0
  163. package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation-sjx0x5ac.js +1 -0
  164. package/build/assets/vendor~root-layout~index-home~home~mcp~automations-list~automation-setup-route~onboarding-modal-D7IDevqN.js +1 -0
  165. package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~bi2r7bko-VFnwct3q.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~dfc8ddxy-tTyxnjXT.js} +1 -1
  166. package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~hakxo2tj-ClV0p9g3.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~gy8zbn65-CGt6bWRT.js} +1 -1
  167. package/build/assets/{vendor~root-layout~index-home~home~conversation-panel~conversation~launch~skills-settings~a~eywn6ulz-BKxxr74w.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~dufan6ng-Dtdw8H0q.js} +17 -4
  168. package/build/assets/{verification-settings-Vr5cN4md.js → verification-settings-DBsnSXC3.js} +1 -1
  169. package/build/assets/x-omAzpXkl.js +1 -0
  170. package/build/index.html +4 -4
  171. package/build/locales/ar/openhands.json +37 -2
  172. package/build/locales/ca/openhands.json +37 -2
  173. package/build/locales/de/openhands.json +37 -2
  174. package/build/locales/en/openhands.json +38 -3
  175. package/build/locales/es/openhands.json +37 -2
  176. package/build/locales/fr/openhands.json +37 -2
  177. package/build/locales/it/openhands.json +37 -2
  178. package/build/locales/ja/openhands.json +37 -2
  179. package/build/locales/ko-KR/openhands.json +37 -2
  180. package/build/locales/no/openhands.json +37 -2
  181. package/build/locales/pt/openhands.json +37 -2
  182. package/build/locales/tr/openhands.json +37 -2
  183. package/build/locales/uk/openhands.json +37 -2
  184. package/build/locales/zh-CN/openhands.json +37 -2
  185. package/build/locales/zh-TW/openhands.json +37 -2
  186. package/config/defaults.json +1 -1
  187. package/dist/api/agent-server-adapter.cjs +3 -3
  188. package/dist/api/agent-server-adapter.cjs.map +1 -1
  189. package/dist/api/agent-server-adapter.d.ts +46 -6
  190. package/dist/api/agent-server-adapter.js +187 -168
  191. package/dist/api/agent-server-adapter.js.map +1 -1
  192. package/dist/api/agent-server-compatibility.cjs +1 -1
  193. package/dist/api/agent-server-compatibility.cjs.map +1 -1
  194. package/dist/api/agent-server-compatibility.d.ts +4 -0
  195. package/dist/api/agent-server-compatibility.js +41 -38
  196. package/dist/api/agent-server-compatibility.js.map +1 -1
  197. package/dist/api/automation-service/automation-service.api.cjs +1 -1
  198. package/dist/api/automation-service/automation-service.api.cjs.map +1 -1
  199. package/dist/api/automation-service/automation-service.api.d.ts +20 -0
  200. package/dist/api/automation-service/automation-service.api.js +99 -62
  201. package/dist/api/automation-service/automation-service.api.js.map +1 -1
  202. package/dist/components/conversation-events/chat/event-content-helpers/get-action-event-title.cjs +2 -0
  203. package/dist/components/conversation-events/chat/event-content-helpers/get-action-event-title.cjs.map +1 -0
  204. package/dist/components/conversation-events/chat/event-content-helpers/get-action-event-title.d.ts +12 -0
  205. package/dist/components/conversation-events/chat/event-content-helpers/get-action-event-title.js +94 -0
  206. package/dist/components/conversation-events/chat/event-content-helpers/get-action-event-title.js.map +1 -0
  207. package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.cjs +1 -1
  208. package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.cjs.map +1 -1
  209. package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.js +31 -90
  210. package/dist/components/conversation-events/chat/event-content-helpers/get-event-content.js.map +1 -1
  211. package/dist/components/features/automations/recommended-automations-launcher.d.ts +0 -7
  212. package/dist/components/features/automations/recommended-automations-section.d.ts +0 -6
  213. package/dist/components/features/backends/backend-form-modal.cjs +1 -1
  214. package/dist/components/features/backends/backend-form-modal.cjs.map +1 -1
  215. package/dist/components/features/backends/backend-form-modal.js +568 -358
  216. package/dist/components/features/backends/backend-form-modal.js.map +1 -1
  217. package/dist/components/features/backends/device-flow-auth.cjs +1 -1
  218. package/dist/components/features/backends/device-flow-auth.cjs.map +1 -1
  219. package/dist/components/features/backends/device-flow-auth.d.ts +9 -1
  220. package/dist/components/features/backends/device-flow-auth.js +56 -55
  221. package/dist/components/features/backends/device-flow-auth.js.map +1 -1
  222. package/dist/components/features/backends/manage-backends-modal.cjs +1 -1
  223. package/dist/components/features/backends/manage-backends-modal.cjs.map +1 -1
  224. package/dist/components/features/backends/manage-backends-modal.js +1 -1
  225. package/dist/components/features/backends/manage-backends-modal.js.map +1 -1
  226. package/dist/components/features/chat/chat-interface.cjs +1 -1
  227. package/dist/components/features/chat/chat-interface.cjs.map +1 -1
  228. package/dist/components/features/chat/chat-interface.js +105 -105
  229. package/dist/components/features/chat/chat-interface.js.map +1 -1
  230. package/dist/components/features/chat/chat-message.cjs +1 -1
  231. package/dist/components/features/chat/chat-message.cjs.map +1 -1
  232. package/dist/components/features/chat/chat-message.d.ts +2 -1
  233. package/dist/components/features/chat/chat-message.js +59 -49
  234. package/dist/components/features/chat/chat-message.js.map +1 -1
  235. package/dist/components/features/chat/pending-user-messages.cjs +1 -1
  236. package/dist/components/features/chat/pending-user-messages.cjs.map +1 -1
  237. package/dist/components/features/chat/pending-user-messages.js +4 -1
  238. package/dist/components/features/chat/pending-user-messages.js.map +1 -1
  239. package/dist/components/features/chat/typing-indicator.cjs +1 -1
  240. package/dist/components/features/chat/typing-indicator.cjs.map +1 -1
  241. package/dist/components/features/chat/typing-indicator.d.ts +8 -1
  242. package/dist/components/features/chat/typing-indicator.js +94 -10
  243. package/dist/components/features/chat/typing-indicator.js.map +1 -1
  244. package/dist/components/features/command-menu/command-menu-items.d.ts +5 -1
  245. package/dist/components/features/files-tab/segmented-toggle.cjs +1 -1
  246. package/dist/components/features/files-tab/segmented-toggle.cjs.map +1 -1
  247. package/dist/components/features/files-tab/segmented-toggle.d.ts +2 -0
  248. package/dist/components/features/files-tab/segmented-toggle.js +17 -14
  249. package/dist/components/features/files-tab/segmented-toggle.js.map +1 -1
  250. package/dist/components/features/manifest/manifest-form-field.d.ts +27 -0
  251. package/dist/components/features/manifest/manifest-prerequisites-step.d.ts +11 -0
  252. package/dist/components/features/manifest/manifest-review-step.d.ts +14 -0
  253. package/dist/components/features/manifest/manifest-setup-dialog.d.ts +14 -0
  254. package/dist/components/features/settings/settings-input.cjs +1 -1
  255. package/dist/components/features/settings/settings-input.cjs.map +1 -1
  256. package/dist/components/features/settings/settings-input.d.ts +6 -0
  257. package/dist/components/features/settings/settings-input.js +13 -8
  258. package/dist/components/features/settings/settings-input.js.map +1 -1
  259. package/dist/components/features/sidebar/sidebar-rail-body.cjs +1 -1
  260. package/dist/components/features/sidebar/sidebar-rail-body.cjs.map +1 -1
  261. package/dist/components/features/sidebar/sidebar-rail-body.js +124 -123
  262. package/dist/components/features/sidebar/sidebar-rail-body.js.map +1 -1
  263. package/dist/config/defaults.cjs +1 -1
  264. package/dist/config/defaults.cjs.map +1 -1
  265. package/dist/config/defaults.js +1 -1
  266. package/dist/config/defaults.js.map +1 -1
  267. package/dist/hooks/query/query-keys.cjs.map +1 -1
  268. package/dist/hooks/query/query-keys.d.ts +4 -0
  269. package/dist/hooks/query/query-keys.js.map +1 -1
  270. package/dist/hooks/query/use-manifest-capabilities.d.ts +21 -0
  271. package/dist/hooks/query/use-manifest-prerequisites.d.ts +24 -0
  272. package/dist/hooks/use-llm-configured.cjs +1 -1
  273. package/dist/hooks/use-llm-configured.cjs.map +1 -1
  274. package/dist/hooks/use-llm-configured.js +2 -1
  275. package/dist/hooks/use-llm-configured.js.map +1 -1
  276. package/dist/hooks/use-manifest-preflight.d.ts +18 -0
  277. package/dist/hooks/use-tracking.cjs +1 -1
  278. package/dist/hooks/use-tracking.cjs.map +1 -1
  279. package/dist/hooks/use-tracking.d.ts +14 -0
  280. package/dist/hooks/use-tracking.js +19 -1
  281. package/dist/hooks/use-tracking.js.map +1 -1
  282. package/dist/i18n/declaration.cjs +1 -1
  283. package/dist/i18n/declaration.cjs.map +1 -1
  284. package/dist/i18n/declaration.d.ts +36 -1
  285. package/dist/i18n/declaration.js +1 -1
  286. package/dist/i18n/declaration.js.map +1 -1
  287. package/dist/i18n/translation.cjs +2 -2
  288. package/dist/i18n/translation.cjs.map +1 -1
  289. package/dist/i18n/translation.js +611 -16
  290. package/dist/i18n/translation.js.map +1 -1
  291. package/dist/icons/external-link.cjs +2 -0
  292. package/dist/icons/external-link.cjs.map +1 -0
  293. package/dist/icons/external-link.js +22 -0
  294. package/dist/icons/external-link.js.map +1 -0
  295. package/dist/icons/server.cjs +2 -0
  296. package/dist/icons/server.cjs.map +1 -0
  297. package/dist/icons/server.js +17 -0
  298. package/dist/icons/server.js.map +1 -0
  299. package/dist/locales/ar/openhands.json +37 -2
  300. package/dist/locales/ca/openhands.json +37 -2
  301. package/dist/locales/de/openhands.json +37 -2
  302. package/dist/locales/en/openhands.json +38 -3
  303. package/dist/locales/es/openhands.json +37 -2
  304. package/dist/locales/fr/openhands.json +37 -2
  305. package/dist/locales/it/openhands.json +37 -2
  306. package/dist/locales/ja/openhands.json +37 -2
  307. package/dist/locales/ko-KR/openhands.json +37 -2
  308. package/dist/locales/no/openhands.json +37 -2
  309. package/dist/locales/pt/openhands.json +37 -2
  310. package/dist/locales/tr/openhands.json +37 -2
  311. package/dist/locales/uk/openhands.json +37 -2
  312. package/dist/locales/zh-CN/openhands.json +37 -2
  313. package/dist/locales/zh-TW/openhands.json +37 -2
  314. package/dist/manifests/automation-interface.cjs +2 -0
  315. package/dist/manifests/automation-interface.cjs.map +1 -0
  316. package/dist/manifests/automation-interface.d.ts +44 -0
  317. package/dist/manifests/automation-interface.js +81 -0
  318. package/dist/manifests/automation-interface.js.map +1 -0
  319. package/dist/manifests/automation-setup.cjs +2 -0
  320. package/dist/manifests/automation-setup.cjs.map +1 -0
  321. package/dist/manifests/automation-setup.d.ts +52 -0
  322. package/dist/manifests/automation-setup.js +8 -0
  323. package/dist/manifests/automation-setup.js.map +1 -0
  324. package/dist/manifests/interface-validation.cjs +2 -0
  325. package/dist/manifests/interface-validation.cjs.map +1 -0
  326. package/dist/manifests/interface-validation.d.ts +27 -0
  327. package/dist/manifests/interface-validation.js +182 -0
  328. package/dist/manifests/interface-validation.js.map +1 -0
  329. package/dist/manifests/manifest-actions.d.ts +15 -0
  330. package/dist/manifests/manifest-capabilities.d.ts +25 -0
  331. package/dist/manifests/manifest-error-map.d.ts +40 -0
  332. package/dist/manifests/manifest-local-validation.d.ts +56 -0
  333. package/dist/manifests/manifest-registry.cjs +2 -0
  334. package/dist/manifests/manifest-registry.cjs.map +1 -0
  335. package/dist/manifests/manifest-registry.d.ts +15 -0
  336. package/dist/manifests/manifest-registry.js +26 -0
  337. package/dist/manifests/manifest-registry.js.map +1 -0
  338. package/dist/manifests/manifest-sources.cjs +2 -0
  339. package/dist/manifests/manifest-sources.cjs.map +1 -0
  340. package/dist/manifests/manifest-sources.d.ts +15 -0
  341. package/dist/manifests/manifest-sources.js +8 -0
  342. package/dist/manifests/manifest-sources.js.map +1 -0
  343. package/dist/manifests/manifest-template.d.ts +18 -0
  344. package/dist/manifests/manifest-validation.cjs +2 -0
  345. package/dist/manifests/manifest-validation.cjs.map +1 -0
  346. package/dist/manifests/manifest-validation.d.ts +30 -0
  347. package/dist/manifests/manifest-validation.js +145 -0
  348. package/dist/manifests/manifest-validation.js.map +1 -0
  349. package/dist/manifests/types.cjs +2 -0
  350. package/dist/manifests/types.cjs.map +1 -0
  351. package/dist/manifests/types.d.ts +227 -0
  352. package/dist/manifests/types.js +6 -0
  353. package/dist/manifests/types.js.map +1 -0
  354. package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.cjs +9 -0
  355. package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.cjs.map +1 -0
  356. package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.js +75 -0
  357. package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.js.map +1 -0
  358. package/dist/node_modules/@openhands/extensions/automations/catalog/github-repo-monitor/manifest.cjs +9 -0
  359. package/dist/node_modules/@openhands/extensions/automations/catalog/github-repo-monitor/manifest.cjs.map +1 -0
  360. package/dist/node_modules/@openhands/extensions/automations/catalog/github-repo-monitor/manifest.js +78 -0
  361. package/dist/node_modules/@openhands/extensions/automations/catalog/github-repo-monitor/manifest.js.map +1 -0
  362. package/dist/node_modules/@openhands/extensions/automations/catalog/incident-retrospective-drafter/manifest.cjs +17 -0
  363. package/dist/node_modules/@openhands/extensions/automations/catalog/incident-retrospective-drafter/manifest.cjs.map +1 -0
  364. package/dist/node_modules/@openhands/extensions/automations/catalog/incident-retrospective-drafter/manifest.js +89 -0
  365. package/dist/node_modules/@openhands/extensions/automations/catalog/incident-retrospective-drafter/manifest.js.map +1 -0
  366. package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-pr/manifest.cjs +10 -0
  367. package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-pr/manifest.cjs.map +1 -0
  368. package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-pr/manifest.js +17 -0
  369. package/dist/node_modules/@openhands/extensions/automations/catalog/jira-issue-to-pr/manifest.js.map +1 -0
  370. package/dist/node_modules/@openhands/extensions/automations/catalog/linear-triage-assistant/manifest.cjs +9 -0
  371. package/dist/node_modules/@openhands/extensions/automations/catalog/linear-triage-assistant/manifest.cjs.map +1 -0
  372. package/dist/node_modules/@openhands/extensions/automations/catalog/linear-triage-assistant/manifest.js +15 -0
  373. package/dist/node_modules/@openhands/extensions/automations/catalog/linear-triage-assistant/manifest.js.map +1 -0
  374. package/dist/node_modules/@openhands/extensions/automations/catalog/research-brief-writer/manifest.cjs +9 -0
  375. package/dist/node_modules/@openhands/extensions/automations/catalog/research-brief-writer/manifest.cjs.map +1 -0
  376. package/dist/node_modules/@openhands/extensions/automations/catalog/research-brief-writer/manifest.js +18 -0
  377. package/dist/node_modules/@openhands/extensions/automations/catalog/research-brief-writer/manifest.js.map +1 -0
  378. package/dist/node_modules/@openhands/extensions/automations/catalog/slack-channel-monitor/manifest.cjs +9 -0
  379. package/dist/node_modules/@openhands/extensions/automations/catalog/slack-channel-monitor/manifest.cjs.map +1 -0
  380. package/dist/node_modules/@openhands/extensions/automations/catalog/slack-channel-monitor/manifest.js +14 -0
  381. package/dist/node_modules/@openhands/extensions/automations/catalog/slack-channel-monitor/manifest.js.map +1 -0
  382. package/dist/node_modules/@openhands/extensions/automations/catalog/slack-standup-digest/manifest.cjs +9 -0
  383. package/dist/node_modules/@openhands/extensions/automations/catalog/slack-standup-digest/manifest.cjs.map +1 -0
  384. package/dist/node_modules/@openhands/extensions/automations/catalog/slack-standup-digest/manifest.js +14 -0
  385. package/dist/node_modules/@openhands/extensions/automations/catalog/slack-standup-digest/manifest.js.map +1 -0
  386. package/dist/node_modules/@openhands/extensions/automations/catalog-index.cjs +2 -0
  387. package/dist/node_modules/@openhands/extensions/automations/catalog-index.cjs.map +1 -0
  388. package/dist/node_modules/@openhands/extensions/automations/catalog-index.js +23 -0
  389. package/dist/node_modules/@openhands/extensions/automations/catalog-index.js.map +1 -0
  390. package/dist/node_modules/@openhands/extensions/automations/index.cjs +2 -0
  391. package/dist/node_modules/@openhands/extensions/automations/index.cjs.map +1 -0
  392. package/dist/node_modules/@openhands/extensions/automations/index.js +18 -0
  393. package/dist/node_modules/@openhands/extensions/automations/index.js.map +1 -0
  394. package/dist/node_modules/@openhands/extensions/automations/interface.cjs +2 -0
  395. package/dist/node_modules/@openhands/extensions/automations/interface.cjs.map +1 -0
  396. package/dist/node_modules/@openhands/extensions/automations/interface.js +89 -0
  397. package/dist/node_modules/@openhands/extensions/automations/interface.js.map +1 -0
  398. package/dist/node_modules/@openhands/extensions/integrations/catalog/datadog.cjs +1 -1
  399. package/dist/node_modules/@openhands/extensions/integrations/catalog/datadog.cjs.map +1 -1
  400. package/dist/node_modules/@openhands/extensions/integrations/catalog/datadog.js +3 -3
  401. package/dist/node_modules/@openhands/extensions/integrations/catalog/datadog.js.map +1 -1
  402. package/dist/node_modules/@openhands/extensions/skills/index.cjs +17 -4
  403. package/dist/node_modules/@openhands/extensions/skills/index.cjs.map +1 -1
  404. package/dist/node_modules/@openhands/extensions/skills/index.js +5 -5
  405. package/dist/node_modules/@openhands/extensions/skills/index.js.map +1 -1
  406. package/dist/node_modules/lucide-react/dist/esm/icons/monitor.cjs +2 -0
  407. package/dist/node_modules/lucide-react/dist/esm/icons/monitor.cjs.map +1 -0
  408. package/dist/node_modules/lucide-react/dist/esm/icons/monitor.js +29 -0
  409. package/dist/node_modules/lucide-react/dist/esm/icons/monitor.js.map +1 -0
  410. package/dist/package.cjs +1 -1
  411. package/dist/package.cjs.map +1 -1
  412. package/dist/package.js +2 -2
  413. package/dist/package.js.map +1 -1
  414. package/dist/types/agent-server/core/events/conversation-state-event.d.ts +2 -19
  415. package/dist/types/agent-server/core/events/observation-event.d.ts +2 -18
  416. package/dist/types/automation.d.ts +7 -3
  417. package/dist/utils/api-error-message.d.ts +6 -2
  418. package/dist/utils/automation-catalog.cjs +2 -0
  419. package/dist/utils/automation-catalog.cjs.map +1 -0
  420. package/dist/utils/automation-catalog.d.ts +28 -0
  421. package/dist/utils/automation-catalog.js +5 -0
  422. package/dist/utils/automation-catalog.js.map +1 -0
  423. package/dist/utils/automation-timeout.d.ts +3 -2
  424. package/dist/utils/responder-deployment.d.ts +5 -1
  425. package/dist/utils/transcript-export/index.cjs +5 -5
  426. package/dist/utils/transcript-export/index.js +12 -12
  427. package/package.json +2 -2
  428. package/scripts/check-translation-completeness.cjs +1 -0
  429. package/scripts/dev-safe.mjs +15 -10
  430. package/scripts/dev-static.mjs +17 -0
  431. package/scripts/dev-with-automation.mjs +12 -14
  432. package/scripts/ingress.mjs +22 -0
  433. package/scripts/proxy-utils.mjs +157 -2
  434. package/scripts/runtime-services-info.mjs +6 -6
  435. package/scripts/static-build.mjs +0 -7
  436. package/scripts/static-server.mjs +10 -0
  437. package/build/assets/active-backend-context-mY7Gff5c.js +0 -2
  438. package/build/assets/agent-context-settings-BTUmWEzL.js +0 -1
  439. package/build/assets/agent-profiles-settings-Ilqid_R5.js +0 -1
  440. package/build/assets/agent-server-conversation-service.api-C_7YnjzP.js +0 -41
  441. package/build/assets/agent-settings-CxfT4ksO.js +0 -1
  442. package/build/assets/automation-BGP_I1RR.js +0 -1
  443. package/build/assets/automation-detail-nEflClmc.js +0 -2
  444. package/build/assets/automation-export-BO_kfqC8.js +0 -2
  445. package/build/assets/automations-list-BYncC7gv.js +0 -1
  446. package/build/assets/backend-form-modal-CKrBF80P.js +0 -1
  447. package/build/assets/browser-3QjrEr1D.js +0 -6
  448. package/build/assets/check-CrxQfJZ2.js +0 -1
  449. package/build/assets/chevron-down-D_LsyTA7.js +0 -1
  450. package/build/assets/circle-check-DZn9HkLE.js +0 -1
  451. package/build/assets/cloud-funnel-analytics-NlmDoeo2.js +0 -1
  452. package/build/assets/command-menu-CvLPs7dg.js +0 -1
  453. package/build/assets/condenser-settings-C4Y9CzQV.js +0 -1
  454. package/build/assets/conversation-D_ORtpKC.js +0 -1
  455. package/build/assets/conversation-Dpc5nmGi.js +0 -90
  456. package/build/assets/conversation-panel-D_ORtpKC.js +0 -1
  457. package/build/assets/conversation-state-store-CGRQemtx.js +0 -1
  458. package/build/assets/files-tab-4c9HFSLo.js +0 -1
  459. package/build/assets/git-provider-icon-0PqmIS_S.js +0 -1
  460. package/build/assets/home-D9JsyEmE.js +0 -1
  461. package/build/assets/home-TFhnmZLx.js +0 -1
  462. package/build/assets/index-home-D9JsyEmE.js +0 -1
  463. package/build/assets/install-server-modal-BgGRnqA0.js +0 -1
  464. package/build/assets/llm-not-configured-banner-Y4W9-sar.js +0 -27
  465. package/build/assets/llm-settings-nPwv7hKu.js +0 -1
  466. package/build/assets/loader-circle-CGD6-Vak.js +0 -1
  467. package/build/assets/manifest-1cf33a7b.js +0 -1
  468. package/build/assets/markdown-renderer-U40HF0Ak.js +0 -8
  469. package/build/assets/mcp-xDMaHzOw.js +0 -9
  470. package/build/assets/messages-CdNfZPgd.js +0 -40
  471. package/build/assets/plus-CTGLo3aa.js +0 -1
  472. package/build/assets/recommended-automations-launcher-Dru1yN46.js +0 -58
  473. package/build/assets/root-B5JXKp1P.css +0 -1
  474. package/build/assets/root-DOLLQteU.js +0 -2
  475. package/build/assets/root-layout-xmylWoew.js +0 -3
  476. package/build/assets/search-BrpWXWUi.js +0 -1
  477. package/build/assets/segmented-toggle-CZKOdIly.js +0 -1
  478. package/build/assets/settings-input-BEaTCem1.js +0 -1
  479. package/build/assets/shared-conversation-BvWtTwES.js +0 -1
  480. package/build/assets/use-agent-profiles-DmT9zxAN.js +0 -1
  481. package/build/assets/use-config-C959QcRC.js +0 -1
  482. package/build/assets/use-is-authed-BsS4XwSL.js +0 -1
  483. package/build/assets/use-llm-profiles-CdaxVpyY.js +0 -1
  484. package/build/assets/use-save-agent-profile-DGJ3-u0M.js +0 -1
  485. package/build/assets/use-settings-nav-items-DPK5sxvR.js +0 -16
  486. package/build/assets/use-tracking-COqZLobY.js +0 -1
  487. package/build/assets/utils-DsWhWn2F.js +0 -1
  488. package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation-Acmf1sKj.js +0 -1
  489. package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~shared-conversation-CmzCY1BT.js +0 -1
  490. package/build/assets/vendor~root-layout~index-home~home~mcp~automations-list~onboarding-modal-C7Yh77RT.js +0 -1
  491. package/build/assets/x-Dx_JbpHA.js +0 -1
  492. /package/build/assets/{vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~f1hl7voa-BrmgjeOw.js → vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~emdr2jt4-BrmgjeOw.js} +0 -0
@@ -1,52 +1,58 @@
1
1
  import { useTranslation as e } from "../../../node_modules/react-i18next/dist/es/useTranslation.js";
2
2
  import { I18nKey as t } from "../../../i18n/declaration.js";
3
- import { cn as n } from "../../../utils/utils.js";
4
- import { useNavigation as r } from "../../../context/navigation-context.js";
5
- import { ServerClient as i } from "../../../node_modules/@openhands/typescript-client/dist/client/server-client.js";
6
- import { isOpenHandsCloudHost as a } from "../../../node_modules/@openhands/typescript-client/dist/client/device-flow-client.js";
3
+ import { ChevronDown as n } from "../../../node_modules/lucide-react/dist/esm/icons/chevron-down.js";
4
+ import { Globe as r } from "../../../node_modules/lucide-react/dist/esm/icons/globe.js";
5
+ import { Info as i } from "../../../node_modules/lucide-react/dist/esm/icons/info.js";
6
+ import { Monitor as a } from "../../../node_modules/lucide-react/dist/esm/icons/monitor.js";
7
+ import { cn as o } from "../../../utils/utils.js";
8
+ import { useNavigation as s } from "../../../context/navigation-context.js";
9
+ import { ServerClient as c } from "../../../node_modules/@openhands/typescript-client/dist/client/server-client.js";
10
+ import { isOpenHandsCloudHost as l } from "../../../node_modules/@openhands/typescript-client/dist/client/device-flow-client.js";
7
11
  import "../../../node_modules/@openhands/typescript-client/dist/clients.js";
8
- import { getLockedCloudHost as o } from "../../../api/agent-server-config.js";
9
- import { getUserFacingConnectionErrorMessage as s } from "../../../utils/user-facing-error.js";
10
- import { getAgentServerClientOptions as c } from "../../../api/agent-server-client-options.js";
11
- import { assertAgentServerVersionIsSupported as l, getDisplayAgentServerVersion as u } from "../../../api/agent-server-compatibility.js";
12
- import { useQuery as d } from "../../../node_modules/@tanstack/react-query/build/modern/useQuery.js";
13
- import { useActiveBackendContext as f } from "../../../contexts/active-backend-context.js";
14
- import { useTracking as p } from "../../../hooks/use-tracking.js";
15
- import { ModalBackdrop as m } from "../../shared/modals/modal-backdrop.js";
16
- import { MODAL_MAX_WIDTH_VIEWPORT as h, modalWidthClassName as g } from "../../shared/modals/modal-body.js";
17
- import { modalTitleLgClassName as _, modalTitleLgMediumClassName as v } from "../../../utils/modal-classes.js";
18
- import { ModalCloseButton as y } from "../../shared/modals/modal-close-button.js";
19
- import { BrandButton as b } from "../settings/brand-button.js";
20
- import { SettingsInput as x } from "../settings/settings-input.js";
21
- import { useBackendsHealth as S } from "../../../hooks/query/use-backends-health.js";
22
- import C from "../../../assets/branding/openhands-logo-white.js";
23
- import { SegmentedToggle as w } from "../files-tab/segmented-toggle.js";
12
+ import { getLockedCloudHost as u } from "../../../api/agent-server-config.js";
13
+ import { getUserFacingConnectionErrorMessage as d } from "../../../utils/user-facing-error.js";
14
+ import { getAgentServerClientOptions as f } from "../../../api/agent-server-client-options.js";
15
+ import { assertAgentServerVersionIsSupported as p, getDisplayAgentServerVersion as m } from "../../../api/agent-server-compatibility.js";
16
+ import { useQuery as h } from "../../../node_modules/@tanstack/react-query/build/modern/useQuery.js";
17
+ import { useActiveBackendContext as g } from "../../../contexts/active-backend-context.js";
18
+ import { useTracking as _ } from "../../../hooks/use-tracking.js";
19
+ import { ModalBackdrop as v } from "../../shared/modals/modal-backdrop.js";
20
+ import { MODAL_MAX_WIDTH_VIEWPORT as y, modalWidthClassName as b } from "../../shared/modals/modal-body.js";
21
+ import { modalTitleLgClassName as x, modalTitleLgMediumClassName as S } from "../../../utils/modal-classes.js";
22
+ import { ModalCloseButton as C } from "../../shared/modals/modal-close-button.js";
23
+ import { BrandButton as w } from "../settings/brand-button.js";
24
+ import { SettingsInput as T } from "../settings/settings-input.js";
25
+ import { useBackendsHealth as E } from "../../../hooks/query/use-backends-health.js";
26
+ import D from "../../../assets/branding/openhands-logo-white.js";
27
+ import { SegmentedToggle as O } from "../files-tab/segmented-toggle.js";
24
28
  import "../../../api/device-flow-client.js";
25
- import T from "../../../icons/chevron-down-small.js";
26
- import { getBackendStatusLabel as E } from "./backend-status-label.js";
27
- import { BackendStatusDot as D } from "./backend-status-dot.js";
28
- import { DeviceFlowAuth as O } from "./device-flow-auth.js";
29
- import k from "react";
30
- import { jsx as A, jsxs as j } from "react/jsx-runtime";
29
+ import k from "../../../icons/chevron-down-small.js";
30
+ import A from "../../../icons/external-link.js";
31
+ import j from "../../../icons/server.js";
32
+ import { getBackendStatusLabel as M } from "./backend-status-label.js";
33
+ import { BackendStatusDot as N } from "./backend-status-dot.js";
34
+ import { DeviceFlowAuth as P } from "./device-flow-auth.js";
35
+ import F from "react";
36
+ import { jsx as I, jsxs as L } from "react/jsx-runtime";
31
37
  //#region src/components/features/backends/backend-form-modal.tsx
32
- function M(e) {
33
- return a(e) ? "cloud" : "local";
38
+ function R(e) {
39
+ return l(e) ? "cloud" : "local";
34
40
  }
35
- function N(e) {
41
+ function z(e) {
36
42
  let t = e.toLowerCase().replace(/^\[|\]$/g, "");
37
43
  return !!(t === "localhost" || t === "::1" || t === "::" || t === "0.0.0.0" || /^127\./.test(t) || /^::ffff:127\./i.test(t) || /^10\./.test(t) || /^192\.168\./.test(t) || /^172\.(1[6-9]|2\d|3[01])\./.test(t) || /^fe[89ab][0-9a-f]:/i.test(t) || /^f[cd][0-9a-f]{2}:/i.test(t) || t.endsWith(".local") || !t.includes(".") && !t.includes(":"));
38
44
  }
39
- function P(e) {
45
+ function B(e) {
40
46
  let t = e.trim().replace(/\/+$/, "");
41
47
  if (!t) return "";
42
48
  if (/^https?:\/\//i.test(t)) return t;
43
49
  let n = t.match(/^\[([^\]]+)\]/);
44
- return `${N(n ? n[1] : (t.match(/:/g) ?? []).length > 1 ? t : t.split(":")[0]) ? "http" : "https"}://${t}`;
50
+ return `${z(n ? n[1] : (t.match(/:/g) ?? []).length > 1 ? t : t.split(":")[0]) ? "http" : "https"}://${t}`;
45
51
  }
46
- function F(e) {
52
+ function V(e) {
47
53
  let t = e.trim();
48
54
  if (!t || /\s/.test(t)) return !1;
49
- let n = P(t);
55
+ let n = B(t);
50
56
  if (!n) return !1;
51
57
  try {
52
58
  let e = new URL(n);
@@ -55,537 +61,741 @@ function F(e) {
55
61
  return !1;
56
62
  }
57
63
  }
58
- var I = "https://app.all-hands.dev";
59
- function L(e, n) {
64
+ var H = "https://app.all-hands.dev", U = "agent-canvas --backend-only --port 8001", W = "https://github.com/OpenHands/OpenHands/blob/main/docs/DEVELOPMENT.md#alternative-development-workflows", G = "https://github.com/OpenHands/OpenHands/blob/main/docs/SELF_HOSTING.md", K = "https://docs.openhands.dev/overview/introduction";
65
+ function q(e, n) {
60
66
  return e(t.BACKEND$CONNECTION_TEST_FAILED, {
61
67
  host: n,
62
68
  interpolation: { escapeValue: !1 }
63
69
  });
64
70
  }
65
- function R(e) {
66
- return s(e);
71
+ function J(e) {
72
+ return d(e);
67
73
  }
68
- function z(e, t) {
69
- let n = R(t);
74
+ function Y(e, t) {
75
+ let n = J(t);
70
76
  return n ? `${e}\n${n}` : e;
71
77
  }
72
- async function B(e) {
78
+ async function X(e) {
73
79
  if (e.kind !== "local") return { agentServerVersion: null };
74
- let t = await new i(c({
80
+ let t = await new c(f({
75
81
  host: e.host,
76
82
  sessionApiKey: e.apiKey || null,
77
83
  timeout: 5e3
78
84
  })).getServerInfo();
79
- return l(t), { agentServerVersion: u(t) };
85
+ return p(t), { agentServerVersion: m(t) };
80
86
  }
81
- function V({ backend: n, testIdRoot: r }) {
82
- let { t: a } = e("openhands"), o = S([n])[n.id], s = o?.isConnected ?? null, l = o?.disabled === !0, f = o?.consecutiveFailures ?? 0, p = o?.lastError ?? null, { data: m } = d({
87
+ function ee({ backend: n, testIdRoot: r }) {
88
+ let { t: i } = e("openhands"), a = E([n])[n.id], o = a?.isConnected ?? null, s = a?.disabled === !0, l = a?.consecutiveFailures ?? 0, u = a?.lastError ?? null, { data: d } = h({
83
89
  queryKey: [
84
90
  "backend-version",
85
91
  n.host,
86
92
  n.apiKey
87
93
  ],
88
- queryFn: async () => u(await new i(c({
94
+ queryFn: async () => m(await new c(f({
89
95
  host: n.host,
90
96
  sessionApiKey: n.apiKey || null,
91
97
  timeout: 5e3
92
98
  })).getServerInfo()),
93
99
  retry: !1,
94
100
  staleTime: 6e4,
95
- enabled: n.kind === "local" && !l
96
- }), h = E(a, n, o), g = n.kind === "cloud" ? a(t.BACKEND$KIND_CLOUD) : a(t.BACKEND$KIND_LOCAL);
97
- return /* @__PURE__ */ j("div", {
101
+ enabled: n.kind === "local" && !s
102
+ }), p = M(i, n, a), g = n.kind === "cloud" ? i(t.BACKEND$KIND_CLOUD) : i(t.BACKEND$KIND_LOCAL);
103
+ return /* @__PURE__ */ L("div", {
98
104
  className: "flex flex-col gap-2",
99
- children: [/* @__PURE__ */ j("div", {
105
+ children: [/* @__PURE__ */ L("div", {
100
106
  "data-testid": `${r}-status`,
101
107
  className: "flex items-center gap-3 text-sm",
102
108
  children: [
103
- /* @__PURE__ */ A(D, { isConnected: s }),
104
- /* @__PURE__ */ A("span", {
109
+ /* @__PURE__ */ I(N, { isConnected: o }),
110
+ /* @__PURE__ */ I("span", {
105
111
  className: "text-white",
106
112
  "data-testid": `${r}-status-label`,
107
- children: h
113
+ children: p
108
114
  }),
109
- /* @__PURE__ */ A("span", {
115
+ /* @__PURE__ */ I("span", {
110
116
  className: "text-tertiary-alt",
111
117
  children: "·"
112
118
  }),
113
- /* @__PURE__ */ A("span", {
119
+ /* @__PURE__ */ I("span", {
114
120
  className: "text-[var(--oh-text-tertiary)]",
115
121
  children: g
116
122
  }),
117
- m ? /* @__PURE__ */ A("span", {
123
+ d ? /* @__PURE__ */ I("span", {
118
124
  className: "text-xs text-[var(--oh-muted)]",
119
125
  "data-testid": `${r}-version`,
120
- children: a(t.BACKEND$VERSION_LABEL, { version: m })
126
+ children: i(t.BACKEND$VERSION_LABEL, { version: d })
121
127
  }) : null
122
128
  ]
123
- }), l ? /* @__PURE__ */ j("div", {
129
+ }), s ? /* @__PURE__ */ L("div", {
124
130
  "data-testid": `${r}-status-error`,
125
131
  className: "flex flex-col gap-1 rounded-md border border-red-500/40 bg-red-500/10 p-3 text-sm",
126
132
  children: [
127
- /* @__PURE__ */ A("span", {
133
+ /* @__PURE__ */ I("span", {
128
134
  className: "font-semibold text-red-300",
129
- children: a(t.BACKEND$HEALTH_FAILED_TITLE)
135
+ children: i(t.BACKEND$HEALTH_FAILED_TITLE)
130
136
  }),
131
- /* @__PURE__ */ A("span", {
137
+ /* @__PURE__ */ I("span", {
132
138
  className: "text-xs text-[var(--oh-text-tertiary)]",
133
- children: a(t.BACKEND$HEALTH_FAILED_DETAIL, { count: f })
139
+ children: i(t.BACKEND$HEALTH_FAILED_DETAIL, { count: l })
134
140
  }),
135
- p ? /* @__PURE__ */ A("span", {
141
+ u ? /* @__PURE__ */ I("span", {
136
142
  "data-testid": `${r}-status-error-message`,
137
143
  className: "text-xs text-red-300 whitespace-pre-wrap break-words",
138
- children: p
144
+ children: u
139
145
  }) : null
140
146
  ]
141
147
  }) : null]
142
148
  });
143
149
  }
144
- function H({ initialName: t = "", initialHost: n = "", initialApiKey: r = "", onTestConnection: i, onSuccess: a, requireApiKey: o = !1, onSubmitOverride: s }) {
145
- let { t: c } = e("openhands"), [l, u] = k.useState(t), [d, f] = k.useState(n), [p, m] = k.useState(r), [h, g] = k.useState(null), [_, v] = k.useState(!1), [y, b] = k.useState(null), x = y ?? M(d), S = o || x !== "local", C = l.trim().length > 0 && F(d) && (!S || p.trim().length > 0);
150
+ function Z({ initialName: t = "", initialHost: n = "", initialApiKey: r = "", onTestConnection: i, onSuccess: a, requireApiKey: o = !1, onSubmitOverride: s, fixedKind: c }) {
151
+ let { t: l } = e("openhands"), [u, d] = F.useState(t), [f, p] = F.useState(n), [m, h] = F.useState(r), [g, _] = F.useState(null), [v, y] = F.useState(!1), [b, x] = F.useState(null), S = c ?? b ?? R(f), C = o || S !== "local", w = u.trim().length > 0 && V(f) && (!C || m.trim().length > 0);
146
152
  return {
147
- name: l,
148
- setName: u,
149
- host: d,
150
- setHost: f,
151
- apiKey: p,
152
- setApiKey: m,
153
- connectionError: h,
154
- setConnectionError: g,
155
- isSubmitting: _,
156
- kind: x,
157
- setKind: b,
158
- canSubmit: C,
159
- handleSubmit: k.useCallback(async (e) => {
160
- if (e.preventDefault(), !C || _) return;
153
+ name: u,
154
+ setName: d,
155
+ host: f,
156
+ setHost: p,
157
+ apiKey: m,
158
+ setApiKey: h,
159
+ connectionError: g,
160
+ setConnectionError: _,
161
+ isSubmitting: v,
162
+ kind: S,
163
+ setKind: x,
164
+ canSubmit: w,
165
+ handleSubmit: F.useCallback(async (e) => {
166
+ if (e.preventDefault(), !w || v) return;
161
167
  let t = {
162
- name: l.trim(),
163
- host: P(d),
164
- apiKey: p.trim(),
165
- kind: x
168
+ name: u.trim(),
169
+ host: B(f),
170
+ apiKey: m.trim(),
171
+ kind: S
166
172
  };
167
- g(null), v(!0);
173
+ _(null), y(!0);
168
174
  try {
169
175
  s ? await s(t) : a(await i(t));
170
176
  } catch (e) {
171
- g(z(L(c, t.host), e));
177
+ _(Y(q(l, t.host), e));
172
178
  } finally {
173
- v(!1);
179
+ y(!1);
174
180
  }
175
181
  }, [
176
- C,
177
- _,
178
- l,
179
- d,
180
- p,
181
- x,
182
+ w,
183
+ v,
184
+ u,
185
+ f,
186
+ m,
187
+ S,
182
188
  i,
183
189
  a,
184
190
  o,
185
191
  s,
186
- c
192
+ c,
193
+ l
187
194
  ])
188
195
  };
189
196
  }
190
- function U({ mode: r, backend: i, onSubmitted: a, renderActions: o, testIdRoot: s, hostReadOnly: c, requireApiKey: l, hideConfigurationFields: u = !1, onSubmitOverride: d }) {
191
- let { t: p } = e("openhands"), { addBackend: m, updateBackend: h } = f(), g = r === "edit" && i ? i.kind : null, { name: _, setName: v, host: y, setHost: S, apiKey: C, setApiKey: w, connectionError: T, setConnectionError: E, isSubmitting: D, kind: O, handleSubmit: M } = H({
192
- initialName: i?.name ?? "",
193
- initialHost: i?.host ?? "",
194
- initialApiKey: i?.apiKey ?? "",
195
- onTestConnection: B,
197
+ function te({ mode: n, backend: r, onSubmitted: i, renderActions: a, testIdRoot: s, hostReadOnly: c, requireApiKey: l, hideConfigurationFields: u = !1, onSubmitOverride: d }) {
198
+ let { t: f } = e("openhands"), { addBackend: p, updateBackend: m } = g(), h = n === "edit" && r ? r.kind : null, { name: _, setName: v, host: y, setHost: b, apiKey: x, setApiKey: S, connectionError: C, setConnectionError: E, isSubmitting: D, kind: O, handleSubmit: k } = Z({
199
+ initialName: r?.name ?? "",
200
+ initialHost: r?.host ?? "",
201
+ initialApiKey: r?.apiKey ?? "",
202
+ onTestConnection: X,
196
203
  onSuccess: async () => {
197
204
  let e = {
198
205
  name: _.trim(),
199
- host: P(y),
200
- apiKey: C.trim(),
201
- kind: g ?? O
206
+ host: B(y),
207
+ apiKey: x.trim(),
208
+ kind: h ?? O
202
209
  };
203
- r === "edit" && i ? h(i.id, e) : m(e), a();
210
+ n === "edit" && r ? m(r.id, e) : p(e), i();
204
211
  },
205
212
  requireApiKey: l,
206
213
  onSubmitOverride: d
207
- }), [N, L] = k.useState(!1), [R, z] = k.useState(!1), U = g ?? O, W = s ?? (r === "edit" ? "edit-backend" : "add-backend"), G = l || U !== "local", K = _.trim().length > 0 && F(y) && (!G || C.trim().length > 0), q = N && !_.trim() ? p(t.BACKEND$NAME_REQUIRED) : void 0, J = R ? y.trim() ? F(y) ? void 0 : p(t.BACKEND$HOST_INVALID) : p(t.BACKEND$HOST_REQUIRED) : void 0;
208
- return /* @__PURE__ */ j("form", {
209
- "data-testid": `${W}-form`,
214
+ }), [A, j] = F.useState(!1), [M, N] = F.useState(!1), P = h ?? O, R = s ?? (n === "edit" ? "edit-backend" : "add-backend"), z = l || P !== "local", U = _.trim().length > 0 && V(y) && (!z || x.trim().length > 0), W = A && !_.trim() ? f(t.BACKEND$NAME_REQUIRED) : void 0, G = M ? y.trim() ? V(y) ? void 0 : f(t.BACKEND$HOST_INVALID) : f(t.BACKEND$HOST_REQUIRED) : void 0;
215
+ return /* @__PURE__ */ L("form", {
216
+ "data-testid": `${R}-form`,
210
217
  onSubmit: async (e) => {
211
- if (!K) {
212
- L(!0), z(!0);
218
+ if (!U) {
219
+ j(!0), N(!0);
213
220
  return;
214
221
  }
215
- await M(e);
222
+ await k(e);
216
223
  },
217
224
  className: "flex flex-col gap-4",
218
- children: [/* @__PURE__ */ j("div", {
219
- "data-testid": `${W}-configuration-fields`,
220
- className: n("flex flex-col gap-4", u && "hidden"),
225
+ children: [/* @__PURE__ */ L("div", {
226
+ "data-testid": `${R}-configuration-fields`,
227
+ className: o("flex flex-col gap-4", u && "hidden"),
221
228
  children: [
222
- /* @__PURE__ */ A(x, {
223
- testId: `${W}-name`,
224
- name: `${W}-name`,
229
+ /* @__PURE__ */ I(T, {
230
+ testId: `${R}-name`,
231
+ name: `${R}-name`,
225
232
  type: "text",
226
- label: p(t.BACKEND$NAME_LABEL),
233
+ label: f(t.BACKEND$NAME_LABEL),
227
234
  value: _,
228
235
  onChange: (e) => {
229
236
  v(e), E(null);
230
237
  },
231
- onBlur: () => L(!0),
238
+ onBlur: () => j(!0),
232
239
  placeholder: "Production",
233
240
  className: "w-full",
234
241
  showRequiredTag: !0,
235
- error: q
242
+ error: W
236
243
  }),
237
- /* @__PURE__ */ A(x, {
238
- testId: `${W}-host`,
239
- name: `${W}-host`,
244
+ /* @__PURE__ */ I(T, {
245
+ testId: `${R}-host`,
246
+ name: `${R}-host`,
240
247
  type: "text",
241
- label: p(t.BACKEND$HOST_LABEL),
248
+ label: f(t.BACKEND$HOST_LABEL),
242
249
  value: y,
243
250
  onChange: c ? void 0 : (e) => {
244
- S(e), E(null);
251
+ b(e), E(null);
245
252
  },
246
- onBlur: () => z(!0),
247
- placeholder: I,
253
+ onBlur: () => N(!0),
254
+ placeholder: H,
248
255
  className: "w-full",
249
256
  showRequiredTag: !0,
250
- error: J,
257
+ error: G,
251
258
  isDisabled: c
252
259
  }),
253
- /* @__PURE__ */ A(x, {
254
- testId: `${W}-api-key`,
255
- name: `${W}-api-key`,
260
+ /* @__PURE__ */ I(T, {
261
+ testId: `${R}-api-key`,
262
+ name: `${R}-api-key`,
256
263
  type: "password",
257
- label: p(t.BACKEND$KEY_LABEL),
258
- value: C,
264
+ label: f(t.BACKEND$KEY_LABEL),
265
+ value: x,
259
266
  onChange: (e) => {
260
- w(e), E(null);
267
+ S(e), E(null);
261
268
  },
262
269
  placeholder: "",
263
270
  className: "w-full"
264
271
  }),
265
- T ? /* @__PURE__ */ A("div", {
272
+ C ? /* @__PURE__ */ I("div", {
266
273
  role: "alert",
267
- "data-testid": `${W}-error`,
274
+ "data-testid": `${R}-error`,
268
275
  className: "rounded-md border border-red-500/40 bg-red-500/10 p-3 text-sm text-red-300 whitespace-pre-wrap break-words",
269
- children: T
276
+ children: C
270
277
  }) : null,
271
- r === "edit" && i && /* @__PURE__ */ A(V, {
272
- backend: i,
273
- testIdRoot: W
278
+ n === "edit" && r && /* @__PURE__ */ I(ee, {
279
+ backend: r,
280
+ testIdRoot: R
274
281
  })
275
282
  ]
276
- }), o ? o({
277
- canSubmit: K && !D,
283
+ }), a ? a({
284
+ canSubmit: U && !D,
278
285
  isSubmitting: D,
279
- testIdRoot: W
280
- }) : /* @__PURE__ */ j("div", {
286
+ testIdRoot: R
287
+ }) : /* @__PURE__ */ L("div", {
281
288
  className: "flex justify-end gap-2 mt-2 w-full",
282
- children: [/* @__PURE__ */ A(b, {
289
+ children: [/* @__PURE__ */ I(w, {
283
290
  type: "button",
284
291
  variant: "secondary",
285
- onClick: a,
286
- testId: `${W}-cancel`,
287
- children: p(t.BUTTON$CANCEL)
288
- }), /* @__PURE__ */ A(b, {
292
+ onClick: i,
293
+ testId: `${R}-cancel`,
294
+ children: f(t.BUTTON$CANCEL)
295
+ }), /* @__PURE__ */ I(w, {
289
296
  type: "submit",
290
297
  variant: "primary",
291
- isDisabled: !K || D,
292
- testId: `${W}-submit`,
293
- children: p(t.BACKEND$SAVE)
298
+ isDisabled: !U || D,
299
+ testId: `${R}-submit`,
300
+ children: f(t.BACKEND$SAVE)
294
301
  })]
295
302
  })]
296
303
  });
297
304
  }
298
- function W() {
299
- let { currentPath: e, navigate: t } = r();
300
- return k.useCallback(() => {
305
+ function ne() {
306
+ let { currentPath: e, navigate: t } = s();
307
+ return F.useCallback(() => {
301
308
  /^\/automations\/[^/]+/.test(e) ? t("/automations") : /^\/conversations\/[^/]+/.test(e) && t("/conversations");
302
309
  }, [e, t]);
303
310
  }
304
- function G({ onConnected: n, testIdRoot: r = "add-backend", initialManualBackend: i, requireManualApiKey: a = !1, manualSubmitLabel: s, manualSubmittingLabel: c, manualSubmitTestId: l, analyticsSource: u }) {
305
- let { t: d } = e("openhands"), f = o();
306
- return f ? /* @__PURE__ */ A("div", {
307
- "data-testid": `${r}-connection-options`,
308
- className: "flex justify-center",
309
- children: /* @__PURE__ */ A("div", {
310
- className: "w-full",
311
- children: /* @__PURE__ */ A(q, {
312
- onConnected: n,
313
- testIdRoot: r,
314
- lockedHost: f,
315
- analyticsSource: u
316
- })
317
- })
318
- }) : /* @__PURE__ */ j("div", {
319
- "data-testid": `${r}-connection-options`,
320
- className: "flex flex-col gap-6 md:flex-row",
321
- children: [/* @__PURE__ */ A("div", {
322
- className: "flex-1 min-w-0",
323
- children: /* @__PURE__ */ A(K, {
324
- onConnected: n,
325
- testIdRoot: r,
326
- initialBackend: i,
327
- requireApiKey: a,
328
- submitLabel: s ?? d(t.BACKEND$CONNECT),
329
- submittingLabel: c ?? d(t.ONBOARDING$BACKEND_STATUS_CHECKING),
330
- submitTestId: l
331
- })
332
- }), /* @__PURE__ */ A("div", {
333
- className: "flex-1 min-w-0",
334
- children: /* @__PURE__ */ A(q, {
335
- onConnected: n,
336
- testIdRoot: r,
337
- analyticsSource: u
338
- })
339
- })]
340
- });
341
- }
342
- function K({ onConnected: n, testIdRoot: r, initialBackend: i, requireApiKey: a, submitLabel: o, submittingLabel: s, submitTestId: c }) {
343
- let { t: l } = e("openhands"), { name: u, setName: d, host: f, setHost: p, apiKey: m, setApiKey: h, connectionError: g, setConnectionError: _, isSubmitting: v, kind: y, setKind: S, canSubmit: C, handleSubmit: T } = H({
311
+ function re({ onConnected: n, testIdRoot: r, initialBackend: i, requireApiKey: a, submitLabel: o, submittingLabel: s, submitTestId: c, fixedKind: l, showKindSelector: u = !0 }) {
312
+ let { t: d } = e("openhands"), { name: f, setName: p, host: m, setHost: h, apiKey: g, setApiKey: _, connectionError: v, setConnectionError: y, isSubmitting: b, kind: x, setKind: S, canSubmit: C, handleSubmit: E } = Z({
344
313
  initialName: i?.name ?? "",
345
314
  initialHost: i?.host ?? "",
346
315
  initialApiKey: i?.apiKey ?? "",
347
- onTestConnection: B,
316
+ onTestConnection: X,
348
317
  onSuccess: (e) => {
349
318
  n({
350
- name: u.trim(),
351
- host: P(f),
352
- apiKey: m.trim(),
353
- kind: y
319
+ name: f.trim(),
320
+ host: B(m),
321
+ apiKey: g.trim(),
322
+ kind: x
354
323
  }, "manual", e);
355
324
  },
356
- requireApiKey: a
325
+ requireApiKey: a,
326
+ fixedKind: l
357
327
  });
358
- return /* @__PURE__ */ j("form", {
328
+ return /* @__PURE__ */ L("form", {
359
329
  "data-testid": `${r}-form`,
360
- onSubmit: T,
330
+ onSubmit: E,
361
331
  className: "flex flex-col gap-4 flex-1 min-w-0",
362
332
  children: [
363
- /* @__PURE__ */ j("div", {
364
- className: "flex flex-col gap-1",
365
- children: [/* @__PURE__ */ A(x, {
366
- testId: `${r}-name`,
367
- name: `${r}-name`,
368
- type: "text",
369
- label: l(t.BACKEND$NAME_LABEL),
370
- value: u,
371
- onChange: (e) => {
372
- d(e), _(null);
373
- },
374
- placeholder: "e.g. My Server",
375
- className: "w-full"
376
- }), /* @__PURE__ */ A("p", {
377
- className: "text-xs text-[var(--oh-muted)]",
378
- children: l(t.BACKEND$NAME_HELPER)
379
- })]
333
+ /* @__PURE__ */ I(T, {
334
+ testId: `${r}-name`,
335
+ name: `${r}-name`,
336
+ type: "text",
337
+ label: d(t.BACKEND$NAME_LABEL),
338
+ hint: d(t.BACKEND$NAME_HELPER),
339
+ value: f,
340
+ onChange: (e) => {
341
+ p(e), y(null);
342
+ },
343
+ placeholder: "e.g. My Server",
344
+ className: "w-full"
380
345
  }),
381
- /* @__PURE__ */ j("div", {
382
- className: "flex flex-col gap-1",
383
- children: [/* @__PURE__ */ A(x, {
384
- testId: `${r}-host`,
385
- name: `${r}-host`,
386
- type: "text",
387
- label: l(t.BACKEND$HOST_LABEL),
388
- value: f,
389
- onChange: (e) => {
390
- p(e), _(null);
391
- },
392
- placeholder: "http://localhost:8000",
393
- className: "w-full"
394
- }), /* @__PURE__ */ A("p", {
395
- className: "text-xs text-[var(--oh-muted)]",
396
- "data-testid": `${r}-host-helper`,
397
- children: l(t.BACKEND$HOST_HELPER)
398
- })]
346
+ /* @__PURE__ */ I(T, {
347
+ testId: `${r}-host`,
348
+ name: `${r}-host`,
349
+ type: "text",
350
+ label: d(t.BACKEND$HOST_LABEL),
351
+ hint: d(t.BACKEND$HOST_HELPER),
352
+ value: m,
353
+ onChange: (e) => {
354
+ h(e), y(null);
355
+ },
356
+ placeholder: "http://localhost:8000",
357
+ className: "w-full"
399
358
  }),
400
- /* @__PURE__ */ j("div", {
359
+ u ? /* @__PURE__ */ L("div", {
401
360
  className: "flex flex-col items-start gap-2.5",
402
- children: [/* @__PURE__ */ A("span", {
361
+ children: [/* @__PURE__ */ I("span", {
403
362
  className: "text-sm",
404
- children: l(t.BACKEND$KIND_LABEL)
405
- }), /* @__PURE__ */ A(w, {
406
- value: y,
363
+ children: d(t.BACKEND$KIND_LABEL)
364
+ }), /* @__PURE__ */ I(O, {
365
+ value: x,
407
366
  options: [{
408
367
  value: "local",
409
- label: l(t.BACKEND$KIND_LOCAL)
368
+ label: d(t.BACKEND$KIND_LOCAL)
410
369
  }, {
411
370
  value: "cloud",
412
- label: l(t.BACKEND$KIND_CLOUD)
371
+ label: d(t.BACKEND$KIND_CLOUD)
413
372
  }],
414
373
  onChange: (e) => S(e),
415
- ariaLabel: l(t.BACKEND$KIND_LABEL),
374
+ ariaLabel: d(t.BACKEND$KIND_LABEL),
416
375
  testId: `${r}-kind`
417
376
  })]
418
- }),
419
- /* @__PURE__ */ A(x, {
377
+ }) : null,
378
+ /* @__PURE__ */ I(T, {
420
379
  testId: `${r}-api-key`,
421
380
  name: `${r}-api-key`,
422
381
  type: "password",
423
- label: l(t.BACKEND$KEY_LABEL),
424
- value: m,
382
+ label: d(t.BACKEND$KEY_LABEL),
383
+ value: g,
425
384
  onChange: (e) => {
426
- h(e), _(null);
385
+ _(e), y(null);
427
386
  },
428
387
  placeholder: "sk-••••••••••",
429
388
  className: "w-full"
430
389
  }),
431
- g ? /* @__PURE__ */ A("div", {
390
+ v ? /* @__PURE__ */ I("div", {
432
391
  role: "alert",
433
392
  "data-testid": `${r}-error`,
434
393
  className: "rounded-md border border-red-500/40 bg-red-500/10 p-3 text-sm text-red-300 whitespace-pre-wrap break-words",
435
- children: g
394
+ children: v
436
395
  }) : null,
437
- /* @__PURE__ */ A(b, {
396
+ /* @__PURE__ */ I(w, {
438
397
  type: "submit",
439
398
  variant: "secondary",
440
- isDisabled: !C || v,
399
+ isDisabled: !C || b,
441
400
  testId: c ?? `${r}-submit`,
442
401
  className: "w-full text-center",
443
- children: v ? s : o
402
+ children: b ? s : o
444
403
  })
445
404
  ]
446
405
  });
447
406
  }
448
- function q({ onConnected: r, testIdRoot: i, lockedHost: a, analyticsSource: o }) {
449
- let { t: s } = e("openhands"), [c, l] = k.useState(!1), [u, d] = k.useState(""), f = a ?? (u.trim() || I);
450
- return /* @__PURE__ */ j("div", {
451
- className: "flex flex-1 min-w-0 flex-col items-center gap-3 pb-8",
452
- children: [
453
- /* @__PURE__ */ j("div", {
454
- className: "flex flex-col items-center gap-1",
455
- children: [/* @__PURE__ */ A(C, {
456
- width: 56,
457
- height: 56,
458
- "aria-hidden": !0
459
- }), /* @__PURE__ */ A("h4", {
460
- className: v,
461
- "data-testid": `${i}-cloud-title`,
462
- children: s(t.BACKEND$CLOUD_TITLE)
463
- })]
464
- }),
465
- /* @__PURE__ */ A("p", {
407
+ function Q({ onConnected: n, testIdRoot: r, lockedHost: i, analyticsSource: a, showBranding: s = !0 }) {
408
+ let { t: c } = e("openhands"), [l, u] = F.useState(!1), [d, f] = F.useState(""), p = `${r}-advanced-panel`, m = i ?? (d.trim() || H);
409
+ return /* @__PURE__ */ L("div", {
410
+ className: "flex w-full min-w-0 flex-col items-center gap-3",
411
+ children: [s ? /* @__PURE__ */ L("div", {
412
+ className: "flex flex-col items-center gap-1",
413
+ children: [/* @__PURE__ */ I(D, {
414
+ width: 56,
415
+ height: 56,
416
+ "aria-hidden": !0
417
+ }), /* @__PURE__ */ I("h4", {
418
+ className: S,
419
+ "data-testid": `${r}-cloud-title`,
420
+ children: c(t.BACKEND$CLOUD_TITLE)
421
+ })]
422
+ }) : null, /* @__PURE__ */ I(P, {
423
+ host: m,
424
+ onSuccess: (e) => {
425
+ n({
426
+ name: "OpenHands Cloud",
427
+ host: B(m),
428
+ apiKey: e,
429
+ kind: "cloud"
430
+ }, "cloud_login");
431
+ },
432
+ testIdRoot: r,
433
+ analyticsSource: a,
434
+ className: "w-full items-center",
435
+ idleDescription: /* @__PURE__ */ I("p", {
466
436
  className: "text-center text-sm leading-relaxed text-[var(--oh-muted)]",
467
- children: s(t.BACKEND$CLOUD_DESCRIPTION)
437
+ "data-testid": `${r}-cloud-description`,
438
+ children: c(t.BACKEND$CLOUD_DESCRIPTION)
468
439
  }),
469
- /* @__PURE__ */ A(O, {
470
- host: f,
471
- onSuccess: (e) => {
472
- r({
473
- name: "OpenHands Cloud",
474
- host: P(f),
475
- apiKey: e,
476
- kind: "cloud"
477
- }, "cloud_login");
478
- },
479
- testIdRoot: i,
480
- analyticsSource: o
481
- }),
482
- a ? null : /* @__PURE__ */ j("div", {
483
- className: "w-full",
484
- children: [/* @__PURE__ */ j("button", {
440
+ idleFooter: i ? null : /* @__PURE__ */ L("div", {
441
+ className: "mx-auto w-full max-w-md",
442
+ children: [/* @__PURE__ */ L("button", {
485
443
  type: "button",
486
- onClick: () => l((e) => !e),
487
- "aria-expanded": c,
488
- "data-testid": `${i}-advanced-toggle`,
444
+ onClick: () => u((e) => !e),
445
+ "aria-expanded": l,
446
+ "aria-controls": p,
447
+ "data-testid": `${r}-advanced-toggle`,
489
448
  className: "flex w-full cursor-pointer items-center justify-center gap-1 text-center text-xs text-[var(--oh-muted)] transition-colors hover:text-content-2",
490
- children: [/* @__PURE__ */ A("span", { children: s(t.BACKEND$ADVANCED) }), /* @__PURE__ */ A(T, {
491
- className: n("h-4 w-4 shrink-0 text-muted transition-transform", c && "rotate-180"),
449
+ children: [/* @__PURE__ */ I("span", { children: c(t.BACKEND$ADVANCED) }), /* @__PURE__ */ I(k, {
450
+ className: o("h-4 w-4 shrink-0 text-muted transition-transform duration-200 ease-out", l && "rotate-180"),
492
451
  "aria-hidden": !0
493
452
  })]
494
- }), /* @__PURE__ */ j("div", {
495
- className: n("pt-2", !c && "pointer-events-none invisible"),
496
- "aria-hidden": !c,
497
- children: [/* @__PURE__ */ A(x, {
498
- testId: `${i}-cloud-host`,
499
- name: `${i}-cloud-host`,
500
- type: "text",
501
- label: s(t.BACKEND$HOST_LABEL),
502
- value: u,
503
- onChange: d,
504
- placeholder: I,
505
- className: "w-full"
506
- }), /* @__PURE__ */ A("p", {
507
- className: "mt-1 text-xs text-[var(--oh-muted)]",
508
- children: s(t.BACKEND$LOGIN_CLOUD_HINT)
453
+ }), /* @__PURE__ */ I("div", {
454
+ className: o("grid transition-[grid-template-rows] duration-200 ease-out motion-reduce:transition-none", l ? "grid-rows-[1fr]" : "grid-rows-[0fr]"),
455
+ children: /* @__PURE__ */ I("div", {
456
+ className: "overflow-hidden",
457
+ children: /* @__PURE__ */ L("div", {
458
+ id: p,
459
+ "data-testid": `${r}-advanced-panel`,
460
+ "aria-hidden": !l,
461
+ inert: l ? void 0 : !0,
462
+ className: o("pt-3 transition-opacity duration-200 ease-out motion-reduce:transition-none", l ? "opacity-100" : "opacity-0"),
463
+ children: [/* @__PURE__ */ I(T, {
464
+ testId: `${r}-cloud-host`,
465
+ name: `${r}-cloud-host`,
466
+ type: "text",
467
+ label: c(t.BACKEND$HOST_LABEL),
468
+ value: d,
469
+ onChange: f,
470
+ placeholder: H,
471
+ className: "w-full"
472
+ }), /* @__PURE__ */ I("p", {
473
+ className: "mt-1 text-xs text-[var(--oh-muted)]",
474
+ children: c(t.BACKEND$LOGIN_CLOUD_HINT)
475
+ })]
476
+ })
477
+ })
478
+ })]
479
+ })
480
+ })]
481
+ });
482
+ }
483
+ function $({ value: e, selectedValue: t, title: n, description: r, icon: i, onSelect: a, panelId: s, testId: c }) {
484
+ let l = e === t;
485
+ return /* @__PURE__ */ L("button", {
486
+ id: `${c}-tab`,
487
+ type: "button",
488
+ role: "tab",
489
+ "aria-selected": l,
490
+ "aria-controls": s,
491
+ "data-testid": c,
492
+ onClick: () => a(e),
493
+ className: o("relative flex min-h-16 w-full cursor-pointer items-center gap-3 px-3 py-3 text-left transition-colors", "first:border-r first:border-r-[var(--oh-border)]", "focus-visible:z-10 focus-visible:outline-2 focus-visible:-outline-offset-2 focus-visible:outline-blue-300", l ? "bg-[var(--oh-surface-raised)] text-white after:absolute after:inset-x-0 after:bottom-0 after:h-0.5 after:bg-primary" : "text-[var(--oh-muted)] hover:bg-[var(--oh-surface-raised)] hover:text-white"),
494
+ children: [/* @__PURE__ */ I("span", {
495
+ className: "flex size-8 shrink-0 items-center justify-center",
496
+ "aria-hidden": !0,
497
+ children: i
498
+ }), /* @__PURE__ */ L("span", {
499
+ className: "min-w-0 flex-1",
500
+ children: [/* @__PURE__ */ I("span", {
501
+ className: "block truncate text-sm font-medium",
502
+ children: n
503
+ }), /* @__PURE__ */ I("span", {
504
+ className: "mt-0.5 block text-xs leading-tight text-[var(--oh-muted)]",
505
+ children: r
506
+ })]
507
+ })]
508
+ });
509
+ }
510
+ function ie({ children: e }) {
511
+ let t = F.useRef(null), [n, r] = F.useState();
512
+ return F.useLayoutEffect(() => {
513
+ let e = t.current;
514
+ if (!e) return;
515
+ let n = () => {
516
+ let t = e.getBoundingClientRect().height;
517
+ r(t > 0 ? t : void 0);
518
+ };
519
+ if (n(), typeof ResizeObserver > "u") return;
520
+ let i = new ResizeObserver(n);
521
+ return i.observe(e), () => i.disconnect();
522
+ }, []), /* @__PURE__ */ I("div", {
523
+ "data-testid": "add-backend-panel-height",
524
+ style: n === void 0 ? void 0 : { height: n },
525
+ className: "overflow-hidden transition-[height] duration-300 ease-in-out motion-reduce:transition-none",
526
+ children: /* @__PURE__ */ I("div", {
527
+ ref: t,
528
+ children: e
529
+ })
530
+ });
531
+ }
532
+ function ae({ location: r }) {
533
+ let { t: a } = e("openhands"), [s, c] = F.useState(!1), l = r === "remote", u = a(l ? t.BACKEND$REMOTE_SETUP_TITLE : t.BACKEND$BEFORE_CONNECT_TITLE), d = a(l ? t.BACKEND$REMOTE_SETUP_DESCRIPTION : t.BACKEND$LOCAL_SETUP_DESCRIPTION), f = l ? G : W, p = a(l ? t.BACKEND$REMOTE_SETUP_DOCS : t.BACKEND$LOCAL_SETUP_DOCS), m = l ? "add-backend-remote" : "add-backend-local", h = `${m}-guidance-toggle`, g = `${m}-guidance-body`;
534
+ return /* @__PURE__ */ L("aside", {
535
+ "data-testid": `${m}-guidance`,
536
+ className: "rounded-lg bg-[var(--oh-surface-raised)] text-sm text-[var(--oh-muted)]",
537
+ children: [/* @__PURE__ */ I("h4", {
538
+ className: "text-white",
539
+ children: /* @__PURE__ */ L("button", {
540
+ id: h,
541
+ type: "button",
542
+ onClick: () => c((e) => !e),
543
+ "aria-expanded": s,
544
+ "aria-controls": g,
545
+ "data-testid": h,
546
+ className: o("flex w-full cursor-pointer items-center justify-between gap-2 rounded-lg px-3 py-2 text-left font-medium", "transition-colors hover:bg-[var(--oh-interactive-hover)]", "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-blue-300"),
547
+ children: [/* @__PURE__ */ L("span", {
548
+ className: "flex min-w-0 items-center gap-2",
549
+ children: [/* @__PURE__ */ I(i, {
550
+ className: "size-4 shrink-0 text-[var(--oh-muted)]",
551
+ "aria-hidden": !0
552
+ }), /* @__PURE__ */ I("span", {
553
+ className: "truncate",
554
+ children: u
509
555
  })]
556
+ }), /* @__PURE__ */ I(n, {
557
+ className: o("size-5 shrink-0 text-[var(--oh-muted)] transition-transform duration-200 ease-out", s && "rotate-180"),
558
+ "aria-hidden": !0
510
559
  })]
511
560
  })
512
- ]
561
+ }), /* @__PURE__ */ I("div", {
562
+ className: o("grid transition-[grid-template-rows] duration-200 ease-out motion-reduce:transition-none", s ? "grid-rows-[1fr]" : "grid-rows-[0fr]"),
563
+ children: /* @__PURE__ */ I("div", {
564
+ className: "overflow-hidden",
565
+ children: /* @__PURE__ */ L("div", {
566
+ id: g,
567
+ "data-testid": g,
568
+ role: "region",
569
+ "aria-labelledby": h,
570
+ "aria-hidden": !s,
571
+ inert: s ? void 0 : !0,
572
+ className: o("flex flex-col gap-2 px-3 pb-3 transition-opacity duration-200 ease-out motion-reduce:transition-none", s ? "opacity-100" : "opacity-0"),
573
+ children: [
574
+ /* @__PURE__ */ I("p", {
575
+ className: "leading-5",
576
+ children: d
577
+ }),
578
+ l ? /* @__PURE__ */ L("div", { children: [/* @__PURE__ */ I("h5", {
579
+ className: "font-medium text-white",
580
+ children: a(t.BACKEND$REMOTE_CONNECTION_TITLE)
581
+ }), /* @__PURE__ */ I("p", {
582
+ className: "mt-1 leading-5",
583
+ children: a(t.BACKEND$REMOTE_CONNECTION_DESCRIPTION)
584
+ })] }) : /* @__PURE__ */ I("code", {
585
+ className: "block break-words font-mono text-xs text-white",
586
+ children: U
587
+ }),
588
+ /* @__PURE__ */ L("a", {
589
+ href: f,
590
+ target: "_blank",
591
+ rel: "noopener noreferrer",
592
+ "data-testid": `${m}-docs-link`,
593
+ tabIndex: s ? void 0 : -1,
594
+ className: "inline-flex w-fit items-center gap-1.5 text-primary hover:underline",
595
+ children: [/* @__PURE__ */ I("span", { children: p }), /* @__PURE__ */ I(A, {
596
+ className: "size-4 shrink-0",
597
+ "aria-hidden": !0
598
+ })]
599
+ })
600
+ ]
601
+ })
602
+ })
603
+ })]
513
604
  });
514
605
  }
515
- function J({ onClose: e, source: t }) {
516
- let { addBackend: n } = f(), r = W(), { trackBackendAdded: i } = p();
517
- return /* @__PURE__ */ A(G, {
518
- onConnected: k.useCallback((a, o, s) => {
519
- n(a), i({
520
- backendKind: a.kind,
521
- connectionMethod: o,
522
- hasApiKey: !!a.apiKey,
523
- source: t,
524
- agentServerVersion: s?.agentServerVersion
525
- }), r(), e();
526
- }, [
527
- n,
528
- r,
529
- e,
530
- i,
531
- t
532
- ]),
606
+ function oe({ onConnected: n, source: i }) {
607
+ let { t: s } = e("openhands"), [c, l] = F.useState("cloud"), [u, d] = F.useState("local"), f = "add-backend-selected-panel", p = `add-backend-option-${c}-tab`, m = c === "cloud";
608
+ return /* @__PURE__ */ L("div", {
609
+ "data-testid": "add-backend-chooser",
610
+ className: "flex flex-col",
611
+ children: [/* @__PURE__ */ L("div", {
612
+ role: "tablist",
613
+ "aria-label": s(t.BACKEND$CHOOSER_TITLE),
614
+ className: "grid grid-cols-2 overflow-hidden rounded-lg border border-[var(--oh-border)]",
615
+ children: [/* @__PURE__ */ I($, {
616
+ value: "cloud",
617
+ selectedValue: c,
618
+ title: s(t.BACKEND$CLOUD_TITLE),
619
+ description: s(t.BACKEND$CLOUD_OPTION_DESCRIPTION),
620
+ icon: /* @__PURE__ */ I(D, {
621
+ width: 32,
622
+ height: 32,
623
+ "data-testid": "add-backend-option-cloud-logo"
624
+ }),
625
+ onSelect: l,
626
+ panelId: f,
627
+ testId: "add-backend-option-cloud"
628
+ }), /* @__PURE__ */ I($, {
629
+ value: "agent-server",
630
+ selectedValue: c,
631
+ title: s(t.BACKEND$AGENT_SERVER_TITLE),
632
+ description: s(t.BACKEND$AGENT_SERVER_OPTION_DESCRIPTION),
633
+ icon: /* @__PURE__ */ I(j, { className: "size-6" }),
634
+ onSelect: l,
635
+ panelId: f,
636
+ testId: "add-backend-option-agent-server"
637
+ })]
638
+ }), /* @__PURE__ */ I("div", {
639
+ className: "mt-6",
640
+ children: /* @__PURE__ */ I(ie, { children: /* @__PURE__ */ I("section", {
641
+ id: f,
642
+ role: "tabpanel",
643
+ "aria-labelledby": p,
644
+ className: "min-w-0",
645
+ children: m ? /* @__PURE__ */ I("div", {
646
+ "data-testid": "add-backend-cloud-panel",
647
+ className: o("relative isolate flex min-h-[13.5rem] w-full items-center justify-center rounded-xl border border-[var(--oh-border)] px-5 py-6", "before:pointer-events-none before:absolute before:inset-0 before:-z-10 before:rounded-xl", "before:bg-[radial-gradient(75%_75%_at_50%_50%,rgba(255,255,255,0.1)_0%,rgba(255,255,255,0)_70%)]"),
648
+ children: /* @__PURE__ */ I(Q, {
649
+ onConnected: n,
650
+ testIdRoot: "add-backend",
651
+ analyticsSource: i,
652
+ showBranding: !1
653
+ })
654
+ }) : /* @__PURE__ */ L("div", {
655
+ "data-testid": "add-backend-agent-server-panel",
656
+ className: "mx-auto w-full max-w-xl",
657
+ children: [/* @__PURE__ */ L("div", {
658
+ className: "flex items-center gap-3",
659
+ children: [
660
+ /* @__PURE__ */ I("span", {
661
+ className: "h-px flex-1 bg-[var(--oh-border)]",
662
+ "aria-hidden": !0
663
+ }),
664
+ /* @__PURE__ */ I(O, {
665
+ value: u,
666
+ options: [{
667
+ value: "local",
668
+ label: s(t.BACKEND$KIND_LOCAL),
669
+ icon: /* @__PURE__ */ I(a, { "aria-hidden": !0 })
670
+ }, {
671
+ value: "remote",
672
+ label: s(t.BACKEND$KIND_REMOTE),
673
+ icon: /* @__PURE__ */ I(r, { "aria-hidden": !0 })
674
+ }],
675
+ onChange: d,
676
+ ariaLabel: s(t.BACKEND$AGENT_SERVER_LOCATION),
677
+ testId: "add-backend-location"
678
+ }),
679
+ /* @__PURE__ */ I("span", {
680
+ className: "h-px flex-1 bg-[var(--oh-border)]",
681
+ "aria-hidden": !0
682
+ })
683
+ ]
684
+ }), /* @__PURE__ */ L("div", {
685
+ className: "mt-4 flex flex-col gap-4",
686
+ children: [/* @__PURE__ */ I(ae, { location: u }, u), /* @__PURE__ */ I(re, {
687
+ onConnected: n,
688
+ testIdRoot: "add-backend",
689
+ requireApiKey: u === "remote",
690
+ submitLabel: s(t.BACKEND$CONNECT),
691
+ submittingLabel: s(t.ONBOARDING$BACKEND_STATUS_CHECKING),
692
+ fixedKind: "local",
693
+ showKindSelector: !1
694
+ })]
695
+ })]
696
+ })
697
+ }) })
698
+ })]
699
+ });
700
+ }
701
+ function se({ onClose: e, source: t }) {
702
+ let { addBackend: n } = g(), r = ne(), { trackBackendAdded: i } = _(), a = u(), o = F.useCallback((a, o, s) => {
703
+ n(a), i({
704
+ backendKind: a.kind,
705
+ connectionMethod: o,
706
+ hasApiKey: !!a.apiKey,
707
+ source: t,
708
+ agentServerVersion: s?.agentServerVersion
709
+ }), r(), e();
710
+ }, [
711
+ n,
712
+ r,
713
+ e,
714
+ i,
715
+ t
716
+ ]);
717
+ return a ? /* @__PURE__ */ I(Q, {
718
+ onConnected: o,
719
+ testIdRoot: "add-backend",
720
+ lockedHost: a,
533
721
  analyticsSource: t
722
+ }) : /* @__PURE__ */ I(oe, {
723
+ onConnected: o,
724
+ source: t
534
725
  });
535
726
  }
536
- function Y({ mode: r, backend: i, onClose: a, source: o = "add_backend_modal", hideCloseButton: s = !1 }) {
727
+ function ce({ mode: n, backend: r, onClose: i, source: a = "add_backend_modal", hideCloseButton: s = !1 }) {
537
728
  let { t: c } = e("openhands");
538
- if (r === "add") return /* @__PURE__ */ A(m, {
539
- onClose: s ? void 0 : a,
729
+ if (n === "add") return /* @__PURE__ */ I(v, {
730
+ onClose: s ? void 0 : i,
540
731
  closeOnEscape: !1,
541
732
  closeOnBackdropClick: !s,
542
733
  "aria-label": c(t.BACKEND$ADD_TITLE),
543
- children: /* @__PURE__ */ j("div", {
734
+ children: /* @__PURE__ */ L("div", {
544
735
  "data-testid": s ? "onboarding-modal" : "add-backend-modal",
545
- className: n("relative rounded-xl border border-[var(--oh-border)] bg-base-secondary", g("xl"), h),
736
+ className: o("relative max-h-[92vh] w-[720px] overflow-y-auto rounded-xl border border-[var(--oh-border)] bg-base-secondary p-6", y),
546
737
  children: [
547
- s ? null : /* @__PURE__ */ A(y, {
548
- onClose: a,
738
+ s ? null : /* @__PURE__ */ I(C, {
739
+ onClose: i,
549
740
  testId: "add-backend-close"
550
741
  }),
551
- s ? null : /* @__PURE__ */ A("div", {
552
- className: "px-6 pt-6 pb-2 pr-12",
553
- children: /* @__PURE__ */ A("h2", {
554
- className: _,
555
- children: c(t.BACKEND$ADD_TITLE)
556
- })
742
+ s ? null : /* @__PURE__ */ L("div", {
743
+ className: "pr-8",
744
+ children: [/* @__PURE__ */ I("h2", {
745
+ className: x,
746
+ children: c(t.BACKEND$CHOOSER_TITLE)
747
+ }), /* @__PURE__ */ L("p", {
748
+ className: "mt-2 text-sm leading-6 text-[var(--oh-muted)]",
749
+ "data-testid": "add-backend-description",
750
+ children: [
751
+ c(t.BACKEND$CHOOSER_DESCRIPTION),
752
+ " ",
753
+ /* @__PURE__ */ L("a", {
754
+ href: K,
755
+ target: "_blank",
756
+ rel: "noopener noreferrer",
757
+ "aria-label": c(t.BACKEND$DEPLOYMENT_OPTIONS),
758
+ "data-testid": "add-backend-deployment-options-link",
759
+ className: "text-primary hover:underline",
760
+ children: [c(t.CTA$LEARN_MORE), /* @__PURE__ */ I(A, {
761
+ className: "ml-1 inline size-3.5 align-[-0.125em]",
762
+ "aria-hidden": !0
763
+ })]
764
+ })
765
+ ]
766
+ })]
557
767
  }),
558
- /* @__PURE__ */ A("div", {
559
- className: n("px-6 pb-6", s ? "pt-6" : "pt-2"),
560
- children: /* @__PURE__ */ A(J, {
561
- onClose: a,
562
- source: o
768
+ /* @__PURE__ */ I("div", {
769
+ className: s ? void 0 : "mt-5",
770
+ children: /* @__PURE__ */ I(se, {
771
+ onClose: i,
772
+ source: a
563
773
  })
564
774
  })
565
775
  ]
566
776
  })
567
777
  });
568
778
  let l = "edit-backend";
569
- return /* @__PURE__ */ A(m, {
570
- onClose: a,
779
+ return /* @__PURE__ */ I(v, {
780
+ onClose: i,
571
781
  closeOnEscape: !1,
572
782
  "aria-label": c(t.BACKEND$EDIT_TITLE),
573
- children: /* @__PURE__ */ j("div", {
783
+ children: /* @__PURE__ */ L("div", {
574
784
  "data-testid": `${l}-modal`,
575
- className: n("relative bg-base-secondary p-6 rounded-xl flex flex-col gap-4 border border-[var(--oh-border)]", g("md")),
785
+ className: o("relative bg-base-secondary p-6 rounded-xl flex flex-col gap-4 border border-[var(--oh-border)]", b("md")),
576
786
  children: [
577
- /* @__PURE__ */ A(y, {
578
- onClose: a,
787
+ /* @__PURE__ */ I(C, {
788
+ onClose: i,
579
789
  testId: `${l}-close`
580
790
  }),
581
- /* @__PURE__ */ A("h2", {
582
- className: n("pr-6", _),
791
+ /* @__PURE__ */ I("h2", {
792
+ className: o("pr-6", x),
583
793
  children: c(t.BACKEND$EDIT_TITLE)
584
794
  }),
585
- /* @__PURE__ */ A(U, {
795
+ /* @__PURE__ */ I(te, {
586
796
  mode: "edit",
587
- backend: i,
588
- onSubmitted: a,
797
+ backend: r,
798
+ onSubmitted: i,
589
799
  testIdRoot: l
590
800
  })
591
801
  ]
@@ -593,6 +803,6 @@ function Y({ mode: r, backend: i, onClose: a, source: o = "add_backend_modal", h
593
803
  });
594
804
  }
595
805
  //#endregion
596
- export { Y as BackendFormModal };
806
+ export { ce as BackendFormModal };
597
807
 
598
808
  //# sourceMappingURL=backend-form-modal.js.map