@openhands/agent-canvas 1.16.0 → 1.18.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 (1093) hide show
  1. package/README.md +1 -1
  2. package/README.windows.md +2 -2
  3. package/build/assets/{acp-providers-CX3Lh9gj.js → acp-providers-DcY_mKYa.js} +1 -1
  4. package/build/assets/active-backend-context-BnH4-L8h.js +2 -0
  5. package/build/assets/{agent-context-settings-DSZlXrLj.js → agent-context-settings-D3peZkjX.js} +1 -1
  6. package/build/assets/agent-profiles-service.api-DkeZaqIl.js +1 -0
  7. package/build/assets/agent-profiles-settings-7yMWYjGF.js +1 -0
  8. package/build/assets/agent-server-client-options-EHB23gyx.js +1 -0
  9. package/build/assets/agent-server-config-C_x8Otd9.js +1 -0
  10. package/build/assets/agent-server-conversation-service.api-jiCopc2E.js +88 -0
  11. package/build/assets/agent-settings-BF8hM6wb.js +2 -0
  12. package/build/assets/agent-settings-YPutBAeR.js +1 -0
  13. package/build/assets/alert-banner-eYyqvHL3.js +1 -0
  14. package/build/assets/{api-error-message-B-XdSk3b.js → api-error-message-BXo0lCI5.js} +1 -1
  15. package/build/assets/api-key-entry-screen-CCBvBD8u.js +1 -0
  16. package/build/assets/app-settings-BtYDs-Be.js +1 -0
  17. package/build/assets/automation-detail-BxXhb_m2.js +3 -0
  18. package/build/assets/{automation-export-D3a3of4G.js → automation-export-BJsfi7n2.js} +1 -1
  19. package/build/assets/automation-git-sync-B7o_Nbl-.js +1 -0
  20. package/build/assets/automation-setup-route-qaJ6lLCf.js +3 -0
  21. package/build/assets/{automation-templates-BRppNh99.js → automation-templates-Bb98r-kx.js} +1 -1
  22. package/build/assets/automations-list-DEPVNud3.js +1 -0
  23. package/build/assets/{back-nav-button-Cjl_hoxq.js → back-nav-button-B2yBiVMB.js} +1 -1
  24. package/build/assets/backend-form-modal-DxisQV_6.js +1 -0
  25. package/build/assets/backend-synced-settings-badge-DLEp6cq7.js +1 -0
  26. package/build/assets/badge-ehL-kgeO.js +1 -0
  27. package/build/assets/{base-modal-D_L0oEbG.js → base-modal-C1a0TsSx.js} +1 -1
  28. package/build/assets/bot-ByolqPEr.js +1 -0
  29. package/build/assets/{brand-button-BAfk4wGP.js → brand-button-CUMfjb99.js} +1 -1
  30. package/build/assets/browser-SE24Tk8g.js +46 -0
  31. package/build/assets/browser-tab-HjJxHA0V.js +1 -0
  32. package/build/assets/canvas-extension-page-BsUGBb1T.js +1 -0
  33. package/build/assets/canvas-extensions-C9Tm6s_E.js +1 -0
  34. package/build/assets/{canvas-extensions-runtime-2_x5Ezmi.js → canvas-extensions-runtime-B8kxM4rO.js} +1 -1
  35. package/build/assets/{chat-send-button-MUQqCZCS.js → chat-send-button-CGvc2wpE.js} +1 -1
  36. package/build/assets/check-Bo8s5Ylg.js +1 -0
  37. package/build/assets/chevron-down-Cr6Fn_wS.js +1 -0
  38. package/build/assets/chevron-right-CfdfRn-8.js +1 -0
  39. package/build/assets/circle-check-5pH3qCji.js +1 -0
  40. package/build/assets/circle-plus-check-toggle-BDX_ctNs.js +1 -0
  41. package/build/assets/{cloud-funnel-analytics-CztBCCPp.js → cloud-funnel-analytics-D5uJ_4JE.js} +1 -1
  42. package/build/assets/{cog-D-MPQW6G.js → cog-CAEugqtV.js} +1 -1
  43. package/build/assets/command-menu-CQxs4mtX.js +1 -0
  44. package/build/assets/commits-tab-D0xgjipP.js +1 -0
  45. package/build/assets/{condenser-settings-DmEOje-7.js → condenser-settings-D63NJRBT.js} +1 -1
  46. package/build/assets/confirmation-modal-78sd9Vny.js +1 -0
  47. package/build/assets/{context-menu-list-item-I86vKcmM.js → context-menu-list-item-Cm7-7Y-7.js} +1 -1
  48. package/build/assets/conversation-B_nweu5p.js +93 -0
  49. package/build/assets/conversation-edjzrv5w.js +1 -0
  50. package/build/assets/conversation-panel-edjzrv5w.js +1 -0
  51. package/build/assets/conversation-state-store-9D_3P7q4.js +1 -0
  52. package/build/assets/conversation-store-DC-JlJuq.js +6 -0
  53. package/build/assets/{conversation-tab-empty-state-FIbh_lc8.js → conversation-tab-empty-state-B3dpJXX0.js} +1 -1
  54. package/build/assets/copy-to-clipboard-button-B1ljgNxO.js +1 -0
  55. package/build/assets/device-verify-D5QRIS_x.js +1 -0
  56. package/build/assets/{dropdown-classes-Bc1djN0-.js → dropdown-classes-BGvOvW2_.js} +1 -1
  57. package/build/assets/edit-automation-modal-D_JWSmxT.js +1 -0
  58. package/build/assets/empty-state-FK_s1B60.js +1 -0
  59. package/build/assets/{entry.client-CqyPPjOq.js → entry.client-BMafTpjO.js} +2 -2
  60. package/build/assets/enum-filter-dropdown-UNaom12H.js +1 -0
  61. package/build/assets/environment-switch-overlay-COibRUA-.js +1 -0
  62. package/build/assets/error-state-Cf8LRuuY.js +1 -0
  63. package/build/assets/extensions-hub-C_6ahIua.js +1 -0
  64. package/build/assets/extensions-navigation-C5GfpzFe.js +1 -0
  65. package/build/assets/external-link-Bd7Tga-1.js +1 -0
  66. package/build/assets/files-tab-D5PPIWI1.js +1 -0
  67. package/build/assets/{form-control-classes-Bkh5FGrD.js → form-control-classes-Dbq-7YP_.js} +1 -1
  68. package/build/assets/format-model-name-Dfh9Udrx.js +1 -0
  69. package/build/assets/get-git-path-jU2zjqIB.js +1 -0
  70. package/build/assets/git-repo-dropdown-BoDDWXfX.js +1 -0
  71. package/build/assets/git-repo-dropdown-uxlFw2gn.js +1 -0
  72. package/build/assets/highlighted-source-view-C7pAXrT0.js +1 -0
  73. package/build/assets/home-BM5_Wz_R.js +1 -0
  74. package/build/assets/home-Ivfm7KC4.js +1 -0
  75. package/build/assets/home-automation-run-tooltip-B1N2uO9p.js +1 -0
  76. package/build/assets/home-store-DCbei3DX.js +1 -0
  77. package/build/assets/hooks-service-Dnmhqc0Z.js +1 -0
  78. package/build/assets/index-home-td9BN2T3.js +1 -0
  79. package/build/assets/info-BcajzHn1.js +1 -0
  80. package/build/assets/install-server-modal-B81I-5OE.js +1 -0
  81. package/build/assets/kebab-menu-item-content-SCJBwZnp.js +1 -0
  82. package/build/assets/{key-BmVyxs-2.js → key-O84CMFHb.js} +1 -1
  83. package/build/assets/launch-ZLxI4opd.js +1 -0
  84. package/build/assets/list-filter-B8PQk3RA.js +1 -0
  85. package/build/assets/{list-todo-apgLVjMw.js → list-todo-Caa8E1X_.js} +1 -1
  86. package/build/assets/llm-not-configured-banner-Dh_ajcM8.js +27 -0
  87. package/build/assets/llm-settings-CODhjQzy.js +1 -0
  88. package/build/assets/llm-settings-CZaXYgtw.js +1 -0
  89. package/build/assets/llm-subscription-service-CgIDc38n.js +1 -0
  90. package/build/assets/loader-circle-BxJgk73D.js +1 -0
  91. package/build/assets/{loading-spinner-BY9N3pOe.js → loading-spinner-BeLV0IXf.js} +1 -1
  92. package/build/assets/manage-backends-modal-cMXqCb-B.js +1 -0
  93. package/build/assets/manifest-bfeccb98.js +1 -0
  94. package/build/assets/manifest-subpage-layout-CVZgVKoY.js +1 -0
  95. package/build/assets/{map-provider-Cu3Zgumb.js → map-provider-iRs80q_6.js} +1 -1
  96. package/build/assets/markdown-renderer-DyFl9-mL.js +8 -0
  97. package/build/assets/mcp-CraxoXQv.js +1 -0
  98. package/build/assets/{mcp-marketplace-utils-AIBzzHTO.js → mcp-marketplace-utils-C7PYr293.js} +1 -1
  99. package/build/assets/mcp-page-CteH_K0N.js +9 -0
  100. package/build/assets/messages-Bk1xhbU2.js +41 -0
  101. package/build/assets/{modal-body-BxZjsju9.js → modal-body-C24WsdFb.js} +1 -1
  102. package/build/assets/{modal-classes-C8eycCwG.js → modal-classes-B0b9eiL8.js} +1 -1
  103. package/build/assets/modal-close-button-DfqfB2Nj.js +1 -0
  104. package/build/assets/{mouse-pointer-click-Co2uyaPA.js → mouse-pointer-click-BXlRN92t.js} +1 -1
  105. package/build/assets/onboarding-DXFBRqEy.js +1 -0
  106. package/build/assets/onboarding-modal-BT3Gx_sZ.js +1 -0
  107. package/build/assets/organization-service.api-B5CvmnYQ.js +1 -0
  108. package/build/assets/pencil-q-ihqDYv.js +1 -0
  109. package/build/assets/pin-BdroVQdN.js +1 -0
  110. package/build/assets/planner-tab-CstoOlAB.js +1 -0
  111. package/build/assets/plug-7ACOEbMs.js +1 -0
  112. package/build/assets/plugins-management-service-5rqVPEGN.js +1 -0
  113. package/build/assets/plus-C2e21TFC.js +1 -0
  114. package/build/assets/profiles-service.api-D1XKMgr0.js +1 -0
  115. package/build/assets/providers-XmZ9HM4Q.js +1 -0
  116. package/build/assets/proxy-XP6U1Dhv.js +1 -0
  117. package/build/assets/{puzzle-JM_QaRm0.js → puzzle-LJYnuxKe.js} +1 -1
  118. package/build/assets/react-BX7IV650.js +1 -0
  119. package/build/assets/recommended-automations-launcher-DEHRKIAg.js +1 -0
  120. package/build/assets/refresh-cw-BtdC3T8P.js +1 -0
  121. package/build/assets/root-CM6IZHlg.css +1 -0
  122. package/build/assets/root-DdFkodKW.js +2 -0
  123. package/build/assets/root-layout-DUquNZTU.js +2 -0
  124. package/build/assets/schema-field-Y3F8JvXd.js +1 -0
  125. package/build/assets/scroll-fade-state-Dt_fx2kf.js +1 -0
  126. package/build/assets/sdk-section-page-CNZTLwH9.js +1 -0
  127. package/build/assets/secret-form-9-BoGA40.js +1 -0
  128. package/build/assets/secrets-service-BOIsfD9j.js +1 -0
  129. package/build/assets/secrets-settings-CBJgFr42.js +1 -0
  130. package/build/assets/settings-D4hdToD4.js +1 -0
  131. package/build/assets/settings-dropdown-input-DBvsZ7-Q.js +1 -0
  132. package/build/assets/settings-index-DeQphyBK.js +1 -0
  133. package/build/assets/settings-input-dVuzapBA.js +1 -0
  134. package/build/assets/{settings-list-classes-BzeSZbF2.js → settings-list-classes-DhAPuXm6.js} +1 -1
  135. package/build/assets/settings-modal-tHiJ8iYV.js +1 -0
  136. package/build/assets/settings-nav-GAQjW1a-.js +16 -0
  137. package/build/assets/settings-service.api-C1vZH9Vh.js +1 -0
  138. package/build/assets/settings-switch-DDd1cQ8t.js +1 -0
  139. package/build/assets/{settings-utils-UYpEdPuD.js → settings-utils-BTaaRhLZ.js} +1 -1
  140. package/build/assets/shared-conversation-Cyg7m7ns.js +1 -0
  141. package/build/assets/shield-check-C3Rl0NF8.js +1 -0
  142. package/build/assets/{sidebar-layout-D6fS8-Gl.js → sidebar-layout-DH0E-5KW.js} +1 -1
  143. package/build/assets/sidebar-mobile-menu-toggle-CQ4iky__.js +1 -0
  144. package/build/assets/{sidebar-nav-link-DQQcMf1A.js → sidebar-nav-link-oLQiKUBu.js} +1 -1
  145. package/build/assets/{sidebar-onboarding-checklist-storage-BBkeI6Bp.js → sidebar-onboarding-checklist-storage-TfvNNnnr.js} +1 -1
  146. package/build/assets/sidebar-store-DAZVH-DR.js +1 -0
  147. package/build/assets/skill-card-pill-row-DfjIfj0K.js +1 -0
  148. package/build/assets/{skill-filter-w__3UCEE.js → skill-filter-DsNLmn76.js} +2 -2
  149. package/build/assets/{skill-icon-badge-RQkq8wvl.js → skill-icon-badge-0MK_68Nc.js} +1 -1
  150. package/build/assets/skill-scope-BE-H9TSZ.js +1 -0
  151. package/build/assets/skills-plugins-vzSdxSk_.js +1 -0
  152. package/build/assets/skills-settings-BiPOH9H9.js +1 -0
  153. package/build/assets/styled-tooltip-CejG0rqv.js +1 -0
  154. package/build/assets/task-list-tab-OkZSqnTp.js +1 -0
  155. package/build/assets/{terminal-CNElN42a.js → terminal-Dph60VFZ.js} +2 -2
  156. package/build/assets/toggle-switch-B2uXaAUS.js +1 -0
  157. package/build/assets/trash-2-Bb40zQzs.js +1 -0
  158. package/build/assets/trash-Ckh7yCaB.js +1 -0
  159. package/build/assets/triangle-alert-DEdu-b_L.js +1 -0
  160. package/build/assets/{typography-v1KN0tzi.js → typography-DgcLGdHk.js} +1 -1
  161. package/build/assets/usage-tab-MCmNRAnR.js +1 -0
  162. package/build/assets/use-acp-credential-form-ychoGqjC.js +1 -0
  163. package/build/assets/use-activate-agent-profile-8L8Xdghy.js +1 -0
  164. package/build/assets/use-agent-profiles-Bi8hSkze.js +1 -0
  165. package/build/assets/{use-automation-health-E6NZi9rb.js → use-automation-health-U99vvHxx.js} +1 -1
  166. package/build/assets/use-automation-permissions-Buus0R6h.js +1 -0
  167. package/build/assets/{use-automations-xijQKIl9.js → use-automations-Bq5hVuv0.js} +1 -1
  168. package/build/assets/{use-can-manage-org-profiles-CrJP5262.js → use-can-manage-org-profiles-MzIeEV8F.js} +1 -1
  169. package/build/assets/use-canvas-extensions-Ca9KoVEm.js +1 -0
  170. package/build/assets/{use-cloud-current-user-id-CDfAHpPX.js → use-cloud-current-user-id-B4ZLUZSa.js} +1 -1
  171. package/build/assets/use-config-l5tkDHyD.js +1 -0
  172. package/build/assets/use-create-conversation-i_PdFdIs.js +1 -0
  173. package/build/assets/use-create-secret-CjWq0J4O.js +1 -0
  174. package/build/assets/use-free-models-gCsJ5BV0.js +1 -0
  175. package/build/assets/{use-get-secrets-K3jmk-LH.js → use-get-secrets-CMTuWEp_.js} +1 -1
  176. package/build/assets/use-is-authed-A2Yinlt0.js +1 -0
  177. package/build/assets/{use-launch-skill-in-chat-BYjYihBP.js → use-launch-skill-in-chat-QbXDhiHr.js} +1 -1
  178. package/build/assets/use-llm-configured-Dl4zg8ht.js +1 -0
  179. package/build/assets/use-llm-profiles-SWsuFmFu.js +1 -0
  180. package/build/assets/use-manifest-capabilities-CdqYfUAC.js +1 -0
  181. package/build/assets/use-onboarding-completion-Xl63ZvzQ.js +1 -0
  182. package/build/assets/use-pinned-home-route-BXDIUaxQ.js +1 -0
  183. package/build/assets/use-plugins-marketplace-BIIaPiaB.js +1 -0
  184. package/build/assets/use-save-agent-profile-D-ZHHE94.js +1 -0
  185. package/build/assets/{use-save-settings-DYqkKv7T.js → use-save-settings-Dapkf4cC.js} +1 -1
  186. package/build/assets/use-settings-C2KKQKVC.js +1 -0
  187. package/build/assets/use-settings-nav-items-TOc0Rsfd.js +1 -0
  188. package/build/assets/use-tracking-j4uo9VEW.js +3 -0
  189. package/build/assets/{use-user-conversation-B9Gebw_g.js → use-user-conversation-5UFqMoO4.js} +1 -1
  190. package/build/assets/{useInfiniteQuery-C926xzY4.js → useInfiniteQuery-CtSRG7uW.js} +1 -1
  191. package/build/assets/{useMutation-B-qc391N.js → useMutation-Cszf8mKy.js} +1 -1
  192. package/build/assets/useQueries-pUohFMSP.js +1 -0
  193. package/build/assets/useQuery-DAAacS7O.js +1 -0
  194. package/build/assets/useTranslation-CCgUjPJF.js +1 -0
  195. package/build/assets/utils-BgLSZdyy.js +1 -0
  196. package/build/assets/{vendor~conversation-panel~conversation-C8Fn4XOf.js → vendor~conversation-panel~conversation-C22sJuWZ.js} +1 -1
  197. package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~b0x1wrp2-Z0lly3FE.js +2 -0
  198. package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~czjee3a3-BXXGJNDU.js +185 -0
  199. package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~ew9ih1s8-40UR63Gt.js +1 -0
  200. package/build/assets/{vendor~index-home~home~conversation-panel~conversation-hWywRBaR.js → vendor~index-home~home~conversation-panel~conversation-UTl7gUo9.js} +1 -1
  201. package/build/assets/vendor~root-layout-CcdIqs-C.js +1 -0
  202. package/build/assets/{vendor~root-layout~conversation-panel~conversation-BMbMgaGu.js → vendor~root-layout~conversation-panel~conversation-C3EBV3kp.js} +1 -1
  203. package/build/assets/vendor~root-layout~conversation-panel~conversation~skills-settings~automations-list~shared-~bovqqk8e-BCe0JJVy.js +1 -0
  204. package/build/assets/{vendor~root-layout~index-home~home~conversation-panel~conversation-j5MFqfSy.js → vendor~root-layout~index-home~home~conversation-panel~conversation-BGGbPcYh.js} +1 -1
  205. package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~mcp~automations-list~aut~ibfbmr9f-CxhwKuAd.js +1 -0
  206. package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~nj1hli3r-DP9wmsjo.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~inibp4qe-CnsDDzeE.js} +1 -1
  207. package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~eo2nf80n-CUmIwQCN.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~eo2nf80n-3eJ4ExtV.js} +12 -6
  208. package/build/assets/{verification-settings-gw_q6vkL.js → verification-settings-DdBpaVPz.js} +1 -1
  209. package/build/assets/{wrench-CUEI1krB.js → wrench-B8Wg_nbp.js} +1 -1
  210. package/build/assets/x-CX8lVGwm.js +1 -0
  211. package/build/index.html +4 -4
  212. package/build/locales/ar/openhands.json +79 -22
  213. package/build/locales/ca/openhands.json +79 -22
  214. package/build/locales/de/openhands.json +79 -22
  215. package/build/locales/en/openhands.json +79 -22
  216. package/build/locales/es/openhands.json +79 -22
  217. package/build/locales/fr/openhands.json +79 -22
  218. package/build/locales/it/openhands.json +79 -22
  219. package/build/locales/ja/openhands.json +79 -22
  220. package/build/locales/ko-KR/openhands.json +79 -22
  221. package/build/locales/no/openhands.json +79 -22
  222. package/build/locales/pt/openhands.json +79 -22
  223. package/build/locales/tr/openhands.json +79 -22
  224. package/build/locales/uk/openhands.json +79 -22
  225. package/build/locales/zh-CN/openhands.json +79 -22
  226. package/build/locales/zh-TW/openhands.json +79 -22
  227. package/config/defaults.json +3 -3
  228. package/dist/api/agent-server-adapter.cjs +3 -3
  229. package/dist/api/agent-server-adapter.cjs.map +1 -1
  230. package/dist/api/agent-server-adapter.d.ts +72 -12
  231. package/dist/api/agent-server-adapter.js +234 -132
  232. package/dist/api/agent-server-adapter.js.map +1 -1
  233. package/dist/api/agent-server-config.cjs +1 -1
  234. package/dist/api/agent-server-config.cjs.map +1 -1
  235. package/dist/api/agent-server-config.d.ts +6 -0
  236. package/dist/api/agent-server-config.js +6 -3
  237. package/dist/api/agent-server-config.js.map +1 -1
  238. package/dist/api/automation-service/automation-service.api.cjs +1 -1
  239. package/dist/api/automation-service/automation-service.api.cjs.map +1 -1
  240. package/dist/api/automation-service/automation-service.api.d.ts +2 -2
  241. package/dist/api/automation-service/automation-service.api.js +7 -7
  242. package/dist/api/automation-service/automation-service.api.js.map +1 -1
  243. package/dist/api/cloud/organization-service.api.cjs.map +1 -1
  244. package/dist/api/cloud/organization-service.api.d.ts +9 -1
  245. package/dist/api/cloud/organization-service.api.js.map +1 -1
  246. package/dist/api/cloud/provider-connections-service.api.cjs +2 -0
  247. package/dist/api/cloud/provider-connections-service.api.cjs.map +1 -0
  248. package/dist/api/cloud/provider-connections-service.api.d.ts +5 -0
  249. package/dist/api/cloud/provider-connections-service.api.js +50 -0
  250. package/dist/api/cloud/provider-connections-service.api.js.map +1 -0
  251. package/dist/api/cloud/skills-service.api.cjs +1 -1
  252. package/dist/api/cloud/skills-service.api.cjs.map +1 -1
  253. package/dist/api/cloud/skills-service.api.d.ts +10 -0
  254. package/dist/api/cloud/skills-service.api.js +11 -1
  255. package/dist/api/cloud/skills-service.api.js.map +1 -1
  256. package/dist/api/config-service/config-service.api.cjs +1 -1
  257. package/dist/api/config-service/config-service.api.cjs.map +1 -1
  258. package/dist/api/config-service/config-service.api.js +6 -2
  259. package/dist/api/config-service/config-service.api.js.map +1 -1
  260. package/dist/api/config-service/config-service.types.d.ts +13 -0
  261. package/dist/api/conversation-metadata-store.cjs +1 -1
  262. package/dist/api/conversation-metadata-store.cjs.map +1 -1
  263. package/dist/api/conversation-metadata-store.d.ts +24 -0
  264. package/dist/api/conversation-metadata-store.js +10 -2
  265. package/dist/api/conversation-metadata-store.js.map +1 -1
  266. package/dist/api/conversation-service/agent-server-conversation-service.api.cjs +1 -1
  267. package/dist/api/conversation-service/agent-server-conversation-service.api.cjs.map +1 -1
  268. package/dist/api/conversation-service/agent-server-conversation-service.api.d.ts +20 -0
  269. package/dist/api/conversation-service/agent-server-conversation-service.api.js +126 -77
  270. package/dist/api/conversation-service/agent-server-conversation-service.api.js.map +1 -1
  271. package/dist/api/hooks-service.cjs +2 -0
  272. package/dist/api/hooks-service.cjs.map +1 -0
  273. package/dist/api/hooks-service.d.ts +13 -0
  274. package/dist/api/hooks-service.js +20 -0
  275. package/dist/api/hooks-service.js.map +1 -0
  276. package/dist/api/provider-connections-service/provider-connections-service.api.cjs +1 -1
  277. package/dist/api/provider-connections-service/provider-connections-service.api.cjs.map +1 -1
  278. package/dist/api/provider-connections-service/provider-connections-service.api.js +25 -16
  279. package/dist/api/provider-connections-service/provider-connections-service.api.js.map +1 -1
  280. package/dist/api/settings-service/settings-service.api.cjs +1 -1
  281. package/dist/api/settings-service/settings-service.api.cjs.map +1 -1
  282. package/dist/api/settings-service/settings-service.api.d.ts +2 -0
  283. package/dist/api/settings-service/settings-service.api.js +18 -10
  284. package/dist/api/settings-service/settings-service.api.js.map +1 -1
  285. package/dist/api/skills-service.cjs +1 -1
  286. package/dist/api/skills-service.cjs.map +1 -1
  287. package/dist/api/skills-service.d.ts +7 -0
  288. package/dist/api/skills-service.js +11 -8
  289. package/dist/api/skills-service.js.map +1 -1
  290. package/dist/components/conversation-events/chat/event-message-components/critic-result-display.cjs +1 -1
  291. package/dist/components/conversation-events/chat/event-message-components/critic-result-display.js +5 -5
  292. package/dist/components/conversation-events/chat/event-message-components/finish-event-message.cjs +1 -1
  293. package/dist/components/conversation-events/chat/event-message-components/finish-event-message.cjs.map +1 -1
  294. package/dist/components/conversation-events/chat/event-message-components/finish-event-message.js +2 -1
  295. package/dist/components/conversation-events/chat/event-message-components/finish-event-message.js.map +1 -1
  296. package/dist/components/conversation-events/chat/event-message-components/generic-event-message-wrapper.cjs +1 -1
  297. package/dist/components/conversation-events/chat/event-message-components/generic-event-message-wrapper.cjs.map +1 -1
  298. package/dist/components/conversation-events/chat/event-message-components/generic-event-message-wrapper.d.ts +1 -1
  299. package/dist/components/conversation-events/chat/event-message-components/generic-event-message-wrapper.js +28 -28
  300. package/dist/components/conversation-events/chat/event-message-components/generic-event-message-wrapper.js.map +1 -1
  301. package/dist/components/conversation-events/chat/event-message-components/thought-event-message.cjs +1 -1
  302. package/dist/components/conversation-events/chat/event-message-components/thought-event-message.cjs.map +1 -1
  303. package/dist/components/conversation-events/chat/event-message-components/thought-event-message.js +2 -1
  304. package/dist/components/conversation-events/chat/event-message-components/thought-event-message.js.map +1 -1
  305. package/dist/components/conversation-events/chat/event-message-components/user-assistant-event-message.cjs +1 -1
  306. package/dist/components/conversation-events/chat/event-message-components/user-assistant-event-message.cjs.map +1 -1
  307. package/dist/components/conversation-events/chat/event-message-components/user-assistant-event-message.d.ts +1 -1
  308. package/dist/components/conversation-events/chat/event-message-components/user-assistant-event-message.js +37 -37
  309. package/dist/components/conversation-events/chat/event-message-components/user-assistant-event-message.js.map +1 -1
  310. package/dist/components/conversation-events/chat/event-message.cjs +2 -2
  311. package/dist/components/conversation-events/chat/event-message.cjs.map +1 -1
  312. package/dist/components/conversation-events/chat/event-message.js +79 -70
  313. package/dist/components/conversation-events/chat/event-message.js.map +1 -1
  314. package/dist/components/conversation-events/chat/messages.cjs +1 -1
  315. package/dist/components/conversation-events/chat/messages.cjs.map +1 -1
  316. package/dist/components/conversation-events/chat/messages.js +28 -27
  317. package/dist/components/conversation-events/chat/messages.js.map +1 -1
  318. package/dist/components/features/automations/automation-card.cjs +1 -1
  319. package/dist/components/features/automations/automation-card.cjs.map +1 -1
  320. package/dist/components/features/automations/automation-card.js +104 -97
  321. package/dist/components/features/automations/automation-card.js.map +1 -1
  322. package/dist/components/features/automations/automation-list-row.cjs +1 -1
  323. package/dist/components/features/automations/automation-list-row.cjs.map +1 -1
  324. package/dist/components/features/automations/automation-list-row.js +89 -77
  325. package/dist/components/features/automations/automation-list-row.js.map +1 -1
  326. package/dist/components/features/automations/build-automation-menu-items.cjs +1 -1
  327. package/dist/components/features/automations/build-automation-menu-items.cjs.map +1 -1
  328. package/dist/components/features/automations/build-automation-menu-items.d.ts +3 -1
  329. package/dist/components/features/automations/build-automation-menu-items.js +12 -11
  330. package/dist/components/features/automations/build-automation-menu-items.js.map +1 -1
  331. package/dist/components/features/automations/detail/configuration-section.d.ts +7 -1
  332. package/dist/components/features/automations/detail/detail-header.d.ts +10 -5
  333. package/dist/components/features/automations/detail/run-status-badge.cjs +1 -1
  334. package/dist/components/features/automations/detail/run-status-badge.cjs.map +1 -1
  335. package/dist/components/features/automations/detail/run-status-badge.d.ts +2 -2
  336. package/dist/components/features/automations/detail/run-status-badge.js +82 -53
  337. package/dist/components/features/automations/detail/run-status-badge.js.map +1 -1
  338. package/dist/components/features/automations/kebab-menu.cjs +1 -1
  339. package/dist/components/features/automations/kebab-menu.cjs.map +1 -1
  340. package/dist/components/features/automations/kebab-menu.js +9 -5
  341. package/dist/components/features/automations/kebab-menu.js.map +1 -1
  342. package/dist/components/features/automations/recommended-automations-launcher.cjs +1 -1
  343. package/dist/components/features/automations/recommended-automations-launcher.cjs.map +1 -1
  344. package/dist/components/features/automations/recommended-automations-launcher.js +12 -12
  345. package/dist/components/features/automations/recommended-automations-launcher.js.map +1 -1
  346. package/dist/components/features/automations/recommended-automations-section.cjs +1 -1
  347. package/dist/components/features/automations/recommended-automations-section.js +9 -9
  348. package/dist/components/features/backends/backend-selector.cjs +1 -1
  349. package/dist/components/features/backends/backend-selector.cjs.map +1 -1
  350. package/dist/components/features/backends/backend-selector.js +123 -112
  351. package/dist/components/features/backends/backend-selector.js.map +1 -1
  352. package/dist/components/features/backends/manage-backends-modal.cjs +1 -1
  353. package/dist/components/features/backends/manage-backends-modal.cjs.map +1 -1
  354. package/dist/components/features/backends/manage-backends-modal.js +29 -29
  355. package/dist/components/features/backends/manage-backends-modal.js.map +1 -1
  356. package/dist/components/features/chat/change-agent-button.cjs +1 -1
  357. package/dist/components/features/chat/change-agent-button.js +4 -4
  358. package/dist/components/features/chat/chat-interface.cjs +2 -2
  359. package/dist/components/features/chat/chat-interface.cjs.map +1 -1
  360. package/dist/components/features/chat/chat-interface.js +137 -137
  361. package/dist/components/features/chat/chat-interface.js.map +1 -1
  362. package/dist/components/features/chat/chat-message.cjs +1 -1
  363. package/dist/components/features/chat/chat-message.cjs.map +1 -1
  364. package/dist/components/features/chat/chat-message.d.ts +2 -1
  365. package/dist/components/features/chat/chat-message.js +88 -79
  366. package/dist/components/features/chat/chat-message.js.map +1 -1
  367. package/dist/components/features/chat/components/chat-input-llm-profile-picker.cjs +1 -1
  368. package/dist/components/features/chat/components/chat-input-llm-profile-picker.cjs.map +1 -1
  369. package/dist/components/features/chat/components/chat-input-llm-profile-picker.js +62 -61
  370. package/dist/components/features/chat/components/chat-input-llm-profile-picker.js.map +1 -1
  371. package/dist/components/features/chat/components/context-window-meter.cjs +1 -1
  372. package/dist/components/features/chat/components/context-window-meter.js +4 -4
  373. package/dist/components/features/chat/confirmation-mode-enabled.cjs +1 -1
  374. package/dist/components/features/chat/confirmation-mode-enabled.js +4 -4
  375. package/dist/components/features/chat/generic-event-message.cjs +1 -1
  376. package/dist/components/features/chat/generic-event-message.cjs.map +1 -1
  377. package/dist/components/features/chat/generic-event-message.d.ts +2 -1
  378. package/dist/components/features/chat/generic-event-message.js +41 -22
  379. package/dist/components/features/chat/generic-event-message.js.map +1 -1
  380. package/dist/components/features/chat/interactive-chat-box.cjs +1 -1
  381. package/dist/components/features/chat/interactive-chat-box.cjs.map +1 -1
  382. package/dist/components/features/chat/interactive-chat-box.js +20 -19
  383. package/dist/components/features/chat/interactive-chat-box.js.map +1 -1
  384. package/dist/components/features/chat/model-messages.cjs +1 -1
  385. package/dist/components/features/chat/model-messages.cjs.map +1 -1
  386. package/dist/components/features/chat/model-messages.js +27 -26
  387. package/dist/components/features/chat/model-messages.js.map +1 -1
  388. package/dist/components/features/conversation/conversation-overview-git-section.cjs +1 -1
  389. package/dist/components/features/conversation/conversation-overview-git-section.js +4 -4
  390. package/dist/components/features/conversation/conversation-overview-skills-panel.cjs +1 -1
  391. package/dist/components/features/conversation/conversation-overview-skills-panel.js +4 -4
  392. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.cjs +1 -1
  393. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.cjs.map +1 -1
  394. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.js +77 -78
  395. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.js.map +1 -1
  396. package/dist/components/features/conversation/conversation-tabs/conversation-tabs.cjs +1 -1
  397. package/dist/components/features/conversation/conversation-tabs/conversation-tabs.cjs.map +1 -1
  398. package/dist/components/features/conversation/conversation-tabs/conversation-tabs.js +88 -88
  399. package/dist/components/features/conversation/conversation-tabs/conversation-tabs.js.map +1 -1
  400. package/dist/components/features/conversation-panel/advanced-conversation-options-modal.cjs +2 -0
  401. package/dist/components/features/conversation-panel/advanced-conversation-options-modal.cjs.map +1 -0
  402. package/dist/components/features/conversation-panel/advanced-conversation-options-modal.d.ts +21 -0
  403. package/dist/components/features/conversation-panel/advanced-conversation-options-modal.js +239 -0
  404. package/dist/components/features/conversation-panel/advanced-conversation-options-modal.js.map +1 -0
  405. package/dist/components/features/conversation-panel/budget-display.cjs +1 -1
  406. package/dist/components/features/conversation-panel/budget-display.cjs.map +1 -1
  407. package/dist/components/features/conversation-panel/budget-display.d.ts +1 -2
  408. package/dist/components/features/conversation-panel/budget-display.js +12 -19
  409. package/dist/components/features/conversation-panel/budget-display.js.map +1 -1
  410. package/dist/components/features/conversation-panel/conversation-active-tag-filters.cjs +2 -0
  411. package/dist/components/features/conversation-panel/conversation-active-tag-filters.cjs.map +1 -0
  412. package/dist/components/features/conversation-panel/conversation-active-tag-filters.d.ts +28 -0
  413. package/dist/components/features/conversation-panel/conversation-active-tag-filters.js +69 -0
  414. package/dist/components/features/conversation-panel/conversation-active-tag-filters.js.map +1 -0
  415. package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.cjs +1 -1
  416. package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.cjs.map +1 -1
  417. package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.d.ts +2 -1
  418. package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.js +19 -18
  419. package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.js.map +1 -1
  420. package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.cjs +1 -1
  421. package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.cjs.map +1 -1
  422. package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.d.ts +2 -1
  423. package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.js +91 -80
  424. package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.js.map +1 -1
  425. package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.cjs +1 -1
  426. package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.cjs.map +1 -1
  427. package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.js +45 -44
  428. package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.js.map +1 -1
  429. package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.cjs +1 -1
  430. package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.cjs.map +1 -1
  431. package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.js +1 -1
  432. package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.js.map +1 -1
  433. package/dist/components/features/conversation-panel/conversation-card/conversation-card.cjs +1 -1
  434. package/dist/components/features/conversation-panel/conversation-card/conversation-card.cjs.map +1 -1
  435. package/dist/components/features/conversation-panel/conversation-card/conversation-card.d.ts +7 -1
  436. package/dist/components/features/conversation-panel/conversation-card/conversation-card.js +87 -81
  437. package/dist/components/features/conversation-panel/conversation-card/conversation-card.js.map +1 -1
  438. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.cjs +1 -1
  439. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.cjs.map +1 -1
  440. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.d.ts +2 -1
  441. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.js +1 -1
  442. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.js.map +1 -1
  443. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.cjs +1 -1
  444. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.cjs.map +1 -1
  445. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.d.ts +2 -1
  446. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.js +2 -1
  447. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.js.map +1 -1
  448. package/dist/components/features/conversation-panel/conversation-layouts-menu.cjs +2 -0
  449. package/dist/components/features/conversation-panel/conversation-layouts-menu.cjs.map +1 -0
  450. package/dist/components/features/conversation-panel/conversation-layouts-menu.d.ts +29 -0
  451. package/dist/components/features/conversation-panel/conversation-layouts-menu.js +177 -0
  452. package/dist/components/features/conversation-panel/conversation-layouts-menu.js.map +1 -0
  453. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.cjs +1 -1
  454. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.cjs.map +1 -1
  455. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.d.ts +37 -0
  456. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.js +85 -45
  457. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.js.map +1 -1
  458. package/dist/components/features/conversation-panel/conversation-panel.cjs +1 -1
  459. package/dist/components/features/conversation-panel/conversation-panel.cjs.map +1 -1
  460. package/dist/components/features/conversation-panel/conversation-panel.js +296 -290
  461. package/dist/components/features/conversation-panel/conversation-panel.js.map +1 -1
  462. package/dist/components/features/conversation-panel/edit-conversation-tags-modal.cjs +2 -0
  463. package/dist/components/features/conversation-panel/edit-conversation-tags-modal.cjs.map +1 -0
  464. package/dist/components/features/conversation-panel/edit-conversation-tags-modal.d.ts +22 -0
  465. package/dist/components/features/conversation-panel/edit-conversation-tags-modal.js +153 -0
  466. package/dist/components/features/conversation-panel/edit-conversation-tags-modal.js.map +1 -0
  467. package/dist/components/features/conversation-panel/hide-older-conversations-row.cjs +2 -0
  468. package/dist/components/features/conversation-panel/hide-older-conversations-row.cjs.map +1 -0
  469. package/dist/components/features/conversation-panel/hide-older-conversations-row.d.ts +6 -0
  470. package/dist/components/features/conversation-panel/hide-older-conversations-row.js +65 -0
  471. package/dist/components/features/conversation-panel/hide-older-conversations-row.js.map +1 -0
  472. package/dist/components/features/conversation-panel/menu-row.cjs +1 -1
  473. package/dist/components/features/conversation-panel/menu-row.cjs.map +1 -1
  474. package/dist/components/features/conversation-panel/menu-row.d.ts +11 -1
  475. package/dist/components/features/conversation-panel/menu-row.js +27 -16
  476. package/dist/components/features/conversation-panel/menu-row.js.map +1 -1
  477. package/dist/components/features/home/featured-automations/automation-health-indicator.cjs +1 -1
  478. package/dist/components/features/home/featured-automations/automation-health-indicator.cjs.map +1 -1
  479. package/dist/components/features/home/featured-automations/automation-health-indicator.js +1 -1
  480. package/dist/components/features/home/featured-automations/automation-health-indicator.js.map +1 -1
  481. package/dist/components/features/home/featured-automations/automation-run-activity-metrics.cjs +1 -1
  482. package/dist/components/features/home/featured-automations/automation-run-activity-metrics.cjs.map +1 -1
  483. package/dist/components/features/home/featured-automations/automation-run-activity-metrics.d.ts +4 -3
  484. package/dist/components/features/home/featured-automations/automation-run-activity-metrics.js +22 -25
  485. package/dist/components/features/home/featured-automations/automation-run-activity-metrics.js.map +1 -1
  486. package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.cjs +1 -1
  487. package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.cjs.map +1 -1
  488. package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.d.ts +1 -1
  489. package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.js +15 -15
  490. package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.js.map +1 -1
  491. package/dist/components/features/home/featured-automations/automation-run-health.cjs +1 -1
  492. package/dist/components/features/home/featured-automations/automation-run-health.cjs.map +1 -1
  493. package/dist/components/features/home/featured-automations/automation-run-health.d.ts +5 -3
  494. package/dist/components/features/home/featured-automations/automation-run-health.js +30 -23
  495. package/dist/components/features/home/featured-automations/automation-run-health.js.map +1 -1
  496. package/dist/components/features/home/featured-automations/build-home-automation-menu-items.d.ts +1 -2
  497. package/dist/components/features/home/featured-automations/build-pinned-automation-menu-items.d.ts +0 -1
  498. package/dist/components/features/home/featured-automations/home-automation-activity.d.ts +3 -2
  499. package/dist/components/features/home/featured-automations/home-automation-run-tooltip.cjs +1 -1
  500. package/dist/components/features/home/featured-automations/home-automation-run-tooltip.cjs.map +1 -1
  501. package/dist/components/features/home/featured-automations/home-automation-run-tooltip.d.ts +1 -1
  502. package/dist/components/features/home/featured-automations/home-automation-run-tooltip.js +42 -42
  503. package/dist/components/features/home/featured-automations/home-automation-run-tooltip.js.map +1 -1
  504. package/dist/components/features/images/image-lightbox.cjs +2 -0
  505. package/dist/components/features/images/image-lightbox.cjs.map +1 -0
  506. package/dist/components/features/images/image-lightbox.d.ts +11 -0
  507. package/dist/components/features/images/image-lightbox.js +37 -0
  508. package/dist/components/features/images/image-lightbox.js.map +1 -0
  509. package/dist/components/features/images/image-preview.cjs +1 -1
  510. package/dist/components/features/images/image-preview.cjs.map +1 -1
  511. package/dist/components/features/images/image-preview.d.ts +2 -1
  512. package/dist/components/features/images/image-preview.js +33 -13
  513. package/dist/components/features/images/image-preview.js.map +1 -1
  514. package/dist/components/features/manifest/manifest-form-field.d.ts +3 -1
  515. package/dist/components/features/manifest/manifest-review-step.d.ts +3 -1
  516. package/dist/components/features/onboarding/steps/setup-llm-step.d.ts +3 -4
  517. package/dist/components/features/settings/cloud-settings-link.cjs +1 -1
  518. package/dist/components/features/settings/cloud-settings-link.cjs.map +1 -1
  519. package/dist/components/features/settings/cloud-settings-link.d.ts +3 -1
  520. package/dist/components/features/settings/cloud-settings-link.js +22 -19
  521. package/dist/components/features/settings/cloud-settings-link.js.map +1 -1
  522. package/dist/components/features/settings/integrations-settings-link.cjs +1 -1
  523. package/dist/components/features/settings/integrations-settings-link.cjs.map +1 -1
  524. package/dist/components/features/settings/integrations-settings-link.d.ts +3 -1
  525. package/dist/components/features/settings/integrations-settings-link.js +20 -17
  526. package/dist/components/features/settings/integrations-settings-link.js.map +1 -1
  527. package/dist/components/features/settings/llm-profiles/llm-settings-local-view.cjs +1 -1
  528. package/dist/components/features/settings/llm-profiles/llm-settings-local-view.js +3 -2
  529. package/dist/components/features/settings/llm-profiles/profile-row.cjs +1 -1
  530. package/dist/components/features/settings/llm-profiles/profile-row.js +1 -1
  531. package/dist/components/features/settings/llm-profiles/profiles-body.d.ts +2 -2
  532. package/dist/components/features/settings/sdk-settings/sdk-section-page.cjs +1 -1
  533. package/dist/components/features/settings/sdk-settings/sdk-section-page.cjs.map +1 -1
  534. package/dist/components/features/settings/sdk-settings/sdk-section-page.d.ts +8 -7
  535. package/dist/components/features/settings/sdk-settings/sdk-section-page.js +172 -142
  536. package/dist/components/features/settings/sdk-settings/sdk-section-page.js.map +1 -1
  537. package/dist/components/features/settings/secrets-settings/secret-form.cjs +1 -1
  538. package/dist/components/features/settings/secrets-settings/secret-form.cjs.map +1 -1
  539. package/dist/components/features/settings/secrets-settings/secret-form.js +38 -25
  540. package/dist/components/features/settings/secrets-settings/secret-form.js.map +1 -1
  541. package/dist/components/features/settings/settings-dropdown-input.cjs +1 -1
  542. package/dist/components/features/settings/settings-dropdown-input.js +6 -6
  543. package/dist/components/features/sidebar/sidebar-rail-body.cjs +1 -1
  544. package/dist/components/features/sidebar/sidebar-rail-body.cjs.map +1 -1
  545. package/dist/components/features/sidebar/sidebar-rail-body.d.ts +4 -1
  546. package/dist/components/features/sidebar/sidebar-rail-body.js +157 -139
  547. package/dist/components/features/sidebar/sidebar-rail-body.js.map +1 -1
  548. package/dist/components/features/sidebar/sidebar.cjs +1 -1
  549. package/dist/components/features/sidebar/sidebar.cjs.map +1 -1
  550. package/dist/components/features/sidebar/sidebar.js +28 -26
  551. package/dist/components/features/sidebar/sidebar.js.map +1 -1
  552. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist.cjs +1 -1
  553. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist.js +3 -3
  554. package/dist/components/features/skills/extensions-navigation.cjs +1 -1
  555. package/dist/components/features/skills/extensions-navigation.cjs.map +1 -1
  556. package/dist/components/features/skills/extensions-navigation.js +3 -3
  557. package/dist/components/features/skills/extensions-navigation.js.map +1 -1
  558. package/dist/components/providers/agent-server-ui-providers.cjs +1 -1
  559. package/dist/components/providers/agent-server-ui-providers.cjs.map +1 -1
  560. package/dist/components/providers/agent-server-ui-providers.js +33 -29
  561. package/dist/components/providers/agent-server-ui-providers.js.map +1 -1
  562. package/dist/components/shared/buttons/remove-button.cjs +1 -1
  563. package/dist/components/shared/buttons/remove-button.cjs.map +1 -1
  564. package/dist/components/shared/buttons/remove-button.d.ts +2 -1
  565. package/dist/components/shared/buttons/remove-button.js +2 -1
  566. package/dist/components/shared/buttons/remove-button.js.map +1 -1
  567. package/dist/components/shared/buttons/styled-tooltip.cjs +1 -1
  568. package/dist/components/shared/buttons/styled-tooltip.cjs.map +1 -1
  569. package/dist/components/shared/buttons/styled-tooltip.d.ts +2 -1
  570. package/dist/components/shared/buttons/styled-tooltip.js +2 -1
  571. package/dist/components/shared/buttons/styled-tooltip.js.map +1 -1
  572. package/dist/components/shared/filters/enum-filter-dropdown.cjs +1 -1
  573. package/dist/components/shared/filters/enum-filter-dropdown.cjs.map +1 -1
  574. package/dist/components/shared/filters/enum-filter-dropdown.d.ts +5 -1
  575. package/dist/components/shared/filters/enum-filter-dropdown.js +14 -14
  576. package/dist/components/shared/filters/enum-filter-dropdown.js.map +1 -1
  577. package/dist/components/shared/free-models-note.cjs +2 -0
  578. package/dist/components/shared/free-models-note.cjs.map +1 -0
  579. package/dist/components/shared/free-models-note.d.ts +3 -0
  580. package/dist/components/shared/free-models-note.js +20 -0
  581. package/dist/components/shared/free-models-note.js.map +1 -0
  582. package/dist/components/shared/modals/confirmation-modal.cjs +1 -1
  583. package/dist/components/shared/modals/confirmation-modal.cjs.map +1 -1
  584. package/dist/components/shared/modals/confirmation-modal.d.ts +2 -1
  585. package/dist/components/shared/modals/confirmation-modal.js +8 -8
  586. package/dist/components/shared/modals/confirmation-modal.js.map +1 -1
  587. package/dist/components/shared/modals/settings/model-selector.cjs +1 -1
  588. package/dist/components/shared/modals/settings/model-selector.cjs.map +1 -1
  589. package/dist/components/shared/modals/settings/model-selector.js +102 -112
  590. package/dist/components/shared/modals/settings/model-selector.js.map +1 -1
  591. package/dist/config/defaults.cjs +1 -1
  592. package/dist/config/defaults.cjs.map +1 -1
  593. package/dist/config/defaults.js +3 -3
  594. package/dist/config/defaults.js.map +1 -1
  595. package/dist/constants/acp-providers.cjs.map +1 -1
  596. package/dist/constants/acp-providers.d.ts +12 -0
  597. package/dist/constants/acp-providers.js.map +1 -1
  598. package/dist/constants/settings-nav.d.ts +8 -0
  599. package/dist/contexts/conversation-websocket-context.cjs +3 -3
  600. package/dist/contexts/conversation-websocket-context.cjs.map +1 -1
  601. package/dist/contexts/conversation-websocket-context.d.ts +5 -0
  602. package/dist/contexts/conversation-websocket-context.js +194 -198
  603. package/dist/contexts/conversation-websocket-context.js.map +1 -1
  604. package/dist/contexts/websocket-provider-wrapper.cjs +1 -1
  605. package/dist/contexts/websocket-provider-wrapper.cjs.map +1 -1
  606. package/dist/contexts/websocket-provider-wrapper.js +31 -15
  607. package/dist/contexts/websocket-provider-wrapper.js.map +1 -1
  608. package/dist/hooks/chat/record-model-switch-message.cjs +1 -1
  609. package/dist/hooks/chat/record-model-switch-message.cjs.map +1 -1
  610. package/dist/hooks/chat/record-model-switch-message.d.ts +31 -0
  611. package/dist/hooks/chat/record-model-switch-message.js +25 -12
  612. package/dist/hooks/chat/record-model-switch-message.js.map +1 -1
  613. package/dist/hooks/chat/use-plan-mode-interceptor.cjs +2 -0
  614. package/dist/hooks/chat/use-plan-mode-interceptor.cjs.map +1 -0
  615. package/dist/hooks/chat/use-plan-mode-interceptor.d.ts +16 -0
  616. package/dist/hooks/chat/use-plan-mode-interceptor.js +43 -0
  617. package/dist/hooks/chat/use-plan-mode-interceptor.js.map +1 -0
  618. package/dist/hooks/chat/use-slash-command.cjs +1 -1
  619. package/dist/hooks/chat/use-slash-command.cjs.map +1 -1
  620. package/dist/hooks/chat/use-slash-command.js +63 -62
  621. package/dist/hooks/chat/use-slash-command.js.map +1 -1
  622. package/dist/hooks/mutation/use-create-conversation.cjs +1 -1
  623. package/dist/hooks/mutation/use-create-conversation.cjs.map +1 -1
  624. package/dist/hooks/mutation/use-create-conversation.js +5 -1
  625. package/dist/hooks/mutation/use-create-conversation.js.map +1 -1
  626. package/dist/hooks/mutation/use-read-conversation-file.cjs +1 -1
  627. package/dist/hooks/mutation/use-read-conversation-file.cjs.map +1 -1
  628. package/dist/hooks/mutation/use-read-conversation-file.js +11 -4
  629. package/dist/hooks/mutation/use-read-conversation-file.js.map +1 -1
  630. package/dist/hooks/mutation/use-save-settings.cjs +1 -1
  631. package/dist/hooks/mutation/use-save-settings.js +3 -3
  632. package/dist/hooks/mutation/use-switch-llm-profile.cjs +1 -1
  633. package/dist/hooks/mutation/use-switch-llm-profile.cjs.map +1 -1
  634. package/dist/hooks/mutation/use-switch-llm-profile.js +13 -25
  635. package/dist/hooks/mutation/use-switch-llm-profile.js.map +1 -1
  636. package/dist/hooks/mutation/use-update-conversation-tags.cjs +2 -0
  637. package/dist/hooks/mutation/use-update-conversation-tags.cjs.map +1 -0
  638. package/dist/hooks/mutation/use-update-conversation-tags.d.ts +8 -0
  639. package/dist/hooks/mutation/use-update-conversation-tags.js +45 -0
  640. package/dist/hooks/mutation/use-update-conversation-tags.js.map +1 -0
  641. package/dist/hooks/query/query-keys.cjs +1 -1
  642. package/dist/hooks/query/query-keys.cjs.map +1 -1
  643. package/dist/hooks/query/query-keys.d.ts +6 -0
  644. package/dist/hooks/query/query-keys.js +2 -2
  645. package/dist/hooks/query/query-keys.js.map +1 -1
  646. package/dist/hooks/query/use-automation-sdk-version.cjs +1 -1
  647. package/dist/hooks/query/use-automation-sdk-version.cjs.map +1 -1
  648. package/dist/hooks/query/use-automation-sdk-version.d.ts +0 -1
  649. package/dist/hooks/query/use-automation-sdk-version.js +30 -55
  650. package/dist/hooks/query/use-automation-sdk-version.js.map +1 -1
  651. package/dist/hooks/query/use-conversation-skills.cjs +1 -1
  652. package/dist/hooks/query/use-conversation-skills.cjs.map +1 -1
  653. package/dist/hooks/query/use-conversation-skills.d.ts +14 -5
  654. package/dist/hooks/query/use-conversation-skills.js +20 -4
  655. package/dist/hooks/query/use-conversation-skills.js.map +1 -1
  656. package/dist/hooks/query/use-free-models.cjs +2 -0
  657. package/dist/hooks/query/use-free-models.cjs.map +1 -0
  658. package/dist/hooks/query/use-free-models.d.ts +23 -0
  659. package/dist/hooks/query/use-free-models.js +67 -0
  660. package/dist/hooks/query/use-free-models.js.map +1 -0
  661. package/dist/hooks/query/use-local-git-info.cjs.map +1 -1
  662. package/dist/hooks/query/use-local-git-info.js.map +1 -1
  663. package/dist/hooks/query/use-provider-connections.cjs +1 -1
  664. package/dist/hooks/query/use-provider-connections.cjs.map +1 -1
  665. package/dist/hooks/query/use-provider-connections.d.ts +6 -3
  666. package/dist/hooks/query/use-provider-connections.js +7 -3
  667. package/dist/hooks/query/use-provider-connections.js.map +1 -1
  668. package/dist/hooks/query/use-provider-models.cjs +1 -1
  669. package/dist/hooks/query/use-provider-models.cjs.map +1 -1
  670. package/dist/hooks/query/use-provider-models.js +34 -25
  671. package/dist/hooks/query/use-provider-models.js.map +1 -1
  672. package/dist/hooks/query/use-search-providers.cjs +1 -1
  673. package/dist/hooks/query/use-search-providers.cjs.map +1 -1
  674. package/dist/hooks/query/use-search-providers.js +31 -19
  675. package/dist/hooks/query/use-search-providers.js.map +1 -1
  676. package/dist/hooks/query/use-sub-conversations.cjs +1 -1
  677. package/dist/hooks/query/use-sub-conversations.cjs.map +1 -1
  678. package/dist/hooks/query/use-sub-conversations.js +16 -16
  679. package/dist/hooks/query/use-sub-conversations.js.map +1 -1
  680. package/dist/hooks/use-acp-model-context.cjs +1 -1
  681. package/dist/hooks/use-acp-model-context.js +3 -3
  682. package/dist/hooks/use-agent-state.cjs +1 -1
  683. package/dist/hooks/use-agent-state.cjs.map +1 -1
  684. package/dist/hooks/use-agent-state.d.ts +17 -1
  685. package/dist/hooks/use-agent-state.js +19 -9
  686. package/dist/hooks/use-agent-state.js.map +1 -1
  687. package/dist/hooks/use-automation-permissions.cjs +2 -0
  688. package/dist/hooks/use-automation-permissions.cjs.map +1 -0
  689. package/dist/hooks/use-automation-permissions.d.ts +43 -0
  690. package/dist/hooks/use-automation-permissions.js +52 -0
  691. package/dist/hooks/use-automation-permissions.js.map +1 -0
  692. package/dist/hooks/use-chat-input-model-state.cjs +1 -1
  693. package/dist/hooks/use-chat-input-model-state.js +3 -3
  694. package/dist/hooks/use-handle-plan-click.cjs +1 -1
  695. package/dist/hooks/use-handle-plan-click.cjs.map +1 -1
  696. package/dist/hooks/use-handle-plan-click.d.ts +3 -1
  697. package/dist/hooks/use-handle-plan-click.js +85 -26
  698. package/dist/hooks/use-handle-plan-click.js.map +1 -1
  699. package/dist/hooks/use-home-automation-actions.cjs +1 -1
  700. package/dist/hooks/use-home-automation-actions.cjs.map +1 -1
  701. package/dist/hooks/use-home-automation-actions.d.ts +1 -2
  702. package/dist/hooks/use-home-automation-actions.js +1 -1
  703. package/dist/hooks/use-home-automation-actions.js.map +1 -1
  704. package/dist/hooks/use-llm-configured.cjs +1 -1
  705. package/dist/hooks/use-llm-configured.js +3 -3
  706. package/dist/hooks/use-manifest-preflight.d.ts +1 -1
  707. package/dist/hooks/use-unified-websocket-status.cjs +1 -1
  708. package/dist/hooks/use-unified-websocket-status.cjs.map +1 -1
  709. package/dist/hooks/use-unified-websocket-status.d.ts +7 -0
  710. package/dist/hooks/use-unified-websocket-status.js +5 -1
  711. package/dist/hooks/use-unified-websocket-status.js.map +1 -1
  712. package/dist/i18n/declaration.cjs +1 -1
  713. package/dist/i18n/declaration.cjs.map +1 -1
  714. package/dist/i18n/declaration.d.ts +71 -14
  715. package/dist/i18n/declaration.js +1 -1
  716. package/dist/i18n/declaration.js.map +1 -1
  717. package/dist/i18n/translation.cjs +2 -2
  718. package/dist/i18n/translation.cjs.map +1 -1
  719. package/dist/i18n/translation.js +1281 -312
  720. package/dist/i18n/translation.js.map +1 -1
  721. package/dist/locales/ar/openhands.json +79 -22
  722. package/dist/locales/ca/openhands.json +79 -22
  723. package/dist/locales/de/openhands.json +79 -22
  724. package/dist/locales/en/openhands.json +79 -22
  725. package/dist/locales/es/openhands.json +79 -22
  726. package/dist/locales/fr/openhands.json +79 -22
  727. package/dist/locales/it/openhands.json +79 -22
  728. package/dist/locales/ja/openhands.json +79 -22
  729. package/dist/locales/ko-KR/openhands.json +79 -22
  730. package/dist/locales/no/openhands.json +79 -22
  731. package/dist/locales/pt/openhands.json +79 -22
  732. package/dist/locales/tr/openhands.json +79 -22
  733. package/dist/locales/uk/openhands.json +79 -22
  734. package/dist/locales/zh-CN/openhands.json +79 -22
  735. package/dist/locales/zh-TW/openhands.json +79 -22
  736. package/dist/manifests/automation-insights.cjs.map +1 -1
  737. package/dist/manifests/automation-insights.d.ts +10 -2
  738. package/dist/manifests/automation-insights.js.map +1 -1
  739. package/dist/manifests/automation-setup.cjs +1 -1
  740. package/dist/manifests/automation-setup.cjs.map +1 -1
  741. package/dist/manifests/automation-setup.d.ts +9 -16
  742. package/dist/manifests/automation-setup.js +17 -7
  743. package/dist/manifests/automation-setup.js.map +1 -1
  744. package/dist/manifests/manifest-actions.d.ts +1 -1
  745. package/dist/manifests/manifest-capabilities.d.ts +3 -1
  746. package/dist/manifests/manifest-local-validation.cjs +2 -0
  747. package/dist/manifests/manifest-local-validation.cjs.map +1 -0
  748. package/dist/manifests/manifest-local-validation.d.ts +15 -11
  749. package/dist/manifests/manifest-local-validation.js +8 -0
  750. package/dist/manifests/manifest-local-validation.js.map +1 -0
  751. package/dist/manifests/manifest-template.cjs +2 -0
  752. package/dist/manifests/manifest-template.cjs.map +1 -0
  753. package/dist/manifests/manifest-template.d.ts +4 -4
  754. package/dist/manifests/manifest-template.js +12 -0
  755. package/dist/manifests/manifest-template.js.map +1 -0
  756. package/dist/manifests/manifest-validation.cjs +1 -1
  757. package/dist/manifests/manifest-validation.cjs.map +1 -1
  758. package/dist/manifests/manifest-validation.js +106 -28
  759. package/dist/manifests/manifest-validation.js.map +1 -1
  760. package/dist/manifests/types.cjs.map +1 -1
  761. package/dist/manifests/types.d.ts +39 -4
  762. package/dist/manifests/types.js.map +1 -1
  763. package/dist/node_modules/@openhands/extensions/automations/catalog/custom-automation/manifest.cjs +8 -0
  764. package/dist/node_modules/@openhands/extensions/automations/catalog/custom-automation/manifest.cjs.map +1 -0
  765. package/dist/node_modules/@openhands/extensions/automations/catalog/custom-automation/manifest.js +221 -0
  766. package/dist/node_modules/@openhands/extensions/automations/catalog/custom-automation/manifest.js.map +1 -0
  767. package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.cjs +1 -1
  768. package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.cjs.map +1 -1
  769. package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.js +1 -1
  770. package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.js.map +1 -1
  771. package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.cjs +1 -1
  772. package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.cjs.map +1 -1
  773. package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.js +1 -1
  774. package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.js.map +1 -1
  775. package/dist/node_modules/@openhands/extensions/automations/catalog/qa-changes/manifest.cjs +1 -1
  776. package/dist/node_modules/@openhands/extensions/automations/catalog/qa-changes/manifest.cjs.map +1 -1
  777. package/dist/node_modules/@openhands/extensions/automations/catalog/qa-changes/manifest.js +1 -1
  778. package/dist/node_modules/@openhands/extensions/automations/catalog/qa-changes/manifest.js.map +1 -1
  779. package/dist/node_modules/@openhands/extensions/automations/catalog-index.cjs +1 -1
  780. package/dist/node_modules/@openhands/extensions/automations/catalog-index.cjs.map +1 -1
  781. package/dist/node_modules/@openhands/extensions/automations/catalog-index.js +22 -20
  782. package/dist/node_modules/@openhands/extensions/automations/catalog-index.js.map +1 -1
  783. package/dist/node_modules/@openhands/extensions/automations/interface.cjs +1 -1
  784. package/dist/node_modules/@openhands/extensions/automations/interface.cjs.map +1 -1
  785. package/dist/node_modules/@openhands/extensions/automations/interface.js +2 -1
  786. package/dist/node_modules/@openhands/extensions/automations/interface.js.map +1 -1
  787. package/dist/node_modules/@openhands/extensions/integrations/catalog/gitlab.cjs +1 -1
  788. package/dist/node_modules/@openhands/extensions/integrations/catalog/gitlab.cjs.map +1 -1
  789. package/dist/node_modules/@openhands/extensions/integrations/catalog/gitlab.js +24 -5
  790. package/dist/node_modules/@openhands/extensions/integrations/catalog/gitlab.js.map +1 -1
  791. package/dist/node_modules/@tanstack/react-query/build/modern/QueryClientProvider.cjs +1 -1
  792. package/dist/node_modules/@tanstack/react-query/build/modern/QueryClientProvider.js +1 -1
  793. package/dist/node_modules/lucide-react/dist/esm/icons/circle-question-mark.cjs +2 -0
  794. package/dist/node_modules/lucide-react/dist/esm/icons/circle-question-mark.cjs.map +1 -0
  795. package/dist/node_modules/lucide-react/dist/esm/icons/circle-question-mark.js +21 -0
  796. package/dist/node_modules/lucide-react/dist/esm/icons/circle-question-mark.js.map +1 -0
  797. package/dist/node_modules/lucide-react/dist/esm/icons/shrink.cjs +2 -0
  798. package/dist/node_modules/lucide-react/dist/esm/icons/shrink.cjs.map +1 -0
  799. package/dist/node_modules/lucide-react/dist/esm/icons/shrink.js +23 -0
  800. package/dist/node_modules/lucide-react/dist/esm/icons/shrink.js.map +1 -0
  801. package/dist/node_modules/lucide-react/dist/esm/icons/sliders-horizontal.cjs +2 -0
  802. package/dist/node_modules/lucide-react/dist/esm/icons/sliders-horizontal.cjs.map +1 -0
  803. package/dist/node_modules/lucide-react/dist/esm/icons/sliders-horizontal.js +43 -0
  804. package/dist/node_modules/lucide-react/dist/esm/icons/sliders-horizontal.js.map +1 -0
  805. package/dist/node_modules/lucide-react/dist/esm/icons/tags.cjs +2 -0
  806. package/dist/node_modules/lucide-react/dist/esm/icons/tags.cjs.map +1 -0
  807. package/dist/node_modules/lucide-react/dist/esm/icons/tags.js +22 -0
  808. package/dist/node_modules/lucide-react/dist/esm/icons/tags.js.map +1 -0
  809. package/dist/package.cjs +1 -1
  810. package/dist/package.cjs.map +1 -1
  811. package/dist/package.js +4 -4
  812. package/dist/package.js.map +1 -1
  813. package/dist/routes/agent-settings.d.ts +2 -0
  814. package/dist/routes/app-settings.cjs +1 -1
  815. package/dist/routes/app-settings.cjs.map +1 -1
  816. package/dist/routes/app-settings.js +53 -48
  817. package/dist/routes/app-settings.js.map +1 -1
  818. package/dist/routes/llm-settings.cjs +1 -1
  819. package/dist/routes/llm-settings.cjs.map +1 -1
  820. package/dist/routes/llm-settings.d.ts +3 -1
  821. package/dist/routes/llm-settings.js +120 -127
  822. package/dist/routes/llm-settings.js.map +1 -1
  823. package/dist/routes/planner-tab.cjs +1 -1
  824. package/dist/routes/planner-tab.cjs.map +1 -1
  825. package/dist/routes/planner-tab.js +44 -28
  826. package/dist/routes/planner-tab.js.map +1 -1
  827. package/dist/services/telemetry.cjs +1 -1
  828. package/dist/services/telemetry.cjs.map +1 -1
  829. package/dist/services/telemetry.d.ts +5 -0
  830. package/dist/services/telemetry.js +122 -115
  831. package/dist/services/telemetry.js.map +1 -1
  832. package/dist/stores/conversation-panel-preferences-store.cjs +1 -1
  833. package/dist/stores/conversation-panel-preferences-store.cjs.map +1 -1
  834. package/dist/stores/conversation-panel-preferences-store.d.ts +32 -5
  835. package/dist/stores/conversation-panel-preferences-store.js +29 -12
  836. package/dist/stores/conversation-panel-preferences-store.js.map +1 -1
  837. package/dist/stores/conversation-state-store.cjs +1 -1
  838. package/dist/stores/conversation-state-store.cjs.map +1 -1
  839. package/dist/stores/conversation-state-store.d.ts +9 -3
  840. package/dist/stores/conversation-state-store.js +6 -3
  841. package/dist/stores/conversation-state-store.js.map +1 -1
  842. package/dist/stores/conversation-store.cjs +1 -1
  843. package/dist/stores/conversation-store.cjs.map +1 -1
  844. package/dist/stores/conversation-store.d.ts +2 -0
  845. package/dist/stores/conversation-store.js +3 -0
  846. package/dist/stores/conversation-store.js.map +1 -1
  847. package/dist/stores/free-models-store.cjs +2 -0
  848. package/dist/stores/free-models-store.cjs.map +1 -0
  849. package/dist/stores/free-models-store.d.ts +30 -0
  850. package/dist/stores/free-models-store.js +22 -0
  851. package/dist/stores/free-models-store.js.map +1 -0
  852. package/dist/stores/model-store.cjs +1 -1
  853. package/dist/stores/model-store.cjs.map +1 -1
  854. package/dist/stores/model-store.d.ts +7 -0
  855. package/dist/stores/model-store.js +4 -0
  856. package/dist/stores/model-store.js.map +1 -1
  857. package/dist/types/automation.cjs.map +1 -1
  858. package/dist/types/automation.d.ts +46 -1
  859. package/dist/types/automation.js.map +1 -1
  860. package/dist/ui/context-menu.d.ts +1 -1
  861. package/dist/ui/toggle-switch.cjs +1 -1
  862. package/dist/ui/toggle-switch.cjs.map +1 -1
  863. package/dist/ui/toggle-switch.d.ts +4 -1
  864. package/dist/ui/toggle-switch.js +4 -3
  865. package/dist/ui/toggle-switch.js.map +1 -1
  866. package/dist/utils/automation-catalog.cjs +1 -1
  867. package/dist/utils/automation-catalog.cjs.map +1 -1
  868. package/dist/utils/automation-catalog.d.ts +12 -1
  869. package/dist/utils/automation-catalog.js +42 -12
  870. package/dist/utils/automation-catalog.js.map +1 -1
  871. package/dist/utils/automation-run-display.cjs +2 -0
  872. package/dist/utils/automation-run-display.cjs.map +1 -0
  873. package/dist/utils/automation-run-display.d.ts +20 -0
  874. package/dist/utils/automation-run-display.js +85 -0
  875. package/dist/utils/automation-run-display.js.map +1 -0
  876. package/dist/utils/automation-schedule.cjs +1 -1
  877. package/dist/utils/automation-schedule.cjs.map +1 -1
  878. package/dist/utils/automation-schedule.d.ts +16 -0
  879. package/dist/utils/automation-schedule.js +2 -0
  880. package/dist/utils/automation-schedule.js.map +1 -1
  881. package/dist/utils/constants.cjs +1 -1
  882. package/dist/utils/constants.cjs.map +1 -1
  883. package/dist/utils/constants.d.ts +4 -0
  884. package/dist/utils/constants.js +23 -3
  885. package/dist/utils/constants.js.map +1 -1
  886. package/dist/utils/format-event-timestamp.cjs +2 -0
  887. package/dist/utils/format-event-timestamp.cjs.map +1 -0
  888. package/dist/utils/format-event-timestamp.d.ts +1 -0
  889. package/dist/utils/format-event-timestamp.js +13 -0
  890. package/dist/utils/format-event-timestamp.js.map +1 -0
  891. package/dist/utils/format-model-name.cjs +1 -1
  892. package/dist/utils/format-model-name.cjs.map +1 -1
  893. package/dist/utils/format-model-name.d.ts +27 -6
  894. package/dist/utils/format-model-name.js +14 -6
  895. package/dist/utils/format-model-name.js.map +1 -1
  896. package/dist/utils/git-diff-stats.cjs +2 -2
  897. package/dist/utils/git-diff-stats.cjs.map +1 -1
  898. package/dist/utils/git-diff-stats.d.ts +4 -0
  899. package/dist/utils/git-diff-stats.js +12 -2
  900. package/dist/utils/git-diff-stats.js.map +1 -1
  901. package/dist/utils/plan-file.cjs +4 -0
  902. package/dist/utils/plan-file.cjs.map +1 -0
  903. package/dist/utils/plan-file.d.ts +18 -0
  904. package/dist/utils/plan-file.js +58 -0
  905. package/dist/utils/plan-file.js.map +1 -0
  906. package/dist/utils/recommended-automation-rail.cjs +1 -1
  907. package/dist/utils/recommended-automation-rail.cjs.map +1 -1
  908. package/dist/utils/recommended-automation-rail.js +1 -0
  909. package/dist/utils/recommended-automation-rail.js.map +1 -1
  910. package/dist/utils/scroll-fade-state.cjs +1 -1
  911. package/dist/utils/scroll-fade-state.cjs.map +1 -1
  912. package/dist/utils/scroll-fade-state.d.ts +6 -0
  913. package/dist/utils/scroll-fade-state.js +8 -1
  914. package/dist/utils/scroll-fade-state.js.map +1 -1
  915. package/dist/utils/sdk-settings-schema.cjs +1 -1
  916. package/dist/utils/sdk-settings-schema.cjs.map +1 -1
  917. package/dist/utils/sdk-settings-schema.d.ts +1 -0
  918. package/dist/utils/sdk-settings-schema.js +25 -22
  919. package/dist/utils/sdk-settings-schema.js.map +1 -1
  920. package/dist/utils/utils.cjs +1 -1
  921. package/dist/utils/utils.cjs.map +1 -1
  922. package/dist/utils/utils.js +11 -11
  923. package/dist/utils/utils.js.map +1 -1
  924. package/package.json +4 -4
  925. package/scripts/check-sdk-version-sync.mjs +6 -6
  926. package/scripts/dev-safe.mjs +1 -1
  927. package/scripts/dev-with-automation.mjs +1 -1
  928. package/scripts/static-server.mjs +33 -1
  929. package/build/assets/active-backend-context-CrHTlgvN.js +0 -2
  930. package/build/assets/agent-profiles-settings-Dzgb7G9z.js +0 -1
  931. package/build/assets/agent-server-conversation-service.api-tnqNjbpE.js +0 -86
  932. package/build/assets/agent-settings-DLtsqaOs.js +0 -2
  933. package/build/assets/agent-settings-fFvR-XC2.js +0 -1
  934. package/build/assets/alert-banner-HP6mX-Vr.js +0 -1
  935. package/build/assets/api-key-entry-screen-qTzrmJcr.js +0 -1
  936. package/build/assets/app-settings-dbnneVaV.js +0 -1
  937. package/build/assets/automation-detail-BmwlCUAB.js +0 -3
  938. package/build/assets/automation-git-sync-CprN5DcU.js +0 -1
  939. package/build/assets/automation-setup-route-C40kXjMY.js +0 -1
  940. package/build/assets/automations-list-DuNcRawl.js +0 -1
  941. package/build/assets/backend-form-modal-lhGwzXFI.js +0 -1
  942. package/build/assets/backend-synced-settings-badge-DPkz30BE.js +0 -1
  943. package/build/assets/badge-BU3S0VtE.js +0 -1
  944. package/build/assets/bot-dMYHVfYM.js +0 -1
  945. package/build/assets/browser-DSAo0tz1.js +0 -46
  946. package/build/assets/browser-tab-C9vy56R5.js +0 -1
  947. package/build/assets/canvas-extension-page-dx1gFrfW.js +0 -1
  948. package/build/assets/canvas-extensions-8A-XhpgP.js +0 -1
  949. package/build/assets/check-CS0vmpQQ.js +0 -1
  950. package/build/assets/chevron-down-e1QBpjVy.js +0 -1
  951. package/build/assets/chevron-right-ZG4R5G4Q.js +0 -1
  952. package/build/assets/circle-check-DzWLNsbE.js +0 -1
  953. package/build/assets/circle-plus-check-toggle-BO_kFZt3.js +0 -1
  954. package/build/assets/command-menu--UIlGL72.js +0 -1
  955. package/build/assets/commits-tab-AnZwLvh-.js +0 -1
  956. package/build/assets/confirmation-modal-Dv1ktp8K.js +0 -1
  957. package/build/assets/conversation-BbGrAO4Z.js +0 -93
  958. package/build/assets/conversation-mYT6NAoj.js +0 -1
  959. package/build/assets/conversation-panel-mYT6NAoj.js +0 -1
  960. package/build/assets/conversation-state-store-B0ImPLHO.js +0 -1
  961. package/build/assets/conversation-store-Ca3ghXap.js +0 -6
  962. package/build/assets/copy-to-clipboard-button-Ca8iSkkA.js +0 -1
  963. package/build/assets/device-verify-Bhn2e_Ye.js +0 -1
  964. package/build/assets/edit-automation-modal-DadGbJ2u.js +0 -1
  965. package/build/assets/empty-state-BoGVDecT.js +0 -1
  966. package/build/assets/enum-filter-dropdown-Bgca129f.js +0 -1
  967. package/build/assets/environment-switch-overlay-BmBRT7gv.js +0 -1
  968. package/build/assets/error-state-Body8Ngd.js +0 -1
  969. package/build/assets/extensions-hub-CcDqq_vR.js +0 -1
  970. package/build/assets/extensions-navigation-Cr4yzYk4.js +0 -1
  971. package/build/assets/external-link-DKUlnCQV.js +0 -1
  972. package/build/assets/files-tab-D4o2VyE_.js +0 -1
  973. package/build/assets/format-model-name-CasAP3nd.js +0 -1
  974. package/build/assets/get-git-path-ChKDVHZp.js +0 -1
  975. package/build/assets/git-repo-dropdown-4ROKl2cB.js +0 -1
  976. package/build/assets/git-repo-dropdown-BkqzkMmM.js +0 -1
  977. package/build/assets/highlighted-source-view-BFRxGT_Q.js +0 -1
  978. package/build/assets/home-ChpSuepX.js +0 -1
  979. package/build/assets/home-DIsB440S.js +0 -1
  980. package/build/assets/home-automation-run-tooltip-BVNDWjAH.js +0 -1
  981. package/build/assets/home-store-CY9Ej0ux.js +0 -1
  982. package/build/assets/index-home-BdlrFIif.js +0 -1
  983. package/build/assets/info-B6RQawoW.js +0 -1
  984. package/build/assets/install-server-modal-Dpy89p4g.js +0 -1
  985. package/build/assets/kebab-menu-item-content-D8hSNGmm.js +0 -1
  986. package/build/assets/launch-IrTDEFCs.js +0 -1
  987. package/build/assets/list-filter-DsEK7NFC.js +0 -1
  988. package/build/assets/llm-not-configured-banner-CIFABh3K.js +0 -27
  989. package/build/assets/llm-settings-B9juXhIa.js +0 -1
  990. package/build/assets/llm-settings-De1d5dfr.js +0 -1
  991. package/build/assets/llm-subscription-service-BpJ0ouQo.js +0 -1
  992. package/build/assets/loader-circle-CC1au6hc.js +0 -1
  993. package/build/assets/manage-backends-modal-BrPV3oB-.js +0 -1
  994. package/build/assets/manifest-80fb1c29.js +0 -1
  995. package/build/assets/manifest-subpage-layout-CAOYzrYp.js +0 -1
  996. package/build/assets/markdown-renderer-BzTlxI8x.js +0 -8
  997. package/build/assets/mcp-BTs_SXfZ.js +0 -1
  998. package/build/assets/mcp-page-BEBYqH_K.js +0 -9
  999. package/build/assets/messages-DKV9cRc2.js +0 -41
  1000. package/build/assets/modal-close-button-DDzdRvCs.js +0 -1
  1001. package/build/assets/onboarding-DV_OXoeP.js +0 -1
  1002. package/build/assets/onboarding-modal-rkyBYkeQ.js +0 -1
  1003. package/build/assets/organization-service.api-DrYNkEN_.js +0 -1
  1004. package/build/assets/pencil-47jAZH_V.js +0 -1
  1005. package/build/assets/pin-By41Vl5J.js +0 -1
  1006. package/build/assets/planner-tab-C9uZmhme.js +0 -1
  1007. package/build/assets/plug-CG5HFcNG.js +0 -1
  1008. package/build/assets/plugins-management-service-BMJgC3Ga.js +0 -1
  1009. package/build/assets/plus-C7Slq-0I.js +0 -1
  1010. package/build/assets/profiles-service.api-ChoKrL0l.js +0 -1
  1011. package/build/assets/providers-BhMcY5nv.js +0 -1
  1012. package/build/assets/proxy-9Fe1v5na.js +0 -1
  1013. package/build/assets/recommended-automations-launcher-6ABrI9Cy.js +0 -1
  1014. package/build/assets/refresh-cw-3q3Frrii.js +0 -1
  1015. package/build/assets/root-Dc8YmC9F.js +0 -2
  1016. package/build/assets/root-VDaypvK4.css +0 -1
  1017. package/build/assets/root-layout-CXkhSPYh.js +0 -2
  1018. package/build/assets/schema-field-D-y9-LDb.js +0 -1
  1019. package/build/assets/scroll-fade-state-Dw-i4SGq.js +0 -1
  1020. package/build/assets/sdk-section-page-BlFiizlG.js +0 -1
  1021. package/build/assets/secret-form-BB7the8W.js +0 -1
  1022. package/build/assets/secrets-service-ByZVENbp.js +0 -1
  1023. package/build/assets/secrets-settings-B_GpxKW2.js +0 -1
  1024. package/build/assets/settings-C0EWuBtA.js +0 -1
  1025. package/build/assets/settings-dropdown-input-BcwylHs2.js +0 -1
  1026. package/build/assets/settings-index-5w5UW2K3.js +0 -1
  1027. package/build/assets/settings-input-Db-1g8Ql.js +0 -1
  1028. package/build/assets/settings-modal-DfJ3tcJQ.js +0 -1
  1029. package/build/assets/settings-service.api-DJ1r62Zr.js +0 -1
  1030. package/build/assets/settings-switch-CS-dJDmA.js +0 -1
  1031. package/build/assets/shared-conversation-CA5ISEDy.js +0 -1
  1032. package/build/assets/shield-check-D2aCRd16.js +0 -1
  1033. package/build/assets/sidebar-mobile-menu-toggle-C_fb0Jki.js +0 -1
  1034. package/build/assets/sidebar-store-DGqHkVLw.js +0 -1
  1035. package/build/assets/skill-card-pill-row-B27-xyig.js +0 -1
  1036. package/build/assets/skill-scope-B42H-XOc.js +0 -1
  1037. package/build/assets/skills-plugins-tgF8EiXC.js +0 -1
  1038. package/build/assets/skills-settings-BgJ9PaOe.js +0 -1
  1039. package/build/assets/styled-tooltip-C4jf5Fv9.js +0 -1
  1040. package/build/assets/task-list-tab-C5zcaktH.js +0 -1
  1041. package/build/assets/toggle-switch-ChOLXv2n.js +0 -1
  1042. package/build/assets/trash-2-D7K26eDO.js +0 -1
  1043. package/build/assets/trash-D-HYiVYM.js +0 -1
  1044. package/build/assets/triangle-alert-CtdXWHUI.js +0 -1
  1045. package/build/assets/usage-tab-CVDffLPt.js +0 -1
  1046. package/build/assets/use-acp-credential-form-XIQmpX6M.js +0 -1
  1047. package/build/assets/use-activate-agent-profile-BLfmvDiG.js +0 -1
  1048. package/build/assets/use-agent-profiles-Bd9Bvvp1.js +0 -1
  1049. package/build/assets/use-canvas-extensions-Bi693ujJ.js +0 -1
  1050. package/build/assets/use-config-A9QovgXO.js +0 -1
  1051. package/build/assets/use-create-conversation-Dx3l7mFZ.js +0 -1
  1052. package/build/assets/use-create-secret-B9cUFWRG.js +0 -1
  1053. package/build/assets/use-has-permission-B3C8rQmR.js +0 -1
  1054. package/build/assets/use-is-authed-nTBcM7dE.js +0 -1
  1055. package/build/assets/use-llm-configured-BV9nZ1_j.js +0 -1
  1056. package/build/assets/use-llm-profiles-BO-P4Oyo.js +0 -1
  1057. package/build/assets/use-manifest-capabilities-Cw_flwEz.js +0 -1
  1058. package/build/assets/use-onboarding-completion-D8U7k4Qb.js +0 -1
  1059. package/build/assets/use-pinned-home-route-CckOZrmb.js +0 -1
  1060. package/build/assets/use-plugins-marketplace-7i94Zu3Z.js +0 -1
  1061. package/build/assets/use-save-agent-profile-BUjSsDXK.js +0 -1
  1062. package/build/assets/use-settings-DSXLbvBl.js +0 -1
  1063. package/build/assets/use-settings-nav-items-CwRw-CmX.js +0 -16
  1064. package/build/assets/use-tracking-D53y3TH9.js +0 -3
  1065. package/build/assets/useQueries-DlbhlH9I.js +0 -1
  1066. package/build/assets/useQuery-BSTgq1rl.js +0 -1
  1067. package/build/assets/utils-CN5ZfZy1.js +0 -1
  1068. package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~czjee3a3-DqZDXfg2.js +0 -186
  1069. package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~ew9ih1s8-rfV8mQ9m.js +0 -1
  1070. package/build/assets/vendor~root-layout-C9Ju9DQg.js +0 -1
  1071. package/build/assets/vendor~root-layout~conversation-panel~conversation~skills-settings~automations-list~shared-~bovqqk8e-BWir3rJs.js +0 -1
  1072. package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~mcp~automations-list~aut~ibfbmr9f-cDuKr-WD.js +0 -1
  1073. package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~iyia17eu-Chf7vmKB.js +0 -1
  1074. package/build/assets/x-DJdhbdmt.js +0 -1
  1075. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.cjs +0 -2
  1076. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.cjs.map +0 -1
  1077. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.d.ts +0 -35
  1078. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.js +0 -247
  1079. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.js.map +0 -1
  1080. package/dist/hooks/query/use-skills.cjs +0 -2
  1081. package/dist/hooks/query/use-skills.cjs.map +0 -1
  1082. package/dist/hooks/query/use-skills.d.ts +0 -7
  1083. package/dist/hooks/query/use-skills.js +0 -13
  1084. package/dist/hooks/query/use-skills.js.map +0 -1
  1085. package/dist/hooks/use-has-permission.cjs +0 -2
  1086. package/dist/hooks/use-has-permission.cjs.map +0 -1
  1087. package/dist/hooks/use-has-permission.d.ts +0 -1
  1088. package/dist/hooks/use-has-permission.js +0 -8
  1089. package/dist/hooks/use-has-permission.js.map +0 -1
  1090. package/dist/node_modules/lucide-react/dist/esm/icons/eye.cjs +0 -2
  1091. package/dist/node_modules/lucide-react/dist/esm/icons/eye.cjs.map +0 -1
  1092. package/dist/node_modules/lucide-react/dist/esm/icons/eye.js +0 -14
  1093. package/dist/node_modules/lucide-react/dist/esm/icons/eye.js.map +0 -1
