@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
@@ -21,7 +21,17 @@ async function i() {
21
21
  } while (a);
22
22
  return i;
23
23
  }
24
+ async function a(e) {
25
+ return ((await t({
26
+ backend: r(),
27
+ method: "GET",
28
+ path: `/api/v1/app-conversations/${e}/skills`
29
+ }))?.skills ?? []).map((e) => ({
30
+ ...e,
31
+ source: null
32
+ }));
33
+ }
24
34
  //#endregion
25
- export { i as fetchCloudSkills };
35
+ export { a as fetchCloudConversationSkills, i as fetchCloudSkills };
26
36
 
27
37
  //# sourceMappingURL=skills-service.api.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"skills-service.api.js","names":[],"sources":["../../../src/api/cloud/skills-service.api.ts"],"sourcesContent":["import type { SkillInfo } from \"#/types/settings\";\nimport { getActiveBackend } from \"../backend-registry/active-store\";\nimport type { Backend } from \"../backend-registry/types\";\nimport { callCloudProxy } from \"./proxy\";\n\ninterface CloudSkillsPage {\n items: SkillInfo[];\n next_page_id: string | null;\n}\n\nconst PAGE_LIMIT = 100;\n\nfunction getActiveCloudBackend(): Backend {\n const active = getActiveBackend().backend;\n if (active.kind !== \"cloud\") {\n throw new Error(\"Cloud skills call requires a cloud backend.\");\n }\n return active;\n}\n\n/**\n * Fetch the full list of skills from the cloud backend. The cloud endpoint is\n * paginated (page_id cursor); we walk all pages so the settings UI gets a\n * complete list in one call. The cloud SkillInfo shape\n * (name/type/source/triggers) matches the GUI's SkillInfo type, so items are\n * passed through unchanged.\n */\nexport async function fetchCloudSkills(): Promise<SkillInfo[]> {\n const backend = getActiveCloudBackend();\n\n const skills: SkillInfo[] = [];\n let pageId: string | null = null;\n\n do {\n const query = new URLSearchParams({ limit: String(PAGE_LIMIT) });\n if (pageId) query.set(\"page_id\", pageId);\n\n const page = await callCloudProxy<CloudSkillsPage>({\n backend,\n method: \"GET\",\n path: `/api/v1/skills/search?${query.toString()}`,\n });\n\n skills.push(...(page.items ?? []));\n pageId = page.next_page_id;\n } while (pageId);\n\n return skills;\n}\n"],"mappings":";;;AAUA,IAAM,IAAa;AAEnB,SAAS,IAAiC;CACxC,IAAM,IAAS,EAAiB,EAAE;CAClC,IAAI,EAAO,SAAS,SAClB,MAAU,MAAM,6CAA6C;CAE/D,OAAO;AACT;AASA,eAAsB,IAAyC;CAC7D,IAAM,IAAU,EAAsB,GAEhC,IAAsB,CAAC,GACzB,IAAwB;CAE5B,GAAG;EACD,IAAM,IAAQ,IAAI,gBAAgB,EAAE,OAAO,OAAO,CAAU,EAAE,CAAC;EAC/D,AAAI,KAAQ,EAAM,IAAI,WAAW,CAAM;EAEvC,IAAM,IAAO,MAAM,EAAgC;GACjD;GACA,QAAQ;GACR,MAAM,yBAAyB,EAAM,SAAS;EAChD,CAAC;EAGD,AADA,EAAO,KAAK,GAAI,EAAK,SAAS,CAAC,CAAE,GACjC,IAAS,EAAK;CAChB,SAAS;CAET,OAAO;AACT"}
1
+ {"version":3,"file":"skills-service.api.js","names":[],"sources":["../../../src/api/cloud/skills-service.api.ts"],"sourcesContent":["import type { SkillInfo } from \"#/types/settings\";\nimport { getActiveBackend } from \"../backend-registry/active-store\";\nimport type { Backend } from \"../backend-registry/types\";\nimport { callCloudProxy } from \"./proxy\";\n\ninterface CloudSkillsPage {\n items: SkillInfo[];\n next_page_id: string | null;\n}\n\nconst PAGE_LIMIT = 100;\n\nfunction getActiveCloudBackend(): Backend {\n const active = getActiveBackend().backend;\n if (active.kind !== \"cloud\") {\n throw new Error(\"Cloud skills call requires a cloud backend.\");\n }\n return active;\n}\n\n/**\n * Fetch the full list of skills from the cloud backend. The cloud endpoint is\n * paginated (page_id cursor); we walk all pages so the settings UI gets a\n * complete list in one call. The cloud SkillInfo shape\n * (name/type/source/triggers) matches the GUI's SkillInfo type, so items are\n * passed through unchanged.\n */\nexport async function fetchCloudSkills(): Promise<SkillInfo[]> {\n const backend = getActiveCloudBackend();\n\n const skills: SkillInfo[] = [];\n let pageId: string | null = null;\n\n do {\n const query = new URLSearchParams({ limit: String(PAGE_LIMIT) });\n if (pageId) query.set(\"page_id\", pageId);\n\n const page = await callCloudProxy<CloudSkillsPage>({\n backend,\n method: \"GET\",\n path: `/api/v1/skills/search?${query.toString()}`,\n });\n\n skills.push(...(page.items ?? []));\n pageId = page.next_page_id;\n } while (pageId);\n\n return skills;\n}\n\ninterface CloudConversationSkill {\n name: string;\n type: SkillInfo[\"type\"];\n content: string;\n triggers: string[];\n}\n\ninterface CloudConversationSkillsResponse {\n skills: CloudConversationSkill[];\n}\n\n/**\n * Fetch the skills loaded into a running cloud conversation from the\n * per-conversation route (the one the OpenHands web UI's own \"Show Available\n * Skills\" modal uses). Unlike `/api/v1/skills/search`, which only scans the\n * API host's built-in skills directory, this resolves the conversation's\n * sandbox and asks its agent-server for the merged set: public catalog,\n * user/org repos, project skills and auto-loaded marketplace plugins. The\n * route reports no `source`, so it is `null`.\n */\nexport async function fetchCloudConversationSkills(\n conversationId: string,\n): Promise<SkillInfo[]> {\n const backend = getActiveCloudBackend();\n\n const data = await callCloudProxy<CloudConversationSkillsResponse>({\n backend,\n method: \"GET\",\n path: `/api/v1/app-conversations/${conversationId}/skills`,\n });\n\n return (data?.skills ?? []).map((skill) => ({ ...skill, source: null }));\n}\n"],"mappings":";;;AAUA,IAAM,IAAa;AAEnB,SAAS,IAAiC;CACxC,IAAM,IAAS,EAAiB,EAAE;CAClC,IAAI,EAAO,SAAS,SAClB,MAAU,MAAM,6CAA6C;CAE/D,OAAO;AACT;AASA,eAAsB,IAAyC;CAC7D,IAAM,IAAU,EAAsB,GAEhC,IAAsB,CAAC,GACzB,IAAwB;CAE5B,GAAG;EACD,IAAM,IAAQ,IAAI,gBAAgB,EAAE,OAAO,OAAO,CAAU,EAAE,CAAC;EAC/D,AAAI,KAAQ,EAAM,IAAI,WAAW,CAAM;EAEvC,IAAM,IAAO,MAAM,EAAgC;GACjD;GACA,QAAQ;GACR,MAAM,yBAAyB,EAAM,SAAS;EAChD,CAAC;EAGD,AADA,EAAO,KAAK,GAAI,EAAK,SAAS,CAAC,CAAE,GACjC,IAAS,EAAK;CAChB,SAAS;CAET,OAAO;AACT;AAsBA,eAAsB,EACpB,GACsB;CAStB,SAAQ,MANW,EAAgD;EACjE,SAHc,EAGd;EACA,QAAQ;EACR,MAAM,6BAA6B,EAAe;CACpD,CAAC,IAEa,UAAU,CAAC,GAAG,KAAK,OAAW;EAAE,GAAG;EAAO,QAAQ;CAAK,EAAE;AACzE"}
@@ -1,2 +1,2 @@
1
- require("../../_virtual/_rolldown/runtime.cjs");const e=require("../../node_modules/@openhands/typescript-client/dist/client/llm-client.cjs");require("../../node_modules/@openhands/typescript-client/dist/clients.cjs");const t=require("../backend-registry/active-store.cjs"),n=require("../agent-server-client-options.cjs"),r=require("../cloud/proxy.cjs");function i(e,t){if(!t)return e;let n=t.toLowerCase();return e.filter(e=>e.name.toLowerCase().includes(n))}function a(e,t){return t===void 0?e:e.filter(e=>e.verified===t)}function o(e,t){return!t||t<=0?e:e.slice(0,t)}function s(e){let t=new URLSearchParams;for(let[n,r]of Object.entries(e))r!==void 0&&t.set(n,String(r));let n=t.toString();return n?`?${n}`:``}var c=class{static async searchModels(c={},l){let u=t.getActiveBackend();if(u.backend.kind===`cloud`){let e=s({page_id:c.page_id,limit:c.limit,query:c.query,verified__eq:c.verified__eq,provider__eq:c.provider__eq});return r.callCloudProxy({backend:u.backend,method:`GET`,path:`/api/v1/config/models/search${e}`})}let d=new e.LLMMetadataClient(n.getAgentServerClientOptions()),f=l===void 0?d.getVerifiedModels():Promise.resolve(l),[p,m]=await Promise.all([d.getModels(),f]),h=c.provider__eq??null,g=new Set(h?m?.[h]??[]:[]),_=[...g].map(e=>({provider:h,name:e,verified:!0})),v=h?(p??[]).filter(e=>e.startsWith(`${h}/`)).map(e=>e.slice(h.length+1)).filter(e=>e.length>0&&!g.has(e)).map(e=>({provider:h,name:e,verified:!1})):[];return{items:o(a(i([..._,...v],c.query),c.verified__eq),c.limit),next_page_id:null}}static async searchProviders(c={},l){let u=t.getActiveBackend();if(u.backend.kind===`cloud`){let e=s({page_id:c.page_id,limit:c.limit,query:c.query,verified__eq:c.verified__eq});return r.callCloudProxy({backend:u.backend,method:`GET`,path:`/api/v1/config/providers/search${e}`})}let d=new e.LLMMetadataClient(n.getAgentServerClientOptions()),f=l===void 0?d.getVerifiedModels():Promise.resolve(l),[p,m]=await Promise.all([d.getProviders(),f]),h=new Set(Object.keys(m??{}));return{items:o(a(i([...new Set([...h,...p??[]])].map(e=>({name:e,verified:h.has(e)})),c.query),c.verified__eq),c.limit),next_page_id:null}}};exports.default=c;
1
+ require("../../_virtual/_rolldown/runtime.cjs");const e=require("../../node_modules/@openhands/typescript-client/dist/client/llm-client.cjs");require("../../node_modules/@openhands/typescript-client/dist/clients.cjs");const t=require("../backend-registry/active-store.cjs"),n=require("../agent-server-client-options.cjs"),r=require("../cloud/proxy.cjs");function i(e,t){if(!t)return e;let n=t.toLowerCase();return e.filter(e=>e.name.toLowerCase().includes(n))}function a(e,t){return t===void 0?e:e.filter(e=>e.verified===t)}function o(e,t){return!t||t<=0?e:e.slice(0,t)}function s(e){let t=new URLSearchParams;for(let[n,r]of Object.entries(e))r!==void 0&&t.set(n,String(r));let n=t.toString();return n?`?${n}`:``}var c=class{static async searchModels(c={},l){let u=t.getActiveBackend();if(u.backend.kind===`cloud`){let e=s({page_id:c.page_id,limit:c.limit,query:c.query,verified__eq:c.verified__eq,provider__eq:c.provider__eq});return r.callCloudProxy({backend:u.backend,method:`GET`,path:`/api/v1/config/models/search${e}`})}let d=new e.LLMMetadataClient(n.getAgentServerClientOptions()),f=l===void 0?d.getVerifiedModels():Promise.resolve(l),[p,m]=await Promise.all([d.getModels(),f]),h=c.provider__eq??null,g=new Set(h?m?.[h]??[]:[]),_=[...g].map(e=>({provider:h,name:e,verified:!0,free:!1,default:!1})),v=h?(p??[]).filter(e=>e.startsWith(`${h}/`)).map(e=>e.slice(h.length+1)).filter(e=>e.length>0&&!g.has(e)).map(e=>({provider:h,name:e,verified:!1,free:!1,default:!1})):[];return{items:o(a(i([..._,...v],c.query),c.verified__eq),c.limit),next_page_id:null}}static async searchProviders(c={},l){let u=t.getActiveBackend();if(u.backend.kind===`cloud`){let e=s({page_id:c.page_id,limit:c.limit,query:c.query,verified__eq:c.verified__eq});return r.callCloudProxy({backend:u.backend,method:`GET`,path:`/api/v1/config/providers/search${e}`})}let d=new e.LLMMetadataClient(n.getAgentServerClientOptions()),f=l===void 0?d.getVerifiedModels():Promise.resolve(l),[p,m]=await Promise.all([d.getProviders(),f]),h=new Set(Object.keys(m??{}));return{items:o(a(i([...new Set([...h,...p??[]])].map(e=>({name:e,verified:h.has(e)})),c.query),c.verified__eq),c.limit),next_page_id:null}}};exports.default=c;
2
2
  //# sourceMappingURL=config-service.api.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"config-service.api.cjs","names":[],"sources":["../../../src/api/config-service/config-service.api.ts"],"sourcesContent":["import { LLMMetadataClient } from \"@openhands/typescript-client/clients\";\nimport { getAgentServerClientOptions } from \"../agent-server-client-options\";\nimport { getActiveBackend } from \"../backend-registry/active-store\";\nimport { callCloudProxy } from \"../cloud/proxy\";\nimport type {\n LLMModel,\n LLMModelPage,\n LLMProvider,\n ProviderPage,\n SearchModelsParams,\n SearchProvidersParams,\n} from \"./config-service.types\";\n\nfunction filterByQuery<T extends { name: string }>(\n items: T[],\n query?: string,\n): T[] {\n if (!query) {\n return items;\n }\n\n const normalizedQuery = query.toLowerCase();\n return items.filter((item) =>\n item.name.toLowerCase().includes(normalizedQuery),\n );\n}\n\nfunction filterByVerified<T extends { verified: boolean }>(\n items: T[],\n verified?: boolean,\n): T[] {\n if (verified === undefined) {\n return items;\n }\n\n return items.filter((item) => item.verified === verified);\n}\n\nfunction limitItems<T>(items: T[], limit?: number): T[] {\n if (!limit || limit <= 0) {\n return items;\n }\n\n return items.slice(0, limit);\n}\n\nfunction buildCloudQueryString(\n params: Record<string, string | number | boolean | undefined>,\n): string {\n const qs = new URLSearchParams();\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined) qs.set(key, String(value));\n }\n const str = qs.toString();\n return str ? `?${str}` : \"\";\n}\n\nclass ConfigService {\n /**\n * @param verifiedByProvider - Pre-fetched verified-models map used by the\n * local reconstruction path. Ignored for cloud backends, which call\n * `/api/v1/config/models/search` directly (verified status is embedded in\n * each returned item).\n */\n static async searchModels(\n params: SearchModelsParams = {},\n verifiedByProvider?: Record<string, string[]>,\n ): Promise<LLMModelPage> {\n const active = getActiveBackend();\n\n if (active.backend.kind === \"cloud\") {\n // Cloud exposes /api/v1/config/models/search which returns LLMModelPage directly.\n // verifiedByProvider is not needed — the cloud API embeds verified status natively.\n const qs = buildCloudQueryString({\n page_id: params.page_id,\n limit: params.limit,\n query: params.query,\n verified__eq: params.verified__eq,\n provider__eq: params.provider__eq,\n });\n return callCloudProxy<LLMModelPage>({\n backend: active.backend,\n method: \"GET\",\n path: `/api/v1/config/models/search${qs}`,\n });\n }\n\n const llmClient = new LLMMetadataClient(getAgentServerClientOptions());\n const verifiedFetch =\n verifiedByProvider !== undefined\n ? Promise.resolve(verifiedByProvider)\n : llmClient.getVerifiedModels();\n const [models, verifiedMap] = await Promise.all([\n llmClient.getModels(),\n verifiedFetch,\n ]);\n\n const provider = params.provider__eq ?? null;\n const verifiedNames = new Set(\n provider ? (verifiedMap?.[provider] ?? []) : [],\n );\n const verifiedItems: LLMModel[] = [...verifiedNames].map((name) => ({\n provider,\n name,\n verified: true,\n }));\n\n const prefixedItems: LLMModel[] = provider\n ? (models ?? [])\n .filter((model) => model.startsWith(`${provider}/`))\n .map((model) => model.slice(provider.length + 1))\n .filter((name) => name.length > 0 && !verifiedNames.has(name))\n .map((name) => ({\n provider,\n name,\n verified: false,\n }))\n : [];\n\n const items = limitItems(\n filterByVerified(\n filterByQuery([...verifiedItems, ...prefixedItems], params.query),\n params.verified__eq,\n ),\n params.limit,\n );\n\n return { items, next_page_id: null };\n }\n\n /**\n * @param verifiedByProvider - Pre-fetched verified-models map used by the\n * local reconstruction path. Ignored for cloud backends, which call\n * `/api/v1/config/providers/search` directly (verified status is embedded in\n * each returned item).\n */\n static async searchProviders(\n params: SearchProvidersParams = {},\n verifiedByProvider?: Record<string, string[]>,\n ): Promise<ProviderPage> {\n const active = getActiveBackend();\n\n if (active.backend.kind === \"cloud\") {\n // Cloud exposes /api/v1/config/providers/search which returns ProviderPage directly.\n // verifiedByProvider is not needed — the cloud API embeds verified status natively.\n const qs = buildCloudQueryString({\n page_id: params.page_id,\n limit: params.limit,\n query: params.query,\n verified__eq: params.verified__eq,\n });\n return callCloudProxy<ProviderPage>({\n backend: active.backend,\n method: \"GET\",\n path: `/api/v1/config/providers/search${qs}`,\n });\n }\n\n const llmClient = new LLMMetadataClient(getAgentServerClientOptions());\n const verifiedFetch =\n verifiedByProvider !== undefined\n ? Promise.resolve(verifiedByProvider)\n : llmClient.getVerifiedModels();\n const [providers, verifiedMap] = await Promise.all([\n llmClient.getProviders(),\n verifiedFetch,\n ]);\n\n const verifiedProviders = new Set(Object.keys(verifiedMap ?? {}));\n const names = new Set<string>([...verifiedProviders, ...(providers ?? [])]);\n const providerItems: LLMProvider[] = [...names].map((name) => ({\n name,\n verified: verifiedProviders.has(name),\n }));\n\n const items = limitItems(\n filterByVerified(\n filterByQuery(providerItems, params.query),\n params.verified__eq,\n ),\n params.limit,\n );\n\n return { items, next_page_id: null };\n }\n}\n\nexport default ConfigService;\n"],"mappings":"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"}
