@openhands/agent-canvas 1.0.0-beta.6 → 1.0.0-beta.7

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 (802) hide show
  1. package/README.md +24 -7
  2. package/README.windows.md +27 -0
  3. package/bin/agent-canvas.mjs +26 -3
  4. package/build/assets/{QueryClientProvider-CkGuhXg-.js → QueryClientProvider-Cnr-Yl3j.js} +1 -1
  5. package/build/assets/{Trans-Cvm_-SMi.js → Trans-4jmk54WC.js} +1 -1
  6. package/build/assets/acp-providers-CPdgcp13.js +1 -0
  7. package/build/assets/{acp-route-guard-B2yoBZ_4.js → acp-route-guard-BoVmCn0e.js} +1 -1
  8. package/build/assets/active-backend-context-Beu-LZL-.js +1 -0
  9. package/build/assets/add-backend-modal-BheqYXHK.js +1 -0
  10. package/build/assets/agent-server-client-options-HEOwGVIU.js +1 -0
  11. package/build/assets/agent-server-compatibility-CdI3N7dr.js +1 -0
  12. package/build/assets/agent-server-conversation-service.api-CORdqJZg.js +5 -0
  13. package/build/assets/{agent-settings-CnGSCmK8.js → agent-settings-UFvcGjoI.js} +1 -1
  14. package/build/assets/{alert-banner-DtzAX654.js → alert-banner-DFnn_lC6.js} +1 -1
  15. package/build/assets/{analytics-consent-form-modal-CHZ3I37v.js → analytics-consent-form-modal-CVNugqzu.js} +1 -1
  16. package/build/assets/api-key-entry-screen-M6su2VSf.js +1 -0
  17. package/build/assets/{app-settings-Db9ITeJH.js → app-settings-BlvBhBdc.js} +1 -1
  18. package/build/assets/automation-detail-BWrQk4Oa.js +1 -0
  19. package/build/assets/automations-list-ux9KvYsU.js +1 -0
  20. package/build/assets/back-nav-button-7dQJ2k3O.js +1 -0
  21. package/build/assets/backend-form-modal-CDnEYjaU.js +1 -0
  22. package/build/assets/{backend-synced-settings-badge-Dc6c7GT4.js → backend-synced-settings-badge-BTIj-Ffq.js} +1 -1
  23. package/build/assets/base-modal-C2oy2EBG.js +1 -0
  24. package/build/assets/brand-button-DJ_S16rO.js +1 -0
  25. package/build/assets/{browser-D810xUYt.js → browser-CGM-k-sH.js} +2 -2
  26. package/build/assets/browser-store-DAsixKdU.js +1 -0
  27. package/build/assets/{browser-tab-B-aIqXRl.js → browser-tab-dvSPdvkm.js} +1 -1
  28. package/build/assets/{checkmark-DL7acQA7.js → checkmark-Dus0b6jt.js} +1 -1
  29. package/build/assets/{chevron-left-small-CVWf8TI6.js → chevron-left-small-_uvG7RVM.js} +1 -1
  30. package/build/assets/{circle-plus-check-toggle-P7ZZToV4.js → circle-plus-check-toggle-DKS8MAVV.js} +1 -1
  31. package/build/assets/{close-B5LROHR3.js → close-BU5iTc66.js} +1 -1
  32. package/build/assets/code-tag-BzyqOtPD.js +1 -0
  33. package/build/assets/combobox-caret-BJC7XJsz.js +1 -0
  34. package/build/assets/{command-store-DFN_17p1.js → command-store-CE1weJy8.js} +1 -1
  35. package/build/assets/{condenser-settings-wnEKhBof.js → condenser-settings-BolbDvm5.js} +1 -1
  36. package/build/assets/{confirmation-modal-Dau3w_sa.js → confirmation-modal-B5Ca6qFE.js} +1 -1
  37. package/build/assets/context-menu-list-item-7tAcm2c3.js +1 -0
  38. package/build/assets/conversation-D0N4dw_p.js +19 -0
  39. package/build/assets/conversation-DhRJuZLG.js +1 -0
  40. package/build/assets/conversation-panel-CNqHbS_Z.js +1 -0
  41. package/build/assets/conversation-service.api-BsJy6uuL.js +1 -0
  42. package/build/assets/conversation-state-store-D-w0uurj.js +1 -0
  43. package/build/assets/conversation-store-CC-isCnP.js +1 -0
  44. package/build/assets/{conversation-tab-empty-state-DyssnnWa.js → conversation-tab-empty-state-CStQLPVW.js} +1 -1
  45. package/build/assets/conversation-websocket-context-DvHgx_FE.js +3 -0
  46. package/build/assets/{copy-DYgmUdIw.js → copy-Chg-sFu3.js} +1 -1
  47. package/build/assets/{custom-toast-handlers-C-SZFmto.js → custom-toast-handlers-ufGJ6_Rc.js} +1 -1
  48. package/build/assets/declaration-CR6HMp29.js +1 -0
  49. package/build/assets/{device-verify-DqDlphsG.js → device-verify-C6mj28zv.js} +1 -1
  50. package/build/assets/dist-DNeWJ2bh.js +1 -0
  51. package/build/assets/dropdown-classes-BsVmxlNG.js +1 -0
  52. package/build/assets/edit-automation-modal-BpX-t-HD.js +1 -0
  53. package/build/assets/ellipsis-button-Vh5MvRZa.js +1 -0
  54. package/build/assets/entry.client-Ck9rQCg-.js +2 -0
  55. package/build/assets/enum-filter-dropdown-5JeF2RLb.js +1 -0
  56. package/build/assets/{environment-switch-overlay-XL8yCGP6.js → environment-switch-overlay-Tf_BIfeR.js} +1 -1
  57. package/build/assets/extensions-hub-CE9QOb5n.js +1 -0
  58. package/build/assets/{extensions-navigation-BYR8Giqq.js → extensions-navigation-DSLGNGbS.js} +1 -1
  59. package/build/assets/file-BTY6Gyy9.js +1 -0
  60. package/build/assets/files-tab-cL668j1I.js +1 -0
  61. package/build/assets/files-tab-store-m0ARqX_E.js +1 -0
  62. package/build/assets/{folder-ZZJVGgd7.js → folder-D1T2W1cj.js} +1 -1
  63. package/build/assets/git-control-bar-branch-button-DtIrOrie.js +27 -0
  64. package/build/assets/git-provider-icon-CHdGBdU2.js +1 -0
  65. package/build/assets/globe-Bzj_0oXT.js +1 -0
  66. package/build/assets/home-Cz2Veg56.js +1 -0
  67. package/build/assets/{i18n-CTohRuoO.js → i18n-DET2iOyh.js} +1 -1
  68. package/build/assets/install-server-modal-B9nXCS3u.js +1 -0
  69. package/build/assets/launch-CWz0dm4o.js +1 -0
  70. package/build/assets/{lesson-plan-dH5Bj0pN.js → lesson-plan-duSsqWVs.js} +1 -1
  71. package/build/assets/link-external-DGxVm4Ps.js +1 -0
  72. package/build/assets/{llm-client-DaH1TuyR.js → llm-client-CYEaUjGx.js} +1 -1
  73. package/build/assets/llm-settings-DFkXHuvT.js +1 -0
  74. package/build/assets/llm-settings-DhrdCXqX.js +1 -0
  75. package/build/assets/{loading-spinner-BPtYORNK.js → loading-spinner-5GT9q1xy.js} +1 -1
  76. package/build/assets/manage-backends-modal-DpBD_vR9.js +1 -0
  77. package/build/assets/manage-workspaces-modal-CtRbxREx.js +1 -0
  78. package/build/assets/manifest-eed90ff5.js +1 -0
  79. package/build/assets/{markdown-renderer-DMzf2i4x.js → markdown-renderer-B3IAVfv4.js} +1 -1
  80. package/build/assets/mcp-BUe7kiYM.js +9 -0
  81. package/build/assets/messages-dqp_KYyl.js +36 -0
  82. package/build/assets/{modal-backdrop-BAbgYsqB.js → modal-backdrop-RfNCrSpK.js} +1 -1
  83. package/build/assets/{modal-body-BI6Ru2Qr.js → modal-body-aoa2fx5W.js} +1 -1
  84. package/build/assets/modal-classes-6YqcqA6y.js +1 -0
  85. package/build/assets/{modal-close-button-t1Gh3qmL.js → modal-close-button-CtWOUMmw.js} +1 -1
  86. package/build/assets/{model-selector-SM9IUz-q.js → model-selector-BvSTrkhT.js} +1 -1
  87. package/build/assets/{navigation-context-D0YWpT8d.js → navigation-context-BdKYH32C.js} +1 -1
  88. package/build/assets/{navigation-link-Cn7KP3c5.js → navigation-link-U4vY9i_C.js} +1 -1
  89. package/build/assets/{openhands-logo-CnrF6LKb.js → openhands-logo-CCo0wJZX.js} +1 -1
  90. package/build/assets/{option-service.api-KvY_mZMY.js → option-service.api-DmNVxAvS.js} +1 -1
  91. package/build/assets/{organization-service.api-DzYTHTYC.js → organization-service.api-DbnougaQ.js} +1 -1
  92. package/build/assets/{path-utils-C3bQf6lJ.js → path-utils-onx24uF5.js} +1 -1
  93. package/build/assets/{plan-components-atxXCF0R.js → plan-components-CRDMQzsS.js} +1 -1
  94. package/build/assets/{planner-tab-BlrCpv-7.js → planner-tab-CmIjLz7q.js} +1 -1
  95. package/build/assets/{profiles-client-D6IkTJof.js → profiles-client-fEmgWkCW.js} +1 -1
  96. package/build/assets/{providers-Bx6EfrzZ.js → providers-CbD7fiic.js} +1 -1
  97. package/build/assets/proxy-BAdHH8QB.js +1 -0
  98. package/build/assets/{query-client-config-B7u9asM0.js → query-client-config-CRnGSujB.js} +1 -1
  99. package/build/assets/{recommended-automations-launcher-CgV8FyPK.js → recommended-automations-launcher-uTyODuzB.js} +3 -3
  100. package/build/assets/{root-dNntxffj.js → root-DmjpFpTu.js} +2 -2
  101. package/build/assets/root-Z2VHU4R3.css +1 -0
  102. package/build/assets/root-layout-DejMsKhy.js +2 -0
  103. package/build/assets/{sdk-section-page-DOIKvwSL.js → sdk-section-page-BgDlMhcq.js} +1 -1
  104. package/build/assets/{sdk-settings-schema-DsUf9wu1.js → sdk-settings-schema-CLmJ9sho.js} +1 -1
  105. package/build/assets/{search-27Owlc3A.js → search-SuJctqNJ.js} +1 -1
  106. package/build/assets/secrets-service-B7CxNinp.js +1 -0
  107. package/build/assets/secrets-settings-yK7CqIpm.js +1 -0
  108. package/build/assets/{server-client-DyAQ3NZ_.js → server-client-Kh4QSwDJ.js} +1 -1
  109. package/build/assets/{settings-BYkVX7vW.js → settings-DN5PpgRD.js} +1 -1
  110. package/build/assets/{settings-dropdown-input-BJYvGdg-.js → settings-dropdown-input-BtoovFre.js} +1 -1
  111. package/build/assets/{settings-gear-C77PgE_O.js → settings-gear-Dd8K2_8B.js} +1 -1
  112. package/build/assets/settings-index-DKC8IY1P.js +1 -0
  113. package/build/assets/{settings-input-Bn7F5C75.js → settings-input-CehsXnb3.js} +1 -1
  114. package/build/assets/settings-list-classes-E3v_f6QG.js +1 -0
  115. package/build/assets/settings-modal-DJ4kGzUx.js +1 -0
  116. package/build/assets/{settings-section-header-context-BgZe5YkE.js → settings-section-header-context-DewwJ0-F.js} +1 -1
  117. package/build/assets/settings-service.api-C3rxTtPj.js +1 -0
  118. package/build/assets/{settings-switch-BeIKrWms.js → settings-switch-BiBuS3xa.js} +1 -1
  119. package/build/assets/{settings-utils-B6Nl07io.js → settings-utils-DY04tWG1.js} +1 -1
  120. package/build/assets/{shared-conversation-AMyqXvpk.js → shared-conversation-h9YnBtCU.js} +1 -1
  121. package/build/assets/sidebar-mobile-menu-toggle-D0-AvsnT.js +1 -0
  122. package/build/assets/{sidebar-nav-link-BGjiJq-4.js → sidebar-nav-link-OhIeFyna.js} +1 -1
  123. package/build/assets/{sidebar-store-Uy3v0AOV.js → sidebar-store-DnQAJAE5.js} +1 -1
  124. package/build/assets/{skill-card-pill-row-DF1axQCG.js → skill-card-pill-row-BW9qvhoK.js} +1 -1
  125. package/build/assets/{skills-ChIKZPK4.js → skills-0GRKX5Xj.js} +1 -1
  126. package/build/assets/{skills-plugins-CcI_19lM.js → skills-plugins-DNcsNF88.js} +1 -1
  127. package/build/assets/skills-settings-7liFiSY6.js +2 -0
  128. package/build/assets/{styled-tooltip-CBzrri6o.js → styled-tooltip-hdfMXPQC.js} +1 -1
  129. package/build/assets/{switch-skeleton-DnC9wLp7.js → switch-skeleton-DSKqSx2A.js} +1 -1
  130. package/build/assets/{task-list-tab-DUJn1sgz.js → task-list-tab-DT6_zfUs.js} +1 -1
  131. package/build/assets/{terminal-DgQk1Ay6.js → terminal-CDhQGDua.js} +2 -2
  132. package/build/assets/{terminal-RmuaSdhJ.js → terminal-CPYWdo4j.js} +1 -1
  133. package/build/assets/{toggle-switch-Pvyp2RAN.js → toggle-switch-T2v6sJ6l.js} +1 -1
  134. package/build/assets/{typography-gpuWmrQO.js → typography-BDgnT7Yp.js} +1 -1
  135. package/build/assets/{u-check-circle-IUIfACQQ.js → u-check-circle-DOauqQKb.js} +1 -1
  136. package/build/assets/{u-check-circle-half-C1YxB6py.js → u-check-circle-half-steSK_JB.js} +1 -1
  137. package/build/assets/{u-circuit-BmVikJHu.js → u-circuit-x3ExjBbU.js} +1 -1
  138. package/build/assets/{u-edit-CFvXHqZk.js → u-edit-BbrptMCa.js} +1 -1
  139. package/build/assets/{use-active-conversation-BEFNwnFk.js → use-active-conversation-DHGcmjCK.js} +1 -1
  140. package/build/assets/use-agent-settings-schema-CLoTOSJI.js +1 -0
  141. package/build/assets/{use-agent-state-Bkrd1FZq.js → use-agent-state-PKrUPMJ3.js} +1 -1
  142. package/build/assets/{use-cloud-current-user-id-CvkXFnTT.js → use-cloud-current-user-id-Ddr75hEz.js} +1 -1
  143. package/build/assets/{use-config-Co1O8-Ey.js → use-config-OIMQLQ2s.js} +1 -1
  144. package/build/assets/{use-create-conversation-CEgXpkfH.js → use-create-conversation-Bszyp13O.js} +1 -1
  145. package/build/assets/{use-event-store-BT_gV3ut.js → use-event-store-BomO7ywK.js} +1 -1
  146. package/build/assets/{use-get-secrets-DuhdIA59.js → use-get-secrets-8Jby8ele.js} +1 -1
  147. package/build/assets/{use-handle-plan-click-Ckkm5eIY.js → use-handle-plan-click-CohJPvvW.js} +1 -1
  148. package/build/assets/use-is-authed-dw2026rR.js +1 -0
  149. package/build/assets/{use-is-creating-conversation-BZ5hB_Bg.js → use-is-creating-conversation-DX2qSlfL.js} +1 -1
  150. package/build/assets/{use-launch-skill-in-chat-fNN_xGZG.js → use-launch-skill-in-chat-sQNEOLGD.js} +1 -1
  151. package/build/assets/use-llm-profiles-C861aFAq.js +1 -0
  152. package/build/assets/use-runtime-is-ready-Do2h_hRl.js +1 -0
  153. package/build/assets/{use-save-settings-VUrj_QNG.js → use-save-settings-DkAOEfD9.js} +1 -1
  154. package/build/assets/use-settings-D5hbTS9t.js +1 -0
  155. package/build/assets/{use-settings-nav-items-1ZvovKSr.js → use-settings-nav-items-BcSbo02d.js} +1 -1
  156. package/build/assets/{use-skills-DAMLFjKU.js → use-skills-D7PS0fH0.js} +1 -1
  157. package/build/assets/{use-task-list-CLJbuJgM.js → use-task-list-CsT10CBb.js} +1 -1
  158. package/build/assets/{use-unified-vscode-url-DdSRw-6P.js → use-unified-vscode-url-DEoe-NRI.js} +1 -1
  159. package/build/assets/use-user-conversation-Cs5H1pUF.js +1 -0
  160. package/build/assets/{useMutation-DqrumCWD.js → useMutation-GSSKKebK.js} +1 -1
  161. package/build/assets/{useTranslation-DCOdSSMl.js → useTranslation-B6voJV4y.js} +1 -1
  162. package/build/assets/utils-DCVfKFRt.js +1 -0
  163. package/build/assets/{vendor~browser-BNjNhjFU.js → vendor~browser-BrOJLj3y.js} +1 -1
  164. package/build/assets/vendor~conversation-panel~conversation-C9o-K1hW.js +1 -0
  165. package/build/assets/vendor~conversation-panel~conversation~index-RXYdJYxU.js +1 -0
  166. package/build/assets/{vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~skills-set~jfc6hidu-VnmIZrq3.js → vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~skills-set~jfc6hidu-DJS-rJdI.js} +1 -1
  167. package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-DpAdkv8m.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-6ByzelMS.js} +1 -1
  168. package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-B92czPCF.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-BED5W_c4.js} +1 -1
  169. package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-By5W2oHN.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-CCbqAFiI.js} +1 -1
  170. package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-BbFOrAjI.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-CG96FCly.js} +1 -1
  171. package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-smY2r837.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-E4d6IEfI.js} +1 -1
  172. package/build/assets/{vendor~home~mcp~automations-list-Cs-TO3fK.js → vendor~home~mcp~automations-list-CZSK-lT2.js} +1 -1
  173. package/build/assets/{vendor~home~mcp~llm-settings~agent-settings~condenser-settings~verification-settings~app-se~ocm3mykx-Z3nsiNNq.js → vendor~home~mcp~llm-settings~agent-settings~condenser-settings~verification-settings~app-se~ocm3mykx-CjJdFLoM.js} +1 -1
  174. package/build/assets/{vendor~home~mcp~llm-settings~agent-settings~condenser-settings~verification-settings~app-se~ocm3mykx-DbfELDJu.js → vendor~home~mcp~llm-settings~agent-settings~condenser-settings~verification-settings~app-se~ocm3mykx-m8dOii0J.js} +2 -2
  175. package/build/assets/{vendor~root-layout~home~conversation-panel~conversation-DjAjXS5J.js → vendor~root-layout~home~conversation-panel~conversation-B5WNMnt4.js} +1 -1
  176. package/build/assets/vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~i4kjfqhl-CbAhtEMv.js +1 -0
  177. package/build/assets/vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~iguv7bgw-6Rm8U_Sr.js +9 -0
  178. package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~iguv7bgw-BkQGKpye.js → vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~iguv7bgw-tTR8C6m0.js} +1 -1
  179. package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~k776hupu-Bbs7UJ5U.js → vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~k776hupu-BJbu9kpL.js} +2 -2
  180. package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-settin~dp08i1qy-DTwbEEcX.js → vendor~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-settin~dp08i1qy-hTzSytKK.js} +1 -1
  181. package/build/assets/{vendor~root~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-s~f2l2lr17-CDXvdvb2.js → vendor~root~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-s~f2l2lr17-DYXOLEck.js} +1 -1
  182. package/build/assets/{verification-settings-CsbvQcYS.js → verification-settings-Dlt8pINd.js} +1 -1
  183. package/build/assets/{vscode-tab-DjNArCgY.js → vscode-tab-DgepcYtF.js} +1 -1
  184. package/build/assets/{waiting-for-runtime-message-CntjExbU.js → waiting-for-runtime-message-CdK3btDZ.js} +1 -1
  185. package/build/assets/{x-mark-CrpjscNc.js → x-mark-BrkSPIiT.js} +1 -1
  186. package/build/index.html +4 -4
  187. package/build/locales/ar/openhands.json +20 -2
  188. package/build/locales/ca/openhands.json +20 -2
  189. package/build/locales/de/openhands.json +20 -2
  190. package/build/locales/en/openhands.json +20 -2
  191. package/build/locales/es/openhands.json +20 -2
  192. package/build/locales/fr/openhands.json +20 -2
  193. package/build/locales/it/openhands.json +20 -2
  194. package/build/locales/ja/openhands.json +20 -2
  195. package/build/locales/ko-KR/openhands.json +20 -2
  196. package/build/locales/no/openhands.json +20 -2
  197. package/build/locales/pt/openhands.json +20 -2
  198. package/build/locales/tr/openhands.json +20 -2
  199. package/build/locales/uk/openhands.json +20 -2
  200. package/build/locales/zh-CN/openhands.json +20 -2
  201. package/build/locales/zh-TW/openhands.json +20 -2
  202. package/dist/api/acp-service/acp-service.api.d.ts +18 -0
  203. package/dist/api/agent-server-adapter.cjs +3 -3
  204. package/dist/api/agent-server-adapter.cjs.map +1 -1
  205. package/dist/api/agent-server-adapter.js +54 -55
  206. package/dist/api/agent-server-adapter.js.map +1 -1
  207. package/dist/api/agent-server-client-options.cjs +1 -1
  208. package/dist/api/agent-server-client-options.cjs.map +1 -1
  209. package/dist/api/agent-server-client-options.d.ts +4 -0
  210. package/dist/api/agent-server-client-options.js +18 -12
  211. package/dist/api/agent-server-client-options.js.map +1 -1
  212. package/dist/api/agent-server-compatibility.cjs +1 -1
  213. package/dist/api/agent-server-compatibility.cjs.map +1 -1
  214. package/dist/api/agent-server-compatibility.d.ts +1 -1
  215. package/dist/api/agent-server-compatibility.js +30 -25
  216. package/dist/api/agent-server-compatibility.js.map +1 -1
  217. package/dist/api/agent-server-config.cjs +1 -1
  218. package/dist/api/agent-server-config.cjs.map +1 -1
  219. package/dist/api/agent-server-config.d.ts +1 -51
  220. package/dist/api/agent-server-config.js +20 -70
  221. package/dist/api/agent-server-config.js.map +1 -1
  222. package/dist/api/backend-registry/active-store.cjs +1 -1
  223. package/dist/api/backend-registry/active-store.cjs.map +1 -1
  224. package/dist/api/backend-registry/active-store.d.ts +11 -5
  225. package/dist/api/backend-registry/active-store.js +36 -27
  226. package/dist/api/backend-registry/active-store.js.map +1 -1
  227. package/dist/api/backend-registry/auth.cjs +1 -1
  228. package/dist/api/backend-registry/auth.cjs.map +1 -1
  229. package/dist/api/backend-registry/auth.js +3 -9
  230. package/dist/api/backend-registry/auth.js.map +1 -1
  231. package/dist/api/backend-registry/default-backend.cjs +1 -1
  232. package/dist/api/backend-registry/default-backend.cjs.map +1 -1
  233. package/dist/api/backend-registry/default-backend.d.ts +9 -16
  234. package/dist/api/backend-registry/default-backend.js +5 -4
  235. package/dist/api/backend-registry/default-backend.js.map +1 -1
  236. package/dist/api/backend-registry/storage.cjs +1 -1
  237. package/dist/api/backend-registry/storage.cjs.map +1 -1
  238. package/dist/api/backend-registry/storage.js +67 -34
  239. package/dist/api/backend-registry/storage.js.map +1 -1
  240. package/dist/api/cloud/conversation-service.api.cjs.map +1 -1
  241. package/dist/api/cloud/conversation-service.api.d.ts +8 -13
  242. package/dist/api/cloud/conversation-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 +1 -2
  245. package/dist/api/cloud/organization-service.api.js.map +1 -1
  246. package/dist/api/cloud/proxy.cjs +1 -1
  247. package/dist/api/cloud/proxy.cjs.map +1 -1
  248. package/dist/api/cloud/proxy.d.ts +6 -6
  249. package/dist/api/cloud/proxy.js +33 -24
  250. package/dist/api/cloud/proxy.js.map +1 -1
  251. package/dist/api/cloud/sandbox-service.api.cjs.map +1 -1
  252. package/dist/api/cloud/sandbox-service.api.d.ts +3 -3
  253. package/dist/api/cloud/sandbox-service.api.js.map +1 -1
  254. package/dist/api/cloud/secrets-service.api.cjs.map +1 -1
  255. package/dist/api/cloud/secrets-service.api.d.ts +3 -4
  256. package/dist/api/cloud/secrets-service.api.js.map +1 -1
  257. package/dist/api/cloud/settings-service.api.cjs +1 -1
  258. package/dist/api/cloud/settings-service.api.cjs.map +1 -1
  259. package/dist/api/cloud/settings-service.api.js +5 -1
  260. package/dist/api/cloud/settings-service.api.js.map +1 -1
  261. package/dist/api/cloud/skills-service.api.cjs.map +1 -1
  262. package/dist/api/cloud/skills-service.api.d.ts +5 -5
  263. package/dist/api/cloud/skills-service.api.js.map +1 -1
  264. package/dist/api/conversation-service/agent-server-conversation-service.api.cjs +1 -1
  265. package/dist/api/conversation-service/agent-server-conversation-service.api.cjs.map +1 -1
  266. package/dist/api/conversation-service/agent-server-conversation-service.api.js +115 -108
  267. package/dist/api/conversation-service/agent-server-conversation-service.api.js.map +1 -1
  268. package/dist/api/device-flow-client.cjs +1 -1
  269. package/dist/api/device-flow-client.cjs.map +1 -1
  270. package/dist/api/device-flow-client.d.ts +3 -5
  271. package/dist/api/device-flow-client.js +55 -66
  272. package/dist/api/device-flow-client.js.map +1 -1
  273. package/dist/api/event-service/event-service.api.cjs +1 -1
  274. package/dist/api/event-service/event-service.api.cjs.map +1 -1
  275. package/dist/api/event-service/event-service.api.d.ts +3 -3
  276. package/dist/api/event-service/event-service.api.js +17 -17
  277. package/dist/api/event-service/event-service.api.js.map +1 -1
  278. package/dist/api/git-service/agent-server-git-service.api.cjs +1 -1
  279. package/dist/api/git-service/agent-server-git-service.api.js +11 -11
  280. package/dist/api/runtime-service/agent-server-runtime-service.cjs +1 -1
  281. package/dist/api/runtime-service/agent-server-runtime-service.js +6 -6
  282. package/dist/components/conversation-events/chat/event-content-helpers/get-action-content.cjs +2 -2
  283. package/dist/components/conversation-events/chat/event-content-helpers/get-action-content.js +10 -10
  284. package/dist/components/conversation-events/chat/event-content-helpers/get-observation-result.cjs.map +1 -1
  285. package/dist/components/conversation-events/chat/event-content-helpers/get-observation-result.d.ts +5 -5
  286. package/dist/components/conversation-events/chat/event-content-helpers/get-observation-result.js.map +1 -1
  287. package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.cjs +1 -1
  288. package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.cjs.map +1 -1
  289. package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.js +1 -1
  290. package/dist/components/conversation-events/chat/event-content-helpers/should-render-event.js.map +1 -1
  291. package/dist/components/features/automations/automation-action-button-classes.d.ts +2 -2
  292. package/dist/components/features/backends/backend-form-modal.cjs +1 -1
  293. package/dist/components/features/backends/backend-form-modal.cjs.map +1 -1
  294. package/dist/components/features/backends/backend-form-modal.d.ts +1 -0
  295. package/dist/components/features/backends/backend-form-modal.js +203 -140
  296. package/dist/components/features/backends/backend-form-modal.js.map +1 -1
  297. package/dist/components/features/backends/backend-selector.cjs +1 -1
  298. package/dist/components/features/backends/backend-selector.cjs.map +1 -1
  299. package/dist/components/features/backends/backend-selector.js +117 -105
  300. package/dist/components/features/backends/backend-selector.js.map +1 -1
  301. package/dist/components/features/backends/backend-status-dot.cjs +1 -1
  302. package/dist/components/features/backends/backend-status-dot.cjs.map +1 -1
  303. package/dist/components/features/backends/backend-status-dot.d.ts +1 -1
  304. package/dist/components/features/backends/backend-status-dot.js +1 -1
  305. package/dist/components/features/backends/backend-status-dot.js.map +1 -1
  306. package/dist/components/features/backends/manage-backends-modal.cjs +1 -1
  307. package/dist/components/features/backends/manage-backends-modal.cjs.map +1 -1
  308. package/dist/components/features/backends/manage-backends-modal.js +81 -70
  309. package/dist/components/features/backends/manage-backends-modal.js.map +1 -1
  310. package/dist/components/features/chat/change-agent-button.cjs +1 -1
  311. package/dist/components/features/chat/change-agent-button.cjs.map +1 -1
  312. package/dist/components/features/chat/change-agent-button.js +59 -57
  313. package/dist/components/features/chat/change-agent-button.js.map +1 -1
  314. package/dist/components/features/chat/change-agent-context-menu.cjs +1 -1
  315. package/dist/components/features/chat/change-agent-context-menu.cjs.map +1 -1
  316. package/dist/components/features/chat/change-agent-context-menu.d.ts +3 -1
  317. package/dist/components/features/chat/change-agent-context-menu.js +30 -25
  318. package/dist/components/features/chat/change-agent-context-menu.js.map +1 -1
  319. package/dist/components/features/chat/chat-add-file-button.cjs +1 -1
  320. package/dist/components/features/chat/chat-add-file-button.cjs.map +1 -1
  321. package/dist/components/features/chat/chat-add-file-button.js +39 -38
  322. package/dist/components/features/chat/chat-add-file-button.js.map +1 -1
  323. package/dist/components/features/chat/chat-message.cjs +1 -1
  324. package/dist/components/features/chat/chat-message.cjs.map +1 -1
  325. package/dist/components/features/chat/chat-message.d.ts +2 -1
  326. package/dist/components/features/chat/chat-message.js +185 -57
  327. package/dist/components/features/chat/chat-message.js.map +1 -1
  328. package/dist/components/features/chat/components/chat-input-actions.cjs +1 -1
  329. package/dist/components/features/chat/components/chat-input-actions.cjs.map +1 -1
  330. package/dist/components/features/chat/components/chat-input-actions.js +113 -113
  331. package/dist/components/features/chat/components/chat-input-actions.js.map +1 -1
  332. package/dist/components/features/chat/components/chat-input-model.cjs +1 -1
  333. package/dist/components/features/chat/components/chat-input-model.cjs.map +1 -1
  334. package/dist/components/features/chat/components/chat-input-model.js +52 -51
  335. package/dist/components/features/chat/components/chat-input-model.js.map +1 -1
  336. package/dist/components/features/chat/components/slash-command-menu.cjs +2 -2
  337. package/dist/components/features/chat/components/slash-command-menu.cjs.map +1 -1
  338. package/dist/components/features/chat/components/slash-command-menu.js +38 -34
  339. package/dist/components/features/chat/components/slash-command-menu.js.map +1 -1
  340. package/dist/components/features/chat/git-control-bar-pr-button.cjs +1 -1
  341. package/dist/components/features/chat/git-control-bar-pr-button.cjs.map +1 -1
  342. package/dist/components/features/chat/git-control-bar-pr-button.js +16 -15
  343. package/dist/components/features/chat/git-control-bar-pr-button.js.map +1 -1
  344. package/dist/components/features/chat/git-control-bar-pull-button.cjs +1 -1
  345. package/dist/components/features/chat/git-control-bar-pull-button.cjs.map +1 -1
  346. package/dist/components/features/chat/git-control-bar-pull-button.js +16 -15
  347. package/dist/components/features/chat/git-control-bar-pull-button.js.map +1 -1
  348. package/dist/components/features/chat/git-control-bar-push-button.cjs +1 -1
  349. package/dist/components/features/chat/git-control-bar-push-button.cjs.map +1 -1
  350. package/dist/components/features/chat/git-control-bar-push-button.js +16 -15
  351. package/dist/components/features/chat/git-control-bar-push-button.js.map +1 -1
  352. package/dist/components/features/chat/git-control-bar.cjs +1 -1
  353. package/dist/components/features/chat/git-control-bar.cjs.map +1 -1
  354. package/dist/components/features/chat/git-control-bar.js +63 -62
  355. package/dist/components/features/chat/git-control-bar.js.map +1 -1
  356. package/dist/components/features/chat/pending-user-messages.cjs +1 -1
  357. package/dist/components/features/chat/pending-user-messages.cjs.map +1 -1
  358. package/dist/components/features/chat/pending-user-messages.js +27 -23
  359. package/dist/components/features/chat/pending-user-messages.js.map +1 -1
  360. package/dist/components/features/chat/switch-profile-button.cjs +1 -1
  361. package/dist/components/features/chat/switch-profile-button.cjs.map +1 -1
  362. package/dist/components/features/chat/switch-profile-button.js +26 -25
  363. package/dist/components/features/chat/switch-profile-button.js.map +1 -1
  364. package/dist/components/features/chat/switch-profile-context-menu.cjs +1 -1
  365. package/dist/components/features/chat/switch-profile-context-menu.cjs.map +1 -1
  366. package/dist/components/features/chat/switch-profile-context-menu.js +77 -67
  367. package/dist/components/features/chat/switch-profile-context-menu.js.map +1 -1
  368. package/dist/components/features/context-menu/context-menu-icon-text-with-description.cjs +1 -1
  369. package/dist/components/features/context-menu/context-menu-icon-text-with-description.cjs.map +1 -1
  370. package/dist/components/features/context-menu/context-menu-icon-text-with-description.d.ts +2 -1
  371. package/dist/components/features/context-menu/context-menu-icon-text-with-description.js +3 -2
  372. package/dist/components/features/context-menu/context-menu-icon-text-with-description.js.map +1 -1
  373. package/dist/components/features/context-menu/context-menu-icon-text.cjs +1 -1
  374. package/dist/components/features/context-menu/context-menu-icon-text.cjs.map +1 -1
  375. package/dist/components/features/context-menu/context-menu-icon-text.d.ts +2 -1
  376. package/dist/components/features/context-menu/context-menu-icon-text.js +20 -10
  377. package/dist/components/features/context-menu/context-menu-icon-text.js.map +1 -1
  378. package/dist/components/features/context-menu/context-menu-list-item.cjs +1 -1
  379. package/dist/components/features/context-menu/context-menu-list-item.cjs.map +1 -1
  380. package/dist/components/features/context-menu/context-menu-list-item.js +10 -9
  381. package/dist/components/features/context-menu/context-menu-list-item.js.map +1 -1
  382. package/dist/components/features/controls/agent-status.cjs +1 -1
  383. package/dist/components/features/controls/agent-status.js +12 -12
  384. package/dist/components/features/controls/git-tools-submenu.cjs +1 -1
  385. package/dist/components/features/controls/git-tools-submenu.cjs.map +1 -1
  386. package/dist/components/features/controls/git-tools-submenu.js +1 -1
  387. package/dist/components/features/controls/git-tools-submenu.js.map +1 -1
  388. package/dist/components/features/controls/macros-submenu.cjs +1 -1
  389. package/dist/components/features/controls/macros-submenu.cjs.map +1 -1
  390. package/dist/components/features/controls/macros-submenu.js +1 -1
  391. package/dist/components/features/controls/macros-submenu.js.map +1 -1
  392. package/dist/components/features/controls/server-status-context-menu-icon-text.cjs +1 -1
  393. package/dist/components/features/controls/server-status-context-menu-icon-text.cjs.map +1 -1
  394. package/dist/components/features/controls/server-status-context-menu-icon-text.js +14 -15
  395. package/dist/components/features/controls/server-status-context-menu-icon-text.js.map +1 -1
  396. package/dist/components/features/controls/server-status-context-menu.cjs +1 -1
  397. package/dist/components/features/controls/server-status-context-menu.js +4 -4
  398. package/dist/components/features/controls/server-status.cjs +1 -1
  399. package/dist/components/features/controls/server-status.js +7 -7
  400. package/dist/components/features/controls/tools-context-menu-icon-text.cjs +1 -1
  401. package/dist/components/features/controls/tools-context-menu-icon-text.cjs.map +1 -1
  402. package/dist/components/features/controls/tools-context-menu-icon-text.js +16 -16
  403. package/dist/components/features/controls/tools-context-menu-icon-text.js.map +1 -1
  404. package/dist/components/features/conversation/conversation-name-context-menu-icon-text.cjs +1 -1
  405. package/dist/components/features/conversation/conversation-name-context-menu-icon-text.cjs.map +1 -1
  406. package/dist/components/features/conversation/conversation-name-context-menu-icon-text.js +11 -11
  407. package/dist/components/features/conversation/conversation-name-context-menu-icon-text.js.map +1 -1
  408. package/dist/components/features/conversation/conversation-name-with-status.cjs +1 -1
  409. package/dist/components/features/conversation/conversation-name-with-status.js +11 -11
  410. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.cjs +1 -1
  411. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.cjs.map +1 -1
  412. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.js +60 -47
  413. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.js.map +1 -1
  414. package/dist/components/features/conversation-panel/cloud-new-conversation-menu.cjs +1 -1
  415. package/dist/components/features/conversation-panel/cloud-new-conversation-menu.cjs.map +1 -1
  416. package/dist/components/features/conversation-panel/cloud-new-conversation-menu.js +86 -82
  417. package/dist/components/features/conversation-panel/cloud-new-conversation-menu.js.map +1 -1
  418. package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.cjs +1 -1
  419. package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.js +4 -4
  420. package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.cjs +1 -1
  421. package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.js +9 -9
  422. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.cjs +1 -1
  423. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.cjs.map +1 -1
  424. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.js +93 -93
  425. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.js.map +1 -1
  426. package/dist/components/features/conversation-panel/conversation-panel.cjs +1 -1
  427. package/dist/components/features/conversation-panel/conversation-panel.cjs.map +1 -1
  428. package/dist/components/features/conversation-panel/conversation-panel.js +177 -177
  429. package/dist/components/features/conversation-panel/conversation-panel.js.map +1 -1
  430. package/dist/components/features/conversation-panel/ellipsis-button.cjs +1 -1
  431. package/dist/components/features/conversation-panel/ellipsis-button.cjs.map +1 -1
  432. package/dist/components/features/conversation-panel/ellipsis-button.js +13 -13
  433. package/dist/components/features/conversation-panel/ellipsis-button.js.map +1 -1
  434. package/dist/components/features/conversation-panel/local-new-conversation-menu.cjs +1 -1
  435. package/dist/components/features/conversation-panel/local-new-conversation-menu.cjs.map +1 -1
  436. package/dist/components/features/conversation-panel/local-new-conversation-menu.js +57 -53
  437. package/dist/components/features/conversation-panel/local-new-conversation-menu.js.map +1 -1
  438. package/dist/components/features/conversation-panel/new-conversation-dropdown-styles.cjs +1 -1
  439. package/dist/components/features/conversation-panel/new-conversation-dropdown-styles.cjs.map +1 -1
  440. package/dist/components/features/conversation-panel/new-conversation-dropdown-styles.js +3 -2
  441. package/dist/components/features/conversation-panel/new-conversation-dropdown-styles.js.map +1 -1
  442. package/dist/components/features/conversation-panel/start-task-card/start-task-status-badge.cjs +1 -1
  443. package/dist/components/features/conversation-panel/start-task-card/start-task-status-badge.cjs.map +1 -1
  444. package/dist/components/features/conversation-panel/start-task-card/start-task-status-badge.js +11 -8
  445. package/dist/components/features/conversation-panel/start-task-card/start-task-status-badge.js.map +1 -1
  446. package/dist/components/features/conversation-panel/system-message-modal/tab-content.cjs.map +1 -1
  447. package/dist/components/features/conversation-panel/system-message-modal/tab-content.d.ts +2 -5
  448. package/dist/components/features/conversation-panel/system-message-modal/tab-content.js.map +1 -1
  449. package/dist/components/features/files-tab/file-content-viewer.cjs +1 -1
  450. package/dist/components/features/files-tab/file-content-viewer.cjs.map +1 -1
  451. package/dist/components/features/files-tab/file-content-viewer.js +45 -42
  452. package/dist/components/features/files-tab/file-content-viewer.js.map +1 -1
  453. package/dist/components/features/home/llm-not-configured-banner.d.ts +11 -0
  454. package/dist/components/features/home/shared/dropdown-item.cjs +1 -1
  455. package/dist/components/features/home/shared/dropdown-item.cjs.map +1 -1
  456. package/dist/components/features/home/shared/dropdown-item.js +20 -16
  457. package/dist/components/features/home/shared/dropdown-item.js.map +1 -1
  458. package/dist/components/features/home/shared/generic-dropdown-menu.cjs +1 -1
  459. package/dist/components/features/home/shared/generic-dropdown-menu.cjs.map +1 -1
  460. package/dist/components/features/home/shared/generic-dropdown-menu.js +23 -22
  461. package/dist/components/features/home/shared/generic-dropdown-menu.js.map +1 -1
  462. package/dist/components/features/home/workspace-dropdown/folder-browser-modal.cjs +1 -1
  463. package/dist/components/features/home/workspace-dropdown/folder-browser-modal.cjs.map +1 -1
  464. package/dist/components/features/home/workspace-dropdown/folder-browser-modal.js +103 -102
  465. package/dist/components/features/home/workspace-dropdown/folder-browser-modal.js.map +1 -1
  466. package/dist/components/features/home/workspace-dropdown/manage-workspaces-modal.cjs +1 -1
  467. package/dist/components/features/home/workspace-dropdown/manage-workspaces-modal.cjs.map +1 -1
  468. package/dist/components/features/home/workspace-dropdown/manage-workspaces-modal.js +68 -67
  469. package/dist/components/features/home/workspace-dropdown/manage-workspaces-modal.js.map +1 -1
  470. package/dist/components/features/mcp-page/custom-server-editor.cjs +1 -1
  471. package/dist/components/features/mcp-page/custom-server-editor.cjs.map +1 -1
  472. package/dist/components/features/mcp-page/custom-server-editor.js +62 -60
  473. package/dist/components/features/mcp-page/custom-server-editor.js.map +1 -1
  474. package/dist/components/features/mcp-page/index.cjs +1 -1
  475. package/dist/components/features/mcp-page/index.d.ts +1 -0
  476. package/dist/components/features/mcp-page/index.js +1 -0
  477. package/dist/components/features/mcp-page/install-server-modal.cjs +1 -1
  478. package/dist/components/features/mcp-page/install-server-modal.cjs.map +1 -1
  479. package/dist/components/features/mcp-page/install-server-modal.js +141 -121
  480. package/dist/components/features/mcp-page/install-server-modal.js.map +1 -1
  481. package/dist/components/features/mcp-page/save-as-secret-toggle.cjs +2 -0
  482. package/dist/components/features/mcp-page/save-as-secret-toggle.cjs.map +1 -0
  483. package/dist/components/features/mcp-page/save-as-secret-toggle.d.ts +7 -0
  484. package/dist/components/features/mcp-page/save-as-secret-toggle.js +50 -0
  485. package/dist/components/features/mcp-page/save-as-secret-toggle.js.map +1 -0
  486. package/dist/components/features/onboarding/onboarding-modal.d.ts +2 -2
  487. package/dist/components/features/onboarding/steps/check-backend-step.d.ts +1 -1
  488. package/dist/components/features/onboarding/steps/choose-agent-step.d.ts +2 -1
  489. package/dist/components/features/onboarding/steps/setup-acp-secrets-step.d.ts +19 -10
  490. package/dist/components/features/settings/llm-profiles/llm-settings-local-view.cjs +1 -1
  491. package/dist/components/features/settings/llm-profiles/llm-settings-local-view.d.ts +5 -0
  492. package/dist/components/features/settings/llm-profiles/llm-settings-local-view.js +2 -0
  493. package/dist/components/features/settings/llm-profiles/profile-actions-menu.cjs +1 -1
  494. package/dist/components/features/settings/llm-profiles/profile-actions-menu.js +1 -0
  495. package/dist/components/features/skills/extensions-navigation.cjs +1 -1
  496. package/dist/components/features/skills/extensions-navigation.cjs.map +1 -1
  497. package/dist/components/features/skills/extensions-navigation.js +1 -1
  498. package/dist/components/features/skills/extensions-navigation.js.map +1 -1
  499. package/dist/components/shared/buttons/back-nav-button.cjs +2 -0
  500. package/dist/components/shared/buttons/back-nav-button.cjs.map +1 -0
  501. package/dist/components/shared/buttons/back-nav-button.d.ts +17 -0
  502. package/dist/components/shared/buttons/back-nav-button.js +33 -0
  503. package/dist/components/shared/buttons/back-nav-button.js.map +1 -0
  504. package/dist/components/shared/buttons/conversation-confirmation-buttons.cjs +1 -1
  505. package/dist/components/shared/buttons/conversation-confirmation-buttons.js +5 -5
  506. package/dist/components/shared/filters/enum-filter-dropdown.cjs +1 -1
  507. package/dist/components/shared/filters/enum-filter-dropdown.cjs.map +1 -1
  508. package/dist/components/shared/filters/enum-filter-dropdown.js +32 -31
  509. package/dist/components/shared/filters/enum-filter-dropdown.js.map +1 -1
  510. package/dist/components/shared/modals/confirmation-modals/base-modal.cjs +1 -1
  511. package/dist/components/shared/modals/confirmation-modals/base-modal.cjs.map +1 -1
  512. package/dist/components/shared/modals/confirmation-modals/base-modal.js +14 -13
  513. package/dist/components/shared/modals/confirmation-modals/base-modal.js.map +1 -1
  514. package/dist/components/shared/modals/settings/settings-modal.cjs +1 -1
  515. package/dist/components/shared/modals/settings/settings-modal.cjs.map +1 -1
  516. package/dist/components/shared/modals/settings/settings-modal.js +17 -16
  517. package/dist/components/shared/modals/settings/settings-modal.js.map +1 -1
  518. package/dist/components/shared/text-shimmer.cjs +2 -0
  519. package/dist/components/shared/text-shimmer.cjs.map +1 -0
  520. package/dist/components/shared/text-shimmer.d.ts +11 -0
  521. package/dist/components/shared/text-shimmer.js +43 -0
  522. package/dist/components/shared/text-shimmer.js.map +1 -0
  523. package/dist/constants/acp-providers.cjs +1 -1
  524. package/dist/constants/acp-providers.cjs.map +1 -1
  525. package/dist/constants/acp-providers.d.ts +16 -3
  526. package/dist/constants/acp-providers.js +0 -1
  527. package/dist/constants/acp-providers.js.map +1 -1
  528. package/dist/contexts/active-backend-context.cjs +1 -1
  529. package/dist/contexts/active-backend-context.cjs.map +1 -1
  530. package/dist/contexts/active-backend-context.js +32 -32
  531. package/dist/contexts/active-backend-context.js.map +1 -1
  532. package/dist/hooks/chat/use-chat-input-logic.cjs +1 -1
  533. package/dist/hooks/chat/use-chat-input-logic.cjs.map +1 -1
  534. package/dist/hooks/chat/use-chat-input-logic.js +13 -6
  535. package/dist/hooks/chat/use-chat-input-logic.js.map +1 -1
  536. package/dist/hooks/mutation/use-save-fields-as-secrets.cjs +2 -0
  537. package/dist/hooks/mutation/use-save-fields-as-secrets.cjs.map +1 -0
  538. package/dist/hooks/mutation/use-save-fields-as-secrets.d.ts +9 -0
  539. package/dist/hooks/mutation/use-save-fields-as-secrets.js +24 -0
  540. package/dist/hooks/mutation/use-save-fields-as-secrets.js.map +1 -0
  541. package/dist/hooks/mutation/use-unified-start-conversation.cjs +1 -1
  542. package/dist/hooks/mutation/use-unified-start-conversation.js +8 -8
  543. package/dist/hooks/mutation/use-unified-stop-conversation.cjs +1 -1
  544. package/dist/hooks/mutation/use-unified-stop-conversation.js +15 -15
  545. package/dist/hooks/query/use-acp-auth-status.d.ts +36 -0
  546. package/dist/hooks/query/use-agent-settings-schema.cjs +1 -1
  547. package/dist/hooks/query/use-agent-settings-schema.cjs.map +1 -1
  548. package/dist/hooks/query/use-agent-settings-schema.js +26 -16
  549. package/dist/hooks/query/use-agent-settings-schema.js.map +1 -1
  550. package/dist/hooks/query/use-backends-health.cjs +1 -1
  551. package/dist/hooks/query/use-backends-health.cjs.map +1 -1
  552. package/dist/hooks/query/use-backends-health.d.ts +2 -0
  553. package/dist/hooks/query/use-backends-health.js +31 -21
  554. package/dist/hooks/query/use-backends-health.js.map +1 -1
  555. package/dist/hooks/query/use-paginated-conversations.cjs +1 -1
  556. package/dist/hooks/query/use-paginated-conversations.cjs.map +1 -1
  557. package/dist/hooks/query/use-paginated-conversations.js +15 -14
  558. package/dist/hooks/query/use-paginated-conversations.js.map +1 -1
  559. package/dist/hooks/query/use-settings.cjs +1 -1
  560. package/dist/hooks/query/use-settings.cjs.map +1 -1
  561. package/dist/hooks/query/use-settings.js +65 -52
  562. package/dist/hooks/query/use-settings.js.map +1 -1
  563. package/dist/hooks/query/use-user-conversation.cjs +1 -1
  564. package/dist/hooks/query/use-user-conversation.cjs.map +1 -1
  565. package/dist/hooks/query/use-user-conversation.js +20 -11
  566. package/dist/hooks/query/use-user-conversation.js.map +1 -1
  567. package/dist/hooks/use-agent-state.cjs +1 -1
  568. package/dist/hooks/use-agent-state.js +13 -13
  569. package/dist/hooks/use-conversation-name-context-menu.cjs +1 -1
  570. package/dist/hooks/use-conversation-name-context-menu.js +10 -10
  571. package/dist/hooks/use-conversation-name-context-menu.js.map +1 -1
  572. package/dist/hooks/use-llm-configured.d.ts +25 -0
  573. package/dist/hooks/use-runtime-is-ready.cjs +1 -1
  574. package/dist/hooks/use-runtime-is-ready.js +5 -5
  575. package/dist/i18n/declaration.cjs +1 -1
  576. package/dist/i18n/declaration.cjs.map +1 -1
  577. package/dist/i18n/declaration.d.ts +19 -1
  578. package/dist/i18n/declaration.js +1 -1
  579. package/dist/i18n/declaration.js.map +1 -1
  580. package/dist/i18n/translation.cjs +3 -3
  581. package/dist/i18n/translation.cjs.map +1 -1
  582. package/dist/i18n/translation.js +321 -15
  583. package/dist/i18n/translation.js.map +1 -1
  584. package/dist/icons/stop-circle.cjs +1 -1
  585. package/dist/icons/stop-circle.cjs.map +1 -1
  586. package/dist/icons/stop-circle.js +7 -10
  587. package/dist/icons/stop-circle.js.map +1 -1
  588. package/dist/locales/ar/openhands.json +20 -2
  589. package/dist/locales/ca/openhands.json +20 -2
  590. package/dist/locales/de/openhands.json +20 -2
  591. package/dist/locales/en/openhands.json +20 -2
  592. package/dist/locales/es/openhands.json +20 -2
  593. package/dist/locales/fr/openhands.json +20 -2
  594. package/dist/locales/it/openhands.json +20 -2
  595. package/dist/locales/ja/openhands.json +20 -2
  596. package/dist/locales/ko-KR/openhands.json +20 -2
  597. package/dist/locales/no/openhands.json +20 -2
  598. package/dist/locales/pt/openhands.json +20 -2
  599. package/dist/locales/tr/openhands.json +20 -2
  600. package/dist/locales/uk/openhands.json +20 -2
  601. package/dist/locales/zh-CN/openhands.json +20 -2
  602. package/dist/locales/zh-TW/openhands.json +20 -2
  603. package/dist/node_modules/framer-motion/dist/es/utils/reduced-motion/use-reduced-motion.cjs +2 -0
  604. package/dist/node_modules/framer-motion/dist/es/utils/reduced-motion/use-reduced-motion.cjs.map +1 -0
  605. package/dist/node_modules/framer-motion/dist/es/utils/reduced-motion/use-reduced-motion.js +15 -0
  606. package/dist/node_modules/framer-motion/dist/es/utils/reduced-motion/use-reduced-motion.js.map +1 -0
  607. package/dist/package.cjs +1 -1
  608. package/dist/package.cjs.map +1 -1
  609. package/dist/package.js +1 -1
  610. package/dist/package.js.map +1 -1
  611. package/dist/routes/conversation.cjs +1 -1
  612. package/dist/routes/conversation.cjs.map +1 -1
  613. package/dist/routes/conversation.js +1 -1
  614. package/dist/routes/conversation.js.map +1 -1
  615. package/dist/routes/llm-settings.cjs +1 -1
  616. package/dist/routes/llm-settings.cjs.map +1 -1
  617. package/dist/routes/llm-settings.js +55 -54
  618. package/dist/routes/llm-settings.js.map +1 -1
  619. package/dist/routes/secrets-settings.cjs +1 -1
  620. package/dist/routes/secrets-settings.cjs.map +1 -1
  621. package/dist/routes/secrets-settings.js +19 -27
  622. package/dist/routes/secrets-settings.js.map +1 -1
  623. package/dist/stores/conversation-store.cjs +1 -1
  624. package/dist/stores/conversation-store.cjs.map +1 -1
  625. package/dist/stores/conversation-store.d.ts +4 -0
  626. package/dist/stores/conversation-store.js +6 -0
  627. package/dist/stores/conversation-store.js.map +1 -1
  628. package/dist/types/agent-server/core/events/acp-tool-call-event.d.ts +6 -4
  629. package/dist/types/agent-server/core/events/system-event.d.ts +5 -0
  630. package/dist/types/automation.d.ts +15 -0
  631. package/dist/types/settings.d.ts +3 -1
  632. package/dist/ui/combobox-caret.cjs +1 -1
  633. package/dist/ui/combobox-caret.cjs.map +1 -1
  634. package/dist/ui/combobox-caret.d.ts +1 -1
  635. package/dist/ui/combobox-caret.js +9 -8
  636. package/dist/ui/combobox-caret.js.map +1 -1
  637. package/dist/ui/context-menu.cjs +1 -1
  638. package/dist/ui/context-menu.cjs.map +1 -1
  639. package/dist/ui/context-menu.js +9 -8
  640. package/dist/ui/context-menu.js.map +1 -1
  641. package/dist/ui/dropdown/dropdown-menu.cjs +1 -1
  642. package/dist/ui/dropdown/dropdown-menu.cjs.map +1 -1
  643. package/dist/ui/dropdown/dropdown-menu.js +21 -17
  644. package/dist/ui/dropdown/dropdown-menu.js.map +1 -1
  645. package/dist/ui/dropdown/dropdown.cjs +1 -1
  646. package/dist/ui/dropdown/dropdown.cjs.map +1 -1
  647. package/dist/ui/dropdown/dropdown.js +2 -2
  648. package/dist/ui/dropdown/dropdown.js.map +1 -1
  649. package/dist/utils/automation-schedule.d.ts +1 -0
  650. package/dist/utils/dropdown-classes.cjs +2 -0
  651. package/dist/utils/dropdown-classes.cjs.map +1 -0
  652. package/dist/utils/dropdown-classes.d.ts +32 -0
  653. package/dist/utils/dropdown-classes.js +8 -0
  654. package/dist/utils/dropdown-classes.js.map +1 -0
  655. package/dist/utils/form-control-classes.cjs +1 -1
  656. package/dist/utils/form-control-classes.cjs.map +1 -1
  657. package/dist/utils/form-control-classes.d.ts +18 -2
  658. package/dist/utils/form-control-classes.js +4 -3
  659. package/dist/utils/form-control-classes.js.map +1 -1
  660. package/dist/utils/git-control-bar-classes.cjs +2 -0
  661. package/dist/utils/git-control-bar-classes.cjs.map +1 -0
  662. package/dist/utils/git-control-bar-classes.d.ts +4 -0
  663. package/dist/utils/git-control-bar-classes.js +14 -0
  664. package/dist/utils/git-control-bar-classes.js.map +1 -0
  665. package/dist/utils/handle-event-for-ui.cjs.map +1 -1
  666. package/dist/utils/handle-event-for-ui.d.ts +6 -3
  667. package/dist/utils/handle-event-for-ui.js.map +1 -1
  668. package/dist/utils/mobile-top-bar-icon-button-classes.cjs +1 -1
  669. package/dist/utils/mobile-top-bar-icon-button-classes.cjs.map +1 -1
  670. package/dist/utils/mobile-top-bar-icon-button-classes.js +3 -3
  671. package/dist/utils/mobile-top-bar-icon-button-classes.js.map +1 -1
  672. package/dist/utils/modal-classes.cjs +2 -0
  673. package/dist/utils/modal-classes.cjs.map +1 -0
  674. package/dist/utils/modal-classes.d.ts +8 -0
  675. package/dist/utils/modal-classes.js +7 -0
  676. package/dist/utils/modal-classes.js.map +1 -0
  677. package/dist/utils/openhands-llm.cjs +2 -0
  678. package/dist/utils/openhands-llm.cjs.map +1 -0
  679. package/dist/utils/openhands-llm.d.ts +2 -0
  680. package/dist/utils/openhands-llm.js +9 -0
  681. package/dist/utils/openhands-llm.js.map +1 -0
  682. package/dist/utils/redact-custom-secrets.cjs +2 -0
  683. package/dist/utils/redact-custom-secrets.cjs.map +1 -0
  684. package/dist/utils/redact-custom-secrets.d.ts +6 -0
  685. package/dist/utils/redact-custom-secrets.js +10 -0
  686. package/dist/utils/redact-custom-secrets.js.map +1 -0
  687. package/dist/utils/status.cjs +1 -1
  688. package/dist/utils/status.cjs.map +1 -1
  689. package/dist/utils/status.d.ts +2 -1
  690. package/dist/utils/status.js +9 -8
  691. package/dist/utils/status.js.map +1 -1
  692. package/dist/utils/system-message-adapter.cjs +1 -1
  693. package/dist/utils/system-message-adapter.cjs.map +1 -1
  694. package/dist/utils/system-message-adapter.js +10 -7
  695. package/dist/utils/system-message-adapter.js.map +1 -1
  696. package/dist/utils/utils.cjs +1 -1
  697. package/dist/utils/utils.cjs.map +1 -1
  698. package/dist/utils/utils.d.ts +2 -1
  699. package/dist/utils/utils.js +21 -20
  700. package/dist/utils/utils.js.map +1 -1
  701. package/package.json +1 -1
  702. package/scripts/dev-safe.mjs +3 -1
  703. package/scripts/dev-static.mjs +2 -2
  704. package/scripts/dev-with-automation.mjs +283 -108
  705. package/scripts/static-build.mjs +20 -19
  706. package/scripts/static-server.mjs +50 -3
  707. package/build/assets/acp-providers-CbiRekh9.js +0 -1
  708. package/build/assets/active-backend-context-cCM1vYYZ.js +0 -1
  709. package/build/assets/add-backend-modal-DIUQzMPa.js +0 -1
  710. package/build/assets/agent-server-client-options-Bc5ZorQZ.js +0 -1
  711. package/build/assets/agent-server-compatibility-BlkUsrX2.js +0 -1
  712. package/build/assets/agent-server-conversation-service.api-C2V5SlHu.js +0 -5
  713. package/build/assets/api-key-entry-screen-B2gynaCp.js +0 -1
  714. package/build/assets/automation-detail-DJvbVSYK.js +0 -1
  715. package/build/assets/automations-list-6FDbI5dc.js +0 -1
  716. package/build/assets/backend-form-modal-Dnk33xA_.js +0 -1
  717. package/build/assets/base-modal-_dYTw1ri.js +0 -1
  718. package/build/assets/brand-button-Br7f0kZJ.js +0 -1
  719. package/build/assets/browser-store-Couc4S5D.js +0 -1
  720. package/build/assets/clock-BRjCgHTc.js +0 -1
  721. package/build/assets/combobox-caret-to1O8irE.js +0 -1
  722. package/build/assets/context-menu-list-item-CWNFpuiC.js +0 -1
  723. package/build/assets/conversation-DVrKU0oz.js +0 -19
  724. package/build/assets/conversation-Dlys-D5A.js +0 -1
  725. package/build/assets/conversation-panel-iF09WjZ4.js +0 -1
  726. package/build/assets/conversation-service.api-CCfztilW.js +0 -1
  727. package/build/assets/conversation-state-store-u5jepov0.js +0 -1
  728. package/build/assets/conversation-store-Z5iMCRpc.js +0 -1
  729. package/build/assets/conversation-websocket-context-DhJhqUna.js +0 -3
  730. package/build/assets/declaration-BNMqORFE.js +0 -1
  731. package/build/assets/dist-BxBP7tFD.js +0 -1
  732. package/build/assets/edit-automation-modal-BGzR3nfZ.js +0 -1
  733. package/build/assets/ellipsis-button-ZyLMPURn.js +0 -1
  734. package/build/assets/entry.client-1VMHpktY.js +0 -2
  735. package/build/assets/enum-filter-dropdown-CEgCdu4A.js +0 -1
  736. package/build/assets/extensions-hub-C651jsVh.js +0 -1
  737. package/build/assets/files-tab-R5z0lLdY.js +0 -1
  738. package/build/assets/files-tab-store-CDyVTXNT.js +0 -1
  739. package/build/assets/git-control-bar-branch-button-COdRAYHb.js +0 -27
  740. package/build/assets/git-provider-icon-BzLbc0yC.js +0 -1
  741. package/build/assets/home-e-egNUXZ.js +0 -1
  742. package/build/assets/install-server-modal-DHlbgqVH.js +0 -1
  743. package/build/assets/launch-CshDse3e.js +0 -1
  744. package/build/assets/link-external-D2POYx4c.js +0 -1
  745. package/build/assets/llm-settings-Bql-vydt.js +0 -1
  746. package/build/assets/llm-settings-C_tal6Ds.js +0 -1
  747. package/build/assets/manage-backends-modal-l7RkKfwX.js +0 -1
  748. package/build/assets/manage-workspaces-modal-DhKF_8z3.js +0 -1
  749. package/build/assets/manifest-3bf30d69.js +0 -1
  750. package/build/assets/mcp-ByeBfdfU.js +0 -9
  751. package/build/assets/messages-D0rWot7s.js +0 -36
  752. package/build/assets/proxy-CxydCnis.js +0 -1
  753. package/build/assets/root-DHeCXo9N.css +0 -1
  754. package/build/assets/root-layout-Czo9Ma6Q.js +0 -2
  755. package/build/assets/secrets-service-BsnKFc2x.js +0 -1
  756. package/build/assets/secrets-settings-Bz_UohPJ.js +0 -1
  757. package/build/assets/settings-client-C73C7IgV.js +0 -1
  758. package/build/assets/settings-index-Dz0BmdJD.js +0 -1
  759. package/build/assets/settings-list-classes-Bf80tWtc.js +0 -1
  760. package/build/assets/settings-modal-Brzgh5Yw.js +0 -1
  761. package/build/assets/settings-service.api-CZ3uWx4v.js +0 -1
  762. package/build/assets/sidebar-mobile-menu-toggle-Do_aA9Zm.js +0 -1
  763. package/build/assets/skills-settings-DlA5hlXw.js +0 -2
  764. package/build/assets/status-hp6M6E7E.js +0 -1
  765. package/build/assets/use-agent-settings-schema-33Un7UF2.js +0 -1
  766. package/build/assets/use-is-authed-BggE5wPj.js +0 -1
  767. package/build/assets/use-llm-profiles-DDOol3gK.js +0 -1
  768. package/build/assets/use-runtime-is-ready-B7EF4BKU.js +0 -1
  769. package/build/assets/use-settings-DQIZmIov.js +0 -1
  770. package/build/assets/use-user-conversation-C6hrMMtn.js +0 -1
  771. package/build/assets/utils-i18rdUj2.js +0 -1
  772. package/build/assets/vendor~conversation-panel~conversation-a9SyrrhV.js +0 -1
  773. package/build/assets/vendor~conversation-panel~conversation~index-C23ZXO4R.js +0 -1
  774. package/build/assets/vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~i4kjfqhl-BebWhFNT.js +0 -1
  775. package/build/assets/vendor~root-layout~home~conversation-panel~conversation~extensions-hub~skills-settings~skil~iguv7bgw-DzIXV3Ui.js +0 -9
  776. /package/build/assets/{automation-IdgZq6ZK.js → automation-XDPAjiZi.js} +0 -0
  777. /package/build/assets/{color-themes-DSaoIL6A.js → color-themes-B9pm9c-R.js} +0 -0
  778. /package/build/assets/{common-DR1t-EeP.js → common-DqjLSBOt.js} +0 -0
  779. /package/build/assets/{conversation-local-storage-UYl-SX-r.js → conversation-local-storage-YmOVXxxW.js} +0 -0
  780. /package/build/assets/{dist-C6t0EXL7.js → dist-C3NfioQC.js} +0 -0
  781. /package/build/assets/{environment-switch-store-C4ulFJKp.js → environment-switch-store-CiurvTtK.js} +0 -0
  782. /package/build/assets/{health-store-BDC2rM-X.js → health-store-B5f0S2FY.js} +0 -0
  783. /package/build/assets/{map-provider-COBVzZYo.js → map-provider-BJ_8KZKU.js} +0 -0
  784. /package/build/assets/{middleware-BC9EwbB9.js → middleware-CfatjPYZ.js} +0 -0
  785. /package/build/assets/{objectWithoutPropertiesLoose-Du6eBn-V.js → objectWithoutPropertiesLoose-DSQKyRhw.js} +0 -0
  786. /package/build/assets/{react-Do0CT17Y.js → react-Dy05vyj5.js} +0 -0
  787. /package/build/assets/{sdk-settings-field-metadata-CBPmeqYa.js → sdk-settings-field-metadata-DQiaIBie.js} +0 -0
  788. /package/build/assets/{settings-D_H-qsRm.js → settings-DGY6n4J2.js} +0 -0
  789. /package/build/assets/{settings-like-page-layout-classes-I0BDBEoq.js → settings-like-page-layout-classes-D7YjdTd0.js} +0 -0
  790. /package/build/assets/{use-breakpoint-DbJ6FkQ-.js → use-breakpoint-DF_RiQ6s.js} +0 -0
  791. /package/build/assets/{use-click-outside-element-DffgWWoZ.js → use-click-outside-element-DhxCUyWl.js} +0 -0
  792. /package/build/assets/{v4-CNn21NXa.js → v4-khGvL7i2.js} +0 -0
  793. /package/build/assets/{vendor~browser-DDiZgqD3.js → vendor~browser-DisFGEp9.js} +0 -0
  794. /package/build/assets/{vendor~browser-tab-BgwV1mxF.js → vendor~browser-tab-BxhTtM9_.js} +0 -0
  795. /package/build/assets/{vendor~conversation-panel~conversation~alert-banner-DbvX3OcM.js → vendor~conversation-panel~conversation~alert-banner-w-I2sY6c.js} +0 -0
  796. /package/build/assets/{vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~skills-set~zm51vy4j-iOsylxCS.js → vendor~entry.client~root~root-layout~home~conversation-panel~conversation~launch~skills-set~zm51vy4j-BClAMeFe.js} +0 -0
  797. /package/build/assets/{vendor~files-tab-BGKayPiK.js → vendor~files-tab-BtkpAiMX.js} +0 -0
  798. /package/build/assets/{vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-BW6261Sb.js → vendor~home~conversation-panel~conversation~shared-conversation~planner-tab~files-tab-CyZ-3lDQ.js} +0 -0
  799. /package/build/assets/{vendor~home~mcp~automations-list-DoPfwaXj.js → vendor~home~mcp~automations-list-BgV86Sti.js} +0 -0
  800. /package/build/assets/{vendor~launch-vdeRTWFu.js → vendor~launch-BXgl67Re.js} +0 -0
  801. /package/build/assets/{vendor~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-settin~ninslayh-D9P8e98a.js → vendor~root-layout~home~conversation-panel~conversation~launch~extensions-hub~skills-settin~ninslayh-CLlsvdNP.js} +0 -0
  802. /package/build/assets/{vendor~terminal-DUrOWGFE.js → vendor~terminal-DZaJIY8A.js} +0 -0