@@ -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("../../../../utils/utils.cjs"),i=require("../../../../node_modules/@tanstack/react-query/build/modern/QueryClientProvider.cjs"),a=require("../../../../utils/form-control-classes.cjs"),o=require("../brand-button.cjs"),s=require("../../../../hooks/mutation/use-create-secret.cjs"),c=require("../optional-tag.cjs"),l=require("../settings-input.cjs"),u=require("../../../../hooks/query/use-get-secrets.cjs"),d=require("../../../../hooks/mutation/use-update-secret.cjs");let f=require("react");f=e.__toESM(f,1);let p=require("react/jsx-runtime");function m({mode:e,selectedSecret:m,onCancel:h}){let g=i.useQueryClient(),{t:_}=t.useTranslation(`openhands`),{data:v}=u.useSearchSecrets(),{mutate:y}=s.useCreateSecret(),{mutate:b}=d.useUpdateSecret(),[x,S]=f.default.useState(null),C=e===`edit`&&m&&v?.find(e=>e.name===m)?.description?.trim()||``,w=()=>{g.invalidateQueries({queryKey:[`secrets-search`]}),g.invalidateQueries({queryKey:[`secrets`]})},T=(e,t,n)=>{y({name:e,value:t,description:n},{onSettled:h,onSuccess:w})},E=(e,t,n,r)=>{b({secretToEdit:e,name:t,description:n,value:r},{onSettled:h,onSuccess:w})};return(0,p.jsxs)(`form`,{"data-testid":e===`add`?`add-secret-form`:`edit-secret-form`,onSubmit:t=>{t.preventDefault();let r=new FormData(t.currentTarget),i=r.get(`secret-name`)?.toString(),a=r.get(`secret-value`)?.toString().trim(),o=r.get(`secret-description`)?.toString();if(i){if(S(null),v?.some(e=>e.name===i&&e.name!==m)){S(_(n.I18nKey.SECRETS$SECRET_ALREADY_EXISTS));return}if(e===`add`){if(!a){S(_(n.I18nKey.SECRETS$SECRET_VALUE_REQUIRED));return}T(i,a,o||void 0)}else e===`edit`&&m&&E(m,i,o||void 0,a||void 0)}},className:`flex flex-col items-start gap-6`,children:[(0,p.jsx)(l.SettingsInput,{testId:`name-input`,name:`secret-name`,type:`text`,label:_(n.I18nKey.SETTINGS$NAME),className:`w-full min-w-0`,required:!0,defaultValue:e===`edit`&&m?m:``,placeholder:_(n.I18nKey.SECRETS$API_KEY_EXAMPLE),pattern:`^[a-zA-Z][a-zA-Z0-9_]{0,63}$`,title:_(n.I18nKey.SETTINGS$SECRET_NAME_PATTERN_TITLE)}),x&&(0,p.jsx)(`p`,{className:`text-red-500 text-sm`,children:x}),(0,p.jsxs)(`label`,{className:`flex flex-col gap-2.5 w-full min-w-0`,children:[(0,p.jsx)(`span`,{className:`text-sm`,children:_(e===`add`?n.I18nKey.FORM$VALUE:n.I18nKey.SECRETS$SECRET_VALUE_LEAVE_BLANK)}),(0,p.jsx)(`textarea`,{"data-testid":`value-input`,name:`secret-value`,required:e===`add`,className:r.cn(`resize-none`,a.formControlMultilineFieldClassName,`placeholder:italic`,`disabled:bg-[var(--oh-surface-raised)] disabled:border-[var(--oh-border-subtle)] disabled:cursor-not-allowed`),rows:8})]}),(0,p.jsxs)(`label`,{className:`flex flex-col gap-2.5 w-full min-w-0`,children:[(0,p.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,p.jsx)(`span`,{className:`text-sm`,children:_(n.I18nKey.FORM$DESCRIPTION)}),(0,p.jsx)(c.OptionalTag,{})]}),(0,p.jsx)(`input`,{"data-testid":`description-input`,name:`secret-description`,defaultValue:C,className:r.cn(a.formControlSettingsFieldClassName,`disabled:bg-[var(--oh-surface-raised)] disabled:border-[var(--oh-border-subtle)]`)})]}),(0,p.jsxs)(`div`,{className:`flex items-center gap-4`,children:[(0,p.jsx)(o.BrandButton,{testId:`cancel-button`,type:`button`,variant:`secondary`,onClick:h,children:_(n.I18nKey.BUTTON$CANCEL)}),(0,p.jsxs)(o.BrandButton,{testId:`submit-button`,type:`submit`,variant:`primary`,children:[e===`add`&&_(n.I18nKey.SECRETS$ADD_SECRET),e===`edit`&&_(n.I18nKey.SECRETS$EDIT_SECRET)]})]})]})}exports.SecretForm=m;
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("../../../../utils/utils.cjs"),i=require("../../../../node_modules/@tanstack/react-query/build/modern/QueryClientProvider.cjs"),a=require("../../../../utils/form-control-classes.cjs"),o=require("../brand-button.cjs"),s=require("../../../../hooks/mutation/use-create-secret.cjs"),c=require("../optional-tag.cjs"),l=require("../settings-input.cjs"),u=require("../../../../hooks/query/use-get-secrets.cjs"),d=require("../../../../hooks/mutation/use-update-secret.cjs");let f=require("react");f=e.__toESM(f,1);let p=require("react/jsx-runtime");function m({mode:e,selectedSecret:m,onCancel:h}){let g=i.useQueryClient(),{t:_}=t.useTranslation(`openhands`),{data:v}=u.useSearchSecrets(),{mutate:y}=s.useCreateSecret(),{mutate:b}=d.useUpdateSecret(),[x,S]=f.default.useState(null),[C,w]=f.default.useState(e===`edit`&&m?m:``),[T,E]=f.default.useState(``),[D,O]=f.default.useState(``),k=e===`edit`&&m&&v?.find(e=>e.name===m)?.description?.trim()||``,A=e===`edit`&&m?m:``;f.default.useEffect(()=>{w(e===`edit`&&m?m:``),E(``),O(k),S(null)},[e,m,k]);let j=()=>{g.invalidateQueries({queryKey:[`secrets-search`]}),g.invalidateQueries({queryKey:[`secrets`]})},M=(e,t,n)=>{y({name:e,value:t,description:n},{onSettled:h,onSuccess:j})},N=(e,t,n,r)=>{b({secretToEdit:e,name:t,description:n,value:r},{onSettled:h,onSuccess:j})},P=t=>{t.preventDefault();let r=C.trim(),i=T.trim(),a=D||void 0;if(r){if(S(null),v?.some(e=>e.name===r&&e.name!==m)){S(_(n.I18nKey.SECRETS$SECRET_ALREADY_EXISTS));return}if(e===`add`){if(!i){S(_(n.I18nKey.SECRETS$SECRET_VALUE_REQUIRED));return}M(r,i,a)}else e===`edit`&&m&&N(m,r,a,i||void 0)}},F=e===`add`?`add-secret-form`:`edit-secret-form`,I=e===`edit`&&(C.trim()!==A.trim()||D!==k||T.trim()!==``),L=e===`add`?!C.trim()||!T.trim():e===`edit`?!I:!1;return(0,p.jsxs)(`form`,{"data-testid":F,onSubmit:P,className:`flex flex-col items-start gap-6`,children:[(0,p.jsx)(l.SettingsInput,{testId:`name-input`,name:`secret-name`,type:`text`,label:_(n.I18nKey.SETTINGS$NAME),className:`w-full min-w-0`,required:!0,value:C,onChange:w,placeholder:_(n.I18nKey.SECRETS$API_KEY_EXAMPLE),pattern:`^[a-zA-Z][a-zA-Z0-9_]{0,63}$`,title:_(n.I18nKey.SETTINGS$SECRET_NAME_PATTERN_TITLE)}),x&&(0,p.jsx)(`p`,{className:`text-red-500 text-sm`,children:x}),(0,p.jsxs)(`label`,{className:`flex flex-col gap-2.5 w-full min-w-0`,children:[(0,p.jsx)(`span`,{className:`text-sm`,children:_(e===`add`?n.I18nKey.FORM$VALUE:n.I18nKey.SECRETS$SECRET_VALUE_LEAVE_BLANK)}),(0,p.jsx)(`textarea`,{"data-testid":`value-input`,name:`secret-value`,required:e===`add`,value:T,onChange:e=>E(e.currentTarget.value),className:r.cn(`resize-none`,a.formControlMultilineFieldClassName,`placeholder:italic`,`disabled:bg-[var(--oh-surface-raised)] disabled:border-[var(--oh-border-subtle)] disabled:cursor-not-allowed`),rows:8})]}),(0,p.jsxs)(`label`,{className:`flex flex-col gap-2.5 w-full min-w-0`,children:[(0,p.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,p.jsx)(`span`,{className:`text-sm`,children:_(n.I18nKey.FORM$DESCRIPTION)}),(0,p.jsx)(c.OptionalTag,{})]}),(0,p.jsx)(`input`,{"data-testid":`description-input`,name:`secret-description`,value:D,onChange:e=>O(e.currentTarget.value),className:r.cn(a.formControlSettingsFieldClassName,`disabled:bg-[var(--oh-surface-raised)] disabled:border-[var(--oh-border-subtle)]`)})]}),(0,p.jsxs)(`div`,{className:`flex items-center gap-4`,children:[(0,p.jsx)(o.BrandButton,{testId:`cancel-button`,type:`button`,variant:`secondary`,onClick:h,children:_(n.I18nKey.BUTTON$CANCEL)}),(0,p.jsxs)(o.BrandButton,{testId:`submit-button`,type:`submit`,variant:`primary`,isDisabled:L,children:[e===`add`&&_(n.I18nKey.SECRETS$ADD_SECRET),e===`edit`&&_(n.I18nKey.SECRETS$EDIT_SECRET)]})]})]})}exports.SecretForm=m;
2
2
  //# sourceMappingURL=secret-form.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"secret-form.cjs","names":[],"sources":["../../../../../src/components/features/settings/secrets-settings/secret-form.tsx"],"sourcesContent":["import { useQueryClient } from \"@tanstack/react-query\";\nimport React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { useCreateSecret } from \"#/hooks/mutation/use-create-secret\";\nimport { useUpdateSecret } from \"#/hooks/mutation/use-update-secret\";\nimport { SettingsInput } from \"../settings-input\";\nimport { cn } from \"#/utils/utils\";\nimport {\n formControlMultilineFieldClassName,\n formControlSettingsFieldClassName,\n} from \"#/utils/form-control-classes\";\nimport { BrandButton } from \"../brand-button\";\nimport { useSearchSecrets } from \"#/hooks/query/use-get-secrets\";\nimport { OptionalTag } from \"../optional-tag\";\n\ninterface SecretFormProps {\n mode: \"add\" | \"edit\";\n selectedSecret: string | null;\n onCancel: () => void;\n}\n\nexport function SecretForm({\n mode,\n selectedSecret,\n onCancel,\n}: SecretFormProps) {\n const queryClient = useQueryClient();\n const { t } = useTranslation(\"openhands\");\n\n const { data: secrets } = useSearchSecrets();\n const { mutate: createSecret } = useCreateSecret();\n const { mutate: updateSecret } = useUpdateSecret();\n\n const [error, setError] = React.useState<string | null>(null);\n\n const secretDescription =\n (mode === \"edit\" &&\n selectedSecret &&\n secrets\n ?.find((secret) => secret.name === selectedSecret)\n ?.description?.trim()) ||\n \"\";\n\n const invalidateSecrets = () => {\n queryClient.invalidateQueries({\n queryKey: [\"secrets-search\"],\n });\n queryClient.invalidateQueries({\n queryKey: [\"secrets\"],\n });\n };\n\n const handleCreateSecret = (\n name: string,\n value: string,\n description?: string,\n ) => {\n createSecret(\n { name, value, description },\n {\n onSettled: onCancel,\n onSuccess: invalidateSecrets,\n },\n );\n };\n\n const handleEditSecret = (\n secretToEdit: string,\n name: string,\n description?: string,\n value?: string,\n ) => {\n updateSecret(\n { secretToEdit, name, description, value },\n {\n onSettled: onCancel,\n onSuccess: invalidateSecrets,\n },\n );\n };\n\n const handleSubmit = (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n\n const formData = new FormData(event.currentTarget);\n const name = formData.get(\"secret-name\")?.toString();\n const value = formData.get(\"secret-value\")?.toString().trim();\n const description = formData.get(\"secret-description\")?.toString();\n\n if (name) {\n setError(null);\n\n const isNameAlreadyUsed = secrets?.some(\n (secret) => secret.name === name && secret.name !== selectedSecret,\n );\n if (isNameAlreadyUsed) {\n setError(t(I18nKey.SECRETS$SECRET_ALREADY_EXISTS));\n return;\n }\n\n if (mode === \"add\") {\n if (!value) {\n setError(t(I18nKey.SECRETS$SECRET_VALUE_REQUIRED));\n return;\n }\n\n handleCreateSecret(name, value, description || undefined);\n } else if (mode === \"edit\" && selectedSecret) {\n handleEditSecret(\n selectedSecret,\n name,\n description || undefined,\n value || undefined,\n );\n }\n }\n };\n\n const formTestId = mode === \"add\" ? \"add-secret-form\" : \"edit-secret-form\";\n\n return (\n <form\n data-testid={formTestId}\n onSubmit={handleSubmit}\n className=\"flex flex-col items-start gap-6\"\n >\n <SettingsInput\n testId=\"name-input\"\n name=\"secret-name\"\n type=\"text\"\n label={t(I18nKey.SETTINGS$NAME)}\n className=\"w-full min-w-0\"\n required\n defaultValue={mode === \"edit\" && selectedSecret ? selectedSecret : \"\"}\n placeholder={t(I18nKey.SECRETS$API_KEY_EXAMPLE)}\n pattern=\"^[a-zA-Z][a-zA-Z0-9_]{0,63}$\"\n title={t(I18nKey.SETTINGS$SECRET_NAME_PATTERN_TITLE)}\n />\n {error && <p className=\"text-red-500 text-sm\">{error}</p>}\n\n <label className=\"flex flex-col gap-2.5 w-full min-w-0\">\n <span className=\"text-sm\">\n {mode === \"add\"\n ? t(I18nKey.FORM$VALUE)\n : t(I18nKey.SECRETS$SECRET_VALUE_LEAVE_BLANK)}\n </span>\n <textarea\n data-testid=\"value-input\"\n name=\"secret-value\"\n required={mode === \"add\"}\n className={cn(\n \"resize-none\",\n formControlMultilineFieldClassName,\n \"placeholder:italic\",\n \"disabled:bg-[var(--oh-surface-raised)] disabled:border-[var(--oh-border-subtle)] disabled:cursor-not-allowed\",\n )}\n rows={8}\n />\n </label>\n\n <label className=\"flex flex-col gap-2.5 w-full min-w-0\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm\">{t(I18nKey.FORM$DESCRIPTION)}</span>\n <OptionalTag />\n </div>\n <input\n data-testid=\"description-input\"\n name=\"secret-description\"\n defaultValue={secretDescription}\n className={cn(\n formControlSettingsFieldClassName,\n \"disabled:bg-[var(--oh-surface-raised)] disabled:border-[var(--oh-border-subtle)]\",\n )}\n />\n </label>\n\n <div className=\"flex items-center gap-4\">\n <BrandButton\n testId=\"cancel-button\"\n type=\"button\"\n variant=\"secondary\"\n onClick={onCancel}\n >\n {t(I18nKey.BUTTON$CANCEL)}\n </BrandButton>\n <BrandButton testId=\"submit-button\" type=\"submit\" variant=\"primary\">\n {mode === \"add\" && t(I18nKey.SECRETS$ADD_SECRET)}\n {mode === \"edit\" && t(I18nKey.SECRETS$EDIT_SECRET)}\n </BrandButton>\n </div>\n </form>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"secret-form.cjs","names":[],"sources":["../../../../../src/components/features/settings/secrets-settings/secret-form.tsx"],"sourcesContent":["import { useQueryClient } from \"@tanstack/react-query\";\nimport React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { useCreateSecret } from \"#/hooks/mutation/use-create-secret\";\nimport { useUpdateSecret } from \"#/hooks/mutation/use-update-secret\";\nimport { SettingsInput } from \"../settings-input\";\nimport { cn } from \"#/utils/utils\";\nimport {\n formControlMultilineFieldClassName,\n formControlSettingsFieldClassName,\n} from \"#/utils/form-control-classes\";\nimport { BrandButton } from \"../brand-button\";\nimport { useSearchSecrets } from \"#/hooks/query/use-get-secrets\";\nimport { OptionalTag } from \"../optional-tag\";\n\ninterface SecretFormProps {\n mode: \"add\" | \"edit\";\n selectedSecret: string | null;\n onCancel: () => void;\n}\n\nexport function SecretForm({\n mode,\n selectedSecret,\n onCancel,\n}: SecretFormProps) {\n const queryClient = useQueryClient();\n const { t } = useTranslation(\"openhands\");\n\n const { data: secrets } = useSearchSecrets();\n const { mutate: createSecret } = useCreateSecret();\n const { mutate: updateSecret } = useUpdateSecret();\n\n const [error, setError] = React.useState<string | null>(null);\n const [name, setName] = React.useState(\n mode === \"edit\" && selectedSecret ? selectedSecret : \"\",\n );\n const [value, setValue] = React.useState(\"\");\n const [description, setDescription] = React.useState(\"\");\n\n const secretDescription =\n (mode === \"edit\" &&\n selectedSecret &&\n secrets\n ?.find((secret) => secret.name === selectedSecret)\n ?.description?.trim()) ||\n \"\";\n const initialName = mode === \"edit\" && selectedSecret ? selectedSecret : \"\";\n\n React.useEffect(() => {\n setName(mode === \"edit\" && selectedSecret ? selectedSecret : \"\");\n setValue(\"\");\n setDescription(secretDescription);\n setError(null);\n }, [mode, selectedSecret, secretDescription]);\n\n const invalidateSecrets = () => {\n queryClient.invalidateQueries({\n queryKey: [\"secrets-search\"],\n });\n queryClient.invalidateQueries({\n queryKey: [\"secrets\"],\n });\n };\n\n const handleCreateSecret = (\n name: string,\n value: string,\n description?: string,\n ) => {\n createSecret(\n { name, value, description },\n {\n onSettled: onCancel,\n onSuccess: invalidateSecrets,\n },\n );\n };\n\n const handleEditSecret = (\n secretToEdit: string,\n name: string,\n description?: string,\n value?: string,\n ) => {\n updateSecret(\n { secretToEdit, name, description, value },\n {\n onSettled: onCancel,\n onSuccess: invalidateSecrets,\n },\n );\n };\n\n const handleSubmit = (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n\n const trimmedName = name.trim();\n const trimmedValue = value.trim();\n const normalizedDescription = description || undefined;\n\n if (trimmedName) {\n setError(null);\n\n const isNameAlreadyUsed = secrets?.some(\n (secret) =>\n secret.name === trimmedName && secret.name !== selectedSecret,\n );\n if (isNameAlreadyUsed) {\n setError(t(I18nKey.SECRETS$SECRET_ALREADY_EXISTS));\n return;\n }\n\n if (mode === \"add\") {\n if (!trimmedValue) {\n setError(t(I18nKey.SECRETS$SECRET_VALUE_REQUIRED));\n return;\n }\n\n handleCreateSecret(trimmedName, trimmedValue, normalizedDescription);\n } else if (mode === \"edit\" && selectedSecret) {\n // Blank value means \"keep the existing secret\"; only send a value when\n // the user typed a replacement (#16134).\n handleEditSecret(\n selectedSecret,\n trimmedName,\n normalizedDescription,\n trimmedValue || undefined,\n );\n }\n }\n };\n\n const formTestId = mode === \"add\" ? \"add-secret-form\" : \"edit-secret-form\";\n const isEditDirty =\n mode === \"edit\" &&\n (name.trim() !== initialName.trim() ||\n description !== secretDescription ||\n value.trim() !== \"\");\n const isSubmitDisabled =\n mode === \"add\"\n ? !name.trim() || !value.trim()\n : mode === \"edit\"\n ? !isEditDirty\n : false;\n\n return (\n <form\n data-testid={formTestId}\n onSubmit={handleSubmit}\n className=\"flex flex-col items-start gap-6\"\n >\n <SettingsInput\n testId=\"name-input\"\n name=\"secret-name\"\n type=\"text\"\n label={t(I18nKey.SETTINGS$NAME)}\n className=\"w-full min-w-0\"\n required\n value={name}\n onChange={setName}\n placeholder={t(I18nKey.SECRETS$API_KEY_EXAMPLE)}\n pattern=\"^[a-zA-Z][a-zA-Z0-9_]{0,63}$\"\n title={t(I18nKey.SETTINGS$SECRET_NAME_PATTERN_TITLE)}\n />\n {error && <p className=\"text-red-500 text-sm\">{error}</p>}\n\n <label className=\"flex flex-col gap-2.5 w-full min-w-0\">\n <span className=\"text-sm\">\n {mode === \"add\"\n ? t(I18nKey.FORM$VALUE)\n : t(I18nKey.SECRETS$SECRET_VALUE_LEAVE_BLANK)}\n </span>\n <textarea\n data-testid=\"value-input\"\n name=\"secret-value\"\n required={mode === \"add\"}\n value={value}\n onChange={(event) => setValue(event.currentTarget.value)}\n className={cn(\n \"resize-none\",\n formControlMultilineFieldClassName,\n \"placeholder:italic\",\n \"disabled:bg-[var(--oh-surface-raised)] disabled:border-[var(--oh-border-subtle)] disabled:cursor-not-allowed\",\n )}\n rows={8}\n />\n </label>\n\n <label className=\"flex flex-col gap-2.5 w-full min-w-0\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm\">{t(I18nKey.FORM$DESCRIPTION)}</span>\n <OptionalTag />\n </div>\n <input\n data-testid=\"description-input\"\n name=\"secret-description\"\n value={description}\n onChange={(event) => setDescription(event.currentTarget.value)}\n className={cn(\n formControlSettingsFieldClassName,\n \"disabled:bg-[var(--oh-surface-raised)] disabled:border-[var(--oh-border-subtle)]\",\n )}\n />\n </label>\n\n <div className=\"flex items-center gap-4\">\n <BrandButton\n testId=\"cancel-button\"\n type=\"button\"\n variant=\"secondary\"\n onClick={onCancel}\n >\n {t(I18nKey.BUTTON$CANCEL)}\n </BrandButton>\n <BrandButton\n testId=\"submit-button\"\n type=\"submit\"\n variant=\"primary\"\n isDisabled={isSubmitDisabled}\n >\n {mode === \"add\" && t(I18nKey.SECRETS$ADD_SECRET)}\n {mode === \"edit\" && t(I18nKey.SECRETS$EDIT_SECRET)}\n </BrandButton>\n </div>\n </form>\n );\n}\n"],"mappings":"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"}