1
+ {"version":3,"file":"config-service.api.cjs","names":[],"sources":["../../../src/api/config-service/config-service.api.ts"],"sourcesContent":["import { LLMMetadataClient } from \"@openhands/typescript-client/clients\";\nimport { getAgentServerClientOptions } from \"../agent-server-client-options\";\nimport { getActiveBackend } from \"../backend-registry/active-store\";\nimport { callCloudProxy } from \"../cloud/proxy\";\nimport type {\n LLMModel,\n LLMModelPage,\n LLMProvider,\n ProviderPage,\n SearchModelsParams,\n SearchProvidersParams,\n} from \"./config-service.types\";\n\nfunction filterByQuery<T extends { name: string }>(\n items: T[],\n query?: string,\n): T[] {\n if (!query) {\n return items;\n }\n\n const normalizedQuery = query.toLowerCase();\n return items.filter((item) =>\n item.name.toLowerCase().includes(normalizedQuery),\n );\n}\n\nfunction filterByVerified<T extends { verified: boolean }>(\n items: T[],\n verified?: boolean,\n): T[] {\n if (verified === undefined) {\n return items;\n }\n\n return items.filter((item) => item.verified === verified);\n}\n\nfunction limitItems<T>(items: T[], limit?: number): T[] {\n if (!limit || limit <= 0) {\n return items;\n }\n\n return items.slice(0, limit);\n}\n\nfunction buildCloudQueryString(\n params: Record<string, string | number | boolean | undefined>,\n): string {\n const qs = new URLSearchParams();\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined) qs.set(key, String(value));\n }\n const str = qs.toString();\n return str ? `?${str}` : \"\";\n}\n\nclass ConfigService {\n /**\n * @param verifiedByProvider - Pre-fetched verified-models map used by the\n * local reconstruction path. Ignored for cloud backends, which call\n * `/api/v1/config/models/search` directly (verified status is embedded in\n * each returned item).\n */\n static async searchModels(\n params: SearchModelsParams = {},\n verifiedByProvider?: Record<string, string[]>,\n ): Promise<LLMModelPage> {\n const active = getActiveBackend();\n\n if (active.backend.kind === \"cloud\") {\n // Cloud exposes /api/v1/config/models/search which returns LLMModelPage directly.\n // verifiedByProvider is not needed — the cloud API embeds verified status natively.\n const qs = buildCloudQueryString({\n page_id: params.page_id,\n limit: params.limit,\n query: params.query,\n verified__eq: params.verified__eq,\n provider__eq: params.provider__eq,\n });\n return callCloudProxy<LLMModelPage>({\n backend: active.backend,\n method: \"GET\",\n path: `/api/v1/config/models/search${qs}`,\n });\n }\n\n const llmClient = new LLMMetadataClient(getAgentServerClientOptions());\n const verifiedFetch =\n verifiedByProvider !== undefined\n ? Promise.resolve(verifiedByProvider)\n : llmClient.getVerifiedModels();\n const [models, verifiedMap] = await Promise.all([\n llmClient.getModels(),\n verifiedFetch,\n ]);\n\n const provider = params.provider__eq ?? null;\n const verifiedNames = new Set(\n provider ? (verifiedMap?.[provider] ?? []) : [],\n );\n // The local agent-server has no model database, so it exposes no free /\n // default metadata; both are always false here. Cloud backends embed the\n // DB-driven flags natively on each item (handled above).\n const verifiedItems: LLMModel[] = [...verifiedNames].map((name) => ({\n provider,\n name,\n verified: true,\n free: false,\n default: false,\n }));\n\n const prefixedItems: LLMModel[] = provider\n ? (models ?? [])\n .filter((model) => model.startsWith(`${provider}/`))\n .map((model) => model.slice(provider.length + 1))\n .filter((name) => name.length > 0 && !verifiedNames.has(name))\n .map((name) => ({\n provider,\n name,\n verified: false,\n free: false,\n default: false,\n }))\n : [];\n\n const items = limitItems(\n filterByVerified(\n filterByQuery([...verifiedItems, ...prefixedItems], params.query),\n params.verified__eq,\n ),\n params.limit,\n );\n\n return { items, next_page_id: null };\n }\n\n /**\n * @param verifiedByProvider - Pre-fetched verified-models map used by the\n * local reconstruction path. Ignored for cloud backends, which call\n * `/api/v1/config/providers/search` directly (verified status is embedded in\n * each returned item).\n */\n static async searchProviders(\n params: SearchProvidersParams = {},\n verifiedByProvider?: Record<string, string[]>,\n ): Promise<ProviderPage> {\n const active = getActiveBackend();\n\n if (active.backend.kind === \"cloud\") {\n // Cloud exposes /api/v1/config/providers/search which returns ProviderPage directly.\n // verifiedByProvider is not needed — the cloud API embeds verified status natively.\n const qs = buildCloudQueryString({\n page_id: params.page_id,\n limit: params.limit,\n query: params.query,\n verified__eq: params.verified__eq,\n });\n return callCloudProxy<ProviderPage>({\n backend: active.backend,\n method: \"GET\",\n path: `/api/v1/config/providers/search${qs}`,\n });\n }\n\n const llmClient = new LLMMetadataClient(getAgentServerClientOptions());\n const verifiedFetch =\n verifiedByProvider !== undefined\n ? Promise.resolve(verifiedByProvider)\n : llmClient.getVerifiedModels();\n const [providers, verifiedMap] = await Promise.all([\n llmClient.getProviders(),\n verifiedFetch,\n ]);\n\n const verifiedProviders = new Set(Object.keys(verifiedMap ?? {}));\n const names = new Set<string>([...verifiedProviders, ...(providers ?? [])]);\n const providerItems: LLMProvider[] = [...names].map((name) => ({\n name,\n verified: verifiedProviders.has(name),\n }));\n\n const items = limitItems(\n filterByVerified(\n filterByQuery(providerItems, params.query),\n params.verified__eq,\n ),\n params.limit,\n );\n\n return { items, next_page_id: null };\n }\n}\n\nexport default ConfigService;\n"],"mappings":"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"}
@@ -41,11 +41,15 @@ var c = class {
41
41
  let d = new e(n()), f = l === void 0 ? d.getVerifiedModels() : Promise.resolve(l), [p, m] = await Promise.all([d.getModels(), f]), h = c.provider__eq ?? null, g = new Set(h ? m?.[h] ?? [] : []), _ = [...g].map((e) => ({
42
42
  provider: h,
43
43
  name: e,
44
- verified: !0
44
+ verified: !0,
45
+ free: !1,
46
+ default: !1
45
47
  })), v = h ? (p ?? []).filter((e) => e.startsWith(`${h}/`)).map((e) => e.slice(h.length + 1)).filter((e) => e.length > 0 && !g.has(e)).map((e) => ({
46
48
  provider: h,
47
49
  name: e,
48
- verified: !1
50
+ verified: !1,
51
+ free: !1,
52
+ default: !1
49
53
  })) : [];
50
54
  return {
51
55
  items: o(a(i([..._, ...v], c.query), c.verified__eq), c.limit),
@@ -1 +1 @@
1
- {"version":3,"file":"config-service.api.js","names":[],"sources":["../../../src/api/config-service/config-service.api.ts"],"sourcesContent":["import { LLMMetadataClient } from \"@openhands/typescript-client/clients\";\nimport { getAgentServerClientOptions } from \"../agent-server-client-options\";\nimport { getActiveBackend } from \"../backend-registry/active-store\";\nimport { callCloudProxy } from \"../cloud/proxy\";\nimport type {\n LLMModel,\n LLMModelPage,\n LLMProvider,\n ProviderPage,\n SearchModelsParams,\n SearchProvidersParams,\n} from \"./config-service.types\";\n\nfunction filterByQuery<T extends { name: string }>(\n items: T[],\n query?: string,\n): T[] {\n if (!query) {\n return items;\n }\n\n const normalizedQuery = query.toLowerCase();\n return items.filter((item) =>\n item.name.toLowerCase().includes(normalizedQuery),\n );\n}\n\nfunction filterByVerified<T extends { verified: boolean }>(\n items: T[],\n verified?: boolean,\n): T[] {\n if (verified === undefined) {\n return items;\n }\n\n return items.filter((item) => item.verified === verified);\n}\n\nfunction limitItems<T>(items: T[], limit?: number): T[] {\n if (!limit || limit <= 0) {\n return items;\n }\n\n return items.slice(0, limit);\n}\n\nfunction buildCloudQueryString(\n params: Record<string, string | number | boolean | undefined>,\n): string {\n const qs = new URLSearchParams();\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined) qs.set(key, String(value));\n }\n const str = qs.toString();\n return str ? `?${str}` : \"\";\n}\n\nclass ConfigService {\n /**\n * @param verifiedByProvider - Pre-fetched verified-models map used by the\n * local reconstruction path. Ignored for cloud backends, which call\n * `/api/v1/config/models/search` directly (verified status is embedded in\n * each returned item).\n */\n static async searchModels(\n params: SearchModelsParams = {},\n verifiedByProvider?: Record<string, string[]>,\n ): Promise<LLMModelPage> {\n const active = getActiveBackend();\n\n if (active.backend.kind === \"cloud\") {\n // Cloud exposes /api/v1/config/models/search which returns LLMModelPage directly.\n // verifiedByProvider is not needed — the cloud API embeds verified status natively.\n const qs = buildCloudQueryString({\n page_id: params.page_id,\n limit: params.limit,\n query: params.query,\n verified__eq: params.verified__eq,\n provider__eq: params.provider__eq,\n });\n return callCloudProxy<LLMModelPage>({\n backend: active.backend,\n method: \"GET\",\n path: `/api/v1/config/models/search${qs}`,\n });\n }\n\n const llmClient = new LLMMetadataClient(getAgentServerClientOptions());\n const verifiedFetch =\n verifiedByProvider !== undefined\n ? Promise.resolve(verifiedByProvider)\n : llmClient.getVerifiedModels();\n const [models, verifiedMap] = await Promise.all([\n llmClient.getModels(),\n verifiedFetch,\n ]);\n\n const provider = params.provider__eq ?? null;\n const verifiedNames = new Set(\n provider ? (verifiedMap?.[provider] ?? []) : [],\n );\n const verifiedItems: LLMModel[] = [...verifiedNames].map((name) => ({\n provider,\n name,\n verified: true,\n }));\n\n const prefixedItems: LLMModel[] = provider\n ? (models ?? [])\n .filter((model) => model.startsWith(`${provider}/`))\n .map((model) => model.slice(provider.length + 1))\n .filter((name) => name.length > 0 && !verifiedNames.has(name))\n .map((name) => ({\n provider,\n name,\n verified: false,\n }))\n : [];\n\n const items = limitItems(\n filterByVerified(\n filterByQuery([...verifiedItems, ...prefixedItems], params.query),\n params.verified__eq,\n ),\n params.limit,\n );\n\n return { items, next_page_id: null };\n }\n\n /**\n * @param verifiedByProvider - Pre-fetched verified-models map used by the\n * local reconstruction path. Ignored for cloud backends, which call\n * `/api/v1/config/providers/search` directly (verified status is embedded in\n * each returned item).\n */\n static async searchProviders(\n params: SearchProvidersParams = {},\n verifiedByProvider?: Record<string, string[]>,\n ): Promise<ProviderPage> {\n const active = getActiveBackend();\n\n if (active.backend.kind === \"cloud\") {\n // Cloud exposes /api/v1/config/providers/search which returns ProviderPage directly.\n // verifiedByProvider is not needed — the cloud API embeds verified status natively.\n const qs = buildCloudQueryString({\n page_id: params.page_id,\n limit: params.limit,\n query: params.query,\n verified__eq: params.verified__eq,\n });\n return callCloudProxy<ProviderPage>({\n backend: active.backend,\n method: \"GET\",\n path: `/api/v1/config/providers/search${qs}`,\n });\n }\n\n const llmClient = new LLMMetadataClient(getAgentServerClientOptions());\n const verifiedFetch =\n verifiedByProvider !== undefined\n ? Promise.resolve(verifiedByProvider)\n : llmClient.getVerifiedModels();\n const [providers, verifiedMap] = await Promise.all([\n llmClient.getProviders(),\n verifiedFetch,\n ]);\n\n const verifiedProviders = new Set(Object.keys(verifiedMap ?? {}));\n const names = new Set<string>([...verifiedProviders, ...(providers ?? [])]);\n const providerItems: LLMProvider[] = [...names].map((name) => ({\n name,\n verified: verifiedProviders.has(name),\n }));\n\n const items = limitItems(\n filterByVerified(\n filterByQuery(providerItems, params.query),\n params.verified__eq,\n ),\n params.limit,\n );\n\n return { items, next_page_id: null };\n }\n}\n\nexport default ConfigService;\n"],"mappings":"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"}
1
+ {"version":3,"file":"config-service.api.js","names":[],"sources":["../../../src/api/config-service/config-service.api.ts"],"sourcesContent":["import { LLMMetadataClient } from \"@openhands/typescript-client/clients\";\nimport { getAgentServerClientOptions } from \"../agent-server-client-options\";\nimport { getActiveBackend } from \"../backend-registry/active-store\";\nimport { callCloudProxy } from \"../cloud/proxy\";\nimport type {\n LLMModel,\n LLMModelPage,\n LLMProvider,\n ProviderPage,\n SearchModelsParams,\n SearchProvidersParams,\n} from \"./config-service.types\";\n\nfunction filterByQuery<T extends { name: string }>(\n items: T[],\n query?: string,\n): T[] {\n if (!query) {\n return items;\n }\n\n const normalizedQuery = query.toLowerCase();\n return items.filter((item) =>\n item.name.toLowerCase().includes(normalizedQuery),\n );\n}\n\nfunction filterByVerified<T extends { verified: boolean }>(\n items: T[],\n verified?: boolean,\n): T[] {\n if (verified === undefined) {\n return items;\n }\n\n return items.filter((item) => item.verified === verified);\n}\n\nfunction limitItems<T>(items: T[], limit?: number): T[] {\n if (!limit || limit <= 0) {\n return items;\n }\n\n return items.slice(0, limit);\n}\n\nfunction buildCloudQueryString(\n params: Record<string, string | number | boolean | undefined>,\n): string {\n const qs = new URLSearchParams();\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined) qs.set(key, String(value));\n }\n const str = qs.toString();\n return str ? `?${str}` : \"\";\n}\n\nclass ConfigService {\n /**\n * @param verifiedByProvider - Pre-fetched verified-models map used by the\n * local reconstruction path. Ignored for cloud backends, which call\n * `/api/v1/config/models/search` directly (verified status is embedded in\n * each returned item).\n */\n static async searchModels(\n params: SearchModelsParams = {},\n verifiedByProvider?: Record<string, string[]>,\n ): Promise<LLMModelPage> {\n const active = getActiveBackend();\n\n if (active.backend.kind === \"cloud\") {\n // Cloud exposes /api/v1/config/models/search which returns LLMModelPage directly.\n // verifiedByProvider is not needed — the cloud API embeds verified status natively.\n const qs = buildCloudQueryString({\n page_id: params.page_id,\n limit: params.limit,\n query: params.query,\n verified__eq: params.verified__eq,\n provider__eq: params.provider__eq,\n });\n return callCloudProxy<LLMModelPage>({\n backend: active.backend,\n method: \"GET\",\n path: `/api/v1/config/models/search${qs}`,\n });\n }\n\n const llmClient = new LLMMetadataClient(getAgentServerClientOptions());\n const verifiedFetch =\n verifiedByProvider !== undefined\n ? Promise.resolve(verifiedByProvider)\n : llmClient.getVerifiedModels();\n const [models, verifiedMap] = await Promise.all([\n llmClient.getModels(),\n verifiedFetch,\n ]);\n\n const provider = params.provider__eq ?? null;\n const verifiedNames = new Set(\n provider ? (verifiedMap?.[provider] ?? []) : [],\n );\n // The local agent-server has no model database, so it exposes no free /\n // default metadata; both are always false here. Cloud backends embed the\n // DB-driven flags natively on each item (handled above).\n const verifiedItems: LLMModel[] = [...verifiedNames].map((name) => ({\n provider,\n name,\n verified: true,\n free: false,\n default: false,\n }));\n\n const prefixedItems: LLMModel[] = provider\n ? (models ?? [])\n .filter((model) => model.startsWith(`${provider}/`))\n .map((model) => model.slice(provider.length + 1))\n .filter((name) => name.length > 0 && !verifiedNames.has(name))\n .map((name) => ({\n provider,\n name,\n verified: false,\n free: false,\n default: false,\n }))\n : [];\n\n const items = limitItems(\n filterByVerified(\n filterByQuery([...verifiedItems, ...prefixedItems], params.query),\n params.verified__eq,\n ),\n params.limit,\n );\n\n return { items, next_page_id: null };\n }\n\n /**\n * @param verifiedByProvider - Pre-fetched verified-models map used by the\n * local reconstruction path. Ignored for cloud backends, which call\n * `/api/v1/config/providers/search` directly (verified status is embedded in\n * each returned item).\n */\n static async searchProviders(\n params: SearchProvidersParams = {},\n verifiedByProvider?: Record<string, string[]>,\n ): Promise<ProviderPage> {\n const active = getActiveBackend();\n\n if (active.backend.kind === \"cloud\") {\n // Cloud exposes /api/v1/config/providers/search which returns ProviderPage directly.\n // verifiedByProvider is not needed — the cloud API embeds verified status natively.\n const qs = buildCloudQueryString({\n page_id: params.page_id,\n limit: params.limit,\n query: params.query,\n verified__eq: params.verified__eq,\n });\n return callCloudProxy<ProviderPage>({\n backend: active.backend,\n method: \"GET\",\n path: `/api/v1/config/providers/search${qs}`,\n });\n }\n\n const llmClient = new LLMMetadataClient(getAgentServerClientOptions());\n const verifiedFetch =\n verifiedByProvider !== undefined\n ? Promise.resolve(verifiedByProvider)\n : llmClient.getVerifiedModels();\n const [providers, verifiedMap] = await Promise.all([\n llmClient.getProviders(),\n verifiedFetch,\n ]);\n\n const verifiedProviders = new Set(Object.keys(verifiedMap ?? {}));\n const names = new Set<string>([...verifiedProviders, ...(providers ?? [])]);\n const providerItems: LLMProvider[] = [...names].map((name) => ({\n name,\n verified: verifiedProviders.has(name),\n }));\n\n const items = limitItems(\n filterByVerified(\n filterByQuery(providerItems, params.query),\n params.verified__eq,\n ),\n params.limit,\n );\n\n return { items, next_page_id: null };\n }\n}\n\nexport default ConfigService;\n"],"mappings":"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"}
@@ -3,6 +3,19 @@ export interface LLMModel {
3
3
  provider: string | null;
4
4
  name: string;
5
5
  verified: boolean;
6
+ /**
7
+ * Whether the model is free to use on the OpenHands provider. Mirrors
8
+ * `verified`: it is populated by the backend model list (DB-driven on
9
+ * cloud) and defaults to `false` where no free metadata exists (e.g. the
10
+ * local agent-server reconstruction path, which has no model database).
11
+ */
12
+ free: boolean;
13
+ /**
14
+ * Whether this is the provider's default model. Mirrors `free`: DB-driven on
15
+ * cloud, `false` where no default metadata exists. Used to preselect the
16
+ * model on onboarding and when creating a new model for the provider.
17
+ */
18
+ default: boolean;
6
19
  }
7
20
  export interface LLMModelPage {
8
21
  items: LLMModel[];
@@ -1,2 +1,2 @@
1
- require("../_virtual/_rolldown/runtime.cjs");var e=`openhands-agent-server-conversation-metadata`,t=e=>({source:e.source,ref:e.ref??null,repo_path:e.repo_path??null}),n=()=>{if(typeof window>`u`)return{};try{let t=window.localStorage.getItem(e);if(!t)return{};let n=JSON.parse(t);return!n||typeof n!=`object`?{}:n}catch{return{}}},r=t=>{if(!(typeof window>`u`)){if(Object.keys(t).length===0){window.localStorage.removeItem(e);return}window.localStorage.setItem(e,JSON.stringify(t))}},i=e=>n()[e]??null,a=(e,t)=>{let i=n();i[e]=t,r(i)},o=e=>{let t=n();e in t&&(delete t[e],r(t))};exports.getStoredConversationMetadata=i,exports.removeStoredConversationMetadata=o,exports.setStoredConversationMetadata=a,exports.toPluginCoordinates=t;
1
+ require("../_virtual/_rolldown/runtime.cjs");var e=`openhands-agent-server-conversation-metadata`,t=e=>({source:e.source,ref:e.ref??null,repo_path:e.repo_path??null}),n=()=>{if(typeof window>`u`)return{};try{let t=window.localStorage.getItem(e);if(!t)return{};let n=JSON.parse(t);return!n||typeof n!=`object`?{}:n}catch{return{}}},r=t=>{if(!(typeof window>`u`)){if(Object.keys(t).length===0){window.localStorage.removeItem(e);return}window.localStorage.setItem(e,JSON.stringify(t))}},i=e=>n()[e]??null,a=(e,t)=>{let i=n();i[e]=t,r(i)},o=(e,t)=>{a(e,{selected_repository:null,selected_branch:null,git_provider:null,...i(e)??{},...t})},s=e=>{let t=n();e in t&&(delete t[e],r(t))};exports.getStoredConversationMetadata=i,exports.mergeStoredConversationMetadata=o,exports.removeStoredConversationMetadata=s,exports.setStoredConversationMetadata=a,exports.toPluginCoordinates=t;
2
2
  //# sourceMappingURL=conversation-metadata-store.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"conversation-metadata-store.cjs","names":[],"sources":["../../src/api/conversation-metadata-store.ts"],"sourcesContent":["import { Provider } from \"#/types/settings\";\nimport type { PluginSpec } from \"#/api/conversation-service/agent-server-conversation-service.types\";\n\nconst STORAGE_KEY = \"openhands-agent-server-conversation-metadata\";\n\nexport type WorkspaceMode = \"local_repo\" | \"new_worktree\";\n\nexport interface ConversationMetadata {\n selected_repository: string | null;\n selected_branch: string | null;\n git_provider: Provider | null;\n /**\n * The local workspace path the user explicitly attached at conversation\n * creation time. Distinct from `selected_repository` (which is set by\n * the repo picker on the home page). Used by the Files tab to decide\n * whether to default to diff view: if the user attached *anything*\n * (repo or local workspace), we lean diff-first because there's a real\n * git baseline to compare against.\n */\n selected_workspace?: string | null;\n /**\n * How the conversation should use `selected_workspace`.\n *\n * `local_repo` means the runtime should operate directly in the selected\n * folder, even when it is not a git checkout. `new_worktree` preserves the\n * historical agent-server behavior for conversations that should start in a\n * generated per-conversation worktree.\n */\n workspace_mode?: WorkspaceMode | null;\n /**\n * The LLM profile the conversation was created with (or last switched to).\n * Client-side only. Lets the chat-header switcher show the exact profile\n * name even when several profiles share the same underlying model — the\n * agent-server only round-trips the model string, so matching on it alone\n * is ambiguous (issue #1082).\n */\n active_profile?: string | null;\n /** Store plugin coordinates only; parameters may contain secrets. */\n plugins?: PluginSpec[] | null;\n}\n\nexport const toPluginCoordinates = (plugin: PluginSpec): PluginSpec => ({\n source: plugin.source,\n ref: plugin.ref ?? null,\n repo_path: plugin.repo_path ?? null,\n});\n\ntype StoredMetadata = Record<string, ConversationMetadata>;\n\nconst readAll = (): StoredMetadata => {\n if (typeof window === \"undefined\") return {};\n try {\n const raw = window.localStorage.getItem(STORAGE_KEY);\n if (!raw) return {};\n const parsed = JSON.parse(raw) as unknown;\n if (!parsed || typeof parsed !== \"object\") return {};\n return parsed as StoredMetadata;\n } catch {\n return {};\n }\n};\n\nconst writeAll = (next: StoredMetadata): void => {\n if (typeof window === \"undefined\") return;\n if (Object.keys(next).length === 0) {\n window.localStorage.removeItem(STORAGE_KEY);\n return;\n }\n window.localStorage.setItem(STORAGE_KEY, JSON.stringify(next));\n};\n\nexport const getStoredConversationMetadata = (\n conversationId: string,\n): ConversationMetadata | null => readAll()[conversationId] ?? null;\n\nexport const setStoredConversationMetadata = (\n conversationId: string,\n metadata: ConversationMetadata,\n): void => {\n const all = readAll();\n all[conversationId] = metadata;\n writeAll(all);\n};\n\nexport const removeStoredConversationMetadata = (\n conversationId: string,\n): void => {\n const all = readAll();\n if (!(conversationId in all)) return;\n delete all[conversationId];\n writeAll(all);\n};\n"],"mappings":"6CAGA,IAAM,EAAc,+CAsCP,EAAuB,IAAoC,CACtE,OAAQ,EAAO,OACf,IAAK,EAAO,KAAO,KACnB,UAAW,EAAO,WAAa,IACjC,GAIM,MAAgC,CACpC,GAAI,OAAO,OAAW,IAAa,MAAO,CAAC,EAC3C,GAAI,CACF,IAAM,EAAM,OAAO,aAAa,QAAQ,CAAW,EACnD,GAAI,CAAC,EAAK,MAAO,CAAC,EAClB,IAAM,EAAS,KAAK,MAAM,CAAG,EAE7B,MADI,CAAC,GAAU,OAAO,GAAW,SAAiB,CAAC,EAC5C,CACT,MAAQ,CACN,MAAO,CAAC,CACV,CACF,EAEM,EAAY,GAA+B,CAC3C,YAAO,OAAW,KACtB,IAAI,OAAO,KAAK,CAAI,EAAE,SAAW,EAAG,CAClC,OAAO,aAAa,WAAW,CAAW,EAC1C,MACF,CACA,OAAO,aAAa,QAAQ,EAAa,KAAK,UAAU,CAAI,CAAC,CAD7D,CAEF,EAEa,EACX,GACgC,EAAQ,EAAE,IAAmB,KAElD,GACX,EACA,IACS,CACT,IAAM,EAAM,EAAQ,EACpB,EAAI,GAAkB,EACtB,EAAS,CAAG,CACd,EAEa,EACX,GACS,CACT,IAAM,EAAM,EAAQ,EACd,KAAkB,IACxB,OAAO,EAAI,GACX,EAAS,CAAG,EACd"}
1
+ {"version":3,"file":"conversation-metadata-store.cjs","names":[],"sources":["../../src/api/conversation-metadata-store.ts"],"sourcesContent":["import { Provider } from \"#/types/settings\";\nimport type { PluginSpec } from \"#/api/conversation-service/agent-server-conversation-service.types\";\n\nconst STORAGE_KEY = \"openhands-agent-server-conversation-metadata\";\n\nexport type WorkspaceMode = \"local_repo\" | \"new_worktree\";\n\nexport interface ConversationMetadata {\n selected_repository: string | null;\n selected_branch: string | null;\n git_provider: Provider | null;\n /**\n * The local workspace path the user explicitly attached at conversation\n * creation time. Distinct from `selected_repository` (which is set by\n * the repo picker on the home page). Used by the Files tab to decide\n * whether to default to diff view: if the user attached *anything*\n * (repo or local workspace), we lean diff-first because there's a real\n * git baseline to compare against.\n */\n selected_workspace?: string | null;\n /**\n * How the conversation should use `selected_workspace`.\n *\n * `local_repo` means the runtime should operate directly in the selected\n * folder, even when it is not a git checkout. `new_worktree` preserves the\n * historical agent-server behavior for conversations that should start in a\n * generated per-conversation worktree.\n */\n workspace_mode?: WorkspaceMode | null;\n /**\n * The LLM profile the conversation was created with (or last switched to).\n * Client-side only. Lets the chat-header switcher show the exact profile\n * name even when several profiles share the same underlying model — the\n * agent-server only round-trips the model string, so matching on it alone\n * is ambiguous (issue #1082).\n */\n active_profile?: string | null;\n /**\n * When `active_profile` was stamped (ISO string). Written by the live\n * WebSocket handler (the observation's server timestamp) and the user\n * `/model` mutation (client clock). The history seed compares the latest\n * SwitchLLM observation's timestamp against this so a reload can repair a\n * missed agent switch without rolling back a newer manual switch — manual\n * `/model` switches go through REST and leave no observation in history.\n * Absent on stamps written before this field existed; treated as older\n * than any observation so the seed can still repair them.\n */\n stamped_at?: string | null;\n /** Store plugin coordinates only; parameters may contain secrets. */\n plugins?: PluginSpec[] | null;\n /**\n * Local-only client-managed planning conversation id. Cloud backends expose\n * real sub-conversations through `sub_conversation_ids`; local agent-server\n * backends do not, so Canvas stores the relationship here.\n */\n local_planning_conversation_id?: string | null;\n}\n\nexport const toPluginCoordinates = (plugin: PluginSpec): PluginSpec => ({\n source: plugin.source,\n ref: plugin.ref ?? null,\n repo_path: plugin.repo_path ?? null,\n});\n\ntype StoredMetadata = Record<string, ConversationMetadata>;\n\nconst readAll = (): StoredMetadata => {\n if (typeof window === \"undefined\") return {};\n try {\n const raw = window.localStorage.getItem(STORAGE_KEY);\n if (!raw) return {};\n const parsed = JSON.parse(raw) as unknown;\n if (!parsed || typeof parsed !== \"object\") return {};\n return parsed as StoredMetadata;\n } catch {\n return {};\n }\n};\n\nconst writeAll = (next: StoredMetadata): void => {\n if (typeof window === \"undefined\") return;\n if (Object.keys(next).length === 0) {\n window.localStorage.removeItem(STORAGE_KEY);\n return;\n }\n window.localStorage.setItem(STORAGE_KEY, JSON.stringify(next));\n};\n\nexport const getStoredConversationMetadata = (\n conversationId: string,\n): ConversationMetadata | null => readAll()[conversationId] ?? null;\n\nexport const setStoredConversationMetadata = (\n conversationId: string,\n metadata: ConversationMetadata,\n): void => {\n const all = readAll();\n all[conversationId] = metadata;\n writeAll(all);\n};\n\n/**\n * Merge `patch` into a conversation's stored metadata, preserving every\n * existing field — `setStoredConversationMetadata` does a full-object\n * replace, which would otherwise silently drop fields the caller doesn't\n * enumerate (e.g. `plugins`).\n */\nexport const mergeStoredConversationMetadata = (\n conversationId: string,\n patch: Partial<ConversationMetadata>,\n): void => {\n setStoredConversationMetadata(conversationId, {\n selected_repository: null,\n selected_branch: null,\n git_provider: null,\n ...(getStoredConversationMetadata(conversationId) ?? {}),\n ...patch,\n });\n};\n\nexport const removeStoredConversationMetadata = (\n conversationId: string,\n): void => {\n const all = readAll();\n if (!(conversationId in all)) return;\n delete all[conversationId];\n writeAll(all);\n};\n"],"mappings":"6CAGA,IAAM,EAAc,+CAuDP,EAAuB,IAAoC,CACtE,OAAQ,EAAO,OACf,IAAK,EAAO,KAAO,KACnB,UAAW,EAAO,WAAa,IACjC,GAIM,MAAgC,CACpC,GAAI,OAAO,OAAW,IAAa,MAAO,CAAC,EAC3C,GAAI,CACF,IAAM,EAAM,OAAO,aAAa,QAAQ,CAAW,EACnD,GAAI,CAAC,EAAK,MAAO,CAAC,EAClB,IAAM,EAAS,KAAK,MAAM,CAAG,EAE7B,MADI,CAAC,GAAU,OAAO,GAAW,SAAiB,CAAC,EAC5C,CACT,MAAQ,CACN,MAAO,CAAC,CACV,CACF,EAEM,EAAY,GAA+B,CAC3C,YAAO,OAAW,KACtB,IAAI,OAAO,KAAK,CAAI,EAAE,SAAW,EAAG,CAClC,OAAO,aAAa,WAAW,CAAW,EAC1C,MACF,CACA,OAAO,aAAa,QAAQ,EAAa,KAAK,UAAU,CAAI,CAAC,CAD7D,CAEF,EAEa,EACX,GACgC,EAAQ,EAAE,IAAmB,KAElD,GACX,EACA,IACS,CACT,IAAM,EAAM,EAAQ,EACpB,EAAI,GAAkB,EACtB,EAAS,CAAG,CACd,EAQa,GACX,EACA,IACS,CACT,EAA8B,EAAgB,CAC5C,oBAAqB,KACrB,gBAAiB,KACjB,aAAc,KACd,GAAI,EAA8B,CAAc,GAAK,CAAC,EACtD,GAAG,CACL,CAAC,CACH,EAEa,EACX,GACS,CACT,IAAM,EAAM,EAAQ,EACd,KAAkB,IACxB,OAAO,EAAI,GACX,EAAS,CAAG,EACd"}
@@ -31,10 +31,34 @@ export interface ConversationMetadata {
31
31
  * is ambiguous (issue #1082).
32
32
  */
33
33
  active_profile?: string | null;
34
+ /**
35
+ * When `active_profile` was stamped (ISO string). Written by the live
36
+ * WebSocket handler (the observation's server timestamp) and the user
37
+ * `/model` mutation (client clock). The history seed compares the latest
38
+ * SwitchLLM observation's timestamp against this so a reload can repair a
39
+ * missed agent switch without rolling back a newer manual switch — manual
40
+ * `/model` switches go through REST and leave no observation in history.
41
+ * Absent on stamps written before this field existed; treated as older
42
+ * than any observation so the seed can still repair them.
43
+ */
44
+ stamped_at?: string | null;
34
45
  /** Store plugin coordinates only; parameters may contain secrets. */
35
46
  plugins?: PluginSpec[] | null;
47
+ /**
48
+ * Local-only client-managed planning conversation id. Cloud backends expose
49
+ * real sub-conversations through `sub_conversation_ids`; local agent-server
50
+ * backends do not, so Canvas stores the relationship here.
51
+ */
52
+ local_planning_conversation_id?: string | null;
36
53
  }
37
54
  export declare const toPluginCoordinates: (plugin: PluginSpec) => PluginSpec;
38
55
  export declare const getStoredConversationMetadata: (conversationId: string) => ConversationMetadata | null;
39
56
  export declare const setStoredConversationMetadata: (conversationId: string, metadata: ConversationMetadata) => void;
57
+ /**
58
+ * Merge `patch` into a conversation's stored metadata, preserving every
59
+ * existing field — `setStoredConversationMetadata` does a full-object
60
+ * replace, which would otherwise silently drop fields the caller doesn't
61
+ * enumerate (e.g. `plugins`).
62
+ */
63
+ export declare const mergeStoredConversationMetadata: (conversationId: string, patch: Partial<ConversationMetadata>) => void;
40
64
  export declare const removeStoredConversationMetadata: (conversationId: string) => void;
@@ -24,11 +24,19 @@ var e = "openhands-agent-server-conversation-metadata", t = (e) => ({
24
24
  }, i = (e) => n()[e] ?? null, a = (e, t) => {
25
25
  let i = n();
26
26
  i[e] = t, r(i);
27
- }, o = (e) => {
27
+ }, o = (e, t) => {
28
+ a(e, {
29
+ selected_repository: null,
30
+ selected_branch: null,
31
+ git_provider: null,
32
+ ...i(e) ?? {},
33
+ ...t
34
+ });
35
+ }, s = (e) => {
28
36
  let t = n();
29
37
  e in t && (delete t[e], r(t));
30
38
  };
31
39
  //#endregion
32
- export { i as getStoredConversationMetadata, o as removeStoredConversationMetadata, a as setStoredConversationMetadata, t as toPluginCoordinates };
40
+ export { i as getStoredConversationMetadata, o as mergeStoredConversationMetadata, s as removeStoredConversationMetadata, a as setStoredConversationMetadata, t as toPluginCoordinates };
33
41
 
34
42
  //# sourceMappingURL=conversation-metadata-store.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"conversation-metadata-store.js","names":[],"sources":["../../src/api/conversation-metadata-store.ts"],"sourcesContent":["import { Provider } from \"#/types/settings\";\nimport type { PluginSpec } from \"#/api/conversation-service/agent-server-conversation-service.types\";\n\nconst STORAGE_KEY = \"openhands-agent-server-conversation-metadata\";\n\nexport type WorkspaceMode = \"local_repo\" | \"new_worktree\";\n\nexport interface ConversationMetadata {\n selected_repository: string | null;\n selected_branch: string | null;\n git_provider: Provider | null;\n /**\n * The local workspace path the user explicitly attached at conversation\n * creation time. Distinct from `selected_repository` (which is set by\n * the repo picker on the home page). Used by the Files tab to decide\n * whether to default to diff view: if the user attached *anything*\n * (repo or local workspace), we lean diff-first because there's a real\n * git baseline to compare against.\n */\n selected_workspace?: string | null;\n /**\n * How the conversation should use `selected_workspace`.\n *\n * `local_repo` means the runtime should operate directly in the selected\n * folder, even when it is not a git checkout. `new_worktree` preserves the\n * historical agent-server behavior for conversations that should start in a\n * generated per-conversation worktree.\n */\n workspace_mode?: WorkspaceMode | null;\n /**\n * The LLM profile the conversation was created with (or last switched to).\n * Client-side only. Lets the chat-header switcher show the exact profile\n * name even when several profiles share the same underlying model — the\n * agent-server only round-trips the model string, so matching on it alone\n * is ambiguous (issue #1082).\n */\n active_profile?: string | null;\n /** Store plugin coordinates only; parameters may contain secrets. */\n plugins?: PluginSpec[] | null;\n}\n\nexport const toPluginCoordinates = (plugin: PluginSpec): PluginSpec => ({\n source: plugin.source,\n ref: plugin.ref ?? null,\n repo_path: plugin.repo_path ?? null,\n});\n\ntype StoredMetadata = Record<string, ConversationMetadata>;\n\nconst readAll = (): StoredMetadata => {\n if (typeof window === \"undefined\") return {};\n try {\n const raw = window.localStorage.getItem(STORAGE_KEY);\n if (!raw) return {};\n const parsed = JSON.parse(raw) as unknown;\n if (!parsed || typeof parsed !== \"object\") return {};\n return parsed as StoredMetadata;\n } catch {\n return {};\n }\n};\n\nconst writeAll = (next: StoredMetadata): void => {\n if (typeof window === \"undefined\") return;\n if (Object.keys(next).length === 0) {\n window.localStorage.removeItem(STORAGE_KEY);\n return;\n }\n window.localStorage.setItem(STORAGE_KEY, JSON.stringify(next));\n};\n\nexport const getStoredConversationMetadata = (\n conversationId: string,\n): ConversationMetadata | null => readAll()[conversationId] ?? null;\n\nexport const setStoredConversationMetadata = (\n conversationId: string,\n metadata: ConversationMetadata,\n): void => {\n const all = readAll();\n all[conversationId] = metadata;\n writeAll(all);\n};\n\nexport const removeStoredConversationMetadata = (\n conversationId: string,\n): void => {\n const all = readAll();\n if (!(conversationId in all)) return;\n delete all[conversationId];\n writeAll(all);\n};\n"],"mappings":";AAGA,IAAM,IAAc,gDAsCP,KAAuB,OAAoC;CACtE,QAAQ,EAAO;CACf,KAAK,EAAO,OAAO;CACnB,WAAW,EAAO,aAAa;AACjC,IAIM,UAAgC;CACpC,IAAI,OAAO,SAAW,KAAa,OAAO,CAAC;CAC3C,IAAI;EACF,IAAM,IAAM,OAAO,aAAa,QAAQ,CAAW;EACnD,IAAI,CAAC,GAAK,OAAO,CAAC;EAClB,IAAM,IAAS,KAAK,MAAM,CAAG;EAE7B,OADI,CAAC,KAAU,OAAO,KAAW,WAAiB,CAAC,IAC5C;CACT,QAAQ;EACN,OAAO,CAAC;CACV;AACF,GAEM,KAAY,MAA+B;CAC3C,aAAO,SAAW,MACtB;MAAI,OAAO,KAAK,CAAI,EAAE,WAAW,GAAG;GAClC,OAAO,aAAa,WAAW,CAAW;GAC1C;EACF;EACA,OAAO,aAAa,QAAQ,GAAa,KAAK,UAAU,CAAI,CAAC;CAD7D;AAEF,GAEa,KACX,MACgC,EAAQ,EAAE,MAAmB,MAElD,KACX,GACA,MACS;CACT,IAAM,IAAM,EAAQ;CAEpB,AADA,EAAI,KAAkB,GACtB,EAAS,CAAG;AACd,GAEa,KACX,MACS;CACT,IAAM,IAAM,EAAQ;CACd,KAAkB,MACxB,OAAO,EAAI,IACX,EAAS,CAAG;AACd"}
1
+ {"version":3,"file":"conversation-metadata-store.js","names":[],"sources":["../../src/api/conversation-metadata-store.ts"],"sourcesContent":["import { Provider } from \"#/types/settings\";\nimport type { PluginSpec } from \"#/api/conversation-service/agent-server-conversation-service.types\";\n\nconst STORAGE_KEY = \"openhands-agent-server-conversation-metadata\";\n\nexport type WorkspaceMode = \"local_repo\" | \"new_worktree\";\n\nexport interface ConversationMetadata {\n selected_repository: string | null;\n selected_branch: string | null;\n git_provider: Provider | null;\n /**\n * The local workspace path the user explicitly attached at conversation\n * creation time. Distinct from `selected_repository` (which is set by\n * the repo picker on the home page). Used by the Files tab to decide\n * whether to default to diff view: if the user attached *anything*\n * (repo or local workspace), we lean diff-first because there's a real\n * git baseline to compare against.\n */\n selected_workspace?: string | null;\n /**\n * How the conversation should use `selected_workspace`.\n *\n * `local_repo` means the runtime should operate directly in the selected\n * folder, even when it is not a git checkout. `new_worktree` preserves the\n * historical agent-server behavior for conversations that should start in a\n * generated per-conversation worktree.\n */\n workspace_mode?: WorkspaceMode | null;\n /**\n * The LLM profile the conversation was created with (or last switched to).\n * Client-side only. Lets the chat-header switcher show the exact profile\n * name even when several profiles share the same underlying model — the\n * agent-server only round-trips the model string, so matching on it alone\n * is ambiguous (issue #1082).\n */\n active_profile?: string | null;\n /**\n * When `active_profile` was stamped (ISO string). Written by the live\n * WebSocket handler (the observation's server timestamp) and the user\n * `/model` mutation (client clock). The history seed compares the latest\n * SwitchLLM observation's timestamp against this so a reload can repair a\n * missed agent switch without rolling back a newer manual switch — manual\n * `/model` switches go through REST and leave no observation in history.\n * Absent on stamps written before this field existed; treated as older\n * than any observation so the seed can still repair them.\n */\n stamped_at?: string | null;\n /** Store plugin coordinates only; parameters may contain secrets. */\n plugins?: PluginSpec[] | null;\n /**\n * Local-only client-managed planning conversation id. Cloud backends expose\n * real sub-conversations through `sub_conversation_ids`; local agent-server\n * backends do not, so Canvas stores the relationship here.\n */\n local_planning_conversation_id?: string | null;\n}\n\nexport const toPluginCoordinates = (plugin: PluginSpec): PluginSpec => ({\n source: plugin.source,\n ref: plugin.ref ?? null,\n repo_path: plugin.repo_path ?? null,\n});\n\ntype StoredMetadata = Record<string, ConversationMetadata>;\n\nconst readAll = (): StoredMetadata => {\n if (typeof window === \"undefined\") return {};\n try {\n const raw = window.localStorage.getItem(STORAGE_KEY);\n if (!raw) return {};\n const parsed = JSON.parse(raw) as unknown;\n if (!parsed || typeof parsed !== \"object\") return {};\n return parsed as StoredMetadata;\n } catch {\n return {};\n }\n};\n\nconst writeAll = (next: StoredMetadata): void => {\n if (typeof window === \"undefined\") return;\n if (Object.keys(next).length === 0) {\n window.localStorage.removeItem(STORAGE_KEY);\n return;\n }\n window.localStorage.setItem(STORAGE_KEY, JSON.stringify(next));\n};\n\nexport const getStoredConversationMetadata = (\n conversationId: string,\n): ConversationMetadata | null => readAll()[conversationId] ?? null;\n\nexport const setStoredConversationMetadata = (\n conversationId: string,\n metadata: ConversationMetadata,\n): void => {\n const all = readAll();\n all[conversationId] = metadata;\n writeAll(all);\n};\n\n/**\n * Merge `patch` into a conversation's stored metadata, preserving every\n * existing field — `setStoredConversationMetadata` does a full-object\n * replace, which would otherwise silently drop fields the caller doesn't\n * enumerate (e.g. `plugins`).\n */\nexport const mergeStoredConversationMetadata = (\n conversationId: string,\n patch: Partial<ConversationMetadata>,\n): void => {\n setStoredConversationMetadata(conversationId, {\n selected_repository: null,\n selected_branch: null,\n git_provider: null,\n ...(getStoredConversationMetadata(conversationId) ?? {}),\n ...patch,\n });\n};\n\nexport const removeStoredConversationMetadata = (\n conversationId: string,\n): void => {\n const all = readAll();\n if (!(conversationId in all)) return;\n delete all[conversationId];\n writeAll(all);\n};\n"],"mappings":";AAGA,IAAM,IAAc,gDAuDP,KAAuB,OAAoC;CACtE,QAAQ,EAAO;CACf,KAAK,EAAO,OAAO;CACnB,WAAW,EAAO,aAAa;AACjC,IAIM,UAAgC;CACpC,IAAI,OAAO,SAAW,KAAa,OAAO,CAAC;CAC3C,IAAI;EACF,IAAM,IAAM,OAAO,aAAa,QAAQ,CAAW;EACnD,IAAI,CAAC,GAAK,OAAO,CAAC;EAClB,IAAM,IAAS,KAAK,MAAM,CAAG;EAE7B,OADI,CAAC,KAAU,OAAO,KAAW,WAAiB,CAAC,IAC5C;CACT,QAAQ;EACN,OAAO,CAAC;CACV;AACF,GAEM,KAAY,MAA+B;CAC3C,aAAO,SAAW,MACtB;MAAI,OAAO,KAAK,CAAI,EAAE,WAAW,GAAG;GAClC,OAAO,aAAa,WAAW,CAAW;GAC1C;EACF;EACA,OAAO,aAAa,QAAQ,GAAa,KAAK,UAAU,CAAI,CAAC;CAD7D;AAEF,GAEa,KACX,MACgC,EAAQ,EAAE,MAAmB,MAElD,KACX,GACA,MACS;CACT,IAAM,IAAM,EAAQ;CAEpB,AADA,EAAI,KAAkB,GACtB,EAAS,CAAG;AACd,GAQa,KACX,GACA,MACS;CACT,EAA8B,GAAgB;EAC5C,qBAAqB;EACrB,iBAAiB;EACjB,cAAc;EACd,GAAI,EAA8B,CAAc,KAAK,CAAC;EACtD,GAAG;CACL,CAAC;AACH,GAEa,KACX,MACS;CACT,IAAM,IAAM,EAAQ;CACd,KAAkB,MACxB,OAAO,EAAI,IACX,EAAS,CAAG;AACd"}
@@ -1,2 +1,2 @@
1
- require("../../_virtual/_rolldown/runtime.cjs");const e=require("../../node_modules/@openhands/typescript-client/dist/client/conversation-client.cjs"),t=require("../../node_modules/@openhands/typescript-client/dist/client/file-client.cjs"),n=require("../../node_modules/@openhands/typescript-client/dist/client/profiles-client.cjs"),r=require("../../node_modules/@openhands/typescript-client/dist/client/vscode-client.cjs");require("../../node_modules/@openhands/typescript-client/dist/clients.cjs");const i=require("../../utils/websocket-url.cjs"),a=require("../agent-server-config.cjs"),o=require("../backend-registry/active-store.cjs"),s=require("../agent-server-client-options.cjs"),c=require("../../services/telemetry.cjs"),l=require("../conversation-metadata-store.cjs"),u=require("../cloud/proxy.cjs"),d=require("../cloud/conversation-service.api.cjs"),f=require("../../node_modules/@openhands/typescript-client/dist/models/conversation.cjs");require("../../node_modules/@openhands/typescript-client/dist/index.cjs");const p=require("../../node_modules/uuid/dist/v4.cjs"),m=require("../agent-server-home.cjs"),h=require("../profiles-service/profiles-service.api.cjs"),g=require("../settings-service/settings-service.api.cjs"),_=require("../agent-server-adapter.cjs"),v=require("../../utils/title-llm-profile.cjs");var y=`1970-01-01T00:00:00.000Z`,b=300*1e3,x=`Unable to load conversations because the selected agent server returned data this UI does not understand. Check the backend URL/session key and update the agent server if needed.`;function S(){return Error(x)}function C(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function w(e){return typeof e==`number`?e:null}function T(e){return typeof e==`number`?e:0}function E(e){return typeof e==`string`?e:null}function D(e,t,n){let r=e[t]??e[n];return typeof r==`string`&&r.trim()?r:y}function O(e){return C(e)?{prompt_tokens:T(e.prompt_tokens),completion_tokens:T(e.completion_tokens),cache_read_tokens:T(e.cache_read_tokens),cache_write_tokens:T(e.cache_write_tokens),context_window:T(e.context_window),per_turn_token:T(e.per_turn_token)}:null}function k(e){return C(e)?{accumulated_cost:w(e.accumulated_cost),max_budget_per_task:w(e.max_budget_per_task),accumulated_token_usage:O(e.accumulated_token_usage)}:null}function A(e){return C(e)?e:null}function j(e){if(!C(e))return null;let t=C(e.llm)?{model:E(e.llm.model)}:null;return{kind:E(e.kind),acp_server:E(e.acp_server),acp_model:E(e.acp_model),llm:t}}function M(e){return C(e)?{working_dir:E(e.working_dir)}:null}function N(e){if(!C(e))return null;let t={};for(let[n,r]of Object.entries(e))typeof r==`string`&&(t[n]=r);return t}function P(e){if(!C(e))return null;let{agent_profile_id:t,revision:n}=e;return typeof t!=`string`||typeof n!=`number`?null:{agent_profile_id:t,revision:n}}function F(e){if(!e.startsWith(`/`))return null;let t=[];for(let n of e.split(`/`))if(n&&n!==`.`)if(n===`..`){if(!t.length)return null;t.pop()}else t.push(n);return`/${t.join(`/`)}`}function I(e,t){let n=F(e),r=F(t);if(!n||!r||n!==r&&!n.startsWith(`${r}/`))throw Error(`Conversation file path must stay inside the workspace`);return n}function L(e){if(!C(e)||typeof e.id!=`string`||!e.id.trim())throw S();return{id:e.id.trim(),title:E(e.title),created_at:D(e,`created_at`,`createdAt`),updated_at:D(e,`updated_at`,`updatedAt`),execution_status:E(e.execution_status),sandbox_status:E(e.sandbox_status),metrics:k(e.metrics),stats:A(e.stats),agent:j(e.agent),workspace:M(e.workspace),tags:N(e.tags),launched_agent_profile:P(e.launched_agent_profile),current_model_id:E(e.current_model_id),current_model_name:E(e.current_model_name)}}function R(e){if(!Array.isArray(e))throw S();return e.map(L)}function z(e){if(Array.isArray(e))return{items:R(e),next_page_id:null};if(!C(e))throw S();return{items:R(e.items),next_page_id:typeof e.next_page_id==`string`?e.next_page_id:null}}var B=new Set([`idle`,`running`,`paused`,`waiting_for_confirmation`,`finished`,`error`,`stuck`]);function V(e){let t=e??`idle`;return B.has(t)?t:`idle`}function H(e,t){if(!e)throw Error(`Conversation ${t} was not found`);return e}var U=class{static async sendMessage(t,n,r){let a=o.getActiveBackend().backend,c=r?.conversationUrl??null,l=r?.sessionApiKey??null;if(a.kind===`cloud`){if(!c||!l){let[e]=await d.batchGetCloudConversations([t]);c=e?.conversation_url?.trim()??null,l=e?.session_api_key?.trim()??null}if(!c||!l)throw Error(`Conversation sandbox is still starting. Wait for it to finish, then try again.`);return await u.callCloudProxy({backend:a,method:`POST`,hostOverride:i.buildHttpBaseUrl(c),path:`/api/conversations/${t}/events`,body:{...n,run:!0},authMode:`session-api-key`,sessionApiKey:l}),n}return await new e.ConversationClient(s.getAgentServerClientOptions({conversationUrl:c,sessionApiKey:l})).sendEvent(t,n,{run:!0}),n}static async createConversation(t={}){let{initialUserMsg:n,conversationInstructions:r,plugins:i,metadata:u,workingDirOverride:f,workspaceMode:y,parentConversationId:x,agentType:S,sandboxId:C,agentProfileId:w,agentProfileKind:T}=t;if(o.getActiveBackend().backend.kind===`cloud`)return d.createCloudAppConversation({initial_message:n?{role:`user`,content:[{type:`text`,text:n}]}:null,title:r??null,selected_repository:u?.selected_repository??null,selected_branch:u?.selected_branch??null,git_provider:u?.git_provider??null,plugins:i??null,parent_conversation_id:x??null,agent_type:S,sandbox_id:C??null,agent_profile_id:w??null,trigger:`gui`});let[E,D]=await Promise.all([g.default.getSettings(),h.default.listProfiles().catch(()=>void 0)]),O=v.resolveTitleLlmProfile(E.title_llm_profile,D),k=p.default(),A=await m.resolveAbsoluteAgentServerPath(f??a.buildConversationWorkingDirForBackend(k,o.getActiveBackend().backend.host)),j=y??(f?`local_repo`:`new_worktree`),M=await _.buildStartConversationRequestWithEncryptedSettings({settings:E,query:n,conversationInstructions:r,plugins:i,conversationId:k,parentConversationId:x,workingDir:A,worktree:j===`new_worktree`,agentProfileId:w,agentProfileKind:T,titleLlmProfile:O}),N=await c.getTelemetryDistinctId(),P=await new e.ConversationClient(s.getAgentServerClientOptions({timeout:b})).createConversation({...M,...N?{user_id:N}:{}}),F=o.getEffectiveLocalBackend();if(!F)throw new s.NoBackendAvailableError;return(u?.selected_repository||f)&&l.setStoredConversationMetadata(P.id,{selected_repository:u?.selected_repository??null,selected_branch:u?.selected_branch??null,git_provider:u?.git_provider??null,selected_workspace:f??null,workspace_mode:j}),{id:P.id,created_by_user_id:null,status:`READY`,detail:null,app_conversation_id:P.id,agent_server_url:F.host,request:{initial_message:M.initial_message,plugins:i??null},created_at:P.created_at,updated_at:P.updated_at}}static async getStartTask(e){return o.getActiveBackend().backend.kind===`cloud`?d.getCloudAppConversationStartTask(e):null}static async getVSCodeUrl(e,t,n){let i=await this.resolveConversationWorkingDir(e);return{vscode_url:await new r.VSCodeClient(s.getAgentServerClientOptions({conversationUrl:t,sessionApiKey:n})).getUrl({baseUrl:typeof window<`u`?window.location.origin:void 0,workspaceDir:i})}}static async getVSCodeStatus(e,t){return new r.VSCodeClient(s.getAgentServerClientOptions({conversationUrl:e,sessionApiKey:t})).getStatus()}static async resolveConversationWorkingDir(e){let[t]=await this.batchGetAppConversations([e]);return t?.workspace?.working_dir??a.getAgentServerWorkingDir()}static async batchGetAppConversations(t){return t.length===0?[]:o.getActiveBackend().backend.kind===`cloud`?d.batchGetCloudConversations(t):R(await new e.ConversationClient(s.getAgentServerClientOptions()).getConversations(t)).map(e=>_.toAppConversation(e))}static async updateConversationPublicFlag(e,t){if(o.getActiveBackend().backend.kind!==`cloud`)throw Error(`Public sharing requires a cloud backend.`);return d.updateCloudConversationPublicFlag(e,t)}static async updateConversationRepository(e,t,n,r){t?l.setStoredConversationMetadata(e,{...l.getStoredConversationMetadata(e)??{},selected_repository:t,selected_branch:n??null,git_provider:r??null}):l.removeStoredConversationMetadata(e);let[i]=await this.batchGetAppConversations([e]);return H(i,e)}static async readConversationFile(e,n){if(o.getActiveBackend().backend.kind===`cloud`)return d.readCloudConversationFile(e,I(n??`/workspace/project/.agents_tmp/PLAN.md`,`/workspace/project`));let r=await this.resolveConversationWorkingDir(e),i=I(n??`${r}/.agents_tmp/PLAN.md`,r);return new t.FileClient(s.getAgentServerClientOptions()).downloadTextFile(i)}static async downloadConversation(e){return o.getActiveBackend().backend.kind===`cloud`?d.downloadCloudConversation(e):new t.FileClient(s.getAgentServerClientOptions()).downloadTrajectory(e)}static async getHooks(e){return _.emptyHooksResponse()}static async getRuntimeConversation(t,n,r){let i=L(await new e.ConversationClient(s.getAgentServerClientOptions({conversationUrl:n,sessionApiKey:r})).getConversation(t));return{id:i.id,title:i.title?.trim()?i.title:_.getDefaultConversationTitle(i.id),metrics:k(i.metrics),created_at:i.created_at,updated_at:i.updated_at,status:V(i.execution_status),stats:i.stats??{usage_to_metrics:{}}}}static async condenseConversation(t,n,r){let a=o.getActiveBackend().backend;if(a.kind===`cloud`&&n){await u.callCloudProxy({backend:a,method:`POST`,hostOverride:i.buildHttpBaseUrl(n),path:`/api/conversations/${t}/condense`,authMode:`session-api-key`,sessionApiKey:r});return}await new e.ConversationClient(s.getAgentServerClientOptions({conversationUrl:n,sessionApiKey:r})).condenseConversation(t)}static async searchConversations(t=20,n){return o.getActiveBackend().backend.kind===`cloud`?d.searchCloudConversations(t,n):_.toConversationPage(z(await new e.ConversationClient(s.getAgentServerClientOptions()).searchConversations({limit:t,page_id:n,sort_order:f.ConversationSortOrder.UPDATED_AT_DESC})))}static async deleteConversation(t){o.getActiveBackend().backend.kind===`cloud`?await d.deleteCloudConversation(t):await new e.ConversationClient(s.getAgentServerClientOptions()).deleteConversation(t),l.removeStoredConversationMetadata(t)}static async updateConversationTitle(t,n){if(o.getActiveBackend().backend.kind===`cloud`)return d.updateCloudConversationTitle(t,n);await new e.ConversationClient(s.getAgentServerClientOptions()).updateConversation(t,{title:n});let[r]=await this.batchGetAppConversations([t]);return H(r,t)}static async forkConversation(t,n,r){if(o.getActiveBackend().backend.kind===`cloud`)throw Error(`Branching a conversation isn't supported on the cloud backend yet.`);let i=await new e.ConversationClient(s.getAgentServerClientOptions()).forkConversation(t,{from_event_id:n,...r?{title:r}:{}}),a=l.getStoredConversationMetadata(t);return a&&l.setStoredConversationMetadata(i.id,a),i}static async getEventParentId(t,n){return(await new e.ConversationClient(s.getAgentServerClientOptions()).getEvent(t,n)).parent_id??void 0}static async switchProfile(t,r){let{backend:i}=o.getActiveBackend();if(i.kind===`cloud`){if(!t){await h.default.activateProfile(r);return}await u.callCloudProxy({backend:i,method:`POST`,path:`/api/v1/app-conversations/${t}/switch_profile`,body:{profile_name:r}});return}if(!t){await new n.ProfilesClient(s.getAgentServerClientOptions()).activateProfile(r);return}let a=s.getAgentServerClientOptions(),c=new e.ConversationClient(a),l=await new n.ProfilesClient(a).getProfile(r,{exposeSecrets:`encrypted`}),d=typeof l.config.model==`string`?l.config.model:``;if(!d)throw Error(`Profile '${r}' has no model.`);await _.assertSubscriptionAuthReady({llm:l.config}),await c.switchLLM(t,{...l.config,model:d,stream:!0,usage_id:`profile:${r}:${p.default()}`})}static async switchAcpModel(t,n){let{backend:r}=o.getActiveBackend();if(r.kind===`cloud`){await u.callCloudProxy({backend:r,method:`POST`,path:`/api/v1/app-conversations/${t}/switch_acp_model`,body:{model:n}});return}await new e.ConversationClient(s.getAgentServerClientOptions()).switchAcpModel(t,n)}};exports.default=U;
1
+ require("../../_virtual/_rolldown/runtime.cjs");const e=require("../../node_modules/@openhands/typescript-client/dist/client/conversation-client.cjs"),t=require("../../node_modules/@openhands/typescript-client/dist/client/file-client.cjs"),n=require("../../node_modules/@openhands/typescript-client/dist/client/profiles-client.cjs"),r=require("../../node_modules/@openhands/typescript-client/dist/client/vscode-client.cjs");require("../../node_modules/@openhands/typescript-client/dist/clients.cjs");const i=require("../../utils/websocket-url.cjs"),a=require("../agent-server-config.cjs"),o=require("../backend-registry/active-store.cjs"),s=require("../agent-server-client-options.cjs"),c=require("../../services/telemetry.cjs"),l=require("../conversation-metadata-store.cjs"),u=require("../cloud/proxy.cjs"),d=require("../cloud/conversation-service.api.cjs"),f=require("../../node_modules/@openhands/typescript-client/dist/models/conversation.cjs");require("../../node_modules/@openhands/typescript-client/dist/index.cjs");const p=require("../../node_modules/uuid/dist/v4.cjs"),m=require("../agent-server-home.cjs"),h=require("../profiles-service/profiles-service.api.cjs"),g=require("../settings-service/settings-service.api.cjs"),_=require("../../utils/plan-file.cjs"),v=require("../agent-server-adapter.cjs"),y=require("../../utils/title-llm-profile.cjs");var b=`1970-01-01T00:00:00.000Z`,x=300*1e3,S=`Unable to load conversations because the selected agent server returned data this UI does not understand. Check the backend URL/session key and update the agent server if needed.`;function C(){return Error(S)}function w(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function T(e){return typeof e==`number`?e:null}function E(e){return typeof e==`number`?e:0}function D(e){return typeof e==`string`?e:null}function O(e,t,n){let r=e[t]??e[n];return typeof r==`string`&&r.trim()?r:b}function k(e){return w(e)?{prompt_tokens:E(e.prompt_tokens),completion_tokens:E(e.completion_tokens),cache_read_tokens:E(e.cache_read_tokens),cache_write_tokens:E(e.cache_write_tokens),context_window:E(e.context_window),per_turn_token:E(e.per_turn_token)}:null}function A(e){return w(e)?{accumulated_cost:T(e.accumulated_cost),max_budget_per_task:T(e.max_budget_per_task),accumulated_token_usage:k(e.accumulated_token_usage)}:null}function j(e){return w(e)?e:null}function M(e){if(!w(e))return null;let t=w(e.llm)?{model:D(e.llm.model)}:null;return{kind:D(e.kind),acp_server:D(e.acp_server),acp_model:D(e.acp_model),llm:t}}function N(e){return w(e)?{working_dir:D(e.working_dir)}:null}function P(e){if(!w(e))return null;let t={};for(let[n,r]of Object.entries(e))typeof r==`string`&&(t[n]=r);return t}function F(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`):null}function I(e){if(!w(e))return null;let{agent_profile_id:t,revision:n}=e;return typeof t!=`string`||typeof n!=`number`?null:{agent_profile_id:t,revision:n}}function L(e){if(!e.startsWith(`/`))return null;let t=[];for(let n of e.split(`/`))if(n&&n!==`.`)if(n===`..`){if(!t.length)return null;t.pop()}else t.push(n);return`/${t.join(`/`)}`}function R(e,t){let n=L(e),r=L(t);if(!n||!r||n!==r&&!n.startsWith(`${r}/`))throw Error(`Conversation file path must stay inside the workspace`);return n}function z(e){if(!w(e)||typeof e.id!=`string`||!e.id.trim())throw C();return{id:e.id.trim(),title:D(e.title),created_at:O(e,`created_at`,`createdAt`),updated_at:O(e,`updated_at`,`updatedAt`),execution_status:D(e.execution_status),sandbox_status:D(e.sandbox_status),metrics:A(e.metrics),stats:j(e.stats),agent:M(e.agent),workspace:N(e.workspace),tags:P(e.tags),launched_agent_profile:I(e.launched_agent_profile),sub_conversation_ids:F(e.sub_conversation_ids),current_model_id:D(e.current_model_id),current_model_name:D(e.current_model_name)}}function B(e){if(!Array.isArray(e))throw C();return e.map(z)}function V(e){if(Array.isArray(e))return{items:B(e),next_page_id:null};if(!w(e))throw C();return{items:B(e.items),next_page_id:typeof e.next_page_id==`string`?e.next_page_id:null}}var H=new Set([`idle`,`running`,`paused`,`waiting_for_confirmation`,`finished`,`error`,`stuck`]);function U(e){let t=e??`idle`;return H.has(t)?t:`idle`}function W(e,t){if(!e)throw Error(`Conversation ${t} was not found`);return e}var G=class{static async sendMessage(t,n,r){let a=o.getActiveBackend().backend,c=r?.conversationUrl??null,l=r?.sessionApiKey??null;if(a.kind===`cloud`){if(!c||!l){let[e]=await d.batchGetCloudConversations([t]);c=e?.conversation_url?.trim()??null,l=e?.session_api_key?.trim()??null}if(!c||!l)throw Error(`Conversation sandbox is still starting. Wait for it to finish, then try again.`);return await u.callCloudProxy({backend:a,method:`POST`,hostOverride:i.buildHttpBaseUrl(c),path:`/api/conversations/${t}/events`,body:{...n,run:!0},authMode:`session-api-key`,sessionApiKey:l}),n}return await new e.ConversationClient(s.getAgentServerClientOptions({conversationUrl:c,sessionApiKey:l})).sendEvent(t,n,{run:!0}),n}static async createConversation(t={}){let{initialUserMsg:n,conversationInstructions:r,plugins:i,metadata:u,workingDirOverride:f,workspaceMode:_,parentConversationId:b,agentType:S,sandboxId:C,agentProfileId:w,agentProfileKind:T}=t;if(o.getActiveBackend().backend.kind===`cloud`)return d.createCloudAppConversation({initial_message:n?{role:`user`,content:[{type:`text`,text:n}]}:null,title:r??null,selected_repository:u?.selected_repository??null,selected_branch:u?.selected_branch??null,git_provider:u?.git_provider??null,plugins:i??null,parent_conversation_id:b??null,agent_type:S,sandbox_id:C??null,agent_profile_id:w??null,trigger:`gui`});let[E,D]=await Promise.all([g.default.getSettings(),h.default.listProfiles().catch(()=>void 0)]),O=y.resolveTitleLlmProfile(E.title_llm_profile,D),k=p.default(),A=o.getActiveBackend().backend.host,j=await m.resolveAbsoluteAgentServerPath(f??a.buildConversationWorkingDirForBackend(k,A)),M=f?j:await m.resolveAbsoluteAgentServerPath(a.getWorkspaceRootForBackend(A)),N=_??(f?`local_repo`:`new_worktree`),P=await v.buildStartConversationRequestWithEncryptedSettings({settings:E,query:n,conversationInstructions:r,plugins:i,conversationId:k,parentConversationId:b,workingDir:j,hooksProjectDir:M,worktree:N===`new_worktree`,agentProfileId:w,agentProfileKind:T,titleLlmProfile:O}),F=await c.getTelemetryDistinctId(),I=await new e.ConversationClient(s.getAgentServerClientOptions({timeout:x})).createConversation({...P,...F?{user_id:F}:{}}),L=o.getEffectiveLocalBackend();if(!L)throw new s.NoBackendAvailableError;return(u?.selected_repository||f)&&l.setStoredConversationMetadata(I.id,{selected_repository:u?.selected_repository??null,selected_branch:u?.selected_branch??null,git_provider:u?.git_provider??null,selected_workspace:f??null,workspace_mode:N}),{id:I.id,created_by_user_id:null,status:`READY`,detail:null,app_conversation_id:I.id,agent_server_url:L.host,request:{initial_message:P.initial_message,plugins:i??null},created_at:I.created_at,updated_at:I.updated_at}}static async createLocalPlanningConversation(t,n){if(o.getActiveBackend().backend.kind===`cloud`)throw Error(`Local planning conversations require a local backend.`);let[r]=await this.batchGetAppConversations([t]),i=await v.buildStartPlanningConversationRequestWithEncryptedSettings({workingDir:r?.workspace?.working_dir??a.getAgentServerWorkingDir(),parentConversationId:t,parentActiveProfileName:r?.agent_kind===`openhands`?r?.active_profile??null:null,parentAgentProfileId:r?.launched_agent_profile?.agent_profile_id??null,initialMessage:n}),c=await new e.ConversationClient(s.getAgentServerClientOptions()).createConversation(i);return l.mergeStoredConversationMetadata(t,{local_planning_conversation_id:c.id}),v.toAppConversation(c)}static async getLocalPlanningConversationIds(e){if(o.getActiveBackend().backend.kind===`cloud`)return[];let t=new Set;try{let[n]=await this.batchGetAppConversations([e]),r=n?.sub_conversation_ids??[];if(r.length>0){let n=await this.batchGetAppConversations(r);for(let r of n)r&&_.isPlannerConversationOf(r,e)&&t.add(r.id)}}catch(t){console.warn(`Failed to read sub-conversations of ${e}`,t)}let n=l.getStoredConversationMetadata(e)?.local_planning_conversation_id;return n&&t.add(n),[...t]}static async getStartTask(e){return o.getActiveBackend().backend.kind===`cloud`?d.getCloudAppConversationStartTask(e):null}static async getVSCodeUrl(e,t,n){let i=await this.resolveConversationWorkingDir(e);return{vscode_url:await new r.VSCodeClient(s.getAgentServerClientOptions({conversationUrl:t,sessionApiKey:n})).getUrl({baseUrl:typeof window<`u`?window.location.origin:void 0,workspaceDir:i})}}static async getVSCodeStatus(e,t){return new r.VSCodeClient(s.getAgentServerClientOptions({conversationUrl:e,sessionApiKey:t})).getStatus()}static async resolveConversationWorkingDir(e){let[t]=await this.batchGetAppConversations([e]);return t?.workspace?.working_dir??a.getAgentServerWorkingDir()}static async batchGetAppConversations(t){return t.length===0?[]:o.getActiveBackend().backend.kind===`cloud`?d.batchGetCloudConversations(t):B(await new e.ConversationClient(s.getAgentServerClientOptions()).getConversations(t)).map(e=>v.toAppConversation(e))}static async updateConversationPublicFlag(e,t){if(o.getActiveBackend().backend.kind!==`cloud`)throw Error(`Public sharing requires a cloud backend.`);return d.updateCloudConversationPublicFlag(e,t)}static async updateConversationRepository(e,t,n,r){t?l.setStoredConversationMetadata(e,{...l.getStoredConversationMetadata(e)??{},selected_repository:t,selected_branch:n??null,git_provider:r??null}):l.removeStoredConversationMetadata(e);let[i]=await this.batchGetAppConversations([e]);return W(i,e)}static async readConversationFile(e,n){if(o.getActiveBackend().backend.kind===`cloud`)return d.readCloudConversationFile(e,R(n??`/workspace/project/.agents_tmp/PLAN.md`,`/workspace/project`));let r=await this.resolveConversationWorkingDir(e),i=R(n??`${r}/.agents_tmp/PLAN.md`,r);return new t.FileClient(s.getAgentServerClientOptions()).downloadTextFile(i)}static async downloadConversation(e){return o.getActiveBackend().backend.kind===`cloud`?d.downloadCloudConversation(e):new t.FileClient(s.getAgentServerClientOptions()).downloadTrajectory(e)}static async getHooks(e){return v.emptyHooksResponse()}static async getRuntimeConversation(t,n,r){let i=z(await new e.ConversationClient(s.getAgentServerClientOptions({conversationUrl:n,sessionApiKey:r})).getConversation(t));return{id:i.id,title:i.title?.trim()?i.title:v.getDefaultConversationTitle(i.id),metrics:A(i.metrics),created_at:i.created_at,updated_at:i.updated_at,status:U(i.execution_status),stats:i.stats??{usage_to_metrics:{}}}}static async condenseConversation(t,n,r){let a=o.getActiveBackend().backend;if(a.kind===`cloud`&&n){await u.callCloudProxy({backend:a,method:`POST`,hostOverride:i.buildHttpBaseUrl(n),path:`/api/conversations/${t}/condense`,authMode:`session-api-key`,sessionApiKey:r});return}await new e.ConversationClient(s.getAgentServerClientOptions({conversationUrl:n,sessionApiKey:r})).condenseConversation(t)}static async searchConversations(t=20,n){return o.getActiveBackend().backend.kind===`cloud`?d.searchCloudConversations(t,n):v.toConversationPage(V(await new e.ConversationClient(s.getAgentServerClientOptions()).searchConversations({limit:t,page_id:n,sort_order:f.ConversationSortOrder.UPDATED_AT_DESC})))}static async deleteConversation(t){if(o.getActiveBackend().backend.kind===`cloud`){await d.deleteCloudConversation(t),l.removeStoredConversationMetadata(t);return}let n=await this.getLocalPlanningConversationIds(t),r=new e.ConversationClient(s.getAgentServerClientOptions());await Promise.all(n.map(async e=>{try{await r.deleteConversation(e)}catch(t){console.warn(`Failed to delete planning conversation ${e}`,t)}l.removeStoredConversationMetadata(e)})),await r.deleteConversation(t),l.removeStoredConversationMetadata(t)}static async updateConversationTitle(t,n){if(o.getActiveBackend().backend.kind===`cloud`)return d.updateCloudConversationTitle(t,n);await new e.ConversationClient(s.getAgentServerClientOptions()).updateConversation(t,{title:n});let[r]=await this.batchGetAppConversations([t]);return W(r,t)}static async updateConversationTags(t,n){await new e.ConversationClient(s.getAgentServerClientOptions()).updateConversation(t,{tags:n});let[r]=await this.batchGetAppConversations([t]);return W(r,t)}static async forkConversation(t,n,r){if(o.getActiveBackend().backend.kind===`cloud`)throw Error(`Branching a conversation isn't supported on the cloud backend yet.`);let i=await new e.ConversationClient(s.getAgentServerClientOptions()).forkConversation(t,{from_event_id:n,...r?{title:r}:{}}),a=l.getStoredConversationMetadata(t);return a&&l.setStoredConversationMetadata(i.id,a),i}static async getEventParentId(t,n){return(await new e.ConversationClient(s.getAgentServerClientOptions()).getEvent(t,n)).parent_id??void 0}static async switchProfile(t,r){let{backend:i}=o.getActiveBackend();if(i.kind===`cloud`){if(!t){await h.default.activateProfile(r);return}await u.callCloudProxy({backend:i,method:`POST`,path:`/api/v1/app-conversations/${t}/switch_profile`,body:{profile_name:r}});return}if(!t){await new n.ProfilesClient(s.getAgentServerClientOptions()).activateProfile(r);return}let a=s.getAgentServerClientOptions(),c=new e.ConversationClient(a),l=await new n.ProfilesClient(a).getProfile(r,{exposeSecrets:`encrypted`}),d=typeof l.config.model==`string`?l.config.model:``;if(!d)throw Error(`Profile '${r}' has no model.`);await v.assertSubscriptionAuthReady({llm:l.config}),await c.switchLLM(t,{...l.config,model:d,stream:!0,usage_id:`profile:${r}:${p.default()}`})}static async switchAcpModel(t,n){let{backend:r}=o.getActiveBackend();if(r.kind===`cloud`){await u.callCloudProxy({backend:r,method:`POST`,path:`/api/v1/app-conversations/${t}/switch_acp_model`,body:{model:n}});return}await new e.ConversationClient(s.getAgentServerClientOptions()).switchAcpModel(t,n)}};exports.default=G;
2
2
  //# sourceMappingURL=agent-server-conversation-service.api.cjs.map