@@ -1,68 +1,68 @@
1
1
  import { makeDefaultLocalBackend as e } from "../api/backend-registry/default-backend.js";
2
- import { getActiveSelection as t, getRegisteredBackends as n, getSnapshot as r, setActiveSelection as i, setRegisteredBackends as a, subscribeActiveBackend as o } from "../api/backend-registry/active-store.js";
3
- import { dropBackendHealth as s, resetBackendHealth as c } from "../api/backend-registry/health-store.js";
4
- import l from "react";
5
- import { jsx as u } from "react/jsx-runtime";
2
+ import { NO_BACKEND as t, getActiveSelection as n, getRegisteredBackends as r, getSnapshot as i, setActiveSelection as a, setRegisteredBackends as o, subscribeActiveBackend as s } from "../api/backend-registry/active-store.js";
3
+ import { dropBackendHealth as c, resetBackendHealth as l } from "../api/backend-registry/health-store.js";
4
+ import u from "react";
5
+ import { jsx as d } from "react/jsx-runtime";
6
6
  //#region src/contexts/active-backend-context.tsx
7
- var d = l.createContext(null);
8
- function f() {
7
+ var f = u.createContext(null);
8
+ function p() {
9
9
  return typeof crypto < "u" && typeof crypto.randomUUID == "function" ? crypto.randomUUID() : `backend-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;
10
10
  }
11
- function p({ children: e }) {
12
- let p = l.useSyncExternalStore(o, r, r), m = l.useCallback((e, n) => {
13
- let r = t()?.backendId ?? null, a = t()?.orgId ?? null, o = n ?? null;
14
- e === r && o === a || i({
11
+ function m({ children: e }) {
12
+ let t = u.useSyncExternalStore(s, i, i), m = u.useCallback((e, t) => {
13
+ let r = n()?.backendId ?? null, i = n()?.orgId ?? null, o = t ?? null;
14
+ e === r && o === i || a({
15
15
  backendId: e,
16
16
  orgId: o
17
17
  });
18
- }, []), h = l.useCallback((e) => {
18
+ }, []), h = u.useCallback((e) => {
19
19
  let t = {
20
20
  ...e,
21
- id: f()
21
+ id: p()
22
22
  };
23
- return a([...n(), t]), i({ backendId: t.id }), t;
24
- }, []), g = l.useCallback((e, t) => {
25
- let r = n().find((t) => t.id === e);
26
- a(n().map((n) => n.id === e ? {
23
+ return o([...r(), t]), a({ backendId: t.id }), t;
24
+ }, []), g = u.useCallback((e, t) => {
25
+ let n = r().find((t) => t.id === e);
26
+ o(r().map((n) => n.id === e ? {
27
27
  ...n,
28
28
  ...t
29
29
  } : n));
30
- let i = t.host !== void 0 && r !== void 0 && t.host !== r.host, o = t.apiKey !== void 0 && r !== void 0 && t.apiKey !== r.apiKey;
31
- (i || o) && c(e);
32
- }, []), _ = l.useCallback((e) => {
33
- a(n().filter((t) => t.id !== e)), s(e);
34
- }, []), v = l.useMemo(() => ({
35
- backends: p.backends,
36
- active: p.active,
30
+ let i = t.host !== void 0 && n !== void 0 && t.host !== n.host, a = t.apiKey !== void 0 && n !== void 0 && t.apiKey !== n.apiKey;
31
+ (i || a) && l(e);
32
+ }, []), _ = u.useCallback((e) => {
33
+ o(r().filter((t) => t.id !== e)), c(e);
34
+ }, []), v = u.useMemo(() => ({
35
+ backends: t.backends,
36
+ active: t.active,
37
37
  setActive: m,
38
38
  addBackend: h,
39
39
  updateBackend: g,
40
40
  removeBackend: _
41
41
  }), [
42
- p,
42
+ t,
43
43
  m,
44
44
  h,
45
45
  g,
46
46
  _
47
47
  ]);
48
- return /* @__PURE__ */ u(d.Provider, {
48
+ return /* @__PURE__ */ d(f.Provider, {
49
49
  value: v,
50
50
  children: e
51
51
  });
52
52
  }
53
- function m() {
54
- let e = l.useContext(d);
53
+ function h() {
54
+ let e = u.useContext(f);
55
55
  if (!e) throw Error("useActiveBackendContext must be used inside <ActiveBackendProvider>");
56
56
  return e;
57
57
  }
58
- function h() {
59
- let t = l.useContext(d);
60
- return t ? t.active : {
61
- backend: e(),
58
+ function g() {
59
+ let n = u.useContext(f);
60
+ return n ? n.active : {
61
+ backend: e() ?? t,
62
62
  orgId: null
63
63
  };
64
64
  }
65
65
  //#endregion
66
- export { p as ActiveBackendProvider, h as useActiveBackend, m as useActiveBackendContext };
66
+ export { m as ActiveBackendProvider, g as useActiveBackend, h as useActiveBackendContext };
67
67
 
68
68
  //# sourceMappingURL=active-backend-context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"active-backend-context.js","names":[],"sources":["../../src/contexts/active-backend-context.tsx"],"sourcesContent":["import React from \"react\";\nimport {\n getActiveSelection,\n getRegisteredBackends,\n getSnapshot,\n setActiveSelection,\n setRegisteredBackends,\n subscribeActiveBackend,\n} from \"#/api/backend-registry/active-store\";\nimport { makeDefaultLocalBackend } from \"#/api/backend-registry/default-backend\";\nimport {\n dropBackendHealth,\n resetBackendHealth,\n} from \"#/api/backend-registry/health-store\";\nimport {\n type Backend,\n type BackendSelection,\n type ResolvedActiveBackend,\n} from \"#/api/backend-registry/types\";\n\ninterface ActiveBackendContextValue {\n backends: Backend[];\n active: ResolvedActiveBackend;\n setActive: (backendId: string, orgId?: string | null) => void;\n addBackend: (backend: Omit<Backend, \"id\">) => Backend;\n updateBackend: (id: string, patch: Partial<Omit<Backend, \"id\">>) => void;\n removeBackend: (id: string) => void;\n}\n\nconst ActiveBackendContext =\n React.createContext<ActiveBackendContextValue | null>(null);\n\nfunction generateId(): string {\n if (\n typeof crypto !== \"undefined\" &&\n typeof crypto.randomUUID === \"function\"\n ) {\n return crypto.randomUUID();\n }\n return `backend-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;\n}\n\nexport function ActiveBackendProvider({\n children,\n}: {\n children: React.ReactNode;\n}) {\n const snapshot = React.useSyncExternalStore(\n subscribeActiveBackend,\n getSnapshot,\n getSnapshot,\n );\n\n const setActive = React.useCallback(\n (backendId: string, orgId?: string | null) => {\n const prevBackendId = getActiveSelection()?.backendId ?? null;\n const prevOrgId = getActiveSelection()?.orgId ?? null;\n const nextOrgId = orgId ?? null;\n\n if (backendId === prevBackendId && nextOrgId === prevOrgId) return;\n\n const next: BackendSelection = { backendId, orgId: nextOrgId };\n setActiveSelection(next);\n\n // No blanket `invalidateQueries()` here. Long-lived queries\n // (`useSettings`, `usePaginatedConversations`,\n // `useGitRepositories`, `useAppInstallations`,\n // `useCloudCurrentUserId`, `useGitUser`, …) include the active\n // backend's `id` and `orgId` in their query keys, so React Query\n // treats a backend/org switch as a brand-new query and fetches\n // automatically — once, with no duplicate waves.\n },\n [],\n );\n\n // @spec BM-001 — Auto-switch to newly connected backend\n const addBackend = React.useCallback(\n (backend: Omit<Backend, \"id\">): Backend => {\n const next: Backend = { ...backend, id: generateId() };\n const list = [...getRegisteredBackends(), next];\n setRegisteredBackends(list);\n setActiveSelection({ backendId: next.id });\n return next;\n },\n [],\n );\n\n const updateBackend = React.useCallback(\n (id: string, patch: Partial<Omit<Backend, \"id\">>) => {\n const prev = getRegisteredBackends().find((b) => b.id === id);\n const list = getRegisteredBackends().map((b) =>\n b.id === id ? { ...b, ...patch } : b,\n );\n setRegisteredBackends(list);\n\n // Re-arm health polling when the user edits the fields that\n // actually drive the probe. Cosmetic edits (name) shouldn't\n // re-enable a backend that was disabled for being unreachable.\n const hostChanged =\n patch.host !== undefined &&\n prev !== undefined &&\n patch.host !== prev.host;\n const apiKeyChanged =\n patch.apiKey !== undefined &&\n prev !== undefined &&\n patch.apiKey !== prev.apiKey;\n if (hostChanged || apiKeyChanged) {\n resetBackendHealth(id);\n }\n },\n [],\n );\n\n const removeBackend = React.useCallback((id: string) => {\n const list = getRegisteredBackends().filter((b) => b.id !== id);\n setRegisteredBackends(list);\n dropBackendHealth(id);\n // If the active selection pointed at this backend, the active\n // store falls back to the first remaining local backend (or the\n // env-derived default if no locals exist); consumer hooks re-key\n // by the new active backend identity and refetch automatically.\n }, []);\n\n const value = React.useMemo<ActiveBackendContextValue>(\n () => ({\n backends: snapshot.backends,\n active: snapshot.active,\n setActive,\n addBackend,\n updateBackend,\n removeBackend,\n }),\n [snapshot, setActive, addBackend, updateBackend, removeBackend],\n );\n\n return (\n <ActiveBackendContext.Provider value={value}>\n {children}\n </ActiveBackendContext.Provider>\n );\n}\n\nexport function useActiveBackendContext(): ActiveBackendContextValue {\n const ctx = React.useContext(ActiveBackendContext);\n if (!ctx) {\n throw new Error(\n \"useActiveBackendContext must be used inside <ActiveBackendProvider>\",\n );\n }\n return ctx;\n}\n\n/**\n * Read the resolved active backend.\n *\n * Falls back to a synthesized env-derived local backend when called\n * outside an `<ActiveBackendProvider>` (e.g. from a unit test that\n * mounts a narrow component without the full provider stack). That\n * synthesized backend is identical to the seed used on first install.\n *\n * Components that need to mutate state (`setActive`, `addBackend`,\n * etc.) must use `useActiveBackendContext()` directly — that throws if\n * the provider is missing, since mutation requires the live store.\n */\nexport function useActiveBackend(): ResolvedActiveBackend {\n const ctx = React.useContext(ActiveBackendContext);\n if (ctx) return ctx.active;\n return { backend: makeDefaultLocalBackend(), orgId: null };\n}\n"],"mappings":";;;;;;AA6BA,IAAM,IACJ,EAAM,cAAgD,KAAK;AAE7D,SAAS,IAAqB;AAO5B,QALE,OAAO,SAAW,OAClB,OAAO,OAAO,cAAe,aAEtB,OAAO,YAAY,GAErB,WAAW,KAAK,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,SAAS,GAAG,CAAC,MAAM,GAAG,GAAG;;AAGzE,SAAgB,EAAsB,EACpC,eAGC;CACD,IAAM,IAAW,EAAM,qBACrB,GACA,GACA,EACD,EAEK,IAAY,EAAM,aACrB,GAAmB,MAA0B;EAC5C,IAAM,IAAgB,GAAoB,EAAE,aAAa,MACnD,IAAY,GAAoB,EAAE,SAAS,MAC3C,IAAY,KAAS;AAEvB,QAAc,KAAiB,MAAc,KAGjD,EAAmB;GADc;GAAW,OAAO;GAChC,CAAK;IAU1B,EAAE,CACH,EAGK,IAAa,EAAM,aACtB,MAA0C;EACzC,IAAM,IAAgB;GAAE,GAAG;GAAS,IAAI,GAAY;GAAE;AAItD,SAFA,EAAsB,CADR,GAAG,GAAuB,EAAE,EACpB,CAAK,EAC3B,EAAmB,EAAE,WAAW,EAAK,IAAI,CAAC,EACnC;IAET,EAAE,CACH,EAEK,IAAgB,EAAM,aACzB,GAAY,MAAwC;EACnD,IAAM,IAAO,GAAuB,CAAC,MAAM,MAAM,EAAE,OAAO,EAAG;AAI7D,IAHa,GAAuB,CAAC,KAAK,MACxC,EAAE,OAAO,IAAK;GAAE,GAAG;GAAG,GAAG;GAAO,GAAG,EAEf,CAAK;EAK3B,IAAM,IACJ,EAAM,SAAS,KAAA,KACf,MAAS,KAAA,KACT,EAAM,SAAS,EAAK,MAChB,IACJ,EAAM,WAAW,KAAA,KACjB,MAAS,KAAA,KACT,EAAM,WAAW,EAAK;AACxB,GAAI,KAAe,MACjB,EAAmB,EAAG;IAG1B,EAAE,CACH,EAEK,IAAgB,EAAM,aAAa,MAAe;AAGtD,EADA,EADa,GAAuB,CAAC,QAAQ,MAAM,EAAE,OAAO,EACtC,CAAK,EAC3B,EAAkB,EAAG;IAKpB,EAAE,CAAC,EAEA,IAAQ,EAAM,eACX;EACL,UAAU,EAAS;EACnB,QAAQ,EAAS;EACjB;EACA;EACA;EACA;EACD,GACD;EAAC;EAAU;EAAW;EAAY;EAAe;EAAc,CAChE;AAED,QACE,kBAAC,EAAqB,UAAtB;EAAsC;EACnC;EAC6B,CAAA;;AAIpC,SAAgB,IAAqD;CACnE,IAAM,IAAM,EAAM,WAAW,EAAqB;AAClD,KAAI,CAAC,EACH,OAAU,MACR,sEACD;AAEH,QAAO;;AAeT,SAAgB,IAA0C;CACxD,IAAM,IAAM,EAAM,WAAW,EAAqB;AAElD,QADI,IAAY,EAAI,SACb;EAAE,SAAS,GAAyB;EAAE,OAAO;EAAM"}
1
+ {"version":3,"file":"active-backend-context.js","names":[],"sources":["../../src/contexts/active-backend-context.tsx"],"sourcesContent":["import React from \"react\";\nimport {\n getActiveSelection,\n getRegisteredBackends,\n getSnapshot,\n NO_BACKEND,\n setActiveSelection,\n setRegisteredBackends,\n subscribeActiveBackend,\n} from \"#/api/backend-registry/active-store\";\nimport { makeDefaultLocalBackend } from \"#/api/backend-registry/default-backend\";\nimport {\n dropBackendHealth,\n resetBackendHealth,\n} from \"#/api/backend-registry/health-store\";\nimport {\n type Backend,\n type BackendSelection,\n type ResolvedActiveBackend,\n} from \"#/api/backend-registry/types\";\n\ninterface ActiveBackendContextValue {\n backends: Backend[];\n active: ResolvedActiveBackend;\n setActive: (backendId: string, orgId?: string | null) => void;\n addBackend: (backend: Omit<Backend, \"id\">) => Backend;\n updateBackend: (id: string, patch: Partial<Omit<Backend, \"id\">>) => void;\n removeBackend: (id: string) => void;\n}\n\nconst ActiveBackendContext =\n React.createContext<ActiveBackendContextValue | null>(null);\n\nfunction generateId(): string {\n if (\n typeof crypto !== \"undefined\" &&\n typeof crypto.randomUUID === \"function\"\n ) {\n return crypto.randomUUID();\n }\n return `backend-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;\n}\n\nexport function ActiveBackendProvider({\n children,\n}: {\n children: React.ReactNode;\n}) {\n const snapshot = React.useSyncExternalStore(\n subscribeActiveBackend,\n getSnapshot,\n getSnapshot,\n );\n\n const setActive = React.useCallback(\n (backendId: string, orgId?: string | null) => {\n const prevBackendId = getActiveSelection()?.backendId ?? null;\n const prevOrgId = getActiveSelection()?.orgId ?? null;\n const nextOrgId = orgId ?? null;\n\n if (backendId === prevBackendId && nextOrgId === prevOrgId) return;\n\n const next: BackendSelection = { backendId, orgId: nextOrgId };\n setActiveSelection(next);\n\n // No blanket `invalidateQueries()` here. Long-lived queries\n // (`useSettings`, `usePaginatedConversations`,\n // `useGitRepositories`, `useAppInstallations`,\n // `useCloudCurrentUserId`, `useGitUser`, …) include the active\n // backend's `id` and `orgId` in their query keys, so React Query\n // treats a backend/org switch as a brand-new query and fetches\n // automatically — once, with no duplicate waves.\n },\n [],\n );\n\n // @spec BM-001 — Auto-switch to newly connected backend\n const addBackend = React.useCallback(\n (backend: Omit<Backend, \"id\">): Backend => {\n const next: Backend = { ...backend, id: generateId() };\n const list = [...getRegisteredBackends(), next];\n setRegisteredBackends(list);\n setActiveSelection({ backendId: next.id });\n return next;\n },\n [],\n );\n\n const updateBackend = React.useCallback(\n (id: string, patch: Partial<Omit<Backend, \"id\">>) => {\n const prev = getRegisteredBackends().find((b) => b.id === id);\n const list = getRegisteredBackends().map((b) =>\n b.id === id ? { ...b, ...patch } : b,\n );\n setRegisteredBackends(list);\n\n // Re-arm health polling when the user edits the fields that\n // actually drive the probe. Cosmetic edits (name) shouldn't\n // re-enable a backend that was disabled for being unreachable.\n const hostChanged =\n patch.host !== undefined &&\n prev !== undefined &&\n patch.host !== prev.host;\n const apiKeyChanged =\n patch.apiKey !== undefined &&\n prev !== undefined &&\n patch.apiKey !== prev.apiKey;\n if (hostChanged || apiKeyChanged) {\n resetBackendHealth(id);\n }\n },\n [],\n );\n\n const removeBackend = React.useCallback((id: string) => {\n const list = getRegisteredBackends().filter((b) => b.id !== id);\n setRegisteredBackends(list);\n dropBackendHealth(id);\n // If the active selection pointed at this backend, the active\n // store falls back to the first remaining local backend (or the\n // env-derived default if no locals exist); consumer hooks re-key\n // by the new active backend identity and refetch automatically.\n }, []);\n\n const value = React.useMemo<ActiveBackendContextValue>(\n () => ({\n backends: snapshot.backends,\n active: snapshot.active,\n setActive,\n addBackend,\n updateBackend,\n removeBackend,\n }),\n [snapshot, setActive, addBackend, updateBackend, removeBackend],\n );\n\n return (\n <ActiveBackendContext.Provider value={value}>\n {children}\n </ActiveBackendContext.Provider>\n );\n}\n\nexport function useActiveBackendContext(): ActiveBackendContextValue {\n const ctx = React.useContext(ActiveBackendContext);\n if (!ctx) {\n throw new Error(\n \"useActiveBackendContext must be used inside <ActiveBackendProvider>\",\n );\n }\n return ctx;\n}\n\n/**\n * Read the resolved active backend.\n *\n * Falls back to a synthesized env-derived local backend when called\n * outside an `<ActiveBackendProvider>` (e.g. from a unit test that\n * mounts a narrow component without the full provider stack). That\n * synthesized backend is identical to the seed used on first install.\n *\n * Components that need to mutate state (`setActive`, `addBackend`,\n * etc.) must use `useActiveBackendContext()` directly — that throws if\n * the provider is missing, since mutation requires the live store.\n */\nexport function useActiveBackend(): ResolvedActiveBackend {\n const ctx = React.useContext(ActiveBackendContext);\n if (ctx) return ctx.active;\n return { backend: makeDefaultLocalBackend() ?? NO_BACKEND, orgId: null };\n}\n"],"mappings":";;;;;;AA8BA,IAAM,IACJ,EAAM,cAAgD,KAAK;AAE7D,SAAS,IAAqB;AAO5B,QALE,OAAO,SAAW,OAClB,OAAO,OAAO,cAAe,aAEtB,OAAO,YAAY,GAErB,WAAW,KAAK,KAAK,CAAC,GAAG,KAAK,QAAQ,CAAC,SAAS,GAAG,CAAC,MAAM,GAAG,GAAG;;AAGzE,SAAgB,EAAsB,EACpC,eAGC;CACD,IAAM,IAAW,EAAM,qBACrB,GACA,GACA,EACD,EAEK,IAAY,EAAM,aACrB,GAAmB,MAA0B;EAC5C,IAAM,IAAgB,GAAoB,EAAE,aAAa,MACnD,IAAY,GAAoB,EAAE,SAAS,MAC3C,IAAY,KAAS;AAEvB,QAAc,KAAiB,MAAc,KAGjD,EAAmB;GADc;GAAW,OAAO;GAChC,CAAK;IAU1B,EAAE,CACH,EAGK,IAAa,EAAM,aACtB,MAA0C;EACzC,IAAM,IAAgB;GAAE,GAAG;GAAS,IAAI,GAAY;GAAE;AAItD,SAFA,EAAsB,CADR,GAAG,GAAuB,EAAE,EACpB,CAAK,EAC3B,EAAmB,EAAE,WAAW,EAAK,IAAI,CAAC,EACnC;IAET,EAAE,CACH,EAEK,IAAgB,EAAM,aACzB,GAAY,MAAwC;EACnD,IAAM,IAAO,GAAuB,CAAC,MAAM,MAAM,EAAE,OAAO,EAAG;AAI7D,IAHa,GAAuB,CAAC,KAAK,MACxC,EAAE,OAAO,IAAK;GAAE,GAAG;GAAG,GAAG;GAAO,GAAG,EAEf,CAAK;EAK3B,IAAM,IACJ,EAAM,SAAS,KAAA,KACf,MAAS,KAAA,KACT,EAAM,SAAS,EAAK,MAChB,IACJ,EAAM,WAAW,KAAA,KACjB,MAAS,KAAA,KACT,EAAM,WAAW,EAAK;AACxB,GAAI,KAAe,MACjB,EAAmB,EAAG;IAG1B,EAAE,CACH,EAEK,IAAgB,EAAM,aAAa,MAAe;AAGtD,EADA,EADa,GAAuB,CAAC,QAAQ,MAAM,EAAE,OAAO,EACtC,CAAK,EAC3B,EAAkB,EAAG;IAKpB,EAAE,CAAC,EAEA,IAAQ,EAAM,eACX;EACL,UAAU,EAAS;EACnB,QAAQ,EAAS;EACjB;EACA;EACA;EACA;EACD,GACD;EAAC;EAAU;EAAW;EAAY;EAAe;EAAc,CAChE;AAED,QACE,kBAAC,EAAqB,UAAtB;EAAsC;EACnC;EAC6B,CAAA;;AAIpC,SAAgB,IAAqD;CACnE,IAAM,IAAM,EAAM,WAAW,EAAqB;AAClD,KAAI,CAAC,EACH,OAAU,MACR,sEACD;AAEH,QAAO;;AAeT,SAAgB,IAA0C;CACxD,IAAM,IAAM,EAAM,WAAW,EAAqB;AAElD,QADI,IAAY,EAAI,SACb;EAAE,SAAS,GAAyB,IAAI;EAAY,OAAO;EAAM"}
@@ -1,2 +1,2 @@
1
- require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../use-conversation-id.cjs`),t=require(`../../stores/conversation-store.cjs`),n=require(`../../components/features/chat/utils/chat-input.utils.cjs`),r=require(`./use-draft-persistence.cjs`);let i=require(`react`);var a=()=>{let a=(0,i.useRef)(null),{conversationId:o}=e.useOptionalConversationId(),{messageToSend:s,hasRightPanelToggled:c,setMessageToSend:l,setIsRightPanelShown:u}=t.useConversationStore(),{saveDraft:d,clearDraft:f}=r.useDraftPersistence(o,a),p=o?s:null;return(0,i.useEffect)(()=>{o&&a.current&&(l(n.getTextContent(a.current)),u(c))},[o,c,l,u]),{chatInputRef:a,messageToSend:p,checkIsContentEmpty:(0,i.useCallback)(()=>n.isContentEmpty(a.current),[]),clearEmptyContentHandler:(0,i.useCallback)(()=>{n.clearEmptyContent(a.current)},[]),getCurrentMessage:(0,i.useCallback)(()=>n.getTextContent(a.current),[]),saveDraft:d,clearDraft:f}};exports.useChatInputLogic=a;
1
+ require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../use-conversation-id.cjs`),t=require(`../../stores/conversation-store.cjs`),n=require(`../../components/features/chat/utils/chat-input.utils.cjs`),r=require(`./use-draft-persistence.cjs`);let i=require(`react`);var a=()=>{let a=(0,i.useRef)(null),{conversationId:o}=e.useOptionalConversationId(),{messageToSend:s,messageRestoreIfEmpty:c,hasRightPanelToggled:l,setMessageToSend:u,clearMessageRestoreIfEmpty:d,setIsRightPanelShown:f}=t.useConversationStore(),{saveDraft:p,clearDraft:m}=r.useDraftPersistence(o,a),h=o?s:null;return(0,i.useEffect)(()=>{!o||!c||(n.getTextContent(a.current).trim().length===0&&u(c.text),d())},[o,c,u,d]),(0,i.useEffect)(()=>{o&&a.current&&(u(n.getTextContent(a.current)),f(l))},[o,l,u,f]),{chatInputRef:a,messageToSend:h,checkIsContentEmpty:(0,i.useCallback)(()=>n.isContentEmpty(a.current),[]),clearEmptyContentHandler:(0,i.useCallback)(()=>{n.clearEmptyContent(a.current)},[]),getCurrentMessage:(0,i.useCallback)(()=>n.getTextContent(a.current),[]),saveDraft:p,clearDraft:m}};exports.useChatInputLogic=a;
2
2
  //# sourceMappingURL=use-chat-input-logic.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-chat-input-logic.cjs","names":[],"sources":["../../../src/hooks/chat/use-chat-input-logic.ts"],"sourcesContent":["import { useRef, useCallback, useEffect } from \"react\";\nimport {\n isContentEmpty,\n clearEmptyContent,\n getTextContent,\n} from \"#/components/features/chat/utils/chat-input.utils\";\nimport { useConversationStore } from \"#/stores/conversation-store\";\nimport { useOptionalConversationId } from \"#/hooks/use-conversation-id\";\nimport { useDraftPersistence } from \"./use-draft-persistence\";\n\n/**\n * Hook for managing chat input content logic\n */\nexport const useChatInputLogic = () => {\n const chatInputRef = useRef<HTMLDivElement | null>(null);\n // Optional because the chat input also renders on the home page, where no\n // conversation route is mounted yet. Draft persistence is conversation-\n // scoped, so it no-ops when this is undefined.\n const { conversationId } = useOptionalConversationId();\n\n const {\n messageToSend: rawMessageToSend,\n hasRightPanelToggled,\n setMessageToSend,\n setIsRightPanelShown,\n } = useConversationStore();\n\n // Draft persistence - saves to localStorage/sessionStorage, restores on mount\n const { saveDraft, clearDraft } = useDraftPersistence(\n conversationId,\n chatInputRef,\n );\n\n // On the home page (no conversationId) the right-panel / messageToSend\n // mechanism is not relevant. More importantly, a stale messageToSend value\n // in the Zustand store causes useAutoResize to overwrite the just-restored\n // sessionStorage draft with an empty string (see useAutoResize value effect).\n // Returning null here keeps value=undefined in useAutoResize so it never\n // touches the element content on the home page.\n const messageToSend = conversationId ? rawMessageToSend : null;\n\n // Save current input value when drawer state changes (conversation view only)\n useEffect(() => {\n if (!conversationId) return;\n if (chatInputRef.current) {\n const currentText = getTextContent(chatInputRef.current);\n setMessageToSend(currentText);\n setIsRightPanelShown(hasRightPanelToggled);\n }\n }, [\n conversationId,\n hasRightPanelToggled,\n setMessageToSend,\n setIsRightPanelShown,\n ]);\n\n // Helper function to check if contentEditable is truly empty\n const checkIsContentEmpty = useCallback(\n (): boolean => isContentEmpty(chatInputRef.current),\n [],\n );\n\n // Helper function to properly clear contentEditable for placeholder display\n const clearEmptyContentHandler = useCallback((): void => {\n clearEmptyContent(chatInputRef.current);\n }, []);\n\n // Get current message text\n const getCurrentMessage = useCallback(\n (): string => getTextContent(chatInputRef.current),\n [],\n );\n\n return {\n chatInputRef,\n messageToSend,\n checkIsContentEmpty,\n clearEmptyContentHandler,\n getCurrentMessage,\n saveDraft,\n clearDraft,\n };\n};\n"],"mappings":"sRAaA,IAAa,MAA0B,CACrC,IAAM,GAAA,EAAA,EAAA,QAA6C,KAAK,CAIlD,CAAE,kBAAmB,EAAA,2BAA2B,CAEhD,CACJ,cAAe,EACf,uBACA,mBACA,wBACE,EAAA,sBAAsB,CAGpB,CAAE,YAAW,cAAe,EAAA,oBAChC,EACA,EACD,CAQK,EAAgB,EAAiB,EAAmB,KAkC1D,OA/BA,EAAA,EAAA,eAAgB,CACT,GACD,EAAa,UAEf,EADoB,EAAA,eAAe,EAAa,QAC/B,CAAY,CAC7B,EAAqB,EAAqB,GAE3C,CACD,EACA,EACA,EACA,EACD,CAAC,CAmBK,CACL,eACA,gBACA,qBAAA,EAAA,EAAA,iBAlBe,EAAA,eAAe,EAAa,QAAQ,CACnD,EAAE,CAiBF,CACA,0BAAA,EAAA,EAAA,iBAduD,CACvD,EAAA,kBAAkB,EAAa,QAAQ,EACtC,EAAE,CAYH,CACA,mBAAA,EAAA,EAAA,iBATc,EAAA,eAAe,EAAa,QAAQ,CAClD,EAAE,CAQF,CACA,YACA,aACD"}
1
+ {"version":3,"file":"use-chat-input-logic.cjs","names":[],"sources":["../../../src/hooks/chat/use-chat-input-logic.ts"],"sourcesContent":["import { useRef, useCallback, useEffect } from \"react\";\nimport {\n isContentEmpty,\n clearEmptyContent,\n getTextContent,\n} from \"#/components/features/chat/utils/chat-input.utils\";\nimport { useConversationStore } from \"#/stores/conversation-store\";\nimport { useOptionalConversationId } from \"#/hooks/use-conversation-id\";\nimport { useDraftPersistence } from \"./use-draft-persistence\";\n\n/**\n * Hook for managing chat input content logic\n */\nexport const useChatInputLogic = () => {\n const chatInputRef = useRef<HTMLDivElement | null>(null);\n // Optional because the chat input also renders on the home page, where no\n // conversation route is mounted yet. Draft persistence is conversation-\n // scoped, so it no-ops when this is undefined.\n const { conversationId } = useOptionalConversationId();\n\n const {\n messageToSend: rawMessageToSend,\n messageRestoreIfEmpty,\n hasRightPanelToggled,\n setMessageToSend,\n clearMessageRestoreIfEmpty,\n setIsRightPanelShown,\n } = useConversationStore();\n\n // Draft persistence - saves to localStorage/sessionStorage, restores on mount\n const { saveDraft, clearDraft } = useDraftPersistence(\n conversationId,\n chatInputRef,\n );\n\n // On the home page (no conversationId) the right-panel / messageToSend\n // mechanism is not relevant. More importantly, a stale messageToSend value\n // in the Zustand store causes useAutoResize to overwrite the just-restored\n // sessionStorage draft with an empty string (see useAutoResize value effect).\n // Returning null here keeps value=undefined in useAutoResize so it never\n // touches the element content on the home page.\n const messageToSend = conversationId ? rawMessageToSend : null;\n\n // Restore a cancelled pending send back into the input only when empty.\n useEffect(() => {\n if (!conversationId || !messageRestoreIfEmpty) {\n return;\n }\n\n const currentText = getTextContent(chatInputRef.current).trim();\n if (currentText.length === 0) {\n setMessageToSend(messageRestoreIfEmpty.text);\n }\n clearMessageRestoreIfEmpty();\n }, [\n conversationId,\n messageRestoreIfEmpty,\n setMessageToSend,\n clearMessageRestoreIfEmpty,\n ]);\n\n // Save current input value when drawer state changes (conversation view only)\n useEffect(() => {\n if (!conversationId) return;\n if (chatInputRef.current) {\n const currentText = getTextContent(chatInputRef.current);\n setMessageToSend(currentText);\n setIsRightPanelShown(hasRightPanelToggled);\n }\n }, [\n conversationId,\n hasRightPanelToggled,\n setMessageToSend,\n setIsRightPanelShown,\n ]);\n\n // Helper function to check if contentEditable is truly empty\n const checkIsContentEmpty = useCallback(\n (): boolean => isContentEmpty(chatInputRef.current),\n [],\n );\n\n // Helper function to properly clear contentEditable for placeholder display\n const clearEmptyContentHandler = useCallback((): void => {\n clearEmptyContent(chatInputRef.current);\n }, []);\n\n // Get current message text\n const getCurrentMessage = useCallback(\n (): string => getTextContent(chatInputRef.current),\n [],\n );\n\n return {\n chatInputRef,\n messageToSend,\n checkIsContentEmpty,\n clearEmptyContentHandler,\n getCurrentMessage,\n saveDraft,\n clearDraft,\n };\n};\n"],"mappings":"sRAaA,IAAa,MAA0B,CACrC,IAAM,GAAA,EAAA,EAAA,QAA6C,KAAK,CAIlD,CAAE,kBAAmB,EAAA,2BAA2B,CAEhD,CACJ,cAAe,EACf,wBACA,uBACA,mBACA,6BACA,wBACE,EAAA,sBAAsB,CAGpB,CAAE,YAAW,cAAe,EAAA,oBAChC,EACA,EACD,CAQK,EAAgB,EAAiB,EAAmB,KAoD1D,OAjDA,EAAA,EAAA,eAAgB,CACV,CAAC,GAAkB,CAAC,IAIJ,EAAA,eAAe,EAAa,QAAQ,CAAC,MACrD,CAAY,SAAW,GACzB,EAAiB,EAAsB,KAAK,CAE9C,GAA4B,GAC3B,CACD,EACA,EACA,EACA,EACD,CAAC,EAGF,EAAA,EAAA,eAAgB,CACT,GACD,EAAa,UAEf,EADoB,EAAA,eAAe,EAAa,QAC/B,CAAY,CAC7B,EAAqB,EAAqB,GAE3C,CACD,EACA,EACA,EACA,EACD,CAAC,CAmBK,CACL,eACA,gBACA,qBAAA,EAAA,EAAA,iBAlBe,EAAA,eAAe,EAAa,QAAQ,CACnD,EAAE,CAiBF,CACA,0BAAA,EAAA,EAAA,iBAduD,CACvD,EAAA,kBAAkB,EAAa,QAAQ,EACtC,EAAE,CAYH,CACA,mBAAA,EAAA,EAAA,iBATc,EAAA,eAAe,EAAa,QAAQ,CAClD,EAAE,CAQF,CACA,YACA,aACD"}
@@ -5,24 +5,31 @@ import { useDraftPersistence as a } from "./use-draft-persistence.js";
5
5
  import { useCallback as o, useEffect as s, useRef as c } from "react";
6
6
  //#region src/hooks/chat/use-chat-input-logic.ts
7
7
  var l = () => {
8
- let l = c(null), { conversationId: u } = e(), { messageToSend: d, hasRightPanelToggled: f, setMessageToSend: p, setIsRightPanelShown: m } = t(), { saveDraft: h, clearDraft: g } = a(u, l), _ = u ? d : null;
8
+ let l = c(null), { conversationId: u } = e(), { messageToSend: d, messageRestoreIfEmpty: f, hasRightPanelToggled: p, setMessageToSend: m, clearMessageRestoreIfEmpty: h, setIsRightPanelShown: g } = t(), { saveDraft: _, clearDraft: v } = a(u, l), y = u ? d : null;
9
9
  return s(() => {
10
- u && l.current && (p(r(l.current)), m(f));
10
+ !u || !f || (r(l.current).trim().length === 0 && m(f.text), h());
11
11
  }, [
12
12
  u,
13
13
  f,
14
+ m,
15
+ h
16
+ ]), s(() => {
17
+ u && l.current && (m(r(l.current)), g(p));
18
+ }, [
19
+ u,
14
20
  p,
15
- m
21
+ m,
22
+ g
16
23
  ]), {
17
24
  chatInputRef: l,
18
- messageToSend: _,
25
+ messageToSend: y,
19
26
  checkIsContentEmpty: o(() => i(l.current), []),
20
27
  clearEmptyContentHandler: o(() => {
21
28
  n(l.current);
22
29
  }, []),
23
30
  getCurrentMessage: o(() => r(l.current), []),
24
- saveDraft: h,
25
- clearDraft: g
31
+ saveDraft: _,
32
+ clearDraft: v
26
33
  };
27
34
  };
28
35
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"use-chat-input-logic.js","names":[],"sources":["../../../src/hooks/chat/use-chat-input-logic.ts"],"sourcesContent":["import { useRef, useCallback, useEffect } from \"react\";\nimport {\n isContentEmpty,\n clearEmptyContent,\n getTextContent,\n} from \"#/components/features/chat/utils/chat-input.utils\";\nimport { useConversationStore } from \"#/stores/conversation-store\";\nimport { useOptionalConversationId } from \"#/hooks/use-conversation-id\";\nimport { useDraftPersistence } from \"./use-draft-persistence\";\n\n/**\n * Hook for managing chat input content logic\n */\nexport const useChatInputLogic = () => {\n const chatInputRef = useRef<HTMLDivElement | null>(null);\n // Optional because the chat input also renders on the home page, where no\n // conversation route is mounted yet. Draft persistence is conversation-\n // scoped, so it no-ops when this is undefined.\n const { conversationId } = useOptionalConversationId();\n\n const {\n messageToSend: rawMessageToSend,\n hasRightPanelToggled,\n setMessageToSend,\n setIsRightPanelShown,\n } = useConversationStore();\n\n // Draft persistence - saves to localStorage/sessionStorage, restores on mount\n const { saveDraft, clearDraft } = useDraftPersistence(\n conversationId,\n chatInputRef,\n );\n\n // On the home page (no conversationId) the right-panel / messageToSend\n // mechanism is not relevant. More importantly, a stale messageToSend value\n // in the Zustand store causes useAutoResize to overwrite the just-restored\n // sessionStorage draft with an empty string (see useAutoResize value effect).\n // Returning null here keeps value=undefined in useAutoResize so it never\n // touches the element content on the home page.\n const messageToSend = conversationId ? rawMessageToSend : null;\n\n // Save current input value when drawer state changes (conversation view only)\n useEffect(() => {\n if (!conversationId) return;\n if (chatInputRef.current) {\n const currentText = getTextContent(chatInputRef.current);\n setMessageToSend(currentText);\n setIsRightPanelShown(hasRightPanelToggled);\n }\n }, [\n conversationId,\n hasRightPanelToggled,\n setMessageToSend,\n setIsRightPanelShown,\n ]);\n\n // Helper function to check if contentEditable is truly empty\n const checkIsContentEmpty = useCallback(\n (): boolean => isContentEmpty(chatInputRef.current),\n [],\n );\n\n // Helper function to properly clear contentEditable for placeholder display\n const clearEmptyContentHandler = useCallback((): void => {\n clearEmptyContent(chatInputRef.current);\n }, []);\n\n // Get current message text\n const getCurrentMessage = useCallback(\n (): string => getTextContent(chatInputRef.current),\n [],\n );\n\n return {\n chatInputRef,\n messageToSend,\n checkIsContentEmpty,\n clearEmptyContentHandler,\n getCurrentMessage,\n saveDraft,\n clearDraft,\n };\n};\n"],"mappings":";;;;;;AAaA,IAAa,UAA0B;CACrC,IAAM,IAAe,EAA8B,KAAK,EAIlD,EAAE,sBAAmB,GAA2B,EAEhD,EACJ,eAAe,GACf,yBACA,qBACA,4BACE,GAAsB,EAGpB,EAAE,cAAW,kBAAe,EAChC,GACA,EACD,EAQK,IAAgB,IAAiB,IAAmB;AAkC1D,QA/BA,QAAgB;AACT,OACD,EAAa,YAEf,EADoB,EAAe,EAAa,QAC/B,CAAY,EAC7B,EAAqB,EAAqB;IAE3C;EACD;EACA;EACA;EACA;EACD,CAAC,EAmBK;EACL;EACA;EACA,qBAnB0B,QACX,EAAe,EAAa,QAAQ,EACnD,EAAE,CAiBF;EACA,0BAd+B,QAAwB;AACvD,KAAkB,EAAa,QAAQ;KACtC,EAAE,CAYH;EACA,mBAVwB,QACV,EAAe,EAAa,QAAQ,EAClD,EAAE,CAQF;EACA;EACA;EACD"}
1
+ {"version":3,"file":"use-chat-input-logic.js","names":[],"sources":["../../../src/hooks/chat/use-chat-input-logic.ts"],"sourcesContent":["import { useRef, useCallback, useEffect } from \"react\";\nimport {\n isContentEmpty,\n clearEmptyContent,\n getTextContent,\n} from \"#/components/features/chat/utils/chat-input.utils\";\nimport { useConversationStore } from \"#/stores/conversation-store\";\nimport { useOptionalConversationId } from \"#/hooks/use-conversation-id\";\nimport { useDraftPersistence } from \"./use-draft-persistence\";\n\n/**\n * Hook for managing chat input content logic\n */\nexport const useChatInputLogic = () => {\n const chatInputRef = useRef<HTMLDivElement | null>(null);\n // Optional because the chat input also renders on the home page, where no\n // conversation route is mounted yet. Draft persistence is conversation-\n // scoped, so it no-ops when this is undefined.\n const { conversationId } = useOptionalConversationId();\n\n const {\n messageToSend: rawMessageToSend,\n messageRestoreIfEmpty,\n hasRightPanelToggled,\n setMessageToSend,\n clearMessageRestoreIfEmpty,\n setIsRightPanelShown,\n } = useConversationStore();\n\n // Draft persistence - saves to localStorage/sessionStorage, restores on mount\n const { saveDraft, clearDraft } = useDraftPersistence(\n conversationId,\n chatInputRef,\n );\n\n // On the home page (no conversationId) the right-panel / messageToSend\n // mechanism is not relevant. More importantly, a stale messageToSend value\n // in the Zustand store causes useAutoResize to overwrite the just-restored\n // sessionStorage draft with an empty string (see useAutoResize value effect).\n // Returning null here keeps value=undefined in useAutoResize so it never\n // touches the element content on the home page.\n const messageToSend = conversationId ? rawMessageToSend : null;\n\n // Restore a cancelled pending send back into the input only when empty.\n useEffect(() => {\n if (!conversationId || !messageRestoreIfEmpty) {\n return;\n }\n\n const currentText = getTextContent(chatInputRef.current).trim();\n if (currentText.length === 0) {\n setMessageToSend(messageRestoreIfEmpty.text);\n }\n clearMessageRestoreIfEmpty();\n }, [\n conversationId,\n messageRestoreIfEmpty,\n setMessageToSend,\n clearMessageRestoreIfEmpty,\n ]);\n\n // Save current input value when drawer state changes (conversation view only)\n useEffect(() => {\n if (!conversationId) return;\n if (chatInputRef.current) {\n const currentText = getTextContent(chatInputRef.current);\n setMessageToSend(currentText);\n setIsRightPanelShown(hasRightPanelToggled);\n }\n }, [\n conversationId,\n hasRightPanelToggled,\n setMessageToSend,\n setIsRightPanelShown,\n ]);\n\n // Helper function to check if contentEditable is truly empty\n const checkIsContentEmpty = useCallback(\n (): boolean => isContentEmpty(chatInputRef.current),\n [],\n );\n\n // Helper function to properly clear contentEditable for placeholder display\n const clearEmptyContentHandler = useCallback((): void => {\n clearEmptyContent(chatInputRef.current);\n }, []);\n\n // Get current message text\n const getCurrentMessage = useCallback(\n (): string => getTextContent(chatInputRef.current),\n [],\n );\n\n return {\n chatInputRef,\n messageToSend,\n checkIsContentEmpty,\n clearEmptyContentHandler,\n getCurrentMessage,\n saveDraft,\n clearDraft,\n };\n};\n"],"mappings":";;;;;;AAaA,IAAa,UAA0B;CACrC,IAAM,IAAe,EAA8B,KAAK,EAIlD,EAAE,sBAAmB,GAA2B,EAEhD,EACJ,eAAe,GACf,0BACA,yBACA,qBACA,+BACA,4BACE,GAAsB,EAGpB,EAAE,cAAW,kBAAe,EAChC,GACA,EACD,EAQK,IAAgB,IAAiB,IAAmB;AAoD1D,QAjDA,QAAgB;AACV,GAAC,KAAkB,CAAC,MAIJ,EAAe,EAAa,QAAQ,CAAC,MACrD,CAAY,WAAW,KACzB,EAAiB,EAAsB,KAAK,EAE9C,GAA4B;IAC3B;EACD;EACA;EACA;EACA;EACD,CAAC,EAGF,QAAgB;AACT,OACD,EAAa,YAEf,EADoB,EAAe,EAAa,QAC/B,CAAY,EAC7B,EAAqB,EAAqB;IAE3C;EACD;EACA;EACA;EACA;EACD,CAAC,EAmBK;EACL;EACA;EACA,qBAnB0B,QACX,EAAe,EAAa,QAAQ,EACnD,EAAE,CAiBF;EACA,0BAd+B,QAAwB;AACvD,KAAkB,EAAa,QAAQ;KACtC,EAAE,CAYH;EACA,mBAVwB,QACV,EAAe,EAAa,QAAQ,EAClD,EAAE,CAQF;EACA;EACA;EACD"}
@@ -0,0 +1,2 @@
1
+ require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../node_modules/react-i18next/dist/es/useTranslation.cjs`),t=require(`../../i18n/declaration.cjs`),n=require(`../../utils/custom-toast-handlers.cjs`),r=require(`../../node_modules/@tanstack/react-query/build/modern/QueryClientProvider.cjs`),i=require(`../../api/secrets-service.cjs`);let a=require(`react`);function o(e){return e.length<=3?e.join(`, `):`${e.slice(0,3).join(`, `)} … (+${e.length-3})`}function s(){let{t:s}=e.useTranslation(`openhands`),c=r.useQueryClient();return(0,a.useCallback)((e,r,a)=>{let l=e.filter(e=>a[e.key]&&(r[e.key]??``).trim());l.length!==0&&Promise.allSettled(l.map(e=>i.SecretsService.createSecret(e.key,r[e.key].trim(),e.label))).then(e=>{let r=l.filter((t,n)=>e[n].status===`fulfilled`).map(e=>e.key),i=l.filter((t,n)=>e[n].status===`rejected`).map(e=>e.key);r.length>0&&(c.invalidateQueries({queryKey:[`secrets-search`]}),c.invalidateQueries({queryKey:[`secrets`]}),n.displaySuccessToast(s(t.I18nKey.MCP$SECRETS_SAVED,{keys:o(r)}))),i.length>0&&n.displayErrorToast(s(t.I18nKey.MCP$SECRETS_SAVE_FAILED,{keys:o(i)}))})},[s,c])}exports.useSaveFieldsAsSecrets=s;
2
+ //# sourceMappingURL=use-save-fields-as-secrets.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-save-fields-as-secrets.cjs","names":[],"sources":["../../../src/hooks/mutation/use-save-fields-as-secrets.ts"],"sourcesContent":["import { useCallback } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport type { MarketplaceField } from \"@openhands/extensions/integrations\";\nimport { SecretsService } from \"#/api/secrets-service\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport {\n displayErrorToast,\n displaySuccessToast,\n} from \"#/utils/custom-toast-handlers\";\n\n/** Truncates a list of key names for display in toasts. */\nfunction formatKeyList(keys: string[]): string {\n const MAX = 3;\n if (keys.length <= MAX) return keys.join(\", \");\n return `${keys.slice(0, MAX).join(\", \")} … (+${keys.length - MAX})`;\n}\n\n/**\n * Returns a stable, fire-and-forget function that upserts checked envFields\n * into the Secrets store. MCP server config and the Secrets store are\n * separate — this bridges the gap so Automation Server can access credentials\n * without a separate manual step. Internally, `SecretsService.createSecret`\n * is an upsert, so existing secrets with the same name are overwritten safely.\n */\nexport function useSaveFieldsAsSecrets() {\n const { t } = useTranslation(\"openhands\");\n const queryClient = useQueryClient();\n\n return useCallback(\n (\n envFields: MarketplaceField[],\n values: Record<string, string>,\n savedAsSecret: Record<string, boolean>,\n ): void => {\n const fieldsToSave = envFields.filter(\n (field) => savedAsSecret[field.key] && (values[field.key] ?? \"\").trim(),\n );\n if (fieldsToSave.length === 0) return;\n\n Promise.allSettled(\n fieldsToSave.map((field) =>\n SecretsService.createSecret(\n field.key,\n values[field.key].trim(),\n field.label,\n ),\n ),\n ).then((results) => {\n const saved = fieldsToSave\n .filter((_, i) => results[i].status === \"fulfilled\")\n .map((f) => f.key);\n const failed = fieldsToSave\n .filter((_, i) => results[i].status === \"rejected\")\n .map((f) => f.key);\n\n if (saved.length > 0) {\n // Refresh any cached secrets lists so a newly-saved secret shows up\n // in Settings → Secrets immediately. Without this, the 5-minute\n // staleTime on the secrets query (use-get-secrets.ts) can keep a\n // previously-loaded list stale and hide the new secret. Mirrors the\n // invalidation done by secret-form.tsx and secrets-settings.tsx.\n queryClient.invalidateQueries({ queryKey: [\"secrets-search\"] });\n queryClient.invalidateQueries({ queryKey: [\"secrets\"] });\n\n displaySuccessToast(\n t(I18nKey.MCP$SECRETS_SAVED, { keys: formatKeyList(saved) }),\n );\n }\n if (failed.length > 0) {\n displayErrorToast(\n t(I18nKey.MCP$SECRETS_SAVE_FAILED, { keys: formatKeyList(failed) }),\n );\n }\n });\n },\n [t, queryClient],\n );\n}\n"],"mappings":"uXAYA,SAAS,EAAc,EAAwB,CAG7C,OADI,EAAK,QAAU,EAAY,EAAK,KAAK,KAAK,CACvC,GAAG,EAAK,MAAM,EAAG,EAAI,CAAC,KAAK,KAAK,CAAC,OAAO,EAAK,OAAS,EAAI,GAUnE,SAAgB,GAAyB,CACvC,GAAM,CAAE,KAAM,EAAA,eAAe,YAAY,CACnC,EAAc,EAAA,gBAAgB,CAEpC,OAAA,EAAA,EAAA,cAEI,EACA,EACA,IACS,CACT,IAAM,EAAe,EAAU,OAC5B,GAAU,EAAc,EAAM,OAAS,EAAO,EAAM,MAAQ,IAAI,MAAM,CACxE,CACG,EAAa,SAAW,GAE5B,QAAQ,WACN,EAAa,IAAK,GAChB,EAAA,eAAe,aACb,EAAM,IACN,EAAO,EAAM,KAAK,MAAM,CACxB,EAAM,MACP,CACF,CACF,CAAC,KAAM,GAAY,CAClB,IAAM,EAAQ,EACX,QAAQ,EAAG,IAAM,EAAQ,GAAG,SAAW,YAAY,CACnD,IAAK,GAAM,EAAE,IAAI,CACd,EAAS,EACZ,QAAQ,EAAG,IAAM,EAAQ,GAAG,SAAW,WAAW,CAClD,IAAK,GAAM,EAAE,IAAI,CAEhB,EAAM,OAAS,IAMjB,EAAY,kBAAkB,CAAE,SAAU,CAAC,iBAAiB,CAAE,CAAC,CAC/D,EAAY,kBAAkB,CAAE,SAAU,CAAC,UAAU,CAAE,CAAC,CAExD,EAAA,oBACE,EAAE,EAAA,QAAQ,kBAAmB,CAAE,KAAM,EAAc,EAAM,CAAE,CAAC,CAC7D,EAEC,EAAO,OAAS,GAClB,EAAA,kBACE,EAAE,EAAA,QAAQ,wBAAyB,CAAE,KAAM,EAAc,EAAO,CAAE,CAAC,CACpE,EAEH,EAEJ,CAAC,EAAG,EAAY,CACjB"}
@@ -0,0 +1,9 @@
1
+ import type { MarketplaceField } from "@openhands/extensions/integrations";
2
+ /**
3
+ * Returns a stable, fire-and-forget function that upserts checked envFields
4
+ * into the Secrets store. MCP server config and the Secrets store are
5
+ * separate — this bridges the gap so Automation Server can access credentials
6
+ * without a separate manual step. Internally, `SecretsService.createSecret`
7
+ * is an upsert, so existing secrets with the same name are overwritten safely.
8
+ */
9
+ export declare function useSaveFieldsAsSecrets(): (envFields: MarketplaceField[], values: Record<string, string>, savedAsSecret: Record<string, boolean>) => void;
@@ -0,0 +1,24 @@
1
+ import { useTranslation as e } from "../../node_modules/react-i18next/dist/es/useTranslation.js";
2
+ import { I18nKey as t } from "../../i18n/declaration.js";
3
+ import { displayErrorToast as n, displaySuccessToast as r } from "../../utils/custom-toast-handlers.js";
4
+ import { useQueryClient as i } from "../../node_modules/@tanstack/react-query/build/modern/QueryClientProvider.js";
5
+ import { SecretsService as a } from "../../api/secrets-service.js";
6
+ import { useCallback as o } from "react";
7
+ //#region src/hooks/mutation/use-save-fields-as-secrets.ts
8
+ function s(e) {
9
+ return e.length <= 3 ? e.join(", ") : `${e.slice(0, 3).join(", ")} … (+${e.length - 3})`;
10
+ }
11
+ function c() {
12
+ let { t: c } = e("openhands"), l = i();
13
+ return o((e, i, o) => {
14
+ let u = e.filter((e) => o[e.key] && (i[e.key] ?? "").trim());
15
+ u.length !== 0 && Promise.allSettled(u.map((e) => a.createSecret(e.key, i[e.key].trim(), e.label))).then((e) => {
16
+ let i = u.filter((t, n) => e[n].status === "fulfilled").map((e) => e.key), a = u.filter((t, n) => e[n].status === "rejected").map((e) => e.key);
17
+ i.length > 0 && (l.invalidateQueries({ queryKey: ["secrets-search"] }), l.invalidateQueries({ queryKey: ["secrets"] }), r(c(t.MCP$SECRETS_SAVED, { keys: s(i) }))), a.length > 0 && n(c(t.MCP$SECRETS_SAVE_FAILED, { keys: s(a) }));
18
+ });
19
+ }, [c, l]);
20
+ }
21
+ //#endregion
22
+ export { c as useSaveFieldsAsSecrets };
23
+
24
+ //# sourceMappingURL=use-save-fields-as-secrets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-save-fields-as-secrets.js","names":[],"sources":["../../../src/hooks/mutation/use-save-fields-as-secrets.ts"],"sourcesContent":["import { useCallback } from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport type { MarketplaceField } from \"@openhands/extensions/integrations\";\nimport { SecretsService } from \"#/api/secrets-service\";\nimport { I18nKey } from \"#/i18n/declaration\";\nimport {\n displayErrorToast,\n displaySuccessToast,\n} from \"#/utils/custom-toast-handlers\";\n\n/** Truncates a list of key names for display in toasts. */\nfunction formatKeyList(keys: string[]): string {\n const MAX = 3;\n if (keys.length <= MAX) return keys.join(\", \");\n return `${keys.slice(0, MAX).join(\", \")} … (+${keys.length - MAX})`;\n}\n\n/**\n * Returns a stable, fire-and-forget function that upserts checked envFields\n * into the Secrets store. MCP server config and the Secrets store are\n * separate — this bridges the gap so Automation Server can access credentials\n * without a separate manual step. Internally, `SecretsService.createSecret`\n * is an upsert, so existing secrets with the same name are overwritten safely.\n */\nexport function useSaveFieldsAsSecrets() {\n const { t } = useTranslation(\"openhands\");\n const queryClient = useQueryClient();\n\n return useCallback(\n (\n envFields: MarketplaceField[],\n values: Record<string, string>,\n savedAsSecret: Record<string, boolean>,\n ): void => {\n const fieldsToSave = envFields.filter(\n (field) => savedAsSecret[field.key] && (values[field.key] ?? \"\").trim(),\n );\n if (fieldsToSave.length === 0) return;\n\n Promise.allSettled(\n fieldsToSave.map((field) =>\n SecretsService.createSecret(\n field.key,\n values[field.key].trim(),\n field.label,\n ),\n ),\n ).then((results) => {\n const saved = fieldsToSave\n .filter((_, i) => results[i].status === \"fulfilled\")\n .map((f) => f.key);\n const failed = fieldsToSave\n .filter((_, i) => results[i].status === \"rejected\")\n .map((f) => f.key);\n\n if (saved.length > 0) {\n // Refresh any cached secrets lists so a newly-saved secret shows up\n // in Settings → Secrets immediately. Without this, the 5-minute\n // staleTime on the secrets query (use-get-secrets.ts) can keep a\n // previously-loaded list stale and hide the new secret. Mirrors the\n // invalidation done by secret-form.tsx and secrets-settings.tsx.\n queryClient.invalidateQueries({ queryKey: [\"secrets-search\"] });\n queryClient.invalidateQueries({ queryKey: [\"secrets\"] });\n\n displaySuccessToast(\n t(I18nKey.MCP$SECRETS_SAVED, { keys: formatKeyList(saved) }),\n );\n }\n if (failed.length > 0) {\n displayErrorToast(\n t(I18nKey.MCP$SECRETS_SAVE_FAILED, { keys: formatKeyList(failed) }),\n );\n }\n });\n },\n [t, queryClient],\n );\n}\n"],"mappings":";;;;;;;AAYA,SAAS,EAAc,GAAwB;AAG7C,QADI,EAAK,UAAU,IAAY,EAAK,KAAK,KAAK,GACvC,GAAG,EAAK,MAAM,GAAG,EAAI,CAAC,KAAK,KAAK,CAAC,OAAO,EAAK,SAAS,EAAI;;AAUnE,SAAgB,IAAyB;CACvC,IAAM,EAAE,SAAM,EAAe,YAAY,EACnC,IAAc,GAAgB;AAEpC,QAAO,GAEH,GACA,GACA,MACS;EACT,IAAM,IAAe,EAAU,QAC5B,MAAU,EAAc,EAAM,SAAS,EAAO,EAAM,QAAQ,IAAI,MAAM,CACxE;AACG,IAAa,WAAW,KAE5B,QAAQ,WACN,EAAa,KAAK,MAChB,EAAe,aACb,EAAM,KACN,EAAO,EAAM,KAAK,MAAM,EACxB,EAAM,MACP,CACF,CACF,CAAC,MAAM,MAAY;GAClB,IAAM,IAAQ,EACX,QAAQ,GAAG,MAAM,EAAQ,GAAG,WAAW,YAAY,CACnD,KAAK,MAAM,EAAE,IAAI,EACd,IAAS,EACZ,QAAQ,GAAG,MAAM,EAAQ,GAAG,WAAW,WAAW,CAClD,KAAK,MAAM,EAAE,IAAI;AAepB,GAbI,EAAM,SAAS,MAMjB,EAAY,kBAAkB,EAAE,UAAU,CAAC,iBAAiB,EAAE,CAAC,EAC/D,EAAY,kBAAkB,EAAE,UAAU,CAAC,UAAU,EAAE,CAAC,EAExD,EACE,EAAE,EAAQ,mBAAmB,EAAE,MAAM,EAAc,EAAM,EAAE,CAAC,CAC7D,GAEC,EAAO,SAAS,KAClB,EACE,EAAE,EAAQ,yBAAyB,EAAE,MAAM,EAAc,EAAO,EAAE,CAAC,CACpE;IAEH;IAEJ,CAAC,GAAG,EAAY,CACjB"}
@@ -1,2 +1,2 @@
1
- require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../node_modules/@tanstack/react-query/build/modern/QueryClientProvider.cjs`),t=require(`../../node_modules/@tanstack/react-query/build/modern/useMutation.cjs`),n=require(`../../stores/error-message-store.cjs`),r=require(`../../types/agent-server/core/base/common.cjs`),i=require(`./conversation-mutation-utils.cjs`);var a=()=>{let a=e.useQueryClient(),o=n.useErrorMessageStore(e=>e.removeErrorMessage);return t.useMutation({mutationKey:[`start-conversation`],mutationFn:async e=>i.resumeConversation(e.conversationId),onMutate:async()=>(await a.cancelQueries({queryKey:[`user`,`conversations`]}),{previousConversations:a.getQueryData([`user`,`conversations`])}),onError:(e,t,n)=>{n?.previousConversations&&a.setQueryData([`user`,`conversations`],n.previousConversations)},onSettled:(e,t,n)=>{i.invalidateConversationQueries(a,n.conversationId)},onSuccess:(e,t)=>{o(),i.updateConversationExecutionStatusInCache(a,t.conversationId,r.ExecutionStatus.RUNNING)}})};exports.useUnifiedResumeConversation=a;
1
+ require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../types/agent-server/core/base/common.cjs`),t=require(`../../node_modules/@tanstack/react-query/build/modern/QueryClientProvider.cjs`),n=require(`../../node_modules/@tanstack/react-query/build/modern/useMutation.cjs`),r=require(`../../stores/error-message-store.cjs`),i=require(`./conversation-mutation-utils.cjs`);var a=()=>{let a=t.useQueryClient(),o=r.useErrorMessageStore(e=>e.removeErrorMessage);return n.useMutation({mutationKey:[`start-conversation`],mutationFn:async e=>i.resumeConversation(e.conversationId),onMutate:async()=>(await a.cancelQueries({queryKey:[`user`,`conversations`]}),{previousConversations:a.getQueryData([`user`,`conversations`])}),onError:(e,t,n)=>{n?.previousConversations&&a.setQueryData([`user`,`conversations`],n.previousConversations)},onSettled:(e,t,n)=>{i.invalidateConversationQueries(a,n.conversationId)},onSuccess:(t,n)=>{o(),i.updateConversationExecutionStatusInCache(a,n.conversationId,e.ExecutionStatus.RUNNING)}})};exports.useUnifiedResumeConversation=a;
2
2
  //# sourceMappingURL=use-unified-start-conversation.cjs.map
@@ -1,12 +1,12 @@
1
- import { useQueryClient as e } from "../../node_modules/@tanstack/react-query/build/modern/QueryClientProvider.js";
2
- import { useMutation as t } from "../../node_modules/@tanstack/react-query/build/modern/useMutation.js";
3
- import { useErrorMessageStore as n } from "../../stores/error-message-store.js";
4
- import { ExecutionStatus as r } from "../../types/agent-server/core/base/common.js";
1
+ import { ExecutionStatus as e } from "../../types/agent-server/core/base/common.js";
2
+ import { useQueryClient as t } from "../../node_modules/@tanstack/react-query/build/modern/QueryClientProvider.js";
3
+ import { useMutation as n } from "../../node_modules/@tanstack/react-query/build/modern/useMutation.js";
4
+ import { useErrorMessageStore as r } from "../../stores/error-message-store.js";
5
5
  import { invalidateConversationQueries as i, resumeConversation as a, updateConversationExecutionStatusInCache as o } from "./conversation-mutation-utils.js";
6
6
  //#region src/hooks/mutation/use-unified-start-conversation.ts
7
7
  var s = () => {
8
- let s = e(), c = n((e) => e.removeErrorMessage);
9
- return t({
8
+ let s = t(), c = r((e) => e.removeErrorMessage);
9
+ return n({
10
10
  mutationKey: ["start-conversation"],
11
11
  mutationFn: async (e) => a(e.conversationId),
12
12
  onMutate: async () => (await s.cancelQueries({ queryKey: ["user", "conversations"] }), { previousConversations: s.getQueryData(["user", "conversations"]) }),
@@ -16,8 +16,8 @@ var s = () => {
16
16
  onSettled: (e, t, n) => {
17
17
  i(s, n.conversationId);
18
18
  },
19
- onSuccess: (e, t) => {
20
- c(), o(s, t.conversationId, r.RUNNING);
19
+ onSuccess: (t, n) => {
20
+ c(), o(s, n.conversationId, e.RUNNING);
21
21
  }
22
22
  });
23
23
  };
@@ -1,2 +1,2 @@
1
- require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../node_modules/react-i18next/dist/es/useTranslation.cjs`),t=require(`../../i18n/declaration.cjs`),n=require(`../../context/navigation-context.cjs`),r=require(`../../node_modules/react-hot-toast/dist/index.cjs`),i=require(`../../utils/custom-toast-handlers.cjs`),a=require(`../../node_modules/@tanstack/react-query/build/modern/QueryClientProvider.cjs`),o=require(`../../node_modules/@tanstack/react-query/build/modern/useMutation.cjs`),s=require(`../../types/agent-server/core/base/common.cjs`),c=require(`./conversation-mutation-utils.cjs`);var l=()=>{let{t:l}=e.useTranslation(`openhands`),u=a.useQueryClient(),{conversationId:d,navigate:f}=n.useNavigation();return o.useMutation({mutationKey:[`stop-conversation`],mutationFn:async e=>c.pauseConversation(e.conversationId),onMutate:async()=>{let e=r.zt.loading(l(t.I18nKey.TOAST$STOPPING_CONVERSATION),i.TOAST_OPTIONS);return await u.cancelQueries({queryKey:[`user`,`conversations`]}),{previousConversations:u.getQueryData([`user`,`conversations`]),toastId:e}},onError:(e,n,a)=>{a?.toastId&&r.zt.dismiss(a.toastId),i.displayErrorToast(l(t.I18nKey.TOAST$FAILED_TO_STOP_CONVERSATION)),a?.previousConversations&&u.setQueryData([`user`,`conversations`],a.previousConversations)},onSuccess:(e,n,a)=>{a?.toastId&&r.zt.dismiss(a.toastId),r.zt.success(l(t.I18nKey.TOAST$CONVERSATION_STOPPED),i.TOAST_OPTIONS),c.patchConversationInCache(u,n.conversationId,{execution_status:s.ExecutionStatus.PAUSED,sandbox_status:`PAUSED`}),d===n.conversationId&&f(`/conversations`)}})};exports.useUnifiedPauseConversation=l;
1
+ require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../node_modules/react-i18next/dist/es/useTranslation.cjs`),t=require(`../../i18n/declaration.cjs`),n=require(`../../types/agent-server/core/base/common.cjs`),r=require(`../../context/navigation-context.cjs`),i=require(`../../node_modules/react-hot-toast/dist/index.cjs`),a=require(`../../utils/custom-toast-handlers.cjs`),o=require(`../../node_modules/@tanstack/react-query/build/modern/QueryClientProvider.cjs`),s=require(`../../node_modules/@tanstack/react-query/build/modern/useMutation.cjs`),c=require(`./conversation-mutation-utils.cjs`);var l=()=>{let{t:l}=e.useTranslation(`openhands`),u=o.useQueryClient(),{conversationId:d,navigate:f}=r.useNavigation();return s.useMutation({mutationKey:[`stop-conversation`],mutationFn:async e=>c.pauseConversation(e.conversationId),onMutate:async()=>{let e=i.zt.loading(l(t.I18nKey.TOAST$STOPPING_CONVERSATION),a.TOAST_OPTIONS);return await u.cancelQueries({queryKey:[`user`,`conversations`]}),{previousConversations:u.getQueryData([`user`,`conversations`]),toastId:e}},onError:(e,n,r)=>{r?.toastId&&i.zt.dismiss(r.toastId),a.displayErrorToast(l(t.I18nKey.TOAST$FAILED_TO_STOP_CONVERSATION)),r?.previousConversations&&u.setQueryData([`user`,`conversations`],r.previousConversations)},onSuccess:(e,r,o)=>{o?.toastId&&i.zt.dismiss(o.toastId),i.zt.success(l(t.I18nKey.TOAST$CONVERSATION_STOPPED),a.TOAST_OPTIONS),c.patchConversationInCache(u,r.conversationId,{execution_status:n.ExecutionStatus.PAUSED,sandbox_status:`PAUSED`}),d===r.conversationId&&f(`/conversations`)}})};exports.useUnifiedPauseConversation=l;
2
2
  //# sourceMappingURL=use-unified-stop-conversation.cjs.map
@@ -1,33 +1,33 @@
1
1
  import { useTranslation as e } from "../../node_modules/react-i18next/dist/es/useTranslation.js";
2
2
  import { I18nKey as t } from "../../i18n/declaration.js";
3
- import { useNavigation as n } from "../../context/navigation-context.js";
4
- import { zt as r } from "../../node_modules/react-hot-toast/dist/index.js";
5
- import { TOAST_OPTIONS as i, displayErrorToast as a } from "../../utils/custom-toast-handlers.js";
6
- import { useQueryClient as o } from "../../node_modules/@tanstack/react-query/build/modern/QueryClientProvider.js";
7
- import { useMutation as s } from "../../node_modules/@tanstack/react-query/build/modern/useMutation.js";
8
- import { ExecutionStatus as c } from "../../types/agent-server/core/base/common.js";
3
+ import { ExecutionStatus as n } from "../../types/agent-server/core/base/common.js";
4
+ import { useNavigation as r } from "../../context/navigation-context.js";
5
+ import { zt as i } from "../../node_modules/react-hot-toast/dist/index.js";
6
+ import { TOAST_OPTIONS as a, displayErrorToast as o } from "../../utils/custom-toast-handlers.js";
7
+ import { useQueryClient as s } from "../../node_modules/@tanstack/react-query/build/modern/QueryClientProvider.js";
8
+ import { useMutation as c } from "../../node_modules/@tanstack/react-query/build/modern/useMutation.js";
9
9
  import { patchConversationInCache as l, pauseConversation as u } from "./conversation-mutation-utils.js";
10
10
  //#region src/hooks/mutation/use-unified-stop-conversation.ts
11
11
  var d = () => {
12
- let { t: d } = e("openhands"), f = o(), { conversationId: p, navigate: m } = n();
13
- return s({
12
+ let { t: d } = e("openhands"), f = s(), { conversationId: p, navigate: m } = r();
13
+ return c({
14
14
  mutationKey: ["stop-conversation"],
15
15
  mutationFn: async (e) => u(e.conversationId),
16
16
  onMutate: async () => {
17
- let e = r.loading(d(t.TOAST$STOPPING_CONVERSATION), i);
17
+ let e = i.loading(d(t.TOAST$STOPPING_CONVERSATION), a);
18
18
  return await f.cancelQueries({ queryKey: ["user", "conversations"] }), {
19
19
  previousConversations: f.getQueryData(["user", "conversations"]),
20
20
  toastId: e
21
21
  };
22
22
  },
23
- onError: (e, n, i) => {
24
- i?.toastId && r.dismiss(i.toastId), a(d(t.TOAST$FAILED_TO_STOP_CONVERSATION)), i?.previousConversations && f.setQueryData(["user", "conversations"], i.previousConversations);
23
+ onError: (e, n, r) => {
24
+ r?.toastId && i.dismiss(r.toastId), o(d(t.TOAST$FAILED_TO_STOP_CONVERSATION)), r?.previousConversations && f.setQueryData(["user", "conversations"], r.previousConversations);
25
25
  },
26
- onSuccess: (e, n, a) => {
27
- a?.toastId && r.dismiss(a.toastId), r.success(d(t.TOAST$CONVERSATION_STOPPED), i), l(f, n.conversationId, {
28
- execution_status: c.PAUSED,
26
+ onSuccess: (e, r, o) => {
27
+ o?.toastId && i.dismiss(o.toastId), i.success(d(t.TOAST$CONVERSATION_STOPPED), a), l(f, r.conversationId, {
28
+ execution_status: n.PAUSED,
29
29
  sandbox_status: "PAUSED"
30
- }), p === n.conversationId && m("/conversations");
30
+ }), p === r.conversationId && m("/conversations");
31
31
  }
32
32
  });
33
33
  };
@@ -0,0 +1,36 @@
1
+ import { type AcpAuthStatus } from "#/api/acp-service/acp-service.api";
2
+ export type { AcpAuthStatus };
3
+ interface UseAcpAuthStatusOptions {
4
+ /**
5
+ * Gate the probe to when the consuming surface is actually visible — the
6
+ * onboarding modal mounts every slide at once, so without this the probe
7
+ * would fire (and spin a subprocess) before the user reaches the step and
8
+ * before the backend is confirmed connected. Defaults to ``true``.
9
+ */
10
+ enabled?: boolean;
11
+ }
12
+ /**
13
+ * React Query wrapper around {@link probeAcpAuth}.
14
+ *
15
+ * Gated to **local backends only**: the detection command runs wherever the
16
+ * agent-server runs, and a provider CLI / credentials file is only reliably
17
+ * present on the user's own machine. On a remote/cloud backend they're ~never
18
+ * there, so we skip the probe, return ``"unknown"``, and let the caller fall
19
+ * back to the (already optional) API-key fields.
20
+ *
21
+ * Eligibility is intentionally *not* tied to whether the provider has API-key
22
+ * fields: subscription/OAuth providers (e.g. Gemini) are detectable too, and an
23
+ * unknown ``providerKey`` simply classifies as ``"unknown"``. The caller renders
24
+ * this hook only for ACP providers, so any local backend is probeable.
25
+ *
26
+ * The probe runs a subprocess on the agent-server, so the result is cached for
27
+ * the session (``staleTime: Infinity``, no refetch on focus/mount) — one probe
28
+ * per provider per backend.
29
+ */
30
+ export declare function useAcpAuthStatus(providerKey: string | null | undefined, options?: UseAcpAuthStatusOptions): {
31
+ status: AcpAuthStatus;
32
+ /** True while the first probe for this provider is in flight. */
33
+ isChecking: boolean;
34
+ /** Whether a probe can run at all on this backend (local backends only). */
35
+ isSupported: boolean;
36
+ };
@@ -1,2 +1,2 @@
1
- require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../node_modules/@tanstack/react-query/build/modern/useQuery.cjs`),t=require(`../../api/settings-service/settings-service.api.cjs`),n=require(`./use-is-authed.cjs`);var r=(r,i)=>{let{data:a}=n.useIsAuthed(),{data:o,error:s,isLoading:c,isFetching:l}=e.useQuery({queryKey:[`settings-schema`,r],queryFn:r===`conversation`?t.default.getConversationSettingsSchema:t.default.getSettingsSchema,retry:!1,refetchOnWindowFocus:!1,staleTime:1e3*60*5,gcTime:1e3*60*15,enabled:!i&&!!a,meta:{disableToast:!0}});return i?{data:i,error:null,isLoading:!1,isFetching:!1}:{data:o,error:s,isLoading:c,isFetching:l}},i=e=>r(`agent`,e),a=e=>r(`conversation`,e);exports.useAgentSettingsSchema=i,exports.useConversationSettingsSchema=a;
1
+ require(`../../_virtual/_rolldown/runtime.cjs`);const e=require(`../../api/backend-registry/active-store.cjs`),t=require(`../../contexts/active-backend-context.cjs`),n=require(`../../node_modules/@tanstack/react-query/build/modern/useQuery.cjs`),r=require(`../../api/settings-service/settings-service.api.cjs`),i=require(`./use-is-authed.cjs`);var a=(a,o)=>{let{data:s}=i.useIsAuthed(),{backend:c,orgId:l}=t.useActiveBackend(),u=!e.isNoBackend(c),{data:d,error:f,isLoading:p,isFetching:m}=n.useQuery({queryKey:[`settings-schema`,a,c.id,l,c.kind,c.host,c.apiKey],queryFn:a===`conversation`?r.default.getConversationSettingsSchema:r.default.getSettingsSchema,retry:!1,refetchOnWindowFocus:!1,staleTime:1e3*60*5,gcTime:1e3*60*15,enabled:!o&&!!s&&u,meta:{disableToast:!0}});return o?{data:o,error:null,isLoading:!1,isFetching:!1}:{data:d,error:f,isLoading:p,isFetching:m}},o=e=>a(`agent`,e),s=e=>a(`conversation`,e);exports.useAgentSettingsSchema=o,exports.useConversationSettingsSchema=s;
2
2
  //# sourceMappingURL=use-agent-settings-schema.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-agent-settings-schema.cjs","names":[],"sources":["../../../src/hooks/query/use-agent-settings-schema.ts"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport SettingsService from \"#/api/settings-service/settings-service.api\";\nimport { SettingsSchema } from \"#/types/settings\";\nimport { useIsAuthed } from \"./use-is-authed\";\n\nconst useSettingsSchema = (\n type: \"agent\" | \"conversation\",\n fallbackSchema?: SettingsSchema | null,\n) => {\n const { data: userIsAuthenticated } = useIsAuthed();\n const { data, error, isLoading, isFetching } = useQuery({\n queryKey: [\"settings-schema\", type],\n queryFn:\n type === \"conversation\"\n ? SettingsService.getConversationSettingsSchema\n : SettingsService.getSettingsSchema,\n retry: false,\n refetchOnWindowFocus: false,\n staleTime: 1000 * 60 * 5,\n gcTime: 1000 * 60 * 15,\n enabled: !fallbackSchema && !!userIsAuthenticated,\n meta: {\n disableToast: true,\n },\n });\n\n if (fallbackSchema) {\n return {\n data: fallbackSchema,\n error: null,\n isLoading: false,\n isFetching: false,\n };\n }\n\n return {\n data,\n error,\n isLoading,\n isFetching,\n };\n};\n\nexport const useAgentSettingsSchema = (\n fallbackSchema?: SettingsSchema | null,\n) => useSettingsSchema(\"agent\", fallbackSchema);\n\nexport const useConversationSettingsSchema = (\n fallbackSchema?: SettingsSchema | null,\n) => useSettingsSchema(\"conversation\", fallbackSchema);\n"],"mappings":"wOAKA,IAAM,GACJ,EACA,IACG,CACH,GAAM,CAAE,KAAM,GAAwB,EAAA,aAAa,CAC7C,CAAE,OAAM,QAAO,YAAW,cAAe,EAAA,SAAS,CACtD,SAAU,CAAC,kBAAmB,EAAK,CACnC,QACE,IAAS,eACL,EAAA,QAAgB,8BAChB,EAAA,QAAgB,kBACtB,MAAO,GACP,qBAAsB,GACtB,UAAW,IAAO,GAAK,EACvB,OAAQ,IAAO,GAAK,GACpB,QAAS,CAAC,GAAkB,CAAC,CAAC,EAC9B,KAAM,CACJ,aAAc,GACf,CACF,CAAC,CAWF,OATI,EACK,CACL,KAAM,EACN,MAAO,KACP,UAAW,GACX,WAAY,GACb,CAGI,CACL,OACA,QACA,YACA,aACD,EAGU,EACX,GACG,EAAkB,QAAS,EAAe,CAElC,EACX,GACG,EAAkB,eAAgB,EAAe"}
1
+ {"version":3,"file":"use-agent-settings-schema.cjs","names":[],"sources":["../../../src/hooks/query/use-agent-settings-schema.ts"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport { isNoBackend } from \"#/api/backend-registry/active-store\";\nimport SettingsService from \"#/api/settings-service/settings-service.api\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport { SettingsSchema } from \"#/types/settings\";\nimport { useIsAuthed } from \"./use-is-authed\";\n\nconst useSettingsSchema = (\n type: \"agent\" | \"conversation\",\n fallbackSchema?: SettingsSchema | null,\n) => {\n const { data: userIsAuthenticated } = useIsAuthed();\n const { backend, orgId } = useActiveBackend();\n const hasBackend = !isNoBackend(backend);\n const { data, error, isLoading, isFetching } = useQuery({\n queryKey: [\n \"settings-schema\",\n type,\n backend.id,\n orgId,\n backend.kind,\n backend.host,\n backend.apiKey,\n ],\n queryFn:\n type === \"conversation\"\n ? SettingsService.getConversationSettingsSchema\n : SettingsService.getSettingsSchema,\n retry: false,\n refetchOnWindowFocus: false,\n staleTime: 1000 * 60 * 5,\n gcTime: 1000 * 60 * 15,\n enabled: !fallbackSchema && !!userIsAuthenticated && hasBackend,\n meta: {\n disableToast: true,\n },\n });\n\n if (fallbackSchema) {\n return {\n data: fallbackSchema,\n error: null,\n isLoading: false,\n isFetching: false,\n };\n }\n\n return {\n data,\n error,\n isLoading,\n isFetching,\n };\n};\n\nexport const useAgentSettingsSchema = (\n fallbackSchema?: SettingsSchema | null,\n) => useSettingsSchema(\"agent\", fallbackSchema);\n\nexport const useConversationSettingsSchema = (\n fallbackSchema?: SettingsSchema | null,\n) => useSettingsSchema(\"conversation\", fallbackSchema);\n"],"mappings":"wVAOA,IAAM,GACJ,EACA,IACG,CACH,GAAM,CAAE,KAAM,GAAwB,EAAA,aAAa,CAC7C,CAAE,UAAS,SAAU,EAAA,kBAAkB,CACvC,EAAa,CAAC,EAAA,YAAY,EAAQ,CAClC,CAAE,OAAM,QAAO,YAAW,cAAe,EAAA,SAAS,CACtD,SAAU,CACR,kBACA,EACA,EAAQ,GACR,EACA,EAAQ,KACR,EAAQ,KACR,EAAQ,OACT,CACD,QACE,IAAS,eACL,EAAA,QAAgB,8BAChB,EAAA,QAAgB,kBACtB,MAAO,GACP,qBAAsB,GACtB,UAAW,IAAO,GAAK,EACvB,OAAQ,IAAO,GAAK,GACpB,QAAS,CAAC,GAAkB,CAAC,CAAC,GAAuB,EACrD,KAAM,CACJ,aAAc,GACf,CACF,CAAC,CAWF,OATI,EACK,CACL,KAAM,EACN,MAAO,KACP,UAAW,GACX,WAAY,GACb,CAGI,CACL,OACA,QACA,YACA,aACD,EAGU,EACX,GACG,EAAkB,QAAS,EAAe,CAElC,EACX,GACG,EAAkB,eAAgB,EAAe"}
@@ -1,31 +1,41 @@
1
- import { useQuery as e } from "../../node_modules/@tanstack/react-query/build/modern/useQuery.js";
2
- import t from "../../api/settings-service/settings-service.api.js";
3
- import { useIsAuthed as n } from "./use-is-authed.js";
1
+ import { isNoBackend as e } from "../../api/backend-registry/active-store.js";
2
+ import { useActiveBackend as t } from "../../contexts/active-backend-context.js";
3
+ import { useQuery as n } from "../../node_modules/@tanstack/react-query/build/modern/useQuery.js";
4
+ import r from "../../api/settings-service/settings-service.api.js";
5
+ import { useIsAuthed as i } from "./use-is-authed.js";
4
6
  //#region src/hooks/query/use-agent-settings-schema.ts
5
- var r = (r, i) => {
6
- let { data: a } = n(), { data: o, error: s, isLoading: c, isFetching: l } = e({
7
- queryKey: ["settings-schema", r],
8
- queryFn: r === "conversation" ? t.getConversationSettingsSchema : t.getSettingsSchema,
7
+ var a = (a, o) => {
8
+ let { data: s } = i(), { backend: c, orgId: l } = t(), u = !e(c), { data: d, error: f, isLoading: p, isFetching: m } = n({
9
+ queryKey: [
10
+ "settings-schema",
11
+ a,
12
+ c.id,
13
+ l,
14
+ c.kind,
15
+ c.host,
16
+ c.apiKey
17
+ ],
18
+ queryFn: a === "conversation" ? r.getConversationSettingsSchema : r.getSettingsSchema,
9
19
  retry: !1,
10
20
  refetchOnWindowFocus: !1,
11
21
  staleTime: 1e3 * 60 * 5,
12
22
  gcTime: 1e3 * 60 * 15,
13
- enabled: !i && !!a,
23
+ enabled: !o && !!s && u,
14
24
  meta: { disableToast: !0 }
15
25
  });
16
- return i ? {
17
- data: i,
26
+ return o ? {
27
+ data: o,
18
28
  error: null,
19
29
  isLoading: !1,
20
30
  isFetching: !1
21
31
  } : {
22
- data: o,
23
- error: s,
24
- isLoading: c,
25
- isFetching: l
32
+ data: d,
33
+ error: f,
34
+ isLoading: p,
35
+ isFetching: m
26
36
  };
27
- }, i = (e) => r("agent", e), a = (e) => r("conversation", e);
37
+ }, o = (e) => a("agent", e), s = (e) => a("conversation", e);
28
38
  //#endregion
29
- export { i as useAgentSettingsSchema, a as useConversationSettingsSchema };
39
+ export { o as useAgentSettingsSchema, s as useConversationSettingsSchema };
30
40
 
31
41
  //# sourceMappingURL=use-agent-settings-schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-agent-settings-schema.js","names":[],"sources":["../../../src/hooks/query/use-agent-settings-schema.ts"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport SettingsService from \"#/api/settings-service/settings-service.api\";\nimport { SettingsSchema } from \"#/types/settings\";\nimport { useIsAuthed } from \"./use-is-authed\";\n\nconst useSettingsSchema = (\n type: \"agent\" | \"conversation\",\n fallbackSchema?: SettingsSchema | null,\n) => {\n const { data: userIsAuthenticated } = useIsAuthed();\n const { data, error, isLoading, isFetching } = useQuery({\n queryKey: [\"settings-schema\", type],\n queryFn:\n type === \"conversation\"\n ? SettingsService.getConversationSettingsSchema\n : SettingsService.getSettingsSchema,\n retry: false,\n refetchOnWindowFocus: false,\n staleTime: 1000 * 60 * 5,\n gcTime: 1000 * 60 * 15,\n enabled: !fallbackSchema && !!userIsAuthenticated,\n meta: {\n disableToast: true,\n },\n });\n\n if (fallbackSchema) {\n return {\n data: fallbackSchema,\n error: null,\n isLoading: false,\n isFetching: false,\n };\n }\n\n return {\n data,\n error,\n isLoading,\n isFetching,\n };\n};\n\nexport const useAgentSettingsSchema = (\n fallbackSchema?: SettingsSchema | null,\n) => useSettingsSchema(\"agent\", fallbackSchema);\n\nexport const useConversationSettingsSchema = (\n fallbackSchema?: SettingsSchema | null,\n) => useSettingsSchema(\"conversation\", fallbackSchema);\n"],"mappings":";;;;AAKA,IAAM,KACJ,GACA,MACG;CACH,IAAM,EAAE,MAAM,MAAwB,GAAa,EAC7C,EAAE,SAAM,UAAO,cAAW,kBAAe,EAAS;EACtD,UAAU,CAAC,mBAAmB,EAAK;EACnC,SACE,MAAS,iBACL,EAAgB,gCAChB,EAAgB;EACtB,OAAO;EACP,sBAAsB;EACtB,WAAW,MAAO,KAAK;EACvB,QAAQ,MAAO,KAAK;EACpB,SAAS,CAAC,KAAkB,CAAC,CAAC;EAC9B,MAAM,EACJ,cAAc,IACf;EACF,CAAC;AAWF,QATI,IACK;EACL,MAAM;EACN,OAAO;EACP,WAAW;EACX,YAAY;EACb,GAGI;EACL;EACA;EACA;EACA;EACD;GAGU,KACX,MACG,EAAkB,SAAS,EAAe,EAElC,KACX,MACG,EAAkB,gBAAgB,EAAe"}
1
+ {"version":3,"file":"use-agent-settings-schema.js","names":[],"sources":["../../../src/hooks/query/use-agent-settings-schema.ts"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport { isNoBackend } from \"#/api/backend-registry/active-store\";\nimport SettingsService from \"#/api/settings-service/settings-service.api\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport { SettingsSchema } from \"#/types/settings\";\nimport { useIsAuthed } from \"./use-is-authed\";\n\nconst useSettingsSchema = (\n type: \"agent\" | \"conversation\",\n fallbackSchema?: SettingsSchema | null,\n) => {\n const { data: userIsAuthenticated } = useIsAuthed();\n const { backend, orgId } = useActiveBackend();\n const hasBackend = !isNoBackend(backend);\n const { data, error, isLoading, isFetching } = useQuery({\n queryKey: [\n \"settings-schema\",\n type,\n backend.id,\n orgId,\n backend.kind,\n backend.host,\n backend.apiKey,\n ],\n queryFn:\n type === \"conversation\"\n ? SettingsService.getConversationSettingsSchema\n : SettingsService.getSettingsSchema,\n retry: false,\n refetchOnWindowFocus: false,\n staleTime: 1000 * 60 * 5,\n gcTime: 1000 * 60 * 15,\n enabled: !fallbackSchema && !!userIsAuthenticated && hasBackend,\n meta: {\n disableToast: true,\n },\n });\n\n if (fallbackSchema) {\n return {\n data: fallbackSchema,\n error: null,\n isLoading: false,\n isFetching: false,\n };\n }\n\n return {\n data,\n error,\n isLoading,\n isFetching,\n };\n};\n\nexport const useAgentSettingsSchema = (\n fallbackSchema?: SettingsSchema | null,\n) => useSettingsSchema(\"agent\", fallbackSchema);\n\nexport const useConversationSettingsSchema = (\n fallbackSchema?: SettingsSchema | null,\n) => useSettingsSchema(\"conversation\", fallbackSchema);\n"],"mappings":";;;;;;AAOA,IAAM,KACJ,GACA,MACG;CACH,IAAM,EAAE,MAAM,MAAwB,GAAa,EAC7C,EAAE,YAAS,aAAU,GAAkB,EACvC,IAAa,CAAC,EAAY,EAAQ,EAClC,EAAE,SAAM,UAAO,cAAW,kBAAe,EAAS;EACtD,UAAU;GACR;GACA;GACA,EAAQ;GACR;GACA,EAAQ;GACR,EAAQ;GACR,EAAQ;GACT;EACD,SACE,MAAS,iBACL,EAAgB,gCAChB,EAAgB;EACtB,OAAO;EACP,sBAAsB;EACtB,WAAW,MAAO,KAAK;EACvB,QAAQ,MAAO,KAAK;EACpB,SAAS,CAAC,KAAkB,CAAC,CAAC,KAAuB;EACrD,MAAM,EACJ,cAAc,IACf;EACF,CAAC;AAWF,QATI,IACK;EACL,MAAM;EACN,OAAO;EACP,WAAW;EACX,YAAY;EACb,GAGI;EACL;EACA;EACA;EACA;EACD;GAGU,KACX,MACG,EAAkB,SAAS,EAAe,EAElC,KACX,MACG,EAAkB,gBAAgB,EAAe"}
@@ -1,2 +1,2 @@
1
- const e=require(`../../_virtual/_rolldown/runtime.cjs`),t=require(`../../api/backend-registry/health-store.cjs`),n=require(`../../node_modules/@openhands/typescript-client/dist/client/server-client.cjs`),r=require(`../../node_modules/@tanstack/react-query/build/modern/useQueries.cjs`),i=require(`../../api/agent-server-client-options.cjs`),a=require(`../../api/cloud/organization-service.api.cjs`);let o=require(`react`);o=e.__toESM(o,1);var s=1e4,c=4e3;async function l(e){return e.kind===`cloud`?(await a.getCurrentCloudApiKey(e),!0):(await new n.ServerClient(i.getAgentServerClientOptions({host:e.host,sessionApiKey:e.apiKey||null,timeout:c})).getServerInfo(),!0)}function u(e,n={}){let{probeDisabledOnce:i=!1}=n,a=o.default.useSyncExternalStore(t.subscribeBackendHealth,t.getHealthSnapshot,t.getHealthSnapshot),c=r.useQueries({queries:e.map(e=>{let n=a[e.id]?.disabled===!0,r=!n||i;return{queryKey:[`backend-health`,e.id,e.kind,e.host,e.apiKey??``],queryFn:async()=>{try{let n=await l(e);return t.recordBackendSuccess(e.id),n}catch(n){throw t.recordBackendFailure(e.id,n),n}},enabled:r,refetchInterval:n?!1:s,refetchIntervalInBackground:!1,refetchOnMount:n&&i?`always`:!0,refetchOnReconnect:!n,refetchOnWindowFocus:!n,retry:!1,staleTime:n?0:s,meta:{disableToast:!0}}})}),u={};return e.forEach((e,t)=>{let n=c[t],r=a[e.id],i=r?.disabled===!0,o=r?.consecutiveFailures??0,s=r?.lastError??null,l;l=i?!1:n.isSuccess?!0:n.isError?!1:null,u[e.id]={isConnected:l,consecutiveFailures:o,lastError:s,disabled:i}}),u}exports.useBackendsHealth=u;
1
+ const e=require(`../../_virtual/_rolldown/runtime.cjs`),t=require(`../../api/backend-registry/health-store.cjs`),n=require(`../../node_modules/@openhands/typescript-client/dist/client/settings-client.cjs`),r=require(`../../node_modules/@tanstack/react-query/build/modern/useQueries.cjs`),i=require(`../../api/agent-server-client-options.cjs`),a=require(`../../api/agent-server-compatibility.cjs`),o=require(`../../api/cloud/organization-service.api.cjs`);let s=require(`react`);s=e.__toESM(s,1);var c=1e4,l=4e3,u=`Invalid API key`;function d(e){return e===u}async function f(e){if(e.kind===`cloud`)return await o.getCurrentCloudApiKey(e),!0;try{await new n.SettingsClient(i.getAgentServerClientOptions({host:e.host,sessionApiKey:e.apiKey||null,timeout:l})).getSettings()}catch(e){throw a.isSdkHttpStatusError(e,401)?Error(u):e}return!0}function p(e,n={}){let{probeDisabledOnce:i=!1}=n,a=s.default.useSyncExternalStore(t.subscribeBackendHealth,t.getHealthSnapshot,t.getHealthSnapshot),o=r.useQueries({queries:e.map(e=>{let n=a[e.id]?.disabled===!0,r=!n||i;return{queryKey:[`backend-health`,e.id,e.kind,e.host,e.apiKey??``],queryFn:async()=>{try{let n=await f(e);return t.recordBackendSuccess(e.id),n}catch(n){throw t.recordBackendFailure(e.id,n),n}},enabled:r,refetchInterval:n?!1:c,refetchIntervalInBackground:!1,refetchOnMount:n&&i?`always`:!0,refetchOnReconnect:!n,refetchOnWindowFocus:!n,retry:!1,staleTime:n?0:c,meta:{disableToast:!0}}})}),l={};return e.forEach((e,t)=>{let n=o[t],r=a[e.id],i=r?.disabled===!0,s=r?.consecutiveFailures??0,c=r?.lastError??null,u;u=i?!1:n.isSuccess?!0:n.isError?!1:null,l[e.id]={isConnected:u,consecutiveFailures:s,lastError:c,disabled:i}}),l}exports.isInvalidBackendApiKeyHealthError=d,exports.useBackendsHealth=p;
2
2
  //# sourceMappingURL=use-backends-health.cjs.map