@@ -13,18 +13,26 @@ import f from "react";
13
13
  import { jsx as p, jsxs as m } from "react/jsx-runtime";
14
14
  //#region src/components/features/settings/secrets-settings/secret-form.tsx
15
15
  function h({ mode: h, selectedSecret: g, onCancel: _ }) {
16
- let v = r(), { t: y } = e("openhands"), { data: b } = u(), { mutate: x } = s(), { mutate: S } = d(), [C, w] = f.useState(null), T = h === "edit" && g && b?.find((e) => e.name === g)?.description?.trim() || "", E = () => {
16
+ let v = r(), { t: y } = e("openhands"), { data: b } = u(), { mutate: x } = s(), { mutate: S } = d(), [C, w] = f.useState(null), [T, E] = f.useState(h === "edit" && g ? g : ""), [D, O] = f.useState(""), [k, A] = f.useState(""), j = h === "edit" && g && b?.find((e) => e.name === g)?.description?.trim() || "", M = h === "edit" && g ? g : "";
17
+ f.useEffect(() => {
18
+ E(h === "edit" && g ? g : ""), O(""), A(j), w(null);
19
+ }, [
20
+ h,
21
+ g,
22
+ j
23
+ ]);
24
+ let N = () => {
17
25
  v.invalidateQueries({ queryKey: ["secrets-search"] }), v.invalidateQueries({ queryKey: ["secrets"] });
18
- }, D = (e, t, n) => {
26
+ }, P = (e, t, n) => {
19
27
  x({
20
28
  name: e,
21
29
  value: t,
22
30
  description: n
23
31
  }, {
24
32
  onSettled: _,
25
- onSuccess: E
33
+ onSuccess: N
26
34
  });
27
- }, O = (e, t, n, r) => {
35
+ }, F = (e, t, n, r) => {
28
36
  S({
29
37
  secretToEdit: e,
30
38
  name: t,
@@ -32,28 +40,28 @@ function h({ mode: h, selectedSecret: g, onCancel: _ }) {
32
40
  value: r
33
41
  }, {
34
42
  onSettled: _,
35
- onSuccess: E
43
+ onSuccess: N
36
44
  });
37
- };
38
- return /* @__PURE__ */ m("form", {
39
- "data-testid": h === "add" ? "add-secret-form" : "edit-secret-form",
40
- onSubmit: (e) => {
41
- e.preventDefault();
42
- let n = new FormData(e.currentTarget), r = n.get("secret-name")?.toString(), i = n.get("secret-value")?.toString().trim(), a = n.get("secret-description")?.toString();
43
- if (r) {
44
- if (w(null), b?.some((e) => e.name === r && e.name !== g)) {
45
- w(y(t.SECRETS$SECRET_ALREADY_EXISTS));
45
+ }, I = (e) => {
46
+ e.preventDefault();
47
+ let n = T.trim(), r = D.trim(), i = k || void 0;
48
+ if (n) {
49
+ if (w(null), b?.some((e) => e.name === n && e.name !== g)) {
50
+ w(y(t.SECRETS$SECRET_ALREADY_EXISTS));
51
+ return;
52
+ }
53
+ if (h === "add") {
54
+ if (!r) {
55
+ w(y(t.SECRETS$SECRET_VALUE_REQUIRED));
46
56
  return;
47
57
  }
48
- if (h === "add") {
49
- if (!i) {
50
- w(y(t.SECRETS$SECRET_VALUE_REQUIRED));
51
- return;
52
- }
53
- D(r, i, a || void 0);
54
- } else h === "edit" && g && O(g, r, a || void 0, i || void 0);
55
- }
56
- },
58
+ P(n, r, i);
59
+ } else h === "edit" && g && F(g, n, i, r || void 0);
60
+ }
61
+ }, L = h === "add" ? "add-secret-form" : "edit-secret-form", R = h === "edit" && (T.trim() !== M.trim() || k !== j || D.trim() !== ""), z = h === "add" ? !T.trim() || !D.trim() : h === "edit" ? !R : !1;
62
+ return /* @__PURE__ */ m("form", {
63
+ "data-testid": L,
64
+ onSubmit: I,
57
65
  className: "flex flex-col items-start gap-6",
58
66
  children: [
59
67
  /* @__PURE__ */ p(l, {
@@ -63,7 +71,8 @@ function h({ mode: h, selectedSecret: g, onCancel: _ }) {
63
71
  label: y(t.SETTINGS$NAME),
64
72
  className: "w-full min-w-0",
65
73
  required: !0,
66
- defaultValue: h === "edit" && g ? g : "",
74
+ value: T,
75
+ onChange: E,
67
76
  placeholder: y(t.SECRETS$API_KEY_EXAMPLE),
68
77
  pattern: "^[a-zA-Z][a-zA-Z0-9_]{0,63}$",
69
78
  title: y(t.SETTINGS$SECRET_NAME_PATTERN_TITLE)
@@ -81,6 +90,8 @@ function h({ mode: h, selectedSecret: g, onCancel: _ }) {
81
90
  "data-testid": "value-input",
82
91
  name: "secret-value",
83
92
  required: h === "add",
93
+ value: D,
94
+ onChange: (e) => O(e.currentTarget.value),
84
95
  className: n("resize-none", i, "placeholder:italic", "disabled:bg-[var(--oh-surface-raised)] disabled:border-[var(--oh-border-subtle)] disabled:cursor-not-allowed"),
85
96
  rows: 8
86
97
  })]
@@ -96,7 +107,8 @@ function h({ mode: h, selectedSecret: g, onCancel: _ }) {
96
107
  }), /* @__PURE__ */ p("input", {
97
108
  "data-testid": "description-input",
98
109
  name: "secret-description",
99
- defaultValue: T,
110
+ value: k,
111
+ onChange: (e) => A(e.currentTarget.value),
100
112
  className: n(a, "disabled:bg-[var(--oh-surface-raised)] disabled:border-[var(--oh-border-subtle)]")
101
113
  })]
102
114
  }),
@@ -112,6 +124,7 @@ function h({ mode: h, selectedSecret: g, onCancel: _ }) {
112
124
  testId: "submit-button",
113
125
  type: "submit",
114
126
  variant: "primary",
127
+ isDisabled: z,
115
128
  children: [h === "add" && y(t.SECRETS$ADD_SECRET), h === "edit" && y(t.SECRETS$EDIT_SECRET)]
116
129
  })]
117
130
  })
@@ -1 +1 @@
1
- {"version":3,"file":"secret-form.js","names":[],"sources":["../../../../../src/components/features/settings/secrets-settings/secret-form.tsx"],"sourcesContent":["import { useQueryClient } from \"@tanstack/react-query\";\nimport React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { useCreateSecret } from \"#/hooks/mutation/use-create-secret\";\nimport { useUpdateSecret } from \"#/hooks/mutation/use-update-secret\";\nimport { SettingsInput } from \"../settings-input\";\nimport { cn } from \"#/utils/utils\";\nimport {\n formControlMultilineFieldClassName,\n formControlSettingsFieldClassName,\n} from \"#/utils/form-control-classes\";\nimport { BrandButton } from \"../brand-button\";\nimport { useSearchSecrets } from \"#/hooks/query/use-get-secrets\";\nimport { OptionalTag } from \"../optional-tag\";\n\ninterface SecretFormProps {\n mode: \"add\" | \"edit\";\n selectedSecret: string | null;\n onCancel: () => void;\n}\n\nexport function SecretForm({\n mode,\n selectedSecret,\n onCancel,\n}: SecretFormProps) {\n const queryClient = useQueryClient();\n const { t } = useTranslation(\"openhands\");\n\n const { data: secrets } = useSearchSecrets();\n const { mutate: createSecret } = useCreateSecret();\n const { mutate: updateSecret } = useUpdateSecret();\n\n const [error, setError] = React.useState<string | null>(null);\n\n const secretDescription =\n (mode === \"edit\" &&\n selectedSecret &&\n secrets\n ?.find((secret) => secret.name === selectedSecret)\n ?.description?.trim()) ||\n \"\";\n\n const invalidateSecrets = () => {\n queryClient.invalidateQueries({\n queryKey: [\"secrets-search\"],\n });\n queryClient.invalidateQueries({\n queryKey: [\"secrets\"],\n });\n };\n\n const handleCreateSecret = (\n name: string,\n value: string,\n description?: string,\n ) => {\n createSecret(\n { name, value, description },\n {\n onSettled: onCancel,\n onSuccess: invalidateSecrets,\n },\n );\n };\n\n const handleEditSecret = (\n secretToEdit: string,\n name: string,\n description?: string,\n value?: string,\n ) => {\n updateSecret(\n { secretToEdit, name, description, value },\n {\n onSettled: onCancel,\n onSuccess: invalidateSecrets,\n },\n );\n };\n\n const handleSubmit = (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n\n const formData = new FormData(event.currentTarget);\n const name = formData.get(\"secret-name\")?.toString();\n const value = formData.get(\"secret-value\")?.toString().trim();\n const description = formData.get(\"secret-description\")?.toString();\n\n if (name) {\n setError(null);\n\n const isNameAlreadyUsed = secrets?.some(\n (secret) => secret.name === name && secret.name !== selectedSecret,\n );\n if (isNameAlreadyUsed) {\n setError(t(I18nKey.SECRETS$SECRET_ALREADY_EXISTS));\n return;\n }\n\n if (mode === \"add\") {\n if (!value) {\n setError(t(I18nKey.SECRETS$SECRET_VALUE_REQUIRED));\n return;\n }\n\n handleCreateSecret(name, value, description || undefined);\n } else if (mode === \"edit\" && selectedSecret) {\n handleEditSecret(\n selectedSecret,\n name,\n description || undefined,\n value || undefined,\n );\n }\n }\n };\n\n const formTestId = mode === \"add\" ? \"add-secret-form\" : \"edit-secret-form\";\n\n return (\n <form\n data-testid={formTestId}\n onSubmit={handleSubmit}\n className=\"flex flex-col items-start gap-6\"\n >\n <SettingsInput\n testId=\"name-input\"\n name=\"secret-name\"\n type=\"text\"\n label={t(I18nKey.SETTINGS$NAME)}\n className=\"w-full min-w-0\"\n required\n defaultValue={mode === \"edit\" && selectedSecret ? selectedSecret : \"\"}\n placeholder={t(I18nKey.SECRETS$API_KEY_EXAMPLE)}\n pattern=\"^[a-zA-Z][a-zA-Z0-9_]{0,63}$\"\n title={t(I18nKey.SETTINGS$SECRET_NAME_PATTERN_TITLE)}\n />\n {error && <p className=\"text-red-500 text-sm\">{error}</p>}\n\n <label className=\"flex flex-col gap-2.5 w-full min-w-0\">\n <span className=\"text-sm\">\n {mode === \"add\"\n ? t(I18nKey.FORM$VALUE)\n : t(I18nKey.SECRETS$SECRET_VALUE_LEAVE_BLANK)}\n </span>\n <textarea\n data-testid=\"value-input\"\n name=\"secret-value\"\n required={mode === \"add\"}\n className={cn(\n \"resize-none\",\n formControlMultilineFieldClassName,\n \"placeholder:italic\",\n \"disabled:bg-[var(--oh-surface-raised)] disabled:border-[var(--oh-border-subtle)] disabled:cursor-not-allowed\",\n )}\n rows={8}\n />\n </label>\n\n <label className=\"flex flex-col gap-2.5 w-full min-w-0\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm\">{t(I18nKey.FORM$DESCRIPTION)}</span>\n <OptionalTag />\n </div>\n <input\n data-testid=\"description-input\"\n name=\"secret-description\"\n defaultValue={secretDescription}\n className={cn(\n formControlSettingsFieldClassName,\n \"disabled:bg-[var(--oh-surface-raised)] disabled:border-[var(--oh-border-subtle)]\",\n )}\n />\n </label>\n\n <div className=\"flex items-center gap-4\">\n <BrandButton\n testId=\"cancel-button\"\n type=\"button\"\n variant=\"secondary\"\n onClick={onCancel}\n >\n {t(I18nKey.BUTTON$CANCEL)}\n </BrandButton>\n <BrandButton testId=\"submit-button\" type=\"submit\" variant=\"primary\">\n {mode === \"add\" && t(I18nKey.SECRETS$ADD_SECRET)}\n {mode === \"edit\" && t(I18nKey.SECRETS$EDIT_SECRET)}\n </BrandButton>\n </div>\n </form>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"secret-form.js","names":[],"sources":["../../../../../src/components/features/settings/secrets-settings/secret-form.tsx"],"sourcesContent":["import { useQueryClient } from \"@tanstack/react-query\";\nimport React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { useCreateSecret } from \"#/hooks/mutation/use-create-secret\";\nimport { useUpdateSecret } from \"#/hooks/mutation/use-update-secret\";\nimport { SettingsInput } from \"../settings-input\";\nimport { cn } from \"#/utils/utils\";\nimport {\n formControlMultilineFieldClassName,\n formControlSettingsFieldClassName,\n} from \"#/utils/form-control-classes\";\nimport { BrandButton } from \"../brand-button\";\nimport { useSearchSecrets } from \"#/hooks/query/use-get-secrets\";\nimport { OptionalTag } from \"../optional-tag\";\n\ninterface SecretFormProps {\n mode: \"add\" | \"edit\";\n selectedSecret: string | null;\n onCancel: () => void;\n}\n\nexport function SecretForm({\n mode,\n selectedSecret,\n onCancel,\n}: SecretFormProps) {\n const queryClient = useQueryClient();\n const { t } = useTranslation(\"openhands\");\n\n const { data: secrets } = useSearchSecrets();\n const { mutate: createSecret } = useCreateSecret();\n const { mutate: updateSecret } = useUpdateSecret();\n\n const [error, setError] = React.useState<string | null>(null);\n const [name, setName] = React.useState(\n mode === \"edit\" && selectedSecret ? selectedSecret : \"\",\n );\n const [value, setValue] = React.useState(\"\");\n const [description, setDescription] = React.useState(\"\");\n\n const secretDescription =\n (mode === \"edit\" &&\n selectedSecret &&\n secrets\n ?.find((secret) => secret.name === selectedSecret)\n ?.description?.trim()) ||\n \"\";\n const initialName = mode === \"edit\" && selectedSecret ? selectedSecret : \"\";\n\n React.useEffect(() => {\n setName(mode === \"edit\" && selectedSecret ? selectedSecret : \"\");\n setValue(\"\");\n setDescription(secretDescription);\n setError(null);\n }, [mode, selectedSecret, secretDescription]);\n\n const invalidateSecrets = () => {\n queryClient.invalidateQueries({\n queryKey: [\"secrets-search\"],\n });\n queryClient.invalidateQueries({\n queryKey: [\"secrets\"],\n });\n };\n\n const handleCreateSecret = (\n name: string,\n value: string,\n description?: string,\n ) => {\n createSecret(\n { name, value, description },\n {\n onSettled: onCancel,\n onSuccess: invalidateSecrets,\n },\n );\n };\n\n const handleEditSecret = (\n secretToEdit: string,\n name: string,\n description?: string,\n value?: string,\n ) => {\n updateSecret(\n { secretToEdit, name, description, value },\n {\n onSettled: onCancel,\n onSuccess: invalidateSecrets,\n },\n );\n };\n\n const handleSubmit = (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n\n const trimmedName = name.trim();\n const trimmedValue = value.trim();\n const normalizedDescription = description || undefined;\n\n if (trimmedName) {\n setError(null);\n\n const isNameAlreadyUsed = secrets?.some(\n (secret) =>\n secret.name === trimmedName && secret.name !== selectedSecret,\n );\n if (isNameAlreadyUsed) {\n setError(t(I18nKey.SECRETS$SECRET_ALREADY_EXISTS));\n return;\n }\n\n if (mode === \"add\") {\n if (!trimmedValue) {\n setError(t(I18nKey.SECRETS$SECRET_VALUE_REQUIRED));\n return;\n }\n\n handleCreateSecret(trimmedName, trimmedValue, normalizedDescription);\n } else if (mode === \"edit\" && selectedSecret) {\n // Blank value means \"keep the existing secret\"; only send a value when\n // the user typed a replacement (#16134).\n handleEditSecret(\n selectedSecret,\n trimmedName,\n normalizedDescription,\n trimmedValue || undefined,\n );\n }\n }\n };\n\n const formTestId = mode === \"add\" ? \"add-secret-form\" : \"edit-secret-form\";\n const isEditDirty =\n mode === \"edit\" &&\n (name.trim() !== initialName.trim() ||\n description !== secretDescription ||\n value.trim() !== \"\");\n const isSubmitDisabled =\n mode === \"add\"\n ? !name.trim() || !value.trim()\n : mode === \"edit\"\n ? !isEditDirty\n : false;\n\n return (\n <form\n data-testid={formTestId}\n onSubmit={handleSubmit}\n className=\"flex flex-col items-start gap-6\"\n >\n <SettingsInput\n testId=\"name-input\"\n name=\"secret-name\"\n type=\"text\"\n label={t(I18nKey.SETTINGS$NAME)}\n className=\"w-full min-w-0\"\n required\n value={name}\n onChange={setName}\n placeholder={t(I18nKey.SECRETS$API_KEY_EXAMPLE)}\n pattern=\"^[a-zA-Z][a-zA-Z0-9_]{0,63}$\"\n title={t(I18nKey.SETTINGS$SECRET_NAME_PATTERN_TITLE)}\n />\n {error && <p className=\"text-red-500 text-sm\">{error}</p>}\n\n <label className=\"flex flex-col gap-2.5 w-full min-w-0\">\n <span className=\"text-sm\">\n {mode === \"add\"\n ? t(I18nKey.FORM$VALUE)\n : t(I18nKey.SECRETS$SECRET_VALUE_LEAVE_BLANK)}\n </span>\n <textarea\n data-testid=\"value-input\"\n name=\"secret-value\"\n required={mode === \"add\"}\n value={value}\n onChange={(event) => setValue(event.currentTarget.value)}\n className={cn(\n \"resize-none\",\n formControlMultilineFieldClassName,\n \"placeholder:italic\",\n \"disabled:bg-[var(--oh-surface-raised)] disabled:border-[var(--oh-border-subtle)] disabled:cursor-not-allowed\",\n )}\n rows={8}\n />\n </label>\n\n <label className=\"flex flex-col gap-2.5 w-full min-w-0\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm\">{t(I18nKey.FORM$DESCRIPTION)}</span>\n <OptionalTag />\n </div>\n <input\n data-testid=\"description-input\"\n name=\"secret-description\"\n value={description}\n onChange={(event) => setDescription(event.currentTarget.value)}\n className={cn(\n formControlSettingsFieldClassName,\n \"disabled:bg-[var(--oh-surface-raised)] disabled:border-[var(--oh-border-subtle)]\",\n )}\n />\n </label>\n\n <div className=\"flex items-center gap-4\">\n <BrandButton\n testId=\"cancel-button\"\n type=\"button\"\n variant=\"secondary\"\n onClick={onCancel}\n >\n {t(I18nKey.BUTTON$CANCEL)}\n </BrandButton>\n <BrandButton\n testId=\"submit-button\"\n type=\"submit\"\n variant=\"primary\"\n isDisabled={isSubmitDisabled}\n >\n {mode === \"add\" && t(I18nKey.SECRETS$ADD_SECRET)}\n {mode === \"edit\" && t(I18nKey.SECRETS$EDIT_SECRET)}\n </BrandButton>\n </div>\n </form>\n );\n}\n"],"mappings":"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"}
@@ -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("../../../utils/utils.cjs"),i=require("../../../utils/form-control-classes.cjs"),a=require("../../../node_modules/@heroui/listbox/dist/chunk-BJFJ4DRR.cjs"),o=require("../../../node_modules/@heroui/autocomplete/dist/chunk-3QKDXXDY.cjs"),s=require("../../../ui/combobox-caret.cjs"),c=require("./optional-tag.cjs");let l=require("react");l=e.__toESM(l,1);let u=require("react/jsx-runtime");function d({testId:e,label:l,wrapperClassName:d,name:f,items:p,placeholder:m,showOptionalTag:h,isDisabled:g,isLoading:_,defaultSelectedKey:v,selectedKey:y,isClearable:b,allowsCustomValue:x,required:S,onSelectionChange:C,onInputChange:w,defaultFilter:T,startContent:E,inputWrapperClassName:D,inputClassName:O}){let{t:k}=t.useTranslation(`openhands`);return(0,u.jsxs)(`label`,{className:r.cn(`flex flex-col gap-2.5 w-full min-w-0`,d),children:[l&&(0,u.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,u.jsx)(`span`,{className:`text-sm`,children:l}),h&&(0,u.jsx)(c.OptionalTag,{})]}),(0,u.jsx)(o.autocomplete_default,{"aria-label":typeof l==`string`?l:f,"data-testid":e,name:f,defaultItems:p,defaultSelectedKey:v,selectedKey:y,onSelectionChange:C,onInputChange:w,isClearable:b,isDisabled:g||_,isLoading:_,placeholder:_?k(n.I18nKey.HOME$LOADING):m,allowsCustomValue:x,isRequired:S,className:`w-full`,classNames:{popoverContent:`bg-content1 rounded-xl`,selectorButton:s.heroUiAutocompleteSelectorButtonClassName},selectorButtonProps:{disableRipple:!0},inputProps:{classNames:{inputWrapper:r.cn(i.formControlSettingsFieldClassName,D),input:O}},defaultFilter:T,startContent:E||null,children:e=>(0,u.jsx)(a.listbox_item_base_default,{children:e.label},e.key)})]})}exports.SettingsDropdownInput=d;
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("../../../utils/utils.cjs"),i=require("../../../node_modules/@heroui/listbox/dist/chunk-BJFJ4DRR.cjs"),a=require("../../../node_modules/@heroui/autocomplete/dist/chunk-3QKDXXDY.cjs"),o=require("../../../utils/form-control-classes.cjs"),s=require("../../../ui/combobox-caret.cjs"),c=require("./optional-tag.cjs");let l=require("react");l=e.__toESM(l,1);let u=require("react/jsx-runtime");function d({testId:e,label:l,wrapperClassName:d,name:f,items:p,placeholder:m,showOptionalTag:h,isDisabled:g,isLoading:_,defaultSelectedKey:v,selectedKey:y,isClearable:b,allowsCustomValue:x,required:S,onSelectionChange:C,onInputChange:w,defaultFilter:T,startContent:E,inputWrapperClassName:D,inputClassName:O}){let{t:k}=t.useTranslation(`openhands`);return(0,u.jsxs)(`label`,{className:r.cn(`flex flex-col gap-2.5 w-full min-w-0`,d),children:[l&&(0,u.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,u.jsx)(`span`,{className:`text-sm`,children:l}),h&&(0,u.jsx)(c.OptionalTag,{})]}),(0,u.jsx)(a.autocomplete_default,{"aria-label":typeof l==`string`?l:f,"data-testid":e,name:f,defaultItems:p,defaultSelectedKey:v,selectedKey:y,onSelectionChange:C,onInputChange:w,isClearable:b,isDisabled:g||_,isLoading:_,placeholder:_?k(n.I18nKey.HOME$LOADING):m,allowsCustomValue:x,isRequired:S,className:`w-full`,classNames:{popoverContent:`bg-content1 rounded-xl`,selectorButton:s.heroUiAutocompleteSelectorButtonClassName},selectorButtonProps:{disableRipple:!0},inputProps:{classNames:{inputWrapper:r.cn(o.formControlSettingsFieldClassName,D),input:O}},defaultFilter:T,startContent:E||null,children:e=>(0,u.jsx)(i.listbox_item_base_default,{children:e.label},e.key)})]})}exports.SettingsDropdownInput=d;
2
2
  //# sourceMappingURL=settings-dropdown-input.cjs.map
