@openhands/agent-canvas 1.16.0 → 1.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1093) hide show
  1. package/README.md +1 -1
  2. package/README.windows.md +2 -2
  3. package/build/assets/{acp-providers-CX3Lh9gj.js → acp-providers-DcY_mKYa.js} +1 -1
  4. package/build/assets/active-backend-context-BnH4-L8h.js +2 -0
  5. package/build/assets/{agent-context-settings-DSZlXrLj.js → agent-context-settings-D3peZkjX.js} +1 -1
  6. package/build/assets/agent-profiles-service.api-DkeZaqIl.js +1 -0
  7. package/build/assets/agent-profiles-settings-7yMWYjGF.js +1 -0
  8. package/build/assets/agent-server-client-options-EHB23gyx.js +1 -0
  9. package/build/assets/agent-server-config-C_x8Otd9.js +1 -0
  10. package/build/assets/agent-server-conversation-service.api-jiCopc2E.js +88 -0
  11. package/build/assets/agent-settings-BF8hM6wb.js +2 -0
  12. package/build/assets/agent-settings-YPutBAeR.js +1 -0
  13. package/build/assets/alert-banner-eYyqvHL3.js +1 -0
  14. package/build/assets/{api-error-message-B-XdSk3b.js → api-error-message-BXo0lCI5.js} +1 -1
  15. package/build/assets/api-key-entry-screen-CCBvBD8u.js +1 -0
  16. package/build/assets/app-settings-BtYDs-Be.js +1 -0
  17. package/build/assets/automation-detail-BxXhb_m2.js +3 -0
  18. package/build/assets/{automation-export-D3a3of4G.js → automation-export-BJsfi7n2.js} +1 -1
  19. package/build/assets/automation-git-sync-B7o_Nbl-.js +1 -0
  20. package/build/assets/automation-setup-route-qaJ6lLCf.js +3 -0
  21. package/build/assets/{automation-templates-BRppNh99.js → automation-templates-Bb98r-kx.js} +1 -1
  22. package/build/assets/automations-list-DEPVNud3.js +1 -0
  23. package/build/assets/{back-nav-button-Cjl_hoxq.js → back-nav-button-B2yBiVMB.js} +1 -1
  24. package/build/assets/backend-form-modal-DxisQV_6.js +1 -0
  25. package/build/assets/backend-synced-settings-badge-DLEp6cq7.js +1 -0
  26. package/build/assets/badge-ehL-kgeO.js +1 -0
  27. package/build/assets/{base-modal-D_L0oEbG.js → base-modal-C1a0TsSx.js} +1 -1
  28. package/build/assets/bot-ByolqPEr.js +1 -0
  29. package/build/assets/{brand-button-BAfk4wGP.js → brand-button-CUMfjb99.js} +1 -1
  30. package/build/assets/browser-SE24Tk8g.js +46 -0
  31. package/build/assets/browser-tab-HjJxHA0V.js +1 -0
  32. package/build/assets/canvas-extension-page-BsUGBb1T.js +1 -0
  33. package/build/assets/canvas-extensions-C9Tm6s_E.js +1 -0
  34. package/build/assets/{canvas-extensions-runtime-2_x5Ezmi.js → canvas-extensions-runtime-B8kxM4rO.js} +1 -1
  35. package/build/assets/{chat-send-button-MUQqCZCS.js → chat-send-button-CGvc2wpE.js} +1 -1
  36. package/build/assets/check-Bo8s5Ylg.js +1 -0
  37. package/build/assets/chevron-down-Cr6Fn_wS.js +1 -0
  38. package/build/assets/chevron-right-CfdfRn-8.js +1 -0
  39. package/build/assets/circle-check-5pH3qCji.js +1 -0
  40. package/build/assets/circle-plus-check-toggle-BDX_ctNs.js +1 -0
  41. package/build/assets/{cloud-funnel-analytics-CztBCCPp.js → cloud-funnel-analytics-D5uJ_4JE.js} +1 -1
  42. package/build/assets/{cog-D-MPQW6G.js → cog-CAEugqtV.js} +1 -1
  43. package/build/assets/command-menu-CQxs4mtX.js +1 -0
  44. package/build/assets/commits-tab-D0xgjipP.js +1 -0
  45. package/build/assets/{condenser-settings-DmEOje-7.js → condenser-settings-D63NJRBT.js} +1 -1
  46. package/build/assets/confirmation-modal-78sd9Vny.js +1 -0
  47. package/build/assets/{context-menu-list-item-I86vKcmM.js → context-menu-list-item-Cm7-7Y-7.js} +1 -1
  48. package/build/assets/conversation-B_nweu5p.js +93 -0
  49. package/build/assets/conversation-edjzrv5w.js +1 -0
  50. package/build/assets/conversation-panel-edjzrv5w.js +1 -0
  51. package/build/assets/conversation-state-store-9D_3P7q4.js +1 -0
  52. package/build/assets/conversation-store-DC-JlJuq.js +6 -0
  53. package/build/assets/{conversation-tab-empty-state-FIbh_lc8.js → conversation-tab-empty-state-B3dpJXX0.js} +1 -1
  54. package/build/assets/copy-to-clipboard-button-B1ljgNxO.js +1 -0
  55. package/build/assets/device-verify-D5QRIS_x.js +1 -0
  56. package/build/assets/{dropdown-classes-Bc1djN0-.js → dropdown-classes-BGvOvW2_.js} +1 -1
  57. package/build/assets/edit-automation-modal-D_JWSmxT.js +1 -0
  58. package/build/assets/empty-state-FK_s1B60.js +1 -0
  59. package/build/assets/{entry.client-CqyPPjOq.js → entry.client-BMafTpjO.js} +2 -2
  60. package/build/assets/enum-filter-dropdown-UNaom12H.js +1 -0
  61. package/build/assets/environment-switch-overlay-COibRUA-.js +1 -0
  62. package/build/assets/error-state-Cf8LRuuY.js +1 -0
  63. package/build/assets/extensions-hub-C_6ahIua.js +1 -0
  64. package/build/assets/extensions-navigation-C5GfpzFe.js +1 -0
  65. package/build/assets/external-link-Bd7Tga-1.js +1 -0
  66. package/build/assets/files-tab-D5PPIWI1.js +1 -0
  67. package/build/assets/{form-control-classes-Bkh5FGrD.js → form-control-classes-Dbq-7YP_.js} +1 -1
  68. package/build/assets/format-model-name-Dfh9Udrx.js +1 -0
  69. package/build/assets/get-git-path-jU2zjqIB.js +1 -0
  70. package/build/assets/git-repo-dropdown-BoDDWXfX.js +1 -0
  71. package/build/assets/git-repo-dropdown-uxlFw2gn.js +1 -0
  72. package/build/assets/highlighted-source-view-C7pAXrT0.js +1 -0
  73. package/build/assets/home-BM5_Wz_R.js +1 -0
  74. package/build/assets/home-Ivfm7KC4.js +1 -0
  75. package/build/assets/home-automation-run-tooltip-B1N2uO9p.js +1 -0
  76. package/build/assets/home-store-DCbei3DX.js +1 -0
  77. package/build/assets/hooks-service-Dnmhqc0Z.js +1 -0
  78. package/build/assets/index-home-td9BN2T3.js +1 -0
  79. package/build/assets/info-BcajzHn1.js +1 -0
  80. package/build/assets/install-server-modal-B81I-5OE.js +1 -0
  81. package/build/assets/kebab-menu-item-content-SCJBwZnp.js +1 -0
  82. package/build/assets/{key-BmVyxs-2.js → key-O84CMFHb.js} +1 -1
  83. package/build/assets/launch-ZLxI4opd.js +1 -0
  84. package/build/assets/list-filter-B8PQk3RA.js +1 -0
  85. package/build/assets/{list-todo-apgLVjMw.js → list-todo-Caa8E1X_.js} +1 -1
  86. package/build/assets/llm-not-configured-banner-Dh_ajcM8.js +27 -0
  87. package/build/assets/llm-settings-CODhjQzy.js +1 -0
  88. package/build/assets/llm-settings-CZaXYgtw.js +1 -0
  89. package/build/assets/llm-subscription-service-CgIDc38n.js +1 -0
  90. package/build/assets/loader-circle-BxJgk73D.js +1 -0
  91. package/build/assets/{loading-spinner-BY9N3pOe.js → loading-spinner-BeLV0IXf.js} +1 -1
  92. package/build/assets/manage-backends-modal-cMXqCb-B.js +1 -0
  93. package/build/assets/manifest-bfeccb98.js +1 -0
  94. package/build/assets/manifest-subpage-layout-CVZgVKoY.js +1 -0
  95. package/build/assets/{map-provider-Cu3Zgumb.js → map-provider-iRs80q_6.js} +1 -1
  96. package/build/assets/markdown-renderer-DyFl9-mL.js +8 -0
  97. package/build/assets/mcp-CraxoXQv.js +1 -0
  98. package/build/assets/{mcp-marketplace-utils-AIBzzHTO.js → mcp-marketplace-utils-C7PYr293.js} +1 -1
  99. package/build/assets/mcp-page-CteH_K0N.js +9 -0
  100. package/build/assets/messages-Bk1xhbU2.js +41 -0
  101. package/build/assets/{modal-body-BxZjsju9.js → modal-body-C24WsdFb.js} +1 -1
  102. package/build/assets/{modal-classes-C8eycCwG.js → modal-classes-B0b9eiL8.js} +1 -1
  103. package/build/assets/modal-close-button-DfqfB2Nj.js +1 -0
  104. package/build/assets/{mouse-pointer-click-Co2uyaPA.js → mouse-pointer-click-BXlRN92t.js} +1 -1
  105. package/build/assets/onboarding-DXFBRqEy.js +1 -0
  106. package/build/assets/onboarding-modal-BT3Gx_sZ.js +1 -0
  107. package/build/assets/organization-service.api-B5CvmnYQ.js +1 -0
  108. package/build/assets/pencil-q-ihqDYv.js +1 -0
  109. package/build/assets/pin-BdroVQdN.js +1 -0
  110. package/build/assets/planner-tab-CstoOlAB.js +1 -0
  111. package/build/assets/plug-7ACOEbMs.js +1 -0
  112. package/build/assets/plugins-management-service-5rqVPEGN.js +1 -0
  113. package/build/assets/plus-C2e21TFC.js +1 -0
  114. package/build/assets/profiles-service.api-D1XKMgr0.js +1 -0
  115. package/build/assets/providers-XmZ9HM4Q.js +1 -0
  116. package/build/assets/proxy-XP6U1Dhv.js +1 -0
  117. package/build/assets/{puzzle-JM_QaRm0.js → puzzle-LJYnuxKe.js} +1 -1
  118. package/build/assets/react-BX7IV650.js +1 -0
  119. package/build/assets/recommended-automations-launcher-DEHRKIAg.js +1 -0
  120. package/build/assets/refresh-cw-BtdC3T8P.js +1 -0
  121. package/build/assets/root-CM6IZHlg.css +1 -0
  122. package/build/assets/root-DdFkodKW.js +2 -0
  123. package/build/assets/root-layout-DUquNZTU.js +2 -0
  124. package/build/assets/schema-field-Y3F8JvXd.js +1 -0
  125. package/build/assets/scroll-fade-state-Dt_fx2kf.js +1 -0
  126. package/build/assets/sdk-section-page-CNZTLwH9.js +1 -0
  127. package/build/assets/secret-form-9-BoGA40.js +1 -0
  128. package/build/assets/secrets-service-BOIsfD9j.js +1 -0
  129. package/build/assets/secrets-settings-CBJgFr42.js +1 -0
  130. package/build/assets/settings-D4hdToD4.js +1 -0
  131. package/build/assets/settings-dropdown-input-DBvsZ7-Q.js +1 -0
  132. package/build/assets/settings-index-DeQphyBK.js +1 -0
  133. package/build/assets/settings-input-dVuzapBA.js +1 -0
  134. package/build/assets/{settings-list-classes-BzeSZbF2.js → settings-list-classes-DhAPuXm6.js} +1 -1
  135. package/build/assets/settings-modal-tHiJ8iYV.js +1 -0
  136. package/build/assets/settings-nav-GAQjW1a-.js +16 -0
  137. package/build/assets/settings-service.api-C1vZH9Vh.js +1 -0
  138. package/build/assets/settings-switch-DDd1cQ8t.js +1 -0
  139. package/build/assets/{settings-utils-UYpEdPuD.js → settings-utils-BTaaRhLZ.js} +1 -1
  140. package/build/assets/shared-conversation-Cyg7m7ns.js +1 -0
  141. package/build/assets/shield-check-C3Rl0NF8.js +1 -0
  142. package/build/assets/{sidebar-layout-D6fS8-Gl.js → sidebar-layout-DH0E-5KW.js} +1 -1
  143. package/build/assets/sidebar-mobile-menu-toggle-CQ4iky__.js +1 -0
  144. package/build/assets/{sidebar-nav-link-DQQcMf1A.js → sidebar-nav-link-oLQiKUBu.js} +1 -1
  145. package/build/assets/{sidebar-onboarding-checklist-storage-BBkeI6Bp.js → sidebar-onboarding-checklist-storage-TfvNNnnr.js} +1 -1
  146. package/build/assets/sidebar-store-DAZVH-DR.js +1 -0
  147. package/build/assets/skill-card-pill-row-DfjIfj0K.js +1 -0
  148. package/build/assets/{skill-filter-w__3UCEE.js → skill-filter-DsNLmn76.js} +2 -2
  149. package/build/assets/{skill-icon-badge-RQkq8wvl.js → skill-icon-badge-0MK_68Nc.js} +1 -1
  150. package/build/assets/skill-scope-BE-H9TSZ.js +1 -0
  151. package/build/assets/skills-plugins-vzSdxSk_.js +1 -0
  152. package/build/assets/skills-settings-BiPOH9H9.js +1 -0
  153. package/build/assets/styled-tooltip-CejG0rqv.js +1 -0
  154. package/build/assets/task-list-tab-OkZSqnTp.js +1 -0
  155. package/build/assets/{terminal-CNElN42a.js → terminal-Dph60VFZ.js} +2 -2
  156. package/build/assets/toggle-switch-B2uXaAUS.js +1 -0
  157. package/build/assets/trash-2-Bb40zQzs.js +1 -0
  158. package/build/assets/trash-Ckh7yCaB.js +1 -0
  159. package/build/assets/triangle-alert-DEdu-b_L.js +1 -0
  160. package/build/assets/{typography-v1KN0tzi.js → typography-DgcLGdHk.js} +1 -1
  161. package/build/assets/usage-tab-MCmNRAnR.js +1 -0
  162. package/build/assets/use-acp-credential-form-ychoGqjC.js +1 -0
  163. package/build/assets/use-activate-agent-profile-8L8Xdghy.js +1 -0
  164. package/build/assets/use-agent-profiles-Bi8hSkze.js +1 -0
  165. package/build/assets/{use-automation-health-E6NZi9rb.js → use-automation-health-U99vvHxx.js} +1 -1
  166. package/build/assets/use-automation-permissions-Buus0R6h.js +1 -0
  167. package/build/assets/{use-automations-xijQKIl9.js → use-automations-Bq5hVuv0.js} +1 -1
  168. package/build/assets/{use-can-manage-org-profiles-CrJP5262.js → use-can-manage-org-profiles-MzIeEV8F.js} +1 -1
  169. package/build/assets/use-canvas-extensions-Ca9KoVEm.js +1 -0
  170. package/build/assets/{use-cloud-current-user-id-CDfAHpPX.js → use-cloud-current-user-id-B4ZLUZSa.js} +1 -1
  171. package/build/assets/use-config-l5tkDHyD.js +1 -0
  172. package/build/assets/use-create-conversation-i_PdFdIs.js +1 -0
  173. package/build/assets/use-create-secret-CjWq0J4O.js +1 -0
  174. package/build/assets/use-free-models-gCsJ5BV0.js +1 -0
  175. package/build/assets/{use-get-secrets-K3jmk-LH.js → use-get-secrets-CMTuWEp_.js} +1 -1
  176. package/build/assets/use-is-authed-A2Yinlt0.js +1 -0
  177. package/build/assets/{use-launch-skill-in-chat-BYjYihBP.js → use-launch-skill-in-chat-QbXDhiHr.js} +1 -1
  178. package/build/assets/use-llm-configured-Dl4zg8ht.js +1 -0
  179. package/build/assets/use-llm-profiles-SWsuFmFu.js +1 -0
  180. package/build/assets/use-manifest-capabilities-CdqYfUAC.js +1 -0
  181. package/build/assets/use-onboarding-completion-Xl63ZvzQ.js +1 -0
  182. package/build/assets/use-pinned-home-route-BXDIUaxQ.js +1 -0
  183. package/build/assets/use-plugins-marketplace-BIIaPiaB.js +1 -0
  184. package/build/assets/use-save-agent-profile-D-ZHHE94.js +1 -0
  185. package/build/assets/{use-save-settings-DYqkKv7T.js → use-save-settings-Dapkf4cC.js} +1 -1
  186. package/build/assets/use-settings-C2KKQKVC.js +1 -0
  187. package/build/assets/use-settings-nav-items-TOc0Rsfd.js +1 -0
  188. package/build/assets/use-tracking-j4uo9VEW.js +3 -0
  189. package/build/assets/{use-user-conversation-B9Gebw_g.js → use-user-conversation-5UFqMoO4.js} +1 -1
  190. package/build/assets/{useInfiniteQuery-C926xzY4.js → useInfiniteQuery-CtSRG7uW.js} +1 -1
  191. package/build/assets/{useMutation-B-qc391N.js → useMutation-Cszf8mKy.js} +1 -1
  192. package/build/assets/useQueries-pUohFMSP.js +1 -0
  193. package/build/assets/useQuery-DAAacS7O.js +1 -0
  194. package/build/assets/useTranslation-CCgUjPJF.js +1 -0
  195. package/build/assets/utils-BgLSZdyy.js +1 -0
  196. package/build/assets/{vendor~conversation-panel~conversation-C8Fn4XOf.js → vendor~conversation-panel~conversation-C22sJuWZ.js} +1 -1
  197. package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~b0x1wrp2-Z0lly3FE.js +2 -0
  198. package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~czjee3a3-BXXGJNDU.js +185 -0
  199. package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~ew9ih1s8-40UR63Gt.js +1 -0
  200. package/build/assets/{vendor~index-home~home~conversation-panel~conversation-hWywRBaR.js → vendor~index-home~home~conversation-panel~conversation-UTl7gUo9.js} +1 -1
  201. package/build/assets/vendor~root-layout-CcdIqs-C.js +1 -0
  202. package/build/assets/{vendor~root-layout~conversation-panel~conversation-BMbMgaGu.js → vendor~root-layout~conversation-panel~conversation-C3EBV3kp.js} +1 -1
  203. package/build/assets/vendor~root-layout~conversation-panel~conversation~skills-settings~automations-list~shared-~bovqqk8e-BCe0JJVy.js +1 -0
  204. package/build/assets/{vendor~root-layout~index-home~home~conversation-panel~conversation-j5MFqfSy.js → vendor~root-layout~index-home~home~conversation-panel~conversation-BGGbPcYh.js} +1 -1
  205. package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~mcp~automations-list~aut~ibfbmr9f-CxhwKuAd.js +1 -0
  206. package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~nj1hli3r-DP9wmsjo.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~inibp4qe-CnsDDzeE.js} +1 -1
  207. package/build/assets/{vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~eo2nf80n-CUmIwQCN.js → vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~skills-setti~eo2nf80n-3eJ4ExtV.js} +12 -6
  208. package/build/assets/{verification-settings-gw_q6vkL.js → verification-settings-DdBpaVPz.js} +1 -1
  209. package/build/assets/{wrench-CUEI1krB.js → wrench-B8Wg_nbp.js} +1 -1
  210. package/build/assets/x-CX8lVGwm.js +1 -0
  211. package/build/index.html +4 -4
  212. package/build/locales/ar/openhands.json +79 -22
  213. package/build/locales/ca/openhands.json +79 -22
  214. package/build/locales/de/openhands.json +79 -22
  215. package/build/locales/en/openhands.json +79 -22
  216. package/build/locales/es/openhands.json +79 -22
  217. package/build/locales/fr/openhands.json +79 -22
  218. package/build/locales/it/openhands.json +79 -22
  219. package/build/locales/ja/openhands.json +79 -22
  220. package/build/locales/ko-KR/openhands.json +79 -22
  221. package/build/locales/no/openhands.json +79 -22
  222. package/build/locales/pt/openhands.json +79 -22
  223. package/build/locales/tr/openhands.json +79 -22
  224. package/build/locales/uk/openhands.json +79 -22
  225. package/build/locales/zh-CN/openhands.json +79 -22
  226. package/build/locales/zh-TW/openhands.json +79 -22
  227. package/config/defaults.json +3 -3
  228. package/dist/api/agent-server-adapter.cjs +3 -3
  229. package/dist/api/agent-server-adapter.cjs.map +1 -1
  230. package/dist/api/agent-server-adapter.d.ts +72 -12
  231. package/dist/api/agent-server-adapter.js +234 -132
  232. package/dist/api/agent-server-adapter.js.map +1 -1
  233. package/dist/api/agent-server-config.cjs +1 -1
  234. package/dist/api/agent-server-config.cjs.map +1 -1
  235. package/dist/api/agent-server-config.d.ts +6 -0
  236. package/dist/api/agent-server-config.js +6 -3
  237. package/dist/api/agent-server-config.js.map +1 -1
  238. package/dist/api/automation-service/automation-service.api.cjs +1 -1
  239. package/dist/api/automation-service/automation-service.api.cjs.map +1 -1
  240. package/dist/api/automation-service/automation-service.api.d.ts +2 -2
  241. package/dist/api/automation-service/automation-service.api.js +7 -7
  242. package/dist/api/automation-service/automation-service.api.js.map +1 -1
  243. package/dist/api/cloud/organization-service.api.cjs.map +1 -1
  244. package/dist/api/cloud/organization-service.api.d.ts +9 -1
  245. package/dist/api/cloud/organization-service.api.js.map +1 -1
  246. package/dist/api/cloud/provider-connections-service.api.cjs +2 -0
  247. package/dist/api/cloud/provider-connections-service.api.cjs.map +1 -0
  248. package/dist/api/cloud/provider-connections-service.api.d.ts +5 -0
  249. package/dist/api/cloud/provider-connections-service.api.js +50 -0
  250. package/dist/api/cloud/provider-connections-service.api.js.map +1 -0
  251. package/dist/api/cloud/skills-service.api.cjs +1 -1
  252. package/dist/api/cloud/skills-service.api.cjs.map +1 -1
  253. package/dist/api/cloud/skills-service.api.d.ts +10 -0
  254. package/dist/api/cloud/skills-service.api.js +11 -1
  255. package/dist/api/cloud/skills-service.api.js.map +1 -1
  256. package/dist/api/config-service/config-service.api.cjs +1 -1
  257. package/dist/api/config-service/config-service.api.cjs.map +1 -1
  258. package/dist/api/config-service/config-service.api.js +6 -2
  259. package/dist/api/config-service/config-service.api.js.map +1 -1
  260. package/dist/api/config-service/config-service.types.d.ts +13 -0
  261. package/dist/api/conversation-metadata-store.cjs +1 -1
  262. package/dist/api/conversation-metadata-store.cjs.map +1 -1
  263. package/dist/api/conversation-metadata-store.d.ts +24 -0
  264. package/dist/api/conversation-metadata-store.js +10 -2
  265. package/dist/api/conversation-metadata-store.js.map +1 -1
  266. package/dist/api/conversation-service/agent-server-conversation-service.api.cjs +1 -1
  267. package/dist/api/conversation-service/agent-server-conversation-service.api.cjs.map +1 -1
  268. package/dist/api/conversation-service/agent-server-conversation-service.api.d.ts +20 -0
  269. package/dist/api/conversation-service/agent-server-conversation-service.api.js +126 -77
  270. package/dist/api/conversation-service/agent-server-conversation-service.api.js.map +1 -1
  271. package/dist/api/hooks-service.cjs +2 -0
  272. package/dist/api/hooks-service.cjs.map +1 -0
  273. package/dist/api/hooks-service.d.ts +13 -0
  274. package/dist/api/hooks-service.js +20 -0
  275. package/dist/api/hooks-service.js.map +1 -0
  276. package/dist/api/provider-connections-service/provider-connections-service.api.cjs +1 -1
  277. package/dist/api/provider-connections-service/provider-connections-service.api.cjs.map +1 -1
  278. package/dist/api/provider-connections-service/provider-connections-service.api.js +25 -16
  279. package/dist/api/provider-connections-service/provider-connections-service.api.js.map +1 -1
  280. package/dist/api/settings-service/settings-service.api.cjs +1 -1
  281. package/dist/api/settings-service/settings-service.api.cjs.map +1 -1
  282. package/dist/api/settings-service/settings-service.api.d.ts +2 -0
  283. package/dist/api/settings-service/settings-service.api.js +18 -10
  284. package/dist/api/settings-service/settings-service.api.js.map +1 -1
  285. package/dist/api/skills-service.cjs +1 -1
  286. package/dist/api/skills-service.cjs.map +1 -1
  287. package/dist/api/skills-service.d.ts +7 -0
  288. package/dist/api/skills-service.js +11 -8
  289. package/dist/api/skills-service.js.map +1 -1
  290. package/dist/components/conversation-events/chat/event-message-components/critic-result-display.cjs +1 -1
  291. package/dist/components/conversation-events/chat/event-message-components/critic-result-display.js +5 -5
  292. package/dist/components/conversation-events/chat/event-message-components/finish-event-message.cjs +1 -1
  293. package/dist/components/conversation-events/chat/event-message-components/finish-event-message.cjs.map +1 -1
  294. package/dist/components/conversation-events/chat/event-message-components/finish-event-message.js +2 -1
  295. package/dist/components/conversation-events/chat/event-message-components/finish-event-message.js.map +1 -1
  296. package/dist/components/conversation-events/chat/event-message-components/generic-event-message-wrapper.cjs +1 -1
  297. package/dist/components/conversation-events/chat/event-message-components/generic-event-message-wrapper.cjs.map +1 -1
  298. package/dist/components/conversation-events/chat/event-message-components/generic-event-message-wrapper.d.ts +1 -1
  299. package/dist/components/conversation-events/chat/event-message-components/generic-event-message-wrapper.js +28 -28
  300. package/dist/components/conversation-events/chat/event-message-components/generic-event-message-wrapper.js.map +1 -1
  301. package/dist/components/conversation-events/chat/event-message-components/thought-event-message.cjs +1 -1
  302. package/dist/components/conversation-events/chat/event-message-components/thought-event-message.cjs.map +1 -1
  303. package/dist/components/conversation-events/chat/event-message-components/thought-event-message.js +2 -1
  304. package/dist/components/conversation-events/chat/event-message-components/thought-event-message.js.map +1 -1
  305. package/dist/components/conversation-events/chat/event-message-components/user-assistant-event-message.cjs +1 -1
  306. package/dist/components/conversation-events/chat/event-message-components/user-assistant-event-message.cjs.map +1 -1
  307. package/dist/components/conversation-events/chat/event-message-components/user-assistant-event-message.d.ts +1 -1
  308. package/dist/components/conversation-events/chat/event-message-components/user-assistant-event-message.js +37 -37
  309. package/dist/components/conversation-events/chat/event-message-components/user-assistant-event-message.js.map +1 -1
  310. package/dist/components/conversation-events/chat/event-message.cjs +2 -2
  311. package/dist/components/conversation-events/chat/event-message.cjs.map +1 -1
  312. package/dist/components/conversation-events/chat/event-message.js +79 -70
  313. package/dist/components/conversation-events/chat/event-message.js.map +1 -1
  314. package/dist/components/conversation-events/chat/messages.cjs +1 -1
  315. package/dist/components/conversation-events/chat/messages.cjs.map +1 -1
  316. package/dist/components/conversation-events/chat/messages.js +28 -27
  317. package/dist/components/conversation-events/chat/messages.js.map +1 -1
  318. package/dist/components/features/automations/automation-card.cjs +1 -1
  319. package/dist/components/features/automations/automation-card.cjs.map +1 -1
  320. package/dist/components/features/automations/automation-card.js +104 -97
  321. package/dist/components/features/automations/automation-card.js.map +1 -1
  322. package/dist/components/features/automations/automation-list-row.cjs +1 -1
  323. package/dist/components/features/automations/automation-list-row.cjs.map +1 -1
  324. package/dist/components/features/automations/automation-list-row.js +89 -77
  325. package/dist/components/features/automations/automation-list-row.js.map +1 -1
  326. package/dist/components/features/automations/build-automation-menu-items.cjs +1 -1
  327. package/dist/components/features/automations/build-automation-menu-items.cjs.map +1 -1
  328. package/dist/components/features/automations/build-automation-menu-items.d.ts +3 -1
  329. package/dist/components/features/automations/build-automation-menu-items.js +12 -11
  330. package/dist/components/features/automations/build-automation-menu-items.js.map +1 -1
  331. package/dist/components/features/automations/detail/configuration-section.d.ts +7 -1
  332. package/dist/components/features/automations/detail/detail-header.d.ts +10 -5
  333. package/dist/components/features/automations/detail/run-status-badge.cjs +1 -1
  334. package/dist/components/features/automations/detail/run-status-badge.cjs.map +1 -1
  335. package/dist/components/features/automations/detail/run-status-badge.d.ts +2 -2
  336. package/dist/components/features/automations/detail/run-status-badge.js +82 -53
  337. package/dist/components/features/automations/detail/run-status-badge.js.map +1 -1
  338. package/dist/components/features/automations/kebab-menu.cjs +1 -1
  339. package/dist/components/features/automations/kebab-menu.cjs.map +1 -1
  340. package/dist/components/features/automations/kebab-menu.js +9 -5
  341. package/dist/components/features/automations/kebab-menu.js.map +1 -1
  342. package/dist/components/features/automations/recommended-automations-launcher.cjs +1 -1
  343. package/dist/components/features/automations/recommended-automations-launcher.cjs.map +1 -1
  344. package/dist/components/features/automations/recommended-automations-launcher.js +12 -12
  345. package/dist/components/features/automations/recommended-automations-launcher.js.map +1 -1
  346. package/dist/components/features/automations/recommended-automations-section.cjs +1 -1
  347. package/dist/components/features/automations/recommended-automations-section.js +9 -9
  348. package/dist/components/features/backends/backend-selector.cjs +1 -1
  349. package/dist/components/features/backends/backend-selector.cjs.map +1 -1
  350. package/dist/components/features/backends/backend-selector.js +123 -112
  351. package/dist/components/features/backends/backend-selector.js.map +1 -1
  352. package/dist/components/features/backends/manage-backends-modal.cjs +1 -1
  353. package/dist/components/features/backends/manage-backends-modal.cjs.map +1 -1
  354. package/dist/components/features/backends/manage-backends-modal.js +29 -29
  355. package/dist/components/features/backends/manage-backends-modal.js.map +1 -1
  356. package/dist/components/features/chat/change-agent-button.cjs +1 -1
  357. package/dist/components/features/chat/change-agent-button.js +4 -4
  358. package/dist/components/features/chat/chat-interface.cjs +2 -2
  359. package/dist/components/features/chat/chat-interface.cjs.map +1 -1
  360. package/dist/components/features/chat/chat-interface.js +137 -137
  361. package/dist/components/features/chat/chat-interface.js.map +1 -1
  362. package/dist/components/features/chat/chat-message.cjs +1 -1
  363. package/dist/components/features/chat/chat-message.cjs.map +1 -1
  364. package/dist/components/features/chat/chat-message.d.ts +2 -1
  365. package/dist/components/features/chat/chat-message.js +88 -79
  366. package/dist/components/features/chat/chat-message.js.map +1 -1
  367. package/dist/components/features/chat/components/chat-input-llm-profile-picker.cjs +1 -1
  368. package/dist/components/features/chat/components/chat-input-llm-profile-picker.cjs.map +1 -1
  369. package/dist/components/features/chat/components/chat-input-llm-profile-picker.js +62 -61
  370. package/dist/components/features/chat/components/chat-input-llm-profile-picker.js.map +1 -1
  371. package/dist/components/features/chat/components/context-window-meter.cjs +1 -1
  372. package/dist/components/features/chat/components/context-window-meter.js +4 -4
  373. package/dist/components/features/chat/confirmation-mode-enabled.cjs +1 -1
  374. package/dist/components/features/chat/confirmation-mode-enabled.js +4 -4
  375. package/dist/components/features/chat/generic-event-message.cjs +1 -1
  376. package/dist/components/features/chat/generic-event-message.cjs.map +1 -1
  377. package/dist/components/features/chat/generic-event-message.d.ts +2 -1
  378. package/dist/components/features/chat/generic-event-message.js +41 -22
  379. package/dist/components/features/chat/generic-event-message.js.map +1 -1
  380. package/dist/components/features/chat/interactive-chat-box.cjs +1 -1
  381. package/dist/components/features/chat/interactive-chat-box.cjs.map +1 -1
  382. package/dist/components/features/chat/interactive-chat-box.js +20 -19
  383. package/dist/components/features/chat/interactive-chat-box.js.map +1 -1
  384. package/dist/components/features/chat/model-messages.cjs +1 -1
  385. package/dist/components/features/chat/model-messages.cjs.map +1 -1
  386. package/dist/components/features/chat/model-messages.js +27 -26
  387. package/dist/components/features/chat/model-messages.js.map +1 -1
  388. package/dist/components/features/conversation/conversation-overview-git-section.cjs +1 -1
  389. package/dist/components/features/conversation/conversation-overview-git-section.js +4 -4
  390. package/dist/components/features/conversation/conversation-overview-skills-panel.cjs +1 -1
  391. package/dist/components/features/conversation/conversation-overview-skills-panel.js +4 -4
  392. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.cjs +1 -1
  393. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.cjs.map +1 -1
  394. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.js +77 -78
  395. package/dist/components/features/conversation/conversation-tabs/conversation-tabs-context-menu.js.map +1 -1
  396. package/dist/components/features/conversation/conversation-tabs/conversation-tabs.cjs +1 -1
  397. package/dist/components/features/conversation/conversation-tabs/conversation-tabs.cjs.map +1 -1
  398. package/dist/components/features/conversation/conversation-tabs/conversation-tabs.js +88 -88
  399. package/dist/components/features/conversation/conversation-tabs/conversation-tabs.js.map +1 -1
  400. package/dist/components/features/conversation-panel/advanced-conversation-options-modal.cjs +2 -0
  401. package/dist/components/features/conversation-panel/advanced-conversation-options-modal.cjs.map +1 -0
  402. package/dist/components/features/conversation-panel/advanced-conversation-options-modal.d.ts +21 -0
  403. package/dist/components/features/conversation-panel/advanced-conversation-options-modal.js +239 -0
  404. package/dist/components/features/conversation-panel/advanced-conversation-options-modal.js.map +1 -0
  405. package/dist/components/features/conversation-panel/budget-display.cjs +1 -1
  406. package/dist/components/features/conversation-panel/budget-display.cjs.map +1 -1
  407. package/dist/components/features/conversation-panel/budget-display.d.ts +1 -2
  408. package/dist/components/features/conversation-panel/budget-display.js +12 -19
  409. package/dist/components/features/conversation-panel/budget-display.js.map +1 -1
  410. package/dist/components/features/conversation-panel/conversation-active-tag-filters.cjs +2 -0
  411. package/dist/components/features/conversation-panel/conversation-active-tag-filters.cjs.map +1 -0
  412. package/dist/components/features/conversation-panel/conversation-active-tag-filters.d.ts +28 -0
  413. package/dist/components/features/conversation-panel/conversation-active-tag-filters.js +69 -0
  414. package/dist/components/features/conversation-panel/conversation-active-tag-filters.js.map +1 -0
  415. package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.cjs +1 -1
  416. package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.cjs.map +1 -1
  417. package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.d.ts +2 -1
  418. package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.js +19 -18
  419. package/dist/components/features/conversation-panel/conversation-card/conversation-card-actions.js.map +1 -1
  420. package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.cjs +1 -1
  421. package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.cjs.map +1 -1
  422. package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.d.ts +2 -1
  423. package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.js +91 -80
  424. package/dist/components/features/conversation-panel/conversation-card/conversation-card-context-menu.js.map +1 -1
  425. package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.cjs +1 -1
  426. package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.cjs.map +1 -1
  427. package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.js +45 -44
  428. package/dist/components/features/conversation-panel/conversation-card/conversation-card-footer.js.map +1 -1
  429. package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.cjs +1 -1
  430. package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.cjs.map +1 -1
  431. package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.js +1 -1
  432. package/dist/components/features/conversation-panel/conversation-card/conversation-card-preview.js.map +1 -1
  433. package/dist/components/features/conversation-panel/conversation-card/conversation-card.cjs +1 -1
  434. package/dist/components/features/conversation-panel/conversation-card/conversation-card.cjs.map +1 -1
  435. package/dist/components/features/conversation-panel/conversation-card/conversation-card.d.ts +7 -1
  436. package/dist/components/features/conversation-panel/conversation-card/conversation-card.js +87 -81
  437. package/dist/components/features/conversation-panel/conversation-card/conversation-card.js.map +1 -1
  438. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.cjs +1 -1
  439. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.cjs.map +1 -1
  440. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.d.ts +2 -1
  441. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.js +1 -1
  442. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-chips.js.map +1 -1
  443. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.cjs +1 -1
  444. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.cjs.map +1 -1
  445. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.d.ts +2 -1
  446. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.js +2 -1
  447. package/dist/components/features/conversation-panel/conversation-card/conversation-tag-display.js.map +1 -1
  448. package/dist/components/features/conversation-panel/conversation-layouts-menu.cjs +2 -0
  449. package/dist/components/features/conversation-panel/conversation-layouts-menu.cjs.map +1 -0
  450. package/dist/components/features/conversation-panel/conversation-layouts-menu.d.ts +29 -0
  451. package/dist/components/features/conversation-panel/conversation-layouts-menu.js +177 -0
  452. package/dist/components/features/conversation-panel/conversation-layouts-menu.js.map +1 -0
  453. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.cjs +1 -1
  454. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.cjs.map +1 -1
  455. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.d.ts +37 -0
  456. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.js +85 -45
  457. package/dist/components/features/conversation-panel/conversation-panel-list-helpers.js.map +1 -1
  458. package/dist/components/features/conversation-panel/conversation-panel.cjs +1 -1
  459. package/dist/components/features/conversation-panel/conversation-panel.cjs.map +1 -1
  460. package/dist/components/features/conversation-panel/conversation-panel.js +296 -290
  461. package/dist/components/features/conversation-panel/conversation-panel.js.map +1 -1
  462. package/dist/components/features/conversation-panel/edit-conversation-tags-modal.cjs +2 -0
  463. package/dist/components/features/conversation-panel/edit-conversation-tags-modal.cjs.map +1 -0
  464. package/dist/components/features/conversation-panel/edit-conversation-tags-modal.d.ts +22 -0
  465. package/dist/components/features/conversation-panel/edit-conversation-tags-modal.js +153 -0
  466. package/dist/components/features/conversation-panel/edit-conversation-tags-modal.js.map +1 -0
  467. package/dist/components/features/conversation-panel/hide-older-conversations-row.cjs +2 -0
  468. package/dist/components/features/conversation-panel/hide-older-conversations-row.cjs.map +1 -0
  469. package/dist/components/features/conversation-panel/hide-older-conversations-row.d.ts +6 -0
  470. package/dist/components/features/conversation-panel/hide-older-conversations-row.js +65 -0
  471. package/dist/components/features/conversation-panel/hide-older-conversations-row.js.map +1 -0
  472. package/dist/components/features/conversation-panel/menu-row.cjs +1 -1
  473. package/dist/components/features/conversation-panel/menu-row.cjs.map +1 -1
  474. package/dist/components/features/conversation-panel/menu-row.d.ts +11 -1
  475. package/dist/components/features/conversation-panel/menu-row.js +27 -16
  476. package/dist/components/features/conversation-panel/menu-row.js.map +1 -1
  477. package/dist/components/features/home/featured-automations/automation-health-indicator.cjs +1 -1
  478. package/dist/components/features/home/featured-automations/automation-health-indicator.cjs.map +1 -1
  479. package/dist/components/features/home/featured-automations/automation-health-indicator.js +1 -1
  480. package/dist/components/features/home/featured-automations/automation-health-indicator.js.map +1 -1
  481. package/dist/components/features/home/featured-automations/automation-run-activity-metrics.cjs +1 -1
  482. package/dist/components/features/home/featured-automations/automation-run-activity-metrics.cjs.map +1 -1
  483. package/dist/components/features/home/featured-automations/automation-run-activity-metrics.d.ts +4 -3
  484. package/dist/components/features/home/featured-automations/automation-run-activity-metrics.js +22 -25
  485. package/dist/components/features/home/featured-automations/automation-run-activity-metrics.js.map +1 -1
  486. package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.cjs +1 -1
  487. package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.cjs.map +1 -1
  488. package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.d.ts +1 -1
  489. package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.js +15 -15
  490. package/dist/components/features/home/featured-automations/automation-run-activity-sparkline.js.map +1 -1
  491. package/dist/components/features/home/featured-automations/automation-run-health.cjs +1 -1
  492. package/dist/components/features/home/featured-automations/automation-run-health.cjs.map +1 -1
  493. package/dist/components/features/home/featured-automations/automation-run-health.d.ts +5 -3
  494. package/dist/components/features/home/featured-automations/automation-run-health.js +30 -23
  495. package/dist/components/features/home/featured-automations/automation-run-health.js.map +1 -1
  496. package/dist/components/features/home/featured-automations/build-home-automation-menu-items.d.ts +1 -2
  497. package/dist/components/features/home/featured-automations/build-pinned-automation-menu-items.d.ts +0 -1
  498. package/dist/components/features/home/featured-automations/home-automation-activity.d.ts +3 -2
  499. package/dist/components/features/home/featured-automations/home-automation-run-tooltip.cjs +1 -1
  500. package/dist/components/features/home/featured-automations/home-automation-run-tooltip.cjs.map +1 -1
  501. package/dist/components/features/home/featured-automations/home-automation-run-tooltip.d.ts +1 -1
  502. package/dist/components/features/home/featured-automations/home-automation-run-tooltip.js +42 -42
  503. package/dist/components/features/home/featured-automations/home-automation-run-tooltip.js.map +1 -1
  504. package/dist/components/features/images/image-lightbox.cjs +2 -0
  505. package/dist/components/features/images/image-lightbox.cjs.map +1 -0
  506. package/dist/components/features/images/image-lightbox.d.ts +11 -0
  507. package/dist/components/features/images/image-lightbox.js +37 -0
  508. package/dist/components/features/images/image-lightbox.js.map +1 -0
  509. package/dist/components/features/images/image-preview.cjs +1 -1
  510. package/dist/components/features/images/image-preview.cjs.map +1 -1
  511. package/dist/components/features/images/image-preview.d.ts +2 -1
  512. package/dist/components/features/images/image-preview.js +33 -13
  513. package/dist/components/features/images/image-preview.js.map +1 -1
  514. package/dist/components/features/manifest/manifest-form-field.d.ts +3 -1
  515. package/dist/components/features/manifest/manifest-review-step.d.ts +3 -1
  516. package/dist/components/features/onboarding/steps/setup-llm-step.d.ts +3 -4
  517. package/dist/components/features/settings/cloud-settings-link.cjs +1 -1
  518. package/dist/components/features/settings/cloud-settings-link.cjs.map +1 -1
  519. package/dist/components/features/settings/cloud-settings-link.d.ts +3 -1
  520. package/dist/components/features/settings/cloud-settings-link.js +22 -19
  521. package/dist/components/features/settings/cloud-settings-link.js.map +1 -1
  522. package/dist/components/features/settings/integrations-settings-link.cjs +1 -1
  523. package/dist/components/features/settings/integrations-settings-link.cjs.map +1 -1
  524. package/dist/components/features/settings/integrations-settings-link.d.ts +3 -1
  525. package/dist/components/features/settings/integrations-settings-link.js +20 -17
  526. package/dist/components/features/settings/integrations-settings-link.js.map +1 -1
  527. package/dist/components/features/settings/llm-profiles/llm-settings-local-view.cjs +1 -1
  528. package/dist/components/features/settings/llm-profiles/llm-settings-local-view.js +3 -2
  529. package/dist/components/features/settings/llm-profiles/profile-row.cjs +1 -1
  530. package/dist/components/features/settings/llm-profiles/profile-row.js +1 -1
  531. package/dist/components/features/settings/llm-profiles/profiles-body.d.ts +2 -2
  532. package/dist/components/features/settings/sdk-settings/sdk-section-page.cjs +1 -1
  533. package/dist/components/features/settings/sdk-settings/sdk-section-page.cjs.map +1 -1
  534. package/dist/components/features/settings/sdk-settings/sdk-section-page.d.ts +8 -7
  535. package/dist/components/features/settings/sdk-settings/sdk-section-page.js +172 -142
  536. package/dist/components/features/settings/sdk-settings/sdk-section-page.js.map +1 -1
  537. package/dist/components/features/settings/secrets-settings/secret-form.cjs +1 -1
  538. package/dist/components/features/settings/secrets-settings/secret-form.cjs.map +1 -1
  539. package/dist/components/features/settings/secrets-settings/secret-form.js +38 -25
  540. package/dist/components/features/settings/secrets-settings/secret-form.js.map +1 -1
  541. package/dist/components/features/settings/settings-dropdown-input.cjs +1 -1
  542. package/dist/components/features/settings/settings-dropdown-input.js +6 -6
  543. package/dist/components/features/sidebar/sidebar-rail-body.cjs +1 -1
  544. package/dist/components/features/sidebar/sidebar-rail-body.cjs.map +1 -1
  545. package/dist/components/features/sidebar/sidebar-rail-body.d.ts +4 -1
  546. package/dist/components/features/sidebar/sidebar-rail-body.js +157 -139
  547. package/dist/components/features/sidebar/sidebar-rail-body.js.map +1 -1
  548. package/dist/components/features/sidebar/sidebar.cjs +1 -1
  549. package/dist/components/features/sidebar/sidebar.cjs.map +1 -1
  550. package/dist/components/features/sidebar/sidebar.js +28 -26
  551. package/dist/components/features/sidebar/sidebar.js.map +1 -1
  552. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist.cjs +1 -1
  553. package/dist/components/features/sidebar/use-sidebar-onboarding-checklist.js +3 -3
  554. package/dist/components/features/skills/extensions-navigation.cjs +1 -1
  555. package/dist/components/features/skills/extensions-navigation.cjs.map +1 -1
  556. package/dist/components/features/skills/extensions-navigation.js +3 -3
  557. package/dist/components/features/skills/extensions-navigation.js.map +1 -1
  558. package/dist/components/providers/agent-server-ui-providers.cjs +1 -1
  559. package/dist/components/providers/agent-server-ui-providers.cjs.map +1 -1
  560. package/dist/components/providers/agent-server-ui-providers.js +33 -29
  561. package/dist/components/providers/agent-server-ui-providers.js.map +1 -1
  562. package/dist/components/shared/buttons/remove-button.cjs +1 -1
  563. package/dist/components/shared/buttons/remove-button.cjs.map +1 -1
  564. package/dist/components/shared/buttons/remove-button.d.ts +2 -1
  565. package/dist/components/shared/buttons/remove-button.js +2 -1
  566. package/dist/components/shared/buttons/remove-button.js.map +1 -1
  567. package/dist/components/shared/buttons/styled-tooltip.cjs +1 -1
  568. package/dist/components/shared/buttons/styled-tooltip.cjs.map +1 -1
  569. package/dist/components/shared/buttons/styled-tooltip.d.ts +2 -1
  570. package/dist/components/shared/buttons/styled-tooltip.js +2 -1
  571. package/dist/components/shared/buttons/styled-tooltip.js.map +1 -1
  572. package/dist/components/shared/filters/enum-filter-dropdown.cjs +1 -1
  573. package/dist/components/shared/filters/enum-filter-dropdown.cjs.map +1 -1
  574. package/dist/components/shared/filters/enum-filter-dropdown.d.ts +5 -1
  575. package/dist/components/shared/filters/enum-filter-dropdown.js +14 -14
  576. package/dist/components/shared/filters/enum-filter-dropdown.js.map +1 -1
  577. package/dist/components/shared/free-models-note.cjs +2 -0
  578. package/dist/components/shared/free-models-note.cjs.map +1 -0
  579. package/dist/components/shared/free-models-note.d.ts +3 -0
  580. package/dist/components/shared/free-models-note.js +20 -0
  581. package/dist/components/shared/free-models-note.js.map +1 -0
  582. package/dist/components/shared/modals/confirmation-modal.cjs +1 -1
  583. package/dist/components/shared/modals/confirmation-modal.cjs.map +1 -1
  584. package/dist/components/shared/modals/confirmation-modal.d.ts +2 -1
  585. package/dist/components/shared/modals/confirmation-modal.js +8 -8
  586. package/dist/components/shared/modals/confirmation-modal.js.map +1 -1
  587. package/dist/components/shared/modals/settings/model-selector.cjs +1 -1
  588. package/dist/components/shared/modals/settings/model-selector.cjs.map +1 -1
  589. package/dist/components/shared/modals/settings/model-selector.js +102 -112
  590. package/dist/components/shared/modals/settings/model-selector.js.map +1 -1
  591. package/dist/config/defaults.cjs +1 -1
  592. package/dist/config/defaults.cjs.map +1 -1
  593. package/dist/config/defaults.js +3 -3
  594. package/dist/config/defaults.js.map +1 -1
  595. package/dist/constants/acp-providers.cjs.map +1 -1
  596. package/dist/constants/acp-providers.d.ts +12 -0
  597. package/dist/constants/acp-providers.js.map +1 -1
  598. package/dist/constants/settings-nav.d.ts +8 -0
  599. package/dist/contexts/conversation-websocket-context.cjs +3 -3
  600. package/dist/contexts/conversation-websocket-context.cjs.map +1 -1
  601. package/dist/contexts/conversation-websocket-context.d.ts +5 -0
  602. package/dist/contexts/conversation-websocket-context.js +194 -198
  603. package/dist/contexts/conversation-websocket-context.js.map +1 -1
  604. package/dist/contexts/websocket-provider-wrapper.cjs +1 -1
  605. package/dist/contexts/websocket-provider-wrapper.cjs.map +1 -1
  606. package/dist/contexts/websocket-provider-wrapper.js +31 -15
  607. package/dist/contexts/websocket-provider-wrapper.js.map +1 -1
  608. package/dist/hooks/chat/record-model-switch-message.cjs +1 -1
  609. package/dist/hooks/chat/record-model-switch-message.cjs.map +1 -1
  610. package/dist/hooks/chat/record-model-switch-message.d.ts +31 -0
  611. package/dist/hooks/chat/record-model-switch-message.js +25 -12
  612. package/dist/hooks/chat/record-model-switch-message.js.map +1 -1
  613. package/dist/hooks/chat/use-plan-mode-interceptor.cjs +2 -0
  614. package/dist/hooks/chat/use-plan-mode-interceptor.cjs.map +1 -0
  615. package/dist/hooks/chat/use-plan-mode-interceptor.d.ts +16 -0
  616. package/dist/hooks/chat/use-plan-mode-interceptor.js +43 -0
  617. package/dist/hooks/chat/use-plan-mode-interceptor.js.map +1 -0
  618. package/dist/hooks/chat/use-slash-command.cjs +1 -1
  619. package/dist/hooks/chat/use-slash-command.cjs.map +1 -1
  620. package/dist/hooks/chat/use-slash-command.js +63 -62
  621. package/dist/hooks/chat/use-slash-command.js.map +1 -1
  622. package/dist/hooks/mutation/use-create-conversation.cjs +1 -1
  623. package/dist/hooks/mutation/use-create-conversation.cjs.map +1 -1
  624. package/dist/hooks/mutation/use-create-conversation.js +5 -1
  625. package/dist/hooks/mutation/use-create-conversation.js.map +1 -1
  626. package/dist/hooks/mutation/use-read-conversation-file.cjs +1 -1
  627. package/dist/hooks/mutation/use-read-conversation-file.cjs.map +1 -1
  628. package/dist/hooks/mutation/use-read-conversation-file.js +11 -4
  629. package/dist/hooks/mutation/use-read-conversation-file.js.map +1 -1
  630. package/dist/hooks/mutation/use-save-settings.cjs +1 -1
  631. package/dist/hooks/mutation/use-save-settings.js +3 -3
  632. package/dist/hooks/mutation/use-switch-llm-profile.cjs +1 -1
  633. package/dist/hooks/mutation/use-switch-llm-profile.cjs.map +1 -1
  634. package/dist/hooks/mutation/use-switch-llm-profile.js +13 -25
  635. package/dist/hooks/mutation/use-switch-llm-profile.js.map +1 -1
  636. package/dist/hooks/mutation/use-update-conversation-tags.cjs +2 -0
  637. package/dist/hooks/mutation/use-update-conversation-tags.cjs.map +1 -0
  638. package/dist/hooks/mutation/use-update-conversation-tags.d.ts +8 -0
  639. package/dist/hooks/mutation/use-update-conversation-tags.js +45 -0
  640. package/dist/hooks/mutation/use-update-conversation-tags.js.map +1 -0
  641. package/dist/hooks/query/query-keys.cjs +1 -1
  642. package/dist/hooks/query/query-keys.cjs.map +1 -1
  643. package/dist/hooks/query/query-keys.d.ts +6 -0
  644. package/dist/hooks/query/query-keys.js +2 -2
  645. package/dist/hooks/query/query-keys.js.map +1 -1
  646. package/dist/hooks/query/use-automation-sdk-version.cjs +1 -1
  647. package/dist/hooks/query/use-automation-sdk-version.cjs.map +1 -1
  648. package/dist/hooks/query/use-automation-sdk-version.d.ts +0 -1
  649. package/dist/hooks/query/use-automation-sdk-version.js +30 -55
  650. package/dist/hooks/query/use-automation-sdk-version.js.map +1 -1
  651. package/dist/hooks/query/use-conversation-skills.cjs +1 -1
  652. package/dist/hooks/query/use-conversation-skills.cjs.map +1 -1
  653. package/dist/hooks/query/use-conversation-skills.d.ts +14 -5
  654. package/dist/hooks/query/use-conversation-skills.js +20 -4
  655. package/dist/hooks/query/use-conversation-skills.js.map +1 -1
  656. package/dist/hooks/query/use-free-models.cjs +2 -0
  657. package/dist/hooks/query/use-free-models.cjs.map +1 -0
  658. package/dist/hooks/query/use-free-models.d.ts +23 -0
  659. package/dist/hooks/query/use-free-models.js +67 -0
  660. package/dist/hooks/query/use-free-models.js.map +1 -0
  661. package/dist/hooks/query/use-local-git-info.cjs.map +1 -1
  662. package/dist/hooks/query/use-local-git-info.js.map +1 -1
  663. package/dist/hooks/query/use-provider-connections.cjs +1 -1
  664. package/dist/hooks/query/use-provider-connections.cjs.map +1 -1
  665. package/dist/hooks/query/use-provider-connections.d.ts +6 -3
  666. package/dist/hooks/query/use-provider-connections.js +7 -3
  667. package/dist/hooks/query/use-provider-connections.js.map +1 -1
  668. package/dist/hooks/query/use-provider-models.cjs +1 -1
  669. package/dist/hooks/query/use-provider-models.cjs.map +1 -1
  670. package/dist/hooks/query/use-provider-models.js +34 -25
  671. package/dist/hooks/query/use-provider-models.js.map +1 -1
  672. package/dist/hooks/query/use-search-providers.cjs +1 -1
  673. package/dist/hooks/query/use-search-providers.cjs.map +1 -1
  674. package/dist/hooks/query/use-search-providers.js +31 -19
  675. package/dist/hooks/query/use-search-providers.js.map +1 -1
  676. package/dist/hooks/query/use-sub-conversations.cjs +1 -1
  677. package/dist/hooks/query/use-sub-conversations.cjs.map +1 -1
  678. package/dist/hooks/query/use-sub-conversations.js +16 -16
  679. package/dist/hooks/query/use-sub-conversations.js.map +1 -1
  680. package/dist/hooks/use-acp-model-context.cjs +1 -1
  681. package/dist/hooks/use-acp-model-context.js +3 -3
  682. package/dist/hooks/use-agent-state.cjs +1 -1
  683. package/dist/hooks/use-agent-state.cjs.map +1 -1
  684. package/dist/hooks/use-agent-state.d.ts +17 -1
  685. package/dist/hooks/use-agent-state.js +19 -9
  686. package/dist/hooks/use-agent-state.js.map +1 -1
  687. package/dist/hooks/use-automation-permissions.cjs +2 -0
  688. package/dist/hooks/use-automation-permissions.cjs.map +1 -0
  689. package/dist/hooks/use-automation-permissions.d.ts +43 -0
  690. package/dist/hooks/use-automation-permissions.js +52 -0
  691. package/dist/hooks/use-automation-permissions.js.map +1 -0
  692. package/dist/hooks/use-chat-input-model-state.cjs +1 -1
  693. package/dist/hooks/use-chat-input-model-state.js +3 -3
  694. package/dist/hooks/use-handle-plan-click.cjs +1 -1
  695. package/dist/hooks/use-handle-plan-click.cjs.map +1 -1
  696. package/dist/hooks/use-handle-plan-click.d.ts +3 -1
  697. package/dist/hooks/use-handle-plan-click.js +85 -26
  698. package/dist/hooks/use-handle-plan-click.js.map +1 -1
  699. package/dist/hooks/use-home-automation-actions.cjs +1 -1
  700. package/dist/hooks/use-home-automation-actions.cjs.map +1 -1
  701. package/dist/hooks/use-home-automation-actions.d.ts +1 -2
  702. package/dist/hooks/use-home-automation-actions.js +1 -1
  703. package/dist/hooks/use-home-automation-actions.js.map +1 -1
  704. package/dist/hooks/use-llm-configured.cjs +1 -1
  705. package/dist/hooks/use-llm-configured.js +3 -3
  706. package/dist/hooks/use-manifest-preflight.d.ts +1 -1
  707. package/dist/hooks/use-unified-websocket-status.cjs +1 -1
  708. package/dist/hooks/use-unified-websocket-status.cjs.map +1 -1
  709. package/dist/hooks/use-unified-websocket-status.d.ts +7 -0
  710. package/dist/hooks/use-unified-websocket-status.js +5 -1
  711. package/dist/hooks/use-unified-websocket-status.js.map +1 -1
  712. package/dist/i18n/declaration.cjs +1 -1
  713. package/dist/i18n/declaration.cjs.map +1 -1
  714. package/dist/i18n/declaration.d.ts +71 -14
  715. package/dist/i18n/declaration.js +1 -1
  716. package/dist/i18n/declaration.js.map +1 -1
  717. package/dist/i18n/translation.cjs +2 -2
  718. package/dist/i18n/translation.cjs.map +1 -1
  719. package/dist/i18n/translation.js +1281 -312
  720. package/dist/i18n/translation.js.map +1 -1
  721. package/dist/locales/ar/openhands.json +79 -22
  722. package/dist/locales/ca/openhands.json +79 -22
  723. package/dist/locales/de/openhands.json +79 -22
  724. package/dist/locales/en/openhands.json +79 -22
  725. package/dist/locales/es/openhands.json +79 -22
  726. package/dist/locales/fr/openhands.json +79 -22
  727. package/dist/locales/it/openhands.json +79 -22
  728. package/dist/locales/ja/openhands.json +79 -22
  729. package/dist/locales/ko-KR/openhands.json +79 -22
  730. package/dist/locales/no/openhands.json +79 -22
  731. package/dist/locales/pt/openhands.json +79 -22
  732. package/dist/locales/tr/openhands.json +79 -22
  733. package/dist/locales/uk/openhands.json +79 -22
  734. package/dist/locales/zh-CN/openhands.json +79 -22
  735. package/dist/locales/zh-TW/openhands.json +79 -22
  736. package/dist/manifests/automation-insights.cjs.map +1 -1
  737. package/dist/manifests/automation-insights.d.ts +10 -2
  738. package/dist/manifests/automation-insights.js.map +1 -1
  739. package/dist/manifests/automation-setup.cjs +1 -1
  740. package/dist/manifests/automation-setup.cjs.map +1 -1
  741. package/dist/manifests/automation-setup.d.ts +9 -16
  742. package/dist/manifests/automation-setup.js +17 -7
  743. package/dist/manifests/automation-setup.js.map +1 -1
  744. package/dist/manifests/manifest-actions.d.ts +1 -1
  745. package/dist/manifests/manifest-capabilities.d.ts +3 -1
  746. package/dist/manifests/manifest-local-validation.cjs +2 -0
  747. package/dist/manifests/manifest-local-validation.cjs.map +1 -0
  748. package/dist/manifests/manifest-local-validation.d.ts +15 -11
  749. package/dist/manifests/manifest-local-validation.js +8 -0
  750. package/dist/manifests/manifest-local-validation.js.map +1 -0
  751. package/dist/manifests/manifest-template.cjs +2 -0
  752. package/dist/manifests/manifest-template.cjs.map +1 -0
  753. package/dist/manifests/manifest-template.d.ts +4 -4
  754. package/dist/manifests/manifest-template.js +12 -0
  755. package/dist/manifests/manifest-template.js.map +1 -0
  756. package/dist/manifests/manifest-validation.cjs +1 -1
  757. package/dist/manifests/manifest-validation.cjs.map +1 -1
  758. package/dist/manifests/manifest-validation.js +106 -28
  759. package/dist/manifests/manifest-validation.js.map +1 -1
  760. package/dist/manifests/types.cjs.map +1 -1
  761. package/dist/manifests/types.d.ts +39 -4
  762. package/dist/manifests/types.js.map +1 -1
  763. package/dist/node_modules/@openhands/extensions/automations/catalog/custom-automation/manifest.cjs +8 -0
  764. package/dist/node_modules/@openhands/extensions/automations/catalog/custom-automation/manifest.cjs.map +1 -0
  765. package/dist/node_modules/@openhands/extensions/automations/catalog/custom-automation/manifest.js +221 -0
  766. package/dist/node_modules/@openhands/extensions/automations/catalog/custom-automation/manifest.js.map +1 -0
  767. package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.cjs +1 -1
  768. package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.cjs.map +1 -1
  769. package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.js +1 -1
  770. package/dist/node_modules/@openhands/extensions/automations/catalog/github-issue-to-pr/manifest.js.map +1 -1
  771. package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.cjs +1 -1
  772. package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.cjs.map +1 -1
  773. package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.js +1 -1
  774. package/dist/node_modules/@openhands/extensions/automations/catalog/github-pr-reviewer/manifest.js.map +1 -1
  775. package/dist/node_modules/@openhands/extensions/automations/catalog/qa-changes/manifest.cjs +1 -1
  776. package/dist/node_modules/@openhands/extensions/automations/catalog/qa-changes/manifest.cjs.map +1 -1
  777. package/dist/node_modules/@openhands/extensions/automations/catalog/qa-changes/manifest.js +1 -1
  778. package/dist/node_modules/@openhands/extensions/automations/catalog/qa-changes/manifest.js.map +1 -1
  779. package/dist/node_modules/@openhands/extensions/automations/catalog-index.cjs +1 -1
  780. package/dist/node_modules/@openhands/extensions/automations/catalog-index.cjs.map +1 -1
  781. package/dist/node_modules/@openhands/extensions/automations/catalog-index.js +22 -20
  782. package/dist/node_modules/@openhands/extensions/automations/catalog-index.js.map +1 -1
  783. package/dist/node_modules/@openhands/extensions/automations/interface.cjs +1 -1
  784. package/dist/node_modules/@openhands/extensions/automations/interface.cjs.map +1 -1
  785. package/dist/node_modules/@openhands/extensions/automations/interface.js +2 -1
  786. package/dist/node_modules/@openhands/extensions/automations/interface.js.map +1 -1
  787. package/dist/node_modules/@openhands/extensions/integrations/catalog/gitlab.cjs +1 -1
  788. package/dist/node_modules/@openhands/extensions/integrations/catalog/gitlab.cjs.map +1 -1
  789. package/dist/node_modules/@openhands/extensions/integrations/catalog/gitlab.js +24 -5
  790. package/dist/node_modules/@openhands/extensions/integrations/catalog/gitlab.js.map +1 -1
  791. package/dist/node_modules/@tanstack/react-query/build/modern/QueryClientProvider.cjs +1 -1
  792. package/dist/node_modules/@tanstack/react-query/build/modern/QueryClientProvider.js +1 -1
  793. package/dist/node_modules/lucide-react/dist/esm/icons/circle-question-mark.cjs +2 -0
  794. package/dist/node_modules/lucide-react/dist/esm/icons/circle-question-mark.cjs.map +1 -0
  795. package/dist/node_modules/lucide-react/dist/esm/icons/circle-question-mark.js +21 -0
  796. package/dist/node_modules/lucide-react/dist/esm/icons/circle-question-mark.js.map +1 -0
  797. package/dist/node_modules/lucide-react/dist/esm/icons/shrink.cjs +2 -0
  798. package/dist/node_modules/lucide-react/dist/esm/icons/shrink.cjs.map +1 -0
  799. package/dist/node_modules/lucide-react/dist/esm/icons/shrink.js +23 -0
  800. package/dist/node_modules/lucide-react/dist/esm/icons/shrink.js.map +1 -0
  801. package/dist/node_modules/lucide-react/dist/esm/icons/sliders-horizontal.cjs +2 -0
  802. package/dist/node_modules/lucide-react/dist/esm/icons/sliders-horizontal.cjs.map +1 -0
  803. package/dist/node_modules/lucide-react/dist/esm/icons/sliders-horizontal.js +43 -0
  804. package/dist/node_modules/lucide-react/dist/esm/icons/sliders-horizontal.js.map +1 -0
  805. package/dist/node_modules/lucide-react/dist/esm/icons/tags.cjs +2 -0
  806. package/dist/node_modules/lucide-react/dist/esm/icons/tags.cjs.map +1 -0
  807. package/dist/node_modules/lucide-react/dist/esm/icons/tags.js +22 -0
  808. package/dist/node_modules/lucide-react/dist/esm/icons/tags.js.map +1 -0
  809. package/dist/package.cjs +1 -1
  810. package/dist/package.cjs.map +1 -1
  811. package/dist/package.js +4 -4
  812. package/dist/package.js.map +1 -1
  813. package/dist/routes/agent-settings.d.ts +2 -0
  814. package/dist/routes/app-settings.cjs +1 -1
  815. package/dist/routes/app-settings.cjs.map +1 -1
  816. package/dist/routes/app-settings.js +53 -48
  817. package/dist/routes/app-settings.js.map +1 -1
  818. package/dist/routes/llm-settings.cjs +1 -1
  819. package/dist/routes/llm-settings.cjs.map +1 -1
  820. package/dist/routes/llm-settings.d.ts +3 -1
  821. package/dist/routes/llm-settings.js +120 -127
  822. package/dist/routes/llm-settings.js.map +1 -1
  823. package/dist/routes/planner-tab.cjs +1 -1
  824. package/dist/routes/planner-tab.cjs.map +1 -1
  825. package/dist/routes/planner-tab.js +44 -28
  826. package/dist/routes/planner-tab.js.map +1 -1
  827. package/dist/services/telemetry.cjs +1 -1
  828. package/dist/services/telemetry.cjs.map +1 -1
  829. package/dist/services/telemetry.d.ts +5 -0
  830. package/dist/services/telemetry.js +122 -115
  831. package/dist/services/telemetry.js.map +1 -1
  832. package/dist/stores/conversation-panel-preferences-store.cjs +1 -1
  833. package/dist/stores/conversation-panel-preferences-store.cjs.map +1 -1
  834. package/dist/stores/conversation-panel-preferences-store.d.ts +32 -5
  835. package/dist/stores/conversation-panel-preferences-store.js +29 -12
  836. package/dist/stores/conversation-panel-preferences-store.js.map +1 -1
  837. package/dist/stores/conversation-state-store.cjs +1 -1
  838. package/dist/stores/conversation-state-store.cjs.map +1 -1
  839. package/dist/stores/conversation-state-store.d.ts +9 -3
  840. package/dist/stores/conversation-state-store.js +6 -3
  841. package/dist/stores/conversation-state-store.js.map +1 -1
  842. package/dist/stores/conversation-store.cjs +1 -1
  843. package/dist/stores/conversation-store.cjs.map +1 -1
  844. package/dist/stores/conversation-store.d.ts +2 -0
  845. package/dist/stores/conversation-store.js +3 -0
  846. package/dist/stores/conversation-store.js.map +1 -1
  847. package/dist/stores/free-models-store.cjs +2 -0
  848. package/dist/stores/free-models-store.cjs.map +1 -0
  849. package/dist/stores/free-models-store.d.ts +30 -0
  850. package/dist/stores/free-models-store.js +22 -0
  851. package/dist/stores/free-models-store.js.map +1 -0
  852. package/dist/stores/model-store.cjs +1 -1
  853. package/dist/stores/model-store.cjs.map +1 -1
  854. package/dist/stores/model-store.d.ts +7 -0
  855. package/dist/stores/model-store.js +4 -0
  856. package/dist/stores/model-store.js.map +1 -1
  857. package/dist/types/automation.cjs.map +1 -1
  858. package/dist/types/automation.d.ts +46 -1
  859. package/dist/types/automation.js.map +1 -1
  860. package/dist/ui/context-menu.d.ts +1 -1
  861. package/dist/ui/toggle-switch.cjs +1 -1
  862. package/dist/ui/toggle-switch.cjs.map +1 -1
  863. package/dist/ui/toggle-switch.d.ts +4 -1
  864. package/dist/ui/toggle-switch.js +4 -3
  865. package/dist/ui/toggle-switch.js.map +1 -1
  866. package/dist/utils/automation-catalog.cjs +1 -1
  867. package/dist/utils/automation-catalog.cjs.map +1 -1
  868. package/dist/utils/automation-catalog.d.ts +12 -1
  869. package/dist/utils/automation-catalog.js +42 -12
  870. package/dist/utils/automation-catalog.js.map +1 -1
  871. package/dist/utils/automation-run-display.cjs +2 -0
  872. package/dist/utils/automation-run-display.cjs.map +1 -0
  873. package/dist/utils/automation-run-display.d.ts +20 -0
  874. package/dist/utils/automation-run-display.js +85 -0
  875. package/dist/utils/automation-run-display.js.map +1 -0
  876. package/dist/utils/automation-schedule.cjs +1 -1
  877. package/dist/utils/automation-schedule.cjs.map +1 -1
  878. package/dist/utils/automation-schedule.d.ts +16 -0
  879. package/dist/utils/automation-schedule.js +2 -0
  880. package/dist/utils/automation-schedule.js.map +1 -1
  881. package/dist/utils/constants.cjs +1 -1
  882. package/dist/utils/constants.cjs.map +1 -1
  883. package/dist/utils/constants.d.ts +4 -0
  884. package/dist/utils/constants.js +23 -3
  885. package/dist/utils/constants.js.map +1 -1
  886. package/dist/utils/format-event-timestamp.cjs +2 -0
  887. package/dist/utils/format-event-timestamp.cjs.map +1 -0
  888. package/dist/utils/format-event-timestamp.d.ts +1 -0
  889. package/dist/utils/format-event-timestamp.js +13 -0
  890. package/dist/utils/format-event-timestamp.js.map +1 -0
  891. package/dist/utils/format-model-name.cjs +1 -1
  892. package/dist/utils/format-model-name.cjs.map +1 -1
  893. package/dist/utils/format-model-name.d.ts +27 -6
  894. package/dist/utils/format-model-name.js +14 -6
  895. package/dist/utils/format-model-name.js.map +1 -1
  896. package/dist/utils/git-diff-stats.cjs +2 -2
  897. package/dist/utils/git-diff-stats.cjs.map +1 -1
  898. package/dist/utils/git-diff-stats.d.ts +4 -0
  899. package/dist/utils/git-diff-stats.js +12 -2
  900. package/dist/utils/git-diff-stats.js.map +1 -1
  901. package/dist/utils/plan-file.cjs +4 -0
  902. package/dist/utils/plan-file.cjs.map +1 -0
  903. package/dist/utils/plan-file.d.ts +18 -0
  904. package/dist/utils/plan-file.js +58 -0
  905. package/dist/utils/plan-file.js.map +1 -0
  906. package/dist/utils/recommended-automation-rail.cjs +1 -1
  907. package/dist/utils/recommended-automation-rail.cjs.map +1 -1
  908. package/dist/utils/recommended-automation-rail.js +1 -0
  909. package/dist/utils/recommended-automation-rail.js.map +1 -1
  910. package/dist/utils/scroll-fade-state.cjs +1 -1
  911. package/dist/utils/scroll-fade-state.cjs.map +1 -1
  912. package/dist/utils/scroll-fade-state.d.ts +6 -0
  913. package/dist/utils/scroll-fade-state.js +8 -1
  914. package/dist/utils/scroll-fade-state.js.map +1 -1
  915. package/dist/utils/sdk-settings-schema.cjs +1 -1
  916. package/dist/utils/sdk-settings-schema.cjs.map +1 -1
  917. package/dist/utils/sdk-settings-schema.d.ts +1 -0
  918. package/dist/utils/sdk-settings-schema.js +25 -22
  919. package/dist/utils/sdk-settings-schema.js.map +1 -1
  920. package/dist/utils/utils.cjs +1 -1
  921. package/dist/utils/utils.cjs.map +1 -1
  922. package/dist/utils/utils.js +11 -11
  923. package/dist/utils/utils.js.map +1 -1
  924. package/package.json +4 -4
  925. package/scripts/check-sdk-version-sync.mjs +6 -6
  926. package/scripts/dev-safe.mjs +1 -1
  927. package/scripts/dev-with-automation.mjs +1 -1
  928. package/scripts/static-server.mjs +33 -1
  929. package/build/assets/active-backend-context-CrHTlgvN.js +0 -2
  930. package/build/assets/agent-profiles-settings-Dzgb7G9z.js +0 -1
  931. package/build/assets/agent-server-conversation-service.api-tnqNjbpE.js +0 -86
  932. package/build/assets/agent-settings-DLtsqaOs.js +0 -2
  933. package/build/assets/agent-settings-fFvR-XC2.js +0 -1
  934. package/build/assets/alert-banner-HP6mX-Vr.js +0 -1
  935. package/build/assets/api-key-entry-screen-qTzrmJcr.js +0 -1
  936. package/build/assets/app-settings-dbnneVaV.js +0 -1
  937. package/build/assets/automation-detail-BmwlCUAB.js +0 -3
  938. package/build/assets/automation-git-sync-CprN5DcU.js +0 -1
  939. package/build/assets/automation-setup-route-C40kXjMY.js +0 -1
  940. package/build/assets/automations-list-DuNcRawl.js +0 -1
  941. package/build/assets/backend-form-modal-lhGwzXFI.js +0 -1
  942. package/build/assets/backend-synced-settings-badge-DPkz30BE.js +0 -1
  943. package/build/assets/badge-BU3S0VtE.js +0 -1
  944. package/build/assets/bot-dMYHVfYM.js +0 -1
  945. package/build/assets/browser-DSAo0tz1.js +0 -46
  946. package/build/assets/browser-tab-C9vy56R5.js +0 -1
  947. package/build/assets/canvas-extension-page-dx1gFrfW.js +0 -1
  948. package/build/assets/canvas-extensions-8A-XhpgP.js +0 -1
  949. package/build/assets/check-CS0vmpQQ.js +0 -1
  950. package/build/assets/chevron-down-e1QBpjVy.js +0 -1
  951. package/build/assets/chevron-right-ZG4R5G4Q.js +0 -1
  952. package/build/assets/circle-check-DzWLNsbE.js +0 -1
  953. package/build/assets/circle-plus-check-toggle-BO_kFZt3.js +0 -1
  954. package/build/assets/command-menu--UIlGL72.js +0 -1
  955. package/build/assets/commits-tab-AnZwLvh-.js +0 -1
  956. package/build/assets/confirmation-modal-Dv1ktp8K.js +0 -1
  957. package/build/assets/conversation-BbGrAO4Z.js +0 -93
  958. package/build/assets/conversation-mYT6NAoj.js +0 -1
  959. package/build/assets/conversation-panel-mYT6NAoj.js +0 -1
  960. package/build/assets/conversation-state-store-B0ImPLHO.js +0 -1
  961. package/build/assets/conversation-store-Ca3ghXap.js +0 -6
  962. package/build/assets/copy-to-clipboard-button-Ca8iSkkA.js +0 -1
  963. package/build/assets/device-verify-Bhn2e_Ye.js +0 -1
  964. package/build/assets/edit-automation-modal-DadGbJ2u.js +0 -1
  965. package/build/assets/empty-state-BoGVDecT.js +0 -1
  966. package/build/assets/enum-filter-dropdown-Bgca129f.js +0 -1
  967. package/build/assets/environment-switch-overlay-BmBRT7gv.js +0 -1
  968. package/build/assets/error-state-Body8Ngd.js +0 -1
  969. package/build/assets/extensions-hub-CcDqq_vR.js +0 -1
  970. package/build/assets/extensions-navigation-Cr4yzYk4.js +0 -1
  971. package/build/assets/external-link-DKUlnCQV.js +0 -1
  972. package/build/assets/files-tab-D4o2VyE_.js +0 -1
  973. package/build/assets/format-model-name-CasAP3nd.js +0 -1
  974. package/build/assets/get-git-path-ChKDVHZp.js +0 -1
  975. package/build/assets/git-repo-dropdown-4ROKl2cB.js +0 -1
  976. package/build/assets/git-repo-dropdown-BkqzkMmM.js +0 -1
  977. package/build/assets/highlighted-source-view-BFRxGT_Q.js +0 -1
  978. package/build/assets/home-ChpSuepX.js +0 -1
  979. package/build/assets/home-DIsB440S.js +0 -1
  980. package/build/assets/home-automation-run-tooltip-BVNDWjAH.js +0 -1
  981. package/build/assets/home-store-CY9Ej0ux.js +0 -1
  982. package/build/assets/index-home-BdlrFIif.js +0 -1
  983. package/build/assets/info-B6RQawoW.js +0 -1
  984. package/build/assets/install-server-modal-Dpy89p4g.js +0 -1
  985. package/build/assets/kebab-menu-item-content-D8hSNGmm.js +0 -1
  986. package/build/assets/launch-IrTDEFCs.js +0 -1
  987. package/build/assets/list-filter-DsEK7NFC.js +0 -1
  988. package/build/assets/llm-not-configured-banner-CIFABh3K.js +0 -27
  989. package/build/assets/llm-settings-B9juXhIa.js +0 -1
  990. package/build/assets/llm-settings-De1d5dfr.js +0 -1
  991. package/build/assets/llm-subscription-service-BpJ0ouQo.js +0 -1
  992. package/build/assets/loader-circle-CC1au6hc.js +0 -1
  993. package/build/assets/manage-backends-modal-BrPV3oB-.js +0 -1
  994. package/build/assets/manifest-80fb1c29.js +0 -1
  995. package/build/assets/manifest-subpage-layout-CAOYzrYp.js +0 -1
  996. package/build/assets/markdown-renderer-BzTlxI8x.js +0 -8
  997. package/build/assets/mcp-BTs_SXfZ.js +0 -1
  998. package/build/assets/mcp-page-BEBYqH_K.js +0 -9
  999. package/build/assets/messages-DKV9cRc2.js +0 -41
  1000. package/build/assets/modal-close-button-DDzdRvCs.js +0 -1
  1001. package/build/assets/onboarding-DV_OXoeP.js +0 -1
  1002. package/build/assets/onboarding-modal-rkyBYkeQ.js +0 -1
  1003. package/build/assets/organization-service.api-DrYNkEN_.js +0 -1
  1004. package/build/assets/pencil-47jAZH_V.js +0 -1
  1005. package/build/assets/pin-By41Vl5J.js +0 -1
  1006. package/build/assets/planner-tab-C9uZmhme.js +0 -1
  1007. package/build/assets/plug-CG5HFcNG.js +0 -1
  1008. package/build/assets/plugins-management-service-BMJgC3Ga.js +0 -1
  1009. package/build/assets/plus-C7Slq-0I.js +0 -1
  1010. package/build/assets/profiles-service.api-ChoKrL0l.js +0 -1
  1011. package/build/assets/providers-BhMcY5nv.js +0 -1
  1012. package/build/assets/proxy-9Fe1v5na.js +0 -1
  1013. package/build/assets/recommended-automations-launcher-6ABrI9Cy.js +0 -1
  1014. package/build/assets/refresh-cw-3q3Frrii.js +0 -1
  1015. package/build/assets/root-Dc8YmC9F.js +0 -2
  1016. package/build/assets/root-VDaypvK4.css +0 -1
  1017. package/build/assets/root-layout-CXkhSPYh.js +0 -2
  1018. package/build/assets/schema-field-D-y9-LDb.js +0 -1
  1019. package/build/assets/scroll-fade-state-Dw-i4SGq.js +0 -1
  1020. package/build/assets/sdk-section-page-BlFiizlG.js +0 -1
  1021. package/build/assets/secret-form-BB7the8W.js +0 -1
  1022. package/build/assets/secrets-service-ByZVENbp.js +0 -1
  1023. package/build/assets/secrets-settings-B_GpxKW2.js +0 -1
  1024. package/build/assets/settings-C0EWuBtA.js +0 -1
  1025. package/build/assets/settings-dropdown-input-BcwylHs2.js +0 -1
  1026. package/build/assets/settings-index-5w5UW2K3.js +0 -1
  1027. package/build/assets/settings-input-Db-1g8Ql.js +0 -1
  1028. package/build/assets/settings-modal-DfJ3tcJQ.js +0 -1
  1029. package/build/assets/settings-service.api-DJ1r62Zr.js +0 -1
  1030. package/build/assets/settings-switch-CS-dJDmA.js +0 -1
  1031. package/build/assets/shared-conversation-CA5ISEDy.js +0 -1
  1032. package/build/assets/shield-check-D2aCRd16.js +0 -1
  1033. package/build/assets/sidebar-mobile-menu-toggle-C_fb0Jki.js +0 -1
  1034. package/build/assets/sidebar-store-DGqHkVLw.js +0 -1
  1035. package/build/assets/skill-card-pill-row-B27-xyig.js +0 -1
  1036. package/build/assets/skill-scope-B42H-XOc.js +0 -1
  1037. package/build/assets/skills-plugins-tgF8EiXC.js +0 -1
  1038. package/build/assets/skills-settings-BgJ9PaOe.js +0 -1
  1039. package/build/assets/styled-tooltip-C4jf5Fv9.js +0 -1
  1040. package/build/assets/task-list-tab-C5zcaktH.js +0 -1
  1041. package/build/assets/toggle-switch-ChOLXv2n.js +0 -1
  1042. package/build/assets/trash-2-D7K26eDO.js +0 -1
  1043. package/build/assets/trash-D-HYiVYM.js +0 -1
  1044. package/build/assets/triangle-alert-CtdXWHUI.js +0 -1
  1045. package/build/assets/usage-tab-CVDffLPt.js +0 -1
  1046. package/build/assets/use-acp-credential-form-XIQmpX6M.js +0 -1
  1047. package/build/assets/use-activate-agent-profile-BLfmvDiG.js +0 -1
  1048. package/build/assets/use-agent-profiles-Bd9Bvvp1.js +0 -1
  1049. package/build/assets/use-canvas-extensions-Bi693ujJ.js +0 -1
  1050. package/build/assets/use-config-A9QovgXO.js +0 -1
  1051. package/build/assets/use-create-conversation-Dx3l7mFZ.js +0 -1
  1052. package/build/assets/use-create-secret-B9cUFWRG.js +0 -1
  1053. package/build/assets/use-has-permission-B3C8rQmR.js +0 -1
  1054. package/build/assets/use-is-authed-nTBcM7dE.js +0 -1
  1055. package/build/assets/use-llm-configured-BV9nZ1_j.js +0 -1
  1056. package/build/assets/use-llm-profiles-BO-P4Oyo.js +0 -1
  1057. package/build/assets/use-manifest-capabilities-Cw_flwEz.js +0 -1
  1058. package/build/assets/use-onboarding-completion-D8U7k4Qb.js +0 -1
  1059. package/build/assets/use-pinned-home-route-CckOZrmb.js +0 -1
  1060. package/build/assets/use-plugins-marketplace-7i94Zu3Z.js +0 -1
  1061. package/build/assets/use-save-agent-profile-BUjSsDXK.js +0 -1
  1062. package/build/assets/use-settings-DSXLbvBl.js +0 -1
  1063. package/build/assets/use-settings-nav-items-CwRw-CmX.js +0 -16
  1064. package/build/assets/use-tracking-D53y3TH9.js +0 -3
  1065. package/build/assets/useQueries-DlbhlH9I.js +0 -1
  1066. package/build/assets/useQuery-BSTgq1rl.js +0 -1
  1067. package/build/assets/utils-CN5ZfZy1.js +0 -1
  1068. package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~czjee3a3-DqZDXfg2.js +0 -186
  1069. package/build/assets/vendor~entry.client~root~root-layout~index-home~home~conversation-panel~conversation~launch~ew9ih1s8-rfV8mQ9m.js +0 -1
  1070. package/build/assets/vendor~root-layout-C9Ju9DQg.js +0 -1
  1071. package/build/assets/vendor~root-layout~conversation-panel~conversation~skills-settings~automations-list~shared-~bovqqk8e-BWir3rJs.js +0 -1
  1072. package/build/assets/vendor~root-layout~index-home~home~conversation-panel~conversation~mcp~automations-list~aut~ibfbmr9f-cDuKr-WD.js +0 -1
  1073. package/build/assets/vendor~root~root-layout~index-home~home~conversation-panel~conversation~launch~extensions-h~iyia17eu-Chf7vmKB.js +0 -1
  1074. package/build/assets/x-DJdhbdmt.js +0 -1
  1075. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.cjs +0 -2
  1076. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.cjs.map +0 -1
  1077. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.d.ts +0 -35
  1078. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.js +0 -247
  1079. package/dist/components/features/conversation-panel/conversation-panel-filter-menu.js.map +0 -1
  1080. package/dist/hooks/query/use-skills.cjs +0 -2
  1081. package/dist/hooks/query/use-skills.cjs.map +0 -1
  1082. package/dist/hooks/query/use-skills.d.ts +0 -7
  1083. package/dist/hooks/query/use-skills.js +0 -13
  1084. package/dist/hooks/query/use-skills.js.map +0 -1
  1085. package/dist/hooks/use-has-permission.cjs +0 -2
  1086. package/dist/hooks/use-has-permission.cjs.map +0 -1
  1087. package/dist/hooks/use-has-permission.d.ts +0 -1
  1088. package/dist/hooks/use-has-permission.js +0 -8
  1089. package/dist/hooks/use-has-permission.js.map +0 -1
  1090. package/dist/node_modules/lucide-react/dist/esm/icons/eye.cjs +0 -2
  1091. package/dist/node_modules/lucide-react/dist/esm/icons/eye.cjs.map +0 -1
  1092. package/dist/node_modules/lucide-react/dist/esm/icons/eye.js +0 -14
  1093. package/dist/node_modules/lucide-react/dist/esm/icons/eye.js.map +0 -1