@@ -1,9 +1,9 @@
1
1
  import { useTranslation as e } from "../../../node_modules/react-i18next/dist/es/useTranslation.js";
2
2
  import { I18nKey as t } from "../../../i18n/declaration.js";
3
3
  import { cn as n } from "../../../utils/utils.js";
4
- import { formControlSettingsFieldClassName as r } from "../../../utils/form-control-classes.js";
5
- import { listbox_item_base_default as i } from "../../../node_modules/@heroui/listbox/dist/chunk-BJFJ4DRR.js";
6
- import { autocomplete_default as a } from "../../../node_modules/@heroui/autocomplete/dist/chunk-3QKDXXDY.js";
4
+ import { listbox_item_base_default as r } from "../../../node_modules/@heroui/listbox/dist/chunk-BJFJ4DRR.js";
5
+ import { autocomplete_default as i } from "../../../node_modules/@heroui/autocomplete/dist/chunk-3QKDXXDY.js";
6
+ import { formControlSettingsFieldClassName as a } from "../../../utils/form-control-classes.js";
7
7
  import { heroUiAutocompleteSelectorButtonClassName as o } from "../../../ui/combobox-caret.js";
8
8
  import { OptionalTag as s } from "./optional-tag.js";
9
9
  import "react";
@@ -19,7 +19,7 @@ function u({ testId: u, label: d, wrapperClassName: f, name: p, items: m, placeh
19
19
  className: "text-sm",
20
20
  children: d
21
21
  }), g && /* @__PURE__ */ c(s, {})]