@@ -1,63 +1,38 @@
1
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 n from "../../api/automation-service/automation-service.api.js";
4
- import r from "react";
2
+ import { QueryClientContext as t } from "../../node_modules/@tanstack/react-query/build/modern/QueryClientProvider.js";
3
+ import { useQuery as n } from "../../node_modules/@tanstack/react-query/build/modern/useQuery.js";
4
+ import { getQueryClient as r } from "../../query-client-config.js";
5
+ import { useActiveBackend as i } from "../../contexts/active-backend-context.js";
6
+ import a from "../../api/automation-service/automation-service.api.js";
7
+ import o from "react";
5
8
  //#region src/hooks/query/use-automation-sdk-version.ts
6
- var i = "automation-sdk-version", a = 3600 * 1e3, o = "\0", s = /* @__PURE__ */ new Map(), c = /* @__PURE__ */ new Map();
7
- function l(e) {
8
- let t = s.get(e);
9
- if (t) {
10
- if (t.expiresAt <= Date.now()) {
11
- s.delete(e);
12
- return;
13
- }
14
- return t.version;
9
+ var s = "automation-sdk-version", c = 3600 * 1e3;
10
+ async function l() {
11
+ if (typeof a.getSdkVersion != "function") return null;
12
+ try {
13
+ return await a.getSdkVersion();
14
+ } catch {
15
+ return null;
15
16
  }
16
17
  }
17
- function u(e, t) {
18
- s.set(e, {
19
- expiresAt: Date.now() + a,
20
- version: t
21
- });
22
- }
23
- function d(e) {
24
- let t = l(e);
25
- if (t !== void 0) return Promise.resolve(t);
26
- let r = c.get(e);
27
- if (r) return r;
28
- if (typeof n.getSdkVersion != "function") return u(e, null), Promise.resolve(null);
29
- let i = n.getSdkVersion().then((t) => (u(e, t), t)).catch(() => (u(e, null), null)).finally(() => {
30
- c.delete(e);
31
- });
32
- return c.set(e, i), i;
33
- }
34
- function f() {
35
- let n = t(), { backend: a } = n, s = [
36
- i,
37
- a.id,
38
- a.kind,
39
- a.host,
40
- n.orgId ?? ""
41
- ].join(o), [c, u] = r.useState(() => l(s) ?? null);
42
- return r.useEffect(() => {
43
- if (e(a)) {
44
- u(null);
45
- return;
46
- }
47
- let t = l(s);
48
- if (t !== void 0) {
49
- u(t);
50
- return;
51
- }
52
- let n = !0;
53
- return u(null), d(s).then((e) => {
54
- n && u(e);
55
- }), () => {
56
- n = !1;
57
- };
58
- }, [a, s]), c;
18
+ function u() {
19
+ let u = i(), { backend: d } = u, f = o.useContext(t), p = !e(d) && typeof a.getSdkVersion == "function", { data: m } = n({
20
+ queryKey: [
21
+ s,
22
+ d.id,
23
+ d.kind,
24
+ d.host,
25
+ u.orgId ?? ""
26
+ ],
27
+ queryFn: l,
28
+ enabled: p,
29
+ initialData: p ? void 0 : null,
30
+ staleTime: c,
31
+ gcTime: c
32
+ }, f ?? r());
33
+ return m ?? null;
59
34
  }
60
35
  //#endregion
61
- export { f as useAutomationSdkVersion };
36
+ export { u as useAutomationSdkVersion };
62
37
 
63
38
  //# sourceMappingURL=use-automation-sdk-version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-automation-sdk-version.js","names":[],"sources":["../../../src/hooks/query/use-automation-sdk-version.ts"],"sourcesContent":["import React from \"react\";\nimport AutomationService from \"#/api/automation-service/automation-service.api\";\nimport { isNoBackend } from \"#/api/backend-registry/active-store\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\n\nexport const AUTOMATION_SDK_VERSION_CACHE_NAMESPACE = \"automation-sdk-version\";\n\nconst AUTOMATION_SDK_VERSION_CACHE_TIME_MS = 60 * 60 * 1000;\nconst CACHE_KEY_SEPARATOR = \"\\u0000\";\n\ninterface AutomationSdkVersionCacheEntry {\n expiresAt: number;\n version: string | null;\n}\n\nconst sdkVersionCache = new Map<string, AutomationSdkVersionCacheEntry>();\nconst sdkVersionRequests = new Map<string, Promise<string | null>>();\n\nexport function __resetAutomationSdkVersionCacheForTests() {\n sdkVersionCache.clear();\n sdkVersionRequests.clear();\n}\n\nfunction readCachedSdkVersion(cacheKey: string): string | null | undefined {\n const cached = sdkVersionCache.get(cacheKey);\n if (!cached) return undefined;\n\n if (cached.expiresAt <= Date.now()) {\n sdkVersionCache.delete(cacheKey);\n return undefined;\n }\n\n return cached.version;\n}\n\nfunction writeCachedSdkVersion(cacheKey: string, version: string | null) {\n sdkVersionCache.set(cacheKey, {\n expiresAt: Date.now() + AUTOMATION_SDK_VERSION_CACHE_TIME_MS,\n version,\n });\n}\n\nfunction getCachedOrFetchSdkVersion(cacheKey: string) {\n const cached = readCachedSdkVersion(cacheKey);\n if (cached !== undefined) return Promise.resolve(cached);\n\n const existingRequest = sdkVersionRequests.get(cacheKey);\n if (existingRequest) return existingRequest;\n\n if (typeof AutomationService.getSdkVersion !== \"function\") {\n writeCachedSdkVersion(cacheKey, null);\n return Promise.resolve(null);\n }\n\n const request = AutomationService.getSdkVersion()\n .then((version) => {\n writeCachedSdkVersion(cacheKey, version);\n return version;\n })\n .catch(() => {\n writeCachedSdkVersion(cacheKey, null);\n return null;\n })\n .finally(() => {\n sdkVersionRequests.delete(cacheKey);\n });\n sdkVersionRequests.set(cacheKey, request);\n return request;\n}\n\nexport function useAutomationSdkVersion() {\n const active = useActiveBackend();\n const { backend } = active;\n const cacheKey = [\n AUTOMATION_SDK_VERSION_CACHE_NAMESPACE,\n backend.id,\n backend.kind,\n backend.host,\n active.orgId ?? \"\",\n ].join(CACHE_KEY_SEPARATOR);\n\n const [automationSdkVersion, setAutomationSdkVersion] = React.useState<\n string | null\n >(() => readCachedSdkVersion(cacheKey) ?? null);\n\n React.useEffect(() => {\n if (isNoBackend(backend)) {\n setAutomationSdkVersion(null);\n return undefined;\n }\n\n const cached = readCachedSdkVersion(cacheKey);\n if (cached !== undefined) {\n setAutomationSdkVersion(cached);\n return undefined;\n }\n\n let isMounted = true;\n setAutomationSdkVersion(null);\n void getCachedOrFetchSdkVersion(cacheKey).then((version) => {\n if (isMounted) {\n setAutomationSdkVersion(version);\n }\n });\n\n return () => {\n isMounted = false;\n };\n }, [backend, cacheKey]);\n\n return automationSdkVersion;\n}\n"],"mappings":";;;;;AAKA,IAAa,IAAyC,0BAEhD,IAAuC,OAAU,KACjD,IAAsB,MAOtB,oBAAkB,IAAI,IAA4C,GAClE,oBAAqB,IAAI,IAAoC;AAOnE,SAAS,EAAqB,GAA6C;CACzE,IAAM,IAAS,EAAgB,IAAI,CAAQ;CACtC,OAEL;MAAI,EAAO,aAAa,KAAK,IAAI,GAAG;GAClC,EAAgB,OAAO,CAAQ;GAC/B;EACF;EAEA,OAAO,EAAO;CAFd;AAGF;AAEA,SAAS,EAAsB,GAAkB,GAAwB;CACvE,EAAgB,IAAI,GAAU;EAC5B,WAAW,KAAK,IAAI,IAAI;EACxB;CACF,CAAC;AACH;AAEA,SAAS,EAA2B,GAAkB;CACpD,IAAM,IAAS,EAAqB,CAAQ;CAC5C,IAAI,MAAW,KAAA,GAAW,OAAO,QAAQ,QAAQ,CAAM;CAEvD,IAAM,IAAkB,EAAmB,IAAI,CAAQ;CACvD,IAAI,GAAiB,OAAO;CAE5B,IAAI,OAAO,EAAkB,iBAAkB,YAE7C,OADA,EAAsB,GAAU,IAAI,GAC7B,QAAQ,QAAQ,IAAI;CAG7B,IAAM,IAAU,EAAkB,cAAc,EAC7C,MAAM,OACL,EAAsB,GAAU,CAAO,GAChC,EACR,EACA,aACC,EAAsB,GAAU,IAAI,GAC7B,KACR,EACA,cAAc;EACb,EAAmB,OAAO,CAAQ;CACpC,CAAC;CAEH,OADA,EAAmB,IAAI,GAAU,CAAO,GACjC;AACT;AAEA,SAAgB,IAA0B;CACxC,IAAM,IAAS,EAAiB,GAC1B,EAAE,eAAY,GACd,IAAW;EACf;EACA,EAAQ;EACR,EAAQ;EACR,EAAQ;EACR,EAAO,SAAS;CAClB,EAAE,KAAK,CAAmB,GAEpB,CAAC,GAAsB,KAA2B,EAAM,eAEtD,EAAqB,CAAQ,KAAK,IAAI;CA2B9C,OAzBA,EAAM,gBAAgB;EACpB,IAAI,EAAY,CAAO,GAAG;GACxB,EAAwB,IAAI;GAC5B;EACF;EAEA,IAAM,IAAS,EAAqB,CAAQ;EAC5C,IAAI,MAAW,KAAA,GAAW;GACxB,EAAwB,CAAM;GAC9B;EACF;EAEA,IAAI,IAAY;EAQhB,OAPA,EAAwB,IAAI,GAC5B,EAAgC,CAAQ,EAAE,MAAM,MAAY;GAC1D,AAAI,KACF,EAAwB,CAAO;EAEnC,CAAC,SAEY;GACX,IAAY;EACd;CACF,GAAG,CAAC,GAAS,CAAQ,CAAC,GAEf;AACT"}
1
+ {"version":3,"file":"use-automation-sdk-version.js","names":[],"sources":["../../../src/hooks/query/use-automation-sdk-version.ts"],"sourcesContent":["import React from \"react\";\nimport { QueryClientContext, useQuery } from \"@tanstack/react-query\";\nimport AutomationService from \"#/api/automation-service/automation-service.api\";\nimport { isNoBackend } from \"#/api/backend-registry/active-store\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport { getQueryClient } from \"#/query-client-config\";\n\nexport const AUTOMATION_SDK_VERSION_CACHE_NAMESPACE = \"automation-sdk-version\";\n\nconst AUTOMATION_SDK_VERSION_CACHE_TIME_MS = 60 * 60 * 1000;\nasync function fetchAutomationSdkVersion(): Promise<string | null> {\n if (typeof AutomationService.getSdkVersion !== \"function\") {\n return null;\n }\n\n try {\n return await AutomationService.getSdkVersion();\n } catch {\n return null;\n }\n}\n\nexport function useAutomationSdkVersion() {\n const active = useActiveBackend();\n const { backend } = active;\n const providerQueryClient = React.useContext(QueryClientContext);\n const canFetchSdkVersion =\n !isNoBackend(backend) &&\n typeof AutomationService.getSdkVersion === \"function\";\n const { data } = useQuery(\n {\n queryKey: [\n AUTOMATION_SDK_VERSION_CACHE_NAMESPACE,\n backend.id,\n backend.kind,\n backend.host,\n active.orgId ?? \"\",\n ],\n queryFn: fetchAutomationSdkVersion,\n enabled: canFetchSdkVersion,\n initialData: canFetchSdkVersion ? undefined : null,\n staleTime: AUTOMATION_SDK_VERSION_CACHE_TIME_MS,\n gcTime: AUTOMATION_SDK_VERSION_CACHE_TIME_MS,\n },\n providerQueryClient ?? getQueryClient(),\n );\n\n return data ?? null;\n}\n"],"mappings":";;;;;;;;AAOA,IAAa,IAAyC,0BAEhD,IAAuC,OAAU;AACvD,eAAe,IAAoD;CACjE,IAAI,OAAO,EAAkB,iBAAkB,YAC7C,OAAO;CAGT,IAAI;EACF,OAAO,MAAM,EAAkB,cAAc;CAC/C,QAAQ;EACN,OAAO;CACT;AACF;AAEA,SAAgB,IAA0B;CACxC,IAAM,IAAS,EAAiB,GAC1B,EAAE,eAAY,GACd,IAAsB,EAAM,WAAW,CAAkB,GACzD,IACJ,CAAC,EAAY,CAAO,KACpB,OAAO,EAAkB,iBAAkB,YACvC,EAAE,YAAS,EACf;EACE,UAAU;GACR;GACA,EAAQ;GACR,EAAQ;GACR,EAAQ;GACR,EAAO,SAAS;EAClB;EACA,SAAS;EACT,SAAS;EACT,aAAa,IAAqB,KAAA,IAAY;EAC9C,WAAW;EACX,QAAQ;CACV,GACA,KAAuB,EAAe,CACxC;CAEA,OAAO,KAAQ;AACjB"}
@@ -1,2 +1,2 @@
1
- require("../../_virtual/_rolldown/runtime.cjs");const e=require("./use-active-conversation.cjs"),t=require("./use-skills.cjs");var n=()=>t.useSkills(e.useActiveConversation().data?.selected_workspace??void 0);exports.useConversationSkills=n;
1
+ require("../../_virtual/_rolldown/runtime.cjs");const e=require("../use-conversation-id.cjs"),t=require("../../node_modules/@tanstack/react-query/build/modern/useQuery.cjs"),n=require("../../contexts/active-backend-context.cjs"),r=require("./use-active-conversation.cjs"),i=require("../../api/skills-service.cjs");var a=()=>{let a=n.useActiveBackend().backend.kind===`cloud`,{conversationId:o}=e.useOptionalConversationId(),{data:s}=r.useActiveConversation(),c=s?.selected_workspace??void 0,l=a?o:null;return t.useQuery({queryKey:l?[`conversation`,l,`skills`]:[`skills`,c??null],queryFn:()=>l?i.default.getConversationSkills(l):i.default.getSkills(c),enabled:!l||s?.sandbox_status===`RUNNING`,staleTime:1e3*60*10,refetchOnWindowFocus:!1})};exports.useConversationSkills=a;
2
2
  //# sourceMappingURL=use-conversation-skills.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-conversation-skills.cjs","names":[],"sources":["../../../src/hooks/query/use-conversation-skills.ts"],"sourcesContent":["import { useActiveConversation } from \"./use-active-conversation\";\nimport { useSkills } from \"./use-skills\";\n\n/**\n * Skills catalog scoped to the active conversation's attached workspace, so\n * the slash-command menu and skills modal list the same project skills that\n * were loaded into the conversation. Falls back to the global workspace dir\n * for \"No workspace\" conversations (``selected_workspace`` is null).\n */\nexport const useConversationSkills = () => {\n const conversation = useActiveConversation();\n return useSkills(conversation.data?.selected_workspace ?? undefined);\n};\n"],"mappings":"+HASA,IAAa,MAEJ,EAAA,UADc,EAAA,sBACJ,EAAa,MAAM,oBAAsB,IAAA,EAAS"}
1
+ {"version":3,"file":"use-conversation-skills.cjs","names":[],"sources":["../../../src/hooks/query/use-conversation-skills.ts"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport SkillsService from \"#/api/skills-service\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport { useOptionalConversationId } from \"#/hooks/use-conversation-id\";\nimport { SkillInfo } from \"#/types/settings\";\nimport { useActiveConversation } from \"./use-active-conversation\";\n\n/**\n * Skills catalog scoped to the active conversation, so the slash-command menu\n * and skills modal list the same skills that were loaded into it.\n *\n * Cloud: the per-conversation route reports what the conversation's\n * agent-server actually loaded (public catalog, user/org repos, project\n * skills, auto-loaded marketplace plugins); the global `/api/v1/skills/search`\n * catalog only scans the API host's built-in skills directory. The route needs\n * a running sandbox, which `useActiveConversation` polls for.\n *\n * Local (and cloud with no conversation route, e.g. the home page): the\n * workspace-scoped catalog, falling back to the global workspace dir for\n * \"No workspace\" conversations (`selected_workspace` is null).\n */\nexport const useConversationSkills = () => {\n const isCloud = useActiveBackend().backend.kind === \"cloud\";\n const { conversationId } = useOptionalConversationId();\n const { data: conversation } = useActiveConversation();\n const projectDir = conversation?.selected_workspace ?? undefined;\n // Keyed on the route id so a still-loading cloud conversation does not fall\n // back to the global catalog; only a missing route does.\n const cloudConversationId = isCloud ? conversationId : null;\n\n return useQuery<SkillInfo[]>({\n queryKey: cloudConversationId\n ? [\"conversation\", cloudConversationId, \"skills\"]\n : [\"skills\", projectDir ?? null],\n queryFn: () =>\n cloudConversationId\n ? SkillsService.getConversationSkills(cloudConversationId)\n : SkillsService.getSkills(projectDir),\n // The cloud route 404s until the sandbox runs.\n enabled: !cloudConversationId || conversation?.sandbox_status === \"RUNNING\",\n staleTime: 1000 * 60 * 10, // 10 minutes – skill list rarely changes\n refetchOnWindowFocus: false,\n });\n};\n"],"mappings":"0TAqBA,IAAa,MAA8B,CACzC,IAAM,EAAU,EAAA,iBAAiB,EAAE,QAAQ,OAAS,QAC9C,CAAE,kBAAmB,EAAA,0BAA0B,EAC/C,CAAE,KAAM,GAAiB,EAAA,sBAAsB,EAC/C,EAAa,GAAc,oBAAsB,IAAA,GAGjD,EAAsB,EAAU,EAAiB,KAEvD,OAAO,EAAA,SAAsB,CAC3B,SAAU,EACN,CAAC,eAAgB,EAAqB,QAAQ,EAC9C,CAAC,SAAU,GAAc,IAAI,EACjC,YACE,EACI,EAAA,QAAc,sBAAsB,CAAmB,EACvD,EAAA,QAAc,UAAU,CAAU,EAExC,QAAS,CAAC,GAAuB,GAAc,iBAAmB,UAClE,UAAW,IAAO,GAAK,GACvB,qBAAsB,EACxB,CAAC,CACH"}
@@ -1,7 +1,16 @@
1
+ import { SkillInfo } from "#/types/settings";
1
2
  /**
2
- * Skills catalog scoped to the active conversation's attached workspace, so
3
- * the slash-command menu and skills modal list the same project skills that
4
- * were loaded into the conversation. Falls back to the global workspace dir
5
- * for "No workspace" conversations (``selected_workspace`` is null).
3
+ * Skills catalog scoped to the active conversation, so the slash-command menu
4
+ * and skills modal list the same skills that were loaded into it.
5
+ *
6
+ * Cloud: the per-conversation route reports what the conversation's
7
+ * agent-server actually loaded (public catalog, user/org repos, project
8
+ * skills, auto-loaded marketplace plugins); the global `/api/v1/skills/search`
9
+ * catalog only scans the API host's built-in skills directory. The route needs
10
+ * a running sandbox, which `useActiveConversation` polls for.
11
+ *
12
+ * Local (and cloud with no conversation route, e.g. the home page): the
13
+ * workspace-scoped catalog, falling back to the global workspace dir for
14
+ * "No workspace" conversations (`selected_workspace` is null).
6
15
  */
7
- export declare const useConversationSkills: () => import("@tanstack/react-query").UseQueryResult<NoInfer<import("../../types/settings").SkillInfo[]>, import("axios").AxiosError<unknown, any>>;
16
+ export declare const useConversationSkills: () => import("@tanstack/react-query").UseQueryResult<NoInfer<SkillInfo[]>, import("axios").AxiosError<unknown, any>>;
@@ -1,8 +1,24 @@
1
- import { useActiveConversation as e } from "./use-active-conversation.js";
2
- import { useSkills as t } from "./use-skills.js";
1
+ import { useOptionalConversationId as e } from "../use-conversation-id.js";
2
+ import { useQuery as t } from "../../node_modules/@tanstack/react-query/build/modern/useQuery.js";
3
+ import { useActiveBackend as n } from "../../contexts/active-backend-context.js";
4
+ import { useActiveConversation as r } from "./use-active-conversation.js";
5
+ import i from "../../api/skills-service.js";
3
6
  //#region src/hooks/query/use-conversation-skills.ts
4
- var n = () => t(e().data?.selected_workspace ?? void 0);
7
+ var a = () => {
8
+ let a = n().backend.kind === "cloud", { conversationId: o } = e(), { data: s } = r(), c = s?.selected_workspace ?? void 0, l = a ? o : null;
9
+ return t({
10
+ queryKey: l ? [
11
+ "conversation",
12
+ l,
13
+ "skills"
14
+ ] : ["skills", c ?? null],
15
+ queryFn: () => l ? i.getConversationSkills(l) : i.getSkills(c),
16
+ enabled: !l || s?.sandbox_status === "RUNNING",
17
+ staleTime: 1e3 * 60 * 10,
18
+ refetchOnWindowFocus: !1
19
+ });
20
+ };
5
21
  //#endregion
6
- export { n as useConversationSkills };
22
+ export { a as useConversationSkills };
7
23
 
8
24
  //# sourceMappingURL=use-conversation-skills.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-conversation-skills.js","names":[],"sources":["../../../src/hooks/query/use-conversation-skills.ts"],"sourcesContent":["import { useActiveConversation } from \"./use-active-conversation\";\nimport { useSkills } from \"./use-skills\";\n\n/**\n * Skills catalog scoped to the active conversation's attached workspace, so\n * the slash-command menu and skills modal list the same project skills that\n * were loaded into the conversation. Falls back to the global workspace dir\n * for \"No workspace\" conversations (``selected_workspace`` is null).\n */\nexport const useConversationSkills = () => {\n const conversation = useActiveConversation();\n return useSkills(conversation.data?.selected_workspace ?? undefined);\n};\n"],"mappings":";;;AASA,IAAa,UAEJ,EADc,EACJ,EAAa,MAAM,sBAAsB,KAAA,CAAS"}
1
+ {"version":3,"file":"use-conversation-skills.js","names":[],"sources":["../../../src/hooks/query/use-conversation-skills.ts"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport SkillsService from \"#/api/skills-service\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport { useOptionalConversationId } from \"#/hooks/use-conversation-id\";\nimport { SkillInfo } from \"#/types/settings\";\nimport { useActiveConversation } from \"./use-active-conversation\";\n\n/**\n * Skills catalog scoped to the active conversation, so the slash-command menu\n * and skills modal list the same skills that were loaded into it.\n *\n * Cloud: the per-conversation route reports what the conversation's\n * agent-server actually loaded (public catalog, user/org repos, project\n * skills, auto-loaded marketplace plugins); the global `/api/v1/skills/search`\n * catalog only scans the API host's built-in skills directory. The route needs\n * a running sandbox, which `useActiveConversation` polls for.\n *\n * Local (and cloud with no conversation route, e.g. the home page): the\n * workspace-scoped catalog, falling back to the global workspace dir for\n * \"No workspace\" conversations (`selected_workspace` is null).\n */\nexport const useConversationSkills = () => {\n const isCloud = useActiveBackend().backend.kind === \"cloud\";\n const { conversationId } = useOptionalConversationId();\n const { data: conversation } = useActiveConversation();\n const projectDir = conversation?.selected_workspace ?? undefined;\n // Keyed on the route id so a still-loading cloud conversation does not fall\n // back to the global catalog; only a missing route does.\n const cloudConversationId = isCloud ? conversationId : null;\n\n return useQuery<SkillInfo[]>({\n queryKey: cloudConversationId\n ? [\"conversation\", cloudConversationId, \"skills\"]\n : [\"skills\", projectDir ?? null],\n queryFn: () =>\n cloudConversationId\n ? SkillsService.getConversationSkills(cloudConversationId)\n : SkillsService.getSkills(projectDir),\n // The cloud route 404s until the sandbox runs.\n enabled: !cloudConversationId || conversation?.sandbox_status === \"RUNNING\",\n staleTime: 1000 * 60 * 10, // 10 minutes – skill list rarely changes\n refetchOnWindowFocus: false,\n });\n};\n"],"mappings":";;;;;;AAqBA,IAAa,UAA8B;CACzC,IAAM,IAAU,EAAiB,EAAE,QAAQ,SAAS,SAC9C,EAAE,sBAAmB,EAA0B,GAC/C,EAAE,MAAM,MAAiB,EAAsB,GAC/C,IAAa,GAAc,sBAAsB,KAAA,GAGjD,IAAsB,IAAU,IAAiB;CAEvD,OAAO,EAAsB;EAC3B,UAAU,IACN;GAAC;GAAgB;GAAqB;EAAQ,IAC9C,CAAC,UAAU,KAAc,IAAI;EACjC,eACE,IACI,EAAc,sBAAsB,CAAmB,IACvD,EAAc,UAAU,CAAU;EAExC,SAAS,CAAC,KAAuB,GAAc,mBAAmB;EAClE,WAAW,MAAO,KAAK;EACvB,sBAAsB;CACxB,CAAC;AACH"}
@@ -0,0 +1,2 @@
1
+ const e=require("../../_virtual/_rolldown/runtime.cjs"),t=require("../../node_modules/@tanstack/react-query/build/modern/useQuery.cjs"),n=require("../../contexts/active-backend-context.cjs"),r=require("../../api/config-service/config-service.api.cjs"),i=require("../../stores/free-models-store.cjs"),a=require("./use-verified-models.cjs");let o=require("react");o=e.__toESM(o,1);var s=`openhands`,c=100,l=10;async function u(e,t,n,i){if(i>=l)throw Error(`Too many pagination requests while fetching OpenHands models (depth=${i})`);let a=await r.default.searchModels({provider__eq:s,limit:c,...t?{page_id:t}:{}},e);if(!a.next_page_id)return a.items;if(n.has(a.next_page_id))throw Error(`Repeated page id while fetching OpenHands models: ${a.next_page_id}`);n.add(a.next_page_id);let o=await u(e,a.next_page_id,n,i+1);return[...a.items,...o]}var d=()=>{let{backend:e,orgId:r}=n.useActiveBackend(),i=[e.id,e.connectionRevision??0,r];return t.useQuery({queryKey:[`config`,`models`,s,`flags`,...i],queryFn:async({client:e})=>u(await e.fetchQuery({queryKey:[...a.VERIFIED_MODELS_QUERY_KEY,...i],queryFn:a.fetchVerifiedModelsByProvider,staleTime:a.VERIFIED_MODELS_STALE_TIME}),null,new Set,0),staleTime:a.VERIFIED_MODELS_STALE_TIME,gcTime:a.VERIFIED_MODELS_GC_TIME})},f=()=>{let{backend:e,orgId:t}=n.useActiveBackend(),{data:r,isError:a}=d(),c=i.useFreeModelsStore(e=>e.setFlags),l=i.useFreeModelsStore(e=>e.markDefaultModelReady),u=i.useFreeModelsStore(e=>e.resetFlags);o.default.useEffect(()=>{u()},[e.id,e.connectionRevision,t,u]),o.default.useEffect(()=>{if(!r)return;let e=new Set(r.filter(e=>e.free).map(e=>`${s}/${e.name}`)),t=r.find(e=>e.default);c({freeModels:e,defaultModel:t?`${s}/${t.name}`:null})},[r,c]),o.default.useEffect(()=>{a&&l()},[a,l])},p=()=>i.useFreeModelsStore(e=>e.freeModels),m=()=>i.useFreeModelsStore(e=>e.defaultModel);exports.useDefaultModel=m,exports.useFreeModels=p,exports.useHydrateFreeModels=f;
2
+ //# sourceMappingURL=use-free-models.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-free-models.cjs","names":[],"sources":["../../../src/hooks/query/use-free-models.ts"],"sourcesContent":["import React from \"react\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport ConfigService from \"#/api/config-service/config-service.api\";\nimport type { LLMModel } from \"#/api/config-service/config-service.types\";\nimport type { FreeModelSet } from \"#/utils/format-model-name\";\nimport { useFreeModelsStore } from \"#/stores/free-models-store\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport {\n VERIFIED_MODELS_GC_TIME,\n VERIFIED_MODELS_QUERY_KEY,\n VERIFIED_MODELS_STALE_TIME,\n fetchVerifiedModelsByProvider,\n} from \"./use-verified-models\";\n\n/**\n * Provider whose models carry free / default metadata. Both are\n * OpenHands-managed concepts, so they are scoped to the `openhands` provider.\n */\nconst OPENHANDS_PROVIDER = \"openhands\";\nconst CLOUD_MODEL_SEARCH_PAGE_LIMIT = 100;\nconst MAX_PAGINATION_DEPTH = 10;\n\nasync function fetchAllOpenHandsModels(\n verifiedByProvider: Record<string, string[]>,\n pageId: string | null | undefined,\n seenPageIds: Set<string>,\n depth: number,\n): Promise<LLMModel[]> {\n if (depth >= MAX_PAGINATION_DEPTH) {\n throw new Error(\n `Too many pagination requests while fetching OpenHands models (depth=${depth})`,\n );\n }\n\n const page = await ConfigService.searchModels(\n {\n provider__eq: OPENHANDS_PROVIDER,\n limit: CLOUD_MODEL_SEARCH_PAGE_LIMIT,\n ...(pageId ? { page_id: pageId } : {}),\n },\n verifiedByProvider,\n );\n\n if (!page.next_page_id) {\n return page.items;\n }\n\n if (seenPageIds.has(page.next_page_id)) {\n throw new Error(\n `Repeated page id while fetching OpenHands models: ${page.next_page_id}`,\n );\n }\n seenPageIds.add(page.next_page_id);\n\n const rest = await fetchAllOpenHandsModels(\n verifiedByProvider,\n page.next_page_id,\n seenPageIds,\n depth + 1,\n );\n return [...page.items, ...rest];\n}\n\n/**\n * Fetches the `openhands` provider's models with their DB-driven `free` /\n * `default` flags (the same channel that carries `verified`).\n */\nconst useOpenHandsModels = () => {\n const { backend, orgId } = useActiveBackend();\n const backendScope = [\n backend.id,\n backend.connectionRevision ?? 0,\n orgId,\n ] as const;\n\n return useQuery({\n queryKey: [\n \"config\",\n \"models\",\n OPENHANDS_PROVIDER,\n \"flags\",\n ...backendScope,\n ],\n queryFn: async ({ client }): Promise<LLMModel[]> => {\n const verifiedByProvider = await client.fetchQuery({\n queryKey: [...VERIFIED_MODELS_QUERY_KEY, ...backendScope],\n queryFn: fetchVerifiedModelsByProvider,\n staleTime: VERIFIED_MODELS_STALE_TIME,\n });\n return fetchAllOpenHandsModels(verifiedByProvider, null, new Set(), 0);\n },\n staleTime: VERIFIED_MODELS_STALE_TIME,\n gcTime: VERIFIED_MODELS_GC_TIME,\n });\n};\n\n/**\n * Fetches the DB-driven free / default flags once and mirrors them into the\n * {@link useFreeModelsStore}. Mount this high in the tree (inside the query\n * provider). Leaf display components then read the flags synchronously via the\n * {@link useFreeModels} / {@link useDefaultModel} zustand selectors, so they\n * stay renderable in isolation without a QueryClientProvider in scope.\n */\nexport const useHydrateFreeModels = (): void => {\n const { backend, orgId } = useActiveBackend();\n const { data, isError } = useOpenHandsModels();\n const setFlags = useFreeModelsStore((state) => state.setFlags);\n const markDefaultModelReady = useFreeModelsStore(\n (state) => state.markDefaultModelReady,\n );\n const resetFlags = useFreeModelsStore((state) => state.resetFlags);\n\n React.useEffect(() => {\n resetFlags();\n }, [backend.id, backend.connectionRevision, orgId, resetFlags]);\n\n React.useEffect(() => {\n if (!data) return;\n const freeModels = new Set(\n data\n .filter((model) => model.free)\n .map((model) => `${OPENHANDS_PROVIDER}/${model.name}`),\n );\n const defaultEntry = data.find((model) => model.default);\n setFlags({\n freeModels,\n defaultModel: defaultEntry\n ? `${OPENHANDS_PROVIDER}/${defaultEntry.name}`\n : null,\n });\n }, [data, setFlags]);\n\n React.useEffect(() => {\n if (isError) markDefaultModelReady();\n }, [isError, markDefaultModelReady]);\n};\n\n/**\n * Set of free ``openhands/<model>`` ids, sourced from the backend model list\n * (DB-driven on cloud via the `free` flag). Returns an empty set on backends\n * without free metadata (e.g. the local agent-server), so callers uniformly\n * treat \"not in set\" as paid and the frontend keeps no hardcoded free list.\n */\nexport const useFreeModels = (): FreeModelSet =>\n useFreeModelsStore((state) => state.freeModels);\n\n/**\n * DB-driven default OpenHands model id (``openhands/<model>``), used to\n * preselect a model on onboarding and when creating a new OpenHands model.\n * Returns `null` on backends without default metadata.\n */\nexport const useDefaultModel = (): string | null =>\n useFreeModelsStore((state) => state.defaultModel);\n\nexport const useDefaultModelReady = (): boolean =>\n useFreeModelsStore((state) => state.defaultModelReady);\n"],"mappings":"2XAkBA,IAAM,EAAqB,YACrB,EAAgC,IAChC,EAAuB,GAE7B,eAAe,EACb,EACA,EACA,EACA,EACqB,CACrB,GAAI,GAAS,EACX,MAAU,MACR,uEAAuE,EAAM,EAC/E,EAGF,IAAM,EAAO,MAAM,EAAA,QAAc,aAC/B,CACE,aAAc,EACd,MAAO,EACP,GAAI,EAAS,CAAE,QAAS,CAAO,EAAI,CAAC,CACtC,EACA,CACF,EAEA,GAAI,CAAC,EAAK,aACR,OAAO,EAAK,MAGd,GAAI,EAAY,IAAI,EAAK,YAAY,EACnC,MAAU,MACR,qDAAqD,EAAK,cAC5D,EAEF,EAAY,IAAI,EAAK,YAAY,EAEjC,IAAM,EAAO,MAAM,EACjB,EACA,EAAK,aACL,EACA,EAAQ,CACV,EACA,MAAO,CAAC,GAAG,EAAK,MAAO,GAAG,CAAI,CAChC,CAMA,IAAM,MAA2B,CAC/B,GAAM,CAAE,UAAS,SAAU,EAAA,iBAAiB,EACtC,EAAe,CACnB,EAAQ,GACR,EAAQ,oBAAsB,EAC9B,CACF,EAEA,OAAO,EAAA,SAAS,CACd,SAAU,CACR,SACA,SACA,EACA,QACA,GAAG,CACL,EACA,QAAS,MAAO,CAAE,YAMT,EAAwB,MALE,EAAO,WAAW,CACjD,SAAU,CAAC,GAAG,EAAA,0BAA2B,GAAG,CAAY,EACxD,QAAS,EAAA,8BACT,UAAW,EAAA,0BACb,CAAC,EACkD,KAAM,IAAI,IAAO,CAAC,EAEvE,UAAW,EAAA,2BACX,OAAQ,EAAA,uBACV,CAAC,CACH,EASa,MAAmC,CAC9C,GAAM,CAAE,UAAS,SAAU,EAAA,iBAAiB,EACtC,CAAE,OAAM,WAAY,EAAmB,EACvC,EAAW,EAAA,mBAAoB,GAAU,EAAM,QAAQ,EACvD,EAAwB,EAAA,mBAC3B,GAAU,EAAM,qBACnB,EACM,EAAa,EAAA,mBAAoB,GAAU,EAAM,UAAU,EAEjE,EAAA,QAAM,cAAgB,CACpB,EAAW,CACb,EAAG,CAAC,EAAQ,GAAI,EAAQ,mBAAoB,EAAO,CAAU,CAAC,EAE9D,EAAA,QAAM,cAAgB,CACpB,GAAI,CAAC,EAAM,OACX,IAAM,EAAa,IAAI,IACrB,EACG,OAAQ,GAAU,EAAM,IAAI,EAC5B,IAAK,GAAU,GAAG,EAAmB,GAAG,EAAM,MAAM,CACzD,EACM,EAAe,EAAK,KAAM,GAAU,EAAM,OAAO,EACvD,EAAS,CACP,aACA,aAAc,EACV,GAAG,EAAmB,GAAG,EAAa,OACtC,IACN,CAAC,CACH,EAAG,CAAC,EAAM,CAAQ,CAAC,EAEnB,EAAA,QAAM,cAAgB,CAChB,GAAS,EAAsB,CACrC,EAAG,CAAC,EAAS,CAAqB,CAAC,CACrC,EAQa,MACX,EAAA,mBAAoB,GAAU,EAAM,UAAU,EAOnC,MACX,EAAA,mBAAoB,GAAU,EAAM,YAAY"}
@@ -0,0 +1,23 @@
1
+ import type { FreeModelSet } from "#/utils/format-model-name";
2
+ /**
3
+ * Fetches the DB-driven free / default flags once and mirrors them into the
4
+ * {@link useFreeModelsStore}. Mount this high in the tree (inside the query
5
+ * provider). Leaf display components then read the flags synchronously via the
6
+ * {@link useFreeModels} / {@link useDefaultModel} zustand selectors, so they
7
+ * stay renderable in isolation without a QueryClientProvider in scope.
8
+ */
9
+ export declare const useHydrateFreeModels: () => void;
10
+ /**
11
+ * Set of free ``openhands/<model>`` ids, sourced from the backend model list
12
+ * (DB-driven on cloud via the `free` flag). Returns an empty set on backends
13
+ * without free metadata (e.g. the local agent-server), so callers uniformly
14
+ * treat "not in set" as paid and the frontend keeps no hardcoded free list.
15
+ */
16
+ export declare const useFreeModels: () => FreeModelSet;
17
+ /**
18
+ * DB-driven default OpenHands model id (``openhands/<model>``), used to
19
+ * preselect a model on onboarding and when creating a new OpenHands model.
20
+ * Returns `null` on backends without default metadata.
21
+ */
22
+ export declare const useDefaultModel: () => string | null;
23
+ export declare const useDefaultModelReady: () => boolean;
@@ -0,0 +1,67 @@
1
+ import { useQuery as e } from "../../node_modules/@tanstack/react-query/build/modern/useQuery.js";
2
+ import { useActiveBackend as t } from "../../contexts/active-backend-context.js";
3
+ import n from "../../api/config-service/config-service.api.js";
4
+ import { useFreeModelsStore as r } from "../../stores/free-models-store.js";
5
+ import { VERIFIED_MODELS_GC_TIME as i, VERIFIED_MODELS_QUERY_KEY as a, VERIFIED_MODELS_STALE_TIME as o, fetchVerifiedModelsByProvider as s } from "./use-verified-models.js";
6
+ import c from "react";
7
+ //#region src/hooks/query/use-free-models.ts
8
+ var l = "openhands", u = 100, d = 10;
9
+ async function f(e, t, r, i) {
10
+ if (i >= d) throw Error(`Too many pagination requests while fetching OpenHands models (depth=${i})`);
11
+ let a = await n.searchModels({
12
+ provider__eq: l,
13
+ limit: u,
14
+ ...t ? { page_id: t } : {}
15
+ }, e);
16
+ if (!a.next_page_id) return a.items;
17
+ if (r.has(a.next_page_id)) throw Error(`Repeated page id while fetching OpenHands models: ${a.next_page_id}`);
18
+ r.add(a.next_page_id);
19
+ let o = await f(e, a.next_page_id, r, i + 1);
20
+ return [...a.items, ...o];
21
+ }
22
+ var p = () => {
23
+ let { backend: n, orgId: r } = t(), c = [
24
+ n.id,
25
+ n.connectionRevision ?? 0,
26
+ r
27
+ ];
28
+ return e({
29
+ queryKey: [
30
+ "config",
31
+ "models",
32
+ l,
33
+ "flags",
34
+ ...c
35
+ ],
36
+ queryFn: async ({ client: e }) => f(await e.fetchQuery({
37
+ queryKey: [...a, ...c],
38
+ queryFn: s,
39
+ staleTime: o
40
+ }), null, /* @__PURE__ */ new Set(), 0),
41
+ staleTime: o,
42
+ gcTime: i
43
+ });
44
+ }, m = () => {
45
+ let { backend: e, orgId: n } = t(), { data: i, isError: a } = p(), o = r((e) => e.setFlags), s = r((e) => e.markDefaultModelReady), u = r((e) => e.resetFlags);
46
+ c.useEffect(() => {
47
+ u();
48
+ }, [
49
+ e.id,
50
+ e.connectionRevision,
51
+ n,
52
+ u
53
+ ]), c.useEffect(() => {
54
+ if (!i) return;
55
+ let e = new Set(i.filter((e) => e.free).map((e) => `${l}/${e.name}`)), t = i.find((e) => e.default);
56
+ o({
57
+ freeModels: e,
58
+ defaultModel: t ? `${l}/${t.name}` : null
59
+ });
60
+ }, [i, o]), c.useEffect(() => {
61
+ a && s();
62
+ }, [a, s]);
63
+ }, h = () => r((e) => e.freeModels), g = () => r((e) => e.defaultModel);
64
+ //#endregion
65
+ export { g as useDefaultModel, h as useFreeModels, m as useHydrateFreeModels };
66
+
67
+ //# sourceMappingURL=use-free-models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-free-models.js","names":[],"sources":["../../../src/hooks/query/use-free-models.ts"],"sourcesContent":["import React from \"react\";\nimport { useQuery } from \"@tanstack/react-query\";\nimport ConfigService from \"#/api/config-service/config-service.api\";\nimport type { LLMModel } from \"#/api/config-service/config-service.types\";\nimport type { FreeModelSet } from \"#/utils/format-model-name\";\nimport { useFreeModelsStore } from \"#/stores/free-models-store\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport {\n VERIFIED_MODELS_GC_TIME,\n VERIFIED_MODELS_QUERY_KEY,\n VERIFIED_MODELS_STALE_TIME,\n fetchVerifiedModelsByProvider,\n} from \"./use-verified-models\";\n\n/**\n * Provider whose models carry free / default metadata. Both are\n * OpenHands-managed concepts, so they are scoped to the `openhands` provider.\n */\nconst OPENHANDS_PROVIDER = \"openhands\";\nconst CLOUD_MODEL_SEARCH_PAGE_LIMIT = 100;\nconst MAX_PAGINATION_DEPTH = 10;\n\nasync function fetchAllOpenHandsModels(\n verifiedByProvider: Record<string, string[]>,\n pageId: string | null | undefined,\n seenPageIds: Set<string>,\n depth: number,\n): Promise<LLMModel[]> {\n if (depth >= MAX_PAGINATION_DEPTH) {\n throw new Error(\n `Too many pagination requests while fetching OpenHands models (depth=${depth})`,\n );\n }\n\n const page = await ConfigService.searchModels(\n {\n provider__eq: OPENHANDS_PROVIDER,\n limit: CLOUD_MODEL_SEARCH_PAGE_LIMIT,\n ...(pageId ? { page_id: pageId } : {}),\n },\n verifiedByProvider,\n );\n\n if (!page.next_page_id) {\n return page.items;\n }\n\n if (seenPageIds.has(page.next_page_id)) {\n throw new Error(\n `Repeated page id while fetching OpenHands models: ${page.next_page_id}`,\n );\n }\n seenPageIds.add(page.next_page_id);\n\n const rest = await fetchAllOpenHandsModels(\n verifiedByProvider,\n page.next_page_id,\n seenPageIds,\n depth + 1,\n );\n return [...page.items, ...rest];\n}\n\n/**\n * Fetches the `openhands` provider's models with their DB-driven `free` /\n * `default` flags (the same channel that carries `verified`).\n */\nconst useOpenHandsModels = () => {\n const { backend, orgId } = useActiveBackend();\n const backendScope = [\n backend.id,\n backend.connectionRevision ?? 0,\n orgId,\n ] as const;\n\n return useQuery({\n queryKey: [\n \"config\",\n \"models\",\n OPENHANDS_PROVIDER,\n \"flags\",\n ...backendScope,\n ],\n queryFn: async ({ client }): Promise<LLMModel[]> => {\n const verifiedByProvider = await client.fetchQuery({\n queryKey: [...VERIFIED_MODELS_QUERY_KEY, ...backendScope],\n queryFn: fetchVerifiedModelsByProvider,\n staleTime: VERIFIED_MODELS_STALE_TIME,\n });\n return fetchAllOpenHandsModels(verifiedByProvider, null, new Set(), 0);\n },\n staleTime: VERIFIED_MODELS_STALE_TIME,\n gcTime: VERIFIED_MODELS_GC_TIME,\n });\n};\n\n/**\n * Fetches the DB-driven free / default flags once and mirrors them into the\n * {@link useFreeModelsStore}. Mount this high in the tree (inside the query\n * provider). Leaf display components then read the flags synchronously via the\n * {@link useFreeModels} / {@link useDefaultModel} zustand selectors, so they\n * stay renderable in isolation without a QueryClientProvider in scope.\n */\nexport const useHydrateFreeModels = (): void => {\n const { backend, orgId } = useActiveBackend();\n const { data, isError } = useOpenHandsModels();\n const setFlags = useFreeModelsStore((state) => state.setFlags);\n const markDefaultModelReady = useFreeModelsStore(\n (state) => state.markDefaultModelReady,\n );\n const resetFlags = useFreeModelsStore((state) => state.resetFlags);\n\n React.useEffect(() => {\n resetFlags();\n }, [backend.id, backend.connectionRevision, orgId, resetFlags]);\n\n React.useEffect(() => {\n if (!data) return;\n const freeModels = new Set(\n data\n .filter((model) => model.free)\n .map((model) => `${OPENHANDS_PROVIDER}/${model.name}`),\n );\n const defaultEntry = data.find((model) => model.default);\n setFlags({\n freeModels,\n defaultModel: defaultEntry\n ? `${OPENHANDS_PROVIDER}/${defaultEntry.name}`\n : null,\n });\n }, [data, setFlags]);\n\n React.useEffect(() => {\n if (isError) markDefaultModelReady();\n }, [isError, markDefaultModelReady]);\n};\n\n/**\n * Set of free ``openhands/<model>`` ids, sourced from the backend model list\n * (DB-driven on cloud via the `free` flag). Returns an empty set on backends\n * without free metadata (e.g. the local agent-server), so callers uniformly\n * treat \"not in set\" as paid and the frontend keeps no hardcoded free list.\n */\nexport const useFreeModels = (): FreeModelSet =>\n useFreeModelsStore((state) => state.freeModels);\n\n/**\n * DB-driven default OpenHands model id (``openhands/<model>``), used to\n * preselect a model on onboarding and when creating a new OpenHands model.\n * Returns `null` on backends without default metadata.\n */\nexport const useDefaultModel = (): string | null =>\n useFreeModelsStore((state) => state.defaultModel);\n\nexport const useDefaultModelReady = (): boolean =>\n useFreeModelsStore((state) => state.defaultModelReady);\n"],"mappings":";;;;;;;AAkBA,IAAM,IAAqB,aACrB,IAAgC,KAChC,IAAuB;AAE7B,eAAe,EACb,GACA,GACA,GACA,GACqB;CACrB,IAAI,KAAS,GACX,MAAU,MACR,uEAAuE,EAAM,EAC/E;CAGF,IAAM,IAAO,MAAM,EAAc,aAC/B;EACE,cAAc;EACd,OAAO;EACP,GAAI,IAAS,EAAE,SAAS,EAAO,IAAI,CAAC;CACtC,GACA,CACF;CAEA,IAAI,CAAC,EAAK,cACR,OAAO,EAAK;CAGd,IAAI,EAAY,IAAI,EAAK,YAAY,GACnC,MAAU,MACR,qDAAqD,EAAK,cAC5D;CAEF,EAAY,IAAI,EAAK,YAAY;CAEjC,IAAM,IAAO,MAAM,EACjB,GACA,EAAK,cACL,GACA,IAAQ,CACV;CACA,OAAO,CAAC,GAAG,EAAK,OAAO,GAAG,CAAI;AAChC;AAMA,IAAM,UAA2B;CAC/B,IAAM,EAAE,YAAS,aAAU,EAAiB,GACtC,IAAe;EACnB,EAAQ;EACR,EAAQ,sBAAsB;EAC9B;CACF;CAEA,OAAO,EAAS;EACd,UAAU;GACR;GACA;GACA;GACA;GACA,GAAG;EACL;EACA,SAAS,OAAO,EAAE,gBAMT,EAAwB,MALE,EAAO,WAAW;GACjD,UAAU,CAAC,GAAG,GAA2B,GAAG,CAAY;GACxD,SAAS;GACT,WAAW;EACb,CAAC,GACkD,sBAAM,IAAI,IAAI,GAAG,CAAC;EAEvE,WAAW;EACX,QAAQ;CACV,CAAC;AACH,GASa,UAAmC;CAC9C,IAAM,EAAE,YAAS,aAAU,EAAiB,GACtC,EAAE,SAAM,eAAY,EAAmB,GACvC,IAAW,GAAoB,MAAU,EAAM,QAAQ,GACvD,IAAwB,GAC3B,MAAU,EAAM,qBACnB,GACM,IAAa,GAAoB,MAAU,EAAM,UAAU;CAsBjE,AApBA,EAAM,gBAAgB;EACpB,EAAW;CACb,GAAG;EAAC,EAAQ;EAAI,EAAQ;EAAoB;EAAO;CAAU,CAAC,GAE9D,EAAM,gBAAgB;EACpB,IAAI,CAAC,GAAM;EACX,IAAM,IAAa,IAAI,IACrB,EACG,QAAQ,MAAU,EAAM,IAAI,EAC5B,KAAK,MAAU,GAAG,EAAmB,GAAG,EAAM,MAAM,CACzD,GACM,IAAe,EAAK,MAAM,MAAU,EAAM,OAAO;EACvD,EAAS;GACP;GACA,cAAc,IACV,GAAG,EAAmB,GAAG,EAAa,SACtC;EACN,CAAC;CACH,GAAG,CAAC,GAAM,CAAQ,CAAC,GAEnB,EAAM,gBAAgB;EACpB,AAAI,KAAS,EAAsB;CACrC,GAAG,CAAC,GAAS,CAAqB,CAAC;AACrC,GAQa,UACX,GAAoB,MAAU,EAAM,UAAU,GAOnC,UACX,GAAoB,MAAU,EAAM,YAAY"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-local-git-info.cjs","names":[],"sources":["../../../src/hooks/query/use-local-git-info.ts"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport { useRef } from \"react\";\n\nimport type { CommandResult } from \"#/api/runtime-service/agent-server-runtime-service\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport { useActiveConversation } from \"#/hooks/query/use-active-conversation\";\nimport { useRuntimeIsReady } from \"#/hooks/use-runtime-is-ready\";\nimport { useBashCommandRunner } from \"#/hooks/use-bash-command-runner\";\nimport { Provider } from \"#/types/settings\";\nimport { parseGitRemoteUrl } from \"#/utils/parse-git-remote-url\";\n\nexport interface LocalGitInfo {\n repository: string | null;\n branch: string | null;\n provider: Provider | null;\n remoteUrl: string | null;\n}\n\nconst EMPTY_LOCAL_GIT_INFO: LocalGitInfo = {\n repository: null,\n branch: null,\n provider: null,\n remoteUrl: null,\n};\n\ntype RunCommand = (\n command: string,\n cwd: string,\n timeout: number,\n) => Promise<CommandResult>;\n\n// Single shell script that replaces the former probeGitInfoAtDir +\n// probeNestedRepoInDir pair. It runs as one bash WebSocket round-trip:\n// 1. Read the origin remote URL and current branch at the workspace root.\n// 2. If neither is set, search for exactly one nested git repo up to 4\n// levels deep and repeat the probe there.\n// Output: two lines — <remote-url>\\n<branch> — either may be empty.\nconst GIT_INFO_COMMAND = [\n \"r=$(git remote get-url origin 2>/dev/null)\",\n \"b=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)\",\n 'if [ -z \"$r$b\" ]; then',\n \"n=$(find . -mindepth 2 -maxdepth 4 -name .git 2>/dev/null | cut -c3- | sed 's|/.git$||' | sort -u)\",\n \"c=$(printf '%s\\\\n' \\\"$n\\\" | grep -c '[^[:space:]]')\",\n 'if [ \"$c\" = \"1\" ] && [ -n \"$n\" ]; then',\n 'r=$(git -C \"$n\" remote get-url origin 2>/dev/null)',\n 'b=$(git -C \"$n\" rev-parse --abbrev-ref HEAD 2>/dev/null)',\n \"fi\",\n \"fi\",\n 'printf \\'%s\\\\n%s\\' \"$r\" \"$b\"',\n].join(\"\\n\");\n\nasync function probeGitInfo(\n run: RunCommand,\n directory: string,\n): Promise<LocalGitInfo> {\n const result = await run(GIT_INFO_COMMAND, directory, 10);\n if (result.exit_code !== 0) return EMPTY_LOCAL_GIT_INFO;\n\n const nl = result.stdout.indexOf(\"\\n\");\n const remoteUrl = (\n nl >= 0 ? result.stdout.slice(0, nl) : result.stdout\n ).trim();\n const rawBranch = (nl >= 0 ? result.stdout.slice(nl + 1) : \"\").trim();\n const branch = rawBranch && rawBranch !== \"HEAD\" ? rawBranch : null;\n\n if (!remoteUrl && !branch) return EMPTY_LOCAL_GIT_INFO;\n\n const parsedRemote = parseGitRemoteUrl(remoteUrl);\n return {\n repository: parsedRemote?.repository ?? null,\n provider: parsedRemote?.provider ?? null,\n remoteUrl: remoteUrl || null,\n branch,\n };\n}\n\n/**\n * Probe git metadata for a **local** backend's workspace checkout by\n * shelling out via the agent server using a single consolidated bash\n * script (see `GIT_INFO_COMMAND`).\n *\n * Local-only by design. On cloud backends the conversation metadata\n * (`selected_repository`, `git_provider`, `selected_branch`) is the\n * source of truth, and probing via `/api/bash/execute_bash_command`\n * would (a) leak the user's local `getAgentServerWorkingDir()` path to\n * the cloud runtime when `workspace.working_dir` is missing, and\n * (b) hit a bash endpoint we don't want the frontend driving on cloud.\n *\n * On local, we keep the probe enabled until the active conversation\n * has a complete repo tuple so the control bar can recover from\n * partial metadata hydration after connect/clone flows.\n *\n * Returns `null` fields when the working dir is not a git checkout —\n * callers should treat that the same as \"no repo detected\".\n */\nexport const useLocalGitInfo = () => {\n const { data: conversation } = useActiveConversation();\n const runtimeIsReady = useRuntimeIsReady();\n const { backend } = useActiveBackend();\n const isLocalBackend = backend.kind === \"local\";\n\n const conversationId = conversation?.id;\n const conversationUrl = conversation?.conversation_url;\n const sessionApiKey = conversation?.session_api_key;\n const workingDir = conversation?.workspace?.working_dir?.trim();\n const hasConversationRepo = !!conversation?.selected_repository;\n const hasConversationProvider = !!conversation?.git_provider;\n const hasConversationBranch = !!conversation?.selected_branch;\n\n const queryEnabled =\n isLocalBackend &&\n runtimeIsReady &&\n !!conversationId &&\n !!workingDir &&\n (!hasConversationRepo ||\n !hasConversationProvider ||\n !hasConversationBranch);\n\n // Persistent WebSocket connection to the bash-events endpoint. The\n // connection is opened when the query is enabled and closed on unmount or\n // when the conversation changes.\n const runCommand = useBashCommandRunner(\n conversationUrl,\n sessionApiKey,\n queryEnabled,\n );\n\n // Keep a ref so queryFn can call the latest runner without capturing it\n // as a queryKey dependency (runCommand is stable but the linter can't\n // infer that).\n const runCommandRef = useRef(runCommand);\n runCommandRef.current = runCommand;\n\n // runCommandRef is a ref (always stable); the linter cannot infer this so\n // we disable the exhaustive-deps check here.\n // eslint-disable-next-line @tanstack/query/exhaustive-deps\n return useQuery<LocalGitInfo>({\n queryKey: [\n \"local-git-info\",\n conversationId,\n conversationUrl,\n sessionApiKey,\n workingDir,\n ],\n queryFn: async () => {\n const run: RunCommand = (command, cwd, timeout) =>\n runCommandRef.current(command, cwd, timeout);\n // workingDir is guaranteed non-empty by the queryEnabled guard above.\n return probeGitInfo(run, workingDir!);\n },\n enabled: queryEnabled,\n retry: false,\n // Re-probe the workspace every 10s so the UI reflects branch/repo\n // changes (e.g. `git checkout`, adding a remote) without requiring a\n // manual refresh when there is no `selected_repository` recorded on\n // the conversation. Commands now run over the persistent WebSocket\n // connection rather than individual REST calls.\n staleTime: 10_000,\n refetchInterval: 10_000,\n gcTime: 1000 * 60 * 5,\n meta: { disableToast: true },\n });\n};\n"],"mappings":"sYAkBA,IAAM,EAAqC,CACzC,WAAY,KACZ,OAAQ,KACR,SAAU,KACV,UAAW,IACb,EAcM,EAAmB,CACvB,6CACA,mDACA,yBACA,qGACA,oDACA,yCACA,qDACA,2DACA,KACA,KACA,4BACF,EAAE,KAAK;CAAI,EAEX,eAAe,EACb,EACA,EACuB,CACvB,IAAM,EAAS,MAAM,EAAI,EAAkB,EAAW,EAAE,EACxD,GAAI,EAAO,YAAc,EAAG,OAAO,EAEnC,IAAM,EAAK,EAAO,OAAO,QAAQ;CAAI,EAC/B,GACJ,GAAM,EAAI,EAAO,OAAO,MAAM,EAAG,CAAE,EAAI,EAAO,QAC9C,KAAK,EACD,GAAa,GAAM,EAAI,EAAO,OAAO,MAAM,EAAK,CAAC,EAAI,IAAI,KAAK,EAC9D,EAAS,GAAa,IAAc,OAAS,EAAY,KAE/D,GAAI,CAAC,GAAa,CAAC,EAAQ,OAAO,EAElC,IAAM,EAAe,EAAA,kBAAkB,CAAS,EAChD,MAAO,CACL,WAAY,GAAc,YAAc,KACxC,SAAU,GAAc,UAAY,KACpC,UAAW,GAAa,KACxB,QACF,CACF,CAqBA,IAAa,MAAwB,CACnC,GAAM,CAAE,KAAM,GAAiB,EAAA,sBAAsB,EAC/C,EAAiB,EAAA,kBAAkB,EACnC,CAAE,WAAY,EAAA,iBAAiB,EAC/B,EAAiB,EAAQ,OAAS,QAElC,EAAiB,GAAc,GAC/B,EAAkB,GAAc,iBAChC,EAAgB,GAAc,gBAC9B,EAAa,GAAc,WAAW,aAAa,KAAK,EACxD,EAAsB,CAAC,CAAC,GAAc,oBACtC,EAA0B,CAAC,CAAC,GAAc,aAC1C,EAAwB,CAAC,CAAC,GAAc,gBAExC,EACJ,GACA,GACA,CAAC,CAAC,GACF,CAAC,CAAC,IACD,CAAC,GACA,CAAC,GACD,CAAC,GAKC,EAAa,EAAA,qBACjB,EACA,EACA,CACF,EAKM,GAAA,EAAA,EAAA,QAAuB,CAAU,EAMvC,MALA,GAAc,QAAU,EAKjB,EAAA,SAAuB,CAC5B,SAAU,CACR,iBACA,EACA,EACA,EACA,CACF,EACA,QAAS,SAIA,GAHkB,EAAS,EAAK,IACrC,EAAc,QAAQ,EAAS,EAAK,CAAO,EAEpB,CAAW,EAEtC,QAAS,EACT,MAAO,GAMP,UAAW,IACX,gBAAiB,IACjB,OAAQ,IAAO,GAAK,EACpB,KAAM,CAAE,aAAc,EAAK,CAC7B,CAAC,CACH"}
1
+ {"version":3,"file":"use-local-git-info.cjs","names":[],"sources":["../../../src/hooks/query/use-local-git-info.ts"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport { useRef } from \"react\";\n\nimport type { CommandResult } from \"#/api/runtime-service/agent-server-runtime-service\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport { useActiveConversation } from \"#/hooks/query/use-active-conversation\";\nimport { useRuntimeIsReady } from \"#/hooks/use-runtime-is-ready\";\nimport { useBashCommandRunner } from \"#/hooks/use-bash-command-runner\";\nimport { Provider } from \"#/types/settings\";\nimport { parseGitRemoteUrl } from \"#/utils/parse-git-remote-url\";\n\nexport interface LocalGitInfo {\n repository: string | null;\n branch: string | null;\n provider: Provider | null;\n remoteUrl: string | null;\n}\n\nconst EMPTY_LOCAL_GIT_INFO: LocalGitInfo = {\n repository: null,\n branch: null,\n provider: null,\n remoteUrl: null,\n};\n\ntype RunCommand = (\n command: string,\n cwd: string,\n timeout: number,\n) => Promise<CommandResult>;\n\n// Single shell script that replaces the former probeGitInfoAtDir +\n// probeNestedRepoInDir pair. It runs as one bash WebSocket round-trip:\n// 1. Read the origin remote URL and current branch at the workspace root.\n// 2. If neither is set, search for exactly one nested git repo up to 4\n// levels deep and repeat the probe there.\n// Output: two lines — <remote-url>\\n<branch> — either may be empty.\nconst GIT_INFO_COMMAND = [\n \"r=$(git remote get-url origin 2>/dev/null)\",\n \"b=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)\",\n 'if [ -z \"$r$b\" ]; then',\n \"n=$(find . -mindepth 2 -maxdepth 4 -name .git 2>/dev/null | cut -c3- | sed 's|/.git$||' | sort -u)\",\n \"c=$(printf '%s\\\\n' \\\"$n\\\" | grep -c '[^[:space:]]')\",\n 'if [ \"$c\" = \"1\" ] && [ -n \"$n\" ]; then',\n 'r=$(git -C \"$n\" remote get-url origin 2>/dev/null)',\n 'b=$(git -C \"$n\" rev-parse --abbrev-ref HEAD 2>/dev/null)',\n \"fi\",\n \"fi\",\n 'printf \\'%s\\\\n%s\\' \"$r\" \"$b\"',\n].join(\"\\n\");\n\nasync function probeGitInfo(\n run: RunCommand,\n directory: string,\n): Promise<LocalGitInfo> {\n const result = await run(GIT_INFO_COMMAND, directory, 10);\n if (result.exit_code !== 0) return EMPTY_LOCAL_GIT_INFO;\n\n const nl = result.stdout.indexOf(\"\\n\");\n const remoteUrl = (\n nl >= 0 ? result.stdout.slice(0, nl) : result.stdout\n ).trim();\n const rawBranch = (nl >= 0 ? result.stdout.slice(nl + 1) : \"\").trim();\n const branch = rawBranch && rawBranch !== \"HEAD\" ? rawBranch : null;\n\n if (!remoteUrl && !branch) return EMPTY_LOCAL_GIT_INFO;\n\n const parsedRemote = parseGitRemoteUrl(remoteUrl);\n return {\n repository: parsedRemote?.repository ?? null,\n provider: parsedRemote?.provider ?? null,\n remoteUrl: remoteUrl || null,\n branch,\n };\n}\n\n/**\n * Probe git metadata for a **local** backend's workspace checkout by\n * shelling out via the agent server using a single consolidated bash\n * script (see `GIT_INFO_COMMAND`).\n *\n * Local-only by design. On cloud backends the conversation metadata\n * (`selected_repository`, `git_provider`, `selected_branch`) is the\n * source of truth, and probing via `/api/bash/execute_bash_command`\n * would (a) leak the user's local `getAgentServerWorkingDir()` path to\n * the cloud runtime when `workspace.working_dir` is missing, and\n * (b) hit a bash endpoint we don't want the frontend driving on cloud.\n *\n * On local, we keep the probe enabled until the active conversation\n * has a complete repo tuple so the control bar can recover from\n * partial metadata hydration after connect/clone flows.\n *\n * Returns `null` fields when the working dir is not a git checkout —\n * callers should treat that the same as \"no repo detected\".\n */\nexport const useLocalGitInfo = () => {\n const { data: conversation } = useActiveConversation();\n const runtimeIsReady = useRuntimeIsReady();\n const { backend } = useActiveBackend();\n const isLocalBackend = backend.kind === \"local\";\n\n const conversationId = conversation?.id;\n const conversationUrl = conversation?.conversation_url;\n const sessionApiKey = conversation?.session_api_key;\n const workingDir = conversation?.workspace?.working_dir?.trim();\n const hasConversationRepo = !!conversation?.selected_repository;\n const hasConversationProvider = !!conversation?.git_provider;\n const hasConversationBranch = !!conversation?.selected_branch;\n\n const queryEnabled =\n isLocalBackend &&\n runtimeIsReady &&\n !!conversationId &&\n !!workingDir &&\n (!hasConversationRepo ||\n !hasConversationProvider ||\n !hasConversationBranch);\n\n // Persistent WebSocket connection to the bash-events endpoint. The\n // connection is opened when the query is enabled and closed on unmount or\n // when the conversation changes.\n const runCommand = useBashCommandRunner(\n conversationUrl,\n sessionApiKey,\n queryEnabled,\n );\n\n // Keep a ref so queryFn can call the latest runner without capturing it\n // as a queryKey dependency (runCommand is stable but the linter can't\n // infer that).\n const runCommandRef = useRef(runCommand);\n runCommandRef.current = runCommand;\n\n // runCommandRef is a ref (always stable); the linter cannot infer this so\n // we disable the exhaustive-deps check here.\n\n return useQuery<LocalGitInfo>({\n queryKey: [\n \"local-git-info\",\n conversationId,\n conversationUrl,\n sessionApiKey,\n workingDir,\n ],\n queryFn: async () => {\n const run: RunCommand = (command, cwd, timeout) =>\n runCommandRef.current(command, cwd, timeout);\n // workingDir is guaranteed non-empty by the queryEnabled guard above.\n return probeGitInfo(run, workingDir!);\n },\n enabled: queryEnabled,\n retry: false,\n // Re-probe the workspace every 10s so the UI reflects branch/repo\n // changes (e.g. `git checkout`, adding a remote) without requiring a\n // manual refresh when there is no `selected_repository` recorded on\n // the conversation. Commands now run over the persistent WebSocket\n // connection rather than individual REST calls.\n staleTime: 10_000,\n refetchInterval: 10_000,\n gcTime: 1000 * 60 * 5,\n meta: { disableToast: true },\n });\n};\n"],"mappings":"sYAkBA,IAAM,EAAqC,CACzC,WAAY,KACZ,OAAQ,KACR,SAAU,KACV,UAAW,IACb,EAcM,EAAmB,CACvB,6CACA,mDACA,yBACA,qGACA,oDACA,yCACA,qDACA,2DACA,KACA,KACA,4BACF,EAAE,KAAK;CAAI,EAEX,eAAe,EACb,EACA,EACuB,CACvB,IAAM,EAAS,MAAM,EAAI,EAAkB,EAAW,EAAE,EACxD,GAAI,EAAO,YAAc,EAAG,OAAO,EAEnC,IAAM,EAAK,EAAO,OAAO,QAAQ;CAAI,EAC/B,GACJ,GAAM,EAAI,EAAO,OAAO,MAAM,EAAG,CAAE,EAAI,EAAO,QAC9C,KAAK,EACD,GAAa,GAAM,EAAI,EAAO,OAAO,MAAM,EAAK,CAAC,EAAI,IAAI,KAAK,EAC9D,EAAS,GAAa,IAAc,OAAS,EAAY,KAE/D,GAAI,CAAC,GAAa,CAAC,EAAQ,OAAO,EAElC,IAAM,EAAe,EAAA,kBAAkB,CAAS,EAChD,MAAO,CACL,WAAY,GAAc,YAAc,KACxC,SAAU,GAAc,UAAY,KACpC,UAAW,GAAa,KACxB,QACF,CACF,CAqBA,IAAa,MAAwB,CACnC,GAAM,CAAE,KAAM,GAAiB,EAAA,sBAAsB,EAC/C,EAAiB,EAAA,kBAAkB,EACnC,CAAE,WAAY,EAAA,iBAAiB,EAC/B,EAAiB,EAAQ,OAAS,QAElC,EAAiB,GAAc,GAC/B,EAAkB,GAAc,iBAChC,EAAgB,GAAc,gBAC9B,EAAa,GAAc,WAAW,aAAa,KAAK,EACxD,EAAsB,CAAC,CAAC,GAAc,oBACtC,EAA0B,CAAC,CAAC,GAAc,aAC1C,EAAwB,CAAC,CAAC,GAAc,gBAExC,EACJ,GACA,GACA,CAAC,CAAC,GACF,CAAC,CAAC,IACD,CAAC,GACA,CAAC,GACD,CAAC,GAKC,EAAa,EAAA,qBACjB,EACA,EACA,CACF,EAKM,GAAA,EAAA,EAAA,QAAuB,CAAU,EAMvC,MALA,GAAc,QAAU,EAKjB,EAAA,SAAuB,CAC5B,SAAU,CACR,iBACA,EACA,EACA,EACA,CACF,EACA,QAAS,SAIA,GAHkB,EAAS,EAAK,IACrC,EAAc,QAAQ,EAAS,EAAK,CAAO,EAEpB,CAAW,EAEtC,QAAS,EACT,MAAO,GAMP,UAAW,IACX,gBAAiB,IACjB,OAAQ,IAAO,GAAK,EACpB,KAAM,CAAE,aAAc,EAAK,CAC7B,CAAC,CACH"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-local-git-info.js","names":[],"sources":["../../../src/hooks/query/use-local-git-info.ts"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport { useRef } from \"react\";\n\nimport type { CommandResult } from \"#/api/runtime-service/agent-server-runtime-service\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport { useActiveConversation } from \"#/hooks/query/use-active-conversation\";\nimport { useRuntimeIsReady } from \"#/hooks/use-runtime-is-ready\";\nimport { useBashCommandRunner } from \"#/hooks/use-bash-command-runner\";\nimport { Provider } from \"#/types/settings\";\nimport { parseGitRemoteUrl } from \"#/utils/parse-git-remote-url\";\n\nexport interface LocalGitInfo {\n repository: string | null;\n branch: string | null;\n provider: Provider | null;\n remoteUrl: string | null;\n}\n\nconst EMPTY_LOCAL_GIT_INFO: LocalGitInfo = {\n repository: null,\n branch: null,\n provider: null,\n remoteUrl: null,\n};\n\ntype RunCommand = (\n command: string,\n cwd: string,\n timeout: number,\n) => Promise<CommandResult>;\n\n// Single shell script that replaces the former probeGitInfoAtDir +\n// probeNestedRepoInDir pair. It runs as one bash WebSocket round-trip:\n// 1. Read the origin remote URL and current branch at the workspace root.\n// 2. If neither is set, search for exactly one nested git repo up to 4\n// levels deep and repeat the probe there.\n// Output: two lines — <remote-url>\\n<branch> — either may be empty.\nconst GIT_INFO_COMMAND = [\n \"r=$(git remote get-url origin 2>/dev/null)\",\n \"b=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)\",\n 'if [ -z \"$r$b\" ]; then',\n \"n=$(find . -mindepth 2 -maxdepth 4 -name .git 2>/dev/null | cut -c3- | sed 's|/.git$||' | sort -u)\",\n \"c=$(printf '%s\\\\n' \\\"$n\\\" | grep -c '[^[:space:]]')\",\n 'if [ \"$c\" = \"1\" ] && [ -n \"$n\" ]; then',\n 'r=$(git -C \"$n\" remote get-url origin 2>/dev/null)',\n 'b=$(git -C \"$n\" rev-parse --abbrev-ref HEAD 2>/dev/null)',\n \"fi\",\n \"fi\",\n 'printf \\'%s\\\\n%s\\' \"$r\" \"$b\"',\n].join(\"\\n\");\n\nasync function probeGitInfo(\n run: RunCommand,\n directory: string,\n): Promise<LocalGitInfo> {\n const result = await run(GIT_INFO_COMMAND, directory, 10);\n if (result.exit_code !== 0) return EMPTY_LOCAL_GIT_INFO;\n\n const nl = result.stdout.indexOf(\"\\n\");\n const remoteUrl = (\n nl >= 0 ? result.stdout.slice(0, nl) : result.stdout\n ).trim();\n const rawBranch = (nl >= 0 ? result.stdout.slice(nl + 1) : \"\").trim();\n const branch = rawBranch && rawBranch !== \"HEAD\" ? rawBranch : null;\n\n if (!remoteUrl && !branch) return EMPTY_LOCAL_GIT_INFO;\n\n const parsedRemote = parseGitRemoteUrl(remoteUrl);\n return {\n repository: parsedRemote?.repository ?? null,\n provider: parsedRemote?.provider ?? null,\n remoteUrl: remoteUrl || null,\n branch,\n };\n}\n\n/**\n * Probe git metadata for a **local** backend's workspace checkout by\n * shelling out via the agent server using a single consolidated bash\n * script (see `GIT_INFO_COMMAND`).\n *\n * Local-only by design. On cloud backends the conversation metadata\n * (`selected_repository`, `git_provider`, `selected_branch`) is the\n * source of truth, and probing via `/api/bash/execute_bash_command`\n * would (a) leak the user's local `getAgentServerWorkingDir()` path to\n * the cloud runtime when `workspace.working_dir` is missing, and\n * (b) hit a bash endpoint we don't want the frontend driving on cloud.\n *\n * On local, we keep the probe enabled until the active conversation\n * has a complete repo tuple so the control bar can recover from\n * partial metadata hydration after connect/clone flows.\n *\n * Returns `null` fields when the working dir is not a git checkout —\n * callers should treat that the same as \"no repo detected\".\n */\nexport const useLocalGitInfo = () => {\n const { data: conversation } = useActiveConversation();\n const runtimeIsReady = useRuntimeIsReady();\n const { backend } = useActiveBackend();\n const isLocalBackend = backend.kind === \"local\";\n\n const conversationId = conversation?.id;\n const conversationUrl = conversation?.conversation_url;\n const sessionApiKey = conversation?.session_api_key;\n const workingDir = conversation?.workspace?.working_dir?.trim();\n const hasConversationRepo = !!conversation?.selected_repository;\n const hasConversationProvider = !!conversation?.git_provider;\n const hasConversationBranch = !!conversation?.selected_branch;\n\n const queryEnabled =\n isLocalBackend &&\n runtimeIsReady &&\n !!conversationId &&\n !!workingDir &&\n (!hasConversationRepo ||\n !hasConversationProvider ||\n !hasConversationBranch);\n\n // Persistent WebSocket connection to the bash-events endpoint. The\n // connection is opened when the query is enabled and closed on unmount or\n // when the conversation changes.\n const runCommand = useBashCommandRunner(\n conversationUrl,\n sessionApiKey,\n queryEnabled,\n );\n\n // Keep a ref so queryFn can call the latest runner without capturing it\n // as a queryKey dependency (runCommand is stable but the linter can't\n // infer that).\n const runCommandRef = useRef(runCommand);\n runCommandRef.current = runCommand;\n\n // runCommandRef is a ref (always stable); the linter cannot infer this so\n // we disable the exhaustive-deps check here.\n // eslint-disable-next-line @tanstack/query/exhaustive-deps\n return useQuery<LocalGitInfo>({\n queryKey: [\n \"local-git-info\",\n conversationId,\n conversationUrl,\n sessionApiKey,\n workingDir,\n ],\n queryFn: async () => {\n const run: RunCommand = (command, cwd, timeout) =>\n runCommandRef.current(command, cwd, timeout);\n // workingDir is guaranteed non-empty by the queryEnabled guard above.\n return probeGitInfo(run, workingDir!);\n },\n enabled: queryEnabled,\n retry: false,\n // Re-probe the workspace every 10s so the UI reflects branch/repo\n // changes (e.g. `git checkout`, adding a remote) without requiring a\n // manual refresh when there is no `selected_repository` recorded on\n // the conversation. Commands now run over the persistent WebSocket\n // connection rather than individual REST calls.\n staleTime: 10_000,\n refetchInterval: 10_000,\n gcTime: 1000 * 60 * 5,\n meta: { disableToast: true },\n });\n};\n"],"mappings":";;;;;;;;AAkBA,IAAM,IAAqC;CACzC,YAAY;CACZ,QAAQ;CACR,UAAU;CACV,WAAW;AACb,GAcM,IAAmB;CACvB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,EAAE,KAAK,IAAI;AAEX,eAAe,EACb,GACA,GACuB;CACvB,IAAM,IAAS,MAAM,EAAI,GAAkB,GAAW,EAAE;CACxD,IAAI,EAAO,cAAc,GAAG,OAAO;CAEnC,IAAM,IAAK,EAAO,OAAO,QAAQ,IAAI,GAC/B,KACJ,KAAM,IAAI,EAAO,OAAO,MAAM,GAAG,CAAE,IAAI,EAAO,QAC9C,KAAK,GACD,KAAa,KAAM,IAAI,EAAO,OAAO,MAAM,IAAK,CAAC,IAAI,IAAI,KAAK,GAC9D,IAAS,KAAa,MAAc,SAAS,IAAY;CAE/D,IAAI,CAAC,KAAa,CAAC,GAAQ,OAAO;CAElC,IAAM,IAAe,EAAkB,CAAS;CAChD,OAAO;EACL,YAAY,GAAc,cAAc;EACxC,UAAU,GAAc,YAAY;EACpC,WAAW,KAAa;EACxB;CACF;AACF;AAqBA,IAAa,UAAwB;CACnC,IAAM,EAAE,MAAM,MAAiB,EAAsB,GAC/C,IAAiB,EAAkB,GACnC,EAAE,eAAY,EAAiB,GAC/B,IAAiB,EAAQ,SAAS,SAElC,IAAiB,GAAc,IAC/B,IAAkB,GAAc,kBAChC,IAAgB,GAAc,iBAC9B,IAAa,GAAc,WAAW,aAAa,KAAK,GACxD,IAAsB,CAAC,CAAC,GAAc,qBACtC,IAA0B,CAAC,CAAC,GAAc,cAC1C,IAAwB,CAAC,CAAC,GAAc,iBAExC,IACJ,KACA,KACA,CAAC,CAAC,KACF,CAAC,CAAC,MACD,CAAC,KACA,CAAC,KACD,CAAC,IAKC,IAAa,EACjB,GACA,GACA,CACF,GAKM,IAAgB,EAAO,CAAU;CAMvC,OALA,EAAc,UAAU,GAKjB,EAAuB;EAC5B,UAAU;GACR;GACA;GACA;GACA;GACA;EACF;EACA,SAAS,YAIA,GAHkB,GAAS,GAAK,MACrC,EAAc,QAAQ,GAAS,GAAK,CAAO,GAEpB,CAAW;EAEtC,SAAS;EACT,OAAO;EAMP,WAAW;EACX,iBAAiB;EACjB,QAAQ,MAAO,KAAK;EACpB,MAAM,EAAE,cAAc,GAAK;CAC7B,CAAC;AACH"}
1
+ {"version":3,"file":"use-local-git-info.js","names":[],"sources":["../../../src/hooks/query/use-local-git-info.ts"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport { useRef } from \"react\";\n\nimport type { CommandResult } from \"#/api/runtime-service/agent-server-runtime-service\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport { useActiveConversation } from \"#/hooks/query/use-active-conversation\";\nimport { useRuntimeIsReady } from \"#/hooks/use-runtime-is-ready\";\nimport { useBashCommandRunner } from \"#/hooks/use-bash-command-runner\";\nimport { Provider } from \"#/types/settings\";\nimport { parseGitRemoteUrl } from \"#/utils/parse-git-remote-url\";\n\nexport interface LocalGitInfo {\n repository: string | null;\n branch: string | null;\n provider: Provider | null;\n remoteUrl: string | null;\n}\n\nconst EMPTY_LOCAL_GIT_INFO: LocalGitInfo = {\n repository: null,\n branch: null,\n provider: null,\n remoteUrl: null,\n};\n\ntype RunCommand = (\n command: string,\n cwd: string,\n timeout: number,\n) => Promise<CommandResult>;\n\n// Single shell script that replaces the former probeGitInfoAtDir +\n// probeNestedRepoInDir pair. It runs as one bash WebSocket round-trip:\n// 1. Read the origin remote URL and current branch at the workspace root.\n// 2. If neither is set, search for exactly one nested git repo up to 4\n// levels deep and repeat the probe there.\n// Output: two lines — <remote-url>\\n<branch> — either may be empty.\nconst GIT_INFO_COMMAND = [\n \"r=$(git remote get-url origin 2>/dev/null)\",\n \"b=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)\",\n 'if [ -z \"$r$b\" ]; then',\n \"n=$(find . -mindepth 2 -maxdepth 4 -name .git 2>/dev/null | cut -c3- | sed 's|/.git$||' | sort -u)\",\n \"c=$(printf '%s\\\\n' \\\"$n\\\" | grep -c '[^[:space:]]')\",\n 'if [ \"$c\" = \"1\" ] && [ -n \"$n\" ]; then',\n 'r=$(git -C \"$n\" remote get-url origin 2>/dev/null)',\n 'b=$(git -C \"$n\" rev-parse --abbrev-ref HEAD 2>/dev/null)',\n \"fi\",\n \"fi\",\n 'printf \\'%s\\\\n%s\\' \"$r\" \"$b\"',\n].join(\"\\n\");\n\nasync function probeGitInfo(\n run: RunCommand,\n directory: string,\n): Promise<LocalGitInfo> {\n const result = await run(GIT_INFO_COMMAND, directory, 10);\n if (result.exit_code !== 0) return EMPTY_LOCAL_GIT_INFO;\n\n const nl = result.stdout.indexOf(\"\\n\");\n const remoteUrl = (\n nl >= 0 ? result.stdout.slice(0, nl) : result.stdout\n ).trim();\n const rawBranch = (nl >= 0 ? result.stdout.slice(nl + 1) : \"\").trim();\n const branch = rawBranch && rawBranch !== \"HEAD\" ? rawBranch : null;\n\n if (!remoteUrl && !branch) return EMPTY_LOCAL_GIT_INFO;\n\n const parsedRemote = parseGitRemoteUrl(remoteUrl);\n return {\n repository: parsedRemote?.repository ?? null,\n provider: parsedRemote?.provider ?? null,\n remoteUrl: remoteUrl || null,\n branch,\n };\n}\n\n/**\n * Probe git metadata for a **local** backend's workspace checkout by\n * shelling out via the agent server using a single consolidated bash\n * script (see `GIT_INFO_COMMAND`).\n *\n * Local-only by design. On cloud backends the conversation metadata\n * (`selected_repository`, `git_provider`, `selected_branch`) is the\n * source of truth, and probing via `/api/bash/execute_bash_command`\n * would (a) leak the user's local `getAgentServerWorkingDir()` path to\n * the cloud runtime when `workspace.working_dir` is missing, and\n * (b) hit a bash endpoint we don't want the frontend driving on cloud.\n *\n * On local, we keep the probe enabled until the active conversation\n * has a complete repo tuple so the control bar can recover from\n * partial metadata hydration after connect/clone flows.\n *\n * Returns `null` fields when the working dir is not a git checkout —\n * callers should treat that the same as \"no repo detected\".\n */\nexport const useLocalGitInfo = () => {\n const { data: conversation } = useActiveConversation();\n const runtimeIsReady = useRuntimeIsReady();\n const { backend } = useActiveBackend();\n const isLocalBackend = backend.kind === \"local\";\n\n const conversationId = conversation?.id;\n const conversationUrl = conversation?.conversation_url;\n const sessionApiKey = conversation?.session_api_key;\n const workingDir = conversation?.workspace?.working_dir?.trim();\n const hasConversationRepo = !!conversation?.selected_repository;\n const hasConversationProvider = !!conversation?.git_provider;\n const hasConversationBranch = !!conversation?.selected_branch;\n\n const queryEnabled =\n isLocalBackend &&\n runtimeIsReady &&\n !!conversationId &&\n !!workingDir &&\n (!hasConversationRepo ||\n !hasConversationProvider ||\n !hasConversationBranch);\n\n // Persistent WebSocket connection to the bash-events endpoint. The\n // connection is opened when the query is enabled and closed on unmount or\n // when the conversation changes.\n const runCommand = useBashCommandRunner(\n conversationUrl,\n sessionApiKey,\n queryEnabled,\n );\n\n // Keep a ref so queryFn can call the latest runner without capturing it\n // as a queryKey dependency (runCommand is stable but the linter can't\n // infer that).\n const runCommandRef = useRef(runCommand);\n runCommandRef.current = runCommand;\n\n // runCommandRef is a ref (always stable); the linter cannot infer this so\n // we disable the exhaustive-deps check here.\n\n return useQuery<LocalGitInfo>({\n queryKey: [\n \"local-git-info\",\n conversationId,\n conversationUrl,\n sessionApiKey,\n workingDir,\n ],\n queryFn: async () => {\n const run: RunCommand = (command, cwd, timeout) =>\n runCommandRef.current(command, cwd, timeout);\n // workingDir is guaranteed non-empty by the queryEnabled guard above.\n return probeGitInfo(run, workingDir!);\n },\n enabled: queryEnabled,\n retry: false,\n // Re-probe the workspace every 10s so the UI reflects branch/repo\n // changes (e.g. `git checkout`, adding a remote) without requiring a\n // manual refresh when there is no `selected_repository` recorded on\n // the conversation. Commands now run over the persistent WebSocket\n // connection rather than individual REST calls.\n staleTime: 10_000,\n refetchInterval: 10_000,\n gcTime: 1000 * 60 * 5,\n meta: { disableToast: true },\n });\n};\n"],"mappings":";;;;;;;;AAkBA,IAAM,IAAqC;CACzC,YAAY;CACZ,QAAQ;CACR,UAAU;CACV,WAAW;AACb,GAcM,IAAmB;CACvB;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,EAAE,KAAK,IAAI;AAEX,eAAe,EACb,GACA,GACuB;CACvB,IAAM,IAAS,MAAM,EAAI,GAAkB,GAAW,EAAE;CACxD,IAAI,EAAO,cAAc,GAAG,OAAO;CAEnC,IAAM,IAAK,EAAO,OAAO,QAAQ,IAAI,GAC/B,KACJ,KAAM,IAAI,EAAO,OAAO,MAAM,GAAG,CAAE,IAAI,EAAO,QAC9C,KAAK,GACD,KAAa,KAAM,IAAI,EAAO,OAAO,MAAM,IAAK,CAAC,IAAI,IAAI,KAAK,GAC9D,IAAS,KAAa,MAAc,SAAS,IAAY;CAE/D,IAAI,CAAC,KAAa,CAAC,GAAQ,OAAO;CAElC,IAAM,IAAe,EAAkB,CAAS;CAChD,OAAO;EACL,YAAY,GAAc,cAAc;EACxC,UAAU,GAAc,YAAY;EACpC,WAAW,KAAa;EACxB;CACF;AACF;AAqBA,IAAa,UAAwB;CACnC,IAAM,EAAE,MAAM,MAAiB,EAAsB,GAC/C,IAAiB,EAAkB,GACnC,EAAE,eAAY,EAAiB,GAC/B,IAAiB,EAAQ,SAAS,SAElC,IAAiB,GAAc,IAC/B,IAAkB,GAAc,kBAChC,IAAgB,GAAc,iBAC9B,IAAa,GAAc,WAAW,aAAa,KAAK,GACxD,IAAsB,CAAC,CAAC,GAAc,qBACtC,IAA0B,CAAC,CAAC,GAAc,cAC1C,IAAwB,CAAC,CAAC,GAAc,iBAExC,IACJ,KACA,KACA,CAAC,CAAC,KACF,CAAC,CAAC,MACD,CAAC,KACA,CAAC,KACD,CAAC,IAKC,IAAa,EACjB,GACA,GACA,CACF,GAKM,IAAgB,EAAO,CAAU;CAMvC,OALA,EAAc,UAAU,GAKjB,EAAuB;EAC5B,UAAU;GACR;GACA;GACA;GACA;GACA;EACF;EACA,SAAS,YAIA,GAHkB,GAAS,GAAK,MACrC,EAAc,QAAQ,GAAS,GAAK,CAAO,GAEpB,CAAW;EAEtC,SAAS;EACT,OAAO;EAMP,WAAW;EACX,iBAAiB;EACjB,QAAQ,MAAO,KAAK;EACpB,MAAM,EAAE,cAAc,GAAK;CAC7B,CAAC;AACH"}
@@ -1,2 +1,2 @@
1
- require("../../_virtual/_rolldown/runtime.cjs");const e=require("./query-keys.cjs"),t=require("../../node_modules/@tanstack/react-query/build/modern/useQuery.cjs"),n=require("../../contexts/active-backend-context.cjs"),r=require("../../api/provider-connections-service/provider-connections-service.api.cjs");function i(){let{backend:i}=n.useActiveBackend(),a=i.kind===`local`;return t.useQuery({queryKey:[...e.PROVIDER_CONNECTIONS_QUERY_KEYS.all,i.id],queryFn:r.default.list,...e.CONFIG_CACHE_OPTIONS,enabled:a,meta:{disableToast:!0}})}exports.useProviderConnections=i;
1
+ require("../../_virtual/_rolldown/runtime.cjs");const e=require("./query-keys.cjs"),t=require("../../node_modules/@tanstack/react-query/build/modern/useQuery.cjs"),n=require("../../contexts/active-backend-context.cjs"),r=require("../../api/provider-connections-service/provider-connections-service.api.cjs");function i(){let{backend:i,orgId:a}=n.useActiveBackend(),o=i.kind===`local`,s=i.kind===`cloud`&&!!a,c=o||s;return t.useQuery({queryKey:[...e.PROVIDER_CONNECTIONS_QUERY_KEYS.all,i.id,a],queryFn:r.default.list,...e.CONFIG_CACHE_OPTIONS,enabled:c,meta:{disableToast:!0}})}exports.useProviderConnections=i;
2
2
  //# sourceMappingURL=use-provider-connections.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-provider-connections.cjs","names":[],"sources":["../../../src/hooks/query/use-provider-connections.ts"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport ProviderConnectionsService from \"#/api/provider-connections-service/provider-connections-service.api\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport {\n CONFIG_CACHE_OPTIONS,\n PROVIDER_CONNECTIONS_QUERY_KEYS,\n} from \"./query-keys\";\n\nexport { PROVIDER_CONNECTIONS_QUERY_KEYS };\n\n/**\n * Provider connections live only on the local agent-server. On cloud backends\n * the query stays disabled and returns no data, so the connections UI hides\n * itself rather than firing a request that would 404.\n */\nexport function useProviderConnections() {\n const { backend } = useActiveBackend();\n const isLocal = backend.kind === \"local\";\n\n return useQuery({\n queryKey: [...PROVIDER_CONNECTIONS_QUERY_KEYS.all, backend.id],\n queryFn: ProviderConnectionsService.list,\n ...CONFIG_CACHE_OPTIONS,\n enabled: isLocal,\n meta: { disableToast: true },\n });\n}\n"],"mappings":"oTAeA,SAAgB,GAAyB,CACvC,GAAM,CAAE,WAAY,EAAA,iBAAiB,EAC/B,EAAU,EAAQ,OAAS,QAEjC,OAAO,EAAA,SAAS,CACd,SAAU,CAAC,GAAG,EAAA,gCAAgC,IAAK,EAAQ,EAAE,EAC7D,QAAS,EAAA,QAA2B,KACpC,GAAG,EAAA,qBACH,QAAS,EACT,KAAM,CAAE,aAAc,EAAK,CAC7B,CAAC,CACH"}
1
+ {"version":3,"file":"use-provider-connections.cjs","names":[],"sources":["../../../src/hooks/query/use-provider-connections.ts"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport ProviderConnectionsService from \"#/api/provider-connections-service/provider-connections-service.api\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport {\n CONFIG_CACHE_OPTIONS,\n PROVIDER_CONNECTIONS_QUERY_KEYS,\n} from \"./query-keys\";\n\nexport { PROVIDER_CONNECTIONS_QUERY_KEYS };\n\n/**\n * Provider connections are available on the local agent-server\n * (`/api/llm/provider-connections`) and on cloud when an org is bound\n * (`/api/organizations/{orgId}/provider-connections`). The query is disabled\n * only for a cloud backend without an org (legacy API keys), where the\n * org-scoped route cannot be addressed — there it returns no data so the\n * connections UI hides itself rather than firing an unaddressable request.\n */\nexport function useProviderConnections() {\n const { backend, orgId } = useActiveBackend();\n const isLocal = backend.kind === \"local\";\n const isCloudWithOrg = backend.kind === \"cloud\" && !!orgId;\n const enabled = isLocal || isCloudWithOrg;\n\n return useQuery({\n queryKey: [...PROVIDER_CONNECTIONS_QUERY_KEYS.all, backend.id, orgId],\n queryFn: ProviderConnectionsService.list,\n ...CONFIG_CACHE_OPTIONS,\n enabled,\n meta: { disableToast: true },\n });\n}\n"],"mappings":"oTAkBA,SAAgB,GAAyB,CACvC,GAAM,CAAE,UAAS,SAAU,EAAA,iBAAiB,EACtC,EAAU,EAAQ,OAAS,QAC3B,EAAiB,EAAQ,OAAS,SAAW,CAAC,CAAC,EAC/C,EAAU,GAAW,EAE3B,OAAO,EAAA,SAAS,CACd,SAAU,CAAC,GAAG,EAAA,gCAAgC,IAAK,EAAQ,GAAI,CAAK,EACpE,QAAS,EAAA,QAA2B,KACpC,GAAG,EAAA,qBACH,UACA,KAAM,CAAE,aAAc,EAAK,CAC7B,CAAC,CACH"}
@@ -1,8 +1,11 @@
1
1
  import { PROVIDER_CONNECTIONS_QUERY_KEYS } from "./query-keys";
2
2
  export { PROVIDER_CONNECTIONS_QUERY_KEYS };
3
3
  /**
4
- * Provider connections live only on the local agent-server. On cloud backends
5
- * the query stays disabled and returns no data, so the connections UI hides
6
- * itself rather than firing a request that would 404.
4
+ * Provider connections are available on the local agent-server
5
+ * (`/api/llm/provider-connections`) and on cloud when an org is bound
6
+ * (`/api/organizations/{orgId}/provider-connections`). The query is disabled
7
+ * only for a cloud backend without an org (legacy API keys), where the
8
+ * org-scoped route cannot be addressed — there it returns no data so the
9
+ * connections UI hides itself rather than firing an unaddressable request.
7
10
  */
8
11
  export declare function useProviderConnections(): import("@tanstack/react-query").UseQueryResult<NoInfer<import("#/api/provider-connections-service/provider-connections-service.api").ProviderConnection[]>, import("axios").AxiosError<unknown, any>>;
@@ -4,12 +4,16 @@ import { useActiveBackend as r } from "../../contexts/active-backend-context.js"
4
4
  import i from "../../api/provider-connections-service/provider-connections-service.api.js";
5
5
  //#region src/hooks/query/use-provider-connections.ts
6
6
  function a() {
7
- let { backend: a } = r(), o = a.kind === "local";
7
+ let { backend: a, orgId: o } = r(), s = a.kind === "local", c = a.kind === "cloud" && !!o, l = s || c;
8
8
  return n({
9
- queryKey: [...t.all, a.id],
9
+ queryKey: [
10
+ ...t.all,
11
+ a.id,
12
+ o
13
+ ],
10
14
  queryFn: i.list,
11
15
  ...e,
12
- enabled: o,
16
+ enabled: l,
13
17
  meta: { disableToast: !0 }
14
18
  });
15
19
  }
@@ -1 +1 @@
1
- {"version":3,"file":"use-provider-connections.js","names":[],"sources":["../../../src/hooks/query/use-provider-connections.ts"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport ProviderConnectionsService from \"#/api/provider-connections-service/provider-connections-service.api\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport {\n CONFIG_CACHE_OPTIONS,\n PROVIDER_CONNECTIONS_QUERY_KEYS,\n} from \"./query-keys\";\n\nexport { PROVIDER_CONNECTIONS_QUERY_KEYS };\n\n/**\n * Provider connections live only on the local agent-server. On cloud backends\n * the query stays disabled and returns no data, so the connections UI hides\n * itself rather than firing a request that would 404.\n */\nexport function useProviderConnections() {\n const { backend } = useActiveBackend();\n const isLocal = backend.kind === \"local\";\n\n return useQuery({\n queryKey: [...PROVIDER_CONNECTIONS_QUERY_KEYS.all, backend.id],\n queryFn: ProviderConnectionsService.list,\n ...CONFIG_CACHE_OPTIONS,\n enabled: isLocal,\n meta: { disableToast: true },\n });\n}\n"],"mappings":";;;;;AAeA,SAAgB,IAAyB;CACvC,IAAM,EAAE,eAAY,EAAiB,GAC/B,IAAU,EAAQ,SAAS;CAEjC,OAAO,EAAS;EACd,UAAU,CAAC,GAAG,EAAgC,KAAK,EAAQ,EAAE;EAC7D,SAAS,EAA2B;EACpC,GAAG;EACH,SAAS;EACT,MAAM,EAAE,cAAc,GAAK;CAC7B,CAAC;AACH"}
1
+ {"version":3,"file":"use-provider-connections.js","names":[],"sources":["../../../src/hooks/query/use-provider-connections.ts"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport ProviderConnectionsService from \"#/api/provider-connections-service/provider-connections-service.api\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport {\n CONFIG_CACHE_OPTIONS,\n PROVIDER_CONNECTIONS_QUERY_KEYS,\n} from \"./query-keys\";\n\nexport { PROVIDER_CONNECTIONS_QUERY_KEYS };\n\n/**\n * Provider connections are available on the local agent-server\n * (`/api/llm/provider-connections`) and on cloud when an org is bound\n * (`/api/organizations/{orgId}/provider-connections`). The query is disabled\n * only for a cloud backend without an org (legacy API keys), where the\n * org-scoped route cannot be addressed — there it returns no data so the\n * connections UI hides itself rather than firing an unaddressable request.\n */\nexport function useProviderConnections() {\n const { backend, orgId } = useActiveBackend();\n const isLocal = backend.kind === \"local\";\n const isCloudWithOrg = backend.kind === \"cloud\" && !!orgId;\n const enabled = isLocal || isCloudWithOrg;\n\n return useQuery({\n queryKey: [...PROVIDER_CONNECTIONS_QUERY_KEYS.all, backend.id, orgId],\n queryFn: ProviderConnectionsService.list,\n ...CONFIG_CACHE_OPTIONS,\n enabled,\n meta: { disableToast: true },\n });\n}\n"],"mappings":";;;;;AAkBA,SAAgB,IAAyB;CACvC,IAAM,EAAE,YAAS,aAAU,EAAiB,GACtC,IAAU,EAAQ,SAAS,SAC3B,IAAiB,EAAQ,SAAS,WAAW,CAAC,CAAC,GAC/C,IAAU,KAAW;CAE3B,OAAO,EAAS;EACd,UAAU;GAAC,GAAG,EAAgC;GAAK,EAAQ;GAAI;EAAK;EACpE,SAAS,EAA2B;EACpC,GAAG;EACH;EACA,MAAM,EAAE,cAAc,GAAK;CAC7B,CAAC;AACH"}
@@ -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/config-service/config-service.api.cjs"),n=require("./use-verified-models.cjs");var r=10;async function i(e,n,a,o=0){if(o>=r)throw Error(`Too many pagination requests for provider ${e}`);let s=await t.default.searchModels({provider__eq:e,limit:100,page_id:a},n);if(s.next_page_id){let t=await i(e,n,s.next_page_id,o+1);return[...s.items,...t]}return s.items}var a=t=>e.useQuery({queryKey:[`config`,`models`,t],queryFn:async({client:e})=>i(t,await e.fetchQuery({queryKey:n.VERIFIED_MODELS_QUERY_KEY,queryFn:n.fetchVerifiedModelsByProvider,staleTime:n.VERIFIED_MODELS_STALE_TIME})),enabled:!!t,staleTime:n.VERIFIED_MODELS_STALE_TIME,gcTime:n.VERIFIED_MODELS_GC_TIME});exports.useProviderModels=a;
1
+ require("../../_virtual/_rolldown/runtime.cjs");const e=require("../../node_modules/@tanstack/react-query/build/modern/useQuery.cjs"),t=require("../../contexts/active-backend-context.cjs"),n=require("../../api/config-service/config-service.api.cjs"),r=require("./use-verified-models.cjs");var i=10;async function a(e,t,r,o=0){if(o>=i)throw Error(`Too many pagination requests for provider ${e}`);let s=await n.default.searchModels({provider__eq:e,limit:100,page_id:r},t);if(s.next_page_id){let n=await a(e,t,s.next_page_id,o+1);return[...s.items,...n]}return s.items}var o=n=>{let{backend:i,orgId:o}=t.useActiveBackend(),s=[i.id,i.connectionRevision??0,o];return e.useQuery({queryKey:[`config`,`models`,n,...s],queryFn:async({client:e})=>a(n,await e.fetchQuery({queryKey:[...r.VERIFIED_MODELS_QUERY_KEY,...s],queryFn:r.fetchVerifiedModelsByProvider,staleTime:r.VERIFIED_MODELS_STALE_TIME})),enabled:!!n,staleTime:r.VERIFIED_MODELS_STALE_TIME,gcTime:r.VERIFIED_MODELS_GC_TIME})};exports.useProviderModels=o;
2
2
  //# sourceMappingURL=use-provider-models.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-provider-models.cjs","names":[],"sources":["../../../src/hooks/query/use-provider-models.ts"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport ConfigService from \"#/api/config-service/config-service.api\";\nimport type { LLMModel } from \"#/api/config-service/config-service.types\";\nimport {\n VERIFIED_MODELS_GC_TIME,\n VERIFIED_MODELS_QUERY_KEY,\n VERIFIED_MODELS_STALE_TIME,\n fetchVerifiedModelsByProvider,\n} from \"./use-verified-models\";\n\nconst MAX_PAGINATION_DEPTH = 10;\n\nasync function fetchPage(\n provider: string,\n verifiedByProvider: Record<string, string[]>,\n pageId?: string,\n depth = 0,\n): Promise<LLMModel[]> {\n if (depth >= MAX_PAGINATION_DEPTH) {\n throw new Error(`Too many pagination requests for provider ${provider}`);\n }\n\n const page = await ConfigService.searchModels(\n {\n provider__eq: provider,\n limit: 100,\n page_id: pageId,\n },\n verifiedByProvider,\n );\n\n if (page.next_page_id) {\n const rest = await fetchPage(\n provider,\n verifiedByProvider,\n page.next_page_id,\n depth + 1,\n );\n return [...page.items, ...rest];\n }\n return page.items;\n}\n\nexport const useProviderModels = (provider: string | null) =>\n useQuery({\n queryKey: [\"config\", \"models\", provider],\n queryFn: async ({ client }) => {\n const verifiedByProvider = await client.fetchQuery({\n queryKey: VERIFIED_MODELS_QUERY_KEY,\n queryFn: fetchVerifiedModelsByProvider,\n staleTime: VERIFIED_MODELS_STALE_TIME,\n });\n return fetchPage(provider!, verifiedByProvider);\n },\n enabled: !!provider,\n staleTime: VERIFIED_MODELS_STALE_TIME,\n gcTime: VERIFIED_MODELS_GC_TIME,\n });\n"],"mappings":"0OAUA,IAAM,EAAuB,GAE7B,eAAe,EACb,EACA,EACA,EACA,EAAQ,EACa,CACrB,GAAI,GAAS,EACX,MAAU,MAAM,6CAA6C,GAAU,EAGzE,IAAM,EAAO,MAAM,EAAA,QAAc,aAC/B,CACE,aAAc,EACd,MAAO,IACP,QAAS,CACX,EACA,CACF,EAEA,GAAI,EAAK,aAAc,CACrB,IAAM,EAAO,MAAM,EACjB,EACA,EACA,EAAK,aACL,EAAQ,CACV,EACA,MAAO,CAAC,GAAG,EAAK,MAAO,GAAG,CAAI,CAChC,CACA,OAAO,EAAK,KACd,CAEA,IAAa,EAAqB,GAChC,EAAA,SAAS,CACP,SAAU,CAAC,SAAU,SAAU,CAAQ,EACvC,QAAS,MAAO,CAAE,YAMT,EAAU,EAAW,MALK,EAAO,WAAW,CACjD,SAAU,EAAA,0BACV,QAAS,EAAA,8BACT,UAAW,EAAA,0BACb,CAAC,CAC6C,EAEhD,QAAS,CAAC,CAAC,EACX,UAAW,EAAA,2BACX,OAAQ,EAAA,uBACV,CAAC"}
1
+ {"version":3,"file":"use-provider-models.cjs","names":[],"sources":["../../../src/hooks/query/use-provider-models.ts"],"sourcesContent":["import { useQuery } from \"@tanstack/react-query\";\nimport ConfigService from \"#/api/config-service/config-service.api\";\nimport type { LLMModel } from \"#/api/config-service/config-service.types\";\nimport { useActiveBackend } from \"#/contexts/active-backend-context\";\nimport {\n VERIFIED_MODELS_GC_TIME,\n VERIFIED_MODELS_QUERY_KEY,\n VERIFIED_MODELS_STALE_TIME,\n fetchVerifiedModelsByProvider,\n} from \"./use-verified-models\";\n\nconst MAX_PAGINATION_DEPTH = 10;\n\nasync function fetchPage(\n provider: string,\n verifiedByProvider: Record<string, string[]>,\n pageId?: string,\n depth = 0,\n): Promise<LLMModel[]> {\n if (depth >= MAX_PAGINATION_DEPTH) {\n throw new Error(`Too many pagination requests for provider ${provider}`);\n }\n\n const page = await ConfigService.searchModels(\n {\n provider__eq: provider,\n limit: 100,\n page_id: pageId,\n },\n verifiedByProvider,\n );\n\n if (page.next_page_id) {\n const rest = await fetchPage(\n provider,\n verifiedByProvider,\n page.next_page_id,\n depth + 1,\n );\n return [...page.items, ...rest];\n }\n return page.items;\n}\n\nexport const useProviderModels = (provider: string | null) => {\n // `ActiveBackendProvider` deliberately does not blanket-invalidate on\n // backend/org switches, so the query key must carry the active backend\n // identity (id, connection revision, org id). Otherwise React Query serves\n // the previous backend/org's cached page — including DB-driven `free`/\n // `default`/`verified` flags — for the full stale window after a switch.\n const { backend, orgId } = useActiveBackend();\n const backendScope = [\n backend.id,\n backend.connectionRevision ?? 0,\n orgId,\n ] as const;\n\n return useQuery({\n queryKey: [\"config\", \"models\", provider, ...backendScope],\n queryFn: async ({ client }) => {\n const verifiedByProvider = await client.fetchQuery({\n queryKey: [...VERIFIED_MODELS_QUERY_KEY, ...backendScope],\n queryFn: fetchVerifiedModelsByProvider,\n staleTime: VERIFIED_MODELS_STALE_TIME,\n });\n return fetchPage(provider!, verifiedByProvider);\n },\n enabled: !!provider,\n staleTime: VERIFIED_MODELS_STALE_TIME,\n gcTime: VERIFIED_MODELS_GC_TIME,\n });\n};\n"],"mappings":"iSAWA,IAAM,EAAuB,GAE7B,eAAe,EACb,EACA,EACA,EACA,EAAQ,EACa,CACrB,GAAI,GAAS,EACX,MAAU,MAAM,6CAA6C,GAAU,EAGzE,IAAM,EAAO,MAAM,EAAA,QAAc,aAC/B,CACE,aAAc,EACd,MAAO,IACP,QAAS,CACX,EACA,CACF,EAEA,GAAI,EAAK,aAAc,CACrB,IAAM,EAAO,MAAM,EACjB,EACA,EACA,EAAK,aACL,EAAQ,CACV,EACA,MAAO,CAAC,GAAG,EAAK,MAAO,GAAG,CAAI,CAChC,CACA,OAAO,EAAK,KACd,CAEA,IAAa,EAAqB,GAA4B,CAM5D,GAAM,CAAE,UAAS,SAAU,EAAA,iBAAiB,EACtC,EAAe,CACnB,EAAQ,GACR,EAAQ,oBAAsB,EAC9B,CACF,EAEA,OAAO,EAAA,SAAS,CACd,SAAU,CAAC,SAAU,SAAU,EAAU,GAAG,CAAY,EACxD,QAAS,MAAO,CAAE,YAMT,EAAU,EAAW,MALK,EAAO,WAAW,CACjD,SAAU,CAAC,GAAG,EAAA,0BAA2B,GAAG,CAAY,EACxD,QAAS,EAAA,8BACT,UAAW,EAAA,0BACb,CAAC,CAC6C,EAEhD,QAAS,CAAC,CAAC,EACX,UAAW,EAAA,2BACX,OAAQ,EAAA,uBACV,CAAC,CACH"}
@@ -1,37 +1,46 @@
1
1
  import { useQuery as e } from "../../node_modules/@tanstack/react-query/build/modern/useQuery.js";
2
- import t from "../../api/config-service/config-service.api.js";
3
- import { VERIFIED_MODELS_GC_TIME as n, VERIFIED_MODELS_QUERY_KEY as r, VERIFIED_MODELS_STALE_TIME as i, fetchVerifiedModelsByProvider as a } from "./use-verified-models.js";
2
+ import { useActiveBackend as t } from "../../contexts/active-backend-context.js";
3
+ import n from "../../api/config-service/config-service.api.js";
4
+ import { VERIFIED_MODELS_GC_TIME as r, VERIFIED_MODELS_QUERY_KEY as i, VERIFIED_MODELS_STALE_TIME as a, fetchVerifiedModelsByProvider as o } from "./use-verified-models.js";
4
5
  //#region src/hooks/query/use-provider-models.ts
5
- var o = 10;
6
- async function s(e, n, r, i = 0) {
7
- if (i >= o) throw Error(`Too many pagination requests for provider ${e}`);
8
- let a = await t.searchModels({
6
+ var s = 10;
7
+ async function c(e, t, r, i = 0) {
8
+ if (i >= s) throw Error(`Too many pagination requests for provider ${e}`);
9
+ let a = await n.searchModels({
9
10
  provider__eq: e,
10
11
  limit: 100,
11
12
  page_id: r
12
- }, n);
13
+ }, t);
13
14
  if (a.next_page_id) {
14
- let t = await s(e, n, a.next_page_id, i + 1);
15
- return [...a.items, ...t];
15
+ let n = await c(e, t, a.next_page_id, i + 1);
16
+ return [...a.items, ...n];
16
17
  }
17
18
  return a.items;
18
19
  }
19
- var c = (t) => e({
20
- queryKey: [
21
- "config",
22
- "models",
23
- t
24
- ],
25
- queryFn: async ({ client: e }) => s(t, await e.fetchQuery({
26
- queryKey: r,
27
- queryFn: a,
28
- staleTime: i
29
- })),
30
- enabled: !!t,
31
- staleTime: i,
32
- gcTime: n
33
- });
20
+ var l = (n) => {
21
+ let { backend: s, orgId: l } = t(), u = [
22
+ s.id,
23
+ s.connectionRevision ?? 0,
24
+ l
25
+ ];
26
+ return e({
27
+ queryKey: [
28
+ "config",
29
+ "models",
30
+ n,
31
+ ...u
32
+ ],
33
+ queryFn: async ({ client: e }) => c(n, await e.fetchQuery({
34
+ queryKey: [...i, ...u],
35
+ queryFn: o,
36
+ staleTime: a
37
+ })),
38
+ enabled: !!n,
39
+ staleTime: a,
40
+ gcTime: r
41
+ });
42
+ };
34
43
  //#endregion
35
- export { c as useProviderModels };
44
+ export { l as useProviderModels };
36
45
 
37
46
  //# sourceMappingURL=use-provider-models.js.map