22
- }), /* @__PURE__ */ c(a, {
22
+ }), /* @__PURE__ */ c(i, {
23
23
  "aria-label": typeof d == "string" ? d : p,
24
24
  "data-testid": u,
25
25
  name: p,
@@ -41,12 +41,12 @@ function u({ testId: u, label: d, wrapperClassName: f, name: p, items: m, placeh
41
41
  },
42
42
  selectorButtonProps: { disableRipple: !0 },
43
43
  inputProps: { classNames: {
44
- inputWrapper: n(r, O),
44
+ inputWrapper: n(a, O),
45
45
  input: k
46
46
  } },
47
47
  defaultFilter: E,
48
48
  startContent: D || null,
49
- children: (e) => /* @__PURE__ */ c(i, { children: e.label }, e.key)
49
+ children: (e) => /* @__PURE__ */ c(r, { children: e.label }, e.key)
50
50
  })]
51
51
  });
52
52
  }
@@ -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("../../../node_modules/lucide-react/dist/esm/icons/chevron-left.cjs"),i=require("../../../node_modules/lucide-react/dist/esm/icons/chevron-right.cjs"),a=require("../../../node_modules/lucide-react/dist/esm/icons/panels-top-left.cjs"),o=require("../../../node_modules/lucide-react/dist/esm/icons/plus.cjs"),s=require("../../../node_modules/lucide-react/dist/esm/icons/server.cjs"),c=require("../../../node_modules/lucide-react/dist/esm/icons/settings.cjs"),l=require("../../../utils/utils.cjs"),u=require("../../../manifests/automation-interface.cjs"),d=require("../../shared/buttons/styled-tooltip.cjs"),f=require("../../shared/navigation-link.cjs"),p=require("./sidebar-layout.cjs"),m=require("./sidebar-collapsed-icon-slot.cjs"),h=require("./sidebar-nav-link.cjs"),g=require("../../shared/buttons/openhands-logo-button.cjs"),_=require("../../../hooks/use-pinned-home-route.cjs"),v=require("../backends/backend-status-dot.cjs"),y=require("../backends/backend-selector.cjs"),b=require("../command-menu/command-menu-trigger.cjs"),x=require("../settings/agent-canvas-version-tile.cjs"),S=require("./sidebar-conversation-list.cjs"),C=require("./sidebar-onboarding-checklist.cjs"),w=require("../../../icons/automations.cjs"),T=require("../canvas-extensions/canvas-extensions-runtime.cjs");let E=require("react");E=e.__toESM(E,1);let D=require("react/jsx-runtime");var O=18,k=34,A=Math.round(k*30/46);function j({collapsed:e,showCollapseToggle:E,showMobileCloseButton:j=!1,onCloseMobile:M,collapseToggleLabel:N,onCollapse:P,onExpand:F,showCollapsedExpandButton:I,isExtensionsActive:L,currentPath:R,activeBackendHealth:z,collapsedBackendPopoverOpen:B,setCollapsedBackendPopoverOpen:V,collapsedBackendPopoverRef:H,collapsedBackendCloseTimer:U,onOpenAddBackend:W,onOpenManageBackends:G}){let{t:K}=t.useTranslation(`openhands`),{pages:q}=T.useCanvasExtensionsRuntime(),J=U,{isPinnedRoute:Y,togglePinnedRoute:X}=_.usePinnedHomeRoute(),Z=(e,t)=>{let r=Y(e);return{pinned:r,onToggle:()=>X(e),label:K(r?n.I18nKey.SIDEBAR$UNPIN_AS_HOME:n.I18nKey.SIDEBAR$PIN_AS_HOME),testId:t}};return(0,D.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col`,children:[(0,D.jsxs)(`div`,{className:p.sidebarHeaderRowClassName(e),children:[(0,D.jsxs)(`div`,{className:l.cn(e&&E?p.SIDEBAR_COLLAPSED_LOGO_WRAPPER_CLASS:`flex min-w-0 shrink-0 items-center`),children:[(0,D.jsx)(`div`,{className:l.cn(e&&E&&`flex h-full w-full items-center justify-start pl-2.5 transition-opacity duration-150`,e&&I&&`opacity-0`),children:(0,D.jsx)(g.OpenHandsLogoButton,{logoWidth:k,logoHeight:A,logoClassName:`max-w-none`,className:l.cn(p.SIDEBAR_ICON_SLOT_CLASS,`overflow-visible`)})}),e&&E?(0,D.jsx)(`button`,{type:`button`,"data-testid":`sidebar-collapse-toggle`,"aria-pressed":e,"aria-label":N,onClick:F,className:l.cn(p.SIDEBAR_COLLAPSE_TOGGLE_OVERLAY_CLASS,I?`opacity-100 pointer-events-auto`:`opacity-0 pointer-events-none`),children:(0,D.jsx)(i.ChevronRight,{width:14,height:14})}):null]}),!e&&E?(0,D.jsx)(`button`,{type:`button`,"data-testid":`sidebar-collapse-toggle`,"aria-pressed":e,"aria-label":N,onClick:P,className:l.cn(`hidden md:inline-flex ml-auto`,p.SIDEBAR_ICON_BUTTON_CLASS,`text-[var(--oh-muted)] hover:text-white hover:bg-[var(--oh-surface-raised)]`),children:(0,D.jsx)(r.ChevronLeft,{width:14,height:14})}):null,!e&&j?(0,D.jsx)(`button`,{type:`button`,"data-testid":`sidebar-mobile-drawer-close`,onClick:M,"aria-label":K(n.I18nKey.SIDEBAR$CLOSE_MENU),className:l.cn(`inline-flex ml-auto`,p.SIDEBAR_ICON_BUTTON_CLASS,`text-[var(--oh-muted)] hover:text-white hover:bg-[var(--oh-surface-raised)]`),children:(0,D.jsx)(r.ChevronLeft,{width:14,height:14})}):null]}),(0,D.jsxs)(`nav`,{className:p.sidebarNavListClassName(e),children:[(0,D.jsx)(b.CommandMenuTrigger,{collapsed:e}),(0,D.jsx)(h.SidebarNavLink,{to:`/conversations`,end:!0,label:K(n.I18nKey.SIDEBAR$NEW_CHAT),testId:`sidebar-conversations-link`,collapsed:e,icon:(0,D.jsx)(o.Plus,{width:O,height:O})}),(0,D.jsx)(h.SidebarNavLink,{to:_.CUSTOMIZE_PATH,label:K(n.I18nKey.NAV$CUSTOMIZE),testId:`sidebar-skills-link`,collapsed:e,forceActive:L,pinAction:Z(_.CUSTOMIZE_PATH,`sidebar-pin-home-toggle-customize`),icon:(0,D.jsxs)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:O,height:O,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:[(0,D.jsx)(`path`,{d:`M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z`}),(0,D.jsx)(`path`,{d:`m7 16.5-4.74-2.85`}),(0,D.jsx)(`path`,{d:`m7 16.5 5-3`}),(0,D.jsx)(`path`,{d:`M7 16.5v5.17`}),(0,D.jsx)(`path`,{d:`M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z`}),(0,D.jsx)(`path`,{d:`m17 16.5-5-3`}),(0,D.jsx)(`path`,{d:`m17 16.5 4.74-2.85`}),(0,D.jsx)(`path`,{d:`m17 16.5v5.17`}),(0,D.jsx)(`path`,{d:`M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z`}),(0,D.jsx)(`path`,{d:`M12 8 7.26 5.15`}),(0,D.jsx)(`path`,{d:`m12 8 4.74-2.85`}),(0,D.jsx)(`path`,{d:`M12 13.5V8`})]})}),u.hasAutomationInterface()&&(0,D.jsx)(h.SidebarNavLink,{to:u.automationListPath(),label:u.getInterfaceCopy().sidebarLabel,testId:`sidebar-automations-link`,collapsed:e,icon:(0,D.jsx)(w.default,{width:O,height:O}),pinAction:Z(u.automationListPath(),`sidebar-pin-home-toggle-automations`)}),q.map(t=>(0,D.jsx)(h.SidebarNavLink,{to:t.href,label:t.contribution.nav_label||t.contribution.title,testId:`sidebar-canvas-extension-${t.extension.name}-${t.contribution.id}`,collapsed:e,icon:(0,D.jsx)(a.PanelsTopLeft,{width:O,height:O})},`${t.extension.name}:${t.contribution.id}`))]}),(0,D.jsx)(S.SidebarConversationList,{collapsed:e}),e&&E?(0,D.jsxs)(`nav`,{className:l.cn(p.sidebarNavListClassName(e),`mt-auto pb-2 cursor-pointer`),children:[(0,D.jsx)(d.StyledTooltip,{content:K(n.I18nKey.SIDEBAR$SETTINGS),placement:`right`,children:(0,D.jsxs)(f.NavigationLink,{to:`/settings`,"data-testid":`collapsed-settings-link`,"aria-label":K(n.I18nKey.SIDEBAR$SETTINGS),className:p.sidebarNavRowClassName({collapsed:!0}),children:[(0,D.jsx)(m.SidebarCollapsedIconSlot,{active:R.startsWith(`/settings`),children:(0,D.jsx)(c.Settings,{width:O,height:O})}),(0,D.jsx)(`span`,{className:p.sidebarNavLabelClassName(!0),children:K(n.I18nKey.SIDEBAR$SETTINGS)})]})}),(0,D.jsxs)(`div`,{className:`relative`,ref:H,onMouseEnter:()=>{J.current&&=(clearTimeout(J.current),null),V(!0)},onMouseLeave:()=>{J.current=setTimeout(()=>V(!1),150)},children:[(0,D.jsxs)(`button`,{type:`button`,"data-testid":`collapsed-backend-selector-link`,"aria-label":K(n.I18nKey.BACKEND$MANAGE),"aria-expanded":B,onMouseDown:e=>{e.preventDefault(),e.stopPropagation()},onMouseUp:e=>e.stopPropagation(),className:l.cn(p.sidebarNavRowClassName({collapsed:!0}),`relative`),children:[(0,D.jsx)(m.SidebarCollapsedIconSlot,{active:B,children:(0,D.jsxs)(`span`,{className:`relative inline-flex size-[18px] shrink-0 items-center justify-center`,children:[(0,D.jsx)(v.BackendStatusDot,{isConnected:z?.isConnected??null,className:`absolute -left-0.5 -top-0.5 z-[1] pointer-events-none`}),(0,D.jsx)(s.Server,{width:O,height:O})]})}),(0,D.jsx)(`span`,{className:p.sidebarNavLabelClassName(!0),children:K(n.I18nKey.BACKEND$MANAGE)})]}),B?(0,D.jsx)(`div`,{className:`absolute bottom-[-4px] left-full pl-2.5 z-40 w-[272px]`,onClick:e=>e.stopPropagation(),children:(0,D.jsx)(y.BackendSelector,{sidebarCollapsed:e,hideTrigger:!0,defaultOpen:!0,openUpward:!0,onSelectOption:()=>V(!1),onOpenAddBackend:W,onOpenManageBackends:G})}):null]})]}):null,e?null:(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(`div`,{className:`mb-2 shrink-0 pr-2.5`,children:(0,D.jsx)(C.SidebarOnboardingChecklist,{collapsed:e})}),(0,D.jsxs)(`div`,{className:l.cn(`flex flex-col items-stretch max-w-none box-border shrink-0 gap-2`,`-ml-2.5 w-[calc(100%+0.625rem)] border-t border-[var(--oh-border)] pt-2 px-2.5`),children:[(0,D.jsx)(x.AgentCanvasVersionTile,{hideWhenUpToDate:!0}),(0,D.jsx)(y.BackendSelector,{sidebarCollapsed:e,openUpward:!0})]})]})]})}exports.SidebarRailBody=j;
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("../../../node_modules/lucide-react/dist/esm/icons/chevron-left.cjs"),ee=require("../../../node_modules/lucide-react/dist/esm/icons/chevron-right.cjs"),i=require("../../../node_modules/lucide-react/dist/esm/icons/panels-top-left.cjs"),a=require("../../../node_modules/lucide-react/dist/esm/icons/plus.cjs"),te=require("../../../node_modules/lucide-react/dist/esm/icons/server.cjs"),o=require("../../../node_modules/lucide-react/dist/esm/icons/settings.cjs"),s=require("../../../utils/utils.cjs"),ne=require("../../../api/agent-server-config.cjs"),c=require("../../../manifests/automation-interface.cjs"),l=require("../../shared/buttons/styled-tooltip.cjs"),u=require("../../shared/navigation-link.cjs"),d=require("./sidebar-layout.cjs"),f=require("./sidebar-collapsed-icon-slot.cjs"),p=require("./sidebar-nav-link.cjs"),m=require("../../shared/buttons/openhands-logo-button.cjs"),h=require("../../../hooks/use-pinned-home-route.cjs"),re=require("../backends/backend-status-dot.cjs"),g=require("../backends/backend-selector.cjs"),_=require("../command-menu/command-menu-trigger.cjs"),v=require("../settings/agent-canvas-version-tile.cjs"),y=require("../../../icons/automations.cjs"),b=require("./sidebar-conversation-list.cjs"),x=require("./sidebar-onboarding-checklist.cjs"),S=require("../canvas-extensions/canvas-extensions-runtime.cjs");let C=require("react");C=e.__toESM(C,1);let w=require("react/jsx-runtime");var T=18,E=34,D=Math.round(E*30/46);function O({collapsed:e,showCollapseToggle:C,showMobileCloseButton:O=!1,onCloseMobile:k,collapseToggleLabel:A,onCollapse:j,onExpand:M,showCollapsedExpandButton:N,isExtensionsActive:P,currentPath:F,activeBackend:I,activeOrgId:L,activeBackendHealth:R,collapsedBackendPopoverOpen:z,setCollapsedBackendPopoverOpen:B,collapsedBackendPopoverRef:V,collapsedBackendCloseTimer:H,onOpenAddBackend:U,onOpenManageBackends:W}){let{t:G}=t.useTranslation(`openhands`),{pages:K}=S.useCanvasExtensionsRuntime(),q=H,{isPinnedRoute:J,togglePinnedRoute:Y}=h.usePinnedHomeRoute(),X=(e,t)=>{let r=J(e);return{pinned:r,onToggle:()=>Y(e),label:G(r?n.I18nKey.SIDEBAR$UNPIN_AS_HOME:n.I18nKey.SIDEBAR$PIN_AS_HOME),testId:t}},Z=I.kind===`cloud`,ie=L?`?org=${encodeURIComponent(L)}`:``,Q=Z?`${I.host.replace(/\/+$/,``)}/settings${ie}`:null,$=ne.getLockedCloudHost()!==null;return(0,w.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col`,children:[(0,w.jsxs)(`div`,{className:d.sidebarHeaderRowClassName(e),children:[(0,w.jsxs)(`div`,{className:s.cn(e&&C?d.SIDEBAR_COLLAPSED_LOGO_WRAPPER_CLASS:`flex min-w-0 shrink-0 items-center`),children:[(0,w.jsx)(`div`,{className:s.cn(e&&C&&`flex h-full w-full items-center justify-start pl-2.5 transition-opacity duration-150`,e&&N&&`opacity-0`),children:(0,w.jsx)(m.OpenHandsLogoButton,{logoWidth:E,logoHeight:D,logoClassName:`max-w-none`,className:s.cn(d.SIDEBAR_ICON_SLOT_CLASS,`overflow-visible`)})}),e&&C?(0,w.jsx)(`button`,{type:`button`,"data-testid":`sidebar-collapse-toggle`,"aria-pressed":e,"aria-label":A,onClick:M,className:s.cn(d.SIDEBAR_COLLAPSE_TOGGLE_OVERLAY_CLASS,N?`opacity-100 pointer-events-auto`:`opacity-0 pointer-events-none`),children:(0,w.jsx)(ee.ChevronRight,{width:14,height:14})}):null]}),!e&&C?(0,w.jsx)(`button`,{type:`button`,"data-testid":`sidebar-collapse-toggle`,"aria-pressed":e,"aria-label":A,onClick:j,className:s.cn(`hidden md:inline-flex ml-auto`,d.SIDEBAR_ICON_BUTTON_CLASS,`text-[var(--oh-muted)] hover:text-white hover:bg-[var(--oh-surface-raised)]`),children:(0,w.jsx)(r.ChevronLeft,{width:14,height:14})}):null,!e&&O?(0,w.jsx)(`button`,{type:`button`,"data-testid":`sidebar-mobile-drawer-close`,onClick:k,"aria-label":G(n.I18nKey.SIDEBAR$CLOSE_MENU),className:s.cn(`inline-flex ml-auto`,d.SIDEBAR_ICON_BUTTON_CLASS,`text-[var(--oh-muted)] hover:text-white hover:bg-[var(--oh-surface-raised)]`),children:(0,w.jsx)(r.ChevronLeft,{width:14,height:14})}):null]}),(0,w.jsxs)(`nav`,{className:d.sidebarNavListClassName(e),children:[(0,w.jsx)(_.CommandMenuTrigger,{collapsed:e}),(0,w.jsx)(p.SidebarNavLink,{to:`/conversations`,end:!0,label:G(n.I18nKey.SIDEBAR$NEW_CHAT),testId:`sidebar-conversations-link`,collapsed:e,icon:(0,w.jsx)(a.Plus,{width:T,height:T})}),(0,w.jsx)(p.SidebarNavLink,{to:h.CUSTOMIZE_PATH,label:G(n.I18nKey.NAV$CUSTOMIZE),testId:`sidebar-skills-link`,collapsed:e,forceActive:P,pinAction:X(h.CUSTOMIZE_PATH,`sidebar-pin-home-toggle-customize`),icon:(0,w.jsxs)(`svg`,{xmlns:`http://www.w3.org/2000/svg`,width:T,height:T,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:[(0,w.jsx)(`path`,{d:`M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z`}),(0,w.jsx)(`path`,{d:`m7 16.5-4.74-2.85`}),(0,w.jsx)(`path`,{d:`m7 16.5 5-3`}),(0,w.jsx)(`path`,{d:`M7 16.5v5.17`}),(0,w.jsx)(`path`,{d:`M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z`}),(0,w.jsx)(`path`,{d:`m17 16.5-5-3`}),(0,w.jsx)(`path`,{d:`m17 16.5 4.74-2.85`}),(0,w.jsx)(`path`,{d:`m17 16.5v5.17`}),(0,w.jsx)(`path`,{d:`M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z`}),(0,w.jsx)(`path`,{d:`M12 8 7.26 5.15`}),(0,w.jsx)(`path`,{d:`m12 8 4.74-2.85`}),(0,w.jsx)(`path`,{d:`M12 13.5V8`})]})}),c.hasAutomationInterface()&&(0,w.jsx)(p.SidebarNavLink,{to:c.automationListPath(),label:c.getInterfaceCopy().sidebarLabel,testId:`sidebar-automations-link`,collapsed:e,icon:(0,w.jsx)(y.default,{width:T,height:T}),pinAction:X(c.automationListPath(),`sidebar-pin-home-toggle-automations`)}),K.map(t=>(0,w.jsx)(p.SidebarNavLink,{to:t.href,label:t.contribution.nav_label||t.contribution.title,testId:`sidebar-canvas-extension-${t.extension.name}-${t.contribution.id}`,collapsed:e,icon:(0,w.jsx)(i.PanelsTopLeft,{width:T,height:T})},`${t.extension.name}:${t.contribution.id}`))]}),(0,w.jsx)(b.SidebarConversationList,{collapsed:e}),e&&C?(0,w.jsxs)(`nav`,{className:s.cn(d.sidebarNavListClassName(e),`mt-auto pb-2 cursor-pointer`),children:[(0,w.jsx)(l.StyledTooltip,{content:G(n.I18nKey.SIDEBAR$SETTINGS),placement:`right`,children:Z&&Q?(0,w.jsxs)(`a`,{href:Q,target:$?void 0:`_blank`,rel:$?void 0:`noopener noreferrer`,"data-testid":`collapsed-settings-link`,"aria-label":G(n.I18nKey.SIDEBAR$SETTINGS),className:d.sidebarNavRowClassName({collapsed:!0}),children:[(0,w.jsx)(f.SidebarCollapsedIconSlot,{active:!1,children:(0,w.jsx)(o.Settings,{width:T,height:T})}),(0,w.jsx)(`span`,{className:d.sidebarNavLabelClassName(!0),children:G(n.I18nKey.SIDEBAR$SETTINGS)})]}):(0,w.jsxs)(u.NavigationLink,{to:`/settings`,"data-testid":`collapsed-settings-link`,"aria-label":G(n.I18nKey.SIDEBAR$SETTINGS),className:d.sidebarNavRowClassName({collapsed:!0}),children:[(0,w.jsx)(f.SidebarCollapsedIconSlot,{active:F.startsWith(`/settings`),children:(0,w.jsx)(o.Settings,{width:T,height:T})}),(0,w.jsx)(`span`,{className:d.sidebarNavLabelClassName(!0),children:G(n.I18nKey.SIDEBAR$SETTINGS)})]})}),(0,w.jsxs)(`div`,{className:`relative`,ref:V,onMouseEnter:()=>{q.current&&=(clearTimeout(q.current),null),B(!0)},onMouseLeave:()=>{q.current=setTimeout(()=>B(!1),150)},children:[(0,w.jsxs)(`button`,{type:`button`,"data-testid":`collapsed-backend-selector-link`,"aria-label":G(n.I18nKey.BACKEND$MANAGE),"aria-expanded":z,onMouseDown:e=>{e.preventDefault(),e.stopPropagation()},onMouseUp:e=>e.stopPropagation(),className:s.cn(d.sidebarNavRowClassName({collapsed:!0}),`relative`),children:[(0,w.jsx)(f.SidebarCollapsedIconSlot,{active:z,children:(0,w.jsxs)(`span`,{className:`relative inline-flex size-[18px] shrink-0 items-center justify-center`,children:[(0,w.jsx)(re.BackendStatusDot,{isConnected:R?.isConnected??null,className:`absolute -left-0.5 -top-0.5 z-[1] pointer-events-none`}),(0,w.jsx)(te.Server,{width:T,height:T})]})}),(0,w.jsx)(`span`,{className:d.sidebarNavLabelClassName(!0),children:G(n.I18nKey.BACKEND$MANAGE)})]}),z?(0,w.jsx)(`div`,{className:`absolute bottom-[-4px] left-full pl-2.5 z-40 w-[272px]`,onClick:e=>e.stopPropagation(),children:(0,w.jsx)(g.BackendSelector,{sidebarCollapsed:e,hideTrigger:!0,defaultOpen:!0,openUpward:!0,onSelectOption:()=>B(!1),onOpenAddBackend:U,onOpenManageBackends:W})}):null]})]}):null,e?null:(0,w.jsxs)(w.Fragment,{children:[(0,w.jsx)(`div`,{className:`mb-2 shrink-0 pr-2.5`,children:(0,w.jsx)(x.SidebarOnboardingChecklist,{collapsed:e})}),(0,w.jsxs)(`div`,{className:s.cn(`flex flex-col items-stretch max-w-none box-border shrink-0 gap-2`,`-ml-2.5 w-[calc(100%+0.625rem)] border-t border-[var(--oh-border)] pt-2 px-2.5`),children:[(0,w.jsx)(v.AgentCanvasVersionTile,{hideWhenUpToDate:!0}),(0,w.jsx)(g.BackendSelector,{sidebarCollapsed:e,openUpward:!0})]})]})]})}exports.SidebarRailBody=O;
2
2
  //# sourceMappingURL=sidebar-rail-body.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"sidebar-rail-body.cjs","names":[],"sources":["../../../../src/components/features/sidebar/sidebar-rail-body.tsx"],"sourcesContent":["import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n ChevronLeft,\n ChevronRight,\n Plus,\n Server,\n Settings,\n PanelsTopLeft,\n} from \"lucide-react\";\nimport { OpenHandsLogoButton } from \"#/components/shared/buttons/openhands-logo-button\";\nimport { NavigationLink } from \"#/components/shared/navigation-link\";\nimport {\n automationListPath,\n getInterfaceCopy,\n hasAutomationInterface,\n} from \"#/manifests/automation-interface\";\nimport {\n CUSTOMIZE_PATH,\n usePinnedHomeRoute,\n} from \"#/hooks/use-pinned-home-route\";\nimport { SidebarCollapsedIconSlot } from \"./sidebar-collapsed-icon-slot\";\nimport { SidebarNavLink } from \"./sidebar-nav-link\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { cn } from \"#/utils/utils\";\nimport { StyledTooltip } from \"#/components/shared/buttons/styled-tooltip\";\nimport { BackendSelector } from \"#/components/features/backends/backend-selector\";\nimport { BackendStatusDot } from \"#/components/features/backends/backend-status-dot\";\nimport { CommandMenuTrigger } from \"#/components/features/command-menu/command-menu-trigger\";\nimport { AgentCanvasVersionTile } from \"#/components/features/settings/agent-canvas-version-tile\";\nimport { SidebarConversationList } from \"./sidebar-conversation-list\";\nimport { SidebarOnboardingChecklist } from \"./sidebar-onboarding-checklist\";\nimport AutomationsIcon from \"#/icons/automations.svg?react\";\nimport {\n SIDEBAR_COLLAPSE_TOGGLE_OVERLAY_CLASS,\n SIDEBAR_COLLAPSED_LOGO_WRAPPER_CLASS,\n SIDEBAR_ICON_BUTTON_CLASS,\n SIDEBAR_ICON_SLOT_CLASS,\n sidebarHeaderRowClassName,\n sidebarNavLabelClassName,\n sidebarNavListClassName,\n sidebarNavRowClassName,\n} from \"./sidebar-layout\";\nimport { useCanvasExtensionsRuntime } from \"#/components/features/canvas-extensions/canvas-extensions-runtime\";\n\nconst ICON_SIZE = 18;\nconst SIDEBAR_LOGO_WIDTH = 34;\nconst SIDEBAR_LOGO_HEIGHT = Math.round((SIDEBAR_LOGO_WIDTH * 30) / 46);\n\nexport interface SidebarRailBodyProps {\n collapsed: boolean;\n showCollapseToggle: boolean;\n showMobileCloseButton?: boolean;\n onCloseMobile?: () => void;\n collapseToggleLabel: string;\n onCollapse: () => void;\n onExpand: () => void;\n showCollapsedExpandButton: boolean;\n isExtensionsActive: boolean;\n currentPath: string;\n activeBackendHealth: { isConnected: boolean | null } | undefined;\n collapsedBackendPopoverOpen: boolean;\n setCollapsedBackendPopoverOpen: (open: boolean) => void;\n collapsedBackendPopoverRef: React.RefObject<HTMLDivElement | null>;\n collapsedBackendCloseTimer: React.MutableRefObject<ReturnType<\n typeof setTimeout\n > | null>;\n onOpenAddBackend: () => void;\n onOpenManageBackends: () => void;\n}\n\nexport function SidebarRailBody({\n collapsed,\n showCollapseToggle,\n showMobileCloseButton = false,\n onCloseMobile,\n collapseToggleLabel,\n onCollapse,\n onExpand,\n showCollapsedExpandButton,\n isExtensionsActive,\n currentPath,\n activeBackendHealth,\n collapsedBackendPopoverOpen,\n setCollapsedBackendPopoverOpen,\n collapsedBackendPopoverRef,\n collapsedBackendCloseTimer,\n onOpenAddBackend,\n onOpenManageBackends,\n}: SidebarRailBodyProps) {\n const { t } = useTranslation(\"openhands\");\n const { pages: canvasExtensionPages } = useCanvasExtensionsRuntime();\n const backendCloseTimerRef = collapsedBackendCloseTimer;\n const { isPinnedRoute, togglePinnedRoute } = usePinnedHomeRoute();\n\n const buildPinAction = (path: string, testId: string) => {\n const pinned = isPinnedRoute(path);\n return {\n pinned,\n onToggle: () => togglePinnedRoute(path),\n label: pinned\n ? t(I18nKey.SIDEBAR$UNPIN_AS_HOME)\n : t(I18nKey.SIDEBAR$PIN_AS_HOME),\n testId,\n };\n };\n\n return (\n <div className=\"flex min-h-0 flex-1 flex-col\">\n <div className={sidebarHeaderRowClassName(collapsed)}>\n <div\n className={cn(\n collapsed && showCollapseToggle\n ? SIDEBAR_COLLAPSED_LOGO_WRAPPER_CLASS\n : \"flex min-w-0 shrink-0 items-center\",\n )}\n >\n <div\n className={cn(\n collapsed &&\n showCollapseToggle &&\n \"flex h-full w-full items-center justify-start pl-2.5 transition-opacity duration-150\",\n collapsed && showCollapsedExpandButton && \"opacity-0\",\n )}\n >\n <OpenHandsLogoButton\n logoWidth={SIDEBAR_LOGO_WIDTH}\n logoHeight={SIDEBAR_LOGO_HEIGHT}\n logoClassName=\"max-w-none\"\n className={cn(SIDEBAR_ICON_SLOT_CLASS, \"overflow-visible\")}\n />\n </div>\n {collapsed && showCollapseToggle ? (\n <button\n type=\"button\"\n data-testid=\"sidebar-collapse-toggle\"\n aria-pressed={collapsed}\n aria-label={collapseToggleLabel}\n onClick={onExpand}\n className={cn(\n SIDEBAR_COLLAPSE_TOGGLE_OVERLAY_CLASS,\n showCollapsedExpandButton\n ? \"opacity-100 pointer-events-auto\"\n : \"opacity-0 pointer-events-none\",\n )}\n >\n <ChevronRight width={14} height={14} />\n </button>\n ) : null}\n </div>\n {!collapsed && showCollapseToggle ? (\n <button\n type=\"button\"\n data-testid=\"sidebar-collapse-toggle\"\n aria-pressed={collapsed}\n aria-label={collapseToggleLabel}\n onClick={onCollapse}\n className={cn(\n \"hidden md:inline-flex ml-auto\",\n SIDEBAR_ICON_BUTTON_CLASS,\n \"text-[var(--oh-muted)] hover:text-white hover:bg-[var(--oh-surface-raised)]\",\n )}\n >\n <ChevronLeft width={14} height={14} />\n </button>\n ) : null}\n {!collapsed && showMobileCloseButton ? (\n <button\n type=\"button\"\n data-testid=\"sidebar-mobile-drawer-close\"\n onClick={onCloseMobile}\n aria-label={t(I18nKey.SIDEBAR$CLOSE_MENU)}\n className={cn(\n \"inline-flex ml-auto\",\n SIDEBAR_ICON_BUTTON_CLASS,\n \"text-[var(--oh-muted)] hover:text-white hover:bg-[var(--oh-surface-raised)]\",\n )}\n >\n <ChevronLeft width={14} height={14} />\n </button>\n ) : null}\n </div>\n\n <nav className={sidebarNavListClassName(collapsed)}>\n <CommandMenuTrigger collapsed={collapsed} />\n <SidebarNavLink\n to=\"/conversations\"\n end\n label={t(I18nKey.SIDEBAR$NEW_CHAT)}\n testId=\"sidebar-conversations-link\"\n collapsed={collapsed}\n icon={<Plus width={ICON_SIZE} height={ICON_SIZE} />}\n />\n <SidebarNavLink\n to={CUSTOMIZE_PATH}\n label={t(I18nKey.NAV$CUSTOMIZE)}\n testId=\"sidebar-skills-link\"\n collapsed={collapsed}\n forceActive={isExtensionsActive}\n pinAction={buildPinAction(\n CUSTOMIZE_PATH,\n \"sidebar-pin-home-toggle-customize\",\n )}\n icon={\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={ICON_SIZE}\n height={ICON_SIZE}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z\" />\n <path d=\"m7 16.5-4.74-2.85\" />\n <path d=\"m7 16.5 5-3\" />\n <path d=\"M7 16.5v5.17\" />\n <path d=\"M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z\" />\n <path d=\"m17 16.5-5-3\" />\n <path d=\"m17 16.5 4.74-2.85\" />\n <path d=\"m17 16.5v5.17\" />\n <path d=\"M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z\" />\n <path d=\"M12 8 7.26 5.15\" />\n <path d=\"m12 8 4.74-2.85\" />\n <path d=\"M12 13.5V8\" />\n </svg>\n }\n />\n {/* The interface manifest owns this entry's label, so an absent\n manifest leaves the rail without it rather than with host copy. */}\n {hasAutomationInterface() && (\n <SidebarNavLink\n to={automationListPath()}\n label={getInterfaceCopy().sidebarLabel}\n testId=\"sidebar-automations-link\"\n collapsed={collapsed}\n icon={<AutomationsIcon width={ICON_SIZE} height={ICON_SIZE} />}\n pinAction={buildPinAction(\n automationListPath(),\n \"sidebar-pin-home-toggle-automations\",\n )}\n />\n )}\n {canvasExtensionPages.map((page) => (\n <SidebarNavLink\n key={`${page.extension.name}:${page.contribution.id}`}\n to={page.href}\n label={page.contribution.nav_label || page.contribution.title}\n testId={`sidebar-canvas-extension-${page.extension.name}-${page.contribution.id}`}\n collapsed={collapsed}\n icon={<PanelsTopLeft width={ICON_SIZE} height={ICON_SIZE} />}\n />\n ))}\n </nav>\n\n <SidebarConversationList collapsed={collapsed} />\n\n {collapsed && showCollapseToggle ? (\n <nav\n className={cn(\n sidebarNavListClassName(collapsed),\n \"mt-auto pb-2 cursor-pointer\",\n )}\n >\n <StyledTooltip\n content={t(I18nKey.SIDEBAR$SETTINGS)}\n placement=\"right\"\n >\n <NavigationLink\n to=\"/settings\"\n data-testid=\"collapsed-settings-link\"\n aria-label={t(I18nKey.SIDEBAR$SETTINGS)}\n className={sidebarNavRowClassName({ collapsed: true })}\n >\n <SidebarCollapsedIconSlot\n active={currentPath.startsWith(\"/settings\")}\n >\n <Settings width={ICON_SIZE} height={ICON_SIZE} />\n </SidebarCollapsedIconSlot>\n <span className={sidebarNavLabelClassName(true)}>\n {t(I18nKey.SIDEBAR$SETTINGS)}\n </span>\n </NavigationLink>\n </StyledTooltip>\n <div\n className=\"relative\"\n ref={collapsedBackendPopoverRef}\n onMouseEnter={() => {\n if (backendCloseTimerRef.current) {\n clearTimeout(backendCloseTimerRef.current);\n backendCloseTimerRef.current = null;\n }\n setCollapsedBackendPopoverOpen(true);\n }}\n onMouseLeave={() => {\n backendCloseTimerRef.current = setTimeout(\n () => setCollapsedBackendPopoverOpen(false),\n 150,\n );\n }}\n >\n <button\n type=\"button\"\n data-testid=\"collapsed-backend-selector-link\"\n aria-label={t(I18nKey.BACKEND$MANAGE)}\n aria-expanded={collapsedBackendPopoverOpen}\n onMouseDown={(event) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n onMouseUp={(event) => event.stopPropagation()}\n className={cn(\n sidebarNavRowClassName({ collapsed: true }),\n \"relative\",\n )}\n >\n <SidebarCollapsedIconSlot active={collapsedBackendPopoverOpen}>\n <span className=\"relative inline-flex size-[18px] shrink-0 items-center justify-center\">\n <BackendStatusDot\n isConnected={activeBackendHealth?.isConnected ?? null}\n className=\"absolute -left-0.5 -top-0.5 z-[1] pointer-events-none\"\n />\n <Server width={ICON_SIZE} height={ICON_SIZE} />\n </span>\n </SidebarCollapsedIconSlot>\n <span className={sidebarNavLabelClassName(true)}>\n {t(I18nKey.BACKEND$MANAGE)}\n </span>\n </button>\n {collapsedBackendPopoverOpen ? (\n <div\n className=\"absolute bottom-[-4px] left-full pl-2.5 z-40 w-[272px]\"\n onClick={(event) => event.stopPropagation()}\n >\n <BackendSelector\n sidebarCollapsed={collapsed}\n hideTrigger\n defaultOpen\n openUpward\n onSelectOption={() => setCollapsedBackendPopoverOpen(false)}\n onOpenAddBackend={onOpenAddBackend}\n onOpenManageBackends={onOpenManageBackends}\n />\n </div>\n ) : null}\n </div>\n </nav>\n ) : null}\n\n {!collapsed ? (\n <>\n <div className=\"mb-2 shrink-0 pr-2.5\">\n <SidebarOnboardingChecklist collapsed={collapsed} />\n </div>\n <div\n className={cn(\n \"flex flex-col items-stretch max-w-none box-border shrink-0 gap-2\",\n \"-ml-2.5 w-[calc(100%+0.625rem)] border-t border-[var(--oh-border)] pt-2 px-2.5\",\n )}\n >\n <AgentCanvasVersionTile hideWhenUpToDate />\n <BackendSelector sidebarCollapsed={collapsed} openUpward />\n </div>\n </>\n ) : null}\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"sidebar-rail-body.cjs","names":[],"sources":["../../../../src/components/features/sidebar/sidebar-rail-body.tsx"],"sourcesContent":["import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport {\n ChevronLeft,\n ChevronRight,\n Plus,\n Server,\n Settings,\n PanelsTopLeft,\n} from \"lucide-react\";\nimport { OpenHandsLogoButton } from \"#/components/shared/buttons/openhands-logo-button\";\nimport { NavigationLink } from \"#/components/shared/navigation-link\";\nimport { getLockedCloudHost } from \"#/api/agent-server-config\";\nimport {\n automationListPath,\n getInterfaceCopy,\n hasAutomationInterface,\n} from \"#/manifests/automation-interface\";\nimport {\n CUSTOMIZE_PATH,\n usePinnedHomeRoute,\n} from \"#/hooks/use-pinned-home-route\";\nimport { SidebarCollapsedIconSlot } from \"./sidebar-collapsed-icon-slot\";\nimport { SidebarNavLink } from \"./sidebar-nav-link\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport { cn } from \"#/utils/utils\";\nimport { StyledTooltip } from \"#/components/shared/buttons/styled-tooltip\";\nimport { BackendSelector } from \"#/components/features/backends/backend-selector\";\nimport { BackendStatusDot } from \"#/components/features/backends/backend-status-dot\";\nimport { CommandMenuTrigger } from \"#/components/features/command-menu/command-menu-trigger\";\nimport { AgentCanvasVersionTile } from \"#/components/features/settings/agent-canvas-version-tile\";\nimport { SidebarConversationList } from \"./sidebar-conversation-list\";\nimport { SidebarOnboardingChecklist } from \"./sidebar-onboarding-checklist\";\nimport AutomationsIcon from \"#/icons/automations.svg?react\";\nimport {\n SIDEBAR_COLLAPSE_TOGGLE_OVERLAY_CLASS,\n SIDEBAR_COLLAPSED_LOGO_WRAPPER_CLASS,\n SIDEBAR_ICON_BUTTON_CLASS,\n SIDEBAR_ICON_SLOT_CLASS,\n sidebarHeaderRowClassName,\n sidebarNavLabelClassName,\n sidebarNavListClassName,\n sidebarNavRowClassName,\n} from \"./sidebar-layout\";\nimport { useCanvasExtensionsRuntime } from \"#/components/features/canvas-extensions/canvas-extensions-runtime\";\nimport type { Backend } from \"#/api/backend-registry/types\";\n\nconst ICON_SIZE = 18;\nconst SIDEBAR_LOGO_WIDTH = 34;\nconst SIDEBAR_LOGO_HEIGHT = Math.round((SIDEBAR_LOGO_WIDTH * 30) / 46);\n\nexport interface SidebarRailBodyProps {\n collapsed: boolean;\n showCollapseToggle: boolean;\n showMobileCloseButton?: boolean;\n onCloseMobile?: () => void;\n collapseToggleLabel: string;\n onCollapse: () => void;\n onExpand: () => void;\n showCollapsedExpandButton: boolean;\n isExtensionsActive: boolean;\n currentPath: string;\n activeBackend: Backend;\n activeOrgId: string | null;\n activeBackendHealth: { isConnected: boolean | null } | undefined;\n collapsedBackendPopoverOpen: boolean;\n setCollapsedBackendPopoverOpen: (open: boolean) => void;\n collapsedBackendPopoverRef: React.RefObject<HTMLDivElement | null>;\n collapsedBackendCloseTimer: React.MutableRefObject<ReturnType<\n typeof setTimeout\n > | null>;\n onOpenAddBackend: () => void;\n onOpenManageBackends: () => void;\n}\n\nexport function SidebarRailBody({\n collapsed,\n showCollapseToggle,\n showMobileCloseButton = false,\n onCloseMobile,\n collapseToggleLabel,\n onCollapse,\n onExpand,\n showCollapsedExpandButton,\n isExtensionsActive,\n currentPath,\n activeBackend,\n activeOrgId,\n activeBackendHealth,\n collapsedBackendPopoverOpen,\n setCollapsedBackendPopoverOpen,\n collapsedBackendPopoverRef,\n collapsedBackendCloseTimer,\n onOpenAddBackend,\n onOpenManageBackends,\n}: SidebarRailBodyProps) {\n const { t } = useTranslation(\"openhands\");\n const { pages: canvasExtensionPages } = useCanvasExtensionsRuntime();\n const backendCloseTimerRef = collapsedBackendCloseTimer;\n const { isPinnedRoute, togglePinnedRoute } = usePinnedHomeRoute();\n\n const buildPinAction = (path: string, testId: string) => {\n const pinned = isPinnedRoute(path);\n return {\n pinned,\n onToggle: () => togglePinnedRoute(path),\n label: pinned\n ? t(I18nKey.SIDEBAR$UNPIN_AS_HOME)\n : t(I18nKey.SIDEBAR$PIN_AS_HOME),\n testId,\n };\n };\n\n const isCloudBackend = activeBackend.kind === \"cloud\";\n // `org` is consumed by the cloud settings loader so the page opens on the\n // org that is active here instead of the cloud's last-used org.\n const cloudSettingsOrgQuery = activeOrgId\n ? `?org=${encodeURIComponent(activeOrgId)}`\n : \"\";\n const cloudSettingsUrl = isCloudBackend\n ? `${activeBackend.host.replace(/\\/+$/, \"\")}/settings${cloudSettingsOrgQuery}`\n : null;\n // Locked-to-Cloud (SaaS / self-hosted OHE) serves the canvas at /canvas on\n // the cloud host itself, so cloud settings open in this tab and Back\n // returns here (OHE-3242). Standalone / Electron keep the new tab.\n const isLockedToCloud = getLockedCloudHost() !== null;\n\n return (\n <div className=\"flex min-h-0 flex-1 flex-col\">\n <div className={sidebarHeaderRowClassName(collapsed)}>\n <div\n className={cn(\n collapsed && showCollapseToggle\n ? SIDEBAR_COLLAPSED_LOGO_WRAPPER_CLASS\n : \"flex min-w-0 shrink-0 items-center\",\n )}\n >\n <div\n className={cn(\n collapsed &&\n showCollapseToggle &&\n \"flex h-full w-full items-center justify-start pl-2.5 transition-opacity duration-150\",\n collapsed && showCollapsedExpandButton && \"opacity-0\",\n )}\n >\n <OpenHandsLogoButton\n logoWidth={SIDEBAR_LOGO_WIDTH}\n logoHeight={SIDEBAR_LOGO_HEIGHT}\n logoClassName=\"max-w-none\"\n className={cn(SIDEBAR_ICON_SLOT_CLASS, \"overflow-visible\")}\n />\n </div>\n {collapsed && showCollapseToggle ? (\n <button\n type=\"button\"\n data-testid=\"sidebar-collapse-toggle\"\n aria-pressed={collapsed}\n aria-label={collapseToggleLabel}\n onClick={onExpand}\n className={cn(\n SIDEBAR_COLLAPSE_TOGGLE_OVERLAY_CLASS,\n showCollapsedExpandButton\n ? \"opacity-100 pointer-events-auto\"\n : \"opacity-0 pointer-events-none\",\n )}\n >\n <ChevronRight width={14} height={14} />\n </button>\n ) : null}\n </div>\n {!collapsed && showCollapseToggle ? (\n <button\n type=\"button\"\n data-testid=\"sidebar-collapse-toggle\"\n aria-pressed={collapsed}\n aria-label={collapseToggleLabel}\n onClick={onCollapse}\n className={cn(\n \"hidden md:inline-flex ml-auto\",\n SIDEBAR_ICON_BUTTON_CLASS,\n \"text-[var(--oh-muted)] hover:text-white hover:bg-[var(--oh-surface-raised)]\",\n )}\n >\n <ChevronLeft width={14} height={14} />\n </button>\n ) : null}\n {!collapsed && showMobileCloseButton ? (\n <button\n type=\"button\"\n data-testid=\"sidebar-mobile-drawer-close\"\n onClick={onCloseMobile}\n aria-label={t(I18nKey.SIDEBAR$CLOSE_MENU)}\n className={cn(\n \"inline-flex ml-auto\",\n SIDEBAR_ICON_BUTTON_CLASS,\n \"text-[var(--oh-muted)] hover:text-white hover:bg-[var(--oh-surface-raised)]\",\n )}\n >\n <ChevronLeft width={14} height={14} />\n </button>\n ) : null}\n </div>\n\n <nav className={sidebarNavListClassName(collapsed)}>\n <CommandMenuTrigger collapsed={collapsed} />\n <SidebarNavLink\n to=\"/conversations\"\n end\n label={t(I18nKey.SIDEBAR$NEW_CHAT)}\n testId=\"sidebar-conversations-link\"\n collapsed={collapsed}\n icon={<Plus width={ICON_SIZE} height={ICON_SIZE} />}\n />\n <SidebarNavLink\n to={CUSTOMIZE_PATH}\n label={t(I18nKey.NAV$CUSTOMIZE)}\n testId=\"sidebar-skills-link\"\n collapsed={collapsed}\n forceActive={isExtensionsActive}\n pinAction={buildPinAction(\n CUSTOMIZE_PATH,\n \"sidebar-pin-home-toggle-customize\",\n )}\n icon={\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={ICON_SIZE}\n height={ICON_SIZE}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <path d=\"M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z\" />\n <path d=\"m7 16.5-4.74-2.85\" />\n <path d=\"m7 16.5 5-3\" />\n <path d=\"M7 16.5v5.17\" />\n <path d=\"M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z\" />\n <path d=\"m17 16.5-5-3\" />\n <path d=\"m17 16.5 4.74-2.85\" />\n <path d=\"m17 16.5v5.17\" />\n <path d=\"M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z\" />\n <path d=\"M12 8 7.26 5.15\" />\n <path d=\"m12 8 4.74-2.85\" />\n <path d=\"M12 13.5V8\" />\n </svg>\n }\n />\n {/* The interface manifest owns this entry's label, so an absent\n manifest leaves the rail without it rather than with host copy. */}\n {hasAutomationInterface() && (\n <SidebarNavLink\n to={automationListPath()}\n label={getInterfaceCopy().sidebarLabel}\n testId=\"sidebar-automations-link\"\n collapsed={collapsed}\n icon={<AutomationsIcon width={ICON_SIZE} height={ICON_SIZE} />}\n pinAction={buildPinAction(\n automationListPath(),\n \"sidebar-pin-home-toggle-automations\",\n )}\n />\n )}\n {canvasExtensionPages.map((page) => (\n <SidebarNavLink\n key={`${page.extension.name}:${page.contribution.id}`}\n to={page.href}\n label={page.contribution.nav_label || page.contribution.title}\n testId={`sidebar-canvas-extension-${page.extension.name}-${page.contribution.id}`}\n collapsed={collapsed}\n icon={<PanelsTopLeft width={ICON_SIZE} height={ICON_SIZE} />}\n />\n ))}\n </nav>\n\n <SidebarConversationList collapsed={collapsed} />\n\n {collapsed && showCollapseToggle ? (\n <nav\n className={cn(\n sidebarNavListClassName(collapsed),\n \"mt-auto pb-2 cursor-pointer\",\n )}\n >\n <StyledTooltip\n content={t(I18nKey.SIDEBAR$SETTINGS)}\n placement=\"right\"\n >\n {isCloudBackend && cloudSettingsUrl ? (\n <a\n href={cloudSettingsUrl}\n target={isLockedToCloud ? undefined : \"_blank\"}\n rel={isLockedToCloud ? undefined : \"noopener noreferrer\"}\n data-testid=\"collapsed-settings-link\"\n aria-label={t(I18nKey.SIDEBAR$SETTINGS)}\n className={sidebarNavRowClassName({ collapsed: true })}\n >\n <SidebarCollapsedIconSlot active={false}>\n <Settings width={ICON_SIZE} height={ICON_SIZE} />\n </SidebarCollapsedIconSlot>\n <span className={sidebarNavLabelClassName(true)}>\n {t(I18nKey.SIDEBAR$SETTINGS)}\n </span>\n </a>\n ) : (\n <NavigationLink\n to=\"/settings\"\n data-testid=\"collapsed-settings-link\"\n aria-label={t(I18nKey.SIDEBAR$SETTINGS)}\n className={sidebarNavRowClassName({ collapsed: true })}\n >\n <SidebarCollapsedIconSlot\n active={currentPath.startsWith(\"/settings\")}\n >\n <Settings width={ICON_SIZE} height={ICON_SIZE} />\n </SidebarCollapsedIconSlot>\n <span className={sidebarNavLabelClassName(true)}>\n {t(I18nKey.SIDEBAR$SETTINGS)}\n </span>\n </NavigationLink>\n )}\n </StyledTooltip>\n <div\n className=\"relative\"\n ref={collapsedBackendPopoverRef}\n onMouseEnter={() => {\n if (backendCloseTimerRef.current) {\n clearTimeout(backendCloseTimerRef.current);\n backendCloseTimerRef.current = null;\n }\n setCollapsedBackendPopoverOpen(true);\n }}\n onMouseLeave={() => {\n backendCloseTimerRef.current = setTimeout(\n () => setCollapsedBackendPopoverOpen(false),\n 150,\n );\n }}\n >\n <button\n type=\"button\"\n data-testid=\"collapsed-backend-selector-link\"\n aria-label={t(I18nKey.BACKEND$MANAGE)}\n aria-expanded={collapsedBackendPopoverOpen}\n onMouseDown={(event) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n onMouseUp={(event) => event.stopPropagation()}\n className={cn(\n sidebarNavRowClassName({ collapsed: true }),\n \"relative\",\n )}\n >\n <SidebarCollapsedIconSlot active={collapsedBackendPopoverOpen}>\n <span className=\"relative inline-flex size-[18px] shrink-0 items-center justify-center\">\n <BackendStatusDot\n isConnected={activeBackendHealth?.isConnected ?? null}\n className=\"absolute -left-0.5 -top-0.5 z-[1] pointer-events-none\"\n />\n <Server width={ICON_SIZE} height={ICON_SIZE} />\n </span>\n </SidebarCollapsedIconSlot>\n <span className={sidebarNavLabelClassName(true)}>\n {t(I18nKey.BACKEND$MANAGE)}\n </span>\n </button>\n {collapsedBackendPopoverOpen ? (\n <div\n className=\"absolute bottom-[-4px] left-full pl-2.5 z-40 w-[272px]\"\n onClick={(event) => event.stopPropagation()}\n >\n <BackendSelector\n sidebarCollapsed={collapsed}\n hideTrigger\n defaultOpen\n openUpward\n onSelectOption={() => setCollapsedBackendPopoverOpen(false)}\n onOpenAddBackend={onOpenAddBackend}\n onOpenManageBackends={onOpenManageBackends}\n />\n </div>\n ) : null}\n </div>\n </nav>\n ) : null}\n\n {!collapsed ? (\n <>\n <div className=\"mb-2 shrink-0 pr-2.5\">\n <SidebarOnboardingChecklist collapsed={collapsed} />\n </div>\n <div\n className={cn(\n \"flex flex-col items-stretch max-w-none box-border shrink-0 gap-2\",\n \"-ml-2.5 w-[calc(100%+0.625rem)] border-t border-[var(--oh-border)] pt-2 px-2.5\",\n )}\n >\n <AgentCanvasVersionTile hideWhenUpToDate />\n <BackendSelector sidebarCollapsed={collapsed} openUpward />\n </div>\n </>\n ) : null}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import React from "react";
2
+ import type { Backend } from "#/api/backend-registry/types";
2
3
  export interface SidebarRailBodyProps {
3
4
  collapsed: boolean;
4
5
  showCollapseToggle: boolean;
@@ -10,6 +11,8 @@ export interface SidebarRailBodyProps {
10
11
  showCollapsedExpandButton: boolean;
11
12
  isExtensionsActive: boolean;
12
13
  currentPath: string;
14
+ activeBackend: Backend;
15
+ activeOrgId: string | null;
13
16
  activeBackendHealth: {
14
17
  isConnected: boolean | null;
15
18
  } | undefined;
@@ -20,4 +23,4 @@ export interface SidebarRailBodyProps {
20
23
  onOpenAddBackend: () => void;
21
24
  onOpenManageBackends: () => void;
22
25
  }
23
- export declare function SidebarRailBody({ collapsed, showCollapseToggle, showMobileCloseButton, onCloseMobile, collapseToggleLabel, onCollapse, onExpand, showCollapsedExpandButton, isExtensionsActive, currentPath, activeBackendHealth, collapsedBackendPopoverOpen, setCollapsedBackendPopoverOpen, collapsedBackendPopoverRef, collapsedBackendCloseTimer, onOpenAddBackend, onOpenManageBackends, }: SidebarRailBodyProps): React.JSX.Element;
26
+ export declare function SidebarRailBody({ collapsed, showCollapseToggle, showMobileCloseButton, onCloseMobile, collapseToggleLabel, onCollapse, onExpand, showCollapsedExpandButton, isExtensionsActive, currentPath, activeBackend, activeOrgId, activeBackendHealth, collapsedBackendPopoverOpen, setCollapsedBackendPopoverOpen, collapsedBackendPopoverRef, collapsedBackendCloseTimer, onOpenAddBackend, onOpenManageBackends, }: SidebarRailBodyProps): React.JSX.Element;